@webos-tools/cli 3.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (177) hide show
  1. package/.eslintignore +1 -0
  2. package/.eslintrc.js +52 -0
  3. package/APIs.js +79 -0
  4. package/CHANGELOG.md +110 -0
  5. package/LICENSE +201 -0
  6. package/README.md +218 -0
  7. package/bin/ares-config.js +199 -0
  8. package/bin/ares-device-info.js +30 -0
  9. package/bin/ares-device.js +219 -0
  10. package/bin/ares-generate.js +270 -0
  11. package/bin/ares-inspect.js +179 -0
  12. package/bin/ares-install.js +223 -0
  13. package/bin/ares-launch.js +318 -0
  14. package/bin/ares-log.js +255 -0
  15. package/bin/ares-novacom.js +223 -0
  16. package/bin/ares-package.js +336 -0
  17. package/bin/ares-pull.js +156 -0
  18. package/bin/ares-push.js +155 -0
  19. package/bin/ares-server.js +174 -0
  20. package/bin/ares-setup-device.js +520 -0
  21. package/bin/ares-shell.js +132 -0
  22. package/bin/ares.js +166 -0
  23. package/files/conf/ares.json +49 -0
  24. package/files/conf/command-service.json +73 -0
  25. package/files/conf/config.json +22 -0
  26. package/files/conf/ipk.json +30 -0
  27. package/files/conf/novacom-devices.json +35 -0
  28. package/files/conf/query/query-app.json +14 -0
  29. package/files/conf/query/query-hosted.json +18 -0
  30. package/files/conf/query/query-package.json +10 -0
  31. package/files/conf/query/query-service.json +6 -0
  32. package/files/conf/sdk.json +8 -0
  33. package/files/conf/template.json +57 -0
  34. package/files/conf/webos_emul +27 -0
  35. package/files/conf-base/env/sdk-ose.json +8 -0
  36. package/files/conf-base/env/sdk-tv.json +8 -0
  37. package/files/conf-base/profile/config-ose.json +21 -0
  38. package/files/conf-base/profile/config-tv.json +22 -0
  39. package/files/conf-base/query/query-app.json +14 -0
  40. package/files/conf-base/query/query-hosted.json +18 -0
  41. package/files/conf-base/query/query-package.json +10 -0
  42. package/files/conf-base/query/query-service.json +6 -0
  43. package/files/conf-base/template-conf/ose-templates.json +67 -0
  44. package/files/conf-base/template-conf/tv-sdk-templates.json +57 -0
  45. package/files/help/ares-config.help +43 -0
  46. package/files/help/ares-device.help +94 -0
  47. package/files/help/ares-generate.help +65 -0
  48. package/files/help/ares-inspect.help +70 -0
  49. package/files/help/ares-install.help +90 -0
  50. package/files/help/ares-launch.help +100 -0
  51. package/files/help/ares-log-pmlogd.help +84 -0
  52. package/files/help/ares-log.help +101 -0
  53. package/files/help/ares-novacom.help +68 -0
  54. package/files/help/ares-package.help +101 -0
  55. package/files/help/ares-pull.help +38 -0
  56. package/files/help/ares-push.help +38 -0
  57. package/files/help/ares-server.help +39 -0
  58. package/files/help/ares-setup-device.help +75 -0
  59. package/files/help/ares-shell.help +42 -0
  60. package/files/help/ares.help +47 -0
  61. package/files/help/readme.help +23 -0
  62. package/files/schema/ApplicationDescription.schema +319 -0
  63. package/files/schema/NovacomDevices.schema +61 -0
  64. package/files/templates/ose-sdk-templates/appinfo/appinfo.json +10 -0
  65. package/files/templates/ose-sdk-templates/bootplate-web/index.html +88 -0
  66. package/files/templates/ose-sdk-templates/hosted-webapp/index.html +14 -0
  67. package/files/templates/ose-sdk-templates/icon/icon.png +0 -0
  68. package/files/templates/ose-sdk-templates/js-service/helloclient.js +31 -0
  69. package/files/templates/ose-sdk-templates/js-service/helloworld_webos_service.js +188 -0
  70. package/files/templates/ose-sdk-templates/qml-app/main.qml +68 -0
  71. package/files/templates/ose-sdk-templates/qmlappinfo/appinfo.json +10 -0
  72. package/files/templates/ose-sdk-templates/serviceinfo/package.json +11 -0
  73. package/files/templates/ose-sdk-templates/serviceinfo/services.json +8 -0
  74. package/files/templates/tv-sdk-templates/appinfo/appinfo.json +10 -0
  75. package/files/templates/tv-sdk-templates/bootplate-web/index.html +58 -0
  76. package/files/templates/tv-sdk-templates/bootplate-web/webOSTVjs-1.2.4/LICENSE-2.0.txt +202 -0
  77. package/files/templates/tv-sdk-templates/bootplate-web/webOSTVjs-1.2.4/webOSTV-dev.js +1 -0
  78. package/files/templates/tv-sdk-templates/bootplate-web/webOSTVjs-1.2.4/webOSTV.js +1 -0
  79. package/files/templates/tv-sdk-templates/hosted-webapp/index.html +14 -0
  80. package/files/templates/tv-sdk-templates/js-service/helloworld_service.js +37 -0
  81. package/files/templates/tv-sdk-templates/packageinfo/packageinfo.json +4 -0
  82. package/files/templates/tv-sdk-templates/serviceinfo/package.json +11 -0
  83. package/files/templates/tv-sdk-templates/serviceinfo/services.json +8 -0
  84. package/files/templates/tv-sdk-templates/webicon/icon.png +0 -0
  85. package/files/templates/tv-sdk-templates/webicon/largeIcon.png +0 -0
  86. package/lib/base/ares.html +40 -0
  87. package/lib/base/cli-appdata.js +289 -0
  88. package/lib/base/cli-control.js +44 -0
  89. package/lib/base/common-tools.js +29 -0
  90. package/lib/base/error-handler.js +265 -0
  91. package/lib/base/file-watcher.js +155 -0
  92. package/lib/base/help-format.js +147 -0
  93. package/lib/base/luna.js +178 -0
  94. package/lib/base/novacom.js +1191 -0
  95. package/lib/base/sdkenv.js +59 -0
  96. package/lib/base/server.js +137 -0
  97. package/lib/base/setup-device.js +324 -0
  98. package/lib/base/version-tools.js +79 -0
  99. package/lib/com.sdk.ares.hostedapp.ipk +0 -0
  100. package/lib/device.js +1419 -0
  101. package/lib/generator.js +377 -0
  102. package/lib/inspect.js +494 -0
  103. package/lib/install.js +463 -0
  104. package/lib/launch.js +605 -0
  105. package/lib/log.js +584 -0
  106. package/lib/package.js +2129 -0
  107. package/lib/pull.js +231 -0
  108. package/lib/pusher.js +210 -0
  109. package/lib/session.js +74 -0
  110. package/lib/shell.js +193 -0
  111. package/lib/tar-filter-pack.js +62 -0
  112. package/lib/util/copy.js +31 -0
  113. package/lib/util/createFileName.js +40 -0
  114. package/lib/util/eof.js +30 -0
  115. package/lib/util/json.js +63 -0
  116. package/lib/util/merge.js +14 -0
  117. package/lib/util/objclone.js +40 -0
  118. package/lib/util/spinner.js +37 -0
  119. package/npm-shrinkwrap.json +85 -0
  120. package/package.json +98 -0
  121. package/spec/helpers/reporter.js +65 -0
  122. package/spec/jsSpecs/apiTest/generator.spec.js +372 -0
  123. package/spec/jsSpecs/apiTest/inspector.spec.js +89 -0
  124. package/spec/jsSpecs/apiTest/installer.spec.js +67 -0
  125. package/spec/jsSpecs/apiTest/launcher.spec.js +150 -0
  126. package/spec/jsSpecs/apiTest/packager.spec.js +194 -0
  127. package/spec/jsSpecs/apiTest/puller.spec.js +101 -0
  128. package/spec/jsSpecs/apiTest/pusher.spec.js +103 -0
  129. package/spec/jsSpecs/apiTest/server.spec.js +115 -0
  130. package/spec/jsSpecs/apiTest/setupDevice.spec.js +93 -0
  131. package/spec/jsSpecs/apiTest/shell.spec.js +49 -0
  132. package/spec/jsSpecs/ares-config.spec.js +78 -0
  133. package/spec/jsSpecs/ares-device.spec.js +443 -0
  134. package/spec/jsSpecs/ares-generate.spec.js +397 -0
  135. package/spec/jsSpecs/ares-inspect.spec.js +252 -0
  136. package/spec/jsSpecs/ares-install.spec.js +150 -0
  137. package/spec/jsSpecs/ares-launch.spec.js +301 -0
  138. package/spec/jsSpecs/ares-log.spec.js +824 -0
  139. package/spec/jsSpecs/ares-novacom.spec.js +149 -0
  140. package/spec/jsSpecs/ares-package.spec.js +1211 -0
  141. package/spec/jsSpecs/ares-pull.spec.js +157 -0
  142. package/spec/jsSpecs/ares-push.spec.js +146 -0
  143. package/spec/jsSpecs/ares-server.spec.js +160 -0
  144. package/spec/jsSpecs/ares-setup-device.spec.js +281 -0
  145. package/spec/jsSpecs/ares-shell.spec.js +220 -0
  146. package/spec/jsSpecs/ares.spec.js +83 -0
  147. package/spec/jsSpecs/common-spec.js +169 -0
  148. package/spec/support/jasmine.json +22 -0
  149. package/spec/tempFiles/com.jasmine.native.app_0.0.1_arm.ipk +0 -0
  150. package/spec/tempFiles/com.jasmine.native.app_0.0.1_x86.ipk +0 -0
  151. package/spec/tempFiles/com.jasmine.web.app_0.0.1_all.ipk +0 -0
  152. package/spec/tempFiles/com.logtest.web.app_1.0.0_all.ipk +0 -0
  153. package/spec/tempFiles/copyFiles/helloFile.txt +1 -0
  154. package/spec/tempFiles/copyFiles/testFile.txt +1 -0
  155. package/spec/tempFiles/ipks/com.sample.echo_0.0.1_all.ipk +0 -0
  156. package/spec/tempFiles/ipks/com.web.app_1.0.0_all.ipk +0 -0
  157. package/spec/tempFiles/nativeApp/auto/pkg_arm64/GLES2 +0 -0
  158. package/spec/tempFiles/nativeApp/auto/pkg_arm64/appinfo.json +9 -0
  159. package/spec/tempFiles/nativeApp/auto/pkg_arm64/icon.png +0 -0
  160. package/spec/tempFiles/nativeApp/auto/pkg_arm64/largeIcon.png +0 -0
  161. package/spec/tempFiles/nativeApp/ose/pkg_arm/Hello +0 -0
  162. package/spec/tempFiles/nativeApp/ose/pkg_arm/appinfo.json +9 -0
  163. package/spec/tempFiles/nativeApp/ose/pkg_arm/icon.png +0 -0
  164. package/spec/tempFiles/nativeApp/ose/pkg_arm/largeIcon.png +0 -0
  165. package/spec/tempFiles/nativeApp/ose/pkg_arm/package.properties +2 -0
  166. package/spec/tempFiles/nativeApp/oseEmul/pkg_x86/Hello +0 -0
  167. package/spec/tempFiles/nativeApp/oseEmul/pkg_x86/appinfo.json +9 -0
  168. package/spec/tempFiles/nativeApp/oseEmul/pkg_x86/icon.png +0 -0
  169. package/spec/tempFiles/nativeApp/oseEmul/pkg_x86/largeIcon.png +0 -0
  170. package/spec/tempFiles/nativeApp/rsi/pkg_x86/GLES2 +0 -0
  171. package/spec/tempFiles/nativeApp/rsi/pkg_x86/appinfo.json +9 -0
  172. package/spec/tempFiles/nativeApp/rsi/pkg_x86/icon.png +0 -0
  173. package/spec/tempFiles/nativeApp/rsi/pkg_x86/largeIcon.png +0 -0
  174. package/spec/tempFiles/sign/sign.crt +32 -0
  175. package/spec/tempFiles/sign/signPriv.key +52 -0
  176. package/spec/test_data/ares-generate.json +41 -0
  177. package/spec/test_data/ares.json +33 -0
