Skip to content

Commit a2182e1

Browse files
chore: add tests
1 parent f1dc9f7 commit a2182e1

File tree

2 files changed

+117
-2
lines changed

2 files changed

+117
-2
lines changed

agent/proto/resourcesmonitor/fetcher.go

Lines changed: 9 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -6,18 +6,25 @@ import (
66
"github.com/coder/coder/v2/cli/clistat"
77
)
88

9+
type Statter interface {
10+
IsContainerized() (bool, error)
11+
ContainerMemory(p clistat.Prefix) (*clistat.Result, error)
12+
HostMemory(p clistat.Prefix) (*clistat.Result, error)
13+
Disk(p clistat.Prefix, path string) (*clistat.Result, error)
14+
}
15+
916
type Fetcher interface {
1017
FetchMemory() (total int64, used int64, err error)
1118
FetchVolume(volume string) (total int64, used int64, err error)
1219
}
1320

1421
type fetcher struct {
15-
*clistat.Statter
22+
Statter
1623
isContainerized bool
1724
}
1825

1926
//nolint:revive
20-
func NewFetcher(f *clistat.Statter) (*fetcher, error) {
27+
func NewFetcher(f Statter) (*fetcher, error) {
2128
isContainerized, err := f.IsContainerized()
2229
if err != nil {
2330
return nil, xerrors.Errorf("check is containerized: %w", err)
Lines changed: 108 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,108 @@
1+
package resourcesmonitor_test
2+
3+
import (
4+
"errors"
5+
"testing"
6+
7+
"github.com/coder/coder/v2/agent/proto/resourcesmonitor"
8+
"github.com/coder/coder/v2/cli/clistat"
9+
"github.com/coder/coder/v2/coderd/util/ptr"
10+
"github.com/stretchr/testify/require"
11+
)
12+
13+
type mockStatter struct {
14+
isContainerized bool
15+
containerMemory clistat.Result
16+
hostMemory clistat.Result
17+
disk map[string]clistat.Result
18+
}
19+
20+
func (s *mockStatter) IsContainerized() (bool, error) {
21+
return s.isContainerized, nil
22+
}
23+
24+
func (s *mockStatter) ContainerMemory(_ clistat.Prefix) (*clistat.Result, error) {
25+
return &s.containerMemory, nil
26+
}
27+
28+
func (s *mockStatter) HostMemory(_ clistat.Prefix) (*clistat.Result, error) {
29+
return &s.hostMemory, nil
30+
}
31+
32+
func (s *mockStatter) Disk(_ clistat.Prefix, path string) (*clistat.Result, error) {
33+
disk, ok := s.disk[path]
34+
if !ok {
35+
return nil, errors.New("path not found")
36+
}
37+
return &disk, nil
38+
}
39+
40+
func TestFetchMemory(t *testing.T) {
41+
t.Parallel()
42+
43+
t.Run("IsContainerized", func(t *testing.T) {
44+
t.Parallel()
45+
46+
t.Run("WithMemoryLimit", func(t *testing.T) {
47+
t.Parallel()
48+
49+
fetcher, err := resourcesmonitor.NewFetcher(&mockStatter{
50+
isContainerized: true,
51+
containerMemory: clistat.Result{
52+
Used: 10.0,
53+
Total: ptr.Ref(20.0),
54+
},
55+
hostMemory: clistat.Result{
56+
Used: 20.0,
57+
Total: ptr.Ref(30.0),
58+
},
59+
})
60+
require.NoError(t, err)
61+
62+
total, used, err := fetcher.FetchMemory()
63+
require.NoError(t, err)
64+
require.Equal(t, int64(10), used)
65+
require.Equal(t, int64(20), total)
66+
})
67+
68+
t.Run("WithoutMemoryLimit", func(t *testing.T) {
69+
t.Parallel()
70+
71+
fetcher, err := resourcesmonitor.NewFetcher(&mockStatter{
72+
isContainerized: true,
73+
containerMemory: clistat.Result{
74+
Used: 10.0,
75+
Total: nil,
76+
},
77+
hostMemory: clistat.Result{
78+
Used: 20.0,
79+
Total: ptr.Ref(30.0),
80+
},
81+
})
82+
require.NoError(t, err)
83+
84+
total, used, err := fetcher.FetchMemory()
85+
require.NoError(t, err)
86+
require.Equal(t, int64(10), used)
87+
require.Equal(t, int64(30), total)
88+
})
89+
})
90+
91+
t.Run("IsHost", func(t *testing.T) {
92+
t.Parallel()
93+
94+
fetcher, err := resourcesmonitor.NewFetcher(&mockStatter{
95+
isContainerized: false,
96+
hostMemory: clistat.Result{
97+
Used: 20.0,
98+
Total: ptr.Ref(30.0),
99+
},
100+
})
101+
require.NoError(t, err)
102+
103+
total, used, err := fetcher.FetchMemory()
104+
require.NoError(t, err)
105+
require.Equal(t, int64(20), used)
106+
require.Equal(t, int64(30), total)
107+
})
108+
}

0 commit comments

Comments
 (0)