Esempio n. 1
0
class Test_Lambda_pdf_to_slack(unittest.TestCase):
    def setUp(self):
        self.png_to_slack = Lambda('utils.png_to_slack', memory=3008)

    def test_update_and_invoke(self):
        png_file = '/tmp/lambda_png_file.png'
        png_data = base64.b64encode(open(png_file, 'rb').read()).decode()
        Dev.pprint(len(png_data))
        payload = {
            "png_data": png_data,
            'aws_secrets_id': 'slack-gs-bot',
            'channel': 'DDKUZTK6X'
        }

        result = self.png_to_slack.update_with_src().invoke(payload)

        Dev.pprint(result)

    def test__delete_temp_png_files(self):
        s3_bucket = 'gs-lambda-tests'

        tmp_files = S3().find_files(s3_bucket, S3().tmp_file_folder)
        for tmp_file in tmp_files:
            S3().file_delete(s3_bucket, tmp_file)

        Dev.pprint(S3().find_files(s3_bucket, S3().tmp_file_folder))
class Test_lambda_api_gateway_simple_test(unittest.TestCase):
    def setUp(self):
        self.target = Lambda('api_gateway.trigger_server_reload')

    def test_update_and_invoke(self):
        result = self.target.update_with_src().invoke({})
        Dev.pprint(result)
Esempio n. 3
0
class Test_Full_Calendar_Views(TestCase):

    def setUp(self):
        self.calendar_views = Full_Calendar_Views()
        self.png_data       = None

    def tearDown(self):
        Browser_Lamdba_Helper().save_png_data(self.png_data)

    def test_default(self):
        self.png_data = self.calendar_views.gs_team(headless=False)
        self.png_data = self.png_data


    def test_default__via_lambda(self):
        self.lambda_browser = Lambda('browser.lambda_browser')
        self.lambda_browser.update_with_src()
        payload = {"params": ['calendar','gs_team'],'data': {'team_id':'T7F3AUXGV', 'channel':'DDKUZTK6X'}}
        self.lambda_browser.invoke(payload)
class Test_lambda_api_gateway_simple_test(unittest.TestCase):
    def setUp(self):
        self.simple_test = Lambda('api_gateway.trigger_sync_jira_sheets')

    def test_update_and_invoke(self):
        file_id = '1yDxu5YxL9FxY5wQ1EEQlAYGt3flIsm2VTyWwPny5RLA'
        result = self.simple_test.update_with_src().invoke(
            {'queryStringParameters': {
                'file_id': file_id
            }})
        message = Misc.json_load(result.get('body'))
        Dev.pprint(message)
        #assert result == 'API Gateway test'

    def test_update_and_invoke__action_diff(self):
        file_id = '1yDxu5YxL9FxY5wQ1EEQlAYGt3flIsm2VTyWwPny5RLA'
        result = self.simple_test.update_with_src().invoke(
            {'queryStringParameters': {
                'file_id': file_id,
                'action': 'diff'
            }})
        message = Misc.json_load(result.get('body'))
        Dev.pprint(message)

    def test_update_and_invoke__action_sync(self):
        file_id = '1yDxu5YxL9FxY5wQ1EEQlAYGt3flIsm2VTyWwPny5RLA'
        result = self.simple_test.update_with_src().invoke(
            {'queryStringParameters': {
                'file_id': file_id,
                'action': 'sync'
            }})
        message = Misc.json_load(result.get('body'))
        Dev.pprint(message)

    def test_just_update(self):
        self.simple_test.update_with_src()
