mirror of
https://github.com/bisq-network/bisq.git
synced 2025-02-24 15:10:44 +01:00
Use PersistenceManager
This commit is contained in:
parent
e0ea742a47
commit
e825613f5c
8 changed files with 45 additions and 69 deletions
|
@ -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);
|
||||
|
|
|
@ -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)
|
||||
);
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
|
|
|
@ -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);
|
||||
|
|
|
@ -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);
|
||||
|
|
|
@ -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);
|
||||
|
|
|
@ -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)),
|
||||
|
|
|
@ -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());
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
@ -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<>();
|
||||
}
|
||||
|
||||
|
|
Loading…
Add table
Reference in a new issue