Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Supporting deployments on zos4 nodes #3497

Merged
merged 48 commits into from
Jan 13, 2025
Merged

Conversation

maayarosama
Copy link
Contributor

@maayarosama maayarosama commented Oct 3, 2024

Description

Supporting deployments on zos4 nodes from grid client and dashboard

Changes

  • Added a network light and machine light workloads
  • Adjusted workload types to contain the two newly added workloads
  • Added unit tests for the two new workload types
  • Added a ZNetworkLight primitive class to handle the creation of network light workload
  • Added a VMLightPrimitive primitive class to handle the creation of zmachine light workload
  • Updated the _createDeployment and create method to support zos4 deployments according to the node's features
  • Updated deployMerge and saveNetworks methods in TwinDeploymentHandler
  • Added getFeaturesFromFilters method in nodes and capacity module to set node's features according to the filters chosen by the user
  • Added extra filters in the FilterOptions class
  • Adjusted automated and manual node selection to consider features in filters
  • Added planetary, mycelium and wireguard filters to all solutions
  • Added a single_vm_zos4.ts script to deploy on a zos4 node
  • Added deployment_flow.md

Related Issues

Tested Scenarios

  1. Node 168 which is a zos3 node
    Screenshot from 2024-11-17 15-27-45

  2. Node 255 which is a zos4 node
    Screenshot from 2024-11-17 15-27-20

  • Go to Dashboard
    1. In the deploy section, select any solution
    2. In the automated node selection:
    3. Adjust your filters to include only the Mycelium network
    4. Reload the nodes.
    5. Observe that both zos4 and zos3 nodes are listed.
    6. Deploy on any node and it will pass (note: zos4 node used is 255)
    7. Observe Deployment list
    8. Navigate to Contracts list

Screenshot from 2024-11-17 15-50-10

Screenshot from 2024-11-17 15-50-58

Screenshot from 2024-11-17 15-52-40

  • Go to Dashboard

    1. In the deploy section, select any solution
    2. In the manual node selection:
    3. Adjust your filters to include only the Mycelium network
    4. Enter any node id
    5. If the node has Mycelium as a feature no validation error will be shown
    6. If the node doesn't have Mycelium as a feature validation error will be shown
  • Go to Dashboard

    1. In the deploy section, select any solution
    2. In the automated node selection:
    3. Adjust your filters to include the Mycelium and wireguard networks
    4. Enter node id == 259 and observe
    5. Validation error will be shown stating the the node doesn't support wireguard

Checklist

  • Tests included
  • Build pass
  • Documentation
  • Code format and docstrings
  • Screenshots/Video attached (needed for UI changes)

Copy link
Contributor

@0oM4R 0oM4R left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

partial review will continue tmw

