func (s *SpecSuite) TestNewCircuitBreakerSerializationCycle(c *C) { cl, err := NewSpec( `LatencyAtQuantileMS(50.0) < 20`, `{"Type": "response", "Action": {"StatusCode": 400, "Body": "Come back later"}}`, `{"Type": "webhook", "Action": {"URL": "http://localhost", "Method": "POST", "Form": {"Key": ["Val"]}}}`, `{"Type": "webhook", "Action": {"URL": "http://localhost", "Method": "POST", "Form": {"Key": ["Val"]}}}`, defaultFallbackDuration, defaultRecoveryDuration, defaultCheckPeriod, ) bytes, err := json.Marshal(cl) c.Assert(err, IsNil) r := plugin.NewRegistry() c.Assert(r.AddSpec(GetSpec()), IsNil) spec := r.GetSpec(GetSpec().Type) c.Assert(spec, NotNil) out, err := spec.FromJSON(bytes) c.Assert(err, IsNil) c.Assert(out, NotNil) spec2 := out.(*Spec) c.Assert(spec2.Fallback, NotNil) c.Assert(spec2.OnTripped, NotNil) c.Assert(spec2.OnStandby, NotNil) }
func (s *SpecSuite) TestNewCircuitBreakerFromJSONEmptyStrings(c *C) { r := plugin.NewRegistry() c.Assert(r.AddSpec(GetSpec()), IsNil) bytes := []byte(`{ "Condition":"LatencyAtQuantileMS(50.0) < 20", "Fallback":{"Type": "response", "Action": {"StatusCode": 400, "Body": "Come back later"}}, "OnTripped": "", "OnStandby": "", "FallbackDuration": 10000000000, "RecoveryDuration": 10000000000, "CheckPeriod": 100000000}`) spec := r.GetSpec(GetSpec().Type) c.Assert(spec, NotNil) out, err := spec.FromJSON(bytes) c.Assert(err, IsNil) c.Assert(out, NotNil) spec2 := out.(*Spec) c.Assert(spec2.Fallback, NotNil) c.Assert(spec2.OnTripped, Equals, "") c.Assert(spec2.OnStandby, Equals, "") }
func (s *BackendSuite) MiddlewareFromJSON(c *C) { cl, err := connlimit.NewConnLimit(10, "client.ip") c.Assert(err, IsNil) m := &Middleware{Id: "c1", Type: "connlimit", Middleware: cl} bytes, err := json.Marshal(m) c.Assert(err, IsNil) out, err := MiddlewareFromJSON(bytes, plugin.NewRegistry().GetSpec) c.Assert(err, IsNil) c.Assert(out, NotNil) c.Assert(out, DeepEquals, m) }
func (s *BackendSuite) TestFrontendsFromJSON(c *C) { f, err := NewHTTPFrontend(route.NewMux(), "f1", "b1", `Path("/path")`, HTTPFrontendSettings{}) c.Assert(err, IsNil) bytes, err := json.Marshal(f) fs := []Frontend{*f} bytes, err = json.Marshal(map[string]interface{}{"Frontends": fs}) r := plugin.NewRegistry() c.Assert(r.AddSpec(connlimit.GetSpec()), IsNil) out, err := FrontendsFromJSON(route.NewMux(), bytes) c.Assert(err, IsNil) c.Assert(out, NotNil) c.Assert(out, DeepEquals, fs) }
func (s *SpecSuite) TestNewCircuitBreakerFromJSONDefaults(c *C) { r := plugin.NewRegistry() c.Assert(r.AddSpec(GetSpec()), IsNil) bytes := []byte(`{ "Condition":"LatencyAtQuantileMS(50.0) < 20", "Fallback":{"Type": "response", "Action": {"StatusCode": 400, "Body": "Come back later"}}}`) spec := r.GetSpec(GetSpec().Type) c.Assert(spec, NotNil) out, err := spec.FromJSON(bytes) c.Assert(err, IsNil) c.Assert(out, NotNil) spec2 := out.(*Spec) c.Assert(spec2.Fallback, NotNil) c.Assert(spec2.OnTripped, IsNil) c.Assert(spec2.OnStandby, IsNil) }
// One of the most important tests: // Make sure the RateLimit spec is compatible and will be accepted by middleware registry func (s *RateLimitSuite) TestSpecIsOK(c *C) { c.Assert(plugin.NewRegistry().AddSpec(GetSpec()), IsNil) }