コード例 #1
0
ファイル: test_connection.py プロジェクト: urtens/captain
    def test_gc(self, docker_client):
        # given
        (docker_conn1, docker_conn2, docker_conn3) = ClientMock().mock_two_docker_nodes(docker_client)

        # when
        connection = Connection(self.config)
        # trigger gc
        connection.get_instances()

        # then
        # 61c2695fd82a is a freshly created but not yet started container and so shouldn't be gc'd
        self.assertNotIn(call("61c2695fd82a"), docker_conn2.start.mock_calls)

        # 61c2695fd82b is an old container with epoch start and exit times and should be gc'd
        docker_conn2.remove_container.assert_has_calls([call("61c2695fd82b")])
コード例 #2
0
    def test_gc(self, docker_client):
        # given
        (docker_conn1, docker_conn2,
         docker_conn3) = ClientMock().mock_two_docker_nodes(docker_client)

        # when
        connection = Connection(self.config, self.docker_node_resolver)
        # trigger gc
        connection.get_instances()

        # then
        # 61c2695fd82a is a freshly created but not yet started container and so shouldn't be gc'd
        self.assertNotIn(call("61c2695fd82a"), docker_conn2.start.mock_calls)

        # 61c2695fd82b is an old container with epoch start and exit times and should be gc'd
        docker_conn2.remove_container.assert_has_calls([call("61c2695fd82b")])
コード例 #3
0
    def test_returns_all_instances_with_ports(self, docker_client, time):
        # given
        (docker_conn1, docker_conn2, docker_conn3) = ClientMock().mock_two_docker_nodes(docker_client)
        time.mktime = MagicMock(return_value=1409842966.0)
        time.localtime = MagicMock()

        # when
        connection = Connection(self.config)
        instances = connection.get_instances()

        # then
        self.assertEqual(3, instances.__len__())

        instance1 = instances[0]
        self.assertEqual("656ca7c307d178", instance1["id"])
        self.assertEqual("ers-checking-frontend-27", instance1["app"])
        self.assertEqual("node-1", instance1["node"])
        self.assertEqual(9225, instance1["port"])
        self.assertEqual("https://host/ers-checking-frontend_27.tgz", instance1["slug_uri"])
        self.assertEqual(2, instance1["environment"].__len__())
        self.assertEqual("-Dapplication.secret=H7dVw$PlJiD)^U,oa4TA1pa]pT:4ETLqbL&2P=n6T~p,A*}^.Y46@PQOV~9(B09Hc]t7-hsf~&@w=zH -Dapplication.log=INFO -Dlogger.resource=/application-json-logger.xml -Dhttp.port=8080 -Dgovuk-tax.Prod.google-analytics.token=UA-43414424-2 -Drun.mode=Prod -Dsession.secure=true -Dsession.httpOnly=true -Dcookie.encryption.key=fqpLDZ4smuDsekHkrEBlCA==", instance1["environment"]["HMRC_CONFIG"])
        self.assertEqual("-Xmx256m -Xms256m", instance1["environment"]["JAVA_OPTS"])

        instance2 = instances[1]
        self.assertEqual("eba8bea2600029", instance2["id"])
        self.assertEqual("paye", instance2["app"])
        self.assertEqual("node-1", instance2["node"])
        self.assertEqual(9317, instance2["port"])
        self.assertEqual("https://host/paye_216.tgz", instance2["slug_uri"])
        self.assertEqual(2, instance2["environment"].__len__())
        self.assertEqual("-Dapplication.log=INFO -Drun.mode=Prod -Dlogger.resource=/application-json-logger.xml -Dhttp.port=8080", instance2["environment"]["HMRC_CONFIG"])
        self.assertEqual("-Xmx256m -Xms256m", instance2["environment"]["JAVA_OPTS"])

        instance3 = instances[2]
        self.assertEqual("80be2a9e62ba00", instance3["id"])
        self.assertEqual("paye", instance3["app"])
        self.assertEqual("node-2", instance3["node"])
        self.assertEqual(9317, instance3["port"])
        self.assertEqual(2, instance3["environment"].__len__())
        self.assertEqual("-Dapplication.log=INFO -Drun.mode=Prod -Dlogger.resource=/application-json-logger.xml -Dhttp.port=8080", instance3["environment"]["HMRC_CONFIG"])
        self.assertEqual("-Xmx256m -Xms256m", instance3["environment"]["JAVA_OPTS"])
        # Two containers stopped, one of them for longer than docker_gc_grace_period
        docker_conn1.remove_container.assert_called_with("381587e2978216")
        self.assertEqual(docker_conn1.remove_container.call_count, 1)
        self.assertEqual(docker_conn2.remove_container.call_count, 0)
        # jh23899fg00029 doesn't have captain ports defined and should be ignored.
        self.assertFalse([i for i in instances if i["id"] == "jh23899fg00029"])

        def thing():
            raise ConnectionError()
        self.assertRaises(ConnectionError, thing)
        self.assertRaises(ConnectionError, docker_conn3.containers)