packages/playground/src/utils/deploy_vm.ts Show resolved Hide resolved
packages/grid_client/src/zos/zmachine_light.ts Outdated Show resolved Hide resolved
packages/grid_client/src/primitives/nodes.ts Show resolved Hide resolved
packages/grid_client/src/modules/models.ts Show resolved Hide resolved
@@ -142,6 +142,7 @@ class MachineModel {
@Expose() @IsInt() @IsOptional() solutionProviderId?: number;
@Expose() @IsString() @IsOptional() zlogsOutput?: string;
@Expose() @IsString({ each: true }) @IsOptional() gpus?: string[];
@Expose() @IsString({ each: true }) @IsOptional() features?: string[];
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

do we need this ?

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

yes we do as it might be used like this

Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

As I mentioned before, I think we should have an enum for the possible values inside the array

Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

can we use the feature type here instead of the string ?

…n AddMachine filters and moving getFeatures method to utils
@amiraabouhadid
Copy link
Contributor

looks like we have an issue with gateway node selection it keep loading forever, not on staging btw
Screencast.from.2024-12-24.14-50-59.webm

same here https://www.loom.com/share/d5d0fcd4fdb842b7b9092196baf89f0f?sid=57c21d70-09bd-4a09-8c02-8a6c38ffe980

this issue is till present too, only on your pr, please fix it

@0oM4R

This comment was marked as outdated.

@amiraabouhadid
Copy link
Contributor

some tests are failing with me too

@maayarosama
Copy link
Contributor Author

some tests are failing here is the report you can visualize it using https://lotterfriends.github.io/online-junit-parser/#case.1.0

<?xml version="1.0" encoding="UTF-8"?>
<testsuites name="jest tests" tests="133" failures="13" errors="0" time="2349.784">
  <testsuite name="presearch.test.ts" errors="0" failures="0" skipped="0" timestamp="2024-12-30T12:34:26" time="100.413" tests="1">
    <testcase classname=" TC2728 - Applications: Deploy Presearch" name=" TC2728 - Applications: Deploy Presearch" time="82.754">
    </testcase>
  </testsuite>
  <testsuite name="zdb.test.ts" errors="0" failures="1" skipped="0" timestamp="2024-12-30T12:36:06" time="311.717" tests="1">
    <testcase classname=" TC1236 - ZDB: Deploy ZDBs" name=" TC1236 - ZDB: Deploy ZDBs" time="307.903">
      <failure>Error: Unhandled error. (ConnectionTimeoutError: Connection timeout
    at Socket.&lt;anonymous&gt; (/home/kassem/tfgrid-sdk-ts/node_modules/@redis/client/dist/lib/client/socket.js:178:124)
    at Object.onceWrapper (node:events:632:28)
    at Socket.emit (node:events:518:28)
    at Socket._onTimeout (node:net:595:8)
    at listOnTimeout (node:internal/timers:581:17)
    at processTimers (node:internal/timers:519:7))
    at Commander.emit (node:events:507:17)
    at RedisSocket.&lt;anonymous&gt; (/home/kassem/tfgrid-sdk-ts/node_modules/@redis/client/dist/lib/client/index.js:395:14)
    at RedisSocket.emit (node:events:518:28)
    at RedisSocket._RedisSocket_connect (/home/kassem/tfgrid-sdk-ts/node_modules/@redis/client/dist/lib/client/socket.js:167:18)
    at processTicksAndRejections (node:internal/process/task_queues:95:5)</failure>
      <failure>Error: thrown: &quot;Exceeded timeout of 300000 ms for a test.
Add a timeout value to this test to increase the timeout, if this is a long-running test. See https://jestjs.io/docs/api#testname-fn-timeout.&quot;
    at Object.&lt;anonymous&gt; (/home/kassem/tfgrid-sdk-ts/packages/grid_client/tests/modules/zdb.test.ts:20:1)
    at Runtime._execModule (/home/kassem/tfgrid-sdk-ts/node_modules/jest-runtime/build/index.js:1429:24)
    at Runtime._loadModule (/home/kassem/tfgrid-sdk-ts/node_modules/jest-runtime/build/index.js:1013:12)
    at Runtime.requireModule (/home/kassem/tfgrid-sdk-ts/node_modules/jest-runtime/build/index.js:873:12)
    at jestAdapter (/home/kassem/tfgrid-sdk-ts/node_modules/@jest/core/node_modules/jest-circus/build/legacy-code-todo-rewrite/jestAdapter.js:77:13)
    at runTestInternal (/home/kassem/tfgrid-sdk-ts/node_modules/jest-runner/build/runTest.js:367:16)
    at runTest (/home/kassem/tfgrid-sdk-ts/node_modules/jest-runner/build/runTest.js:444:34)</failure>
    </testcase>
  </testsuite>
  <testsuite name="gateways.test.ts" errors="0" failures="1" skipped="0" timestamp="2024-12-30T12:41:18" time="239.937" tests="1">
    <testcase classname=" TC1237 - Gateways: Expose a VM Over Gateway" name=" TC1237 - Gateways: Expose a VM Over Gateway" time="217.099">
      <failure>Error: Gateway is unreachable after multiple retries
    at testGateway (/home/kassem/tfgrid-sdk-ts/packages/grid_client/tests/modules/gateways.test.ts:75:11)
    at Object.&lt;anonymous&gt; (/home/kassem/tfgrid-sdk-ts/packages/grid_client/tests/modules/gateways.test.ts:242:3)</failure>
    </testcase>
  </testsuite>
  <testsuite name="vm.test.ts" errors="0" failures="3" skipped="0" timestamp="2024-12-30T12:45:18" time="186.072" tests="4">
    <testcase classname=" TC1228 - VM: Deploy a VM" name=" TC1228 - VM: Deploy a VM" time="42.786">
    </testcase>
    <testcase classname=" TC2847 - VM: Deploy a VM With Mycelium" name=" TC2847 - VM: Deploy a VM With Mycelium" time="31.984">
      <failure>Error: connect ENETUNREACH 44d:ba67:3657:586d:ff0f:0:200:2:22
    at TCPConnectWrap.afterConnect [as oncomplete] (node:net:1611:16)</failure>
    </testcase>
    <testcase classname=" TC1229 - VM: Deploy a VM With a Disk" name=" TC1229 - VM: Deploy a VM With a Disk" time="31.336">
      <failure>Error: expect(received).toContain(expected) // indexOf

Expected substring: &quot;/nfyhmyr0ro&quot;
Received string:    &quot;vroot                     4.0G     16.0K      4.0G   0% /&quot;
    at /home/kassem/tfgrid-sdk-ts/packages/grid_client/tests/modules/vm.test.ts:503:30
    at processTicksAndRejections (node:internal/process/task_queues:95:5)
    at Object.&lt;anonymous&gt; (/home/kassem/tfgrid-sdk-ts/packages/grid_client/tests/modules/vm.test.ts:500:5)</failure>
    </testcase>
    <testcase classname=" TC1230 - VM: Deploy Multiple VMs on Different Nodes" name=" TC1230 - VM: Deploy Multiple VMs on Different Nodes" time="51.813">
      <failure>Error: expect(received).toContain(expected) // indexOf

Matcher error: received value must not be null nor undefined

Received has value: undefined
    at /home/kassem/tfgrid-sdk-ts/packages/grid_client/tests/modules/vm.test.ts:735:32
    at processTicksAndRejections (node:internal/process/task_queues:95:5)
    at Object.&lt;anonymous&gt; (/home/kassem/tfgrid-sdk-ts/packages/grid_client/tests/modules/vm.test.ts:732:7)</failure>
    </testcase>
  </testsuite>
  <testsuite name="kubernetes.test.ts" errors="0" failures="3" skipped="0" timestamp="2024-12-30T12:48:24" time="155.917" tests="3">
    <testcase classname=" TC1231 - Kubernetes: Deploy a Kubernetes Cluster" name=" TC1231 - Kubernetes: Deploy a Kubernetes Cluster" time="53.306">
      <failure>Error: expect(received).toHaveLength(expected)

Expected length: 2
Received length: 1
Received array:  [{&quot;contractId&quot;: 181335, &quot;contractType&quot;: {&quot;nodeContract&quot;: {&quot;deploymentData&quot;: &quot;{\&quot;version\&quot;:3,\&quot;type\&quot;:\&quot;kubernetes\&quot;,\&quot;name\&quot;:\&quot;qana8t1lpk4fmep\&quot;,\&quot;projectName\&quot;:\&quot;kubernetes/qana8t1lpk4fmep\&quot;}&quot;, &quot;deploymentHash&quot;: &quot;100138f447c8673441a1b866718e22fc&quot;, &quot;nodeId&quot;: 145, &quot;publicIps&quot;: 0, &quot;publicIpsList&quot;: []}}, &quot;solutionProviderId&quot;: null, &quot;state&quot;: {&quot;created&quot;: null}, &quot;twinId&quot;: 800, &quot;version&quot;: 4}]
    at Object.&lt;anonymous&gt; (/home/kassem/tfgrid-sdk-ts/packages/grid_client/tests/modules/kubernetes.test.ts:193:33)</failure>
    </testcase>
    <testcase classname=" TC1232 - Kubernetes: Add Worker" name=" TC1232 - Kubernetes: Add Worker" time="53.99">
      <failure>Error: expect(received).toHaveLength(expected)

Expected length: 2
Received length: 1
Received array:  [{&quot;contractId&quot;: 181338, &quot;contractType&quot;: {&quot;nodeContract&quot;: {&quot;deploymentData&quot;: &quot;{\&quot;version\&quot;:3,\&quot;type\&quot;:\&quot;kubernetes\&quot;,\&quot;name\&quot;:\&quot;84zoltxc3plp8gu\&quot;,\&quot;projectName\&quot;:\&quot;kubernetes/84zoltxc3plp8gu\&quot;}&quot;, &quot;deploymentHash&quot;: &quot;c50086e0b4a3cd04203e737ceed121fd&quot;, &quot;nodeId&quot;: 163, &quot;publicIps&quot;: 0, &quot;publicIpsList&quot;: []}}, &quot;solutionProviderId&quot;: null, &quot;state&quot;: {&quot;created&quot;: null}, &quot;twinId&quot;: 800, &quot;version&quot;: 4}]
    at Object.&lt;anonymous&gt; (/home/kassem/tfgrid-sdk-ts/packages/grid_client/tests/modules/kubernetes.test.ts:480:33)</failure>
    </testcase>
    <testcase classname=" TC1233 - Kubernetes: Delete Worker" name=" TC1233 - Kubernetes: Delete Worker" time="47.935">
      <failure>Error: expect(received).toHaveLength(expected)

Expected length: 2
Received length: 1
Received array:  [{&quot;contractId&quot;: 181340, &quot;contractType&quot;: {&quot;nodeContract&quot;: {&quot;deploymentData&quot;: &quot;{\&quot;version\&quot;:3,\&quot;type\&quot;:\&quot;kubernetes\&quot;,\&quot;name\&quot;:\&quot;e8v83h0hb7yfcvu\&quot;,\&quot;projectName\&quot;:\&quot;kubernetes/e8v83h0hb7yfcvu\&quot;}&quot;, &quot;deploymentHash&quot;: &quot;754f2df0ac1759d5ec1c6a89a450980e&quot;, &quot;nodeId&quot;: 152, &quot;publicIps&quot;: 0, &quot;publicIpsList&quot;: []}}, &quot;solutionProviderId&quot;: null, &quot;state&quot;: {&quot;created&quot;: null}, &quot;twinId&quot;: 800, &quot;version&quot;: 4}]
    at Object.&lt;anonymous&gt; (/home/kassem/tfgrid-sdk-ts/packages/grid_client/tests/modules/kubernetes.test.ts:730:33)</failure>
    </testcase>
  </testsuite>
  <testsuite name="qsfs.test.ts" errors="0" failures="2" skipped="0" timestamp="2024-12-30T12:51:00" time="73.428" tests="2">
    <testcase classname=" TC1234 - QSFS: Deploy QSFS underneath a VM" name=" TC1234 - QSFS: Deploy QSFS underneath a VM" time="32.874">
      <failure>Error: Failed to deploy zdb with name d9r1ur6drd37miw7 on node 11 due to: failed to create zdb namespace: failed to connect to 0-db: fb45d10b-***: dial unix /var/run/zdb_fb45d10b-***/zdb.sock: connect: connection refused.
    at TwinDeploymentHandler.checkWorkload (/home/kassem/tfgrid-sdk-ts/packages/grid_client/src/high_level/twinDeploymentHandler.ts:89:13)
    at TwinDeploymentHandler.waitForDeployment (/home/kassem/tfgrid-sdk-ts/packages/grid_client/src/high_level/twinDeploymentHandler.ts:116:22)
    at async Promise.all (index 0)
    at TwinDeploymentHandler.handle (/home/kassem/tfgrid-sdk-ts/packages/grid_client/src/high_level/twinDeploymentHandler.ts:616:7)
    at QSFSZdbsModule.deploy (/home/kassem/tfgrid-sdk-ts/packages/grid_client/src/modules/qsfs_zdbs.ts:97:23)
    at QSFSZdbsModule.descriptor.value (/home/kassem/tfgrid-sdk-ts/packages/grid_client/src/modules/utils.ts:19:12)
    at Object.&lt;anonymous&gt; (/home/kassem/tfgrid-sdk-ts/packages/grid_client/tests/modules/qsfs.test.ts:178:19)</failure>
    </testcase>
    <testcase classname=" TC1235 - QSFS: Deploy QSFS Underneath a Kubernetes Cluster" name=" TC1235 - QSFS: Deploy QSFS Underneath a Kubernetes Cluster" time="36.311">
      <failure>Error: Failed to deploy zdb with name 1i89pm6rqsu8tup9 on node 11 due to: failed to create zdb namespace: failed to connect to 0-db: fb45d10b-***: dial unix /var/run/zdb_fb45d10b-***/zdb.sock: connect: connection refused.
    at TwinDeploymentHandler.checkWorkload (/home/kassem/tfgrid-sdk-ts/packages/grid_client/src/high_level/twinDeploymentHandler.ts:89:13)
    at TwinDeploymentHandler.waitForDeployment (/home/kassem/tfgrid-sdk-ts/packages/grid_client/src/high_level/twinDeploymentHandler.ts:116:22)
    at async Promise.all (index 0)
    at TwinDeploymentHandler.handle (/home/kassem/tfgrid-sdk-ts/packages/grid_client/src/high_level/twinDeploymentHandler.ts:616:7)
    at QSFSZdbsModule.deploy (/home/kassem/tfgrid-sdk-ts/packages/grid_client/src/modules/qsfs_zdbs.ts:97:23)
    at QSFSZdbsModule.descriptor.value (/home/kassem/tfgrid-sdk-ts/packages/grid_client/src/modules/utils.ts:19:12)
    at Object.&lt;anonymous&gt; (/home/kassem/tfgrid-sdk-ts/packages/grid_client/tests/modules/qsfs.test.ts:523:19)</failure>
    </testcase>
  </testsuite>
  <testsuite name="mattermost.test.ts" errors="0" failures="0" skipped="0" timestamp="2024-12-30T12:52:13" time="64.569" tests="1">
    <testcase classname=" TC2689 - Applications: Deploy Mattermost" name=" TC2689 - Applications: Deploy Mattermost" time="46.483">
    </testcase>
  </testsuite>
  <testsuite name="funkwhale.test.ts" errors="0" failures="1" skipped="0" timestamp="2024-12-30T12:53:18" time="9.734" tests="1">
    <testcase classname=" TC2685 - Applications: Deploy Funkwhale" name=" TC2685 - Applications: Deploy Funkwhale" time="5.11">
      <failure>Error: Node 11 doesn&apos;t have enough resources: sru=52, mru=2 .
    at VMHL.create (/home/kassem/tfgrid-sdk-ts/packages/grid_client/src/high_level/machine.ts:82:13)
    at MachinesModule._createDeployment (/home/kassem/tfgrid-sdk-ts/packages/grid_client/src/modules/machines.ts:91:40)
    at MachinesModule.deploy (/home/kassem/tfgrid-sdk-ts/packages/grid_client/src/modules/machines.ts:165:50)
    at MachinesModule.descriptor.value (/home/kassem/tfgrid-sdk-ts/packages/grid_client/src/modules/utils.ts:19:12)
    at Object.&lt;anonymous&gt; (/home/kassem/tfgrid-sdk-ts/packages/grid_client/tests/modules/applications/funkwhale.test.ts:133:15)</failure>
    </testcase>
  </testsuite>
  <testsuite name="capacity_planner.test.ts" errors="0" failures="1" skipped="0" timestamp="2024-12-30T12:53:28" time="6.172" tests="8">
    <testcase classname=" TC1239 - Capacity Planner: Get Farms" name=" TC1239 - Capacity Planner: Get Farms" time="0.093">
    </testcase>
    <testcase classname=" TC1240 - Capacity Planner: Get All Farms" name=" TC1240 - Capacity Planner: Get All Farms" time="0.771">
    </testcase>
    <testcase classname=" TC1241 - Capacity Planner: Get Nodes" name=" TC1241 - Capacity Planner: Get Nodes" time="0.127">
    </testcase>
    <testcase classname=" TC1242 - Capacity Planner: Get All Nodes" name=" TC1242 - Capacity Planner: Get All Nodes" time="0.352">
    </testcase>
    <testcase classname=" TC1243 - Capacity Planner: Filter Nodes" name=" TC1243 - Capacity Planner: Filter Nodes" time="0.107">
      <failure>Error: expect(received).toBeGreaterThanOrEqual(expected)

Expected: &gt;= 8589934592
Received:    -18446735065488155000
    at Object.&lt;anonymous&gt; (/home/kassem/tfgrid-sdk-ts/packages/grid_client/tests/modules/capacity_planner.test.ts:142:80)
    at processTicksAndRejections (node:internal/process/task_queues:95:5)</failure>
    </testcase>
    <testcase classname=" TC1244 - Capacity Planner: Get Free Public IPs" name=" TC1244 - Capacity Planner: Get Free Public IPs" time="0.549">
    </testcase>
    <testcase classname=" TC1245 - Capacity Planner: Get Free Resources of a Specific Node" name=" TC1245 - Capacity Planner: Get Free Resources of a Specific Node" time="0.302">
    </testcase>
    <testcase classname=" TC1246 - Capacity Planner: Get Farm ID From Farm Name" name=" TC1246 - Capacity Planner: Get Farm ID From Farm Name" time="0.638">
    </testcase>
  </testsuite>
  <testsuite name="discourse.test.ts" errors="0" failures="0" skipped="1" timestamp="2024-12-30T12:53:34" time="0.476" tests="1">
    <testcase classname=" TC2690 - Applications: Deploy Discourse" name=" TC2690 - Applications: Deploy Discourse" time="0">
      <skipped/>
    </testcase>
  </testsuite>
  <testsuite name="nodepilot.test.ts" errors="0" failures="0" skipped="1" timestamp="2024-12-30T12:53:34" time="0.452" tests="1">
    <testcase classname=" TC2701 - Applications: Deploy Nodepilot" name=" TC2701 - Applications: Deploy Nodepilot" time="0">
      <skipped/>
    </testcase>
  </testsuite>
  <testsuite name="tfchain.test.ts" errors="0" failures="0" skipped="0" timestamp="2024-12-30T12:53:35" time="169.366" tests="8">
    <testcase classname=" TC1261 - TFChain: Create Account" name=" TC1261 - TFChain: Create Account" time="16.203">
    </testcase>
    <testcase classname=" TC1262 - TFChain: Import Account" name=" TC1262 - TFChain: Import Account" time="17.82">
    </testcase>
    <testcase classname=" TC1263 - TFChain: Get Account" name=" TC1263 - TFChain: Get Account" time="17.968">
    </testcase>
    <testcase classname=" TC1264 - TFChain: Check if Account exists" name=" TC1264 - TFChain: Check if Account exists" time="18.069">
    </testcase>
    <testcase classname=" TC1265 - TFChain: List Accounts" name=" TC1265 - TFChain: List Accounts" time="17.931">
    </testcase>
    <testcase classname=" TC1266 - TFChain: Get Account assets" name=" TC1266 - TFChain: Get Account assets" time="18.204">
    </testcase>
    <testcase classname=" TC1267 - TFChain: Get Account assets by address" name=" TC1267 - TFChain: Get Account assets by address" time="17.906">
    </testcase>
    <testcase classname=" TC1268 - TFChain: Transfer TFTs" name=" TC1268 - TFChain: Transfer TFTs" time="42.132">
    </testcase>
  </testsuite>
  <testsuite name="subsquid.test.ts" errors="0" failures="0" skipped="0" timestamp="2024-12-30T12:56:24" time="149.78" tests="1">
    <testcase classname=" TC2693 - Applications: Deploy Subsquid" name=" TC2693 - Applications: Deploy Subsquid" time="130.799">
    </testcase>
  </testsuite>
  <testsuite name="taiga.test.ts" errors="0" failures="0" skipped="0" timestamp="2024-12-30T12:58:54" time="383.933" tests="1">
    <testcase classname=" TC2691 - Applications: Deploy Taiga" name=" TC2691 - Applications: Deploy Taiga" time="361.189">
    </testcase>
  </testsuite>
  <testsuite name="umbrel.test.ts" errors="0" failures="1" skipped="0" timestamp="2024-12-30T13:05:18" time="42.968" tests="1">
    <testcase classname=" TC2694 - Applications: Deploy Umbrel" name=" TC2694 - Applications: Deploy Umbrel" time="27.446">
      <failure>Error: expect(received).toHaveLength(expected)

Expected length: 1
Received length: 2
Received array:  [{&quot;contractId&quot;: 181363, &quot;contractType&quot;: {&quot;nodeContract&quot;: {&quot;deploymentData&quot;: &quot;{\&quot;version\&quot;:4,\&quot;type\&quot;:\&quot;network-light\&quot;,\&quot;name\&quot;:\&quot;fn8ewwteyn4qzpy\&quot;,\&quot;projectName\&quot;:\&quot;umbrel/umtok0jhe7s2\&quot;}&quot;, &quot;deploymentHash&quot;: &quot;1d9fc571b4347ca7c6bd46c56d18ea0d&quot;, &quot;nodeId&quot;: 259, &quot;publicIps&quot;: 0, &quot;publicIpsList&quot;: []}}, &quot;solutionProviderId&quot;: null, &quot;state&quot;: {&quot;created&quot;: null}, &quot;twinId&quot;: 800, &quot;version&quot;: 4}, {&quot;contractId&quot;: 181364, &quot;contractType&quot;: {&quot;nodeContract&quot;: {&quot;deploymentData&quot;: &quot;{\&quot;version\&quot;:4,\&quot;type\&quot;:\&quot;vm\&quot;,\&quot;name\&quot;:\&quot;umtok0jhe7s2\&quot;,\&quot;projectName\&quot;:\&quot;umbrel/umtok0jhe7s2\&quot;}&quot;, &quot;deploymentHash&quot;: &quot;4633f7fb4f53be898993974afba16490&quot;, &quot;nodeId&quot;: 259, &quot;publicIps&quot;: 0, &quot;publicIpsList&quot;: []}}, &quot;solutionProviderId&quot;: null, &quot;state&quot;: {&quot;created&quot;: null}, &quot;twinId&quot;: 800, &quot;version&quot;: 4}]
    at Object.&lt;anonymous&gt; (/home/kassem/tfgrid-sdk-ts/packages/grid_client/tests/modules/applications/umbrel.test.ts:117:33)</failure>
    </testcase>
  </testsuite>
  <testsuite name="wordpress.test.ts" errors="0" failures="0" skipped="0" timestamp="2024-12-30T13:06:01" time="77.062" tests="1">
    <testcase classname=" TC2700 - Applications: Deploy Wordpress" name=" TC2700 - Applications: Deploy Wordpress" time="54.179">
    </testcase>
  </testsuite>
  <testsuite name="nextcloud.test.ts" errors="0" failures="0" skipped="0" timestamp="2024-12-30T13:07:18" time="77.971" tests="1">
    <testcase classname=" TC2692 - Applications: Deploy Nextcloud" name=" TC2692 - Applications: Deploy Nextcloud" time="59.179">
    </testcase>
  </testsuite>
  <testsuite name="casperlabs.test.ts" errors="0" failures="0" skipped="0" timestamp="2024-12-30T13:08:36" time="72.013" tests="1">
    <testcase classname=" TC2683 - Applications: Deploy Casperlabs" name=" TC2683 - Applications: Deploy Casperlabs" time="53.727">
    </testcase>
  </testsuite>
  <testsuite name="peertube.test.ts" errors="0" failures="0" skipped="0" timestamp="2024-12-30T13:09:48" time="65.972" tests="1">
    <testcase classname=" TC2684 - Applications: Deploy Peertube" name=" TC2684 - Applications: Deploy Peertube" time="47.788">
    </testcase>
  </testsuite>
  <testsuite name="contracts.test.ts" errors="0" failures="0" skipped="0" timestamp="2024-12-30T13:10:54" time="42.107" tests="5">
    <testcase classname=" TC1269 - Contracts: Create Node Contract" name=" TC1269 - Contracts: Create Node Contract" time="2.265">
    </testcase>
    <testcase classname=" TC1270 - Contracts: Create Name Contract" name=" TC1270 - Contracts: Create Name Contract" time="5.942">
    </testcase>
    <testcase classname=" TC1271 - Contracts: Get Node Contract By Node ID &amp; Contract Hash" name=" TC1271 - Contracts: Get Node Contract By Node ID &amp; Contract Hash" time="6.201">
    </testcase>
    <testcase classname=" TC1272 - Contracts: Get Name Contract" name=" TC1272 - Contracts: Get Name Contract" time="5.865">
    </testcase>
    <testcase classname=" TC1273 - Contracts: Update Node Contract" name=" TC1273 - Contracts: Update Node Contract" time="11.934">
    </testcase>
  </testsuite>
  <testsuite name="algorand.test.ts" errors="0" failures="0" skipped="0" timestamp="2024-12-30T13:11:36" time="54.469" tests="1">
    <testcase classname=" TC2727 - Applications: Deploy Algorand" name=" TC2727 - Applications: Deploy Algorand" time="37.26">
    </testcase>
  </testsuite>
  <testsuite name="stellar.test.ts" errors="0" failures="0" skipped="0" timestamp="2024-12-30T13:12:31" time="39.027" tests="7">
    <testcase classname=" TC1254 - Stellar: Create Account" name=" TC1254 - Stellar: Create Account" time="5.223">
    </testcase>
    <testcase classname=" TC1255 - Stellar: Import Account" name=" TC1255 - Stellar: Import Account" time="5.733">
    </testcase>
    <testcase classname=" TC1256 - Stellar: Get Account" name=" TC1256 - Stellar: Get Account" time="4.195">
    </testcase>
    <testcase classname=" TC1257 - Stellar: Check if Account exists" name=" TC1257 - Stellar: Check if Account exists" time="5.018">
    </testcase>
    <testcase classname=" TC1258 - Stellar: List Accounts" name=" TC1258 - Stellar: List Accounts" time="4.87">
    </testcase>
    <testcase classname=" TC1259 - Stellar: Get Account assets" name=" TC1259 - Stellar: Get Account assets" time="5.782">
    </testcase>
    <testcase classname=" TC1260 - Stellar: Get Account assets by address" name=" TC1260 - Stellar: Get Account assets by address" time="4.445">
    </testcase>
  </testsuite>
  <testsuite name="kvstore.test.ts" errors="0" failures="0" skipped="0" timestamp="2024-12-30T13:13:10" time="14.441" tests="1">
    <testcase classname=" TC1238 - KVStore: Use TFChain KVStore" name=" TC1238 - KVStore: Use TFChain KVStore" time="10.733">
    </testcase>
  </testsuite>
  <testsuite name="algorand.test.ts" errors="0" failures="0" skipped="2" timestamp="2024-12-30T13:13:24" time="4.703" tests="7">
    <testcase classname=" TC1247 - Algorand: Create Account" name=" TC1247 - Algorand: Create Account" time="0.05">
    </testcase>
    <testcase classname=" TC1248 - Algorand: Import Account" name=" TC1248 - Algorand: Import Account" time="0.04">
    </testcase>
    <testcase classname=" TC1249 - Algorand: Get Account" name=" TC1249 - Algorand: Get Account" time="0.028">
    </testcase>
    <testcase classname=" TC1250 - Algorand: Check if Account exists" name=" TC1250 - Algorand: Check if Account exists" time="0.023">
    </testcase>
    <testcase classname=" TC1251 - Algorand: List Accounts" name=" TC1251 - Algorand: List Accounts" time="0.027">
    </testcase>
    <testcase classname=" TC1252 - Algorand: Get Account assets" name=" TC1252 - Algorand: Get Account assets" time="0">
      <skipped/>
    </testcase>
    <testcase classname=" TC1253 - Algorand: Get Account assets by address" name=" TC1253 - Algorand: Get Account assets by address" time="0">
      <skipped/>
    </testcase>
  </testsuite>
  <testsuite name="currency.test.ts" errors="0" failures="0" skipped="0" timestamp="2024-12-30T13:13:29" time="4.187" tests="18">
    <testcase classname="Testing TFT module tft module to be instance of TFTUSDConversionService" name="Testing TFT module tft module to be instance of TFTUSDConversionService" time="0">
    </testcase>
    <testcase classname="Testing TFT module should return value with 2 decimals." name="Testing TFT module should return value with 2 decimals." time="0">
    </testcase>
    <testcase classname="Testing TFT module should convert to the correct value based on tftPrice." name="Testing TFT module should convert to the correct value based on tftPrice." time="0.001">
    </testcase>
    <testcase classname="Testing TFT module convertTFTtoUSD function to throw if passed a negative value." name="Testing TFT module convertTFTtoUSD function to throw if passed a negative value." time="0.009">
    </testcase>
    <testcase classname="Testing TFT module convertUSDtoTFT function returns a valid value." name="Testing TFT module convertUSDtoTFT function returns a valid value." time="0.001">
    </testcase>
    <testcase classname="Testing TFT module convertUSDtoTFT function to throw if passed a negative value." name="Testing TFT module convertUSDtoTFT function to throw if passed a negative value." time="0.002">
    </testcase>
    <testcase classname="Testing TFT module dailyTFT function returns a valid value." name="Testing TFT module dailyTFT function returns a valid value." time="0.001">
    </testcase>
    <testcase classname="Testing TFT module dailyTFT function throws if passed anything other than a positive value." name="Testing TFT module dailyTFT function throws if passed anything other than a positive value." time="0.001">
    </testcase>
    <testcase classname="Testing TFT module monthlyTFT function returns a valid value." name="Testing TFT module monthlyTFT function returns a valid value." time="0.001">
    </testcase>
    <testcase classname="Testing TFT module monthlyTFT function throws if passed anything other than a positive value." name="Testing TFT module monthlyTFT function throws if passed anything other than a positive value." time="0.002">
    </testcase>
    <testcase classname="Testing TFT module yearlyTFT function returns a valid value." name="Testing TFT module yearlyTFT function returns a valid value." time="0.001">
    </testcase>
    <testcase classname="Testing TFT module yearlyTFT function throws if passed anything other than a positive value." name="Testing TFT module yearlyTFT function throws if passed anything other than a positive value." time="0.002">
    </testcase>
    <testcase classname="Testing TFT module dailyUSD function returns a valid value." name="Testing TFT module dailyUSD function returns a valid value." time="0">
    </testcase>
    <testcase classname="Testing TFT module dailyUSD function throws if passed anything other than a positive value." name="Testing TFT module dailyUSD function throws if passed anything other than a positive value." time="0.002">
    </testcase>
    <testcase classname="Testing TFT module monthlyUSD function returns a valid value." name="Testing TFT module monthlyUSD function returns a valid value." time="0.001">
    </testcase>
    <testcase classname="Testing TFT module monthlyUSD function throws if passed anything other than a positive value." name="Testing TFT module monthlyUSD function throws if passed anything other than a positive value." time="0.008">
    </testcase>
    <testcase classname="Testing TFT module yearlyUSD function returns a valid value." name="Testing TFT module yearlyUSD function returns a valid value." time="0.001">
    </testcase>
    <testcase classname="Testing TFT module yearlyUSD function throws if passed anything other than a positive value." name="Testing TFT module yearlyUSD function throws if passed anything other than a positive value." time="0.002">
    </testcase>
  </testsuite>
  <testsuite name="zmachine_light.test.ts" errors="0" failures="0" skipped="0" timestamp="2024-12-30T13:13:33" time="0.441" tests="11">
    <testcase classname="ZmachineLight Class Tests should create a valid ZmachineLight instance" name="ZmachineLight Class Tests should create a valid ZmachineLight instance" time="0.006">
    </testcase>
    <testcase classname="ZmachineLight Class Tests should correctly serialize and deserialize a ZmachineLight instance" name="ZmachineLight Class Tests should correctly serialize and deserialize a ZmachineLight instance" time="0.008">
    </testcase>
    <testcase classname="ZmachineLight Class Tests should correctly handle env vars" name="ZmachineLight Class Tests should correctly handle env vars" time="0.004">
    </testcase>
    <testcase classname="ZmachineLight Class Tests should correctly compute the challenge string" name="ZmachineLight Class Tests should correctly compute the challenge string" time="0.008">
    </testcase>
    <testcase classname="ZmachineLight Class Tests should correctly handle the gpu array" name="ZmachineLight Class Tests should correctly handle the gpu array" time="0.008">
    </testcase>
    <testcase classname="ZmachineLight Class Tests should fail validation for entering invalid flist" name="ZmachineLight Class Tests should fail validation for entering invalid flist" time="0.005">
    </testcase>
    <testcase classname="ZmachineLight Class Tests should fail validation for entering invalid entrypoint" name="ZmachineLight Class Tests should fail validation for entering invalid entrypoint" time="0.002">
    </testcase>
    <testcase classname="ZmachineLight Class Tests should fail validation for entering invalid size" name="ZmachineLight Class Tests should fail validation for entering invalid size" time="0.003">
    </testcase>
    <testcase classname="ZmachineLight Class Tests should throw error if network interfaces values are invalid" name="ZmachineLight Class Tests should throw error if network interfaces values are invalid" time="0.004">
    </testcase>
    <testcase classname="ZmachineLight Class Tests should throw an error if mount name is empty" name="ZmachineLight Class Tests should throw an error if mount name is empty" time="0.003">
    </testcase>
    <testcase classname="ZmachineLight Class Tests should fail if zmachineLight is parsed to an invalid object" name="ZmachineLight Class Tests should fail if zmachineLight is parsed to an invalid object" time="0.002">
    </testcase>
  </testsuite>
  <testsuite name="zmount.test.ts" errors="0" failures="0" skipped="0" timestamp="2024-12-30T13:13:33" time="0.367" tests="8">
    <testcase classname="Zmount Class Initialization should be initialized with default values" name="Zmount Class Initialization should be initialized with default values" time="0.001">
    </testcase>
    <testcase classname="Zmount Class size property validation should fail validation if size is set to a non-numeric value" name="Zmount Class size property validation should fail validation if size is set to a non-numeric value" time="0.001">
    </testcase>
    <testcase classname="Zmount Class size property validation should fail validation if size is null" name="Zmount Class size property validation should fail validation if size is null" time="0">
    </testcase>
    <testcase classname="Zmount Class size property validation should fail validation if size is undefined" name="Zmount Class size property validation should fail validation if size is undefined" time="0.001">
    </testcase>
    <testcase classname="Zmount Class size property validation should fail validation if size is less than the minimum" name="Zmount Class size property validation should fail validation if size is less than the minimum" time="0">
    </testcase>
    <testcase classname="Zmount Class size property validation should fail validation if size is greater than the maximum" name="Zmount Class size property validation should fail validation if size is greater than the maximum" time="0">
    </testcase>
    <testcase classname="Zmount Class size property validation should pass validation if size is a valid number within the range" name="Zmount Class size property validation should pass validation if size is a valid number within the range" time="0.001">
    </testcase>
    <testcase classname="Zmount Class challenge method should return the size as a string" name="Zmount Class challenge method should return the size as a string" time="0">
    </testcase>
  </testsuite>
  <testsuite name="zmachine.test.ts" errors="0" failures="0" skipped="0" timestamp="2024-12-30T13:13:34" time="0.6" tests="12">
    <testcase classname="Zmachine Class Tests should create a valid Zmachine instance" name="Zmachine Class Tests should create a valid Zmachine instance" time="0.006">
    </testcase>
    <testcase classname="Zmachine Class Tests should correctly serialize and deserialize a Zmachine instance" name="Zmachine Class Tests should correctly serialize and deserialize a Zmachine instance" time="0.012">
    </testcase>
    <testcase classname="Zmachine Class Tests should correctly handle env vars" name="Zmachine Class Tests should correctly handle env vars" time="0.007">
    </testcase>
    <testcase classname="Zmachine Class Tests should correctly compute the challenge string" name="Zmachine Class Tests should correctly compute the challenge string" time="0.008">
    </testcase>
    <testcase classname="Zmachine Class Tests should correctly handle the gpu array" name="Zmachine Class Tests should correctly handle the gpu array" time="0.005">
    </testcase>
    <testcase classname="Zmachine Class Tests should fail validation for entering invalid flist" name="Zmachine Class Tests should fail validation for entering invalid flist" time="0.002">
    </testcase>
    <testcase classname="Zmachine Class Tests should fail validation for entering invalid entrypoint" name="Zmachine Class Tests should fail validation for entering invalid entrypoint" time="0.002">
    </testcase>
    <testcase classname="Zmachine Class Tests should fail validation for entering invalid size" name="Zmachine Class Tests should fail validation for entering invalid size" time="0.006">
    </testcase>
    <testcase classname="Zmachine Class Tests should throw error if network public_ip is invalid" name="Zmachine Class Tests should throw error if network public_ip is invalid" time="0.002">
    </testcase>
    <testcase classname="Zmachine Class Tests should throw error if network interfaces values are invalid" name="Zmachine Class Tests should throw error if network interfaces values are invalid" time="0.002">
    </testcase>
    <testcase classname="Zmachine Class Tests should throw an error if mount name is empty" name="Zmachine Class Tests should throw an error if mount name is empty" time="0.003">
    </testcase>
    <testcase classname="Zmachine Class Tests should fail if zmachine is parsed to an invalid object" name="Zmachine Class Tests should fail if zmachine is parsed to an invalid object" time="0.004">
    </testcase>
  </testsuite>
  <testsuite name="network_light.test.ts" errors="0" failures="0" skipped="0" timestamp="2024-12-30T13:13:34" time="0.374" tests="7">
    <testcase classname="NetworkLight Class Tests should create a valid NetworkLight instance" name="NetworkLight Class Tests should create a valid NetworkLight instance" time="0.001">
    </testcase>
    <testcase classname="NetworkLight Class Tests should correctly serialize and deserialize a NetworkLight instance" name="NetworkLight Class Tests should correctly serialize and deserialize a NetworkLight instance" time="0.001">
    </testcase>
    <testcase classname="NetworkLight Class Tests should correctly compute the challenge string" name="NetworkLight Class Tests should correctly compute the challenge string" time="0">
    </testcase>
    <testcase classname="NetworkLight Class Tests should correctly handle missing peers" name="NetworkLight Class Tests should correctly handle missing peers" time="0">
    </testcase>
    <testcase classname="NetworkLight Class Tests should throw an error if subnet is empty" name="NetworkLight Class Tests should throw an error if subnet is empty" time="0">
    </testcase>
    <testcase classname="NetworkLight Class Tests should handle an empty mycelium object correctly" name="NetworkLight Class Tests should handle an empty mycelium object correctly" time="0.001">
    </testcase>
    <testcase classname="NetworkLight Class Tests should correctly handle peers being empty" name="NetworkLight Class Tests should correctly handle peers being empty" time="0">
    </testcase>
  </testsuite>
  <testsuite name="compute_capacity.test.ts" errors="0" failures="0" skipped="0" timestamp="2024-12-30T13:13:35" time="0.379" tests="6">
    <testcase classname="Compute Capacity module Compute Capacity instance is of type ComputeCapacity." name="Compute Capacity module Compute Capacity instance is of type ComputeCapacity." time="0">
    </testcase>
    <testcase classname="Compute Capacity module Min values for cpu &amp; memory." name="Compute Capacity module Min values for cpu &amp; memory." time="0.002">
    </testcase>
    <testcase classname="Compute Capacity module Max values for cpu &amp; memory." name="Compute Capacity module Max values for cpu &amp; memory." time="0">
    </testcase>
    <testcase classname="Compute Capacity module cpu &amp; memory doesn&apos;t accept decimal values." name="Compute Capacity module cpu &amp; memory doesn&apos;t accept decimal values." time="0.001">
    </testcase>
    <testcase classname="Compute Capacity module cpu &amp; memory empty values." name="Compute Capacity module cpu &amp; memory empty values." time="0">
    </testcase>
    <testcase classname="Compute Capacity module An error should be thrown if cpu &amp; memory negative values." name="Compute Capacity module An error should be thrown if cpu &amp; memory negative values." time="0">
    </testcase>
  </testsuite>
  <testsuite name="volume.test.ts" errors="0" failures="0" skipped="0" timestamp="2024-12-30T13:13:35" time="0.365" tests="3">
    <testcase classname="Test volume workload. volume should be type of Volume" name="Test volume workload. volume should be type of Volume" time="0">
    </testcase>
    <testcase classname="Test volume workload. should fail if passed invalid size" name="Test volume workload. should fail if passed invalid size" time="0.001">
    </testcase>
    <testcase classname="Test volume workload. should fail if volume was assigned to an invalid parsed obj" name="Test volume workload. should fail if volume was assigned to an invalid parsed obj" time="0">
    </testcase>
  </testsuite>
  <testsuite name="query_to_string.test.ts" errors="0" failures="0" skipped="0" timestamp="2024-12-30T13:13:36" time="0.123" tests="6">
    <testcase classname="Convert object to query string should return an empty string when given an empty object" name="Convert object to query string should return an empty string when given an empty object" time="0">
    </testcase>
    <testcase classname="Convert object to query string should correctly convert an object with string values to a query string" name="Convert object to query string should correctly convert an object with string values to a query string" time="0.001">
    </testcase>
    <testcase classname="Convert object to query string should correctly convert an object with number values to a query string" name="Convert object to query string should correctly convert an object with number values to a query string" time="0">
    </testcase>
    <testcase classname="Convert object to query string should correctly convert an object with mixed types of values to a query string" name="Convert object to query string should correctly convert an object with mixed types of values to a query string" time="0">
    </testcase>
    <testcase classname="Convert object to query string should filter out undefined values from the object" name="Convert object to query string should filter out undefined values from the object" time="0.001">
    </testcase>
    <testcase classname="Convert object to query string should filter out empty string values from the object" name="Convert object to query string should filter out empty string values from the object" time="0">
    </testcase>
  </testsuite>
  <testsuite name="root_fs.test.ts" errors="0" failures="0" skipped="0" timestamp="2024-12-30T13:13:36" time="0.024" tests="2">
    <testcase classname="Calculate the rootFS size based on the machine specs should return 2GB when the options are provided" name="Calculate the rootFS size based on the machine specs should return 2GB when the options are provided" time="0.001">
    </testcase>
    <testcase classname="Calculate the rootFS size based on the machine specs should return 0.48828125 when CPU cores and RAM are zero" name="Calculate the rootFS size based on the machine specs should return 0.48828125 when CPU cores and RAM are zero" time="0">
    </testcase>
  </testsuite>
</testsuites>

Those tests are already failing on development branch, so Let's open issues to fix those as they're not related to my pr

 FAIL  tests/modules/kubernetes.test.ts (488.544 s)
  ● TC1231 - Kubernetes: Deploy a Kubernetes Cluster

    Timed out while waiting for handshake

      at Timeout.<anonymous> (../../node_modules/ssh2/lib/client.js:1014:23)

  ● TC1232 - Kubernetes: Add Worker

    Timed out while waiting for handshake

      at Timeout.<anonymous> (../../node_modules/ssh2/lib/client.js:1014:23)

 FAIL  tests/modules/vm.test.ts (293.932 s)
  ● TC1228 - VM: Deploy a VM

    Couldn't get free Wireguard ports for node 259
         Failed to send request to twinId 9458 with command: zos.network.list_wg_ports, payload: 
         0 function is not found

      354 |                     if (err) {
      355 |                         this.responses.delete(requestID);
    > 356 |                         reject(new types_1.RMBError(${err.code} ${err.message}));
          |                                ^
      357 |                         break;
      358 |                     }
      359 |                 }

      at ../rmb_direct_client/dist/node/client.js:356:32

  ● TC2847 - VM: Deploy a VM With Mycelium

    connect ENETUNREACH 4e5:cf65:b008:38c0:ff0f:0:200:2:22 - Local (:::0)



  ● TC1229 - VM: Deploy a VM With a Disk

    Timed out while waiting for handshake

      at Timeout._onTimeout (../../node_modules/ssh2/lib/client.js:1014:23)

  ● TC1230 - VM: Deploy Multiple VMs on Different Nodes

    Timed out while waiting for handshake

      at Timeout._onTimeout (../../node_modules/ssh2/lib/client.js:1014:23)

 FAIL  tests/modules/zdb.test.ts (49.213 s)
  ● TC1236 - ZDB: Deploy ZDBs

    Error getting node 259
         Failed to send request to twinId 9458 with command: zos.statistics.get, payload: 
         Didn't get a response after 20 seconds

      367 |             if (envelope && envelope.expiration) {
      368 |                 this.responses.delete(requestID);
    > 369 |                 reject(new types_1.TimeoutError(Didn't get a response after ${envelope.expiration} seconds));
          |                        ^
      370 |             }
      371 |         });
      372 |     }

      at ../rmb_direct_client/dist/node/client.js:369:24

 FAIL  tests/modules/stellar.test.ts (41.701 s)


  ● Test suite failed to run

    TypeError: require(...) is not a function

      at Object.createBufferingLogger [as BufferingLogger] (../../node_modules/websocket/lib/utils.js:24:39)
      at new WebSocketConnection (../../node_modules/websocket/lib/WebSocketConnection.js:42:25)
      at WebSocketClient.Object.<anonymous>.WebSocketClient.succeedHandshake (../../node_modules/websocket/lib/WebSocketClient.js:343:22)
      at WebSocketClient.Object.<anonymous>.WebSocketClient.validateHandshake (../../node_modules/websocket/lib/WebSocketClient.js:332:10)
      at ClientRequest.handleRequestUpgrade (../../node_modules/websocket/lib/WebSocketClient.js:261:14)

 FAIL  tests/modules/qsfs.test.ts (205.414 s)
  ● TC1234 - QSFS: Deploy QSFS underneath a VM

    Failed to send request to twinId 6171 with command: zos.deployment.get, payload: {"contract_id":181408}
         0 deployment not found

      354 |                     if (err) {
      355 |                         this.responses.delete(requestID);
    > 356 |                         reject(new types_1.RMBError(${err.code} ${err.message}));
          |                                ^
      357 |                         break;
      358 |                     }
      359 |                 }

      at ../rmb_direct_client/dist/node/client.js:356:32

  ● TC1235 - QSFS: Deploy QSFS Underneath a Kubernetes Cluster

    Failed to deploy zdb with name wvw308qlztpkbj58 on node 11 due to: failed to create zdb namespace: failed to connect to 0-db: fb45d10b-*: dial unix /var/run/zdb_fb45d10b-*/zdb.sock: connect: connection refused.

      87 |     let state = false;
      88 |     if (workload.result.state === "error") {
    > 89 |       throw new GridClientErrors.Workloads.WorkloadDeployError(
         |             ^
      90 |         Failed to deploy ${workload.type} with name ${workload.name} on node ${nodeId} due to: ${workload.result.message}.,
      91 |       );
      92 |     } else if (workload.result.state === "ok") {

      at TwinDeploymentHandler.checkWorkload (src/high_level/twinDeploymentHandler.ts:89:13)
      at TwinDeploymentHandler.waitForDeployment (src/high_level/twinDeploymentHandler.ts:116:22)
          at async Promise.all (index 0)
      at TwinDeploymentHandler.handle (src/high_level/twinDeploymentHandler.ts:614:7)
      at QSFSZdbsModule.deploy (src/modules/qsfs_zdbs.ts:97:23)
      at QSFSZdbsModule.descriptor.value (src/modules/utils.ts:19:12)
      at Object.<anonymous> (tests/modules/qsfs.test.ts:512:19)

 FAIL  tests/modules/applications/presearch.test.ts (114.729 s)
  ● TC2728 - Applications: Deploy Presearch

    Timed out while waiting for handshake

      at Timeout._onTimeout (../../node_modules/ssh2/lib/client.js:1014:23)

 FAIL  tests/modules/applications/umbrel.test.ts (51.305 s)
  ● TC2694 - Applications: Deploy Umbrel

    Error getting node 151
         Failed to send request to twinId 5760 with command: zos.statistics.get, payload: 
         Didn't get a response after 20 seconds

      367 |             if (envelope && envelope.expiration) {
      368 |                 this.responses.delete(requestID);
    > 369 |                 reject(new types_1.TimeoutError(Didn't get a response after ${envelope.expiration} seconds));
          |                        ^
      370 |             }
      371 |         });
      372 |     }

      at ../rmb_direct_client/dist/node/client.js:369:24

 FAIL  tests/modules/capacity_planner.test.ts (16.504 s)
  ● TC1243 - Capacity Planner: Filter Nodes

    expect(received).toBeGreaterThanOrEqual(expected)

    Expected: >= 75161927680
    Received:    -18446735065488155000

      140 |     expect(res[node].total_resources["mru"] - res[node].used_resources["mru"]).toBeGreaterThanOrEqual(GBToBytes(mru));
      141 |     expect(res[node].total_resources["sru"] - res[node].used_resources["sru"]).toBeGreaterThanOrEqual(GBToBytes(sru));
    > 142 |     expect(res[node].total_resources["hru"] - res[node].used_resources["hru"]).toBeGreaterThanOrEqual(GBToBytes(hru));
          |                                                                                ^
      143 |     expect(res[node].farmId).toEqual(farmId);
      144 |   }
      145 | });

      at Object.<anonymous> (tests/modules/capacity_planner.test.ts:142:80)

 FAIL  tests/modules/gateways.test.ts (258.059 s)
  ● TC1237 - Gateways: Expose a VM Over Gateway

    Gateway is unreachable after multiple retries

      65 |     });
      66 |   } else {
    > 67 |     throw new Error("Gateway is unreachable after multiple retries");
         |           ^
      68 |   }
      69 | }
      70 |

      at testGateway (tests/modules/gateways.test.ts:67:11)
      at Object.<anonymous> (tests/modules/gateways.test.ts:233:3)

 FAIL  tests/modules/applications/algorand.test.ts (126.631 s)
  ● TC2727 - Applications: Deploy Algorand

    Timed out while waiting for handshake

      at Timeout._onTimeout (../../node_modules/ssh2/lib/client.js:1014:23)


