Skip to content

test: Add unit tests for NUMA distance relationship creation #162

@jra3

Description

@jra3

Summary

The createNUMADistanceRelationship function has 0% test coverage despite being critical for NUMA topology modeling and performance optimization.

Background

NUMA distance relationships are essential for:

  • Performance-aware workload scheduling
  • Memory locality optimization
  • Multi-socket server topology understanding
  • Cloud instance NUMA configuration validation

Missing Test Coverage

Function with 0% Coverage:

  • createNUMADistanceRelationship - 0% coverage (complete gap)

NUMA Distance Relationship Logic

The function creates relationships between NUMA nodes with distance metrics:

func (b *Builder) createNUMADistanceRelationship(
    fromNode, toNode *resourcev1.ResourceRef, 
    fromNodeID, toNodeID, distance int32
) error

Required Test Scenarios

1. Basic Distance Relationship Creation

func TestCreateNUMADistanceRelationship_Basic(t *testing.T) {
    // Test creating distance relationship between two NUMA nodes
    // Test bidirectional relationship creation
    // Test distance value preservation
}

2. NUMA Distance Values

func TestCreateNUMADistanceRelationship_DistanceValues(t *testing.T) {
    tests := []struct {
        name      string
        distance  int32
        expectErr bool
    }{
        {"local_node", 10, false},      // Same node (typical local distance)
        {"remote_node", 20, false},     // Remote node (typical remote distance)
        {"far_node", 40, false},        // Far node (multi-hop)
        {"zero_distance", 0, false},    // Edge case: zero distance
        {"high_distance", 255, false},  // Edge case: maximum distance
    }
}

3. Resource Reference Validation

func TestCreateNUMADistanceRelationship_Validation(t *testing.T) {
    // Test nil fromNode reference
    // Test nil toNode reference
    // Test invalid node IDs
    // Test self-referential relationships
}

4. Predicate Creation

func TestCreateNUMADistanceRelationship_Predicate(t *testing.T) {
    // Test NumaDistancePredicate creation
    // Test predicate marshaling to protobuf
    // Test predicate field population
}

5. Store Integration

func TestCreateNUMADistanceRelationship_Store(t *testing.T) {
    // Test successful relationship storage
    // Test store failure handling
    // Test duplicate relationship handling
}

6. Real NUMA Topology Scenarios

func TestCreateNUMADistanceRelationship_RealTopologies(t *testing.T) {
    // Single-socket system (node 0 only)
    // Dual-socket system (nodes 0,1 with typical distances)
    // Quad-socket system (nodes 0,1,2,3 with distance matrix)
    // AMD EPYC systems (different distance patterns)
    // Intel Xeon systems (different distance patterns)
}

NUMA Distance Matrix Examples

Typical Dual-Socket Server:

Node  0    1
0     10   20
1     20   10

Typical Quad-Socket Server:

Node  0    1    2    3
0     10   20   20   40
1     20   10   40   20
2     20   40   10   20
3     40   20   20   10

Implementation Plan

Phase 1: Basic Functionality

  • Test basic relationship creation
  • Test predicate marshaling
  • Test store integration

Phase 2: Validation & Error Handling

  • Test input validation
  • Test error scenarios
  • Test edge cases (zero/max distances)

Phase 3: Real-World Scenarios

  • Test common NUMA topologies
  • Test different server architectures
  • Validate distance matrix patterns

Success Criteria

  • Achieve 100% coverage for createNUMADistanceRelationship
  • Test all NUMA distance scenarios
  • Validate proper predicate creation
  • Test error handling and edge cases
  • Cover real-world NUMA topologies

Priority

MEDIUM - Critical for NUMA-aware performance but affects specific server configurations.

Related

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions