tests/testthat/test-clusters.R

test_that("list_active_clusters returns empty list when no tasks", {
  skip_on_cran()
  skip_if_not_installed("mockery")

  # Mock ECS client
  ecs_client <- list(
    list_tasks = function(...) {
      list(taskArns = list())
    }
  )

  mockery::stub(list_active_clusters, "get_ecs_client", function(...) {
    ecs_client
  })

  result <- list_active_clusters("us-east-1")

  expect_type(result, "list")
  expect_length(result, 0)
})

test_that("list_active_clusters groups tasks by cluster ID", {
  skip_on_cran()
  skip_if_not_installed("mockery")

  # Mock ECS client
  ecs_client <- list(
    list_tasks = function(...) {
      list(
        taskArns = list(
          "arn:task-1",
          "arn:task-2",
          "arn:task-3"
        )
      )
    },
    describe_tasks = function(...) {
      list(
        tasks = list(
          list(
            taskArn = "arn:task-1",
            startedAt = as.numeric(Sys.time()),
            lastStatus = "RUNNING",
            overrides = list(
              containerOverrides = list(
                list(
                  environment = list(
                    list(name = "CLUSTER_ID", value = "cluster-A")
                  )
                )
              )
            )
          ),
          list(
            taskArn = "arn:task-2",
            startedAt = as.numeric(Sys.time()),
            lastStatus = "RUNNING",
            overrides = list(
              containerOverrides = list(
                list(
                  environment = list(
                    list(name = "CLUSTER_ID", value = "cluster-A")
                  )
                )
              )
            )
          ),
          list(
            taskArn = "arn:task-3",
            startedAt = as.numeric(Sys.time()),
            lastStatus = "RUNNING",
            overrides = list(
              containerOverrides = list(
                list(
                  environment = list(
                    list(name = "CLUSTER_ID", value = "cluster-B")
                  )
                )
              )
            )
          )
        )
      )
    }
  )

  mockery::stub(list_active_clusters, "get_ecs_client", function(...) {
    ecs_client
  })

  result <- list_active_clusters("us-east-1")

  expect_length(result, 2)
  expect_true("cluster-A" %in% names(result))
  expect_true("cluster-B" %in% names(result))

  expect_equal(result[["cluster-A"]]$task_count, 2)
  expect_equal(result[["cluster-B"]]$task_count, 1)
})

test_that("list_active_clusters handles tasks without cluster ID", {
  skip_on_cran()
  skip_if_not_installed("mockery")

  # Mock ECS client
  ecs_client <- list(
    list_tasks = function(...) {
      list(taskArns = list("arn:task-1"))
    },
    describe_tasks = function(...) {
      list(
        tasks = list(
          list(
            taskArn = "arn:task-1",
            startedAt = as.numeric(Sys.time()),
            lastStatus = "RUNNING",
            overrides = list(
              containerOverrides = list(
                list(
                  environment = list()  # No CLUSTER_ID
                )
              )
            )
          )
        )
      )
    }
  )

  mockery::stub(list_active_clusters, "get_ecs_client", function(...) {
    ecs_client
  })

  result <- list_active_clusters("us-east-1")

  # Should return empty list (no cluster ID found)
  expect_length(result, 0)
})

test_that("list_active_clusters handles ECS errors gracefully", {
  skip_on_cran()
  skip_if_not_installed("mockery")

  # Mock ECS client that throws error
  ecs_client <- list(
    list_tasks = function(...) {
      stop("ClusterNotFoundException")
    }
  )

  mockery::stub(list_active_clusters, "get_ecs_client", function(...) {
    ecs_client
  })

  result <- list_active_clusters("us-east-1")

  expect_type(result, "list")
  expect_length(result, 0)
})

test_that("list_active_clusters includes task details", {
  skip_on_cran()
  skip_if_not_installed("mockery")

  start_time <- as.numeric(Sys.time())

  # Mock ECS client
  ecs_client <- list(
    list_tasks = function(...) {
      list(taskArns = list("arn:task-1"))
    },
    describe_tasks = function(...) {
      list(
        tasks = list(
          list(
            taskArn = "arn:task-1",
            startedAt = start_time,
            lastStatus = "RUNNING",
            overrides = list(
              containerOverrides = list(
                list(
                  environment = list(
                    list(name = "CLUSTER_ID", value = "test-cluster")
                  )
                )
              )
            )
          )
        )
      )
    }
  )

  mockery::stub(list_active_clusters, "get_ecs_client", function(...) {
    ecs_client
  })

  result <- list_active_clusters("us-east-1")

  cluster <- result[["test-cluster"]]
  expect_equal(cluster$cluster_id, "test-cluster")
  expect_equal(cluster$task_count, 1)
  expect_length(cluster$tasks, 1)

  task <- cluster$tasks[[1]]
  expect_equal(task$task_arn, "arn:task-1")
  expect_equal(task$started_at, start_time)
  expect_equal(task$status, "RUNNING")
})

Try the starburst package in your browser

Any scripts or data that you put into this service are public.

starburst documentation built on March 19, 2026, 5:08 p.m.