-
Notifications
You must be signed in to change notification settings - Fork 4
/
clash_exporter_test.go
119 lines (107 loc) · 2.7 KB
/
clash_exporter_test.go
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
package main
import (
"fmt"
"github.com/prometheus/client_golang/prometheus"
"github.com/prometheus/client_golang/prometheus/testutil"
"os"
"path"
"testing"
"time"
)
func expectMetrics(t *testing.T, c prometheus.Collector, fixture string) {
exp, err := os.Open(path.Join("test", fixture))
if err != nil {
t.Fatalf("Error opening fixture file %q: %v", fixture, err)
}
if err := testutil.CollectAndCompare(c, exp); err != nil {
t.Fatal("Unexpected metrics returned:", err)
}
}
type testClient struct {
}
func (c *testClient) GetVersion() (*Version, error) {
return &Version{
Premium: true,
Version: "2021.04.08",
}, nil
}
func (c *testClient) makeProxies(proxyNameTemplate string) []*Proxy {
proxies := make([]*Proxy, 0, len(AllProxyTypes))
now := time.Now()
for i, t := range AllProxyTypes {
n := fmt.Sprintf(proxyNameTemplate, t)
proxies = append(proxies, &Proxy{
Type: t,
Name: n,
History: []*ProxyDelay{
{
Time: now,
Delay: uint16(i),
},
},
})
}
return proxies
}
func (c *testClient) GetProxies() (map[string]*Proxy, error) {
proxies := make(map[string]*Proxy, len(AllProxyTypes))
for _, p := range c.makeProxies("proxy_%s") {
proxies[p.Name] = p
}
return proxies, nil
}
func (c *testClient) GetProxyDelay(proxyName string, testUrl string, timeout time.Duration) (uint16, error) {
return 666, nil
}
func (c *testClient) GetProvidersProxies() (map[string]*Provider, error) {
return map[string]*Provider{
"provider_1": {
Type: "Proxy",
Name: "provider_1",
VehicleType: VehicleTypeHTTP,
UpdatedAt: time.Time{},
Proxies: c.makeProxies("provider_1_proxy_%s"),
},
"provider_2": {
Type: "Proxy",
Name: "provider_2",
VehicleType: VehicleTypeFile,
Proxies: c.makeProxies("provider_2_proxy_%s"),
},
"provider_3": {
Type: "Proxy",
Name: "provider_2",
VehicleType: VehicleTypeCompatible,
Proxies: c.makeProxies("provider_3_proxy_%s"),
},
}, nil
}
func (c *testClient) ProviderProxiesHealthCheck(providerName string) error {
time.Sleep(3 * time.Second)
return nil
}
func (c *testClient) GetConnections() (*Snapshot, error) {
return &Snapshot{
DownloadTotal: 111,
UploadTotal: 222,
Connections: nil,
}, nil
}
func TestExporter(t *testing.T) {
e, err := NewExporter(&testClient{}, DefaultTestUrl, DefaultTestUrlTimeout)
if err != nil {
t.Fatal(err)
}
t.Run("expect test metrics", func(t *testing.T) {
expectMetrics(t, e, "normal.metrics")
})
t.Run("CollectToText", func(t *testing.T) {
text, err := CollectToText(e)
if err != nil || text == "" {
t.Errorf(text, err)
}
//f, err := os.Create("test/test.metrics")
//f.WriteString(text)
//f.Close()
})
}