mirror of
https://github.com/aljazceru/gitpear.git
synced 2025-12-17 22:24:22 +01:00
68
test/appHome.test.js
Normal file
68
test/appHome.test.js
Normal file
@@ -0,0 +1,68 @@
|
||||
const { test } = require('brittle')
|
||||
const fs = require('fs')
|
||||
const path = require('path')
|
||||
|
||||
const appHome = require('../src/appHome')
|
||||
|
||||
test('getAppHome', t => {
|
||||
t.ok(appHome.APP_HOME)
|
||||
})
|
||||
|
||||
test('createAppFolder, share, is shared, unshare, isInitialized, list, getCodePath', t => {
|
||||
appHome.createAppFolder('appHome-test')
|
||||
|
||||
t.ok(fs.existsSync(path.join(appHome.APP_HOME, 'appHome-test', 'code')))
|
||||
|
||||
t.absent(appHome.isShared('appHome-test'))
|
||||
t.absent(fs.existsSync(path.join(appHome.APP_HOME, 'appHome-test', '.git-daemon-export-ok')))
|
||||
|
||||
appHome.shareAppFolder('appHome-test')
|
||||
|
||||
t.ok(appHome.isShared('appHome-test'))
|
||||
t.ok(fs.existsSync(path.join(appHome.APP_HOME, 'appHome-test', '.git-daemon-export-ok')))
|
||||
|
||||
appHome.unshareAppFolder('appHome-test')
|
||||
|
||||
t.absent(appHome.isShared('appHome-test'))
|
||||
t.absent(fs.existsSync(path.join(appHome.APP_HOME, 'appHome-test', '.git-daemon-export-ok')))
|
||||
|
||||
t.absent(appHome.isInitialized('appHome-test'))
|
||||
t.ok(appHome.isInitialized('foo'))
|
||||
|
||||
t.alike(new Set(appHome.list()), new Set(['foo', 'bar', 'zar', 'appHome-test']))
|
||||
t.alike(new Set(appHome.list(true)), new Set(['foo', 'bar', 'zar']))
|
||||
|
||||
t.alike(path.resolve(appHome.getCodePath('appHome-test')), path.resolve(path.join(appHome.APP_HOME, 'appHome-test', 'code')))
|
||||
|
||||
t.teardown(() => {
|
||||
fs.rmdirSync(path.join(appHome.APP_HOME, 'appHome-test', 'code'), { recursive: true })
|
||||
})
|
||||
})
|
||||
|
||||
test('readPk, getKeyPair', t => {
|
||||
t.ok(appHome.readPk())
|
||||
t.ok(appHome.getKeyPair())
|
||||
})
|
||||
|
||||
test('getOutStream, getErrStream', t => {
|
||||
t.absent(fs.existsSync(path.join(appHome.APP_HOME, 'out.log')))
|
||||
t.ok(appHome.getOutStream())
|
||||
t.ok(fs.existsSync(path.join(appHome.APP_HOME, 'out.log')))
|
||||
|
||||
t.absent(fs.existsSync(path.join(appHome.APP_HOME, 'err.log')))
|
||||
t.ok(appHome.getErrStream())
|
||||
t.ok(fs.existsSync(path.join(appHome.APP_HOME, 'err.log')))
|
||||
|
||||
t.teardown(() => {
|
||||
fs.unlinkSync(path.join(appHome.APP_HOME, 'out.log'))
|
||||
fs.unlinkSync(path.join(appHome.APP_HOME, 'err.log'))
|
||||
})
|
||||
})
|
||||
|
||||
test('getDaemonPid, removeDaemonPid', t => {
|
||||
t.absent(appHome.getDaemonPid())
|
||||
appHome.storeDaemonPid(123)
|
||||
t.alike(appHome.getDaemonPid(), 123)
|
||||
appHome.removeDaemonPid()
|
||||
t.absent(appHome.getDaemonPid())
|
||||
})
|
||||
65
test/git.test.js
Normal file
65
test/git.test.js
Normal file
@@ -0,0 +1,65 @@
|
||||
const test = require('brittle')
|
||||
const fs = require('fs')
|
||||
const path = require('path')
|
||||
|
||||
const appHome = require('../src/appHome.js')
|
||||
|
||||
const git = require('../src/git.js')
|
||||
|
||||
test('git - lsPromise', async t => {
|
||||
const res = await git.lsPromise('./')
|
||||
|
||||
t.ok(res)
|
||||
t.ok(res.HEAD)
|
||||
t.is(Buffer.from(res.HEAD, 'hex').length, 20)
|
||||
for (const key in res) {
|
||||
if (key === 'HEAD') continue
|
||||
|
||||
t.ok(key.startsWith('refs/'))
|
||||
t.is(Buffer.from(res[key], 'hex').length, 20)
|
||||
}
|
||||
})
|
||||
|
||||
test('git - uploadPack (wo have)', async t => {
|
||||
t.plan(3)
|
||||
const { HEAD } = await git.lsPromise('./')
|
||||
t.ok(HEAD)
|
||||
|
||||
const res = git.uploadPack('./', HEAD)
|
||||
res.on('exit', (code) => t.ok(code === 0))
|
||||
res.on('ready', () => {
|
||||
const stream = fs.createWriteStream('/dev/null')
|
||||
res.stdout.pipe(stream)
|
||||
stream.on('close', () => t.pass())
|
||||
})
|
||||
})
|
||||
|
||||
test('git - uploadPack (w have)', { skip: true }, async t => {
|
||||
t.plan(3)
|
||||
const SECOND_COMMIT = ''
|
||||
const { HEAD } = await git.lsPromise('./')
|
||||
t.ok(HEAD)
|
||||
|
||||
const res = git.uploadPack('./', HEAD, SECOND_COMMIT)
|
||||
|
||||
res.on('exit', (code) => t.ok(code === 0))
|
||||
res.on('ready', () => {
|
||||
const stream = fs.createWriteStream('/dev/null')
|
||||
res.stdout.pipe(stream)
|
||||
stream.on('close', () => t.pass())
|
||||
})
|
||||
})
|
||||
|
||||
test('git - createBareRepo', async t => {
|
||||
t.absent(fs.existsSync(path.join(appHome.APP_HOME, 'test-git', 'code')))
|
||||
appHome.createAppFolder('test-git')
|
||||
|
||||
t.absent(fs.existsSync(path.join(appHome.APP_HOME, 'test-git', 'code', 'HEAD')))
|
||||
await git.createBareRepo('test-git')
|
||||
|
||||
t.ok(fs.existsSync(path.join(appHome.APP_HOME, 'test-git', 'code', 'HEAD')))
|
||||
|
||||
t.teardown(() => {
|
||||
fs.rmdirSync(path.join(appHome.APP_HOME, 'test-git'), { recursive: true })
|
||||
})
|
||||
})
|
||||
80
test/rpc.test.js
Normal file
80
test/rpc.test.js
Normal file
@@ -0,0 +1,80 @@
|
||||
const test = require('brittle')
|
||||
const RAM = require('random-access-memory')
|
||||
const createTestnet = require('@hyperswarm/testnet')
|
||||
const Corestore = require('corestore')
|
||||
const Hyperswarm = require('hyperswarm')
|
||||
const Hyperdrive = require('hyperdrive')
|
||||
const ProtomuxRPC = require('protomux-rpc')
|
||||
|
||||
const RPC = require('../src/rpc.js')
|
||||
const setState = require('../src/state.js')
|
||||
|
||||
test('constructor', async t => {
|
||||
const rpc = new RPC('announcedRefs', 'repositories', 'drives')
|
||||
t.ok(rpc)
|
||||
|
||||
t.is(rpc.announcedRefs, 'announcedRefs')
|
||||
t.is(rpc.repositories, 'repositories')
|
||||
t.is(rpc.drives, 'drives')
|
||||
t.alike(rpc.connections, {})
|
||||
})
|
||||
|
||||
test('e2e', async t => {
|
||||
t.plan(3)
|
||||
const testnet = await createTestnet(3, t)
|
||||
|
||||
const { rpc, store } = await getRPC()
|
||||
const clientStore = new Corestore(RAM)
|
||||
const topic = Buffer.alloc(32).fill('pear 2 pear')
|
||||
|
||||
const serverSwarm = new Hyperswarm(testnet)
|
||||
serverSwarm.on('connection', (socket, details) => {
|
||||
store.replicate(socket)
|
||||
rpc.setHandlers(socket, details)
|
||||
})
|
||||
serverSwarm.join(topic)
|
||||
await serverSwarm.flush()
|
||||
|
||||
const clientSwarm = new Hyperswarm(testnet)
|
||||
clientSwarm.on('connection', async (socket) => {
|
||||
clientStore.replicate(socket)
|
||||
const rpc = new ProtomuxRPC(socket)
|
||||
|
||||
const reposRes = await rpc.request('get-repos')
|
||||
const reposJSON = JSON.parse(reposRes.toString())
|
||||
|
||||
const driveKey = Buffer.from(reposJSON.foo, 'hex')
|
||||
t.ok(driveKey)
|
||||
|
||||
const drive = new Hyperdrive(clientStore.namespace('foo'), driveKey)
|
||||
await drive.ready()
|
||||
clientSwarm.join(drive.discoveryKey, { server: false, client: true })
|
||||
await clientSwarm.flush()
|
||||
|
||||
await drive.core.update({ wait: true })
|
||||
|
||||
const refsRes = await rpc.request('get-refs', Buffer.from('foo'))
|
||||
t.ok(refsRes)
|
||||
|
||||
const want = Object.values(JSON.parse(refsRes.toString()))[0]
|
||||
|
||||
const exists = await drive.exists(`/packs/${want}.pack`)
|
||||
t.ok(exists)
|
||||
})
|
||||
|
||||
clientSwarm.join(topic, { server: false, client: true })
|
||||
|
||||
t.teardown(async () => {
|
||||
await serverSwarm.destroy()
|
||||
await clientSwarm.destroy()
|
||||
})
|
||||
})
|
||||
|
||||
async function getRPC () {
|
||||
const store = new Corestore(RAM)
|
||||
const { announcedRefs, repositories, drives } = await setState(store)
|
||||
return {
|
||||
rpc: new RPC(announcedRefs, repositories, drives),
|
||||
store
|
||||
}
|
||||
}
|
||||
23
test/state.test.js
Normal file
23
test/state.test.js
Normal file
@@ -0,0 +1,23 @@
|
||||
const test = require('brittle')
|
||||
const setState = require('../src/state.js')
|
||||
const Corestore = require('corestore')
|
||||
const RAM = require('random-access-memory')
|
||||
|
||||
const repoNames = ['foo', 'bar', 'zar']
|
||||
|
||||
test('setState', async t => {
|
||||
const res = await setState(new Corestore(RAM))
|
||||
|
||||
t.ok(res.announcedRefs)
|
||||
t.alike(new Set(Object.values(res.announcedRefs)), new Set(repoNames))
|
||||
|
||||
t.ok(res.repositories)
|
||||
t.alike(new Set(Object.keys(res.repositories)), new Set(repoNames))
|
||||
|
||||
t.ok(res.drives)
|
||||
|
||||
for (const repo in res.repositories) {
|
||||
t.ok(res.repositories[repo])
|
||||
t.ok(res.drives[repo].key)
|
||||
}
|
||||
})
|
||||
Reference in New Issue
Block a user