From 4be2e85013a11fa27216df9f83e74dea9301df67 Mon Sep 17 00:00:00 2001 From: David Woodruff Date: Wed, 10 Dec 2025 10:30:49 -0700 Subject: [PATCH 1/3] fix ec2 alks server --- dist/src/lib/handlers/alks-server-start.js | 6 +++--- dist/src/lib/handlers/alks-server-start.js.map | 2 +- dist/src/lib/program.js | 2 +- dist/src/lib/program.js.map | 2 +- src/lib/handlers/alks-server-start.ts | 6 +++--- src/lib/program.ts | 2 +- 6 files changed, 10 insertions(+), 10 deletions(-) diff --git a/dist/src/lib/handlers/alks-server-start.js b/dist/src/lib/handlers/alks-server-start.js index 2bfd395d..8fe56f71 100644 --- a/dist/src/lib/handlers/alks-server-start.js +++ b/dist/src/lib/handlers/alks-server-start.js @@ -13,9 +13,9 @@ function runServerDaemon() { return tslib_1.__awaiter(this, void 0, void 0, function* () { console.error(cli_color_1.default.white('Starting metadata server..')); // Dynamically import forever since it is an optional dependency - (yield Promise.resolve().then(() => tslib_1.__importStar(require('forever')))).startDaemon(path_1.default.join(__dirname, '../lib') + '/metadata-server.js', { + (yield Promise.resolve().then(() => tslib_1.__importStar(require('forever')))).startDaemon(path_1.default.join(__dirname, '../metadata-server.js'), { uid: 'alks-metadata', - root: path_1.default.join(__dirname, '../'), + root: path_1.default.join(__dirname, '../../../../'), }); console.error(cli_color_1.default.white('Metadata server now listening on: 169.254.169.254')); }); @@ -29,7 +29,7 @@ function handleAlksServerStart(_options) { (0, log_1.log)('Checking if forwarding daemon is already installed..'); if (!fs_1.default.existsSync('/etc/pf.anchors/com.coxautodev.alks')) { console.error(cli_color_1.default.white('Installing metadata daemon rules. You may be prompted for your system password since this requires escalated privileges.')); - const servicePath = path_1.default.join(__dirname, '../service'); + const servicePath = path_1.default.join(__dirname, '../../../../service'); try { (0, log_1.log)('Adding pf.anchor'); (0, child_process_1.execSync)('sudo cp ' + servicePath + '/com.coxautodev.alks /etc/pf.anchors/'); diff --git a/dist/src/lib/handlers/alks-server-start.js.map b/dist/src/lib/handlers/alks-server-start.js.map index 328bcf23..fcd0c25a 100644 --- a/dist/src/lib/handlers/alks-server-start.js.map +++ b/dist/src/lib/handlers/alks-server-start.js.map @@ -1 +1 @@ -{"version":3,"file":"alks-server-start.js","sourceRoot":"","sources":["../../../../src/lib/handlers/alks-server-start.ts"],"names":[],"mappings":";;;;AAAA,kEAA4B;AAE5B,iDAAyC;AACzC,wDAAwB;AACxB,kDAA+C;AAC/C,oCAAiC;AACjC,gCAA6B;AAC7B,oDAAoB;AAEpB,SAAe,eAAe;;QAC5B,OAAO,CAAC,KAAK,CAAC,mBAAG,CAAC,KAAK,CAAC,4BAA4B,CAAC,CAAC,CAAC;QAEvD,gEAAgE;QAChE,CAAC,gEAAa,SAAS,GAAC,CAAC,CAAC,WAAW,CACnC,cAAI,CAAC,IAAI,CAAC,SAAS,EAAE,QAAQ,CAAC,GAAG,qBAAqB,EACtD;YACE,GAAG,EAAE,eAAe;YACpB,IAAI,EAAE,cAAI,CAAC,IAAI,CAAC,SAAS,EAAE,KAAK,CAAC;SAClC,CACF,CAAC;QAEF,OAAO,CAAC,KAAK,CAAC,mBAAG,CAAC,KAAK,CAAC,mDAAmD,CAAC,CAAC,CAAC;IAChF,CAAC;CAAA;AAED,SAAsB,qBAAqB,CAAC,QAAgC;;QAC1E,IAAI;YACF,IAAI,CAAC,IAAA,aAAK,GAAE,EAAE;gBACZ,IAAA,2BAAY,EAAC,+CAA+C,CAAC,CAAC;aAC/D;YAED,IAAA,SAAG,EAAC,sDAAsD,CAAC,CAAC;YAE5D,IAAI,CAAC,YAAE,CAAC,UAAU,CAAC,qCAAqC,CAAC,EAAE;gBACzD,OAAO,CAAC,KAAK,CACX,mBAAG,CAAC,KAAK,CACP,0HAA0H,CAC3H,CACF,CAAC;gBACF,MAAM,WAAW,GAAG,cAAI,CAAC,IAAI,CAAC,SAAS,EAAE,YAAY,CAAC,CAAC;gBAEvD,IAAI;oBACF,IAAA,SAAG,EAAC,kBAAkB,CAAC,CAAC;oBACxB,IAAA,wBAAQ,EACN,UAAU,GAAG,WAAW,GAAG,uCAAuC,CACnE,CAAC;oBAEF,IAAA,SAAG,EAAC,sBAAsB,CAAC,CAAC;oBAC5B,IAAA,wBAAQ,EACN,UAAU;wBACR,WAAW;wBACX,wEAAwE,CAC3E,CAAC;oBAEF,IAAA,SAAG,EAAC,uBAAuB,CAAC,CAAC;oBAC7B,IAAA,wBAAQ,EACN,6FAA6F,CAC9F,CAAC;iBACH;gBAAC,OAAO,GAAG,EAAE;oBACZ,OAAO,CAAC,GAAG,CAAC,mBAAG,CAAC,GAAG,CAAC,mCAAmC,CAAC,EAAE,GAAG,CAAC,CAAC;iBAChE;gBACD,OAAO,CAAC,GAAG,CAAC,mBAAG,CAAC,KAAK,CAAC,yCAAyC,CAAC,CAAC,CAAC;gBAClE,MAAM,eAAe,EAAE,CAAC;aACzB;iBAAM;gBACL,IAAA,SAAG,EAAC,+BAA+B,CAAC,CAAC;gBACrC,MAAM,eAAe,EAAE,CAAC;aACzB;SACF;QAAC,OAAO,EAAE,EAAE;YACX,MAAM,CAAC,GAAG,EAAW,CAAC;YACtB,IAAA,2BAAY,EAAC,CAAC,CAAC,OAAO,EAAE,CAAC,CAAC,CAAC;SAC5B;IACH,CAAC;CAAA;AA9CD,sDA8CC"} \ No newline at end of file +{"version":3,"file":"alks-server-start.js","sourceRoot":"","sources":["../../../../src/lib/handlers/alks-server-start.ts"],"names":[],"mappings":";;;;AAAA,kEAA4B;AAE5B,iDAAyC;AACzC,wDAAwB;AACxB,kDAA+C;AAC/C,oCAAiC;AACjC,gCAA6B;AAC7B,oDAAoB;AAEpB,SAAe,eAAe;;QAC5B,OAAO,CAAC,KAAK,CAAC,mBAAG,CAAC,KAAK,CAAC,4BAA4B,CAAC,CAAC,CAAC;QAEvD,gEAAgE;QAChE,CAAC,gEAAa,SAAS,GAAC,CAAC,CAAC,WAAW,CACnC,cAAI,CAAC,IAAI,CAAC,SAAS,EAAE,uBAAuB,CAAC,EAC7C;YACE,GAAG,EAAE,eAAe;YACpB,IAAI,EAAE,cAAI,CAAC,IAAI,CAAC,SAAS,EAAE,cAAc,CAAC;SAC3C,CACF,CAAC;QAEF,OAAO,CAAC,KAAK,CAAC,mBAAG,CAAC,KAAK,CAAC,mDAAmD,CAAC,CAAC,CAAC;IAChF,CAAC;CAAA;AAED,SAAsB,qBAAqB,CAAC,QAAgC;;QAC1E,IAAI;YACF,IAAI,CAAC,IAAA,aAAK,GAAE,EAAE;gBACZ,IAAA,2BAAY,EAAC,+CAA+C,CAAC,CAAC;aAC/D;YAED,IAAA,SAAG,EAAC,sDAAsD,CAAC,CAAC;YAE5D,IAAI,CAAC,YAAE,CAAC,UAAU,CAAC,qCAAqC,CAAC,EAAE;gBACzD,OAAO,CAAC,KAAK,CACX,mBAAG,CAAC,KAAK,CACP,0HAA0H,CAC3H,CACF,CAAC;gBACF,MAAM,WAAW,GAAG,cAAI,CAAC,IAAI,CAAC,SAAS,EAAE,qBAAqB,CAAC,CAAC;gBAEhE,IAAI;oBACF,IAAA,SAAG,EAAC,kBAAkB,CAAC,CAAC;oBACxB,IAAA,wBAAQ,EACN,UAAU,GAAG,WAAW,GAAG,uCAAuC,CACnE,CAAC;oBAEF,IAAA,SAAG,EAAC,sBAAsB,CAAC,CAAC;oBAC5B,IAAA,wBAAQ,EACN,UAAU;wBACR,WAAW;wBACX,wEAAwE,CAC3E,CAAC;oBAEF,IAAA,SAAG,EAAC,uBAAuB,CAAC,CAAC;oBAC7B,IAAA,wBAAQ,EACN,6FAA6F,CAC9F,CAAC;iBACH;gBAAC,OAAO,GAAG,EAAE;oBACZ,OAAO,CAAC,GAAG,CAAC,mBAAG,CAAC,GAAG,CAAC,mCAAmC,CAAC,EAAE,GAAG,CAAC,CAAC;iBAChE;gBACD,OAAO,CAAC,GAAG,CAAC,mBAAG,CAAC,KAAK,CAAC,yCAAyC,CAAC,CAAC,CAAC;gBAClE,MAAM,eAAe,EAAE,CAAC;aACzB;iBAAM;gBACL,IAAA,SAAG,EAAC,+BAA+B,CAAC,CAAC;gBACrC,MAAM,eAAe,EAAE,CAAC;aACzB;SACF;QAAC,OAAO,EAAE,EAAE;YACX,MAAM,CAAC,GAAG,EAAW,CAAC;YACtB,IAAA,2BAAY,EAAC,CAAC,CAAC,OAAO,EAAE,CAAC,CAAC,CAAC;SAC5B;IACH,CAAC;CAAA;AA9CD,sDA8CC"} \ No newline at end of file diff --git a/dist/src/lib/program.js b/dist/src/lib/program.js index 0113afd4..723bc52d 100644 --- a/dist/src/lib/program.js +++ b/dist/src/lib/program.js @@ -238,7 +238,7 @@ developer const server = program .command('server') .name('server') - .description('ec23 metadata server'); + .description('ec2 metadata server'); server .command('stop') .description('stops the metadata server') diff --git a/dist/src/lib/program.js.map b/dist/src/lib/program.js.map index a0ab4412..73afc1d6 100644 --- a/dist/src/lib/program.js.map +++ b/dist/src/lib/program.js.map @@ -1 +1 @@ -{"version":3,"file":"program.js","sourceRoot":"","sources":["../../../src/lib/program.ts"],"names":[],"mappings":"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"} \ No newline at end of file +{"version":3,"file":"program.js","sourceRoot":"","sources":["../../../src/lib/program.ts"],"names":[],"mappings":";;AAAA,yCAAoC;AACpC,qDAA6C;AAC7C,4DAIgC;AAChC,2EAA4E;AAC5E,uFAAwF;AACxF,2EAA4E;AAC5E,iFAAkF;AAClF,uEAAwE;AACxE,yEAA0E;AAC1E,iFAAkF;AAClF,2EAA4E;AAC5E,6EAA8E;AAC9E,2EAA4E;AAC5E,uFAAwF;AACxF,6EAA8E;AAC9E,2EAA4E;AAC5E,8EAA+E;AAC/E,qFAAsF;AACtF,uFAAwF;AACxF,6EAA8E;AAC9E,+EAAgF;AAChF,qFAAsF;AACtF,iFAAkF;AAClF,uFAAwF;AACxF,gEAA8D;AAC9D,yCAAgC;AAChC,wEAAyE;AACzE,8EAA+E;AAC/E,sEAAuE;AACvE,0EAA2E;AAC3E,oEAAqE;AAErE,MAAM,YAAY,GAAG,IAAA,iCAAe,GAAE,CAAC;AACvC,MAAM,QAAQ,GAAG,+BAA+B,CAAC;AACjD,MAAM,YAAY,GAAG,6CAA6C,CAAC;AAEnE,MAAM,OAAO,GAAG,IAAI,mBAAO,EAAE,CAAC;AAE9B,OAAO,CAAC,YAAY,EAAE,CAAC;AAEvB,OAAO,CAAC,eAAe,CAAC;IACtB,QAAQ,EAAE,CAAC,GAAG,EAAE,EAAE;QAChB,IAAI,CAAC,GAAG,CAAC,UAAU,CAAC,wBAAwB,CAAC,EAAE;YAC7C,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;SAC3B;IACH,CAAC;CACF,CAAC,CAAC;AAEH,OAAO;KACJ,OAAO,CAAC,sBAAO,EAAE,WAAW,CAAC;KAC7B,MAAM,CAAC,eAAe,EAAE,qCAAqC,CAAC;KAC9D,MAAM,CACL,sBAAsB,EACtB,wEAAwE,CACzE;KACA,IAAI,CAAC,WAAW,EAAE,CAAC,WAAW,EAAE,EAAE;IACjC,IAAI,WAAW,CAAC,IAAI,EAAE,CAAC,aAAa,EAAE;QACpC,OAAO,CAAC,KAAK,CACX,IAAA,eAAG,EACD,iLAAiL,CAClL,CACF,CAAC;KACH;AACH,CAAC,CAAC,CAAC;AAEL,OAAO;KACJ,OAAO,CAAC,YAAY,CAAC;KACrB,WAAW,CAAC,kCAAkC,CAAC;KAC/C,MAAM,CAAC,kCAAgB,CAAC,CAAC;AAE5B,SAAS,uBAAuB,CAAC,OAAgB;IAC/C,OAAO,OAAO;SACX,MAAM,CACL,eAAe,EACf,uEAAuE,CACxE;SACA,MAAM,CACL,wBAAwB,EACxB,wDAAwD,CACzD;SACA,MAAM,CACL,sBAAsB,EACtB,sDAAsD,CACvD;SACA,MAAM,CACL,uBAAuB,EACvB,4EAA4E,CAC7E,CAAC;AACN,CAAC;AAED,MAAM,QAAQ,GAAG,OAAO;KACrB,OAAO,CAAC,UAAU,CAAC;KACnB,KAAK,CAAC,SAAS,CAAC;KAChB,WAAW,CAAC,qBAAqB,CAAC,CAAC;AAEtC,QAAQ,CAAC;AACT,MAAM,mBAAmB,GAAG,QAAQ;KACjC,OAAO,CAAC,MAAM,CAAC;KACf,WAAW,CAAC,8BAA8B,CAAC;KAC3C,MAAM,CACL,kCAAkC,EAClC,6CAA6C,CAC9C;KACA,MAAM,CACL,uBAAuB,EACvB,iDAAiD,CAClD;KACA,MAAM,CACL,WAAW,EACX,iJAAiJ,CAClJ;KACA,MAAM,CACL,eAAe,EACf,2DAA2D,CAC5D;KACA,MAAM,CACL,2BAA2B,EAC3B,4IAA4I,EAC5I,IAAI,CACL;KACA,MAAM,CAAC,kBAAkB,EAAE,sCAAsC,CAAC;KAClE,MAAM,CAAC,2BAA2B,EAAE,aAAa,CAAC;KAClD,MAAM,CACL,uBAAuB,EACvB,iBAAiB,GAAG,YAAY,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,GAAG,CAClD;KACA,MAAM,CACL,8BAA8B,EAC9B,oFAAoF,CACrF;KACA,MAAM,CACL,yBAAyB,EACzB,+DAA+D,CAChE;KACA,MAAM,CACL,aAAa,EACb,iEAAiE,CAClE;KACA,MAAM,CAAC,iBAAiB,EAAE,2BAA2B,CAAC,CAAC;AAC1D,uBAAuB,CAAC,mBAAmB,CAAC,CAAC,MAAM,CAAC,2CAAsB,CAAC,CAAC;AAC5E,QAAQ;KACL,OAAO,CAAC,MAAM,CAAC;KACf,KAAK,CAAC,IAAI,CAAC;KACX,WAAW,CAAC,sBAAsB,CAAC;KACnC,MAAM,CAAC,2BAA2B,EAAE,aAAa,CAAC;KAClD,MAAM,CAAC,2CAAsB,CAAC,CAAC;AAElC,MAAM,sBAAsB,GAAG,QAAQ;KACpC,OAAO,CAAC,SAAS,CAAC;KAClB,WAAW,CAAC,qCAAqC,CAAC;KAClD,MAAM,CACL,kCAAkC,EAClC,6CAA6C,CAC9C;KACA,MAAM,CACL,uBAAuB,EACvB,iDAAiD,CAClD;KACA,MAAM,CAAC,WAAW,EAAE,uBAAuB,CAAC;KAC5C,MAAM,CACL,eAAe,EACf,2DAA2D,CAC5D;KACA,MAAM,CAAC,kBAAkB,EAAE,sCAAsC,CAAC;KAClE,MAAM,CAAC,WAAW,EAAE,oBAAoB,CAAC;KACzC,MAAM,CAAC,2BAA2B,EAAE,oCAAoC,CAAC;KACzE,MAAM,CAAC,iBAAiB,EAAE,2BAA2B,CAAC;KACtD,MAAM,CAAC,2BAA2B,EAAE,aAAa,CAAC,CAAC;AACtD,uBAAuB,CAAC,sBAAsB,CAAC,CAAC,MAAM,CACpD,iDAAyB,CAC1B,CAAC;AAEF,MAAM,GAAG,GAAG,OAAO,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,WAAW,CAAC,sBAAsB,CAAC,CAAC;AAEvE,GAAG;KACA,OAAO,CAAC,WAAW,CAAC;KACpB,KAAK,CAAC,YAAY,CAAC;KACnB,KAAK,CAAC,iBAAiB,CAAC;KACxB,WAAW,CACV,4MAA4M,CAC7M;KACA,MAAM,CACL,uBAAuB,EACvB,iBAAiB,GAAG,IAAA,0CAAwB,GAAE,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,GAAG,EAC/D,IAAA,0CAAwB,GAAE,CAAC,CAAC,CAAC,CAC9B;KACA,MAAM,CAAC,2CAAsB,CAAC,CAAC;AAElC,GAAG;KACA,OAAO,CAAC,YAAY,CAAC;KACrB,KAAK,CAAC,aAAa,CAAC;KACpB,WAAW,CAAC,oBAAoB,CAAC;KACjC,MAAM,CAAC,2BAA2B,EAAE,gCAAgC,CAAC;KACrE,MAAM,CACL,kCAAkC,EAClC,6CAA6C,CAC9C;KACA,MAAM,CACL,uBAAuB,EACvB,iDAAiD,CAClD;KACA,MAAM,CAAC,iBAAiB,EAAE,2BAA2B,CAAC;KACtD,MAAM,CAAC,6CAAuB,CAAC,CAAC;AAEnC,GAAG;KACA,OAAO,CAAC,WAAW,CAAC;KACpB,KAAK,CAAC,YAAY,CAAC;KACnB,WAAW,CAAC,uCAAuC,CAAC;KACpD,MAAM,CACL,iCAAiC,EACjC,kDAAkD,CACnD;KACA,MAAM,CACL,kCAAkC,EAClC,6CAA6C,CAC9C;KACA,MAAM,CACL,uBAAuB,EACvB,iDAAiD,CAClD;KACA,MAAM,CAAC,iBAAiB,EAAE,2BAA2B,CAAC;KACtD,MAAM,CAAC,2CAAsB,CAAC,CAAC;AAElC,GAAG;KACA,OAAO,CAAC,iBAAiB,CAAC;KAC1B,KAAK,CAAC,mBAAmB,CAAC;KAC1B,WAAW,CACV,gFAAgF,CACjF;KACA,MAAM,CAAC,2BAA2B,EAAE,wBAAwB,GAAG,QAAQ,CAAC;KACxE,MAAM,CACL,2BAA2B,EAC3B,+CAA+C,CAChD;KACA,MAAM,CAAC,2BAA2B,EAAE,aAAa,GAAG,YAAY,CAAC;KACjE,MAAM,CACL,wBAAwB,EACxB,yCAAyC,EACzC,KAAK,CACN;KACA,MAAM,CACL,kCAAkC,EAClC,6CAA6C,CAC9C;KACA,MAAM,CACL,uBAAuB,EACvB,iDAAiD,CAClD;KACA,MAAM,CAAC,iBAAiB,EAAE,2BAA2B,CAAC;KACtD,MAAM,CACL,sBAAsB,EACtB,mMAAmM,CACpM;KACA,MAAM,CAAC,uDAA4B,CAAC,CAAC;AAExC,GAAG;KACA,OAAO,CAAC,YAAY,CAAC;KACrB,KAAK,CAAC,aAAa,CAAC;KACpB,WAAW,CAAC,wBAAwB,CAAC;KACrC,MAAM,CAAC,2BAA2B,EAAE,wBAAwB,GAAG,QAAQ,CAAC;KACxE,MAAM,CACL,2BAA2B,EAC3B,wPAAwP,CACzP;KACA,MAAM,CACL,kCAAkC,EAClC,yEAAyE,CAC1E;KACA,MAAM,CACL,uBAAuB,EACvB,0CAA0C,EAC1C,KAAK,CACN;KACA,MAAM,CACL,wBAAwB,EACxB,yCAAyC,EACzC,KAAK,CACN;KACA,MAAM,CACL,kCAAkC,EAClC,6CAA6C,CAC9C;KACA,MAAM,CACL,uBAAuB,EACvB,iDAAiD,CAClD;KACA,MAAM,CAAC,iBAAiB,EAAE,2BAA2B,CAAC;KACtD,MAAM,CACL,sBAAsB,EACtB,mMAAmM,CACpM;KACA,MAAM,CACL,2CAA2C,EAC3C,iNAAiN,CAClN;KACA,MAAM,CAAC,6CAAuB,CAAC,CAAC;AAEnC,GAAG;KACA,OAAO,CAAC,WAAW,CAAC;KACpB,KAAK,CAAC,YAAY,CAAC;KACnB,WAAW,CAAC,0CAA0C,CAAC;KACvD,MAAM,CACL,iCAAiC,EACjC,oDAAoD,GAAG,QAAQ,CAChE;KACA,MAAM,CACL,kCAAkC,EAClC,6CAA6C,CAC9C;KACA,MAAM,CACL,uBAAuB,EACvB,iDAAiD,CAClD;KACA,MAAM,CAAC,iBAAiB,EAAE,2BAA2B,CAAC;KACtD,MAAM,CAAC,uBAAuB,EAAE,4BAA4B,EAAE,MAAM,CAAC;KACrE,MAAM,CACL,sBAAsB,EACtB,gMAAgM,CACjM;KACA,MAAM,CAAC,2CAAsB,CAAC,CAAC;AAElC,GAAG;KACA,OAAO,CAAC,YAAY,CAAC;KACrB,KAAK,CAAC,aAAa,CAAC;KACpB,WAAW,CAAC,8BAA8B,CAAC;KAC3C,MAAM,CAAC,2BAA2B,EAAE,wBAAwB,GAAG,QAAQ,CAAC;KACxE,MAAM,CAAC,kCAAkC,EAAE,iCAAiC,CAAC;KAC7E,MAAM,CACL,kCAAkC,EAClC,6CAA6C,CAC9C;KACA,MAAM,CACL,uBAAuB,EACvB,iDAAiD,CAClD;KACA,MAAM,CAAC,iBAAiB,EAAE,2BAA2B,CAAC;KACtD,MAAM,CACL,sBAAsB,EACtB,mMAAmM,CACpM;KACA,MAAM,CAAC,6CAAuB,CAAC,CAAC;AAEnC,GAAG;KACA,OAAO,CAAC,eAAe,CAAC;KACxB,KAAK,CAAC,WAAW,CAAC;KAClB,KAAK,CAAC,YAAY,CAAC;KACnB,WAAW,CAAC,mDAAmD,CAAC;KAChE,MAAM,CACL,iCAAiC,EACjC,sCAAsC,GAAG,QAAQ,CAClD;KACA,MAAM,CACL,kCAAkC,EAClC,6CAA6C,CAC9C;KACA,MAAM,CAAC,uBAAuB,EAAE,4BAA4B,EAAE,MAAM,CAAC;KACrE,MAAM,CACL,sBAAsB,EACtB,gMAAgM,CACjM;KACA,MAAM,CAAC,mDAA0B,CAAC,CAAC;AAEtC,MAAM,SAAS,GAAG,OAAO;KACtB,OAAO,CAAC,WAAW,CAAC;KACpB,WAAW,CAAC,8BAA8B,CAAC,CAAC;AAE/C,SAAS;KACN,OAAO,CAAC,WAAW,CAAC;KACpB,WAAW,CAAC,sBAAsB,CAAC;KACnC,MAAM,CACL,kCAAkC,EAClC,yEAAyE,CAC1E;KACA,MAAM,CACL,uBAAuB,EACvB,wEAAwE,CACzE;KACA,MAAM,CAAC,uBAAuB,EAAE,eAAe,CAAC;KAChD,MAAM,CACL,2BAA2B,EAC3B,4DAA4D,CAC7D;KACA,MAAM,CAAC,uBAAuB,EAAE,aAAa,CAAC;KAC9C,MAAM,CACL,4BAA4B,EAC5B,8CAA8C,CAC/C;KACA,MAAM,CACL,mCAAmC,EACnC,oGAAoG,CACrG;KACA,MAAM,CACL,mBAAmB,EACnB,iHAAiH,CAClH;KACA,MAAM,CAAC,uDAA4B,CAAC,CAAC;AAExC,SAAS;KACN,OAAO,CAAC,UAAU,CAAC;KACnB,WAAW,CAAC,uCAAuC,CAAC;KACpD,MAAM,CAAC,cAAc,EAAE,0CAA0C,CAAC;KAClE,MAAM,CACL,uBAAuB,EACvB,iBAAiB,GAAG,IAAA,yCAAuB,GAAE,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,GAAG,EAC9D,IAAA,yCAAuB,GAAE,CAAC,CAAC,CAAC,CAC7B;KACA,MAAM,CAAC,qDAA2B,CAAC,CAAC;AAEvC,SAAS;KACN,OAAO,CAAC,WAAW,CAAC;KACpB,WAAW,CAAC,wCAAwC,CAAC;KACrD,MAAM,CAAC,uDAA4B,CAAC,CAAC;AAExC,SAAS;KACN,OAAO,CAAC,MAAM,CAAC;KACf,WAAW,CAAC,uCAAuC,CAAC;KACpD,MAAM,CAAC,6CAAuB,CAAC,CAAC;AAEnC,SAAS;KACN,OAAO,CAAC,OAAO,CAAC;KAChB,WAAW,CAAC,iBAAiB,CAAC;KAC9B,MAAM,CAAC,2BAA2B,EAAE,eAAe,CAAC;KACpD,MAAM,CAAC,+CAAwB,CAAC,CAAC;AAEpC,SAAS;KACN,OAAO,CAAC,UAAU,CAAC;KACnB,WAAW,CAAC,gCAAgC,CAAC;KAC7C,MAAM,CAAC,qDAA2B,CAAC,CAAC;AAEvC,SAAS;KACN,OAAO,CAAC,QAAQ,CAAC;KACjB,WAAW,CAAC,kBAAkB,CAAC;KAC/B,MAAM,CAAC,iDAAyB,CAAC,CAAC;AAErC,SAAS;KACN,OAAO,CAAC,WAAW,CAAC;KACpB,WAAW,CAAC,4BAA4B,CAAC;KACzC,MAAM,CAAC,uDAA4B,CAAC,CAAC;AAExC,MAAM,MAAM,GAAG,OAAO;KACnB,OAAO,CAAC,QAAQ,CAAC;KACjB,IAAI,CAAC,QAAQ,CAAC;KACd,WAAW,CAAC,qBAAqB,CAAC,CAAC;AAEtC,MAAM;KACH,OAAO,CAAC,MAAM,CAAC;KACf,WAAW,CAAC,2BAA2B,CAAC;KACxC,MAAM,CAAC,uCAAoB,CAAC,CAAC;AAEhC,MAAM;KACH,OAAO,CAAC,OAAO,CAAC;KAChB,WAAW,CAAC,4BAA4B,CAAC;KACzC,MAAM,CAAC,yCAAqB,CAAC,CAAC;AAEjC,MAAM;KACH,OAAO,CAAC,WAAW,CAAC;KACpB,MAAM,CACL,kCAAkC,EAClC,6CAA6C,CAC9C;KACA,MAAM,CACL,uBAAuB,EACvB,iDAAiD,CAClD;KACA,MAAM,CAAC,WAAW,EAAE,uBAAuB,CAAC;KAC5C,MAAM,CAAC,2BAA2B,EAAE,aAAa,CAAC;KAClD,MAAM,CAAC,iBAAiB,EAAE,2BAA2B,CAAC;KACtD,MAAM,CAAC,iDAAyB,CAAC,CAAC;AAErC,MAAM,QAAQ,GAAG,OAAO;KACrB,OAAO,CAAC,UAAU,CAAC;KACnB,KAAK,CAAC,SAAS,CAAC;KAChB,IAAI,CAAC,UAAU,CAAC;KAChB,WAAW,CAAC,qBAAqB,CAAC,CAAC;AAEtC,QAAQ;KACL,OAAO,CAAC,UAAU,CAAC;KACnB,KAAK,CAAC,KAAK,CAAC;KACZ,KAAK,CAAC,QAAQ,CAAC;KACf,WAAW,CAAC,uBAAuB,CAAC;KACpC,MAAM,CACL,WAAW,EACX,kEAAkE,CACnE;KACA,MAAM,CACL,kCAAkC,EAClC,oEAAoE,CACrE;KACA,MAAM,CAAC,uBAAuB,EAAE,0CAA0C,CAAC;KAC3E,MAAM,CACL,8BAA8B,EAC9B,kHAAkH,CACnH;KACA,MAAM,CACL,yBAAyB,EACzB,6FAA6F,CAC9F;KACA,MAAM,CACL,aAAa,EACb,iEAAiE,CAClE;KACA,MAAM,CAAC,mDAA0B,CAAC,CAAC;AAEtC,QAAQ;KACL,OAAO,CAAC,MAAM,CAAC;KACf,KAAK,CAAC,IAAI,CAAC;KACX,WAAW,CAAC,mBAAmB,CAAC;KAChC,MAAM,CACL,WAAW,EACX,uDAAuD,EACvD,KAAK,CACN;KACA,MAAM,CAAC,uBAAuB,EAAE,4BAA4B,EAAE,MAAM,CAAC;KACrE,MAAM,CACL,6BAA6B,EAC7B,iFAAiF,EACjF,KAAK,CACN;KACA,MAAM,CAAC,2CAAsB,CAAC,CAAC;AAElC,QAAQ;KACL,OAAO,CAAC,QAAQ,CAAC;KACjB,KAAK,CAAC,IAAI,CAAC;KACX,KAAK,CAAC,QAAQ,CAAC;KACf,WAAW,CAAC,qBAAqB,CAAC;KAClC,MAAM,CACL,WAAW,EACX,yFAAyF,CAC1F;KACA,MAAM,CACL,8BAA8B,EAC9B,kHAAkH,CACnH;KACA,MAAM,CACL,yBAAyB,EACzB,6FAA6F,CAC9F;KACA,MAAM,CACL,aAAa,EACb,wDAAwD,CACzD;KACA,MAAM,CAAC,+CAAwB,CAAC,CAAC;AAEpC,QAAQ;KACL,OAAO,CAAC,KAAK,CAAC;KACd,WAAW,CAAC,iBAAiB,CAAC;KAC9B,MAAM,CACL,8BAA8B,EAC9B,kHAAkH,CACnH;KACA,MAAM,CACL,yBAAyB,EACzB,6FAA6F,CAC9F;KACA,MAAM,CAAC,uBAAuB,EAAE,4BAA4B,EAAE,MAAM,CAAC;KACrE,MAAM,CACL,6BAA6B,EAC7B,iFAAiF,EACjF,KAAK,CACN;KACA,MAAM,CAAC,yCAAqB,CAAC,CAAC;AAEjC,kBAAe,OAAO,CAAC"} \ No newline at end of file diff --git a/src/lib/handlers/alks-server-start.ts b/src/lib/handlers/alks-server-start.ts index 5e1a365e..48c0d78e 100644 --- a/src/lib/handlers/alks-server-start.ts +++ b/src/lib/handlers/alks-server-start.ts @@ -12,10 +12,10 @@ async function runServerDaemon() { // Dynamically import forever since it is an optional dependency (await import('forever')).startDaemon( - path.join(__dirname, '../lib') + '/metadata-server.js', + path.join(__dirname, '../metadata-server.js'), { uid: 'alks-metadata', - root: path.join(__dirname, '../'), + root: path.join(__dirname, '../../../../'), } ); @@ -36,7 +36,7 @@ export async function handleAlksServerStart(_options: commander.OptionValues) { 'Installing metadata daemon rules. You may be prompted for your system password since this requires escalated privileges.' ) ); - const servicePath = path.join(__dirname, '../service'); + const servicePath = path.join(__dirname, '../../../../service'); try { log('Adding pf.anchor'); diff --git a/src/lib/program.ts b/src/lib/program.ts index 3eab3ce7..d511c606 100644 --- a/src/lib/program.ts +++ b/src/lib/program.ts @@ -444,7 +444,7 @@ developer const server = program .command('server') .name('server') - .description('ec23 metadata server'); + .description('ec2 metadata server'); server .command('stop') From f14a9311fa57cbb616dd213c900b6de668332925 Mon Sep 17 00:00:00 2001 From: David Woodruff Date: Wed, 10 Dec 2025 13:16:08 -0700 Subject: [PATCH 2/3] tests --- .../handlers/alks-server-configure.test.js | 135 ++++++++++++ .../alks-server-configure.test.js.map | 1 + .../lib/handlers/alks-server-start.test.js | 90 ++++++++ .../handlers/alks-server-start.test.js.map | 1 + .../src/lib/handlers/alks-server-stop.test.js | 74 +++++++ .../lib/handlers/alks-server-stop.test.js.map | 1 + .../handlers/alks-server-configure.test.ts | 197 ++++++++++++++++++ src/lib/handlers/alks-server-start.test.ts | 129 ++++++++++++ src/lib/handlers/alks-server-stop.test.ts | 101 +++++++++ 9 files changed, 729 insertions(+) create mode 100644 dist/src/lib/handlers/alks-server-configure.test.js create mode 100644 dist/src/lib/handlers/alks-server-configure.test.js.map create mode 100644 dist/src/lib/handlers/alks-server-start.test.js create mode 100644 dist/src/lib/handlers/alks-server-start.test.js.map create mode 100644 dist/src/lib/handlers/alks-server-stop.test.js create mode 100644 dist/src/lib/handlers/alks-server-stop.test.js.map create mode 100644 src/lib/handlers/alks-server-configure.test.ts create mode 100644 src/lib/handlers/alks-server-start.test.ts create mode 100644 src/lib/handlers/alks-server-stop.test.ts diff --git a/dist/src/lib/handlers/alks-server-configure.test.js b/dist/src/lib/handlers/alks-server-configure.test.js new file mode 100644 index 00000000..523a59b0 --- /dev/null +++ b/dist/src/lib/handlers/alks-server-configure.test.js @@ -0,0 +1,135 @@ +"use strict"; +Object.defineProperty(exports, "__esModule", { value: true }); +const tslib_1 = require("tslib"); +const alks_server_configure_1 = require("./alks-server-configure"); +const errorAndExit_1 = require("../errorAndExit"); +const getIamKey_1 = require("../getIamKey"); +const saveMetadata_1 = require("../saveMetadata"); +const checkForUpdate_1 = require("../checkForUpdate"); +const tryToExtractRole_1 = require("../tryToExtractRole"); +jest.mock('../errorAndExit'); +jest.mock('../getIamKey'); +jest.mock('../saveMetadata'); +jest.mock('../checkForUpdate'); +jest.mock('../tryToExtractRole'); +jest.mock('../log'); +// Silence console.error +jest.spyOn(global.console, 'error').mockImplementation(() => { }); +// Silence console.log +jest.spyOn(global.console, 'log').mockImplementation(() => { }); +describe('handleAlksServerConfigure', () => { + const defaultKey = { + alksAccount: '012345678910/ALKSAdmin - awstest', + alksRole: 'Admin', + isIAM: true, + expires: new Date(), + accessKey: 'AKIAIOSFODNN7EXAMPLE', + secretKey: 'wJalrXUtnFEMI/K7MDENG/bPxRfiCYEXAMPLEKEY', + sessionToken: 'token123', + }; + beforeEach(() => { + jest.clearAllMocks(); + getIamKey_1.getIamKey.mockResolvedValue(defaultKey); + saveMetadata_1.saveMetadata.mockResolvedValue(undefined); + checkForUpdate_1.checkForUpdate.mockResolvedValue(undefined); + tryToExtractRole_1.tryToExtractRole.mockReturnValue(undefined); + }); + describe('when account and role are provided', () => { + it('should get IAM key with provided account and role', () => tslib_1.__awaiter(void 0, void 0, void 0, function* () { + const options = { + account: '012345678910/ALKSAdmin - awstest', + role: 'Admin', + }; + yield (0, alks_server_configure_1.handleAlksServerConfigure)(options); + expect(getIamKey_1.getIamKey).toHaveBeenCalledWith('012345678910/ALKSAdmin - awstest', 'Admin', undefined, false, false); + })); + }); + describe('when only account is provided', () => { + it('should try to extract role from account string', () => tslib_1.__awaiter(void 0, void 0, void 0, function* () { + const options = { + account: '012345678910/ALKSAdmin - awstest', + }; + tryToExtractRole_1.tryToExtractRole.mockReturnValue('Admin'); + yield (0, alks_server_configure_1.handleAlksServerConfigure)(options); + expect(tryToExtractRole_1.tryToExtractRole).toHaveBeenCalledWith('012345678910/ALKSAdmin - awstest'); + expect(getIamKey_1.getIamKey).toHaveBeenCalledWith('012345678910/ALKSAdmin - awstest', 'Admin', undefined, false, false); + })); + }); + describe('when iam flag is set', () => { + it('should pass true for iamOnly parameter', () => tslib_1.__awaiter(void 0, void 0, void 0, function* () { + const options = { + account: '012345678910/ALKSAdmin - awstest', + role: 'Admin', + iam: true, + }; + yield (0, alks_server_configure_1.handleAlksServerConfigure)(options); + expect(getIamKey_1.getIamKey).toHaveBeenCalledWith('012345678910/ALKSAdmin - awstest', 'Admin', undefined, false, true); + })); + }); + describe('when favorites flag is set', () => { + it('should pass true for filterFavorites parameter', () => tslib_1.__awaiter(void 0, void 0, void 0, function* () { + const options = { + account: '012345678910/ALKSAdmin - awstest', + role: 'Admin', + favorites: true, + }; + yield (0, alks_server_configure_1.handleAlksServerConfigure)(options); + expect(getIamKey_1.getIamKey).toHaveBeenCalledWith('012345678910/ALKSAdmin - awstest', 'Admin', undefined, true, false); + })); + }); + describe('when getIamKey succeeds', () => { + it('should save metadata with correct values', () => tslib_1.__awaiter(void 0, void 0, void 0, function* () { + const options = { + account: '012345678910/ALKSAdmin - awstest', + role: 'Admin', + }; + yield (0, alks_server_configure_1.handleAlksServerConfigure)(options); + expect(saveMetadata_1.saveMetadata).toHaveBeenCalledWith({ + alksAccount: defaultKey.alksAccount, + alksRole: defaultKey.alksRole, + isIam: defaultKey.isIAM, + }); + })); + it('should check for updates', () => tslib_1.__awaiter(void 0, void 0, void 0, function* () { + const options = { + account: '012345678910/ALKSAdmin - awstest', + role: 'Admin', + }; + yield (0, alks_server_configure_1.handleAlksServerConfigure)(options); + expect(checkForUpdate_1.checkForUpdate).toHaveBeenCalled(); + })); + it('should display success message', () => tslib_1.__awaiter(void 0, void 0, void 0, function* () { + const options = { + account: '012345678910/ALKSAdmin - awstest', + role: 'Admin', + }; + yield (0, alks_server_configure_1.handleAlksServerConfigure)(options); + expect(console.error).toHaveBeenCalledWith(expect.stringContaining('Metadata has been saved')); + })); + }); + describe('when getIamKey fails', () => { + it('should call errorAndExit', () => tslib_1.__awaiter(void 0, void 0, void 0, function* () { + const error = new Error('Failed to get IAM key'); + getIamKey_1.getIamKey.mockRejectedValue(error); + const options = { + account: '012345678910/ALKSAdmin - awstest', + role: 'Admin', + }; + yield (0, alks_server_configure_1.handleAlksServerConfigure)(options); + expect(errorAndExit_1.errorAndExit).toHaveBeenCalledWith(error); + })); + }); + describe('when saveMetadata fails', () => { + it('should call errorAndExit with appropriate message', () => tslib_1.__awaiter(void 0, void 0, void 0, function* () { + const error = new Error('Failed to save'); + saveMetadata_1.saveMetadata.mockRejectedValue(error); + const options = { + account: '012345678910/ALKSAdmin - awstest', + role: 'Admin', + }; + yield (0, alks_server_configure_1.handleAlksServerConfigure)(options); + expect(errorAndExit_1.errorAndExit).toHaveBeenCalledWith('Unable to save metadata!', error); + })); + }); +}); +//# sourceMappingURL=alks-server-configure.test.js.map \ No newline at end of file diff --git a/dist/src/lib/handlers/alks-server-configure.test.js.map b/dist/src/lib/handlers/alks-server-configure.test.js.map new file mode 100644 index 00000000..36d7f5ab --- /dev/null +++ b/dist/src/lib/handlers/alks-server-configure.test.js.map @@ -0,0 +1 @@ +{"version":3,"file":"alks-server-configure.test.js","sourceRoot":"","sources":["../../../../src/lib/handlers/alks-server-configure.test.ts"],"names":[],"mappings":";;;AACA,mEAAoE;AACpE,kDAA+C;AAC/C,4CAAyC;AACzC,kDAA+C;AAC/C,sDAAmD;AACnD,0DAAuD;AAGvD,IAAI,CAAC,IAAI,CAAC,iBAAiB,CAAC,CAAC;AAC7B,IAAI,CAAC,IAAI,CAAC,cAAc,CAAC,CAAC;AAC1B,IAAI,CAAC,IAAI,CAAC,iBAAiB,CAAC,CAAC;AAC7B,IAAI,CAAC,IAAI,CAAC,mBAAmB,CAAC,CAAC;AAC/B,IAAI,CAAC,IAAI,CAAC,qBAAqB,CAAC,CAAC;AACjC,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;AAEpB,wBAAwB;AACxB,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC,kBAAkB,CAAC,GAAG,EAAE,GAAE,CAAC,CAAC,CAAC;AACjE,sBAAsB;AACtB,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,OAAO,EAAE,KAAK,CAAC,CAAC,kBAAkB,CAAC,GAAG,EAAE,GAAE,CAAC,CAAC,CAAC;AAE/D,QAAQ,CAAC,2BAA2B,EAAE,GAAG,EAAE;IACzC,MAAM,UAAU,GAAQ;QACtB,WAAW,EAAE,kCAAkC;QAC/C,QAAQ,EAAE,OAAO;QACjB,KAAK,EAAE,IAAI;QACX,OAAO,EAAE,IAAI,IAAI,EAAE;QACnB,SAAS,EAAE,sBAAsB;QACjC,SAAS,EAAE,0CAA0C;QACrD,YAAY,EAAE,UAAU;KACzB,CAAC;IAEF,UAAU,CAAC,GAAG,EAAE;QACd,IAAI,CAAC,aAAa,EAAE,CAAC;QACpB,qBAAuB,CAAC,iBAAiB,CAAC,UAAU,CAAC,CAAC;QACtD,2BAA0B,CAAC,iBAAiB,CAAC,SAAS,CAAC,CAAC;QACxD,+BAA4B,CAAC,iBAAiB,CAAC,SAAS,CAAC,CAAC;QAC1D,mCAA8B,CAAC,eAAe,CAAC,SAAS,CAAC,CAAC;IAC7D,CAAC,CAAC,CAAC;IAEH,QAAQ,CAAC,oCAAoC,EAAE,GAAG,EAAE;QAClD,EAAE,CAAC,mDAAmD,EAAE,GAAS,EAAE;YACjE,MAAM,OAAO,GAA2B;gBACtC,OAAO,EAAE,kCAAkC;gBAC3C,IAAI,EAAE,OAAO;aACd,CAAC;YAEF,MAAM,IAAA,iDAAyB,EAAC,OAAO,CAAC,CAAC;YAEzC,MAAM,CAAC,qBAAS,CAAC,CAAC,oBAAoB,CACpC,kCAAkC,EAClC,OAAO,EACP,SAAS,EACT,KAAK,EACL,KAAK,CACN,CAAC;QACJ,CAAC,CAAA,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;IAEH,QAAQ,CAAC,+BAA+B,EAAE,GAAG,EAAE;QAC7C,EAAE,CAAC,gDAAgD,EAAE,GAAS,EAAE;YAC9D,MAAM,OAAO,GAA2B;gBACtC,OAAO,EAAE,kCAAkC;aAC5C,CAAC;YACD,mCAA8B,CAAC,eAAe,CAAC,OAAO,CAAC,CAAC;YAEzD,MAAM,IAAA,iDAAyB,EAAC,OAAO,CAAC,CAAC;YAEzC,MAAM,CAAC,mCAAgB,CAAC,CAAC,oBAAoB,CAC3C,kCAAkC,CACnC,CAAC;YACF,MAAM,CAAC,qBAAS,CAAC,CAAC,oBAAoB,CACpC,kCAAkC,EAClC,OAAO,EACP,SAAS,EACT,KAAK,EACL,KAAK,CACN,CAAC;QACJ,CAAC,CAAA,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;IAEH,QAAQ,CAAC,sBAAsB,EAAE,GAAG,EAAE;QACpC,EAAE,CAAC,wCAAwC,EAAE,GAAS,EAAE;YACtD,MAAM,OAAO,GAA2B;gBACtC,OAAO,EAAE,kCAAkC;gBAC3C,IAAI,EAAE,OAAO;gBACb,GAAG,EAAE,IAAI;aACV,CAAC;YAEF,MAAM,IAAA,iDAAyB,EAAC,OAAO,CAAC,CAAC;YAEzC,MAAM,CAAC,qBAAS,CAAC,CAAC,oBAAoB,CACpC,kCAAkC,EAClC,OAAO,EACP,SAAS,EACT,KAAK,EACL,IAAI,CACL,CAAC;QACJ,CAAC,CAAA,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;IAEH,QAAQ,CAAC,4BAA4B,EAAE,GAAG,EAAE;QAC1C,EAAE,CAAC,gDAAgD,EAAE,GAAS,EAAE;YAC9D,MAAM,OAAO,GAA2B;gBACtC,OAAO,EAAE,kCAAkC;gBAC3C,IAAI,EAAE,OAAO;gBACb,SAAS,EAAE,IAAI;aAChB,CAAC;YAEF,MAAM,IAAA,iDAAyB,EAAC,OAAO,CAAC,CAAC;YAEzC,MAAM,CAAC,qBAAS,CAAC,CAAC,oBAAoB,CACpC,kCAAkC,EAClC,OAAO,EACP,SAAS,EACT,IAAI,EACJ,KAAK,CACN,CAAC;QACJ,CAAC,CAAA,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;IAEH,QAAQ,CAAC,yBAAyB,EAAE,GAAG,EAAE;QACvC,EAAE,CAAC,0CAA0C,EAAE,GAAS,EAAE;YACxD,MAAM,OAAO,GAA2B;gBACtC,OAAO,EAAE,kCAAkC;gBAC3C,IAAI,EAAE,OAAO;aACd,CAAC;YAEF,MAAM,IAAA,iDAAyB,EAAC,OAAO,CAAC,CAAC;YAEzC,MAAM,CAAC,2BAAY,CAAC,CAAC,oBAAoB,CAAC;gBACxC,WAAW,EAAE,UAAU,CAAC,WAAW;gBACnC,QAAQ,EAAE,UAAU,CAAC,QAAQ;gBAC7B,KAAK,EAAE,UAAU,CAAC,KAAK;aACxB,CAAC,CAAC;QACL,CAAC,CAAA,CAAC,CAAC;QAEH,EAAE,CAAC,0BAA0B,EAAE,GAAS,EAAE;YACxC,MAAM,OAAO,GAA2B;gBACtC,OAAO,EAAE,kCAAkC;gBAC3C,IAAI,EAAE,OAAO;aACd,CAAC;YAEF,MAAM,IAAA,iDAAyB,EAAC,OAAO,CAAC,CAAC;YAEzC,MAAM,CAAC,+BAAc,CAAC,CAAC,gBAAgB,EAAE,CAAC;QAC5C,CAAC,CAAA,CAAC,CAAC;QAEH,EAAE,CAAC,gCAAgC,EAAE,GAAS,EAAE;YAC9C,MAAM,OAAO,GAA2B;gBACtC,OAAO,EAAE,kCAAkC;gBAC3C,IAAI,EAAE,OAAO;aACd,CAAC;YAEF,MAAM,IAAA,iDAAyB,EAAC,OAAO,CAAC,CAAC;YAEzC,MAAM,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,oBAAoB,CACxC,MAAM,CAAC,gBAAgB,CAAC,yBAAyB,CAAC,CACnD,CAAC;QACJ,CAAC,CAAA,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;IAEH,QAAQ,CAAC,sBAAsB,EAAE,GAAG,EAAE;QACpC,EAAE,CAAC,0BAA0B,EAAE,GAAS,EAAE;YACxC,MAAM,KAAK,GAAG,IAAI,KAAK,CAAC,uBAAuB,CAAC,CAAC;YAChD,qBAAuB,CAAC,iBAAiB,CAAC,KAAK,CAAC,CAAC;YAElD,MAAM,OAAO,GAA2B;gBACtC,OAAO,EAAE,kCAAkC;gBAC3C,IAAI,EAAE,OAAO;aACd,CAAC;YAEF,MAAM,IAAA,iDAAyB,EAAC,OAAO,CAAC,CAAC;YAEzC,MAAM,CAAC,2BAAY,CAAC,CAAC,oBAAoB,CAAC,KAAK,CAAC,CAAC;QACnD,CAAC,CAAA,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;IAEH,QAAQ,CAAC,yBAAyB,EAAE,GAAG,EAAE;QACvC,EAAE,CAAC,mDAAmD,EAAE,GAAS,EAAE;YACjE,MAAM,KAAK,GAAG,IAAI,KAAK,CAAC,gBAAgB,CAAC,CAAC;YACzC,2BAA0B,CAAC,iBAAiB,CAAC,KAAK,CAAC,CAAC;YAErD,MAAM,OAAO,GAA2B;gBACtC,OAAO,EAAE,kCAAkC;gBAC3C,IAAI,EAAE,OAAO;aACd,CAAC;YAEF,MAAM,IAAA,iDAAyB,EAAC,OAAO,CAAC,CAAC;YAEzC,MAAM,CAAC,2BAAY,CAAC,CAAC,oBAAoB,CACvC,0BAA0B,EAC1B,KAAK,CACN,CAAC;QACJ,CAAC,CAAA,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC"} \ No newline at end of file diff --git a/dist/src/lib/handlers/alks-server-start.test.js b/dist/src/lib/handlers/alks-server-start.test.js new file mode 100644 index 00000000..de374419 --- /dev/null +++ b/dist/src/lib/handlers/alks-server-start.test.js @@ -0,0 +1,90 @@ +"use strict"; +Object.defineProperty(exports, "__esModule", { value: true }); +const tslib_1 = require("tslib"); +const child_process_1 = require("child_process"); +const fs_1 = tslib_1.__importDefault(require("fs")); +// Mock modules before importing the handler +jest.mock('../isOsx'); +jest.mock('../errorAndExit'); +jest.mock('../log'); +jest.mock('child_process'); +jest.mock('forever', () => ({ + startDaemon: jest.fn(), +})); +// Silence console.error +jest.spyOn(global.console, 'error').mockImplementation(() => { }); +// Silence console.log +jest.spyOn(global.console, 'log').mockImplementation(() => { }); +describe('handleAlksServerStart', () => { + // Import mocks after jest.mock calls + const { isOsx } = require('../isOsx'); + const { errorAndExit } = require('../errorAndExit'); + const { handleAlksServerStart } = require('./alks-server-start'); + const defaultOptions = {}; + beforeEach(() => { + jest.clearAllMocks(); + isOsx.mockReturnValue(true); + jest.spyOn(fs_1.default, 'existsSync').mockReturnValue(false); + child_process_1.execSync.mockReturnValue(undefined); + }); + afterEach(() => { + jest.restoreAllMocks(); + }); + describe('when not on OSX', () => { + it('should call errorAndExit with appropriate message', () => tslib_1.__awaiter(void 0, void 0, void 0, function* () { + isOsx.mockReturnValue(false); + yield handleAlksServerStart(defaultOptions); + expect(errorAndExit).toHaveBeenCalledWith('The metadata server is only supported on OSX.'); + })); + }); + describe('when on OSX', () => { + describe('when daemon is not installed', () => { + beforeEach(() => { + jest.spyOn(fs_1.default, 'existsSync').mockReturnValue(false); + }); + it('should attempt to install pf anchor', () => tslib_1.__awaiter(void 0, void 0, void 0, function* () { + yield handleAlksServerStart(defaultOptions); + expect(child_process_1.execSync).toHaveBeenCalledWith(expect.stringContaining('/com.coxautodev.alks /etc/pf.anchors/')); + })); + it('should attempt to install launch daemon plist', () => tslib_1.__awaiter(void 0, void 0, void 0, function* () { + yield handleAlksServerStart(defaultOptions); + expect(child_process_1.execSync).toHaveBeenCalledWith(expect.stringContaining('/com.coxautodev.alks.Ec2MetaDataFirewall.plist /Library/LaunchDaemons/')); + })); + it('should attempt to load the launch daemon', () => tslib_1.__awaiter(void 0, void 0, void 0, function* () { + yield handleAlksServerStart(defaultOptions); + expect(child_process_1.execSync).toHaveBeenCalledWith('sudo launchctl load -w /Library/LaunchDaemons/com.coxautodev.alks.Ec2MetaDataFirewall.plist'); + })); + it('should use correct service path that includes /service directory', () => tslib_1.__awaiter(void 0, void 0, void 0, function* () { + yield handleAlksServerStart(defaultOptions); + // Verify the path contains 'service/' directory (the fix we made) + const calls = child_process_1.execSync.mock.calls; + const cpCall = calls.find((call) => call[0].includes('com.coxautodev.alks /etc/pf.anchors/')); + expect(cpCall[0]).toMatch(/service\/com\.coxautodev\.alks/); + })); + it('should handle execSync errors gracefully', () => tslib_1.__awaiter(void 0, void 0, void 0, function* () { + child_process_1.execSync.mockImplementation(() => { + throw new Error('Command failed'); + }); + // Should not throw, just log error + yield expect(handleAlksServerStart(defaultOptions)).resolves.not.toThrow(); + })); + }); + describe('when daemon is already installed', () => { + beforeEach(() => { + jest.spyOn(fs_1.default, 'existsSync').mockReturnValue(true); + }); + it('should not attempt to install daemon rules', () => tslib_1.__awaiter(void 0, void 0, void 0, function* () { + yield handleAlksServerStart(defaultOptions); + // execSync should not be called for sudo cp commands + const sudoCpCalls = child_process_1.execSync.mock.calls.filter((call) => call[0].includes('sudo cp')); + expect(sudoCpCalls).toHaveLength(0); + })); + it('should start the server daemon', () => tslib_1.__awaiter(void 0, void 0, void 0, function* () { + const forever = require('forever'); + yield handleAlksServerStart(defaultOptions); + expect(forever.startDaemon).toHaveBeenCalled(); + })); + }); + }); +}); +//# sourceMappingURL=alks-server-start.test.js.map \ No newline at end of file diff --git a/dist/src/lib/handlers/alks-server-start.test.js.map b/dist/src/lib/handlers/alks-server-start.test.js.map new file mode 100644 index 00000000..0fe47f8b --- /dev/null +++ b/dist/src/lib/handlers/alks-server-start.test.js.map @@ -0,0 +1 @@ +{"version":3,"file":"alks-server-start.test.js","sourceRoot":"","sources":["../../../../src/lib/handlers/alks-server-start.test.ts"],"names":[],"mappings":"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"} \ No newline at end of file diff --git a/dist/src/lib/handlers/alks-server-stop.test.js b/dist/src/lib/handlers/alks-server-stop.test.js new file mode 100644 index 00000000..fe601587 --- /dev/null +++ b/dist/src/lib/handlers/alks-server-stop.test.js @@ -0,0 +1,74 @@ +"use strict"; +Object.defineProperty(exports, "__esModule", { value: true }); +const tslib_1 = require("tslib"); +const alks_server_stop_1 = require("./alks-server-stop"); +const isOsx_1 = require("../isOsx"); +jest.mock('../isOsx'); +const mockList = jest.fn(); +const mockStopAll = jest.fn(); +jest.mock('forever', () => ({ + list: (_verbose, callback) => mockList(_verbose, callback), + stopAll: () => mockStopAll(), +})); +// Silence console.error +jest.spyOn(global.console, 'error').mockImplementation(() => { }); +// Silence console.log +jest.spyOn(global.console, 'log').mockImplementation(() => { }); +// Mock process.exit +const mockExit = jest.spyOn(process, 'exit').mockImplementation(() => { + throw new Error('process.exit called'); +}); +describe('handleAlksServerStop', () => { + const defaultOptions = {}; + beforeEach(() => { + jest.clearAllMocks(); + isOsx_1.isOsx.mockReturnValue(true); + }); + describe('when not on OSX', () => { + it('should print error and exit', () => tslib_1.__awaiter(void 0, void 0, void 0, function* () { + isOsx_1.isOsx.mockReturnValue(false); + yield expect((0, alks_server_stop_1.handleAlksServerStop)(defaultOptions)).rejects.toThrow('process.exit called'); + expect(console.error).toHaveBeenCalledWith(expect.stringContaining('only supported on OSX')); + expect(mockExit).toHaveBeenCalledWith(0); + })); + }); + describe('when on OSX', () => { + beforeEach(() => { + isOsx_1.isOsx.mockReturnValue(true); + }); + it('should check forever for running processes', () => tslib_1.__awaiter(void 0, void 0, void 0, function* () { + mockList.mockImplementation((_verbose, callback) => { + callback(null, null); + }); + yield (0, alks_server_stop_1.handleAlksServerStop)(defaultOptions); + expect(mockList).toHaveBeenCalledWith(false, expect.any(Function)); + })); + describe('when server is not running', () => { + it('should display message that server is not running', () => tslib_1.__awaiter(void 0, void 0, void 0, function* () { + mockList.mockImplementation((_verbose, callback) => { + callback(null, null); + }); + yield (0, alks_server_stop_1.handleAlksServerStop)(defaultOptions); + expect(console.log).toHaveBeenCalledWith(expect.stringContaining('not running')); + expect(mockStopAll).not.toHaveBeenCalled(); + })); + }); + describe('when server is running', () => { + it('should stop all forever processes', () => tslib_1.__awaiter(void 0, void 0, void 0, function* () { + mockList.mockImplementation((_verbose, callback) => { + callback(null, [{ uid: 'alks-metadata' }]); + }); + yield (0, alks_server_stop_1.handleAlksServerStop)(defaultOptions); + expect(mockStopAll).toHaveBeenCalled(); + })); + it('should display message that server was stopped', () => tslib_1.__awaiter(void 0, void 0, void 0, function* () { + mockList.mockImplementation((_verbose, callback) => { + callback(null, [{ uid: 'alks-metadata' }]); + }); + yield (0, alks_server_stop_1.handleAlksServerStop)(defaultOptions); + expect(console.log).toHaveBeenCalledWith(expect.stringContaining('stopped')); + })); + }); + }); +}); +//# sourceMappingURL=alks-server-stop.test.js.map \ No newline at end of file diff --git a/dist/src/lib/handlers/alks-server-stop.test.js.map b/dist/src/lib/handlers/alks-server-stop.test.js.map new file mode 100644 index 00000000..5a8c318d --- /dev/null +++ b/dist/src/lib/handlers/alks-server-stop.test.js.map @@ -0,0 +1 @@ +{"version":3,"file":"alks-server-stop.test.js","sourceRoot":"","sources":["../../../../src/lib/handlers/alks-server-stop.test.ts"],"names":[],"mappings":"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"} \ No newline at end of file diff --git a/src/lib/handlers/alks-server-configure.test.ts b/src/lib/handlers/alks-server-configure.test.ts new file mode 100644 index 00000000..0ba68a5c --- /dev/null +++ b/src/lib/handlers/alks-server-configure.test.ts @@ -0,0 +1,197 @@ +import commander from 'commander'; +import { handleAlksServerConfigure } from './alks-server-configure'; +import { errorAndExit } from '../errorAndExit'; +import { getIamKey } from '../getIamKey'; +import { saveMetadata } from '../saveMetadata'; +import { checkForUpdate } from '../checkForUpdate'; +import { tryToExtractRole } from '../tryToExtractRole'; +import { Key } from '../../model/keys'; + +jest.mock('../errorAndExit'); +jest.mock('../getIamKey'); +jest.mock('../saveMetadata'); +jest.mock('../checkForUpdate'); +jest.mock('../tryToExtractRole'); +jest.mock('../log'); + +// Silence console.error +jest.spyOn(global.console, 'error').mockImplementation(() => {}); +// Silence console.log +jest.spyOn(global.console, 'log').mockImplementation(() => {}); + +describe('handleAlksServerConfigure', () => { + const defaultKey: Key = { + alksAccount: '012345678910/ALKSAdmin - awstest', + alksRole: 'Admin', + isIAM: true, + expires: new Date(), + accessKey: 'AKIAIOSFODNN7EXAMPLE', + secretKey: 'wJalrXUtnFEMI/K7MDENG/bPxRfiCYEXAMPLEKEY', + sessionToken: 'token123', + }; + + beforeEach(() => { + jest.clearAllMocks(); + (getIamKey as jest.Mock).mockResolvedValue(defaultKey); + (saveMetadata as jest.Mock).mockResolvedValue(undefined); + (checkForUpdate as jest.Mock).mockResolvedValue(undefined); + (tryToExtractRole as jest.Mock).mockReturnValue(undefined); + }); + + describe('when account and role are provided', () => { + it('should get IAM key with provided account and role', async () => { + const options: commander.OptionValues = { + account: '012345678910/ALKSAdmin - awstest', + role: 'Admin', + }; + + await handleAlksServerConfigure(options); + + expect(getIamKey).toHaveBeenCalledWith( + '012345678910/ALKSAdmin - awstest', + 'Admin', + undefined, + false, + false + ); + }); + }); + + describe('when only account is provided', () => { + it('should try to extract role from account string', async () => { + const options: commander.OptionValues = { + account: '012345678910/ALKSAdmin - awstest', + }; + (tryToExtractRole as jest.Mock).mockReturnValue('Admin'); + + await handleAlksServerConfigure(options); + + expect(tryToExtractRole).toHaveBeenCalledWith( + '012345678910/ALKSAdmin - awstest' + ); + expect(getIamKey).toHaveBeenCalledWith( + '012345678910/ALKSAdmin - awstest', + 'Admin', + undefined, + false, + false + ); + }); + }); + + describe('when iam flag is set', () => { + it('should pass true for iamOnly parameter', async () => { + const options: commander.OptionValues = { + account: '012345678910/ALKSAdmin - awstest', + role: 'Admin', + iam: true, + }; + + await handleAlksServerConfigure(options); + + expect(getIamKey).toHaveBeenCalledWith( + '012345678910/ALKSAdmin - awstest', + 'Admin', + undefined, + false, + true + ); + }); + }); + + describe('when favorites flag is set', () => { + it('should pass true for filterFavorites parameter', async () => { + const options: commander.OptionValues = { + account: '012345678910/ALKSAdmin - awstest', + role: 'Admin', + favorites: true, + }; + + await handleAlksServerConfigure(options); + + expect(getIamKey).toHaveBeenCalledWith( + '012345678910/ALKSAdmin - awstest', + 'Admin', + undefined, + true, + false + ); + }); + }); + + describe('when getIamKey succeeds', () => { + it('should save metadata with correct values', async () => { + const options: commander.OptionValues = { + account: '012345678910/ALKSAdmin - awstest', + role: 'Admin', + }; + + await handleAlksServerConfigure(options); + + expect(saveMetadata).toHaveBeenCalledWith({ + alksAccount: defaultKey.alksAccount, + alksRole: defaultKey.alksRole, + isIam: defaultKey.isIAM, + }); + }); + + it('should check for updates', async () => { + const options: commander.OptionValues = { + account: '012345678910/ALKSAdmin - awstest', + role: 'Admin', + }; + + await handleAlksServerConfigure(options); + + expect(checkForUpdate).toHaveBeenCalled(); + }); + + it('should display success message', async () => { + const options: commander.OptionValues = { + account: '012345678910/ALKSAdmin - awstest', + role: 'Admin', + }; + + await handleAlksServerConfigure(options); + + expect(console.error).toHaveBeenCalledWith( + expect.stringContaining('Metadata has been saved') + ); + }); + }); + + describe('when getIamKey fails', () => { + it('should call errorAndExit', async () => { + const error = new Error('Failed to get IAM key'); + (getIamKey as jest.Mock).mockRejectedValue(error); + + const options: commander.OptionValues = { + account: '012345678910/ALKSAdmin - awstest', + role: 'Admin', + }; + + await handleAlksServerConfigure(options); + + expect(errorAndExit).toHaveBeenCalledWith(error); + }); + }); + + describe('when saveMetadata fails', () => { + it('should call errorAndExit with appropriate message', async () => { + const error = new Error('Failed to save'); + (saveMetadata as jest.Mock).mockRejectedValue(error); + + const options: commander.OptionValues = { + account: '012345678910/ALKSAdmin - awstest', + role: 'Admin', + }; + + await handleAlksServerConfigure(options); + + expect(errorAndExit).toHaveBeenCalledWith( + 'Unable to save metadata!', + error + ); + }); + }); +}); diff --git a/src/lib/handlers/alks-server-start.test.ts b/src/lib/handlers/alks-server-start.test.ts new file mode 100644 index 00000000..2ac3b8a9 --- /dev/null +++ b/src/lib/handlers/alks-server-start.test.ts @@ -0,0 +1,129 @@ +import commander from 'commander'; +import { execSync } from 'child_process'; +import fs from 'fs'; + +// Mock modules before importing the handler +jest.mock('../isOsx'); +jest.mock('../errorAndExit'); +jest.mock('../log'); +jest.mock('child_process'); +jest.mock('forever', () => ({ + startDaemon: jest.fn(), +})); + +// Silence console.error +jest.spyOn(global.console, 'error').mockImplementation(() => {}); +// Silence console.log +jest.spyOn(global.console, 'log').mockImplementation(() => {}); + +describe('handleAlksServerStart', () => { + // Import mocks after jest.mock calls + const { isOsx } = require('../isOsx'); + const { errorAndExit } = require('../errorAndExit'); + const { handleAlksServerStart } = require('./alks-server-start'); + + const defaultOptions: commander.OptionValues = {}; + + beforeEach(() => { + jest.clearAllMocks(); + (isOsx as jest.Mock).mockReturnValue(true); + jest.spyOn(fs, 'existsSync').mockReturnValue(false); + (execSync as jest.Mock).mockReturnValue(undefined); + }); + + afterEach(() => { + jest.restoreAllMocks(); + }); + + describe('when not on OSX', () => { + it('should call errorAndExit with appropriate message', async () => { + (isOsx as jest.Mock).mockReturnValue(false); + + await handleAlksServerStart(defaultOptions); + + expect(errorAndExit).toHaveBeenCalledWith( + 'The metadata server is only supported on OSX.' + ); + }); + }); + + describe('when on OSX', () => { + describe('when daemon is not installed', () => { + beforeEach(() => { + jest.spyOn(fs, 'existsSync').mockReturnValue(false); + }); + + it('should attempt to install pf anchor', async () => { + await handleAlksServerStart(defaultOptions); + + expect(execSync).toHaveBeenCalledWith( + expect.stringContaining('/com.coxautodev.alks /etc/pf.anchors/') + ); + }); + + it('should attempt to install launch daemon plist', async () => { + await handleAlksServerStart(defaultOptions); + + expect(execSync).toHaveBeenCalledWith( + expect.stringContaining( + '/com.coxautodev.alks.Ec2MetaDataFirewall.plist /Library/LaunchDaemons/' + ) + ); + }); + + it('should attempt to load the launch daemon', async () => { + await handleAlksServerStart(defaultOptions); + + expect(execSync).toHaveBeenCalledWith( + 'sudo launchctl load -w /Library/LaunchDaemons/com.coxautodev.alks.Ec2MetaDataFirewall.plist' + ); + }); + + it('should use correct service path that includes /service directory', async () => { + await handleAlksServerStart(defaultOptions); + + // Verify the path contains 'service/' directory (the fix we made) + const calls = (execSync as jest.Mock).mock.calls; + const cpCall = calls.find((call: string[]) => + call[0].includes('com.coxautodev.alks /etc/pf.anchors/') + ); + expect(cpCall[0]).toMatch(/service\/com\.coxautodev\.alks/); + }); + + it('should handle execSync errors gracefully', async () => { + (execSync as jest.Mock).mockImplementation(() => { + throw new Error('Command failed'); + }); + + // Should not throw, just log error + await expect( + handleAlksServerStart(defaultOptions) + ).resolves.not.toThrow(); + }); + }); + + describe('when daemon is already installed', () => { + beforeEach(() => { + jest.spyOn(fs, 'existsSync').mockReturnValue(true); + }); + + it('should not attempt to install daemon rules', async () => { + await handleAlksServerStart(defaultOptions); + + // execSync should not be called for sudo cp commands + const sudoCpCalls = (execSync as jest.Mock).mock.calls.filter( + (call: string[]) => call[0].includes('sudo cp') + ); + expect(sudoCpCalls).toHaveLength(0); + }); + + it('should start the server daemon', async () => { + const forever = require('forever'); + + await handleAlksServerStart(defaultOptions); + + expect(forever.startDaemon).toHaveBeenCalled(); + }); + }); + }); +}); diff --git a/src/lib/handlers/alks-server-stop.test.ts b/src/lib/handlers/alks-server-stop.test.ts new file mode 100644 index 00000000..69b5c17d --- /dev/null +++ b/src/lib/handlers/alks-server-stop.test.ts @@ -0,0 +1,101 @@ +import commander from 'commander'; +import { handleAlksServerStop } from './alks-server-stop'; +import { isOsx } from '../isOsx'; + +jest.mock('../isOsx'); + +const mockList = jest.fn(); +const mockStopAll = jest.fn(); + +jest.mock('forever', () => ({ + list: (_verbose: boolean, callback: Function) => mockList(_verbose, callback), + stopAll: () => mockStopAll(), +})); + +// Silence console.error +jest.spyOn(global.console, 'error').mockImplementation(() => {}); +// Silence console.log +jest.spyOn(global.console, 'log').mockImplementation(() => {}); +// Mock process.exit +const mockExit = jest.spyOn(process, 'exit').mockImplementation(() => { + throw new Error('process.exit called'); +}); + +describe('handleAlksServerStop', () => { + const defaultOptions: commander.OptionValues = {}; + + beforeEach(() => { + jest.clearAllMocks(); + (isOsx as jest.Mock).mockReturnValue(true); + }); + + describe('when not on OSX', () => { + it('should print error and exit', async () => { + (isOsx as jest.Mock).mockReturnValue(false); + + await expect(handleAlksServerStop(defaultOptions)).rejects.toThrow( + 'process.exit called' + ); + + expect(console.error).toHaveBeenCalledWith( + expect.stringContaining('only supported on OSX') + ); + expect(mockExit).toHaveBeenCalledWith(0); + }); + }); + + describe('when on OSX', () => { + beforeEach(() => { + (isOsx as jest.Mock).mockReturnValue(true); + }); + + it('should check forever for running processes', async () => { + mockList.mockImplementation((_verbose, callback) => { + callback(null, null); + }); + + await handleAlksServerStop(defaultOptions); + + expect(mockList).toHaveBeenCalledWith(false, expect.any(Function)); + }); + + describe('when server is not running', () => { + it('should display message that server is not running', async () => { + mockList.mockImplementation((_verbose, callback) => { + callback(null, null); + }); + + await handleAlksServerStop(defaultOptions); + + expect(console.log).toHaveBeenCalledWith( + expect.stringContaining('not running') + ); + expect(mockStopAll).not.toHaveBeenCalled(); + }); + }); + + describe('when server is running', () => { + it('should stop all forever processes', async () => { + mockList.mockImplementation((_verbose, callback) => { + callback(null, [{ uid: 'alks-metadata' }]); + }); + + await handleAlksServerStop(defaultOptions); + + expect(mockStopAll).toHaveBeenCalled(); + }); + + it('should display message that server was stopped', async () => { + mockList.mockImplementation((_verbose, callback) => { + callback(null, [{ uid: 'alks-metadata' }]); + }); + + await handleAlksServerStop(defaultOptions); + + expect(console.log).toHaveBeenCalledWith( + expect.stringContaining('stopped') + ); + }); + }); + }); +}); From 32ab6a5f39c2992d1eaa3474acc1e1d09b8249b9 Mon Sep 17 00:00:00 2001 From: David Woodruff Date: Wed, 10 Dec 2025 13:29:32 -0700 Subject: [PATCH 3/3] bumped version --- dist/package.json | 2 +- package.json | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/dist/package.json b/dist/package.json index de11617e..d90259d1 100644 --- a/dist/package.json +++ b/dist/package.json @@ -1,6 +1,6 @@ { "name": "alks", - "version": "3.24.0", + "version": "3.24.1", "description": "CLI for working with ALKS", "main": "dist/src/bin/alks.js", "scripts": { diff --git a/package.json b/package.json index 61b055c8..437eca12 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "alks", - "version": "3.24.0", + "version": "3.24.1", "description": "CLI for working with ALKS", "main": "dist/src/bin/alks.js", "scripts": {