@@ -68,3 +68,52 @@ func TestWindowsProcessCollector(t *testing.T) {
6868 }
6969 }
7070}
71+
72+ func TestWindowsDescribeAndCollectAlignment (t * testing.T ) {
73+ collector := & processCollector {
74+ pidFn : getPIDFn (),
75+ cpuTotal : NewDesc ("cpu_total" , "Total CPU usage" , nil , nil ),
76+ openFDs : NewDesc ("open_fds" , "Number of open file descriptors" , nil , nil ),
77+ maxFDs : NewDesc ("max_fds" , "Maximum file descriptors" , nil , nil ),
78+ vsize : NewDesc ("vsize" , "Virtual memory size" , nil , nil ),
79+ maxVsize : NewDesc ("max_vsize" , "Maximum virtual memory size" , nil , nil ),
80+ rss : NewDesc ("rss" , "Resident Set Size" , nil , nil ),
81+ startTime : NewDesc ("start_time" , "Process start time" , nil , nil ),
82+ inBytes : NewDesc ("in_bytes" , "Input bytes" , nil , nil ),
83+ outBytes : NewDesc ("out_bytes" , "Output bytes" , nil , nil ),
84+ }
85+
86+ // Collect and get descriptors
87+ descCh := make (chan * Desc , 15 )
88+ collector .describe (descCh )
89+ close (descCh )
90+
91+ definedDescs := make (map [string ]bool )
92+ for desc := range descCh {
93+ definedDescs [desc .String ()] = true
94+ }
95+
96+ // Collect and get metrics
97+ metricsCh := make (chan Metric , 15 )
98+ collector .processCollect (metricsCh )
99+ close (metricsCh )
100+
101+ collectedMetrics := make (map [string ]bool )
102+ for metric := range metricsCh {
103+ collectedMetrics [metric .Desc ().String ()] = true
104+ }
105+
106+ // Verify that all described metrics are collected
107+ for desc := range definedDescs {
108+ if ! collectedMetrics [desc ] {
109+ t .Errorf ("Metric %s described but not collected" , desc )
110+ }
111+ }
112+
113+ // Verify that no extra metrics are collected
114+ for desc := range collectedMetrics {
115+ if ! definedDescs [desc ] {
116+ t .Errorf ("Metric %s collected but not described" , desc )
117+ }
118+ }
119+ }
0 commit comments