Refactor router test fixture

This commit is contained in:
stefanprodan
2020-02-14 00:38:51 +02:00
parent 41f535191e
commit 98bd8696f2
7 changed files with 156 additions and 88 deletions
+4 -4
View File
@@ -10,7 +10,7 @@ import (
)
func TestAppmeshRouter_Reconcile(t *testing.T) {
mocks := newFixture()
mocks := newFixture(nil)
router := &AppMeshRouter{
logger: mocks.logger,
flaggerClient: mocks.flaggerClient,
@@ -151,7 +151,7 @@ func TestAppmeshRouter_Reconcile(t *testing.T) {
}
func TestAppmeshRouter_GetSetRoutes(t *testing.T) {
mocks := newFixture()
mocks := newFixture(nil)
router := &AppMeshRouter{
logger: mocks.logger,
flaggerClient: mocks.flaggerClient,
@@ -188,7 +188,7 @@ func TestAppmeshRouter_GetSetRoutes(t *testing.T) {
}
func TestAppmeshRouter_ABTest(t *testing.T) {
mocks := newFixture()
mocks := newFixture(nil)
router := &AppMeshRouter{
logger: mocks.logger,
flaggerClient: mocks.flaggerClient,
@@ -230,7 +230,7 @@ func TestAppmeshRouter_ABTest(t *testing.T) {
}
func TestAppmeshRouter_Gateway(t *testing.T) {
mocks := newFixture()
mocks := newFixture(nil)
router := &AppMeshRouter{
logger: mocks.logger,
flaggerClient: mocks.flaggerClient,
+4 -4
View File
@@ -7,7 +7,7 @@ import (
)
func TestContourRouter_Reconcile(t *testing.T) {
mocks := newFixture()
mocks := newFixture(nil)
router := &ContourRouter{
logger: mocks.logger,
flaggerClient: mocks.flaggerClient,
@@ -92,7 +92,7 @@ func TestContourRouter_Reconcile(t *testing.T) {
cdClone = cd.DeepCopy()
cdClone.Spec.CanaryAnalysis.Iterations = 5
cdClone.Spec.CanaryAnalysis.Match = newMockABTest().Spec.CanaryAnalysis.Match
cdClone.Spec.CanaryAnalysis.Match = newTestABTest().Spec.CanaryAnalysis.Match
canary, err = mocks.flaggerClient.FlaggerV1beta1().Canaries("default").Update(cdClone)
if err != nil {
t.Fatal(err.Error())
@@ -116,7 +116,7 @@ func TestContourRouter_Reconcile(t *testing.T) {
}
func TestContourRouter_Routes(t *testing.T) {
mocks := newFixture()
mocks := newFixture(nil)
router := &ContourRouter{
logger: mocks.logger,
flaggerClient: mocks.flaggerClient,
@@ -164,7 +164,7 @@ func TestContourRouter_Routes(t *testing.T) {
// test update to A/B
cdClone := cd.DeepCopy()
cdClone.Spec.CanaryAnalysis.Iterations = 5
cdClone.Spec.CanaryAnalysis.Match = newMockABTest().Spec.CanaryAnalysis.Match
cdClone.Spec.CanaryAnalysis.Match = newTestABTest().Spec.CanaryAnalysis.Match
canary, err := mocks.flaggerClient.FlaggerV1beta1().Canaries("default").Update(cdClone)
if err != nil {
t.Fatal(err.Error())
+3 -3
View File
@@ -10,7 +10,7 @@ import (
)
func TestGlooRouter_Sync(t *testing.T) {
mocks := newFixture()
mocks := newFixture(nil)
router := &GlooRouter{
logger: mocks.logger,
flaggerClient: mocks.flaggerClient,
@@ -43,7 +43,7 @@ func TestGlooRouter_Sync(t *testing.T) {
}
func TestGlooRouter_SetRoutes(t *testing.T) {
mocks := newFixture()
mocks := newFixture(nil)
router := &GlooRouter{
logger: mocks.logger,
flaggerClient: mocks.flaggerClient,
@@ -100,7 +100,7 @@ func TestGlooRouter_SetRoutes(t *testing.T) {
}
func TestGlooRouter_GetRoutes(t *testing.T) {
mocks := newFixture()
mocks := newFixture(nil)
router := &GlooRouter{
logger: mocks.logger,
flaggerClient: mocks.flaggerClient,
+2 -2
View File
@@ -8,7 +8,7 @@ import (
)
func TestIngressRouter_Reconcile(t *testing.T) {
mocks := newFixture()
mocks := newFixture(nil)
router := &IngressRouter{
logger: mocks.logger,
kubeClient: mocks.kubeClient,
@@ -44,7 +44,7 @@ func TestIngressRouter_Reconcile(t *testing.T) {
}
func TestIngressRouter_GetSetRoutes(t *testing.T) {
mocks := newFixture()
mocks := newFixture(nil)
router := &IngressRouter{
logger: mocks.logger,
kubeClient: mocks.kubeClient,
+8 -8
View File
@@ -10,7 +10,7 @@ import (
)
func TestIstioRouter_Sync(t *testing.T) {
mocks := newFixture()
mocks := newFixture(nil)
router := &IstioRouter{
logger: mocks.logger,
flaggerClient: mocks.flaggerClient,
@@ -112,7 +112,7 @@ func TestIstioRouter_Sync(t *testing.T) {
}
func TestIstioRouter_SetRoutes(t *testing.T) {
mocks := newFixture()
mocks := newFixture(nil)
router := &IstioRouter{
logger: mocks.logger,
flaggerClient: mocks.flaggerClient,
@@ -217,7 +217,7 @@ func TestIstioRouter_SetRoutes(t *testing.T) {
}
func TestIstioRouter_GetRoutes(t *testing.T) {
mocks := newFixture()
mocks := newFixture(nil)
router := &IstioRouter{
logger: mocks.logger,
flaggerClient: mocks.flaggerClient,
@@ -247,7 +247,7 @@ func TestIstioRouter_GetRoutes(t *testing.T) {
t.Errorf("Got mirror %v wanted %v", m, false)
}
mocks.canary = newMockMirror()
mocks.canary = newTestMirror()
err = router.Reconcile(mocks.canary)
if err != nil {
@@ -313,7 +313,7 @@ func TestIstioRouter_GetRoutes(t *testing.T) {
}
func TestIstioRouter_HTTPRequestHeaders(t *testing.T) {
mocks := newFixture()
mocks := newFixture(nil)
router := &IstioRouter{
logger: mocks.logger,
flaggerClient: mocks.flaggerClient,
@@ -342,7 +342,7 @@ func TestIstioRouter_HTTPRequestHeaders(t *testing.T) {
}
func TestIstioRouter_CORS(t *testing.T) {
mocks := newFixture()
mocks := newFixture(nil)
router := &IstioRouter{
logger: mocks.logger,
flaggerClient: mocks.flaggerClient,
@@ -375,7 +375,7 @@ func TestIstioRouter_CORS(t *testing.T) {
}
func TestIstioRouter_ABTest(t *testing.T) {
mocks := newFixture()
mocks := newFixture(nil)
router := &IstioRouter{
logger: mocks.logger,
flaggerClient: mocks.flaggerClient,
@@ -444,7 +444,7 @@ func TestIstioRouter_ABTest(t *testing.T) {
}
func TestIstioRouter_GatewayPort(t *testing.T) {
mocks := newFixture()
mocks := newFixture(nil)
router := &IstioRouter{
logger: mocks.logger,
flaggerClient: mocks.flaggerClient,
+3 -3
View File
@@ -7,7 +7,7 @@ import (
)
func TestServiceRouter_Create(t *testing.T) {
mocks := newFixture()
mocks := newFixture(nil)
router := &KubernetesDeploymentRouter{
kubeClient: mocks.kubeClient,
flaggerClient: mocks.flaggerClient,
@@ -52,7 +52,7 @@ func TestServiceRouter_Create(t *testing.T) {
}
func TestServiceRouter_Update(t *testing.T) {
mocks := newFixture()
mocks := newFixture(nil)
router := &KubernetesDeploymentRouter{
kubeClient: mocks.kubeClient,
flaggerClient: mocks.flaggerClient,
@@ -103,7 +103,7 @@ func TestServiceRouter_Update(t *testing.T) {
}
func TestServiceRouter_Undo(t *testing.T) {
mocks := newFixture()
mocks := newFixture(nil)
router := &KubernetesDeploymentRouter{
kubeClient: mocks.kubeClient,
flaggerClient: mocks.flaggerClient,
+132 -64
View File
@@ -29,18 +29,31 @@ type fixture struct {
logger *zap.SugaredLogger
}
func newFixture() fixture {
canary := newMockCanary()
abtest := newMockABTest()
appmeshCanary := newMockCanaryAppMesh()
ingressCanary := newMockCanaryIngress()
flaggerClient := fakeFlagger.NewSimpleClientset(canary, abtest, appmeshCanary, ingressCanary)
func newFixture(c *flaggerv1.Canary) fixture {
canary := newTestCanary()
if c != nil {
canary = c
}
abtest := newTestABTest()
appmeshCanary := newTestCanaryAppMesh()
ingressCanary := newTestCanaryIngress()
kubeClient := fake.NewSimpleClientset(newMockDeployment(), newMockABTestDeployment(), newMockIngress())
flaggerClient := fakeFlagger.NewSimpleClientset(
canary,
abtest,
appmeshCanary,
ingressCanary,
)
kubeClient := fake.NewSimpleClientset(
newTestDeployment(),
newTestABTestDeployment(),
newTestIngress(),
)
meshClient := fakeFlagger.NewSimpleClientset()
logger, _ := logger.NewLogger("debug")
logger, _ := logger.NewLogger("debug")
return fixture{
canary: canary,
abtest: abtest,
@@ -53,53 +66,7 @@ func newFixture() fixture {
}
}
func newMockCanaryAppMesh() *flaggerv1.Canary {
cd := &flaggerv1.Canary{
TypeMeta: metav1.TypeMeta{APIVersion: flaggerv1.SchemeGroupVersion.String()},
ObjectMeta: metav1.ObjectMeta{
Namespace: "default",
Name: "appmesh",
},
Spec: flaggerv1.CanarySpec{
TargetRef: flaggerv1.CrossNamespaceObjectReference{
Name: "podinfo",
APIVersion: "apps/v1",
Kind: "Deployment",
},
Service: flaggerv1.CanaryService{
Port: 9898,
MeshName: "global",
Hosts: []string{"*"},
Backends: []string{"backend.default"},
Timeout: "25",
Retries: &istiov1alpha3.HTTPRetry{
Attempts: 5,
PerTryTimeout: "gateway-error",
RetryOn: "5s",
},
}, CanaryAnalysis: flaggerv1.CanaryAnalysis{
Threshold: 10,
StepWeight: 10,
MaxWeight: 50,
Metrics: []flaggerv1.CanaryMetric{
{
Name: "request-success-rate",
Threshold: 99,
Interval: "1m",
},
{
Name: "request-duration",
Threshold: 500,
Interval: "1m",
},
},
},
},
}
return cd
}
func newMockCanary() *flaggerv1.Canary {
func newTestCanary() *flaggerv1.Canary {
cd := &flaggerv1.Canary{
TypeMeta: metav1.TypeMeta{APIVersion: flaggerv1.SchemeGroupVersion.String()},
ObjectMeta: metav1.ObjectMeta{
@@ -163,13 +130,104 @@ func newMockCanary() *flaggerv1.Canary {
return cd
}
func newMockMirror() *flaggerv1.Canary {
cd := newMockCanary()
func newTestCanaryAppMesh() *flaggerv1.Canary {
cd := &flaggerv1.Canary{
TypeMeta: metav1.TypeMeta{APIVersion: flaggerv1.SchemeGroupVersion.String()},
ObjectMeta: metav1.ObjectMeta{
Namespace: "default",
Name: "appmesh",
},
Spec: flaggerv1.CanarySpec{
TargetRef: flaggerv1.CrossNamespaceObjectReference{
Name: "podinfo",
APIVersion: "apps/v1",
Kind: "Deployment",
},
Service: flaggerv1.CanaryService{
Port: 9898,
MeshName: "global",
Hosts: []string{"*"},
Backends: []string{"backend.default"},
Timeout: "25",
Retries: &istiov1alpha3.HTTPRetry{
Attempts: 5,
PerTryTimeout: "gateway-error",
RetryOn: "5s",
},
}, CanaryAnalysis: flaggerv1.CanaryAnalysis{
Threshold: 10,
StepWeight: 10,
MaxWeight: 50,
Metrics: []flaggerv1.CanaryMetric{
{
Name: "request-success-rate",
Threshold: 99,
Interval: "1m",
},
{
Name: "request-duration",
Threshold: 500,
Interval: "1m",
},
},
},
},
}
return cd
}
func newTestSMICanary() *flaggerv1.Canary {
cd := &flaggerv1.Canary{
TypeMeta: metav1.TypeMeta{APIVersion: flaggerv1.SchemeGroupVersion.String()},
ObjectMeta: metav1.ObjectMeta{
Namespace: "default",
Name: "podinfo",
},
Spec: flaggerv1.CanarySpec{
TargetRef: flaggerv1.CrossNamespaceObjectReference{
Name: "podinfo",
APIVersion: "apps/v1",
Kind: "Deployment",
},
Service: flaggerv1.CanaryService{
Name: "podinfo",
Port: 80,
PortName: "http",
TargetPort: intstr.IntOrString{
Type: 0,
IntVal: 9898,
},
PortDiscovery: true,
},
CanaryAnalysis: flaggerv1.CanaryAnalysis{
Threshold: 10,
StepWeight: 10,
MaxWeight: 50,
Metrics: []flaggerv1.CanaryMetric{
{
Name: "request-success-rate",
Threshold: 99,
Interval: "1m",
},
{
Name: "request-duration",
Threshold: 500,
Interval: "1m",
},
},
},
},
}
return cd
}
func newTestMirror() *flaggerv1.Canary {
cd := newTestCanary()
cd.Spec.CanaryAnalysis.Mirror = true
return cd
}
func newMockABTest() *flaggerv1.Canary {
func newTestABTest() *flaggerv1.Canary {
cd := &flaggerv1.Canary{
TypeMeta: metav1.TypeMeta{APIVersion: flaggerv1.SchemeGroupVersion.String()},
ObjectMeta: metav1.ObjectMeta{
@@ -215,7 +273,7 @@ func newMockABTest() *flaggerv1.Canary {
return cd
}
func newMockDeployment() *appsv1.Deployment {
func newTestDeployment() *appsv1.Deployment {
d := &appsv1.Deployment{
TypeMeta: metav1.TypeMeta{APIVersion: appsv1.SchemeGroupVersion.String()},
ObjectMeta: metav1.ObjectMeta{
@@ -233,15 +291,20 @@ func newMockDeployment() *appsv1.Deployment {
Labels: map[string]string{
"app": "podinfo",
},
Annotations: map[string]string{
"prometheus.io/scrape": "true",
"prometheus.io/port": "9797",
},
},
Spec: corev1.PodSpec{
Containers: []corev1.Container{
{
Name: "podinfo",
Image: "quay.io/stefanprodan/podinfo:1.4.0",
Image: "stefanprodan/podinfo:test",
Command: []string{
"./podinfo",
"--port=9898",
"--port-metrics=9797",
},
Ports: []corev1.ContainerPort{
{
@@ -249,6 +312,11 @@ func newMockDeployment() *appsv1.Deployment {
ContainerPort: 9898,
Protocol: corev1.ProtocolTCP,
},
{
Name: "http-prom",
ContainerPort: 9797,
Protocol: corev1.ProtocolTCP,
},
},
},
},
@@ -260,7 +328,7 @@ func newMockDeployment() *appsv1.Deployment {
return d
}
func newMockABTestDeployment() *appsv1.Deployment {
func newTestABTestDeployment() *appsv1.Deployment {
d := &appsv1.Deployment{
TypeMeta: metav1.TypeMeta{APIVersion: appsv1.SchemeGroupVersion.String()},
ObjectMeta: metav1.ObjectMeta{
@@ -283,7 +351,7 @@ func newMockABTestDeployment() *appsv1.Deployment {
Containers: []corev1.Container{
{
Name: "podinfo",
Image: "quay.io/stefanprodan/podinfo:1.4.0",
Image: "quay.io/stefanprodan/podinfo:test",
Command: []string{
"./podinfo",
"--port=9898",
@@ -305,7 +373,7 @@ func newMockABTestDeployment() *appsv1.Deployment {
return d
}
func newMockCanaryIngress() *flaggerv1.Canary {
func newTestCanaryIngress() *flaggerv1.Canary {
cd := &flaggerv1.Canary{
TypeMeta: metav1.TypeMeta{APIVersion: flaggerv1.SchemeGroupVersion.String()},
ObjectMeta: metav1.ObjectMeta{
@@ -342,7 +410,7 @@ func newMockCanaryIngress() *flaggerv1.Canary {
return cd
}
func newMockIngress() *v1beta1.Ingress {
func newTestIngress() *v1beta1.Ingress {
return &v1beta1.Ingress{
TypeMeta: metav1.TypeMeta{APIVersion: v1beta1.SchemeGroupVersion.String()},
ObjectMeta: metav1.ObjectMeta{