예제 #1
0
        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);
        }
예제 #6
0
        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);
        }
예제 #7
0
        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());
        }
예제 #9
0
        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());
        }
예제 #11
0
        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);
        }
예제 #12
0
        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);
 }
예제 #14
0
        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);
        }
예제 #15
0
        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);
        }