func (s *S3Suite) TestS3Connection(c *C) { createBucket := s3.CreateBucketInput{Bucket: aws.String("bucket")} _, err := s.svc.CreateBucket(&createBucket) c.Assert(err, IsNil) conn := NewS3Connection(credentials.AnonymousCredentials, "bucket", "prefix", s.region, s.endpoint) files, err := conn.ListDir("path", nil) c.Assert(err, IsNil) c.Assert(len(files.Files), Equals, 0) buffer := bytes.NewReader(make([]byte, 100)) putObject := s3.PutObjectInput{} putObject.Bucket = aws.String("bucket") putObject.Key = aws.String("prefix/banana") putObject.Body = buffer s.svc.PutObject(&putObject) putObject = s3.PutObjectInput{} putObject.Bucket = aws.String("bucket") putObject.Key = aws.String("prefix/sampledir/") putObject.Body = bytes.NewReader(make([]byte, 0)) s.svc.PutObject(&putObject) putObject = s3.PutObjectInput{} putObject.Bucket = aws.String("bucket") putObject.Key = aws.String("prefix/sampledir/a") putObject.Body = bytes.NewReader(make([]byte, 0)) s.svc.PutObject(&putObject) putObject = s3.PutObjectInput{} putObject.Bucket = aws.String("bucket") putObject.Key = aws.String("prefix/sampledir/b") putObject.Body = bytes.NewReader(make([]byte, 0)) s.svc.PutObject(&putObject) files, err = conn.ListDir("", nil) fmt.Printf("files=%s\n", files) c.Assert(err, IsNil) c.Assert(len(files.Files), Equals, 2) f := files.Files[1] c.Assert(f.Name, Equals, "banana") c.Assert(f.Size, Equals, uint64(100)) c.Assert(f.IsDir, Equals, false) f = files.Files[0] c.Assert(f.Name, Equals, "sampledir") c.Assert(f.Size, Equals, uint64(0)) c.Assert(f.IsDir, Equals, true) }
func (s *S3Suite) TestS3ModifyDuringRead(c *C) { createBucket := s3.CreateBucketInput{Bucket: aws.String("modified")} _, err := s.svc.CreateBucket(&createBucket) c.Assert(err, IsNil) // upload a file buffer := bytes.NewReader(make([]byte, 100)) putObject := s3.PutObjectInput{} putObject.Bucket = aws.String("modified") putObject.Key = aws.String("prefix/banana") putObject.Body = buffer s.svc.PutObject(&putObject) // make sure ListDir sees it conn := NewS3Connection(credentials.AnonymousCredentials, "modified", "prefix", s.region, s.endpoint) files, err := conn.ListDir("", nil) c.Assert(err, IsNil) c.Assert(len(files.Files), Equals, 1) f := files.Files[0] c.Assert(f.Name, Equals, "banana") localFile, _ := ioutil.TempFile(c.MkDir(), "local") localPath := localFile.Name() localFile.Close() status := &NullStatusCallback{} // Perform a read region, err := conn.PrepareForRead("banana", f.Etag, localPath, 0, 10, status) c.Assert(err, IsNil) c.Assert(region.Offset, Equals, uint64(0)) c.Assert(region.Length, Equals, uint64(10)) // upload new version of object buffer = bytes.NewReader(make([]byte, 101)) putObject = s3.PutObjectInput{} putObject.Bucket = aws.String("modified") putObject.Key = aws.String("prefix/banana") putObject.Body = buffer s.svc.PutObject(&putObject) // try a read, and we should get a failure because data changed, and hence Etag _, err = conn.PrepareForRead("banana", f.Etag, localPath, 10, 20, status) c.Assert(err, Equals, UpdateDetected) }