Skip to content
Snippets Groups Projects
Commit ddf7ca8b authored by L. Ellenbeck's avatar L. Ellenbeck
Browse files

added unit test for S3MultipartStream coscine/issues#81

parent 31e2f179
Branches
Tags
2 merge requests!2Product/75 s3 zip metadata,!1Topic/81 s3 zip upload

using Amazon.S3;
using coscine.cs_S3Zip;
using Amazon.S3.Model;
using NUnit.Framework;
using System;
using System.IO;
using System.Linq;
using System.Security.Cryptography;
namespace cs_S3Zip.Tests
namespace coscine.cs_S3Zip.Tests
{
[TestFixture]
public class S3ZipTests
{
private readonly S3MultipartStreamConfiguration _s3MultipartStreamConfiguration;
private readonly int ONE_MB;
public S3ZipTests()
{
var accessKey = Environment.GetEnvironmentVariable("AccessKey", EnvironmentVariableTarget.User);
var secretKey = Environment.GetEnvironmentVariable("SecretKey", EnvironmentVariableTarget.User);
var accessKey = Environment.GetEnvironmentVariable("S3_ACCESS_KEY", EnvironmentVariableTarget.User);
var secretKey = Environment.GetEnvironmentVariable("S3_SECRET_KEY", EnvironmentVariableTarget.User);
ONE_MB = (int)Math.Pow(2, 20);
_s3MultipartStreamConfiguration = new S3MultipartStreamConfiguration
{
......@@ -31,18 +36,73 @@ namespace cs_S3Zip.Tests
};
}
[Test]
/*[Test]
public void ZipAndUpload()
{
//var s3 = new S3Zip(_s3MultipartStreamConfiguration);
//s3.ZipAndUploadFolder(@"c:\temp\test", "zipTest4.zip");
var s3 = new S3Zip(_s3MultipartStreamConfiguration);
s3.ZipAndUploadFolder(@"c:\temp\test", "zipTest4.zip");
Assert.IsTrue(true);
}*/
[TestCase(110, 50)]
[TestCase(110, 5)]
[TestCase(30, 50)]
[TestCase(30, 5)]
public void S3StreamTest(int length, int chunkSize)
{
var key = "S3StreamTest.txt";
var chars = "$%#@!*abcdefghijklmnopqrstuvwxyz1234567890?;:ABCDEFGHIJKLMNOPQRSTUVWXYZ^&".ToCharArray();
var random = new Random();
var randomArray = new byte[length * ONE_MB];
var oldChunkSize = _s3MultipartStreamConfiguration.ChunckSize;
_s3MultipartStreamConfiguration.ChunckSize = chunkSize * ONE_MB;
// fill array with random data
for (int i = 0; i < randomArray.Length; i++)
{
randomArray[i] = (byte)chars[random.Next(chars.Length)];
}
[Test]
public void S3StreamTest()
using (var s3Stream = new S3MultipartStream(key, _s3MultipartStreamConfiguration))
{
Assert.IsTrue(true);
for (int i = 0; i < length; i++)
{
s3Stream.Write(randomArray, i * ONE_MB, ONE_MB);
}
}
var request = new GetObjectRequest
{
BucketName = _s3MultipartStreamConfiguration.BucketName,
Key = key
};
using (var client = new AmazonS3Client(_s3MultipartStreamConfiguration.AccessKey, _s3MultipartStreamConfiguration.SecretKey, _s3MultipartStreamConfiguration.AmazonS3Config))
{
var buffer = new byte[ONE_MB];
using (var response = client.GetObject(request))
{
// Was request successfull?
Assert.IsTrue(response.HttpStatusCode == System.Net.HttpStatusCode.OK);
// Has the correct length?
Assert.IsTrue(response.ContentLength == length * ONE_MB);
using (var responseStream = response.ResponseStream)
{
int alreadyRead = 0;
for (int i = 0; i < length; i++)
{
int read = responseStream.Read(buffer, 0, buffer.Length);
// check if the data is equal to the previously generated one.
Assert.IsTrue(Enumerable.SequenceEqual(randomArray.Skip(alreadyRead).Take(read), buffer.Take(read)));
alreadyRead += read;
}
}
}
}
_s3MultipartStreamConfiguration.ChunckSize = oldChunkSize;
}
}
}
......@@ -9,7 +9,7 @@
<ProjectGuid>{6B58EB5E-D857-464B-8174-C17375BAE1CF}</ProjectGuid>
<OutputType>Library</OutputType>
<AppDesignerFolder>Properties</AppDesignerFolder>
<RootNamespace>cs_S3Zip.Tests</RootNamespace>
<RootNamespace>coscine.cs_S3Zip.Tests</RootNamespace>
<AssemblyName>cs-S3Zip.Tests</AssemblyName>
<TargetFrameworkVersion>v4.7.2</TargetFrameworkVersion>
<FileAlignment>512</FileAlignment>
......
......@@ -8,18 +8,18 @@ namespace coscine.cs_S3Zip
{
public class S3MultipartStream : Stream
{
private MemoryStream _internalStream;
private readonly Stream _internalStream;
private readonly InitiateMultipartUploadResponse _initiateMultipartUploadResponse;
private readonly List<UploadPartResponse> _uploadPartResponses;
private int _part;
private int _length;
private int _position;
public S3MultipartStream(string key, S3MultipartStreamConfiguration s3MultipartStreamConfiguration)
public S3MultipartStream(string key, S3MultipartStreamConfiguration s3MultipartStreamConfiguration, Stream internalStream)
{
S3MultipartStreamConfiguration = s3MultipartStreamConfiguration;
_internalStream = new MemoryStream(S3MultipartStreamConfiguration.ChunckSize);
_internalStream = internalStream;
_uploadPartResponses = new List<UploadPartResponse>();
_part = 0;
_length = 0;
......@@ -39,6 +39,11 @@ namespace coscine.cs_S3Zip
}
}
public S3MultipartStream(string key, S3MultipartStreamConfiguration s3MultipartStreamConfiguration) : this(key, s3MultipartStreamConfiguration, new MemoryStream(s3MultipartStreamConfiguration.ChunckSize))
{
}
public string Key { get; }
public S3MultipartStreamConfiguration S3MultipartStreamConfiguration { get; set; }
......@@ -115,8 +120,8 @@ namespace coscine.cs_S3Zip
InputStream = _internalStream
};
_part++;
_uploadPartResponses.Add(client.UploadPart(uploadPartRequest));
_part++;
}
}
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment