11865So.canty@f5.comimport pytest
21865So.canty@f5.com
31865So.canty@f5.comfrom distutils.version import LooseVersion
41865So.canty@f5.comfrom unit.applications.lang.node import TestApplicationNode
51865So.canty@f5.comfrom unit.applications.websockets import TestApplicationWebsocket
61865So.canty@f5.com
71865So.canty@f5.com
81865So.canty@f5.comclass TestNodeESModules(TestApplicationNode):
91865So.canty@f5.com    prerequisites = {
101865So.canty@f5.com        'modules': {
111865So.canty@f5.com            'node': lambda v:  LooseVersion(v) >= LooseVersion("14.16.0")
121865So.canty@f5.com        }
131865So.canty@f5.com    }
141865So.canty@f5.com
151865So.canty@f5.com    es_modules = True
161865So.canty@f5.com    ws = TestApplicationWebsocket()
171865So.canty@f5.com
181865So.canty@f5.com    def assert_basic_application(self):
191865So.canty@f5.com        resp = self.get()
201865So.canty@f5.com        assert resp['headers']['Content-Type'] == 'text/plain', 'basic header'
211865So.canty@f5.com        assert resp['body'] == 'Hello World\n', 'basic body'
221865So.canty@f5.com
23*1876So.canty@f5.com    def test_node_es_modules_loader_http(self):
24*1876So.canty@f5.com        self.load('loader/es_modules_http', name="app.mjs")
251865So.canty@f5.com
261865So.canty@f5.com        self.assert_basic_application()
271865So.canty@f5.com
28*1876So.canty@f5.com    def test_node_es_modules_loader_http_indirect(self):
29*1876So.canty@f5.com        self.load('loader/es_modules_http_indirect', name="app.js")
301865So.canty@f5.com
311865So.canty@f5.com        self.assert_basic_application()
321865So.canty@f5.com
33*1876So.canty@f5.com    def test_node_es_modules_loader_websockets(self):
34*1876So.canty@f5.com        self.load('loader/es_modules_websocket', name="app.mjs")
351865So.canty@f5.com
361865So.canty@f5.com        message = 'blah'
371865So.canty@f5.com
381865So.canty@f5.com        _, sock, _ = self.ws.upgrade()
391865So.canty@f5.com
401865So.canty@f5.com        self.ws.frame_write(sock, self.ws.OP_TEXT, message)
411865So.canty@f5.com        frame = self.ws.frame_read(sock)
421865So.canty@f5.com
431865So.canty@f5.com        assert message == frame['data'].decode('utf-8'), 'mirror'
441865So.canty@f5.com
451865So.canty@f5.com        self.ws.frame_write(sock, self.ws.OP_TEXT, message)
461865So.canty@f5.com        frame = self.ws.frame_read(sock)
471865So.canty@f5.com
481865So.canty@f5.com        assert message == frame['data'].decode('utf-8'), 'mirror 2'
491865So.canty@f5.com
501865So.canty@f5.com        sock.close()
51