github.com/release-engineering/exodus-rsync@v1.11.2/internal/cmd/cmd_bad_client_test.go (about)

     1  package cmd
     2  
     3  import (
     4  	"fmt"
     5  	"testing"
     6  
     7  	"github.com/golang/mock/gomock"
     8  	"github.com/release-engineering/exodus-rsync/internal/gw"
     9  )
    10  
    11  // Command fails if exodus-gw client can't be initialized.
    12  func TestMainBadClient(t *testing.T) {
    13  	logs := CaptureLogger(t)
    14  
    15  	ctrl := MockController(t)
    16  
    17  	mockGw := gw.NewMockInterface(ctrl)
    18  	ext.gw = mockGw
    19  
    20  	// Set up a valid config file with a matching prefix, so it tries to use exodus-gw.
    21  	SetConfig(t, `
    22  gwcert: $HOME/certs/$USER.crt
    23  gwkey: $HOME/certs/$USER.key
    24  gwurl: https://exodus-gw.example.com/
    25  
    26  environments:
    27  - prefix: some-dest
    28    gwenv: test
    29  `)
    30  
    31  	mockGw.EXPECT().NewClient(gomock.Any(), gomock.Any()).Return(nil, fmt.Errorf("client error"))
    32  
    33  	got := Main([]string{
    34  		"exodus-rsync", "-vvv", ".", "some-dest:/foo/bar",
    35  	})
    36  
    37  	// It should exit.
    38  	if got != 101 {
    39  		t.Error("returned incorrect exit code", got)
    40  	}
    41  
    42  	// It should tell us why.
    43  	entry := FindEntry(logs, "can't initialize exodus-gw client")
    44  	if entry == nil {
    45  		t.Errorf("Missing expected log message")
    46  	}
    47  
    48  	if entry.Fields["error"].(error).Error() != "client error" {
    49  		t.Errorf("Did not get expected error, got: %v", entry.Fields["error"])
    50  	}
    51  }