Use PersistenceManager

This commit is contained in:
chimp1984 2020-10-01 19:56:01 -05:00
parent e0ea742a47
commit e825613f5c
No known key found for this signature in database
GPG key ID: 9801B4EC591F90E3
8 changed files with 45 additions and 69 deletions

View file

@ -6,7 +6,7 @@ import bisq.core.dao.governance.proposal.ProposalService;
import bisq.core.dao.governance.proposal.ProposalValidatorProvider;
import bisq.core.dao.governance.proposal.storage.appendonly.ProposalPayload;
import bisq.common.storage.Storage;
import bisq.common.persistence.PersistenceManager;
import javafx.collections.FXCollections;
import javafx.collections.ObservableList;
@ -30,7 +30,7 @@ public class BallotListServiceTest {
when(proposalService.getProposalPayloads()).thenReturn(payloads);
BallotListService service = new BallotListService(proposalService, mock(PeriodService.class),
mock(ProposalValidatorProvider.class), mock(Storage.class));
mock(ProposalValidatorProvider.class), mock(PersistenceManager.class));
BallotListChangeListener listener = mock(BallotListChangeListener.class);
service.addListener(listener);

View file

@ -7,7 +7,7 @@ import bisq.core.dao.state.DaoStateService;
import bisq.network.p2p.P2PService;
import bisq.common.crypto.PubKeyRing;
import bisq.common.storage.Storage;
import bisq.common.persistence.PersistenceManager;
import javafx.beans.property.SimpleIntegerProperty;
@ -21,12 +21,10 @@ public class MyProposalListServiceTest {
public void canInstantiate() {
P2PService p2PService = mock(P2PService.class);
when(p2PService.getNumConnectedPeers()).thenReturn(new SimpleIntegerProperty(0));
Storage storage = mock(Storage.class);
PersistenceManager persistenceManager = mock(PersistenceManager.class);
MyProposalListService service = new MyProposalListService(p2PService,
mock(DaoStateService.class),
mock(PeriodService.class), mock(WalletsManager.class), storage, mock(PubKeyRing.class)
mock(PeriodService.class), mock(WalletsManager.class), persistenceManager, mock(PubKeyRing.class)
);
}
}

View file

