Ejemplo n.º 1
0
    def test_deploy_multiple_schedule(self, monkeypatch):
        monkeypatch.setenv("GOOGLE_PROJECT", "goblet")
        monkeypatch.setenv("GOOGLE_LOCATION", "us-central1")
        monkeypatch.setenv("GOBLET_TEST_NAME", "schedule-deploy-multiple")
        monkeypatch.setenv("GOBLET_HTTP_TEST", "REPLAY")

        goblet_name = "goblet-test-schedule"
        scheduler = Scheduler(goblet_name)
        scheduler.register_job("test-job",
                               None,
                               kwargs={
                                   "schedule": "* * 1 * *",
                                   "kwargs": {}
                               })
        scheduler.register_job(
            "test-job",
            None,
            kwargs={
                "schedule": "* * 2 * *",
                "kwargs": {
                    "httpMethod": "POST"
                }
            },
        )
        scheduler.register_job(
            "test-job",
            None,
            kwargs={
                "schedule": "* * 3 * *",
                "kwargs": {
                    "headers": {
                        "X-HEADER": "header"
                    }
                },
            },
        )
        scheduler.deploy()

        post_job_1 = get_response(
            "schedule-deploy-multiple",
            "post-v1-projects-goblet-locations-us-central1-jobs_1.json",
        )
        post_job_2 = get_response(
            "schedule-deploy-multiple",
            "post-v1-projects-goblet-locations-us-central1-jobs_2.json",
        )
        post_job_3 = get_response(
            "schedule-deploy-multiple",
            "post-v1-projects-goblet-locations-us-central1-jobs_3.json",
        )

        assert (post_job_1["body"]["httpTarget"]["headers"]["X-Goblet-Name"] ==
                "test-job")
        assert (post_job_2["body"]["httpTarget"]["headers"]["X-Goblet-Name"] ==
                "test-job-2")
        assert post_job_2["body"]["httpTarget"]["httpMethod"] == "POST"
        assert (post_job_3["body"]["httpTarget"]["headers"]["X-Goblet-Name"] ==
                "test-job-3")
        assert post_job_3["body"]["httpTarget"]["headers"][
            "X-HEADER"] == "header"
Ejemplo n.º 2
0
    def test_deploy_schedule_cloudrun(self, monkeypatch):
        monkeypatch.setenv("GOOGLE_PROJECT", "goblet")
        monkeypatch.setenv("GOOGLE_LOCATION", "us-central1")
        monkeypatch.setenv("GOBLET_TEST_NAME", "schedule-deploy-cloudrun")
        monkeypatch.setenv("GOBLET_HTTP_TEST", "REPLAY")

        scheduler = Scheduler("goblet", backend="cloudrun")
        cloudrun_url = "https://goblet-12345.a.run.app"
        service_account = "*****@*****.**"
        scheduler.register_job(
            "test-job",
            None,
            kwargs={
                "schedule": "* * * * *",
                "timezone": "UTC",
                "kwargs": {}
            },
        )
        scheduler._deploy(
            config={"scheduler": {
                "serviceAccount": service_account
            }})

        responses = get_responses("schedule-deploy-cloudrun")

        assert responses[0]["body"]["status"]["url"] == cloudrun_url
        assert (responses[1]["body"]["httpTarget"]["oidcToken"]
                ["serviceAccountEmail"] == service_account)
        assert (responses[1]["body"]["httpTarget"]["oidcToken"]["audience"] ==
                cloudrun_url)
        assert responses[1]["body"]["schedule"] == "* * * * *"
Ejemplo n.º 3
0
    def test_deploy_schedule(self, monkeypatch):
        monkeypatch.setenv("GOOGLE_PROJECT", "goblet")
        monkeypatch.setenv("GOOGLE_LOCATION", "us-central1")
        monkeypatch.setenv("GOBLET_TEST_NAME", "schedule-deploy")
        monkeypatch.setenv("GOBLET_HTTP_TEST", "REPLAY")

        goblet_name = "goblet_example"
        scheduler = Scheduler(goblet_name)
        scheduler.register_job(
            "test-job",
            None,
            kwargs={
                "schedule": "* * * * *",
                "timezone": "UTC",
                "kwargs": {}
            },
        )
        scheduler.deploy()

        responses = get_responses("schedule-deploy")

        assert goblet_name in responses[0]["body"]["name"]
        assert (responses[1]["body"]["httpTarget"]["headers"]["X-Goblet-Name"]
                == "test-job")
        assert (responses[1]["body"]["httpTarget"]["headers"]["X-Goblet-Type"]
                == "schedule")
        assert responses[1]["body"]["schedule"] == "* * * * *"
