def test_containers_are_built(
        self,
        mocked_redis_runner,
        mocked_consul_runner,
        mocked_postgres_runner,
        mocked_gunicorn_runner,
        mocked_registrator_runner,
        mocked_solr_runner,
    ):
        """
        Tests that the containers relevant for the test environment are started
        """

        config = {}
        services = config.setdefault(
            "services", [{"name": "adsws", "repository": "adsabs", "tag": "0596971c755855ff3f9caed2f96af7f9d5792cc2"}]
        )

        dependencies = config.setdefault(
            "dependencies",
            [
                {"name": "redis", "image": "redis:2.8.9"},
                {"name": "postgres", "image": "postgres:9.3"},
                {"name": "registrator", "image": "gliderlabs/registrator:latest"},
                {"name": "solr", "image": "adsabs/montysolr:v48.1.0.3"},
                {"name": "consul", "image": "adsabs/consul:v1.0.0"},
            ],
        )

        instance_gunicorn_runner = mocked_gunicorn_runner.return_value
        instance_redis_runner = mocked_redis_runner.return_value
        instance_consul_runner = mocked_consul_runner.return_value
        instance_postgres_runner = mocked_postgres_runner.return_value
        instance_registrator_runner = mocked_registrator_runner.return_value
        instance_solr_runner = mocked_solr_runner.return_value

        instance_list = [
            instance_gunicorn_runner,
            instance_redis_runner,
            instance_consul_runner,
            instance_postgres_runner,
            instance_registrator_runner,
            instance_solr_runner,
        ]

        for instance in instance_list:
            instance.start.return_value = None
            instance.provision.return_value = None

        instance_registrator_runner.start.return_value = None
        instance_registrator_runner.provision.return_value = None

        start_test_environment(test_id=None, config=config)

        for instance in instance_list:

            self.assertTrue(instance.start.called, msg="Instance {} was not called".format(instance))
            instance.provision.has_calls([call(callback=s["name"]) for s in services])
예제 #2
0
    def test_start_test_environment_task(self):
        """
        Tests that the environment is correctly setup, the containers are
        running and provisioned.
        """

        start_test_environment(test_id='livetests', config=self.config)

        # Check redis is running
        redis_info = self.helper_get_container_values('redis', 6379)
        rs = redis.Redis('localhost', port=redis_info['port'])
        try:
            rs.client_list()
        except redis.ConnectionError as e:
            self.fail('Redis cache has not started: {}'.format(e))

        # Check postgres is running
        postgres_info = self.helper_get_container_values('postgres', 5432)
        postgres_uri = 'postgresql://postgres:@{host}:{port}'.format(
            host=postgres_info['host'],
            port=postgres_info['port']
        )
        try:
            engine = create_engine(postgres_uri)
            engine.connect()
        except OperationalError as e:
            self.fail('Postgresql database has not started: {}'.format(e))

        # Check solr is running
        solr_info = self.helper_get_container_values('solr', 8983)
        response = requests.get('http://{host}:{port}'.format(
                host=solr_info['host'],
                port=solr_info['port']
            )
        )
        self.assertEqual(
            response.status_code,
            404
        )

        # Check consul is running
        consul_info = self.helper_get_container_values('consul', 8500)
        session = Consul(host=consul_info['host'], port=consul_info['port'])
        self.assertEqual(
            session.kv.get('config/adsws/staging/DEBUG'),
            "false"
        )

        self.assertEqual(
            session.kv.get('config/adsws/staging/SQLALCHEMY_DATABASE_URI'),
            '"postgresql+psycopg2://postgres:@{}:{}/adsws"'.format(
                '172.17.42.1',
                postgres_info['port']
            )
        )

        # Check registrator is running
        registrator_info = self.helper_get_container_values('registrator', None)
예제 #3
0
    def test_start_test_environment_task(self):
        """
        Tests that the environment is correctly setup, the containers are
        running and provisioned.
        """

        start_test_environment(test_id='livetests', config=self.config)

        # Check redis is running
        redis_info = self.helper_get_container_values('redis', 6379)
        rs = redis.Redis('localhost', port=redis_info['port'])
        try:
            rs.client_list()
        except redis.ConnectionError as e:
            self.fail('Redis cache has not started: {}'.format(e))

        # Check postgres is running
        postgres_info = self.helper_get_container_values('postgres', 5432)
        postgres_uri = 'postgresql://postgres:@{host}:{port}'.format(
            host=postgres_info['host'], port=postgres_info['port'])
        try:
            engine = create_engine(postgres_uri)
            engine.connect()
        except OperationalError as e:
            self.fail('Postgresql database has not started: {}'.format(e))

        # Check solr is running
        solr_info = self.helper_get_container_values('solr', 8983)
        response = requests.get('http://{host}:{port}'.format(
            host=solr_info['host'], port=solr_info['port']))
        self.assertEqual(response.status_code, 404)

        # Check consul is running
        consul_info = self.helper_get_container_values('consul', 8500)
        session = Consul(host=consul_info['host'], port=consul_info['port'])
        self.assertEqual(session.kv.get('config/adsws/staging/DEBUG'), "false")

        self.assertEqual(
            session.kv.get('config/adsws/staging/SQLALCHEMY_DATABASE_URI'),
            '"postgresql+psycopg2://postgres:@{}:{}/adsws"'.format(
                '172.17.42.1', postgres_info['port']))

        # Check registrator is running
        registrator_info = self.helper_get_container_values(
            'registrator', None)
예제 #4
0
    def test_containers_are_built(self, mocked_redis_runner,
                                  mocked_consul_runner, mocked_postgres_runner,
                                  mocked_gunicorn_runner,
                                  mocked_registrator_runner,
                                  mocked_solr_runner):
        """
        Tests that the containers relevant for the test environment are started
        """

        config = {}
        services = config.setdefault(
            'services', [{
                'name': 'adsws',
                'repository': 'adsabs',
                'tag': '0596971c755855ff3f9caed2f96af7f9d5792cc2'
            }])

        dependencies = config.setdefault(
            'dependencies', [{
                "name": "redis",
                "image": "redis:2.8.9",
            }, {
                "name": "postgres",
                "image": "postgres:9.3",
            }, {
                "name": "registrator",
                "image": "gliderlabs/registrator:latest"
            }, {
                "name": "solr",
                "image": "adsabs/montysolr:v48.1.0.3"
            }, {
                "name": "consul",
                "image": "adsabs/consul:v1.0.0",
            }])

        instance_gunicorn_runner = mocked_gunicorn_runner.return_value
        instance_redis_runner = mocked_redis_runner.return_value
        instance_consul_runner = mocked_consul_runner.return_value
        instance_postgres_runner = mocked_postgres_runner.return_value
        instance_registrator_runner = mocked_registrator_runner.return_value
        instance_solr_runner = mocked_solr_runner.return_value

        instance_list = [
            instance_gunicorn_runner, instance_redis_runner,
            instance_consul_runner, instance_postgres_runner,
            instance_registrator_runner, instance_solr_runner
        ]

        for instance in instance_list:
            instance.start.return_value = None
            instance.provision.return_value = None

        instance_registrator_runner.start.return_value = None
        instance_registrator_runner.provision.return_value = None

        start_test_environment(test_id=None, config=config)

        for instance in instance_list:

            self.assertTrue(instance.start.called,
                            msg='Instance {} was not called'.format(instance))
            instance.provision.has_calls(
                [call(callback=s['name']) for s in services])