tester.go 2.1 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364
  1. // Copyright 2015 CoreOS, Inc.
  2. //
  3. // Licensed under the Apache License, Version 2.0 (the "License");
  4. // you may not use this file except in compliance with the License.
  5. // You may obtain a copy of the License at
  6. //
  7. // http://www.apache.org/licenses/LICENSE-2.0
  8. //
  9. // Unless required by applicable law or agreed to in writing, software
  10. // distributed under the License is distributed on an "AS IS" BASIS,
  11. // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
  12. // See the License for the specific language governing permissions and
  13. // limitations under the License.
  14. package main
  15. import "log"
  16. type tester struct {
  17. failures []failure
  18. cluster *cluster
  19. limit int
  20. }
  21. func (tt *tester) runLoop() {
  22. for i := 0; i < tt.limit; i++ {
  23. for j, f := range tt.failures {
  24. if err := tt.cluster.WaitHealth(); err != nil {
  25. log.Printf("etcd-tester: [round#%d case#%d] wait full health error: %v", i, j, err)
  26. if err := tt.cleanup(i, j); err != nil {
  27. log.Printf("etcd-tester: [round#%d case#%d] cleanup error: %v", i, j, err)
  28. return
  29. }
  30. continue
  31. }
  32. log.Printf("etcd-tester: [round#%d case#%d] start failure %s", i, j, f.Desc())
  33. log.Printf("etcd-tester: [round#%d case#%d] start injecting failure...", i, j)
  34. if err := f.Inject(tt.cluster, i); err != nil {
  35. log.Printf("etcd-tester: [round#%d case#%d] injection error: %v", i, j, err)
  36. if err := tt.cleanup(i, j); err != nil {
  37. log.Printf("etcd-tester: [round#%d case#%d] cleanup error: %v", i, j, err)
  38. return
  39. }
  40. continue
  41. }
  42. log.Printf("etcd-tester: [round#%d case#%d] start recovering failure...", i, j)
  43. if err := f.Recover(tt.cluster, i); err != nil {
  44. log.Printf("etcd-tester: [round#%d case#%d] recovery error: %v", i, j, err)
  45. if err := tt.cleanup(i, j); err != nil {
  46. log.Printf("etcd-tester: [round#%d case#%d] cleanup error: %v", i, j, err)
  47. return
  48. }
  49. continue
  50. }
  51. log.Printf("etcd-tester: [round#%d case#%d] succeed!", i, j)
  52. }
  53. }
  54. }
  55. func (tt *tester) cleanup(i, j int) error {
  56. log.Printf("etcd-tester: [round#%d case#%d] cleaning up...", i, j)
  57. tt.cluster.Terminate()
  58. return tt.cluster.Bootstrap()
  59. }