Commit 14d296f5 authored by Rafal Augustyniak's avatar Rafal Augustyniak
Browse files

clean up in server plugins

Showing with 91 additions and 122 deletions
+91 -122
...@@ -43,12 +43,12 @@ func New(untypedConfig *any.Any, logger *zap.Logger, scope tally.Scope) (module. ...@@ -43,12 +43,12 @@ func New(untypedConfig *any.Any, logger *zap.Logger, scope tally.Scope) (module.
return nil, errors.New("service was not the correct type") return nil, errors.New("service was not the correct type")
} }
xds.RTDSGeneratorsByTypeUrl[xds.TypeUrl(&serverexperimentationv1.HTTPFaultConfig{})] = &serverexperimentationxds.RTDSServerFaultsResourceGenerator{ xds.RTDSGeneratorsByTypeUrl[xds.TypeUrl(&serverexperimentationv1.HTTPFaultConfig{})] = &serverexperimentationxds.RTDSFaultsGenerator{
IngressFaultRuntimePrefix: config.IngressFaultRuntimePrefix, IngressFaultRuntimePrefix: config.IngressFaultRuntimePrefix,
EgressFaultRuntimePrefix: config.EgressFaultRuntimePrefix, EgressFaultRuntimePrefix: config.EgressFaultRuntimePrefix,
} }
xds.ECDSGeneratorsByTypeUrl[xds.TypeUrl(&serverexperimentationv1.HTTPFaultConfig{})] = &serverexperimentationxds.ECDSServerFaultsResourceGenerator{} xds.ECDSGeneratorsByTypeUrl[xds.TypeUrl(&serverexperimentationv1.HTTPFaultConfig{})] = &serverexperimentationxds.ECDSFaultsGenerator{}
return &Service{ return &Service{
storer: storer, storer: storer,
......
...@@ -14,7 +14,6 @@ import ( ...@@ -14,7 +14,6 @@ import (
"github.com/golang/protobuf/ptypes/duration" "github.com/golang/protobuf/ptypes/duration"
serverexperimentation "github.com/lyft/clutch/backend/api/chaos/serverexperimentation/v1" serverexperimentation "github.com/lyft/clutch/backend/api/chaos/serverexperimentation/v1"
ecdsv1 "github.com/lyft/clutch/backend/api/config/module/chaos/serverexperimentation/ecds/v1"
"github.com/lyft/clutch/backend/module/chaos/experimentation/xds" "github.com/lyft/clutch/backend/module/chaos/experimentation/xds"
"github.com/lyft/clutch/backend/service/chaos/experimentation/experimentstore" "github.com/lyft/clutch/backend/service/chaos/experimentation/experimentstore"
) )
...@@ -54,23 +53,11 @@ var DefaultDelayFaultConfig = &gcpFilterCommon.FaultDelay{ ...@@ -54,23 +53,11 @@ var DefaultDelayFaultConfig = &gcpFilterCommon.FaultDelay{
}, },
} }
type ECDSServerFaultsResourceGeneratorFactory struct{} type ECDSFaultsGenerator struct {
func (ECDSServerFaultsResourceGeneratorFactory) Create(cfg *any.Any) (xds.ECDSResourceGenerator, error) {
typedConfig := &ecdsv1.ServerFaultsECDSResourceGeneratorConfig{}
err := cfg.UnmarshalTo(typedConfig)
if err != nil {
return nil, err
}
return &ECDSServerFaultsResourceGenerator{}, nil
}
type ECDSServerFaultsResourceGenerator struct {
SerializedDefaultFaultFilter []byte SerializedDefaultFaultFilter []byte
} }
func (g *ECDSServerFaultsResourceGenerator) GenerateResource(experiment *experimentstore.Experiment) (*xds.ECDSResource, error) { func (g *ECDSFaultsGenerator) GenerateResource(experiment *experimentstore.Experiment) (*xds.ECDSResource, error) {
httpFaultConfig, ok := experiment.Config.Message.(*serverexperimentation.HTTPFaultConfig) httpFaultConfig, ok := experiment.Config.Message.(*serverexperimentation.HTTPFaultConfig)
if !ok { if !ok {
return nil, fmt.Errorf("ECDS server faults generator cannot generate faults for a given experiment (run ID: %s, config ID %s)", experiment.Run.Id, experiment.Config.Id) return nil, fmt.Errorf("ECDS server faults generator cannot generate faults for a given experiment (run ID: %s, config ID %s)", experiment.Run.Id, experiment.Config.Id)
...@@ -143,7 +130,7 @@ func (g *ECDSServerFaultsResourceGenerator) GenerateResource(experiment *experim ...@@ -143,7 +130,7 @@ func (g *ECDSServerFaultsResourceGenerator) GenerateResource(experiment *experim
return xds.NewECDSResource(enforcingCluster, config) return xds.NewECDSResource(enforcingCluster, config)
} }
func (g *ECDSServerFaultsResourceGenerator) GenerateDefaultResource(cluster string, resourceName string) (*xds.ECDSResource, error) { func (g *ECDSFaultsGenerator) GenerateDefaultResource(cluster string, resourceName string) (*xds.ECDSResource, error) {
if resourceName != faultFilterConfigNameForIngressFault && !strings.HasPrefix(resourceName, fmt.Sprintf(faultFilterConfigNameForEgressFault, "")) { if resourceName != faultFilterConfigNameForIngressFault && !strings.HasPrefix(resourceName, fmt.Sprintf(faultFilterConfigNameForEgressFault, "")) {
return xds.NewEmptyECDSResource(), nil return xds.NewEmptyECDSResource(), nil
} }
...@@ -177,7 +164,7 @@ func (g *ECDSServerFaultsResourceGenerator) GenerateDefaultResource(cluster stri ...@@ -177,7 +164,7 @@ func (g *ECDSServerFaultsResourceGenerator) GenerateDefaultResource(cluster stri
return xds.NewECDSResource(cluster, config) return xds.NewECDSResource(cluster, config)
} }
func (g *ECDSServerFaultsResourceGenerator) createAbortDelayConfig(httpFaultConfig *serverexperimentation.HTTPFaultConfig) (bool, *gcpFilterFault.FaultAbort, *gcpFilterCommon.FaultDelay, error) { func (g *ECDSFaultsGenerator) createAbortDelayConfig(httpFaultConfig *serverexperimentation.HTTPFaultConfig) (bool, *gcpFilterFault.FaultAbort, *gcpFilterCommon.FaultDelay, error) {
var isEgressFault bool var isEgressFault bool
var abort *gcpFilterFault.FaultAbort var abort *gcpFilterFault.FaultAbort
var delay *gcpFilterCommon.FaultDelay var delay *gcpFilterCommon.FaultDelay
......
...@@ -17,83 +17,7 @@ import ( ...@@ -17,83 +17,7 @@ import (
"github.com/lyft/clutch/backend/service/chaos/experimentation/experimentstore" "github.com/lyft/clutch/backend/service/chaos/experimentation/experimentstore"
) )
const ( func TestECDSFaultsGeneration(t *testing.T) {
INTERNAL = "internal"
EXTERNAL = "external"
ABORT = "abort"
LATENCY = "latency"
)
func createExperiment(t *testing.T, upstreamCluster string, downstreamCluster string, faultPercent uint32, faultValue uint32, faultInjectorEnforcing string, faultType string) *experimentstore.Experiment {
httpConfig := &serverexperimentation.HTTPFaultConfig{}
upstreamSingleCluster := &serverexperimentation.SingleCluster{
Name: upstreamCluster,
}
downstreamSingleCluster := &serverexperimentation.SingleCluster{
Name: downstreamCluster,
}
switch faultType {
case ABORT:
httpConfig.Fault = &serverexperimentation.HTTPFaultConfig_AbortFault{
AbortFault: &serverexperimentation.AbortFault{
Percentage: &serverexperimentation.FaultPercentage{Percentage: faultPercent},
AbortStatus: &serverexperimentation.FaultAbortStatus{HttpStatusCode: faultValue},
},
}
case LATENCY:
httpConfig.Fault = &serverexperimentation.HTTPFaultConfig_LatencyFault{
LatencyFault: &serverexperimentation.LatencyFault{
Percentage: &serverexperimentation.FaultPercentage{Percentage: faultPercent},
LatencyDuration: &serverexperimentation.FaultLatencyDuration{FixedDurationMs: faultValue},
},
}
}
switch faultInjectorEnforcing {
case INTERNAL:
httpConfig.FaultTargeting = &serverexperimentation.FaultTargeting{
Enforcer: &serverexperimentation.FaultTargeting_UpstreamEnforcing{
UpstreamEnforcing: &serverexperimentation.UpstreamEnforcing{
UpstreamType: &serverexperimentation.UpstreamEnforcing_UpstreamCluster{
UpstreamCluster: upstreamSingleCluster,
},
DownstreamType: &serverexperimentation.UpstreamEnforcing_DownstreamCluster{
DownstreamCluster: downstreamSingleCluster,
},
},
},
}
case EXTERNAL:
httpConfig.FaultTargeting = &serverexperimentation.FaultTargeting{
Enforcer: &serverexperimentation.FaultTargeting_DownstreamEnforcing{
DownstreamEnforcing: &serverexperimentation.DownstreamEnforcing{
UpstreamType: &serverexperimentation.DownstreamEnforcing_UpstreamCluster{
UpstreamCluster: upstreamSingleCluster,
},
DownstreamType: &serverexperimentation.DownstreamEnforcing_DownstreamCluster{
DownstreamCluster: downstreamSingleCluster,
},
},
},
}
}
anyConfig, err := anypb.New(httpConfig)
assert.NoError(t, err)
jsonConfig, err := protojson.Marshal(anyConfig)
assert.NoError(t, err)
config, err := experimentstore.NewExperimentConfig("1", string(jsonConfig))
assert.NoError(t, err)
return &experimentstore.Experiment{
Config: config,
}
}
func TestServerFaultsECDSResourceGenerating(t *testing.T) {
tests := []struct { tests := []struct {
experiment *experimentstore.Experiment experiment *experimentstore.Experiment
expectedCluster string expectedCluster string
...@@ -179,7 +103,7 @@ func TestServerFaultsECDSResourceGenerating(t *testing.T) { ...@@ -179,7 +103,7 @@ func TestServerFaultsECDSResourceGenerating(t *testing.T) {
t.Run(fmt.Sprintf("%d", idx), func(t *testing.T) { t.Run(fmt.Sprintf("%d", idx), func(t *testing.T) {
t.Parallel() t.Parallel()
g := &ECDSServerFaultsResourceGenerator{} g := &ECDSFaultsGenerator{}
r, err := g.GenerateResource(tt.experiment) r, err := g.GenerateResource(tt.experiment)
assert.NoError(t, err) assert.NoError(t, err)
...@@ -214,7 +138,7 @@ func TestServerFaultsECDSResourceGenerating(t *testing.T) { ...@@ -214,7 +138,7 @@ func TestServerFaultsECDSResourceGenerating(t *testing.T) {
} }
} }
func TestServerFaultsECDSDefaultResourceGenerating(t *testing.T) { func TestECDSDefaultFaultsGeneration(t *testing.T) {
tests := []struct { tests := []struct {
cluster string cluster string
resourceName string resourceName string
...@@ -242,7 +166,7 @@ func TestServerFaultsECDSDefaultResourceGenerating(t *testing.T) { ...@@ -242,7 +166,7 @@ func TestServerFaultsECDSDefaultResourceGenerating(t *testing.T) {
t.Run(fmt.Sprintf("%d", idx), func(t *testing.T) { t.Run(fmt.Sprintf("%d", idx), func(t *testing.T) {
t.Parallel() t.Parallel()
g := &ECDSServerFaultsResourceGenerator{} g := &ECDSFaultsGenerator{}
r, err := g.GenerateDefaultResource(tt.cluster, tt.resourceName) r, err := g.GenerateDefaultResource(tt.cluster, tt.resourceName)
assert.NoError(t, err) assert.NoError(t, err)
...@@ -259,3 +183,79 @@ func TestServerFaultsECDSDefaultResourceGenerating(t *testing.T) { ...@@ -259,3 +183,79 @@ func TestServerFaultsECDSDefaultResourceGenerating(t *testing.T) {
}) })
} }
} }
const (
INTERNAL = "internal"
EXTERNAL = "external"
ABORT = "abort"
LATENCY = "latency"
)
func createExperiment(t *testing.T, upstreamCluster string, downstreamCluster string, faultPercent uint32, faultValue uint32, faultInjectorEnforcing string, faultType string) *experimentstore.Experiment {
httpConfig := &serverexperimentation.HTTPFaultConfig{}
upstreamSingleCluster := &serverexperimentation.SingleCluster{
Name: upstreamCluster,
}
downstreamSingleCluster := &serverexperimentation.SingleCluster{
Name: downstreamCluster,
}
switch faultType {
case ABORT:
httpConfig.Fault = &serverexperimentation.HTTPFaultConfig_AbortFault{
AbortFault: &serverexperimentation.AbortFault{
Percentage: &serverexperimentation.FaultPercentage{Percentage: faultPercent},
AbortStatus: &serverexperimentation.FaultAbortStatus{HttpStatusCode: faultValue},
},
}
case LATENCY:
httpConfig.Fault = &serverexperimentation.HTTPFaultConfig_LatencyFault{
LatencyFault: &serverexperimentation.LatencyFault{
Percentage: &serverexperimentation.FaultPercentage{Percentage: faultPercent},
LatencyDuration: &serverexperimentation.FaultLatencyDuration{FixedDurationMs: faultValue},
},
}
}
switch faultInjectorEnforcing {
case INTERNAL:
httpConfig.FaultTargeting = &serverexperimentation.FaultTargeting{
Enforcer: &serverexperimentation.FaultTargeting_UpstreamEnforcing{
UpstreamEnforcing: &serverexperimentation.UpstreamEnforcing{
UpstreamType: &serverexperimentation.UpstreamEnforcing_UpstreamCluster{
UpstreamCluster: upstreamSingleCluster,
},
DownstreamType: &serverexperimentation.UpstreamEnforcing_DownstreamCluster{
DownstreamCluster: downstreamSingleCluster,
},
},
},
}
case EXTERNAL:
httpConfig.FaultTargeting = &serverexperimentation.FaultTargeting{
Enforcer: &serverexperimentation.FaultTargeting_DownstreamEnforcing{
DownstreamEnforcing: &serverexperimentation.DownstreamEnforcing{
UpstreamType: &serverexperimentation.DownstreamEnforcing_UpstreamCluster{
UpstreamCluster: upstreamSingleCluster,
},
DownstreamType: &serverexperimentation.DownstreamEnforcing_DownstreamCluster{
DownstreamCluster: downstreamSingleCluster,
},
},
},
}
}
anyConfig, err := anypb.New(httpConfig)
assert.NoError(t, err)
jsonConfig, err := protojson.Marshal(anyConfig)
assert.NoError(t, err)
config, err := experimentstore.NewExperimentConfig("1", string(jsonConfig))
assert.NoError(t, err)
return &experimentstore.Experiment{
Config: config,
}
}
...@@ -3,10 +3,7 @@ package xds ...@@ -3,10 +3,7 @@ package xds
import ( import (
"fmt" "fmt"
"github.com/golang/protobuf/ptypes/any"
serverexperimentationv1 "github.com/lyft/clutch/backend/api/chaos/serverexperimentation/v1" serverexperimentationv1 "github.com/lyft/clutch/backend/api/chaos/serverexperimentation/v1"
rtdsv1 "github.com/lyft/clutch/backend/api/config/module/chaos/serverexperimentation/rtds/v1"
"github.com/lyft/clutch/backend/module/chaos/experimentation/xds" "github.com/lyft/clutch/backend/module/chaos/experimentation/xds"
"github.com/lyft/clutch/backend/service/chaos/experimentation/experimentstore" "github.com/lyft/clutch/backend/service/chaos/experimentation/experimentstore"
) )
...@@ -33,29 +30,14 @@ const ( ...@@ -33,29 +30,14 @@ const (
HTTPStatusForEgress = `%s.%s.abort.http_status` HTTPStatusForEgress = `%s.%s.abort.http_status`
) )
type RTDSServerFaultsResourceGenerator struct { type RTDSFaultsGenerator struct {
// Runtime prefix for ingress faults // Runtime prefix for ingress faults
IngressFaultRuntimePrefix string IngressFaultRuntimePrefix string
// Runtime prefix for egress faults // Runtime prefix for egress faults
EgressFaultRuntimePrefix string EgressFaultRuntimePrefix string
} }
type RTDSServerFaultsResourceGeneratorFactory struct{} func (g *RTDSFaultsGenerator) GenerateResource(experiment *experimentstore.Experiment) (*xds.RTDSResource, error) {
func (RTDSServerFaultsResourceGeneratorFactory) Create(cfg *any.Any) (xds.RTDSResourceGenerator, error) {
typedConfig := &rtdsv1.ServerFaultsRTDSResourceGeneratorConfig{}
err := cfg.UnmarshalTo(typedConfig)
if err != nil {
return nil, err
}
return &RTDSServerFaultsResourceGenerator{
IngressFaultRuntimePrefix: typedConfig.IngressFaultRuntimePrefix,
EgressFaultRuntimePrefix: typedConfig.EgressFaultRuntimePrefix,
}, nil
}
func (g *RTDSServerFaultsResourceGenerator) GenerateResource(experiment *experimentstore.Experiment) (*xds.RTDSResource, error) {
httpFaultConfig, ok := experiment.Config.Message.(*serverexperimentationv1.HTTPFaultConfig) httpFaultConfig, ok := experiment.Config.Message.(*serverexperimentationv1.HTTPFaultConfig)
if !ok { if !ok {
return nil, fmt.Errorf("RTDS server faults generator cannot generate faults for a given experiment (run ID: %s, config ID %s)", experiment.Run.Id, experiment.Config.Id) return nil, fmt.Errorf("RTDS server faults generator cannot generate faults for a given experiment (run ID: %s, config ID %s)", experiment.Run.Id, experiment.Config.Id)
...@@ -83,7 +65,7 @@ func (g *RTDSServerFaultsResourceGenerator) GenerateResource(experiment *experim ...@@ -83,7 +65,7 @@ func (g *RTDSServerFaultsResourceGenerator) GenerateResource(experiment *experim
return xds.NewRTDSResource(cluster, keyValuePairs) return xds.NewRTDSResource(cluster, keyValuePairs)
} }
func (g *RTDSServerFaultsResourceGenerator) createRuntimeKeys(upstreamCluster string, downstreamCluster string, httpFaultConfig *serverexperimentationv1.HTTPFaultConfig) (string, uint32, string, uint32, error) { func (g *RTDSFaultsGenerator) createRuntimeKeys(upstreamCluster string, downstreamCluster string, httpFaultConfig *serverexperimentationv1.HTTPFaultConfig) (string, uint32, string, uint32, error) {
var percentageKey string var percentageKey string
var percentageValue uint32 var percentageValue uint32
var faultKey string var faultKey string
......
...@@ -10,7 +10,7 @@ import ( ...@@ -10,7 +10,7 @@ import (
"github.com/lyft/clutch/backend/service/chaos/experimentation/experimentstore" "github.com/lyft/clutch/backend/service/chaos/experimentation/experimentstore"
) )
func TestServerFaultsRTDSResourceGenerating(t *testing.T) { func TestRTDSFaultsGeneration(t *testing.T) {
tests := []struct { tests := []struct {
experiment *experimentstore.Experiment experiment *experimentstore.Experiment
ingressRuntimeKeyPrefix string ingressRuntimeKeyPrefix string
...@@ -74,7 +74,7 @@ func TestServerFaultsRTDSResourceGenerating(t *testing.T) { ...@@ -74,7 +74,7 @@ func TestServerFaultsRTDSResourceGenerating(t *testing.T) {
t.Run(fmt.Sprintf("%d", idx), func(t *testing.T) { t.Run(fmt.Sprintf("%d", idx), func(t *testing.T) {
t.Parallel() t.Parallel()
g := RTDSServerFaultsResourceGenerator{ g := RTDSFaultsGenerator{
IngressFaultRuntimePrefix: tt.ingressRuntimeKeyPrefix, IngressFaultRuntimePrefix: tt.ingressRuntimeKeyPrefix,
EgressFaultRuntimePrefix: tt.egressRuntimeKeyPrefix, EgressFaultRuntimePrefix: tt.egressRuntimeKeyPrefix,
} }
......
Supports Markdown
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment