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(false); 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); let ADMIN_ROLE = await git3.DEFAULT_ADMIN_ROLE(); let addrs = await git3.roleToMembers(ADMIN_ROLE); expect(addrs[0]).to.equal(singer.address); 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); let MANAGER_ROLE = await git3.MANAGER(); let m_addrs = await git3.roleToMembers(MANAGER_ROLE); expect(m_addrs[0]).to.equal(singer.address); expect(m_addrs[1]).to.equal(manager1.address); expect(m_addrs[2]).to.equal(manager2.address); 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); m_addrs = await git3.roleToMembers(MANAGER_ROLE); expect(m_addrs.length).to.equal(2); expect(m_addrs[0]).to.equal(singer.address); expect(m_addrs[1]).to.equal(manager1.address); // 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(true); 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(true); 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(true); 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) }) });