Skip to content

Commit e2d5a45

Browse files
authored
Merge pull request #19 from RTLcoil/features/new-features
Ability to set AllowWriteStreamBuffering for upload
2 parents a00e912 + 7eb4b35 commit e2d5a45

File tree

3 files changed

+39
-7
lines changed

3 files changed

+39
-7
lines changed

Cloudinary.Test/CloudinaryTest.cs

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1635,6 +1635,19 @@ public void TestAgentPlatformHeaders()
16351635
StringAssert.IsMatch(@"Test\/1\.0 CloudinaryDotNet\/(\d+)\.(\d+)\.(\d+)", request.UserAgent);
16361636
}
16371637

1638+
[Test]
1639+
public void TestAllowWriteStreamBufferingSet()
1640+
{
1641+
var largeFilePath = m_testLargeImagePath;
1642+
var rawUploadParams = new BasicRawUploadParams() { File = new FileDescription(largeFilePath) };
1643+
1644+
//check of AllowWriteStreamBuffering option set to false
1645+
HttpWebRequest requestDefault = null;
1646+
GetMockBodyOfCoudinaryRequest(rawUploadParams, (p, t) => { return p.UploadLarge(t, 5 * 1024 * 1024); }, out requestDefault);
1647+
Assert.IsFalse(requestDefault.AllowWriteStreamBuffering);
1648+
Assert.IsFalse(requestDefault.AllowAutoRedirect);
1649+
}
1650+
16381651
[Test]
16391652
public void TestExplicitInvalidate()
16401653
{

Cloudinary.Test/IntegrationTestBase.cs

Lines changed: 23 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -118,8 +118,23 @@ protected Cloudinary GetCloudinaryInstance(Account account)
118118
/// <param name="requestParams">Parameters for Cloudinary call</param>
119119
/// <param name="cloudinaryCall">Cloudinary call, e.g. "(cloudinaryInstance, params) => {return cloudinaryInstance.Text(params); }"</param>
120120
/// <returns></returns>
121-
protected string GetMockBodyOfCoudinaryRequest<TParams, TResult>(TParams requestParams, Func<Cloudinary, TParams, TResult> cloudinaryCall)
122-
where TParams: BaseParams
121+
protected string GetMockBodyOfCoudinaryRequest<TParams, TResult>(TParams requestParams, Func<Cloudinary, TParams, TResult> cloudinaryCall)
122+
where TParams : BaseParams
123+
where TResult : BaseResult
124+
{
125+
HttpWebRequest request = null;
126+
return GetMockBodyOfCoudinaryRequest(requestParams, cloudinaryCall, out request);
127+
}
128+
129+
/// <summary>
130+
/// Get stream represented as String and request object from mock request to Cloudinary API
131+
/// </summary>
132+
/// <param name="requestParams">Parameters for Cloudinary call</param>
133+
/// <param name="cloudinaryCall">Cloudinary call, e.g. "(cloudinaryInstance, params) => {return cloudinaryInstance.Text(params); }"</param>
134+
/// <param name="request">HttpWebRequest object as out parameter for further analyze of properties</param>
135+
/// <returns></returns>
136+
protected string GetMockBodyOfCoudinaryRequest<TParams, TResult>(TParams requestParams, Func<Cloudinary, TParams, TResult> cloudinaryCall, out HttpWebRequest request)
137+
where TParams : BaseParams
123138
where TResult : BaseResult
124139
{
125140
#region Mock infrastructure
@@ -129,12 +144,12 @@ protected string GetMockBodyOfCoudinaryRequest<TParams, TResult>(TParams request
129144
mock.Setup(x => x.GetResponse()).Returns((WebResponse)null);
130145
mock.CallBase = true;
131146

132-
HttpWebRequest request = null;
147+
HttpWebRequest localRequest = null;
133148
Func<string, HttpWebRequest> requestBuilder = (x) =>
134149
{
135-
request = mock.Object;
136-
request.Headers = new WebHeaderCollection();
137-
return request;
150+
localRequest = mock.Object;
151+
localRequest.Headers = new WebHeaderCollection();
152+
return localRequest;
138153
};
139154
#endregion
140155

@@ -148,7 +163,8 @@ protected string GetMockBodyOfCoudinaryRequest<TParams, TResult>(TParams request
148163
// consciously return null in GetResponse() and extinguish the ArgumentNullException while parsing response, 'cause it's not in focus of current test
149164
catch (ArgumentNullException) { }
150165

151-
MemoryStream stream = request.GetRequestStream() as MemoryStream;
166+
MemoryStream stream = localRequest.GetRequestStream() as MemoryStream;
167+
request = localRequest;
152168
return System.Text.Encoding.Default.GetString(stream.ToArray());
153169
}
154170

Cloudinary/Api.cs

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -333,6 +333,9 @@ public HttpWebResponse Call(HttpMethod method, string url, SortedDictionary<stri
333333
}
334334
if ((method == HttpMethod.POST || method == HttpMethod.PUT) && parameters != null)
335335
{
336+
request.AllowWriteStreamBuffering = false;
337+
request.AllowAutoRedirect = false;
338+
336339
if (UseChunkedEncoding)
337340
request.SendChunked = true;
338341

0 commit comments

Comments
 (0)