Test Suites: 10 failed, 2 skipped, 19 passed, 29 of 31 total
Tests:       14 failed, 4 skipped, 97 passed, 115 total ```

@0oM4R
Copy link
Contributor

0oM4R commented Dec 31, 2024

https://github.com/threefoldtech/tfgrid-sdk-ts/runs/35015478469
I see the kubernates here is failing only on the zos4 pr can you please check ?

image

@0oM4R
Copy link
Contributor

0oM4R commented Jan 1, 2025

I seems mycelium is not stable; I can't complete the verification

packages/grid_client/src/high_level/base.ts Outdated Show resolved Hide resolved
packages/grid_client/src/high_level/machine.ts Outdated Show resolved Hide resolved
packages/grid_client/src/modules/machines.ts Show resolved Hide resolved
@maayarosama
Copy link
Contributor Author

https://github.com/threefoldtech/tfgrid-sdk-ts/runs/35015478469 I see the kubernates here is failing only on the zos4 pr can you please check ?

image

Those tests are alreadu failing on development branch

@0oM4R
Copy link
Contributor

0oM4R commented Jan 9, 2025

Please open an issue to enhance this
image

Copy link
Contributor

@0oM4R 0oM4R left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

thank you for the great work and the effort @maayarosama

some testing notes

  • all the zos4 nodes are dedicated so we have to rent them.
  • it list the nodes based on the features = mycelium, if no nodes zos4 available it will deploy as zmachine
  • node 259 is not stable
  • manual selection works fine if you select zoo4 node with ipv4 will show an error 

-
  • able to list all deployments the light and the normal 
 - able to delete the deployment contracts;
  • I wasn’t able to access the vmd via mycelium always, mycelium is not stable even on the normal vis
  • testing domain name is not possible 

  • main net have only 5 gateway nodes so I’m not able to test the filtering logic
  • some case related to network accessibility are not tested due to the instability of myceluim

@maayarosama
Copy link
Contributor Author

Please open an issue to enhance this image

Copy link
Contributor

@amiraabouhadid amiraabouhadid left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

scripts work, error in domain selection is gone

@amiraabouhadid
Copy link
Contributor

amiraabouhadid commented Jan 13, 2025

both 249 and 259 are shown as red but no invalid err msg, please open an issue for it
image
image

@amiraabouhadid
Copy link
Contributor

opened an issue for this enhancement #3806

@amiraabouhadid
Copy link
Contributor

wireguard field is removed
image

Copy link
Contributor

@amiraabouhadid amiraabouhadid left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

opened issue for an enhancement. Otherwise, lgtm, great work! :) <3

@maayarosama maayarosama merged commit fd63f33 into development Jan 13, 2025
10 checks passed
@maayarosama maayarosama deleted the development_zos4 branch January 13, 2025 09:38
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

Successfully merging this pull request may close these issues.

5 participants