github.com/ocurr/cryorio@v0.0.0-20220116160810-2fb94073801b/roborio/roborio_test.go (about)

     1  //go:build !windows
     2  
     3  package roborio
     4  
     5  import (
     6  	"strings"
     7  	"testing"
     8  
     9  	"github.com/google/go-cmp/cmp"
    10  )
    11  
    12  func getTestRio(t *testing.T) *Roborio {
    13  	rio, err := NewRoborio(func(user, pass, addr string) (Conn, error) {
    14  		return &TestConn{t.TempDir()}, nil
    15  	}, "test", "test", Addresses("test"), Team(973), Port(8080))
    16  	if err != nil {
    17  		t.Fatal(err)
    18  	}
    19  	err = rio.Connect()
    20  	if err != nil {
    21  		t.Fatal(err)
    22  	}
    23  	return rio
    24  }
    25  
    26  func assertCmdSuccess(t *testing.T, err error) {
    27  	assertCmdSuccessAndNoOutput(t, []byte{}, err)
    28  }
    29  
    30  func assertCmdSuccessAndNoOutput(t *testing.T, out []byte, err error) {
    31  	if err != nil {
    32  		t.Fatal(err)
    33  	}
    34  	if len(out) != 0 {
    35  		t.Fatal(out)
    36  	}
    37  }
    38  
    39  func TestRoborio(t *testing.T) {
    40  	t.Run("CreateAndSeeFiles", func(t *testing.T) {
    41  		rio := getTestRio(t)
    42  		out, err := rio.Touch("foo.txt")
    43  		assertCmdSuccessAndNoOutput(t, out, err)
    44  		out, err = rio.ListDir()
    45  		assertCmdSuccess(t, err)
    46  		got := strings.TrimSpace(string(out))
    47  		if got != "foo.txt" {
    48  			t.Fatalf("want: foo.txt got: %s", got)
    49  		}
    50  	})
    51  	t.Run("CreateAndDeleteFiles", func(t *testing.T) {
    52  		rio := getTestRio(t)
    53  		out, err := rio.Touch("bar.txt")
    54  		assertCmdSuccessAndNoOutput(t, out, err)
    55  		out, err = rio.Remove("bar.txt")
    56  		assertCmdSuccessAndNoOutput(t, out, err)
    57  		out, err = rio.ListDir()
    58  		assertCmdSuccess(t, err)
    59  		got := strings.TrimSpace(string(out))
    60  		if got != "" {
    61  			t.Fatalf("want: %q got: %s", "", got)
    62  		}
    63  	})
    64  	t.Run("CopyFiles", func(t *testing.T) {
    65  		rio := getTestRio(t)
    66  		out, err := rio.Touch("FRCUserProgram")
    67  		assertCmdSuccessAndNoOutput(t, out, err)
    68  		out, err = rio.Copy("FRCUserProgram", "match.backup")
    69  		assertCmdSuccessAndNoOutput(t, out, err)
    70  		out, err = rio.ListDir()
    71  		assertCmdSuccess(t, err)
    72  		gotStr := strings.TrimSpace(string(out))
    73  		got := strings.Split(gotStr, "\n")
    74  		want := []string{"FRCUserProgram", "match.backup"}
    75  		if !cmp.Equal(got, want) {
    76  			t.Fatalf("want: %q got: %q", want, got)
    77  		}
    78  	})
    79  	t.Run("BackupFile", func(t *testing.T) {
    80  		rio := getTestRio(t)
    81  		out, err := rio.Touch("FRCUserProgram")
    82  		assertCmdSuccessAndNoOutput(t, out, err)
    83  		err = rio.BackupFile("FRCUserProgram", "match")
    84  		if err != nil {
    85  			t.Fatal(err)
    86  		}
    87  		out, err = rio.ListDir()
    88  		assertCmdSuccess(t, err)
    89  		gotStr := strings.TrimSpace(string(out))
    90  		got := strings.Split(gotStr, "\n")
    91  		want := []string{"FRCUserProgram", "match.backup"}
    92  		if !cmp.Equal(got, want) {
    93  			t.Fatalf("want: %q got: %q", want, got)
    94  		}
    95  	})
    96  }