Compare commits
	
		
			23 Commits
		
	
	
		
			main
			...
			murali/tes
		
	
	| Author | SHA1 | Date | |
|---|---|---|---|
|  | 58c6d0ff06 | ||
|  | ddbd0826bd | ||
|  | dfbef9fe65 | ||
|  | cf978e4490 | ||
|  | 59c709debd | ||
|  | 679313d960 | ||
|  | 9a45237b2d | ||
|  | 85411f3b06 | ||
|  | 2cc5ae6245 | ||
|  | b76f52013b | ||
|  | c3fa657687 | ||
|  | 2ceb7d8483 | ||
|  | b7a8e7c234 | ||
|  | a2237f3559 | ||
|  | 30861621cf | ||
|  | 85f350dea9 | ||
|  | 277744e52b | ||
|  | 772eca8c85 | ||
|  | d1e1a00cf4 | ||
|  | 5f92f288c2 | ||
|  | 65c4c12891 | ||
|  | 6c35fc1980 | ||
|  | 84df789ccd | 
							
								
								
									
										8
									
								
								.github/workflows/test.yml
									
									
									
									
										vendored
									
									
								
							
							
						
						
									
										8
									
								
								.github/workflows/test.yml
									
									
									
									
										vendored
									
									
								
							| @ -21,7 +21,7 @@ jobs: | ||||
|       - name: Environment | ||||
|         run: ls -tlh && env | ||||
|       - name: build registry-cli container | ||||
|         run: docker build -t cerc/laconic-registry-cli:local-test --build-arg CERC_NPM_URL=https://git.vdb.to/api/packages/cerc-io/npm/ --build-arg CERC_NPM_AUTH_TOKEN="${{ secrets.GITEA_PUBLISH_TOKEN }}" . | ||||
|         run: docker build -t cerc/laconic-registry-cli:local-test --build-arg CERC_NPM_URL=https://git.vdb.to/api/packages/cerc-io/npm/ --build-arg CERC_NPM_AUTH_TOKEN=${{ secrets.GITEA_PUBLISH_TOKEN }} . | ||||
|       - name: build containers scripts | ||||
|         working-directory: laconicd/tests/sdk_tests | ||||
|         run: ./build-laconicd-container.sh | ||||
| @ -30,7 +30,11 @@ jobs: | ||||
|         run: docker compose up laconicd -d | ||||
| 
 | ||||
|       - name: Run registry-cli demo commands in registry-cli container | ||||
|         run : ls -tla | ||||
|         run : | | ||||
|           laconicd_key=$( docker compose exec laconicd echo y | docker compose exec laconicd laconicd keys export mykey --unarmored-hex --unsafe ) | ||||
|           ./create-config.sh $laconicd_key | ||||
|           echo ./config.yml | ||||
|           ls -tla | ||||
|       - name: stop containers | ||||
|         working-directory: laconicd/tests/sdk_tests | ||||
|         run: docker compose down | ||||
|  | ||||
							
								
								
									
										50
									
								
								README.md
									
									
									
									
									
								
							
							
						
						
									
										50
									
								
								README.md
									
									
									
									
									
								
							| @ -514,3 +514,53 @@ Reassociate records (switch bond): | ||||
| ```bash | ||||
| $ laconic cns bond records reassociate --old-bond-id 5c40abd336ae1561f2a1b55be73b12f5a083080bf879b4c9288d182d238badb0 --new-bond-id 3e11c61f179897e4b12e9b63de35d36f88ac146755e7a28ce0bcdd07cf3a03ae | ||||
| ``` | ||||
| 
 | ||||
| ## Run tests | ||||
| 
 | ||||
| Follow these steps to run the tests: | ||||
| 
 | ||||
| - After cloning this repo run: | ||||
| 
 | ||||
|   ```bash | ||||
|   yarn | ||||
|   ``` | ||||
| 
 | ||||
| - Copy [config.example.yml](./config.example.yml) file and create a `config.yml` file. | ||||
| 
 | ||||
