github.com/defang-io/defang/src@v0.0.0-20240505002154-bdf411911834/pkg/cli/client/byoc/clouds/byoc_integration_test.go (about)

     1  //go:build integration
     2  
     3  package clouds
     4  
     5  import (
     6  	"context"
     7  	"strings"
     8  	"testing"
     9  
    10  	"github.com/bufbuild/connect-go"
    11  	defangv1 "github.com/defang-io/defang/src/protos/io/defang/v1"
    12  )
    13  
    14  func TestDeploy(t *testing.T) {
    15  	b := NewByocAWS("ten ant", "", nil) // no domain
    16  
    17  	t.Run("multiple ingress without domain", func(t *testing.T) {
    18  		t.Skip("skipping test: delegation enabled")
    19  
    20  		_, err := b.Deploy(context.Background(), &defangv1.DeployRequest{
    21  			Services: []*defangv1.Service{{
    22  				Name:  "test",
    23  				Image: "docker.io/library/nginx:latest",
    24  				Ports: []*defangv1.Port{{
    25  					Target: 80,
    26  					Mode:   defangv1.Mode_INGRESS,
    27  				}, {
    28  					Target: 443,
    29  					Mode:   defangv1.Mode_INGRESS,
    30  				}},
    31  			}},
    32  		})
    33  		if err == nil || !strings.Contains(err.Error(), "duplicate endpoint:") {
    34  			t.Error("expected error")
    35  		}
    36  	})
    37  }
    38  
    39  func TestTail(t *testing.T) {
    40  	b := NewByocAWS("TestTail", "", nil)
    41  	b.customDomain = "example.com" // avoid rpc call
    42  
    43  	ss, err := b.Tail(context.Background(), &defangv1.TailRequest{})
    44  	if err != nil {
    45  		// the only acceptable error is "unauthorized"
    46  		if connect.CodeOf(err) != connect.CodeUnauthenticated {
    47  			t.Fatal(err)
    48  		}
    49  		t.Skip("skipping test; not authorized")
    50  	}
    51  	defer ss.Close()
    52  
    53  	// First we expect "true" (the "start" event)
    54  	if ss.Receive() != true {
    55  		t.Error("expected Receive() to return true")
    56  	}
    57  	if len(ss.Msg().Entries) != 0 {
    58  		t.Error("expected empty entries")
    59  	}
    60  	err = ss.Err()
    61  	if err != nil {
    62  		t.Error(err)
    63  	}
    64  }
    65  
    66  func TestGetServices(t *testing.T) {
    67  	b := NewByocAWS("TestGetServices", "", nil)
    68  
    69  	services, err := b.GetServices(context.Background())
    70  	if err != nil {
    71  		if connect.CodeOf(err) == connect.CodeUnauthenticated {
    72  			t.Skip("skipping test; not authorized")
    73  		}
    74  		// the only acceptable error is "unauthorized"
    75  		t.Fatal(err)
    76  	}
    77  
    78  	if len(services.Services) != 0 {
    79  		t.Error("expected empty services")
    80  	}
    81  }
    82  
    83  func TestPutSecret(t *testing.T) {
    84  	if testing.Short() {
    85  		// t.Skip("skipping test in short mode")
    86  	}
    87  
    88  	const secretName = "hello"
    89  	b := NewByocAWS("TestPutSecret", "", nil)
    90  
    91  	t.Run("delete non-existent", func(t *testing.T) {
    92  		err := b.DeleteConfig(context.Background(), &defangv1.Secrets{Names: []string{secretName}})
    93  		if err != nil {
    94  			// the only acceptable error is "unauthorized"
    95  			if connect.CodeOf(err) == connect.CodeUnauthenticated {
    96  				t.Skip("skipping test; not authorized")
    97  			}
    98  			if connect.CodeOf(err) != connect.CodeNotFound {
    99  				t.Errorf("expected not found, got %v", err)
   100  			}
   101  		}
   102  	})
   103  
   104  	t.Run("invalid name", func(t *testing.T) {
   105  		err := b.PutConfig(context.Background(), &defangv1.SecretValue{})
   106  		if connect.CodeOf(err) != connect.CodeInvalidArgument {
   107  			t.Errorf("expected invalid argument, got %v", err)
   108  		}
   109  	})
   110  
   111  	t.Run("put", func(t *testing.T) {
   112  		err := b.PutConfig(context.Background(), &defangv1.SecretValue{Name: secretName, Value: "world"})
   113  		if err != nil {
   114  			t.Fatalf("unexpected error: %v", err)
   115  		}
   116  		// Check that the secret is in the list
   117  		secrets, err := b.driver.ListSecretsByPrefix(context.Background(), b.tenantID+".")
   118  		if err != nil {
   119  			t.Fatalf("unexpected error: %v", err)
   120  		}
   121  		if len(secrets) != 1 {
   122  			t.Fatalf("expected 1 secret, got %v", secrets)
   123  		}
   124  		expected := b.tenantID + "." + secretName
   125  		if secrets[0] != expected {
   126  			t.Fatalf("expected %q, got %q", expected, secrets[0])
   127  		}
   128  	})
   129  }
   130  
   131  func TestListSecrets(t *testing.T) {
   132  	if testing.Short() {
   133  		t.Skip("skipping test in short mode")
   134  	}
   135  
   136  	b := NewByocAWS("TestListSecrets", "", nil)
   137  
   138  	t.Run("list", func(t *testing.T) {
   139  		secrets, err := b.ListConfig(context.Background())
   140  		if err != nil {
   141  			// the only acceptable error is "unauthorized"
   142  			if connect.CodeOf(err) == connect.CodeUnauthenticated {
   143  				t.Skip("skipping test; not authorized")
   144  			}
   145  			t.Fatalf("unexpected error: %v", err)
   146  		}
   147  		if len(secrets.Names) != 0 {
   148  			t.Fatalf("expected empty list, got %v", secrets.Names)
   149  		}
   150  	})
   151  }