...

Source file src/github.com/Azure/azure-sdk-for-go/storage/table_test.go

Documentation: github.com/Azure/azure-sdk-for-go/storage

     1  package storage
     2  
     3  // Copyright (c) Microsoft Corporation. All rights reserved.
     4  // Licensed under the MIT License. See License.txt in the project root for license information.
     5  
     6  import (
     7  	"strconv"
     8  	"time"
     9  
    10  	chk "gopkg.in/check.v1"
    11  )
    12  
    13  type StorageTableSuite struct{}
    14  
    15  var _ = chk.Suite(&StorageTableSuite{})
    16  
    17  func getTableClient(c *chk.C) TableServiceClient {
    18  	return getBasicClient(c).GetTableService()
    19  }
    20  
    21  func (cli *TableServiceClient) deleteAllTables() {
    22  	if result, _ := cli.QueryTables(MinimalMetadata, nil); result != nil {
    23  		for _, t := range result.Tables {
    24  			t.Delete(30, nil)
    25  		}
    26  	}
    27  }
    28  
    29  func (s *StorageTableSuite) Test_CreateAndDeleteTable(c *chk.C) {
    30  	cli := getTableClient(c)
    31  	rec := cli.client.appendRecorder(c)
    32  	defer rec.Stop()
    33  
    34  	table1 := cli.GetTableReference(tableName(c, "1"))
    35  	err := table1.Create(30, EmptyPayload, nil)
    36  	c.Assert(err, chk.IsNil)
    37  
    38  	// update table metadata
    39  	table2 := cli.GetTableReference(tableName(c, "2"))
    40  	err = table2.Create(30, FullMetadata, nil)
    41  	defer table2.Delete(30, nil)
    42  	c.Assert(err, chk.IsNil)
    43  
    44  	// Check not empty values
    45  	c.Assert(table2.OdataEditLink, chk.Not(chk.Equals), "")
    46  	c.Assert(table2.OdataID, chk.Not(chk.Equals), "")
    47  	c.Assert(table2.OdataMetadata, chk.Not(chk.Equals), "")
    48  	c.Assert(table2.OdataType, chk.Not(chk.Equals), "")
    49  
    50  	err = table1.Delete(30, nil)
    51  	c.Assert(err, chk.IsNil)
    52  }
    53  
    54  func (s *StorageTableSuite) Test_CreateTableWithAllResponsePayloadLevels(c *chk.C) {
    55  	cli := getTableClient(c)
    56  	rec := cli.client.appendRecorder(c)
    57  	defer rec.Stop()
    58  
    59  	createAndDeleteTable(cli, EmptyPayload, c, "empty")
    60  	createAndDeleteTable(cli, NoMetadata, c, "nm")
    61  	createAndDeleteTable(cli, MinimalMetadata, c, "minimal")
    62  	createAndDeleteTable(cli, FullMetadata, c, "full")
    63  }
    64  
    65  func (s *StorageTableSuite) TestGet(c *chk.C) {
    66  	cli := getTableClient(c)
    67  	rec := cli.client.appendRecorder(c)
    68  	defer rec.Stop()
    69  
    70  	tn := tableName(c)
    71  	table := cli.GetTableReference(tn)
    72  	err := table.Create(30, EmptyPayload, nil)
    73  	c.Assert(err, chk.IsNil)
    74  	defer table.Delete(30, nil)
    75  
    76  	err = table.Get(30, FullMetadata)
    77  	c.Assert(err, chk.IsNil)
    78  	c.Assert(table.Name, chk.Equals, tn)
    79  	c.Assert(table.OdataEditLink, chk.Not(chk.Equals), "")
    80  	c.Assert(table.OdataID, chk.Not(chk.Equals), "")
    81  	c.Assert(table.OdataMetadata, chk.Not(chk.Equals), "")
    82  	c.Assert(table.OdataType, chk.Not(chk.Equals), "")
    83  }
    84  
    85  func createAndDeleteTable(cli TableServiceClient, ml MetadataLevel, c *chk.C, extra string) {
    86  	table := cli.GetTableReference(tableName(c, extra))
    87  	c.Assert(table.Create(30, ml, nil), chk.IsNil)
    88  	c.Assert(table.Delete(30, nil), chk.IsNil)
    89  }
    90  
    91  func (s *StorageTableSuite) TestQueryTablesNextResults(c *chk.C) {
    92  	cli := getTableClient(c)
    93  	rec := cli.client.appendRecorder(c)
    94  	defer rec.Stop()
    95  	cli.deleteAllTables()
    96  
    97  	for i := 0; i < 3; i++ {
    98  		table := cli.GetTableReference(tableName(c, strconv.Itoa(i)))
    99  		err := table.Create(30, EmptyPayload, nil)
   100  		c.Assert(err, chk.IsNil)
   101  		defer table.Delete(30, nil)
   102  	}
   103  
   104  	options := QueryTablesOptions{
   105  		Top: 2,
   106  	}
   107  	result, err := cli.QueryTables(MinimalMetadata, &options)
   108  	c.Assert(err, chk.IsNil)
   109  	c.Assert(result.Tables, chk.HasLen, 2)
   110  	c.Assert(result.NextLink, chk.NotNil)
   111  
   112  	result, err = result.NextResults(nil)
   113  	c.Assert(err, chk.IsNil)
   114  	c.Assert(result.Tables, chk.HasLen, 1)
   115  	c.Assert(result.NextLink, chk.IsNil)
   116  
   117  	result, err = result.NextResults(nil)
   118  	c.Assert(result, chk.IsNil)
   119  	c.Assert(err, chk.NotNil)
   120  }
   121  
   122  func appendTablePermission(policies []TableAccessPolicy, ID string,
   123  	canRead bool, canAppend bool, canUpdate bool, canDelete bool,
   124  	startTime time.Time, expiryTime time.Time) []TableAccessPolicy {
   125  
   126  	tap := TableAccessPolicy{
   127  		ID:         ID,
   128  		StartTime:  startTime,
   129  		ExpiryTime: expiryTime,
   130  		CanRead:    canRead,
   131  		CanAppend:  canAppend,
   132  		CanUpdate:  canUpdate,
   133  		CanDelete:  canDelete,
   134  	}
   135  	policies = append(policies, tap)
   136  	return policies
   137  }
   138  
   139  func (s *StorageTableSuite) TestSetPermissionsSuccessfully(c *chk.C) {
   140  	cli := getTableClient(c)
   141  	rec := cli.client.appendRecorder(c)
   142  	defer rec.Stop()
   143  
   144  	table := cli.GetTableReference(tableName(c))
   145  	c.Assert(table.Create(30, EmptyPayload, nil), chk.IsNil)
   146  	defer table.Delete(30, nil)
   147  
   148  	policies := []TableAccessPolicy{}
   149  	policies = appendTablePermission(policies, "GolangRocksOnAzure", true, true, true, true, fixedTime, fixedTime.Add(10*time.Hour))
   150  
   151  	err := table.SetPermissions(policies, 30, nil)
   152  	c.Assert(err, chk.IsNil)
   153  }
   154  
   155  func (s *StorageTableSuite) TestSetPermissionsUnsuccessfully(c *chk.C) {
   156  	cli := getTableClient(c)
   157  	rec := cli.client.appendRecorder(c)
   158  	defer rec.Stop()
   159  
   160  	table := cli.GetTableReference("nonexistingtable")
   161  
   162  	policies := []TableAccessPolicy{}
   163  	policies = appendTablePermission(policies, "GolangRocksOnAzure", true, true, true, true, fixedTime, fixedTime.Add(10*time.Hour))
   164  
   165  	err := table.SetPermissions(policies, 30, nil)
   166  	c.Assert(err, chk.NotNil)
   167  }
   168  
   169  func (s *StorageTableSuite) TestSetThenGetPermissionsSuccessfully(c *chk.C) {
   170  	cli := getTableClient(c)
   171  	rec := cli.client.appendRecorder(c)
   172  	defer rec.Stop()
   173  
   174  	table := cli.GetTableReference(tableName(c))
   175  	c.Assert(table.Create(30, EmptyPayload, nil), chk.IsNil)
   176  	defer table.Delete(30, nil)
   177  
   178  	policies := []TableAccessPolicy{}
   179  	policies = appendTablePermission(policies, "GolangRocksOnAzure", true, true, true, true, fixedTime, fixedTime.Add(10*time.Hour))
   180  	policies = appendTablePermission(policies, "AutoRestIsSuperCool", true, true, false, true, fixedTime.Add(20*time.Hour), fixedTime.Add(30*time.Hour))
   181  
   182  	err := table.SetPermissions(policies, 30, nil)
   183  	c.Assert(err, chk.IsNil)
   184  
   185  	newPolicies, err := table.GetPermissions(30, nil)
   186  	c.Assert(err, chk.IsNil)
   187  
   188  	// fixedTime check policy set.
   189  	c.Assert(newPolicies, chk.HasLen, 2)
   190  
   191  	for i := range newPolicies {
   192  		c.Assert(newPolicies[i].ID, chk.Equals, policies[i].ID)
   193  
   194  		// test timestamps down the second
   195  		// rounding start/expiry time original perms since the returned perms would have been rounded.
   196  		// so need rounded vs rounded.
   197  		c.Assert(newPolicies[i].StartTime.UTC().Round(time.Second).Format(time.RFC1123),
   198  			chk.Equals, policies[i].StartTime.UTC().Round(time.Second).Format(time.RFC1123))
   199  		c.Assert(newPolicies[i].ExpiryTime.UTC().Round(time.Second).Format(time.RFC1123),
   200  			chk.Equals, policies[i].ExpiryTime.UTC().Round(time.Second).Format(time.RFC1123))
   201  
   202  		c.Assert(newPolicies[i].CanRead, chk.Equals, policies[i].CanRead)
   203  		c.Assert(newPolicies[i].CanAppend, chk.Equals, policies[i].CanAppend)
   204  		c.Assert(newPolicies[i].CanUpdate, chk.Equals, policies[i].CanUpdate)
   205  		c.Assert(newPolicies[i].CanDelete, chk.Equals, policies[i].CanDelete)
   206  	}
   207  }
   208  
   209  func tableName(c *chk.C, extras ...string) string {
   210  	// 32 is the max len for table names
   211  	return nameGenerator(32, "table", alpha, c, extras)
   212  }
   213  

View as plain text