コード例 #4
0
ファイル: test_connection.py プロジェクト: urtens/captain
    def test_returns_all_instances_with_ports(self, docker_client):
        # given
        (docker_conn1, docker_conn2, docker_conn3) = ClientMock().mock_two_docker_nodes(docker_client)

        # when
        connection = Connection(self.config)
        #   get_instances is async and order isn't guaranteed, sort it for the tests
        instances = sorted(connection.get_instances(), key=lambda i: i["id"])

        # then
        self.assertEqual(3, instances.__len__())

        instance1 = instances[0]
        self.assertEqual("656ca7c307d178", instance1["id"])
        self.assertEqual("ers-checking-frontend-27", instance1["app"])
        self.assertEqual("node-1", instance1["node"])
        self.assertEqual(9225, instance1["port"])
        self.assertEqual("https://host/ers-checking-frontend_27.tgz", instance1["slug_uri"])
        self.assertEqual(2, instance1["environment"].__len__())
        self.assertEqual("-Dapplication.secret=H7dVw$PlJiD)^U,oa4TA1pa]pT:4ETLqbL&2P=n6T~p,A*}^.Y46@PQOV~9(B09Hc]t7-hsf~&@w=zH -Dapplication.log=INFO -Dlogger.resource=/application-json-logger.xml -Dhttp.port=8080 -Dgovuk-tax.Prod.google-analytics.token=UA-00000000-0 -Drun.mode=Prod -Dsession.secure=true -Dsession.httpOnly=true -Dcookie.encryption.key=fqpLDZ4smuDsekHkrEBlCA==", instance1["environment"]["HMRC_CONFIG"])
        self.assertEqual("-Xmx256m -Xms256m", instance1["environment"]["JAVA_OPTS"])

        instance2 = instances[2]
        self.assertEqual("eba8bea2600029", instance2["id"])
        self.assertEqual("paye", instance2["app"])
        self.assertEqual("node-1", instance2["node"])
        self.assertEqual(9317, instance2["port"])
        self.assertEqual("https://host/paye_216.tgz", instance2["slug_uri"])
        self.assertEqual(2, instance2["environment"].__len__())
        self.assertEqual("-Dapplication.log=INFO -Drun.mode=Prod -Dlogger.resource=/application-json-logger.xml -Dhttp.port=8080", instance2["environment"]["HMRC_CONFIG"])
        self.assertEqual("-Xmx256m -Xms256m", instance2["environment"]["JAVA_OPTS"])

        instance3 = instances[1]
        self.assertEqual("80be2a9e62ba00", instance3["id"])
        self.assertEqual("paye", instance3["app"])
        self.assertEqual("node-2", instance3["node"])
        self.assertEqual(9317, instance3["port"])
        self.assertEqual(2, instance3["environment"].__len__())
        self.assertEqual("-Dapplication.log=INFO -Drun.mode=Prod -Dlogger.resource=/application-json-logger.xml -Dhttp.port=8080", instance3["environment"]["HMRC_CONFIG"])
        self.assertEqual("-Xmx256m -Xms256m", instance3["environment"]["JAVA_OPTS"])
        # One container stopped
        docker_conn1.remove_container.assert_has_calls([call("381587e2978216")])
        # One container with FinishedAt time of 0 removed
        docker_conn1.remove_container.assert_has_calls([call("3815178hgdasf6")])
        self.assertEqual(docker_conn1.remove_container.call_count, 2)
        self.assertEqual(docker_conn2.remove_container.call_count, 1)
        # jh23899fg00029 doesn't have captain ports defined and should be ignored.
        self.assertFalse([i for i in instances if i["id"] == "jh23899fg00029"])

        self.assertRaises(ConnectionError, docker_conn3.containers)
