Skip to content

Commit

Permalink
remove deprecated WebRequest API to HttpClient (#634)
Browse files Browse the repository at this point in the history
  • Loading branch information
harshavardhana committed May 13, 2022
1 parent 9bd3c69 commit 384764e
Show file tree
Hide file tree
Showing 9 changed files with 147 additions and 102 deletions.
30 changes: 24 additions & 6 deletions .github/workflows/minio-dotnet-linux.yml
Original file line number Diff line number Diff line change
Expand Up @@ -4,10 +4,13 @@ on:
pull_request:
branches:
- master
push:
branches:
- master

# This ensures that previous jobs for the PR are canceled when the PR is
# updated.
concurrency:
group: ${{ github.workflow }}-${{ github.head_ref }}
cancel-in-progress: true

jobs:
build:
runs-on: ubuntu-latest
Expand All @@ -32,7 +35,7 @@ jobs:
- name: Install tool dependencies and lint
run: |
dotnet tool restore
dotnet regitlint -f staged --fail-on-diff
dotnet regitlint --fail-on-diff
# Build and Execute build tests
- name: Build & Unit Test
Expand All @@ -43,6 +46,21 @@ jobs:
# Execute all functional tests in the solution
- name: Execute Functional Tests
env:
MINT_MODE: full
SERVER_ENDPOINT: 127.0.0.1:9000
ACCESS_KEY: minio
SECRET_KEY: minio123
ENABLE_HTTPS: 1
ENABLE_KMS: 1
MINIO_ACCESS_KEY: minio
MINIO_SECRET_KEY: minio123
MINIO_KMS_SECRET_KEY: my-minio-key:OSMM+vkKUTCvQs9YL/CVMIMt43HFhkUpqJxTmGl6rYw=
run: |
dotnet build Minio.Functional.Tests --configuration Release
dotnet Minio.Functional.Tests/bin/Release/net6.0/Minio.Functional.Tests.dll
wget --quiet -O /tmp/minio https://dl.min.io/server/minio/release/linux-amd64/minio
chmod +x /tmp/minio
mkdir -p /tmp/minio-config/certs/
cp Minio.Functional.Tests/certs/* /tmp/minio-config/certs/
/tmp/minio -C /tmp/minio-config server /tmp/fs{1...4} &
dotnet build Minio.Functional.Tests --configuration Release
dotnet Minio.Functional.Tests/bin/Release/net6.0/Minio.Functional.Tests.dll
11 changes: 7 additions & 4 deletions .github/workflows/minio-dotnet-windows.yml
Original file line number Diff line number Diff line change
@@ -1,13 +1,16 @@
name: Minio-dotnet Windows Tests

on:
push:
branches:
- master
pull_request:
branches:
- master

# This ensures that previous jobs for the PR are canceled when the PR is
# updated.
concurrency:
group: ${{ github.workflow }}-${{ github.head_ref }}
cancel-in-progress: true

jobs:
build:
strategy:
Expand Down Expand Up @@ -48,5 +51,5 @@ jobs:
# Execute all functional tests in the solution
- name: Execute Functional Tests
run: |
dotnet build Minio.Functional.Tests --configuration Release
dotnet build Minio.Functional.Tests --configuration Release
dotnet Minio.Functional.Tests/bin/Release/net6.0/Minio.Functional.Tests.dll
96 changes: 56 additions & 40 deletions Minio.Functional.Tests/FunctionalTest.cs
Original file line number Diff line number Diff line change
Expand Up @@ -23,6 +23,7 @@
using System.IO;
using System.Linq;
using System.Net;
using System.Net.Http;
using System.Reflection;
using System.Security.Cryptography;
using System.Text;
Expand Down Expand Up @@ -530,11 +531,7 @@ internal static async Task TearDown(MinioClient minio, string bucketName)
else
objectNames.Add(item.Key);
},
ex =>
{
// Collect all exceptions but the one raised because the bucket is empty
if (ex.GetType().ToString() != "Minio.EmptyBucketOperation") exceptionList.Add(ex);
},
ex => { exceptionList.Add(ex); },
() => { });

Thread.Sleep(4500);
Expand Down Expand Up @@ -1188,23 +1185,38 @@ internal static async Task RemoveObjects_Test3(MinioClient minio)
}
}

internal static async Task UploadObjectAsync(string url, string filePath)
internal static async Task DownloadObjectAsync(string url, string filePath)
{
var httpRequest = WebRequest.Create(url) as HttpWebRequest;
httpRequest.Method = "PUT";
using (var dataStream =
await Task.Factory.FromAsync(httpRequest.BeginGetRequestStream, httpRequest.EndGetRequestStream, null))
var clientHandler = new HttpClientHandler();
clientHandler.ServerCertificateCustomValidationCallback = (sender, cert, chain, sslPolicyErrors) =>
{
var buffer = new byte[8000];
using (var fileStream = new FileStream(filePath, FileMode.Open, FileAccess.Read))
{
fileStream.CopyTo(dataStream);
}
return true;
};
var client = new HttpClient(clientHandler);

var response = await client.GetAsync(url);
if (string.IsNullOrEmpty(Convert.ToString(response.Content)) || !HttpStatusCode.OK.Equals(response.StatusCode))
throw new ArgumentNullException("Unable to download via presigned URL");

using (var fs = new FileStream(filePath, FileMode.CreateNew))
{
await response.Content.CopyToAsync(fs);
}
}

var response =
(HttpWebResponse)await Task<WebResponse>.Factory.FromAsync(httpRequest.BeginGetResponse,
httpRequest.EndGetResponse, null);
internal static async Task UploadObjectAsync(string url, string filePath)
{
var clientHandler = new HttpClientHandler();
clientHandler.ServerCertificateCustomValidationCallback = (sender, cert, chain, sslPolicyErrors) =>
{
return true;
};
var client = new HttpClient(clientHandler);

using (var strm = new StreamContent(new FileStream(filePath, FileMode.Open, FileAccess.Read)))
{
await client.PutAsync(url, strm);
}
}

internal static async Task PresignedPostPolicy_Test1(MinioClient minio)
Expand Down Expand Up @@ -4788,17 +4800,8 @@ internal static async Task PresignedGetObject_Test1(MinioClient minio)
.WithObject(objectName)
.WithExpiry(expiresInt);
var presigned_url = await minio.PresignedGetObjectAsync(preArgs);
var httpRequest = WebRequest.Create(presigned_url);
// Execute http request to get the object
var response = (HttpWebResponse)await Task<WebResponse>.Factory.FromAsync(httpRequest.BeginGetResponse,
httpRequest.EndGetResponse, null);
// Create the object from the captured stream response
var stream = response.GetResponseStream();
var fileStream = File.Create(downloadFile);
stream.CopyTo(fileStream);

stream.Dispose();
fileStream.Dispose();

await DownloadObjectAsync(presigned_url, downloadFile);
var writtenInfo = new FileInfo(downloadFile);
var file_read_size = writtenInfo.Length;
// Compare the size of the file downloaded using the generated
Expand Down Expand Up @@ -4935,17 +4938,30 @@ internal static async Task PresignedGetObject_Test3(MinioClient minio)
.WithHeaders(reqParams)
.WithRequestDate(reqDate);
var presigned_url = await minio.PresignedGetObjectAsync(preArgs);
var httpRequest = WebRequest.Create(presigned_url);
var response = (HttpWebResponse)await Task<WebResponse>.Factory.FromAsync(httpRequest.BeginGetResponse,
httpRequest.EndGetResponse, null);
Assert.IsTrue(response.ContentType.Contains(reqParams["response-content-type"]));
Assert.IsTrue(response.Headers["Content-Disposition"].Contains("attachment;filename=MyDocument.json;"));
Assert.IsTrue(response.Headers["Content-Type"].Contains("application/json"));
Assert.IsTrue(response.Headers["Content-Length"].Contains(stats.Size.ToString()));
var stream = response.GetResponseStream();
var fileStream = File.Create(downloadFile);
stream.CopyTo(fileStream);
fileStream.Dispose();

var clientHandler = new HttpClientHandler();
clientHandler.ServerCertificateCustomValidationCallback = (sender, cert, chain, sslPolicyErrors) =>
{
return true;
};
var client = new HttpClient(clientHandler);

var response = await client.GetAsync(presigned_url);
if (string.IsNullOrEmpty(Convert.ToString(response.Content)) ||
!HttpStatusCode.OK.Equals(response.StatusCode))
throw new ArgumentNullException("Unable to download via presigned URL");

Assert.IsTrue(response.Content.Headers.GetValues("Content-Type")
.Contains(reqParams["response-content-type"]));
Assert.IsTrue(response.Content.Headers.GetValues("Content-Disposition")
.Contains(reqParams["response-content-disposition"]));
Assert.IsTrue(response.Content.Headers.GetValues("Content-Length").Contains(stats.Size.ToString()));

using (var fs = new FileStream(downloadFile, FileMode.CreateNew))
{
await response.Content.CopyToAsync(fs);
}

var writtenInfo = new FileInfo(downloadFile);
var file_read_size = writtenInfo.Length;

Expand Down
9 changes: 9 additions & 0 deletions Minio.Functional.Tests/Program.cs
Original file line number Diff line number Diff line change
Expand Up @@ -17,6 +17,7 @@

using System;
using System.Net;
using System.Net.Http;

namespace Minio.Functional.Tests;

Expand Down Expand Up @@ -50,12 +51,20 @@ public static void Main(string[] args)

MinioClient minioClient = null;

var clientHandler = new HttpClientHandler();
clientHandler.ServerCertificateCustomValidationCallback = (sender, cert, chain, sslPolicyErrors) =>
{
return true;
};
var httpClient = new HttpClient(clientHandler);

if (enableHttps == "1")
// WithSSL() enables SSL support in MinIO client
minioClient = new MinioClient()
.WithSSL()
.WithCredentials(accessKey, secretKey)
.WithEndpoint(endPoint)
.WithHttpClient(httpClient)
.Build();
else
minioClient = new MinioClient()
Expand Down
28 changes: 28 additions & 0 deletions Minio.Functional.Tests/certs/private.key
Original file line number Diff line number Diff line change
@@ -0,0 +1,28 @@
-----BEGIN PRIVATE KEY-----
MIIEvwIBADANBgkqhkiG9w0BAQEFAASCBKkwggSlAgEAAoIBAQC3G9IiC+adjf0p
i/2KYc+4dizeuzUFN7wraSdhiOMdQgCnu9Dc3t2YEsQhNdrARjOTyXd36KeM3TwI
rPJ61dRGQSuN12l+mzngFJQjE0sysZHUJOLQC3rVvIrHSQ57utPg8ifxt/SunlPY
fhcUcq03onMGq44yOfE6mIhoe0Y9wcPQ3RjjNNS44bgmXiXwa+Do0h2hEn6/essq
5KjHL8WW2vGg7G9edpYdxINA/A2fdLtr8BwPNrZhOx84eee2XcUNdBuTtUUxE+0L
9yRqItqddriRxJFwOXb5OPW8xx2WGaV2a0wbE4gB2PTwwDvfo72mo9HXHZUHM1A8
4TD/RXMbAgMBAAECggEBAJ7r1oUWLyGvinn0tijUm6RNbMQjVvEgXoCO008jr3pF
PqxVpgEMrOa/4tmwFBus0jcCNF4t3r2zhddBw3I5A/O1vEdvHnBz6NdDBQ8sP6fP
1fF50iEe1Y2MBibQkXFxxVMG2QRB1Gt5nuvXA9ELdqtCovK3EsMk5ukkWb/UvjH5
8hcmQsaSqvzFEF4wJSY2mkeGSGIJTphPhhuA22xbhaBMInQyhZu8EHsn0h6s/Wgy
C4Cp2+4qZTKaaf6x3/ZjJ8CuKiSX+ZsJKjOEv8sqx7j/Y7QFOmJPewInKDhwazr/
xIK+N0KXPbUzeSEz6ZvExNDTxtR5ZlQP2UrRDg28yQECgYEA4Is1O2BvKVzNFOkj
bTVz25a/bb0Xrcfgi0Y9rdfLzlNdItFjAkxLTVRSW2Hv9ICl0RDDAG+wTlktXRdh
rfvDjwG2CvLQo1VEdMWTTkKVg03SwMEy2hFiWV69lENFGSaY8Y6unZDbia5HQinA
EgSS4sCojS+a2jtzG5FVVHJDKlkCgYEA0MKhMhD4SUhr2y1idPBrmLxuW5mVozuW
8bYaBeSzmfS0BRsN4fP9JGODPBPDdNbfGfGC9ezWLgD/lmCgjIEyBOq8EmqWSsiS
Kihds1+Z7hXtbzGsFGAFJJTIh7blBCsK5QFuyuih2UG0fL9z6K/dy+UUJkzrYqph
vSfKixyM8pMCgYEAmUPLsNyw4325aeV8TeWnUCJERaZFDFQa21W1cfyS2yEhuEtN
llr3JzBACqn9vFk3VU1onNqfb8sE4L696KCpKeqUFEMK0AG6eS4Gzus53Gb5TKJS
kHA/PhshsZp9Bp7G1FJ8s4YVo5N2hh2zQVkn3Wh9Y+kzfHQJrK51nO9lEvkCgYBi
BuKWle1gzAcJdnhDHRoJMIJJtQbVDYhFnBMALXJAmu1lcFzGe0GlMq1PKqCfXr6I
eiXawQmZtJJP1LPPBmOsd2U06KQGHcS00xucvQmVCOrjSdnZ/3SqxsqbH8DOgj+t
ZUzXLwHA+N99rJEK9Hob4kfh7ECjpgobPnIXfKKazQKBgQChAuiXHtf/Qq18hY3u
x48zFWjGgfd6GpOBZYkXOwGdCJgnYjZbE26LZEnYbwPh8ZUA2vp7mgHRJkD5e3Fj
ERuJLCw86WqyYZmLEuBciYGjCZqR5nbavfwsziWD00jeNruds2ZwKxRfFm4V7o2S
WLd/RUatd2Uu9f3B2J78OUdnxg==
-----END PRIVATE KEY-----
19 changes: 19 additions & 0 deletions Minio.Functional.Tests/certs/public.crt
Original file line number Diff line number Diff line change
@@ -0,0 +1,19 @@
-----BEGIN CERTIFICATE-----
MIIDCzCCAfOgAwIBAgIUaIUOMI78LCu+r1zl0mmFHK8n5/AwDQYJKoZIhvcNAQEL
BQAwFDESMBAGA1UEAwwJbG9jYWxob3N0MCAXDTE5MTAyNDE5NTMxOVoYDzIxMTkw
OTMwMTk1MzE5WjAUMRIwEAYDVQQDDAlsb2NhbGhvc3QwggEiMA0GCSqGSIb3DQEB
AQUAA4IBDwAwggEKAoIBAQC3G9IiC+adjf0pi/2KYc+4dizeuzUFN7wraSdhiOMd
QgCnu9Dc3t2YEsQhNdrARjOTyXd36KeM3TwIrPJ61dRGQSuN12l+mzngFJQjE0sy
sZHUJOLQC3rVvIrHSQ57utPg8ifxt/SunlPYfhcUcq03onMGq44yOfE6mIhoe0Y9
wcPQ3RjjNNS44bgmXiXwa+Do0h2hEn6/essq5KjHL8WW2vGg7G9edpYdxINA/A2f
dLtr8BwPNrZhOx84eee2XcUNdBuTtUUxE+0L9yRqItqddriRxJFwOXb5OPW8xx2W
GaV2a0wbE4gB2PTwwDvfo72mo9HXHZUHM1A84TD/RXMbAgMBAAGjUzBRMB0GA1Ud
DgQWBBSEWXQ2JRD+OK7/KTmlD+OW16pGmzAfBgNVHSMEGDAWgBSEWXQ2JRD+OK7/
KTmlD+OW16pGmzAPBgNVHRMBAf8EBTADAQH/MA0GCSqGSIb3DQEBCwUAA4IBAQCF
0zYRaabB3X0jzGI9/Lr3Phrb90GvoL1DFLRuiOuTlDkz0vrm/HrZskwHCgMNrkCj
OTD9Vpas4D1QZBbQbRzfnf3OOoG4bgmcCwLFZl3dy27yIDAhrmbUP++g9l1Jmy4v
vBR/M4lt2scQ8LcZYEPqhEaE5EzFQEjtaxDcKdWDNKY9W1NUzSIABhF9eHiAUNdH
AFNJlYeBlCHxcWIeqgon184Dqp/CsvKtz3z3Ni+rlwPM/zuJCFHh1VF+z++0LJjG
roBCV0Tro4XyiEz9yp7Cb5kQYMaj1KL9TqBG0tZx0pmv7y+lXc4TT6DEllXz6USy
rbIba9/uUet3BqeIMTqj
-----END CERTIFICATE-----
15 changes: 2 additions & 13 deletions Minio/ApiEndpoints/BucketOperations.cs
Original file line number Diff line number Diff line change
Expand Up @@ -223,13 +223,7 @@ public IObservable<Item> ListObjectsAsync(ListObjectsArgs args, CancellationToke
{
var objectList = await GetObjectVersionsListAsync(goArgs, cts.Token).ConfigureAwait(false);
var listObjectsItemResponse = new ListObjectVersionResponse(args, objectList, obs);
if (objectList.Item2.Count == 0 && count == 0)
{
var name = args.BucketName;
if (!string.IsNullOrEmpty(args.Prefix))
name += "/" + args.Prefix;
throw new EmptyBucketOperation("Bucket " + name + " is empty.");
}
if (objectList.Item2.Count == 0 && count == 0) return;
obs = listObjectsItemResponse.ItemObservable;
marker = listObjectsItemResponse.NextKeyMarker;
Expand All @@ -240,12 +234,7 @@ public IObservable<Item> ListObjectsAsync(ListObjectsArgs args, CancellationToke
{
var objectList = await GetObjectListAsync(goArgs, cts.Token).ConfigureAwait(false);
if (objectList.Item2.Count == 0 && objectList.Item1.KeyCount.Equals("0") && count == 0)
{
var name = args.BucketName;
if (!string.IsNullOrEmpty(args.Prefix))
name += "/" + args.Prefix;
throw new EmptyBucketOperation("Bucket " + name + " is empty.");
}
return;
var listObjectsItemResponse = new ListObjectsItemResponse(args, objectList, obs);
marker = listObjectsItemResponse.NextMarker;
Expand Down
37 changes: 0 additions & 37 deletions Minio/Exceptions/EmptyBucketOperation.cs

This file was deleted.

4 changes: 2 additions & 2 deletions Minio/MinioClient.cs
Original file line number Diff line number Diff line change
Expand Up @@ -818,11 +818,11 @@ private void LogRequest(HttpRequestMessage request, ResponseResult response, dou

public void Dispose()
{
HTTPClient?.Dispose();
HTTPClient?.Dispose();
}
}

internal delegate void ApiResponseErrorHandlingDelegate(ResponseResult response);

public delegate Task<ResponseResult> RetryPolicyHandlingDelegate(
Func<Task<ResponseResult>> executeRequestCallback);
Func<Task<ResponseResult>> executeRequestCallback);

0 comments on commit 384764e

Please sign in to comment.