diff --git a/app/assets/py/apploader_test.py b/app/assets/py/apploader_test.py index e46fe29..cbe90af 100644 --- a/app/assets/py/apploader_test.py +++ b/app/assets/py/apploader_test.py @@ -20,7 +20,7 @@ import WelsonAppLoader_pb2_grpc def run(): with grpc.insecure_channel("localhost:50051") as channel: stub = WelsonAppLoader_pb2_grpc.WelsonAppLoaderStub(channel) - response = stub.Run(WelsonAppLoader_pb2.AppRequest(appName="extramath-test")) + response = stub.Run(WelsonAppLoader_pb2.AppRequest(appName="testloader")) print("Response: " + response.responseText) if __name__ == "__main__": diff --git a/app/index.js b/app/index.js index 8e683e5..c19999e 100644 --- a/app/index.js +++ b/app/index.js @@ -47,6 +47,16 @@ Router.add('/test', function(render) { window.test_start = function(test_id) { SHELL.show(["cscript", "app.js", "testloader", test_id]); }; + + window.gui_check = function() { + var text1 = SHELL.exec("echo hello world!"); + alert(text1); + + var text2 = require("lib/system").getOS(); + alert(text2); + + alert("모든 메시지가 정상적으로 보였다면 테스트에 성공한 것입니다."); + }; var data = JSON.parse(FILE.readFile("data/test-oss-20231030.json", FILE.CdoCharset.CdoUTF_8)); render("app\\test.html", { diff --git a/app/test.html b/app/test.html index 99dad0f..9ed8f2e 100644 --- a/app/test.html +++ b/app/test.html @@ -10,7 +10,11 @@
- + {{if id == 'gui_check'}} + + {{else}} + + {{/if}}
{{:tags[0]}} @@ -18,9 +22,9 @@
{{:description}}
-
- {{for tags}} {{:}}{{/for}} -
+
+ {{for tags}} {{:}}{{/for}} +
diff --git a/data/test-oss-20231030.json b/data/test-oss-20231030.json index 5096b0c..a998a27 100644 --- a/data/test-oss-20231030.json +++ b/data/test-oss-20231030.json @@ -77,12 +77,12 @@ }, { "id": "shell_build_command_line", - "description": "명령 행 빌드 (입력: KV Object -> 출력: Shell Command Line)", + "description": "명령 행 빌드 (입력: Array Object, 출력: Unescaped Command String)", "tags": ["Windows 시스템", "Windows 쉘(Shell)"] }, { "id": "shell_set_charset", - "description": "명령 행 빌드 (입력: KV Object -> 출력: Shell Command Line)", + "description": "문자셋(Charset) 설정", "tags": ["Windows 시스템", "Windows 쉘(Shell)"] }, { diff --git a/testloader.js b/testloader.js index cdf0d0b..a05d46f 100644 --- a/testloader.js +++ b/testloader.js @@ -8,116 +8,272 @@ var profile = JSON.parse(FILE.readFile("data/test-oss-20231030.json", FILE.CdoCh // implement the tests var test_implements = { - - // Ref 1: https://gist.github.com/CityRay/c56e4fa874af9370cc1a367bd43095b0 + + // Ref 1: https://gist.github.com/CityRay/c56e4fa874af9370cc1a367bd43095b0 "es5_polyfills": function() { - var parseIntIgnoresLeadingZeros = (function () { - return parseInt('010', 10) === 10; - }()); - console.log("parseIntIgnoresLeadingZeros: " + String(parseIntIgnoresLeadingZeros) + " (Default on the built-in engine: true)"); + var parseIntIgnoresLeadingZeros = (function () { + return parseInt('010', 10) === 10; + }()); + console.log("parseIntIgnoresLeadingZeros: " + String(parseIntIgnoresLeadingZeros) + " (Default on the built-in engine: true)"); - var DateISOString = (function () { - return !!(Date && Date.prototype && Date.prototype.toISOString); - }()); - console.log("DateISOString: " + String(DateISOString) + " (Default on the built-in engine: false)"); + var DateISOString = (function () { + return !!(Date && Date.prototype && Date.prototype.toISOString); + }()); + console.log("DateISOString: " + String(DateISOString) + " (Default on the built-in engine: false)"); - var result = !!(parseIntIgnoresLeadingZeros && DateISOString); + var result = !!(parseIntIgnoresLeadingZeros && DateISOString); - console.log(result ? - "ECMAScript 5 수준의 런타임입니다. 필수 테스트를 모두 통과하였습니다." : - "ECMAScript 5 수준의 런타임이 아닙니다. 필수 테스트 중 하나를 실패하였습니다."); - }, + console.log(result ? + "ECMAScript 5 수준의 런타임입니다. 필수 테스트를 모두 통과하였습니다." : + "ECMAScript 5 수준의 런타임이 아닙니다. 필수 테스트 중 하나를 실패하였습니다."); + }, - // Ref 1: https://learn.microsoft.com/en-us/previous-versions/windows/desktop/regprov/stdregprov + // Ref 1: https://learn.microsoft.com/en-us/previous-versions/windows/desktop/regprov/stdregprov "registry_find_provider": function() { - var REG = require("lib/registry"); + var REG = require("lib/registry"); - console.log("레지스트리 제공자(StdRegProv) 클래스에 접근을 시도합니다."); - var provider = REG.getProvider(); - - console.log(typeof provider !== "undefined" ? - "레지스트리 제공자 클래스에 성공적으로 연결되었습니다." : - "레지스트리 제공자 클래스에 연결하는데 문제가 있습니다."); - }, + console.log("레지스트리 제공자(StdRegProv) 클래스에 접근을 시도합니다."); + var provider = REG.getProvider(); + + console.log(typeof provider !== "undefined" ? + "레지스트리 제공자 클래스에 성공적으로 연결되었습니다." : + "레지스트리 제공자 클래스에 연결하는데 문제가 있습니다."); + }, "registry_write": function() { - var REG = require("lib/registry"); - var appName = "welsonjs"; - - console.log("레지스트리에 쓰기를 시도합니다."); - REG.write(REG.HKCU, appName + "\\WelsonJSTest", "", "here are in", REG.STRING); - console.log("레지스트리에 쓰기를 완료하였습니다."); - }, + var REG = require("lib/registry"); + var appName = "welsonjs"; + + console.log("레지스트리에 쓰기를 시도합니다."); + REG.write(REG.HKCU, appName + "\\WelsonJSTest", "", "here are in", REG.STRING); + console.log("레지스트리에 쓰기를 완료하였습니다."); + }, "registry_read": function() { - var REG = require("lib/registry"); - var appName = "welsonjs"; - - console.log("레지스트리 읽기를 시도합니다."); - var response = REG.read(REG.HKCU, appName + "\\WelsonJSTest", "", REG.STRING); - console.log("읽음: " + response); - console.log(response === "here are in" ? - "레지스트리를 정상적으로 읽었습니다." : - "레지스트리를 읽는데 문제가 있습니다."); - }, + var REG = require("lib/registry"); + var appName = "welsonjs"; + + console.log("레지스트리 읽기를 시도합니다."); + var response = REG.read(REG.HKCU, appName + "\\WelsonJSTest", "", REG.STRING); + console.log("읽음: " + response); + console.log(response === "here are in" ? + "레지스트리를 정상적으로 읽었습니다." : + "레지스트리를 읽는데 문제가 있습니다."); + }, - "wmi_create_object": function() {}, + "wmi_create_object": function() { + var WMI = require("lib/wmi"); + console.log(typeof WMI.create().interface !== "undefined" ? + "WMI 객체를 정상적으로 생성하였습니다." : + "WMI 객체를 생성하는데 문제가 있습니다."); + }, - "wmi_execute_query": function() {}, + "wmi_execute_query": function() { + var WMI = require("lib/wmi"); - "wmi_result_query": function() {}, + var queryString = "SELECT Caption FROM Win32_OperatingSystem"; + console.log("실행할 쿼리: " + queryString); - "shell_create_object": function() {}, + var result = WMI.execQuery(queryString).fetch().get("Caption").trim(); + console.log("현재 윈도우즈 배포판 종류: " + result); + }, - "shell_build_command_line": function() {}, + "wmi_result_query": function() { + var WMI = require("lib/wmi"); - "shell_set_charset": function() {}, + var queryString = "SELECT Caption FROM Win32_OperatingSystem"; + console.log("실행할 쿼리: " + queryString); - "shell_working_directory": function() {}, + var result = WMI.execQuery(queryString).fetch().get("Caption").trim(); + console.log("현재 윈도우즈 배포판 종류: " + result); + }, - "shell_create_process": function() {}, + "shell_create_object": function() { + var SHELL = require("lib/shell"); + console.log(typeof SHELL.create().interface !== "undefined" ? + "윈도우즈 쉘(Shell) 객체를 정상적으로 생성하였습니다." : + "윈도우즈 쉘(Shell) 객체를 생성하는데 문제가 있습니다."); + }, - "shell_execute": function() {}, + "shell_build_command_line": function() { + var SHELL = require("lib/shell"); + console.log("쉘 명령의 무결성을 훼손시킬 수 있는 경우(따옴표, 쌍따옴표, 띄어쓰기 등을 포함한 경우)를 테스트합니다."); - "shell_run": function() {}, + // 모든 경우를 하나의 배열에 포함 + var test_args = [ + "ppap.exe", + "\"pen\"", + "'apple'", + "apple pen", + "pineapple pen" + ]; + + // 입력과 출력 확인 + console.log("입력 인자: " + test_args.join(" / ")); + console.log("출력 문자열: " + SHELL.build(test_args)); + console.log("정상적으로 명령행이 만들어졌는지 확인하세요."); + }, - "shell_run_as": function() {}, + "shell_set_charset": function() { + var SHELL = require("lib/shell"); - "shell_find_my_documents": function() {}, + var ShellInstance = SHELL.create(); + console.log("현재 기준 문자셋: " + ShellInstance.charset); + console.log("기준 문자셋을 유니코드(UTF-8)로 변경합니다."); + ShellInstance.setCharset(SHELL.CdoCharset.CdoUTF_8); + console.log("현재 기준 문자셋: " + ShellInstance.charset); + }, - "shell_release": function() {}, + "shell_working_directory": function() { + var SHELL = require("lib/shell"); - "powershell_set_command": function() {}, + var ShellInstance = SHELL.create(); + console.log("현재 작업 폴더: " + ShellInstance.workingDirectory); - "powershell_set_file": function() {}, + console.log("작업 폴더를 변경합니다."); + ShellInstance.setWorkingDirectory(ShellInstance.workingDirectory + "\\data"); + console.log("현재 작업 폴더: " + ShellInstance.workingDirectory); + }, - "powershell_set_uri": function() {}, + "shell_create_process": function() { + var SHELL = require("lib/shell"); + }, - "powershell_execute": function() {}, + "shell_execute": function() { + var SHELL = require("lib/shell"); - "powershell_run_as": function() {}, + var response = SHELL.exec("echo done"); + console.log(response == "done" ? + "쉘(Shell) 출력이 정상적으로 작동합니다." : + "쉘(Shell) 출력에 문제가 있습니다."); + }, + + "shell_run": function() { + var SHELL = require("lib/shell"); + + SHELL.run("calc"); + console.log("잠시 후 계산기 프로그램이 열리는지 확인하여 주세요."); + }, + + "shell_run_as": function() { + var SHELL = require("lib/shell"); + + console.log("관리자 권한 요청을 확인하세요."); + SHELL.runAs("calc"); + console.log("잠시 후 계산기 프로그램이 열리는지 확인하여 주세요."); + }, + + "shell_find_my_documents": function() { + var SHELL = require("lib/shell"); + + console.log("내 문서 폴더 위치: " + SHELL.getPathOfMyDocuments()); + }, + + "shell_release": function() { + var SHELL = require("lib/shell"); + + var ShellInstance = SHELL.create(); + ShellInstance.release(); + + console.log(ShellInstance.interface != null ? + "정상적으로 해제되지 않았습니다." : + "정상적으로 해제되었습니다."); + }, + + "powershell_set_command": function() { + + }, + + "powershell_set_file": function() { + + }, + + "powershell_set_uri": function() { + + }, + + "powershell_execute": function() { + + }, + + "powershell_run_as": function() { + + }, - "system_resolve_env": function() {}, + "system_resolve_env": function() { + var SYS = require("lib/system"); - "system_check_as": function() {}, + console.log("기본 프로그램 설치 폴더: " + SYS.getEnvString("PROGRAMFILES")); + console.log("기본 프로그램 설치 폴더가 정상적인 위치를 가르키고 있는지 확인하세요."); + }, - "system_get_os_version": function() {}, + "system_check_as": function() { + var SYS = require("lib/system"); - "system_get_architecture": function() {}, + console.log(SYS.isElevated() ? + "이 런타임은 관리자 모드에서 실행되고 있지 않습니다." : + "이 런타임은 관리자 모드에서 실행되고 있습니다."); + }, - "system_get_uuid": function() {}, + "system_get_os_version": function() { + var SYS = require("lib/system"); + + console.log("현재 사용중인 운영체제: " + SYS.getOS()); + }, - "system_get_working_directory": function() {}, + "system_get_architecture": function() { + var SYS = require("lib/system"); + + console.log("현재 사용중인 아키텍처: " + SYS.getArch()); + }, - "system_get_script_directory": function() {}, + "system_get_uuid": function() { + var SYS = require("lib/system"); - "system_get_network_interfaces": function() {}, + console.log("디바이스 고유 번호: " + SYS.getUUID()); + }, - "system_get_process_list": function() {}, + "system_get_working_directory": function() { + var SYS = require("lib/system"); - "system_get_process_list_by_name": function() {}, - - "system_register_uri": function() {}, + console.log("현재 작업 폴더: " + SYS.getCurrentWorkingDirectory()); + }, + + "system_get_script_directory": function() { + var SYS = require("lib/system"); + + console.log("현재 스크립트 폴더: " + SYS.getCurrentScriptDirectory()); + }, + + "system_get_network_interfaces": function() { + var SYS = require("lib/system"); + + var net_interfaces = SYS.getNetworkInterfaces(); + console.log(JSON.stringify(net_interfaces)); + }, + + "system_get_process_list": function() { + var SYS = require("lib/system"); + + var processList = SYS.getProcessList(); + processList.forEach(function(x) { + console.log(x.Caption, x.ProcessID); + }); + }, + + "system_get_process_list_by_name": function() { + var SYS = require("lib/system"); + + var processList = SYS.getProcessListByName("explorer.exe"); + processList.forEach(function(x) { + console.log(x.Caption, x.ProcessID); + }); + }, + + "system_register_uri": function() { + console.log("웹 브라우저를 열고 주소창에 아래 주소를 입력하세요."); + console.log("welsonjs:///?application=mscalc"); + }, "system_pipe_ipc": function() {}, @@ -147,17 +303,88 @@ var test_implements = { "network_detect_http_ssl": function() {}, - "network_send_icmp": function() {}, + "network_send_icmp": function() { + var SYS = require("lib/system"); - "extramath_dtm": function() {}, + console.log("1.1.1.1로 PING(ICMP) 전송"); + console.log("응답 시간: " + SYS.ping("1.1.1.1") + "ms"); + }, - "extramath_cosine_similarity": function() {}, + "extramath_dtm": function() { + var ExtraMath = require("lib/extramath"); + + var a = "this is an apple"; + var b = "this is red apple"; + + var dtm = new ExtraMath.DTM(); + dtm.add(a); + dtm.add(b); + var mat = dtm.toArray(); - "base64_encode": function() {}, + console.log("Original sentance"); + console.log(a); + console.log(b); - "base64_decode": function() {}, + console.log("Create a DTM(Document-Term Matrix)"); + console.log(mat[0].join(' ')); + console.log(mat[1].join(' ')); + }, - "chromium_run": function() {}, + "extramath_cosine_similarity": function() { + var ExtraMath = require("lib/extramath"); + + var a = "this is an apple"; + var b = "this is red apple"; + + var dtm = new ExtraMath.DTM(); + dtm.add(a); + dtm.add(b); + var mat = dtm.toArray(); + + console.log("Original sentance"); + console.log(a); + console.log(b); + + console.log("Create a DTM(Document-Term Matrix)"); + console.log(mat[0].join(' ')); + console.log(mat[1].join(' ')); + + console.log("Measure Cosine Similarity"); + console.log('' + ExtraMath.arrayCos(mat[0], mat[1])); + console.log('' + ExtraMath.measureSimilarity(a, b)); + }, + + "base64_encode": function() { + var BASE64 = require("lib/base64"); + + var original_text = "hello world"; + var encoded_text = BASE64.encode(original_text); + + console.log("원문: " + original_text); + console.log("인코딩된 문자: " + encoded_text); + + console.log(encoded_text == "aGVsbG8gd29ybGQ=" ? + "인코딩된 문자가 기대값과 일치합니다." : + "인코딩된 문자가 기대값과 불일치합니다."); + }, + + "base64_decode": function() { + var BASE64 = require("lib/base64"); + + var encoded_text = "aGVsbG8gd29ybGQ="; + var original_text = BASE64.decode(encoded_text); + + console.log("인코딩된 문자: " + encoded_text); + console.log("원문: " + original_text); + + console.log(original_text == "hello world" ? + "디코드된 문자가 기대값과 일치합니다." : + "디코드된 문자가 기대값과 불일치합니다."); + }, + + "chromium_run": function() { + + }, "chromium_create_profile": function() {}, @@ -187,33 +414,56 @@ var test_implements = { "chromium_auto_scroll_until_end": function() {}, - "grpc_run_server": function() {}, + "grpc_run_server": function() { + var SHELL = require("lib/shell"); - "grpc_receive_command": function() {}, + SHELL.show(["cscript", "app.js", "grpcloader"]); + }, - "gui_check": function() {} + "grpc_receive_command": function() { + var SHELL = require("lib/shell"); + + SHELL.show(["grpcloader_test.bat"]); + }, + + "gui_check": function() { + var SHELL = require("lib/shell"); + var SYS = require("lib/system"); + + var text1 = SHELL.exec("echo hello world!"); + alert(text1); + + var text2 = SYS.getOS(); + alert(text2); + + alert("모든 메시지가 정상적으로 보였다면 테스트에 성공한 것입니다."); + } }; function main(args) { - var test_id = args[0]; + if (args.length > 0) { + var test_id = args[0]; - if (test_id in test_implements) { - var test = profile.tests.find(function(x) { - return (x.id == test_id); - }); - var description = test.description; + if (test_id in test_implements) { + var test = profile.tests.find(function(x) { + return (x.id == test_id); + }); + var description = test.description; - console.log("Test ID: " + test_id); - console.log("Will be test: " + description); + console.log("Test ID: " + test_id); + console.log("Will be test: " + description); - try { - test_implements[test_id](); - } catch (e) { - console.error("ERROR: " + e.message) + try { + test_implements[test_id](); + } catch (e) { + console.error("ERROR: " + e.message) + } + + console.log("Will be close this window after 90 seconds"); + sleep(90 * 1000); } - - console.log("Will be close this window after 90 seconds"); - sleep(90 * 1000); + } else { + console.log("hello world!"); } }