handle keystore default label deduping better, validate 1of1 wallets

This commit is contained in:
Craig Raw 2020-09-09 11:17:08 +02:00
parent 08c159ebad
commit 488752c142
2 changed files with 28 additions and 4 deletions

View file

@ -776,7 +776,7 @@ public class Wallet {
return false; return false;
} }
if(policyType.equals(PolicyType.MULTI) && (numSigs <= 1 || numSigs > keystores.size())) { if(policyType.equals(PolicyType.MULTI) && (numSigs < 1 || numSigs > keystores.size())) {
return false; return false;
} }
@ -819,9 +819,10 @@ public class Wallet {
private int makeLabelsUnique(Keystore newKeystore, boolean duplicateFound) { private int makeLabelsUnique(Keystore newKeystore, boolean duplicateFound) {
int max = 0; int max = 0;
for(Keystore keystore : getKeystores()) { for(Keystore keystore : getKeystores()) {
if(newKeystore != keystore && keystore.getLabel().startsWith(newKeystore.getLabel())) { String newKeystoreLabel = newKeystore.getLabel().equals(Keystore.DEFAULT_LABEL) ? Keystore.DEFAULT_LABEL.substring(0, Keystore.DEFAULT_LABEL.length() - 2) : newKeystore.getLabel();
if(newKeystore != keystore && keystore.getLabel().startsWith(newKeystoreLabel)) {
duplicateFound = true; duplicateFound = true;
String remainder = keystore.getLabel().substring(newKeystore.getLabel().length()); String remainder = keystore.getLabel().substring(newKeystoreLabel.length());
if(remainder.length() == 0) { if(remainder.length() == 0) {
max = makeLabelsUnique(keystore, true); max = makeLabelsUnique(keystore, true);
} else { } else {
@ -837,8 +838,12 @@ public class Wallet {
if(duplicateFound) { if(duplicateFound) {
max++; max++;
if(newKeystore.getLabel().equals(Keystore.DEFAULT_LABEL)) {
newKeystore.setLabel(Keystore.DEFAULT_LABEL.substring(0, Keystore.DEFAULT_LABEL.length() - 2) + " " + max);
} else {
newKeystore.setLabel(newKeystore.getLabel() + " " + max); newKeystore.setLabel(newKeystore.getLabel() + " " + max);
} }
}
return max; return max;
} }

View file

@ -66,6 +66,25 @@ public class WalletTest {
wallet.makeLabelsUnique(eekeystore2); wallet.makeLabelsUnique(eekeystore2);
Assert.assertEquals("Electrum 1", eekeystore.getLabel()); Assert.assertEquals("Electrum 1", eekeystore.getLabel());
Assert.assertEquals("Electrum 2", eekeystore2.getLabel()); Assert.assertEquals("Electrum 2", eekeystore2.getLabel());
Keystore defaultKeystore = new Keystore();
wallet.getKeystores().add(defaultKeystore);
Keystore defaultKeystore2 = new Keystore();
wallet.makeLabelsUnique(defaultKeystore2);
Assert.assertEquals("Keystore 2", defaultKeystore2.getLabel());
wallet.getKeystores().add(defaultKeystore2);
Keystore defaultKeystore3 = new Keystore();
wallet.makeLabelsUnique(defaultKeystore3);
Assert.assertEquals("Keystore 3", defaultKeystore3.getLabel());
wallet.getKeystores().add(defaultKeystore3);
Keystore defaultKeystore4 = new Keystore("Keystore");
wallet.makeLabelsUnique(defaultKeystore4);
Assert.assertEquals("Keystore 4", defaultKeystore4.getLabel());
wallet.getKeystores().add(defaultKeystore4);
Keystore defaultKeystore5 = new Keystore("Keystore 4");
wallet.makeLabelsUnique(defaultKeystore5);
Assert.assertEquals("Keystore 4 2", defaultKeystore5.getLabel());
wallet.getKeystores().add(defaultKeystore5);
} }
@Test @Test