def testUpdateLabs_calculateHostCountByHarnessVersion(self):
        host_count_by_harness_version_1 = {
            'v1': 5,
            'v2': 3,
        }
        cluster1 = datastore_test_util.CreateCluster(
            'cluster1',
            lab_name='alab',
            host_count_by_harness_version=host_count_by_harness_version_1)
        host_count_by_harness_version_2 = {
            'v1': 5,
            'v3': 7,
        }
        cluster2 = datastore_test_util.CreateCluster(
            'cluster2',
            lab_name='alab',
            host_count_by_harness_version=host_count_by_harness_version_2)

        device_monitor._UpdateLabs([cluster1, cluster2])
        lab_info = datastore_entities.LabInfo.get_by_id('alab')

        expected_host_count_by_harness_version = {
            'v1': 10,
            'v2': 3,
            'v3': 7,
        }
        self.assertDictEqual(expected_host_count_by_harness_version,
                             lab_info.host_count_by_harness_version)
 def testUpdateLabs_withUnknownLabFromClusterInfo(self):
     cluster1 = datastore_test_util.CreateCluster('cluster_nolabname',
                                                  lab_name=None)
     device_monitor._UpdateLabs([cluster1])
     labs = datastore_entities.LabInfo.query()
     lab_names = {lab.lab_name for lab in labs}
     self.assertCountEqual(['UNKNOWN'], lab_names)
 def testUpdateLabs_calculateHostUpdateStateSummaryWithExistingLab(self):
     cluster1 = datastore_test_util.CreateCluster(
         'cluster1',
         lab_name='alab',
         host_update_state_summary=datastore_entities.
         HostUpdateStateSummary(total=13,
                                pending=1,
                                syncing=2,
                                shutting_down=3,
                                restarting=4,
                                errored=3))
     cluster2 = datastore_test_util.CreateCluster(
         'cluster2',
         lab_name='alab',
         host_update_state_summary=datastore_entities.
         HostUpdateStateSummary(total=14,
                                shutting_down=3,
                                restarting=4,
                                errored=2,
                                timed_out=2,
                                succeeded=1,
                                unknown=2))
     device_monitor._UpdateLabs([cluster1, cluster2])
     lab_info = datastore_entities.LabInfo.get_by_id('alab')
     self.assertEqual(27, lab_info.host_update_state_summary.total)
     self.assertEqual(1, lab_info.host_update_state_summary.pending)
     self.assertEqual(2, lab_info.host_update_state_summary.syncing)
     self.assertEqual(6, lab_info.host_update_state_summary.shutting_down)
     self.assertEqual(8, lab_info.host_update_state_summary.restarting)
     self.assertEqual(5, lab_info.host_update_state_summary.errored)
     self.assertEqual(2, lab_info.host_update_state_summary.timed_out)
     self.assertEqual(1, lab_info.host_update_state_summary.succeeded)
     self.assertEqual(2, lab_info.host_update_state_summary.unknown)
 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 testUpdateLabs_calculateUpdateStateSummaryPerVersionFromClusters(self):
        cluster1 = datastore_test_util.CreateCluster(
            'cluster1',
            lab_name='alab',
            host_update_state_summaries_by_version=[
                datastore_entities.HostUpdateStateSummary(total=17,
                                                          pending=1,
                                                          syncing=2,
                                                          shutting_down=3,
                                                          restarting=4,
                                                          errored=3,
                                                          timed_out=1,
                                                          succeeded=3,
                                                          target_version='v1'),
                datastore_entities.HostUpdateStateSummary(total=6,
                                                          pending=1,
                                                          syncing=1,
                                                          shutting_down=1,
                                                          restarting=1,
                                                          errored=2,
                                                          target_version='v2'),
            ])
        cluster2 = datastore_test_util.CreateCluster(
            'cluster2',
            lab_name='alab',
            host_update_state_summaries_by_version=[
                datastore_entities.HostUpdateStateSummary(total=11,
                                                          pending=2,
                                                          syncing=2,
                                                          shutting_down=2,
                                                          restarting=2,
                                                          errored=0,
                                                          timed_out=2,
                                                          succeeded=1,
                                                          target_version='v1'),
                datastore_entities.HostUpdateStateSummary(total=7,
                                                          pending=2,
                                                          syncing=0,
                                                          shutting_down=2,
                                                          restarting=1,
                                                          errored=2,
                                                          target_version='v3'),
            ])

        device_monitor._UpdateLabs([cluster1, cluster2])

        lab_info = datastore_entities.LabInfo.get_by_id('alab')
        version_to_summaries = {
            summary.target_version: summary
            for summary in lab_info.host_update_state_summaries_by_version
        }

        self.assertEqual(28, version_to_summaries['v1'].total)
        self.assertEqual(3, version_to_summaries['v1'].pending)
        self.assertEqual(4, version_to_summaries['v1'].syncing)
        self.assertEqual(5, version_to_summaries['v1'].shutting_down)
        self.assertEqual(6, version_to_summaries['v1'].restarting)
        self.assertEqual(3, version_to_summaries['v1'].errored)
        self.assertEqual(3, version_to_summaries['v1'].timed_out)
        self.assertEqual(4, version_to_summaries['v1'].succeeded)
        self.assertEqual(0, version_to_summaries['v1'].unknown)

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

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