@ -6,7 +6,7 @@ import bisq.network.p2p.peers.PeerManager;
import bisq.common.file.CorruptedStorageFileHandler;
import bisq.common.handlers.ErrorMessageHandler;
import bisq.common.handlers.ResultHandler;
import bisq.common.storage.Storage;
import bisq.common.persistence.PersistenceManager;
import java.nio.file.Files;
@ -46,7 +46,7 @@ public class OpenOfferManagerTest {
null, null, null, offerBookService,
null, null, null,
null, null, null, null, null, null,
new Storage<>(storageDir, null, corruptedStorageFileHandler));
new PersistenceManager<>(storageDir, null, corruptedStorageFileHandler));
AtomicBoolean startEditOfferSuccessful = new AtomicBoolean(false);
@ -56,7 +56,7 @@ public class OpenOfferManagerTest {
return null;
}).when(offerBookService).deactivateOffer(any(OfferPayload.class), any(ResultHandler.class), any(ErrorMessageHandler.class));
final OpenOffer openOffer = new OpenOffer(make(btcUsdOffer), null);
final OpenOffer openOffer = new OpenOffer(make(btcUsdOffer));
ResultHandler resultHandler = () -> {
startEditOfferSuccessful.set(true);
@ -74,15 +74,13 @@ public class OpenOfferManagerTest {
public void testStartEditOfferForDeactivatedOffer() throws IOException {
P2PService p2PService = mock(P2PService.class);
OfferBookService offerBookService = mock(OfferBookService.class);
Storage storage = mock(Storage.class);
when(p2PService.getPeerManager()).thenReturn(mock(PeerManager.class));
final OpenOfferManager manager = new OpenOfferManager(null, null, null, p2PService,
null, null, null, offerBookService,
null, null, null,
null, null, null, null, null, null,
new Storage<>(storageDir, null, corruptedStorageFileHandler));
new PersistenceManager<>(storageDir, null, corruptedStorageFileHandler));
AtomicBoolean startEditOfferSuccessful = new AtomicBoolean(false);
@ -90,7 +88,7 @@ public class OpenOfferManagerTest {
startEditOfferSuccessful.set(true);
};
final OpenOffer openOffer = new OpenOffer(make(btcUsdOffer), storage);
final OpenOffer openOffer = new OpenOffer(make(btcUsdOffer));
openOffer.setState(OpenOffer.State.DEACTIVATED);
manager.editOpenOfferStart(openOffer, resultHandler, null);
@ -102,7 +100,6 @@ public class OpenOfferManagerTest {
public void testStartEditOfferForOfferThatIsCurrentlyEdited() {
P2PService p2PService = mock(P2PService.class);
OfferBookService offerBookService = mock(OfferBookService.class);
Storage storage = mock(Storage.class);
when(p2PService.getPeerManager()).thenReturn(mock(PeerManager.class));
@ -110,7 +107,7 @@ public class OpenOfferManagerTest {
null, null, null, offerBookService,
null, null, null,
null, null, null, null, null, null,
new Storage<>(storageDir, null, corruptedStorageFileHandler));
new PersistenceManager<>(storageDir, null, corruptedStorageFileHandler));
AtomicBoolean startEditOfferSuccessful = new AtomicBoolean(false);
@ -118,7 +115,7 @@ public class OpenOfferManagerTest {
startEditOfferSuccessful.set(true);
};
final OpenOffer openOffer = new OpenOffer(make(btcUsdOffer), storage);
final OpenOffer openOffer = new OpenOffer(make(btcUsdOffer));
openOffer.setState(OpenOffer.State.DEACTIVATED);
manager.editOpenOfferStart(openOffer, resultHandler, null);

View file

@ -21,18 +21,9 @@ import bisq.core.offer.Offer;
import bisq.core.offer.OfferPayload;
import bisq.core.offer.OpenOffer;
import bisq.common.file.CorruptedStorageFileHandler;
import bisq.common.storage.Storage;
import java.nio.file.Files;
import java.io.File;
import java.io.IOException;
import org.junit.Test;
import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertTrue;
import static org.mockito.Mockito.RETURNS_DEEP_STUBS;
import static org.mockito.Mockito.mock;
import static protobuf.PersistableEnvelope.MessageCase.TRADABLE_LIST;
@ -40,18 +31,15 @@ import static protobuf.PersistableEnvelope.MessageCase.TRADABLE_LIST;
public class TradableListTest {
@Test
public void protoTesting() throws IOException {
public void protoTesting() {
OfferPayload offerPayload = mock(OfferPayload.class, RETURNS_DEEP_STUBS);
File storageDir = Files.createTempDirectory("storage").toFile();
Storage<TradableList<OpenOffer>> storage = new Storage<>(storageDir, null, mock(CorruptedStorageFileHandler.class));
TradableList<OpenOffer> openOfferTradableList = new TradableList<>(storage, "filename");
TradableList<OpenOffer> openOfferTradableList = new TradableList<>();
protobuf.PersistableEnvelope message = (protobuf.PersistableEnvelope) openOfferTradableList.toProtoMessage();
assertTrue(message.getMessageCase().equals(TRADABLE_LIST));
assertEquals(message.getMessageCase(), TRADABLE_LIST);
// test adding an OpenOffer and convert toProto
Offer offer = new Offer(offerPayload);
OpenOffer openOffer = new OpenOffer(offer, storage);
//openOfferTradableList = new TradableList<OpenOffer>(storage,Lists.newArrayList(openOffer));
OpenOffer openOffer = new OpenOffer(offer);
openOfferTradableList.add(openOffer);
message = (protobuf.PersistableEnvelope) openOfferTradableList.toProtoMessage();
assertEquals(message.getMessageCase(), TRADABLE_LIST);

View file

@ -26,7 +26,7 @@ import bisq.core.locale.GlobalSettings;
import bisq.core.locale.Res;
import bisq.common.config.Config;
import bisq.common.storage.Storage;
import bisq.common.persistence.PersistenceManager;
import javafx.collections.ObservableList;
@ -40,7 +40,6 @@ import org.junit.Test;
import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertTrue;
import static org.mockito.ArgumentMatchers.anyLong;
import static org.mockito.ArgumentMatchers.anyString;
import static org.mockito.Mockito.mock;
import static org.mockito.Mockito.when;
@ -48,7 +47,7 @@ import static org.mockito.Mockito.when;
public class PreferencesTest {
private Preferences preferences;
private Storage storage;
private PersistenceManager persistenceManager;
@Before
public void setUp() {
@ -58,11 +57,11 @@ public class PreferencesTest {
Res.setBaseCurrencyCode("BTC");
Res.setBaseCurrencyName("Bitcoin");
storage = mock(Storage.class);
persistenceManager = mock(PersistenceManager.class);
Config config = new Config();
LocalBitcoinNode localBitcoinNode = new LocalBitcoinNode(config);
preferences = new Preferences(
storage, config, localBitcoinNode, null, null, Config.DEFAULT_FULL_DAO_NODE,
persistenceManager, config, localBitcoinNode, null, null, Config.DEFAULT_FULL_DAO_NODE,
null, null, Config.UNSPECIFIED_PORT);
}
@ -89,7 +88,7 @@ public class PreferencesTest {
final FiatCurrency usd = new FiatCurrency("USD");
fiatCurrencies.add(usd);
when(storage.initAndGetPersistedWithFileName(anyString(), anyLong())).thenReturn(payload);
when(persistenceManager.getPersisted(anyString())).thenReturn(payload);
when(payload.getUserLanguage()).thenReturn("en");
when(payload.getUserCountry()).thenReturn(CountryUtil.getDefaultCountry());
when(payload.getPreferredTradeCurrency()).thenReturn(usd);
@ -110,7 +109,7 @@ public class PreferencesTest {
final CryptoCurrency dash = new CryptoCurrency("DASH", "Dash");
cryptoCurrencies.add(dash);
when(storage.initAndGetPersistedWithFileName(anyString(), anyLong())).thenReturn(payload);
when(persistenceManager.getPersisted(anyString())).thenReturn(payload);
when(payload.getUserLanguage()).thenReturn("en");
when(payload.getUserCountry()).thenReturn(CountryUtil.getDefaultCountry());
when(payload.getPreferredTradeCurrency()).thenReturn(new FiatCurrency("USD"));
@ -131,7 +130,7 @@ public class PreferencesTest {
assertEquals("US-Dollar (USD)", usd.getNameAndCode());
when(storage.initAndGetPersistedWithFileName(anyString(), anyLong())).thenReturn(payload);
when(persistenceManager.getPersisted(anyString())).thenReturn(payload);
when(payload.getUserLanguage()).thenReturn("en");
when(payload.getUserCountry()).thenReturn(CountryUtil.getDefaultCountry());
when(payload.getPreferredTradeCurrency()).thenReturn(usd);

View file

@ -21,7 +21,7 @@ import bisq.core.btc.nodes.LocalBitcoinNode;
import bisq.core.user.Preferences;
import bisq.common.config.Config;
import bisq.common.storage.Storage;
import bisq.common.persistence.PersistenceManager;
import com.natpryce.makeiteasy.Instantiator;
import com.natpryce.makeiteasy.Property;
@ -32,14 +32,14 @@ import static com.natpryce.makeiteasy.MakeItEasy.make;
public class PreferenceMakers {
public static final Property<bisq.core.user.Preferences, Storage> storage = new Property<>();
public static final Property<Preferences, PersistenceManager> storage = new Property<>();
public static final Property<Preferences, Config> config = new Property<>();
public static final Property<Preferences, LocalBitcoinNode> localBitcoinNode = new Property<>();
public static final Property<Preferences, String> useTorFlagFromOptions = new Property<>();
public static final Property<Preferences, String> referralID = new Property<>();
public static final Instantiator<Preferences> Preferences = lookup -> new Preferences(
lookup.valueOf(storage, new SameValueDonor<Storage>(null)),
lookup.valueOf(storage, new SameValueDonor<PersistenceManager>(null)),
lookup.valueOf(config, new SameValueDonor<Config>(null)),
lookup.valueOf(localBitcoinNode, new SameValueDonor<LocalBitcoinNode>(null)),
lookup.valueOf(useTorFlagFromOptions, new SameValueDonor<String>(null)),

View file

@ -39,8 +39,8 @@ import bisq.network.p2p.storage.persistence.ResourceDataStoreService;
import bisq.network.p2p.storage.persistence.SequenceNumberMap;
import bisq.common.crypto.Sig;
import bisq.common.persistence.PersistenceManager;
import bisq.common.proto.persistable.PersistablePayload;
import bisq.common.storage.Storage;
import java.security.PublicKey;
@ -69,13 +69,13 @@ public class TestState {
final AppendOnlyDataStoreListener appendOnlyDataStoreListener;
private final HashMapChangedListener hashMapChangedListener;
private final Storage<SequenceNumberMap> mockSeqNrStorage;
private final PersistenceManager<SequenceNumberMap> mockSeqNrPersistenceManager;
private final ProtectedDataStoreService protectedDataStoreService;
final ClockFake clockFake;
TestState() {
this.mockBroadcaster = mock(Broadcaster.class);
this.mockSeqNrStorage = mock(Storage.class);
this.mockSeqNrPersistenceManager = mock(PersistenceManager.class);
this.clockFake = new ClockFake();
this.protectedDataStoreService = new ProtectedDataStoreService();
@ -83,7 +83,9 @@ public class TestState {
this.mockBroadcaster,
new AppendOnlyDataStoreServiceFake(),
this.protectedDataStoreService, mock(ResourceDataStoreService.class),
this.mockSeqNrStorage, this.clockFake, MAX_SEQUENCE_NUMBER_MAP_SIZE_BEFORE_PURGE);
this.mockSeqNrPersistenceManager,
this.clockFake,
MAX_SEQUENCE_NUMBER_MAP_SIZE_BEFORE_PURGE);
this.appendOnlyDataStoreListener = mock(AppendOnlyDataStoreListener.class);
this.hashMapChangedListener = mock(HashMapChangedListener.class);
@ -92,10 +94,13 @@ public class TestState {
this.mockedStorage = createP2PDataStorageForTest(
this.mockBroadcaster,
this.protectedDataStoreService,
this.mockSeqNrStorage,
this.mockSeqNrPersistenceManager,
this.clockFake,
this.hashMapChangedListener,
this.appendOnlyDataStoreListener);
when(this.mockSeqNrPersistenceManager.getPersisted())
.thenReturn(this.mockedStorage.sequenceNumberMap);
}
@ -105,22 +110,22 @@ public class TestState {
* not running the entire storage code paths.
*/
void simulateRestart() {
when(this.mockSeqNrStorage.initAndGetPersisted(any(SequenceNumberMap.class), anyLong()))
.thenReturn(this.mockedStorage.sequenceNumberMap);
this.mockedStorage = createP2PDataStorageForTest(
this.mockBroadcaster,
this.protectedDataStoreService,
this.mockSeqNrStorage,
this.mockSeqNrPersistenceManager,
this.clockFake,
this.hashMapChangedListener,
this.appendOnlyDataStoreListener);
when(this.mockSeqNrPersistenceManager.getPersisted())
.thenReturn(this.mockedStorage.sequenceNumberMap);
}
private static P2PDataStorage createP2PDataStorageForTest(
Broadcaster broadcaster,
ProtectedDataStoreService protectedDataStoreService,
Storage<SequenceNumberMap> sequenceNrMapStorage,
PersistenceManager<SequenceNumberMap> sequenceNrMapPersistenceManager,
ClockFake clock,
HashMapChangedListener hashMapChangedListener,
AppendOnlyDataStoreListener appendOnlyDataStoreListener) {
@ -129,7 +134,7 @@ public class TestState {
broadcaster,
new AppendOnlyDataStoreServiceFake(),
protectedDataStoreService, mock(ResourceDataStoreService.class),
sequenceNrMapStorage, clock, MAX_SEQUENCE_NUMBER_MAP_SIZE_BEFORE_PURGE);
sequenceNrMapPersistenceManager, clock, MAX_SEQUENCE_NUMBER_MAP_SIZE_BEFORE_PURGE);
// Currently TestState only supports reading ProtectedStorageEntries off disk.
p2PDataStorage.readFromResources("unused");
@ -145,7 +150,6 @@ public class TestState {
reset(this.mockBroadcaster);
reset(this.appendOnlyDataStoreListener);
reset(this.hashMapChangedListener);
reset(this.mockSeqNrStorage);
}
void incrementClock() {
@ -160,11 +164,7 @@ public class TestState {
* Common test helpers that verify the correct events were signaled based on the test expectation and before/after states.
*/
private void verifySequenceNumberMapWriteContains(P2PDataStorage.ByteArray payloadHash, int sequenceNumber) {
final ArgumentCaptor<SequenceNumberMap> captor = ArgumentCaptor.forClass(SequenceNumberMap.class);
verify(this.mockSeqNrStorage).queueUpForSave(captor.capture(), anyLong());
SequenceNumberMap savedMap = captor.getValue();
Assert.assertEquals(sequenceNumber, savedMap.get(payloadHash).sequenceNr);
Assert.assertEquals(sequenceNumber, mockSeqNrPersistenceManager.getPersisted().get(payloadHash).sequenceNr);
}
void verifyPersistableAdd(SavedTestState beforeState,
@ -231,8 +231,6 @@ public class TestState {
if (expectedSequenceNrMapWrite) {
this.verifySequenceNumberMapWriteContains(P2PDataStorage.get32ByteHashAsByteArray(protectedStorageEntry.getProtectedStoragePayload()), protectedStorageEntry.getSequenceNumber());
} else {
verify(this.mockSeqNrStorage, never()).queueUpForSave(any(SequenceNumberMap.class), anyLong());
}
}
@ -272,9 +270,6 @@ public class TestState {
verify(this.hashMapChangedListener, never()).onRemoved(any());
}
if (!expectedSeqNrWrite)
verify(this.mockSeqNrStorage, never()).queueUpForSave(any(SequenceNumberMap.class), anyLong());
if (!expectedBroadcast)
verify(this.mockBroadcaster, never()).broadcast(any(BroadcastMessage.class), nullable(NodeAddress.class));
@ -338,7 +333,6 @@ public class TestState {
}
verify(this.mockBroadcaster, never()).broadcast(any(BroadcastMessage.class), nullable(NodeAddress.class));
verify(this.mockSeqNrStorage, never()).queueUpForSave(any(SequenceNumberMap.class), anyLong());
}
}

View file

@ -21,9 +21,9 @@ import bisq.network.p2p.storage.P2PDataStorage;
import bisq.network.p2p.storage.payload.ProtectedStorageEntry;
import bisq.network.p2p.storage.persistence.MapStoreService;
import bisq.common.persistence.PersistenceManager;
import bisq.common.proto.persistable.PersistableEnvelope;
import bisq.common.proto.persistable.PersistablePayload;
import bisq.common.storage.Storage;
import java.io.File;
@ -45,7 +45,7 @@ public class MapStoreServiceFake extends MapStoreService {
private final Map<P2PDataStorage.ByteArray, ProtectedStorageEntry> map;
public MapStoreServiceFake() {
super(mock(File.class), mock(Storage.class));
super(mock(File.class), mock(PersistenceManager.class));
this.map = new HashMap<>();
}