| - Clone the [laconicd repo](https://github.com/cerc-io/laconicd) and change to repo directory. | ||||
| 
 | ||||
| - Run the chain using `./init.sh`. | ||||
| 
 | ||||
| - Export the private key using: | ||||
| 
 | ||||
|   ```bash | ||||
|   laconicd keys export mykey --unarmored-hex --unsafe | ||||
|   ``` | ||||
| 
 | ||||
| - Copy the private key and assign it to variable `PRIVATE_KEY` in the `config.yml` file. | ||||
| 
 | ||||
| - Run the tests in laconic-sdk repo: | ||||
| 
 | ||||
|   ```bash | ||||
|   yarn test | ||||
|   ``` | ||||
| 
 | ||||
| - Run the tests with auctions enabled | ||||
| 
 | ||||
|   - In laconicd repo run: | ||||
| 
 | ||||
|     ```bash | ||||
|     TEST_AUCTION_ENABLED=true ./init.sh | ||||
|     ``` | ||||
| 
 | ||||
|   - Export the private key and change it in `config.yml` file again using: | ||||
| 
 | ||||
|     ```bash | ||||
|     laconicd keys export mykey --unarmored-hex --unsafe | ||||
|     ``` | ||||
| 
 | ||||
|   - Run tests: | ||||
| 
 | ||||
|     ```bash | ||||
|     yarn test:auctions | ||||
|     ``` | ||||
							
								
								
									
										30
									
								
								create-config.sh
									
									
									
									
									
										Executable file
									
								
							
							
						
						
									
										30
									
								
								create-config.sh
									
									
									
									
									
										Executable file
									
								
							| @ -0,0 +1,30 @@ | ||||
| #!/usr/bin/env bash | ||||
| 
 | ||||
| if [[ $# -ne 1 ]]; then | ||||
|   echo "Usage: $0 <new-key>" | ||||
|   exit 1 | ||||
| fi | ||||
| 
 | ||||
| # Assign the arguments to variables | ||||
| new_key=$1 | ||||
| file_path=./config.yml | ||||
| 
 | ||||
| # Check if the file exists | ||||
| if [[ ! -f "$file_path" ]]; then | ||||
|   echo "Creating file: $file_path" | ||||
|   # Create the YAML file | ||||
| cat > $file_path <<EOF | ||||
| services: | ||||
|   cns: | ||||
|     restEndpoint: 'http://localhost:1317' | ||||
|     gqlEndpoint: 'http://localhost:9473/api' | ||||
|     userKey: $new_key | ||||
|     bondId: | ||||
|     chainId: laconic_9000-1 | ||||
|     gas: 300000 | ||||
|     fees: 300000aphoton | ||||
| EOF | ||||
| else | ||||
|   # Use yq to update the value in the file | ||||
|   yq eval ".services.cns.userKey = \"$new_key\"" "$file_path" --inplace | ||||
| fi | ||||
							
								
								
									
										5
									
								
								jest.config.js
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										5
									
								
								jest.config.js
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,5 @@ | ||||
| /** @type {import('ts-jest').JestConfigWithTsJest} */ | ||||
| module.exports = { | ||||
|   preset: 'ts-jest', | ||||
|   testEnvironment: 'node', | ||||
| }; | ||||
							
								
								
									
										10
									
								
								package.json
									
									
									
									
									
								
							
							
						
						
									
										10
									
								
								package.json
									
									
									
									
									
								
							| @ -7,15 +7,19 @@ | ||||
|   "license": "UNLICENSED", | ||||
|   "devDependencies": { | ||||
|     "@types/fs-extra": "^9.0.13", | ||||
|     "@types/jest": "^29.5.0", | ||||
|     "@types/js-yaml": "^4.0.5", | ||||
|     "@types/lodash": "^4.14.182", | ||||
|     "@types/node": "^17.0.25", | ||||
|     "@types/semver": "^7.3.13", | ||||
|     "@types/yargs": "^17.0.10", | ||||
|     "jest": "^29.5.0", | ||||
|     "ts-jest": "^29.0.5", | ||||
|     "typescript": "^4.6.3" | ||||
|   }, | ||||
|   "dependencies": { | ||||
|     "fs-extra": "^10.1.0", | ||||
|     "@cerc-io/laconic-sdk": "0.1.6", | ||||
|     "fs-extra": "^10.1.0", | ||||
|     "js-yaml": "^3.14.1", | ||||
|     "lodash": "^4.17.21", | ||||
|     "lodash-clean": "^2.2.3", | ||||
| @ -24,7 +28,9 @@ | ||||
|   "scripts": { | ||||
|     "lint": "eslint .", | ||||
|     "clean": "rm -rf ./dist", | ||||
|     "build": "tsc" | ||||
|     "build": "tsc", | ||||
|     "test": "jest --runInBand --verbose", | ||||
|     "test:auctions": "TEST_AUCTIONS_ENABLED=1 jest --runInBand --verbose test/auction.test.ts" | ||||
|   }, | ||||
|   "bin": { | ||||
|     "laconic": "bin/laconic" | ||||
|  | ||||
| @ -2,7 +2,7 @@ import { Arguments } from 'yargs'; | ||||
| import assert from 'assert'; | ||||
| import { Registry } from '@cerc-io/laconic-sdk'; | ||||
| 
 | ||||
| import { getConfig, getConnectionInfo,txOutput } from '../../../util'; | ||||
| import { getConfig, getConnectionInfo,queryOutput } from '../../../util'; | ||||
| 
 | ||||
| export const command = 'resolve [name]'; | ||||
| 
 | ||||
| @ -21,7 +21,5 @@ export const handler = async (argv: Arguments) => { | ||||
|   const registry = new Registry(gqlEndpoint, restEndpoint, chainId); | ||||
| 
 | ||||
|   const result = await registry.resolveNames([name]); | ||||
|   const success = `{"success":${result.code==0}}` | ||||
|   txOutput(result,success,argv.output,argv.verbose) | ||||
| 
 | ||||
|   queryOutput(result,argv.output) | ||||
| } | ||||
|  | ||||
							
								
								
									
										18
									
								
								test/account.test.ts
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										18
									
								
								test/account.test.ts
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,18 @@ | ||||
| import {cliTest} from './helper'; | ||||
| 
 | ||||
| const args= "account " | ||||
| const type= "aphoton" | ||||
| const quantity="10" | ||||
| const address="ethm1vc62ysqu504at932jjq8pwrqgjt67rx6ggn5yu" | ||||
| 
 | ||||
| describe("test account",() => { | ||||
|     it("get account should return account details",async ()=>{ | ||||
|         // send tokens to account to avoid account not found error
 | ||||
|         const sendResp=cliTest("tokens send --address "+address+" --type "+type+" --quantity "+quantity) | ||||
|         expect(sendResp).toBeDefined(); | ||||
|          | ||||
|         const resp=cliTest(args+"get --address "+address); | ||||
|         expect(resp).toBeDefined(); | ||||
|         expect(resp[0].address).toEqual(address) | ||||
|     }); | ||||
| }); | ||||
							
								
								
									
										63
									
								
								test/auction.test.ts
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										63
									
								
								test/auction.test.ts
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,63 @@ | ||||
| import {cliTest,createAuthority, getAuctionId} from './helper'; | ||||
| 
 | ||||
| jest.setTimeout(3 * 60 * 1000); | ||||
| 
 | ||||
| const args= "auction "; | ||||
| const quantity=25000000 | ||||
| const type="aphoton" | ||||
| const name=`laconic-auction-${Date.now()}` | ||||
| 
 | ||||
| 
 | ||||
| var auctionId: string; | ||||
| var filepath: string; | ||||
| 
 | ||||
| if (!process.env.TEST_AUCTIONS_ENABLED) { | ||||
|     // Required as jest complains if file has no tests.
 | ||||
|     test('skipping auction tests', () => {}); | ||||
|   } else { | ||||
|     describe("test auction",() => { | ||||
|         beforeAll(async () => { | ||||
|             // reserve authority
 | ||||
|            createAuthority(name) | ||||
|            auctionId = getAuctionId(name) | ||||
|         }); | ||||
|      | ||||
|         it("get auction",async ()=>{ | ||||
|             const resp=cliTest(args+"get "+auctionId); | ||||
|             expect(resp).toBeDefined(); | ||||
|             expect(resp.length).toEqual(1); | ||||
|             expect(resp[0].id).toEqual(auctionId) | ||||
|         }); | ||||
| 
 | ||||
|         it("bid commit",async ()=>{ | ||||
|             const resp=cliTest(args+"bid commit "+auctionId+" "+quantity+" "+type); | ||||
|             expect(resp).toBeDefined(); | ||||
|             expect(resp.reveal_file).toBeDefined(); | ||||
|      | ||||
|             filepath = resp.reveal_file | ||||
| 
 | ||||
|             const auction=cliTest(args+"get "+auctionId); | ||||
|             expect(auction).toBeDefined; | ||||
|             expect(auction.length).toEqual(1); | ||||
|             expect(auction[0].bids.length).toEqual(1); | ||||
|             expect(auction[0].bids[0].bidAmount.quantity).toEqual("0") | ||||
|         }); | ||||
|      | ||||
|         it("Wait for reveal phase.", (done) => { | ||||
|             setTimeout(done, 60 * 1000); | ||||
|         }); | ||||
|      | ||||
|         it("bid reveal", async ()=>{ | ||||
|             const resp=cliTest(args+"bid reveal "+auctionId+" "+filepath); | ||||
|             expect(resp).toBeDefined(); | ||||
|             expect(resp.success).toBeTruthy(); | ||||
| 
 | ||||
|             const auction=cliTest(args+"get "+auctionId); | ||||
|             expect(auction).toBeDefined; | ||||
|             expect(auction.length).toEqual(1); | ||||
|             expect(auction[0].bids.length).toEqual(1); | ||||
|             expect(auction[0].bids[0].bidAmount.quantity).toEqual(quantity+"") | ||||
|         }); | ||||
|     }); | ||||
|   } | ||||
| 
 | ||||
							
								
								
									
										41
									
								
								test/authority.test.ts
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										41
									
								
								test/authority.test.ts
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,41 @@ | ||||
| import {cliTest,createBond} from './helper'; | ||||
| 
 | ||||
| const args= "authority " | ||||
| const name=`laconic-${Date.now()}` | ||||
| 
 | ||||
| var bondId: string; | ||||
| 
 | ||||
| describe("test authority",() => { | ||||
|      | ||||
|     beforeAll(async () => { | ||||
|         // get bond id
 | ||||
|         bondId=createBond("aphoton","1000000000") | ||||
|     }); | ||||
|      | ||||
| 
 | ||||
|     it("reserve authority",async ()=>{ | ||||
|         const resp=cliTest(args+"reserve "+name); | ||||
|         expect(resp).toBeDefined(); | ||||
|         expect(resp.success).toBeTruthy(); | ||||
|     }); | ||||
| 
 | ||||
|     it("lookup authority information.",async ()=>{ | ||||
|         const resp=cliTest(args+"whois "+ name); | ||||
|         expect(resp).toBeDefined(); | ||||
|         expect(resp.length).toEqual(1); | ||||
|         expect(resp[0].status).toEqual("active") | ||||
|         expect(resp[0].bondId).toEqual("") | ||||
|     }); | ||||
| 
 | ||||
|     it("set authority bond",async ()=>{ | ||||
|         const bondSet=cliTest(args+"bond set "+name+" "+bondId); | ||||
|         expect(bondSet).toBeDefined(); | ||||
|         expect(bondSet.success).toBeTruthy(); | ||||
| 
 | ||||
|         const resp=cliTest(args+"whois "+ name); | ||||
|         expect(resp).toBeDefined(); | ||||
|         expect(resp.length).toEqual(1); | ||||
|         expect(resp[0].status).toEqual("active") | ||||
|         expect(resp[0].bondId).toEqual(bondId) | ||||
|     }); | ||||
| }); | ||||
							
								
								
									
										169
									
								
								test/bond.test.ts
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										169
									
								
								test/bond.test.ts
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,169 @@ | ||||
| import {cliTest,createBond,createRecord} from './helper'; | ||||
| 
 | ||||
| const args= "bond " | ||||
| const quantity=1000000000 | ||||
| const refillQuantity=100 | ||||
| const withdrawQuantity=100 | ||||
| const type="aphoton" | ||||
| 
 | ||||
| var bondId: string; | ||||
| var address: string; | ||||
| var recordId: string; | ||||
| 
 | ||||
| describe("test bond",() => { | ||||
|      | ||||
|     beforeAll(async () => { | ||||
|         const resp=cliTest("account get"); | ||||
|         expect(resp).toBeDefined(); | ||||
|         address=resp[0].address         | ||||
|     }); | ||||
|      | ||||
| 
 | ||||
|     it("create bond",async ()=>{ | ||||
|         const resp=cliTest(args+"create --type "+type+" --quantity "+quantity); | ||||
|         expect(resp.bondId).toBeDefined(); | ||||
|         bondId=resp.bondId | ||||
|     }); | ||||
| 
 | ||||
|     it("list bond",async ()=>{ | ||||
|         const resp=cliTest(args+"list"); | ||||
|         expect(resp.length).toBeGreaterThan(0); | ||||
|         const lenghtBefore=resp.length | ||||
| 
 | ||||
|         createBond(type,quantity+"") | ||||
| 
 | ||||
|         const respAfter=cliTest(args+"list"); | ||||
|         expect(respAfter.length-lenghtBefore).toEqual(1) | ||||
| 
 | ||||
|     }); | ||||
| 
 | ||||
|     it("get bond",async ()=>{ | ||||
|         const resp=cliTest(args+"get --id "+bondId); | ||||
|         expect(resp.length).toEqual(1); | ||||
|         expect(resp[0].id).toEqual(bondId); | ||||
|         expect(Number(resp[0].balance[0].quantity)).toEqual(quantity); | ||||
|     }); | ||||
| 
 | ||||
|     it("list bonds by owner",async ()=>{ | ||||
|         const resp=cliTest(args+"list --owner "+address); | ||||
|         expect(resp).toBeDefined(); | ||||
|         expect(resp.length).toBeGreaterThan(0); | ||||
|         expect(resp[0].owner).toEqual(address); | ||||
|     }); | ||||
| 
 | ||||
|     it("refill bond",async ()=>{ | ||||
|         const resp=cliTest(args+"refill --id "+bondId+" --type "+type+" --quantity "+refillQuantity); | ||||
|         expect(resp).toBeDefined(); | ||||
|         expect(resp.success).toBeTruthy(); | ||||
| 
 | ||||
|         const getResp=cliTest(args+"get --id "+bondId); | ||||
|         expect(getResp.length).toEqual(1); | ||||
|         expect(getResp[0].id).toEqual(bondId); | ||||
|         expect(Number(getResp[0].balance[0].quantity)).toEqual(quantity+refillQuantity); | ||||
|     }); | ||||
| 
 | ||||
|     it("withdraw funds from bond, insufficient",async ()=>{ | ||||
|         const resp=cliTest(args+"withdraw --id "+bondId+" --type "+type+" --quantity "+withdrawQuantity+quantity*2); | ||||
|         expect(resp.stderr).toBeDefined(); | ||||
|         expect(resp.stderr.toString()).toContain("Insufficient bond balance.: insufficient funds") | ||||
|     }); | ||||
| 
 | ||||
|     it("withdraw funds from bond",async ()=>{ | ||||
|         const resp=cliTest(args+"withdraw --id "+bondId+" --type "+type+" --quantity "+withdrawQuantity); | ||||
|         expect(resp).toBeDefined(); | ||||
|         expect(resp.success).toBeTruthy(); | ||||
| 
 | ||||
|         const getResp=cliTest(args+"get --id "+bondId); | ||||
|         expect(getResp.length).toEqual(1); | ||||
|         expect(getResp[0].id).toEqual(bondId); | ||||
|         expect(Number(getResp[0].balance[0].quantity)).toEqual(quantity+refillQuantity-withdrawQuantity); | ||||
|     }); | ||||
| 
 | ||||
|     it("cancel bond",async ()=>{ | ||||
|         const resp=cliTest(args+"cancel --id "+bondId); | ||||
|         expect(resp).toBeDefined; | ||||
|         expect(resp.success).toBeTruthy(); | ||||
| 
 | ||||
|         const getResp=cliTest(args+"get --id "+bondId); | ||||
|         expect(getResp.length).toEqual(1); | ||||
|         expect(getResp[0].id).toEqual(""); | ||||
|     }); | ||||
| 
 | ||||
|     it("associate bond with record",async ()=>{ | ||||
|         // get new bond Id
 | ||||
|         bondId=createBond(type,quantity+"") | ||||
|         // get record Id
 | ||||
|         recordId=createRecord("./test/examples/watcher.yml",bondId) | ||||
| 
 | ||||
|         // dissociate bond from record
 | ||||
|         const dissociate=cliTest(args+"dissociate --id "+recordId); | ||||
|         expect(dissociate).toBeDefined; | ||||
|         expect(dissociate.success).toBeTruthy(); | ||||
| 
 | ||||
|         // get new bond Id
 | ||||
|         const newbondId=createBond(type,quantity+"") | ||||
| 
 | ||||
|         const resp=cliTest(args+"associate --id "+recordId+" --bond-id "+newbondId); | ||||
|         expect(resp).toBeDefined(); | ||||
|         expect(resp.success).toBeTruthy(); | ||||
| 
 | ||||
|         // check for bond id in record
 | ||||
|         const getRecord=cliTest(" record get --id "+recordId) | ||||
|         expect(getRecord).toBeDefined(); | ||||
|         expect(getRecord.length).toEqual(1); | ||||
|         expect(getRecord[0].id).toEqual(recordId); | ||||
|         expect(getRecord[0].bondId).toEqual(newbondId); | ||||
|     }); | ||||
| 
 | ||||
|     it("dissociate bond from record",async ()=>{ | ||||
|         const resp=cliTest(args+"dissociate --id "+recordId); | ||||
|         expect(resp).toBeDefined; | ||||
|         expect(resp.success).toBeTruthy(); | ||||
| 
 | ||||
|         // check for bond id in record
 | ||||
|         const getRecord=cliTest(" record get --id "+recordId) | ||||
|         expect(getRecord).toBeDefined(); | ||||
|         expect(getRecord.length).toEqual(1); | ||||
|         expect(getRecord[0].id).toEqual(recordId); | ||||
|         expect(getRecord[0].bondId).toEqual(""); | ||||
|     }); | ||||
| 
 | ||||
|     it("dissociate all records from bond",async ()=>{ | ||||
|          // associate bond to record
 | ||||
|          const associate=cliTest(args+"associate --id "+recordId+" --bond-id "+bondId); | ||||
|          expect(associate).toBeDefined; | ||||
|          expect(associate.success).toBeTruthy(); | ||||
|   | ||||
|         const resp=cliTest(args+"records dissociate --bond-id "+bondId); | ||||
|         expect(resp).toBeDefined; | ||||
|         expect(resp.success).toBeTruthy(); | ||||
| 
 | ||||
|         // check for bond id in record
 | ||||
|         const getRecord=cliTest(" record get --id "+recordId) | ||||
|         expect(getRecord).toBeDefined(); | ||||
|         expect(getRecord.length).toEqual(1); | ||||
|         expect(getRecord[0].id).toEqual(recordId); | ||||
|         expect(getRecord[0].bondId).toEqual(""); | ||||
|     }); | ||||
| 
 | ||||
|     it("reassociate all records from bond",async ()=>{ | ||||
|         // get new bondid
 | ||||
|         const newBondId =createBond(type,quantity+"") | ||||
| 
 | ||||
|         // associate bond to record
 | ||||
|         const associate=cliTest(args+"associate --id "+recordId+" --bond-id "+bondId); | ||||
|         expect(associate).toBeDefined; | ||||
|         expect(associate.success).toBeTruthy(); | ||||
| 
 | ||||
|         const resp=cliTest(args+"records reassociate --old-bond-id "+bondId+" --new-bond-id "+newBondId); | ||||
|         expect(resp).toBeDefined; | ||||
|         expect(resp.success).toBeTruthy(); | ||||
| 
 | ||||
|         // check for bond id in record
 | ||||
|         const getRecord=cliTest(" record get --id "+recordId) | ||||
|         expect(getRecord).toBeDefined(); | ||||
|         expect(getRecord.length).toEqual(1); | ||||
|         expect(getRecord[0].id).toEqual(recordId); | ||||
|         expect(getRecord[0].bondId).toEqual(newBondId); | ||||
|     }); | ||||
| }); | ||||
							
								
								
									
										7
									
								
								test/examples/watcher.yml
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										7
									
								
								test/examples/watcher.yml
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,7 @@ | ||||
| record: | ||||
|   type: WebsiteRegistrationRecord | ||||
|   url: 'https://cerc.io' | ||||
|   repo_registration_record_cid: QmSnuWmxptJZdLJpKRarxBMS2Ju2oANVrgbr2xWbie9b2D | ||||
|   build_artifact_cid: QmP8jTG1m9GSDJLCbeWhVSVgEzCPPwXRdCRuJtQ5Tz9Kc9 | ||||
|   tls_cert_cid: QmbWqxBEKC3P8tqsKc98xmWNzrzDtRLMiMPL8wBuTGsMnR | ||||
|   version: 1.0.35 | ||||
							
								
								
									
										49
									
								
								test/helper.ts
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										49
									
								
								test/helper.ts
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,49 @@ | ||||
| import yaml from 'js-yaml' | ||||
| import fs from 'fs' | ||||
| import path from 'path' | ||||
| import semver from 'semver'; | ||||
| 
 | ||||
| const { execSync } = require("child_process"); | ||||
| 
 | ||||
| export const updateRecord = (filePath: string) => { | ||||
|   const resolvedFilePath = path.resolve(process.cwd(), filePath); | ||||
|   const file = fs.readFileSync(resolvedFilePath, 'utf-8') | ||||
|   const data = yaml.load(file) as any; | ||||
|    | ||||
|   data.record.version=semver.inc(data.record.version, 'patch'); | ||||
| 
 | ||||
|   fs.writeFileSync(resolvedFilePath, yaml.dump(data)); | ||||
| }; | ||||
| 
 | ||||
| export const cliTest = (args: any) => { | ||||
|   try{ | ||||
|     return JSON.parse(execSync(`./bin/laconic cns ${args}`)); | ||||
|   }catch(err){ | ||||
|     return(err) | ||||
|   } | ||||
| }; | ||||
| 
 | ||||
| export function createBond(type: string, quantity: string):string{ | ||||
|   const resp=cliTest("bond create --type aphoton --quantity 1000000000"); | ||||
|   expect(resp.bondId).toBeDefined(); | ||||
|   return resp.bondId | ||||
| }; | ||||
| 
 | ||||
| export function createRecord(filepath: string, bondId: string):string{ | ||||
|   const resp=cliTest("record publish --filename "+filepath+" --bond-id "+bondId); | ||||
|   expect(resp.id).toBeDefined(); | ||||
|   return resp.id | ||||
| } | ||||
| 
 | ||||
| export function createAuthority(name:string):any{ | ||||
|   const resp=cliTest("authority reserve "+name); | ||||
|   expect(resp).toBeDefined; | ||||
|   expect(resp.success).toBeTruthy(); | ||||
|   return resp | ||||
| } | ||||
| 
 | ||||
| export function getAuctionId(name:string):string{ | ||||
|   const jsonResp = cliTest("authority whois "+name) | ||||
|   expect(jsonResp).toBeDefined; | ||||
|   return jsonResp[0].auction.id | ||||
| } | ||||
							
								
								
									
										56
									
								
								test/name.test.ts
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										56
									
								
								test/name.test.ts
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,56 @@ | ||||
| import {cliTest,createAuthority,createBond,createRecord} from './helper'; | ||||
| 
 | ||||
| const args= "name "; | ||||
| const name=`laconic-${Date.now()}`; | ||||
| const crn=`crn://${name}/app/test`; | ||||
| 
 | ||||
| var recordId: string; | ||||
| var bondId: string; | ||||
| 
 | ||||
| describe("test names",() => { | ||||
|      | ||||
|     beforeAll(async () => { | ||||
|         // get bond id
 | ||||
|         bondId = createBond("aphoton","10000000") | ||||
| 
 | ||||
|         // get record id
 | ||||
|         recordId=createRecord("./test/examples/watcher.yml",bondId) | ||||
| 
 | ||||
|         // reserve authority
 | ||||
|         createAuthority(name) | ||||
| 
 | ||||
|         // set authority bond
 | ||||
|         const resp=cliTest("authority bond set "+name+" "+bondId); | ||||
|         expect(resp).toBeDefined(); | ||||
|         expect(resp.success).toBeTruthy(); | ||||
|     }); | ||||
|      | ||||
| 
 | ||||
|     it("set name",async ()=>{ | ||||
|         const resp=cliTest(args+"set "+crn+" "+recordId); | ||||
|         expect(resp).toBeDefined(); | ||||
|         expect(resp.success).toBeTruthy(); | ||||
|     }); | ||||
| 
 | ||||
|     it("lookup name",async ()=>{ | ||||
|         const resp=cliTest(args+"lookup "+ crn); | ||||
|         expect(resp).toBeDefined(); | ||||
|         expect(resp[0].latest.id).toEqual(recordId) | ||||
|     }); | ||||
| 
 | ||||
|     it("resolve name",async ()=>{ | ||||
|         const resp=cliTest(args+"resolve "+crn); | ||||
|         expect(resp).toBeDefined(); | ||||
|         expect(resp[0].id).toEqual(recordId) | ||||
|     }); | ||||
| 
 | ||||
|     it("delete name",async ()=>{ | ||||
|         const resp=cliTest(args+"delete "+crn); | ||||
|         expect(resp).toBeDefined(); | ||||
|         expect(resp.success).toBeTruthy(); | ||||
| 
 | ||||
|         const resolve=cliTest(args+"resolve "+crn); | ||||
|         expect(resolve).toBeDefined(); | ||||
|         expect(resolve[0]).toBeNull(); | ||||
|     }); | ||||
| }); | ||||
							
								
								
									
										39
									
								
								test/record.test.ts
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										39
									
								
								test/record.test.ts
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,39 @@ | ||||
| import {cliTest,createBond, updateRecord} from './helper'; | ||||
| 
 | ||||
| const args= "record " | ||||
| const filename = "./test/examples/watcher.yml" | ||||
| 
 | ||||
| var recordId: string; | ||||
| var bondId: string; | ||||
| 
 | ||||
| describe("test record",() => { | ||||
|      | ||||
|     beforeAll(async () => { | ||||
|         // get bondId
 | ||||
|         bondId=createBond("aphoton","1000000000") | ||||
|         updateRecord(filename) | ||||
|     }); | ||||
| 
 | ||||
|     it("publish record",async ()=>{ | ||||
|         const resp=cliTest(args+"publish --filename "+filename+" --bond-id "+bondId); | ||||
|         expect(resp).toBeDefined(); | ||||
|         console.log(resp.toString()) | ||||
|         expect(resp.id).toBeDefined(); | ||||
| 
 | ||||
|         recordId=resp.id | ||||
|     }); | ||||
| 
 | ||||
|     it("get record",async ()=>{ | ||||
|         const resp=cliTest(args+"get --id "+recordId); | ||||
|         expect(resp).toBeDefined(); | ||||
|         expect(resp.length).toEqual(1); | ||||
|         expect(resp[0].id).toEqual(recordId) | ||||
|         expect(resp[0].bondId).toEqual(bondId) | ||||
|     }); | ||||
| 
 | ||||
|     it("list records",async ()=>{ | ||||
|         const resp=cliTest(args+"list"); | ||||
|         expect(resp).toBeDefined(); | ||||
|         expect(resp.length).toBeGreaterThan(0); | ||||
|     }); | ||||
| }); | ||||
							
								
								
									
										12
									
								
								test/status.test.ts
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										12
									
								
								test/status.test.ts
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,12 @@ | ||||
| import {cliTest} from './helper'; | ||||
| 
 | ||||
| const args= "status " | ||||
| 
 | ||||
| describe("test status",() => { | ||||
| 
 | ||||
|     it("get status",async ()=>{ | ||||
|         const resp=cliTest(args); | ||||
|         expect(resp).toBeDefined(); | ||||
|         expect(resp.node.network).toContain("laconic") | ||||
|     }); | ||||
| }); | ||||
							
								
								
									
										36
									
								
								test/tokens.test.ts
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										36
									
								
								test/tokens.test.ts
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,36 @@ | ||||
| import {cliTest} from './helper'; | ||||
| 
 | ||||
| const args= "tokens " | ||||
| const type= "aphoton" | ||||
| const quantity=10 | ||||
| const address="ethm1vc62ysqu504at932jjq8pwrqgjt67rx6ggn5yu" | ||||
| 
 | ||||
| describe("test account",() => { | ||||
|     it("get account should return account details",async ()=>{ | ||||
|         // balance before
 | ||||
|         var balanceBefore; | ||||
|         const beforeResp=cliTest("account get --address "+address); | ||||
|         if (beforeResp.stderr){ | ||||
|             expect(beforeResp.stderr.toString()).toContain("account "+address+ " not found") | ||||
|             balanceBefore=0 | ||||
|         } else{ | ||||
|             balanceBefore=beforeResp[0].balance[0].quantity | ||||
|         } | ||||
|      | ||||
|         // send tokens to account
 | ||||
|         const sendResp=cliTest(args+"send --address "+address+" --type "+type+" --quantity "+quantity) | ||||
|         expect(sendResp).toBeDefined(); | ||||
|          | ||||
|         // balance after
 | ||||
|         var balanceAfter; | ||||
|         const afterResp=cliTest("account get --address "+address); | ||||
|         if (afterResp.stderr){ | ||||
|             expect(afterResp.stderr.toString()).toContain("account "+address+ " not found") | ||||
|             balanceAfter=0 | ||||
|         } else{ | ||||
|             balanceAfter=afterResp[0].balance[0].quantity | ||||
|         } | ||||
| 
 | ||||
|         expect(balanceAfter-balanceBefore).toEqual(quantity) | ||||
|     }); | ||||
| }); | ||||
		Loading…
	
		Reference in New Issue
	
	Block a user