Exemple #1
0
class TestCloudBuildHookWithoutProjectId(unittest.TestCase):
    hook = None  # type: Optional[CloudBuildHook]

    def setUp(self):
        with mock.patch(
            "airflow.providers.google.cloud.hooks.base.CloudBaseHook.__init__",
            new=mock_base_gcp_hook_no_default_project_id,
        ):
            self.hook = CloudBuildHook(gcp_conn_id="test")

    @mock.patch("airflow.providers.google.cloud.hooks.cloud_build.CloudBuildHook._authorize")
    @mock.patch("airflow.providers.google.cloud.hooks.cloud_build.build")
    def test_cloud_build_client_creation(self, mock_build, mock_authorize):
        result = self.hook.get_conn()
        mock_build.assert_called_once_with(
            'cloudbuild', 'v1', http=mock_authorize.return_value, cache_discovery=False
        )
        self.assertEqual(mock_build.return_value, result)
        self.assertEqual(self.hook._conn, result)

    @mock.patch(
        'airflow.providers.google.cloud.hooks.base.CloudBaseHook.project_id',
        new_callable=PropertyMock,
        return_value=None
    )
    @mock.patch("airflow.providers.google.cloud.hooks.cloud_build.CloudBuildHook.get_conn")
    def test_create_build(self, mock_get_conn, mock_project_id):
        with self.assertRaises(AirflowException) as e:
            self.hook.create_build(body={})

        self.assertEqual(
            "The project id must be passed either as keyword project_id parameter or as project_id extra in "
            "GCP connection definition. Both are not set!",
            str(e.exception),
        )
Exemple #2
0
 def execute(self, context):
     hook = CloudBuildHook(
         gcp_conn_id=self.gcp_conn_id,
         api_version=self.api_version,
         impersonation_chain=self.impersonation_chain,
     )
     body = BuildProcessor(body=self.body).process_body()
     return hook.create_build(body=body, project_id=self.project_id)
Exemple #3
0
 def execute(self, context):
     hook = CloudBuildHook(gcp_conn_id=self.gcp_conn_id, impersonation_chain=self.impersonation_chain)
     hook.delete_build_trigger(
         trigger_id=self.trigger_id,
         project_id=self.project_id,
         retry=self.retry,
         timeout=self.timeout,
         metadata=self.metadata,
     )
Exemple #4
0
 def execute(self, context):
     hook = CloudBuildHook(gcp_conn_id=self.gcp_conn_id, impersonation_chain=self.impersonation_chain)
     result = hook.cancel_build(
         id_=self.id_,
         project_id=self.project_id,
         retry=self.retry,
         timeout=self.timeout,
         metadata=self.metadata,
     )
     return Build.to_dict(result)
Exemple #5
0
 def execute(self, context):
     hook = CloudBuildHook(gcp_conn_id=self.gcp_conn_id, impersonation_chain=self.impersonation_chain)
     result = hook.get_build_trigger(
         trigger_id=self.trigger_id,
         project_id=self.project_id,
         retry=self.retry,
         timeout=self.timeout,
         metadata=self.metadata,
     )
     return BuildTrigger.to_dict(result)
Exemple #6
0
 def execute(self, context):
     hook = CloudBuildHook(gcp_conn_id=self.gcp_conn_id, impersonation_chain=self.impersonation_chain)
     results = hook.list_builds(
         project_id=self.project_id,
         location=self.location,
         page_size=self.page_size,
         filter_=self.filter_,
         retry=self.retry,
         timeout=self.timeout,
         metadata=self.metadata,
     )
     return [Build.to_dict(result) for result in results]
 def execute(self, context: 'Context'):
     hook = CloudBuildHook(gcp_conn_id=self.gcp_conn_id, impersonation_chain=self.impersonation_chain)
     result = hook.run_build_trigger(
         trigger_id=self.trigger_id,
         source=self.source,
         project_id=self.project_id,
         wait=self.wait,
         retry=self.retry,
         timeout=self.timeout,
         metadata=self.metadata,
     )
     return Build.to_dict(result)
 def execute(self, context: 'Context'):
     hook = CloudBuildHook(gcp_conn_id=self.gcp_conn_id, impersonation_chain=self.impersonation_chain)
     results = hook.list_build_triggers(
         project_id=self.project_id,
         location=self.location,
         page_size=self.page_size,
         page_token=self.page_token,
         retry=self.retry,
         timeout=self.timeout,
         metadata=self.metadata,
     )
     return [BuildTrigger.to_dict(result) for result in results]
Exemple #9
0
    def execute(self, context):
        hook = CloudBuildHook(gcp_conn_id=self.gcp_conn_id, impersonation_chain=self.impersonation_chain)

        build = BuildProcessor(build=self.build).process_body()

        result = hook.create_build(
            build=build,
            project_id=self.project_id,
            wait=self.wait,
            retry=self.retry,
            timeout=self.timeout,
            metadata=self.metadata,
        )
        return Build.to_dict(result)
