/* * QUANTCONNECT.COM - Democratizing Finance, Empowering Individuals. * Lean Algorithmic Trading Engine v2.0. Copyright 2014 QuantConnect Corporation. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ using System; using System.Collections.Generic; using System.IO; using NUnit.Framework; using QuantConnect.Api; namespace QuantConnect.Tests.API { /// /// API Object tests /// Tests APIs ability to connect to Web API /// [TestFixture] public class ApiTest : ApiTestBase { /// /// Test successfully authenticating with the ApiConnection using valid credentials. /// [Test, Explicit("Requires configured api access")] public void ApiConnectionWillAuthenticate_ValidCredentials_Successfully() { var connection = new ApiConnection(TestAccount, TestToken); Assert.IsTrue(connection.Connected); } /// /// Test successfully authenticating with the API using valid credentials. /// [Test, Explicit("Requires configured api access")] public void ApiWillAuthenticate_ValidCredentials_Successfully() { using var api = new Api.Api(); api.Initialize(TestAccount, TestToken, DataFolder); Assert.IsTrue(api.Connected); } /// /// Test that the ApiConnection will reject invalid credentials /// [Test] public void ApiConnectionWillAuthenticate_InvalidCredentials_Unsuccessfully() { var connection = new ApiConnection(TestAccount, ""); Assert.IsFalse(connection.Connected); } /// /// Test that the Api will reject invalid credentials /// [Test] public void ApiWillAuthenticate_InvalidCredentials_Unsuccessfully() { using var api = new Api.Api(); api.Initialize(TestAccount, "", DataFolder); Assert.IsFalse(api.Connected); } [Test] public void NullDataFolder() { using var api = new Api.Api(); Assert.DoesNotThrow(() => api.Initialize(TestAccount, "", null)); } [TestCase("C:\\Data", "forex/oanda/daily/eurusd.zip")] [TestCase("C:\\Data\\", "forex/oanda/daily/eurusd.zip")] [TestCase("C:/Data/", "forex/oanda/daily/eurusd.zip")] [TestCase("C:/Data", "forex/oanda/daily/eurusd.zip")] [TestCase("C:/Data", "forex\\oanda\\daily\\eurusd.zip")] [TestCase("C:/Data/", "forex\\oanda\\daily\\eurusd.zip")] [TestCase("C:\\Data\\", "forex\\oanda\\daily\\eurusd.zip")] [TestCase("C:\\Data", "forex\\oanda\\daily\\eurusd.zip")] public void FormattingPathForDataRequestsAreCorrect(string dataFolder, string dataToDownload) { var path = Path.Combine(dataFolder, dataToDownload); var result = Api.Api.FormatPathForDataRequest(path, dataFolder); Assert.AreEqual(dataToDownload.Replace("\\", "/", StringComparison.InvariantCulture), result); } [TestCase("Authorization", "AWS4-HMAC-SHA256 Credential=AKIAIOSFODNN7EXAMPLE/20130524/us-east-1/s3/aws4_request, SignedHeaders=host;range;x-amz-date,Signature=EXAMPLE_SIGNATURE")] [TestCase("Custom-Header", "Custom header value")] public void DownloadBytesAllowsUserDefinedHeaders(string headerKey, string headerValue) { using var api = new Api.Api(); var headers = new List>() { new(headerKey, headerValue) }; Assert.DoesNotThrow(() => api.Download("https://www.dropbox.com/s/ggt6blmib54q36e/CAPE.csv?dl=1", headers, "", "")); } } }