Skip to content

[Duplicate Code] host-iptables-setup.test.ts contains repeated mock sequence for iptables chain setup #3129

@github-actions

Description

@github-actions

Duplicate Code Opportunity

Summary

  • Pattern: Repeated 28-line mockedExeca mock sequence for the iptables chain creation flow (getNetworkBridgeName + permission check + chain existence check + subsequent calls)
  • Locations: src/host-iptables-setup.test.ts at lines 31-59, 109-123, 164-178, 205-232, 254-281, 378-392, 444-455 (and more)
  • Impact: ~6 occurrences of a 15-28 line setup sequence; security-critical path (iptables firewall rules)

Evidence

The following nearly-identical mock setup block appears in 6+ test cases:

// First occurrence (lines 31-59):
mockedExeca
  // Mock getNetworkBridgeName
  .mockResolvedValueOnce(execaResult({
    stdout: 'fw-bridge',
    stderr: '',
    exitCode: 0,
  }))
  // Mock iptables -L DOCKER-USER (permission check)
  .mockResolvedValueOnce(execaResult({
    stdout: '',
    stderr: '',
    exitCode: 0,
  }))
  // Mock chain existence check (doesn't exist)
  .mockResolvedValueOnce(execaResult({
    exitCode: 1,
  }));

// Mock all subsequent iptables calls
mockedExeca.mockResolvedValue(execaResult({
  stdout: 'Chain DOCKER-USER\nChain FW_WRAPPER',
  stderr: '',
  exitCode: 0,
}));

jscpd found 6 clones of 15-28 lines each within this single file, including:

  • lines 205-232 <-> lines 31-191 (28 lines)
  • lines 254-281 <-> lines 31-191 (28 lines)
  • lines 109-123 <-> lines 31-45 (15 lines)
  • lines 164-178 <-> lines 31-45 (15 lines)
  • lines 378-392 <-> lines 31-45 (15 lines)

Suggested Refactoring

Extract a setupDefaultIptablesMocks(mockedExeca, options?) helper in the test file (or a shared src/test-helpers/iptables-mock-helpers.test-utils.ts) that:

  1. Accepts optional overrides for chain existence (chainExists: boolean) and bridge name
  2. Configures the standard 3-step mock sequence plus default catch-all
  3. Returns mockedExeca for chaining
function setupDefaultIptablesMocks(
  mocked: jest.MockedFunction<typeof execa>,
  opts: { chainExists?: boolean; bridgeName?: string } = {}
) {
  mocked
    .mockResolvedValueOnce(execaResult({ stdout: opts.bridgeName ?? 'fw-bridge', exitCode: 0 }))
    .mockResolvedValueOnce(execaResult({ stdout: '', exitCode: 0 }))
    .mockResolvedValueOnce(execaResult({ exitCode: opts.chainExists ? 0 : 1 }));
  mocked.mockResolvedValue(execaResult({ stdout: 'Chain FW_WRAPPER', exitCode: 0 }));
}

Affected Files

  • src/host-iptables-setup.test.ts — 6+ duplicate sequences scattered throughout the file

Effort Estimate

Low


Detected by Duplicate Code Detector workflow. Run date: 2026-05-14

Generated by Duplicate Code Detector · ● 10.7M ·

  • expires on Jun 13, 2026, 5:09 AM UTC

Metadata

Metadata

Assignees

Type

No type
No fields configured for issues without a type.

Projects

No projects

Milestone

No milestone

Relationships

None yet

Development

No branches or pull requests

Issue actions