Example #1
0
    def test_worker_raises_key_error(self):
        """
        Test that a KeyError is raised if the attributes of a Deployment model,
        that uniquely identifies a record, are not passed.
        """

        worker_payload_1 = {
            'application': 'adsws',
            'environment': 'staging',
        }
        worker_payload_2 = {
            'environment': 'production',
            'commit': 'latest-commit',
        }
        worker_payload_3 = {
            'application': 'graphics',
        }
        worker_payload_4 = {
            'commit': 'latest-commit',
        }
        worker_payload_5 = {
            'environment': 'staging'
        }
        payloads = [worker_payload_1, worker_payload_2, worker_payload_3,
                    worker_payload_4, worker_payload_5]

        worker = DatabaseWriterWorker()

        for payload in payloads:
            with self.assertRaises(KeyError):
                worker.process_payload(payload)
Example #2
0
    def test_worker_raises_key_error(self):
        """
        Test that a KeyError is raised if the attributes of a Deployment model,
        that uniquely identifies a record, are not passed.
        """

        worker_payload_1 = {"application": "adsws", "environment": "staging"}
        worker_payload_2 = {"environment": "production", "version": "latest-commit"}
        worker_payload_3 = {"application": "graphics"}
        worker_payload_4 = {"version": "latest-commit"}
        worker_payload_5 = {"environment": "staging"}
        payloads = [worker_payload_1, worker_payload_2, worker_payload_3, worker_payload_4, worker_payload_5]

        worker = DatabaseWriterWorker()

        for payload in payloads:
            with self.assertRaises(KeyError):
                worker.process_payload(payload)
Example #3
0
    def test_worker_updates_deployed_status(self):
        """
        When a new service is successful in being deployed, it should update any
        other service with the same env/app combination to not being deployed.
        There is most likely a smarter way to do this....
        """

        first_payload = {
            'application': 'staging',
            'environment': 'adsws',
            'commit': 'first-commit',
            'tag': 'first-tag',
            'deployed': True,
            'tested': False
        }
        second_payload = {
            'application': 'staging',
            'environment': 'adsws',
            'commit': 'second-commit',
            'tag': 'second-tag',
            'deployed': True,
            'tested': False
        }

        worker = DatabaseWriterWorker()
        worker.process_payload(first_payload)

        with self.app.session_scope() as session:
            deployment = session.query(Deployment).filter(
                Deployment.commit == 'first-commit'
            ).one()
            self.assertTrue(deployment.deployed)

        worker.process_payload(second_payload)
        with self.app.session_scope() as session:
            deployment_2 = session.query(Deployment).filter(
                Deployment.commit == 'second-commit'
            ).one()
            self.assertTrue(deployment_2.deployed)

            deployment_1 = session.query(Deployment).filter(
                Deployment.commit == 'first-commit'
            ).one()
            self.assertFalse(deployment_1.deployed)
Example #4
0
    def test_worker_overwrites_entry(self):
        """
        Test that the worker overwrites the relevant data in the database
        """

        # Stub the database entry
        with self.app.session_scope() as session:
            deployment = Deployment(
                application='staging',
                environment='adsws',
                commit='latest-commit',
                tag='latest-tag',
                deployed=True,
                tested=False
            )
            session.add(deployment)
            session.commit()

        worker_payload = {
            'application': 'staging',
            'environment': 'adsws',
            'commit': 'latest-commit',
            'tag': 'latest-tag',
            'deployed': True,
            'tested': True,
        }

        worker = DatabaseWriterWorker()
        worker.process_payload(worker_payload)

        with self.app.session_scope() as session:
            deployment = session.query(Deployment).filter(
                Deployment.application == 'staging',
                Deployment.environment == 'adsws',
                Deployment.commit == 'latest-commit'
            ).one()

            self.assertTrue(deployment.tested)
            self.assertTrue(
                deployment.date_last_modified > deployment.date_created
            )
