|  | 
| 1 | 1 | package datadogagent | 
| 2 | 2 | 
 | 
| 3 | 3 | import ( | 
|  | 4 | +	"context" | 
| 4 | 5 | 	"testing" | 
| 5 | 6 | 
 | 
| 6 | 7 | 	corev1 "k8s.io/api/core/v1" | 
| 7 | 8 | 	metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" | 
|  | 9 | +	"sigs.k8s.io/controller-runtime/pkg/client" | 
|  | 10 | +	"sigs.k8s.io/controller-runtime/pkg/client/fake" | 
|  | 11 | +	logf "sigs.k8s.io/controller-runtime/pkg/log" | 
| 8 | 12 | 
 | 
| 9 | 13 | 	"github.com/DataDog/datadog-operator/api/datadoghq/v1alpha1" | 
| 10 | 14 | 	"github.com/DataDog/datadog-operator/api/datadoghq/v2alpha1" | 
| @@ -235,3 +239,158 @@ func Test_generateSpecFromDDA(t *testing.T) { | 
| 235 | 239 | 		}) | 
| 236 | 240 | 	} | 
| 237 | 241 | } | 
|  | 242 | + | 
|  | 243 | +func Test_cleanUpUnusedDDAIs(t *testing.T) { | 
|  | 244 | +	sch := agenttestutils.TestScheme() | 
|  | 245 | +	ctx := context.Background() | 
|  | 246 | +	logger := logf.Log.WithName("test_cleanUpUnusedDDAIs") | 
|  | 247 | + | 
|  | 248 | +	testCases := []struct { | 
|  | 249 | +		name          string | 
|  | 250 | +		existingDDAIs []client.Object | 
|  | 251 | +		validDDAIs    []*v1alpha1.DatadogAgentInternal | 
|  | 252 | +		wantDDAIs     *v1alpha1.DatadogAgentInternalList | 
|  | 253 | +	}{ | 
|  | 254 | +		{ | 
|  | 255 | +			name:          "empty lists", | 
|  | 256 | +			existingDDAIs: []client.Object{}, | 
|  | 257 | +			validDDAIs:    []*v1alpha1.DatadogAgentInternal{}, | 
|  | 258 | +			wantDDAIs: &v1alpha1.DatadogAgentInternalList{ | 
|  | 259 | +				Items: []v1alpha1.DatadogAgentInternal{}, | 
|  | 260 | +			}, | 
|  | 261 | +		}, | 
|  | 262 | +		{ | 
|  | 263 | +			name: "no ddais to delete", | 
|  | 264 | +			existingDDAIs: []client.Object{ | 
|  | 265 | +				&v1alpha1.DatadogAgentInternal{ | 
|  | 266 | +					ObjectMeta: metav1.ObjectMeta{ | 
|  | 267 | +						Name:      "dda-foo-agent", | 
|  | 268 | +						Namespace: "default", | 
|  | 269 | +					}, | 
|  | 270 | +				}, | 
|  | 271 | +			}, | 
|  | 272 | +			validDDAIs: []*v1alpha1.DatadogAgentInternal{ | 
|  | 273 | +				&v1alpha1.DatadogAgentInternal{ | 
|  | 274 | +					ObjectMeta: metav1.ObjectMeta{ | 
|  | 275 | +						Name:      "dda-foo-agent", | 
|  | 276 | +						Namespace: "default", | 
|  | 277 | +					}, | 
|  | 278 | +				}, | 
|  | 279 | +			}, | 
|  | 280 | +			wantDDAIs: &v1alpha1.DatadogAgentInternalList{ | 
|  | 281 | +				Items: []v1alpha1.DatadogAgentInternal{ | 
|  | 282 | +					{ | 
|  | 283 | +						ObjectMeta: metav1.ObjectMeta{ | 
|  | 284 | +							Name:            "dda-foo-agent", | 
|  | 285 | +							Namespace:       "default", | 
|  | 286 | +							ResourceVersion: "999", | 
|  | 287 | +						}, | 
|  | 288 | +					}, | 
|  | 289 | +				}, | 
|  | 290 | +			}, | 
|  | 291 | +		}, | 
|  | 292 | +		{ | 
|  | 293 | +			name: "multiple ddais to delete", | 
|  | 294 | +			existingDDAIs: []client.Object{ | 
|  | 295 | +				&v1alpha1.DatadogAgentInternal{ | 
|  | 296 | +					ObjectMeta: metav1.ObjectMeta{ | 
|  | 297 | +						Name:      "dda-foo-agent", | 
|  | 298 | +						Namespace: "default", | 
|  | 299 | +					}, | 
|  | 300 | +				}, | 
|  | 301 | +				&v1alpha1.DatadogAgentInternal{ | 
|  | 302 | +					ObjectMeta: metav1.ObjectMeta{ | 
|  | 303 | +						Name:      "dda-bar-agent", | 
|  | 304 | +						Namespace: "default", | 
|  | 305 | +					}, | 
|  | 306 | +				}, | 
|  | 307 | +				&v1alpha1.DatadogAgentInternal{ | 
|  | 308 | +					ObjectMeta: metav1.ObjectMeta{ | 
|  | 309 | +						Name:      "dda-baz-agent", | 
|  | 310 | +						Namespace: "default", | 
|  | 311 | +					}, | 
|  | 312 | +				}, | 
|  | 313 | +			}, | 
|  | 314 | +			validDDAIs: []*v1alpha1.DatadogAgentInternal{ | 
|  | 315 | +				&v1alpha1.DatadogAgentInternal{ | 
|  | 316 | +					ObjectMeta: metav1.ObjectMeta{ | 
|  | 317 | +						Name:      "dda-foo-agent", | 
|  | 318 | +						Namespace: "default", | 
|  | 319 | +					}, | 
|  | 320 | +				}, | 
|  | 321 | +			}, | 
|  | 322 | +			wantDDAIs: &v1alpha1.DatadogAgentInternalList{ | 
|  | 323 | +				Items: []v1alpha1.DatadogAgentInternal{ | 
|  | 324 | +					{ | 
|  | 325 | +						ObjectMeta: metav1.ObjectMeta{ | 
|  | 326 | +							Name:            "dda-foo-agent", | 
|  | 327 | +							Namespace:       "default", | 
|  | 328 | +							ResourceVersion: "999", | 
|  | 329 | +						}, | 
|  | 330 | +					}, | 
|  | 331 | +				}, | 
|  | 332 | +			}, | 
|  | 333 | +		}, | 
|  | 334 | +		{ | 
|  | 335 | +			name: "multiple ddais to delete with different namespace", | 
|  | 336 | +			existingDDAIs: []client.Object{ | 
|  | 337 | +				&v1alpha1.DatadogAgentInternal{ | 
|  | 338 | +					ObjectMeta: metav1.ObjectMeta{ | 
|  | 339 | +						Name:      "dda-foo-agent", | 
|  | 340 | +						Namespace: "default", | 
|  | 341 | +					}, | 
|  | 342 | +				}, | 
|  | 343 | +				&v1alpha1.DatadogAgentInternal{ | 
|  | 344 | +					ObjectMeta: metav1.ObjectMeta{ | 
|  | 345 | +						Name:      "dda-foo-agent", | 
|  | 346 | +						Namespace: "foo", | 
|  | 347 | +					}, | 
|  | 348 | +				}, | 
|  | 349 | +				&v1alpha1.DatadogAgentInternal{ | 
|  | 350 | +					ObjectMeta: metav1.ObjectMeta{ | 
|  | 351 | +						Name:      "dda-foo-agent", | 
|  | 352 | +						Namespace: "bar", | 
|  | 353 | +					}, | 
|  | 354 | +				}, | 
|  | 355 | +			}, | 
|  | 356 | +			validDDAIs: []*v1alpha1.DatadogAgentInternal{ | 
|  | 357 | +				&v1alpha1.DatadogAgentInternal{ | 
|  | 358 | +					ObjectMeta: metav1.ObjectMeta{ | 
|  | 359 | +						Name:      "dda-foo-agent", | 
|  | 360 | +						Namespace: "foo", | 
|  | 361 | +					}, | 
|  | 362 | +				}, | 
|  | 363 | +			}, | 
|  | 364 | +			wantDDAIs: &v1alpha1.DatadogAgentInternalList{ | 
|  | 365 | +				Items: []v1alpha1.DatadogAgentInternal{ | 
|  | 366 | +					{ | 
|  | 367 | +						ObjectMeta: metav1.ObjectMeta{ | 
|  | 368 | +							Name:            "dda-foo-agent", | 
|  | 369 | +							Namespace:       "foo", | 
|  | 370 | +							ResourceVersion: "999", | 
|  | 371 | +						}, | 
|  | 372 | +					}, | 
|  | 373 | +				}, | 
|  | 374 | +			}, | 
|  | 375 | +		}, | 
|  | 376 | +	} | 
|  | 377 | + | 
|  | 378 | +	for _, tt := range testCases { | 
|  | 379 | +		t.Run(tt.name, func(t *testing.T) { | 
|  | 380 | +			fakeClient := fake.NewClientBuilder().WithScheme(sch).WithObjects(tt.existingDDAIs...).Build() | 
|  | 381 | + | 
|  | 382 | +			r := &Reconciler{ | 
|  | 383 | +				client: fakeClient, | 
|  | 384 | +				log:    logger, | 
|  | 385 | +			} | 
|  | 386 | + | 
|  | 387 | +			err := r.cleanUpUnusedDDAIs(ctx, tt.validDDAIs) | 
|  | 388 | +			assert.NoError(t, err) | 
|  | 389 | + | 
|  | 390 | +			ddaiList := &v1alpha1.DatadogAgentInternalList{} | 
|  | 391 | +			err = fakeClient.List(ctx, ddaiList) | 
|  | 392 | +			assert.NoError(t, err) | 
|  | 393 | +			assert.Equal(t, tt.wantDDAIs, ddaiList) | 
|  | 394 | +		}) | 
|  | 395 | +	} | 
|  | 396 | +} | 
0 commit comments