def test_create_instance_host_map(self):
     mh = MatterhornController('http://example.edu')
     fake_hosts = [
         { "base_url": "http://1.1.1.1" },
         { "base_url": "http://2.2.2.2" },
         { "base_url": "https://baz" },
         { "base_url": "https://fizzbuzz" },
         { "base_url": "http://blergh-private"}
     ]
     mh.client.hosts = Mock(return_value=[ServiceHost(x, mh.client) for x in fake_hosts])
     fake_instances = [
         Mock(id=1,
              private_ip_address='1.1.1.1',
              public_dns_name="foo",
              private_dns_name="foo-private"
              ),
         Mock(id=2,
              private_ip_address='2.2.2.2',
              public_dns_name="bar",
              private_dns_name="bar-private"
              ),
         Mock(id=3,
              private_ip_address='3.3.3.3',
              public_dns_name="baz",
              private_dns_name="baz-private"
              ),
         # this one won't explicitly match a host entry so the mapping
         # will be (hackishly) assumed
         Mock(id=4,
              private_ip_address='4.4.4.4',
              public_dns_name="frobozz",
              private_dns_name="frobozz-private"
              ),
         Mock(id=5,
              private_ip_address='5.5.5.5',
              public_dns_name="blergh",
              private_dns_name="blergh-private"
              ),
     ]
     mh.create_instance_host_map(fake_instances)
     expected = {
         1: "http://1.1.1.1",
         2: "http://2.2.2.2",
         3: "https://baz",
         4: "https://fizzbuzz",
         5: "http://blergh-private"
     }
     self.assertEqual(mh.instance_host_map, expected)
 def test_is_in_maintenance(self):
     mh = MatterhornController('http://example.edu')
     mh.instance_host_map = {
         1: "http://foo",
         2: "http://bar"
     }
     fake_hosts = [
         {
             "base_url": "http://foo",
             "maintenance": True
         },
         {
             "base_url": "http://bar",
             "maintenance": False
         }
     ]
     mh.client.hosts = Mock(return_value=[ServiceHost(x, mh.client) for x in fake_hosts])
     self.assertTrue(mh.is_in_maintenance(Mock(id=1)))
     self.assertFalse(mh.is_in_maintenance(Mock(id=2)))
    def test_is_idle(self):

        mh = MatterhornController('http://example.edu')
        mh.instance_host_map = {
            1: "http://foo",
            2: "http://bar"
        }
        fake_stats = {
            'statistics': {
                'service': [
                    {
                        'running': "1",
                        'serviceRegistration': { 'host': 'http://foo' }
                    },
                    {
                        'running': "0",
                        'serviceRegistration': { 'host': 'http://foo' }
                    },
                    {
                        'running': "0",
                        'serviceRegistration': { 'host': 'http://bar' }
                    },
                    {
                        'running': "0",
                        'serviceRegistration': { 'host': 'http://bar' }
                    },
                    {
                        'running': "1",
                        'serviceRegistration': { 'host': 'http://foo' }
                    }
                ]
            }
        }
        mh.client.statistics = Mock(return_value=ServiceStatistics(fake_stats, mh.client))
        self.assertFalse(mh.is_idle(Mock(id=1)))
        self.assertTrue(mh.is_idle(Mock(id=2)))
 def test_queued_job_count(self):
     """
     mockapalooza!
     """
     mh = MatterhornController('http://example.edu')
     mh.client = Mock()
     mh.client.workflows.return_value = [
         Mock(operations=[
             Mock(id="foo",
                  state="RUNNING",
                  job=Mock(children=[
                      Mock(status="RUNNING"),
                      Mock(status="QUEUED"),
                  ])),
             Mock(id="foo",
                  state="RUNNING",
                  job=Mock(children=[
                      Mock(status="RUNNING"),
                      Mock(status="QUEUED")
                  ])),
         ]),
         Mock(operations=[
             Mock(id="foo",
                  state="RUNNING",
                  job=Mock(children=[
                      Mock(status="QUEUED"),
                      Mock(status="QUEUED")
                  ])),
             Mock(id="bar",
                  state="RUNNING",
                  job=Mock(children=[
                      Mock(status="QUEUED"),
                      Mock(status="QUEUED")
                  ])),
             Mock(id="foo",
                  state="INSTANTIATED")
         ]),
         Mock(operations=[
             Mock(id="foo",
                  state="INSTANTIATED"),
             Mock(id="foo",
                  state="RUNNING",
                  job=Mock(children=[
                      Mock(status="RUNNING"),
                      Mock(status="RUNNING")
                  ])),
             Mock(id="bar",
                  state="WAITING",
                  job=Mock(children=[
                      Mock(status="QUEUED"),
                      Mock(status="QUEUED")
                  ])),
             Mock(id="baz",
                  state="RUNNING",
                  job=Mock(children=[
                      Mock(status="RUNNING"),
                      Mock(status="QUEUED")
                  ]))
         ])
     ]
     self.assertEqual(mh.queued_job_count(), 9)
     self.assertEqual(mh.queued_job_count(operation_types=["foo"]), 4)
     self.assertEqual(mh.queued_job_count(operation_types=["bar"]), 4)
     self.assertEqual(mh.queued_job_count(operation_types=["foo","bar"]), 8)
     self.assertEqual(mh.queued_job_count(operation_types=["foo","bar","baz"]), 9)
 def test_service_stats(self):
     mh = MatterhornController('http://example.edu')
     mh.client.statistics = Mock(return_value={'foo': 1})
     stats = mh.service_stats()
     self.assertEqual(stats['foo'], 1)