1package directories 2 3import ( 4 "context" 5 "fmt" 6 "log" 7 "testing" 8 9 "github.com/Azure/azure-sdk-for-go/profiles/latest/storage/mgmt/storage" 10 "github.com/tombuildsstuff/giovanni/storage/2018-03-28/file/shares" 11 "github.com/tombuildsstuff/giovanni/storage/internal/auth" 12 "github.com/tombuildsstuff/giovanni/testhelpers" 13) 14 15func TestDirectoriesLifeCycle(t *testing.T) { 16 client, err := testhelpers.Build(t) 17 if err != nil { 18 t.Fatal(err) 19 } 20 ctx := context.TODO() 21 resourceGroup := fmt.Sprintf("acctestrg-%d", testhelpers.RandomInt()) 22 accountName := fmt.Sprintf("acctestsa%s", testhelpers.RandomString()) 23 shareName := fmt.Sprintf("share-%d", testhelpers.RandomInt()) 24 25 testData, err := client.BuildTestResources(ctx, resourceGroup, accountName, storage.Storage) 26 if err != nil { 27 t.Fatal(err) 28 } 29 defer client.DestroyTestResources(ctx, resourceGroup, accountName) 30 31 storageAuth := auth.NewSharedKeyLiteAuthorizer(accountName, testData.StorageAccountKey) 32 sharesClient := shares.NewWithEnvironment(client.Environment) 33 sharesClient.Client = client.PrepareWithAuthorizer(sharesClient.Client, storageAuth) 34 35 directoriesClient := NewWithEnvironment(client.Environment) 36 directoriesClient.Client = client.PrepareWithAuthorizer(directoriesClient.Client, storageAuth) 37 38 input := shares.CreateInput{ 39 QuotaInGB: 1, 40 } 41 _, err = sharesClient.Create(ctx, accountName, shareName, input) 42 if err != nil { 43 t.Fatalf("Error creating fileshare: %s", err) 44 } 45 defer sharesClient.Delete(ctx, accountName, shareName, true) 46 47 metaData := map[string]string{ 48 "hello": "world", 49 } 50 51 log.Printf("[DEBUG] Creating Top Level..") 52 if _, err := directoriesClient.Create(ctx, accountName, shareName, "hello", metaData); err != nil { 53 t.Fatalf("Error creating Top Level Directory: %s", err) 54 } 55 56 log.Printf("[DEBUG] Creating Inner..") 57 if _, err := directoriesClient.Create(ctx, accountName, shareName, "hello/there", metaData); err != nil { 58 t.Fatalf("Error creating Inner Directory: %s", err) 59 } 60 61 log.Printf("[DEBUG] Retrieving share") 62 innerDir, err := directoriesClient.Get(ctx, accountName, shareName, "hello/there") 63 if err != nil { 64 t.Fatalf("Error retrieving Inner Directory: %s", err) 65 } 66 67 if innerDir.DirectoryMetaDataEncrypted != true { 68 t.Fatalf("Expected MetaData to be encrypted but got: %t", innerDir.DirectoryMetaDataEncrypted) 69 } 70 71 if len(innerDir.MetaData) != 1 { 72 t.Fatalf("Expected MetaData to contain 1 item but got %d", len(innerDir.MetaData)) 73 } 74 if innerDir.MetaData["hello"] != "world" { 75 t.Fatalf("Expected MetaData `hello` to be `world`: %s", innerDir.MetaData["hello"]) 76 } 77 78 log.Printf("[DEBUG] Setting MetaData") 79 updatedMetaData := map[string]string{ 80 "panda": "pops", 81 } 82 if _, err := directoriesClient.SetMetaData(ctx, accountName, shareName, "hello/there", updatedMetaData); err != nil { 83 t.Fatalf("Error updating MetaData: %s", err) 84 } 85 86 log.Printf("[DEBUG] Retrieving MetaData") 87 retrievedMetaData, err := directoriesClient.GetMetaData(ctx, accountName, shareName, "hello/there") 88 if err != nil { 89 t.Fatalf("Error retrieving the updated metadata: %s", err) 90 } 91 if len(retrievedMetaData.MetaData) != 1 { 92 t.Fatalf("Expected the updated metadata to have 1 item but got %d", len(retrievedMetaData.MetaData)) 93 } 94 if retrievedMetaData.MetaData["panda"] != "pops" { 95 t.Fatalf("Expected the metadata `panda` to be `pops` but got %q", retrievedMetaData.MetaData["panda"]) 96 } 97 98 t.Logf("[DEBUG] Deleting Inner..") 99 if _, err := directoriesClient.Delete(ctx, accountName, shareName, "hello/there"); err != nil { 100 t.Fatalf("Error deleting Inner Directory: %s", err) 101 } 102 103 t.Logf("[DEBUG] Deleting Top Level..") 104 if _, err := directoriesClient.Delete(ctx, accountName, shareName, "hello"); err != nil { 105 t.Fatalf("Error deleting Top Level Directory: %s", err) 106 } 107} 108