@celilo/e2e 0.17.0 → 0.17.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@celilo/e2e",
3
- "version": "0.17.0",
3
+ "version": "0.17.1",
4
4
  "description": "E2E test infrastructure for Celilo-deployed applications. Provides a simulated internet with DNS hierarchy, ACME server, firewalls, and target machines in Docker.",
5
5
  "type": "module",
6
6
  "main": "./src/index.ts",
@@ -37,7 +37,7 @@
37
37
  "README.md"
38
38
  ],
39
39
  "dependencies": {
40
- "@celilo/capabilities": "^2.1.0",
40
+ "@celilo/capabilities": "^2.4.0",
41
41
  "@celilo/cli-display": "^0.2.0",
42
42
  "@celilo/event-bus": "^0.6.0",
43
43
  "@celilo/terraform-fake": "^0.3.1",
@@ -8,7 +8,7 @@
8
8
  "start": "bun run src/index.ts",
9
9
  "dev": "bun --watch src/index.ts",
10
10
  "build:binary": "bun build --compile --target=bun-linux-x64 --outfile=dist/celilo-registry-server src/index.ts",
11
- "test": "bun test"
11
+ "test": "bun test --timeout 30000"
12
12
  },
13
13
  "devDependencies": {
14
14
  "bun-types": "latest",
@@ -98,7 +98,9 @@ export function stageAptRepo(repoRoot: string, pkgDir: string): boolean {
98
98
 
99
99
  const debs = readdirSync(distDir).filter((f) => f.endsWith('.deb') && f.includes(version));
100
100
  for (const deb of debs) {
101
- cpSync(join(distDir, deb), join(pool, deb));
101
+ // `force` explicit: a rebuilt .deb at the same version must replace the
102
+ // one already pooled, or build-infra serves stale bytes.
103
+ cpSync(join(distDir, deb), join(pool, deb), { force: true });
102
104
  }
103
105
 
104
106
  console.log(
@@ -48,7 +48,6 @@ export function parseModuleHost(statusOutput: string): ModuleHost | null {
48
48
  // both, and a raw match silently finds nothing.
49
49
  const lines = statusOutput
50
50
  .split('\n')
51
- // biome-ignore lint/suspicious/noControlCharactersInRegex: stripping ANSI is the point
52
51
  .map((line) => line.replace(/\x1b\[[0-9;]*m/g, '').replace(/^[\s│|]+/, ''));
53
52
 
54
53
  for (const line of lines) {
@@ -102,7 +102,21 @@ export function forwardedPorts(listing: string): string[] {
102
102
  return [...new Set(ports)].sort();
103
103
  }
104
104
 
105
- /** The DHCP pool's advertised DNS servers, read back off the device. */
105
+ /**
106
+ * The DHCP pool's advertised DNS servers, read back off the device.
107
+ *
108
+ * Queries the pool INSTANCE (`…Pool.1.`), not the collection (`…Pool.`). The
109
+ * simulator answers the collection form with `{"Objects":[]}` — no error, just
110
+ * an empty list — so the collection form reads as "the router advertises no DNS
111
+ * servers" whatever is actually configured. Both `greenwave` and `axon` write
112
+ * through `Device.DHCPv4.Server.Pool.1.`
113
+ * (`modules/greenwave/scripts/isp-router-functions.ts:153`), so this reads back
114
+ * exactly where the module wrote.
115
+ *
116
+ * Nothing called this until `e2e/tests/provider-arrival-backfill.test.ts`, which
117
+ * is how the mismatch survived: against the collection form an assertion fails
118
+ * identically whether the router was configured or not.
119
+ */
106
120
  export async function routerDhcpDnsServers(
107
121
  net: NetworkHandle,
108
122
  device: RouterDevice,
@@ -115,7 +129,7 @@ export async function routerDhcpDnsServers(
115
129
  );
116
130
  const listed = await net.exec(
117
131
  'fw-isp',
118
- `curl -sk 'https://${greenwaveRouterIp()}/cgi/cgi_get?Object=Device.DHCPv4.Server.Pool.' -b /tmp/dhcp-cookies`,
132
+ `curl -sk 'https://${greenwaveRouterIp()}/cgi/cgi_get?Object=Device.DHCPv4.Server.Pool.1.' -b /tmp/dhcp-cookies`,
119
133
  );
120
134
  return listed.stdout;
121
135
  }