class Test_Lambda_lambda_browser(Test_Helper):
    def setUp(self):
        super().setUp()
        self.lambda_name    = 'osbot_browser.lambdas.lambda_browser'
        self.lambda_browser = Lambda(self.lambda_name)
        self.png_data       = None

    def tearDown(self):
        super().tearDown()

    def _save_png_file(self, png_data):
        try:
            png_file = '/tmp/lambda_png_file.png'
            if png_data:
                with open(png_file, "wb") as fh:
                    fh.write(base64.decodebytes(png_data.encode()))
                Dev.pprint("Png data with size {0} saved to {1}".format(len(png_data),png_file))
        except Exception as error:
            Dev.print("[_save_png_file][Error] {0}".format(error))
            Dev.print(png_data)

    def test_update_lambda(self):
        Deploy().setup().deploy_lambda__browser()

    def test_invoke_directly(self):
        result = run({},{})
        assert result == '*Here are the `Browser_Commands` commands available:*'

    def test_invoke_directly_version(self):
        result = run({"params": ['version']},{})
        assert result == Browser_Commands.current_version

    def test_invoke(self):
        payload ={ "params" : []}
        result = self.lambda_browser.invoke(payload)
        assert result == '*Here are the `Browser_Commands` commands available:*'

    def test_markdown(self):
        markdown = Misc.random_string_and_numbers(prefix='# Created from Lambda ... ')
        payload  = {"params": ['markdown', markdown, " \n normal text"]}
        png_data = self.lambda_browser.invoke(payload)
        self._save_png_file(png_data)

    def test_screenshot(self):
        self.test_update_lambda()
        channel = None #'DRE51D4EM'
        url = 'https://www.google.co.uk'
        #url = 'https://news.bbc.co.uk/aaa'
        #url = 'https://www.whatismybrowser.com/'
        payload = {"params": ['screenshot','_'], 'data': {'channel':channel}}
        self.result = self.lambda_browser.invoke(payload)
        #print(self.lambda_browser.shell().reset())
        print(self.lambda_browser.shell().list_processes())
        #Dev.pprint(result)

    def test_invoke_shell_get_processes(self):
        shell = self.lambda_browser.shell()
        print()
        print(shell.list_processes())

    def test_invoke_shell_get_event_logs(self):
        log_folder= '/tmp/event_logs'
        log_file = '2020-04-12__02-41-15__142417.json'
        shell = self.lambda_browser.shell()
        print()
        print(shell.ls(log_folder))
        for log_file in shell.ls(log_folder).split('\n'):
            print()
            print(f'*****{log_file}*****')
            print(shell.file_contents(f'{log_folder}/{log_file}'))
            print()
        #print(shell.ls('/tmp/lambdas-dependencies'))
        #print(shell.ls('/tmp/lambdas-dependencies'))
        #"browser screenshot <https://www.google.com>",

    def test_invoke_shell_code(self):
        #self.test_update_lambda()
        code = """
from osbot_browser.browser.Browser_Lamdba_Helper   import Browser_Lamdba_Helper
from osbot_aws.Dependencies import load_dependencies
from osbot_utils.utils.Files import Files        

browser_helper = Browser_Lamdba_Helper().setup()
browser_helper.api_browser.sync__browser_width(1500)
result =  browser_helper.get_screenshot_png()
              """
        shell = self.lambda_browser.shell()
        self.png_data = shell.python_exec(code)
        #print(shell.ls('/tmp'))
        #print(shell.file_contents('/tmp/browser-last_chrome_session.json'))
        #print(shell.list_processes())

    def test_list(self):
        payload = {"params": ['list']}
        result = self.lambda_browser.invoke(payload)
        assert result == 'Here are the current examples files:'

    def test_lambda_status(self):
        payload = {"params": ['lambda_status']}
        result = self.lambda_browser.invoke(payload)
        assert result == 'Here are the current status of the `graph` lambda function'

    def test_render__bootstrap_cdn(self):
        payload = {"params": ['render','/examples/bootstrap-cdn.html',0,0,600,50]}
        png_data = self.lambda_browser.invoke(payload)
        self._save_png_file(png_data)

    def test_render__cup_of_tea(self):
        payload = {"params": ['render','examples/wardley_map/cup-of-tea.html']}
        png_data = self.lambda_browser.invoke(payload)
        self._save_png_file(png_data)

    # def test_invoke_directly_render(self):
    #     png_data = run({"params": ['render','/']},{})
    #     self._save_png_file(png_data)

    def test_elk(self):
        payload = {"params": ['elk','dashboards']}
        png_data = self.lambda_browser.invoke(payload)
        #Dev.pprint(png_data)
        self._save_png_file(png_data)

    @unittest.skip('hangs on request')
    def test_elk__dashboard_project(self):
        payload = {"params": ['elk', 'dashboard_project','GSSP-126']}
        png_data = self.lambda_browser.invoke(payload)
        # Dev.pprint(png_data)
        self._save_png_file(png_data)



    def test_risks(self):
        #payload = {"params": ['render','gs/risk/risks-dashboard.html']}
        payload = { "params" : ['risks' , 'GSSP-115']}
        png_data = self.lambda_browser.invoke(payload)
        Dev.pprint(png_data)
        self._save_png_file(png_data)

    def test_go_js(self):
        #self.test_update_lambda()
        payload = {"params": ['go_js', 'graph_J2O', 'default']}
        png_data = self.lambda_browser.invoke(payload)
        Dev.pprint(png_data)

    def test_sow_view(self):
        #self.test_update_lambda()
        payload = {"params": ['sow', 'view', 'SOW-135']}
        png_data = self.lambda_browser.invoke(payload)
        Dev.pprint(png_data)


    @unittest.skip('needs fixing (api has moved since this test)')
    def test_graph(self):
        graph_name = 'graph_XKW'        # 7 nodes
        graph_name = 'graph_MKF'        # 20 nodes

        view_name  = 'default'
        payload = {"params": ['graph', graph_name, view_name]}
        png_data = self.lambda_browser.update_with_src().invoke(payload)
        #Dev.pprint(png_data)
        self._save_png_file(png_data)

    def test_graph__view__node_label(self):
        graph_name = 'graph_XKW'        # 7 nodes
        #graph_name = 'graph_VKN'        # 20 nodes
        #graph_name = 'graph_YT4'   # (199 nodes, 236 edges)
        #graph_name = 'graph_VZ5'   # (367 nodes, 653 edges)

        view_name  = 'node_label'
        label_key  = 'Status'
        payload = {"params": ['graph', graph_name, view_name,label_key]}
        png_data = self.lambda_browser.invoke(payload)
        #Dev.pprint(png_data)
        self._save_png_file(png_data)



    def test_graph__graph_default(self):
        self.test_deploy()
        graph_name = 'graph_J2O'        # 7 nodes
        view_name = 'default'
        payload = {"params": ['graph', graph_name, view_name]}
        #png_data = run(payload, {})
        png_data = self.lambda_browser.invoke(payload)
        #Dev.pprint(png_data)
        self.result = png_data
        #self._save_png_file(png_data)

    # todo: fix: it is throwing '_AttributeError("\'NoneType\' object has no attribute \'get\'",)_')
    def test_table(self):
        payload = {"params": ['table','graph_MKF', 'graph']}
        png_data = self.lambda_browser.invoke(payload)
        Dev.pprint(png_data)
        self._save_png_file(png_data)

    def test_issue(self):
        payload = {"params": ['table','graph_MKF', 'issue']}
        png_data = self.lambda_browser.invoke(payload)
        Dev.pprint(png_data)
        self._save_png_file(png_data)


    def test_am_chars_time_line_via_lambda(self):
        data = [{"x": "1", "y": 1,
                 "text": "[bold]2018 Q1[/]\nThere seems to be some furry animal living in the neighborhood.",
                 "center": "bottom"}, {
                    "x": "2",
                    "y": 1,
                    "text": "[bold]2018 Q2[/]\nWe're now mostly certain it's a fox.",
                    "center": "top"
                }, {
                    "x": "3",
                    "y": 1,
                    "text": "[bold]2018 Q3[/]\nOur dog does not seem to mind the newcomer at all.",
                    "center": "bottom"
                }, {
                    "x": "4",
                    "y": 1,
                    "text": "[bold]2018 Q4[/]\nThe quick brown fox jumps over the lazy dog.",
                    "center": "top"
                }];
        data = json.dumps(data).split(' ')
        payload = {'params': ['am_charts','aaa', 'timeline'] }
        payload.get('params').extend(data)

        #Deploy(self.lambda_name).deploy()

        self.png_data = self.lambda_browser.invoke(payload)

    def test_screenshot__settings_help(self):
        #self.test_update_lambda()
        #url = 'https://www.google.co.uk/aaaa'
        url = 'https://www.whatismybrowser.com/'
        url = 'http://glasswall.atlassian.net/'
        #url = 'chrome://settings/help'
        payload = {"params": ['screenshot', url,], 'data': {}}
        self.png_data = self.lambda_browser.invoke(payload)

    def test_viva_graph(self):
        self.test_update_lambda()
        payload = {"params": ['viva_graph','graph_5QQ', 'default']}
        self.result = self.lambda_browser.invoke(payload)

    def test_invoke_directly__screenshot___settings_help(self):

        url = 'https://www.whatismybrowser.com/'
        url = 'https://glasswall.atlassian.net'
        payload = {"params": ['screenshot', url, ], 'data': {}}
        self.png_data = run(payload, {})



