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  }