internal void TestSingleCodeWithIRestResponse()
        {
            // ARRANGE
            IRestResponse response = FactoryRestSharp.RestResponse;

            try {
                // ACT
                DracoonErrorParser.ParseError(response, RequestType.GetAuthenticatedPing);
            } catch (DracoonApiException dae) {
                // ASSERT
                Assert.Equal(1301, dae.ErrorCode.Code);
            }
        }
示例#2
0
        public void ExecuteWebClientDownload_ProtocolError_Fail()
        {
            // ARRANGE
            Uri          uri = new Uri("https://dracoon.team");
            WebException we  = new WebException("Test", WebExceptionStatus.ProtocolError);

            Mock.Arrange(() => new WebClient().DownloadDataTaskAsync(uri)).IgnoreInstance().Returns(Mock.Create <Task <byte[]> >());
            Mock.Arrange(() => Mock.Create <Task <byte[]> >().Result).IgnoreInstance().Throws(new AggregateException(we));
            Mock.Arrange(() => DracoonErrorParser.ParseError(we, RequestType.GetDownloadChunk))
            .Throws(new DracoonApiException(DracoonApiCode.SERVER_UNKNOWN_ERROR));
            IInternalDracoonClient c    = FactoryClients.InternalDracoonClientMock();
            IRequestExecutor       exec = new DracoonRequestExecutor(FactoryClients.OAuthMock, c);

            // ACT - ASSERT
            Assert.Throws <DracoonApiException>(() => exec.ExecuteWebClientDownload(new WebClient(), uri, RequestType.GetDownloadChunk));
        }
        internal void TestUnknownCodes(RequestType type, int apiCode, string[] headerNames, string[] headerValues, int expectedSdkErrorCode)
        {
            // ARRANGE
            HttpWebResponse r  = CreateMockedHttpWebResponse(407, GenerateJsonError(407, apiCode), headerNames, headerValues);
            WebException    we = new WebException("Some message!", null, WebExceptionStatus.ProtocolError, r);

            try {
                // ACT
                DracoonErrorParser.ParseError(we, type);
            } catch (DracoonApiException dae) {
                // ASSERT
                Assert.Equal(expectedSdkErrorCode, dae.ErrorCode.Code);
            } finally {
                r.Close();
            }
        }
示例#4
0
        public void DoSyncApiCall_Fail()
        {
            // ARRANGE
            RestResponse response = FactoryRestSharp.RestResponse;
            IRestRequest request  = FactoryRestSharp.GetServerVersionMock();

            Mock.Arrange(() => DracoonClient.HttpConfig).Returns(new DracoonHttpConfig());
            Mock.Arrange(() => new RestClient().Execute(request)).IgnoreInstance().Returns(response);
            Mock.Arrange(() => DracoonErrorParser.ParseError(response, RequestType.GetServerVersion)).Throws(new DracoonApiException());

            IInternalDracoonClient c    = FactoryClients.InternalDracoonClientMock();
            IRequestExecutor       exec = new DracoonRequestExecutor(FactoryClients.OAuthMock, c);

            // ACT - ASSERT
            Assert.Throws <DracoonApiException>(() => exec.DoSyncApiCall <ApiServerVersion>(request, RequestType.GetServerVersion));
        }
示例#5
0
        public void ExecuteWebClientChunkUpload_ConnectFailure_Retry_Sync_Fail()
        {
            // ARRANGE
            byte[]       chunk = Encoding.UTF8.GetBytes("OK");
            Uri          uri   = new Uri("https://dracoon.team");
            WebException we    = new WebException("Test", WebExceptionStatus.ConnectFailure);

            Mock.Arrange(() => new WebClient().UploadDataTaskAsync(uri, "POST", chunk)).IgnoreInstance().Returns(Mock.Create <Task <byte[]> >());
            Mock.Arrange(() => Mock.Create <Task <byte[]> >().Result).IgnoreInstance().Throws(new AggregateException(we));
            Mock.Arrange(() => DracoonErrorParser.ParseError(we, RequestType.PostUploadChunk))
            .Throws(new DracoonApiException(DracoonApiCode.SERVER_UNKNOWN_ERROR));
            Mock.Arrange(() => DracoonClient.HttpConfig).Returns(new DracoonHttpConfig(true));
            IInternalDracoonClient c    = FactoryClients.InternalDracoonClientMock();
            IRequestExecutor       exec = new DracoonRequestExecutor(FactoryClients.OAuthMock, c);

            // ACT - ASSERT
            Assert.Throws <DracoonApiException>(() => exec.ExecuteWebClientChunkUpload(new WebClient(), uri, chunk, RequestType.PostUploadChunk));
        }
示例#6
0
        public void DoSyncApiCall_Fail_Retry()
        {
            // ARRANGE
            RestResponse response = FactoryRestSharp.RestResponse;
            IRestRequest request  = FactoryRestSharp.GetAuthenticatedPingMock();

            Mock.Arrange(() => DracoonClient.HttpConfig).Returns(new DracoonHttpConfig());
            Mock.Arrange(() => new RestClient().Execute(request)).IgnoreInstance().Returns(response);
            Mock.Arrange(() => FactoryClients.OAuthMock.RefreshAccessToken()).IgnoreInstance().DoNothing();
            Mock.Arrange(() => FactoryClients.OAuthMock.BuildAuthString()).IgnoreInstance().Returns("AuthTest");
            Mock.Arrange(() => DracoonErrorParser.ParseError(response, RequestType.GetAuthenticatedPing))
            .Throws(new DracoonApiException(DracoonApiCode.AUTH_UNAUTHORIZED));

            IInternalDracoonClient c    = FactoryClients.InternalDracoonClientMock();
            IRequestExecutor       exec = new DracoonRequestExecutor(FactoryClients.OAuthMock, c);

            // ACT - ASSERT
            Assert.Throws <DracoonApiException>(() => exec.DoSyncApiCall <VoidResponse>(request, RequestType.GetAuthenticatedPing));
        }
        internal void TestCustomErrorCodesIRestRequest()
        {
            // ARRANGE
            IRestResponse response = FactoryRestSharp.RestResponse;

            response.Headers.Add(new Parameter()
            {
                Name  = "testHeader",
                Value = "1234"
            });
            response.Headers.Add(new Parameter()
            {
                Name  = "X-Forbidden",
                Value = "403"
            });

            try {
                // ACT
                DracoonErrorParser.ParseError(response, RequestType.GetAuthenticatedPing);
            } catch (DracoonApiException dae) {
                // ASSERT
                Assert.Equal(5090, dae.ErrorCode.Code);
            }
        }
示例#8
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);
        }