//using CryptoExchange.Net.Interfaces; //using CryptoExchange.Net.Objects; //using Moq; //using System; //using System.IO; //using System.Net; //using System.Net.Http; //using System.Reflection; //using System.Text; //using System.Threading; //using System.Threading.Tasks; //using CryptoExchange.Net.Authentication; //using System.Collections.Generic; //using Microsoft.Extensions.Logging; //using CryptoExchange.Net.Clients; //using Microsoft.Extensions.Options; //using System.Linq; //using CryptoExchange.Net.Converters.SystemTextJson; //using System.Text.Json.Serialization; //using System.Net.Http.Headers; //using CryptoExchange.Net.SharedApis; //using CryptoExchange.Net.Converters.MessageParsing.DynamicConverters; //namespace CryptoExchange.Net.UnitTests.TestImplementations //{ // public class TestRestClient: BaseRestClient // { // public TestRestApi1Client Api1 { get; } // public TestRestApi2Client Api2 { get; } // public TestRestClient(Action optionsDelegate = null) // : this(null, null, Options.Create(ApplyOptionsDelegate(optionsDelegate))) // { // } // public TestRestClient(HttpClient httpClient, ILoggerFactory loggerFactory, IOptions options) : base(loggerFactory, "Test") // { // Initialize(options.Value); // Api1 = AddApiClient(new TestRestApi1Client(options.Value)); // Api2 = AddApiClient(new TestRestApi2Client(options.Value)); // } // public void SetResponse(string responseData, out IRequest requestObj) // { // var expectedBytes = Encoding.UTF8.GetBytes(responseData); // var responseStream = new MemoryStream(); // responseStream.Write(expectedBytes, 0, expectedBytes.Length); // responseStream.Seek(0, SeekOrigin.Begin); // var response = new Mock(); // response.Setup(c => c.IsSuccessStatusCode).Returns(true); // response.Setup(c => c.GetResponseStreamAsync(It.IsAny())).Returns(Task.FromResult((Stream)responseStream)); // var headers = new HttpRequestMessage().Headers; // var request = new Mock(); // request.Setup(c => c.Uri).Returns(new Uri("http://www.test.com")); // request.Setup(c => c.GetResponseAsync(It.IsAny())).Returns(Task.FromResult(response.Object)); // request.Setup(c => c.SetContent(It.IsAny(), It.IsAny(), It.IsAny())).Callback(new Action((content, encoding, type) => { request.Setup(r => r.Content).Returns(content); })); // request.Setup(c => c.AddHeader(It.IsAny(), It.IsAny())).Callback((key, val) => headers.Add(key, new string[] { val })); // request.Setup(c => c.GetHeaders()).Returns(() => headers); // var factory = Mock.Get(Api1.RequestFactory); // factory.Setup(c => c.Create(It.IsAny(), It.IsAny(), It.IsAny(), It.IsAny())) // .Callback((version, method, uri, id) => // { // request.Setup(a => a.Uri).Returns(uri); // request.Setup(a => a.Method).Returns(method); // }) // .Returns(request.Object); // factory = Mock.Get(Api2.RequestFactory); // factory.Setup(c => c.Create(It.IsAny(), It.IsAny(), It.IsAny(), It.IsAny())) // .Callback((version, method, uri, id) => // { // request.Setup(a => a.Uri).Returns(uri); // request.Setup(a => a.Method).Returns(method); // }) // .Returns(request.Object); // requestObj = request.Object; // } // public void SetErrorWithoutResponse(HttpStatusCode code, string message) // { // var we = new HttpRequestException(); // typeof(HttpRequestException).GetField("_message", BindingFlags.Public | BindingFlags.NonPublic | BindingFlags.Instance).SetValue(we, message); // var request = new Mock(); // request.Setup(c => c.Uri).Returns(new Uri("http://www.test.com")); // request.Setup(c => c.GetHeaders()).Returns(new HttpRequestMessage().Headers); // request.Setup(c => c.GetResponseAsync(It.IsAny())).Throws(we); // var factory = Mock.Get(Api1.RequestFactory); // factory.Setup(c => c.Create(It.IsAny(), It.IsAny(), It.IsAny(), It.IsAny())) // .Returns(request.Object); // factory = Mock.Get(Api2.RequestFactory); // factory.Setup(c => c.Create(It.IsAny(), It.IsAny(), It.IsAny(), It.IsAny())) // .Returns(request.Object); // } // public void SetErrorWithResponse(string responseData, HttpStatusCode code) // { // var expectedBytes = Encoding.UTF8.GetBytes(responseData); // var responseStream = new MemoryStream(); // responseStream.Write(expectedBytes, 0, expectedBytes.Length); // responseStream.Seek(0, SeekOrigin.Begin); // var response = new Mock(); // response.Setup(c => c.IsSuccessStatusCode).Returns(false); // response.Setup(c => c.GetResponseStreamAsync(It.IsAny())).Returns(Task.FromResult((Stream)responseStream)); // var headers = new List>(); // var request = new Mock(); // request.Setup(c => c.Uri).Returns(new Uri("http://www.test.com")); // request.Setup(c => c.GetResponseAsync(It.IsAny())).Returns(Task.FromResult(response.Object)); // request.Setup(c => c.AddHeader(It.IsAny(), It.IsAny())).Callback((key, val) => headers.Add(new KeyValuePair(key, new string[] { val }))); // request.Setup(c => c.GetHeaders()).Returns(new HttpRequestMessage().Headers); // var factory = Mock.Get(Api1.RequestFactory); // factory.Setup(c => c.Create(It.IsAny(), It.IsAny(), It.IsAny(), It.IsAny())) // .Callback((version, method, uri, id) => request.Setup(a => a.Uri).Returns(uri)) // .Returns(request.Object); // factory = Mock.Get(Api2.RequestFactory); // factory.Setup(c => c.Create(It.IsAny(), It.IsAny(), It.IsAny(), It.IsAny())) // .Callback((version, method, uri, id) => request.Setup(a => a.Uri).Returns(uri)) // .Returns(request.Object); // } // } // public class TestRestApi1Client : RestApiClient // { // protected override IRestMessageHandler MessageHandler { get; } = new TestRestMessageHandler(); // public TestRestApi1Client(TestClientOptions options) : base(new TraceLogger(), null, "https://localhost:123", options, options.Api1Options) // { // RequestFactory = new Mock().Object; // } // /// // public override string FormatSymbol(string baseAsset, string quoteAsset, TradingMode futuresType, DateTime? deliverDate = null) => $"{baseAsset.ToUpperInvariant()}{quoteAsset.ToUpperInvariant()}"; // protected override IMessageSerializer CreateSerializer() => new SystemTextJsonMessageSerializer(new System.Text.Json.JsonSerializerOptions()); // public async Task> Request(CancellationToken ct = default) where T : class // { // return await SendAsync("http://www.test.com", new RequestDefinition("/", HttpMethod.Get) { Weight = 0 }, null, ct); // } // public async Task> RequestWithParams(HttpMethod method, ParameterCollection parameters, Dictionary headers) where T : class // { // return await SendAsync("http://www.test.com", new RequestDefinition("/", method) { Weight = 0 }, parameters, default, additionalHeaders: headers); // } // public void SetParameterPosition(HttpMethod method, HttpMethodParameterPosition position) // { // ParameterPositions[method] = position; // } // protected override TestAuthProvider CreateAuthenticationProvider(HMACCredential credentials) // => new TestAuthProvider(credentials); // protected override Task> GetServerTimestampAsync() // { // throw new NotImplementedException(); // } // } // public class TestRestApi2Client : RestApiClient // { // protected override IRestMessageHandler MessageHandler { get; } = new TestRestMessageHandler(); // public TestRestApi2Client(TestClientOptions options) : base(new TraceLogger(), null, "https://localhost:123", options, options.Api2Options) // { // RequestFactory = new Mock().Object; // } // protected override IMessageSerializer CreateSerializer() => new SystemTextJsonMessageSerializer(new System.Text.Json.JsonSerializerOptions()); // /// // public override string FormatSymbol(string baseAsset, string quoteAsset, TradingMode futuresType, DateTime? deliverDate = null) => $"{baseAsset.ToUpperInvariant()}{quoteAsset.ToUpperInvariant()}"; // public async Task> Request(CancellationToken ct = default) where T : class // { // return await SendAsync("http://www.test.com", new RequestDefinition("/", HttpMethod.Get) { Weight = 0 }, null, ct); // } // protected override TestAuthProvider CreateAuthenticationProvider(HMACCredential credentials) // => new TestAuthProvider(credentials); // protected override Task> GetServerTimestampAsync() // { // throw new NotImplementedException(); // } // } // public class TestError // { // [JsonPropertyName("errorCode")] // public int ErrorCode { get; set; } // [JsonPropertyName("errorMessage")] // public string ErrorMessage { get; set; } // } // public class ParseErrorTestRestClient: TestRestClient // { // public ParseErrorTestRestClient() { } // } //}