@ -16,12 +16,13 @@ import (
"github.com/grafana/grafana/pkg/infra/log"
"github.com/grafana/grafana/pkg/services/ngalert/api/tooling/definitions"
"github.com/grafana/grafana/pkg/services/ngalert/models"
"github.com/grafana/grafana/pkg/services/ngalert/notifier/legacy_storage"
)
func TestGetMuteTimings ( t * testing . T ) {
orgID := int64 ( 1 )
revision := & cfgRevision {
cf g: & definitions . PostableUserConfig {
revision := & lega cy_storage . Con fi gRevision{
Confi g: & definitions . PostableUserConfig {
AlertmanagerConfig : definitions . PostableApiAlertingConfig {
Config : definitions . Config {
MuteTimeIntervals : [ ] config . MuteTimeInterval {
@ -50,7 +51,7 @@ func TestGetMuteTimings(t *testing.T) {
t . Run ( "service returns timings from config file" , func ( t * testing . T ) {
sut , store , prov := createMuteTimingSvcSut ( )
store . GetFn = func ( ctx context . Context , orgID int64 ) ( * cfgRevision , error ) {
store . GetFn = func ( ctx context . Context , orgID int64 ) ( * lega cy_storage . Con fi gRevision, error ) {
return revision , nil
}
@ -59,21 +60,21 @@ func TestGetMuteTimings(t *testing.T) {
result , err := sut . GetMuteTimings ( context . Background ( ) , 1 )
require . NoError ( t , err )
require . Len ( t , result , len ( revision . cf g. AlertmanagerConfig . MuteTimeIntervals ) )
require . Len ( t , result , len ( revision . Confi g. AlertmanagerConfig . MuteTimeIntervals ) )
require . Equal ( t , "Test1" , result [ 0 ] . Name )
require . EqualValues ( t , provenances [ "Test1" ] , result [ 0 ] . Provenance )
require . NotEmpty ( t , result [ 0 ] . Version )
require . Equal ( t , getIntervalUID ( result [ 0 ] . MuteTimeInterval ) , result [ 0 ] . UID )
require . Equal ( t , legacy_storage . NameToUid ( result [ 0 ] . Name ) , result [ 0 ] . UID )
require . Equal ( t , "Test2" , result [ 1 ] . Name )
require . EqualValues ( t , provenances [ "Test2" ] , result [ 1 ] . Provenance )
require . NotEmpty ( t , result [ 1 ] . Version )
require . Equal ( t , getIntervalUID ( result [ 1 ] . MuteTimeInterval ) , result [ 1 ] . UID )
require . Equal ( t , legacy_storage . NameToUid ( result [ 1 ] . Name ) , result [ 1 ] . UID )
require . Equal ( t , "Test3" , result [ 2 ] . Name )
require . EqualValues ( t , "" , result [ 2 ] . Provenance )
require . NotEmpty ( t , result [ 2 ] . Version )
require . Equal ( t , getIntervalUID ( result [ 2 ] . MuteTimeInterval ) , result [ 2 ] . UID )
require . Equal ( t , legacy_storage . NameToUid ( result [ 2 ] . Name ) , result [ 2 ] . UID )
require . Len ( t , store . Calls , 1 )
require . Equal ( t , "Get" , store . Calls [ 0 ] . Method )
@ -84,8 +85,8 @@ func TestGetMuteTimings(t *testing.T) {
t . Run ( "service returns empty list when config file contains no mute timings" , func ( t * testing . T ) {
sut , store , _ := createMuteTimingSvcSut ( )
store . GetFn = func ( ctx context . Context , orgID int64 ) ( * cfgRevision , error ) {
return & cfgRevision { cf g: & definitions . PostableUserConfig { } } , nil
store . GetFn = func ( ctx context . Context , orgID int64 ) ( * lega cy_storage . Con fi gRevision, error ) {
return & lega cy_storage . Con fi gRevision{ Confi g: & definitions . PostableUserConfig { } } , nil
}
result , err := sut . GetMuteTimings ( context . Background ( ) , 1 )
@ -98,7 +99,7 @@ func TestGetMuteTimings(t *testing.T) {
t . Run ( "when unable to read config" , func ( t * testing . T ) {
sut , store , _ := createMuteTimingSvcSut ( )
expected := fmt . Errorf ( "failed" )
store . GetFn = func ( ctx context . Context , orgID int64 ) ( * cfgRevision , error ) {
store . GetFn = func ( ctx context . Context , orgID int64 ) ( * lega cy_storage . Con fi gRevision, error ) {
return nil , expected
}
@ -109,7 +110,7 @@ func TestGetMuteTimings(t *testing.T) {
t . Run ( "when unable to read provenance" , func ( t * testing . T ) {
sut , store , prov := createMuteTimingSvcSut ( )
store . GetFn = func ( ctx context . Context , orgID int64 ) ( * cfgRevision , error ) {
store . GetFn = func ( ctx context . Context , orgID int64 ) ( * lega cy_storage . Con fi gRevision, error ) {
return revision , nil
}
expected := fmt . Errorf ( "failed" )
@ -124,8 +125,8 @@ func TestGetMuteTimings(t *testing.T) {
func TestGetMuteTiming ( t * testing . T ) {
orgID := int64 ( 1 )
revision := & cfgRevision {
cf g: & definitions . PostableUserConfig {
revision := & lega cy_storage . Con fi gRevision{
Confi g: & definitions . PostableUserConfig {
AlertmanagerConfig : definitions . PostableApiAlertingConfig {
Config : definitions . Config {
MuteTimeIntervals : [ ] config . MuteTimeInterval {
@ -141,7 +142,7 @@ func TestGetMuteTiming(t *testing.T) {
t . Run ( "service returns timing by name" , func ( t * testing . T ) {
sut , store , prov := createMuteTimingSvcSut ( )
store . GetFn = func ( ctx context . Context , orgID int64 ) ( * cfgRevision , error ) {
store . GetFn = func ( ctx context . Context , orgID int64 ) ( * lega cy_storage . Con fi gRevision, error ) {
return revision , nil
}
prov . EXPECT ( ) . GetProvenance ( mock . Anything , mock . Anything , mock . Anything ) . Return ( models . ProvenanceAPI , nil )
@ -152,7 +153,7 @@ func TestGetMuteTiming(t *testing.T) {
require . Equal ( t , "Test1" , result . Name )
require . EqualValues ( t , models . ProvenanceAPI , result . Provenance )
require . Equal ( t , getIntervalUID ( result . MuteTimeInterval ) , result . UID )
require . Equal ( t , legacy_storage . NameToUid ( result . Name ) , result . UID )
require . NotEmpty ( t , result . Version )
require . Len ( t , store . Calls , 1 )
@ -172,8 +173,8 @@ func TestGetMuteTiming(t *testing.T) {
t . Run ( "service returns ErrTimeIntervalNotFound if no mute timings" , func ( t * testing . T ) {
sut , store , _ := createMuteTimingSvcSut ( )
store . GetFn = func ( ctx context . Context , orgID int64 ) ( * cfgRevision , error ) {
return & cfgRevision { cf g: & definitions . PostableUserConfig { } } , nil
store . GetFn = func ( ctx context . Context , orgID int64 ) ( * lega cy_storage . Con fi gRevision, error ) {
return & lega cy_storage . Con fi gRevision{ Confi g: & definitions . PostableUserConfig { } } , nil
}
_ , err := sut . GetMuteTiming ( context . Background ( ) , "Test1" , orgID )
@ -183,7 +184,7 @@ func TestGetMuteTiming(t *testing.T) {
t . Run ( "service returns ErrTimeIntervalNotFound if no mute timing by name" , func ( t * testing . T ) {
sut , store , _ := createMuteTimingSvcSut ( )
store . GetFn = func ( ctx context . Context , orgID int64 ) ( * cfgRevision , error ) {
store . GetFn = func ( ctx context . Context , orgID int64 ) ( * lega cy_storage . Con fi gRevision, error ) {
return revision , nil
}
@ -196,7 +197,7 @@ func TestGetMuteTiming(t *testing.T) {
t . Run ( "when unable to read config" , func ( t * testing . T ) {
sut , store , _ := createMuteTimingSvcSut ( )
expected := fmt . Errorf ( "failed" )
store . GetFn = func ( ctx context . Context , orgID int64 ) ( * cfgRevision , error ) {
store . GetFn = func ( ctx context . Context , orgID int64 ) ( * lega cy_storage . Con fi gRevision, error ) {
return nil , expected
}
@ -207,7 +208,7 @@ func TestGetMuteTiming(t *testing.T) {
t . Run ( "when unable to read provenance" , func ( t * testing . T ) {
sut , store , prov := createMuteTimingSvcSut ( )
store . GetFn = func ( ctx context . Context , orgID int64 ) ( * cfgRevision , error ) {
store . GetFn = func ( ctx context . Context , orgID int64 ) ( * lega cy_storage . Con fi gRevision, error ) {
return revision , nil
}
expected := fmt . Errorf ( "failed" )
@ -273,8 +274,8 @@ func TestCreateMuteTimings(t *testing.T) {
t . Run ( "returns ErrTimeIntervalExists if mute timing with the name exists" , func ( t * testing . T ) {
sut , store , _ := createMuteTimingSvcSut ( )
store . GetFn = func ( ctx context . Context , orgID int64 ) ( * cfgRevision , error ) {
return & cfgRevision { cf g: initialConfig ( ) } , nil
store . GetFn = func ( ctx context . Context , orgID int64 ) ( * lega cy_storage . Con fi gRevision, error ) {
return & lega cy_storage . Con fi gRevision{ Confi g: initialConfig ( ) } , nil
}
existing := initialConfig ( ) . AlertmanagerConfig . MuteTimeIntervals [ 0 ]
@ -290,10 +291,10 @@ func TestCreateMuteTimings(t *testing.T) {
t . Run ( "saves mute timing and provenance in a transaction" , func ( t * testing . T ) {
sut , store , prov := createMuteTimingSvcSut ( )
store . GetFn = func ( ctx context . Context , orgID int64 ) ( * cfgRevision , error ) {
return & cfgRevision { cf g: initialConfig ( ) } , nil
store . GetFn = func ( ctx context . Context , orgID int64 ) ( * lega cy_storage . Con fi gRevision, error ) {
return & lega cy_storage . Con fi gRevision{ Confi g: initialConfig ( ) } , nil
}
store . SaveFn = func ( ctx context . Context , revision * cfgRevision ) error {
store . SaveFn = func ( ctx context . Context , revision * lega cy_storage . Con fi gRevision) error {
assertInTransaction ( t , ctx )
return nil
}
@ -308,7 +309,7 @@ func TestCreateMuteTimings(t *testing.T) {
require . EqualValues ( t , expected , result . MuteTimeInterval )
require . EqualValues ( t , expectedProvenance , result . Provenance )
require . Equal ( t , getIntervalUID ( expected ) , result . UID )
require . Equal ( t , legacy_storage . NameToUid ( expected . Name ) , result . UID )
require . NotEmpty ( t , result . Version )
require . Len ( t , store . Calls , 2 )
@ -317,10 +318,10 @@ func TestCreateMuteTimings(t *testing.T) {
require . Equal ( t , "Save" , store . Calls [ 1 ] . Method )
require . Equal ( t , orgID , store . Calls [ 1 ] . Args [ 2 ] )
revision := store . Calls [ 1 ] . Args [ 1 ] . ( * cfgRevision )
revision := store . Calls [ 1 ] . Args [ 1 ] . ( * lega cy_storage . Con fi gRevision)
expectedTimings := append ( initialConfig ( ) . AlertmanagerConfig . MuteTimeIntervals , expected )
require . EqualValues ( t , expectedTimings , revision . cf g. AlertmanagerConfig . MuteTimeIntervals )
require . EqualValues ( t , expectedTimings , revision . Confi g. AlertmanagerConfig . MuteTimeIntervals )
prov . AssertCalled ( t , "SetProvenance" , mock . Anything , & timing , orgID , expectedProvenance )
} )
@ -329,7 +330,7 @@ func TestCreateMuteTimings(t *testing.T) {
t . Run ( "when unable to read config" , func ( t * testing . T ) {
sut , store , _ := createMuteTimingSvcSut ( )
expectedErr := errors . New ( "test-err" )
store . GetFn = func ( ctx context . Context , orgID int64 ) ( * cfgRevision , error ) {
store . GetFn = func ( ctx context . Context , orgID int64 ) ( * lega cy_storage . Con fi gRevision, error ) {
return nil , expectedErr
}
_ , err := sut . CreateMuteTiming ( context . Background ( ) , timing , orgID )
@ -338,8 +339,8 @@ func TestCreateMuteTimings(t *testing.T) {
t . Run ( "when provenance fails to save" , func ( t * testing . T ) {
sut , store , _ := createMuteTimingSvcSut ( )
store . GetFn = func ( ctx context . Context , orgID int64 ) ( * cfgRevision , error ) {
return & cfgRevision { cf g: initialConfig ( ) } , nil
store . GetFn = func ( ctx context . Context , orgID int64 ) ( * lega cy_storage . Con fi gRevision, error ) {
return & lega cy_storage . Con fi gRevision{ Confi g: initialConfig ( ) } , nil
}
expectedErr := fmt . Errorf ( "failed to save provenance" )
sut . provenanceStore . ( * MockProvisioningStore ) . EXPECT ( ) .
@ -359,11 +360,11 @@ func TestCreateMuteTimings(t *testing.T) {
t . Run ( "when AM config fails to save" , func ( t * testing . T ) {
sut , store , _ := createMuteTimingSvcSut ( )
store . GetFn = func ( ctx context . Context , orgID int64 ) ( * cfgRevision , error ) {
return & cfgRevision { cf g: initialConfig ( ) } , nil
store . GetFn = func ( ctx context . Context , orgID int64 ) ( * lega cy_storage . Con fi gRevision, error ) {
return & lega cy_storage . Con fi gRevision{ Confi g: initialConfig ( ) } , nil
}
expectedErr := errors . New ( "test-err" )
store . SaveFn = func ( ctx context . Context , revision * cfgRevision ) error {
store . SaveFn = func ( ctx context . Context , revision * lega cy_storage . Con fi gRevision) error {
return expectedErr
}
@ -417,7 +418,7 @@ func TestUpdateMuteTimings(t *testing.T) {
}
expectedProvenance := models . ProvenanceAPI
expectedVersion := calculateMuteTimeIntervalFingerprint ( expected )
expectedUID := getIntervalUID ( expected )
expectedUID := legacy_storage . NameToUid ( expected . Name )
timing := definitions . MuteTimeInterval {
MuteTimeInterval : expected ,
Version : originalVersion ,
@ -440,8 +441,8 @@ func TestUpdateMuteTimings(t *testing.T) {
t . Run ( "rejects mute timings if provenance is not right" , func ( t * testing . T ) {
sut , store , prov := createMuteTimingSvcSut ( )
store . GetFn = func ( ctx context . Context , orgID int64 ) ( * cfgRevision , error ) {
return & cfgRevision { cf g: initialConfig ( ) } , nil
store . GetFn = func ( ctx context . Context , orgID int64 ) ( * lega cy_storage . Con fi gRevision, error ) {
return & lega cy_storage . Con fi gRevision{ Confi g: initialConfig ( ) } , nil
}
expectedErr := errors . New ( "test" )
sut . validator = func ( from , to models . Provenance ) error {
@ -461,8 +462,8 @@ func TestUpdateMuteTimings(t *testing.T) {
t . Run ( "rejects if mute timing is renamed" , func ( t * testing . T ) {
sut , store , prov := createMuteTimingSvcSut ( )
store . GetFn = func ( ctx context . Context , orgID int64 ) ( * cfgRevision , error ) {
return & cfgRevision { cf g: initialConfig ( ) } , nil
store . GetFn = func ( ctx context . Context , orgID int64 ) ( * lega cy_storage . Con fi gRevision, error ) {
return & lega cy_storage . Con fi gRevision{ Confi g: initialConfig ( ) } , nil
}
prov . EXPECT ( ) . GetProvenance ( mock . Anything , mock . Anything , mock . Anything ) . Return ( expectedProvenance , nil )
@ -481,8 +482,8 @@ func TestUpdateMuteTimings(t *testing.T) {
t . Run ( "rejects mute timings if provenance is not right" , func ( t * testing . T ) {
sut , store , prov := createMuteTimingSvcSut ( )
store . GetFn = func ( ctx context . Context , orgID int64 ) ( * cfgRevision , error ) {
return & cfgRevision { cf g: initialConfig ( ) } , nil
store . GetFn = func ( ctx context . Context , orgID int64 ) ( * lega cy_storage . Con fi gRevision, error ) {
return & lega cy_storage . Con fi gRevision{ Confi g: initialConfig ( ) } , nil
}
expectedErr := errors . New ( "test" )
sut . validator = func ( from , to models . Provenance ) error {
@ -502,8 +503,8 @@ func TestUpdateMuteTimings(t *testing.T) {
t . Run ( "returns ErrVersionConflict if storage version does not match" , func ( t * testing . T ) {
sut , store , prov := createMuteTimingSvcSut ( )
store . GetFn = func ( ctx context . Context , orgID int64 ) ( * cfgRevision , error ) {
return & cfgRevision { cf g: initialConfig ( ) } , nil
store . GetFn = func ( ctx context . Context , orgID int64 ) ( * lega cy_storage . Con fi gRevision, error ) {
return & lega cy_storage . Con fi gRevision{ Confi g: initialConfig ( ) } , nil
}
timing := definitions . MuteTimeInterval {
@ -521,8 +522,8 @@ func TestUpdateMuteTimings(t *testing.T) {
t . Run ( "returns ErrMuteTimingsNotFound if mute timing does not exist" , func ( t * testing . T ) {
sut , store , prov := createMuteTimingSvcSut ( )
store . GetFn = func ( ctx context . Context , orgID int64 ) ( * cfgRevision , error ) {
return & cfgRevision { cf g: initialConfig ( ) } , nil
store . GetFn = func ( ctx context . Context , orgID int64 ) ( * lega cy_storage . Con fi gRevision, error ) {
return & lega cy_storage . Con fi gRevision{ Confi g: initialConfig ( ) } , nil
}
prov . EXPECT ( ) . GetProvenance ( mock . Anything , mock . Anything , mock . Anything ) . Return ( expectedProvenance , nil )
timing := definitions . MuteTimeInterval {
@ -539,8 +540,8 @@ func TestUpdateMuteTimings(t *testing.T) {
t . Run ( "returns ErrMuteTimingsNotFound if mute timing does not exist" , func ( t * testing . T ) {
sut , store , prov := createMuteTimingSvcSut ( )
store . GetFn = func ( ctx context . Context , orgID int64 ) ( * cfgRevision , error ) {
return & cfgRevision { cf g: initialConfig ( ) } , nil
store . GetFn = func ( ctx context . Context , orgID int64 ) ( * lega cy_storage . Con fi gRevision, error ) {
return & lega cy_storage . Con fi gRevision{ Confi g: initialConfig ( ) } , nil
}
prov . EXPECT ( ) . GetProvenance ( mock . Anything , mock . Anything , mock . Anything ) . Return ( expectedProvenance , nil )
@ -572,10 +573,10 @@ func TestUpdateMuteTimings(t *testing.T) {
t . Run ( "saves mute timing and provenance in a transaction if optimistic concurrency passes" , func ( t * testing . T ) {
sut , store , prov := createMuteTimingSvcSut ( )
store . GetFn = func ( ctx context . Context , orgID int64 ) ( * cfgRevision , error ) {
return & cfgRevision { cf g: initialConfig ( ) } , nil
store . GetFn = func ( ctx context . Context , orgID int64 ) ( * lega cy_storage . Con fi gRevision, error ) {
return & lega cy_storage . Con fi gRevision{ Confi g: initialConfig ( ) } , nil
}
store . SaveFn = func ( ctx context . Context , revision * cfgRevision ) error {
store . SaveFn = func ( ctx context . Context , revision * lega cy_storage . Con fi gRevision) error {
assertInTransaction ( t , ctx )
return nil
}
@ -592,7 +593,7 @@ func TestUpdateMuteTimings(t *testing.T) {
require . EqualValues ( t , expected , result . MuteTimeInterval )
require . EqualValues ( t , expectedProvenance , result . Provenance )
require . EqualValues ( t , expectedVersion , result . Version )
require . Equal ( t , getIntervalUID ( result . MuteTimeInterval ) , result . UID )
require . Equal ( t , legacy_storage . NameToUid ( result . Name ) , result . UID )
require . Len ( t , store . Calls , 2 )
require . Equal ( t , "Get" , store . Calls [ 0 ] . Method )
@ -600,9 +601,9 @@ func TestUpdateMuteTimings(t *testing.T) {
require . Equal ( t , "Save" , store . Calls [ 1 ] . Method )
require . Equal ( t , orgID , store . Calls [ 1 ] . Args [ 2 ] )
revision := store . Calls [ 1 ] . Args [ 1 ] . ( * cfgRevision )
revision := store . Calls [ 1 ] . Args [ 1 ] . ( * lega cy_storage . Con fi gRevision)
require . EqualValues ( t , [ ] config . MuteTimeInterval { expected } , revision . cf g. AlertmanagerConfig . MuteTimeIntervals )
require . EqualValues ( t , [ ] config . MuteTimeInterval { expected } , revision . Confi g. AlertmanagerConfig . MuteTimeIntervals )
prov . AssertCalled ( t , "SetProvenance" , mock . Anything , & timing , orgID , expectedProvenance )
@ -636,9 +637,9 @@ func TestUpdateMuteTimings(t *testing.T) {
require . Equal ( t , "Save" , store . Calls [ 1 ] . Method )
require . Equal ( t , orgID , store . Calls [ 1 ] . Args [ 2 ] )
revision := store . Calls [ 1 ] . Args [ 1 ] . ( * cfgRevision )
revision := store . Calls [ 1 ] . Args [ 1 ] . ( * lega cy_storage . Con fi gRevision)
require . EqualValues ( t , [ ] config . MuteTimeInterval { timing . MuteTimeInterval } , revision . cf g. AlertmanagerConfig . MuteTimeIntervals )
require . EqualValues ( t , [ ] config . MuteTimeInterval { timing . MuteTimeInterval } , revision . Confi g. AlertmanagerConfig . MuteTimeIntervals )
} )
} )
@ -647,7 +648,7 @@ func TestUpdateMuteTimings(t *testing.T) {
sut , store , prov := createMuteTimingSvcSut ( )
expectedErr := errors . New ( "test-err" )
prov . EXPECT ( ) . GetProvenance ( mock . Anything , mock . Anything , mock . Anything ) . Return ( expectedProvenance , nil )
store . GetFn = func ( ctx context . Context , orgID int64 ) ( * cfgRevision , error ) {
store . GetFn = func ( ctx context . Context , orgID int64 ) ( * lega cy_storage . Con fi gRevision, error ) {
return nil , expectedErr
}
_ , err := sut . UpdateMuteTiming ( context . Background ( ) , timing , orgID )
@ -656,8 +657,8 @@ func TestUpdateMuteTimings(t *testing.T) {
t . Run ( "when provenance fails to save" , func ( t * testing . T ) {
sut , store , _ := createMuteTimingSvcSut ( )
store . GetFn = func ( ctx context . Context , orgID int64 ) ( * cfgRevision , error ) {
return & cfgRevision { cf g: initialConfig ( ) } , nil
store . GetFn = func ( ctx context . Context , orgID int64 ) ( * lega cy_storage . Con fi gRevision, error ) {
return & lega cy_storage . Con fi gRevision{ Confi g: initialConfig ( ) } , nil
}
expectedErr := fmt . Errorf ( "failed to save provenance" )
sut . provenanceStore . ( * MockProvisioningStore ) . EXPECT ( ) .
@ -680,14 +681,14 @@ func TestUpdateMuteTimings(t *testing.T) {
t . Run ( "when AM config fails to save" , func ( t * testing . T ) {
sut , store , _ := createMuteTimingSvcSut ( )
store . GetFn = func ( ctx context . Context , orgID int64 ) ( * cfgRevision , error ) {
return & cfgRevision { cf g: initialConfig ( ) } , nil
store . GetFn = func ( ctx context . Context , orgID int64 ) ( * lega cy_storage . Con fi gRevision, error ) {
return & lega cy_storage . Con fi gRevision{ Confi g: initialConfig ( ) } , nil
}
sut . provenanceStore . ( * MockProvisioningStore ) . EXPECT ( ) .
GetProvenance ( mock . Anything , mock . Anything , mock . Anything ) .
Return ( expectedProvenance , nil )
expectedErr := errors . New ( "test-err" )
store . SaveFn = func ( ctx context . Context , revision * cfgRevision ) error {
store . SaveFn = func ( ctx context . Context , revision * lega cy_storage . Con fi gRevision) error {
return expectedErr
}
@ -736,8 +737,8 @@ func TestDeleteMuteTimings(t *testing.T) {
sut . validator = func ( from , to models . Provenance ) error {
return expectedErr
}
store . GetFn = func ( ctx context . Context , orgID int64 ) ( * cfgRevision , error ) {
return & cfgRevision { cf g: initialConfig ( ) } , nil
store . GetFn = func ( ctx context . Context , orgID int64 ) ( * lega cy_storage . Con fi gRevision, error ) {
return & lega cy_storage . Con fi gRevision{ Confi g: initialConfig ( ) } , nil
}
prov . EXPECT ( ) . GetProvenance ( mock . Anything , mock . Anything , mock . Anything ) . Return ( models . ProvenanceAPI , nil )
@ -747,8 +748,8 @@ func TestDeleteMuteTimings(t *testing.T) {
t . Run ( "returns ErrTimeIntervalInUse if mute timing is used by a route" , func ( t * testing . T ) {
sut , store , prov := createMuteTimingSvcSut ( )
store . GetFn = func ( ctx context . Context , orgID int64 ) ( * cfgRevision , error ) {
return & cfgRevision { cf g: initialConfig ( ) } , nil
store . GetFn = func ( ctx context . Context , orgID int64 ) ( * lega cy_storage . Con fi gRevision, error ) {
return & lega cy_storage . Con fi gRevision{ Confi g: initialConfig ( ) } , nil
}
prov . EXPECT ( ) . GetProvenance ( mock . Anything , mock . Anything , mock . Anything ) . Return ( models . ProvenanceAPI , nil )
@ -774,8 +775,8 @@ func TestDeleteMuteTimings(t *testing.T) {
} ,
}
sut . ruleNotificationsStore = & ruleNsStore
store . GetFn = func ( ctx context . Context , orgID int64 ) ( * cfgRevision , error ) {
return & cfgRevision { cf g: initialConfig ( ) } , nil
store . GetFn = func ( ctx context . Context , orgID int64 ) ( * lega cy_storage . Con fi gRevision, error ) {
return & lega cy_storage . Con fi gRevision{ Confi g: initialConfig ( ) } , nil
}
prov . EXPECT ( ) . GetProvenance ( mock . Anything , mock . Anything , mock . Anything ) . Return ( models . ProvenanceAPI , nil )
@ -791,8 +792,8 @@ func TestDeleteMuteTimings(t *testing.T) {
t . Run ( "returns ErrVersionConflict if provided version does not match" , func ( t * testing . T ) {
sut , store , prov := createMuteTimingSvcSut ( )
store . GetFn = func ( ctx context . Context , orgID int64 ) ( * cfgRevision , error ) {
return & cfgRevision { cf g: initialConfig ( ) } , nil
store . GetFn = func ( ctx context . Context , orgID int64 ) ( * lega cy_storage . Con fi gRevision, error ) {
return & lega cy_storage . Con fi gRevision{ Confi g: initialConfig ( ) } , nil
}
prov . EXPECT ( ) . GetProvenance ( mock . Anything , mock . Anything , mock . Anything ) . Return ( models . ProvenanceAPI , nil )
@ -806,10 +807,10 @@ func TestDeleteMuteTimings(t *testing.T) {
t . Run ( "deletes mute timing and provenance in transaction if passes optimistic concurrency check" , func ( t * testing . T ) {
sut , store , prov := createMuteTimingSvcSut ( )
store . GetFn = func ( ctx context . Context , orgID int64 ) ( * cfgRevision , error ) {
return & cfgRevision { cf g: initialConfig ( ) } , nil
store . GetFn = func ( ctx context . Context , orgID int64 ) ( * lega cy_storage . Con fi gRevision, error ) {
return & lega cy_storage . Con fi gRevision{ Confi g: initialConfig ( ) } , nil
}
store . SaveFn = func ( ctx context . Context , revision * cfgRevision ) error {
store . SaveFn = func ( ctx context . Context , revision * lega cy_storage . Con fi gRevision) error {
assertInTransaction ( t , ctx )
return nil
}
@ -829,12 +830,12 @@ func TestDeleteMuteTimings(t *testing.T) {
require . Equal ( t , "Save" , store . Calls [ 1 ] . Method )
require . Equal ( t , orgID , store . Calls [ 1 ] . Args [ 2 ] )
revision := store . Calls [ 1 ] . Args [ 1 ] . ( * cfgRevision )
revision := store . Calls [ 1 ] . Args [ 1 ] . ( * lega cy_storage . Con fi gRevision)
expectedMuteTimings := slices . DeleteFunc ( initialConfig ( ) . AlertmanagerConfig . MuteTimeIntervals , func ( interval config . MuteTimeInterval ) bool {
return interval . Name == timingToDelete . Name
} )
require . EqualValues ( t , expectedMuteTimings , revision . cf g. AlertmanagerConfig . MuteTimeIntervals )
require . EqualValues ( t , expectedMuteTimings , revision . Confi g. AlertmanagerConfig . MuteTimeIntervals )
prov . AssertCalled ( t , "DeleteProvenance" , mock . Anything , & definitions . MuteTimeInterval { MuteTimeInterval : timingToDelete } , orgID )
@ -845,12 +846,12 @@ func TestDeleteMuteTimings(t *testing.T) {
require . Equal ( t , "Save" , store . Calls [ 1 ] . Method )
require . Equal ( t , orgID , store . Calls [ 1 ] . Args [ 2 ] )
revision := store . Calls [ 1 ] . Args [ 1 ] . ( * cfgRevision )
revision := store . Calls [ 1 ] . Args [ 1 ] . ( * lega cy_storage . Con fi gRevision)
expectedMuteTimings := slices . DeleteFunc ( initialConfig ( ) . AlertmanagerConfig . MuteTimeIntervals , func ( interval config . MuteTimeInterval ) bool {
return interval . Name == timingToDelete . Name
} )
require . EqualValues ( t , expectedMuteTimings , revision . cf g. AlertmanagerConfig . MuteTimeIntervals )
require . EqualValues ( t , expectedMuteTimings , revision . Confi g. AlertmanagerConfig . MuteTimeIntervals )
prov . AssertCalled ( t , "DeleteProvenance" , mock . Anything , & definitions . MuteTimeInterval { MuteTimeInterval : timingToDelete } , orgID )
} )
@ -858,10 +859,10 @@ func TestDeleteMuteTimings(t *testing.T) {
t . Run ( "deletes mute timing and provenance by UID" , func ( t * testing . T ) {
sut , store , prov := createMuteTimingSvcSut ( )
store . GetFn = func ( ctx context . Context , orgID int64 ) ( * cfgRevision , error ) {
return & cfgRevision { cf g: initialConfig ( ) } , nil
store . GetFn = func ( ctx context . Context , orgID int64 ) ( * lega cy_storage . Con fi gRevision, error ) {
return & lega cy_storage . Con fi gRevision{ Confi g: initialConfig ( ) } , nil
}
store . SaveFn = func ( ctx context . Context , revision * cfgRevision ) error {
store . SaveFn = func ( ctx context . Context , revision * lega cy_storage . Con fi gRevision) error {
assertInTransaction ( t , ctx )
return nil
}
@ -872,7 +873,7 @@ func TestDeleteMuteTimings(t *testing.T) {
return nil
} )
uid := getIntervalUID ( timingToDelete )
uid := legacy_storage . NameToUid ( timingToDelete . Nam e )
err := sut . DeleteMuteTiming ( context . Background ( ) , uid , orgID , "" , correctVersion )
require . NoError ( t , err )
@ -883,12 +884,12 @@ func TestDeleteMuteTimings(t *testing.T) {
require . Equal ( t , "Save" , store . Calls [ 1 ] . Method )
require . Equal ( t , orgID , store . Calls [ 1 ] . Args [ 2 ] )
revision := store . Calls [ 1 ] . Args [ 1 ] . ( * cfgRevision )
revision := store . Calls [ 1 ] . Args [ 1 ] . ( * lega cy_storage . Con fi gRevision)
expectedMuteTimings := slices . DeleteFunc ( initialConfig ( ) . AlertmanagerConfig . MuteTimeIntervals , func ( interval config . MuteTimeInterval ) bool {
return interval . Name == timingToDelete . Name
} )
require . EqualValues ( t , expectedMuteTimings , revision . cf g. AlertmanagerConfig . MuteTimeIntervals )
require . EqualValues ( t , expectedMuteTimings , revision . Confi g. AlertmanagerConfig . MuteTimeIntervals )
prov . AssertCalled ( t , "DeleteProvenance" , mock . Anything , & definitions . MuteTimeInterval { MuteTimeInterval : timingToDelete } , orgID )
} )
@ -898,7 +899,7 @@ func TestDeleteMuteTimings(t *testing.T) {
sut , store , prov := createMuteTimingSvcSut ( )
expectedErr := errors . New ( "test-err" )
prov . EXPECT ( ) . GetProvenance ( mock . Anything , mock . Anything , mock . Anything ) . Return ( models . ProvenanceNone , nil )
store . GetFn = func ( ctx context . Context , orgID int64 ) ( * cfgRevision , error ) {
store . GetFn = func ( ctx context . Context , orgID int64 ) ( * lega cy_storage . Con fi gRevision, error ) {
return nil , expectedErr
}
err := sut . DeleteMuteTiming ( context . Background ( ) , timingToDelete . Name , orgID , "" , "" )
@ -908,8 +909,8 @@ func TestDeleteMuteTimings(t *testing.T) {
t . Run ( "when provenance fails to save" , func ( t * testing . T ) {
sut , store , prov := createMuteTimingSvcSut ( )
prov . EXPECT ( ) . GetProvenance ( mock . Anything , mock . Anything , mock . Anything ) . Return ( models . ProvenanceNone , nil )
store . GetFn = func ( ctx context . Context , orgID int64 ) ( * cfgRevision , error ) {
return & cfgRevision { cf g: initialConfig ( ) } , nil
store . GetFn = func ( ctx context . Context , orgID int64 ) ( * lega cy_storage . Con fi gRevision, error ) {
return & lega cy_storage . Con fi gRevision{ Confi g: initialConfig ( ) } , nil
}
expectedErr := fmt . Errorf ( "failed to save provenance" )
sut . provenanceStore . ( * MockProvisioningStore ) . EXPECT ( ) .
@ -930,11 +931,11 @@ func TestDeleteMuteTimings(t *testing.T) {
t . Run ( "when AM config fails to save" , func ( t * testing . T ) {
sut , store , prov := createMuteTimingSvcSut ( )
prov . EXPECT ( ) . GetProvenance ( mock . Anything , mock . Anything , mock . Anything ) . Return ( models . ProvenanceNone , nil )
store . GetFn = func ( ctx context . Context , orgID int64 ) ( * cfgRevision , error ) {
return & cfgRevision { cf g: initialConfig ( ) } , nil
store . GetFn = func ( ctx context . Context , orgID int64 ) ( * lega cy_storage . Con fi gRevision, error ) {
return & lega cy_storage . Con fi gRevision{ Confi g: initialConfig ( ) } , nil
}
expectedErr := errors . New ( "test-err" )
store . SaveFn = func ( ctx context . Context , revision * cfgRevision ) error {
store . SaveFn = func ( ctx context . Context , revision * lega cy_storage . Con fi gRevision) error {
return expectedErr
}
@ -951,8 +952,8 @@ func TestDeleteMuteTimings(t *testing.T) {
} )
}
func createMuteTimingSvcSut ( ) ( * MuteTimingService , * alertmanagerConfigStoreFake , * MockProvisioningStore ) {
store := & alertmanagerConfigStoreFake { }
func createMuteTimingSvcSut ( ) ( * MuteTimingService , * leg acy_storage . A lertmanagerConfigStoreFake, * MockProvisioningStore ) {
store := & leg acy_storage . A lertmanagerConfigStoreFake{ }
prov := & MockProvisioningStore { }
return & MuteTimingService {
configStore : store ,