Ejemplo n.º 4
0
    def __init__(
        self,
        function_name,
        backend="cloudfunction",
        cors=None,
        client_versions=None,
        routes_type="apigateway",
    ):
        self.client_versions = client_versions

        versioned_clients = VersionedClients(client_versions or {})

        self.handlers = {
            "route":
            ApiGateway(
                function_name,
                cors=cors,
                backend=backend,
                versioned_clients=versioned_clients,
                routes_type=routes_type,
            ),
            "schedule":
            Scheduler(function_name,
                      backend=backend,
                      versioned_clients=versioned_clients),
            "pubsub":
            PubSub(function_name,
                   backend=backend,
                   versioned_clients=versioned_clients),
            "storage":
            Storage(function_name,
                    backend=backend,
                    versioned_clients=versioned_clients),
            "eventarc":
            EventArc(function_name,
                     backend=backend,
                     versioned_clients=versioned_clients),
            "http":
            HTTP(function_name,
                 backend=backend,
                 versioned_clients=versioned_clients),
        }
        self.middleware_handlers = {
            "before": {},
            "after": {},
        }
        self.current_request = None
Ejemplo n.º 5
0
    def __init__(self,
                 function_name,
                 backend="cloudfunction",
                 cors=None,
                 client_versions=None):
        self.backend = backend
        if backend not in BACKEND_TYPES:
            raise ValueError(f"{backend} not a valid backend")

        versioned_clients = VersionedClients(client_versions or {})

        self.handlers = {
            "route":
            ApiGateway(
                function_name,
                cors=cors,
                backend=backend,
                versioned_clients=versioned_clients,
            ),
            "schedule":
            Scheduler(function_name,
                      backend=backend,
                      versioned_clients=versioned_clients),
            "pubsub":
            PubSub(function_name,
                   backend=backend,
                   versioned_clients=versioned_clients),
            "storage":
            Storage(function_name,
                    backend=backend,
                    versioned_clients=versioned_clients),
            "eventarc":
            EventArc(function_name,
                     backend=backend,
                     versioned_clients=versioned_clients),
            "http":
            HTTP(function_name,
                 backend=backend,
                 versioned_clients=versioned_clients),
        }
        self.middleware_handlers = {
            "before": {},
            "after": {},
        }
        self.current_request = None
Ejemplo n.º 6
0
    def test_sync_schedule(self, monkeypatch):
        monkeypatch.setenv("GOOGLE_PROJECT", "goblet")
        monkeypatch.setenv("GOOGLE_LOCATION", "us-central1")
        monkeypatch.setenv("GOBLET_TEST_NAME", "schedule-sync")
        monkeypatch.setenv("GOBLET_HTTP_TEST", "REPLAY")

        goblet_name = "goblet"
        scheduler = Scheduler(goblet_name)
        scheduler.register_job("scheduled_job",
                               None,
                               kwargs={
                                   "schedule": "* * * * *",
                                   "kwargs": {}
                               })
        scheduler.sync(dryrun=True)
        scheduler.sync(dryrun=False)

        responses = get_responses("schedule-sync")
        assert len(responses) == 3
        assert responses[1] == responses[2]
        assert responses[0]["body"] == {}
Ejemplo n.º 7
0
    def test_destroy_schedule(self, monkeypatch):
        monkeypatch.setenv("GOOGLE_PROJECT", "goblet")
        monkeypatch.setenv("GOOGLE_LOCATION", "us-central1")
        monkeypatch.setenv("GOBLET_TEST_NAME", "schedule-destroy")
        monkeypatch.setenv("GOBLET_HTTP_TEST", "REPLAY")

        goblet_name = "goblet_example"
        scheduler = Scheduler(goblet_name)
        scheduler.register_job("test-job",
                               None,
                               kwargs={
                                   "schedule": "* * * * *",
                                   "kwargs": {}
                               })
        scheduler.destroy()

        responses = get_responses("schedule-destroy")

        assert len(responses) == 1
        assert responses[0]["body"] == {}