コード例 #5
0
ファイル: test_connection.py プロジェクト: urtens/captain
    def test_over_capacity(self, docker_client):
        # given
        (mock_client_node1, mock_client_node2, mock_client_node3) = ClientMock().mock_two_docker_nodes(docker_client)

        # when
        connection = Connection(self.config)
        # Force an over capacity error
        current_slot_count = sum([i["slots"] for i in connection.get_instances() if i['node'] == 'node-1'])
        self.assertTrue(current_slot_count != self.config.slots_per_node)

        # then
        self.assertRaises(exceptions.NodeOutOfCapacityException,
                          connection.start_instance, "paye", "http://host/paye-216-slug.tgz", "node-1", None,
                          {'HMRC_CONFIG': "-Dapplication.log=INFO -Drun.mode=Prod -Dlogger.resource=/application-json-logger.xml -Dhttp.port=8080",
                           'JAVA_OPTS': "-Xmx256m -Xms256m"}, self.config.slots_per_node - current_slot_count + 1)
コード例 #6
0
    def test_over_capacity(self, docker_client):
        # given
        (mock_client_node1, mock_client_node2,
         mock_client_node3) = ClientMock().mock_two_docker_nodes(docker_client)

        # when
        connection = Connection(self.config, self.docker_node_resolver)
        # Force an over capacity error
        current_slot_count = sum([
            i["slots"] for i in connection.get_instances()
            if i['node'] == 'node-1'
        ])
        self.assertTrue(current_slot_count != self.config.slots_per_node)

        # then
        self.assertRaises(
            exceptions.NodeOutOfCapacityException, connection.start_instance,
            "paye", "http://host/paye-216-slug.tgz", "node-1", None, {
                'HMRC_CONFIG':
                "-Dapplication.log=INFO -Drun.mode=Prod -Dlogger.resource=/application-json-logger.xml -Dhttp.port=8080",
                'JAVA_OPTS': "-Xmx256m -Xms256m"
            }, self.config.slots_per_node - current_slot_count + 1)
コード例 #7
0
    def test_returns_all_instances_with_ports(self, docker_client, time):
        # given
        (docker_conn1, docker_conn2,
         docker_conn3) = ClientMock().mock_two_docker_nodes(docker_client)
        time.mktime = MagicMock(return_value=1409842966.0)
        time.localtime = MagicMock()

        # when
        connection = Connection(self.config)
        instances = connection.get_instances()

        # then
        self.assertEqual(3, instances.__len__())

        instance1 = instances[0]
        self.assertEqual("656ca7c307d178", instance1["id"])
        self.assertEqual("ers-checking-frontend-27", instance1["app"])
        self.assertEqual("node-1", instance1["node"])
        self.assertEqual(9225, instance1["port"])
        self.assertEqual("https://host/ers-checking-frontend_27.tgz",
                         instance1["slug_uri"])
        self.assertEqual(2, instance1["environment"].__len__())
        self.assertEqual(
            "-Dapplication.secret=H7dVw$PlJiD)^U,oa4TA1pa]pT:4ETLqbL&2P=n6T~p,A*}^.Y46@PQOV~9(B09Hc]t7-hsf~&@w=zH -Dapplication.log=INFO -Dlogger.resource=/application-json-logger.xml -Dhttp.port=8080 -Dgovuk-tax.Prod.google-analytics.token=UA-43414424-2 -Drun.mode=Prod -Dsession.secure=true -Dsession.httpOnly=true -Dcookie.encryption.key=fqpLDZ4smuDsekHkrEBlCA==",
            instance1["environment"]["HMRC_CONFIG"])
        self.assertEqual("-Xmx256m -Xms256m",
                         instance1["environment"]["JAVA_OPTS"])

        instance2 = instances[1]
        self.assertEqual("eba8bea2600029", instance2["id"])
        self.assertEqual("paye", instance2["app"])
        self.assertEqual("node-1", instance2["node"])
        self.assertEqual(9317, instance2["port"])
        self.assertEqual("https://host/paye_216.tgz", instance2["slug_uri"])
        self.assertEqual(2, instance2["environment"].__len__())
        self.assertEqual(
            "-Dapplication.log=INFO -Drun.mode=Prod -Dlogger.resource=/application-json-logger.xml -Dhttp.port=8080",
            instance2["environment"]["HMRC_CONFIG"])
        self.assertEqual("-Xmx256m -Xms256m",
                         instance2["environment"]["JAVA_OPTS"])

        instance3 = instances[2]
        self.assertEqual("80be2a9e62ba00", instance3["id"])
        self.assertEqual("paye", instance3["app"])
        self.assertEqual("node-2", instance3["node"])
        self.assertEqual(9317, instance3["port"])
        self.assertEqual(2, instance3["environment"].__len__())
        self.assertEqual(
            "-Dapplication.log=INFO -Drun.mode=Prod -Dlogger.resource=/application-json-logger.xml -Dhttp.port=8080",
            instance3["environment"]["HMRC_CONFIG"])
        self.assertEqual("-Xmx256m -Xms256m",
                         instance3["environment"]["JAVA_OPTS"])
        # Two containers stopped, one of them for longer than docker_gc_grace_period
        docker_conn1.remove_container.assert_called_with("381587e2978216")
        self.assertEqual(docker_conn1.remove_container.call_count, 1)
        self.assertEqual(docker_conn2.remove_container.call_count, 0)
        # jh23899fg00029 doesn't have captain ports defined and should be ignored.
        self.assertFalse([i for i in instances if i["id"] == "jh23899fg00029"])

        def thing():
            raise ConnectionError()

        self.assertRaises(ConnectionError, thing)
        self.assertRaises(ConnectionError, docker_conn3.containers)
