mirror of
https://github.com/fluxcd/flagger.git
synced 2026-04-15 06:57:34 +00:00
Refactor router test fixture
This commit is contained in:
@@ -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,
|
||||
|
||||
@@ -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())
|
||||
|
||||
@@ -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,
|
||||
|
||||
@@ -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,
|
||||
|
||||
@@ -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,
|
||||
|
||||
@@ -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
@@ -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{
|
||||
|
||||
Reference in New Issue
Block a user