...

Source file src/github.com/opencontainers/runc/libcontainer/cgroups/fs/stats_util_test.go

Documentation: github.com/opencontainers/runc/libcontainer/cgroups/fs

     1  package fs
     2  
     3  import (
     4  	"errors"
     5  	"fmt"
     6  	"reflect"
     7  	"testing"
     8  
     9  	"github.com/opencontainers/runc/libcontainer/cgroups"
    10  )
    11  
    12  func blkioStatEntryEquals(expected, actual []cgroups.BlkioStatEntry) error {
    13  	if len(expected) != len(actual) {
    14  		return errors.New("blkioStatEntries length do not match")
    15  	}
    16  	for i, expValue := range expected {
    17  		actValue := actual[i]
    18  		if expValue != actValue {
    19  			return fmt.Errorf("expected: %v, actual: %v", expValue, actValue)
    20  		}
    21  	}
    22  	return nil
    23  }
    24  
    25  func expectBlkioStatsEquals(t *testing.T, expected, actual cgroups.BlkioStats) {
    26  	t.Helper()
    27  	if err := blkioStatEntryEquals(expected.IoServiceBytesRecursive, actual.IoServiceBytesRecursive); err != nil {
    28  		t.Errorf("blkio IoServiceBytesRecursive do not match: %s", err)
    29  	}
    30  
    31  	if err := blkioStatEntryEquals(expected.IoServicedRecursive, actual.IoServicedRecursive); err != nil {
    32  		t.Errorf("blkio IoServicedRecursive do not match: %s", err)
    33  	}
    34  
    35  	if err := blkioStatEntryEquals(expected.IoQueuedRecursive, actual.IoQueuedRecursive); err != nil {
    36  		t.Errorf("blkio IoQueuedRecursive do not match: %s", err)
    37  	}
    38  
    39  	if err := blkioStatEntryEquals(expected.SectorsRecursive, actual.SectorsRecursive); err != nil {
    40  		t.Errorf("blkio SectorsRecursive do not match: %s", err)
    41  	}
    42  
    43  	if err := blkioStatEntryEquals(expected.IoServiceTimeRecursive, actual.IoServiceTimeRecursive); err != nil {
    44  		t.Errorf("blkio IoServiceTimeRecursive do not match: %s", err)
    45  	}
    46  
    47  	if err := blkioStatEntryEquals(expected.IoWaitTimeRecursive, actual.IoWaitTimeRecursive); err != nil {
    48  		t.Errorf("blkio IoWaitTimeRecursive do not match: %s", err)
    49  	}
    50  
    51  	if err := blkioStatEntryEquals(expected.IoMergedRecursive, actual.IoMergedRecursive); err != nil {
    52  		t.Errorf("blkio IoMergedRecursive do not match: expected: %v, actual: %v", expected.IoMergedRecursive, actual.IoMergedRecursive)
    53  	}
    54  
    55  	if err := blkioStatEntryEquals(expected.IoTimeRecursive, actual.IoTimeRecursive); err != nil {
    56  		t.Errorf("blkio IoTimeRecursive do not match: %s", err)
    57  	}
    58  }
    59  
    60  func expectThrottlingDataEquals(t *testing.T, expected, actual cgroups.ThrottlingData) {
    61  	t.Helper()
    62  	if expected != actual {
    63  		t.Errorf("Expected throttling data: %v, actual: %v", expected, actual)
    64  	}
    65  }
    66  
    67  func expectHugetlbStatEquals(t *testing.T, expected, actual cgroups.HugetlbStats) {
    68  	t.Helper()
    69  	if expected != actual {
    70  		t.Errorf("Expected hugetlb stats: %v, actual: %v", expected, actual)
    71  	}
    72  }
    73  
    74  func expectMemoryStatEquals(t *testing.T, expected, actual cgroups.MemoryStats) {
    75  	t.Helper()
    76  	expectMemoryDataEquals(t, expected.Usage, actual.Usage)
    77  	expectMemoryDataEquals(t, expected.SwapUsage, actual.SwapUsage)
    78  	expectMemoryDataEquals(t, expected.KernelUsage, actual.KernelUsage)
    79  	expectPageUsageByNUMAEquals(t, expected.PageUsageByNUMA, actual.PageUsageByNUMA)
    80  
    81  	if expected.UseHierarchy != actual.UseHierarchy {
    82  		t.Errorf("Expected memory use hierarchy: %v, actual: %v", expected.UseHierarchy, actual.UseHierarchy)
    83  	}
    84  
    85  	for key, expValue := range expected.Stats {
    86  		actValue, ok := actual.Stats[key]
    87  		if !ok {
    88  			t.Errorf("Expected memory stat key %s not found", key)
    89  		}
    90  		if expValue != actValue {
    91  			t.Errorf("Expected memory stat value: %d, actual: %d", expValue, actValue)
    92  		}
    93  	}
    94  }
    95  
    96  func expectMemoryDataEquals(t *testing.T, expected, actual cgroups.MemoryData) {
    97  	t.Helper()
    98  	if expected.Usage != actual.Usage {
    99  		t.Errorf("Expected memory usage: %d, actual: %d", expected.Usage, actual.Usage)
   100  	}
   101  	if expected.MaxUsage != actual.MaxUsage {
   102  		t.Errorf("Expected memory max usage: %d, actual: %d", expected.MaxUsage, actual.MaxUsage)
   103  	}
   104  	if expected.Failcnt != actual.Failcnt {
   105  		t.Errorf("Expected memory failcnt %d, actual: %d", expected.Failcnt, actual.Failcnt)
   106  	}
   107  	if expected.Limit != actual.Limit {
   108  		t.Errorf("Expected memory limit: %d, actual: %d", expected.Limit, actual.Limit)
   109  	}
   110  }
   111  
   112  func expectPageUsageByNUMAEquals(t *testing.T, expected, actual cgroups.PageUsageByNUMA) {
   113  	t.Helper()
   114  	if !reflect.DeepEqual(expected.Total, actual.Total) {
   115  		t.Errorf("Expected total page usage by NUMA: %#v, actual: %#v", expected.Total, actual.Total)
   116  	}
   117  	if !reflect.DeepEqual(expected.File, actual.File) {
   118  		t.Errorf("Expected file page usage by NUMA: %#v, actual: %#v", expected.File, actual.File)
   119  	}
   120  	if !reflect.DeepEqual(expected.Anon, actual.Anon) {
   121  		t.Errorf("Expected anon page usage by NUMA: %#v, actual: %#v", expected.Anon, actual.Anon)
   122  	}
   123  	if !reflect.DeepEqual(expected.Unevictable, actual.Unevictable) {
   124  		t.Errorf("Expected unevictable page usage by NUMA: %#v, actual: %#v", expected.Unevictable, actual.Unevictable)
   125  	}
   126  	if !reflect.DeepEqual(expected.Hierarchical.Total, actual.Hierarchical.Total) {
   127  		t.Errorf("Expected hierarchical total page usage by NUMA: %#v, actual: %#v", expected.Hierarchical.Total, actual.Hierarchical.Total)
   128  	}
   129  	if !reflect.DeepEqual(expected.Hierarchical.File, actual.Hierarchical.File) {
   130  		t.Errorf("Expected hierarchical file page usage by NUMA: %#v, actual: %#v", expected.Hierarchical.File, actual.Hierarchical.File)
   131  	}
   132  	if !reflect.DeepEqual(expected.Hierarchical.Anon, actual.Hierarchical.Anon) {
   133  		t.Errorf("Expected hierarchical anon page usage by NUMA: %#v, actual: %#v", expected.Hierarchical.Anon, actual.Hierarchical.Anon)
   134  	}
   135  	if !reflect.DeepEqual(expected.Hierarchical.Unevictable, actual.Hierarchical.Unevictable) {
   136  		t.Errorf("Expected hierarchical total page usage by NUMA: %#v, actual: %#v", expected.Hierarchical.Unevictable, actual.Hierarchical.Unevictable)
   137  	}
   138  }
   139  

View as plain text