github.com/elastic/gosigar@v0.14.3/cgroup/reader_test.go (about)

     1  package cgroup
     2  
     3  import (
     4  	"encoding/json"
     5  	"testing"
     6  
     7  	"github.com/stretchr/testify/assert"
     8  	"github.com/stretchr/testify/require"
     9  )
    10  
    11  const (
    12  	path = "/docker/b29faf21b7eff959f64b4192c34d5d67a707fe8561e9eaa608cb27693fba4242"
    13  	id   = "b29faf21b7eff959f64b4192c34d5d67a707fe8561e9eaa608cb27693fba4242"
    14  )
    15  
    16  func TestReaderGetStats(t *testing.T) {
    17  	reader, err := NewReader("testdata/docker", true)
    18  	if err != nil {
    19  		t.Fatal(err)
    20  	}
    21  
    22  	stats, err := reader.GetStatsForProcess(985)
    23  	if err != nil {
    24  		t.Fatal(err)
    25  	}
    26  	if stats == nil {
    27  		t.Fatal("no cgroup stats found")
    28  	}
    29  
    30  	assert.Equal(t, id, stats.ID)
    31  	assert.Equal(t, id, stats.BlockIO.ID)
    32  	assert.Equal(t, id, stats.CPU.ID)
    33  	assert.Equal(t, id, stats.CPUAccounting.ID)
    34  	assert.Equal(t, id, stats.Memory.ID)
    35  
    36  	assert.Equal(t, path, stats.Path)
    37  	assert.Equal(t, path, stats.BlockIO.Path)
    38  	assert.Equal(t, path, stats.CPU.Path)
    39  	assert.Equal(t, path, stats.CPUAccounting.Path)
    40  	assert.Equal(t, path, stats.Memory.Path)
    41  
    42  	json, err := json.MarshalIndent(stats, "", "  ")
    43  	if err != nil {
    44  		t.Fatal(err)
    45  	}
    46  
    47  	t.Log(string(json))
    48  }
    49  
    50  func TestReaderGetStatsHierarchyOverride(t *testing.T) {
    51  	// In testdata/docker, process 1's cgroup paths have
    52  	// no corresponding paths under /sys/fs/cgroup/<subsystem>.
    53  	//
    54  	// Setting CgroupsHierarchyOverride means that we use
    55  	// the root cgroup path instead. This is intended to test
    56  	// the scenario where we're reading cgroup metrics from
    57  	// within a Docker container.
    58  
    59  	reader, err := NewReaderOptions(ReaderOptions{
    60  		RootfsMountpoint:         "testdata/docker",
    61  		IgnoreRootCgroups:        true,
    62  		CgroupsHierarchyOverride: "/",
    63  	})
    64  	if err != nil {
    65  		t.Fatal(err)
    66  	}
    67  
    68  	stats, err := reader.GetStatsForProcess(1)
    69  	if err != nil {
    70  		t.Fatal(err)
    71  	}
    72  	if stats == nil {
    73  		t.Fatal("no cgroup stats found")
    74  	}
    75  
    76  	require.NotNil(t, stats.CPU)
    77  	assert.NotZero(t, stats.CPU.CFS.Shares)
    78  }