Exemple #1
0
        public void SmartTransactionHashSetTest()
        {
            var tracker = new Tracker(Network.Main);
            var tx1     = new Transaction(
                "0100000003192a9e09a4eb4829dd92e437d50a6d544626a0c0a4345fe85754cf0b509c56da090000006a47304402205ae8feded01cff3dafa698481a0e941a5059b9de234e794335493f863da6b8b702207645e57ec428b553e57e30115eaa3eb8828069e7933e09e4c867d086de2d67290121022f4cae09039d26ee9481ac235d0c74a1c1cdb1780acbb4300ce5a14d2c7a69e0ffffffff05d2352f130dac517aba5e6fdf966d915b15fbf8c674a9809d7706fd9bc2c545290000006a4730440220771193a38f8e05e59dc8233b46e181c9a75808c0ec1efeeedfebe5c7018d2c1f02206c32485d4fab65d47d7d4392d937128af44e918bd0fdded4d0b82b0a9d316dcc0121028fc5d9cd68ba58123ff972bb73682019cd1ee395f92c0b72e73ebc7151e3fe43ffffffff1cb828c3dcb9abbf77d63dbc9a050c70a05c5d0f2988da89811803f7dee4f090050000006b483045022100e32f6195c4437c4a3f0de88157989830c6c0effcecd093324b2dd33b81b9743902203e9bf7f36dc0a879de165c96b137ca163c3506fc5ac9db377650632e1e922e4f01210358e1623b2ffdf9b0bc135026a5e8fdd1625f61424937b7c1cb6e47af1f06bd0affffffff026ba91a00000000001976a914cc17bf00ffba667e4f8ff425500b83f3a863922788acf60b0300000000001976a914f73f6ea0a99cbcc985a0dae57b9938e0dfc245c088ac00000000");
            var tx2 =
                new Transaction(
                    "0100000001c3dd09422c44e8cab3065aac65f1cc7befce2a0ea5d309d8d213ec08877dbd4b000000006a473044022001ab7769a0d735bbe4756260c30ab8127f4282cdd00b66991ca6bfc383b5005c02203d29981127717946bf05fc15177f3042aa0b995db786a868de4cc67bfd88801d0121037df55814a04730433b1ee3bcc8f089eef346e556d222b13f1a57a355fd8d07f6ffffffff0120300500000000001976a914f55586866f28d6db41529b8bd85db09e88221a1388ac00000000");

            Assert.True(tracker.TrackedTransactions.TryAdd(new SmartTransaction(tx1, new Height(1))));
            Assert.True(tracker.TrackedTransactions.TryAdd(new SmartTransaction(tx2, new Height(1))));
            Assert.False(tracker.TrackedTransactions.TryAdd(new SmartTransaction(tx2, new Height(1))));

            HashSet <SmartTransaction> stx = new HashSet <SmartTransaction>();

            Assert.True(stx.Add(new SmartTransaction(tx1, new Height(1))));
            Assert.True(stx.Add(new SmartTransaction(tx2, new Height(2))));
            Assert.False(stx.Add(new SmartTransaction(tx2, new Height(3))));

            ConcurrentHashSet <SmartTransaction> stxchs = new ConcurrentHashSet <SmartTransaction>();

            Assert.True(stxchs.Add(new SmartTransaction(tx1, new Height(1))));
            Assert.True(stxchs.Add(new SmartTransaction(tx2, new Height(2))));
            Assert.False(stxchs.Add(new SmartTransaction(tx2, new Height(3))));

            ConcurrentObservableHashSet <SmartTransaction> stxcohs = new ConcurrentObservableHashSet <SmartTransaction>();

            Assert.True(stxcohs.TryAdd(new SmartTransaction(tx1, new Height(1))));
            Assert.True(stxcohs.TryAdd(new SmartTransaction(tx2, new Height(2))));
            Assert.False(stxcohs.TryAdd(new SmartTransaction(tx2, new Height(3))));
        }
        public void Test_ConcurrentObservableHashSet_RemoveRange_IEnumerable()
        {
            var initial     = Enumerable.Range(0, 100);
            var startIndex  = 50;
            var removeCount = 40;
            var toRemove    = initial.Skip(startIndex).Take(removeCount).ToList();
            var collection  = new ConcurrentObservableHashSet <int>();

            collection.AddRange(initial);
            Assert.AreEqual(100, collection.Count);

            // Record all the collection changed events
            List <(object, NotifyCollectionChangedEventArgs)> returnedList = new List <(object, NotifyCollectionChangedEventArgs)>();

            collection.CollectionChanged += (s, e) => returnedList.Add((s, e));

            collection.RemoveRange(toRemove);

            // Check just one collection changed event was fired
            Assert.AreEqual(1, returnedList.Count);
            (var returnedObject, var returnedArgs) = returnedList[0];

            Assert.IsNotNull(returnedObject);
            Assert.IsNotNull(returnedArgs);

            Assert.AreEqual(returnedObject, collection);
            Assert.AreEqual(NotifyCollectionChangedAction.Remove, returnedArgs.Action);
            // Removed by values so index not relevant, should be -1
            Assert.AreEqual(-1, returnedArgs.OldStartingIndex);
            Assert.IsNull(returnedArgs.NewItems);
            Assert.IsNotNull(returnedArgs.OldItems);
            Assert.AreEqual(removeCount, returnedArgs.OldItems.Count);
            Assert.IsTrue(CollectionsAreEqual(toRemove, returnedArgs.OldItems));
        }
        public void Test_ConcurrentObservableHashSet_Clear()
        {
            var initial    = Enumerable.Range(0, 100).ToList();
            var collection = new ConcurrentObservableHashSet <int>();

            collection.AddRange(initial);
            Assert.AreEqual(100, collection.Count);

            // Record all the collection changed events
            List <(object, NotifyCollectionChangedEventArgs)> returnedList = new List <(object, NotifyCollectionChangedEventArgs)>();

            collection.CollectionChanged += (s, e) => returnedList.Add((s, e));

            collection.Clear();

            // Check just one collection changed event was fired
            Assert.AreEqual(1, returnedList.Count);
            (var returnedObject, var returnedArgs) = returnedList[0];

            Assert.IsNotNull(returnedObject);
            Assert.IsNotNull(returnedArgs);

            Assert.AreEqual(0, collection.Count);

            Assert.AreEqual(returnedObject, collection);
            Assert.AreEqual(NotifyCollectionChangedAction.Remove, returnedArgs.Action);

            Assert.IsNull(returnedArgs.NewItems);

            Assert.IsNotNull(returnedArgs.OldItems);
            Assert.AreEqual(initial.Count(), returnedArgs.OldItems.Count);
            Assert.IsTrue(CollectionsAreEqual(initial, returnedArgs.OldItems));
        }
