def testUpdateClusters(self, _):
     # Test counting devices for a cluster
     hosts = device_monitor._ScanHosts()
     device_monitor._UpdateClusters(hosts)
     cluster = datastore_entities.ClusterInfo.get_by_id('free')
     self.assertEqual('alab', cluster.lab_name)
     self.assertEqual(5, cluster.total_devices)
     self.assertEqual(2, cluster.available_devices)
     self.assertEqual(2, cluster.allocated_devices)
     self.assertEqual(1, cluster.offline_devices)
     cluster = datastore_entities.ClusterInfo.get_by_id('presubmit')
     self.assertEqual('alab', cluster.lab_name)
     self.assertEqual(3, cluster.total_devices)
     self.assertEqual(0, cluster.available_devices)
     self.assertEqual(1, cluster.allocated_devices)
     self.assertEqual(2, cluster.offline_devices)
     cluster = datastore_entities.ClusterInfo.get_by_id('dockerized-tf-gke')
     self.assertEqual('cloud-tf', cluster.lab_name)
     self.assertEqual(1, cluster.total_devices)
     self.assertEqual(1, cluster.available_devices)
     self.assertEqual(0, cluster.allocated_devices)
     self.assertEqual(0, cluster.offline_devices)
     cluster = datastore_entities.ClusterInfo.get_by_id(
         common.UNKNOWN_CLUSTER_NAME)
     self.assertEqual('mh', cluster.lab_name)
     self.assertEqual(0, cluster.total_devices)
     self.assertEqual(0, cluster.available_devices)
     self.assertEqual(0, cluster.allocated_devices)
     self.assertEqual(0, cluster.offline_devices)
 def testUpdateClusters_calculateHostUpdateStateSummary(self):
     cluster_name = 'cluster1'
     host1 = datastore_test_util.CreateHost(cluster_name,
                                            'host1.mtv',
                                            lab_name='alab')
     host2 = datastore_test_util.CreateHost(cluster_name,
                                            'host2.mtv',
                                            lab_name='alab')
     host3 = datastore_test_util.CreateHost(cluster_name,
                                            'host3.mtv',
                                            lab_name='alab')
     host4 = datastore_test_util.CreateHost(cluster_name,
                                            'host4.mtv',
                                            lab_name='alab')
     host5 = datastore_test_util.CreateHost(cluster_name,
                                            'host5.mtv',
                                            lab_name='alab')
     host6 = datastore_test_util.CreateHost(cluster_name,
                                            'host6.mtv',
                                            lab_name='alab')
     host7 = datastore_test_util.CreateHost(cluster_name,
                                            'host7.mtv',
                                            lab_name='alab')
     host8 = datastore_test_util.CreateHost(cluster_name,
                                            'host8.mtv',
                                            lab_name='alab')
     host9 = datastore_test_util.CreateHost(cluster_name,
                                            'host9.mtv',
                                            lab_name='alab')
     datastore_test_util.CreateHostUpdateState(
         host1.hostname, state=api_messages.HostUpdateState.SYNCING)
     datastore_test_util.CreateHostUpdateState(
         host2.hostname, state=api_messages.HostUpdateState.SYNCING)
     datastore_test_util.CreateHostUpdateState(
         host3.hostname, state=api_messages.HostUpdateState.RESTARTING)
     datastore_test_util.CreateHostUpdateState(
         host4.hostname, state=api_messages.HostUpdateState.ERRORED)
     datastore_test_util.CreateHostUpdateState(
         host5.hostname, state=api_messages.HostUpdateState.PENDING)
     datastore_test_util.CreateHostUpdateState(
         host6.hostname, state=api_messages.HostUpdateState.TIMED_OUT)
     datastore_test_util.CreateHostUpdateState(
         host7.hostname, state=api_messages.HostUpdateState.SUCCEEDED)
     datastore_test_util.CreateHostUpdateState(
         host8.hostname, state=api_messages.HostUpdateState.SHUTTING_DOWN)
     datastore_test_util.CreateHostUpdateState(
         host9.hostname, state=api_messages.HostUpdateState.UNKNOWN)
     device_monitor._UpdateClusters(
         [host1, host2, host3, host4, host5, host6, host7, host8, host9])
     cluster = datastore_entities.ClusterInfo.get_by_id(cluster_name)
     self.assertEqual(9, cluster.host_update_state_summary.total)
     self.assertEqual(1, cluster.host_update_state_summary.pending)
     self.assertEqual(2, cluster.host_update_state_summary.syncing)
     self.assertEqual(1, cluster.host_update_state_summary.shutting_down)
     self.assertEqual(1, cluster.host_update_state_summary.restarting)
     self.assertEqual(1, cluster.host_update_state_summary.errored)
     self.assertEqual(1, cluster.host_update_state_summary.timed_out)
     self.assertEqual(1, cluster.host_update_state_summary.succeeded)
     self.assertEqual(1, cluster.host_update_state_summary.unknown)
 def testUpdateClusters_deleteCluster(self):
     # Test counting devices for a cluster without host
     # Cluster previously had devices
     cluster = datastore_entities.ClusterInfo(id='cluster_to_delete',
                                              cluster='cluster_to_delete',
                                              total_devices=5,
                                              available_devices=1,
                                              allocated_devices=1,
                                              offline_devices=3)
     cluster.put()
     device_monitor._UpdateClusters([])
     self.assertIsNone(
         datastore_entities.ClusterInfo.get_by_id('cluster_to_delete'))
    def testUpdateClusters_calculateHostCountByHarnessVersion(self):
        cluster_name = 'cluster1'
        host1 = datastore_test_util.CreateHost(cluster_name,
                                               'host1.mtv',
                                               lab_name='alab',
                                               test_harness_version='v1')
        host2 = datastore_test_util.CreateHost(cluster_name,
                                               'host2.mtv',
                                               lab_name='alab',
                                               test_harness_version='v1')
        host3 = datastore_test_util.CreateHost(cluster_name,
                                               'host3.mtv',
                                               lab_name='alab',
                                               test_harness_version='v1')
        host4 = datastore_test_util.CreateHost(cluster_name,
                                               'host4.mtv',
                                               lab_name='alab',
                                               test_harness_version='v2')
        host5 = datastore_test_util.CreateHost(cluster_name,
                                               'host5.mtv',
                                               lab_name='alab',
                                               test_harness_version='v3a')
        host6 = datastore_test_util.CreateHost(cluster_name,
                                               'host6.mtv',
                                               lab_name='alab',
                                               test_harness_version='v3a')
        host7 = datastore_test_util.CreateHost(cluster_name,
                                               'host7.mtv',
                                               lab_name='alab',
                                               test_harness_version='v3a')
        host8 = datastore_test_util.CreateHost(cluster_name,
                                               'host8.mtv',
                                               lab_name='alab',
                                               test_harness_version='v3a')
        host9 = datastore_test_util.CreateHost(cluster_name,
                                               'host9.mtv',
                                               lab_name='alab',
                                               test_harness_version=None)

        device_monitor._UpdateClusters(
            [host1, host2, host3, host4, host5, host6, host7, host8, host9])
        cluster = datastore_entities.ClusterInfo.get_by_id(cluster_name)

        expected_harness_version_counts = {
            'v1': 3,
            'v2': 1,
            'v3a': 4,
            'UNKNOWN': 1,
        }
        self.assertDictEqual(expected_harness_version_counts,
                             cluster.host_count_by_harness_version)
 def testUpdateLabs(self):
     clusters = device_monitor._UpdateClusters(
         [self.host1, self.cloud_host])
     device_monitor._UpdateLabs(clusters)
     labs = datastore_entities.LabInfo.query()
     lab_names = {lab.lab_name for lab in labs}
     self.assertCountEqual({'alab', 'cloud-tf'}, lab_names)
 def testUpdateClusters_noLabNameFound(self):
     cluster_name = 'cluster1'
     hosts = [
         datastore_test_util.CreateHost(cluster_name,
                                        'atl-08.mtv',
                                        lab_name=None),
         datastore_test_util.CreateHost(cluster_name,
                                        'atl-09.mtv',
                                        lab_name=None),
         datastore_test_util.CreateHost(cluster_name,
                                        'atl-10.mtv',
                                        lab_name=None),
     ]
     device_monitor._UpdateClusters(hosts)
     cluster = datastore_entities.ClusterInfo.get_by_id(cluster_name)
     self.assertEqual('UNKNOWN', cluster.lab_name)
    def testUpdateClusters_calculateHostUpdateStateSummaryPerVersion(self):
        cluster_name = 'cluster1'
        host1 = datastore_test_util.CreateHost(cluster_name,
                                               'host1.mtv',
                                               lab_name='alab')
        host2 = datastore_test_util.CreateHost(cluster_name,
                                               'host2.mtv',
                                               lab_name='alab')
        host3 = datastore_test_util.CreateHost(cluster_name,
                                               'host3.mtv',
                                               lab_name='alab')
        host4 = datastore_test_util.CreateHost(cluster_name,
                                               'host4.mtv',
                                               lab_name='alab')
        host5 = datastore_test_util.CreateHost(cluster_name,
                                               'host5.mtv',
                                               lab_name='alab')
        host6 = datastore_test_util.CreateHost(cluster_name,
                                               'host6.mtv',
                                               lab_name='alab')
        host7 = datastore_test_util.CreateHost(cluster_name,
                                               'host7.mtv',
                                               lab_name='alab')
        host8 = datastore_test_util.CreateHost(cluster_name,
                                               'host8.mtv',
                                               lab_name='alab')
        host9 = datastore_test_util.CreateHost(cluster_name,
                                               'host9.mtv',
                                               lab_name='alab')
        datastore_test_util.CreateHostUpdateState(
            host1.hostname,
            state=api_messages.HostUpdateState.SYNCING,
            target_version='v2')
        datastore_test_util.CreateHostUpdateState(
            host2.hostname,
            state=api_messages.HostUpdateState.SYNCING,
            target_version='v2')
        datastore_test_util.CreateHostUpdateState(
            host3.hostname,
            state=api_messages.HostUpdateState.RESTARTING,
            target_version='v2')
        datastore_test_util.CreateHostUpdateState(
            host4.hostname,
            state=api_messages.HostUpdateState.ERRORED,
            target_version='v2')
        datastore_test_util.CreateHostUpdateState(
            host5.hostname,
            state=api_messages.HostUpdateState.PENDING,
            target_version='v2')
        datastore_test_util.CreateHostUpdateState(
            host6.hostname,
            state=api_messages.HostUpdateState.TIMED_OUT,
            target_version='v2')
        datastore_test_util.CreateHostUpdateState(
            host7.hostname,
            state=api_messages.HostUpdateState.SUCCEEDED,
            target_version='v1')
        datastore_test_util.CreateHostUpdateState(
            host8.hostname,
            state=api_messages.HostUpdateState.SHUTTING_DOWN,
            target_version='v2')
        datastore_test_util.CreateHostUpdateState(
            host9.hostname,
            state=api_messages.HostUpdateState.UNKNOWN,
            target_version='v2')

        device_monitor._UpdateClusters(
            [host1, host2, host3, host4, host5, host6, host7, host8, host9])

        cluster = datastore_entities.ClusterInfo.get_by_id(cluster_name)
        version_to_summaries = {
            summary.target_version: summary
            for summary in cluster.host_update_state_summaries_by_version
        }
        self.assertEqual(1, version_to_summaries['v1'].total)
        self.assertEqual(0, version_to_summaries['v1'].pending)
        self.assertEqual(0, version_to_summaries['v1'].syncing)
        self.assertEqual(0, version_to_summaries['v1'].shutting_down)
        self.assertEqual(0, version_to_summaries['v1'].restarting)
        self.assertEqual(0, version_to_summaries['v1'].errored)
        self.assertEqual(0, version_to_summaries['v1'].timed_out)
        self.assertEqual(1, version_to_summaries['v1'].succeeded)
        self.assertEqual(0, version_to_summaries['v1'].unknown)

        self.assertEqual(8, version_to_summaries['v2'].total)
        self.assertEqual(1, version_to_summaries['v2'].pending)
        self.assertEqual(2, version_to_summaries['v2'].syncing)
        self.assertEqual(1, version_to_summaries['v2'].shutting_down)
        self.assertEqual(1, version_to_summaries['v2'].restarting)
        self.assertEqual(1, version_to_summaries['v2'].errored)
        self.assertEqual(1, version_to_summaries['v2'].timed_out)
        self.assertEqual(0, version_to_summaries['v2'].succeeded)
        self.assertEqual(1, version_to_summaries['v2'].unknown)