public void Constructor_ValidPartsWithDuplicates_ExpectedTrueQuantity() { var signature = new WalletSignature() { Version = 1, PartsThreshold = 2, PartsTotal = 4 }; var partA = new WalletPart() { Signature = new WalletSignature(signature.GetShortNotation()), Data = "631-7-8b1b1703484d828fe2a61b9c63497aa68494aa226a272657" }; var partB = new WalletPart() { Signature = new WalletSignature(signature.GetShortNotation()), Data = "5d1-5-c67046150ecd502cdbc15f7a67e990a646febd88c229d3ea" }; var partC = new WalletPart() { Signature = new WalletSignature(signature.GetShortNotation()), Data = "5d1-5-c67046150ecd502cdbc15f7a67e990a646febd88c229d3ea" }; var wallet = new Wallet(new List <WalletPart>() { partA, partB, partC }); Assert.That(wallet.Parts.Count, Is.Not.EqualTo(3)); Assert.That(wallet.Parts.Count, Is.EqualTo(2)); }
public void Constructor_DifferentParts_RecoveredValidPrivateKey() { var signature = new WalletSignature() { Version = 1, PartsThreshold = 2, PartsTotal = 4 }; var partA = new WalletPart() { Signature = new WalletSignature(signature.GetShortNotation()), Data = "0e1-1-5ca6e43983cff56aa90fd6b66ea844a7c22a92dd92343888" // Corrupt data }; var partB = new WalletPart() { Signature = new WalletSignature(signature.GetShortNotation()), Data = "631-7-8b1b1703484d828fe2a61b9c63497aa68494aa226a272657" }; Assert.Throws <ArgumentException>(() => { var wallet = new Wallet(new List <WalletPart>() { partA, partB }); }, Strings.ChecksumExceptionSharesCorrupt); }
public void Constructor_DuplicateParts_ArgumentExceptionExpected() { var signature = new WalletSignature() { Version = 1, PartsThreshold = 2, PartsTotal = 4 }; var partA = new WalletPart() { Signature = new WalletSignature(signature.GetShortNotation()), Data = "datadatadata" }; var partB = new WalletPart() { Signature = new WalletSignature(signature.GetShortNotation()), Data = "datadatadata" }; Assert.Throws <ArgumentException>(() => { var wallet = new Wallet(new List <WalletPart>() { partA, partB }); }); }
public void Constructor_ValidSignature_NoExceptionExpected() { Assert.DoesNotThrow(() => { var signature = new WalletSignature() { Version = 1, PartsThreshold = 2, PartsTotal = 4 }; var part1 = new WalletPart() { Signature = signature, Data = "0e1-1-5ca6e43983ccf56aa90fd6b66ea844a7c22a92dd92343888" }; var part2 = new WalletPart() { Signature = signature, Data = "5d1-5-c67046150ecd502cdbc15f7a67e990a646febd88c229d3ea" }; var wallet1 = new Wallet(signature, "ExampleOfPrivateKey"); var wallet2 = new Wallet(new List <IWalletPart> { part1, part2 }); }); }
public void InterpretShortNotation_Null_InvalidSignature() { var signature = new WalletSignature(); var result = signature.InterpretShortNotation(null); Assert.IsFalse(result); }
public void Equals_EqualSignaturesInDifferentObjects_True() { var signature1 = new WalletSignature() { Version = 1, PartsThreshold = 2, PartsTotal = 5 }; var signature2 = new WalletSignature() { Version = 1, PartsThreshold = 2, PartsTotal = 5 }; // Different objects with the same values Assert.That(signature1, Is.EqualTo(signature2)); Assert.IsFalse(signature1 == signature2); // Compare to deserialized object var json = JsonConvert.SerializeObject(signature1); var deserialized = JsonConvert.DeserializeObject <WalletSignature>(json); Assert.That(deserialized, Is.EqualTo(signature1)); Assert.That(deserialized, Is.EqualTo(signature2)); }
public void Constructor_EnoughValidParts_NoExceptionExpected() { var signature = new WalletSignature() { Version = 1, PartsThreshold = 2, PartsTotal = 4 }; var partA = new WalletPart() { Signature = new WalletSignature(signature.GetShortNotation()), Data = "0e1-1-5ca6e43983ccf56aa90fd6b66ea844a7c22a92dd92343888" }; var partB = new WalletPart() { Signature = new WalletSignature(signature.GetShortNotation()), Data = "631-7-8b1b1703484d828fe2a61b9c63497aa68494aa226a272657" }; Assert.DoesNotThrow(() => { var wallet = new Wallet(new List <WalletPart>() { partA, partB }); }); }
public void InterpretShortNotationByConstructor_ValidNotationInvalidData_InvalidSignature() { var shortNotation = "1|10|3"; var signature = new WalletSignature(shortNotation); Assert.IsFalse(signature.IsValid()); }
public void InterpretShortNotation_ValidNotationInvalidData_InvalidSignature() { var shortNotation = "1|10|3"; var signature = new WalletSignature(); var result = signature.InterpretShortNotation(shortNotation); Assert.IsFalse(result); }
public void InterpretShortNotation_IncompleteNotation_InvalidSignature() { var shortNotation = "1|10"; var signature = new WalletSignature(); var result = signature.InterpretShortNotation(shortNotation); Assert.IsFalse(result); }
public void InterpretShortNotationByConstructor_ValidNotationAndData_ValidSignature() { var shortNotation = "1|3|10"; var signature = new WalletSignature(shortNotation); Assert.That(signature.Version, Is.EqualTo(1)); Assert.That(signature.PartsThreshold, Is.EqualTo(3)); Assert.That(signature.PartsTotal, Is.EqualTo(10)); }
public void IsValid_ValidSignature_True() { var signature = new WalletSignature() { PartsThreshold = 3, PartsTotal = 6 }; var result = signature.IsValid(); Assert.IsTrue(result); }
public void Constructor_NullParts_ArgumentNullException() { var signature = new WalletSignature() { Version = 1, PartsThreshold = 2, PartsTotal = 4 }; Assert.Throws <ArgumentNullException>(() => { var wallet = new Wallet(default(List <WalletPart>)); }); }
public void Constructor_ValidInitialization_ValidPartsQuantity() { var signature = new WalletSignature() { Version = 1, PartsThreshold = 2, PartsTotal = 4 }; var wallet = new Wallet(signature, "ExampleOfPrivateKey"); // Validate quantity of parts Assert.That(wallet.Parts.Count, Is.EqualTo(signature.PartsTotal)); }
public void Constructor_InvalidSignature_ArgumentExceptionExpected() { Assert.Throws <ArgumentException>(() => { var invalidSignature = new WalletSignature() { Version = 1, PartsThreshold = 8, PartsTotal = 4 }; var wallet1 = new Wallet(invalidSignature, "ExampleOfPrivateKey"); }); }
public void IsValid_NegativeSharesTotal_False() { var expectedMessage = Strings.SharesTotalCannotBeLessThanOne; var signature = new WalletSignature() { PartsThreshold = 3, PartsTotal = -8 }; string message; var result = signature.IsValid(out message); Assert.IsFalse(result); Assert.That(message, Is.EqualTo(expectedMessage)); }
public void GetShortNotation_ValidSignature_ValidShortNotation() { var expectedShortNotation = "12|5|10"; var signature = new WalletSignature() { Version = 12, PartsThreshold = 5, PartsTotal = 10 }; var shortNotation = signature.GetShortNotation(); Assert.That(shortNotation, Is.EqualTo(expectedShortNotation)); }
static void GenerateSharedWallet(string thresholdStr, string totalStr, string privateKey) { // Validate and convert values var valid = !string.IsNullOrWhiteSpace(thresholdStr) && !string.IsNullOrWhiteSpace(totalStr) && !string.IsNullOrWhiteSpace(privateKey); int threshold = -1; valid = valid && int.TryParse(thresholdStr, out threshold); int total = -1; valid = valid && int.TryParse(totalStr, out total); var signature = new WalletSignature() { PartsThreshold = threshold, PartsTotal = total }; if (!valid || !signature.IsValid()) { // Show instructions if parametes are invalid. PrintUsage(); } else { // Generate wallet var wallet = new Wallet(signature, privateKey); if (!wallet.IsValid()) { PrintUsage(); return; } // Print parts Console.WriteLine("Parts generated: "); foreach (var part in wallet.Parts) { Console.WriteLine(" - " + part.GetShortNotation()); } } }
public void Equals_DifferentSignaturesInDifferentObjects_False() { var signature1 = new WalletSignature() { Version = 1, PartsThreshold = 2, PartsTotal = 5 }; var signature2 = new WalletSignature() { Version = 1, PartsThreshold = 2, PartsTotal = 7 }; // Different objects with the different values Assert.That(signature1, Is.Not.EqualTo(signature2)); Assert.IsFalse(signature1 == signature2); }
public void Constructor_ValidInitialization_ValidPartsContent() { var signature = new WalletSignature() { Version = 1, PartsThreshold = 2, PartsTotal = 4 }; var wallet = new Wallet(signature, "constant forest adore false green weave stop guy fur freeze giggle clock"); // Validate parts's content Console.WriteLine("Signature: " + signature.GetShortNotation()); foreach (var part in wallet.Parts) { Assert.That(part.Signature.Equals(signature)); Assert.That(part.Data, Is.Not.Null.Or.Empty); Console.WriteLine("Data: " + part.Data); } }
public void Constructor_ValidParts_ValidPrivateKey() { var signature = new WalletSignature() { Version = 1, PartsThreshold = 2, PartsTotal = 4 }; var privateKey = "ExampleOfPrivateKey"; var wallet = new Wallet(signature, privateKey); var recoveredWallet = new Wallet( new List <IWalletPart>() { new WalletPart(wallet.Parts.First().GetShortNotation()), new WalletPart(wallet.Parts.Last().GetShortNotation()), }); Assert.That(recoveredWallet.PrivateKey, Is.EqualTo(privateKey)); Assert.That(recoveredWallet.PrivateKey, Is.EqualTo(wallet.PrivateKey)); }
public void Constructor_NotEnoughParts_ArgumentExceptionExpected() { var signature = new WalletSignature() { Version = 1, PartsThreshold = 2, PartsTotal = 4 }; var part = new WalletPart() { Signature = new WalletSignature(signature.GetShortNotation()), Data = "datadatadata" }; Assert.Throws <ArgumentException>(() => { var wallet = new Wallet(new List <WalletPart>() { part }); }, Strings.NotEnoughShares); }
public void Constructor_ValidSignatureAndPrivateKey_ValidReconstructedWallet() { var signature1 = new WalletSignature() { Version = 1, PartsThreshold = 2, PartsTotal = 4 }; var signature2 = new WalletSignature() { Version = 1, PartsThreshold = 2, PartsTotal = 4 }; var privateKey = "A private key"; var originalWallet = new Wallet(signature1, privateKey); var reconstructedWallet = new Wallet(originalWallet.Parts); Assert.That(reconstructedWallet.PrivateKey, Is.EqualTo(reconstructedWallet.PrivateKey)); }