Example #5
0
    def test_worker_writes_to_database(self):
        """
        Test that the worker writes the relevant data to the database
        """
        worker_payload = {
            "application": "staging",
            "environment": "adsws",
            "version": "latest-commit",
            "deployed": True,
            "tested": False,
        }

        worker = DatabaseWriterWorker()
        worker.process_payload(worker_payload)

        with self.app.session_scope() as session:
            deployment = (
                session.query(Deployment)
                .filter(
                    Deployment.application == "staging",
                    Deployment.environment == "adsws",
                    Deployment.version == "latest-commit",
                )
                .one()
            )

            for key in worker_payload:

                expected_value = worker_payload[key]
                stored_value = getattr(deployment, key)

                self.assertEqual(
                    expected_value,
                    stored_value,
                    msg='Attr "{}", expected value: "{}" != stored value: "{}"'.format(
                        key, expected_value, stored_value
                    ),
                )

            self.assertIsInstance(deployment.date_created, datetime)
            self.assertIsInstance(deployment.date_last_modified, datetime)
Example #6
0
    def test_worker_writes_to_database(self):
        """
        Test that the worker writes the relevant data to the database
        """
        worker_payload = {
            'application': 'staging',
            'environment': 'adsws',
            'commit': 'latest-commit',
            'tag': 'latest-tag',
            'deployed': True,
            'tested': False,
        }

        worker = DatabaseWriterWorker()
        worker.process_payload(worker_payload)

        with self.app.session_scope() as session:
            deployment = session.query(Deployment).filter(
                Deployment.application == 'staging',
                Deployment.environment == 'adsws',
                Deployment.commit == 'latest-commit'
            ).one()

            for key in worker_payload:

                expected_value = worker_payload[key]
                stored_value = getattr(deployment, key)

                self.assertEqual(
                    expected_value,
                    stored_value,
                    msg='Attr "{}", expected value: "{}" != stored value: "{}"'
                        .format(key, expected_value, stored_value)
                )

            self.assertIsInstance(deployment.date_created, datetime)
            self.assertIsInstance(deployment.date_last_modified, datetime)
Example #7
0
    def test_worker_overwrites_entry(self):
        """
        Test that the worker overwrites the relevant data in the database
        """

        # Stub the database entry
        with self.app.session_scope() as session:
            deployment = Deployment(
                application="staging", environment="adsws", version="latest-commit", deployed=True, tested=False
            )
            session.add(deployment)
            session.commit()

        worker_payload = {
            "application": "staging",
            "environment": "adsws",
            "version": "latest-commit",
            "deployed": True,
            "tested": True,
        }

        worker = DatabaseWriterWorker()
        worker.process_payload(worker_payload)

        with self.app.session_scope() as session:
            deployment = (
                session.query(Deployment)
                .filter(
                    Deployment.application == "staging",
                    Deployment.environment == "adsws",
                    Deployment.version == "latest-commit",
                )
                .one()
            )

            self.assertTrue(deployment.tested)
            self.assertTrue(deployment.date_last_modified > deployment.date_created)
Example #8
0
    def test_worker_updates_deployed_status(self):
        """
        When a new service is successful in being deployed, it should update any
        other service with the same env/app combination to not being deployed.
        There is most likely a smarter way to do this....
        """

        first_payload = {
            "application": "staging",
            "environment": "adsws",
            "version": "first-commit",
            "deployed": True,
            "tested": False,
        }
        second_payload = {
            "application": "staging",
            "environment": "adsws",
            "version": "second-commit",
            "deployed": True,
            "tested": False,
        }

        worker = DatabaseWriterWorker()
        worker.process_payload(first_payload)

        with self.app.session_scope() as session:
            deployment = session.query(Deployment).filter(Deployment.version == "first-commit").one()
            self.assertTrue(deployment.deployed)

        worker.process_payload(second_payload)
        with self.app.session_scope() as session:
            deployment_2 = session.query(Deployment).filter(Deployment.version == "second-commit").one()
            self.assertTrue(deployment_2.deployed)

            deployment_1 = session.query(Deployment).filter(Deployment.version == "first-commit").one()
            self.assertFalse(deployment_1.deployed)