Skip to content

Commit

Permalink
PC-14087 Refactor SLO Status API tests
Browse files Browse the repository at this point in the history
  • Loading branch information
BSski committed Sep 20, 2024
1 parent 8603e54 commit e90fd31
Showing 1 changed file with 55 additions and 164 deletions.
219 changes: 55 additions & 164 deletions tests/slostatusapi_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -24,50 +24,13 @@ import (
func Test_SLOStatusAPI_V1_GetSLO(t *testing.T) {
t.Parallel()
ctx := context.Background()
project := generateV1alphaProject(t)
service := newV1alphaService(t, v1alphaService.Metadata{
Name: generateName(),
Project: project.GetName(),
})

dataSourceType := v1alpha.Datadog
directs := filterSlice(v1alphaSLODependencyDirects(t), func(o manifest.Object) bool {
typ, _ := o.(v1alphaDirect.Direct).Spec.GetType()
return typ == dataSourceType
})
require.Len(t, directs, 1)
direct := directs[0].(v1alphaDirect.Direct)

slo := getExample[v1alphaSLO.SLO](t,
manifest.KindSLO,
func(example v1alphaExamples.Example) bool {
dsGetter, ok := example.(dataSourceTypeGetter)
return ok && dsGetter.GetDataSourceType() == dataSourceType
},
)
slo.Spec.AnomalyConfig = nil
sloName := generateName()
slo.Metadata.Name = sloName
slo.Metadata.Project = project.GetName()
slo.Spec.Indicator.MetricSource = v1alphaSLO.MetricSourceSpec{
Name: direct.Metadata.Name,
Project: direct.Metadata.Project,
Kind: manifest.KindDirect,
}
slo.Spec.AlertPolicies = nil
slo.Spec.Service = service.Metadata.Name
slo.Spec.Objectives[0].Name = "good"

allObjects := make([]manifest.Object, 0)
allObjects = append(
allObjects,
project,
service,
slo,
)
allObjects := setupSLOListTest(t)
project, _, slo := allObjects[0], allObjects[1], allObjects[2]

v1Apply(t, allObjects)
t.Cleanup(func() { v1Delete(t, allObjects) })

var err error
var response v1.SLODetails
ticker := time.NewTicker(5 * time.Second)
Expand All @@ -79,7 +42,7 @@ func Test_SLOStatusAPI_V1_GetSLO(t *testing.T) {
for !done {
select {
case <-ticker.C:
response, err = client.SLOStatusAPI().V1().GetSLO(ctx, sloName, project.GetName())
response, err = client.SLOStatusAPI().V1().GetSLO(ctx, slo.GetName(), project.GetName())
if err == nil {
done = true
}
Expand All @@ -90,59 +53,23 @@ func Test_SLOStatusAPI_V1_GetSLO(t *testing.T) {

require.NoError(t, err)
assert.NotEmpty(t, response)
assert.Equal(t, sloName, response.Name)
assert.Equal(t, slo.GetName(), response.Name)
}

func Test_SLOStatusAPI_V1_GetSLOList(t *testing.T) {
t.Parallel()
ctx := context.Background()
project := generateV1alphaProject(t)
service := newV1alphaService(t, v1alphaService.Metadata{
Name: generateName(),
Project: project.GetName(),
})

dataSourceType := v1alpha.Datadog
directs := filterSlice(v1alphaSLODependencyDirects(t), func(o manifest.Object) bool {
typ, _ := o.(v1alphaDirect.Direct).Spec.GetType()
return typ == dataSourceType
})
require.Len(t, directs, 1)
direct := directs[0].(v1alphaDirect.Direct)

slo1 := getExample[v1alphaSLO.SLO](t,
manifest.KindSLO,
func(example v1alphaExamples.Example) bool {
dsGetter, ok := example.(dataSourceTypeGetter)
return ok && dsGetter.GetDataSourceType() == dataSourceType
},
)
slo1.Spec.AnomalyConfig = nil
slo1.Metadata.Name = generateName()
slo1.Metadata.Project = project.GetName()
slo1.Spec.Indicator.MetricSource = v1alphaSLO.MetricSourceSpec{
Name: direct.Metadata.Name,
Project: direct.Metadata.Project,
Kind: manifest.KindDirect,
}
slo1.Spec.AlertPolicies = nil
slo1.Spec.Service = service.Metadata.Name
slo1.Spec.Objectives[0].Name = "good"

allObjects := setupSLOListTest(t)
_, _, slo := allObjects[0], allObjects[1], allObjects[2]
slo1 := slo.(*v1alphaSLO.SLO)
slo2 := deepCopyObject(t, slo1)
slo2.Metadata.Name = generateName()
slo3 := deepCopyObject(t, slo1)
slo3.Metadata.Name = generateName()
slo4 := deepCopyObject(t, slo1)
slo4.Metadata.Name = generateName()

allObjects := make([]manifest.Object, 0)
allObjects = append(
allObjects,
project,
service,
slo1, slo2, slo3, slo4,
)
allObjects = append(allObjects, slo2, slo3, slo4)

v1Apply(t, allObjects)
t.Cleanup(func() { v1Delete(t, allObjects) })
Expand Down Expand Up @@ -205,50 +132,13 @@ func Test_SLOStatusAPI_V1_GetSLOList(t *testing.T) {
func Test_SLOStatusAPI_V2_GetSLO(t *testing.T) {
t.Parallel()
ctx := context.Background()
project := generateV1alphaProject(t)
service := newV1alphaService(t, v1alphaService.Metadata{
Name: generateName(),
Project: project.GetName(),
})

dataSourceType := v1alpha.Datadog
directs := filterSlice(v1alphaSLODependencyDirects(t), func(o manifest.Object) bool {
typ, _ := o.(v1alphaDirect.Direct).Spec.GetType()
return typ == dataSourceType
})
require.Len(t, directs, 1)
direct := directs[0].(v1alphaDirect.Direct)

slo := getExample[v1alphaSLO.SLO](t,
manifest.KindSLO,
func(example v1alphaExamples.Example) bool {
dsGetter, ok := example.(dataSourceTypeGetter)
return ok && dsGetter.GetDataSourceType() == dataSourceType
},
)
slo.Spec.AnomalyConfig = nil
sloName := generateName()
slo.Metadata.Name = sloName
slo.Metadata.Project = project.GetName()
slo.Spec.Indicator.MetricSource = v1alphaSLO.MetricSourceSpec{
Name: direct.Metadata.Name,
Project: direct.Metadata.Project,
Kind: manifest.KindDirect,
}
slo.Spec.AlertPolicies = nil
slo.Spec.Service = service.Metadata.Name
slo.Spec.Objectives[0].Name = "good"

allObjects := make([]manifest.Object, 0)
allObjects = append(
allObjects,
project,
service,
slo,
)
allObjects := setupSLOListTest(t)
project, _, slo := allObjects[0], allObjects[1], allObjects[2]

v1Apply(t, allObjects)
t.Cleanup(func() { v1Delete(t, allObjects) })

var err error
var response v2.SLODetails
ticker := time.NewTicker(5 * time.Second)
Expand All @@ -260,7 +150,7 @@ func Test_SLOStatusAPI_V2_GetSLO(t *testing.T) {
for !done {
select {
case <-ticker.C:
response, err = client.SLOStatusAPI().V2().GetSLO(ctx, sloName, project.GetName())
response, err = client.SLOStatusAPI().V2().GetSLO(ctx, slo.GetName(), project.GetName())
if err == nil {
done = true
}
Expand All @@ -271,59 +161,23 @@ func Test_SLOStatusAPI_V2_GetSLO(t *testing.T) {

require.NoError(t, err)
assert.NotEmpty(t, response)
assert.Equal(t, sloName, response.Name)
assert.Equal(t, slo.GetName(), response.Name)
}

func Test_SLOStatusAPI_V2_GetSLOList(t *testing.T) {
t.Parallel()
ctx := context.Background()
project := generateV1alphaProject(t)
service := newV1alphaService(t, v1alphaService.Metadata{
Name: generateName(),
Project: project.GetName(),
})

dataSourceType := v1alpha.Datadog
directs := filterSlice(v1alphaSLODependencyDirects(t), func(o manifest.Object) bool {
typ, _ := o.(v1alphaDirect.Direct).Spec.GetType()
return typ == dataSourceType
})
require.Len(t, directs, 1)
direct := directs[0].(v1alphaDirect.Direct)

slo1 := getExample[v1alphaSLO.SLO](t,
manifest.KindSLO,
func(example v1alphaExamples.Example) bool {
dsGetter, ok := example.(dataSourceTypeGetter)
return ok && dsGetter.GetDataSourceType() == dataSourceType
},
)
slo1.Spec.AnomalyConfig = nil
slo1.Metadata.Name = generateName()
slo1.Metadata.Project = project.GetName()
slo1.Spec.Indicator.MetricSource = v1alphaSLO.MetricSourceSpec{
Name: direct.Metadata.Name,
Project: direct.Metadata.Project,
Kind: manifest.KindDirect,
}
slo1.Spec.AlertPolicies = nil
slo1.Spec.Service = service.Metadata.Name
slo1.Spec.Objectives[0].Name = "good"

allObjects := setupSLOListTest(t)
_, _, slo := allObjects[0], allObjects[1], allObjects[2]
slo1 := slo.(*v1alphaSLO.SLO)
slo2 := deepCopyObject(t, slo1)
slo2.Metadata.Name = generateName()
slo3 := deepCopyObject(t, slo1)
slo3.Metadata.Name = generateName()
slo4 := deepCopyObject(t, slo1)
slo4.Metadata.Name = generateName()

allObjects := make([]manifest.Object, 0)
allObjects = append(
allObjects,
project,
service,
slo1, slo2, slo3, slo4,
)
allObjects = append(allObjects, slo2, slo3, slo4)

v1Apply(t, allObjects)
t.Cleanup(func() { v1Delete(t, allObjects) })
Expand Down Expand Up @@ -382,3 +236,40 @@ func Test_SLOStatusAPI_V2_GetSLOList(t *testing.T) {

assert.NotEqual(t, firstResponse, secondResponse)
}

func setupSLOListTest(t *testing.T) []manifest.Object {
project := generateV1alphaProject(t)
service := newV1alphaService(t, v1alphaService.Metadata{
Name: generateName(),
Project: project.GetName(),
})

dataSourceType := v1alpha.Datadog
directs := filterSlice(v1alphaSLODependencyDirects(t), func(o manifest.Object) bool {
typ, _ := o.(v1alphaDirect.Direct).Spec.GetType()
return typ == dataSourceType
})
require.Len(t, directs, 1)
direct := directs[0].(v1alphaDirect.Direct)

slo := getExample[v1alphaSLO.SLO](t,
manifest.KindSLO,
func(example v1alphaExamples.Example) bool {
dsGetter, ok := example.(dataSourceTypeGetter)
return ok && dsGetter.GetDataSourceType() == dataSourceType
},
)
slo.Spec.AnomalyConfig = nil
slo.Metadata.Name = generateName()
slo.Metadata.Project = project.GetName()
slo.Spec.Indicator.MetricSource = v1alphaSLO.MetricSourceSpec{
Name: direct.Metadata.Name,
Project: direct.Metadata.Project,
Kind: manifest.KindDirect,
}
slo.Spec.AlertPolicies = nil
slo.Spec.Service = service.Metadata.Name
slo.Spec.Objectives[0].Name = "good"

return []manifest.Object{project, service, slo}
}

0 comments on commit e90fd31

Please sign in to comment.