How to use Save method of toxiproxy Package

Best Toxiproxy code snippet using toxiproxy.Save

resilience_integration_test.go

Source:resilience_integration_test.go Github

copy

Full Screen

1package resilience_testing2import (3 "errors"4 "fmt"5 "git.haw-hamburg.de/acm746/resilient-microservice/internal/app"6 "git.haw-hamburg.de/acm746/resilient-microservice/internal/app/configuration"7 "git.haw-hamburg.de/acm746/resilient-microservice/internal/app/domain/entities"8 toxiproxy "github.com/Shopify/toxiproxy/client"9 "github.com/sirupsen/logrus"10 "github.com/stretchr/testify/assert"11 "os"12 "os/exec"13 "reflect"14 "sync"15 "testing"16)17var (18 ErrCircuitBreakerOpen = errors.New("circuit breaker open, denying requests to save resources")19)20var application app.App21// connections22var SMELTERCONNECTION_NOCOLONS string23var TOXIPROXY_CLIENTCONNECTION string24var SMELTERCONNECTION_DEFAULT string25// ToxiProxy26var toxiClient *toxiproxy.Client27//var proxyForge *toxiproxy.Proxy28var proxySmelter *toxiproxy.Proxy29//var proxyMongoDB *toxiproxy.Proxy30func TestMain(m *testing.M) {31 // Reading configuration32 application = app.App{}33 config := configuration.ReadConfiguration(true)34 application.Configuration = &config35 // Set Connection URLS36 SMELTERCONNECTION_NOCOLONS = application.Configuration.SmelterConnectionNoColons37 // Set ToxiProxy Connection URLS38 TOXIPROXY_CLIENTCONNECTION = application.Configuration.ToxiProxy_ClientConnection39 // Remember Default Connections40 SMELTERCONNECTION_DEFAULT = application.Configuration.SmelterConnectionDefault41 // Initialize logging42 logrus.SetOutput(os.Stderr)43 logrus.SetFormatter(&logrus.JSONFormatter{})44 logrus.SetLevel(logrus.DebugLevel)45 application.Initialize()46 os.Exit(m.Run())47}48// currently not working, start .exe manually before resilience testing49func StartToxiProxyServer(){50 PathToToxiProxyExecutable := "/toxiproxy/toxiproxy-server-windows-amd64.exe"51 cmdToxiProxy := &exec.Cmd{52 Path: PathToToxiProxyExecutable,53 Stdin: os.Stdin,54 Stdout: os.Stdout,55 Stderr: os.Stderr,56 }57 cmdToxiProxy.Run()58}59// Use this method everytime you want to test any service for resilient behaviour60// it creates a new client, removes all toxics and returns the client.61// In each method you can add the desired toxics with client.AddToxic(...)62// Make sure to remove the toxics and proxies with defer, even though they are deleted here anyway63func InitToxiProxy() (*toxiproxy.Client, error) {64 var err error65 toxiClient := toxiproxy.NewClient(TOXIPROXY_CLIENTCONNECTION)66 // Delete all proxies67 proxies, err := toxiClient.Proxies()68 if err != nil {69 panic("Couldnt connect toxiClient to ToxiProxy HTTP Server. Make sure it is running on Port 8474")70 }71 for _, v := range proxies {72 err = v.Delete()73 if err != nil {74 panic("Couldnt create Proxy on ToxiClient, make sure the Smelterservice and the toxiproxy server are running")75 }76 }77 proxySmelter, err = toxiClient.CreateProxy("proxySmelter", SMELTERCONNECTION_NOCOLONS, SMELTERCONNECTION_DEFAULT)78 if err != nil {79 panic("Couldnt create Proxy on ToxiClient, make sure the Smelterservice and the toxiproxy server are running")80 }81 return toxiClient, err82}83// helper to validate sword response84func Validate_Sword(sword entities.Sword) bool{85 return (sword.Type != "" && sword.Weight != 0)86}87// Integration Tests88// Single request GetIron from Smelterservice89// Success: Valid Iron Response90// Fails if enot valid Iron response91func Test_Integration_GetIronFromSmelterservice(t *testing.T){92 if testing.Short() {93 t.Skip("skipping Integration Test: TestGetIronFromSmelterservice")94 }95 toxiClient, _ = InitToxiProxy()96 iron, err := application.ForgeService.GetIronFromSmelterservice()97 if err != nil {98 t.Fail()99 }100 assert.Equal(t, reflect.TypeOf(entities.Iron{}), reflect.TypeOf(iron))101}102// Single request GetSword103// Success: Valid Sword Response104// Fails if enot valid sword response105func Test_Integration_GetSword_Success(t *testing.T) {106 if testing.Short() {107 t.Skip("skipping Integration Test: TestGetSwords")108 }109 toxiClient, _ = InitToxiProxy()110 sword, err := application.ForgeService.GetSword()111 if err != nil {112 t.Fatal(err)113 }114 assert.True(t,Validate_Sword(sword))115}116// Resilience Test117// Single request GetSword with timeout of the smelterservice118// Success: When timeout, error should be the Circuit Breaker Opening to save resources119// Fails if error is not ErrCircuitBreakerOpen120func Test_Integration_CircuitBreakerOpens_Timeout_GetSword(t *testing.T) {121 if testing.Short() {122 t.Skip("skipping Resilience Test: Test_CircuitBreakerOpens_GetIron")123 }124 var err error125 toxiClient, err = InitToxiProxy()126 if err != nil {127 logrus.Error("Could not create proxy listen on smelter connection")128 t.Fatal(err)129 }130 _, err = proxySmelter.AddToxic("timeout_smelter", "timeout", "", 1, toxiproxy.Attributes{})131 if err != nil{132 logrus.Error("Could not add toxic to smelter proxy")133 t.Fatal(err)134 }135 r, err := application.ForgeService.GetSword()136 defer proxySmelter.RemoveToxic("timeout_smelter")137 if err != nil && err.Error() == ErrCircuitBreakerOpen.Error() {138 logrus.Debug(err.Error(), r)139 return140 } else {141 t.Fail()142 }143}144// Single request GetSword with latency of the smelterservice145// Success: When latency is too high, error should be the Circuit Breaker Opening to save resources146// Fails if error is not ErrCircuitBreakerOpen147func Test_Integration_CircuitBreakerOpens_Latency_GetSword(t *testing.T) {148 if testing.Short() {149 t.Skip("skipping Resilience Test: Test_CircuitBreakerOpens_GetIron")150 }151 var err error152 toxiClient, err = InitToxiProxy()153 if err != nil {154 logrus.Error("Could not create proxy listen on smelter connection")155 t.Fatal(err)156 }157 _, err = proxySmelter.AddToxic("latency_downstream", "latency", "", 1, toxiproxy.Attributes{158 "latency": 3000,159 })160 if err != nil{161 logrus.Error("Could not add toxic to smelter proxy")162 t.Fatal(err)163 }164 r, err := application.ForgeService.GetSword()165 defer proxySmelter.RemoveToxic("latency_downstream")166 if err != nil && err.Error() == ErrCircuitBreakerOpen.Error() {167 logrus.Debug(err.Error(), r)168 return169 } else {170 t.Fail()171 }172}173// Bulk requests with a temporary timeout of the smelterservice174// Success: When timeout, error should be the Circuit Breaker Opening to save resources175// Fails if error is not ErrCircuitBreakerOpen176func Test_Integration_BulkGetSword_TemporarySmelterTimeout(t *testing.T) {177 if testing.Short() {178 t.Skip("skipping Resilience Test: TestSmelterConnectionSlow")179 }180 var err error181 toxiClient, err = InitToxiProxy()182 if err != nil {183 logrus.Error("Could not create proxy listen on smelter connection")184 t.Fatal(err)185 }186 _, err = proxySmelter.AddToxic("timeout_smelter", "timeout", "", 0, toxiproxy.Attributes{})187 if err != nil{188 logrus.Error("Could not add toxic to smelter proxy")189 t.Fatal(err)190 }191 // simulate a temporary timeout192 // make a bulk of requests to to forgeservice including internal requests to smelterservice which has occasional timeouts,193 //first 19 success, 20 to 179 failure, rest success194 for i := 0; i < 10; i++ {195 if i > 2 && i < 7 {196 if i == 3 {197 proxySmelter.UpdateToxic("timeout_smelter", 1, toxiproxy.Attributes{})198 }199 r, err := application.ForgeService.GetSword()200 if err != nil {201 logrus.Debug("Service Timeout HTTP Status: "+err.Error())202 if err.Error() == ErrCircuitBreakerOpen.Error() {203 logrus.Debug(err.Error(), r)204 return205 } else {206 t.Fail()207 }208 }209 }210 if i < 3 || i > 6 {211 if i == 7{212 proxySmelter.UpdateToxic("timeout_smelter", 0, toxiproxy.Attributes{})213 }214 r, err := application.ForgeService.GetSword()215 if err != nil {216 t.Fatal(err)217 }218 logrus.Debug("Response from Smelterconnection: ",r)219 }220 }221 // clean up toxic later222 defer proxySmelter.RemoveToxic("timeout_smelter")223}224// Bulk requests with a temporary latency of the smelterservice225// Success: When latency is too high, error should be the Circuit Breaker Opening to save resources226// Fails if error is not ErrCircuitBreakerOpen227func Test_Integration_BulkGetSword_TemporarySmelterLatency(t *testing.T) {228 if testing.Short() {229 t.Skip("skipping Resilience Test: TestSmelterConnectionSlow")230 }231 var err error232 toxiClient, err = InitToxiProxy()233 if err != nil {234 logrus.Error("Could not create proxy listen on smelter connection")235 t.Fatal(err)236 }237 _, err = proxySmelter.AddToxic("latency_downstream", "latency", "", 0, toxiproxy.Attributes{238 "latency": 3000,239 })240 if err != nil{241 logrus.Error("Could not add toxic to smelter proxy")242 t.Fatal(err)243 }244 // simulate a temporary latency245 // make a bulk of requests to to forgeservice including internal requests to smelterservice which has occasional timeouts,246 //first 19 success, 20 to 179 failure, rest success247 for i := 0; i < 5; i++ {248 if i == 4 {249 logrus.Debug("NOW TOXIC ACTIVE: latency_downstream")250 proxySmelter.UpdateToxic("latency_downstream", 1, toxiproxy.Attributes{})251 r, err := application.ForgeService.GetSword()252 if err != nil {253 logrus.Debug("Service Timeout HTTP Status: "+err.Error())254 }255 logrus.Debug("Response from timed out service "+"http://localhost:8080/sword",r)256 } else {257 r, err := application.ForgeService.GetSword()258 if err != nil {259 t.Fail()260 }261 logrus.Debug("Response from smelterservice: ",r)262 }263 }264 // clean up toxic later265 defer proxySmelter.RemoveToxic("latency_downstream")266}267// Bulk requests with a temporary latency and jittering of the smelterservice connection268// Success: When latency is too high, error should be the Circuit Breaker Opening to save resources269// Fails if error is not ErrCircuitBreakerOpen270func Test_Integration_BulkGetSword_SmelterLatencyJittering(t *testing.T) {271 if testing.Short() {272 t.Skip("skipping Resilience Test: TestSmelterConnectionSlow")273 }274 var err error275 toxiClient, err = InitToxiProxy()276 if err != nil {277 logrus.Error("Could not create proxy listen on smelter connection")278 t.Fatal(err)279 }280 _, err = proxySmelter.AddToxic("latency_downstream", "latency", "", 1, toxiproxy.Attributes{281 "latency": 2500,282 "jittering": 1000,283 })284 if err != nil{285 logrus.Error("Could not add toxic to smelter proxy")286 t.Fatal(err)287 }288 logrus.Debug("NOW TOXIC ACTIVE: latency_downstream")289 // simulate a temporary latency with high jittering290 for i := 0; i < 5; i++ {291 r, err := application.ForgeService.GetSword()292 if err != nil {293 logrus.Debug("Service Timeout HTTP Status: "+err.Error())294 }295 logrus.Debug("Response from timed out service "+"http://localhost:8080/sword",r)296 }297 // clean up toxic later298 defer proxySmelter.RemoveToxic("latency_downstream")299}300func Test_Integration_BulkGetSword_SmelterBandwidth(t *testing.T) {301 if testing.Short() {302 t.Skip("skipping Resilience Test: TestSmelterConnectionSlow")303 }304 var err error305 toxiClient, err = InitToxiProxy()306 if err != nil {307 logrus.Error("Could not create proxy listen on smelter connection")308 t.Fatal(err)309 }310 _, err = proxySmelter.AddToxic("low_bandwidth_smelter", "bandwidth", "", 1, toxiproxy.Attributes{311 "rate": 0,312 })313 if err != nil{314 logrus.Error("Could not add toxic to smelter proxy")315 t.Fatal(err)316 }317 logrus.Debug("NOW TOXIC ACTIVE: low_bandwidth_smelter")318 // simulate a temporary latency with high jittering319 for i := 0; i < 2; i++ {320 r, err := application.ForgeService.GetSword()321 if err != nil {322 logrus.Debug("Service Timeout HTTP Status: "+err.Error())323 }324 logrus.Debug("Response from slow service "+"http://localhost:8080/sword",r)325 }326 // clean up toxic later327 defer proxySmelter.RemoveToxic("low_bandwidth_smelter")328}329func Test_Integration_BulkGetSword_Smelter_limit_data(t *testing.T) {330 if testing.Short() {331 t.Skip("skipping Resilience Test: TestSmelterConnectionSlow")332 }333 var err error334 toxiClient, err = InitToxiProxy()335 if err != nil {336 logrus.Error("Could not create proxy listen on smelter connection")337 t.Fatal(err)338 }339 _, err = proxySmelter.AddToxic("limit_data_smelter", "limit_data", "", 1, toxiproxy.Attributes{340 "bytes": 100,341 })342 if err != nil{343 logrus.Error("Could not add toxic to smelter proxy")344 t.Fatal(err)345 }346 logrus.Debug("NOW TOXIC ACTIVE: limit_data_smelter")347 for i := 0; i < 2; i++ {348 r, err := application.ForgeService.GetSword()349 if err != nil {350 logrus.Debug("Service Timeout HTTP Status: "+err.Error())351 }352 logrus.Debug("Response from limited service "+"http://localhost:8080/sword",r)353 }354 // clean up toxic later355 defer proxySmelter.RemoveToxic("limit_data_smelter")356}357func workerGetIron(id int, wg *sync.WaitGroup) {358 defer wg.Done()359 fmt.Printf("Worker %d starting\n", id)360 sword, err := application.ForgeService.GetSword()361 logrus.Debugln(sword, err)362 fmt.Printf("Worker %d done\n", id)363}364// makes a bunch of concurrent requests to GetIron that wait for each other to finish365// Success: No errors366func Test_Integration_ConcurrentRequests_GetIron(t *testing.T) {367 if testing.Short() {368 t.Skip("skipping Resilience Test: Test_Integration_ConcurrentRequests_GetIron")369 }370 var err error371 toxiClient, err = InitToxiProxy()372 if err != nil {373 logrus.Error("Could not create proxy listen on smelter connection")374 t.Fatal(err)375 }376 var wg sync.WaitGroup377 for i := 1; i <= 100; i++ {378 wg.Add(1)379 go workerGetIron(i, &wg)380 }381 wg.Wait()382}...

