Files
suaveplan/docs/old-network-planning/TIER_PARTITION_HANDLER_TEST_FIX_PLAN.md
2026-05-27 23:29:53 +01:00

3.8 KiB

Network Tier Partition Handler - Test Fix Plan

Issue Analysis

Based on examining the code in tier-partition-handler.ts and its test file tier-partition-handler.spec.ts, I've identified several potential issues that could be causing the failing tests:

  1. Promise Ordering Issue:

    • In the test "should successfully recover from partitions", on line 289, originalPromise is used before it's defined (it's defined on line 289 after being used).
    • This creates a reference error situation.
  2. Missing Implementation Method:

    • The tests mock a method called _mergePartitionNodes which doesn't appear to be implemented in the TierPartitionHandler class.
    • This is critical for the partition recovery functionality.
  3. Children & Siblings Iteration:

    • The implementation uses .values() on children and siblings collections, but the test might be expecting arrays.
    • There's a comment about "fixed the string conversion issue" which suggests previous problems.
  4. Connectivity Map Building:

    • The test mocks _buildConnectivityMap but depends on connectivity map for other operations.
    • This could lead to inconsistent behavior during tests.
  5. Partition Recovery Logic:

    • The order of Promise mocking in the recovery tests could be causing timing issues.

Fix Implementation Plan

1. Fix Promise Declaration Order

Reorder the Promise mock in the test to ensure originalPromise is defined before it's used:

// Store original Promise constructor
const originalPromise = global.Promise;

// Mock the Promise timeout to resolve immediately
jest.spyOn(global, 'Promise').mockImplementation((executor) => {
  return new originalPromise((resolve, reject) => {
    executor(resolve, reject);
  });
});

2. Add Missing _mergePartitionNodes Method

Implement the missing method in TierPartitionHandler:

/**
 * Merge nodes from one partition into another
 * @param primaryPartitionId The ID of the primary partition
 * @param secondaryNodeIds Array of node IDs from the secondary partition
 */
private _mergePartitionNodes(primaryPartitionId: string, secondaryNodeIds: string[]): void {
  // Implement node merging logic here
  // This method should handle any state reconciliation needed
  // when merging partitions
}

3. Ensure Connectivity Map Consistency

Review and update the _buildConnectivityMap implementation to ensure it handles node relationships correctly:

// For example, ensure consistent access to children:
for (const child of node.children) {
  const childId = typeof child === 'string' ? child : child.id;
  connections.add(childId);
  connectivityMap.get(childId)?.add(node.id);
}

4. Fix Mocking Sequence in Tests

Improve the test mocking approach by:

  • Using beforeEach to set up common mocks
  • Ensuring mocks are declared before they're needed
  • Properly restoring mocks in afterEach

5. Add Comprehensive Error Handling

Enhance error handling in the partition detection and recovery methods to make failures more diagnosable.

Implementation Sequence

  1. Fix the test code first, specifically the Promise declaration order
  2. Implement any missing methods in the TierPartitionHandler
  3. Address connectivity map and collection iteration issues
  4. Add better error handling and logging
  5. Run tests incrementally to verify each fix

This plan should systematically address the issues causing the test failures while maintaining the existing functionality of the network tier partition handler.

flowchart TD
    A[Fix Promise Declaration Order] --> B[Implement _mergePartitionNodes Method]
    B --> C[Fix Connectivity Map Handling]
    C --> D[Improve Test Mocking Sequence]
    D --> E[Add Error Handling]
    E --> F[Run Tests Incrementally]
    F --> G[Final Verification]