public void RunAsync_IOException() { // ARRANGE byte[] expected = new byte[FactoryNode.Node.Size.Value]; new Random().NextBytes(expected); IInternalDracoonClient c = FactoryClients.InternalDracoonClientMock(); Stream s = new MemoryStream(); FileDownloadCallbackMock callback = new FileDownloadCallbackMock(); FileDownload f = new FileDownload(c, "id1", FactoryNode.Node, s); f.AddFileDownloadCallback(callback); Mock.Arrange(() => c.Builder.PostFileDownload(Arg.AnyLong)).Returns(FactoryRestSharp.PostFileDownloadMock(123)).OnAllThreads(); Mock.Arrange(() => c.Executor.DoSyncApiCall <ApiDownloadToken>(Arg.IsAny <IRestRequest>(), RequestType.PostDownloadToken, 0)) .Returns(FactoryNode.ApiDownloadToken).OnAllThreads(); DracoonWebClientExtension wc = Mock.Create <DracoonWebClientExtension>(); Mock.Arrange(() => Mock.Create <DownloadProgressChangedEventArgs>().BytesReceived).IgnoreInstance().Returns(expected.Length); Mock.Arrange(() => c.Executor.ExecuteWebClientDownload(Arg.IsAny <WebClient>(), Arg.IsAny <Uri>(), RequestType.GetDownloadChunk, Arg.IsAny <Thread>(), Arg.AnyInt)) .Raises(() => wc.DownloadProgressChanged += null, null, Mock.Create <DownloadProgressChangedEventArgs>()).Returns(expected).OnAllThreads(); Mock.Arrange(() => s.Write(Arg.IsAny <byte[]>(), Arg.AnyInt, Arg.AnyInt)).Throws(new IOException()).OnAllThreads(); Mock.Arrange(() => c.Builder.ProvideChunkDownloadWebClient(Arg.AnyLong, Arg.AnyLong)).Returns(wc).OnAllThreads(); Mock.Arrange(() => callback.OnFailed(Arg.AnyString, Arg.IsAny <DracoonException>())).Occurs(1); // ACT f.RunAsync(); while (f.RunningThread.IsAlive) { } s.Close(); // ASSERT Mock.Assert(callback); }
WebClient IRequestBuilder.ProvideS3ChunkUploadWebClient() { DracoonWebClientExtension requestClient = new DracoonWebClientExtension(); SetGeneralWebClientValues(requestClient); return(requestClient); }
WebClient IRequestBuilder.ProvideChunkDownloadWebClient(long offset, long count) { DracoonWebClientExtension requestClient = new DracoonWebClientExtension(rangeFrom: offset, rangeTo: (offset + count) - 1); SetGeneralWebClientValues(requestClient); return(requestClient); }
WebClient IRequestBuilder.ProvideChunkUploadWebClient(int chunkLength, long offset, string formDataBoundary, string totalFileSize) { DracoonWebClientExtension requestClient = new DracoonWebClientExtension(); requestClient.Headers.Add(HttpRequestHeader.ContentRange, "bytes " + offset + "-" + (offset + chunkLength) + "/" + totalFileSize); requestClient.Headers.Add(HttpRequestHeader.ContentType, "multipart/form-data; boundary=" + formDataBoundary); SetGeneralWebClientValues(requestClient); return(requestClient); }
WebClient IRequestBuilder.ProvideAvatarUploadWebClient(string formDataBoundary) { DracoonWebClientExtension requestClient = new DracoonWebClientExtension(); requestClient.Headers.Add(HttpRequestHeader.ContentType, "multipart/form-data; boundary=" + formDataBoundary); requestClient.Headers.Add(ApiConfig.AuthorizationHeader, _auth.BuildAuthString()); SetGeneralWebClientValues(requestClient); return(requestClient); }
public void RunSync_UnknownFileSize_Success() { // ARRANGE byte[] fileMock = new byte[1888]; new Random().NextBytes(fileMock); Stream s = new MemoryStream(fileMock); IInternalDracoonClient c = FactoryClients.InternalDracoonClientMock(true); FileUploadCallbackMock callback = new FileUploadCallbackMock(); FileUpload f = new FileUpload(c, "id1", FactoryFile.UploadFileRequest, s, -1); f.AddFileUploadCallback(callback); ApiCreateFileUpload acfu = FactoryFile.ApiCreateFileUpload; acfu.Classification = null; Mock.Arrange(() => c.Builder.PostCreateFileUpload(Arg.IsAny <ApiCreateFileUpload>())).Returns(FactoryRestSharp.PostCreateFileUploadMock()) .Occurs(1); Mock.Arrange(() => c.Executor.DoSyncApiCall <ApiUploadToken>(Arg.IsAny <IRestRequest>(), RequestType.PostUploadToken, 0)) .Returns(FactoryFile.ApiUploadToken).Occurs(1); Mock.Arrange(() => c.Builder.PutCompleteFileUpload(Arg.AnyString, Arg.IsAny <ApiCompleteFileUpload>())) .Returns(FactoryRestSharp.PutCompleteFileUploadMock("path")).Occurs(1); Mock.Arrange(() => c.Executor.DoSyncApiCall <ApiNode>(Arg.IsAny <IRestRequest>(), RequestType.PutCompleteUpload, 0)) .Returns(FactoryNode.ApiNode).Occurs(1); Mock.Arrange(() => c.Builder.GetGeneralSettings()) .Returns(FactoryRestSharp.RestRequestWithAuth(ApiConfig.ApiGetGeneralConfig, Method.GET)).Occurs(1); Mock.Arrange(() => c.Executor.DoSyncApiCall <ApiGeneralSettings>(Arg.IsAny <IRestRequest>(), RequestType.GetGeneralSettings, 0)) .Returns(FactoryServerSettings.ApiGeneralSettings).Occurs(1); Mock.Arrange(() => FileMapper.ToApiCreateFileUpload(Arg.IsAny <FileUploadRequest>())).Returns(acfu).Occurs(1); Mock.Arrange(() => NodeMapper.FromApiNode(Arg.IsAny <ApiNode>())).Returns(FactoryNode.Node).Occurs(1); Mock.Arrange(() => FileHash.CompareFileHashes(Arg.AnyString, Arg.IsAny <byte[]>(), Arg.AnyInt)).Returns(true).OccursAtLeast(1); DracoonWebClientExtension wc = Mock.Create <DracoonWebClientExtension>(); Mock.Arrange(() => Mock.Create <UploadProgressChangedEventArgs>().BytesSent).IgnoreInstance(); Mock.Arrange(() => c.Executor.ExecuteWebClientChunkUpload(Arg.IsAny <WebClient>(), Arg.IsAny <Uri>(), Arg.IsAny <byte[]>(), RequestType.PostUploadChunk, Arg.IsAny <Thread>(), Arg.AnyInt)).DoInstead(() => Thread.Sleep(250)) .Raises(() => wc.UploadProgressChanged += null, null, Mock.Create <UploadProgressChangedEventArgs>()).Returns(new byte[13]); Mock.Arrange(() => c.Builder.ProvideChunkUploadWebClient(Arg.AnyInt, Arg.AnyLong, Arg.AnyString, Arg.AnyString)).Returns(wc); Mock.Arrange(() => JsonConvert.DeserializeObject <ApiUploadChunkResult>(Arg.AnyString)).Returns(FactoryFile.ApiUploadChunkResult); Mock.Arrange(() => callback.OnStarted(Arg.AnyString)).Occurs(1); Mock.Arrange(() => callback.OnRunning(Arg.AnyString, Arg.AnyLong, Arg.AnyLong)).OccursAtLeast(1); Mock.Arrange(() => callback.OnFinished(Arg.AnyString, Arg.IsAny <Node>())).Occurs(1); // ACT Node actual = f.RunSync(); s.Close(); // ASSERT Assert.Equal(FactoryNode.Node, actual, new NodeComparer()); Mock.Assert(callback); Mock.Assert(c.Builder); Mock.Assert(c.Executor); }
public void RunAsync_IOException() { // ARRANGE byte[] fileMock = new byte[1888]; new Random().NextBytes(fileMock); Stream s = new MemoryStream(fileMock); IInternalDracoonClient c = FactoryClients.InternalDracoonClientMock(true); FileUploadCallbackMock callback = new FileUploadCallbackMock(); FileUpload f = new FileUpload(c, "id1", FactoryFile.UploadFileRequest, s, fileMock.Length); f.AddFileUploadCallback(callback); Mock.Arrange(() => c.Builder.PostCreateFileUpload(Arg.IsAny <ApiCreateFileUpload>())).Returns(FactoryRestSharp.PostCreateFileUploadMock()) .OnAllThreads(); Mock.Arrange(() => c.Executor.DoSyncApiCall <ApiUploadToken>(Arg.IsAny <IRestRequest>(), RequestType.PostUploadToken, 0)) .Returns(FactoryFile.ApiUploadToken).OnAllThreads(); Mock.Arrange(() => c.Builder.PutCompleteFileUpload(Arg.AnyString, Arg.IsAny <ApiCompleteFileUpload>())) .Returns(FactoryRestSharp.PutCompleteFileUploadMock("path")).OnAllThreads(); Mock.Arrange(() => c.Executor.DoSyncApiCall <ApiNode>(Arg.IsAny <IRestRequest>(), RequestType.PutCompleteUpload, 0)) .Returns(FactoryNode.ApiNode).OnAllThreads(); Mock.Arrange(() => c.Builder.GetGeneralSettings()) .Returns(FactoryRestSharp.RestRequestWithAuth(ApiConfig.ApiGetGeneralConfig, Method.GET)).OnAllThreads(); Mock.Arrange(() => c.Executor.DoSyncApiCall <ApiGeneralSettings>(Arg.IsAny <IRestRequest>(), RequestType.GetGeneralSettings, 0)) .Returns(FactoryServerSettings.ApiGeneralSettings).OnAllThreads(); Mock.Arrange(() => FileMapper.ToApiCreateFileUpload(Arg.IsAny <FileUploadRequest>())).Returns(FactoryFile.ApiCreateFileUpload) .OnAllThreads(); Mock.Arrange(() => NodeMapper.FromApiNode(Arg.IsAny <ApiNode>())).Returns(FactoryNode.Node).OnAllThreads(); Mock.Arrange(() => FileHash.CompareFileHashes(Arg.AnyString, Arg.IsAny <byte[]>(), Arg.AnyInt)).Returns(true).OnAllThreads(); DracoonWebClientExtension wc = Mock.Create <DracoonWebClientExtension>(); Mock.Arrange(() => Mock.Create <UploadProgressChangedEventArgs>().BytesSent).IgnoreInstance().OnAllThreads(); Mock.Arrange(() => c.Executor.ExecuteWebClientChunkUpload(Arg.IsAny <WebClient>(), Arg.IsAny <Uri>(), Arg.IsAny <byte[]>(), RequestType.PostUploadChunk, Arg.IsAny <Thread>(), Arg.AnyInt)) .Raises(() => wc.UploadProgressChanged += null, null, Mock.Create <UploadProgressChangedEventArgs>()).Returns(new byte[13]) .OnAllThreads(); Mock.Arrange(() => c.Builder.ProvideChunkUploadWebClient(Arg.AnyInt, Arg.AnyLong, Arg.AnyString, Arg.AnyString)).Returns(wc) .OnAllThreads(); Mock.Arrange(() => JsonConvert.DeserializeObject <ApiUploadChunkResult>(Arg.AnyString)).Returns(FactoryFile.ApiUploadChunkResult) .OnAllThreads(); Mock.Arrange(() => s.Read(Arg.IsAny <byte[]>(), Arg.AnyInt, Arg.AnyInt)).Throws(new IOException()).OnAllThreads(); Mock.Arrange(() => callback.OnStarted(Arg.AnyString)).Occurs(1); Mock.Arrange(() => callback.OnFailed(Arg.AnyString, Arg.IsAny <DracoonException>())).Occurs(1); // ACT f.RunAsync(); while (f.RunningThread.IsAlive) { } s.Close(); // ASSERT Mock.Assert(callback); }
public void Nodes_ProvideS3ChunkUploadWebClient() { // ARRANGE DracoonHttpConfig conf = new DracoonHttpConfig(); IRequestBuilder builder = new DracoonRequestBuilder(FactoryClients.OAuthMock); DracoonWebClientExtension expected = new DracoonWebClientExtension(); expected.Headers.Add(HttpRequestHeader.UserAgent, conf.UserAgent); expected.SetHttpConfigParams(conf); // ACT WebClient actual = builder.ProvideS3ChunkUploadWebClient(); // ASSERT Assert.Equal(expected, actual, new WebClientComparer()); }
public void GetUserAvatar() { // ARRANGE Bitmap image = new Bitmap(50, 50); Graphics imageData = Graphics.FromImage(image); imageData.DrawLine(new Pen(Color.Red), 0, 0, 50, 50); MemoryStream memoryStream = new MemoryStream(); byte[] bitmapData; using (memoryStream) { image.Save(memoryStream, ImageFormat.Bmp); bitmapData = memoryStream.ToArray(); } long id = 5; string uuid = "H7D68J"; IInternalDracoonClient c = FactoryClients.InternalDracoonClientMock(true); DracoonUsersImpl u = new DracoonUsersImpl(c); Mock.Arrange(() => Arg.AnyLong.MustPositive(Arg.AnyString)).DoNothing().Occurs(1); Mock.Arrange(() => Arg.AnyString.MustNotNullOrEmptyOrWhitespace(Arg.AnyString, Arg.AnyBool)).DoNothing().Occurs(1); Mock.Arrange(() => c.Builder.GetUserAvatar(Arg.AnyLong, Arg.AnyString)).Returns(FactoryRestSharp.GetUserAvatarMock()).Occurs(1); Mock.Arrange(() => c.Executor.DoSyncApiCall <ApiAvatarInfo>(Arg.IsAny <IRestRequest>(), RequestType.GetResourcesAvatar, 0)) .Returns(FactoryUser.ApiAvatarInfo).Occurs(1); Mock.Arrange(() => c.Builder.ProvideAvatarDownloadWebClient()).Returns(() => { DracoonWebClientExtension wc = new DracoonWebClientExtension(); wc.Headers.Add(HttpRequestHeader.UserAgent, new DracoonHttpConfig().UserAgent); wc.SetHttpConfigParams(new DracoonHttpConfig()); return(wc); }).Occurs(1); Mock.Arrange(() => c.Executor.ExecuteWebClientDownload(Arg.IsAny <WebClient>(), Arg.IsAny <Uri>(), RequestType.GetResourcesAvatar, null, 0)) .Returns(bitmapData).Occurs(1); // ACT Image actual = u.GetUserAvatar(id, uuid); // ASSERT Assert.NotNull(actual); Mock.Assert(() => Arg.AnyLong.MustPositive(Arg.AnyString)); Mock.Assert(() => Arg.AnyString.MustNotNullOrEmptyOrWhitespace(Arg.AnyString, Arg.AnyBool)); Mock.Assert(c.Builder); Mock.Assert(c.Executor); }
public void Nodes_ProvideChunkUploadWebClient() { // ARRANGE int length = 54637; long offset = 5; string data = "someDataThings!", fileSize = "123"; DracoonHttpConfig conf = new DracoonHttpConfig(); IRequestBuilder builder = new DracoonRequestBuilder(FactoryClients.OAuthMock); DracoonWebClientExtension expected = new DracoonWebClientExtension(); expected.Headers.Add(HttpRequestHeader.ContentRange, "bytes " + offset + "-" + (offset + length) + "/" + fileSize); expected.Headers.Add(HttpRequestHeader.ContentType, "multipart/form-data; boundary=" + data); expected.Headers.Add(HttpRequestHeader.UserAgent, conf.UserAgent); expected.SetHttpConfigParams(conf); // ACT WebClient actual = builder.ProvideChunkUploadWebClient(length, offset, data, fileSize); // ASSERT Assert.Equal(expected, actual, new WebClientComparer()); }
public void RunSync_Success() { // ARRANGE byte[] expected = new byte[FactoryNode.Node.Size.Value]; new Random().NextBytes(expected); IInternalDracoonClient c = FactoryClients.InternalDracoonClientMock(); Stream s = new MemoryStream(); FileDownloadCallbackMock callback = new FileDownloadCallbackMock(); FileDownload f = new FileDownload(c, "id1", FactoryNode.Node, s); f.AddFileDownloadCallback(callback); Mock.Arrange(() => c.Builder.PostFileDownload(Arg.AnyLong)).Returns(FactoryRestSharp.PostFileDownloadMock(2354)).Occurs(1); Mock.Arrange(() => c.Executor.DoSyncApiCall <ApiDownloadToken>(Arg.IsAny <IRestRequest>(), RequestType.PostDownloadToken, 0)) .Returns(FactoryNode.ApiDownloadToken).Occurs(1); DracoonWebClientExtension wc = Mock.Create <DracoonWebClientExtension>(); Mock.Arrange(() => Mock.Create <DownloadProgressChangedEventArgs>().BytesReceived).IgnoreInstance().Returns(expected.Length); Mock.Arrange(() => c.Builder.ProvideChunkDownloadWebClient(Arg.AnyLong, Arg.AnyLong)).Returns(wc); Mock.Arrange(() => c.Executor.ExecuteWebClientDownload(Arg.IsAny <WebClient>(), Arg.IsAny <Uri>(), RequestType.GetDownloadChunk, Arg.IsAny <Thread>(), Arg.AnyInt)).DoInstead(() => Thread.Sleep(250)) .Raises(() => wc.DownloadProgressChanged += null, null, Mock.Create <DownloadProgressChangedEventArgs>()).Returns(expected); Mock.Arrange(() => callback.OnStarted(Arg.AnyString)).Occurs(1); Mock.Arrange(() => callback.OnRunning(Arg.AnyString, Arg.AnyLong, Arg.AnyLong)).OccursAtLeast(1); Mock.Arrange(() => callback.OnFinished(Arg.AnyString)).Occurs(1); // ACT f.RunSync(); s.Position = 0; byte[] actual = new byte[expected.Length]; s.Read(actual, 0, expected.Length); s.Close(); // ASSERT Assert.Equal(expected, actual); Mock.Assert(callback); Mock.Assert(c.Builder); Mock.Assert(c.Executor); }
public void UpdateAvatar() { // ARRANGE Bitmap image = new Bitmap(50, 50); Graphics imageData = Graphics.FromImage(image); imageData.DrawLine(new Pen(Color.Red), 0, 0, 50, 50); MemoryStream ms = new MemoryStream(); image.Save(ms, ImageFormat.Bmp); AvatarInfo expected = FactoryUser.AvatarInfo; IInternalDracoonClient c = FactoryClients.InternalDracoonClientMock(true); DracoonAccountImpl a = new DracoonAccountImpl(c); Mock.Arrange(() => c.Builder.ProvideAvatarUploadWebClient(Arg.AnyString)).Returns((string x) => { DracoonWebClientExtension wc = new DracoonWebClientExtension(); wc.Headers.Add(HttpRequestHeader.ContentType, "multipart/form-data; boundary=" + x); wc.Headers.Add(ApiConfig.AuthorizationHeader, FactoryClients.OAuthMock.BuildAuthString()); wc.Headers.Add(HttpRequestHeader.UserAgent, new DracoonHttpConfig().UserAgent); wc.SetHttpConfigParams(new DracoonHttpConfig()); return(wc); }).Occurs(1); Mock.Arrange(() => c.Executor.ExecuteWebClientChunkUpload(Arg.IsAny <WebClient>(), Arg.IsAny <Uri>(), Arg.IsAny <byte[]>(), RequestType.PostUserAvatar, null, 0)) .Returns(Encoding.UTF8.GetBytes(JsonConvert.SerializeObject(FactoryUser.ApiAvatarInfo))).Occurs(1); Mock.Arrange(() => UserMapper.FromApiAvatarInfo(Arg.IsAny <ApiAvatarInfo>())).Returns(FactoryUser.AvatarInfo).Occurs(1); // ACT AvatarInfo actual = a.UpdateAvatar(Image.FromStream(ms)); // ASSERT Assert.Equal(expected, actual, new AvatarInfoComparer()); Mock.Assert(() => UserMapper.FromApiAvatarInfo(Arg.IsAny <ApiAvatarInfo>())); Mock.Assert(c.Builder); Mock.Assert(c.Executor); ms.Close(); }
private void SetGeneralWebClientValues(DracoonWebClientExtension requestClient) { requestClient.Headers.Add(HttpRequestHeader.UserAgent, DracoonClient.HttpConfig.UserAgent); requestClient.SetHttpConfigParams(DracoonClient.HttpConfig); }
public void Encrypted_RunSync_S3_KnownFileSize_Success() { // ARRANGE byte[] fileMock = new byte[1564]; new Random().NextBytes(fileMock); Stream s = new MemoryStream(fileMock); IInternalDracoonClient c = FactoryClients.InternalDracoonClientMock(true); FileUploadCallbackMock callback = new FileUploadCallbackMock(); EncFileUpload f = new EncFileUpload(c, "id1", FactoryFile.UploadFileRequest, s, FactoryUser.UserPublicKey, fileMock.Length); f.AddFileUploadCallback(callback); ApiGeneralSettings generalSettings = FactoryServerSettings.ApiGeneralSettings; generalSettings.UseS3Storage = true; ApiCreateFileUpload acfu = FactoryFile.ApiCreateFileUpload; acfu.Classification = null; Mock.Arrange(() => c.Builder.PostCreateFileUpload(Arg.IsAny <ApiCreateFileUpload>())).Returns(FactoryRestSharp.PostCreateFileUploadMock()) .Occurs(1); Mock.Arrange(() => c.Executor.DoSyncApiCall <ApiUploadToken>(Arg.IsAny <IRestRequest>(), RequestType.PostUploadToken, 0)) .Returns(FactoryFile.ApiUploadToken).Occurs(1); Mock.Arrange(() => c.Builder.PutCompleteS3FileUpload(Arg.AnyString, Arg.IsAny <ApiCompleteFileUpload>())) .Returns(FactoryRestSharp.PutCompleteFileUploadMock("path")).Occurs(1); Mock.Arrange(() => c.Executor.DoSyncApiCall <VoidResponse>(Arg.IsAny <IRestRequest>(), RequestType.PutCompleteS3Upload, 0)).DoNothing() .Occurs(1); Mock.Arrange(() => c.Builder.GetGeneralSettings()) .Returns(FactoryRestSharp.RestRequestWithAuth(ApiConfig.ApiGetGeneralConfig, Method.GET)).Occurs(1); Mock.Arrange(() => c.Executor.DoSyncApiCall <ApiGeneralSettings>(Arg.IsAny <IRestRequest>(), RequestType.GetGeneralSettings, 0)) .Returns(generalSettings).Occurs(1); Mock.Arrange(() => c.Builder.PostGetS3Urls(Arg.AnyString, Arg.IsAny <ApiGetS3Urls>())).Returns(FactoryRestSharp.PostGetS3UrlsMock()) .OccursAtLeast(1); Mock.Arrange(() => c.Executor.DoSyncApiCall <ApiS3Urls>(Arg.IsAny <IRestRequest>(), RequestType.PostGetS3Urls, 0)) .Returns(FactoryFile.ApiS3Urls).OccursAtLeast(1); Mock.Arrange(() => c.Builder.GetS3Status(Arg.AnyString)).Returns(FactoryRestSharp.GetS3StatusMock).OccursAtLeast(1); Mock.Arrange(() => c.Executor.DoSyncApiCall <ApiS3Status>(Arg.IsAny <IRestRequest>(), RequestType.GetS3Status, 0)) .Returns(FactoryFile.ApiS3Status).OccursAtLeast(1); Mock.Arrange(() => FileMapper.ToApiCreateFileUpload(Arg.IsAny <FileUploadRequest>())).Returns(acfu).Occurs(1); Mock.Arrange(() => NodeMapper.FromApiNode(Arg.IsAny <ApiNode>())).Returns(FactoryNode.Node).Occurs(1); Mock.Arrange(() => FileMapper.ToApiCompleteFileUpload(Arg.IsAny <FileUploadRequest>())).Returns(FactoryFile.ApiCompleteFileUpload); DracoonWebClientExtension wc = Mock.Create <DracoonWebClientExtension>(); Mock.Arrange(() => Mock.Create <UploadProgressChangedEventArgs>().BytesSent).IgnoreInstance(); Mock.Arrange(() => c.Executor.ExecuteWebClientChunkUpload(Arg.IsAny <WebClient>(), Arg.IsAny <Uri>(), Arg.IsAny <byte[]>(), RequestType.PutUploadS3Chunk, Arg.IsAny <Thread>(), Arg.AnyInt)).DoInstead(() => Thread.Sleep(250)) .Raises(() => wc.UploadProgressChanged += null, null, Mock.Create <UploadProgressChangedEventArgs>()).Returns(new byte[13]); Mock.Arrange(() => c.Builder.ProvideS3ChunkUploadWebClient()).Returns(wc); Mock.Arrange(() => JsonConvert.DeserializeObject <ApiUploadChunkResult>(Arg.AnyString)).Returns(FactoryFile.ApiUploadChunkResult); Mock.Arrange(() => Crypto.Sdk.Crypto.GenerateFileKey(Arg.AnyString)).Returns(FactoryFile.PlainFileKey).Occurs(1); FileEncryptionCipher cipher = Mock.Create <FileEncryptionCipher>(); Mock.Arrange(() => Crypto.Sdk.Crypto.CreateFileEncryptionCipher(Arg.IsAny <PlainFileKey>())).Returns(cipher).Occurs(1); Mock.Arrange(() => cipher.ProcessBytes(Arg.IsAny <PlainDataContainer>())).Returns(new EncryptedDataContainer(fileMock, fileMock)) .OccursAtLeast(1); Mock.Arrange(() => cipher.DoFinal()).Returns(new EncryptedDataContainer(fileMock, fileMock)).OccursAtLeast(1); Mock.Arrange(() => Crypto.Sdk.Crypto.EncryptFileKey(Arg.IsAny <PlainFileKey>(), Arg.IsAny <UserPublicKey>())) .Returns(FactoryFile.EncryptedFileKey).Occurs(1); Mock.Arrange(() => FileMapper.ToApiFileKey(Arg.IsAny <EncryptedFileKey>())).Returns(FactoryFile.ApiFileKey); Mock.Arrange(() => callback.OnStarted(Arg.AnyString)).Occurs(1); Mock.Arrange(() => callback.OnRunning(Arg.AnyString, Arg.AnyLong, Arg.AnyLong)).OccursAtLeast(1); Mock.Arrange(() => callback.OnFinished(Arg.AnyString, Arg.IsAny <Node>())).Occurs(1); // ACT Node actual = f.RunSync(); s.Close(); // ASSERT Assert.Equal(FactoryNode.Node, actual, new NodeComparer()); Mock.Assert(callback); Mock.Assert(c.Builder); Mock.Assert(c.Executor); }
public void RunSync_S3_PollingError() { // ARRANGE ApiS3Status resultStatus = FactoryFile.ApiS3Status; resultStatus.Node = null; resultStatus.Status = "error"; resultStatus.ErrorInfo = null; byte[] fileMock = new byte[1888]; new Random().NextBytes(fileMock); Stream s = new MemoryStream(fileMock); IInternalDracoonClient c = FactoryClients.InternalDracoonClientMock(true); FileUploadCallbackMock callback = new FileUploadCallbackMock(); FileUpload f = new FileUpload(c, "id1", FactoryFile.UploadFileRequest, s, fileMock.Length); f.AddFileUploadCallback(callback); ApiGeneralSettings generalSettings = FactoryServerSettings.ApiGeneralSettings; generalSettings.UseS3Storage = true; ApiCreateFileUpload acfu = FactoryFile.ApiCreateFileUpload; acfu.Classification = null; Mock.Arrange(() => c.Builder.PostCreateFileUpload(Arg.IsAny <ApiCreateFileUpload>())).Returns(FactoryRestSharp.PostCreateFileUploadMock()) .Occurs(1); Mock.Arrange(() => c.Executor.DoSyncApiCall <ApiUploadToken>(Arg.IsAny <IRestRequest>(), RequestType.PostUploadToken, 0)) .Returns(FactoryFile.ApiUploadToken).Occurs(1); Mock.Arrange(() => c.Builder.PutCompleteS3FileUpload(Arg.AnyString, Arg.IsAny <ApiCompleteFileUpload>())) .Returns(FactoryRestSharp.PutCompleteFileUploadMock("path")).Occurs(1); Mock.Arrange(() => c.Executor.DoSyncApiCall <VoidResponse>(Arg.IsAny <IRestRequest>(), RequestType.PutCompleteS3Upload, 0)).DoNothing() .Occurs(1); Mock.Arrange(() => c.Builder.GetGeneralSettings()) .Returns(FactoryRestSharp.RestRequestWithAuth(ApiConfig.ApiGetGeneralConfig, Method.GET)).Occurs(1); Mock.Arrange(() => c.Executor.DoSyncApiCall <ApiGeneralSettings>(Arg.IsAny <IRestRequest>(), RequestType.GetGeneralSettings, 0)) .Returns(generalSettings).Occurs(1); Mock.Arrange(() => c.Builder.PostGetS3Urls(Arg.AnyString, Arg.IsAny <ApiGetS3Urls>())).Returns(FactoryRestSharp.PostGetS3UrlsMock()) .OccursAtLeast(1); Mock.Arrange(() => c.Executor.DoSyncApiCall <ApiS3Urls>(Arg.IsAny <IRestRequest>(), RequestType.PostGetS3Urls, 0)) .Returns(FactoryFile.ApiS3Urls).OccursAtLeast(1); Mock.Arrange(() => c.Builder.GetS3Status(Arg.AnyString)).Returns(FactoryRestSharp.GetS3StatusMock).OccursAtLeast(1); Mock.Arrange(() => c.Executor.DoSyncApiCall <ApiS3Status>(Arg.IsAny <IRestRequest>(), RequestType.GetS3Status, 0)).Returns(resultStatus) .OccursAtLeast(1); Mock.Arrange(() => FileMapper.ToApiCreateFileUpload(Arg.IsAny <FileUploadRequest>())).Returns(acfu).Occurs(1); Mock.Arrange(() => NodeMapper.FromApiNode(Arg.IsAny <ApiNode>())).Returns(FactoryNode.Node).Occurs(1); Mock.Arrange(() => FileMapper.ToApiCompleteFileUpload(Arg.IsAny <FileUploadRequest>())).Returns(FactoryFile.ApiCompleteFileUpload); DracoonWebClientExtension wc = Mock.Create <DracoonWebClientExtension>(); Mock.Arrange(() => Mock.Create <UploadProgressChangedEventArgs>().BytesSent).IgnoreInstance(); Mock.Arrange(() => c.Executor.ExecuteWebClientChunkUpload(Arg.IsAny <WebClient>(), Arg.IsAny <Uri>(), Arg.IsAny <byte[]>(), RequestType.PutUploadS3Chunk, Arg.IsAny <Thread>(), Arg.AnyInt)).DoInstead(() => Thread.Sleep(250)) .Raises(() => wc.UploadProgressChanged += null, null, Mock.Create <UploadProgressChangedEventArgs>()).Returns(new byte[13]); Mock.Arrange(() => c.Builder.ProvideS3ChunkUploadWebClient()).Returns(wc); Mock.Arrange(() => JsonConvert.DeserializeObject <ApiUploadChunkResult>(Arg.AnyString)).Returns(FactoryFile.ApiUploadChunkResult); Mock.Arrange(() => DracoonErrorParser.ParseError(Arg.IsAny <ApiErrorResponse>(), RequestType.GetS3Status)).DoNothing(); Mock.Arrange(() => callback.OnStarted(Arg.AnyString)).Occurs(1); Mock.Arrange(() => callback.OnRunning(Arg.AnyString, Arg.AnyLong, Arg.AnyLong)).OccursAtLeast(1); Mock.Arrange(() => callback.OnFailed(Arg.AnyString, Arg.IsAny <DracoonException>())).Occurs(1); // ACT Assert.Throws <DracoonApiException>(() => f.RunSync()); s.Close(); // ASSERT Mock.Assert(callback); Mock.Assert(c.Builder); Mock.Assert(c.Executor); }