Full Screen

Full Screen

functional_test.go

Source:functional_test.go Github

copy

Full Screen

...83 if err != nil {84 t.Fatal(err)85 }86}87func SaveProxy(t *testing.T, px string) {88 if err := Proxies[px].Save(); err != nil {89 t.Fatal(err)90 }91}92func setupFunctionalTest(t testing.TB) {93 checkKafkaAvailability(t)94 resetProxies(t)95 fetchProxies(t)96}97func teardownFunctionalTest(t testing.TB) {98 resetProxies(t)99}100type kafkaVersion []int101func (kv kafkaVersion) satisfies(other kafkaVersion) bool {102 var ov int...

Full Screen

Full Screen

Save

Using AI Code Generation

copy

Full Screen

1import (2func main() {3 toxiproxyClient.Save(&toxiproxy.Proxy{4 Toxics: []toxiproxy.Toxic{5 &toxiproxy.SlowCloseToxic{6 },7 },8 })9}10func (p *Proxy) AddToxic(name string, t Toxic) error11import (12func main() {13 toxiproxyClient.AddToxic("test", &toxiproxy.SlowCloseToxic{14 })15}

Full Screen

Full Screen

Save

Using AI Code Generation

copy

Full Screen

1import (2func main() {3 toxiproxy := client.NewClient("localhost:8474")4 toxiproxy.Save(&client.Proxy{5 })6 proxy, _ := toxiproxy.Proxy("myproxy")7 fmt.Println(proxy.Listen)8}

Full Screen

Full Screen

Save

Using AI Code Generation

copy

Full Screen

1import (2func main() {3 toxiproxy := toxiproxy.NewClient("localhost:8474")4 toxiproxy.Save(&toxiproxy.Proxy{5 Toxics: []*toxiproxy.Toxic{6 &toxiproxy.Toxic{7 Attributes: map[string]string{8 },9 },10 },11 })12}13import (14func main() {15 toxiproxy := client.NewClient("localhost:8474")16 toxiproxy.CreateProxy(&client.Proxy{17 Toxics: []*client.Toxic{18 &client.Toxic{19 Attributes: map[string]string{20 },21 },22 },23 })24}

Full Screen

Full Screen

Save

Using AI Code Generation

copy

Full Screen

1import (2func main() {3 toxiproxyClient := client.NewClient("localhost:8474")4 toxiproxyClient.Save(toxic)5}6import (7func main() {8 toxiproxyClient := client.NewClient("localhost:8474")9 toxiproxyClient.Create(proxy)10}11proxy := toxiproxy.Proxy{12}13toxic := toxiproxy.Toxic{14 Attributes: toxiproxy.Attributes{15 },16}17toxiproxyClient := client.NewClient("localhost:8474")18toxiproxyClient.Create(proxy)19toxiproxyClient.CreateToxic(proxy.Name, toxic)20proxy := toxiproxy.Proxy{21}22toxic := toxiproxy.Toxic{23 Attributes: toxiproxy.Attributes{

Full Screen

Full Screen

Save

Using AI Code Generation

copy

Full Screen

1import (2func main() {3 toxiproxy := client.NewClient("localhost:8474")4 toxiproxy.Save("myproxy", "localhost:1234", "localhost:4321")5 fmt.Println("Successfully created proxy")6}7import (8func main() {9 toxiproxy := client.NewClient("localhost:8474")10 proxies, err := toxiproxy.List()11 if err != nil {12 fmt.Println("Error in getting list of proxies", err)13 }14 fmt.Println("List of proxies", proxies)15}16import (17func main() {18 toxiproxy := client.NewClient("localhost:8474")19 proxy, err := toxiproxy.Get("myproxy")20 if err != nil {21 fmt.Println("Error in getting proxy", err)22 }23 fmt.Println("Proxy details", proxy)24}25import (26func main() {27 toxiproxy := client.NewClient("localhost:8474")28 err := toxiproxy.Enable("myproxy")29 if err != nil {30 fmt.Println("Error in enabling proxy", err)31 }32 fmt.Println("Proxy enabled")33}34import (35func main() {36 toxiproxy := client.NewClient("localhost:8474")37 err := toxiproxy.Disable("myproxy")38 if err != nil {39 fmt.Println("Error in disabling proxy", err)40 }41 fmt.Println("Proxy disabled")42}43import (

Full Screen

Full Screen

Save

Using AI Code Generation

copy

Full Screen

1import (2func main() {3 client.Save(&toxiproxy.Proxy{4 })5}6main.main()

Full Screen

Full Screen

Save

Using AI Code Generation

copy

Full Screen

1import (2func main() {3 toxiproxy := client.NewClient("localhost:8474")4 toxiproxy.Save("redis", "redis_downstream", "latency", "downstream", 1000, 0)5}6import (7func main() {8 toxiproxy := client.NewClient("localhost:8474")9 toxiproxy.Save("redis", "redis_upstream", "latency", "upstream", 1000, 0)10}11import (12func main() {13 toxiproxy := client.NewClient("localhost:8474")14 redisProxy, err := toxiproxy.Proxy("redis")15 if err != nil {16 log.Fatal(err)17 }18 conn, err := redis.Dial("tcp", redisProxy.Listen)19 if err != nil {20 log.Fatal(err)21 }22 defer conn.Close()23 _, err = conn.Do("SET", "foo", "bar")24 if err != nil {25 log.Fatal(err)26 }27 value, err := redis.String(conn.Do("GET", "foo"))28 if err != nil {29 log.Fatal(err)30 }31 fmt.Println(value)32}

Full Screen

Full Screen

Automation Testing Tutorials

Learn to execute automation testing from scratch with LambdaTest Learning Hub. Right from setting up the prerequisites to run your first automation test, to following best practices and diving deeper into advanced test scenarios. LambdaTest Learning Hubs compile a list of step-by-step guides to help you be proficient with different test automation frameworks i.e. Selenium, Cypress, TestNG etc.

LambdaTest Learning Hubs:

YouTube

You could also refer to video tutorials over LambdaTest YouTube channel to get step by step demonstration from industry experts.

Try LambdaTest Now !!

Get 100 minutes of automation test minutes FREE!!

Next-Gen App & Browser Testing Cloud

Was this article helpful?

Helpful

NotHelpful