-
Notifications
You must be signed in to change notification settings - Fork 5
/
vizzini_suite_test.go
137 lines (110 loc) · 3.56 KB
/
vizzini_suite_test.go
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
package vizzini_test
import (
"fmt"
"log"
"net"
"net/url"
"os"
"testing"
"time"
. "github.com/onsi/ginkgo/v2"
. "github.com/onsi/gomega"
"code.cloudfoundry.org/bbs"
"code.cloudfoundry.org/lager/v3"
"code.cloudfoundry.org/lager/v3/lagertest"
vizziniconfig "code.cloudfoundry.org/vizzini/config"
uuid "github.com/nu7hatch/gouuid"
"github.com/onsi/say"
)
var (
bbsClient bbs.InternalClient
domain string
otherDomain string
guid string
startTime time.Time
timeout time.Duration
dockerTimeout time.Duration
logger lager.Logger
sshHost string
sshPort string
config vizziniconfig.VizziniConfig
)
func init() {
var err error
config, err = vizziniconfig.NewVizziniConfig()
if err != nil {
log.Fatal(err)
}
if config.BBSAddress == "" {
log.Fatal("i need a bbs address to talk to Diego...")
}
if config.SSHAddress == "" {
log.Fatal("i need an SSH address to talk to Diego...")
}
}
func TestVizziniSuite(t *testing.T) {
RegisterFailHandler(Fail)
RunSpecs(t, "Vizzini Suite")
}
func NewGuid() string {
u, err := uuid.NewV4()
Expect(err).NotTo(HaveOccurred())
return domain + "-" + u.String()[:8]
}
const DefaultEventuallyTimeout = 20 * time.Second
var taskFailureTimeout time.Duration
var traceID = "vizzini-trace-id"
var _ = BeforeSuite(func() {
var err error
timeout = DefaultEventuallyTimeout
dockerTimeout = 120 * time.Second
timeoutArg := os.Getenv("DEFAULT_EVENTUALLY_TIMEOUT")
if timeoutArg != "" {
timeout, err = time.ParseDuration(timeoutArg)
Expect(err).NotTo(HaveOccurred(), "invalid value '"+timeoutArg+"' for DEFAULT_EVENTUALLY_TIMEOUT")
fmt.Fprintf(GinkgoWriter, "Setting Default Eventually Timeout to %s\n", timeout)
}
SetDefaultEventuallyTimeout(timeout)
SetDefaultEventuallyPollingInterval(500 * time.Millisecond)
SetDefaultConsistentlyPollingInterval(200 * time.Millisecond)
domain = fmt.Sprintf("vizzini-%d", GinkgoParallelProcess())
otherDomain = fmt.Sprintf("vizzini-other-%d", GinkgoParallelProcess())
rootfsURI, err := url.Parse(config.DefaultRootFS)
Expect(err).NotTo(HaveOccurred())
Expect(rootfsURI.Scheme).To(Equal("preloaded"))
Expect(rootfsURI.Opaque).NotTo(BeEmpty())
bbsClient = initializeBBSClient()
sshHost, sshPort, err = net.SplitHostPort(config.SSHAddress)
Expect(err).NotTo(HaveOccurred())
// conservative taskFailureTimeout since tasks retries happen during convergence
taskFailureTimeout = ConvergerInterval * time.Duration(config.MaxTaskRetries+1)
logger = lagertest.NewTestLogger("vizzini")
})
var _ = BeforeEach(func() {
startTime = time.Now()
guid = NewGuid()
})
var _ = AfterEach(func() {
defer func() {
endTime := time.Now()
fmt.Fprint(GinkgoWriter, say.F("{{cyan}}\n%s\nThis test referenced GUID %s\nStart time: %s (%d)\nEnd time: %s (%d)\n{{/}}", CurrentSpecReport().FullText(), guid, startTime, startTime.Unix(), endTime, endTime.Unix()))
}()
for _, domain := range []string{domain, otherDomain} {
ClearOutTasksInDomain(domain)
ClearOutDesiredLRPsInDomain(domain)
}
})
var _ = AfterSuite(func() {
for _, domain := range []string{domain, otherDomain} {
bbsClient.UpsertDomain(logger, traceID, domain, 5*time.Minute) //leave the domain around forever so that Diego cleans up if need be
}
for _, domain := range []string{domain, otherDomain} {
ClearOutDesiredLRPsInDomain(domain)
ClearOutTasksInDomain(domain)
}
})
func initializeBBSClient() bbs.InternalClient {
bbsClient, err := bbs.NewSecureSkipVerifyClient(config.BBSAddress, config.BBSClientCertPath, config.BBSClientKeyPath, 0, 0)
Expect(err).NotTo(HaveOccurred())
return bbsClient
}