#def use_upgraded_chromium_version(self):
    # updating this programatically didn't work, using the code below
    # # original version is 575458
    # new_revision = '664010'
    # new_revision = '77812'
    # import pyppeteer
    # import pyppeteer.chromium_downloader
    # import os
    # original_version = pyppeteer.__chromium_revision__
    #
    # os.environ['PYPPETEER_CHROMIUM_REVISION']  = new_revision
    # pyppeteer.__chromium_revision__            = new_revision
    # pyppeteer.chromium_downloader.REVISION     = new_revision
    # #pyppeteer.chromium_downloader.downloadURLs = {
    # #                                                'linux': f'{downloads_folder}/{new_revision}/chrome-linux/chrome',
    # #                                                'mac'  : f'{downloads_folder}/{new_revision}/chrome-mac/Chromium.app/Contents/MacOS/Chromium',
    # #                                                'win32': f'{downloads_folder}/{new_revision}/chrome-win32/chrome.exe',
    # #                                                'win64': f'{downloads_folder}/{new_revision}/chrome-win32/chrome.exe',
    # #                                            }
    # from pathlib import Path
    # pyppeteer.chromium_downloader.chromiumExecutable["mac"] = Path(str(pyppeteer.chromium_downloader.chromiumExecutable["mac"]).replace(original_version, new_revision))
    # pyppeteer.chromium_downloader.downloadURLs["mac"]       = Path(str(pyppeteer.chromium_downloader.downloadURLs["mac"]).replace(original_version, new_revision))
    #
    # so ended up changing these values directly on the source code
    # __chromium_revision__ = '575458'       # v69 original one
    # __chromium_revision__ = '628590'       # v74
    # __chromium_revision__ = '664010'       # v76
    # __chromium_revision__ = '701274'       # 79.0.3929
    #__chromium_revision__ = '737645'  # v82  latest

    def test_update_dependency(self):
        from osbot_aws.Dependencies import upload_dependency
        #pip_install_dependency('pyppeteer2')
        upload_dependency('pyppeteer2')
