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 }