Exemple #10
0
class TestCloudBuildHookWithoutProjectId(unittest.TestCase):
    hook = None  # type: Optional[CloudBuildHook]

    def setUp(self):
        with mock.patch(
                "airflow.providers.google.common.hooks.base_google.GoogleBaseHook.__init__",
                new=mock_base_gcp_hook_no_default_project_id,
        ):
            self.hook = CloudBuildHook(gcp_conn_id="test")

    @mock.patch(
        "airflow.providers.google.cloud.hooks.cloud_build.CloudBuildHook._authorize"
    )
    @mock.patch("airflow.providers.google.cloud.hooks.cloud_build.build")
    def test_cloud_build_client_creation(self, mock_build, mock_authorize):
        result = self.hook.get_conn()
        mock_build.assert_called_once_with('cloudbuild',
                                           'v1',
                                           http=mock_authorize.return_value,
                                           cache_discovery=False)
        assert mock_build.return_value == result
        assert self.hook._conn == result

    @mock.patch(
        'airflow.providers.google.common.hooks.base_google.GoogleBaseHook.project_id',
        new_callable=PropertyMock,
        return_value=None,
    )
    @mock.patch(
        "airflow.providers.google.cloud.hooks.cloud_build.CloudBuildHook.get_conn"
    )
    def test_create_build(self, mock_get_conn, mock_project_id):
        with pytest.raises(AirflowException) as ctx:
            self.hook.create_build(body={})  # pylint: disable=no-value-for-parameter

        assert (
            "The project id must be passed either as keyword project_id parameter or as project_id extra in "
            "Google Cloud connection definition. Both are not set!" == str(
                ctx.value))
Exemple #11
0
 def setUp(self):
     with mock.patch(
             "airflow.providers.google.common.hooks.base_google.GoogleBaseHook.__init__",
             new=mock_base_gcp_hook_default_project_id,
     ):
         self.hook = CloudBuildHook(gcp_conn_id="test")
Exemple #12
0
class TestCloudBuildHookWithPassedProjectId(unittest.TestCase):
    hook = None  # type: Optional[CloudBuildHook]

    def setUp(self):
        with mock.patch(
                "airflow.providers.google.common.hooks.base_google.GoogleBaseHook.__init__",
                new=mock_base_gcp_hook_default_project_id,
        ):
            self.hook = CloudBuildHook(gcp_conn_id="test")

    @mock.patch(
        "airflow.providers.google.cloud.hooks.cloud_build.CloudBuildHook._authorize"
    )
    @mock.patch("airflow.providers.google.cloud.hooks.cloud_build.build")
    def test_cloud_build_client_creation(self, mock_build, mock_authorize):
        result = self.hook.get_conn()
        mock_build.assert_called_once_with('cloudbuild',
                                           'v1',
                                           http=mock_authorize.return_value,
                                           cache_discovery=False)
        self.assertEqual(mock_build.return_value, result)
        self.assertEqual(self.hook._conn, result)

    @mock.patch(
        "airflow.providers.google.cloud.hooks.cloud_build.CloudBuildHook.get_conn"
    )
    def test_build_immediately_complete(self, get_conn_mock):
        service_mock = get_conn_mock.return_value

        service_mock.projects.return_value.builds.return_value.create.return_value.execute.return_value = (
            TEST_BUILD)

        service_mock.projects.return_value.builds.return_value.get.return_value.execute.return_value = (
            TEST_BUILD)

        service_mock.operations.return_value.get.return_value.execute.return_value = TEST_DONE_OPERATION

        result = self.hook.create_build(body={}, project_id=TEST_PROJECT_ID)

        service_mock.projects.return_value.builds.return_value.create.assert_called_once_with(
            body={}, projectId=TEST_PROJECT_ID)

        self.assertEqual(result, TEST_BUILD)

    @mock.patch(
        "airflow.providers.google.cloud.hooks.cloud_build.CloudBuildHook.get_conn"
    )
    @mock.patch("airflow.providers.google.cloud.hooks.cloud_build.time.sleep")
    def test_waiting_operation(self, _, get_conn_mock):
        service_mock = get_conn_mock.return_value

        service_mock.projects.return_value.builds.return_value.create.return_value.execute.return_value = (
            TEST_BUILD)

        service_mock.projects.return_value.builds.return_value.get.return_value.execute.return_value = (
            TEST_BUILD)

        execute_mock = mock.Mock(
            **{
                "side_effect": [
                    TEST_WAITING_OPERATION, TEST_DONE_OPERATION,
                    TEST_DONE_OPERATION
                ]
            })
        service_mock.operations.return_value.get.return_value.execute = execute_mock

        result = self.hook.create_build(body={}, project_id=TEST_PROJECT_ID)

        self.assertEqual(result, TEST_BUILD)

    @mock.patch(
        'airflow.providers.google.common.hooks.base_google.GoogleBaseHook.project_id',
        new_callable=PropertyMock,
        return_value=GCP_PROJECT_ID_HOOK_UNIT_TEST,
    )
    @mock.patch(
        "airflow.providers.google.cloud.hooks.cloud_build.CloudBuildHook.get_conn"
    )
    @mock.patch("airflow.providers.google.cloud.hooks.cloud_build.time.sleep")
    def test_error_operation(self, _, get_conn_mock, mock_project_id):
        service_mock = get_conn_mock.return_value

        service_mock.projects.return_value.builds.return_value.create.return_value.execute.return_value = (
            TEST_BUILD)

        execute_mock = mock.Mock(
            **{"side_effect": [TEST_WAITING_OPERATION, TEST_ERROR_OPERATION]})
        service_mock.operations.return_value.get.return_value.execute = execute_mock
        with self.assertRaisesRegex(AirflowException, "error"):
            self.hook.create_build(body={})  # pylint: disable=no-value-for-parameter