172 lines
5.2 KiB
Python
172 lines
5.2 KiB
Python
"""
|
|
Smoke test using the samples.
|
|
"""
|
|
|
|
import unittest
|
|
import os
|
|
import six
|
|
import sys
|
|
import time
|
|
import subprocess
|
|
|
|
from requests import post
|
|
|
|
import flask_ask
|
|
|
|
|
|
launch = {
|
|
"version": "1.0",
|
|
"session": {
|
|
"new": True,
|
|
"sessionId": "amzn1.echo-api.session.0000000-0000-0000-0000-00000000000",
|
|
"application": {
|
|
"applicationId": "fake-application-id"
|
|
},
|
|
"attributes": {},
|
|
"user": {
|
|
"userId": "amzn1.account.AM3B00000000000000000000000"
|
|
}
|
|
},
|
|
"context": {
|
|
"System": {
|
|
"application": {
|
|
"applicationId": "fake-application-id"
|
|
},
|
|
"user": {
|
|
"userId": "amzn1.account.AM3B00000000000000000000000"
|
|
},
|
|
"device": {
|
|
"supportedInterfaces": {
|
|
"AudioPlayer": {}
|
|
}
|
|
}
|
|
},
|
|
"AudioPlayer": {
|
|
"offsetInMilliseconds": 0,
|
|
"playerActivity": "IDLE"
|
|
}
|
|
},
|
|
"request": {
|
|
"type": "LaunchRequest",
|
|
"requestId": "string",
|
|
"timestamp": "string",
|
|
"locale": "string",
|
|
"intent": {
|
|
"name": "TestPlay",
|
|
"slots": {
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
|
|
project_root = os.path.abspath(os.path.join(flask_ask.__file__, '../..'))
|
|
|
|
|
|
@unittest.skipIf(six.PY2, "Not yet supported on Python 2.x")
|
|
class SmokeTestUsingSamples(unittest.TestCase):
|
|
""" Try launching each sample and sending some requests to them. """
|
|
|
|
def setUp(self):
|
|
self.python = sys.executable
|
|
self.env = {'PYTHONPATH': project_root,
|
|
'ASK_VERIFY_REQUESTS': 'false'}
|
|
if os.name == 'nt':
|
|
self.env['SYSTEMROOT'] = os.getenv('SYSTEMROOT')
|
|
self.env['PATH'] = os.getenv('PATH')
|
|
|
|
def _launch(self, sample):
|
|
prefix = os.path.join(project_root, 'samples/')
|
|
path = prefix + sample
|
|
process = subprocess.Popen([self.python, path], env=self.env)
|
|
time.sleep(1)
|
|
self.assertIsNone(process.poll(),
|
|
msg='Poll should work,'
|
|
'otherwise we failed to launch')
|
|
self.process = process
|
|
|
|
def _post(self, route='/', data={}):
|
|
url = 'http://127.0.0.1:5000' + str(route)
|
|
print('POSTing to %s' % url)
|
|
response = post(url, json=data)
|
|
self.assertEqual(200, response.status_code)
|
|
return response
|
|
|
|
@staticmethod
|
|
def _get_text(http_response):
|
|
data = http_response.json()
|
|
return data.get('response', {})\
|
|
.get('outputSpeech', {})\
|
|
.get('text', None)
|
|
|
|
@staticmethod
|
|
def _get_reprompt(http_response):
|
|
data = http_response.json()
|
|
return data.get('response', {})\
|
|
.get('reprompt', {})\
|
|
.get('outputSpeech', {})\
|
|
.get('text', None)
|
|
|
|
def tearDown(self):
|
|
try:
|
|
self.process.terminate()
|
|
self.process.communicate(timeout=1)
|
|
except Exception as e:
|
|
try:
|
|
print('[%s]...trying to kill.' % str(e))
|
|
self.process.kill()
|
|
self.process.communicate(timeout=1)
|
|
except Exception as e:
|
|
print('Error killing test python process: %s' % str(e))
|
|
print('*** it is recommended you manually kill with PID %s',
|
|
self.process.pid)
|
|
|
|
def test_helloworld(self):
|
|
""" Test the HelloWorld sample project """
|
|
self._launch('helloworld/helloworld.py')
|
|
response = self._post(data=launch)
|
|
self.assertTrue('hello' in self._get_text(response))
|
|
|
|
def test_session_sample(self):
|
|
""" Test the Session sample project """
|
|
self._launch('session/session.py')
|
|
response = self._post(data=launch)
|
|
self.assertTrue('favorite color' in self._get_text(response))
|
|
|
|
def test_audio_simple_demo(self):
|
|
""" Test the SimpleDemo Audio sample project """
|
|
self._launch('audio/simple_demo/ask_audio.py')
|
|
response = self._post(data=launch)
|
|
self.assertTrue('audio example' in self._get_text(response))
|
|
|
|
def test_audio_playlist_demo(self):
|
|
""" Test the Playlist Audio sample project """
|
|
self._launch('audio/playlist_demo/playlist.py')
|
|
response = self._post(data=launch)
|
|
self.assertTrue('playlist' in self._get_text(response))
|
|
|
|
def test_blueprints_demo(self):
|
|
""" Test the sample project using Flask Blueprints """
|
|
self._launch('blueprint_demo/demo.py')
|
|
response = self._post(route='/ask', data=launch)
|
|
self.assertTrue('hello' in self._get_text(response))
|
|
|
|
def test_history_buff(self):
|
|
""" Test the History Buff sample """
|
|
self._launch('historybuff/historybuff.py')
|
|
response = self._post(data=launch)
|
|
self.assertTrue('History buff' in self._get_text(response))
|
|
|
|
def test_spacegeek(self):
|
|
""" Test the Spacegeek sample """
|
|
self._launch('spacegeek/spacegeek.py')
|
|
response = self._post(data=launch)
|
|
# response is random
|
|
self.assertTrue(len(self._get_text(response)) > 1)
|
|
|
|
def test_tidepooler(self):
|
|
""" Test the Tide Pooler sample """
|
|
self._launch('tidepooler/tidepooler.py')
|
|
response = self._post(data=launch)
|
|
self.assertTrue('Which city' in self._get_reprompt(response))
|