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

     1  package gw
     2  
     3  import (
     4  	"context"
     5  	"strings"
     6  	"testing"
     7  
     8  	"github.com/release-engineering/exodus-rsync/internal/args"
     9  	"github.com/release-engineering/exodus-rsync/internal/log"
    10  )
    11  
    12  func TestClientTaskErrors(t *testing.T) {
    13  	cfg := testConfig(t)
    14  
    15  	clientIface, err := Package.NewClient(context.Background(), cfg)
    16  	if clientIface == nil {
    17  		t.Errorf("failed to create client, err = %v", err)
    18  	}
    19  
    20  	ctx := context.Background()
    21  	ctx = log.NewContext(ctx, log.Package.NewLogger(args.Config{}))
    22  
    23  	t.Run("can't Await without link", func(t *testing.T) {
    24  		task := task{client: clientIface.(*client)}
    25  		task.raw.State = "IN_PROGRESS"
    26  		task.raw.ID = "1234"
    27  
    28  		err := task.Await(ctx)
    29  
    30  		if err == nil {
    31  			t.Error("Unexpectedly failed to return an error")
    32  		}
    33  		if !strings.Contains(err.Error(), "polling task 1234: task object is missing 'self'") {
    34  			t.Errorf("Did not get expected error, got: %v", err)
    35  		}
    36  	})
    37  
    38  	t.Run("Await propagates cancel", func(t *testing.T) {
    39  		cancelCtx, cancelFn := context.WithCancel(ctx)
    40  		cancelFn()
    41  
    42  		task := task{client: clientIface.(*client)}
    43  		task.raw.State = "IN_PROGRESS"
    44  		task.raw.ID = "1234"
    45  
    46  		err := task.Await(cancelCtx)
    47  
    48  		if err == nil {
    49  			t.Error("Unexpectedly failed to return an error")
    50  		}
    51  		if !strings.Contains(err.Error(), "canceled") {
    52  			t.Errorf("Did not get expected error, got: %v", err)
    53  		}
    54  	})
    55  
    56  }