github.com/cloudfoundry-community/cloudfoundry-cli@v6.44.1-0.20240130060226-cda5ed8e89a5+incompatible/integration/helpers/stack.go (about) 1 package helpers 2 3 import ( 4 "encoding/json" 5 6 "fmt" 7 "strings" 8 9 . "github.com/onsi/gomega" 10 . "github.com/onsi/gomega/gbytes" 11 . "github.com/onsi/gomega/gexec" 12 ) 13 14 type ccStacks struct { 15 Resources []struct { 16 Entity struct { 17 Name string `json:"name"` 18 } `json:"entity"` 19 } `json:"resources"` 20 } 21 22 func FetchStacks() []string { 23 session := CF("curl", "/v2/stacks") 24 25 Eventually(session).Should(Exit(0)) 26 27 var rawStacks ccStacks 28 err := json.Unmarshal(session.Out.Contents(), &rawStacks) 29 Expect(err).ToNot(HaveOccurred()) 30 31 var stacks []string 32 for _, stack := range rawStacks.Resources { 33 stacks = append(stacks, stack.Entity.Name) 34 } 35 36 return stacks 37 } 38 39 func PreferredStack() string { 40 stacks := FetchStacks() 41 42 for _, name := range stacks { 43 if name == "cflinuxfs3" { 44 return name 45 } 46 } 47 48 return "cflinuxfs2" 49 } 50 51 func CreateStack(names ...string) string { 52 name := NewStackName() 53 if len(names) > 0 { 54 name = names[0] 55 } 56 57 requestBody := fmt.Sprintf( 58 `{"name":"%s","description":"CF CLI integration test stack, please delete"}`, 59 name, 60 ) 61 session := CF("curl", "-v", "-X", "POST", "/v2/stacks", "-d", requestBody) 62 63 Eventually(session).Should(Say("201 Created")) 64 Eventually(session).Should(Exit(0)) 65 66 return name 67 } 68 69 func DeleteStack(name string) { 70 session := CF("stack", "--guid", name) 71 Eventually(session).Should(Exit(0)) 72 guid := strings.TrimSpace(string(session.Out.Contents())) 73 74 session = CF("curl", "-v", "-X", "DELETE", "/v2/stacks/"+guid) 75 76 Eventually(session).Should(Say("204 No Content")) 77 Eventually(session).Should(Exit(0)) 78 } 79 80 func EnsureMinimumNumberOfStacks(num int) []string { 81 var stacks []string 82 for stacks = FetchStacks(); len(stacks) < 2; { 83 stacks = append(stacks, CreateStack()) 84 } 85 return stacks 86 }