Skip to content

Commit

Permalink
Update and fix tests
Browse files Browse the repository at this point in the history
  • Loading branch information
fordN committed Dec 22, 2021
1 parent 1399e30 commit 6ef1773
Show file tree
Hide file tree
Showing 9 changed files with 170 additions and 30 deletions.
2 changes: 1 addition & 1 deletion packages/indexer-agent/jest.config.js
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,7 @@ module.exports = {
collectCoverage: true,
preset: 'ts-jest',
testEnvironment: 'node',
testPathIgnorePatterns: ['/node_modules/', '/dist/'],
testPathIgnorePatterns: ['/node_modules/', '/dist/', '.yalc'],
globals: {
__DATABASE__: {
host: process.env.POSTGRES_TEST_HOST || bail('POSTGRES_TEST_HOST is not defined'),
Expand Down
2 changes: 1 addition & 1 deletion packages/indexer-agent/src/__tests__/indexer.ts
Original file line number Diff line number Diff line change
Expand Up @@ -17,7 +17,7 @@ import {
POIDisputeAttributes,
} from '@graphprotocol/indexer-common'
import { BigNumber, Wallet } from 'ethers'
import { Sequelize } from 'sequelize/types'
import { Sequelize } from 'sequelize'
import { Indexer } from '../indexer'

const TEST_DISPUTE_1: POIDisputeAttributes = {
Expand Down
2 changes: 1 addition & 1 deletion packages/indexer-cli/jest.config.js
Original file line number Diff line number Diff line change
Expand Up @@ -2,5 +2,5 @@ module.exports = {
collectCoverage: true,
preset: 'ts-jest',
testEnvironment: 'node',
testPathIgnorePatterns: ['/node_modules/', '/dist/']
testPathIgnorePatterns: ['/node_modules/', '/dist/', '.yalc']
}
2 changes: 1 addition & 1 deletion packages/indexer-common/jest.config.js
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,7 @@ module.exports = {
collectCoverage: true,
preset: 'ts-jest',
testEnvironment: 'node',
testPathIgnorePatterns: ['/node_modules/', '/dist/'],
testPathIgnorePatterns: ['/node_modules/', '/dist/', '/.yalc'],
globals: {
__DATABASE__: {
host: process.env.POSTGRES_TEST_HOST || bail('POSTGRES_TEST_HOST is not defined'),
Expand Down
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
import { Sequelize } from 'sequelize/types'
import { Sequelize } from 'sequelize'
import gql from 'graphql-tag'
import { ethers } from 'ethers'
import {
Expand Down Expand Up @@ -30,7 +30,6 @@ declare const __DATABASE__: any
const SET_INDEXING_RULE_MUTATION = gql`
mutation setIndexingRule($rule: IndexingRuleInput!) {
setIndexingRule(rule: $rule) {
id
deployment
allocationAmount
parallelAllocations
Expand Down Expand Up @@ -60,7 +59,6 @@ const DELETE_INDEXING_RULES_MUTATION = gql`
const INDEXING_RULE_QUERY = gql`
query indexingRule($deployment: String!, $merged: Boolean!) {
indexingRule(deployment: $deployment, merged: $merged) {
id
deployment
allocationAmount
parallelAllocations
Expand All @@ -78,7 +76,6 @@ const INDEXING_RULE_QUERY = gql`
const INDEXING_RULES_QUERY = gql`
query indexingRuls($merged: Boolean!) {
indexingRules(merged: $merged) {
id
deployment
allocationAmount
parallelAllocations
Expand Down
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
import { Sequelize } from 'sequelize/types'
import { Sequelize } from 'sequelize'
import gql from 'graphql-tag'
import { ethers } from 'ethers'
import {
Expand Down
6 changes: 6 additions & 0 deletions packages/indexer-native/jest.config.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,6 @@
module.exports = {
collectCoverage: true,
preset: 'ts-jest',
testEnvironment: 'node',
testPathIgnorePatterns: ['/node_modules/', '/dist/', '.yalc']
}
24 changes: 23 additions & 1 deletion packages/indexer-service/jest.config.js
Original file line number Diff line number Diff line change
@@ -1,6 +1,28 @@
const bail = (s) => {
throw new Error(s)
}

module.exports = {
collectCoverage: true,
preset: 'ts-jest',
testEnvironment: 'node',
testPathIgnorePatterns: ['/node_modules/', '/dist/']
testPathIgnorePatterns: ['/node_modules/', '/dist/', '.yalc'],
globals: {
"ts-jest": {
isolatedModules: true,
},
__DATABASE__: {
host: process.env.POSTGRES_TEST_HOST || bail('POSTGRES_TEST_HOST is not defined'),
port: parseInt(process.env.POSTGRES_TEST_PORT || '5432'),
username:
process.env.POSTGRES_TEST_USERNAME ||
bail('POSTGRES_TEST_USERNAME is not defined'),
password:
process.env.POSTGRES_TEST_PASSWORD ||
bail('POSTGRES_TEST_PASSWORD is not defined'),
database:
process.env.POSTGRES_TEST_DATABASE ||
bail('POSTGRES_TEST_DATABASE is not defined'),
},
},
}
155 changes: 135 additions & 20 deletions packages/indexer-service/src/server/__tests__/server.test.ts
Original file line number Diff line number Diff line change
Expand Up @@ -2,40 +2,155 @@
* Assumes a graph-node is running
*/

import * as supertest from 'supertest'
import * as express from 'express'
import { constants } from 'ethers'
import supertest from 'supertest'
import express from 'express'
import { BigNumber, ethers, Wallet } from 'ethers'

import { createLogger, createMetrics } from '@graphprotocol/common-ts'
import {
connectContracts,
connectDatabase,
createLogger,
createMetrics,
NetworkContracts,
toAddress,
} from '@graphprotocol/common-ts'

import { createApp } from '..'
import { createServer } from '..'
import { QueryProcessor } from '../../queries'
import { ensureAttestationSigners, monitorEligibleAllocations } from '../../allocations'
import { AllocationReceiptManager } from '../../query-fees'
import {
createIndexerManagementClient,
defineIndexerManagementModels,
defineQueryFeeModels,
IndexerManagementClient,
IndexerManagementModels,
IndexingStatusResolver,
NetworkSubgraph,
QueryFeeModels,
} from '@graphprotocol/indexer-common'
import { Sequelize } from 'sequelize'

describe('Server', () => {
let app: express.Express
// Make global Jest variable available
// eslint-disable-next-line @typescript-eslint/no-explicit-any
declare const __DATABASE__: any

let app: express.Express
let sequelize: Sequelize
let models: IndexerManagementModels
let queryFeeModels: QueryFeeModels
let address: string
let contracts: NetworkContracts
let indexingStatusResolver: IndexingStatusResolver
let networkSubgraph: NetworkSubgraph
let client: IndexerManagementClient
let receiptManager: AllocationReceiptManager

describe('Server', () => {
beforeAll(async () => {
const logger = createLogger({ name: 'server.test.ts' })
const logger = createLogger({ name: 'server.test.ts', level: 'trace' })
const metrics = createMetrics()

app = await createApp({
sequelize = await connectDatabase(__DATABASE__)

queryFeeModels = defineQueryFeeModels(sequelize)
models = defineIndexerManagementModels(sequelize)
address = '0x90f8bf6a479f320ead074411a4b0e7944ea8c9c1'
contracts = await connectContracts(ethers.getDefaultProvider('rinkeby'), 4)
await sequelize.sync({ force: true })
indexingStatusResolver = new IndexingStatusResolver({
logger: logger,
statusEndpoint: 'http://localhost:8030/graphql',
})
networkSubgraph = await NetworkSubgraph.create({
logger,
endpoint: 'https://gateway.testnet.thegraph.com/network',
deployment: undefined,
})

client = await createIndexerManagementClient({
models,
address,
contracts,
indexingStatusResolver,
networkSubgraph,
logger,
defaults: {
// This is just a dummy, since we're never writing to the management
// client from the indexer service.
globalIndexingRule: {
allocationAmount: BigNumber.from('0'),
},
},
features: {
injectDai: true,
},
})

receiptManager = new AllocationReceiptManager(
sequelize,
queryFeeModels,
logger,
toAddress(address), //update maybe
)

const release = {
version: '0.0.1',
dependencies: {
'@graphprotocol/common-ts': '1.8.0',
},
}

// Monitor indexer allocations that we may receive traffic for
const allocations = monitorEligibleAllocations({
indexer: toAddress(address),
logger,
networkSubgraph,
interval: 120_000,
})
const wallet = Wallet.fromMnemonic(
'myth like bonus scare over problem client lizard pioneer submit female collect',
)

// Ensure there is an attestation signer for every allocation
const signers = ensureAttestationSigners({
logger,
allocations,
wallet,
chainId: 4,
disputeManagerAddress: contracts.disputeManager.address,
})

const queryProcessor = new QueryProcessor({
logger: logger.child({ component: 'QueryProcessor' }),
graphNode: 'http://localhost:8000/',
metrics,
receiptManager,
signers,
})

app = await createServer({
logger,
port: 9600,
queryProcessor: new QueryProcessor({
logger: logger.child({ component: 'QueryProcessor' }),
graphNode: 'http://localhost:9000/',
metrics,
receiptManager,
chainId: 1,
disputeManagerAddress: constants.AddressZero,
}),
graphNodeStatusEndpoint: 'http://localhost:9030/graphql',
queryProcessor,
graphNodeStatusEndpoint: 'http://localhost:8030/graphql',
metrics,
freeQueryAuthToken: '',
indexerManagementClient: client,
release,
operatorPublicKey: wallet.publicKey,
networkSubgraph,
networkSubgraphAuthToken: 'superdupersecrettoken',
serveNetworkSubgraph: false,
})
})

it('is ready to roll', async () => {
await supertest(app).get('/').expect(200)
afterAll(async () => {
await sequelize.drop({})
})

it('is ready to roll', done => {
supertest(app).get('/').expect(200, done)
//expect(response.body.message).toBe('ready to roll!')
})
})

0 comments on commit 6ef1773

Please sign in to comment.