Skip to content
This repository was archived by the owner on Oct 20, 2023. It is now read-only.

Commit cccbc8b

Browse files
author
Michelle Noorali
authored
Merge pull request #35 from u5surf/issue-30
Add unit test of traffictarget_controller #30
2 parents 7d6c446 + 1912b6a commit cccbc8b

File tree

1 file changed

+123
-0
lines changed

1 file changed

+123
-0
lines changed
Lines changed: 123 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,123 @@
1+
package traffictarget
2+
3+
import (
4+
"context"
5+
"testing"
6+
7+
targetv1alpha1 "github.com/deislabs/smi-sdk-go/pkg/apis/access/v1alpha1"
8+
apierrors "k8s.io/apimachinery/pkg/api/errors"
9+
"k8s.io/apimachinery/pkg/api/meta"
10+
metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
11+
"k8s.io/apimachinery/pkg/runtime"
12+
apitypes "k8s.io/apimachinery/pkg/types"
13+
"k8s.io/client-go/kubernetes/scheme"
14+
"k8s.io/client-go/rest"
15+
"k8s.io/client-go/tools/record"
16+
"sigs.k8s.io/controller-runtime/pkg/cache"
17+
"sigs.k8s.io/controller-runtime/pkg/client"
18+
"sigs.k8s.io/controller-runtime/pkg/client/fake"
19+
"sigs.k8s.io/controller-runtime/pkg/manager"
20+
"sigs.k8s.io/controller-runtime/pkg/reconcile"
21+
"sigs.k8s.io/controller-runtime/pkg/webhook"
22+
"sigs.k8s.io/controller-runtime/pkg/webhook/admission/types"
23+
24+
networkingv1alpha3 "github.com/deislabs/smi-adapter-istio/pkg/apis/networking/v1alpha3"
25+
)
26+
27+
func TestNewReconciler(t *testing.T) {
28+
mgr := FakeManager{}
29+
r := newReconciler(mgr)
30+
var _ reconcile.Reconciler = r // test r is reconcile.Reconciler
31+
}
32+
33+
func TestReconcile_ErrorIsNotFound(t *testing.T) {
34+
trafficTargetObj := &targetv1alpha1.TrafficTarget{
35+
ObjectMeta: metav1.ObjectMeta{
36+
Name: "traffic-target-name",
37+
Namespace: "default",
38+
},
39+
Specs: []targetv1alpha1.TrafficTargetSpec{},
40+
}
41+
objs := []runtime.Object{}
42+
cl := fake.NewFakeClient(objs...)
43+
s := scheme.Scheme
44+
s.AddKnownTypes(targetv1alpha1.SchemeGroupVersion, trafficTargetObj)
45+
reconcileTrafficTarget := &ReconcileTrafficTarget{client: cl, scheme: s}
46+
req := reconcile.Request{NamespacedName: apitypes.NamespacedName{
47+
Namespace: "default",
48+
Name: "traffic-target-name"},
49+
}
50+
_, err := reconcileTrafficTarget.Reconcile(req)
51+
if err != nil {
52+
t.Errorf("Expected no err, got %v", err)
53+
}
54+
}
55+
56+
func TestReconcile(t *testing.T) {
57+
trafficTargetObj := &targetv1alpha1.TrafficTarget{
58+
ObjectMeta: metav1.ObjectMeta{
59+
Name: "traffic-target-name",
60+
Namespace: "default",
61+
},
62+
Specs: []targetv1alpha1.TrafficTargetSpec{},
63+
}
64+
virtualServiceObj := &networkingv1alpha3.VirtualService{
65+
ObjectMeta: metav1.ObjectMeta{
66+
Name: "traffic-target-name-vs",
67+
Namespace: "default",
68+
Labels: map[string]string{"traffic-target": "traffic-target-name"},
69+
},
70+
Spec: networkingv1alpha3.VirtualServiceSpec{},
71+
}
72+
// Register the object in the fake client.
73+
objs := []runtime.Object{
74+
trafficTargetObj,
75+
}
76+
s := scheme.Scheme
77+
s.AddKnownTypes(targetv1alpha1.SchemeGroupVersion, trafficTargetObj)
78+
s.AddKnownTypes(networkingv1alpha3.SchemeGroupVersion, virtualServiceObj)
79+
80+
cl := fake.NewFakeClient(objs...)
81+
err := cl.Get(context.TODO(), apitypes.NamespacedName{
82+
Namespace: "default",
83+
Name: "traffic-target-name-vs"},
84+
virtualServiceObj)
85+
if !apierrors.IsNotFound(err) {
86+
t.Fatalf("expected virtual service not to exist, got err: %s", err)
87+
}
88+
89+
reconcileTrafficTarget := &ReconcileTrafficTarget{client: cl, scheme: s}
90+
req := reconcile.Request{NamespacedName: apitypes.NamespacedName{
91+
Namespace: "default",
92+
Name: "traffic-target-name-vs"},
93+
}
94+
95+
_, err = reconcileTrafficTarget.Reconcile(req)
96+
if err != nil {
97+
t.Errorf("Expected no err, got %s", err)
98+
}
99+
100+
err = cl.Get(context.TODO(), apitypes.NamespacedName{
101+
Namespace: "default",
102+
Name: "traffic-target-name"},
103+
trafficTargetObj)
104+
if err != nil {
105+
t.Errorf("Expected virtual service object to be created successfully, but was not: %s", err)
106+
}
107+
}
108+
109+
type FakeManager struct{}
110+
111+
func (fm FakeManager) Add(manager.Runnable) error { return nil }
112+
func (fm FakeManager) SetFields(interface{}) error { return nil }
113+
func (fm FakeManager) Start(<-chan struct{}) error { return nil }
114+
func (fm FakeManager) GetConfig() *rest.Config { return &rest.Config{} }
115+
func (fm FakeManager) GetScheme() *runtime.Scheme { return &runtime.Scheme{} }
116+
func (fm FakeManager) GetAdmissionDecoder() types.Decoder { return nil }
117+
func (fm FakeManager) GetClient() client.Client { return nil }
118+
func (fm FakeManager) GetFieldIndexer() client.FieldIndexer { return nil }
119+
func (fm FakeManager) GetCache() cache.Cache { return nil }
120+
func (fm FakeManager) GetRecorder(name string) record.EventRecorder { return nil }
121+
func (fm FakeManager) GetRESTMapper() meta.RESTMapper { return nil }
122+
func (fm FakeManager) GetAPIReader() client.Reader { return nil }
123+
func (fm FakeManager) GetWebhookServer() *webhook.Server { return &webhook.Server{} }

0 commit comments

Comments
 (0)