@@ -0,0 +1,150 @@
1
+ /*
2
+ * Copyright (c) 2023-2024 LG Electronics Inc.
3
+ *
4
+ * SPDX-License-Identifier: Apache-2.0
5
+ */
6
+
7
+ const path = require('path'),
8
+ exec = require('child_process').exec,
9
+ common = require('../common-spec'),
10
+ launcher = require('../../../lib/launch');
11
+
12
+ const aresCmd = 'Launcher',
13
+ sampleAppPath = path.join(__dirname, "../..", "tempFiles/sampleApp"),
14
+ launchOptions = {
15
+ display: 0
16
+ };
17
+
18
+ let options,
19
+ expectedTemplate;
20
+
21
+ beforeAll(function(done) {
22
+ common.getOptions()
23
+ .then(function(result) {
24
+ options = result;
25
+ return common.getExpectedResult("ares-generate");
26
+ }).then(function(result) {
27
+ expectedTemplate = result.template;
28
+ done();
29
+ });
30
+ });
31
+
32
+ describe("Test setting", function() {
33
+ it("Add device with ares-setup-device", function(done) {
34
+ common.resetDeviceList()
35
+ .then(function() {
36
+ return common.addDeviceInfo();
37
+ }).then(function(result) {
38
+ expect(result).toContain(options.device);
39
+ done();
40
+ }).catch(function(err) {
41
+ expect(err).toContain("The specified value already exist");
42
+ done();
43
+ });
44
+ });
45
+
46
+ it('Install sample ipk to device with ares-install', function(done) {
47
+ const installCmd = common.makeCmd('ares-install');
48
+ exec(installCmd + ` ${options.ipkPath}`, function(error, stdout, stderr) {
49
+ if (stderr && stderr.length > 0) {
50
+ common.detectNodeMessage(stderr);
51
+ }
52
+ expect(stdout).toContain("Success");
53
+ setTimeout(function() {
54
+ done();
55
+ },3000);
56
+ });
57
+ });
58
+ });
59
+
60
+
61
+ describe(aresCmd + '.launch()', function() {
62
+ it('Launch sample App', function(done) {
63
+ launcher.launch(launchOptions, options.pkgId, {}, function(err, value) {
64
+ expect(value.msg).toContain(`Launched application ${options.pkgId}`);
65
+ setTimeout(function() {
66
+ done();
67
+ },1000);
68
+ });
69
+
70
+ });
71
+ });
72
+
73
+ describe(aresCmd + '.listRunningApp()', function() {
74
+ it('List up sample app', function(done) {
75
+ launcher.listRunningApp(launchOptions, function(err, value) {
76
+ expect(JSON.stringify(value)).toContain(`${options.pkgId}`);
77
+ done();
78
+ });
79
+ });
80
+ });
81
+
82
+ describe(aresCmd + '.close()', function() {
83
+ it('Close sample app', function(done) {
84
+ launcher.close(launchOptions, options.pkgId, {}, function(err, value) {
85
+ expect(value.msg).toContain(`${options.pkgId}`);
86
+ done();
87
+ });
88
+ });
89
+ });
90
+
91
+ describe("Test setting", function() {
92
+ it('Remove installed sample app with ares-install', function(done) {
93
+ const installCmd = common.makeCmd('ares-install');
94
+ exec(installCmd + ` -r ${options.pkgId}`, function(error, stdout, stderr) {
95
+ if (stderr && stderr.length > 0) {
96
+ common.detectNodeMessage(stderr);
97
+ }
98
+ expect(stdout).toContain(`Removed package ${options.pkgId}`);
99
+ done();
100
+ });
101
+ });
102
+ });
103
+
104
+ describe(aresCmd + '.launch() with hosted option', function() {
105
+ beforeAll(function(done) {
106
+ common.removeOutDir(sampleAppPath);
107
+ done();
108
+ });
109
+ afterAll(function(done) {
110
+ common.removeOutDir(sampleAppPath);
111
+ done();
112
+ });
113
+
114
+ it('Test setting: Generate SampleApp', function(done) {
115
+ const generateCmd = common.makeCmd('ares-generate');
116
+ exec(generateCmd + ` -t ${expectedTemplate.webapp} -p "id=com.sample.app" ${sampleAppPath}`, function(error, stdout, stderr) {
117
+ if (stderr && stderr.length > 0) {
118
+ common.detectNodeMessage(stderr);
119
+ }
120
+ expect(stdout).toContain(`Generating ${expectedTemplate.webapp}`);
121
+ expect(error).toBeNull();
122
+ done();
123
+ });
124
+ });
125
+
126
+ it(aresCmd + '.launch() with hosted option', function(done) {
127
+ let outputData="";
128
+ launchOptions.installMode = "Hosted";
129
+ launchOptions.hostedurl = `${sampleAppPath}`;
130
+ launcher.launch(launchOptions, "com.sdk.ares.hostedapp", {}, function() {
131
+ }, function(output) {
132
+ outputData += output;
133
+ setTimeout(function() {
134
+ expect(outputData).toContain('Ares Hosted App is now running');
135
+ done();
136
+ },5000);
137
+ });
138
+ });
139
+
140
+ it('Test setting: Remove installed ares-hosted app with ares-install', function(done) {
141
+ const installCmd = common.makeCmd('ares-install');
142
+ exec(installCmd + ' -r com.sdk.ares.hostedapp', function(error, stdout, stderr) {
143
+ if (stderr && stderr.length > 0) {
144
+ common.detectNodeMessage(stderr);
145
+ }
146
+ expect(stdout).toContain(`Removed package com.sdk.ares.hostedapp`);
147
+ done();
148
+ });
149
+ });
150
+ });
@@ -0,0 +1,194 @@
1
+ /*
2
+ * Copyright (c) 2023-2024 LG Electronics Inc.
3
+ *
4
+ * SPDX-License-Identifier: Apache-2.0
5
+ */
6
+ const path = require('path'),
7
+ fs = require('fs'),
8
+ exec = require('child_process').exec,
9
+ common = require('../common-spec'),
10
+ Packager = require('../../../lib/package');
11
+
12
+ const packager = new Packager.Packager(),
13
+ tempDirPath = path.join(__dirname, "../..", "tempFiles"),
14
+ sampleAppPath = path.join(tempDirPath, "sampleApp"),
15
+ sampleServicePath = path.join(tempDirPath, "sampleService"),
16
+ outputPath = path.join(tempDirPath, "output"),
17
+ appPathByRom = path.join(outputPath, "usr/palm/applications"),
18
+ appPkgPath = path.join(outputPath, "com.webos.sample.app_1.0.0_all.ipk"),
19
+ ipkBasePath = path.join(tempDirPath, "ipks");
20
+
21
+ const aresCmd = 'Packager',
22
+ sampleServicePaths = [],
23
+ packageOptions = {};
24
+
25
+ let expectedTemplate;
26
+
27
+ beforeAll(function(done) {
28
+ common.getExpectedResult("ares-generate")
29
+ .then(function(result) {
30
+ expectedTemplate = result.template;
31
+ done();
32
+ });
33
+ });
34
+
35
+ afterAll(function(done) {
36
+ common.removeOutDir(sampleAppPath); // can be in afterAll
37
+ common.removeOutDir(sampleServicePath); // can be in afterAll
38
+ done();
39
+ });
40
+
41
+ describe("Test setting", function() {
42
+ it('Generate a sample app for packaging', function(done) {
43
+ common.removeOutDir(sampleAppPath);
44
+ const generateCmd = common.makeCmd('ares-generate');
45
+ exec(generateCmd + ` -t ${expectedTemplate.webapp} -p "id=com.webos.sample.app" -p "version=1.0.0" ${sampleAppPath}`, function(error, stdout, stderr) {
46
+ if (stderr && stderr.length > 0) {
47
+ common.detectNodeMessage(stderr);
48
+ }
49
+ expect(stdout).toContain("Generating");
50
+ expect(error).toBeNull();
51
+ done();
52
+ });
53
+ });
54
+
55
+ it('Generate two sample services for packaging', function(done) {
56
+ common.removeOutDir(sampleServicePath);
57
+ const serviceid = ["com.webos.sample.app.service", "com.webos.sample.service1", "com.webos.sample.service2"];
58
+ serviceid.forEach(function(svcId) {
59
+ const svcPath = path.join(sampleServicePath, svcId);
60
+ sampleServicePaths.push(path.join(sampleServicePath, svcId));
61
+ const generateCmd = common.makeCmd('ares-generate');
62
+ exec(generateCmd + ` -t ${expectedTemplate.jsservice} -s ${svcId} ${svcPath}`, function(error, stdout, stderr) {
63
+ if (stderr && stderr.length > 0) {
64
+ common.detectNodeMessage(stderr);
65
+ }
66
+ expect(stdout).toContain("Generating");
67
+ done();
68
+ });
69
+ });
70
+ });
71
+ });
72
+
73
+ describe(aresCmd + '.generatePackage()', function() {
74
+ beforeEach(function(done) {
75
+ common.removeOutDir(outputPath);
76
+ done();
77
+ });
78
+ afterEach(function(done) {
79
+ common.removeOutDir(outputPath);
80
+ done();
81
+ });
82
+
83
+ it('Package web app with -o(--outdir)', function(done) {
84
+ packager.generatePackage([`${sampleAppPath}`], outputPath, packageOptions, function(data) {
85
+ expect(data).toContain("Create");
86
+ }, function(err, value) {
87
+ expect(value.msg).toContain("Success");
88
+ expect(fs.existsSync(appPkgPath)).toBe(true);
89
+ setTimeout(function() {
90
+ done();
91
+ },3000);
92
+ });
93
+ });
94
+
95
+ it('Package web app & service with -o(--outdir)', function(done) {
96
+ const source = [sampleAppPath.toString(), sampleServicePaths[0].toString()];
97
+ packager.generatePackage(source, outputPath, packageOptions, function(data) {
98
+ expect(data).toContain("Create");
99
+ }, function(err, value) {
100
+ expect(value.msg).toContain("Success");
101
+ expect(fs.existsSync(appPkgPath)).toBe(true);
102
+ setTimeout(function() {
103
+ done();
104
+ },3000);
105
+ });
106
+ });
107
+
108
+ it('Create output a directory structure with app', function(done) {
109
+ const source = [sampleAppPath.toString(), sampleServicePaths[0].toString()];
110
+ packageOptions.rom = true;
111
+ packager.generatePackage(source, outputPath, packageOptions, function(data) {
112
+ expect(data).toContain("Create output directory");
113
+ }, function(err, value) {
114
+ expect(value.msg).toContain("Success");
115
+ setTimeout(function() {
116
+ const createdSvcPath = path.join(outputPath, 'usr/palm/services');
117
+ expect(fs.existsSync(appPathByRom)).toBe(true);
118
+ expect(fs.existsSync(createdSvcPath)).toBe(true);
119
+ done();
120
+ },3000);
121
+ delete packageOptions.rom;
122
+ });
123
+ });
124
+ });
125
+
126
+ describe(aresCmd + '.generatePackage()', function() {
127
+ const tmpFilePath = path.join(sampleAppPath, "tmpFile");
128
+ beforeEach(function(done) {
129
+ common.removeOutDir(outputPath);
130
+ fs.writeFileSync(tmpFilePath, "", 'utf8');
131
+ done();
132
+ });
133
+
134
+ afterEach(function(done) {
135
+ common.removeOutDir(tmpFilePath);
136
+ common.removeOutDir(outputPath);
137
+ done();
138
+ });
139
+
140
+ it('Check exclude file option', function(done) {
141
+ let outputData="";
142
+ packageOptions.rom = true;
143
+ packageOptions.excludefiles = "tmpFile";
144
+ packager.generatePackage([`${sampleAppPath}`], outputPath, packageOptions, function(data) {
145
+ outputData += data;
146
+ }, function(err, value) {
147
+ expect(outputData).toContain("Create");
148
+ expect(value.msg).toContain("Success");
149
+ expect(fs.existsSync(path.join(appPathByRom, "com.webos.sample.app/tmpFile"))).toBe(false);
150
+ done();
151
+ delete packageOptions.excludefiles;
152
+ delete packageOptions.rom;
153
+ });
154
+ });
155
+ });
156
+
157
+ describe(aresCmd + ".analyzeIPK()", function() {
158
+ it('Info of web app and service package with info', function(done) {
159
+ const webIpk= path.join(ipkBasePath, "com.web.app_1.0.0_all.ipk");
160
+ packageOptions.info = webIpk;
161
+ packager.analyzeIPK(packageOptions, function(err, value) {
162
+ expect(value.msg).toContain("< Package Information >");
163
+ expect(value.msg).toContain("< Application Information >");
164
+ expect(value.msg).toContain("< Service Information >");
165
+ done();
166
+ delete packageOptions.info;
167
+ });
168
+ });
169
+
170
+ it('Info of web app and service package with infodetail', function(done) {
171
+ const webIpk= path.join(ipkBasePath, "com.web.app_1.0.0_all.ipk");
172
+ packageOptions.infodetail = webIpk;
173
+ packager.analyzeIPK(packageOptions, function(err, value) {
174
+ expect(value.msg).toContain("< packageinfo.json >");
175
+ expect(value.msg).toContain("< appinfo.json >");
176
+ expect(value.msg).toContain("< services.json >");
177
+ expect(value.msg).toContain("< package.json >");
178
+ done();
179
+ delete packageOptions.infodetail;
180
+ });
181
+ });
182
+
183
+ it('Info of external native app and service package', function(done) {
184
+ const externalAppIpk= path.join(ipkBasePath, "com.sample.echo_0.0.1_all.ipk");
185
+ packageOptions.info = externalAppIpk;
186
+ packager.analyzeIPK(packageOptions, function(err, value) {
187
+ expect(value.msg).toContain("< Package Information >");
188
+ expect(value.msg).toContain("< Application Information >");
189
+ expect(value.msg).toContain("< Service Information >");
190
+ done();
191
+ delete packageOptions.info;
192
+ });
193
+ });
194
+ });
@@ -0,0 +1,101 @@
1
+ /*
2
+ * Copyright (c) 2023-2024 LG Electronics Inc.
3
+ *
4
+ * SPDX-License-Identifier: Apache-2.0
5
+ */
6
+
7
+ const path = require('path'),
8
+ exec = require('child_process').exec,
9
+ common = require('../common-spec'),
10
+ puller = require('../../../lib/pull');
11
+
12
+ const aresCmd = 'Puller',
13
+ dstPath = path.join(__dirname, "../..", "tempFiles"),
14
+ pullOptions = {};
15
+
16
+ let options,
17
+ outputData="";
18
+
19
+ beforeAll(function(done) {
20
+ common.getOptions()
21
+ .then(function(result) {
22
+ options = result;
23
+ done();
24
+ });
25
+ });
26
+
27
+ beforeEach(function(done) {
28
+ const shellCmd = common.makeCmd('ares-shell');
29
+ exec(shellCmd + ' -r "touch /tmp/aresfile"', function() {
30
+ done();
31
+ });
32
+ });
33
+
34
+ afterEach(function(done) {
35
+ common.removeOutDir(path.join(dstPath, "aresfile"));
36
+ done();
37
+ });
38
+
39
+ describe("Test setting", function() {
40
+ it("Add device with ares-setup-device", function(done) {
41
+ common.resetDeviceList()
42
+ .then(function() {
43
+ return common.addDeviceInfo();
44
+ }).then(function(result) {
45
+ expect(result).toContain(options.device);
46
+ done();
47
+ }).catch(function(err) {
48
+ expect(err).toContain("The specified value already exist");
49
+ done();
50
+ });
51
+ });
52
+ });
53
+
54
+ describe(aresCmd + '.pull()', function() {
55
+ it('Copy file from a device to host machine', function(done) {
56
+ puller.pull("/tmp/aresfile", `${dstPath}`, pullOptions, function(err, value) {
57
+ expect(outputData).toContain(dstPath);
58
+ expect(outputData).toContain("1 file(s) pulled");
59
+ expect(value.msg).toContain("Success");
60
+ done();
61
+ }, function(output) {
62
+ outputData += output;
63
+ });
64
+ });
65
+
66
+ it('Copy file from a device to host machine with ignore option', function(done) {
67
+ outputData="";
68
+ pullOptions.ignore = true;
69
+ puller.pull("/tmp/aresfile", `${dstPath}`, pullOptions, function(err, value) {
70
+ expect(outputData).toContain("1 file(s) pulled");
71
+ expect(value.msg).toContain("Success");
72
+ done();
73
+ }, function(output) {
74
+ outputData += output;
75
+ });
76
+ });
77
+ });
78
+
79
+ describe(aresCmd + ' negative TC', function() {
80
+ beforeEach(function(done) {
81
+ const shellCmd = common.makeCmd('ares-shell');
82
+ exec(shellCmd + ' -r "touch /tmp/aresfile"', function() {
83
+ done();
84
+ });
85
+ });
86
+
87
+ it('Copy file to not exist local directory', function(done) {
88
+ puller.pull("/tmp/aresfile", 'invalidDir', pullOptions, function(err) {
89
+ expect(err.toString()).toContain("ENOENT: no such file or directory, lstat");
90
+ expect(err.toString()).toContain("Please check if the path is valid");
91
+ done();
92
+ });
93
+ });
94
+
95
+ it('Copy invalid file from target', function(done) {
96
+ puller.pull("/tmp/invalidFile", 'tempDir', pullOptions, function(err) {
97
+ expect(err.toString()).toContain("The specified path does not exist <SOURCE> : /tmp/invalidFile");
98
+ done();
99
+ });
100
+ });
101
+ });
@@ -0,0 +1,103 @@
1
+ /*
2
+ * Copyright (c) 2023-2024 LG Electronics Inc.
3
+ *
4
+ * SPDX-License-Identifier: Apache-2.0
5
+ */
6
+
7
+ const path = require('path'),
8
+ exec = require('child_process').exec,
9
+ common = require('../common-spec'),
10
+ Pusher = require('../../../lib/pusher');
11
+
12
+ const aresCmd = 'Pusher',
13
+ srcPath = path.join(__dirname, "../..", "tempFiles/copyFiles"),
14
+ push = new Pusher(),
15
+ src = [`${srcPath}`];
16
+
17
+ let options;
18
+
19
+ const pushOptions = {
20
+ };
21
+
22
+ beforeAll(function(done) {
23
+ common.getOptions()
24
+ .then(function(result) {
25
+ options = result;
26
+ done();
27
+ });
28
+ });
29
+
30
+ afterAll(function(done) {
31
+ const shellCmd = common.makeCmd('ares-shell');
32
+ exec(shellCmd + ` -r "rm -rf /tmp/copyFiles"`, function() {
33
+ done();
34
+ });
35
+ });
36
+
37
+ describe("Test setting", function() {
38
+ it("Add device with ares-setup-device", function(done) {
39
+ common.resetDeviceList()
40
+ .then(function() {
41
+ return common.addDeviceInfo();
42
+ }).then(function(result) {
43
+ expect(result).toContain(options.device);
44
+ done();
45
+ }).catch(function(err) {
46
+ expect(err).toContain("The specified value already exist");
47
+ done();
48
+ });
49
+ });
50
+ });
51
+
52
+ describe(aresCmd + ".push", function() {
53
+ beforeEach(function(done) {
54
+ const shellCmd = common.makeCmd('ares-shell');
55
+ exec(shellCmd + ` -r "rm -rf /tmp/copyFiles"`, function() {
56
+ done();
57
+ });
58
+ });
59
+
60
+ it('Copy directory', function(done) {
61
+ let outputTxt = "";
62
+ push.push(src, '/tmp', pushOptions, function(err, value) {
63
+ expect(value.msg).toContain("Success");
64
+ expect(outputTxt).toContain("/tmp/copyFiles/testFile.txt");
65
+ expect(outputTxt).toContain("/tmp/copyFiles/helloFile.txt");
66
+ expect(outputTxt).toContain("2 file(s) pushed");
67
+ setTimeout(function() {
68
+ done();
69
+ },3000);
70
+ }, function(data) {
71
+ outputTxt += data;
72
+ });
73
+ });
74
+
75
+ it('Copy directory with ignore option', function(done) {
76
+ let outputTxt = "";
77
+ pushOptions.ignore = true;
78
+ push.push(src, '/tmp', pushOptions, function(err, value) {
79
+ expect(value.msg).toContain("Success");
80
+ expect(outputTxt).not.toContain("/tmp/copyFiles/testFile.txt");
81
+ expect(outputTxt).not.toContain("/tmp/copyFiles/helloFile.txt");
82
+ expect(outputTxt).toContain("2 file(s) pushed");
83
+ setTimeout(function() {
84
+ done();
85
+ },3000);
86
+ }, function(data) {
87
+ outputTxt += data;
88
+ });
89
+ });
90
+ });
91
+
92
+ describe(aresCmd + ' negative TC', function() {
93
+ it('Set invaild source path', function(done) {
94
+ push.push(["invalidDir"], '/tmp', pushOptions, function(err) {
95
+ expect(err.toString()).toContain("ENOENT: no such file or directory, lstat");
96
+ expect(err.toString()).toContain("Please check if the path is valid");
97
+ setTimeout(function() {
98
+ done();
99
+ },3000);
100
+ }, function() {
101
+ });
102
+ });
103
+ });
@@ -0,0 +1,115 @@
1
+ /*
2
+ * Copyright (c) 2023-2024 LG Electronics Inc.
3
+ *
4
+ * SPDX-License-Identifier: Apache-2.0
5
+ */
6
+
7
+ const path = require('path'),
8
+ fs = require('fs'),
9
+ exec = require('child_process').exec,
10
+ common = require('../common-spec'),
11
+ server = require('../../../lib/base/server'),
12
+ async = require('async');
13
+
14
+ const aresCmd = 'Server',
15
+ sampleAppPath = path.join(__dirname, "../..", "tempFiles/sampleApp"),
16
+ serverOption = {
17
+ path: undefined
18
+ };
19
+
20
+ let expectedTemplate,
21
+ killTimer,
22
+ serverUrl;
23
+
24
+ function _reqHandler(code, res) {
25
+ if (code === "@@ARES_CLOSE@@") {
26
+ res.status(200).send();
27
+ killTimer = setTimeout(function() {
28
+ }, 2 * 1000);
29
+ } else if (code === "@@GET_URL@@") {
30
+ clearTimeout(killTimer);
31
+ res.status(200).send(serverUrl);
32
+ }
33
+ }
34
+
35
+ beforeAll(function(done) {
36
+ common.getExpectedResult("ares-generate")
37
+ .then(function(result) {
38
+ expectedTemplate = result.template;
39
+ done();
40
+ });
41
+ });
42
+
43
+ afterAll(function(done) {
44
+ common.removeOutDir(sampleAppPath);
45
+ done();
46
+ });
47
+
48
+ describe("Test setting", function() {
49
+ beforeEach(function(done) {
50
+ common.removeOutDir(sampleAppPath);
51
+ done();
52
+ });
53
+
54
+ it('Generate sample app', function(done) {
55
+ const generateCmd = common.makeCmd('ares-generate');
56
+ exec(generateCmd + ` -t ${expectedTemplate.webapp} -p "id=com.domain.app" ${sampleAppPath}`, function(error, stdout, stderr) {
57
+ if (stderr && stderr.length > 0) {
58
+ common.detectNodeMessage(stderr);
59
+ }
60
+
61
+ let outputObj;
62
+ try {
63
+ const text = fs.readFileSync(path.join(sampleAppPath, "appinfo.json"));
64
+ outputObj = JSON.parse(text);
65
+ } catch (err) {
66
+ console.error(err);
67
+ }
68
+ expect(outputObj.id).toBe("com.domain.app");
69
+ expect(error).toBeNull();
70
+ done();
71
+ });
72
+ });
73
+ });
74
+
75
+ describe(aresCmd + ".runServer() and " + aresCmd + ".stop()", function() {
76
+ it('Run a local web server', function(done) {
77
+ async.waterfall([
78
+ server.runServer.bind(server, `${sampleAppPath}`, 0, _reqHandler),
79
+ function(serverInfo, next) {
80
+ expect(serverInfo.msg).toContain('Local server running on http://localhost:');
81
+ serverUrl = serverInfo.url;
82
+ server.openBrowser(serverInfo.openBrowserUrl, serverOption.path, next);
83
+ },
84
+ function(returnObj, next) {
85
+ expect(returnObj.msg).toContain('Browser opened');
86
+ setTimeout(() => {
87
+ server.stop(next);
88
+ }, 3000);
89
+ }
90
+ ], function(err, results) {
91
+ expect(results.msg).toContain('Local server is stopped');
92
+ done();
93
+ });
94
+ });
95
+
96
+ it('Run a local web server with port option', function(done) {
97
+ async.waterfall([
98
+ server.runServer.bind(server, `${sampleAppPath}`, 1234, _reqHandler),
99
+ function(serverInfo, next) {
100
+ expect(serverInfo.msg).toContain('Local server running on http://localhost:');
101
+ serverUrl = serverInfo.url;
102
+ server.openBrowser(serverInfo.openBrowserUrl, serverOption.path, next);
103
+ },
104
+ function(returnObj, next) {
105
+ expect(returnObj.msg).toContain('Browser opened');
106
+ setTimeout(() => {
107
+ server.stop(next);
108
+ }, 3000);
109
+ }
110
+ ], function(err, results) {
111
+ expect(results.msg).toContain('Local server is stopped');
112
+ done();
113
+ });
114
+ });
115
+ });