From 31d1465d9e7555dd1aec59c0defac09b0ad7789e Mon Sep 17 00:00:00 2001 From: cyl19970726 <15258378443@163.com> Date: Wed, 22 Feb 2023 01:20:46 +0800 Subject: [PATCH] add test --- test/v3-hub-test.js | 232 ++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 232 insertions(+) create mode 100644 test/v3-hub-test.js diff --git a/test/v3-hub-test.js b/test/v3-hub-test.js new file mode 100644 index 0000000..ceb0711 --- /dev/null +++ b/test/v3-hub-test.js @@ -0,0 +1,232 @@ +const { web3 } = require("hardhat"); +const { expect } = require("chai"); +const { ethers } = require("hardhat"); +const { defaultAbiCoder } = require("ethers/lib/utils"); +const { isConstructorDeclaration } = require("typescript"); + +var ToBig = (x) => ethers.BigNumber.from(x); +let ETH = ethers.BigNumber.from(10).pow(18); + +describe("Hub V3 Test", function () { + + + it("Hub Access Control", async function () { + const hubfacFac = await ethers.getContractFactory("HubFactory"); + const hubFac = await hubfacFac.deploy(); + await hubFac.deployed(); + + await hubFac.newHubImp(); + + expect(await hubFac.createHub(true)).to.emit(hubFac,"CreateHub"); + let hub = await hubFac.hubs(0); + console.log(hub); + let git3 = await ethers.getContractAt("Hubv3",hub) + let [singer,manager1,manager2,con1,con2,repoCon1,repoCon2] = await ethers.getSigners(); + + + let [IsAdmin,IsManager,IsContributor] = await git3.memberRole(singer.address); + expect(IsAdmin).to.equal(true); + expect(IsManager).to.equal(true); + expect(IsContributor).to.equal(false); + + await git3.addManager(manager1.address) + await git3.addManager(manager2.address) + let roles = await git3.memberRole(manager1.address) + expect(roles[0]).to.equal(false); + expect(roles[1]).to.equal(true); + expect(roles[2]).to.equal(false); + + roles = await git3.memberRole(manager2.address) + expect(roles[0]).to.equal(false); + expect(roles[1]).to.equal(true); + expect(roles[2]).to.equal(false); + + await git3.removeManager(manager2.address) + roles = await git3.memberRole(manager2.address) + expect(roles[0]).to.equal(false); + expect(roles[1]).to.equal(false); + expect(roles[2]).to.equal(false); + + // power no enough + await expect( + git3.connect(manager2).addContributor(con1.address) + ).to.be.reverted + + + await git3.connect(manager1).addContributor(con1.address) + await git3.connect(manager1).addContributor(con2.address) + + roles = await git3.memberRole(con1.address) + expect(roles[0]).to.equal(false); + expect(roles[1]).to.equal(false); + expect(roles[2]).to.equal(true); + + roles = await git3.memberRole(con2.address) + expect(roles[0]).to.equal(false); + expect(roles[1]).to.equal(false); + expect(roles[2]).to.equal(true); + + await git3.connect(manager1).removeContributor(con2.address) + roles = await git3.memberRole(con2.address) + expect(roles[0]).to.equal(false); + expect(roles[1]).to.equal(false); + expect(roles[2]).to.equal(false); + + const repoName = "0x616263" + await git3.connect(con1).createRepo(repoName) + let repoOwner = await git3.connect(con1).repoOwner(repoName) + expect(repoOwner).to.equal(con1.address) + + await git3.connect(con1).addRepoContributor(repoName,repoCon1.address) + await git3.connect(con1).addRepoContributor(repoName,repoCon2.address) + let cons = await git3.connect(con1).repoContributors(repoName) + expect(cons[0]).to.equal(repoCon1.address) + expect(cons[1]).to.equal(repoCon2.address) + + const branchPath = "0x2244" + const branchRefHash = "0xaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa" + const branchRefHash1 = "0x111aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa" + const branchRefHash2 = "0x222aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa" + const emptyRefHash = "0x0000000000000000000000000000000000000000" + + const anotherBranchPath = "0x6644" + const anotherBranchRefHash = "0xffffaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa" + await expect( + git3.connect(singer).setRepoRef(repoName,branchPath,branchRefHash) + ).to.be.reverted + + await git3.connect(repoCon1).setRepoRef(repoName,branchPath,branchRefHash) + expect(await git3.getRepoRef(repoName,branchPath)).to.eq(branchRefHash) + + await git3.connect(repoCon1).setRepoRef(repoName,branchPath,branchRefHash1) + expect(await git3.getRepoRef(repoName,branchPath)).to.eq(branchRefHash1) + + await git3.connect(repoCon2).setRepoRef(repoName,branchPath,branchRefHash2) + expect(await git3.getRepoRef(repoName,branchPath)).to.eq(branchRefHash2) + + await git3.connect(repoCon1).delRepoRef(repoName,branchPath) + expect(await git3.getRepoRef(repoName,branchPath)).to.eq(emptyRefHash) + + await git3.connect(con1).setRepoRef(repoName,anotherBranchPath,anotherBranchRefHash) + expect(await git3.getRepoRef(repoName,anotherBranchPath)).to.eq(anotherBranchRefHash) + + let refs = await git3.listRepoRefs(repoName); + console.log(refs); + + }) + + + it("upload/download/remove", async function () { + const hubfacFac = await ethers.getContractFactory("HubFactory"); + const hubFac = await hubfacFac.deploy(); + await hubFac.deployed(); + + await hubFac.newHubImp(); + + expect(await hubFac.createHub(true)).to.emit(hubFac,"CreateHub"); + let hub = await hubFac.hubs(0); + console.log(hub); + let git3 = await ethers.getContractAt("Hubv3",hub) + + let singer; + [singer] = await ethers.getSigners(); + const repoName = Buffer.from("test"); + + await git3.createRepo(repoName); + + await git3.upload(repoName, "0x616263", "0x112233"); + expect(await git3.download(repoName, "0x616263")).to.eql([ + "0x112233", + true, + ]); + + let data = Array.from({ length: 40 }, () => + Math.floor(Math.random() * 256) + ); + + await git3.upload(repoName, "0x616263", data); + expect(await git3.download(repoName, "0x616263")).to.eql([ + ethers.utils.hexlify(data), + true, + ]); + + // expect(await git3.size(repoName, "0x616263")).to.eql([ToBig(40), ToBig(1)]); + + // await git3.remove(repoName, "0x616263"); + // expect(await git3.size(repoName, "0x616263")).to.eql([ToBig(0), ToBig(0)]); + }); + + it("set/update/list/remove Branch", async function () { + const hubfacFac = await ethers.getContractFactory("HubFactory"); + const hubFac = await hubfacFac.deploy(); + await hubFac.deployed(); + + await hubFac.newHubImp(); + + expect(await hubFac.createHub(true)).to.emit(hubFac,"CreateHub"); + let hub = await hubFac.hubs(0); + console.log(hub); + let git3 = await ethers.getContractAt("Hubv3",hub) + + let repoName = Buffer.from("test"); + await git3.createRepo(repoName); + + function concatHexStr(s1, s2) { + return "0x" + Buffer.concat([s1, Buffer.from("/"), s2]).toString("hex"); + } + + let key0 = Buffer.from("refs/heads/master"); + let data0 = "0xaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"; + await git3.setRepoRef(repoName, key0, data0); + + let key1 = Buffer.from("refs/heads/dev"); + let data1 = "0xbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb"; + await git3.setRepoRef(repoName, key1, data1); + + let key2 = Buffer.from("refs/heads/main"); + let data2 = "0xcccccccccccccccccccccccccccccccccccccccc"; + await git3.setRepoRef(repoName, key2, data2); + + let refs = await git3.listRepoRefs(repoName); + expect(refs[0]).to.eql([data0, concatHexStr(repoName, key0)]); + expect(refs[1]).to.eql([data1, concatHexStr(repoName, key1)]); + expect(refs[2]).to.eql([data2, concatHexStr(repoName, key2)]); + expect(refs.length).to.eql(3); + + // check delRef + await git3.delRepoRef(repoName, key0); + refs = await git3.listRepoRefs(repoName); + expect(refs[0]).to.eql([data2, concatHexStr(repoName, key2)]); + expect(refs[1]).to.eql([data1, concatHexStr(repoName, key1)]); + expect(refs.length).to.eql(2); + + await git3.delRepoRef(repoName, key1); + refs = await git3.listRepoRefs(repoName); + expect(refs[0]).to.eql([data2, concatHexStr(repoName, key2)]); + expect(refs.length).to.eql(1); + + // check update + let data3 = "0xdddddddddddddddddddddddddddddddddddddddd"; + await git3.setRepoRef(repoName, key2, data3); + refs = await git3.listRepoRefs(repoName); + expect(refs[0]).to.eql([data3, concatHexStr(repoName, key2)]); + }); + + it("HubFactory", async function () { + + + const hubfacFac = await ethers.getContractFactory("HubFactory"); + const hubFac = await hubfacFac.deploy(); + await hubFac.deployed(); + + await hubFac.newHubImp(); + + expect(await hubFac.createHub(true)).to.emit(hubFac,"CreateHub"); + let hub = await hubFac.hubs(0); + console.log(hub); + let git3 = await ethers.getContractAt("Hubv3",hub) + }) + + + +});