|
14 | 14 | package collector
|
15 | 15 |
|
16 | 16 | import (
|
17 |
| - "fmt" |
| 17 | + "io" |
18 | 18 | "net/http"
|
19 | 19 | "net/http/httptest"
|
20 | 20 | "net/url"
|
| 21 | + "os" |
| 22 | + "strings" |
21 | 23 | "testing"
|
22 | 24 |
|
23 | 25 | "github.com/go-kit/log"
|
| 26 | + "github.com/prometheus/client_golang/prometheus/testutil" |
24 | 27 | )
|
25 | 28 |
|
26 | 29 | func TestILMMetrics(t *testing.T) {
|
@@ -61,57 +64,48 @@ func TestILMMetrics(t *testing.T) {
|
61 | 64 | // }
|
62 | 65 | // '
|
63 | 66 | // curl http://localhost:9200/_all/_ilm/explain
|
64 |
| - tcs := map[string]string{ |
65 |
| - "6.6.0": `{ |
66 |
| - "indices": { |
67 |
| - "twitter": { "index": "twitter", "managed": false }, |
68 |
| - "facebook": { |
69 |
| - "index": "facebook", |
70 |
| - "managed": true, |
71 |
| - "policy": "my_policy", |
72 |
| - "lifecycle_date_millis": 1660799138565, |
73 |
| - "phase": "new", |
74 |
| - "phase_time_millis": 1660799138651, |
75 |
| - "action": "complete", |
76 |
| - "action_time_millis": 1660799138651, |
77 |
| - "step": "complete", |
78 |
| - "step_time_millis": 1660799138651 |
79 |
| - } |
80 |
| - } |
81 |
| - }`, |
| 67 | + tests := []struct { |
| 68 | + name string |
| 69 | + file string |
| 70 | + want string |
| 71 | + }{ |
| 72 | + { |
| 73 | + name: "6.6.0", |
| 74 | + file: "../fixtures/ilm_indices/6.6.0.json", |
| 75 | + want: ` |
| 76 | +# HELP elasticsearch_ilm_index_status Status of ILM policy for index |
| 77 | +# TYPE elasticsearch_ilm_index_status gauge |
| 78 | +elasticsearch_ilm_index_status{action="",index="twitter",phase="",step=""} 0 |
| 79 | +elasticsearch_ilm_index_status{action="complete",index="facebook",phase="new",step="complete"} 1 |
| 80 | + `, |
| 81 | + }, |
82 | 82 | }
|
83 |
| - for ver, out := range tcs { |
84 |
| - ts := httptest.NewServer(http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) { |
85 |
| - fmt.Fprintln(w, out) |
86 |
| - })) |
87 |
| - defer ts.Close() |
| 83 | + for _, tt := range tests { |
| 84 | + t.Run(tt.name, func(t *testing.T) { |
| 85 | + f, err := os.Open(tt.file) |
| 86 | + if err != nil { |
| 87 | + t.Fatal(err) |
| 88 | + } |
| 89 | + defer f.Close() |
| 90 | + |
| 91 | + ts := httptest.NewServer(http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) { |
| 92 | + io.Copy(w, f) |
| 93 | + })) |
| 94 | + defer ts.Close() |
88 | 95 |
|
89 |
| - u, err := url.Parse(ts.URL) |
90 |
| - if err != nil { |
91 |
| - t.Fatalf("Failed to parse URL: %s", err) |
92 |
| - } |
93 |
| - c := NewIlmIndicies(log.NewNopLogger(), http.DefaultClient, u) |
94 |
| - chr, err := c.fetchAndDecodeIlm() |
95 |
| - if err != nil { |
96 |
| - t.Fatalf("Failed to fetch or decode indices ilm metrics: %s", err) |
97 |
| - } |
98 |
| - t.Logf("[%s] indices ilm metrics Response: %+v", ver, chr) |
| 96 | + u, err := url.Parse(ts.URL) |
| 97 | + if err != nil { |
| 98 | + t.Fatal(err) |
| 99 | + } |
99 | 100 |
|
100 |
| - if chr.Indices["twitter"].Managed != false { |
101 |
| - t.Errorf("Invalid ilm metrics at twitter.managed") |
102 |
| - } |
103 |
| - if chr.Indices["facebook"].Managed != true { |
104 |
| - t.Errorf("Invalid ilm metrics at facebook.managed") |
105 |
| - } |
106 |
| - if chr.Indices["facebook"].Phase != "new" { |
107 |
| - t.Errorf("Invalid ilm metrics at facebook.phase") |
108 |
| - } |
109 |
| - if chr.Indices["facebook"].Action != "complete" { |
110 |
| - t.Errorf("Invalid ilm metrics at facebook.action") |
111 |
| - } |
112 |
| - if chr.Indices["facebook"].Step != "complete" { |
113 |
| - t.Errorf("Invalid ilm metrics at facebook.step") |
114 |
| - } |
| 101 | + c := NewIlmIndicies(log.NewNopLogger(), http.DefaultClient, u) |
| 102 | + if err != nil { |
| 103 | + t.Fatal(err) |
| 104 | + } |
115 | 105 |
|
| 106 | + if err := testutil.CollectAndCompare(c, strings.NewReader(tt.want)); err != nil { |
| 107 | + t.Fatal(err) |
| 108 | + } |
| 109 | + }) |
116 | 110 | }
|
117 | 111 | }
|
0 commit comments