github.com/telepresenceio/telepresence/v2@v2.20.0-pro.6.0.20240517030216-236ea954e789/integration_test/itest/status.go (about) 1 package itest 2 3 import ( 4 "context" 5 "encoding/json" 6 "errors" 7 8 "github.com/stretchr/testify/require" 9 10 "github.com/datawire/dlib/dlog" 11 "github.com/telepresenceio/telepresence/v2/pkg/client/cli/cmd" 12 ) 13 14 type StatusResponse struct { 15 RootDaemon *cmd.RootDaemonStatus `json:"root_daemon,omitempty"` 16 UserDaemon *cmd.UserDaemonStatus `json:"user_daemon,omitempty"` 17 TrafficManager *cmd.TrafficManagerStatus `json:"traffic_manager,omitempty"` 18 ContainerizedDaemon *cmd.ContainerizedDaemonStatus `json:"daemon,omitempty"` 19 Connections []struct { 20 RootDaemon *cmd.RootDaemonStatus `json:"root_daemon,omitempty"` 21 UserDaemon *cmd.UserDaemonStatus `json:"user_daemon,omitempty"` 22 TrafficManager *cmd.TrafficManagerStatus `json:"traffic_manager,omitempty"` 23 ContainerizedDaemon *cmd.ContainerizedDaemonStatus `json:"daemon,omitempty"` 24 } `json:"connections,omitempty"` 25 Error string `json:"err,omitempty"` 26 } 27 28 func TelepresenceStatus(ctx context.Context, args ...string) (*StatusResponse, error) { 29 stdout, stderr, err := Telepresence(ctx, append([]string{"status", "--output", "json"}, args...)...) 30 var status StatusResponse 31 jErr := json.Unmarshal([]byte(stdout), &status) 32 if err != nil { 33 if jErr == nil && status.Error != "" { 34 dlog.Error(ctx, status.Error) 35 return nil, errors.New(status.Error) 36 } 37 dlog.Error(ctx, stderr) 38 return nil, err 39 } 40 if jErr != nil { 41 return nil, jErr 42 } 43 if cd := status.ContainerizedDaemon; cd != nil { 44 status.UserDaemon = cd.UserDaemonStatus 45 status.RootDaemon = &cmd.RootDaemonStatus{ 46 Running: cd.Running, 47 Name: cd.Name, 48 Version: cd.Version, 49 DNS: cd.DNS, 50 RoutingSnake: cd.RoutingSnake, 51 } 52 } else if status.RootDaemon == nil { 53 status.RootDaemon = &cmd.RootDaemonStatus{} 54 } 55 return &status, nil 56 } 57 58 func TelepresenceStatusOk(ctx context.Context, args ...string) *StatusResponse { 59 status, err := TelepresenceStatus(ctx, args...) 60 require.NoError(getT(ctx), err) 61 return status 62 }