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

     1  package gw
     2  
     3  import (
     4  	"context"
     5  	"fmt"
     6  	"strings"
     7  	"testing"
     8  
     9  	"github.com/golang/mock/gomock"
    10  
    11  	"github.com/release-engineering/exodus-rsync/internal/args"
    12  	"github.com/release-engineering/exodus-rsync/internal/conf"
    13  	"github.com/release-engineering/exodus-rsync/internal/log"
    14  	"github.com/release-engineering/exodus-rsync/internal/walk"
    15  )
    16  
    17  func TestNewDryRunClientCertError(t *testing.T) {
    18  	ctrl := gomock.NewController(t)
    19  	cfg := conf.NewMockConfig(ctrl)
    20  
    21  	cfg.EXPECT().GwCert().Return("cert-does-not-exist")
    22  	cfg.EXPECT().GwKey().Return("key-does-not-exist")
    23  
    24  	_, err := Package.NewDryRunClient(context.Background(), cfg)
    25  
    26  	// Should have given us this error
    27  	if !strings.Contains(fmt.Sprint(err), "can't load cert/key") {
    28  		t.Error("did not get expected error, err =", err)
    29  	}
    30  }
    31  
    32  func TestDryRunUpload(t *testing.T) {
    33  	ctx := context.Background()
    34  	ctx = log.NewContext(ctx, log.Package.NewLogger(args.Config{}))
    35  
    36  	c := client{dryRun: true}
    37  
    38  	// It should do nothing, successfully, without even looking at the
    39  	// sync item
    40  	err := c.uploadBlob(ctx, walk.SyncItem{})
    41  	if err != nil {
    42  		t.Errorf("uploadBlob failed in dry-run mode, err = %v", err)
    43  	}
    44  }
    45  
    46  func TestDryRunPublish(t *testing.T) {
    47  	ctx := context.Background()
    48  	ctx = log.NewContext(ctx, log.Package.NewLogger(args.Config{}))
    49  
    50  	c := client{dryRun: true}
    51  
    52  	type publishGetter func(t *testing.T) Publish
    53  
    54  	cases := []struct {
    55  		name   string
    56  		getter publishGetter
    57  	}{
    58  		{"new publish",
    59  			func(t *testing.T) Publish {
    60  				p, err := c.NewPublish(ctx)
    61  				if err != nil {
    62  					t.Fatalf("NewPublish failed in dry-run mode, err = %v", err)
    63  				}
    64  				return p
    65  			},
    66  		},
    67  
    68  		{"get publish",
    69  			func(t *testing.T) Publish {
    70  				p, err := c.GetPublish(ctx, "whatever-id")
    71  				if err != nil {
    72  					t.Fatalf("GetPublish failed in dry-run mode, err = %v", err)
    73  				}
    74  				return p
    75  			},
    76  		},
    77  	}
    78  
    79  	for _, testcase := range cases {
    80  		t.Run(testcase.name, func(t *testing.T) {
    81  			p := testcase.getter(t)
    82  
    83  			// Publish object should "work" but not really do anything.
    84  			t.Logf("Got publish %s", p.ID())
    85  
    86  			err := p.AddItems(ctx, []ItemInput{})
    87  			if err != nil {
    88  				t.Errorf("AddItems failed in dry-run mode, err = %v", err)
    89  			}
    90  
    91  			err = p.Commit(ctx, "")
    92  			if err != nil {
    93  				t.Errorf("Commit failed in dry-run mode, err = %v", err)
    94  			}
    95  		})
    96  	}
    97  }
    98  
    99  func TestNewDryRunClientOk(t *testing.T) {
   100  	cfg := testConfig(t)
   101  
   102  	clientIface, err := Package.NewDryRunClient(context.Background(), cfg)
   103  
   104  	// Should have succeeded
   105  	if clientIface == nil || err != nil {
   106  		t.Errorf("unexpectedly failed to make client, client = %v, err = %v", clientIface, err)
   107  	}
   108  
   109  	// The client should be marked as dry-run
   110  	client := clientIface.(*client)
   111  	if !client.dryRun {
   112  		t.Errorf("NewDryRunClient didn't create a client in dry-run mode!")
   113  	}
   114  }