diff --git a/installer/windows/Storj/CustomAction.cs b/installer/windows/Storj/CustomAction.cs index 508055ca5..e7a47a342 100644 --- a/installer/windows/Storj/CustomAction.cs +++ b/installer/windows/Storj/CustomAction.cs @@ -2,6 +2,7 @@ using Microsoft.Deployment.WindowsInstaller; using System; using System.Globalization; using System.IO; +using System.IO.Abstractions; using System.Text.RegularExpressions; namespace Storj @@ -16,7 +17,7 @@ namespace Storj try { - CustomActionRunner.ValidateIdentityDir(identityDir); + new CustomActionRunner().ValidateIdentityDir(identityDir); } catch (ArgumentException e) { @@ -37,7 +38,7 @@ namespace Storj try { - CustomActionRunner.ValidateWallet(wallet); + new CustomActionRunner().ValidateWallet(wallet); } catch (ArgumentException e) { // Wallet is invalid @@ -57,7 +58,7 @@ namespace Storj try { - CustomActionRunner.ValidateStorageDir(storageDir); + new CustomActionRunner().ValidateStorageDir(storageDir); } catch (ArgumentException e) { @@ -79,7 +80,7 @@ namespace Storj try { - CustomActionRunner.ValidateStorage(storageStr, storageDir); + new CustomActionRunner().ValidateStorage(storageStr, storageDir); } catch (ArgumentException e) { @@ -100,7 +101,7 @@ namespace Storj try { - CustomActionRunner.ValidateBandwidth(bandwidthStr); + new CustomActionRunner().ValidateBandwidth(bandwidthStr); } catch (ArgumentException e) { @@ -120,7 +121,7 @@ namespace Storj string line = session["STORJ_SERVICE_COMMAND"]; session.Log($"ExtractInstallDir registry value: {line}"); - string path = CustomActionRunner.ExtractInstallDir(line); + string path = new CustomActionRunner().ExtractInstallDir(line); session.Log($"ExtractInstallDir extracted path: {path}"); session["STORJ_INSTALLDIR"] = path; @@ -130,44 +131,55 @@ namespace Storj public class CustomActionRunner { - private const long GB = 1000 * 1000 * 1000; - private const long TB = (long)1000 * 1000 * 1000 * 1000; - private const long MinFreeSpace = 550 * GB; // (500 GB + 10% overhead) + public const long GB = 1000 * 1000 * 1000; + public const long TB = (long)1000 * 1000 * 1000 * 1000; + public const long MinFreeSpace = 550 * GB; // (500 GB + 10% overhead) - public static void ValidateIdentityDir(string identityDir) + private readonly IFileSystem fs; + + public CustomActionRunner() : this(fs: new FileSystem()) + { + } + + public CustomActionRunner(IFileSystem fs) + { + this.fs = fs; + } + + public void ValidateIdentityDir(string identityDir) { if (string.IsNullOrEmpty(identityDir)) { throw new ArgumentException("You must select an identity folder."); } - if (!Directory.Exists(identityDir)) + if (!fs.Directory.Exists(identityDir)) { throw new ArgumentException(string.Format("Folder '{0}' does not exist.", identityDir)); } - if (!File.Exists(Path.Combine(identityDir, "ca.cert"))) + if (!fs.File.Exists(Path.Combine(identityDir, "ca.cert"))) { throw new ArgumentException("File 'ca.cert' not found in the selected folder."); } - if (!File.Exists(Path.Combine(identityDir, "ca.key"))) + if (!fs.File.Exists(Path.Combine(identityDir, "ca.key"))) { throw new ArgumentException("File 'ca.key' not found in the selected folder."); } - if (!File.Exists(Path.Combine(identityDir, "identity.cert"))) + if (!fs.File.Exists(Path.Combine(identityDir, "identity.cert"))) { throw new ArgumentException("File 'identity.cert' not found in the selected folder."); } - if (!File.Exists(Path.Combine(identityDir, "identity.key"))) + if (!fs.File.Exists(Path.Combine(identityDir, "identity.key"))) { throw new ArgumentException("File 'identity.key' not found in the selected folder."); } } - public static void ValidateWallet(string wallet) + public void ValidateWallet(string wallet) { if (string.IsNullOrEmpty(wallet)) { @@ -190,15 +202,15 @@ namespace Storj // TODO validate address checksum } - public static void ValidateStorageDir(string storageDir) + public void ValidateStorageDir(string storageDir) { if (string.IsNullOrEmpty(storageDir)) { throw new ArgumentException("You must select a storage folder."); } - DirectoryInfo dir = new DirectoryInfo(storageDir); - DriveInfo drive = new DriveInfo(dir.Root.FullName); + IDirectoryInfo dir = fs.DirectoryInfo.FromDirectoryName(storageDir); + IDriveInfo drive = fs.DriveInfo.FromDriveName(dir.Root.FullName); // TODO: Find a way to calculate the available free space + total size of existing pieces if (drive.TotalSize < MinFreeSpace) @@ -208,7 +220,7 @@ namespace Storj } } - public static void ValidateStorage(string storageStr, string storageDir) + public void ValidateStorage(string storageStr, string storageDir) { if (string.IsNullOrEmpty(storageStr)) { @@ -240,8 +252,8 @@ namespace Storj throw new ArgumentException(string.Format("{0} TB is too large value for allocated storage.", storage)); } - DirectoryInfo dir = new DirectoryInfo(storageDir); - DriveInfo drive = new DriveInfo(dir.Root.FullName); + IDirectoryInfo dir = fs.DirectoryInfo.FromDirectoryName(storageDir); + IDriveInfo drive = fs.DriveInfo.FromDriveName(dir.Root.FullName); // TODO: Find a way to calculate the available free space + total size of existing pieces if (drive.TotalSize < storagePlusOverhead) @@ -251,7 +263,7 @@ namespace Storj } } - public static void ValidateBandwidth(string bandwidthStr) + public void ValidateBandwidth(string bandwidthStr) { if (string.IsNullOrEmpty(bandwidthStr)) { @@ -269,7 +281,7 @@ namespace Storj } } - public static string ExtractInstallDir(string serviceCmd) + public string ExtractInstallDir(string serviceCmd) { if (string.IsNullOrEmpty(serviceCmd)) { diff --git a/installer/windows/Storj/Storj.csproj b/installer/windows/Storj/Storj.csproj index 807c708bd..0ad59f7a9 100644 --- a/installer/windows/Storj/Storj.csproj +++ b/installer/windows/Storj/Storj.csproj @@ -1,5 +1,5 @@  - + Debug x86 @@ -10,7 +10,7 @@ Properties Storj Storj - v2.0 + v4.5.2 512 @@ -34,7 +34,11 @@ false + + + ..\packages\System.IO.Abstractions.7.0.7\lib\net40\System.IO.Abstractions.dll + @@ -46,6 +50,9 @@ + + + diff --git a/installer/windows/Storj/packages.config b/installer/windows/Storj/packages.config new file mode 100644 index 000000000..c60c5c8cd --- /dev/null +++ b/installer/windows/Storj/packages.config @@ -0,0 +1,4 @@ + + + + \ No newline at end of file diff --git a/installer/windows/StorjTests/ExtractInstallDirTests.cs b/installer/windows/StorjTests/ExtractInstallDirTests.cs index 52cd02bf8..02de4f9fb 100644 --- a/installer/windows/StorjTests/ExtractInstallDirTests.cs +++ b/installer/windows/StorjTests/ExtractInstallDirTests.cs @@ -10,26 +10,26 @@ namespace StorjTests [TestMethod] public void NullServiceCmd() { - Assert.IsNull(CustomActionRunner.ExtractInstallDir(null)); + Assert.IsNull(new CustomActionRunner().ExtractInstallDir(null)); } [TestMethod] public void EmptyServiceCmd() { - Assert.IsNull(CustomActionRunner.ExtractInstallDir("")); + Assert.IsNull(new CustomActionRunner().ExtractInstallDir("")); } [TestMethod] public void MissingConfigDirFlag() { - Assert.IsNull(CustomActionRunner.ExtractInstallDir("\"C:\\Program Files\\Storj\\Storage Node\\storagenode.exe\" run")); + Assert.IsNull(new CustomActionRunner().ExtractInstallDir("\"C:\\Program Files\\Storj\\Storage Node\\storagenode.exe\" run")); } [TestMethod] public void ValidServiceCmd() { Assert.AreEqual("C:\\Program Files\\Storj\\Storage Node\\\\", - CustomActionRunner.ExtractInstallDir("\"C:\\Program Files\\Storj\\Storage Node\\storagenode.exe\" run --config-dir \"C:\\Program Files\\Storj\\Storage Node\\\\\"")); + new CustomActionRunner().ExtractInstallDir("\"C:\\Program Files\\Storj\\Storage Node\\storagenode.exe\" run --config-dir \"C:\\Program Files\\Storj\\Storage Node\\\\\"")); } } } diff --git a/installer/windows/StorjTests/MockHelpers.cs b/installer/windows/StorjTests/MockHelpers.cs new file mode 100644 index 000000000..f7456bbf0 --- /dev/null +++ b/installer/windows/StorjTests/MockHelpers.cs @@ -0,0 +1,34 @@ +using System; +using System.IO.Abstractions; +using Microsoft.VisualStudio.TestTools.UnitTesting; +using Moq; +using Storj; + +namespace StorjTests +{ + public class MockHelpers + { + public static IFileSystem MockFileSystemTotalSize(long totalSize) + { + var dir = Mock.Of(); + Mock.Get(dir).Setup(d => d.Root).Returns(dir); + Mock.Get(dir).Setup(d => d.FullName).Returns("X:\\"); + + var dirFactory = Mock.Of(); + Mock.Get(dirFactory).Setup(d => d.FromDirectoryName(It.IsAny())).Returns(dir); + + var drive = Mock.Of(); + Mock.Get(drive).Setup(d => d.Name).Returns("X:\\"); + Mock.Get(drive).Setup(d => d.TotalSize).Returns(totalSize); + + var driveFactory = Mock.Of(); + Mock.Get(driveFactory).Setup(d => d.FromDriveName(It.IsAny())).Returns(drive); + + var fs = Mock.Of(); + Mock.Get(fs).Setup(f => f.DriveInfo).Returns(driveFactory); + Mock.Get(fs).Setup(f => f.DirectoryInfo).Returns(dirFactory); + + return fs; + } + } +} diff --git a/installer/windows/StorjTests/StorjTests.csproj b/installer/windows/StorjTests/StorjTests.csproj index 62ab8063e..b23bb9c49 100644 --- a/installer/windows/StorjTests/StorjTests.csproj +++ b/installer/windows/StorjTests/StorjTests.csproj @@ -47,6 +47,10 @@ false + + ..\packages\Castle.Core.4.4.0\lib\net45\Castle.Core.dll + + ..\packages\MSTest.TestFramework.1.3.2\lib\net45\Microsoft.VisualStudio.TestPlatform.TestFramework.dll @@ -54,14 +58,31 @@ ..\packages\MSTest.TestFramework.1.3.2\lib\net45\Microsoft.VisualStudio.TestPlatform.TestFramework.Extensions.dll + + ..\packages\Moq.4.13.1\lib\net45\Moq.dll + + + + ..\packages\System.IO.Abstractions.7.0.7\lib\net40\System.IO.Abstractions.dll + + + ..\packages\System.IO.Abstractions.TestingHelpers.7.0.7\lib\net40\System.IO.Abstractions.TestingHelpers.dll + + + ..\packages\System.Runtime.CompilerServices.Unsafe.4.5.0\lib\netstandard1.0\System.Runtime.CompilerServices.Unsafe.dll + + + ..\packages\System.Threading.Tasks.Extensions.4.5.1\lib\portable-net45+win8+wp8+wpa81\System.Threading.Tasks.Extensions.dll + + diff --git a/installer/windows/StorjTests/ValidateBandwidthTests.cs b/installer/windows/StorjTests/ValidateBandwidthTests.cs index 6d820d285..37dff33ca 100644 --- a/installer/windows/StorjTests/ValidateBandwidthTests.cs +++ b/installer/windows/StorjTests/ValidateBandwidthTests.cs @@ -11,34 +11,34 @@ namespace StorjTests [ExpectedExceptionWithMessage(typeof(ArgumentException), "The value cannot be empty.")] public void NullBandwidth() { - CustomActionRunner.ValidateBandwidth(null); + new CustomActionRunner().ValidateBandwidth(null); } [TestMethod] [ExpectedExceptionWithMessage(typeof(ArgumentException), "The value cannot be empty.")] public void EmptyBandwidth() { - CustomActionRunner.ValidateBandwidth(""); + new CustomActionRunner().ValidateBandwidth(""); } [TestMethod] [ExpectedExceptionWithMessage(typeof(ArgumentException), "'some random text' is not a valid number.")] public void InvalidNumber() { - CustomActionRunner.ValidateBandwidth("some random text"); + new CustomActionRunner().ValidateBandwidth("some random text"); } [TestMethod] [ExpectedExceptionWithMessage(typeof(ArgumentException), "The allocated bandwidth cannot be less than 2 TB.")] public void TooSmall() { - CustomActionRunner.ValidateBandwidth("1.41"); + new CustomActionRunner().ValidateBandwidth("1.41"); } [TestMethod] public void ValidBandwidth() { - CustomActionRunner.ValidateBandwidth("3.14"); + new CustomActionRunner().ValidateBandwidth("3.14"); } } } diff --git a/installer/windows/StorjTests/ValidateIdentityDirTests.cs b/installer/windows/StorjTests/ValidateIdentityDirTests.cs index b9426338b..2567f11a3 100644 --- a/installer/windows/StorjTests/ValidateIdentityDirTests.cs +++ b/installer/windows/StorjTests/ValidateIdentityDirTests.cs @@ -1,4 +1,6 @@ using System; +using System.Collections.Generic; +using System.IO.Abstractions.TestingHelpers; using Microsoft.VisualStudio.TestTools.UnitTesting; using Storj; @@ -11,23 +13,86 @@ namespace StorjTests [ExpectedExceptionWithMessage(typeof(ArgumentException), "You must select an identity folder.")] public void NullIdentityDir() { - CustomActionRunner.ValidateIdentityDir(null); + new CustomActionRunner().ValidateIdentityDir(null); } [TestMethod] [ExpectedExceptionWithMessage(typeof(ArgumentException), "You must select an identity folder.")] public void EmptyIdentityDir() { - CustomActionRunner.ValidateIdentityDir(""); + new CustomActionRunner().ValidateIdentityDir(""); } [TestMethod] [ExpectedExceptionWithMessage(typeof(ArgumentException), "Folder 'X:\\Some\\Nonexistent\\Folder' does not exist.")] public void NonexistentIdentityDir() { - CustomActionRunner.ValidateIdentityDir("X:\\Some\\Nonexistent\\Folder"); + new CustomActionRunner().ValidateIdentityDir("X:\\Some\\Nonexistent\\Folder"); } - // TODO: add tests that mock the file system + [TestMethod] + [ExpectedExceptionWithMessage(typeof(ArgumentException), "File 'ca.cert' not found in the selected folder.")] + public void MissingCACertFile() + { + var fs = new MockFileSystem(new Dictionary + { + { @"X:\\Some\\Identity\\Folder\\ca.key", new MockFileData("") }, + { @"X:\\Some\\Identity\\Folder\\identity.cert", new MockFileData("") }, + { @"X:\\Some\\Identity\\Folder\\identity.key", new MockFileData("") } + }); + new CustomActionRunner(fs).ValidateIdentityDir("X:\\Some\\Identity\\Folder"); + } + + [TestMethod] + [ExpectedExceptionWithMessage(typeof(ArgumentException), "File 'ca.key' not found in the selected folder.")] + public void MissingCAKeyFile() + { + var fs = new MockFileSystem(new Dictionary + { + { @"X:\\Some\\Identity\\Folder\\ca.cert", new MockFileData("") }, + { @"X:\\Some\\Identity\\Folder\\identity.cert", new MockFileData("") }, + { @"X:\\Some\\Identity\\Folder\\identity.key", new MockFileData("") } + }); + new CustomActionRunner(fs).ValidateIdentityDir("X:\\Some\\Identity\\Folder"); + } + + [TestMethod] + [ExpectedExceptionWithMessage(typeof(ArgumentException), "File 'identity.cert' not found in the selected folder.")] + public void MissingIdentityCertFile() + { + var fs = new MockFileSystem(new Dictionary + { + { @"X:\\Some\\Identity\\Folder\\ca.cert", new MockFileData("") }, + { @"X:\\Some\\Identity\\Folder\\ca.key", new MockFileData("") }, + { @"X:\\Some\\Identity\\Folder\\identity.key", new MockFileData("") } + }); + new CustomActionRunner(fs).ValidateIdentityDir("X:\\Some\\Identity\\Folder"); + } + + [TestMethod] + [ExpectedExceptionWithMessage(typeof(ArgumentException), "File 'identity.key' not found in the selected folder.")] + public void MissingIdentityKeyFile() + { + var fs = new MockFileSystem(new Dictionary + { + { @"X:\\Some\\Identity\\Folder\\ca.cert", new MockFileData("") }, + { @"X:\\Some\\Identity\\Folder\\ca.key", new MockFileData("") }, + { @"X:\\Some\\Identity\\Folder\\identity.cert", new MockFileData("") } + }); + new CustomActionRunner(fs).ValidateIdentityDir("X:\\Some\\Identity\\Folder"); + } + + [TestMethod] + public void ValidIdentityDir() + { + var fs = new MockFileSystem(new Dictionary + { + { @"X:\\Some\\Identity\\Folder\\ca.cert", new MockFileData("") }, + { @"X:\\Some\\Identity\\Folder\\ca.key", new MockFileData("") }, + { @"X:\\Some\\Identity\\Folder\\identity.cert", new MockFileData("") }, + { @"X:\\Some\\Identity\\Folder\\identity.key", new MockFileData("") }, + }); + new CustomActionRunner(fs).ValidateIdentityDir("X:\\Some\\Identity\\Folder"); + } } } diff --git a/installer/windows/StorjTests/ValidateStorageDirTests.cs b/installer/windows/StorjTests/ValidateStorageDirTests.cs index 1b417524f..957dfbc49 100644 --- a/installer/windows/StorjTests/ValidateStorageDirTests.cs +++ b/installer/windows/StorjTests/ValidateStorageDirTests.cs @@ -11,16 +11,29 @@ namespace StorjTests [ExpectedExceptionWithMessage(typeof(ArgumentException), "You must select a storage folder.")] public void NullStorageDir() { - CustomActionRunner.ValidateStorageDir(null); + new CustomActionRunner().ValidateStorageDir(null); } [TestMethod] [ExpectedExceptionWithMessage(typeof(ArgumentException), "You must select a storage folder.")] public void EmptyStorageDir() { - CustomActionRunner.ValidateStorageDir(""); + new CustomActionRunner().ValidateStorageDir(""); } - // TODO: add tests that mock the file system + [TestMethod] + [ExpectedExceptionWithMessage(typeof(ArgumentException), "The selected drive 'X:\\' has only 200 GB disk size. The minimum required is 550 GB.")] + public void NotEnoughSpace() + { + var fs = MockHelpers.MockFileSystemTotalSize(200 * CustomActionRunner.GB); + new CustomActionRunner(fs).ValidateStorageDir("X:\\Storage"); + } + + [TestMethod] + public void ValidStorageDir() + { + var fs = MockHelpers.MockFileSystemTotalSize(2 * CustomActionRunner.TB); + new CustomActionRunner(fs).ValidateStorageDir("X:\\Storage"); + } } } diff --git a/installer/windows/StorjTests/ValidateStorageTests.cs b/installer/windows/StorjTests/ValidateStorageTests.cs index e1e58dc89..61f76e2b9 100644 --- a/installer/windows/StorjTests/ValidateStorageTests.cs +++ b/installer/windows/StorjTests/ValidateStorageTests.cs @@ -13,56 +13,64 @@ namespace StorjTests [ExpectedExceptionWithMessage(typeof(ArgumentException), "The value cannot be empty.")] public void NullStorage() { - CustomActionRunner.ValidateStorage(null, StorageDir); + new CustomActionRunner().ValidateStorage(null, StorageDir); } [TestMethod] [ExpectedExceptionWithMessage(typeof(ArgumentException), "The value cannot be empty.")] public void EmptyStorage() { - CustomActionRunner.ValidateStorage("", StorageDir); + new CustomActionRunner().ValidateStorage("", StorageDir); } [TestMethod] [ExpectedExceptionWithMessage(typeof(ArgumentException), "'some random text' is not a valid number.")] public void InvalidNumber() { - CustomActionRunner.ValidateStorage("some random text", StorageDir); + new CustomActionRunner().ValidateStorage("some random text", StorageDir); } [TestMethod] [ExpectedExceptionWithMessage(typeof(ArgumentException), "The allocated disk space cannot be less than 0.5 TB.")] public void TooSmall() { - CustomActionRunner.ValidateStorage("0.41", StorageDir); + new CustomActionRunner().ValidateStorage("0.41", StorageDir); } [TestMethod] [ExpectedExceptionWithMessage(typeof(ArgumentException), "10000000 TB is too large value for allocated storage.")] public void TooLarge() { - CustomActionRunner.ValidateStorage("10000000", StorageDir); + new CustomActionRunner().ValidateStorage("10000000", StorageDir); } [TestMethod] [ExpectedExceptionWithMessage(typeof(ArgumentException), "The storage directory cannot be empty")] public void NullStorageDir() { - CustomActionRunner.ValidateStorage("3.14", null); + new CustomActionRunner().ValidateStorage("3.14", null); } [TestMethod] [ExpectedExceptionWithMessage(typeof(ArgumentException), "The storage directory cannot be empty")] public void EmptyStorageDir() { - CustomActionRunner.ValidateStorage("3.14", ""); + new CustomActionRunner().ValidateStorage("3.14", ""); } - // TODO: add tests that mock the file system - // [TestMethod] - // public void ValidStorage() - // { - // CustomActionRunner.ValidateStorage("3.14", StorageDir); - // } + [TestMethod] + [ExpectedExceptionWithMessage(typeof(ArgumentException), "The disk size (0.2 TB) on the selected drive X:\\ is less than the allocated disk space plus the 10% overhead (3.45 TB total).")] + public void NotEnoughSpace() + { + var fs = MockHelpers.MockFileSystemTotalSize(200 * CustomActionRunner.GB); + new CustomActionRunner(fs).ValidateStorage("3.14", StorageDir); + } + + [TestMethod] + public void ValidStorage() + { + var fs = MockHelpers.MockFileSystemTotalSize(4 * CustomActionRunner.TB); + new CustomActionRunner(fs).ValidateStorage("3.14", StorageDir); + } } } diff --git a/installer/windows/StorjTests/ValidateWalletTests.cs b/installer/windows/StorjTests/ValidateWalletTests.cs index c38045293..5b8196133 100644 --- a/installer/windows/StorjTests/ValidateWalletTests.cs +++ b/installer/windows/StorjTests/ValidateWalletTests.cs @@ -11,41 +11,41 @@ namespace StorjTests [ExpectedExceptionWithMessage(typeof(ArgumentException), "The payout address cannot be empty.")] public void NullWallet() { - CustomActionRunner.ValidateWallet(null); + new CustomActionRunner().ValidateWallet(null); } [TestMethod] [ExpectedExceptionWithMessage(typeof(ArgumentException), "The payout address cannot be empty.")] public void EmptyWallet() { - CustomActionRunner.ValidateWallet(""); + new CustomActionRunner().ValidateWallet(""); } [TestMethod] [ExpectedExceptionWithMessage(typeof(ArgumentException), "The payout address must start with a '0x' prefix.")] public void PrefixMissing() { - CustomActionRunner.ValidateWallet("e857955cfCd98bAe1073d4e314c3F9526799357A"); + new CustomActionRunner().ValidateWallet("e857955cfCd98bAe1073d4e314c3F9526799357A"); } [TestMethod] [ExpectedExceptionWithMessage(typeof(ArgumentException), "The payout address must have 40 characters after the '0x' prefix.")] public void TooShortWallet() { - CustomActionRunner.ValidateWallet("0xe857955cfCd98bAe1073d4e314c3F9526799357"); + new CustomActionRunner().ValidateWallet("0xe857955cfCd98bAe1073d4e314c3F9526799357"); } [TestMethod] [ExpectedExceptionWithMessage(typeof(ArgumentException), "The payout address must have 40 characters after the '0x' prefix.")] public void TooLongWallet() { - CustomActionRunner.ValidateWallet("0xe857955cfCd98bAe1073d4e314c3F9526799357A0"); + new CustomActionRunner().ValidateWallet("0xe857955cfCd98bAe1073d4e314c3F9526799357A0"); } [TestMethod] public void ValidWallet() { - CustomActionRunner.ValidateWallet("0xe857955cfCd98bAe1073d4e314c3F9526799357A"); + new CustomActionRunner().ValidateWallet("0xe857955cfCd98bAe1073d4e314c3F9526799357A"); } } } diff --git a/installer/windows/StorjTests/packages.config b/installer/windows/StorjTests/packages.config index d2da0eb1d..4e01e0b29 100644 --- a/installer/windows/StorjTests/packages.config +++ b/installer/windows/StorjTests/packages.config @@ -1,5 +1,11 @@  + + + + + + \ No newline at end of file diff --git a/installer/windows/unittests.bat b/installer/windows/unittests.bat index 432a5295f..20b46c9b1 100644 --- a/installer/windows/unittests.bat +++ b/installer/windows/unittests.bat @@ -1,4 +1,5 @@ rem install NuGet packages +nuget install installer\windows\Storj\packages.config -o installer\windows\packages nuget install installer\windows\StorjTests\packages.config -o installer\windows\packages rem build the test project