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  }