Exemplo n.º 1
0
        public void TestPutContainerSelect()
        {
            using var client = new Client.Client(key, host);
            // var replica = new Replica(2, ""); //not in policy
            var replica = new Replica(2, ""); // in policy with others
            // var replica = new Replica(1, ""); // test only one node put container size
            var policy    = new PlacementPolicy(1, new Replica[] { replica }, null, null);
            var container = new Container.Container
            {
                Version         = Refs.Version.SDKVersion(),
                OwnerId         = OwnerID.FromScriptHash(key.PublicKey().PublicKeyToScriptHash()),
                Nonce           = Guid.NewGuid().ToByteString(),
                BasicAcl        = BasicAcl.PublicBasicRule,
                PlacementPolicy = policy,
            };

            container.Attributes.Add(new Container.Container.Types.Attribute
            {
                Key   = "CreatedAt",
                Value = DateTime.UtcNow.ToString(),
            });
            using var source = new CancellationTokenSource();
            source.CancelAfter(TimeSpan.FromMinutes(1));
            var cid = client.PutContainer(container, context: source.Token).Result;

            Console.WriteLine(cid.String());
            Assert.AreEqual(container.CalCulateAndGetId, cid);
        }
Exemplo n.º 2
0
        public void TestPutContainerOnlyOne()
        {
            using var client = new Client.Client(key, host);
            var replica1  = new Replica(1, "loc1");
            var replica2  = new Replica(1, "loc2");
            var selector1 = new Selector("loc1", "Location", Clause.Same, 1, "loc1");
            var selector2 = new Selector("loc2", "Location", Clause.Same, 1, "loc2");
            var filter1   = new Filter("loc1", "Location", "Shanghai", Netmap.Operation.Eq);
            var filter2   = new Filter("loc2", "Location", "Shanghai", Netmap.Operation.Ne);
            var policy    = new PlacementPolicy(1, new Replica[] { replica1, replica2 }, new Selector[] { selector1, selector2 }, new Filter[] { filter1, filter2 });
            var container = new Container.Container
            {
                Version         = Refs.Version.SDKVersion(),
                OwnerId         = OwnerID.FromScriptHash(key.PublicKey().PublicKeyToScriptHash()),
                Nonce           = Guid.NewGuid().ToByteString(),
                BasicAcl        = BasicAcl.PublicBasicRule,
                PlacementPolicy = policy,
            };

            container.Attributes.Add(new Container.Container.Types.Attribute
            {
                Key   = "CreatedAt",
                Value = DateTime.UtcNow.ToString(),
            });
            using var source = new CancellationTokenSource();
            source.CancelAfter(TimeSpan.FromMinutes(1));
            var cid = client.PutContainer(container, context: source.Token).Result;

            Console.WriteLine(cid.String());
            Assert.AreEqual(container.CalCulateAndGetId, cid);
        }
Exemplo n.º 3
0
        public void TestPublicKey()
        {
            var key = "0203592a65bd5fb116a3381f1f29a125bac8658cd592d2a8dc9fed886c891f16c1".HexToBytes().LoadPublicKey();

            Assert.AreEqual("0203592a65bd5fb116a3381f1f29a125bac8658cd592d2a8dc9fed886c891f16c1", key.PublicKey().ToHexString());
            Assert.AreEqual("Nedo3Wtrx8fDjtYosjt7ZERHyR2EsgPtxK", key.PublicKey().PublicKeyToScriptHash().ToAddress(0x35));
            Assert.AreEqual("Nedo3Wtrx8fDjtYosjt7ZERHyR2EsgPtxK", OwnerID.FromScriptHash(key.PublicKey().PublicKeyToScriptHash()).ToAddress());
        }
Exemplo n.º 4
0
        public void TestOwnerIDToScriptHash()
        {
            var key        = "L4kWTNckyaWn2QdUrACCJR1qJNgFFGhTCy63ERk7ZK3NvBoXap6t".LoadWif();
            var scriptHash = key.PublicKey().PublicKeyToScriptHash();
            var owner      = OwnerID.FromScriptHash(scriptHash);

            Assert.AreEqual(scriptHash, owner.ToScriptHash());
        }
