kuma
1package utils
2
3import (
4"bytes"
5"fmt"
6"net"
7"strings"
8"text/template"
9
10ginko "github.com/onsi/ginkgo/v2"
11"github.com/onsi/gomega"
12)
13
14func ShellEscape(arg string) string {
15return fmt.Sprintf("'%s'", strings.ReplaceAll(arg, "'", "\\'"))
16}
17
18func GetFreePort() (int, error) {
19address, err := net.ResolveTCPAddr("tcp", "localhost:0")
20if err != nil {
21return 0, err
22}
23
24listener, err := net.ListenTCP("tcp", address)
25if err != nil {
26return 0, err
27}
28defer listener.Close()
29
30return listener.Addr().(*net.TCPAddr).Port, nil
31}
32
33func FromTemplate(g gomega.Gomega, tmpl string, data any) string {
34t, err := template.New("tmpl").Parse(tmpl)
35g.Expect(err).ToNot(gomega.HaveOccurred())
36b := bytes.Buffer{}
37g.Expect(t.Execute(&b, data)).To(gomega.Succeed())
38return b.String()
39}
40
41func TestCaseName(ginkgo ginko.FullGinkgoTInterface) string {
42nameSplit := strings.Split(ginkgo.Name(), " ")
43return nameSplit[len(nameSplit)-1]
44}
45