restic/vendor/github.com/Azure/azure-sdk-for-go/storage/table_batch_test.go
Alexander Neumann 2b39f9f4b2 Update dependencies
Among others, this updates minio-go, so that the new "eu-west-3" zone
for AWS is supported.
2018-01-23 19:40:42 +01:00

233 lines
6.9 KiB
Go

// +build go1.7
package storage
// Copyright 2017 Microsoft Corporation
//
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
// You may obtain a copy of the License at
//
// http://www.apache.org/licenses/LICENSE-2.0
//
// Unless required by applicable law or agreed to in writing, software
// distributed under the License is distributed on an "AS IS" BASIS,
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
// See the License for the specific language governing permissions and
// limitations under the License.
import (
"time"
"github.com/satori/go.uuid"
chk "gopkg.in/check.v1"
)
type TableBatchSuite struct{}
var _ = chk.Suite(&TableBatchSuite{})
func (s *TableBatchSuite) Test_BatchInsertMultipleEntities(c *chk.C) {
cli := getBasicClient(c).GetTableService()
rec := cli.client.appendRecorder(c)
defer rec.Stop()
table := cli.GetTableReference(tableName(c, "me"))
err := table.Create(30, EmptyPayload, nil)
c.Assert(err, chk.IsNil)
defer table.Delete(30, nil)
entity := table.GetEntityReference("mypartitionkey", "myrowkey")
props := map[string]interface{}{
"AmountDue": 200.23,
"CustomerCode": uuid.FromStringOrNil("c9da6455-213d-42c9-9a79-3e9149a57833"),
"CustomerSince": time.Date(1992, time.December, 20, 21, 55, 0, 0, time.UTC),
"IsActive": true,
"NumberOfOrders": int64(255),
}
entity.Properties = props
entity2 := table.GetEntityReference("mypartitionkey", "myrowkey2")
props2 := map[string]interface{}{
"AmountDue": 111.23,
"CustomerCode": uuid.FromStringOrNil("c9da6455-213d-42c9-9a79-3e9149a57833"),
"CustomerSince": time.Date(1992, time.December, 20, 21, 55, 0, 0, time.UTC),
"IsActive": true,
"NumberOfOrders": int64(255),
}
entity2.Properties = props2
batch := table.NewBatch()
batch.InsertOrReplaceEntity(entity, false)
batch.InsertOrReplaceEntity(entity2, false)
err = batch.ExecuteBatch()
c.Assert(err, chk.IsNil)
options := QueryOptions{
Top: 2,
}
results, err := table.QueryEntities(30, FullMetadata, &options)
c.Assert(err, chk.IsNil)
c.Assert(results.Entities, chk.HasLen, 2)
}
func (s *TableBatchSuite) Test_BatchInsertSameEntryMultipleTimes(c *chk.C) {
cli := getBasicClient(c).GetTableService()
rec := cli.client.appendRecorder(c)
defer rec.Stop()
table := cli.GetTableReference(tableName(c))
err := table.Create(30, EmptyPayload, nil)
c.Assert(err, chk.IsNil)
defer table.Delete(30, nil)
entity := table.GetEntityReference("mypartitionkey", "myrowkey")
props := map[string]interface{}{
"AmountDue": 200.23,
"CustomerCode": uuid.FromStringOrNil("c9da6455-213d-42c9-9a79-3e9149a57833"),
"CustomerSince": time.Date(1992, time.December, 20, 21, 55, 0, 0, time.UTC),
"IsActive": true,
"NumberOfOrders": int64(255),
}
entity.Properties = props
batch := table.NewBatch()
batch.InsertOrReplaceEntity(entity, false)
batch.InsertOrReplaceEntity(entity, false)
err = batch.ExecuteBatch()
c.Assert(err, chk.NotNil)
v, ok := err.(AzureStorageServiceError)
if ok {
c.Assert(v.Code, chk.Equals, "InvalidDuplicateRow")
}
}
func (s *TableBatchSuite) Test_BatchInsertDeleteSameEntity(c *chk.C) {
cli := getBasicClient(c).GetTableService()
rec := cli.client.appendRecorder(c)
defer rec.Stop()
table := cli.GetTableReference(tableName(c))
err := table.Create(30, EmptyPayload, nil)
c.Assert(err, chk.IsNil)
defer table.Delete(30, nil)
entity := table.GetEntityReference("mypartitionkey", "myrowkey")
props := map[string]interface{}{
"AmountDue": 200.23,
"CustomerCode": uuid.FromStringOrNil("c9da6455-213d-42c9-9a79-3e9149a57833"),
"CustomerSince": time.Date(1992, time.December, 20, 21, 55, 0, 0, time.UTC),
"IsActive": true,
"NumberOfOrders": int64(255),
}
entity.Properties = props
batch := table.NewBatch()
batch.InsertOrReplaceEntity(entity, false)
batch.DeleteEntity(entity, true)
err = batch.ExecuteBatch()
c.Assert(err, chk.NotNil)
v, ok := err.(AzureStorageServiceError)
if ok {
c.Assert(v.Code, chk.Equals, "InvalidDuplicateRow")
}
}
func (s *TableBatchSuite) Test_BatchInsertThenDeleteDifferentBatches(c *chk.C) {
cli := getBasicClient(c).GetTableService()
rec := cli.client.appendRecorder(c)
defer rec.Stop()
table := cli.GetTableReference(tableName(c))
err := table.Create(30, EmptyPayload, nil)
c.Assert(err, chk.IsNil)
defer table.Delete(30, nil)
entity := table.GetEntityReference("mypartitionkey", "myrowkey")
props := map[string]interface{}{
"AmountDue": 200.23,
"CustomerCode": uuid.FromStringOrNil("c9da6455-213d-42c9-9a79-3e9149a57833"),
"CustomerSince": time.Date(1992, time.December, 20, 21, 55, 0, 0, time.UTC),
"IsActive": true,
"NumberOfOrders": int64(255),
}
entity.Properties = props
batch := table.NewBatch()
batch.InsertOrReplaceEntity(entity, false)
err = batch.ExecuteBatch()
c.Assert(err, chk.IsNil)
options := QueryOptions{
Top: 2,
}
results, err := table.QueryEntities(30, FullMetadata, &options)
c.Assert(err, chk.IsNil)
c.Assert(results.Entities, chk.HasLen, 1)
batch = table.NewBatch()
batch.DeleteEntity(entity, true)
err = batch.ExecuteBatch()
c.Assert(err, chk.IsNil)
// Timeout set to 15 for this test to work propwrly with the recordings
results, err = table.QueryEntities(15, FullMetadata, &options)
c.Assert(err, chk.IsNil)
c.Assert(results.Entities, chk.HasLen, 0)
}
func (s *TableBatchSuite) Test_BatchInsertThenMergeDifferentBatches(c *chk.C) {
cli := getBasicClient(c).GetTableService()
rec := cli.client.appendRecorder(c)
defer rec.Stop()
table := cli.GetTableReference(tableName(c))
err := table.Create(30, EmptyPayload, nil)
c.Assert(err, chk.IsNil)
defer table.Delete(30, nil)
entity := table.GetEntityReference("mypartitionkey", "myrowkey")
props := map[string]interface{}{
"AmountDue": 200.23,
"CustomerCode": uuid.FromStringOrNil("c9da6455-213d-42c9-9a79-3e9149a57833"),
"CustomerSince": time.Date(1992, time.December, 20, 21, 55, 0, 0, time.UTC),
"IsActive": true,
"NumberOfOrders": int64(255),
}
entity.Properties = props
batch := table.NewBatch()
batch.InsertOrReplaceEntity(entity, false)
err = batch.ExecuteBatch()
c.Assert(err, chk.IsNil)
entity2 := table.GetEntityReference("mypartitionkey", "myrowkey")
props2 := map[string]interface{}{
"AmountDue": 200.23,
"CustomerCode": uuid.FromStringOrNil("c9da6455-213d-42c9-9a79-3e9149a57833"),
"CustomerSince": time.Date(1992, time.December, 20, 21, 55, 0, 0, time.UTC),
"DifferentField": 123,
"NumberOfOrders": int64(255),
}
entity2.Properties = props2
batch = table.NewBatch()
batch.InsertOrReplaceEntity(entity2, false)
err = batch.ExecuteBatch()
c.Assert(err, chk.IsNil)
options := QueryOptions{
Top: 2,
}
results, err := table.QueryEntities(30, FullMetadata, &options)
c.Assert(err, chk.IsNil)
c.Assert(results.Entities, chk.HasLen, 1)
}