Exemplo n.º 5
0
        public void TestWif1()
        {
            var key     = "L4kWTNckyaWn2QdUrACCJR1qJNgFFGhTCy63ERk7ZK3NvBoXap6t".LoadWif();
            var address = key.PublicKey().PublicKeyToScriptHash().ToAddress(0x35);

            Assert.AreEqual("Nivku7mFnqdzVftRnUYHo5hD1oJT71yeZp", address);
            key = "L1pBKpw4tR6CogySzye3GUcVPz5pAeemXbyupoWUEVrtfstBfDiN".LoadWif();
            Assert.AreEqual("NgYMvdwCWMypHLqoZ6uqYutbeAAAgbSFcD", key.PublicKey().PublicKeyToScriptHash().ToAddress(0x35));
            Assert.AreEqual("NgYMvdwCWMypHLqoZ6uqYutbeAAAgbSFcD", OwnerID.FromScriptHash(key.PublicKey().PublicKeyToScriptHash()).ToAddress());
        }
Exemplo n.º 6
0
        public void TestSessionCreate()
        {
            using var client = new Client.Client(key, host);
            using var source = new CancellationTokenSource();
            source.CancelAfter(10000);
            var token = client.CreateSession(ulong.MaxValue, context: source.Token).Result;

            Assert.AreEqual(OwnerID.FromScriptHash(key.PublicKey().PublicKeyToScriptHash()), token.Body.OwnerId);
            Console.WriteLine($"id={token.Body.Id.ToUUID()}, key={token.Body.SessionKey.ToByteArray().ToHexString()}");
        }
Exemplo n.º 7
0
        public void TestListContainer()
        {
            using var client = new Client.Client(key, host);
            using var source = new CancellationTokenSource();
            source.CancelAfter(10000);
            var cids = client.ListContainers(OwnerID.FromScriptHash(key.PublicKey().PublicKeyToScriptHash()), context: source.Token).Result;

            Console.WriteLine(string.Join(", ", cids.Select(p => p.String())));
            Assert.AreEqual(1, cids.Count);
            Assert.AreEqual(cid.String(), cids[0].String());
        }
Exemplo n.º 8
0
        public void TestOwnerId()
        {
            var address = "NTfozM1xX7WDKD2LUE5yjtd8FMFYQJoy54";
            var ownerId = OwnerID.FromAddress(address);

            Assert.AreEqual(25, ownerId.Value.Length);
            var key = "Kwk6k2eC3L3QuPvD8aiaNyoSXgQ2YL1bwS5CP1oKoA9waeAze97s".LoadWif();

            ownerId = OwnerID.FromScriptHash(key.PublicKey().PublicKeyToScriptHash());
            Assert.AreEqual(25, ownerId.Value.Length);
            Assert.AreEqual(27, ownerId.ToByteArray().Length);
        }
Exemplo n.º 9
0
        public void TestContainerSerialize()
        {
            var key       = "Kwk6k2eC3L3QuPvD8aiaNyoSXgQ2YL1bwS5CP1oKoA9waeAze97s".LoadWif();
            var container = new Container.Container
            {
                Version = new Refs.Version
                {
                    Major = 1,
                    Minor = 2,
                },
                OwnerId         = OwnerID.FromScriptHash(key.PublicKey().PublicKeyToScriptHash()),
                Nonce           = ByteString.CopyFrom("1234".HexToBytes()),
                BasicAcl        = 0u,
                PlacementPolicy = new PlacementPolicy(1, null, null, null),
            };

            Assert.AreEqual("0a0408011002121b0a1935ce67af47d9157014c8db22dc18769be12b1b136a394ef1db1a02123432021001", container.ToByteArray().ToHexString());
        }
Exemplo n.º 10
0
        public async Task <SessionToken> CreateSession(ulong expiration, CallOptions options = null, CancellationToken context = default)
        {
            var opts = DefaultCallOptions.ApplyCustomOptions(options);

            CheckOptions(opts);
            var req = new CreateRequest
            {
                Body = new CreateRequest.Types.Body
                {
                    OwnerId    = OwnerID.FromScriptHash(opts.Key.PublicKey().PublicKeyToScriptHash()),
                    Expiration = expiration,
                }
            };

            req.MetaHeader = opts?.GetRequestMetaHeader() ?? RequestMetaHeader.Default;
            opts.Key.Sign(req);

            return(await CreateSession(req, opts.Deadline, context));
        }