class Test_Lambda_lambda_browser(unittest.TestCase):
    def setUp(self):
        self.lambda_name = 'osbot_browser.lambdas.lambda_browser'
        self.lambda_browser = Lambda(
            self.lambda_name)  #lambdas.browser.lambda_browser')
        self.result = None
        self.png_data = None

        #Deploy(lambda_name).deploy()

    def tearDown(self):
        if self.result is not None:
            Dev.pprint(self.result)
        if self.png_data is not None:
            self._save_png_file(self.png_data)

    def _save_png_file(self, png_data):
        try:
            png_file = '/tmp/lambda_png_file.png'
            if png_data:
                with open(png_file, "wb") as fh:
                    fh.write(base64.decodebytes(png_data.encode()))
                Dev.pprint("Png data with size {0} saved to {1}".format(
                    len(png_data), png_file))
        except Exception as error:
            Dev.print("[_save_png_file][Error] {0}".format(error))
            Dev.print(png_data)

    def test_invoke_directly(self):
        result = run({}, {})
        assert result == '*Here are the `Browser_Commands` commands available:*'

    def test_invoke_directly_version(self):
        result = run({"params": ['version']}, {})
        assert result == Browser_Commands.current_version

    def test_invoke(self):
        payload = {"params": []}
        result = self.lambda_browser.invoke(payload)
        assert result == '*Here are the `Browser_Commands` commands available:*'

    def test_markdown(self):
        markdown = Misc.random_string_and_numbers(
            prefix='# Created from Lambda ')
        payload = {"params": ['markdown', markdown, " \n normal text"]}
        png_data = self.lambda_browser.invoke(payload)
        self._save_png_file(png_data)

    def test_screenshot(self):
        team_id = 'T7F3AUXGV'
        channel = 'DDKUZTK6X'
        url = 'https://www.google.co.uk/aaa'
        #url = 'https://news.bbc.co.uk/aaa'
        #url = 'http://visjs.org/'
        payload = {
            "params": [
                'screenshot',
                url,
            ],
            'data': {
                'channel': channel,
                'team_id': team_id
            }
        }
        result = self.lambda_browser.invoke(payload)
        Dev.pprint(result)

    def test_list(self):
        payload = {"params": ['list']}
        result = self.lambda_browser.invoke(payload)
        assert result == 'Here are the current examples files:'

    def test_lambda_status(self):
        payload = {"params": ['lambda_status']}
        result = self.lambda_browser.invoke(payload)
        assert result == 'Here are the current status of the `graph` lambda function'

    def test_render__bootstrap_cdn(self):
        payload = {
            "params":
            ['render', '/examples/bootstrap-cdn.html', 0, 0, 600, 50]
        }
        png_data = self.lambda_browser.invoke(payload)
        self._save_png_file(png_data)

    def test_render__cup_of_tea(self):
        payload = {
            "params": ['render', 'examples/wardley_map/cup-of-tea.html']
        }
        png_data = self.lambda_browser.invoke(payload)
        self._save_png_file(png_data)

    def test_elk(self):
        payload = {"params": ['elk', 'dashboards']}
        png_data = self.lambda_browser.invoke(payload)
        #Dev.pprint(png_data)
        self._save_png_file(png_data)

    @unittest.skip('hangs on request')
    def test_elk__dashboard_project(self):
        payload = {"params": ['elk', 'dashboard_project', 'GSSP-126']}
        png_data = self.lambda_browser.invoke(payload)
        # Dev.pprint(png_data)
        self._save_png_file(png_data)

    def test_risks(self):
        #payload = {"params": ['render','gs/risk/risks-dashboard.html']}
        payload = {"params": ['risks', 'GSSP-115']}
        png_data = self.lambda_browser.invoke(payload)
        Dev.pprint(png_data)
        self._save_png_file(png_data)

    @unittest.skip('needs fixing (api has moved since this test)')
    def test_vis_js(self):
        nodes = [{
            'id': '123',
            'label': 'vis js\n via lambda'
        }, {
            'id': 'aaa',
            'label': 'another node'
        }]
        edges = [{'from': '123', 'to': 'aaa'}]

        options = {'nodes': {'shape': 'box'}}
        data = {'nodes': nodes, 'edges': edges, 'options': options}

        payload = {"params": ['vis_js', json.dumps(data)]}
        png_data = self.lambda_browser.invoke(payload)
        Dev.pprint(png_data)
        self._save_png_file(png_data)

    @unittest.skip('needs fixing (api has moved since this test)')
    def test_graph(self):
        graph_name = 'graph_XKW'  # 7 nodes
        graph_name = 'graph_MKF'  # 20 nodes

        view_name = 'default'
        payload = {"params": ['graph', graph_name, view_name]}
        png_data = self.lambda_browser.update_with_src().invoke(payload)
        #Dev.pprint(png_data)
        self._save_png_file(png_data)

    def test_graph__view__node_label(self):
        graph_name = 'graph_XKW'  # 7 nodes
        #graph_name = 'graph_VKN'        # 20 nodes
        #graph_name = 'graph_YT4'   # (199 nodes, 236 edges)
        #graph_name = 'graph_VZ5'   # (367 nodes, 653 edges)

        view_name = 'node_label'
        label_key = 'Status'
        payload = {"params": ['graph', graph_name, view_name, label_key]}
        png_data = self.lambda_browser.invoke(payload)
        #Dev.pprint(png_data)
        self._save_png_file(png_data)

    # todo: fix: it is throwing '_AttributeError("\'NoneType\' object has no attribute \'get\'",)_')
    def test_table(self):
        payload = {"params": ['table', 'graph_MKF', 'graph']}
        png_data = self.lambda_browser.invoke(payload)
        Dev.pprint(png_data)
        self._save_png_file(png_data)

    def test_issue(self):
        payload = {"params": ['table', 'graph_MKF', 'issue']}
        png_data = self.lambda_browser.invoke(payload)
        Dev.pprint(png_data)
        self._save_png_file(png_data)

    def test_am_chars_time_line_via_lambda(self):
        data = [{
            "x": "1",
            "y": 1,
            "text":
            "[bold]2018 Q1[/]\nThere seems to be some furry animal living in the neighborhood.",
            "center": "bottom"
        }, {
            "x": "2",
            "y": 1,
            "text": "[bold]2018 Q2[/]\nWe're now mostly certain it's a fox.",
            "center": "top"
        }, {
            "x": "3",
            "y": 1,
            "text":
            "[bold]2018 Q3[/]\nOur dog does not seem to mind the newcomer at all.",
            "center": "bottom"
        }, {
            "x": "4",
            "y": 1,
            "text":
            "[bold]2018 Q4[/]\nThe quick brown fox jumps over the lazy dog.",
            "center": "top"
        }]
        data = json.dumps(data).split(' ')
        payload = {'params': ['am_charts', 'aaa', 'timeline']}
        payload.get('params').extend(data)

        #Deploy(self.lambda_name).deploy()

        self.png_data = self.lambda_browser.invoke(payload)