@@ -92,6 +92,77 @@ func TestMetricRayJobInfo(t *testing.T) {
92
92
}
93
93
}
94
94
95
+ func TestDeleteRayJobMetrics (t * testing.T ) {
96
+ k8sScheme := runtime .NewScheme ()
97
+ require .NoError (t , rayv1 .AddToScheme (k8sScheme ))
98
+ client := fake .NewClientBuilder ().WithScheme (k8sScheme ).Build ()
99
+ manager := NewRayJobMetricsManager (context .Background (), client )
100
+ reg := prometheus .NewRegistry ()
101
+ reg .MustRegister (manager )
102
+
103
+ // Test case 1: Delete specific job metrics
104
+ // Manually add some metrics
105
+ manager .ObserveRayJobExecutionDuration ("job1" , "ns1" , rayv1 .JobDeploymentStatusComplete , 0 , 10.5 )
106
+ manager .ObserveRayJobExecutionDuration ("job2" , "ns2" , rayv1 .JobDeploymentStatusFailed , 1 , 20.3 )
107
+ manager .ObserveRayJobExecutionDuration ("job3" , "ns1" , rayv1 .JobDeploymentStatusRunning , 0 , 5.7 )
108
+
109
+ // Test deleting metrics for job1 in ns1
110
+ manager .DeleteRayJobMetrics ("job1" , "ns1" )
111
+
112
+ // Verify metrics
113
+ req , err := http .NewRequestWithContext (t .Context (), http .MethodGet , "/metrics" , nil )
114
+ require .NoError (t , err )
115
+ recorder := httptest .NewRecorder ()
116
+ handler := promhttp .HandlerFor (reg , promhttp.HandlerOpts {Registry : reg })
117
+ handler .ServeHTTP (recorder , req )
118
+
119
+ assert .Equal (t , http .StatusOK , recorder .Code )
120
+ body := recorder .Body .String ()
121
+ assert .NotContains (t , body , `kuberay_job_execution_duration_seconds{job_deployment_status="Complete",name="job1",namespace="ns1",retry_count="0"}` )
122
+ assert .Contains (t , body , `kuberay_job_execution_duration_seconds{job_deployment_status="Failed",name="job2",namespace="ns2",retry_count="1"}` )
123
+ assert .Contains (t , body , `kuberay_job_execution_duration_seconds{job_deployment_status="Running",name="job3",namespace="ns1",retry_count="0"}` )
124
+
125
+ // Test case 2: Delete with empty name
126
+ manager .DeleteRayJobMetrics ("" , "ns1" )
127
+
128
+ // Verify metrics again
129
+ recorder2 := httptest .NewRecorder ()
130
+ handler .ServeHTTP (recorder2 , req )
131
+
132
+ assert .Equal (t , http .StatusOK , recorder2 .Code )
133
+ body2 := recorder2 .Body .String ()
134
+ assert .NotContains (t , body2 , `kuberay_job_execution_duration_seconds{job_deployment_status="Complete",name="job1",namespace="ns1",retry_count="0"}` )
135
+ assert .Contains (t , body2 , `kuberay_job_execution_duration_seconds{job_deployment_status="Failed",name="job2",namespace="ns2",retry_count="1"}` )
136
+ assert .Contains (t , body2 , `kuberay_job_execution_duration_seconds{job_deployment_status="Running",name="job3",namespace="ns1",retry_count="0"}` )
137
+
138
+ // Test case 3: Delete with empty name and namespace
139
+ manager .DeleteRayJobMetrics ("" , "" )
140
+
141
+ // Verify all metrics are deleted
142
+ recorder3 := httptest .NewRecorder ()
143
+ handler .ServeHTTP (recorder3 , req )
144
+
145
+ assert .Equal (t , http .StatusOK , recorder3 .Code )
146
+ body3 := recorder3 .Body .String ()
147
+ assert .NotContains (t , body3 , `kuberay_job_execution_duration_seconds{job_deployment_status="Complete",name="job1",namespace="ns1",retry_count="0"}` )
148
+ assert .Contains (t , body3 , `kuberay_job_execution_duration_seconds{job_deployment_status="Failed",name="job2",namespace="ns2",retry_count="1"}` )
149
+ assert .Contains (t , body3 , `kuberay_job_execution_duration_seconds{job_deployment_status="Running",name="job3",namespace="ns1",retry_count="0"}` )
150
+
151
+ // Test case 4: Delete with false name and namespace
152
+ manager .DeleteRayJobMetrics ("ns2" , "job2" )
153
+
154
+ // Verify all metrics are deleted
155
+ recorder4 := httptest .NewRecorder ()
156
+ handler .ServeHTTP (recorder4 , req )
157
+
158
+ assert .Equal (t , http .StatusOK , recorder4 .Code )
159
+ body4 := recorder4 .Body .String ()
160
+ assert .NotContains (t , body4 , `kuberay_job_execution_duration_seconds{job_deployment_status="Complete",name="job1",namespace="ns1",retry_count="0"}` )
161
+ assert .Contains (t , body4 , `kuberay_job_execution_duration_seconds{job_deployment_status="Failed",name="job2",namespace="ns2",retry_count="1"}` )
162
+ assert .Contains (t , body4 , `kuberay_job_execution_duration_seconds{job_deployment_status="Running",name="job3",namespace="ns1",retry_count="0"}` )
163
+
164
+ }
165
+
95
166
func TestMetricRayJobDeploymentStatus (t * testing.T ) {
96
167
tests := []struct {
97
168
name string
@@ -141,7 +212,7 @@ func TestMetricRayJobDeploymentStatus(t *testing.T) {
141
212
reg := prometheus .NewRegistry ()
142
213
reg .MustRegister (manager )
143
214
144
- req , err := http .NewRequestWithContext (t . Context (), http .MethodGet , "/metrics" , nil )
215
+ req , err := http .NewRequestWithContext (context . Background (), http .MethodGet , "/metrics" , nil )
145
216
require .NoError (t , err )
146
217
rr := httptest .NewRecorder ()
147
218
handler := promhttp .HandlerFor (reg , promhttp.HandlerOpts {})
@@ -154,7 +225,7 @@ func TestMetricRayJobDeploymentStatus(t *testing.T) {
154
225
}
155
226
156
227
if len (tc .rayJobs ) > 0 {
157
- err = client .Delete (t . Context (), & tc .rayJobs [0 ])
228
+ err = client .Delete (context . Background (), & tc .rayJobs [0 ])
158
229
require .NoError (t , err )
159
230
}
160
231
0 commit comments