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