コード例 #8
0
    def test_returns_all_instances_with_ports(self, docker_client):
        # given
        (docker_conn1, docker_conn2,
         docker_conn3) = ClientMock().mock_two_docker_nodes(docker_client)

        # when
        connection = Connection(self.config, self.docker_node_resolver)
        #   get_instances is async and order isn't guaranteed, sort it for the tests
        instances = sorted(connection.get_instances(), key=lambda i: i["id"])

        # then
        self.assertEqual(3, instances.__len__())

        instance1 = instances[0]
        self.assertEqual("656ca7c307d178", instance1["id"])
        self.assertEqual("ers-checking-frontend-27", instance1["app"])
        self.assertEqual("node-1", instance1["node"])
        self.assertEqual(9225, instance1["port"])
        self.assertEqual("https://host/ers-checking-frontend_27.tgz",
                         instance1["slug_uri"])
        self.assertEqual(2, instance1["environment"].__len__())
        self.assertEqual(
            "-Dapplication.secret=H7dVw$PlJiD)^U,oa4TA1pa]pT:4ETLqbL&2P=n6T~p,A*}^.Y46@PQOV~9(B09Hc]t7-hsf~&@w=zH -Dapplication.log=INFO -Dlogger.resource=/application-json-logger.xml -Dhttp.port=8080 -Dgovuk-tax.Prod.google-analytics.token=UA-00000000-0 -Drun.mode=Prod -Dsession.secure=true -Dsession.httpOnly=true -Dcookie.encryption.key=fqpLDZ4smuDsekHkrEBlCA==",
            instance1["environment"]["HMRC_CONFIG"])
        self.assertEqual("-Xmx256m -Xms256m",
                         instance1["environment"]["JAVA_OPTS"])

        instance2 = instances[2]
        self.assertEqual("eba8bea2600029", instance2["id"])
        self.assertEqual("paye", instance2["app"])
        self.assertEqual("node-1", instance2["node"])
        self.assertEqual(9317, instance2["port"])
        self.assertEqual("https://host/paye_216.tgz", instance2["slug_uri"])
        self.assertEqual(2, instance2["environment"].__len__())
        self.assertEqual(
            "-Dapplication.log=INFO -Drun.mode=Prod -Dlogger.resource=/application-json-logger.xml -Dhttp.port=8080",
            instance2["environment"]["HMRC_CONFIG"])
        self.assertEqual("-Xmx256m -Xms256m",
                         instance2["environment"]["JAVA_OPTS"])

        instance3 = instances[1]
        self.assertEqual("80be2a9e62ba00", instance3["id"])
        self.assertEqual("paye", instance3["app"])
        self.assertEqual("node-2", instance3["node"])
        self.assertEqual(9317, instance3["port"])
        self.assertEqual(2, instance3["environment"].__len__())
        self.assertEqual(
            "-Dapplication.log=INFO -Drun.mode=Prod -Dlogger.resource=/application-json-logger.xml -Dhttp.port=8080",
            instance3["environment"]["HMRC_CONFIG"])
        self.assertEqual("-Xmx256m -Xms256m",
                         instance3["environment"]["JAVA_OPTS"])
        # One container stopped
        docker_conn1.remove_container.assert_has_calls(
            [call("381587e2978216")])
        # One container with FinishedAt time of 0 removed
        docker_conn1.remove_container.assert_has_calls(
            [call("3815178hgdasf6")])
        self.assertEqual(docker_conn1.remove_container.call_count, 2)
        self.assertEqual(docker_conn2.remove_container.call_count, 1)
        # jh23899fg00029 doesn't have captain ports defined and should be ignored.
        self.assertFalse([i for i in instances if i["id"] == "jh23899fg00029"])

        self.assertRaises(ConnectionError, docker_conn3.containers)