Exemplo n.º 11
0
        public async Task <Accounting.Decimal> GetBalance(OwnerID owner = null, CallOptions options = null, CancellationToken context = default)
        {
            var opts = DefaultCallOptions.ApplyCustomOptions(options);

            CheckOptions(opts);
            if (owner is null)
            {
                owner = OwnerID.FromScriptHash(opts.Key.PublicKey().PublicKeyToScriptHash());
            }
            var req = new BalanceRequest
            {
                Body = new BalanceRequest.Types.Body
                {
                    OwnerId = owner,
                }
            };

            req.MetaHeader = opts.GetRequestMetaHeader();
            opts.Key.Sign(req);
            return(await GetBalance(req, opts.Deadline, context));
        }
Exemplo n.º 12
0
        public void TestObjectPutStream()
        {
            string path    = "objectputstream.data";
            var    rand    = new Random();
            var    payload = new byte[1024];

            rand.NextBytes(payload);
            var file = File.Create(path);

            file.Write(payload, 0, 1024);
            file.Flush();
            file.Seek(0, SeekOrigin.Begin);
            var obj = new FSObject
            {
                Header = new Header
                {
                    OwnerId     = OwnerID.FromScriptHash(key.PublicKey().PublicKeyToScriptHash()),
                    ContainerId = cid,
                },
            };

            obj.Attributes.Add(new Header.Types.Attribute
            {
                Key   = "category",
                Value = "test"
            });
            using var client = new Client.Client(key, host);
            using var source = new CancellationTokenSource();
            source.CancelAfter(TimeSpan.FromMinutes(10));
            var session = client.CreateSession(20).Result;
            var o       = client.PutObject(obj.Header, file, new CallOptions {
                Ttl = 1, Session = session
            }, source.Token).Result;

            Console.WriteLine(o.String());
            Assert.AreNotEqual("", o.String());
            File.Delete(path);
        }
Exemplo n.º 13
0
        public void TestObjectPutStorageGroup()
        {
            List <ObjectID> oids = new() { ObjectID.FromString("7Q7fPKESmRJ1VGHKcB2pB4JWVebsQzrJypwQiNLU1ekv"), ObjectID.FromString("HwfVt5i9ucjPUhRpHyxamnfTvhKtTUysCZWXcJ6YZsZ4") };

            using var client = new Client.Client(key, host);
            byte[] tzh  = null;
            ulong  size = 0;

            foreach (var oid in oids)
            {
                var address = new Address(cid, oid);
                using var source = new CancellationTokenSource();
                source.CancelAfter(TimeSpan.FromMinutes(1));
                var oo = client.GetObjectHeader(address, false, false, new CallOptions {
                    Ttl = 2
                }, source.Token).Result;
                if (tzh is null)
                {
                    tzh = oo.PayloadHomomorphicHash.Sum.ToByteArray();
                }
                else
                {
                    tzh = TzHash.Concat(new() { tzh, oo.PayloadHomomorphicHash.Sum.ToByteArray() });
                }
                size += oo.PayloadSize;
            }
            var epoch = client.Epoch().Result;

            StorageGroup.StorageGroup sg = new()
            {
                ValidationDataSize = size,
                ValidationHash     = new()
                {
                    Type = ChecksumType.Tz,
                    Sum  = ByteString.CopyFrom(tzh)
                },
                ExpirationEpoch = epoch + 100,
            };
            sg.Members.AddRange(oids);
            var obj = new FSObject
            {
                Header = new Header
                {
                    OwnerId     = OwnerID.FromScriptHash(key.PublicKey().PublicKeyToScriptHash()),
                    ContainerId = cid,
                    ObjectType  = ObjectType.StorageGroup,
                },
                Payload = ByteString.CopyFrom(sg.ToByteArray()),
            };

            using var source1 = new CancellationTokenSource();
            source1.CancelAfter(TimeSpan.FromMinutes(1));
            var session = client.CreateSession(ulong.MaxValue, context: source1.Token).Result;

            source1.Cancel();
            using var source2 = new CancellationTokenSource();
            source2.CancelAfter(TimeSpan.FromMinutes(1));
            var o = client.PutObject(obj, new CallOptions {
                Ttl = 2, Session = session
            }, source2.Token).Result;

            Console.WriteLine(o.String());
            Assert.AreNotEqual("", o.String());
        }