github.com/buildpacks/pack@v0.33.3-0.20240516162812-884dd1837311/acceptance/suite_manager.go (about) 1 //go:build acceptance 2 // +build acceptance 3 4 package acceptance 5 6 type SuiteManager struct { 7 out func(format string, args ...interface{}) 8 results map[string]interface{} 9 cleanUpTasks map[string]func() error 10 } 11 12 func (s *SuiteManager) CleanUp() error { 13 for key, cleanUp := range s.cleanUpTasks { 14 s.out("Running cleanup task '%s'\n", key) 15 if err := cleanUp(); err != nil { 16 return err 17 } 18 } 19 20 return nil 21 } 22 23 func (s *SuiteManager) RegisterCleanUp(key string, cleanUp func() error) { 24 if s.cleanUpTasks == nil { 25 s.cleanUpTasks = map[string]func() error{} 26 } 27 28 s.cleanUpTasks[key] = cleanUp 29 } 30 31 func (s *SuiteManager) RunTaskOnceString(key string, run func() (string, error)) (string, error) { 32 v, err := s.runTaskOnce(key, func() (interface{}, error) { 33 return run() 34 }) 35 if err != nil { 36 return "", err 37 } 38 39 return v.(string), nil 40 } 41 42 func (s *SuiteManager) runTaskOnce(key string, run func() (interface{}, error)) (interface{}, error) { 43 if s.results == nil { 44 s.results = map[string]interface{}{} 45 } 46 47 value, found := s.results[key] 48 if !found { 49 s.out("Running task '%s'\n", key) 50 v, err := run() 51 if err != nil { 52 return nil, err 53 } 54 55 s.results[key] = v 56 57 return v, nil 58 } 59 60 return value, nil 61 }