Exemple #4
0
        public void ConcurrentObservableHashSetSerializationTest()
        {
            var serializer = new BinaryFormatter();
            var stream     = new MemoryStream();
            var collection = new ConcurrentObservableHashSet <string>();

            for (int i = 0; i < 10; i++)
            {
                collection.Add("TestItem" + (i + 1).ToString());
            }
            serializer.Serialize(stream, collection);
            stream.Position = 0;
            collection      = serializer.Deserialize(stream) as ConcurrentObservableHashSet <string>;
            Assert.AreEqual(10, collection.Count);
            for (int i = 0; i < 10; i++)
            {
                Assert.IsTrue(collection.Contains("TestItem" + (i + 1).ToString()));
            }
        }
Exemple #5
0
        public void ConcurrentObservableHashSetTest()
        {
            ConcurrentObservableHashSet <string> hashSet = new ConcurrentObservableHashSet <string>();
            var times = 0;

            hashSet.CollectionChanged += delegate
            {
                times++;
            };

            hashSet.Clear();             // no fire
            hashSet.TryAdd("foo");       // fire
            hashSet.TryAdd("foo");       // no fire
            hashSet.TryAdd("moo");       // fire
            hashSet.TryRemove("foo");    // fire
            hashSet.Clear();             // fire

            Assert.Equal(4, times);
        }
        public WalletService(KeyManager keyManager, IndexDownloader indexDownloader, CcjClient chaumianClient, MemPoolService memPool, NodesGroup nodes, string blocksFolderPath)
        {
            KeyManager      = Guard.NotNull(nameof(keyManager), keyManager);
            Nodes           = Guard.NotNull(nameof(nodes), nodes);
            IndexDownloader = Guard.NotNull(nameof(indexDownloader), indexDownloader);
            ChaumianClient  = Guard.NotNull(nameof(chaumianClient), chaumianClient);
            MemPool         = Guard.NotNull(nameof(memPool), memPool);

            WalletBlocks      = new SortedDictionary <Height, uint256>();
            ProcessedBlocks   = new HashSet <uint256>();
            WalletBlocksLock  = new AsyncLock();
            HandleFiltersLock = new AsyncLock();

            Coins = new ConcurrentObservableHashSet <SmartCoin>();

            BlocksFolderPath  = Guard.NotNullOrEmptyOrWhitespace(nameof(blocksFolderPath), blocksFolderPath, trim: true);
            BlockFolderLock   = new AsyncLock();
            BlockDownloadLock = new AsyncLock();

            AssertCleanKeysIndexed(21);

            _running = 0;

            if (Directory.Exists(BlocksFolderPath))
            {
                if (IndexDownloader.Network == Network.RegTest)
                {
                    Directory.Delete(BlocksFolderPath, true);
                    Directory.CreateDirectory(BlocksFolderPath);
                }
            }
            else
            {
                Directory.CreateDirectory(BlocksFolderPath);
            }

            IndexDownloader.NewFilter   += IndexDownloader_NewFilterAsync;
            IndexDownloader.Reorged     += IndexDownloader_ReorgedAsync;
            MemPool.TransactionReceived += MemPool_TransactionReceived;
        }
Exemple #7
0
        public void ConcurrentObservableHashSetTest()
        {
            ConcurrentObservableHashSet <string> hashSet = new ConcurrentObservableHashSet <string>();

            _times = 0;
            hashSet.CollectionChanged += HashSet_CollectionChanged;

            try
            {
                hashSet.Clear();          // no fire
                hashSet.TryAdd("foo");    // fire
                hashSet.TryAdd("foo");    // no fire
                hashSet.TryAdd("moo");    // fire
                hashSet.TryRemove("foo"); // fire
                hashSet.Clear();          // fire

                Assert.Equal(4, _times);
            }
            finally
            {
                hashSet.CollectionChanged -= HashSet_CollectionChanged;
            }
        }