diff --git a/app/celery/provider_tasks.py b/app/celery/provider_tasks.py index 3619298d9..acd2910b3 100644 --- a/app/celery/provider_tasks.py +++ b/app/celery/provider_tasks.py @@ -23,6 +23,10 @@ from app.models import ( NOTIFICATION_TECHNICAL_FAILURE, ) +# This is the amount of time to wait after sending an sms message before we check the aws logs and look for delivery +# receipts +DELIVERY_RECEIPT_DELAY_IN_SECONDS = 120 + @notify_celery.task( bind=True, @@ -96,7 +100,9 @@ def deliver_sms(self, notification_id): message_id = send_to_providers.send_sms_to_provider(notification) # We have to put it in UTC. For other timezones, the delay # will be ignored and it will fire immediately (although this probably only affects developer testing) - my_eta = datetime.utcnow() + timedelta(seconds=300) + my_eta = datetime.utcnow() + timedelta( + seconds=DELIVERY_RECEIPT_DELAY_IN_SECONDS + ) check_sms_delivery_receipt.apply_async( [message_id, notification_id, now], eta=my_eta, queue=QueueNames.CHECK_SMS ) diff --git a/docs/bulk_testing.md b/docs/bulk_testing.md new file mode 100644 index 000000000..668901557 --- /dev/null +++ b/docs/bulk_testing.md @@ -0,0 +1,20 @@ +How to Run a Bulk Send Simulation +================================== + +Assuming that you have followed all steps to set up localstack successfully, do the following: + +1. Create an sms template that requires no inputs from the user (i.e. the csv file will only have phone numbers) +2. Uncomment the test 'test_generate_csv_for_bulk_testing' in app/test_utils.py +3. Run `make test` on this project. This will generate the csv file for the bulk test. +4. If you are not a platform admin for your service when you run locally, do the following: + - >psql -d notification_api + - update users set platform_admin='t'; + - \q + - sign out + - sign in. + - Go to settings and set the organization for your service to 'Broadcast services' (scroll down to platform admin) + - Go to settings and set your service to 'live' (scroll down to platform admin) +5. Run your app 'locally'. I.e. run `make run-procfile` on this project and `make run-flask` on the admin project +6. Sign in. Verify you are running with localstack. I.e., you do NOT receive a text message on sign in. Instead, + you see your authentication code in green in the api logs +7. Go to send messages and upload your csv file and send your 100000 messages \ No newline at end of file diff --git a/tests/app/test_utils.py b/tests/app/test_utils.py index 77ea48688..dff502c4a 100644 --- a/tests/app/test_utils.py +++ b/tests/app/test_utils.py @@ -90,3 +90,13 @@ def test_get_uuid_string_or_none(): def test_get_public_notify_type_text(): assert get_public_notify_type_text(UPLOAD_DOCUMENT) == "document" + + +# This method is used for simulating bulk sends. We use localstack and run on a developer's machine to do the +# simulation. Please see docs->bulk_testing.md for instructions. +# def test_generate_csv_for_bulk_testing(): +# f = open("bulktest_100000.csv", "w") +# f.write("phone number\n") +# for _ in range(0, 100000): +# f.write("16615555555\n") +# f.close()