Skip to content

Commit

Permalink
add E2E Pystein and generic binding tests for EventGrid (#1031)
Browse files Browse the repository at this point in the history
* added E2E tests of EventGrid for new prog model.

* added eventgrid generic binding tests.

Co-authored-by: Varad Meru <[email protected]>
Co-authored-by: peterstone2017 <[email protected]>
  • Loading branch information
3 people authored Jul 21, 2022
1 parent 5f28c27 commit c5888b1
Show file tree
Hide file tree
Showing 3 changed files with 197 additions and 0 deletions.
Original file line number Diff line number Diff line change
@@ -0,0 +1,82 @@
import json
from datetime import datetime
import azure.functions as func

from azure_functions_worker import logging

app = func.FunctionApp()


@app.function_name(name="eventGridTrigger")
@app.event_grid_trigger(arg_name="event")
@app.write_blob(arg_name="$return",
path="python-worker-tests/test-eventgrid-triggered.txt",
connection="AzureWebJobsStorage")
def event_grid_trigger(event: func.EventGridEvent) -> str:
logging.info("Event grid function is triggered!")
return json.dumps({
'id': event.id,
'data': event.get_json(),
'topic': event.topic,
'subject': event.subject,
'event_type': event.event_type,
})


@app.function_name(name="eventgrid_output_binding")
@app.route(route="eventgrid_output_binding")
@app.write_event_grid(
arg_name="outputEvent",
topic_endpoint_uri="AzureWebJobsEventGridTopicUri",
topic_key_setting="AzureWebJobsEventGridConnectionKey")
def eventgrid_output_binding(
req: func.HttpRequest,
outputEvent: func.Out[func.EventGridOutputEvent]) -> func.HttpResponse:
test_uuid = req.params.get('test_uuid')
data_to_event_grid = func.EventGridOutputEvent(id="test-id",
data={
"test_uuid": test_uuid
},
subject="test-subject",
event_type="test-event-1",
event_time=datetime.utcnow(),
data_version="1.0")

outputEvent.set(data_to_event_grid)
r_value = "Sent event with subject: {}, id: {}, data: {}, event_type: {} " \
"to EventGrid!".format(data_to_event_grid.subject,
data_to_event_grid.id,
data_to_event_grid.get_json(),
data_to_event_grid.event_type)
return func.HttpResponse(r_value)


@app.function_name(name="eventgrid_output_binding_message_to_blobstore")
@app.queue_trigger(arg_name="msg", queue_name="test-event-grid-storage-queue",
connection="AzureWebJobsStorage")
@app.write_blob(arg_name="$return",
path="python-worker-tests/test-eventgrid-output-binding.txt",
connection="AzureWebJobsStorage")
def eventgrid_output_binding_message_to_blobstore(
msg: func.QueueMessage) -> bytes:
return msg.get_body()


@app.function_name(name="eventgrid_output_binding_success")
@app.route(route="eventgrid_output_binding_success")
@app.read_blob(arg_name="file",
path="python-worker-tests/test-eventgrid-output-binding.txt",
connection="AzureWebJobsStorage")
def eventgrid_output_binding_success(
req: func.HttpRequest, file: func.InputStream) -> str:
return file.read().decode('utf-8')


@app.function_name(name="get_eventgrid_triggered")
@app.route(route="get_eventgrid_triggered")
@app.read_blob(arg_name="file",
path="python-worker-tests/test-eventgrid-triggered.txt",
connection="AzureWebJobsStorage")
def get_eventgrid_triggered(
req: func.HttpRequest, file: func.InputStream) -> str:
return file.read().decode('utf-8')
Original file line number Diff line number Diff line change
@@ -0,0 +1,99 @@
import json
from datetime import datetime
import azure.functions as func

from azure_functions_worker import logging

app = func.FunctionApp()


@app.function_name(name="eventGridTrigger")
@app.event_grid_trigger(arg_name="event", type="eventGridTrigger")
@app.generic_output_binding(
arg_name="$return",
type="blob",
connection="AzureWebJobsStorage",
path="python-worker-tests/test-eventgrid-triggered.txt")
def event_grid_trigger(event: func.EventGridEvent) -> str:
logging.info("Event grid function is triggered!")
return json.dumps({
'id': event.id,
'data': event.get_json(),
'topic': event.topic,
'subject': event.subject,
'event_type': event.event_type,
})


@app.function_name(name="eventgrid_output_binding")
@app.generic_trigger(arg_name="req", type="httpTrigger",
route="eventgrid_output_binding")
@app.generic_output_binding(arg_name="$return", type="http")
@app.generic_output_binding(
arg_name="outputEvent",
type="eventGrid",
topic_endpoint_uri="AzureWebJobsEventGridTopicUri",
topic_key_setting="AzureWebJobsEventGridConnectionKey")
def eventgrid_output_binding(
req: func.HttpRequest,
outputEvent: func.Out[func.EventGridOutputEvent]) -> func.HttpResponse:
test_uuid = req.params.get('test_uuid')
data_to_event_grid = func.EventGridOutputEvent(id="test-id",
data={
"test_uuid": test_uuid
},
subject="test-subject",
event_type="test-event-1",
event_time=datetime.utcnow(),
data_version="1.0")

outputEvent.set(data_to_event_grid)
r_value = "Sent event with subject: {}, id: {}, data: {}, event_type: {} " \
"to EventGrid!".format(data_to_event_grid.subject,
data_to_event_grid.id,
data_to_event_grid.get_json(),
data_to_event_grid.event_type)
return func.HttpResponse(r_value)


@app.function_name(name="eventgrid_output_binding_message_to_blobstore")
@app.generic_trigger(arg_name="msg",
type="queueTrigger",
queue_name="test-event-grid-storage-queue",
connection="AzureWebJobsStorage")
@app.generic_output_binding(
arg_name="$return",
type="blob",
connection="AzureWebJobsStorage",
path="python-worker-tests/test-eventgrid-output-binding.txt")
def eventgrid_output_binding_message_to_blobstore(
msg: func.QueueMessage) -> bytes:
return msg.get_body()


@app.function_name(name="eventgrid_output_binding_success")
@app.generic_trigger(arg_name="req", type="httpTrigger",
route="eventgrid_output_binding_success")
@app.generic_output_binding(arg_name="$return", type="http")
@app.generic_input_binding(
arg_name="file",
type="blob",
path="python-worker-tests/test-eventgrid-output-binding.txt",
connection="AzureWebJobsStorage")
def eventgrid_output_binding_success(
req: func.HttpRequest, file: func.InputStream) -> str:
return file.read().decode('utf-8')


@app.function_name(name="get_eventgrid_triggered")
@app.generic_trigger(arg_name="req", type="httpTrigger",
route="get_eventgrid_triggered")
@app.generic_output_binding(arg_name="$return", type="http")
@app.generic_input_binding(
arg_name="file",
type="blob",
path="python-worker-tests/test-eventgrid-triggered.txt",
connection="AzureWebJobsStorage")
def get_eventgrid_triggered(
req: func.HttpRequest, file: func.InputStream) -> str:
return file.read().decode('utf-8')
16 changes: 16 additions & 0 deletions tests/endtoend/test_eventgrid_functions.py
Original file line number Diff line number Diff line change
Expand Up @@ -156,3 +156,19 @@ def test_eventgrid_output_binding(self):
raise
else:
break


class TestEventGridFunctionsStein(TestEventGridFunctions):

@classmethod
def get_script_dir(cls):
return testutils.E2E_TESTS_FOLDER / 'eventgrid_functions' / \
'eventgrid_functions_stein'


class TestEventGridFunctionsGeneric(TestEventGridFunctions):

@classmethod
def get_script_dir(cls):
return testutils.E2E_TESTS_FOLDER / 'eventgrid_functions' / \
'eventgrid_functions_stein' / 'generic'

0 comments on commit c5888b1

Please sign in to comment.