$DIR/common/client/models_test.go: `.String()`
$DIR/common/client/models_test.go: `.Contains(strC, "SendTxReturnCode(")`
$DIR/common/client/multi_node_test.go: `t.Run("Fails without nodes", func(t *testing.T) {
t.Parallel()
mn := newTestMultiNode(t, multiNodeOpts{
selectionMode: NodeSelectionModeRoundRobin,
chainID: types.RandomID(),
})
err := mn.Dial(tests.Context(t))
assert.EqualError(t, err, fmt.Sprintf("no available nodes for chain %s", mn.chainID.String()))
})`
$DIR/common/client/multi_node_test.go: `t.Run("Fails with wrong node's chainID", func(t *testing.T) {
t.Parallel()
node := newMockNode(t)
multiNodeChainID := types.NewIDFromInt(10)
nodeChainID := types.NewIDFromInt(11)
node.On("ConfiguredChainID").Return(nodeChainID).Twice()
const nodeName = "nodeName"
node.On("String").Return(nodeName).Once()
mn := newTestMultiNode(t, multiNodeOpts{
selectionMode: NodeSelectionModeRoundRobin,
chainID: multiNodeChainID,
nodes: []Node[types.ID, types.Head[Hashable], multiNodeRPCClient]{node},
})
err := mn.Dial(tests.Context(t))
assert.EqualError(t, err, fmt.Sprintf("node %s has configured chain ID %s which does not match multinode configured chain ID of %s", nodeName, nodeChainID, mn.chainID))
})`
$DIR/common/client/multi_node_test.go: `node.On("ConfiguredChainID").Return(nodeChainID).Twice()`
$DIR/common/client/multi_node_test.go: `node.On("String").Return(nodeName).Once()`
$DIR/common/client/multi_node_test.go: `t.Run("Fails if node fails", func(t *testing.T) {
t.Parallel()
node := newMockNode(t)
chainID := types.RandomID()
node.On("ConfiguredChainID").Return(chainID).Once()
expectedError := errors.New("failed to start node")
node.On("Start", mock.Anything).Return(expectedError).Once()
mn := newTestMultiNode(t, multiNodeOpts{
selectionMode: NodeSelectionModeRoundRobin,
chainID: chainID,
nodes: []Node[types.ID, types.Head[Hashable], multiNodeRPCClient]{node},
})
err := mn.Dial(tests.Context(t))
assert.EqualError(t, err, expectedError.Error())
})`
$DIR/common/client/multi_node_test.go: `node.On("ConfiguredChainID").Return(chainID).Once()`
$DIR/common/client/multi_node_test.go: `node.On("Start", mock.Anything).Return(expectedError).Once()`
$DIR/common/client/multi_node_test.go: `t.Run("Closes started nodes on failure", func(t *testing.T) {
t.Parallel()
chainID := types.RandomID()
node1 := newHealthyNode(t, chainID)
node2 := newMockNode(t)
node2.On("ConfiguredChainID").Return(chainID).Once()
expectedError := errors.New("failed to start node")
node2.On("Start", mock.Anything).Return(expectedError).Once()
mn := newTestMultiNode(t, multiNodeOpts{
selectionMode: NodeSelectionModeRoundRobin,
chainID: chainID,
nodes: []Node[types.ID, types.Head[Hashable], multiNodeRPCClient]{node1, node2},
})
err := mn.Dial(tests.Context(t))
assert.EqualError(t, err, expectedError.Error())
})`
$DIR/common/client/multi_node_test.go: `node2.On("ConfiguredChainID").Return(chainID).Once()`
$DIR/common/client/multi_node_test.go: `node2.On("Start", mock.Anything).Return(expectedError).Once()`
$DIR/common/client/multi_node_test.go: `t.Run("Fails with wrong send only node's chainID", func(t *testing.T) {
t.Parallel()
multiNodeChainID := types.NewIDFromInt(10)
node := newHealthyNode(t, multiNodeChainID)
sendOnly := newMockSendOnlyNode(t)
sendOnlyChainID := types.NewIDFromInt(11)
sendOnly.On("ConfiguredChainID").Return(sendOnlyChainID).Twice()
const sendOnlyName = "sendOnlyNodeName"
sendOnly.On("String").Return(sendOnlyName).Once()
mn := newTestMultiNode(t, multiNodeOpts{
selectionMode: NodeSelectionModeRoundRobin,
chainID: multiNodeChainID,
nodes: []Node[types.ID, types.Head[Hashable], multiNodeRPCClient]{node},
sendonlys: []SendOnlyNode[types.ID, multiNodeRPCClient]{sendOnly},
})
err := mn.Dial(tests.Context(t))
assert.EqualError(t, err, fmt.Sprintf("sendonly node %s has configured chain ID %s which does not match multinode configured chain ID of %s", sendOnlyName, sendOnlyChainID, mn.chainID))
})`
$DIR/common/client/multi_node_test.go: `sendOnly.On("ConfiguredChainID").Return(sendOnlyChainID).Twice()`
$DIR/common/client/multi_node_test.go: `sendOnly.On("String").Return(sendOnlyName).Once()`
$DIR/common/client/multi_node_test.go: `node.On("ConfiguredChainID").Return(chainID).Once()`
$DIR/common/client/multi_node_test.go: `node.On("Start", mock.Anything).Return(nil).Once()`
$DIR/common/client/multi_node_test.go: `node.On("Close").Return(nil).Once()`
$DIR/common/client/multi_node_test.go: `t.Run("Fails on send only node failure", func(t *testing.T) {
t.Parallel()
chainID := types.NewIDFromInt(10)
node := newHealthyNode(t, chainID)
sendOnly1 := newHealthySendOnly(t, chainID)
sendOnly2 := newMockSendOnlyNode(t)
sendOnly2.On("ConfiguredChainID").Return(chainID).Once()
expectedError := errors.New("failed to start send only node")
sendOnly2.On("Start", mock.Anything).Return(expectedError).Once()
mn := newTestMultiNode(t, multiNodeOpts{
selectionMode: NodeSelectionModeRoundRobin,
chainID: chainID,
nodes: []Node[types.ID, types.Head[Hashable], multiNodeRPCClient]{node},
sendonlys: []SendOnlyNode[types.ID, multiNodeRPCClient]{sendOnly1, sendOnly2},
})
err := mn.Dial(tests.Context(t))
assert.EqualError(t, err, expectedError.Error())
})`
$DIR/common/client/multi_node_test.go: `sendOnly2.On("ConfiguredChainID").Return(chainID).Once()`
$DIR/common/client/multi_node_test.go: `sendOnly2.On("Start", mock.Anything).Return(expectedError).Once()`
$DIR/common/client/multi_node_test.go: `t.Run("Dial starts periodical reporting", func(t *testing.T) {
t.Parallel()
chainID := types.RandomID()
node1 := newHealthyNode(t, chainID)
node2 := newNodeWithState(t, chainID, nodeStateOutOfSync)
lggr, observedLogs := logger.TestObserved(t, zap.WarnLevel)
mn := newTestMultiNode(t, multiNodeOpts{
selectionMode: NodeSelectionModeRoundRobin,
chainID: chainID,
nodes: []Node[types.ID, types.Head[Hashable], multiNodeRPCClient]{node1, node2},
logger: lggr,
})
mn.reportInterval = tests.TestInterval
defer func() { assert.NoError(t, mn.Close()) }()
err := mn.Dial(tests.Context(t))
require.NoError(t, err)
tests.AssertLogCountEventually(t, observedLogs, "At least one primary node is dead: 1/2 nodes are alive", 2)
})`
$DIR/common/client/multi_node_test.go: `mn.reportInterval = tests.TestInterval`
$DIR/common/client/multi_node_test.go: `tests.AssertLogCountEventually(t, observedLogs, "At least one primary node is dead: 1/2 nodes are alive", 2)`
$DIR/common/client/multi_node_test.go: `mn.reportInterval = tests.TestInterval`
$DIR/common/client/multi_node_test.go: `tests.AssertLogCountEventually(t, observedLogs, "no primary nodes available: 0/1 nodes are alive", 2)`
$DIR/common/client/multi_node_test.go: `err = mn.Healthy()`
$DIR/common/client/multi_node_test.go: `t.Run("Round robin disables lease check", func(t *testing.T) {
t.Parallel()
chainID := types.RandomID()
node := newHealthyNode(t, chainID)
lggr, observedLogs := logger.TestObserved(t, zap.InfoLevel)
mn := newTestMultiNode(t, multiNodeOpts{
selectionMode: NodeSelectionModeRoundRobin,
chainID: chainID,
logger: lggr,
nodes: []Node[types.ID, types.Head[Hashable], multiNodeRPCClient]{node},
})
defer func() { assert.NoError(t, mn.Close()) }()
err := mn.Dial(tests.Context(t))
require.NoError(t, err)
tests.RequireLogMessage(t, observedLogs, "Best node switching is disabled")
})`
$DIR/common/client/multi_node_test.go: `tests.RequireLogMessage(t, observedLogs, "Best node switching is disabled")`
$DIR/common/client/multi_node_test.go: `t.Run("Misconfigured lease check period won't start", func(t *testing.T) {
t.Parallel()
chainID := types.RandomID()
node := newHealthyNode(t, chainID)
lggr, observedLogs := logger.TestObserved(t, zap.InfoLevel)
mn := newTestMultiNode(t, multiNodeOpts{
selectionMode: NodeSelectionModeHighestHead,
chainID: chainID,
logger: lggr,
nodes: []Node[types.ID, types.Head[Hashable], multiNodeRPCClient]{node},
leaseDuration: 0,
})
defer func() { assert.NoError(t, mn.Close()) }()
err := mn.Dial(tests.Context(t))
require.NoError(t, err)
tests.RequireLogMessage(t, observedLogs, "Best node switching is disabled")
})`
$DIR/common/client/multi_node_test.go: `tests.RequireLogMessage(t, observedLogs, "Best node switching is disabled")`
$DIR/common/client/multi_node_test.go: `t.Run("Lease check updates active node", func(t *testing.T) {
t.Parallel()
chainID := types.RandomID()
node := newHealthyNode(t, chainID)
node.On("SubscribersCount").Return(int32(2))
node.On("UnsubscribeAllExceptAliveLoop")
bestNode := newHealthyNode(t, chainID)
nodeSelector := newMockNodeSelector[types.ID, types.Head[Hashable], multiNodeRPCClient](t)
nodeSelector.On("Select").Return(bestNode)
lggr, observedLogs := logger.TestObserved(t, zap.InfoLevel)
mn := newTestMultiNode(t, multiNodeOpts{
selectionMode: NodeSelectionModeHighestHead,
chainID: chainID,
logger: lggr,
nodes: []Node[types.ID, types.Head[Hashable], multiNodeRPCClient]{node, bestNode},
leaseDuration: tests.TestInterval,
})
defer func() { assert.NoError(t, mn.Close()) }()
mn.nodeSelector = nodeSelector
err := mn.Dial(tests.Context(t))
require.NoError(t, err)
tests.AssertLogEventually(t, observedLogs, fmt.Sprintf("Switching to best node from %q to %q", node.String(), bestNode.String()))
tests.AssertEventually(t, func() bool {
mn.activeMu.RLock()
active := mn.activeNode
mn.activeMu.RUnlock()
return bestNode == active
})
})`
$DIR/common/client/multi_node_test.go: `node.On("SubscribersCount").Return(int32(2))`
$DIR/common/client/multi_node_test.go: `node.On("UnsubscribeAllExceptAliveLoop")`
$DIR/common/client/multi_node_test.go: `nodeSelector.On("Select").Return(bestNode)`
$DIR/common/client/multi_node_test.go: `mn.nodeSelector = nodeSelector`
$DIR/common/client/multi_node_test.go: `tests.AssertLogEventually(t, observedLogs, fmt.Sprintf("Switching to best node from %q to %q", node.String(), bestNode.String()))`
$DIR/common/client/multi_node_test.go: `tests.AssertEventually(t, func() bool {
mn.activeMu.RLock()
active := mn.activeNode
mn.activeMu.RUnlock()
return bestNode == active
})`
$DIR/common/client/multi_node_test.go: `mn.activeMu.RLock()`
$DIR/common/client/multi_node_test.go: `mn.activeMu.RUnlock()`
$DIR/common/client/multi_node_test.go: `node.On("Name").Return(name).Once()`
$DIR/common/client/multi_node_test.go: `node.On("State").Return(state).Once()`
$DIR/common/client/multi_node_test.go: `opts.nodes = append(opts.nodes, node)`
$DIR/common/client/multi_node_test.go: `sendOnly.On("Name").Return(sendOnlyName).Once()`
$DIR/common/client/multi_node_test.go: `sendOnly.On("State").Return(state).Once()`
$DIR/common/client/multi_node_test.go: `opts.sendonlys = append(opts.sendonlys, sendOnly)`
$DIR/common/client/multi_node_test.go: `expectedResult[name] = state.String()`
$DIR/common/client/multi_node_test.go: `expectedResult[sendOnlyName] = state.String()`
$DIR/common/client/multi_node_test.go: `t.Run("Returns same node, if it's still healthy", func(t *testing.T) {
t.Parallel()
chainID := types.RandomID()
node1 := newMockNode[types.ID, types.Head[Hashable], multiNodeRPCClient](t)
node1.On("State").Return(nodeStateAlive).Once()
node1.On("String").Return("node1").Maybe()
node2 := newMockNode[types.ID, types.Head[Hashable], multiNodeRPCClient](t)
node2.On("String").Return("node2").Maybe()
mn := newTestMultiNode(t, multiNodeOpts{
selectionMode: NodeSelectionModeRoundRobin,
chainID: chainID,
nodes: []Node[types.ID, types.Head[Hashable], multiNodeRPCClient]{node1, node2},
})
nodeSelector := newMockNodeSelector[types.ID, types.Head[Hashable], multiNodeRPCClient](t)
nodeSelector.On("Select").Return(node1).Once()
mn.nodeSelector = nodeSelector
prevActiveNode, err := mn.selectNode()
require.NoError(t, err)
require.Equal(t, node1.String(), prevActiveNode.String())
newActiveNode, err := mn.selectNode()
require.NoError(t, err)
require.Equal(t, prevActiveNode.String(), newActiveNode.String())
})`
$DIR/common/client/multi_node_test.go: `node1.On("State").Return(nodeStateAlive).Once()`
$DIR/common/client/multi_node_test.go: `node1.On("String").Return("node1").Maybe()`
$DIR/common/client/multi_node_test.go: `node2.On("String").Return("node2").Maybe()`
$DIR/common/client/multi_node_test.go: `nodeSelector.On("Select").Return(node1).Once()`
$DIR/common/client/multi_node_test.go: `mn.nodeSelector = nodeSelector`
$DIR/common/client/multi_node_test.go: `t.Run("Updates node if active is not healthy", func(t *testing.T) {
t.Parallel()
chainID := types.RandomID()
oldBest := newMockNode[types.ID, types.Head[Hashable], multiNodeRPCClient](t)
oldBest.On("String").Return("oldBest").Maybe()
newBest := newMockNode[types.ID, types.Head[Hashable], multiNodeRPCClient](t)
newBest.On("String").Return("newBest").Maybe()
mn := newTestMultiNode(t, multiNodeOpts{
selectionMode: NodeSelectionModeRoundRobin,
chainID: chainID,
nodes: []Node[types.ID, types.Head[Hashable], multiNodeRPCClient]{oldBest, newBest},
})
nodeSelector := newMockNodeSelector[types.ID, types.Head[Hashable], multiNodeRPCClient](t)
nodeSelector.On("Select").Return(oldBest).Once()
mn.nodeSelector = nodeSelector
activeNode, err := mn.selectNode()
require.NoError(t, err)
require.Equal(t, oldBest.String(), activeNode.String())
// old best died, so we should replace it
oldBest.On("State").Return(nodeStateOutOfSync).Twice()
nodeSelector.On("Select").Return(newBest).Once()
newActiveNode, err := mn.selectNode()
require.NoError(t, err)
require.Equal(t, newBest.String(), newActiveNode.String())
})`
$DIR/common/client/multi_node_test.go: `oldBest.On("String").Return("oldBest").Maybe()`
$DIR/common/client/multi_node_test.go: `newBest.On("String").Return("newBest").Maybe()`
$DIR/common/client/multi_node_test.go: `nodeSelector.On("Select").Return(oldBest).Once()`
$DIR/common/client/multi_node_test.go: `mn.nodeSelector = nodeSelector`
$DIR/common/client/multi_node_test.go: `oldBest.On("State").Return(nodeStateOutOfSync).Twice()`
$DIR/common/client/multi_node_test.go: `nodeSelector.On("Select").Return(newBest).Once()`
$DIR/common/client/multi_node_test.go: `nodeSelector.On("Select").Return(nil).Once()`
$DIR/common/client/multi_node_test.go: `nodeSelector.On("Name").Return("MockedNodeSelector").Once()`
$DIR/common/client/multi_node_test.go: `mn.nodeSelector = nodeSelector`
$DIR/common/client/multi_node_test.go: `tests.RequireLogMessage(t, observedLogs, "No live RPC nodes available")`
$DIR/common/client/multi_node_test.go: `t.Run(tc.Name, func(t *testing.T) {
for _, params := range tc.NodeParams {
node := newMockNode[types.ID, types.Head[Hashable], multiNodeRPCClient](t)
node.On("StateAndLatest").Return(params.State, params.BlockNumber, params.TotalDifficulty)
mn.nodes = append(mn.nodes, node)
}
nNodes, blockNum, td := mn.nLiveNodes()
assert.Equal(t, tc.ExpectedNLiveNodes, nNodes)
assert.Equal(t, tc.ExpectedTotalDifficulty, td)
assert.Equal(t, tc.ExpectedBlockNumber, blockNum)
})`
$DIR/common/client/multi_node_test.go: `node.On("StateAndLatest").Return(params.State, params.BlockNumber, params.TotalDifficulty)`
$DIR/common/client/multi_node_test.go: `mn.nodes = append(mn.nodes, node)`
$DIR/common/client/multi_node_test.go: `t.Run("Fails if failed to select active node", func(t *testing.T) {
chainID := types.RandomID()
mn := newTestMultiNode(t, multiNodeOpts{
selectionMode: NodeSelectionModeRoundRobin,
chainID: chainID,
})
nodeSelector := newMockNodeSelector[types.ID, types.Head[Hashable], multiNodeRPCClient](t)
nodeSelector.On("Select").Return(nil).Once()
nodeSelector.On("Name").Return("MockedNodeSelector").Once()
mn.nodeSelector = nodeSelector
err := mn.BatchCallContextAll(tests.Context(t), nil)
require.EqualError(t, err, ErroringNodeError.Error())
})`
$DIR/common/client/multi_node_test.go: `nodeSelector.On("Select").Return(nil).Once()`
$DIR/common/client/multi_node_test.go: `nodeSelector.On("Name").Return("MockedNodeSelector").Once()`
$DIR/common/client/multi_node_test.go: `mn.nodeSelector = nodeSelector`
$DIR/common/client/multi_node_test.go: `t.Run("Returns error if RPC call fails for active node", func(t *testing.T) {
chainID := types.RandomID()
rpc := newMultiNodeRPCClient(t)
expectedError := errors.New("rpc failed to do the batch call")
rpc.On("BatchCallContext", mock.Anything, mock.Anything).Return(expectedError).Once()
node := newMockNode[types.ID, types.Head[Hashable], multiNodeRPCClient](t)
node.On("RPC").Return(rpc)
nodeSelector := newMockNodeSelector[types.ID, types.Head[Hashable], multiNodeRPCClient](t)
nodeSelector.On("Select").Return(node).Once()
mn := newTestMultiNode(t, multiNodeOpts{
selectionMode: NodeSelectionModeRoundRobin,
chainID: chainID,
})
mn.nodeSelector = nodeSelector
err := mn.BatchCallContextAll(tests.Context(t), nil)
require.EqualError(t, err, expectedError.Error())
})`
$DIR/common/client/multi_node_test.go: `rpc.On("BatchCallContext", mock.Anything, mock.Anything).Return(expectedError).Once()`
$DIR/common/client/multi_node_test.go: `node.On("RPC").Return(rpc)`
$DIR/common/client/multi_node_test.go: `nodeSelector.On("Select").Return(node).Once()`
$DIR/common/client/multi_node_test.go: `mn.nodeSelector = nodeSelector`
$DIR/common/client/multi_node_test.go: `t.Run("Waits for all nodes to complete the call and logs results", func(t *testing.T) {
// setup RPCs
failedRPC := newMultiNodeRPCClient(t)
failedRPC.On("BatchCallContext", mock.Anything, mock.Anything).
Return(errors.New("rpc failed to do the batch call")).Once()
okRPC := newMultiNodeRPCClient(t)
okRPC.On("BatchCallContext", mock.Anything, mock.Anything).Return(nil).Twice()
// setup ok and failed auxiliary nodes
okNode := newMockSendOnlyNode[types.ID, multiNodeRPCClient](t)
okNode.On("RPC").Return(okRPC).Once()
okNode.On("State").Return(nodeStateAlive)
failedNode := newMockNode[types.ID, types.Head[Hashable], multiNodeRPCClient](t)
failedNode.On("RPC").Return(failedRPC).Once()
failedNode.On("State").Return(nodeStateAlive)
// setup main node
mainNode := newMockNode[types.ID, types.Head[Hashable], multiNodeRPCClient](t)
mainNode.On("RPC").Return(okRPC)
nodeSelector := newMockNodeSelector[types.ID, types.Head[Hashable], multiNodeRPCClient](t)
nodeSelector.On("Select").Return(mainNode).Once()
lggr, observedLogs := logger.TestObserved(t, zap.DebugLevel)
mn := newTestMultiNode(t, multiNodeOpts{
selectionMode: NodeSelectionModeRoundRobin,
chainID: types.RandomID(),
nodes: []Node[types.ID, types.Head[Hashable], multiNodeRPCClient]{failedNode, mainNode},
sendonlys: []SendOnlyNode[types.ID, multiNodeRPCClient]{okNode},
logger: lggr,
})
mn.nodeSelector = nodeSelector
err := mn.BatchCallContextAll(tests.Context(t), nil)
require.NoError(t, err)
tests.RequireLogMessage(t, observedLogs, "Secondary node BatchCallContext failed")
})`
$DIR/common/client/multi_node_test.go: `failedRPC.On("BatchCallContext", mock.Anything, mock.Anything).
Return(errors.New("rpc failed to do the batch call")).Once()`
$DIR/common/client/multi_node_test.go: `okRPC.On("BatchCallContext", mock.Anything, mock.Anything).Return(nil).Twice()`
$DIR/common/client/multi_node_test.go: `okNode.On("RPC").Return(okRPC).Once()`
$DIR/common/client/multi_node_test.go: `okNode.On("State").Return(nodeStateAlive)`
$DIR/common/client/multi_node_test.go: `failedNode.On("RPC").Return(failedRPC).Once()`
$DIR/common/client/multi_node_test.go: `failedNode.On("State").Return(nodeStateAlive)`
$DIR/common/client/multi_node_test.go: `mainNode.On("RPC").Return(okRPC)`
$DIR/common/client/multi_node_test.go: `nodeSelector.On("Select").Return(mainNode).Once()`
$DIR/common/client/multi_node_test.go: `mn.nodeSelector = nodeSelector`
$DIR/common/client/multi_node_test.go: `tests.RequireLogMessage(t, observedLogs, "Secondary node BatchCallContext failed")`
$DIR/common/client/multi_node_test.go: `okRPC.On("BatchCallContext", mock.Anything, mock.Anything).Return(nil).Twice()`
$DIR/common/client/multi_node_test.go: `healthyNode.On("RPC").Return(okRPC).Once()`
$DIR/common/client/multi_node_test.go: `healthyNode.On("State").Return(nodeStateAlive)`
$DIR/common/client/multi_node_test.go: `deadNode.On("State").Return(nodeStateUnreachable)`
$DIR/common/client/multi_node_test.go: `mainNode.On("RPC").Return(okRPC)`
$DIR/common/client/multi_node_test.go: `nodeSelector.On("Select").Return(mainNode).Once()`
$DIR/common/client/multi_node_test.go: `mn.nodeSelector = nodeSelector`
$DIR/common/client/multi_node_test.go: `rpc.On("SendTransaction", mock.Anything, mock.Anything).Return(txErr).Run(sendTxRun).Maybe()`
$DIR/common/client/multi_node_test.go: `node.On("String").Return("node name").Maybe()`
$DIR/common/client/multi_node_test.go: `node.On("RPC").Return(rpc).Maybe()`
$DIR/common/client/multi_node_test.go: `node.On("State").Return(state).Maybe()`
$DIR/common/client/multi_node_test.go: `node.On("Close").Return(nil).Once()`
$DIR/common/client/multi_node_test.go: `t.Cleanup(func() {
require.NoError(t, mn.Close())
})`
$DIR/common/client/multi_node_test.go: `t.Run("Fails if there is no nodes available", func(t *testing.T) {
mn := newStartedMultiNode(t, multiNodeOpts{
selectionMode: NodeSelectionModeRoundRobin,
chainID: types.RandomID(),
})
err := mn.SendTransaction(tests.Context(t), nil)
assert.EqualError(t, err, ErroringNodeError.Error())
})`
$DIR/common/client/multi_node_test.go: `t.Run("Transaction failure happy path", func(t *testing.T) {
chainID := types.RandomID()
expectedError := errors.New("transaction failed")
mainNode := newNode(t, expectedError, nil)
lggr, observedLogs := logger.TestObserved(t, zap.DebugLevel)
mn := newStartedMultiNode(t, multiNodeOpts{
selectionMode: NodeSelectionModeRoundRobin,
chainID: chainID,
nodes: []Node[types.ID, types.Head[Hashable], multiNodeRPCClient]{mainNode},
sendonlys: []SendOnlyNode[types.ID, multiNodeRPCClient]{newNode(t, errors.New("unexpected error"), nil)},
classifySendTxError: classifySendTxError,
logger: lggr,
})
err := mn.SendTransaction(tests.Context(t), nil)
require.EqualError(t, err, expectedError.Error())
tests.AssertLogCountEventually(t, observedLogs, "Node sent transaction", 2)
tests.AssertLogCountEventually(t, observedLogs, "RPC returned error", 2)
})`
$DIR/common/client/multi_node_test.go: `tests.AssertLogCountEventually(t, observedLogs, "Node sent transaction", 2)`
$DIR/common/client/multi_node_test.go: `tests.AssertLogCountEventually(t, observedLogs, "RPC returned error", 2)`
$DIR/common/client/multi_node_test.go: `t.Run("Transaction success happy path", func(t *testing.T) {
chainID := types.RandomID()
mainNode := newNode(t, nil, nil)
lggr, observedLogs := logger.TestObserved(t, zap.DebugLevel)
mn := newStartedMultiNode(t, multiNodeOpts{
selectionMode: NodeSelectionModeRoundRobin,
chainID: chainID,
nodes: []Node[types.ID, types.Head[Hashable], multiNodeRPCClient]{mainNode},
sendonlys: []SendOnlyNode[types.ID, multiNodeRPCClient]{newNode(t, errors.New("unexpected error"), nil)},
classifySendTxError: classifySendTxError,
logger: lggr,
})
err := mn.SendTransaction(tests.Context(t), nil)
require.NoError(t, err)
tests.AssertLogCountEventually(t, observedLogs, "Node sent transaction", 2)
tests.AssertLogCountEventually(t, observedLogs, "RPC returned error", 1)
})`
$DIR/common/client/multi_node_test.go: `tests.AssertLogCountEventually(t, observedLogs, "Node sent transaction", 2)`
$DIR/common/client/multi_node_test.go: `tests.AssertLogCountEventually(t, observedLogs, "RPC returned error", 1)`
$DIR/common/client/multi_node_test.go: `t.Run("Context expired before collecting sufficient results", func(t *testing.T) {
chainID := types.RandomID()
testContext, testCancel := context.WithCancel(tests.Context(t))
defer testCancel()
mainNode := newNode(t, errors.New("unexpected error"), func(_ mock.Arguments) {
// block caller til end of the test
<-testContext.Done()
})
mn := newStartedMultiNode(t, multiNodeOpts{
selectionMode: NodeSelectionModeRoundRobin,
chainID: chainID,
nodes: []Node[types.ID, types.Head[Hashable], multiNodeRPCClient]{mainNode},
classifySendTxError: classifySendTxError,
})
requestContext, cancel := context.WithCancel(tests.Context(t))
cancel()
err := mn.SendTransaction(requestContext, nil)
require.EqualError(t, err, "context canceled")
})`
$DIR/common/client/multi_node_test.go: `<-testContext.Done()`
$DIR/common/client/multi_node_test.go: `cancel()`
$DIR/common/client/multi_node_test.go: `t.Run("Soft timeout stops results collection", func(t *testing.T) {
chainID := types.RandomID()
expectedError := errors.New("tmp error")
fastNode := newNode(t, expectedError, nil)
// hold reply from the node till end of the test
testContext, testCancel := context.WithCancel(tests.Context(t))
defer testCancel()
slowNode := newNode(t, errors.New("transaction failed"), func(_ mock.Arguments) {
// block caller til end of the test
<-testContext.Done()
})
mn := newStartedMultiNode(t, multiNodeOpts{
selectionMode: NodeSelectionModeRoundRobin,
chainID: chainID,
nodes: []Node[types.ID, types.Head[Hashable], multiNodeRPCClient]{fastNode, slowNode},
classifySendTxError: classifySendTxError,
sendTxSoftTimeout: tests.TestInterval,
})
err := mn.SendTransaction(tests.Context(t), nil)
require.EqualError(t, err, expectedError.Error())
})`
$DIR/common/client/multi_node_test.go: `<-testContext.Done()`
$DIR/common/client/multi_node_test.go: `t.Run("Returns success without waiting for the rest of the nodes", func(t *testing.T) {
chainID := types.RandomID()
fastNode := newNode(t, nil, nil)
// hold reply from the node till end of the test
testContext, testCancel := context.WithCancel(tests.Context(t))
defer testCancel()
slowNode := newNode(t, errors.New("transaction failed"), func(_ mock.Arguments) {
// block caller til end of the test
<-testContext.Done()
})
slowSendOnly := newNode(t, errors.New("send only failed"), func(_ mock.Arguments) {
// block caller til end of the test
<-testContext.Done()
})
lggr, observedLogs := logger.TestObserved(t, zap.WarnLevel)
mn := newTestMultiNode(t, multiNodeOpts{
logger: lggr,
selectionMode: NodeSelectionModeRoundRobin,
chainID: chainID,
nodes: []Node[types.ID, types.Head[Hashable], multiNodeRPCClient]{fastNode, slowNode},
sendonlys: []SendOnlyNode[types.ID, multiNodeRPCClient]{slowSendOnly},
classifySendTxError: classifySendTxError,
sendTxSoftTimeout: tests.TestInterval,
})
assert.NoError(t, mn.StartOnce("startedTestMultiNode", func() error { return nil }))
err := mn.SendTransaction(tests.Context(t), nil)
require.NoError(t, err)
testCancel()
require.NoError(t, mn.Close())
tests.AssertLogEventually(t, observedLogs, "observed invariant violation on SendTransaction")
})`
$DIR/common/client/multi_node_test.go: `<-testContext.Done()`
$DIR/common/client/multi_node_test.go: `<-testContext.Done()`
$DIR/common/client/multi_node_test.go: `testCancel()`
$DIR/common/client/multi_node_test.go: `tests.AssertLogEventually(t, observedLogs, "observed invariant violation on SendTransaction")`
$DIR/common/client/multi_node_test.go: `t.Run("Fails when closed", func(t *testing.T) {
mn := newTestMultiNode(t, multiNodeOpts{
selectionMode: NodeSelectionModeRoundRobin,
chainID: types.RandomID(),
nodes: []Node[types.ID, types.Head[Hashable], multiNodeRPCClient]{newNode(t, nil, nil)},
sendonlys: []SendOnlyNode[types.ID, multiNodeRPCClient]{newNode(t, nil, nil)},
classifySendTxError: classifySendTxError,
})
err := mn.StartOnce("startedTestMultiNode", func() error { return nil })
require.NoError(t, err)
require.NoError(t, mn.Close())
err = mn.SendTransaction(tests.Context(t), nil)
require.EqualError(t, err, "aborted while broadcasting tx - multiNode is stopped: context canceled")
})`
$DIR/common/client/multi_node_test.go: `err = mn.SendTransaction(tests.Context(t), nil)`
$DIR/common/client/multi_node_test.go: `t.Run("Returns error if there is no healthy primary nodes", func(t *testing.T) {
mn := newStartedMultiNode(t, multiNodeOpts{
selectionMode: NodeSelectionModeRoundRobin,
chainID: types.RandomID(),
nodes: []Node[types.ID, types.Head[Hashable], multiNodeRPCClient]{newNodeWithState(t, nodeStateUnreachable, nil, nil)},
sendonlys: []SendOnlyNode[types.ID, multiNodeRPCClient]{newNodeWithState(t, nodeStateUnreachable, nil, nil)},
classifySendTxError: classifySendTxError,
})
err := mn.SendTransaction(tests.Context(t), nil)
assert.EqualError(t, err, ErroringNodeError.Error())
})`
$DIR/common/client/multi_node_test.go: `tests.AssertLogCountEventually(t, observedLogs, "Node sent transaction", 2)`
$DIR/common/client/multi_node_test.go: `tests.AssertLogCountEventually(t, observedLogs, "RPC returned error", 1)`
$DIR/common/client/multi_node_test.go: `codesToCover[code] = struct{}{}`
$DIR/common/client/multi_node_test.go: `delete(codesToCover, code)`
$DIR/common/client/multi_node_test.go: `t.Run(testCase.Name, func(t *testing.T) {
txResult, err := aggregateTxResults(testCase.ResultsByCode)
if testCase.ExpectedTxResult == "" {
assert.NoError(t, err)
} else {
assert.EqualError(t, txResult, testCase.ExpectedTxResult)
}
logger.Sugared(logger.Test(t)).Info("Map: " + fmt.Sprint(testCase.ResultsByCode))
logger.Sugared(logger.Test(t)).Criticalw("observed invariant violation on SendTransaction", "resultsByCode", testCase.ResultsByCode, "err", err)
if testCase.ExpectedCriticalErr == "" {
assert.NoError(t, err)
} else {
assert.EqualError(t, err, testCase.ExpectedCriticalErr)
}
})`
$DIR/common/client/multi_node_test.go: `logger.Sugared(logger.Test(t)).Info("Map: " + fmt.Sprint(testCase.ResultsByCode))`
$DIR/common/client/multi_node_test.go: `logger.Sugared(logger.Test(t)).Criticalw("observed invariant violation on SendTransaction", "resultsByCode", testCase.ResultsByCode, "err", err)`
$DIR/common/client/multi_node_test.go: `delete(codesToCover, codeToIgnore)`
$DIR/common/client/multi_node_test.go: `.Run("Fails without nodes", func(t *testing.T) {
t.Parallel()
mn := newTestMultiNode(t, multiNodeOpts{
selectionMode: NodeSelectionModeRoundRobin,
chainID: types.RandomID(),
})
err := mn.Dial(tests.Context(t))
assert.EqualError(t, err, fmt.Sprintf("no available nodes for chain %s", mn.chainID.String()))
})`
$DIR/common/client/multi_node_test.go: `.RandomID()`
$DIR/common/client/multi_node_test.go: `.Dial(tests.Context(t))`
$DIR/common/client/multi_node_test.go: `.Context(t)`
$DIR/common/client/multi_node_test.go: `.Run("Fails with wrong node's chainID", func(t *testing.T) {
t.Parallel()
node := newMockNode(t)
multiNodeChainID := types.NewIDFromInt(10)
nodeChainID := types.NewIDFromInt(11)
node.On("ConfiguredChainID").Return(nodeChainID).Twice()
const nodeName = "nodeName"
node.On("String").Return(nodeName).Once()
mn := newTestMultiNode(t, multiNodeOpts{
selectionMode: NodeSelectionModeRoundRobin,
chainID: multiNodeChainID,
nodes: []Node[types.ID, types.Head[Hashable], multiNodeRPCClient]{node},
})
err := mn.Dial(tests.Context(t))
assert.EqualError(t, err, fmt.Sprintf("node %s has configured chain ID %s which does not match multinode configured chain ID of %s", nodeName, nodeChainID, mn.chainID))
})`
$DIR/common/client/multi_node_test.go: `.NewIDFromInt(10)`
$DIR/common/client/multi_node_test.go: `.NewIDFromInt(11)`
$DIR/common/client/multi_node_test.go: `.On("ConfiguredChainID")`
$DIR/common/client/multi_node_test.go: `.Return(nodeChainID)`
$DIR/common/client/multi_node_test.go: `.Twice()`
$DIR/common/client/multi_node_test.go: `.On("String")`
$DIR/common/client/multi_node_test.go: `.Return(nodeName)`
$DIR/common/client/multi_node_test.go: `.Once()`
$DIR/common/client/multi_node_test.go: `.Dial(tests.Context(t))`
$DIR/common/client/multi_node_test.go: `.Context(t)`
$DIR/common/client/multi_node_test.go: `.Run("Fails if node fails", func(t *testing.T) {
t.Parallel()
node := newMockNode(t)
chainID := types.RandomID()
node.On("ConfiguredChainID").Return(chainID).Once()
expectedError := errors.New("failed to start node")
node.On("Start", mock.Anything).Return(expectedError).Once()
mn := newTestMultiNode(t, multiNodeOpts{
selectionMode: NodeSelectionModeRoundRobin,
chainID: chainID,
nodes: []Node[types.ID, types.Head[Hashable], multiNodeRPCClient]{node},
})
err := mn.Dial(tests.Context(t))
assert.EqualError(t, err, expectedError.Error())
})`
$DIR/common/client/multi_node_test.go: `.RandomID()`
$DIR/common/client/multi_node_test.go: `.On("ConfiguredChainID")`
$DIR/common/client/multi_node_test.go: `.Return(chainID)`
$DIR/common/client/multi_node_test.go: `.Once()`
$DIR/common/client/multi_node_test.go: `.New("failed to start node")`
$DIR/common/client/multi_node_test.go: `.On("Start", mock.Anything)`
$DIR/common/client/multi_node_test.go: `.Return(expectedError)`
$DIR/common/client/multi_node_test.go: `.Once()`
$DIR/common/client/multi_node_test.go: `.Dial(tests.Context(t))`
$DIR/common/client/multi_node_test.go: `.Context(t)`
$DIR/common/client/multi_node_test.go: `.Run("Closes started nodes on failure", func(t *testing.T) {
t.Parallel()
chainID := types.RandomID()
node1 := newHealthyNode(t, chainID)
node2 := newMockNode(t)
node2.On("ConfiguredChainID").Return(chainID).Once()
expectedError := errors.New("failed to start node")
node2.On("Start", mock.Anything).Return(expectedError).Once()
mn := newTestMultiNode(t, multiNodeOpts{
selectionMode: NodeSelectionModeRoundRobin,
chainID: chainID,
nodes: []Node[types.ID, types.Head[Hashable], multiNodeRPCClient]{node1, node2},
})
err := mn.Dial(tests.Context(t))
assert.EqualError(t, err, expectedError.Error())
})`
$DIR/common/client/multi_node_test.go: `.RandomID()`
$DIR/common/client/multi_node_test.go: `.On("ConfiguredChainID")`
$DIR/common/client/multi_node_test.go: `.Return(chainID)`
$DIR/common/client/multi_node_test.go: `.Once()`
$DIR/common/client/multi_node_test.go: `.New("failed to start node")`
$DIR/common/client/multi_node_test.go: `.On("Start", mock.Anything)`
$DIR/common/client/multi_node_test.go: `.Return(expectedError)`
$DIR/common/client/multi_node_test.go: `.Once()`
$DIR/common/client/multi_node_test.go: `.Dial(tests.Context(t))`
$DIR/common/client/multi_node_test.go: `.Context(t)`
$DIR/common/client/multi_node_test.go: `.Run("Fails with wrong send only node's chainID", func(t *testing.T) {
t.Parallel()
multiNodeChainID := types.NewIDFromInt(10)
node := newHealthyNode(t, multiNodeChainID)
sendOnly := newMockSendOnlyNode(t)
sendOnlyChainID := types.NewIDFromInt(11)
sendOnly.On("ConfiguredChainID").Return(sendOnlyChainID).Twice()
const sendOnlyName = "sendOnlyNodeName"
sendOnly.On("String").Return(sendOnlyName).Once()
mn := newTestMultiNode(t, multiNodeOpts{
selectionMode: NodeSelectionModeRoundRobin,
chainID: multiNodeChainID,
nodes: []Node[types.ID, types.Head[Hashable], multiNodeRPCClient]{node},
sendonlys: []SendOnlyNode[types.ID, multiNodeRPCClient]{sendOnly},
})
err := mn.Dial(tests.Context(t))
assert.EqualError(t, err, fmt.Sprintf("sendonly node %s has configured chain ID %s which does not match multinode configured chain ID of %s", sendOnlyName, sendOnlyChainID, mn.chainID))
})`
$DIR/common/client/multi_node_test.go: `.NewIDFromInt(10)`
$DIR/common/client/multi_node_test.go: `.NewIDFromInt(11)`
$DIR/common/client/multi_node_test.go: `.On("ConfiguredChainID")`
$DIR/common/client/multi_node_test.go: `.Return(sendOnlyChainID)`
$DIR/common/client/multi_node_test.go: `.Twice()`
$DIR/common/client/multi_node_test.go: `.On("String")`
$DIR/common/client/multi_node_test.go: `.Return(sendOnlyName)`
$DIR/common/client/multi_node_test.go: `.Once()`
$DIR/common/client/multi_node_test.go: `.Dial(tests.Context(t))`
$DIR/common/client/multi_node_test.go: `.Context(t)`
$DIR/common/client/multi_node_test.go: `.On("ConfiguredChainID")`
$DIR/common/client/multi_node_test.go: `.Return(chainID)`
$DIR/common/client/multi_node_test.go: `.Once()`
$DIR/common/client/multi_node_test.go: `.On("Start", mock.Anything)`
$DIR/common/client/multi_node_test.go: `.Return(nil)`
$DIR/common/client/multi_node_test.go: `.Once()`
$DIR/common/client/multi_node_test.go: `.On("Close")`
$DIR/common/client/multi_node_test.go: `.Return(nil)`
$DIR/common/client/multi_node_test.go: `.Once()`
$DIR/common/client/multi_node_test.go: `.Run("Fails on send only node failure", func(t *testing.T) {
t.Parallel()
chainID := types.NewIDFromInt(10)
node := newHealthyNode(t, chainID)
sendOnly1 := newHealthySendOnly(t, chainID)
sendOnly2 := newMockSendOnlyNode(t)
sendOnly2.On("ConfiguredChainID").Return(chainID).Once()
expectedError := errors.New("failed to start send only node")
sendOnly2.On("Start", mock.Anything).Return(expectedError).Once()
mn := newTestMultiNode(t, multiNodeOpts{
selectionMode: NodeSelectionModeRoundRobin,
chainID: chainID,
nodes: []Node[types.ID, types.Head[Hashable], multiNodeRPCClient]{node},
sendonlys: []SendOnlyNode[types.ID, multiNodeRPCClient]{sendOnly1, sendOnly2},
})
err := mn.Dial(tests.Context(t))
assert.EqualError(t, err, expectedError.Error())
})`
$DIR/common/client/multi_node_test.go: `.NewIDFromInt(10)`
$DIR/common/client/multi_node_test.go: `.On("ConfiguredChainID")`
$DIR/common/client/multi_node_test.go: `.Return(chainID)`
$DIR/common/client/multi_node_test.go: `.Once()`
$DIR/common/client/multi_node_test.go: `.New("failed to start send only node")`
$DIR/common/client/multi_node_test.go: `.On("Start", mock.Anything)`
$DIR/common/client/multi_node_test.go: `.Return(expectedError)`
$DIR/common/client/multi_node_test.go: `.Once()`
$DIR/common/client/multi_node_test.go: `.Dial(tests.Context(t))`
$DIR/common/client/multi_node_test.go: `.Context(t)`
$DIR/common/client/multi_node_test.go: `.NewIDFromInt(10)`
$DIR/common/client/multi_node_test.go: `.Dial(tests.Context(t))`
$DIR/common/client/multi_node_test.go: `.Context(t)`
$DIR/common/client/multi_node_test.go: `.selectNode()`
$DIR/common/client/multi_node_test.go: `.Run("Dial starts periodical reporting", func(t *testing.T) {
t.Parallel()
chainID := types.RandomID()
node1 := newHealthyNode(t, chainID)
node2 := newNodeWithState(t, chainID, nodeStateOutOfSync)
lggr, observedLogs := logger.TestObserved(t, zap.WarnLevel)
mn := newTestMultiNode(t, multiNodeOpts{
selectionMode: NodeSelectionModeRoundRobin,
chainID: chainID,
nodes: []Node[types.ID, types.Head[Hashable], multiNodeRPCClient]{node1, node2},
logger: lggr,
})
mn.reportInterval = tests.TestInterval
defer func() { assert.NoError(t, mn.Close()) }()
err := mn.Dial(tests.Context(t))
require.NoError(t, err)
tests.AssertLogCountEventually(t, observedLogs, "At least one primary node is dead: 1/2 nodes are alive", 2)
})`
$DIR/common/client/multi_node_test.go: `.RandomID()`
$DIR/common/client/multi_node_test.go: `.TestObserved(t, zap.WarnLevel)`
$DIR/common/client/multi_node_test.go: `.Dial(tests.Context(t))`
$DIR/common/client/multi_node_test.go: `.Context(t)`
$DIR/common/client/multi_node_test.go: `.AssertLogCountEventually(t, observedLogs, "At least one primary node is dead: 1/2 nodes are alive", 2)`
$DIR/common/client/multi_node_test.go: `.RandomID()`
$DIR/common/client/multi_node_test.go: `.TestObserved(t, zap.WarnLevel)`
$DIR/common/client/multi_node_test.go: `.Dial(tests.Context(t))`
$DIR/common/client/multi_node_test.go: `.Context(t)`
$DIR/common/client/multi_node_test.go: `.AssertLogCountEventually(t, observedLogs, "no primary nodes available: 0/1 nodes are alive", 2)`
$DIR/common/client/multi_node_test.go: `.Healthy()`
$DIR/common/client/multi_node_test.go: `.Run("Round robin disables lease check", func(t *testing.T) {
t.Parallel()
chainID := types.RandomID()
node := newHealthyNode(t, chainID)
lggr, observedLogs := logger.TestObserved(t, zap.InfoLevel)
mn := newTestMultiNode(t, multiNodeOpts{
selectionMode: NodeSelectionModeRoundRobin,
chainID: chainID,
logger: lggr,
nodes: []Node[types.ID, types.Head[Hashable], multiNodeRPCClient]{node},
})
defer func() { assert.NoError(t, mn.Close()) }()
err := mn.Dial(tests.Context(t))
require.NoError(t, err)
tests.RequireLogMessage(t, observedLogs, "Best node switching is disabled")
})`
$DIR/common/client/multi_node_test.go: `.RandomID()`
$DIR/common/client/multi_node_test.go: `.TestObserved(t, zap.InfoLevel)`
$DIR/common/client/multi_node_test.go: `.Dial(tests.Context(t))`
$DIR/common/client/multi_node_test.go: `.Context(t)`
$DIR/common/client/multi_node_test.go: `.RequireLogMessage(t, observedLogs, "Best node switching is disabled")`
$DIR/common/client/multi_node_test.go: `.Run("Misconfigured lease check period won't start", func(t *testing.T) {
t.Parallel()
chainID := types.RandomID()
node := newHealthyNode(t, chainID)
lggr, observedLogs := logger.TestObserved(t, zap.InfoLevel)
mn := newTestMultiNode(t, multiNodeOpts{
selectionMode: NodeSelectionModeHighestHead,
chainID: chainID,
logger: lggr,
nodes: []Node[types.ID, types.Head[Hashable], multiNodeRPCClient]{node},
leaseDuration: 0,
})
defer func() { assert.NoError(t, mn.Close()) }()
err := mn.Dial(tests.Context(t))
require.NoError(t, err)
tests.RequireLogMessage(t, observedLogs, "Best node switching is disabled")
})`
$DIR/common/client/multi_node_test.go: `.RandomID()`
$DIR/common/client/multi_node_test.go: `.TestObserved(t, zap.InfoLevel)`
$DIR/common/client/multi_node_test.go: `.Dial(tests.Context(t))`
$DIR/common/client/multi_node_test.go: `.Context(t)`
$DIR/common/client/multi_node_test.go: `.RequireLogMessage(t, observedLogs, "Best node switching is disabled")`
$DIR/common/client/multi_node_test.go: `.Run("Lease check updates active node", func(t *testing.T) {
t.Parallel()
chainID := types.RandomID()
node := newHealthyNode(t, chainID)
node.On("SubscribersCount").Return(int32(2))
node.On("UnsubscribeAllExceptAliveLoop")
bestNode := newHealthyNode(t, chainID)
nodeSelector := newMockNodeSelector[types.ID, types.Head[Hashable], multiNodeRPCClient](t)
nodeSelector.On("Select").Return(bestNode)
lggr, observedLogs := logger.TestObserved(t, zap.InfoLevel)
mn := newTestMultiNode(t, multiNodeOpts{
selectionMode: NodeSelectionModeHighestHead,
chainID: chainID,
logger: lggr,
nodes: []Node[types.ID, types.Head[Hashable], multiNodeRPCClient]{node, bestNode},
leaseDuration: tests.TestInterval,
})
defer func() { assert.NoError(t, mn.Close()) }()
mn.nodeSelector = nodeSelector
err := mn.Dial(tests.Context(t))
require.NoError(t, err)
tests.AssertLogEventually(t, observedLogs, fmt.Sprintf("Switching to best node from %q to %q", node.String(), bestNode.String()))
tests.AssertEventually(t, func() bool {
mn.activeMu.RLock()
active := mn.activeNode
mn.activeMu.RUnlock()
return bestNode == active
})
})`
$DIR/common/client/multi_node_test.go: `.RandomID()`
$DIR/common/client/multi_node_test.go: `.On("SubscribersCount")`
$DIR/common/client/multi_node_test.go: `.Return(int32(2))`
$DIR/common/client/multi_node_test.go: `.On("UnsubscribeAllExceptAliveLoop")`
$DIR/common/client/multi_node_test.go: `.On("Select")`
$DIR/common/client/multi_node_test.go: `.Return(bestNode)`
$DIR/common/client/multi_node_test.go: `.TestObserved(t, zap.InfoLevel)`
$DIR/common/client/multi_node_test.go: `.Dial(tests.Context(t))`
$DIR/common/client/multi_node_test.go: `.Context(t)`
$DIR/common/client/multi_node_test.go: `.AssertLogEventually(t, observedLogs, fmt.Sprintf("Switching to best node from %q to %q", node.String(), bestNode.String()))`
$DIR/common/client/multi_node_test.go: `.Sprintf("Switching to best node from %q to %q", node.String(), bestNode.String())`
$DIR/common/client/multi_node_test.go: `.String()`
$DIR/common/client/multi_node_test.go: `.String()`
$DIR/common/client/multi_node_test.go: `.AssertEventually(t, func() bool {
mn.activeMu.RLock()
active := mn.activeNode
mn.activeMu.RUnlock()
return bestNode == active
})`
$DIR/common/client/multi_node_test.go: `.activeMu.RLock()`
$DIR/common/client/multi_node_test.go: `.activeMu.RUnlock()`
$DIR/common/client/multi_node_test.go: `.NewIDFromInt(10)`
$DIR/common/client/multi_node_test.go: `.On("Name")`
$DIR/common/client/multi_node_test.go: `.Return(name)`
$DIR/common/client/multi_node_test.go: `.Once()`
$DIR/common/client/multi_node_test.go: `.On("State")`
$DIR/common/client/multi_node_test.go: `.Return(state)`
$DIR/common/client/multi_node_test.go: `.Once()`
$DIR/common/client/multi_node_test.go: `.On("Name")`
$DIR/common/client/multi_node_test.go: `.Return(sendOnlyName)`
$DIR/common/client/multi_node_test.go: `.Once()`
$DIR/common/client/multi_node_test.go: `.On("State")`
$DIR/common/client/multi_node_test.go: `.Return(state)`
$DIR/common/client/multi_node_test.go: `.Once()`
$DIR/common/client/multi_node_test.go: `.String()`
$DIR/common/client/multi_node_test.go: `.String()`
$DIR/common/client/multi_node_test.go: `.NodeStates()`
$DIR/common/client/multi_node_test.go: `.Run("Returns same node, if it's still healthy", func(t *testing.T) {
t.Parallel()
chainID := types.RandomID()
node1 := newMockNode[types.ID, types.Head[Hashable], multiNodeRPCClient](t)
node1.On("State").Return(nodeStateAlive).Once()
node1.On("String").Return("node1").Maybe()
node2 := newMockNode[types.ID, types.Head[Hashable], multiNodeRPCClient](t)
node2.On("String").Return("node2").Maybe()
mn := newTestMultiNode(t, multiNodeOpts{
selectionMode: NodeSelectionModeRoundRobin,
chainID: chainID,
nodes: []Node[types.ID, types.Head[Hashable], multiNodeRPCClient]{node1, node2},
})
nodeSelector := newMockNodeSelector[types.ID, types.Head[Hashable], multiNodeRPCClient](t)
nodeSelector.On("Select").Return(node1).Once()
mn.nodeSelector = nodeSelector
prevActiveNode, err := mn.selectNode()
require.NoError(t, err)
require.Equal(t, node1.String(), prevActiveNode.String())
newActiveNode, err := mn.selectNode()
require.NoError(t, err)
require.Equal(t, prevActiveNode.String(), newActiveNode.String())
})`
$DIR/common/client/multi_node_test.go: `.RandomID()`
$DIR/common/client/multi_node_test.go: `.On("State")`
$DIR/common/client/multi_node_test.go: `.Return(nodeStateAlive)`
$DIR/common/client/multi_node_test.go: `.Once()`
$DIR/common/client/multi_node_test.go: `.On("String")`
$DIR/common/client/multi_node_test.go: `.Return("node1")`
$DIR/common/client/multi_node_test.go: `.Maybe()`
$DIR/common/client/multi_node_test.go: `.On("String")`
$DIR/common/client/multi_node_test.go: `.Return("node2")`
$DIR/common/client/multi_node_test.go: `.Maybe()`
$DIR/common/client/multi_node_test.go: `.On("Select")`
$DIR/common/client/multi_node_test.go: `.Return(node1)`
$DIR/common/client/multi_node_test.go: `.Once()`
$DIR/common/client/multi_node_test.go: `.selectNode()`
$DIR/common/client/multi_node_test.go: `.selectNode()`
$DIR/common/client/multi_node_test.go: `.Run("Updates node if active is not healthy", func(t *testing.T) {
t.Parallel()
chainID := types.RandomID()
oldBest := newMockNode[types.ID, types.Head[Hashable], multiNodeRPCClient](t)
oldBest.On("String").Return("oldBest").Maybe()
newBest := newMockNode[types.ID, types.Head[Hashable], multiNodeRPCClient](t)
newBest.On("String").Return("newBest").Maybe()
mn := newTestMultiNode(t, multiNodeOpts{
selectionMode: NodeSelectionModeRoundRobin,
chainID: chainID,
nodes: []Node[types.ID, types.Head[Hashable], multiNodeRPCClient]{oldBest, newBest},
})
nodeSelector := newMockNodeSelector[types.ID, types.Head[Hashable], multiNodeRPCClient](t)
nodeSelector.On("Select").Return(oldBest).Once()
mn.nodeSelector = nodeSelector
activeNode, err := mn.selectNode()
require.NoError(t, err)
require.Equal(t, oldBest.String(), activeNode.String())
// old best died, so we should replace it
oldBest.On("State").Return(nodeStateOutOfSync).Twice()
nodeSelector.On("Select").Return(newBest).Once()
newActiveNode, err := mn.selectNode()
require.NoError(t, err)
require.Equal(t, newBest.String(), newActiveNode.String())
})`
$DIR/common/client/multi_node_test.go: `.RandomID()`
$DIR/common/client/multi_node_test.go: `.On("String")`
$DIR/common/client/multi_node_test.go: `.Return("oldBest")`
$DIR/common/client/multi_node_test.go: `.Maybe()`
$DIR/common/client/multi_node_test.go: `.On("String")`
$DIR/common/client/multi_node_test.go: `.Return("newBest")`
$DIR/common/client/multi_node_test.go: `.Maybe()`
$DIR/common/client/multi_node_test.go: `.On("Select")`
$DIR/common/client/multi_node_test.go: `.Return(oldBest)`
$DIR/common/client/multi_node_test.go: `.Once()`
$DIR/common/client/multi_node_test.go: `.selectNode()`
$DIR/common/client/multi_node_test.go: `.On("State")`
$DIR/common/client/multi_node_test.go: `.Return(nodeStateOutOfSync)`
$DIR/common/client/multi_node_test.go: `.Twice()`
$DIR/common/client/multi_node_test.go: `.On("Select")`
$DIR/common/client/multi_node_test.go: `.Return(newBest)`
$DIR/common/client/multi_node_test.go: `.Once()`
$DIR/common/client/multi_node_test.go: `.selectNode()`
$DIR/common/client/multi_node_test.go: `.RandomID()`
$DIR/common/client/multi_node_test.go: `.TestObserved(t, zap.InfoLevel)`
$DIR/common/client/multi_node_test.go: `.On("Select")`
$DIR/common/client/multi_node_test.go: `.Return(nil)`
$DIR/common/client/multi_node_test.go: `.Once()`
$DIR/common/client/multi_node_test.go: `.On("Name")`
$DIR/common/client/multi_node_test.go: `.Return("MockedNodeSelector")`
$DIR/common/client/multi_node_test.go: `.Once()`
$DIR/common/client/multi_node_test.go: `.selectNode()`
$DIR/common/client/multi_node_test.go: `.RequireLogMessage(t, observedLogs, "No live RPC nodes available")`
$DIR/common/client/multi_node_test.go: `.NewInt(0)`
$DIR/common/client/multi_node_test.go: `.NewInt(10)`
$DIR/common/client/multi_node_test.go: `.NewInt(2000)`
$DIR/common/client/multi_node_test.go: `.NewInt(9)`
$DIR/common/client/multi_node_test.go: `.NewInt(10)`
$DIR/common/client/multi_node_test.go: `.RandomID()`
$DIR/common/client/multi_node_test.go: `.Run(tc.Name, func(t *testing.T) {
for _, params := range tc.NodeParams {
node := newMockNode[types.ID, types.Head[Hashable], multiNodeRPCClient](t)
node.On("StateAndLatest").Return(params.State, params.BlockNumber, params.TotalDifficulty)
mn.nodes = append(mn.nodes, node)
}
nNodes, blockNum, td := mn.nLiveNodes()
assert.Equal(t, tc.ExpectedNLiveNodes, nNodes)
assert.Equal(t, tc.ExpectedTotalDifficulty, td)
assert.Equal(t, tc.ExpectedBlockNumber, blockNum)
})`
$DIR/common/client/multi_node_test.go: `.On("StateAndLatest")`
$DIR/common/client/multi_node_test.go: `.Return(params.State, params.BlockNumber, params.TotalDifficulty)`
$DIR/common/client/multi_node_test.go: `.nLiveNodes()`
$DIR/common/client/multi_node_test.go: `.Run("Fails if failed to select active node", func(t *testing.T) {
chainID := types.RandomID()
mn := newTestMultiNode(t, multiNodeOpts{
selectionMode: NodeSelectionModeRoundRobin,
chainID: chainID,
})
nodeSelector := newMockNodeSelector[types.ID, types.Head[Hashable], multiNodeRPCClient](t)
nodeSelector.On("Select").Return(nil).Once()
nodeSelector.On("Name").Return("MockedNodeSelector").Once()
mn.nodeSelector = nodeSelector
err := mn.BatchCallContextAll(tests.Context(t), nil)
require.EqualError(t, err, ErroringNodeError.Error())
})`
$DIR/common/client/multi_node_test.go: `.RandomID()`
$DIR/common/client/multi_node_test.go: `.On("Select")`
$DIR/common/client/multi_node_test.go: `.Return(nil)`
$DIR/common/client/multi_node_test.go: `.Once()`
$DIR/common/client/multi_node_test.go: `.On("Name")`
$DIR/common/client/multi_node_test.go: `.Return("MockedNodeSelector")`
$DIR/common/client/multi_node_test.go: `.Once()`
$DIR/common/client/multi_node_test.go: `.BatchCallContextAll(tests.Context(t), nil)`
$DIR/common/client/multi_node_test.go: `.Context(t)`
$DIR/common/client/multi_node_test.go: `.Run("Returns error if RPC call fails for active node", func(t *testing.T) {
chainID := types.RandomID()
rpc := newMultiNodeRPCClient(t)
expectedError := errors.New("rpc failed to do the batch call")
rpc.On("BatchCallContext", mock.Anything, mock.Anything).Return(expectedError).Once()
node := newMockNode[types.ID, types.Head[Hashable], multiNodeRPCClient](t)
node.On("RPC").Return(rpc)
nodeSelector := newMockNodeSelector[types.ID, types.Head[Hashable], multiNodeRPCClient](t)
nodeSelector.On("Select").Return(node).Once()
mn := newTestMultiNode(t, multiNodeOpts{
selectionMode: NodeSelectionModeRoundRobin,
chainID: chainID,
})
mn.nodeSelector = nodeSelector
err := mn.BatchCallContextAll(tests.Context(t), nil)
require.EqualError(t, err, expectedError.Error())
})`
$DIR/common/client/multi_node_test.go: `.RandomID()`
$DIR/common/client/multi_node_test.go: `.New("rpc failed to do the batch call")`
$DIR/common/client/multi_node_test.go: `.On("BatchCallContext", mock.Anything, mock.Anything)`
$DIR/common/client/multi_node_test.go: `.Return(expectedError)`
$DIR/common/client/multi_node_test.go: `.Once()`
$DIR/common/client/multi_node_test.go: `.On("RPC")`
$DIR/common/client/multi_node_test.go: `.Return(rpc)`
$DIR/common/client/multi_node_test.go: `.On("Select")`
$DIR/common/client/multi_node_test.go: `.Return(node)`
$DIR/common/client/multi_node_test.go: `.Once()`
$DIR/common/client/multi_node_test.go: `.BatchCallContextAll(tests.Context(t), nil)`
$DIR/common/client/multi_node_test.go: `.Context(t)`
$DIR/common/client/multi_node_test.go: `.Run("Waits for all nodes to complete the call and logs results", func(t *testing.T) {
// setup RPCs
failedRPC := newMultiNodeRPCClient(t)
failedRPC.On("BatchCallContext", mock.Anything, mock.Anything).
Return(errors.New("rpc failed to do the batch call")).Once()
okRPC := newMultiNodeRPCClient(t)
okRPC.On("BatchCallContext", mock.Anything, mock.Anything).Return(nil).Twice()
// setup ok and failed auxiliary nodes
okNode := newMockSendOnlyNode[types.ID, multiNodeRPCClient](t)
okNode.On("RPC").Return(okRPC).Once()
okNode.On("State").Return(nodeStateAlive)
failedNode := newMockNode[types.ID, types.Head[Hashable], multiNodeRPCClient](t)
failedNode.On("RPC").Return(failedRPC).Once()
failedNode.On("State").Return(nodeStateAlive)
// setup main node
mainNode := newMockNode[types.ID, types.Head[Hashable], multiNodeRPCClient](t)
mainNode.On("RPC").Return(okRPC)
nodeSelector := newMockNodeSelector[types.ID, types.Head[Hashable], multiNodeRPCClient](t)
nodeSelector.On("Select").Return(mainNode).Once()
lggr, observedLogs := logger.TestObserved(t, zap.DebugLevel)
mn := newTestMultiNode(t, multiNodeOpts{
selectionMode: NodeSelectionModeRoundRobin,
chainID: types.RandomID(),
nodes: []Node[types.ID, types.Head[Hashable], multiNodeRPCClient]{failedNode, mainNode},
sendonlys: []SendOnlyNode[types.ID, multiNodeRPCClient]{okNode},
logger: lggr,
})
mn.nodeSelector = nodeSelector
err := mn.BatchCallContextAll(tests.Context(t), nil)
require.NoError(t, err)
tests.RequireLogMessage(t, observedLogs, "Secondary node BatchCallContext failed")
})`
$DIR/common/client/multi_node_test.go: `.On("BatchCallContext", mock.Anything, mock.Anything)`
$DIR/common/client/multi_node_test.go: `.
Return(errors.New("rpc failed to do the batch call"))`
$DIR/common/client/multi_node_test.go: `.New("rpc failed to do the batch call")`
$DIR/common/client/multi_node_test.go: `.Once()`
$DIR/common/client/multi_node_test.go: `.On("BatchCallContext", mock.Anything, mock.Anything)`
$DIR/common/client/multi_node_test.go: `.Return(nil)`
$DIR/common/client/multi_node_test.go: `.Twice()`
$DIR/common/client/multi_node_test.go: `.On("RPC")`
$DIR/common/client/multi_node_test.go: `.Return(okRPC)`
$DIR/common/client/multi_node_test.go: `.Once()`
$DIR/common/client/multi_node_test.go: `.On("State")`
$DIR/common/client/multi_node_test.go: `.Return(nodeStateAlive)`
$DIR/common/client/multi_node_test.go: `.On("RPC")`
$DIR/common/client/multi_node_test.go: `.Return(failedRPC)`
$DIR/common/client/multi_node_test.go: `.Once()`
$DIR/common/client/multi_node_test.go: `.On("State")`
$DIR/common/client/multi_node_test.go: `.Return(nodeStateAlive)`
$DIR/common/client/multi_node_test.go: `.On("RPC")`
$DIR/common/client/multi_node_test.go: `.Return(okRPC)`
$DIR/common/client/multi_node_test.go: `.On("Select")`
$DIR/common/client/multi_node_test.go: `.Return(mainNode)`
$DIR/common/client/multi_node_test.go: `.Once()`
$DIR/common/client/multi_node_test.go: `.TestObserved(t, zap.DebugLevel)`
$DIR/common/client/multi_node_test.go: `.RandomID()`
$DIR/common/client/multi_node_test.go: `.BatchCallContextAll(tests.Context(t), nil)`
$DIR/common/client/multi_node_test.go: `.Context(t)`
$DIR/common/client/multi_node_test.go: `.RequireLogMessage(t, observedLogs, "Secondary node BatchCallContext failed")`
$DIR/common/client/multi_node_test.go: `.On("BatchCallContext", mock.Anything, mock.Anything)`
$DIR/common/client/multi_node_test.go: `.Return(nil)`
$DIR/common/client/multi_node_test.go: `.Twice()`
$DIR/common/client/multi_node_test.go: `.On("RPC")`
$DIR/common/client/multi_node_test.go: `.Return(okRPC)`
$DIR/common/client/multi_node_test.go: `.Once()`
$DIR/common/client/multi_node_test.go: `.On("State")`
$DIR/common/client/multi_node_test.go: `.Return(nodeStateAlive)`
$DIR/common/client/multi_node_test.go: `.On("State")`
$DIR/common/client/multi_node_test.go: `.Return(nodeStateUnreachable)`
$DIR/common/client/multi_node_test.go: `.On("RPC")`
$DIR/common/client/multi_node_test.go: `.Return(okRPC)`
$DIR/common/client/multi_node_test.go: `.On("Select")`
$DIR/common/client/multi_node_test.go: `.Return(mainNode)`
$DIR/common/client/multi_node_test.go: `.Once()`
$DIR/common/client/multi_node_test.go: `.RandomID()`
$DIR/common/client/multi_node_test.go: `.BatchCallContextAll(tests.Context(t), nil)`
$DIR/common/client/multi_node_test.go: `.Context(t)`
$DIR/common/client/multi_node_test.go: `.On("SendTransaction", mock.Anything, mock.Anything)`
$DIR/common/client/multi_node_test.go: `.Return(txErr)`
$DIR/common/client/multi_node_test.go: `.Run(sendTxRun)`
$DIR/common/client/multi_node_test.go: `.Maybe()`
$DIR/common/client/multi_node_test.go: `.On("String")`
$DIR/common/client/multi_node_test.go: `.Return("node name")`
$DIR/common/client/multi_node_test.go: `.Maybe()`
$DIR/common/client/multi_node_test.go: `.On("RPC")`
$DIR/common/client/multi_node_test.go: `.Return(rpc)`
$DIR/common/client/multi_node_test.go: `.Maybe()`
$DIR/common/client/multi_node_test.go: `.On("State")`
$DIR/common/client/multi_node_test.go: `.Return(state)`
$DIR/common/client/multi_node_test.go: `.Maybe()`
$DIR/common/client/multi_node_test.go: `.On("Close")`
$DIR/common/client/multi_node_test.go: `.Return(nil)`
$DIR/common/client/multi_node_test.go: `.Once()`
$DIR/common/client/multi_node_test.go: `.StartOnce("startedTestMultiNode", func() error { return nil })`
$DIR/common/client/multi_node_test.go: `.Cleanup(func() {
require.NoError(t, mn.Close())
})`
$DIR/common/client/multi_node_test.go: `.Run("Fails if there is no nodes available", func(t *testing.T) {
mn := newStartedMultiNode(t, multiNodeOpts{
selectionMode: NodeSelectionModeRoundRobin,
chainID: types.RandomID(),
})
err := mn.SendTransaction(tests.Context(t), nil)
assert.EqualError(t, err, ErroringNodeError.Error())
})`
$DIR/common/client/multi_node_test.go: `.RandomID()`
$DIR/common/client/multi_node_test.go: `.SendTransaction(tests.Context(t), nil)`
$DIR/common/client/multi_node_test.go: `.Context(t)`
$DIR/common/client/multi_node_test.go: `.Run("Transaction failure happy path", func(t *testing.T) {
chainID := types.RandomID()
expectedError := errors.New("transaction failed")
mainNode := newNode(t, expectedError, nil)
lggr, observedLogs := logger.TestObserved(t, zap.DebugLevel)
mn := newStartedMultiNode(t, multiNodeOpts{
selectionMode: NodeSelectionModeRoundRobin,
chainID: chainID,
nodes: []Node[types.ID, types.Head[Hashable], multiNodeRPCClient]{mainNode},
sendonlys: []SendOnlyNode[types.ID, multiNodeRPCClient]{newNode(t, errors.New("unexpected error"), nil)},
classifySendTxError: classifySendTxError,
logger: lggr,
})
err := mn.SendTransaction(tests.Context(t), nil)
require.EqualError(t, err, expectedError.Error())
tests.AssertLogCountEventually(t, observedLogs, "Node sent transaction", 2)
tests.AssertLogCountEventually(t, observedLogs, "RPC returned error", 2)
})`
$DIR/common/client/multi_node_test.go: `.RandomID()`
$DIR/common/client/multi_node_test.go: `.New("transaction failed")`
$DIR/common/client/multi_node_test.go: `.TestObserved(t, zap.DebugLevel)`
$DIR/common/client/multi_node_test.go: `.New("unexpected error")`
$DIR/common/client/multi_node_test.go: `.SendTransaction(tests.Context(t), nil)`
$DIR/common/client/multi_node_test.go: `.Context(t)`
$DIR/common/client/multi_node_test.go: `.AssertLogCountEventually(t, observedLogs, "Node sent transaction", 2)`
$DIR/common/client/multi_node_test.go: `.AssertLogCountEventually(t, observedLogs, "RPC returned error", 2)`
$DIR/common/client/multi_node_test.go: `.Run("Transaction success happy path", func(t *testing.T) {
chainID := types.RandomID()
mainNode := newNode(t, nil, nil)
lggr, observedLogs := logger.TestObserved(t, zap.DebugLevel)
mn := newStartedMultiNode(t, multiNodeOpts{
selectionMode: NodeSelectionModeRoundRobin,
chainID: chainID,
nodes: []Node[types.ID, types.Head[Hashable], multiNodeRPCClient]{mainNode},
sendonlys: []SendOnlyNode[types.ID, multiNodeRPCClient]{newNode(t, errors.New("unexpected error"), nil)},
classifySendTxError: classifySendTxError,
logger: lggr,
})
err := mn.SendTransaction(tests.Context(t), nil)
require.NoError(t, err)
tests.AssertLogCountEventually(t, observedLogs, "Node sent transaction", 2)
tests.AssertLogCountEventually(t, observedLogs, "RPC returned error", 1)
})`
$DIR/common/client/multi_node_test.go: `.RandomID()`
$DIR/common/client/multi_node_test.go: `.TestObserved(t, zap.DebugLevel)`
$DIR/common/client/multi_node_test.go: `.New("unexpected error")`
$DIR/common/client/multi_node_test.go: `.SendTransaction(tests.Context(t), nil)`
$DIR/common/client/multi_node_test.go: `.Context(t)`
$DIR/common/client/multi_node_test.go: `.AssertLogCountEventually(t, observedLogs, "Node sent transaction", 2)`
$DIR/common/client/multi_node_test.go: `.AssertLogCountEventually(t, observedLogs, "RPC returned error", 1)`
$DIR/common/client/multi_node_test.go: `.Run("Context expired before collecting sufficient results", func(t *testing.T) {
chainID := types.RandomID()
testContext, testCancel := context.WithCancel(tests.Context(t))
defer testCancel()
mainNode := newNode(t, errors.New("unexpected error"), func(_ mock.Arguments) {
// block caller til end of the test
<-testContext.Done()
})
mn := newStartedMultiNode(t, multiNodeOpts{
selectionMode: NodeSelectionModeRoundRobin,
chainID: chainID,
nodes: []Node[types.ID, types.Head[Hashable], multiNodeRPCClient]{mainNode},
classifySendTxError: classifySendTxError,
})
requestContext, cancel := context.WithCancel(tests.Context(t))
cancel()
err := mn.SendTransaction(requestContext, nil)
require.EqualError(t, err, "context canceled")
})`
$DIR/common/client/multi_node_test.go: `.RandomID()`
$DIR/common/client/multi_node_test.go: `.WithCancel(tests.Context(t))`
$DIR/common/client/multi_node_test.go: `.Context(t)`
$DIR/common/client/multi_node_test.go: `.New("unexpected error")`
$DIR/common/client/multi_node_test.go: `.Done()`
$DIR/common/client/multi_node_test.go: `.WithCancel(tests.Context(t))`
$DIR/common/client/multi_node_test.go: `.Context(t)`
$DIR/common/client/multi_node_test.go: `.SendTransaction(requestContext, nil)`
$DIR/common/client/multi_node_test.go: `.Run("Soft timeout stops results collection", func(t *testing.T) {
chainID := types.RandomID()
expectedError := errors.New("tmp error")
fastNode := newNode(t, expectedError, nil)
// hold reply from the node till end of the test
testContext, testCancel := context.WithCancel(tests.Context(t))
defer testCancel()
slowNode := newNode(t, errors.New("transaction failed"), func(_ mock.Arguments) {
// block caller til end of the test
<-testContext.Done()
})
mn := newStartedMultiNode(t, multiNodeOpts{
selectionMode: NodeSelectionModeRoundRobin,
chainID: chainID,
nodes: []Node[types.ID, types.Head[Hashable], multiNodeRPCClient]{fastNode, slowNode},
classifySendTxError: classifySendTxError,
sendTxSoftTimeout: tests.TestInterval,
})
err := mn.SendTransaction(tests.Context(t), nil)
require.EqualError(t, err, expectedError.Error())
})`
$DIR/common/client/multi_node_test.go: `.RandomID()`
$DIR/common/client/multi_node_test.go: `.New("tmp error")`
$DIR/common/client/multi_node_test.go: `.WithCancel(tests.Context(t))`
$DIR/common/client/multi_node_test.go: `.Context(t)`
$DIR/common/client/multi_node_test.go: `.New("transaction failed")`
$DIR/common/client/multi_node_test.go: `.Done()`
$DIR/common/client/multi_node_test.go: `.SendTransaction(tests.Context(t), nil)`
$DIR/common/client/multi_node_test.go: `.Context(t)`
$DIR/common/client/multi_node_test.go: `.Run("Returns success without waiting for the rest of the nodes", func(t *testing.T) {
chainID := types.RandomID()
fastNode := newNode(t, nil, nil)
// hold reply from the node till end of the test
testContext, testCancel := context.WithCancel(tests.Context(t))
defer testCancel()
slowNode := newNode(t, errors.New("transaction failed"), func(_ mock.Arguments) {
// block caller til end of the test
<-testContext.Done()
})
slowSendOnly := newNode(t, errors.New("send only failed"), func(_ mock.Arguments) {
// block caller til end of the test
<-testContext.Done()
})
lggr, observedLogs := logger.TestObserved(t, zap.WarnLevel)
mn := newTestMultiNode(t, multiNodeOpts{
logger: lggr,
selectionMode: NodeSelectionModeRoundRobin,
chainID: chainID,
nodes: []Node[types.ID, types.Head[Hashable], multiNodeRPCClient]{fastNode, slowNode},
sendonlys: []SendOnlyNode[types.ID, multiNodeRPCClient]{slowSendOnly},
classifySendTxError: classifySendTxError,
sendTxSoftTimeout: tests.TestInterval,
})
assert.NoError(t, mn.StartOnce("startedTestMultiNode", func() error { return nil }))
err := mn.SendTransaction(tests.Context(t), nil)
require.NoError(t, err)
testCancel()
require.NoError(t, mn.Close())
tests.AssertLogEventually(t, observedLogs, "observed invariant violation on SendTransaction")
})`
$DIR/common/client/multi_node_test.go: `.RandomID()`
$DIR/common/client/multi_node_test.go: `.WithCancel(tests.Context(t))`
$DIR/common/client/multi_node_test.go: `.Context(t)`
$DIR/common/client/multi_node_test.go: `.New("transaction failed")`
$DIR/common/client/multi_node_test.go: `.Done()`
$DIR/common/client/multi_node_test.go: `.New("send only failed")`
$DIR/common/client/multi_node_test.go: `.Done()`
$DIR/common/client/multi_node_test.go: `.TestObserved(t, zap.WarnLevel)`
$DIR/common/client/multi_node_test.go: `.SendTransaction(tests.Context(t), nil)`
$DIR/common/client/multi_node_test.go: `.Context(t)`
$DIR/common/client/multi_node_test.go: `.AssertLogEventually(t, observedLogs, "observed invariant violation on SendTransaction")`
$DIR/common/client/multi_node_test.go: `.Run("Fails when closed", func(t *testing.T) {
mn := newTestMultiNode(t, multiNodeOpts{
selectionMode: NodeSelectionModeRoundRobin,
chainID: types.RandomID(),
nodes: []Node[types.ID, types.Head[Hashable], multiNodeRPCClient]{newNode(t, nil, nil)},
sendonlys: []SendOnlyNode[types.ID, multiNodeRPCClient]{newNode(t, nil, nil)},
classifySendTxError: classifySendTxError,
})
err := mn.StartOnce("startedTestMultiNode", func() error { return nil })
require.NoError(t, err)
require.NoError(t, mn.Close())
err = mn.SendTransaction(tests.Context(t), nil)
require.EqualError(t, err, "aborted while broadcasting tx - multiNode is stopped: context canceled")
})`
$DIR/common/client/multi_node_test.go: `.RandomID()`
$DIR/common/client/multi_node_test.go: `.StartOnce("startedTestMultiNode", func() error { return nil })`
$DIR/common/client/multi_node_test.go: `.SendTransaction(tests.Context(t), nil)`
$DIR/common/client/multi_node_test.go: `.Context(t)`
$DIR/common/client/multi_node_test.go: `.Run("Returns error if there is no healthy primary nodes", func(t *testing.T) {
mn := newStartedMultiNode(t, multiNodeOpts{
selectionMode: NodeSelectionModeRoundRobin,
chainID: types.RandomID(),
nodes: []Node[types.ID, types.Head[Hashable], multiNodeRPCClient]{newNodeWithState(t, nodeStateUnreachable, nil, nil)},
sendonlys: []SendOnlyNode[types.ID, multiNodeRPCClient]{newNodeWithState(t, nodeStateUnreachable, nil, nil)},
classifySendTxError: classifySendTxError,
})
err := mn.SendTransaction(tests.Context(t), nil)
assert.EqualError(t, err, ErroringNodeError.Error())
})`
$DIR/common/client/multi_node_test.go: `.RandomID()`
$DIR/common/client/multi_node_test.go: `.SendTransaction(tests.Context(t), nil)`
$DIR/common/client/multi_node_test.go: `.Context(t)`
$DIR/common/client/multi_node_test.go: `.RandomID()`
$DIR/common/client/multi_node_test.go: `.TestObserved(t, zap.DebugLevel)`
$DIR/common/client/multi_node_test.go: `.New("unexpected error")`
$DIR/common/client/multi_node_test.go: `.SendTransaction(tests.Context(t), nil)`
$DIR/common/client/multi_node_test.go: `.Context(t)`
$DIR/common/client/multi_node_test.go: `.AssertLogCountEventually(t, observedLogs, "Node sent transaction", 2)`
$DIR/common/client/multi_node_test.go: `.AssertLogCountEventually(t, observedLogs, "RPC returned error", 1)`
$DIR/common/client/multi_node_test.go: `.New("success")`
$DIR/common/client/multi_node_test.go: `.New("fatal")`
$DIR/common/client/multi_node_test.go: `.New("tx_already_known")`
$DIR/common/client/multi_node_test.go: `.New("unsupported")`
$DIR/common/client/multi_node_test.go: `.New("retryable")`
$DIR/common/client/multi_node_test.go: `.New("underpriced")`
$DIR/common/client/multi_node_test.go: `.New("retryable")`
$DIR/common/client/multi_node_test.go: `.New("insufficientFunds")`
$DIR/common/client/multi_node_test.go: `.New("not enough keccak counters to continue the execution")`
$DIR/common/client/multi_node_test.go: `.Run(testCase.Name, func(t *testing.T) {
txResult, err := aggregateTxResults(testCase.ResultsByCode)
if testCase.ExpectedTxResult == "" {
assert.NoError(t, err)
} else {
assert.EqualError(t, txResult, testCase.ExpectedTxResult)
}
logger.Sugared(logger.Test(t)).Info("Map: " + fmt.Sprint(testCase.ResultsByCode))
logger.Sugared(logger.Test(t)).Criticalw("observed invariant violation on SendTransaction", "resultsByCode", testCase.ResultsByCode, "err", err)
if testCase.ExpectedCriticalErr == "" {
assert.NoError(t, err)
} else {
assert.EqualError(t, err, testCase.ExpectedCriticalErr)
}
})`
$DIR/common/client/multi_node_test.go: `.Sugared(logger.Test(t))`
$DIR/common/client/multi_node_test.go: `.Test(t)`
$DIR/common/client/multi_node_test.go: `.Info("Map: " + fmt.Sprint(testCase.ResultsByCode))`
$DIR/common/client/multi_node_test.go: `.Sprint(testCase.ResultsByCode)`
$DIR/common/client/multi_node_test.go: `.Sugared(logger.Test(t))`
$DIR/common/client/multi_node_test.go: `.Test(t)`
$DIR/common/client/multi_node_test.go: `.Criticalw("observed invariant violation on SendTransaction", "resultsByCode", testCase.ResultsByCode, "err", err)`
$DIR/common/client/node_fsm_test.go: `t.Run("setState", func(t *testing.T) {
n := newTestNode(t, testNodeOpts{rpc: nil, config: testNodeConfig{nodeIsSyncingEnabled: true}})
assert.Equal(t, nodeStateUndialed, n.State())
n.setState(nodeStateAlive)
assert.Equal(t, nodeStateAlive, n.State())
n.setState(nodeStateUndialed)
assert.Equal(t, nodeStateUndialed, n.State())
})`
$DIR/common/client/node_fsm_test.go: `n.setState(nodeStateAlive)`
$DIR/common/client/node_fsm_test.go: `n.setState(nodeStateUndialed)`
$DIR/common/client/node_fsm_test.go: `t.Run("transitionToAlive", func(t *testing.T) {
const destinationState = nodeStateAlive
allowedStates := []nodeState{nodeStateDialed, nodeStateInvalidChainID, nodeStateSyncing}
rpc := newMockNodeClient[types.ID, Head](t)
testTransition(t, rpc, testNode.transitionToAlive, destinationState, allowedStates...)
})`
$DIR/common/client/node_fsm_test.go: `testTransition(t, rpc, testNode.transitionToAlive, destinationState, allowedStates...)`
$DIR/common/client/node_fsm_test.go: `t.Run("transitionToInSync", func(t *testing.T) {
const destinationState = nodeStateAlive
allowedStates := []nodeState{nodeStateOutOfSync, nodeStateSyncing}
rpc := newMockNodeClient[types.ID, Head](t)
testTransition(t, rpc, testNode.transitionToInSync, destinationState, allowedStates...)
})`
$DIR/common/client/node_fsm_test.go: `testTransition(t, rpc, testNode.transitionToInSync, destinationState, allowedStates...)`
$DIR/common/client/node_fsm_test.go: `t.Run("transitionToOutOfSync", func(t *testing.T) {
const destinationState = nodeStateOutOfSync
allowedStates := []nodeState{nodeStateAlive}
rpc := newMockNodeClient[types.ID, Head](t)
rpc.On("DisconnectAll").Once()
testTransition(t, rpc, testNode.transitionToOutOfSync, destinationState, allowedStates...)
})`
$DIR/common/client/node_fsm_test.go: `rpc.On("DisconnectAll").Once()`
$DIR/common/client/node_fsm_test.go: `testTransition(t, rpc, testNode.transitionToOutOfSync, destinationState, allowedStates...)`
$DIR/common/client/node_fsm_test.go: `t.Run("transitionToUnreachable", func(t *testing.T) {
const destinationState = nodeStateUnreachable
allowedStates := []nodeState{nodeStateUndialed, nodeStateDialed, nodeStateAlive, nodeStateOutOfSync, nodeStateInvalidChainID, nodeStateSyncing}
rpc := newMockNodeClient[types.ID, Head](t)
rpc.On("DisconnectAll").Times(len(allowedStates))
testTransition(t, rpc, testNode.transitionToUnreachable, destinationState, allowedStates...)
})`
$DIR/common/client/node_fsm_test.go: `rpc.On("DisconnectAll").Times(len(allowedStates))`
$DIR/common/client/node_fsm_test.go: `testTransition(t, rpc, testNode.transitionToUnreachable, destinationState, allowedStates...)`
$DIR/common/client/node_fsm_test.go: `t.Run("transitionToInvalidChain", func(t *testing.T) {
const destinationState = nodeStateInvalidChainID
allowedStates := []nodeState{nodeStateDialed, nodeStateOutOfSync, nodeStateSyncing}
rpc := newMockNodeClient[types.ID, Head](t)
rpc.On("DisconnectAll").Times(len(allowedStates))
testTransition(t, rpc, testNode.transitionToInvalidChainID, destinationState, allowedStates...)
})`
$DIR/common/client/node_fsm_test.go: `rpc.On("DisconnectAll").Times(len(allowedStates))`
$DIR/common/client/node_fsm_test.go: `testTransition(t, rpc, testNode.transitionToInvalidChainID, destinationState, allowedStates...)`
$DIR/common/client/node_fsm_test.go: `t.Run("transitionToSyncing", func(t *testing.T) {
const destinationState = nodeStateSyncing
allowedStates := []nodeState{nodeStateDialed, nodeStateOutOfSync, nodeStateInvalidChainID}
rpc := newMockNodeClient[types.ID, Head](t)
rpc.On("DisconnectAll").Times(len(allowedStates))
testTransition(t, rpc, testNode.transitionToSyncing, destinationState, allowedStates...)
})`
$DIR/common/client/node_fsm_test.go: `rpc.On("DisconnectAll").Times(len(allowedStates))`
$DIR/common/client/node_fsm_test.go: `testTransition(t, rpc, testNode.transitionToSyncing, destinationState, allowedStates...)`
$DIR/common/client/node_fsm_test.go: `rpc.On("DisconnectAll").Once()`
$DIR/common/client/node_fsm_test.go: `node.setState(nodeStateDialed)`
$DIR/common/client/node_fsm_test.go: `.Run("setState", func(t *testing.T) {
n := newTestNode(t, testNodeOpts{rpc: nil, config: testNodeConfig{nodeIsSyncingEnabled: true}})
assert.Equal(t, nodeStateUndialed, n.State())
n.setState(nodeStateAlive)
assert.Equal(t, nodeStateAlive, n.State())
n.setState(nodeStateUndialed)
assert.Equal(t, nodeStateUndialed, n.State())
})`
$DIR/common/client/node_fsm_test.go: `.setState(nodeStateAlive)`
$DIR/common/client/node_fsm_test.go: `.setState(nodeStateUndialed)`
$DIR/common/client/node_fsm_test.go: `.Run("transitionToAlive", func(t *testing.T) {
const destinationState = nodeStateAlive
allowedStates := []nodeState{nodeStateDialed, nodeStateInvalidChainID, nodeStateSyncing}
rpc := newMockNodeClient[types.ID, Head](t)
testTransition(t, rpc, testNode.transitionToAlive, destinationState, allowedStates...)
})`
$DIR/common/client/node_fsm_test.go: `.Run("transitionToInSync", func(t *testing.T) {
const destinationState = nodeStateAlive
allowedStates := []nodeState{nodeStateOutOfSync, nodeStateSyncing}
rpc := newMockNodeClient[types.ID, Head](t)
testTransition(t, rpc, testNode.transitionToInSync, destinationState, allowedStates...)
})`
$DIR/common/client/node_fsm_test.go: `.Run("transitionToOutOfSync", func(t *testing.T) {
const destinationState = nodeStateOutOfSync
allowedStates := []nodeState{nodeStateAlive}
rpc := newMockNodeClient[types.ID, Head](t)
rpc.On("DisconnectAll").Once()
testTransition(t, rpc, testNode.transitionToOutOfSync, destinationState, allowedStates...)
})`
$DIR/common/client/node_fsm_test.go: `.On("DisconnectAll")`
$DIR/common/client/node_fsm_test.go: `.Once()`
$DIR/common/client/node_fsm_test.go: `.Run("transitionToUnreachable", func(t *testing.T) {
const destinationState = nodeStateUnreachable
allowedStates := []nodeState{nodeStateUndialed, nodeStateDialed, nodeStateAlive, nodeStateOutOfSync, nodeStateInvalidChainID, nodeStateSyncing}
rpc := newMockNodeClient[types.ID, Head](t)
rpc.On("DisconnectAll").Times(len(allowedStates))
testTransition(t, rpc, testNode.transitionToUnreachable, destinationState, allowedStates...)
})`
$DIR/common/client/node_fsm_test.go: `.On("DisconnectAll")`
$DIR/common/client/node_fsm_test.go: `.Times(len(allowedStates))`
$DIR/common/client/node_fsm_test.go: `.Run("transitionToInvalidChain", func(t *testing.T) {
const destinationState = nodeStateInvalidChainID
allowedStates := []nodeState{nodeStateDialed, nodeStateOutOfSync, nodeStateSyncing}
rpc := newMockNodeClient[types.ID, Head](t)
rpc.On("DisconnectAll").Times(len(allowedStates))
testTransition(t, rpc, testNode.transitionToInvalidChainID, destinationState, allowedStates...)
})`
$DIR/common/client/node_fsm_test.go: `.On("DisconnectAll")`
$DIR/common/client/node_fsm_test.go: `.Times(len(allowedStates))`
$DIR/common/client/node_fsm_test.go: `.Run("transitionToSyncing", func(t *testing.T) {
const destinationState = nodeStateSyncing
allowedStates := []nodeState{nodeStateDialed, nodeStateOutOfSync, nodeStateInvalidChainID}
rpc := newMockNodeClient[types.ID, Head](t)
rpc.On("DisconnectAll").Times(len(allowedStates))
testTransition(t, rpc, testNode.transitionToSyncing, destinationState, allowedStates...)
})`
$DIR/common/client/node_fsm_test.go: `.On("DisconnectAll")`
$DIR/common/client/node_fsm_test.go: `.Times(len(allowedStates))`
$DIR/common/client/node_fsm_test.go: `.On("DisconnectAll")`
$DIR/common/client/node_fsm_test.go: `.Once()`
$DIR/common/client/node_fsm_test.go: `.setState(nodeStateDialed)`
$DIR/common/client/node_fsm_test.go: `.AssertNotCalled(t)`
$DIR/common/client/node_lifecycle_test.go: `opts.rpc.On("Close").Return(nil).Once()`
$DIR/common/client/node_lifecycle_test.go: `node.setState(nodeStateDialed)`
$DIR/common/client/node_lifecycle_test.go: `t.Run("returns on closed", func(t *testing.T) {
node := newTestNode(t, testNodeOpts{})
node.setState(nodeStateClosed)
node.wg.Add(1)
node.aliveLoop()
})`
$DIR/common/client/node_lifecycle_test.go: `node.setState(nodeStateClosed)`
$DIR/common/client/node_lifecycle_test.go: `node.wg.Add(1)`
$DIR/common/client/node_lifecycle_test.go: `node.aliveLoop()`
$DIR/common/client/node_lifecycle_test.go: `t.Run("if initial subscribe fails, transitions to unreachable", func(t *testing.T) {
t.Parallel()
rpc := newMockNodeClient[types.ID, Head](t)
node := newDialedNode(t, testNodeOpts{
rpc: rpc,
})
defer func() { assert.NoError(t, node.close()) }()
expectedError := errors.New("failed to subscribe to rpc")
rpc.On("Subscribe", mock.Anything, mock.Anything, rpcSubscriptionMethodNewHeads).Return(nil, expectedError).Once()
rpc.On("DisconnectAll").Once()
// might be called in unreachable loop
rpc.On("Dial", mock.Anything).Return(errors.New("failed to dial")).Maybe()
node.declareAlive()
tests.AssertEventually(t, func() bool {
return node.State() == nodeStateUnreachable
})
})`
$DIR/common/client/node_lifecycle_test.go: `rpc.On("Subscribe", mock.Anything, mock.Anything, rpcSubscriptionMethodNewHeads).Return(nil, expectedError).Once()`
$DIR/common/client/node_lifecycle_test.go: `rpc.On("DisconnectAll").Once()`
$DIR/common/client/node_lifecycle_test.go: `rpc.On("Dial", mock.Anything).Return(errors.New("failed to dial")).Maybe()`
$DIR/common/client/node_lifecycle_test.go: `node.declareAlive()`
$DIR/common/client/node_lifecycle_test.go: `tests.AssertEventually(t, func() bool {
return node.State() == nodeStateUnreachable
})`
$DIR/common/client/node_lifecycle_test.go: `t.Run("if remote RPC connection is closed transitions to unreachable", func(t *testing.T) {
t.Parallel()
rpc := newMockNodeClient[types.ID, Head](t)
lggr, observedLogs := logger.TestObserved(t, zap.WarnLevel)
node := newDialedNode(t, testNodeOpts{
rpc: rpc,
lggr: lggr,
})
defer func() { assert.NoError(t, node.close()) }()
sub := mocks.NewSubscription(t)
errChan := make(chan error)
close(errChan)
sub.On("Err").Return((<-chan error)(errChan)).Once()
sub.On("Unsubscribe").Once()
rpc.On("Subscribe", mock.Anything, mock.Anything, rpcSubscriptionMethodNewHeads).Return(sub, nil).Once()
rpc.On("SetAliveLoopSub", sub).Once()
// disconnects all on transfer to unreachable
rpc.On("DisconnectAll").Once()
// might be called in unreachable loop
rpc.On("Dial", mock.Anything).Return(errors.New("failed to dial")).Maybe()
node.declareAlive()
tests.AssertLogEventually(t, observedLogs, "Subscription was terminated")
assert.Equal(t, nodeStateUnreachable, node.State())
})`
$DIR/common/client/node_lifecycle_test.go: `close(errChan)`
$DIR/common/client/node_lifecycle_test.go: `sub.On("Err").Return((<-chan error)(errChan)).Once()`
$DIR/common/client/node_lifecycle_test.go: `sub.On("Unsubscribe").Once()`
$DIR/common/client/node_lifecycle_test.go: `rpc.On("Subscribe", mock.Anything, mock.Anything, rpcSubscriptionMethodNewHeads).Return(sub, nil).Once()`
$DIR/common/client/node_lifecycle_test.go: `rpc.On("SetAliveLoopSub", sub).Once()`
$DIR/common/client/node_lifecycle_test.go: `rpc.On("DisconnectAll").Once()`
$DIR/common/client/node_lifecycle_test.go: `rpc.On("Dial", mock.Anything).Return(errors.New("failed to dial")).Maybe()`
$DIR/common/client/node_lifecycle_test.go: `node.declareAlive()`
$DIR/common/client/node_lifecycle_test.go: `tests.AssertLogEventually(t, observedLogs, "Subscription was terminated")`
$DIR/common/client/node_lifecycle_test.go: `sub.On("Err").Return((<-chan error)(nil))`
$DIR/common/client/node_lifecycle_test.go: `sub.On("Unsubscribe").Once()`
$DIR/common/client/node_lifecycle_test.go: `opts.rpc.On("Subscribe", mock.Anything, mock.Anything, rpcSubscriptionMethodNewHeads).Return(sub, nil).Once()`
$DIR/common/client/node_lifecycle_test.go: `opts.rpc.On("SetAliveLoopSub", sub).Once()`
$DIR/common/client/node_lifecycle_test.go: `t.Run("Stays alive and waits for signal", func(t *testing.T) {
t.Parallel()
rpc := newMockNodeClient[types.ID, Head](t)
lggr, observedLogs := logger.TestObserved(t, zap.DebugLevel)
node := newSubscribedNode(t, testNodeOpts{
config: testNodeConfig{},
rpc: rpc,
lggr: lggr,
})
defer func() { assert.NoError(t, node.close()) }()
node.declareAlive()
tests.AssertLogEventually(t, observedLogs, "Head liveness checking disabled")
tests.AssertLogEventually(t, observedLogs, "Polling disabled")
assert.Equal(t, nodeStateAlive, node.State())
})`
$DIR/common/client/node_lifecycle_test.go: `node.declareAlive()`
$DIR/common/client/node_lifecycle_test.go: `tests.AssertLogEventually(t, observedLogs, "Head liveness checking disabled")`
$DIR/common/client/node_lifecycle_test.go: `tests.AssertLogEventually(t, observedLogs, "Polling disabled")`
$DIR/common/client/node_lifecycle_test.go: `t.Run("stays alive while below pollFailureThreshold and resets counter on success", func(t *testing.T) {
t.Parallel()
rpc := newMockNodeClient[types.ID, Head](t)
lggr, observedLogs := logger.TestObserved(t, zap.DebugLevel)
const pollFailureThreshold = 3
node := newSubscribedNode(t, testNodeOpts{
config: testNodeConfig{
pollFailureThreshold: pollFailureThreshold,
pollInterval: tests.TestInterval,
},
rpc: rpc,
lggr: lggr,
})
defer func() { assert.NoError(t, node.close()) }()
pollError := errors.New("failed to get ClientVersion")
// 1. Return error several times, but below threshold
rpc.On("ClientVersion", mock.Anything).Return("", pollError).Run(func(_ mock.Arguments) {
// stays healthy while below threshold
assert.Equal(t, nodeStateAlive, node.State())
}).Times(pollFailureThreshold - 1)
// 2. Successful call that is expected to reset counter
rpc.On("ClientVersion", mock.Anything).Return("client_version", nil).Once()
// 3. Return error. If we have not reset the timer, we'll transition to nonAliveState
rpc.On("ClientVersion", mock.Anything).Return("", pollError).Once()
// 4. Once during the call, check if node is alive
var ensuredAlive atomic.Bool
rpc.On("ClientVersion", mock.Anything).Return("client_version", nil).Run(func(_ mock.Arguments) {
if ensuredAlive.Load() {
return
}
ensuredAlive.Store(true)
assert.Equal(t, nodeStateAlive, node.State())
}).Once()
// redundant call to stay in alive state
rpc.On("ClientVersion", mock.Anything).Return("client_version", nil)
node.declareAlive()
tests.AssertLogCountEventually(t, observedLogs, fmt.Sprintf("Poll failure, RPC endpoint %s failed to respond properly", node.String()), pollFailureThreshold)
tests.AssertLogCountEventually(t, observedLogs, "Version poll successful", 2)
assert.True(t, ensuredAlive.Load(), "expected to ensure that node was alive")
})`
$DIR/common/client/node_lifecycle_test.go: `rpc.On("ClientVersion", mock.Anything).Return("", pollError).Run(func(_ mock.Arguments) {
// stays healthy while below threshold
assert.Equal(t, nodeStateAlive, node.State())
}).Times(pollFailureThreshold - 1)`
$DIR/common/client/node_lifecycle_test.go: `rpc.On("ClientVersion", mock.Anything).Return("client_version", nil).Once()`
$DIR/common/client/node_lifecycle_test.go: `rpc.On("ClientVersion", mock.Anything).Return("", pollError).Once()`
$DIR/common/client/node_lifecycle_test.go: `rpc.On("ClientVersion", mock.Anything).Return("client_version", nil).Run(func(_ mock.Arguments) {
if ensuredAlive.Load() {
return
}
ensuredAlive.Store(true)
assert.Equal(t, nodeStateAlive, node.State())
}).Once()`
$DIR/common/client/node_lifecycle_test.go: `ensuredAlive.Store(true)`
$DIR/common/client/node_lifecycle_test.go: `rpc.On("ClientVersion", mock.Anything).Return("client_version", nil)`
$DIR/common/client/node_lifecycle_test.go: `node.declareAlive()`
$DIR/common/client/node_lifecycle_test.go: `tests.AssertLogCountEventually(t, observedLogs, fmt.Sprintf("Poll failure, RPC endpoint %s failed to respond properly", node.String()), pollFailureThreshold)`
$DIR/common/client/node_lifecycle_test.go: `tests.AssertLogCountEventually(t, observedLogs, "Version poll successful", 2)`
$DIR/common/client/node_lifecycle_test.go: `t.Run("with threshold poll failures, transitions to unreachable", func(t *testing.T) {
t.Parallel()
rpc := newMockNodeClient[types.ID, Head](t)
lggr, observedLogs := logger.TestObserved(t, zap.DebugLevel)
const pollFailureThreshold = 3
node := newSubscribedNode(t, testNodeOpts{
config: testNodeConfig{
pollFailureThreshold: pollFailureThreshold,
pollInterval: tests.TestInterval,
},
rpc: rpc,
lggr: lggr,
})
defer func() { assert.NoError(t, node.close()) }()
pollError := errors.New("failed to get ClientVersion")
rpc.On("ClientVersion", mock.Anything).Return("", pollError)
// disconnects all on transfer to unreachable
rpc.On("DisconnectAll").Once()
// might be called in unreachable loop
rpc.On("Dial", mock.Anything).Return(errors.New("failed to dial")).Maybe()
node.declareAlive()
tests.AssertLogCountEventually(t, observedLogs, fmt.Sprintf("Poll failure, RPC endpoint %s failed to respond properly", node.String()), pollFailureThreshold)
tests.AssertEventually(t, func() bool {
return nodeStateUnreachable == node.State()
})
})`
$DIR/common/client/node_lifecycle_test.go: `rpc.On("ClientVersion", mock.Anything).Return("", pollError)`
$DIR/common/client/node_lifecycle_test.go: `rpc.On("DisconnectAll").Once()`
$DIR/common/client/node_lifecycle_test.go: `rpc.On("Dial", mock.Anything).Return(errors.New("failed to dial")).Maybe()`
$DIR/common/client/node_lifecycle_test.go: `node.declareAlive()`
$DIR/common/client/node_lifecycle_test.go: `tests.AssertLogCountEventually(t, observedLogs, fmt.Sprintf("Poll failure, RPC endpoint %s failed to respond properly", node.String()), pollFailureThreshold)`
$DIR/common/client/node_lifecycle_test.go: `tests.AssertEventually(t, func() bool {
return nodeStateUnreachable == node.State()
})`
$DIR/common/client/node_lifecycle_test.go: `t.Run("with threshold poll failures, but we are the last node alive, forcibly keeps it alive", func(t *testing.T) {
t.Parallel()
rpc := newMockNodeClient[types.ID, Head](t)
lggr, observedLogs := logger.TestObserved(t, zap.DebugLevel)
const pollFailureThreshold = 3
node := newSubscribedNode(t, testNodeOpts{
config: testNodeConfig{
pollFailureThreshold: pollFailureThreshold,
pollInterval: tests.TestInterval,
},
rpc: rpc,
lggr: lggr,
})
defer func() { assert.NoError(t, node.close()) }()
node.nLiveNodes = func() (count int, blockNumber int64, totalDifficulty *big.Int) {
return 1, 20, big.NewInt(10)
}
pollError := errors.New("failed to get ClientVersion")
rpc.On("ClientVersion", mock.Anything).Return("", pollError)
node.declareAlive()
tests.AssertLogEventually(t, observedLogs, fmt.Sprintf("RPC endpoint failed to respond to %d consecutive polls", pollFailureThreshold))
assert.Equal(t, nodeStateAlive, node.State())
})`
$DIR/common/client/node_lifecycle_test.go: `rpc.On("ClientVersion", mock.Anything).Return("", pollError)`
$DIR/common/client/node_lifecycle_test.go: `node.declareAlive()`
$DIR/common/client/node_lifecycle_test.go: `tests.AssertLogEventually(t, observedLogs, fmt.Sprintf("RPC endpoint failed to respond to %d consecutive polls", pollFailureThreshold))`
$DIR/common/client/node_lifecycle_test.go: `t.Run("when behind more than SyncThreshold, transitions to out of sync", func(t *testing.T) {
t.Parallel()
rpc := newMockNodeClient[types.ID, Head](t)
lggr, observedLogs := logger.TestObserved(t, zap.DebugLevel)
const syncThreshold = 10
node := newSubscribedNode(t, testNodeOpts{
config: testNodeConfig{
pollInterval: tests.TestInterval,
syncThreshold: syncThreshold,
selectionMode: NodeSelectionModeRoundRobin,
},
rpc: rpc,
lggr: lggr,
})
defer func() { assert.NoError(t, node.close()) }()
node.stateLatestBlockNumber = 20
node.nLiveNodes = func() (count int, blockNumber int64, totalDifficulty *big.Int) {
return 10, syncThreshold + node.stateLatestBlockNumber + 1, big.NewInt(10)
}
rpc.On("ClientVersion", mock.Anything).Return("", nil)
// tries to redial in outOfSync
rpc.On("Dial", mock.Anything).Return(errors.New("failed to dial")).Run(func(_ mock.Arguments) {
assert.Equal(t, nodeStateOutOfSync, node.State())
}).Once()
// disconnects all on transfer to unreachable or outOfSync
rpc.On("DisconnectAll").Maybe()
// might be called in unreachable loop
rpc.On("Dial", mock.Anything).Run(func(_ mock.Arguments) {
require.Equal(t, nodeStateOutOfSync, node.State())
}).Return(errors.New("failed to dial")).Maybe()
node.declareAlive()
tests.AssertLogEventually(t, observedLogs, "Dial failed: Node is unreachable")
})`
$DIR/common/client/node_lifecycle_test.go: `node.stateLatestBlockNumber = 20`
$DIR/common/client/node_lifecycle_test.go: `rpc.On("ClientVersion", mock.Anything).Return("", nil)`
$DIR/common/client/node_lifecycle_test.go: `rpc.On("Dial", mock.Anything).Return(errors.New("failed to dial")).Run(func(_ mock.Arguments) {
assert.Equal(t, nodeStateOutOfSync, node.State())
}).Once()`
$DIR/common/client/node_lifecycle_test.go: `rpc.On("DisconnectAll").Maybe()`
$DIR/common/client/node_lifecycle_test.go: `rpc.On("Dial", mock.Anything).Run(func(_ mock.Arguments) {
require.Equal(t, nodeStateOutOfSync, node.State())
}).Return(errors.New("failed to dial")).Maybe()`
$DIR/common/client/node_lifecycle_test.go: `node.declareAlive()`
$DIR/common/client/node_lifecycle_test.go: `tests.AssertLogEventually(t, observedLogs, "Dial failed: Node is unreachable")`
$DIR/common/client/node_lifecycle_test.go: `t.Run("when behind more than SyncThreshold but we are the last live node, forcibly stays alive", func(t *testing.T) {
t.Parallel()
rpc := newMockNodeClient[types.ID, Head](t)
lggr, observedLogs := logger.TestObserved(t, zap.DebugLevel)
const syncThreshold = 10
node := newSubscribedNode(t, testNodeOpts{
config: testNodeConfig{
pollInterval: tests.TestInterval,
syncThreshold: syncThreshold,
selectionMode: NodeSelectionModeRoundRobin,
},
rpc: rpc,
lggr: lggr,
})
defer func() { assert.NoError(t, node.close()) }()
node.stateLatestBlockNumber = 20
node.nLiveNodes = func() (count int, blockNumber int64, totalDifficulty *big.Int) {
return 1, syncThreshold + node.stateLatestBlockNumber + 1, big.NewInt(10)
}
rpc.On("ClientVersion", mock.Anything).Return("", nil)
node.declareAlive()
tests.AssertLogEventually(t, observedLogs, fmt.Sprintf("RPC endpoint has fallen behind; %s %s", msgCannotDisable, msgDegradedState))
})`
$DIR/common/client/node_lifecycle_test.go: `node.stateLatestBlockNumber = 20`
$DIR/common/client/node_lifecycle_test.go: `rpc.On("ClientVersion", mock.Anything).Return("", nil)`
$DIR/common/client/node_lifecycle_test.go: `node.declareAlive()`
$DIR/common/client/node_lifecycle_test.go: `tests.AssertLogEventually(t, observedLogs, fmt.Sprintf("RPC endpoint has fallen behind; %s %s", msgCannotDisable, msgDegradedState))`
$DIR/common/client/node_lifecycle_test.go: `t.Run("when behind but SyncThreshold=0, stay alive", func(t *testing.T) {
t.Parallel()
rpc := newMockNodeClient[types.ID, Head](t)
lggr, observedLogs := logger.TestObserved(t, zap.DebugLevel)
node := newSubscribedNode(t, testNodeOpts{
config: testNodeConfig{
pollInterval: tests.TestInterval,
syncThreshold: 0,
selectionMode: NodeSelectionModeRoundRobin,
},
rpc: rpc,
lggr: lggr,
})
defer func() { assert.NoError(t, node.close()) }()
node.stateLatestBlockNumber = 20
node.nLiveNodes = func() (count int, blockNumber int64, totalDifficulty *big.Int) {
return 1, node.stateLatestBlockNumber + 100, big.NewInt(10)
}
rpc.On("ClientVersion", mock.Anything).Return("", nil)
node.declareAlive()
tests.AssertLogCountEventually(t, observedLogs, "Version poll successful", 2)
assert.Equal(t, nodeStateAlive, node.State())
})`
$DIR/common/client/node_lifecycle_test.go: `node.stateLatestBlockNumber = 20`
$DIR/common/client/node_lifecycle_test.go: `rpc.On("ClientVersion", mock.Anything).Return("", nil)`
$DIR/common/client/node_lifecycle_test.go: `node.declareAlive()`
$DIR/common/client/node_lifecycle_test.go: `tests.AssertLogCountEventually(t, observedLogs, "Version poll successful", 2)`
$DIR/common/client/node_lifecycle_test.go: `t.Run("when no new heads received for threshold, transitions to out of sync", func(t *testing.T) {
t.Parallel()
rpc := newMockNodeClient[types.ID, Head](t)
node := newSubscribedNode(t, testNodeOpts{
config: testNodeConfig{},
chainConfig: clientMocks.ChainConfig{
NoNewHeadsThresholdVal: tests.TestInterval,
},
rpc: rpc,
})
defer func() { assert.NoError(t, node.close()) }()
// tries to redial in outOfSync
rpc.On("Dial", mock.Anything).Return(errors.New("failed to dial")).Run(func(_ mock.Arguments) {
assert.Equal(t, nodeStateOutOfSync, node.State())
}).Once()
// disconnects all on transfer to unreachable or outOfSync
rpc.On("DisconnectAll").Maybe()
// might be called in unreachable loop
rpc.On("Dial", mock.Anything).Return(errors.New("failed to dial")).Maybe()
node.declareAlive()
tests.AssertEventually(t, func() bool {
// right after outOfSync we'll transfer to unreachable due to returned error on Dial
// we check that we were in out of sync state on first Dial call
return node.State() == nodeStateUnreachable
})
})`
$DIR/common/client/node_lifecycle_test.go: `rpc.On("Dial", mock.Anything).Return(errors.New("failed to dial")).Run(func(_ mock.Arguments) {
assert.Equal(t, nodeStateOutOfSync, node.State())
}).Once()`
$DIR/common/client/node_lifecycle_test.go: `rpc.On("DisconnectAll").Maybe()`
$DIR/common/client/node_lifecycle_test.go: `rpc.On("Dial", mock.Anything).Return(errors.New("failed to dial")).Maybe()`
$DIR/common/client/node_lifecycle_test.go: `node.declareAlive()`
$DIR/common/client/node_lifecycle_test.go: `tests.AssertEventually(t, func() bool {
// right after outOfSync we'll transfer to unreachable due to returned error on Dial
// we check that we were in out of sync state on first Dial call
return node.State() == nodeStateUnreachable
})`
$DIR/common/client/node_lifecycle_test.go: `t.Run("when no new heads received for threshold but we are the last live node, forcibly stays alive", func(t *testing.T) {
t.Parallel()
rpc := newMockNodeClient[types.ID, Head](t)
lggr, observedLogs := logger.TestObserved(t, zap.DebugLevel)
node := newSubscribedNode(t, testNodeOpts{
config: testNodeConfig{},
lggr: lggr,
chainConfig: clientMocks.ChainConfig{
NoNewHeadsThresholdVal: tests.TestInterval,
},
rpc: rpc,
})
defer func() { assert.NoError(t, node.close()) }()
node.nLiveNodes = func() (count int, blockNumber int64, totalDifficulty *big.Int) {
return 1, 20, big.NewInt(10)
}
node.declareAlive()
tests.AssertLogEventually(t, observedLogs, fmt.Sprintf("RPC endpoint detected out of sync; %s %s", msgCannotDisable, msgDegradedState))
assert.Equal(t, nodeStateAlive, node.State())
})`
$DIR/common/client/node_lifecycle_test.go: `node.declareAlive()`
$DIR/common/client/node_lifecycle_test.go: `tests.AssertLogEventually(t, observedLogs, fmt.Sprintf("RPC endpoint detected out of sync; %s %s", msgCannotDisable, msgDegradedState))`
$DIR/common/client/node_lifecycle_test.go: `t.Run("rpc closed head channel", func(t *testing.T) {
t.Parallel()
rpc := newMockNodeClient[types.ID, Head](t)
sub := mocks.NewSubscription(t)
sub.On("Err").Return((<-chan error)(nil))
sub.On("Unsubscribe").Once()
rpc.On("Subscribe", mock.Anything, mock.Anything, rpcSubscriptionMethodNewHeads).Run(func(args mock.Arguments) {
ch := args.Get(1).(chan<- Head)
close(ch)
}).Return(sub, nil).Once()
rpc.On("SetAliveLoopSub", sub).Once()
lggr, observedLogs := logger.TestObserved(t, zap.ErrorLevel)
node := newDialedNode(t, testNodeOpts{
lggr: lggr,
config: testNodeConfig{},
chainConfig: clientMocks.ChainConfig{
NoNewHeadsThresholdVal: tests.TestInterval,
},
rpc: rpc,
})
defer func() { assert.NoError(t, node.close()) }()
// disconnects all on transfer to unreachable or outOfSync
rpc.On("DisconnectAll").Once()
// might be called in unreachable loop
rpc.On("Dial", mock.Anything).Return(errors.New("failed to dial")).Maybe()
node.declareAlive()
tests.AssertLogEventually(t, observedLogs, "Subscription channel unexpectedly closed")
assert.Equal(t, nodeStateUnreachable, node.State())
})`
$DIR/common/client/node_lifecycle_test.go: `sub.On("Err").Return((<-chan error)(nil))`
$DIR/common/client/node_lifecycle_test.go: `sub.On("Unsubscribe").Once()`
$DIR/common/client/node_lifecycle_test.go: `rpc.On("Subscribe", mock.Anything, mock.Anything, rpcSubscriptionMethodNewHeads).Run(func(args mock.Arguments) {
ch := args.Get(1).(chan<- Head)
close(ch)
}).Return(sub, nil).Once()`
$DIR/common/client/node_lifecycle_test.go: `close(ch)`
$DIR/common/client/node_lifecycle_test.go: `rpc.On("SetAliveLoopSub", sub).Once()`
$DIR/common/client/node_lifecycle_test.go: `rpc.On("DisconnectAll").Once()`
$DIR/common/client/node_lifecycle_test.go: `rpc.On("Dial", mock.Anything).Return(errors.New("failed to dial")).Maybe()`
$DIR/common/client/node_lifecycle_test.go: `node.declareAlive()`
$DIR/common/client/node_lifecycle_test.go: `tests.AssertLogEventually(t, observedLogs, "Subscription channel unexpectedly closed")`
$DIR/common/client/node_lifecycle_test.go: `t.Run("updates block number and difficulty on new head", func(t *testing.T) {
t.Parallel()
rpc := newMockNodeClient[types.ID, Head](t)
sub := mocks.NewSubscription(t)
sub.On("Err").Return((<-chan error)(nil))
sub.On("Unsubscribe").Once()
expectedBlockNumber := rand.Int64()
expectedDiff := big.NewInt(rand.Int64())
rpc.On("Subscribe", mock.Anything, mock.Anything, rpcSubscriptionMethodNewHeads).Run(func(args mock.Arguments) {
ch := args.Get(1).(chan<- Head)
go writeHeads(t, ch, head{BlockNumber: expectedBlockNumber, BlockDifficulty: expectedDiff})
}).Return(sub, nil).Once()
rpc.On("SetAliveLoopSub", sub).Once()
node := newDialedNode(t, testNodeOpts{
config: testNodeConfig{},
rpc: rpc,
})
defer func() { assert.NoError(t, node.close()) }()
node.declareAlive()
tests.AssertEventually(t, func() bool {
state, block, diff := node.StateAndLatest()
return state == nodeStateAlive && block == expectedBlockNumber == bigmath.Equal(diff, expectedDiff)
})
})`
$DIR/common/client/node_lifecycle_test.go: `sub.On("Err").Return((<-chan error)(nil))`
$DIR/common/client/node_lifecycle_test.go: `sub.On("Unsubscribe").Once()`
$DIR/common/client/node_lifecycle_test.go: `rpc.On("Subscribe", mock.Anything, mock.Anything, rpcSubscriptionMethodNewHeads).Run(func(args mock.Arguments) {
ch := args.Get(1).(chan<- Head)
go writeHeads(t, ch, head{BlockNumber: expectedBlockNumber, BlockDifficulty: expectedDiff})
}).Return(sub, nil).Once()`
$DIR/common/client/node_lifecycle_test.go: `go writeHeads(t, ch, head{BlockNumber: expectedBlockNumber, BlockDifficulty: expectedDiff})`
$DIR/common/client/node_lifecycle_test.go: `rpc.On("SetAliveLoopSub", sub).Once()`
$DIR/common/client/node_lifecycle_test.go: `node.declareAlive()`
$DIR/common/client/node_lifecycle_test.go: `tests.AssertEventually(t, func() bool {
state, block, diff := node.StateAndLatest()
return state == nodeStateAlive && block == expectedBlockNumber == bigmath.Equal(diff, expectedDiff)
})`
$DIR/common/client/node_lifecycle_test.go: `t.Run("If finality tag is not enabled updates finalized block metric using finality depth and latest head", func(t *testing.T) {
t.Parallel()
rpc := newMockNodeClient[types.ID, Head](t)
sub := mocks.NewSubscription(t)
sub.On("Err").Return((<-chan error)(nil))
sub.On("Unsubscribe").Once()
const blockNumber = 1000
const finalityDepth = 10
const expectedBlock = 990
rpc.On("Subscribe", mock.Anything, mock.Anything, rpcSubscriptionMethodNewHeads).Run(func(args mock.Arguments) {
ch := args.Get(1).(chan<- Head)
go writeHeads(t, ch, head{BlockNumber: blockNumber - 1}, head{BlockNumber: blockNumber}, head{BlockNumber: blockNumber - 1})
}).Return(sub, nil).Once()
rpc.On("SetAliveLoopSub", sub).Once()
name := "node-" + rand.Str(5)
node := newDialedNode(t, testNodeOpts{
config: testNodeConfig{},
chainConfig: clientMocks.ChainConfig{FinalityDepthVal: finalityDepth},
rpc: rpc,
name: name,
chainID: big.NewInt(1),
})
defer func() { assert.NoError(t, node.close()) }()
node.declareAlive()
tests.AssertEventually(t, func() bool {
metric, err := promPoolRPCNodeHighestFinalizedBlock.GetMetricWithLabelValues(big.NewInt(1).String(), name)
require.NoError(t, err)
var m = &prom.Metric{}
require.NoError(t, metric.Write(m))
return float64(expectedBlock) == m.Gauge.GetValue()
})
})`
$DIR/common/client/node_lifecycle_test.go: `sub.On("Err").Return((<-chan error)(nil))`
$DIR/common/client/node_lifecycle_test.go: `sub.On("Unsubscribe").Once()`
$DIR/common/client/node_lifecycle_test.go: `rpc.On("Subscribe", mock.Anything, mock.Anything, rpcSubscriptionMethodNewHeads).Run(func(args mock.Arguments) {
ch := args.Get(1).(chan<- Head)
go writeHeads(t, ch, head{BlockNumber: blockNumber - 1}, head{BlockNumber: blockNumber}, head{BlockNumber: blockNumber - 1})
}).Return(sub, nil).Once()`
$DIR/common/client/node_lifecycle_test.go: `go writeHeads(t, ch, head{BlockNumber: blockNumber - 1}, head{BlockNumber: blockNumber}, head{BlockNumber: blockNumber - 1})`
$DIR/common/client/node_lifecycle_test.go: `rpc.On("SetAliveLoopSub", sub).Once()`
$DIR/common/client/node_lifecycle_test.go: `node.declareAlive()`
$DIR/common/client/node_lifecycle_test.go: `tests.AssertEventually(t, func() bool {
metric, err := promPoolRPCNodeHighestFinalizedBlock.GetMetricWithLabelValues(big.NewInt(1).String(), name)
require.NoError(t, err)
var m = &prom.Metric{}
require.NoError(t, metric.Write(m))
return float64(expectedBlock) == m.Gauge.GetValue()
})`
$DIR/common/client/node_lifecycle_test.go: `t.Run("Logs warning if failed to get finalized block", func(t *testing.T) {
t.Parallel()
rpc := newMockNodeClient[types.ID, Head](t)
rpc.On("LatestFinalizedBlock", mock.Anything).Return(newMockHead(t), errors.New("failed to get finalized block"))
sub := mocks.NewSubscription(t)
sub.On("Err").Return((<-chan error)(nil))
sub.On("Unsubscribe").Once()
rpc.On("Subscribe", mock.Anything, mock.Anything, rpcSubscriptionMethodNewHeads).Return(sub, nil).Once()
rpc.On("SetAliveLoopSub", sub).Once()
lggr, observedLogs := logger.TestObserved(t, zap.DebugLevel)
node := newDialedNode(t, testNodeOpts{
config: testNodeConfig{
finalizedBlockPollInterval: tests.TestInterval,
},
chainConfig: clientMocks.ChainConfig{
IsFinalityTagEnabled: true,
},
rpc: rpc,
lggr: lggr,
})
defer func() { assert.NoError(t, node.close()) }()
node.declareAlive()
tests.AssertLogEventually(t, observedLogs, "Failed to fetch latest finalized block")
})`
$DIR/common/client/node_lifecycle_test.go: `rpc.On("LatestFinalizedBlock", mock.Anything).Return(newMockHead(t), errors.New("failed to get finalized block"))`
$DIR/common/client/node_lifecycle_test.go: `sub.On("Err").Return((<-chan error)(nil))`
$DIR/common/client/node_lifecycle_test.go: `sub.On("Unsubscribe").Once()`
$DIR/common/client/node_lifecycle_test.go: `rpc.On("Subscribe", mock.Anything, mock.Anything, rpcSubscriptionMethodNewHeads).Return(sub, nil).Once()`
$DIR/common/client/node_lifecycle_test.go: `rpc.On("SetAliveLoopSub", sub).Once()`
$DIR/common/client/node_lifecycle_test.go: `node.declareAlive()`
$DIR/common/client/node_lifecycle_test.go: `tests.AssertLogEventually(t, observedLogs, "Failed to fetch latest finalized block")`
$DIR/common/client/node_lifecycle_test.go: `t.Run("Logs warning if latest finalized block is not valid", func(t *testing.T) {
t.Parallel()
rpc := newMockNodeClient[types.ID, Head](t)
head := newMockHead(t)
head.On("IsValid").Return(false)
rpc.On("LatestFinalizedBlock", mock.Anything).Return(head, nil)
sub := mocks.NewSubscription(t)
sub.On("Err").Return((<-chan error)(nil))
sub.On("Unsubscribe").Once()
rpc.On("Subscribe", mock.Anything, mock.Anything, rpcSubscriptionMethodNewHeads).Return(sub, nil).Once()
rpc.On("SetAliveLoopSub", sub).Once()
lggr, observedLogs := logger.TestObserved(t, zap.DebugLevel)
node := newDialedNode(t, testNodeOpts{
config: testNodeConfig{
finalizedBlockPollInterval: tests.TestInterval,
},
chainConfig: clientMocks.ChainConfig{
IsFinalityTagEnabled: true,
},
rpc: rpc,
lggr: lggr,
})
defer func() { assert.NoError(t, node.close()) }()
node.declareAlive()
tests.AssertLogEventually(t, observedLogs, "Latest finalized block is not valid")
})`
$DIR/common/client/node_lifecycle_test.go: `head.On("IsValid").Return(false)`
$DIR/common/client/node_lifecycle_test.go: `rpc.On("LatestFinalizedBlock", mock.Anything).Return(head, nil)`
$DIR/common/client/node_lifecycle_test.go: `sub.On("Err").Return((<-chan error)(nil))`
$DIR/common/client/node_lifecycle_test.go: `sub.On("Unsubscribe").Once()`
$DIR/common/client/node_lifecycle_test.go: `rpc.On("Subscribe", mock.Anything, mock.Anything, rpcSubscriptionMethodNewHeads).Return(sub, nil).Once()`
$DIR/common/client/node_lifecycle_test.go: `rpc.On("SetAliveLoopSub", sub).Once()`
$DIR/common/client/node_lifecycle_test.go: `node.declareAlive()`
$DIR/common/client/node_lifecycle_test.go: `tests.AssertLogEventually(t, observedLogs, "Latest finalized block is not valid")`
$DIR/common/client/node_lifecycle_test.go: `rpc.On("LatestFinalizedBlock", mock.Anything).Return(head{BlockNumber: expectedBlock - 1}.ToMockHead(t), nil).Once()`
$DIR/common/client/node_lifecycle_test.go: `rpc.On("LatestFinalizedBlock", mock.Anything).Return(head{BlockNumber: expectedBlock}.ToMockHead(t), nil)`
$DIR/common/client/node_lifecycle_test.go: `sub.On("Err").Return((<-chan error)(nil))`
$DIR/common/client/node_lifecycle_test.go: `sub.On("Unsubscribe").Once()`
$DIR/common/client/node_lifecycle_test.go: `rpc.On("Subscribe", mock.Anything, mock.Anything, rpcSubscriptionMethodNewHeads).Run(func(args mock.Arguments) {
ch := args.Get(1).(chan<- Head)
// ensure that "calculated" finalized head is larger than actual, to ensure we are correctly setting
// the metric
go writeHeads(t, ch, head{BlockNumber: expectedBlock*2 + finalityDepth})
}).Return(sub, nil).Once()`
$DIR/common/client/node_lifecycle_test.go: `go writeHeads(t, ch, head{BlockNumber: expectedBlock*2 + finalityDepth})`
$DIR/common/client/node_lifecycle_test.go: `rpc.On("SetAliveLoopSub", sub).Once()`
$DIR/common/client/node_lifecycle_test.go: `node.declareAlive()`
$DIR/common/client/node_lifecycle_test.go: `tests.AssertEventually(t, func() bool {
metric, err := promPoolRPCNodeHighestFinalizedBlock.GetMetricWithLabelValues(big.NewInt(1).String(), name)
require.NoError(t, err)
var m = &prom.Metric{}
require.NoError(t, metric.Write(m))
return float64(expectedBlock) == m.Gauge.GetValue()
})`
$DIR/common/client/node_lifecycle_test.go: `opts.rpc.On("Close").Return(nil).Once()`
$DIR/common/client/node_lifecycle_test.go: `opts.rpc.On("DisconnectAll")`
$DIR/common/client/node_lifecycle_test.go: `node.setState(nodeStateAlive)`
$DIR/common/client/node_lifecycle_test.go: `t.Run("returns on closed", func(t *testing.T) {
t.Parallel()
node := newTestNode(t, testNodeOpts{})
node.setState(nodeStateClosed)
node.wg.Add(1)
node.outOfSyncLoop(stubIsOutOfSync)
})`
$DIR/common/client/node_lifecycle_test.go: `node.setState(nodeStateClosed)`
$DIR/common/client/node_lifecycle_test.go: `node.wg.Add(1)`
$DIR/common/client/node_lifecycle_test.go: `node.outOfSyncLoop(stubIsOutOfSync)`
$DIR/common/client/node_lifecycle_test.go: `t.Run("on old blocks stays outOfSync and returns on close", func(t *testing.T) {
t.Parallel()
rpc := newMockNodeClient[types.ID, Head](t)
nodeChainID := types.RandomID()
lggr, observedLogs := logger.TestObserved(t, zap.DebugLevel)
node := newAliveNode(t, testNodeOpts{
rpc: rpc,
chainID: nodeChainID,
lggr: lggr,
})
defer func() { assert.NoError(t, node.close()) }()
rpc.On("Dial", mock.Anything).Return(nil).Once()
rpc.On("ChainID", mock.Anything).Return(nodeChainID, nil).Once()
outOfSyncSubscription := mocks.NewSubscription(t)
outOfSyncSubscription.On("Err").Return((<-chan error)(nil))
outOfSyncSubscription.On("Unsubscribe").Once()
heads := []head{{BlockNumber: 7}, {BlockNumber: 11}, {BlockNumber: 13}}
rpc.On("Subscribe", mock.Anything, mock.Anything, rpcSubscriptionMethodNewHeads).Run(func(args mock.Arguments) {
ch := args.Get(1).(chan<- Head)
go writeHeads(t, ch, heads...)
}).Return(outOfSyncSubscription, nil).Once()
rpc.On("Dial", mock.Anything).Return(errors.New("failed to redial")).Maybe()
node.declareOutOfSync(func(num int64, td *big.Int) bool {
return true
})
tests.AssertLogCountEventually(t, observedLogs, msgReceivedBlock, len(heads))
assert.Equal(t, nodeStateOutOfSync, node.State())
})`
$DIR/common/client/node_lifecycle_test.go: `rpc.On("Dial", mock.Anything).Return(nil).Once()`
$DIR/common/client/node_lifecycle_test.go: `rpc.On("ChainID", mock.Anything).Return(nodeChainID, nil).Once()`
$DIR/common/client/node_lifecycle_test.go: `outOfSyncSubscription.On("Err").Return((<-chan error)(nil))`
$DIR/common/client/node_lifecycle_test.go: `outOfSyncSubscription.On("Unsubscribe").Once()`
$DIR/common/client/node_lifecycle_test.go: `rpc.On("Subscribe", mock.Anything, mock.Anything, rpcSubscriptionMethodNewHeads).Run(func(args mock.Arguments) {
ch := args.Get(1).(chan<- Head)
go writeHeads(t, ch, heads...)
}).Return(outOfSyncSubscription, nil).Once()`
$DIR/common/client/node_lifecycle_test.go: `go writeHeads(t, ch, heads...)`
$DIR/common/client/node_lifecycle_test.go: `rpc.On("Dial", mock.Anything).Return(errors.New("failed to redial")).Maybe()`
$DIR/common/client/node_lifecycle_test.go: `node.declareOutOfSync(func(num int64, td *big.Int) bool {
return true
})`
$DIR/common/client/node_lifecycle_test.go: `tests.AssertLogCountEventually(t, observedLogs, msgReceivedBlock, len(heads))`
$DIR/common/client/node_lifecycle_test.go: `t.Run("if initial dial fails, transitions to unreachable", func(t *testing.T) {
t.Parallel()
rpc := newMockNodeClient[types.ID, Head](t)
node := newAliveNode(t, testNodeOpts{
rpc: rpc,
})
defer func() { assert.NoError(t, node.close()) }()
expectedError := errors.New("failed to dial rpc")
// might be called again in unreachable loop, so no need to set once
rpc.On("Dial", mock.Anything).Return(expectedError)
node.declareOutOfSync(stubIsOutOfSync)
tests.AssertEventually(t, func() bool {
return node.State() == nodeStateUnreachable
})
})`
$DIR/common/client/node_lifecycle_test.go: `rpc.On("Dial", mock.Anything).Return(expectedError)`
$DIR/common/client/node_lifecycle_test.go: `node.declareOutOfSync(stubIsOutOfSync)`
$DIR/common/client/node_lifecycle_test.go: `tests.AssertEventually(t, func() bool {
return node.State() == nodeStateUnreachable
})`
$DIR/common/client/node_lifecycle_test.go: `t.Run("if fail to get chainID, transitions to unreachable", func(t *testing.T) {
t.Parallel()
rpc := newMockNodeClient[types.ID, Head](t)
node := newAliveNode(t, testNodeOpts{
rpc: rpc,
})
defer func() { assert.NoError(t, node.close()) }()
// for out-of-sync
rpc.On("Dial", mock.Anything).Return(nil).Once()
// for unreachable
rpc.On("Dial", mock.Anything).Return(errors.New("failed to dial")).Maybe()
expectedError := errors.New("failed to get chain ID")
// might be called multiple times
rpc.On("ChainID", mock.Anything).Return(types.NewIDFromInt(0), expectedError)
node.declareOutOfSync(stubIsOutOfSync)
tests.AssertEventually(t, func() bool {
return node.State() == nodeStateUnreachable
})
})`
$DIR/common/client/node_lifecycle_test.go: `rpc.On("Dial", mock.Anything).Return(nil).Once()`
$DIR/common/client/node_lifecycle_test.go: `rpc.On("Dial", mock.Anything).Return(errors.New("failed to dial")).Maybe()`
$DIR/common/client/node_lifecycle_test.go: `rpc.On("ChainID", mock.Anything).Return(types.NewIDFromInt(0), expectedError)`
$DIR/common/client/node_lifecycle_test.go: `node.declareOutOfSync(stubIsOutOfSync)`
$DIR/common/client/node_lifecycle_test.go: `tests.AssertEventually(t, func() bool {
return node.State() == nodeStateUnreachable
})`
$DIR/common/client/node_lifecycle_test.go: `t.Run("if chainID does not match, transitions to invalidChainID", func(t *testing.T) {
t.Parallel()
rpc := newMockNodeClient[types.ID, Head](t)
nodeChainID := types.NewIDFromInt(10)
rpcChainID := types.NewIDFromInt(11)
node := newAliveNode(t, testNodeOpts{
rpc: rpc,
chainID: nodeChainID,
})
defer func() { assert.NoError(t, node.close()) }()
// one for out-of-sync & one for invalid chainID
rpc.On("Dial", mock.Anything).Return(nil).Twice()
// might be called multiple times
rpc.On("ChainID", mock.Anything).Return(rpcChainID, nil)
node.declareOutOfSync(stubIsOutOfSync)
tests.AssertEventually(t, func() bool {
return node.State() == nodeStateInvalidChainID
})
})`
$DIR/common/client/node_lifecycle_test.go: `rpc.On("Dial", mock.Anything).Return(nil).Twice()`
$DIR/common/client/node_lifecycle_test.go: `rpc.On("ChainID", mock.Anything).Return(rpcChainID, nil)`
$DIR/common/client/node_lifecycle_test.go: `node.declareOutOfSync(stubIsOutOfSync)`
$DIR/common/client/node_lifecycle_test.go: `tests.AssertEventually(t, func() bool {
return node.State() == nodeStateInvalidChainID
})`
$DIR/common/client/node_lifecycle_test.go: `t.Run("if syncing, transitions to syncing", func(t *testing.T) {
t.Parallel()
rpc := newMockNodeClient[types.ID, Head](t)
nodeChainID := types.NewIDFromInt(10)
node := newAliveNode(t, testNodeOpts{
rpc: rpc,
chainID: nodeChainID,
config: testNodeConfig{nodeIsSyncingEnabled: true},
})
defer func() { assert.NoError(t, node.close()) }()
rpc.On("Dial", mock.Anything).Return(nil)
rpc.On("ChainID", mock.Anything).Return(nodeChainID, nil)
// might be called multiple times
rpc.On("IsSyncing", mock.Anything).Return(true, nil)
node.declareOutOfSync(stubIsOutOfSync)
tests.AssertEventually(t, func() bool {
return node.State() == nodeStateSyncing
})
})`
$DIR/common/client/node_lifecycle_test.go: `rpc.On("Dial", mock.Anything).Return(nil)`
$DIR/common/client/node_lifecycle_test.go: `rpc.On("ChainID", mock.Anything).Return(nodeChainID, nil)`
$DIR/common/client/node_lifecycle_test.go: `rpc.On("IsSyncing", mock.Anything).Return(true, nil)`
$DIR/common/client/node_lifecycle_test.go: `node.declareOutOfSync(stubIsOutOfSync)`
$DIR/common/client/node_lifecycle_test.go: `tests.AssertEventually(t, func() bool {
return node.State() == nodeStateSyncing
})`
$DIR/common/client/node_lifecycle_test.go: `t.Run("if fails to fetch syncing status, transitions to unreachable", func(t *testing.T) {
t.Parallel()
rpc := newMockNodeClient[types.ID, Head](t)
nodeChainID := types.NewIDFromInt(10)
node := newAliveNode(t, testNodeOpts{
rpc: rpc,
chainID: nodeChainID,
config: testNodeConfig{nodeIsSyncingEnabled: true},
})
defer func() { assert.NoError(t, node.close()) }()
// one for out-of-sync
rpc.On("Dial", mock.Anything).Return(nil).Once()
// for unreachable
rpc.On("Dial", mock.Anything).Return(errors.New("failed to dial")).Maybe()
rpc.On("ChainID", mock.Anything).Return(nodeChainID, nil).Once()
// might be called multiple times
rpc.On("IsSyncing", mock.Anything).Return(false, errors.New("failed to check syncing"))
node.declareOutOfSync(stubIsOutOfSync)
tests.AssertEventually(t, func() bool {
return node.State() == nodeStateUnreachable
})
})`
$DIR/common/client/node_lifecycle_test.go: `rpc.On("Dial", mock.Anything).Return(nil).Once()`
$DIR/common/client/node_lifecycle_test.go: `rpc.On("Dial", mock.Anything).Return(errors.New("failed to dial")).Maybe()`
$DIR/common/client/node_lifecycle_test.go: `rpc.On("ChainID", mock.Anything).Return(nodeChainID, nil).Once()`
$DIR/common/client/node_lifecycle_test.go: `rpc.On("IsSyncing", mock.Anything).Return(false, errors.New("failed to check syncing"))`
$DIR/common/client/node_lifecycle_test.go: `node.declareOutOfSync(stubIsOutOfSync)`
$DIR/common/client/node_lifecycle_test.go: `tests.AssertEventually(t, func() bool {
return node.State() == nodeStateUnreachable
})`
$DIR/common/client/node_lifecycle_test.go: `t.Run("if fails to subscribe, becomes unreachable", func(t *testing.T) {
t.Parallel()
rpc := newMockNodeClient[types.ID, Head](t)
nodeChainID := types.RandomID()
node := newAliveNode(t, testNodeOpts{
rpc: rpc,
chainID: nodeChainID,
})
defer func() { assert.NoError(t, node.close()) }()
rpc.On("Dial", mock.Anything).Return(nil).Once()
rpc.On("ChainID", mock.Anything).Return(nodeChainID, nil).Once()
expectedError := errors.New("failed to subscribe")
rpc.On("Subscribe", mock.Anything, mock.Anything, rpcSubscriptionMethodNewHeads).Return(nil, expectedError)
rpc.On("Dial", mock.Anything).Return(errors.New("failed to redial")).Maybe()
node.declareOutOfSync(stubIsOutOfSync)
tests.AssertEventually(t, func() bool {
return node.State() == nodeStateUnreachable
})
})`
$DIR/common/client/node_lifecycle_test.go: `rpc.On("Dial", mock.Anything).Return(nil).Once()`
$DIR/common/client/node_lifecycle_test.go: `rpc.On("ChainID", mock.Anything).Return(nodeChainID, nil).Once()`
$DIR/common/client/node_lifecycle_test.go: `rpc.On("Subscribe", mock.Anything, mock.Anything, rpcSubscriptionMethodNewHeads).Return(nil, expectedError)`
$DIR/common/client/node_lifecycle_test.go: `rpc.On("Dial", mock.Anything).Return(errors.New("failed to redial")).Maybe()`
$DIR/common/client/node_lifecycle_test.go: `node.declareOutOfSync(stubIsOutOfSync)`
$DIR/common/client/node_lifecycle_test.go: `tests.AssertEventually(t, func() bool {
return node.State() == nodeStateUnreachable
})`
$DIR/common/client/node_lifecycle_test.go: `t.Run("on subscription termination becomes unreachable", func(t *testing.T) {
t.Parallel()
rpc := newMockNodeClient[types.ID, Head](t)
nodeChainID := types.RandomID()
lggr, observedLogs := logger.TestObserved(t, zap.ErrorLevel)
node := newAliveNode(t, testNodeOpts{
rpc: rpc,
chainID: nodeChainID,
lggr: lggr,
})
defer func() { assert.NoError(t, node.close()) }()
rpc.On("Dial", mock.Anything).Return(nil).Once()
rpc.On("ChainID", mock.Anything).Return(nodeChainID, nil).Once()
sub := mocks.NewSubscription(t)
errChan := make(chan error, 1)
errChan <- errors.New("subscription was terminate")
sub.On("Err").Return((<-chan error)(errChan))
sub.On("Unsubscribe").Once()
rpc.On("Subscribe", mock.Anything, mock.Anything, rpcSubscriptionMethodNewHeads).Return(sub, nil).Once()
rpc.On("Dial", mock.Anything).Return(errors.New("failed to redial")).Maybe()
node.declareOutOfSync(stubIsOutOfSync)
tests.AssertLogEventually(t, observedLogs, "Subscription was terminated")
tests.AssertEventually(t, func() bool {
return node.State() == nodeStateUnreachable
})
})`
$DIR/common/client/node_lifecycle_test.go: `rpc.On("Dial", mock.Anything).Return(nil).Once()`
$DIR/common/client/node_lifecycle_test.go: `rpc.On("ChainID", mock.Anything).Return(nodeChainID, nil).Once()`
$DIR/common/client/node_lifecycle_test.go: `errChan <- errors.New("subscription was terminate")`
$DIR/common/client/node_lifecycle_test.go: `sub.On("Err").Return((<-chan error)(errChan))`
$DIR/common/client/node_lifecycle_test.go: `sub.On("Unsubscribe").Once()`
$DIR/common/client/node_lifecycle_test.go: `rpc.On("Subscribe", mock.Anything, mock.Anything, rpcSubscriptionMethodNewHeads).Return(sub, nil).Once()`
$DIR/common/client/node_lifecycle_test.go: `rpc.On("Dial", mock.Anything).Return(errors.New("failed to redial")).Maybe()`
$DIR/common/client/node_lifecycle_test.go: `node.declareOutOfSync(stubIsOutOfSync)`
$DIR/common/client/node_lifecycle_test.go: `tests.AssertLogEventually(t, observedLogs, "Subscription was terminated")`
$DIR/common/client/node_lifecycle_test.go: `tests.AssertEventually(t, func() bool {
return node.State() == nodeStateUnreachable
})`
$DIR/common/client/node_lifecycle_test.go: `t.Run("becomes unreachable if head channel is closed", func(t *testing.T) {
t.Parallel()
rpc := newMockNodeClient[types.ID, Head](t)
nodeChainID := types.RandomID()
lggr, observedLogs := logger.TestObserved(t, zap.ErrorLevel)
node := newAliveNode(t, testNodeOpts{
rpc: rpc,
chainID: nodeChainID,
lggr: lggr,
})
defer func() { assert.NoError(t, node.close()) }()
rpc.On("Dial", mock.Anything).Return(nil).Once()
rpc.On("ChainID", mock.Anything).Return(nodeChainID, nil).Once()
sub := mocks.NewSubscription(t)
sub.On("Err").Return((<-chan error)(nil))
sub.On("Unsubscribe").Once()
rpc.On("Subscribe", mock.Anything, mock.Anything, rpcSubscriptionMethodNewHeads).Run(func(args mock.Arguments) {
ch := args.Get(1).(chan<- Head)
close(ch)
}).Return(sub, nil).Once()
rpc.On("Dial", mock.Anything).Return(errors.New("failed to redial")).Maybe()
node.declareOutOfSync(stubIsOutOfSync)
tests.AssertLogEventually(t, observedLogs, "Subscription channel unexpectedly closed")
tests.AssertEventually(t, func() bool {
return node.State() == nodeStateUnreachable
})
})`
$DIR/common/client/node_lifecycle_test.go: `rpc.On("Dial", mock.Anything).Return(nil).Once()`
$DIR/common/client/node_lifecycle_test.go: `rpc.On("ChainID", mock.Anything).Return(nodeChainID, nil).Once()`
$DIR/common/client/node_lifecycle_test.go: `sub.On("Err").Return((<-chan error)(nil))`
$DIR/common/client/node_lifecycle_test.go: `sub.On("Unsubscribe").Once()`
$DIR/common/client/node_lifecycle_test.go: `rpc.On("Subscribe", mock.Anything, mock.Anything, rpcSubscriptionMethodNewHeads).Run(func(args mock.Arguments) {
ch := args.Get(1).(chan<- Head)
close(ch)
}).Return(sub, nil).Once()`
$DIR/common/client/node_lifecycle_test.go: `close(ch)`
$DIR/common/client/node_lifecycle_test.go: `rpc.On("Dial", mock.Anything).Return(errors.New("failed to redial")).Maybe()`
$DIR/common/client/node_lifecycle_test.go: `node.declareOutOfSync(stubIsOutOfSync)`
$DIR/common/client/node_lifecycle_test.go: `tests.AssertLogEventually(t, observedLogs, "Subscription channel unexpectedly closed")`
$DIR/common/client/node_lifecycle_test.go: `tests.AssertEventually(t, func() bool {
return node.State() == nodeStateUnreachable
})`
$DIR/common/client/node_lifecycle_test.go: `t.Run("becomes alive if it receives a newer head", func(t *testing.T) {
t.Parallel()
rpc := newMockNodeClient[types.ID, Head](t)
nodeChainID := types.RandomID()
lggr, observedLogs := logger.TestObserved(t, zap.DebugLevel)
node := newAliveNode(t, testNodeOpts{
rpc: rpc,
chainID: nodeChainID,
lggr: lggr,
})
defer func() { assert.NoError(t, node.close()) }()
rpc.On("Dial", mock.Anything).Return(nil).Once()
rpc.On("ChainID", mock.Anything).Return(nodeChainID, nil).Once()
outOfSyncSubscription := mocks.NewSubscription(t)
outOfSyncSubscription.On("Err").Return((<-chan error)(nil))
outOfSyncSubscription.On("Unsubscribe").Once()
const highestBlock = 1000
rpc.On("Subscribe", mock.Anything, mock.Anything, rpcSubscriptionMethodNewHeads).Run(func(args mock.Arguments) {
ch := args.Get(1).(chan<- Head)
go writeHeads(t, ch, head{BlockNumber: highestBlock - 1}, head{BlockNumber: highestBlock})
}).Return(outOfSyncSubscription, nil).Once()
setupRPCForAliveLoop(t, rpc)
node.declareOutOfSync(func(num int64, td *big.Int) bool {
return num < highestBlock
})
tests.AssertLogEventually(t, observedLogs, msgReceivedBlock)
tests.AssertLogEventually(t, observedLogs, msgInSync)
tests.AssertEventually(t, func() bool {
return node.State() == nodeStateAlive
})
})`
$DIR/common/client/node_lifecycle_test.go: `rpc.On("Dial", mock.Anything).Return(nil).Once()`
$DIR/common/client/node_lifecycle_test.go: `rpc.On("ChainID", mock.Anything).Return(nodeChainID, nil).Once()`
$DIR/common/client/node_lifecycle_test.go: `outOfSyncSubscription.On("Err").Return((<-chan error)(nil))`
$DIR/common/client/node_lifecycle_test.go: `outOfSyncSubscription.On("Unsubscribe").Once()`
$DIR/common/client/node_lifecycle_test.go: `rpc.On("Subscribe", mock.Anything, mock.Anything, rpcSubscriptionMethodNewHeads).Run(func(args mock.Arguments) {
ch := args.Get(1).(chan<- Head)
go writeHeads(t, ch, head{BlockNumber: highestBlock - 1}, head{BlockNumber: highestBlock})
}).Return(outOfSyncSubscription, nil).Once()`
$DIR/common/client/node_lifecycle_test.go: `go writeHeads(t, ch, head{BlockNumber: highestBlock - 1}, head{BlockNumber: highestBlock})`
$DIR/common/client/node_lifecycle_test.go: `setupRPCForAliveLoop(t, rpc)`
$DIR/common/client/node_lifecycle_test.go: `node.declareOutOfSync(func(num int64, td *big.Int) bool {
return num < highestBlock
})`
$DIR/common/client/node_lifecycle_test.go: `tests.AssertLogEventually(t, observedLogs, msgReceivedBlock)`
$DIR/common/client/node_lifecycle_test.go: `tests.AssertLogEventually(t, observedLogs, msgInSync)`
$DIR/common/client/node_lifecycle_test.go: `tests.AssertEventually(t, func() bool {
return node.State() == nodeStateAlive
})`
$DIR/common/client/node_lifecycle_test.go: `rpc.On("Dial", mock.Anything).Return(nil).Once()`
$DIR/common/client/node_lifecycle_test.go: `rpc.On("ChainID", mock.Anything).Return(nodeChainID, nil).Once()`
$DIR/common/client/node_lifecycle_test.go: `outOfSyncSubscription.On("Err").Return((<-chan error)(nil))`
$DIR/common/client/node_lifecycle_test.go: `outOfSyncSubscription.On("Unsubscribe").Once()`
$DIR/common/client/node_lifecycle_test.go: `rpc.On("Subscribe", mock.Anything, mock.Anything, rpcSubscriptionMethodNewHeads).Return(outOfSyncSubscription, nil).Once()`
$DIR/common/client/node_lifecycle_test.go: `setupRPCForAliveLoop(t, rpc)`
$DIR/common/client/node_lifecycle_test.go: `node.declareOutOfSync(stubIsOutOfSync)`
$DIR/common/client/node_lifecycle_test.go: `tests.AssertLogEventually(t, observedLogs, "RPC endpoint is still out of sync, but there are no other available nodes. This RPC node will be forcibly moved back into the live pool in a degraded state")`
$DIR/common/client/node_lifecycle_test.go: `tests.AssertEventually(t, func() bool {
return node.State() == nodeStateAlive
})`
$DIR/common/client/node_lifecycle_test.go: `opts.rpc.On("Close").Return(nil).Once()`
$DIR/common/client/node_lifecycle_test.go: `opts.rpc.On("DisconnectAll")`
$DIR/common/client/node_lifecycle_test.go: `node.setState(nodeStateAlive)`
$DIR/common/client/node_lifecycle_test.go: `t.Run("returns on closed", func(t *testing.T) {
t.Parallel()
node := newTestNode(t, testNodeOpts{})
node.setState(nodeStateClosed)
node.wg.Add(1)
node.unreachableLoop()
})`
$DIR/common/client/node_lifecycle_test.go: `node.setState(nodeStateClosed)`
$DIR/common/client/node_lifecycle_test.go: `node.wg.Add(1)`
$DIR/common/client/node_lifecycle_test.go: `node.unreachableLoop()`
$DIR/common/client/node_lifecycle_test.go: `t.Run("on failed redial, keeps trying", func(t *testing.T) {
t.Parallel()
rpc := newMockNodeClient[types.ID, Head](t)
nodeChainID := types.RandomID()
lggr, observedLogs := logger.TestObserved(t, zap.DebugLevel)
node := newAliveNode(t, testNodeOpts{
rpc: rpc,
chainID: nodeChainID,
lggr: lggr,
})
defer func() { assert.NoError(t, node.close()) }()
rpc.On("Dial", mock.Anything).Return(errors.New("failed to dial"))
node.declareUnreachable()
tests.AssertLogCountEventually(t, observedLogs, "Failed to redial RPC node; still unreachable", 2)
})`
$DIR/common/client/node_lifecycle_test.go: `rpc.On("Dial", mock.Anything).Return(errors.New("failed to dial"))`
$DIR/common/client/node_lifecycle_test.go: `node.declareUnreachable()`
$DIR/common/client/node_lifecycle_test.go: `tests.AssertLogCountEventually(t, observedLogs, "Failed to redial RPC node; still unreachable", 2)`
$DIR/common/client/node_lifecycle_test.go: `t.Run("on failed chainID verification, keep trying", func(t *testing.T) {
t.Parallel()
rpc := newMockNodeClient[types.ID, Head](t)
nodeChainID := types.RandomID()
lggr, observedLogs := logger.TestObserved(t, zap.DebugLevel)
node := newAliveNode(t, testNodeOpts{
rpc: rpc,
chainID: nodeChainID,
lggr: lggr,
})
defer func() { assert.NoError(t, node.close()) }()
rpc.On("Dial", mock.Anything).Return(nil)
rpc.On("ChainID", mock.Anything).Run(func(_ mock.Arguments) {
assert.Equal(t, nodeStateDialed, node.State())
}).Return(nodeChainID, errors.New("failed to get chain id"))
node.declareUnreachable()
tests.AssertLogCountEventually(t, observedLogs, "Failed to verify chain ID for node", 2)
})`
$DIR/common/client/node_lifecycle_test.go: `rpc.On("Dial", mock.Anything).Return(nil)`
$DIR/common/client/node_lifecycle_test.go: `rpc.On("ChainID", mock.Anything).Run(func(_ mock.Arguments) {
assert.Equal(t, nodeStateDialed, node.State())
}).Return(nodeChainID, errors.New("failed to get chain id"))`
$DIR/common/client/node_lifecycle_test.go: `node.declareUnreachable()`
$DIR/common/client/node_lifecycle_test.go: `tests.AssertLogCountEventually(t, observedLogs, "Failed to verify chain ID for node", 2)`
$DIR/common/client/node_lifecycle_test.go: `t.Run("on chain ID mismatch transitions to invalidChainID", func(t *testing.T) {
t.Parallel()
rpc := newMockNodeClient[types.ID, Head](t)
nodeChainID := types.NewIDFromInt(10)
rpcChainID := types.NewIDFromInt(11)
node := newAliveNode(t, testNodeOpts{
rpc: rpc,
chainID: nodeChainID,
})
defer func() { assert.NoError(t, node.close()) }()
rpc.On("Dial", mock.Anything).Return(nil)
rpc.On("ChainID", mock.Anything).Return(rpcChainID, nil)
node.declareUnreachable()
tests.AssertEventually(t, func() bool {
return node.State() == nodeStateInvalidChainID
})
})`
$DIR/common/client/node_lifecycle_test.go: `rpc.On("Dial", mock.Anything).Return(nil)`
$DIR/common/client/node_lifecycle_test.go: `rpc.On("ChainID", mock.Anything).Return(rpcChainID, nil)`
$DIR/common/client/node_lifecycle_test.go: `node.declareUnreachable()`
$DIR/common/client/node_lifecycle_test.go: `tests.AssertEventually(t, func() bool {
return node.State() == nodeStateInvalidChainID
})`
$DIR/common/client/node_lifecycle_test.go: `t.Run("on syncing status check failure, keeps trying", func(t *testing.T) {
t.Parallel()
rpc := newMockNodeClient[types.ID, Head](t)
nodeChainID := types.RandomID()
lggr, observedLogs := logger.TestObserved(t, zap.DebugLevel)
node := newAliveNode(t, testNodeOpts{
rpc: rpc,
chainID: nodeChainID,
lggr: lggr,
config: testNodeConfig{nodeIsSyncingEnabled: true},
})
defer func() { assert.NoError(t, node.close()) }()
rpc.On("Dial", mock.Anything).Return(nil)
rpc.On("ChainID", mock.Anything).Run(func(_ mock.Arguments) {
assert.Equal(t, nodeStateDialed, node.State())
}).Return(nodeChainID, nil)
rpc.On("IsSyncing", mock.Anything).Return(false, errors.New("failed to check syncing status"))
node.declareUnreachable()
tests.AssertLogCountEventually(t, observedLogs, "Unexpected error while verifying RPC node synchronization status", 2)
})`
$DIR/common/client/node_lifecycle_test.go: `rpc.On("Dial", mock.Anything).Return(nil)`
$DIR/common/client/node_lifecycle_test.go: `rpc.On("ChainID", mock.Anything).Run(func(_ mock.Arguments) {
assert.Equal(t, nodeStateDialed, node.State())
}).Return(nodeChainID, nil)`
$DIR/common/client/node_lifecycle_test.go: `rpc.On("IsSyncing", mock.Anything).Return(false, errors.New("failed to check syncing status"))`
$DIR/common/client/node_lifecycle_test.go: `node.declareUnreachable()`
$DIR/common/client/node_lifecycle_test.go: `tests.AssertLogCountEventually(t, observedLogs, "Unexpected error while verifying RPC node synchronization status", 2)`
$DIR/common/client/node_lifecycle_test.go: `t.Run("on syncing, transitions to syncing state", func(t *testing.T) {
t.Parallel()
rpc := newMockNodeClient[types.ID, Head](t)
nodeChainID := types.RandomID()
node := newAliveNode(t, testNodeOpts{
rpc: rpc,
chainID: nodeChainID,
config: testNodeConfig{nodeIsSyncingEnabled: true},
})
defer func() { assert.NoError(t, node.close()) }()
rpc.On("Dial", mock.Anything).Return(nil)
rpc.On("ChainID", mock.Anything).Return(nodeChainID, nil)
rpc.On("IsSyncing", mock.Anything).Return(true, nil)
setupRPCForAliveLoop(t, rpc)
node.declareUnreachable()
tests.AssertEventually(t, func() bool {
return node.State() == nodeStateSyncing
})
})`
$DIR/common/client/node_lifecycle_test.go: `rpc.On("Dial", mock.Anything).Return(nil)`
$DIR/common/client/node_lifecycle_test.go: `rpc.On("ChainID", mock.Anything).Return(nodeChainID, nil)`
$DIR/common/client/node_lifecycle_test.go: `rpc.On("IsSyncing", mock.Anything).Return(true, nil)`
$DIR/common/client/node_lifecycle_test.go: `setupRPCForAliveLoop(t, rpc)`
$DIR/common/client/node_lifecycle_test.go: `node.declareUnreachable()`
$DIR/common/client/node_lifecycle_test.go: `tests.AssertEventually(t, func() bool {
return node.State() == nodeStateSyncing
})`
$DIR/common/client/node_lifecycle_test.go: `t.Run("on successful verification becomes alive", func(t *testing.T) {
t.Parallel()
rpc := newMockNodeClient[types.ID, Head](t)
nodeChainID := types.RandomID()
node := newAliveNode(t, testNodeOpts{
rpc: rpc,
chainID: nodeChainID,
config: testNodeConfig{nodeIsSyncingEnabled: true},
})
defer func() { assert.NoError(t, node.close()) }()
rpc.On("Dial", mock.Anything).Return(nil)
rpc.On("ChainID", mock.Anything).Return(nodeChainID, nil)
rpc.On("IsSyncing", mock.Anything).Return(false, nil)
setupRPCForAliveLoop(t, rpc)
node.declareUnreachable()
tests.AssertEventually(t, func() bool {
return node.State() == nodeStateAlive
})
})`
$DIR/common/client/node_lifecycle_test.go: `rpc.On("Dial", mock.Anything).Return(nil)`
$DIR/common/client/node_lifecycle_test.go: `rpc.On("ChainID", mock.Anything).Return(nodeChainID, nil)`
$DIR/common/client/node_lifecycle_test.go: `rpc.On("IsSyncing", mock.Anything).Return(false, nil)`
$DIR/common/client/node_lifecycle_test.go: `setupRPCForAliveLoop(t, rpc)`
$DIR/common/client/node_lifecycle_test.go: `node.declareUnreachable()`
$DIR/common/client/node_lifecycle_test.go: `tests.AssertEventually(t, func() bool {
return node.State() == nodeStateAlive
})`
$DIR/common/client/node_lifecycle_test.go: `rpc.On("Dial", mock.Anything).Return(nil)`
$DIR/common/client/node_lifecycle_test.go: `rpc.On("ChainID", mock.Anything).Return(nodeChainID, nil)`
$DIR/common/client/node_lifecycle_test.go: `setupRPCForAliveLoop(t, rpc)`
$DIR/common/client/node_lifecycle_test.go: `node.declareUnreachable()`
$DIR/common/client/node_lifecycle_test.go: `tests.AssertEventually(t, func() bool {
return node.State() == nodeStateAlive
})`
$DIR/common/client/node_lifecycle_test.go: `opts.rpc.On("Close").Return(nil).Once()`
$DIR/common/client/node_lifecycle_test.go: `opts.rpc.On("DisconnectAll")`
$DIR/common/client/node_lifecycle_test.go: `node.setState(nodeStateDialed)`
$DIR/common/client/node_lifecycle_test.go: `t.Run("returns on closed", func(t *testing.T) {
t.Parallel()
node := newTestNode(t, testNodeOpts{})
node.setState(nodeStateClosed)
node.wg.Add(1)
node.invalidChainIDLoop()
})`
$DIR/common/client/node_lifecycle_test.go: `node.setState(nodeStateClosed)`
$DIR/common/client/node_lifecycle_test.go: `node.wg.Add(1)`
$DIR/common/client/node_lifecycle_test.go: `node.invalidChainIDLoop()`
$DIR/common/client/node_lifecycle_test.go: `t.Run("on invalid dial becomes unreachable", func(t *testing.T) {
t.Parallel()
rpc := newMockNodeClient[types.ID, Head](t)
nodeChainID := types.RandomID()
node := newDialedNode(t, testNodeOpts{
rpc: rpc,
chainID: nodeChainID,
})
defer func() { assert.NoError(t, node.close()) }()
rpc.On("Dial", mock.Anything).Return(errors.New("failed to dial"))
node.declareInvalidChainID()
tests.AssertEventually(t, func() bool {
return node.State() == nodeStateUnreachable
})
})`
$DIR/common/client/node_lifecycle_test.go: `rpc.On("Dial", mock.Anything).Return(errors.New("failed to dial"))`
$DIR/common/client/node_lifecycle_test.go: `node.declareInvalidChainID()`
$DIR/common/client/node_lifecycle_test.go: `tests.AssertEventually(t, func() bool {
return node.State() == nodeStateUnreachable
})`
$DIR/common/client/node_lifecycle_test.go: `t.Run("on failed chainID call becomes unreachable", func(t *testing.T) {
t.Parallel()
rpc := newMockNodeClient[types.ID, Head](t)
nodeChainID := types.RandomID()
lggr, observedLogs := logger.TestObserved(t, zap.DebugLevel)
node := newDialedNode(t, testNodeOpts{
rpc: rpc,
chainID: nodeChainID,
lggr: lggr,
})
defer func() { assert.NoError(t, node.close()) }()
rpc.On("ChainID", mock.Anything).Return(nodeChainID, errors.New("failed to get chain id"))
// once for chainID and maybe another one for unreachable
rpc.On("Dial", mock.Anything).Return(nil).Once()
rpc.On("Dial", mock.Anything).Return(errors.New("failed to dial")).Maybe()
node.declareInvalidChainID()
tests.AssertLogEventually(t, observedLogs, "Failed to verify chain ID for node")
tests.AssertEventually(t, func() bool {
return node.State() == nodeStateUnreachable
})
})`
$DIR/common/client/node_lifecycle_test.go: `rpc.On("ChainID", mock.Anything).Return(nodeChainID, errors.New("failed to get chain id"))`
$DIR/common/client/node_lifecycle_test.go: `rpc.On("Dial", mock.Anything).Return(nil).Once()`
$DIR/common/client/node_lifecycle_test.go: `rpc.On("Dial", mock.Anything).Return(errors.New("failed to dial")).Maybe()`
$DIR/common/client/node_lifecycle_test.go: `node.declareInvalidChainID()`
$DIR/common/client/node_lifecycle_test.go: `tests.AssertLogEventually(t, observedLogs, "Failed to verify chain ID for node")`
$DIR/common/client/node_lifecycle_test.go: `tests.AssertEventually(t, func() bool {
return node.State() == nodeStateUnreachable
})`
$DIR/common/client/node_lifecycle_test.go: `t.Run("on chainID mismatch keeps trying", func(t *testing.T) {
t.Parallel()
rpc := newMockNodeClient[types.ID, Head](t)
nodeChainID := types.NewIDFromInt(10)
rpcChainID := types.NewIDFromInt(11)
lggr, observedLogs := logger.TestObserved(t, zap.DebugLevel)
node := newDialedNode(t, testNodeOpts{
rpc: rpc,
chainID: nodeChainID,
lggr: lggr,
})
defer func() { assert.NoError(t, node.close()) }()
rpc.On("Dial", mock.Anything).Return(nil).Once()
rpc.On("ChainID", mock.Anything).Return(rpcChainID, nil)
node.declareInvalidChainID()
tests.AssertLogCountEventually(t, observedLogs, "Failed to verify RPC node; remote endpoint returned the wrong chain ID", 2)
tests.AssertEventually(t, func() bool {
return node.State() == nodeStateInvalidChainID
})
})`
$DIR/common/client/node_lifecycle_test.go: `rpc.On("Dial", mock.Anything).Return(nil).Once()`
$DIR/common/client/node_lifecycle_test.go: `rpc.On("ChainID", mock.Anything).Return(rpcChainID, nil)`
$DIR/common/client/node_lifecycle_test.go: `node.declareInvalidChainID()`
$DIR/common/client/node_lifecycle_test.go: `tests.AssertLogCountEventually(t, observedLogs, "Failed to verify RPC node; remote endpoint returned the wrong chain ID", 2)`
$DIR/common/client/node_lifecycle_test.go: `tests.AssertEventually(t, func() bool {
return node.State() == nodeStateInvalidChainID
})`
$DIR/common/client/node_lifecycle_test.go: `t.Run("on successful verification without isSyncing becomes alive", func(t *testing.T) {
t.Parallel()
rpc := newMockNodeClient[types.ID, Head](t)
nodeChainID := types.NewIDFromInt(10)
rpcChainID := types.NewIDFromInt(11)
node := newDialedNode(t, testNodeOpts{
rpc: rpc,
chainID: nodeChainID,
})
defer func() { assert.NoError(t, node.close()) }()
rpc.On("Dial", mock.Anything).Return(nil).Once()
rpc.On("ChainID", mock.Anything).Return(rpcChainID, nil).Once()
rpc.On("ChainID", mock.Anything).Return(nodeChainID, nil).Once()
setupRPCForAliveLoop(t, rpc)
node.declareInvalidChainID()
tests.AssertEventually(t, func() bool {
return node.State() == nodeStateAlive
})
})`
$DIR/common/client/node_lifecycle_test.go: `rpc.On("Dial", mock.Anything).Return(nil).Once()`
$DIR/common/client/node_lifecycle_test.go: `rpc.On("ChainID", mock.Anything).Return(rpcChainID, nil).Once()`
$DIR/common/client/node_lifecycle_test.go: `rpc.On("ChainID", mock.Anything).Return(nodeChainID, nil).Once()`
$DIR/common/client/node_lifecycle_test.go: `setupRPCForAliveLoop(t, rpc)`
$DIR/common/client/node_lifecycle_test.go: `node.declareInvalidChainID()`
$DIR/common/client/node_lifecycle_test.go: `tests.AssertEventually(t, func() bool {
return node.State() == nodeStateAlive
})`
$DIR/common/client/node_lifecycle_test.go: `rpc.On("Dial", mock.Anything).Return(nil).Once()`
$DIR/common/client/node_lifecycle_test.go: `rpc.On("ChainID", mock.Anything).Return(rpcChainID, nil).Once()`
$DIR/common/client/node_lifecycle_test.go: `rpc.On("ChainID", mock.Anything).Return(nodeChainID, nil).Once()`
$DIR/common/client/node_lifecycle_test.go: `rpc.On("IsSyncing", mock.Anything).Return(false, nil).Once()`
$DIR/common/client/node_lifecycle_test.go: `setupRPCForAliveLoop(t, rpc)`
$DIR/common/client/node_lifecycle_test.go: `node.declareInvalidChainID()`
$DIR/common/client/node_lifecycle_test.go: `tests.AssertEventually(t, func() bool {
return node.State() == nodeStateAlive
})`
$DIR/common/client/node_lifecycle_test.go: `opts.rpc.On("Close").Return(nil).Once()`
$DIR/common/client/node_lifecycle_test.go: `t.Run("if fails on initial dial, becomes unreachable", func(t *testing.T) {
t.Parallel()
rpc := newMockNodeClient[types.ID, Head](t)
nodeChainID := types.RandomID()
lggr, observedLogs := logger.TestObserved(t, zap.DebugLevel)
node := newNode(t, testNodeOpts{
rpc: rpc,
chainID: nodeChainID,
lggr: lggr,
})
defer func() { assert.NoError(t, node.close()) }()
rpc.On("Dial", mock.Anything).Return(errors.New("failed to dial"))
// disconnects all on transfer to unreachable
rpc.On("DisconnectAll")
err := node.Start(tests.Context(t))
assert.NoError(t, err)
tests.AssertLogEventually(t, observedLogs, "Dial failed: Node is unreachable")
tests.AssertEventually(t, func() bool {
return node.State() == nodeStateUnreachable
})
})`
$DIR/common/client/node_lifecycle_test.go: `rpc.On("Dial", mock.Anything).Return(errors.New("failed to dial"))`
$DIR/common/client/node_lifecycle_test.go: `rpc.On("DisconnectAll")`
$DIR/common/client/node_lifecycle_test.go: `tests.AssertLogEventually(t, observedLogs, "Dial failed: Node is unreachable")`
$DIR/common/client/node_lifecycle_test.go: `tests.AssertEventually(t, func() bool {
return node.State() == nodeStateUnreachable
})`
$DIR/common/client/node_lifecycle_test.go: `t.Run("if chainID verification fails, becomes unreachable", func(t *testing.T) {
t.Parallel()
rpc := newMockNodeClient[types.ID, Head](t)
nodeChainID := types.RandomID()
lggr, observedLogs := logger.TestObserved(t, zap.DebugLevel)
node := newNode(t, testNodeOpts{
rpc: rpc,
chainID: nodeChainID,
lggr: lggr,
})
defer func() { assert.NoError(t, node.close()) }()
rpc.On("Dial", mock.Anything).Return(nil)
rpc.On("ChainID", mock.Anything).Run(func(_ mock.Arguments) {
assert.Equal(t, nodeStateDialed, node.State())
}).Return(nodeChainID, errors.New("failed to get chain id"))
// disconnects all on transfer to unreachable
rpc.On("DisconnectAll")
err := node.Start(tests.Context(t))
assert.NoError(t, err)
tests.AssertLogEventually(t, observedLogs, "Failed to verify chain ID for node")
tests.AssertEventually(t, func() bool {
return node.State() == nodeStateUnreachable
})
})`
$DIR/common/client/node_lifecycle_test.go: `rpc.On("Dial", mock.Anything).Return(nil)`
$DIR/common/client/node_lifecycle_test.go: `rpc.On("ChainID", mock.Anything).Run(func(_ mock.Arguments) {
assert.Equal(t, nodeStateDialed, node.State())
}).Return(nodeChainID, errors.New("failed to get chain id"))`
$DIR/common/client/node_lifecycle_test.go: `rpc.On("DisconnectAll")`
$DIR/common/client/node_lifecycle_test.go: `tests.AssertLogEventually(t, observedLogs, "Failed to verify chain ID for node")`
$DIR/common/client/node_lifecycle_test.go: `tests.AssertEventually(t, func() bool {
return node.State() == nodeStateUnreachable
})`
$DIR/common/client/node_lifecycle_test.go: `t.Run("on chain ID mismatch transitions to invalidChainID", func(t *testing.T) {
t.Parallel()
rpc := newMockNodeClient[types.ID, Head](t)
nodeChainID := types.NewIDFromInt(10)
rpcChainID := types.NewIDFromInt(11)
node := newNode(t, testNodeOpts{
rpc: rpc,
chainID: nodeChainID,
})
defer func() { assert.NoError(t, node.close()) }()
rpc.On("Dial", mock.Anything).Return(nil)
rpc.On("ChainID", mock.Anything).Return(rpcChainID, nil)
// disconnects all on transfer to unreachable
rpc.On("DisconnectAll")
err := node.Start(tests.Context(t))
assert.NoError(t, err)
tests.AssertEventually(t, func() bool {
return node.State() == nodeStateInvalidChainID
})
})`
$DIR/common/client/node_lifecycle_test.go: `rpc.On("Dial", mock.Anything).Return(nil)`
$DIR/common/client/node_lifecycle_test.go: `rpc.On("ChainID", mock.Anything).Return(rpcChainID, nil)`
$DIR/common/client/node_lifecycle_test.go: `rpc.On("DisconnectAll")`
$DIR/common/client/node_lifecycle_test.go: `tests.AssertEventually(t, func() bool {
return node.State() == nodeStateInvalidChainID
})`
$DIR/common/client/node_lifecycle_test.go: `t.Run("if syncing verification fails, becomes unreachable", func(t *testing.T) {
t.Parallel()
rpc := newMockNodeClient[types.ID, Head](t)
nodeChainID := types.RandomID()
lggr, observedLogs := logger.TestObserved(t, zap.DebugLevel)
node := newNode(t, testNodeOpts{
rpc: rpc,
chainID: nodeChainID,
lggr: lggr,
config: testNodeConfig{nodeIsSyncingEnabled: true},
})
defer func() { assert.NoError(t, node.close()) }()
rpc.On("Dial", mock.Anything).Return(nil).Once()
rpc.On("ChainID", mock.Anything).Run(func(_ mock.Arguments) {
assert.Equal(t, nodeStateDialed, node.State())
}).Return(nodeChainID, nil).Once()
rpc.On("IsSyncing", mock.Anything).Return(false, errors.New("failed to check syncing status"))
// disconnects all on transfer to unreachable
rpc.On("DisconnectAll")
// fail to redial to stay in unreachable state
rpc.On("Dial", mock.Anything).Return(errors.New("failed to redial"))
err := node.Start(tests.Context(t))
assert.NoError(t, err)
tests.AssertLogEventually(t, observedLogs, "Unexpected error while verifying RPC node synchronization status")
tests.AssertEventually(t, func() bool {
return node.State() == nodeStateUnreachable
})
})`
$DIR/common/client/node_lifecycle_test.go: `rpc.On("Dial", mock.Anything).Return(nil).Once()`
$DIR/common/client/node_lifecycle_test.go: `rpc.On("ChainID", mock.Anything).Run(func(_ mock.Arguments) {
assert.Equal(t, nodeStateDialed, node.State())
}).Return(nodeChainID, nil).Once()`
$DIR/common/client/node_lifecycle_test.go: `rpc.On("IsSyncing", mock.Anything).Return(false, errors.New("failed to check syncing status"))`
$DIR/common/client/node_lifecycle_test.go: `rpc.On("DisconnectAll")`
$DIR/common/client/node_lifecycle_test.go: `rpc.On("Dial", mock.Anything).Return(errors.New("failed to redial"))`
$DIR/common/client/node_lifecycle_test.go: `tests.AssertLogEventually(t, observedLogs, "Unexpected error while verifying RPC node synchronization status")`
$DIR/common/client/node_lifecycle_test.go: `tests.AssertEventually(t, func() bool {
return node.State() == nodeStateUnreachable
})`
$DIR/common/client/node_lifecycle_test.go: `t.Run("on isSyncing transitions to syncing", func(t *testing.T) {
t.Parallel()
rpc := newMockNodeClient[types.ID, Head](t)
nodeChainID := types.NewIDFromInt(10)
node := newNode(t, testNodeOpts{
rpc: rpc,
chainID: nodeChainID,
config: testNodeConfig{nodeIsSyncingEnabled: true},
})
defer func() { assert.NoError(t, node.close()) }()
rpc.On("Dial", mock.Anything).Return(nil)
rpc.On("ChainID", mock.Anything).Return(nodeChainID, nil)
rpc.On("IsSyncing", mock.Anything).Return(true, nil)
// disconnects all on transfer to unreachable
rpc.On("DisconnectAll")
err := node.Start(tests.Context(t))
assert.NoError(t, err)
tests.AssertEventually(t, func() bool {
return node.State() == nodeStateSyncing
})
})`
$DIR/common/client/node_lifecycle_test.go: `rpc.On("Dial", mock.Anything).Return(nil)`
$DIR/common/client/node_lifecycle_test.go: `rpc.On("ChainID", mock.Anything).Return(nodeChainID, nil)`
$DIR/common/client/node_lifecycle_test.go: `rpc.On("IsSyncing", mock.Anything).Return(true, nil)`
$DIR/common/client/node_lifecycle_test.go: `rpc.On("DisconnectAll")`
$DIR/common/client/node_lifecycle_test.go: `tests.AssertEventually(t, func() bool {
return node.State() == nodeStateSyncing
})`
$DIR/common/client/node_lifecycle_test.go: `t.Run("on successful verification becomes alive", func(t *testing.T) {
t.Parallel()
rpc := newMockNodeClient[types.ID, Head](t)
nodeChainID := types.RandomID()
node := newNode(t, testNodeOpts{
rpc: rpc,
chainID: nodeChainID,
config: testNodeConfig{nodeIsSyncingEnabled: true},
})
defer func() { assert.NoError(t, node.close()) }()
rpc.On("Dial", mock.Anything).Return(nil)
rpc.On("ChainID", mock.Anything).Return(nodeChainID, nil)
rpc.On("IsSyncing", mock.Anything).Return(false, nil)
setupRPCForAliveLoop(t, rpc)
err := node.Start(tests.Context(t))
assert.NoError(t, err)
tests.AssertEventually(t, func() bool {
return node.State() == nodeStateAlive
})
})`
$DIR/common/client/node_lifecycle_test.go: `rpc.On("Dial", mock.Anything).Return(nil)`
$DIR/common/client/node_lifecycle_test.go: `rpc.On("ChainID", mock.Anything).Return(nodeChainID, nil)`
$DIR/common/client/node_lifecycle_test.go: `rpc.On("IsSyncing", mock.Anything).Return(false, nil)`
$DIR/common/client/node_lifecycle_test.go: `setupRPCForAliveLoop(t, rpc)`
$DIR/common/client/node_lifecycle_test.go: `tests.AssertEventually(t, func() bool {
return node.State() == nodeStateAlive
})`
$DIR/common/client/node_lifecycle_test.go: `rpc.On("Dial", mock.Anything).Return(nil)`
$DIR/common/client/node_lifecycle_test.go: `rpc.On("ChainID", mock.Anything).Return(nodeChainID, nil)`
$DIR/common/client/node_lifecycle_test.go: `setupRPCForAliveLoop(t, rpc)`
$DIR/common/client/node_lifecycle_test.go: `tests.AssertEventually(t, func() bool {
return node.State() == nodeStateAlive
})`
$DIR/common/client/node_lifecycle_test.go: `t.Run("skip if nLiveNodes is not configured", func(t *testing.T) {
node := newTestNode(t, testNodeOpts{})
outOfSync, liveNodes := node.syncStatus(0, nil)
assert.Equal(t, false, outOfSync)
assert.Equal(t, 0, liveNodes)
})`
$DIR/common/client/node_lifecycle_test.go: `t.Run("skip if syncThreshold is not configured", func(t *testing.T) {
node := newTestNode(t, testNodeOpts{})
node.nLiveNodes = func() (count int, blockNumber int64, totalDifficulty *big.Int) {
return
}
outOfSync, liveNodes := node.syncStatus(0, nil)
assert.Equal(t, false, outOfSync)
assert.Equal(t, 0, liveNodes)
})`
$DIR/common/client/node_lifecycle_test.go: `t.Run("panics on invalid selection mode", func(t *testing.T) {
node := newTestNode(t, testNodeOpts{
config: testNodeConfig{syncThreshold: 1},
})
node.nLiveNodes = func() (count int, blockNumber int64, totalDifficulty *big.Int) {
return
}
assert.Panics(t, func() {
_, _ = node.syncStatus(0, nil)
})
})`
$DIR/common/client/node_lifecycle_test.go: `t.Run("block height selection mode", func(t *testing.T) {
const syncThreshold = 10
const highestBlock = 1000
const nodesNum = 20
const totalDifficulty = 3000
testCases := []struct {
name string
blockNumber int64
outOfSync bool
}{
{
name: "below threshold",
blockNumber: highestBlock - syncThreshold - 1,
outOfSync: true,
},
{
name: "equal to threshold",
blockNumber: highestBlock - syncThreshold,
outOfSync: false,
},
{
name: "equal to highest block",
blockNumber: highestBlock,
outOfSync: false,
},
{
name: "higher than highest block",
blockNumber: highestBlock,
outOfSync: false,
},
}
for _, selectionMode := range []string{NodeSelectionModeHighestHead, NodeSelectionModeRoundRobin, NodeSelectionModePriorityLevel} {
node := newTestNode(t, testNodeOpts{
config: testNodeConfig{
syncThreshold: syncThreshold,
selectionMode: selectionMode,
},
})
node.nLiveNodes = func() (int, int64, *big.Int) {
return nodesNum, highestBlock, big.NewInt(totalDifficulty)
}
for _, td := range []int64{totalDifficulty - syncThreshold - 1, totalDifficulty - syncThreshold, totalDifficulty, totalDifficulty + 1} {
for _, testCase := range testCases {
t.Run(fmt.Sprintf("%s: SelectionModeVal: %s: total difficulty: %d", testCase.name, selectionMode, td), func(t *testing.T) {
outOfSync, liveNodes := node.syncStatus(testCase.blockNumber, big.NewInt(td))
assert.Equal(t, nodesNum, liveNodes)
assert.Equal(t, testCase.outOfSync, outOfSync)
})
}
}
}
})`
$DIR/common/client/node_lifecycle_test.go: `t.Run(fmt.Sprintf("%s: SelectionModeVal: %s: total difficulty: %d", testCase.name, selectionMode, td), func(t *testing.T) {
outOfSync, liveNodes := node.syncStatus(testCase.blockNumber, big.NewInt(td))
assert.Equal(t, nodesNum, liveNodes)
assert.Equal(t, testCase.outOfSync, outOfSync)
})`
$DIR/common/client/node_lifecycle_test.go: `t.Run(fmt.Sprintf("%s: SelectionModeVal: %s: highest block: %d", testCase.name, NodeSelectionModeTotalDifficulty, hb), func(t *testing.T) {
outOfSync, liveNodes := node.syncStatus(hb, big.NewInt(testCase.totalDifficulty))
assert.Equal(t, nodesNum, liveNodes)
assert.Equal(t, testCase.outOfSync, outOfSync)
})`
$DIR/common/client/node_lifecycle_test.go: `opts.config.nodeIsSyncingEnabled = true`
$DIR/common/client/node_lifecycle_test.go: `opts.rpc.On("Close").Return(nil).Once()`
$DIR/common/client/node_lifecycle_test.go: `opts.rpc.On("DisconnectAll")`
$DIR/common/client/node_lifecycle_test.go: `node.setState(nodeStateDialed)`
$DIR/common/client/node_lifecycle_test.go: `t.Run("returns on closed", func(t *testing.T) {
t.Parallel()
node := newTestNode(t, testNodeOpts{})
node.setState(nodeStateClosed)
node.wg.Add(1)
node.syncingLoop()
})`
$DIR/common/client/node_lifecycle_test.go: `node.setState(nodeStateClosed)`
$DIR/common/client/node_lifecycle_test.go: `node.wg.Add(1)`
$DIR/common/client/node_lifecycle_test.go: `node.syncingLoop()`
$DIR/common/client/node_lifecycle_test.go: `t.Run("on invalid dial becomes unreachable", func(t *testing.T) {
t.Parallel()
rpc := newMockNodeClient[types.ID, Head](t)
nodeChainID := types.RandomID()
node := newDialedNode(t, testNodeOpts{
rpc: rpc,
chainID: nodeChainID,
})
defer func() { assert.NoError(t, node.close()) }()
rpc.On("Dial", mock.Anything).Return(errors.New("failed to dial"))
node.declareSyncing()
tests.AssertEventually(t, func() bool {
return node.State() == nodeStateUnreachable
})
})`
$DIR/common/client/node_lifecycle_test.go: `rpc.On("Dial", mock.Anything).Return(errors.New("failed to dial"))`
$DIR/common/client/node_lifecycle_test.go: `node.declareSyncing()`
$DIR/common/client/node_lifecycle_test.go: `tests.AssertEventually(t, func() bool {
return node.State() == nodeStateUnreachable
})`
$DIR/common/client/node_lifecycle_test.go: `t.Run("on failed chainID call becomes unreachable", func(t *testing.T) {
t.Parallel()
rpc := newMockNodeClient[types.ID, Head](t)
nodeChainID := types.RandomID()
lggr, observedLogs := logger.TestObserved(t, zap.DebugLevel)
node := newDialedNode(t, testNodeOpts{
rpc: rpc,
chainID: nodeChainID,
lggr: lggr,
})
defer func() { assert.NoError(t, node.close()) }()
rpc.On("ChainID", mock.Anything).Return(nodeChainID, errors.New("failed to get chain id"))
// once for syncing and maybe another one for unreachable
rpc.On("Dial", mock.Anything).Return(nil).Once()
rpc.On("Dial", mock.Anything).Return(errors.New("failed to dial")).Maybe()
node.declareSyncing()
tests.AssertLogEventually(t, observedLogs, "Failed to verify chain ID for node")
tests.AssertEventually(t, func() bool {
return node.State() == nodeStateUnreachable
})
})`
$DIR/common/client/node_lifecycle_test.go: `rpc.On("ChainID", mock.Anything).Return(nodeChainID, errors.New("failed to get chain id"))`
$DIR/common/client/node_lifecycle_test.go: `rpc.On("Dial", mock.Anything).Return(nil).Once()`
$DIR/common/client/node_lifecycle_test.go: `rpc.On("Dial", mock.Anything).Return(errors.New("failed to dial")).Maybe()`
$DIR/common/client/node_lifecycle_test.go: `node.declareSyncing()`
$DIR/common/client/node_lifecycle_test.go: `tests.AssertLogEventually(t, observedLogs, "Failed to verify chain ID for node")`
$DIR/common/client/node_lifecycle_test.go: `tests.AssertEventually(t, func() bool {
return node.State() == nodeStateUnreachable
})`
$DIR/common/client/node_lifecycle_test.go: `t.Run("on chainID mismatch transitions to invalidChainID", func(t *testing.T) {
t.Parallel()
rpc := newMockNodeClient[types.ID, Head](t)
nodeChainID := types.NewIDFromInt(10)
rpcChainID := types.NewIDFromInt(11)
lggr, observedLogs := logger.TestObserved(t, zap.DebugLevel)
node := newDialedNode(t, testNodeOpts{
rpc: rpc,
chainID: nodeChainID,
lggr: lggr,
})
defer func() { assert.NoError(t, node.close()) }()
rpc.On("Dial", mock.Anything).Return(nil).Twice()
rpc.On("ChainID", mock.Anything).Return(rpcChainID, nil)
node.declareSyncing()
tests.AssertLogCountEventually(t, observedLogs, "Failed to verify RPC node; remote endpoint returned the wrong chain ID", 2)
tests.AssertEventually(t, func() bool {
return node.State() == nodeStateInvalidChainID
})
})`
$DIR/common/client/node_lifecycle_test.go: `rpc.On("Dial", mock.Anything).Return(nil).Twice()`
$DIR/common/client/node_lifecycle_test.go: `rpc.On("ChainID", mock.Anything).Return(rpcChainID, nil)`
$DIR/common/client/node_lifecycle_test.go: `node.declareSyncing()`
$DIR/common/client/node_lifecycle_test.go: `tests.AssertLogCountEventually(t, observedLogs, "Failed to verify RPC node; remote endpoint returned the wrong chain ID", 2)`
$DIR/common/client/node_lifecycle_test.go: `tests.AssertEventually(t, func() bool {
return node.State() == nodeStateInvalidChainID
})`
$DIR/common/client/node_lifecycle_test.go: `t.Run("on failed Syncing check - becomes unreachable", func(t *testing.T) {
t.Parallel()
rpc := newMockNodeClient[types.ID, Head](t)
nodeChainID := types.RandomID()
lggr, observedLogs := logger.TestObserved(t, zap.DebugLevel)
node := newDialedNode(t, testNodeOpts{
rpc: rpc,
chainID: nodeChainID,
lggr: lggr,
})
defer func() { assert.NoError(t, node.close()) }()
rpc.On("ChainID", mock.Anything).Return(nodeChainID, nil).Once()
// first one is needed to enter internal loop
rpc.On("IsSyncing", mock.Anything).Return(true, nil).Once()
rpc.On("IsSyncing", mock.Anything).Return(false, errors.New("failed to check if syncing")).Once()
rpc.On("Dial", mock.Anything).Return(nil).Once()
rpc.On("Dial", mock.Anything).Return(errors.New("failed to dial")).Maybe()
node.declareSyncing()
tests.AssertLogEventually(t, observedLogs, "Unexpected error while verifying RPC node synchronization status")
tests.AssertEventually(t, func() bool {
return node.State() == nodeStateUnreachable
})
})`
$DIR/common/client/node_lifecycle_test.go: `rpc.On("ChainID", mock.Anything).Return(nodeChainID, nil).Once()`
$DIR/common/client/node_lifecycle_test.go: `rpc.On("IsSyncing", mock.Anything).Return(true, nil).Once()`
$DIR/common/client/node_lifecycle_test.go: `rpc.On("IsSyncing", mock.Anything).Return(false, errors.New("failed to check if syncing")).Once()`
$DIR/common/client/node_lifecycle_test.go: `rpc.On("Dial", mock.Anything).Return(nil).Once()`
$DIR/common/client/node_lifecycle_test.go: `rpc.On("Dial", mock.Anything).Return(errors.New("failed to dial")).Maybe()`
$DIR/common/client/node_lifecycle_test.go: `node.declareSyncing()`
$DIR/common/client/node_lifecycle_test.go: `tests.AssertLogEventually(t, observedLogs, "Unexpected error while verifying RPC node synchronization status")`
$DIR/common/client/node_lifecycle_test.go: `tests.AssertEventually(t, func() bool {
return node.State() == nodeStateUnreachable
})`
$DIR/common/client/node_lifecycle_test.go: `t.Run("on IsSyncing - keeps trying", func(t *testing.T) {
t.Parallel()
rpc := newMockNodeClient[types.ID, Head](t)
nodeChainID := types.RandomID()
lggr, observedLogs := logger.TestObserved(t, zap.DebugLevel)
node := newDialedNode(t, testNodeOpts{
rpc: rpc,
chainID: nodeChainID,
lggr: lggr,
})
defer func() { assert.NoError(t, node.close()) }()
rpc.On("ChainID", mock.Anything).Return(nodeChainID, nil).Once()
rpc.On("IsSyncing", mock.Anything).Return(true, nil)
rpc.On("Dial", mock.Anything).Return(nil).Once()
node.declareSyncing()
tests.AssertLogCountEventually(t, observedLogs, "Verification failed: Node is syncing", 2)
tests.AssertEventually(t, func() bool {
return node.State() == nodeStateSyncing
})
})`
$DIR/common/client/node_lifecycle_test.go: `rpc.On("ChainID", mock.Anything).Return(nodeChainID, nil).Once()`
$DIR/common/client/node_lifecycle_test.go: `rpc.On("IsSyncing", mock.Anything).Return(true, nil)`
$DIR/common/client/node_lifecycle_test.go: `rpc.On("Dial", mock.Anything).Return(nil).Once()`
$DIR/common/client/node_lifecycle_test.go: `node.declareSyncing()`
$DIR/common/client/node_lifecycle_test.go: `tests.AssertLogCountEventually(t, observedLogs, "Verification failed: Node is syncing", 2)`
$DIR/common/client/node_lifecycle_test.go: `tests.AssertEventually(t, func() bool {
return node.State() == nodeStateSyncing
})`
$DIR/common/client/node_lifecycle_test.go: `rpc.On("Dial", mock.Anything).Return(nil).Once()`
$DIR/common/client/node_lifecycle_test.go: `rpc.On("ChainID", mock.Anything).Return(nodeChainID, nil).Once()`
$DIR/common/client/node_lifecycle_test.go: `rpc.On("IsSyncing", mock.Anything).Return(true, nil).Once()`
$DIR/common/client/node_lifecycle_test.go: `rpc.On("IsSyncing", mock.Anything).Return(false, nil).Once()`
$DIR/common/client/node_lifecycle_test.go: `setupRPCForAliveLoop(t, rpc)`
$DIR/common/client/node_lifecycle_test.go: `node.declareSyncing()`
$DIR/common/client/node_lifecycle_test.go: `tests.AssertEventually(t, func() bool {
return node.State() == nodeStateAlive
})`
$DIR/common/client/node_lifecycle_test.go: `.rpc.On("Close")`
$DIR/common/client/node_lifecycle_test.go: `.Return(nil)`
$DIR/common/client/node_lifecycle_test.go: `.Once()`
$DIR/common/client/node_lifecycle_test.go: `.setState(nodeStateDialed)`
$DIR/common/client/node_lifecycle_test.go: `.Run("returns on closed", func(t *testing.T) {
node := newTestNode(t, testNodeOpts{})
node.setState(nodeStateClosed)
node.wg.Add(1)
node.aliveLoop()
})`
$DIR/common/client/node_lifecycle_test.go: `.setState(nodeStateClosed)`
$DIR/common/client/node_lifecycle_test.go: `.wg.Add(1)`
$DIR/common/client/node_lifecycle_test.go: `.aliveLoop()`
$DIR/common/client/node_lifecycle_test.go: `.Run("if initial subscribe fails, transitions to unreachable", func(t *testing.T) {
t.Parallel()
rpc := newMockNodeClient[types.ID, Head](t)
node := newDialedNode(t, testNodeOpts{
rpc: rpc,
})
defer func() { assert.NoError(t, node.close()) }()
expectedError := errors.New("failed to subscribe to rpc")
rpc.On("Subscribe", mock.Anything, mock.Anything, rpcSubscriptionMethodNewHeads).Return(nil, expectedError).Once()
rpc.On("DisconnectAll").Once()
// might be called in unreachable loop
rpc.On("Dial", mock.Anything).Return(errors.New("failed to dial")).Maybe()
node.declareAlive()
tests.AssertEventually(t, func() bool {
return node.State() == nodeStateUnreachable
})
})`
$DIR/common/client/node_lifecycle_test.go: `.New("failed to subscribe to rpc")`
$DIR/common/client/node_lifecycle_test.go: `.On("Subscribe", mock.Anything, mock.Anything, rpcSubscriptionMethodNewHeads)`
$DIR/common/client/node_lifecycle_test.go: `.Return(nil, expectedError)`
$DIR/common/client/node_lifecycle_test.go: `.Once()`
$DIR/common/client/node_lifecycle_test.go: `.On("DisconnectAll")`
$DIR/common/client/node_lifecycle_test.go: `.Once()`
$DIR/common/client/node_lifecycle_test.go: `.On("Dial", mock.Anything)`
$DIR/common/client/node_lifecycle_test.go: `.Return(errors.New("failed to dial"))`
$DIR/common/client/node_lifecycle_test.go: `.New("failed to dial")`
$DIR/common/client/node_lifecycle_test.go: `.Maybe()`
$DIR/common/client/node_lifecycle_test.go: `.declareAlive()`
$DIR/common/client/node_lifecycle_test.go: `.AssertEventually(t, func() bool {
return node.State() == nodeStateUnreachable
})`
$DIR/common/client/node_lifecycle_test.go: `.State()`
$DIR/common/client/node_lifecycle_test.go: `.Run("if remote RPC connection is closed transitions to unreachable", func(t *testing.T) {
t.Parallel()
rpc := newMockNodeClient[types.ID, Head](t)
lggr, observedLogs := logger.TestObserved(t, zap.WarnLevel)
node := newDialedNode(t, testNodeOpts{
rpc: rpc,
lggr: lggr,
})
defer func() { assert.NoError(t, node.close()) }()
sub := mocks.NewSubscription(t)
errChan := make(chan error)
close(errChan)
sub.On("Err").Return((<-chan error)(errChan)).Once()
sub.On("Unsubscribe").Once()
rpc.On("Subscribe", mock.Anything, mock.Anything, rpcSubscriptionMethodNewHeads).Return(sub, nil).Once()
rpc.On("SetAliveLoopSub", sub).Once()
// disconnects all on transfer to unreachable
rpc.On("DisconnectAll").Once()
// might be called in unreachable loop
rpc.On("Dial", mock.Anything).Return(errors.New("failed to dial")).Maybe()
node.declareAlive()
tests.AssertLogEventually(t, observedLogs, "Subscription was terminated")
assert.Equal(t, nodeStateUnreachable, node.State())
})`
$DIR/common/client/node_lifecycle_test.go: `.TestObserved(t, zap.WarnLevel)`
$DIR/common/client/node_lifecycle_test.go: `.NewSubscription(t)`
$DIR/common/client/node_lifecycle_test.go: `.On("Err")`
$DIR/common/client/node_lifecycle_test.go: `.Return((<-chan error)(errChan))`
$DIR/common/client/node_lifecycle_test.go: `.Once()`
$DIR/common/client/node_lifecycle_test.go: `.On("Unsubscribe")`
$DIR/common/client/node_lifecycle_test.go: `.Once()`
$DIR/common/client/node_lifecycle_test.go: `.On("Subscribe", mock.Anything, mock.Anything, rpcSubscriptionMethodNewHeads)`
$DIR/common/client/node_lifecycle_test.go: `.Return(sub, nil)`
$DIR/common/client/node_lifecycle_test.go: `.Once()`
$DIR/common/client/node_lifecycle_test.go: `.On("SetAliveLoopSub", sub)`
$DIR/common/client/node_lifecycle_test.go: `.Once()`
$DIR/common/client/node_lifecycle_test.go: `.On("DisconnectAll")`
$DIR/common/client/node_lifecycle_test.go: `.Once()`
$DIR/common/client/node_lifecycle_test.go: `.On("Dial", mock.Anything)`
$DIR/common/client/node_lifecycle_test.go: `.Return(errors.New("failed to dial"))`
$DIR/common/client/node_lifecycle_test.go: `.New("failed to dial")`
$DIR/common/client/node_lifecycle_test.go: `.Maybe()`
$DIR/common/client/node_lifecycle_test.go: `.declareAlive()`
$DIR/common/client/node_lifecycle_test.go: `.AssertLogEventually(t, observedLogs, "Subscription was terminated")`
$DIR/common/client/node_lifecycle_test.go: `.NewSubscription(t)`
$DIR/common/client/node_lifecycle_test.go: `.On("Err")`
$DIR/common/client/node_lifecycle_test.go: `.Return((<-chan error)(nil))`
$DIR/common/client/node_lifecycle_test.go: `.On("Unsubscribe")`
$DIR/common/client/node_lifecycle_test.go: `.Once()`
$DIR/common/client/node_lifecycle_test.go: `.rpc.On("Subscribe", mock.Anything, mock.Anything, rpcSubscriptionMethodNewHeads)`
$DIR/common/client/node_lifecycle_test.go: `.Return(sub, nil)`
$DIR/common/client/node_lifecycle_test.go: `.Once()`
$DIR/common/client/node_lifecycle_test.go: `.rpc.On("SetAliveLoopSub", sub)`
$DIR/common/client/node_lifecycle_test.go: `.Once()`
$DIR/common/client/node_lifecycle_test.go: `.Run("Stays alive and waits for signal", func(t *testing.T) {
t.Parallel()
rpc := newMockNodeClient[types.ID, Head](t)
lggr, observedLogs := logger.TestObserved(t, zap.DebugLevel)
node := newSubscribedNode(t, testNodeOpts{
config: testNodeConfig{},
rpc: rpc,
lggr: lggr,
})
defer func() { assert.NoError(t, node.close()) }()
node.declareAlive()
tests.AssertLogEventually(t, observedLogs, "Head liveness checking disabled")
tests.AssertLogEventually(t, observedLogs, "Polling disabled")
assert.Equal(t, nodeStateAlive, node.State())
})`
$DIR/common/client/node_lifecycle_test.go: `.TestObserved(t, zap.DebugLevel)`
$DIR/common/client/node_lifecycle_test.go: `.declareAlive()`
$DIR/common/client/node_lifecycle_test.go: `.AssertLogEventually(t, observedLogs, "Head liveness checking disabled")`
$DIR/common/client/node_lifecycle_test.go: `.AssertLogEventually(t, observedLogs, "Polling disabled")`
$DIR/common/client/node_lifecycle_test.go: `.Run("stays alive while below pollFailureThreshold and resets counter on success", func(t *testing.T) {
t.Parallel()
rpc := newMockNodeClient[types.ID, Head](t)
lggr, observedLogs := logger.TestObserved(t, zap.DebugLevel)
const pollFailureThreshold = 3
node := newSubscribedNode(t, testNodeOpts{
config: testNodeConfig{
pollFailureThreshold: pollFailureThreshold,
pollInterval: tests.TestInterval,
},
rpc: rpc,
lggr: lggr,
})
defer func() { assert.NoError(t, node.close()) }()
pollError := errors.New("failed to get ClientVersion")
// 1. Return error several times, but below threshold
rpc.On("ClientVersion", mock.Anything).Return("", pollError).Run(func(_ mock.Arguments) {
// stays healthy while below threshold
assert.Equal(t, nodeStateAlive, node.State())
}).Times(pollFailureThreshold - 1)
// 2. Successful call that is expected to reset counter
rpc.On("ClientVersion", mock.Anything).Return("client_version", nil).Once()
// 3. Return error. If we have not reset the timer, we'll transition to nonAliveState
rpc.On("ClientVersion", mock.Anything).Return("", pollError).Once()
// 4. Once during the call, check if node is alive
var ensuredAlive atomic.Bool
rpc.On("ClientVersion", mock.Anything).Return("client_version", nil).Run(func(_ mock.Arguments) {
if ensuredAlive.Load() {
return
}
ensuredAlive.Store(true)
assert.Equal(t, nodeStateAlive, node.State())
}).Once()
// redundant call to stay in alive state
rpc.On("ClientVersion", mock.Anything).Return("client_version", nil)
node.declareAlive()
tests.AssertLogCountEventually(t, observedLogs, fmt.Sprintf("Poll failure, RPC endpoint %s failed to respond properly", node.String()), pollFailureThreshold)
tests.AssertLogCountEventually(t, observedLogs, "Version poll successful", 2)
assert.True(t, ensuredAlive.Load(), "expected to ensure that node was alive")
})`
$DIR/common/client/node_lifecycle_test.go: `.TestObserved(t, zap.DebugLevel)`
$DIR/common/client/node_lifecycle_test.go: `.New("failed to get ClientVersion")`
$DIR/common/client/node_lifecycle_test.go: `.On("ClientVersion", mock.Anything)`
$DIR/common/client/node_lifecycle_test.go: `.Return("", pollError)`
$DIR/common/client/node_lifecycle_test.go: `.Run(func(_ mock.Arguments) {
// stays healthy while below threshold
assert.Equal(t, nodeStateAlive, node.State())
})`
$DIR/common/client/node_lifecycle_test.go: `.Times(pollFailureThreshold - 1)`
$DIR/common/client/node_lifecycle_test.go: `.On("ClientVersion", mock.Anything)`
$DIR/common/client/node_lifecycle_test.go: `.Return("client_version", nil)`
$DIR/common/client/node_lifecycle_test.go: `.Once()`
$DIR/common/client/node_lifecycle_test.go: `.On("ClientVersion", mock.Anything)`
$DIR/common/client/node_lifecycle_test.go: `.Return("", pollError)`
$DIR/common/client/node_lifecycle_test.go: `.Once()`
$DIR/common/client/node_lifecycle_test.go: `.On("ClientVersion", mock.Anything)`
$DIR/common/client/node_lifecycle_test.go: `.Return("client_version", nil)`
$DIR/common/client/node_lifecycle_test.go: `.Run(func(_ mock.Arguments) {
if ensuredAlive.Load() {
return
}
ensuredAlive.Store(true)
assert.Equal(t, nodeStateAlive, node.State())
})`
$DIR/common/client/node_lifecycle_test.go: `.Load()`
$DIR/common/client/node_lifecycle_test.go: `.Store(true)`
$DIR/common/client/node_lifecycle_test.go: `.Once()`
$DIR/common/client/node_lifecycle_test.go: `.On("ClientVersion", mock.Anything)`
$DIR/common/client/node_lifecycle_test.go: `.Return("client_version", nil)`
$DIR/common/client/node_lifecycle_test.go: `.declareAlive()`
$DIR/common/client/node_lifecycle_test.go: `.AssertLogCountEventually(t, observedLogs, fmt.Sprintf("Poll failure, RPC endpoint %s failed to respond properly", node.String()), pollFailureThreshold)`
$DIR/common/client/node_lifecycle_test.go: `.Sprintf("Poll failure, RPC endpoint %s failed to respond properly", node.String())`
$DIR/common/client/node_lifecycle_test.go: `.String()`
$DIR/common/client/node_lifecycle_test.go: `.AssertLogCountEventually(t, observedLogs, "Version poll successful", 2)`
$DIR/common/client/node_lifecycle_test.go: `.Run("with threshold poll failures, transitions to unreachable", func(t *testing.T) {
t.Parallel()
rpc := newMockNodeClient[types.ID, Head](t)
lggr, observedLogs := logger.TestObserved(t, zap.DebugLevel)
const pollFailureThreshold = 3
node := newSubscribedNode(t, testNodeOpts{
config: testNodeConfig{
pollFailureThreshold: pollFailureThreshold,
pollInterval: tests.TestInterval,
},
rpc: rpc,
lggr: lggr,
})
defer func() { assert.NoError(t, node.close()) }()
pollError := errors.New("failed to get ClientVersion")
rpc.On("ClientVersion", mock.Anything).Return("", pollError)
// disconnects all on transfer to unreachable
rpc.On("DisconnectAll").Once()
// might be called in unreachable loop
rpc.On("Dial", mock.Anything).Return(errors.New("failed to dial")).Maybe()
node.declareAlive()
tests.AssertLogCountEventually(t, observedLogs, fmt.Sprintf("Poll failure, RPC endpoint %s failed to respond properly", node.String()), pollFailureThreshold)
tests.AssertEventually(t, func() bool {
return nodeStateUnreachable == node.State()
})
})`
$DIR/common/client/node_lifecycle_test.go: `.TestObserved(t, zap.DebugLevel)`
$DIR/common/client/node_lifecycle_test.go: `.New("failed to get ClientVersion")`
$DIR/common/client/node_lifecycle_test.go: `.On("ClientVersion", mock.Anything)`
$DIR/common/client/node_lifecycle_test.go: `.Return("", pollError)`
$DIR/common/client/node_lifecycle_test.go: `.On("DisconnectAll")`
$DIR/common/client/node_lifecycle_test.go: `.Once()`
$DIR/common/client/node_lifecycle_test.go: `.On("Dial", mock.Anything)`
$DIR/common/client/node_lifecycle_test.go: `.Return(errors.New("failed to dial"))`
$DIR/common/client/node_lifecycle_test.go: `.New("failed to dial")`
$DIR/common/client/node_lifecycle_test.go: `.Maybe()`
$DIR/common/client/node_lifecycle_test.go: `.declareAlive()`
$DIR/common/client/node_lifecycle_test.go: `.AssertLogCountEventually(t, observedLogs, fmt.Sprintf("Poll failure, RPC endpoint %s failed to respond properly", node.String()), pollFailureThreshold)`
$DIR/common/client/node_lifecycle_test.go: `.Sprintf("Poll failure, RPC endpoint %s failed to respond properly", node.String())`
$DIR/common/client/node_lifecycle_test.go: `.String()`
$DIR/common/client/node_lifecycle_test.go: `.AssertEventually(t, func() bool {
return nodeStateUnreachable == node.State()
})`
$DIR/common/client/node_lifecycle_test.go: `.State()`
$DIR/common/client/node_lifecycle_test.go: `.Run("with threshold poll failures, but we are the last node alive, forcibly keeps it alive", func(t *testing.T) {
t.Parallel()
rpc := newMockNodeClient[types.ID, Head](t)
lggr, observedLogs := logger.TestObserved(t, zap.DebugLevel)
const pollFailureThreshold = 3
node := newSubscribedNode(t, testNodeOpts{
config: testNodeConfig{
pollFailureThreshold: pollFailureThreshold,
pollInterval: tests.TestInterval,
},
rpc: rpc,
lggr: lggr,
})
defer func() { assert.NoError(t, node.close()) }()
node.nLiveNodes = func() (count int, blockNumber int64, totalDifficulty *big.Int) {
return 1, 20, big.NewInt(10)
}
pollError := errors.New("failed to get ClientVersion")
rpc.On("ClientVersion", mock.Anything).Return("", pollError)
node.declareAlive()
tests.AssertLogEventually(t, observedLogs, fmt.Sprintf("RPC endpoint failed to respond to %d consecutive polls", pollFailureThreshold))
assert.Equal(t, nodeStateAlive, node.State())
})`
$DIR/common/client/node_lifecycle_test.go: `.TestObserved(t, zap.DebugLevel)`
$DIR/common/client/node_lifecycle_test.go: `.NewInt(10)`
$DIR/common/client/node_lifecycle_test.go: `.New("failed to get ClientVersion")`
$DIR/common/client/node_lifecycle_test.go: `.On("ClientVersion", mock.Anything)`
$DIR/common/client/node_lifecycle_test.go: `.Return("", pollError)`
$DIR/common/client/node_lifecycle_test.go: `.declareAlive()`
$DIR/common/client/node_lifecycle_test.go: `.AssertLogEventually(t, observedLogs, fmt.Sprintf("RPC endpoint failed to respond to %d consecutive polls", pollFailureThreshold))`
$DIR/common/client/node_lifecycle_test.go: `.Sprintf("RPC endpoint failed to respond to %d consecutive polls", pollFailureThreshold)`
$DIR/common/client/node_lifecycle_test.go: `.Run("when behind more than SyncThreshold, transitions to out of sync", func(t *testing.T) {
t.Parallel()
rpc := newMockNodeClient[types.ID, Head](t)
lggr, observedLogs := logger.TestObserved(t, zap.DebugLevel)
const syncThreshold = 10
node := newSubscribedNode(t, testNodeOpts{
config: testNodeConfig{
pollInterval: tests.TestInterval,
syncThreshold: syncThreshold,
selectionMode: NodeSelectionModeRoundRobin,
},
rpc: rpc,
lggr: lggr,
})
defer func() { assert.NoError(t, node.close()) }()
node.stateLatestBlockNumber = 20
node.nLiveNodes = func() (count int, blockNumber int64, totalDifficulty *big.Int) {
return 10, syncThreshold + node.stateLatestBlockNumber + 1, big.NewInt(10)
}
rpc.On("ClientVersion", mock.Anything).Return("", nil)
// tries to redial in outOfSync
rpc.On("Dial", mock.Anything).Return(errors.New("failed to dial")).Run(func(_ mock.Arguments) {
assert.Equal(t, nodeStateOutOfSync, node.State())
}).Once()
// disconnects all on transfer to unreachable or outOfSync
rpc.On("DisconnectAll").Maybe()
// might be called in unreachable loop
rpc.On("Dial", mock.Anything).Run(func(_ mock.Arguments) {
require.Equal(t, nodeStateOutOfSync, node.State())
}).Return(errors.New("failed to dial")).Maybe()
node.declareAlive()
tests.AssertLogEventually(t, observedLogs, "Dial failed: Node is unreachable")
})`
$DIR/common/client/node_lifecycle_test.go: `.TestObserved(t, zap.DebugLevel)`
$DIR/common/client/node_lifecycle_test.go: `.NewInt(10)`
$DIR/common/client/node_lifecycle_test.go: `.On("ClientVersion", mock.Anything)`
$DIR/common/client/node_lifecycle_test.go: `.Return("", nil)`
$DIR/common/client/node_lifecycle_test.go: `.On("Dial", mock.Anything)`
$DIR/common/client/node_lifecycle_test.go: `.Return(errors.New("failed to dial"))`
$DIR/common/client/node_lifecycle_test.go: `.New("failed to dial")`
$DIR/common/client/node_lifecycle_test.go: `.Run(func(_ mock.Arguments) {
assert.Equal(t, nodeStateOutOfSync, node.State())
})`
$DIR/common/client/node_lifecycle_test.go: `.Once()`
$DIR/common/client/node_lifecycle_test.go: `.On("DisconnectAll")`
$DIR/common/client/node_lifecycle_test.go: `.Maybe()`
$DIR/common/client/node_lifecycle_test.go: `.On("Dial", mock.Anything)`
$DIR/common/client/node_lifecycle_test.go: `.Run(func(_ mock.Arguments) {
require.Equal(t, nodeStateOutOfSync, node.State())
})`
$DIR/common/client/node_lifecycle_test.go: `.Return(errors.New("failed to dial"))`
$DIR/common/client/node_lifecycle_test.go: `.New("failed to dial")`
$DIR/common/client/node_lifecycle_test.go: `.Maybe()`
$DIR/common/client/node_lifecycle_test.go: `.declareAlive()`
$DIR/common/client/node_lifecycle_test.go: `.AssertLogEventually(t, observedLogs, "Dial failed: Node is unreachable")`
$DIR/common/client/node_lifecycle_test.go: `.Run("when behind more than SyncThreshold but we are the last live node, forcibly stays alive", func(t *testing.T) {
t.Parallel()
rpc := newMockNodeClient[types.ID, Head](t)
lggr, observedLogs := logger.TestObserved(t, zap.DebugLevel)
const syncThreshold = 10
node := newSubscribedNode(t, testNodeOpts{
config: testNodeConfig{
pollInterval: tests.TestInterval,
syncThreshold: syncThreshold,
selectionMode: NodeSelectionModeRoundRobin,
},
rpc: rpc,
lggr: lggr,
})
defer func() { assert.NoError(t, node.close()) }()
node.stateLatestBlockNumber = 20
node.nLiveNodes = func() (count int, blockNumber int64, totalDifficulty *big.Int) {
return 1, syncThreshold + node.stateLatestBlockNumber + 1, big.NewInt(10)
}
rpc.On("ClientVersion", mock.Anything).Return("", nil)
node.declareAlive()
tests.AssertLogEventually(t, observedLogs, fmt.Sprintf("RPC endpoint has fallen behind; %s %s", msgCannotDisable, msgDegradedState))
})`
$DIR/common/client/node_lifecycle_test.go: `.TestObserved(t, zap.DebugLevel)`
$DIR/common/client/node_lifecycle_test.go: `.NewInt(10)`
$DIR/common/client/node_lifecycle_test.go: `.On("ClientVersion", mock.Anything)`
$DIR/common/client/node_lifecycle_test.go: `.Return("", nil)`
$DIR/common/client/node_lifecycle_test.go: `.declareAlive()`
$DIR/common/client/node_lifecycle_test.go: `.AssertLogEventually(t, observedLogs, fmt.Sprintf("RPC endpoint has fallen behind; %s %s", msgCannotDisable, msgDegradedState))`
$DIR/common/client/node_lifecycle_test.go: `.Sprintf("RPC endpoint has fallen behind; %s %s", msgCannotDisable, msgDegradedState)`
$DIR/common/client/node_lifecycle_test.go: `.Run("when behind but SyncThreshold=0, stay alive", func(t *testing.T) {
t.Parallel()
rpc := newMockNodeClient[types.ID, Head](t)
lggr, observedLogs := logger.TestObserved(t, zap.DebugLevel)
node := newSubscribedNode(t, testNodeOpts{
config: testNodeConfig{
pollInterval: tests.TestInterval,
syncThreshold: 0,
selectionMode: NodeSelectionModeRoundRobin,
},
rpc: rpc,
lggr: lggr,
})
defer func() { assert.NoError(t, node.close()) }()
node.stateLatestBlockNumber = 20
node.nLiveNodes = func() (count int, blockNumber int64, totalDifficulty *big.Int) {
return 1, node.stateLatestBlockNumber + 100, big.NewInt(10)
}
rpc.On("ClientVersion", mock.Anything).Return("", nil)
node.declareAlive()
tests.AssertLogCountEventually(t, observedLogs, "Version poll successful", 2)
assert.Equal(t, nodeStateAlive, node.State())
})`
$DIR/common/client/node_lifecycle_test.go: `.TestObserved(t, zap.DebugLevel)`
$DIR/common/client/node_lifecycle_test.go: `.NewInt(10)`
$DIR/common/client/node_lifecycle_test.go: `.On("ClientVersion", mock.Anything)`
$DIR/common/client/node_lifecycle_test.go: `.Return("", nil)`
$DIR/common/client/node_lifecycle_test.go: `.declareAlive()`
$DIR/common/client/node_lifecycle_test.go: `.AssertLogCountEventually(t, observedLogs, "Version poll successful", 2)`
$DIR/common/client/node_lifecycle_test.go: `.Run("when no new heads received for threshold, transitions to out of sync", func(t *testing.T) {
t.Parallel()
rpc := newMockNodeClient[types.ID, Head](t)
node := newSubscribedNode(t, testNodeOpts{
config: testNodeConfig{},
chainConfig: clientMocks.ChainConfig{
NoNewHeadsThresholdVal: tests.TestInterval,
},
rpc: rpc,
})
defer func() { assert.NoError(t, node.close()) }()
// tries to redial in outOfSync
rpc.On("Dial", mock.Anything).Return(errors.New("failed to dial")).Run(func(_ mock.Arguments) {
assert.Equal(t, nodeStateOutOfSync, node.State())
}).Once()
// disconnects all on transfer to unreachable or outOfSync
rpc.On("DisconnectAll").Maybe()
// might be called in unreachable loop
rpc.On("Dial", mock.Anything).Return(errors.New("failed to dial")).Maybe()
node.declareAlive()
tests.AssertEventually(t, func() bool {
// right after outOfSync we'll transfer to unreachable due to returned error on Dial
// we check that we were in out of sync state on first Dial call
return node.State() == nodeStateUnreachable
})
})`
$DIR/common/client/node_lifecycle_test.go: `.On("Dial", mock.Anything)`
$DIR/common/client/node_lifecycle_test.go: `.Return(errors.New("failed to dial"))`
$DIR/common/client/node_lifecycle_test.go: `.New("failed to dial")`
$DIR/common/client/node_lifecycle_test.go: `.Run(func(_ mock.Arguments) {
assert.Equal(t, nodeStateOutOfSync, node.State())
})`
$DIR/common/client/node_lifecycle_test.go: `.Once()`
$DIR/common/client/node_lifecycle_test.go: `.On("DisconnectAll")`
$DIR/common/client/node_lifecycle_test.go: `.Maybe()`
$DIR/common/client/node_lifecycle_test.go: `.On("Dial", mock.Anything)`
$DIR/common/client/node_lifecycle_test.go: `.Return(errors.New("failed to dial"))`
$DIR/common/client/node_lifecycle_test.go: `.New("failed to dial")`
$DIR/common/client/node_lifecycle_test.go: `.Maybe()`
$DIR/common/client/node_lifecycle_test.go: `.declareAlive()`
$DIR/common/client/node_lifecycle_test.go: `.AssertEventually(t, func() bool {
// right after outOfSync we'll transfer to unreachable due to returned error on Dial
// we check that we were in out of sync state on first Dial call
return node.State() == nodeStateUnreachable
})`
$DIR/common/client/node_lifecycle_test.go: `.State()`
$DIR/common/client/node_lifecycle_test.go: `.Run("when no new heads received for threshold but we are the last live node, forcibly stays alive", func(t *testing.T) {
t.Parallel()
rpc := newMockNodeClient[types.ID, Head](t)
lggr, observedLogs := logger.TestObserved(t, zap.DebugLevel)
node := newSubscribedNode(t, testNodeOpts{
config: testNodeConfig{},
lggr: lggr,
chainConfig: clientMocks.ChainConfig{
NoNewHeadsThresholdVal: tests.TestInterval,
},
rpc: rpc,
})
defer func() { assert.NoError(t, node.close()) }()
node.nLiveNodes = func() (count int, blockNumber int64, totalDifficulty *big.Int) {
return 1, 20, big.NewInt(10)
}
node.declareAlive()
tests.AssertLogEventually(t, observedLogs, fmt.Sprintf("RPC endpoint detected out of sync; %s %s", msgCannotDisable, msgDegradedState))
assert.Equal(t, nodeStateAlive, node.State())
})`
$DIR/common/client/node_lifecycle_test.go: `.TestObserved(t, zap.DebugLevel)`
$DIR/common/client/node_lifecycle_test.go: `.NewInt(10)`
$DIR/common/client/node_lifecycle_test.go: `.declareAlive()`
$DIR/common/client/node_lifecycle_test.go: `.AssertLogEventually(t, observedLogs, fmt.Sprintf("RPC endpoint detected out of sync; %s %s", msgCannotDisable, msgDegradedState))`
$DIR/common/client/node_lifecycle_test.go: `.Sprintf("RPC endpoint detected out of sync; %s %s", msgCannotDisable, msgDegradedState)`
$DIR/common/client/node_lifecycle_test.go: `.Run("rpc closed head channel", func(t *testing.T) {
t.Parallel()
rpc := newMockNodeClient[types.ID, Head](t)
sub := mocks.NewSubscription(t)
sub.On("Err").Return((<-chan error)(nil))
sub.On("Unsubscribe").Once()
rpc.On("Subscribe", mock.Anything, mock.Anything, rpcSubscriptionMethodNewHeads).Run(func(args mock.Arguments) {
ch := args.Get(1).(chan<- Head)
close(ch)
}).Return(sub, nil).Once()
rpc.On("SetAliveLoopSub", sub).Once()
lggr, observedLogs := logger.TestObserved(t, zap.ErrorLevel)
node := newDialedNode(t, testNodeOpts{
lggr: lggr,
config: testNodeConfig{},
chainConfig: clientMocks.ChainConfig{
NoNewHeadsThresholdVal: tests.TestInterval,
},
rpc: rpc,
})
defer func() { assert.NoError(t, node.close()) }()
// disconnects all on transfer to unreachable or outOfSync
rpc.On("DisconnectAll").Once()
// might be called in unreachable loop
rpc.On("Dial", mock.Anything).Return(errors.New("failed to dial")).Maybe()
node.declareAlive()
tests.AssertLogEventually(t, observedLogs, "Subscription channel unexpectedly closed")
assert.Equal(t, nodeStateUnreachable, node.State())
})`
$DIR/common/client/node_lifecycle_test.go: `.NewSubscription(t)`
$DIR/common/client/node_lifecycle_test.go: `.On("Err")`
$DIR/common/client/node_lifecycle_test.go: `.Return((<-chan error)(nil))`
$DIR/common/client/node_lifecycle_test.go: `.On("Unsubscribe")`
$DIR/common/client/node_lifecycle_test.go: `.Once()`
$DIR/common/client/node_lifecycle_test.go: `.On("Subscribe", mock.Anything, mock.Anything, rpcSubscriptionMethodNewHeads)`
$DIR/common/client/node_lifecycle_test.go: `.Run(func(args mock.Arguments) {
ch := args.Get(1).(chan<- Head)
close(ch)
})`
$DIR/common/client/node_lifecycle_test.go: `.Get(1)`
$DIR/common/client/node_lifecycle_test.go: `.Return(sub, nil)`
$DIR/common/client/node_lifecycle_test.go: `.Once()`
$DIR/common/client/node_lifecycle_test.go: `.On("SetAliveLoopSub", sub)`
$DIR/common/client/node_lifecycle_test.go: `.Once()`
$DIR/common/client/node_lifecycle_test.go: `.TestObserved(t, zap.ErrorLevel)`
$DIR/common/client/node_lifecycle_test.go: `.On("DisconnectAll")`
$DIR/common/client/node_lifecycle_test.go: `.Once()`
$DIR/common/client/node_lifecycle_test.go: `.On("Dial", mock.Anything)`
$DIR/common/client/node_lifecycle_test.go: `.Return(errors.New("failed to dial"))`
$DIR/common/client/node_lifecycle_test.go: `.New("failed to dial")`
$DIR/common/client/node_lifecycle_test.go: `.Maybe()`
$DIR/common/client/node_lifecycle_test.go: `.declareAlive()`
$DIR/common/client/node_lifecycle_test.go: `.AssertLogEventually(t, observedLogs, "Subscription channel unexpectedly closed")`
$DIR/common/client/node_lifecycle_test.go: `.Run("updates block number and difficulty on new head", func(t *testing.T) {
t.Parallel()
rpc := newMockNodeClient[types.ID, Head](t)
sub := mocks.NewSubscription(t)
sub.On("Err").Return((<-chan error)(nil))
sub.On("Unsubscribe").Once()
expectedBlockNumber := rand.Int64()
expectedDiff := big.NewInt(rand.Int64())
rpc.On("Subscribe", mock.Anything, mock.Anything, rpcSubscriptionMethodNewHeads).Run(func(args mock.Arguments) {
ch := args.Get(1).(chan<- Head)
go writeHeads(t, ch, head{BlockNumber: expectedBlockNumber, BlockDifficulty: expectedDiff})
}).Return(sub, nil).Once()
rpc.On("SetAliveLoopSub", sub).Once()
node := newDialedNode(t, testNodeOpts{
config: testNodeConfig{},
rpc: rpc,
})
defer func() { assert.NoError(t, node.close()) }()
node.declareAlive()
tests.AssertEventually(t, func() bool {
state, block, diff := node.StateAndLatest()
return state == nodeStateAlive && block == expectedBlockNumber == bigmath.Equal(diff, expectedDiff)
})
})`
$DIR/common/client/node_lifecycle_test.go: `.NewSubscription(t)`
$DIR/common/client/node_lifecycle_test.go: `.On("Err")`
$DIR/common/client/node_lifecycle_test.go: `.Return((<-chan error)(nil))`
$DIR/common/client/node_lifecycle_test.go: `.On("Unsubscribe")`
$DIR/common/client/node_lifecycle_test.go: `.Once()`
$DIR/common/client/node_lifecycle_test.go: `.Int64()`
$DIR/common/client/node_lifecycle_test.go: `.NewInt(rand.Int64())`
$DIR/common/client/node_lifecycle_test.go: `.Int64()`
$DIR/common/client/node_lifecycle_test.go: `.On("Subscribe", mock.Anything, mock.Anything, rpcSubscriptionMethodNewHeads)`
$DIR/common/client/node_lifecycle_test.go: `.Run(func(args mock.Arguments) {
ch := args.Get(1).(chan<- Head)
go writeHeads(t, ch, head{BlockNumber: expectedBlockNumber, BlockDifficulty: expectedDiff})
})`
$DIR/common/client/node_lifecycle_test.go: `.Get(1)`
$DIR/common/client/node_lifecycle_test.go: `.Return(sub, nil)`
$DIR/common/client/node_lifecycle_test.go: `.Once()`
$DIR/common/client/node_lifecycle_test.go: `.On("SetAliveLoopSub", sub)`
$DIR/common/client/node_lifecycle_test.go: `.Once()`
$DIR/common/client/node_lifecycle_test.go: `.declareAlive()`
$DIR/common/client/node_lifecycle_test.go: `.AssertEventually(t, func() bool {
state, block, diff := node.StateAndLatest()
return state == nodeStateAlive && block == expectedBlockNumber == bigmath.Equal(diff, expectedDiff)
})`
$DIR/common/client/node_lifecycle_test.go: `.StateAndLatest()`
$DIR/common/client/node_lifecycle_test.go: `.Equal(diff, expectedDiff)`
$DIR/common/client/node_lifecycle_test.go: `.Run("If finality tag is not enabled updates finalized block metric using finality depth and latest head", func(t *testing.T) {
t.Parallel()
rpc := newMockNodeClient[types.ID, Head](t)
sub := mocks.NewSubscription(t)
sub.On("Err").Return((<-chan error)(nil))
sub.On("Unsubscribe").Once()
const blockNumber = 1000
const finalityDepth = 10
const expectedBlock = 990
rpc.On("Subscribe", mock.Anything, mock.Anything, rpcSubscriptionMethodNewHeads).Run(func(args mock.Arguments) {
ch := args.Get(1).(chan<- Head)
go writeHeads(t, ch, head{BlockNumber: blockNumber - 1}, head{BlockNumber: blockNumber}, head{BlockNumber: blockNumber - 1})
}).Return(sub, nil).Once()
rpc.On("SetAliveLoopSub", sub).Once()
name := "node-" + rand.Str(5)
node := newDialedNode(t, testNodeOpts{
config: testNodeConfig{},
chainConfig: clientMocks.ChainConfig{FinalityDepthVal: finalityDepth},
rpc: rpc,
name: name,
chainID: big.NewInt(1),
})
defer func() { assert.NoError(t, node.close()) }()
node.declareAlive()
tests.AssertEventually(t, func() bool {
metric, err := promPoolRPCNodeHighestFinalizedBlock.GetMetricWithLabelValues(big.NewInt(1).String(), name)
require.NoError(t, err)
var m = &prom.Metric{}
require.NoError(t, metric.Write(m))
return float64(expectedBlock) == m.Gauge.GetValue()
})
})`
$DIR/common/client/node_lifecycle_test.go: `.NewSubscription(t)`
$DIR/common/client/node_lifecycle_test.go: `.On("Err")`
$DIR/common/client/node_lifecycle_test.go: `.Return((<-chan error)(nil))`
$DIR/common/client/node_lifecycle_test.go: `.On("Unsubscribe")`
$DIR/common/client/node_lifecycle_test.go: `.Once()`
$DIR/common/client/node_lifecycle_test.go: `.On("Subscribe", mock.Anything, mock.Anything, rpcSubscriptionMethodNewHeads)`
$DIR/common/client/node_lifecycle_test.go: `.Run(func(args mock.Arguments) {
ch := args.Get(1).(chan<- Head)
go writeHeads(t, ch, head{BlockNumber: blockNumber - 1}, head{BlockNumber: blockNumber}, head{BlockNumber: blockNumber - 1})
})`
$DIR/common/client/node_lifecycle_test.go: `.Get(1)`
$DIR/common/client/node_lifecycle_test.go: `.Return(sub, nil)`
$DIR/common/client/node_lifecycle_test.go: `.Once()`
$DIR/common/client/node_lifecycle_test.go: `.On("SetAliveLoopSub", sub)`
$DIR/common/client/node_lifecycle_test.go: `.Once()`
$DIR/common/client/node_lifecycle_test.go: `.Str(5)`
$DIR/common/client/node_lifecycle_test.go: `.NewInt(1)`
$DIR/common/client/node_lifecycle_test.go: `.declareAlive()`
$DIR/common/client/node_lifecycle_test.go: `.AssertEventually(t, func() bool {
metric, err := promPoolRPCNodeHighestFinalizedBlock.GetMetricWithLabelValues(big.NewInt(1).String(), name)
require.NoError(t, err)
var m = &prom.Metric{}
require.NoError(t, metric.Write(m))
return float64(expectedBlock) == m.Gauge.GetValue()
})`
$DIR/common/client/node_lifecycle_test.go: `.GetMetricWithLabelValues(big.NewInt(1).String(), name)`
$DIR/common/client/node_lifecycle_test.go: `.NewInt(1)`
$DIR/common/client/node_lifecycle_test.go: `.String()`
$DIR/common/client/node_lifecycle_test.go: `.Gauge.GetValue()`
$DIR/common/client/node_lifecycle_test.go: `.Run("Logs warning if failed to get finalized block", func(t *testing.T) {
t.Parallel()
rpc := newMockNodeClient[types.ID, Head](t)
rpc.On("LatestFinalizedBlock", mock.Anything).Return(newMockHead(t), errors.New("failed to get finalized block"))
sub := mocks.NewSubscription(t)
sub.On("Err").Return((<-chan error)(nil))
sub.On("Unsubscribe").Once()
rpc.On("Subscribe", mock.Anything, mock.Anything, rpcSubscriptionMethodNewHeads).Return(sub, nil).Once()
rpc.On("SetAliveLoopSub", sub).Once()
lggr, observedLogs := logger.TestObserved(t, zap.DebugLevel)
node := newDialedNode(t, testNodeOpts{
config: testNodeConfig{
finalizedBlockPollInterval: tests.TestInterval,
},
chainConfig: clientMocks.ChainConfig{
IsFinalityTagEnabled: true,
},
rpc: rpc,
lggr: lggr,
})
defer func() { assert.NoError(t, node.close()) }()
node.declareAlive()
tests.AssertLogEventually(t, observedLogs, "Failed to fetch latest finalized block")
})`
$DIR/common/client/node_lifecycle_test.go: `.On("LatestFinalizedBlock", mock.Anything)`
$DIR/common/client/node_lifecycle_test.go: `.Return(newMockHead(t), errors.New("failed to get finalized block"))`
$DIR/common/client/node_lifecycle_test.go: `.New("failed to get finalized block")`
$DIR/common/client/node_lifecycle_test.go: `.NewSubscription(t)`
$DIR/common/client/node_lifecycle_test.go: `.On("Err")`
$DIR/common/client/node_lifecycle_test.go: `.Return((<-chan error)(nil))`
$DIR/common/client/node_lifecycle_test.go: `.On("Unsubscribe")`
$DIR/common/client/node_lifecycle_test.go: `.Once()`
$DIR/common/client/node_lifecycle_test.go: `.On("Subscribe", mock.Anything, mock.Anything, rpcSubscriptionMethodNewHeads)`
$DIR/common/client/node_lifecycle_test.go: `.Return(sub, nil)`
$DIR/common/client/node_lifecycle_test.go: `.Once()`
$DIR/common/client/node_lifecycle_test.go: `.On("SetAliveLoopSub", sub)`
$DIR/common/client/node_lifecycle_test.go: `.Once()`
$DIR/common/client/node_lifecycle_test.go: `.TestObserved(t, zap.DebugLevel)`
$DIR/common/client/node_lifecycle_test.go: `.declareAlive()`
$DIR/common/client/node_lifecycle_test.go: `.AssertLogEventually(t, observedLogs, "Failed to fetch latest finalized block")`
$DIR/common/client/node_lifecycle_test.go: `.Run("Logs warning if latest finalized block is not valid", func(t *testing.T) {
t.Parallel()
rpc := newMockNodeClient[types.ID, Head](t)
head := newMockHead(t)
head.On("IsValid").Return(false)
rpc.On("LatestFinalizedBlock", mock.Anything).Return(head, nil)
sub := mocks.NewSubscription(t)
sub.On("Err").Return((<-chan error)(nil))
sub.On("Unsubscribe").Once()
rpc.On("Subscribe", mock.Anything, mock.Anything, rpcSubscriptionMethodNewHeads).Return(sub, nil).Once()
rpc.On("SetAliveLoopSub", sub).Once()
lggr, observedLogs := logger.TestObserved(t, zap.DebugLevel)
node := newDialedNode(t, testNodeOpts{
config: testNodeConfig{
finalizedBlockPollInterval: tests.TestInterval,
},
chainConfig: clientMocks.ChainConfig{
IsFinalityTagEnabled: true,
},
rpc: rpc,
lggr: lggr,
})
defer func() { assert.NoError(t, node.close()) }()
node.declareAlive()
tests.AssertLogEventually(t, observedLogs, "Latest finalized block is not valid")
})`
$DIR/common/client/node_lifecycle_test.go: `.On("IsValid")`
$DIR/common/client/node_lifecycle_test.go: `.Return(false)`
$DIR/common/client/node_lifecycle_test.go: `.On("LatestFinalizedBlock", mock.Anything)`
$DIR/common/client/node_lifecycle_test.go: `.Return(head, nil)`
$DIR/common/client/node_lifecycle_test.go: `.NewSubscription(t)`
$DIR/common/client/node_lifecycle_test.go: `.On("Err")`
$DIR/common/client/node_lifecycle_test.go: `.Return((<-chan error)(nil))`
$DIR/common/client/node_lifecycle_test.go: `.On("Unsubscribe")`
$DIR/common/client/node_lifecycle_test.go: `.Once()`
$DIR/common/client/node_lifecycle_test.go: `.On("Subscribe", mock.Anything, mock.Anything, rpcSubscriptionMethodNewHeads)`
$DIR/common/client/node_lifecycle_test.go: `.Return(sub, nil)`
$DIR/common/client/node_lifecycle_test.go: `.Once()`
$DIR/common/client/node_lifecycle_test.go: `.On("SetAliveLoopSub", sub)`
$DIR/common/client/node_lifecycle_test.go: `.Once()`
$DIR/common/client/node_lifecycle_test.go: `.TestObserved(t, zap.DebugLevel)`
$DIR/common/client/node_lifecycle_test.go: `.declareAlive()`
$DIR/common/client/node_lifecycle_test.go: `.AssertLogEventually(t, observedLogs, "Latest finalized block is not valid")`
$DIR/common/client/node_lifecycle_test.go: `.On("LatestFinalizedBlock", mock.Anything)`
$DIR/common/client/node_lifecycle_test.go: `.Return(head{BlockNumber: expectedBlock - 1}.ToMockHead(t), nil)`
$DIR/common/client/node_lifecycle_test.go: `.ToMockHead(t)`
$DIR/common/client/node_lifecycle_test.go: `.Once()`
$DIR/common/client/node_lifecycle_test.go: `.On("LatestFinalizedBlock", mock.Anything)`
$DIR/common/client/node_lifecycle_test.go: `.Return(head{BlockNumber: expectedBlock}.ToMockHead(t), nil)`
$DIR/common/client/node_lifecycle_test.go: `.ToMockHead(t)`
$DIR/common/client/node_lifecycle_test.go: `.NewSubscription(t)`
$DIR/common/client/node_lifecycle_test.go: `.On("Err")`
$DIR/common/client/node_lifecycle_test.go: `.Return((<-chan error)(nil))`
$DIR/common/client/node_lifecycle_test.go: `.On("Unsubscribe")`
$DIR/common/client/node_lifecycle_test.go: `.Once()`
$DIR/common/client/node_lifecycle_test.go: `.On("Subscribe", mock.Anything, mock.Anything, rpcSubscriptionMethodNewHeads)`
$DIR/common/client/node_lifecycle_test.go: `.Run(func(args mock.Arguments) {
ch := args.Get(1).(chan<- Head)
// ensure that "calculated" finalized head is larger than actual, to ensure we are correctly setting
// the metric
go writeHeads(t, ch, head{BlockNumber: expectedBlock*2 + finalityDepth})
})`
$DIR/common/client/node_lifecycle_test.go: `.Get(1)`
$DIR/common/client/node_lifecycle_test.go: `.Return(sub, nil)`
$DIR/common/client/node_lifecycle_test.go: `.Once()`
$DIR/common/client/node_lifecycle_test.go: `.On("SetAliveLoopSub", sub)`
$DIR/common/client/node_lifecycle_test.go: `.Once()`
$DIR/common/client/node_lifecycle_test.go: `.Str(5)`
$DIR/common/client/node_lifecycle_test.go: `.NewInt(1)`
$DIR/common/client/node_lifecycle_test.go: `.declareAlive()`
$DIR/common/client/node_lifecycle_test.go: `.AssertEventually(t, func() bool {
metric, err := promPoolRPCNodeHighestFinalizedBlock.GetMetricWithLabelValues(big.NewInt(1).String(), name)
require.NoError(t, err)
var m = &prom.Metric{}
require.NoError(t, metric.Write(m))
return float64(expectedBlock) == m.Gauge.GetValue()
})`
$DIR/common/client/node_lifecycle_test.go: `.GetMetricWithLabelValues(big.NewInt(1).String(), name)`
$DIR/common/client/node_lifecycle_test.go: `.NewInt(1)`
$DIR/common/client/node_lifecycle_test.go: `.String()`
$DIR/common/client/node_lifecycle_test.go: `.Gauge.GetValue()`
$DIR/common/client/node_lifecycle_test.go: `.rpc.On("Close")`
$DIR/common/client/node_lifecycle_test.go: `.Return(nil)`
$DIR/common/client/node_lifecycle_test.go: `.Once()`
$DIR/common/client/node_lifecycle_test.go: `.rpc.On("DisconnectAll")`
$DIR/common/client/node_lifecycle_test.go: `.setState(nodeStateAlive)`
$DIR/common/client/node_lifecycle_test.go: `.Run("returns on closed", func(t *testing.T) {
t.Parallel()
node := newTestNode(t, testNodeOpts{})
node.setState(nodeStateClosed)
node.wg.Add(1)
node.outOfSyncLoop(stubIsOutOfSync)
})`
$DIR/common/client/node_lifecycle_test.go: `.setState(nodeStateClosed)`
$DIR/common/client/node_lifecycle_test.go: `.wg.Add(1)`
$DIR/common/client/node_lifecycle_test.go: `.outOfSyncLoop(stubIsOutOfSync)`
$DIR/common/client/node_lifecycle_test.go: `.Run("on old blocks stays outOfSync and returns on close", func(t *testing.T) {
t.Parallel()
rpc := newMockNodeClient[types.ID, Head](t)
nodeChainID := types.RandomID()
lggr, observedLogs := logger.TestObserved(t, zap.DebugLevel)
node := newAliveNode(t, testNodeOpts{
rpc: rpc,
chainID: nodeChainID,
lggr: lggr,
})
defer func() { assert.NoError(t, node.close()) }()
rpc.On("Dial", mock.Anything).Return(nil).Once()
rpc.On("ChainID", mock.Anything).Return(nodeChainID, nil).Once()
outOfSyncSubscription := mocks.NewSubscription(t)
outOfSyncSubscription.On("Err").Return((<-chan error)(nil))
outOfSyncSubscription.On("Unsubscribe").Once()
heads := []head{{BlockNumber: 7}, {BlockNumber: 11}, {BlockNumber: 13}}
rpc.On("Subscribe", mock.Anything, mock.Anything, rpcSubscriptionMethodNewHeads).Run(func(args mock.Arguments) {
ch := args.Get(1).(chan<- Head)
go writeHeads(t, ch, heads...)
}).Return(outOfSyncSubscription, nil).Once()
rpc.On("Dial", mock.Anything).Return(errors.New("failed to redial")).Maybe()
node.declareOutOfSync(func(num int64, td *big.Int) bool {
return true
})
tests.AssertLogCountEventually(t, observedLogs, msgReceivedBlock, len(heads))
assert.Equal(t, nodeStateOutOfSync, node.State())
})`
$DIR/common/client/node_lifecycle_test.go: `.RandomID()`
$DIR/common/client/node_lifecycle_test.go: `.TestObserved(t, zap.DebugLevel)`
$DIR/common/client/node_lifecycle_test.go: `.On("Dial", mock.Anything)`
$DIR/common/client/node_lifecycle_test.go: `.Return(nil)`
$DIR/common/client/node_lifecycle_test.go: `.Once()`
$DIR/common/client/node_lifecycle_test.go: `.On("ChainID", mock.Anything)`
$DIR/common/client/node_lifecycle_test.go: `.Return(nodeChainID, nil)`
$DIR/common/client/node_lifecycle_test.go: `.Once()`
$DIR/common/client/node_lifecycle_test.go: `.NewSubscription(t)`
$DIR/common/client/node_lifecycle_test.go: `.On("Err")`
$DIR/common/client/node_lifecycle_test.go: `.Return((<-chan error)(nil))`
$DIR/common/client/node_lifecycle_test.go: `.On("Unsubscribe")`
$DIR/common/client/node_lifecycle_test.go: `.Once()`
$DIR/common/client/node_lifecycle_test.go: `.On("Subscribe", mock.Anything, mock.Anything, rpcSubscriptionMethodNewHeads)`
$DIR/common/client/node_lifecycle_test.go: `.Run(func(args mock.Arguments) {
ch := args.Get(1).(chan<- Head)
go writeHeads(t, ch, heads...)
})`
$DIR/common/client/node_lifecycle_test.go: `.Get(1)`
$DIR/common/client/node_lifecycle_test.go: `.Return(outOfSyncSubscription, nil)`
$DIR/common/client/node_lifecycle_test.go: `.Once()`
$DIR/common/client/node_lifecycle_test.go: `.On("Dial", mock.Anything)`
$DIR/common/client/node_lifecycle_test.go: `.Return(errors.New("failed to redial"))`
$DIR/common/client/node_lifecycle_test.go: `.New("failed to redial")`
$DIR/common/client/node_lifecycle_test.go: `.Maybe()`
$DIR/common/client/node_lifecycle_test.go: `.declareOutOfSync(func(num int64, td *big.Int) bool {
return true
})`
$DIR/common/client/node_lifecycle_test.go: `.AssertLogCountEventually(t, observedLogs, msgReceivedBlock, len(heads))`
$DIR/common/client/node_lifecycle_test.go: `.Run("if initial dial fails, transitions to unreachable", func(t *testing.T) {
t.Parallel()
rpc := newMockNodeClient[types.ID, Head](t)
node := newAliveNode(t, testNodeOpts{
rpc: rpc,
})
defer func() { assert.NoError(t, node.close()) }()
expectedError := errors.New("failed to dial rpc")
// might be called again in unreachable loop, so no need to set once
rpc.On("Dial", mock.Anything).Return(expectedError)
node.declareOutOfSync(stubIsOutOfSync)
tests.AssertEventually(t, func() bool {
return node.State() == nodeStateUnreachable
})
})`
$DIR/common/client/node_lifecycle_test.go: `.New("failed to dial rpc")`
$DIR/common/client/node_lifecycle_test.go: `.On("Dial", mock.Anything)`
$DIR/common/client/node_lifecycle_test.go: `.Return(expectedError)`
$DIR/common/client/node_lifecycle_test.go: `.declareOutOfSync(stubIsOutOfSync)`
$DIR/common/client/node_lifecycle_test.go: `.AssertEventually(t, func() bool {
return node.State() == nodeStateUnreachable
})`
$DIR/common/client/node_lifecycle_test.go: `.State()`
$DIR/common/client/node_lifecycle_test.go: `.Run("if fail to get chainID, transitions to unreachable", func(t *testing.T) {
t.Parallel()
rpc := newMockNodeClient[types.ID, Head](t)
node := newAliveNode(t, testNodeOpts{
rpc: rpc,
})
defer func() { assert.NoError(t, node.close()) }()
// for out-of-sync
rpc.On("Dial", mock.Anything).Return(nil).Once()
// for unreachable
rpc.On("Dial", mock.Anything).Return(errors.New("failed to dial")).Maybe()
expectedError := errors.New("failed to get chain ID")
// might be called multiple times
rpc.On("ChainID", mock.Anything).Return(types.NewIDFromInt(0), expectedError)
node.declareOutOfSync(stubIsOutOfSync)
tests.AssertEventually(t, func() bool {
return node.State() == nodeStateUnreachable
})
})`
$DIR/common/client/node_lifecycle_test.go: `.On("Dial", mock.Anything)`
$DIR/common/client/node_lifecycle_test.go: `.Return(nil)`
$DIR/common/client/node_lifecycle_test.go: `.Once()`
$DIR/common/client/node_lifecycle_test.go: `.On("Dial", mock.Anything)`
$DIR/common/client/node_lifecycle_test.go: `.Return(errors.New("failed to dial"))`
$DIR/common/client/node_lifecycle_test.go: `.New("failed to dial")`
$DIR/common/client/node_lifecycle_test.go: `.Maybe()`
$DIR/common/client/node_lifecycle_test.go: `.New("failed to get chain ID")`
$DIR/common/client/node_lifecycle_test.go: `.On("ChainID", mock.Anything)`
$DIR/common/client/node_lifecycle_test.go: `.Return(types.NewIDFromInt(0), expectedError)`
$DIR/common/client/node_lifecycle_test.go: `.NewIDFromInt(0)`
$DIR/common/client/node_lifecycle_test.go: `.declareOutOfSync(stubIsOutOfSync)`
$DIR/common/client/node_lifecycle_test.go: `.AssertEventually(t, func() bool {
return node.State() == nodeStateUnreachable
})`
$DIR/common/client/node_lifecycle_test.go: `.State()`
$DIR/common/client/node_lifecycle_test.go: `.Run("if chainID does not match, transitions to invalidChainID", func(t *testing.T) {
t.Parallel()
rpc := newMockNodeClient[types.ID, Head](t)
nodeChainID := types.NewIDFromInt(10)
rpcChainID := types.NewIDFromInt(11)
node := newAliveNode(t, testNodeOpts{
rpc: rpc,
chainID: nodeChainID,
})
defer func() { assert.NoError(t, node.close()) }()
// one for out-of-sync & one for invalid chainID
rpc.On("Dial", mock.Anything).Return(nil).Twice()
// might be called multiple times
rpc.On("ChainID", mock.Anything).Return(rpcChainID, nil)
node.declareOutOfSync(stubIsOutOfSync)
tests.AssertEventually(t, func() bool {
return node.State() == nodeStateInvalidChainID
})
})`
$DIR/common/client/node_lifecycle_test.go: `.NewIDFromInt(10)`
$DIR/common/client/node_lifecycle_test.go: `.NewIDFromInt(11)`
$DIR/common/client/node_lifecycle_test.go: `.On("Dial", mock.Anything)`
$DIR/common/client/node_lifecycle_test.go: `.Return(nil)`
$DIR/common/client/node_lifecycle_test.go: `.Twice()`
$DIR/common/client/node_lifecycle_test.go: `.On("ChainID", mock.Anything)`
$DIR/common/client/node_lifecycle_test.go: `.Return(rpcChainID, nil)`
$DIR/common/client/node_lifecycle_test.go: `.declareOutOfSync(stubIsOutOfSync)`
$DIR/common/client/node_lifecycle_test.go: `.AssertEventually(t, func() bool {
return node.State() == nodeStateInvalidChainID
})`
$DIR/common/client/node_lifecycle_test.go: `.State()`
$DIR/common/client/node_lifecycle_test.go: `.Run("if syncing, transitions to syncing", func(t *testing.T) {
t.Parallel()
rpc := newMockNodeClient[types.ID, Head](t)
nodeChainID := types.NewIDFromInt(10)
node := newAliveNode(t, testNodeOpts{
rpc: rpc,
chainID: nodeChainID,
config: testNodeConfig{nodeIsSyncingEnabled: true},
})
defer func() { assert.NoError(t, node.close()) }()
rpc.On("Dial", mock.Anything).Return(nil)
rpc.On("ChainID", mock.Anything).Return(nodeChainID, nil)
// might be called multiple times
rpc.On("IsSyncing", mock.Anything).Return(true, nil)
node.declareOutOfSync(stubIsOutOfSync)
tests.AssertEventually(t, func() bool {
return node.State() == nodeStateSyncing
})
})`
$DIR/common/client/node_lifecycle_test.go: `.NewIDFromInt(10)`
$DIR/common/client/node_lifecycle_test.go: `.On("Dial", mock.Anything)`
$DIR/common/client/node_lifecycle_test.go: `.Return(nil)`
$DIR/common/client/node_lifecycle_test.go: `.On("ChainID", mock.Anything)`
$DIR/common/client/node_lifecycle_test.go: `.Return(nodeChainID, nil)`
$DIR/common/client/node_lifecycle_test.go: `.On("IsSyncing", mock.Anything)`
$DIR/common/client/node_lifecycle_test.go: `.Return(true, nil)`
$DIR/common/client/node_lifecycle_test.go: `.declareOutOfSync(stubIsOutOfSync)`
$DIR/common/client/node_lifecycle_test.go: `.AssertEventually(t, func() bool {
return node.State() == nodeStateSyncing
})`
$DIR/common/client/node_lifecycle_test.go: `.State()`
$DIR/common/client/node_lifecycle_test.go: `.Run("if fails to fetch syncing status, transitions to unreachable", func(t *testing.T) {
t.Parallel()
rpc := newMockNodeClient[types.ID, Head](t)
nodeChainID := types.NewIDFromInt(10)
node := newAliveNode(t, testNodeOpts{
rpc: rpc,
chainID: nodeChainID,
config: testNodeConfig{nodeIsSyncingEnabled: true},
})
defer func() { assert.NoError(t, node.close()) }()
// one for out-of-sync
rpc.On("Dial", mock.Anything).Return(nil).Once()
// for unreachable
rpc.On("Dial", mock.Anything).Return(errors.New("failed to dial")).Maybe()
rpc.On("ChainID", mock.Anything).Return(nodeChainID, nil).Once()
// might be called multiple times
rpc.On("IsSyncing", mock.Anything).Return(false, errors.New("failed to check syncing"))
node.declareOutOfSync(stubIsOutOfSync)
tests.AssertEventually(t, func() bool {
return node.State() == nodeStateUnreachable
})
})`
$DIR/common/client/node_lifecycle_test.go: `.NewIDFromInt(10)`
$DIR/common/client/node_lifecycle_test.go: `.On("Dial", mock.Anything)`
$DIR/common/client/node_lifecycle_test.go: `.Return(nil)`
$DIR/common/client/node_lifecycle_test.go: `.Once()`
$DIR/common/client/node_lifecycle_test.go: `.On("Dial", mock.Anything)`
$DIR/common/client/node_lifecycle_test.go: `.Return(errors.New("failed to dial"))`
$DIR/common/client/node_lifecycle_test.go: `.New("failed to dial")`
$DIR/common/client/node_lifecycle_test.go: `.Maybe()`
$DIR/common/client/node_lifecycle_test.go: `.On("ChainID", mock.Anything)`
$DIR/common/client/node_lifecycle_test.go: `.Return(nodeChainID, nil)`
$DIR/common/client/node_lifecycle_test.go: `.Once()`
$DIR/common/client/node_lifecycle_test.go: `.On("IsSyncing", mock.Anything)`
$DIR/common/client/node_lifecycle_test.go: `.Return(false, errors.New("failed to check syncing"))`
$DIR/common/client/node_lifecycle_test.go: `.New("failed to check syncing")`
$DIR/common/client/node_lifecycle_test.go: `.declareOutOfSync(stubIsOutOfSync)`
$DIR/common/client/node_lifecycle_test.go: `.AssertEventually(t, func() bool {
return node.State() == nodeStateUnreachable
})`
$DIR/common/client/node_lifecycle_test.go: `.State()`
$DIR/common/client/node_lifecycle_test.go: `.Run("if fails to subscribe, becomes unreachable", func(t *testing.T) {
t.Parallel()
rpc := newMockNodeClient[types.ID, Head](t)
nodeChainID := types.RandomID()
node := newAliveNode(t, testNodeOpts{
rpc: rpc,
chainID: nodeChainID,
})
defer func() { assert.NoError(t, node.close()) }()
rpc.On("Dial", mock.Anything).Return(nil).Once()
rpc.On("ChainID", mock.Anything).Return(nodeChainID, nil).Once()
expectedError := errors.New("failed to subscribe")
rpc.On("Subscribe", mock.Anything, mock.Anything, rpcSubscriptionMethodNewHeads).Return(nil, expectedError)
rpc.On("Dial", mock.Anything).Return(errors.New("failed to redial")).Maybe()
node.declareOutOfSync(stubIsOutOfSync)
tests.AssertEventually(t, func() bool {
return node.State() == nodeStateUnreachable
})
})`
$DIR/common/client/node_lifecycle_test.go: `.RandomID()`
$DIR/common/client/node_lifecycle_test.go: `.On("Dial", mock.Anything)`
$DIR/common/client/node_lifecycle_test.go: `.Return(nil)`
$DIR/common/client/node_lifecycle_test.go: `.Once()`
$DIR/common/client/node_lifecycle_test.go: `.On("ChainID", mock.Anything)`
$DIR/common/client/node_lifecycle_test.go: `.Return(nodeChainID, nil)`
$DIR/common/client/node_lifecycle_test.go: `.Once()`
$DIR/common/client/node_lifecycle_test.go: `.New("failed to subscribe")`
$DIR/common/client/node_lifecycle_test.go: `.On("Subscribe", mock.Anything, mock.Anything, rpcSubscriptionMethodNewHeads)`
$DIR/common/client/node_lifecycle_test.go: `.Return(nil, expectedError)`
$DIR/common/client/node_lifecycle_test.go: `.On("Dial", mock.Anything)`
$DIR/common/client/node_lifecycle_test.go: `.Return(errors.New("failed to redial"))`
$DIR/common/client/node_lifecycle_test.go: `.New("failed to redial")`
$DIR/common/client/node_lifecycle_test.go: `.Maybe()`
$DIR/common/client/node_lifecycle_test.go: `.declareOutOfSync(stubIsOutOfSync)`
$DIR/common/client/node_lifecycle_test.go: `.AssertEventually(t, func() bool {
return node.State() == nodeStateUnreachable
})`
$DIR/common/client/node_lifecycle_test.go: `.State()`
$DIR/common/client/node_lifecycle_test.go: `.Run("on subscription termination becomes unreachable", func(t *testing.T) {
t.Parallel()
rpc := newMockNodeClient[types.ID, Head](t)
nodeChainID := types.RandomID()
lggr, observedLogs := logger.TestObserved(t, zap.ErrorLevel)
node := newAliveNode(t, testNodeOpts{
rpc: rpc,
chainID: nodeChainID,
lggr: lggr,
})
defer func() { assert.NoError(t, node.close()) }()
rpc.On("Dial", mock.Anything).Return(nil).Once()
rpc.On("ChainID", mock.Anything).Return(nodeChainID, nil).Once()
sub := mocks.NewSubscription(t)
errChan := make(chan error, 1)
errChan <- errors.New("subscription was terminate")
sub.On("Err").Return((<-chan error)(errChan))
sub.On("Unsubscribe").Once()
rpc.On("Subscribe", mock.Anything, mock.Anything, rpcSubscriptionMethodNewHeads).Return(sub, nil).Once()
rpc.On("Dial", mock.Anything).Return(errors.New("failed to redial")).Maybe()
node.declareOutOfSync(stubIsOutOfSync)
tests.AssertLogEventually(t, observedLogs, "Subscription was terminated")
tests.AssertEventually(t, func() bool {
return node.State() == nodeStateUnreachable
})
})`
$DIR/common/client/node_lifecycle_test.go: `.RandomID()`
$DIR/common/client/node_lifecycle_test.go: `.TestObserved(t, zap.ErrorLevel)`
$DIR/common/client/node_lifecycle_test.go: `.On("Dial", mock.Anything)`
$DIR/common/client/node_lifecycle_test.go: `.Return(nil)`
$DIR/common/client/node_lifecycle_test.go: `.Once()`
$DIR/common/client/node_lifecycle_test.go: `.On("ChainID", mock.Anything)`
$DIR/common/client/node_lifecycle_test.go: `.Return(nodeChainID, nil)`
$DIR/common/client/node_lifecycle_test.go: `.Once()`
$DIR/common/client/node_lifecycle_test.go: `.NewSubscription(t)`
$DIR/common/client/node_lifecycle_test.go: `.New("subscription was terminate")`
$DIR/common/client/node_lifecycle_test.go: `.On("Err")`
$DIR/common/client/node_lifecycle_test.go: `.Return((<-chan error)(errChan))`
$DIR/common/client/node_lifecycle_test.go: `.On("Unsubscribe")`
$DIR/common/client/node_lifecycle_test.go: `.Once()`
$DIR/common/client/node_lifecycle_test.go: `.On("Subscribe", mock.Anything, mock.Anything, rpcSubscriptionMethodNewHeads)`
$DIR/common/client/node_lifecycle_test.go: `.Return(sub, nil)`
$DIR/common/client/node_lifecycle_test.go: `.Once()`
$DIR/common/client/node_lifecycle_test.go: `.On("Dial", mock.Anything)`
$DIR/common/client/node_lifecycle_test.go: `.Return(errors.New("failed to redial"))`
$DIR/common/client/node_lifecycle_test.go: `.New("failed to redial")`
$DIR/common/client/node_lifecycle_test.go: `.Maybe()`
$DIR/common/client/node_lifecycle_test.go: `.declareOutOfSync(stubIsOutOfSync)`
$DIR/common/client/node_lifecycle_test.go: `.AssertLogEventually(t, observedLogs, "Subscription was terminated")`
$DIR/common/client/node_lifecycle_test.go: `.AssertEventually(t, func() bool {
return node.State() == nodeStateUnreachable
})`
$DIR/common/client/node_lifecycle_test.go: `.State()`
$DIR/common/client/node_lifecycle_test.go: `.Run("becomes unreachable if head channel is closed", func(t *testing.T) {
t.Parallel()
rpc := newMockNodeClient[types.ID, Head](t)
nodeChainID := types.RandomID()
lggr, observedLogs := logger.TestObserved(t, zap.ErrorLevel)
node := newAliveNode(t, testNodeOpts{
rpc: rpc,
chainID: nodeChainID,
lggr: lggr,
})
defer func() { assert.NoError(t, node.close()) }()
rpc.On("Dial", mock.Anything).Return(nil).Once()
rpc.On("ChainID", mock.Anything).Return(nodeChainID, nil).Once()
sub := mocks.NewSubscription(t)
sub.On("Err").Return((<-chan error)(nil))
sub.On("Unsubscribe").Once()
rpc.On("Subscribe", mock.Anything, mock.Anything, rpcSubscriptionMethodNewHeads).Run(func(args mock.Arguments) {
ch := args.Get(1).(chan<- Head)
close(ch)
}).Return(sub, nil).Once()
rpc.On("Dial", mock.Anything).Return(errors.New("failed to redial")).Maybe()
node.declareOutOfSync(stubIsOutOfSync)
tests.AssertLogEventually(t, observedLogs, "Subscription channel unexpectedly closed")
tests.AssertEventually(t, func() bool {
return node.State() == nodeStateUnreachable
})
})`
$DIR/common/client/node_lifecycle_test.go: `.RandomID()`
$DIR/common/client/node_lifecycle_test.go: `.TestObserved(t, zap.ErrorLevel)`
$DIR/common/client/node_lifecycle_test.go: `.On("Dial", mock.Anything)`
$DIR/common/client/node_lifecycle_test.go: `.Return(nil)`
$DIR/common/client/node_lifecycle_test.go: `.Once()`
$DIR/common/client/node_lifecycle_test.go: `.On("ChainID", mock.Anything)`
$DIR/common/client/node_lifecycle_test.go: `.Return(nodeChainID, nil)`
$DIR/common/client/node_lifecycle_test.go: `.Once()`
$DIR/common/client/node_lifecycle_test.go: `.NewSubscription(t)`
$DIR/common/client/node_lifecycle_test.go: `.On("Err")`
$DIR/common/client/node_lifecycle_test.go: `.Return((<-chan error)(nil))`
$DIR/common/client/node_lifecycle_test.go: `.On("Unsubscribe")`
$DIR/common/client/node_lifecycle_test.go: `.Once()`
$DIR/common/client/node_lifecycle_test.go: `.On("Subscribe", mock.Anything, mock.Anything, rpcSubscriptionMethodNewHeads)`
$DIR/common/client/node_lifecycle_test.go: `.Run(func(args mock.Arguments) {
ch := args.Get(1).(chan<- Head)
close(ch)
})`
$DIR/common/client/node_lifecycle_test.go: `.Get(1)`
$DIR/common/client/node_lifecycle_test.go: `.Return(sub, nil)`
$DIR/common/client/node_lifecycle_test.go: `.Once()`
$DIR/common/client/node_lifecycle_test.go: `.On("Dial", mock.Anything)`
$DIR/common/client/node_lifecycle_test.go: `.Return(errors.New("failed to redial"))`
$DIR/common/client/node_lifecycle_test.go: `.New("failed to redial")`
$DIR/common/client/node_lifecycle_test.go: `.Maybe()`
$DIR/common/client/node_lifecycle_test.go: `.declareOutOfSync(stubIsOutOfSync)`
$DIR/common/client/node_lifecycle_test.go: `.AssertLogEventually(t, observedLogs, "Subscription channel unexpectedly closed")`
$DIR/common/client/node_lifecycle_test.go: `.AssertEventually(t, func() bool {
return node.State() == nodeStateUnreachable
})`
$DIR/common/client/node_lifecycle_test.go: `.State()`
$DIR/common/client/node_lifecycle_test.go: `.Run("becomes alive if it receives a newer head", func(t *testing.T) {
t.Parallel()
rpc := newMockNodeClient[types.ID, Head](t)
nodeChainID := types.RandomID()
lggr, observedLogs := logger.TestObserved(t, zap.DebugLevel)
node := newAliveNode(t, testNodeOpts{
rpc: rpc,
chainID: nodeChainID,
lggr: lggr,
})
defer func() { assert.NoError(t, node.close()) }()
rpc.On("Dial", mock.Anything).Return(nil).Once()
rpc.On("ChainID", mock.Anything).Return(nodeChainID, nil).Once()
outOfSyncSubscription := mocks.NewSubscription(t)
outOfSyncSubscription.On("Err").Return((<-chan error)(nil))
outOfSyncSubscription.On("Unsubscribe").Once()
const highestBlock = 1000
rpc.On("Subscribe", mock.Anything, mock.Anything, rpcSubscriptionMethodNewHeads).Run(func(args mock.Arguments) {
ch := args.Get(1).(chan<- Head)
go writeHeads(t, ch, head{BlockNumber: highestBlock - 1}, head{BlockNumber: highestBlock})
}).Return(outOfSyncSubscription, nil).Once()
setupRPCForAliveLoop(t, rpc)
node.declareOutOfSync(func(num int64, td *big.Int) bool {
return num < highestBlock
})
tests.AssertLogEventually(t, observedLogs, msgReceivedBlock)
tests.AssertLogEventually(t, observedLogs, msgInSync)
tests.AssertEventually(t, func() bool {
return node.State() == nodeStateAlive
})
})`
$DIR/common/client/node_lifecycle_test.go: `.RandomID()`
$DIR/common/client/node_lifecycle_test.go: `.TestObserved(t, zap.DebugLevel)`
$DIR/common/client/node_lifecycle_test.go: `.On("Dial", mock.Anything)`
$DIR/common/client/node_lifecycle_test.go: `.Return(nil)`
$DIR/common/client/node_lifecycle_test.go: `.Once()`
$DIR/common/client/node_lifecycle_test.go: `.On("ChainID", mock.Anything)`
$DIR/common/client/node_lifecycle_test.go: `.Return(nodeChainID, nil)`
$DIR/common/client/node_lifecycle_test.go: `.Once()`
$DIR/common/client/node_lifecycle_test.go: `.NewSubscription(t)`
$DIR/common/client/node_lifecycle_test.go: `.On("Err")`
$DIR/common/client/node_lifecycle_test.go: `.Return((<-chan error)(nil))`
$DIR/common/client/node_lifecycle_test.go: `.On("Unsubscribe")`
$DIR/common/client/node_lifecycle_test.go: `.Once()`
$DIR/common/client/node_lifecycle_test.go: `.On("Subscribe", mock.Anything, mock.Anything, rpcSubscriptionMethodNewHeads)`
$DIR/common/client/node_lifecycle_test.go: `.Run(func(args mock.Arguments) {
ch := args.Get(1).(chan<- Head)
go writeHeads(t, ch, head{BlockNumber: highestBlock - 1}, head{BlockNumber: highestBlock})
})`
$DIR/common/client/node_lifecycle_test.go: `.Get(1)`
$DIR/common/client/node_lifecycle_test.go: `.Return(outOfSyncSubscription, nil)`
$DIR/common/client/node_lifecycle_test.go: `.Once()`
$DIR/common/client/node_lifecycle_test.go: `.declareOutOfSync(func(num int64, td *big.Int) bool {
return num < highestBlock
})`
$DIR/common/client/node_lifecycle_test.go: `.AssertLogEventually(t, observedLogs, msgReceivedBlock)`
$DIR/common/client/node_lifecycle_test.go: `.AssertLogEventually(t, observedLogs, msgInSync)`
$DIR/common/client/node_lifecycle_test.go: `.AssertEventually(t, func() bool {
return node.State() == nodeStateAlive
})`
$DIR/common/client/node_lifecycle_test.go: `.State()`
$DIR/common/client/node_lifecycle_test.go: `.RandomID()`
$DIR/common/client/node_lifecycle_test.go: `.TestObserved(t, zap.DebugLevel)`
$DIR/common/client/node_lifecycle_test.go: `.NewInt(200)`
$DIR/common/client/node_lifecycle_test.go: `.On("Dial", mock.Anything)`
$DIR/common/client/node_lifecycle_test.go: `.Return(nil)`
$DIR/common/client/node_lifecycle_test.go: `.Once()`
$DIR/common/client/node_lifecycle_test.go: `.On("ChainID", mock.Anything)`
$DIR/common/client/node_lifecycle_test.go: `.Return(nodeChainID, nil)`
$DIR/common/client/node_lifecycle_test.go: `.Once()`
$DIR/common/client/node_lifecycle_test.go: `.NewSubscription(t)`
$DIR/common/client/node_lifecycle_test.go: `.On("Err")`
$DIR/common/client/node_lifecycle_test.go: `.Return((<-chan error)(nil))`
$DIR/common/client/node_lifecycle_test.go: `.On("Unsubscribe")`
$DIR/common/client/node_lifecycle_test.go: `.Once()`
$DIR/common/client/node_lifecycle_test.go: `.On("Subscribe", mock.Anything, mock.Anything, rpcSubscriptionMethodNewHeads)`
$DIR/common/client/node_lifecycle_test.go: `.Return(outOfSyncSubscription, nil)`
$DIR/common/client/node_lifecycle_test.go: `.Once()`
$DIR/common/client/node_lifecycle_test.go: `.declareOutOfSync(stubIsOutOfSync)`
$DIR/common/client/node_lifecycle_test.go: `.AssertLogEventually(t, observedLogs, "RPC endpoint is still out of sync, but there are no other available nodes. This RPC node will be forcibly moved back into the live pool in a degraded state")`
$DIR/common/client/node_lifecycle_test.go: `.AssertEventually(t, func() bool {
return node.State() == nodeStateAlive
})`
$DIR/common/client/node_lifecycle_test.go: `.State()`
$DIR/common/client/node_lifecycle_test.go: `.rpc.On("Close")`
$DIR/common/client/node_lifecycle_test.go: `.Return(nil)`
$DIR/common/client/node_lifecycle_test.go: `.Once()`
$DIR/common/client/node_lifecycle_test.go: `.rpc.On("DisconnectAll")`
$DIR/common/client/node_lifecycle_test.go: `.setState(nodeStateAlive)`
$DIR/common/client/node_lifecycle_test.go: `.Run("returns on closed", func(t *testing.T) {
t.Parallel()
node := newTestNode(t, testNodeOpts{})
node.setState(nodeStateClosed)
node.wg.Add(1)
node.unreachableLoop()
})`
$DIR/common/client/node_lifecycle_test.go: `.setState(nodeStateClosed)`
$DIR/common/client/node_lifecycle_test.go: `.wg.Add(1)`
$DIR/common/client/node_lifecycle_test.go: `.unreachableLoop()`
$DIR/common/client/node_lifecycle_test.go: `.Run("on failed redial, keeps trying", func(t *testing.T) {
t.Parallel()
rpc := newMockNodeClient[types.ID, Head](t)
nodeChainID := types.RandomID()
lggr, observedLogs := logger.TestObserved(t, zap.DebugLevel)
node := newAliveNode(t, testNodeOpts{
rpc: rpc,
chainID: nodeChainID,
lggr: lggr,
})
defer func() { assert.NoError(t, node.close()) }()
rpc.On("Dial", mock.Anything).Return(errors.New("failed to dial"))
node.declareUnreachable()
tests.AssertLogCountEventually(t, observedLogs, "Failed to redial RPC node; still unreachable", 2)
})`
$DIR/common/client/node_lifecycle_test.go: `.RandomID()`
$DIR/common/client/node_lifecycle_test.go: `.TestObserved(t, zap.DebugLevel)`
$DIR/common/client/node_lifecycle_test.go: `.On("Dial", mock.Anything)`
$DIR/common/client/node_lifecycle_test.go: `.Return(errors.New("failed to dial"))`
$DIR/common/client/node_lifecycle_test.go: `.New("failed to dial")`
$DIR/common/client/node_lifecycle_test.go: `.declareUnreachable()`
$DIR/common/client/node_lifecycle_test.go: `.AssertLogCountEventually(t, observedLogs, "Failed to redial RPC node; still unreachable", 2)`
$DIR/common/client/node_lifecycle_test.go: `.Run("on failed chainID verification, keep trying", func(t *testing.T) {
t.Parallel()
rpc := newMockNodeClient[types.ID, Head](t)
nodeChainID := types.RandomID()
lggr, observedLogs := logger.TestObserved(t, zap.DebugLevel)
node := newAliveNode(t, testNodeOpts{
rpc: rpc,
chainID: nodeChainID,
lggr: lggr,
})
defer func() { assert.NoError(t, node.close()) }()
rpc.On("Dial", mock.Anything).Return(nil)
rpc.On("ChainID", mock.Anything).Run(func(_ mock.Arguments) {
assert.Equal(t, nodeStateDialed, node.State())
}).Return(nodeChainID, errors.New("failed to get chain id"))
node.declareUnreachable()
tests.AssertLogCountEventually(t, observedLogs, "Failed to verify chain ID for node", 2)
})`
$DIR/common/client/node_lifecycle_test.go: `.RandomID()`
$DIR/common/client/node_lifecycle_test.go: `.TestObserved(t, zap.DebugLevel)`
$DIR/common/client/node_lifecycle_test.go: `.On("Dial", mock.Anything)`
$DIR/common/client/node_lifecycle_test.go: `.Return(nil)`
$DIR/common/client/node_lifecycle_test.go: `.On("ChainID", mock.Anything)`
$DIR/common/client/node_lifecycle_test.go: `.Run(func(_ mock.Arguments) {
assert.Equal(t, nodeStateDialed, node.State())
})`
$DIR/common/client/node_lifecycle_test.go: `.Return(nodeChainID, errors.New("failed to get chain id"))`
$DIR/common/client/node_lifecycle_test.go: `.New("failed to get chain id")`
$DIR/common/client/node_lifecycle_test.go: `.declareUnreachable()`
$DIR/common/client/node_lifecycle_test.go: `.AssertLogCountEventually(t, observedLogs, "Failed to verify chain ID for node", 2)`
$DIR/common/client/node_lifecycle_test.go: `.Run("on chain ID mismatch transitions to invalidChainID", func(t *testing.T) {
t.Parallel()
rpc := newMockNodeClient[types.ID, Head](t)
nodeChainID := types.NewIDFromInt(10)
rpcChainID := types.NewIDFromInt(11)
node := newAliveNode(t, testNodeOpts{
rpc: rpc,
chainID: nodeChainID,
})
defer func() { assert.NoError(t, node.close()) }()
rpc.On("Dial", mock.Anything).Return(nil)
rpc.On("ChainID", mock.Anything).Return(rpcChainID, nil)
node.declareUnreachable()
tests.AssertEventually(t, func() bool {
return node.State() == nodeStateInvalidChainID
})
})`
$DIR/common/client/node_lifecycle_test.go: `.NewIDFromInt(10)`
$DIR/common/client/node_lifecycle_test.go: `.NewIDFromInt(11)`
$DIR/common/client/node_lifecycle_test.go: `.On("Dial", mock.Anything)`
$DIR/common/client/node_lifecycle_test.go: `.Return(nil)`
$DIR/common/client/node_lifecycle_test.go: `.On("ChainID", mock.Anything)`
$DIR/common/client/node_lifecycle_test.go: `.Return(rpcChainID, nil)`
$DIR/common/client/node_lifecycle_test.go: `.declareUnreachable()`
$DIR/common/client/node_lifecycle_test.go: `.AssertEventually(t, func() bool {
return node.State() == nodeStateInvalidChainID
})`
$DIR/common/client/node_lifecycle_test.go: `.State()`
$DIR/common/client/node_lifecycle_test.go: `.Run("on syncing status check failure, keeps trying", func(t *testing.T) {
t.Parallel()
rpc := newMockNodeClient[types.ID, Head](t)
nodeChainID := types.RandomID()
lggr, observedLogs := logger.TestObserved(t, zap.DebugLevel)
node := newAliveNode(t, testNodeOpts{
rpc: rpc,
chainID: nodeChainID,
lggr: lggr,
config: testNodeConfig{nodeIsSyncingEnabled: true},
})
defer func() { assert.NoError(t, node.close()) }()
rpc.On("Dial", mock.Anything).Return(nil)
rpc.On("ChainID", mock.Anything).Run(func(_ mock.Arguments) {
assert.Equal(t, nodeStateDialed, node.State())
}).Return(nodeChainID, nil)
rpc.On("IsSyncing", mock.Anything).Return(false, errors.New("failed to check syncing status"))
node.declareUnreachable()
tests.AssertLogCountEventually(t, observedLogs, "Unexpected error while verifying RPC node synchronization status", 2)
})`
$DIR/common/client/node_lifecycle_test.go: `.RandomID()`
$DIR/common/client/node_lifecycle_test.go: `.TestObserved(t, zap.DebugLevel)`
$DIR/common/client/node_lifecycle_test.go: `.On("Dial", mock.Anything)`
$DIR/common/client/node_lifecycle_test.go: `.Return(nil)`
$DIR/common/client/node_lifecycle_test.go: `.On("ChainID", mock.Anything)`
$DIR/common/client/node_lifecycle_test.go: `.Run(func(_ mock.Arguments) {
assert.Equal(t, nodeStateDialed, node.State())
})`
$DIR/common/client/node_lifecycle_test.go: `.Return(nodeChainID, nil)`
$DIR/common/client/node_lifecycle_test.go: `.On("IsSyncing", mock.Anything)`
$DIR/common/client/node_lifecycle_test.go: `.Return(false, errors.New("failed to check syncing status"))`
$DIR/common/client/node_lifecycle_test.go: `.New("failed to check syncing status")`
$DIR/common/client/node_lifecycle_test.go: `.declareUnreachable()`
$DIR/common/client/node_lifecycle_test.go: `.AssertLogCountEventually(t, observedLogs, "Unexpected error while verifying RPC node synchronization status", 2)`
$DIR/common/client/node_lifecycle_test.go: `.Run("on syncing, transitions to syncing state", func(t *testing.T) {
t.Parallel()
rpc := newMockNodeClient[types.ID, Head](t)
nodeChainID := types.RandomID()
node := newAliveNode(t, testNodeOpts{
rpc: rpc,
chainID: nodeChainID,
config: testNodeConfig{nodeIsSyncingEnabled: true},
})
defer func() { assert.NoError(t, node.close()) }()
rpc.On("Dial", mock.Anything).Return(nil)
rpc.On("ChainID", mock.Anything).Return(nodeChainID, nil)
rpc.On("IsSyncing", mock.Anything).Return(true, nil)
setupRPCForAliveLoop(t, rpc)
node.declareUnreachable()
tests.AssertEventually(t, func() bool {
return node.State() == nodeStateSyncing
})
})`
$DIR/common/client/node_lifecycle_test.go: `.RandomID()`
$DIR/common/client/node_lifecycle_test.go: `.On("Dial", mock.Anything)`
$DIR/common/client/node_lifecycle_test.go: `.Return(nil)`
$DIR/common/client/node_lifecycle_test.go: `.On("ChainID", mock.Anything)`
$DIR/common/client/node_lifecycle_test.go: `.Return(nodeChainID, nil)`
$DIR/common/client/node_lifecycle_test.go: `.On("IsSyncing", mock.Anything)`
$DIR/common/client/node_lifecycle_test.go: `.Return(true, nil)`
$DIR/common/client/node_lifecycle_test.go: `.declareUnreachable()`
$DIR/common/client/node_lifecycle_test.go: `.AssertEventually(t, func() bool {
return node.State() == nodeStateSyncing
})`
$DIR/common/client/node_lifecycle_test.go: `.State()`
$DIR/common/client/node_lifecycle_test.go: `.Run("on successful verification becomes alive", func(t *testing.T) {
t.Parallel()
rpc := newMockNodeClient[types.ID, Head](t)
nodeChainID := types.RandomID()
node := newAliveNode(t, testNodeOpts{
rpc: rpc,
chainID: nodeChainID,
config: testNodeConfig{nodeIsSyncingEnabled: true},
})
defer func() { assert.NoError(t, node.close()) }()
rpc.On("Dial", mock.Anything).Return(nil)
rpc.On("ChainID", mock.Anything).Return(nodeChainID, nil)
rpc.On("IsSyncing", mock.Anything).Return(false, nil)
setupRPCForAliveLoop(t, rpc)
node.declareUnreachable()
tests.AssertEventually(t, func() bool {
return node.State() == nodeStateAlive
})
})`
$DIR/common/client/node_lifecycle_test.go: `.RandomID()`
$DIR/common/client/node_lifecycle_test.go: `.On("Dial", mock.Anything)`
$DIR/common/client/node_lifecycle_test.go: `.Return(nil)`
$DIR/common/client/node_lifecycle_test.go: `.On("ChainID", mock.Anything)`
$DIR/common/client/node_lifecycle_test.go: `.Return(nodeChainID, nil)`
$DIR/common/client/node_lifecycle_test.go: `.On("IsSyncing", mock.Anything)`
$DIR/common/client/node_lifecycle_test.go: `.Return(false, nil)`
$DIR/common/client/node_lifecycle_test.go: `.declareUnreachable()`
$DIR/common/client/node_lifecycle_test.go: `.AssertEventually(t, func() bool {
return node.State() == nodeStateAlive
})`
$DIR/common/client/node_lifecycle_test.go: `.State()`
$DIR/common/client/node_lifecycle_test.go: `.RandomID()`
$DIR/common/client/node_lifecycle_test.go: `.On("Dial", mock.Anything)`
$DIR/common/client/node_lifecycle_test.go: `.Return(nil)`
$DIR/common/client/node_lifecycle_test.go: `.On("ChainID", mock.Anything)`
$DIR/common/client/node_lifecycle_test.go: `.Return(nodeChainID, nil)`
$DIR/common/client/node_lifecycle_test.go: `.declareUnreachable()`
$DIR/common/client/node_lifecycle_test.go: `.AssertEventually(t, func() bool {
return node.State() == nodeStateAlive
})`
$DIR/common/client/node_lifecycle_test.go: `.State()`
$DIR/common/client/node_lifecycle_test.go: `.rpc.On("Close")`
$DIR/common/client/node_lifecycle_test.go: `.Return(nil)`
$DIR/common/client/node_lifecycle_test.go: `.Once()`
$DIR/common/client/node_lifecycle_test.go: `.rpc.On("DisconnectAll")`
$DIR/common/client/node_lifecycle_test.go: `.setState(nodeStateDialed)`
$DIR/common/client/node_lifecycle_test.go: `.Run("returns on closed", func(t *testing.T) {
t.Parallel()
node := newTestNode(t, testNodeOpts{})
node.setState(nodeStateClosed)
node.wg.Add(1)
node.invalidChainIDLoop()
})`
$DIR/common/client/node_lifecycle_test.go: `.setState(nodeStateClosed)`
$DIR/common/client/node_lifecycle_test.go: `.wg.Add(1)`
$DIR/common/client/node_lifecycle_test.go: `.invalidChainIDLoop()`
$DIR/common/client/node_lifecycle_test.go: `.Run("on invalid dial becomes unreachable", func(t *testing.T) {
t.Parallel()
rpc := newMockNodeClient[types.ID, Head](t)
nodeChainID := types.RandomID()
node := newDialedNode(t, testNodeOpts{
rpc: rpc,
chainID: nodeChainID,
})
defer func() { assert.NoError(t, node.close()) }()
rpc.On("Dial", mock.Anything).Return(errors.New("failed to dial"))
node.declareInvalidChainID()
tests.AssertEventually(t, func() bool {
return node.State() == nodeStateUnreachable
})
})`
$DIR/common/client/node_lifecycle_test.go: `.RandomID()`
$DIR/common/client/node_lifecycle_test.go: `.On("Dial", mock.Anything)`
$DIR/common/client/node_lifecycle_test.go: `.Return(errors.New("failed to dial"))`
$DIR/common/client/node_lifecycle_test.go: `.New("failed to dial")`
$DIR/common/client/node_lifecycle_test.go: `.declareInvalidChainID()`
$DIR/common/client/node_lifecycle_test.go: `.AssertEventually(t, func() bool {
return node.State() == nodeStateUnreachable
})`
$DIR/common/client/node_lifecycle_test.go: `.State()`
$DIR/common/client/node_lifecycle_test.go: `.Run("on failed chainID call becomes unreachable", func(t *testing.T) {
t.Parallel()
rpc := newMockNodeClient[types.ID, Head](t)
nodeChainID := types.RandomID()
lggr, observedLogs := logger.TestObserved(t, zap.DebugLevel)
node := newDialedNode(t, testNodeOpts{
rpc: rpc,
chainID: nodeChainID,
lggr: lggr,
})
defer func() { assert.NoError(t, node.close()) }()
rpc.On("ChainID", mock.Anything).Return(nodeChainID, errors.New("failed to get chain id"))
// once for chainID and maybe another one for unreachable
rpc.On("Dial", mock.Anything).Return(nil).Once()
rpc.On("Dial", mock.Anything).Return(errors.New("failed to dial")).Maybe()
node.declareInvalidChainID()
tests.AssertLogEventually(t, observedLogs, "Failed to verify chain ID for node")
tests.AssertEventually(t, func() bool {
return node.State() == nodeStateUnreachable
})
})`
$DIR/common/client/node_lifecycle_test.go: `.RandomID()`
$DIR/common/client/node_lifecycle_test.go: `.TestObserved(t, zap.DebugLevel)`
$DIR/common/client/node_lifecycle_test.go: `.On("ChainID", mock.Anything)`
$DIR/common/client/node_lifecycle_test.go: `.Return(nodeChainID, errors.New("failed to get chain id"))`
$DIR/common/client/node_lifecycle_test.go: `.New("failed to get chain id")`
$DIR/common/client/node_lifecycle_test.go: `.On("Dial", mock.Anything)`
$DIR/common/client/node_lifecycle_test.go: `.Return(nil)`
$DIR/common/client/node_lifecycle_test.go: `.Once()`
$DIR/common/client/node_lifecycle_test.go: `.On("Dial", mock.Anything)`
$DIR/common/client/node_lifecycle_test.go: `.Return(errors.New("failed to dial"))`
$DIR/common/client/node_lifecycle_test.go: `.New("failed to dial")`
$DIR/common/client/node_lifecycle_test.go: `.Maybe()`
$DIR/common/client/node_lifecycle_test.go: `.declareInvalidChainID()`
$DIR/common/client/node_lifecycle_test.go: `.AssertLogEventually(t, observedLogs, "Failed to verify chain ID for node")`
$DIR/common/client/node_lifecycle_test.go: `.AssertEventually(t, func() bool {
return node.State() == nodeStateUnreachable
})`
$DIR/common/client/node_lifecycle_test.go: `.State()`
$DIR/common/client/node_lifecycle_test.go: `.Run("on chainID mismatch keeps trying", func(t *testing.T) {
t.Parallel()
rpc := newMockNodeClient[types.ID, Head](t)
nodeChainID := types.NewIDFromInt(10)
rpcChainID := types.NewIDFromInt(11)
lggr, observedLogs := logger.TestObserved(t, zap.DebugLevel)
node := newDialedNode(t, testNodeOpts{
rpc: rpc,
chainID: nodeChainID,
lggr: lggr,
})
defer func() { assert.NoError(t, node.close()) }()
rpc.On("Dial", mock.Anything).Return(nil).Once()
rpc.On("ChainID", mock.Anything).Return(rpcChainID, nil)
node.declareInvalidChainID()
tests.AssertLogCountEventually(t, observedLogs, "Failed to verify RPC node; remote endpoint returned the wrong chain ID", 2)
tests.AssertEventually(t, func() bool {
return node.State() == nodeStateInvalidChainID
})
})`
$DIR/common/client/node_lifecycle_test.go: `.NewIDFromInt(10)`
$DIR/common/client/node_lifecycle_test.go: `.NewIDFromInt(11)`
$DIR/common/client/node_lifecycle_test.go: `.TestObserved(t, zap.DebugLevel)`
$DIR/common/client/node_lifecycle_test.go: `.On("Dial", mock.Anything)`
$DIR/common/client/node_lifecycle_test.go: `.Return(nil)`
$DIR/common/client/node_lifecycle_test.go: `.Once()`
$DIR/common/client/node_lifecycle_test.go: `.On("ChainID", mock.Anything)`
$DIR/common/client/node_lifecycle_test.go: `.Return(rpcChainID, nil)`
$DIR/common/client/node_lifecycle_test.go: `.declareInvalidChainID()`
$DIR/common/client/node_lifecycle_test.go: `.AssertLogCountEventually(t, observedLogs, "Failed to verify RPC node; remote endpoint returned the wrong chain ID", 2)`
$DIR/common/client/node_lifecycle_test.go: `.AssertEventually(t, func() bool {
return node.State() == nodeStateInvalidChainID
})`
$DIR/common/client/node_lifecycle_test.go: `.State()`
$DIR/common/client/node_lifecycle_test.go: `.Run("on successful verification without isSyncing becomes alive", func(t *testing.T) {
t.Parallel()
rpc := newMockNodeClient[types.ID, Head](t)
nodeChainID := types.NewIDFromInt(10)
rpcChainID := types.NewIDFromInt(11)
node := newDialedNode(t, testNodeOpts{
rpc: rpc,
chainID: nodeChainID,
})
defer func() { assert.NoError(t, node.close()) }()
rpc.On("Dial", mock.Anything).Return(nil).Once()
rpc.On("ChainID", mock.Anything).Return(rpcChainID, nil).Once()
rpc.On("ChainID", mock.Anything).Return(nodeChainID, nil).Once()
setupRPCForAliveLoop(t, rpc)
node.declareInvalidChainID()
tests.AssertEventually(t, func() bool {
return node.State() == nodeStateAlive
})
})`
$DIR/common/client/node_lifecycle_test.go: `.NewIDFromInt(10)`
$DIR/common/client/node_lifecycle_test.go: `.NewIDFromInt(11)`
$DIR/common/client/node_lifecycle_test.go: `.On("Dial", mock.Anything)`
$DIR/common/client/node_lifecycle_test.go: `.Return(nil)`
$DIR/common/client/node_lifecycle_test.go: `.Once()`
$DIR/common/client/node_lifecycle_test.go: `.On("ChainID", mock.Anything)`
$DIR/common/client/node_lifecycle_test.go: `.Return(rpcChainID, nil)`
$DIR/common/client/node_lifecycle_test.go: `.Once()`
$DIR/common/client/node_lifecycle_test.go: `.On("ChainID", mock.Anything)`
$DIR/common/client/node_lifecycle_test.go: `.Return(nodeChainID, nil)`
$DIR/common/client/node_lifecycle_test.go: `.Once()`
$DIR/common/client/node_lifecycle_test.go: `.declareInvalidChainID()`
$DIR/common/client/node_lifecycle_test.go: `.AssertEventually(t, func() bool {
return node.State() == nodeStateAlive
})`
$DIR/common/client/node_lifecycle_test.go: `.State()`
$DIR/common/client/node_lifecycle_test.go: `.NewIDFromInt(10)`
$DIR/common/client/node_lifecycle_test.go: `.NewIDFromInt(11)`
$DIR/common/client/node_lifecycle_test.go: `.On("Dial", mock.Anything)`
$DIR/common/client/node_lifecycle_test.go: `.Return(nil)`
$DIR/common/client/node_lifecycle_test.go: `.Once()`
$DIR/common/client/node_lifecycle_test.go: `.On("ChainID", mock.Anything)`
$DIR/common/client/node_lifecycle_test.go: `.Return(rpcChainID, nil)`
$DIR/common/client/node_lifecycle_test.go: `.Once()`
$DIR/common/client/node_lifecycle_test.go: `.On("ChainID", mock.Anything)`
$DIR/common/client/node_lifecycle_test.go: `.Return(nodeChainID, nil)`
$DIR/common/client/node_lifecycle_test.go: `.Once()`
$DIR/common/client/node_lifecycle_test.go: `.On("IsSyncing", mock.Anything)`
$DIR/common/client/node_lifecycle_test.go: `.Return(false, nil)`
$DIR/common/client/node_lifecycle_test.go: `.Once()`
$DIR/common/client/node_lifecycle_test.go: `.declareInvalidChainID()`
$DIR/common/client/node_lifecycle_test.go: `.AssertEventually(t, func() bool {
return node.State() == nodeStateAlive
})`
$DIR/common/client/node_lifecycle_test.go: `.State()`
$DIR/common/client/node_lifecycle_test.go: `.rpc.On("Close")`
$DIR/common/client/node_lifecycle_test.go: `.Return(nil)`
$DIR/common/client/node_lifecycle_test.go: `.Once()`
$DIR/common/client/node_lifecycle_test.go: `.Run("if fails on initial dial, becomes unreachable", func(t *testing.T) {
t.Parallel()
rpc := newMockNodeClient[types.ID, Head](t)
nodeChainID := types.RandomID()
lggr, observedLogs := logger.TestObserved(t, zap.DebugLevel)
node := newNode(t, testNodeOpts{
rpc: rpc,
chainID: nodeChainID,
lggr: lggr,
})
defer func() { assert.NoError(t, node.close()) }()
rpc.On("Dial", mock.Anything).Return(errors.New("failed to dial"))
// disconnects all on transfer to unreachable
rpc.On("DisconnectAll")
err := node.Start(tests.Context(t))
assert.NoError(t, err)
tests.AssertLogEventually(t, observedLogs, "Dial failed: Node is unreachable")
tests.AssertEventually(t, func() bool {
return node.State() == nodeStateUnreachable
})
})`
$DIR/common/client/node_lifecycle_test.go: `.RandomID()`
$DIR/common/client/node_lifecycle_test.go: `.TestObserved(t, zap.DebugLevel)`
$DIR/common/client/node_lifecycle_test.go: `.On("Dial", mock.Anything)`
$DIR/common/client/node_lifecycle_test.go: `.Return(errors.New("failed to dial"))`
$DIR/common/client/node_lifecycle_test.go: `.New("failed to dial")`
$DIR/common/client/node_lifecycle_test.go: `.On("DisconnectAll")`
$DIR/common/client/node_lifecycle_test.go: `.Start(tests.Context(t))`
$DIR/common/client/node_lifecycle_test.go: `.Context(t)`
$DIR/common/client/node_lifecycle_test.go: `.AssertLogEventually(t, observedLogs, "Dial failed: Node is unreachable")`
$DIR/common/client/node_lifecycle_test.go: `.AssertEventually(t, func() bool {
return node.State() == nodeStateUnreachable
})`
$DIR/common/client/node_lifecycle_test.go: `.State()`
$DIR/common/client/node_lifecycle_test.go: `.Run("if chainID verification fails, becomes unreachable", func(t *testing.T) {
t.Parallel()
rpc := newMockNodeClient[types.ID, Head](t)
nodeChainID := types.RandomID()
lggr, observedLogs := logger.TestObserved(t, zap.DebugLevel)
node := newNode(t, testNodeOpts{
rpc: rpc,
chainID: nodeChainID,
lggr: lggr,
})
defer func() { assert.NoError(t, node.close()) }()
rpc.On("Dial", mock.Anything).Return(nil)
rpc.On("ChainID", mock.Anything).Run(func(_ mock.Arguments) {
assert.Equal(t, nodeStateDialed, node.State())
}).Return(nodeChainID, errors.New("failed to get chain id"))
// disconnects all on transfer to unreachable
rpc.On("DisconnectAll")
err := node.Start(tests.Context(t))
assert.NoError(t, err)
tests.AssertLogEventually(t, observedLogs, "Failed to verify chain ID for node")
tests.AssertEventually(t, func() bool {
return node.State() == nodeStateUnreachable
})
})`
$DIR/common/client/node_lifecycle_test.go: `.RandomID()`
$DIR/common/client/node_lifecycle_test.go: `.TestObserved(t, zap.DebugLevel)`
$DIR/common/client/node_lifecycle_test.go: `.On("Dial", mock.Anything)`
$DIR/common/client/node_lifecycle_test.go: `.Return(nil)`
$DIR/common/client/node_lifecycle_test.go: `.On("ChainID", mock.Anything)`
$DIR/common/client/node_lifecycle_test.go: `.Run(func(_ mock.Arguments) {
assert.Equal(t, nodeStateDialed, node.State())
})`
$DIR/common/client/node_lifecycle_test.go: `.Return(nodeChainID, errors.New("failed to get chain id"))`
$DIR/common/client/node_lifecycle_test.go: `.New("failed to get chain id")`
$DIR/common/client/node_lifecycle_test.go: `.On("DisconnectAll")`
$DIR/common/client/node_lifecycle_test.go: `.Start(tests.Context(t))`
$DIR/common/client/node_lifecycle_test.go: `.Context(t)`
$DIR/common/client/node_lifecycle_test.go: `.AssertLogEventually(t, observedLogs, "Failed to verify chain ID for node")`
$DIR/common/client/node_lifecycle_test.go: `.AssertEventually(t, func() bool {
return node.State() == nodeStateUnreachable
})`
$DIR/common/client/node_lifecycle_test.go: `.State()`
$DIR/common/client/node_lifecycle_test.go: `.Run("on chain ID mismatch transitions to invalidChainID", func(t *testing.T) {
t.Parallel()
rpc := newMockNodeClient[types.ID, Head](t)
nodeChainID := types.NewIDFromInt(10)
rpcChainID := types.NewIDFromInt(11)
node := newNode(t, testNodeOpts{
rpc: rpc,
chainID: nodeChainID,
})
defer func() { assert.NoError(t, node.close()) }()
rpc.On("Dial", mock.Anything).Return(nil)
rpc.On("ChainID", mock.Anything).Return(rpcChainID, nil)
// disconnects all on transfer to unreachable
rpc.On("DisconnectAll")
err := node.Start(tests.Context(t))
assert.NoError(t, err)
tests.AssertEventually(t, func() bool {
return node.State() == nodeStateInvalidChainID
})
})`
$DIR/common/client/node_lifecycle_test.go: `.NewIDFromInt(10)`
$DIR/common/client/node_lifecycle_test.go: `.NewIDFromInt(11)`
$DIR/common/client/node_lifecycle_test.go: `.On("Dial", mock.Anything)`
$DIR/common/client/node_lifecycle_test.go: `.Return(nil)`
$DIR/common/client/node_lifecycle_test.go: `.On("ChainID", mock.Anything)`
$DIR/common/client/node_lifecycle_test.go: `.Return(rpcChainID, nil)`
$DIR/common/client/node_lifecycle_test.go: `.On("DisconnectAll")`
$DIR/common/client/node_lifecycle_test.go: `.Start(tests.Context(t))`
$DIR/common/client/node_lifecycle_test.go: `.Context(t)`
$DIR/common/client/node_lifecycle_test.go: `.AssertEventually(t, func() bool {
return node.State() == nodeStateInvalidChainID
})`
$DIR/common/client/node_lifecycle_test.go: `.State()`
$DIR/common/client/node_lifecycle_test.go: `.Run("if syncing verification fails, becomes unreachable", func(t *testing.T) {
t.Parallel()
rpc := newMockNodeClient[types.ID, Head](t)
nodeChainID := types.RandomID()
lggr, observedLogs := logger.TestObserved(t, zap.DebugLevel)
node := newNode(t, testNodeOpts{
rpc: rpc,
chainID: nodeChainID,
lggr: lggr,
config: testNodeConfig{nodeIsSyncingEnabled: true},
})
defer func() { assert.NoError(t, node.close()) }()
rpc.On("Dial", mock.Anything).Return(nil).Once()
rpc.On("ChainID", mock.Anything).Run(func(_ mock.Arguments) {
assert.Equal(t, nodeStateDialed, node.State())
}).Return(nodeChainID, nil).Once()
rpc.On("IsSyncing", mock.Anything).Return(false, errors.New("failed to check syncing status"))
// disconnects all on transfer to unreachable
rpc.On("DisconnectAll")
// fail to redial to stay in unreachable state
rpc.On("Dial", mock.Anything).Return(errors.New("failed to redial"))
err := node.Start(tests.Context(t))
assert.NoError(t, err)
tests.AssertLogEventually(t, observedLogs, "Unexpected error while verifying RPC node synchronization status")
tests.AssertEventually(t, func() bool {
return node.State() == nodeStateUnreachable
})
})`
$DIR/common/client/node_lifecycle_test.go: `.RandomID()`
$DIR/common/client/node_lifecycle_test.go: `.TestObserved(t, zap.DebugLevel)`
$DIR/common/client/node_lifecycle_test.go: `.On("Dial", mock.Anything)`
$DIR/common/client/node_lifecycle_test.go: `.Return(nil)`
$DIR/common/client/node_lifecycle_test.go: `.Once()`
$DIR/common/client/node_lifecycle_test.go: `.On("ChainID", mock.Anything)`
$DIR/common/client/node_lifecycle_test.go: `.Run(func(_ mock.Arguments) {
assert.Equal(t, nodeStateDialed, node.State())
})`
$DIR/common/client/node_lifecycle_test.go: `.Return(nodeChainID, nil)`
$DIR/common/client/node_lifecycle_test.go: `.Once()`
$DIR/common/client/node_lifecycle_test.go: `.On("IsSyncing", mock.Anything)`
$DIR/common/client/node_lifecycle_test.go: `.Return(false, errors.New("failed to check syncing status"))`
$DIR/common/client/node_lifecycle_test.go: `.New("failed to check syncing status")`
$DIR/common/client/node_lifecycle_test.go: `.On("DisconnectAll")`
$DIR/common/client/node_lifecycle_test.go: `.On("Dial", mock.Anything)`
$DIR/common/client/node_lifecycle_test.go: `.Return(errors.New("failed to redial"))`
$DIR/common/client/node_lifecycle_test.go: `.New("failed to redial")`
$DIR/common/client/node_lifecycle_test.go: `.Start(tests.Context(t))`
$DIR/common/client/node_lifecycle_test.go: `.Context(t)`
$DIR/common/client/node_lifecycle_test.go: `.AssertLogEventually(t, observedLogs, "Unexpected error while verifying RPC node synchronization status")`
$DIR/common/client/node_lifecycle_test.go: `.AssertEventually(t, func() bool {
return node.State() == nodeStateUnreachable
})`
$DIR/common/client/node_lifecycle_test.go: `.State()`
$DIR/common/client/node_lifecycle_test.go: `.Run("on isSyncing transitions to syncing", func(t *testing.T) {
t.Parallel()
rpc := newMockNodeClient[types.ID, Head](t)
nodeChainID := types.NewIDFromInt(10)
node := newNode(t, testNodeOpts{
rpc: rpc,
chainID: nodeChainID,
config: testNodeConfig{nodeIsSyncingEnabled: true},
})
defer func() { assert.NoError(t, node.close()) }()
rpc.On("Dial", mock.Anything).Return(nil)
rpc.On("ChainID", mock.Anything).Return(nodeChainID, nil)
rpc.On("IsSyncing", mock.Anything).Return(true, nil)
// disconnects all on transfer to unreachable
rpc.On("DisconnectAll")
err := node.Start(tests.Context(t))
assert.NoError(t, err)
tests.AssertEventually(t, func() bool {
return node.State() == nodeStateSyncing
})
})`
$DIR/common/client/node_lifecycle_test.go: `.NewIDFromInt(10)`
$DIR/common/client/node_lifecycle_test.go: `.On("Dial", mock.Anything)`
$DIR/common/client/node_lifecycle_test.go: `.Return(nil)`
$DIR/common/client/node_lifecycle_test.go: `.On("ChainID", mock.Anything)`
$DIR/common/client/node_lifecycle_test.go: `.Return(nodeChainID, nil)`
$DIR/common/client/node_lifecycle_test.go: `.On("IsSyncing", mock.Anything)`
$DIR/common/client/node_lifecycle_test.go: `.Return(true, nil)`
$DIR/common/client/node_lifecycle_test.go: `.On("DisconnectAll")`
$DIR/common/client/node_lifecycle_test.go: `.Start(tests.Context(t))`
$DIR/common/client/node_lifecycle_test.go: `.Context(t)`
$DIR/common/client/node_lifecycle_test.go: `.AssertEventually(t, func() bool {
return node.State() == nodeStateSyncing
})`
$DIR/common/client/node_lifecycle_test.go: `.State()`
$DIR/common/client/node_lifecycle_test.go: `.Run("on successful verification becomes alive", func(t *testing.T) {
t.Parallel()
rpc := newMockNodeClient[types.ID, Head](t)
nodeChainID := types.RandomID()
node := newNode(t, testNodeOpts{
rpc: rpc,
chainID: nodeChainID,
config: testNodeConfig{nodeIsSyncingEnabled: true},
})
defer func() { assert.NoError(t, node.close()) }()
rpc.On("Dial", mock.Anything).Return(nil)
rpc.On("ChainID", mock.Anything).Return(nodeChainID, nil)
rpc.On("IsSyncing", mock.Anything).Return(false, nil)
setupRPCForAliveLoop(t, rpc)
err := node.Start(tests.Context(t))
assert.NoError(t, err)
tests.AssertEventually(t, func() bool {
return node.State() == nodeStateAlive
})
})`
$DIR/common/client/node_lifecycle_test.go: `.RandomID()`
$DIR/common/client/node_lifecycle_test.go: `.On("Dial", mock.Anything)`
$DIR/common/client/node_lifecycle_test.go: `.Return(nil)`
$DIR/common/client/node_lifecycle_test.go: `.On("ChainID", mock.Anything)`
$DIR/common/client/node_lifecycle_test.go: `.Return(nodeChainID, nil)`
$DIR/common/client/node_lifecycle_test.go: `.On("IsSyncing", mock.Anything)`
$DIR/common/client/node_lifecycle_test.go: `.Return(false, nil)`
$DIR/common/client/node_lifecycle_test.go: `.Start(tests.Context(t))`
$DIR/common/client/node_lifecycle_test.go: `.Context(t)`
$DIR/common/client/node_lifecycle_test.go: `.AssertEventually(t, func() bool {
return node.State() == nodeStateAlive
})`
$DIR/common/client/node_lifecycle_test.go: `.State()`
$DIR/common/client/node_lifecycle_test.go: `.RandomID()`
$DIR/common/client/node_lifecycle_test.go: `.On("Dial", mock.Anything)`
$DIR/common/client/node_lifecycle_test.go: `.Return(nil)`
$DIR/common/client/node_lifecycle_test.go: `.On("ChainID", mock.Anything)`
$DIR/common/client/node_lifecycle_test.go: `.Return(nodeChainID, nil)`
$DIR/common/client/node_lifecycle_test.go: `.Start(tests.Context(t))`
$DIR/common/client/node_lifecycle_test.go: `.Context(t)`
$DIR/common/client/node_lifecycle_test.go: `.AssertEventually(t, func() bool {
return node.State() == nodeStateAlive
})`
$DIR/common/client/node_lifecycle_test.go: `.State()`
$DIR/common/client/node_lifecycle_test.go: `.Run("skip if nLiveNodes is not configured", func(t *testing.T) {
node := newTestNode(t, testNodeOpts{})
outOfSync, liveNodes := node.syncStatus(0, nil)
assert.Equal(t, false, outOfSync)
assert.Equal(t, 0, liveNodes)
})`
$DIR/common/client/node_lifecycle_test.go: `.syncStatus(0, nil)`
$DIR/common/client/node_lifecycle_test.go: `.Run("skip if syncThreshold is not configured", func(t *testing.T) {
node := newTestNode(t, testNodeOpts{})
node.nLiveNodes = func() (count int, blockNumber int64, totalDifficulty *big.Int) {
return
}
outOfSync, liveNodes := node.syncStatus(0, nil)
assert.Equal(t, false, outOfSync)
assert.Equal(t, 0, liveNodes)
})`
$DIR/common/client/node_lifecycle_test.go: `.syncStatus(0, nil)`
$DIR/common/client/node_lifecycle_test.go: `.Run("panics on invalid selection mode", func(t *testing.T) {
node := newTestNode(t, testNodeOpts{
config: testNodeConfig{syncThreshold: 1},
})
node.nLiveNodes = func() (count int, blockNumber int64, totalDifficulty *big.Int) {
return
}
assert.Panics(t, func() {
_, _ = node.syncStatus(0, nil)
})
})`
$DIR/common/client/node_lifecycle_test.go: `.Run("block height selection mode", func(t *testing.T) {
const syncThreshold = 10
const highestBlock = 1000
const nodesNum = 20
const totalDifficulty = 3000
testCases := []struct {
name string
blockNumber int64
outOfSync bool
}{
{
name: "below threshold",
blockNumber: highestBlock - syncThreshold - 1,
outOfSync: true,
},
{
name: "equal to threshold",
blockNumber: highestBlock - syncThreshold,
outOfSync: false,
},
{
name: "equal to highest block",
blockNumber: highestBlock,
outOfSync: false,
},
{
name: "higher than highest block",
blockNumber: highestBlock,
outOfSync: false,
},
}
for _, selectionMode := range []string{NodeSelectionModeHighestHead, NodeSelectionModeRoundRobin, NodeSelectionModePriorityLevel} {
node := newTestNode(t, testNodeOpts{
config: testNodeConfig{
syncThreshold: syncThreshold,
selectionMode: selectionMode,
},
})
node.nLiveNodes = func() (int, int64, *big.Int) {
return nodesNum, highestBlock, big.NewInt(totalDifficulty)
}
for _, td := range []int64{totalDifficulty - syncThreshold - 1, totalDifficulty - syncThreshold, totalDifficulty, totalDifficulty + 1} {
for _, testCase := range testCases {
t.Run(fmt.Sprintf("%s: SelectionModeVal: %s: total difficulty: %d", testCase.name, selectionMode, td), func(t *testing.T) {
outOfSync, liveNodes := node.syncStatus(testCase.blockNumber, big.NewInt(td))
assert.Equal(t, nodesNum, liveNodes)
assert.Equal(t, testCase.outOfSync, outOfSync)
})
}
}
}
})`
$DIR/common/client/node_lifecycle_test.go: `.NewInt(totalDifficulty)`
$DIR/common/client/node_lifecycle_test.go: `.Run(fmt.Sprintf("%s: SelectionModeVal: %s: total difficulty: %d", testCase.name, selectionMode, td), func(t *testing.T) {
outOfSync, liveNodes := node.syncStatus(testCase.blockNumber, big.NewInt(td))
assert.Equal(t, nodesNum, liveNodes)
assert.Equal(t, testCase.outOfSync, outOfSync)
})`
$DIR/common/client/node_lifecycle_test.go: `.Sprintf("%s: SelectionModeVal: %s: total difficulty: %d", testCase.name, selectionMode, td)`
$DIR/common/client/node_lifecycle_test.go: `.syncStatus(testCase.blockNumber, big.NewInt(td))`
$DIR/common/client/node_lifecycle_test.go: `.NewInt(td)`
$DIR/common/client/node_lifecycle_test.go: `.NewInt(totalDifficulty)`
$DIR/common/client/node_lifecycle_test.go: `.Run(fmt.Sprintf("%s: SelectionModeVal: %s: highest block: %d", testCase.name, NodeSelectionModeTotalDifficulty, hb), func(t *testing.T) {
outOfSync, liveNodes := node.syncStatus(hb, big.NewInt(testCase.totalDifficulty))
assert.Equal(t, nodesNum, liveNodes)
assert.Equal(t, testCase.outOfSync, outOfSync)
})`
$DIR/common/client/node_lifecycle_test.go: `.Sprintf("%s: SelectionModeVal: %s: highest block: %d", testCase.name, NodeSelectionModeTotalDifficulty, hb)`
$DIR/common/client/node_lifecycle_test.go: `.syncStatus(hb, big.NewInt(testCase.totalDifficulty))`
$DIR/common/client/node_lifecycle_test.go: `.NewInt(testCase.totalDifficulty)`
$DIR/common/client/node_lifecycle_test.go: `.rpc.On("Close")`
$DIR/common/client/node_lifecycle_test.go: `.Return(nil)`
$DIR/common/client/node_lifecycle_test.go: `.Once()`
$DIR/common/client/node_lifecycle_test.go: `.rpc.On("DisconnectAll")`
$DIR/common/client/node_lifecycle_test.go: `.setState(nodeStateDialed)`
$DIR/common/client/node_lifecycle_test.go: `.Run("returns on closed", func(t *testing.T) {
t.Parallel()
node := newTestNode(t, testNodeOpts{})
node.setState(nodeStateClosed)
node.wg.Add(1)
node.syncingLoop()
})`
$DIR/common/client/node_lifecycle_test.go: `.setState(nodeStateClosed)`
$DIR/common/client/node_lifecycle_test.go: `.wg.Add(1)`
$DIR/common/client/node_lifecycle_test.go: `.syncingLoop()`
$DIR/common/client/node_lifecycle_test.go: `.Run("on invalid dial becomes unreachable", func(t *testing.T) {
t.Parallel()
rpc := newMockNodeClient[types.ID, Head](t)
nodeChainID := types.RandomID()
node := newDialedNode(t, testNodeOpts{
rpc: rpc,
chainID: nodeChainID,
})
defer func() { assert.NoError(t, node.close()) }()
rpc.On("Dial", mock.Anything).Return(errors.New("failed to dial"))
node.declareSyncing()
tests.AssertEventually(t, func() bool {
return node.State() == nodeStateUnreachable
})
})`
$DIR/common/client/node_lifecycle_test.go: `.RandomID()`
$DIR/common/client/node_lifecycle_test.go: `.On("Dial", mock.Anything)`
$DIR/common/client/node_lifecycle_test.go: `.Return(errors.New("failed to dial"))`
$DIR/common/client/node_lifecycle_test.go: `.New("failed to dial")`
$DIR/common/client/node_lifecycle_test.go: `.declareSyncing()`
$DIR/common/client/node_lifecycle_test.go: `.AssertEventually(t, func() bool {
return node.State() == nodeStateUnreachable
})`
$DIR/common/client/node_lifecycle_test.go: `.State()`
$DIR/common/client/node_lifecycle_test.go: `.Run("on failed chainID call becomes unreachable", func(t *testing.T) {
t.Parallel()
rpc := newMockNodeClient[types.ID, Head](t)
nodeChainID := types.RandomID()
lggr, observedLogs := logger.TestObserved(t, zap.DebugLevel)
node := newDialedNode(t, testNodeOpts{
rpc: rpc,
chainID: nodeChainID,
lggr: lggr,
})
defer func() { assert.NoError(t, node.close()) }()
rpc.On("ChainID", mock.Anything).Return(nodeChainID, errors.New("failed to get chain id"))
// once for syncing and maybe another one for unreachable
rpc.On("Dial", mock.Anything).Return(nil).Once()
rpc.On("Dial", mock.Anything).Return(errors.New("failed to dial")).Maybe()
node.declareSyncing()
tests.AssertLogEventually(t, observedLogs, "Failed to verify chain ID for node")
tests.AssertEventually(t, func() bool {
return node.State() == nodeStateUnreachable
})
})`
$DIR/common/client/node_lifecycle_test.go: `.RandomID()`
$DIR/common/client/node_lifecycle_test.go: `.TestObserved(t, zap.DebugLevel)`
$DIR/common/client/node_lifecycle_test.go: `.On("ChainID", mock.Anything)`
$DIR/common/client/node_lifecycle_test.go: `.Return(nodeChainID, errors.New("failed to get chain id"))`
$DIR/common/client/node_lifecycle_test.go: `.New("failed to get chain id")`
$DIR/common/client/node_lifecycle_test.go: `.On("Dial", mock.Anything)`
$DIR/common/client/node_lifecycle_test.go: `.Return(nil)`
$DIR/common/client/node_lifecycle_test.go: `.Once()`
$DIR/common/client/node_lifecycle_test.go: `.On("Dial", mock.Anything)`
$DIR/common/client/node_lifecycle_test.go: `.Return(errors.New("failed to dial"))`
$DIR/common/client/node_lifecycle_test.go: `.New("failed to dial")`
$DIR/common/client/node_lifecycle_test.go: `.Maybe()`
$DIR/common/client/node_lifecycle_test.go: `.declareSyncing()`
$DIR/common/client/node_lifecycle_test.go: `.AssertLogEventually(t, observedLogs, "Failed to verify chain ID for node")`
$DIR/common/client/node_lifecycle_test.go: `.AssertEventually(t, func() bool {
return node.State() == nodeStateUnreachable
})`
$DIR/common/client/node_lifecycle_test.go: `.State()`
$DIR/common/client/node_lifecycle_test.go: `.Run("on chainID mismatch transitions to invalidChainID", func(t *testing.T) {
t.Parallel()
rpc := newMockNodeClient[types.ID, Head](t)
nodeChainID := types.NewIDFromInt(10)
rpcChainID := types.NewIDFromInt(11)
lggr, observedLogs := logger.TestObserved(t, zap.DebugLevel)
node := newDialedNode(t, testNodeOpts{
rpc: rpc,
chainID: nodeChainID,
lggr: lggr,
})
defer func() { assert.NoError(t, node.close()) }()
rpc.On("Dial", mock.Anything).Return(nil).Twice()
rpc.On("ChainID", mock.Anything).Return(rpcChainID, nil)
node.declareSyncing()
tests.AssertLogCountEventually(t, observedLogs, "Failed to verify RPC node; remote endpoint returned the wrong chain ID", 2)
tests.AssertEventually(t, func() bool {
return node.State() == nodeStateInvalidChainID
})
})`
$DIR/common/client/node_lifecycle_test.go: `.NewIDFromInt(10)`
$DIR/common/client/node_lifecycle_test.go: `.NewIDFromInt(11)`
$DIR/common/client/node_lifecycle_test.go: `.TestObserved(t, zap.DebugLevel)`
$DIR/common/client/node_lifecycle_test.go: `.On("Dial", mock.Anything)`
$DIR/common/client/node_lifecycle_test.go: `.Return(nil)`
$DIR/common/client/node_lifecycle_test.go: `.Twice()`
$DIR/common/client/node_lifecycle_test.go: `.On("ChainID", mock.Anything)`
$DIR/common/client/node_lifecycle_test.go: `.Return(rpcChainID, nil)`
$DIR/common/client/node_lifecycle_test.go: `.declareSyncing()`
$DIR/common/client/node_lifecycle_test.go: `.AssertLogCountEventually(t, observedLogs, "Failed to verify RPC node; remote endpoint returned the wrong chain ID", 2)`
$DIR/common/client/node_lifecycle_test.go: `.AssertEventually(t, func() bool {
return node.State() == nodeStateInvalidChainID
})`
$DIR/common/client/node_lifecycle_test.go: `.State()`
$DIR/common/client/node_lifecycle_test.go: `.Run("on failed Syncing check - becomes unreachable", func(t *testing.T) {
t.Parallel()
rpc := newMockNodeClient[types.ID, Head](t)
nodeChainID := types.RandomID()
lggr, observedLogs := logger.TestObserved(t, zap.DebugLevel)
node := newDialedNode(t, testNodeOpts{
rpc: rpc,
chainID: nodeChainID,
lggr: lggr,
})
defer func() { assert.NoError(t, node.close()) }()
rpc.On("ChainID", mock.Anything).Return(nodeChainID, nil).Once()
// first one is needed to enter internal loop
rpc.On("IsSyncing", mock.Anything).Return(true, nil).Once()
rpc.On("IsSyncing", mock.Anything).Return(false, errors.New("failed to check if syncing")).Once()
rpc.On("Dial", mock.Anything).Return(nil).Once()
rpc.On("Dial", mock.Anything).Return(errors.New("failed to dial")).Maybe()
node.declareSyncing()
tests.AssertLogEventually(t, observedLogs, "Unexpected error while verifying RPC node synchronization status")
tests.AssertEventually(t, func() bool {
return node.State() == nodeStateUnreachable
})
})`
$DIR/common/client/node_lifecycle_test.go: `.RandomID()`
$DIR/common/client/node_lifecycle_test.go: `.TestObserved(t, zap.DebugLevel)`
$DIR/common/client/node_lifecycle_test.go: `.On("ChainID", mock.Anything)`
$DIR/common/client/node_lifecycle_test.go: `.Return(nodeChainID, nil)`
$DIR/common/client/node_lifecycle_test.go: `.Once()`
$DIR/common/client/node_lifecycle_test.go: `.On("IsSyncing", mock.Anything)`
$DIR/common/client/node_lifecycle_test.go: `.Return(true, nil)`
$DIR/common/client/node_lifecycle_test.go: `.Once()`
$DIR/common/client/node_lifecycle_test.go: `.On("IsSyncing", mock.Anything)`
$DIR/common/client/node_lifecycle_test.go: `.Return(false, errors.New("failed to check if syncing"))`
$DIR/common/client/node_lifecycle_test.go: `.New("failed to check if syncing")`
$DIR/common/client/node_lifecycle_test.go: `.Once()`
$DIR/common/client/node_lifecycle_test.go: `.On("Dial", mock.Anything)`
$DIR/common/client/node_lifecycle_test.go: `.Return(nil)`
$DIR/common/client/node_lifecycle_test.go: `.Once()`
$DIR/common/client/node_lifecycle_test.go: `.On("Dial", mock.Anything)`
$DIR/common/client/node_lifecycle_test.go: `.Return(errors.New("failed to dial"))`
$DIR/common/client/node_lifecycle_test.go: `.New("failed to dial")`
$DIR/common/client/node_lifecycle_test.go: `.Maybe()`
$DIR/common/client/node_lifecycle_test.go: `.declareSyncing()`
$DIR/common/client/node_lifecycle_test.go: `.AssertLogEventually(t, observedLogs, "Unexpected error while verifying RPC node synchronization status")`
$DIR/common/client/node_lifecycle_test.go: `.AssertEventually(t, func() bool {
return node.State() == nodeStateUnreachable
})`
$DIR/common/client/node_lifecycle_test.go: `.State()`
$DIR/common/client/node_lifecycle_test.go: `.Run("on IsSyncing - keeps trying", func(t *testing.T) {
t.Parallel()
rpc := newMockNodeClient[types.ID, Head](t)
nodeChainID := types.RandomID()
lggr, observedLogs := logger.TestObserved(t, zap.DebugLevel)
node := newDialedNode(t, testNodeOpts{
rpc: rpc,
chainID: nodeChainID,
lggr: lggr,
})
defer func() { assert.NoError(t, node.close()) }()
rpc.On("ChainID", mock.Anything).Return(nodeChainID, nil).Once()
rpc.On("IsSyncing", mock.Anything).Return(true, nil)
rpc.On("Dial", mock.Anything).Return(nil).Once()
node.declareSyncing()
tests.AssertLogCountEventually(t, observedLogs, "Verification failed: Node is syncing", 2)
tests.AssertEventually(t, func() bool {
return node.State() == nodeStateSyncing
})
})`
$DIR/common/client/node_lifecycle_test.go: `.RandomID()`
$DIR/common/client/node_lifecycle_test.go: `.TestObserved(t, zap.DebugLevel)`
$DIR/common/client/node_lifecycle_test.go: `.On("ChainID", mock.Anything)`
$DIR/common/client/node_lifecycle_test.go: `.Return(nodeChainID, nil)`
$DIR/common/client/node_lifecycle_test.go: `.Once()`
$DIR/common/client/node_lifecycle_test.go: `.On("IsSyncing", mock.Anything)`
$DIR/common/client/node_lifecycle_test.go: `.Return(true, nil)`
$DIR/common/client/node_lifecycle_test.go: `.On("Dial", mock.Anything)`
$DIR/common/client/node_lifecycle_test.go: `.Return(nil)`
$DIR/common/client/node_lifecycle_test.go: `.Once()`
$DIR/common/client/node_lifecycle_test.go: `.declareSyncing()`
$DIR/common/client/node_lifecycle_test.go: `.AssertLogCountEventually(t, observedLogs, "Verification failed: Node is syncing", 2)`
$DIR/common/client/node_lifecycle_test.go: `.AssertEventually(t, func() bool {
return node.State() == nodeStateSyncing
})`
$DIR/common/client/node_lifecycle_test.go: `.State()`
$DIR/common/client/node_lifecycle_test.go: `.RandomID()`
$DIR/common/client/node_lifecycle_test.go: `.On("Dial", mock.Anything)`
$DIR/common/client/node_lifecycle_test.go: `.Return(nil)`
$DIR/common/client/node_lifecycle_test.go: `.Once()`
$DIR/common/client/node_lifecycle_test.go: `.On("ChainID", mock.Anything)`
$DIR/common/client/node_lifecycle_test.go: `.Return(nodeChainID, nil)`
$DIR/common/client/node_lifecycle_test.go: `.Once()`
$DIR/common/client/node_lifecycle_test.go: `.On("IsSyncing", mock.Anything)`
$DIR/common/client/node_lifecycle_test.go: `.Return(true, nil)`
$DIR/common/client/node_lifecycle_test.go: `.Once()`
$DIR/common/client/node_lifecycle_test.go: `.On("IsSyncing", mock.Anything)`
$DIR/common/client/node_lifecycle_test.go: `.Return(false, nil)`
$DIR/common/client/node_lifecycle_test.go: `.Once()`
$DIR/common/client/node_lifecycle_test.go: `.declareSyncing()`
$DIR/common/client/node_lifecycle_test.go: `.AssertEventually(t, func() bool {
return node.State() == nodeStateAlive
})`
$DIR/common/client/node_lifecycle_test.go: `.State()`
$DIR/common/client/node_selector_highest_head_test.go: `node.On("StateAndLatest").Return(nodeStateOutOfSync, int64(-1), nil)`
$DIR/common/client/node_selector_highest_head_test.go: `node.On("StateAndLatest").Return(nodeStateAlive, int64(1), nil)`
$DIR/common/client/node_selector_highest_head_test.go: `node.On("StateAndLatest").Return(nodeStateAlive, int64(2), nil)`
$DIR/common/client/node_selector_highest_head_test.go: `node.On("Order").Maybe().Return(int32(1))`
$DIR/common/client/node_selector_highest_head_test.go: `nodes = append(nodes, node)`
$DIR/common/client/node_selector_highest_head_test.go: `t.Run("stick to the same node", func(t *testing.T) {
node := newMockNode[types.ID, Head, nodeClient](t)
// fourth node is alive, LatestReceivedBlockNumber = 2 (same as 3rd)
node.On("StateAndLatest").Return(nodeStateAlive, int64(2), nil)
node.On("Order").Return(int32(1))
nodes = append(nodes, node)
selector := newNodeSelector(NodeSelectionModeHighestHead, nodes)
assert.Same(t, nodes[2], selector.Select())
})`
$DIR/common/client/node_selector_highest_head_test.go: `node.On("StateAndLatest").Return(nodeStateAlive, int64(2), nil)`
$DIR/common/client/node_selector_highest_head_test.go: `node.On("Order").Return(int32(1))`
$DIR/common/client/node_selector_highest_head_test.go: `nodes = append(nodes, node)`
$DIR/common/client/node_selector_highest_head_test.go: `t.Run("another best node", func(t *testing.T) {
node := newMockNode[types.ID, Head, nodeClient](t)
// fifth node is alive, LatestReceivedBlockNumber = 3 (better than 3rd and 4th)
node.On("StateAndLatest").Return(nodeStateAlive, int64(3), nil)
node.On("Order").Return(int32(1))
nodes = append(nodes, node)
selector := newNodeSelector(NodeSelectionModeHighestHead, nodes)
assert.Same(t, nodes[4], selector.Select())
})`
$DIR/common/client/node_selector_highest_head_test.go: `node.On("StateAndLatest").Return(nodeStateAlive, int64(3), nil)`
$DIR/common/client/node_selector_highest_head_test.go: `node.On("Order").Return(int32(1))`
$DIR/common/client/node_selector_highest_head_test.go: `nodes = append(nodes, node)`
$DIR/common/client/node_selector_highest_head_test.go: `node1.On("StateAndLatest").Return(nodeStateAlive, int64(-1), nil)`
$DIR/common/client/node_selector_highest_head_test.go: `node1.On("Order").Return(int32(1))`
$DIR/common/client/node_selector_highest_head_test.go: `node2.On("StateAndLatest").Return(nodeStateAlive, int64(-1), nil)`
$DIR/common/client/node_selector_highest_head_test.go: `node2.On("Order").Return(int32(1))`
$DIR/common/client/node_selector_highest_head_test.go: `node.On("StateAndLatest").Return(nodeStateOutOfSync, int64(-1), nil)`
$DIR/common/client/node_selector_highest_head_test.go: `node.On("StateAndLatest").Return(nodeStateUnreachable, int64(1), nil)`
$DIR/common/client/node_selector_highest_head_test.go: `nodes = append(nodes, node)`
$DIR/common/client/node_selector_highest_head_test.go: `t.Run("same head and order", func(t *testing.T) {
for i := 0; i < 3; i++ {
node := newMockNode[types.ID, Head, nodeClient](t)
node.On("StateAndLatest").Return(nodeStateAlive, int64(1), nil)
node.On("Order").Return(int32(2))
nodes = append(nodes, node)
}
selector := newNodeSelector(NodeSelectionModeHighestHead, nodes)
//Should select the first node because all things are equal
assert.Same(t, nodes[0], selector.Select())
})`
$DIR/common/client/node_selector_highest_head_test.go: `node.On("StateAndLatest").Return(nodeStateAlive, int64(1), nil)`
$DIR/common/client/node_selector_highest_head_test.go: `node.On("Order").Return(int32(2))`
$DIR/common/client/node_selector_highest_head_test.go: `nodes = append(nodes, node)`
$DIR/common/client/node_selector_highest_head_test.go: `t.Run("same head but different order", func(t *testing.T) {
node1 := newMockNode[types.ID, Head, nodeClient](t)
node1.On("StateAndLatest").Return(nodeStateAlive, int64(3), nil)
node1.On("Order").Return(int32(3))
node2 := newMockNode[types.ID, Head, nodeClient](t)
node2.On("StateAndLatest").Return(nodeStateAlive, int64(3), nil)
node2.On("Order").Return(int32(1))
node3 := newMockNode[types.ID, Head, nodeClient](t)
node3.On("StateAndLatest").Return(nodeStateAlive, int64(3), nil)
node3.On("Order").Return(int32(2))
nodes := []Node[types.ID, Head, nodeClient]{node1, node2, node3}
selector := newNodeSelector(NodeSelectionModeHighestHead, nodes)
//Should select the second node as it has the highest priority
assert.Same(t, nodes[1], selector.Select())
})`
$DIR/common/client/node_selector_highest_head_test.go: `node1.On("StateAndLatest").Return(nodeStateAlive, int64(3), nil)`
$DIR/common/client/node_selector_highest_head_test.go: `node1.On("Order").Return(int32(3))`
$DIR/common/client/node_selector_highest_head_test.go: `node2.On("StateAndLatest").Return(nodeStateAlive, int64(3), nil)`
$DIR/common/client/node_selector_highest_head_test.go: `node2.On("Order").Return(int32(1))`
$DIR/common/client/node_selector_highest_head_test.go: `node3.On("StateAndLatest").Return(nodeStateAlive, int64(3), nil)`
$DIR/common/client/node_selector_highest_head_test.go: `node3.On("Order").Return(int32(2))`
$DIR/common/client/node_selector_highest_head_test.go: `t.Run("different head but same order", func(t *testing.T) {
node1 := newMockNode[types.ID, Head, nodeClient](t)
node1.On("StateAndLatest").Return(nodeStateAlive, int64(1), nil)
node1.On("Order").Maybe().Return(int32(3))
node2 := newMockNode[types.ID, Head, nodeClient](t)
node2.On("StateAndLatest").Return(nodeStateAlive, int64(2), nil)
node2.On("Order").Maybe().Return(int32(3))
node3 := newMockNode[types.ID, Head, nodeClient](t)
node3.On("StateAndLatest").Return(nodeStateAlive, int64(3), nil)
node3.On("Order").Return(int32(3))
nodes := []Node[types.ID, Head, nodeClient]{node1, node2, node3}
selector := newNodeSelector(NodeSelectionModeHighestHead, nodes)
//Should select the third node as it has the highest head
assert.Same(t, nodes[2], selector.Select())
})`
$DIR/common/client/node_selector_highest_head_test.go: `node1.On("StateAndLatest").Return(nodeStateAlive, int64(1), nil)`
$DIR/common/client/node_selector_highest_head_test.go: `node1.On("Order").Maybe().Return(int32(3))`
$DIR/common/client/node_selector_highest_head_test.go: `node2.On("StateAndLatest").Return(nodeStateAlive, int64(2), nil)`
$DIR/common/client/node_selector_highest_head_test.go: `node2.On("Order").Maybe().Return(int32(3))`
$DIR/common/client/node_selector_highest_head_test.go: `node3.On("StateAndLatest").Return(nodeStateAlive, int64(3), nil)`
$DIR/common/client/node_selector_highest_head_test.go: `node3.On("Order").Return(int32(3))`
$DIR/common/client/node_selector_highest_head_test.go: `node1.On("StateAndLatest").Return(nodeStateAlive, int64(10), nil)`
$DIR/common/client/node_selector_highest_head_test.go: `node1.On("Order").Maybe().Return(int32(3))`
$DIR/common/client/node_selector_highest_head_test.go: `node2.On("StateAndLatest").Return(nodeStateAlive, int64(11), nil)`
$DIR/common/client/node_selector_highest_head_test.go: `node2.On("Order").Maybe().Return(int32(4))`
$DIR/common/client/node_selector_highest_head_test.go: `node3.On("StateAndLatest").Return(nodeStateAlive, int64(11), nil)`
$DIR/common/client/node_selector_highest_head_test.go: `node3.On("Order").Maybe().Return(int32(3))`
$DIR/common/client/node_selector_highest_head_test.go: `node4.On("StateAndLatest").Return(nodeStateAlive, int64(10), nil)`
$DIR/common/client/node_selector_highest_head_test.go: `node4.On("Order").Maybe().Return(int32(1))`
$DIR/common/client/node_selector_highest_head_test.go: `.Name()`
$DIR/common/client/node_selector_highest_head_test.go: `.On("StateAndLatest")`
$DIR/common/client/node_selector_highest_head_test.go: `.Return(nodeStateOutOfSync, int64(-1), nil)`
$DIR/common/client/node_selector_highest_head_test.go: `.On("StateAndLatest")`
$DIR/common/client/node_selector_highest_head_test.go: `.Return(nodeStateAlive, int64(1), nil)`
$DIR/common/client/node_selector_highest_head_test.go: `.On("StateAndLatest")`
$DIR/common/client/node_selector_highest_head_test.go: `.Return(nodeStateAlive, int64(2), nil)`
$DIR/common/client/node_selector_highest_head_test.go: `.On("Order")`
$DIR/common/client/node_selector_highest_head_test.go: `.Maybe()`
$DIR/common/client/node_selector_highest_head_test.go: `.Return(int32(1))`
$DIR/common/client/node_selector_highest_head_test.go: `.Run("stick to the same node", func(t *testing.T) {
node := newMockNode[types.ID, Head, nodeClient](t)
// fourth node is alive, LatestReceivedBlockNumber = 2 (same as 3rd)
node.On("StateAndLatest").Return(nodeStateAlive, int64(2), nil)
node.On("Order").Return(int32(1))
nodes = append(nodes, node)
selector := newNodeSelector(NodeSelectionModeHighestHead, nodes)
assert.Same(t, nodes[2], selector.Select())
})`
$DIR/common/client/node_selector_highest_head_test.go: `.On("StateAndLatest")`
$DIR/common/client/node_selector_highest_head_test.go: `.Return(nodeStateAlive, int64(2), nil)`
$DIR/common/client/node_selector_highest_head_test.go: `.On("Order")`
$DIR/common/client/node_selector_highest_head_test.go: `.Return(int32(1))`
$DIR/common/client/node_selector_highest_head_test.go: `.Run("another best node", func(t *testing.T) {
node := newMockNode[types.ID, Head, nodeClient](t)
// fifth node is alive, LatestReceivedBlockNumber = 3 (better than 3rd and 4th)
node.On("StateAndLatest").Return(nodeStateAlive, int64(3), nil)
node.On("Order").Return(int32(1))
nodes = append(nodes, node)
selector := newNodeSelector(NodeSelectionModeHighestHead, nodes)
assert.Same(t, nodes[4], selector.Select())
})`
$DIR/common/client/node_selector_highest_head_test.go: `.On("StateAndLatest")`
$DIR/common/client/node_selector_highest_head_test.go: `.Return(nodeStateAlive, int64(3), nil)`
$DIR/common/client/node_selector_highest_head_test.go: `.On("Order")`
$DIR/common/client/node_selector_highest_head_test.go: `.Return(int32(1))`
$DIR/common/client/node_selector_highest_head_test.go: `.On("StateAndLatest")`
$DIR/common/client/node_selector_highest_head_test.go: `.Return(nodeStateAlive, int64(-1), nil)`
$DIR/common/client/node_selector_highest_head_test.go: `.On("Order")`
$DIR/common/client/node_selector_highest_head_test.go: `.Return(int32(1))`
$DIR/common/client/node_selector_highest_head_test.go: `.On("StateAndLatest")`
$DIR/common/client/node_selector_highest_head_test.go: `.Return(nodeStateAlive, int64(-1), nil)`
$DIR/common/client/node_selector_highest_head_test.go: `.On("Order")`
$DIR/common/client/node_selector_highest_head_test.go: `.Return(int32(1))`
$DIR/common/client/node_selector_highest_head_test.go: `.On("StateAndLatest")`
$DIR/common/client/node_selector_highest_head_test.go: `.Return(nodeStateOutOfSync, int64(-1), nil)`
$DIR/common/client/node_selector_highest_head_test.go: `.On("StateAndLatest")`
$DIR/common/client/node_selector_highest_head_test.go: `.Return(nodeStateUnreachable, int64(1), nil)`
$DIR/common/client/node_selector_highest_head_test.go: `.Select()`
$DIR/common/client/node_selector_highest_head_test.go: `.Run("same head and order", func(t *testing.T) {
for i := 0; i < 3; i++ {
node := newMockNode[types.ID, Head, nodeClient](t)
node.On("StateAndLatest").Return(nodeStateAlive, int64(1), nil)
node.On("Order").Return(int32(2))
nodes = append(nodes, node)
}
selector := newNodeSelector(NodeSelectionModeHighestHead, nodes)
//Should select the first node because all things are equal
assert.Same(t, nodes[0], selector.Select())
})`
$DIR/common/client/node_selector_highest_head_test.go: `.On("StateAndLatest")`
$DIR/common/client/node_selector_highest_head_test.go: `.Return(nodeStateAlive, int64(1), nil)`
$DIR/common/client/node_selector_highest_head_test.go: `.On("Order")`
$DIR/common/client/node_selector_highest_head_test.go: `.Return(int32(2))`
$DIR/common/client/node_selector_highest_head_test.go: `.Run("same head but different order", func(t *testing.T) {
node1 := newMockNode[types.ID, Head, nodeClient](t)
node1.On("StateAndLatest").Return(nodeStateAlive, int64(3), nil)
node1.On("Order").Return(int32(3))
node2 := newMockNode[types.ID, Head, nodeClient](t)
node2.On("StateAndLatest").Return(nodeStateAlive, int64(3), nil)
node2.On("Order").Return(int32(1))
node3 := newMockNode[types.ID, Head, nodeClient](t)
node3.On("StateAndLatest").Return(nodeStateAlive, int64(3), nil)
node3.On("Order").Return(int32(2))
nodes := []Node[types.ID, Head, nodeClient]{node1, node2, node3}
selector := newNodeSelector(NodeSelectionModeHighestHead, nodes)
//Should select the second node as it has the highest priority
assert.Same(t, nodes[1], selector.Select())
})`
$DIR/common/client/node_selector_highest_head_test.go: `.On("StateAndLatest")`
$DIR/common/client/node_selector_highest_head_test.go: `.Return(nodeStateAlive, int64(3), nil)`
$DIR/common/client/node_selector_highest_head_test.go: `.On("Order")`
$DIR/common/client/node_selector_highest_head_test.go: `.Return(int32(3))`
$DIR/common/client/node_selector_highest_head_test.go: `.On("StateAndLatest")`
$DIR/common/client/node_selector_highest_head_test.go: `.Return(nodeStateAlive, int64(3), nil)`
$DIR/common/client/node_selector_highest_head_test.go: `.On("Order")`
$DIR/common/client/node_selector_highest_head_test.go: `.Return(int32(1))`
$DIR/common/client/node_selector_highest_head_test.go: `.On("StateAndLatest")`
$DIR/common/client/node_selector_highest_head_test.go: `.Return(nodeStateAlive, int64(3), nil)`
$DIR/common/client/node_selector_highest_head_test.go: `.On("Order")`
$DIR/common/client/node_selector_highest_head_test.go: `.Return(int32(2))`
$DIR/common/client/node_selector_highest_head_test.go: `.Run("different head but same order", func(t *testing.T) {
node1 := newMockNode[types.ID, Head, nodeClient](t)
node1.On("StateAndLatest").Return(nodeStateAlive, int64(1), nil)
node1.On("Order").Maybe().Return(int32(3))
node2 := newMockNode[types.ID, Head, nodeClient](t)
node2.On("StateAndLatest").Return(nodeStateAlive, int64(2), nil)
node2.On("Order").Maybe().Return(int32(3))
node3 := newMockNode[types.ID, Head, nodeClient](t)
node3.On("StateAndLatest").Return(nodeStateAlive, int64(3), nil)
node3.On("Order").Return(int32(3))
nodes := []Node[types.ID, Head, nodeClient]{node1, node2, node3}
selector := newNodeSelector(NodeSelectionModeHighestHead, nodes)
//Should select the third node as it has the highest head
assert.Same(t, nodes[2], selector.Select())
})`
$DIR/common/client/node_selector_highest_head_test.go: `.On("StateAndLatest")`
$DIR/common/client/node_selector_highest_head_test.go: `.Return(nodeStateAlive, int64(1), nil)`
$DIR/common/client/node_selector_highest_head_test.go: `.On("Order")`
$DIR/common/client/node_selector_highest_head_test.go: `.Maybe()`
$DIR/common/client/node_selector_highest_head_test.go: `.Return(int32(3))`
$DIR/common/client/node_selector_highest_head_test.go: `.On("StateAndLatest")`
$DIR/common/client/node_selector_highest_head_test.go: `.Return(nodeStateAlive, int64(2), nil)`
$DIR/common/client/node_selector_highest_head_test.go: `.On("Order")`
$DIR/common/client/node_selector_highest_head_test.go: `.Maybe()`
$DIR/common/client/node_selector_highest_head_test.go: `.Return(int32(3))`
$DIR/common/client/node_selector_highest_head_test.go: `.On("StateAndLatest")`
$DIR/common/client/node_selector_highest_head_test.go: `.Return(nodeStateAlive, int64(3), nil)`
$DIR/common/client/node_selector_highest_head_test.go: `.On("Order")`
$DIR/common/client/node_selector_highest_head_test.go: `.Return(int32(3))`
$DIR/common/client/node_selector_highest_head_test.go: `.On("StateAndLatest")`
$DIR/common/client/node_selector_highest_head_test.go: `.Return(nodeStateAlive, int64(10), nil)`
$DIR/common/client/node_selector_highest_head_test.go: `.On("Order")`
$DIR/common/client/node_selector_highest_head_test.go: `.Maybe()`
$DIR/common/client/node_selector_highest_head_test.go: `.Return(int32(3))`
$DIR/common/client/node_selector_highest_head_test.go: `.On("StateAndLatest")`
$DIR/common/client/node_selector_highest_head_test.go: `.Return(nodeStateAlive, int64(11), nil)`
$DIR/common/client/node_selector_highest_head_test.go: `.On("Order")`
$DIR/common/client/node_selector_highest_head_test.go: `.Maybe()`
$DIR/common/client/node_selector_highest_head_test.go: `.Return(int32(4))`
$DIR/common/client/node_selector_highest_head_test.go: `.On("StateAndLatest")`
$DIR/common/client/node_selector_highest_head_test.go: `.Return(nodeStateAlive, int64(11), nil)`
$DIR/common/client/node_selector_highest_head_test.go: `.On("Order")`
$DIR/common/client/node_selector_highest_head_test.go: `.Maybe()`
$DIR/common/client/node_selector_highest_head_test.go: `.Return(int32(3))`
$DIR/common/client/node_selector_highest_head_test.go: `.On("StateAndLatest")`
$DIR/common/client/node_selector_highest_head_test.go: `.Return(nodeStateAlive, int64(10), nil)`
$DIR/common/client/node_selector_highest_head_test.go: `.On("Order")`
$DIR/common/client/node_selector_highest_head_test.go: `.Maybe()`
$DIR/common/client/node_selector_highest_head_test.go: `.Return(int32(1))`
$DIR/common/client/node_selector_priority_level_test.go: `t.Run(tc.name, func(t *testing.T) {
var nodes []Node[types.ID, Head, nodeClient]
for _, tn := range tc.nodes {
node := newMockNode[types.ID, Head, nodeClient](t)
node.On("State").Return(tn.state)
node.On("Order").Return(tn.order)
nodes = append(nodes, node)
}
selector := newNodeSelector(NodeSelectionModePriorityLevel, nodes)
for _, idx := range tc.expect {
if idx >= len(nodes) {
t.Fatalf("Invalid node index %d in test case '%s'", idx, tc.name)
}
assert.Same(t, nodes[idx], selector.Select())
}
// Check for nil selection if expected slice is empty
if len(tc.expect) == 0 {
assert.Nil(t, selector.Select())
}
})`
$DIR/common/client/node_selector_priority_level_test.go: `node.On("State").Return(tn.state)`
$DIR/common/client/node_selector_priority_level_test.go: `node.On("Order").Return(tn.order)`
$DIR/common/client/node_selector_priority_level_test.go: `nodes = append(nodes, node)`
$DIR/common/client/node_selector_priority_level_test.go: `.Name()`
$DIR/common/client/node_selector_priority_level_test.go: `.Run(tc.name, func(t *testing.T) {
var nodes []Node[types.ID, Head, nodeClient]
for _, tn := range tc.nodes {
node := newMockNode[types.ID, Head, nodeClient](t)
node.On("State").Return(tn.state)
node.On("Order").Return(tn.order)
nodes = append(nodes, node)
}
selector := newNodeSelector(NodeSelectionModePriorityLevel, nodes)
for _, idx := range tc.expect {
if idx >= len(nodes) {
t.Fatalf("Invalid node index %d in test case '%s'", idx, tc.name)
}
assert.Same(t, nodes[idx], selector.Select())
}
// Check for nil selection if expected slice is empty
if len(tc.expect) == 0 {
assert.Nil(t, selector.Select())
}
})`
$DIR/common/client/node_selector_priority_level_test.go: `.On("State")`
$DIR/common/client/node_selector_priority_level_test.go: `.Return(tn.state)`
$DIR/common/client/node_selector_priority_level_test.go: `.On("Order")`
$DIR/common/client/node_selector_priority_level_test.go: `.Return(tn.order)`
$DIR/common/client/node_selector_round_robin_test.go: `node.On("State").Return(nodeStateOutOfSync)`
$DIR/common/client/node_selector_round_robin_test.go: `node.On("State").Return(nodeStateAlive)`
$DIR/common/client/node_selector_round_robin_test.go: `nodes = append(nodes, node)`
$DIR/common/client/node_selector_round_robin_test.go: `node.On("State").Return(nodeStateOutOfSync)`
$DIR/common/client/node_selector_round_robin_test.go: `node.On("State").Return(nodeStateUnreachable)`
$DIR/common/client/node_selector_round_robin_test.go: `nodes = append(nodes, node)`
$DIR/common/client/node_selector_round_robin_test.go: `.Name()`
$DIR/common/client/node_selector_round_robin_test.go: `.On("State")`
$DIR/common/client/node_selector_round_robin_test.go: `.Return(nodeStateOutOfSync)`
$DIR/common/client/node_selector_round_robin_test.go: `.On("State")`
$DIR/common/client/node_selector_round_robin_test.go: `.Return(nodeStateAlive)`
$DIR/common/client/node_selector_round_robin_test.go: `.Select()`
$DIR/common/client/node_selector_round_robin_test.go: `.On("State")`
$DIR/common/client/node_selector_round_robin_test.go: `.Return(nodeStateOutOfSync)`
$DIR/common/client/node_selector_round_robin_test.go: `.On("State")`
$DIR/common/client/node_selector_round_robin_test.go: `.Return(nodeStateUnreachable)`
$DIR/common/client/node_selector_round_robin_test.go: `.Select()`
$DIR/common/client/node_selector_total_difficulty_test.go: `node.On("StateAndLatest").Return(nodeStateOutOfSync, int64(-1), nil)`
$DIR/common/client/node_selector_total_difficulty_test.go: `node.On("StateAndLatest").Return(nodeStateAlive, int64(1), big.NewInt(7))`
$DIR/common/client/node_selector_total_difficulty_test.go: `node.On("StateAndLatest").Return(nodeStateAlive, int64(2), big.NewInt(8))`
$DIR/common/client/node_selector_total_difficulty_test.go: `node.On("Order").Maybe().Return(int32(1))`
$DIR/common/client/node_selector_total_difficulty_test.go: `nodes = append(nodes, node)`
$DIR/common/client/node_selector_total_difficulty_test.go: `t.Run("stick to the same node", func(t *testing.T) {
node := newMockNode[types.ID, Head, nodeClient](t)
// fourth node is alive (same as 3rd)
node.On("StateAndLatest").Return(nodeStateAlive, int64(2), big.NewInt(8))
node.On("Order").Maybe().Return(int32(1))
nodes = append(nodes, node)
selector := newNodeSelector(NodeSelectionModeTotalDifficulty, nodes)
assert.Same(t, nodes[2], selector.Select())
})`
$DIR/common/client/node_selector_total_difficulty_test.go: `node.On("StateAndLatest").Return(nodeStateAlive, int64(2), big.NewInt(8))`
$DIR/common/client/node_selector_total_difficulty_test.go: `node.On("Order").Maybe().Return(int32(1))`
$DIR/common/client/node_selector_total_difficulty_test.go: `nodes = append(nodes, node)`
$DIR/common/client/node_selector_total_difficulty_test.go: `t.Run("another best node", func(t *testing.T) {
node := newMockNode[types.ID, Head, nodeClient](t)
// fifth node is alive (better than 3rd and 4th)
node.On("StateAndLatest").Return(nodeStateAlive, int64(3), big.NewInt(11))
node.On("Order").Maybe().Return(int32(1))
nodes = append(nodes, node)
selector := newNodeSelector(NodeSelectionModeTotalDifficulty, nodes)
assert.Same(t, nodes[4], selector.Select())
})`
$DIR/common/client/node_selector_total_difficulty_test.go: `node.On("StateAndLatest").Return(nodeStateAlive, int64(3), big.NewInt(11))`
$DIR/common/client/node_selector_total_difficulty_test.go: `node.On("Order").Maybe().Return(int32(1))`
$DIR/common/client/node_selector_total_difficulty_test.go: `nodes = append(nodes, node)`
$DIR/common/client/node_selector_total_difficulty_test.go: `node1.On("StateAndLatest").Return(nodeStateAlive, int64(-1), nil)`
$DIR/common/client/node_selector_total_difficulty_test.go: `node1.On("Order").Maybe().Return(int32(1))`
$DIR/common/client/node_selector_total_difficulty_test.go: `node2.On("StateAndLatest").Return(nodeStateAlive, int64(-1), nil)`
$DIR/common/client/node_selector_total_difficulty_test.go: `node2.On("Order").Maybe().Return(int32(1))`
$DIR/common/client/node_selector_total_difficulty_test.go: `node.On("StateAndLatest").Return(nodeStateOutOfSync, int64(-1), nil)`
$DIR/common/client/node_selector_total_difficulty_test.go: `node.On("StateAndLatest").Return(nodeStateUnreachable, int64(1), big.NewInt(7))`
$DIR/common/client/node_selector_total_difficulty_test.go: `nodes = append(nodes, node)`
$DIR/common/client/node_selector_total_difficulty_test.go: `t.Run("same td and order", func(t *testing.T) {
for i := 0; i < 3; i++ {
node := newMockNode[types.ID, Head, nodeClient](t)
node.On("StateAndLatest").Return(nodeStateAlive, int64(1), big.NewInt(10))
node.On("Order").Return(int32(2))
nodes = append(nodes, node)
}
selector := newNodeSelector(NodeSelectionModeTotalDifficulty, nodes)
//Should select the first node because all things are equal
assert.Same(t, nodes[0], selector.Select())
})`
$DIR/common/client/node_selector_total_difficulty_test.go: `node.On("StateAndLatest").Return(nodeStateAlive, int64(1), big.NewInt(10))`
$DIR/common/client/node_selector_total_difficulty_test.go: `node.On("Order").Return(int32(2))`
$DIR/common/client/node_selector_total_difficulty_test.go: `nodes = append(nodes, node)`
$DIR/common/client/node_selector_total_difficulty_test.go: `t.Run("same td but different order", func(t *testing.T) {
node1 := newMockNode[types.ID, Head, nodeClient](t)
node1.On("StateAndLatest").Return(nodeStateAlive, int64(3), big.NewInt(10))
node1.On("Order").Return(int32(3))
node2 := newMockNode[types.ID, Head, nodeClient](t)
node2.On("StateAndLatest").Return(nodeStateAlive, int64(3), big.NewInt(10))
node2.On("Order").Return(int32(1))
node3 := newMockNode[types.ID, Head, nodeClient](t)
node3.On("StateAndLatest").Return(nodeStateAlive, int64(3), big.NewInt(10))
node3.On("Order").Return(int32(2))
nodes := []Node[types.ID, Head, nodeClient]{node1, node2, node3}
selector := newNodeSelector(NodeSelectionModeTotalDifficulty, nodes)
//Should select the second node as it has the highest priority
assert.Same(t, nodes[1], selector.Select())
})`
$DIR/common/client/node_selector_total_difficulty_test.go: `node1.On("StateAndLatest").Return(nodeStateAlive, int64(3), big.NewInt(10))`
$DIR/common/client/node_selector_total_difficulty_test.go: `node1.On("Order").Return(int32(3))`
$DIR/common/client/node_selector_total_difficulty_test.go: `node2.On("StateAndLatest").Return(nodeStateAlive, int64(3), big.NewInt(10))`
$DIR/common/client/node_selector_total_difficulty_test.go: `node2.On("Order").Return(int32(1))`
$DIR/common/client/node_selector_total_difficulty_test.go: `node3.On("StateAndLatest").Return(nodeStateAlive, int64(3), big.NewInt(10))`
$DIR/common/client/node_selector_total_difficulty_test.go: `node3.On("Order").Return(int32(2))`
$DIR/common/client/node_selector_total_difficulty_test.go: `t.Run("different td but same order", func(t *testing.T) {
node1 := newMockNode[types.ID, Head, nodeClient](t)
node1.On("StateAndLatest").Return(nodeStateAlive, int64(1), big.NewInt(10))
node1.On("Order").Maybe().Return(int32(3))
node2 := newMockNode[types.ID, Head, nodeClient](t)
node2.On("StateAndLatest").Return(nodeStateAlive, int64(1), big.NewInt(11))
node2.On("Order").Maybe().Return(int32(3))
node3 := newMockNode[types.ID, Head, nodeClient](t)
node3.On("StateAndLatest").Return(nodeStateAlive, int64(1), big.NewInt(12))
node3.On("Order").Return(int32(3))
nodes := []Node[types.ID, Head, nodeClient]{node1, node2, node3}
selector := newNodeSelector(NodeSelectionModeTotalDifficulty, nodes)
//Should select the third node as it has the highest td
assert.Same(t, nodes[2], selector.Select())
})`
$DIR/common/client/node_selector_total_difficulty_test.go: `node1.On("StateAndLatest").Return(nodeStateAlive, int64(1), big.NewInt(10))`
$DIR/common/client/node_selector_total_difficulty_test.go: `node1.On("Order").Maybe().Return(int32(3))`
$DIR/common/client/node_selector_total_difficulty_test.go: `node2.On("StateAndLatest").Return(nodeStateAlive, int64(1), big.NewInt(11))`
$DIR/common/client/node_selector_total_difficulty_test.go: `node2.On("Order").Maybe().Return(int32(3))`
$DIR/common/client/node_selector_total_difficulty_test.go: `node3.On("StateAndLatest").Return(nodeStateAlive, int64(1), big.NewInt(12))`
$DIR/common/client/node_selector_total_difficulty_test.go: `node3.On("Order").Return(int32(3))`
$DIR/common/client/node_selector_total_difficulty_test.go: `node1.On("StateAndLatest").Return(nodeStateAlive, int64(1), big.NewInt(100))`
$DIR/common/client/node_selector_total_difficulty_test.go: `node1.On("Order").Maybe().Return(int32(4))`
$DIR/common/client/node_selector_total_difficulty_test.go: `node2.On("StateAndLatest").Return(nodeStateAlive, int64(1), big.NewInt(110))`
$DIR/common/client/node_selector_total_difficulty_test.go: `node2.On("Order").Maybe().Return(int32(5))`
$DIR/common/client/node_selector_total_difficulty_test.go: `node3.On("StateAndLatest").Return(nodeStateAlive, int64(1), big.NewInt(110))`
$DIR/common/client/node_selector_total_difficulty_test.go: `node3.On("Order").Maybe().Return(int32(1))`
$DIR/common/client/node_selector_total_difficulty_test.go: `node4.On("StateAndLatest").Return(nodeStateAlive, int64(1), big.NewInt(105))`
$DIR/common/client/node_selector_total_difficulty_test.go: `node4.On("Order").Maybe().Return(int32(2))`
$DIR/common/client/node_selector_total_difficulty_test.go: `.Name()`
$DIR/common/client/node_selector_total_difficulty_test.go: `.On("StateAndLatest")`
$DIR/common/client/node_selector_total_difficulty_test.go: `.Return(nodeStateOutOfSync, int64(-1), nil)`
$DIR/common/client/node_selector_total_difficulty_test.go: `.On("StateAndLatest")`
$DIR/common/client/node_selector_total_difficulty_test.go: `.Return(nodeStateAlive, int64(1), big.NewInt(7))`
$DIR/common/client/node_selector_total_difficulty_test.go: `.NewInt(7)`
$DIR/common/client/node_selector_total_difficulty_test.go: `.On("StateAndLatest")`
$DIR/common/client/node_selector_total_difficulty_test.go: `.Return(nodeStateAlive, int64(2), big.NewInt(8))`
$DIR/common/client/node_selector_total_difficulty_test.go: `.NewInt(8)`
$DIR/common/client/node_selector_total_difficulty_test.go: `.On("Order")`
$DIR/common/client/node_selector_total_difficulty_test.go: `.Maybe()`
$DIR/common/client/node_selector_total_difficulty_test.go: `.Return(int32(1))`
$DIR/common/client/node_selector_total_difficulty_test.go: `.Run("stick to the same node", func(t *testing.T) {
node := newMockNode[types.ID, Head, nodeClient](t)
// fourth node is alive (same as 3rd)
node.On("StateAndLatest").Return(nodeStateAlive, int64(2), big.NewInt(8))
node.On("Order").Maybe().Return(int32(1))
nodes = append(nodes, node)
selector := newNodeSelector(NodeSelectionModeTotalDifficulty, nodes)
assert.Same(t, nodes[2], selector.Select())
})`
$DIR/common/client/node_selector_total_difficulty_test.go: `.On("StateAndLatest")`
$DIR/common/client/node_selector_total_difficulty_test.go: `.Return(nodeStateAlive, int64(2), big.NewInt(8))`
$DIR/common/client/node_selector_total_difficulty_test.go: `.NewInt(8)`
$DIR/common/client/node_selector_total_difficulty_test.go: `.On("Order")`
$DIR/common/client/node_selector_total_difficulty_test.go: `.Maybe()`
$DIR/common/client/node_selector_total_difficulty_test.go: `.Return(int32(1))`
$DIR/common/client/node_selector_total_difficulty_test.go: `.Run("another best node", func(t *testing.T) {
node := newMockNode[types.ID, Head, nodeClient](t)
// fifth node is alive (better than 3rd and 4th)
node.On("StateAndLatest").Return(nodeStateAlive, int64(3), big.NewInt(11))
node.On("Order").Maybe().Return(int32(1))
nodes = append(nodes, node)
selector := newNodeSelector(NodeSelectionModeTotalDifficulty, nodes)
assert.Same(t, nodes[4], selector.Select())
})`
$DIR/common/client/node_selector_total_difficulty_test.go: `.On("StateAndLatest")`
$DIR/common/client/node_selector_total_difficulty_test.go: `.Return(nodeStateAlive, int64(3), big.NewInt(11))`
$DIR/common/client/node_selector_total_difficulty_test.go: `.NewInt(11)`
$DIR/common/client/node_selector_total_difficulty_test.go: `.On("Order")`
$DIR/common/client/node_selector_total_difficulty_test.go: `.Maybe()`
$DIR/common/client/node_selector_total_difficulty_test.go: `.Return(int32(1))`
$DIR/common/client/node_selector_total_difficulty_test.go: `.On("StateAndLatest")`
$DIR/common/client/node_selector_total_difficulty_test.go: `.Return(nodeStateAlive, int64(-1), nil)`
$DIR/common/client/node_selector_total_difficulty_test.go: `.On("Order")`
$DIR/common/client/node_selector_total_difficulty_test.go: `.Maybe()`
$DIR/common/client/node_selector_total_difficulty_test.go: `.Return(int32(1))`
$DIR/common/client/node_selector_total_difficulty_test.go: `.On("StateAndLatest")`
$DIR/common/client/node_selector_total_difficulty_test.go: `.Return(nodeStateAlive, int64(-1), nil)`
$DIR/common/client/node_selector_total_difficulty_test.go: `.On("Order")`
$DIR/common/client/node_selector_total_difficulty_test.go: `.Maybe()`
$DIR/common/client/node_selector_total_difficulty_test.go: `.Return(int32(1))`
$DIR/common/client/node_selector_total_difficulty_test.go: `.On("StateAndLatest")`
$DIR/common/client/node_selector_total_difficulty_test.go: `.Return(nodeStateOutOfSync, int64(-1), nil)`
$DIR/common/client/node_selector_total_difficulty_test.go: `.On("StateAndLatest")`
$DIR/common/client/node_selector_total_difficulty_test.go: `.Return(nodeStateUnreachable, int64(1), big.NewInt(7))`
$DIR/common/client/node_selector_total_difficulty_test.go: `.NewInt(7)`
$DIR/common/client/node_selector_total_difficulty_test.go: `.Select()`
$DIR/common/client/node_selector_total_difficulty_test.go: `.Run("same td and order", func(t *testing.T) {
for i := 0; i < 3; i++ {
node := newMockNode[types.ID, Head, nodeClient](t)
node.On("StateAndLatest").Return(nodeStateAlive, int64(1), big.NewInt(10))
node.On("Order").Return(int32(2))
nodes = append(nodes, node)
}
selector := newNodeSelector(NodeSelectionModeTotalDifficulty, nodes)
//Should select the first node because all things are equal
assert.Same(t, nodes[0], selector.Select())
})`
$DIR/common/client/node_selector_total_difficulty_test.go: `.On("StateAndLatest")`
$DIR/common/client/node_selector_total_difficulty_test.go: `.Return(nodeStateAlive, int64(1), big.NewInt(10))`
$DIR/common/client/node_selector_total_difficulty_test.go: `.NewInt(10)`
$DIR/common/client/node_selector_total_difficulty_test.go: `.On("Order")`
$DIR/common/client/node_selector_total_difficulty_test.go: `.Return(int32(2))`
$DIR/common/client/node_selector_total_difficulty_test.go: `.Run("same td but different order", func(t *testing.T) {
node1 := newMockNode[types.ID, Head, nodeClient](t)
node1.On("StateAndLatest").Return(nodeStateAlive, int64(3), big.NewInt(10))
node1.On("Order").Return(int32(3))
node2 := newMockNode[types.ID, Head, nodeClient](t)
node2.On("StateAndLatest").Return(nodeStateAlive, int64(3), big.NewInt(10))
node2.On("Order").Return(int32(1))
node3 := newMockNode[types.ID, Head, nodeClient](t)
node3.On("StateAndLatest").Return(nodeStateAlive, int64(3), big.NewInt(10))
node3.On("Order").Return(int32(2))
nodes := []Node[types.ID, Head, nodeClient]{node1, node2, node3}
selector := newNodeSelector(NodeSelectionModeTotalDifficulty, nodes)
//Should select the second node as it has the highest priority
assert.Same(t, nodes[1], selector.Select())
})`
$DIR/common/client/node_selector_total_difficulty_test.go: `.On("StateAndLatest")`
$DIR/common/client/node_selector_total_difficulty_test.go: `.Return(nodeStateAlive, int64(3), big.NewInt(10))`
$DIR/common/client/node_selector_total_difficulty_test.go: `.NewInt(10)`
$DIR/common/client/node_selector_total_difficulty_test.go: `.On("Order")`
$DIR/common/client/node_selector_total_difficulty_test.go: `.Return(int32(3))`
$DIR/common/client/node_selector_total_difficulty_test.go: `.On("StateAndLatest")`
$DIR/common/client/node_selector_total_difficulty_test.go: `.Return(nodeStateAlive, int64(3), big.NewInt(10))`
$DIR/common/client/node_selector_total_difficulty_test.go: `.NewInt(10)`
$DIR/common/client/node_selector_total_difficulty_test.go: `.On("Order")`
$DIR/common/client/node_selector_total_difficulty_test.go: `.Return(int32(1))`
$DIR/common/client/node_selector_total_difficulty_test.go: `.On("StateAndLatest")`
$DIR/common/client/node_selector_total_difficulty_test.go: `.Return(nodeStateAlive, int64(3), big.NewInt(10))`
$DIR/common/client/node_selector_total_difficulty_test.go: `.NewInt(10)`
$DIR/common/client/node_selector_total_difficulty_test.go: `.On("Order")`
$DIR/common/client/node_selector_total_difficulty_test.go: `.Return(int32(2))`
$DIR/common/client/node_selector_total_difficulty_test.go: `.Run("different td but same order", func(t *testing.T) {
node1 := newMockNode[types.ID, Head, nodeClient](t)
node1.On("StateAndLatest").Return(nodeStateAlive, int64(1), big.NewInt(10))
node1.On("Order").Maybe().Return(int32(3))
node2 := newMockNode[types.ID, Head, nodeClient](t)
node2.On("StateAndLatest").Return(nodeStateAlive, int64(1), big.NewInt(11))
node2.On("Order").Maybe().Return(int32(3))
node3 := newMockNode[types.ID, Head, nodeClient](t)
node3.On("StateAndLatest").Return(nodeStateAlive, int64(1), big.NewInt(12))
node3.On("Order").Return(int32(3))
nodes := []Node[types.ID, Head, nodeClient]{node1, node2, node3}
selector := newNodeSelector(NodeSelectionModeTotalDifficulty, nodes)
//Should select the third node as it has the highest td
assert.Same(t, nodes[2], selector.Select())
})`
$DIR/common/client/node_selector_total_difficulty_test.go: `.On("StateAndLatest")`
$DIR/common/client/node_selector_total_difficulty_test.go: `.Return(nodeStateAlive, int64(1), big.NewInt(10))`
$DIR/common/client/node_selector_total_difficulty_test.go: `.NewInt(10)`
$DIR/common/client/node_selector_total_difficulty_test.go: `.On("Order")`
$DIR/common/client/node_selector_total_difficulty_test.go: `.Maybe()`
$DIR/common/client/node_selector_total_difficulty_test.go: `.Return(int32(3))`
$DIR/common/client/node_selector_total_difficulty_test.go: `.On("StateAndLatest")`
$DIR/common/client/node_selector_total_difficulty_test.go: `.Return(nodeStateAlive, int64(1), big.NewInt(11))`
$DIR/common/client/node_selector_total_difficulty_test.go: `.NewInt(11)`
$DIR/common/client/node_selector_total_difficulty_test.go: `.On("Order")`
$DIR/common/client/node_selector_total_difficulty_test.go: `.Maybe()`
$DIR/common/client/node_selector_total_difficulty_test.go: `.Return(int32(3))`
$DIR/common/client/node_selector_total_difficulty_test.go: `.On("StateAndLatest")`
$DIR/common/client/node_selector_total_difficulty_test.go: `.Return(nodeStateAlive, int64(1), big.NewInt(12))`
$DIR/common/client/node_selector_total_difficulty_test.go: `.NewInt(12)`
$DIR/common/client/node_selector_total_difficulty_test.go: `.On("Order")`
$DIR/common/client/node_selector_total_difficulty_test.go: `.Return(int32(3))`
$DIR/common/client/node_selector_total_difficulty_test.go: `.On("StateAndLatest")`
$DIR/common/client/node_selector_total_difficulty_test.go: `.Return(nodeStateAlive, int64(1), big.NewInt(100))`
$DIR/common/client/node_selector_total_difficulty_test.go: `.NewInt(100)`
$DIR/common/client/node_selector_total_difficulty_test.go: `.On("Order")`
$DIR/common/client/node_selector_total_difficulty_test.go: `.Maybe()`
$DIR/common/client/node_selector_total_difficulty_test.go: `.Return(int32(4))`
$DIR/common/client/node_selector_total_difficulty_test.go: `.On("StateAndLatest")`
$DIR/common/client/node_selector_total_difficulty_test.go: `.Return(nodeStateAlive, int64(1), big.NewInt(110))`
$DIR/common/client/node_selector_total_difficulty_test.go: `.NewInt(110)`
$DIR/common/client/node_selector_total_difficulty_test.go: `.On("Order")`
$DIR/common/client/node_selector_total_difficulty_test.go: `.Maybe()`
$DIR/common/client/node_selector_total_difficulty_test.go: `.Return(int32(5))`
$DIR/common/client/node_selector_total_difficulty_test.go: `.On("StateAndLatest")`
$DIR/common/client/node_selector_total_difficulty_test.go: `.Return(nodeStateAlive, int64(1), big.NewInt(110))`
$DIR/common/client/node_selector_total_difficulty_test.go: `.NewInt(110)`
$DIR/common/client/node_selector_total_difficulty_test.go: `.On("Order")`
$DIR/common/client/node_selector_total_difficulty_test.go: `.Maybe()`
$DIR/common/client/node_selector_total_difficulty_test.go: `.Return(int32(1))`
$DIR/common/client/node_selector_total_difficulty_test.go: `.On("StateAndLatest")`
$DIR/common/client/node_selector_total_difficulty_test.go: `.Return(nodeStateAlive, int64(1), big.NewInt(105))`
$DIR/common/client/node_selector_total_difficulty_test.go: `.NewInt(105)`
$DIR/common/client/node_selector_total_difficulty_test.go: `.On("Order")`
$DIR/common/client/node_selector_total_difficulty_test.go: `.Maybe()`
$DIR/common/client/node_selector_total_difficulty_test.go: `.Return(int32(2))`
$DIR/common/client/poller_test.go: `t.Run("Test multiple start", func(t *testing.T) {
pollFunc := func(ctx context.Context) (Head, error) {
return nil, nil
}
poller, _ := NewPoller[Head](time.Millisecond, pollFunc, time.Second, lggr)
err := poller.Start()
require.NoError(t, err)
err = poller.Start()
require.Error(t, err)
poller.Unsubscribe()
})`
$DIR/common/client/poller_test.go: `err = poller.Start()`
$DIR/common/client/poller_test.go: `poller.Unsubscribe()`
$DIR/common/client/poller_test.go: `t.Run("Test polling for heads", func(t *testing.T) {
// Mock polling function that returns a new value every time it's called
var pollNumber int
pollLock := sync.Mutex{}
pollFunc := func(ctx context.Context) (Head, error) {
pollLock.Lock()
defer pollLock.Unlock()
pollNumber++
h := head{
BlockNumber: int64(pollNumber),
BlockDifficulty: big.NewInt(int64(pollNumber)),
}
return h.ToMockHead(t), nil
}
// Create poller and start to receive data
poller, channel := NewPoller[Head](time.Millisecond, pollFunc, time.Second, lggr)
require.NoError(t, poller.Start())
defer poller.Unsubscribe()
// Receive updates from the poller
pollCount := 0
pollMax := 50
for ; pollCount < pollMax; pollCount++ {
h := <-channel
assert.Equal(t, int64(pollCount+1), h.BlockNumber())
}
})`
$DIR/common/client/poller_test.go: `pollLock.Lock()`
$DIR/common/client/poller_test.go: `pollNumber++`
$DIR/common/client/poller_test.go: `t.Run("Test polling errors", func(t *testing.T) {
// Mock polling function that returns an error
var pollNumber int
pollLock := sync.Mutex{}
pollFunc := func(ctx context.Context) (Head, error) {
pollLock.Lock()
defer pollLock.Unlock()
pollNumber++
return nil, fmt.Errorf("polling error %d", pollNumber)
}
olggr, observedLogs := logger.TestObserved(t, zap.WarnLevel)
// Create poller and subscribe to receive data
poller, _ := NewPoller[Head](time.Millisecond, pollFunc, time.Second, olggr)
require.NoError(t, poller.Start())
defer poller.Unsubscribe()
// Ensure that all errors were logged as expected
logsSeen := func() bool {
for pollCount := 0; pollCount < 50; pollCount++ {
numLogs := observedLogs.FilterMessage(fmt.Sprintf("polling error: polling error %d", pollCount+1)).Len()
if numLogs != 1 {
return false
}
}
return true
}
require.Eventually(t, logsSeen, time.Second, time.Millisecond)
})`
$DIR/common/client/poller_test.go: `pollLock.Lock()`
$DIR/common/client/poller_test.go: `pollNumber++`
$DIR/common/client/poller_test.go: `t.Run("Test polling timeout", func(t *testing.T) {
pollFunc := func(ctx context.Context) (Head, error) {
if <-ctx.Done(); true {
return nil, ctx.Err()
}
return nil, nil
}
// Set instant timeout
pollingTimeout := time.Duration(0)
olggr, observedLogs := logger.TestObserved(t, zap.WarnLevel)
// Create poller and subscribe to receive data
poller, _ := NewPoller[Head](time.Millisecond, pollFunc, pollingTimeout, olggr)
require.NoError(t, poller.Start())
defer poller.Unsubscribe()
// Ensure that timeout errors were logged as expected
logsSeen := func() bool {
return observedLogs.FilterMessage("polling error: context deadline exceeded").Len() >= 1
}
require.Eventually(t, logsSeen, time.Second, time.Millisecond)
})`
$DIR/common/client/poller_test.go: `close(wait)`
$DIR/common/client/poller_test.go: `<-wait`
$DIR/common/client/poller_test.go: `poller.Unsubscribe()`
$DIR/common/client/poller_test.go: `t.Run("Test multiple unsubscribe", func(t *testing.T) {
poller, channel := NewPoller[Head](time.Millisecond, pollFunc, time.Second, lggr)
err := poller.Start()
require.NoError(t, err)
<-channel
poller.Unsubscribe()
poller.Unsubscribe()
})`
$DIR/common/client/poller_test.go: `<-channel`
$DIR/common/client/poller_test.go: `poller.Unsubscribe()`
$DIR/common/client/poller_test.go: `poller.Unsubscribe()`
$DIR/common/client/poller_test.go: `poller.Unsubscribe()`
$DIR/common/client/poller_test.go: `.Test(t)`
$DIR/common/client/poller_test.go: `.Run("Test multiple start", func(t *testing.T) {
pollFunc := func(ctx context.Context) (Head, error) {
return nil, nil
}
poller, _ := NewPoller[Head](time.Millisecond, pollFunc, time.Second, lggr)
err := poller.Start()
require.NoError(t, err)
err = poller.Start()
require.Error(t, err)
poller.Unsubscribe()
})`
$DIR/common/client/poller_test.go: `.Start()`
$DIR/common/client/poller_test.go: `.Start()`
$DIR/common/client/poller_test.go: `.Unsubscribe()`
$DIR/common/client/poller_test.go: `.Run("Test polling for heads", func(t *testing.T) {
// Mock polling function that returns a new value every time it's called
var pollNumber int
pollLock := sync.Mutex{}
pollFunc := func(ctx context.Context) (Head, error) {
pollLock.Lock()
defer pollLock.Unlock()
pollNumber++
h := head{
BlockNumber: int64(pollNumber),
BlockDifficulty: big.NewInt(int64(pollNumber)),
}
return h.ToMockHead(t), nil
}
// Create poller and start to receive data
poller, channel := NewPoller[Head](time.Millisecond, pollFunc, time.Second, lggr)
require.NoError(t, poller.Start())
defer poller.Unsubscribe()
// Receive updates from the poller
pollCount := 0
pollMax := 50
for ; pollCount < pollMax; pollCount++ {
h := <-channel
assert.Equal(t, int64(pollCount+1), h.BlockNumber())
}
})`
$DIR/common/client/poller_test.go: `.Lock()`
$DIR/common/client/poller_test.go: `.Unlock()`
$DIR/common/client/poller_test.go: `.NewInt(int64(pollNumber))`
$DIR/common/client/poller_test.go: `.ToMockHead(t)`
$DIR/common/client/poller_test.go: `.Unsubscribe()`
$DIR/common/client/poller_test.go: `.Run("Test polling errors", func(t *testing.T) {
// Mock polling function that returns an error
var pollNumber int
pollLock := sync.Mutex{}
pollFunc := func(ctx context.Context) (Head, error) {
pollLock.Lock()
defer pollLock.Unlock()
pollNumber++
return nil, fmt.Errorf("polling error %d", pollNumber)
}
olggr, observedLogs := logger.TestObserved(t, zap.WarnLevel)
// Create poller and subscribe to receive data
poller, _ := NewPoller[Head](time.Millisecond, pollFunc, time.Second, olggr)
require.NoError(t, poller.Start())
defer poller.Unsubscribe()
// Ensure that all errors were logged as expected
logsSeen := func() bool {
for pollCount := 0; pollCount < 50; pollCount++ {
numLogs := observedLogs.FilterMessage(fmt.Sprintf("polling error: polling error %d", pollCount+1)).Len()
if numLogs != 1 {
return false
}
}
return true
}
require.Eventually(t, logsSeen, time.Second, time.Millisecond)
})`
$DIR/common/client/poller_test.go: `.Lock()`
$DIR/common/client/poller_test.go: `.Unlock()`
$DIR/common/client/poller_test.go: `.TestObserved(t, zap.WarnLevel)`
$DIR/common/client/poller_test.go: `.Unsubscribe()`
$DIR/common/client/poller_test.go: `.FilterMessage(fmt.Sprintf("polling error: polling error %d", pollCount+1))`
$DIR/common/client/poller_test.go: `.Sprintf("polling error: polling error %d", pollCount+1)`
$DIR/common/client/poller_test.go: `.Len()`
$DIR/common/client/poller_test.go: `.Run("Test polling timeout", func(t *testing.T) {
pollFunc := func(ctx context.Context) (Head, error) {
if <-ctx.Done(); true {
return nil, ctx.Err()
}
return nil, nil
}
// Set instant timeout
pollingTimeout := time.Duration(0)
olggr, observedLogs := logger.TestObserved(t, zap.WarnLevel)
// Create poller and subscribe to receive data
poller, _ := NewPoller[Head](time.Millisecond, pollFunc, pollingTimeout, olggr)
require.NoError(t, poller.Start())
defer poller.Unsubscribe()
// Ensure that timeout errors were logged as expected
logsSeen := func() bool {
return observedLogs.FilterMessage("polling error: context deadline exceeded").Len() >= 1
}
require.Eventually(t, logsSeen, time.Second, time.Millisecond)
})`
$DIR/common/client/poller_test.go: `.Done()`
$DIR/common/client/poller_test.go: `.Err()`
$DIR/common/client/poller_test.go: `.Duration(0)`
$DIR/common/client/poller_test.go: `.TestObserved(t, zap.WarnLevel)`
$DIR/common/client/poller_test.go: `.Unsubscribe()`
$DIR/common/client/poller_test.go: `.FilterMessage("polling error: context deadline exceeded")`
$DIR/common/client/poller_test.go: `.Len()`
$DIR/common/client/poller_test.go: `.Done()`
$DIR/common/client/poller_test.go: `.Err()`
$DIR/common/client/poller_test.go: `.TestObserved(t, zap.WarnLevel)`
$DIR/common/client/poller_test.go: `.Unsubscribe()`
$DIR/common/client/poller_test.go: `.FilterMessage("polling error: context canceled")`
$DIR/common/client/poller_test.go: `.Len()`
$DIR/common/client/poller_test.go: `.Test(t)`
$DIR/common/client/poller_test.go: `.Done()`
$DIR/common/client/poller_test.go: `.Err()`
$DIR/common/client/poller_test.go: `.NewInt(0)`
$DIR/common/client/poller_test.go: `.ToMockHead(t)`
$DIR/common/client/poller_test.go: `.Run("Test multiple unsubscribe", func(t *testing.T) {
poller, channel := NewPoller[Head](time.Millisecond, pollFunc, time.Second, lggr)
err := poller.Start()
require.NoError(t, err)
<-channel
poller.Unsubscribe()
poller.Unsubscribe()
})`
$DIR/common/client/poller_test.go: `.Start()`
$DIR/common/client/poller_test.go: `.Unsubscribe()`
$DIR/common/client/poller_test.go: `.Unsubscribe()`
$DIR/common/client/poller_test.go: `.Start()`
$DIR/common/client/poller_test.go: `.Unsubscribe()`
$DIR/common/client/send_only_node_test.go: `t.Run("becomes unusable if initial dial fails", func(t *testing.T) {
t.Parallel()
lggr, observedLogs := logger.TestObserved(t, zap.WarnLevel)
client := newMockSendOnlyClient[types.ID](t)
client.On("Close").Once()
expectedError := errors.New("some http error")
client.On("DialHTTP").Return(expectedError).Once()
s := NewSendOnlyNode(lggr, url.URL{}, t.Name(), types.RandomID(), client)
defer func() { assert.NoError(t, s.Close()) }()
err := s.Start(tests.Context(t))
require.NoError(t, err)
assert.Equal(t, nodeStateUnusable, s.State())
tests.RequireLogMessage(t, observedLogs, "Dial failed: SendOnly Node is unusable")
})`
$DIR/common/client/send_only_node_test.go: `client.On("Close").Once()`
$DIR/common/client/send_only_node_test.go: `client.On("DialHTTP").Return(expectedError).Once()`
$DIR/common/client/send_only_node_test.go: `tests.RequireLogMessage(t, observedLogs, "Dial failed: SendOnly Node is unusable")`
$DIR/common/client/send_only_node_test.go: `t.Run("Default ChainID(0) produces warn and skips checks", func(t *testing.T) {
t.Parallel()
lggr, observedLogs := logger.TestObserved(t, zap.WarnLevel)
client := newMockSendOnlyClient[types.ID](t)
client.On("Close").Once()
client.On("DialHTTP").Return(nil).Once()
s := NewSendOnlyNode(lggr, url.URL{}, t.Name(), types.NewIDFromInt(0), client)
defer func() { assert.NoError(t, s.Close()) }()
err := s.Start(tests.Context(t))
require.NoError(t, err)
assert.Equal(t, nodeStateAlive, s.State())
tests.RequireLogMessage(t, observedLogs, "sendonly rpc ChainID verification skipped")
})`
$DIR/common/client/send_only_node_test.go: `client.On("Close").Once()`
$DIR/common/client/send_only_node_test.go: `client.On("DialHTTP").Return(nil).Once()`
$DIR/common/client/send_only_node_test.go: `tests.RequireLogMessage(t, observedLogs, "sendonly rpc ChainID verification skipped")`
$DIR/common/client/send_only_node_test.go: `t.Run("Can recover from chainID verification failure", func(t *testing.T) {
t.Parallel()
lggr, observedLogs := logger.TestObserved(t, zap.WarnLevel)
client := newMockSendOnlyClient[types.ID](t)
client.On("Close").Once()
client.On("DialHTTP").Return(nil)
expectedError := errors.New("failed to get chain ID")
chainID := types.RandomID()
const failuresCount = 2
client.On("ChainID", mock.Anything).Return(types.RandomID(), expectedError).Times(failuresCount)
client.On("ChainID", mock.Anything).Return(chainID, nil)
s := NewSendOnlyNode(lggr, url.URL{}, t.Name(), chainID, client)
defer func() { assert.NoError(t, s.Close()) }()
err := s.Start(tests.Context(t))
require.NoError(t, err)
assert.Equal(t, nodeStateUnreachable, s.State())
tests.AssertLogCountEventually(t, observedLogs, fmt.Sprintf("Verify failed: %v", expectedError), failuresCount)
tests.AssertEventually(t, func() bool {
return s.State() == nodeStateAlive
})
})`
$DIR/common/client/send_only_node_test.go: `client.On("Close").Once()`
$DIR/common/client/send_only_node_test.go: `client.On("DialHTTP").Return(nil)`
$DIR/common/client/send_only_node_test.go: `client.On("ChainID", mock.Anything).Return(types.RandomID(), expectedError).Times(failuresCount)`
$DIR/common/client/send_only_node_test.go: `client.On("ChainID", mock.Anything).Return(chainID, nil)`
$DIR/common/client/send_only_node_test.go: `tests.AssertLogCountEventually(t, observedLogs, fmt.Sprintf("Verify failed: %v", expectedError), failuresCount)`
$DIR/common/client/send_only_node_test.go: `tests.AssertEventually(t, func() bool {
return s.State() == nodeStateAlive
})`
$DIR/common/client/send_only_node_test.go: `t.Run("Can recover from chainID mismatch", func(t *testing.T) {
t.Parallel()
lggr, observedLogs := logger.TestObserved(t, zap.WarnLevel)
client := newMockSendOnlyClient[types.ID](t)
client.On("Close").Once()
client.On("DialHTTP").Return(nil).Once()
configuredChainID := types.NewIDFromInt(11)
rpcChainID := types.NewIDFromInt(20)
const failuresCount = 2
client.On("ChainID", mock.Anything).Return(rpcChainID, nil).Times(failuresCount)
client.On("ChainID", mock.Anything).Return(configuredChainID, nil)
s := NewSendOnlyNode(lggr, url.URL{}, t.Name(), configuredChainID, client)
defer func() { assert.NoError(t, s.Close()) }()
err := s.Start(tests.Context(t))
require.NoError(t, err)
assert.Equal(t, nodeStateInvalidChainID, s.State())
tests.AssertLogCountEventually(t, observedLogs, "sendonly rpc ChainID doesn't match local chain ID", failuresCount)
tests.AssertEventually(t, func() bool {
return s.State() == nodeStateAlive
})
})`
$DIR/common/client/send_only_node_test.go: `client.On("Close").Once()`
$DIR/common/client/send_only_node_test.go: `client.On("DialHTTP").Return(nil).Once()`
$DIR/common/client/send_only_node_test.go: `client.On("ChainID", mock.Anything).Return(rpcChainID, nil).Times(failuresCount)`
$DIR/common/client/send_only_node_test.go: `client.On("ChainID", mock.Anything).Return(configuredChainID, nil)`
$DIR/common/client/send_only_node_test.go: `tests.AssertLogCountEventually(t, observedLogs, "sendonly rpc ChainID doesn't match local chain ID", failuresCount)`
$DIR/common/client/send_only_node_test.go: `tests.AssertEventually(t, func() bool {
return s.State() == nodeStateAlive
})`
$DIR/common/client/send_only_node_test.go: `client.On("Close").Once()`
$DIR/common/client/send_only_node_test.go: `client.On("DialHTTP").Return(nil).Once()`
$DIR/common/client/send_only_node_test.go: `client.On("ChainID", mock.Anything).Return(configuredChainID, nil)`
$DIR/common/client/send_only_node_test.go: `tests.AssertEventually(t, func() bool {
return s.State() == nodeStateAlive
})`
$DIR/common/client/send_only_node_test.go: `.Parse(fmt.Sprintf(urlFormat, password))`
$DIR/common/client/send_only_node_test.go: `.Sprintf(urlFormat, password)`
$DIR/common/client/send_only_node_test.go: `.Sprintf(urlFormat, "xxxxx")`
$DIR/common/client/send_only_node_test.go: `.Test(t)`
$DIR/common/client/send_only_node_test.go: `.RandomID()`
$DIR/common/client/send_only_node_test.go: `.ConfiguredChainID()`
$DIR/common/client/send_only_node_test.go: `.Run("becomes unusable if initial dial fails", func(t *testing.T) {
t.Parallel()
lggr, observedLogs := logger.TestObserved(t, zap.WarnLevel)
client := newMockSendOnlyClient[types.ID](t)
client.On("Close").Once()
expectedError := errors.New("some http error")
client.On("DialHTTP").Return(expectedError).Once()
s := NewSendOnlyNode(lggr, url.URL{}, t.Name(), types.RandomID(), client)
defer func() { assert.NoError(t, s.Close()) }()
err := s.Start(tests.Context(t))
require.NoError(t, err)
assert.Equal(t, nodeStateUnusable, s.State())
tests.RequireLogMessage(t, observedLogs, "Dial failed: SendOnly Node is unusable")
})`
$DIR/common/client/send_only_node_test.go: `.TestObserved(t, zap.WarnLevel)`
$DIR/common/client/send_only_node_test.go: `.On("Close")`
$DIR/common/client/send_only_node_test.go: `.Once()`
$DIR/common/client/send_only_node_test.go: `.New("some http error")`
$DIR/common/client/send_only_node_test.go: `.On("DialHTTP")`
$DIR/common/client/send_only_node_test.go: `.Return(expectedError)`
$DIR/common/client/send_only_node_test.go: `.Once()`
$DIR/common/client/send_only_node_test.go: `.Name()`
$DIR/common/client/send_only_node_test.go: `.RandomID()`
$DIR/common/client/send_only_node_test.go: `.Start(tests.Context(t))`
$DIR/common/client/send_only_node_test.go: `.Context(t)`
$DIR/common/client/send_only_node_test.go: `.RequireLogMessage(t, observedLogs, "Dial failed: SendOnly Node is unusable")`
$DIR/common/client/send_only_node_test.go: `.Run("Default ChainID(0) produces warn and skips checks", func(t *testing.T) {
t.Parallel()
lggr, observedLogs := logger.TestObserved(t, zap.WarnLevel)
client := newMockSendOnlyClient[types.ID](t)
client.On("Close").Once()
client.On("DialHTTP").Return(nil).Once()
s := NewSendOnlyNode(lggr, url.URL{}, t.Name(), types.NewIDFromInt(0), client)
defer func() { assert.NoError(t, s.Close()) }()
err := s.Start(tests.Context(t))
require.NoError(t, err)
assert.Equal(t, nodeStateAlive, s.State())
tests.RequireLogMessage(t, observedLogs, "sendonly rpc ChainID verification skipped")
})`
$DIR/common/client/send_only_node_test.go: `.TestObserved(t, zap.WarnLevel)`
$DIR/common/client/send_only_node_test.go: `.On("Close")`
$DIR/common/client/send_only_node_test.go: `.Once()`
$DIR/common/client/send_only_node_test.go: `.On("DialHTTP")`
$DIR/common/client/send_only_node_test.go: `.Return(nil)`
$DIR/common/client/send_only_node_test.go: `.Once()`
$DIR/common/client/send_only_node_test.go: `.Name()`
$DIR/common/client/send_only_node_test.go: `.NewIDFromInt(0)`
$DIR/common/client/send_only_node_test.go: `.Start(tests.Context(t))`
$DIR/common/client/send_only_node_test.go: `.Context(t)`
$DIR/common/client/send_only_node_test.go: `.RequireLogMessage(t, observedLogs, "sendonly rpc ChainID verification skipped")`
$DIR/common/client/send_only_node_test.go: `.Run("Can recover from chainID verification failure", func(t *testing.T) {
t.Parallel()
lggr, observedLogs := logger.TestObserved(t, zap.WarnLevel)
client := newMockSendOnlyClient[types.ID](t)
client.On("Close").Once()
client.On("DialHTTP").Return(nil)
expectedError := errors.New("failed to get chain ID")
chainID := types.RandomID()
const failuresCount = 2
client.On("ChainID", mock.Anything).Return(types.RandomID(), expectedError).Times(failuresCount)
client.On("ChainID", mock.Anything).Return(chainID, nil)
s := NewSendOnlyNode(lggr, url.URL{}, t.Name(), chainID, client)
defer func() { assert.NoError(t, s.Close()) }()
err := s.Start(tests.Context(t))
require.NoError(t, err)
assert.Equal(t, nodeStateUnreachable, s.State())
tests.AssertLogCountEventually(t, observedLogs, fmt.Sprintf("Verify failed: %v", expectedError), failuresCount)
tests.AssertEventually(t, func() bool {
return s.State() == nodeStateAlive
})
})`
$DIR/common/client/send_only_node_test.go: `.TestObserved(t, zap.WarnLevel)`
$DIR/common/client/send_only_node_test.go: `.On("Close")`
$DIR/common/client/send_only_node_test.go: `.Once()`
$DIR/common/client/send_only_node_test.go: `.On("DialHTTP")`
$DIR/common/client/send_only_node_test.go: `.Return(nil)`
$DIR/common/client/send_only_node_test.go: `.New("failed to get chain ID")`
$DIR/common/client/send_only_node_test.go: `.RandomID()`
$DIR/common/client/send_only_node_test.go: `.On("ChainID", mock.Anything)`
$DIR/common/client/send_only_node_test.go: `.Return(types.RandomID(), expectedError)`
$DIR/common/client/send_only_node_test.go: `.RandomID()`
$DIR/common/client/send_only_node_test.go: `.Times(failuresCount)`
$DIR/common/client/send_only_node_test.go: `.On("ChainID", mock.Anything)`
$DIR/common/client/send_only_node_test.go: `.Return(chainID, nil)`
$DIR/common/client/send_only_node_test.go: `.Name()`
$DIR/common/client/send_only_node_test.go: `.Start(tests.Context(t))`
$DIR/common/client/send_only_node_test.go: `.Context(t)`
$DIR/common/client/send_only_node_test.go: `.AssertLogCountEventually(t, observedLogs, fmt.Sprintf("Verify failed: %v", expectedError), failuresCount)`
$DIR/common/client/send_only_node_test.go: `.Sprintf("Verify failed: %v", expectedError)`
$DIR/common/client/send_only_node_test.go: `.AssertEventually(t, func() bool {
return s.State() == nodeStateAlive
})`
$DIR/common/client/send_only_node_test.go: `.State()`
$DIR/common/client/send_only_node_test.go: `.Run("Can recover from chainID mismatch", func(t *testing.T) {
t.Parallel()
lggr, observedLogs := logger.TestObserved(t, zap.WarnLevel)
client := newMockSendOnlyClient[types.ID](t)
client.On("Close").Once()
client.On("DialHTTP").Return(nil).Once()
configuredChainID := types.NewIDFromInt(11)
rpcChainID := types.NewIDFromInt(20)
const failuresCount = 2
client.On("ChainID", mock.Anything).Return(rpcChainID, nil).Times(failuresCount)
client.On("ChainID", mock.Anything).Return(configuredChainID, nil)
s := NewSendOnlyNode(lggr, url.URL{}, t.Name(), configuredChainID, client)
defer func() { assert.NoError(t, s.Close()) }()
err := s.Start(tests.Context(t))
require.NoError(t, err)
assert.Equal(t, nodeStateInvalidChainID, s.State())
tests.AssertLogCountEventually(t, observedLogs, "sendonly rpc ChainID doesn't match local chain ID", failuresCount)
tests.AssertEventually(t, func() bool {
return s.State() == nodeStateAlive
})
})`
$DIR/common/client/send_only_node_test.go: `.TestObserved(t, zap.WarnLevel)`
$DIR/common/client/send_only_node_test.go: `.On("Close")`
$DIR/common/client/send_only_node_test.go: `.Once()`
$DIR/common/client/send_only_node_test.go: `.On("DialHTTP")`
$DIR/common/client/send_only_node_test.go: `.Return(nil)`
$DIR/common/client/send_only_node_test.go: `.Once()`
$DIR/common/client/send_only_node_test.go: `.NewIDFromInt(11)`
$DIR/common/client/send_only_node_test.go: `.NewIDFromInt(20)`
$DIR/common/client/send_only_node_test.go: `.On("ChainID", mock.Anything)`
$DIR/common/client/send_only_node_test.go: `.Return(rpcChainID, nil)`
$DIR/common/client/send_only_node_test.go: `.Times(failuresCount)`
$DIR/common/client/send_only_node_test.go: `.On("ChainID", mock.Anything)`
$DIR/common/client/send_only_node_test.go: `.Return(configuredChainID, nil)`
$DIR/common/client/send_only_node_test.go: `.Name()`
$DIR/common/client/send_only_node_test.go: `.Start(tests.Context(t))`
$DIR/common/client/send_only_node_test.go: `.Context(t)`
$DIR/common/client/send_only_node_test.go: `.AssertLogCountEventually(t, observedLogs, "sendonly rpc ChainID doesn't match local chain ID", failuresCount)`
$DIR/common/client/send_only_node_test.go: `.AssertEventually(t, func() bool {
return s.State() == nodeStateAlive
})`
$DIR/common/client/send_only_node_test.go: `.State()`
$DIR/common/client/send_only_node_test.go: `.TestObserved(t, zap.WarnLevel)`
$DIR/common/client/send_only_node_test.go: `.On("Close")`
$DIR/common/client/send_only_node_test.go: `.Once()`
$DIR/common/client/send_only_node_test.go: `.On("DialHTTP")`
$DIR/common/client/send_only_node_test.go: `.Return(nil)`
$DIR/common/client/send_only_node_test.go: `.Once()`
$DIR/common/client/send_only_node_test.go: `.RandomID()`
$DIR/common/client/send_only_node_test.go: `.On("ChainID", mock.Anything)`
$DIR/common/client/send_only_node_test.go: `.Return(configuredChainID, nil)`
$DIR/common/client/send_only_node_test.go: `.Name()`
$DIR/common/client/send_only_node_test.go: `.Start(tests.Context(t))`
$DIR/common/client/send_only_node_test.go: `.Context(t)`
$DIR/common/client/send_only_node_test.go: `.AssertEventually(t, func() bool {
return s.State() == nodeStateAlive
})`
$DIR/common/client/send_only_node_test.go: `.State()`
$DIR/common/txmgr/types/tx_test.go: `states = append(states, stateCompare{TxAttemptState(i), v})`
$DIR/common/txmgr/types/tx_test.go: `t.Run("NewTxAttemptState", func(t *testing.T) {
// string representation
addStates := []stateCompare{
{TxAttemptState(0), "invalid_state"},
}
allStates := append(states, addStates...)
for i := range allStates {
s := allStates[i]
t.Run(fmt.Sprintf("%s->%d", s.str, s.state), func(t *testing.T) {
assert.Equal(t, s.state, NewTxAttemptState(s.str))
})
}
})`
$DIR/common/txmgr/types/tx_test.go: `t.Run(fmt.Sprintf("%s->%d", s.str, s.state), func(t *testing.T) {
assert.Equal(t, s.state, NewTxAttemptState(s.str))
})`
$DIR/common/txmgr/types/tx_test.go: `t.Run(fmt.Sprintf("%d->%s", s.state, s.str), func(t *testing.T) {
assert.Equal(t, s.str, s.state.String())
})`
$DIR/common/txmgr/types/tx_test.go: `.Run("NewTxAttemptState", func(t *testing.T) {
// string representation
addStates := []stateCompare{
{TxAttemptState(0), "invalid_state"},
}
allStates := append(states, addStates...)
for i := range allStates {
s := allStates[i]
t.Run(fmt.Sprintf("%s->%d", s.str, s.state), func(t *testing.T) {
assert.Equal(t, s.state, NewTxAttemptState(s.str))
})
}
})`
$DIR/common/txmgr/types/tx_test.go: `.Run(fmt.Sprintf("%s->%d", s.str, s.state), func(t *testing.T) {
assert.Equal(t, s.state, NewTxAttemptState(s.str))
})`
$DIR/common/txmgr/types/tx_test.go: `.Sprintf("%s->%d", s.str, s.state)`
$DIR/common/txmgr/types/tx_test.go: `.Run(fmt.Sprintf("%d->%s", s.state, s.str), func(t *testing.T) {
assert.Equal(t, s.str, s.state.String())
})`
$DIR/common/txmgr/types/tx_test.go: `.Sprintf("%d->%s", s.state, s.str)`
$DIR/config_docs_test.go: `.GenerateConfig()`
$DIR/config_docs_test.go: `.GenerateSecrets()`
$DIR/core/bridges/bridge_type_test.go: `t.Run(test.name, func(t *testing.T) {
ok, err := bridges.AuthenticateBridgeType(bt, test.token)
require.NoError(t, err)
if test.wantError {
assert.False(t, ok)
} else {
assert.True(t, ok)
}
})`
$DIR/core/bridges/bridge_type_test.go: `t.Run(tt.name, func(t *testing.T) {
got, err := bridges.MarshalBridgeMetaData(tt.latestAnswer, tt.updatedAt)
require.NoError(t, err)
assert.Equalf(t, tt.want, got, "MarshalBridgeMetaData(%v, %v)", tt.latestAnswer, tt.updatedAt)
})`
$DIR/core/bridges/bridge_type_test.go: `.Parse("http://example.com/test")`
$DIR/core/bridges/bridge_type_test.go: `.MustParseBridgeName("test-bridge-name")`
$DIR/core/bridges/bridge_type_test.go: `.WebURL(*u)`
$DIR/core/bridges/bridge_type_test.go: `.NewInt(1000)`
$DIR/core/bridges/bridge_type_test.go: `.SetID("abc123.,<>/.foobar")`
$DIR/core/bridges/bridge_type_test.go: `.NewBridgeType(t, cltest.BridgeOpts{})`
$DIR/core/bridges/bridge_type_test.go: `.Run(test.name, func(t *testing.T) {
ok, err := bridges.AuthenticateBridgeType(bt, test.token)
require.NoError(t, err)
if test.wantError {
assert.False(t, ok)
} else {
assert.True(t, ok)
}
})`
$DIR/core/bridges/bridge_type_test.go: `.AuthenticateBridgeType(bt, test.token)`
$DIR/core/bridges/bridge_type_test.go: `.Marshal(b)`
$DIR/core/bridges/bridge_type_test.go: `.Unmarshal([]byte(`"invalid,.<>/asdf?"`), &b)`
$DIR/core/bridges/bridge_type_test.go: `.NewInt(0)`
$DIR/core/bridges/bridge_type_test.go: `.NewInt(0)`
$DIR/core/bridges/bridge_type_test.go: `.NewInt(1)`
$DIR/core/bridges/bridge_type_test.go: `.NewInt(1)`
$DIR/core/bridges/bridge_type_test.go: `.NewInt(-100)`
$DIR/core/bridges/bridge_type_test.go: `.NewInt(-10)`
$DIR/core/bridges/bridge_type_test.go: `.Mul(big.NewInt(math.MaxInt64), big.NewInt(1000))`
$DIR/core/bridges/bridge_type_test.go: `.NewInt(math.MaxInt64)`
$DIR/core/bridges/bridge_type_test.go: `.NewInt(1000)`
$DIR/core/bridges/bridge_type_test.go: `.NewInt(1)`
$DIR/core/bridges/bridge_type_test.go: `.Run(tt.name, func(t *testing.T) {
got, err := bridges.MarshalBridgeMetaData(tt.latestAnswer, tt.updatedAt)
require.NoError(t, err)
assert.Equalf(t, tt.want, got, "MarshalBridgeMetaData(%v, %v)", tt.latestAnswer, tt.updatedAt)
})`
$DIR/core/bridges/bridge_type_test.go: `.MarshalBridgeMetaData(tt.latestAnswer, tt.updatedAt)`
$DIR/core/bridges/external_initiator_test.go: `ok, err = bridges.AuthenticateExternalInitiator(eia, &bridges.ExternalInitiator{
Salt: "salt",
HashedSecret: hs,
})`
$DIR/core/bridges/external_initiator_test.go: `.NewToken()`
$DIR/core/bridges/external_initiator_test.go: `.WebURL(t, "http://localhost:8888")`
$DIR/core/bridges/external_initiator_test.go: `.New()`
$DIR/core/bridges/external_initiator_test.go: `.String()`
$DIR/core/bridges/external_initiator_test.go: `.NewExternalInitiator(eia, eir)`
$DIR/core/bridges/external_initiator_test.go: `.NewToken()`
$DIR/core/bridges/external_initiator_test.go: `.AuthenticateExternalInitiator(eia, &bridges.ExternalInitiator{
Salt: "salt",
HashedSecret: "secret",
})`
$DIR/core/bridges/external_initiator_test.go: `.HashedSecret(eia, "salt")`
$DIR/core/bridges/external_initiator_test.go: `.AuthenticateExternalInitiator(eia, &bridges.ExternalInitiator{
Salt: "salt",
HashedSecret: hs,
})`
$DIR/core/bridges/orm_test.go: `bts, err = orm.FindBridges(ctx, []bridges.BridgeName{"bridge1"})`
$DIR/core/bridges/orm_test.go: `bts, err = orm.FindBridges(ctx, []bridges.BridgeName{"bridge1", "bridgeX"})`
$DIR/core/bridges/orm_test.go: `bts, err = orm.FindBridges(ctx, []bridges.BridgeName{"bridgeY", "bridgeX"})`
$DIR/core/bridges/orm_test.go: `bts, err = orm.FindBridges(ctx, []bridges.BridgeName{})`
$DIR/core/bridges/orm_test.go: `bt.Name = bridges.MustParseBridgeName("solargridreporting")`
$DIR/core/bridges/orm_test.go: `bt.URL = cltest.WebURL(t, "https://denergy.eth")`
$DIR/core/bridges/orm_test.go: `t.Run(test.description, func(t *testing.T) {
tt, err := orm.FindBridge(ctx, test.name)
tt.CreatedAt = test.want.CreatedAt
tt.UpdatedAt = test.want.UpdatedAt
if test.errored {
require.Error(t, err)
} else {
// we can't make any assumptions about the return type if scanning failed
require.Equal(t, test.want, tt)
}
})`
$DIR/core/bridges/orm_test.go: `tt.CreatedAt = test.want.CreatedAt`
$DIR/core/bridges/orm_test.go: `tt.UpdatedAt = test.want.UpdatedAt`
$DIR/core/bridges/orm_test.go: `bs, count, err = orm.BridgeTypes(ctx, 0, 10)`
$DIR/core/bridges/orm_test.go: `_, err = orm.GetCachedResponse(ctx, "dot", specID, 1*time.Second)`
$DIR/core/bridges/orm_test.go: `err = orm.UpsertBridgeResponse(ctx, "dot", specID, []byte{111, 222, 2})`
$DIR/core/bridges/orm_test.go: `_, err = orm.FindExternalInitiator(ctx, token)`
$DIR/core/bridges/orm_test.go: `_, err = orm.FindExternalInitiatorByName(ctx, exi.Name)`
$DIR/core/bridges/orm_test.go: `err = orm.DeleteExternalInitiator(ctx, exi.Name)`
$DIR/core/bridges/orm_test.go: `_, err = orm.FindExternalInitiator(ctx, token)`
$DIR/core/bridges/orm_test.go: `_, err = orm.FindExternalInitiatorByName(ctx, exi.Name)`
$DIR/core/bridges/orm_test.go: `.WebURL(t, "https://bridge1.com")`
$DIR/core/bridges/orm_test.go: `.Context(t)`
$DIR/core/bridges/orm_test.go: `.WebURL(t, "https://bridge2.com")`
$DIR/core/bridges/orm_test.go: `.FindBridges(ctx, []bridges.BridgeName{"bridge2", "bridge1"})`
$DIR/core/bridges/orm_test.go: `.FindBridges(ctx, []bridges.BridgeName{"bridge1"})`
$DIR/core/bridges/orm_test.go: `.FindBridges(ctx, []bridges.BridgeName{"bridge1", "bridgeX"})`
$DIR/core/bridges/orm_test.go: `.FindBridges(ctx, []bridges.BridgeName{"bridgeY", "bridgeX"})`
$DIR/core/bridges/orm_test.go: `.FindBridges(ctx, []bridges.BridgeName{})`
$DIR/core/bridges/orm_test.go: `.Context(t)`
$DIR/core/bridges/orm_test.go: `.MustParseBridgeName("solargridreporting")`
$DIR/core/bridges/orm_test.go: `.WebURL(t, "https://denergy.eth")`
$DIR/core/bridges/orm_test.go: `.Run(test.description, func(t *testing.T) {
tt, err := orm.FindBridge(ctx, test.name)
tt.CreatedAt = test.want.CreatedAt
tt.UpdatedAt = test.want.UpdatedAt
if test.errored {
require.Error(t, err)
} else {
// we can't make any assumptions about the return type if scanning failed
require.Equal(t, test.want, tt)
}
})`
$DIR/core/bridges/orm_test.go: `.FindBridge(ctx, test.name)`
$DIR/core/bridges/orm_test.go: `.Context(t)`
$DIR/core/bridges/orm_test.go: `.WebURL(t, "http:/oneurl.com")`
$DIR/core/bridges/orm_test.go: `.WebURL(t, "http:/updatedurl.com")`
$DIR/core/bridges/orm_test.go: `.FindBridge(ctx, "UniqueName")`
$DIR/core/bridges/orm_test.go: `.BridgeTypes(ctx, 0, 10)`
$DIR/core/bridges/orm_test.go: `.BridgeTypes(ctx, 0, 10)`
$DIR/core/bridges/orm_test.go: `.Context(t)`
$DIR/core/bridges/orm_test.go: `.NewGeneralConfig(t, nil)`
$DIR/core/bridges/orm_test.go: `.NewSqlxDB(t)`
$DIR/core/bridges/orm_test.go: `.NewORM(db)`
$DIR/core/bridges/orm_test.go: `.NewORM(db, logger.TestLogger(t), cfg.JobPipeline().MaxSuccessfulRuns())`
$DIR/core/bridges/orm_test.go: `.TestLogger(t)`
$DIR/core/bridges/orm_test.go: `.JobPipeline()`
$DIR/core/bridges/orm_test.go: `.MaxSuccessfulRuns()`
$DIR/core/bridges/orm_test.go: `.CreateSpec(ctx, pipeline.Pipeline{}, *models.NewInterval(5 * time.Minute))`
$DIR/core/bridges/orm_test.go: `.NewInterval(5 * time.Minute)`
$DIR/core/bridges/orm_test.go: `.GetCachedResponse(ctx, "dot", specID, 1*time.Second)`
$DIR/core/bridges/orm_test.go: `.UpsertBridgeResponse(ctx, "dot", specID, []byte{111, 222, 2})`
$DIR/core/bridges/orm_test.go: `.GetCachedResponse(ctx, "dot", specID, 1*time.Second)`
$DIR/core/bridges/orm_test.go: `.Context(t)`
$DIR/core/bridges/orm_test.go: `.NewToken()`
$DIR/core/bridges/orm_test.go: `.New()`
$DIR/core/bridges/orm_test.go: `.String()`
$DIR/core/bridges/orm_test.go: `.NewExternalInitiator(token, &req)`
$DIR/core/bridges/orm_test.go: `.NewExternalInitiator(token, &req)`
$DIR/core/bridges/orm_test.go: `.Context(t)`
$DIR/core/bridges/orm_test.go: `.NewToken()`
$DIR/core/bridges/orm_test.go: `.New()`
$DIR/core/bridges/orm_test.go: `.String()`
$DIR/core/bridges/orm_test.go: `.NewExternalInitiator(token, &req)`
$DIR/core/bridges/orm_test.go: `.FindExternalInitiator(ctx, token)`
$DIR/core/bridges/orm_test.go: `.FindExternalInitiatorByName(ctx, exi.Name)`
$DIR/core/bridges/orm_test.go: `.DeleteExternalInitiator(ctx, exi.Name)`
$DIR/core/bridges/orm_test.go: `.FindExternalInitiator(ctx, token)`
$DIR/core/bridges/orm_test.go: `.FindExternalInitiatorByName(ctx, exi.Name)`
$DIR/core/bridges/orm_test.go: `.CreateExternalInitiator(ctx, exi)`
$DIR/core/capabilities/registry_test.go: `err = r.Add(ctx, c)`
$DIR/core/capabilities/registry_test.go: `err = r.Add(ctx, c)`
$DIR/core/capabilities/registry_test.go: `ci, err = capabilities.NewCapabilityInfo(
id,
capabilities.CapabilityTypeConsensus,
"capability-2-description",
)`
$DIR/core/capabilities/registry_test.go: `err = r.Add(ctx, c2)`
$DIR/core/capabilities/registry_test.go: `t.Run(tc.name, func(t *testing.T) {
id, err := tc.newCapability(ctx, reg)
require.NoError(t, err)
err = tc.getCapability(ctx, reg, id)
require.NoError(t, err)
})`
$DIR/core/capabilities/registry_test.go: `err = tc.getCapability(ctx, reg, id)`
$DIR/core/capabilities/registry_test.go: `.Context(t)`
$DIR/core/capabilities/registry_test.go: `.NewRegistry(logger.TestLogger(t))`
$DIR/core/capabilities/registry_test.go: `.TestLogger(t)`
$DIR/core/capabilities/registry_test.go: `.NewCapabilityInfo(
id,
capabilities.CapabilityTypeAction,
"capability-1-description",
)`
$DIR/core/capabilities/registry_test.go: `.Add(ctx, c)`
$DIR/core/capabilities/registry_test.go: `.Get(ctx, id)`
$DIR/core/capabilities/registry_test.go: `.List(ctx)`
$DIR/core/capabilities/registry_test.go: `.Context(t)`
$DIR/core/capabilities/registry_test.go: `.NewRegistry(logger.TestLogger(t))`
$DIR/core/capabilities/registry_test.go: `.TestLogger(t)`
$DIR/core/capabilities/registry_test.go: `.NewCapabilityInfo(
id,
capabilities.CapabilityTypeAction,
"capability-1-description",
)`
$DIR/core/capabilities/registry_test.go: `.Add(ctx, c)`
$DIR/core/capabilities/registry_test.go: `.NewCapabilityInfo(
id,
capabilities.CapabilityTypeConsensus,
"capability-2-description",
)`
$DIR/core/capabilities/registry_test.go: `.Add(ctx, c2)`
$DIR/core/capabilities/registry_test.go: `.Sprintf("%s@%s", uuid.New().String(), "1.0.0")`
$DIR/core/capabilities/registry_test.go: `.New()`
$DIR/core/capabilities/registry_test.go: `.String()`
$DIR/core/capabilities/registry_test.go: `.NewCapabilityInfo(
id,
capabilities.CapabilityTypeAction,
"capability-1-description",
)`
$DIR/core/capabilities/registry_test.go: `.Add(ctx, c)`
$DIR/core/capabilities/registry_test.go: `.GetAction(ctx, id)`
$DIR/core/capabilities/registry_test.go: `.Sprintf("%s@%s", uuid.New().String(), "1.0.0")`
$DIR/core/capabilities/registry_test.go: `.New()`
$DIR/core/capabilities/registry_test.go: `.String()`
$DIR/core/capabilities/registry_test.go: `.NewCapabilityInfo(
id,
capabilities.CapabilityTypeTarget,
"capability-1-description",
)`
$DIR/core/capabilities/registry_test.go: `.Add(ctx, c)`
$DIR/core/capabilities/registry_test.go: `.GetTarget(ctx, id)`
$DIR/core/capabilities/registry_test.go: `.NewOnDemand(logger.TestLogger(t))`
$DIR/core/capabilities/registry_test.go: `.TestLogger(t)`
$DIR/core/capabilities/registry_test.go: `.Info(ctx)`
$DIR/core/capabilities/registry_test.go: `.Add(ctx, odt)`
$DIR/core/capabilities/registry_test.go: `.GetTrigger(ctx, id)`
$DIR/core/capabilities/registry_test.go: `.Sprintf("%s@%s", uuid.New().String(), "1.0.0")`
$DIR/core/capabilities/registry_test.go: `.New()`
$DIR/core/capabilities/registry_test.go: `.String()`
$DIR/core/capabilities/registry_test.go: `.NewCapabilityInfo(
id,
capabilities.CapabilityTypeConsensus,
"capability-1-description",
)`
$DIR/core/capabilities/registry_test.go: `.Add(ctx, c)`
$DIR/core/capabilities/registry_test.go: `.GetConsensus(ctx, id)`
$DIR/core/capabilities/registry_test.go: `.Context(t)`
$DIR/core/capabilities/registry_test.go: `.NewRegistry(logger.TestLogger(t))`
$DIR/core/capabilities/registry_test.go: `.TestLogger(t)`
$DIR/core/capabilities/registry_test.go: `.Run(tc.name, func(t *testing.T) {
id, err := tc.newCapability(ctx, reg)
require.NoError(t, err)
err = tc.getCapability(ctx, reg, id)
require.NoError(t, err)
})`
$DIR/core/capabilities/registry_test.go: `.newCapability(ctx, reg)`
$DIR/core/capabilities/registry_test.go: `.getCapability(ctx, reg, id)`
$DIR/core/capabilities/remote/dispatcher_test.go: `peer.On("Receive", mock.Anything).Return(recvCh)`
$DIR/core/capabilities/remote/dispatcher_test.go: `peer.On("ID", mock.Anything).Return(p2ptypes.PeerID{})`
$DIR/core/capabilities/remote/dispatcher_test.go: `wrapper.On("GetPeer").Return(peer)`
$DIR/core/capabilities/remote/dispatcher_test.go: `peer.On("Receive", mock.Anything).Return((<-chan p2ptypes.Message)(recvCh))`
$DIR/core/capabilities/remote/dispatcher_test.go: `peer.On("ID", mock.Anything).Return(peerId2)`
$DIR/core/capabilities/remote/dispatcher_test.go: `wrapper.On("GetPeer").Return(peer)`
$DIR/core/capabilities/remote/dispatcher_test.go: `signer.On("Sign", mock.Anything).Return(nil, errors.New("not implemented"))`
$DIR/core/capabilities/remote/dispatcher_test.go: `recvCh <- encodeAndSign(t, privKey1, peerId1, peerId2, capId1, donId1, []byte(payload1))`
$DIR/core/capabilities/remote/dispatcher_test.go: `recvCh <- encodeAndSign(t, privKey1, peerId1, peerId2, capId2, donId1, []byte(payload1))`
$DIR/core/capabilities/remote/dispatcher_test.go: `invalid.Sender = peerId2`
$DIR/core/capabilities/remote/dispatcher_test.go: `recvCh <- invalid`
$DIR/core/capabilities/remote/dispatcher_test.go: `recvCh <- encodeAndSign(t, privKey1, peerId1, peerId2, capId1, donId1, []byte(payload2))`
$DIR/core/capabilities/remote/dispatcher_test.go: `m = <-rcv.ch`
$DIR/core/capabilities/remote/dispatcher_test.go: `dispatcher.RemoveReceiver(capId1, donId1)`
$DIR/core/capabilities/remote/dispatcher_test.go: `peer.On("Receive", mock.Anything).Return((<-chan p2ptypes.Message)(recvCh))`
$DIR/core/capabilities/remote/dispatcher_test.go: `peer.On("ID", mock.Anything).Return(peerId2)`
$DIR/core/capabilities/remote/dispatcher_test.go: `peer.On("Send", mock.Anything, mock.Anything).Run(func(args mock.Arguments) {
peerID := args.Get(0).(p2ptypes.PeerID)
sendCh <- peerID
}).Return(nil)`
$DIR/core/capabilities/remote/dispatcher_test.go: `sendCh <- peerID`
$DIR/core/capabilities/remote/dispatcher_test.go: `wrapper.On("GetPeer").Return(peer)`
$DIR/core/capabilities/remote/dispatcher_test.go: `signer.On("Sign", mock.Anything).Return([]byte{}, nil)`
$DIR/core/capabilities/remote/dispatcher_test.go: `recvCh <- encodeAndSign(t, privKey1, peerId1, peerId2, capId1, donId1, []byte(payload1))`
$DIR/core/capabilities/remote/dispatcher_test.go: `.TestLogger(t)`
$DIR/core/capabilities/remote/dispatcher_test.go: `.Context(t)`
$DIR/core/capabilities/remote/dispatcher_test.go: `.NewPeer(t)`
$DIR/core/capabilities/remote/dispatcher_test.go: `.On("Receive", mock.Anything)`
$DIR/core/capabilities/remote/dispatcher_test.go: `.Return(recvCh)`
$DIR/core/capabilities/remote/dispatcher_test.go: `.On("ID", mock.Anything)`
$DIR/core/capabilities/remote/dispatcher_test.go: `.Return(p2ptypes.PeerID{})`
$DIR/core/capabilities/remote/dispatcher_test.go: `.NewPeerWrapper(t)`
$DIR/core/capabilities/remote/dispatcher_test.go: `.On("GetPeer")`
$DIR/core/capabilities/remote/dispatcher_test.go: `.Return(peer)`
$DIR/core/capabilities/remote/dispatcher_test.go: `.NewSigner(t)`
$DIR/core/capabilities/remote/dispatcher_test.go: `.NewCapabilitiesRegistry(t)`
$DIR/core/capabilities/remote/dispatcher_test.go: `.NewDispatcher(wrapper, signer, registry, lggr)`
$DIR/core/capabilities/remote/dispatcher_test.go: `.TestLogger(t)`
$DIR/core/capabilities/remote/dispatcher_test.go: `.Context(t)`
$DIR/core/capabilities/remote/dispatcher_test.go: `.NewPeer(t)`
$DIR/core/capabilities/remote/dispatcher_test.go: `.On("Receive", mock.Anything)`
$DIR/core/capabilities/remote/dispatcher_test.go: `.Return((<-chan p2ptypes.Message)(recvCh))`
$DIR/core/capabilities/remote/dispatcher_test.go: `.On("ID", mock.Anything)`
$DIR/core/capabilities/remote/dispatcher_test.go: `.Return(peerId2)`
$DIR/core/capabilities/remote/dispatcher_test.go: `.NewPeerWrapper(t)`
$DIR/core/capabilities/remote/dispatcher_test.go: `.On("GetPeer")`
$DIR/core/capabilities/remote/dispatcher_test.go: `.Return(peer)`
$DIR/core/capabilities/remote/dispatcher_test.go: `.NewSigner(t)`
$DIR/core/capabilities/remote/dispatcher_test.go: `.On("Sign", mock.Anything)`
$DIR/core/capabilities/remote/dispatcher_test.go: `.Return(nil, errors.New("not implemented"))`
$DIR/core/capabilities/remote/dispatcher_test.go: `.New("not implemented")`
$DIR/core/capabilities/remote/dispatcher_test.go: `.NewCapabilitiesRegistry(t)`
$DIR/core/capabilities/remote/dispatcher_test.go: `.NewDispatcher(wrapper, signer, registry, lggr)`
$DIR/core/capabilities/remote/dispatcher_test.go: `.SetReceiver(capId1, donId1, rcv)`
$DIR/core/capabilities/remote/dispatcher_test.go: `.RemoveReceiver(capId1, donId1)`
$DIR/core/capabilities/remote/dispatcher_test.go: `.TestLogger(t)`
$DIR/core/capabilities/remote/dispatcher_test.go: `.Context(t)`
$DIR/core/capabilities/remote/dispatcher_test.go: `.NewPeer(t)`
$DIR/core/capabilities/remote/dispatcher_test.go: `.On("Receive", mock.Anything)`
$DIR/core/capabilities/remote/dispatcher_test.go: `.Return((<-chan p2ptypes.Message)(recvCh))`
$DIR/core/capabilities/remote/dispatcher_test.go: `.On("ID", mock.Anything)`
$DIR/core/capabilities/remote/dispatcher_test.go: `.Return(peerId2)`
$DIR/core/capabilities/remote/dispatcher_test.go: `.On("Send", mock.Anything, mock.Anything)`
$DIR/core/capabilities/remote/dispatcher_test.go: `.Run(func(args mock.Arguments) {
peerID := args.Get(0).(p2ptypes.PeerID)
sendCh <- peerID
})`
$DIR/core/capabilities/remote/dispatcher_test.go: `.Get(0)`
$DIR/core/capabilities/remote/dispatcher_test.go: `.Return(nil)`
$DIR/core/capabilities/remote/dispatcher_test.go: `.NewPeerWrapper(t)`
$DIR/core/capabilities/remote/dispatcher_test.go: `.On("GetPeer")`
$DIR/core/capabilities/remote/dispatcher_test.go: `.Return(peer)`
$DIR/core/capabilities/remote/dispatcher_test.go: `.NewSigner(t)`
$DIR/core/capabilities/remote/dispatcher_test.go: `.On("Sign", mock.Anything)`
$DIR/core/capabilities/remote/dispatcher_test.go: `.Return([]byte{}, nil)`
$DIR/core/capabilities/remote/dispatcher_test.go: `.NewCapabilitiesRegistry(t)`
$DIR/core/capabilities/remote/dispatcher_test.go: `.NewDispatcher(wrapper, signer, registry, lggr)`
$DIR/core/capabilities/remote/message_cache_test.go: `ts = cache.Insert(eventId1, peerId2, 200, []byte(payloadA))`
$DIR/core/capabilities/remote/message_cache_test.go: `ready, _ = cache.Ready(eventId1, 2, 150, true)`
$DIR/core/capabilities/remote/message_cache_test.go: `ready, _ = cache.Ready(eventId1, 2, 100, true)`
$DIR/core/capabilities/remote/message_cache_test.go: `ts = cache.Insert(eventId2, peerId2, 200, []byte(payloadA))`
$DIR/core/capabilities/remote/message_cache_test.go: `deleted = cache.DeleteOlderThan(150)`
$DIR/core/capabilities/remote/message_cache_test.go: `deleted = cache.DeleteOlderThan(201)`
$DIR/core/capabilities/remote/message_cache_test.go: `.NewMessageCache[string, string]()`
$DIR/core/capabilities/remote/message_cache_test.go: `.Insert(eventId1, peerId1, 100, []byte(payloadA))`
$DIR/core/capabilities/remote/message_cache_test.go: `.Ready(eventId1, 2, 100, true)`
$DIR/core/capabilities/remote/message_cache_test.go: `.Insert(eventId1, peerId2, 200, []byte(payloadA))`
$DIR/core/capabilities/remote/message_cache_test.go: `.Ready(eventId1, 2, 150, true)`
$DIR/core/capabilities/remote/message_cache_test.go: `.Ready(eventId1, 2, 100, true)`
$DIR/core/capabilities/remote/message_cache_test.go: `.Ready(eventId1, 2, 100, true)`
$DIR/core/capabilities/remote/message_cache_test.go: `.NewMessageCache[string, string]()`
$DIR/core/capabilities/remote/message_cache_test.go: `.Insert(eventId1, peerId1, 100, []byte(payloadA))`
$DIR/core/capabilities/remote/message_cache_test.go: `.Insert(eventId2, peerId2, 200, []byte(payloadA))`
$DIR/core/capabilities/remote/message_cache_test.go: `.DeleteOlderThan(150)`
$DIR/core/capabilities/remote/message_cache_test.go: `.DeleteOlderThan(150)`
$DIR/core/capabilities/remote/message_cache_test.go: `.DeleteOlderThan(201)`
$DIR/core/capabilities/remote/target/client_test.go: `testClient(ctx, t, 1, responseTimeOut, 1, 0,
capability, transmissionSchedule, responseTest)`
$DIR/core/capabilities/remote/target/client_test.go: `testClient(ctx, t, 10, responseTimeOut, 1, 0,
capability, transmissionSchedule, responseTest)`
$DIR/core/capabilities/remote/target/client_test.go: `testClient(ctx, t, 1, responseTimeOut, 10, 3,
capability, transmissionSchedule, responseTest)`
$DIR/core/capabilities/remote/target/client_test.go: `testClient(ctx, t, 10, responseTimeOut, 10, 3,
capability, transmissionSchedule, responseTest)`
$DIR/core/capabilities/remote/target/client_test.go: `testClient(ctx, t, 1, responseTimeOut, 1, 0,
capability, transmissionSchedule, responseTest)`
$DIR/core/capabilities/remote/target/client_test.go: `testClient(ctx, t, 10, responseTimeOut, 10, 3,
capability, transmissionSchedule, responseTest)`
$DIR/core/capabilities/remote/target/client_test.go: `transmissionSchedule, err = values.NewMap(map[string]any{
"schedule": transmission.Schedule_AllAtOnce,
"deltaStage": "10ms",
})`
$DIR/core/capabilities/remote/target/client_test.go: `testClient(ctx, t, 1, responseTimeOut, 1, 0,
capability, transmissionSchedule, responseTest)`
$DIR/core/capabilities/remote/target/client_test.go: `.WithCancel(testutils.Context(t))`
$DIR/core/capabilities/remote/target/client_test.go: `.Context(t)`
$DIR/core/capabilities/remote/target/client_test.go: `.NewMap(map[string]any{
"schedule": transmission.Schedule_OneAtATime,
"deltaStage": "10ms",
})`
$DIR/core/capabilities/remote/target/client_test.go: `.Value.Unwrap()`
$DIR/core/capabilities/remote/target/client_test.go: `.WithCancel(testutils.Context(t))`
$DIR/core/capabilities/remote/target/client_test.go: `.Context(t)`
$DIR/core/capabilities/remote/target/client_test.go: `.Value.Unwrap()`
$DIR/core/capabilities/remote/target/client_test.go: `.NewMap(map[string]any{
"schedule": transmission.Schedule_OneAtATime,
"deltaStage": "10ms",
})`
$DIR/core/capabilities/remote/target/client_test.go: `.NewMap(map[string]any{
"schedule": transmission.Schedule_AllAtOnce,
"deltaStage": "10ms",
})`
$DIR/core/capabilities/remote/target/client_test.go: `.WithCancel(testutils.Context(t))`
$DIR/core/capabilities/remote/target/client_test.go: `.Context(t)`
$DIR/core/capabilities/remote/target/client_test.go: `.NewMap(map[string]any{
"schedule": transmission.Schedule_AllAtOnce,
"deltaStage": "10ms",
})`
$DIR/core/capabilities/remote/target/endtoend_test.go: `testRemoteTarget(ctx, t, capability, 10, 9, timeOut, 10, 9, timeOut, transmissionSchedule, responseTest)`
$DIR/core/capabilities/remote/target/endtoend_test.go: `transmissionSchedule, err = values.NewMap(map[string]any{
"schedule": transmission.Schedule_AllAtOnce,
"deltaStage": "10ms",
})`
$DIR/core/capabilities/remote/target/endtoend_test.go: `testRemoteTarget(ctx, t, capability, 1, 0, timeOut, 1, 0, timeOut, transmissionSchedule, responseTest)`
$DIR/core/capabilities/remote/target/endtoend_test.go: `testRemoteTarget(ctx, t, capability, 4, 3, timeOut, 1, 0, timeOut, transmissionSchedule, responseTest)`
$DIR/core/capabilities/remote/target/endtoend_test.go: `testRemoteTarget(ctx, t, capability, 10, 3, timeOut, 1, 0, timeOut, transmissionSchedule, responseTest)`
$DIR/core/capabilities/remote/target/endtoend_test.go: `testRemoteTarget(ctx, t, capability, 1, 0, timeOut, 1, 0, timeOut, transmissionSchedule, responseTest)`
$DIR/core/capabilities/remote/target/endtoend_test.go: `testRemoteTarget(ctx, t, capability, 1, 0, timeOut, 4, 3, timeOut, transmissionSchedule, responseTest)`
$DIR/core/capabilities/remote/target/endtoend_test.go: `testRemoteTarget(ctx, t, capability, 1, 0, timeOut, 10, 3, timeOut, transmissionSchedule, responseTest)`
$DIR/core/capabilities/remote/target/endtoend_test.go: `testRemoteTarget(ctx, t, capability, 4, 3, timeOut, 4, 3, timeOut, transmissionSchedule, responseTest)`
$DIR/core/capabilities/remote/target/endtoend_test.go: `testRemoteTarget(ctx, t, capability, 10, 3, timeOut, 10, 3, timeOut, transmissionSchedule, responseTest)`
$DIR/core/capabilities/remote/target/endtoend_test.go: `.WithCancel(testutils.Context(t))`
$DIR/core/capabilities/remote/target/endtoend_test.go: `.Context(t)`
$DIR/core/capabilities/remote/target/endtoend_test.go: `.NewMap(map[string]any{
"schedule": transmission.Schedule_AllAtOnce,
"deltaStage": "10ms",
})`
$DIR/core/capabilities/remote/target/endtoend_test.go: `.WithCancel(testutils.Context(t))`
$DIR/core/capabilities/remote/target/endtoend_test.go: `.Context(t)`
$DIR/core/capabilities/remote/target/endtoend_test.go: `.NewMap(map[string]any{
"schedule": transmission.Schedule_AllAtOnce,
"deltaStage": "10ms",
})`
$DIR/core/capabilities/remote/target/endtoend_test.go: `.WithCancel(testutils.Context(t))`
$DIR/core/capabilities/remote/target/endtoend_test.go: `.Context(t)`
$DIR/core/capabilities/remote/target/endtoend_test.go: `.Value.Unwrap()`
$DIR/core/capabilities/remote/target/endtoend_test.go: `.NewMap(map[string]any{
"schedule": transmission.Schedule_OneAtATime,
"deltaStage": "10ms",
})`
$DIR/core/capabilities/remote/target/endtoend_test.go: `.NewMap(map[string]any{
"schedule": transmission.Schedule_AllAtOnce,
"deltaStage": "10ms",
})`
$DIR/core/capabilities/remote/target/endtoend_test.go: `.WithCancel(testutils.Context(t))`
$DIR/core/capabilities/remote/target/endtoend_test.go: `.Context(t)`
$DIR/core/capabilities/remote/target/endtoend_test.go: `.Value.Unwrap()`
$DIR/core/capabilities/remote/target/endtoend_test.go: `.NewMap(map[string]any{
"schedule": transmission.Schedule_OneAtATime,
"deltaStage": "10ms",
})`
$DIR/core/capabilities/remote/target/endtoend_test.go: `.WithCancel(testutils.Context(t))`
$DIR/core/capabilities/remote/target/endtoend_test.go: `.Context(t)`
$DIR/core/capabilities/remote/target/endtoend_test.go: `.NewMap(map[string]any{
"schedule": transmission.Schedule_AllAtOnce,
"deltaStage": "10ms",
})`
$DIR/core/capabilities/remote/target/endtoend_test.go: `.WithCancel(testutils.Context(t))`
$DIR/core/capabilities/remote/target/endtoend_test.go: `.Context(t)`
$DIR/core/capabilities/remote/target/endtoend_test.go: `.NewMap(map[string]any{
"schedule": transmission.Schedule_AllAtOnce,
"deltaStage": "10ms",
})`
$DIR/core/capabilities/remote/target/request/client_request_test.go: `capabilityPeers[i] = NewP2PPeerID(t)`
$DIR/core/capabilities/remote/target/request/client_request_test.go: `workflowPeers[i] = NewP2PPeerID(t)`
$DIR/core/capabilities/remote/target/request/client_request_test.go: `t.Run("Send second message with different response", func(t *testing.T) {
ctx, cancel := context.WithCancel(context.Background())
defer cancel()
dispatcher := &clientRequestTestDispatcher{msgs: make(chan *types.MessageBody, 100)}
request, err := request.NewClientRequest(ctx, lggr, capabilityRequest, messageID, capInfo,
workflowDonInfo, dispatcher, 10*time.Minute)
require.NoError(t, err)
capabilityResponse2 := commoncap.CapabilityResponse{
Value: values.NewString("response2"),
Err: nil,
}
rawResponse2, err := pb.MarshalCapabilityResponse(capabilityResponse2)
require.NoError(t, err)
msg2 := &types.MessageBody{
CapabilityId: capInfo.ID,
CapabilityDonId: capDonInfo.ID,
CallerDonId: workflowDonInfo.ID,
Method: types.MethodExecute,
Payload: rawResponse2,
MessageId: []byte("messageID"),
}
msg.Sender = capabilityPeers[0][:]
err = request.OnMessage(ctx, msg)
require.NoError(t, err)
msg2.Sender = capabilityPeers[1][:]
err = request.OnMessage(ctx, msg2)
require.NoError(t, err)
select {
case <-request.ResponseChan():
t.Fatal("expected no response")
default:
}
})`
$DIR/core/capabilities/remote/target/request/client_request_test.go: `msg.Sender = capabilityPeers[0][:]`
$DIR/core/capabilities/remote/target/request/client_request_test.go: `err = request.OnMessage(ctx, msg)`
$DIR/core/capabilities/remote/target/request/client_request_test.go: `msg2.Sender = capabilityPeers[1][:]`
$DIR/core/capabilities/remote/target/request/client_request_test.go: `err = request.OnMessage(ctx, msg2)`
$DIR/core/capabilities/remote/target/request/client_request_test.go: `t.Run("Send second message from non calling Don peer", func(t *testing.T) {
ctx, cancel := context.WithCancel(context.Background())
defer cancel()
dispatcher := &clientRequestTestDispatcher{msgs: make(chan *types.MessageBody, 100)}
request, err := request.NewClientRequest(ctx, lggr, capabilityRequest, messageID, capInfo,
workflowDonInfo, dispatcher, 10*time.Minute)
require.NoError(t, err)
msg.Sender = capabilityPeers[0][:]
err = request.OnMessage(ctx, msg)
require.NoError(t, err)
nonDonPeer := NewP2PPeerID(t)
msg.Sender = nonDonPeer[:]
err = request.OnMessage(ctx, msg)
require.NotNil(t, err)
select {
case <-request.ResponseChan():
t.Fatal("expected no response")
default:
}
})`
$DIR/core/capabilities/remote/target/request/client_request_test.go: `msg.Sender = capabilityPeers[0][:]`
$DIR/core/capabilities/remote/target/request/client_request_test.go: `err = request.OnMessage(ctx, msg)`
$DIR/core/capabilities/remote/target/request/client_request_test.go: `msg.Sender = nonDonPeer[:]`
$DIR/core/capabilities/remote/target/request/client_request_test.go: `err = request.OnMessage(ctx, msg)`
$DIR/core/capabilities/remote/target/request/client_request_test.go: `t.Run("Send second message from same peer as first message", func(t *testing.T) {
ctx, cancel := context.WithCancel(context.Background())
defer cancel()
dispatcher := &clientRequestTestDispatcher{msgs: make(chan *types.MessageBody, 100)}
request, err := request.NewClientRequest(ctx, lggr, capabilityRequest, messageID, capInfo,
workflowDonInfo, dispatcher, 10*time.Minute)
require.NoError(t, err)
msg.Sender = capabilityPeers[0][:]
err = request.OnMessage(ctx, msg)
require.NoError(t, err)
err = request.OnMessage(ctx, msg)
require.NotNil(t, err)
select {
case <-request.ResponseChan():
t.Fatal("expected no response")
default:
}
})`
$DIR/core/capabilities/remote/target/request/client_request_test.go: `msg.Sender = capabilityPeers[0][:]`
$DIR/core/capabilities/remote/target/request/client_request_test.go: `err = request.OnMessage(ctx, msg)`
$DIR/core/capabilities/remote/target/request/client_request_test.go: `err = request.OnMessage(ctx, msg)`
$DIR/core/capabilities/remote/target/request/client_request_test.go: `t.Run("Send second message with same error as first", func(t *testing.T) {
ctx, cancel := context.WithCancel(context.Background())
defer cancel()
dispatcher := &clientRequestTestDispatcher{msgs: make(chan *types.MessageBody, 100)}
request, err := request.NewClientRequest(ctx, lggr, capabilityRequest, messageID, capInfo,
workflowDonInfo, dispatcher, 10*time.Minute)
require.NoError(t, err)
<-dispatcher.msgs
<-dispatcher.msgs
assert.Equal(t, 0, len(dispatcher.msgs))
msgWithError := &types.MessageBody{
CapabilityId: capInfo.ID,
CapabilityDonId: capDonInfo.ID,
CallerDonId: workflowDonInfo.ID,
Method: types.MethodExecute,
Payload: rawResponse,
MessageId: []byte("messageID"),
Error: types.Error_INTERNAL_ERROR,
ErrorMsg: "an error",
}
msgWithError.Sender = capabilityPeers[0][:]
err = request.OnMessage(ctx, msgWithError)
require.NoError(t, err)
msgWithError.Sender = capabilityPeers[1][:]
err = request.OnMessage(ctx, msgWithError)
require.NoError(t, err)
response := <-request.ResponseChan()
assert.Equal(t, "an error", response.Err.Error())
})`
$DIR/core/capabilities/remote/target/request/client_request_test.go: `<-dispatcher.msgs`
$DIR/core/capabilities/remote/target/request/client_request_test.go: `<-dispatcher.msgs`
$DIR/core/capabilities/remote/target/request/client_request_test.go: `msgWithError.Sender = capabilityPeers[0][:]`
$DIR/core/capabilities/remote/target/request/client_request_test.go: `err = request.OnMessage(ctx, msgWithError)`
$DIR/core/capabilities/remote/target/request/client_request_test.go: `msgWithError.Sender = capabilityPeers[1][:]`
$DIR/core/capabilities/remote/target/request/client_request_test.go: `err = request.OnMessage(ctx, msgWithError)`
$DIR/core/capabilities/remote/target/request/client_request_test.go: `t.Run("Send second message with different error to first", func(t *testing.T) {
ctx, cancel := context.WithCancel(context.Background())
defer cancel()
dispatcher := &clientRequestTestDispatcher{msgs: make(chan *types.MessageBody, 100)}
request, err := request.NewClientRequest(ctx, lggr, capabilityRequest, messageID, capInfo,
workflowDonInfo, dispatcher, 10*time.Minute)
require.NoError(t, err)
<-dispatcher.msgs
<-dispatcher.msgs
assert.Equal(t, 0, len(dispatcher.msgs))
msgWithError := &types.MessageBody{
CapabilityId: capInfo.ID,
CapabilityDonId: capDonInfo.ID,
CallerDonId: workflowDonInfo.ID,
Method: types.MethodExecute,
Payload: rawResponse,
MessageId: []byte("messageID"),
Error: types.Error_INTERNAL_ERROR,
ErrorMsg: "an error",
Sender: capabilityPeers[0][:],
}
msgWithError2 := &types.MessageBody{
CapabilityId: capInfo.ID,
CapabilityDonId: capDonInfo.ID,
CallerDonId: workflowDonInfo.ID,
Method: types.MethodExecute,
Payload: rawResponse,
MessageId: []byte("messageID"),
Error: types.Error_INTERNAL_ERROR,
ErrorMsg: "an error2",
Sender: capabilityPeers[1][:],
}
err = request.OnMessage(ctx, msgWithError)
require.NoError(t, err)
err = request.OnMessage(ctx, msgWithError2)
require.NoError(t, err)
select {
case <-request.ResponseChan():
t.Fatal("expected no response")
default:
}
})`
$DIR/core/capabilities/remote/target/request/client_request_test.go: `<-dispatcher.msgs`
$DIR/core/capabilities/remote/target/request/client_request_test.go: `<-dispatcher.msgs`
$DIR/core/capabilities/remote/target/request/client_request_test.go: `err = request.OnMessage(ctx, msgWithError)`
$DIR/core/capabilities/remote/target/request/client_request_test.go: `err = request.OnMessage(ctx, msgWithError2)`
$DIR/core/capabilities/remote/target/request/client_request_test.go: `<-dispatcher.msgs`
$DIR/core/capabilities/remote/target/request/client_request_test.go: `<-dispatcher.msgs`
$DIR/core/capabilities/remote/target/request/client_request_test.go: `msg.Sender = capabilityPeers[0][:]`
$DIR/core/capabilities/remote/target/request/client_request_test.go: `err = request.OnMessage(ctx, msg)`
$DIR/core/capabilities/remote/target/request/client_request_test.go: `msg.Sender = capabilityPeers[1][:]`
$DIR/core/capabilities/remote/target/request/client_request_test.go: `err = request.OnMessage(ctx, msg)`
$DIR/core/capabilities/remote/target/request/client_request_test.go: `.TestLogger(t)`
$DIR/core/capabilities/remote/target/request/client_request_test.go: `.NewMap(
map[string]any{
"executeValue1": "aValue1",
},
)`
$DIR/core/capabilities/remote/target/request/client_request_test.go: `.NewMap(map[string]any{
"schedule": transmission.Schedule_OneAtATime,
"deltaStage": "1000ms",
})`
$DIR/core/capabilities/remote/target/request/client_request_test.go: `.NewString("response1")`
$DIR/core/capabilities/remote/target/request/client_request_test.go: `.MarshalCapabilityResponse(capabilityResponse)`
$DIR/core/capabilities/remote/target/request/client_request_test.go: `.GetMessageIDForRequest(capabilityRequest)`
$DIR/core/capabilities/remote/target/request/client_request_test.go: `.Run("Send second message with different response", func(t *testing.T) {
ctx, cancel := context.WithCancel(context.Background())
defer cancel()
dispatcher := &clientRequestTestDispatcher{msgs: make(chan *types.MessageBody, 100)}
request, err := request.NewClientRequest(ctx, lggr, capabilityRequest, messageID, capInfo,
workflowDonInfo, dispatcher, 10*time.Minute)
require.NoError(t, err)
capabilityResponse2 := commoncap.CapabilityResponse{
Value: values.NewString("response2"),
Err: nil,
}
rawResponse2, err := pb.MarshalCapabilityResponse(capabilityResponse2)
require.NoError(t, err)
msg2 := &types.MessageBody{
CapabilityId: capInfo.ID,
CapabilityDonId: capDonInfo.ID,
CallerDonId: workflowDonInfo.ID,
Method: types.MethodExecute,
Payload: rawResponse2,
MessageId: []byte("messageID"),
}
msg.Sender = capabilityPeers[0][:]
err = request.OnMessage(ctx, msg)
require.NoError(t, err)
msg2.Sender = capabilityPeers[1][:]
err = request.OnMessage(ctx, msg2)
require.NoError(t, err)
select {
case <-request.ResponseChan():
t.Fatal("expected no response")
default:
}
})`
$DIR/core/capabilities/remote/target/request/client_request_test.go: `.WithCancel(context.Background())`
$DIR/core/capabilities/remote/target/request/client_request_test.go: `.Background()`
$DIR/core/capabilities/remote/target/request/client_request_test.go: `.NewClientRequest(ctx, lggr, capabilityRequest, messageID, capInfo,
workflowDonInfo, dispatcher, 10*time.Minute)`
$DIR/core/capabilities/remote/target/request/client_request_test.go: `.NewString("response2")`
$DIR/core/capabilities/remote/target/request/client_request_test.go: `.MarshalCapabilityResponse(capabilityResponse2)`
$DIR/core/capabilities/remote/target/request/client_request_test.go: `.OnMessage(ctx, msg)`
$DIR/core/capabilities/remote/target/request/client_request_test.go: `.OnMessage(ctx, msg2)`
$DIR/core/capabilities/remote/target/request/client_request_test.go: `.ResponseChan()`
$DIR/core/capabilities/remote/target/request/client_request_test.go: `.Run("Send second message from non calling Don peer", func(t *testing.T) {
ctx, cancel := context.WithCancel(context.Background())
defer cancel()
dispatcher := &clientRequestTestDispatcher{msgs: make(chan *types.MessageBody, 100)}
request, err := request.NewClientRequest(ctx, lggr, capabilityRequest, messageID, capInfo,
workflowDonInfo, dispatcher, 10*time.Minute)
require.NoError(t, err)
msg.Sender = capabilityPeers[0][:]
err = request.OnMessage(ctx, msg)
require.NoError(t, err)
nonDonPeer := NewP2PPeerID(t)
msg.Sender = nonDonPeer[:]
err = request.OnMessage(ctx, msg)
require.NotNil(t, err)
select {
case <-request.ResponseChan():
t.Fatal("expected no response")
default:
}
})`
$DIR/core/capabilities/remote/target/request/client_request_test.go: `.WithCancel(context.Background())`
$DIR/core/capabilities/remote/target/request/client_request_test.go: `.Background()`
$DIR/core/capabilities/remote/target/request/client_request_test.go: `.NewClientRequest(ctx, lggr, capabilityRequest, messageID, capInfo,
workflowDonInfo, dispatcher, 10*time.Minute)`
$DIR/core/capabilities/remote/target/request/client_request_test.go: `.OnMessage(ctx, msg)`
$DIR/core/capabilities/remote/target/request/client_request_test.go: `.OnMessage(ctx, msg)`
$DIR/core/capabilities/remote/target/request/client_request_test.go: `.ResponseChan()`
$DIR/core/capabilities/remote/target/request/client_request_test.go: `.Run("Send second message from same peer as first message", func(t *testing.T) {
ctx, cancel := context.WithCancel(context.Background())
defer cancel()
dispatcher := &clientRequestTestDispatcher{msgs: make(chan *types.MessageBody, 100)}
request, err := request.NewClientRequest(ctx, lggr, capabilityRequest, messageID, capInfo,
workflowDonInfo, dispatcher, 10*time.Minute)
require.NoError(t, err)
msg.Sender = capabilityPeers[0][:]
err = request.OnMessage(ctx, msg)
require.NoError(t, err)
err = request.OnMessage(ctx, msg)
require.NotNil(t, err)
select {
case <-request.ResponseChan():
t.Fatal("expected no response")
default:
}
})`
$DIR/core/capabilities/remote/target/request/client_request_test.go: `.WithCancel(context.Background())`
$DIR/core/capabilities/remote/target/request/client_request_test.go: `.Background()`
$DIR/core/capabilities/remote/target/request/client_request_test.go: `.NewClientRequest(ctx, lggr, capabilityRequest, messageID, capInfo,
workflowDonInfo, dispatcher, 10*time.Minute)`
$DIR/core/capabilities/remote/target/request/client_request_test.go: `.OnMessage(ctx, msg)`
$DIR/core/capabilities/remote/target/request/client_request_test.go: `.OnMessage(ctx, msg)`
$DIR/core/capabilities/remote/target/request/client_request_test.go: `.ResponseChan()`
$DIR/core/capabilities/remote/target/request/client_request_test.go: `.Run("Send second message with same error as first", func(t *testing.T) {
ctx, cancel := context.WithCancel(context.Background())
defer cancel()
dispatcher := &clientRequestTestDispatcher{msgs: make(chan *types.MessageBody, 100)}
request, err := request.NewClientRequest(ctx, lggr, capabilityRequest, messageID, capInfo,
workflowDonInfo, dispatcher, 10*time.Minute)
require.NoError(t, err)
<-dispatcher.msgs
<-dispatcher.msgs
assert.Equal(t, 0, len(dispatcher.msgs))
msgWithError := &types.MessageBody{
CapabilityId: capInfo.ID,
CapabilityDonId: capDonInfo.ID,
CallerDonId: workflowDonInfo.ID,
Method: types.MethodExecute,
Payload: rawResponse,
MessageId: []byte("messageID"),
Error: types.Error_INTERNAL_ERROR,
ErrorMsg: "an error",
}
msgWithError.Sender = capabilityPeers[0][:]
err = request.OnMessage(ctx, msgWithError)
require.NoError(t, err)
msgWithError.Sender = capabilityPeers[1][:]
err = request.OnMessage(ctx, msgWithError)
require.NoError(t, err)
response := <-request.ResponseChan()
assert.Equal(t, "an error", response.Err.Error())
})`
$DIR/core/capabilities/remote/target/request/client_request_test.go: `.WithCancel(context.Background())`
$DIR/core/capabilities/remote/target/request/client_request_test.go: `.Background()`
$DIR/core/capabilities/remote/target/request/client_request_test.go: `.NewClientRequest(ctx, lggr, capabilityRequest, messageID, capInfo,
workflowDonInfo, dispatcher, 10*time.Minute)`
$DIR/core/capabilities/remote/target/request/client_request_test.go: `.OnMessage(ctx, msgWithError)`
$DIR/core/capabilities/remote/target/request/client_request_test.go: `.OnMessage(ctx, msgWithError)`
$DIR/core/capabilities/remote/target/request/client_request_test.go: `.ResponseChan()`
$DIR/core/capabilities/remote/target/request/client_request_test.go: `.Run("Send second message with different error to first", func(t *testing.T) {
ctx, cancel := context.WithCancel(context.Background())
defer cancel()
dispatcher := &clientRequestTestDispatcher{msgs: make(chan *types.MessageBody, 100)}
request, err := request.NewClientRequest(ctx, lggr, capabilityRequest, messageID, capInfo,
workflowDonInfo, dispatcher, 10*time.Minute)
require.NoError(t, err)
<-dispatcher.msgs
<-dispatcher.msgs
assert.Equal(t, 0, len(dispatcher.msgs))
msgWithError := &types.MessageBody{
CapabilityId: capInfo.ID,
CapabilityDonId: capDonInfo.ID,
CallerDonId: workflowDonInfo.ID,
Method: types.MethodExecute,
Payload: rawResponse,
MessageId: []byte("messageID"),
Error: types.Error_INTERNAL_ERROR,
ErrorMsg: "an error",
Sender: capabilityPeers[0][:],
}
msgWithError2 := &types.MessageBody{
CapabilityId: capInfo.ID,
CapabilityDonId: capDonInfo.ID,
CallerDonId: workflowDonInfo.ID,
Method: types.MethodExecute,
Payload: rawResponse,
MessageId: []byte("messageID"),
Error: types.Error_INTERNAL_ERROR,
ErrorMsg: "an error2",
Sender: capabilityPeers[1][:],
}
err = request.OnMessage(ctx, msgWithError)
require.NoError(t, err)
err = request.OnMessage(ctx, msgWithError2)
require.NoError(t, err)
select {
case <-request.ResponseChan():
t.Fatal("expected no response")
default:
}
})`
$DIR/core/capabilities/remote/target/request/client_request_test.go: `.WithCancel(context.Background())`
$DIR/core/capabilities/remote/target/request/client_request_test.go: `.Background()`
$DIR/core/capabilities/remote/target/request/client_request_test.go: `.NewClientRequest(ctx, lggr, capabilityRequest, messageID, capInfo,
workflowDonInfo, dispatcher, 10*time.Minute)`
$DIR/core/capabilities/remote/target/request/client_request_test.go: `.OnMessage(ctx, msgWithError)`
$DIR/core/capabilities/remote/target/request/client_request_test.go: `.OnMessage(ctx, msgWithError2)`
$DIR/core/capabilities/remote/target/request/client_request_test.go: `.ResponseChan()`
$DIR/core/capabilities/remote/target/request/client_request_test.go: `.WithCancel(context.Background())`
$DIR/core/capabilities/remote/target/request/client_request_test.go: `.Background()`
$DIR/core/capabilities/remote/target/request/client_request_test.go: `.NewClientRequest(ctx, lggr, capabilityRequest, messageID, capInfo,
workflowDonInfo, dispatcher, 10*time.Minute)`
$DIR/core/capabilities/remote/target/request/client_request_test.go: `.OnMessage(ctx, msg)`
$DIR/core/capabilities/remote/target/request/client_request_test.go: `.OnMessage(ctx, msg)`
$DIR/core/capabilities/remote/target/request/client_request_test.go: `.ResponseChan()`
$DIR/core/capabilities/remote/target/request/server_request_test.go: `workflowPeers[i] = NewP2PPeerID(t)`
$DIR/core/capabilities/remote/target/request/server_request_test.go: `t.Run("Send duplicate message", func(t *testing.T) {
req := request.NewServerRequest(capability, "capabilityID", "capabilityDonID",
capabilityPeerID, callingDon, "requestMessageID", dispatcher, 10*time.Minute, lggr)
err := sendValidRequest(req, workflowPeers, capabilityPeerID, rawRequest)
require.NoError(t, err)
err = sendValidRequest(req, workflowPeers, capabilityPeerID, rawRequest)
assert.NotNil(t, err)
})`
$DIR/core/capabilities/remote/target/request/server_request_test.go: `err = sendValidRequest(req, workflowPeers, capabilityPeerID, rawRequest)`
$DIR/core/capabilities/remote/target/request/server_request_test.go: `t.Run("Send message with non calling don peer", func(t *testing.T) {
req := request.NewServerRequest(capability, "capabilityID", "capabilityDonID",
capabilityPeerID, callingDon, "requestMessageID", dispatcher, 10*time.Minute, lggr)
err := sendValidRequest(req, workflowPeers, capabilityPeerID, rawRequest)
require.NoError(t, err)
nonDonPeer := NewP2PPeerID(t)
err = req.OnMessage(context.Background(), &types.MessageBody{
Version: 0,
Sender: nonDonPeer[:],
Receiver: capabilityPeerID[:],
MessageId: []byte("workflowID" + "workflowExecutionID"),
CapabilityId: "capabilityID",
CapabilityDonId: "capabilityDonID",
CallerDonId: "workflow-don",
Method: types.MethodExecute,
Payload: rawRequest,
})
assert.NotNil(t, err)
})`
$DIR/core/capabilities/remote/target/request/server_request_test.go: `err = req.OnMessage(context.Background(), &types.MessageBody{
Version: 0,
Sender: nonDonPeer[:],
Receiver: capabilityPeerID[:],
MessageId: []byte("workflowID" + "workflowExecutionID"),
CapabilityId: "capabilityID",
CapabilityDonId: "capabilityDonID",
CallerDonId: "workflow-don",
Method: types.MethodExecute,
Payload: rawRequest,
})`
$DIR/core/capabilities/remote/target/request/server_request_test.go: `t.Run("Send message invalid payload", func(t *testing.T) {
req := request.NewServerRequest(capability, "capabilityID", "capabilityDonID",
capabilityPeerID, callingDon, "requestMessageID", dispatcher, 10*time.Minute, lggr)
err := sendValidRequest(req, workflowPeers, capabilityPeerID, rawRequest)
require.NoError(t, err)
err = req.OnMessage(context.Background(), &types.MessageBody{
Version: 0,
Sender: workflowPeers[1][:],
Receiver: capabilityPeerID[:],
MessageId: []byte("workflowID" + "workflowExecutionID"),
CapabilityId: "capabilityID",
CapabilityDonId: "capabilityDonID",
CallerDonId: "workflow-don",
Method: types.MethodExecute,
Payload: append(rawRequest, []byte("asdf")...),
})
assert.NoError(t, err)
assert.Equal(t, 2, len(dispatcher.msgs))
assert.Equal(t, dispatcher.msgs[0].Error, types.Error_INTERNAL_ERROR)
assert.Equal(t, dispatcher.msgs[1].Error, types.Error_INTERNAL_ERROR)
})`
$DIR/core/capabilities/remote/target/request/server_request_test.go: `err = req.OnMessage(context.Background(), &types.MessageBody{
Version: 0,
Sender: workflowPeers[1][:],
Receiver: capabilityPeerID[:],
MessageId: []byte("workflowID" + "workflowExecutionID"),
CapabilityId: "capabilityID",
CapabilityDonId: "capabilityDonID",
CallerDonId: "workflow-don",
Method: types.MethodExecute,
Payload: append(rawRequest, []byte("asdf")...),
})`
$DIR/core/capabilities/remote/target/request/server_request_test.go: `t.Run("Send second valid request when capability errors", func(t *testing.T) {
dispatcher := &testDispatcher{}
req := request.NewServerRequest(TestErrorCapability{}, "capabilityID", "capabilityDonID",
capabilityPeerID, callingDon, "requestMessageID", dispatcher, 10*time.Minute, lggr)
err := sendValidRequest(req, workflowPeers, capabilityPeerID, rawRequest)
require.NoError(t, err)
err = req.OnMessage(context.Background(), &types.MessageBody{
Version: 0,
Sender: workflowPeers[1][:],
Receiver: capabilityPeerID[:],
MessageId: []byte("workflowID" + "workflowExecutionID"),
CapabilityId: "capabilityID",
CapabilityDonId: "capabilityDonID",
CallerDonId: "workflow-don",
Method: types.MethodExecute,
Payload: rawRequest,
})
assert.NoError(t, err)
assert.Equal(t, 2, len(dispatcher.msgs))
assert.Equal(t, dispatcher.msgs[0].Error, types.Error_INTERNAL_ERROR)
assert.Equal(t, dispatcher.msgs[0].ErrorMsg, "failed to execute capability: an error")
assert.Equal(t, dispatcher.msgs[1].Error, types.Error_INTERNAL_ERROR)
assert.Equal(t, dispatcher.msgs[1].ErrorMsg, "failed to execute capability: an error")
})`
$DIR/core/capabilities/remote/target/request/server_request_test.go: `err = req.OnMessage(context.Background(), &types.MessageBody{
Version: 0,
Sender: workflowPeers[1][:],
Receiver: capabilityPeerID[:],
MessageId: []byte("workflowID" + "workflowExecutionID"),
CapabilityId: "capabilityID",
CapabilityDonId: "capabilityDonID",
CallerDonId: "workflow-don",
Method: types.MethodExecute,
Payload: rawRequest,
})`
$DIR/core/capabilities/remote/target/request/server_request_test.go: `err = request.OnMessage(context.Background(), &types.MessageBody{
Version: 0,
Sender: workflowPeers[1][:],
Receiver: capabilityPeerID[:],
MessageId: []byte("workflowID" + "workflowExecutionID"),
CapabilityId: "capabilityID",
CapabilityDonId: "capabilityDonID",
CallerDonId: "workflow-don",
Method: types.MethodExecute,
Payload: rawRequest,
})`
$DIR/core/capabilities/remote/target/request/server_request_test.go: `.TestLogger(t)`
$DIR/core/capabilities/remote/target/request/server_request_test.go: `.NewMap(
map[string]any{
"executeValue1": "aValue1",
},
)`
$DIR/core/capabilities/remote/target/request/server_request_test.go: `.MarshalCapabilityRequest(capabilityRequest)`
$DIR/core/capabilities/remote/target/request/server_request_test.go: `.Run("Send duplicate message", func(t *testing.T) {
req := request.NewServerRequest(capability, "capabilityID", "capabilityDonID",
capabilityPeerID, callingDon, "requestMessageID", dispatcher, 10*time.Minute, lggr)
err := sendValidRequest(req, workflowPeers, capabilityPeerID, rawRequest)
require.NoError(t, err)
err = sendValidRequest(req, workflowPeers, capabilityPeerID, rawRequest)
assert.NotNil(t, err)
})`
$DIR/core/capabilities/remote/target/request/server_request_test.go: `.NewServerRequest(capability, "capabilityID", "capabilityDonID",
capabilityPeerID, callingDon, "requestMessageID", dispatcher, 10*time.Minute, lggr)`
$DIR/core/capabilities/remote/target/request/server_request_test.go: `.Run("Send message with non calling don peer", func(t *testing.T) {
req := request.NewServerRequest(capability, "capabilityID", "capabilityDonID",
capabilityPeerID, callingDon, "requestMessageID", dispatcher, 10*time.Minute, lggr)
err := sendValidRequest(req, workflowPeers, capabilityPeerID, rawRequest)
require.NoError(t, err)
nonDonPeer := NewP2PPeerID(t)
err = req.OnMessage(context.Background(), &types.MessageBody{
Version: 0,
Sender: nonDonPeer[:],
Receiver: capabilityPeerID[:],
MessageId: []byte("workflowID" + "workflowExecutionID"),
CapabilityId: "capabilityID",
CapabilityDonId: "capabilityDonID",
CallerDonId: "workflow-don",
Method: types.MethodExecute,
Payload: rawRequest,
})
assert.NotNil(t, err)
})`
$DIR/core/capabilities/remote/target/request/server_request_test.go: `.NewServerRequest(capability, "capabilityID", "capabilityDonID",
capabilityPeerID, callingDon, "requestMessageID", dispatcher, 10*time.Minute, lggr)`
$DIR/core/capabilities/remote/target/request/server_request_test.go: `.OnMessage(context.Background(), &types.MessageBody{
Version: 0,
Sender: nonDonPeer[:],
Receiver: capabilityPeerID[:],
MessageId: []byte("workflowID" + "workflowExecutionID"),
CapabilityId: "capabilityID",
CapabilityDonId: "capabilityDonID",
CallerDonId: "workflow-don",
Method: types.MethodExecute,
Payload: rawRequest,
})`
$DIR/core/capabilities/remote/target/request/server_request_test.go: `.Background()`
$DIR/core/capabilities/remote/target/request/server_request_test.go: `.Run("Send message invalid payload", func(t *testing.T) {
req := request.NewServerRequest(capability, "capabilityID", "capabilityDonID",
capabilityPeerID, callingDon, "requestMessageID", dispatcher, 10*time.Minute, lggr)
err := sendValidRequest(req, workflowPeers, capabilityPeerID, rawRequest)
require.NoError(t, err)
err = req.OnMessage(context.Background(), &types.MessageBody{
Version: 0,
Sender: workflowPeers[1][:],
Receiver: capabilityPeerID[:],
MessageId: []byte("workflowID" + "workflowExecutionID"),
CapabilityId: "capabilityID",
CapabilityDonId: "capabilityDonID",
CallerDonId: "workflow-don",
Method: types.MethodExecute,
Payload: append(rawRequest, []byte("asdf")...),
})
assert.NoError(t, err)
assert.Equal(t, 2, len(dispatcher.msgs))
assert.Equal(t, dispatcher.msgs[0].Error, types.Error_INTERNAL_ERROR)
assert.Equal(t, dispatcher.msgs[1].Error, types.Error_INTERNAL_ERROR)
})`
$DIR/core/capabilities/remote/target/request/server_request_test.go: `.NewServerRequest(capability, "capabilityID", "capabilityDonID",
capabilityPeerID, callingDon, "requestMessageID", dispatcher, 10*time.Minute, lggr)`
$DIR/core/capabilities/remote/target/request/server_request_test.go: `.OnMessage(context.Background(), &types.MessageBody{
Version: 0,
Sender: workflowPeers[1][:],
Receiver: capabilityPeerID[:],
MessageId: []byte("workflowID" + "workflowExecutionID"),
CapabilityId: "capabilityID",
CapabilityDonId: "capabilityDonID",
CallerDonId: "workflow-don",
Method: types.MethodExecute,
Payload: append(rawRequest, []byte("asdf")...),
})`
$DIR/core/capabilities/remote/target/request/server_request_test.go: `.Background()`
$DIR/core/capabilities/remote/target/request/server_request_test.go: `.Run("Send second valid request when capability errors", func(t *testing.T) {
dispatcher := &testDispatcher{}
req := request.NewServerRequest(TestErrorCapability{}, "capabilityID", "capabilityDonID",
capabilityPeerID, callingDon, "requestMessageID", dispatcher, 10*time.Minute, lggr)
err := sendValidRequest(req, workflowPeers, capabilityPeerID, rawRequest)
require.NoError(t, err)
err = req.OnMessage(context.Background(), &types.MessageBody{
Version: 0,
Sender: workflowPeers[1][:],
Receiver: capabilityPeerID[:],
MessageId: []byte("workflowID" + "workflowExecutionID"),
CapabilityId: "capabilityID",
CapabilityDonId: "capabilityDonID",
CallerDonId: "workflow-don",
Method: types.MethodExecute,
Payload: rawRequest,
})
assert.NoError(t, err)
assert.Equal(t, 2, len(dispatcher.msgs))
assert.Equal(t, dispatcher.msgs[0].Error, types.Error_INTERNAL_ERROR)
assert.Equal(t, dispatcher.msgs[0].ErrorMsg, "failed to execute capability: an error")
assert.Equal(t, dispatcher.msgs[1].Error, types.Error_INTERNAL_ERROR)
assert.Equal(t, dispatcher.msgs[1].ErrorMsg, "failed to execute capability: an error")
})`
$DIR/core/capabilities/remote/target/request/server_request_test.go: `.NewServerRequest(TestErrorCapability{}, "capabilityID", "capabilityDonID",
capabilityPeerID, callingDon, "requestMessageID", dispatcher, 10*time.Minute, lggr)`
$DIR/core/capabilities/remote/target/request/server_request_test.go: `.OnMessage(context.Background(), &types.MessageBody{
Version: 0,
Sender: workflowPeers[1][:],
Receiver: capabilityPeerID[:],
MessageId: []byte("workflowID" + "workflowExecutionID"),
CapabilityId: "capabilityID",
CapabilityDonId: "capabilityDonID",
CallerDonId: "workflow-don",
Method: types.MethodExecute,
Payload: rawRequest,
})`
$DIR/core/capabilities/remote/target/request/server_request_test.go: `.Background()`
$DIR/core/capabilities/remote/target/request/server_request_test.go: `.NewServerRequest(capability, "capabilityID", "capabilityDonID",
capabilityPeerID, callingDon, "requestMessageID", dispatcher, 10*time.Minute, lggr)`
$DIR/core/capabilities/remote/target/request/server_request_test.go: `.OnMessage(context.Background(), &types.MessageBody{
Version: 0,
Sender: workflowPeers[1][:],
Receiver: capabilityPeerID[:],
MessageId: []byte("workflowID" + "workflowExecutionID"),
CapabilityId: "capabilityID",
CapabilityDonId: "capabilityDonID",
CallerDonId: "workflow-don",
Method: types.MethodExecute,
Payload: rawRequest,
})`
$DIR/core/capabilities/remote/target/request/server_request_test.go: `.Background()`
$DIR/core/capabilities/remote/target/server_test.go: `.WithCancel(testutils.Context(t))`
$DIR/core/capabilities/remote/target/server_test.go: `.Context(t)`
$DIR/core/capabilities/remote/target/server_test.go: `.Execute(context.Background(),
commoncap.CapabilityRequest{
Metadata: commoncap.RequestMetadata{
WorkflowID: "workflowID",
WorkflowExecutionID: "workflowExecutionID",
},
})`
$DIR/core/capabilities/remote/target/server_test.go: `.Background()`
$DIR/core/capabilities/remote/target/server_test.go: `.WithCancel(testutils.Context(t))`
$DIR/core/capabilities/remote/target/server_test.go: `.Context(t)`
$DIR/core/capabilities/remote/target/server_test.go: `.Execute(context.Background(),
commoncap.CapabilityRequest{
Metadata: commoncap.RequestMetadata{
WorkflowID: "workflowID",
WorkflowExecutionID: "workflowExecutionID",
},
})`
$DIR/core/capabilities/remote/target/server_test.go: `.Background()`
$DIR/core/capabilities/remote/target/server_test.go: `.WithCancel(testutils.Context(t))`
$DIR/core/capabilities/remote/target/server_test.go: `.Context(t)`
$DIR/core/capabilities/remote/target/server_test.go: `.Execute(context.Background(),
commoncap.CapabilityRequest{
Metadata: commoncap.RequestMetadata{
WorkflowID: "workflowID",
WorkflowExecutionID: "workflowExecutionID",
},
})`
$DIR/core/capabilities/remote/target/server_test.go: `.Background()`
$DIR/core/capabilities/remote/trigger_publisher_test.go: `publisher.Receive(regEvent)`
$DIR/core/capabilities/remote/trigger_publisher_test.go: `.TestLogger(t)`
$DIR/core/capabilities/remote/trigger_publisher_test.go: `.Context(t)`
$DIR/core/capabilities/remote/trigger_publisher_test.go: `.NewDispatcher(t)`
$DIR/core/capabilities/remote/trigger_publisher_test.go: `.NewTriggerPublisher(config, underlying, capInfo, capDonInfo, workflowDONs, dispatcher, lggr)`
$DIR/core/capabilities/remote/trigger_publisher_test.go: `.MarshalCapabilityRequest(capRequest)`
$DIR/core/capabilities/remote/trigger_publisher_test.go: `.Receive(regEvent)`
$DIR/core/capabilities/remote/trigger_subscriber_test.go: `dispatcher.On("Send", mock.Anything, mock.Anything).Return(nil).Run(func(args mock.Arguments) {
select {
case awaitRegistrationMessageCh <- struct{}{}:
default:
}
})`
$DIR/core/capabilities/remote/trigger_subscriber_test.go: `select {
case awaitRegistrationMessageCh <- struct{}{}:
default:
}`
$DIR/core/capabilities/remote/trigger_subscriber_test.go: `<-awaitRegistrationMessageCh`
$DIR/core/capabilities/remote/trigger_subscriber_test.go: `subscriber.Receive(triggerEvent)`
$DIR/core/capabilities/remote/trigger_subscriber_test.go: `.TestLogger(t)`
$DIR/core/capabilities/remote/trigger_subscriber_test.go: `.Context(t)`
$DIR/core/capabilities/remote/trigger_subscriber_test.go: `.NewDispatcher(t)`
$DIR/core/capabilities/remote/trigger_subscriber_test.go: `.On("Send", mock.Anything, mock.Anything)`
$DIR/core/capabilities/remote/trigger_subscriber_test.go: `.Return(nil)`
$DIR/core/capabilities/remote/trigger_subscriber_test.go: `.Run(func(args mock.Arguments) {
select {
case awaitRegistrationMessageCh <- struct{}{}:
default:
}
})`
$DIR/core/capabilities/remote/trigger_subscriber_test.go: `.NewTriggerSubscriber(config, capInfo, capDonInfo, workflowDonInfo, dispatcher, nil, lggr)`
$DIR/core/capabilities/remote/trigger_subscriber_test.go: `.RegisterTrigger(ctx, req)`
$DIR/core/capabilities/remote/trigger_subscriber_test.go: `.Wrap(triggerEvent1)`
$DIR/core/capabilities/remote/trigger_subscriber_test.go: `.MarshalCapabilityResponse(capResponse)`
$DIR/core/capabilities/remote/trigger_subscriber_test.go: `.Receive(triggerEvent)`
$DIR/core/capabilities/remote/utils_test.go: `p2pMsg = encodeAndSign(t, privKey1, peerId1, peerId2, capId1, donId1, []byte(payload1))`
$DIR/core/capabilities/remote/utils_test.go: `p2pMsg.Sender = peerId2`
$DIR/core/capabilities/remote/utils_test.go: `_, err = remote.ValidateMessage(p2pMsg, peerId2)`
$DIR/core/capabilities/remote/utils_test.go: `p2pMsg = encodeAndSign(t, privKey1, peerId1, peerId2, capId1, donId1, []byte(payload1))`
$DIR/core/capabilities/remote/utils_test.go: `_, err = remote.ValidateMessage(p2pMsg, peerId1)`
$DIR/core/capabilities/remote/utils_test.go: `_, err = agg.Aggregate("", [][]byte{marshaled1})`
$DIR/core/capabilities/remote/utils_test.go: `_, err = agg.Aggregate("", [][]byte{marshaled1, marshaled2})`
$DIR/core/capabilities/remote/utils_test.go: `.ValidateMessage(p2pMsg, peerId2)`
$DIR/core/capabilities/remote/utils_test.go: `.ValidateMessage(p2pMsg, peerId2)`
$DIR/core/capabilities/remote/utils_test.go: `.ValidateMessage(p2pMsg, peerId1)`
$DIR/core/capabilities/remote/utils_test.go: `.ToPeerID([]byte("12345678901234567890123456789012"))`
$DIR/core/capabilities/remote/utils_test.go: `.String()`
$DIR/core/capabilities/remote/utils_test.go: `.Wrap(triggerEvent1)`
$DIR/core/capabilities/remote/utils_test.go: `.MarshalCapabilityResponse(capResponse1)`
$DIR/core/capabilities/remote/utils_test.go: `.Wrap(triggerEvent2)`
$DIR/core/capabilities/remote/utils_test.go: `.MarshalCapabilityResponse(capResponse2)`
$DIR/core/capabilities/remote/utils_test.go: `.NewDefaultModeAggregator(2)`
$DIR/core/capabilities/remote/utils_test.go: `.Aggregate("", [][]byte{marshaled1})`
$DIR/core/capabilities/remote/utils_test.go: `.Aggregate("", [][]byte{marshaled1, marshaled2})`
$DIR/core/capabilities/remote/utils_test.go: `.Aggregate("", [][]byte{marshaled1, marshaled2, marshaled1})`
$DIR/core/capabilities/streams/codec_test.go: `_, err = codec.UnwrapValid(values.NewBool(true), nil, 0)`
$DIR/core/capabilities/streams/codec_test.go: `_, err = codec.UnwrapValid(wrapped, nil, 1)`
$DIR/core/capabilities/streams/codec_test.go: `.NewCodec(logger.TestLogger(t))`
$DIR/core/capabilities/streams/codec_test.go: `.TestLogger(t)`
$DIR/core/capabilities/streams/codec_test.go: `.NewInt(1)`
$DIR/core/capabilities/streams/codec_test.go: `.NewInt(2)`
$DIR/core/capabilities/streams/codec_test.go: `.New(chaintype.EVM)`
$DIR/core/capabilities/streams/codec_test.go: `.New(chaintype.EVM)`
$DIR/core/capabilities/streams/codec_test.go: `.Sign(reportCtx, report1)`
$DIR/core/capabilities/streams/codec_test.go: `.Sign(reportCtx, report2)`
$DIR/core/capabilities/streams/codec_test.go: `.Sign(reportCtx, report1)`
$DIR/core/capabilities/streams/codec_test.go: `.Sign(reportCtx, report2)`
$DIR/core/capabilities/streams/codec_test.go: `.PublicKey()`
$DIR/core/capabilities/streams/codec_test.go: `.PublicKey()`
$DIR/core/capabilities/streams/codec_test.go: `.Wrap([]datastreams.FeedReport{
{
FeedID: id1Str,
FullReport: report1,
ReportContext: rawCtx,
Signatures: [][]byte{signatureK1R1, signatureK2R1},
},
{
FeedID: id2Str,
FullReport: report2,
ReportContext: rawCtx,
Signatures: [][]byte{signatureK1R2, signatureK2R2},
},
})`
$DIR/core/capabilities/streams/codec_test.go: `.UnwrapValid(values.NewBool(true), nil, 0)`
$DIR/core/capabilities/streams/codec_test.go: `.NewBool(true)`
$DIR/core/capabilities/streams/codec_test.go: `.UnwrapValid(wrapped, nil, 1)`
$DIR/core/capabilities/streams/codec_test.go: `.UnwrapValid(wrapped, allowedSigners, 2)`
$DIR/core/capabilities/syncer_test.go: `peer.On("UpdateConnections", mock.Anything).Return(nil)`
$DIR/core/capabilities/syncer_test.go: `peer.On("ID").Return(pid)`
$DIR/core/capabilities/syncer_test.go: `wrapper.On("GetPeer").Return(peer)`
$DIR/core/capabilities/syncer_test.go: `registry.On("Add", mock.Anything, mock.Anything).Return(nil)`
$DIR/core/capabilities/syncer_test.go: `dispatcher.On("SetReceiver", mock.Anything, mock.Anything, mock.Anything).Return(nil)`
$DIR/core/capabilities/syncer_test.go: `.TestLogger(t)`
$DIR/core/capabilities/syncer_test.go: `.Context(t)`
$DIR/core/capabilities/syncer_test.go: `.UnmarshalText([]byte("12D3KooWBCF1XT5Wi8FzfgNCqRL76Swv8TRU3TiD4QiJm8NMNX7N"))`
$DIR/core/capabilities/syncer_test.go: `.NewPeer(t)`
$DIR/core/capabilities/syncer_test.go: `.On("UpdateConnections", mock.Anything)`
$DIR/core/capabilities/syncer_test.go: `.Return(nil)`
$DIR/core/capabilities/syncer_test.go: `.On("ID")`
$DIR/core/capabilities/syncer_test.go: `.Return(pid)`
$DIR/core/capabilities/syncer_test.go: `.NewPeerWrapper(t)`
$DIR/core/capabilities/syncer_test.go: `.On("GetPeer")`
$DIR/core/capabilities/syncer_test.go: `.Return(peer)`
$DIR/core/capabilities/syncer_test.go: `.NewCapabilitiesRegistry(t)`
$DIR/core/capabilities/syncer_test.go: `.On("Add", mock.Anything, mock.Anything)`
$DIR/core/capabilities/syncer_test.go: `.Return(nil)`
$DIR/core/capabilities/syncer_test.go: `.NewDispatcher(t)`
$DIR/core/capabilities/syncer_test.go: `.On("SetReceiver", mock.Anything, mock.Anything, mock.Anything)`
$DIR/core/capabilities/syncer_test.go: `.Return(nil)`
$DIR/core/capabilities/syncer_test.go: `.NewHardcodedDonNetworkSetup()`
$DIR/core/capabilities/syncer_test.go: `.NewRegistrySyncer(wrapper, registry, dispatcher, lggr, networkSetup)`
$DIR/core/capabilities/targets/write_target_test.go: `cr.On("GetLatestValue", mock.Anything, "forwarder", "getTransmitter", mock.Anything, mock.Anything).Return(nil).Run(func(args mock.Arguments) {
transmitter := args.Get(4).(*common.Address)
*transmitter = common.HexToAddress("0x0")
}).Once()`
$DIR/core/capabilities/targets/write_target_test.go: `*transmitter = common.HexToAddress("0x0")`
$DIR/core/capabilities/targets/write_target_test.go: `cw.On("SubmitTransaction", mock.Anything, "forwarder", "report", mock.Anything, mock.Anything, forwarderAddr, mock.Anything, mock.Anything).Return(nil).Once()`
$DIR/core/capabilities/targets/write_target_test.go: `t.Run("succeeds with valid report", func(t *testing.T) {
req := capabilities.CapabilityRequest{
Metadata: capabilities.RequestMetadata{
WorkflowID: "test-id",
},
Config: config,
Inputs: validInputs,
}
ch, err2 := writeTarget.Execute(ctx, req)
require.NoError(t, err2)
response := <-ch
require.NotNil(t, response)
})`
$DIR/core/capabilities/targets/write_target_test.go: `t.Run("succeeds with empty report", func(t *testing.T) {
emptyInputs, err2 := values.NewMap(map[string]any{
"signed_report": map[string]any{
"report": []byte{},
},
"signatures": [][]byte{},
})
require.NoError(t, err2)
req := capabilities.CapabilityRequest{
Metadata: capabilities.RequestMetadata{
WorkflowExecutionID: "test-id",
},
Config: config,
Inputs: emptyInputs,
}
ch, err2 := writeTarget.Execute(ctx, req)
require.NoError(t, err2)
response := <-ch
require.Nil(t, response.Value)
})`
$DIR/core/capabilities/targets/write_target_test.go: `t.Run("fails when ChainReader's GetLatestValue returns error", func(t *testing.T) {
req := capabilities.CapabilityRequest{
Metadata: capabilities.RequestMetadata{
WorkflowID: "test-id",
},
Config: config,
Inputs: validInputs,
}
cr.On("GetLatestValue", mock.Anything, "forwarder", "getTransmitter", mock.Anything, mock.Anything).Return(errors.New("reader error"))
_, err = writeTarget.Execute(ctx, req)
require.Error(t, err)
})`
$DIR/core/capabilities/targets/write_target_test.go: `cr.On("GetLatestValue", mock.Anything, "forwarder", "getTransmitter", mock.Anything, mock.Anything).Return(errors.New("reader error"))`
$DIR/core/capabilities/targets/write_target_test.go: `_, err = writeTarget.Execute(ctx, req)`
$DIR/core/capabilities/targets/write_target_test.go: `t.Run("fails when ChainWriter's SubmitTransaction returns error", func(t *testing.T) {
req := capabilities.CapabilityRequest{
Metadata: capabilities.RequestMetadata{
WorkflowID: "test-id",
},
Config: config,
Inputs: validInputs,
}
cw.On("SubmitTransaction", mock.Anything, "forwarder", "report", mock.Anything, mock.Anything, forwarderAddr, mock.Anything, mock.Anything).Return(errors.New("writer error"))
_, err = writeTarget.Execute(ctx, req)
require.Error(t, err)
})`
$DIR/core/capabilities/targets/write_target_test.go: `cw.On("SubmitTransaction", mock.Anything, "forwarder", "report", mock.Anything, mock.Anything, forwarderAddr, mock.Anything, mock.Anything).Return(errors.New("writer error"))`
$DIR/core/capabilities/targets/write_target_test.go: `_, err = writeTarget.Execute(ctx, req)`
$DIR/core/capabilities/targets/write_target_test.go: `_, err = writeTarget.Execute(ctx, req)`
$DIR/core/capabilities/targets/write_target_test.go: `.TestLogger(t)`
$DIR/core/capabilities/targets/write_target_test.go: `.Background()`
$DIR/core/capabilities/targets/write_target_test.go: `.NewChainWriter(t)`
$DIR/core/capabilities/targets/write_target_test.go: `.NewChainReader(t)`
$DIR/core/capabilities/targets/write_target_test.go: `.NewAddress()`
$DIR/core/capabilities/targets/write_target_test.go: `.Hex()`
$DIR/core/capabilities/targets/write_target_test.go: `.NewWriteTarget(lggr, "test-write-target@1.0.0", cr, cw, forwarderAddr)`
$DIR/core/capabilities/targets/write_target_test.go: `.NewMap(map[string]any{
"Address": forwarderAddr,
})`
$DIR/core/capabilities/targets/write_target_test.go: `.NewMap(map[string]any{
"signed_report": map[string]any{
"report": []byte{1, 2, 3},
"signatures": [][]byte{},
},
})`
$DIR/core/capabilities/targets/write_target_test.go: `.On("GetLatestValue", mock.Anything, "forwarder", "getTransmitter", mock.Anything, mock.Anything)`
$DIR/core/capabilities/targets/write_target_test.go: `.Return(nil)`
$DIR/core/capabilities/targets/write_target_test.go: `.Run(func(args mock.Arguments) {
transmitter := args.Get(4).(*common.Address)
*transmitter = common.HexToAddress("0x0")
})`
$DIR/core/capabilities/targets/write_target_test.go: `.Get(4)`
$DIR/core/capabilities/targets/write_target_test.go: `.HexToAddress("0x0")`
$DIR/core/capabilities/targets/write_target_test.go: `.Once()`
$DIR/core/capabilities/targets/write_target_test.go: `.On("SubmitTransaction", mock.Anything, "forwarder", "report", mock.Anything, mock.Anything, forwarderAddr, mock.Anything, mock.Anything)`
$DIR/core/capabilities/targets/write_target_test.go: `.Return(nil)`
$DIR/core/capabilities/targets/write_target_test.go: `.Once()`
$DIR/core/capabilities/targets/write_target_test.go: `.Run("succeeds with valid report", func(t *testing.T) {
req := capabilities.CapabilityRequest{
Metadata: capabilities.RequestMetadata{
WorkflowID: "test-id",
},
Config: config,
Inputs: validInputs,
}
ch, err2 := writeTarget.Execute(ctx, req)
require.NoError(t, err2)
response := <-ch
require.NotNil(t, response)
})`
$DIR/core/capabilities/targets/write_target_test.go: `.Execute(ctx, req)`
$DIR/core/capabilities/targets/write_target_test.go: `.Run("succeeds with empty report", func(t *testing.T) {
emptyInputs, err2 := values.NewMap(map[string]any{
"signed_report": map[string]any{
"report": []byte{},
},
"signatures": [][]byte{},
})
require.NoError(t, err2)
req := capabilities.CapabilityRequest{
Metadata: capabilities.RequestMetadata{
WorkflowExecutionID: "test-id",
},
Config: config,
Inputs: emptyInputs,
}
ch, err2 := writeTarget.Execute(ctx, req)
require.NoError(t, err2)
response := <-ch
require.Nil(t, response.Value)
})`
$DIR/core/capabilities/targets/write_target_test.go: `.NewMap(map[string]any{
"signed_report": map[string]any{
"report": []byte{},
},
"signatures": [][]byte{},
})`
$DIR/core/capabilities/targets/write_target_test.go: `.Execute(ctx, req)`
$DIR/core/capabilities/targets/write_target_test.go: `.Run("fails when ChainReader's GetLatestValue returns error", func(t *testing.T) {
req := capabilities.CapabilityRequest{
Metadata: capabilities.RequestMetadata{
WorkflowID: "test-id",
},
Config: config,
Inputs: validInputs,
}
cr.On("GetLatestValue", mock.Anything, "forwarder", "getTransmitter", mock.Anything, mock.Anything).Return(errors.New("reader error"))
_, err = writeTarget.Execute(ctx, req)
require.Error(t, err)
})`
$DIR/core/capabilities/targets/write_target_test.go: `.On("GetLatestValue", mock.Anything, "forwarder", "getTransmitter", mock.Anything, mock.Anything)`
$DIR/core/capabilities/targets/write_target_test.go: `.Return(errors.New("reader error"))`
$DIR/core/capabilities/targets/write_target_test.go: `.New("reader error")`
$DIR/core/capabilities/targets/write_target_test.go: `.Execute(ctx, req)`
$DIR/core/capabilities/targets/write_target_test.go: `.Run("fails when ChainWriter's SubmitTransaction returns error", func(t *testing.T) {
req := capabilities.CapabilityRequest{
Metadata: capabilities.RequestMetadata{
WorkflowID: "test-id",
},
Config: config,
Inputs: validInputs,
}
cw.On("SubmitTransaction", mock.Anything, "forwarder", "report", mock.Anything, mock.Anything, forwarderAddr, mock.Anything, mock.Anything).Return(errors.New("writer error"))
_, err = writeTarget.Execute(ctx, req)
require.Error(t, err)
})`
$DIR/core/capabilities/targets/write_target_test.go: `.On("SubmitTransaction", mock.Anything, "forwarder", "report", mock.Anything, mock.Anything, forwarderAddr, mock.Anything, mock.Anything)`
$DIR/core/capabilities/targets/write_target_test.go: `.Return(errors.New("writer error"))`
$DIR/core/capabilities/targets/write_target_test.go: `.New("writer error")`
$DIR/core/capabilities/targets/write_target_test.go: `.Execute(ctx, req)`
$DIR/core/capabilities/targets/write_target_test.go: `.NewMap(map[string]any{
"Address": "invalid-address",
})`
$DIR/core/capabilities/targets/write_target_test.go: `.Execute(ctx, req)`
$DIR/core/capabilities/transmission/local_target_capability_test.go: `gotTime = time.Now()`
$DIR/core/capabilities/transmission/local_target_capability_test.go: `called = true`
$DIR/core/capabilities/transmission/local_target_capability_test.go: `t.Run(tc.name, func(t *testing.T) {
startTime := time.Now()
m, err := values.NewMap(map[string]any{
"schedule": tc.schedule,
"deltaStage": "100ms",
})
require.NoError(t, err)
req := capabilities.CapabilityRequest{
Config: m,
Metadata: capabilities.RequestMetadata{
WorkflowID: "mock-workflow-id",
WorkflowExecutionID: "mock-execution-id",
},
}
ids := []p2ptypes.PeerID{
randKey(),
randKey(),
randKey(),
randKey(),
}
don := capabilities.DON{
Members: ids,
Config: capabilities.DONConfig{
SharedSecret: [16]byte(key),
},
}
peerID := ids[tc.position]
localTargetCapability := NewLocalTargetCapability(log, peerID, don, mt)
_, err = localTargetCapability.Execute(tests.Context(t), req)
require.NoError(t, err)
require.True(t, called)
assertBetween(t, gotTime.Sub(startTime), tc.low, tc.high)
})`
$DIR/core/capabilities/transmission/local_target_capability_test.go: `_, err = localTargetCapability.Execute(tests.Context(t), req)`
$DIR/core/capabilities/transmission/local_target_capability_test.go: `assertBetween(t, gotTime.Sub(startTime), tc.low, tc.high)`
$DIR/core/capabilities/transmission/local_target_capability_test.go: `.TestLogger(t)`
$DIR/core/capabilities/transmission/local_target_capability_test.go: `.MustNewCapabilityInfo(
"write_polygon-testnet-mumbai@1.0.0",
capabilities.CapabilityTypeTarget,
"a write capability targeting polygon mumbai testnet",
)`
$DIR/core/capabilities/transmission/local_target_capability_test.go: `.Now()`
$DIR/core/capabilities/transmission/local_target_capability_test.go: `.DecodeString("fb13ca015a9ec60089c7141e9522de79")`
$DIR/core/capabilities/transmission/local_target_capability_test.go: `.Run(tc.name, func(t *testing.T) {
startTime := time.Now()
m, err := values.NewMap(map[string]any{
"schedule": tc.schedule,
"deltaStage": "100ms",
})
require.NoError(t, err)
req := capabilities.CapabilityRequest{
Config: m,
Metadata: capabilities.RequestMetadata{
WorkflowID: "mock-workflow-id",
WorkflowExecutionID: "mock-execution-id",
},
}
ids := []p2ptypes.PeerID{
randKey(),
randKey(),
randKey(),
randKey(),
}
don := capabilities.DON{
Members: ids,
Config: capabilities.DONConfig{
SharedSecret: [16]byte(key),
},
}
peerID := ids[tc.position]
localTargetCapability := NewLocalTargetCapability(log, peerID, don, mt)
_, err = localTargetCapability.Execute(tests.Context(t), req)
require.NoError(t, err)
require.True(t, called)
assertBetween(t, gotTime.Sub(startTime), tc.low, tc.high)
})`
$DIR/core/capabilities/transmission/local_target_capability_test.go: `.Now()`
$DIR/core/capabilities/transmission/local_target_capability_test.go: `.NewMap(map[string]any{
"schedule": tc.schedule,
"deltaStage": "100ms",
})`
$DIR/core/capabilities/transmission/local_target_capability_test.go: `.Execute(tests.Context(t), req)`
$DIR/core/capabilities/transmission/local_target_capability_test.go: `.Context(t)`
$DIR/core/capabilities/transmission/local_target_capability_test.go: `.Sub(startTime)`
$DIR/core/capabilities/transmission/transmission_test.go: `t.Run(tc.name, func(t *testing.T) {
sharedSecret, err := hex.DecodeString(tc.sharedSecret)
require.NoError(t, err)
m, err := values.NewMap(map[string]any{
"schedule": tc.schedule,
"deltaStage": tc.deltaStage,
})
require.NoError(t, err)
transmissionCfg, err := ExtractTransmissionConfig(m)
require.NoError(t, err)
peerIdToDelay, err := GetPeerIDToTransmissionDelay(ids, [16]byte(sharedSecret), "mock-workflow-id"+tc.workflowExecutionID, transmissionCfg)
require.NoError(t, err)
assert.Equal(t, tc.expectedDelays["one"], peerIdToDelay[peer1])
assert.Equal(t, tc.expectedDelays["two"], peerIdToDelay[peer2])
assert.Equal(t, tc.expectedDelays["three"], peerIdToDelay[peer3])
assert.Equal(t, tc.expectedDelays["four"], peerIdToDelay[peer4])
})`
$DIR/core/capabilities/transmission/transmission_test.go: `.Sprintf("%-32s", "one")`
$DIR/core/capabilities/transmission/transmission_test.go: `.Sprintf("%-32s", "two")`
$DIR/core/capabilities/transmission/transmission_test.go: `.Sprintf("%-32s", "three")`
$DIR/core/capabilities/transmission/transmission_test.go: `.Sprintf("%-32s", "four")`
$DIR/core/capabilities/transmission/transmission_test.go: `.Run(tc.name, func(t *testing.T) {
sharedSecret, err := hex.DecodeString(tc.sharedSecret)
require.NoError(t, err)
m, err := values.NewMap(map[string]any{
"schedule": tc.schedule,
"deltaStage": tc.deltaStage,
})
require.NoError(t, err)
transmissionCfg, err := ExtractTransmissionConfig(m)
require.NoError(t, err)
peerIdToDelay, err := GetPeerIDToTransmissionDelay(ids, [16]byte(sharedSecret), "mock-workflow-id"+tc.workflowExecutionID, transmissionCfg)
require.NoError(t, err)
assert.Equal(t, tc.expectedDelays["one"], peerIdToDelay[peer1])
assert.Equal(t, tc.expectedDelays["two"], peerIdToDelay[peer2])
assert.Equal(t, tc.expectedDelays["three"], peerIdToDelay[peer3])
assert.Equal(t, tc.expectedDelays["four"], peerIdToDelay[peer4])
})`
$DIR/core/capabilities/transmission/transmission_test.go: `.DecodeString(tc.sharedSecret)`
$DIR/core/capabilities/transmission/transmission_test.go: `.NewMap(map[string]any{
"schedule": tc.schedule,
"deltaStage": tc.deltaStage,
})`
$DIR/core/cbor/cbor_test.go: `t.Run(test.name, func(t *testing.T) {
b, err := hexutil.Decode(test.in)
assert.NoError(t, err)
json, err := ParseDietCBOR(b)
if test.wantErrored {
assert.Error(t, err)
} else {
assert.NoError(t, err)
assert.Equal(t, test.want, json)
}
})`
$DIR/core/cbor/cbor_test.go: `err = ParseDietCBORToStruct(bytesCBOR, &parsed)`
$DIR/core/cbor/cbor_test.go: `err = ParseDietCBORToStruct(bytesCBOR, &parsed)`
$DIR/core/cbor/cbor_test.go: `err = ParseDietCBORToStruct(bytesCBOR, &parsed)`
$DIR/core/cbor/cbor_test.go: `t.Run(test.name, func(t *testing.T) {
assert.Equal(t, test.want, autoAddMapDelimiters(test.in))
})`
$DIR/core/cbor/cbor_test.go: `t.Run(test.name, func(t *testing.T) {
decoded, err := CoerceInterfaceMapToStringMap(test.input)
require.NoError(t, err)
assert.True(t, reflect.DeepEqual(test.want, decoded))
})`
$DIR/core/cbor/cbor_test.go: `t.Run(test.name, func(t *testing.T) {
_, err := CoerceInterfaceMapToStringMap(test.input)
assert.Error(t, err)
})`
$DIR/core/cbor/cbor_test.go: `t.Run(test.name, func(t *testing.T) {
encoded := mustMarshal(t, test.in)
var decoded interface{}
err := cbor.Unmarshal(encoded, &decoded)
require.NoError(t, err)
decoded, err = CoerceInterfaceMapToStringMap(decoded)
require.NoError(t, err)
assert.True(t, reflect.DeepEqual(test.in, decoded))
})`
$DIR/core/cbor/cbor_test.go: `decoded, err = CoerceInterfaceMapToStringMap(decoded)`
$DIR/core/cbor/cbor_test.go: `.DecodeString("0x8bd112d3f8f92e41c861939545ad387307af9703")`
$DIR/core/cbor/cbor_test.go: `.MustParseBigInt(t, "18446744073709551616")`
$DIR/core/cbor/cbor_test.go: `.MustParseBigInt(t, "28948022309329048855892746252171976963317496166410141009864396001978282409984")`
$DIR/core/cbor/cbor_test.go: `.MustParseBigInt(t, "-18446744073709551617")`
$DIR/core/cbor/cbor_test.go: `.MustParseBigInt(t, "-28948022309329048855892746252171976963317496166410141009864396001978282409984")`
$DIR/core/cbor/cbor_test.go: `.MustParseBigInt(t, "18446744073709551616")`
$DIR/core/cbor/cbor_test.go: `.MustParseBigInt(t, "28948022309329048855892746252171976963317496166410141009864396001978282409984")`
$DIR/core/cbor/cbor_test.go: `.MustParseBigInt(t, "-18446744073709551617")`
$DIR/core/cbor/cbor_test.go: `.MustParseBigInt(t, "-28948022309329048855892746252171976963317496166410141009864396001978282409984")`
$DIR/core/cbor/cbor_test.go: `.Run(test.name, func(t *testing.T) {
b, err := hexutil.Decode(test.in)
assert.NoError(t, err)
json, err := ParseDietCBOR(b)
if test.wantErrored {
assert.Error(t, err)
} else {
assert.NoError(t, err)
assert.Equal(t, test.want, json)
}
})`
$DIR/core/cbor/cbor_test.go: `.Decode(test.in)`
$DIR/core/cbor/cbor_test.go: `.Decode(hexCBOR)`
$DIR/core/cbor/cbor_test.go: `.Decode(hexCBOR)`
$DIR/core/cbor/cbor_test.go: `.Decode(hexCBOR)`
$DIR/core/cbor/cbor_test.go: `.MustDecode("0xA0")`
$DIR/core/cbor/cbor_test.go: `.MustDecode("0xA0")`
$DIR/core/cbor/cbor_test.go: `.MustDecode("0xA1636B65796576616C7565")`
$DIR/core/cbor/cbor_test.go: `.MustDecode("0xA1636B65796576616C7565")`
$DIR/core/cbor/cbor_test.go: `.MustDecode("0x80")`
$DIR/core/cbor/cbor_test.go: `.MustDecode("0x80")`
$DIR/core/cbor/cbor_test.go: `.MustDecode("0xbf636B65796576616C7565ff")`
$DIR/core/cbor/cbor_test.go: `.MustDecode("0xbf636B65796576616C7565ff")`
$DIR/core/cbor/cbor_test.go: `.MustDecode("0x636B65796576616C7565ff")`
$DIR/core/cbor/cbor_test.go: `.MustDecode("0xbf636B65796576616C7565ffff")`
$DIR/core/cbor/cbor_test.go: `.MustDecode("0xbf636B65796576616C7565")`
$DIR/core/cbor/cbor_test.go: `.MustDecode("0xbf636B65796576616C7565")`
$DIR/core/cbor/cbor_test.go: `.MustDecode("0x636B65796576616C7565")`
$DIR/core/cbor/cbor_test.go: `.MustDecode("0xbf636B65796576616C7565ff")`
$DIR/core/cbor/cbor_test.go: `.Run(test.name, func(t *testing.T) {
assert.Equal(t, test.want, autoAddMapDelimiters(test.in))
})`
$DIR/core/cbor/cbor_test.go: `.Run(test.name, func(t *testing.T) {
decoded, err := CoerceInterfaceMapToStringMap(test.input)
require.NoError(t, err)
assert.True(t, reflect.DeepEqual(test.want, decoded))
})`
$DIR/core/cbor/cbor_test.go: `.Run(test.name, func(t *testing.T) {
_, err := CoerceInterfaceMapToStringMap(test.input)
assert.Error(t, err)
})`
$DIR/core/cbor/cbor_test.go: `.Run(test.name, func(t *testing.T) {
encoded := mustMarshal(t, test.in)
var decoded interface{}
err := cbor.Unmarshal(encoded, &decoded)
require.NoError(t, err)
decoded, err = CoerceInterfaceMapToStringMap(decoded)
require.NoError(t, err)
assert.True(t, reflect.DeepEqual(test.in, decoded))
})`
$DIR/core/cbor/cbor_test.go: `.Unmarshal(encoded, &decoded)`
$DIR/core/chains/chain_kv_test.go: `kv = chains.NewChainsKV[*testChainService](onechain)`
$DIR/core/chains/chain_kv_test.go: `c, err = kv.Get(testChainID)`
$DIR/core/chains/chain_kv_test.go: `cs, err = kv.List()`
$DIR/core/chains/chain_kv_test.go: `cs, err = kv.List(testChainID)`
$DIR/core/chains/chain_kv_test.go: `cs, err = kv.List("no such id")`
$DIR/core/chains/chain_kv_test.go: `.Get(testChainID)`
$DIR/core/chains/chain_kv_test.go: `.List()`
$DIR/core/chains/chain_kv_test.go: `.Get(testChainID)`
$DIR/core/chains/chain_kv_test.go: `.List()`
$DIR/core/chains/chain_kv_test.go: `.List(testChainID)`
$DIR/core/chains/chain_kv_test.go: `.List("no such id")`
$DIR/core/chains/evm/abi/selector_parser_test.go: `result = append(result, abi.ArgumentMarshaling{Name: name, Type: typeName, InternalType: typeName, Components: nil, Indexed: false})`
$DIR/core/chains/evm/abi/selector_parser_test.go: `result = append(result, abi.ArgumentMarshaling{Name: name, Type: "tuple", InternalType: "tuple", Components: components, Indexed: false})`
$DIR/core/chains/evm/abi/selector_parser_test.go: `result = append(result, abi.ArgumentMarshaling{Name: name, Type: "tuple[]", InternalType: "tuple[]", Components: components[0], Indexed: false})`
$DIR/core/chains/evm/abi/selector_parser_test.go: `t.Run(scenario.description, func(t *testing.T) {
_, err := ParseSelector(scenario.input)
require.Error(t, err)
assert.Equal(t, scenario.expectedError, err.Error())
})`
$DIR/core/chains/evm/abi/selector_parser_test.go: `.Sprintf("name%d", i)`
$DIR/core/chains/evm/abi/selector_parser_test.go: `.DeepEqual(selector.Inputs, tt.args)`
$DIR/core/chains/evm/abi/selector_parser_test.go: `.DeepEqual(selector.Inputs, tt.args)`
$DIR/core/chains/evm/abi/selector_parser_test.go: `.Run(scenario.description, func(t *testing.T) {
_, err := ParseSelector(scenario.input)
require.Error(t, err)
assert.Equal(t, scenario.expectedError, err.Error())
})`
$DIR/core/chains/evm/assets/assets_test.go: `eth.SetInt64(1)`
$DIR/core/chains/evm/assets/assets_test.go: `eth.SetString("900000000000000000", 10)`
$DIR/core/chains/evm/assets/assets_test.go: `eth.SetString("115792089237316195423570985008687907853269984665640564039457584007913129639935", 10)`
$DIR/core/chains/evm/assets/assets_test.go: `eth.SetString("115792089237316195423570985008687907853269984665640564039457584007913129639936", 10)`
$DIR/core/chains/evm/assets/assets_test.go: `err = json.Unmarshal([]byte(`1`), ð)`
$DIR/core/chains/evm/assets/assets_test.go: `err = eth2.Scan(v)`
$DIR/core/chains/evm/assets/assets_test.go: `.NewEth(0)`
$DIR/core/chains/evm/assets/assets_test.go: `.SetInt64(1)`
$DIR/core/chains/evm/assets/assets_test.go: `.SetString("900000000000000000", 10)`
$DIR/core/chains/evm/assets/assets_test.go: `.SetString("115792089237316195423570985008687907853269984665640564039457584007913129639935", 10)`
$DIR/core/chains/evm/assets/assets_test.go: `.SetString("115792089237316195423570985008687907853269984665640564039457584007913129639936", 10)`
$DIR/core/chains/evm/assets/assets_test.go: `.String()`
$DIR/core/chains/evm/assets/assets_test.go: `.NewEth(0)`
$DIR/core/chains/evm/assets/assets_test.go: `.NewEth(1)`
$DIR/core/chains/evm/assets/assets_test.go: `.IsZero()`
$DIR/core/chains/evm/assets/assets_test.go: `.NewEth(1)`
$DIR/core/chains/evm/assets/assets_test.go: `.Marshal(eth)`
$DIR/core/chains/evm/assets/assets_test.go: `.Unmarshal([]byte(`"1"`), ð)`
$DIR/core/chains/evm/assets/assets_test.go: `.String()`
$DIR/core/chains/evm/assets/assets_test.go: `.Unmarshal([]byte(`"x"`), ð)`
$DIR/core/chains/evm/assets/assets_test.go: `.Unmarshal([]byte(`1`), ð)`
$DIR/core/chains/evm/assets/assets_test.go: `.NewEth(123)`
$DIR/core/chains/evm/assets/assets_test.go: `.NewEthValue(123)`
$DIR/core/chains/evm/assets/assets_test.go: `.NewEthValueS(ethRef.String())`
$DIR/core/chains/evm/assets/assets_test.go: `.String()`
$DIR/core/chains/evm/assets/assets_test.go: `.NewEth(123)`
$DIR/core/chains/evm/assets/assets_test.go: `.Symbol()`
$DIR/core/chains/evm/assets/assets_test.go: `.NewEth(123)`
$DIR/core/chains/evm/assets/assets_test.go: `.Value()`
$DIR/core/chains/evm/assets/assets_test.go: `.NewEth(0)`
$DIR/core/chains/evm/assets/assets_test.go: `.Scan(v)`
$DIR/core/chains/evm/assets/assets_test.go: `.NewEth(123)`
$DIR/core/chains/evm/assets/assets_test.go: `.NewEth(321)`
$DIR/core/chains/evm/assets/assets_test.go: `.NewEth(321)`
$DIR/core/chains/evm/assets/assets_test.go: `.Cmp(eth2)`
$DIR/core/chains/evm/assets/units_test.go: `t.Run(test.name, func(t *testing.T) {
t.Parallel()
expected := assets.NewWeiI(0)
assert.Equal(t, expected, test.fn(0))
expected = assets.NewWeiI(100)
expected = expected.Mul(test.factor)
assert.Equal(t, expected, test.fn(100))
})`
$DIR/core/chains/evm/assets/units_test.go: `expected = assets.NewWeiI(100)`
$DIR/core/chains/evm/assets/units_test.go: `expected = expected.Mul(test.factor)`
$DIR/core/chains/evm/assets/units_test.go: `.NewInt(params.Wei)`
$DIR/core/chains/evm/assets/units_test.go: `.NewInt(params.GWei)`
$DIR/core/chains/evm/assets/units_test.go: `.NewInt(params.GWei * 1000)`
$DIR/core/chains/evm/assets/units_test.go: `.NewInt(params.Ether)`
$DIR/core/chains/evm/assets/units_test.go: `.Run(test.name, func(t *testing.T) {
t.Parallel()
expected := assets.NewWeiI(0)
assert.Equal(t, expected, test.fn(0))
expected = assets.NewWeiI(100)
expected = expected.Mul(test.factor)
assert.Equal(t, expected, test.fn(100))
})`
$DIR/core/chains/evm/assets/units_test.go: `.NewWeiI(0)`
$DIR/core/chains/evm/assets/units_test.go: `.NewWeiI(100)`
$DIR/core/chains/evm/assets/units_test.go: `.Mul(test.factor)`
$DIR/core/chains/evm/assets/wei_test.go: `t.Run(tt.input, func(t *testing.T) {
var w Wei
err := w.UnmarshalText([]byte(tt.input))
require.NoError(t, err)
b, err := w.MarshalText()
require.NoError(t, err)
assert.Equal(t, tt.exp, string(b))
assert.Equal(t, tt.exp, w.String())
})`
$DIR/core/chains/evm/assets/wei_test.go: `got = tryParseExp("0e-80000800")`
$DIR/core/chains/evm/assets/wei_test.go: `got = tryParseExp("0e+802444440")`
$DIR/core/chains/evm/assets/wei_test.go: `.Run(tt.input, func(t *testing.T) {
var w Wei
err := w.UnmarshalText([]byte(tt.input))
require.NoError(t, err)
b, err := w.MarshalText()
require.NoError(t, err)
assert.Equal(t, tt.exp, string(b))
assert.Equal(t, tt.exp, w.String())
})`
$DIR/core/chains/evm/assets/wei_test.go: `.UnmarshalText([]byte(tt.input))`
$DIR/core/chains/evm/assets/wei_test.go: `.MarshalText()`
$DIR/core/chains/evm/client/chain_client_test.go: `err = json.Unmarshal(response, &resp)`
$DIR/core/chains/evm/client/chain_client_test.go: `t.Run("happy path", func(t *testing.T) {
result := mustReadResult(t, "../../../testdata/jsonrpc/getTransactionReceipt.json")
wsURL := testutils.NewWSServer(t, testutils.FixtureChainID, func(method string, params gjson.Result) (resp testutils.JSONRPCResponse) {
switch method {
case "eth_subscribe":
resp.Result = `"0x00"`
resp.Notify = headResult
return
case "eth_unsubscribe":
resp.Result = "true"
return
}
if assert.Equal(t, "eth_getTransactionReceipt", method) && assert.True(t, params.IsArray()) &&
assert.Equal(t, txHash, params.Array()[0].String()) {
resp.Result = string(result)
}
return
}).WSURL().String()
ethClient := mustNewChainClient(t, wsURL)
err := ethClient.Dial(tests.Context(t))
require.NoError(t, err)
hash := common.HexToHash(txHash)
receipt, err := ethClient.TransactionReceipt(tests.Context(t), hash)
require.NoError(t, err)
assert.Equal(t, hash, receipt.TxHash)
assert.Equal(t, big.NewInt(11), receipt.BlockNumber)
})`
$DIR/core/chains/evm/client/chain_client_test.go: `resp.Result = `"0x00"``
$DIR/core/chains/evm/client/chain_client_test.go: `resp.Notify = headResult`
$DIR/core/chains/evm/client/chain_client_test.go: `resp.Result = "true"`
$DIR/core/chains/evm/client/chain_client_test.go: `resp.Result = string(result)`
$DIR/core/chains/evm/client/chain_client_test.go: `resp.Result = `"0x00"``
$DIR/core/chains/evm/client/chain_client_test.go: `resp.Notify = headResult`
$DIR/core/chains/evm/client/chain_client_test.go: `resp.Result = "true"`
$DIR/core/chains/evm/client/chain_client_test.go: `resp.Result = string(result)`
$DIR/core/chains/evm/client/chain_client_test.go: `_, err = ethClient.TransactionReceipt(tests.Context(t), hash)`
$DIR/core/chains/evm/client/chain_client_test.go: `resp.Result = `"0x00"``
$DIR/core/chains/evm/client/chain_client_test.go: `resp.Notify = headResult`
$DIR/core/chains/evm/client/chain_client_test.go: `resp.Result = "true"`
$DIR/core/chains/evm/client/chain_client_test.go: `resp.Result = `"0x100"``
$DIR/core/chains/evm/client/chain_client_test.go: `t.Run(test.name, func(t *testing.T) {
wsURL := testutils.NewWSServer(t, testutils.FixtureChainID, func(method string, params gjson.Result) (resp testutils.JSONRPCResponse) {
switch method {
case "eth_subscribe":
resp.Result = `"0x00"`
resp.Notify = headResult
return
case "eth_unsubscribe":
resp.Result = "true"
return
}
if assert.Equal(t, "eth_getBalance", method) && assert.True(t, params.IsArray()) &&
assert.Equal(t, strings.ToLower(address.Hex()), strings.ToLower(params.Array()[0].String())) {
resp.Result = `"` + hexutil.EncodeBig(test.balance) + `"`
}
return
}).WSURL().String()
ethClient := mustNewChainClient(t, wsURL)
err := ethClient.Dial(tests.Context(t))
require.NoError(t, err)
result, err := ethClient.BalanceAt(tests.Context(t), address, nil)
require.NoError(t, err)
assert.Equal(t, test.balance, result)
})`
$DIR/core/chains/evm/client/chain_client_test.go: `resp.Result = `"0x00"``
$DIR/core/chains/evm/client/chain_client_test.go: `resp.Notify = headResult`
$DIR/core/chains/evm/client/chain_client_test.go: `resp.Result = "true"`
$DIR/core/chains/evm/client/chain_client_test.go: `resp.Result = `"` + hexutil.EncodeBig(test.balance) + `"``
$DIR/core/chains/evm/client/chain_client_test.go: `resp.Result = `"0x00"``
$DIR/core/chains/evm/client/chain_client_test.go: `resp.Notify = headResult`
$DIR/core/chains/evm/client/chain_client_test.go: `resp.Result = "true"`
$DIR/core/chains/evm/client/chain_client_test.go: `resp.Result = `"0x100"``
$DIR/core/chains/evm/client/chain_client_test.go: `t.Run(test.name, func(t *testing.T) {
contractAddress := testutils.NewAddress()
userAddress := testutils.NewAddress()
functionSelector := evmtypes.HexToFunctionSelector(client.BALANCE_OF_ADDRESS_FUNCTION_SELECTOR) // balanceOf(address)
txData := utils.ConcatBytes(functionSelector.Bytes(), common.LeftPadBytes(userAddress.Bytes(), utils.EVMWordByteLen))
wsURL := testutils.NewWSServer(t, testutils.FixtureChainID, func(method string, params gjson.Result) (resp testutils.JSONRPCResponse) {
switch method {
case "eth_subscribe":
resp.Result = `"0x00"`
resp.Notify = headResult
return
case "eth_unsubscribe":
resp.Result = "true"
return
}
if !assert.Equal(t, "eth_call", method) || !assert.True(t, params.IsArray()) {
return
}
arr := params.Array()
callArgs := arr[0]
if assert.True(t, callArgs.IsObject()) &&
assert.Equal(t, strings.ToLower(contractAddress.Hex()), callArgs.Get("to").String()) &&
assert.Equal(t, hexutil.Encode(txData), callArgs.Get("data").String()) &&
assert.Equal(t, "latest", arr[1].String()) {
resp.Result = `"` + hexutil.EncodeBig(test.balance) + `"`
}
return
}).WSURL().String()
ethClient := mustNewChainClient(t, wsURL)
err := ethClient.Dial(tests.Context(t))
require.NoError(t, err)
result, err := ethClient.TokenBalance(ctx, userAddress, contractAddress)
require.NoError(t, err)
assert.Equal(t, test.balance, result)
})`
$DIR/core/chains/evm/client/chain_client_test.go: `resp.Result = `"0x00"``
$DIR/core/chains/evm/client/chain_client_test.go: `resp.Notify = headResult`
$DIR/core/chains/evm/client/chain_client_test.go: `resp.Result = "true"`
$DIR/core/chains/evm/client/chain_client_test.go: `resp.Result = `"` + hexutil.EncodeBig(test.balance) + `"``
$DIR/core/chains/evm/client/chain_client_test.go: `t.Run(test.name, func(t *testing.T) {
wsURL := testutils.NewWSServer(t, testutils.FixtureChainID, func(method string, params gjson.Result) (resp testutils.JSONRPCResponse) {
switch method {
case "eth_subscribe":
resp.Result = `"0x00"`
resp.Notify = headResult
return
case "eth_unsubscribe":
resp.Result = "true"
return
}
if !assert.Equal(t, "eth_getBlockByNumber", method) || !assert.True(t, params.IsArray()) {
return
}
arr := params.Array()
blockNumStr := arr[0].String()
var blockNum hexutil.Big
err := blockNum.UnmarshalText([]byte(blockNumStr))
if assert.NoError(t, err) && assert.Equal(t, test.expectedRequestBlock, blockNum.ToInt()) &&
assert.Equal(t, false, arr[1].Bool()) {
resp.Result = test.rpcResp
}
return
}).WSURL().String()
ethClient := mustNewChainClient(t, wsURL)
err := ethClient.Dial(tests.Context(t))
require.NoError(t, err)
ctx, cancel := context.WithTimeout(tests.Context(t), 5*time.Second)
result, err := ethClient.HeadByNumber(ctx, expectedBlockNum)
if test.error != nil {
require.Error(t, err, test.error)
} else {
require.NoError(t, err)
require.Equal(t, expectedBlockHash, result.Hash.Hex())
require.Equal(t, test.expectedResponseBlock, result.Number)
require.Zero(t, testutils.FixtureChainID.Cmp(result.EVMChainID.ToInt()))
}
cancel()
})`
$DIR/core/chains/evm/client/chain_client_test.go: `resp.Result = `"0x00"``
$DIR/core/chains/evm/client/chain_client_test.go: `resp.Notify = headResult`
$DIR/core/chains/evm/client/chain_client_test.go: `resp.Result = "true"`
$DIR/core/chains/evm/client/chain_client_test.go: `resp.Result = test.rpcResp`
$DIR/core/chains/evm/client/chain_client_test.go: `cancel()`
$DIR/core/chains/evm/client/chain_client_test.go: `resp.Result = `"0x00"``
$DIR/core/chains/evm/client/chain_client_test.go: `resp.Notify = headResult`
$DIR/core/chains/evm/client/chain_client_test.go: `resp.Result = "true"`
$DIR/core/chains/evm/client/chain_client_test.go: `resp.Result = `"` + tx.Hash().Hex() + `"``
$DIR/core/chains/evm/client/chain_client_test.go: `err = ethClient.SendTransaction(tests.Context(t), tx)`
$DIR/core/chains/evm/client/chain_client_test.go: `resp.Result = `"0x00"``
$DIR/core/chains/evm/client/chain_client_test.go: `resp.Notify = headResult`
$DIR/core/chains/evm/client/chain_client_test.go: `resp.Result = "true"`
$DIR/core/chains/evm/client/chain_client_test.go: `resp.Result = `"` + tx.Hash().Hex() + `"``
$DIR/core/chains/evm/client/chain_client_test.go: `t.Cleanup(rpcSrv.Stop)`
$DIR/core/chains/evm/client/chain_client_test.go: `t.Cleanup(ts.Close)`
$DIR/core/chains/evm/client/chain_client_test.go: `err = ethClient.Dial(tests.Context(t))`
$DIR/core/chains/evm/client/chain_client_test.go: `err = ethClient.SendTransaction(tests.Context(t), tx)`
$DIR/core/chains/evm/client/chain_client_test.go: `t.Run("returns Fatal error type when error message is fatal", func(t *testing.T) {
wsURL := testutils.NewWSServer(t, testutils.FixtureChainID, func(method string, params gjson.Result) (resp testutils.JSONRPCResponse) {
switch method {
case "eth_subscribe":
resp.Result = `"0x00"`
resp.Notify = headResult
return
case "eth_unsubscribe":
resp.Result = "true"
return
case "eth_sendRawTransaction":
resp.Result = `"` + tx.Hash().Hex() + `"`
resp.Error.Message = "invalid sender"
}
return
}).WSURL().String()
ethClient := mustNewChainClient(t, wsURL)
err := ethClient.Dial(tests.Context(t))
require.NoError(t, err)
errType, err := ethClient.SendTransactionReturnCode(tests.Context(t), tx, fromAddress)
assert.Error(t, err)
assert.Equal(t, errType, commonclient.Fatal)
})`
$DIR/core/chains/evm/client/chain_client_test.go: `resp.Result = `"0x00"``
$DIR/core/chains/evm/client/chain_client_test.go: `resp.Notify = headResult`
$DIR/core/chains/evm/client/chain_client_test.go: `resp.Result = "true"`
$DIR/core/chains/evm/client/chain_client_test.go: `resp.Result = `"` + tx.Hash().Hex() + `"``
$DIR/core/chains/evm/client/chain_client_test.go: `resp.Error.Message = "invalid sender"`
$DIR/core/chains/evm/client/chain_client_test.go: `t.Run("returns TransactionAlreadyKnown error type when error message is nonce too low", func(t *testing.T) {
wsURL := testutils.NewWSServer(t, testutils.FixtureChainID, func(method string, params gjson.Result) (resp testutils.JSONRPCResponse) {
switch method {
case "eth_subscribe":
resp.Result = `"0x00"`
resp.Notify = headResult
return
case "eth_unsubscribe":
resp.Result = "true"
return
case "eth_sendRawTransaction":
resp.Result = `"` + tx.Hash().Hex() + `"`
resp.Error.Message = "nonce too low"
}
return
}).WSURL().String()
ethClient := mustNewChainClient(t, wsURL)
err := ethClient.Dial(tests.Context(t))
require.NoError(t, err)
errType, err := ethClient.SendTransactionReturnCode(tests.Context(t), tx, fromAddress)
assert.Error(t, err)
assert.Equal(t, errType, commonclient.TransactionAlreadyKnown)
})`
$DIR/core/chains/evm/client/chain_client_test.go: `resp.Result = `"0x00"``
$DIR/core/chains/evm/client/chain_client_test.go: `resp.Notify = headResult`
$DIR/core/chains/evm/client/chain_client_test.go: `resp.Result = "true"`
$DIR/core/chains/evm/client/chain_client_test.go: `resp.Result = `"` + tx.Hash().Hex() + `"``
$DIR/core/chains/evm/client/chain_client_test.go: `resp.Error.Message = "nonce too low"`
$DIR/core/chains/evm/client/chain_client_test.go: `t.Run("returns Successful error type when there is no error message", func(t *testing.T) {
wsURL := testutils.NewWSServer(t, testutils.FixtureChainID, func(method string, params gjson.Result) (resp testutils.JSONRPCResponse) {
switch method {
case "eth_subscribe":
resp.Result = `"0x00"`
resp.Notify = headResult
return
case "eth_unsubscribe":
resp.Result = "true"
return
case "eth_sendRawTransaction":
resp.Result = `"` + tx.Hash().Hex() + `"`
}
return
}).WSURL().String()
ethClient := mustNewChainClient(t, wsURL)
err := ethClient.Dial(tests.Context(t))
require.NoError(t, err)
errType, err := ethClient.SendTransactionReturnCode(tests.Context(t), tx, fromAddress)
assert.NoError(t, err)
assert.Equal(t, errType, commonclient.Successful)
})`
$DIR/core/chains/evm/client/chain_client_test.go: `resp.Result = `"0x00"``
$DIR/core/chains/evm/client/chain_client_test.go: `resp.Notify = headResult`
$DIR/core/chains/evm/client/chain_client_test.go: `resp.Result = "true"`
$DIR/core/chains/evm/client/chain_client_test.go: `resp.Result = `"` + tx.Hash().Hex() + `"``
$DIR/core/chains/evm/client/chain_client_test.go: `t.Run("returns Underpriced error type when transaction is terminally underpriced", func(t *testing.T) {
wsURL := testutils.NewWSServer(t, testutils.FixtureChainID, func(method string, params gjson.Result) (resp testutils.JSONRPCResponse) {
switch method {
case "eth_subscribe":
resp.Result = `"0x00"`
resp.Notify = headResult
return
case "eth_unsubscribe":
resp.Result = "true"
return
case "eth_sendRawTransaction":
resp.Result = `"` + tx.Hash().Hex() + `"`
resp.Error.Message = "transaction underpriced"
}
return
}).WSURL().String()
ethClient := mustNewChainClient(t, wsURL)
err := ethClient.Dial(tests.Context(t))
require.NoError(t, err)
errType, err := ethClient.SendTransactionReturnCode(tests.Context(t), tx, fromAddress)
assert.Error(t, err)
assert.Equal(t, errType, commonclient.Underpriced)
})`
$DIR/core/chains/evm/client/chain_client_test.go: `resp.Result = `"0x00"``
$DIR/core/chains/evm/client/chain_client_test.go: `resp.Notify = headResult`
$DIR/core/chains/evm/client/chain_client_test.go: `resp.Result = "true"`
$DIR/core/chains/evm/client/chain_client_test.go: `resp.Result = `"` + tx.Hash().Hex() + `"``
$DIR/core/chains/evm/client/chain_client_test.go: `resp.Error.Message = "transaction underpriced"`
$DIR/core/chains/evm/client/chain_client_test.go: `t.Run("returns Unsupported error type when error message is queue full", func(t *testing.T) {
wsURL := testutils.NewWSServer(t, testutils.FixtureChainID, func(method string, params gjson.Result) (resp testutils.JSONRPCResponse) {
switch method {
case "eth_subscribe":
resp.Result = `"0x00"`
resp.Notify = headResult
return
case "eth_unsubscribe":
resp.Result = "true"
return
case "eth_sendRawTransaction":
resp.Result = `"` + tx.Hash().Hex() + `"`
resp.Error.Message = "queue full"
}
return
}).WSURL().String()
ethClient := mustNewChainClient(t, wsURL)
err := ethClient.Dial(tests.Context(t))
require.NoError(t, err)
errType, err := ethClient.SendTransactionReturnCode(tests.Context(t), tx, fromAddress)
assert.Error(t, err)
assert.Equal(t, errType, commonclient.Unsupported)
})`
$DIR/core/chains/evm/client/chain_client_test.go: `resp.Result = `"0x00"``
$DIR/core/chains/evm/client/chain_client_test.go: `resp.Notify = headResult`
$DIR/core/chains/evm/client/chain_client_test.go: `resp.Result = "true"`
$DIR/core/chains/evm/client/chain_client_test.go: `resp.Result = `"` + tx.Hash().Hex() + `"``
$DIR/core/chains/evm/client/chain_client_test.go: `resp.Error.Message = "queue full"`
$DIR/core/chains/evm/client/chain_client_test.go: `t.Run("returns Retryable error type when there is a transaction gap", func(t *testing.T) {
wsURL := testutils.NewWSServer(t, testutils.FixtureChainID, func(method string, params gjson.Result) (resp testutils.JSONRPCResponse) {
switch method {
case "eth_subscribe":
resp.Result = `"0x00"`
resp.Notify = headResult
return
case "eth_unsubscribe":
resp.Result = "true"
return
case "eth_sendRawTransaction":
resp.Result = `"` + tx.Hash().Hex() + `"`
resp.Error.Message = "NonceGap"
}
return
}).WSURL().String()
ethClient := mustNewChainClient(t, wsURL)
err := ethClient.Dial(tests.Context(t))
require.NoError(t, err)
errType, err := ethClient.SendTransactionReturnCode(tests.Context(t), tx, fromAddress)
assert.Error(t, err)
assert.Equal(t, errType, commonclient.Retryable)
})`
$DIR/core/chains/evm/client/chain_client_test.go: `resp.Result = `"0x00"``
$DIR/core/chains/evm/client/chain_client_test.go: `resp.Notify = headResult`
$DIR/core/chains/evm/client/chain_client_test.go: `resp.Result = "true"`
$DIR/core/chains/evm/client/chain_client_test.go: `resp.Result = `"` + tx.Hash().Hex() + `"``
$DIR/core/chains/evm/client/chain_client_test.go: `resp.Error.Message = "NonceGap"`
$DIR/core/chains/evm/client/chain_client_test.go: `t.Run("returns InsufficientFunds error type when the sender address doesn't have enough funds", func(t *testing.T) {
wsURL := testutils.NewWSServer(t, testutils.FixtureChainID, func(method string, params gjson.Result) (resp testutils.JSONRPCResponse) {
switch method {
case "eth_subscribe":
resp.Result = `"0x00"`
resp.Notify = headResult
return
case "eth_unsubscribe":
resp.Result = "true"
return
case "eth_sendRawTransaction":
resp.Result = `"` + tx.Hash().Hex() + `"`
resp.Error.Message = "insufficient funds for transfer"
}
return
}).WSURL().String()
ethClient := mustNewChainClient(t, wsURL)
err := ethClient.Dial(tests.Context(t))
require.NoError(t, err)
errType, err := ethClient.SendTransactionReturnCode(tests.Context(t), tx, fromAddress)
assert.Error(t, err)
assert.Equal(t, errType, commonclient.InsufficientFunds)
})`
$DIR/core/chains/evm/client/chain_client_test.go: `resp.Result = `"0x00"``
$DIR/core/chains/evm/client/chain_client_test.go: `resp.Notify = headResult`
$DIR/core/chains/evm/client/chain_client_test.go: `resp.Result = "true"`
$DIR/core/chains/evm/client/chain_client_test.go: `resp.Result = `"` + tx.Hash().Hex() + `"``
$DIR/core/chains/evm/client/chain_client_test.go: `resp.Error.Message = "insufficient funds for transfer"`
$DIR/core/chains/evm/client/chain_client_test.go: `t.Run("returns ExceedsFeeCap error type when gas price is too high for the node", func(t *testing.T) {
wsURL := testutils.NewWSServer(t, testutils.FixtureChainID, func(method string, params gjson.Result) (resp testutils.JSONRPCResponse) {
switch method {
case "eth_subscribe":
resp.Result = `"0x00"`
resp.Notify = headResult
return
case "eth_unsubscribe":
resp.Result = "true"
return
case "eth_sendRawTransaction":
resp.Result = `"` + tx.Hash().Hex() + `"`
resp.Error.Message = "Transaction fee cap exceeded"
}
return
}).WSURL().String()
ethClient := mustNewChainClient(t, wsURL)
err := ethClient.Dial(tests.Context(t))
require.NoError(t, err)
errType, err := ethClient.SendTransactionReturnCode(tests.Context(t), tx, fromAddress)
assert.Error(t, err)
assert.Equal(t, errType, commonclient.ExceedsMaxFee)
})`
$DIR/core/chains/evm/client/chain_client_test.go: `resp.Result = `"0x00"``
$DIR/core/chains/evm/client/chain_client_test.go: `resp.Notify = headResult`
$DIR/core/chains/evm/client/chain_client_test.go: `resp.Result = "true"`
$DIR/core/chains/evm/client/chain_client_test.go: `resp.Result = `"` + tx.Hash().Hex() + `"``
$DIR/core/chains/evm/client/chain_client_test.go: `resp.Error.Message = "Transaction fee cap exceeded"`
$DIR/core/chains/evm/client/chain_client_test.go: `resp.Result = `"0x00"``
$DIR/core/chains/evm/client/chain_client_test.go: `resp.Notify = headResult`
$DIR/core/chains/evm/client/chain_client_test.go: `resp.Result = "true"`
$DIR/core/chains/evm/client/chain_client_test.go: `resp.Result = `"` + tx.Hash().Hex() + `"``
$DIR/core/chains/evm/client/chain_client_test.go: `resp.Error.Message = "some random error"`
$DIR/core/chains/evm/client/chain_client_test.go: `resp.Result = "true"`
$DIR/core/chains/evm/client/chain_client_test.go: `resp.Result = `"0x00"``
$DIR/core/chains/evm/client/chain_client_test.go: `resp.Notify = headResult`
$DIR/core/chains/evm/client/chain_client_test.go: `mockRpc.On("BatchCallContext", mock.Anything, b).Run(func(args mock.Arguments) {
reqs := args.Get(1).([]rpc.BatchElem)
for i := 0; i < len(reqs); i++ {
elem := &reqs[i]
elem.Error = rpcError
}
}).Return(nil).Once()`
$DIR/core/chains/evm/client/chain_client_test.go: `elem.Error = rpcError`
$DIR/core/chains/evm/client/chain_client_test.go: `err = client.BatchCallContext(ctx, b)`
$DIR/core/chains/evm/client/chain_client_test.go: `err = erroringClient.BatchCallContext(ctx, nil)`
$DIR/core/chains/evm/client/chain_client_test.go: `err = erroringClient.BatchCallContextAll(ctx, nil)`
$DIR/core/chains/evm/client/chain_client_test.go: `_, err = erroringClient.BlockByHash(ctx, common.Hash{})`
$DIR/core/chains/evm/client/chain_client_test.go: `_, err = erroringClient.BlockByNumber(ctx, nil)`
$DIR/core/chains/evm/client/chain_client_test.go: `err = erroringClient.CallContext(ctx, nil, "")`
$DIR/core/chains/evm/client/chain_client_test.go: `_, err = erroringClient.CallContract(ctx, ethereum.CallMsg{}, nil)`
$DIR/core/chains/evm/client/chain_client_test.go: `_, err = erroringClient.CodeAt(ctx, common.Address{}, nil)`
$DIR/core/chains/evm/client/chain_client_test.go: `id = erroringClient.ConfiguredChainID()`
$DIR/core/chains/evm/client/chain_client_test.go: `err = erroringClient.Dial(ctx)`
$DIR/core/chains/evm/client/chain_client_test.go: `_, err = erroringClient.EstimateGas(ctx, ethereum.CallMsg{})`
$DIR/core/chains/evm/client/chain_client_test.go: `_, err = erroringClient.FilterLogs(ctx, ethereum.FilterQuery{})`
$DIR/core/chains/evm/client/chain_client_test.go: `_, err = erroringClient.HeaderByHash(ctx, common.Hash{})`
$DIR/core/chains/evm/client/chain_client_test.go: `_, err = erroringClient.HeaderByNumber(ctx, nil)`
$DIR/core/chains/evm/client/chain_client_test.go: `_, err = erroringClient.HeadByHash(ctx, common.Hash{})`
$DIR/core/chains/evm/client/chain_client_test.go: `_, err = erroringClient.HeadByNumber(ctx, nil)`
$DIR/core/chains/evm/client/chain_client_test.go: `_, err = erroringClient.LINKBalance(ctx, common.Address{}, common.Address{})`
$DIR/core/chains/evm/client/chain_client_test.go: `_, err = erroringClient.LatestBlockHeight(ctx)`
$DIR/core/chains/evm/client/chain_client_test.go: `_, err = erroringClient.PendingCodeAt(ctx, common.Address{})`
$DIR/core/chains/evm/client/chain_client_test.go: `_, err = erroringClient.PendingNonceAt(ctx, common.Address{})`
$DIR/core/chains/evm/client/chain_client_test.go: `err = erroringClient.SendTransaction(ctx, nil)`
$DIR/core/chains/evm/client/chain_client_test.go: `_, err = erroringClient.SequenceAt(ctx, common.Address{}, nil)`
$DIR/core/chains/evm/client/chain_client_test.go: `_, err = erroringClient.SubscribeFilterLogs(ctx, ethereum.FilterQuery{}, nil)`
$DIR/core/chains/evm/client/chain_client_test.go: `_, err = erroringClient.SubscribeNewHead(ctx, nil)`
$DIR/core/chains/evm/client/chain_client_test.go: `_, err = erroringClient.SuggestGasPrice(ctx)`
$DIR/core/chains/evm/client/chain_client_test.go: `_, err = erroringClient.SuggestGasTipCap(ctx)`
$DIR/core/chains/evm/client/chain_client_test.go: `_, err = erroringClient.TokenBalance(ctx, common.Address{}, common.Address{})`
$DIR/core/chains/evm/client/chain_client_test.go: `_, err = erroringClient.TransactionByHash(ctx, common.Hash{})`
$DIR/core/chains/evm/client/chain_client_test.go: `_, err = erroringClient.TransactionReceipt(ctx, common.Hash{})`
$DIR/core/chains/evm/client/chain_client_test.go: `.ReadFile(file)`
$DIR/core/chains/evm/client/chain_client_test.go: `.Unmarshal(response, &resp)`
$DIR/core/chains/evm/client/chain_client_test.go: `.Run("happy path", func(t *testing.T) {
result := mustReadResult(t, "../../../testdata/jsonrpc/getTransactionReceipt.json")
wsURL := testutils.NewWSServer(t, testutils.FixtureChainID, func(method string, params gjson.Result) (resp testutils.JSONRPCResponse) {
switch method {
case "eth_subscribe":
resp.Result = `"0x00"`
resp.Notify = headResult
return
case "eth_unsubscribe":
resp.Result = "true"
return
}
if assert.Equal(t, "eth_getTransactionReceipt", method) && assert.True(t, params.IsArray()) &&
assert.Equal(t, txHash, params.Array()[0].String()) {
resp.Result = string(result)
}
return
}).WSURL().String()
ethClient := mustNewChainClient(t, wsURL)
err := ethClient.Dial(tests.Context(t))
require.NoError(t, err)
hash := common.HexToHash(txHash)
receipt, err := ethClient.TransactionReceipt(tests.Context(t), hash)
require.NoError(t, err)
assert.Equal(t, hash, receipt.TxHash)
assert.Equal(t, big.NewInt(11), receipt.BlockNumber)
})`
$DIR/core/chains/evm/client/chain_client_test.go: `.NewWSServer(t, testutils.FixtureChainID, func(method string, params gjson.Result) (resp testutils.JSONRPCResponse) {
switch method {
case "eth_subscribe":
resp.Result = `"0x00"`
resp.Notify = headResult
return
case "eth_unsubscribe":
resp.Result = "true"
return
}
if assert.Equal(t, "eth_getTransactionReceipt", method) && assert.True(t, params.IsArray()) &&
assert.Equal(t, txHash, params.Array()[0].String()) {
resp.Result = string(result)
}
return
})`
$DIR/core/chains/evm/client/chain_client_test.go: `.WSURL()`
$DIR/core/chains/evm/client/chain_client_test.go: `.String()`
$DIR/core/chains/evm/client/chain_client_test.go: `.Dial(tests.Context(t))`
$DIR/core/chains/evm/client/chain_client_test.go: `.Context(t)`
$DIR/core/chains/evm/client/chain_client_test.go: `.HexToHash(txHash)`
$DIR/core/chains/evm/client/chain_client_test.go: `.TransactionReceipt(tests.Context(t), hash)`
$DIR/core/chains/evm/client/chain_client_test.go: `.Context(t)`
$DIR/core/chains/evm/client/chain_client_test.go: `.NewWSServer(t, testutils.FixtureChainID, func(method string, params gjson.Result) (resp testutils.JSONRPCResponse) {
switch method {
case "eth_subscribe":
resp.Result = `"0x00"`
resp.Notify = headResult
return
case "eth_unsubscribe":
resp.Result = "true"
return
}
if assert.Equal(t, "eth_getTransactionReceipt", method) && assert.True(t, params.IsArray()) &&
assert.Equal(t, txHash, params.Array()[0].String()) {
resp.Result = string(result)
}
return
})`
$DIR/core/chains/evm/client/chain_client_test.go: `.WSURL()`
$DIR/core/chains/evm/client/chain_client_test.go: `.String()`
$DIR/core/chains/evm/client/chain_client_test.go: `.Dial(tests.Context(t))`
$DIR/core/chains/evm/client/chain_client_test.go: `.Context(t)`
$DIR/core/chains/evm/client/chain_client_test.go: `.HexToHash(txHash)`
$DIR/core/chains/evm/client/chain_client_test.go: `.TransactionReceipt(tests.Context(t), hash)`
$DIR/core/chains/evm/client/chain_client_test.go: `.Context(t)`
$DIR/core/chains/evm/client/chain_client_test.go: `.NewAddress()`
$DIR/core/chains/evm/client/chain_client_test.go: `.NewWSServer(t, testutils.FixtureChainID, func(method string, params gjson.Result) (resp testutils.JSONRPCResponse) {
switch method {
case "eth_subscribe":
resp.Result = `"0x00"`
resp.Notify = headResult
return
case "eth_unsubscribe":
resp.Result = "true"
return
}
if !assert.Equal(t, "eth_getTransactionCount", method) || !assert.True(t, params.IsArray()) {
return
}
arr := params.Array()
if assert.Equal(t, strings.ToLower(address.Hex()), strings.ToLower(arr[0].String())) &&
assert.Equal(t, "pending", arr[1].String()) {
resp.Result = `"0x100"`
}
return
})`
$DIR/core/chains/evm/client/chain_client_test.go: `.Array()`
$DIR/core/chains/evm/client/chain_client_test.go: `.WSURL()`
$DIR/core/chains/evm/client/chain_client_test.go: `.String()`
$DIR/core/chains/evm/client/chain_client_test.go: `.Dial(tests.Context(t))`
$DIR/core/chains/evm/client/chain_client_test.go: `.Context(t)`
$DIR/core/chains/evm/client/chain_client_test.go: `.PendingNonceAt(tests.Context(t), address)`
$DIR/core/chains/evm/client/chain_client_test.go: `.Context(t)`
$DIR/core/chains/evm/client/chain_client_test.go: `.NewInt(0)`
$DIR/core/chains/evm/client/chain_client_test.go: `.SetString("100000000000000000000", 10)`
$DIR/core/chains/evm/client/chain_client_test.go: `.NewAddress()`
$DIR/core/chains/evm/client/chain_client_test.go: `.NewInt(256)`
$DIR/core/chains/evm/client/chain_client_test.go: `.Run(test.name, func(t *testing.T) {
wsURL := testutils.NewWSServer(t, testutils.FixtureChainID, func(method string, params gjson.Result) (resp testutils.JSONRPCResponse) {
switch method {
case "eth_subscribe":
resp.Result = `"0x00"`
resp.Notify = headResult
return
case "eth_unsubscribe":
resp.Result = "true"
return
}
if assert.Equal(t, "eth_getBalance", method) && assert.True(t, params.IsArray()) &&
assert.Equal(t, strings.ToLower(address.Hex()), strings.ToLower(params.Array()[0].String())) {
resp.Result = `"` + hexutil.EncodeBig(test.balance) + `"`
}
return
}).WSURL().String()
ethClient := mustNewChainClient(t, wsURL)
err := ethClient.Dial(tests.Context(t))
require.NoError(t, err)
result, err := ethClient.BalanceAt(tests.Context(t), address, nil)
require.NoError(t, err)
assert.Equal(t, test.balance, result)
})`
$DIR/core/chains/evm/client/chain_client_test.go: `.NewWSServer(t, testutils.FixtureChainID, func(method string, params gjson.Result) (resp testutils.JSONRPCResponse) {
switch method {
case "eth_subscribe":
resp.Result = `"0x00"`
resp.Notify = headResult
return
case "eth_unsubscribe":
resp.Result = "true"
return
}
if assert.Equal(t, "eth_getBalance", method) && assert.True(t, params.IsArray()) &&
assert.Equal(t, strings.ToLower(address.Hex()), strings.ToLower(params.Array()[0].String())) {
resp.Result = `"` + hexutil.EncodeBig(test.balance) + `"`
}
return
})`
$DIR/core/chains/evm/client/chain_client_test.go: `.EncodeBig(test.balance)`
$DIR/core/chains/evm/client/chain_client_test.go: `.WSURL()`
$DIR/core/chains/evm/client/chain_client_test.go: `.String()`
$DIR/core/chains/evm/client/chain_client_test.go: `.Dial(tests.Context(t))`
$DIR/core/chains/evm/client/chain_client_test.go: `.Context(t)`
$DIR/core/chains/evm/client/chain_client_test.go: `.BalanceAt(tests.Context(t), address, nil)`
$DIR/core/chains/evm/client/chain_client_test.go: `.Context(t)`
$DIR/core/chains/evm/client/chain_client_test.go: `.NewWSServer(t, testutils.FixtureChainID, func(method string, params gjson.Result) (resp testutils.JSONRPCResponse) {
switch method {
case "eth_subscribe":
resp.Result = `"0x00"`
resp.Notify = headResult
return
case "eth_unsubscribe":
resp.Result = "true"
return
}
if !assert.Equal(t, "eth_blockNumber", method) {
return
}
resp.Result = `"0x100"`
return
})`
$DIR/core/chains/evm/client/chain_client_test.go: `.WSURL()`
$DIR/core/chains/evm/client/chain_client_test.go: `.String()`
$DIR/core/chains/evm/client/chain_client_test.go: `.Dial(tests.Context(t))`
$DIR/core/chains/evm/client/chain_client_test.go: `.Context(t)`
$DIR/core/chains/evm/client/chain_client_test.go: `.LatestBlockHeight(tests.Context(t))`
$DIR/core/chains/evm/client/chain_client_test.go: `.Context(t)`
$DIR/core/chains/evm/client/chain_client_test.go: `.NewInt(256)`
$DIR/core/chains/evm/client/chain_client_test.go: `.Context(t)`
$DIR/core/chains/evm/client/chain_client_test.go: `.NewInt(0)`
$DIR/core/chains/evm/client/chain_client_test.go: `.SetString("100000000000000000000000000000000000000", 10)`
$DIR/core/chains/evm/client/chain_client_test.go: `.NewInt(256)`
$DIR/core/chains/evm/client/chain_client_test.go: `.Run(test.name, func(t *testing.T) {
contractAddress := testutils.NewAddress()
userAddress := testutils.NewAddress()
functionSelector := evmtypes.HexToFunctionSelector(client.BALANCE_OF_ADDRESS_FUNCTION_SELECTOR) // balanceOf(address)
txData := utils.ConcatBytes(functionSelector.Bytes(), common.LeftPadBytes(userAddress.Bytes(), utils.EVMWordByteLen))
wsURL := testutils.NewWSServer(t, testutils.FixtureChainID, func(method string, params gjson.Result) (resp testutils.JSONRPCResponse) {
switch method {
case "eth_subscribe":
resp.Result = `"0x00"`
resp.Notify = headResult
return
case "eth_unsubscribe":
resp.Result = "true"
return
}
if !assert.Equal(t, "eth_call", method) || !assert.True(t, params.IsArray()) {
return
}
arr := params.Array()
callArgs := arr[0]
if assert.True(t, callArgs.IsObject()) &&
assert.Equal(t, strings.ToLower(contractAddress.Hex()), callArgs.Get("to").String()) &&
assert.Equal(t, hexutil.Encode(txData), callArgs.Get("data").String()) &&
assert.Equal(t, "latest", arr[1].String()) {
resp.Result = `"` + hexutil.EncodeBig(test.balance) + `"`
}
return
}).WSURL().String()
ethClient := mustNewChainClient(t, wsURL)
err := ethClient.Dial(tests.Context(t))
require.NoError(t, err)
result, err := ethClient.TokenBalance(ctx, userAddress, contractAddress)
require.NoError(t, err)
assert.Equal(t, test.balance, result)
})`
$DIR/core/chains/evm/client/chain_client_test.go: `.NewAddress()`
$DIR/core/chains/evm/client/chain_client_test.go: `.NewAddress()`
$DIR/core/chains/evm/client/chain_client_test.go: `.HexToFunctionSelector(client.BALANCE_OF_ADDRESS_FUNCTION_SELECTOR)`
$DIR/core/chains/evm/client/chain_client_test.go: `.ConcatBytes(functionSelector.Bytes(), common.LeftPadBytes(userAddress.Bytes(), utils.EVMWordByteLen))`
$DIR/core/chains/evm/client/chain_client_test.go: `.Bytes()`
$DIR/core/chains/evm/client/chain_client_test.go: `.LeftPadBytes(userAddress.Bytes(), utils.EVMWordByteLen)`
$DIR/core/chains/evm/client/chain_client_test.go: `.Bytes()`
$DIR/core/chains/evm/client/chain_client_test.go: `.NewWSServer(t, testutils.FixtureChainID, func(method string, params gjson.Result) (resp testutils.JSONRPCResponse) {
switch method {
case "eth_subscribe":
resp.Result = `"0x00"`
resp.Notify = headResult
return
case "eth_unsubscribe":
resp.Result = "true"
return
}
if !assert.Equal(t, "eth_call", method) || !assert.True(t, params.IsArray()) {
return
}
arr := params.Array()
callArgs := arr[0]
if assert.True(t, callArgs.IsObject()) &&
assert.Equal(t, strings.ToLower(contractAddress.Hex()), callArgs.Get("to").String()) &&
assert.Equal(t, hexutil.Encode(txData), callArgs.Get("data").String()) &&
assert.Equal(t, "latest", arr[1].String()) {
resp.Result = `"` + hexutil.EncodeBig(test.balance) + `"`
}
return
})`
$DIR/core/chains/evm/client/chain_client_test.go: `.Array()`
$DIR/core/chains/evm/client/chain_client_test.go: `.EncodeBig(test.balance)`
$DIR/core/chains/evm/client/chain_client_test.go: `.WSURL()`
$DIR/core/chains/evm/client/chain_client_test.go: `.String()`
$DIR/core/chains/evm/client/chain_client_test.go: `.Dial(tests.Context(t))`
$DIR/core/chains/evm/client/chain_client_test.go: `.Context(t)`
$DIR/core/chains/evm/client/chain_client_test.go: `.TokenBalance(ctx, userAddress, contractAddress)`
$DIR/core/chains/evm/client/chain_client_test.go: `.Unmarshal([]byte(input), &receipt)`
$DIR/core/chains/evm/client/chain_client_test.go: `.NewInt(1)`
$DIR/core/chains/evm/client/chain_client_test.go: `.Int64()`
$DIR/core/chains/evm/client/chain_client_test.go: `.Int64()`
$DIR/core/chains/evm/client/chain_client_test.go: `.Run(test.name, func(t *testing.T) {
wsURL := testutils.NewWSServer(t, testutils.FixtureChainID, func(method string, params gjson.Result) (resp testutils.JSONRPCResponse) {
switch method {
case "eth_subscribe":
resp.Result = `"0x00"`
resp.Notify = headResult
return
case "eth_unsubscribe":
resp.Result = "true"
return
}
if !assert.Equal(t, "eth_getBlockByNumber", method) || !assert.True(t, params.IsArray()) {
return
}
arr := params.Array()
blockNumStr := arr[0].String()
var blockNum hexutil.Big
err := blockNum.UnmarshalText([]byte(blockNumStr))
if assert.NoError(t, err) && assert.Equal(t, test.expectedRequestBlock, blockNum.ToInt()) &&
assert.Equal(t, false, arr[1].Bool()) {
resp.Result = test.rpcResp
}
return
}).WSURL().String()
ethClient := mustNewChainClient(t, wsURL)
err := ethClient.Dial(tests.Context(t))
require.NoError(t, err)
ctx, cancel := context.WithTimeout(tests.Context(t), 5*time.Second)
result, err := ethClient.HeadByNumber(ctx, expectedBlockNum)
if test.error != nil {
require.Error(t, err, test.error)
} else {
require.NoError(t, err)
require.Equal(t, expectedBlockHash, result.Hash.Hex())
require.Equal(t, test.expectedResponseBlock, result.Number)
require.Zero(t, testutils.FixtureChainID.Cmp(result.EVMChainID.ToInt()))
}
cancel()
})`
$DIR/core/chains/evm/client/chain_client_test.go: `.NewWSServer(t, testutils.FixtureChainID, func(method string, params gjson.Result) (resp testutils.JSONRPCResponse) {
switch method {
case "eth_subscribe":
resp.Result = `"0x00"`
resp.Notify = headResult
return
case "eth_unsubscribe":
resp.Result = "true"
return
}
if !assert.Equal(t, "eth_getBlockByNumber", method) || !assert.True(t, params.IsArray()) {
return
}
arr := params.Array()
blockNumStr := arr[0].String()
var blockNum hexutil.Big
err := blockNum.UnmarshalText([]byte(blockNumStr))
if assert.NoError(t, err) && assert.Equal(t, test.expectedRequestBlock, blockNum.ToInt()) &&
assert.Equal(t, false, arr[1].Bool()) {
resp.Result = test.rpcResp
}
return
})`
$DIR/core/chains/evm/client/chain_client_test.go: `.Array()`
$DIR/core/chains/evm/client/chain_client_test.go: `.String()`
$DIR/core/chains/evm/client/chain_client_test.go: `.UnmarshalText([]byte(blockNumStr))`
$DIR/core/chains/evm/client/chain_client_test.go: `.WSURL()`
$DIR/core/chains/evm/client/chain_client_test.go: `.String()`
$DIR/core/chains/evm/client/chain_client_test.go: `.Dial(tests.Context(t))`
$DIR/core/chains/evm/client/chain_client_test.go: `.Context(t)`
$DIR/core/chains/evm/client/chain_client_test.go: `.WithTimeout(tests.Context(t), 5*time.Second)`
$DIR/core/chains/evm/client/chain_client_test.go: `.Context(t)`
$DIR/core/chains/evm/client/chain_client_test.go: `.HeadByNumber(ctx, expectedBlockNum)`
$DIR/core/chains/evm/client/chain_client_test.go: `.NewLegacyTransaction(uint64(42), testutils.NewAddress(), big.NewInt(142), 242, big.NewInt(342), []byte{1, 2, 3})`
$DIR/core/chains/evm/client/chain_client_test.go: `.NewAddress()`
$DIR/core/chains/evm/client/chain_client_test.go: `.NewInt(142)`
$DIR/core/chains/evm/client/chain_client_test.go: `.NewInt(342)`
$DIR/core/chains/evm/client/chain_client_test.go: `.NewWSServer(t, testutils.FixtureChainID, func(method string, params gjson.Result) (resp testutils.JSONRPCResponse) {
switch method {
case "eth_subscribe":
resp.Result = `"0x00"`
resp.Notify = headResult
return
case "eth_unsubscribe":
resp.Result = "true"
return
}
if !assert.Equal(t, "eth_sendRawTransaction", method) {
return
}
resp.Result = `"` + tx.Hash().Hex() + `"`
return
})`
$DIR/core/chains/evm/client/chain_client_test.go: `.Hash()`
$DIR/core/chains/evm/client/chain_client_test.go: `.Hex()`
$DIR/core/chains/evm/client/chain_client_test.go: `.WSURL()`
$DIR/core/chains/evm/client/chain_client_test.go: `.String()`
$DIR/core/chains/evm/client/chain_client_test.go: `.Dial(tests.Context(t))`
$DIR/core/chains/evm/client/chain_client_test.go: `.Context(t)`
$DIR/core/chains/evm/client/chain_client_test.go: `.SendTransaction(tests.Context(t), tx)`
$DIR/core/chains/evm/client/chain_client_test.go: `.Context(t)`
$DIR/core/chains/evm/client/chain_client_test.go: `.NewLegacyTransaction(uint64(42), testutils.NewAddress(), big.NewInt(142), 242, big.NewInt(342), []byte{1, 2, 3})`
$DIR/core/chains/evm/client/chain_client_test.go: `.NewAddress()`
$DIR/core/chains/evm/client/chain_client_test.go: `.NewInt(142)`
$DIR/core/chains/evm/client/chain_client_test.go: `.NewInt(342)`
$DIR/core/chains/evm/client/chain_client_test.go: `.NewWSServer(t, testutils.FixtureChainID, func(method string, params gjson.Result) (resp testutils.JSONRPCResponse) {
switch method {
case "eth_subscribe":
resp.Result = `"0x00"`
resp.Notify = headResult
return
case "eth_unsubscribe":
resp.Result = "true"
return
case "eth_sendRawTransaction":
resp.Result = `"` + tx.Hash().Hex() + `"`
}
return
})`
$DIR/core/chains/evm/client/chain_client_test.go: `.Hash()`
$DIR/core/chains/evm/client/chain_client_test.go: `.Hex()`
$DIR/core/chains/evm/client/chain_client_test.go: `.WSURL()`
$DIR/core/chains/evm/client/chain_client_test.go: `.String()`
$DIR/core/chains/evm/client/chain_client_test.go: `.NewServer()`
$DIR/core/chains/evm/client/chain_client_test.go: `.Cleanup(rpcSrv.Stop)`
$DIR/core/chains/evm/client/chain_client_test.go: `.RegisterName("eth", &service)`
$DIR/core/chains/evm/client/chain_client_test.go: `.NewServer(rpcSrv)`
$DIR/core/chains/evm/client/chain_client_test.go: `.Cleanup(ts.Close)`
$DIR/core/chains/evm/client/chain_client_test.go: `.Parse(ts.URL)`
$DIR/core/chains/evm/client/chain_client_test.go: `.Dial(tests.Context(t))`
$DIR/core/chains/evm/client/chain_client_test.go: `.Context(t)`
$DIR/core/chains/evm/client/chain_client_test.go: `.SendTransaction(tests.Context(t), tx)`
$DIR/core/chains/evm/client/chain_client_test.go: `.Context(t)`
$DIR/core/chains/evm/client/chain_client_test.go: `.sentCount.Load()`
$DIR/core/chains/evm/client/chain_client_test.go: `.WaitTimeout(t)`
$DIR/core/chains/evm/client/chain_client_test.go: `.NewAddress()`
$DIR/core/chains/evm/client/chain_client_test.go: `.NewLegacyTransaction(uint64(42), testutils.NewAddress(), big.NewInt(142), 242, big.NewInt(342), []byte{1, 2, 3})`
$DIR/core/chains/evm/client/chain_client_test.go: `.NewAddress()`
$DIR/core/chains/evm/client/chain_client_test.go: `.NewInt(142)`
$DIR/core/chains/evm/client/chain_client_test.go: `.NewInt(342)`
$DIR/core/chains/evm/client/chain_client_test.go: `.Run("returns Fatal error type when error message is fatal", func(t *testing.T) {
wsURL := testutils.NewWSServer(t, testutils.FixtureChainID, func(method string, params gjson.Result) (resp testutils.JSONRPCResponse) {
switch method {
case "eth_subscribe":
resp.Result = `"0x00"`
resp.Notify = headResult
return
case "eth_unsubscribe":
resp.Result = "true"
return
case "eth_sendRawTransaction":
resp.Result = `"` + tx.Hash().Hex() + `"`
resp.Error.Message = "invalid sender"
}
return
}).WSURL().String()
ethClient := mustNewChainClient(t, wsURL)
err := ethClient.Dial(tests.Context(t))
require.NoError(t, err)
errType, err := ethClient.SendTransactionReturnCode(tests.Context(t), tx, fromAddress)
assert.Error(t, err)
assert.Equal(t, errType, commonclient.Fatal)
})`
$DIR/core/chains/evm/client/chain_client_test.go: `.NewWSServer(t, testutils.FixtureChainID, func(method string, params gjson.Result) (resp testutils.JSONRPCResponse) {
switch method {
case "eth_subscribe":
resp.Result = `"0x00"`
resp.Notify = headResult
return
case "eth_unsubscribe":
resp.Result = "true"
return
case "eth_sendRawTransaction":
resp.Result = `"` + tx.Hash().Hex() + `"`
resp.Error.Message = "invalid sender"
}
return
})`
$DIR/core/chains/evm/client/chain_client_test.go: `.Hash()`
$DIR/core/chains/evm/client/chain_client_test.go: `.Hex()`
$DIR/core/chains/evm/client/chain_client_test.go: `.WSURL()`
$DIR/core/chains/evm/client/chain_client_test.go: `.String()`
$DIR/core/chains/evm/client/chain_client_test.go: `.Dial(tests.Context(t))`
$DIR/core/chains/evm/client/chain_client_test.go: `.Context(t)`
$DIR/core/chains/evm/client/chain_client_test.go: `.SendTransactionReturnCode(tests.Context(t), tx, fromAddress)`
$DIR/core/chains/evm/client/chain_client_test.go: `.Context(t)`
$DIR/core/chains/evm/client/chain_client_test.go: `.Run("returns TransactionAlreadyKnown error type when error message is nonce too low", func(t *testing.T) {
wsURL := testutils.NewWSServer(t, testutils.FixtureChainID, func(method string, params gjson.Result) (resp testutils.JSONRPCResponse) {
switch method {
case "eth_subscribe":
resp.Result = `"0x00"`
resp.Notify = headResult
return
case "eth_unsubscribe":
resp.Result = "true"
return
case "eth_sendRawTransaction":
resp.Result = `"` + tx.Hash().Hex() + `"`
resp.Error.Message = "nonce too low"
}
return
}).WSURL().String()
ethClient := mustNewChainClient(t, wsURL)
err := ethClient.Dial(tests.Context(t))
require.NoError(t, err)
errType, err := ethClient.SendTransactionReturnCode(tests.Context(t), tx, fromAddress)
assert.Error(t, err)
assert.Equal(t, errType, commonclient.TransactionAlreadyKnown)
})`
$DIR/core/chains/evm/client/chain_client_test.go: `.NewWSServer(t, testutils.FixtureChainID, func(method string, params gjson.Result) (resp testutils.JSONRPCResponse) {
switch method {
case "eth_subscribe":
resp.Result = `"0x00"`
resp.Notify = headResult
return
case "eth_unsubscribe":
resp.Result = "true"
return
case "eth_sendRawTransaction":
resp.Result = `"` + tx.Hash().Hex() + `"`
resp.Error.Message = "nonce too low"
}
return
})`
$DIR/core/chains/evm/client/chain_client_test.go: `.Hash()`
$DIR/core/chains/evm/client/chain_client_test.go: `.Hex()`
$DIR/core/chains/evm/client/chain_client_test.go: `.WSURL()`
$DIR/core/chains/evm/client/chain_client_test.go: `.String()`
$DIR/core/chains/evm/client/chain_client_test.go: `.Dial(tests.Context(t))`
$DIR/core/chains/evm/client/chain_client_test.go: `.Context(t)`
$DIR/core/chains/evm/client/chain_client_test.go: `.SendTransactionReturnCode(tests.Context(t), tx, fromAddress)`
$DIR/core/chains/evm/client/chain_client_test.go: `.Context(t)`
$DIR/core/chains/evm/client/chain_client_test.go: `.Run("returns Successful error type when there is no error message", func(t *testing.T) {
wsURL := testutils.NewWSServer(t, testutils.FixtureChainID, func(method string, params gjson.Result) (resp testutils.JSONRPCResponse) {
switch method {
case "eth_subscribe":
resp.Result = `"0x00"`
resp.Notify = headResult
return
case "eth_unsubscribe":
resp.Result = "true"
return
case "eth_sendRawTransaction":
resp.Result = `"` + tx.Hash().Hex() + `"`
}
return
}).WSURL().String()
ethClient := mustNewChainClient(t, wsURL)
err := ethClient.Dial(tests.Context(t))
require.NoError(t, err)
errType, err := ethClient.SendTransactionReturnCode(tests.Context(t), tx, fromAddress)
assert.NoError(t, err)
assert.Equal(t, errType, commonclient.Successful)
})`
$DIR/core/chains/evm/client/chain_client_test.go: `.NewWSServer(t, testutils.FixtureChainID, func(method string, params gjson.Result) (resp testutils.JSONRPCResponse) {
switch method {
case "eth_subscribe":
resp.Result = `"0x00"`
resp.Notify = headResult
return
case "eth_unsubscribe":
resp.Result = "true"
return
case "eth_sendRawTransaction":
resp.Result = `"` + tx.Hash().Hex() + `"`
}
return
})`
$DIR/core/chains/evm/client/chain_client_test.go: `.Hash()`
$DIR/core/chains/evm/client/chain_client_test.go: `.Hex()`
$DIR/core/chains/evm/client/chain_client_test.go: `.WSURL()`
$DIR/core/chains/evm/client/chain_client_test.go: `.String()`
$DIR/core/chains/evm/client/chain_client_test.go: `.Dial(tests.Context(t))`
$DIR/core/chains/evm/client/chain_client_test.go: `.Context(t)`
$DIR/core/chains/evm/client/chain_client_test.go: `.SendTransactionReturnCode(tests.Context(t), tx, fromAddress)`
$DIR/core/chains/evm/client/chain_client_test.go: `.Context(t)`
$DIR/core/chains/evm/client/chain_client_test.go: `.Run("returns Underpriced error type when transaction is terminally underpriced", func(t *testing.T) {
wsURL := testutils.NewWSServer(t, testutils.FixtureChainID, func(method string, params gjson.Result) (resp testutils.JSONRPCResponse) {
switch method {
case "eth_subscribe":
resp.Result = `"0x00"`
resp.Notify = headResult
return
case "eth_unsubscribe":
resp.Result = "true"
return
case "eth_sendRawTransaction":
resp.Result = `"` + tx.Hash().Hex() + `"`
resp.Error.Message = "transaction underpriced"
}
return
}).WSURL().String()
ethClient := mustNewChainClient(t, wsURL)
err := ethClient.Dial(tests.Context(t))
require.NoError(t, err)
errType, err := ethClient.SendTransactionReturnCode(tests.Context(t), tx, fromAddress)
assert.Error(t, err)
assert.Equal(t, errType, commonclient.Underpriced)
})`
$DIR/core/chains/evm/client/chain_client_test.go: `.NewWSServer(t, testutils.FixtureChainID, func(method string, params gjson.Result) (resp testutils.JSONRPCResponse) {
switch method {
case "eth_subscribe":
resp.Result = `"0x00"`
resp.Notify = headResult
return
case "eth_unsubscribe":
resp.Result = "true"
return
case "eth_sendRawTransaction":
resp.Result = `"` + tx.Hash().Hex() + `"`
resp.Error.Message = "transaction underpriced"
}
return
})`
$DIR/core/chains/evm/client/chain_client_test.go: `.Hash()`
$DIR/core/chains/evm/client/chain_client_test.go: `.Hex()`
$DIR/core/chains/evm/client/chain_client_test.go: `.WSURL()`
$DIR/core/chains/evm/client/chain_client_test.go: `.String()`
$DIR/core/chains/evm/client/chain_client_test.go: `.Dial(tests.Context(t))`
$DIR/core/chains/evm/client/chain_client_test.go: `.Context(t)`
$DIR/core/chains/evm/client/chain_client_test.go: `.SendTransactionReturnCode(tests.Context(t), tx, fromAddress)`
$DIR/core/chains/evm/client/chain_client_test.go: `.Context(t)`
$DIR/core/chains/evm/client/chain_client_test.go: `.Run("returns Unsupported error type when error message is queue full", func(t *testing.T) {
wsURL := testutils.NewWSServer(t, testutils.FixtureChainID, func(method string, params gjson.Result) (resp testutils.JSONRPCResponse) {
switch method {
case "eth_subscribe":
resp.Result = `"0x00"`
resp.Notify = headResult
return
case "eth_unsubscribe":
resp.Result = "true"
return
case "eth_sendRawTransaction":
resp.Result = `"` + tx.Hash().Hex() + `"`
resp.Error.Message = "queue full"
}
return
}).WSURL().String()
ethClient := mustNewChainClient(t, wsURL)
err := ethClient.Dial(tests.Context(t))
require.NoError(t, err)
errType, err := ethClient.SendTransactionReturnCode(tests.Context(t), tx, fromAddress)
assert.Error(t, err)
assert.Equal(t, errType, commonclient.Unsupported)
})`
$DIR/core/chains/evm/client/chain_client_test.go: `.NewWSServer(t, testutils.FixtureChainID, func(method string, params gjson.Result) (resp testutils.JSONRPCResponse) {
switch method {
case "eth_subscribe":
resp.Result = `"0x00"`
resp.Notify = headResult
return
case "eth_unsubscribe":
resp.Result = "true"
return
case "eth_sendRawTransaction":
resp.Result = `"` + tx.Hash().Hex() + `"`
resp.Error.Message = "queue full"
}
return
})`
$DIR/core/chains/evm/client/chain_client_test.go: `.Hash()`
$DIR/core/chains/evm/client/chain_client_test.go: `.Hex()`
$DIR/core/chains/evm/client/chain_client_test.go: `.WSURL()`
$DIR/core/chains/evm/client/chain_client_test.go: `.String()`
$DIR/core/chains/evm/client/chain_client_test.go: `.Dial(tests.Context(t))`
$DIR/core/chains/evm/client/chain_client_test.go: `.Context(t)`
$DIR/core/chains/evm/client/chain_client_test.go: `.SendTransactionReturnCode(tests.Context(t), tx, fromAddress)`
$DIR/core/chains/evm/client/chain_client_test.go: `.Context(t)`
$DIR/core/chains/evm/client/chain_client_test.go: `.Run("returns Retryable error type when there is a transaction gap", func(t *testing.T) {
wsURL := testutils.NewWSServer(t, testutils.FixtureChainID, func(method string, params gjson.Result) (resp testutils.JSONRPCResponse) {
switch method {
case "eth_subscribe":
resp.Result = `"0x00"`
resp.Notify = headResult
return
case "eth_unsubscribe":
resp.Result = "true"
return
case "eth_sendRawTransaction":
resp.Result = `"` + tx.Hash().Hex() + `"`
resp.Error.Message = "NonceGap"
}
return
}).WSURL().String()
ethClient := mustNewChainClient(t, wsURL)
err := ethClient.Dial(tests.Context(t))
require.NoError(t, err)
errType, err := ethClient.SendTransactionReturnCode(tests.Context(t), tx, fromAddress)
assert.Error(t, err)
assert.Equal(t, errType, commonclient.Retryable)
})`
$DIR/core/chains/evm/client/chain_client_test.go: `.NewWSServer(t, testutils.FixtureChainID, func(method string, params gjson.Result) (resp testutils.JSONRPCResponse) {
switch method {
case "eth_subscribe":
resp.Result = `"0x00"`
resp.Notify = headResult
return
case "eth_unsubscribe":
resp.Result = "true"
return
case "eth_sendRawTransaction":
resp.Result = `"` + tx.Hash().Hex() + `"`
resp.Error.Message = "NonceGap"
}
return
})`
$DIR/core/chains/evm/client/chain_client_test.go: `.Hash()`
$DIR/core/chains/evm/client/chain_client_test.go: `.Hex()`
$DIR/core/chains/evm/client/chain_client_test.go: `.WSURL()`
$DIR/core/chains/evm/client/chain_client_test.go: `.String()`
$DIR/core/chains/evm/client/chain_client_test.go: `.Dial(tests.Context(t))`
$DIR/core/chains/evm/client/chain_client_test.go: `.Context(t)`
$DIR/core/chains/evm/client/chain_client_test.go: `.SendTransactionReturnCode(tests.Context(t), tx, fromAddress)`
$DIR/core/chains/evm/client/chain_client_test.go: `.Context(t)`
$DIR/core/chains/evm/client/chain_client_test.go: `.Run("returns InsufficientFunds error type when the sender address doesn't have enough funds", func(t *testing.T) {
wsURL := testutils.NewWSServer(t, testutils.FixtureChainID, func(method string, params gjson.Result) (resp testutils.JSONRPCResponse) {
switch method {
case "eth_subscribe":
resp.Result = `"0x00"`
resp.Notify = headResult
return
case "eth_unsubscribe":
resp.Result = "true"
return
case "eth_sendRawTransaction":
resp.Result = `"` + tx.Hash().Hex() + `"`
resp.Error.Message = "insufficient funds for transfer"
}
return
}).WSURL().String()
ethClient := mustNewChainClient(t, wsURL)
err := ethClient.Dial(tests.Context(t))
require.NoError(t, err)
errType, err := ethClient.SendTransactionReturnCode(tests.Context(t), tx, fromAddress)
assert.Error(t, err)
assert.Equal(t, errType, commonclient.InsufficientFunds)
})`
$DIR/core/chains/evm/client/chain_client_test.go: `.NewWSServer(t, testutils.FixtureChainID, func(method string, params gjson.Result) (resp testutils.JSONRPCResponse) {
switch method {
case "eth_subscribe":
resp.Result = `"0x00"`
resp.Notify = headResult
return
case "eth_unsubscribe":
resp.Result = "true"
return
case "eth_sendRawTransaction":
resp.Result = `"` + tx.Hash().Hex() + `"`
resp.Error.Message = "insufficient funds for transfer"
}
return
})`
$DIR/core/chains/evm/client/chain_client_test.go: `.Hash()`
$DIR/core/chains/evm/client/chain_client_test.go: `.Hex()`
$DIR/core/chains/evm/client/chain_client_test.go: `.WSURL()`
$DIR/core/chains/evm/client/chain_client_test.go: `.String()`
$DIR/core/chains/evm/client/chain_client_test.go: `.Dial(tests.Context(t))`
$DIR/core/chains/evm/client/chain_client_test.go: `.Context(t)`
$DIR/core/chains/evm/client/chain_client_test.go: `.SendTransactionReturnCode(tests.Context(t), tx, fromAddress)`
$DIR/core/chains/evm/client/chain_client_test.go: `.Context(t)`
$DIR/core/chains/evm/client/chain_client_test.go: `.Run("returns ExceedsFeeCap error type when gas price is too high for the node", func(t *testing.T) {
wsURL := testutils.NewWSServer(t, testutils.FixtureChainID, func(method string, params gjson.Result) (resp testutils.JSONRPCResponse) {
switch method {
case "eth_subscribe":
resp.Result = `"0x00"`
resp.Notify = headResult
return
case "eth_unsubscribe":
resp.Result = "true"
return
case "eth_sendRawTransaction":
resp.Result = `"` + tx.Hash().Hex() + `"`
resp.Error.Message = "Transaction fee cap exceeded"
}
return
}).WSURL().String()
ethClient := mustNewChainClient(t, wsURL)
err := ethClient.Dial(tests.Context(t))
require.NoError(t, err)
errType, err := ethClient.SendTransactionReturnCode(tests.Context(t), tx, fromAddress)
assert.Error(t, err)
assert.Equal(t, errType, commonclient.ExceedsMaxFee)
})`
$DIR/core/chains/evm/client/chain_client_test.go: `.NewWSServer(t, testutils.FixtureChainID, func(method string, params gjson.Result) (resp testutils.JSONRPCResponse) {
switch method {
case "eth_subscribe":
resp.Result = `"0x00"`
resp.Notify = headResult
return
case "eth_unsubscribe":
resp.Result = "true"
return
case "eth_sendRawTransaction":
resp.Result = `"` + tx.Hash().Hex() + `"`
resp.Error.Message = "Transaction fee cap exceeded"
}
return
})`
$DIR/core/chains/evm/client/chain_client_test.go: `.Hash()`
$DIR/core/chains/evm/client/chain_client_test.go: `.Hex()`
$DIR/core/chains/evm/client/chain_client_test.go: `.WSURL()`
$DIR/core/chains/evm/client/chain_client_test.go: `.String()`
$DIR/core/chains/evm/client/chain_client_test.go: `.Dial(tests.Context(t))`
$DIR/core/chains/evm/client/chain_client_test.go: `.Context(t)`
$DIR/core/chains/evm/client/chain_client_test.go: `.SendTransactionReturnCode(tests.Context(t), tx, fromAddress)`
$DIR/core/chains/evm/client/chain_client_test.go: `.Context(t)`
$DIR/core/chains/evm/client/chain_client_test.go: `.NewWSServer(t, testutils.FixtureChainID, func(method string, params gjson.Result) (resp testutils.JSONRPCResponse) {
switch method {
case "eth_subscribe":
resp.Result = `"0x00"`
resp.Notify = headResult
return
case "eth_unsubscribe":
resp.Result = "true"
return
case "eth_sendRawTransaction":
resp.Result = `"` + tx.Hash().Hex() + `"`
resp.Error.Message = "some random error"
}
return
})`
$DIR/core/chains/evm/client/chain_client_test.go: `.Hash()`
$DIR/core/chains/evm/client/chain_client_test.go: `.Hex()`
$DIR/core/chains/evm/client/chain_client_test.go: `.WSURL()`
$DIR/core/chains/evm/client/chain_client_test.go: `.String()`
$DIR/core/chains/evm/client/chain_client_test.go: `.Dial(tests.Context(t))`
$DIR/core/chains/evm/client/chain_client_test.go: `.Context(t)`
$DIR/core/chains/evm/client/chain_client_test.go: `.SendTransactionReturnCode(tests.Context(t), tx, fromAddress)`
$DIR/core/chains/evm/client/chain_client_test.go: `.Context(t)`
$DIR/core/chains/evm/client/chain_client_test.go: `.WithTimeout(tests.Context(t), tests.WaitTimeout(t))`
$DIR/core/chains/evm/client/chain_client_test.go: `.Context(t)`
$DIR/core/chains/evm/client/chain_client_test.go: `.WaitTimeout(t)`
$DIR/core/chains/evm/client/chain_client_test.go: `.NewInt(123456)`
$DIR/core/chains/evm/client/chain_client_test.go: `.NewWSServer(t, chainId, func(method string, params gjson.Result) (resp testutils.JSONRPCResponse) {
if method == "eth_unsubscribe" {
resp.Result = "true"
return
}
assert.Equal(t, "eth_subscribe", method)
if assert.True(t, params.IsArray()) && assert.Equal(t, "newHeads", params.Array()[0].String()) {
resp.Result = `"0x00"`
resp.Notify = headResult
}
return
})`
$DIR/core/chains/evm/client/chain_client_test.go: `.WSURL()`
$DIR/core/chains/evm/client/chain_client_test.go: `.String()`
$DIR/core/chains/evm/client/chain_client_test.go: `.Dial(tests.Context(t))`
$DIR/core/chains/evm/client/chain_client_test.go: `.Context(t)`
$DIR/core/chains/evm/client/chain_client_test.go: `.SubscribeNewHead(ctx, headCh)`
$DIR/core/chains/evm/client/chain_client_test.go: `.Err()`
$DIR/core/chains/evm/client/chain_client_test.go: `.Done()`
$DIR/core/chains/evm/client/chain_client_test.go: `.Context(t)`
$DIR/core/chains/evm/client/chain_client_test.go: `.New("something went wrong")`
$DIR/core/chains/evm/client/chain_client_test.go: `.EncodeBig(big.NewInt(42))`
$DIR/core/chains/evm/client/chain_client_test.go: `.NewInt(42)`
$DIR/core/chains/evm/client/chain_client_test.go: `.On("BatchCallContext", mock.Anything, b)`
$DIR/core/chains/evm/client/chain_client_test.go: `.Run(func(args mock.Arguments) {
reqs := args.Get(1).([]rpc.BatchElem)
for i := 0; i < len(reqs); i++ {
elem := &reqs[i]
elem.Error = rpcError
}
})`
$DIR/core/chains/evm/client/chain_client_test.go: `.Get(1)`
$DIR/core/chains/evm/client/chain_client_test.go: `.Return(nil)`
$DIR/core/chains/evm/client/chain_client_test.go: `.Once()`
$DIR/core/chains/evm/client/chain_client_test.go: `.NewChainClientWithMockedRpc(t, commonclient.NodeSelectionModeRoundRobin, time.Second*0, time.Second*0, testutils.FixtureChainID, mockRpc)`
$DIR/core/chains/evm/client/chain_client_test.go: `.Dial(ctx)`
$DIR/core/chains/evm/client/chain_client_test.go: `.BatchCallContext(ctx, b)`
$DIR/core/chains/evm/client/chain_client_test.go: `.Context(t)`
$DIR/core/chains/evm/client/chain_client_test.go: `.NewChainClientWithEmptyNode(t, commonclient.NodeSelectionModeRoundRobin, time.Second*0, time.Second*0, testutils.FixtureChainID)`
$DIR/core/chains/evm/client/chain_client_test.go: `.BalanceAt(ctx, common.Address{}, nil)`
$DIR/core/chains/evm/client/chain_client_test.go: `.BatchCallContext(ctx, nil)`
$DIR/core/chains/evm/client/chain_client_test.go: `.BatchCallContextAll(ctx, nil)`
$DIR/core/chains/evm/client/chain_client_test.go: `.BlockByHash(ctx, common.Hash{})`
$DIR/core/chains/evm/client/chain_client_test.go: `.BlockByNumber(ctx, nil)`
$DIR/core/chains/evm/client/chain_client_test.go: `.CallContext(ctx, nil, "")`
$DIR/core/chains/evm/client/chain_client_test.go: `.CallContract(ctx, ethereum.CallMsg{}, nil)`
$DIR/core/chains/evm/client/chain_client_test.go: `.ChainID()`
$DIR/core/chains/evm/client/chain_client_test.go: `.CodeAt(ctx, common.Address{}, nil)`
$DIR/core/chains/evm/client/chain_client_test.go: `.ConfiguredChainID()`
$DIR/core/chains/evm/client/chain_client_test.go: `.Dial(ctx)`
$DIR/core/chains/evm/client/chain_client_test.go: `.EstimateGas(ctx, ethereum.CallMsg{})`
$DIR/core/chains/evm/client/chain_client_test.go: `.FilterLogs(ctx, ethereum.FilterQuery{})`
$DIR/core/chains/evm/client/chain_client_test.go: `.HeaderByHash(ctx, common.Hash{})`
$DIR/core/chains/evm/client/chain_client_test.go: `.HeaderByNumber(ctx, nil)`
$DIR/core/chains/evm/client/chain_client_test.go: `.HeadByHash(ctx, common.Hash{})`
$DIR/core/chains/evm/client/chain_client_test.go: `.HeadByNumber(ctx, nil)`
$DIR/core/chains/evm/client/chain_client_test.go: `.LINKBalance(ctx, common.Address{}, common.Address{})`
$DIR/core/chains/evm/client/chain_client_test.go: `.LatestBlockHeight(ctx)`
$DIR/core/chains/evm/client/chain_client_test.go: `.PendingCodeAt(ctx, common.Address{})`
$DIR/core/chains/evm/client/chain_client_test.go: `.PendingNonceAt(ctx, common.Address{})`
$DIR/core/chains/evm/client/chain_client_test.go: `.SendTransaction(ctx, nil)`
$DIR/core/chains/evm/client/chain_client_test.go: `.SendTransactionReturnCode(ctx, nil, common.Address{})`
$DIR/core/chains/evm/client/chain_client_test.go: `.SequenceAt(ctx, common.Address{}, nil)`
$DIR/core/chains/evm/client/chain_client_test.go: `.SubscribeFilterLogs(ctx, ethereum.FilterQuery{}, nil)`
$DIR/core/chains/evm/client/chain_client_test.go: `.SubscribeNewHead(ctx, nil)`
$DIR/core/chains/evm/client/chain_client_test.go: `.SuggestGasPrice(ctx)`
$DIR/core/chains/evm/client/chain_client_test.go: `.SuggestGasTipCap(ctx)`
$DIR/core/chains/evm/client/chain_client_test.go: `.TokenBalance(ctx, common.Address{}, common.Address{})`
$DIR/core/chains/evm/client/chain_client_test.go: `.TransactionByHash(ctx, common.Hash{})`
$DIR/core/chains/evm/client/chain_client_test.go: `.TransactionReceipt(ctx, common.Hash{})`
$DIR/core/chains/evm/client/chain_id_sub_test.go: `t.Run("unsubscribe forwarder", func(t *testing.T) {
t.Parallel()
ch := make(chan *evmtypes.Head)
forwarder := newChainIDSubForwarder(chainID, ch)
sub := NewMockSubscription()
err := forwarder.start(sub, nil)
assert.NoError(t, err)
forwarder.Unsubscribe()
assert.True(t, sub.unsubscribed)
_, ok := <-sub.Err()
assert.False(t, ok)
_, ok = <-forwarder.Err()
assert.False(t, ok)
})`
$DIR/core/chains/evm/client/chain_id_sub_test.go: `forwarder.Unsubscribe()`
$DIR/core/chains/evm/client/chain_id_sub_test.go: `_, ok = <-forwarder.Err()`
$DIR/core/chains/evm/client/chain_id_sub_test.go: `t.Run("unsubscribe forwarder with error", func(t *testing.T) {
t.Parallel()
ch := make(chan *evmtypes.Head)
forwarder := newChainIDSubForwarder(chainID, ch)
sub := NewMockSubscription()
err := forwarder.start(sub, nil)
assert.NoError(t, err)
sub.Errors <- errors.New("boo")
forwarder.Unsubscribe()
assert.True(t, sub.unsubscribed)
_, ok := <-sub.Err()
assert.False(t, ok)
_, ok = <-forwarder.Err()
assert.False(t, ok)
})`
$DIR/core/chains/evm/client/chain_id_sub_test.go: `sub.Errors <- errors.New("boo")`
$DIR/core/chains/evm/client/chain_id_sub_test.go: `forwarder.Unsubscribe()`
$DIR/core/chains/evm/client/chain_id_sub_test.go: `_, ok = <-forwarder.Err()`
$DIR/core/chains/evm/client/chain_id_sub_test.go: `t.Run("unsubscribe forwarder with message", func(t *testing.T) {
t.Parallel()
ch := make(chan *evmtypes.Head)
forwarder := newChainIDSubForwarder(chainID, ch)
sub := NewMockSubscription()
err := forwarder.start(sub, nil)
assert.NoError(t, err)
forwarder.srcCh <- &evmtypes.Head{}
forwarder.Unsubscribe()
assert.True(t, sub.unsubscribed)
_, ok := <-sub.Err()
assert.False(t, ok)
_, ok = <-forwarder.Err()
assert.False(t, ok)
})`
$DIR/core/chains/evm/client/chain_id_sub_test.go: `forwarder.srcCh <- &evmtypes.Head{}`
$DIR/core/chains/evm/client/chain_id_sub_test.go: `forwarder.Unsubscribe()`
$DIR/core/chains/evm/client/chain_id_sub_test.go: `_, ok = <-forwarder.Err()`
$DIR/core/chains/evm/client/chain_id_sub_test.go: `t.Run("non nil error parameter", func(t *testing.T) {
t.Parallel()
ch := make(chan *evmtypes.Head)
forwarder := newChainIDSubForwarder(chainID, ch)
sub := NewMockSubscription()
errIn := errors.New("foo")
errOut := forwarder.start(sub, errIn)
assert.Equal(t, errIn, errOut)
})`
$DIR/core/chains/evm/client/chain_id_sub_test.go: `forwarder.srcCh <- head`
$DIR/core/chains/evm/client/chain_id_sub_test.go: `sub.Errors <- expectedErr`
$DIR/core/chains/evm/client/chain_id_sub_test.go: `.NewInt(123)`
$DIR/core/chains/evm/client/chain_id_sub_test.go: `.Run("unsubscribe forwarder", func(t *testing.T) {
t.Parallel()
ch := make(chan *evmtypes.Head)
forwarder := newChainIDSubForwarder(chainID, ch)
sub := NewMockSubscription()
err := forwarder.start(sub, nil)
assert.NoError(t, err)
forwarder.Unsubscribe()
assert.True(t, sub.unsubscribed)
_, ok := <-sub.Err()
assert.False(t, ok)
_, ok = <-forwarder.Err()
assert.False(t, ok)
})`
$DIR/core/chains/evm/client/chain_id_sub_test.go: `.start(sub, nil)`
$DIR/core/chains/evm/client/chain_id_sub_test.go: `.Unsubscribe()`
$DIR/core/chains/evm/client/chain_id_sub_test.go: `.Err()`
$DIR/core/chains/evm/client/chain_id_sub_test.go: `.Err()`
$DIR/core/chains/evm/client/chain_id_sub_test.go: `.Run("unsubscribe forwarder with error", func(t *testing.T) {
t.Parallel()
ch := make(chan *evmtypes.Head)
forwarder := newChainIDSubForwarder(chainID, ch)
sub := NewMockSubscription()
err := forwarder.start(sub, nil)
assert.NoError(t, err)
sub.Errors <- errors.New("boo")
forwarder.Unsubscribe()
assert.True(t, sub.unsubscribed)
_, ok := <-sub.Err()
assert.False(t, ok)
_, ok = <-forwarder.Err()
assert.False(t, ok)
})`
$DIR/core/chains/evm/client/chain_id_sub_test.go: `.start(sub, nil)`
$DIR/core/chains/evm/client/chain_id_sub_test.go: `.New("boo")`
$DIR/core/chains/evm/client/chain_id_sub_test.go: `.Unsubscribe()`
$DIR/core/chains/evm/client/chain_id_sub_test.go: `.Err()`
$DIR/core/chains/evm/client/chain_id_sub_test.go: `.Err()`
$DIR/core/chains/evm/client/chain_id_sub_test.go: `.Run("unsubscribe forwarder with message", func(t *testing.T) {
t.Parallel()
ch := make(chan *evmtypes.Head)
forwarder := newChainIDSubForwarder(chainID, ch)
sub := NewMockSubscription()
err := forwarder.start(sub, nil)
assert.NoError(t, err)
forwarder.srcCh <- &evmtypes.Head{}
forwarder.Unsubscribe()
assert.True(t, sub.unsubscribed)
_, ok := <-sub.Err()
assert.False(t, ok)
_, ok = <-forwarder.Err()
assert.False(t, ok)
})`
$DIR/core/chains/evm/client/chain_id_sub_test.go: `.start(sub, nil)`
$DIR/core/chains/evm/client/chain_id_sub_test.go: `.Unsubscribe()`
$DIR/core/chains/evm/client/chain_id_sub_test.go: `.Err()`
$DIR/core/chains/evm/client/chain_id_sub_test.go: `.Err()`
$DIR/core/chains/evm/client/chain_id_sub_test.go: `.Run("non nil error parameter", func(t *testing.T) {
t.Parallel()
ch := make(chan *evmtypes.Head)
forwarder := newChainIDSubForwarder(chainID, ch)
sub := NewMockSubscription()
errIn := errors.New("foo")
errOut := forwarder.start(sub, errIn)
assert.Equal(t, errIn, errOut)
})`
$DIR/core/chains/evm/client/chain_id_sub_test.go: `.New("foo")`
$DIR/core/chains/evm/client/chain_id_sub_test.go: `.start(sub, errIn)`
$DIR/core/chains/evm/client/chain_id_sub_test.go: `.start(sub, nil)`
$DIR/core/chains/evm/client/chain_id_sub_test.go: `.New("error")`
$DIR/core/chains/evm/client/chain_id_sub_test.go: `.Err()`
$DIR/core/chains/evm/client/config_builder_test.go: `t.Run("parsing unique node configs succeeds", func(t *testing.T) {
nodeConfigs := []client.NodeConfig{
{
Name: ptr("foo1"),
WSURL: ptr("ws://foo1.test"),
HTTPURL: ptr("http://foo1.test"),
},
{
Name: ptr("foo2"),
WSURL: ptr("ws://foo2.test"),
HTTPURL: ptr("http://foo2.test"),
},
}
tomlNodes, err := client.ParseTestNodeConfigs(nodeConfigs)
require.NoError(t, err)
require.Len(t, tomlNodes, len(nodeConfigs))
})`
$DIR/core/chains/evm/client/config_builder_test.go: `t.Run("parsing missing ws url fails", func(t *testing.T) {
nodeConfigs := []client.NodeConfig{
{
Name: ptr("foo1"),
HTTPURL: ptr("http://foo1.test"),
},
}
_, err := client.ParseTestNodeConfigs(nodeConfigs)
require.Error(t, err)
})`
$DIR/core/chains/evm/client/config_builder_test.go: `t.Run("parsing missing http url fails", func(t *testing.T) {
nodeConfigs := []client.NodeConfig{
{
Name: ptr("foo1"),
WSURL: ptr("ws://foo1.test"),
},
}
_, err := client.ParseTestNodeConfigs(nodeConfigs)
require.Error(t, err)
})`
$DIR/core/chains/evm/client/config_builder_test.go: `t.Run("parsing invalid ws url fails", func(t *testing.T) {
nodeConfigs := []client.NodeConfig{
{
Name: ptr("foo1"),
WSURL: ptr("http://foo1.test"),
HTTPURL: ptr("http://foo1.test"),
},
}
_, err := client.ParseTestNodeConfigs(nodeConfigs)
require.Error(t, err)
})`
$DIR/core/chains/evm/client/config_builder_test.go: `t.Run("parsing duplicate http url fails", func(t *testing.T) {
nodeConfigs := []client.NodeConfig{
{
Name: ptr("foo1"),
WSURL: ptr("ws://foo1.test"),
HTTPURL: ptr("ws://foo1.test"),
},
}
_, err := client.ParseTestNodeConfigs(nodeConfigs)
require.Error(t, err)
})`
$DIR/core/chains/evm/client/config_builder_test.go: `t.Run("parsing duplicate node names fails", func(t *testing.T) {
nodeConfigs := []client.NodeConfig{
{
Name: ptr("foo1"),
WSURL: ptr("ws://foo1.test"),
HTTPURL: ptr("http://foo1.test"),
},
{
Name: ptr("foo1"),
WSURL: ptr("ws://foo2.test"),
HTTPURL: ptr("http://foo2.test"),
},
}
_, err := client.ParseTestNodeConfigs(nodeConfigs)
require.Error(t, err)
})`
$DIR/core/chains/evm/client/config_builder_test.go: `t.Run("parsing duplicate node ws urls fails", func(t *testing.T) {
nodeConfigs := []client.NodeConfig{
{
Name: ptr("foo1"),
WSURL: ptr("ws://foo1.test"),
HTTPURL: ptr("http://foo1.test"),
},
{
Name: ptr("foo2"),
WSURL: ptr("ws://foo2.test"),
HTTPURL: ptr("http://foo1.test"),
},
}
_, err := client.ParseTestNodeConfigs(nodeConfigs)
require.Error(t, err)
})`
$DIR/core/chains/evm/client/config_builder_test.go: `t.Run("parsing duplicate node http urls fails", func(t *testing.T) {
nodeConfigs := []client.NodeConfig{
{
Name: ptr("foo1"),
WSURL: ptr("ws://foo1.test"),
HTTPURL: ptr("http://foo1.test"),
},
{
Name: ptr("foo2"),
WSURL: ptr("ws://foo1.test"),
HTTPURL: ptr("http://foo2.test"),
},
}
_, err := client.ParseTestNodeConfigs(nodeConfigs)
require.Error(t, err)
})`
$DIR/core/chains/evm/client/config_builder_test.go: `.NewClientConfigs(selectionMode, leaseDuration, chainTypeStr, nodeConfigs,
pollFailureThreshold, pollInterval, syncThreshold, nodeIsSyncingEnabled, noNewHeadsThreshold, finalityDepth, finalityTagEnabled)`
$DIR/core/chains/evm/client/config_builder_test.go: `.NewEvmClient(nodePool, chainCfg, nil, logger.Test(t), big.NewInt(10), nodes, chaintype.ChainType(chainTypeStr))`
$DIR/core/chains/evm/client/config_builder_test.go: `.Test(t)`
$DIR/core/chains/evm/client/config_builder_test.go: `.NewInt(10)`
$DIR/core/chains/evm/client/config_builder_test.go: `.ChainType(chainTypeStr)`
$DIR/core/chains/evm/client/config_builder_test.go: `.Run("parsing unique node configs succeeds", func(t *testing.T) {
nodeConfigs := []client.NodeConfig{
{
Name: ptr("foo1"),
WSURL: ptr("ws://foo1.test"),
HTTPURL: ptr("http://foo1.test"),
},
{
Name: ptr("foo2"),
WSURL: ptr("ws://foo2.test"),
HTTPURL: ptr("http://foo2.test"),
},
}
tomlNodes, err := client.ParseTestNodeConfigs(nodeConfigs)
require.NoError(t, err)
require.Len(t, tomlNodes, len(nodeConfigs))
})`
$DIR/core/chains/evm/client/config_builder_test.go: `.ParseTestNodeConfigs(nodeConfigs)`
$DIR/core/chains/evm/client/config_builder_test.go: `.Run("parsing missing ws url fails", func(t *testing.T) {
nodeConfigs := []client.NodeConfig{
{
Name: ptr("foo1"),
HTTPURL: ptr("http://foo1.test"),
},
}
_, err := client.ParseTestNodeConfigs(nodeConfigs)
require.Error(t, err)
})`
$DIR/core/chains/evm/client/config_builder_test.go: `.ParseTestNodeConfigs(nodeConfigs)`
$DIR/core/chains/evm/client/config_builder_test.go: `.Run("parsing missing http url fails", func(t *testing.T) {
nodeConfigs := []client.NodeConfig{
{
Name: ptr("foo1"),
WSURL: ptr("ws://foo1.test"),
},
}
_, err := client.ParseTestNodeConfigs(nodeConfigs)
require.Error(t, err)
})`
$DIR/core/chains/evm/client/config_builder_test.go: `.ParseTestNodeConfigs(nodeConfigs)`
$DIR/core/chains/evm/client/config_builder_test.go: `.Run("parsing invalid ws url fails", func(t *testing.T) {
nodeConfigs := []client.NodeConfig{
{
Name: ptr("foo1"),
WSURL: ptr("http://foo1.test"),
HTTPURL: ptr("http://foo1.test"),
},
}
_, err := client.ParseTestNodeConfigs(nodeConfigs)
require.Error(t, err)
})`
$DIR/core/chains/evm/client/config_builder_test.go: `.ParseTestNodeConfigs(nodeConfigs)`
$DIR/core/chains/evm/client/config_builder_test.go: `.Run("parsing duplicate http url fails", func(t *testing.T) {
nodeConfigs := []client.NodeConfig{
{
Name: ptr("foo1"),
WSURL: ptr("ws://foo1.test"),
HTTPURL: ptr("ws://foo1.test"),
},
}
_, err := client.ParseTestNodeConfigs(nodeConfigs)
require.Error(t, err)
})`
$DIR/core/chains/evm/client/config_builder_test.go: `.ParseTestNodeConfigs(nodeConfigs)`
$DIR/core/chains/evm/client/config_builder_test.go: `.Run("parsing duplicate node names fails", func(t *testing.T) {
nodeConfigs := []client.NodeConfig{
{
Name: ptr("foo1"),
WSURL: ptr("ws://foo1.test"),
HTTPURL: ptr("http://foo1.test"),
},
{
Name: ptr("foo1"),
WSURL: ptr("ws://foo2.test"),
HTTPURL: ptr("http://foo2.test"),
},
}
_, err := client.ParseTestNodeConfigs(nodeConfigs)
require.Error(t, err)
})`
$DIR/core/chains/evm/client/config_builder_test.go: `.ParseTestNodeConfigs(nodeConfigs)`
$DIR/core/chains/evm/client/config_builder_test.go: `.Run("parsing duplicate node ws urls fails", func(t *testing.T) {
nodeConfigs := []client.NodeConfig{
{
Name: ptr("foo1"),
WSURL: ptr("ws://foo1.test"),
HTTPURL: ptr("http://foo1.test"),
},
{
Name: ptr("foo2"),
WSURL: ptr("ws://foo2.test"),
HTTPURL: ptr("http://foo1.test"),
},
}
_, err := client.ParseTestNodeConfigs(nodeConfigs)
require.Error(t, err)
})`
$DIR/core/chains/evm/client/config_builder_test.go: `.ParseTestNodeConfigs(nodeConfigs)`
$DIR/core/chains/evm/client/config_builder_test.go: `.Run("parsing duplicate node http urls fails", func(t *testing.T) {
nodeConfigs := []client.NodeConfig{
{
Name: ptr("foo1"),
WSURL: ptr("ws://foo1.test"),
HTTPURL: ptr("http://foo1.test"),
},
{
Name: ptr("foo2"),
WSURL: ptr("ws://foo1.test"),
HTTPURL: ptr("http://foo2.test"),
},
}
_, err := client.ParseTestNodeConfigs(nodeConfigs)
require.Error(t, err)
})`
$DIR/core/chains/evm/client/config_builder_test.go: `.ParseTestNodeConfigs(nodeConfigs)`
$DIR/core/chains/evm/client/config_builder_test.go: `.ParseTestNodeConfigs(nodeConfigs)`
$DIR/core/chains/evm/client/errors_test.go: `t.Run("IsNonceTooLowError", func(t *testing.T) {
tests := []errorCase{
{"nonce too low", true, "Geth"},
{"nonce too low: address 0x336394A3219e71D9d9bd18201d34E95C1Bb7122C, tx: 8089 state: 8090", true, "Arbitrum"},
{"Nonce too low", true, "Besu"},
{"nonce too low", true, "Erigon"},
{"nonce too low", true, "Klaytn"},
{"Transaction nonce is too low. Try incrementing the nonce.", true, "Parity"},
{"transaction rejected: nonce too low", true, "Arbitrum"},
{"invalid transaction nonce", true, "Arbitrum"},
{"call failed: nonce too low: address 0x0499BEA33347cb62D79A9C0b1EDA01d8d329894c current nonce (5833) > tx nonce (5511)", true, "Avalanche"},
{"call failed: OldNonce", true, "Nethermind"},
{"call failed: OldNonce, Current nonce: 22, nonce of rejected tx: 17", true, "Nethermind"},
{"nonce too low. allowed nonce range: 427 - 447, actual: 426", true, "zkSync"},
{"client error nonce too low", true, "tomlConfig"},
}
for _, test := range tests {
t.Run(test.network, func(t *testing.T) {
err = evmclient.NewSendErrorS(test.message)
assert.Equal(t, err.IsNonceTooLowError(clientErrors), test.expect)
err = newSendErrorWrapped(test.message)
assert.Equal(t, err.IsNonceTooLowError(clientErrors), test.expect)
})
}
})`
$DIR/core/chains/evm/client/errors_test.go: `t.Run(test.network, func(t *testing.T) {
err = evmclient.NewSendErrorS(test.message)
assert.Equal(t, err.IsNonceTooLowError(clientErrors), test.expect)
err = newSendErrorWrapped(test.message)
assert.Equal(t, err.IsNonceTooLowError(clientErrors), test.expect)
})`
$DIR/core/chains/evm/client/errors_test.go: `err = evmclient.NewSendErrorS(test.message)`
$DIR/core/chains/evm/client/errors_test.go: `err = newSendErrorWrapped(test.message)`
$DIR/core/chains/evm/client/errors_test.go: `t.Run("IsNonceTooHigh", func(t *testing.T) {
tests := []errorCase{
{"call failed: NonceGap", true, "Nethermind"},
{"call failed: NonceGap, Future nonce. Expected nonce: 10", true, "Nethermind"},
{"nonce too high: address 0x336394A3219e71D9d9bd18201d34E95C1Bb7122C, tx: 8089 state: 8090", true, "Arbitrum"},
{"nonce too high", true, "Geth"},
{"nonce too high", true, "Erigon"},
{"nonce too high. allowed nonce range: 427 - 477, actual: 527", true, "zkSync"},
{"client error nonce too high", true, "tomlConfig"},
}
for _, test := range tests {
err = evmclient.NewSendErrorS(test.message)
assert.Equal(t, err.IsNonceTooHighError(clientErrors), test.expect)
err = newSendErrorWrapped(test.message)
assert.Equal(t, err.IsNonceTooHighError(clientErrors), test.expect)
}
})`
$DIR/core/chains/evm/client/errors_test.go: `err = evmclient.NewSendErrorS(test.message)`
$DIR/core/chains/evm/client/errors_test.go: `err = newSendErrorWrapped(test.message)`
$DIR/core/chains/evm/client/errors_test.go: `t.Run("IsTransactionAlreadyMined", func(t *testing.T) {
assert.False(t, randomError.IsTransactionAlreadyMined(clientErrors))
tests := []errorCase{
{"transaction already finalized", true, "Harmony"},
{"client error transaction already mined", true, "tomlConfig"},
}
for _, test := range tests {
t.Run(test.network, func(t *testing.T) {
err = evmclient.NewSendErrorS(test.message)
assert.Equal(t, err.IsTransactionAlreadyMined(clientErrors), test.expect)
err = newSendErrorWrapped(test.message)
assert.Equal(t, err.IsTransactionAlreadyMined(clientErrors), test.expect)
})
}
})`
$DIR/core/chains/evm/client/errors_test.go: `t.Run(test.network, func(t *testing.T) {
err = evmclient.NewSendErrorS(test.message)
assert.Equal(t, err.IsTransactionAlreadyMined(clientErrors), test.expect)
err = newSendErrorWrapped(test.message)
assert.Equal(t, err.IsTransactionAlreadyMined(clientErrors), test.expect)
})`
$DIR/core/chains/evm/client/errors_test.go: `err = evmclient.NewSendErrorS(test.message)`
$DIR/core/chains/evm/client/errors_test.go: `err = newSendErrorWrapped(test.message)`
$DIR/core/chains/evm/client/errors_test.go: `t.Run("IsReplacementUnderpriced", func(t *testing.T) {
tests := []errorCase{
{"replacement transaction underpriced", true, "geth"},
{"Replacement transaction underpriced", true, "Besu"},
{"replacement transaction underpriced", true, "Erigon"},
{"replacement transaction underpriced", true, "Klaytn"},
{"there is another tx which has the same nonce in the tx pool", true, "Klaytn"},
{"Transaction gas price 100wei is too low. There is another transaction with same nonce in the queue with gas price 150wei. Try increasing the gas price or incrementing the nonce.", true, "Parity"},
{"There are too many transactions in the queue. Your transaction was dropped due to limit. Try increasing the fee.", false, "Parity"},
{"gas price too low", false, "Arbitrum"},
{"client error replacement underpriced", true, "tomlConfig"},
{"", false, "tomlConfig"},
}
for _, test := range tests {
err = evmclient.NewSendErrorS(test.message)
assert.Equal(t, err.IsReplacementUnderpriced(clientErrors), test.expect)
err = newSendErrorWrapped(test.message)
assert.Equal(t, err.IsReplacementUnderpriced(clientErrors), test.expect)
}
})`
$DIR/core/chains/evm/client/errors_test.go: `err = evmclient.NewSendErrorS(test.message)`
$DIR/core/chains/evm/client/errors_test.go: `err = newSendErrorWrapped(test.message)`
$DIR/core/chains/evm/client/errors_test.go: `t.Run("IsTransactionAlreadyInMempool", func(t *testing.T) {
assert.False(t, randomError.IsTransactionAlreadyInMempool(clientErrors))
tests := []errorCase{
// I have seen this in log output
{"known transaction: 0x7f657507aee0511e36d2d1972a6b22e917cc89f92b6c12c4dbd57eaabb236960", true, "Geth"},
// This comes from the geth source - https://github.com/ethereum/go-ethereum/blob/eb9d7d15ecf08cd5104e01a8af64489f01f700b0/core/tx_pool.go#L57
{"already known", true, "Geth"},
// This one is present in the light client (?!)
{"Known transaction (7f65)", true, "Geth"},
{"Known transaction", true, "Besu"},
{"already known", true, "Erigon"},
{"block already known", true, "Erigon"},
{"Transaction with the same hash was already imported.", true, "Parity"},
{"call failed: AlreadyKnown", true, "Nethermind"},
{"call failed: OwnNonceAlreadyUsed", true, "Nethermind"},
{"known transaction", true, "Klaytn"},
{"known transaction. transaction with hash 0x6013…3053 is already in the system", true, "zkSync"},
// This seems to be an erroneous message from the zkSync client, we'll have to match it anyway
{"ErrorObject { code: ServerError(3), message: \\\"known transaction. transaction with hash 0xf016…ad63 is already in the system\\\", data: Some(RawValue(\\\"0x\\\")) }", true, "zkSync"},
{"client error transaction already in mempool", true, "tomlConfig"},
}
for _, test := range tests {
err = evmclient.NewSendErrorS(test.message)
assert.Equal(t, err.IsTransactionAlreadyInMempool(clientErrors), test.expect)
err = newSendErrorWrapped(test.message)
assert.Equal(t, err.IsTransactionAlreadyInMempool(clientErrors), test.expect)
}
})`
$DIR/core/chains/evm/client/errors_test.go: `err = evmclient.NewSendErrorS(test.message)`
$DIR/core/chains/evm/client/errors_test.go: `err = newSendErrorWrapped(test.message)`
$DIR/core/chains/evm/client/errors_test.go: `t.Run("IsTerminallyUnderpriced", func(t *testing.T) {
assert.False(t, randomError.IsTerminallyUnderpriced(clientErrors))
tests := []errorCase{
{"transaction underpriced", true, "geth"},
{"replacement transaction underpriced", false, "geth"},
{"Gas price below configured minimum gas price", true, "Besu"},
{"transaction underpriced", true, "Erigon"},
{"There are too many transactions in the queue. Your transaction was dropped due to limit. Try increasing the fee.", false, "Parity"},
{"Transaction gas price is too low. It does not satisfy your node's minimal gas price (minimal: 100 got: 50). Try increasing the gas price.", true, "Parity"},
{"gas price too low", true, "Arbitrum"},
{"FeeTooLow", true, "Nethermind"},
{"FeeTooLow, MaxFeePerGas too low. MaxFeePerGas: 50, BaseFee: 100, MaxPriorityFeePerGas:200, Block number: 5", true, "Nethermind"},
{"FeeTooLow, EffectivePriorityFeePerGas too low 10 < 20, BaseFee: 30", true, "Nethermind"},
{"FeeTooLow, FeePerGas needs to be higher than 100 to be added to the TxPool. Affordable FeePerGas of rejected tx: 50.", true, "Nethermind"},
{"FeeTooLowToCompete", true, "Nethermind"},
{"transaction underpriced", true, "Klaytn"},
{"intrinsic gas too low", true, "Klaytn"},
{"max fee per gas less than block base fee", true, "zkSync"},
{"virtual machine entered unexpected state. please contact developers and provide transaction details that caused this error. Error description: The operator included transaction with an unacceptable gas price", true, "zkSync"},
{"client error terminally underpriced", true, "tomlConfig"},
}
for _, test := range tests {
err = evmclient.NewSendErrorS(test.message)
assert.Equal(t, err.IsTerminallyUnderpriced(clientErrors), test.expect, "expected %q to match %s for client %s", err, "IsTerminallyUnderpriced", test.network)
err = newSendErrorWrapped(test.message)
assert.Equal(t, err.IsTerminallyUnderpriced(clientErrors), test.expect, "expected %q to match %s for client %s", err, "IsTerminallyUnderpriced", test.network)
}
})`
$DIR/core/chains/evm/client/errors_test.go: `err = evmclient.NewSendErrorS(test.message)`
$DIR/core/chains/evm/client/errors_test.go: `err = newSendErrorWrapped(test.message)`
$DIR/core/chains/evm/client/errors_test.go: `t.Run("IsTemporarilyUnderpriced", func(t *testing.T) {
tests := []errorCase{
{"There are too many transactions in the queue. Your transaction was dropped due to limit. Try increasing the fee.", true, "Parity"},
{"There are too many transactions in the queue. Your transaction was dropped due to limit. Try increasing the fee.", true, "Parity"},
{"Transaction gas price is too low. It does not satisfy your node's minimal gas price (minimal: 100 got: 50). Try increasing the gas price.", false, "Parity"},
{"client error transaction underpriced", false, "tomlConfig"},
}
for _, test := range tests {
err = evmclient.NewSendErrorS(test.message)
assert.Equal(t, err.IsTemporarilyUnderpriced(clientErrors), test.expect)
err = newSendErrorWrapped(test.message)
assert.Equal(t, err.IsTemporarilyUnderpriced(clientErrors), test.expect)
}
})`
$DIR/core/chains/evm/client/errors_test.go: `err = evmclient.NewSendErrorS(test.message)`
$DIR/core/chains/evm/client/errors_test.go: `err = newSendErrorWrapped(test.message)`
$DIR/core/chains/evm/client/errors_test.go: `t.Run("IsInsufficientEth", func(t *testing.T) {
tests := []errorCase{
{"insufficient funds for transfer", true, "Geth"},
{"insufficient funds for gas * price + value", true, "Geth"},
{"insufficient balance for transfer", true, "Geth"},
{"Upfront cost exceeds account balance", true, "Besu"},
{"insufficient funds for transfer", true, "Erigon"},
{"insufficient funds for gas * price + value", true, "Erigon"},
{"insufficient balance for transfer", true, "Erigon"},
{"Insufficient balance for transaction. Balance=100.25, Cost=200.50", true, "Parity"},
{"Insufficient funds. The account you tried to send transaction from does not have enough funds. Required 200.50 and got: 100.25.", true, "Parity"},
{"transaction rejected: insufficient funds for gas * price + value", true, "Arbitrum"},
{"not enough funds for gas", true, "Arbitrum"},
{"insufficient funds for gas * price + value: address 0xb68D832c1241bc50db1CF09e96c0F4201D5539C9 have 9934612900000000 want 9936662900000000", true, "Arbitrum"},
{"call failed: InsufficientFunds", true, "Nethermind"},
{"call failed: InsufficientFunds, Account balance: 4740799397601480913, cumulative cost: 22019342038993800000", true, "Nethermind"},
{"call failed: InsufficientFunds, Balance is 1092404690719251702 less than sending value + gas 7165512000464000000", true, "Nethermind"},
{"insufficient funds", true, "Klaytn"},
{"insufficient funds for gas * price + value + gatewayFee", true, "celo"},
{"insufficient balance for transfer", true, "zkSync"},
{"insufficient funds for gas + value. balance: 42719769622667482000, fee: 48098250000000, value: 42719769622667482000", true, "celo"},
{"client error insufficient eth", true, "tomlConfig"},
{"transaction would cause overdraft", true, "Geth"},
}
for _, test := range tests {
err = evmclient.NewSendErrorS(test.message)
assert.Equal(t, err.IsInsufficientEth(clientErrors), test.expect)
err = newSendErrorWrapped(test.message)
assert.Equal(t, err.IsInsufficientEth(clientErrors), test.expect)
}
})`
$DIR/core/chains/evm/client/errors_test.go: `err = evmclient.NewSendErrorS(test.message)`
$DIR/core/chains/evm/client/errors_test.go: `err = newSendErrorWrapped(test.message)`
$DIR/core/chains/evm/client/errors_test.go: `t.Run("IsServiceUnavailable", func(t *testing.T) {
tests := []errorCase{
{"call failed: 503 Service Unavailable: \r\n
503 Service Temporarily Unavailable\r\n\r\n503 Service Temporarily Unavailable
\r\n\r\n\r\n", true, "Nethermind"},
{"call failed: 502 Bad Gateway: \r\n502 Bad Gateway\r\n\r\n502 Bad Gateway
\r\n
", true, "Arbitrum"},
{"client error service unavailable", true, "tomlConfig"},
}
for _, test := range tests {
err = evmclient.NewSendErrorS(test.message)
assert.Equal(t, err.IsServiceUnavailable(clientErrors), test.expect)
err = newSendErrorWrapped(test.message)
assert.Equal(t, err.IsServiceUnavailable(clientErrors), test.expect)
}
})`
$DIR/core/chains/evm/client/errors_test.go: `err = evmclient.NewSendErrorS(test.message)`
$DIR/core/chains/evm/client/errors_test.go: `err = newSendErrorWrapped(test.message)`
$DIR/core/chains/evm/client/errors_test.go: `t.Run("IsTxFeeExceedsCap", func(t *testing.T) {
tests := []errorCase{
{"tx fee (1.10 ether) exceeds the configured cap (1.00 ether)", true, "geth"},
{"tx fee (1.10 FTM) exceeds the configured cap (1.00 FTM)", true, "geth"},
{"tx fee (1.10 foocoin) exceeds the configured cap (1.00 foocoin)", true, "geth"},
{"Transaction fee cap exceeded", true, "Besu"},
{"tx fee (1.10 ether) exceeds the configured cap (1.00 ether)", true, "Erigon"},
{"invalid gas fee cap", true, "Klaytn"},
{"max fee per gas higher than max priority fee per gas", true, "Klaytn"},
{"tx fee (1.10 of currency celo) exceeds the configured cap (1.00 celo)", true, "celo"},
{"max priority fee per gas higher than max fee per gas", true, "zkSync"},
{"client error tx fee exceeds cap", true, "tomlConfig"},
}
for _, test := range tests {
err = evmclient.NewSendErrorS(test.message)
assert.Equal(t, err.IsTxFeeExceedsCap(clientErrors), test.expect)
err = newSendErrorWrapped(test.message)
assert.Equal(t, err.IsTxFeeExceedsCap(clientErrors), test.expect)
}
assert.False(t, randomError.IsTxFeeExceedsCap(clientErrors))
// Nil
err = evmclient.NewSendError(nil)
assert.False(t, err.IsTxFeeExceedsCap(clientErrors))
})`
$DIR/core/chains/evm/client/errors_test.go: `err = evmclient.NewSendErrorS(test.message)`
$DIR/core/chains/evm/client/errors_test.go: `err = newSendErrorWrapped(test.message)`
$DIR/core/chains/evm/client/errors_test.go: `err = evmclient.NewSendError(nil)`
$DIR/core/chains/evm/client/errors_test.go: `t.Run("L2 Fees errors", func(t *testing.T) {
err = evmclient.NewSendErrorS("max fee per gas less than block base fee")
assert.False(t, err.IsL2FeeTooHigh(clientErrors))
assert.True(t, err.L2FeeTooLow(clientErrors))
err = newSendErrorWrapped("max fee per gas less than block base fee")
assert.False(t, err.IsL2FeeTooHigh(clientErrors))
assert.True(t, err.L2FeeTooLow(clientErrors))
err = evmclient.NewSendErrorS("queue full")
assert.True(t, err.IsL2Full(clientErrors))
err = evmclient.NewSendErrorS("sequencer pending tx pool full, please try again")
assert.True(t, err.IsL2Full(clientErrors))
assert.False(t, randomError.IsL2FeeTooHigh(clientErrors))
assert.False(t, randomError.L2FeeTooLow(clientErrors))
// Nil
err = evmclient.NewSendError(nil)
assert.False(t, err.IsL2FeeTooHigh(clientErrors))
assert.False(t, err.L2FeeTooLow(clientErrors))
})`
$DIR/core/chains/evm/client/errors_test.go: `err = evmclient.NewSendErrorS("max fee per gas less than block base fee")`
$DIR/core/chains/evm/client/errors_test.go: `err = newSendErrorWrapped("max fee per gas less than block base fee")`
$DIR/core/chains/evm/client/errors_test.go: `err = evmclient.NewSendErrorS("queue full")`
$DIR/core/chains/evm/client/errors_test.go: `err = evmclient.NewSendErrorS("sequencer pending tx pool full, please try again")`
$DIR/core/chains/evm/client/errors_test.go: `err = evmclient.NewSendError(nil)`
$DIR/core/chains/evm/client/errors_test.go: `t.Run("Metis gas price errors", func(t *testing.T) {
err := evmclient.NewSendErrorS("primary websocket (wss://ws-mainnet.metis.io) call failed: gas price too low: 18000000000 wei, use at least tx.gasPrice = 19500000000 wei")
assert.True(t, err.L2FeeTooLow(clientErrors))
err = newSendErrorWrapped("primary websocket (wss://ws-mainnet.metis.io) call failed: gas price too low: 18000000000 wei, use at least tx.gasPrice = 19500000000 wei")
assert.True(t, err.L2FeeTooLow(clientErrors))
assert.False(t, randomError.L2FeeTooLow(clientErrors))
// Nil
err = evmclient.NewSendError(nil)
assert.False(t, err.L2FeeTooLow(clientErrors))
})`
$DIR/core/chains/evm/client/errors_test.go: `err = newSendErrorWrapped("primary websocket (wss://ws-mainnet.metis.io) call failed: gas price too low: 18000000000 wei, use at least tx.gasPrice = 19500000000 wei")`
$DIR/core/chains/evm/client/errors_test.go: `err = evmclient.NewSendError(nil)`
$DIR/core/chains/evm/client/errors_test.go: `err = evmclient.NewSendErrorS("primary http (http://***REDACTED***:9933) call failed: submit transaction to pool failed: Pool(AlreadyImported)")`
$DIR/core/chains/evm/client/errors_test.go: `t.Run(test.message, func(t *testing.T) {
err := evmclient.NewSendError(pkgerrors.New(test.message))
assert.Equal(t, test.expect, err.Fatal(clientErrors))
})`
$DIR/core/chains/evm/client/errors_test.go: `.NewSendErrorS("some old bollocks")`
$DIR/core/chains/evm/client/errors_test.go: `.NewTestClientErrors()`
$DIR/core/chains/evm/client/errors_test.go: `.ClientErrorRegexes(&testErrors)`
$DIR/core/chains/evm/client/errors_test.go: `.Run("IsNonceTooLowError", func(t *testing.T) {
tests := []errorCase{
{"nonce too low", true, "Geth"},
{"nonce too low: address 0x336394A3219e71D9d9bd18201d34E95C1Bb7122C, tx: 8089 state: 8090", true, "Arbitrum"},
{"Nonce too low", true, "Besu"},
{"nonce too low", true, "Erigon"},
{"nonce too low", true, "Klaytn"},
{"Transaction nonce is too low. Try incrementing the nonce.", true, "Parity"},
{"transaction rejected: nonce too low", true, "Arbitrum"},
{"invalid transaction nonce", true, "Arbitrum"},
{"call failed: nonce too low: address 0x0499BEA33347cb62D79A9C0b1EDA01d8d329894c current nonce (5833) > tx nonce (5511)", true, "Avalanche"},
{"call failed: OldNonce", true, "Nethermind"},
{"call failed: OldNonce, Current nonce: 22, nonce of rejected tx: 17", true, "Nethermind"},
{"nonce too low. allowed nonce range: 427 - 447, actual: 426", true, "zkSync"},
{"client error nonce too low", true, "tomlConfig"},
}
for _, test := range tests {
t.Run(test.network, func(t *testing.T) {
err = evmclient.NewSendErrorS(test.message)
assert.Equal(t, err.IsNonceTooLowError(clientErrors), test.expect)
err = newSendErrorWrapped(test.message)
assert.Equal(t, err.IsNonceTooLowError(clientErrors), test.expect)
})
}
})`
$DIR/core/chains/evm/client/errors_test.go: `.Run(test.network, func(t *testing.T) {
err = evmclient.NewSendErrorS(test.message)
assert.Equal(t, err.IsNonceTooLowError(clientErrors), test.expect)
err = newSendErrorWrapped(test.message)
assert.Equal(t, err.IsNonceTooLowError(clientErrors), test.expect)
})`
$DIR/core/chains/evm/client/errors_test.go: `.NewSendErrorS(test.message)`
$DIR/core/chains/evm/client/errors_test.go: `.Run("IsNonceTooHigh", func(t *testing.T) {
tests := []errorCase{
{"call failed: NonceGap", true, "Nethermind"},
{"call failed: NonceGap, Future nonce. Expected nonce: 10", true, "Nethermind"},
{"nonce too high: address 0x336394A3219e71D9d9bd18201d34E95C1Bb7122C, tx: 8089 state: 8090", true, "Arbitrum"},
{"nonce too high", true, "Geth"},
{"nonce too high", true, "Erigon"},
{"nonce too high. allowed nonce range: 427 - 477, actual: 527", true, "zkSync"},
{"client error nonce too high", true, "tomlConfig"},
}
for _, test := range tests {
err = evmclient.NewSendErrorS(test.message)
assert.Equal(t, err.IsNonceTooHighError(clientErrors), test.expect)
err = newSendErrorWrapped(test.message)
assert.Equal(t, err.IsNonceTooHighError(clientErrors), test.expect)
}
})`
$DIR/core/chains/evm/client/errors_test.go: `.NewSendErrorS(test.message)`
$DIR/core/chains/evm/client/errors_test.go: `.Run("IsTransactionAlreadyMined", func(t *testing.T) {
assert.False(t, randomError.IsTransactionAlreadyMined(clientErrors))
tests := []errorCase{
{"transaction already finalized", true, "Harmony"},
{"client error transaction already mined", true, "tomlConfig"},
}
for _, test := range tests {
t.Run(test.network, func(t *testing.T) {
err = evmclient.NewSendErrorS(test.message)
assert.Equal(t, err.IsTransactionAlreadyMined(clientErrors), test.expect)
err = newSendErrorWrapped(test.message)
assert.Equal(t, err.IsTransactionAlreadyMined(clientErrors), test.expect)
})
}
})`
$DIR/core/chains/evm/client/errors_test.go: `.Run(test.network, func(t *testing.T) {
err = evmclient.NewSendErrorS(test.message)
assert.Equal(t, err.IsTransactionAlreadyMined(clientErrors), test.expect)
err = newSendErrorWrapped(test.message)
assert.Equal(t, err.IsTransactionAlreadyMined(clientErrors), test.expect)
})`
$DIR/core/chains/evm/client/errors_test.go: `.NewSendErrorS(test.message)`
$DIR/core/chains/evm/client/errors_test.go: `.Run("IsReplacementUnderpriced", func(t *testing.T) {
tests := []errorCase{
{"replacement transaction underpriced", true, "geth"},
{"Replacement transaction underpriced", true, "Besu"},
{"replacement transaction underpriced", true, "Erigon"},
{"replacement transaction underpriced", true, "Klaytn"},
{"there is another tx which has the same nonce in the tx pool", true, "Klaytn"},
{"Transaction gas price 100wei is too low. There is another transaction with same nonce in the queue with gas price 150wei. Try increasing the gas price or incrementing the nonce.", true, "Parity"},
{"There are too many transactions in the queue. Your transaction was dropped due to limit. Try increasing the fee.", false, "Parity"},
{"gas price too low", false, "Arbitrum"},
{"client error replacement underpriced", true, "tomlConfig"},
{"", false, "tomlConfig"},
}
for _, test := range tests {
err = evmclient.NewSendErrorS(test.message)
assert.Equal(t, err.IsReplacementUnderpriced(clientErrors), test.expect)
err = newSendErrorWrapped(test.message)
assert.Equal(t, err.IsReplacementUnderpriced(clientErrors), test.expect)
}
})`
$DIR/core/chains/evm/client/errors_test.go: `.NewSendErrorS(test.message)`
$DIR/core/chains/evm/client/errors_test.go: `.Run("IsTransactionAlreadyInMempool", func(t *testing.T) {
assert.False(t, randomError.IsTransactionAlreadyInMempool(clientErrors))
tests := []errorCase{
// I have seen this in log output
{"known transaction: 0x7f657507aee0511e36d2d1972a6b22e917cc89f92b6c12c4dbd57eaabb236960", true, "Geth"},
// This comes from the geth source - https://github.com/ethereum/go-ethereum/blob/eb9d7d15ecf08cd5104e01a8af64489f01f700b0/core/tx_pool.go#L57
{"already known", true, "Geth"},
// This one is present in the light client (?!)
{"Known transaction (7f65)", true, "Geth"},
{"Known transaction", true, "Besu"},
{"already known", true, "Erigon"},
{"block already known", true, "Erigon"},
{"Transaction with the same hash was already imported.", true, "Parity"},
{"call failed: AlreadyKnown", true, "Nethermind"},
{"call failed: OwnNonceAlreadyUsed", true, "Nethermind"},
{"known transaction", true, "Klaytn"},
{"known transaction. transaction with hash 0x6013…3053 is already in the system", true, "zkSync"},
// This seems to be an erroneous message from the zkSync client, we'll have to match it anyway
{"ErrorObject { code: ServerError(3), message: \\\"known transaction. transaction with hash 0xf016…ad63 is already in the system\\\", data: Some(RawValue(\\\"0x\\\")) }", true, "zkSync"},
{"client error transaction already in mempool", true, "tomlConfig"},
}
for _, test := range tests {
err = evmclient.NewSendErrorS(test.message)
assert.Equal(t, err.IsTransactionAlreadyInMempool(clientErrors), test.expect)
err = newSendErrorWrapped(test.message)
assert.Equal(t, err.IsTransactionAlreadyInMempool(clientErrors), test.expect)
}
})`
$DIR/core/chains/evm/client/errors_test.go: `.NewSendErrorS(test.message)`
$DIR/core/chains/evm/client/errors_test.go: `.Run("IsTerminallyUnderpriced", func(t *testing.T) {
assert.False(t, randomError.IsTerminallyUnderpriced(clientErrors))
tests := []errorCase{
{"transaction underpriced", true, "geth"},
{"replacement transaction underpriced", false, "geth"},
{"Gas price below configured minimum gas price", true, "Besu"},
{"transaction underpriced", true, "Erigon"},
{"There are too many transactions in the queue. Your transaction was dropped due to limit. Try increasing the fee.", false, "Parity"},
{"Transaction gas price is too low. It does not satisfy your node's minimal gas price (minimal: 100 got: 50). Try increasing the gas price.", true, "Parity"},
{"gas price too low", true, "Arbitrum"},
{"FeeTooLow", true, "Nethermind"},
{"FeeTooLow, MaxFeePerGas too low. MaxFeePerGas: 50, BaseFee: 100, MaxPriorityFeePerGas:200, Block number: 5", true, "Nethermind"},
{"FeeTooLow, EffectivePriorityFeePerGas too low 10 < 20, BaseFee: 30", true, "Nethermind"},
{"FeeTooLow, FeePerGas needs to be higher than 100 to be added to the TxPool. Affordable FeePerGas of rejected tx: 50.", true, "Nethermind"},
{"FeeTooLowToCompete", true, "Nethermind"},
{"transaction underpriced", true, "Klaytn"},
{"intrinsic gas too low", true, "Klaytn"},
{"max fee per gas less than block base fee", true, "zkSync"},
{"virtual machine entered unexpected state. please contact developers and provide transaction details that caused this error. Error description: The operator included transaction with an unacceptable gas price", true, "zkSync"},
{"client error terminally underpriced", true, "tomlConfig"},
}
for _, test := range tests {
err = evmclient.NewSendErrorS(test.message)
assert.Equal(t, err.IsTerminallyUnderpriced(clientErrors), test.expect, "expected %q to match %s for client %s", err, "IsTerminallyUnderpriced", test.network)
err = newSendErrorWrapped(test.message)
assert.Equal(t, err.IsTerminallyUnderpriced(clientErrors), test.expect, "expected %q to match %s for client %s", err, "IsTerminallyUnderpriced", test.network)
}
})`
$DIR/core/chains/evm/client/errors_test.go: `.NewSendErrorS(test.message)`
$DIR/core/chains/evm/client/errors_test.go: `.Run("IsTemporarilyUnderpriced", func(t *testing.T) {
tests := []errorCase{
{"There are too many transactions in the queue. Your transaction was dropped due to limit. Try increasing the fee.", true, "Parity"},
{"There are too many transactions in the queue. Your transaction was dropped due to limit. Try increasing the fee.", true, "Parity"},
{"Transaction gas price is too low. It does not satisfy your node's minimal gas price (minimal: 100 got: 50). Try increasing the gas price.", false, "Parity"},
{"client error transaction underpriced", false, "tomlConfig"},
}
for _, test := range tests {
err = evmclient.NewSendErrorS(test.message)
assert.Equal(t, err.IsTemporarilyUnderpriced(clientErrors), test.expect)
err = newSendErrorWrapped(test.message)
assert.Equal(t, err.IsTemporarilyUnderpriced(clientErrors), test.expect)
}
})`
$DIR/core/chains/evm/client/errors_test.go: `.NewSendErrorS(test.message)`
$DIR/core/chains/evm/client/errors_test.go: `.Run("IsInsufficientEth", func(t *testing.T) {
tests := []errorCase{
{"insufficient funds for transfer", true, "Geth"},
{"insufficient funds for gas * price + value", true, "Geth"},
{"insufficient balance for transfer", true, "Geth"},
{"Upfront cost exceeds account balance", true, "Besu"},
{"insufficient funds for transfer", true, "Erigon"},
{"insufficient funds for gas * price + value", true, "Erigon"},
{"insufficient balance for transfer", true, "Erigon"},
{"Insufficient balance for transaction. Balance=100.25, Cost=200.50", true, "Parity"},
{"Insufficient funds. The account you tried to send transaction from does not have enough funds. Required 200.50 and got: 100.25.", true, "Parity"},
{"transaction rejected: insufficient funds for gas * price + value", true, "Arbitrum"},
{"not enough funds for gas", true, "Arbitrum"},
{"insufficient funds for gas * price + value: address 0xb68D832c1241bc50db1CF09e96c0F4201D5539C9 have 9934612900000000 want 9936662900000000", true, "Arbitrum"},
{"call failed: InsufficientFunds", true, "Nethermind"},
{"call failed: InsufficientFunds, Account balance: 4740799397601480913, cumulative cost: 22019342038993800000", true, "Nethermind"},
{"call failed: InsufficientFunds, Balance is 1092404690719251702 less than sending value + gas 7165512000464000000", true, "Nethermind"},
{"insufficient funds", true, "Klaytn"},
{"insufficient funds for gas * price + value + gatewayFee", true, "celo"},
{"insufficient balance for transfer", true, "zkSync"},
{"insufficient funds for gas + value. balance: 42719769622667482000, fee: 48098250000000, value: 42719769622667482000", true, "celo"},
{"client error insufficient eth", true, "tomlConfig"},
{"transaction would cause overdraft", true, "Geth"},
}
for _, test := range tests {
err = evmclient.NewSendErrorS(test.message)
assert.Equal(t, err.IsInsufficientEth(clientErrors), test.expect)
err = newSendErrorWrapped(test.message)
assert.Equal(t, err.IsInsufficientEth(clientErrors), test.expect)
}
})`
$DIR/core/chains/evm/client/errors_test.go: `.NewSendErrorS(test.message)`
$DIR/core/chains/evm/client/errors_test.go: `.Run("IsServiceUnavailable", func(t *testing.T) {
tests := []errorCase{
{"call failed: 503 Service Unavailable: \r\n503 Service Temporarily Unavailable\r\n\r\n503 Service Temporarily Unavailable
\r\n\r\n\r\n", true, "Nethermind"},
{"call failed: 502 Bad Gateway: \r\n502 Bad Gateway\r\n\r\n502 Bad Gateway
\r\n
", true, "Arbitrum"},
{"client error service unavailable", true, "tomlConfig"},
}
for _, test := range tests {
err = evmclient.NewSendErrorS(test.message)
assert.Equal(t, err.IsServiceUnavailable(clientErrors), test.expect)
err = newSendErrorWrapped(test.message)
assert.Equal(t, err.IsServiceUnavailable(clientErrors), test.expect)
}
})`
$DIR/core/chains/evm/client/errors_test.go: `.NewSendErrorS(test.message)`
$DIR/core/chains/evm/client/errors_test.go: `.Run("IsTxFeeExceedsCap", func(t *testing.T) {
tests := []errorCase{
{"tx fee (1.10 ether) exceeds the configured cap (1.00 ether)", true, "geth"},
{"tx fee (1.10 FTM) exceeds the configured cap (1.00 FTM)", true, "geth"},
{"tx fee (1.10 foocoin) exceeds the configured cap (1.00 foocoin)", true, "geth"},
{"Transaction fee cap exceeded", true, "Besu"},
{"tx fee (1.10 ether) exceeds the configured cap (1.00 ether)", true, "Erigon"},
{"invalid gas fee cap", true, "Klaytn"},
{"max fee per gas higher than max priority fee per gas", true, "Klaytn"},
{"tx fee (1.10 of currency celo) exceeds the configured cap (1.00 celo)", true, "celo"},
{"max priority fee per gas higher than max fee per gas", true, "zkSync"},
{"client error tx fee exceeds cap", true, "tomlConfig"},
}
for _, test := range tests {
err = evmclient.NewSendErrorS(test.message)
assert.Equal(t, err.IsTxFeeExceedsCap(clientErrors), test.expect)
err = newSendErrorWrapped(test.message)
assert.Equal(t, err.IsTxFeeExceedsCap(clientErrors), test.expect)
}
assert.False(t, randomError.IsTxFeeExceedsCap(clientErrors))
// Nil
err = evmclient.NewSendError(nil)
assert.False(t, err.IsTxFeeExceedsCap(clientErrors))
})`
$DIR/core/chains/evm/client/errors_test.go: `.NewSendErrorS(test.message)`
$DIR/core/chains/evm/client/errors_test.go: `.NewSendError(nil)`
$DIR/core/chains/evm/client/errors_test.go: `.Run("L2 Fees errors", func(t *testing.T) {
err = evmclient.NewSendErrorS("max fee per gas less than block base fee")
assert.False(t, err.IsL2FeeTooHigh(clientErrors))
assert.True(t, err.L2FeeTooLow(clientErrors))
err = newSendErrorWrapped("max fee per gas less than block base fee")
assert.False(t, err.IsL2FeeTooHigh(clientErrors))
assert.True(t, err.L2FeeTooLow(clientErrors))
err = evmclient.NewSendErrorS("queue full")
assert.True(t, err.IsL2Full(clientErrors))
err = evmclient.NewSendErrorS("sequencer pending tx pool full, please try again")
assert.True(t, err.IsL2Full(clientErrors))
assert.False(t, randomError.IsL2FeeTooHigh(clientErrors))
assert.False(t, randomError.L2FeeTooLow(clientErrors))
// Nil
err = evmclient.NewSendError(nil)
assert.False(t, err.IsL2FeeTooHigh(clientErrors))
assert.False(t, err.L2FeeTooLow(clientErrors))
})`
$DIR/core/chains/evm/client/errors_test.go: `.NewSendErrorS("max fee per gas less than block base fee")`
$DIR/core/chains/evm/client/errors_test.go: `.NewSendErrorS("queue full")`
$DIR/core/chains/evm/client/errors_test.go: `.NewSendErrorS("sequencer pending tx pool full, please try again")`
$DIR/core/chains/evm/client/errors_test.go: `.NewSendError(nil)`
$DIR/core/chains/evm/client/errors_test.go: `.Run("Metis gas price errors", func(t *testing.T) {
err := evmclient.NewSendErrorS("primary websocket (wss://ws-mainnet.metis.io) call failed: gas price too low: 18000000000 wei, use at least tx.gasPrice = 19500000000 wei")
assert.True(t, err.L2FeeTooLow(clientErrors))
err = newSendErrorWrapped("primary websocket (wss://ws-mainnet.metis.io) call failed: gas price too low: 18000000000 wei, use at least tx.gasPrice = 19500000000 wei")
assert.True(t, err.L2FeeTooLow(clientErrors))
assert.False(t, randomError.L2FeeTooLow(clientErrors))
// Nil
err = evmclient.NewSendError(nil)
assert.False(t, err.L2FeeTooLow(clientErrors))
})`
$DIR/core/chains/evm/client/errors_test.go: `.NewSendErrorS("primary websocket (wss://ws-mainnet.metis.io) call failed: gas price too low: 18000000000 wei, use at least tx.gasPrice = 19500000000 wei")`
$DIR/core/chains/evm/client/errors_test.go: `.NewSendError(nil)`
$DIR/core/chains/evm/client/errors_test.go: `.NewSendErrorS("primary http (http://***REDACTED***:9933) call failed: submit transaction to pool failed: Pool(Stale)")`
$DIR/core/chains/evm/client/errors_test.go: `.NewSendErrorS("primary http (http://***REDACTED***:9933) call failed: submit transaction to pool failed: Pool(AlreadyImported)")`
$DIR/core/chains/evm/client/errors_test.go: `.NewTestClientErrors()`
$DIR/core/chains/evm/client/errors_test.go: `.ClientErrorRegexes(&testErrors)`
$DIR/core/chains/evm/client/errors_test.go: `.Run(test.message, func(t *testing.T) {
err := evmclient.NewSendError(pkgerrors.New(test.message))
assert.Equal(t, test.expect, err.Fatal(clientErrors))
})`
$DIR/core/chains/evm/client/errors_test.go: `.NewSendError(pkgerrors.New(test.message))`
$DIR/core/chains/evm/client/errors_test.go: `.New(test.message)`
$DIR/core/chains/evm/client/errors_test.go: `.NewTestClientErrors()`
$DIR/core/chains/evm/client/errors_test.go: `.ClientErrorRegexes(&testErrors)`
$DIR/core/chains/evm/client/evm_client_test.go: `.NewClientConfigs(selectionMode, leaseDuration, chainTypeStr, nodeConfigs,
pollFailureThreshold, pollInterval, syncThreshold, nodeIsSyncingEnabled, noNewHeadsThreshold, finalityDepth, finalityTagEnabled)`
$DIR/core/chains/evm/client/evm_client_test.go: `.NewEvmClient(nodePool, chainCfg, nil, logger.Test(t), testutils.FixtureChainID, nodes, chaintype.ChainType(chainTypeStr))`
$DIR/core/chains/evm/client/evm_client_test.go: `.Test(t)`
$DIR/core/chains/evm/client/evm_client_test.go: `.ChainType(chainTypeStr)`
$DIR/core/chains/evm/client/null_client_test.go: `t.Run("chain id", func(t *testing.T) {
lggr := logger.Test(t)
cid := big.NewInt(123)
nc := client.NewNullClient(cid, lggr)
require.Equal(t, cid, nc.ConfiguredChainID())
nc = client.NewNullClient(nil, lggr)
require.Equal(t, big.NewInt(client.NullClientChainID), nc.ConfiguredChainID())
})`
$DIR/core/chains/evm/client/null_client_test.go: `nc = client.NewNullClient(nil, lggr)`
$DIR/core/chains/evm/client/null_client_test.go: `t.Run("CL client methods", func(t *testing.T) {
lggr, logs := logger.TestObserved(t, zapcore.DebugLevel)
nc := client.NewNullClient(nil, lggr)
ctx := tests.Context(t)
err := nc.Dial(ctx)
require.NoError(t, err)
require.Equal(t, 1, logs.FilterMessage("Dial").Len())
nc.Close()
require.Equal(t, 1, logs.FilterMessage("Close").Len())
b, err := nc.TokenBalance(ctx, common.Address{}, common.Address{})
require.NoError(t, err)
require.Zero(t, b.Int64())
require.Equal(t, 1, logs.FilterMessage("TokenBalance").Len())
l, err := nc.LINKBalance(ctx, common.Address{}, common.Address{})
require.NoError(t, err)
require.True(t, l.IsZero())
require.Equal(t, 1, logs.FilterMessage("LINKBalance").Len())
err = nc.CallContext(ctx, nil, "")
require.NoError(t, err)
require.Equal(t, 1, logs.FilterMessage("CallContext").Len())
h, err := nc.HeadByNumber(ctx, nil)
require.NoError(t, err)
require.Nil(t, h)
require.Equal(t, 1, logs.FilterMessage("HeadByNumber").Len())
chHeads := make(chan *evmtypes.Head)
sub, err := nc.SubscribeNewHead(ctx, chHeads)
require.NoError(t, err)
require.Equal(t, 1, logs.FilterMessage("SubscribeNewHead").Len())
require.Nil(t, sub.Err())
require.Equal(t, 1, logs.FilterMessage("Err").Len())
sub.Unsubscribe()
require.Equal(t, 1, logs.FilterMessage("Unsubscribe").Len())
chLogs := make(chan types.Log)
_, err = nc.SubscribeFilterLogs(ctx, ethereum.FilterQuery{}, chLogs)
require.NoError(t, err)
require.Equal(t, 1, logs.FilterMessage("SubscribeFilterLogs").Len())
})`
$DIR/core/chains/evm/client/null_client_test.go: `err = nc.CallContext(ctx, nil, "")`
$DIR/core/chains/evm/client/null_client_test.go: `sub.Unsubscribe()`
$DIR/core/chains/evm/client/null_client_test.go: `_, err = nc.SubscribeFilterLogs(ctx, ethereum.FilterQuery{}, chLogs)`
$DIR/core/chains/evm/client/null_client_test.go: `err = nc.SendTransaction(ctx, nil)`
$DIR/core/chains/evm/client/null_client_test.go: `b, err = nc.BlockByHash(ctx, common.Hash{})`
$DIR/core/chains/evm/client/null_client_test.go: `err = nc.BatchCallContext(ctx, []rpc.BatchElem{})`
$DIR/core/chains/evm/client/null_client_test.go: `err = nc.BatchCallContextAll(ctx, []rpc.BatchElem{})`
$DIR/core/chains/evm/client/null_client_test.go: `.Run("chain id", func(t *testing.T) {
lggr := logger.Test(t)
cid := big.NewInt(123)
nc := client.NewNullClient(cid, lggr)
require.Equal(t, cid, nc.ConfiguredChainID())
nc = client.NewNullClient(nil, lggr)
require.Equal(t, big.NewInt(client.NullClientChainID), nc.ConfiguredChainID())
})`
$DIR/core/chains/evm/client/null_client_test.go: `.Test(t)`
$DIR/core/chains/evm/client/null_client_test.go: `.NewInt(123)`
$DIR/core/chains/evm/client/null_client_test.go: `.NewNullClient(cid, lggr)`
$DIR/core/chains/evm/client/null_client_test.go: `.NewNullClient(nil, lggr)`
$DIR/core/chains/evm/client/null_client_test.go: `.Run("CL client methods", func(t *testing.T) {
lggr, logs := logger.TestObserved(t, zapcore.DebugLevel)
nc := client.NewNullClient(nil, lggr)
ctx := tests.Context(t)
err := nc.Dial(ctx)
require.NoError(t, err)
require.Equal(t, 1, logs.FilterMessage("Dial").Len())
nc.Close()
require.Equal(t, 1, logs.FilterMessage("Close").Len())
b, err := nc.TokenBalance(ctx, common.Address{}, common.Address{})
require.NoError(t, err)
require.Zero(t, b.Int64())
require.Equal(t, 1, logs.FilterMessage("TokenBalance").Len())
l, err := nc.LINKBalance(ctx, common.Address{}, common.Address{})
require.NoError(t, err)
require.True(t, l.IsZero())
require.Equal(t, 1, logs.FilterMessage("LINKBalance").Len())
err = nc.CallContext(ctx, nil, "")
require.NoError(t, err)
require.Equal(t, 1, logs.FilterMessage("CallContext").Len())
h, err := nc.HeadByNumber(ctx, nil)
require.NoError(t, err)
require.Nil(t, h)
require.Equal(t, 1, logs.FilterMessage("HeadByNumber").Len())
chHeads := make(chan *evmtypes.Head)
sub, err := nc.SubscribeNewHead(ctx, chHeads)
require.NoError(t, err)
require.Equal(t, 1, logs.FilterMessage("SubscribeNewHead").Len())
require.Nil(t, sub.Err())
require.Equal(t, 1, logs.FilterMessage("Err").Len())
sub.Unsubscribe()
require.Equal(t, 1, logs.FilterMessage("Unsubscribe").Len())
chLogs := make(chan types.Log)
_, err = nc.SubscribeFilterLogs(ctx, ethereum.FilterQuery{}, chLogs)
require.NoError(t, err)
require.Equal(t, 1, logs.FilterMessage("SubscribeFilterLogs").Len())
})`
$DIR/core/chains/evm/client/null_client_test.go: `.TestObserved(t, zapcore.DebugLevel)`
$DIR/core/chains/evm/client/null_client_test.go: `.NewNullClient(nil, lggr)`
$DIR/core/chains/evm/client/null_client_test.go: `.Context(t)`
$DIR/core/chains/evm/client/null_client_test.go: `.Dial(ctx)`
$DIR/core/chains/evm/client/null_client_test.go: `.TokenBalance(ctx, common.Address{}, common.Address{})`
$DIR/core/chains/evm/client/null_client_test.go: `.LINKBalance(ctx, common.Address{}, common.Address{})`
$DIR/core/chains/evm/client/null_client_test.go: `.CallContext(ctx, nil, "")`
$DIR/core/chains/evm/client/null_client_test.go: `.HeadByNumber(ctx, nil)`
$DIR/core/chains/evm/client/null_client_test.go: `.SubscribeNewHead(ctx, chHeads)`
$DIR/core/chains/evm/client/null_client_test.go: `.Unsubscribe()`
$DIR/core/chains/evm/client/null_client_test.go: `.SubscribeFilterLogs(ctx, ethereum.FilterQuery{}, chLogs)`
$DIR/core/chains/evm/client/null_client_test.go: `.TestObserved(t, zapcore.DebugLevel)`
$DIR/core/chains/evm/client/null_client_test.go: `.NewNullClient(nil, lggr)`
$DIR/core/chains/evm/client/null_client_test.go: `.Context(t)`
$DIR/core/chains/evm/client/null_client_test.go: `.HeaderByNumber(ctx, nil)`
$DIR/core/chains/evm/client/null_client_test.go: `.SendTransaction(ctx, nil)`
$DIR/core/chains/evm/client/null_client_test.go: `.PendingCodeAt(ctx, common.Address{})`
$DIR/core/chains/evm/client/null_client_test.go: `.PendingNonceAt(ctx, common.Address{})`
$DIR/core/chains/evm/client/null_client_test.go: `.SequenceAt(ctx, common.Address{}, nil)`
$DIR/core/chains/evm/client/null_client_test.go: `.TransactionReceipt(ctx, common.Hash{})`
$DIR/core/chains/evm/client/null_client_test.go: `.BlockByNumber(ctx, nil)`
$DIR/core/chains/evm/client/null_client_test.go: `.BlockByHash(ctx, common.Hash{})`
$DIR/core/chains/evm/client/null_client_test.go: `.BalanceAt(ctx, common.Address{}, nil)`
$DIR/core/chains/evm/client/null_client_test.go: `.FilterLogs(ctx, ethereum.FilterQuery{})`
$DIR/core/chains/evm/client/null_client_test.go: `.EstimateGas(ctx, ethereum.CallMsg{})`
$DIR/core/chains/evm/client/null_client_test.go: `.SuggestGasPrice(ctx)`
$DIR/core/chains/evm/client/null_client_test.go: `.CallContract(ctx, ethereum.CallMsg{}, nil)`
$DIR/core/chains/evm/client/null_client_test.go: `.CodeAt(ctx, common.Address{}, nil)`
$DIR/core/chains/evm/client/null_client_test.go: `.BatchCallContext(ctx, []rpc.BatchElem{})`
$DIR/core/chains/evm/client/null_client_test.go: `.BatchCallContextAll(ctx, []rpc.BatchElem{})`
$DIR/core/chains/evm/client/null_client_test.go: `.SuggestGasTipCap(ctx)`
$DIR/core/chains/evm/client/null_client_test.go: `.NodeStates()`
$DIR/core/chains/evm/client/sub_error_wrapper_test.go: `t.Run("Unsubscribe wrapper releases resources", func(t *testing.T) {
t.Parallel()
mockedSub := NewMockSubscription()
const prefix = "RPC returned error"
wrapper := newSubscriptionErrorWrapper(mockedSub, prefix)
wrapper.Unsubscribe()
// mock's resources were relased
assert.True(t, mockedSub.unsubscribed)
_, ok := <-mockedSub.Err()
assert.False(t, ok)
// wrapper's channels are closed
_, ok = <-wrapper.Err()
assert.False(t, ok)
// subsequence unsubscribe does not causes panic
wrapper.Unsubscribe()
})`
$DIR/core/chains/evm/client/sub_error_wrapper_test.go: `wrapper.Unsubscribe()`
$DIR/core/chains/evm/client/sub_error_wrapper_test.go: `_, ok = <-wrapper.Err()`
$DIR/core/chains/evm/client/sub_error_wrapper_test.go: `wrapper.Unsubscribe()`
$DIR/core/chains/evm/client/sub_error_wrapper_test.go: `t.Run("Unsubscribe interrupts error delivery", func(t *testing.T) {
t.Parallel()
sub := NewMockSubscription()
const prefix = "RPC returned error"
wrapper := newSubscriptionErrorWrapper(sub, prefix)
sub.Errors <- fmt.Errorf("error")
wrapper.Unsubscribe()
_, ok := <-wrapper.Err()
assert.False(t, ok)
})`
$DIR/core/chains/evm/client/sub_error_wrapper_test.go: `sub.Errors <- fmt.Errorf("error")`
$DIR/core/chains/evm/client/sub_error_wrapper_test.go: `wrapper.Unsubscribe()`
$DIR/core/chains/evm/client/sub_error_wrapper_test.go: `t.Run("Successfully wraps error", func(t *testing.T) {
t.Parallel()
sub := NewMockSubscription()
const prefix = "RPC returned error"
wrapper := newSubscriptionErrorWrapper(sub, prefix)
sub.Errors <- fmt.Errorf("root error")
err, ok := <-wrapper.Err()
assert.True(t, ok)
assert.Equal(t, "RPC returned error: root error", err.Error())
wrapper.Unsubscribe()
_, ok = <-wrapper.Err()
assert.False(t, ok)
})`
$DIR/core/chains/evm/client/sub_error_wrapper_test.go: `sub.Errors <- fmt.Errorf("root error")`
$DIR/core/chains/evm/client/sub_error_wrapper_test.go: `wrapper.Unsubscribe()`
$DIR/core/chains/evm/client/sub_error_wrapper_test.go: `_, ok = <-wrapper.Err()`
$DIR/core/chains/evm/client/sub_error_wrapper_test.go: `mockedSub.Unsubscribe()`
$DIR/core/chains/evm/client/sub_error_wrapper_test.go: `tests.AssertEventually(t, func() bool {
_, ok = <-wrapper.Err()
return !ok
})`
$DIR/core/chains/evm/client/sub_error_wrapper_test.go: `_, ok = <-wrapper.Err()`
$DIR/core/chains/evm/client/sub_error_wrapper_test.go: `.Run("Unsubscribe wrapper releases resources", func(t *testing.T) {
t.Parallel()
mockedSub := NewMockSubscription()
const prefix = "RPC returned error"
wrapper := newSubscriptionErrorWrapper(mockedSub, prefix)
wrapper.Unsubscribe()
// mock's resources were relased
assert.True(t, mockedSub.unsubscribed)
_, ok := <-mockedSub.Err()
assert.False(t, ok)
// wrapper's channels are closed
_, ok = <-wrapper.Err()
assert.False(t, ok)
// subsequence unsubscribe does not causes panic
wrapper.Unsubscribe()
})`
$DIR/core/chains/evm/client/sub_error_wrapper_test.go: `.Unsubscribe()`
$DIR/core/chains/evm/client/sub_error_wrapper_test.go: `.Err()`
$DIR/core/chains/evm/client/sub_error_wrapper_test.go: `.Err()`
$DIR/core/chains/evm/client/sub_error_wrapper_test.go: `.Unsubscribe()`
$DIR/core/chains/evm/client/sub_error_wrapper_test.go: `.Run("Unsubscribe interrupts error delivery", func(t *testing.T) {
t.Parallel()
sub := NewMockSubscription()
const prefix = "RPC returned error"
wrapper := newSubscriptionErrorWrapper(sub, prefix)
sub.Errors <- fmt.Errorf("error")
wrapper.Unsubscribe()
_, ok := <-wrapper.Err()
assert.False(t, ok)
})`
$DIR/core/chains/evm/client/sub_error_wrapper_test.go: `.Unsubscribe()`
$DIR/core/chains/evm/client/sub_error_wrapper_test.go: `.Err()`
$DIR/core/chains/evm/client/sub_error_wrapper_test.go: `.Run("Successfully wraps error", func(t *testing.T) {
t.Parallel()
sub := NewMockSubscription()
const prefix = "RPC returned error"
wrapper := newSubscriptionErrorWrapper(sub, prefix)
sub.Errors <- fmt.Errorf("root error")
err, ok := <-wrapper.Err()
assert.True(t, ok)
assert.Equal(t, "RPC returned error: root error", err.Error())
wrapper.Unsubscribe()
_, ok = <-wrapper.Err()
assert.False(t, ok)
})`
$DIR/core/chains/evm/client/sub_error_wrapper_test.go: `.Err()`
$DIR/core/chains/evm/client/sub_error_wrapper_test.go: `.Unsubscribe()`
$DIR/core/chains/evm/client/sub_error_wrapper_test.go: `.Err()`
$DIR/core/chains/evm/client/sub_error_wrapper_test.go: `.Unsubscribe()`
$DIR/core/chains/evm/client/sub_error_wrapper_test.go: `.Err()`
$DIR/core/chains/evm/client/sub_error_wrapper_test.go: `.AssertEventually(t, func() bool {
_, ok = <-wrapper.Err()
return !ok
})`
$DIR/core/chains/evm/client/sub_error_wrapper_test.go: `.Err()`
$DIR/core/chains/evm/client/tx_simulator_test.go: `t.Run("returns without error if simulation passes", func(t *testing.T) {
wsURL := testutils.NewWSServer(t, testutils.FixtureChainID, func(method string, params gjson.Result) (resp testutils.JSONRPCResponse) {
switch method {
case "eth_subscribe":
resp.Result = `"0x00"`
resp.Notify = headResult
return
case "eth_unsubscribe":
resp.Result = "true"
return
case "eth_estimateGas":
resp.Result = `"0x100"`
}
return
}).WSURL().String()
ethClient := mustNewChainClient(t, wsURL)
err := ethClient.Dial(ctx)
require.NoError(t, err)
msg := ethereum.CallMsg{
From: fromAddress,
To: &toAddress,
Data: []byte("0x00"),
}
sendErr := client.SimulateTransaction(ctx, ethClient, logger.TestSugared(t), "", msg)
require.Empty(t, sendErr)
})`
$DIR/core/chains/evm/client/tx_simulator_test.go: `resp.Result = `"0x00"``
$DIR/core/chains/evm/client/tx_simulator_test.go: `resp.Notify = headResult`
$DIR/core/chains/evm/client/tx_simulator_test.go: `resp.Result = "true"`
$DIR/core/chains/evm/client/tx_simulator_test.go: `resp.Result = `"0x100"``
$DIR/core/chains/evm/client/tx_simulator_test.go: `t.Run("returns error if simulation returns zk out-of-counters error", func(t *testing.T) {
wsURL := testutils.NewWSServer(t, testutils.FixtureChainID, func(method string, params gjson.Result) (resp testutils.JSONRPCResponse) {
switch method {
case "eth_subscribe":
resp.Result = `"0x00"`
resp.Notify = headResult
return
case "eth_unsubscribe":
resp.Result = "true"
return
case "eth_estimateGas":
resp.Error.Code = -32000
resp.Result = `"0x100"`
resp.Error.Message = "not enough keccak counters to continue the execution"
}
return
}).WSURL().String()
ethClient := mustNewChainClient(t, wsURL)
err := ethClient.Dial(ctx)
require.NoError(t, err)
msg := ethereum.CallMsg{
From: fromAddress,
To: &toAddress,
Data: []byte("0x00"),
}
sendErr := client.SimulateTransaction(ctx, ethClient, logger.TestSugared(t), "", msg)
require.Equal(t, true, sendErr.IsOutOfCounters(nil))
})`
$DIR/core/chains/evm/client/tx_simulator_test.go: `resp.Result = `"0x00"``
$DIR/core/chains/evm/client/tx_simulator_test.go: `resp.Notify = headResult`
$DIR/core/chains/evm/client/tx_simulator_test.go: `resp.Result = "true"`
$DIR/core/chains/evm/client/tx_simulator_test.go: `resp.Error.Code = -32000`
$DIR/core/chains/evm/client/tx_simulator_test.go: `resp.Result = `"0x100"``
$DIR/core/chains/evm/client/tx_simulator_test.go: `resp.Error.Message = "not enough keccak counters to continue the execution"`
$DIR/core/chains/evm/client/tx_simulator_test.go: `resp.Result = `"0x00"``
$DIR/core/chains/evm/client/tx_simulator_test.go: `resp.Notify = headResult`
$DIR/core/chains/evm/client/tx_simulator_test.go: `resp.Result = "true"`
$DIR/core/chains/evm/client/tx_simulator_test.go: `resp.Error.Code = -32000`
$DIR/core/chains/evm/client/tx_simulator_test.go: `resp.Error.Message = "something went wrong"`
$DIR/core/chains/evm/client/tx_simulator_test.go: `.NewAddress()`
$DIR/core/chains/evm/client/tx_simulator_test.go: `.NewAddress()`
$DIR/core/chains/evm/client/tx_simulator_test.go: `.Context(t)`
$DIR/core/chains/evm/client/tx_simulator_test.go: `.Run("returns without error if simulation passes", func(t *testing.T) {
wsURL := testutils.NewWSServer(t, testutils.FixtureChainID, func(method string, params gjson.Result) (resp testutils.JSONRPCResponse) {
switch method {
case "eth_subscribe":
resp.Result = `"0x00"`
resp.Notify = headResult
return
case "eth_unsubscribe":
resp.Result = "true"
return
case "eth_estimateGas":
resp.Result = `"0x100"`
}
return
}).WSURL().String()
ethClient := mustNewChainClient(t, wsURL)
err := ethClient.Dial(ctx)
require.NoError(t, err)
msg := ethereum.CallMsg{
From: fromAddress,
To: &toAddress,
Data: []byte("0x00"),
}
sendErr := client.SimulateTransaction(ctx, ethClient, logger.TestSugared(t), "", msg)
require.Empty(t, sendErr)
})`
$DIR/core/chains/evm/client/tx_simulator_test.go: `.NewWSServer(t, testutils.FixtureChainID, func(method string, params gjson.Result) (resp testutils.JSONRPCResponse) {
switch method {
case "eth_subscribe":
resp.Result = `"0x00"`
resp.Notify = headResult
return
case "eth_unsubscribe":
resp.Result = "true"
return
case "eth_estimateGas":
resp.Result = `"0x100"`
}
return
})`
$DIR/core/chains/evm/client/tx_simulator_test.go: `.WSURL()`
$DIR/core/chains/evm/client/tx_simulator_test.go: `.String()`
$DIR/core/chains/evm/client/tx_simulator_test.go: `.Dial(ctx)`
$DIR/core/chains/evm/client/tx_simulator_test.go: `.SimulateTransaction(ctx, ethClient, logger.TestSugared(t), "", msg)`
$DIR/core/chains/evm/client/tx_simulator_test.go: `.TestSugared(t)`
$DIR/core/chains/evm/client/tx_simulator_test.go: `.Run("returns error if simulation returns zk out-of-counters error", func(t *testing.T) {
wsURL := testutils.NewWSServer(t, testutils.FixtureChainID, func(method string, params gjson.Result) (resp testutils.JSONRPCResponse) {
switch method {
case "eth_subscribe":
resp.Result = `"0x00"`
resp.Notify = headResult
return
case "eth_unsubscribe":
resp.Result = "true"
return
case "eth_estimateGas":
resp.Error.Code = -32000
resp.Result = `"0x100"`
resp.Error.Message = "not enough keccak counters to continue the execution"
}
return
}).WSURL().String()
ethClient := mustNewChainClient(t, wsURL)
err := ethClient.Dial(ctx)
require.NoError(t, err)
msg := ethereum.CallMsg{
From: fromAddress,
To: &toAddress,
Data: []byte("0x00"),
}
sendErr := client.SimulateTransaction(ctx, ethClient, logger.TestSugared(t), "", msg)
require.Equal(t, true, sendErr.IsOutOfCounters(nil))
})`
$DIR/core/chains/evm/client/tx_simulator_test.go: `.NewWSServer(t, testutils.FixtureChainID, func(method string, params gjson.Result) (resp testutils.JSONRPCResponse) {
switch method {
case "eth_subscribe":
resp.Result = `"0x00"`
resp.Notify = headResult
return
case "eth_unsubscribe":
resp.Result = "true"
return
case "eth_estimateGas":
resp.Error.Code = -32000
resp.Result = `"0x100"`
resp.Error.Message = "not enough keccak counters to continue the execution"
}
return
})`
$DIR/core/chains/evm/client/tx_simulator_test.go: `.WSURL()`
$DIR/core/chains/evm/client/tx_simulator_test.go: `.String()`
$DIR/core/chains/evm/client/tx_simulator_test.go: `.Dial(ctx)`
$DIR/core/chains/evm/client/tx_simulator_test.go: `.SimulateTransaction(ctx, ethClient, logger.TestSugared(t), "", msg)`
$DIR/core/chains/evm/client/tx_simulator_test.go: `.TestSugared(t)`
$DIR/core/chains/evm/client/tx_simulator_test.go: `.NewWSServer(t, testutils.FixtureChainID, func(method string, params gjson.Result) (resp testutils.JSONRPCResponse) {
switch method {
case "eth_subscribe":
resp.Result = `"0x00"`
resp.Notify = headResult
return
case "eth_unsubscribe":
resp.Result = "true"
return
case "eth_estimateGas":
resp.Error.Code = -32000
resp.Error.Message = "something went wrong"
}
return
})`
$DIR/core/chains/evm/client/tx_simulator_test.go: `.WSURL()`
$DIR/core/chains/evm/client/tx_simulator_test.go: `.String()`
$DIR/core/chains/evm/client/tx_simulator_test.go: `.Dial(ctx)`
$DIR/core/chains/evm/client/tx_simulator_test.go: `.SimulateTransaction(ctx, ethClient, logger.TestSugared(t), "", msg)`
$DIR/core/chains/evm/client/tx_simulator_test.go: `.TestSugared(t)`
$DIR/core/chains/evm/config/chain_scoped_ocr2_test.go: `.NewTestChainScopedConfig(t, nil)`
$DIR/core/chains/evm/config/chain_scoped_ocr2_test.go: `.EVM()`
$DIR/core/chains/evm/config/chain_scoped_ocr2_test.go: `.OCR2()`
$DIR/core/chains/evm/config/chain_scoped_ocr2_test.go: `.Automation()`
$DIR/core/chains/evm/config/chain_scoped_ocr2_test.go: `.GasLimit()`
$DIR/core/chains/evm/config/chain_scoped_ocr_test.go: `.NewTestChainScopedConfig(t, nil)`
$DIR/core/chains/evm/config/chain_scoped_ocr_test.go: `.EVM()`
$DIR/core/chains/evm/config/chain_scoped_ocr_test.go: `.OCR()`
$DIR/core/chains/evm/config/chain_scoped_ocr_test.go: `.ObservationGracePeriod()`
$DIR/core/chains/evm/config/config_test.go: `c.GasEstimator.PriceMax = assets.NewWeiI(100000000000000)`
$DIR/core/chains/evm/config/config_test.go: `c.GasEstimator.PriceMax = assets.NewWeiI(100000000000000)`
$DIR/core/chains/evm/config/config_test.go: `c.GasEstimator.PriceDefault = assets.NewWeiI(42000000000)`
$DIR/core/chains/evm/config/config_test.go: `t.Run("EVM().GasEstimator().PriceDefault()", func(t *testing.T) {
assert.Equal(t, assets.NewWeiI(20000000000), cfg.EVM().GasEstimator().PriceDefault())
assert.Equal(t, assets.NewWeiI(42000000000), cfg2.EVM().GasEstimator().PriceDefault())
})`
$DIR/core/chains/evm/config/config_test.go: `t.Run("EvmGasBumpTxDepthDefault", func(t *testing.T) {
t.Run("uses MaxInFlightTransactions when not set", func(t *testing.T) {
assert.Equal(t, cfg.EVM().Transactions().MaxInFlight(), cfg.EVM().GasEstimator().BumpTxDepth())
})
t.Run("uses customer configured value when set", func(t *testing.T) {
var bumpTxDepth uint32 = 10
cfg2 := testutils.NewTestChainScopedConfig(t, func(c *toml.EVMConfig) {
c.GasEstimator.BumpTxDepth = &bumpTxDepth
})
assert.NotEqual(t, cfg2.EVM().Transactions().MaxInFlight(), cfg2.EVM().GasEstimator().BumpTxDepth())
assert.Equal(t, bumpTxDepth, cfg2.EVM().GasEstimator().BumpTxDepth())
})
})`
$DIR/core/chains/evm/config/config_test.go: `t.Run("uses MaxInFlightTransactions when not set", func(t *testing.T) {
assert.Equal(t, cfg.EVM().Transactions().MaxInFlight(), cfg.EVM().GasEstimator().BumpTxDepth())
})`
$DIR/core/chains/evm/config/config_test.go: `t.Run("uses customer configured value when set", func(t *testing.T) {
var bumpTxDepth uint32 = 10
cfg2 := testutils.NewTestChainScopedConfig(t, func(c *toml.EVMConfig) {
c.GasEstimator.BumpTxDepth = &bumpTxDepth
})
assert.NotEqual(t, cfg2.EVM().Transactions().MaxInFlight(), cfg2.EVM().GasEstimator().BumpTxDepth())
assert.Equal(t, bumpTxDepth, cfg2.EVM().GasEstimator().BumpTxDepth())
})`
$DIR/core/chains/evm/config/config_test.go: `c.GasEstimator.BumpTxDepth = &bumpTxDepth`
$DIR/core/chains/evm/config/config_test.go: `t.Run("PriceMaxKey", func(t *testing.T) {
addr := testutils.NewAddress()
randomOtherAddr := testutils.NewAddress()
cfg2 := testutils.NewTestChainScopedConfig(t, func(c *toml.EVMConfig) {
c.KeySpecific = toml.KeySpecificConfig{
{Key: ptr(types.EIP55AddressFromAddress(randomOtherAddr)),
GasEstimator: toml.KeySpecificGasEstimator{
PriceMax: assets.GWei(850),
},
},
}
c.GasEstimator.PriceMax = assets.NewWeiI(100000000000000)
c.GasEstimator.PriceDefault = assets.NewWeiI(42000000000)
})
t.Run("uses chain-specific default value when nothing is set", func(t *testing.T) {
assert.Equal(t, assets.NewWeiI(100000000000000), cfg2.EVM().GasEstimator().PriceMaxKey(addr))
})
t.Run("uses chain-specific override value when that is set", func(t *testing.T) {
priceMax := assets.NewWeiI(rand.Int63())
cfg3 := testutils.NewTestChainScopedConfig(t, func(c *toml.EVMConfig) {
c.GasEstimator.PriceMax = priceMax
})
assert.Equal(t, priceMax.String(), cfg3.EVM().GasEstimator().PriceMaxKey(addr).String())
})
t.Run("uses key-specific override value when set", func(t *testing.T) {
tests := []struct {
name string
val *assets.Wei
}{
{"Test with 250 GWei", assets.GWei(250)},
{"Test with 0 GWei", assets.GWei(0)},
}
for _, tt := range tests {
t.Run(tt.name, func(t *testing.T) {
cfg3 := testutils.NewTestChainScopedConfig(t, func(c *toml.EVMConfig) {
c.KeySpecific = toml.KeySpecificConfig{
{Key: ptr(types.EIP55AddressFromAddress(addr)),
GasEstimator: toml.KeySpecificGasEstimator{
PriceMax: tt.val,
},
},
}
})
assert.Equal(t, tt.val.String(), cfg3.EVM().GasEstimator().PriceMaxKey(addr).String())
})
}
})
t.Run("uses key-specific override value when set and lower than chain specific config", func(t *testing.T) {
keySpecificPrice := assets.GWei(900)
chainSpecificPrice := assets.GWei(1200)
cfg3 := testutils.NewTestChainScopedConfig(t, func(c *toml.EVMConfig) {
c.GasEstimator.PriceMax = chainSpecificPrice
c.KeySpecific = toml.KeySpecificConfig{
{Key: ptr(types.EIP55AddressFromAddress(addr)),
GasEstimator: toml.KeySpecificGasEstimator{
PriceMax: keySpecificPrice,
},
},
}
})
assert.Equal(t, keySpecificPrice.String(), cfg3.EVM().GasEstimator().PriceMaxKey(addr).String())
})
t.Run("uses chain-specific value when higher than key-specific value", func(t *testing.T) {
keySpecificPrice := assets.GWei(1400)
chainSpecificPrice := assets.GWei(1200)
cfg3 := testutils.NewTestChainScopedConfig(t, func(c *toml.EVMConfig) {
c.GasEstimator.PriceMax = chainSpecificPrice
c.KeySpecific = toml.KeySpecificConfig{
{Key: ptr(types.EIP55AddressFromAddress(addr)),
GasEstimator: toml.KeySpecificGasEstimator{
PriceMax: keySpecificPrice,
},
},
}
})
assert.Equal(t, chainSpecificPrice.String(), cfg3.EVM().GasEstimator().PriceMaxKey(addr).String())
})
t.Run("uses key-specific override value when set and lower than global config", func(t *testing.T) {
keySpecificPrice := assets.GWei(900)
cfg3 := testutils.NewTestChainScopedConfig(t, func(c *toml.EVMConfig) {
c.KeySpecific = toml.KeySpecificConfig{
{Key: ptr(types.EIP55AddressFromAddress(addr)),
GasEstimator: toml.KeySpecificGasEstimator{
PriceMax: keySpecificPrice,
},
},
}
})
assert.Equal(t, keySpecificPrice.String(), cfg3.EVM().GasEstimator().PriceMaxKey(addr).String())
})
t.Run("uses global value when higher than key-specific value", func(t *testing.T) {
keySpecificPrice := assets.GWei(1400)
chainSpecificPrice := assets.GWei(1200)
cfg3 := testutils.NewTestChainScopedConfig(t, func(c *toml.EVMConfig) {
c.GasEstimator.PriceMax = chainSpecificPrice
c.KeySpecific = toml.KeySpecificConfig{
{Key: ptr(types.EIP55AddressFromAddress(addr)),
GasEstimator: toml.KeySpecificGasEstimator{
PriceMax: keySpecificPrice,
},
},
}
})
assert.Equal(t, chainSpecificPrice.String(), cfg3.EVM().GasEstimator().PriceMaxKey(addr).String())
})
t.Run("uses global value when there is no key-specific price", func(t *testing.T) {
priceMax := assets.NewWeiI(rand.Int63())
unsetAddr := testutils.NewAddress()
cfg3 := testutils.NewTestChainScopedConfig(t, func(c *toml.EVMConfig) {
c.GasEstimator.PriceMax = priceMax
})
assert.Equal(t, priceMax.String(), cfg3.EVM().GasEstimator().PriceMaxKey(unsetAddr).String())
})
})`
$DIR/core/chains/evm/config/config_test.go: `c.KeySpecific = toml.KeySpecificConfig{
{Key: ptr(types.EIP55AddressFromAddress(randomOtherAddr)),
GasEstimator: toml.KeySpecificGasEstimator{
PriceMax: assets.GWei(850),
},
},
}`
$DIR/core/chains/evm/config/config_test.go: `c.GasEstimator.PriceMax = assets.NewWeiI(100000000000000)`
$DIR/core/chains/evm/config/config_test.go: `c.GasEstimator.PriceDefault = assets.NewWeiI(42000000000)`
$DIR/core/chains/evm/config/config_test.go: `t.Run("uses chain-specific default value when nothing is set", func(t *testing.T) {
assert.Equal(t, assets.NewWeiI(100000000000000), cfg2.EVM().GasEstimator().PriceMaxKey(addr))
})`
$DIR/core/chains/evm/config/config_test.go: `t.Run("uses chain-specific override value when that is set", func(t *testing.T) {
priceMax := assets.NewWeiI(rand.Int63())
cfg3 := testutils.NewTestChainScopedConfig(t, func(c *toml.EVMConfig) {
c.GasEstimator.PriceMax = priceMax
})
assert.Equal(t, priceMax.String(), cfg3.EVM().GasEstimator().PriceMaxKey(addr).String())
})`
$DIR/core/chains/evm/config/config_test.go: `c.GasEstimator.PriceMax = priceMax`
$DIR/core/chains/evm/config/config_test.go: `t.Run("uses key-specific override value when set", func(t *testing.T) {
tests := []struct {
name string
val *assets.Wei
}{
{"Test with 250 GWei", assets.GWei(250)},
{"Test with 0 GWei", assets.GWei(0)},
}
for _, tt := range tests {
t.Run(tt.name, func(t *testing.T) {
cfg3 := testutils.NewTestChainScopedConfig(t, func(c *toml.EVMConfig) {
c.KeySpecific = toml.KeySpecificConfig{
{Key: ptr(types.EIP55AddressFromAddress(addr)),
GasEstimator: toml.KeySpecificGasEstimator{
PriceMax: tt.val,
},
},
}
})
assert.Equal(t, tt.val.String(), cfg3.EVM().GasEstimator().PriceMaxKey(addr).String())
})
}
})`
$DIR/core/chains/evm/config/config_test.go: `t.Run(tt.name, func(t *testing.T) {
cfg3 := testutils.NewTestChainScopedConfig(t, func(c *toml.EVMConfig) {
c.KeySpecific = toml.KeySpecificConfig{
{Key: ptr(types.EIP55AddressFromAddress(addr)),
GasEstimator: toml.KeySpecificGasEstimator{
PriceMax: tt.val,
},
},
}
})
assert.Equal(t, tt.val.String(), cfg3.EVM().GasEstimator().PriceMaxKey(addr).String())
})`
$DIR/core/chains/evm/config/config_test.go: `c.KeySpecific = toml.KeySpecificConfig{
{Key: ptr(types.EIP55AddressFromAddress(addr)),
GasEstimator: toml.KeySpecificGasEstimator{
PriceMax: tt.val,
},
},
}`
$DIR/core/chains/evm/config/config_test.go: `t.Run("uses key-specific override value when set and lower than chain specific config", func(t *testing.T) {
keySpecificPrice := assets.GWei(900)
chainSpecificPrice := assets.GWei(1200)
cfg3 := testutils.NewTestChainScopedConfig(t, func(c *toml.EVMConfig) {
c.GasEstimator.PriceMax = chainSpecificPrice
c.KeySpecific = toml.KeySpecificConfig{
{Key: ptr(types.EIP55AddressFromAddress(addr)),
GasEstimator: toml.KeySpecificGasEstimator{
PriceMax: keySpecificPrice,
},
},
}
})
assert.Equal(t, keySpecificPrice.String(), cfg3.EVM().GasEstimator().PriceMaxKey(addr).String())
})`
$DIR/core/chains/evm/config/config_test.go: `c.GasEstimator.PriceMax = chainSpecificPrice`
$DIR/core/chains/evm/config/config_test.go: `c.KeySpecific = toml.KeySpecificConfig{
{Key: ptr(types.EIP55AddressFromAddress(addr)),
GasEstimator: toml.KeySpecificGasEstimator{
PriceMax: keySpecificPrice,
},
},
}`
$DIR/core/chains/evm/config/config_test.go: `t.Run("uses chain-specific value when higher than key-specific value", func(t *testing.T) {
keySpecificPrice := assets.GWei(1400)
chainSpecificPrice := assets.GWei(1200)
cfg3 := testutils.NewTestChainScopedConfig(t, func(c *toml.EVMConfig) {
c.GasEstimator.PriceMax = chainSpecificPrice
c.KeySpecific = toml.KeySpecificConfig{
{Key: ptr(types.EIP55AddressFromAddress(addr)),
GasEstimator: toml.KeySpecificGasEstimator{
PriceMax: keySpecificPrice,
},
},
}
})
assert.Equal(t, chainSpecificPrice.String(), cfg3.EVM().GasEstimator().PriceMaxKey(addr).String())
})`
$DIR/core/chains/evm/config/config_test.go: `c.GasEstimator.PriceMax = chainSpecificPrice`
$DIR/core/chains/evm/config/config_test.go: `c.KeySpecific = toml.KeySpecificConfig{
{Key: ptr(types.EIP55AddressFromAddress(addr)),
GasEstimator: toml.KeySpecificGasEstimator{
PriceMax: keySpecificPrice,
},
},
}`
$DIR/core/chains/evm/config/config_test.go: `t.Run("uses key-specific override value when set and lower than global config", func(t *testing.T) {
keySpecificPrice := assets.GWei(900)
cfg3 := testutils.NewTestChainScopedConfig(t, func(c *toml.EVMConfig) {
c.KeySpecific = toml.KeySpecificConfig{
{Key: ptr(types.EIP55AddressFromAddress(addr)),
GasEstimator: toml.KeySpecificGasEstimator{
PriceMax: keySpecificPrice,
},
},
}
})
assert.Equal(t, keySpecificPrice.String(), cfg3.EVM().GasEstimator().PriceMaxKey(addr).String())
})`
$DIR/core/chains/evm/config/config_test.go: `c.KeySpecific = toml.KeySpecificConfig{
{Key: ptr(types.EIP55AddressFromAddress(addr)),
GasEstimator: toml.KeySpecificGasEstimator{
PriceMax: keySpecificPrice,
},
},
}`
$DIR/core/chains/evm/config/config_test.go: `t.Run("uses global value when higher than key-specific value", func(t *testing.T) {
keySpecificPrice := assets.GWei(1400)
chainSpecificPrice := assets.GWei(1200)
cfg3 := testutils.NewTestChainScopedConfig(t, func(c *toml.EVMConfig) {
c.GasEstimator.PriceMax = chainSpecificPrice
c.KeySpecific = toml.KeySpecificConfig{
{Key: ptr(types.EIP55AddressFromAddress(addr)),
GasEstimator: toml.KeySpecificGasEstimator{
PriceMax: keySpecificPrice,
},
},
}
})
assert.Equal(t, chainSpecificPrice.String(), cfg3.EVM().GasEstimator().PriceMaxKey(addr).String())
})`
$DIR/core/chains/evm/config/config_test.go: `c.GasEstimator.PriceMax = chainSpecificPrice`
$DIR/core/chains/evm/config/config_test.go: `c.KeySpecific = toml.KeySpecificConfig{
{Key: ptr(types.EIP55AddressFromAddress(addr)),
GasEstimator: toml.KeySpecificGasEstimator{
PriceMax: keySpecificPrice,
},
},
}`
$DIR/core/chains/evm/config/config_test.go: `t.Run("uses global value when there is no key-specific price", func(t *testing.T) {
priceMax := assets.NewWeiI(rand.Int63())
unsetAddr := testutils.NewAddress()
cfg3 := testutils.NewTestChainScopedConfig(t, func(c *toml.EVMConfig) {
c.GasEstimator.PriceMax = priceMax
})
assert.Equal(t, priceMax.String(), cfg3.EVM().GasEstimator().PriceMaxKey(unsetAddr).String())
})`
$DIR/core/chains/evm/config/config_test.go: `c.GasEstimator.PriceMax = priceMax`
$DIR/core/chains/evm/config/config_test.go: `t.Run("LinkContractAddress", func(t *testing.T) {
t.Run("uses chain-specific default value when nothing is set", func(t *testing.T) {
assert.Equal(t, "", cfg.EVM().LinkContractAddress())
})
t.Run("uses chain-specific override value when that is set", func(t *testing.T) {
addr := testutils.NewAddress()
cfg3 := testutils.NewTestChainScopedConfig(t, func(c *toml.EVMConfig) {
c.LinkContractAddress = ptr(types.EIP55AddressFromAddress(addr))
})
assert.Equal(t, addr.String(), cfg3.EVM().LinkContractAddress())
})
})`
$DIR/core/chains/evm/config/config_test.go: `t.Run("uses chain-specific default value when nothing is set", func(t *testing.T) {
assert.Equal(t, "", cfg.EVM().LinkContractAddress())
})`
$DIR/core/chains/evm/config/config_test.go: `t.Run("uses chain-specific override value when that is set", func(t *testing.T) {
addr := testutils.NewAddress()
cfg3 := testutils.NewTestChainScopedConfig(t, func(c *toml.EVMConfig) {
c.LinkContractAddress = ptr(types.EIP55AddressFromAddress(addr))
})
assert.Equal(t, addr.String(), cfg3.EVM().LinkContractAddress())
})`
$DIR/core/chains/evm/config/config_test.go: `c.LinkContractAddress = ptr(types.EIP55AddressFromAddress(addr))`
$DIR/core/chains/evm/config/config_test.go: `t.Run("uses chain-specific default value when nothing is set", func(t *testing.T) {
assert.Equal(t, "", cfg.EVM().OperatorFactoryAddress())
})`
$DIR/core/chains/evm/config/config_test.go: `t.Run("uses chain-specific override value when that is set", func(t *testing.T) {
val := testutils.NewAddress()
cfg3 := testutils.NewTestChainScopedConfig(t, func(c *toml.EVMConfig) {
c.OperatorFactoryAddress = ptr(types.EIP55AddressFromAddress(val))
})
assert.Equal(t, val.String(), cfg3.EVM().OperatorFactoryAddress())
})`
$DIR/core/chains/evm/config/config_test.go: `c.OperatorFactoryAddress = ptr(types.EIP55AddressFromAddress(val))`
$DIR/core/chains/evm/config/config_test.go: `c.GasEstimator.PriceMax = assets.GWei(500)`
$DIR/core/chains/evm/config/config_test.go: `c.ChainID = (*ubig.Big)(big.NewInt(56))`
$DIR/core/chains/evm/config/config_test.go: `timeout = cfg.EVM().OCR().ContractTransmitterTransmitTimeout()`
$DIR/core/chains/evm/config/config_test.go: `timeout = cfg.EVM().OCR().ObservationGracePeriod()`
$DIR/core/chains/evm/config/config_test.go: `t.Run(tt.name, func(t *testing.T) {
t.Parallel()
config := testutils.NewTestChainScopedConfig(t, func(c *toml.EVMConfig) {
c.ChainID = ubig.NewI(tt.chainID)
})
assert.Equal(t, tt.expectedGasLimitDefault, config.EVM().GasEstimator().LimitDefault())
assert.Nil(t, config.EVM().GasEstimator().LimitJobType().OCR())
assert.Nil(t, config.EVM().GasEstimator().LimitJobType().DR())
assert.Nil(t, config.EVM().GasEstimator().LimitJobType().VRF())
assert.Nil(t, config.EVM().GasEstimator().LimitJobType().FM())
assert.Nil(t, config.EVM().GasEstimator().LimitJobType().Keeper())
assert.Equal(t, tt.expectedMinimumContractPayment, strings.TrimRight(config.EVM().MinContractPayment().Link(), "0"))
})`
$DIR/core/chains/evm/config/config_test.go: `c.ChainID = ubig.NewI(tt.chainID)`
$DIR/core/chains/evm/config/config_test.go: `c.ChainID = id`
$DIR/core/chains/evm/config/config_test.go: `c.NodePool = toml.NodePool{
Errors: toml.ClientErrors{
NonceTooLow: ptr("client error nonce too low"),
NonceTooHigh: ptr("client error nonce too high"),
ReplacementTransactionUnderpriced: ptr("client error replacement underpriced"),
LimitReached: ptr("client error limit reached"),
TransactionAlreadyInMempool: ptr("client error transaction already in mempool"),
TerminallyUnderpriced: ptr("client error terminally underpriced"),
InsufficientEth: ptr("client error insufficient eth"),
TxFeeExceedsCap: ptr("client error tx fee exceeds cap"),
L2FeeTooLow: ptr("client error l2 fee too low"),
L2FeeTooHigh: ptr("client error l2 fee too high"),
L2Full: ptr("client error l2 full"),
TransactionAlreadyMined: ptr("client error transaction already mined"),
Fatal: ptr("client error fatal"),
ServiceUnavailable: ptr("client error service unavailable"),
},
}`
$DIR/core/chains/evm/config/config_test.go: `.NewTestChainScopedConfig(t, func(c *toml.EVMConfig) {
c.GasEstimator.PriceMax = assets.NewWeiI(100000000000000)
})`
$DIR/core/chains/evm/config/config_test.go: `.NewWeiI(100000000000000)`
$DIR/core/chains/evm/config/config_test.go: `.NewTestChainScopedConfig(t, func(c *toml.EVMConfig) {
c.GasEstimator.PriceMax = assets.NewWeiI(100000000000000)
c.GasEstimator.PriceDefault = assets.NewWeiI(42000000000)
})`
$DIR/core/chains/evm/config/config_test.go: `.NewWeiI(100000000000000)`
$DIR/core/chains/evm/config/config_test.go: `.NewWeiI(42000000000)`
$DIR/core/chains/evm/config/config_test.go: `.Run("EVM().GasEstimator().PriceDefault()", func(t *testing.T) {
assert.Equal(t, assets.NewWeiI(20000000000), cfg.EVM().GasEstimator().PriceDefault())
assert.Equal(t, assets.NewWeiI(42000000000), cfg2.EVM().GasEstimator().PriceDefault())
})`
$DIR/core/chains/evm/config/config_test.go: `.Run("EvmGasBumpTxDepthDefault", func(t *testing.T) {
t.Run("uses MaxInFlightTransactions when not set", func(t *testing.T) {
assert.Equal(t, cfg.EVM().Transactions().MaxInFlight(), cfg.EVM().GasEstimator().BumpTxDepth())
})
t.Run("uses customer configured value when set", func(t *testing.T) {
var bumpTxDepth uint32 = 10
cfg2 := testutils.NewTestChainScopedConfig(t, func(c *toml.EVMConfig) {
c.GasEstimator.BumpTxDepth = &bumpTxDepth
})
assert.NotEqual(t, cfg2.EVM().Transactions().MaxInFlight(), cfg2.EVM().GasEstimator().BumpTxDepth())
assert.Equal(t, bumpTxDepth, cfg2.EVM().GasEstimator().BumpTxDepth())
})
})`
$DIR/core/chains/evm/config/config_test.go: `.Run("uses MaxInFlightTransactions when not set", func(t *testing.T) {
assert.Equal(t, cfg.EVM().Transactions().MaxInFlight(), cfg.EVM().GasEstimator().BumpTxDepth())
})`
$DIR/core/chains/evm/config/config_test.go: `.Run("uses customer configured value when set", func(t *testing.T) {
var bumpTxDepth uint32 = 10
cfg2 := testutils.NewTestChainScopedConfig(t, func(c *toml.EVMConfig) {
c.GasEstimator.BumpTxDepth = &bumpTxDepth
})
assert.NotEqual(t, cfg2.EVM().Transactions().MaxInFlight(), cfg2.EVM().GasEstimator().BumpTxDepth())
assert.Equal(t, bumpTxDepth, cfg2.EVM().GasEstimator().BumpTxDepth())
})`
$DIR/core/chains/evm/config/config_test.go: `.NewTestChainScopedConfig(t, func(c *toml.EVMConfig) {
c.GasEstimator.BumpTxDepth = &bumpTxDepth
})`
$DIR/core/chains/evm/config/config_test.go: `.Run("PriceMaxKey", func(t *testing.T) {
addr := testutils.NewAddress()
randomOtherAddr := testutils.NewAddress()
cfg2 := testutils.NewTestChainScopedConfig(t, func(c *toml.EVMConfig) {
c.KeySpecific = toml.KeySpecificConfig{
{Key: ptr(types.EIP55AddressFromAddress(randomOtherAddr)),
GasEstimator: toml.KeySpecificGasEstimator{
PriceMax: assets.GWei(850),
},
},
}
c.GasEstimator.PriceMax = assets.NewWeiI(100000000000000)
c.GasEstimator.PriceDefault = assets.NewWeiI(42000000000)
})
t.Run("uses chain-specific default value when nothing is set", func(t *testing.T) {
assert.Equal(t, assets.NewWeiI(100000000000000), cfg2.EVM().GasEstimator().PriceMaxKey(addr))
})
t.Run("uses chain-specific override value when that is set", func(t *testing.T) {
priceMax := assets.NewWeiI(rand.Int63())
cfg3 := testutils.NewTestChainScopedConfig(t, func(c *toml.EVMConfig) {
c.GasEstimator.PriceMax = priceMax
})
assert.Equal(t, priceMax.String(), cfg3.EVM().GasEstimator().PriceMaxKey(addr).String())
})
t.Run("uses key-specific override value when set", func(t *testing.T) {
tests := []struct {
name string
val *assets.Wei
}{
{"Test with 250 GWei", assets.GWei(250)},
{"Test with 0 GWei", assets.GWei(0)},
}
for _, tt := range tests {
t.Run(tt.name, func(t *testing.T) {
cfg3 := testutils.NewTestChainScopedConfig(t, func(c *toml.EVMConfig) {
c.KeySpecific = toml.KeySpecificConfig{
{Key: ptr(types.EIP55AddressFromAddress(addr)),
GasEstimator: toml.KeySpecificGasEstimator{
PriceMax: tt.val,
},
},
}
})
assert.Equal(t, tt.val.String(), cfg3.EVM().GasEstimator().PriceMaxKey(addr).String())
})
}
})
t.Run("uses key-specific override value when set and lower than chain specific config", func(t *testing.T) {
keySpecificPrice := assets.GWei(900)
chainSpecificPrice := assets.GWei(1200)
cfg3 := testutils.NewTestChainScopedConfig(t, func(c *toml.EVMConfig) {
c.GasEstimator.PriceMax = chainSpecificPrice
c.KeySpecific = toml.KeySpecificConfig{
{Key: ptr(types.EIP55AddressFromAddress(addr)),
GasEstimator: toml.KeySpecificGasEstimator{
PriceMax: keySpecificPrice,
},
},
}
})
assert.Equal(t, keySpecificPrice.String(), cfg3.EVM().GasEstimator().PriceMaxKey(addr).String())
})
t.Run("uses chain-specific value when higher than key-specific value", func(t *testing.T) {
keySpecificPrice := assets.GWei(1400)
chainSpecificPrice := assets.GWei(1200)
cfg3 := testutils.NewTestChainScopedConfig(t, func(c *toml.EVMConfig) {
c.GasEstimator.PriceMax = chainSpecificPrice
c.KeySpecific = toml.KeySpecificConfig{
{Key: ptr(types.EIP55AddressFromAddress(addr)),
GasEstimator: toml.KeySpecificGasEstimator{
PriceMax: keySpecificPrice,
},
},
}
})
assert.Equal(t, chainSpecificPrice.String(), cfg3.EVM().GasEstimator().PriceMaxKey(addr).String())
})
t.Run("uses key-specific override value when set and lower than global config", func(t *testing.T) {
keySpecificPrice := assets.GWei(900)
cfg3 := testutils.NewTestChainScopedConfig(t, func(c *toml.EVMConfig) {
c.KeySpecific = toml.KeySpecificConfig{
{Key: ptr(types.EIP55AddressFromAddress(addr)),
GasEstimator: toml.KeySpecificGasEstimator{
PriceMax: keySpecificPrice,
},
},
}
})
assert.Equal(t, keySpecificPrice.String(), cfg3.EVM().GasEstimator().PriceMaxKey(addr).String())
})
t.Run("uses global value when higher than key-specific value", func(t *testing.T) {
keySpecificPrice := assets.GWei(1400)
chainSpecificPrice := assets.GWei(1200)
cfg3 := testutils.NewTestChainScopedConfig(t, func(c *toml.EVMConfig) {
c.GasEstimator.PriceMax = chainSpecificPrice
c.KeySpecific = toml.KeySpecificConfig{
{Key: ptr(types.EIP55AddressFromAddress(addr)),
GasEstimator: toml.KeySpecificGasEstimator{
PriceMax: keySpecificPrice,
},
},
}
})
assert.Equal(t, chainSpecificPrice.String(), cfg3.EVM().GasEstimator().PriceMaxKey(addr).String())
})
t.Run("uses global value when there is no key-specific price", func(t *testing.T) {
priceMax := assets.NewWeiI(rand.Int63())
unsetAddr := testutils.NewAddress()
cfg3 := testutils.NewTestChainScopedConfig(t, func(c *toml.EVMConfig) {
c.GasEstimator.PriceMax = priceMax
})
assert.Equal(t, priceMax.String(), cfg3.EVM().GasEstimator().PriceMaxKey(unsetAddr).String())
})
})`
$DIR/core/chains/evm/config/config_test.go: `.NewAddress()`
$DIR/core/chains/evm/config/config_test.go: `.NewAddress()`
$DIR/core/chains/evm/config/config_test.go: `.NewTestChainScopedConfig(t, func(c *toml.EVMConfig) {
c.KeySpecific = toml.KeySpecificConfig{
{Key: ptr(types.EIP55AddressFromAddress(randomOtherAddr)),
GasEstimator: toml.KeySpecificGasEstimator{
PriceMax: assets.GWei(850),
},
},
}
c.GasEstimator.PriceMax = assets.NewWeiI(100000000000000)
c.GasEstimator.PriceDefault = assets.NewWeiI(42000000000)
})`
$DIR/core/chains/evm/config/config_test.go: `.EIP55AddressFromAddress(randomOtherAddr)`
$DIR/core/chains/evm/config/config_test.go: `.GWei(850)`
$DIR/core/chains/evm/config/config_test.go: `.NewWeiI(100000000000000)`
$DIR/core/chains/evm/config/config_test.go: `.NewWeiI(42000000000)`
$DIR/core/chains/evm/config/config_test.go: `.Run("uses chain-specific default value when nothing is set", func(t *testing.T) {
assert.Equal(t, assets.NewWeiI(100000000000000), cfg2.EVM().GasEstimator().PriceMaxKey(addr))
})`
$DIR/core/chains/evm/config/config_test.go: `.Run("uses chain-specific override value when that is set", func(t *testing.T) {
priceMax := assets.NewWeiI(rand.Int63())
cfg3 := testutils.NewTestChainScopedConfig(t, func(c *toml.EVMConfig) {
c.GasEstimator.PriceMax = priceMax
})
assert.Equal(t, priceMax.String(), cfg3.EVM().GasEstimator().PriceMaxKey(addr).String())
})`
$DIR/core/chains/evm/config/config_test.go: `.NewWeiI(rand.Int63())`
$DIR/core/chains/evm/config/config_test.go: `.Int63()`
$DIR/core/chains/evm/config/config_test.go: `.NewTestChainScopedConfig(t, func(c *toml.EVMConfig) {
c.GasEstimator.PriceMax = priceMax
})`
$DIR/core/chains/evm/config/config_test.go: `.Run("uses key-specific override value when set", func(t *testing.T) {
tests := []struct {
name string
val *assets.Wei
}{
{"Test with 250 GWei", assets.GWei(250)},
{"Test with 0 GWei", assets.GWei(0)},
}
for _, tt := range tests {
t.Run(tt.name, func(t *testing.T) {
cfg3 := testutils.NewTestChainScopedConfig(t, func(c *toml.EVMConfig) {
c.KeySpecific = toml.KeySpecificConfig{
{Key: ptr(types.EIP55AddressFromAddress(addr)),
GasEstimator: toml.KeySpecificGasEstimator{
PriceMax: tt.val,
},
},
}
})
assert.Equal(t, tt.val.String(), cfg3.EVM().GasEstimator().PriceMaxKey(addr).String())
})
}
})`
$DIR/core/chains/evm/config/config_test.go: `.GWei(250)`
$DIR/core/chains/evm/config/config_test.go: `.GWei(0)`
$DIR/core/chains/evm/config/config_test.go: `.Run(tt.name, func(t *testing.T) {
cfg3 := testutils.NewTestChainScopedConfig(t, func(c *toml.EVMConfig) {
c.KeySpecific = toml.KeySpecificConfig{
{Key: ptr(types.EIP55AddressFromAddress(addr)),
GasEstimator: toml.KeySpecificGasEstimator{
PriceMax: tt.val,
},
},
}
})
assert.Equal(t, tt.val.String(), cfg3.EVM().GasEstimator().PriceMaxKey(addr).String())
})`
$DIR/core/chains/evm/config/config_test.go: `.NewTestChainScopedConfig(t, func(c *toml.EVMConfig) {
c.KeySpecific = toml.KeySpecificConfig{
{Key: ptr(types.EIP55AddressFromAddress(addr)),
GasEstimator: toml.KeySpecificGasEstimator{
PriceMax: tt.val,
},
},
}
})`
$DIR/core/chains/evm/config/config_test.go: `.EIP55AddressFromAddress(addr)`
$DIR/core/chains/evm/config/config_test.go: `.Run("uses key-specific override value when set and lower than chain specific config", func(t *testing.T) {
keySpecificPrice := assets.GWei(900)
chainSpecificPrice := assets.GWei(1200)
cfg3 := testutils.NewTestChainScopedConfig(t, func(c *toml.EVMConfig) {
c.GasEstimator.PriceMax = chainSpecificPrice
c.KeySpecific = toml.KeySpecificConfig{
{Key: ptr(types.EIP55AddressFromAddress(addr)),
GasEstimator: toml.KeySpecificGasEstimator{
PriceMax: keySpecificPrice,
},
},
}
})
assert.Equal(t, keySpecificPrice.String(), cfg3.EVM().GasEstimator().PriceMaxKey(addr).String())
})`
$DIR/core/chains/evm/config/config_test.go: `.GWei(900)`
$DIR/core/chains/evm/config/config_test.go: `.GWei(1200)`
$DIR/core/chains/evm/config/config_test.go: `.NewTestChainScopedConfig(t, func(c *toml.EVMConfig) {
c.GasEstimator.PriceMax = chainSpecificPrice
c.KeySpecific = toml.KeySpecificConfig{
{Key: ptr(types.EIP55AddressFromAddress(addr)),
GasEstimator: toml.KeySpecificGasEstimator{
PriceMax: keySpecificPrice,
},
},
}
})`
$DIR/core/chains/evm/config/config_test.go: `.EIP55AddressFromAddress(addr)`
$DIR/core/chains/evm/config/config_test.go: `.Run("uses chain-specific value when higher than key-specific value", func(t *testing.T) {
keySpecificPrice := assets.GWei(1400)
chainSpecificPrice := assets.GWei(1200)
cfg3 := testutils.NewTestChainScopedConfig(t, func(c *toml.EVMConfig) {
c.GasEstimator.PriceMax = chainSpecificPrice
c.KeySpecific = toml.KeySpecificConfig{
{Key: ptr(types.EIP55AddressFromAddress(addr)),
GasEstimator: toml.KeySpecificGasEstimator{
PriceMax: keySpecificPrice,
},
},
}
})
assert.Equal(t, chainSpecificPrice.String(), cfg3.EVM().GasEstimator().PriceMaxKey(addr).String())
})`
$DIR/core/chains/evm/config/config_test.go: `.GWei(1400)`
$DIR/core/chains/evm/config/config_test.go: `.GWei(1200)`
$DIR/core/chains/evm/config/config_test.go: `.NewTestChainScopedConfig(t, func(c *toml.EVMConfig) {
c.GasEstimator.PriceMax = chainSpecificPrice
c.KeySpecific = toml.KeySpecificConfig{
{Key: ptr(types.EIP55AddressFromAddress(addr)),
GasEstimator: toml.KeySpecificGasEstimator{
PriceMax: keySpecificPrice,
},
},
}
})`
$DIR/core/chains/evm/config/config_test.go: `.EIP55AddressFromAddress(addr)`
$DIR/core/chains/evm/config/config_test.go: `.Run("uses key-specific override value when set and lower than global config", func(t *testing.T) {
keySpecificPrice := assets.GWei(900)
cfg3 := testutils.NewTestChainScopedConfig(t, func(c *toml.EVMConfig) {
c.KeySpecific = toml.KeySpecificConfig{
{Key: ptr(types.EIP55AddressFromAddress(addr)),
GasEstimator: toml.KeySpecificGasEstimator{
PriceMax: keySpecificPrice,
},
},
}
})
assert.Equal(t, keySpecificPrice.String(), cfg3.EVM().GasEstimator().PriceMaxKey(addr).String())
})`
$DIR/core/chains/evm/config/config_test.go: `.GWei(900)`
$DIR/core/chains/evm/config/config_test.go: `.NewTestChainScopedConfig(t, func(c *toml.EVMConfig) {
c.KeySpecific = toml.KeySpecificConfig{
{Key: ptr(types.EIP55AddressFromAddress(addr)),
GasEstimator: toml.KeySpecificGasEstimator{
PriceMax: keySpecificPrice,
},
},
}
})`
$DIR/core/chains/evm/config/config_test.go: `.EIP55AddressFromAddress(addr)`
$DIR/core/chains/evm/config/config_test.go: `.Run("uses global value when higher than key-specific value", func(t *testing.T) {
keySpecificPrice := assets.GWei(1400)
chainSpecificPrice := assets.GWei(1200)
cfg3 := testutils.NewTestChainScopedConfig(t, func(c *toml.EVMConfig) {
c.GasEstimator.PriceMax = chainSpecificPrice
c.KeySpecific = toml.KeySpecificConfig{
{Key: ptr(types.EIP55AddressFromAddress(addr)),
GasEstimator: toml.KeySpecificGasEstimator{
PriceMax: keySpecificPrice,
},
},
}
})
assert.Equal(t, chainSpecificPrice.String(), cfg3.EVM().GasEstimator().PriceMaxKey(addr).String())
})`
$DIR/core/chains/evm/config/config_test.go: `.GWei(1400)`
$DIR/core/chains/evm/config/config_test.go: `.GWei(1200)`
$DIR/core/chains/evm/config/config_test.go: `.NewTestChainScopedConfig(t, func(c *toml.EVMConfig) {
c.GasEstimator.PriceMax = chainSpecificPrice
c.KeySpecific = toml.KeySpecificConfig{
{Key: ptr(types.EIP55AddressFromAddress(addr)),
GasEstimator: toml.KeySpecificGasEstimator{
PriceMax: keySpecificPrice,
},
},
}
})`
$DIR/core/chains/evm/config/config_test.go: `.EIP55AddressFromAddress(addr)`
$DIR/core/chains/evm/config/config_test.go: `.Run("uses global value when there is no key-specific price", func(t *testing.T) {
priceMax := assets.NewWeiI(rand.Int63())
unsetAddr := testutils.NewAddress()
cfg3 := testutils.NewTestChainScopedConfig(t, func(c *toml.EVMConfig) {
c.GasEstimator.PriceMax = priceMax
})
assert.Equal(t, priceMax.String(), cfg3.EVM().GasEstimator().PriceMaxKey(unsetAddr).String())
})`
$DIR/core/chains/evm/config/config_test.go: `.NewWeiI(rand.Int63())`
$DIR/core/chains/evm/config/config_test.go: `.Int63()`
$DIR/core/chains/evm/config/config_test.go: `.NewAddress()`
$DIR/core/chains/evm/config/config_test.go: `.NewTestChainScopedConfig(t, func(c *toml.EVMConfig) {
c.GasEstimator.PriceMax = priceMax
})`
$DIR/core/chains/evm/config/config_test.go: `.Run("LinkContractAddress", func(t *testing.T) {
t.Run("uses chain-specific default value when nothing is set", func(t *testing.T) {
assert.Equal(t, "", cfg.EVM().LinkContractAddress())
})
t.Run("uses chain-specific override value when that is set", func(t *testing.T) {
addr := testutils.NewAddress()
cfg3 := testutils.NewTestChainScopedConfig(t, func(c *toml.EVMConfig) {
c.LinkContractAddress = ptr(types.EIP55AddressFromAddress(addr))
})
assert.Equal(t, addr.String(), cfg3.EVM().LinkContractAddress())
})
})`
$DIR/core/chains/evm/config/config_test.go: `.Run("uses chain-specific default value when nothing is set", func(t *testing.T) {
assert.Equal(t, "", cfg.EVM().LinkContractAddress())
})`
$DIR/core/chains/evm/config/config_test.go: `.Run("uses chain-specific override value when that is set", func(t *testing.T) {
addr := testutils.NewAddress()
cfg3 := testutils.NewTestChainScopedConfig(t, func(c *toml.EVMConfig) {
c.LinkContractAddress = ptr(types.EIP55AddressFromAddress(addr))
})
assert.Equal(t, addr.String(), cfg3.EVM().LinkContractAddress())
})`
$DIR/core/chains/evm/config/config_test.go: `.NewAddress()`
$DIR/core/chains/evm/config/config_test.go: `.NewTestChainScopedConfig(t, func(c *toml.EVMConfig) {
c.LinkContractAddress = ptr(types.EIP55AddressFromAddress(addr))
})`
$DIR/core/chains/evm/config/config_test.go: `.EIP55AddressFromAddress(addr)`
$DIR/core/chains/evm/config/config_test.go: `.Run("uses chain-specific default value when nothing is set", func(t *testing.T) {
assert.Equal(t, "", cfg.EVM().OperatorFactoryAddress())
})`
$DIR/core/chains/evm/config/config_test.go: `.Run("uses chain-specific override value when that is set", func(t *testing.T) {
val := testutils.NewAddress()
cfg3 := testutils.NewTestChainScopedConfig(t, func(c *toml.EVMConfig) {
c.OperatorFactoryAddress = ptr(types.EIP55AddressFromAddress(val))
})
assert.Equal(t, val.String(), cfg3.EVM().OperatorFactoryAddress())
})`
$DIR/core/chains/evm/config/config_test.go: `.NewAddress()`
$DIR/core/chains/evm/config/config_test.go: `.NewTestChainScopedConfig(t, func(c *toml.EVMConfig) {
c.OperatorFactoryAddress = ptr(types.EIP55AddressFromAddress(val))
})`
$DIR/core/chains/evm/config/config_test.go: `.EIP55AddressFromAddress(val)`
$DIR/core/chains/evm/config/config_test.go: `.NewTestChainScopedConfig(t, nil)`
$DIR/core/chains/evm/config/config_test.go: `.EVM()`
$DIR/core/chains/evm/config/config_test.go: `.GasEstimator()`
$DIR/core/chains/evm/config/config_test.go: `.BlockHistory()`
$DIR/core/chains/evm/config/config_test.go: `.EIP1559FeeCapBufferBlocks()`
$DIR/core/chains/evm/config/config_test.go: `.NewTestChainScopedConfig(t, func(c *toml.EVMConfig) {
c.GasEstimator.PriceMax = assets.GWei(500)
})`
$DIR/core/chains/evm/config/config_test.go: `.GWei(500)`
$DIR/core/chains/evm/config/config_test.go: `.EVM()`
$DIR/core/chains/evm/config/config_test.go: `.GasEstimator()`
$DIR/core/chains/evm/config/config_test.go: `.NewWeiI(1)`
$DIR/core/chains/evm/config/config_test.go: `.TipCapMin()`
$DIR/core/chains/evm/config/config_test.go: `.NewTestChainScopedConfig(t, func(c *toml.EVMConfig) {
c.ChainID = (*ubig.Big)(big.NewInt(56))
})`
$DIR/core/chains/evm/config/config_test.go: `.NewInt(56)`
$DIR/core/chains/evm/config/config_test.go: `.EVM()`
$DIR/core/chains/evm/config/config_test.go: `.OCR()`
$DIR/core/chains/evm/config/config_test.go: `.DatabaseTimeout()`
$DIR/core/chains/evm/config/config_test.go: `.EVM()`
$DIR/core/chains/evm/config/config_test.go: `.OCR()`
$DIR/core/chains/evm/config/config_test.go: `.ContractTransmitterTransmitTimeout()`
$DIR/core/chains/evm/config/config_test.go: `.EVM()`
$DIR/core/chains/evm/config/config_test.go: `.OCR()`
$DIR/core/chains/evm/config/config_test.go: `.ObservationGracePeriod()`
$DIR/core/chains/evm/config/config_test.go: `.Run(tt.name, func(t *testing.T) {
t.Parallel()
config := testutils.NewTestChainScopedConfig(t, func(c *toml.EVMConfig) {
c.ChainID = ubig.NewI(tt.chainID)
})
assert.Equal(t, tt.expectedGasLimitDefault, config.EVM().GasEstimator().LimitDefault())
assert.Nil(t, config.EVM().GasEstimator().LimitJobType().OCR())
assert.Nil(t, config.EVM().GasEstimator().LimitJobType().DR())
assert.Nil(t, config.EVM().GasEstimator().LimitJobType().VRF())
assert.Nil(t, config.EVM().GasEstimator().LimitJobType().FM())
assert.Nil(t, config.EVM().GasEstimator().LimitJobType().Keeper())
assert.Equal(t, tt.expectedMinimumContractPayment, strings.TrimRight(config.EVM().MinContractPayment().Link(), "0"))
})`
$DIR/core/chains/evm/config/config_test.go: `.NewTestChainScopedConfig(t, func(c *toml.EVMConfig) {
c.ChainID = ubig.NewI(tt.chainID)
})`
$DIR/core/chains/evm/config/config_test.go: `.NewI(tt.chainID)`
$DIR/core/chains/evm/config/config_test.go: `.NewTestChainScopedConfig(t, nil)`
$DIR/core/chains/evm/config/config_test.go: `.EVM()`
$DIR/core/chains/evm/config/config_test.go: `.HeadTracker()`
$DIR/core/chains/evm/config/config_test.go: `.MaxAllowedFinalityDepth()`
$DIR/core/chains/evm/config/config_test.go: `.NewTestChainScopedConfig(t, nil)`
$DIR/core/chains/evm/config/config_test.go: `.EVM()`
$DIR/core/chains/evm/config/config_test.go: `.NodePool()`
$DIR/core/chains/evm/config/config_test.go: `.NodeIsSyncingEnabled()`
$DIR/core/chains/evm/config/config_test.go: `.NewTestChainScopedConfig(t, func(c *toml.EVMConfig) {
id := ubig.New(big.NewInt(rand.Int63()))
c.ChainID = id
c.NodePool = toml.NodePool{
Errors: toml.ClientErrors{
NonceTooLow: ptr("client error nonce too low"),
NonceTooHigh: ptr("client error nonce too high"),
ReplacementTransactionUnderpriced: ptr("client error replacement underpriced"),
LimitReached: ptr("client error limit reached"),
TransactionAlreadyInMempool: ptr("client error transaction already in mempool"),
TerminallyUnderpriced: ptr("client error terminally underpriced"),
InsufficientEth: ptr("client error insufficient eth"),
TxFeeExceedsCap: ptr("client error tx fee exceeds cap"),
L2FeeTooLow: ptr("client error l2 fee too low"),
L2FeeTooHigh: ptr("client error l2 fee too high"),
L2Full: ptr("client error l2 full"),
TransactionAlreadyMined: ptr("client error transaction already mined"),
Fatal: ptr("client error fatal"),
ServiceUnavailable: ptr("client error service unavailable"),
},
}
})`
$DIR/core/chains/evm/config/config_test.go: `.New(big.NewInt(rand.Int63()))`
$DIR/core/chains/evm/config/config_test.go: `.NewInt(rand.Int63())`
$DIR/core/chains/evm/config/config_test.go: `.Int63()`
$DIR/core/chains/evm/config/config_test.go: `.EVM()`
$DIR/core/chains/evm/config/config_test.go: `.NodePool()`
$DIR/core/chains/evm/config/config_test.go: `.Errors()`
$DIR/core/chains/evm/config/toml/config_test.go: `t.Run(fmt.Sprintf("chainID-%s", id), func(t *testing.T) {
evmCfg := &toml.EVMConfig{
ChainID: id,
Chain: toml.Defaults(id),
Nodes: toml.EVMNodes{{
Name: &name,
WSURL: config.MustParseURL("wss://foo.test/ws"),
HTTPURL: config.MustParseURL("http://foo.test"),
}},
}
assert.NoError(t, config.Validate(evmCfg))
})`
$DIR/core/chains/evm/config/toml/config_test.go: `.Run(fmt.Sprintf("chainID-%s", id), func(t *testing.T) {
evmCfg := &toml.EVMConfig{
ChainID: id,
Chain: toml.Defaults(id),
Nodes: toml.EVMNodes{{
Name: &name,
WSURL: config.MustParseURL("wss://foo.test/ws"),
HTTPURL: config.MustParseURL("http://foo.test"),
}},
}
assert.NoError(t, config.Validate(evmCfg))
})`
$DIR/core/chains/evm/config/toml/config_test.go: `.Sprintf("chainID-%s", id)`
$DIR/core/chains/evm/config/toml/config_test.go: `.Defaults(id)`
$DIR/core/chains/evm/config/toml/config_test.go: `.MustParseURL("wss://foo.test/ws")`
$DIR/core/chains/evm/config/toml/config_test.go: `.MustParseURL("http://foo.test")`
$DIR/core/chains/evm/forwarders/forwarder_manager_test.go: `t.Cleanup(func() { ec.Close() })`
$DIR/core/chains/evm/forwarders/forwarder_manager_test.go: `ec.Commit()`
$DIR/core/chains/evm/forwarders/forwarder_manager_test.go: `_, err = forwarder.SetAuthorizedSenders(owner, []common.Address{owner.From})`
$DIR/core/chains/evm/forwarders/forwarder_manager_test.go: `ec.Commit()`
$DIR/core/chains/evm/forwarders/forwarder_manager_test.go: `fwdMgr.ORM = forwarders.NewORM(db)`
$DIR/core/chains/evm/forwarders/forwarder_manager_test.go: `err = fwdMgr.Close()`
$DIR/core/chains/evm/forwarders/forwarder_manager_test.go: `cleanupCalled = true`
$DIR/core/chains/evm/forwarders/forwarder_manager_test.go: `err = fwdMgr.ORM.DeleteForwarder(ctx, fwd.ID, cleanup)`
$DIR/core/chains/evm/forwarders/forwarder_manager_test.go: `t.Cleanup(func() { ec.Close() })`
$DIR/core/chains/evm/forwarders/forwarder_manager_test.go: `ec.Commit()`
$DIR/core/chains/evm/forwarders/forwarder_manager_test.go: `fwdMgr.ORM = forwarders.NewORM(db)`
$DIR/core/chains/evm/forwarders/forwarder_manager_test.go: `_, err = fwdMgr.ORM.CreateForwarder(ctx, forwarderAddr, ubig.Big(*testutils.FixtureChainID))`
$DIR/core/chains/evm/forwarders/forwarder_manager_test.go: `err = fwdMgr.Start(testutils.Context(t))`
$DIR/core/chains/evm/forwarders/forwarder_manager_test.go: `err = fwdMgr.Close()`
$DIR/core/chains/evm/forwarders/forwarder_manager_test.go: `t.Cleanup(func() { ec.Close() })`
$DIR/core/chains/evm/forwarders/forwarder_manager_test.go: `ec.Commit()`
$DIR/core/chains/evm/forwarders/forwarder_manager_test.go: `ec.Commit()`
$DIR/core/chains/evm/forwarders/forwarder_manager_test.go: `fwdMgr.ORM = forwarders.NewORM(db)`
$DIR/core/chains/evm/forwarders/forwarder_manager_test.go: `_, err = fwdMgr.ORM.CreateForwarder(ctx, forwarderAddr, ubig.Big(*testutils.FixtureChainID))`
$DIR/core/chains/evm/forwarders/forwarder_manager_test.go: `fwdMgr = forwarders.NewFwdMgr(db, evmClient, lp, lggr, evmcfg.EVM())`
$DIR/core/chains/evm/forwarders/forwarder_manager_test.go: `_, err = forwarder.SetAuthorizedSenders(owner, []common.Address{owner.From})`
$DIR/core/chains/evm/forwarders/forwarder_manager_test.go: `ec.Commit()`
$DIR/core/chains/evm/forwarders/forwarder_manager_test.go: `addr, err = fwdMgr.ForwarderForOCR2Feeds(ctx, owner.From, ocr2Address)`
$DIR/core/chains/evm/forwarders/forwarder_manager_test.go: `_, err = ocr2.SetConfig(owner,
[]common.Address{testutils.NewAddress(), testutils.NewAddress(), testutils.NewAddress(), testutils.NewAddress()},
[]common.Address{forwarderAddr, testutils.NewAddress(), testutils.NewAddress(), testutils.NewAddress()},
1,
onchainConfig,
0,
[]byte{})`
$DIR/core/chains/evm/forwarders/forwarder_manager_test.go: `ec.Commit()`
$DIR/core/chains/evm/forwarders/forwarder_manager_test.go: `fwdMgr = forwarders.NewFwdMgr(db, evmClient, lp, lggr, evmcfg.EVM())`
$DIR/core/chains/evm/forwarders/forwarder_manager_test.go: `addr, err = fwdMgr.ForwarderForOCR2Feeds(ctx, owner.From, ocr2Address)`
$DIR/core/chains/evm/forwarders/forwarder_manager_test.go: `.Test(t)`
$DIR/core/chains/evm/forwarders/forwarder_manager_test.go: `.NewSqlxDB(t)`
$DIR/core/chains/evm/forwarders/forwarder_manager_test.go: `.NewTestGeneralConfig(t)`
$DIR/core/chains/evm/forwarders/forwarder_manager_test.go: `.NewChainScopedConfig(t, cfg)`
$DIR/core/chains/evm/forwarders/forwarder_manager_test.go: `.MustNewSimTransactor(t)`
$DIR/core/chains/evm/forwarders/forwarder_manager_test.go: `.Context(t)`
$DIR/core/chains/evm/forwarders/forwarder_manager_test.go: `.NewSimulatedBackend(map[common.Address]core.GenesisAccount{
owner.From: {
Balance: big.NewInt(0).Mul(big.NewInt(10), big.NewInt(1e18)),
},
}, 10e6)`
$DIR/core/chains/evm/forwarders/forwarder_manager_test.go: `.NewInt(0)`
$DIR/core/chains/evm/forwarders/forwarder_manager_test.go: `.Mul(big.NewInt(10), big.NewInt(1e18))`
$DIR/core/chains/evm/forwarders/forwarder_manager_test.go: `.NewInt(10)`
$DIR/core/chains/evm/forwarders/forwarder_manager_test.go: `.NewInt(1e18)`
$DIR/core/chains/evm/forwarders/forwarder_manager_test.go: `.Cleanup(func() { ec.Close() })`
$DIR/core/chains/evm/forwarders/forwarder_manager_test.go: `.HexToAddress("0x01BE23585060835E02B77ef475b0Cc51aA1e0709")`
$DIR/core/chains/evm/forwarders/forwarder_manager_test.go: `.DeployOperator(owner, ec, linkAddr, owner.From)`
$DIR/core/chains/evm/forwarders/forwarder_manager_test.go: `.DeployAuthorizedForwarder(owner, ec, linkAddr, owner.From, operatorAddr, []byte{})`
$DIR/core/chains/evm/forwarders/forwarder_manager_test.go: `.Commit()`
$DIR/core/chains/evm/forwarders/forwarder_manager_test.go: `.SetAuthorizedSenders(owner, []common.Address{owner.From})`
$DIR/core/chains/evm/forwarders/forwarder_manager_test.go: `.Commit()`
$DIR/core/chains/evm/forwarders/forwarder_manager_test.go: `.GetAuthorizedSenders(nil)`
$DIR/core/chains/evm/forwarders/forwarder_manager_test.go: `.NewSimulatedBackendClient(t, ec, testutils.FixtureChainID)`
$DIR/core/chains/evm/forwarders/forwarder_manager_test.go: `.NewLogPoller(logpoller.NewORM(testutils.FixtureChainID, db, lggr), evmClient, lggr, lpOpts)`
$DIR/core/chains/evm/forwarders/forwarder_manager_test.go: `.NewORM(testutils.FixtureChainID, db, lggr)`
$DIR/core/chains/evm/forwarders/forwarder_manager_test.go: `.NewFwdMgr(db, evmClient, lp, lggr, evmcfg.EVM())`
$DIR/core/chains/evm/forwarders/forwarder_manager_test.go: `.EVM()`
$DIR/core/chains/evm/forwarders/forwarder_manager_test.go: `.NewORM(db)`
$DIR/core/chains/evm/forwarders/forwarder_manager_test.go: `.ORM.CreateForwarder(ctx, forwarderAddr, ubig.Big(*testutils.FixtureChainID))`
$DIR/core/chains/evm/forwarders/forwarder_manager_test.go: `.Big(*testutils.FixtureChainID)`
$DIR/core/chains/evm/forwarders/forwarder_manager_test.go: `.ORM.FindForwardersByChain(ctx, ubig.Big(*testutils.FixtureChainID))`
$DIR/core/chains/evm/forwarders/forwarder_manager_test.go: `.Big(*testutils.FixtureChainID)`
$DIR/core/chains/evm/forwarders/forwarder_manager_test.go: `.ForwarderFor(ctx, owner.From)`
$DIR/core/chains/evm/forwarders/forwarder_manager_test.go: `.ORM.DeleteForwarder(ctx, fwd.ID, cleanup)`
$DIR/core/chains/evm/forwarders/forwarder_manager_test.go: `.Test(t)`
$DIR/core/chains/evm/forwarders/forwarder_manager_test.go: `.NewSqlxDB(t)`
$DIR/core/chains/evm/forwarders/forwarder_manager_test.go: `.Context(t)`
$DIR/core/chains/evm/forwarders/forwarder_manager_test.go: `.NewTestGeneralConfig(t)`
$DIR/core/chains/evm/forwarders/forwarder_manager_test.go: `.NewChainScopedConfig(t, cfg)`
$DIR/core/chains/evm/forwarders/forwarder_manager_test.go: `.MustNewSimTransactor(t)`
$DIR/core/chains/evm/forwarders/forwarder_manager_test.go: `.NewSimulatedBackend(map[common.Address]core.GenesisAccount{
owner.From: {
Balance: big.NewInt(0).Mul(big.NewInt(10), big.NewInt(1e18)),
},
}, 10e6)`
$DIR/core/chains/evm/forwarders/forwarder_manager_test.go: `.NewInt(0)`
$DIR/core/chains/evm/forwarders/forwarder_manager_test.go: `.Mul(big.NewInt(10), big.NewInt(1e18))`
$DIR/core/chains/evm/forwarders/forwarder_manager_test.go: `.NewInt(10)`
$DIR/core/chains/evm/forwarders/forwarder_manager_test.go: `.NewInt(1e18)`
$DIR/core/chains/evm/forwarders/forwarder_manager_test.go: `.Cleanup(func() { ec.Close() })`
$DIR/core/chains/evm/forwarders/forwarder_manager_test.go: `.HexToAddress("0x01BE23585060835E02B77ef475b0Cc51aA1e0709")`
$DIR/core/chains/evm/forwarders/forwarder_manager_test.go: `.DeployOperator(owner, ec, linkAddr, owner.From)`
$DIR/core/chains/evm/forwarders/forwarder_manager_test.go: `.DeployAuthorizedForwarder(owner, ec, linkAddr, owner.From, operatorAddr, []byte{})`
$DIR/core/chains/evm/forwarders/forwarder_manager_test.go: `.Commit()`
$DIR/core/chains/evm/forwarders/forwarder_manager_test.go: `.NewSimulatedBackendClient(t, ec, testutils.FixtureChainID)`
$DIR/core/chains/evm/forwarders/forwarder_manager_test.go: `.NewLogPoller(logpoller.NewORM(testutils.FixtureChainID, db, lggr), evmClient, lggr, lpOpts)`
$DIR/core/chains/evm/forwarders/forwarder_manager_test.go: `.NewORM(testutils.FixtureChainID, db, lggr)`
$DIR/core/chains/evm/forwarders/forwarder_manager_test.go: `.NewFwdMgr(db, evmClient, lp, lggr, evmcfg.EVM())`
$DIR/core/chains/evm/forwarders/forwarder_manager_test.go: `.EVM()`
$DIR/core/chains/evm/forwarders/forwarder_manager_test.go: `.NewORM(db)`
$DIR/core/chains/evm/forwarders/forwarder_manager_test.go: `.ORM.CreateForwarder(ctx, forwarderAddr, ubig.Big(*testutils.FixtureChainID))`
$DIR/core/chains/evm/forwarders/forwarder_manager_test.go: `.Big(*testutils.FixtureChainID)`
$DIR/core/chains/evm/forwarders/forwarder_manager_test.go: `.ORM.FindForwardersByChain(ctx, ubig.Big(*testutils.FixtureChainID))`
$DIR/core/chains/evm/forwarders/forwarder_manager_test.go: `.Big(*testutils.FixtureChainID)`
$DIR/core/chains/evm/forwarders/forwarder_manager_test.go: `.Start(testutils.Context(t))`
$DIR/core/chains/evm/forwarders/forwarder_manager_test.go: `.Context(t)`
$DIR/core/chains/evm/forwarders/forwarder_manager_test.go: `.ForwarderFor(ctx, owner.From)`
$DIR/core/chains/evm/forwarders/forwarder_manager_test.go: `.Test(t)`
$DIR/core/chains/evm/forwarders/forwarder_manager_test.go: `.NewSqlxDB(t)`
$DIR/core/chains/evm/forwarders/forwarder_manager_test.go: `.Context(t)`
$DIR/core/chains/evm/forwarders/forwarder_manager_test.go: `.NewTestGeneralConfig(t)`
$DIR/core/chains/evm/forwarders/forwarder_manager_test.go: `.NewChainScopedConfig(t, cfg)`
$DIR/core/chains/evm/forwarders/forwarder_manager_test.go: `.MustNewSimTransactor(t)`
$DIR/core/chains/evm/forwarders/forwarder_manager_test.go: `.NewSimulatedBackend(map[common.Address]core.GenesisAccount{
owner.From: {
Balance: big.NewInt(0).Mul(big.NewInt(10), big.NewInt(1e18)),
},
}, 10e6)`
$DIR/core/chains/evm/forwarders/forwarder_manager_test.go: `.NewInt(0)`
$DIR/core/chains/evm/forwarders/forwarder_manager_test.go: `.Mul(big.NewInt(10), big.NewInt(1e18))`
$DIR/core/chains/evm/forwarders/forwarder_manager_test.go: `.NewInt(10)`
$DIR/core/chains/evm/forwarders/forwarder_manager_test.go: `.NewInt(1e18)`
$DIR/core/chains/evm/forwarders/forwarder_manager_test.go: `.Cleanup(func() { ec.Close() })`
$DIR/core/chains/evm/forwarders/forwarder_manager_test.go: `.HexToAddress("0x01BE23585060835E02B77ef475b0Cc51aA1e0709")`
$DIR/core/chains/evm/forwarders/forwarder_manager_test.go: `.DeployOperator(owner, ec, linkAddr, owner.From)`
$DIR/core/chains/evm/forwarders/forwarder_manager_test.go: `.DeployAuthorizedForwarder(owner, ec, linkAddr, owner.From, operatorAddr, []byte{})`
$DIR/core/chains/evm/forwarders/forwarder_manager_test.go: `.Commit()`
$DIR/core/chains/evm/forwarders/forwarder_manager_test.go: `.DeploySimpleWriteAccessController(owner, ec)`
$DIR/core/chains/evm/forwarders/forwarder_manager_test.go: `.DeployOCR2Aggregator(
owner,
ec,
linkAddr,
big.NewInt(0),
big.NewInt(10),
accessAddress,
accessAddress,
9,
"TEST",
)`
$DIR/core/chains/evm/forwarders/forwarder_manager_test.go: `.NewInt(0)`
$DIR/core/chains/evm/forwarders/forwarder_manager_test.go: `.NewInt(10)`
$DIR/core/chains/evm/forwarders/forwarder_manager_test.go: `.Commit()`
$DIR/core/chains/evm/forwarders/forwarder_manager_test.go: `.NewSimulatedBackendClient(t, ec, testutils.FixtureChainID)`
$DIR/core/chains/evm/forwarders/forwarder_manager_test.go: `.NewLogPoller(logpoller.NewORM(testutils.FixtureChainID, db, lggr), evmClient, lggr, lpOpts)`
$DIR/core/chains/evm/forwarders/forwarder_manager_test.go: `.NewORM(testutils.FixtureChainID, db, lggr)`
$DIR/core/chains/evm/forwarders/forwarder_manager_test.go: `.NewFwdMgr(db, evmClient, lp, lggr, evmcfg.EVM())`
$DIR/core/chains/evm/forwarders/forwarder_manager_test.go: `.EVM()`
$DIR/core/chains/evm/forwarders/forwarder_manager_test.go: `.NewORM(db)`
$DIR/core/chains/evm/forwarders/forwarder_manager_test.go: `.ORM.CreateForwarder(ctx, forwarderAddr, ubig.Big(*testutils.FixtureChainID))`
$DIR/core/chains/evm/forwarders/forwarder_manager_test.go: `.Big(*testutils.FixtureChainID)`
$DIR/core/chains/evm/forwarders/forwarder_manager_test.go: `.ORM.FindForwardersByChain(ctx, ubig.Big(*testutils.FixtureChainID))`
$DIR/core/chains/evm/forwarders/forwarder_manager_test.go: `.Big(*testutils.FixtureChainID)`
$DIR/core/chains/evm/forwarders/forwarder_manager_test.go: `.NewFwdMgr(db, evmClient, lp, lggr, evmcfg.EVM())`
$DIR/core/chains/evm/forwarders/forwarder_manager_test.go: `.EVM()`
$DIR/core/chains/evm/forwarders/forwarder_manager_test.go: `.ForwarderForOCR2Feeds(ctx, owner.From, ocr2Address)`
$DIR/core/chains/evm/forwarders/forwarder_manager_test.go: `.SetAuthorizedSenders(owner, []common.Address{owner.From})`
$DIR/core/chains/evm/forwarders/forwarder_manager_test.go: `.Commit()`
$DIR/core/chains/evm/forwarders/forwarder_manager_test.go: `.GetAuthorizedSenders(&bind.CallOpts{Context: ctx})`
$DIR/core/chains/evm/forwarders/forwarder_manager_test.go: `.ForwarderForOCR2Feeds(ctx, owner.From, ocr2Address)`
$DIR/core/chains/evm/forwarders/forwarder_manager_test.go: `.GenerateDefaultOCR2OnchainConfig(big.NewInt(0), big.NewInt(10))`
$DIR/core/chains/evm/forwarders/forwarder_manager_test.go: `.NewInt(0)`
$DIR/core/chains/evm/forwarders/forwarder_manager_test.go: `.NewInt(10)`
$DIR/core/chains/evm/forwarders/forwarder_manager_test.go: `.SetConfig(owner,
[]common.Address{testutils.NewAddress(), testutils.NewAddress(), testutils.NewAddress(), testutils.NewAddress()},
[]common.Address{forwarderAddr, testutils.NewAddress(), testutils.NewAddress(), testutils.NewAddress()},
1,
onchainConfig,
0,
[]byte{})`
$DIR/core/chains/evm/forwarders/forwarder_manager_test.go: `.NewAddress()`
$DIR/core/chains/evm/forwarders/forwarder_manager_test.go: `.NewAddress()`
$DIR/core/chains/evm/forwarders/forwarder_manager_test.go: `.NewAddress()`
$DIR/core/chains/evm/forwarders/forwarder_manager_test.go: `.NewAddress()`
$DIR/core/chains/evm/forwarders/forwarder_manager_test.go: `.NewAddress()`
$DIR/core/chains/evm/forwarders/forwarder_manager_test.go: `.NewAddress()`
$DIR/core/chains/evm/forwarders/forwarder_manager_test.go: `.NewAddress()`
$DIR/core/chains/evm/forwarders/forwarder_manager_test.go: `.Commit()`
$DIR/core/chains/evm/forwarders/forwarder_manager_test.go: `.GetTransmitters(&bind.CallOpts{Context: ctx})`
$DIR/core/chains/evm/forwarders/forwarder_manager_test.go: `.NewFwdMgr(db, evmClient, lp, lggr, evmcfg.EVM())`
$DIR/core/chains/evm/forwarders/forwarder_manager_test.go: `.EVM()`
$DIR/core/chains/evm/forwarders/forwarder_manager_test.go: `.ForwarderForOCR2Feeds(ctx, owner.From, ocr2Address)`
$DIR/core/chains/evm/forwarders/orm_test.go: `cleanupCalled++`
$DIR/core/chains/evm/forwarders/orm_test.go: `err = orm.DeleteForwarder(ctx, fwd.ID, testCleanupFn)`
$DIR/core/chains/evm/forwarders/orm_test.go: `.NewSqlxDB(t)`
$DIR/core/chains/evm/forwarders/orm_test.go: `.NewAddress()`
$DIR/core/chains/evm/forwarders/orm_test.go: `.Context(t)`
$DIR/core/chains/evm/forwarders/orm_test.go: `.CreateForwarder(ctx, addr, *big.New(chainID))`
$DIR/core/chains/evm/forwarders/orm_test.go: `.New(chainID)`
$DIR/core/chains/evm/forwarders/orm_test.go: `.New("error during cleanup")`
$DIR/core/chains/evm/forwarders/orm_test.go: `.DeleteForwarder(ctx, fwd.ID, testCleanupFn)`
$DIR/core/chains/evm/gas/arbitrum_estimator_test.go: `t.Run("calling GetLegacyGas on unstarted estimator returns error", func(t *testing.T) {
feeEstimatorClient := mocks.NewFeeEstimatorClient(t)
l1Oracle := rollups.NewArbitrumL1GasOracle(logger.Test(t), feeEstimatorClient)
o := gas.NewArbitrumEstimator(logger.Test(t), &arbConfig{}, feeEstimatorClient, l1Oracle)
_, _, err := o.GetLegacyGas(tests.Context(t), calldata, gasLimit, maxGasPrice)
assert.EqualError(t, err, "estimator is not started")
})`
$DIR/core/chains/evm/gas/arbitrum_estimator_test.go: `zeros.Write(common.BigToHash(big.NewInt(0)).Bytes())`
$DIR/core/chains/evm/gas/arbitrum_estimator_test.go: `zeros.Write(common.BigToHash(big.NewInt(0)).Bytes())`
$DIR/core/chains/evm/gas/arbitrum_estimator_test.go: `zeros.Write(common.BigToHash(big.NewInt(123455)).Bytes())`
$DIR/core/chains/evm/gas/arbitrum_estimator_test.go: `t.Run("calling GetLegacyGas on started estimator returns estimates", func(t *testing.T) {
feeEstimatorClient := mocks.NewFeeEstimatorClient(t)
l1Oracle := rollups.NewArbitrumL1GasOracle(logger.Test(t), feeEstimatorClient)
feeEstimatorClient.On("CallContext", mock.Anything, mock.Anything, "eth_gasPrice").Return(nil).Run(func(args mock.Arguments) {
res := args.Get(1).(*hexutil.Big)
(*big.Int)(res).SetInt64(42)
})
feeEstimatorClient.On("CallContract", mock.Anything, mock.IsType(ethereum.CallMsg{}), mock.IsType(&big.Int{})).Run(func(args mock.Arguments) {
callMsg := args.Get(1).(ethereum.CallMsg)
blockNumber := args.Get(2).(*big.Int)
assert.Equal(t, rollups.ArbGasInfoAddress, callMsg.To.String())
assert.Equal(t, rollups.ArbGasInfo_getPricesInArbGas, fmt.Sprintf("%x", callMsg.Data))
assert.Equal(t, big.NewInt(-1), blockNumber)
}).Return(zeros.Bytes(), nil)
o := gas.NewArbitrumEstimator(logger.Test(t), &arbConfig{v: maxGasLimit, bumpPercent: bumpPercent, bumpMin: bumpMin}, feeEstimatorClient, l1Oracle)
servicetest.RunHealthy(t, o)
gasPrice, chainSpecificGasLimit, err := o.GetLegacyGas(tests.Context(t), calldata, gasLimit, maxGasPrice)
require.NoError(t, err)
// Expected price for a standard l2_suggested_estimator would be 42, but we add a fixed gasPriceBufferPercentage.
assert.Equal(t, assets.NewWeiI(42).AddPercentage(gasPriceBufferPercentage), gasPrice)
assert.Equal(t, gasLimit, chainSpecificGasLimit)
})`
$DIR/core/chains/evm/gas/arbitrum_estimator_test.go: `feeEstimatorClient.On("CallContext", mock.Anything, mock.Anything, "eth_gasPrice").Return(nil).Run(func(args mock.Arguments) {
res := args.Get(1).(*hexutil.Big)
(*big.Int)(res).SetInt64(42)
})`
$DIR/core/chains/evm/gas/arbitrum_estimator_test.go: `(*big.Int)(res).SetInt64(42)`
$DIR/core/chains/evm/gas/arbitrum_estimator_test.go: `feeEstimatorClient.On("CallContract", mock.Anything, mock.IsType(ethereum.CallMsg{}), mock.IsType(&big.Int{})).Run(func(args mock.Arguments) {
callMsg := args.Get(1).(ethereum.CallMsg)
blockNumber := args.Get(2).(*big.Int)
assert.Equal(t, rollups.ArbGasInfoAddress, callMsg.To.String())
assert.Equal(t, rollups.ArbGasInfo_getPricesInArbGas, fmt.Sprintf("%x", callMsg.Data))
assert.Equal(t, big.NewInt(-1), blockNumber)
}).Return(zeros.Bytes(), nil)`
$DIR/core/chains/evm/gas/arbitrum_estimator_test.go: `servicetest.RunHealthy(t, o)`
$DIR/core/chains/evm/gas/arbitrum_estimator_test.go: `t.Run("gas price is lower than user specified max gas price", func(t *testing.T) {
feeEstimatorClient := mocks.NewFeeEstimatorClient(t)
l1Oracle := rollups.NewArbitrumL1GasOracle(logger.Test(t), feeEstimatorClient)
o := gas.NewArbitrumEstimator(logger.Test(t), &arbConfig{}, feeEstimatorClient, l1Oracle)
feeEstimatorClient.On("CallContext", mock.Anything, mock.Anything, "eth_gasPrice").Return(nil).Run(func(args mock.Arguments) {
res := args.Get(1).(*hexutil.Big)
(*big.Int)(res).SetInt64(42)
})
feeEstimatorClient.On("CallContract", mock.Anything, mock.IsType(ethereum.CallMsg{}), mock.IsType(&big.Int{})).Run(func(args mock.Arguments) {
callMsg := args.Get(1).(ethereum.CallMsg)
blockNumber := args.Get(2).(*big.Int)
assert.Equal(t, rollups.ArbGasInfoAddress, callMsg.To.String())
assert.Equal(t, rollups.ArbGasInfo_getPricesInArbGas, fmt.Sprintf("%x", callMsg.Data))
assert.Equal(t, big.NewInt(-1), blockNumber)
}).Return(zeros.Bytes(), nil)
servicetest.RunHealthy(t, o)
gasPrice, chainSpecificGasLimit, err := o.GetLegacyGas(tests.Context(t), calldata, gasLimit, assets.NewWeiI(40))
require.Error(t, err)
assert.EqualError(t, err, "estimated gas price: 42 wei is greater than the maximum gas price configured: 40 wei")
assert.Nil(t, gasPrice)
assert.Equal(t, uint64(0), chainSpecificGasLimit)
})`
$DIR/core/chains/evm/gas/arbitrum_estimator_test.go: `feeEstimatorClient.On("CallContext", mock.Anything, mock.Anything, "eth_gasPrice").Return(nil).Run(func(args mock.Arguments) {
res := args.Get(1).(*hexutil.Big)
(*big.Int)(res).SetInt64(42)
})`
$DIR/core/chains/evm/gas/arbitrum_estimator_test.go: `(*big.Int)(res).SetInt64(42)`
$DIR/core/chains/evm/gas/arbitrum_estimator_test.go: `feeEstimatorClient.On("CallContract", mock.Anything, mock.IsType(ethereum.CallMsg{}), mock.IsType(&big.Int{})).Run(func(args mock.Arguments) {
callMsg := args.Get(1).(ethereum.CallMsg)
blockNumber := args.Get(2).(*big.Int)
assert.Equal(t, rollups.ArbGasInfoAddress, callMsg.To.String())
assert.Equal(t, rollups.ArbGasInfo_getPricesInArbGas, fmt.Sprintf("%x", callMsg.Data))
assert.Equal(t, big.NewInt(-1), blockNumber)
}).Return(zeros.Bytes(), nil)`
$DIR/core/chains/evm/gas/arbitrum_estimator_test.go: `servicetest.RunHealthy(t, o)`
$DIR/core/chains/evm/gas/arbitrum_estimator_test.go: `t.Run("gas price is lower than global max gas price", func(t *testing.T) {
feeEstimatorClient := mocks.NewFeeEstimatorClient(t)
l1Oracle := rollups.NewArbitrumL1GasOracle(logger.Test(t), feeEstimatorClient)
o := gas.NewArbitrumEstimator(logger.Test(t), &arbConfig{}, feeEstimatorClient, l1Oracle)
feeEstimatorClient.On("CallContext", mock.Anything, mock.Anything, "eth_gasPrice").Return(nil).Run(func(args mock.Arguments) {
res := args.Get(1).(*hexutil.Big)
(*big.Int)(res).SetInt64(120)
})
feeEstimatorClient.On("CallContract", mock.Anything, mock.IsType(ethereum.CallMsg{}), mock.IsType(&big.Int{})).Run(func(args mock.Arguments) {
callMsg := args.Get(1).(ethereum.CallMsg)
blockNumber := args.Get(2).(*big.Int)
assert.Equal(t, rollups.ArbGasInfoAddress, callMsg.To.String())
assert.Equal(t, rollups.ArbGasInfo_getPricesInArbGas, fmt.Sprintf("%x", callMsg.Data))
assert.Equal(t, big.NewInt(-1), blockNumber)
}).Return(zeros.Bytes(), nil)
servicetest.RunHealthy(t, o)
gasPrice, chainSpecificGasLimit, err := o.GetLegacyGas(tests.Context(t), calldata, gasLimit, assets.NewWeiI(110))
assert.EqualError(t, err, "estimated gas price: 120 wei is greater than the maximum gas price configured: 110 wei")
assert.Nil(t, gasPrice)
assert.Equal(t, uint64(0), chainSpecificGasLimit)
})`
$DIR/core/chains/evm/gas/arbitrum_estimator_test.go: `feeEstimatorClient.On("CallContext", mock.Anything, mock.Anything, "eth_gasPrice").Return(nil).Run(func(args mock.Arguments) {
res := args.Get(1).(*hexutil.Big)
(*big.Int)(res).SetInt64(120)
})`
$DIR/core/chains/evm/gas/arbitrum_estimator_test.go: `(*big.Int)(res).SetInt64(120)`
$DIR/core/chains/evm/gas/arbitrum_estimator_test.go: `feeEstimatorClient.On("CallContract", mock.Anything, mock.IsType(ethereum.CallMsg{}), mock.IsType(&big.Int{})).Run(func(args mock.Arguments) {
callMsg := args.Get(1).(ethereum.CallMsg)
blockNumber := args.Get(2).(*big.Int)
assert.Equal(t, rollups.ArbGasInfoAddress, callMsg.To.String())
assert.Equal(t, rollups.ArbGasInfo_getPricesInArbGas, fmt.Sprintf("%x", callMsg.Data))
assert.Equal(t, big.NewInt(-1), blockNumber)
}).Return(zeros.Bytes(), nil)`
$DIR/core/chains/evm/gas/arbitrum_estimator_test.go: `servicetest.RunHealthy(t, o)`
$DIR/core/chains/evm/gas/arbitrum_estimator_test.go: `t.Run("calling BumpLegacyGas on unstarted arbitrum estimator returns error", func(t *testing.T) {
feeEstimatorClient := mocks.NewFeeEstimatorClient(t)
l1Oracle := rollups.NewArbitrumL1GasOracle(logger.Test(t), feeEstimatorClient)
o := gas.NewArbitrumEstimator(logger.Test(t), &arbConfig{}, feeEstimatorClient, l1Oracle)
_, _, err := o.BumpLegacyGas(tests.Context(t), assets.NewWeiI(42), gasLimit, assets.NewWeiI(10), nil)
assert.EqualError(t, err, "estimator is not started")
})`
$DIR/core/chains/evm/gas/arbitrum_estimator_test.go: `t.Run("calling GetLegacyGas on started estimator if initial call failed returns error", func(t *testing.T) {
feeEstimatorClient := mocks.NewFeeEstimatorClient(t)
l1Oracle := rollups.NewArbitrumL1GasOracle(logger.Test(t), feeEstimatorClient)
o := gas.NewArbitrumEstimator(logger.Test(t), &arbConfig{}, feeEstimatorClient, l1Oracle)
feeEstimatorClient.On("CallContext", mock.Anything, mock.Anything, "eth_gasPrice").Return(pkgerrors.New("kaboom"))
feeEstimatorClient.On("CallContract", mock.Anything, mock.IsType(ethereum.CallMsg{}), mock.IsType(&big.Int{})).Run(func(args mock.Arguments) {
callMsg := args.Get(1).(ethereum.CallMsg)
blockNumber := args.Get(2).(*big.Int)
assert.Equal(t, rollups.ArbGasInfoAddress, callMsg.To.String())
assert.Equal(t, rollups.ArbGasInfo_getPricesInArbGas, fmt.Sprintf("%x", callMsg.Data))
assert.Equal(t, big.NewInt(-1), blockNumber)
}).Return(zeros.Bytes(), nil)
servicetest.RunHealthy(t, o)
_, _, err := o.GetLegacyGas(tests.Context(t), calldata, gasLimit, maxGasPrice)
assert.EqualError(t, err, "failed to estimate gas; gas price not set")
})`
$DIR/core/chains/evm/gas/arbitrum_estimator_test.go: `feeEstimatorClient.On("CallContext", mock.Anything, mock.Anything, "eth_gasPrice").Return(pkgerrors.New("kaboom"))`
$DIR/core/chains/evm/gas/arbitrum_estimator_test.go: `feeEstimatorClient.On("CallContract", mock.Anything, mock.IsType(ethereum.CallMsg{}), mock.IsType(&big.Int{})).Run(func(args mock.Arguments) {
callMsg := args.Get(1).(ethereum.CallMsg)
blockNumber := args.Get(2).(*big.Int)
assert.Equal(t, rollups.ArbGasInfoAddress, callMsg.To.String())
assert.Equal(t, rollups.ArbGasInfo_getPricesInArbGas, fmt.Sprintf("%x", callMsg.Data))
assert.Equal(t, big.NewInt(-1), blockNumber)
}).Return(zeros.Bytes(), nil)`
$DIR/core/chains/evm/gas/arbitrum_estimator_test.go: `servicetest.RunHealthy(t, o)`
$DIR/core/chains/evm/gas/arbitrum_estimator_test.go: `t.Run("calling GetDynamicFee always returns error", func(t *testing.T) {
feeEstimatorClient := mocks.NewFeeEstimatorClient(t)
l1Oracle := rollups.NewArbitrumL1GasOracle(logger.Test(t), feeEstimatorClient)
o := gas.NewArbitrumEstimator(logger.Test(t), &arbConfig{}, feeEstimatorClient, l1Oracle)
_, err := o.GetDynamicFee(tests.Context(t), maxGasPrice)
assert.EqualError(t, err, "dynamic fees are not implemented for this estimator")
})`
$DIR/core/chains/evm/gas/arbitrum_estimator_test.go: `t.Run("calling BumpDynamicFee always returns error", func(t *testing.T) {
feeEstimatorClient := mocks.NewFeeEstimatorClient(t)
l1Oracle := rollups.NewArbitrumL1GasOracle(logger.Test(t), feeEstimatorClient)
o := gas.NewArbitrumEstimator(logger.Test(t), &arbConfig{}, feeEstimatorClient, l1Oracle)
fee := gas.DynamicFee{
FeeCap: assets.NewWeiI(42),
TipCap: assets.NewWeiI(5),
}
_, err := o.BumpDynamicFee(tests.Context(t), fee, maxGasPrice, nil)
assert.EqualError(t, err, "dynamic fees are not implemented for this estimator")
})`
$DIR/core/chains/evm/gas/arbitrum_estimator_test.go: `t.Run("limit computes", func(t *testing.T) {
feeEstimatorClient := mocks.NewFeeEstimatorClient(t)
l1Oracle := rollups.NewArbitrumL1GasOracle(logger.Test(t), feeEstimatorClient)
feeEstimatorClient.On("CallContext", mock.Anything, mock.Anything, "eth_gasPrice").Return(nil).Run(func(args mock.Arguments) {
res := args.Get(1).(*hexutil.Big)
(*big.Int)(res).SetInt64(42)
})
const (
perL2Tx = 50_000
perL1Calldata = 10_000
)
var expLimit = gasLimit + perL2Tx + perL1Calldata*uint64(len(calldata))
var b bytes.Buffer
b.Write(common.BigToHash(big.NewInt(perL2Tx)).Bytes())
b.Write(common.BigToHash(big.NewInt(perL1Calldata)).Bytes())
b.Write(common.BigToHash(big.NewInt(123455)).Bytes())
feeEstimatorClient.On("CallContract", mock.Anything, mock.IsType(ethereum.CallMsg{}), mock.IsType(&big.Int{})).Run(func(args mock.Arguments) {
callMsg := args.Get(1).(ethereum.CallMsg)
blockNumber := args.Get(2).(*big.Int)
assert.Equal(t, rollups.ArbGasInfoAddress, callMsg.To.String())
assert.Equal(t, rollups.ArbGasInfo_getPricesInArbGas, fmt.Sprintf("%x", callMsg.Data))
assert.Equal(t, big.NewInt(-1), blockNumber)
}).Return(b.Bytes(), nil)
o := gas.NewArbitrumEstimator(logger.Test(t), &arbConfig{v: maxGasLimit, bumpPercent: bumpPercent, bumpMin: bumpMin}, feeEstimatorClient, l1Oracle)
servicetest.RunHealthy(t, o)
gasPrice, chainSpecificGasLimit, err := o.GetLegacyGas(tests.Context(t), calldata, gasLimit, maxGasPrice)
require.NoError(t, err)
require.NotNil(t, gasPrice)
// Again, a normal l2_suggested_estimator would return 42, but arbitrum_estimator adds a buffer.
assert.Equal(t, "63 wei", gasPrice.String())
assert.Equal(t, expLimit, chainSpecificGasLimit, "expected %d but got %d", expLimit, chainSpecificGasLimit)
})`
$DIR/core/chains/evm/gas/arbitrum_estimator_test.go: `feeEstimatorClient.On("CallContext", mock.Anything, mock.Anything, "eth_gasPrice").Return(nil).Run(func(args mock.Arguments) {
res := args.Get(1).(*hexutil.Big)
(*big.Int)(res).SetInt64(42)
})`
$DIR/core/chains/evm/gas/arbitrum_estimator_test.go: `(*big.Int)(res).SetInt64(42)`
$DIR/core/chains/evm/gas/arbitrum_estimator_test.go: `b.Write(common.BigToHash(big.NewInt(perL2Tx)).Bytes())`
$DIR/core/chains/evm/gas/arbitrum_estimator_test.go: `b.Write(common.BigToHash(big.NewInt(perL1Calldata)).Bytes())`
$DIR/core/chains/evm/gas/arbitrum_estimator_test.go: `b.Write(common.BigToHash(big.NewInt(123455)).Bytes())`
$DIR/core/chains/evm/gas/arbitrum_estimator_test.go: `feeEstimatorClient.On("CallContract", mock.Anything, mock.IsType(ethereum.CallMsg{}), mock.IsType(&big.Int{})).Run(func(args mock.Arguments) {
callMsg := args.Get(1).(ethereum.CallMsg)
blockNumber := args.Get(2).(*big.Int)
assert.Equal(t, rollups.ArbGasInfoAddress, callMsg.To.String())
assert.Equal(t, rollups.ArbGasInfo_getPricesInArbGas, fmt.Sprintf("%x", callMsg.Data))
assert.Equal(t, big.NewInt(-1), blockNumber)
}).Return(b.Bytes(), nil)`
$DIR/core/chains/evm/gas/arbitrum_estimator_test.go: `servicetest.RunHealthy(t, o)`
$DIR/core/chains/evm/gas/arbitrum_estimator_test.go: `feeEstimatorClient.On("CallContext", mock.Anything, mock.Anything, "eth_gasPrice").Return(nil).Run(func(args mock.Arguments) {
res := args.Get(1).(*hexutil.Big)
(*big.Int)(res).SetInt64(42)
})`
$DIR/core/chains/evm/gas/arbitrum_estimator_test.go: `(*big.Int)(res).SetInt64(42)`
$DIR/core/chains/evm/gas/arbitrum_estimator_test.go: `b.Write(common.BigToHash(big.NewInt(perL2Tx)).Bytes())`
$DIR/core/chains/evm/gas/arbitrum_estimator_test.go: `b.Write(common.BigToHash(big.NewInt(perL1Calldata)).Bytes())`
$DIR/core/chains/evm/gas/arbitrum_estimator_test.go: `b.Write(common.BigToHash(big.NewInt(123455)).Bytes())`
$DIR/core/chains/evm/gas/arbitrum_estimator_test.go: `feeEstimatorClient.On("CallContract", mock.Anything, mock.IsType(ethereum.CallMsg{}), mock.IsType(&big.Int{})).Run(func(args mock.Arguments) {
callMsg := args.Get(1).(ethereum.CallMsg)
blockNumber := args.Get(2).(*big.Int)
assert.Equal(t, rollups.ArbGasInfoAddress, callMsg.To.String())
assert.Equal(t, rollups.ArbGasInfo_getPricesInArbGas, fmt.Sprintf("%x", callMsg.Data))
assert.Equal(t, big.NewInt(-1), blockNumber)
}).Return(b.Bytes(), nil)`
$DIR/core/chains/evm/gas/arbitrum_estimator_test.go: `servicetest.RunHealthy(t, o)`
$DIR/core/chains/evm/gas/arbitrum_estimator_test.go: `.NewWeiI(100)`
$DIR/core/chains/evm/gas/arbitrum_estimator_test.go: `.NewWei(big.NewInt(1))`
$DIR/core/chains/evm/gas/arbitrum_estimator_test.go: `.NewInt(1)`
$DIR/core/chains/evm/gas/arbitrum_estimator_test.go: `.Run("calling GetLegacyGas on unstarted estimator returns error", func(t *testing.T) {
feeEstimatorClient := mocks.NewFeeEstimatorClient(t)
l1Oracle := rollups.NewArbitrumL1GasOracle(logger.Test(t), feeEstimatorClient)
o := gas.NewArbitrumEstimator(logger.Test(t), &arbConfig{}, feeEstimatorClient, l1Oracle)
_, _, err := o.GetLegacyGas(tests.Context(t), calldata, gasLimit, maxGasPrice)
assert.EqualError(t, err, "estimator is not started")
})`
$DIR/core/chains/evm/gas/arbitrum_estimator_test.go: `.NewFeeEstimatorClient(t)`
$DIR/core/chains/evm/gas/arbitrum_estimator_test.go: `.NewArbitrumL1GasOracle(logger.Test(t), feeEstimatorClient)`
$DIR/core/chains/evm/gas/arbitrum_estimator_test.go: `.Test(t)`
$DIR/core/chains/evm/gas/arbitrum_estimator_test.go: `.NewArbitrumEstimator(logger.Test(t), &arbConfig{}, feeEstimatorClient, l1Oracle)`
$DIR/core/chains/evm/gas/arbitrum_estimator_test.go: `.Test(t)`
$DIR/core/chains/evm/gas/arbitrum_estimator_test.go: `.GetLegacyGas(tests.Context(t), calldata, gasLimit, maxGasPrice)`
$DIR/core/chains/evm/gas/arbitrum_estimator_test.go: `.Context(t)`
$DIR/core/chains/evm/gas/arbitrum_estimator_test.go: `.Write(common.BigToHash(big.NewInt(0)).Bytes())`
$DIR/core/chains/evm/gas/arbitrum_estimator_test.go: `.BigToHash(big.NewInt(0))`
$DIR/core/chains/evm/gas/arbitrum_estimator_test.go: `.NewInt(0)`
$DIR/core/chains/evm/gas/arbitrum_estimator_test.go: `.Bytes()`
$DIR/core/chains/evm/gas/arbitrum_estimator_test.go: `.Write(common.BigToHash(big.NewInt(0)).Bytes())`
$DIR/core/chains/evm/gas/arbitrum_estimator_test.go: `.BigToHash(big.NewInt(0))`
$DIR/core/chains/evm/gas/arbitrum_estimator_test.go: `.NewInt(0)`
$DIR/core/chains/evm/gas/arbitrum_estimator_test.go: `.Bytes()`
$DIR/core/chains/evm/gas/arbitrum_estimator_test.go: `.Write(common.BigToHash(big.NewInt(123455)).Bytes())`
$DIR/core/chains/evm/gas/arbitrum_estimator_test.go: `.BigToHash(big.NewInt(123455))`
$DIR/core/chains/evm/gas/arbitrum_estimator_test.go: `.NewInt(123455)`
$DIR/core/chains/evm/gas/arbitrum_estimator_test.go: `.Bytes()`
$DIR/core/chains/evm/gas/arbitrum_estimator_test.go: `.Run("calling GetLegacyGas on started estimator returns estimates", func(t *testing.T) {
feeEstimatorClient := mocks.NewFeeEstimatorClient(t)
l1Oracle := rollups.NewArbitrumL1GasOracle(logger.Test(t), feeEstimatorClient)
feeEstimatorClient.On("CallContext", mock.Anything, mock.Anything, "eth_gasPrice").Return(nil).Run(func(args mock.Arguments) {
res := args.Get(1).(*hexutil.Big)
(*big.Int)(res).SetInt64(42)
})
feeEstimatorClient.On("CallContract", mock.Anything, mock.IsType(ethereum.CallMsg{}), mock.IsType(&big.Int{})).Run(func(args mock.Arguments) {
callMsg := args.Get(1).(ethereum.CallMsg)
blockNumber := args.Get(2).(*big.Int)
assert.Equal(t, rollups.ArbGasInfoAddress, callMsg.To.String())
assert.Equal(t, rollups.ArbGasInfo_getPricesInArbGas, fmt.Sprintf("%x", callMsg.Data))
assert.Equal(t, big.NewInt(-1), blockNumber)
}).Return(zeros.Bytes(), nil)
o := gas.NewArbitrumEstimator(logger.Test(t), &arbConfig{v: maxGasLimit, bumpPercent: bumpPercent, bumpMin: bumpMin}, feeEstimatorClient, l1Oracle)
servicetest.RunHealthy(t, o)
gasPrice, chainSpecificGasLimit, err := o.GetLegacyGas(tests.Context(t), calldata, gasLimit, maxGasPrice)
require.NoError(t, err)
// Expected price for a standard l2_suggested_estimator would be 42, but we add a fixed gasPriceBufferPercentage.
assert.Equal(t, assets.NewWeiI(42).AddPercentage(gasPriceBufferPercentage), gasPrice)
assert.Equal(t, gasLimit, chainSpecificGasLimit)
})`
$DIR/core/chains/evm/gas/arbitrum_estimator_test.go: `.NewFeeEstimatorClient(t)`
$DIR/core/chains/evm/gas/arbitrum_estimator_test.go: `.NewArbitrumL1GasOracle(logger.Test(t), feeEstimatorClient)`
$DIR/core/chains/evm/gas/arbitrum_estimator_test.go: `.Test(t)`
$DIR/core/chains/evm/gas/arbitrum_estimator_test.go: `.On("CallContext", mock.Anything, mock.Anything, "eth_gasPrice")`
$DIR/core/chains/evm/gas/arbitrum_estimator_test.go: `.Return(nil)`
$DIR/core/chains/evm/gas/arbitrum_estimator_test.go: `.Run(func(args mock.Arguments) {
res := args.Get(1).(*hexutil.Big)
(*big.Int)(res).SetInt64(42)
})`
$DIR/core/chains/evm/gas/arbitrum_estimator_test.go: `.Get(1)`
$DIR/core/chains/evm/gas/arbitrum_estimator_test.go: `.SetInt64(42)`
$DIR/core/chains/evm/gas/arbitrum_estimator_test.go: `.On("CallContract", mock.Anything, mock.IsType(ethereum.CallMsg{}), mock.IsType(&big.Int{}))`
$DIR/core/chains/evm/gas/arbitrum_estimator_test.go: `.IsType(ethereum.CallMsg{})`
$DIR/core/chains/evm/gas/arbitrum_estimator_test.go: `.IsType(&big.Int{})`
$DIR/core/chains/evm/gas/arbitrum_estimator_test.go: `.Run(func(args mock.Arguments) {
callMsg := args.Get(1).(ethereum.CallMsg)
blockNumber := args.Get(2).(*big.Int)
assert.Equal(t, rollups.ArbGasInfoAddress, callMsg.To.String())
assert.Equal(t, rollups.ArbGasInfo_getPricesInArbGas, fmt.Sprintf("%x", callMsg.Data))
assert.Equal(t, big.NewInt(-1), blockNumber)
})`
$DIR/core/chains/evm/gas/arbitrum_estimator_test.go: `.Get(1)`
$DIR/core/chains/evm/gas/arbitrum_estimator_test.go: `.Get(2)`
$DIR/core/chains/evm/gas/arbitrum_estimator_test.go: `.Return(zeros.Bytes(), nil)`
$DIR/core/chains/evm/gas/arbitrum_estimator_test.go: `.Bytes()`
$DIR/core/chains/evm/gas/arbitrum_estimator_test.go: `.NewArbitrumEstimator(logger.Test(t), &arbConfig{v: maxGasLimit, bumpPercent: bumpPercent, bumpMin: bumpMin}, feeEstimatorClient, l1Oracle)`
$DIR/core/chains/evm/gas/arbitrum_estimator_test.go: `.Test(t)`
$DIR/core/chains/evm/gas/arbitrum_estimator_test.go: `.RunHealthy(t, o)`
$DIR/core/chains/evm/gas/arbitrum_estimator_test.go: `.GetLegacyGas(tests.Context(t), calldata, gasLimit, maxGasPrice)`
$DIR/core/chains/evm/gas/arbitrum_estimator_test.go: `.Context(t)`
$DIR/core/chains/evm/gas/arbitrum_estimator_test.go: `.Run("gas price is lower than user specified max gas price", func(t *testing.T) {
feeEstimatorClient := mocks.NewFeeEstimatorClient(t)
l1Oracle := rollups.NewArbitrumL1GasOracle(logger.Test(t), feeEstimatorClient)
o := gas.NewArbitrumEstimator(logger.Test(t), &arbConfig{}, feeEstimatorClient, l1Oracle)
feeEstimatorClient.On("CallContext", mock.Anything, mock.Anything, "eth_gasPrice").Return(nil).Run(func(args mock.Arguments) {
res := args.Get(1).(*hexutil.Big)
(*big.Int)(res).SetInt64(42)
})
feeEstimatorClient.On("CallContract", mock.Anything, mock.IsType(ethereum.CallMsg{}), mock.IsType(&big.Int{})).Run(func(args mock.Arguments) {
callMsg := args.Get(1).(ethereum.CallMsg)
blockNumber := args.Get(2).(*big.Int)
assert.Equal(t, rollups.ArbGasInfoAddress, callMsg.To.String())
assert.Equal(t, rollups.ArbGasInfo_getPricesInArbGas, fmt.Sprintf("%x", callMsg.Data))
assert.Equal(t, big.NewInt(-1), blockNumber)
}).Return(zeros.Bytes(), nil)
servicetest.RunHealthy(t, o)
gasPrice, chainSpecificGasLimit, err := o.GetLegacyGas(tests.Context(t), calldata, gasLimit, assets.NewWeiI(40))
require.Error(t, err)
assert.EqualError(t, err, "estimated gas price: 42 wei is greater than the maximum gas price configured: 40 wei")
assert.Nil(t, gasPrice)
assert.Equal(t, uint64(0), chainSpecificGasLimit)
})`
$DIR/core/chains/evm/gas/arbitrum_estimator_test.go: `.NewFeeEstimatorClient(t)`
$DIR/core/chains/evm/gas/arbitrum_estimator_test.go: `.NewArbitrumL1GasOracle(logger.Test(t), feeEstimatorClient)`
$DIR/core/chains/evm/gas/arbitrum_estimator_test.go: `.Test(t)`
$DIR/core/chains/evm/gas/arbitrum_estimator_test.go: `.NewArbitrumEstimator(logger.Test(t), &arbConfig{}, feeEstimatorClient, l1Oracle)`
$DIR/core/chains/evm/gas/arbitrum_estimator_test.go: `.Test(t)`
$DIR/core/chains/evm/gas/arbitrum_estimator_test.go: `.On("CallContext", mock.Anything, mock.Anything, "eth_gasPrice")`
$DIR/core/chains/evm/gas/arbitrum_estimator_test.go: `.Return(nil)`
$DIR/core/chains/evm/gas/arbitrum_estimator_test.go: `.Run(func(args mock.Arguments) {
res := args.Get(1).(*hexutil.Big)
(*big.Int)(res).SetInt64(42)
})`
$DIR/core/chains/evm/gas/arbitrum_estimator_test.go: `.Get(1)`
$DIR/core/chains/evm/gas/arbitrum_estimator_test.go: `.SetInt64(42)`
$DIR/core/chains/evm/gas/arbitrum_estimator_test.go: `.On("CallContract", mock.Anything, mock.IsType(ethereum.CallMsg{}), mock.IsType(&big.Int{}))`
$DIR/core/chains/evm/gas/arbitrum_estimator_test.go: `.IsType(ethereum.CallMsg{})`
$DIR/core/chains/evm/gas/arbitrum_estimator_test.go: `.IsType(&big.Int{})`
$DIR/core/chains/evm/gas/arbitrum_estimator_test.go: `.Run(func(args mock.Arguments) {
callMsg := args.Get(1).(ethereum.CallMsg)
blockNumber := args.Get(2).(*big.Int)
assert.Equal(t, rollups.ArbGasInfoAddress, callMsg.To.String())
assert.Equal(t, rollups.ArbGasInfo_getPricesInArbGas, fmt.Sprintf("%x", callMsg.Data))
assert.Equal(t, big.NewInt(-1), blockNumber)
})`
$DIR/core/chains/evm/gas/arbitrum_estimator_test.go: `.Get(1)`
$DIR/core/chains/evm/gas/arbitrum_estimator_test.go: `.Get(2)`
$DIR/core/chains/evm/gas/arbitrum_estimator_test.go: `.Return(zeros.Bytes(), nil)`
$DIR/core/chains/evm/gas/arbitrum_estimator_test.go: `.Bytes()`
$DIR/core/chains/evm/gas/arbitrum_estimator_test.go: `.RunHealthy(t, o)`
$DIR/core/chains/evm/gas/arbitrum_estimator_test.go: `.GetLegacyGas(tests.Context(t), calldata, gasLimit, assets.NewWeiI(40))`
$DIR/core/chains/evm/gas/arbitrum_estimator_test.go: `.Context(t)`
$DIR/core/chains/evm/gas/arbitrum_estimator_test.go: `.NewWeiI(40)`
$DIR/core/chains/evm/gas/arbitrum_estimator_test.go: `.Run("gas price is lower than global max gas price", func(t *testing.T) {
feeEstimatorClient := mocks.NewFeeEstimatorClient(t)
l1Oracle := rollups.NewArbitrumL1GasOracle(logger.Test(t), feeEstimatorClient)
o := gas.NewArbitrumEstimator(logger.Test(t), &arbConfig{}, feeEstimatorClient, l1Oracle)
feeEstimatorClient.On("CallContext", mock.Anything, mock.Anything, "eth_gasPrice").Return(nil).Run(func(args mock.Arguments) {
res := args.Get(1).(*hexutil.Big)
(*big.Int)(res).SetInt64(120)
})
feeEstimatorClient.On("CallContract", mock.Anything, mock.IsType(ethereum.CallMsg{}), mock.IsType(&big.Int{})).Run(func(args mock.Arguments) {
callMsg := args.Get(1).(ethereum.CallMsg)
blockNumber := args.Get(2).(*big.Int)
assert.Equal(t, rollups.ArbGasInfoAddress, callMsg.To.String())
assert.Equal(t, rollups.ArbGasInfo_getPricesInArbGas, fmt.Sprintf("%x", callMsg.Data))
assert.Equal(t, big.NewInt(-1), blockNumber)
}).Return(zeros.Bytes(), nil)
servicetest.RunHealthy(t, o)
gasPrice, chainSpecificGasLimit, err := o.GetLegacyGas(tests.Context(t), calldata, gasLimit, assets.NewWeiI(110))
assert.EqualError(t, err, "estimated gas price: 120 wei is greater than the maximum gas price configured: 110 wei")
assert.Nil(t, gasPrice)
assert.Equal(t, uint64(0), chainSpecificGasLimit)
})`
$DIR/core/chains/evm/gas/arbitrum_estimator_test.go: `.NewFeeEstimatorClient(t)`
$DIR/core/chains/evm/gas/arbitrum_estimator_test.go: `.NewArbitrumL1GasOracle(logger.Test(t), feeEstimatorClient)`
$DIR/core/chains/evm/gas/arbitrum_estimator_test.go: `.Test(t)`
$DIR/core/chains/evm/gas/arbitrum_estimator_test.go: `.NewArbitrumEstimator(logger.Test(t), &arbConfig{}, feeEstimatorClient, l1Oracle)`
$DIR/core/chains/evm/gas/arbitrum_estimator_test.go: `.Test(t)`
$DIR/core/chains/evm/gas/arbitrum_estimator_test.go: `.On("CallContext", mock.Anything, mock.Anything, "eth_gasPrice")`
$DIR/core/chains/evm/gas/arbitrum_estimator_test.go: `.Return(nil)`
$DIR/core/chains/evm/gas/arbitrum_estimator_test.go: `.Run(func(args mock.Arguments) {
res := args.Get(1).(*hexutil.Big)
(*big.Int)(res).SetInt64(120)
})`
$DIR/core/chains/evm/gas/arbitrum_estimator_test.go: `.Get(1)`
$DIR/core/chains/evm/gas/arbitrum_estimator_test.go: `.SetInt64(120)`
$DIR/core/chains/evm/gas/arbitrum_estimator_test.go: `.On("CallContract", mock.Anything, mock.IsType(ethereum.CallMsg{}), mock.IsType(&big.Int{}))`
$DIR/core/chains/evm/gas/arbitrum_estimator_test.go: `.IsType(ethereum.CallMsg{})`
$DIR/core/chains/evm/gas/arbitrum_estimator_test.go: `.IsType(&big.Int{})`
$DIR/core/chains/evm/gas/arbitrum_estimator_test.go: `.Run(func(args mock.Arguments) {
callMsg := args.Get(1).(ethereum.CallMsg)
blockNumber := args.Get(2).(*big.Int)
assert.Equal(t, rollups.ArbGasInfoAddress, callMsg.To.String())
assert.Equal(t, rollups.ArbGasInfo_getPricesInArbGas, fmt.Sprintf("%x", callMsg.Data))
assert.Equal(t, big.NewInt(-1), blockNumber)
})`
$DIR/core/chains/evm/gas/arbitrum_estimator_test.go: `.Get(1)`
$DIR/core/chains/evm/gas/arbitrum_estimator_test.go: `.Get(2)`
$DIR/core/chains/evm/gas/arbitrum_estimator_test.go: `.Return(zeros.Bytes(), nil)`
$DIR/core/chains/evm/gas/arbitrum_estimator_test.go: `.Bytes()`
$DIR/core/chains/evm/gas/arbitrum_estimator_test.go: `.RunHealthy(t, o)`
$DIR/core/chains/evm/gas/arbitrum_estimator_test.go: `.GetLegacyGas(tests.Context(t), calldata, gasLimit, assets.NewWeiI(110))`
$DIR/core/chains/evm/gas/arbitrum_estimator_test.go: `.Context(t)`
$DIR/core/chains/evm/gas/arbitrum_estimator_test.go: `.NewWeiI(110)`
$DIR/core/chains/evm/gas/arbitrum_estimator_test.go: `.Run("calling BumpLegacyGas on unstarted arbitrum estimator returns error", func(t *testing.T) {
feeEstimatorClient := mocks.NewFeeEstimatorClient(t)
l1Oracle := rollups.NewArbitrumL1GasOracle(logger.Test(t), feeEstimatorClient)
o := gas.NewArbitrumEstimator(logger.Test(t), &arbConfig{}, feeEstimatorClient, l1Oracle)
_, _, err := o.BumpLegacyGas(tests.Context(t), assets.NewWeiI(42), gasLimit, assets.NewWeiI(10), nil)
assert.EqualError(t, err, "estimator is not started")
})`
$DIR/core/chains/evm/gas/arbitrum_estimator_test.go: `.NewFeeEstimatorClient(t)`
$DIR/core/chains/evm/gas/arbitrum_estimator_test.go: `.NewArbitrumL1GasOracle(logger.Test(t), feeEstimatorClient)`
$DIR/core/chains/evm/gas/arbitrum_estimator_test.go: `.Test(t)`
$DIR/core/chains/evm/gas/arbitrum_estimator_test.go: `.NewArbitrumEstimator(logger.Test(t), &arbConfig{}, feeEstimatorClient, l1Oracle)`
$DIR/core/chains/evm/gas/arbitrum_estimator_test.go: `.Test(t)`
$DIR/core/chains/evm/gas/arbitrum_estimator_test.go: `.BumpLegacyGas(tests.Context(t), assets.NewWeiI(42), gasLimit, assets.NewWeiI(10), nil)`
$DIR/core/chains/evm/gas/arbitrum_estimator_test.go: `.Context(t)`
$DIR/core/chains/evm/gas/arbitrum_estimator_test.go: `.NewWeiI(42)`
$DIR/core/chains/evm/gas/arbitrum_estimator_test.go: `.NewWeiI(10)`
$DIR/core/chains/evm/gas/arbitrum_estimator_test.go: `.Run("calling GetLegacyGas on started estimator if initial call failed returns error", func(t *testing.T) {
feeEstimatorClient := mocks.NewFeeEstimatorClient(t)
l1Oracle := rollups.NewArbitrumL1GasOracle(logger.Test(t), feeEstimatorClient)
o := gas.NewArbitrumEstimator(logger.Test(t), &arbConfig{}, feeEstimatorClient, l1Oracle)
feeEstimatorClient.On("CallContext", mock.Anything, mock.Anything, "eth_gasPrice").Return(pkgerrors.New("kaboom"))
feeEstimatorClient.On("CallContract", mock.Anything, mock.IsType(ethereum.CallMsg{}), mock.IsType(&big.Int{})).Run(func(args mock.Arguments) {
callMsg := args.Get(1).(ethereum.CallMsg)
blockNumber := args.Get(2).(*big.Int)
assert.Equal(t, rollups.ArbGasInfoAddress, callMsg.To.String())
assert.Equal(t, rollups.ArbGasInfo_getPricesInArbGas, fmt.Sprintf("%x", callMsg.Data))
assert.Equal(t, big.NewInt(-1), blockNumber)
}).Return(zeros.Bytes(), nil)
servicetest.RunHealthy(t, o)
_, _, err := o.GetLegacyGas(tests.Context(t), calldata, gasLimit, maxGasPrice)
assert.EqualError(t, err, "failed to estimate gas; gas price not set")
})`
$DIR/core/chains/evm/gas/arbitrum_estimator_test.go: `.NewFeeEstimatorClient(t)`
$DIR/core/chains/evm/gas/arbitrum_estimator_test.go: `.NewArbitrumL1GasOracle(logger.Test(t), feeEstimatorClient)`
$DIR/core/chains/evm/gas/arbitrum_estimator_test.go: `.Test(t)`
$DIR/core/chains/evm/gas/arbitrum_estimator_test.go: `.NewArbitrumEstimator(logger.Test(t), &arbConfig{}, feeEstimatorClient, l1Oracle)`
$DIR/core/chains/evm/gas/arbitrum_estimator_test.go: `.Test(t)`
$DIR/core/chains/evm/gas/arbitrum_estimator_test.go: `.On("CallContext", mock.Anything, mock.Anything, "eth_gasPrice")`
$DIR/core/chains/evm/gas/arbitrum_estimator_test.go: `.Return(pkgerrors.New("kaboom"))`
$DIR/core/chains/evm/gas/arbitrum_estimator_test.go: `.New("kaboom")`
$DIR/core/chains/evm/gas/arbitrum_estimator_test.go: `.On("CallContract", mock.Anything, mock.IsType(ethereum.CallMsg{}), mock.IsType(&big.Int{}))`
$DIR/core/chains/evm/gas/arbitrum_estimator_test.go: `.IsType(ethereum.CallMsg{})`
$DIR/core/chains/evm/gas/arbitrum_estimator_test.go: `.IsType(&big.Int{})`
$DIR/core/chains/evm/gas/arbitrum_estimator_test.go: `.Run(func(args mock.Arguments) {
callMsg := args.Get(1).(ethereum.CallMsg)
blockNumber := args.Get(2).(*big.Int)
assert.Equal(t, rollups.ArbGasInfoAddress, callMsg.To.String())
assert.Equal(t, rollups.ArbGasInfo_getPricesInArbGas, fmt.Sprintf("%x", callMsg.Data))
assert.Equal(t, big.NewInt(-1), blockNumber)
})`
$DIR/core/chains/evm/gas/arbitrum_estimator_test.go: `.Get(1)`
$DIR/core/chains/evm/gas/arbitrum_estimator_test.go: `.Get(2)`
$DIR/core/chains/evm/gas/arbitrum_estimator_test.go: `.Return(zeros.Bytes(), nil)`
$DIR/core/chains/evm/gas/arbitrum_estimator_test.go: `.Bytes()`
$DIR/core/chains/evm/gas/arbitrum_estimator_test.go: `.RunHealthy(t, o)`
$DIR/core/chains/evm/gas/arbitrum_estimator_test.go: `.GetLegacyGas(tests.Context(t), calldata, gasLimit, maxGasPrice)`
$DIR/core/chains/evm/gas/arbitrum_estimator_test.go: `.Context(t)`
$DIR/core/chains/evm/gas/arbitrum_estimator_test.go: `.Run("calling GetDynamicFee always returns error", func(t *testing.T) {
feeEstimatorClient := mocks.NewFeeEstimatorClient(t)
l1Oracle := rollups.NewArbitrumL1GasOracle(logger.Test(t), feeEstimatorClient)
o := gas.NewArbitrumEstimator(logger.Test(t), &arbConfig{}, feeEstimatorClient, l1Oracle)
_, err := o.GetDynamicFee(tests.Context(t), maxGasPrice)
assert.EqualError(t, err, "dynamic fees are not implemented for this estimator")
})`
$DIR/core/chains/evm/gas/arbitrum_estimator_test.go: `.NewFeeEstimatorClient(t)`
$DIR/core/chains/evm/gas/arbitrum_estimator_test.go: `.NewArbitrumL1GasOracle(logger.Test(t), feeEstimatorClient)`
$DIR/core/chains/evm/gas/arbitrum_estimator_test.go: `.Test(t)`
$DIR/core/chains/evm/gas/arbitrum_estimator_test.go: `.NewArbitrumEstimator(logger.Test(t), &arbConfig{}, feeEstimatorClient, l1Oracle)`
$DIR/core/chains/evm/gas/arbitrum_estimator_test.go: `.Test(t)`
$DIR/core/chains/evm/gas/arbitrum_estimator_test.go: `.GetDynamicFee(tests.Context(t), maxGasPrice)`
$DIR/core/chains/evm/gas/arbitrum_estimator_test.go: `.Context(t)`
$DIR/core/chains/evm/gas/arbitrum_estimator_test.go: `.Run("calling BumpDynamicFee always returns error", func(t *testing.T) {
feeEstimatorClient := mocks.NewFeeEstimatorClient(t)
l1Oracle := rollups.NewArbitrumL1GasOracle(logger.Test(t), feeEstimatorClient)
o := gas.NewArbitrumEstimator(logger.Test(t), &arbConfig{}, feeEstimatorClient, l1Oracle)
fee := gas.DynamicFee{
FeeCap: assets.NewWeiI(42),
TipCap: assets.NewWeiI(5),
}
_, err := o.BumpDynamicFee(tests.Context(t), fee, maxGasPrice, nil)
assert.EqualError(t, err, "dynamic fees are not implemented for this estimator")
})`
$DIR/core/chains/evm/gas/arbitrum_estimator_test.go: `.NewFeeEstimatorClient(t)`
$DIR/core/chains/evm/gas/arbitrum_estimator_test.go: `.NewArbitrumL1GasOracle(logger.Test(t), feeEstimatorClient)`
$DIR/core/chains/evm/gas/arbitrum_estimator_test.go: `.Test(t)`
$DIR/core/chains/evm/gas/arbitrum_estimator_test.go: `.NewArbitrumEstimator(logger.Test(t), &arbConfig{}, feeEstimatorClient, l1Oracle)`
$DIR/core/chains/evm/gas/arbitrum_estimator_test.go: `.Test(t)`
$DIR/core/chains/evm/gas/arbitrum_estimator_test.go: `.NewWeiI(42)`
$DIR/core/chains/evm/gas/arbitrum_estimator_test.go: `.NewWeiI(5)`
$DIR/core/chains/evm/gas/arbitrum_estimator_test.go: `.BumpDynamicFee(tests.Context(t), fee, maxGasPrice, nil)`
$DIR/core/chains/evm/gas/arbitrum_estimator_test.go: `.Context(t)`
$DIR/core/chains/evm/gas/arbitrum_estimator_test.go: `.Run("limit computes", func(t *testing.T) {
feeEstimatorClient := mocks.NewFeeEstimatorClient(t)
l1Oracle := rollups.NewArbitrumL1GasOracle(logger.Test(t), feeEstimatorClient)
feeEstimatorClient.On("CallContext", mock.Anything, mock.Anything, "eth_gasPrice").Return(nil).Run(func(args mock.Arguments) {
res := args.Get(1).(*hexutil.Big)
(*big.Int)(res).SetInt64(42)
})
const (
perL2Tx = 50_000
perL1Calldata = 10_000
)
var expLimit = gasLimit + perL2Tx + perL1Calldata*uint64(len(calldata))
var b bytes.Buffer
b.Write(common.BigToHash(big.NewInt(perL2Tx)).Bytes())
b.Write(common.BigToHash(big.NewInt(perL1Calldata)).Bytes())
b.Write(common.BigToHash(big.NewInt(123455)).Bytes())
feeEstimatorClient.On("CallContract", mock.Anything, mock.IsType(ethereum.CallMsg{}), mock.IsType(&big.Int{})).Run(func(args mock.Arguments) {
callMsg := args.Get(1).(ethereum.CallMsg)
blockNumber := args.Get(2).(*big.Int)
assert.Equal(t, rollups.ArbGasInfoAddress, callMsg.To.String())
assert.Equal(t, rollups.ArbGasInfo_getPricesInArbGas, fmt.Sprintf("%x", callMsg.Data))
assert.Equal(t, big.NewInt(-1), blockNumber)
}).Return(b.Bytes(), nil)
o := gas.NewArbitrumEstimator(logger.Test(t), &arbConfig{v: maxGasLimit, bumpPercent: bumpPercent, bumpMin: bumpMin}, feeEstimatorClient, l1Oracle)
servicetest.RunHealthy(t, o)
gasPrice, chainSpecificGasLimit, err := o.GetLegacyGas(tests.Context(t), calldata, gasLimit, maxGasPrice)
require.NoError(t, err)
require.NotNil(t, gasPrice)
// Again, a normal l2_suggested_estimator would return 42, but arbitrum_estimator adds a buffer.
assert.Equal(t, "63 wei", gasPrice.String())
assert.Equal(t, expLimit, chainSpecificGasLimit, "expected %d but got %d", expLimit, chainSpecificGasLimit)
})`
$DIR/core/chains/evm/gas/arbitrum_estimator_test.go: `.NewFeeEstimatorClient(t)`
$DIR/core/chains/evm/gas/arbitrum_estimator_test.go: `.NewArbitrumL1GasOracle(logger.Test(t), feeEstimatorClient)`
$DIR/core/chains/evm/gas/arbitrum_estimator_test.go: `.Test(t)`
$DIR/core/chains/evm/gas/arbitrum_estimator_test.go: `.On("CallContext", mock.Anything, mock.Anything, "eth_gasPrice")`
$DIR/core/chains/evm/gas/arbitrum_estimator_test.go: `.Return(nil)`
$DIR/core/chains/evm/gas/arbitrum_estimator_test.go: `.Run(func(args mock.Arguments) {
res := args.Get(1).(*hexutil.Big)
(*big.Int)(res).SetInt64(42)
})`
$DIR/core/chains/evm/gas/arbitrum_estimator_test.go: `.Get(1)`
$DIR/core/chains/evm/gas/arbitrum_estimator_test.go: `.SetInt64(42)`
$DIR/core/chains/evm/gas/arbitrum_estimator_test.go: `.Write(common.BigToHash(big.NewInt(perL2Tx)).Bytes())`
$DIR/core/chains/evm/gas/arbitrum_estimator_test.go: `.BigToHash(big.NewInt(perL2Tx))`
$DIR/core/chains/evm/gas/arbitrum_estimator_test.go: `.NewInt(perL2Tx)`
$DIR/core/chains/evm/gas/arbitrum_estimator_test.go: `.Bytes()`
$DIR/core/chains/evm/gas/arbitrum_estimator_test.go: `.Write(common.BigToHash(big.NewInt(perL1Calldata)).Bytes())`
$DIR/core/chains/evm/gas/arbitrum_estimator_test.go: `.BigToHash(big.NewInt(perL1Calldata))`
$DIR/core/chains/evm/gas/arbitrum_estimator_test.go: `.NewInt(perL1Calldata)`
$DIR/core/chains/evm/gas/arbitrum_estimator_test.go: `.Bytes()`
$DIR/core/chains/evm/gas/arbitrum_estimator_test.go: `.Write(common.BigToHash(big.NewInt(123455)).Bytes())`
$DIR/core/chains/evm/gas/arbitrum_estimator_test.go: `.BigToHash(big.NewInt(123455))`
$DIR/core/chains/evm/gas/arbitrum_estimator_test.go: `.NewInt(123455)`
$DIR/core/chains/evm/gas/arbitrum_estimator_test.go: `.Bytes()`
$DIR/core/chains/evm/gas/arbitrum_estimator_test.go: `.On("CallContract", mock.Anything, mock.IsType(ethereum.CallMsg{}), mock.IsType(&big.Int{}))`
$DIR/core/chains/evm/gas/arbitrum_estimator_test.go: `.IsType(ethereum.CallMsg{})`
$DIR/core/chains/evm/gas/arbitrum_estimator_test.go: `.IsType(&big.Int{})`
$DIR/core/chains/evm/gas/arbitrum_estimator_test.go: `.Run(func(args mock.Arguments) {
callMsg := args.Get(1).(ethereum.CallMsg)
blockNumber := args.Get(2).(*big.Int)
assert.Equal(t, rollups.ArbGasInfoAddress, callMsg.To.String())
assert.Equal(t, rollups.ArbGasInfo_getPricesInArbGas, fmt.Sprintf("%x", callMsg.Data))
assert.Equal(t, big.NewInt(-1), blockNumber)
})`
$DIR/core/chains/evm/gas/arbitrum_estimator_test.go: `.Get(1)`
$DIR/core/chains/evm/gas/arbitrum_estimator_test.go: `.Get(2)`
$DIR/core/chains/evm/gas/arbitrum_estimator_test.go: `.Return(b.Bytes(), nil)`
$DIR/core/chains/evm/gas/arbitrum_estimator_test.go: `.Bytes()`
$DIR/core/chains/evm/gas/arbitrum_estimator_test.go: `.NewArbitrumEstimator(logger.Test(t), &arbConfig{v: maxGasLimit, bumpPercent: bumpPercent, bumpMin: bumpMin}, feeEstimatorClient, l1Oracle)`
$DIR/core/chains/evm/gas/arbitrum_estimator_test.go: `.Test(t)`
$DIR/core/chains/evm/gas/arbitrum_estimator_test.go: `.RunHealthy(t, o)`
$DIR/core/chains/evm/gas/arbitrum_estimator_test.go: `.GetLegacyGas(tests.Context(t), calldata, gasLimit, maxGasPrice)`
$DIR/core/chains/evm/gas/arbitrum_estimator_test.go: `.Context(t)`
$DIR/core/chains/evm/gas/arbitrum_estimator_test.go: `.NewFeeEstimatorClient(t)`
$DIR/core/chains/evm/gas/arbitrum_estimator_test.go: `.NewArbitrumL1GasOracle(logger.Test(t), feeEstimatorClient)`
$DIR/core/chains/evm/gas/arbitrum_estimator_test.go: `.Test(t)`
$DIR/core/chains/evm/gas/arbitrum_estimator_test.go: `.On("CallContext", mock.Anything, mock.Anything, "eth_gasPrice")`
$DIR/core/chains/evm/gas/arbitrum_estimator_test.go: `.Return(nil)`
$DIR/core/chains/evm/gas/arbitrum_estimator_test.go: `.Run(func(args mock.Arguments) {
res := args.Get(1).(*hexutil.Big)
(*big.Int)(res).SetInt64(42)
})`
$DIR/core/chains/evm/gas/arbitrum_estimator_test.go: `.Get(1)`
$DIR/core/chains/evm/gas/arbitrum_estimator_test.go: `.SetInt64(42)`
$DIR/core/chains/evm/gas/arbitrum_estimator_test.go: `.Write(common.BigToHash(big.NewInt(perL2Tx)).Bytes())`
$DIR/core/chains/evm/gas/arbitrum_estimator_test.go: `.BigToHash(big.NewInt(perL2Tx))`
$DIR/core/chains/evm/gas/arbitrum_estimator_test.go: `.NewInt(perL2Tx)`
$DIR/core/chains/evm/gas/arbitrum_estimator_test.go: `.Bytes()`
$DIR/core/chains/evm/gas/arbitrum_estimator_test.go: `.Write(common.BigToHash(big.NewInt(perL1Calldata)).Bytes())`
$DIR/core/chains/evm/gas/arbitrum_estimator_test.go: `.BigToHash(big.NewInt(perL1Calldata))`
$DIR/core/chains/evm/gas/arbitrum_estimator_test.go: `.NewInt(perL1Calldata)`
$DIR/core/chains/evm/gas/arbitrum_estimator_test.go: `.Bytes()`
$DIR/core/chains/evm/gas/arbitrum_estimator_test.go: `.Write(common.BigToHash(big.NewInt(123455)).Bytes())`
$DIR/core/chains/evm/gas/arbitrum_estimator_test.go: `.BigToHash(big.NewInt(123455))`
$DIR/core/chains/evm/gas/arbitrum_estimator_test.go: `.NewInt(123455)`
$DIR/core/chains/evm/gas/arbitrum_estimator_test.go: `.Bytes()`
$DIR/core/chains/evm/gas/arbitrum_estimator_test.go: `.On("CallContract", mock.Anything, mock.IsType(ethereum.CallMsg{}), mock.IsType(&big.Int{}))`
$DIR/core/chains/evm/gas/arbitrum_estimator_test.go: `.IsType(ethereum.CallMsg{})`
$DIR/core/chains/evm/gas/arbitrum_estimator_test.go: `.IsType(&big.Int{})`
$DIR/core/chains/evm/gas/arbitrum_estimator_test.go: `.Run(func(args mock.Arguments) {
callMsg := args.Get(1).(ethereum.CallMsg)
blockNumber := args.Get(2).(*big.Int)
assert.Equal(t, rollups.ArbGasInfoAddress, callMsg.To.String())
assert.Equal(t, rollups.ArbGasInfo_getPricesInArbGas, fmt.Sprintf("%x", callMsg.Data))
assert.Equal(t, big.NewInt(-1), blockNumber)
})`
$DIR/core/chains/evm/gas/arbitrum_estimator_test.go: `.Get(1)`
$DIR/core/chains/evm/gas/arbitrum_estimator_test.go: `.Get(2)`
$DIR/core/chains/evm/gas/arbitrum_estimator_test.go: `.Return(b.Bytes(), nil)`
$DIR/core/chains/evm/gas/arbitrum_estimator_test.go: `.Bytes()`
$DIR/core/chains/evm/gas/arbitrum_estimator_test.go: `.NewArbitrumEstimator(logger.Test(t), &arbConfig{v: maxGasLimit, bumpPercent: bumpPercent, bumpMin: bumpMin}, feeEstimatorClient, l1Oracle)`
$DIR/core/chains/evm/gas/arbitrum_estimator_test.go: `.Test(t)`
$DIR/core/chains/evm/gas/arbitrum_estimator_test.go: `.RunHealthy(t, o)`
$DIR/core/chains/evm/gas/arbitrum_estimator_test.go: `.GetLegacyGas(tests.Context(t), calldata, gasLimit, maxGasPrice)`
$DIR/core/chains/evm/gas/arbitrum_estimator_test.go: `.Context(t)`
$DIR/core/chains/evm/gas/block_history_estimator_test.go: `geCfg.EIP1559DynamicFeesF = true`
$DIR/core/chains/evm/gas/block_history_estimator_test.go: `geCfg.PriceMinF = minGasPrice`
$DIR/core/chains/evm/gas/block_history_estimator_test.go: `geCfg.PriceMaxF = maxGasPrice`
$DIR/core/chains/evm/gas/block_history_estimator_test.go: `bhCfg.BatchSizeF = batchSize`
$DIR/core/chains/evm/gas/block_history_estimator_test.go: `bhCfg.BlockDelayF = blockDelay`
$DIR/core/chains/evm/gas/block_history_estimator_test.go: `bhCfg.BlockHistorySizeF = historySize`
$DIR/core/chains/evm/gas/block_history_estimator_test.go: `bhCfg.TransactionPercentileF = percentile`
$DIR/core/chains/evm/gas/block_history_estimator_test.go: `t.Run("loads initial state", func(t *testing.T) {
ethClient := testutils.NewEthClientMockWithDefaultChain(t)
l1Oracle := rollupMocks.NewL1Oracle(t)
bhe := newBlockHistoryEstimator(t, ethClient, cfg, geCfg, bhCfg, l1Oracle)
h := &evmtypes.Head{Hash: utils.NewHash(), Number: 42, BaseFeePerGas: assets.NewWeiI(420)}
ethClient.On("HeadByNumber", mock.Anything, (*big.Int)(nil)).Return(h, nil)
ethClient.On("BatchCallContext", mock.Anything, mock.MatchedBy(func(b []rpc.BatchElem) bool {
return len(b) == 2 &&
b[0].Method == "eth_getBlockByNumber" && b[0].Args[0] == "0x2a" && b[0].Args[1].(bool) && reflect.TypeOf(b[0].Result) == reflect.TypeOf(&evmtypes.Block{}) &&
b[1].Method == "eth_getBlockByNumber" && b[1].Args[0] == "0x29" && b[1].Args[1].(bool) && reflect.TypeOf(b[1].Result) == reflect.TypeOf(&evmtypes.Block{})
})).Return(nil).Run(func(args mock.Arguments) {
elems := args.Get(1).([]rpc.BatchElem)
elems[0].Result = &evmtypes.Block{
Number: 42,
Hash: utils.NewHash(),
}
elems[1].Result = &evmtypes.Block{
Number: 41,
Hash: utils.NewHash(),
}
}).Once()
err := bhe.Start(tests.Context(t))
require.NoError(t, err)
assert.Len(t, gas.GetRollingBlockHistory(bhe), 2)
assert.Equal(t, int(gas.GetRollingBlockHistory(bhe)[0].Number), 41)
assert.Equal(t, int(gas.GetRollingBlockHistory(bhe)[1].Number), 42)
assert.Equal(t, assets.NewWeiI(420), gas.GetLatestBaseFee(bhe))
})`
$DIR/core/chains/evm/gas/block_history_estimator_test.go: `ethClient.On("HeadByNumber", mock.Anything, (*big.Int)(nil)).Return(h, nil)`
$DIR/core/chains/evm/gas/block_history_estimator_test.go: `ethClient.On("BatchCallContext", mock.Anything, mock.MatchedBy(func(b []rpc.BatchElem) bool {
return len(b) == 2 &&
b[0].Method == "eth_getBlockByNumber" && b[0].Args[0] == "0x2a" && b[0].Args[1].(bool) && reflect.TypeOf(b[0].Result) == reflect.TypeOf(&evmtypes.Block{}) &&
b[1].Method == "eth_getBlockByNumber" && b[1].Args[0] == "0x29" && b[1].Args[1].(bool) && reflect.TypeOf(b[1].Result) == reflect.TypeOf(&evmtypes.Block{})
})).Return(nil).Run(func(args mock.Arguments) {
elems := args.Get(1).([]rpc.BatchElem)
elems[0].Result = &evmtypes.Block{
Number: 42,
Hash: utils.NewHash(),
}
elems[1].Result = &evmtypes.Block{
Number: 41,
Hash: utils.NewHash(),
}
}).Once()`
$DIR/core/chains/evm/gas/block_history_estimator_test.go: `elems[0].Result = &evmtypes.Block{
Number: 42,
Hash: utils.NewHash(),
}`
$DIR/core/chains/evm/gas/block_history_estimator_test.go: `elems[1].Result = &evmtypes.Block{
Number: 41,
Hash: utils.NewHash(),
}`
$DIR/core/chains/evm/gas/block_history_estimator_test.go: `t.Run("starts and loads partial history if fetch context times out", func(t *testing.T) {
geCfg2 := &gas.MockGasEstimatorConfig{}
geCfg2.EIP1559DynamicFeesF = true
geCfg2.PriceMinF = minGasPrice
bhCfg2 := newBlockHistoryConfig()
bhCfg2.BatchSizeF = uint32(1)
bhCfg2.BlockDelayF = blockDelay
bhCfg2.BlockHistorySizeF = historySize
bhCfg2.TransactionPercentileF = percentile
cfg2 := gas.NewMockConfig()
ethClient := testutils.NewEthClientMockWithDefaultChain(t)
l1Oracle := rollupMocks.NewL1Oracle(t)
bhe := newBlockHistoryEstimator(t, ethClient, cfg2, geCfg2, bhCfg2, l1Oracle)
h := &evmtypes.Head{Hash: utils.NewHash(), Number: 42, BaseFeePerGas: assets.NewWeiI(420)}
ethClient.On("HeadByNumber", mock.Anything, (*big.Int)(nil)).Return(h, nil)
// First succeeds (42)
ethClient.On("BatchCallContext", mock.Anything, mock.MatchedBy(func(b []rpc.BatchElem) bool {
return len(b) == 1 &&
b[0].Method == "eth_getBlockByNumber" && b[0].Args[0] == gas.Int64ToHex(42) && b[0].Args[1].(bool) && reflect.TypeOf(b[0].Result) == reflect.TypeOf(&evmtypes.Block{})
})).Return(nil).Run(func(args mock.Arguments) {
elems := args.Get(1).([]rpc.BatchElem)
elems[0].Result = &evmtypes.Block{
Number: 42,
Hash: utils.NewHash(),
}
}).Once()
// Second fails (41)
ethClient.On("BatchCallContext", mock.Anything, mock.MatchedBy(func(b []rpc.BatchElem) bool {
return len(b) == 1 &&
b[0].Method == "eth_getBlockByNumber" && b[0].Args[0] == gas.Int64ToHex(41) && b[0].Args[1].(bool) && reflect.TypeOf(b[0].Result) == reflect.TypeOf(&evmtypes.Block{})
})).Return(pkgerrors.Wrap(context.DeadlineExceeded, "some error message")).Once()
err := bhe.Start(tests.Context(t))
require.NoError(t, err)
require.Len(t, gas.GetRollingBlockHistory(bhe), 1)
assert.Equal(t, int(gas.GetRollingBlockHistory(bhe)[0].Number), 42)
assert.Equal(t, assets.NewWeiI(420), gas.GetLatestBaseFee(bhe))
})`
$DIR/core/chains/evm/gas/block_history_estimator_test.go: `geCfg2.EIP1559DynamicFeesF = true`
$DIR/core/chains/evm/gas/block_history_estimator_test.go: `geCfg2.PriceMinF = minGasPrice`
$DIR/core/chains/evm/gas/block_history_estimator_test.go: `bhCfg2.BatchSizeF = uint32(1)`
$DIR/core/chains/evm/gas/block_history_estimator_test.go: `bhCfg2.BlockDelayF = blockDelay`
$DIR/core/chains/evm/gas/block_history_estimator_test.go: `bhCfg2.BlockHistorySizeF = historySize`
$DIR/core/chains/evm/gas/block_history_estimator_test.go: `bhCfg2.TransactionPercentileF = percentile`
$DIR/core/chains/evm/gas/block_history_estimator_test.go: `ethClient.On("HeadByNumber", mock.Anything, (*big.Int)(nil)).Return(h, nil)`
$DIR/core/chains/evm/gas/block_history_estimator_test.go: `ethClient.On("BatchCallContext", mock.Anything, mock.MatchedBy(func(b []rpc.BatchElem) bool {
return len(b) == 1 &&
b[0].Method == "eth_getBlockByNumber" && b[0].Args[0] == gas.Int64ToHex(42) && b[0].Args[1].(bool) && reflect.TypeOf(b[0].Result) == reflect.TypeOf(&evmtypes.Block{})
})).Return(nil).Run(func(args mock.Arguments) {
elems := args.Get(1).([]rpc.BatchElem)
elems[0].Result = &evmtypes.Block{
Number: 42,
Hash: utils.NewHash(),
}
}).Once()`
$DIR/core/chains/evm/gas/block_history_estimator_test.go: `elems[0].Result = &evmtypes.Block{
Number: 42,
Hash: utils.NewHash(),
}`
$DIR/core/chains/evm/gas/block_history_estimator_test.go: `ethClient.On("BatchCallContext", mock.Anything, mock.MatchedBy(func(b []rpc.BatchElem) bool {
return len(b) == 1 &&
b[0].Method == "eth_getBlockByNumber" && b[0].Args[0] == gas.Int64ToHex(41) && b[0].Args[1].(bool) && reflect.TypeOf(b[0].Result) == reflect.TypeOf(&evmtypes.Block{})
})).Return(pkgerrors.Wrap(context.DeadlineExceeded, "some error message")).Once()`
$DIR/core/chains/evm/gas/block_history_estimator_test.go: `t.Run("boots even if initial batch call returns nothing", func(t *testing.T) {
ethClient := testutils.NewEthClientMockWithDefaultChain(t)
l1Oracle := rollupMocks.NewL1Oracle(t)
bhe := newBlockHistoryEstimator(t, ethClient, cfg, geCfg, bhCfg, l1Oracle)
h := &evmtypes.Head{Hash: utils.NewHash(), Number: 42}
ethClient.On("HeadByNumber", mock.Anything, (*big.Int)(nil)).Return(h, nil)
ethClient.On("BatchCallContext", mock.Anything, mock.MatchedBy(func(b []rpc.BatchElem) bool {
return len(b) == int(historySize)
})).Return(nil)
err := bhe.Start(tests.Context(t))
require.NoError(t, err)
// non-eip1559 block
assert.Nil(t, gas.GetLatestBaseFee(bhe))
})`
$DIR/core/chains/evm/gas/block_history_estimator_test.go: `ethClient.On("HeadByNumber", mock.Anything, (*big.Int)(nil)).Return(h, nil)`
$DIR/core/chains/evm/gas/block_history_estimator_test.go: `ethClient.On("BatchCallContext", mock.Anything, mock.MatchedBy(func(b []rpc.BatchElem) bool {
return len(b) == int(historySize)
})).Return(nil)`
$DIR/core/chains/evm/gas/block_history_estimator_test.go: `t.Run("starts anyway if fetching latest head fails", func(t *testing.T) {
ethClient := testutils.NewEthClientMockWithDefaultChain(t)
l1Oracle := rollupMocks.NewL1Oracle(t)
bhe := newBlockHistoryEstimator(t, ethClient, cfg, geCfg, bhCfg, l1Oracle)
ethClient.On("HeadByNumber", mock.Anything, (*big.Int)(nil)).Return(nil, pkgerrors.New("something exploded"))
err := bhe.Start(tests.Context(t))
require.NoError(t, err)
assert.Nil(t, gas.GetLatestBaseFee(bhe))
_, _, err = bhe.GetLegacyGas(tests.Context(t), make([]byte, 0), 100, maxGasPrice)
require.Error(t, err)
require.Contains(t, err.Error(), "has not finished the first gas estimation yet, likely because a failure on start")
_, err = bhe.GetDynamicFee(tests.Context(t), maxGasPrice)
require.Error(t, err)
require.Contains(t, err.Error(), "has not finished the first gas estimation yet, likely because a failure on start")
})`
$DIR/core/chains/evm/gas/block_history_estimator_test.go: `ethClient.On("HeadByNumber", mock.Anything, (*big.Int)(nil)).Return(nil, pkgerrors.New("something exploded"))`
$DIR/core/chains/evm/gas/block_history_estimator_test.go: `_, _, err = bhe.GetLegacyGas(tests.Context(t), make([]byte, 0), 100, maxGasPrice)`
$DIR/core/chains/evm/gas/block_history_estimator_test.go: `_, err = bhe.GetDynamicFee(tests.Context(t), maxGasPrice)`
$DIR/core/chains/evm/gas/block_history_estimator_test.go: `t.Run("starts anyway if fetching first fetch fails, but errors on estimation", func(t *testing.T) {
ethClient := testutils.NewEthClientMockWithDefaultChain(t)
l1Oracle := rollupMocks.NewL1Oracle(t)
bhe := newBlockHistoryEstimator(t, ethClient, cfg, geCfg, bhCfg, l1Oracle)
h := &evmtypes.Head{Hash: utils.NewHash(), Number: 42, BaseFeePerGas: assets.NewWeiI(420)}
ethClient.On("HeadByNumber", mock.Anything, (*big.Int)(nil)).Return(h, nil)
ethClient.On("BatchCallContext", mock.Anything, mock.Anything).Return(pkgerrors.New("something went wrong"))
err := bhe.Start(tests.Context(t))
require.NoError(t, err)
assert.Equal(t, assets.NewWeiI(420), gas.GetLatestBaseFee(bhe))
_, _, err = bhe.GetLegacyGas(tests.Context(t), make([]byte, 0), 100, maxGasPrice)
require.Error(t, err)
require.Contains(t, err.Error(), "has not finished the first gas estimation yet, likely because a failure on start")
_, err = bhe.GetDynamicFee(tests.Context(t), maxGasPrice)
require.Error(t, err)
require.Contains(t, err.Error(), "has not finished the first gas estimation yet, likely because a failure on start")
})`
$DIR/core/chains/evm/gas/block_history_estimator_test.go: `ethClient.On("HeadByNumber", mock.Anything, (*big.Int)(nil)).Return(h, nil)`
$DIR/core/chains/evm/gas/block_history_estimator_test.go: `ethClient.On("BatchCallContext", mock.Anything, mock.Anything).Return(pkgerrors.New("something went wrong"))`
$DIR/core/chains/evm/gas/block_history_estimator_test.go: `_, _, err = bhe.GetLegacyGas(tests.Context(t), make([]byte, 0), 100, maxGasPrice)`
$DIR/core/chains/evm/gas/block_history_estimator_test.go: `_, err = bhe.GetDynamicFee(tests.Context(t), maxGasPrice)`
$DIR/core/chains/evm/gas/block_history_estimator_test.go: `t.Run("returns error if main context is cancelled", func(t *testing.T) {
ethClient := testutils.NewEthClientMockWithDefaultChain(t)
l1Oracle := rollupMocks.NewL1Oracle(t)
bhe := newBlockHistoryEstimator(t, ethClient, cfg, geCfg, bhCfg, l1Oracle)
h := &evmtypes.Head{Hash: utils.NewHash(), Number: 42, BaseFeePerGas: assets.NewWeiI(420)}
ethClient.On("HeadByNumber", mock.Anything, (*big.Int)(nil)).Return(h, nil)
ethClient.On("BatchCallContext", mock.Anything, mock.Anything).Return(pkgerrors.New("this error doesn't matter"))
ctx, cancel := context.WithCancel(tests.Context(t))
cancel()
err := bhe.Start(ctx)
require.Error(t, err)
assert.Contains(t, err.Error(), "context canceled")
})`
$DIR/core/chains/evm/gas/block_history_estimator_test.go: `ethClient.On("HeadByNumber", mock.Anything, (*big.Int)(nil)).Return(h, nil)`
$DIR/core/chains/evm/gas/block_history_estimator_test.go: `ethClient.On("BatchCallContext", mock.Anything, mock.Anything).Return(pkgerrors.New("this error doesn't matter"))`
$DIR/core/chains/evm/gas/block_history_estimator_test.go: `cancel()`
$DIR/core/chains/evm/gas/block_history_estimator_test.go: `ethClient.On("HeadByNumber", mock.Anything, (*big.Int)(nil)).Return(h, nil)`
$DIR/core/chains/evm/gas/block_history_estimator_test.go: `ethClient.On("BatchCallContext", mock.Anything, mock.Anything).Return(pkgerrors.New("this error doesn't matter")).Run(func(_ mock.Arguments) {
time.Sleep(gas.MaxStartTime + 1*time.Second)
})`
$DIR/core/chains/evm/gas/block_history_estimator_test.go: `time.Sleep(gas.MaxStartTime + 1*time.Second)`
$DIR/core/chains/evm/gas/block_history_estimator_test.go: `_, _, err = bhe.GetLegacyGas(tests.Context(t), make([]byte, 0), 100, maxGasPrice)`
$DIR/core/chains/evm/gas/block_history_estimator_test.go: `_, err = bhe.GetDynamicFee(tests.Context(t), maxGasPrice)`
$DIR/core/chains/evm/gas/block_history_estimator_test.go: `geCfg.EIP1559DynamicFeesF = false`
$DIR/core/chains/evm/gas/block_history_estimator_test.go: `bhe.OnNewLongestChain(tests.Context(t), h)`
$DIR/core/chains/evm/gas/block_history_estimator_test.go: `h = testutils.Head(2)`
$DIR/core/chains/evm/gas/block_history_estimator_test.go: `h.BaseFeePerGas = assets.NewWeiI(500)`
$DIR/core/chains/evm/gas/block_history_estimator_test.go: `bhe.OnNewLongestChain(tests.Context(t), h)`
$DIR/core/chains/evm/gas/block_history_estimator_test.go: `t.Run("with history size of 0, errors", func(t *testing.T) {
ethClient := testutils.NewEthClientMockWithDefaultChain(t)
l1Oracle := rollupMocks.NewL1Oracle(t)
cfg := gas.NewMockConfig()
bhCfg := newBlockHistoryConfig()
var blockDelay uint16 = 3
var historySize uint16
bhCfg.BlockDelayF = blockDelay
bhCfg.BlockHistorySizeF = historySize
geCfg := &gas.MockGasEstimatorConfig{}
geCfg.EIP1559DynamicFeesF = true
bhe := newBlockHistoryEstimator(t, ethClient, cfg, geCfg, bhCfg, l1Oracle)
head := testutils.Head(42)
err := bhe.FetchBlocks(tests.Context(t), head)
require.Error(t, err)
require.EqualError(t, err, "BlockHistoryEstimator: history size must be > 0, got: 0")
})`
$DIR/core/chains/evm/gas/block_history_estimator_test.go: `bhCfg.BlockDelayF = blockDelay`
$DIR/core/chains/evm/gas/block_history_estimator_test.go: `bhCfg.BlockHistorySizeF = historySize`
$DIR/core/chains/evm/gas/block_history_estimator_test.go: `geCfg.EIP1559DynamicFeesF = true`
$DIR/core/chains/evm/gas/block_history_estimator_test.go: `t.Run("with current block height less than block delay does nothing", func(t *testing.T) {
ethClient := testutils.NewEthClientMockWithDefaultChain(t)
l1Oracle := rollupMocks.NewL1Oracle(t)
cfg := gas.NewMockConfig()
bhCfg := newBlockHistoryConfig()
var blockDelay uint16 = 3
var historySize uint16 = 1
bhCfg.BlockDelayF = blockDelay
bhCfg.BlockHistorySizeF = historySize
geCfg := &gas.MockGasEstimatorConfig{}
geCfg.EIP1559DynamicFeesF = true
bhe := newBlockHistoryEstimator(t, ethClient, cfg, geCfg, bhCfg, l1Oracle)
for i := -1; i < 3; i++ {
head := testutils.Head(i)
err := bhe.FetchBlocks(tests.Context(t), head)
require.Error(t, err)
require.EqualError(t, err, fmt.Sprintf("BlockHistoryEstimator: cannot fetch, current block height %v is lower than EVM.RPCBlockQueryDelay=3", i))
}
})`
$DIR/core/chains/evm/gas/block_history_estimator_test.go: `bhCfg.BlockDelayF = blockDelay`
$DIR/core/chains/evm/gas/block_history_estimator_test.go: `bhCfg.BlockHistorySizeF = historySize`
$DIR/core/chains/evm/gas/block_history_estimator_test.go: `geCfg.EIP1559DynamicFeesF = true`
$DIR/core/chains/evm/gas/block_history_estimator_test.go: `t.Run("with error retrieving blocks returns error", func(t *testing.T) {
ethClient := testutils.NewEthClientMockWithDefaultChain(t)
l1Oracle := rollupMocks.NewL1Oracle(t)
cfg := gas.NewMockConfig()
bhCfg := newBlockHistoryConfig()
var blockDelay uint16 = 3
var historySize uint16 = 3
var batchSize uint32
bhCfg.BlockDelayF = blockDelay
bhCfg.BlockHistorySizeF = historySize
bhCfg.BatchSizeF = batchSize
geCfg := &gas.MockGasEstimatorConfig{}
geCfg.EIP1559DynamicFeesF = true
bhe := newBlockHistoryEstimator(t, ethClient, cfg, geCfg, bhCfg, l1Oracle)
ethClient.On("BatchCallContext", mock.Anything, mock.Anything).Return(pkgerrors.New("something exploded"))
err := bhe.FetchBlocks(tests.Context(t), testutils.Head(42))
require.Error(t, err)
assert.EqualError(t, err, "BlockHistoryEstimator#fetchBlocks error fetching blocks with BatchCallContext: something exploded")
})`
$DIR/core/chains/evm/gas/block_history_estimator_test.go: `bhCfg.BlockDelayF = blockDelay`
$DIR/core/chains/evm/gas/block_history_estimator_test.go: `bhCfg.BlockHistorySizeF = historySize`
$DIR/core/chains/evm/gas/block_history_estimator_test.go: `bhCfg.BatchSizeF = batchSize`
$DIR/core/chains/evm/gas/block_history_estimator_test.go: `geCfg.EIP1559DynamicFeesF = true`
$DIR/core/chains/evm/gas/block_history_estimator_test.go: `ethClient.On("BatchCallContext", mock.Anything, mock.Anything).Return(pkgerrors.New("something exploded"))`
$DIR/core/chains/evm/gas/block_history_estimator_test.go: `t.Run("batch fetches heads and transactions and sets them on the block history estimator instance", func(t *testing.T) {
ethClient := testutils.NewEthClientMockWithDefaultChain(t)
l1Oracle := rollupMocks.NewL1Oracle(t)
cfg := gas.NewMockConfig()
bhCfg := newBlockHistoryConfig()
var blockDelay uint16
var historySize uint16 = 3
var batchSize uint32 = 2
bhCfg.BlockDelayF = blockDelay
bhCfg.BlockHistorySizeF = historySize
// Test batching
bhCfg.BatchSizeF = batchSize
geCfg := &gas.MockGasEstimatorConfig{}
geCfg.EIP1559DynamicFeesF = true
bhe := newBlockHistoryEstimator(t, ethClient, cfg, geCfg, bhCfg, l1Oracle)
b41 := evmtypes.Block{
Number: 41,
Hash: utils.NewHash(),
Transactions: legacyTransactionsFromGasPrices(1, 2),
}
b42 := evmtypes.Block{
Number: 42,
Hash: utils.NewHash(),
Transactions: legacyTransactionsFromGasPrices(3),
}
b43 := evmtypes.Block{
Number: 43,
Hash: utils.NewHash(),
Transactions: legacyTransactionsFromGasPrices(),
}
ethClient.On("BatchCallContext", mock.Anything, mock.MatchedBy(func(b []rpc.BatchElem) bool {
return len(b) == 2 &&
b[0].Method == "eth_getBlockByNumber" && b[0].Args[0] == gas.Int64ToHex(43) && b[0].Args[1].(bool) && reflect.TypeOf(b[0].Result) == reflect.TypeOf(&evmtypes.Block{}) &&
b[1].Method == "eth_getBlockByNumber" && b[1].Args[0] == gas.Int64ToHex(42) && b[1].Args[1].(bool) && reflect.TypeOf(b[1].Result) == reflect.TypeOf(&evmtypes.Block{})
})).Once().Return(nil).Run(func(args mock.Arguments) {
elems := args.Get(1).([]rpc.BatchElem)
elems[0].Result = &b43
// This errored block (42) will be ignored
elems[1].Error = pkgerrors.New("something went wrong")
})
ethClient.On("BatchCallContext", mock.Anything, mock.MatchedBy(func(b []rpc.BatchElem) bool {
return len(b) == 1 &&
b[0].Method == "eth_getBlockByNumber" && b[0].Args[0] == gas.Int64ToHex(41) && b[0].Args[1].(bool) && reflect.TypeOf(b[0].Result) == reflect.TypeOf(&evmtypes.Block{})
})).Once().Return(nil).Run(func(args mock.Arguments) {
elems := args.Get(1).([]rpc.BatchElem)
elems[0].Result = &b41
})
err := bhe.FetchBlocks(tests.Context(t), testutils.Head(43))
require.NoError(t, err)
require.Len(t, gas.GetRollingBlockHistory(bhe), 2)
assert.Equal(t, 41, int(gas.GetRollingBlockHistory(bhe)[0].Number))
// 42 is missing because the fetch errored
assert.Equal(t, 43, int(gas.GetRollingBlockHistory(bhe)[1].Number))
assert.Len(t, gas.GetRollingBlockHistory(bhe)[0].Transactions, 2)
assert.Len(t, gas.GetRollingBlockHistory(bhe)[1].Transactions, 0)
// On new fetch, rolls over the history and drops the old heads
b44 := evmtypes.Block{
Number: 44,
Hash: utils.NewHash(),
Transactions: legacyTransactionsFromGasPrices(4),
}
// We are gonna refetch blocks 42 and 44
// 43 is skipped because it was already in the history
ethClient.On("BatchCallContext", mock.Anything, mock.MatchedBy(func(b []rpc.BatchElem) bool {
return len(b) == 2 &&
b[0].Method == "eth_getBlockByNumber" && b[0].Args[0] == gas.Int64ToHex(44) && b[0].Args[1].(bool) && reflect.TypeOf(b[0].Result) == reflect.TypeOf(&evmtypes.Block{}) &&
b[1].Method == "eth_getBlockByNumber" && b[1].Args[0] == gas.Int64ToHex(42) && b[1].Args[1].(bool) && reflect.TypeOf(b[1].Result) == reflect.TypeOf(&evmtypes.Block{})
})).Once().Return(nil).Run(func(args mock.Arguments) {
elems := args.Get(1).([]rpc.BatchElem)
elems[0].Result = &b44
elems[1].Result = &b42
})
head := evmtypes.NewHead(big.NewInt(44), b44.Hash, b43.Hash, uint64(time.Now().Unix()), ubig.New(testutils.FixtureChainID))
err = bhe.FetchBlocks(tests.Context(t), &head)
require.NoError(t, err)
require.Len(t, gas.GetRollingBlockHistory(bhe), 3)
assert.Equal(t, 42, int(gas.GetRollingBlockHistory(bhe)[0].Number))
assert.Equal(t, 43, int(gas.GetRollingBlockHistory(bhe)[1].Number))
assert.Equal(t, 44, int(gas.GetRollingBlockHistory(bhe)[2].Number))
assert.Len(t, gas.GetRollingBlockHistory(bhe)[0].Transactions, 1)
assert.Len(t, gas.GetRollingBlockHistory(bhe)[1].Transactions, 0)
assert.Len(t, gas.GetRollingBlockHistory(bhe)[2].Transactions, 1)
})`
$DIR/core/chains/evm/gas/block_history_estimator_test.go: `bhCfg.BlockDelayF = blockDelay`
$DIR/core/chains/evm/gas/block_history_estimator_test.go: `bhCfg.BlockHistorySizeF = historySize`
$DIR/core/chains/evm/gas/block_history_estimator_test.go: `bhCfg.BatchSizeF = batchSize`
$DIR/core/chains/evm/gas/block_history_estimator_test.go: `geCfg.EIP1559DynamicFeesF = true`
$DIR/core/chains/evm/gas/block_history_estimator_test.go: `ethClient.On("BatchCallContext", mock.Anything, mock.MatchedBy(func(b []rpc.BatchElem) bool {
return len(b) == 2 &&
b[0].Method == "eth_getBlockByNumber" && b[0].Args[0] == gas.Int64ToHex(43) && b[0].Args[1].(bool) && reflect.TypeOf(b[0].Result) == reflect.TypeOf(&evmtypes.Block{}) &&
b[1].Method == "eth_getBlockByNumber" && b[1].Args[0] == gas.Int64ToHex(42) && b[1].Args[1].(bool) && reflect.TypeOf(b[1].Result) == reflect.TypeOf(&evmtypes.Block{})
})).Once().Return(nil).Run(func(args mock.Arguments) {
elems := args.Get(1).([]rpc.BatchElem)
elems[0].Result = &b43
// This errored block (42) will be ignored
elems[1].Error = pkgerrors.New("something went wrong")
})`
$DIR/core/chains/evm/gas/block_history_estimator_test.go: `elems[0].Result = &b43`
$DIR/core/chains/evm/gas/block_history_estimator_test.go: `elems[1].Error = pkgerrors.New("something went wrong")`
$DIR/core/chains/evm/gas/block_history_estimator_test.go: `ethClient.On("BatchCallContext", mock.Anything, mock.MatchedBy(func(b []rpc.BatchElem) bool {
return len(b) == 1 &&
b[0].Method == "eth_getBlockByNumber" && b[0].Args[0] == gas.Int64ToHex(41) && b[0].Args[1].(bool) && reflect.TypeOf(b[0].Result) == reflect.TypeOf(&evmtypes.Block{})
})).Once().Return(nil).Run(func(args mock.Arguments) {
elems := args.Get(1).([]rpc.BatchElem)
elems[0].Result = &b41
})`
$DIR/core/chains/evm/gas/block_history_estimator_test.go: `elems[0].Result = &b41`
$DIR/core/chains/evm/gas/block_history_estimator_test.go: `ethClient.On("BatchCallContext", mock.Anything, mock.MatchedBy(func(b []rpc.BatchElem) bool {
return len(b) == 2 &&
b[0].Method == "eth_getBlockByNumber" && b[0].Args[0] == gas.Int64ToHex(44) && b[0].Args[1].(bool) && reflect.TypeOf(b[0].Result) == reflect.TypeOf(&evmtypes.Block{}) &&
b[1].Method == "eth_getBlockByNumber" && b[1].Args[0] == gas.Int64ToHex(42) && b[1].Args[1].(bool) && reflect.TypeOf(b[1].Result) == reflect.TypeOf(&evmtypes.Block{})
})).Once().Return(nil).Run(func(args mock.Arguments) {
elems := args.Get(1).([]rpc.BatchElem)
elems[0].Result = &b44
elems[1].Result = &b42
})`
$DIR/core/chains/evm/gas/block_history_estimator_test.go: `elems[0].Result = &b44`
$DIR/core/chains/evm/gas/block_history_estimator_test.go: `elems[1].Result = &b42`
$DIR/core/chains/evm/gas/block_history_estimator_test.go: `err = bhe.FetchBlocks(tests.Context(t), &head)`
$DIR/core/chains/evm/gas/block_history_estimator_test.go: `t.Run("does not refetch blocks below EVM.FinalityDepth", func(t *testing.T) {
ethClient := testutils.NewEthClientMockWithDefaultChain(t)
l1Oracle := rollupMocks.NewL1Oracle(t)
cfg := gas.NewMockConfig()
bhCfg := newBlockHistoryConfig()
var blockDelay uint16
var historySize uint16 = 3
var batchSize uint32 = 2
bhCfg.BlockDelayF = blockDelay
bhCfg.BlockHistorySizeF = historySize
bhCfg.BatchSizeF = batchSize
geCfg := &gas.MockGasEstimatorConfig{}
geCfg.EIP1559DynamicFeesF = true
bhe := newBlockHistoryEstimator(t, ethClient, cfg, geCfg, bhCfg, l1Oracle)
b0 := evmtypes.Block{
Number: 0,
Hash: utils.NewHash(),
Transactions: legacyTransactionsFromGasPrices(9001),
}
b1 := evmtypes.Block{
Number: 1,
Hash: utils.NewHash(),
Transactions: legacyTransactionsFromGasPrices(9002),
}
blocks := []evmtypes.Block{b0, b1}
gas.SetRollingBlockHistory(bhe, blocks)
b2 := evmtypes.Block{
Number: 2,
Hash: utils.NewHash(),
Transactions: legacyTransactionsFromGasPrices(1, 2),
}
b3 := evmtypes.Block{
Number: 3,
Hash: utils.NewHash(),
Transactions: legacyTransactionsFromGasPrices(1, 2),
}
ethClient.On("BatchCallContext", mock.Anything, mock.MatchedBy(func(b []rpc.BatchElem) bool {
return len(b) == 2 &&
b[0].Method == "eth_getBlockByNumber" && b[0].Args[0] == gas.Int64ToHex(3) && b[0].Args[1].(bool) && reflect.TypeOf(b[0].Result) == reflect.TypeOf(&evmtypes.Block{}) &&
b[1].Method == "eth_getBlockByNumber" && b[1].Args[0] == gas.Int64ToHex(2) && b[1].Args[1].(bool) && reflect.TypeOf(b[1].Result) == reflect.TypeOf(&evmtypes.Block{})
})).Once().Return(nil).Run(func(args mock.Arguments) {
elems := args.Get(1).([]rpc.BatchElem)
elems[0].Result = &b3
elems[1].Result = &b2
})
head2 := evmtypes.NewHead(big.NewInt(2), b2.Hash, b1.Hash, uint64(time.Now().Unix()), ubig.New(testutils.FixtureChainID))
head3 := evmtypes.NewHead(big.NewInt(3), b3.Hash, b2.Hash, uint64(time.Now().Unix()), ubig.New(testutils.FixtureChainID))
head3.Parent = &head2
err := bhe.FetchBlocks(tests.Context(t), &head3)
require.NoError(t, err)
require.Len(t, gas.GetRollingBlockHistory(bhe), 3)
assert.Equal(t, 1, int(gas.GetRollingBlockHistory(bhe)[0].Number))
assert.Equal(t, 2, int(gas.GetRollingBlockHistory(bhe)[1].Number))
assert.Equal(t, 3, int(gas.GetRollingBlockHistory(bhe)[2].Number))
})`
$DIR/core/chains/evm/gas/block_history_estimator_test.go: `bhCfg.BlockDelayF = blockDelay`
$DIR/core/chains/evm/gas/block_history_estimator_test.go: `bhCfg.BlockHistorySizeF = historySize`
$DIR/core/chains/evm/gas/block_history_estimator_test.go: `bhCfg.BatchSizeF = batchSize`
$DIR/core/chains/evm/gas/block_history_estimator_test.go: `geCfg.EIP1559DynamicFeesF = true`
$DIR/core/chains/evm/gas/block_history_estimator_test.go: `gas.SetRollingBlockHistory(bhe, blocks)`
$DIR/core/chains/evm/gas/block_history_estimator_test.go: `ethClient.On("BatchCallContext", mock.Anything, mock.MatchedBy(func(b []rpc.BatchElem) bool {
return len(b) == 2 &&
b[0].Method == "eth_getBlockByNumber" && b[0].Args[0] == gas.Int64ToHex(3) && b[0].Args[1].(bool) && reflect.TypeOf(b[0].Result) == reflect.TypeOf(&evmtypes.Block{}) &&
b[1].Method == "eth_getBlockByNumber" && b[1].Args[0] == gas.Int64ToHex(2) && b[1].Args[1].(bool) && reflect.TypeOf(b[1].Result) == reflect.TypeOf(&evmtypes.Block{})
})).Once().Return(nil).Run(func(args mock.Arguments) {
elems := args.Get(1).([]rpc.BatchElem)
elems[0].Result = &b3
elems[1].Result = &b2
})`
$DIR/core/chains/evm/gas/block_history_estimator_test.go: `elems[0].Result = &b3`
$DIR/core/chains/evm/gas/block_history_estimator_test.go: `elems[1].Result = &b2`
$DIR/core/chains/evm/gas/block_history_estimator_test.go: `head3.Parent = &head2`
$DIR/core/chains/evm/gas/block_history_estimator_test.go: `t.Run("replaces blocks on re-org within EVM.FinalityDepth", func(t *testing.T) {
ethClient := testutils.NewEthClientMockWithDefaultChain(t)
l1Oracle := rollupMocks.NewL1Oracle(t)
cfg := gas.NewMockConfig()
bhCfg := newBlockHistoryConfig()
var blockDelay uint16
var historySize uint16 = 3
var batchSize uint32 = 2
bhCfg.BlockDelayF = blockDelay
bhCfg.BlockHistorySizeF = historySize
bhCfg.BatchSizeF = batchSize
geCfg := &gas.MockGasEstimatorConfig{}
geCfg.EIP1559DynamicFeesF = true
bhe := newBlockHistoryEstimator(t, ethClient, cfg, geCfg, bhCfg, l1Oracle)
b0 := evmtypes.Block{
Number: 0,
Hash: utils.NewHash(),
Transactions: legacyTransactionsFromGasPrices(9001),
}
b1 := evmtypes.Block{
Number: 1,
Hash: utils.NewHash(),
Transactions: legacyTransactionsFromGasPrices(9002),
}
b2 := evmtypes.Block{
Number: 2,
Hash: utils.NewHash(),
Transactions: legacyTransactionsFromGasPrices(1, 2),
}
b3 := evmtypes.Block{
Number: 3,
Hash: utils.NewHash(),
Transactions: legacyTransactionsFromGasPrices(1, 2),
}
blocks := []evmtypes.Block{b0, b1, b2, b3}
gas.SetRollingBlockHistory(bhe, blocks)
// RE-ORG, head2 and head3 have different hash than saved b2 and b3
head2 := evmtypes.NewHead(big.NewInt(2), utils.NewHash(), b1.Hash, uint64(time.Now().Unix()), ubig.New(testutils.FixtureChainID))
head3 := evmtypes.NewHead(big.NewInt(3), utils.NewHash(), head2.Hash, uint64(time.Now().Unix()), ubig.New(testutils.FixtureChainID))
head3.Parent = &head2
ethClient.On("BatchCallContext", mock.Anything, mock.MatchedBy(func(b []rpc.BatchElem) bool {
return len(b) == 2 &&
b[0].Method == "eth_getBlockByNumber" && b[0].Args[0] == gas.Int64ToHex(3) && b[0].Args[1].(bool) && reflect.TypeOf(b[0].Result) == reflect.TypeOf(&evmtypes.Block{}) &&
b[1].Method == "eth_getBlockByNumber" && b[1].Args[0] == gas.Int64ToHex(2) && b[1].Args[1].(bool) && reflect.TypeOf(b[1].Result) == reflect.TypeOf(&evmtypes.Block{})
})).Once().Return(nil).Run(func(args mock.Arguments) {
elems := args.Get(1).([]rpc.BatchElem)
b2New := b2
b2New.Hash = head2.Hash
elems[1].Result = &b2New
b3New := b3
b3New.Hash = head3.Hash
elems[0].Result = &b3New
})
err := bhe.FetchBlocks(tests.Context(t), &head3)
require.NoError(t, err)
require.Len(t, gas.GetRollingBlockHistory(bhe), 3)
assert.Equal(t, 1, int(gas.GetRollingBlockHistory(bhe)[0].Number))
assert.Equal(t, 2, int(gas.GetRollingBlockHistory(bhe)[1].Number))
assert.Equal(t, 3, int(gas.GetRollingBlockHistory(bhe)[2].Number))
assert.Equal(t, b1.Hash.Hex(), gas.GetRollingBlockHistory(bhe)[0].Hash.Hex())
assert.Equal(t, head2.Hash.Hex(), gas.GetRollingBlockHistory(bhe)[1].Hash.Hex())
assert.Equal(t, head3.Hash.Hex(), gas.GetRollingBlockHistory(bhe)[2].Hash.Hex())
})`
$DIR/core/chains/evm/gas/block_history_estimator_test.go: `bhCfg.BlockDelayF = blockDelay`
$DIR/core/chains/evm/gas/block_history_estimator_test.go: `bhCfg.BlockHistorySizeF = historySize`
$DIR/core/chains/evm/gas/block_history_estimator_test.go: `bhCfg.BatchSizeF = batchSize`
$DIR/core/chains/evm/gas/block_history_estimator_test.go: `geCfg.EIP1559DynamicFeesF = true`
$DIR/core/chains/evm/gas/block_history_estimator_test.go: `gas.SetRollingBlockHistory(bhe, blocks)`
$DIR/core/chains/evm/gas/block_history_estimator_test.go: `head3.Parent = &head2`
$DIR/core/chains/evm/gas/block_history_estimator_test.go: `ethClient.On("BatchCallContext", mock.Anything, mock.MatchedBy(func(b []rpc.BatchElem) bool {
return len(b) == 2 &&
b[0].Method == "eth_getBlockByNumber" && b[0].Args[0] == gas.Int64ToHex(3) && b[0].Args[1].(bool) && reflect.TypeOf(b[0].Result) == reflect.TypeOf(&evmtypes.Block{}) &&
b[1].Method == "eth_getBlockByNumber" && b[1].Args[0] == gas.Int64ToHex(2) && b[1].Args[1].(bool) && reflect.TypeOf(b[1].Result) == reflect.TypeOf(&evmtypes.Block{})
})).Once().Return(nil).Run(func(args mock.Arguments) {
elems := args.Get(1).([]rpc.BatchElem)
b2New := b2
b2New.Hash = head2.Hash
elems[1].Result = &b2New
b3New := b3
b3New.Hash = head3.Hash
elems[0].Result = &b3New
})`
$DIR/core/chains/evm/gas/block_history_estimator_test.go: `b2New.Hash = head2.Hash`
$DIR/core/chains/evm/gas/block_history_estimator_test.go: `elems[1].Result = &b2New`
$DIR/core/chains/evm/gas/block_history_estimator_test.go: `b3New.Hash = head3.Hash`
$DIR/core/chains/evm/gas/block_history_estimator_test.go: `elems[0].Result = &b3New`
$DIR/core/chains/evm/gas/block_history_estimator_test.go: `t.Run("uses locally cached blocks if they are in the chain", func(t *testing.T) {
ethClient := testutils.NewEthClientMockWithDefaultChain(t)
l1Oracle := rollupMocks.NewL1Oracle(t)
cfg := gas.NewMockConfig()
var blockDelay uint16
var historySize uint16 = 3
var batchSize uint32 = 2
bhCfg := newBlockHistoryConfig()
bhCfg.BlockDelayF = blockDelay
bhCfg.BlockHistorySizeF = historySize
bhCfg.BatchSizeF = batchSize
geCfg := &gas.MockGasEstimatorConfig{}
geCfg.EIP1559DynamicFeesF = true
bhe := newBlockHistoryEstimator(t, ethClient, cfg, geCfg, bhCfg, l1Oracle)
b0 := evmtypes.Block{
Number: 0,
Hash: utils.NewHash(),
Transactions: legacyTransactionsFromGasPrices(9001),
}
b1 := evmtypes.Block{
Number: 1,
Hash: utils.NewHash(),
Transactions: legacyTransactionsFromGasPrices(9002),
}
b2 := evmtypes.Block{
Number: 2,
Hash: utils.NewHash(),
Transactions: legacyTransactionsFromGasPrices(1, 2),
}
b3 := evmtypes.Block{
Number: 3,
Hash: utils.NewHash(),
Transactions: legacyTransactionsFromGasPrices(1, 2),
}
blocks := []evmtypes.Block{b0, b1, b2, b3}
gas.SetRollingBlockHistory(bhe, blocks)
// head2 and head3 have identical hash to saved blocks
head2 := evmtypes.NewHead(big.NewInt(2), b2.Hash, b1.Hash, uint64(time.Now().Unix()), ubig.New(testutils.FixtureChainID))
head3 := evmtypes.NewHead(big.NewInt(3), b3.Hash, head2.Hash, uint64(time.Now().Unix()), ubig.New(testutils.FixtureChainID))
head3.Parent = &head2
err := bhe.FetchBlocks(tests.Context(t), &head3)
require.NoError(t, err)
require.Len(t, gas.GetRollingBlockHistory(bhe), 3)
assert.Equal(t, 1, int(gas.GetRollingBlockHistory(bhe)[0].Number))
assert.Equal(t, 2, int(gas.GetRollingBlockHistory(bhe)[1].Number))
assert.Equal(t, 3, int(gas.GetRollingBlockHistory(bhe)[2].Number))
assert.Equal(t, b1.Hash.Hex(), gas.GetRollingBlockHistory(bhe)[0].Hash.Hex())
assert.Equal(t, head2.Hash.Hex(), gas.GetRollingBlockHistory(bhe)[1].Hash.Hex())
assert.Equal(t, head3.Hash.Hex(), gas.GetRollingBlockHistory(bhe)[2].Hash.Hex())
})`
$DIR/core/chains/evm/gas/block_history_estimator_test.go: `bhCfg.BlockDelayF = blockDelay`
$DIR/core/chains/evm/gas/block_history_estimator_test.go: `bhCfg.BlockHistorySizeF = historySize`
$DIR/core/chains/evm/gas/block_history_estimator_test.go: `bhCfg.BatchSizeF = batchSize`
$DIR/core/chains/evm/gas/block_history_estimator_test.go: `geCfg.EIP1559DynamicFeesF = true`
$DIR/core/chains/evm/gas/block_history_estimator_test.go: `gas.SetRollingBlockHistory(bhe, blocks)`
$DIR/core/chains/evm/gas/block_history_estimator_test.go: `head3.Parent = &head2`
$DIR/core/chains/evm/gas/block_history_estimator_test.go: `bhCfg.BlockDelayF = blockDelay`
$DIR/core/chains/evm/gas/block_history_estimator_test.go: `bhCfg.BlockHistorySizeF = historySize`
$DIR/core/chains/evm/gas/block_history_estimator_test.go: `bhCfg.BatchSizeF = batchSize`
$DIR/core/chains/evm/gas/block_history_estimator_test.go: `bhCfg.CheckInclusionBlocksF = checkInclusionBlocks`
$DIR/core/chains/evm/gas/block_history_estimator_test.go: `geCfg.EIP1559DynamicFeesF = true`
$DIR/core/chains/evm/gas/block_history_estimator_test.go: `ethClient.On("BatchCallContext", mock.Anything, mock.MatchedBy(func(b []rpc.BatchElem) bool {
return len(b) == 2 &&
b[0].Method == "eth_getBlockByNumber" && b[0].Args[0] == gas.Int64ToHex(43) && b[0].Args[1].(bool) && reflect.TypeOf(b[0].Result) == reflect.TypeOf(&evmtypes.Block{}) &&
b[1].Method == "eth_getBlockByNumber" && b[1].Args[0] == gas.Int64ToHex(42) && b[1].Args[1].(bool) && reflect.TypeOf(b[1].Result) == reflect.TypeOf(&evmtypes.Block{})
})).Once().Return(nil).Run(func(args mock.Arguments) {
elems := args.Get(1).([]rpc.BatchElem)
elems[0].Result = &b43
elems[1].Result = &b42
})`
$DIR/core/chains/evm/gas/block_history_estimator_test.go: `elems[0].Result = &b43`
$DIR/core/chains/evm/gas/block_history_estimator_test.go: `elems[1].Result = &b42`
$DIR/core/chains/evm/gas/block_history_estimator_test.go: `bhCfg.BlockDelayF = uint16(0)`
$DIR/core/chains/evm/gas/block_history_estimator_test.go: `bhCfg.TransactionPercentileF = uint16(35)`
$DIR/core/chains/evm/gas/block_history_estimator_test.go: `bhCfg.BlockHistorySizeF = uint16(3)`
$DIR/core/chains/evm/gas/block_history_estimator_test.go: `bhCfg.BatchSizeF = uint32(0)`
$DIR/core/chains/evm/gas/block_history_estimator_test.go: `geCfg.EIP1559DynamicFeesF = false`
$DIR/core/chains/evm/gas/block_history_estimator_test.go: `geCfg.PriceMaxF = assets.NewWeiI(1000)`
$DIR/core/chains/evm/gas/block_history_estimator_test.go: `geCfg.PriceMinF = assets.NewWeiI(0)`
$DIR/core/chains/evm/gas/block_history_estimator_test.go: `ethClient.On("BatchCallContext", mock.Anything, mock.MatchedBy(func(b []rpc.BatchElem) bool {
return len(b) == 3 &&
b[0].Args[0] == "0x3" &&
b[1].Args[0] == "0x2" &&
b[2].Args[0] == "0x1"
})).Return(nil).Run(func(args mock.Arguments) {
elems := args.Get(1).([]rpc.BatchElem)
elems[0].Result = &b3
elems[1].Result = &b2
elems[2].Result = &b1
})`
$DIR/core/chains/evm/gas/block_history_estimator_test.go: `elems[0].Result = &b3`
$DIR/core/chains/evm/gas/block_history_estimator_test.go: `elems[1].Result = &b2`
$DIR/core/chains/evm/gas/block_history_estimator_test.go: `elems[2].Result = &b1`
$DIR/core/chains/evm/gas/block_history_estimator_test.go: `bhe.FetchBlocksAndRecalculate(tests.Context(t), testutils.Head(3))`
$DIR/core/chains/evm/gas/block_history_estimator_test.go: `t.Run("does not crash or set gas price to zero if there are no transactions", func(t *testing.T) {
ethClient := testutils.NewEthClientMockWithDefaultChain(t)
l1Oracle := rollupMocks.NewL1Oracle(t)
cfg := gas.NewMockConfig()
bhCfg := newBlockHistoryConfig()
bhCfg.TransactionPercentileF = uint16(35)
geCfg := &gas.MockGasEstimatorConfig{}
geCfg.EIP1559DynamicFeesF = false
bhe := newBlockHistoryEstimator(t, ethClient, cfg, geCfg, bhCfg, l1Oracle)
blocks := []evmtypes.Block{}
gas.SetRollingBlockHistory(bhe, blocks)
bhe.Recalculate(testutils.Head(1))
blocks = []evmtypes.Block{{}}
gas.SetRollingBlockHistory(bhe, blocks)
bhe.Recalculate(testutils.Head(1))
blocks = []evmtypes.Block{{Transactions: []evmtypes.Transaction{}}}
gas.SetRollingBlockHistory(bhe, blocks)
bhe.Recalculate(testutils.Head(1))
})`
$DIR/core/chains/evm/gas/block_history_estimator_test.go: `bhCfg.TransactionPercentileF = uint16(35)`
$DIR/core/chains/evm/gas/block_history_estimator_test.go: `geCfg.EIP1559DynamicFeesF = false`
$DIR/core/chains/evm/gas/block_history_estimator_test.go: `gas.SetRollingBlockHistory(bhe, blocks)`
$DIR/core/chains/evm/gas/block_history_estimator_test.go: `bhe.Recalculate(testutils.Head(1))`
$DIR/core/chains/evm/gas/block_history_estimator_test.go: `blocks = []evmtypes.Block{{}}`
$DIR/core/chains/evm/gas/block_history_estimator_test.go: `gas.SetRollingBlockHistory(bhe, blocks)`
$DIR/core/chains/evm/gas/block_history_estimator_test.go: `bhe.Recalculate(testutils.Head(1))`
$DIR/core/chains/evm/gas/block_history_estimator_test.go: `blocks = []evmtypes.Block{{Transactions: []evmtypes.Transaction{}}}`
$DIR/core/chains/evm/gas/block_history_estimator_test.go: `gas.SetRollingBlockHistory(bhe, blocks)`
$DIR/core/chains/evm/gas/block_history_estimator_test.go: `bhe.Recalculate(testutils.Head(1))`
$DIR/core/chains/evm/gas/block_history_estimator_test.go: `t.Run("sets gas price to EVM.GasEstimator.PriceMax if the calculation would otherwise exceed it", func(t *testing.T) {
ethClient := testutils.NewEthClientMockWithDefaultChain(t)
l1Oracle := rollupMocks.NewL1Oracle(t)
cfg := gas.NewMockConfig()
bhCfg := newBlockHistoryConfig()
bhCfg.TransactionPercentileF = uint16(35)
geCfg := &gas.MockGasEstimatorConfig{}
geCfg.EIP1559DynamicFeesF = false
geCfg.PriceMaxF = maxGasPrice
geCfg.PriceMinF = minGasPrice
bhe := newBlockHistoryEstimator(t, ethClient, cfg, geCfg, bhCfg, l1Oracle)
blocks := []evmtypes.Block{
{
Number: 0,
Hash: utils.NewHash(),
Transactions: legacyTransactionsFromGasPrices(9001),
},
{
Number: 1,
Hash: utils.NewHash(),
Transactions: legacyTransactionsFromGasPrices(9002),
},
}
gas.SetRollingBlockHistory(bhe, blocks)
bhe.Recalculate(testutils.Head(1))
price := gas.GetGasPrice(bhe)
require.Equal(t, maxGasPrice, price)
})`
$DIR/core/chains/evm/gas/block_history_estimator_test.go: `bhCfg.TransactionPercentileF = uint16(35)`
$DIR/core/chains/evm/gas/block_history_estimator_test.go: `geCfg.EIP1559DynamicFeesF = false`
$DIR/core/chains/evm/gas/block_history_estimator_test.go: `geCfg.PriceMaxF = maxGasPrice`
$DIR/core/chains/evm/gas/block_history_estimator_test.go: `geCfg.PriceMinF = minGasPrice`
$DIR/core/chains/evm/gas/block_history_estimator_test.go: `gas.SetRollingBlockHistory(bhe, blocks)`
$DIR/core/chains/evm/gas/block_history_estimator_test.go: `bhe.Recalculate(testutils.Head(1))`
$DIR/core/chains/evm/gas/block_history_estimator_test.go: `t.Run("sets gas price to EVM.GasEstimator.PriceMin if the calculation would otherwise fall below it", func(t *testing.T) {
ethClient := testutils.NewEthClientMockWithDefaultChain(t)
l1Oracle := rollupMocks.NewL1Oracle(t)
cfg := gas.NewMockConfig()
bhCfg := newBlockHistoryConfig()
bhCfg.TransactionPercentileF = uint16(35)
geCfg := &gas.MockGasEstimatorConfig{}
geCfg.EIP1559DynamicFeesF = false
geCfg.PriceMaxF = maxGasPrice
geCfg.PriceMinF = minGasPrice
bhe := newBlockHistoryEstimator(t, ethClient, cfg, geCfg, bhCfg, l1Oracle)
blocks := []evmtypes.Block{
{
Number: 0,
Hash: utils.NewHash(),
Transactions: legacyTransactionsFromGasPrices(5),
},
{
Number: 1,
Hash: utils.NewHash(),
Transactions: legacyTransactionsFromGasPrices(7),
},
}
gas.SetRollingBlockHistory(bhe, blocks)
bhe.Recalculate(testutils.Head(1))
price := gas.GetGasPrice(bhe)
require.Equal(t, minGasPrice, price)
})`
$DIR/core/chains/evm/gas/block_history_estimator_test.go: `bhCfg.TransactionPercentileF = uint16(35)`
$DIR/core/chains/evm/gas/block_history_estimator_test.go: `geCfg.EIP1559DynamicFeesF = false`
$DIR/core/chains/evm/gas/block_history_estimator_test.go: `geCfg.PriceMaxF = maxGasPrice`
$DIR/core/chains/evm/gas/block_history_estimator_test.go: `geCfg.PriceMinF = minGasPrice`
$DIR/core/chains/evm/gas/block_history_estimator_test.go: `gas.SetRollingBlockHistory(bhe, blocks)`
$DIR/core/chains/evm/gas/block_history_estimator_test.go: `bhe.Recalculate(testutils.Head(1))`
$DIR/core/chains/evm/gas/block_history_estimator_test.go: `t.Run("ignores any transaction with a zero gas limit", func(t *testing.T) {
ethClient := testutils.NewEthClientMockWithDefaultChain(t)
l1Oracle := rollupMocks.NewL1Oracle(t)
cfg := gas.NewMockConfig()
bhCfg := newBlockHistoryConfig()
bhCfg.TransactionPercentileF = uint16(100)
geCfg := &gas.MockGasEstimatorConfig{}
geCfg.EIP1559DynamicFeesF = false
geCfg.PriceMaxF = maxGasPrice
geCfg.PriceMinF = minGasPrice
bhe := newBlockHistoryEstimator(t, ethClient, cfg, geCfg, bhCfg, l1Oracle)
b1Hash := utils.NewHash()
b2Hash := utils.NewHash()
blocks := []evmtypes.Block{
{
Number: 0,
Hash: b1Hash,
ParentHash: common.Hash{},
Transactions: legacyTransactionsFromGasPrices(50),
},
{
Number: 1,
Hash: b2Hash,
ParentHash: b1Hash,
Transactions: []evmtypes.Transaction{{GasPrice: assets.NewWeiI(70), GasLimit: 42}},
},
{
Number: 2,
Hash: utils.NewHash(),
ParentHash: b2Hash,
Transactions: []evmtypes.Transaction{{GasPrice: assets.NewWeiI(90), GasLimit: 0}},
},
}
gas.SetRollingBlockHistory(bhe, blocks)
bhe.Recalculate(testutils.Head(2))
price := gas.GetGasPrice(bhe)
require.Equal(t, assets.NewWeiI(70), price)
})`
$DIR/core/chains/evm/gas/block_history_estimator_test.go: `bhCfg.TransactionPercentileF = uint16(100)`
$DIR/core/chains/evm/gas/block_history_estimator_test.go: `geCfg.EIP1559DynamicFeesF = false`
$DIR/core/chains/evm/gas/block_history_estimator_test.go: `geCfg.PriceMaxF = maxGasPrice`
$DIR/core/chains/evm/gas/block_history_estimator_test.go: `geCfg.PriceMinF = minGasPrice`
$DIR/core/chains/evm/gas/block_history_estimator_test.go: `gas.SetRollingBlockHistory(bhe, blocks)`
$DIR/core/chains/evm/gas/block_history_estimator_test.go: `bhe.Recalculate(testutils.Head(2))`
$DIR/core/chains/evm/gas/block_history_estimator_test.go: `t.Run("takes into account zero priced transactions if chain is not Gnosis", func(t *testing.T) {
// Because everyone loves free gas!
ethClient := testutils.NewEthClientMockWithDefaultChain(t)
l1Oracle := rollupMocks.NewL1Oracle(t)
cfg := gas.NewMockConfig()
bhCfg := newBlockHistoryConfig()
bhCfg.TransactionPercentileF = uint16(50)
geCfg := &gas.MockGasEstimatorConfig{}
geCfg.EIP1559DynamicFeesF = false
geCfg.PriceMaxF = maxGasPrice
geCfg.PriceMinF = assets.NewWeiI(0)
bhe := newBlockHistoryEstimator(t, ethClient, cfg, geCfg, bhCfg, l1Oracle)
b1Hash := utils.NewHash()
blocks := []evmtypes.Block{
{
Number: 0,
Hash: b1Hash,
ParentHash: common.Hash{},
Transactions: legacyTransactionsFromGasPrices(0, 0, 25, 50, 100),
},
}
gas.SetRollingBlockHistory(bhe, blocks)
bhe.Recalculate(testutils.Head(0))
price := gas.GetGasPrice(bhe)
require.Equal(t, assets.NewWeiI(25), price)
})`
$DIR/core/chains/evm/gas/block_history_estimator_test.go: `bhCfg.TransactionPercentileF = uint16(50)`
$DIR/core/chains/evm/gas/block_history_estimator_test.go: `geCfg.EIP1559DynamicFeesF = false`
$DIR/core/chains/evm/gas/block_history_estimator_test.go: `geCfg.PriceMaxF = maxGasPrice`
$DIR/core/chains/evm/gas/block_history_estimator_test.go: `geCfg.PriceMinF = assets.NewWeiI(0)`
$DIR/core/chains/evm/gas/block_history_estimator_test.go: `gas.SetRollingBlockHistory(bhe, blocks)`
$DIR/core/chains/evm/gas/block_history_estimator_test.go: `bhe.Recalculate(testutils.Head(0))`
$DIR/core/chains/evm/gas/block_history_estimator_test.go: `t.Run("ignores zero priced transactions only on Gnosis", func(t *testing.T) {
ethClient := evmmocks.NewClient(t)
l1Oracle := rollupMocks.NewL1Oracle(t)
cfg := gas.NewMockConfig()
bhCfg := newBlockHistoryConfig()
bhCfg.TransactionPercentileF = uint16(50)
geCfg := &gas.MockGasEstimatorConfig{}
geCfg.EIP1559DynamicFeesF = false
geCfg.PriceMaxF = maxGasPrice
geCfg.PriceMinF = assets.NewWeiI(11) // Has to be set as Gnosis will only ignore transactions below this price
ibhe := newBlockHistoryEstimator(t, ethClient, cfg, geCfg, bhCfg, l1Oracle)
bhe := gas.BlockHistoryEstimatorFromInterface(ibhe)
b1Hash := utils.NewHash()
blocks := []evmtypes.Block{
{
Number: 0,
Hash: b1Hash,
ParentHash: common.Hash{},
Transactions: legacyTransactionsFromGasPrices(0, 0, 0, 0, 80),
},
}
gas.SetRollingBlockHistory(bhe, blocks)
// chainType is not set - GasEstimator should not ignore zero priced transactions and instead default to PriceMin==11
bhe.Recalculate(testutils.Head(0))
require.Equal(t, assets.NewWeiI(11), gas.GetGasPrice(bhe))
// Set chainType to Gnosis - GasEstimator should now ignore zero priced transactions
cfg.ChainTypeF = string(chaintype.ChainGnosis)
bhe.Recalculate(testutils.Head(0))
require.Equal(t, assets.NewWeiI(80), gas.GetGasPrice(bhe))
// And for X Layer
cfg.ChainTypeF = string(chaintype.ChainXLayer)
bhe.Recalculate(testutils.Head(0))
require.Equal(t, assets.NewWeiI(80), gas.GetGasPrice(bhe))
})`
$DIR/core/chains/evm/gas/block_history_estimator_test.go: `bhCfg.TransactionPercentileF = uint16(50)`
$DIR/core/chains/evm/gas/block_history_estimator_test.go: `geCfg.EIP1559DynamicFeesF = false`
$DIR/core/chains/evm/gas/block_history_estimator_test.go: `geCfg.PriceMaxF = maxGasPrice`
$DIR/core/chains/evm/gas/block_history_estimator_test.go: `geCfg.PriceMinF = assets.NewWeiI(11)`
$DIR/core/chains/evm/gas/block_history_estimator_test.go: `gas.SetRollingBlockHistory(bhe, blocks)`
$DIR/core/chains/evm/gas/block_history_estimator_test.go: `bhe.Recalculate(testutils.Head(0))`
$DIR/core/chains/evm/gas/block_history_estimator_test.go: `cfg.ChainTypeF = string(chaintype.ChainGnosis)`
$DIR/core/chains/evm/gas/block_history_estimator_test.go: `bhe.Recalculate(testutils.Head(0))`
$DIR/core/chains/evm/gas/block_history_estimator_test.go: `cfg.ChainTypeF = string(chaintype.ChainXLayer)`
$DIR/core/chains/evm/gas/block_history_estimator_test.go: `bhe.Recalculate(testutils.Head(0))`
$DIR/core/chains/evm/gas/block_history_estimator_test.go: `t.Run("handles unreasonably large gas prices (larger than a 64 bit int can hold)", func(t *testing.T) {
// Seems unlikely we will ever experience gas prices > 9 Petawei on mainnet (praying to the eth Gods 🙏)
// But other chains could easily use a different base of account
ethClient := testutils.NewEthClientMockWithDefaultChain(t)
l1Oracle := rollupMocks.NewL1Oracle(t)
cfg := gas.NewMockConfig()
bhCfg := newBlockHistoryConfig()
reasonablyHugeGasPrice := assets.NewWeiI(1000).Mul(big.NewInt(math.MaxInt64))
bhCfg.TransactionPercentileF = uint16(50)
geCfg := &gas.MockGasEstimatorConfig{}
geCfg.EIP1559DynamicFeesF = false
geCfg.PriceMaxF = reasonablyHugeGasPrice
geCfg.PriceMinF = assets.NewWeiI(10)
bhe := newBlockHistoryEstimator(t, ethClient, cfg, geCfg, bhCfg, l1Oracle)
unreasonablyHugeGasPrice := assets.NewWeiI(1000000).Mul(big.NewInt(math.MaxInt64))
b1Hash := utils.NewHash()
blocks := []evmtypes.Block{
{
Number: 0,
Hash: b1Hash,
ParentHash: common.Hash{},
Transactions: []evmtypes.Transaction{
{GasPrice: assets.NewWeiI(50), GasLimit: 42},
{GasPrice: unreasonablyHugeGasPrice, GasLimit: 42},
{GasPrice: unreasonablyHugeGasPrice, GasLimit: 42},
{GasPrice: unreasonablyHugeGasPrice, GasLimit: 42},
{GasPrice: unreasonablyHugeGasPrice, GasLimit: 42},
{GasPrice: unreasonablyHugeGasPrice, GasLimit: 42},
{GasPrice: unreasonablyHugeGasPrice, GasLimit: 42},
{GasPrice: unreasonablyHugeGasPrice, GasLimit: 42},
{GasPrice: unreasonablyHugeGasPrice, GasLimit: 42},
},
},
}
gas.SetRollingBlockHistory(bhe, blocks)
bhe.Recalculate(testutils.Head(0))
price := gas.GetGasPrice(bhe)
require.Equal(t, reasonablyHugeGasPrice, price)
})`
$DIR/core/chains/evm/gas/block_history_estimator_test.go: `bhCfg.TransactionPercentileF = uint16(50)`
$DIR/core/chains/evm/gas/block_history_estimator_test.go: `geCfg.EIP1559DynamicFeesF = false`
$DIR/core/chains/evm/gas/block_history_estimator_test.go: `geCfg.PriceMaxF = reasonablyHugeGasPrice`
$DIR/core/chains/evm/gas/block_history_estimator_test.go: `geCfg.PriceMinF = assets.NewWeiI(10)`
$DIR/core/chains/evm/gas/block_history_estimator_test.go: `gas.SetRollingBlockHistory(bhe, blocks)`
$DIR/core/chains/evm/gas/block_history_estimator_test.go: `bhe.Recalculate(testutils.Head(0))`
$DIR/core/chains/evm/gas/block_history_estimator_test.go: `bhCfg.TransactionPercentileF = uint16(50)`
$DIR/core/chains/evm/gas/block_history_estimator_test.go: `geCfg.EIP1559DynamicFeesF = false`
$DIR/core/chains/evm/gas/block_history_estimator_test.go: `geCfg.PriceMaxF = maxGasPrice`
$DIR/core/chains/evm/gas/block_history_estimator_test.go: `geCfg.PriceMinF = assets.NewWeiI(100)`
$DIR/core/chains/evm/gas/block_history_estimator_test.go: `gas.SetRollingBlockHistory(bhe, blocks)`
$DIR/core/chains/evm/gas/block_history_estimator_test.go: `bhe.Recalculate(testutils.Head(0))`
$DIR/core/chains/evm/gas/block_history_estimator_test.go: `t.Run("does not crash or set gas price to zero if there are no transactions", func(t *testing.T) {
ethClient := testutils.NewEthClientMockWithDefaultChain(t)
l1Oracle := rollupMocks.NewL1Oracle(t)
cfg := gas.NewMockConfig()
bhCfg := newBlockHistoryConfig()
bhCfg.TransactionPercentileF = uint16(35)
geCfg := &gas.MockGasEstimatorConfig{}
geCfg.EIP1559DynamicFeesF = true
bhe := newBlockHistoryEstimator(t, ethClient, cfg, geCfg, bhCfg, l1Oracle)
blocks := []evmtypes.Block{}
gas.SetRollingBlockHistory(bhe, blocks)
bhe.Recalculate(testutils.Head(1))
blocks = []evmtypes.Block{{}} // No base fee (doesn't crash)
gas.SetRollingBlockHistory(bhe, blocks)
bhe.Recalculate(testutils.Head(1))
blocks = []evmtypes.Block{newBlockWithBaseFee()}
gas.SetRollingBlockHistory(bhe, blocks)
bhe.Recalculate(testutils.Head(1))
empty := newBlockWithBaseFee()
empty.Transactions = []evmtypes.Transaction{}
blocks = []evmtypes.Block{empty}
gas.SetRollingBlockHistory(bhe, blocks)
bhe.Recalculate(testutils.Head(1))
withOnlyLegacyTransactions := newBlockWithBaseFee()
withOnlyLegacyTransactions.Transactions = legacyTransactionsFromGasPrices(9001)
blocks = []evmtypes.Block{withOnlyLegacyTransactions}
gas.SetRollingBlockHistory(bhe, blocks)
bhe.Recalculate(testutils.Head(1))
})`
$DIR/core/chains/evm/gas/block_history_estimator_test.go: `bhCfg.TransactionPercentileF = uint16(35)`
$DIR/core/chains/evm/gas/block_history_estimator_test.go: `geCfg.EIP1559DynamicFeesF = true`
$DIR/core/chains/evm/gas/block_history_estimator_test.go: `gas.SetRollingBlockHistory(bhe, blocks)`
$DIR/core/chains/evm/gas/block_history_estimator_test.go: `bhe.Recalculate(testutils.Head(1))`
$DIR/core/chains/evm/gas/block_history_estimator_test.go: `blocks = []evmtypes.Block{{}}`
$DIR/core/chains/evm/gas/block_history_estimator_test.go: `gas.SetRollingBlockHistory(bhe, blocks)`
$DIR/core/chains/evm/gas/block_history_estimator_test.go: `bhe.Recalculate(testutils.Head(1))`
$DIR/core/chains/evm/gas/block_history_estimator_test.go: `blocks = []evmtypes.Block{newBlockWithBaseFee()}`
$DIR/core/chains/evm/gas/block_history_estimator_test.go: `gas.SetRollingBlockHistory(bhe, blocks)`
$DIR/core/chains/evm/gas/block_history_estimator_test.go: `bhe.Recalculate(testutils.Head(1))`
$DIR/core/chains/evm/gas/block_history_estimator_test.go: `empty.Transactions = []evmtypes.Transaction{}`
$DIR/core/chains/evm/gas/block_history_estimator_test.go: `blocks = []evmtypes.Block{empty}`
$DIR/core/chains/evm/gas/block_history_estimator_test.go: `gas.SetRollingBlockHistory(bhe, blocks)`
$DIR/core/chains/evm/gas/block_history_estimator_test.go: `bhe.Recalculate(testutils.Head(1))`
$DIR/core/chains/evm/gas/block_history_estimator_test.go: `withOnlyLegacyTransactions.Transactions = legacyTransactionsFromGasPrices(9001)`
$DIR/core/chains/evm/gas/block_history_estimator_test.go: `blocks = []evmtypes.Block{withOnlyLegacyTransactions}`
$DIR/core/chains/evm/gas/block_history_estimator_test.go: `gas.SetRollingBlockHistory(bhe, blocks)`
$DIR/core/chains/evm/gas/block_history_estimator_test.go: `bhe.Recalculate(testutils.Head(1))`
$DIR/core/chains/evm/gas/block_history_estimator_test.go: `t.Run("does not set tip higher than EVM.GasEstimator.PriceMax", func(t *testing.T) {
ethClient := testutils.NewEthClientMockWithDefaultChain(t)
l1Oracle := rollupMocks.NewL1Oracle(t)
cfg := gas.NewMockConfig()
bhCfg := newBlockHistoryConfig()
bhCfg.TransactionPercentileF = uint16(35)
geCfg := &gas.MockGasEstimatorConfig{}
geCfg.EIP1559DynamicFeesF = true
geCfg.PriceMaxF = maxGasPrice
geCfg.PriceMinF = assets.NewWeiI(0)
geCfg.TipCapMinF = assets.NewWeiI(0)
bhe := newBlockHistoryEstimator(t, ethClient, cfg, geCfg, bhCfg, l1Oracle)
blocks := []evmtypes.Block{
{
BaseFeePerGas: assets.NewWeiI(1),
Number: 0,
Hash: utils.NewHash(),
Transactions: dynamicFeeTransactionsFromTipCaps(9001),
},
{
BaseFeePerGas: assets.NewWeiI(1),
Number: 1,
Hash: utils.NewHash(),
Transactions: dynamicFeeTransactionsFromTipCaps(9002),
},
}
gas.SetRollingBlockHistory(bhe, blocks)
bhe.Recalculate(testutils.Head(1))
tipCap := gas.GetTipCap(bhe)
require.Equal(t, tipCap.Int64(), maxGasPrice.Int64())
})`
$DIR/core/chains/evm/gas/block_history_estimator_test.go: `bhCfg.TransactionPercentileF = uint16(35)`
$DIR/core/chains/evm/gas/block_history_estimator_test.go: `geCfg.EIP1559DynamicFeesF = true`
$DIR/core/chains/evm/gas/block_history_estimator_test.go: `geCfg.PriceMaxF = maxGasPrice`
$DIR/core/chains/evm/gas/block_history_estimator_test.go: `geCfg.PriceMinF = assets.NewWeiI(0)`
$DIR/core/chains/evm/gas/block_history_estimator_test.go: `geCfg.TipCapMinF = assets.NewWeiI(0)`
$DIR/core/chains/evm/gas/block_history_estimator_test.go: `gas.SetRollingBlockHistory(bhe, blocks)`
$DIR/core/chains/evm/gas/block_history_estimator_test.go: `bhe.Recalculate(testutils.Head(1))`
$DIR/core/chains/evm/gas/block_history_estimator_test.go: `t.Run("sets tip cap to EVM.GasEstimator.TipCapMin if the calculation would otherwise fall below it", func(t *testing.T) {
ethClient := testutils.NewEthClientMockWithDefaultChain(t)
l1Oracle := rollupMocks.NewL1Oracle(t)
cfg := gas.NewMockConfig()
bhCfg := newBlockHistoryConfig()
bhCfg.TransactionPercentileF = uint16(35)
geCfg := &gas.MockGasEstimatorConfig{}
geCfg.EIP1559DynamicFeesF = true
geCfg.PriceMaxF = maxGasPrice
geCfg.PriceMinF = assets.NewWeiI(0)
geCfg.TipCapMinF = assets.NewWeiI(10)
bhe := newBlockHistoryEstimator(t, ethClient, cfg, geCfg, bhCfg, l1Oracle)
blocks := []evmtypes.Block{
{
BaseFeePerGas: assets.NewWeiI(1),
Number: 0,
Hash: utils.NewHash(),
Transactions: dynamicFeeTransactionsFromTipCaps(5),
},
{
BaseFeePerGas: assets.NewWeiI(1),
Number: 1,
Hash: utils.NewHash(),
Transactions: dynamicFeeTransactionsFromTipCaps(7),
},
}
gas.SetRollingBlockHistory(bhe, blocks)
bhe.Recalculate(testutils.Head(1))
price := gas.GetTipCap(bhe)
require.Equal(t, assets.NewWeiI(10), price)
})`
$DIR/core/chains/evm/gas/block_history_estimator_test.go: `bhCfg.TransactionPercentileF = uint16(35)`
$DIR/core/chains/evm/gas/block_history_estimator_test.go: `geCfg.EIP1559DynamicFeesF = true`
$DIR/core/chains/evm/gas/block_history_estimator_test.go: `geCfg.PriceMaxF = maxGasPrice`
$DIR/core/chains/evm/gas/block_history_estimator_test.go: `geCfg.PriceMinF = assets.NewWeiI(0)`
$DIR/core/chains/evm/gas/block_history_estimator_test.go: `geCfg.TipCapMinF = assets.NewWeiI(10)`
$DIR/core/chains/evm/gas/block_history_estimator_test.go: `gas.SetRollingBlockHistory(bhe, blocks)`
$DIR/core/chains/evm/gas/block_history_estimator_test.go: `bhe.Recalculate(testutils.Head(1))`
$DIR/core/chains/evm/gas/block_history_estimator_test.go: `t.Run("ignores any transaction with a zero gas limit", func(t *testing.T) {
ethClient := testutils.NewEthClientMockWithDefaultChain(t)
l1Oracle := rollupMocks.NewL1Oracle(t)
cfg := gas.NewMockConfig()
bhCfg := newBlockHistoryConfig()
bhCfg.TransactionPercentileF = uint16(95)
geCfg := &gas.MockGasEstimatorConfig{}
geCfg.EIP1559DynamicFeesF = true
geCfg.PriceMaxF = maxGasPrice
geCfg.PriceMinF = assets.NewWeiI(0)
geCfg.TipCapMinF = assets.NewWeiI(10)
bhe := newBlockHistoryEstimator(t, ethClient, cfg, geCfg, bhCfg, l1Oracle)
b1Hash := utils.NewHash()
b2Hash := utils.NewHash()
blocks := []evmtypes.Block{
{
Number: 0,
Hash: b1Hash,
ParentHash: common.Hash{},
Transactions: legacyTransactionsFromGasPrices(50),
},
{
BaseFeePerGas: assets.NewWeiI(10),
Number: 1,
Hash: b2Hash,
ParentHash: b1Hash,
Transactions: []evmtypes.Transaction{{Type: 0x2, MaxFeePerGas: assets.NewWeiI(1000), MaxPriorityFeePerGas: assets.NewWeiI(60), GasLimit: 42}},
},
{
Number: 2,
Hash: utils.NewHash(),
ParentHash: b2Hash,
Transactions: []evmtypes.Transaction{{Type: 0x2, MaxFeePerGas: assets.NewWeiI(1000), MaxPriorityFeePerGas: assets.NewWeiI(80), GasLimit: 0}},
},
}
gas.SetRollingBlockHistory(bhe, blocks)
bhe.Recalculate(testutils.Head(2))
price := gas.GetTipCap(bhe)
require.Equal(t, assets.NewWeiI(60), price)
})`
$DIR/core/chains/evm/gas/block_history_estimator_test.go: `bhCfg.TransactionPercentileF = uint16(95)`
$DIR/core/chains/evm/gas/block_history_estimator_test.go: `geCfg.EIP1559DynamicFeesF = true`
$DIR/core/chains/evm/gas/block_history_estimator_test.go: `geCfg.PriceMaxF = maxGasPrice`
$DIR/core/chains/evm/gas/block_history_estimator_test.go: `geCfg.PriceMinF = assets.NewWeiI(0)`
$DIR/core/chains/evm/gas/block_history_estimator_test.go: `geCfg.TipCapMinF = assets.NewWeiI(10)`
$DIR/core/chains/evm/gas/block_history_estimator_test.go: `gas.SetRollingBlockHistory(bhe, blocks)`
$DIR/core/chains/evm/gas/block_history_estimator_test.go: `bhe.Recalculate(testutils.Head(2))`
$DIR/core/chains/evm/gas/block_history_estimator_test.go: `t.Run("respects minimum gas tip cap", func(t *testing.T) {
ethClient := testutils.NewEthClientMockWithDefaultChain(t)
l1Oracle := rollupMocks.NewL1Oracle(t)
cfg := gas.NewMockConfig()
bhCfg := newBlockHistoryConfig()
bhCfg.TransactionPercentileF = uint16(35)
geCfg := &gas.MockGasEstimatorConfig{}
geCfg.EIP1559DynamicFeesF = true
geCfg.PriceMaxF = maxGasPrice
geCfg.PriceMinF = assets.NewWeiI(0)
geCfg.TipCapMinF = assets.NewWeiI(1)
bhe := newBlockHistoryEstimator(t, ethClient, cfg, geCfg, bhCfg, l1Oracle)
b1Hash := utils.NewHash()
blocks := []evmtypes.Block{
{
BaseFeePerGas: assets.NewWeiI(10),
Number: 0,
Hash: b1Hash,
ParentHash: common.Hash{},
Transactions: dynamicFeeTransactionsFromTipCaps(0, 0, 0, 0, 100),
},
}
gas.SetRollingBlockHistory(bhe, blocks)
bhe.Recalculate(testutils.Head(0))
price := gas.GetTipCap(bhe)
assert.Equal(t, assets.NewWeiI(1), price)
})`
$DIR/core/chains/evm/gas/block_history_estimator_test.go: `bhCfg.TransactionPercentileF = uint16(35)`
$DIR/core/chains/evm/gas/block_history_estimator_test.go: `geCfg.EIP1559DynamicFeesF = true`
$DIR/core/chains/evm/gas/block_history_estimator_test.go: `geCfg.PriceMaxF = maxGasPrice`
$DIR/core/chains/evm/gas/block_history_estimator_test.go: `geCfg.PriceMinF = assets.NewWeiI(0)`
$DIR/core/chains/evm/gas/block_history_estimator_test.go: `geCfg.TipCapMinF = assets.NewWeiI(1)`
$DIR/core/chains/evm/gas/block_history_estimator_test.go: `gas.SetRollingBlockHistory(bhe, blocks)`
$DIR/core/chains/evm/gas/block_history_estimator_test.go: `bhe.Recalculate(testutils.Head(0))`
$DIR/core/chains/evm/gas/block_history_estimator_test.go: `bhCfg.TransactionPercentileF = uint16(35)`
$DIR/core/chains/evm/gas/block_history_estimator_test.go: `geCfg.EIP1559DynamicFeesF = true`
$DIR/core/chains/evm/gas/block_history_estimator_test.go: `geCfg.PriceMaxF = maxGasPrice`
$DIR/core/chains/evm/gas/block_history_estimator_test.go: `geCfg.PriceMinF = assets.NewWeiI(0)`
$DIR/core/chains/evm/gas/block_history_estimator_test.go: `geCfg.TipCapMinF = assets.NewWeiI(0)`
$DIR/core/chains/evm/gas/block_history_estimator_test.go: `gas.SetRollingBlockHistory(bhe, blocks)`
$DIR/core/chains/evm/gas/block_history_estimator_test.go: `bhe.Recalculate(testutils.Head(0))`
$DIR/core/chains/evm/gas/block_history_estimator_test.go: `geCfg.EIP1559DynamicFeesF = true`
$DIR/core/chains/evm/gas/block_history_estimator_test.go: `t.Run("returns false if transaction has 0 gas limit", func(t *testing.T) {
tx := evmtypes.Transaction{Type: 0x0, GasPrice: assets.NewWeiI(10), GasLimit: 0, Hash: utils.NewHash()}
assert.Equal(t, false, bhe.IsUsable(tx, block, cfg.ChainType(), geCfg.PriceMin(), logger.Test(t)))
})`
$DIR/core/chains/evm/gas/block_history_estimator_test.go: `t.Run("returns false if transaction gas limit is nil and tx type is 0x0", func(t *testing.T) {
tx := evmtypes.Transaction{Type: 0x0, GasPrice: nil, GasLimit: 42, Hash: utils.NewHash()}
assert.Equal(t, false, bhe.IsUsable(tx, block, cfg.ChainType(), geCfg.PriceMin(), logger.Test(t)))
})`
$DIR/core/chains/evm/gas/block_history_estimator_test.go: `t.Run("returns false if transaction is of type 0x7e only on Optimism", func(t *testing.T) {
cfg.ChainTypeF = "optimismBedrock"
tx := evmtypes.Transaction{Type: 0x7e, GasPrice: assets.NewWeiI(10), GasLimit: 42, Hash: utils.NewHash()}
assert.Equal(t, false, bhe.IsUsable(tx, block, cfg.ChainType(), geCfg.PriceMin(), logger.Test(t)))
cfg.ChainTypeF = ""
assert.Equal(t, true, bhe.IsUsable(tx, block, cfg.ChainType(), geCfg.PriceMin(), logger.Test(t)))
})`
$DIR/core/chains/evm/gas/block_history_estimator_test.go: `cfg.ChainTypeF = "optimismBedrock"`
$DIR/core/chains/evm/gas/block_history_estimator_test.go: `cfg.ChainTypeF = ""`
$DIR/core/chains/evm/gas/block_history_estimator_test.go: `t.Run("returns false if transaction is of type 0x7c or 0x7b only on Celo", func(t *testing.T) {
cfg.ChainTypeF = "celo"
tx := evmtypes.Transaction{Type: 0x7c, GasPrice: assets.NewWeiI(10), GasLimit: 42, Hash: utils.NewHash()}
assert.Equal(t, false, bhe.IsUsable(tx, block, cfg.ChainType(), geCfg.PriceMin(), logger.Test(t)))
tx2 := evmtypes.Transaction{Type: 0x7b, GasPrice: assets.NewWeiI(10), GasLimit: 42, Hash: utils.NewHash()}
assert.Equal(t, false, bhe.IsUsable(tx2, block, cfg.ChainType(), geCfg.PriceMin(), logger.Test(t)))
cfg.ChainTypeF = ""
assert.Equal(t, true, bhe.IsUsable(tx, block, cfg.ChainType(), geCfg.PriceMin(), logger.Test(t)))
assert.Equal(t, true, bhe.IsUsable(tx2, block, cfg.ChainType(), geCfg.PriceMin(), logger.Test(t)))
})`
$DIR/core/chains/evm/gas/block_history_estimator_test.go: `cfg.ChainTypeF = "celo"`
$DIR/core/chains/evm/gas/block_history_estimator_test.go: `cfg.ChainTypeF = ""`
$DIR/core/chains/evm/gas/block_history_estimator_test.go: `t.Run("returns false if transaction is of type 0x16 only on WeMix", func(t *testing.T) {
cfg.ChainTypeF = "wemix"
tx := evmtypes.Transaction{Type: 0x16, GasPrice: assets.NewWeiI(10), GasLimit: 42, Hash: utils.NewHash()}
assert.Equal(t, false, bhe.IsUsable(tx, block, cfg.ChainType(), geCfg.PriceMin(), logger.Test(t)))
})`
$DIR/core/chains/evm/gas/block_history_estimator_test.go: `cfg.ChainTypeF = "wemix"`
$DIR/core/chains/evm/gas/block_history_estimator_test.go: `t.Run("returns false if transaction has base fee higher than the gas price only on Celo", func(t *testing.T) {
cfg.ChainTypeF = "celo"
tx := evmtypes.Transaction{Type: 0x0, GasPrice: assets.NewWeiI(10), GasLimit: 42, Hash: utils.NewHash()}
assert.Equal(t, false, bhe.IsUsable(tx, block, cfg.ChainType(), geCfg.PriceMin(), logger.Test(t)))
tx2 := evmtypes.Transaction{Type: 0x2, MaxPriorityFeePerGas: assets.NewWeiI(200), MaxFeePerGas: assets.NewWeiI(250),
GasPrice: assets.NewWeiI(50), GasLimit: 42, Hash: utils.NewHash()}
assert.Equal(t, false, bhe.IsUsable(tx, block, cfg.ChainType(), geCfg.PriceMin(), logger.Test(t)))
cfg.ChainTypeF = ""
assert.Equal(t, true, bhe.IsUsable(tx, block, cfg.ChainType(), geCfg.PriceMin(), logger.Test(t)))
assert.Equal(t, true, bhe.IsUsable(tx2, block, cfg.ChainType(), geCfg.PriceMin(), logger.Test(t)))
})`
$DIR/core/chains/evm/gas/block_history_estimator_test.go: `cfg.ChainTypeF = "celo"`
$DIR/core/chains/evm/gas/block_history_estimator_test.go: `cfg.ChainTypeF = ""`
$DIR/core/chains/evm/gas/block_history_estimator_test.go: `cfg.ChainTypeF = string(chaintype.ChainZkSync)`
$DIR/core/chains/evm/gas/block_history_estimator_test.go: `tx.Type = 0x02`
$DIR/core/chains/evm/gas/block_history_estimator_test.go: `tx.Type = 0xff`
$DIR/core/chains/evm/gas/block_history_estimator_test.go: `cfg.ChainTypeF = ""`
$DIR/core/chains/evm/gas/block_history_estimator_test.go: `geCfg.EIP1559DynamicFeesF = true`
$DIR/core/chains/evm/gas/block_history_estimator_test.go: `eipblock.BaseFeePerGas = assets.NewWeiI(100)`
$DIR/core/chains/evm/gas/block_history_estimator_test.go: `t.Run("returns nil if block is missing base fee", func(t *testing.T) {
tx := evmtypes.Transaction{Type: 0x0, GasPrice: assets.NewWeiI(42), GasLimit: 42, Hash: utils.NewHash()}
res := bhe.EffectiveTipCap(block, tx)
assert.Nil(t, res)
})`
$DIR/core/chains/evm/gas/block_history_estimator_test.go: `t.Run("legacy transaction type infers tip cap from tx.gas_price - block.base_fee_per_gas", func(t *testing.T) {
tx := evmtypes.Transaction{Type: 0x0, GasPrice: assets.NewWeiI(142), GasLimit: 42, Hash: utils.NewHash()}
res := bhe.EffectiveTipCap(eipblock, tx)
assert.Equal(t, "42 wei", res.String())
})`
$DIR/core/chains/evm/gas/block_history_estimator_test.go: `t.Run("tx type 2 & type 3 should calculate gas price", func(t *testing.T) {
// 0x2 transaction (should use MaxPriorityFeePerGas)
tx := evmtypes.Transaction{Type: 0x2, MaxPriorityFeePerGas: assets.NewWeiI(200), MaxFeePerGas: assets.NewWeiI(250), GasLimit: 42, Hash: utils.NewHash()}
res := bhe.EffectiveTipCap(eipblock, tx)
assert.Equal(t, "200 wei", res.String())
// 0x2 transaction (should use MaxPriorityFeePerGas, ignoring gas price)
tx = evmtypes.Transaction{Type: 0x2, GasPrice: assets.NewWeiI(400), MaxPriorityFeePerGas: assets.NewWeiI(200), MaxFeePerGas: assets.NewWeiI(350), GasLimit: 42, Hash: utils.NewHash()}
res = bhe.EffectiveTipCap(eipblock, tx)
assert.Equal(t, "200 wei", res.String())
// 0x3 transaction (should use MaxPriorityFeePerGas)
tx = evmtypes.Transaction{Type: 0x3, MaxPriorityFeePerGas: assets.NewWeiI(100), MaxFeePerGas: assets.NewWeiI(250), GasLimit: 42, Hash: utils.NewHash()}
res = bhe.EffectiveTipCap(eipblock, tx)
assert.Equal(t, "100 wei", res.String())
// 0x3 transaction (should use MaxPriorityFeePerGas, ignoring gas price)
tx = evmtypes.Transaction{Type: 0x3, GasPrice: assets.NewWeiI(400), MaxPriorityFeePerGas: assets.NewWeiI(100), MaxFeePerGas: assets.NewWeiI(350), GasLimit: 42, Hash: utils.NewHash()}
res = bhe.EffectiveTipCap(eipblock, tx)
assert.Equal(t, "100 wei", res.String())
})`
$DIR/core/chains/evm/gas/block_history_estimator_test.go: `tx = evmtypes.Transaction{Type: 0x2, GasPrice: assets.NewWeiI(400), MaxPriorityFeePerGas: assets.NewWeiI(200), MaxFeePerGas: assets.NewWeiI(350), GasLimit: 42, Hash: utils.NewHash()}`
$DIR/core/chains/evm/gas/block_history_estimator_test.go: `res = bhe.EffectiveTipCap(eipblock, tx)`
$DIR/core/chains/evm/gas/block_history_estimator_test.go: `tx = evmtypes.Transaction{Type: 0x3, MaxPriorityFeePerGas: assets.NewWeiI(100), MaxFeePerGas: assets.NewWeiI(250), GasLimit: 42, Hash: utils.NewHash()}`
$DIR/core/chains/evm/gas/block_history_estimator_test.go: `res = bhe.EffectiveTipCap(eipblock, tx)`
$DIR/core/chains/evm/gas/block_history_estimator_test.go: `tx = evmtypes.Transaction{Type: 0x3, GasPrice: assets.NewWeiI(400), MaxPriorityFeePerGas: assets.NewWeiI(100), MaxFeePerGas: assets.NewWeiI(350), GasLimit: 42, Hash: utils.NewHash()}`
$DIR/core/chains/evm/gas/block_history_estimator_test.go: `res = bhe.EffectiveTipCap(eipblock, tx)`
$DIR/core/chains/evm/gas/block_history_estimator_test.go: `t.Run("missing field returns nil", func(t *testing.T) {
tx := evmtypes.Transaction{Type: 0x2, GasPrice: assets.NewWeiI(132), MaxFeePerGas: assets.NewWeiI(200), GasLimit: 42, Hash: utils.NewHash()}
res := bhe.EffectiveTipCap(eipblock, tx)
assert.Nil(t, res)
})`
$DIR/core/chains/evm/gas/block_history_estimator_test.go: `geCfg.EIP1559DynamicFeesF = false`
$DIR/core/chains/evm/gas/block_history_estimator_test.go: `eipblock.BaseFeePerGas = assets.NewWeiI(100)`
$DIR/core/chains/evm/gas/block_history_estimator_test.go: `t.Run("legacy transaction type should use GasPrice", func(t *testing.T) {
tx := evmtypes.Transaction{Type: 0x0, GasPrice: assets.NewWeiI(42), GasLimit: 42, Hash: utils.NewHash()}
res := bhe.EffectiveGasPrice(eipblock, tx)
assert.Equal(t, "42 wei", res.String())
tx = evmtypes.Transaction{Type: 0x0, GasLimit: 42, Hash: utils.NewHash()}
res = bhe.EffectiveGasPrice(eipblock, tx)
assert.Nil(t, res)
tx = evmtypes.Transaction{Type: 0x1, GasPrice: assets.NewWeiI(42), GasLimit: 42, Hash: utils.NewHash()}
res = bhe.EffectiveGasPrice(eipblock, tx)
assert.Equal(t, "42 wei", res.String())
})`
$DIR/core/chains/evm/gas/block_history_estimator_test.go: `tx = evmtypes.Transaction{Type: 0x0, GasLimit: 42, Hash: utils.NewHash()}`
$DIR/core/chains/evm/gas/block_history_estimator_test.go: `res = bhe.EffectiveGasPrice(eipblock, tx)`
$DIR/core/chains/evm/gas/block_history_estimator_test.go: `tx = evmtypes.Transaction{Type: 0x1, GasPrice: assets.NewWeiI(42), GasLimit: 42, Hash: utils.NewHash()}`
$DIR/core/chains/evm/gas/block_history_estimator_test.go: `res = bhe.EffectiveGasPrice(eipblock, tx)`
$DIR/core/chains/evm/gas/block_history_estimator_test.go: `t.Run("tx type 2 should calculate gas price", func(t *testing.T) {
// 0x2 transaction (should calculate to 250)
tx := evmtypes.Transaction{Type: 0x2, MaxPriorityFeePerGas: assets.NewWeiI(200), MaxFeePerGas: assets.NewWeiI(250), GasLimit: 42, Hash: utils.NewHash()}
res := bhe.EffectiveGasPrice(eipblock, tx)
assert.Equal(t, "250 wei", res.String())
// 0x2 transaction (should calculate to 300)
tx = evmtypes.Transaction{Type: 0x2, MaxPriorityFeePerGas: assets.NewWeiI(200), MaxFeePerGas: assets.NewWeiI(350), GasLimit: 42, Hash: utils.NewHash()}
res = bhe.EffectiveGasPrice(eipblock, tx)
assert.Equal(t, "300 wei", res.String())
// 0x2 transaction (should calculate to 300, ignoring gas price)
tx = evmtypes.Transaction{Type: 0x2, MaxPriorityFeePerGas: assets.NewWeiI(200), MaxFeePerGas: assets.NewWeiI(350), GasLimit: 42, Hash: utils.NewHash()}
res = bhe.EffectiveGasPrice(eipblock, tx)
assert.Equal(t, "300 wei", res.String())
// 0x2 transaction (should fall back to gas price since MaxFeePerGas is missing)
tx = evmtypes.Transaction{Type: 0x2, GasPrice: assets.NewWeiI(32), MaxPriorityFeePerGas: assets.NewWeiI(200), GasLimit: 42, Hash: utils.NewHash()}
res = bhe.EffectiveGasPrice(eipblock, tx)
assert.Equal(t, "32 wei", res.String())
})`
$DIR/core/chains/evm/gas/block_history_estimator_test.go: `tx = evmtypes.Transaction{Type: 0x2, MaxPriorityFeePerGas: assets.NewWeiI(200), MaxFeePerGas: assets.NewWeiI(350), GasLimit: 42, Hash: utils.NewHash()}`
$DIR/core/chains/evm/gas/block_history_estimator_test.go: `res = bhe.EffectiveGasPrice(eipblock, tx)`
$DIR/core/chains/evm/gas/block_history_estimator_test.go: `tx = evmtypes.Transaction{Type: 0x2, MaxPriorityFeePerGas: assets.NewWeiI(200), MaxFeePerGas: assets.NewWeiI(350), GasLimit: 42, Hash: utils.NewHash()}`
$DIR/core/chains/evm/gas/block_history_estimator_test.go: `res = bhe.EffectiveGasPrice(eipblock, tx)`
$DIR/core/chains/evm/gas/block_history_estimator_test.go: `tx = evmtypes.Transaction{Type: 0x2, GasPrice: assets.NewWeiI(32), MaxPriorityFeePerGas: assets.NewWeiI(200), GasLimit: 42, Hash: utils.NewHash()}`
$DIR/core/chains/evm/gas/block_history_estimator_test.go: `res = bhe.EffectiveGasPrice(eipblock, tx)`
$DIR/core/chains/evm/gas/block_history_estimator_test.go: `t.Run("tx type 3 should calculate gas price", func(t *testing.T) {
// 0x3 transaction (should calculate to 250)
tx := evmtypes.Transaction{Type: 0x3, MaxPriorityFeePerGas: assets.NewWeiI(100), MaxFeePerGas: assets.NewWeiI(110), GasLimit: 42, Hash: utils.NewHash()}
res := bhe.EffectiveGasPrice(eipblock, tx)
assert.Equal(t, "110 wei", res.String())
// 0x3 transaction (should calculate to 300)
tx = evmtypes.Transaction{Type: 0x3, MaxPriorityFeePerGas: assets.NewWeiI(200), MaxFeePerGas: assets.NewWeiI(350), GasLimit: 42, Hash: utils.NewHash()}
res = bhe.EffectiveGasPrice(eipblock, tx)
assert.Equal(t, "300 wei", res.String())
// 0x3 transaction (should calculate to 300, ignoring gas price)
tx = evmtypes.Transaction{Type: 0x3, MaxPriorityFeePerGas: assets.NewWeiI(200), MaxFeePerGas: assets.NewWeiI(350), GasLimit: 42, Hash: utils.NewHash()}
res = bhe.EffectiveGasPrice(eipblock, tx)
assert.Equal(t, "300 wei", res.String())
// 0x3 transaction (should fall back to gas price since MaxFeePerGas is missing)
tx = evmtypes.Transaction{Type: 0x3, GasPrice: assets.NewWeiI(5), MaxPriorityFeePerGas: assets.NewWeiI(200), GasLimit: 42, Hash: utils.NewHash()}
res = bhe.EffectiveGasPrice(eipblock, tx)
assert.Equal(t, "5 wei", res.String())
})`
$DIR/core/chains/evm/gas/block_history_estimator_test.go: `tx = evmtypes.Transaction{Type: 0x3, MaxPriorityFeePerGas: assets.NewWeiI(200), MaxFeePerGas: assets.NewWeiI(350), GasLimit: 42, Hash: utils.NewHash()}`
$DIR/core/chains/evm/gas/block_history_estimator_test.go: `res = bhe.EffectiveGasPrice(eipblock, tx)`
$DIR/core/chains/evm/gas/block_history_estimator_test.go: `tx = evmtypes.Transaction{Type: 0x3, MaxPriorityFeePerGas: assets.NewWeiI(200), MaxFeePerGas: assets.NewWeiI(350), GasLimit: 42, Hash: utils.NewHash()}`
$DIR/core/chains/evm/gas/block_history_estimator_test.go: `res = bhe.EffectiveGasPrice(eipblock, tx)`
$DIR/core/chains/evm/gas/block_history_estimator_test.go: `tx = evmtypes.Transaction{Type: 0x3, GasPrice: assets.NewWeiI(5), MaxPriorityFeePerGas: assets.NewWeiI(200), GasLimit: 42, Hash: utils.NewHash()}`
$DIR/core/chains/evm/gas/block_history_estimator_test.go: `res = bhe.EffectiveGasPrice(eipblock, tx)`
$DIR/core/chains/evm/gas/block_history_estimator_test.go: `t.Run("tx type 2 has block missing base fee (should never happen but must handle gracefully)", func(t *testing.T) {
// 0x2 transaction (should calculate to 250)
tx := evmtypes.Transaction{Type: 0x2, GasPrice: assets.NewWeiI(55555), MaxPriorityFeePerGas: assets.NewWeiI(200), MaxFeePerGas: assets.NewWeiI(250), GasLimit: 42, Hash: utils.NewHash()}
res := bhe.EffectiveGasPrice(block, tx)
assert.Equal(t, "55.555 kwei", res.String())
})`
$DIR/core/chains/evm/gas/block_history_estimator_test.go: `t.Run("unknown type returns nil", func(t *testing.T) {
tx := evmtypes.Transaction{Type: 0x4, GasPrice: assets.NewWeiI(55555), MaxPriorityFeePerGas: assets.NewWeiI(200), MaxFeePerGas: assets.NewWeiI(250), GasLimit: 42, Hash: utils.NewHash()}
res := bhe.EffectiveGasPrice(block, tx)
assert.Nil(t, res)
})`
$DIR/core/chains/evm/gas/block_history_estimator_test.go: `t.Run("Assumption violation of MaxFeePerGas >= BaseFeePerGas returns gas price if specified", func(t *testing.T) {
// Max: 1, Base: 100
tx := evmtypes.Transaction{Type: 0x2, GasPrice: assets.NewWeiI(42), MaxPriorityFeePerGas: assets.NewWeiI(1), MaxFeePerGas: assets.NewWeiI(1), GasLimit: 42, Hash: utils.NewHash()}
res := bhe.EffectiveGasPrice(eipblock, tx)
assert.Equal(t, "42 wei", res.String())
})`
$DIR/core/chains/evm/gas/block_history_estimator_test.go: `t.Run("Assumption violation of MaxFeePerGas >= MaxPriorityFeePerGas returns gas price if specified", func(t *testing.T) {
// Max Priority: 201, Max: 200, Base: 100
tx := evmtypes.Transaction{Type: 0x2, GasPrice: assets.NewWeiI(42), MaxPriorityFeePerGas: assets.NewWeiI(201), MaxFeePerGas: assets.NewWeiI(200), GasLimit: 42, Hash: utils.NewHash()}
res := bhe.EffectiveGasPrice(eipblock, tx)
assert.Equal(t, "42 wei", res.String())
})`
$DIR/core/chains/evm/gas/block_history_estimator_test.go: `t.Run("Assumption violation of MaxFeePerGas >= BaseFeePerGas returns nil if no gas price is specified", func(t *testing.T) {
// Max: 1, Base: 100
tx := evmtypes.Transaction{Type: 0x2, MaxPriorityFeePerGas: assets.NewWeiI(1), MaxFeePerGas: assets.NewWeiI(1), GasLimit: 42, Hash: utils.NewHash()}
res := bhe.EffectiveGasPrice(eipblock, tx)
assert.Nil(t, res)
})`
$DIR/core/chains/evm/gas/block_history_estimator_test.go: `bhCfg.TransactionPercentileF = uint16(35)`
$DIR/core/chains/evm/gas/block_history_estimator_test.go: `bhCfg.CheckInclusionBlocksF = uint16(0)`
$DIR/core/chains/evm/gas/block_history_estimator_test.go: `bhCfg.BlockHistorySizeF = uint16(8)`
$DIR/core/chains/evm/gas/block_history_estimator_test.go: `geCfg.EIP1559DynamicFeesF = false`
$DIR/core/chains/evm/gas/block_history_estimator_test.go: `geCfg.PriceMaxF = maxGasPrice`
$DIR/core/chains/evm/gas/block_history_estimator_test.go: `geCfg.PriceMinF = assets.NewWeiI(0)`
$DIR/core/chains/evm/gas/block_history_estimator_test.go: `gas.SetRollingBlockHistory(bhe, blocks)`
$DIR/core/chains/evm/gas/block_history_estimator_test.go: `bhe.Recalculate(testutils.Head(1))`
$DIR/core/chains/evm/gas/block_history_estimator_test.go: `gas.SimulateStart(t, bhe)`
$DIR/core/chains/evm/gas/block_history_estimator_test.go: `t.Run("if gas price is lower than global max and user specified max gas price", func(t *testing.T) {
fee, limit, err := bhe.GetLegacyGas(tests.Context(t), make([]byte, 0), 10000, maxGasPrice)
require.NoError(t, err)
assert.Equal(t, assets.NewWeiI(1000), fee)
assert.Equal(t, 10000, int(limit))
})`
$DIR/core/chains/evm/gas/block_history_estimator_test.go: `t.Run("if gas price is higher than user-specified max", func(t *testing.T) {
fee, limit, err := bhe.GetLegacyGas(tests.Context(t), make([]byte, 0), 10000, assets.NewWeiI(800))
require.NoError(t, err)
assert.Equal(t, assets.NewWeiI(800), fee)
assert.Equal(t, 10000, int(limit))
})`
$DIR/core/chains/evm/gas/block_history_estimator_test.go: `bhCfg.TransactionPercentileF = uint16(35)`
$DIR/core/chains/evm/gas/block_history_estimator_test.go: `cfg = gas.NewMockConfig()`
$DIR/core/chains/evm/gas/block_history_estimator_test.go: `geCfg.PriceMaxF = assets.NewWeiI(700)`
$DIR/core/chains/evm/gas/block_history_estimator_test.go: `geCfg.PriceMinF = assets.NewWeiI(0)`
$DIR/core/chains/evm/gas/block_history_estimator_test.go: `geCfg.EIP1559DynamicFeesF = false`
$DIR/core/chains/evm/gas/block_history_estimator_test.go: `bhe = newBlockHistoryEstimator(t, nil, cfg, geCfg, bhCfg, l1Oracle)`
$DIR/core/chains/evm/gas/block_history_estimator_test.go: `gas.SetRollingBlockHistory(bhe, blocks)`
$DIR/core/chains/evm/gas/block_history_estimator_test.go: `bhe.Recalculate(testutils.Head(1))`
$DIR/core/chains/evm/gas/block_history_estimator_test.go: `gas.SimulateStart(t, bhe)`
$DIR/core/chains/evm/gas/block_history_estimator_test.go: `t.Run("fallbacks to EvmGasPriceDefault if there aren't any valid transactions to estimate from.", func(t *testing.T) {
cfg := gas.NewMockConfig()
bhCfg := newBlockHistoryConfig()
bhCfg.BatchSizeF = batchSize
bhCfg.TransactionPercentileF = uint16(35)
bhCfg.BlockDelayF = blockDelay
bhCfg.BlockHistorySizeF = historySize
geCfg := &gas.MockGasEstimatorConfig{}
geCfg.EIP1559DynamicFeesF = false
geCfg.PriceMaxF = assets.NewWeiI(1000000)
geCfg.PriceDefaultF = assets.NewWeiI(100)
ethClient := testutils.NewEthClientMockWithDefaultChain(t)
l1Oracle := rollupMocks.NewL1Oracle(t)
bhe := newBlockHistoryEstimator(t, ethClient, cfg, geCfg, bhCfg, l1Oracle)
h := &evmtypes.Head{Hash: utils.NewHash(), Number: 42, BaseFeePerGas: nil}
ethClient.On("HeadByNumber", mock.Anything, (*big.Int)(nil)).Return(h, nil)
ethClient.On("BatchCallContext", mock.Anything, mock.MatchedBy(func(b []rpc.BatchElem) bool {
return len(b) == 3 &&
b[0].Method == "eth_getBlockByNumber" && b[0].Args[0] == gas.Int64ToHex(42) && b[0].Args[1].(bool) && reflect.TypeOf(b[0].Result) == reflect.TypeOf(&evmtypes.Block{}) &&
b[1].Method == "eth_getBlockByNumber" && b[1].Args[0] == gas.Int64ToHex(41) && b[1].Args[1].(bool) && reflect.TypeOf(b[1].Result) == reflect.TypeOf(&evmtypes.Block{}) &&
b[2].Method == "eth_getBlockByNumber" && b[2].Args[0] == gas.Int64ToHex(40) && b[1].Args[1].(bool) && reflect.TypeOf(b[2].Result) == reflect.TypeOf(&evmtypes.Block{})
})).Return(nil).Run(func(args mock.Arguments) {
elems := args.Get(1).([]rpc.BatchElem)
elems[0].Result = &evmtypes.Block{
Number: 42,
Hash: utils.NewHash(),
}
elems[1].Result = &evmtypes.Block{
Number: 41,
Hash: utils.NewHash(),
}
elems[2].Result = &evmtypes.Block{
Number: 40,
Hash: utils.NewHash(),
Transactions: legacyTransactionsFromGasPricesTxType(specialTxTypeCode, 1),
}
}).Once()
err := bhe.Start(tests.Context(t))
require.NoError(t, err)
fee, limit, err := bhe.GetLegacyGas(tests.Context(t), make([]byte, 0), 10000, assets.NewWeiI(800))
require.NoError(t, err)
require.Equal(t, geCfg.PriceDefault(), fee)
assert.Equal(t, 10000, int(limit))
})`
$DIR/core/chains/evm/gas/block_history_estimator_test.go: `bhCfg.BatchSizeF = batchSize`
$DIR/core/chains/evm/gas/block_history_estimator_test.go: `bhCfg.TransactionPercentileF = uint16(35)`
$DIR/core/chains/evm/gas/block_history_estimator_test.go: `bhCfg.BlockDelayF = blockDelay`
$DIR/core/chains/evm/gas/block_history_estimator_test.go: `bhCfg.BlockHistorySizeF = historySize`
$DIR/core/chains/evm/gas/block_history_estimator_test.go: `geCfg.EIP1559DynamicFeesF = false`
$DIR/core/chains/evm/gas/block_history_estimator_test.go: `geCfg.PriceMaxF = assets.NewWeiI(1000000)`
$DIR/core/chains/evm/gas/block_history_estimator_test.go: `geCfg.PriceDefaultF = assets.NewWeiI(100)`
$DIR/core/chains/evm/gas/block_history_estimator_test.go: `ethClient.On("HeadByNumber", mock.Anything, (*big.Int)(nil)).Return(h, nil)`
$DIR/core/chains/evm/gas/block_history_estimator_test.go: `ethClient.On("BatchCallContext", mock.Anything, mock.MatchedBy(func(b []rpc.BatchElem) bool {
return len(b) == 3 &&
b[0].Method == "eth_getBlockByNumber" && b[0].Args[0] == gas.Int64ToHex(42) && b[0].Args[1].(bool) && reflect.TypeOf(b[0].Result) == reflect.TypeOf(&evmtypes.Block{}) &&
b[1].Method == "eth_getBlockByNumber" && b[1].Args[0] == gas.Int64ToHex(41) && b[1].Args[1].(bool) && reflect.TypeOf(b[1].Result) == reflect.TypeOf(&evmtypes.Block{}) &&
b[2].Method == "eth_getBlockByNumber" && b[2].Args[0] == gas.Int64ToHex(40) && b[1].Args[1].(bool) && reflect.TypeOf(b[2].Result) == reflect.TypeOf(&evmtypes.Block{})
})).Return(nil).Run(func(args mock.Arguments) {
elems := args.Get(1).([]rpc.BatchElem)
elems[0].Result = &evmtypes.Block{
Number: 42,
Hash: utils.NewHash(),
}
elems[1].Result = &evmtypes.Block{
Number: 41,
Hash: utils.NewHash(),
}
elems[2].Result = &evmtypes.Block{
Number: 40,
Hash: utils.NewHash(),
Transactions: legacyTransactionsFromGasPricesTxType(specialTxTypeCode, 1),
}
}).Once()`
$DIR/core/chains/evm/gas/block_history_estimator_test.go: `elems[0].Result = &evmtypes.Block{
Number: 42,
Hash: utils.NewHash(),
}`
$DIR/core/chains/evm/gas/block_history_estimator_test.go: `elems[1].Result = &evmtypes.Block{
Number: 41,
Hash: utils.NewHash(),
}`
$DIR/core/chains/evm/gas/block_history_estimator_test.go: `elems[2].Result = &evmtypes.Block{
Number: 40,
Hash: utils.NewHash(),
Transactions: legacyTransactionsFromGasPricesTxType(specialTxTypeCode, 1),
}`
$DIR/core/chains/evm/gas/block_history_estimator_test.go: `bhCfg.BatchSizeF = batchSize`
$DIR/core/chains/evm/gas/block_history_estimator_test.go: `bhCfg.TransactionPercentileF = uint16(35)`
$DIR/core/chains/evm/gas/block_history_estimator_test.go: `bhCfg.BlockDelayF = blockDelay`
$DIR/core/chains/evm/gas/block_history_estimator_test.go: `bhCfg.BlockHistorySizeF = historySize`
$DIR/core/chains/evm/gas/block_history_estimator_test.go: `bhCfg.EIP1559FeeCapBufferBlocksF = uint16(4)`
$DIR/core/chains/evm/gas/block_history_estimator_test.go: `geCfg.EIP1559DynamicFeesF = true`
$DIR/core/chains/evm/gas/block_history_estimator_test.go: `geCfg.PriceMaxF = assets.NewWeiI(1000000)`
$DIR/core/chains/evm/gas/block_history_estimator_test.go: `geCfg.PriceDefaultF = assets.NewWeiI(100)`
$DIR/core/chains/evm/gas/block_history_estimator_test.go: `geCfg.TipCapDefaultF = assets.NewWeiI(50)`
$DIR/core/chains/evm/gas/block_history_estimator_test.go: `geCfg.BumpThresholdF = uint64(1)`
$DIR/core/chains/evm/gas/block_history_estimator_test.go: `ethClient.On("HeadByNumber", mock.Anything, (*big.Int)(nil)).Return(h, nil)`
$DIR/core/chains/evm/gas/block_history_estimator_test.go: `ethClient.On("BatchCallContext", mock.Anything, mock.MatchedBy(func(b []rpc.BatchElem) bool {
return len(b) == 3 &&
b[0].Method == "eth_getBlockByNumber" && b[0].Args[0] == gas.Int64ToHex(42) && b[0].Args[1].(bool) && reflect.TypeOf(b[0].Result) == reflect.TypeOf(&evmtypes.Block{}) &&
b[1].Method == "eth_getBlockByNumber" && b[1].Args[0] == gas.Int64ToHex(41) && b[1].Args[1].(bool) && reflect.TypeOf(b[1].Result) == reflect.TypeOf(&evmtypes.Block{}) &&
b[2].Method == "eth_getBlockByNumber" && b[2].Args[0] == gas.Int64ToHex(40) && b[1].Args[1].(bool) && reflect.TypeOf(b[2].Result) == reflect.TypeOf(&evmtypes.Block{})
})).Return(nil).Run(func(args mock.Arguments) {
elems := args.Get(1).([]rpc.BatchElem)
elems[0].Result = &evmtypes.Block{
Number: 42,
Hash: utils.NewHash(),
}
elems[1].Result = &evmtypes.Block{
Number: 41,
Hash: utils.NewHash(),
}
elems[2].Result = &evmtypes.Block{
Number: 40,
Hash: utils.NewHash(),
Transactions: dynamicFeeTransactionsFromTipCapsTxType(specialTxTypeCode, 1),
}
}).Once()`
$DIR/core/chains/evm/gas/block_history_estimator_test.go: `elems[0].Result = &evmtypes.Block{
Number: 42,
Hash: utils.NewHash(),
}`
$DIR/core/chains/evm/gas/block_history_estimator_test.go: `elems[1].Result = &evmtypes.Block{
Number: 41,
Hash: utils.NewHash(),
}`
$DIR/core/chains/evm/gas/block_history_estimator_test.go: `elems[2].Result = &evmtypes.Block{
Number: 40,
Hash: utils.NewHash(),
Transactions: dynamicFeeTransactionsFromTipCapsTxType(specialTxTypeCode, 1),
}`
$DIR/core/chains/evm/gas/block_history_estimator_test.go: `bhCfg.EIP1559FeeCapBufferBlocksF = uint16(4)`
$DIR/core/chains/evm/gas/block_history_estimator_test.go: `bhCfg.TransactionPercentileF = uint16(35)`
$DIR/core/chains/evm/gas/block_history_estimator_test.go: `geCfg.EIP1559DynamicFeesF = true`
$DIR/core/chains/evm/gas/block_history_estimator_test.go: `geCfg.PriceMaxF = maxGasPrice`
$DIR/core/chains/evm/gas/block_history_estimator_test.go: `geCfg.TipCapMinF = assets.NewWeiI(0)`
$DIR/core/chains/evm/gas/block_history_estimator_test.go: `geCfg.PriceMinF = assets.NewWeiI(0)`
$DIR/core/chains/evm/gas/block_history_estimator_test.go: `gas.SetRollingBlockHistory(bhe, blocks)`
$DIR/core/chains/evm/gas/block_history_estimator_test.go: `bhe.Recalculate(testutils.Head(1))`
$DIR/core/chains/evm/gas/block_history_estimator_test.go: `gas.SimulateStart(t, bhe)`
$DIR/core/chains/evm/gas/block_history_estimator_test.go: `t.Run("if estimator is missing base fee and gas bumping is enabled", func(t *testing.T) {
geCfg.BumpThresholdF = uint64(1)
_, err := bhe.GetDynamicFee(tests.Context(t), maxGasPrice)
require.Error(t, err)
assert.Contains(t, err.Error(), "BlockHistoryEstimator: no value for latest block base fee; cannot estimate EIP-1559 base fee. Are you trying to run with EIP1559 enabled on a non-EIP1559 chain?")
})`
$DIR/core/chains/evm/gas/block_history_estimator_test.go: `geCfg.BumpThresholdF = uint64(1)`
$DIR/core/chains/evm/gas/block_history_estimator_test.go: `t.Run("if estimator is missing base fee and gas bumping is disabled", func(t *testing.T) {
geCfg.BumpThresholdF = uint64(0)
fee, err := bhe.GetDynamicFee(tests.Context(t), maxGasPrice)
require.NoError(t, err)
assert.Equal(t, gas.DynamicFee{FeeCap: maxGasPrice, TipCap: assets.NewWeiI(6000)}, fee)
})`
$DIR/core/chains/evm/gas/block_history_estimator_test.go: `geCfg.BumpThresholdF = uint64(0)`
$DIR/core/chains/evm/gas/block_history_estimator_test.go: `h.BaseFeePerGas = assets.NewWeiI(112500)`
$DIR/core/chains/evm/gas/block_history_estimator_test.go: `bhe.OnNewLongestChain(tests.Context(t), h)`
$DIR/core/chains/evm/gas/block_history_estimator_test.go: `t.Run("if gas bumping is enabled", func(t *testing.T) {
geCfg.BumpThresholdF = uint64(1)
fee, err := bhe.GetDynamicFee(tests.Context(t), maxGasPrice)
require.NoError(t, err)
assert.Equal(t, gas.DynamicFee{FeeCap: assets.NewWeiI(186203), TipCap: assets.NewWeiI(6000)}, fee)
})`
$DIR/core/chains/evm/gas/block_history_estimator_test.go: `geCfg.BumpThresholdF = uint64(1)`
$DIR/core/chains/evm/gas/block_history_estimator_test.go: `t.Run("if gas bumping is disabled", func(t *testing.T) {
geCfg.BumpThresholdF = uint64(0)
fee, err := bhe.GetDynamicFee(tests.Context(t), maxGasPrice)
require.NoError(t, err)
assert.Equal(t, gas.DynamicFee{FeeCap: maxGasPrice, TipCap: assets.NewWeiI(6000)}, fee)
})`
$DIR/core/chains/evm/gas/block_history_estimator_test.go: `geCfg.BumpThresholdF = uint64(0)`
$DIR/core/chains/evm/gas/block_history_estimator_test.go: `t.Run("if gas bumping is enabled and local max gas price set", func(t *testing.T) {
geCfg.BumpThresholdF = uint64(1)
fee, err := bhe.GetDynamicFee(tests.Context(t), assets.NewWeiI(180000))
require.NoError(t, err)
assert.Equal(t, gas.DynamicFee{FeeCap: assets.NewWeiI(180000), TipCap: assets.NewWeiI(6000)}, fee)
})`
$DIR/core/chains/evm/gas/block_history_estimator_test.go: `geCfg.BumpThresholdF = uint64(1)`
$DIR/core/chains/evm/gas/block_history_estimator_test.go: `t.Run("if bump threshold is 0 and local max gas price set", func(t *testing.T) {
geCfg.BumpThresholdF = uint64(0)
fee, err := bhe.GetDynamicFee(tests.Context(t), assets.NewWeiI(100))
require.NoError(t, err)
assert.Equal(t, gas.DynamicFee{FeeCap: assets.NewWeiI(100), TipCap: assets.NewWeiI(6000)}, fee)
})`
$DIR/core/chains/evm/gas/block_history_estimator_test.go: `geCfg.BumpThresholdF = uint64(0)`
$DIR/core/chains/evm/gas/block_history_estimator_test.go: `h = testutils.Head(1)`
$DIR/core/chains/evm/gas/block_history_estimator_test.go: `h.BaseFeePerGas = assets.NewWeiI(900000)`
$DIR/core/chains/evm/gas/block_history_estimator_test.go: `bhe.OnNewLongestChain(tests.Context(t), h)`
$DIR/core/chains/evm/gas/block_history_estimator_test.go: `geCfg.BumpThresholdF = uint64(1)`
$DIR/core/chains/evm/gas/block_history_estimator_test.go: `bhCfg.CheckInclusionBlocksF = uint16(4)`
$DIR/core/chains/evm/gas/block_history_estimator_test.go: `geCfg.EIP1559DynamicFeesF = false`
$DIR/core/chains/evm/gas/block_history_estimator_test.go: `t.Run("skips connectivity check if latest block is not present", func(t *testing.T) {
err := bhe.CheckConnectivity(attempts)
require.NoError(t, err)
tests.AssertLogEventually(t, obs, "Latest block is unknown; skipping inclusion check")
})`
$DIR/core/chains/evm/gas/block_history_estimator_test.go: `tests.AssertLogEventually(t, obs, "Latest block is unknown; skipping inclusion check")`
$DIR/core/chains/evm/gas/block_history_estimator_test.go: `h.BaseFeePerGas = assets.NewWeiI(112500)`
$DIR/core/chains/evm/gas/block_history_estimator_test.go: `bhe.OnNewLongestChain(tests.Context(t), h)`
$DIR/core/chains/evm/gas/block_history_estimator_test.go: `gas.SetRollingBlockHistory(bhe, []evmtypes.Block{b0})`
$DIR/core/chains/evm/gas/block_history_estimator_test.go: `t.Run("skips connectivity check if block history has insufficient size", func(t *testing.T) {
err := bhe.CheckConnectivity(attempts)
require.NoError(t, err)
tests.AssertLogEventually(t, obs, "Block history in memory with length 1 is insufficient to determine whether transaction should have been included within the past 4 blocks")
})`
$DIR/core/chains/evm/gas/block_history_estimator_test.go: `tests.AssertLogEventually(t, obs, "Block history in memory with length 1 is insufficient to determine whether transaction should have been included within the past 4 blocks")`
$DIR/core/chains/evm/gas/block_history_estimator_test.go: `t.Run("skips connectivity check if attempts is nil or empty", func(t *testing.T) {
err := bhe.CheckConnectivity(nil)
require.NoError(t, err)
})`
$DIR/core/chains/evm/gas/block_history_estimator_test.go: `gas.SetRollingBlockHistory(bhe, []evmtypes.Block{b0, b1, b2, b3})`
$DIR/core/chains/evm/gas/block_history_estimator_test.go: `h = testutils.Head(5)`
$DIR/core/chains/evm/gas/block_history_estimator_test.go: `h.BaseFeePerGas = assets.NewWeiI(112500)`
$DIR/core/chains/evm/gas/block_history_estimator_test.go: `bhe.OnNewLongestChain(tests.Context(t), h)`
$DIR/core/chains/evm/gas/block_history_estimator_test.go: `t.Run("returns error if one of the supplied attempts is missing BroadcastBeforeBlockNum", func(t *testing.T) {
err := bhe.CheckConnectivity(attempts)
require.Error(t, err)
assert.Contains(t, err.Error(), fmt.Sprintf("BroadcastBeforeBlockNum was unexpectedly nil for attempt %s", attempts[0].TxHash))
})`
$DIR/core/chains/evm/gas/block_history_estimator_test.go: `attempts = []gas.EvmPriorAttempt{
{TxType: 0x3, BroadcastBeforeBlockNum: &num, TxHash: hash},
}`
$DIR/core/chains/evm/gas/block_history_estimator_test.go: `t.Run("returns error if one of the supplied attempts has an unknown transaction type", func(t *testing.T) {
err := bhe.CheckConnectivity(attempts)
require.Error(t, err)
assert.Contains(t, err.Error(), fmt.Sprintf("attempt %s has unknown transaction type 0x3", hash))
})`
$DIR/core/chains/evm/gas/block_history_estimator_test.go: `attempts = []gas.EvmPriorAttempt{
{TxType: 0x0, BroadcastBeforeBlockNum: &num, TxHash: hash},
}`
$DIR/core/chains/evm/gas/block_history_estimator_test.go: `t.Run("skips connectivity check if no transactions are suitable", func(t *testing.T) {
err := bhe.CheckConnectivity(attempts)
require.NoError(t, err)
tests.AssertLogEventually(t, obs, fmt.Sprintf("no suitable transactions found to verify if transaction %s has been included within expected inclusion blocks of 4", hash))
})`
$DIR/core/chains/evm/gas/block_history_estimator_test.go: `tests.AssertLogEventually(t, obs, fmt.Sprintf("no suitable transactions found to verify if transaction %s has been included within expected inclusion blocks of 4", hash))`
$DIR/core/chains/evm/gas/block_history_estimator_test.go: `t.Run("in legacy mode", func(t *testing.T) {
b0 = evmtypes.Block{
Number: 0,
Hash: utils.NewHash(),
Transactions: legacyTransactionsFromGasPrices(1000),
}
b1 = evmtypes.Block{
Number: 1,
Hash: utils.NewHash(),
ParentHash: b0.Hash,
Transactions: legacyTransactionsFromGasPrices(2, 3, 4, 5, 6),
}
b2 = evmtypes.Block{
Number: 2,
Hash: utils.NewHash(),
ParentHash: b1.Hash,
Transactions: legacyTransactionsFromGasPrices(4, 4, 5, 5, 6, 6, 7, 7, 8, 8, 9, 9),
}
b3 = evmtypes.Block{
Number: 3,
Hash: utils.NewHash(),
ParentHash: b2.Hash,
Transactions: legacyTransactionsFromGasPrices(3, 4, 5, 6, 7),
}
gas.SetRollingBlockHistory(bhe, []evmtypes.Block{b0, b1, b2, b3})
attempts = []gas.EvmPriorAttempt{
{TxType: 0x0, TxHash: NewEvmHash(), GasPrice: assets.NewWeiI(1000), BroadcastBeforeBlockNum: ptr(int64(4))}, // This is very expensive but will be ignored due to BroadcastBeforeBlockNum being too recent
{TxType: 0x0, TxHash: NewEvmHash(), GasPrice: assets.NewWeiI(3), BroadcastBeforeBlockNum: ptr(int64(0))},
{TxType: 0x0, TxHash: NewEvmHash(), GasPrice: assets.NewWeiI(5), BroadcastBeforeBlockNum: ptr(int64(1))},
{TxType: 0x0, TxHash: NewEvmHash(), GasPrice: assets.NewWeiI(7), BroadcastBeforeBlockNum: ptr(int64(1))},
}
t.Run("passes check if all blocks have percentile price higher or exactly at the highest transaction gas price", func(t *testing.T) {
bhCfg.CheckInclusionBlocksF = 3
bhCfg.CheckInclusionPercentileF = 80 // percentile price is 7 wei
err := bhe.CheckConnectivity(attempts)
require.NoError(t, err)
})
t.Run("fails check if one or more blocks has percentile price higher than highest transaction gas price", func(t *testing.T) {
bhCfg.CheckInclusionBlocksF = 3
bhCfg.CheckInclusionPercentileF = 40 // percentile price is 5 wei
err := bhe.CheckConnectivity(attempts)
require.Error(t, err)
assert.Contains(t, err.Error(), fmt.Sprintf("transaction %s has gas price of 7 wei, which is above percentile=40%% (percentile price: 5 wei) for blocks 2 thru 0 (checking 3 blocks)", attempts[3].TxHash))
require.ErrorIs(t, err, commonfee.ErrConnectivity)
})
t.Run("fails check if one or more blocks has percentile price higher than any transaction gas price", func(t *testing.T) {
bhCfg.CheckInclusionBlocksF = 3
bhCfg.CheckInclusionPercentileF = 30 // percentile price is 4 wei
err := bhe.CheckConnectivity(attempts)
require.Error(t, err)
assert.Contains(t, err.Error(), fmt.Sprintf("transaction %s has gas price of 5 wei, which is above percentile=30%% (percentile price: 4 wei) for blocks 2 thru 0 (checking 3 blocks)", attempts[2].TxHash))
bhCfg.CheckInclusionBlocksF = 3
bhCfg.CheckInclusionPercentileF = 5 // percentile price is 2 wei
err = bhe.CheckConnectivity(attempts)
require.Error(t, err)
assert.Contains(t, err.Error(), fmt.Sprintf("transaction %s has gas price of 3 wei, which is above percentile=5%% (percentile price: 2 wei) for blocks 2 thru 0 (checking 3 blocks)", attempts[1].TxHash))
require.ErrorIs(t, err, commonfee.ErrConnectivity)
})
})`
$DIR/core/chains/evm/gas/block_history_estimator_test.go: `b0 = evmtypes.Block{
Number: 0,
Hash: utils.NewHash(),
Transactions: legacyTransactionsFromGasPrices(1000),
}`
$DIR/core/chains/evm/gas/block_history_estimator_test.go: `b1 = evmtypes.Block{
Number: 1,
Hash: utils.NewHash(),
ParentHash: b0.Hash,
Transactions: legacyTransactionsFromGasPrices(2, 3, 4, 5, 6),
}`
$DIR/core/chains/evm/gas/block_history_estimator_test.go: `b2 = evmtypes.Block{
Number: 2,
Hash: utils.NewHash(),
ParentHash: b1.Hash,
Transactions: legacyTransactionsFromGasPrices(4, 4, 5, 5, 6, 6, 7, 7, 8, 8, 9, 9),
}`
$DIR/core/chains/evm/gas/block_history_estimator_test.go: `b3 = evmtypes.Block{
Number: 3,
Hash: utils.NewHash(),
ParentHash: b2.Hash,
Transactions: legacyTransactionsFromGasPrices(3, 4, 5, 6, 7),
}`
$DIR/core/chains/evm/gas/block_history_estimator_test.go: `gas.SetRollingBlockHistory(bhe, []evmtypes.Block{b0, b1, b2, b3})`
$DIR/core/chains/evm/gas/block_history_estimator_test.go: `attempts = []gas.EvmPriorAttempt{
{TxType: 0x0, TxHash: NewEvmHash(), GasPrice: assets.NewWeiI(1000), BroadcastBeforeBlockNum: ptr(int64(4))}, // This is very expensive but will be ignored due to BroadcastBeforeBlockNum being too recent
{TxType: 0x0, TxHash: NewEvmHash(), GasPrice: assets.NewWeiI(3), BroadcastBeforeBlockNum: ptr(int64(0))},
{TxType: 0x0, TxHash: NewEvmHash(), GasPrice: assets.NewWeiI(5), BroadcastBeforeBlockNum: ptr(int64(1))},
{TxType: 0x0, TxHash: NewEvmHash(), GasPrice: assets.NewWeiI(7), BroadcastBeforeBlockNum: ptr(int64(1))},
}`
$DIR/core/chains/evm/gas/block_history_estimator_test.go: `t.Run("passes check if all blocks have percentile price higher or exactly at the highest transaction gas price", func(t *testing.T) {
bhCfg.CheckInclusionBlocksF = 3
bhCfg.CheckInclusionPercentileF = 80 // percentile price is 7 wei
err := bhe.CheckConnectivity(attempts)
require.NoError(t, err)
})`
$DIR/core/chains/evm/gas/block_history_estimator_test.go: `bhCfg.CheckInclusionBlocksF = 3`
$DIR/core/chains/evm/gas/block_history_estimator_test.go: `bhCfg.CheckInclusionPercentileF = 80`
$DIR/core/chains/evm/gas/block_history_estimator_test.go: `t.Run("fails check if one or more blocks has percentile price higher than highest transaction gas price", func(t *testing.T) {
bhCfg.CheckInclusionBlocksF = 3
bhCfg.CheckInclusionPercentileF = 40 // percentile price is 5 wei
err := bhe.CheckConnectivity(attempts)
require.Error(t, err)
assert.Contains(t, err.Error(), fmt.Sprintf("transaction %s has gas price of 7 wei, which is above percentile=40%% (percentile price: 5 wei) for blocks 2 thru 0 (checking 3 blocks)", attempts[3].TxHash))
require.ErrorIs(t, err, commonfee.ErrConnectivity)
})`
$DIR/core/chains/evm/gas/block_history_estimator_test.go: `bhCfg.CheckInclusionBlocksF = 3`
$DIR/core/chains/evm/gas/block_history_estimator_test.go: `bhCfg.CheckInclusionPercentileF = 40`
$DIR/core/chains/evm/gas/block_history_estimator_test.go: `t.Run("fails check if one or more blocks has percentile price higher than any transaction gas price", func(t *testing.T) {
bhCfg.CheckInclusionBlocksF = 3
bhCfg.CheckInclusionPercentileF = 30 // percentile price is 4 wei
err := bhe.CheckConnectivity(attempts)
require.Error(t, err)
assert.Contains(t, err.Error(), fmt.Sprintf("transaction %s has gas price of 5 wei, which is above percentile=30%% (percentile price: 4 wei) for blocks 2 thru 0 (checking 3 blocks)", attempts[2].TxHash))
bhCfg.CheckInclusionBlocksF = 3
bhCfg.CheckInclusionPercentileF = 5 // percentile price is 2 wei
err = bhe.CheckConnectivity(attempts)
require.Error(t, err)
assert.Contains(t, err.Error(), fmt.Sprintf("transaction %s has gas price of 3 wei, which is above percentile=5%% (percentile price: 2 wei) for blocks 2 thru 0 (checking 3 blocks)", attempts[1].TxHash))
require.ErrorIs(t, err, commonfee.ErrConnectivity)
})`
$DIR/core/chains/evm/gas/block_history_estimator_test.go: `bhCfg.CheckInclusionBlocksF = 3`
$DIR/core/chains/evm/gas/block_history_estimator_test.go: `bhCfg.CheckInclusionPercentileF = 30`
$DIR/core/chains/evm/gas/block_history_estimator_test.go: `bhCfg.CheckInclusionBlocksF = 3`
$DIR/core/chains/evm/gas/block_history_estimator_test.go: `bhCfg.CheckInclusionPercentileF = 5`
$DIR/core/chains/evm/gas/block_history_estimator_test.go: `err = bhe.CheckConnectivity(attempts)`
$DIR/core/chains/evm/gas/block_history_estimator_test.go: `t.Run("handles mixed legacy and EIP-1559 transactions", func(t *testing.T) {
b0 = evmtypes.Block{
BaseFeePerGas: assets.NewWeiI(1),
Number: 3,
Hash: utils.NewHash(),
Transactions: append(legacyTransactionsFromGasPrices(1, 2, 3, 4, 5), dynamicFeeTransactionsFromTipCaps(6, 7, 8, 9, 10)...),
}
gas.SetRollingBlockHistory(bhe, []evmtypes.Block{b0})
attempts = []gas.EvmPriorAttempt{
{TxType: 0x2, TxHash: NewEvmHash(), DynamicFee: gas.DynamicFee{FeeCap: assets.NewWeiI(1), TipCap: assets.NewWeiI(3)}, BroadcastBeforeBlockNum: ptr(int64(0))},
{TxType: 0x0, TxHash: NewEvmHash(), GasPrice: assets.NewWeiI(10), BroadcastBeforeBlockNum: ptr(int64(0))},
}
t.Run("passes check if both transactions are ok", func(t *testing.T) {
bhCfg.CheckInclusionBlocksF = 1
bhCfg.CheckInclusionPercentileF = 90 // percentile price is 5 wei
err := bhe.CheckConnectivity(attempts)
require.NoError(t, err)
})
t.Run("fails check if legacy transaction fails", func(t *testing.T) {
bhCfg.CheckInclusionBlocksF = 1
bhCfg.CheckInclusionPercentileF = 60
err := bhe.CheckConnectivity(attempts)
require.Error(t, err)
assert.Contains(t, err.Error(), fmt.Sprintf("transaction %s has gas price of 10 wei, which is above percentile=60%% (percentile price: 7 wei) for blocks 3 thru 3 (checking 1 blocks)", attempts[1].TxHash))
require.ErrorIs(t, err, commonfee.ErrConnectivity)
})
attempts = []gas.EvmPriorAttempt{
{TxType: 0x2, TxHash: NewEvmHash(), DynamicFee: gas.DynamicFee{FeeCap: assets.NewWeiI(11), TipCap: assets.NewWeiI(10)}, BroadcastBeforeBlockNum: ptr(int64(0))},
{TxType: 0x0, TxHash: NewEvmHash(), GasPrice: assets.NewWeiI(3), BroadcastBeforeBlockNum: ptr(int64(0))},
}
t.Run("fails check if dynamic fee transaction fails", func(t *testing.T) {
gas.SetRollingBlockHistory(bhe, []evmtypes.Block{b0})
bhCfg.CheckInclusionBlocksF = 1
bhCfg.CheckInclusionPercentileF = 60
err := bhe.CheckConnectivity(attempts)
require.Error(t, err)
assert.Contains(t, err.Error(), fmt.Sprintf("transaction %s has tip cap of 10 wei, which is above percentile=60%% (percentile tip cap: 6 wei) for blocks 3 thru 3 (checking 1 blocks)", attempts[0].TxHash))
require.ErrorIs(t, err, commonfee.ErrConnectivity)
})
})`
$DIR/core/chains/evm/gas/block_history_estimator_test.go: `b0 = evmtypes.Block{
BaseFeePerGas: assets.NewWeiI(1),
Number: 3,
Hash: utils.NewHash(),
Transactions: append(legacyTransactionsFromGasPrices(1, 2, 3, 4, 5), dynamicFeeTransactionsFromTipCaps(6, 7, 8, 9, 10)...),
}`
$DIR/core/chains/evm/gas/block_history_estimator_test.go: `gas.SetRollingBlockHistory(bhe, []evmtypes.Block{b0})`
$DIR/core/chains/evm/gas/block_history_estimator_test.go: `attempts = []gas.EvmPriorAttempt{
{TxType: 0x2, TxHash: NewEvmHash(), DynamicFee: gas.DynamicFee{FeeCap: assets.NewWeiI(1), TipCap: assets.NewWeiI(3)}, BroadcastBeforeBlockNum: ptr(int64(0))},
{TxType: 0x0, TxHash: NewEvmHash(), GasPrice: assets.NewWeiI(10), BroadcastBeforeBlockNum: ptr(int64(0))},
}`
$DIR/core/chains/evm/gas/block_history_estimator_test.go: `t.Run("passes check if both transactions are ok", func(t *testing.T) {
bhCfg.CheckInclusionBlocksF = 1
bhCfg.CheckInclusionPercentileF = 90 // percentile price is 5 wei
err := bhe.CheckConnectivity(attempts)
require.NoError(t, err)
})`
$DIR/core/chains/evm/gas/block_history_estimator_test.go: `bhCfg.CheckInclusionBlocksF = 1`
$DIR/core/chains/evm/gas/block_history_estimator_test.go: `bhCfg.CheckInclusionPercentileF = 90`
$DIR/core/chains/evm/gas/block_history_estimator_test.go: `t.Run("fails check if legacy transaction fails", func(t *testing.T) {
bhCfg.CheckInclusionBlocksF = 1
bhCfg.CheckInclusionPercentileF = 60
err := bhe.CheckConnectivity(attempts)
require.Error(t, err)
assert.Contains(t, err.Error(), fmt.Sprintf("transaction %s has gas price of 10 wei, which is above percentile=60%% (percentile price: 7 wei) for blocks 3 thru 3 (checking 1 blocks)", attempts[1].TxHash))
require.ErrorIs(t, err, commonfee.ErrConnectivity)
})`
$DIR/core/chains/evm/gas/block_history_estimator_test.go: `bhCfg.CheckInclusionBlocksF = 1`
$DIR/core/chains/evm/gas/block_history_estimator_test.go: `bhCfg.CheckInclusionPercentileF = 60`
$DIR/core/chains/evm/gas/block_history_estimator_test.go: `attempts = []gas.EvmPriorAttempt{
{TxType: 0x2, TxHash: NewEvmHash(), DynamicFee: gas.DynamicFee{FeeCap: assets.NewWeiI(11), TipCap: assets.NewWeiI(10)}, BroadcastBeforeBlockNum: ptr(int64(0))},
{TxType: 0x0, TxHash: NewEvmHash(), GasPrice: assets.NewWeiI(3), BroadcastBeforeBlockNum: ptr(int64(0))},
}`
$DIR/core/chains/evm/gas/block_history_estimator_test.go: `t.Run("fails check if dynamic fee transaction fails", func(t *testing.T) {
gas.SetRollingBlockHistory(bhe, []evmtypes.Block{b0})
bhCfg.CheckInclusionBlocksF = 1
bhCfg.CheckInclusionPercentileF = 60
err := bhe.CheckConnectivity(attempts)
require.Error(t, err)
assert.Contains(t, err.Error(), fmt.Sprintf("transaction %s has tip cap of 10 wei, which is above percentile=60%% (percentile tip cap: 6 wei) for blocks 3 thru 3 (checking 1 blocks)", attempts[0].TxHash))
require.ErrorIs(t, err, commonfee.ErrConnectivity)
})`
$DIR/core/chains/evm/gas/block_history_estimator_test.go: `gas.SetRollingBlockHistory(bhe, []evmtypes.Block{b0})`
$DIR/core/chains/evm/gas/block_history_estimator_test.go: `bhCfg.CheckInclusionBlocksF = 1`
$DIR/core/chains/evm/gas/block_history_estimator_test.go: `bhCfg.CheckInclusionPercentileF = 60`
$DIR/core/chains/evm/gas/block_history_estimator_test.go: `b0 = evmtypes.Block{
BaseFeePerGas: assets.NewWeiI(5),
Number: 0,
Hash: utils.NewHash(),
Transactions: dynamicFeeTransactionsFromTipCaps(1000),
}`
$DIR/core/chains/evm/gas/block_history_estimator_test.go: `b1 = evmtypes.Block{
BaseFeePerGas: assets.NewWeiI(8),
Number: 1,
Hash: utils.NewHash(),
ParentHash: b0.Hash,
Transactions: dynamicFeeTransactionsFromTipCaps(2, 3, 4, 5, 6),
}`
$DIR/core/chains/evm/gas/block_history_estimator_test.go: `b2 = evmtypes.Block{
BaseFeePerGas: assets.NewWeiI(13),
Number: 2,
Hash: utils.NewHash(),
ParentHash: b1.Hash,
Transactions: dynamicFeeTransactionsFromTipCaps(4, 4, 5, 5, 6, 6, 7, 7, 8, 8, 9, 9),
}`
$DIR/core/chains/evm/gas/block_history_estimator_test.go: `b3 = evmtypes.Block{
BaseFeePerGas: assets.NewWeiI(21),
Number: 3,
Hash: utils.NewHash(),
ParentHash: b2.Hash,
Transactions: dynamicFeeTransactionsFromTipCaps(3, 4, 5, 6, 7),
}`
$DIR/core/chains/evm/gas/block_history_estimator_test.go: `gas.SetRollingBlockHistory(bhe, blocks)`
$DIR/core/chains/evm/gas/block_history_estimator_test.go: `attempts = []gas.EvmPriorAttempt{
{TxType: 0x2, TxHash: NewEvmHash(), DynamicFee: gas.DynamicFee{FeeCap: assets.NewWeiI(30), TipCap: assets.NewWeiI(1000)}, BroadcastBeforeBlockNum: ptr(int64(4))}, // This is very expensive but will be ignored due to BroadcastBeforeBlockNum being too recent
{TxType: 0x2, TxHash: NewEvmHash(), DynamicFee: gas.DynamicFee{FeeCap: assets.NewWeiI(30), TipCap: assets.NewWeiI(3)}, BroadcastBeforeBlockNum: ptr(int64(0))},
{TxType: 0x2, TxHash: NewEvmHash(), DynamicFee: gas.DynamicFee{FeeCap: assets.NewWeiI(30), TipCap: assets.NewWeiI(5)}, BroadcastBeforeBlockNum: ptr(int64(1))},
{TxType: 0x2, TxHash: NewEvmHash(), DynamicFee: gas.DynamicFee{FeeCap: assets.NewWeiI(30), TipCap: assets.NewWeiI(7)}, BroadcastBeforeBlockNum: ptr(int64(1))},
}`
$DIR/core/chains/evm/gas/block_history_estimator_test.go: `t.Run("passes check if all blocks have 90th percentile price higher than highest transaction tip cap", func(t *testing.T) {
bhCfg.CheckInclusionBlocksF = 3
bhCfg.CheckInclusionPercentileF = 80
err := bhe.CheckConnectivity(attempts)
require.NoError(t, err)
})`
$DIR/core/chains/evm/gas/block_history_estimator_test.go: `bhCfg.CheckInclusionBlocksF = 3`
$DIR/core/chains/evm/gas/block_history_estimator_test.go: `bhCfg.CheckInclusionPercentileF = 80`
$DIR/core/chains/evm/gas/block_history_estimator_test.go: `t.Run("fails check if one or more blocks has percentile tip cap higher than any transaction tip cap, and base fee higher than the block base fee", func(t *testing.T) {
bhCfg.CheckInclusionBlocksF = 3
bhCfg.CheckInclusionPercentileF = 20
err := bhe.CheckConnectivity(attempts)
require.Error(t, err)
assert.Contains(t, err.Error(), fmt.Sprintf("transaction %s has tip cap of 5 wei, which is above percentile=20%% (percentile tip cap: 4 wei) for blocks 2 thru 0 (checking 3 blocks)", attempts[2].TxHash))
require.ErrorIs(t, err, commonfee.ErrConnectivity)
bhCfg.CheckInclusionBlocksF = 3
bhCfg.CheckInclusionPercentileF = 5
err = bhe.CheckConnectivity(attempts)
require.Error(t, err)
assert.Contains(t, err.Error(), fmt.Sprintf("transaction %s has tip cap of 3 wei, which is above percentile=5%% (percentile tip cap: 2 wei) for blocks 2 thru 0 (checking 3 blocks)", attempts[1].TxHash))
require.ErrorIs(t, err, commonfee.ErrConnectivity)
})`
$DIR/core/chains/evm/gas/block_history_estimator_test.go: `bhCfg.CheckInclusionBlocksF = 3`
$DIR/core/chains/evm/gas/block_history_estimator_test.go: `bhCfg.CheckInclusionPercentileF = 20`
$DIR/core/chains/evm/gas/block_history_estimator_test.go: `bhCfg.CheckInclusionBlocksF = 3`
$DIR/core/chains/evm/gas/block_history_estimator_test.go: `bhCfg.CheckInclusionPercentileF = 5`
$DIR/core/chains/evm/gas/block_history_estimator_test.go: `err = bhe.CheckConnectivity(attempts)`
$DIR/core/chains/evm/gas/block_history_estimator_test.go: `t.Run("passes check if, for at least one block, feecap < tipcap+basefee, even if percentile is not reached", func(t *testing.T) {
bhCfg.CheckInclusionBlocksF = 3
bhCfg.CheckInclusionPercentileF = 5
attempts = []gas.EvmPriorAttempt{
{TxType: 0x2, TxHash: NewEvmHash(), DynamicFee: gas.DynamicFee{FeeCap: assets.NewWeiI(4), TipCap: assets.NewWeiI(7)}, BroadcastBeforeBlockNum: ptr(int64(1))},
}
err := bhe.CheckConnectivity(attempts)
require.NoError(t, err)
})`
$DIR/core/chains/evm/gas/block_history_estimator_test.go: `bhCfg.CheckInclusionBlocksF = 3`
$DIR/core/chains/evm/gas/block_history_estimator_test.go: `bhCfg.CheckInclusionPercentileF = 5`
$DIR/core/chains/evm/gas/block_history_estimator_test.go: `attempts = []gas.EvmPriorAttempt{
{TxType: 0x2, TxHash: NewEvmHash(), DynamicFee: gas.DynamicFee{FeeCap: assets.NewWeiI(4), TipCap: assets.NewWeiI(7)}, BroadcastBeforeBlockNum: ptr(int64(1))},
}`
$DIR/core/chains/evm/gas/block_history_estimator_test.go: `t.Run("BumpLegacyGas checks connectivity", func(t *testing.T) {
cfg := gas.NewMockConfig()
bhCfg.CheckInclusionBlocksF = 1
bhCfg.CheckInclusionPercentileF = 10
geCfg := &gas.MockGasEstimatorConfig{}
geCfg.EIP1559DynamicFeesF = false
geCfg.BumpPercentF = 10
geCfg.BumpMinF = assets.NewWeiI(150)
geCfg.PriceMaxF = maxGasPrice
l1Oracle := rollupMocks.NewL1Oracle(t)
bhe := newBlockHistoryEstimator(t, nil, cfg, geCfg, bhCfg, l1Oracle)
b1 := evmtypes.Block{
Number: 1,
Hash: utils.NewHash(),
Transactions: legacyTransactionsFromGasPrices(1),
}
gas.SetRollingBlockHistory(bhe, []evmtypes.Block{b1})
head := testutils.Head(1)
bhe.OnNewLongestChain(tests.Context(t), head)
attempts := []gas.EvmPriorAttempt{
{TxType: 0x0, TxHash: NewEvmHash(), GasPrice: assets.NewWeiI(1000), BroadcastBeforeBlockNum: ptr(int64(0))},
}
_, _, err := bhe.BumpLegacyGas(tests.Context(t), assets.NewWeiI(42), 100000, maxGasPrice, attempts)
require.Error(t, err)
assert.True(t, pkgerrors.Is(err, commonfee.ErrConnectivity))
assert.Contains(t, err.Error(), fmt.Sprintf("transaction %s has gas price of 1 kwei, which is above percentile=10%% (percentile price: 1 wei) for blocks 1 thru 1 (checking 1 blocks)", attempts[0].TxHash))
})`
$DIR/core/chains/evm/gas/block_history_estimator_test.go: `bhCfg.CheckInclusionBlocksF = 1`
$DIR/core/chains/evm/gas/block_history_estimator_test.go: `bhCfg.CheckInclusionPercentileF = 10`
$DIR/core/chains/evm/gas/block_history_estimator_test.go: `geCfg.EIP1559DynamicFeesF = false`
$DIR/core/chains/evm/gas/block_history_estimator_test.go: `geCfg.BumpPercentF = 10`
$DIR/core/chains/evm/gas/block_history_estimator_test.go: `geCfg.BumpMinF = assets.NewWeiI(150)`
$DIR/core/chains/evm/gas/block_history_estimator_test.go: `geCfg.PriceMaxF = maxGasPrice`
$DIR/core/chains/evm/gas/block_history_estimator_test.go: `gas.SetRollingBlockHistory(bhe, []evmtypes.Block{b1})`
$DIR/core/chains/evm/gas/block_history_estimator_test.go: `bhe.OnNewLongestChain(tests.Context(t), head)`
$DIR/core/chains/evm/gas/block_history_estimator_test.go: `t.Run("BumpLegacyGas calls BumpLegacyGasPriceOnly with proper current gas price", func(t *testing.T) {
cfg := gas.NewMockConfig()
geCfg := &gas.MockGasEstimatorConfig{}
geCfg.EIP1559DynamicFeesF = false
geCfg.BumpPercentF = 10
geCfg.BumpMinF = assets.NewWeiI(150)
geCfg.PriceMaxF = maxGasPrice
l1Oracle := rollupMocks.NewL1Oracle(t)
bhe := newBlockHistoryEstimator(t, nil, cfg, geCfg, bhCfg, l1Oracle)
t.Run("ignores nil current gas price", func(t *testing.T) {
gasPrice, gasLimit, err := bhe.BumpLegacyGas(tests.Context(t), assets.NewWeiI(42), 100000, maxGasPrice, nil)
require.NoError(t, err)
expectedGasPrice, err := gas.BumpLegacyGasPriceOnly(geCfg, logger.TestSugared(t), nil, assets.NewWeiI(42), maxGasPrice)
require.NoError(t, err)
assert.Equal(t, 100000, int(gasLimit))
assert.Equal(t, expectedGasPrice, gasPrice)
})
t.Run("ignores current gas price > max gas price", func(t *testing.T) {
gasPrice, gasLimit, err := bhe.BumpLegacyGas(tests.Context(t), assets.NewWeiI(42), 100000, maxGasPrice, nil)
require.NoError(t, err)
massive := assets.NewWeiI(100000000000000)
gas.SetGasPrice(bhe, massive)
expectedGasPrice, err := gas.BumpLegacyGasPriceOnly(geCfg, logger.TestSugared(t), massive, assets.NewWeiI(42), maxGasPrice)
require.NoError(t, err)
assert.Equal(t, 100000, int(gasLimit))
assert.Equal(t, expectedGasPrice, gasPrice)
})
t.Run("ignores current gas price < bumped gas price", func(t *testing.T) {
gas.SetGasPrice(bhe, assets.NewWeiI(191))
gasPrice, gasLimit, err := bhe.BumpLegacyGas(tests.Context(t), assets.NewWeiI(42), 100000, maxGasPrice, nil)
require.NoError(t, err)
assert.Equal(t, 100000, int(gasLimit))
assert.Equal(t, assets.NewWeiI(192), gasPrice)
})
t.Run("uses current gas price > bumped gas price", func(t *testing.T) {
gas.SetGasPrice(bhe, assets.NewWeiI(193))
gasPrice, gasLimit, err := bhe.BumpLegacyGas(tests.Context(t), assets.NewWeiI(42), 100000, maxGasPrice, nil)
require.NoError(t, err)
assert.Equal(t, 100000, int(gasLimit))
assert.Equal(t, assets.NewWeiI(193), gasPrice)
})
t.Run("bumped gas price > max gas price", func(t *testing.T) {
gas.SetGasPrice(bhe, assets.NewWeiI(191))
gasPrice, gasLimit, err := bhe.BumpLegacyGas(tests.Context(t), assets.NewWeiI(42), 100000, assets.NewWeiI(100), nil)
require.Error(t, err)
assert.Nil(t, gasPrice)
assert.Equal(t, 0, int(gasLimit))
assert.Contains(t, err.Error(), "bumped gas price of 192 wei would exceed configured max gas price of 100 wei (original price was 42 wei).")
})
t.Run("current gas price > max gas price", func(t *testing.T) {
gas.SetGasPrice(bhe, assets.NewWeiI(193))
gasPrice, gasLimit, err := bhe.BumpLegacyGas(tests.Context(t), assets.NewWeiI(42), 100000, assets.NewWeiI(100), nil)
require.Error(t, err)
assert.Nil(t, gasPrice)
assert.Equal(t, 0, int(gasLimit))
assert.Contains(t, err.Error(), "bumped gas price of 192 wei would exceed configured max gas price of 100 wei (original price was 42 wei).")
})
})`
$DIR/core/chains/evm/gas/block_history_estimator_test.go: `geCfg.EIP1559DynamicFeesF = false`
$DIR/core/chains/evm/gas/block_history_estimator_test.go: `geCfg.BumpPercentF = 10`
$DIR/core/chains/evm/gas/block_history_estimator_test.go: `geCfg.BumpMinF = assets.NewWeiI(150)`
$DIR/core/chains/evm/gas/block_history_estimator_test.go: `geCfg.PriceMaxF = maxGasPrice`
$DIR/core/chains/evm/gas/block_history_estimator_test.go: `t.Run("ignores nil current gas price", func(t *testing.T) {
gasPrice, gasLimit, err := bhe.BumpLegacyGas(tests.Context(t), assets.NewWeiI(42), 100000, maxGasPrice, nil)
require.NoError(t, err)
expectedGasPrice, err := gas.BumpLegacyGasPriceOnly(geCfg, logger.TestSugared(t), nil, assets.NewWeiI(42), maxGasPrice)
require.NoError(t, err)
assert.Equal(t, 100000, int(gasLimit))
assert.Equal(t, expectedGasPrice, gasPrice)
})`
$DIR/core/chains/evm/gas/block_history_estimator_test.go: `t.Run("ignores current gas price > max gas price", func(t *testing.T) {
gasPrice, gasLimit, err := bhe.BumpLegacyGas(tests.Context(t), assets.NewWeiI(42), 100000, maxGasPrice, nil)
require.NoError(t, err)
massive := assets.NewWeiI(100000000000000)
gas.SetGasPrice(bhe, massive)
expectedGasPrice, err := gas.BumpLegacyGasPriceOnly(geCfg, logger.TestSugared(t), massive, assets.NewWeiI(42), maxGasPrice)
require.NoError(t, err)
assert.Equal(t, 100000, int(gasLimit))
assert.Equal(t, expectedGasPrice, gasPrice)
})`
$DIR/core/chains/evm/gas/block_history_estimator_test.go: `gas.SetGasPrice(bhe, massive)`
$DIR/core/chains/evm/gas/block_history_estimator_test.go: `t.Run("ignores current gas price < bumped gas price", func(t *testing.T) {
gas.SetGasPrice(bhe, assets.NewWeiI(191))
gasPrice, gasLimit, err := bhe.BumpLegacyGas(tests.Context(t), assets.NewWeiI(42), 100000, maxGasPrice, nil)
require.NoError(t, err)
assert.Equal(t, 100000, int(gasLimit))
assert.Equal(t, assets.NewWeiI(192), gasPrice)
})`
$DIR/core/chains/evm/gas/block_history_estimator_test.go: `gas.SetGasPrice(bhe, assets.NewWeiI(191))`
$DIR/core/chains/evm/gas/block_history_estimator_test.go: `t.Run("uses current gas price > bumped gas price", func(t *testing.T) {
gas.SetGasPrice(bhe, assets.NewWeiI(193))
gasPrice, gasLimit, err := bhe.BumpLegacyGas(tests.Context(t), assets.NewWeiI(42), 100000, maxGasPrice, nil)
require.NoError(t, err)
assert.Equal(t, 100000, int(gasLimit))
assert.Equal(t, assets.NewWeiI(193), gasPrice)
})`
$DIR/core/chains/evm/gas/block_history_estimator_test.go: `gas.SetGasPrice(bhe, assets.NewWeiI(193))`
$DIR/core/chains/evm/gas/block_history_estimator_test.go: `t.Run("bumped gas price > max gas price", func(t *testing.T) {
gas.SetGasPrice(bhe, assets.NewWeiI(191))
gasPrice, gasLimit, err := bhe.BumpLegacyGas(tests.Context(t), assets.NewWeiI(42), 100000, assets.NewWeiI(100), nil)
require.Error(t, err)
assert.Nil(t, gasPrice)
assert.Equal(t, 0, int(gasLimit))
assert.Contains(t, err.Error(), "bumped gas price of 192 wei would exceed configured max gas price of 100 wei (original price was 42 wei).")
})`
$DIR/core/chains/evm/gas/block_history_estimator_test.go: `gas.SetGasPrice(bhe, assets.NewWeiI(191))`
$DIR/core/chains/evm/gas/block_history_estimator_test.go: `t.Run("current gas price > max gas price", func(t *testing.T) {
gas.SetGasPrice(bhe, assets.NewWeiI(193))
gasPrice, gasLimit, err := bhe.BumpLegacyGas(tests.Context(t), assets.NewWeiI(42), 100000, assets.NewWeiI(100), nil)
require.Error(t, err)
assert.Nil(t, gasPrice)
assert.Equal(t, 0, int(gasLimit))
assert.Contains(t, err.Error(), "bumped gas price of 192 wei would exceed configured max gas price of 100 wei (original price was 42 wei).")
})`
$DIR/core/chains/evm/gas/block_history_estimator_test.go: `gas.SetGasPrice(bhe, assets.NewWeiI(193))`
$DIR/core/chains/evm/gas/block_history_estimator_test.go: `t.Run("BumpDynamicFee checks connectivity", func(t *testing.T) {
cfg := gas.NewMockConfig()
bhCfg := newBlockHistoryConfig()
bhCfg.CheckInclusionBlocksF = 1
bhCfg.CheckInclusionPercentileF = 10
geCfg := &gas.MockGasEstimatorConfig{}
geCfg.EIP1559DynamicFeesF = true
geCfg.BumpPercentF = 10
geCfg.BumpMinF = assets.NewWeiI(150)
geCfg.PriceMaxF = maxGasPrice
l1Oracle := rollupMocks.NewL1Oracle(t)
bhe := newBlockHistoryEstimator(t, nil, cfg, geCfg, bhCfg, l1Oracle)
b1 := evmtypes.Block{
BaseFeePerGas: assets.NewWeiI(1),
Number: 1,
Hash: utils.NewHash(),
Transactions: dynamicFeeTransactionsFromTipCaps(1),
}
gas.SetRollingBlockHistory(bhe, []evmtypes.Block{b1})
head := testutils.Head(1)
bhe.OnNewLongestChain(tests.Context(t), head)
originalFee := gas.DynamicFee{FeeCap: assets.NewWeiI(100), TipCap: assets.NewWeiI(25)}
attempts := []gas.EvmPriorAttempt{
{TxType: 0x2, TxHash: NewEvmHash(), DynamicFee: gas.DynamicFee{TipCap: originalFee.TipCap, FeeCap: originalFee.FeeCap}, BroadcastBeforeBlockNum: ptr(int64(0))}}
_, err := bhe.BumpDynamicFee(tests.Context(t), originalFee, maxGasPrice, attempts)
require.Error(t, err)
assert.True(t, pkgerrors.Is(err, commonfee.ErrConnectivity))
assert.Contains(t, err.Error(), fmt.Sprintf("transaction %s has tip cap of 25 wei, which is above percentile=10%% (percentile tip cap: 1 wei) for blocks 1 thru 1 (checking 1 blocks)", attempts[0].TxHash))
})`
$DIR/core/chains/evm/gas/block_history_estimator_test.go: `bhCfg.CheckInclusionBlocksF = 1`
$DIR/core/chains/evm/gas/block_history_estimator_test.go: `bhCfg.CheckInclusionPercentileF = 10`
$DIR/core/chains/evm/gas/block_history_estimator_test.go: `geCfg.EIP1559DynamicFeesF = true`
$DIR/core/chains/evm/gas/block_history_estimator_test.go: `geCfg.BumpPercentF = 10`
$DIR/core/chains/evm/gas/block_history_estimator_test.go: `geCfg.BumpMinF = assets.NewWeiI(150)`
$DIR/core/chains/evm/gas/block_history_estimator_test.go: `geCfg.PriceMaxF = maxGasPrice`
$DIR/core/chains/evm/gas/block_history_estimator_test.go: `gas.SetRollingBlockHistory(bhe, []evmtypes.Block{b1})`
$DIR/core/chains/evm/gas/block_history_estimator_test.go: `bhe.OnNewLongestChain(tests.Context(t), head)`
$DIR/core/chains/evm/gas/block_history_estimator_test.go: `geCfg.EIP1559DynamicFeesF = true`
$DIR/core/chains/evm/gas/block_history_estimator_test.go: `geCfg.BumpPercentF = 10`
$DIR/core/chains/evm/gas/block_history_estimator_test.go: `geCfg.BumpMinF = assets.NewWeiI(150)`
$DIR/core/chains/evm/gas/block_history_estimator_test.go: `geCfg.PriceMaxF = maxGasPrice`
$DIR/core/chains/evm/gas/block_history_estimator_test.go: `geCfg.TipCapDefaultF = assets.NewWeiI(52)`
$DIR/core/chains/evm/gas/block_history_estimator_test.go: `t.Run("when current tip cap is nil", func(t *testing.T) {
originalFee := gas.DynamicFee{FeeCap: assets.NewWeiI(100), TipCap: assets.NewWeiI(25)}
fee, err := bhe.BumpDynamicFee(tests.Context(t), originalFee, maxGasPrice, nil)
require.NoError(t, err)
assert.Equal(t, gas.DynamicFee{FeeCap: assets.NewWeiI(250), TipCap: assets.NewWeiI(202)}, fee)
})`
$DIR/core/chains/evm/gas/block_history_estimator_test.go: `t.Run("ignores current tip cap that is smaller than original fee with bump applied", func(t *testing.T) {
gas.SetTipCap(bhe, assets.NewWeiI(201))
originalFee := gas.DynamicFee{FeeCap: assets.NewWeiI(100), TipCap: assets.NewWeiI(25)}
fee, err := bhe.BumpDynamicFee(tests.Context(t), originalFee, maxGasPrice, nil)
require.NoError(t, err)
assert.Equal(t, gas.DynamicFee{FeeCap: assets.NewWeiI(250), TipCap: assets.NewWeiI(202)}, fee)
})`
$DIR/core/chains/evm/gas/block_history_estimator_test.go: `gas.SetTipCap(bhe, assets.NewWeiI(201))`
$DIR/core/chains/evm/gas/block_history_estimator_test.go: `t.Run("uses current tip cap that is larger than original fee with bump applied", func(t *testing.T) {
gas.SetTipCap(bhe, assets.NewWeiI(203))
originalFee := gas.DynamicFee{FeeCap: assets.NewWeiI(100), TipCap: assets.NewWeiI(25)}
fee, err := bhe.BumpDynamicFee(tests.Context(t), originalFee, maxGasPrice, nil)
require.NoError(t, err)
assert.Equal(t, gas.DynamicFee{FeeCap: assets.NewWeiI(250), TipCap: assets.NewWeiI(203)}, fee)
})`
$DIR/core/chains/evm/gas/block_history_estimator_test.go: `gas.SetTipCap(bhe, assets.NewWeiI(203))`
$DIR/core/chains/evm/gas/block_history_estimator_test.go: `t.Run("ignores absurdly large current tip cap", func(t *testing.T) {
gas.SetTipCap(bhe, assets.NewWeiI(1000000000000000))
originalFee := gas.DynamicFee{FeeCap: assets.NewWeiI(100), TipCap: assets.NewWeiI(25)}
fee, err := bhe.BumpDynamicFee(tests.Context(t), originalFee, maxGasPrice, nil)
require.NoError(t, err)
assert.Equal(t, gas.DynamicFee{FeeCap: assets.NewWeiI(250), TipCap: assets.NewWeiI(202)}, fee)
})`
$DIR/core/chains/evm/gas/block_history_estimator_test.go: `gas.SetTipCap(bhe, assets.NewWeiI(1000000000000000))`
$DIR/core/chains/evm/gas/block_history_estimator_test.go: `t.Run("bumped tip cap price > max gas price", func(t *testing.T) {
gas.SetTipCap(bhe, assets.NewWeiI(203))
originalFee := gas.DynamicFee{FeeCap: assets.NewWeiI(100), TipCap: assets.NewWeiI(990000)}
fee, err := bhe.BumpDynamicFee(tests.Context(t), originalFee, maxGasPrice, nil)
require.Error(t, err)
assert.Equal(t, gas.DynamicFee{}, fee)
assert.Contains(t, err.Error(), "bumped tip cap of 1.089 mwei would exceed configured max gas price of 1 mwei (original fee: tip cap 990 kwei, fee cap 100 wei)")
})`
$DIR/core/chains/evm/gas/block_history_estimator_test.go: `gas.SetTipCap(bhe, assets.NewWeiI(203))`
$DIR/core/chains/evm/gas/block_history_estimator_test.go: `t.Run("bumped fee cap price > max gas price", func(t *testing.T) {
gas.SetTipCap(bhe, assets.NewWeiI(203))
originalFee := gas.DynamicFee{FeeCap: assets.NewWeiI(990000), TipCap: assets.NewWeiI(25)}
fee, err := bhe.BumpDynamicFee(tests.Context(t), originalFee, maxGasPrice, nil)
require.Error(t, err)
assert.Equal(t, gas.DynamicFee{}, fee)
assert.Contains(t, err.Error(), "bumped fee cap of 1.089 mwei would exceed configured max gas price of 1 mwei (original fee: tip cap 25 wei, fee cap 990 kwei)")
})`
$DIR/core/chains/evm/gas/block_history_estimator_test.go: `gas.SetTipCap(bhe, assets.NewWeiI(203))`
$DIR/core/chains/evm/gas/block_history_estimator_test.go: `.NewMockConfig()`
$DIR/core/chains/evm/gas/block_history_estimator_test.go: `.NewWeiI(1)`
$DIR/core/chains/evm/gas/block_history_estimator_test.go: `.NewWeiI(100)`
$DIR/core/chains/evm/gas/block_history_estimator_test.go: `.Run("loads initial state", func(t *testing.T) {
ethClient := testutils.NewEthClientMockWithDefaultChain(t)
l1Oracle := rollupMocks.NewL1Oracle(t)
bhe := newBlockHistoryEstimator(t, ethClient, cfg, geCfg, bhCfg, l1Oracle)
h := &evmtypes.Head{Hash: utils.NewHash(), Number: 42, BaseFeePerGas: assets.NewWeiI(420)}
ethClient.On("HeadByNumber", mock.Anything, (*big.Int)(nil)).Return(h, nil)
ethClient.On("BatchCallContext", mock.Anything, mock.MatchedBy(func(b []rpc.BatchElem) bool {
return len(b) == 2 &&
b[0].Method == "eth_getBlockByNumber" && b[0].Args[0] == "0x2a" && b[0].Args[1].(bool) && reflect.TypeOf(b[0].Result) == reflect.TypeOf(&evmtypes.Block{}) &&
b[1].Method == "eth_getBlockByNumber" && b[1].Args[0] == "0x29" && b[1].Args[1].(bool) && reflect.TypeOf(b[1].Result) == reflect.TypeOf(&evmtypes.Block{})
})).Return(nil).Run(func(args mock.Arguments) {
elems := args.Get(1).([]rpc.BatchElem)
elems[0].Result = &evmtypes.Block{
Number: 42,
Hash: utils.NewHash(),
}
elems[1].Result = &evmtypes.Block{
Number: 41,
Hash: utils.NewHash(),
}
}).Once()
err := bhe.Start(tests.Context(t))
require.NoError(t, err)
assert.Len(t, gas.GetRollingBlockHistory(bhe), 2)
assert.Equal(t, int(gas.GetRollingBlockHistory(bhe)[0].Number), 41)
assert.Equal(t, int(gas.GetRollingBlockHistory(bhe)[1].Number), 42)
assert.Equal(t, assets.NewWeiI(420), gas.GetLatestBaseFee(bhe))
})`
$DIR/core/chains/evm/gas/block_history_estimator_test.go: `.NewEthClientMockWithDefaultChain(t)`
$DIR/core/chains/evm/gas/block_history_estimator_test.go: `.NewL1Oracle(t)`
$DIR/core/chains/evm/gas/block_history_estimator_test.go: `.NewHash()`
$DIR/core/chains/evm/gas/block_history_estimator_test.go: `.NewWeiI(420)`
$DIR/core/chains/evm/gas/block_history_estimator_test.go: `.On("HeadByNumber", mock.Anything, (*big.Int)(nil))`
$DIR/core/chains/evm/gas/block_history_estimator_test.go: `.Return(h, nil)`
$DIR/core/chains/evm/gas/block_history_estimator_test.go: `.On("BatchCallContext", mock.Anything, mock.MatchedBy(func(b []rpc.BatchElem) bool {
return len(b) == 2 &&
b[0].Method == "eth_getBlockByNumber" && b[0].Args[0] == "0x2a" && b[0].Args[1].(bool) && reflect.TypeOf(b[0].Result) == reflect.TypeOf(&evmtypes.Block{}) &&
b[1].Method == "eth_getBlockByNumber" && b[1].Args[0] == "0x29" && b[1].Args[1].(bool) && reflect.TypeOf(b[1].Result) == reflect.TypeOf(&evmtypes.Block{})
}))`
$DIR/core/chains/evm/gas/block_history_estimator_test.go: `.MatchedBy(func(b []rpc.BatchElem) bool {
return len(b) == 2 &&
b[0].Method == "eth_getBlockByNumber" && b[0].Args[0] == "0x2a" && b[0].Args[1].(bool) && reflect.TypeOf(b[0].Result) == reflect.TypeOf(&evmtypes.Block{}) &&
b[1].Method == "eth_getBlockByNumber" && b[1].Args[0] == "0x29" && b[1].Args[1].(bool) && reflect.TypeOf(b[1].Result) == reflect.TypeOf(&evmtypes.Block{})
})`
$DIR/core/chains/evm/gas/block_history_estimator_test.go: `.TypeOf(b[0].Result)`
$DIR/core/chains/evm/gas/block_history_estimator_test.go: `.TypeOf(&evmtypes.Block{})`
$DIR/core/chains/evm/gas/block_history_estimator_test.go: `.TypeOf(b[1].Result)`
$DIR/core/chains/evm/gas/block_history_estimator_test.go: `.TypeOf(&evmtypes.Block{})`
$DIR/core/chains/evm/gas/block_history_estimator_test.go: `.Return(nil)`
$DIR/core/chains/evm/gas/block_history_estimator_test.go: `.Run(func(args mock.Arguments) {
elems := args.Get(1).([]rpc.BatchElem)
elems[0].Result = &evmtypes.Block{
Number: 42,
Hash: utils.NewHash(),
}
elems[1].Result = &evmtypes.Block{
Number: 41,
Hash: utils.NewHash(),
}
})`
$DIR/core/chains/evm/gas/block_history_estimator_test.go: `.Get(1)`
$DIR/core/chains/evm/gas/block_history_estimator_test.go: `.NewHash()`
$DIR/core/chains/evm/gas/block_history_estimator_test.go: `.NewHash()`
$DIR/core/chains/evm/gas/block_history_estimator_test.go: `.Once()`
$DIR/core/chains/evm/gas/block_history_estimator_test.go: `.Start(tests.Context(t))`
$DIR/core/chains/evm/gas/block_history_estimator_test.go: `.Context(t)`
$DIR/core/chains/evm/gas/block_history_estimator_test.go: `.Run("starts and loads partial history if fetch context times out", func(t *testing.T) {
geCfg2 := &gas.MockGasEstimatorConfig{}
geCfg2.EIP1559DynamicFeesF = true
geCfg2.PriceMinF = minGasPrice
bhCfg2 := newBlockHistoryConfig()
bhCfg2.BatchSizeF = uint32(1)
bhCfg2.BlockDelayF = blockDelay
bhCfg2.BlockHistorySizeF = historySize
bhCfg2.TransactionPercentileF = percentile
cfg2 := gas.NewMockConfig()
ethClient := testutils.NewEthClientMockWithDefaultChain(t)
l1Oracle := rollupMocks.NewL1Oracle(t)
bhe := newBlockHistoryEstimator(t, ethClient, cfg2, geCfg2, bhCfg2, l1Oracle)
h := &evmtypes.Head{Hash: utils.NewHash(), Number: 42, BaseFeePerGas: assets.NewWeiI(420)}
ethClient.On("HeadByNumber", mock.Anything, (*big.Int)(nil)).Return(h, nil)
// First succeeds (42)
ethClient.On("BatchCallContext", mock.Anything, mock.MatchedBy(func(b []rpc.BatchElem) bool {
return len(b) == 1 &&
b[0].Method == "eth_getBlockByNumber" && b[0].Args[0] == gas.Int64ToHex(42) && b[0].Args[1].(bool) && reflect.TypeOf(b[0].Result) == reflect.TypeOf(&evmtypes.Block{})
})).Return(nil).Run(func(args mock.Arguments) {
elems := args.Get(1).([]rpc.BatchElem)
elems[0].Result = &evmtypes.Block{
Number: 42,
Hash: utils.NewHash(),
}
}).Once()
// Second fails (41)
ethClient.On("BatchCallContext", mock.Anything, mock.MatchedBy(func(b []rpc.BatchElem) bool {
return len(b) == 1 &&
b[0].Method == "eth_getBlockByNumber" && b[0].Args[0] == gas.Int64ToHex(41) && b[0].Args[1].(bool) && reflect.TypeOf(b[0].Result) == reflect.TypeOf(&evmtypes.Block{})
})).Return(pkgerrors.Wrap(context.DeadlineExceeded, "some error message")).Once()
err := bhe.Start(tests.Context(t))
require.NoError(t, err)
require.Len(t, gas.GetRollingBlockHistory(bhe), 1)
assert.Equal(t, int(gas.GetRollingBlockHistory(bhe)[0].Number), 42)
assert.Equal(t, assets.NewWeiI(420), gas.GetLatestBaseFee(bhe))
})`
$DIR/core/chains/evm/gas/block_history_estimator_test.go: `.NewMockConfig()`
$DIR/core/chains/evm/gas/block_history_estimator_test.go: `.NewEthClientMockWithDefaultChain(t)`
$DIR/core/chains/evm/gas/block_history_estimator_test.go: `.NewL1Oracle(t)`
$DIR/core/chains/evm/gas/block_history_estimator_test.go: `.NewHash()`
$DIR/core/chains/evm/gas/block_history_estimator_test.go: `.NewWeiI(420)`
$DIR/core/chains/evm/gas/block_history_estimator_test.go: `.On("HeadByNumber", mock.Anything, (*big.Int)(nil))`
$DIR/core/chains/evm/gas/block_history_estimator_test.go: `.Return(h, nil)`
$DIR/core/chains/evm/gas/block_history_estimator_test.go: `.On("BatchCallContext", mock.Anything, mock.MatchedBy(func(b []rpc.BatchElem) bool {
return len(b) == 1 &&
b[0].Method == "eth_getBlockByNumber" && b[0].Args[0] == gas.Int64ToHex(42) && b[0].Args[1].(bool) && reflect.TypeOf(b[0].Result) == reflect.TypeOf(&evmtypes.Block{})
}))`
$DIR/core/chains/evm/gas/block_history_estimator_test.go: `.MatchedBy(func(b []rpc.BatchElem) bool {
return len(b) == 1 &&
b[0].Method == "eth_getBlockByNumber" && b[0].Args[0] == gas.Int64ToHex(42) && b[0].Args[1].(bool) && reflect.TypeOf(b[0].Result) == reflect.TypeOf(&evmtypes.Block{})
})`
$DIR/core/chains/evm/gas/block_history_estimator_test.go: `.Int64ToHex(42)`
$DIR/core/chains/evm/gas/block_history_estimator_test.go: `.TypeOf(b[0].Result)`
$DIR/core/chains/evm/gas/block_history_estimator_test.go: `.TypeOf(&evmtypes.Block{})`
$DIR/core/chains/evm/gas/block_history_estimator_test.go: `.Return(nil)`
$DIR/core/chains/evm/gas/block_history_estimator_test.go: `.Run(func(args mock.Arguments) {
elems := args.Get(1).([]rpc.BatchElem)
elems[0].Result = &evmtypes.Block{
Number: 42,
Hash: utils.NewHash(),
}
})`
$DIR/core/chains/evm/gas/block_history_estimator_test.go: `.Get(1)`
$DIR/core/chains/evm/gas/block_history_estimator_test.go: `.NewHash()`
$DIR/core/chains/evm/gas/block_history_estimator_test.go: `.Once()`
$DIR/core/chains/evm/gas/block_history_estimator_test.go: `.On("BatchCallContext", mock.Anything, mock.MatchedBy(func(b []rpc.BatchElem) bool {
return len(b) == 1 &&
b[0].Method == "eth_getBlockByNumber" && b[0].Args[0] == gas.Int64ToHex(41) && b[0].Args[1].(bool) && reflect.TypeOf(b[0].Result) == reflect.TypeOf(&evmtypes.Block{})
}))`
$DIR/core/chains/evm/gas/block_history_estimator_test.go: `.MatchedBy(func(b []rpc.BatchElem) bool {
return len(b) == 1 &&
b[0].Method == "eth_getBlockByNumber" && b[0].Args[0] == gas.Int64ToHex(41) && b[0].Args[1].(bool) && reflect.TypeOf(b[0].Result) == reflect.TypeOf(&evmtypes.Block{})
})`
$DIR/core/chains/evm/gas/block_history_estimator_test.go: `.Int64ToHex(41)`
$DIR/core/chains/evm/gas/block_history_estimator_test.go: `.TypeOf(b[0].Result)`
$DIR/core/chains/evm/gas/block_history_estimator_test.go: `.TypeOf(&evmtypes.Block{})`
$DIR/core/chains/evm/gas/block_history_estimator_test.go: `.Return(pkgerrors.Wrap(context.DeadlineExceeded, "some error message"))`
$DIR/core/chains/evm/gas/block_history_estimator_test.go: `.Wrap(context.DeadlineExceeded, "some error message")`
$DIR/core/chains/evm/gas/block_history_estimator_test.go: `.Once()`
$DIR/core/chains/evm/gas/block_history_estimator_test.go: `.Start(tests.Context(t))`
$DIR/core/chains/evm/gas/block_history_estimator_test.go: `.Context(t)`
$DIR/core/chains/evm/gas/block_history_estimator_test.go: `.Run("boots even if initial batch call returns nothing", func(t *testing.T) {
ethClient := testutils.NewEthClientMockWithDefaultChain(t)
l1Oracle := rollupMocks.NewL1Oracle(t)
bhe := newBlockHistoryEstimator(t, ethClient, cfg, geCfg, bhCfg, l1Oracle)
h := &evmtypes.Head{Hash: utils.NewHash(), Number: 42}
ethClient.On("HeadByNumber", mock.Anything, (*big.Int)(nil)).Return(h, nil)
ethClient.On("BatchCallContext", mock.Anything, mock.MatchedBy(func(b []rpc.BatchElem) bool {
return len(b) == int(historySize)
})).Return(nil)
err := bhe.Start(tests.Context(t))
require.NoError(t, err)
// non-eip1559 block
assert.Nil(t, gas.GetLatestBaseFee(bhe))
})`
$DIR/core/chains/evm/gas/block_history_estimator_test.go: `.NewEthClientMockWithDefaultChain(t)`
$DIR/core/chains/evm/gas/block_history_estimator_test.go: `.NewL1Oracle(t)`
$DIR/core/chains/evm/gas/block_history_estimator_test.go: `.NewHash()`
$DIR/core/chains/evm/gas/block_history_estimator_test.go: `.On("HeadByNumber", mock.Anything, (*big.Int)(nil))`
$DIR/core/chains/evm/gas/block_history_estimator_test.go: `.Return(h, nil)`
$DIR/core/chains/evm/gas/block_history_estimator_test.go: `.On("BatchCallContext", mock.Anything, mock.MatchedBy(func(b []rpc.BatchElem) bool {
return len(b) == int(historySize)
}))`
$DIR/core/chains/evm/gas/block_history_estimator_test.go: `.MatchedBy(func(b []rpc.BatchElem) bool {
return len(b) == int(historySize)
})`
$DIR/core/chains/evm/gas/block_history_estimator_test.go: `.Return(nil)`
$DIR/core/chains/evm/gas/block_history_estimator_test.go: `.Start(tests.Context(t))`
$DIR/core/chains/evm/gas/block_history_estimator_test.go: `.Context(t)`
$DIR/core/chains/evm/gas/block_history_estimator_test.go: `.Run("starts anyway if fetching latest head fails", func(t *testing.T) {
ethClient := testutils.NewEthClientMockWithDefaultChain(t)
l1Oracle := rollupMocks.NewL1Oracle(t)
bhe := newBlockHistoryEstimator(t, ethClient, cfg, geCfg, bhCfg, l1Oracle)
ethClient.On("HeadByNumber", mock.Anything, (*big.Int)(nil)).Return(nil, pkgerrors.New("something exploded"))
err := bhe.Start(tests.Context(t))
require.NoError(t, err)
assert.Nil(t, gas.GetLatestBaseFee(bhe))
_, _, err = bhe.GetLegacyGas(tests.Context(t), make([]byte, 0), 100, maxGasPrice)
require.Error(t, err)
require.Contains(t, err.Error(), "has not finished the first gas estimation yet, likely because a failure on start")
_, err = bhe.GetDynamicFee(tests.Context(t), maxGasPrice)
require.Error(t, err)
require.Contains(t, err.Error(), "has not finished the first gas estimation yet, likely because a failure on start")
})`
$DIR/core/chains/evm/gas/block_history_estimator_test.go: `.NewEthClientMockWithDefaultChain(t)`
$DIR/core/chains/evm/gas/block_history_estimator_test.go: `.NewL1Oracle(t)`
$DIR/core/chains/evm/gas/block_history_estimator_test.go: `.On("HeadByNumber", mock.Anything, (*big.Int)(nil))`
$DIR/core/chains/evm/gas/block_history_estimator_test.go: `.Return(nil, pkgerrors.New("something exploded"))`
$DIR/core/chains/evm/gas/block_history_estimator_test.go: `.New("something exploded")`
$DIR/core/chains/evm/gas/block_history_estimator_test.go: `.Start(tests.Context(t))`
$DIR/core/chains/evm/gas/block_history_estimator_test.go: `.Context(t)`
$DIR/core/chains/evm/gas/block_history_estimator_test.go: `.GetLegacyGas(tests.Context(t), make([]byte, 0), 100, maxGasPrice)`
$DIR/core/chains/evm/gas/block_history_estimator_test.go: `.Context(t)`
$DIR/core/chains/evm/gas/block_history_estimator_test.go: `.GetDynamicFee(tests.Context(t), maxGasPrice)`
$DIR/core/chains/evm/gas/block_history_estimator_test.go: `.Context(t)`
$DIR/core/chains/evm/gas/block_history_estimator_test.go: `.Run("starts anyway if fetching first fetch fails, but errors on estimation", func(t *testing.T) {
ethClient := testutils.NewEthClientMockWithDefaultChain(t)
l1Oracle := rollupMocks.NewL1Oracle(t)
bhe := newBlockHistoryEstimator(t, ethClient, cfg, geCfg, bhCfg, l1Oracle)
h := &evmtypes.Head{Hash: utils.NewHash(), Number: 42, BaseFeePerGas: assets.NewWeiI(420)}
ethClient.On("HeadByNumber", mock.Anything, (*big.Int)(nil)).Return(h, nil)
ethClient.On("BatchCallContext", mock.Anything, mock.Anything).Return(pkgerrors.New("something went wrong"))
err := bhe.Start(tests.Context(t))
require.NoError(t, err)
assert.Equal(t, assets.NewWeiI(420), gas.GetLatestBaseFee(bhe))
_, _, err = bhe.GetLegacyGas(tests.Context(t), make([]byte, 0), 100, maxGasPrice)
require.Error(t, err)
require.Contains(t, err.Error(), "has not finished the first gas estimation yet, likely because a failure on start")
_, err = bhe.GetDynamicFee(tests.Context(t), maxGasPrice)
require.Error(t, err)
require.Contains(t, err.Error(), "has not finished the first gas estimation yet, likely because a failure on start")
})`
$DIR/core/chains/evm/gas/block_history_estimator_test.go: `.NewEthClientMockWithDefaultChain(t)`
$DIR/core/chains/evm/gas/block_history_estimator_test.go: `.NewL1Oracle(t)`
$DIR/core/chains/evm/gas/block_history_estimator_test.go: `.NewHash()`
$DIR/core/chains/evm/gas/block_history_estimator_test.go: `.NewWeiI(420)`
$DIR/core/chains/evm/gas/block_history_estimator_test.go: `.On("HeadByNumber", mock.Anything, (*big.Int)(nil))`
$DIR/core/chains/evm/gas/block_history_estimator_test.go: `.Return(h, nil)`
$DIR/core/chains/evm/gas/block_history_estimator_test.go: `.On("BatchCallContext", mock.Anything, mock.Anything)`
$DIR/core/chains/evm/gas/block_history_estimator_test.go: `.Return(pkgerrors.New("something went wrong"))`
$DIR/core/chains/evm/gas/block_history_estimator_test.go: `.New("something went wrong")`
$DIR/core/chains/evm/gas/block_history_estimator_test.go: `.Start(tests.Context(t))`
$DIR/core/chains/evm/gas/block_history_estimator_test.go: `.Context(t)`
$DIR/core/chains/evm/gas/block_history_estimator_test.go: `.GetLegacyGas(tests.Context(t), make([]byte, 0), 100, maxGasPrice)`
$DIR/core/chains/evm/gas/block_history_estimator_test.go: `.Context(t)`
$DIR/core/chains/evm/gas/block_history_estimator_test.go: `.GetDynamicFee(tests.Context(t), maxGasPrice)`
$DIR/core/chains/evm/gas/block_history_estimator_test.go: `.Context(t)`
$DIR/core/chains/evm/gas/block_history_estimator_test.go: `.Run("returns error if main context is cancelled", func(t *testing.T) {
ethClient := testutils.NewEthClientMockWithDefaultChain(t)
l1Oracle := rollupMocks.NewL1Oracle(t)
bhe := newBlockHistoryEstimator(t, ethClient, cfg, geCfg, bhCfg, l1Oracle)
h := &evmtypes.Head{Hash: utils.NewHash(), Number: 42, BaseFeePerGas: assets.NewWeiI(420)}
ethClient.On("HeadByNumber", mock.Anything, (*big.Int)(nil)).Return(h, nil)
ethClient.On("BatchCallContext", mock.Anything, mock.Anything).Return(pkgerrors.New("this error doesn't matter"))
ctx, cancel := context.WithCancel(tests.Context(t))
cancel()
err := bhe.Start(ctx)
require.Error(t, err)
assert.Contains(t, err.Error(), "context canceled")
})`
$DIR/core/chains/evm/gas/block_history_estimator_test.go: `.NewEthClientMockWithDefaultChain(t)`
$DIR/core/chains/evm/gas/block_history_estimator_test.go: `.NewL1Oracle(t)`
$DIR/core/chains/evm/gas/block_history_estimator_test.go: `.NewHash()`
$DIR/core/chains/evm/gas/block_history_estimator_test.go: `.NewWeiI(420)`
$DIR/core/chains/evm/gas/block_history_estimator_test.go: `.On("HeadByNumber", mock.Anything, (*big.Int)(nil))`
$DIR/core/chains/evm/gas/block_history_estimator_test.go: `.Return(h, nil)`
$DIR/core/chains/evm/gas/block_history_estimator_test.go: `.On("BatchCallContext", mock.Anything, mock.Anything)`
$DIR/core/chains/evm/gas/block_history_estimator_test.go: `.Return(pkgerrors.New("this error doesn't matter"))`
$DIR/core/chains/evm/gas/block_history_estimator_test.go: `.New("this error doesn't matter")`
$DIR/core/chains/evm/gas/block_history_estimator_test.go: `.WithCancel(tests.Context(t))`
$DIR/core/chains/evm/gas/block_history_estimator_test.go: `.Context(t)`
$DIR/core/chains/evm/gas/block_history_estimator_test.go: `.Start(ctx)`
$DIR/core/chains/evm/gas/block_history_estimator_test.go: `.NewEthClientMockWithDefaultChain(t)`
$DIR/core/chains/evm/gas/block_history_estimator_test.go: `.NewL1Oracle(t)`
$DIR/core/chains/evm/gas/block_history_estimator_test.go: `.NewHash()`
$DIR/core/chains/evm/gas/block_history_estimator_test.go: `.NewWeiI(420)`
$DIR/core/chains/evm/gas/block_history_estimator_test.go: `.On("HeadByNumber", mock.Anything, (*big.Int)(nil))`
$DIR/core/chains/evm/gas/block_history_estimator_test.go: `.Return(h, nil)`
$DIR/core/chains/evm/gas/block_history_estimator_test.go: `.On("BatchCallContext", mock.Anything, mock.Anything)`
$DIR/core/chains/evm/gas/block_history_estimator_test.go: `.Return(pkgerrors.New("this error doesn't matter"))`
$DIR/core/chains/evm/gas/block_history_estimator_test.go: `.New("this error doesn't matter")`
$DIR/core/chains/evm/gas/block_history_estimator_test.go: `.Run(func(_ mock.Arguments) {
time.Sleep(gas.MaxStartTime + 1*time.Second)
})`
$DIR/core/chains/evm/gas/block_history_estimator_test.go: `.Sleep(gas.MaxStartTime + 1*time.Second)`
$DIR/core/chains/evm/gas/block_history_estimator_test.go: `.Start(tests.Context(t))`
$DIR/core/chains/evm/gas/block_history_estimator_test.go: `.Context(t)`
$DIR/core/chains/evm/gas/block_history_estimator_test.go: `.GetLegacyGas(tests.Context(t), make([]byte, 0), 100, maxGasPrice)`
$DIR/core/chains/evm/gas/block_history_estimator_test.go: `.Context(t)`
$DIR/core/chains/evm/gas/block_history_estimator_test.go: `.GetDynamicFee(tests.Context(t), maxGasPrice)`
$DIR/core/chains/evm/gas/block_history_estimator_test.go: `.Context(t)`
$DIR/core/chains/evm/gas/block_history_estimator_test.go: `.NewMockConfig()`
$DIR/core/chains/evm/gas/block_history_estimator_test.go: `.NewL1Oracle(t)`
$DIR/core/chains/evm/gas/block_history_estimator_test.go: `.Head(1)`
$DIR/core/chains/evm/gas/block_history_estimator_test.go: `.OnNewLongestChain(tests.Context(t), h)`
$DIR/core/chains/evm/gas/block_history_estimator_test.go: `.Context(t)`
$DIR/core/chains/evm/gas/block_history_estimator_test.go: `.Head(2)`
$DIR/core/chains/evm/gas/block_history_estimator_test.go: `.NewWeiI(500)`
$DIR/core/chains/evm/gas/block_history_estimator_test.go: `.OnNewLongestChain(tests.Context(t), h)`
$DIR/core/chains/evm/gas/block_history_estimator_test.go: `.Context(t)`
$DIR/core/chains/evm/gas/block_history_estimator_test.go: `.NewWeiI(500)`
$DIR/core/chains/evm/gas/block_history_estimator_test.go: `.GetLatestBaseFee(bhe)`
$DIR/core/chains/evm/gas/block_history_estimator_test.go: `.Run("with history size of 0, errors", func(t *testing.T) {
ethClient := testutils.NewEthClientMockWithDefaultChain(t)
l1Oracle := rollupMocks.NewL1Oracle(t)
cfg := gas.NewMockConfig()
bhCfg := newBlockHistoryConfig()
var blockDelay uint16 = 3
var historySize uint16
bhCfg.BlockDelayF = blockDelay
bhCfg.BlockHistorySizeF = historySize
geCfg := &gas.MockGasEstimatorConfig{}
geCfg.EIP1559DynamicFeesF = true
bhe := newBlockHistoryEstimator(t, ethClient, cfg, geCfg, bhCfg, l1Oracle)
head := testutils.Head(42)
err := bhe.FetchBlocks(tests.Context(t), head)
require.Error(t, err)
require.EqualError(t, err, "BlockHistoryEstimator: history size must be > 0, got: 0")
})`
$DIR/core/chains/evm/gas/block_history_estimator_test.go: `.NewEthClientMockWithDefaultChain(t)`
$DIR/core/chains/evm/gas/block_history_estimator_test.go: `.NewL1Oracle(t)`
$DIR/core/chains/evm/gas/block_history_estimator_test.go: `.NewMockConfig()`
$DIR/core/chains/evm/gas/block_history_estimator_test.go: `.Head(42)`
$DIR/core/chains/evm/gas/block_history_estimator_test.go: `.FetchBlocks(tests.Context(t), head)`
$DIR/core/chains/evm/gas/block_history_estimator_test.go: `.Context(t)`
$DIR/core/chains/evm/gas/block_history_estimator_test.go: `.Run("with current block height less than block delay does nothing", func(t *testing.T) {
ethClient := testutils.NewEthClientMockWithDefaultChain(t)
l1Oracle := rollupMocks.NewL1Oracle(t)
cfg := gas.NewMockConfig()
bhCfg := newBlockHistoryConfig()
var blockDelay uint16 = 3
var historySize uint16 = 1
bhCfg.BlockDelayF = blockDelay
bhCfg.BlockHistorySizeF = historySize
geCfg := &gas.MockGasEstimatorConfig{}
geCfg.EIP1559DynamicFeesF = true
bhe := newBlockHistoryEstimator(t, ethClient, cfg, geCfg, bhCfg, l1Oracle)
for i := -1; i < 3; i++ {
head := testutils.Head(i)
err := bhe.FetchBlocks(tests.Context(t), head)
require.Error(t, err)
require.EqualError(t, err, fmt.Sprintf("BlockHistoryEstimator: cannot fetch, current block height %v is lower than EVM.RPCBlockQueryDelay=3", i))
}
})`
$DIR/core/chains/evm/gas/block_history_estimator_test.go: `.NewEthClientMockWithDefaultChain(t)`
$DIR/core/chains/evm/gas/block_history_estimator_test.go: `.NewL1Oracle(t)`
$DIR/core/chains/evm/gas/block_history_estimator_test.go: `.NewMockConfig()`
$DIR/core/chains/evm/gas/block_history_estimator_test.go: `.Head(i)`
$DIR/core/chains/evm/gas/block_history_estimator_test.go: `.FetchBlocks(tests.Context(t), head)`
$DIR/core/chains/evm/gas/block_history_estimator_test.go: `.Context(t)`
$DIR/core/chains/evm/gas/block_history_estimator_test.go: `.Run("with error retrieving blocks returns error", func(t *testing.T) {
ethClient := testutils.NewEthClientMockWithDefaultChain(t)
l1Oracle := rollupMocks.NewL1Oracle(t)
cfg := gas.NewMockConfig()
bhCfg := newBlockHistoryConfig()
var blockDelay uint16 = 3
var historySize uint16 = 3
var batchSize uint32
bhCfg.BlockDelayF = blockDelay
bhCfg.BlockHistorySizeF = historySize
bhCfg.BatchSizeF = batchSize
geCfg := &gas.MockGasEstimatorConfig{}
geCfg.EIP1559DynamicFeesF = true
bhe := newBlockHistoryEstimator(t, ethClient, cfg, geCfg, bhCfg, l1Oracle)
ethClient.On("BatchCallContext", mock.Anything, mock.Anything).Return(pkgerrors.New("something exploded"))
err := bhe.FetchBlocks(tests.Context(t), testutils.Head(42))
require.Error(t, err)
assert.EqualError(t, err, "BlockHistoryEstimator#fetchBlocks error fetching blocks with BatchCallContext: something exploded")
})`
$DIR/core/chains/evm/gas/block_history_estimator_test.go: `.NewEthClientMockWithDefaultChain(t)`
$DIR/core/chains/evm/gas/block_history_estimator_test.go: `.NewL1Oracle(t)`
$DIR/core/chains/evm/gas/block_history_estimator_test.go: `.NewMockConfig()`
$DIR/core/chains/evm/gas/block_history_estimator_test.go: `.On("BatchCallContext", mock.Anything, mock.Anything)`
$DIR/core/chains/evm/gas/block_history_estimator_test.go: `.Return(pkgerrors.New("something exploded"))`
$DIR/core/chains/evm/gas/block_history_estimator_test.go: `.New("something exploded")`
$DIR/core/chains/evm/gas/block_history_estimator_test.go: `.FetchBlocks(tests.Context(t), testutils.Head(42))`
$DIR/core/chains/evm/gas/block_history_estimator_test.go: `.Context(t)`
$DIR/core/chains/evm/gas/block_history_estimator_test.go: `.Head(42)`
$DIR/core/chains/evm/gas/block_history_estimator_test.go: `.Run("batch fetches heads and transactions and sets them on the block history estimator instance", func(t *testing.T) {
ethClient := testutils.NewEthClientMockWithDefaultChain(t)
l1Oracle := rollupMocks.NewL1Oracle(t)
cfg := gas.NewMockConfig()
bhCfg := newBlockHistoryConfig()
var blockDelay uint16
var historySize uint16 = 3
var batchSize uint32 = 2
bhCfg.BlockDelayF = blockDelay
bhCfg.BlockHistorySizeF = historySize
// Test batching
bhCfg.BatchSizeF = batchSize
geCfg := &gas.MockGasEstimatorConfig{}
geCfg.EIP1559DynamicFeesF = true
bhe := newBlockHistoryEstimator(t, ethClient, cfg, geCfg, bhCfg, l1Oracle)
b41 := evmtypes.Block{
Number: 41,
Hash: utils.NewHash(),
Transactions: legacyTransactionsFromGasPrices(1, 2),
}
b42 := evmtypes.Block{
Number: 42,
Hash: utils.NewHash(),
Transactions: legacyTransactionsFromGasPrices(3),
}
b43 := evmtypes.Block{
Number: 43,
Hash: utils.NewHash(),
Transactions: legacyTransactionsFromGasPrices(),
}
ethClient.On("BatchCallContext", mock.Anything, mock.MatchedBy(func(b []rpc.BatchElem) bool {
return len(b) == 2 &&
b[0].Method == "eth_getBlockByNumber" && b[0].Args[0] == gas.Int64ToHex(43) && b[0].Args[1].(bool) && reflect.TypeOf(b[0].Result) == reflect.TypeOf(&evmtypes.Block{}) &&
b[1].Method == "eth_getBlockByNumber" && b[1].Args[0] == gas.Int64ToHex(42) && b[1].Args[1].(bool) && reflect.TypeOf(b[1].Result) == reflect.TypeOf(&evmtypes.Block{})
})).Once().Return(nil).Run(func(args mock.Arguments) {
elems := args.Get(1).([]rpc.BatchElem)
elems[0].Result = &b43
// This errored block (42) will be ignored
elems[1].Error = pkgerrors.New("something went wrong")
})
ethClient.On("BatchCallContext", mock.Anything, mock.MatchedBy(func(b []rpc.BatchElem) bool {
return len(b) == 1 &&
b[0].Method == "eth_getBlockByNumber" && b[0].Args[0] == gas.Int64ToHex(41) && b[0].Args[1].(bool) && reflect.TypeOf(b[0].Result) == reflect.TypeOf(&evmtypes.Block{})
})).Once().Return(nil).Run(func(args mock.Arguments) {
elems := args.Get(1).([]rpc.BatchElem)
elems[0].Result = &b41
})
err := bhe.FetchBlocks(tests.Context(t), testutils.Head(43))
require.NoError(t, err)
require.Len(t, gas.GetRollingBlockHistory(bhe), 2)
assert.Equal(t, 41, int(gas.GetRollingBlockHistory(bhe)[0].Number))
// 42 is missing because the fetch errored
assert.Equal(t, 43, int(gas.GetRollingBlockHistory(bhe)[1].Number))
assert.Len(t, gas.GetRollingBlockHistory(bhe)[0].Transactions, 2)
assert.Len(t, gas.GetRollingBlockHistory(bhe)[1].Transactions, 0)
// On new fetch, rolls over the history and drops the old heads
b44 := evmtypes.Block{
Number: 44,
Hash: utils.NewHash(),
Transactions: legacyTransactionsFromGasPrices(4),
}
// We are gonna refetch blocks 42 and 44
// 43 is skipped because it was already in the history
ethClient.On("BatchCallContext", mock.Anything, mock.MatchedBy(func(b []rpc.BatchElem) bool {
return len(b) == 2 &&
b[0].Method == "eth_getBlockByNumber" && b[0].Args[0] == gas.Int64ToHex(44) && b[0].Args[1].(bool) && reflect.TypeOf(b[0].Result) == reflect.TypeOf(&evmtypes.Block{}) &&
b[1].Method == "eth_getBlockByNumber" && b[1].Args[0] == gas.Int64ToHex(42) && b[1].Args[1].(bool) && reflect.TypeOf(b[1].Result) == reflect.TypeOf(&evmtypes.Block{})
})).Once().Return(nil).Run(func(args mock.Arguments) {
elems := args.Get(1).([]rpc.BatchElem)
elems[0].Result = &b44
elems[1].Result = &b42
})
head := evmtypes.NewHead(big.NewInt(44), b44.Hash, b43.Hash, uint64(time.Now().Unix()), ubig.New(testutils.FixtureChainID))
err = bhe.FetchBlocks(tests.Context(t), &head)
require.NoError(t, err)
require.Len(t, gas.GetRollingBlockHistory(bhe), 3)
assert.Equal(t, 42, int(gas.GetRollingBlockHistory(bhe)[0].Number))
assert.Equal(t, 43, int(gas.GetRollingBlockHistory(bhe)[1].Number))
assert.Equal(t, 44, int(gas.GetRollingBlockHistory(bhe)[2].Number))
assert.Len(t, gas.GetRollingBlockHistory(bhe)[0].Transactions, 1)
assert.Len(t, gas.GetRollingBlockHistory(bhe)[1].Transactions, 0)
assert.Len(t, gas.GetRollingBlockHistory(bhe)[2].Transactions, 1)
})`
$DIR/core/chains/evm/gas/block_history_estimator_test.go: `.NewEthClientMockWithDefaultChain(t)`
$DIR/core/chains/evm/gas/block_history_estimator_test.go: `.NewL1Oracle(t)`
$DIR/core/chains/evm/gas/block_history_estimator_test.go: `.NewMockConfig()`
$DIR/core/chains/evm/gas/block_history_estimator_test.go: `.NewHash()`
$DIR/core/chains/evm/gas/block_history_estimator_test.go: `.NewHash()`
$DIR/core/chains/evm/gas/block_history_estimator_test.go: `.NewHash()`
$DIR/core/chains/evm/gas/block_history_estimator_test.go: `.On("BatchCallContext", mock.Anything, mock.MatchedBy(func(b []rpc.BatchElem) bool {
return len(b) == 2 &&
b[0].Method == "eth_getBlockByNumber" && b[0].Args[0] == gas.Int64ToHex(43) && b[0].Args[1].(bool) && reflect.TypeOf(b[0].Result) == reflect.TypeOf(&evmtypes.Block{}) &&
b[1].Method == "eth_getBlockByNumber" && b[1].Args[0] == gas.Int64ToHex(42) && b[1].Args[1].(bool) && reflect.TypeOf(b[1].Result) == reflect.TypeOf(&evmtypes.Block{})
}))`
$DIR/core/chains/evm/gas/block_history_estimator_test.go: `.MatchedBy(func(b []rpc.BatchElem) bool {
return len(b) == 2 &&
b[0].Method == "eth_getBlockByNumber" && b[0].Args[0] == gas.Int64ToHex(43) && b[0].Args[1].(bool) && reflect.TypeOf(b[0].Result) == reflect.TypeOf(&evmtypes.Block{}) &&
b[1].Method == "eth_getBlockByNumber" && b[1].Args[0] == gas.Int64ToHex(42) && b[1].Args[1].(bool) && reflect.TypeOf(b[1].Result) == reflect.TypeOf(&evmtypes.Block{})
})`
$DIR/core/chains/evm/gas/block_history_estimator_test.go: `.Int64ToHex(43)`
$DIR/core/chains/evm/gas/block_history_estimator_test.go: `.TypeOf(b[0].Result)`
$DIR/core/chains/evm/gas/block_history_estimator_test.go: `.TypeOf(&evmtypes.Block{})`
$DIR/core/chains/evm/gas/block_history_estimator_test.go: `.Int64ToHex(42)`
$DIR/core/chains/evm/gas/block_history_estimator_test.go: `.TypeOf(b[1].Result)`
$DIR/core/chains/evm/gas/block_history_estimator_test.go: `.TypeOf(&evmtypes.Block{})`
$DIR/core/chains/evm/gas/block_history_estimator_test.go: `.Once()`
$DIR/core/chains/evm/gas/block_history_estimator_test.go: `.Return(nil)`
$DIR/core/chains/evm/gas/block_history_estimator_test.go: `.Run(func(args mock.Arguments) {
elems := args.Get(1).([]rpc.BatchElem)
elems[0].Result = &b43
// This errored block (42) will be ignored
elems[1].Error = pkgerrors.New("something went wrong")
})`
$DIR/core/chains/evm/gas/block_history_estimator_test.go: `.Get(1)`
$DIR/core/chains/evm/gas/block_history_estimator_test.go: `.New("something went wrong")`
$DIR/core/chains/evm/gas/block_history_estimator_test.go: `.On("BatchCallContext", mock.Anything, mock.MatchedBy(func(b []rpc.BatchElem) bool {
return len(b) == 1 &&
b[0].Method == "eth_getBlockByNumber" && b[0].Args[0] == gas.Int64ToHex(41) && b[0].Args[1].(bool) && reflect.TypeOf(b[0].Result) == reflect.TypeOf(&evmtypes.Block{})
}))`
$DIR/core/chains/evm/gas/block_history_estimator_test.go: `.MatchedBy(func(b []rpc.BatchElem) bool {
return len(b) == 1 &&
b[0].Method == "eth_getBlockByNumber" && b[0].Args[0] == gas.Int64ToHex(41) && b[0].Args[1].(bool) && reflect.TypeOf(b[0].Result) == reflect.TypeOf(&evmtypes.Block{})
})`
$DIR/core/chains/evm/gas/block_history_estimator_test.go: `.Int64ToHex(41)`
$DIR/core/chains/evm/gas/block_history_estimator_test.go: `.TypeOf(b[0].Result)`
$DIR/core/chains/evm/gas/block_history_estimator_test.go: `.TypeOf(&evmtypes.Block{})`
$DIR/core/chains/evm/gas/block_history_estimator_test.go: `.Once()`
$DIR/core/chains/evm/gas/block_history_estimator_test.go: `.Return(nil)`
$DIR/core/chains/evm/gas/block_history_estimator_test.go: `.Run(func(args mock.Arguments) {
elems := args.Get(1).([]rpc.BatchElem)
elems[0].Result = &b41
})`
$DIR/core/chains/evm/gas/block_history_estimator_test.go: `.Get(1)`
$DIR/core/chains/evm/gas/block_history_estimator_test.go: `.FetchBlocks(tests.Context(t), testutils.Head(43))`
$DIR/core/chains/evm/gas/block_history_estimator_test.go: `.Context(t)`
$DIR/core/chains/evm/gas/block_history_estimator_test.go: `.Head(43)`
$DIR/core/chains/evm/gas/block_history_estimator_test.go: `.NewHash()`
$DIR/core/chains/evm/gas/block_history_estimator_test.go: `.On("BatchCallContext", mock.Anything, mock.MatchedBy(func(b []rpc.BatchElem) bool {
return len(b) == 2 &&
b[0].Method == "eth_getBlockByNumber" && b[0].Args[0] == gas.Int64ToHex(44) && b[0].Args[1].(bool) && reflect.TypeOf(b[0].Result) == reflect.TypeOf(&evmtypes.Block{}) &&
b[1].Method == "eth_getBlockByNumber" && b[1].Args[0] == gas.Int64ToHex(42) && b[1].Args[1].(bool) && reflect.TypeOf(b[1].Result) == reflect.TypeOf(&evmtypes.Block{})
}))`
$DIR/core/chains/evm/gas/block_history_estimator_test.go: `.MatchedBy(func(b []rpc.BatchElem) bool {
return len(b) == 2 &&
b[0].Method == "eth_getBlockByNumber" && b[0].Args[0] == gas.Int64ToHex(44) && b[0].Args[1].(bool) && reflect.TypeOf(b[0].Result) == reflect.TypeOf(&evmtypes.Block{}) &&
b[1].Method == "eth_getBlockByNumber" && b[1].Args[0] == gas.Int64ToHex(42) && b[1].Args[1].(bool) && reflect.TypeOf(b[1].Result) == reflect.TypeOf(&evmtypes.Block{})
})`
$DIR/core/chains/evm/gas/block_history_estimator_test.go: `.Int64ToHex(44)`
$DIR/core/chains/evm/gas/block_history_estimator_test.go: `.TypeOf(b[0].Result)`
$DIR/core/chains/evm/gas/block_history_estimator_test.go: `.TypeOf(&evmtypes.Block{})`
$DIR/core/chains/evm/gas/block_history_estimator_test.go: `.Int64ToHex(42)`
$DIR/core/chains/evm/gas/block_history_estimator_test.go: `.TypeOf(b[1].Result)`
$DIR/core/chains/evm/gas/block_history_estimator_test.go: `.TypeOf(&evmtypes.Block{})`
$DIR/core/chains/evm/gas/block_history_estimator_test.go: `.Once()`
$DIR/core/chains/evm/gas/block_history_estimator_test.go: `.Return(nil)`
$DIR/core/chains/evm/gas/block_history_estimator_test.go: `.Run(func(args mock.Arguments) {
elems := args.Get(1).([]rpc.BatchElem)
elems[0].Result = &b44
elems[1].Result = &b42
})`
$DIR/core/chains/evm/gas/block_history_estimator_test.go: `.Get(1)`
$DIR/core/chains/evm/gas/block_history_estimator_test.go: `.NewHead(big.NewInt(44), b44.Hash, b43.Hash, uint64(time.Now().Unix()), ubig.New(testutils.FixtureChainID))`
$DIR/core/chains/evm/gas/block_history_estimator_test.go: `.NewInt(44)`
$DIR/core/chains/evm/gas/block_history_estimator_test.go: `.Now()`
$DIR/core/chains/evm/gas/block_history_estimator_test.go: `.Unix()`
$DIR/core/chains/evm/gas/block_history_estimator_test.go: `.New(testutils.FixtureChainID)`
$DIR/core/chains/evm/gas/block_history_estimator_test.go: `.FetchBlocks(tests.Context(t), &head)`
$DIR/core/chains/evm/gas/block_history_estimator_test.go: `.Context(t)`
$DIR/core/chains/evm/gas/block_history_estimator_test.go: `.Run("does not refetch blocks below EVM.FinalityDepth", func(t *testing.T) {
ethClient := testutils.NewEthClientMockWithDefaultChain(t)
l1Oracle := rollupMocks.NewL1Oracle(t)
cfg := gas.NewMockConfig()
bhCfg := newBlockHistoryConfig()
var blockDelay uint16
var historySize uint16 = 3
var batchSize uint32 = 2
bhCfg.BlockDelayF = blockDelay
bhCfg.BlockHistorySizeF = historySize
bhCfg.BatchSizeF = batchSize
geCfg := &gas.MockGasEstimatorConfig{}
geCfg.EIP1559DynamicFeesF = true
bhe := newBlockHistoryEstimator(t, ethClient, cfg, geCfg, bhCfg, l1Oracle)
b0 := evmtypes.Block{
Number: 0,
Hash: utils.NewHash(),
Transactions: legacyTransactionsFromGasPrices(9001),
}
b1 := evmtypes.Block{
Number: 1,
Hash: utils.NewHash(),
Transactions: legacyTransactionsFromGasPrices(9002),
}
blocks := []evmtypes.Block{b0, b1}
gas.SetRollingBlockHistory(bhe, blocks)
b2 := evmtypes.Block{
Number: 2,
Hash: utils.NewHash(),
Transactions: legacyTransactionsFromGasPrices(1, 2),
}
b3 := evmtypes.Block{
Number: 3,
Hash: utils.NewHash(),
Transactions: legacyTransactionsFromGasPrices(1, 2),
}
ethClient.On("BatchCallContext", mock.Anything, mock.MatchedBy(func(b []rpc.BatchElem) bool {
return len(b) == 2 &&
b[0].Method == "eth_getBlockByNumber" && b[0].Args[0] == gas.Int64ToHex(3) && b[0].Args[1].(bool) && reflect.TypeOf(b[0].Result) == reflect.TypeOf(&evmtypes.Block{}) &&
b[1].Method == "eth_getBlockByNumber" && b[1].Args[0] == gas.Int64ToHex(2) && b[1].Args[1].(bool) && reflect.TypeOf(b[1].Result) == reflect.TypeOf(&evmtypes.Block{})
})).Once().Return(nil).Run(func(args mock.Arguments) {
elems := args.Get(1).([]rpc.BatchElem)
elems[0].Result = &b3
elems[1].Result = &b2
})
head2 := evmtypes.NewHead(big.NewInt(2), b2.Hash, b1.Hash, uint64(time.Now().Unix()), ubig.New(testutils.FixtureChainID))
head3 := evmtypes.NewHead(big.NewInt(3), b3.Hash, b2.Hash, uint64(time.Now().Unix()), ubig.New(testutils.FixtureChainID))
head3.Parent = &head2
err := bhe.FetchBlocks(tests.Context(t), &head3)
require.NoError(t, err)
require.Len(t, gas.GetRollingBlockHistory(bhe), 3)
assert.Equal(t, 1, int(gas.GetRollingBlockHistory(bhe)[0].Number))
assert.Equal(t, 2, int(gas.GetRollingBlockHistory(bhe)[1].Number))
assert.Equal(t, 3, int(gas.GetRollingBlockHistory(bhe)[2].Number))
})`
$DIR/core/chains/evm/gas/block_history_estimator_test.go: `.NewEthClientMockWithDefaultChain(t)`
$DIR/core/chains/evm/gas/block_history_estimator_test.go: `.NewL1Oracle(t)`
$DIR/core/chains/evm/gas/block_history_estimator_test.go: `.NewMockConfig()`
$DIR/core/chains/evm/gas/block_history_estimator_test.go: `.NewHash()`
$DIR/core/chains/evm/gas/block_history_estimator_test.go: `.NewHash()`
$DIR/core/chains/evm/gas/block_history_estimator_test.go: `.SetRollingBlockHistory(bhe, blocks)`
$DIR/core/chains/evm/gas/block_history_estimator_test.go: `.NewHash()`
$DIR/core/chains/evm/gas/block_history_estimator_test.go: `.NewHash()`
$DIR/core/chains/evm/gas/block_history_estimator_test.go: `.On("BatchCallContext", mock.Anything, mock.MatchedBy(func(b []rpc.BatchElem) bool {
return len(b) == 2 &&
b[0].Method == "eth_getBlockByNumber" && b[0].Args[0] == gas.Int64ToHex(3) && b[0].Args[1].(bool) && reflect.TypeOf(b[0].Result) == reflect.TypeOf(&evmtypes.Block{}) &&
b[1].Method == "eth_getBlockByNumber" && b[1].Args[0] == gas.Int64ToHex(2) && b[1].Args[1].(bool) && reflect.TypeOf(b[1].Result) == reflect.TypeOf(&evmtypes.Block{})
}))`
$DIR/core/chains/evm/gas/block_history_estimator_test.go: `.MatchedBy(func(b []rpc.BatchElem) bool {
return len(b) == 2 &&
b[0].Method == "eth_getBlockByNumber" && b[0].Args[0] == gas.Int64ToHex(3) && b[0].Args[1].(bool) && reflect.TypeOf(b[0].Result) == reflect.TypeOf(&evmtypes.Block{}) &&
b[1].Method == "eth_getBlockByNumber" && b[1].Args[0] == gas.Int64ToHex(2) && b[1].Args[1].(bool) && reflect.TypeOf(b[1].Result) == reflect.TypeOf(&evmtypes.Block{})
})`
$DIR/core/chains/evm/gas/block_history_estimator_test.go: `.Int64ToHex(3)`
$DIR/core/chains/evm/gas/block_history_estimator_test.go: `.TypeOf(b[0].Result)`
$DIR/core/chains/evm/gas/block_history_estimator_test.go: `.TypeOf(&evmtypes.Block{})`
$DIR/core/chains/evm/gas/block_history_estimator_test.go: `.Int64ToHex(2)`
$DIR/core/chains/evm/gas/block_history_estimator_test.go: `.TypeOf(b[1].Result)`
$DIR/core/chains/evm/gas/block_history_estimator_test.go: `.TypeOf(&evmtypes.Block{})`
$DIR/core/chains/evm/gas/block_history_estimator_test.go: `.Once()`
$DIR/core/chains/evm/gas/block_history_estimator_test.go: `.Return(nil)`
$DIR/core/chains/evm/gas/block_history_estimator_test.go: `.Run(func(args mock.Arguments) {
elems := args.Get(1).([]rpc.BatchElem)
elems[0].Result = &b3
elems[1].Result = &b2
})`
$DIR/core/chains/evm/gas/block_history_estimator_test.go: `.Get(1)`
$DIR/core/chains/evm/gas/block_history_estimator_test.go: `.NewHead(big.NewInt(2), b2.Hash, b1.Hash, uint64(time.Now().Unix()), ubig.New(testutils.FixtureChainID))`
$DIR/core/chains/evm/gas/block_history_estimator_test.go: `.NewInt(2)`
$DIR/core/chains/evm/gas/block_history_estimator_test.go: `.Now()`
$DIR/core/chains/evm/gas/block_history_estimator_test.go: `.Unix()`
$DIR/core/chains/evm/gas/block_history_estimator_test.go: `.New(testutils.FixtureChainID)`
$DIR/core/chains/evm/gas/block_history_estimator_test.go: `.NewHead(big.NewInt(3), b3.Hash, b2.Hash, uint64(time.Now().Unix()), ubig.New(testutils.FixtureChainID))`
$DIR/core/chains/evm/gas/block_history_estimator_test.go: `.NewInt(3)`
$DIR/core/chains/evm/gas/block_history_estimator_test.go: `.Now()`
$DIR/core/chains/evm/gas/block_history_estimator_test.go: `.Unix()`
$DIR/core/chains/evm/gas/block_history_estimator_test.go: `.New(testutils.FixtureChainID)`
$DIR/core/chains/evm/gas/block_history_estimator_test.go: `.FetchBlocks(tests.Context(t), &head3)`
$DIR/core/chains/evm/gas/block_history_estimator_test.go: `.Context(t)`
$DIR/core/chains/evm/gas/block_history_estimator_test.go: `.Run("replaces blocks on re-org within EVM.FinalityDepth", func(t *testing.T) {
ethClient := testutils.NewEthClientMockWithDefaultChain(t)
l1Oracle := rollupMocks.NewL1Oracle(t)
cfg := gas.NewMockConfig()
bhCfg := newBlockHistoryConfig()
var blockDelay uint16
var historySize uint16 = 3
var batchSize uint32 = 2
bhCfg.BlockDelayF = blockDelay
bhCfg.BlockHistorySizeF = historySize
bhCfg.BatchSizeF = batchSize
geCfg := &gas.MockGasEstimatorConfig{}
geCfg.EIP1559DynamicFeesF = true
bhe := newBlockHistoryEstimator(t, ethClient, cfg, geCfg, bhCfg, l1Oracle)
b0 := evmtypes.Block{
Number: 0,
Hash: utils.NewHash(),
Transactions: legacyTransactionsFromGasPrices(9001),
}
b1 := evmtypes.Block{
Number: 1,
Hash: utils.NewHash(),
Transactions: legacyTransactionsFromGasPrices(9002),
}
b2 := evmtypes.Block{
Number: 2,
Hash: utils.NewHash(),
Transactions: legacyTransactionsFromGasPrices(1, 2),
}
b3 := evmtypes.Block{
Number: 3,
Hash: utils.NewHash(),
Transactions: legacyTransactionsFromGasPrices(1, 2),
}
blocks := []evmtypes.Block{b0, b1, b2, b3}
gas.SetRollingBlockHistory(bhe, blocks)
// RE-ORG, head2 and head3 have different hash than saved b2 and b3
head2 := evmtypes.NewHead(big.NewInt(2), utils.NewHash(), b1.Hash, uint64(time.Now().Unix()), ubig.New(testutils.FixtureChainID))
head3 := evmtypes.NewHead(big.NewInt(3), utils.NewHash(), head2.Hash, uint64(time.Now().Unix()), ubig.New(testutils.FixtureChainID))
head3.Parent = &head2
ethClient.On("BatchCallContext", mock.Anything, mock.MatchedBy(func(b []rpc.BatchElem) bool {
return len(b) == 2 &&
b[0].Method == "eth_getBlockByNumber" && b[0].Args[0] == gas.Int64ToHex(3) && b[0].Args[1].(bool) && reflect.TypeOf(b[0].Result) == reflect.TypeOf(&evmtypes.Block{}) &&
b[1].Method == "eth_getBlockByNumber" && b[1].Args[0] == gas.Int64ToHex(2) && b[1].Args[1].(bool) && reflect.TypeOf(b[1].Result) == reflect.TypeOf(&evmtypes.Block{})
})).Once().Return(nil).Run(func(args mock.Arguments) {
elems := args.Get(1).([]rpc.BatchElem)
b2New := b2
b2New.Hash = head2.Hash
elems[1].Result = &b2New
b3New := b3
b3New.Hash = head3.Hash
elems[0].Result = &b3New
})
err := bhe.FetchBlocks(tests.Context(t), &head3)
require.NoError(t, err)
require.Len(t, gas.GetRollingBlockHistory(bhe), 3)
assert.Equal(t, 1, int(gas.GetRollingBlockHistory(bhe)[0].Number))
assert.Equal(t, 2, int(gas.GetRollingBlockHistory(bhe)[1].Number))
assert.Equal(t, 3, int(gas.GetRollingBlockHistory(bhe)[2].Number))
assert.Equal(t, b1.Hash.Hex(), gas.GetRollingBlockHistory(bhe)[0].Hash.Hex())
assert.Equal(t, head2.Hash.Hex(), gas.GetRollingBlockHistory(bhe)[1].Hash.Hex())
assert.Equal(t, head3.Hash.Hex(), gas.GetRollingBlockHistory(bhe)[2].Hash.Hex())
})`
$DIR/core/chains/evm/gas/block_history_estimator_test.go: `.NewEthClientMockWithDefaultChain(t)`
$DIR/core/chains/evm/gas/block_history_estimator_test.go: `.NewL1Oracle(t)`
$DIR/core/chains/evm/gas/block_history_estimator_test.go: `.NewMockConfig()`
$DIR/core/chains/evm/gas/block_history_estimator_test.go: `.NewHash()`
$DIR/core/chains/evm/gas/block_history_estimator_test.go: `.NewHash()`
$DIR/core/chains/evm/gas/block_history_estimator_test.go: `.NewHash()`
$DIR/core/chains/evm/gas/block_history_estimator_test.go: `.NewHash()`
$DIR/core/chains/evm/gas/block_history_estimator_test.go: `.SetRollingBlockHistory(bhe, blocks)`
$DIR/core/chains/evm/gas/block_history_estimator_test.go: `.NewHead(big.NewInt(2), utils.NewHash(), b1.Hash, uint64(time.Now().Unix()), ubig.New(testutils.FixtureChainID))`
$DIR/core/chains/evm/gas/block_history_estimator_test.go: `.NewInt(2)`
$DIR/core/chains/evm/gas/block_history_estimator_test.go: `.NewHash()`
$DIR/core/chains/evm/gas/block_history_estimator_test.go: `.Now()`
$DIR/core/chains/evm/gas/block_history_estimator_test.go: `.Unix()`
$DIR/core/chains/evm/gas/block_history_estimator_test.go: `.New(testutils.FixtureChainID)`
$DIR/core/chains/evm/gas/block_history_estimator_test.go: `.NewHead(big.NewInt(3), utils.NewHash(), head2.Hash, uint64(time.Now().Unix()), ubig.New(testutils.FixtureChainID))`
$DIR/core/chains/evm/gas/block_history_estimator_test.go: `.NewInt(3)`
$DIR/core/chains/evm/gas/block_history_estimator_test.go: `.NewHash()`
$DIR/core/chains/evm/gas/block_history_estimator_test.go: `.Now()`
$DIR/core/chains/evm/gas/block_history_estimator_test.go: `.Unix()`
$DIR/core/chains/evm/gas/block_history_estimator_test.go: `.New(testutils.FixtureChainID)`
$DIR/core/chains/evm/gas/block_history_estimator_test.go: `.On("BatchCallContext", mock.Anything, mock.MatchedBy(func(b []rpc.BatchElem) bool {
return len(b) == 2 &&
b[0].Method == "eth_getBlockByNumber" && b[0].Args[0] == gas.Int64ToHex(3) && b[0].Args[1].(bool) && reflect.TypeOf(b[0].Result) == reflect.TypeOf(&evmtypes.Block{}) &&
b[1].Method == "eth_getBlockByNumber" && b[1].Args[0] == gas.Int64ToHex(2) && b[1].Args[1].(bool) && reflect.TypeOf(b[1].Result) == reflect.TypeOf(&evmtypes.Block{})
}))`
$DIR/core/chains/evm/gas/block_history_estimator_test.go: `.MatchedBy(func(b []rpc.BatchElem) bool {
return len(b) == 2 &&
b[0].Method == "eth_getBlockByNumber" && b[0].Args[0] == gas.Int64ToHex(3) && b[0].Args[1].(bool) && reflect.TypeOf(b[0].Result) == reflect.TypeOf(&evmtypes.Block{}) &&
b[1].Method == "eth_getBlockByNumber" && b[1].Args[0] == gas.Int64ToHex(2) && b[1].Args[1].(bool) && reflect.TypeOf(b[1].Result) == reflect.TypeOf(&evmtypes.Block{})
})`
$DIR/core/chains/evm/gas/block_history_estimator_test.go: `.Int64ToHex(3)`
$DIR/core/chains/evm/gas/block_history_estimator_test.go: `.TypeOf(b[0].Result)`
$DIR/core/chains/evm/gas/block_history_estimator_test.go: `.TypeOf(&evmtypes.Block{})`
$DIR/core/chains/evm/gas/block_history_estimator_test.go: `.Int64ToHex(2)`
$DIR/core/chains/evm/gas/block_history_estimator_test.go: `.TypeOf(b[1].Result)`
$DIR/core/chains/evm/gas/block_history_estimator_test.go: `.TypeOf(&evmtypes.Block{})`
$DIR/core/chains/evm/gas/block_history_estimator_test.go: `.Once()`
$DIR/core/chains/evm/gas/block_history_estimator_test.go: `.Return(nil)`
$DIR/core/chains/evm/gas/block_history_estimator_test.go: `.Run(func(args mock.Arguments) {
elems := args.Get(1).([]rpc.BatchElem)
b2New := b2
b2New.Hash = head2.Hash
elems[1].Result = &b2New
b3New := b3
b3New.Hash = head3.Hash
elems[0].Result = &b3New
})`
$DIR/core/chains/evm/gas/block_history_estimator_test.go: `.Get(1)`
$DIR/core/chains/evm/gas/block_history_estimator_test.go: `.FetchBlocks(tests.Context(t), &head3)`
$DIR/core/chains/evm/gas/block_history_estimator_test.go: `.Context(t)`
$DIR/core/chains/evm/gas/block_history_estimator_test.go: `.Run("uses locally cached blocks if they are in the chain", func(t *testing.T) {
ethClient := testutils.NewEthClientMockWithDefaultChain(t)
l1Oracle := rollupMocks.NewL1Oracle(t)
cfg := gas.NewMockConfig()
var blockDelay uint16
var historySize uint16 = 3
var batchSize uint32 = 2
bhCfg := newBlockHistoryConfig()
bhCfg.BlockDelayF = blockDelay
bhCfg.BlockHistorySizeF = historySize
bhCfg.BatchSizeF = batchSize
geCfg := &gas.MockGasEstimatorConfig{}
geCfg.EIP1559DynamicFeesF = true
bhe := newBlockHistoryEstimator(t, ethClient, cfg, geCfg, bhCfg, l1Oracle)
b0 := evmtypes.Block{
Number: 0,
Hash: utils.NewHash(),
Transactions: legacyTransactionsFromGasPrices(9001),
}
b1 := evmtypes.Block{
Number: 1,
Hash: utils.NewHash(),
Transactions: legacyTransactionsFromGasPrices(9002),
}
b2 := evmtypes.Block{
Number: 2,
Hash: utils.NewHash(),
Transactions: legacyTransactionsFromGasPrices(1, 2),
}
b3 := evmtypes.Block{
Number: 3,
Hash: utils.NewHash(),
Transactions: legacyTransactionsFromGasPrices(1, 2),
}
blocks := []evmtypes.Block{b0, b1, b2, b3}
gas.SetRollingBlockHistory(bhe, blocks)
// head2 and head3 have identical hash to saved blocks
head2 := evmtypes.NewHead(big.NewInt(2), b2.Hash, b1.Hash, uint64(time.Now().Unix()), ubig.New(testutils.FixtureChainID))
head3 := evmtypes.NewHead(big.NewInt(3), b3.Hash, head2.Hash, uint64(time.Now().Unix()), ubig.New(testutils.FixtureChainID))
head3.Parent = &head2
err := bhe.FetchBlocks(tests.Context(t), &head3)
require.NoError(t, err)
require.Len(t, gas.GetRollingBlockHistory(bhe), 3)
assert.Equal(t, 1, int(gas.GetRollingBlockHistory(bhe)[0].Number))
assert.Equal(t, 2, int(gas.GetRollingBlockHistory(bhe)[1].Number))
assert.Equal(t, 3, int(gas.GetRollingBlockHistory(bhe)[2].Number))
assert.Equal(t, b1.Hash.Hex(), gas.GetRollingBlockHistory(bhe)[0].Hash.Hex())
assert.Equal(t, head2.Hash.Hex(), gas.GetRollingBlockHistory(bhe)[1].Hash.Hex())
assert.Equal(t, head3.Hash.Hex(), gas.GetRollingBlockHistory(bhe)[2].Hash.Hex())
})`
$DIR/core/chains/evm/gas/block_history_estimator_test.go: `.NewEthClientMockWithDefaultChain(t)`
$DIR/core/chains/evm/gas/block_history_estimator_test.go: `.NewL1Oracle(t)`
$DIR/core/chains/evm/gas/block_history_estimator_test.go: `.NewMockConfig()`
$DIR/core/chains/evm/gas/block_history_estimator_test.go: `.NewHash()`
$DIR/core/chains/evm/gas/block_history_estimator_test.go: `.NewHash()`
$DIR/core/chains/evm/gas/block_history_estimator_test.go: `.NewHash()`
$DIR/core/chains/evm/gas/block_history_estimator_test.go: `.NewHash()`
$DIR/core/chains/evm/gas/block_history_estimator_test.go: `.SetRollingBlockHistory(bhe, blocks)`
$DIR/core/chains/evm/gas/block_history_estimator_test.go: `.NewHead(big.NewInt(2), b2.Hash, b1.Hash, uint64(time.Now().Unix()), ubig.New(testutils.FixtureChainID))`
$DIR/core/chains/evm/gas/block_history_estimator_test.go: `.NewInt(2)`
$DIR/core/chains/evm/gas/block_history_estimator_test.go: `.Now()`
$DIR/core/chains/evm/gas/block_history_estimator_test.go: `.Unix()`
$DIR/core/chains/evm/gas/block_history_estimator_test.go: `.New(testutils.FixtureChainID)`
$DIR/core/chains/evm/gas/block_history_estimator_test.go: `.NewHead(big.NewInt(3), b3.Hash, head2.Hash, uint64(time.Now().Unix()), ubig.New(testutils.FixtureChainID))`
$DIR/core/chains/evm/gas/block_history_estimator_test.go: `.NewInt(3)`
$DIR/core/chains/evm/gas/block_history_estimator_test.go: `.Now()`
$DIR/core/chains/evm/gas/block_history_estimator_test.go: `.Unix()`
$DIR/core/chains/evm/gas/block_history_estimator_test.go: `.New(testutils.FixtureChainID)`
$DIR/core/chains/evm/gas/block_history_estimator_test.go: `.FetchBlocks(tests.Context(t), &head3)`
$DIR/core/chains/evm/gas/block_history_estimator_test.go: `.Context(t)`
$DIR/core/chains/evm/gas/block_history_estimator_test.go: `.NewEthClientMockWithDefaultChain(t)`
$DIR/core/chains/evm/gas/block_history_estimator_test.go: `.NewL1Oracle(t)`
$DIR/core/chains/evm/gas/block_history_estimator_test.go: `.NewMockConfig()`
$DIR/core/chains/evm/gas/block_history_estimator_test.go: `.NewHash()`
$DIR/core/chains/evm/gas/block_history_estimator_test.go: `.NewHash()`
$DIR/core/chains/evm/gas/block_history_estimator_test.go: `.On("BatchCallContext", mock.Anything, mock.MatchedBy(func(b []rpc.BatchElem) bool {
return len(b) == 2 &&
b[0].Method == "eth_getBlockByNumber" && b[0].Args[0] == gas.Int64ToHex(43) && b[0].Args[1].(bool) && reflect.TypeOf(b[0].Result) == reflect.TypeOf(&evmtypes.Block{}) &&
b[1].Method == "eth_getBlockByNumber" && b[1].Args[0] == gas.Int64ToHex(42) && b[1].Args[1].(bool) && reflect.TypeOf(b[1].Result) == reflect.TypeOf(&evmtypes.Block{})
}))`
$DIR/core/chains/evm/gas/block_history_estimator_test.go: `.MatchedBy(func(b []rpc.BatchElem) bool {
return len(b) == 2 &&
b[0].Method == "eth_getBlockByNumber" && b[0].Args[0] == gas.Int64ToHex(43) && b[0].Args[1].(bool) && reflect.TypeOf(b[0].Result) == reflect.TypeOf(&evmtypes.Block{}) &&
b[1].Method == "eth_getBlockByNumber" && b[1].Args[0] == gas.Int64ToHex(42) && b[1].Args[1].(bool) && reflect.TypeOf(b[1].Result) == reflect.TypeOf(&evmtypes.Block{})
})`
$DIR/core/chains/evm/gas/block_history_estimator_test.go: `.Int64ToHex(43)`
$DIR/core/chains/evm/gas/block_history_estimator_test.go: `.TypeOf(b[0].Result)`
$DIR/core/chains/evm/gas/block_history_estimator_test.go: `.TypeOf(&evmtypes.Block{})`
$DIR/core/chains/evm/gas/block_history_estimator_test.go: `.Int64ToHex(42)`
$DIR/core/chains/evm/gas/block_history_estimator_test.go: `.TypeOf(b[1].Result)`
$DIR/core/chains/evm/gas/block_history_estimator_test.go: `.TypeOf(&evmtypes.Block{})`
$DIR/core/chains/evm/gas/block_history_estimator_test.go: `.Once()`
$DIR/core/chains/evm/gas/block_history_estimator_test.go: `.Return(nil)`
$DIR/core/chains/evm/gas/block_history_estimator_test.go: `.Run(func(args mock.Arguments) {
elems := args.Get(1).([]rpc.BatchElem)
elems[0].Result = &b43
elems[1].Result = &b42
})`
$DIR/core/chains/evm/gas/block_history_estimator_test.go: `.Get(1)`
$DIR/core/chains/evm/gas/block_history_estimator_test.go: `.FetchBlocks(tests.Context(t), testutils.Head(43))`
$DIR/core/chains/evm/gas/block_history_estimator_test.go: `.Context(t)`
$DIR/core/chains/evm/gas/block_history_estimator_test.go: `.Head(43)`
$DIR/core/chains/evm/gas/block_history_estimator_test.go: `.NewEthClientMockWithDefaultChain(t)`
$DIR/core/chains/evm/gas/block_history_estimator_test.go: `.NewL1Oracle(t)`
$DIR/core/chains/evm/gas/block_history_estimator_test.go: `.NewMockConfig()`
$DIR/core/chains/evm/gas/block_history_estimator_test.go: `.NewWeiI(1000)`
$DIR/core/chains/evm/gas/block_history_estimator_test.go: `.NewWeiI(0)`
$DIR/core/chains/evm/gas/block_history_estimator_test.go: `.NewHash()`
$DIR/core/chains/evm/gas/block_history_estimator_test.go: `.NewHash()`
$DIR/core/chains/evm/gas/block_history_estimator_test.go: `.NewHash()`
$DIR/core/chains/evm/gas/block_history_estimator_test.go: `.On("BatchCallContext", mock.Anything, mock.MatchedBy(func(b []rpc.BatchElem) bool {
return len(b) == 3 &&
b[0].Args[0] == "0x3" &&
b[1].Args[0] == "0x2" &&
b[2].Args[0] == "0x1"
}))`
$DIR/core/chains/evm/gas/block_history_estimator_test.go: `.MatchedBy(func(b []rpc.BatchElem) bool {
return len(b) == 3 &&
b[0].Args[0] == "0x3" &&
b[1].Args[0] == "0x2" &&
b[2].Args[0] == "0x1"
})`
$DIR/core/chains/evm/gas/block_history_estimator_test.go: `.Return(nil)`
$DIR/core/chains/evm/gas/block_history_estimator_test.go: `.Run(func(args mock.Arguments) {
elems := args.Get(1).([]rpc.BatchElem)
elems[0].Result = &b3
elems[1].Result = &b2
elems[2].Result = &b1
})`
$DIR/core/chains/evm/gas/block_history_estimator_test.go: `.Get(1)`
$DIR/core/chains/evm/gas/block_history_estimator_test.go: `.FetchBlocksAndRecalculate(tests.Context(t), testutils.Head(3))`
$DIR/core/chains/evm/gas/block_history_estimator_test.go: `.Context(t)`
$DIR/core/chains/evm/gas/block_history_estimator_test.go: `.Head(3)`
$DIR/core/chains/evm/gas/block_history_estimator_test.go: `.GetGasPrice(bhe)`
$DIR/core/chains/evm/gas/block_history_estimator_test.go: `.GetRollingBlockHistory(bhe)`
$DIR/core/chains/evm/gas/block_history_estimator_test.go: `.NewWeiI(100)`
$DIR/core/chains/evm/gas/block_history_estimator_test.go: `.NewWeiI(10)`
$DIR/core/chains/evm/gas/block_history_estimator_test.go: `.Run("does not crash or set gas price to zero if there are no transactions", func(t *testing.T) {
ethClient := testutils.NewEthClientMockWithDefaultChain(t)
l1Oracle := rollupMocks.NewL1Oracle(t)
cfg := gas.NewMockConfig()
bhCfg := newBlockHistoryConfig()
bhCfg.TransactionPercentileF = uint16(35)
geCfg := &gas.MockGasEstimatorConfig{}
geCfg.EIP1559DynamicFeesF = false
bhe := newBlockHistoryEstimator(t, ethClient, cfg, geCfg, bhCfg, l1Oracle)
blocks := []evmtypes.Block{}
gas.SetRollingBlockHistory(bhe, blocks)
bhe.Recalculate(testutils.Head(1))
blocks = []evmtypes.Block{{}}
gas.SetRollingBlockHistory(bhe, blocks)
bhe.Recalculate(testutils.Head(1))
blocks = []evmtypes.Block{{Transactions: []evmtypes.Transaction{}}}
gas.SetRollingBlockHistory(bhe, blocks)
bhe.Recalculate(testutils.Head(1))
})`
$DIR/core/chains/evm/gas/block_history_estimator_test.go: `.NewEthClientMockWithDefaultChain(t)`
$DIR/core/chains/evm/gas/block_history_estimator_test.go: `.NewL1Oracle(t)`
$DIR/core/chains/evm/gas/block_history_estimator_test.go: `.NewMockConfig()`
$DIR/core/chains/evm/gas/block_history_estimator_test.go: `.SetRollingBlockHistory(bhe, blocks)`
$DIR/core/chains/evm/gas/block_history_estimator_test.go: `.Recalculate(testutils.Head(1))`
$DIR/core/chains/evm/gas/block_history_estimator_test.go: `.Head(1)`
$DIR/core/chains/evm/gas/block_history_estimator_test.go: `.SetRollingBlockHistory(bhe, blocks)`
$DIR/core/chains/evm/gas/block_history_estimator_test.go: `.Recalculate(testutils.Head(1))`
$DIR/core/chains/evm/gas/block_history_estimator_test.go: `.Head(1)`
$DIR/core/chains/evm/gas/block_history_estimator_test.go: `.SetRollingBlockHistory(bhe, blocks)`
$DIR/core/chains/evm/gas/block_history_estimator_test.go: `.Recalculate(testutils.Head(1))`
$DIR/core/chains/evm/gas/block_history_estimator_test.go: `.Head(1)`
$DIR/core/chains/evm/gas/block_history_estimator_test.go: `.Run("sets gas price to EVM.GasEstimator.PriceMax if the calculation would otherwise exceed it", func(t *testing.T) {
ethClient := testutils.NewEthClientMockWithDefaultChain(t)
l1Oracle := rollupMocks.NewL1Oracle(t)
cfg := gas.NewMockConfig()
bhCfg := newBlockHistoryConfig()
bhCfg.TransactionPercentileF = uint16(35)
geCfg := &gas.MockGasEstimatorConfig{}
geCfg.EIP1559DynamicFeesF = false
geCfg.PriceMaxF = maxGasPrice
geCfg.PriceMinF = minGasPrice
bhe := newBlockHistoryEstimator(t, ethClient, cfg, geCfg, bhCfg, l1Oracle)
blocks := []evmtypes.Block{
{
Number: 0,
Hash: utils.NewHash(),
Transactions: legacyTransactionsFromGasPrices(9001),
},
{
Number: 1,
Hash: utils.NewHash(),
Transactions: legacyTransactionsFromGasPrices(9002),
},
}
gas.SetRollingBlockHistory(bhe, blocks)
bhe.Recalculate(testutils.Head(1))
price := gas.GetGasPrice(bhe)
require.Equal(t, maxGasPrice, price)
})`
$DIR/core/chains/evm/gas/block_history_estimator_test.go: `.NewEthClientMockWithDefaultChain(t)`
$DIR/core/chains/evm/gas/block_history_estimator_test.go: `.NewL1Oracle(t)`
$DIR/core/chains/evm/gas/block_history_estimator_test.go: `.NewMockConfig()`
$DIR/core/chains/evm/gas/block_history_estimator_test.go: `.NewHash()`
$DIR/core/chains/evm/gas/block_history_estimator_test.go: `.NewHash()`
$DIR/core/chains/evm/gas/block_history_estimator_test.go: `.SetRollingBlockHistory(bhe, blocks)`
$DIR/core/chains/evm/gas/block_history_estimator_test.go: `.Recalculate(testutils.Head(1))`
$DIR/core/chains/evm/gas/block_history_estimator_test.go: `.Head(1)`
$DIR/core/chains/evm/gas/block_history_estimator_test.go: `.GetGasPrice(bhe)`
$DIR/core/chains/evm/gas/block_history_estimator_test.go: `.Run("sets gas price to EVM.GasEstimator.PriceMin if the calculation would otherwise fall below it", func(t *testing.T) {
ethClient := testutils.NewEthClientMockWithDefaultChain(t)
l1Oracle := rollupMocks.NewL1Oracle(t)
cfg := gas.NewMockConfig()
bhCfg := newBlockHistoryConfig()
bhCfg.TransactionPercentileF = uint16(35)
geCfg := &gas.MockGasEstimatorConfig{}
geCfg.EIP1559DynamicFeesF = false
geCfg.PriceMaxF = maxGasPrice
geCfg.PriceMinF = minGasPrice
bhe := newBlockHistoryEstimator(t, ethClient, cfg, geCfg, bhCfg, l1Oracle)
blocks := []evmtypes.Block{
{
Number: 0,
Hash: utils.NewHash(),
Transactions: legacyTransactionsFromGasPrices(5),
},
{
Number: 1,
Hash: utils.NewHash(),
Transactions: legacyTransactionsFromGasPrices(7),
},
}
gas.SetRollingBlockHistory(bhe, blocks)
bhe.Recalculate(testutils.Head(1))
price := gas.GetGasPrice(bhe)
require.Equal(t, minGasPrice, price)
})`
$DIR/core/chains/evm/gas/block_history_estimator_test.go: `.NewEthClientMockWithDefaultChain(t)`
$DIR/core/chains/evm/gas/block_history_estimator_test.go: `.NewL1Oracle(t)`
$DIR/core/chains/evm/gas/block_history_estimator_test.go: `.NewMockConfig()`
$DIR/core/chains/evm/gas/block_history_estimator_test.go: `.NewHash()`
$DIR/core/chains/evm/gas/block_history_estimator_test.go: `.NewHash()`
$DIR/core/chains/evm/gas/block_history_estimator_test.go: `.SetRollingBlockHistory(bhe, blocks)`
$DIR/core/chains/evm/gas/block_history_estimator_test.go: `.Recalculate(testutils.Head(1))`
$DIR/core/chains/evm/gas/block_history_estimator_test.go: `.Head(1)`
$DIR/core/chains/evm/gas/block_history_estimator_test.go: `.GetGasPrice(bhe)`
$DIR/core/chains/evm/gas/block_history_estimator_test.go: `.Run("ignores any transaction with a zero gas limit", func(t *testing.T) {
ethClient := testutils.NewEthClientMockWithDefaultChain(t)
l1Oracle := rollupMocks.NewL1Oracle(t)
cfg := gas.NewMockConfig()
bhCfg := newBlockHistoryConfig()
bhCfg.TransactionPercentileF = uint16(100)
geCfg := &gas.MockGasEstimatorConfig{}
geCfg.EIP1559DynamicFeesF = false
geCfg.PriceMaxF = maxGasPrice
geCfg.PriceMinF = minGasPrice
bhe := newBlockHistoryEstimator(t, ethClient, cfg, geCfg, bhCfg, l1Oracle)
b1Hash := utils.NewHash()
b2Hash := utils.NewHash()
blocks := []evmtypes.Block{
{
Number: 0,
Hash: b1Hash,
ParentHash: common.Hash{},
Transactions: legacyTransactionsFromGasPrices(50),
},
{
Number: 1,
Hash: b2Hash,
ParentHash: b1Hash,
Transactions: []evmtypes.Transaction{{GasPrice: assets.NewWeiI(70), GasLimit: 42}},
},
{
Number: 2,
Hash: utils.NewHash(),
ParentHash: b2Hash,
Transactions: []evmtypes.Transaction{{GasPrice: assets.NewWeiI(90), GasLimit: 0}},
},
}
gas.SetRollingBlockHistory(bhe, blocks)
bhe.Recalculate(testutils.Head(2))
price := gas.GetGasPrice(bhe)
require.Equal(t, assets.NewWeiI(70), price)
})`
$DIR/core/chains/evm/gas/block_history_estimator_test.go: `.NewEthClientMockWithDefaultChain(t)`
$DIR/core/chains/evm/gas/block_history_estimator_test.go: `.NewL1Oracle(t)`
$DIR/core/chains/evm/gas/block_history_estimator_test.go: `.NewMockConfig()`
$DIR/core/chains/evm/gas/block_history_estimator_test.go: `.NewHash()`
$DIR/core/chains/evm/gas/block_history_estimator_test.go: `.NewHash()`
$DIR/core/chains/evm/gas/block_history_estimator_test.go: `.NewWeiI(70)`
$DIR/core/chains/evm/gas/block_history_estimator_test.go: `.NewHash()`
$DIR/core/chains/evm/gas/block_history_estimator_test.go: `.NewWeiI(90)`
$DIR/core/chains/evm/gas/block_history_estimator_test.go: `.SetRollingBlockHistory(bhe, blocks)`
$DIR/core/chains/evm/gas/block_history_estimator_test.go: `.Recalculate(testutils.Head(2))`
$DIR/core/chains/evm/gas/block_history_estimator_test.go: `.Head(2)`
$DIR/core/chains/evm/gas/block_history_estimator_test.go: `.GetGasPrice(bhe)`
$DIR/core/chains/evm/gas/block_history_estimator_test.go: `.Run("takes into account zero priced transactions if chain is not Gnosis", func(t *testing.T) {
// Because everyone loves free gas!
ethClient := testutils.NewEthClientMockWithDefaultChain(t)
l1Oracle := rollupMocks.NewL1Oracle(t)
cfg := gas.NewMockConfig()
bhCfg := newBlockHistoryConfig()
bhCfg.TransactionPercentileF = uint16(50)
geCfg := &gas.MockGasEstimatorConfig{}
geCfg.EIP1559DynamicFeesF = false
geCfg.PriceMaxF = maxGasPrice
geCfg.PriceMinF = assets.NewWeiI(0)
bhe := newBlockHistoryEstimator(t, ethClient, cfg, geCfg, bhCfg, l1Oracle)
b1Hash := utils.NewHash()
blocks := []evmtypes.Block{
{
Number: 0,
Hash: b1Hash,
ParentHash: common.Hash{},
Transactions: legacyTransactionsFromGasPrices(0, 0, 25, 50, 100),
},
}
gas.SetRollingBlockHistory(bhe, blocks)
bhe.Recalculate(testutils.Head(0))
price := gas.GetGasPrice(bhe)
require.Equal(t, assets.NewWeiI(25), price)
})`
$DIR/core/chains/evm/gas/block_history_estimator_test.go: `.NewEthClientMockWithDefaultChain(t)`
$DIR/core/chains/evm/gas/block_history_estimator_test.go: `.NewL1Oracle(t)`
$DIR/core/chains/evm/gas/block_history_estimator_test.go: `.NewMockConfig()`
$DIR/core/chains/evm/gas/block_history_estimator_test.go: `.NewWeiI(0)`
$DIR/core/chains/evm/gas/block_history_estimator_test.go: `.NewHash()`
$DIR/core/chains/evm/gas/block_history_estimator_test.go: `.SetRollingBlockHistory(bhe, blocks)`
$DIR/core/chains/evm/gas/block_history_estimator_test.go: `.Recalculate(testutils.Head(0))`
$DIR/core/chains/evm/gas/block_history_estimator_test.go: `.Head(0)`
$DIR/core/chains/evm/gas/block_history_estimator_test.go: `.GetGasPrice(bhe)`
$DIR/core/chains/evm/gas/block_history_estimator_test.go: `.Run("ignores zero priced transactions only on Gnosis", func(t *testing.T) {
ethClient := evmmocks.NewClient(t)
l1Oracle := rollupMocks.NewL1Oracle(t)
cfg := gas.NewMockConfig()
bhCfg := newBlockHistoryConfig()
bhCfg.TransactionPercentileF = uint16(50)
geCfg := &gas.MockGasEstimatorConfig{}
geCfg.EIP1559DynamicFeesF = false
geCfg.PriceMaxF = maxGasPrice
geCfg.PriceMinF = assets.NewWeiI(11) // Has to be set as Gnosis will only ignore transactions below this price
ibhe := newBlockHistoryEstimator(t, ethClient, cfg, geCfg, bhCfg, l1Oracle)
bhe := gas.BlockHistoryEstimatorFromInterface(ibhe)
b1Hash := utils.NewHash()
blocks := []evmtypes.Block{
{
Number: 0,
Hash: b1Hash,
ParentHash: common.Hash{},
Transactions: legacyTransactionsFromGasPrices(0, 0, 0, 0, 80),
},
}
gas.SetRollingBlockHistory(bhe, blocks)
// chainType is not set - GasEstimator should not ignore zero priced transactions and instead default to PriceMin==11
bhe.Recalculate(testutils.Head(0))
require.Equal(t, assets.NewWeiI(11), gas.GetGasPrice(bhe))
// Set chainType to Gnosis - GasEstimator should now ignore zero priced transactions
cfg.ChainTypeF = string(chaintype.ChainGnosis)
bhe.Recalculate(testutils.Head(0))
require.Equal(t, assets.NewWeiI(80), gas.GetGasPrice(bhe))
// And for X Layer
cfg.ChainTypeF = string(chaintype.ChainXLayer)
bhe.Recalculate(testutils.Head(0))
require.Equal(t, assets.NewWeiI(80), gas.GetGasPrice(bhe))
})`
$DIR/core/chains/evm/gas/block_history_estimator_test.go: `.NewClient(t)`
$DIR/core/chains/evm/gas/block_history_estimator_test.go: `.NewL1Oracle(t)`
$DIR/core/chains/evm/gas/block_history_estimator_test.go: `.NewMockConfig()`
$DIR/core/chains/evm/gas/block_history_estimator_test.go: `.NewWeiI(11)`
$DIR/core/chains/evm/gas/block_history_estimator_test.go: `.BlockHistoryEstimatorFromInterface(ibhe)`
$DIR/core/chains/evm/gas/block_history_estimator_test.go: `.NewHash()`
$DIR/core/chains/evm/gas/block_history_estimator_test.go: `.SetRollingBlockHistory(bhe, blocks)`
$DIR/core/chains/evm/gas/block_history_estimator_test.go: `.Recalculate(testutils.Head(0))`
$DIR/core/chains/evm/gas/block_history_estimator_test.go: `.Head(0)`
$DIR/core/chains/evm/gas/block_history_estimator_test.go: `.Recalculate(testutils.Head(0))`
$DIR/core/chains/evm/gas/block_history_estimator_test.go: `.Head(0)`
$DIR/core/chains/evm/gas/block_history_estimator_test.go: `.Recalculate(testutils.Head(0))`
$DIR/core/chains/evm/gas/block_history_estimator_test.go: `.Head(0)`
$DIR/core/chains/evm/gas/block_history_estimator_test.go: `.Run("handles unreasonably large gas prices (larger than a 64 bit int can hold)", func(t *testing.T) {
// Seems unlikely we will ever experience gas prices > 9 Petawei on mainnet (praying to the eth Gods 🙏)
// But other chains could easily use a different base of account
ethClient := testutils.NewEthClientMockWithDefaultChain(t)
l1Oracle := rollupMocks.NewL1Oracle(t)
cfg := gas.NewMockConfig()
bhCfg := newBlockHistoryConfig()
reasonablyHugeGasPrice := assets.NewWeiI(1000).Mul(big.NewInt(math.MaxInt64))
bhCfg.TransactionPercentileF = uint16(50)
geCfg := &gas.MockGasEstimatorConfig{}
geCfg.EIP1559DynamicFeesF = false
geCfg.PriceMaxF = reasonablyHugeGasPrice
geCfg.PriceMinF = assets.NewWeiI(10)
bhe := newBlockHistoryEstimator(t, ethClient, cfg, geCfg, bhCfg, l1Oracle)
unreasonablyHugeGasPrice := assets.NewWeiI(1000000).Mul(big.NewInt(math.MaxInt64))
b1Hash := utils.NewHash()
blocks := []evmtypes.Block{
{
Number: 0,
Hash: b1Hash,
ParentHash: common.Hash{},
Transactions: []evmtypes.Transaction{
{GasPrice: assets.NewWeiI(50), GasLimit: 42},
{GasPrice: unreasonablyHugeGasPrice, GasLimit: 42},
{GasPrice: unreasonablyHugeGasPrice, GasLimit: 42},
{GasPrice: unreasonablyHugeGasPrice, GasLimit: 42},
{GasPrice: unreasonablyHugeGasPrice, GasLimit: 42},
{GasPrice: unreasonablyHugeGasPrice, GasLimit: 42},
{GasPrice: unreasonablyHugeGasPrice, GasLimit: 42},
{GasPrice: unreasonablyHugeGasPrice, GasLimit: 42},
{GasPrice: unreasonablyHugeGasPrice, GasLimit: 42},
},
},
}
gas.SetRollingBlockHistory(bhe, blocks)
bhe.Recalculate(testutils.Head(0))
price := gas.GetGasPrice(bhe)
require.Equal(t, reasonablyHugeGasPrice, price)
})`
$DIR/core/chains/evm/gas/block_history_estimator_test.go: `.NewEthClientMockWithDefaultChain(t)`
$DIR/core/chains/evm/gas/block_history_estimator_test.go: `.NewL1Oracle(t)`
$DIR/core/chains/evm/gas/block_history_estimator_test.go: `.NewMockConfig()`
$DIR/core/chains/evm/gas/block_history_estimator_test.go: `.NewWeiI(1000)`
$DIR/core/chains/evm/gas/block_history_estimator_test.go: `.Mul(big.NewInt(math.MaxInt64))`
$DIR/core/chains/evm/gas/block_history_estimator_test.go: `.NewInt(math.MaxInt64)`
$DIR/core/chains/evm/gas/block_history_estimator_test.go: `.NewWeiI(10)`
$DIR/core/chains/evm/gas/block_history_estimator_test.go: `.NewWeiI(1000000)`
$DIR/core/chains/evm/gas/block_history_estimator_test.go: `.Mul(big.NewInt(math.MaxInt64))`
$DIR/core/chains/evm/gas/block_history_estimator_test.go: `.NewInt(math.MaxInt64)`
$DIR/core/chains/evm/gas/block_history_estimator_test.go: `.NewHash()`
$DIR/core/chains/evm/gas/block_history_estimator_test.go: `.NewWeiI(50)`
$DIR/core/chains/evm/gas/block_history_estimator_test.go: `.SetRollingBlockHistory(bhe, blocks)`
$DIR/core/chains/evm/gas/block_history_estimator_test.go: `.Recalculate(testutils.Head(0))`
$DIR/core/chains/evm/gas/block_history_estimator_test.go: `.Head(0)`
$DIR/core/chains/evm/gas/block_history_estimator_test.go: `.GetGasPrice(bhe)`
$DIR/core/chains/evm/gas/block_history_estimator_test.go: `.NewEthClientMockWithDefaultChain(t)`
$DIR/core/chains/evm/gas/block_history_estimator_test.go: `.NewL1Oracle(t)`
$DIR/core/chains/evm/gas/block_history_estimator_test.go: `.NewMockConfig()`
$DIR/core/chains/evm/gas/block_history_estimator_test.go: `.NewWeiI(100)`
$DIR/core/chains/evm/gas/block_history_estimator_test.go: `.NewHash()`
$DIR/core/chains/evm/gas/block_history_estimator_test.go: `.NewHash()`
$DIR/core/chains/evm/gas/block_history_estimator_test.go: `.NewWeiI(100)`
$DIR/core/chains/evm/gas/block_history_estimator_test.go: `.NewHash()`
$DIR/core/chains/evm/gas/block_history_estimator_test.go: `.SetRollingBlockHistory(bhe, blocks)`
$DIR/core/chains/evm/gas/block_history_estimator_test.go: `.Recalculate(testutils.Head(0))`
$DIR/core/chains/evm/gas/block_history_estimator_test.go: `.Head(0)`
$DIR/core/chains/evm/gas/block_history_estimator_test.go: `.GetGasPrice(bhe)`
$DIR/core/chains/evm/gas/block_history_estimator_test.go: `.NewWeiI(100)`
$DIR/core/chains/evm/gas/block_history_estimator_test.go: `.Run("does not crash or set gas price to zero if there are no transactions", func(t *testing.T) {
ethClient := testutils.NewEthClientMockWithDefaultChain(t)
l1Oracle := rollupMocks.NewL1Oracle(t)
cfg := gas.NewMockConfig()
bhCfg := newBlockHistoryConfig()
bhCfg.TransactionPercentileF = uint16(35)
geCfg := &gas.MockGasEstimatorConfig{}
geCfg.EIP1559DynamicFeesF = true
bhe := newBlockHistoryEstimator(t, ethClient, cfg, geCfg, bhCfg, l1Oracle)
blocks := []evmtypes.Block{}
gas.SetRollingBlockHistory(bhe, blocks)
bhe.Recalculate(testutils.Head(1))
blocks = []evmtypes.Block{{}} // No base fee (doesn't crash)
gas.SetRollingBlockHistory(bhe, blocks)
bhe.Recalculate(testutils.Head(1))
blocks = []evmtypes.Block{newBlockWithBaseFee()}
gas.SetRollingBlockHistory(bhe, blocks)
bhe.Recalculate(testutils.Head(1))
empty := newBlockWithBaseFee()
empty.Transactions = []evmtypes.Transaction{}
blocks = []evmtypes.Block{empty}
gas.SetRollingBlockHistory(bhe, blocks)
bhe.Recalculate(testutils.Head(1))
withOnlyLegacyTransactions := newBlockWithBaseFee()
withOnlyLegacyTransactions.Transactions = legacyTransactionsFromGasPrices(9001)
blocks = []evmtypes.Block{withOnlyLegacyTransactions}
gas.SetRollingBlockHistory(bhe, blocks)
bhe.Recalculate(testutils.Head(1))
})`
$DIR/core/chains/evm/gas/block_history_estimator_test.go: `.NewEthClientMockWithDefaultChain(t)`
$DIR/core/chains/evm/gas/block_history_estimator_test.go: `.NewL1Oracle(t)`
$DIR/core/chains/evm/gas/block_history_estimator_test.go: `.NewMockConfig()`
$DIR/core/chains/evm/gas/block_history_estimator_test.go: `.SetRollingBlockHistory(bhe, blocks)`
$DIR/core/chains/evm/gas/block_history_estimator_test.go: `.Recalculate(testutils.Head(1))`
$DIR/core/chains/evm/gas/block_history_estimator_test.go: `.Head(1)`
$DIR/core/chains/evm/gas/block_history_estimator_test.go: `.SetRollingBlockHistory(bhe, blocks)`
$DIR/core/chains/evm/gas/block_history_estimator_test.go: `.Recalculate(testutils.Head(1))`
$DIR/core/chains/evm/gas/block_history_estimator_test.go: `.Head(1)`
$DIR/core/chains/evm/gas/block_history_estimator_test.go: `.SetRollingBlockHistory(bhe, blocks)`
$DIR/core/chains/evm/gas/block_history_estimator_test.go: `.Recalculate(testutils.Head(1))`
$DIR/core/chains/evm/gas/block_history_estimator_test.go: `.Head(1)`
$DIR/core/chains/evm/gas/block_history_estimator_test.go: `.SetRollingBlockHistory(bhe, blocks)`
$DIR/core/chains/evm/gas/block_history_estimator_test.go: `.Recalculate(testutils.Head(1))`
$DIR/core/chains/evm/gas/block_history_estimator_test.go: `.Head(1)`
$DIR/core/chains/evm/gas/block_history_estimator_test.go: `.SetRollingBlockHistory(bhe, blocks)`
$DIR/core/chains/evm/gas/block_history_estimator_test.go: `.Recalculate(testutils.Head(1))`
$DIR/core/chains/evm/gas/block_history_estimator_test.go: `.Head(1)`
$DIR/core/chains/evm/gas/block_history_estimator_test.go: `.Run("does not set tip higher than EVM.GasEstimator.PriceMax", func(t *testing.T) {
ethClient := testutils.NewEthClientMockWithDefaultChain(t)
l1Oracle := rollupMocks.NewL1Oracle(t)
cfg := gas.NewMockConfig()
bhCfg := newBlockHistoryConfig()
bhCfg.TransactionPercentileF = uint16(35)
geCfg := &gas.MockGasEstimatorConfig{}
geCfg.EIP1559DynamicFeesF = true
geCfg.PriceMaxF = maxGasPrice
geCfg.PriceMinF = assets.NewWeiI(0)
geCfg.TipCapMinF = assets.NewWeiI(0)
bhe := newBlockHistoryEstimator(t, ethClient, cfg, geCfg, bhCfg, l1Oracle)
blocks := []evmtypes.Block{
{
BaseFeePerGas: assets.NewWeiI(1),
Number: 0,
Hash: utils.NewHash(),
Transactions: dynamicFeeTransactionsFromTipCaps(9001),
},
{
BaseFeePerGas: assets.NewWeiI(1),
Number: 1,
Hash: utils.NewHash(),
Transactions: dynamicFeeTransactionsFromTipCaps(9002),
},
}
gas.SetRollingBlockHistory(bhe, blocks)
bhe.Recalculate(testutils.Head(1))
tipCap := gas.GetTipCap(bhe)
require.Equal(t, tipCap.Int64(), maxGasPrice.Int64())
})`
$DIR/core/chains/evm/gas/block_history_estimator_test.go: `.NewEthClientMockWithDefaultChain(t)`
$DIR/core/chains/evm/gas/block_history_estimator_test.go: `.NewL1Oracle(t)`
$DIR/core/chains/evm/gas/block_history_estimator_test.go: `.NewMockConfig()`
$DIR/core/chains/evm/gas/block_history_estimator_test.go: `.NewWeiI(0)`
$DIR/core/chains/evm/gas/block_history_estimator_test.go: `.NewWeiI(0)`
$DIR/core/chains/evm/gas/block_history_estimator_test.go: `.NewWeiI(1)`
$DIR/core/chains/evm/gas/block_history_estimator_test.go: `.NewHash()`
$DIR/core/chains/evm/gas/block_history_estimator_test.go: `.NewWeiI(1)`
$DIR/core/chains/evm/gas/block_history_estimator_test.go: `.NewHash()`
$DIR/core/chains/evm/gas/block_history_estimator_test.go: `.SetRollingBlockHistory(bhe, blocks)`
$DIR/core/chains/evm/gas/block_history_estimator_test.go: `.Recalculate(testutils.Head(1))`
$DIR/core/chains/evm/gas/block_history_estimator_test.go: `.Head(1)`
$DIR/core/chains/evm/gas/block_history_estimator_test.go: `.GetTipCap(bhe)`
$DIR/core/chains/evm/gas/block_history_estimator_test.go: `.Run("sets tip cap to EVM.GasEstimator.TipCapMin if the calculation would otherwise fall below it", func(t *testing.T) {
ethClient := testutils.NewEthClientMockWithDefaultChain(t)
l1Oracle := rollupMocks.NewL1Oracle(t)
cfg := gas.NewMockConfig()
bhCfg := newBlockHistoryConfig()
bhCfg.TransactionPercentileF = uint16(35)
geCfg := &gas.MockGasEstimatorConfig{}
geCfg.EIP1559DynamicFeesF = true
geCfg.PriceMaxF = maxGasPrice
geCfg.PriceMinF = assets.NewWeiI(0)
geCfg.TipCapMinF = assets.NewWeiI(10)
bhe := newBlockHistoryEstimator(t, ethClient, cfg, geCfg, bhCfg, l1Oracle)
blocks := []evmtypes.Block{
{
BaseFeePerGas: assets.NewWeiI(1),
Number: 0,
Hash: utils.NewHash(),
Transactions: dynamicFeeTransactionsFromTipCaps(5),
},
{
BaseFeePerGas: assets.NewWeiI(1),
Number: 1,
Hash: utils.NewHash(),
Transactions: dynamicFeeTransactionsFromTipCaps(7),
},
}
gas.SetRollingBlockHistory(bhe, blocks)
bhe.Recalculate(testutils.Head(1))
price := gas.GetTipCap(bhe)
require.Equal(t, assets.NewWeiI(10), price)
})`
$DIR/core/chains/evm/gas/block_history_estimator_test.go: `.NewEthClientMockWithDefaultChain(t)`
$DIR/core/chains/evm/gas/block_history_estimator_test.go: `.NewL1Oracle(t)`
$DIR/core/chains/evm/gas/block_history_estimator_test.go: `.NewMockConfig()`
$DIR/core/chains/evm/gas/block_history_estimator_test.go: `.NewWeiI(0)`
$DIR/core/chains/evm/gas/block_history_estimator_test.go: `.NewWeiI(10)`
$DIR/core/chains/evm/gas/block_history_estimator_test.go: `.NewWeiI(1)`
$DIR/core/chains/evm/gas/block_history_estimator_test.go: `.NewHash()`
$DIR/core/chains/evm/gas/block_history_estimator_test.go: `.NewWeiI(1)`
$DIR/core/chains/evm/gas/block_history_estimator_test.go: `.NewHash()`
$DIR/core/chains/evm/gas/block_history_estimator_test.go: `.SetRollingBlockHistory(bhe, blocks)`
$DIR/core/chains/evm/gas/block_history_estimator_test.go: `.Recalculate(testutils.Head(1))`
$DIR/core/chains/evm/gas/block_history_estimator_test.go: `.Head(1)`
$DIR/core/chains/evm/gas/block_history_estimator_test.go: `.GetTipCap(bhe)`
$DIR/core/chains/evm/gas/block_history_estimator_test.go: `.Run("ignores any transaction with a zero gas limit", func(t *testing.T) {
ethClient := testutils.NewEthClientMockWithDefaultChain(t)
l1Oracle := rollupMocks.NewL1Oracle(t)
cfg := gas.NewMockConfig()
bhCfg := newBlockHistoryConfig()
bhCfg.TransactionPercentileF = uint16(95)
geCfg := &gas.MockGasEstimatorConfig{}
geCfg.EIP1559DynamicFeesF = true
geCfg.PriceMaxF = maxGasPrice
geCfg.PriceMinF = assets.NewWeiI(0)
geCfg.TipCapMinF = assets.NewWeiI(10)
bhe := newBlockHistoryEstimator(t, ethClient, cfg, geCfg, bhCfg, l1Oracle)
b1Hash := utils.NewHash()
b2Hash := utils.NewHash()
blocks := []evmtypes.Block{
{
Number: 0,
Hash: b1Hash,
ParentHash: common.Hash{},
Transactions: legacyTransactionsFromGasPrices(50),
},
{
BaseFeePerGas: assets.NewWeiI(10),
Number: 1,
Hash: b2Hash,
ParentHash: b1Hash,
Transactions: []evmtypes.Transaction{{Type: 0x2, MaxFeePerGas: assets.NewWeiI(1000), MaxPriorityFeePerGas: assets.NewWeiI(60), GasLimit: 42}},
},
{
Number: 2,
Hash: utils.NewHash(),
ParentHash: b2Hash,
Transactions: []evmtypes.Transaction{{Type: 0x2, MaxFeePerGas: assets.NewWeiI(1000), MaxPriorityFeePerGas: assets.NewWeiI(80), GasLimit: 0}},
},
}
gas.SetRollingBlockHistory(bhe, blocks)
bhe.Recalculate(testutils.Head(2))
price := gas.GetTipCap(bhe)
require.Equal(t, assets.NewWeiI(60), price)
})`
$DIR/core/chains/evm/gas/block_history_estimator_test.go: `.NewEthClientMockWithDefaultChain(t)`
$DIR/core/chains/evm/gas/block_history_estimator_test.go: `.NewL1Oracle(t)`
$DIR/core/chains/evm/gas/block_history_estimator_test.go: `.NewMockConfig()`
$DIR/core/chains/evm/gas/block_history_estimator_test.go: `.NewWeiI(0)`
$DIR/core/chains/evm/gas/block_history_estimator_test.go: `.NewWeiI(10)`
$DIR/core/chains/evm/gas/block_history_estimator_test.go: `.NewHash()`
$DIR/core/chains/evm/gas/block_history_estimator_test.go: `.NewHash()`
$DIR/core/chains/evm/gas/block_history_estimator_test.go: `.NewWeiI(10)`
$DIR/core/chains/evm/gas/block_history_estimator_test.go: `.NewWeiI(1000)`
$DIR/core/chains/evm/gas/block_history_estimator_test.go: `.NewWeiI(60)`
$DIR/core/chains/evm/gas/block_history_estimator_test.go: `.NewHash()`
$DIR/core/chains/evm/gas/block_history_estimator_test.go: `.NewWeiI(1000)`
$DIR/core/chains/evm/gas/block_history_estimator_test.go: `.NewWeiI(80)`
$DIR/core/chains/evm/gas/block_history_estimator_test.go: `.SetRollingBlockHistory(bhe, blocks)`
$DIR/core/chains/evm/gas/block_history_estimator_test.go: `.Recalculate(testutils.Head(2))`
$DIR/core/chains/evm/gas/block_history_estimator_test.go: `.Head(2)`
$DIR/core/chains/evm/gas/block_history_estimator_test.go: `.GetTipCap(bhe)`
$DIR/core/chains/evm/gas/block_history_estimator_test.go: `.Run("respects minimum gas tip cap", func(t *testing.T) {
ethClient := testutils.NewEthClientMockWithDefaultChain(t)
l1Oracle := rollupMocks.NewL1Oracle(t)
cfg := gas.NewMockConfig()
bhCfg := newBlockHistoryConfig()
bhCfg.TransactionPercentileF = uint16(35)
geCfg := &gas.MockGasEstimatorConfig{}
geCfg.EIP1559DynamicFeesF = true
geCfg.PriceMaxF = maxGasPrice
geCfg.PriceMinF = assets.NewWeiI(0)
geCfg.TipCapMinF = assets.NewWeiI(1)
bhe := newBlockHistoryEstimator(t, ethClient, cfg, geCfg, bhCfg, l1Oracle)
b1Hash := utils.NewHash()
blocks := []evmtypes.Block{
{
BaseFeePerGas: assets.NewWeiI(10),
Number: 0,
Hash: b1Hash,
ParentHash: common.Hash{},
Transactions: dynamicFeeTransactionsFromTipCaps(0, 0, 0, 0, 100),
},
}
gas.SetRollingBlockHistory(bhe, blocks)
bhe.Recalculate(testutils.Head(0))
price := gas.GetTipCap(bhe)
assert.Equal(t, assets.NewWeiI(1), price)
})`
$DIR/core/chains/evm/gas/block_history_estimator_test.go: `.NewEthClientMockWithDefaultChain(t)`
$DIR/core/chains/evm/gas/block_history_estimator_test.go: `.NewL1Oracle(t)`
$DIR/core/chains/evm/gas/block_history_estimator_test.go: `.NewMockConfig()`
$DIR/core/chains/evm/gas/block_history_estimator_test.go: `.NewWeiI(0)`
$DIR/core/chains/evm/gas/block_history_estimator_test.go: `.NewWeiI(1)`
$DIR/core/chains/evm/gas/block_history_estimator_test.go: `.NewHash()`
$DIR/core/chains/evm/gas/block_history_estimator_test.go: `.NewWeiI(10)`
$DIR/core/chains/evm/gas/block_history_estimator_test.go: `.SetRollingBlockHistory(bhe, blocks)`
$DIR/core/chains/evm/gas/block_history_estimator_test.go: `.Recalculate(testutils.Head(0))`
$DIR/core/chains/evm/gas/block_history_estimator_test.go: `.Head(0)`
$DIR/core/chains/evm/gas/block_history_estimator_test.go: `.GetTipCap(bhe)`
$DIR/core/chains/evm/gas/block_history_estimator_test.go: `.NewEthClientMockWithDefaultChain(t)`
$DIR/core/chains/evm/gas/block_history_estimator_test.go: `.NewL1Oracle(t)`
$DIR/core/chains/evm/gas/block_history_estimator_test.go: `.NewMockConfig()`
$DIR/core/chains/evm/gas/block_history_estimator_test.go: `.NewWeiI(0)`
$DIR/core/chains/evm/gas/block_history_estimator_test.go: `.NewWeiI(0)`
$DIR/core/chains/evm/gas/block_history_estimator_test.go: `.NewHash()`
$DIR/core/chains/evm/gas/block_history_estimator_test.go: `.NewWeiI(10)`
$DIR/core/chains/evm/gas/block_history_estimator_test.go: `.SetRollingBlockHistory(bhe, blocks)`
$DIR/core/chains/evm/gas/block_history_estimator_test.go: `.Recalculate(testutils.Head(0))`
$DIR/core/chains/evm/gas/block_history_estimator_test.go: `.Head(0)`
$DIR/core/chains/evm/gas/block_history_estimator_test.go: `.GetTipCap(bhe)`
$DIR/core/chains/evm/gas/block_history_estimator_test.go: `.NewEthClientMockWithDefaultChain(t)`
$DIR/core/chains/evm/gas/block_history_estimator_test.go: `.NewL1Oracle(t)`
$DIR/core/chains/evm/gas/block_history_estimator_test.go: `.NewMockConfig()`
$DIR/core/chains/evm/gas/block_history_estimator_test.go: `.NewHash()`
$DIR/core/chains/evm/gas/block_history_estimator_test.go: `.NewWeiI(100)`
$DIR/core/chains/evm/gas/block_history_estimator_test.go: `.Run("returns false if transaction has 0 gas limit", func(t *testing.T) {
tx := evmtypes.Transaction{Type: 0x0, GasPrice: assets.NewWeiI(10), GasLimit: 0, Hash: utils.NewHash()}
assert.Equal(t, false, bhe.IsUsable(tx, block, cfg.ChainType(), geCfg.PriceMin(), logger.Test(t)))
})`
$DIR/core/chains/evm/gas/block_history_estimator_test.go: `.NewWeiI(10)`
$DIR/core/chains/evm/gas/block_history_estimator_test.go: `.NewHash()`
$DIR/core/chains/evm/gas/block_history_estimator_test.go: `.Run("returns false if transaction gas limit is nil and tx type is 0x0", func(t *testing.T) {
tx := evmtypes.Transaction{Type: 0x0, GasPrice: nil, GasLimit: 42, Hash: utils.NewHash()}
assert.Equal(t, false, bhe.IsUsable(tx, block, cfg.ChainType(), geCfg.PriceMin(), logger.Test(t)))
})`
$DIR/core/chains/evm/gas/block_history_estimator_test.go: `.NewHash()`
$DIR/core/chains/evm/gas/block_history_estimator_test.go: `.Run("returns false if transaction is of type 0x7e only on Optimism", func(t *testing.T) {
cfg.ChainTypeF = "optimismBedrock"
tx := evmtypes.Transaction{Type: 0x7e, GasPrice: assets.NewWeiI(10), GasLimit: 42, Hash: utils.NewHash()}
assert.Equal(t, false, bhe.IsUsable(tx, block, cfg.ChainType(), geCfg.PriceMin(), logger.Test(t)))
cfg.ChainTypeF = ""
assert.Equal(t, true, bhe.IsUsable(tx, block, cfg.ChainType(), geCfg.PriceMin(), logger.Test(t)))
})`
$DIR/core/chains/evm/gas/block_history_estimator_test.go: `.NewWeiI(10)`
$DIR/core/chains/evm/gas/block_history_estimator_test.go: `.NewHash()`
$DIR/core/chains/evm/gas/block_history_estimator_test.go: `.Run("returns false if transaction is of type 0x7c or 0x7b only on Celo", func(t *testing.T) {
cfg.ChainTypeF = "celo"
tx := evmtypes.Transaction{Type: 0x7c, GasPrice: assets.NewWeiI(10), GasLimit: 42, Hash: utils.NewHash()}
assert.Equal(t, false, bhe.IsUsable(tx, block, cfg.ChainType(), geCfg.PriceMin(), logger.Test(t)))
tx2 := evmtypes.Transaction{Type: 0x7b, GasPrice: assets.NewWeiI(10), GasLimit: 42, Hash: utils.NewHash()}
assert.Equal(t, false, bhe.IsUsable(tx2, block, cfg.ChainType(), geCfg.PriceMin(), logger.Test(t)))
cfg.ChainTypeF = ""
assert.Equal(t, true, bhe.IsUsable(tx, block, cfg.ChainType(), geCfg.PriceMin(), logger.Test(t)))
assert.Equal(t, true, bhe.IsUsable(tx2, block, cfg.ChainType(), geCfg.PriceMin(), logger.Test(t)))
})`
$DIR/core/chains/evm/gas/block_history_estimator_test.go: `.NewWeiI(10)`
$DIR/core/chains/evm/gas/block_history_estimator_test.go: `.NewHash()`
$DIR/core/chains/evm/gas/block_history_estimator_test.go: `.NewWeiI(10)`
$DIR/core/chains/evm/gas/block_history_estimator_test.go: `.NewHash()`
$DIR/core/chains/evm/gas/block_history_estimator_test.go: `.Run("returns false if transaction is of type 0x16 only on WeMix", func(t *testing.T) {
cfg.ChainTypeF = "wemix"
tx := evmtypes.Transaction{Type: 0x16, GasPrice: assets.NewWeiI(10), GasLimit: 42, Hash: utils.NewHash()}
assert.Equal(t, false, bhe.IsUsable(tx, block, cfg.ChainType(), geCfg.PriceMin(), logger.Test(t)))
})`
$DIR/core/chains/evm/gas/block_history_estimator_test.go: `.NewWeiI(10)`
$DIR/core/chains/evm/gas/block_history_estimator_test.go: `.NewHash()`
$DIR/core/chains/evm/gas/block_history_estimator_test.go: `.Run("returns false if transaction has base fee higher than the gas price only on Celo", func(t *testing.T) {
cfg.ChainTypeF = "celo"
tx := evmtypes.Transaction{Type: 0x0, GasPrice: assets.NewWeiI(10), GasLimit: 42, Hash: utils.NewHash()}
assert.Equal(t, false, bhe.IsUsable(tx, block, cfg.ChainType(), geCfg.PriceMin(), logger.Test(t)))
tx2 := evmtypes.Transaction{Type: 0x2, MaxPriorityFeePerGas: assets.NewWeiI(200), MaxFeePerGas: assets.NewWeiI(250),
GasPrice: assets.NewWeiI(50), GasLimit: 42, Hash: utils.NewHash()}
assert.Equal(t, false, bhe.IsUsable(tx, block, cfg.ChainType(), geCfg.PriceMin(), logger.Test(t)))
cfg.ChainTypeF = ""
assert.Equal(t, true, bhe.IsUsable(tx, block, cfg.ChainType(), geCfg.PriceMin(), logger.Test(t)))
assert.Equal(t, true, bhe.IsUsable(tx2, block, cfg.ChainType(), geCfg.PriceMin(), logger.Test(t)))
})`
$DIR/core/chains/evm/gas/block_history_estimator_test.go: `.NewWeiI(10)`
$DIR/core/chains/evm/gas/block_history_estimator_test.go: `.NewHash()`
$DIR/core/chains/evm/gas/block_history_estimator_test.go: `.NewWeiI(200)`
$DIR/core/chains/evm/gas/block_history_estimator_test.go: `.NewWeiI(250)`
$DIR/core/chains/evm/gas/block_history_estimator_test.go: `.NewWeiI(50)`
$DIR/core/chains/evm/gas/block_history_estimator_test.go: `.NewHash()`
$DIR/core/chains/evm/gas/block_history_estimator_test.go: `.NewWeiI(10)`
$DIR/core/chains/evm/gas/block_history_estimator_test.go: `.NewHash()`
$DIR/core/chains/evm/gas/block_history_estimator_test.go: `.NewEthClientMockWithDefaultChain(t)`
$DIR/core/chains/evm/gas/block_history_estimator_test.go: `.NewL1Oracle(t)`
$DIR/core/chains/evm/gas/block_history_estimator_test.go: `.NewMockConfig()`
$DIR/core/chains/evm/gas/block_history_estimator_test.go: `.NewHash()`
$DIR/core/chains/evm/gas/block_history_estimator_test.go: `.NewWeiI(100)`
$DIR/core/chains/evm/gas/block_history_estimator_test.go: `.Run("returns nil if block is missing base fee", func(t *testing.T) {
tx := evmtypes.Transaction{Type: 0x0, GasPrice: assets.NewWeiI(42), GasLimit: 42, Hash: utils.NewHash()}
res := bhe.EffectiveTipCap(block, tx)
assert.Nil(t, res)
})`
$DIR/core/chains/evm/gas/block_history_estimator_test.go: `.NewWeiI(42)`
$DIR/core/chains/evm/gas/block_history_estimator_test.go: `.NewHash()`
$DIR/core/chains/evm/gas/block_history_estimator_test.go: `.EffectiveTipCap(block, tx)`
$DIR/core/chains/evm/gas/block_history_estimator_test.go: `.Run("legacy transaction type infers tip cap from tx.gas_price - block.base_fee_per_gas", func(t *testing.T) {
tx := evmtypes.Transaction{Type: 0x0, GasPrice: assets.NewWeiI(142), GasLimit: 42, Hash: utils.NewHash()}
res := bhe.EffectiveTipCap(eipblock, tx)
assert.Equal(t, "42 wei", res.String())
})`
$DIR/core/chains/evm/gas/block_history_estimator_test.go: `.NewWeiI(142)`
$DIR/core/chains/evm/gas/block_history_estimator_test.go: `.NewHash()`
$DIR/core/chains/evm/gas/block_history_estimator_test.go: `.EffectiveTipCap(eipblock, tx)`
$DIR/core/chains/evm/gas/block_history_estimator_test.go: `.Run("tx type 2 & type 3 should calculate gas price", func(t *testing.T) {
// 0x2 transaction (should use MaxPriorityFeePerGas)
tx := evmtypes.Transaction{Type: 0x2, MaxPriorityFeePerGas: assets.NewWeiI(200), MaxFeePerGas: assets.NewWeiI(250), GasLimit: 42, Hash: utils.NewHash()}
res := bhe.EffectiveTipCap(eipblock, tx)
assert.Equal(t, "200 wei", res.String())
// 0x2 transaction (should use MaxPriorityFeePerGas, ignoring gas price)
tx = evmtypes.Transaction{Type: 0x2, GasPrice: assets.NewWeiI(400), MaxPriorityFeePerGas: assets.NewWeiI(200), MaxFeePerGas: assets.NewWeiI(350), GasLimit: 42, Hash: utils.NewHash()}
res = bhe.EffectiveTipCap(eipblock, tx)
assert.Equal(t, "200 wei", res.String())
// 0x3 transaction (should use MaxPriorityFeePerGas)
tx = evmtypes.Transaction{Type: 0x3, MaxPriorityFeePerGas: assets.NewWeiI(100), MaxFeePerGas: assets.NewWeiI(250), GasLimit: 42, Hash: utils.NewHash()}
res = bhe.EffectiveTipCap(eipblock, tx)
assert.Equal(t, "100 wei", res.String())
// 0x3 transaction (should use MaxPriorityFeePerGas, ignoring gas price)
tx = evmtypes.Transaction{Type: 0x3, GasPrice: assets.NewWeiI(400), MaxPriorityFeePerGas: assets.NewWeiI(100), MaxFeePerGas: assets.NewWeiI(350), GasLimit: 42, Hash: utils.NewHash()}
res = bhe.EffectiveTipCap(eipblock, tx)
assert.Equal(t, "100 wei", res.String())
})`
$DIR/core/chains/evm/gas/block_history_estimator_test.go: `.NewWeiI(200)`
$DIR/core/chains/evm/gas/block_history_estimator_test.go: `.NewWeiI(250)`
$DIR/core/chains/evm/gas/block_history_estimator_test.go: `.NewHash()`
$DIR/core/chains/evm/gas/block_history_estimator_test.go: `.EffectiveTipCap(eipblock, tx)`
$DIR/core/chains/evm/gas/block_history_estimator_test.go: `.NewWeiI(400)`
$DIR/core/chains/evm/gas/block_history_estimator_test.go: `.NewWeiI(200)`
$DIR/core/chains/evm/gas/block_history_estimator_test.go: `.NewWeiI(350)`
$DIR/core/chains/evm/gas/block_history_estimator_test.go: `.NewHash()`
$DIR/core/chains/evm/gas/block_history_estimator_test.go: `.EffectiveTipCap(eipblock, tx)`
$DIR/core/chains/evm/gas/block_history_estimator_test.go: `.NewWeiI(100)`
$DIR/core/chains/evm/gas/block_history_estimator_test.go: `.NewWeiI(250)`
$DIR/core/chains/evm/gas/block_history_estimator_test.go: `.NewHash()`
$DIR/core/chains/evm/gas/block_history_estimator_test.go: `.EffectiveTipCap(eipblock, tx)`
$DIR/core/chains/evm/gas/block_history_estimator_test.go: `.NewWeiI(400)`
$DIR/core/chains/evm/gas/block_history_estimator_test.go: `.NewWeiI(100)`
$DIR/core/chains/evm/gas/block_history_estimator_test.go: `.NewWeiI(350)`
$DIR/core/chains/evm/gas/block_history_estimator_test.go: `.NewHash()`
$DIR/core/chains/evm/gas/block_history_estimator_test.go: `.EffectiveTipCap(eipblock, tx)`
$DIR/core/chains/evm/gas/block_history_estimator_test.go: `.Run("missing field returns nil", func(t *testing.T) {
tx := evmtypes.Transaction{Type: 0x2, GasPrice: assets.NewWeiI(132), MaxFeePerGas: assets.NewWeiI(200), GasLimit: 42, Hash: utils.NewHash()}
res := bhe.EffectiveTipCap(eipblock, tx)
assert.Nil(t, res)
})`
$DIR/core/chains/evm/gas/block_history_estimator_test.go: `.NewWeiI(132)`
$DIR/core/chains/evm/gas/block_history_estimator_test.go: `.NewWeiI(200)`
$DIR/core/chains/evm/gas/block_history_estimator_test.go: `.NewHash()`
$DIR/core/chains/evm/gas/block_history_estimator_test.go: `.EffectiveTipCap(eipblock, tx)`
$DIR/core/chains/evm/gas/block_history_estimator_test.go: `.NewWeiI(55555)`
$DIR/core/chains/evm/gas/block_history_estimator_test.go: `.NewWeiI(200)`
$DIR/core/chains/evm/gas/block_history_estimator_test.go: `.NewWeiI(250)`
$DIR/core/chains/evm/gas/block_history_estimator_test.go: `.NewHash()`
$DIR/core/chains/evm/gas/block_history_estimator_test.go: `.EffectiveTipCap(eipblock, tx)`
$DIR/core/chains/evm/gas/block_history_estimator_test.go: `.NewEthClientMockWithDefaultChain(t)`
$DIR/core/chains/evm/gas/block_history_estimator_test.go: `.NewL1Oracle(t)`
$DIR/core/chains/evm/gas/block_history_estimator_test.go: `.NewMockConfig()`
$DIR/core/chains/evm/gas/block_history_estimator_test.go: `.NewHash()`
$DIR/core/chains/evm/gas/block_history_estimator_test.go: `.NewWeiI(100)`
$DIR/core/chains/evm/gas/block_history_estimator_test.go: `.Run("legacy transaction type should use GasPrice", func(t *testing.T) {
tx := evmtypes.Transaction{Type: 0x0, GasPrice: assets.NewWeiI(42), GasLimit: 42, Hash: utils.NewHash()}
res := bhe.EffectiveGasPrice(eipblock, tx)
assert.Equal(t, "42 wei", res.String())
tx = evmtypes.Transaction{Type: 0x0, GasLimit: 42, Hash: utils.NewHash()}
res = bhe.EffectiveGasPrice(eipblock, tx)
assert.Nil(t, res)
tx = evmtypes.Transaction{Type: 0x1, GasPrice: assets.NewWeiI(42), GasLimit: 42, Hash: utils.NewHash()}
res = bhe.EffectiveGasPrice(eipblock, tx)
assert.Equal(t, "42 wei", res.String())
})`
$DIR/core/chains/evm/gas/block_history_estimator_test.go: `.NewWeiI(42)`
$DIR/core/chains/evm/gas/block_history_estimator_test.go: `.NewHash()`
$DIR/core/chains/evm/gas/block_history_estimator_test.go: `.EffectiveGasPrice(eipblock, tx)`
$DIR/core/chains/evm/gas/block_history_estimator_test.go: `.NewHash()`
$DIR/core/chains/evm/gas/block_history_estimator_test.go: `.EffectiveGasPrice(eipblock, tx)`
$DIR/core/chains/evm/gas/block_history_estimator_test.go: `.NewWeiI(42)`
$DIR/core/chains/evm/gas/block_history_estimator_test.go: `.NewHash()`
$DIR/core/chains/evm/gas/block_history_estimator_test.go: `.EffectiveGasPrice(eipblock, tx)`
$DIR/core/chains/evm/gas/block_history_estimator_test.go: `.Run("tx type 2 should calculate gas price", func(t *testing.T) {
// 0x2 transaction (should calculate to 250)
tx := evmtypes.Transaction{Type: 0x2, MaxPriorityFeePerGas: assets.NewWeiI(200), MaxFeePerGas: assets.NewWeiI(250), GasLimit: 42, Hash: utils.NewHash()}
res := bhe.EffectiveGasPrice(eipblock, tx)
assert.Equal(t, "250 wei", res.String())
// 0x2 transaction (should calculate to 300)
tx = evmtypes.Transaction{Type: 0x2, MaxPriorityFeePerGas: assets.NewWeiI(200), MaxFeePerGas: assets.NewWeiI(350), GasLimit: 42, Hash: utils.NewHash()}
res = bhe.EffectiveGasPrice(eipblock, tx)
assert.Equal(t, "300 wei", res.String())
// 0x2 transaction (should calculate to 300, ignoring gas price)
tx = evmtypes.Transaction{Type: 0x2, MaxPriorityFeePerGas: assets.NewWeiI(200), MaxFeePerGas: assets.NewWeiI(350), GasLimit: 42, Hash: utils.NewHash()}
res = bhe.EffectiveGasPrice(eipblock, tx)
assert.Equal(t, "300 wei", res.String())
// 0x2 transaction (should fall back to gas price since MaxFeePerGas is missing)
tx = evmtypes.Transaction{Type: 0x2, GasPrice: assets.NewWeiI(32), MaxPriorityFeePerGas: assets.NewWeiI(200), GasLimit: 42, Hash: utils.NewHash()}
res = bhe.EffectiveGasPrice(eipblock, tx)
assert.Equal(t, "32 wei", res.String())
})`
$DIR/core/chains/evm/gas/block_history_estimator_test.go: `.NewWeiI(200)`
$DIR/core/chains/evm/gas/block_history_estimator_test.go: `.NewWeiI(250)`
$DIR/core/chains/evm/gas/block_history_estimator_test.go: `.NewHash()`
$DIR/core/chains/evm/gas/block_history_estimator_test.go: `.EffectiveGasPrice(eipblock, tx)`
$DIR/core/chains/evm/gas/block_history_estimator_test.go: `.NewWeiI(200)`
$DIR/core/chains/evm/gas/block_history_estimator_test.go: `.NewWeiI(350)`
$DIR/core/chains/evm/gas/block_history_estimator_test.go: `.NewHash()`
$DIR/core/chains/evm/gas/block_history_estimator_test.go: `.EffectiveGasPrice(eipblock, tx)`
$DIR/core/chains/evm/gas/block_history_estimator_test.go: `.NewWeiI(200)`
$DIR/core/chains/evm/gas/block_history_estimator_test.go: `.NewWeiI(350)`
$DIR/core/chains/evm/gas/block_history_estimator_test.go: `.NewHash()`
$DIR/core/chains/evm/gas/block_history_estimator_test.go: `.EffectiveGasPrice(eipblock, tx)`
$DIR/core/chains/evm/gas/block_history_estimator_test.go: `.NewWeiI(32)`
$DIR/core/chains/evm/gas/block_history_estimator_test.go: `.NewWeiI(200)`
$DIR/core/chains/evm/gas/block_history_estimator_test.go: `.NewHash()`
$DIR/core/chains/evm/gas/block_history_estimator_test.go: `.EffectiveGasPrice(eipblock, tx)`
$DIR/core/chains/evm/gas/block_history_estimator_test.go: `.Run("tx type 3 should calculate gas price", func(t *testing.T) {
// 0x3 transaction (should calculate to 250)
tx := evmtypes.Transaction{Type: 0x3, MaxPriorityFeePerGas: assets.NewWeiI(100), MaxFeePerGas: assets.NewWeiI(110), GasLimit: 42, Hash: utils.NewHash()}
res := bhe.EffectiveGasPrice(eipblock, tx)
assert.Equal(t, "110 wei", res.String())
// 0x3 transaction (should calculate to 300)
tx = evmtypes.Transaction{Type: 0x3, MaxPriorityFeePerGas: assets.NewWeiI(200), MaxFeePerGas: assets.NewWeiI(350), GasLimit: 42, Hash: utils.NewHash()}
res = bhe.EffectiveGasPrice(eipblock, tx)
assert.Equal(t, "300 wei", res.String())
// 0x3 transaction (should calculate to 300, ignoring gas price)
tx = evmtypes.Transaction{Type: 0x3, MaxPriorityFeePerGas: assets.NewWeiI(200), MaxFeePerGas: assets.NewWeiI(350), GasLimit: 42, Hash: utils.NewHash()}
res = bhe.EffectiveGasPrice(eipblock, tx)
assert.Equal(t, "300 wei", res.String())
// 0x3 transaction (should fall back to gas price since MaxFeePerGas is missing)
tx = evmtypes.Transaction{Type: 0x3, GasPrice: assets.NewWeiI(5), MaxPriorityFeePerGas: assets.NewWeiI(200), GasLimit: 42, Hash: utils.NewHash()}
res = bhe.EffectiveGasPrice(eipblock, tx)
assert.Equal(t, "5 wei", res.String())
})`
$DIR/core/chains/evm/gas/block_history_estimator_test.go: `.NewWeiI(100)`
$DIR/core/chains/evm/gas/block_history_estimator_test.go: `.NewWeiI(110)`
$DIR/core/chains/evm/gas/block_history_estimator_test.go: `.NewHash()`
$DIR/core/chains/evm/gas/block_history_estimator_test.go: `.EffectiveGasPrice(eipblock, tx)`
$DIR/core/chains/evm/gas/block_history_estimator_test.go: `.NewWeiI(200)`
$DIR/core/chains/evm/gas/block_history_estimator_test.go: `.NewWeiI(350)`
$DIR/core/chains/evm/gas/block_history_estimator_test.go: `.NewHash()`
$DIR/core/chains/evm/gas/block_history_estimator_test.go: `.EffectiveGasPrice(eipblock, tx)`
$DIR/core/chains/evm/gas/block_history_estimator_test.go: `.NewWeiI(200)`
$DIR/core/chains/evm/gas/block_history_estimator_test.go: `.NewWeiI(350)`
$DIR/core/chains/evm/gas/block_history_estimator_test.go: `.NewHash()`
$DIR/core/chains/evm/gas/block_history_estimator_test.go: `.EffectiveGasPrice(eipblock, tx)`
$DIR/core/chains/evm/gas/block_history_estimator_test.go: `.NewWeiI(5)`
$DIR/core/chains/evm/gas/block_history_estimator_test.go: `.NewWeiI(200)`
$DIR/core/chains/evm/gas/block_history_estimator_test.go: `.NewHash()`
$DIR/core/chains/evm/gas/block_history_estimator_test.go: `.EffectiveGasPrice(eipblock, tx)`
$DIR/core/chains/evm/gas/block_history_estimator_test.go: `.Run("tx type 2 has block missing base fee (should never happen but must handle gracefully)", func(t *testing.T) {
// 0x2 transaction (should calculate to 250)
tx := evmtypes.Transaction{Type: 0x2, GasPrice: assets.NewWeiI(55555), MaxPriorityFeePerGas: assets.NewWeiI(200), MaxFeePerGas: assets.NewWeiI(250), GasLimit: 42, Hash: utils.NewHash()}
res := bhe.EffectiveGasPrice(block, tx)
assert.Equal(t, "55.555 kwei", res.String())
})`
$DIR/core/chains/evm/gas/block_history_estimator_test.go: `.NewWeiI(55555)`
$DIR/core/chains/evm/gas/block_history_estimator_test.go: `.NewWeiI(200)`
$DIR/core/chains/evm/gas/block_history_estimator_test.go: `.NewWeiI(250)`
$DIR/core/chains/evm/gas/block_history_estimator_test.go: `.NewHash()`
$DIR/core/chains/evm/gas/block_history_estimator_test.go: `.EffectiveGasPrice(block, tx)`
$DIR/core/chains/evm/gas/block_history_estimator_test.go: `.Run("unknown type returns nil", func(t *testing.T) {
tx := evmtypes.Transaction{Type: 0x4, GasPrice: assets.NewWeiI(55555), MaxPriorityFeePerGas: assets.NewWeiI(200), MaxFeePerGas: assets.NewWeiI(250), GasLimit: 42, Hash: utils.NewHash()}
res := bhe.EffectiveGasPrice(block, tx)
assert.Nil(t, res)
})`
$DIR/core/chains/evm/gas/block_history_estimator_test.go: `.NewWeiI(55555)`
$DIR/core/chains/evm/gas/block_history_estimator_test.go: `.NewWeiI(200)`
$DIR/core/chains/evm/gas/block_history_estimator_test.go: `.NewWeiI(250)`
$DIR/core/chains/evm/gas/block_history_estimator_test.go: `.NewHash()`
$DIR/core/chains/evm/gas/block_history_estimator_test.go: `.EffectiveGasPrice(block, tx)`
$DIR/core/chains/evm/gas/block_history_estimator_test.go: `.Run("Assumption violation of MaxFeePerGas >= BaseFeePerGas returns gas price if specified", func(t *testing.T) {
// Max: 1, Base: 100
tx := evmtypes.Transaction{Type: 0x2, GasPrice: assets.NewWeiI(42), MaxPriorityFeePerGas: assets.NewWeiI(1), MaxFeePerGas: assets.NewWeiI(1), GasLimit: 42, Hash: utils.NewHash()}
res := bhe.EffectiveGasPrice(eipblock, tx)
assert.Equal(t, "42 wei", res.String())
})`
$DIR/core/chains/evm/gas/block_history_estimator_test.go: `.NewWeiI(42)`
$DIR/core/chains/evm/gas/block_history_estimator_test.go: `.NewWeiI(1)`
$DIR/core/chains/evm/gas/block_history_estimator_test.go: `.NewWeiI(1)`
$DIR/core/chains/evm/gas/block_history_estimator_test.go: `.NewHash()`
$DIR/core/chains/evm/gas/block_history_estimator_test.go: `.EffectiveGasPrice(eipblock, tx)`
$DIR/core/chains/evm/gas/block_history_estimator_test.go: `.Run("Assumption violation of MaxFeePerGas >= MaxPriorityFeePerGas returns gas price if specified", func(t *testing.T) {
// Max Priority: 201, Max: 200, Base: 100
tx := evmtypes.Transaction{Type: 0x2, GasPrice: assets.NewWeiI(42), MaxPriorityFeePerGas: assets.NewWeiI(201), MaxFeePerGas: assets.NewWeiI(200), GasLimit: 42, Hash: utils.NewHash()}
res := bhe.EffectiveGasPrice(eipblock, tx)
assert.Equal(t, "42 wei", res.String())
})`
$DIR/core/chains/evm/gas/block_history_estimator_test.go: `.NewWeiI(42)`
$DIR/core/chains/evm/gas/block_history_estimator_test.go: `.NewWeiI(201)`
$DIR/core/chains/evm/gas/block_history_estimator_test.go: `.NewWeiI(200)`
$DIR/core/chains/evm/gas/block_history_estimator_test.go: `.NewHash()`
$DIR/core/chains/evm/gas/block_history_estimator_test.go: `.EffectiveGasPrice(eipblock, tx)`
$DIR/core/chains/evm/gas/block_history_estimator_test.go: `.Run("Assumption violation of MaxFeePerGas >= BaseFeePerGas returns nil if no gas price is specified", func(t *testing.T) {
// Max: 1, Base: 100
tx := evmtypes.Transaction{Type: 0x2, MaxPriorityFeePerGas: assets.NewWeiI(1), MaxFeePerGas: assets.NewWeiI(1), GasLimit: 42, Hash: utils.NewHash()}
res := bhe.EffectiveGasPrice(eipblock, tx)
assert.Nil(t, res)
})`
$DIR/core/chains/evm/gas/block_history_estimator_test.go: `.NewWeiI(1)`
$DIR/core/chains/evm/gas/block_history_estimator_test.go: `.NewWeiI(1)`
$DIR/core/chains/evm/gas/block_history_estimator_test.go: `.NewHash()`
$DIR/core/chains/evm/gas/block_history_estimator_test.go: `.EffectiveGasPrice(eipblock, tx)`
$DIR/core/chains/evm/gas/block_history_estimator_test.go: `.NewWeiI(201)`
$DIR/core/chains/evm/gas/block_history_estimator_test.go: `.NewWeiI(200)`
$DIR/core/chains/evm/gas/block_history_estimator_test.go: `.NewHash()`
$DIR/core/chains/evm/gas/block_history_estimator_test.go: `.EffectiveGasPrice(eipblock, tx)`
$DIR/core/chains/evm/gas/block_history_estimator_test.go: `.Unmarshal([]byte(blockJSON), &block)`
$DIR/core/chains/evm/gas/block_history_estimator_test.go: `.Unmarshal([]byte(blockJSON), &block)`
$DIR/core/chains/evm/gas/block_history_estimator_test.go: `.Hash.String()`
$DIR/core/chains/evm/gas/block_history_estimator_test.go: `.NewL1Oracle(t)`
$DIR/core/chains/evm/gas/block_history_estimator_test.go: `.NewMockConfig()`
$DIR/core/chains/evm/gas/block_history_estimator_test.go: `.NewWeiI(1000000)`
$DIR/core/chains/evm/gas/block_history_estimator_test.go: `.NewWeiI(0)`
$DIR/core/chains/evm/gas/block_history_estimator_test.go: `.NewHash()`
$DIR/core/chains/evm/gas/block_history_estimator_test.go: `.NewHash()`
$DIR/core/chains/evm/gas/block_history_estimator_test.go: `.SetRollingBlockHistory(bhe, blocks)`
$DIR/core/chains/evm/gas/block_history_estimator_test.go: `.Recalculate(testutils.Head(1))`
$DIR/core/chains/evm/gas/block_history_estimator_test.go: `.Head(1)`
$DIR/core/chains/evm/gas/block_history_estimator_test.go: `.SimulateStart(t, bhe)`
$DIR/core/chains/evm/gas/block_history_estimator_test.go: `.Run("if gas price is lower than global max and user specified max gas price", func(t *testing.T) {
fee, limit, err := bhe.GetLegacyGas(tests.Context(t), make([]byte, 0), 10000, maxGasPrice)
require.NoError(t, err)
assert.Equal(t, assets.NewWeiI(1000), fee)
assert.Equal(t, 10000, int(limit))
})`
$DIR/core/chains/evm/gas/block_history_estimator_test.go: `.GetLegacyGas(tests.Context(t), make([]byte, 0), 10000, maxGasPrice)`
$DIR/core/chains/evm/gas/block_history_estimator_test.go: `.Context(t)`
$DIR/core/chains/evm/gas/block_history_estimator_test.go: `.Run("if gas price is higher than user-specified max", func(t *testing.T) {
fee, limit, err := bhe.GetLegacyGas(tests.Context(t), make([]byte, 0), 10000, assets.NewWeiI(800))
require.NoError(t, err)
assert.Equal(t, assets.NewWeiI(800), fee)
assert.Equal(t, 10000, int(limit))
})`
$DIR/core/chains/evm/gas/block_history_estimator_test.go: `.GetLegacyGas(tests.Context(t), make([]byte, 0), 10000, assets.NewWeiI(800))`
$DIR/core/chains/evm/gas/block_history_estimator_test.go: `.Context(t)`
$DIR/core/chains/evm/gas/block_history_estimator_test.go: `.NewWeiI(800)`
$DIR/core/chains/evm/gas/block_history_estimator_test.go: `.NewMockConfig()`
$DIR/core/chains/evm/gas/block_history_estimator_test.go: `.NewWeiI(700)`
$DIR/core/chains/evm/gas/block_history_estimator_test.go: `.NewWeiI(0)`
$DIR/core/chains/evm/gas/block_history_estimator_test.go: `.SetRollingBlockHistory(bhe, blocks)`
$DIR/core/chains/evm/gas/block_history_estimator_test.go: `.Recalculate(testutils.Head(1))`
$DIR/core/chains/evm/gas/block_history_estimator_test.go: `.Head(1)`
$DIR/core/chains/evm/gas/block_history_estimator_test.go: `.SimulateStart(t, bhe)`
$DIR/core/chains/evm/gas/block_history_estimator_test.go: `.GetLegacyGas(tests.Context(t), make([]byte, 0), 10000, maxGasPrice)`
$DIR/core/chains/evm/gas/block_history_estimator_test.go: `.Context(t)`
$DIR/core/chains/evm/gas/block_history_estimator_test.go: `.Run("fallbacks to EvmGasPriceDefault if there aren't any valid transactions to estimate from.", func(t *testing.T) {
cfg := gas.NewMockConfig()
bhCfg := newBlockHistoryConfig()
bhCfg.BatchSizeF = batchSize
bhCfg.TransactionPercentileF = uint16(35)
bhCfg.BlockDelayF = blockDelay
bhCfg.BlockHistorySizeF = historySize
geCfg := &gas.MockGasEstimatorConfig{}
geCfg.EIP1559DynamicFeesF = false
geCfg.PriceMaxF = assets.NewWeiI(1000000)
geCfg.PriceDefaultF = assets.NewWeiI(100)
ethClient := testutils.NewEthClientMockWithDefaultChain(t)
l1Oracle := rollupMocks.NewL1Oracle(t)
bhe := newBlockHistoryEstimator(t, ethClient, cfg, geCfg, bhCfg, l1Oracle)
h := &evmtypes.Head{Hash: utils.NewHash(), Number: 42, BaseFeePerGas: nil}
ethClient.On("HeadByNumber", mock.Anything, (*big.Int)(nil)).Return(h, nil)
ethClient.On("BatchCallContext", mock.Anything, mock.MatchedBy(func(b []rpc.BatchElem) bool {
return len(b) == 3 &&
b[0].Method == "eth_getBlockByNumber" && b[0].Args[0] == gas.Int64ToHex(42) && b[0].Args[1].(bool) && reflect.TypeOf(b[0].Result) == reflect.TypeOf(&evmtypes.Block{}) &&
b[1].Method == "eth_getBlockByNumber" && b[1].Args[0] == gas.Int64ToHex(41) && b[1].Args[1].(bool) && reflect.TypeOf(b[1].Result) == reflect.TypeOf(&evmtypes.Block{}) &&
b[2].Method == "eth_getBlockByNumber" && b[2].Args[0] == gas.Int64ToHex(40) && b[1].Args[1].(bool) && reflect.TypeOf(b[2].Result) == reflect.TypeOf(&evmtypes.Block{})
})).Return(nil).Run(func(args mock.Arguments) {
elems := args.Get(1).([]rpc.BatchElem)
elems[0].Result = &evmtypes.Block{
Number: 42,
Hash: utils.NewHash(),
}
elems[1].Result = &evmtypes.Block{
Number: 41,
Hash: utils.NewHash(),
}
elems[2].Result = &evmtypes.Block{
Number: 40,
Hash: utils.NewHash(),
Transactions: legacyTransactionsFromGasPricesTxType(specialTxTypeCode, 1),
}
}).Once()
err := bhe.Start(tests.Context(t))
require.NoError(t, err)
fee, limit, err := bhe.GetLegacyGas(tests.Context(t), make([]byte, 0), 10000, assets.NewWeiI(800))
require.NoError(t, err)
require.Equal(t, geCfg.PriceDefault(), fee)
assert.Equal(t, 10000, int(limit))
})`
$DIR/core/chains/evm/gas/block_history_estimator_test.go: `.NewMockConfig()`
$DIR/core/chains/evm/gas/block_history_estimator_test.go: `.NewWeiI(1000000)`
$DIR/core/chains/evm/gas/block_history_estimator_test.go: `.NewWeiI(100)`
$DIR/core/chains/evm/gas/block_history_estimator_test.go: `.NewEthClientMockWithDefaultChain(t)`
$DIR/core/chains/evm/gas/block_history_estimator_test.go: `.NewL1Oracle(t)`
$DIR/core/chains/evm/gas/block_history_estimator_test.go: `.NewHash()`
$DIR/core/chains/evm/gas/block_history_estimator_test.go: `.On("HeadByNumber", mock.Anything, (*big.Int)(nil))`
$DIR/core/chains/evm/gas/block_history_estimator_test.go: `.Return(h, nil)`
$DIR/core/chains/evm/gas/block_history_estimator_test.go: `.On("BatchCallContext", mock.Anything, mock.MatchedBy(func(b []rpc.BatchElem) bool {
return len(b) == 3 &&
b[0].Method == "eth_getBlockByNumber" && b[0].Args[0] == gas.Int64ToHex(42) && b[0].Args[1].(bool) && reflect.TypeOf(b[0].Result) == reflect.TypeOf(&evmtypes.Block{}) &&
b[1].Method == "eth_getBlockByNumber" && b[1].Args[0] == gas.Int64ToHex(41) && b[1].Args[1].(bool) && reflect.TypeOf(b[1].Result) == reflect.TypeOf(&evmtypes.Block{}) &&
b[2].Method == "eth_getBlockByNumber" && b[2].Args[0] == gas.Int64ToHex(40) && b[1].Args[1].(bool) && reflect.TypeOf(b[2].Result) == reflect.TypeOf(&evmtypes.Block{})
}))`
$DIR/core/chains/evm/gas/block_history_estimator_test.go: `.MatchedBy(func(b []rpc.BatchElem) bool {
return len(b) == 3 &&
b[0].Method == "eth_getBlockByNumber" && b[0].Args[0] == gas.Int64ToHex(42) && b[0].Args[1].(bool) && reflect.TypeOf(b[0].Result) == reflect.TypeOf(&evmtypes.Block{}) &&
b[1].Method == "eth_getBlockByNumber" && b[1].Args[0] == gas.Int64ToHex(41) && b[1].Args[1].(bool) && reflect.TypeOf(b[1].Result) == reflect.TypeOf(&evmtypes.Block{}) &&
b[2].Method == "eth_getBlockByNumber" && b[2].Args[0] == gas.Int64ToHex(40) && b[1].Args[1].(bool) && reflect.TypeOf(b[2].Result) == reflect.TypeOf(&evmtypes.Block{})
})`
$DIR/core/chains/evm/gas/block_history_estimator_test.go: `.Int64ToHex(42)`
$DIR/core/chains/evm/gas/block_history_estimator_test.go: `.TypeOf(b[0].Result)`
$DIR/core/chains/evm/gas/block_history_estimator_test.go: `.TypeOf(&evmtypes.Block{})`
$DIR/core/chains/evm/gas/block_history_estimator_test.go: `.Int64ToHex(41)`
$DIR/core/chains/evm/gas/block_history_estimator_test.go: `.TypeOf(b[1].Result)`
$DIR/core/chains/evm/gas/block_history_estimator_test.go: `.TypeOf(&evmtypes.Block{})`
$DIR/core/chains/evm/gas/block_history_estimator_test.go: `.Int64ToHex(40)`
$DIR/core/chains/evm/gas/block_history_estimator_test.go: `.TypeOf(b[2].Result)`
$DIR/core/chains/evm/gas/block_history_estimator_test.go: `.TypeOf(&evmtypes.Block{})`
$DIR/core/chains/evm/gas/block_history_estimator_test.go: `.Return(nil)`
$DIR/core/chains/evm/gas/block_history_estimator_test.go: `.Run(func(args mock.Arguments) {
elems := args.Get(1).([]rpc.BatchElem)
elems[0].Result = &evmtypes.Block{
Number: 42,
Hash: utils.NewHash(),
}
elems[1].Result = &evmtypes.Block{
Number: 41,
Hash: utils.NewHash(),
}
elems[2].Result = &evmtypes.Block{
Number: 40,
Hash: utils.NewHash(),
Transactions: legacyTransactionsFromGasPricesTxType(specialTxTypeCode, 1),
}
})`
$DIR/core/chains/evm/gas/block_history_estimator_test.go: `.Get(1)`
$DIR/core/chains/evm/gas/block_history_estimator_test.go: `.NewHash()`
$DIR/core/chains/evm/gas/block_history_estimator_test.go: `.NewHash()`
$DIR/core/chains/evm/gas/block_history_estimator_test.go: `.NewHash()`
$DIR/core/chains/evm/gas/block_history_estimator_test.go: `.Once()`
$DIR/core/chains/evm/gas/block_history_estimator_test.go: `.Start(tests.Context(t))`
$DIR/core/chains/evm/gas/block_history_estimator_test.go: `.Context(t)`
$DIR/core/chains/evm/gas/block_history_estimator_test.go: `.GetLegacyGas(tests.Context(t), make([]byte, 0), 10000, assets.NewWeiI(800))`
$DIR/core/chains/evm/gas/block_history_estimator_test.go: `.Context(t)`
$DIR/core/chains/evm/gas/block_history_estimator_test.go: `.NewWeiI(800)`
$DIR/core/chains/evm/gas/block_history_estimator_test.go: `.NewMockConfig()`
$DIR/core/chains/evm/gas/block_history_estimator_test.go: `.NewWeiI(1000000)`
$DIR/core/chains/evm/gas/block_history_estimator_test.go: `.NewWeiI(100)`
$DIR/core/chains/evm/gas/block_history_estimator_test.go: `.NewWeiI(50)`
$DIR/core/chains/evm/gas/block_history_estimator_test.go: `.NewEthClientMockWithDefaultChain(t)`
$DIR/core/chains/evm/gas/block_history_estimator_test.go: `.NewL1Oracle(t)`
$DIR/core/chains/evm/gas/block_history_estimator_test.go: `.NewHash()`
$DIR/core/chains/evm/gas/block_history_estimator_test.go: `.NewWeiI(40)`
$DIR/core/chains/evm/gas/block_history_estimator_test.go: `.On("HeadByNumber", mock.Anything, (*big.Int)(nil))`
$DIR/core/chains/evm/gas/block_history_estimator_test.go: `.Return(h, nil)`
$DIR/core/chains/evm/gas/block_history_estimator_test.go: `.On("BatchCallContext", mock.Anything, mock.MatchedBy(func(b []rpc.BatchElem) bool {
return len(b) == 3 &&
b[0].Method == "eth_getBlockByNumber" && b[0].Args[0] == gas.Int64ToHex(42) && b[0].Args[1].(bool) && reflect.TypeOf(b[0].Result) == reflect.TypeOf(&evmtypes.Block{}) &&
b[1].Method == "eth_getBlockByNumber" && b[1].Args[0] == gas.Int64ToHex(41) && b[1].Args[1].(bool) && reflect.TypeOf(b[1].Result) == reflect.TypeOf(&evmtypes.Block{}) &&
b[2].Method == "eth_getBlockByNumber" && b[2].Args[0] == gas.Int64ToHex(40) && b[1].Args[1].(bool) && reflect.TypeOf(b[2].Result) == reflect.TypeOf(&evmtypes.Block{})
}))`
$DIR/core/chains/evm/gas/block_history_estimator_test.go: `.MatchedBy(func(b []rpc.BatchElem) bool {
return len(b) == 3 &&
b[0].Method == "eth_getBlockByNumber" && b[0].Args[0] == gas.Int64ToHex(42) && b[0].Args[1].(bool) && reflect.TypeOf(b[0].Result) == reflect.TypeOf(&evmtypes.Block{}) &&
b[1].Method == "eth_getBlockByNumber" && b[1].Args[0] == gas.Int64ToHex(41) && b[1].Args[1].(bool) && reflect.TypeOf(b[1].Result) == reflect.TypeOf(&evmtypes.Block{}) &&
b[2].Method == "eth_getBlockByNumber" && b[2].Args[0] == gas.Int64ToHex(40) && b[1].Args[1].(bool) && reflect.TypeOf(b[2].Result) == reflect.TypeOf(&evmtypes.Block{})
})`
$DIR/core/chains/evm/gas/block_history_estimator_test.go: `.Int64ToHex(42)`
$DIR/core/chains/evm/gas/block_history_estimator_test.go: `.TypeOf(b[0].Result)`
$DIR/core/chains/evm/gas/block_history_estimator_test.go: `.TypeOf(&evmtypes.Block{})`
$DIR/core/chains/evm/gas/block_history_estimator_test.go: `.Int64ToHex(41)`
$DIR/core/chains/evm/gas/block_history_estimator_test.go: `.TypeOf(b[1].Result)`
$DIR/core/chains/evm/gas/block_history_estimator_test.go: `.TypeOf(&evmtypes.Block{})`
$DIR/core/chains/evm/gas/block_history_estimator_test.go: `.Int64ToHex(40)`
$DIR/core/chains/evm/gas/block_history_estimator_test.go: `.TypeOf(b[2].Result)`
$DIR/core/chains/evm/gas/block_history_estimator_test.go: `.TypeOf(&evmtypes.Block{})`
$DIR/core/chains/evm/gas/block_history_estimator_test.go: `.Return(nil)`
$DIR/core/chains/evm/gas/block_history_estimator_test.go: `.Run(func(args mock.Arguments) {
elems := args.Get(1).([]rpc.BatchElem)
elems[0].Result = &evmtypes.Block{
Number: 42,
Hash: utils.NewHash(),
}
elems[1].Result = &evmtypes.Block{
Number: 41,
Hash: utils.NewHash(),
}
elems[2].Result = &evmtypes.Block{
Number: 40,
Hash: utils.NewHash(),
Transactions: dynamicFeeTransactionsFromTipCapsTxType(specialTxTypeCode, 1),
}
})`
$DIR/core/chains/evm/gas/block_history_estimator_test.go: `.Get(1)`
$DIR/core/chains/evm/gas/block_history_estimator_test.go: `.NewHash()`
$DIR/core/chains/evm/gas/block_history_estimator_test.go: `.NewHash()`
$DIR/core/chains/evm/gas/block_history_estimator_test.go: `.NewHash()`
$DIR/core/chains/evm/gas/block_history_estimator_test.go: `.Once()`
$DIR/core/chains/evm/gas/block_history_estimator_test.go: `.Start(tests.Context(t))`
$DIR/core/chains/evm/gas/block_history_estimator_test.go: `.Context(t)`
$DIR/core/chains/evm/gas/block_history_estimator_test.go: `.GetDynamicFee(tests.Context(t), assets.NewWeiI(200))`
$DIR/core/chains/evm/gas/block_history_estimator_test.go: `.Context(t)`
$DIR/core/chains/evm/gas/block_history_estimator_test.go: `.NewWeiI(200)`
$DIR/core/chains/evm/gas/block_history_estimator_test.go: `.NewMockConfig()`
$DIR/core/chains/evm/gas/block_history_estimator_test.go: `.NewWeiI(1000000)`
$DIR/core/chains/evm/gas/block_history_estimator_test.go: `.NewWeiI(0)`
$DIR/core/chains/evm/gas/block_history_estimator_test.go: `.NewWeiI(0)`
$DIR/core/chains/evm/gas/block_history_estimator_test.go: `.NewL1Oracle(t)`
$DIR/core/chains/evm/gas/block_history_estimator_test.go: `.NewWeiI(88889)`
$DIR/core/chains/evm/gas/block_history_estimator_test.go: `.NewHash()`
$DIR/core/chains/evm/gas/block_history_estimator_test.go: `.NewWeiI(100000)`
$DIR/core/chains/evm/gas/block_history_estimator_test.go: `.NewHash()`
$DIR/core/chains/evm/gas/block_history_estimator_test.go: `.SetRollingBlockHistory(bhe, blocks)`
$DIR/core/chains/evm/gas/block_history_estimator_test.go: `.Recalculate(testutils.Head(1))`
$DIR/core/chains/evm/gas/block_history_estimator_test.go: `.Head(1)`
$DIR/core/chains/evm/gas/block_history_estimator_test.go: `.SimulateStart(t, bhe)`
$DIR/core/chains/evm/gas/block_history_estimator_test.go: `.Run("if estimator is missing base fee and gas bumping is enabled", func(t *testing.T) {
geCfg.BumpThresholdF = uint64(1)
_, err := bhe.GetDynamicFee(tests.Context(t), maxGasPrice)
require.Error(t, err)
assert.Contains(t, err.Error(), "BlockHistoryEstimator: no value for latest block base fee; cannot estimate EIP-1559 base fee. Are you trying to run with EIP1559 enabled on a non-EIP1559 chain?")
})`
$DIR/core/chains/evm/gas/block_history_estimator_test.go: `.GetDynamicFee(tests.Context(t), maxGasPrice)`
$DIR/core/chains/evm/gas/block_history_estimator_test.go: `.Context(t)`
$DIR/core/chains/evm/gas/block_history_estimator_test.go: `.Run("if estimator is missing base fee and gas bumping is disabled", func(t *testing.T) {
geCfg.BumpThresholdF = uint64(0)
fee, err := bhe.GetDynamicFee(tests.Context(t), maxGasPrice)
require.NoError(t, err)
assert.Equal(t, gas.DynamicFee{FeeCap: maxGasPrice, TipCap: assets.NewWeiI(6000)}, fee)
})`
$DIR/core/chains/evm/gas/block_history_estimator_test.go: `.GetDynamicFee(tests.Context(t), maxGasPrice)`
$DIR/core/chains/evm/gas/block_history_estimator_test.go: `.Context(t)`
$DIR/core/chains/evm/gas/block_history_estimator_test.go: `.Head(1)`
$DIR/core/chains/evm/gas/block_history_estimator_test.go: `.NewWeiI(112500)`
$DIR/core/chains/evm/gas/block_history_estimator_test.go: `.OnNewLongestChain(tests.Context(t), h)`
$DIR/core/chains/evm/gas/block_history_estimator_test.go: `.Context(t)`
$DIR/core/chains/evm/gas/block_history_estimator_test.go: `.Run("if gas bumping is enabled", func(t *testing.T) {
geCfg.BumpThresholdF = uint64(1)
fee, err := bhe.GetDynamicFee(tests.Context(t), maxGasPrice)
require.NoError(t, err)
assert.Equal(t, gas.DynamicFee{FeeCap: assets.NewWeiI(186203), TipCap: assets.NewWeiI(6000)}, fee)
})`
$DIR/core/chains/evm/gas/block_history_estimator_test.go: `.GetDynamicFee(tests.Context(t), maxGasPrice)`
$DIR/core/chains/evm/gas/block_history_estimator_test.go: `.Context(t)`
$DIR/core/chains/evm/gas/block_history_estimator_test.go: `.Run("if gas bumping is disabled", func(t *testing.T) {
geCfg.BumpThresholdF = uint64(0)
fee, err := bhe.GetDynamicFee(tests.Context(t), maxGasPrice)
require.NoError(t, err)
assert.Equal(t, gas.DynamicFee{FeeCap: maxGasPrice, TipCap: assets.NewWeiI(6000)}, fee)
})`
$DIR/core/chains/evm/gas/block_history_estimator_test.go: `.GetDynamicFee(tests.Context(t), maxGasPrice)`
$DIR/core/chains/evm/gas/block_history_estimator_test.go: `.Context(t)`
$DIR/core/chains/evm/gas/block_history_estimator_test.go: `.Run("if gas bumping is enabled and local max gas price set", func(t *testing.T) {
geCfg.BumpThresholdF = uint64(1)
fee, err := bhe.GetDynamicFee(tests.Context(t), assets.NewWeiI(180000))
require.NoError(t, err)
assert.Equal(t, gas.DynamicFee{FeeCap: assets.NewWeiI(180000), TipCap: assets.NewWeiI(6000)}, fee)
})`
$DIR/core/chains/evm/gas/block_history_estimator_test.go: `.GetDynamicFee(tests.Context(t), assets.NewWeiI(180000))`
$DIR/core/chains/evm/gas/block_history_estimator_test.go: `.Context(t)`
$DIR/core/chains/evm/gas/block_history_estimator_test.go: `.NewWeiI(180000)`
$DIR/core/chains/evm/gas/block_history_estimator_test.go: `.Run("if bump threshold is 0 and local max gas price set", func(t *testing.T) {
geCfg.BumpThresholdF = uint64(0)
fee, err := bhe.GetDynamicFee(tests.Context(t), assets.NewWeiI(100))
require.NoError(t, err)
assert.Equal(t, gas.DynamicFee{FeeCap: assets.NewWeiI(100), TipCap: assets.NewWeiI(6000)}, fee)
})`
$DIR/core/chains/evm/gas/block_history_estimator_test.go: `.GetDynamicFee(tests.Context(t), assets.NewWeiI(100))`
$DIR/core/chains/evm/gas/block_history_estimator_test.go: `.Context(t)`
$DIR/core/chains/evm/gas/block_history_estimator_test.go: `.NewWeiI(100)`
$DIR/core/chains/evm/gas/block_history_estimator_test.go: `.Head(1)`
$DIR/core/chains/evm/gas/block_history_estimator_test.go: `.NewWeiI(900000)`
$DIR/core/chains/evm/gas/block_history_estimator_test.go: `.OnNewLongestChain(tests.Context(t), h)`
$DIR/core/chains/evm/gas/block_history_estimator_test.go: `.Context(t)`
$DIR/core/chains/evm/gas/block_history_estimator_test.go: `.GetDynamicFee(tests.Context(t), assets.NewWeiI(1200000))`
$DIR/core/chains/evm/gas/block_history_estimator_test.go: `.Context(t)`
$DIR/core/chains/evm/gas/block_history_estimator_test.go: `.NewWeiI(1200000)`
$DIR/core/chains/evm/gas/block_history_estimator_test.go: `.NewMockConfig()`
$DIR/core/chains/evm/gas/block_history_estimator_test.go: `.TestObserved(t, zapcore.DebugLevel)`
$DIR/core/chains/evm/gas/block_history_estimator_test.go: `.NewL1Oracle(t)`
$DIR/core/chains/evm/gas/block_history_estimator_test.go: `.BlockHistoryEstimatorFromInterface(
gas.NewBlockHistoryEstimator(lggr, nil, cfg, geCfg, bhCfg, testutils.NewRandomEVMChainID(), l1Oracle),
)`
$DIR/core/chains/evm/gas/block_history_estimator_test.go: `.NewBlockHistoryEstimator(lggr, nil, cfg, geCfg, bhCfg, testutils.NewRandomEVMChainID(), l1Oracle)`
$DIR/core/chains/evm/gas/block_history_estimator_test.go: `.NewRandomEVMChainID()`
$DIR/core/chains/evm/gas/block_history_estimator_test.go: `.Run("skips connectivity check if latest block is not present", func(t *testing.T) {
err := bhe.CheckConnectivity(attempts)
require.NoError(t, err)
tests.AssertLogEventually(t, obs, "Latest block is unknown; skipping inclusion check")
})`
$DIR/core/chains/evm/gas/block_history_estimator_test.go: `.CheckConnectivity(attempts)`
$DIR/core/chains/evm/gas/block_history_estimator_test.go: `.AssertLogEventually(t, obs, "Latest block is unknown; skipping inclusion check")`
$DIR/core/chains/evm/gas/block_history_estimator_test.go: `.Head(1)`
$DIR/core/chains/evm/gas/block_history_estimator_test.go: `.NewWeiI(112500)`
$DIR/core/chains/evm/gas/block_history_estimator_test.go: `.OnNewLongestChain(tests.Context(t), h)`
$DIR/core/chains/evm/gas/block_history_estimator_test.go: `.Context(t)`
$DIR/core/chains/evm/gas/block_history_estimator_test.go: `.NewHash()`
$DIR/core/chains/evm/gas/block_history_estimator_test.go: `.SetRollingBlockHistory(bhe, []evmtypes.Block{b0})`
$DIR/core/chains/evm/gas/block_history_estimator_test.go: `.Run("skips connectivity check if block history has insufficient size", func(t *testing.T) {
err := bhe.CheckConnectivity(attempts)
require.NoError(t, err)
tests.AssertLogEventually(t, obs, "Block history in memory with length 1 is insufficient to determine whether transaction should have been included within the past 4 blocks")
})`
$DIR/core/chains/evm/gas/block_history_estimator_test.go: `.CheckConnectivity(attempts)`
$DIR/core/chains/evm/gas/block_history_estimator_test.go: `.AssertLogEventually(t, obs, "Block history in memory with length 1 is insufficient to determine whether transaction should have been included within the past 4 blocks")`
$DIR/core/chains/evm/gas/block_history_estimator_test.go: `.Run("skips connectivity check if attempts is nil or empty", func(t *testing.T) {
err := bhe.CheckConnectivity(nil)
require.NoError(t, err)
})`
$DIR/core/chains/evm/gas/block_history_estimator_test.go: `.CheckConnectivity(nil)`
$DIR/core/chains/evm/gas/block_history_estimator_test.go: `.NewHash()`
$DIR/core/chains/evm/gas/block_history_estimator_test.go: `.NewHash()`
$DIR/core/chains/evm/gas/block_history_estimator_test.go: `.NewHash()`
$DIR/core/chains/evm/gas/block_history_estimator_test.go: `.SetRollingBlockHistory(bhe, []evmtypes.Block{b0, b1, b2, b3})`
$DIR/core/chains/evm/gas/block_history_estimator_test.go: `.Head(5)`
$DIR/core/chains/evm/gas/block_history_estimator_test.go: `.NewWeiI(112500)`
$DIR/core/chains/evm/gas/block_history_estimator_test.go: `.OnNewLongestChain(tests.Context(t), h)`
$DIR/core/chains/evm/gas/block_history_estimator_test.go: `.Context(t)`
$DIR/core/chains/evm/gas/block_history_estimator_test.go: `.Run("returns error if one of the supplied attempts is missing BroadcastBeforeBlockNum", func(t *testing.T) {
err := bhe.CheckConnectivity(attempts)
require.Error(t, err)
assert.Contains(t, err.Error(), fmt.Sprintf("BroadcastBeforeBlockNum was unexpectedly nil for attempt %s", attempts[0].TxHash))
})`
$DIR/core/chains/evm/gas/block_history_estimator_test.go: `.CheckConnectivity(attempts)`
$DIR/core/chains/evm/gas/block_history_estimator_test.go: `.NewHash()`
$DIR/core/chains/evm/gas/block_history_estimator_test.go: `.Run("returns error if one of the supplied attempts has an unknown transaction type", func(t *testing.T) {
err := bhe.CheckConnectivity(attempts)
require.Error(t, err)
assert.Contains(t, err.Error(), fmt.Sprintf("attempt %s has unknown transaction type 0x3", hash))
})`
$DIR/core/chains/evm/gas/block_history_estimator_test.go: `.CheckConnectivity(attempts)`
$DIR/core/chains/evm/gas/block_history_estimator_test.go: `.Run("skips connectivity check if no transactions are suitable", func(t *testing.T) {
err := bhe.CheckConnectivity(attempts)
require.NoError(t, err)
tests.AssertLogEventually(t, obs, fmt.Sprintf("no suitable transactions found to verify if transaction %s has been included within expected inclusion blocks of 4", hash))
})`
$DIR/core/chains/evm/gas/block_history_estimator_test.go: `.CheckConnectivity(attempts)`
$DIR/core/chains/evm/gas/block_history_estimator_test.go: `.AssertLogEventually(t, obs, fmt.Sprintf("no suitable transactions found to verify if transaction %s has been included within expected inclusion blocks of 4", hash))`
$DIR/core/chains/evm/gas/block_history_estimator_test.go: `.Sprintf("no suitable transactions found to verify if transaction %s has been included within expected inclusion blocks of 4", hash)`
$DIR/core/chains/evm/gas/block_history_estimator_test.go: `.Run("in legacy mode", func(t *testing.T) {
b0 = evmtypes.Block{
Number: 0,
Hash: utils.NewHash(),
Transactions: legacyTransactionsFromGasPrices(1000),
}
b1 = evmtypes.Block{
Number: 1,
Hash: utils.NewHash(),
ParentHash: b0.Hash,
Transactions: legacyTransactionsFromGasPrices(2, 3, 4, 5, 6),
}
b2 = evmtypes.Block{
Number: 2,
Hash: utils.NewHash(),
ParentHash: b1.Hash,
Transactions: legacyTransactionsFromGasPrices(4, 4, 5, 5, 6, 6, 7, 7, 8, 8, 9, 9),
}
b3 = evmtypes.Block{
Number: 3,
Hash: utils.NewHash(),
ParentHash: b2.Hash,
Transactions: legacyTransactionsFromGasPrices(3, 4, 5, 6, 7),
}
gas.SetRollingBlockHistory(bhe, []evmtypes.Block{b0, b1, b2, b3})
attempts = []gas.EvmPriorAttempt{
{TxType: 0x0, TxHash: NewEvmHash(), GasPrice: assets.NewWeiI(1000), BroadcastBeforeBlockNum: ptr(int64(4))}, // This is very expensive but will be ignored due to BroadcastBeforeBlockNum being too recent
{TxType: 0x0, TxHash: NewEvmHash(), GasPrice: assets.NewWeiI(3), BroadcastBeforeBlockNum: ptr(int64(0))},
{TxType: 0x0, TxHash: NewEvmHash(), GasPrice: assets.NewWeiI(5), BroadcastBeforeBlockNum: ptr(int64(1))},
{TxType: 0x0, TxHash: NewEvmHash(), GasPrice: assets.NewWeiI(7), BroadcastBeforeBlockNum: ptr(int64(1))},
}
t.Run("passes check if all blocks have percentile price higher or exactly at the highest transaction gas price", func(t *testing.T) {
bhCfg.CheckInclusionBlocksF = 3
bhCfg.CheckInclusionPercentileF = 80 // percentile price is 7 wei
err := bhe.CheckConnectivity(attempts)
require.NoError(t, err)
})
t.Run("fails check if one or more blocks has percentile price higher than highest transaction gas price", func(t *testing.T) {
bhCfg.CheckInclusionBlocksF = 3
bhCfg.CheckInclusionPercentileF = 40 // percentile price is 5 wei
err := bhe.CheckConnectivity(attempts)
require.Error(t, err)
assert.Contains(t, err.Error(), fmt.Sprintf("transaction %s has gas price of 7 wei, which is above percentile=40%% (percentile price: 5 wei) for blocks 2 thru 0 (checking 3 blocks)", attempts[3].TxHash))
require.ErrorIs(t, err, commonfee.ErrConnectivity)
})
t.Run("fails check if one or more blocks has percentile price higher than any transaction gas price", func(t *testing.T) {
bhCfg.CheckInclusionBlocksF = 3
bhCfg.CheckInclusionPercentileF = 30 // percentile price is 4 wei
err := bhe.CheckConnectivity(attempts)
require.Error(t, err)
assert.Contains(t, err.Error(), fmt.Sprintf("transaction %s has gas price of 5 wei, which is above percentile=30%% (percentile price: 4 wei) for blocks 2 thru 0 (checking 3 blocks)", attempts[2].TxHash))
bhCfg.CheckInclusionBlocksF = 3
bhCfg.CheckInclusionPercentileF = 5 // percentile price is 2 wei
err = bhe.CheckConnectivity(attempts)
require.Error(t, err)
assert.Contains(t, err.Error(), fmt.Sprintf("transaction %s has gas price of 3 wei, which is above percentile=5%% (percentile price: 2 wei) for blocks 2 thru 0 (checking 3 blocks)", attempts[1].TxHash))
require.ErrorIs(t, err, commonfee.ErrConnectivity)
})
})`
$DIR/core/chains/evm/gas/block_history_estimator_test.go: `.NewHash()`
$DIR/core/chains/evm/gas/block_history_estimator_test.go: `.NewHash()`
$DIR/core/chains/evm/gas/block_history_estimator_test.go: `.NewHash()`
$DIR/core/chains/evm/gas/block_history_estimator_test.go: `.NewHash()`
$DIR/core/chains/evm/gas/block_history_estimator_test.go: `.SetRollingBlockHistory(bhe, []evmtypes.Block{b0, b1, b2, b3})`
$DIR/core/chains/evm/gas/block_history_estimator_test.go: `.NewWeiI(1000)`
$DIR/core/chains/evm/gas/block_history_estimator_test.go: `.NewWeiI(3)`
$DIR/core/chains/evm/gas/block_history_estimator_test.go: `.NewWeiI(5)`
$DIR/core/chains/evm/gas/block_history_estimator_test.go: `.NewWeiI(7)`
$DIR/core/chains/evm/gas/block_history_estimator_test.go: `.Run("passes check if all blocks have percentile price higher or exactly at the highest transaction gas price", func(t *testing.T) {
bhCfg.CheckInclusionBlocksF = 3
bhCfg.CheckInclusionPercentileF = 80 // percentile price is 7 wei
err := bhe.CheckConnectivity(attempts)
require.NoError(t, err)
})`
$DIR/core/chains/evm/gas/block_history_estimator_test.go: `.CheckConnectivity(attempts)`
$DIR/core/chains/evm/gas/block_history_estimator_test.go: `.Run("fails check if one or more blocks has percentile price higher than highest transaction gas price", func(t *testing.T) {
bhCfg.CheckInclusionBlocksF = 3
bhCfg.CheckInclusionPercentileF = 40 // percentile price is 5 wei
err := bhe.CheckConnectivity(attempts)
require.Error(t, err)
assert.Contains(t, err.Error(), fmt.Sprintf("transaction %s has gas price of 7 wei, which is above percentile=40%% (percentile price: 5 wei) for blocks 2 thru 0 (checking 3 blocks)", attempts[3].TxHash))
require.ErrorIs(t, err, commonfee.ErrConnectivity)
})`
$DIR/core/chains/evm/gas/block_history_estimator_test.go: `.CheckConnectivity(attempts)`
$DIR/core/chains/evm/gas/block_history_estimator_test.go: `.Run("fails check if one or more blocks has percentile price higher than any transaction gas price", func(t *testing.T) {
bhCfg.CheckInclusionBlocksF = 3
bhCfg.CheckInclusionPercentileF = 30 // percentile price is 4 wei
err := bhe.CheckConnectivity(attempts)
require.Error(t, err)
assert.Contains(t, err.Error(), fmt.Sprintf("transaction %s has gas price of 5 wei, which is above percentile=30%% (percentile price: 4 wei) for blocks 2 thru 0 (checking 3 blocks)", attempts[2].TxHash))
bhCfg.CheckInclusionBlocksF = 3
bhCfg.CheckInclusionPercentileF = 5 // percentile price is 2 wei
err = bhe.CheckConnectivity(attempts)
require.Error(t, err)
assert.Contains(t, err.Error(), fmt.Sprintf("transaction %s has gas price of 3 wei, which is above percentile=5%% (percentile price: 2 wei) for blocks 2 thru 0 (checking 3 blocks)", attempts[1].TxHash))
require.ErrorIs(t, err, commonfee.ErrConnectivity)
})`
$DIR/core/chains/evm/gas/block_history_estimator_test.go: `.CheckConnectivity(attempts)`
$DIR/core/chains/evm/gas/block_history_estimator_test.go: `.CheckConnectivity(attempts)`
$DIR/core/chains/evm/gas/block_history_estimator_test.go: `.Run("handles mixed legacy and EIP-1559 transactions", func(t *testing.T) {
b0 = evmtypes.Block{
BaseFeePerGas: assets.NewWeiI(1),
Number: 3,
Hash: utils.NewHash(),
Transactions: append(legacyTransactionsFromGasPrices(1, 2, 3, 4, 5), dynamicFeeTransactionsFromTipCaps(6, 7, 8, 9, 10)...),
}
gas.SetRollingBlockHistory(bhe, []evmtypes.Block{b0})
attempts = []gas.EvmPriorAttempt{
{TxType: 0x2, TxHash: NewEvmHash(), DynamicFee: gas.DynamicFee{FeeCap: assets.NewWeiI(1), TipCap: assets.NewWeiI(3)}, BroadcastBeforeBlockNum: ptr(int64(0))},
{TxType: 0x0, TxHash: NewEvmHash(), GasPrice: assets.NewWeiI(10), BroadcastBeforeBlockNum: ptr(int64(0))},
}
t.Run("passes check if both transactions are ok", func(t *testing.T) {
bhCfg.CheckInclusionBlocksF = 1
bhCfg.CheckInclusionPercentileF = 90 // percentile price is 5 wei
err := bhe.CheckConnectivity(attempts)
require.NoError(t, err)
})
t.Run("fails check if legacy transaction fails", func(t *testing.T) {
bhCfg.CheckInclusionBlocksF = 1
bhCfg.CheckInclusionPercentileF = 60
err := bhe.CheckConnectivity(attempts)
require.Error(t, err)
assert.Contains(t, err.Error(), fmt.Sprintf("transaction %s has gas price of 10 wei, which is above percentile=60%% (percentile price: 7 wei) for blocks 3 thru 3 (checking 1 blocks)", attempts[1].TxHash))
require.ErrorIs(t, err, commonfee.ErrConnectivity)
})
attempts = []gas.EvmPriorAttempt{
{TxType: 0x2, TxHash: NewEvmHash(), DynamicFee: gas.DynamicFee{FeeCap: assets.NewWeiI(11), TipCap: assets.NewWeiI(10)}, BroadcastBeforeBlockNum: ptr(int64(0))},
{TxType: 0x0, TxHash: NewEvmHash(), GasPrice: assets.NewWeiI(3), BroadcastBeforeBlockNum: ptr(int64(0))},
}
t.Run("fails check if dynamic fee transaction fails", func(t *testing.T) {
gas.SetRollingBlockHistory(bhe, []evmtypes.Block{b0})
bhCfg.CheckInclusionBlocksF = 1
bhCfg.CheckInclusionPercentileF = 60
err := bhe.CheckConnectivity(attempts)
require.Error(t, err)
assert.Contains(t, err.Error(), fmt.Sprintf("transaction %s has tip cap of 10 wei, which is above percentile=60%% (percentile tip cap: 6 wei) for blocks 3 thru 3 (checking 1 blocks)", attempts[0].TxHash))
require.ErrorIs(t, err, commonfee.ErrConnectivity)
})
})`
$DIR/core/chains/evm/gas/block_history_estimator_test.go: `.NewWeiI(1)`
$DIR/core/chains/evm/gas/block_history_estimator_test.go: `.NewHash()`
$DIR/core/chains/evm/gas/block_history_estimator_test.go: `.SetRollingBlockHistory(bhe, []evmtypes.Block{b0})`
$DIR/core/chains/evm/gas/block_history_estimator_test.go: `.NewWeiI(1)`
$DIR/core/chains/evm/gas/block_history_estimator_test.go: `.NewWeiI(3)`
$DIR/core/chains/evm/gas/block_history_estimator_test.go: `.NewWeiI(10)`
$DIR/core/chains/evm/gas/block_history_estimator_test.go: `.Run("passes check if both transactions are ok", func(t *testing.T) {
bhCfg.CheckInclusionBlocksF = 1
bhCfg.CheckInclusionPercentileF = 90 // percentile price is 5 wei
err := bhe.CheckConnectivity(attempts)
require.NoError(t, err)
})`
$DIR/core/chains/evm/gas/block_history_estimator_test.go: `.CheckConnectivity(attempts)`
$DIR/core/chains/evm/gas/block_history_estimator_test.go: `.Run("fails check if legacy transaction fails", func(t *testing.T) {
bhCfg.CheckInclusionBlocksF = 1
bhCfg.CheckInclusionPercentileF = 60
err := bhe.CheckConnectivity(attempts)
require.Error(t, err)
assert.Contains(t, err.Error(), fmt.Sprintf("transaction %s has gas price of 10 wei, which is above percentile=60%% (percentile price: 7 wei) for blocks 3 thru 3 (checking 1 blocks)", attempts[1].TxHash))
require.ErrorIs(t, err, commonfee.ErrConnectivity)
})`
$DIR/core/chains/evm/gas/block_history_estimator_test.go: `.CheckConnectivity(attempts)`
$DIR/core/chains/evm/gas/block_history_estimator_test.go: `.NewWeiI(11)`
$DIR/core/chains/evm/gas/block_history_estimator_test.go: `.NewWeiI(10)`
$DIR/core/chains/evm/gas/block_history_estimator_test.go: `.NewWeiI(3)`
$DIR/core/chains/evm/gas/block_history_estimator_test.go: `.Run("fails check if dynamic fee transaction fails", func(t *testing.T) {
gas.SetRollingBlockHistory(bhe, []evmtypes.Block{b0})
bhCfg.CheckInclusionBlocksF = 1
bhCfg.CheckInclusionPercentileF = 60
err := bhe.CheckConnectivity(attempts)
require.Error(t, err)
assert.Contains(t, err.Error(), fmt.Sprintf("transaction %s has tip cap of 10 wei, which is above percentile=60%% (percentile tip cap: 6 wei) for blocks 3 thru 3 (checking 1 blocks)", attempts[0].TxHash))
require.ErrorIs(t, err, commonfee.ErrConnectivity)
})`
$DIR/core/chains/evm/gas/block_history_estimator_test.go: `.SetRollingBlockHistory(bhe, []evmtypes.Block{b0})`
$DIR/core/chains/evm/gas/block_history_estimator_test.go: `.CheckConnectivity(attempts)`
$DIR/core/chains/evm/gas/block_history_estimator_test.go: `.NewWeiI(5)`
$DIR/core/chains/evm/gas/block_history_estimator_test.go: `.NewHash()`
$DIR/core/chains/evm/gas/block_history_estimator_test.go: `.NewWeiI(8)`
$DIR/core/chains/evm/gas/block_history_estimator_test.go: `.NewHash()`
$DIR/core/chains/evm/gas/block_history_estimator_test.go: `.NewWeiI(13)`
$DIR/core/chains/evm/gas/block_history_estimator_test.go: `.NewHash()`
$DIR/core/chains/evm/gas/block_history_estimator_test.go: `.NewWeiI(21)`
$DIR/core/chains/evm/gas/block_history_estimator_test.go: `.NewHash()`
$DIR/core/chains/evm/gas/block_history_estimator_test.go: `.SetRollingBlockHistory(bhe, blocks)`
$DIR/core/chains/evm/gas/block_history_estimator_test.go: `.NewWeiI(30)`
$DIR/core/chains/evm/gas/block_history_estimator_test.go: `.NewWeiI(1000)`
$DIR/core/chains/evm/gas/block_history_estimator_test.go: `.NewWeiI(30)`
$DIR/core/chains/evm/gas/block_history_estimator_test.go: `.NewWeiI(3)`
$DIR/core/chains/evm/gas/block_history_estimator_test.go: `.NewWeiI(30)`
$DIR/core/chains/evm/gas/block_history_estimator_test.go: `.NewWeiI(5)`
$DIR/core/chains/evm/gas/block_history_estimator_test.go: `.NewWeiI(30)`
$DIR/core/chains/evm/gas/block_history_estimator_test.go: `.NewWeiI(7)`
$DIR/core/chains/evm/gas/block_history_estimator_test.go: `.Run("passes check if all blocks have 90th percentile price higher than highest transaction tip cap", func(t *testing.T) {
bhCfg.CheckInclusionBlocksF = 3
bhCfg.CheckInclusionPercentileF = 80
err := bhe.CheckConnectivity(attempts)
require.NoError(t, err)
})`
$DIR/core/chains/evm/gas/block_history_estimator_test.go: `.CheckConnectivity(attempts)`
$DIR/core/chains/evm/gas/block_history_estimator_test.go: `.Run("fails check if one or more blocks has percentile tip cap higher than any transaction tip cap, and base fee higher than the block base fee", func(t *testing.T) {
bhCfg.CheckInclusionBlocksF = 3
bhCfg.CheckInclusionPercentileF = 20
err := bhe.CheckConnectivity(attempts)
require.Error(t, err)
assert.Contains(t, err.Error(), fmt.Sprintf("transaction %s has tip cap of 5 wei, which is above percentile=20%% (percentile tip cap: 4 wei) for blocks 2 thru 0 (checking 3 blocks)", attempts[2].TxHash))
require.ErrorIs(t, err, commonfee.ErrConnectivity)
bhCfg.CheckInclusionBlocksF = 3
bhCfg.CheckInclusionPercentileF = 5
err = bhe.CheckConnectivity(attempts)
require.Error(t, err)
assert.Contains(t, err.Error(), fmt.Sprintf("transaction %s has tip cap of 3 wei, which is above percentile=5%% (percentile tip cap: 2 wei) for blocks 2 thru 0 (checking 3 blocks)", attempts[1].TxHash))
require.ErrorIs(t, err, commonfee.ErrConnectivity)
})`
$DIR/core/chains/evm/gas/block_history_estimator_test.go: `.CheckConnectivity(attempts)`
$DIR/core/chains/evm/gas/block_history_estimator_test.go: `.CheckConnectivity(attempts)`
$DIR/core/chains/evm/gas/block_history_estimator_test.go: `.Run("passes check if, for at least one block, feecap < tipcap+basefee, even if percentile is not reached", func(t *testing.T) {
bhCfg.CheckInclusionBlocksF = 3
bhCfg.CheckInclusionPercentileF = 5
attempts = []gas.EvmPriorAttempt{
{TxType: 0x2, TxHash: NewEvmHash(), DynamicFee: gas.DynamicFee{FeeCap: assets.NewWeiI(4), TipCap: assets.NewWeiI(7)}, BroadcastBeforeBlockNum: ptr(int64(1))},
}
err := bhe.CheckConnectivity(attempts)
require.NoError(t, err)
})`
$DIR/core/chains/evm/gas/block_history_estimator_test.go: `.NewWeiI(4)`
$DIR/core/chains/evm/gas/block_history_estimator_test.go: `.NewWeiI(7)`
$DIR/core/chains/evm/gas/block_history_estimator_test.go: `.CheckConnectivity(attempts)`
$DIR/core/chains/evm/gas/block_history_estimator_test.go: `.NewWeiI(1000000)`
$DIR/core/chains/evm/gas/block_history_estimator_test.go: `.Run("BumpLegacyGas checks connectivity", func(t *testing.T) {
cfg := gas.NewMockConfig()
bhCfg.CheckInclusionBlocksF = 1
bhCfg.CheckInclusionPercentileF = 10
geCfg := &gas.MockGasEstimatorConfig{}
geCfg.EIP1559DynamicFeesF = false
geCfg.BumpPercentF = 10
geCfg.BumpMinF = assets.NewWeiI(150)
geCfg.PriceMaxF = maxGasPrice
l1Oracle := rollupMocks.NewL1Oracle(t)
bhe := newBlockHistoryEstimator(t, nil, cfg, geCfg, bhCfg, l1Oracle)
b1 := evmtypes.Block{
Number: 1,
Hash: utils.NewHash(),
Transactions: legacyTransactionsFromGasPrices(1),
}
gas.SetRollingBlockHistory(bhe, []evmtypes.Block{b1})
head := testutils.Head(1)
bhe.OnNewLongestChain(tests.Context(t), head)
attempts := []gas.EvmPriorAttempt{
{TxType: 0x0, TxHash: NewEvmHash(), GasPrice: assets.NewWeiI(1000), BroadcastBeforeBlockNum: ptr(int64(0))},
}
_, _, err := bhe.BumpLegacyGas(tests.Context(t), assets.NewWeiI(42), 100000, maxGasPrice, attempts)
require.Error(t, err)
assert.True(t, pkgerrors.Is(err, commonfee.ErrConnectivity))
assert.Contains(t, err.Error(), fmt.Sprintf("transaction %s has gas price of 1 kwei, which is above percentile=10%% (percentile price: 1 wei) for blocks 1 thru 1 (checking 1 blocks)", attempts[0].TxHash))
})`
$DIR/core/chains/evm/gas/block_history_estimator_test.go: `.NewMockConfig()`
$DIR/core/chains/evm/gas/block_history_estimator_test.go: `.NewWeiI(150)`
$DIR/core/chains/evm/gas/block_history_estimator_test.go: `.NewL1Oracle(t)`
$DIR/core/chains/evm/gas/block_history_estimator_test.go: `.NewHash()`
$DIR/core/chains/evm/gas/block_history_estimator_test.go: `.SetRollingBlockHistory(bhe, []evmtypes.Block{b1})`
$DIR/core/chains/evm/gas/block_history_estimator_test.go: `.Head(1)`
$DIR/core/chains/evm/gas/block_history_estimator_test.go: `.OnNewLongestChain(tests.Context(t), head)`
$DIR/core/chains/evm/gas/block_history_estimator_test.go: `.Context(t)`
$DIR/core/chains/evm/gas/block_history_estimator_test.go: `.NewWeiI(1000)`
$DIR/core/chains/evm/gas/block_history_estimator_test.go: `.BumpLegacyGas(tests.Context(t), assets.NewWeiI(42), 100000, maxGasPrice, attempts)`
$DIR/core/chains/evm/gas/block_history_estimator_test.go: `.Context(t)`
$DIR/core/chains/evm/gas/block_history_estimator_test.go: `.NewWeiI(42)`
$DIR/core/chains/evm/gas/block_history_estimator_test.go: `.Run("BumpLegacyGas calls BumpLegacyGasPriceOnly with proper current gas price", func(t *testing.T) {
cfg := gas.NewMockConfig()
geCfg := &gas.MockGasEstimatorConfig{}
geCfg.EIP1559DynamicFeesF = false
geCfg.BumpPercentF = 10
geCfg.BumpMinF = assets.NewWeiI(150)
geCfg.PriceMaxF = maxGasPrice
l1Oracle := rollupMocks.NewL1Oracle(t)
bhe := newBlockHistoryEstimator(t, nil, cfg, geCfg, bhCfg, l1Oracle)
t.Run("ignores nil current gas price", func(t *testing.T) {
gasPrice, gasLimit, err := bhe.BumpLegacyGas(tests.Context(t), assets.NewWeiI(42), 100000, maxGasPrice, nil)
require.NoError(t, err)
expectedGasPrice, err := gas.BumpLegacyGasPriceOnly(geCfg, logger.TestSugared(t), nil, assets.NewWeiI(42), maxGasPrice)
require.NoError(t, err)
assert.Equal(t, 100000, int(gasLimit))
assert.Equal(t, expectedGasPrice, gasPrice)
})
t.Run("ignores current gas price > max gas price", func(t *testing.T) {
gasPrice, gasLimit, err := bhe.BumpLegacyGas(tests.Context(t), assets.NewWeiI(42), 100000, maxGasPrice, nil)
require.NoError(t, err)
massive := assets.NewWeiI(100000000000000)
gas.SetGasPrice(bhe, massive)
expectedGasPrice, err := gas.BumpLegacyGasPriceOnly(geCfg, logger.TestSugared(t), massive, assets.NewWeiI(42), maxGasPrice)
require.NoError(t, err)
assert.Equal(t, 100000, int(gasLimit))
assert.Equal(t, expectedGasPrice, gasPrice)
})
t.Run("ignores current gas price < bumped gas price", func(t *testing.T) {
gas.SetGasPrice(bhe, assets.NewWeiI(191))
gasPrice, gasLimit, err := bhe.BumpLegacyGas(tests.Context(t), assets.NewWeiI(42), 100000, maxGasPrice, nil)
require.NoError(t, err)
assert.Equal(t, 100000, int(gasLimit))
assert.Equal(t, assets.NewWeiI(192), gasPrice)
})
t.Run("uses current gas price > bumped gas price", func(t *testing.T) {
gas.SetGasPrice(bhe, assets.NewWeiI(193))
gasPrice, gasLimit, err := bhe.BumpLegacyGas(tests.Context(t), assets.NewWeiI(42), 100000, maxGasPrice, nil)
require.NoError(t, err)
assert.Equal(t, 100000, int(gasLimit))
assert.Equal(t, assets.NewWeiI(193), gasPrice)
})
t.Run("bumped gas price > max gas price", func(t *testing.T) {
gas.SetGasPrice(bhe, assets.NewWeiI(191))
gasPrice, gasLimit, err := bhe.BumpLegacyGas(tests.Context(t), assets.NewWeiI(42), 100000, assets.NewWeiI(100), nil)
require.Error(t, err)
assert.Nil(t, gasPrice)
assert.Equal(t, 0, int(gasLimit))
assert.Contains(t, err.Error(), "bumped gas price of 192 wei would exceed configured max gas price of 100 wei (original price was 42 wei).")
})
t.Run("current gas price > max gas price", func(t *testing.T) {
gas.SetGasPrice(bhe, assets.NewWeiI(193))
gasPrice, gasLimit, err := bhe.BumpLegacyGas(tests.Context(t), assets.NewWeiI(42), 100000, assets.NewWeiI(100), nil)
require.Error(t, err)
assert.Nil(t, gasPrice)
assert.Equal(t, 0, int(gasLimit))
assert.Contains(t, err.Error(), "bumped gas price of 192 wei would exceed configured max gas price of 100 wei (original price was 42 wei).")
})
})`
$DIR/core/chains/evm/gas/block_history_estimator_test.go: `.NewMockConfig()`
$DIR/core/chains/evm/gas/block_history_estimator_test.go: `.NewWeiI(150)`
$DIR/core/chains/evm/gas/block_history_estimator_test.go: `.NewL1Oracle(t)`
$DIR/core/chains/evm/gas/block_history_estimator_test.go: `.Run("ignores nil current gas price", func(t *testing.T) {
gasPrice, gasLimit, err := bhe.BumpLegacyGas(tests.Context(t), assets.NewWeiI(42), 100000, maxGasPrice, nil)
require.NoError(t, err)
expectedGasPrice, err := gas.BumpLegacyGasPriceOnly(geCfg, logger.TestSugared(t), nil, assets.NewWeiI(42), maxGasPrice)
require.NoError(t, err)
assert.Equal(t, 100000, int(gasLimit))
assert.Equal(t, expectedGasPrice, gasPrice)
})`
$DIR/core/chains/evm/gas/block_history_estimator_test.go: `.BumpLegacyGas(tests.Context(t), assets.NewWeiI(42), 100000, maxGasPrice, nil)`
$DIR/core/chains/evm/gas/block_history_estimator_test.go: `.Context(t)`
$DIR/core/chains/evm/gas/block_history_estimator_test.go: `.NewWeiI(42)`
$DIR/core/chains/evm/gas/block_history_estimator_test.go: `.BumpLegacyGasPriceOnly(geCfg, logger.TestSugared(t), nil, assets.NewWeiI(42), maxGasPrice)`
$DIR/core/chains/evm/gas/block_history_estimator_test.go: `.TestSugared(t)`
$DIR/core/chains/evm/gas/block_history_estimator_test.go: `.NewWeiI(42)`
$DIR/core/chains/evm/gas/block_history_estimator_test.go: `.Run("ignores current gas price > max gas price", func(t *testing.T) {
gasPrice, gasLimit, err := bhe.BumpLegacyGas(tests.Context(t), assets.NewWeiI(42), 100000, maxGasPrice, nil)
require.NoError(t, err)
massive := assets.NewWeiI(100000000000000)
gas.SetGasPrice(bhe, massive)
expectedGasPrice, err := gas.BumpLegacyGasPriceOnly(geCfg, logger.TestSugared(t), massive, assets.NewWeiI(42), maxGasPrice)
require.NoError(t, err)
assert.Equal(t, 100000, int(gasLimit))
assert.Equal(t, expectedGasPrice, gasPrice)
})`
$DIR/core/chains/evm/gas/block_history_estimator_test.go: `.BumpLegacyGas(tests.Context(t), assets.NewWeiI(42), 100000, maxGasPrice, nil)`
$DIR/core/chains/evm/gas/block_history_estimator_test.go: `.Context(t)`
$DIR/core/chains/evm/gas/block_history_estimator_test.go: `.NewWeiI(42)`
$DIR/core/chains/evm/gas/block_history_estimator_test.go: `.NewWeiI(100000000000000)`
$DIR/core/chains/evm/gas/block_history_estimator_test.go: `.SetGasPrice(bhe, massive)`
$DIR/core/chains/evm/gas/block_history_estimator_test.go: `.BumpLegacyGasPriceOnly(geCfg, logger.TestSugared(t), massive, assets.NewWeiI(42), maxGasPrice)`
$DIR/core/chains/evm/gas/block_history_estimator_test.go: `.TestSugared(t)`
$DIR/core/chains/evm/gas/block_history_estimator_test.go: `.NewWeiI(42)`
$DIR/core/chains/evm/gas/block_history_estimator_test.go: `.Run("ignores current gas price < bumped gas price", func(t *testing.T) {
gas.SetGasPrice(bhe, assets.NewWeiI(191))
gasPrice, gasLimit, err := bhe.BumpLegacyGas(tests.Context(t), assets.NewWeiI(42), 100000, maxGasPrice, nil)
require.NoError(t, err)
assert.Equal(t, 100000, int(gasLimit))
assert.Equal(t, assets.NewWeiI(192), gasPrice)
})`
$DIR/core/chains/evm/gas/block_history_estimator_test.go: `.SetGasPrice(bhe, assets.NewWeiI(191))`
$DIR/core/chains/evm/gas/block_history_estimator_test.go: `.NewWeiI(191)`
$DIR/core/chains/evm/gas/block_history_estimator_test.go: `.BumpLegacyGas(tests.Context(t), assets.NewWeiI(42), 100000, maxGasPrice, nil)`
$DIR/core/chains/evm/gas/block_history_estimator_test.go: `.Context(t)`
$DIR/core/chains/evm/gas/block_history_estimator_test.go: `.NewWeiI(42)`
$DIR/core/chains/evm/gas/block_history_estimator_test.go: `.Run("uses current gas price > bumped gas price", func(t *testing.T) {
gas.SetGasPrice(bhe, assets.NewWeiI(193))
gasPrice, gasLimit, err := bhe.BumpLegacyGas(tests.Context(t), assets.NewWeiI(42), 100000, maxGasPrice, nil)
require.NoError(t, err)
assert.Equal(t, 100000, int(gasLimit))
assert.Equal(t, assets.NewWeiI(193), gasPrice)
})`
$DIR/core/chains/evm/gas/block_history_estimator_test.go: `.SetGasPrice(bhe, assets.NewWeiI(193))`
$DIR/core/chains/evm/gas/block_history_estimator_test.go: `.NewWeiI(193)`
$DIR/core/chains/evm/gas/block_history_estimator_test.go: `.BumpLegacyGas(tests.Context(t), assets.NewWeiI(42), 100000, maxGasPrice, nil)`
$DIR/core/chains/evm/gas/block_history_estimator_test.go: `.Context(t)`
$DIR/core/chains/evm/gas/block_history_estimator_test.go: `.NewWeiI(42)`
$DIR/core/chains/evm/gas/block_history_estimator_test.go: `.Run("bumped gas price > max gas price", func(t *testing.T) {
gas.SetGasPrice(bhe, assets.NewWeiI(191))
gasPrice, gasLimit, err := bhe.BumpLegacyGas(tests.Context(t), assets.NewWeiI(42), 100000, assets.NewWeiI(100), nil)
require.Error(t, err)
assert.Nil(t, gasPrice)
assert.Equal(t, 0, int(gasLimit))
assert.Contains(t, err.Error(), "bumped gas price of 192 wei would exceed configured max gas price of 100 wei (original price was 42 wei).")
})`
$DIR/core/chains/evm/gas/block_history_estimator_test.go: `.SetGasPrice(bhe, assets.NewWeiI(191))`
$DIR/core/chains/evm/gas/block_history_estimator_test.go: `.NewWeiI(191)`
$DIR/core/chains/evm/gas/block_history_estimator_test.go: `.BumpLegacyGas(tests.Context(t), assets.NewWeiI(42), 100000, assets.NewWeiI(100), nil)`
$DIR/core/chains/evm/gas/block_history_estimator_test.go: `.Context(t)`
$DIR/core/chains/evm/gas/block_history_estimator_test.go: `.NewWeiI(42)`
$DIR/core/chains/evm/gas/block_history_estimator_test.go: `.NewWeiI(100)`
$DIR/core/chains/evm/gas/block_history_estimator_test.go: `.Run("current gas price > max gas price", func(t *testing.T) {
gas.SetGasPrice(bhe, assets.NewWeiI(193))
gasPrice, gasLimit, err := bhe.BumpLegacyGas(tests.Context(t), assets.NewWeiI(42), 100000, assets.NewWeiI(100), nil)
require.Error(t, err)
assert.Nil(t, gasPrice)
assert.Equal(t, 0, int(gasLimit))
assert.Contains(t, err.Error(), "bumped gas price of 192 wei would exceed configured max gas price of 100 wei (original price was 42 wei).")
})`
$DIR/core/chains/evm/gas/block_history_estimator_test.go: `.SetGasPrice(bhe, assets.NewWeiI(193))`
$DIR/core/chains/evm/gas/block_history_estimator_test.go: `.NewWeiI(193)`
$DIR/core/chains/evm/gas/block_history_estimator_test.go: `.BumpLegacyGas(tests.Context(t), assets.NewWeiI(42), 100000, assets.NewWeiI(100), nil)`
$DIR/core/chains/evm/gas/block_history_estimator_test.go: `.Context(t)`
$DIR/core/chains/evm/gas/block_history_estimator_test.go: `.NewWeiI(42)`
$DIR/core/chains/evm/gas/block_history_estimator_test.go: `.NewWeiI(100)`
$DIR/core/chains/evm/gas/block_history_estimator_test.go: `.Run("BumpDynamicFee checks connectivity", func(t *testing.T) {
cfg := gas.NewMockConfig()
bhCfg := newBlockHistoryConfig()
bhCfg.CheckInclusionBlocksF = 1
bhCfg.CheckInclusionPercentileF = 10
geCfg := &gas.MockGasEstimatorConfig{}
geCfg.EIP1559DynamicFeesF = true
geCfg.BumpPercentF = 10
geCfg.BumpMinF = assets.NewWeiI(150)
geCfg.PriceMaxF = maxGasPrice
l1Oracle := rollupMocks.NewL1Oracle(t)
bhe := newBlockHistoryEstimator(t, nil, cfg, geCfg, bhCfg, l1Oracle)
b1 := evmtypes.Block{
BaseFeePerGas: assets.NewWeiI(1),
Number: 1,
Hash: utils.NewHash(),
Transactions: dynamicFeeTransactionsFromTipCaps(1),
}
gas.SetRollingBlockHistory(bhe, []evmtypes.Block{b1})
head := testutils.Head(1)
bhe.OnNewLongestChain(tests.Context(t), head)
originalFee := gas.DynamicFee{FeeCap: assets.NewWeiI(100), TipCap: assets.NewWeiI(25)}
attempts := []gas.EvmPriorAttempt{
{TxType: 0x2, TxHash: NewEvmHash(), DynamicFee: gas.DynamicFee{TipCap: originalFee.TipCap, FeeCap: originalFee.FeeCap}, BroadcastBeforeBlockNum: ptr(int64(0))}}
_, err := bhe.BumpDynamicFee(tests.Context(t), originalFee, maxGasPrice, attempts)
require.Error(t, err)
assert.True(t, pkgerrors.Is(err, commonfee.ErrConnectivity))
assert.Contains(t, err.Error(), fmt.Sprintf("transaction %s has tip cap of 25 wei, which is above percentile=10%% (percentile tip cap: 1 wei) for blocks 1 thru 1 (checking 1 blocks)", attempts[0].TxHash))
})`
$DIR/core/chains/evm/gas/block_history_estimator_test.go: `.NewMockConfig()`
$DIR/core/chains/evm/gas/block_history_estimator_test.go: `.NewWeiI(150)`
$DIR/core/chains/evm/gas/block_history_estimator_test.go: `.NewL1Oracle(t)`
$DIR/core/chains/evm/gas/block_history_estimator_test.go: `.NewWeiI(1)`
$DIR/core/chains/evm/gas/block_history_estimator_test.go: `.NewHash()`
$DIR/core/chains/evm/gas/block_history_estimator_test.go: `.SetRollingBlockHistory(bhe, []evmtypes.Block{b1})`
$DIR/core/chains/evm/gas/block_history_estimator_test.go: `.Head(1)`
$DIR/core/chains/evm/gas/block_history_estimator_test.go: `.OnNewLongestChain(tests.Context(t), head)`
$DIR/core/chains/evm/gas/block_history_estimator_test.go: `.Context(t)`
$DIR/core/chains/evm/gas/block_history_estimator_test.go: `.NewWeiI(100)`
$DIR/core/chains/evm/gas/block_history_estimator_test.go: `.NewWeiI(25)`
$DIR/core/chains/evm/gas/block_history_estimator_test.go: `.BumpDynamicFee(tests.Context(t), originalFee, maxGasPrice, attempts)`
$DIR/core/chains/evm/gas/block_history_estimator_test.go: `.Context(t)`
$DIR/core/chains/evm/gas/block_history_estimator_test.go: `.NewMockConfig()`
$DIR/core/chains/evm/gas/block_history_estimator_test.go: `.NewWeiI(150)`
$DIR/core/chains/evm/gas/block_history_estimator_test.go: `.NewWeiI(52)`
$DIR/core/chains/evm/gas/block_history_estimator_test.go: `.NewL1Oracle(t)`
$DIR/core/chains/evm/gas/block_history_estimator_test.go: `.Run("when current tip cap is nil", func(t *testing.T) {
originalFee := gas.DynamicFee{FeeCap: assets.NewWeiI(100), TipCap: assets.NewWeiI(25)}
fee, err := bhe.BumpDynamicFee(tests.Context(t), originalFee, maxGasPrice, nil)
require.NoError(t, err)
assert.Equal(t, gas.DynamicFee{FeeCap: assets.NewWeiI(250), TipCap: assets.NewWeiI(202)}, fee)
})`
$DIR/core/chains/evm/gas/block_history_estimator_test.go: `.NewWeiI(100)`
$DIR/core/chains/evm/gas/block_history_estimator_test.go: `.NewWeiI(25)`
$DIR/core/chains/evm/gas/block_history_estimator_test.go: `.BumpDynamicFee(tests.Context(t), originalFee, maxGasPrice, nil)`
$DIR/core/chains/evm/gas/block_history_estimator_test.go: `.Context(t)`
$DIR/core/chains/evm/gas/block_history_estimator_test.go: `.Run("ignores current tip cap that is smaller than original fee with bump applied", func(t *testing.T) {
gas.SetTipCap(bhe, assets.NewWeiI(201))
originalFee := gas.DynamicFee{FeeCap: assets.NewWeiI(100), TipCap: assets.NewWeiI(25)}
fee, err := bhe.BumpDynamicFee(tests.Context(t), originalFee, maxGasPrice, nil)
require.NoError(t, err)
assert.Equal(t, gas.DynamicFee{FeeCap: assets.NewWeiI(250), TipCap: assets.NewWeiI(202)}, fee)
})`
$DIR/core/chains/evm/gas/block_history_estimator_test.go: `.SetTipCap(bhe, assets.NewWeiI(201))`
$DIR/core/chains/evm/gas/block_history_estimator_test.go: `.NewWeiI(201)`
$DIR/core/chains/evm/gas/block_history_estimator_test.go: `.NewWeiI(100)`
$DIR/core/chains/evm/gas/block_history_estimator_test.go: `.NewWeiI(25)`
$DIR/core/chains/evm/gas/block_history_estimator_test.go: `.BumpDynamicFee(tests.Context(t), originalFee, maxGasPrice, nil)`
$DIR/core/chains/evm/gas/block_history_estimator_test.go: `.Context(t)`
$DIR/core/chains/evm/gas/block_history_estimator_test.go: `.Run("uses current tip cap that is larger than original fee with bump applied", func(t *testing.T) {
gas.SetTipCap(bhe, assets.NewWeiI(203))
originalFee := gas.DynamicFee{FeeCap: assets.NewWeiI(100), TipCap: assets.NewWeiI(25)}
fee, err := bhe.BumpDynamicFee(tests.Context(t), originalFee, maxGasPrice, nil)
require.NoError(t, err)
assert.Equal(t, gas.DynamicFee{FeeCap: assets.NewWeiI(250), TipCap: assets.NewWeiI(203)}, fee)
})`
$DIR/core/chains/evm/gas/block_history_estimator_test.go: `.SetTipCap(bhe, assets.NewWeiI(203))`
$DIR/core/chains/evm/gas/block_history_estimator_test.go: `.NewWeiI(203)`
$DIR/core/chains/evm/gas/block_history_estimator_test.go: `.NewWeiI(100)`
$DIR/core/chains/evm/gas/block_history_estimator_test.go: `.NewWeiI(25)`
$DIR/core/chains/evm/gas/block_history_estimator_test.go: `.BumpDynamicFee(tests.Context(t), originalFee, maxGasPrice, nil)`
$DIR/core/chains/evm/gas/block_history_estimator_test.go: `.Context(t)`
$DIR/core/chains/evm/gas/block_history_estimator_test.go: `.Run("ignores absurdly large current tip cap", func(t *testing.T) {
gas.SetTipCap(bhe, assets.NewWeiI(1000000000000000))
originalFee := gas.DynamicFee{FeeCap: assets.NewWeiI(100), TipCap: assets.NewWeiI(25)}
fee, err := bhe.BumpDynamicFee(tests.Context(t), originalFee, maxGasPrice, nil)
require.NoError(t, err)
assert.Equal(t, gas.DynamicFee{FeeCap: assets.NewWeiI(250), TipCap: assets.NewWeiI(202)}, fee)
})`
$DIR/core/chains/evm/gas/block_history_estimator_test.go: `.SetTipCap(bhe, assets.NewWeiI(1000000000000000))`
$DIR/core/chains/evm/gas/block_history_estimator_test.go: `.NewWeiI(1000000000000000)`
$DIR/core/chains/evm/gas/block_history_estimator_test.go: `.NewWeiI(100)`
$DIR/core/chains/evm/gas/block_history_estimator_test.go: `.NewWeiI(25)`
$DIR/core/chains/evm/gas/block_history_estimator_test.go: `.BumpDynamicFee(tests.Context(t), originalFee, maxGasPrice, nil)`
$DIR/core/chains/evm/gas/block_history_estimator_test.go: `.Context(t)`
$DIR/core/chains/evm/gas/block_history_estimator_test.go: `.Run("bumped tip cap price > max gas price", func(t *testing.T) {
gas.SetTipCap(bhe, assets.NewWeiI(203))
originalFee := gas.DynamicFee{FeeCap: assets.NewWeiI(100), TipCap: assets.NewWeiI(990000)}
fee, err := bhe.BumpDynamicFee(tests.Context(t), originalFee, maxGasPrice, nil)
require.Error(t, err)
assert.Equal(t, gas.DynamicFee{}, fee)
assert.Contains(t, err.Error(), "bumped tip cap of 1.089 mwei would exceed configured max gas price of 1 mwei (original fee: tip cap 990 kwei, fee cap 100 wei)")
})`
$DIR/core/chains/evm/gas/block_history_estimator_test.go: `.SetTipCap(bhe, assets.NewWeiI(203))`
$DIR/core/chains/evm/gas/block_history_estimator_test.go: `.NewWeiI(203)`
$DIR/core/chains/evm/gas/block_history_estimator_test.go: `.NewWeiI(100)`
$DIR/core/chains/evm/gas/block_history_estimator_test.go: `.NewWeiI(990000)`
$DIR/core/chains/evm/gas/block_history_estimator_test.go: `.BumpDynamicFee(tests.Context(t), originalFee, maxGasPrice, nil)`
$DIR/core/chains/evm/gas/block_history_estimator_test.go: `.Context(t)`
$DIR/core/chains/evm/gas/block_history_estimator_test.go: `.Run("bumped fee cap price > max gas price", func(t *testing.T) {
gas.SetTipCap(bhe, assets.NewWeiI(203))
originalFee := gas.DynamicFee{FeeCap: assets.NewWeiI(990000), TipCap: assets.NewWeiI(25)}
fee, err := bhe.BumpDynamicFee(tests.Context(t), originalFee, maxGasPrice, nil)
require.Error(t, err)
assert.Equal(t, gas.DynamicFee{}, fee)
assert.Contains(t, err.Error(), "bumped fee cap of 1.089 mwei would exceed configured max gas price of 1 mwei (original fee: tip cap 25 wei, fee cap 990 kwei)")
})`
$DIR/core/chains/evm/gas/block_history_estimator_test.go: `.SetTipCap(bhe, assets.NewWeiI(203))`
$DIR/core/chains/evm/gas/block_history_estimator_test.go: `.NewWeiI(203)`
$DIR/core/chains/evm/gas/block_history_estimator_test.go: `.NewWeiI(990000)`
$DIR/core/chains/evm/gas/block_history_estimator_test.go: `.NewWeiI(25)`
$DIR/core/chains/evm/gas/block_history_estimator_test.go: `.BumpDynamicFee(tests.Context(t), originalFee, maxGasPrice, nil)`
$DIR/core/chains/evm/gas/block_history_estimator_test.go: `.Context(t)`
$DIR/core/chains/evm/gas/fixed_price_estimator_test.go: `t.Run("GetLegacyGas returns EvmGasPriceDefault from config", func(t *testing.T) {
config := &gas.MockGasEstimatorConfig{}
l1Oracle := rollupMocks.NewL1Oracle(t)
f := gas.NewFixedPriceEstimator(config, nil, &blockHistoryConfig{}, logger.Test(t), l1Oracle)
config.PriceDefaultF = assets.NewWeiI(42)
config.PriceMaxF = maxGasPrice
gasPrice, gasLimit, err := f.GetLegacyGas(tests.Context(t), nil, 100000, maxGasPrice)
require.NoError(t, err)
assert.Equal(t, 100000, int(gasLimit))
assert.Equal(t, assets.NewWeiI(42), gasPrice)
})`
$DIR/core/chains/evm/gas/fixed_price_estimator_test.go: `config.PriceDefaultF = assets.NewWeiI(42)`
$DIR/core/chains/evm/gas/fixed_price_estimator_test.go: `config.PriceMaxF = maxGasPrice`
$DIR/core/chains/evm/gas/fixed_price_estimator_test.go: `t.Run("GetLegacyGas returns user specified maximum gas price", func(t *testing.T) {
config := &gas.MockGasEstimatorConfig{}
config.PriceDefaultF = assets.NewWeiI(42)
config.PriceMaxF = assets.NewWeiI(35)
l1Oracle := rollupMocks.NewL1Oracle(t)
f := gas.NewFixedPriceEstimator(config, nil, &blockHistoryConfig{}, logger.Test(t), l1Oracle)
gasPrice, gasLimit, err := f.GetLegacyGas(tests.Context(t), nil, 100000, assets.NewWeiI(30))
require.NoError(t, err)
assert.Equal(t, 100000, int(gasLimit))
assert.Equal(t, assets.NewWeiI(30), gasPrice)
})`
$DIR/core/chains/evm/gas/fixed_price_estimator_test.go: `config.PriceDefaultF = assets.NewWeiI(42)`
$DIR/core/chains/evm/gas/fixed_price_estimator_test.go: `config.PriceMaxF = assets.NewWeiI(35)`
$DIR/core/chains/evm/gas/fixed_price_estimator_test.go: `t.Run("GetLegacyGas returns global maximum gas price", func(t *testing.T) {
config := &gas.MockGasEstimatorConfig{}
config.PriceDefaultF = assets.NewWeiI(42)
config.PriceMaxF = assets.NewWeiI(20)
l1Oracle := rollupMocks.NewL1Oracle(t)
f := gas.NewFixedPriceEstimator(config, nil, &blockHistoryConfig{}, logger.Test(t), l1Oracle)
gasPrice, gasLimit, err := f.GetLegacyGas(tests.Context(t), nil, 100000, assets.NewWeiI(30))
require.NoError(t, err)
assert.Equal(t, 100000, int(gasLimit))
assert.Equal(t, assets.NewWeiI(20), gasPrice)
})`
$DIR/core/chains/evm/gas/fixed_price_estimator_test.go: `config.PriceDefaultF = assets.NewWeiI(42)`
$DIR/core/chains/evm/gas/fixed_price_estimator_test.go: `config.PriceMaxF = assets.NewWeiI(20)`
$DIR/core/chains/evm/gas/fixed_price_estimator_test.go: `t.Run("BumpLegacyGas calls BumpLegacyGasPriceOnly", func(t *testing.T) {
config := &gas.MockGasEstimatorConfig{}
config.PriceDefaultF = assets.NewWeiI(42)
config.PriceMaxF = maxGasPrice
config.BumpPercentF = uint16(10)
config.BumpMinF = assets.NewWeiI(150)
l1Oracle := rollupMocks.NewL1Oracle(t)
lggr := logger.TestSugared(t)
f := gas.NewFixedPriceEstimator(config, nil, &blockHistoryConfig{}, lggr, l1Oracle)
gasPrice, gasLimit, err := f.BumpLegacyGas(tests.Context(t), assets.NewWeiI(42), 100000, maxGasPrice, nil)
require.NoError(t, err)
expectedGasPrice, err := gas.BumpLegacyGasPriceOnly(config, lggr, nil, assets.NewWeiI(42), maxGasPrice)
require.NoError(t, err)
assert.Equal(t, 100000, int(gasLimit))
assert.Equal(t, expectedGasPrice, gasPrice)
})`
$DIR/core/chains/evm/gas/fixed_price_estimator_test.go: `config.PriceDefaultF = assets.NewWeiI(42)`
$DIR/core/chains/evm/gas/fixed_price_estimator_test.go: `config.PriceMaxF = maxGasPrice`
$DIR/core/chains/evm/gas/fixed_price_estimator_test.go: `config.BumpPercentF = uint16(10)`
$DIR/core/chains/evm/gas/fixed_price_estimator_test.go: `config.BumpMinF = assets.NewWeiI(150)`
$DIR/core/chains/evm/gas/fixed_price_estimator_test.go: `t.Run("GetDynamicFee returns defaults from config", func(t *testing.T) {
config := &gas.MockGasEstimatorConfig{}
config.PriceMaxF = maxGasPrice
config.TipCapDefaultF = assets.NewWeiI(52)
config.FeeCapDefaultF = assets.NewWeiI(100)
config.BumpThresholdF = uint64(3)
l1Oracle := rollupMocks.NewL1Oracle(t)
lggr := logger.Test(t)
f := gas.NewFixedPriceEstimator(config, nil, &blockHistoryConfig{}, lggr, l1Oracle)
fee, err := f.GetDynamicFee(tests.Context(t), maxGasPrice)
require.NoError(t, err)
assert.Equal(t, assets.NewWeiI(52), fee.TipCap)
assert.Equal(t, assets.NewWeiI(100), fee.FeeCap)
// Gas bumping disabled
config.BumpThresholdF = uint64(0)
fee, err = f.GetDynamicFee(tests.Context(t), maxGasPrice)
require.NoError(t, err)
assert.Equal(t, assets.NewWeiI(52), fee.TipCap)
assert.Equal(t, maxGasPrice, fee.FeeCap)
// override max gas price
fee, err = f.GetDynamicFee(tests.Context(t), assets.NewWeiI(10))
require.NoError(t, err)
assert.Equal(t, assets.NewWeiI(52), fee.TipCap)
assert.Equal(t, assets.NewWeiI(10), fee.FeeCap)
})`
$DIR/core/chains/evm/gas/fixed_price_estimator_test.go: `config.PriceMaxF = maxGasPrice`
$DIR/core/chains/evm/gas/fixed_price_estimator_test.go: `config.TipCapDefaultF = assets.NewWeiI(52)`
$DIR/core/chains/evm/gas/fixed_price_estimator_test.go: `config.FeeCapDefaultF = assets.NewWeiI(100)`
$DIR/core/chains/evm/gas/fixed_price_estimator_test.go: `config.BumpThresholdF = uint64(3)`
$DIR/core/chains/evm/gas/fixed_price_estimator_test.go: `config.BumpThresholdF = uint64(0)`
$DIR/core/chains/evm/gas/fixed_price_estimator_test.go: `fee, err = f.GetDynamicFee(tests.Context(t), maxGasPrice)`
$DIR/core/chains/evm/gas/fixed_price_estimator_test.go: `fee, err = f.GetDynamicFee(tests.Context(t), assets.NewWeiI(10))`
$DIR/core/chains/evm/gas/fixed_price_estimator_test.go: `config.PriceMaxF = maxGasPrice`
$DIR/core/chains/evm/gas/fixed_price_estimator_test.go: `config.TipCapDefaultF = assets.NewWeiI(52)`
$DIR/core/chains/evm/gas/fixed_price_estimator_test.go: `config.BumpMinF = assets.NewWeiI(150)`
$DIR/core/chains/evm/gas/fixed_price_estimator_test.go: `config.BumpPercentF = uint16(10)`
$DIR/core/chains/evm/gas/fixed_price_estimator_test.go: `.NewWeiI(1000000)`
$DIR/core/chains/evm/gas/fixed_price_estimator_test.go: `.Run("GetLegacyGas returns EvmGasPriceDefault from config", func(t *testing.T) {
config := &gas.MockGasEstimatorConfig{}
l1Oracle := rollupMocks.NewL1Oracle(t)
f := gas.NewFixedPriceEstimator(config, nil, &blockHistoryConfig{}, logger.Test(t), l1Oracle)
config.PriceDefaultF = assets.NewWeiI(42)
config.PriceMaxF = maxGasPrice
gasPrice, gasLimit, err := f.GetLegacyGas(tests.Context(t), nil, 100000, maxGasPrice)
require.NoError(t, err)
assert.Equal(t, 100000, int(gasLimit))
assert.Equal(t, assets.NewWeiI(42), gasPrice)
})`
$DIR/core/chains/evm/gas/fixed_price_estimator_test.go: `.NewL1Oracle(t)`
$DIR/core/chains/evm/gas/fixed_price_estimator_test.go: `.NewFixedPriceEstimator(config, nil, &blockHistoryConfig{}, logger.Test(t), l1Oracle)`
$DIR/core/chains/evm/gas/fixed_price_estimator_test.go: `.Test(t)`
$DIR/core/chains/evm/gas/fixed_price_estimator_test.go: `.NewWeiI(42)`
$DIR/core/chains/evm/gas/fixed_price_estimator_test.go: `.GetLegacyGas(tests.Context(t), nil, 100000, maxGasPrice)`
$DIR/core/chains/evm/gas/fixed_price_estimator_test.go: `.Context(t)`
$DIR/core/chains/evm/gas/fixed_price_estimator_test.go: `.Run("GetLegacyGas returns user specified maximum gas price", func(t *testing.T) {
config := &gas.MockGasEstimatorConfig{}
config.PriceDefaultF = assets.NewWeiI(42)
config.PriceMaxF = assets.NewWeiI(35)
l1Oracle := rollupMocks.NewL1Oracle(t)
f := gas.NewFixedPriceEstimator(config, nil, &blockHistoryConfig{}, logger.Test(t), l1Oracle)
gasPrice, gasLimit, err := f.GetLegacyGas(tests.Context(t), nil, 100000, assets.NewWeiI(30))
require.NoError(t, err)
assert.Equal(t, 100000, int(gasLimit))
assert.Equal(t, assets.NewWeiI(30), gasPrice)
})`
$DIR/core/chains/evm/gas/fixed_price_estimator_test.go: `.NewWeiI(42)`
$DIR/core/chains/evm/gas/fixed_price_estimator_test.go: `.NewWeiI(35)`
$DIR/core/chains/evm/gas/fixed_price_estimator_test.go: `.NewL1Oracle(t)`
$DIR/core/chains/evm/gas/fixed_price_estimator_test.go: `.NewFixedPriceEstimator(config, nil, &blockHistoryConfig{}, logger.Test(t), l1Oracle)`
$DIR/core/chains/evm/gas/fixed_price_estimator_test.go: `.Test(t)`
$DIR/core/chains/evm/gas/fixed_price_estimator_test.go: `.GetLegacyGas(tests.Context(t), nil, 100000, assets.NewWeiI(30))`
$DIR/core/chains/evm/gas/fixed_price_estimator_test.go: `.Context(t)`
$DIR/core/chains/evm/gas/fixed_price_estimator_test.go: `.NewWeiI(30)`
$DIR/core/chains/evm/gas/fixed_price_estimator_test.go: `.Run("GetLegacyGas returns global maximum gas price", func(t *testing.T) {
config := &gas.MockGasEstimatorConfig{}
config.PriceDefaultF = assets.NewWeiI(42)
config.PriceMaxF = assets.NewWeiI(20)
l1Oracle := rollupMocks.NewL1Oracle(t)
f := gas.NewFixedPriceEstimator(config, nil, &blockHistoryConfig{}, logger.Test(t), l1Oracle)
gasPrice, gasLimit, err := f.GetLegacyGas(tests.Context(t), nil, 100000, assets.NewWeiI(30))
require.NoError(t, err)
assert.Equal(t, 100000, int(gasLimit))
assert.Equal(t, assets.NewWeiI(20), gasPrice)
})`
$DIR/core/chains/evm/gas/fixed_price_estimator_test.go: `.NewWeiI(42)`
$DIR/core/chains/evm/gas/fixed_price_estimator_test.go: `.NewWeiI(20)`
$DIR/core/chains/evm/gas/fixed_price_estimator_test.go: `.NewL1Oracle(t)`
$DIR/core/chains/evm/gas/fixed_price_estimator_test.go: `.NewFixedPriceEstimator(config, nil, &blockHistoryConfig{}, logger.Test(t), l1Oracle)`
$DIR/core/chains/evm/gas/fixed_price_estimator_test.go: `.Test(t)`
$DIR/core/chains/evm/gas/fixed_price_estimator_test.go: `.GetLegacyGas(tests.Context(t), nil, 100000, assets.NewWeiI(30))`
$DIR/core/chains/evm/gas/fixed_price_estimator_test.go: `.Context(t)`
$DIR/core/chains/evm/gas/fixed_price_estimator_test.go: `.NewWeiI(30)`
$DIR/core/chains/evm/gas/fixed_price_estimator_test.go: `.Run("BumpLegacyGas calls BumpLegacyGasPriceOnly", func(t *testing.T) {
config := &gas.MockGasEstimatorConfig{}
config.PriceDefaultF = assets.NewWeiI(42)
config.PriceMaxF = maxGasPrice
config.BumpPercentF = uint16(10)
config.BumpMinF = assets.NewWeiI(150)
l1Oracle := rollupMocks.NewL1Oracle(t)
lggr := logger.TestSugared(t)
f := gas.NewFixedPriceEstimator(config, nil, &blockHistoryConfig{}, lggr, l1Oracle)
gasPrice, gasLimit, err := f.BumpLegacyGas(tests.Context(t), assets.NewWeiI(42), 100000, maxGasPrice, nil)
require.NoError(t, err)
expectedGasPrice, err := gas.BumpLegacyGasPriceOnly(config, lggr, nil, assets.NewWeiI(42), maxGasPrice)
require.NoError(t, err)
assert.Equal(t, 100000, int(gasLimit))
assert.Equal(t, expectedGasPrice, gasPrice)
})`
$DIR/core/chains/evm/gas/fixed_price_estimator_test.go: `.NewWeiI(42)`
$DIR/core/chains/evm/gas/fixed_price_estimator_test.go: `.NewWeiI(150)`
$DIR/core/chains/evm/gas/fixed_price_estimator_test.go: `.NewL1Oracle(t)`
$DIR/core/chains/evm/gas/fixed_price_estimator_test.go: `.TestSugared(t)`
$DIR/core/chains/evm/gas/fixed_price_estimator_test.go: `.NewFixedPriceEstimator(config, nil, &blockHistoryConfig{}, lggr, l1Oracle)`
$DIR/core/chains/evm/gas/fixed_price_estimator_test.go: `.BumpLegacyGas(tests.Context(t), assets.NewWeiI(42), 100000, maxGasPrice, nil)`
$DIR/core/chains/evm/gas/fixed_price_estimator_test.go: `.Context(t)`
$DIR/core/chains/evm/gas/fixed_price_estimator_test.go: `.NewWeiI(42)`
$DIR/core/chains/evm/gas/fixed_price_estimator_test.go: `.BumpLegacyGasPriceOnly(config, lggr, nil, assets.NewWeiI(42), maxGasPrice)`
$DIR/core/chains/evm/gas/fixed_price_estimator_test.go: `.NewWeiI(42)`
$DIR/core/chains/evm/gas/fixed_price_estimator_test.go: `.Run("GetDynamicFee returns defaults from config", func(t *testing.T) {
config := &gas.MockGasEstimatorConfig{}
config.PriceMaxF = maxGasPrice
config.TipCapDefaultF = assets.NewWeiI(52)
config.FeeCapDefaultF = assets.NewWeiI(100)
config.BumpThresholdF = uint64(3)
l1Oracle := rollupMocks.NewL1Oracle(t)
lggr := logger.Test(t)
f := gas.NewFixedPriceEstimator(config, nil, &blockHistoryConfig{}, lggr, l1Oracle)
fee, err := f.GetDynamicFee(tests.Context(t), maxGasPrice)
require.NoError(t, err)
assert.Equal(t, assets.NewWeiI(52), fee.TipCap)
assert.Equal(t, assets.NewWeiI(100), fee.FeeCap)
// Gas bumping disabled
config.BumpThresholdF = uint64(0)
fee, err = f.GetDynamicFee(tests.Context(t), maxGasPrice)
require.NoError(t, err)
assert.Equal(t, assets.NewWeiI(52), fee.TipCap)
assert.Equal(t, maxGasPrice, fee.FeeCap)
// override max gas price
fee, err = f.GetDynamicFee(tests.Context(t), assets.NewWeiI(10))
require.NoError(t, err)
assert.Equal(t, assets.NewWeiI(52), fee.TipCap)
assert.Equal(t, assets.NewWeiI(10), fee.FeeCap)
})`
$DIR/core/chains/evm/gas/fixed_price_estimator_test.go: `.NewWeiI(52)`
$DIR/core/chains/evm/gas/fixed_price_estimator_test.go: `.NewWeiI(100)`
$DIR/core/chains/evm/gas/fixed_price_estimator_test.go: `.NewL1Oracle(t)`
$DIR/core/chains/evm/gas/fixed_price_estimator_test.go: `.Test(t)`
$DIR/core/chains/evm/gas/fixed_price_estimator_test.go: `.NewFixedPriceEstimator(config, nil, &blockHistoryConfig{}, lggr, l1Oracle)`
$DIR/core/chains/evm/gas/fixed_price_estimator_test.go: `.GetDynamicFee(tests.Context(t), maxGasPrice)`
$DIR/core/chains/evm/gas/fixed_price_estimator_test.go: `.Context(t)`
$DIR/core/chains/evm/gas/fixed_price_estimator_test.go: `.GetDynamicFee(tests.Context(t), maxGasPrice)`
$DIR/core/chains/evm/gas/fixed_price_estimator_test.go: `.Context(t)`
$DIR/core/chains/evm/gas/fixed_price_estimator_test.go: `.GetDynamicFee(tests.Context(t), assets.NewWeiI(10))`
$DIR/core/chains/evm/gas/fixed_price_estimator_test.go: `.Context(t)`
$DIR/core/chains/evm/gas/fixed_price_estimator_test.go: `.NewWeiI(10)`
$DIR/core/chains/evm/gas/fixed_price_estimator_test.go: `.NewWeiI(52)`
$DIR/core/chains/evm/gas/fixed_price_estimator_test.go: `.NewWeiI(150)`
$DIR/core/chains/evm/gas/fixed_price_estimator_test.go: `.NewL1Oracle(t)`
$DIR/core/chains/evm/gas/fixed_price_estimator_test.go: `.TestSugared(t)`
$DIR/core/chains/evm/gas/fixed_price_estimator_test.go: `.NewFixedPriceEstimator(config, nil, &blockHistoryConfig{}, lggr, l1Oracle)`
$DIR/core/chains/evm/gas/fixed_price_estimator_test.go: `.NewWeiI(100)`
$DIR/core/chains/evm/gas/fixed_price_estimator_test.go: `.NewWeiI(25)`
$DIR/core/chains/evm/gas/fixed_price_estimator_test.go: `.BumpDynamicFee(tests.Context(t), originalFee, maxGasPrice, nil)`
$DIR/core/chains/evm/gas/fixed_price_estimator_test.go: `.Context(t)`
$DIR/core/chains/evm/gas/fixed_price_estimator_test.go: `.BumpDynamicFeeOnly(config, 0, lggr, nil, nil, originalFee, maxGasPrice)`
$DIR/core/chains/evm/gas/gas_test.go: `t.Run(test.name, func(t *testing.T) {
cfg := &gas.MockGasEstimatorConfig{}
cfg.BumpPercentF = test.bumpPercent
cfg.BumpMinF = test.bumpMin
cfg.PriceMaxF = test.priceMax
cfg.LimitMultiplierF = test.limitMultiplierPercent
actual, err := gas.BumpLegacyGasPriceOnly(cfg, logger.TestSugared(t), test.currentGasPrice, test.originalGasPrice, test.priceMax)
require.NoError(t, err)
if actual.Cmp(test.expectedGasPrice) != 0 {
t.Fatalf("Expected %s but got %s", test.expectedGasPrice.String(), actual.String())
}
})`
$DIR/core/chains/evm/gas/gas_test.go: `cfg.BumpPercentF = test.bumpPercent`
$DIR/core/chains/evm/gas/gas_test.go: `cfg.BumpMinF = test.bumpMin`
$DIR/core/chains/evm/gas/gas_test.go: `cfg.PriceMaxF = test.priceMax`
$DIR/core/chains/evm/gas/gas_test.go: `cfg.LimitMultiplierF = test.limitMultiplierPercent`
$DIR/core/chains/evm/gas/gas_test.go: `cfg.BumpPercentF = uint16(50)`
$DIR/core/chains/evm/gas/gas_test.go: `cfg.BumpMinF = assets.NewWeiI(5000000000)`
$DIR/core/chains/evm/gas/gas_test.go: `cfg.PriceMaxF = priceMax`
$DIR/core/chains/evm/gas/gas_test.go: `cfg.BumpPercentF = uint16(0)`
$DIR/core/chains/evm/gas/gas_test.go: `cfg.BumpMinF = assets.NewWeiI(0)`
$DIR/core/chains/evm/gas/gas_test.go: `cfg.PriceMaxF = priceMax`
$DIR/core/chains/evm/gas/gas_test.go: `originalGasPrice = toWei("4e10")`
$DIR/core/chains/evm/gas/gas_test.go: `_, err = gas.BumpLegacyGasPriceOnly(cfg, lggr, nil, originalGasPrice, priceMax)`
$DIR/core/chains/evm/gas/gas_test.go: `t.Run(test.name, func(t *testing.T) {
cfg := &gas.MockGasEstimatorConfig{}
cfg.BumpPercentF = test.bumpPercent
cfg.TipCapDefaultF = test.tipCapDefault
cfg.BumpMinF = test.bumpMin
cfg.PriceMaxF = test.priceMax
cfg.LimitMultiplierF = test.limitMultiplierPercent
bufferBlocks := uint16(4)
actual, err := gas.BumpDynamicFeeOnly(cfg, bufferBlocks, logger.TestSugared(t), test.currentTipCap, test.currentBaseFee, test.originalFee, test.priceMax)
require.NoError(t, err)
if actual.TipCap.Cmp(test.expectedFee.TipCap) != 0 {
t.Fatalf("TipCap not equal, expected %s but got %s", test.expectedFee.TipCap.String(), actual.TipCap.String())
}
if actual.FeeCap.Cmp(test.expectedFee.FeeCap) != 0 {
t.Fatalf("FeeCap not equal, expected %s but got %s", test.expectedFee.FeeCap.String(), actual.FeeCap.String())
}
})`
$DIR/core/chains/evm/gas/gas_test.go: `cfg.BumpPercentF = test.bumpPercent`
$DIR/core/chains/evm/gas/gas_test.go: `cfg.TipCapDefaultF = test.tipCapDefault`
$DIR/core/chains/evm/gas/gas_test.go: `cfg.BumpMinF = test.bumpMin`
$DIR/core/chains/evm/gas/gas_test.go: `cfg.PriceMaxF = test.priceMax`
$DIR/core/chains/evm/gas/gas_test.go: `cfg.LimitMultiplierF = test.limitMultiplierPercent`
$DIR/core/chains/evm/gas/gas_test.go: `cfg.BumpPercentF = uint16(50)`
$DIR/core/chains/evm/gas/gas_test.go: `cfg.TipCapDefaultF = assets.GWei(0)`
$DIR/core/chains/evm/gas/gas_test.go: `cfg.BumpMinF = assets.NewWeiI(5000000000)`
$DIR/core/chains/evm/gas/gas_test.go: `cfg.PriceMaxF = priceMax`
$DIR/core/chains/evm/gas/gas_test.go: `t.Run("tip cap hits max", func(t *testing.T) {
originalFee := gas.DynamicFee{TipCap: assets.GWei(30), FeeCap: assets.GWei(100)}
_, err := gas.BumpDynamicFeeOnly(cfg, 0, logger.TestSugared(t), nil, nil, originalFee, priceMax)
require.Error(t, err)
require.Contains(t, err.Error(), "bumped tip cap of 45 gwei would exceed configured max gas price of 40 gwei (original fee: tip cap 30 gwei, fee cap 100 gwei)")
})`
$DIR/core/chains/evm/gas/gas_test.go: `.Run(test.name, func(t *testing.T) {
cfg := &gas.MockGasEstimatorConfig{}
cfg.BumpPercentF = test.bumpPercent
cfg.BumpMinF = test.bumpMin
cfg.PriceMaxF = test.priceMax
cfg.LimitMultiplierF = test.limitMultiplierPercent
actual, err := gas.BumpLegacyGasPriceOnly(cfg, logger.TestSugared(t), test.currentGasPrice, test.originalGasPrice, test.priceMax)
require.NoError(t, err)
if actual.Cmp(test.expectedGasPrice) != 0 {
t.Fatalf("Expected %s but got %s", test.expectedGasPrice.String(), actual.String())
}
})`
$DIR/core/chains/evm/gas/gas_test.go: `.BumpLegacyGasPriceOnly(cfg, logger.TestSugared(t), test.currentGasPrice, test.originalGasPrice, test.priceMax)`
$DIR/core/chains/evm/gas/gas_test.go: `.TestSugared(t)`
$DIR/core/chains/evm/gas/gas_test.go: `.Cmp(test.expectedGasPrice)`
$DIR/core/chains/evm/gas/gas_test.go: `.GWei(40)`
$DIR/core/chains/evm/gas/gas_test.go: `.NewWeiI(5000000000)`
$DIR/core/chains/evm/gas/gas_test.go: `.BumpLegacyGasPriceOnly(cfg, logger.TestSugared(t), nil, originalGasPrice, priceMax)`
$DIR/core/chains/evm/gas/gas_test.go: `.TestSugared(t)`
$DIR/core/chains/evm/gas/gas_test.go: `.GWei(40)`
$DIR/core/chains/evm/gas/gas_test.go: `.TestSugared(t)`
$DIR/core/chains/evm/gas/gas_test.go: `.NewWeiI(0)`
$DIR/core/chains/evm/gas/gas_test.go: `.BumpLegacyGasPriceOnly(cfg, lggr, nil, originalGasPrice, priceMax)`
$DIR/core/chains/evm/gas/gas_test.go: `.BumpLegacyGasPriceOnly(cfg, lggr, nil, originalGasPrice, priceMax)`
$DIR/core/chains/evm/gas/gas_test.go: `.GWei(30)`
$DIR/core/chains/evm/gas/gas_test.go: `.GWei(4000)`
$DIR/core/chains/evm/gas/gas_test.go: `.GWei(20)`
$DIR/core/chains/evm/gas/gas_test.go: `.GWei(5000)`
$DIR/core/chains/evm/gas/gas_test.go: `.GWei(36)`
$DIR/core/chains/evm/gas/gas_test.go: `.GWei(4800)`
$DIR/core/chains/evm/gas/gas_test.go: `.GWei(30)`
$DIR/core/chains/evm/gas/gas_test.go: `.GWei(100)`
$DIR/core/chains/evm/gas/gas_test.go: `.GWei(20)`
$DIR/core/chains/evm/gas/gas_test.go: `.GWei(39)`
$DIR/core/chains/evm/gas/gas_test.go: `.GWei(130)`
$DIR/core/chains/evm/gas/gas_test.go: `.GWei(30)`
$DIR/core/chains/evm/gas/gas_test.go: `.GWei(400)`
$DIR/core/chains/evm/gas/gas_test.go: `.GWei(20)`
$DIR/core/chains/evm/gas/gas_test.go: `.GWei(38)`
$DIR/core/chains/evm/gas/gas_test.go: `.GWei(480)`
$DIR/core/chains/evm/gas/gas_test.go: `.GWei(30)`
$DIR/core/chains/evm/gas/gas_test.go: `.GWei(400)`
$DIR/core/chains/evm/gas/gas_test.go: `.GWei(40)`
$DIR/core/chains/evm/gas/gas_test.go: `.GWei(48)`
$DIR/core/chains/evm/gas/gas_test.go: `.GWei(480)`
$DIR/core/chains/evm/gas/gas_test.go: `.GWei(48)`
$DIR/core/chains/evm/gas/gas_test.go: `.GWei(30)`
$DIR/core/chains/evm/gas/gas_test.go: `.GWei(400)`
$DIR/core/chains/evm/gas/gas_test.go: `.GWei(40)`
$DIR/core/chains/evm/gas/gas_test.go: `.GWei(49)`
$DIR/core/chains/evm/gas/gas_test.go: `.GWei(480)`
$DIR/core/chains/evm/gas/gas_test.go: `.GWei(50)`
$DIR/core/chains/evm/gas/gas_test.go: `.GWei(30)`
$DIR/core/chains/evm/gas/gas_test.go: `.GWei(400)`
$DIR/core/chains/evm/gas/gas_test.go: `.GWei(40)`
$DIR/core/chains/evm/gas/gas_test.go: `.GWei(50)`
$DIR/core/chains/evm/gas/gas_test.go: `.GWei(480)`
$DIR/core/chains/evm/gas/gas_test.go: `.GWei(10)`
$DIR/core/chains/evm/gas/gas_test.go: `.GWei(20)`
$DIR/core/chains/evm/gas/gas_test.go: `.GWei(5)`
$DIR/core/chains/evm/gas/gas_test.go: `.GWei(50)`
$DIR/core/chains/evm/gas/gas_test.go: `.GWei(60)`
$DIR/core/chains/evm/gas/gas_test.go: `.GWei(70)`
$DIR/core/chains/evm/gas/gas_test.go: `.GWei(20)`
$DIR/core/chains/evm/gas/gas_test.go: `.GWei(100)`
$DIR/core/chains/evm/gas/gas_test.go: `.GWei(30)`
$DIR/core/chains/evm/gas/gas_test.go: `.GWei(400)`
$DIR/core/chains/evm/gas/gas_test.go: `.GWei(20)`
$DIR/core/chains/evm/gas/gas_test.go: `.GWei(5000)`
$DIR/core/chains/evm/gas/gas_test.go: `.GWei(36)`
$DIR/core/chains/evm/gas/gas_test.go: `.GWei(480)`
$DIR/core/chains/evm/gas/gas_test.go: `.GWei(20)`
$DIR/core/chains/evm/gas/gas_test.go: `.GWei(1000)`
$DIR/core/chains/evm/gas/gas_test.go: `.GWei(30)`
$DIR/core/chains/evm/gas/gas_test.go: `.GWei(400)`
$DIR/core/chains/evm/gas/gas_test.go: `.GWei(20)`
$DIR/core/chains/evm/gas/gas_test.go: `.GWei(5000)`
$DIR/core/chains/evm/gas/gas_test.go: `.GWei(36)`
$DIR/core/chains/evm/gas/gas_test.go: `.NewWeiI(1637806640625)`
$DIR/core/chains/evm/gas/gas_test.go: `.Run(test.name, func(t *testing.T) {
cfg := &gas.MockGasEstimatorConfig{}
cfg.BumpPercentF = test.bumpPercent
cfg.TipCapDefaultF = test.tipCapDefault
cfg.BumpMinF = test.bumpMin
cfg.PriceMaxF = test.priceMax
cfg.LimitMultiplierF = test.limitMultiplierPercent
bufferBlocks := uint16(4)
actual, err := gas.BumpDynamicFeeOnly(cfg, bufferBlocks, logger.TestSugared(t), test.currentTipCap, test.currentBaseFee, test.originalFee, test.priceMax)
require.NoError(t, err)
if actual.TipCap.Cmp(test.expectedFee.TipCap) != 0 {
t.Fatalf("TipCap not equal, expected %s but got %s", test.expectedFee.TipCap.String(), actual.TipCap.String())
}
if actual.FeeCap.Cmp(test.expectedFee.FeeCap) != 0 {
t.Fatalf("FeeCap not equal, expected %s but got %s", test.expectedFee.FeeCap.String(), actual.FeeCap.String())
}
})`
$DIR/core/chains/evm/gas/gas_test.go: `.BumpDynamicFeeOnly(cfg, bufferBlocks, logger.TestSugared(t), test.currentTipCap, test.currentBaseFee, test.originalFee, test.priceMax)`
$DIR/core/chains/evm/gas/gas_test.go: `.TestSugared(t)`
$DIR/core/chains/evm/gas/gas_test.go: `.TipCap.Cmp(test.expectedFee.TipCap)`
$DIR/core/chains/evm/gas/gas_test.go: `.FeeCap.Cmp(test.expectedFee.FeeCap)`
$DIR/core/chains/evm/gas/gas_test.go: `.GWei(40)`
$DIR/core/chains/evm/gas/gas_test.go: `.GWei(0)`
$DIR/core/chains/evm/gas/gas_test.go: `.NewWeiI(5000000000)`
$DIR/core/chains/evm/gas/gas_test.go: `.Run("tip cap hits max", func(t *testing.T) {
originalFee := gas.DynamicFee{TipCap: assets.GWei(30), FeeCap: assets.GWei(100)}
_, err := gas.BumpDynamicFeeOnly(cfg, 0, logger.TestSugared(t), nil, nil, originalFee, priceMax)
require.Error(t, err)
require.Contains(t, err.Error(), "bumped tip cap of 45 gwei would exceed configured max gas price of 40 gwei (original fee: tip cap 30 gwei, fee cap 100 gwei)")
})`
$DIR/core/chains/evm/gas/gas_test.go: `.GWei(30)`
$DIR/core/chains/evm/gas/gas_test.go: `.GWei(100)`
$DIR/core/chains/evm/gas/gas_test.go: `.BumpDynamicFeeOnly(cfg, 0, logger.TestSugared(t), nil, nil, originalFee, priceMax)`
$DIR/core/chains/evm/gas/gas_test.go: `.TestSugared(t)`
$DIR/core/chains/evm/gas/gas_test.go: `.GWei(10)`
$DIR/core/chains/evm/gas/gas_test.go: `.GWei(100)`
$DIR/core/chains/evm/gas/gas_test.go: `.BumpDynamicFeeOnly(cfg, 0, logger.TestSugared(t), nil, nil, originalFee, priceMax)`
$DIR/core/chains/evm/gas/gas_test.go: `.TestSugared(t)`
$DIR/core/chains/evm/gas/models_test.go: `est.On("GetDynamicFee", mock.Anything, mock.Anything).
Return(dynamicFee, nil).Twice()`
$DIR/core/chains/evm/gas/models_test.go: `est.On("GetLegacyGas", mock.Anything, mock.Anything, mock.Anything, mock.Anything).
Return(legacyFee, gasLimit, nil).Twice()`
$DIR/core/chains/evm/gas/models_test.go: `est.On("BumpDynamicFee", mock.Anything, mock.Anything, mock.Anything, mock.Anything).
Return(dynamicFee, nil).Once()`
$DIR/core/chains/evm/gas/models_test.go: `est.On("BumpLegacyGas", mock.Anything, mock.Anything, mock.Anything, mock.Anything, mock.Anything).
Return(legacyFee, gasLimit, nil).Once()`
$DIR/core/chains/evm/gas/models_test.go: `geCfg.LimitMultiplierF = limitMultiplier`
$DIR/core/chains/evm/gas/models_test.go: `t.Run("L1Oracle", func(t *testing.T) {
lggr := logger.Test(t)
evmEstimator := mocks.NewEvmEstimator(t)
evmEstimator.On("L1Oracle").Return(nil).Once()
getEst := func(logger.Logger) gas.EvmEstimator { return evmEstimator }
// expect nil
estimator := gas.NewEvmFeeEstimator(lggr, getEst, false, nil)
l1Oracle := estimator.L1Oracle()
assert.Nil(t, l1Oracle)
// expect l1Oracle
oracle := rollups.NewL1GasOracle(lggr, nil, chaintype.ChainOptimismBedrock)
// cast oracle to L1Oracle interface
estimator = gas.NewEvmFeeEstimator(lggr, getEst, false, geCfg)
evmEstimator.On("L1Oracle").Return(oracle).Once()
l1Oracle = estimator.L1Oracle()
assert.Equal(t, oracle, l1Oracle)
})`
$DIR/core/chains/evm/gas/models_test.go: `evmEstimator.On("L1Oracle").Return(nil).Once()`
$DIR/core/chains/evm/gas/models_test.go: `estimator = gas.NewEvmFeeEstimator(lggr, getEst, false, geCfg)`
$DIR/core/chains/evm/gas/models_test.go: `evmEstimator.On("L1Oracle").Return(oracle).Once()`
$DIR/core/chains/evm/gas/models_test.go: `l1Oracle = estimator.L1Oracle()`
$DIR/core/chains/evm/gas/models_test.go: `t.Run("GetFee", func(t *testing.T) {
lggr := logger.Test(t)
// expect legacy fee data
dynamicFees := false
estimator := gas.NewEvmFeeEstimator(lggr, getRootEst, dynamicFees, geCfg)
fee, max, err := estimator.GetFee(ctx, nil, 0, nil)
require.NoError(t, err)
assert.Equal(t, uint64(float32(gasLimit)*limitMultiplier), max)
assert.True(t, legacyFee.Equal(fee.Legacy))
assert.Nil(t, fee.DynamicTipCap)
assert.Nil(t, fee.DynamicFeeCap)
// expect dynamic fee data
dynamicFees = true
estimator = gas.NewEvmFeeEstimator(lggr, getRootEst, dynamicFees, geCfg)
fee, max, err = estimator.GetFee(ctx, nil, gasLimit, nil)
require.NoError(t, err)
assert.Equal(t, uint64(float32(gasLimit)*limitMultiplier), max)
assert.True(t, dynamicFee.FeeCap.Equal(fee.DynamicFeeCap))
assert.True(t, dynamicFee.TipCap.Equal(fee.DynamicTipCap))
assert.Nil(t, fee.Legacy)
})`
$DIR/core/chains/evm/gas/models_test.go: `dynamicFees = true`
$DIR/core/chains/evm/gas/models_test.go: `estimator = gas.NewEvmFeeEstimator(lggr, getRootEst, dynamicFees, geCfg)`
$DIR/core/chains/evm/gas/models_test.go: `fee, max, err = estimator.GetFee(ctx, nil, gasLimit, nil)`
$DIR/core/chains/evm/gas/models_test.go: `t.Run("BumpFee", func(t *testing.T) {
lggr := logger.Test(t)
dynamicFees := false
estimator := gas.NewEvmFeeEstimator(lggr, getRootEst, dynamicFees, geCfg)
// expect legacy fee data
fee, max, err := estimator.BumpFee(ctx, gas.EvmFee{Legacy: assets.NewWeiI(0)}, 0, nil, nil)
require.NoError(t, err)
assert.Equal(t, uint64(float32(gasLimit)*limitMultiplier), max)
assert.True(t, legacyFee.Equal(fee.Legacy))
assert.Nil(t, fee.DynamicTipCap)
assert.Nil(t, fee.DynamicFeeCap)
// expect dynamic fee data
fee, max, err = estimator.BumpFee(ctx, gas.EvmFee{
DynamicFeeCap: assets.NewWeiI(0),
DynamicTipCap: assets.NewWeiI(0),
}, gasLimit, nil, nil)
require.NoError(t, err)
assert.Equal(t, uint64(float32(gasLimit)*limitMultiplier), max)
assert.True(t, dynamicFee.FeeCap.Equal(fee.DynamicFeeCap))
assert.True(t, dynamicFee.TipCap.Equal(fee.DynamicTipCap))
assert.Nil(t, fee.Legacy)
// expect error
_, _, err = estimator.BumpFee(ctx, gas.EvmFee{}, 0, nil, nil)
assert.Error(t, err)
_, _, err = estimator.BumpFee(ctx, gas.EvmFee{
Legacy: legacyFee,
DynamicFeeCap: dynamicFee.FeeCap,
DynamicTipCap: dynamicFee.TipCap,
}, 0, nil, nil)
assert.Error(t, err)
})`
$DIR/core/chains/evm/gas/models_test.go: `fee, max, err = estimator.BumpFee(ctx, gas.EvmFee{
DynamicFeeCap: assets.NewWeiI(0),
DynamicTipCap: assets.NewWeiI(0),
}, gasLimit, nil, nil)`
$DIR/core/chains/evm/gas/models_test.go: `_, _, err = estimator.BumpFee(ctx, gas.EvmFee{}, 0, nil, nil)`
$DIR/core/chains/evm/gas/models_test.go: `_, _, err = estimator.BumpFee(ctx, gas.EvmFee{
Legacy: legacyFee,
DynamicFeeCap: dynamicFee.FeeCap,
DynamicTipCap: dynamicFee.TipCap,
}, 0, nil, nil)`
$DIR/core/chains/evm/gas/models_test.go: `t.Run("GetMaxCost", func(t *testing.T) {
lggr := logger.Test(t)
val := assets.NewEthValue(1)
// expect legacy fee data
dynamicFees := false
estimator := gas.NewEvmFeeEstimator(lggr, getRootEst, dynamicFees, geCfg)
total, err := estimator.GetMaxCost(ctx, val, nil, gasLimit, nil)
require.NoError(t, err)
fee := new(big.Int).Mul(legacyFee.ToInt(), big.NewInt(int64(gasLimit)))
fee, _ = new(big.Float).Mul(new(big.Float).SetInt(fee), big.NewFloat(float64(limitMultiplier))).Int(nil)
assert.Equal(t, new(big.Int).Add(val.ToInt(), fee), total)
// expect dynamic fee data
dynamicFees = true
estimator = gas.NewEvmFeeEstimator(lggr, getRootEst, dynamicFees, geCfg)
total, err = estimator.GetMaxCost(ctx, val, nil, gasLimit, nil)
require.NoError(t, err)
fee = new(big.Int).Mul(dynamicFee.FeeCap.ToInt(), big.NewInt(int64(gasLimit)))
fee, _ = new(big.Float).Mul(new(big.Float).SetInt(fee), big.NewFloat(float64(limitMultiplier))).Int(nil)
assert.Equal(t, new(big.Int).Add(val.ToInt(), fee), total)
})`
$DIR/core/chains/evm/gas/models_test.go: `fee, _ = new(big.Float).Mul(new(big.Float).SetInt(fee), big.NewFloat(float64(limitMultiplier))).Int(nil)`
$DIR/core/chains/evm/gas/models_test.go: `dynamicFees = true`
$DIR/core/chains/evm/gas/models_test.go: `estimator = gas.NewEvmFeeEstimator(lggr, getRootEst, dynamicFees, geCfg)`
$DIR/core/chains/evm/gas/models_test.go: `total, err = estimator.GetMaxCost(ctx, val, nil, gasLimit, nil)`
$DIR/core/chains/evm/gas/models_test.go: `fee = new(big.Int).Mul(dynamicFee.FeeCap.ToInt(), big.NewInt(int64(gasLimit)))`
$DIR/core/chains/evm/gas/models_test.go: `fee, _ = new(big.Float).Mul(new(big.Float).SetInt(fee), big.NewFloat(float64(limitMultiplier))).Int(nil)`
$DIR/core/chains/evm/gas/models_test.go: `t.Run("Name", func(t *testing.T) {
lggr := logger.Test(t)
evmEstimator := mocks.NewEvmEstimator(t)
evmEstimator.On("Name").Return(mockEvmEstimatorName, nil).Once()
estimator := gas.NewEvmFeeEstimator(lggr, func(logger.Logger) gas.EvmEstimator {
return evmEstimator
}, false, geCfg)
require.Equal(t, mockEstimatorName, estimator.Name())
require.Equal(t, mockEvmEstimatorName, evmEstimator.Name())
})`
$DIR/core/chains/evm/gas/models_test.go: `evmEstimator.On("Name").Return(mockEvmEstimatorName, nil).Once()`
$DIR/core/chains/evm/gas/models_test.go: `t.Run("Start and stop calls both EVM estimator and L1Oracle", func(t *testing.T) {
lggr := logger.Test(t)
oracle := rollupMocks.NewL1Oracle(t)
evmEstimator := mocks.NewEvmEstimator(t)
evmEstimator.On("Start", mock.Anything).Return(nil).Twice()
evmEstimator.On("Close").Return(nil).Twice()
oracle.On("Start", mock.Anything).Return(nil).Once()
oracle.On("Close").Return(nil).Once()
getEst := func(logger.Logger) gas.EvmEstimator { return evmEstimator }
evmEstimator.On("L1Oracle", mock.Anything).Return(nil).Twice()
estimator := gas.NewEvmFeeEstimator(lggr, getEst, false, geCfg)
err := estimator.Start(ctx)
require.NoError(t, err)
err = estimator.Close()
require.NoError(t, err)
evmEstimator.On("L1Oracle", mock.Anything).Return(oracle).Twice()
estimator = gas.NewEvmFeeEstimator(lggr, getEst, false, geCfg)
err = estimator.Start(ctx)
require.NoError(t, err)
err = estimator.Close()
require.NoError(t, err)
})`
$DIR/core/chains/evm/gas/models_test.go: `evmEstimator.On("Start", mock.Anything).Return(nil).Twice()`
$DIR/core/chains/evm/gas/models_test.go: `evmEstimator.On("Close").Return(nil).Twice()`
$DIR/core/chains/evm/gas/models_test.go: `oracle.On("Start", mock.Anything).Return(nil).Once()`
$DIR/core/chains/evm/gas/models_test.go: `oracle.On("Close").Return(nil).Once()`
$DIR/core/chains/evm/gas/models_test.go: `evmEstimator.On("L1Oracle", mock.Anything).Return(nil).Twice()`
$DIR/core/chains/evm/gas/models_test.go: `err = estimator.Close()`
$DIR/core/chains/evm/gas/models_test.go: `evmEstimator.On("L1Oracle", mock.Anything).Return(oracle).Twice()`
$DIR/core/chains/evm/gas/models_test.go: `estimator = gas.NewEvmFeeEstimator(lggr, getEst, false, geCfg)`
$DIR/core/chains/evm/gas/models_test.go: `err = estimator.Start(ctx)`
$DIR/core/chains/evm/gas/models_test.go: `err = estimator.Close()`
$DIR/core/chains/evm/gas/models_test.go: `t.Run("Read calls both EVM estimator and L1Oracle", func(t *testing.T) {
lggr := logger.Test(t)
evmEstimator := mocks.NewEvmEstimator(t)
oracle := rollupMocks.NewL1Oracle(t)
evmEstimator.On("L1Oracle").Return(oracle).Twice()
evmEstimator.On("Ready").Return(nil).Twice()
oracle.On("Ready").Return(nil).Twice()
getEst := func(logger.Logger) gas.EvmEstimator { return evmEstimator }
estimator := gas.NewEvmFeeEstimator(lggr, getEst, false, geCfg)
err := estimator.Ready()
require.NoError(t, err)
estimator = gas.NewEvmFeeEstimator(lggr, getEst, false, geCfg)
err = estimator.Ready()
require.NoError(t, err)
})`
$DIR/core/chains/evm/gas/models_test.go: `evmEstimator.On("L1Oracle").Return(oracle).Twice()`
$DIR/core/chains/evm/gas/models_test.go: `evmEstimator.On("Ready").Return(nil).Twice()`
$DIR/core/chains/evm/gas/models_test.go: `oracle.On("Ready").Return(nil).Twice()`
$DIR/core/chains/evm/gas/models_test.go: `estimator = gas.NewEvmFeeEstimator(lggr, getEst, false, geCfg)`
$DIR/core/chains/evm/gas/models_test.go: `err = estimator.Ready()`
$DIR/core/chains/evm/gas/models_test.go: `evmEstimator.On("L1Oracle").Return(nil).Once()`
$DIR/core/chains/evm/gas/models_test.go: `evmEstimator.On("HealthReport").Return(map[string]error{evmEstimatorKey: evmEstimatorError}).Twice()`
$DIR/core/chains/evm/gas/models_test.go: `oracle.On("HealthReport").Return(map[string]error{oracleKey: oracleError}).Once()`
$DIR/core/chains/evm/gas/models_test.go: `evmEstimator.On("L1Oracle").Return(oracle).Once()`
$DIR/core/chains/evm/gas/models_test.go: `estimator = gas.NewEvmFeeEstimator(lggr, getEst, false, geCfg)`
$DIR/core/chains/evm/gas/models_test.go: `report = estimator.HealthReport()`
$DIR/core/chains/evm/gas/models_test.go: `.Context(t)`
$DIR/core/chains/evm/gas/models_test.go: `.NewWeiI(10)`
$DIR/core/chains/evm/gas/models_test.go: `.NewWeiI(20)`
$DIR/core/chains/evm/gas/models_test.go: `.NewWeiI(1)`
$DIR/core/chains/evm/gas/models_test.go: `.NewEvmEstimator(t)`
$DIR/core/chains/evm/gas/models_test.go: `.On("GetDynamicFee", mock.Anything, mock.Anything)`
$DIR/core/chains/evm/gas/models_test.go: `.
Return(dynamicFee, nil)`
$DIR/core/chains/evm/gas/models_test.go: `.Twice()`
$DIR/core/chains/evm/gas/models_test.go: `.On("GetLegacyGas", mock.Anything, mock.Anything, mock.Anything, mock.Anything)`
$DIR/core/chains/evm/gas/models_test.go: `.
Return(legacyFee, gasLimit, nil)`
$DIR/core/chains/evm/gas/models_test.go: `.Twice()`
$DIR/core/chains/evm/gas/models_test.go: `.On("BumpDynamicFee", mock.Anything, mock.Anything, mock.Anything, mock.Anything)`
$DIR/core/chains/evm/gas/models_test.go: `.
Return(dynamicFee, nil)`
$DIR/core/chains/evm/gas/models_test.go: `.Once()`
$DIR/core/chains/evm/gas/models_test.go: `.On("BumpLegacyGas", mock.Anything, mock.Anything, mock.Anything, mock.Anything, mock.Anything)`
$DIR/core/chains/evm/gas/models_test.go: `.
Return(legacyFee, gasLimit, nil)`
$DIR/core/chains/evm/gas/models_test.go: `.Once()`
$DIR/core/chains/evm/gas/models_test.go: `.NewMockGasConfig()`
$DIR/core/chains/evm/gas/models_test.go: `.Run("L1Oracle", func(t *testing.T) {
lggr := logger.Test(t)
evmEstimator := mocks.NewEvmEstimator(t)
evmEstimator.On("L1Oracle").Return(nil).Once()
getEst := func(logger.Logger) gas.EvmEstimator { return evmEstimator }
// expect nil
estimator := gas.NewEvmFeeEstimator(lggr, getEst, false, nil)
l1Oracle := estimator.L1Oracle()
assert.Nil(t, l1Oracle)
// expect l1Oracle
oracle := rollups.NewL1GasOracle(lggr, nil, chaintype.ChainOptimismBedrock)
// cast oracle to L1Oracle interface
estimator = gas.NewEvmFeeEstimator(lggr, getEst, false, geCfg)
evmEstimator.On("L1Oracle").Return(oracle).Once()
l1Oracle = estimator.L1Oracle()
assert.Equal(t, oracle, l1Oracle)
})`
$DIR/core/chains/evm/gas/models_test.go: `.Test(t)`
$DIR/core/chains/evm/gas/models_test.go: `.NewEvmEstimator(t)`
$DIR/core/chains/evm/gas/models_test.go: `.On("L1Oracle")`
$DIR/core/chains/evm/gas/models_test.go: `.Return(nil)`
$DIR/core/chains/evm/gas/models_test.go: `.Once()`
$DIR/core/chains/evm/gas/models_test.go: `.NewEvmFeeEstimator(lggr, getEst, false, nil)`
$DIR/core/chains/evm/gas/models_test.go: `.L1Oracle()`
$DIR/core/chains/evm/gas/models_test.go: `.NewL1GasOracle(lggr, nil, chaintype.ChainOptimismBedrock)`
$DIR/core/chains/evm/gas/models_test.go: `.NewEvmFeeEstimator(lggr, getEst, false, geCfg)`
$DIR/core/chains/evm/gas/models_test.go: `.On("L1Oracle")`
$DIR/core/chains/evm/gas/models_test.go: `.Return(oracle)`
$DIR/core/chains/evm/gas/models_test.go: `.Once()`
$DIR/core/chains/evm/gas/models_test.go: `.L1Oracle()`
$DIR/core/chains/evm/gas/models_test.go: `.Run("GetFee", func(t *testing.T) {
lggr := logger.Test(t)
// expect legacy fee data
dynamicFees := false
estimator := gas.NewEvmFeeEstimator(lggr, getRootEst, dynamicFees, geCfg)
fee, max, err := estimator.GetFee(ctx, nil, 0, nil)
require.NoError(t, err)
assert.Equal(t, uint64(float32(gasLimit)*limitMultiplier), max)
assert.True(t, legacyFee.Equal(fee.Legacy))
assert.Nil(t, fee.DynamicTipCap)
assert.Nil(t, fee.DynamicFeeCap)
// expect dynamic fee data
dynamicFees = true
estimator = gas.NewEvmFeeEstimator(lggr, getRootEst, dynamicFees, geCfg)
fee, max, err = estimator.GetFee(ctx, nil, gasLimit, nil)
require.NoError(t, err)
assert.Equal(t, uint64(float32(gasLimit)*limitMultiplier), max)
assert.True(t, dynamicFee.FeeCap.Equal(fee.DynamicFeeCap))
assert.True(t, dynamicFee.TipCap.Equal(fee.DynamicTipCap))
assert.Nil(t, fee.Legacy)
})`
$DIR/core/chains/evm/gas/models_test.go: `.Test(t)`
$DIR/core/chains/evm/gas/models_test.go: `.NewEvmFeeEstimator(lggr, getRootEst, dynamicFees, geCfg)`
$DIR/core/chains/evm/gas/models_test.go: `.GetFee(ctx, nil, 0, nil)`
$DIR/core/chains/evm/gas/models_test.go: `.NewEvmFeeEstimator(lggr, getRootEst, dynamicFees, geCfg)`
$DIR/core/chains/evm/gas/models_test.go: `.GetFee(ctx, nil, gasLimit, nil)`
$DIR/core/chains/evm/gas/models_test.go: `.Run("BumpFee", func(t *testing.T) {
lggr := logger.Test(t)
dynamicFees := false
estimator := gas.NewEvmFeeEstimator(lggr, getRootEst, dynamicFees, geCfg)
// expect legacy fee data
fee, max, err := estimator.BumpFee(ctx, gas.EvmFee{Legacy: assets.NewWeiI(0)}, 0, nil, nil)
require.NoError(t, err)
assert.Equal(t, uint64(float32(gasLimit)*limitMultiplier), max)
assert.True(t, legacyFee.Equal(fee.Legacy))
assert.Nil(t, fee.DynamicTipCap)
assert.Nil(t, fee.DynamicFeeCap)
// expect dynamic fee data
fee, max, err = estimator.BumpFee(ctx, gas.EvmFee{
DynamicFeeCap: assets.NewWeiI(0),
DynamicTipCap: assets.NewWeiI(0),
}, gasLimit, nil, nil)
require.NoError(t, err)
assert.Equal(t, uint64(float32(gasLimit)*limitMultiplier), max)
assert.True(t, dynamicFee.FeeCap.Equal(fee.DynamicFeeCap))
assert.True(t, dynamicFee.TipCap.Equal(fee.DynamicTipCap))
assert.Nil(t, fee.Legacy)
// expect error
_, _, err = estimator.BumpFee(ctx, gas.EvmFee{}, 0, nil, nil)
assert.Error(t, err)
_, _, err = estimator.BumpFee(ctx, gas.EvmFee{
Legacy: legacyFee,
DynamicFeeCap: dynamicFee.FeeCap,
DynamicTipCap: dynamicFee.TipCap,
}, 0, nil, nil)
assert.Error(t, err)
})`
$DIR/core/chains/evm/gas/models_test.go: `.Test(t)`
$DIR/core/chains/evm/gas/models_test.go: `.NewEvmFeeEstimator(lggr, getRootEst, dynamicFees, geCfg)`
$DIR/core/chains/evm/gas/models_test.go: `.BumpFee(ctx, gas.EvmFee{Legacy: assets.NewWeiI(0)}, 0, nil, nil)`
$DIR/core/chains/evm/gas/models_test.go: `.NewWeiI(0)`
$DIR/core/chains/evm/gas/models_test.go: `.BumpFee(ctx, gas.EvmFee{
DynamicFeeCap: assets.NewWeiI(0),
DynamicTipCap: assets.NewWeiI(0),
}, gasLimit, nil, nil)`
$DIR/core/chains/evm/gas/models_test.go: `.NewWeiI(0)`
$DIR/core/chains/evm/gas/models_test.go: `.NewWeiI(0)`
$DIR/core/chains/evm/gas/models_test.go: `.BumpFee(ctx, gas.EvmFee{}, 0, nil, nil)`
$DIR/core/chains/evm/gas/models_test.go: `.BumpFee(ctx, gas.EvmFee{
Legacy: legacyFee,
DynamicFeeCap: dynamicFee.FeeCap,
DynamicTipCap: dynamicFee.TipCap,
}, 0, nil, nil)`
$DIR/core/chains/evm/gas/models_test.go: `.Run("GetMaxCost", func(t *testing.T) {
lggr := logger.Test(t)
val := assets.NewEthValue(1)
// expect legacy fee data
dynamicFees := false
estimator := gas.NewEvmFeeEstimator(lggr, getRootEst, dynamicFees, geCfg)
total, err := estimator.GetMaxCost(ctx, val, nil, gasLimit, nil)
require.NoError(t, err)
fee := new(big.Int).Mul(legacyFee.ToInt(), big.NewInt(int64(gasLimit)))
fee, _ = new(big.Float).Mul(new(big.Float).SetInt(fee), big.NewFloat(float64(limitMultiplier))).Int(nil)
assert.Equal(t, new(big.Int).Add(val.ToInt(), fee), total)
// expect dynamic fee data
dynamicFees = true
estimator = gas.NewEvmFeeEstimator(lggr, getRootEst, dynamicFees, geCfg)
total, err = estimator.GetMaxCost(ctx, val, nil, gasLimit, nil)
require.NoError(t, err)
fee = new(big.Int).Mul(dynamicFee.FeeCap.ToInt(), big.NewInt(int64(gasLimit)))
fee, _ = new(big.Float).Mul(new(big.Float).SetInt(fee), big.NewFloat(float64(limitMultiplier))).Int(nil)
assert.Equal(t, new(big.Int).Add(val.ToInt(), fee), total)
})`
$DIR/core/chains/evm/gas/models_test.go: `.Test(t)`
$DIR/core/chains/evm/gas/models_test.go: `.NewEthValue(1)`
$DIR/core/chains/evm/gas/models_test.go: `.NewEvmFeeEstimator(lggr, getRootEst, dynamicFees, geCfg)`
$DIR/core/chains/evm/gas/models_test.go: `.GetMaxCost(ctx, val, nil, gasLimit, nil)`
$DIR/core/chains/evm/gas/models_test.go: `.Mul(legacyFee.ToInt(), big.NewInt(int64(gasLimit)))`
$DIR/core/chains/evm/gas/models_test.go: `.ToInt()`
$DIR/core/chains/evm/gas/models_test.go: `.NewInt(int64(gasLimit))`
$DIR/core/chains/evm/gas/models_test.go: `.Mul(new(big.Float).SetInt(fee), big.NewFloat(float64(limitMultiplier)))`
$DIR/core/chains/evm/gas/models_test.go: `.SetInt(fee)`
$DIR/core/chains/evm/gas/models_test.go: `.NewFloat(float64(limitMultiplier))`
$DIR/core/chains/evm/gas/models_test.go: `.Int(nil)`
$DIR/core/chains/evm/gas/models_test.go: `.NewEvmFeeEstimator(lggr, getRootEst, dynamicFees, geCfg)`
$DIR/core/chains/evm/gas/models_test.go: `.GetMaxCost(ctx, val, nil, gasLimit, nil)`
$DIR/core/chains/evm/gas/models_test.go: `.Mul(dynamicFee.FeeCap.ToInt(), big.NewInt(int64(gasLimit)))`
$DIR/core/chains/evm/gas/models_test.go: `.FeeCap.ToInt()`
$DIR/core/chains/evm/gas/models_test.go: `.NewInt(int64(gasLimit))`
$DIR/core/chains/evm/gas/models_test.go: `.Mul(new(big.Float).SetInt(fee), big.NewFloat(float64(limitMultiplier)))`
$DIR/core/chains/evm/gas/models_test.go: `.SetInt(fee)`
$DIR/core/chains/evm/gas/models_test.go: `.NewFloat(float64(limitMultiplier))`
$DIR/core/chains/evm/gas/models_test.go: `.Int(nil)`
$DIR/core/chains/evm/gas/models_test.go: `.Run("Name", func(t *testing.T) {
lggr := logger.Test(t)
evmEstimator := mocks.NewEvmEstimator(t)
evmEstimator.On("Name").Return(mockEvmEstimatorName, nil).Once()
estimator := gas.NewEvmFeeEstimator(lggr, func(logger.Logger) gas.EvmEstimator {
return evmEstimator
}, false, geCfg)
require.Equal(t, mockEstimatorName, estimator.Name())
require.Equal(t, mockEvmEstimatorName, evmEstimator.Name())
})`
$DIR/core/chains/evm/gas/models_test.go: `.Test(t)`
$DIR/core/chains/evm/gas/models_test.go: `.NewEvmEstimator(t)`
$DIR/core/chains/evm/gas/models_test.go: `.On("Name")`
$DIR/core/chains/evm/gas/models_test.go: `.Return(mockEvmEstimatorName, nil)`
$DIR/core/chains/evm/gas/models_test.go: `.Once()`
$DIR/core/chains/evm/gas/models_test.go: `.NewEvmFeeEstimator(lggr, func(logger.Logger) gas.EvmEstimator {
return evmEstimator
}, false, geCfg)`
$DIR/core/chains/evm/gas/models_test.go: `.Run("Start and stop calls both EVM estimator and L1Oracle", func(t *testing.T) {
lggr := logger.Test(t)
oracle := rollupMocks.NewL1Oracle(t)
evmEstimator := mocks.NewEvmEstimator(t)
evmEstimator.On("Start", mock.Anything).Return(nil).Twice()
evmEstimator.On("Close").Return(nil).Twice()
oracle.On("Start", mock.Anything).Return(nil).Once()
oracle.On("Close").Return(nil).Once()
getEst := func(logger.Logger) gas.EvmEstimator { return evmEstimator }
evmEstimator.On("L1Oracle", mock.Anything).Return(nil).Twice()
estimator := gas.NewEvmFeeEstimator(lggr, getEst, false, geCfg)
err := estimator.Start(ctx)
require.NoError(t, err)
err = estimator.Close()
require.NoError(t, err)
evmEstimator.On("L1Oracle", mock.Anything).Return(oracle).Twice()
estimator = gas.NewEvmFeeEstimator(lggr, getEst, false, geCfg)
err = estimator.Start(ctx)
require.NoError(t, err)
err = estimator.Close()
require.NoError(t, err)
})`
$DIR/core/chains/evm/gas/models_test.go: `.Test(t)`
$DIR/core/chains/evm/gas/models_test.go: `.NewL1Oracle(t)`
$DIR/core/chains/evm/gas/models_test.go: `.NewEvmEstimator(t)`
$DIR/core/chains/evm/gas/models_test.go: `.On("Start", mock.Anything)`
$DIR/core/chains/evm/gas/models_test.go: `.Return(nil)`
$DIR/core/chains/evm/gas/models_test.go: `.Twice()`
$DIR/core/chains/evm/gas/models_test.go: `.On("Close")`
$DIR/core/chains/evm/gas/models_test.go: `.Return(nil)`
$DIR/core/chains/evm/gas/models_test.go: `.Twice()`
$DIR/core/chains/evm/gas/models_test.go: `.On("Start", mock.Anything)`
$DIR/core/chains/evm/gas/models_test.go: `.Return(nil)`
$DIR/core/chains/evm/gas/models_test.go: `.Once()`
$DIR/core/chains/evm/gas/models_test.go: `.On("Close")`
$DIR/core/chains/evm/gas/models_test.go: `.Return(nil)`
$DIR/core/chains/evm/gas/models_test.go: `.Once()`
$DIR/core/chains/evm/gas/models_test.go: `.On("L1Oracle", mock.Anything)`
$DIR/core/chains/evm/gas/models_test.go: `.Return(nil)`
$DIR/core/chains/evm/gas/models_test.go: `.Twice()`
$DIR/core/chains/evm/gas/models_test.go: `.NewEvmFeeEstimator(lggr, getEst, false, geCfg)`
$DIR/core/chains/evm/gas/models_test.go: `.Start(ctx)`
$DIR/core/chains/evm/gas/models_test.go: `.On("L1Oracle", mock.Anything)`
$DIR/core/chains/evm/gas/models_test.go: `.Return(oracle)`
$DIR/core/chains/evm/gas/models_test.go: `.Twice()`
$DIR/core/chains/evm/gas/models_test.go: `.NewEvmFeeEstimator(lggr, getEst, false, geCfg)`
$DIR/core/chains/evm/gas/models_test.go: `.Start(ctx)`
$DIR/core/chains/evm/gas/models_test.go: `.Run("Read calls both EVM estimator and L1Oracle", func(t *testing.T) {
lggr := logger.Test(t)
evmEstimator := mocks.NewEvmEstimator(t)
oracle := rollupMocks.NewL1Oracle(t)
evmEstimator.On("L1Oracle").Return(oracle).Twice()
evmEstimator.On("Ready").Return(nil).Twice()
oracle.On("Ready").Return(nil).Twice()
getEst := func(logger.Logger) gas.EvmEstimator { return evmEstimator }
estimator := gas.NewEvmFeeEstimator(lggr, getEst, false, geCfg)
err := estimator.Ready()
require.NoError(t, err)
estimator = gas.NewEvmFeeEstimator(lggr, getEst, false, geCfg)
err = estimator.Ready()
require.NoError(t, err)
})`
$DIR/core/chains/evm/gas/models_test.go: `.Test(t)`
$DIR/core/chains/evm/gas/models_test.go: `.NewEvmEstimator(t)`
$DIR/core/chains/evm/gas/models_test.go: `.NewL1Oracle(t)`
$DIR/core/chains/evm/gas/models_test.go: `.On("L1Oracle")`
$DIR/core/chains/evm/gas/models_test.go: `.Return(oracle)`
$DIR/core/chains/evm/gas/models_test.go: `.Twice()`
$DIR/core/chains/evm/gas/models_test.go: `.On("Ready")`
$DIR/core/chains/evm/gas/models_test.go: `.Return(nil)`
$DIR/core/chains/evm/gas/models_test.go: `.Twice()`
$DIR/core/chains/evm/gas/models_test.go: `.On("Ready")`
$DIR/core/chains/evm/gas/models_test.go: `.Return(nil)`
$DIR/core/chains/evm/gas/models_test.go: `.Twice()`
$DIR/core/chains/evm/gas/models_test.go: `.NewEvmFeeEstimator(lggr, getEst, false, geCfg)`
$DIR/core/chains/evm/gas/models_test.go: `.Ready()`
$DIR/core/chains/evm/gas/models_test.go: `.NewEvmFeeEstimator(lggr, getEst, false, geCfg)`
$DIR/core/chains/evm/gas/models_test.go: `.Ready()`
$DIR/core/chains/evm/gas/models_test.go: `.Test(t)`
$DIR/core/chains/evm/gas/models_test.go: `.NewEvmEstimator(t)`
$DIR/core/chains/evm/gas/models_test.go: `.NewL1Oracle(t)`
$DIR/core/chains/evm/gas/models_test.go: `.New("evm error")`
$DIR/core/chains/evm/gas/models_test.go: `.New("oracle error")`
$DIR/core/chains/evm/gas/models_test.go: `.On("L1Oracle")`
$DIR/core/chains/evm/gas/models_test.go: `.Return(nil)`
$DIR/core/chains/evm/gas/models_test.go: `.Once()`
$DIR/core/chains/evm/gas/models_test.go: `.On("HealthReport")`
$DIR/core/chains/evm/gas/models_test.go: `.Return(map[string]error{evmEstimatorKey: evmEstimatorError})`
$DIR/core/chains/evm/gas/models_test.go: `.Twice()`
$DIR/core/chains/evm/gas/models_test.go: `.On("HealthReport")`
$DIR/core/chains/evm/gas/models_test.go: `.Return(map[string]error{oracleKey: oracleError})`
$DIR/core/chains/evm/gas/models_test.go: `.Once()`
$DIR/core/chains/evm/gas/models_test.go: `.NewEvmFeeEstimator(lggr, getEst, false, geCfg)`
$DIR/core/chains/evm/gas/models_test.go: `.HealthReport()`
$DIR/core/chains/evm/gas/models_test.go: `.On("L1Oracle")`
$DIR/core/chains/evm/gas/models_test.go: `.Return(oracle)`
$DIR/core/chains/evm/gas/models_test.go: `.Once()`
$DIR/core/chains/evm/gas/models_test.go: `.NewEvmFeeEstimator(lggr, getEst, false, geCfg)`
$DIR/core/chains/evm/gas/models_test.go: `.HealthReport()`
$DIR/core/chains/evm/gas/rollups/l1_oracle_test.go: `t.Run("Calling GasPrice on unstarted L1Oracle returns error", func(t *testing.T) {
ethClient := mocks.NewL1OracleClient(t)
oracle := NewL1GasOracle(logger.Test(t), ethClient, chaintype.ChainOptimismBedrock)
_, err := oracle.GasPrice(tests.Context(t))
assert.EqualError(t, err, "L1GasOracle is not started; cannot estimate gas")
})`
$DIR/core/chains/evm/gas/rollups/l1_oracle_test.go: `t.Run("Calling GasPrice on started Arbitrum L1Oracle returns Arbitrum l1GasPrice", func(t *testing.T) {
l1BaseFee := big.NewInt(100)
l1GasPriceMethodAbi, err := abi.JSON(strings.NewReader(GetL1BaseFeeEstimateAbiString))
require.NoError(t, err)
ethClient := mocks.NewL1OracleClient(t)
ethClient.On("CallContract", mock.Anything, mock.IsType(ethereum.CallMsg{}), mock.IsType(&big.Int{})).Run(func(args mock.Arguments) {
callMsg := args.Get(1).(ethereum.CallMsg)
blockNumber := args.Get(2).(*big.Int)
var payload []byte
payload, err = l1GasPriceMethodAbi.Pack("getL1BaseFeeEstimate")
require.NoError(t, err)
require.Equal(t, payload, callMsg.Data)
assert.Nil(t, blockNumber)
}).Return(common.BigToHash(l1BaseFee).Bytes(), nil)
oracle := NewL1GasOracle(logger.Test(t), ethClient, chaintype.ChainArbitrum)
servicetest.RunHealthy(t, oracle)
gasPrice, err := oracle.GasPrice(tests.Context(t))
require.NoError(t, err)
assert.Equal(t, assets.NewWei(l1BaseFee), gasPrice)
})`
$DIR/core/chains/evm/gas/rollups/l1_oracle_test.go: `ethClient.On("CallContract", mock.Anything, mock.IsType(ethereum.CallMsg{}), mock.IsType(&big.Int{})).Run(func(args mock.Arguments) {
callMsg := args.Get(1).(ethereum.CallMsg)
blockNumber := args.Get(2).(*big.Int)
var payload []byte
payload, err = l1GasPriceMethodAbi.Pack("getL1BaseFeeEstimate")
require.NoError(t, err)
require.Equal(t, payload, callMsg.Data)
assert.Nil(t, blockNumber)
}).Return(common.BigToHash(l1BaseFee).Bytes(), nil)`
$DIR/core/chains/evm/gas/rollups/l1_oracle_test.go: `payload, err = l1GasPriceMethodAbi.Pack("getL1BaseFeeEstimate")`
$DIR/core/chains/evm/gas/rollups/l1_oracle_test.go: `servicetest.RunHealthy(t, oracle)`
$DIR/core/chains/evm/gas/rollups/l1_oracle_test.go: `t.Run("Calling GasPrice on started Kroma L1Oracle returns Kroma l1GasPrice", func(t *testing.T) {
l1BaseFee := big.NewInt(100)
l1GasPriceMethodAbi, err := abi.JSON(strings.NewReader(L1BaseFeeAbiString))
require.NoError(t, err)
isEcotoneAbiString, err := abi.JSON(strings.NewReader(OPIsEcotoneAbiString))
require.NoError(t, err)
ethClient := mocks.NewL1OracleClient(t)
ethClient.On("CallContract", mock.Anything, mock.IsType(ethereum.CallMsg{}), mock.IsType(&big.Int{})).Run(func(args mock.Arguments) {
callMsg := args.Get(1).(ethereum.CallMsg)
blockNumber := args.Get(2).(*big.Int)
var payload []byte
payload, err = isEcotoneAbiString.Pack("isEcotone")
require.NoError(t, err)
require.Equal(t, payload, callMsg.Data)
assert.Nil(t, blockNumber)
}).Return(nil, errors.New("not ecotone")).Once()
ethClient.On("CallContract", mock.Anything, mock.IsType(ethereum.CallMsg{}), mock.IsType(&big.Int{})).Run(func(args mock.Arguments) {
callMsg := args.Get(1).(ethereum.CallMsg)
blockNumber := args.Get(2).(*big.Int)
var payload []byte
payload, err = l1GasPriceMethodAbi.Pack("l1BaseFee")
require.NoError(t, err)
require.Equal(t, payload, callMsg.Data)
assert.Nil(t, blockNumber)
}).Return(common.BigToHash(l1BaseFee).Bytes(), nil)
oracle := newOpStackL1GasOracle(logger.Test(t), ethClient, chaintype.ChainKroma, KromaGasOracleAddress)
servicetest.RunHealthy(t, oracle)
gasPrice, err := oracle.GasPrice(tests.Context(t))
require.NoError(t, err)
assert.Equal(t, assets.NewWei(l1BaseFee), gasPrice)
})`
$DIR/core/chains/evm/gas/rollups/l1_oracle_test.go: `ethClient.On("CallContract", mock.Anything, mock.IsType(ethereum.CallMsg{}), mock.IsType(&big.Int{})).Run(func(args mock.Arguments) {
callMsg := args.Get(1).(ethereum.CallMsg)
blockNumber := args.Get(2).(*big.Int)
var payload []byte
payload, err = isEcotoneAbiString.Pack("isEcotone")
require.NoError(t, err)
require.Equal(t, payload, callMsg.Data)
assert.Nil(t, blockNumber)
}).Return(nil, errors.New("not ecotone")).Once()`
$DIR/core/chains/evm/gas/rollups/l1_oracle_test.go: `payload, err = isEcotoneAbiString.Pack("isEcotone")`
$DIR/core/chains/evm/gas/rollups/l1_oracle_test.go: `ethClient.On("CallContract", mock.Anything, mock.IsType(ethereum.CallMsg{}), mock.IsType(&big.Int{})).Run(func(args mock.Arguments) {
callMsg := args.Get(1).(ethereum.CallMsg)
blockNumber := args.Get(2).(*big.Int)
var payload []byte
payload, err = l1GasPriceMethodAbi.Pack("l1BaseFee")
require.NoError(t, err)
require.Equal(t, payload, callMsg.Data)
assert.Nil(t, blockNumber)
}).Return(common.BigToHash(l1BaseFee).Bytes(), nil)`
$DIR/core/chains/evm/gas/rollups/l1_oracle_test.go: `payload, err = l1GasPriceMethodAbi.Pack("l1BaseFee")`
$DIR/core/chains/evm/gas/rollups/l1_oracle_test.go: `servicetest.RunHealthy(t, oracle)`
$DIR/core/chains/evm/gas/rollups/l1_oracle_test.go: `t.Run("Calling GasPrice on started OPStack L1Oracle returns OPStack l1GasPrice", func(t *testing.T) {
l1BaseFee := big.NewInt(100)
l1GasPriceMethodAbi, err := abi.JSON(strings.NewReader(L1BaseFeeAbiString))
require.NoError(t, err)
isEcotoneAbiString, err := abi.JSON(strings.NewReader(OPIsEcotoneAbiString))
require.NoError(t, err)
ethClient := mocks.NewL1OracleClient(t)
ethClient.On("CallContract", mock.Anything, mock.IsType(ethereum.CallMsg{}), mock.IsType(&big.Int{})).Run(func(args mock.Arguments) {
callMsg := args.Get(1).(ethereum.CallMsg)
blockNumber := args.Get(2).(*big.Int)
var payload []byte
payload, err = isEcotoneAbiString.Pack("isEcotone")
require.NoError(t, err)
require.Equal(t, payload, callMsg.Data)
assert.Nil(t, blockNumber)
}).Return(nil, errors.New("not ecotone")).Once()
ethClient.On("CallContract", mock.Anything, mock.IsType(ethereum.CallMsg{}), mock.IsType(&big.Int{})).Run(func(args mock.Arguments) {
callMsg := args.Get(1).(ethereum.CallMsg)
blockNumber := args.Get(2).(*big.Int)
var payload []byte
payload, err = l1GasPriceMethodAbi.Pack("l1BaseFee")
require.NoError(t, err)
require.Equal(t, payload, callMsg.Data)
assert.Nil(t, blockNumber)
}).Return(common.BigToHash(l1BaseFee).Bytes(), nil)
oracle := newOpStackL1GasOracle(logger.Test(t), ethClient, chaintype.ChainOptimismBedrock, OPGasOracleAddress)
servicetest.RunHealthy(t, oracle)
gasPrice, err := oracle.GasPrice(tests.Context(t))
require.NoError(t, err)
assert.Equal(t, assets.NewWei(l1BaseFee), gasPrice)
})`
$DIR/core/chains/evm/gas/rollups/l1_oracle_test.go: `ethClient.On("CallContract", mock.Anything, mock.IsType(ethereum.CallMsg{}), mock.IsType(&big.Int{})).Run(func(args mock.Arguments) {
callMsg := args.Get(1).(ethereum.CallMsg)
blockNumber := args.Get(2).(*big.Int)
var payload []byte
payload, err = isEcotoneAbiString.Pack("isEcotone")
require.NoError(t, err)
require.Equal(t, payload, callMsg.Data)
assert.Nil(t, blockNumber)
}).Return(nil, errors.New("not ecotone")).Once()`
$DIR/core/chains/evm/gas/rollups/l1_oracle_test.go: `payload, err = isEcotoneAbiString.Pack("isEcotone")`
$DIR/core/chains/evm/gas/rollups/l1_oracle_test.go: `ethClient.On("CallContract", mock.Anything, mock.IsType(ethereum.CallMsg{}), mock.IsType(&big.Int{})).Run(func(args mock.Arguments) {
callMsg := args.Get(1).(ethereum.CallMsg)
blockNumber := args.Get(2).(*big.Int)
var payload []byte
payload, err = l1GasPriceMethodAbi.Pack("l1BaseFee")
require.NoError(t, err)
require.Equal(t, payload, callMsg.Data)
assert.Nil(t, blockNumber)
}).Return(common.BigToHash(l1BaseFee).Bytes(), nil)`
$DIR/core/chains/evm/gas/rollups/l1_oracle_test.go: `payload, err = l1GasPriceMethodAbi.Pack("l1BaseFee")`
$DIR/core/chains/evm/gas/rollups/l1_oracle_test.go: `servicetest.RunHealthy(t, oracle)`
$DIR/core/chains/evm/gas/rollups/l1_oracle_test.go: `ethClient.On("CallContract", mock.Anything, mock.IsType(ethereum.CallMsg{}), mock.IsType(&big.Int{})).Run(func(args mock.Arguments) {
callMsg := args.Get(1).(ethereum.CallMsg)
blockNumber := args.Get(2).(*big.Int)
var payload []byte
payload, err = isEcotoneAbiString.Pack("isEcotone")
require.NoError(t, err)
require.Equal(t, payload, callMsg.Data)
assert.Nil(t, blockNumber)
}).Return(nil, errors.New("not ecotone")).Once()`
$DIR/core/chains/evm/gas/rollups/l1_oracle_test.go: `payload, err = isEcotoneAbiString.Pack("isEcotone")`
$DIR/core/chains/evm/gas/rollups/l1_oracle_test.go: `ethClient.On("CallContract", mock.Anything, mock.IsType(ethereum.CallMsg{}), mock.IsType(&big.Int{})).Run(func(args mock.Arguments) {
callMsg := args.Get(1).(ethereum.CallMsg)
blockNumber := args.Get(2).(*big.Int)
var payload []byte
payload, err = l1GasPriceMethodAbi.Pack("l1BaseFee")
require.NoError(t, err)
require.Equal(t, payload, callMsg.Data)
assert.Nil(t, blockNumber)
}).Return(common.BigToHash(l1BaseFee).Bytes(), nil)`
$DIR/core/chains/evm/gas/rollups/l1_oracle_test.go: `payload, err = l1GasPriceMethodAbi.Pack("l1BaseFee")`
$DIR/core/chains/evm/gas/rollups/l1_oracle_test.go: `t.Cleanup(func() { assert.NoError(t, oracle.Close()) })`
$DIR/core/chains/evm/gas/rollups/l1_oracle_test.go: `t.Run("Calling GetGasCost on started Arbitrum L1Oracle returns Arbitrum getL1Fee", func(t *testing.T) {
l1GasCost := big.NewInt(100)
baseFee := utils.Uint256ToBytes32(big.NewInt(1000))
l1BaseFeeEstimate := utils.Uint256ToBytes32(big.NewInt(500))
blockNum := big.NewInt(1000)
toAddress := utils.RandomAddress()
callData := []byte{1, 2, 3, 4, 5, 6, 7}
l1GasCostMethodAbi, err := abi.JSON(strings.NewReader(GasEstimateL1ComponentAbiString))
require.NoError(t, err)
tx := types.NewTx(&types.LegacyTx{
Nonce: 42,
To: &toAddress,
Data: callData,
})
result := common.LeftPadBytes(l1GasCost.Bytes(), 8)
result = append(result, baseFee...)
result = append(result, l1BaseFeeEstimate...)
ethClient := mocks.NewL1OracleClient(t)
ethClient.On("CallContract", mock.Anything, mock.IsType(ethereum.CallMsg{}), mock.IsType(&big.Int{})).Run(func(args mock.Arguments) {
callMsg := args.Get(1).(ethereum.CallMsg)
blockNumber := args.Get(2).(*big.Int)
var payload []byte
payload, err = l1GasCostMethodAbi.Pack("gasEstimateL1Component", toAddress, false, callData)
require.NoError(t, err)
require.Equal(t, payload, callMsg.Data)
require.Equal(t, blockNum, blockNumber)
}).Return(result, nil)
oracle := NewL1GasOracle(logger.Test(t), ethClient, chaintype.ChainArbitrum)
gasCost, err := oracle.GetGasCost(tests.Context(t), tx, blockNum)
require.NoError(t, err)
require.Equal(t, assets.NewWei(l1GasCost), gasCost)
})`
$DIR/core/chains/evm/gas/rollups/l1_oracle_test.go: `result = append(result, baseFee...)`
$DIR/core/chains/evm/gas/rollups/l1_oracle_test.go: `result = append(result, l1BaseFeeEstimate...)`
$DIR/core/chains/evm/gas/rollups/l1_oracle_test.go: `ethClient.On("CallContract", mock.Anything, mock.IsType(ethereum.CallMsg{}), mock.IsType(&big.Int{})).Run(func(args mock.Arguments) {
callMsg := args.Get(1).(ethereum.CallMsg)
blockNumber := args.Get(2).(*big.Int)
var payload []byte
payload, err = l1GasCostMethodAbi.Pack("gasEstimateL1Component", toAddress, false, callData)
require.NoError(t, err)
require.Equal(t, payload, callMsg.Data)
require.Equal(t, blockNum, blockNumber)
}).Return(result, nil)`
$DIR/core/chains/evm/gas/rollups/l1_oracle_test.go: `payload, err = l1GasCostMethodAbi.Pack("gasEstimateL1Component", toAddress, false, callData)`
$DIR/core/chains/evm/gas/rollups/l1_oracle_test.go: `t.Run("Calling GetGasCost on started Kroma L1Oracle returns error", func(t *testing.T) {
blockNum := big.NewInt(1000)
tx := types.NewTx(&types.LegacyTx{})
ethClient := mocks.NewL1OracleClient(t)
oracle := NewL1GasOracle(logger.Test(t), ethClient, chaintype.ChainKroma)
_, err := oracle.GetGasCost(tests.Context(t), tx, blockNum)
require.Error(t, err, "L1 gas cost not supported for this chain: kroma")
})`
$DIR/core/chains/evm/gas/rollups/l1_oracle_test.go: `t.Run("Calling GetGasCost on started OPStack L1Oracle returns OPStack getL1Fee", func(t *testing.T) {
l1GasCost := big.NewInt(100)
blockNum := big.NewInt(1000)
toAddress := utils.RandomAddress()
callData := []byte{1, 2, 3}
l1GasCostMethodAbi, err := abi.JSON(strings.NewReader(GetL1FeeAbiString))
require.NoError(t, err)
tx := types.NewTx(&types.LegacyTx{
Nonce: 42,
To: &toAddress,
Data: callData,
})
encodedTx, err := tx.MarshalBinary()
require.NoError(t, err)
ethClient := mocks.NewL1OracleClient(t)
ethClient.On("CallContract", mock.Anything, mock.IsType(ethereum.CallMsg{}), mock.IsType(&big.Int{})).Run(func(args mock.Arguments) {
callMsg := args.Get(1).(ethereum.CallMsg)
blockNumber := args.Get(2).(*big.Int)
var payload []byte
payload, err = l1GasCostMethodAbi.Pack("getL1Fee", encodedTx)
require.NoError(t, err)
require.Equal(t, payload, callMsg.Data)
require.Equal(t, blockNum, blockNumber)
}).Return(common.BigToHash(l1GasCost).Bytes(), nil)
oracle := NewL1GasOracle(logger.Test(t), ethClient, chaintype.ChainOptimismBedrock)
gasCost, err := oracle.GetGasCost(tests.Context(t), tx, blockNum)
require.NoError(t, err)
require.Equal(t, assets.NewWei(l1GasCost), gasCost)
})`
$DIR/core/chains/evm/gas/rollups/l1_oracle_test.go: `ethClient.On("CallContract", mock.Anything, mock.IsType(ethereum.CallMsg{}), mock.IsType(&big.Int{})).Run(func(args mock.Arguments) {
callMsg := args.Get(1).(ethereum.CallMsg)
blockNumber := args.Get(2).(*big.Int)
var payload []byte
payload, err = l1GasCostMethodAbi.Pack("getL1Fee", encodedTx)
require.NoError(t, err)
require.Equal(t, payload, callMsg.Data)
require.Equal(t, blockNum, blockNumber)
}).Return(common.BigToHash(l1GasCost).Bytes(), nil)`
$DIR/core/chains/evm/gas/rollups/l1_oracle_test.go: `payload, err = l1GasCostMethodAbi.Pack("getL1Fee", encodedTx)`
$DIR/core/chains/evm/gas/rollups/l1_oracle_test.go: `ethClient.On("CallContract", mock.Anything, mock.IsType(ethereum.CallMsg{}), mock.IsType(&big.Int{})).Run(func(args mock.Arguments) {
callMsg := args.Get(1).(ethereum.CallMsg)
blockNumber := args.Get(2).(*big.Int)
var payload []byte
payload, err = l1GasCostMethodAbi.Pack("getL1Fee", encodedTx)
require.NoError(t, err)
require.Equal(t, payload, callMsg.Data)
require.Equal(t, blockNum, blockNumber)
}).Return(common.BigToHash(l1GasCost).Bytes(), nil)`
$DIR/core/chains/evm/gas/rollups/l1_oracle_test.go: `payload, err = l1GasCostMethodAbi.Pack("getL1Fee", encodedTx)`
$DIR/core/chains/evm/gas/rollups/l1_oracle_test.go: `.NewL1OracleClient(t)`
$DIR/core/chains/evm/gas/rollups/l1_oracle_test.go: `.Run("Calling GasPrice on unstarted L1Oracle returns error", func(t *testing.T) {
ethClient := mocks.NewL1OracleClient(t)
oracle := NewL1GasOracle(logger.Test(t), ethClient, chaintype.ChainOptimismBedrock)
_, err := oracle.GasPrice(tests.Context(t))
assert.EqualError(t, err, "L1GasOracle is not started; cannot estimate gas")
})`
$DIR/core/chains/evm/gas/rollups/l1_oracle_test.go: `.NewL1OracleClient(t)`
$DIR/core/chains/evm/gas/rollups/l1_oracle_test.go: `.Test(t)`
$DIR/core/chains/evm/gas/rollups/l1_oracle_test.go: `.GasPrice(tests.Context(t))`
$DIR/core/chains/evm/gas/rollups/l1_oracle_test.go: `.Context(t)`
$DIR/core/chains/evm/gas/rollups/l1_oracle_test.go: `.Run("Calling GasPrice on started Arbitrum L1Oracle returns Arbitrum l1GasPrice", func(t *testing.T) {
l1BaseFee := big.NewInt(100)
l1GasPriceMethodAbi, err := abi.JSON(strings.NewReader(GetL1BaseFeeEstimateAbiString))
require.NoError(t, err)
ethClient := mocks.NewL1OracleClient(t)
ethClient.On("CallContract", mock.Anything, mock.IsType(ethereum.CallMsg{}), mock.IsType(&big.Int{})).Run(func(args mock.Arguments) {
callMsg := args.Get(1).(ethereum.CallMsg)
blockNumber := args.Get(2).(*big.Int)
var payload []byte
payload, err = l1GasPriceMethodAbi.Pack("getL1BaseFeeEstimate")
require.NoError(t, err)
require.Equal(t, payload, callMsg.Data)
assert.Nil(t, blockNumber)
}).Return(common.BigToHash(l1BaseFee).Bytes(), nil)
oracle := NewL1GasOracle(logger.Test(t), ethClient, chaintype.ChainArbitrum)
servicetest.RunHealthy(t, oracle)
gasPrice, err := oracle.GasPrice(tests.Context(t))
require.NoError(t, err)
assert.Equal(t, assets.NewWei(l1BaseFee), gasPrice)
})`
$DIR/core/chains/evm/gas/rollups/l1_oracle_test.go: `.NewInt(100)`
$DIR/core/chains/evm/gas/rollups/l1_oracle_test.go: `.JSON(strings.NewReader(GetL1BaseFeeEstimateAbiString))`
$DIR/core/chains/evm/gas/rollups/l1_oracle_test.go: `.NewReader(GetL1BaseFeeEstimateAbiString)`
$DIR/core/chains/evm/gas/rollups/l1_oracle_test.go: `.NewL1OracleClient(t)`
$DIR/core/chains/evm/gas/rollups/l1_oracle_test.go: `.On("CallContract", mock.Anything, mock.IsType(ethereum.CallMsg{}), mock.IsType(&big.Int{}))`
$DIR/core/chains/evm/gas/rollups/l1_oracle_test.go: `.IsType(ethereum.CallMsg{})`
$DIR/core/chains/evm/gas/rollups/l1_oracle_test.go: `.IsType(&big.Int{})`
$DIR/core/chains/evm/gas/rollups/l1_oracle_test.go: `.Run(func(args mock.Arguments) {
callMsg := args.Get(1).(ethereum.CallMsg)
blockNumber := args.Get(2).(*big.Int)
var payload []byte
payload, err = l1GasPriceMethodAbi.Pack("getL1BaseFeeEstimate")
require.NoError(t, err)
require.Equal(t, payload, callMsg.Data)
assert.Nil(t, blockNumber)
})`
$DIR/core/chains/evm/gas/rollups/l1_oracle_test.go: `.Get(1)`
$DIR/core/chains/evm/gas/rollups/l1_oracle_test.go: `.Get(2)`
$DIR/core/chains/evm/gas/rollups/l1_oracle_test.go: `.Pack("getL1BaseFeeEstimate")`
$DIR/core/chains/evm/gas/rollups/l1_oracle_test.go: `.Return(common.BigToHash(l1BaseFee).Bytes(), nil)`
$DIR/core/chains/evm/gas/rollups/l1_oracle_test.go: `.BigToHash(l1BaseFee)`
$DIR/core/chains/evm/gas/rollups/l1_oracle_test.go: `.Bytes()`
$DIR/core/chains/evm/gas/rollups/l1_oracle_test.go: `.Test(t)`
$DIR/core/chains/evm/gas/rollups/l1_oracle_test.go: `.RunHealthy(t, oracle)`
$DIR/core/chains/evm/gas/rollups/l1_oracle_test.go: `.GasPrice(tests.Context(t))`
$DIR/core/chains/evm/gas/rollups/l1_oracle_test.go: `.Context(t)`
$DIR/core/chains/evm/gas/rollups/l1_oracle_test.go: `.Run("Calling GasPrice on started Kroma L1Oracle returns Kroma l1GasPrice", func(t *testing.T) {
l1BaseFee := big.NewInt(100)
l1GasPriceMethodAbi, err := abi.JSON(strings.NewReader(L1BaseFeeAbiString))
require.NoError(t, err)
isEcotoneAbiString, err := abi.JSON(strings.NewReader(OPIsEcotoneAbiString))
require.NoError(t, err)
ethClient := mocks.NewL1OracleClient(t)
ethClient.On("CallContract", mock.Anything, mock.IsType(ethereum.CallMsg{}), mock.IsType(&big.Int{})).Run(func(args mock.Arguments) {
callMsg := args.Get(1).(ethereum.CallMsg)
blockNumber := args.Get(2).(*big.Int)
var payload []byte
payload, err = isEcotoneAbiString.Pack("isEcotone")
require.NoError(t, err)
require.Equal(t, payload, callMsg.Data)
assert.Nil(t, blockNumber)
}).Return(nil, errors.New("not ecotone")).Once()
ethClient.On("CallContract", mock.Anything, mock.IsType(ethereum.CallMsg{}), mock.IsType(&big.Int{})).Run(func(args mock.Arguments) {
callMsg := args.Get(1).(ethereum.CallMsg)
blockNumber := args.Get(2).(*big.Int)
var payload []byte
payload, err = l1GasPriceMethodAbi.Pack("l1BaseFee")
require.NoError(t, err)
require.Equal(t, payload, callMsg.Data)
assert.Nil(t, blockNumber)
}).Return(common.BigToHash(l1BaseFee).Bytes(), nil)
oracle := newOpStackL1GasOracle(logger.Test(t), ethClient, chaintype.ChainKroma, KromaGasOracleAddress)
servicetest.RunHealthy(t, oracle)
gasPrice, err := oracle.GasPrice(tests.Context(t))
require.NoError(t, err)
assert.Equal(t, assets.NewWei(l1BaseFee), gasPrice)
})`
$DIR/core/chains/evm/gas/rollups/l1_oracle_test.go: `.NewInt(100)`
$DIR/core/chains/evm/gas/rollups/l1_oracle_test.go: `.JSON(strings.NewReader(L1BaseFeeAbiString))`
$DIR/core/chains/evm/gas/rollups/l1_oracle_test.go: `.NewReader(L1BaseFeeAbiString)`
$DIR/core/chains/evm/gas/rollups/l1_oracle_test.go: `.JSON(strings.NewReader(OPIsEcotoneAbiString))`
$DIR/core/chains/evm/gas/rollups/l1_oracle_test.go: `.NewReader(OPIsEcotoneAbiString)`
$DIR/core/chains/evm/gas/rollups/l1_oracle_test.go: `.NewL1OracleClient(t)`
$DIR/core/chains/evm/gas/rollups/l1_oracle_test.go: `.On("CallContract", mock.Anything, mock.IsType(ethereum.CallMsg{}), mock.IsType(&big.Int{}))`
$DIR/core/chains/evm/gas/rollups/l1_oracle_test.go: `.IsType(ethereum.CallMsg{})`
$DIR/core/chains/evm/gas/rollups/l1_oracle_test.go: `.IsType(&big.Int{})`
$DIR/core/chains/evm/gas/rollups/l1_oracle_test.go: `.Run(func(args mock.Arguments) {
callMsg := args.Get(1).(ethereum.CallMsg)
blockNumber := args.Get(2).(*big.Int)
var payload []byte
payload, err = isEcotoneAbiString.Pack("isEcotone")
require.NoError(t, err)
require.Equal(t, payload, callMsg.Data)
assert.Nil(t, blockNumber)
})`
$DIR/core/chains/evm/gas/rollups/l1_oracle_test.go: `.Get(1)`
$DIR/core/chains/evm/gas/rollups/l1_oracle_test.go: `.Get(2)`
$DIR/core/chains/evm/gas/rollups/l1_oracle_test.go: `.Pack("isEcotone")`
$DIR/core/chains/evm/gas/rollups/l1_oracle_test.go: `.Return(nil, errors.New("not ecotone"))`
$DIR/core/chains/evm/gas/rollups/l1_oracle_test.go: `.New("not ecotone")`
$DIR/core/chains/evm/gas/rollups/l1_oracle_test.go: `.Once()`
$DIR/core/chains/evm/gas/rollups/l1_oracle_test.go: `.On("CallContract", mock.Anything, mock.IsType(ethereum.CallMsg{}), mock.IsType(&big.Int{}))`
$DIR/core/chains/evm/gas/rollups/l1_oracle_test.go: `.IsType(ethereum.CallMsg{})`
$DIR/core/chains/evm/gas/rollups/l1_oracle_test.go: `.IsType(&big.Int{})`
$DIR/core/chains/evm/gas/rollups/l1_oracle_test.go: `.Run(func(args mock.Arguments) {
callMsg := args.Get(1).(ethereum.CallMsg)
blockNumber := args.Get(2).(*big.Int)
var payload []byte
payload, err = l1GasPriceMethodAbi.Pack("l1BaseFee")
require.NoError(t, err)
require.Equal(t, payload, callMsg.Data)
assert.Nil(t, blockNumber)
})`
$DIR/core/chains/evm/gas/rollups/l1_oracle_test.go: `.Get(1)`
$DIR/core/chains/evm/gas/rollups/l1_oracle_test.go: `.Get(2)`
$DIR/core/chains/evm/gas/rollups/l1_oracle_test.go: `.Pack("l1BaseFee")`
$DIR/core/chains/evm/gas/rollups/l1_oracle_test.go: `.Return(common.BigToHash(l1BaseFee).Bytes(), nil)`
$DIR/core/chains/evm/gas/rollups/l1_oracle_test.go: `.BigToHash(l1BaseFee)`
$DIR/core/chains/evm/gas/rollups/l1_oracle_test.go: `.Bytes()`
$DIR/core/chains/evm/gas/rollups/l1_oracle_test.go: `.Test(t)`
$DIR/core/chains/evm/gas/rollups/l1_oracle_test.go: `.RunHealthy(t, oracle)`
$DIR/core/chains/evm/gas/rollups/l1_oracle_test.go: `.GasPrice(tests.Context(t))`
$DIR/core/chains/evm/gas/rollups/l1_oracle_test.go: `.Context(t)`
$DIR/core/chains/evm/gas/rollups/l1_oracle_test.go: `.Run("Calling GasPrice on started OPStack L1Oracle returns OPStack l1GasPrice", func(t *testing.T) {
l1BaseFee := big.NewInt(100)
l1GasPriceMethodAbi, err := abi.JSON(strings.NewReader(L1BaseFeeAbiString))
require.NoError(t, err)
isEcotoneAbiString, err := abi.JSON(strings.NewReader(OPIsEcotoneAbiString))
require.NoError(t, err)
ethClient := mocks.NewL1OracleClient(t)
ethClient.On("CallContract", mock.Anything, mock.IsType(ethereum.CallMsg{}), mock.IsType(&big.Int{})).Run(func(args mock.Arguments) {
callMsg := args.Get(1).(ethereum.CallMsg)
blockNumber := args.Get(2).(*big.Int)
var payload []byte
payload, err = isEcotoneAbiString.Pack("isEcotone")
require.NoError(t, err)
require.Equal(t, payload, callMsg.Data)
assert.Nil(t, blockNumber)
}).Return(nil, errors.New("not ecotone")).Once()
ethClient.On("CallContract", mock.Anything, mock.IsType(ethereum.CallMsg{}), mock.IsType(&big.Int{})).Run(func(args mock.Arguments) {
callMsg := args.Get(1).(ethereum.CallMsg)
blockNumber := args.Get(2).(*big.Int)
var payload []byte
payload, err = l1GasPriceMethodAbi.Pack("l1BaseFee")
require.NoError(t, err)
require.Equal(t, payload, callMsg.Data)
assert.Nil(t, blockNumber)
}).Return(common.BigToHash(l1BaseFee).Bytes(), nil)
oracle := newOpStackL1GasOracle(logger.Test(t), ethClient, chaintype.ChainOptimismBedrock, OPGasOracleAddress)
servicetest.RunHealthy(t, oracle)
gasPrice, err := oracle.GasPrice(tests.Context(t))
require.NoError(t, err)
assert.Equal(t, assets.NewWei(l1BaseFee), gasPrice)
})`
$DIR/core/chains/evm/gas/rollups/l1_oracle_test.go: `.NewInt(100)`
$DIR/core/chains/evm/gas/rollups/l1_oracle_test.go: `.JSON(strings.NewReader(L1BaseFeeAbiString))`
$DIR/core/chains/evm/gas/rollups/l1_oracle_test.go: `.NewReader(L1BaseFeeAbiString)`
$DIR/core/chains/evm/gas/rollups/l1_oracle_test.go: `.JSON(strings.NewReader(OPIsEcotoneAbiString))`
$DIR/core/chains/evm/gas/rollups/l1_oracle_test.go: `.NewReader(OPIsEcotoneAbiString)`
$DIR/core/chains/evm/gas/rollups/l1_oracle_test.go: `.NewL1OracleClient(t)`
$DIR/core/chains/evm/gas/rollups/l1_oracle_test.go: `.On("CallContract", mock.Anything, mock.IsType(ethereum.CallMsg{}), mock.IsType(&big.Int{}))`
$DIR/core/chains/evm/gas/rollups/l1_oracle_test.go: `.IsType(ethereum.CallMsg{})`
$DIR/core/chains/evm/gas/rollups/l1_oracle_test.go: `.IsType(&big.Int{})`
$DIR/core/chains/evm/gas/rollups/l1_oracle_test.go: `.Run(func(args mock.Arguments) {
callMsg := args.Get(1).(ethereum.CallMsg)
blockNumber := args.Get(2).(*big.Int)
var payload []byte
payload, err = isEcotoneAbiString.Pack("isEcotone")
require.NoError(t, err)
require.Equal(t, payload, callMsg.Data)
assert.Nil(t, blockNumber)
})`
$DIR/core/chains/evm/gas/rollups/l1_oracle_test.go: `.Get(1)`
$DIR/core/chains/evm/gas/rollups/l1_oracle_test.go: `.Get(2)`
$DIR/core/chains/evm/gas/rollups/l1_oracle_test.go: `.Pack("isEcotone")`
$DIR/core/chains/evm/gas/rollups/l1_oracle_test.go: `.Return(nil, errors.New("not ecotone"))`
$DIR/core/chains/evm/gas/rollups/l1_oracle_test.go: `.New("not ecotone")`
$DIR/core/chains/evm/gas/rollups/l1_oracle_test.go: `.Once()`
$DIR/core/chains/evm/gas/rollups/l1_oracle_test.go: `.On("CallContract", mock.Anything, mock.IsType(ethereum.CallMsg{}), mock.IsType(&big.Int{}))`
$DIR/core/chains/evm/gas/rollups/l1_oracle_test.go: `.IsType(ethereum.CallMsg{})`
$DIR/core/chains/evm/gas/rollups/l1_oracle_test.go: `.IsType(&big.Int{})`
$DIR/core/chains/evm/gas/rollups/l1_oracle_test.go: `.Run(func(args mock.Arguments) {
callMsg := args.Get(1).(ethereum.CallMsg)
blockNumber := args.Get(2).(*big.Int)
var payload []byte
payload, err = l1GasPriceMethodAbi.Pack("l1BaseFee")
require.NoError(t, err)
require.Equal(t, payload, callMsg.Data)
assert.Nil(t, blockNumber)
})`
$DIR/core/chains/evm/gas/rollups/l1_oracle_test.go: `.Get(1)`
$DIR/core/chains/evm/gas/rollups/l1_oracle_test.go: `.Get(2)`
$DIR/core/chains/evm/gas/rollups/l1_oracle_test.go: `.Pack("l1BaseFee")`
$DIR/core/chains/evm/gas/rollups/l1_oracle_test.go: `.Return(common.BigToHash(l1BaseFee).Bytes(), nil)`
$DIR/core/chains/evm/gas/rollups/l1_oracle_test.go: `.BigToHash(l1BaseFee)`
$DIR/core/chains/evm/gas/rollups/l1_oracle_test.go: `.Bytes()`
$DIR/core/chains/evm/gas/rollups/l1_oracle_test.go: `.Test(t)`
$DIR/core/chains/evm/gas/rollups/l1_oracle_test.go: `.RunHealthy(t, oracle)`
$DIR/core/chains/evm/gas/rollups/l1_oracle_test.go: `.GasPrice(tests.Context(t))`
$DIR/core/chains/evm/gas/rollups/l1_oracle_test.go: `.Context(t)`
$DIR/core/chains/evm/gas/rollups/l1_oracle_test.go: `.NewInt(200)`
$DIR/core/chains/evm/gas/rollups/l1_oracle_test.go: `.JSON(strings.NewReader(L1BaseFeeAbiString))`
$DIR/core/chains/evm/gas/rollups/l1_oracle_test.go: `.NewReader(L1BaseFeeAbiString)`
$DIR/core/chains/evm/gas/rollups/l1_oracle_test.go: `.JSON(strings.NewReader(OPIsEcotoneAbiString))`
$DIR/core/chains/evm/gas/rollups/l1_oracle_test.go: `.NewReader(OPIsEcotoneAbiString)`
$DIR/core/chains/evm/gas/rollups/l1_oracle_test.go: `.NewL1OracleClient(t)`
$DIR/core/chains/evm/gas/rollups/l1_oracle_test.go: `.On("CallContract", mock.Anything, mock.IsType(ethereum.CallMsg{}), mock.IsType(&big.Int{}))`
$DIR/core/chains/evm/gas/rollups/l1_oracle_test.go: `.IsType(ethereum.CallMsg{})`
$DIR/core/chains/evm/gas/rollups/l1_oracle_test.go: `.IsType(&big.Int{})`
$DIR/core/chains/evm/gas/rollups/l1_oracle_test.go: `.Run(func(args mock.Arguments) {
callMsg := args.Get(1).(ethereum.CallMsg)
blockNumber := args.Get(2).(*big.Int)
var payload []byte
payload, err = isEcotoneAbiString.Pack("isEcotone")
require.NoError(t, err)
require.Equal(t, payload, callMsg.Data)
assert.Nil(t, blockNumber)
})`
$DIR/core/chains/evm/gas/rollups/l1_oracle_test.go: `.Get(1)`
$DIR/core/chains/evm/gas/rollups/l1_oracle_test.go: `.Get(2)`
$DIR/core/chains/evm/gas/rollups/l1_oracle_test.go: `.Pack("isEcotone")`
$DIR/core/chains/evm/gas/rollups/l1_oracle_test.go: `.Return(nil, errors.New("not ecotone"))`
$DIR/core/chains/evm/gas/rollups/l1_oracle_test.go: `.New("not ecotone")`
$DIR/core/chains/evm/gas/rollups/l1_oracle_test.go: `.Once()`
$DIR/core/chains/evm/gas/rollups/l1_oracle_test.go: `.On("CallContract", mock.Anything, mock.IsType(ethereum.CallMsg{}), mock.IsType(&big.Int{}))`
$DIR/core/chains/evm/gas/rollups/l1_oracle_test.go: `.IsType(ethereum.CallMsg{})`
$DIR/core/chains/evm/gas/rollups/l1_oracle_test.go: `.IsType(&big.Int{})`
$DIR/core/chains/evm/gas/rollups/l1_oracle_test.go: `.Run(func(args mock.Arguments) {
callMsg := args.Get(1).(ethereum.CallMsg)
blockNumber := args.Get(2).(*big.Int)
var payload []byte
payload, err = l1GasPriceMethodAbi.Pack("l1BaseFee")
require.NoError(t, err)
require.Equal(t, payload, callMsg.Data)
assert.Nil(t, blockNumber)
})`
$DIR/core/chains/evm/gas/rollups/l1_oracle_test.go: `.Get(1)`
$DIR/core/chains/evm/gas/rollups/l1_oracle_test.go: `.Get(2)`
$DIR/core/chains/evm/gas/rollups/l1_oracle_test.go: `.Pack("l1BaseFee")`
$DIR/core/chains/evm/gas/rollups/l1_oracle_test.go: `.Return(common.BigToHash(l1BaseFee).Bytes(), nil)`
$DIR/core/chains/evm/gas/rollups/l1_oracle_test.go: `.BigToHash(l1BaseFee)`
$DIR/core/chains/evm/gas/rollups/l1_oracle_test.go: `.Bytes()`
$DIR/core/chains/evm/gas/rollups/l1_oracle_test.go: `.Test(t)`
$DIR/core/chains/evm/gas/rollups/l1_oracle_test.go: `.Cleanup(func() { assert.NoError(t, oracle.Close()) })`
$DIR/core/chains/evm/gas/rollups/l1_oracle_test.go: `.GasPrice(tests.Context(t))`
$DIR/core/chains/evm/gas/rollups/l1_oracle_test.go: `.Context(t)`
$DIR/core/chains/evm/gas/rollups/l1_oracle_test.go: `.Run("Calling GetGasCost on started Arbitrum L1Oracle returns Arbitrum getL1Fee", func(t *testing.T) {
l1GasCost := big.NewInt(100)
baseFee := utils.Uint256ToBytes32(big.NewInt(1000))
l1BaseFeeEstimate := utils.Uint256ToBytes32(big.NewInt(500))
blockNum := big.NewInt(1000)
toAddress := utils.RandomAddress()
callData := []byte{1, 2, 3, 4, 5, 6, 7}
l1GasCostMethodAbi, err := abi.JSON(strings.NewReader(GasEstimateL1ComponentAbiString))
require.NoError(t, err)
tx := types.NewTx(&types.LegacyTx{
Nonce: 42,
To: &toAddress,
Data: callData,
})
result := common.LeftPadBytes(l1GasCost.Bytes(), 8)
result = append(result, baseFee...)
result = append(result, l1BaseFeeEstimate...)
ethClient := mocks.NewL1OracleClient(t)
ethClient.On("CallContract", mock.Anything, mock.IsType(ethereum.CallMsg{}), mock.IsType(&big.Int{})).Run(func(args mock.Arguments) {
callMsg := args.Get(1).(ethereum.CallMsg)
blockNumber := args.Get(2).(*big.Int)
var payload []byte
payload, err = l1GasCostMethodAbi.Pack("gasEstimateL1Component", toAddress, false, callData)
require.NoError(t, err)
require.Equal(t, payload, callMsg.Data)
require.Equal(t, blockNum, blockNumber)
}).Return(result, nil)
oracle := NewL1GasOracle(logger.Test(t), ethClient, chaintype.ChainArbitrum)
gasCost, err := oracle.GetGasCost(tests.Context(t), tx, blockNum)
require.NoError(t, err)
require.Equal(t, assets.NewWei(l1GasCost), gasCost)
})`
$DIR/core/chains/evm/gas/rollups/l1_oracle_test.go: `.NewInt(100)`
$DIR/core/chains/evm/gas/rollups/l1_oracle_test.go: `.Uint256ToBytes32(big.NewInt(1000))`
$DIR/core/chains/evm/gas/rollups/l1_oracle_test.go: `.NewInt(1000)`
$DIR/core/chains/evm/gas/rollups/l1_oracle_test.go: `.Uint256ToBytes32(big.NewInt(500))`
$DIR/core/chains/evm/gas/rollups/l1_oracle_test.go: `.NewInt(500)`
$DIR/core/chains/evm/gas/rollups/l1_oracle_test.go: `.NewInt(1000)`
$DIR/core/chains/evm/gas/rollups/l1_oracle_test.go: `.RandomAddress()`
$DIR/core/chains/evm/gas/rollups/l1_oracle_test.go: `.JSON(strings.NewReader(GasEstimateL1ComponentAbiString))`
$DIR/core/chains/evm/gas/rollups/l1_oracle_test.go: `.NewReader(GasEstimateL1ComponentAbiString)`
$DIR/core/chains/evm/gas/rollups/l1_oracle_test.go: `.NewTx(&types.LegacyTx{
Nonce: 42,
To: &toAddress,
Data: callData,
})`
$DIR/core/chains/evm/gas/rollups/l1_oracle_test.go: `.LeftPadBytes(l1GasCost.Bytes(), 8)`
$DIR/core/chains/evm/gas/rollups/l1_oracle_test.go: `.Bytes()`
$DIR/core/chains/evm/gas/rollups/l1_oracle_test.go: `.NewL1OracleClient(t)`
$DIR/core/chains/evm/gas/rollups/l1_oracle_test.go: `.On("CallContract", mock.Anything, mock.IsType(ethereum.CallMsg{}), mock.IsType(&big.Int{}))`
$DIR/core/chains/evm/gas/rollups/l1_oracle_test.go: `.IsType(ethereum.CallMsg{})`
$DIR/core/chains/evm/gas/rollups/l1_oracle_test.go: `.IsType(&big.Int{})`
$DIR/core/chains/evm/gas/rollups/l1_oracle_test.go: `.Run(func(args mock.Arguments) {
callMsg := args.Get(1).(ethereum.CallMsg)
blockNumber := args.Get(2).(*big.Int)
var payload []byte
payload, err = l1GasCostMethodAbi.Pack("gasEstimateL1Component", toAddress, false, callData)
require.NoError(t, err)
require.Equal(t, payload, callMsg.Data)
require.Equal(t, blockNum, blockNumber)
})`
$DIR/core/chains/evm/gas/rollups/l1_oracle_test.go: `.Get(1)`
$DIR/core/chains/evm/gas/rollups/l1_oracle_test.go: `.Get(2)`
$DIR/core/chains/evm/gas/rollups/l1_oracle_test.go: `.Pack("gasEstimateL1Component", toAddress, false, callData)`
$DIR/core/chains/evm/gas/rollups/l1_oracle_test.go: `.Return(result, nil)`
$DIR/core/chains/evm/gas/rollups/l1_oracle_test.go: `.Test(t)`
$DIR/core/chains/evm/gas/rollups/l1_oracle_test.go: `.GetGasCost(tests.Context(t), tx, blockNum)`
$DIR/core/chains/evm/gas/rollups/l1_oracle_test.go: `.Context(t)`
$DIR/core/chains/evm/gas/rollups/l1_oracle_test.go: `.Run("Calling GetGasCost on started Kroma L1Oracle returns error", func(t *testing.T) {
blockNum := big.NewInt(1000)
tx := types.NewTx(&types.LegacyTx{})
ethClient := mocks.NewL1OracleClient(t)
oracle := NewL1GasOracle(logger.Test(t), ethClient, chaintype.ChainKroma)
_, err := oracle.GetGasCost(tests.Context(t), tx, blockNum)
require.Error(t, err, "L1 gas cost not supported for this chain: kroma")
})`
$DIR/core/chains/evm/gas/rollups/l1_oracle_test.go: `.NewInt(1000)`
$DIR/core/chains/evm/gas/rollups/l1_oracle_test.go: `.NewTx(&types.LegacyTx{})`
$DIR/core/chains/evm/gas/rollups/l1_oracle_test.go: `.NewL1OracleClient(t)`
$DIR/core/chains/evm/gas/rollups/l1_oracle_test.go: `.Test(t)`
$DIR/core/chains/evm/gas/rollups/l1_oracle_test.go: `.GetGasCost(tests.Context(t), tx, blockNum)`
$DIR/core/chains/evm/gas/rollups/l1_oracle_test.go: `.Context(t)`
$DIR/core/chains/evm/gas/rollups/l1_oracle_test.go: `.Run("Calling GetGasCost on started OPStack L1Oracle returns OPStack getL1Fee", func(t *testing.T) {
l1GasCost := big.NewInt(100)
blockNum := big.NewInt(1000)
toAddress := utils.RandomAddress()
callData := []byte{1, 2, 3}
l1GasCostMethodAbi, err := abi.JSON(strings.NewReader(GetL1FeeAbiString))
require.NoError(t, err)
tx := types.NewTx(&types.LegacyTx{
Nonce: 42,
To: &toAddress,
Data: callData,
})
encodedTx, err := tx.MarshalBinary()
require.NoError(t, err)
ethClient := mocks.NewL1OracleClient(t)
ethClient.On("CallContract", mock.Anything, mock.IsType(ethereum.CallMsg{}), mock.IsType(&big.Int{})).Run(func(args mock.Arguments) {
callMsg := args.Get(1).(ethereum.CallMsg)
blockNumber := args.Get(2).(*big.Int)
var payload []byte
payload, err = l1GasCostMethodAbi.Pack("getL1Fee", encodedTx)
require.NoError(t, err)
require.Equal(t, payload, callMsg.Data)
require.Equal(t, blockNum, blockNumber)
}).Return(common.BigToHash(l1GasCost).Bytes(), nil)
oracle := NewL1GasOracle(logger.Test(t), ethClient, chaintype.ChainOptimismBedrock)
gasCost, err := oracle.GetGasCost(tests.Context(t), tx, blockNum)
require.NoError(t, err)
require.Equal(t, assets.NewWei(l1GasCost), gasCost)
})`
$DIR/core/chains/evm/gas/rollups/l1_oracle_test.go: `.NewInt(100)`
$DIR/core/chains/evm/gas/rollups/l1_oracle_test.go: `.NewInt(1000)`
$DIR/core/chains/evm/gas/rollups/l1_oracle_test.go: `.RandomAddress()`
$DIR/core/chains/evm/gas/rollups/l1_oracle_test.go: `.JSON(strings.NewReader(GetL1FeeAbiString))`
$DIR/core/chains/evm/gas/rollups/l1_oracle_test.go: `.NewReader(GetL1FeeAbiString)`
$DIR/core/chains/evm/gas/rollups/l1_oracle_test.go: `.NewTx(&types.LegacyTx{
Nonce: 42,
To: &toAddress,
Data: callData,
})`
$DIR/core/chains/evm/gas/rollups/l1_oracle_test.go: `.MarshalBinary()`
$DIR/core/chains/evm/gas/rollups/l1_oracle_test.go: `.NewL1OracleClient(t)`
$DIR/core/chains/evm/gas/rollups/l1_oracle_test.go: `.On("CallContract", mock.Anything, mock.IsType(ethereum.CallMsg{}), mock.IsType(&big.Int{}))`
$DIR/core/chains/evm/gas/rollups/l1_oracle_test.go: `.IsType(ethereum.CallMsg{})`
$DIR/core/chains/evm/gas/rollups/l1_oracle_test.go: `.IsType(&big.Int{})`
$DIR/core/chains/evm/gas/rollups/l1_oracle_test.go: `.Run(func(args mock.Arguments) {
callMsg := args.Get(1).(ethereum.CallMsg)
blockNumber := args.Get(2).(*big.Int)
var payload []byte
payload, err = l1GasCostMethodAbi.Pack("getL1Fee", encodedTx)
require.NoError(t, err)
require.Equal(t, payload, callMsg.Data)
require.Equal(t, blockNum, blockNumber)
})`
$DIR/core/chains/evm/gas/rollups/l1_oracle_test.go: `.Get(1)`
$DIR/core/chains/evm/gas/rollups/l1_oracle_test.go: `.Get(2)`
$DIR/core/chains/evm/gas/rollups/l1_oracle_test.go: `.Pack("getL1Fee", encodedTx)`
$DIR/core/chains/evm/gas/rollups/l1_oracle_test.go: `.Return(common.BigToHash(l1GasCost).Bytes(), nil)`
$DIR/core/chains/evm/gas/rollups/l1_oracle_test.go: `.BigToHash(l1GasCost)`
$DIR/core/chains/evm/gas/rollups/l1_oracle_test.go: `.Bytes()`
$DIR/core/chains/evm/gas/rollups/l1_oracle_test.go: `.Test(t)`
$DIR/core/chains/evm/gas/rollups/l1_oracle_test.go: `.GetGasCost(tests.Context(t), tx, blockNum)`
$DIR/core/chains/evm/gas/rollups/l1_oracle_test.go: `.Context(t)`
$DIR/core/chains/evm/gas/rollups/l1_oracle_test.go: `.NewInt(100)`
$DIR/core/chains/evm/gas/rollups/l1_oracle_test.go: `.NewInt(1000)`
$DIR/core/chains/evm/gas/rollups/l1_oracle_test.go: `.RandomAddress()`
$DIR/core/chains/evm/gas/rollups/l1_oracle_test.go: `.JSON(strings.NewReader(GetL1FeeAbiString))`
$DIR/core/chains/evm/gas/rollups/l1_oracle_test.go: `.NewReader(GetL1FeeAbiString)`
$DIR/core/chains/evm/gas/rollups/l1_oracle_test.go: `.NewTx(&types.LegacyTx{
Nonce: 42,
To: &toAddress,
Data: callData,
})`
$DIR/core/chains/evm/gas/rollups/l1_oracle_test.go: `.MarshalBinary()`
$DIR/core/chains/evm/gas/rollups/l1_oracle_test.go: `.NewL1OracleClient(t)`
$DIR/core/chains/evm/gas/rollups/l1_oracle_test.go: `.On("CallContract", mock.Anything, mock.IsType(ethereum.CallMsg{}), mock.IsType(&big.Int{}))`
$DIR/core/chains/evm/gas/rollups/l1_oracle_test.go: `.IsType(ethereum.CallMsg{})`
$DIR/core/chains/evm/gas/rollups/l1_oracle_test.go: `.IsType(&big.Int{})`
$DIR/core/chains/evm/gas/rollups/l1_oracle_test.go: `.Run(func(args mock.Arguments) {
callMsg := args.Get(1).(ethereum.CallMsg)
blockNumber := args.Get(2).(*big.Int)
var payload []byte
payload, err = l1GasCostMethodAbi.Pack("getL1Fee", encodedTx)
require.NoError(t, err)
require.Equal(t, payload, callMsg.Data)
require.Equal(t, blockNum, blockNumber)
})`
$DIR/core/chains/evm/gas/rollups/l1_oracle_test.go: `.Get(1)`
$DIR/core/chains/evm/gas/rollups/l1_oracle_test.go: `.Get(2)`
$DIR/core/chains/evm/gas/rollups/l1_oracle_test.go: `.Pack("getL1Fee", encodedTx)`
$DIR/core/chains/evm/gas/rollups/l1_oracle_test.go: `.Return(common.BigToHash(l1GasCost).Bytes(), nil)`
$DIR/core/chains/evm/gas/rollups/l1_oracle_test.go: `.BigToHash(l1GasCost)`
$DIR/core/chains/evm/gas/rollups/l1_oracle_test.go: `.Bytes()`
$DIR/core/chains/evm/gas/rollups/l1_oracle_test.go: `.Test(t)`
$DIR/core/chains/evm/gas/rollups/l1_oracle_test.go: `.GetGasCost(tests.Context(t), tx, blockNum)`
$DIR/core/chains/evm/gas/rollups/l1_oracle_test.go: `.Context(t)`
$DIR/core/chains/evm/gas/rollups/op_l1_oracle_test.go: `t.Run(tc.name, func(t *testing.T) {
l1BaseFee := big.NewInt(100)
oracleAddress := common.HexToAddress("0x1234").String()
l1BaseFeeMethodAbi, err := abi.JSON(strings.NewReader(L1BaseFeeAbiString))
require.NoError(t, err)
l1BaseFeeCalldata, err := l1BaseFeeMethodAbi.Pack(OPStackGasOracle_l1BaseFee)
require.NoError(t, err)
isEcotoneMethodAbi, err := abi.JSON(strings.NewReader(OPIsEcotoneAbiString))
require.NoError(t, err)
isEcotoneCalldata, err := isEcotoneMethodAbi.Pack(OPStackGasOracle_isEcotone)
require.NoError(t, err)
ethClient := mocks.NewL1OracleClient(t)
call := ethClient.On("CallContract", mock.Anything, mock.IsType(ethereum.CallMsg{}), mock.IsType(&big.Int{})).Run(func(args mock.Arguments) {
callMsg := args.Get(1).(ethereum.CallMsg)
blockNumber := args.Get(2).(*big.Int)
require.Equal(t, isEcotoneCalldata, callMsg.Data)
require.Equal(t, oracleAddress, callMsg.To.String())
assert.Nil(t, blockNumber)
})
if tc.returnBadData {
call.Return([]byte{0x2, 0x2}, nil).Once()
} else if tc.isEcotoneError {
call.Return(nil, fmt.Errorf("test error")).Once()
} else {
call.Return(isEcotoneMethodAbi.Methods["isEcotone"].Outputs.Pack(false)).Once()
}
if !tc.returnBadData {
ethClient.On("CallContract", mock.Anything, mock.IsType(ethereum.CallMsg{}), mock.IsType(&big.Int{})).Run(func(args mock.Arguments) {
callMsg := args.Get(1).(ethereum.CallMsg)
blockNumber := args.Get(2).(*big.Int)
require.Equal(t, l1BaseFeeCalldata, callMsg.Data)
require.Equal(t, oracleAddress, callMsg.To.String())
assert.Nil(t, blockNumber)
}).Return(common.BigToHash(l1BaseFee).Bytes(), nil).Once()
}
oracle := newOpStackL1GasOracle(logger.Test(t), ethClient, chaintype.ChainOptimismBedrock, oracleAddress)
gasPrice, err := oracle.GetDAGasPrice(tests.Context(t))
if tc.returnBadData {
assert.Error(t, err)
} else {
require.NoError(t, err)
assert.Equal(t, l1BaseFee, gasPrice)
}
})`
$DIR/core/chains/evm/gas/rollups/op_l1_oracle_test.go: `call.Return([]byte{0x2, 0x2}, nil).Once()`
$DIR/core/chains/evm/gas/rollups/op_l1_oracle_test.go: `call.Return(nil, fmt.Errorf("test error")).Once()`
$DIR/core/chains/evm/gas/rollups/op_l1_oracle_test.go: `call.Return(isEcotoneMethodAbi.Methods["isEcotone"].Outputs.Pack(false)).Once()`
$DIR/core/chains/evm/gas/rollups/op_l1_oracle_test.go: `ethClient.On("CallContract", mock.Anything, mock.IsType(ethereum.CallMsg{}), mock.IsType(&big.Int{})).Run(func(args mock.Arguments) {
callMsg := args.Get(1).(ethereum.CallMsg)
blockNumber := args.Get(2).(*big.Int)
require.Equal(t, l1BaseFeeCalldata, callMsg.Data)
require.Equal(t, oracleAddress, callMsg.To.String())
assert.Nil(t, blockNumber)
}).Return(common.BigToHash(l1BaseFee).Bytes(), nil).Once()`
$DIR/core/chains/evm/gas/rollups/op_l1_oracle_test.go: `t.Run("correctly fetches weighted gas price if chain has upgraded to Ecotone", func(t *testing.T) {
ethClient := setupIsEcotone(t, oracleAddress)
getL1GasUsedMethodAbi, err := abi.JSON(strings.NewReader(OPGetL1GasUsedAbiString))
require.NoError(t, err)
getL1GasUsedCalldata, err := getL1GasUsedMethodAbi.Pack(OPStackGasOracle_getL1GasUsed, []byte{0x1})
require.NoError(t, err)
getL1FeeMethodAbi, err := abi.JSON(strings.NewReader(GetL1FeeAbiString))
require.NoError(t, err)
getL1FeeCalldata, err := getL1FeeMethodAbi.Pack(OPStackGasOracle_getL1Fee, []byte{0x1})
require.NoError(t, err)
ethClient.On("BatchCallContext", mock.Anything, mock.IsType([]rpc.BatchElem{})).Run(func(args mock.Arguments) {
rpcElements := args.Get(1).([]rpc.BatchElem)
require.Equal(t, 2, len(rpcElements))
for _, rE := range rpcElements {
require.Equal(t, "eth_call", rE.Method)
require.Equal(t, oracleAddress, rE.Args[0].(map[string]interface{})["to"])
require.Equal(t, "latest", rE.Args[1])
}
require.Equal(t, hexutil.Bytes(getL1GasUsedCalldata), rpcElements[0].Args[0].(map[string]interface{})["data"])
require.Equal(t, hexutil.Bytes(getL1FeeCalldata), rpcElements[1].Args[0].(map[string]interface{})["data"])
res1 := common.BigToHash(big.NewInt(1)).Hex()
res2 := common.BigToHash(l1BaseFee).Hex()
rpcElements[0].Result = &res1
rpcElements[1].Result = &res2
}).Return(nil).Once()
oracle := newOpStackL1GasOracle(logger.Test(t), ethClient, chaintype.ChainOptimismBedrock, oracleAddress)
gasPrice, err := oracle.GetDAGasPrice(tests.Context(t))
require.NoError(t, err)
assert.Equal(t, l1BaseFee, gasPrice)
})`
$DIR/core/chains/evm/gas/rollups/op_l1_oracle_test.go: `ethClient.On("BatchCallContext", mock.Anything, mock.IsType([]rpc.BatchElem{})).Run(func(args mock.Arguments) {
rpcElements := args.Get(1).([]rpc.BatchElem)
require.Equal(t, 2, len(rpcElements))
for _, rE := range rpcElements {
require.Equal(t, "eth_call", rE.Method)
require.Equal(t, oracleAddress, rE.Args[0].(map[string]interface{})["to"])
require.Equal(t, "latest", rE.Args[1])
}
require.Equal(t, hexutil.Bytes(getL1GasUsedCalldata), rpcElements[0].Args[0].(map[string]interface{})["data"])
require.Equal(t, hexutil.Bytes(getL1FeeCalldata), rpcElements[1].Args[0].(map[string]interface{})["data"])
res1 := common.BigToHash(big.NewInt(1)).Hex()
res2 := common.BigToHash(l1BaseFee).Hex()
rpcElements[0].Result = &res1
rpcElements[1].Result = &res2
}).Return(nil).Once()`
$DIR/core/chains/evm/gas/rollups/op_l1_oracle_test.go: `rpcElements[0].Result = &res1`
$DIR/core/chains/evm/gas/rollups/op_l1_oracle_test.go: `rpcElements[1].Result = &res2`
$DIR/core/chains/evm/gas/rollups/op_l1_oracle_test.go: `t.Run("fetching Ecotone price but rpc returns bad data", func(t *testing.T) {
ethClient := setupIsEcotone(t, oracleAddress)
ethClient.On("BatchCallContext", mock.Anything, mock.IsType([]rpc.BatchElem{})).Run(func(args mock.Arguments) {
rpcElements := args.Get(1).([]rpc.BatchElem)
var badData = "zzz"
rpcElements[0].Result = &badData
rpcElements[1].Result = &badData
}).Return(nil).Once()
oracle := newOpStackL1GasOracle(logger.Test(t), ethClient, chaintype.ChainOptimismBedrock, oracleAddress)
_, err := oracle.GetDAGasPrice(tests.Context(t))
assert.Error(t, err)
})`
$DIR/core/chains/evm/gas/rollups/op_l1_oracle_test.go: `ethClient.On("BatchCallContext", mock.Anything, mock.IsType([]rpc.BatchElem{})).Run(func(args mock.Arguments) {
rpcElements := args.Get(1).([]rpc.BatchElem)
var badData = "zzz"
rpcElements[0].Result = &badData
rpcElements[1].Result = &badData
}).Return(nil).Once()`
$DIR/core/chains/evm/gas/rollups/op_l1_oracle_test.go: `rpcElements[0].Result = &badData`
$DIR/core/chains/evm/gas/rollups/op_l1_oracle_test.go: `rpcElements[1].Result = &badData`
$DIR/core/chains/evm/gas/rollups/op_l1_oracle_test.go: `t.Run("fetching Ecotone price but rpc parent call errors", func(t *testing.T) {
ethClient := setupIsEcotone(t, oracleAddress)
ethClient.On("BatchCallContext", mock.Anything, mock.IsType([]rpc.BatchElem{})).Return(fmt.Errorf("revert")).Once()
oracle := newOpStackL1GasOracle(logger.Test(t), ethClient, chaintype.ChainOptimismBedrock, oracleAddress)
_, err := oracle.GetDAGasPrice(tests.Context(t))
assert.Error(t, err)
})`
$DIR/core/chains/evm/gas/rollups/op_l1_oracle_test.go: `ethClient.On("BatchCallContext", mock.Anything, mock.IsType([]rpc.BatchElem{})).Return(fmt.Errorf("revert")).Once()`
$DIR/core/chains/evm/gas/rollups/op_l1_oracle_test.go: `ethClient.On("BatchCallContext", mock.Anything, mock.IsType([]rpc.BatchElem{})).Run(func(args mock.Arguments) {
rpcElements := args.Get(1).([]rpc.BatchElem)
res := common.BigToHash(l1BaseFee).Hex()
rpcElements[0].Result = &res
rpcElements[1].Error = fmt.Errorf("revert")
}).Return(nil).Once()`
$DIR/core/chains/evm/gas/rollups/op_l1_oracle_test.go: `rpcElements[0].Result = &res`
$DIR/core/chains/evm/gas/rollups/op_l1_oracle_test.go: `rpcElements[1].Error = fmt.Errorf("revert")`
$DIR/core/chains/evm/gas/rollups/op_l1_oracle_test.go: `.Run(tc.name, func(t *testing.T) {
l1BaseFee := big.NewInt(100)
oracleAddress := common.HexToAddress("0x1234").String()
l1BaseFeeMethodAbi, err := abi.JSON(strings.NewReader(L1BaseFeeAbiString))
require.NoError(t, err)
l1BaseFeeCalldata, err := l1BaseFeeMethodAbi.Pack(OPStackGasOracle_l1BaseFee)
require.NoError(t, err)
isEcotoneMethodAbi, err := abi.JSON(strings.NewReader(OPIsEcotoneAbiString))
require.NoError(t, err)
isEcotoneCalldata, err := isEcotoneMethodAbi.Pack(OPStackGasOracle_isEcotone)
require.NoError(t, err)
ethClient := mocks.NewL1OracleClient(t)
call := ethClient.On("CallContract", mock.Anything, mock.IsType(ethereum.CallMsg{}), mock.IsType(&big.Int{})).Run(func(args mock.Arguments) {
callMsg := args.Get(1).(ethereum.CallMsg)
blockNumber := args.Get(2).(*big.Int)
require.Equal(t, isEcotoneCalldata, callMsg.Data)
require.Equal(t, oracleAddress, callMsg.To.String())
assert.Nil(t, blockNumber)
})
if tc.returnBadData {
call.Return([]byte{0x2, 0x2}, nil).Once()
} else if tc.isEcotoneError {
call.Return(nil, fmt.Errorf("test error")).Once()
} else {
call.Return(isEcotoneMethodAbi.Methods["isEcotone"].Outputs.Pack(false)).Once()
}
if !tc.returnBadData {
ethClient.On("CallContract", mock.Anything, mock.IsType(ethereum.CallMsg{}), mock.IsType(&big.Int{})).Run(func(args mock.Arguments) {
callMsg := args.Get(1).(ethereum.CallMsg)
blockNumber := args.Get(2).(*big.Int)
require.Equal(t, l1BaseFeeCalldata, callMsg.Data)
require.Equal(t, oracleAddress, callMsg.To.String())
assert.Nil(t, blockNumber)
}).Return(common.BigToHash(l1BaseFee).Bytes(), nil).Once()
}
oracle := newOpStackL1GasOracle(logger.Test(t), ethClient, chaintype.ChainOptimismBedrock, oracleAddress)
gasPrice, err := oracle.GetDAGasPrice(tests.Context(t))
if tc.returnBadData {
assert.Error(t, err)
} else {
require.NoError(t, err)
assert.Equal(t, l1BaseFee, gasPrice)
}
})`
$DIR/core/chains/evm/gas/rollups/op_l1_oracle_test.go: `.NewInt(100)`
$DIR/core/chains/evm/gas/rollups/op_l1_oracle_test.go: `.HexToAddress("0x1234")`
$DIR/core/chains/evm/gas/rollups/op_l1_oracle_test.go: `.String()`
$DIR/core/chains/evm/gas/rollups/op_l1_oracle_test.go: `.JSON(strings.NewReader(L1BaseFeeAbiString))`
$DIR/core/chains/evm/gas/rollups/op_l1_oracle_test.go: `.NewReader(L1BaseFeeAbiString)`
$DIR/core/chains/evm/gas/rollups/op_l1_oracle_test.go: `.Pack(OPStackGasOracle_l1BaseFee)`
$DIR/core/chains/evm/gas/rollups/op_l1_oracle_test.go: `.JSON(strings.NewReader(OPIsEcotoneAbiString))`
$DIR/core/chains/evm/gas/rollups/op_l1_oracle_test.go: `.NewReader(OPIsEcotoneAbiString)`
$DIR/core/chains/evm/gas/rollups/op_l1_oracle_test.go: `.Pack(OPStackGasOracle_isEcotone)`
$DIR/core/chains/evm/gas/rollups/op_l1_oracle_test.go: `.NewL1OracleClient(t)`
$DIR/core/chains/evm/gas/rollups/op_l1_oracle_test.go: `.On("CallContract", mock.Anything, mock.IsType(ethereum.CallMsg{}), mock.IsType(&big.Int{}))`
$DIR/core/chains/evm/gas/rollups/op_l1_oracle_test.go: `.IsType(ethereum.CallMsg{})`
$DIR/core/chains/evm/gas/rollups/op_l1_oracle_test.go: `.IsType(&big.Int{})`
$DIR/core/chains/evm/gas/rollups/op_l1_oracle_test.go: `.Run(func(args mock.Arguments) {
callMsg := args.Get(1).(ethereum.CallMsg)
blockNumber := args.Get(2).(*big.Int)
require.Equal(t, isEcotoneCalldata, callMsg.Data)
require.Equal(t, oracleAddress, callMsg.To.String())
assert.Nil(t, blockNumber)
})`
$DIR/core/chains/evm/gas/rollups/op_l1_oracle_test.go: `.Get(1)`
$DIR/core/chains/evm/gas/rollups/op_l1_oracle_test.go: `.Get(2)`
$DIR/core/chains/evm/gas/rollups/op_l1_oracle_test.go: `.Return([]byte{0x2, 0x2}, nil)`
$DIR/core/chains/evm/gas/rollups/op_l1_oracle_test.go: `.Once()`
$DIR/core/chains/evm/gas/rollups/op_l1_oracle_test.go: `.Return(nil, fmt.Errorf("test error"))`
$DIR/core/chains/evm/gas/rollups/op_l1_oracle_test.go: `.Once()`
$DIR/core/chains/evm/gas/rollups/op_l1_oracle_test.go: `.Return(isEcotoneMethodAbi.Methods["isEcotone"].Outputs.Pack(false))`
$DIR/core/chains/evm/gas/rollups/op_l1_oracle_test.go: `.Outputs.Pack(false)`
$DIR/core/chains/evm/gas/rollups/op_l1_oracle_test.go: `.Once()`
$DIR/core/chains/evm/gas/rollups/op_l1_oracle_test.go: `.On("CallContract", mock.Anything, mock.IsType(ethereum.CallMsg{}), mock.IsType(&big.Int{}))`
$DIR/core/chains/evm/gas/rollups/op_l1_oracle_test.go: `.IsType(ethereum.CallMsg{})`
$DIR/core/chains/evm/gas/rollups/op_l1_oracle_test.go: `.IsType(&big.Int{})`
$DIR/core/chains/evm/gas/rollups/op_l1_oracle_test.go: `.Run(func(args mock.Arguments) {
callMsg := args.Get(1).(ethereum.CallMsg)
blockNumber := args.Get(2).(*big.Int)
require.Equal(t, l1BaseFeeCalldata, callMsg.Data)
require.Equal(t, oracleAddress, callMsg.To.String())
assert.Nil(t, blockNumber)
})`
$DIR/core/chains/evm/gas/rollups/op_l1_oracle_test.go: `.Get(1)`
$DIR/core/chains/evm/gas/rollups/op_l1_oracle_test.go: `.Get(2)`
$DIR/core/chains/evm/gas/rollups/op_l1_oracle_test.go: `.Return(common.BigToHash(l1BaseFee).Bytes(), nil)`
$DIR/core/chains/evm/gas/rollups/op_l1_oracle_test.go: `.BigToHash(l1BaseFee)`
$DIR/core/chains/evm/gas/rollups/op_l1_oracle_test.go: `.Bytes()`
$DIR/core/chains/evm/gas/rollups/op_l1_oracle_test.go: `.Once()`
$DIR/core/chains/evm/gas/rollups/op_l1_oracle_test.go: `.Test(t)`
$DIR/core/chains/evm/gas/rollups/op_l1_oracle_test.go: `.GetDAGasPrice(tests.Context(t))`
$DIR/core/chains/evm/gas/rollups/op_l1_oracle_test.go: `.Context(t)`
$DIR/core/chains/evm/gas/rollups/op_l1_oracle_test.go: `.NewInt(100)`
$DIR/core/chains/evm/gas/rollups/op_l1_oracle_test.go: `.HexToAddress("0x1234")`
$DIR/core/chains/evm/gas/rollups/op_l1_oracle_test.go: `.String()`
$DIR/core/chains/evm/gas/rollups/op_l1_oracle_test.go: `.Run("correctly fetches weighted gas price if chain has upgraded to Ecotone", func(t *testing.T) {
ethClient := setupIsEcotone(t, oracleAddress)
getL1GasUsedMethodAbi, err := abi.JSON(strings.NewReader(OPGetL1GasUsedAbiString))
require.NoError(t, err)
getL1GasUsedCalldata, err := getL1GasUsedMethodAbi.Pack(OPStackGasOracle_getL1GasUsed, []byte{0x1})
require.NoError(t, err)
getL1FeeMethodAbi, err := abi.JSON(strings.NewReader(GetL1FeeAbiString))
require.NoError(t, err)
getL1FeeCalldata, err := getL1FeeMethodAbi.Pack(OPStackGasOracle_getL1Fee, []byte{0x1})
require.NoError(t, err)
ethClient.On("BatchCallContext", mock.Anything, mock.IsType([]rpc.BatchElem{})).Run(func(args mock.Arguments) {
rpcElements := args.Get(1).([]rpc.BatchElem)
require.Equal(t, 2, len(rpcElements))
for _, rE := range rpcElements {
require.Equal(t, "eth_call", rE.Method)
require.Equal(t, oracleAddress, rE.Args[0].(map[string]interface{})["to"])
require.Equal(t, "latest", rE.Args[1])
}
require.Equal(t, hexutil.Bytes(getL1GasUsedCalldata), rpcElements[0].Args[0].(map[string]interface{})["data"])
require.Equal(t, hexutil.Bytes(getL1FeeCalldata), rpcElements[1].Args[0].(map[string]interface{})["data"])
res1 := common.BigToHash(big.NewInt(1)).Hex()
res2 := common.BigToHash(l1BaseFee).Hex()
rpcElements[0].Result = &res1
rpcElements[1].Result = &res2
}).Return(nil).Once()
oracle := newOpStackL1GasOracle(logger.Test(t), ethClient, chaintype.ChainOptimismBedrock, oracleAddress)
gasPrice, err := oracle.GetDAGasPrice(tests.Context(t))
require.NoError(t, err)
assert.Equal(t, l1BaseFee, gasPrice)
})`
$DIR/core/chains/evm/gas/rollups/op_l1_oracle_test.go: `.JSON(strings.NewReader(OPGetL1GasUsedAbiString))`
$DIR/core/chains/evm/gas/rollups/op_l1_oracle_test.go: `.NewReader(OPGetL1GasUsedAbiString)`
$DIR/core/chains/evm/gas/rollups/op_l1_oracle_test.go: `.Pack(OPStackGasOracle_getL1GasUsed, []byte{0x1})`
$DIR/core/chains/evm/gas/rollups/op_l1_oracle_test.go: `.JSON(strings.NewReader(GetL1FeeAbiString))`
$DIR/core/chains/evm/gas/rollups/op_l1_oracle_test.go: `.NewReader(GetL1FeeAbiString)`
$DIR/core/chains/evm/gas/rollups/op_l1_oracle_test.go: `.Pack(OPStackGasOracle_getL1Fee, []byte{0x1})`
$DIR/core/chains/evm/gas/rollups/op_l1_oracle_test.go: `.On("BatchCallContext", mock.Anything, mock.IsType([]rpc.BatchElem{}))`
$DIR/core/chains/evm/gas/rollups/op_l1_oracle_test.go: `.IsType([]rpc.BatchElem{})`
$DIR/core/chains/evm/gas/rollups/op_l1_oracle_test.go: `.Run(func(args mock.Arguments) {
rpcElements := args.Get(1).([]rpc.BatchElem)
require.Equal(t, 2, len(rpcElements))
for _, rE := range rpcElements {
require.Equal(t, "eth_call", rE.Method)
require.Equal(t, oracleAddress, rE.Args[0].(map[string]interface{})["to"])
require.Equal(t, "latest", rE.Args[1])
}
require.Equal(t, hexutil.Bytes(getL1GasUsedCalldata), rpcElements[0].Args[0].(map[string]interface{})["data"])
require.Equal(t, hexutil.Bytes(getL1FeeCalldata), rpcElements[1].Args[0].(map[string]interface{})["data"])
res1 := common.BigToHash(big.NewInt(1)).Hex()
res2 := common.BigToHash(l1BaseFee).Hex()
rpcElements[0].Result = &res1
rpcElements[1].Result = &res2
})`
$DIR/core/chains/evm/gas/rollups/op_l1_oracle_test.go: `.Get(1)`
$DIR/core/chains/evm/gas/rollups/op_l1_oracle_test.go: `.BigToHash(big.NewInt(1))`
$DIR/core/chains/evm/gas/rollups/op_l1_oracle_test.go: `.NewInt(1)`
$DIR/core/chains/evm/gas/rollups/op_l1_oracle_test.go: `.Hex()`
$DIR/core/chains/evm/gas/rollups/op_l1_oracle_test.go: `.BigToHash(l1BaseFee)`
$DIR/core/chains/evm/gas/rollups/op_l1_oracle_test.go: `.Hex()`
$DIR/core/chains/evm/gas/rollups/op_l1_oracle_test.go: `.Return(nil)`
$DIR/core/chains/evm/gas/rollups/op_l1_oracle_test.go: `.Once()`
$DIR/core/chains/evm/gas/rollups/op_l1_oracle_test.go: `.Test(t)`
$DIR/core/chains/evm/gas/rollups/op_l1_oracle_test.go: `.GetDAGasPrice(tests.Context(t))`
$DIR/core/chains/evm/gas/rollups/op_l1_oracle_test.go: `.Context(t)`
$DIR/core/chains/evm/gas/rollups/op_l1_oracle_test.go: `.Run("fetching Ecotone price but rpc returns bad data", func(t *testing.T) {
ethClient := setupIsEcotone(t, oracleAddress)
ethClient.On("BatchCallContext", mock.Anything, mock.IsType([]rpc.BatchElem{})).Run(func(args mock.Arguments) {
rpcElements := args.Get(1).([]rpc.BatchElem)
var badData = "zzz"
rpcElements[0].Result = &badData
rpcElements[1].Result = &badData
}).Return(nil).Once()
oracle := newOpStackL1GasOracle(logger.Test(t), ethClient, chaintype.ChainOptimismBedrock, oracleAddress)
_, err := oracle.GetDAGasPrice(tests.Context(t))
assert.Error(t, err)
})`
$DIR/core/chains/evm/gas/rollups/op_l1_oracle_test.go: `.On("BatchCallContext", mock.Anything, mock.IsType([]rpc.BatchElem{}))`
$DIR/core/chains/evm/gas/rollups/op_l1_oracle_test.go: `.IsType([]rpc.BatchElem{})`
$DIR/core/chains/evm/gas/rollups/op_l1_oracle_test.go: `.Run(func(args mock.Arguments) {
rpcElements := args.Get(1).([]rpc.BatchElem)
var badData = "zzz"
rpcElements[0].Result = &badData
rpcElements[1].Result = &badData
})`
$DIR/core/chains/evm/gas/rollups/op_l1_oracle_test.go: `.Get(1)`
$DIR/core/chains/evm/gas/rollups/op_l1_oracle_test.go: `.Return(nil)`
$DIR/core/chains/evm/gas/rollups/op_l1_oracle_test.go: `.Once()`
$DIR/core/chains/evm/gas/rollups/op_l1_oracle_test.go: `.Test(t)`
$DIR/core/chains/evm/gas/rollups/op_l1_oracle_test.go: `.GetDAGasPrice(tests.Context(t))`
$DIR/core/chains/evm/gas/rollups/op_l1_oracle_test.go: `.Context(t)`
$DIR/core/chains/evm/gas/rollups/op_l1_oracle_test.go: `.Run("fetching Ecotone price but rpc parent call errors", func(t *testing.T) {
ethClient := setupIsEcotone(t, oracleAddress)
ethClient.On("BatchCallContext", mock.Anything, mock.IsType([]rpc.BatchElem{})).Return(fmt.Errorf("revert")).Once()
oracle := newOpStackL1GasOracle(logger.Test(t), ethClient, chaintype.ChainOptimismBedrock, oracleAddress)
_, err := oracle.GetDAGasPrice(tests.Context(t))
assert.Error(t, err)
})`
$DIR/core/chains/evm/gas/rollups/op_l1_oracle_test.go: `.On("BatchCallContext", mock.Anything, mock.IsType([]rpc.BatchElem{}))`
$DIR/core/chains/evm/gas/rollups/op_l1_oracle_test.go: `.IsType([]rpc.BatchElem{})`
$DIR/core/chains/evm/gas/rollups/op_l1_oracle_test.go: `.Return(fmt.Errorf("revert"))`
$DIR/core/chains/evm/gas/rollups/op_l1_oracle_test.go: `.Once()`
$DIR/core/chains/evm/gas/rollups/op_l1_oracle_test.go: `.Test(t)`
$DIR/core/chains/evm/gas/rollups/op_l1_oracle_test.go: `.GetDAGasPrice(tests.Context(t))`
$DIR/core/chains/evm/gas/rollups/op_l1_oracle_test.go: `.Context(t)`
$DIR/core/chains/evm/gas/rollups/op_l1_oracle_test.go: `.On("BatchCallContext", mock.Anything, mock.IsType([]rpc.BatchElem{}))`
$DIR/core/chains/evm/gas/rollups/op_l1_oracle_test.go: `.IsType([]rpc.BatchElem{})`
$DIR/core/chains/evm/gas/rollups/op_l1_oracle_test.go: `.Run(func(args mock.Arguments) {
rpcElements := args.Get(1).([]rpc.BatchElem)
res := common.BigToHash(l1BaseFee).Hex()
rpcElements[0].Result = &res
rpcElements[1].Error = fmt.Errorf("revert")
})`
$DIR/core/chains/evm/gas/rollups/op_l1_oracle_test.go: `.Get(1)`
$DIR/core/chains/evm/gas/rollups/op_l1_oracle_test.go: `.BigToHash(l1BaseFee)`
$DIR/core/chains/evm/gas/rollups/op_l1_oracle_test.go: `.Hex()`
$DIR/core/chains/evm/gas/rollups/op_l1_oracle_test.go: `.Return(nil)`
$DIR/core/chains/evm/gas/rollups/op_l1_oracle_test.go: `.Once()`
$DIR/core/chains/evm/gas/rollups/op_l1_oracle_test.go: `.Test(t)`
$DIR/core/chains/evm/gas/rollups/op_l1_oracle_test.go: `.GetDAGasPrice(tests.Context(t))`
$DIR/core/chains/evm/gas/rollups/op_l1_oracle_test.go: `.Context(t)`
$DIR/core/chains/evm/gas/suggested_price_estimator_test.go: `t.Run("calling GetLegacyGas on unstarted estimator returns error", func(t *testing.T) {
feeEstimatorClient := mocks.NewFeeEstimatorClient(t)
l1Oracle := rollupMocks.NewL1Oracle(t)
o := gas.NewSuggestedPriceEstimator(logger.Test(t), feeEstimatorClient, cfg, l1Oracle)
_, _, err := o.GetLegacyGas(tests.Context(t), calldata, gasLimit, maxGasPrice)
assert.EqualError(t, err, "estimator is not started")
})`
$DIR/core/chains/evm/gas/suggested_price_estimator_test.go: `t.Run("calling GetLegacyGas on started estimator returns prices", func(t *testing.T) {
feeEstimatorClient := mocks.NewFeeEstimatorClient(t)
l1Oracle := rollupMocks.NewL1Oracle(t)
feeEstimatorClient.On("CallContext", mock.Anything, mock.Anything, "eth_gasPrice").Return(nil).Run(func(args mock.Arguments) {
res := args.Get(1).(*hexutil.Big)
(*big.Int)(res).SetInt64(42)
})
o := gas.NewSuggestedPriceEstimator(logger.Test(t), feeEstimatorClient, cfg, l1Oracle)
servicetest.RunHealthy(t, o)
gasPrice, chainSpecificGasLimit, err := o.GetLegacyGas(tests.Context(t), calldata, gasLimit, maxGasPrice)
require.NoError(t, err)
assert.Equal(t, assets.NewWeiI(42), gasPrice)
assert.Equal(t, gasLimit, chainSpecificGasLimit)
})`
$DIR/core/chains/evm/gas/suggested_price_estimator_test.go: `feeEstimatorClient.On("CallContext", mock.Anything, mock.Anything, "eth_gasPrice").Return(nil).Run(func(args mock.Arguments) {
res := args.Get(1).(*hexutil.Big)
(*big.Int)(res).SetInt64(42)
})`
$DIR/core/chains/evm/gas/suggested_price_estimator_test.go: `(*big.Int)(res).SetInt64(42)`
$DIR/core/chains/evm/gas/suggested_price_estimator_test.go: `servicetest.RunHealthy(t, o)`
$DIR/core/chains/evm/gas/suggested_price_estimator_test.go: `t.Run("gas price is lower than user specified max gas price", func(t *testing.T) {
feeEstimatorClient := mocks.NewFeeEstimatorClient(t)
l1Oracle := rollupMocks.NewL1Oracle(t)
o := gas.NewSuggestedPriceEstimator(logger.Test(t), feeEstimatorClient, cfg, l1Oracle)
feeEstimatorClient.On("CallContext", mock.Anything, mock.Anything, "eth_gasPrice").Return(nil).Run(func(args mock.Arguments) {
res := args.Get(1).(*hexutil.Big)
(*big.Int)(res).SetInt64(42)
})
servicetest.RunHealthy(t, o)
gasPrice, chainSpecificGasLimit, err := o.GetLegacyGas(tests.Context(t), calldata, gasLimit, assets.NewWeiI(40))
require.Error(t, err)
assert.EqualError(t, err, "estimated gas price: 42 wei is greater than the maximum gas price configured: 40 wei")
assert.Nil(t, gasPrice)
assert.Equal(t, uint64(0), chainSpecificGasLimit)
})`
$DIR/core/chains/evm/gas/suggested_price_estimator_test.go: `feeEstimatorClient.On("CallContext", mock.Anything, mock.Anything, "eth_gasPrice").Return(nil).Run(func(args mock.Arguments) {
res := args.Get(1).(*hexutil.Big)
(*big.Int)(res).SetInt64(42)
})`
$DIR/core/chains/evm/gas/suggested_price_estimator_test.go: `(*big.Int)(res).SetInt64(42)`
$DIR/core/chains/evm/gas/suggested_price_estimator_test.go: `servicetest.RunHealthy(t, o)`
$DIR/core/chains/evm/gas/suggested_price_estimator_test.go: `t.Run("gas price is lower than global max gas price", func(t *testing.T) {
feeEstimatorClient := mocks.NewFeeEstimatorClient(t)
l1Oracle := rollupMocks.NewL1Oracle(t)
o := gas.NewSuggestedPriceEstimator(logger.Test(t), feeEstimatorClient, cfg, l1Oracle)
feeEstimatorClient.On("CallContext", mock.Anything, mock.Anything, "eth_gasPrice").Return(nil).Run(func(args mock.Arguments) {
res := args.Get(1).(*hexutil.Big)
(*big.Int)(res).SetInt64(120)
})
servicetest.RunHealthy(t, o)
gasPrice, chainSpecificGasLimit, err := o.GetLegacyGas(tests.Context(t), calldata, gasLimit, assets.NewWeiI(110))
assert.EqualError(t, err, "estimated gas price: 120 wei is greater than the maximum gas price configured: 110 wei")
assert.Nil(t, gasPrice)
assert.Equal(t, uint64(0), chainSpecificGasLimit)
})`
$DIR/core/chains/evm/gas/suggested_price_estimator_test.go: `feeEstimatorClient.On("CallContext", mock.Anything, mock.Anything, "eth_gasPrice").Return(nil).Run(func(args mock.Arguments) {
res := args.Get(1).(*hexutil.Big)
(*big.Int)(res).SetInt64(120)
})`
$DIR/core/chains/evm/gas/suggested_price_estimator_test.go: `(*big.Int)(res).SetInt64(120)`
$DIR/core/chains/evm/gas/suggested_price_estimator_test.go: `servicetest.RunHealthy(t, o)`
$DIR/core/chains/evm/gas/suggested_price_estimator_test.go: `t.Run("calling GetLegacyGas on started estimator if initial call failed returns error", func(t *testing.T) {
feeEstimatorClient := mocks.NewFeeEstimatorClient(t)
l1Oracle := rollupMocks.NewL1Oracle(t)
o := gas.NewSuggestedPriceEstimator(logger.Test(t), feeEstimatorClient, cfg, l1Oracle)
feeEstimatorClient.On("CallContext", mock.Anything, mock.Anything, "eth_gasPrice").Return(pkgerrors.New("kaboom"))
servicetest.RunHealthy(t, o)
_, _, err := o.GetLegacyGas(tests.Context(t), calldata, gasLimit, maxGasPrice)
assert.EqualError(t, err, "failed to estimate gas; gas price not set")
})`
$DIR/core/chains/evm/gas/suggested_price_estimator_test.go: `feeEstimatorClient.On("CallContext", mock.Anything, mock.Anything, "eth_gasPrice").Return(pkgerrors.New("kaboom"))`
$DIR/core/chains/evm/gas/suggested_price_estimator_test.go: `servicetest.RunHealthy(t, o)`
$DIR/core/chains/evm/gas/suggested_price_estimator_test.go: `t.Run("calling GetDynamicFee always returns error", func(t *testing.T) {
feeEstimatorClient := mocks.NewFeeEstimatorClient(t)
l1Oracle := rollupMocks.NewL1Oracle(t)
o := gas.NewSuggestedPriceEstimator(logger.Test(t), feeEstimatorClient, cfg, l1Oracle)
_, err := o.GetDynamicFee(tests.Context(t), maxGasPrice)
assert.EqualError(t, err, "dynamic fees are not implemented for this estimator")
})`
$DIR/core/chains/evm/gas/suggested_price_estimator_test.go: `t.Run("calling BumpLegacyGas on unstarted estimator returns error", func(t *testing.T) {
feeEstimatorClient := mocks.NewFeeEstimatorClient(t)
l1Oracle := rollupMocks.NewL1Oracle(t)
o := gas.NewSuggestedPriceEstimator(logger.Test(t), feeEstimatorClient, cfg, l1Oracle)
_, _, err := o.BumpLegacyGas(tests.Context(t), assets.NewWeiI(42), gasLimit, maxGasPrice, nil)
assert.EqualError(t, err, "estimator is not started")
})`
$DIR/core/chains/evm/gas/suggested_price_estimator_test.go: `t.Run("calling BumpDynamicFee always returns error", func(t *testing.T) {
feeEstimatorClient := mocks.NewFeeEstimatorClient(t)
l1Oracle := rollupMocks.NewL1Oracle(t)
o := gas.NewSuggestedPriceEstimator(logger.Test(t), feeEstimatorClient, cfg, l1Oracle)
fee := gas.DynamicFee{
FeeCap: assets.NewWeiI(42),
TipCap: assets.NewWeiI(5),
}
_, err := o.BumpDynamicFee(tests.Context(t), fee, maxGasPrice, nil)
assert.EqualError(t, err, "dynamic fees are not implemented for this estimator")
})`
$DIR/core/chains/evm/gas/suggested_price_estimator_test.go: `t.Run("calling BumpLegacyGas on started estimator returns new price buffered with bumpPercent", func(t *testing.T) {
feeEstimatorClient := mocks.NewFeeEstimatorClient(t)
l1Oracle := rollupMocks.NewL1Oracle(t)
feeEstimatorClient.On("CallContext", mock.Anything, mock.Anything, "eth_gasPrice").Return(nil).Run(func(args mock.Arguments) {
res := args.Get(1).(*hexutil.Big)
(*big.Int)(res).SetInt64(40)
})
o := gas.NewSuggestedPriceEstimator(logger.Test(t), feeEstimatorClient, cfg, l1Oracle)
servicetest.RunHealthy(t, o)
gasPrice, chainSpecificGasLimit, err := o.BumpLegacyGas(tests.Context(t), assets.NewWeiI(10), gasLimit, maxGasPrice, nil)
require.NoError(t, err)
assert.Equal(t, assets.NewWeiI(44), gasPrice)
assert.Equal(t, gasLimit, chainSpecificGasLimit)
})`
$DIR/core/chains/evm/gas/suggested_price_estimator_test.go: `feeEstimatorClient.On("CallContext", mock.Anything, mock.Anything, "eth_gasPrice").Return(nil).Run(func(args mock.Arguments) {
res := args.Get(1).(*hexutil.Big)
(*big.Int)(res).SetInt64(40)
})`
$DIR/core/chains/evm/gas/suggested_price_estimator_test.go: `(*big.Int)(res).SetInt64(40)`
$DIR/core/chains/evm/gas/suggested_price_estimator_test.go: `servicetest.RunHealthy(t, o)`
$DIR/core/chains/evm/gas/suggested_price_estimator_test.go: `t.Run("calling BumpLegacyGas on started estimator returns new price buffered with bumpMin", func(t *testing.T) {
feeEstimatorClient := mocks.NewFeeEstimatorClient(t)
l1Oracle := rollupMocks.NewL1Oracle(t)
feeEstimatorClient.On("CallContext", mock.Anything, mock.Anything, "eth_gasPrice").Return(nil).Run(func(args mock.Arguments) {
res := args.Get(1).(*hexutil.Big)
(*big.Int)(res).SetInt64(40)
})
testCfg := &gas.MockGasEstimatorConfig{BumpPercentF: 1, BumpMinF: assets.NewWei(big.NewInt(1)), BumpThresholdF: 1, LimitMultiplierF: 1}
o := gas.NewSuggestedPriceEstimator(logger.Test(t), feeEstimatorClient, testCfg, l1Oracle)
servicetest.RunHealthy(t, o)
gasPrice, chainSpecificGasLimit, err := o.BumpLegacyGas(tests.Context(t), assets.NewWeiI(10), gasLimit, maxGasPrice, nil)
require.NoError(t, err)
assert.Equal(t, assets.NewWeiI(41), gasPrice)
assert.Equal(t, gasLimit, chainSpecificGasLimit)
})`
$DIR/core/chains/evm/gas/suggested_price_estimator_test.go: `feeEstimatorClient.On("CallContext", mock.Anything, mock.Anything, "eth_gasPrice").Return(nil).Run(func(args mock.Arguments) {
res := args.Get(1).(*hexutil.Big)
(*big.Int)(res).SetInt64(40)
})`
$DIR/core/chains/evm/gas/suggested_price_estimator_test.go: `(*big.Int)(res).SetInt64(40)`
$DIR/core/chains/evm/gas/suggested_price_estimator_test.go: `servicetest.RunHealthy(t, o)`
$DIR/core/chains/evm/gas/suggested_price_estimator_test.go: `t.Run("calling BumpLegacyGas on started estimator returns original price when lower than previous", func(t *testing.T) {
feeEstimatorClient := mocks.NewFeeEstimatorClient(t)
l1Oracle := rollupMocks.NewL1Oracle(t)
feeEstimatorClient.On("CallContext", mock.Anything, mock.Anything, "eth_gasPrice").Return(nil).Run(func(args mock.Arguments) {
res := args.Get(1).(*hexutil.Big)
(*big.Int)(res).SetInt64(5)
})
o := gas.NewSuggestedPriceEstimator(logger.Test(t), feeEstimatorClient, cfg, l1Oracle)
servicetest.RunHealthy(t, o)
gasPrice, chainSpecificGasLimit, err := o.BumpLegacyGas(tests.Context(t), assets.NewWeiI(10), gasLimit, maxGasPrice, nil)
require.NoError(t, err)
assert.Equal(t, assets.NewWeiI(10), gasPrice)
assert.Equal(t, gasLimit, chainSpecificGasLimit)
})`
$DIR/core/chains/evm/gas/suggested_price_estimator_test.go: `feeEstimatorClient.On("CallContext", mock.Anything, mock.Anything, "eth_gasPrice").Return(nil).Run(func(args mock.Arguments) {
res := args.Get(1).(*hexutil.Big)
(*big.Int)(res).SetInt64(5)
})`
$DIR/core/chains/evm/gas/suggested_price_estimator_test.go: `(*big.Int)(res).SetInt64(5)`
$DIR/core/chains/evm/gas/suggested_price_estimator_test.go: `servicetest.RunHealthy(t, o)`
$DIR/core/chains/evm/gas/suggested_price_estimator_test.go: `t.Run("calling BumpLegacyGas on started estimator returns error, suggested gas price is higher than max gas price", func(t *testing.T) {
feeEstimatorClient := mocks.NewFeeEstimatorClient(t)
l1Oracle := rollupMocks.NewL1Oracle(t)
o := gas.NewSuggestedPriceEstimator(logger.Test(t), feeEstimatorClient, cfg, l1Oracle)
feeEstimatorClient.On("CallContext", mock.Anything, mock.Anything, "eth_gasPrice").Return(nil).Run(func(args mock.Arguments) {
res := args.Get(1).(*hexutil.Big)
(*big.Int)(res).SetInt64(42)
})
servicetest.RunHealthy(t, o)
gasPrice, chainSpecificGasLimit, err := o.BumpLegacyGas(tests.Context(t), assets.NewWeiI(10), gasLimit, assets.NewWeiI(40), nil)
require.Error(t, err)
assert.EqualError(t, err, "estimated gas price: 42 wei is greater than the maximum gas price configured: 40 wei")
assert.Nil(t, gasPrice)
assert.Equal(t, uint64(0), chainSpecificGasLimit)
})`
$DIR/core/chains/evm/gas/suggested_price_estimator_test.go: `feeEstimatorClient.On("CallContext", mock.Anything, mock.Anything, "eth_gasPrice").Return(nil).Run(func(args mock.Arguments) {
res := args.Get(1).(*hexutil.Big)
(*big.Int)(res).SetInt64(42)
})`
$DIR/core/chains/evm/gas/suggested_price_estimator_test.go: `(*big.Int)(res).SetInt64(42)`
$DIR/core/chains/evm/gas/suggested_price_estimator_test.go: `servicetest.RunHealthy(t, o)`
$DIR/core/chains/evm/gas/suggested_price_estimator_test.go: `t.Run("calling BumpLegacyGas on started estimator returns max gas price when suggested price under max but the buffer exceeds it", func(t *testing.T) {
feeEstimatorClient := mocks.NewFeeEstimatorClient(t)
l1Oracle := rollupMocks.NewL1Oracle(t)
o := gas.NewSuggestedPriceEstimator(logger.Test(t), feeEstimatorClient, cfg, l1Oracle)
feeEstimatorClient.On("CallContext", mock.Anything, mock.Anything, "eth_gasPrice").Return(nil).Run(func(args mock.Arguments) {
res := args.Get(1).(*hexutil.Big)
(*big.Int)(res).SetInt64(39)
})
servicetest.RunHealthy(t, o)
gasPrice, chainSpecificGasLimit, err := o.BumpLegacyGas(tests.Context(t), assets.NewWeiI(10), gasLimit, assets.NewWeiI(40), nil)
require.NoError(t, err)
assert.Equal(t, assets.NewWeiI(40), gasPrice)
assert.Equal(t, gasLimit, chainSpecificGasLimit)
})`
$DIR/core/chains/evm/gas/suggested_price_estimator_test.go: `feeEstimatorClient.On("CallContext", mock.Anything, mock.Anything, "eth_gasPrice").Return(nil).Run(func(args mock.Arguments) {
res := args.Get(1).(*hexutil.Big)
(*big.Int)(res).SetInt64(39)
})`
$DIR/core/chains/evm/gas/suggested_price_estimator_test.go: `(*big.Int)(res).SetInt64(39)`
$DIR/core/chains/evm/gas/suggested_price_estimator_test.go: `servicetest.RunHealthy(t, o)`
$DIR/core/chains/evm/gas/suggested_price_estimator_test.go: `t.Run("calling BumpLegacyGas on started estimator if initial call failed returns error", func(t *testing.T) {
feeEstimatorClient := mocks.NewFeeEstimatorClient(t)
l1Oracle := rollupMocks.NewL1Oracle(t)
o := gas.NewSuggestedPriceEstimator(logger.Test(t), feeEstimatorClient, cfg, l1Oracle)
feeEstimatorClient.On("CallContext", mock.Anything, mock.Anything, "eth_gasPrice").Return(pkgerrors.New("kaboom"))
servicetest.RunHealthy(t, o)
_, _, err := o.BumpLegacyGas(tests.Context(t), assets.NewWeiI(10), gasLimit, maxGasPrice, nil)
assert.EqualError(t, err, "failed to refresh and return gas; gas price not set")
})`
$DIR/core/chains/evm/gas/suggested_price_estimator_test.go: `feeEstimatorClient.On("CallContext", mock.Anything, mock.Anything, "eth_gasPrice").Return(pkgerrors.New("kaboom"))`
$DIR/core/chains/evm/gas/suggested_price_estimator_test.go: `servicetest.RunHealthy(t, o)`
$DIR/core/chains/evm/gas/suggested_price_estimator_test.go: `feeEstimatorClient.On("CallContext", mock.Anything, mock.Anything, "eth_gasPrice").Return(nil).Run(func(args mock.Arguments) {
res := args.Get(1).(*hexutil.Big)
(*big.Int)(res).SetInt64(40)
}).Once()`
$DIR/core/chains/evm/gas/suggested_price_estimator_test.go: `(*big.Int)(res).SetInt64(40)`
$DIR/core/chains/evm/gas/suggested_price_estimator_test.go: `feeEstimatorClient.On("CallContext", mock.Anything, mock.Anything, "eth_gasPrice").Return(pkgerrors.New("kaboom"))`
$DIR/core/chains/evm/gas/suggested_price_estimator_test.go: `servicetest.RunHealthy(t, o)`
$DIR/core/chains/evm/gas/suggested_price_estimator_test.go: `.NewWeiI(100)`
$DIR/core/chains/evm/gas/suggested_price_estimator_test.go: `.NewWei(big.NewInt(1))`
$DIR/core/chains/evm/gas/suggested_price_estimator_test.go: `.NewInt(1)`
$DIR/core/chains/evm/gas/suggested_price_estimator_test.go: `.Run("calling GetLegacyGas on unstarted estimator returns error", func(t *testing.T) {
feeEstimatorClient := mocks.NewFeeEstimatorClient(t)
l1Oracle := rollupMocks.NewL1Oracle(t)
o := gas.NewSuggestedPriceEstimator(logger.Test(t), feeEstimatorClient, cfg, l1Oracle)
_, _, err := o.GetLegacyGas(tests.Context(t), calldata, gasLimit, maxGasPrice)
assert.EqualError(t, err, "estimator is not started")
})`
$DIR/core/chains/evm/gas/suggested_price_estimator_test.go: `.NewFeeEstimatorClient(t)`
$DIR/core/chains/evm/gas/suggested_price_estimator_test.go: `.NewL1Oracle(t)`
$DIR/core/chains/evm/gas/suggested_price_estimator_test.go: `.NewSuggestedPriceEstimator(logger.Test(t), feeEstimatorClient, cfg, l1Oracle)`
$DIR/core/chains/evm/gas/suggested_price_estimator_test.go: `.Test(t)`
$DIR/core/chains/evm/gas/suggested_price_estimator_test.go: `.GetLegacyGas(tests.Context(t), calldata, gasLimit, maxGasPrice)`
$DIR/core/chains/evm/gas/suggested_price_estimator_test.go: `.Context(t)`
$DIR/core/chains/evm/gas/suggested_price_estimator_test.go: `.Run("calling GetLegacyGas on started estimator returns prices", func(t *testing.T) {
feeEstimatorClient := mocks.NewFeeEstimatorClient(t)
l1Oracle := rollupMocks.NewL1Oracle(t)
feeEstimatorClient.On("CallContext", mock.Anything, mock.Anything, "eth_gasPrice").Return(nil).Run(func(args mock.Arguments) {
res := args.Get(1).(*hexutil.Big)
(*big.Int)(res).SetInt64(42)
})
o := gas.NewSuggestedPriceEstimator(logger.Test(t), feeEstimatorClient, cfg, l1Oracle)
servicetest.RunHealthy(t, o)
gasPrice, chainSpecificGasLimit, err := o.GetLegacyGas(tests.Context(t), calldata, gasLimit, maxGasPrice)
require.NoError(t, err)
assert.Equal(t, assets.NewWeiI(42), gasPrice)
assert.Equal(t, gasLimit, chainSpecificGasLimit)
})`
$DIR/core/chains/evm/gas/suggested_price_estimator_test.go: `.NewFeeEstimatorClient(t)`
$DIR/core/chains/evm/gas/suggested_price_estimator_test.go: `.NewL1Oracle(t)`
$DIR/core/chains/evm/gas/suggested_price_estimator_test.go: `.On("CallContext", mock.Anything, mock.Anything, "eth_gasPrice")`
$DIR/core/chains/evm/gas/suggested_price_estimator_test.go: `.Return(nil)`
$DIR/core/chains/evm/gas/suggested_price_estimator_test.go: `.Run(func(args mock.Arguments) {
res := args.Get(1).(*hexutil.Big)
(*big.Int)(res).SetInt64(42)
})`
$DIR/core/chains/evm/gas/suggested_price_estimator_test.go: `.Get(1)`
$DIR/core/chains/evm/gas/suggested_price_estimator_test.go: `.SetInt64(42)`
$DIR/core/chains/evm/gas/suggested_price_estimator_test.go: `.NewSuggestedPriceEstimator(logger.Test(t), feeEstimatorClient, cfg, l1Oracle)`
$DIR/core/chains/evm/gas/suggested_price_estimator_test.go: `.Test(t)`
$DIR/core/chains/evm/gas/suggested_price_estimator_test.go: `.RunHealthy(t, o)`
$DIR/core/chains/evm/gas/suggested_price_estimator_test.go: `.GetLegacyGas(tests.Context(t), calldata, gasLimit, maxGasPrice)`
$DIR/core/chains/evm/gas/suggested_price_estimator_test.go: `.Context(t)`
$DIR/core/chains/evm/gas/suggested_price_estimator_test.go: `.Run("gas price is lower than user specified max gas price", func(t *testing.T) {
feeEstimatorClient := mocks.NewFeeEstimatorClient(t)
l1Oracle := rollupMocks.NewL1Oracle(t)
o := gas.NewSuggestedPriceEstimator(logger.Test(t), feeEstimatorClient, cfg, l1Oracle)
feeEstimatorClient.On("CallContext", mock.Anything, mock.Anything, "eth_gasPrice").Return(nil).Run(func(args mock.Arguments) {
res := args.Get(1).(*hexutil.Big)
(*big.Int)(res).SetInt64(42)
})
servicetest.RunHealthy(t, o)
gasPrice, chainSpecificGasLimit, err := o.GetLegacyGas(tests.Context(t), calldata, gasLimit, assets.NewWeiI(40))
require.Error(t, err)
assert.EqualError(t, err, "estimated gas price: 42 wei is greater than the maximum gas price configured: 40 wei")
assert.Nil(t, gasPrice)
assert.Equal(t, uint64(0), chainSpecificGasLimit)
})`
$DIR/core/chains/evm/gas/suggested_price_estimator_test.go: `.NewFeeEstimatorClient(t)`
$DIR/core/chains/evm/gas/suggested_price_estimator_test.go: `.NewL1Oracle(t)`
$DIR/core/chains/evm/gas/suggested_price_estimator_test.go: `.NewSuggestedPriceEstimator(logger.Test(t), feeEstimatorClient, cfg, l1Oracle)`
$DIR/core/chains/evm/gas/suggested_price_estimator_test.go: `.Test(t)`
$DIR/core/chains/evm/gas/suggested_price_estimator_test.go: `.On("CallContext", mock.Anything, mock.Anything, "eth_gasPrice")`
$DIR/core/chains/evm/gas/suggested_price_estimator_test.go: `.Return(nil)`
$DIR/core/chains/evm/gas/suggested_price_estimator_test.go: `.Run(func(args mock.Arguments) {
res := args.Get(1).(*hexutil.Big)
(*big.Int)(res).SetInt64(42)
})`
$DIR/core/chains/evm/gas/suggested_price_estimator_test.go: `.Get(1)`
$DIR/core/chains/evm/gas/suggested_price_estimator_test.go: `.SetInt64(42)`
$DIR/core/chains/evm/gas/suggested_price_estimator_test.go: `.RunHealthy(t, o)`
$DIR/core/chains/evm/gas/suggested_price_estimator_test.go: `.GetLegacyGas(tests.Context(t), calldata, gasLimit, assets.NewWeiI(40))`
$DIR/core/chains/evm/gas/suggested_price_estimator_test.go: `.Context(t)`
$DIR/core/chains/evm/gas/suggested_price_estimator_test.go: `.NewWeiI(40)`
$DIR/core/chains/evm/gas/suggested_price_estimator_test.go: `.Run("gas price is lower than global max gas price", func(t *testing.T) {
feeEstimatorClient := mocks.NewFeeEstimatorClient(t)
l1Oracle := rollupMocks.NewL1Oracle(t)
o := gas.NewSuggestedPriceEstimator(logger.Test(t), feeEstimatorClient, cfg, l1Oracle)
feeEstimatorClient.On("CallContext", mock.Anything, mock.Anything, "eth_gasPrice").Return(nil).Run(func(args mock.Arguments) {
res := args.Get(1).(*hexutil.Big)
(*big.Int)(res).SetInt64(120)
})
servicetest.RunHealthy(t, o)
gasPrice, chainSpecificGasLimit, err := o.GetLegacyGas(tests.Context(t), calldata, gasLimit, assets.NewWeiI(110))
assert.EqualError(t, err, "estimated gas price: 120 wei is greater than the maximum gas price configured: 110 wei")
assert.Nil(t, gasPrice)
assert.Equal(t, uint64(0), chainSpecificGasLimit)
})`
$DIR/core/chains/evm/gas/suggested_price_estimator_test.go: `.NewFeeEstimatorClient(t)`
$DIR/core/chains/evm/gas/suggested_price_estimator_test.go: `.NewL1Oracle(t)`
$DIR/core/chains/evm/gas/suggested_price_estimator_test.go: `.NewSuggestedPriceEstimator(logger.Test(t), feeEstimatorClient, cfg, l1Oracle)`
$DIR/core/chains/evm/gas/suggested_price_estimator_test.go: `.Test(t)`
$DIR/core/chains/evm/gas/suggested_price_estimator_test.go: `.On("CallContext", mock.Anything, mock.Anything, "eth_gasPrice")`
$DIR/core/chains/evm/gas/suggested_price_estimator_test.go: `.Return(nil)`
$DIR/core/chains/evm/gas/suggested_price_estimator_test.go: `.Run(func(args mock.Arguments) {
res := args.Get(1).(*hexutil.Big)
(*big.Int)(res).SetInt64(120)
})`
$DIR/core/chains/evm/gas/suggested_price_estimator_test.go: `.Get(1)`
$DIR/core/chains/evm/gas/suggested_price_estimator_test.go: `.SetInt64(120)`
$DIR/core/chains/evm/gas/suggested_price_estimator_test.go: `.RunHealthy(t, o)`
$DIR/core/chains/evm/gas/suggested_price_estimator_test.go: `.GetLegacyGas(tests.Context(t), calldata, gasLimit, assets.NewWeiI(110))`
$DIR/core/chains/evm/gas/suggested_price_estimator_test.go: `.Context(t)`
$DIR/core/chains/evm/gas/suggested_price_estimator_test.go: `.NewWeiI(110)`
$DIR/core/chains/evm/gas/suggested_price_estimator_test.go: `.Run("calling GetLegacyGas on started estimator if initial call failed returns error", func(t *testing.T) {
feeEstimatorClient := mocks.NewFeeEstimatorClient(t)
l1Oracle := rollupMocks.NewL1Oracle(t)
o := gas.NewSuggestedPriceEstimator(logger.Test(t), feeEstimatorClient, cfg, l1Oracle)
feeEstimatorClient.On("CallContext", mock.Anything, mock.Anything, "eth_gasPrice").Return(pkgerrors.New("kaboom"))
servicetest.RunHealthy(t, o)
_, _, err := o.GetLegacyGas(tests.Context(t), calldata, gasLimit, maxGasPrice)
assert.EqualError(t, err, "failed to estimate gas; gas price not set")
})`
$DIR/core/chains/evm/gas/suggested_price_estimator_test.go: `.NewFeeEstimatorClient(t)`
$DIR/core/chains/evm/gas/suggested_price_estimator_test.go: `.NewL1Oracle(t)`
$DIR/core/chains/evm/gas/suggested_price_estimator_test.go: `.NewSuggestedPriceEstimator(logger.Test(t), feeEstimatorClient, cfg, l1Oracle)`
$DIR/core/chains/evm/gas/suggested_price_estimator_test.go: `.Test(t)`
$DIR/core/chains/evm/gas/suggested_price_estimator_test.go: `.On("CallContext", mock.Anything, mock.Anything, "eth_gasPrice")`
$DIR/core/chains/evm/gas/suggested_price_estimator_test.go: `.Return(pkgerrors.New("kaboom"))`
$DIR/core/chains/evm/gas/suggested_price_estimator_test.go: `.New("kaboom")`
$DIR/core/chains/evm/gas/suggested_price_estimator_test.go: `.RunHealthy(t, o)`
$DIR/core/chains/evm/gas/suggested_price_estimator_test.go: `.GetLegacyGas(tests.Context(t), calldata, gasLimit, maxGasPrice)`
$DIR/core/chains/evm/gas/suggested_price_estimator_test.go: `.Context(t)`
$DIR/core/chains/evm/gas/suggested_price_estimator_test.go: `.Run("calling GetDynamicFee always returns error", func(t *testing.T) {
feeEstimatorClient := mocks.NewFeeEstimatorClient(t)
l1Oracle := rollupMocks.NewL1Oracle(t)
o := gas.NewSuggestedPriceEstimator(logger.Test(t), feeEstimatorClient, cfg, l1Oracle)
_, err := o.GetDynamicFee(tests.Context(t), maxGasPrice)
assert.EqualError(t, err, "dynamic fees are not implemented for this estimator")
})`
$DIR/core/chains/evm/gas/suggested_price_estimator_test.go: `.NewFeeEstimatorClient(t)`
$DIR/core/chains/evm/gas/suggested_price_estimator_test.go: `.NewL1Oracle(t)`
$DIR/core/chains/evm/gas/suggested_price_estimator_test.go: `.NewSuggestedPriceEstimator(logger.Test(t), feeEstimatorClient, cfg, l1Oracle)`
$DIR/core/chains/evm/gas/suggested_price_estimator_test.go: `.Test(t)`
$DIR/core/chains/evm/gas/suggested_price_estimator_test.go: `.GetDynamicFee(tests.Context(t), maxGasPrice)`
$DIR/core/chains/evm/gas/suggested_price_estimator_test.go: `.Context(t)`
$DIR/core/chains/evm/gas/suggested_price_estimator_test.go: `.Run("calling BumpLegacyGas on unstarted estimator returns error", func(t *testing.T) {
feeEstimatorClient := mocks.NewFeeEstimatorClient(t)
l1Oracle := rollupMocks.NewL1Oracle(t)
o := gas.NewSuggestedPriceEstimator(logger.Test(t), feeEstimatorClient, cfg, l1Oracle)
_, _, err := o.BumpLegacyGas(tests.Context(t), assets.NewWeiI(42), gasLimit, maxGasPrice, nil)
assert.EqualError(t, err, "estimator is not started")
})`
$DIR/core/chains/evm/gas/suggested_price_estimator_test.go: `.NewFeeEstimatorClient(t)`
$DIR/core/chains/evm/gas/suggested_price_estimator_test.go: `.NewL1Oracle(t)`
$DIR/core/chains/evm/gas/suggested_price_estimator_test.go: `.NewSuggestedPriceEstimator(logger.Test(t), feeEstimatorClient, cfg, l1Oracle)`
$DIR/core/chains/evm/gas/suggested_price_estimator_test.go: `.Test(t)`
$DIR/core/chains/evm/gas/suggested_price_estimator_test.go: `.BumpLegacyGas(tests.Context(t), assets.NewWeiI(42), gasLimit, maxGasPrice, nil)`
$DIR/core/chains/evm/gas/suggested_price_estimator_test.go: `.Context(t)`
$DIR/core/chains/evm/gas/suggested_price_estimator_test.go: `.NewWeiI(42)`
$DIR/core/chains/evm/gas/suggested_price_estimator_test.go: `.Run("calling BumpDynamicFee always returns error", func(t *testing.T) {
feeEstimatorClient := mocks.NewFeeEstimatorClient(t)
l1Oracle := rollupMocks.NewL1Oracle(t)
o := gas.NewSuggestedPriceEstimator(logger.Test(t), feeEstimatorClient, cfg, l1Oracle)
fee := gas.DynamicFee{
FeeCap: assets.NewWeiI(42),
TipCap: assets.NewWeiI(5),
}
_, err := o.BumpDynamicFee(tests.Context(t), fee, maxGasPrice, nil)
assert.EqualError(t, err, "dynamic fees are not implemented for this estimator")
})`
$DIR/core/chains/evm/gas/suggested_price_estimator_test.go: `.NewFeeEstimatorClient(t)`
$DIR/core/chains/evm/gas/suggested_price_estimator_test.go: `.NewL1Oracle(t)`
$DIR/core/chains/evm/gas/suggested_price_estimator_test.go: `.NewSuggestedPriceEstimator(logger.Test(t), feeEstimatorClient, cfg, l1Oracle)`
$DIR/core/chains/evm/gas/suggested_price_estimator_test.go: `.Test(t)`
$DIR/core/chains/evm/gas/suggested_price_estimator_test.go: `.NewWeiI(42)`
$DIR/core/chains/evm/gas/suggested_price_estimator_test.go: `.NewWeiI(5)`
$DIR/core/chains/evm/gas/suggested_price_estimator_test.go: `.BumpDynamicFee(tests.Context(t), fee, maxGasPrice, nil)`
$DIR/core/chains/evm/gas/suggested_price_estimator_test.go: `.Context(t)`
$DIR/core/chains/evm/gas/suggested_price_estimator_test.go: `.Run("calling BumpLegacyGas on started estimator returns new price buffered with bumpPercent", func(t *testing.T) {
feeEstimatorClient := mocks.NewFeeEstimatorClient(t)
l1Oracle := rollupMocks.NewL1Oracle(t)
feeEstimatorClient.On("CallContext", mock.Anything, mock.Anything, "eth_gasPrice").Return(nil).Run(func(args mock.Arguments) {
res := args.Get(1).(*hexutil.Big)
(*big.Int)(res).SetInt64(40)
})
o := gas.NewSuggestedPriceEstimator(logger.Test(t), feeEstimatorClient, cfg, l1Oracle)
servicetest.RunHealthy(t, o)
gasPrice, chainSpecificGasLimit, err := o.BumpLegacyGas(tests.Context(t), assets.NewWeiI(10), gasLimit, maxGasPrice, nil)
require.NoError(t, err)
assert.Equal(t, assets.NewWeiI(44), gasPrice)
assert.Equal(t, gasLimit, chainSpecificGasLimit)
})`
$DIR/core/chains/evm/gas/suggested_price_estimator_test.go: `.NewFeeEstimatorClient(t)`
$DIR/core/chains/evm/gas/suggested_price_estimator_test.go: `.NewL1Oracle(t)`
$DIR/core/chains/evm/gas/suggested_price_estimator_test.go: `.On("CallContext", mock.Anything, mock.Anything, "eth_gasPrice")`
$DIR/core/chains/evm/gas/suggested_price_estimator_test.go: `.Return(nil)`
$DIR/core/chains/evm/gas/suggested_price_estimator_test.go: `.Run(func(args mock.Arguments) {
res := args.Get(1).(*hexutil.Big)
(*big.Int)(res).SetInt64(40)
})`
$DIR/core/chains/evm/gas/suggested_price_estimator_test.go: `.Get(1)`
$DIR/core/chains/evm/gas/suggested_price_estimator_test.go: `.SetInt64(40)`
$DIR/core/chains/evm/gas/suggested_price_estimator_test.go: `.NewSuggestedPriceEstimator(logger.Test(t), feeEstimatorClient, cfg, l1Oracle)`
$DIR/core/chains/evm/gas/suggested_price_estimator_test.go: `.Test(t)`
$DIR/core/chains/evm/gas/suggested_price_estimator_test.go: `.RunHealthy(t, o)`
$DIR/core/chains/evm/gas/suggested_price_estimator_test.go: `.BumpLegacyGas(tests.Context(t), assets.NewWeiI(10), gasLimit, maxGasPrice, nil)`
$DIR/core/chains/evm/gas/suggested_price_estimator_test.go: `.Context(t)`
$DIR/core/chains/evm/gas/suggested_price_estimator_test.go: `.NewWeiI(10)`
$DIR/core/chains/evm/gas/suggested_price_estimator_test.go: `.Run("calling BumpLegacyGas on started estimator returns new price buffered with bumpMin", func(t *testing.T) {
feeEstimatorClient := mocks.NewFeeEstimatorClient(t)
l1Oracle := rollupMocks.NewL1Oracle(t)
feeEstimatorClient.On("CallContext", mock.Anything, mock.Anything, "eth_gasPrice").Return(nil).Run(func(args mock.Arguments) {
res := args.Get(1).(*hexutil.Big)
(*big.Int)(res).SetInt64(40)
})
testCfg := &gas.MockGasEstimatorConfig{BumpPercentF: 1, BumpMinF: assets.NewWei(big.NewInt(1)), BumpThresholdF: 1, LimitMultiplierF: 1}
o := gas.NewSuggestedPriceEstimator(logger.Test(t), feeEstimatorClient, testCfg, l1Oracle)
servicetest.RunHealthy(t, o)
gasPrice, chainSpecificGasLimit, err := o.BumpLegacyGas(tests.Context(t), assets.NewWeiI(10), gasLimit, maxGasPrice, nil)
require.NoError(t, err)
assert.Equal(t, assets.NewWeiI(41), gasPrice)
assert.Equal(t, gasLimit, chainSpecificGasLimit)
})`
$DIR/core/chains/evm/gas/suggested_price_estimator_test.go: `.NewFeeEstimatorClient(t)`
$DIR/core/chains/evm/gas/suggested_price_estimator_test.go: `.NewL1Oracle(t)`
$DIR/core/chains/evm/gas/suggested_price_estimator_test.go: `.On("CallContext", mock.Anything, mock.Anything, "eth_gasPrice")`
$DIR/core/chains/evm/gas/suggested_price_estimator_test.go: `.Return(nil)`
$DIR/core/chains/evm/gas/suggested_price_estimator_test.go: `.Run(func(args mock.Arguments) {
res := args.Get(1).(*hexutil.Big)
(*big.Int)(res).SetInt64(40)
})`
$DIR/core/chains/evm/gas/suggested_price_estimator_test.go: `.Get(1)`
$DIR/core/chains/evm/gas/suggested_price_estimator_test.go: `.SetInt64(40)`
$DIR/core/chains/evm/gas/suggested_price_estimator_test.go: `.NewWei(big.NewInt(1))`
$DIR/core/chains/evm/gas/suggested_price_estimator_test.go: `.NewInt(1)`
$DIR/core/chains/evm/gas/suggested_price_estimator_test.go: `.NewSuggestedPriceEstimator(logger.Test(t), feeEstimatorClient, testCfg, l1Oracle)`
$DIR/core/chains/evm/gas/suggested_price_estimator_test.go: `.Test(t)`
$DIR/core/chains/evm/gas/suggested_price_estimator_test.go: `.RunHealthy(t, o)`
$DIR/core/chains/evm/gas/suggested_price_estimator_test.go: `.BumpLegacyGas(tests.Context(t), assets.NewWeiI(10), gasLimit, maxGasPrice, nil)`
$DIR/core/chains/evm/gas/suggested_price_estimator_test.go: `.Context(t)`
$DIR/core/chains/evm/gas/suggested_price_estimator_test.go: `.NewWeiI(10)`
$DIR/core/chains/evm/gas/suggested_price_estimator_test.go: `.Run("calling BumpLegacyGas on started estimator returns original price when lower than previous", func(t *testing.T) {
feeEstimatorClient := mocks.NewFeeEstimatorClient(t)
l1Oracle := rollupMocks.NewL1Oracle(t)
feeEstimatorClient.On("CallContext", mock.Anything, mock.Anything, "eth_gasPrice").Return(nil).Run(func(args mock.Arguments) {
res := args.Get(1).(*hexutil.Big)
(*big.Int)(res).SetInt64(5)
})
o := gas.NewSuggestedPriceEstimator(logger.Test(t), feeEstimatorClient, cfg, l1Oracle)
servicetest.RunHealthy(t, o)
gasPrice, chainSpecificGasLimit, err := o.BumpLegacyGas(tests.Context(t), assets.NewWeiI(10), gasLimit, maxGasPrice, nil)
require.NoError(t, err)
assert.Equal(t, assets.NewWeiI(10), gasPrice)
assert.Equal(t, gasLimit, chainSpecificGasLimit)
})`
$DIR/core/chains/evm/gas/suggested_price_estimator_test.go: `.NewFeeEstimatorClient(t)`
$DIR/core/chains/evm/gas/suggested_price_estimator_test.go: `.NewL1Oracle(t)`
$DIR/core/chains/evm/gas/suggested_price_estimator_test.go: `.On("CallContext", mock.Anything, mock.Anything, "eth_gasPrice")`
$DIR/core/chains/evm/gas/suggested_price_estimator_test.go: `.Return(nil)`
$DIR/core/chains/evm/gas/suggested_price_estimator_test.go: `.Run(func(args mock.Arguments) {
res := args.Get(1).(*hexutil.Big)
(*big.Int)(res).SetInt64(5)
})`
$DIR/core/chains/evm/gas/suggested_price_estimator_test.go: `.Get(1)`
$DIR/core/chains/evm/gas/suggested_price_estimator_test.go: `.SetInt64(5)`
$DIR/core/chains/evm/gas/suggested_price_estimator_test.go: `.NewSuggestedPriceEstimator(logger.Test(t), feeEstimatorClient, cfg, l1Oracle)`
$DIR/core/chains/evm/gas/suggested_price_estimator_test.go: `.Test(t)`
$DIR/core/chains/evm/gas/suggested_price_estimator_test.go: `.RunHealthy(t, o)`
$DIR/core/chains/evm/gas/suggested_price_estimator_test.go: `.BumpLegacyGas(tests.Context(t), assets.NewWeiI(10), gasLimit, maxGasPrice, nil)`
$DIR/core/chains/evm/gas/suggested_price_estimator_test.go: `.Context(t)`
$DIR/core/chains/evm/gas/suggested_price_estimator_test.go: `.NewWeiI(10)`
$DIR/core/chains/evm/gas/suggested_price_estimator_test.go: `.Run("calling BumpLegacyGas on started estimator returns error, suggested gas price is higher than max gas price", func(t *testing.T) {
feeEstimatorClient := mocks.NewFeeEstimatorClient(t)
l1Oracle := rollupMocks.NewL1Oracle(t)
o := gas.NewSuggestedPriceEstimator(logger.Test(t), feeEstimatorClient, cfg, l1Oracle)
feeEstimatorClient.On("CallContext", mock.Anything, mock.Anything, "eth_gasPrice").Return(nil).Run(func(args mock.Arguments) {
res := args.Get(1).(*hexutil.Big)
(*big.Int)(res).SetInt64(42)
})
servicetest.RunHealthy(t, o)
gasPrice, chainSpecificGasLimit, err := o.BumpLegacyGas(tests.Context(t), assets.NewWeiI(10), gasLimit, assets.NewWeiI(40), nil)
require.Error(t, err)
assert.EqualError(t, err, "estimated gas price: 42 wei is greater than the maximum gas price configured: 40 wei")
assert.Nil(t, gasPrice)
assert.Equal(t, uint64(0), chainSpecificGasLimit)
})`
$DIR/core/chains/evm/gas/suggested_price_estimator_test.go: `.NewFeeEstimatorClient(t)`
$DIR/core/chains/evm/gas/suggested_price_estimator_test.go: `.NewL1Oracle(t)`
$DIR/core/chains/evm/gas/suggested_price_estimator_test.go: `.NewSuggestedPriceEstimator(logger.Test(t), feeEstimatorClient, cfg, l1Oracle)`
$DIR/core/chains/evm/gas/suggested_price_estimator_test.go: `.Test(t)`
$DIR/core/chains/evm/gas/suggested_price_estimator_test.go: `.On("CallContext", mock.Anything, mock.Anything, "eth_gasPrice")`
$DIR/core/chains/evm/gas/suggested_price_estimator_test.go: `.Return(nil)`
$DIR/core/chains/evm/gas/suggested_price_estimator_test.go: `.Run(func(args mock.Arguments) {
res := args.Get(1).(*hexutil.Big)
(*big.Int)(res).SetInt64(42)
})`
$DIR/core/chains/evm/gas/suggested_price_estimator_test.go: `.Get(1)`
$DIR/core/chains/evm/gas/suggested_price_estimator_test.go: `.SetInt64(42)`
$DIR/core/chains/evm/gas/suggested_price_estimator_test.go: `.RunHealthy(t, o)`
$DIR/core/chains/evm/gas/suggested_price_estimator_test.go: `.BumpLegacyGas(tests.Context(t), assets.NewWeiI(10), gasLimit, assets.NewWeiI(40), nil)`
$DIR/core/chains/evm/gas/suggested_price_estimator_test.go: `.Context(t)`
$DIR/core/chains/evm/gas/suggested_price_estimator_test.go: `.NewWeiI(10)`
$DIR/core/chains/evm/gas/suggested_price_estimator_test.go: `.NewWeiI(40)`
$DIR/core/chains/evm/gas/suggested_price_estimator_test.go: `.Run("calling BumpLegacyGas on started estimator returns max gas price when suggested price under max but the buffer exceeds it", func(t *testing.T) {
feeEstimatorClient := mocks.NewFeeEstimatorClient(t)
l1Oracle := rollupMocks.NewL1Oracle(t)
o := gas.NewSuggestedPriceEstimator(logger.Test(t), feeEstimatorClient, cfg, l1Oracle)
feeEstimatorClient.On("CallContext", mock.Anything, mock.Anything, "eth_gasPrice").Return(nil).Run(func(args mock.Arguments) {
res := args.Get(1).(*hexutil.Big)
(*big.Int)(res).SetInt64(39)
})
servicetest.RunHealthy(t, o)
gasPrice, chainSpecificGasLimit, err := o.BumpLegacyGas(tests.Context(t), assets.NewWeiI(10), gasLimit, assets.NewWeiI(40), nil)
require.NoError(t, err)
assert.Equal(t, assets.NewWeiI(40), gasPrice)
assert.Equal(t, gasLimit, chainSpecificGasLimit)
})`
$DIR/core/chains/evm/gas/suggested_price_estimator_test.go: `.NewFeeEstimatorClient(t)`
$DIR/core/chains/evm/gas/suggested_price_estimator_test.go: `.NewL1Oracle(t)`
$DIR/core/chains/evm/gas/suggested_price_estimator_test.go: `.NewSuggestedPriceEstimator(logger.Test(t), feeEstimatorClient, cfg, l1Oracle)`
$DIR/core/chains/evm/gas/suggested_price_estimator_test.go: `.Test(t)`
$DIR/core/chains/evm/gas/suggested_price_estimator_test.go: `.On("CallContext", mock.Anything, mock.Anything, "eth_gasPrice")`
$DIR/core/chains/evm/gas/suggested_price_estimator_test.go: `.Return(nil)`
$DIR/core/chains/evm/gas/suggested_price_estimator_test.go: `.Run(func(args mock.Arguments) {
res := args.Get(1).(*hexutil.Big)
(*big.Int)(res).SetInt64(39)
})`
$DIR/core/chains/evm/gas/suggested_price_estimator_test.go: `.Get(1)`
$DIR/core/chains/evm/gas/suggested_price_estimator_test.go: `.SetInt64(39)`
$DIR/core/chains/evm/gas/suggested_price_estimator_test.go: `.RunHealthy(t, o)`
$DIR/core/chains/evm/gas/suggested_price_estimator_test.go: `.BumpLegacyGas(tests.Context(t), assets.NewWeiI(10), gasLimit, assets.NewWeiI(40), nil)`
$DIR/core/chains/evm/gas/suggested_price_estimator_test.go: `.Context(t)`
$DIR/core/chains/evm/gas/suggested_price_estimator_test.go: `.NewWeiI(10)`
$DIR/core/chains/evm/gas/suggested_price_estimator_test.go: `.NewWeiI(40)`
$DIR/core/chains/evm/gas/suggested_price_estimator_test.go: `.Run("calling BumpLegacyGas on started estimator if initial call failed returns error", func(t *testing.T) {
feeEstimatorClient := mocks.NewFeeEstimatorClient(t)
l1Oracle := rollupMocks.NewL1Oracle(t)
o := gas.NewSuggestedPriceEstimator(logger.Test(t), feeEstimatorClient, cfg, l1Oracle)
feeEstimatorClient.On("CallContext", mock.Anything, mock.Anything, "eth_gasPrice").Return(pkgerrors.New("kaboom"))
servicetest.RunHealthy(t, o)
_, _, err := o.BumpLegacyGas(tests.Context(t), assets.NewWeiI(10), gasLimit, maxGasPrice, nil)
assert.EqualError(t, err, "failed to refresh and return gas; gas price not set")
})`
$DIR/core/chains/evm/gas/suggested_price_estimator_test.go: `.NewFeeEstimatorClient(t)`
$DIR/core/chains/evm/gas/suggested_price_estimator_test.go: `.NewL1Oracle(t)`
$DIR/core/chains/evm/gas/suggested_price_estimator_test.go: `.NewSuggestedPriceEstimator(logger.Test(t), feeEstimatorClient, cfg, l1Oracle)`
$DIR/core/chains/evm/gas/suggested_price_estimator_test.go: `.Test(t)`
$DIR/core/chains/evm/gas/suggested_price_estimator_test.go: `.On("CallContext", mock.Anything, mock.Anything, "eth_gasPrice")`
$DIR/core/chains/evm/gas/suggested_price_estimator_test.go: `.Return(pkgerrors.New("kaboom"))`
$DIR/core/chains/evm/gas/suggested_price_estimator_test.go: `.New("kaboom")`
$DIR/core/chains/evm/gas/suggested_price_estimator_test.go: `.RunHealthy(t, o)`
$DIR/core/chains/evm/gas/suggested_price_estimator_test.go: `.BumpLegacyGas(tests.Context(t), assets.NewWeiI(10), gasLimit, maxGasPrice, nil)`
$DIR/core/chains/evm/gas/suggested_price_estimator_test.go: `.Context(t)`
$DIR/core/chains/evm/gas/suggested_price_estimator_test.go: `.NewWeiI(10)`
$DIR/core/chains/evm/gas/suggested_price_estimator_test.go: `.NewFeeEstimatorClient(t)`
$DIR/core/chains/evm/gas/suggested_price_estimator_test.go: `.NewL1Oracle(t)`
$DIR/core/chains/evm/gas/suggested_price_estimator_test.go: `.NewSuggestedPriceEstimator(logger.Test(t), feeEstimatorClient, cfg, l1Oracle)`
$DIR/core/chains/evm/gas/suggested_price_estimator_test.go: `.Test(t)`
$DIR/core/chains/evm/gas/suggested_price_estimator_test.go: `.On("CallContext", mock.Anything, mock.Anything, "eth_gasPrice")`
$DIR/core/chains/evm/gas/suggested_price_estimator_test.go: `.Return(nil)`
$DIR/core/chains/evm/gas/suggested_price_estimator_test.go: `.Run(func(args mock.Arguments) {
res := args.Get(1).(*hexutil.Big)
(*big.Int)(res).SetInt64(40)
})`
$DIR/core/chains/evm/gas/suggested_price_estimator_test.go: `.Get(1)`
$DIR/core/chains/evm/gas/suggested_price_estimator_test.go: `.SetInt64(40)`
$DIR/core/chains/evm/gas/suggested_price_estimator_test.go: `.Once()`
$DIR/core/chains/evm/gas/suggested_price_estimator_test.go: `.On("CallContext", mock.Anything, mock.Anything, "eth_gasPrice")`
$DIR/core/chains/evm/gas/suggested_price_estimator_test.go: `.Return(pkgerrors.New("kaboom"))`
$DIR/core/chains/evm/gas/suggested_price_estimator_test.go: `.New("kaboom")`
$DIR/core/chains/evm/gas/suggested_price_estimator_test.go: `.RunHealthy(t, o)`
$DIR/core/chains/evm/gas/suggested_price_estimator_test.go: `.BumpLegacyGas(tests.Context(t), assets.NewWeiI(10), gasLimit, maxGasPrice, nil)`
$DIR/core/chains/evm/gas/suggested_price_estimator_test.go: `.Context(t)`
$DIR/core/chains/evm/gas/suggested_price_estimator_test.go: `.NewWeiI(10)`
$DIR/core/chains/evm/headtracker/head_broadcaster_test.go: `c.HeadTracker.SamplingInterval = &commonconfig.Duration{}`
$DIR/core/chains/evm/headtracker/head_broadcaster_test.go: `ethClient.On("SubscribeNewHead", mock.Anything, mock.Anything).
Run(func(args mock.Arguments) {
chchHeaders <- args.Get(1).(chan<- *evmtypes.Head)
}).
Return(sub, nil)`
$DIR/core/chains/evm/headtracker/head_broadcaster_test.go: `chchHeaders <- args.Get(1).(chan<- *evmtypes.Head)`
$DIR/core/chains/evm/headtracker/head_broadcaster_test.go: `ethClient.On("HeadByNumber", mock.Anything, mock.Anything).Return(testutils.Head(1), nil).Times(4)`
$DIR/core/chains/evm/headtracker/head_broadcaster_test.go: `sub.On("Unsubscribe").Return()`
$DIR/core/chains/evm/headtracker/head_broadcaster_test.go: `sub.On("Err").Return(nil)`
$DIR/core/chains/evm/headtracker/head_broadcaster_test.go: `servicetest.Run(t, mailMon)`
$DIR/core/chains/evm/headtracker/head_broadcaster_test.go: `servicetest.Run(t, hb)`
$DIR/core/chains/evm/headtracker/head_broadcaster_test.go: `servicetest.Run(t, ht)`
$DIR/core/chains/evm/headtracker/head_broadcaster_test.go: `headers <- &h`
$DIR/core/chains/evm/headtracker/head_broadcaster_test.go: `g.Eventually(checker1.OnNewLongestChainCount).Should(gomega.Equal(int32(1)))`
$DIR/core/chains/evm/headtracker/head_broadcaster_test.go: `unsubscribe1()`
$DIR/core/chains/evm/headtracker/head_broadcaster_test.go: `headers <- &evmtypes.Head{Number: 2, Hash: utils.NewHash(), ParentHash: h.Hash, EVMChainID: big.New(testutils.FixtureChainID)}`
$DIR/core/chains/evm/headtracker/head_broadcaster_test.go: `waitHeadBroadcasterToStart(t, broadcaster)`
$DIR/core/chains/evm/headtracker/head_broadcaster_test.go: `broadcaster.BroadcastNewLongestChain(testutils.Head(1))`
$DIR/core/chains/evm/headtracker/head_broadcaster_test.go: `g.Eventually(subscriber1.OnNewLongestChainCount).Should(gomega.Equal(int32(1)))`
$DIR/core/chains/evm/headtracker/head_broadcaster_test.go: `unsubscribe1()`
$DIR/core/chains/evm/headtracker/head_broadcaster_test.go: `broadcaster.BroadcastNewLongestChain(testutils.Head(2))`
$DIR/core/chains/evm/headtracker/head_broadcaster_test.go: `g.Eventually(subscriber2.OnNewLongestChainCount).Should(gomega.Equal(int32(2)))`
$DIR/core/chains/evm/headtracker/head_broadcaster_test.go: `unsubscribe2()`
$DIR/core/chains/evm/headtracker/head_broadcaster_test.go: `broadcaster.BroadcastNewLongestChain(testutils.Head(1))`
$DIR/core/chains/evm/headtracker/head_broadcaster_test.go: `g.Eventually(subscriber3.OnNewLongestChainCount).Should(gomega.Equal(int32(1)))`
$DIR/core/chains/evm/headtracker/head_broadcaster_test.go: `unsubscribe3()`
$DIR/core/chains/evm/headtracker/head_broadcaster_test.go: `broadcaster.BroadcastNewLongestChain(testutils.Head(0))`
$DIR/core/chains/evm/headtracker/head_broadcaster_test.go: `err = broadcaster.Close()`
$DIR/core/chains/evm/headtracker/head_broadcaster_test.go: `waitHeadBroadcasterToStart(t, broadcaster)`
$DIR/core/chains/evm/headtracker/head_broadcaster_test.go: `broadcaster.BroadcastNewLongestChain(testutils.Head(1))`
$DIR/core/chains/evm/headtracker/head_broadcaster_test.go: `slowAwaiter.AwaitOrFail(t, tests.WaitTimeout(t))`
$DIR/core/chains/evm/headtracker/head_broadcaster_test.go: `fastAwaiter.AwaitOrFail(t, tests.WaitTimeout(t))`
$DIR/core/chains/evm/headtracker/head_broadcaster_test.go: `unsubscribe1()`
$DIR/core/chains/evm/headtracker/head_broadcaster_test.go: `unsubscribe2()`
$DIR/core/chains/evm/headtracker/head_broadcaster_test.go: `err = broadcaster.Close()`
$DIR/core/chains/evm/headtracker/head_broadcaster_test.go: `.NewWithT(t)`
$DIR/core/chains/evm/headtracker/head_broadcaster_test.go: `.NewTestChainScopedConfig(t, func(c *toml.EVMConfig) {
c.HeadTracker.SamplingInterval = &commonconfig.Duration{}
})`
$DIR/core/chains/evm/headtracker/head_broadcaster_test.go: `.NewSqlxDB(t)`
$DIR/core/chains/evm/headtracker/head_broadcaster_test.go: `.Test(t)`
$DIR/core/chains/evm/headtracker/head_broadcaster_test.go: `.NewSubscription(t)`
$DIR/core/chains/evm/headtracker/head_broadcaster_test.go: `.NewEthClientMockWithDefaultChain(t)`
$DIR/core/chains/evm/headtracker/head_broadcaster_test.go: `.On("SubscribeNewHead", mock.Anything, mock.Anything)`
$DIR/core/chains/evm/headtracker/head_broadcaster_test.go: `.
Run(func(args mock.Arguments) {
chchHeaders <- args.Get(1).(chan<- *evmtypes.Head)
})`
$DIR/core/chains/evm/headtracker/head_broadcaster_test.go: `.Get(1)`
$DIR/core/chains/evm/headtracker/head_broadcaster_test.go: `.
Return(sub, nil)`
$DIR/core/chains/evm/headtracker/head_broadcaster_test.go: `.On("HeadByNumber", mock.Anything, mock.Anything)`
$DIR/core/chains/evm/headtracker/head_broadcaster_test.go: `.Return(testutils.Head(1), nil)`
$DIR/core/chains/evm/headtracker/head_broadcaster_test.go: `.Head(1)`
$DIR/core/chains/evm/headtracker/head_broadcaster_test.go: `.Times(4)`
$DIR/core/chains/evm/headtracker/head_broadcaster_test.go: `.On("Unsubscribe")`
$DIR/core/chains/evm/headtracker/head_broadcaster_test.go: `.Return()`
$DIR/core/chains/evm/headtracker/head_broadcaster_test.go: `.On("Err")`
$DIR/core/chains/evm/headtracker/head_broadcaster_test.go: `.Return(nil)`
$DIR/core/chains/evm/headtracker/head_broadcaster_test.go: `.NewORM(*ethClient.ConfiguredChainID(), db)`
$DIR/core/chains/evm/headtracker/head_broadcaster_test.go: `.ConfiguredChainID()`
$DIR/core/chains/evm/headtracker/head_broadcaster_test.go: `.NewHeadSaver(logger, orm, evmCfg.EVM(), evmCfg.EVM().HeadTracker())`
$DIR/core/chains/evm/headtracker/head_broadcaster_test.go: `.EVM()`
$DIR/core/chains/evm/headtracker/head_broadcaster_test.go: `.EVM()`
$DIR/core/chains/evm/headtracker/head_broadcaster_test.go: `.HeadTracker()`
$DIR/core/chains/evm/headtracker/head_broadcaster_test.go: `.NewMonitor(t)`
$DIR/core/chains/evm/headtracker/head_broadcaster_test.go: `.Run(t, mailMon)`
$DIR/core/chains/evm/headtracker/head_broadcaster_test.go: `.NewHeadBroadcaster(logger)`
$DIR/core/chains/evm/headtracker/head_broadcaster_test.go: `.Run(t, hb)`
$DIR/core/chains/evm/headtracker/head_broadcaster_test.go: `.NewHeadTracker(logger, ethClient, evmCfg.EVM(), evmCfg.EVM().HeadTracker(), hb, hs, mailMon)`
$DIR/core/chains/evm/headtracker/head_broadcaster_test.go: `.EVM()`
$DIR/core/chains/evm/headtracker/head_broadcaster_test.go: `.EVM()`
$DIR/core/chains/evm/headtracker/head_broadcaster_test.go: `.HeadTracker()`
$DIR/core/chains/evm/headtracker/head_broadcaster_test.go: `.Run(t, ht)`
$DIR/core/chains/evm/headtracker/head_broadcaster_test.go: `.Subscribe(checker1)`
$DIR/core/chains/evm/headtracker/head_broadcaster_test.go: `.NewHash()`
$DIR/core/chains/evm/headtracker/head_broadcaster_test.go: `.NewHash()`
$DIR/core/chains/evm/headtracker/head_broadcaster_test.go: `.New(testutils.FixtureChainID)`
$DIR/core/chains/evm/headtracker/head_broadcaster_test.go: `.Eventually(checker1.OnNewLongestChainCount)`
$DIR/core/chains/evm/headtracker/head_broadcaster_test.go: `.Should(gomega.Equal(int32(1)))`
$DIR/core/chains/evm/headtracker/head_broadcaster_test.go: `.Equal(int32(1))`
$DIR/core/chains/evm/headtracker/head_broadcaster_test.go: `.Subscribe(checker2)`
$DIR/core/chains/evm/headtracker/head_broadcaster_test.go: `.NewHash()`
$DIR/core/chains/evm/headtracker/head_broadcaster_test.go: `.New(testutils.FixtureChainID)`
$DIR/core/chains/evm/headtracker/head_broadcaster_test.go: `.Eventually(checker2.OnNewLongestChainCount)`
$DIR/core/chains/evm/headtracker/head_broadcaster_test.go: `.Equal(int32(1))`
$DIR/core/chains/evm/headtracker/head_broadcaster_test.go: `.NewWithT(t)`
$DIR/core/chains/evm/headtracker/head_broadcaster_test.go: `.Test(t)`
$DIR/core/chains/evm/headtracker/head_broadcaster_test.go: `.NewHeadBroadcaster(lggr)`
$DIR/core/chains/evm/headtracker/head_broadcaster_test.go: `.Start(tests.Context(t))`
$DIR/core/chains/evm/headtracker/head_broadcaster_test.go: `.Context(t)`
$DIR/core/chains/evm/headtracker/head_broadcaster_test.go: `.Subscribe(subscriber1)`
$DIR/core/chains/evm/headtracker/head_broadcaster_test.go: `.Subscribe(subscriber2)`
$DIR/core/chains/evm/headtracker/head_broadcaster_test.go: `.BroadcastNewLongestChain(testutils.Head(1))`
$DIR/core/chains/evm/headtracker/head_broadcaster_test.go: `.Head(1)`
$DIR/core/chains/evm/headtracker/head_broadcaster_test.go: `.Eventually(subscriber1.OnNewLongestChainCount)`
$DIR/core/chains/evm/headtracker/head_broadcaster_test.go: `.Should(gomega.Equal(int32(1)))`
$DIR/core/chains/evm/headtracker/head_broadcaster_test.go: `.Equal(int32(1))`
$DIR/core/chains/evm/headtracker/head_broadcaster_test.go: `.BroadcastNewLongestChain(testutils.Head(2))`
$DIR/core/chains/evm/headtracker/head_broadcaster_test.go: `.Head(2)`
$DIR/core/chains/evm/headtracker/head_broadcaster_test.go: `.Eventually(subscriber2.OnNewLongestChainCount)`
$DIR/core/chains/evm/headtracker/head_broadcaster_test.go: `.Should(gomega.Equal(int32(2)))`
$DIR/core/chains/evm/headtracker/head_broadcaster_test.go: `.Equal(int32(2))`
$DIR/core/chains/evm/headtracker/head_broadcaster_test.go: `.Subscribe(subscriber3)`
$DIR/core/chains/evm/headtracker/head_broadcaster_test.go: `.BroadcastNewLongestChain(testutils.Head(1))`
$DIR/core/chains/evm/headtracker/head_broadcaster_test.go: `.Head(1)`
$DIR/core/chains/evm/headtracker/head_broadcaster_test.go: `.Eventually(subscriber3.OnNewLongestChainCount)`
$DIR/core/chains/evm/headtracker/head_broadcaster_test.go: `.Should(gomega.Equal(int32(1)))`
$DIR/core/chains/evm/headtracker/head_broadcaster_test.go: `.Equal(int32(1))`
$DIR/core/chains/evm/headtracker/head_broadcaster_test.go: `.BroadcastNewLongestChain(testutils.Head(0))`
$DIR/core/chains/evm/headtracker/head_broadcaster_test.go: `.Head(0)`
$DIR/core/chains/evm/headtracker/head_broadcaster_test.go: `.OnNewLongestChainCount()`
$DIR/core/chains/evm/headtracker/head_broadcaster_test.go: `.Test(t)`
$DIR/core/chains/evm/headtracker/head_broadcaster_test.go: `.NewHeadBroadcaster(lggr)`
$DIR/core/chains/evm/headtracker/head_broadcaster_test.go: `.Start(tests.Context(t))`
$DIR/core/chains/evm/headtracker/head_broadcaster_test.go: `.Context(t)`
$DIR/core/chains/evm/headtracker/head_broadcaster_test.go: `.NewAwaiter()`
$DIR/core/chains/evm/headtracker/head_broadcaster_test.go: `.NewAwaiter()`
$DIR/core/chains/evm/headtracker/head_broadcaster_test.go: `.Subscribe(slow)`
$DIR/core/chains/evm/headtracker/head_broadcaster_test.go: `.Subscribe(fast)`
$DIR/core/chains/evm/headtracker/head_broadcaster_test.go: `.BroadcastNewLongestChain(testutils.Head(1))`
$DIR/core/chains/evm/headtracker/head_broadcaster_test.go: `.Head(1)`
$DIR/core/chains/evm/headtracker/head_broadcaster_test.go: `.AwaitOrFail(t, tests.WaitTimeout(t))`
$DIR/core/chains/evm/headtracker/head_broadcaster_test.go: `.WaitTimeout(t)`
$DIR/core/chains/evm/headtracker/head_broadcaster_test.go: `.AwaitOrFail(t, tests.WaitTimeout(t))`
$DIR/core/chains/evm/headtracker/head_broadcaster_test.go: `.WaitTimeout(t)`
$DIR/core/chains/evm/headtracker/head_listener_test.go: `c.NoNewHeadsThreshold = &commonconfig.Duration{}`
$DIR/core/chains/evm/headtracker/head_listener_test.go: `headCount.Add(1)`
$DIR/core/chains/evm/headtracker/head_listener_test.go: `ethClient.On("SubscribeNewHead", mock.Anything, mock.AnythingOfType("chan<- *types.Head")).Return(sub, nil).Once().Run(func(args mock.Arguments) {
chHeads = args.Get(1).(chan<- *evmtypes.Head)
subscribeAwaiter.ItHappened()
})`
$DIR/core/chains/evm/headtracker/head_listener_test.go: `chHeads = args.Get(1).(chan<- *evmtypes.Head)`
$DIR/core/chains/evm/headtracker/head_listener_test.go: `subscribeAwaiter.ItHappened()`
$DIR/core/chains/evm/headtracker/head_listener_test.go: `sub.On("Err").Return(chSubErr)`
$DIR/core/chains/evm/headtracker/head_listener_test.go: `sub.On("Unsubscribe").Return().Once().Run(func(mock.Arguments) {
unsubscribeAwaiter.ItHappened()
close(chHeads)
close(chErr)
})`
$DIR/core/chains/evm/headtracker/head_listener_test.go: `unsubscribeAwaiter.ItHappened()`
$DIR/core/chains/evm/headtracker/head_listener_test.go: `close(chHeads)`
$DIR/core/chains/evm/headtracker/head_listener_test.go: `close(chErr)`
$DIR/core/chains/evm/headtracker/head_listener_test.go: `doneAwaiter.ItHappened()`
$DIR/core/chains/evm/headtracker/head_listener_test.go: `go hl.ListenForNewHeads(handler, done)`
$DIR/core/chains/evm/headtracker/head_listener_test.go: `subscribeAwaiter.AwaitOrFail(t, tests.WaitTimeout(t))`
$DIR/core/chains/evm/headtracker/head_listener_test.go: `chHeads <- testutils.Head(0)`
$DIR/core/chains/evm/headtracker/head_listener_test.go: `chHeads <- testutils.Head(1)`
$DIR/core/chains/evm/headtracker/head_listener_test.go: `chHeads <- testutils.Head(2)`
$DIR/core/chains/evm/headtracker/head_listener_test.go: `close(chStop)`
$DIR/core/chains/evm/headtracker/head_listener_test.go: `doneAwaiter.AwaitOrFail(t)`
$DIR/core/chains/evm/headtracker/head_listener_test.go: `unsubscribeAwaiter.AwaitOrFail(t)`
$DIR/core/chains/evm/headtracker/head_listener_test.go: `c.NoNewHeadsThreshold = commonconfig.MustNewDuration(time.Second)`
$DIR/core/chains/evm/headtracker/head_listener_test.go: `firstHeadAwaiter.ItHappened()`
$DIR/core/chains/evm/headtracker/head_listener_test.go: `ethClient.On("SubscribeNewHead", mock.Anything, mock.AnythingOfType("chan<- *types.Head")).Return(sub, nil).Once().Run(func(args mock.Arguments) {
chHeads = args.Get(1).(chan<- *evmtypes.Head)
subscribeAwaiter.ItHappened()
})`
$DIR/core/chains/evm/headtracker/head_listener_test.go: `chHeads = args.Get(1).(chan<- *evmtypes.Head)`
$DIR/core/chains/evm/headtracker/head_listener_test.go: `subscribeAwaiter.ItHappened()`
$DIR/core/chains/evm/headtracker/head_listener_test.go: `sub.On("Err").Return(chSubErr)`
$DIR/core/chains/evm/headtracker/head_listener_test.go: `sub.On("Unsubscribe").Return().Once().Run(func(_ mock.Arguments) {
close(chHeads)
close(chErr)
})`
$DIR/core/chains/evm/headtracker/head_listener_test.go: `close(chHeads)`
$DIR/core/chains/evm/headtracker/head_listener_test.go: `close(chErr)`
$DIR/core/chains/evm/headtracker/head_listener_test.go: `doneAwaiter.ItHappened()`
$DIR/core/chains/evm/headtracker/head_listener_test.go: `go hl.ListenForNewHeads(handler, done)`
$DIR/core/chains/evm/headtracker/head_listener_test.go: `subscribeAwaiter.AwaitOrFail(t, tests.WaitTimeout(t))`
$DIR/core/chains/evm/headtracker/head_listener_test.go: `chHeads <- testutils.Head(0)`
$DIR/core/chains/evm/headtracker/head_listener_test.go: `firstHeadAwaiter.AwaitOrFail(t)`
$DIR/core/chains/evm/headtracker/head_listener_test.go: `time.Sleep(time.Second * 2)`
$DIR/core/chains/evm/headtracker/head_listener_test.go: `close(chStop)`
$DIR/core/chains/evm/headtracker/head_listener_test.go: `t.Run(test.name, func(t *testing.T) {
l := logger.Test(t)
ethClient := testutils.NewEthClientMockWithDefaultChain(t)
evmcfg := testutils.NewTestChainScopedConfig(t, nil)
chStop := make(chan struct{})
hl := headtracker.NewHeadListener(l, ethClient, evmcfg.EVM(), chStop)
hnhCalled := make(chan *evmtypes.Head)
hnh := func(_ context.Context, header *evmtypes.Head) error {
hnhCalled <- header
return nil
}
doneAwaiter := testutils.NewAwaiter()
done := doneAwaiter.ItHappened
chSubErrTest := make(chan error)
var chSubErr <-chan error = chSubErrTest
sub := commonmocks.NewSubscription(t)
// sub.Err is called twice because we enter the select loop two times: once
// initially and once again after exactly one head has been received
sub.On("Err").Return(chSubErr).Twice()
subscribeAwaiter := testutils.NewAwaiter()
var headsCh chan<- *evmtypes.Head
// Initial subscribe
ethClient.On("SubscribeNewHead", mock.Anything, mock.AnythingOfType("chan<- *types.Head")).Return(sub, nil).Once().Run(func(args mock.Arguments) {
headsCh = args.Get(1).(chan<- *evmtypes.Head)
subscribeAwaiter.ItHappened()
})
go func() {
hl.ListenForNewHeads(hnh, done)
}()
// Put a head on the channel to ensure we test all code paths
subscribeAwaiter.AwaitOrFail(t, tests.WaitTimeout(t))
head := testutils.Head(0)
headsCh <- head
h := <-hnhCalled
assert.Equal(t, head, h)
// Expect a call to unsubscribe on error
sub.On("Unsubscribe").Once().Run(func(_ mock.Arguments) {
close(headsCh)
// geth guarantees that Unsubscribe closes the errors channel
if !test.closeErr {
close(chSubErrTest)
}
})
// Expect a resubscribe
chSubErrTest2 := make(chan error)
var chSubErr2 <-chan error = chSubErrTest2
sub2 := commonmocks.NewSubscription(t)
sub2.On("Err").Return(chSubErr2)
subscribeAwaiter2 := testutils.NewAwaiter()
var headsCh2 chan<- *evmtypes.Head
ethClient.On("SubscribeNewHead", mock.Anything, mock.AnythingOfType("chan<- *types.Head")).Return(sub2, nil).Once().Run(func(args mock.Arguments) {
headsCh2 = args.Get(1).(chan<- *evmtypes.Head)
subscribeAwaiter2.ItHappened()
})
// Sending test error
if test.closeErr {
close(chSubErrTest)
} else {
chSubErrTest <- test.err
}
// Wait for it to resubscribe
subscribeAwaiter2.AwaitOrFail(t, tests.WaitTimeout(t))
head2 := testutils.Head(1)
headsCh2 <- head2
h2 := <-hnhCalled
assert.Equal(t, head2, h2)
// Second call to unsubscribe on close
sub2.On("Unsubscribe").Once().Run(func(_ mock.Arguments) {
close(headsCh2)
// geth guarantees that Unsubscribe closes the errors channel
close(chSubErrTest2)
})
close(chStop)
doneAwaiter.AwaitOrFail(t)
})`
$DIR/core/chains/evm/headtracker/head_listener_test.go: `hnhCalled <- header`
$DIR/core/chains/evm/headtracker/head_listener_test.go: `sub.On("Err").Return(chSubErr).Twice()`
$DIR/core/chains/evm/headtracker/head_listener_test.go: `ethClient.On("SubscribeNewHead", mock.Anything, mock.AnythingOfType("chan<- *types.Head")).Return(sub, nil).Once().Run(func(args mock.Arguments) {
headsCh = args.Get(1).(chan<- *evmtypes.Head)
subscribeAwaiter.ItHappened()
})`
$DIR/core/chains/evm/headtracker/head_listener_test.go: `headsCh = args.Get(1).(chan<- *evmtypes.Head)`
$DIR/core/chains/evm/headtracker/head_listener_test.go: `subscribeAwaiter.ItHappened()`
$DIR/core/chains/evm/headtracker/head_listener_test.go: `hl.ListenForNewHeads(hnh, done)`
$DIR/core/chains/evm/headtracker/head_listener_test.go: `subscribeAwaiter.AwaitOrFail(t, tests.WaitTimeout(t))`
$DIR/core/chains/evm/headtracker/head_listener_test.go: `headsCh <- head`
$DIR/core/chains/evm/headtracker/head_listener_test.go: `sub.On("Unsubscribe").Once().Run(func(_ mock.Arguments) {
close(headsCh)
// geth guarantees that Unsubscribe closes the errors channel
if !test.closeErr {
close(chSubErrTest)
}
})`
$DIR/core/chains/evm/headtracker/head_listener_test.go: `close(headsCh)`
$DIR/core/chains/evm/headtracker/head_listener_test.go: `close(chSubErrTest)`
$DIR/core/chains/evm/headtracker/head_listener_test.go: `sub2.On("Err").Return(chSubErr2)`
$DIR/core/chains/evm/headtracker/head_listener_test.go: `ethClient.On("SubscribeNewHead", mock.Anything, mock.AnythingOfType("chan<- *types.Head")).Return(sub2, nil).Once().Run(func(args mock.Arguments) {
headsCh2 = args.Get(1).(chan<- *evmtypes.Head)
subscribeAwaiter2.ItHappened()
})`
$DIR/core/chains/evm/headtracker/head_listener_test.go: `headsCh2 = args.Get(1).(chan<- *evmtypes.Head)`
$DIR/core/chains/evm/headtracker/head_listener_test.go: `subscribeAwaiter2.ItHappened()`
$DIR/core/chains/evm/headtracker/head_listener_test.go: `close(chSubErrTest)`
$DIR/core/chains/evm/headtracker/head_listener_test.go: `chSubErrTest <- test.err`
$DIR/core/chains/evm/headtracker/head_listener_test.go: `subscribeAwaiter2.AwaitOrFail(t, tests.WaitTimeout(t))`
$DIR/core/chains/evm/headtracker/head_listener_test.go: `headsCh2 <- head2`
$DIR/core/chains/evm/headtracker/head_listener_test.go: `sub2.On("Unsubscribe").Once().Run(func(_ mock.Arguments) {
close(headsCh2)
// geth guarantees that Unsubscribe closes the errors channel
close(chSubErrTest2)
})`
$DIR/core/chains/evm/headtracker/head_listener_test.go: `close(headsCh2)`
$DIR/core/chains/evm/headtracker/head_listener_test.go: `close(chSubErrTest2)`
$DIR/core/chains/evm/headtracker/head_listener_test.go: `close(chStop)`
$DIR/core/chains/evm/headtracker/head_listener_test.go: `doneAwaiter.AwaitOrFail(t)`
$DIR/core/chains/evm/headtracker/head_listener_test.go: `.Test(t)`
$DIR/core/chains/evm/headtracker/head_listener_test.go: `.NewEthClientMockWithDefaultChain(t)`
$DIR/core/chains/evm/headtracker/head_listener_test.go: `.NewTestChainScopedConfig(t, func(c *toml.EVMConfig) {
c.NoNewHeadsThreshold = &commonconfig.Duration{}
})`
$DIR/core/chains/evm/headtracker/head_listener_test.go: `.NewHeadListener(lggr, ethClient, evmcfg.EVM(), chStop)`
$DIR/core/chains/evm/headtracker/head_listener_test.go: `.EVM()`
$DIR/core/chains/evm/headtracker/head_listener_test.go: `.Add(1)`
$DIR/core/chains/evm/headtracker/head_listener_test.go: `.NewAwaiter()`
$DIR/core/chains/evm/headtracker/head_listener_test.go: `.NewAwaiter()`
$DIR/core/chains/evm/headtracker/head_listener_test.go: `.NewSubscription(t)`
$DIR/core/chains/evm/headtracker/head_listener_test.go: `.On("SubscribeNewHead", mock.Anything, mock.AnythingOfType("chan<- *types.Head"))`
$DIR/core/chains/evm/headtracker/head_listener_test.go: `.AnythingOfType("chan<- *types.Head")`
$DIR/core/chains/evm/headtracker/head_listener_test.go: `.Return(sub, nil)`
$DIR/core/chains/evm/headtracker/head_listener_test.go: `.Once()`
$DIR/core/chains/evm/headtracker/head_listener_test.go: `.Run(func(args mock.Arguments) {
chHeads = args.Get(1).(chan<- *evmtypes.Head)
subscribeAwaiter.ItHappened()
})`
$DIR/core/chains/evm/headtracker/head_listener_test.go: `.Get(1)`
$DIR/core/chains/evm/headtracker/head_listener_test.go: `.ItHappened()`
$DIR/core/chains/evm/headtracker/head_listener_test.go: `.On("Err")`
$DIR/core/chains/evm/headtracker/head_listener_test.go: `.Return(chSubErr)`
$DIR/core/chains/evm/headtracker/head_listener_test.go: `.On("Unsubscribe")`
$DIR/core/chains/evm/headtracker/head_listener_test.go: `.Return()`
$DIR/core/chains/evm/headtracker/head_listener_test.go: `.Once()`
$DIR/core/chains/evm/headtracker/head_listener_test.go: `.Run(func(mock.Arguments) {
unsubscribeAwaiter.ItHappened()
close(chHeads)
close(chErr)
})`
$DIR/core/chains/evm/headtracker/head_listener_test.go: `.ItHappened()`
$DIR/core/chains/evm/headtracker/head_listener_test.go: `.NewAwaiter()`
$DIR/core/chains/evm/headtracker/head_listener_test.go: `.ItHappened()`
$DIR/core/chains/evm/headtracker/head_listener_test.go: `.ListenForNewHeads(handler, done)`
$DIR/core/chains/evm/headtracker/head_listener_test.go: `.AwaitOrFail(t, tests.WaitTimeout(t))`
$DIR/core/chains/evm/headtracker/head_listener_test.go: `.WaitTimeout(t)`
$DIR/core/chains/evm/headtracker/head_listener_test.go: `.Head(0)`
$DIR/core/chains/evm/headtracker/head_listener_test.go: `.Head(1)`
$DIR/core/chains/evm/headtracker/head_listener_test.go: `.Head(2)`
$DIR/core/chains/evm/headtracker/head_listener_test.go: `.AwaitOrFail(t)`
$DIR/core/chains/evm/headtracker/head_listener_test.go: `.AwaitOrFail(t)`
$DIR/core/chains/evm/headtracker/head_listener_test.go: `.Load()`
$DIR/core/chains/evm/headtracker/head_listener_test.go: `.Test(t)`
$DIR/core/chains/evm/headtracker/head_listener_test.go: `.NewEthClientMockWithDefaultChain(t)`
$DIR/core/chains/evm/headtracker/head_listener_test.go: `.NewTestChainScopedConfig(t, func(c *toml.EVMConfig) {
c.NoNewHeadsThreshold = commonconfig.MustNewDuration(time.Second)
})`
$DIR/core/chains/evm/headtracker/head_listener_test.go: `.MustNewDuration(time.Second)`
$DIR/core/chains/evm/headtracker/head_listener_test.go: `.NewHeadListener(lggr, ethClient, evmcfg.EVM(), chStop)`
$DIR/core/chains/evm/headtracker/head_listener_test.go: `.EVM()`
$DIR/core/chains/evm/headtracker/head_listener_test.go: `.NewAwaiter()`
$DIR/core/chains/evm/headtracker/head_listener_test.go: `.ItHappened()`
$DIR/core/chains/evm/headtracker/head_listener_test.go: `.NewAwaiter()`
$DIR/core/chains/evm/headtracker/head_listener_test.go: `.NewSubscription(t)`
$DIR/core/chains/evm/headtracker/head_listener_test.go: `.On("SubscribeNewHead", mock.Anything, mock.AnythingOfType("chan<- *types.Head"))`
$DIR/core/chains/evm/headtracker/head_listener_test.go: `.AnythingOfType("chan<- *types.Head")`
$DIR/core/chains/evm/headtracker/head_listener_test.go: `.Return(sub, nil)`
$DIR/core/chains/evm/headtracker/head_listener_test.go: `.Once()`
$DIR/core/chains/evm/headtracker/head_listener_test.go: `.Run(func(args mock.Arguments) {
chHeads = args.Get(1).(chan<- *evmtypes.Head)
subscribeAwaiter.ItHappened()
})`
$DIR/core/chains/evm/headtracker/head_listener_test.go: `.Get(1)`
$DIR/core/chains/evm/headtracker/head_listener_test.go: `.ItHappened()`
$DIR/core/chains/evm/headtracker/head_listener_test.go: `.On("Err")`
$DIR/core/chains/evm/headtracker/head_listener_test.go: `.Return(chSubErr)`
$DIR/core/chains/evm/headtracker/head_listener_test.go: `.On("Unsubscribe")`
$DIR/core/chains/evm/headtracker/head_listener_test.go: `.Return()`
$DIR/core/chains/evm/headtracker/head_listener_test.go: `.Once()`
$DIR/core/chains/evm/headtracker/head_listener_test.go: `.Run(func(_ mock.Arguments) {
close(chHeads)
close(chErr)
})`
$DIR/core/chains/evm/headtracker/head_listener_test.go: `.NewAwaiter()`
$DIR/core/chains/evm/headtracker/head_listener_test.go: `.ItHappened()`
$DIR/core/chains/evm/headtracker/head_listener_test.go: `.ListenForNewHeads(handler, done)`
$DIR/core/chains/evm/headtracker/head_listener_test.go: `.AwaitOrFail(t, tests.WaitTimeout(t))`
$DIR/core/chains/evm/headtracker/head_listener_test.go: `.WaitTimeout(t)`
$DIR/core/chains/evm/headtracker/head_listener_test.go: `.Head(0)`
$DIR/core/chains/evm/headtracker/head_listener_test.go: `.AwaitOrFail(t)`
$DIR/core/chains/evm/headtracker/head_listener_test.go: `.Sleep(time.Second * 2)`
$DIR/core/chains/evm/headtracker/head_listener_test.go: `.New("close 1006 (abnormal closure): unexpected EOF")`
$DIR/core/chains/evm/headtracker/head_listener_test.go: `.Run(test.name, func(t *testing.T) {
l := logger.Test(t)
ethClient := testutils.NewEthClientMockWithDefaultChain(t)
evmcfg := testutils.NewTestChainScopedConfig(t, nil)
chStop := make(chan struct{})
hl := headtracker.NewHeadListener(l, ethClient, evmcfg.EVM(), chStop)
hnhCalled := make(chan *evmtypes.Head)
hnh := func(_ context.Context, header *evmtypes.Head) error {
hnhCalled <- header
return nil
}
doneAwaiter := testutils.NewAwaiter()
done := doneAwaiter.ItHappened
chSubErrTest := make(chan error)
var chSubErr <-chan error = chSubErrTest
sub := commonmocks.NewSubscription(t)
// sub.Err is called twice because we enter the select loop two times: once
// initially and once again after exactly one head has been received
sub.On("Err").Return(chSubErr).Twice()
subscribeAwaiter := testutils.NewAwaiter()
var headsCh chan<- *evmtypes.Head
// Initial subscribe
ethClient.On("SubscribeNewHead", mock.Anything, mock.AnythingOfType("chan<- *types.Head")).Return(sub, nil).Once().Run(func(args mock.Arguments) {
headsCh = args.Get(1).(chan<- *evmtypes.Head)
subscribeAwaiter.ItHappened()
})
go func() {
hl.ListenForNewHeads(hnh, done)
}()
// Put a head on the channel to ensure we test all code paths
subscribeAwaiter.AwaitOrFail(t, tests.WaitTimeout(t))
head := testutils.Head(0)
headsCh <- head
h := <-hnhCalled
assert.Equal(t, head, h)
// Expect a call to unsubscribe on error
sub.On("Unsubscribe").Once().Run(func(_ mock.Arguments) {
close(headsCh)
// geth guarantees that Unsubscribe closes the errors channel
if !test.closeErr {
close(chSubErrTest)
}
})
// Expect a resubscribe
chSubErrTest2 := make(chan error)
var chSubErr2 <-chan error = chSubErrTest2
sub2 := commonmocks.NewSubscription(t)
sub2.On("Err").Return(chSubErr2)
subscribeAwaiter2 := testutils.NewAwaiter()
var headsCh2 chan<- *evmtypes.Head
ethClient.On("SubscribeNewHead", mock.Anything, mock.AnythingOfType("chan<- *types.Head")).Return(sub2, nil).Once().Run(func(args mock.Arguments) {
headsCh2 = args.Get(1).(chan<- *evmtypes.Head)
subscribeAwaiter2.ItHappened()
})
// Sending test error
if test.closeErr {
close(chSubErrTest)
} else {
chSubErrTest <- test.err
}
// Wait for it to resubscribe
subscribeAwaiter2.AwaitOrFail(t, tests.WaitTimeout(t))
head2 := testutils.Head(1)
headsCh2 <- head2
h2 := <-hnhCalled
assert.Equal(t, head2, h2)
// Second call to unsubscribe on close
sub2.On("Unsubscribe").Once().Run(func(_ mock.Arguments) {
close(headsCh2)
// geth guarantees that Unsubscribe closes the errors channel
close(chSubErrTest2)
})
close(chStop)
doneAwaiter.AwaitOrFail(t)
})`
$DIR/core/chains/evm/headtracker/head_listener_test.go: `.Test(t)`
$DIR/core/chains/evm/headtracker/head_listener_test.go: `.NewEthClientMockWithDefaultChain(t)`
$DIR/core/chains/evm/headtracker/head_listener_test.go: `.NewTestChainScopedConfig(t, nil)`
$DIR/core/chains/evm/headtracker/head_listener_test.go: `.NewHeadListener(l, ethClient, evmcfg.EVM(), chStop)`
$DIR/core/chains/evm/headtracker/head_listener_test.go: `.EVM()`
$DIR/core/chains/evm/headtracker/head_listener_test.go: `.NewAwaiter()`
$DIR/core/chains/evm/headtracker/head_listener_test.go: `.NewSubscription(t)`
$DIR/core/chains/evm/headtracker/head_listener_test.go: `.On("Err")`
$DIR/core/chains/evm/headtracker/head_listener_test.go: `.Return(chSubErr)`
$DIR/core/chains/evm/headtracker/head_listener_test.go: `.Twice()`
$DIR/core/chains/evm/headtracker/head_listener_test.go: `.NewAwaiter()`
$DIR/core/chains/evm/headtracker/head_listener_test.go: `.On("SubscribeNewHead", mock.Anything, mock.AnythingOfType("chan<- *types.Head"))`
$DIR/core/chains/evm/headtracker/head_listener_test.go: `.AnythingOfType("chan<- *types.Head")`
$DIR/core/chains/evm/headtracker/head_listener_test.go: `.Return(sub, nil)`
$DIR/core/chains/evm/headtracker/head_listener_test.go: `.Once()`
$DIR/core/chains/evm/headtracker/head_listener_test.go: `.Run(func(args mock.Arguments) {
headsCh = args.Get(1).(chan<- *evmtypes.Head)
subscribeAwaiter.ItHappened()
})`
$DIR/core/chains/evm/headtracker/head_listener_test.go: `.Get(1)`
$DIR/core/chains/evm/headtracker/head_listener_test.go: `.ItHappened()`
$DIR/core/chains/evm/headtracker/head_listener_test.go: `.ListenForNewHeads(hnh, done)`
$DIR/core/chains/evm/headtracker/head_listener_test.go: `.AwaitOrFail(t, tests.WaitTimeout(t))`
$DIR/core/chains/evm/headtracker/head_listener_test.go: `.WaitTimeout(t)`
$DIR/core/chains/evm/headtracker/head_listener_test.go: `.Head(0)`
$DIR/core/chains/evm/headtracker/head_listener_test.go: `.On("Unsubscribe")`
$DIR/core/chains/evm/headtracker/head_listener_test.go: `.Once()`
$DIR/core/chains/evm/headtracker/head_listener_test.go: `.Run(func(_ mock.Arguments) {
close(headsCh)
// geth guarantees that Unsubscribe closes the errors channel
if !test.closeErr {
close(chSubErrTest)
}
})`
$DIR/core/chains/evm/headtracker/head_listener_test.go: `.NewSubscription(t)`
$DIR/core/chains/evm/headtracker/head_listener_test.go: `.On("Err")`
$DIR/core/chains/evm/headtracker/head_listener_test.go: `.Return(chSubErr2)`
$DIR/core/chains/evm/headtracker/head_listener_test.go: `.NewAwaiter()`
$DIR/core/chains/evm/headtracker/head_listener_test.go: `.On("SubscribeNewHead", mock.Anything, mock.AnythingOfType("chan<- *types.Head"))`
$DIR/core/chains/evm/headtracker/head_listener_test.go: `.AnythingOfType("chan<- *types.Head")`
$DIR/core/chains/evm/headtracker/head_listener_test.go: `.Return(sub2, nil)`
$DIR/core/chains/evm/headtracker/head_listener_test.go: `.Once()`
$DIR/core/chains/evm/headtracker/head_listener_test.go: `.Run(func(args mock.Arguments) {
headsCh2 = args.Get(1).(chan<- *evmtypes.Head)
subscribeAwaiter2.ItHappened()
})`
$DIR/core/chains/evm/headtracker/head_listener_test.go: `.Get(1)`
$DIR/core/chains/evm/headtracker/head_listener_test.go: `.ItHappened()`
$DIR/core/chains/evm/headtracker/head_listener_test.go: `.AwaitOrFail(t, tests.WaitTimeout(t))`
$DIR/core/chains/evm/headtracker/head_listener_test.go: `.WaitTimeout(t)`
$DIR/core/chains/evm/headtracker/head_listener_test.go: `.Head(1)`
$DIR/core/chains/evm/headtracker/head_listener_test.go: `.On("Unsubscribe")`
$DIR/core/chains/evm/headtracker/head_listener_test.go: `.Once()`
$DIR/core/chains/evm/headtracker/head_listener_test.go: `.Run(func(_ mock.Arguments) {
close(headsCh2)
// geth guarantees that Unsubscribe closes the errors channel
close(chSubErrTest2)
})`
$DIR/core/chains/evm/headtracker/head_listener_test.go: `.AwaitOrFail(t)`
$DIR/core/chains/evm/headtracker/head_saver_test.go: `latest = saver.LatestChain()`
$DIR/core/chains/evm/headtracker/head_saver_test.go: `latest = saver.Chain(head.Hash)`
$DIR/core/chains/evm/headtracker/head_saver_test.go: `verifyLatestHead(latestHead)`
$DIR/core/chains/evm/headtracker/head_saver_test.go: `latestHead = saver.LatestChain()`
$DIR/core/chains/evm/headtracker/head_saver_test.go: `verifyLatestHead(latestHead)`
$DIR/core/chains/evm/headtracker/head_saver_test.go: `.Head(1)`
$DIR/core/chains/evm/headtracker/head_saver_test.go: `.Save(tests.Context(t), head)`
$DIR/core/chains/evm/headtracker/head_saver_test.go: `.Context(t)`
$DIR/core/chains/evm/headtracker/head_saver_test.go: `.LatestHeadFromDB(tests.Context(t))`
$DIR/core/chains/evm/headtracker/head_saver_test.go: `.Context(t)`
$DIR/core/chains/evm/headtracker/head_saver_test.go: `.LatestChain()`
$DIR/core/chains/evm/headtracker/head_saver_test.go: `.Chain(head.Hash)`
$DIR/core/chains/evm/headtracker/head_saver_test.go: `.NewHead(big.NewInt(int64(num)), utils.NewHash(), parent, uint64(time.Now().Unix()), ubig.NewI(0))`
$DIR/core/chains/evm/headtracker/head_saver_test.go: `.NewInt(int64(num))`
$DIR/core/chains/evm/headtracker/head_saver_test.go: `.NewHash()`
$DIR/core/chains/evm/headtracker/head_saver_test.go: `.Now()`
$DIR/core/chains/evm/headtracker/head_saver_test.go: `.Unix()`
$DIR/core/chains/evm/headtracker/head_saver_test.go: `.NewI(0)`
$DIR/core/chains/evm/headtracker/head_saver_test.go: `.NewHash()`
$DIR/core/chains/evm/headtracker/head_saver_test.go: `.IdempotentInsertHead(tests.Context(t), h)`
$DIR/core/chains/evm/headtracker/head_saver_test.go: `.Context(t)`
$DIR/core/chains/evm/headtracker/head_saver_test.go: `.Load(tests.Context(t), h5.BlockNumber())`
$DIR/core/chains/evm/headtracker/head_saver_test.go: `.Context(t)`
$DIR/core/chains/evm/headtracker/head_saver_test.go: `.BlockNumber()`
$DIR/core/chains/evm/headtracker/head_saver_test.go: `.LatestChain()`
$DIR/core/chains/evm/headtracker/head_saver_test.go: `.Chain(h2Uncle.Hash)`
$DIR/core/chains/evm/headtracker/head_saver_test.go: `.ChainLength()`
$DIR/core/chains/evm/headtracker/head_tracker_test.go: `ethClient.On("HeadByNumber", mock.Anything, (*big.Int)(nil)).Return(testutils.Head(0), nil)`
$DIR/core/chains/evm/headtracker/head_tracker_test.go: `ethClient.On("HeadByNumber", mock.Anything, big.NewInt(0)).Return(testutils.Head(0), nil)`
$DIR/core/chains/evm/headtracker/head_tracker_test.go: `ht.Start(t)`
$DIR/core/chains/evm/headtracker/head_tracker_test.go: `c.HeadTracker.HistoryDepth = ptr[uint32](100)`
$DIR/core/chains/evm/headtracker/head_tracker_test.go: `t.Run(test.name, func(t *testing.T) {
db := pgtest.NewSqlxDB(t)
config := testutils.NewTestChainScopedConfig(t, nil)
orm := headtracker.NewORM(*testutils.FixtureChainID, db)
ethClient := testutils.NewEthClientMockWithDefaultChain(t)
chStarted := make(chan struct{})
mockEth := &testutils.MockEth{
EthClient: ethClient,
}
ethClient.On("SubscribeNewHead", mock.Anything, mock.Anything).
Maybe().
Return(
func(ctx context.Context, ch chan<- *evmtypes.Head) ethereum.Subscription {
defer close(chStarted)
return mockEth.NewSub(t)
},
func(ctx context.Context, ch chan<- *evmtypes.Head) error { return nil },
)
ethClient.On("HeadByNumber", mock.Anything, (*big.Int)(nil)).Return(testutils.Head(0), nil)
fnCall := ethClient.On("HeadByNumber", mock.Anything, mock.Anything)
fnCall.RunFn = func(args mock.Arguments) {
num := args.Get(1).(*big.Int)
fnCall.ReturnArguments = mock.Arguments{testutils.Head(num.Int64()), nil}
}
if test.initial != nil {
assert.Nil(t, orm.IdempotentInsertHead(tests.Context(t), test.initial))
}
ht := createHeadTracker(t, ethClient, config.EVM(), config.EVM().HeadTracker(), orm)
ht.Start(t)
if test.toSave != nil {
err := ht.headSaver.Save(tests.Context(t), test.toSave)
assert.NoError(t, err)
}
assert.Equal(t, test.want, ht.headSaver.LatestChain().ToInt())
})`
$DIR/core/chains/evm/headtracker/head_tracker_test.go: `ethClient.On("SubscribeNewHead", mock.Anything, mock.Anything).
Maybe().
Return(
func(ctx context.Context, ch chan<- *evmtypes.Head) ethereum.Subscription {
defer close(chStarted)
return mockEth.NewSub(t)
},
func(ctx context.Context, ch chan<- *evmtypes.Head) error { return nil },
)`
$DIR/core/chains/evm/headtracker/head_tracker_test.go: `ethClient.On("HeadByNumber", mock.Anything, (*big.Int)(nil)).Return(testutils.Head(0), nil)`
$DIR/core/chains/evm/headtracker/head_tracker_test.go: `fnCall.ReturnArguments = mock.Arguments{testutils.Head(num.Int64()), nil}`
$DIR/core/chains/evm/headtracker/head_tracker_test.go: `ht.Start(t)`
$DIR/core/chains/evm/headtracker/head_tracker_test.go: `ethClient.On("HeadByNumber", mock.Anything, (*big.Int)(nil)).Return(testutils.Head(0), nil).Once()`
$DIR/core/chains/evm/headtracker/head_tracker_test.go: `ethClient.On("HeadByNumber", mock.Anything, mock.Anything).Return(testutils.Head(0), nil).Once()`
$DIR/core/chains/evm/headtracker/head_tracker_test.go: `ethClient.On("HeadByNumber", mock.Anything, mock.Anything).Return(testutils.Head(0), nil).Maybe()`
$DIR/core/chains/evm/headtracker/head_tracker_test.go: `ethClient.On("SubscribeNewHead", mock.Anything, mock.Anything).
Run(func(mock.Arguments) {
close(chStarted)
}).
Return(sub, nil)`
$DIR/core/chains/evm/headtracker/head_tracker_test.go: `close(chStarted)`
$DIR/core/chains/evm/headtracker/head_tracker_test.go: `ht.Start(t)`
$DIR/core/chains/evm/headtracker/head_tracker_test.go: `c.FinalityTagEnabled = opts.FinalityTagEnable`
$DIR/core/chains/evm/headtracker/head_tracker_test.go: `c.HeadTracker.HistoryDepth = ptr[uint32](historyDepth)`
$DIR/core/chains/evm/headtracker/head_tracker_test.go: `c.FinalityDepth = ptr[uint32](finalityDepth)`
$DIR/core/chains/evm/headtracker/head_tracker_test.go: `c.HeadTracker.MaxAllowedFinalityDepth = opts.MaxAllowedFinalityDepth`
$DIR/core/chains/evm/headtracker/head_tracker_test.go: `c.HeadTracker.FinalityTagBypass = opts.FinalityTagBypass`
$DIR/core/chains/evm/headtracker/head_tracker_test.go: `t.Run("Fail start if context was canceled", func(t *testing.T) {
ctx, cancel := context.WithCancel(tests.Context(t))
ht := newHeadTracker(t, opts{})
ht.ethClient.On("HeadByNumber", mock.Anything, (*big.Int)(nil)).Run(func(args mock.Arguments) {
cancel()
}).Return(testutils.Head(0), context.Canceled)
err := ht.headTracker.Start(ctx)
require.ErrorIs(t, err, context.Canceled)
})`
$DIR/core/chains/evm/headtracker/head_tracker_test.go: `ht.ethClient.On("HeadByNumber", mock.Anything, (*big.Int)(nil)).Run(func(args mock.Arguments) {
cancel()
}).Return(testutils.Head(0), context.Canceled)`
$DIR/core/chains/evm/headtracker/head_tracker_test.go: `cancel()`
$DIR/core/chains/evm/headtracker/head_tracker_test.go: `t.Run("Starts even if failed to get initialHead", func(t *testing.T) {
ht := newHeadTracker(t, opts{})
ht.ethClient.On("HeadByNumber", mock.Anything, (*big.Int)(nil)).Return(testutils.Head(0), errors.New("failed to get init head"))
ht.Start(t)
tests.AssertLogEventually(t, ht.observer, "Error handling initial head")
})`
$DIR/core/chains/evm/headtracker/head_tracker_test.go: `ht.ethClient.On("HeadByNumber", mock.Anything, (*big.Int)(nil)).Return(testutils.Head(0), errors.New("failed to get init head"))`
$DIR/core/chains/evm/headtracker/head_tracker_test.go: `ht.Start(t)`
$DIR/core/chains/evm/headtracker/head_tracker_test.go: `tests.AssertLogEventually(t, ht.observer, "Error handling initial head")`
$DIR/core/chains/evm/headtracker/head_tracker_test.go: `t.Run("Starts even if received invalid head", func(t *testing.T) {
ht := newHeadTracker(t, opts{})
ht.ethClient.On("HeadByNumber", mock.Anything, (*big.Int)(nil)).Return(nil, nil)
ht.Start(t)
tests.AssertLogEventually(t, ht.observer, "Got nil initial head")
})`
$DIR/core/chains/evm/headtracker/head_tracker_test.go: `ht.ethClient.On("HeadByNumber", mock.Anything, (*big.Int)(nil)).Return(nil, nil)`
$DIR/core/chains/evm/headtracker/head_tracker_test.go: `ht.Start(t)`
$DIR/core/chains/evm/headtracker/head_tracker_test.go: `tests.AssertLogEventually(t, ht.observer, "Got nil initial head")`
$DIR/core/chains/evm/headtracker/head_tracker_test.go: `t.Run("Starts even if fails to get finalizedHead", func(t *testing.T) {
ht := newHeadTracker(t, opts{FinalityTagEnable: ptr(true), FinalityTagBypass: ptr(false)})
head := testutils.Head(1000)
ht.ethClient.On("HeadByNumber", mock.Anything, (*big.Int)(nil)).Return(head, nil).Once()
ht.ethClient.On("LatestFinalizedBlock", mock.Anything).Return(nil, errors.New("failed to load latest finalized")).Once()
ht.Start(t)
tests.AssertLogEventually(t, ht.observer, "Error handling initial head")
})`
$DIR/core/chains/evm/headtracker/head_tracker_test.go: `ht.ethClient.On("HeadByNumber", mock.Anything, (*big.Int)(nil)).Return(head, nil).Once()`
$DIR/core/chains/evm/headtracker/head_tracker_test.go: `ht.ethClient.On("LatestFinalizedBlock", mock.Anything).Return(nil, errors.New("failed to load latest finalized")).Once()`
$DIR/core/chains/evm/headtracker/head_tracker_test.go: `ht.Start(t)`
$DIR/core/chains/evm/headtracker/head_tracker_test.go: `tests.AssertLogEventually(t, ht.observer, "Error handling initial head")`
$DIR/core/chains/evm/headtracker/head_tracker_test.go: `t.Run("Starts even if latest finalizedHead is nil", func(t *testing.T) {
ht := newHeadTracker(t, opts{FinalityTagEnable: ptr(true), FinalityTagBypass: ptr(false)})
head := testutils.Head(1000)
ht.ethClient.On("HeadByNumber", mock.Anything, (*big.Int)(nil)).Return(head, nil).Once()
ht.ethClient.On("LatestFinalizedBlock", mock.Anything).Return(nil, nil).Once()
ht.ethClient.On("SubscribeNewHead", mock.Anything, mock.Anything).Return(nil, errors.New("failed to connect")).Maybe()
ht.Start(t)
tests.AssertLogEventually(t, ht.observer, "Error handling initial head")
})`
$DIR/core/chains/evm/headtracker/head_tracker_test.go: `ht.ethClient.On("HeadByNumber", mock.Anything, (*big.Int)(nil)).Return(head, nil).Once()`
$DIR/core/chains/evm/headtracker/head_tracker_test.go: `ht.ethClient.On("LatestFinalizedBlock", mock.Anything).Return(nil, nil).Once()`
$DIR/core/chains/evm/headtracker/head_tracker_test.go: `ht.ethClient.On("SubscribeNewHead", mock.Anything, mock.Anything).Return(nil, errors.New("failed to connect")).Maybe()`
$DIR/core/chains/evm/headtracker/head_tracker_test.go: `ht.Start(t)`
$DIR/core/chains/evm/headtracker/head_tracker_test.go: `tests.AssertLogEventually(t, ht.observer, "Error handling initial head")`
$DIR/core/chains/evm/headtracker/head_tracker_test.go: `t.Run("Logs error if finality gap is too big", func(t *testing.T) {
ht := newHeadTracker(t, opts{FinalityTagEnable: ptr(true), FinalityTagBypass: ptr(false), MaxAllowedFinalityDepth: ptr(uint32(10))})
head := testutils.Head(1000)
ht.ethClient.On("HeadByNumber", mock.Anything, (*big.Int)(nil)).Return(head, nil).Once()
ht.ethClient.On("LatestFinalizedBlock", mock.Anything).Return(testutils.Head(989), nil).Once()
ht.ethClient.On("SubscribeNewHead", mock.Anything, mock.Anything).Return(nil, errors.New("failed to connect")).Maybe()
ht.Start(t)
tests.AssertEventually(t, func() bool {
// must exactly match the error passed to logger
field := zap.String("err", "failed to calculate latest finalized head: gap between latest finalized block (989) and current head (1000) is too large (> 10)")
filtered := ht.observer.FilterMessage("Error handling initial head").FilterField(field)
return filtered.Len() > 0
})
})`
$DIR/core/chains/evm/headtracker/head_tracker_test.go: `ht.ethClient.On("HeadByNumber", mock.Anything, (*big.Int)(nil)).Return(head, nil).Once()`
$DIR/core/chains/evm/headtracker/head_tracker_test.go: `ht.ethClient.On("LatestFinalizedBlock", mock.Anything).Return(testutils.Head(989), nil).Once()`
$DIR/core/chains/evm/headtracker/head_tracker_test.go: `ht.ethClient.On("SubscribeNewHead", mock.Anything, mock.Anything).Return(nil, errors.New("failed to connect")).Maybe()`
$DIR/core/chains/evm/headtracker/head_tracker_test.go: `ht.Start(t)`
$DIR/core/chains/evm/headtracker/head_tracker_test.go: `tests.AssertEventually(t, func() bool {
// must exactly match the error passed to logger
field := zap.String("err", "failed to calculate latest finalized head: gap between latest finalized block (989) and current head (1000) is too large (> 10)")
filtered := ht.observer.FilterMessage("Error handling initial head").FilterField(field)
return filtered.Len() > 0
})`
$DIR/core/chains/evm/headtracker/head_tracker_test.go: `t.Run("Happy path (finality tag)", func(t *testing.T) {
head := testutils.Head(1000)
ht := newHeadTracker(t, opts{FinalityTagEnable: ptr(true), FinalityTagBypass: ptr(false)})
ctx := tests.Context(t)
require.NoError(t, ht.orm.IdempotentInsertHead(ctx, testutils.Head(799)))
ht.ethClient.On("HeadByNumber", mock.Anything, (*big.Int)(nil)).Return(head, nil).Once()
finalizedHead := testutils.Head(800)
// on start
ht.ethClient.On("LatestFinalizedBlock", mock.Anything).Return(finalizedHead, nil).Once()
// on backfill
ht.ethClient.On("LatestFinalizedBlock", mock.Anything).Return(nil, errors.New("backfill call to finalized failed")).Maybe()
ht.ethClient.On("SubscribeNewHead", mock.Anything, mock.Anything).Return(nil, errors.New("failed to connect")).Maybe()
ht.Start(t)
tests.AssertLogEventually(t, ht.observer, "Loaded chain from DB")
})`
$DIR/core/chains/evm/headtracker/head_tracker_test.go: `ht.ethClient.On("HeadByNumber", mock.Anything, (*big.Int)(nil)).Return(head, nil).Once()`
$DIR/core/chains/evm/headtracker/head_tracker_test.go: `ht.ethClient.On("LatestFinalizedBlock", mock.Anything).Return(finalizedHead, nil).Once()`
$DIR/core/chains/evm/headtracker/head_tracker_test.go: `ht.ethClient.On("LatestFinalizedBlock", mock.Anything).Return(nil, errors.New("backfill call to finalized failed")).Maybe()`
$DIR/core/chains/evm/headtracker/head_tracker_test.go: `ht.ethClient.On("SubscribeNewHead", mock.Anything, mock.Anything).Return(nil, errors.New("failed to connect")).Maybe()`
$DIR/core/chains/evm/headtracker/head_tracker_test.go: `ht.Start(t)`
$DIR/core/chains/evm/headtracker/head_tracker_test.go: `tests.AssertLogEventually(t, ht.observer, "Loaded chain from DB")`
$DIR/core/chains/evm/headtracker/head_tracker_test.go: `ht.ethClient.On("HeadByNumber", mock.Anything, (*big.Int)(nil)).Return(head, nil).Once()`
$DIR/core/chains/evm/headtracker/head_tracker_test.go: `ht.ethClient.On("HeadByNumber", mock.Anything, big.NewInt(finalizedHead.Number)).Return(finalizedHead, nil).Once()`
$DIR/core/chains/evm/headtracker/head_tracker_test.go: `ht.ethClient.On("HeadByNumber", mock.Anything, mock.Anything).Return(nil, errors.New("backfill call to finalized failed")).Maybe()`
$DIR/core/chains/evm/headtracker/head_tracker_test.go: `ht.ethClient.On("SubscribeNewHead", mock.Anything, mock.Anything).Return(nil, errors.New("failed to connect")).Maybe()`
$DIR/core/chains/evm/headtracker/head_tracker_test.go: `ht.Start(t)`
$DIR/core/chains/evm/headtracker/head_tracker_test.go: `tests.AssertLogEventually(t, ht.observer, "Loaded chain from DB")`
$DIR/core/chains/evm/headtracker/head_tracker_test.go: `t.Run(tc.Name, func(t *testing.T) {
happyPathFD(t, tc.Opts)
})`
$DIR/core/chains/evm/headtracker/head_tracker_test.go: `happyPathFD(t, tc.Opts)`
$DIR/core/chains/evm/headtracker/head_tracker_test.go: `ethClient.On("SubscribeNewHead", mock.Anything, mock.Anything).
Return(
func(ctx context.Context, ch chan<- *evmtypes.Head) ethereum.Subscription {
sub := mockEth.NewSub(t)
chchHeaders <- testutils.NewRawSub(ch, sub.Err())
return sub
},
func(ctx context.Context, ch chan<- *evmtypes.Head) error { return nil },
)`
$DIR/core/chains/evm/headtracker/head_tracker_test.go: `chchHeaders <- testutils.NewRawSub(ch, sub.Err())`
$DIR/core/chains/evm/headtracker/head_tracker_test.go: `ethClient.On("HeadByNumber", mock.Anything, mock.Anything).Return(testutils.Head(0), nil)`
$DIR/core/chains/evm/headtracker/head_tracker_test.go: `ethClient.On("HeadByHash", mock.Anything, mock.Anything).Return(testutils.Head(0), nil).Maybe()`
$DIR/core/chains/evm/headtracker/head_tracker_test.go: `ht.Start(t)`
$DIR/core/chains/evm/headtracker/head_tracker_test.go: `headers.TrySend(&evmtypes.Head{Number: 1, Hash: utils.NewHash(), EVMChainID: ubig.New(testutils.FixtureChainID)})`
$DIR/core/chains/evm/headtracker/head_tracker_test.go: `g.Eventually(checker.OnNewLongestChainCount).Should(gomega.Equal(int32(1)))`
$DIR/core/chains/evm/headtracker/head_tracker_test.go: `ht.Stop(t)`
$DIR/core/chains/evm/headtracker/head_tracker_test.go: `ethClient.On("SubscribeNewHead", mock.Anything, mock.Anything).
Return(
func(ctx context.Context, ch chan<- *evmtypes.Head) ethereum.Subscription { return mockEth.NewSub(t) },
func(ctx context.Context, ch chan<- *evmtypes.Head) error { return nil },
)`
$DIR/core/chains/evm/headtracker/head_tracker_test.go: `ethClient.On("SubscribeNewHead", mock.Anything, mock.Anything).Return(nil, errors.New("cannot reconnect"))`
$DIR/core/chains/evm/headtracker/head_tracker_test.go: `ethClient.On("SubscribeNewHead", mock.Anything, mock.Anything).
Return(
func(ctx context.Context, ch chan<- *evmtypes.Head) ethereum.Subscription { return mockEth.NewSub(t) },
func(ctx context.Context, ch chan<- *evmtypes.Head) error { return nil },
)`
$DIR/core/chains/evm/headtracker/head_tracker_test.go: `ethClient.On("HeadByNumber", mock.Anything, mock.Anything).Return(testutils.Head(0), nil)`
$DIR/core/chains/evm/headtracker/head_tracker_test.go: `ht.Start(t)`
$DIR/core/chains/evm/headtracker/head_tracker_test.go: `mockEth.SubsErr(errors.New("test error to force reconnect"))`
$DIR/core/chains/evm/headtracker/head_tracker_test.go: `ethClient.On("SubscribeNewHead", mock.Anything, mock.Anything).
Return(
func(ctx context.Context, ch chan<- *evmtypes.Head) ethereum.Subscription {
sub := mockEth.NewSub(t)
chchHeaders <- testutils.NewRawSub(ch, sub.Err())
return sub
},
func(ctx context.Context, ch chan<- *evmtypes.Head) error { return nil },
)`
$DIR/core/chains/evm/headtracker/head_tracker_test.go: `chchHeaders <- testutils.NewRawSub(ch, sub.Err())`
$DIR/core/chains/evm/headtracker/head_tracker_test.go: `ethClient.On("HeadByNumber", mock.Anything, mock.Anything).Return(testutils.Head(0), nil)`
$DIR/core/chains/evm/headtracker/head_tracker_test.go: `ethClient.On("HeadByHash", mock.Anything, mock.Anything).Return(testutils.Head(0), nil).Maybe()`
$DIR/core/chains/evm/headtracker/head_tracker_test.go: `ht.Start(t)`
$DIR/core/chains/evm/headtracker/head_tracker_test.go: `headers.TrySend(testutils.Head(1))`
$DIR/core/chains/evm/headtracker/head_tracker_test.go: `g.Eventually(func() bool {
report := ht.headTracker.HealthReport()
return !slices.ContainsFunc(maps.Values(report), func(e error) bool { return e != nil })
}, 5*time.Second, tests.TestInterval).Should(gomega.Equal(true))`
$DIR/core/chains/evm/headtracker/head_tracker_test.go: `headers.CloseCh()`
$DIR/core/chains/evm/headtracker/head_tracker_test.go: `heads[i].ParentHash = parentHash`
$DIR/core/chains/evm/headtracker/head_tracker_test.go: `parentHash = heads[i].Hash`
$DIR/core/chains/evm/headtracker/head_tracker_test.go: `ethClient.On("HeadByNumber", mock.Anything, (*big.Int)(nil)).Return(heads[3], nil).Maybe()`
$DIR/core/chains/evm/headtracker/head_tracker_test.go: `ethClient.On("HeadByNumber", mock.Anything, big.NewInt(0)).Return(heads[0], nil).Maybe()`
$DIR/core/chains/evm/headtracker/head_tracker_test.go: `ethClient.On("HeadByHash", mock.Anything, heads[2].Hash).Return(heads[2], nil).Maybe()`
$DIR/core/chains/evm/headtracker/head_tracker_test.go: `ethClient.On("HeadByHash", mock.Anything, heads[1].Hash).Return(heads[1], nil).Maybe()`
$DIR/core/chains/evm/headtracker/head_tracker_test.go: `ethClient.On("HeadByHash", mock.Anything, heads[0].Hash).Return(heads[0], nil).Maybe()`
$DIR/core/chains/evm/headtracker/head_tracker_test.go: `ethClient.On("SubscribeNewHead", mock.Anything, mock.Anything).
Return(
func(ctx context.Context, ch chan<- *evmtypes.Head) ethereum.Subscription {
sub := mockEth.NewSub(t)
chchHeaders <- testutils.NewRawSub(ch, sub.Err())
return sub
},
func(ctx context.Context, ch chan<- *evmtypes.Head) error { return nil },
)`
$DIR/core/chains/evm/headtracker/head_tracker_test.go: `chchHeaders <- testutils.NewRawSub(ch, sub.Err())`
$DIR/core/chains/evm/headtracker/head_tracker_test.go: `ht.Start(t)`
$DIR/core/chains/evm/headtracker/head_tracker_test.go: `headers.TrySend(testutils.Head(1))`
$DIR/core/chains/evm/headtracker/head_tracker_test.go: `gomega.NewWithT(t).Eventually(func() bool {
report := ht.headTracker.HealthReport()
services.CopyHealth(report, ht.headBroadcaster.HealthReport())
return !slices.ContainsFunc(maps.Values(report), func(e error) bool { return e != nil })
}, 5*time.Second, tests.TestInterval).Should(gomega.Equal(true))`
$DIR/core/chains/evm/headtracker/head_tracker_test.go: `services.CopyHealth(report, ht.headBroadcaster.HealthReport())`
$DIR/core/chains/evm/headtracker/head_tracker_test.go: `c.FinalityDepth = ptr[uint32](50)`
$DIR/core/chains/evm/headtracker/head_tracker_test.go: `c.HeadTracker.MaxBufferSize = ptr[uint32](100)`
$DIR/core/chains/evm/headtracker/head_tracker_test.go: `c.HeadTracker.SamplingInterval = commonconfig.MustNewDuration(2500 * time.Millisecond)`
$DIR/core/chains/evm/headtracker/head_tracker_test.go: `ethClient.On("SubscribeNewHead", mock.Anything, mock.Anything).
Return(
func(ctx context.Context, ch chan<- *evmtypes.Head) ethereum.Subscription {
sub := mockEth.NewSub(t)
chchHeaders <- testutils.NewRawSub(ch, sub.Err())
return sub
},
func(ctx context.Context, ch chan<- *evmtypes.Head) error { return nil },
)`
$DIR/core/chains/evm/headtracker/head_tracker_test.go: `chchHeaders <- testutils.NewRawSub(ch, sub.Err())`
$DIR/core/chains/evm/headtracker/head_tracker_test.go: `ethClient.On("HeadByNumber", mock.Anything, (*big.Int)(nil)).Return(head0, nil)`
$DIR/core/chains/evm/headtracker/head_tracker_test.go: `ethClient.On("HeadByNumber", mock.Anything, big.NewInt(0)).Return(head0, nil)`
$DIR/core/chains/evm/headtracker/head_tracker_test.go: `ht.Start(t)`
$DIR/core/chains/evm/headtracker/head_tracker_test.go: `headSeq.Append(blocks.Head(0))`
$DIR/core/chains/evm/headtracker/head_tracker_test.go: `headSeq.Append(blocks.Head(1))`
$DIR/core/chains/evm/headtracker/head_tracker_test.go: `headSeq.Append(blocks.Head(3))`
$DIR/core/chains/evm/headtracker/head_tracker_test.go: `headSeq.Append(blocks.Head(2))`
$DIR/core/chains/evm/headtracker/head_tracker_test.go: `headSeq.Append(blocks.Head(4))`
$DIR/core/chains/evm/headtracker/head_tracker_test.go: `headSeq.Append(blocks.NewHead(4))`
$DIR/core/chains/evm/headtracker/head_tracker_test.go: `headSeq.Append(blocksForked.Head(2))`
$DIR/core/chains/evm/headtracker/head_tracker_test.go: `headSeq.Append(blocksForked.Head(3))`
$DIR/core/chains/evm/headtracker/head_tracker_test.go: `headSeq.Append(blocksForked.Head(4))`
$DIR/core/chains/evm/headtracker/head_tracker_test.go: `headSeq.Append(blocksForked.Head(5))`
$DIR/core/chains/evm/headtracker/head_tracker_test.go: `checker.On("OnNewLongestChain", mock.Anything, mock.Anything).
Run(func(args mock.Arguments) {
h := args.Get(1).(*evmtypes.Head)
assert.Equal(t, int64(5), h.Number)
assert.Equal(t, blocksForked.Head(5).Hash, h.Hash)
// This is the new longest chain, check that it came with its parents
if !assert.NotNil(t, h.Parent) {
return
}
assert.Equal(t, h.Parent.Hash, blocksForked.Head(4).Hash)
if !assert.NotNil(t, h.Parent.Parent) {
return
}
assert.Equal(t, h.Parent.Parent.Hash, blocksForked.Head(3).Hash)
if !assert.NotNil(t, h.Parent.Parent.Parent) {
return
}
assert.Equal(t, h.Parent.Parent.Parent.Hash, blocksForked.Head(2).Hash)
if !assert.NotNil(t, h.Parent.Parent.Parent.Parent) {
return
}
assert.Equal(t, h.Parent.Parent.Parent.Parent.Hash, blocksForked.Head(1).Hash)
lastLongestChainAwaiter.ItHappened()
}).Return().Once()`
$DIR/core/chains/evm/headtracker/head_tracker_test.go: `lastLongestChainAwaiter.ItHappened()`
$DIR/core/chains/evm/headtracker/head_tracker_test.go: `latestHeadByHashMu.Lock()`
$DIR/core/chains/evm/headtracker/head_tracker_test.go: `fnCall.ReturnArguments = mock.Arguments{head, nil}`
$DIR/core/chains/evm/headtracker/head_tracker_test.go: `latestHeadByHashMu.Lock()`
$DIR/core/chains/evm/headtracker/head_tracker_test.go: `latestHeadByHash[h.Hash] = h`
$DIR/core/chains/evm/headtracker/head_tracker_test.go: `latestHeadByHashMu.Unlock()`
$DIR/core/chains/evm/headtracker/head_tracker_test.go: `headers.TrySend(h)`
$DIR/core/chains/evm/headtracker/head_tracker_test.go: `lastLongestChainAwaiter.AwaitOrFail(t, tests.WaitTimeout(t))`
$DIR/core/chains/evm/headtracker/head_tracker_test.go: `ht.Stop(t)`
$DIR/core/chains/evm/headtracker/head_tracker_test.go: `c.FinalityDepth = ptr[uint32](50)`
$DIR/core/chains/evm/headtracker/head_tracker_test.go: `c.HeadTracker.MaxBufferSize = ptr[uint32](100)`
$DIR/core/chains/evm/headtracker/head_tracker_test.go: `c.HeadTracker.SamplingInterval = commonconfig.MustNewDuration(0)`
$DIR/core/chains/evm/headtracker/head_tracker_test.go: `ethClient.On("SubscribeNewHead", mock.Anything, mock.Anything).
Return(
func(ctx context.Context, ch chan<- *evmtypes.Head) ethereum.Subscription {
sub := mockEth.NewSub(t)
chchHeaders <- testutils.NewRawSub(ch, sub.Err())
return sub
},
func(ctx context.Context, ch chan<- *evmtypes.Head) error { return nil },
)`
$DIR/core/chains/evm/headtracker/head_tracker_test.go: `chchHeaders <- testutils.NewRawSub(ch, sub.Err())`
$DIR/core/chains/evm/headtracker/head_tracker_test.go: `ethClient.On("HeadByNumber", mock.Anything, (*big.Int)(nil)).Return(head0, nil)`
$DIR/core/chains/evm/headtracker/head_tracker_test.go: `ethClient.On("HeadByNumber", mock.Anything, big.NewInt(0)).Return(head0, nil)`
$DIR/core/chains/evm/headtracker/head_tracker_test.go: `headSeq.Append(blocks.Head(0))`
$DIR/core/chains/evm/headtracker/head_tracker_test.go: `headSeq.Append(blocks.Head(1))`
$DIR/core/chains/evm/headtracker/head_tracker_test.go: `headSeq.Append(blocks.Head(3))`
$DIR/core/chains/evm/headtracker/head_tracker_test.go: `headSeq.Append(blocks.Head(2))`
$DIR/core/chains/evm/headtracker/head_tracker_test.go: `headSeq.Append(blocks.Head(4))`
$DIR/core/chains/evm/headtracker/head_tracker_test.go: `headSeq.Append(blocks.NewHead(4))`
$DIR/core/chains/evm/headtracker/head_tracker_test.go: `headSeq.Append(blocksForked.Head(2))`
$DIR/core/chains/evm/headtracker/head_tracker_test.go: `headSeq.Append(blocksForked.Head(3))`
$DIR/core/chains/evm/headtracker/head_tracker_test.go: `headSeq.Append(blocksForked.Head(4))`
$DIR/core/chains/evm/headtracker/head_tracker_test.go: `headSeq.Append(blocksForked.Head(5))`
$DIR/core/chains/evm/headtracker/head_tracker_test.go: `checker.On("OnNewLongestChain", mock.Anything, mock.Anything).
Run(func(args mock.Arguments) {
h := args.Get(1).(*evmtypes.Head)
require.Equal(t, int64(0), h.Number)
require.Equal(t, blocks.Head(0).Hash, h.Hash)
}).Return().Once()`
$DIR/core/chains/evm/headtracker/head_tracker_test.go: `checker.On("OnNewLongestChain", mock.Anything, mock.Anything).
Run(func(args mock.Arguments) {
h := args.Get(1).(*evmtypes.Head)
require.Equal(t, int64(1), h.Number)
require.Equal(t, blocks.Head(1).Hash, h.Hash)
}).Return().Once()`
$DIR/core/chains/evm/headtracker/head_tracker_test.go: `checker.On("OnNewLongestChain", mock.Anything, mock.Anything).
Run(func(args mock.Arguments) {
h := args.Get(1).(*evmtypes.Head)
require.Equal(t, int64(3), h.Number)
require.Equal(t, blocks.Head(3).Hash, h.Hash)
}).Return().Once()`
$DIR/core/chains/evm/headtracker/head_tracker_test.go: `checker.On("OnNewLongestChain", mock.Anything, mock.Anything).
Run(func(args mock.Arguments) {
h := args.Get(1).(*evmtypes.Head)
require.Equal(t, int64(4), h.Number)
require.Equal(t, blocks.Head(4).Hash, h.Hash)
// Check that the block came with its parents
require.NotNil(t, h.Parent)
require.Equal(t, h.Parent.Hash, blocks.Head(3).Hash)
require.NotNil(t, h.Parent.Parent.Hash)
require.Equal(t, h.Parent.Parent.Hash, blocks.Head(2).Hash)
require.NotNil(t, h.Parent.Parent.Parent)
require.Equal(t, h.Parent.Parent.Parent.Hash, blocks.Head(1).Hash)
}).Return().Once()`
$DIR/core/chains/evm/headtracker/head_tracker_test.go: `checker.On("OnNewLongestChain", mock.Anything, mock.Anything).
Run(func(args mock.Arguments) {
h := args.Get(1).(*evmtypes.Head)
require.Equal(t, int64(5), h.Number)
require.Equal(t, blocksForked.Head(5).Hash, h.Hash)
// This is the new longest chain, check that it came with its parents
require.NotNil(t, h.Parent)
require.Equal(t, h.Parent.Hash, blocksForked.Head(4).Hash)
require.NotNil(t, h.Parent.Parent)
require.Equal(t, h.Parent.Parent.Hash, blocksForked.Head(3).Hash)
require.NotNil(t, h.Parent.Parent.Parent)
require.Equal(t, h.Parent.Parent.Parent.Hash, blocksForked.Head(2).Hash)
require.NotNil(t, h.Parent.Parent.Parent.Parent)
require.Equal(t, h.Parent.Parent.Parent.Parent.Hash, blocksForked.Head(1).Hash)
lastLongestChainAwaiter.ItHappened()
}).Return().Once()`
$DIR/core/chains/evm/headtracker/head_tracker_test.go: `lastLongestChainAwaiter.ItHappened()`
$DIR/core/chains/evm/headtracker/head_tracker_test.go: `ht.Start(t)`
$DIR/core/chains/evm/headtracker/head_tracker_test.go: `latestHeadByHashMu.Lock()`
$DIR/core/chains/evm/headtracker/head_tracker_test.go: `fnCall.ReturnArguments = mock.Arguments{head, nil}`
$DIR/core/chains/evm/headtracker/head_tracker_test.go: `latestHeadByHashMu.Lock()`
$DIR/core/chains/evm/headtracker/head_tracker_test.go: `latestHeadByHash[h.Hash] = h`
$DIR/core/chains/evm/headtracker/head_tracker_test.go: `latestHeadByHashMu.Unlock()`
$DIR/core/chains/evm/headtracker/head_tracker_test.go: `headers.TrySend(h)`
$DIR/core/chains/evm/headtracker/head_tracker_test.go: `time.Sleep(tests.TestInterval)`
$DIR/core/chains/evm/headtracker/head_tracker_test.go: `lastLongestChainAwaiter.AwaitOrFail(t, tests.WaitTimeout(t))`
$DIR/core/chains/evm/headtracker/head_tracker_test.go: `ht.Stop(t)`
$DIR/core/chains/evm/headtracker/head_tracker_test.go: `h1.ParentHash = head0.Hash`
$DIR/core/chains/evm/headtracker/head_tracker_test.go: `h9.ParentHash = head8.Hash`
$DIR/core/chains/evm/headtracker/head_tracker_test.go: `h11.ParentHash = head10.Hash`
$DIR/core/chains/evm/headtracker/head_tracker_test.go: `h12.ParentHash = h11.Hash`
$DIR/core/chains/evm/headtracker/head_tracker_test.go: `h13.ParentHash = h12.Hash`
$DIR/core/chains/evm/headtracker/head_tracker_test.go: `h14Orphaned.ParentHash = h13.Hash`
$DIR/core/chains/evm/headtracker/head_tracker_test.go: `h14.ParentHash = h13.Hash`
$DIR/core/chains/evm/headtracker/head_tracker_test.go: `h15.ParentHash = h14.Hash`
$DIR/core/chains/evm/headtracker/head_tracker_test.go: `ethClient.On("ConfiguredChainID", mock.Anything).Return(evmcfg.EVM().ChainID(), nil)`
$DIR/core/chains/evm/headtracker/head_tracker_test.go: `t.Run("returns error if latestFinalized is not valid", func(t *testing.T) {
htu := newHeadTrackerUniverse(t, opts{})
err := htu.headTracker.Backfill(ctx, &h12, nil)
require.EqualError(t, err, "can not perform backfill without a valid latestFinalized head")
})`
$DIR/core/chains/evm/headtracker/head_tracker_test.go: `t.Run("Returns error if finalized head is ahead of canonical", func(t *testing.T) {
htu := newHeadTrackerUniverse(t, opts{})
err := htu.headTracker.Backfill(ctx, &h12, &h14Orphaned)
require.EqualError(t, err, "invariant violation: expected head of canonical chain to be ahead of the latestFinalized")
})`
$DIR/core/chains/evm/headtracker/head_tracker_test.go: `t.Run("Returns error if finalizedHead is not present in the canonical chain", func(t *testing.T) {
htu := newHeadTrackerUniverse(t, opts{Heads: heads})
err := htu.headTracker.Backfill(ctx, &h15, &h14Orphaned)
require.EqualError(t, err, "expected finalized block to be present in canonical chain")
})`
$DIR/core/chains/evm/headtracker/head_tracker_test.go: `t.Run("Marks all blocks in chain that are older than finalized", func(t *testing.T) {
htu := newHeadTrackerUniverse(t, opts{Heads: heads})
assertFinalized := func(expectedFinalized bool, msg string, heads ...evmtypes.Head) {
for _, h := range heads {
storedHead := htu.headSaver.Chain(h.Hash)
assert.Equal(t, expectedFinalized, storedHead != nil && storedHead.IsFinalized, msg, "block_number", h.Number)
}
}
err := htu.headTracker.Backfill(ctx, &h15, &h14)
require.NoError(t, err)
assertFinalized(true, "expected heads to be marked as finalized after backfill", h14, h13, h12, h11)
assertFinalized(false, "expected heads to remain unfinalized", h15, head10)
})`
$DIR/core/chains/evm/headtracker/head_tracker_test.go: `assertFinalized(true, "expected heads to be marked as finalized after backfill", h14, h13, h12, h11)`
$DIR/core/chains/evm/headtracker/head_tracker_test.go: `assertFinalized(false, "expected heads to remain unfinalized", h15, head10)`
$DIR/core/chains/evm/headtracker/head_tracker_test.go: `t.Run("fetches a missing head", func(t *testing.T) {
htu := newHeadTrackerUniverse(t, opts{Heads: heads})
htu.ethClient.On("HeadByHash", mock.Anything, head10.Hash).
Return(&head10, nil)
err := htu.headTracker.Backfill(ctx, &h12, &h9)
require.NoError(t, err)
h := htu.headSaver.Chain(h12.Hash)
assert.Equal(t, int64(12), h.Number)
require.NotNil(t, h.Parent)
assert.Equal(t, int64(11), h.Parent.Number)
require.NotNil(t, h.Parent.Parent)
assert.Equal(t, int64(10), h.Parent.Parent.Number)
require.NotNil(t, h.Parent.Parent.Parent)
assert.Equal(t, int64(9), h.Parent.Parent.Parent.Number)
writtenHead, err := htu.orm.HeadByHash(tests.Context(t), head10.Hash)
require.NoError(t, err)
assert.Equal(t, int64(10), writtenHead.Number)
})`
$DIR/core/chains/evm/headtracker/head_tracker_test.go: `htu.ethClient.On("HeadByHash", mock.Anything, head10.Hash).
Return(&head10, nil)`
$DIR/core/chains/evm/headtracker/head_tracker_test.go: `t.Run("fetches only heads that are missing", func(t *testing.T) {
htu := newHeadTrackerUniverse(t, opts{Heads: heads})
htu.ethClient.On("HeadByHash", mock.Anything, head10.Hash).
Return(&head10, nil)
htu.ethClient.On("HeadByHash", mock.Anything, head8.Hash).
Return(&head8, nil)
err := htu.headTracker.Backfill(ctx, &h15, &head8)
require.NoError(t, err)
h := htu.headSaver.Chain(h15.Hash)
require.Equal(t, uint32(8), h.ChainLength())
earliestInChain := h.EarliestInChain()
assert.Equal(t, head8.Number, earliestInChain.BlockNumber())
assert.Equal(t, head8.Hash, earliestInChain.BlockHash())
})`
$DIR/core/chains/evm/headtracker/head_tracker_test.go: `htu.ethClient.On("HeadByHash", mock.Anything, head10.Hash).
Return(&head10, nil)`
$DIR/core/chains/evm/headtracker/head_tracker_test.go: `htu.ethClient.On("HeadByHash", mock.Anything, head8.Hash).
Return(&head8, nil)`
$DIR/core/chains/evm/headtracker/head_tracker_test.go: `t.Run("abandons backfill and returns error if the eth node returns not found", func(t *testing.T) {
htu := newHeadTrackerUniverse(t, opts{Heads: heads})
htu.ethClient.On("HeadByHash", mock.Anything, head10.Hash).
Return(&head10, nil).
Once()
htu.ethClient.On("HeadByHash", mock.Anything, head8.Hash).
Return(nil, ethereum.NotFound).
Once()
err := htu.headTracker.Backfill(ctx, &h12, &head8)
require.Error(t, err)
require.EqualError(t, err, "fetchAndSaveHead failed: not found")
h := htu.headSaver.Chain(h12.Hash)
// Should contain 12, 11, 10, 9
assert.Equal(t, 4, int(h.ChainLength()))
assert.Equal(t, int64(9), h.EarliestInChain().BlockNumber())
})`
$DIR/core/chains/evm/headtracker/head_tracker_test.go: `htu.ethClient.On("HeadByHash", mock.Anything, head10.Hash).
Return(&head10, nil).
Once()`
$DIR/core/chains/evm/headtracker/head_tracker_test.go: `htu.ethClient.On("HeadByHash", mock.Anything, head8.Hash).
Return(nil, ethereum.NotFound).
Once()`
$DIR/core/chains/evm/headtracker/head_tracker_test.go: `t.Run("abandons backfill and returns error if the context time budget is exceeded", func(t *testing.T) {
htu := newHeadTrackerUniverse(t, opts{Heads: heads})
htu.ethClient.On("HeadByHash", mock.Anything, head10.Hash).
Return(&head10, nil)
lctx, cancel := context.WithCancel(ctx)
htu.ethClient.On("HeadByHash", mock.Anything, head8.Hash).
Return(nil, context.DeadlineExceeded).Run(func(args mock.Arguments) {
cancel()
})
err := htu.headTracker.Backfill(lctx, &h12, &head8)
require.Error(t, err)
require.EqualError(t, err, "fetchAndSaveHead failed: context canceled")
h := htu.headSaver.Chain(h12.Hash)
// Should contain 12, 11, 10, 9
assert.Equal(t, 4, int(h.ChainLength()))
assert.Equal(t, int64(9), h.EarliestInChain().BlockNumber())
})`
$DIR/core/chains/evm/headtracker/head_tracker_test.go: `htu.ethClient.On("HeadByHash", mock.Anything, head10.Hash).
Return(&head10, nil)`
$DIR/core/chains/evm/headtracker/head_tracker_test.go: `htu.ethClient.On("HeadByHash", mock.Anything, head8.Hash).
Return(nil, context.DeadlineExceeded).Run(func(args mock.Arguments) {
cancel()
})`
$DIR/core/chains/evm/headtracker/head_tracker_test.go: `cancel()`
$DIR/core/chains/evm/headtracker/head_tracker_test.go: `t.Run("abandons backfill and returns error when fetching a block by hash fails, indicating a reorg", func(t *testing.T) {
htu := newHeadTrackerUniverse(t, opts{})
htu.ethClient.On("HeadByHash", mock.Anything, h14.Hash).Return(&h14, nil).Once()
htu.ethClient.On("HeadByHash", mock.Anything, h13.Hash).Return(&h13, nil).Once()
htu.ethClient.On("HeadByHash", mock.Anything, h12.Hash).Return(nil, errors.New("not found")).Once()
err := htu.headTracker.Backfill(ctx, &h15, &h11)
require.Error(t, err)
require.EqualError(t, err, "fetchAndSaveHead failed: not found")
h := htu.headSaver.Chain(h14.Hash)
// Should contain 14, 13 (15 was never added). When trying to get the parent of h13 by hash, a reorg happened and backfill exited.
assert.Equal(t, 2, int(h.ChainLength()))
assert.Equal(t, int64(13), h.EarliestInChain().BlockNumber())
})`
$DIR/core/chains/evm/headtracker/head_tracker_test.go: `htu.ethClient.On("HeadByHash", mock.Anything, h14.Hash).Return(&h14, nil).Once()`
$DIR/core/chains/evm/headtracker/head_tracker_test.go: `htu.ethClient.On("HeadByHash", mock.Anything, h13.Hash).Return(&h13, nil).Once()`
$DIR/core/chains/evm/headtracker/head_tracker_test.go: `htu.ethClient.On("HeadByHash", mock.Anything, h12.Hash).Return(nil, errors.New("not found")).Once()`
$DIR/core/chains/evm/headtracker/head_tracker_test.go: `.NewSqlxDB(t)`
$DIR/core/chains/evm/headtracker/head_tracker_test.go: `.NewEthClientMockWithDefaultChain(t)`
$DIR/core/chains/evm/headtracker/head_tracker_test.go: `.On("HeadByNumber", mock.Anything, (*big.Int)(nil))`
$DIR/core/chains/evm/headtracker/head_tracker_test.go: `.Return(testutils.Head(0), nil)`
$DIR/core/chains/evm/headtracker/head_tracker_test.go: `.Head(0)`
$DIR/core/chains/evm/headtracker/head_tracker_test.go: `.On("HeadByNumber", mock.Anything, big.NewInt(0))`
$DIR/core/chains/evm/headtracker/head_tracker_test.go: `.NewInt(0)`
$DIR/core/chains/evm/headtracker/head_tracker_test.go: `.Return(testutils.Head(0), nil)`
$DIR/core/chains/evm/headtracker/head_tracker_test.go: `.Head(0)`
$DIR/core/chains/evm/headtracker/head_tracker_test.go: `.NewORM(*testutils.FixtureChainID, db)`
$DIR/core/chains/evm/headtracker/head_tracker_test.go: `.Head(16)`
$DIR/core/chains/evm/headtracker/head_tracker_test.go: `.NewTestChainScopedConfig(t, nil)`
$DIR/core/chains/evm/headtracker/head_tracker_test.go: `.EVM()`
$DIR/core/chains/evm/headtracker/head_tracker_test.go: `.EVM()`
$DIR/core/chains/evm/headtracker/head_tracker_test.go: `.HeadTracker()`
$DIR/core/chains/evm/headtracker/head_tracker_test.go: `.Start(t)`
$DIR/core/chains/evm/headtracker/head_tracker_test.go: `.headSaver.LatestChain()`
$DIR/core/chains/evm/headtracker/head_tracker_test.go: `.NewSqlxDB(t)`
$DIR/core/chains/evm/headtracker/head_tracker_test.go: `.NewTestChainScopedConfig(t, func(c *toml.EVMConfig) {
c.HeadTracker.HistoryDepth = ptr[uint32](100)
})`
$DIR/core/chains/evm/headtracker/head_tracker_test.go: `.NewEthClientMockWithDefaultChain(t)`
$DIR/core/chains/evm/headtracker/head_tracker_test.go: `.NewORM(*testutils.FixtureChainID, db)`
$DIR/core/chains/evm/headtracker/head_tracker_test.go: `.Head(201)`
$DIR/core/chains/evm/headtracker/head_tracker_test.go: `.EVM()`
$DIR/core/chains/evm/headtracker/head_tracker_test.go: `.EVM()`
$DIR/core/chains/evm/headtracker/head_tracker_test.go: `.HeadTracker()`
$DIR/core/chains/evm/headtracker/head_tracker_test.go: `.headSaver.Load(tests.Context(t), latest.Number)`
$DIR/core/chains/evm/headtracker/head_tracker_test.go: `.Context(t)`
$DIR/core/chains/evm/headtracker/head_tracker_test.go: `.LatestHead(tests.Context(t))`
$DIR/core/chains/evm/headtracker/head_tracker_test.go: `.Context(t)`
$DIR/core/chains/evm/headtracker/head_tracker_test.go: `.Head(5)`
$DIR/core/chains/evm/headtracker/head_tracker_test.go: `.Head(6)`
$DIR/core/chains/evm/headtracker/head_tracker_test.go: `.NewInt(6)`
$DIR/core/chains/evm/headtracker/head_tracker_test.go: `.Head(1)`
$DIR/core/chains/evm/headtracker/head_tracker_test.go: `.NewInt(5)`
$DIR/core/chains/evm/headtracker/head_tracker_test.go: `.Head(0)`
$DIR/core/chains/evm/headtracker/head_tracker_test.go: `.NewInt(5)`
$DIR/core/chains/evm/headtracker/head_tracker_test.go: `.NewInt(5)`
$DIR/core/chains/evm/headtracker/head_tracker_test.go: `.NewInt(0)`
$DIR/core/chains/evm/headtracker/head_tracker_test.go: `.Run(test.name, func(t *testing.T) {
db := pgtest.NewSqlxDB(t)
config := testutils.NewTestChainScopedConfig(t, nil)
orm := headtracker.NewORM(*testutils.FixtureChainID, db)
ethClient := testutils.NewEthClientMockWithDefaultChain(t)
chStarted := make(chan struct{})
mockEth := &testutils.MockEth{
EthClient: ethClient,
}
ethClient.On("SubscribeNewHead", mock.Anything, mock.Anything).
Maybe().
Return(
func(ctx context.Context, ch chan<- *evmtypes.Head) ethereum.Subscription {
defer close(chStarted)
return mockEth.NewSub(t)
},
func(ctx context.Context, ch chan<- *evmtypes.Head) error { return nil },
)
ethClient.On("HeadByNumber", mock.Anything, (*big.Int)(nil)).Return(testutils.Head(0), nil)
fnCall := ethClient.On("HeadByNumber", mock.Anything, mock.Anything)
fnCall.RunFn = func(args mock.Arguments) {
num := args.Get(1).(*big.Int)
fnCall.ReturnArguments = mock.Arguments{testutils.Head(num.Int64()), nil}
}
if test.initial != nil {
assert.Nil(t, orm.IdempotentInsertHead(tests.Context(t), test.initial))
}
ht := createHeadTracker(t, ethClient, config.EVM(), config.EVM().HeadTracker(), orm)
ht.Start(t)
if test.toSave != nil {
err := ht.headSaver.Save(tests.Context(t), test.toSave)
assert.NoError(t, err)
}
assert.Equal(t, test.want, ht.headSaver.LatestChain().ToInt())
})`
$DIR/core/chains/evm/headtracker/head_tracker_test.go: `.NewSqlxDB(t)`
$DIR/core/chains/evm/headtracker/head_tracker_test.go: `.NewTestChainScopedConfig(t, nil)`
$DIR/core/chains/evm/headtracker/head_tracker_test.go: `.NewORM(*testutils.FixtureChainID, db)`
$DIR/core/chains/evm/headtracker/head_tracker_test.go: `.NewEthClientMockWithDefaultChain(t)`
$DIR/core/chains/evm/headtracker/head_tracker_test.go: `.On("SubscribeNewHead", mock.Anything, mock.Anything)`
$DIR/core/chains/evm/headtracker/head_tracker_test.go: `.
Maybe()`
$DIR/core/chains/evm/headtracker/head_tracker_test.go: `.
Return(
func(ctx context.Context, ch chan<- *evmtypes.Head) ethereum.Subscription {
defer close(chStarted)
return mockEth.NewSub(t)
},
func(ctx context.Context, ch chan<- *evmtypes.Head) error { return nil },
)`
$DIR/core/chains/evm/headtracker/head_tracker_test.go: `.NewSub(t)`
$DIR/core/chains/evm/headtracker/head_tracker_test.go: `.On("HeadByNumber", mock.Anything, (*big.Int)(nil))`
$DIR/core/chains/evm/headtracker/head_tracker_test.go: `.Return(testutils.Head(0), nil)`
$DIR/core/chains/evm/headtracker/head_tracker_test.go: `.Head(0)`
$DIR/core/chains/evm/headtracker/head_tracker_test.go: `.On("HeadByNumber", mock.Anything, mock.Anything)`
$DIR/core/chains/evm/headtracker/head_tracker_test.go: `.Get(1)`
$DIR/core/chains/evm/headtracker/head_tracker_test.go: `.Head(num.Int64())`
$DIR/core/chains/evm/headtracker/head_tracker_test.go: `.Int64()`
$DIR/core/chains/evm/headtracker/head_tracker_test.go: `.EVM()`
$DIR/core/chains/evm/headtracker/head_tracker_test.go: `.EVM()`
$DIR/core/chains/evm/headtracker/head_tracker_test.go: `.HeadTracker()`
$DIR/core/chains/evm/headtracker/head_tracker_test.go: `.Start(t)`
$DIR/core/chains/evm/headtracker/head_tracker_test.go: `.headSaver.Save(tests.Context(t), test.toSave)`
$DIR/core/chains/evm/headtracker/head_tracker_test.go: `.Context(t)`
$DIR/core/chains/evm/headtracker/head_tracker_test.go: `.NewSqlxDB(t)`
$DIR/core/chains/evm/headtracker/head_tracker_test.go: `.NewTestChainScopedConfig(t, nil)`
$DIR/core/chains/evm/headtracker/head_tracker_test.go: `.NewORM(*testutils.FixtureChainID, db)`
$DIR/core/chains/evm/headtracker/head_tracker_test.go: `.NewEthClientMockWithDefaultChain(t)`
$DIR/core/chains/evm/headtracker/head_tracker_test.go: `.NewSub(t)`
$DIR/core/chains/evm/headtracker/head_tracker_test.go: `.On("HeadByNumber", mock.Anything, (*big.Int)(nil))`
$DIR/core/chains/evm/headtracker/head_tracker_test.go: `.Return(testutils.Head(0), nil)`
$DIR/core/chains/evm/headtracker/head_tracker_test.go: `.Head(0)`
$DIR/core/chains/evm/headtracker/head_tracker_test.go: `.Once()`
$DIR/core/chains/evm/headtracker/head_tracker_test.go: `.On("HeadByNumber", mock.Anything, mock.Anything)`
$DIR/core/chains/evm/headtracker/head_tracker_test.go: `.Return(testutils.Head(0), nil)`
$DIR/core/chains/evm/headtracker/head_tracker_test.go: `.Head(0)`
$DIR/core/chains/evm/headtracker/head_tracker_test.go: `.Once()`
$DIR/core/chains/evm/headtracker/head_tracker_test.go: `.On("HeadByNumber", mock.Anything, mock.Anything)`
$DIR/core/chains/evm/headtracker/head_tracker_test.go: `.Return(testutils.Head(0), nil)`
$DIR/core/chains/evm/headtracker/head_tracker_test.go: `.Head(0)`
$DIR/core/chains/evm/headtracker/head_tracker_test.go: `.Maybe()`
$DIR/core/chains/evm/headtracker/head_tracker_test.go: `.On("SubscribeNewHead", mock.Anything, mock.Anything)`
$DIR/core/chains/evm/headtracker/head_tracker_test.go: `.
Run(func(mock.Arguments) {
close(chStarted)
})`
$DIR/core/chains/evm/headtracker/head_tracker_test.go: `.
Return(sub, nil)`
$DIR/core/chains/evm/headtracker/head_tracker_test.go: `.EVM()`
$DIR/core/chains/evm/headtracker/head_tracker_test.go: `.EVM()`
$DIR/core/chains/evm/headtracker/head_tracker_test.go: `.HeadTracker()`
$DIR/core/chains/evm/headtracker/head_tracker_test.go: `.Start(t)`
$DIR/core/chains/evm/headtracker/head_tracker_test.go: `.NewSqlxDB(t)`
$DIR/core/chains/evm/headtracker/head_tracker_test.go: `.NewTestChainScopedConfig(t, func(c *toml.EVMConfig) {
if opts.FinalityTagEnable != nil {
c.FinalityTagEnabled = opts.FinalityTagEnable
}
c.HeadTracker.HistoryDepth = ptr[uint32](historyDepth)
c.FinalityDepth = ptr[uint32](finalityDepth)
if opts.MaxAllowedFinalityDepth != nil {
c.HeadTracker.MaxAllowedFinalityDepth = opts.MaxAllowedFinalityDepth
}
if opts.FinalityTagBypass != nil {
c.HeadTracker.FinalityTagBypass = opts.FinalityTagBypass
}
})`
$DIR/core/chains/evm/headtracker/head_tracker_test.go: `.NewORM(*testutils.FixtureChainID, db)`
$DIR/core/chains/evm/headtracker/head_tracker_test.go: `.NewEthClientMockWithDefaultChain(t)`
$DIR/core/chains/evm/headtracker/head_tracker_test.go: `.EVM()`
$DIR/core/chains/evm/headtracker/head_tracker_test.go: `.EVM()`
$DIR/core/chains/evm/headtracker/head_tracker_test.go: `.HeadTracker()`
$DIR/core/chains/evm/headtracker/head_tracker_test.go: `.Run("Fail start if context was canceled", func(t *testing.T) {
ctx, cancel := context.WithCancel(tests.Context(t))
ht := newHeadTracker(t, opts{})
ht.ethClient.On("HeadByNumber", mock.Anything, (*big.Int)(nil)).Run(func(args mock.Arguments) {
cancel()
}).Return(testutils.Head(0), context.Canceled)
err := ht.headTracker.Start(ctx)
require.ErrorIs(t, err, context.Canceled)
})`
$DIR/core/chains/evm/headtracker/head_tracker_test.go: `.WithCancel(tests.Context(t))`
$DIR/core/chains/evm/headtracker/head_tracker_test.go: `.Context(t)`
$DIR/core/chains/evm/headtracker/head_tracker_test.go: `.ethClient.On("HeadByNumber", mock.Anything, (*big.Int)(nil))`
$DIR/core/chains/evm/headtracker/head_tracker_test.go: `.Run(func(args mock.Arguments) {
cancel()
})`
$DIR/core/chains/evm/headtracker/head_tracker_test.go: `.Return(testutils.Head(0), context.Canceled)`
$DIR/core/chains/evm/headtracker/head_tracker_test.go: `.Head(0)`
$DIR/core/chains/evm/headtracker/head_tracker_test.go: `.headTracker.Start(ctx)`
$DIR/core/chains/evm/headtracker/head_tracker_test.go: `.Run("Starts even if failed to get initialHead", func(t *testing.T) {
ht := newHeadTracker(t, opts{})
ht.ethClient.On("HeadByNumber", mock.Anything, (*big.Int)(nil)).Return(testutils.Head(0), errors.New("failed to get init head"))
ht.Start(t)
tests.AssertLogEventually(t, ht.observer, "Error handling initial head")
})`
$DIR/core/chains/evm/headtracker/head_tracker_test.go: `.ethClient.On("HeadByNumber", mock.Anything, (*big.Int)(nil))`
$DIR/core/chains/evm/headtracker/head_tracker_test.go: `.Return(testutils.Head(0), errors.New("failed to get init head"))`
$DIR/core/chains/evm/headtracker/head_tracker_test.go: `.Head(0)`
$DIR/core/chains/evm/headtracker/head_tracker_test.go: `.New("failed to get init head")`
$DIR/core/chains/evm/headtracker/head_tracker_test.go: `.Start(t)`
$DIR/core/chains/evm/headtracker/head_tracker_test.go: `.AssertLogEventually(t, ht.observer, "Error handling initial head")`
$DIR/core/chains/evm/headtracker/head_tracker_test.go: `.Run("Starts even if received invalid head", func(t *testing.T) {
ht := newHeadTracker(t, opts{})
ht.ethClient.On("HeadByNumber", mock.Anything, (*big.Int)(nil)).Return(nil, nil)
ht.Start(t)
tests.AssertLogEventually(t, ht.observer, "Got nil initial head")
})`
$DIR/core/chains/evm/headtracker/head_tracker_test.go: `.ethClient.On("HeadByNumber", mock.Anything, (*big.Int)(nil))`
$DIR/core/chains/evm/headtracker/head_tracker_test.go: `.Return(nil, nil)`
$DIR/core/chains/evm/headtracker/head_tracker_test.go: `.Start(t)`
$DIR/core/chains/evm/headtracker/head_tracker_test.go: `.AssertLogEventually(t, ht.observer, "Got nil initial head")`
$DIR/core/chains/evm/headtracker/head_tracker_test.go: `.Run("Starts even if fails to get finalizedHead", func(t *testing.T) {
ht := newHeadTracker(t, opts{FinalityTagEnable: ptr(true), FinalityTagBypass: ptr(false)})
head := testutils.Head(1000)
ht.ethClient.On("HeadByNumber", mock.Anything, (*big.Int)(nil)).Return(head, nil).Once()
ht.ethClient.On("LatestFinalizedBlock", mock.Anything).Return(nil, errors.New("failed to load latest finalized")).Once()
ht.Start(t)
tests.AssertLogEventually(t, ht.observer, "Error handling initial head")
})`
$DIR/core/chains/evm/headtracker/head_tracker_test.go: `.Head(1000)`
$DIR/core/chains/evm/headtracker/head_tracker_test.go: `.ethClient.On("HeadByNumber", mock.Anything, (*big.Int)(nil))`
$DIR/core/chains/evm/headtracker/head_tracker_test.go: `.Return(head, nil)`
$DIR/core/chains/evm/headtracker/head_tracker_test.go: `.Once()`
$DIR/core/chains/evm/headtracker/head_tracker_test.go: `.ethClient.On("LatestFinalizedBlock", mock.Anything)`
$DIR/core/chains/evm/headtracker/head_tracker_test.go: `.Return(nil, errors.New("failed to load latest finalized"))`
$DIR/core/chains/evm/headtracker/head_tracker_test.go: `.New("failed to load latest finalized")`
$DIR/core/chains/evm/headtracker/head_tracker_test.go: `.Once()`
$DIR/core/chains/evm/headtracker/head_tracker_test.go: `.Start(t)`
$DIR/core/chains/evm/headtracker/head_tracker_test.go: `.AssertLogEventually(t, ht.observer, "Error handling initial head")`
$DIR/core/chains/evm/headtracker/head_tracker_test.go: `.Run("Starts even if latest finalizedHead is nil", func(t *testing.T) {
ht := newHeadTracker(t, opts{FinalityTagEnable: ptr(true), FinalityTagBypass: ptr(false)})
head := testutils.Head(1000)
ht.ethClient.On("HeadByNumber", mock.Anything, (*big.Int)(nil)).Return(head, nil).Once()
ht.ethClient.On("LatestFinalizedBlock", mock.Anything).Return(nil, nil).Once()
ht.ethClient.On("SubscribeNewHead", mock.Anything, mock.Anything).Return(nil, errors.New("failed to connect")).Maybe()
ht.Start(t)
tests.AssertLogEventually(t, ht.observer, "Error handling initial head")
})`
$DIR/core/chains/evm/headtracker/head_tracker_test.go: `.Head(1000)`
$DIR/core/chains/evm/headtracker/head_tracker_test.go: `.ethClient.On("HeadByNumber", mock.Anything, (*big.Int)(nil))`
$DIR/core/chains/evm/headtracker/head_tracker_test.go: `.Return(head, nil)`
$DIR/core/chains/evm/headtracker/head_tracker_test.go: `.Once()`
$DIR/core/chains/evm/headtracker/head_tracker_test.go: `.ethClient.On("LatestFinalizedBlock", mock.Anything)`
$DIR/core/chains/evm/headtracker/head_tracker_test.go: `.Return(nil, nil)`
$DIR/core/chains/evm/headtracker/head_tracker_test.go: `.Once()`
$DIR/core/chains/evm/headtracker/head_tracker_test.go: `.ethClient.On("SubscribeNewHead", mock.Anything, mock.Anything)`
$DIR/core/chains/evm/headtracker/head_tracker_test.go: `.Return(nil, errors.New("failed to connect"))`
$DIR/core/chains/evm/headtracker/head_tracker_test.go: `.New("failed to connect")`
$DIR/core/chains/evm/headtracker/head_tracker_test.go: `.Maybe()`
$DIR/core/chains/evm/headtracker/head_tracker_test.go: `.Start(t)`
$DIR/core/chains/evm/headtracker/head_tracker_test.go: `.AssertLogEventually(t, ht.observer, "Error handling initial head")`
$DIR/core/chains/evm/headtracker/head_tracker_test.go: `.Run("Logs error if finality gap is too big", func(t *testing.T) {
ht := newHeadTracker(t, opts{FinalityTagEnable: ptr(true), FinalityTagBypass: ptr(false), MaxAllowedFinalityDepth: ptr(uint32(10))})
head := testutils.Head(1000)
ht.ethClient.On("HeadByNumber", mock.Anything, (*big.Int)(nil)).Return(head, nil).Once()
ht.ethClient.On("LatestFinalizedBlock", mock.Anything).Return(testutils.Head(989), nil).Once()
ht.ethClient.On("SubscribeNewHead", mock.Anything, mock.Anything).Return(nil, errors.New("failed to connect")).Maybe()
ht.Start(t)
tests.AssertEventually(t, func() bool {
// must exactly match the error passed to logger
field := zap.String("err", "failed to calculate latest finalized head: gap between latest finalized block (989) and current head (1000) is too large (> 10)")
filtered := ht.observer.FilterMessage("Error handling initial head").FilterField(field)
return filtered.Len() > 0
})
})`
$DIR/core/chains/evm/headtracker/head_tracker_test.go: `.Head(1000)`
$DIR/core/chains/evm/headtracker/head_tracker_test.go: `.ethClient.On("HeadByNumber", mock.Anything, (*big.Int)(nil))`
$DIR/core/chains/evm/headtracker/head_tracker_test.go: `.Return(head, nil)`
$DIR/core/chains/evm/headtracker/head_tracker_test.go: `.Once()`
$DIR/core/chains/evm/headtracker/head_tracker_test.go: `.ethClient.On("LatestFinalizedBlock", mock.Anything)`
$DIR/core/chains/evm/headtracker/head_tracker_test.go: `.Return(testutils.Head(989), nil)`
$DIR/core/chains/evm/headtracker/head_tracker_test.go: `.Head(989)`
$DIR/core/chains/evm/headtracker/head_tracker_test.go: `.Once()`
$DIR/core/chains/evm/headtracker/head_tracker_test.go: `.ethClient.On("SubscribeNewHead", mock.Anything, mock.Anything)`
$DIR/core/chains/evm/headtracker/head_tracker_test.go: `.Return(nil, errors.New("failed to connect"))`
$DIR/core/chains/evm/headtracker/head_tracker_test.go: `.New("failed to connect")`
$DIR/core/chains/evm/headtracker/head_tracker_test.go: `.Maybe()`
$DIR/core/chains/evm/headtracker/head_tracker_test.go: `.Start(t)`
$DIR/core/chains/evm/headtracker/head_tracker_test.go: `.AssertEventually(t, func() bool {
// must exactly match the error passed to logger
field := zap.String("err", "failed to calculate latest finalized head: gap between latest finalized block (989) and current head (1000) is too large (> 10)")
filtered := ht.observer.FilterMessage("Error handling initial head").FilterField(field)
return filtered.Len() > 0
})`
$DIR/core/chains/evm/headtracker/head_tracker_test.go: `.String("err", "failed to calculate latest finalized head: gap between latest finalized block (989) and current head (1000) is too large (> 10)")`
$DIR/core/chains/evm/headtracker/head_tracker_test.go: `.observer.FilterMessage("Error handling initial head")`
$DIR/core/chains/evm/headtracker/head_tracker_test.go: `.FilterField(field)`
$DIR/core/chains/evm/headtracker/head_tracker_test.go: `.Len()`
$DIR/core/chains/evm/headtracker/head_tracker_test.go: `.Run("Happy path (finality tag)", func(t *testing.T) {
head := testutils.Head(1000)
ht := newHeadTracker(t, opts{FinalityTagEnable: ptr(true), FinalityTagBypass: ptr(false)})
ctx := tests.Context(t)
require.NoError(t, ht.orm.IdempotentInsertHead(ctx, testutils.Head(799)))
ht.ethClient.On("HeadByNumber", mock.Anything, (*big.Int)(nil)).Return(head, nil).Once()
finalizedHead := testutils.Head(800)
// on start
ht.ethClient.On("LatestFinalizedBlock", mock.Anything).Return(finalizedHead, nil).Once()
// on backfill
ht.ethClient.On("LatestFinalizedBlock", mock.Anything).Return(nil, errors.New("backfill call to finalized failed")).Maybe()
ht.ethClient.On("SubscribeNewHead", mock.Anything, mock.Anything).Return(nil, errors.New("failed to connect")).Maybe()
ht.Start(t)
tests.AssertLogEventually(t, ht.observer, "Loaded chain from DB")
})`
$DIR/core/chains/evm/headtracker/head_tracker_test.go: `.Head(1000)`
$DIR/core/chains/evm/headtracker/head_tracker_test.go: `.Context(t)`
$DIR/core/chains/evm/headtracker/head_tracker_test.go: `.ethClient.On("HeadByNumber", mock.Anything, (*big.Int)(nil))`
$DIR/core/chains/evm/headtracker/head_tracker_test.go: `.Return(head, nil)`
$DIR/core/chains/evm/headtracker/head_tracker_test.go: `.Once()`
$DIR/core/chains/evm/headtracker/head_tracker_test.go: `.Head(800)`
$DIR/core/chains/evm/headtracker/head_tracker_test.go: `.ethClient.On("LatestFinalizedBlock", mock.Anything)`
$DIR/core/chains/evm/headtracker/head_tracker_test.go: `.Return(finalizedHead, nil)`
$DIR/core/chains/evm/headtracker/head_tracker_test.go: `.Once()`
$DIR/core/chains/evm/headtracker/head_tracker_test.go: `.ethClient.On("LatestFinalizedBlock", mock.Anything)`
$DIR/core/chains/evm/headtracker/head_tracker_test.go: `.Return(nil, errors.New("backfill call to finalized failed"))`
$DIR/core/chains/evm/headtracker/head_tracker_test.go: `.New("backfill call to finalized failed")`
$DIR/core/chains/evm/headtracker/head_tracker_test.go: `.Maybe()`
$DIR/core/chains/evm/headtracker/head_tracker_test.go: `.ethClient.On("SubscribeNewHead", mock.Anything, mock.Anything)`
$DIR/core/chains/evm/headtracker/head_tracker_test.go: `.Return(nil, errors.New("failed to connect"))`
$DIR/core/chains/evm/headtracker/head_tracker_test.go: `.New("failed to connect")`
$DIR/core/chains/evm/headtracker/head_tracker_test.go: `.Maybe()`
$DIR/core/chains/evm/headtracker/head_tracker_test.go: `.Start(t)`
$DIR/core/chains/evm/headtracker/head_tracker_test.go: `.AssertLogEventually(t, ht.observer, "Loaded chain from DB")`
$DIR/core/chains/evm/headtracker/head_tracker_test.go: `.Head(1000)`
$DIR/core/chains/evm/headtracker/head_tracker_test.go: `.ethClient.On("HeadByNumber", mock.Anything, (*big.Int)(nil))`
$DIR/core/chains/evm/headtracker/head_tracker_test.go: `.Return(head, nil)`
$DIR/core/chains/evm/headtracker/head_tracker_test.go: `.Once()`
$DIR/core/chains/evm/headtracker/head_tracker_test.go: `.Head(head.Number - finalityDepth)`
$DIR/core/chains/evm/headtracker/head_tracker_test.go: `.ethClient.On("HeadByNumber", mock.Anything, big.NewInt(finalizedHead.Number))`
$DIR/core/chains/evm/headtracker/head_tracker_test.go: `.NewInt(finalizedHead.Number)`
$DIR/core/chains/evm/headtracker/head_tracker_test.go: `.Return(finalizedHead, nil)`
$DIR/core/chains/evm/headtracker/head_tracker_test.go: `.Once()`
$DIR/core/chains/evm/headtracker/head_tracker_test.go: `.Context(t)`
$DIR/core/chains/evm/headtracker/head_tracker_test.go: `.ethClient.On("HeadByNumber", mock.Anything, mock.Anything)`
$DIR/core/chains/evm/headtracker/head_tracker_test.go: `.Return(nil, errors.New("backfill call to finalized failed"))`
$DIR/core/chains/evm/headtracker/head_tracker_test.go: `.New("backfill call to finalized failed")`
$DIR/core/chains/evm/headtracker/head_tracker_test.go: `.Maybe()`
$DIR/core/chains/evm/headtracker/head_tracker_test.go: `.ethClient.On("SubscribeNewHead", mock.Anything, mock.Anything)`
$DIR/core/chains/evm/headtracker/head_tracker_test.go: `.Return(nil, errors.New("failed to connect"))`
$DIR/core/chains/evm/headtracker/head_tracker_test.go: `.New("failed to connect")`
$DIR/core/chains/evm/headtracker/head_tracker_test.go: `.Maybe()`
$DIR/core/chains/evm/headtracker/head_tracker_test.go: `.Start(t)`
$DIR/core/chains/evm/headtracker/head_tracker_test.go: `.AssertLogEventually(t, ht.observer, "Loaded chain from DB")`
$DIR/core/chains/evm/headtracker/head_tracker_test.go: `.Run(tc.Name, func(t *testing.T) {
happyPathFD(t, tc.Opts)
})`
$DIR/core/chains/evm/headtracker/head_tracker_test.go: `.NewWithT(t)`
$DIR/core/chains/evm/headtracker/head_tracker_test.go: `.NewSqlxDB(t)`
$DIR/core/chains/evm/headtracker/head_tracker_test.go: `.NewTestChainScopedConfig(t, nil)`
$DIR/core/chains/evm/headtracker/head_tracker_test.go: `.NewORM(*testutils.FixtureChainID, db)`
$DIR/core/chains/evm/headtracker/head_tracker_test.go: `.NewEthClientMockWithDefaultChain(t)`
$DIR/core/chains/evm/headtracker/head_tracker_test.go: `.On("SubscribeNewHead", mock.Anything, mock.Anything)`
$DIR/core/chains/evm/headtracker/head_tracker_test.go: `.
Return(
func(ctx context.Context, ch chan<- *evmtypes.Head) ethereum.Subscription {
sub := mockEth.NewSub(t)
chchHeaders <- testutils.NewRawSub(ch, sub.Err())
return sub
},
func(ctx context.Context, ch chan<- *evmtypes.Head) error { return nil },
)`
$DIR/core/chains/evm/headtracker/head_tracker_test.go: `.NewSub(t)`
$DIR/core/chains/evm/headtracker/head_tracker_test.go: `.NewRawSub(ch, sub.Err())`
$DIR/core/chains/evm/headtracker/head_tracker_test.go: `.Err()`
$DIR/core/chains/evm/headtracker/head_tracker_test.go: `.On("HeadByNumber", mock.Anything, mock.Anything)`
$DIR/core/chains/evm/headtracker/head_tracker_test.go: `.Return(testutils.Head(0), nil)`
$DIR/core/chains/evm/headtracker/head_tracker_test.go: `.Head(0)`
$DIR/core/chains/evm/headtracker/head_tracker_test.go: `.On("HeadByHash", mock.Anything, mock.Anything)`
$DIR/core/chains/evm/headtracker/head_tracker_test.go: `.Return(testutils.Head(0), nil)`
$DIR/core/chains/evm/headtracker/head_tracker_test.go: `.Head(0)`
$DIR/core/chains/evm/headtracker/head_tracker_test.go: `.Maybe()`
$DIR/core/chains/evm/headtracker/head_tracker_test.go: `.EVM()`
$DIR/core/chains/evm/headtracker/head_tracker_test.go: `.EVM()`
$DIR/core/chains/evm/headtracker/head_tracker_test.go: `.HeadTracker()`
$DIR/core/chains/evm/headtracker/head_tracker_test.go: `.Start(t)`
$DIR/core/chains/evm/headtracker/head_tracker_test.go: `.TrySend(&evmtypes.Head{Number: 1, Hash: utils.NewHash(), EVMChainID: ubig.New(testutils.FixtureChainID)})`
$DIR/core/chains/evm/headtracker/head_tracker_test.go: `.NewHash()`
$DIR/core/chains/evm/headtracker/head_tracker_test.go: `.New(testutils.FixtureChainID)`
$DIR/core/chains/evm/headtracker/head_tracker_test.go: `.Eventually(checker.OnNewLongestChainCount)`
$DIR/core/chains/evm/headtracker/head_tracker_test.go: `.Should(gomega.Equal(int32(1)))`
$DIR/core/chains/evm/headtracker/head_tracker_test.go: `.Equal(int32(1))`
$DIR/core/chains/evm/headtracker/head_tracker_test.go: `.Stop(t)`
$DIR/core/chains/evm/headtracker/head_tracker_test.go: `.OnNewLongestChainCount()`
$DIR/core/chains/evm/headtracker/head_tracker_test.go: `.NewWithT(t)`
$DIR/core/chains/evm/headtracker/head_tracker_test.go: `.NewSqlxDB(t)`
$DIR/core/chains/evm/headtracker/head_tracker_test.go: `.NewTestChainScopedConfig(t, nil)`
$DIR/core/chains/evm/headtracker/head_tracker_test.go: `.NewORM(*testutils.FixtureChainID, db)`
$DIR/core/chains/evm/headtracker/head_tracker_test.go: `.NewEthClientMockWithDefaultChain(t)`
$DIR/core/chains/evm/headtracker/head_tracker_test.go: `.On("SubscribeNewHead", mock.Anything, mock.Anything)`
$DIR/core/chains/evm/headtracker/head_tracker_test.go: `.
Return(
func(ctx context.Context, ch chan<- *evmtypes.Head) ethereum.Subscription { return mockEth.NewSub(t) },
func(ctx context.Context, ch chan<- *evmtypes.Head) error { return nil },
)`
$DIR/core/chains/evm/headtracker/head_tracker_test.go: `.NewSub(t)`
$DIR/core/chains/evm/headtracker/head_tracker_test.go: `.On("SubscribeNewHead", mock.Anything, mock.Anything)`
$DIR/core/chains/evm/headtracker/head_tracker_test.go: `.Return(nil, errors.New("cannot reconnect"))`
$DIR/core/chains/evm/headtracker/head_tracker_test.go: `.New("cannot reconnect")`
$DIR/core/chains/evm/headtracker/head_tracker_test.go: `.On("SubscribeNewHead", mock.Anything, mock.Anything)`
$DIR/core/chains/evm/headtracker/head_tracker_test.go: `.
Return(
func(ctx context.Context, ch chan<- *evmtypes.Head) ethereum.Subscription { return mockEth.NewSub(t) },
func(ctx context.Context, ch chan<- *evmtypes.Head) error { return nil },
)`
$DIR/core/chains/evm/headtracker/head_tracker_test.go: `.NewSub(t)`
$DIR/core/chains/evm/headtracker/head_tracker_test.go: `.On("HeadByNumber", mock.Anything, mock.Anything)`
$DIR/core/chains/evm/headtracker/head_tracker_test.go: `.Return(testutils.Head(0), nil)`
$DIR/core/chains/evm/headtracker/head_tracker_test.go: `.Head(0)`
$DIR/core/chains/evm/headtracker/head_tracker_test.go: `.EVM()`
$DIR/core/chains/evm/headtracker/head_tracker_test.go: `.EVM()`
$DIR/core/chains/evm/headtracker/head_tracker_test.go: `.HeadTracker()`
$DIR/core/chains/evm/headtracker/head_tracker_test.go: `.Start(t)`
$DIR/core/chains/evm/headtracker/head_tracker_test.go: `.SubsErr(errors.New("test error to force reconnect"))`
$DIR/core/chains/evm/headtracker/head_tracker_test.go: `.New("test error to force reconnect")`
$DIR/core/chains/evm/headtracker/head_tracker_test.go: `.Eventually(checker.OnNewLongestChainCount, 5*time.Second, tests.TestInterval)`
$DIR/core/chains/evm/headtracker/head_tracker_test.go: `.Equal(int32(1))`
$DIR/core/chains/evm/headtracker/head_tracker_test.go: `.NewWithT(t)`
$DIR/core/chains/evm/headtracker/head_tracker_test.go: `.NewSqlxDB(t)`
$DIR/core/chains/evm/headtracker/head_tracker_test.go: `.NewTestChainScopedConfig(t, nil)`
$DIR/core/chains/evm/headtracker/head_tracker_test.go: `.NewORM(*testutils.FixtureChainID, db)`
$DIR/core/chains/evm/headtracker/head_tracker_test.go: `.NewEthClientMockWithDefaultChain(t)`
$DIR/core/chains/evm/headtracker/head_tracker_test.go: `.On("SubscribeNewHead", mock.Anything, mock.Anything)`
$DIR/core/chains/evm/headtracker/head_tracker_test.go: `.
Return(
func(ctx context.Context, ch chan<- *evmtypes.Head) ethereum.Subscription {
sub := mockEth.NewSub(t)
chchHeaders <- testutils.NewRawSub(ch, sub.Err())
return sub
},
func(ctx context.Context, ch chan<- *evmtypes.Head) error { return nil },
)`
$DIR/core/chains/evm/headtracker/head_tracker_test.go: `.NewSub(t)`
$DIR/core/chains/evm/headtracker/head_tracker_test.go: `.NewRawSub(ch, sub.Err())`
$DIR/core/chains/evm/headtracker/head_tracker_test.go: `.Err()`
$DIR/core/chains/evm/headtracker/head_tracker_test.go: `.On("HeadByNumber", mock.Anything, mock.Anything)`
$DIR/core/chains/evm/headtracker/head_tracker_test.go: `.Return(testutils.Head(0), nil)`
$DIR/core/chains/evm/headtracker/head_tracker_test.go: `.Head(0)`
$DIR/core/chains/evm/headtracker/head_tracker_test.go: `.On("HeadByHash", mock.Anything, mock.Anything)`
$DIR/core/chains/evm/headtracker/head_tracker_test.go: `.Return(testutils.Head(0), nil)`
$DIR/core/chains/evm/headtracker/head_tracker_test.go: `.Head(0)`
$DIR/core/chains/evm/headtracker/head_tracker_test.go: `.Maybe()`
$DIR/core/chains/evm/headtracker/head_tracker_test.go: `.EVM()`
$DIR/core/chains/evm/headtracker/head_tracker_test.go: `.EVM()`
$DIR/core/chains/evm/headtracker/head_tracker_test.go: `.HeadTracker()`
$DIR/core/chains/evm/headtracker/head_tracker_test.go: `.Start(t)`
$DIR/core/chains/evm/headtracker/head_tracker_test.go: `.TrySend(testutils.Head(1))`
$DIR/core/chains/evm/headtracker/head_tracker_test.go: `.Head(1)`
$DIR/core/chains/evm/headtracker/head_tracker_test.go: `.Eventually(func() bool {
report := ht.headTracker.HealthReport()
return !slices.ContainsFunc(maps.Values(report), func(e error) bool { return e != nil })
}, 5*time.Second, tests.TestInterval)`
$DIR/core/chains/evm/headtracker/head_tracker_test.go: `.headTracker.HealthReport()`
$DIR/core/chains/evm/headtracker/head_tracker_test.go: `.ContainsFunc(maps.Values(report), func(e error) bool { return e != nil })`
$DIR/core/chains/evm/headtracker/head_tracker_test.go: `.Values(report)`
$DIR/core/chains/evm/headtracker/head_tracker_test.go: `.Should(gomega.Equal(true))`
$DIR/core/chains/evm/headtracker/head_tracker_test.go: `.Equal(true)`
$DIR/core/chains/evm/headtracker/head_tracker_test.go: `.CloseCh()`
$DIR/core/chains/evm/headtracker/head_tracker_test.go: `.Eventually(checker.OnNewLongestChainCount, 5*time.Second, tests.TestInterval)`
$DIR/core/chains/evm/headtracker/head_tracker_test.go: `.Equal(int32(1))`
$DIR/core/chains/evm/headtracker/head_tracker_test.go: `.NewSqlxDB(t)`
$DIR/core/chains/evm/headtracker/head_tracker_test.go: `.NewTestChainScopedConfig(t, nil)`
$DIR/core/chains/evm/headtracker/head_tracker_test.go: `.NewEthClientMockWithDefaultChain(t)`
$DIR/core/chains/evm/headtracker/head_tracker_test.go: `.Head(0)`
$DIR/core/chains/evm/headtracker/head_tracker_test.go: `.Head(1)`
$DIR/core/chains/evm/headtracker/head_tracker_test.go: `.Head(2)`
$DIR/core/chains/evm/headtracker/head_tracker_test.go: `.Head(3)`
$DIR/core/chains/evm/headtracker/head_tracker_test.go: `.On("HeadByNumber", mock.Anything, (*big.Int)(nil))`
$DIR/core/chains/evm/headtracker/head_tracker_test.go: `.Return(heads[3], nil)`
$DIR/core/chains/evm/headtracker/head_tracker_test.go: `.Maybe()`
$DIR/core/chains/evm/headtracker/head_tracker_test.go: `.On("HeadByNumber", mock.Anything, big.NewInt(0))`
$DIR/core/chains/evm/headtracker/head_tracker_test.go: `.NewInt(0)`
$DIR/core/chains/evm/headtracker/head_tracker_test.go: `.Return(heads[0], nil)`
$DIR/core/chains/evm/headtracker/head_tracker_test.go: `.Maybe()`
$DIR/core/chains/evm/headtracker/head_tracker_test.go: `.On("HeadByHash", mock.Anything, heads[2].Hash)`
$DIR/core/chains/evm/headtracker/head_tracker_test.go: `.Return(heads[2], nil)`
$DIR/core/chains/evm/headtracker/head_tracker_test.go: `.Maybe()`
$DIR/core/chains/evm/headtracker/head_tracker_test.go: `.On("HeadByHash", mock.Anything, heads[1].Hash)`
$DIR/core/chains/evm/headtracker/head_tracker_test.go: `.Return(heads[1], nil)`
$DIR/core/chains/evm/headtracker/head_tracker_test.go: `.Maybe()`
$DIR/core/chains/evm/headtracker/head_tracker_test.go: `.On("HeadByHash", mock.Anything, heads[0].Hash)`
$DIR/core/chains/evm/headtracker/head_tracker_test.go: `.Return(heads[0], nil)`
$DIR/core/chains/evm/headtracker/head_tracker_test.go: `.Maybe()`
$DIR/core/chains/evm/headtracker/head_tracker_test.go: `.On("SubscribeNewHead", mock.Anything, mock.Anything)`
$DIR/core/chains/evm/headtracker/head_tracker_test.go: `.
Return(
func(ctx context.Context, ch chan<- *evmtypes.Head) ethereum.Subscription {
sub := mockEth.NewSub(t)
chchHeaders <- testutils.NewRawSub(ch, sub.Err())
return sub
},
func(ctx context.Context, ch chan<- *evmtypes.Head) error { return nil },
)`
$DIR/core/chains/evm/headtracker/head_tracker_test.go: `.NewSub(t)`
$DIR/core/chains/evm/headtracker/head_tracker_test.go: `.NewRawSub(ch, sub.Err())`
$DIR/core/chains/evm/headtracker/head_tracker_test.go: `.Err()`
$DIR/core/chains/evm/headtracker/head_tracker_test.go: `.NewORM(*testutils.FixtureChainID, db)`
$DIR/core/chains/evm/headtracker/head_tracker_test.go: `.EVM()`
$DIR/core/chains/evm/headtracker/head_tracker_test.go: `.EVM()`
$DIR/core/chains/evm/headtracker/head_tracker_test.go: `.HeadTracker()`
$DIR/core/chains/evm/headtracker/head_tracker_test.go: `.Start(t)`
$DIR/core/chains/evm/headtracker/head_tracker_test.go: `.TrySend(testutils.Head(1))`
$DIR/core/chains/evm/headtracker/head_tracker_test.go: `.Head(1)`
$DIR/core/chains/evm/headtracker/head_tracker_test.go: `.NewWithT(t)`
$DIR/core/chains/evm/headtracker/head_tracker_test.go: `.Eventually(func() bool {
report := ht.headTracker.HealthReport()
services.CopyHealth(report, ht.headBroadcaster.HealthReport())
return !slices.ContainsFunc(maps.Values(report), func(e error) bool { return e != nil })
}, 5*time.Second, tests.TestInterval)`
$DIR/core/chains/evm/headtracker/head_tracker_test.go: `.headTracker.HealthReport()`
$DIR/core/chains/evm/headtracker/head_tracker_test.go: `.CopyHealth(report, ht.headBroadcaster.HealthReport())`
$DIR/core/chains/evm/headtracker/head_tracker_test.go: `.headBroadcaster.HealthReport()`
$DIR/core/chains/evm/headtracker/head_tracker_test.go: `.ContainsFunc(maps.Values(report), func(e error) bool { return e != nil })`
$DIR/core/chains/evm/headtracker/head_tracker_test.go: `.Values(report)`
$DIR/core/chains/evm/headtracker/head_tracker_test.go: `.Should(gomega.Equal(true))`
$DIR/core/chains/evm/headtracker/head_tracker_test.go: `.Equal(true)`
$DIR/core/chains/evm/headtracker/head_tracker_test.go: `.LatestHead(tests.Context(t))`
$DIR/core/chains/evm/headtracker/head_tracker_test.go: `.Context(t)`
$DIR/core/chains/evm/headtracker/head_tracker_test.go: `.NewSqlxDB(t)`
$DIR/core/chains/evm/headtracker/head_tracker_test.go: `.NewTestChainScopedConfig(t, func(c *toml.EVMConfig) {
c.FinalityDepth = ptr[uint32](50)
// Need to set the buffer to something large since we inject a lot of heads at once and otherwise they will be dropped
c.HeadTracker.MaxBufferSize = ptr[uint32](100)
c.HeadTracker.SamplingInterval = commonconfig.MustNewDuration(2500 * time.Millisecond)
})`
$DIR/core/chains/evm/headtracker/head_tracker_test.go: `.MustNewDuration(2500 * time.Millisecond)`
$DIR/core/chains/evm/headtracker/head_tracker_test.go: `.NewEthClientMockWithDefaultChain(t)`
$DIR/core/chains/evm/headtracker/head_tracker_test.go: `.NewORM(*config.EVM().ChainID(), db)`
$DIR/core/chains/evm/headtracker/head_tracker_test.go: `.EVM()`
$DIR/core/chains/evm/headtracker/head_tracker_test.go: `.ChainID()`
$DIR/core/chains/evm/headtracker/head_tracker_test.go: `.EVM()`
$DIR/core/chains/evm/headtracker/head_tracker_test.go: `.EVM()`
$DIR/core/chains/evm/headtracker/head_tracker_test.go: `.HeadTracker()`
$DIR/core/chains/evm/headtracker/head_tracker_test.go: `.On("SubscribeNewHead", mock.Anything, mock.Anything)`
$DIR/core/chains/evm/headtracker/head_tracker_test.go: `.
Return(
func(ctx context.Context, ch chan<- *evmtypes.Head) ethereum.Subscription {
sub := mockEth.NewSub(t)
chchHeaders <- testutils.NewRawSub(ch, sub.Err())
return sub
},
func(ctx context.Context, ch chan<- *evmtypes.Head) error { return nil },
)`
$DIR/core/chains/evm/headtracker/head_tracker_test.go: `.NewSub(t)`
$DIR/core/chains/evm/headtracker/head_tracker_test.go: `.NewRawSub(ch, sub.Err())`
$DIR/core/chains/evm/headtracker/head_tracker_test.go: `.Err()`
$DIR/core/chains/evm/headtracker/head_tracker_test.go: `.Head(0)`
$DIR/core/chains/evm/headtracker/head_tracker_test.go: `.On("HeadByNumber", mock.Anything, (*big.Int)(nil))`
$DIR/core/chains/evm/headtracker/head_tracker_test.go: `.Return(head0, nil)`
$DIR/core/chains/evm/headtracker/head_tracker_test.go: `.On("HeadByNumber", mock.Anything, big.NewInt(0))`
$DIR/core/chains/evm/headtracker/head_tracker_test.go: `.NewInt(0)`
$DIR/core/chains/evm/headtracker/head_tracker_test.go: `.Return(head0, nil)`
$DIR/core/chains/evm/headtracker/head_tracker_test.go: `.Start(t)`
$DIR/core/chains/evm/headtracker/head_tracker_test.go: `.Append(blocks.Head(0))`
$DIR/core/chains/evm/headtracker/head_tracker_test.go: `.Head(0)`
$DIR/core/chains/evm/headtracker/head_tracker_test.go: `.Append(blocks.Head(1))`
$DIR/core/chains/evm/headtracker/head_tracker_test.go: `.Head(1)`
$DIR/core/chains/evm/headtracker/head_tracker_test.go: `.Append(blocks.Head(3))`
$DIR/core/chains/evm/headtracker/head_tracker_test.go: `.Head(3)`
$DIR/core/chains/evm/headtracker/head_tracker_test.go: `.Append(blocks.Head(2))`
$DIR/core/chains/evm/headtracker/head_tracker_test.go: `.Head(2)`
$DIR/core/chains/evm/headtracker/head_tracker_test.go: `.Append(blocks.Head(4))`
$DIR/core/chains/evm/headtracker/head_tracker_test.go: `.Head(4)`
$DIR/core/chains/evm/headtracker/head_tracker_test.go: `.Append(blocks.NewHead(4))`
$DIR/core/chains/evm/headtracker/head_tracker_test.go: `.NewHead(4)`
$DIR/core/chains/evm/headtracker/head_tracker_test.go: `.ForkAt(t, 2, 5)`
$DIR/core/chains/evm/headtracker/head_tracker_test.go: `.Append(blocksForked.Head(2))`
$DIR/core/chains/evm/headtracker/head_tracker_test.go: `.Head(2)`
$DIR/core/chains/evm/headtracker/head_tracker_test.go: `.Append(blocksForked.Head(3))`
$DIR/core/chains/evm/headtracker/head_tracker_test.go: `.Head(3)`
$DIR/core/chains/evm/headtracker/head_tracker_test.go: `.Append(blocksForked.Head(4))`
$DIR/core/chains/evm/headtracker/head_tracker_test.go: `.Head(4)`
$DIR/core/chains/evm/headtracker/head_tracker_test.go: `.Append(blocksForked.Head(5))`
$DIR/core/chains/evm/headtracker/head_tracker_test.go: `.Head(5)`
$DIR/core/chains/evm/headtracker/head_tracker_test.go: `.NewAwaiter()`
$DIR/core/chains/evm/headtracker/head_tracker_test.go: `.On("OnNewLongestChain", mock.Anything, mock.Anything)`
$DIR/core/chains/evm/headtracker/head_tracker_test.go: `.
Run(func(args mock.Arguments) {
h := args.Get(1).(*evmtypes.Head)
assert.Equal(t, int64(5), h.Number)
assert.Equal(t, blocksForked.Head(5).Hash, h.Hash)
// This is the new longest chain, check that it came with its parents
if !assert.NotNil(t, h.Parent) {
return
}
assert.Equal(t, h.Parent.Hash, blocksForked.Head(4).Hash)
if !assert.NotNil(t, h.Parent.Parent) {
return
}
assert.Equal(t, h.Parent.Parent.Hash, blocksForked.Head(3).Hash)
if !assert.NotNil(t, h.Parent.Parent.Parent) {
return
}
assert.Equal(t, h.Parent.Parent.Parent.Hash, blocksForked.Head(2).Hash)
if !assert.NotNil(t, h.Parent.Parent.Parent.Parent) {
return
}
assert.Equal(t, h.Parent.Parent.Parent.Parent.Hash, blocksForked.Head(1).Hash)
lastLongestChainAwaiter.ItHappened()
})`
$DIR/core/chains/evm/headtracker/head_tracker_test.go: `.Get(1)`
$DIR/core/chains/evm/headtracker/head_tracker_test.go: `.ItHappened()`
$DIR/core/chains/evm/headtracker/head_tracker_test.go: `.Return()`
$DIR/core/chains/evm/headtracker/head_tracker_test.go: `.Once()`
$DIR/core/chains/evm/headtracker/head_tracker_test.go: `.On("HeadByHash", mock.Anything, mock.Anything)`
$DIR/core/chains/evm/headtracker/head_tracker_test.go: `.Maybe()`
$DIR/core/chains/evm/headtracker/head_tracker_test.go: `.Lock()`
$DIR/core/chains/evm/headtracker/head_tracker_test.go: `.Unlock()`
$DIR/core/chains/evm/headtracker/head_tracker_test.go: `.Get(1)`
$DIR/core/chains/evm/headtracker/head_tracker_test.go: `.Lock()`
$DIR/core/chains/evm/headtracker/head_tracker_test.go: `.Unlock()`
$DIR/core/chains/evm/headtracker/head_tracker_test.go: `.TrySend(h)`
$DIR/core/chains/evm/headtracker/head_tracker_test.go: `.AwaitOrFail(t, tests.WaitTimeout(t))`
$DIR/core/chains/evm/headtracker/head_tracker_test.go: `.WaitTimeout(t)`
$DIR/core/chains/evm/headtracker/head_tracker_test.go: `.Stop(t)`
$DIR/core/chains/evm/headtracker/head_tracker_test.go: `.headSaver.Chain(h.Hash)`
$DIR/core/chains/evm/headtracker/head_tracker_test.go: `.NewSqlxDB(t)`
$DIR/core/chains/evm/headtracker/head_tracker_test.go: `.NewTestChainScopedConfig(t, func(c *toml.EVMConfig) {
c.FinalityDepth = ptr[uint32](50)
// Need to set the buffer to something large since we inject a lot of heads at once and otherwise they will be dropped
c.HeadTracker.MaxBufferSize = ptr[uint32](100)
c.HeadTracker.SamplingInterval = commonconfig.MustNewDuration(0)
})`
$DIR/core/chains/evm/headtracker/head_tracker_test.go: `.MustNewDuration(0)`
$DIR/core/chains/evm/headtracker/head_tracker_test.go: `.NewEthClientMockWithDefaultChain(t)`
$DIR/core/chains/evm/headtracker/head_tracker_test.go: `.NewORM(*testutils.FixtureChainID, db)`
$DIR/core/chains/evm/headtracker/head_tracker_test.go: `.EVM()`
$DIR/core/chains/evm/headtracker/head_tracker_test.go: `.EVM()`
$DIR/core/chains/evm/headtracker/head_tracker_test.go: `.HeadTracker()`
$DIR/core/chains/evm/headtracker/head_tracker_test.go: `.On("SubscribeNewHead", mock.Anything, mock.Anything)`
$DIR/core/chains/evm/headtracker/head_tracker_test.go: `.
Return(
func(ctx context.Context, ch chan<- *evmtypes.Head) ethereum.Subscription {
sub := mockEth.NewSub(t)
chchHeaders <- testutils.NewRawSub(ch, sub.Err())
return sub
},
func(ctx context.Context, ch chan<- *evmtypes.Head) error { return nil },
)`
$DIR/core/chains/evm/headtracker/head_tracker_test.go: `.NewSub(t)`
$DIR/core/chains/evm/headtracker/head_tracker_test.go: `.NewRawSub(ch, sub.Err())`
$DIR/core/chains/evm/headtracker/head_tracker_test.go: `.Err()`
$DIR/core/chains/evm/headtracker/head_tracker_test.go: `.Head(0)`
$DIR/core/chains/evm/headtracker/head_tracker_test.go: `.On("HeadByNumber", mock.Anything, (*big.Int)(nil))`
$DIR/core/chains/evm/headtracker/head_tracker_test.go: `.Return(head0, nil)`
$DIR/core/chains/evm/headtracker/head_tracker_test.go: `.On("HeadByNumber", mock.Anything, big.NewInt(0))`
$DIR/core/chains/evm/headtracker/head_tracker_test.go: `.NewInt(0)`
$DIR/core/chains/evm/headtracker/head_tracker_test.go: `.Return(head0, nil)`
$DIR/core/chains/evm/headtracker/head_tracker_test.go: `.Append(blocks.Head(0))`
$DIR/core/chains/evm/headtracker/head_tracker_test.go: `.Head(0)`
$DIR/core/chains/evm/headtracker/head_tracker_test.go: `.Append(blocks.Head(1))`
$DIR/core/chains/evm/headtracker/head_tracker_test.go: `.Head(1)`
$DIR/core/chains/evm/headtracker/head_tracker_test.go: `.Append(blocks.Head(3))`
$DIR/core/chains/evm/headtracker/head_tracker_test.go: `.Head(3)`
$DIR/core/chains/evm/headtracker/head_tracker_test.go: `.Append(blocks.Head(2))`
$DIR/core/chains/evm/headtracker/head_tracker_test.go: `.Head(2)`
$DIR/core/chains/evm/headtracker/head_tracker_test.go: `.Append(blocks.Head(4))`
$DIR/core/chains/evm/headtracker/head_tracker_test.go: `.Head(4)`
$DIR/core/chains/evm/headtracker/head_tracker_test.go: `.Append(blocks.NewHead(4))`
$DIR/core/chains/evm/headtracker/head_tracker_test.go: `.NewHead(4)`
$DIR/core/chains/evm/headtracker/head_tracker_test.go: `.ForkAt(t, 2, 5)`
$DIR/core/chains/evm/headtracker/head_tracker_test.go: `.Append(blocksForked.Head(2))`
$DIR/core/chains/evm/headtracker/head_tracker_test.go: `.Head(2)`
$DIR/core/chains/evm/headtracker/head_tracker_test.go: `.Append(blocksForked.Head(3))`
$DIR/core/chains/evm/headtracker/head_tracker_test.go: `.Head(3)`
$DIR/core/chains/evm/headtracker/head_tracker_test.go: `.Append(blocksForked.Head(4))`
$DIR/core/chains/evm/headtracker/head_tracker_test.go: `.Head(4)`
$DIR/core/chains/evm/headtracker/head_tracker_test.go: `.Append(blocksForked.Head(5))`
$DIR/core/chains/evm/headtracker/head_tracker_test.go: `.Head(5)`
$DIR/core/chains/evm/headtracker/head_tracker_test.go: `.NewAwaiter()`
$DIR/core/chains/evm/headtracker/head_tracker_test.go: `.On("OnNewLongestChain", mock.Anything, mock.Anything)`
$DIR/core/chains/evm/headtracker/head_tracker_test.go: `.
Run(func(args mock.Arguments) {
h := args.Get(1).(*evmtypes.Head)
require.Equal(t, int64(0), h.Number)
require.Equal(t, blocks.Head(0).Hash, h.Hash)
})`
$DIR/core/chains/evm/headtracker/head_tracker_test.go: `.Get(1)`
$DIR/core/chains/evm/headtracker/head_tracker_test.go: `.Return()`
$DIR/core/chains/evm/headtracker/head_tracker_test.go: `.Once()`
$DIR/core/chains/evm/headtracker/head_tracker_test.go: `.On("OnNewLongestChain", mock.Anything, mock.Anything)`
$DIR/core/chains/evm/headtracker/head_tracker_test.go: `.
Run(func(args mock.Arguments) {
h := args.Get(1).(*evmtypes.Head)
require.Equal(t, int64(1), h.Number)
require.Equal(t, blocks.Head(1).Hash, h.Hash)
})`
$DIR/core/chains/evm/headtracker/head_tracker_test.go: `.Get(1)`
$DIR/core/chains/evm/headtracker/head_tracker_test.go: `.Return()`
$DIR/core/chains/evm/headtracker/head_tracker_test.go: `.Once()`
$DIR/core/chains/evm/headtracker/head_tracker_test.go: `.On("OnNewLongestChain", mock.Anything, mock.Anything)`
$DIR/core/chains/evm/headtracker/head_tracker_test.go: `.
Run(func(args mock.Arguments) {
h := args.Get(1).(*evmtypes.Head)
require.Equal(t, int64(3), h.Number)
require.Equal(t, blocks.Head(3).Hash, h.Hash)
})`
$DIR/core/chains/evm/headtracker/head_tracker_test.go: `.Get(1)`
$DIR/core/chains/evm/headtracker/head_tracker_test.go: `.Return()`
$DIR/core/chains/evm/headtracker/head_tracker_test.go: `.Once()`
$DIR/core/chains/evm/headtracker/head_tracker_test.go: `.On("OnNewLongestChain", mock.Anything, mock.Anything)`
$DIR/core/chains/evm/headtracker/head_tracker_test.go: `.
Run(func(args mock.Arguments) {
h := args.Get(1).(*evmtypes.Head)
require.Equal(t, int64(4), h.Number)
require.Equal(t, blocks.Head(4).Hash, h.Hash)
// Check that the block came with its parents
require.NotNil(t, h.Parent)
require.Equal(t, h.Parent.Hash, blocks.Head(3).Hash)
require.NotNil(t, h.Parent.Parent.Hash)
require.Equal(t, h.Parent.Parent.Hash, blocks.Head(2).Hash)
require.NotNil(t, h.Parent.Parent.Parent)
require.Equal(t, h.Parent.Parent.Parent.Hash, blocks.Head(1).Hash)
})`
$DIR/core/chains/evm/headtracker/head_tracker_test.go: `.Get(1)`
$DIR/core/chains/evm/headtracker/head_tracker_test.go: `.Return()`
$DIR/core/chains/evm/headtracker/head_tracker_test.go: `.Once()`
$DIR/core/chains/evm/headtracker/head_tracker_test.go: `.On("OnNewLongestChain", mock.Anything, mock.Anything)`
$DIR/core/chains/evm/headtracker/head_tracker_test.go: `.
Run(func(args mock.Arguments) {
h := args.Get(1).(*evmtypes.Head)
require.Equal(t, int64(5), h.Number)
require.Equal(t, blocksForked.Head(5).Hash, h.Hash)
// This is the new longest chain, check that it came with its parents
require.NotNil(t, h.Parent)
require.Equal(t, h.Parent.Hash, blocksForked.Head(4).Hash)
require.NotNil(t, h.Parent.Parent)
require.Equal(t, h.Parent.Parent.Hash, blocksForked.Head(3).Hash)
require.NotNil(t, h.Parent.Parent.Parent)
require.Equal(t, h.Parent.Parent.Parent.Hash, blocksForked.Head(2).Hash)
require.NotNil(t, h.Parent.Parent.Parent.Parent)
require.Equal(t, h.Parent.Parent.Parent.Parent.Hash, blocksForked.Head(1).Hash)
lastLongestChainAwaiter.ItHappened()
})`
$DIR/core/chains/evm/headtracker/head_tracker_test.go: `.Get(1)`
$DIR/core/chains/evm/headtracker/head_tracker_test.go: `.ItHappened()`
$DIR/core/chains/evm/headtracker/head_tracker_test.go: `.Return()`
$DIR/core/chains/evm/headtracker/head_tracker_test.go: `.Once()`
$DIR/core/chains/evm/headtracker/head_tracker_test.go: `.Start(t)`
$DIR/core/chains/evm/headtracker/head_tracker_test.go: `.On("HeadByHash", mock.Anything, mock.Anything)`
$DIR/core/chains/evm/headtracker/head_tracker_test.go: `.Maybe()`
$DIR/core/chains/evm/headtracker/head_tracker_test.go: `.Lock()`
$DIR/core/chains/evm/headtracker/head_tracker_test.go: `.Unlock()`
$DIR/core/chains/evm/headtracker/head_tracker_test.go: `.Get(1)`
$DIR/core/chains/evm/headtracker/head_tracker_test.go: `.Lock()`
$DIR/core/chains/evm/headtracker/head_tracker_test.go: `.Unlock()`
$DIR/core/chains/evm/headtracker/head_tracker_test.go: `.TrySend(h)`
$DIR/core/chains/evm/headtracker/head_tracker_test.go: `.Sleep(tests.TestInterval)`
$DIR/core/chains/evm/headtracker/head_tracker_test.go: `.AwaitOrFail(t, tests.WaitTimeout(t))`
$DIR/core/chains/evm/headtracker/head_tracker_test.go: `.WaitTimeout(t)`
$DIR/core/chains/evm/headtracker/head_tracker_test.go: `.Stop(t)`
$DIR/core/chains/evm/headtracker/head_tracker_test.go: `.headSaver.Chain(h.Hash)`
$DIR/core/chains/evm/headtracker/head_tracker_test.go: `.Now()`
$DIR/core/chains/evm/headtracker/head_tracker_test.go: `.UTC()`
$DIR/core/chains/evm/headtracker/head_tracker_test.go: `.Unix()`
$DIR/core/chains/evm/headtracker/head_tracker_test.go: `.NewInt(0)`
$DIR/core/chains/evm/headtracker/head_tracker_test.go: `.BigToHash(big.NewInt(0))`
$DIR/core/chains/evm/headtracker/head_tracker_test.go: `.NewInt(0)`
$DIR/core/chains/evm/headtracker/head_tracker_test.go: `.NewHead(gethHead0.Number, utils.NewHash(), gethHead0.ParentHash, gethHead0.Time, ubig.New(testutils.FixtureChainID))`
$DIR/core/chains/evm/headtracker/head_tracker_test.go: `.NewHash()`
$DIR/core/chains/evm/headtracker/head_tracker_test.go: `.New(testutils.FixtureChainID)`
$DIR/core/chains/evm/headtracker/head_tracker_test.go: `.Head(1)`
$DIR/core/chains/evm/headtracker/head_tracker_test.go: `.NewInt(8)`
$DIR/core/chains/evm/headtracker/head_tracker_test.go: `.NewHash()`
$DIR/core/chains/evm/headtracker/head_tracker_test.go: `.NewHead(gethHead8.Number, utils.NewHash(), gethHead8.ParentHash, gethHead8.Time, ubig.New(testutils.FixtureChainID))`
$DIR/core/chains/evm/headtracker/head_tracker_test.go: `.NewHash()`
$DIR/core/chains/evm/headtracker/head_tracker_test.go: `.New(testutils.FixtureChainID)`
$DIR/core/chains/evm/headtracker/head_tracker_test.go: `.Head(9)`
$DIR/core/chains/evm/headtracker/head_tracker_test.go: `.NewInt(10)`
$DIR/core/chains/evm/headtracker/head_tracker_test.go: `.NewHead(gethHead10.Number, utils.NewHash(), gethHead10.ParentHash, gethHead10.Time, ubig.New(testutils.FixtureChainID))`
$DIR/core/chains/evm/headtracker/head_tracker_test.go: `.NewHash()`
$DIR/core/chains/evm/headtracker/head_tracker_test.go: `.New(testutils.FixtureChainID)`
$DIR/core/chains/evm/headtracker/head_tracker_test.go: `.Head(11)`
$DIR/core/chains/evm/headtracker/head_tracker_test.go: `.Head(12)`
$DIR/core/chains/evm/headtracker/head_tracker_test.go: `.Head(13)`
$DIR/core/chains/evm/headtracker/head_tracker_test.go: `.Head(14)`
$DIR/core/chains/evm/headtracker/head_tracker_test.go: `.Head(14)`
$DIR/core/chains/evm/headtracker/head_tracker_test.go: `.Head(15)`
$DIR/core/chains/evm/headtracker/head_tracker_test.go: `.Context(t)`
$DIR/core/chains/evm/headtracker/head_tracker_test.go: `.NewTestChainScopedConfig(t, nil)`
$DIR/core/chains/evm/headtracker/head_tracker_test.go: `.NewSqlxDB(t)`
$DIR/core/chains/evm/headtracker/head_tracker_test.go: `.NewORM(*testutils.FixtureChainID, db)`
$DIR/core/chains/evm/headtracker/head_tracker_test.go: `.NewEthClientMock(t)`
$DIR/core/chains/evm/headtracker/head_tracker_test.go: `.On("ConfiguredChainID", mock.Anything)`
$DIR/core/chains/evm/headtracker/head_tracker_test.go: `.Return(evmcfg.EVM().ChainID(), nil)`
$DIR/core/chains/evm/headtracker/head_tracker_test.go: `.EVM()`
$DIR/core/chains/evm/headtracker/head_tracker_test.go: `.ChainID()`
$DIR/core/chains/evm/headtracker/head_tracker_test.go: `.EVM()`
$DIR/core/chains/evm/headtracker/head_tracker_test.go: `.EVM()`
$DIR/core/chains/evm/headtracker/head_tracker_test.go: `.HeadTracker()`
$DIR/core/chains/evm/headtracker/head_tracker_test.go: `.headSaver.Load(tests.Context(t), 0)`
$DIR/core/chains/evm/headtracker/head_tracker_test.go: `.Context(t)`
$DIR/core/chains/evm/headtracker/head_tracker_test.go: `.Run("returns error if latestFinalized is not valid", func(t *testing.T) {
htu := newHeadTrackerUniverse(t, opts{})
err := htu.headTracker.Backfill(ctx, &h12, nil)
require.EqualError(t, err, "can not perform backfill without a valid latestFinalized head")
})`
$DIR/core/chains/evm/headtracker/head_tracker_test.go: `.headTracker.Backfill(ctx, &h12, nil)`
$DIR/core/chains/evm/headtracker/head_tracker_test.go: `.Run("Returns error if finalized head is ahead of canonical", func(t *testing.T) {
htu := newHeadTrackerUniverse(t, opts{})
err := htu.headTracker.Backfill(ctx, &h12, &h14Orphaned)
require.EqualError(t, err, "invariant violation: expected head of canonical chain to be ahead of the latestFinalized")
})`
$DIR/core/chains/evm/headtracker/head_tracker_test.go: `.headTracker.Backfill(ctx, &h12, &h14Orphaned)`
$DIR/core/chains/evm/headtracker/head_tracker_test.go: `.Run("Returns error if finalizedHead is not present in the canonical chain", func(t *testing.T) {
htu := newHeadTrackerUniverse(t, opts{Heads: heads})
err := htu.headTracker.Backfill(ctx, &h15, &h14Orphaned)
require.EqualError(t, err, "expected finalized block to be present in canonical chain")
})`
$DIR/core/chains/evm/headtracker/head_tracker_test.go: `.headTracker.Backfill(ctx, &h15, &h14Orphaned)`
$DIR/core/chains/evm/headtracker/head_tracker_test.go: `.Run("Marks all blocks in chain that are older than finalized", func(t *testing.T) {
htu := newHeadTrackerUniverse(t, opts{Heads: heads})
assertFinalized := func(expectedFinalized bool, msg string, heads ...evmtypes.Head) {
for _, h := range heads {
storedHead := htu.headSaver.Chain(h.Hash)
assert.Equal(t, expectedFinalized, storedHead != nil && storedHead.IsFinalized, msg, "block_number", h.Number)
}
}
err := htu.headTracker.Backfill(ctx, &h15, &h14)
require.NoError(t, err)
assertFinalized(true, "expected heads to be marked as finalized after backfill", h14, h13, h12, h11)
assertFinalized(false, "expected heads to remain unfinalized", h15, head10)
})`
$DIR/core/chains/evm/headtracker/head_tracker_test.go: `.headSaver.Chain(h.Hash)`
$DIR/core/chains/evm/headtracker/head_tracker_test.go: `.headTracker.Backfill(ctx, &h15, &h14)`
$DIR/core/chains/evm/headtracker/head_tracker_test.go: `.Run("fetches a missing head", func(t *testing.T) {
htu := newHeadTrackerUniverse(t, opts{Heads: heads})
htu.ethClient.On("HeadByHash", mock.Anything, head10.Hash).
Return(&head10, nil)
err := htu.headTracker.Backfill(ctx, &h12, &h9)
require.NoError(t, err)
h := htu.headSaver.Chain(h12.Hash)
assert.Equal(t, int64(12), h.Number)
require.NotNil(t, h.Parent)
assert.Equal(t, int64(11), h.Parent.Number)
require.NotNil(t, h.Parent.Parent)
assert.Equal(t, int64(10), h.Parent.Parent.Number)
require.NotNil(t, h.Parent.Parent.Parent)
assert.Equal(t, int64(9), h.Parent.Parent.Parent.Number)
writtenHead, err := htu.orm.HeadByHash(tests.Context(t), head10.Hash)
require.NoError(t, err)
assert.Equal(t, int64(10), writtenHead.Number)
})`
$DIR/core/chains/evm/headtracker/head_tracker_test.go: `.ethClient.On("HeadByHash", mock.Anything, head10.Hash)`
$DIR/core/chains/evm/headtracker/head_tracker_test.go: `.
Return(&head10, nil)`
$DIR/core/chains/evm/headtracker/head_tracker_test.go: `.headTracker.Backfill(ctx, &h12, &h9)`
$DIR/core/chains/evm/headtracker/head_tracker_test.go: `.headSaver.Chain(h12.Hash)`
$DIR/core/chains/evm/headtracker/head_tracker_test.go: `.orm.HeadByHash(tests.Context(t), head10.Hash)`
$DIR/core/chains/evm/headtracker/head_tracker_test.go: `.Context(t)`
$DIR/core/chains/evm/headtracker/head_tracker_test.go: `.Run("fetches only heads that are missing", func(t *testing.T) {
htu := newHeadTrackerUniverse(t, opts{Heads: heads})
htu.ethClient.On("HeadByHash", mock.Anything, head10.Hash).
Return(&head10, nil)
htu.ethClient.On("HeadByHash", mock.Anything, head8.Hash).
Return(&head8, nil)
err := htu.headTracker.Backfill(ctx, &h15, &head8)
require.NoError(t, err)
h := htu.headSaver.Chain(h15.Hash)
require.Equal(t, uint32(8), h.ChainLength())
earliestInChain := h.EarliestInChain()
assert.Equal(t, head8.Number, earliestInChain.BlockNumber())
assert.Equal(t, head8.Hash, earliestInChain.BlockHash())
})`
$DIR/core/chains/evm/headtracker/head_tracker_test.go: `.ethClient.On("HeadByHash", mock.Anything, head10.Hash)`
$DIR/core/chains/evm/headtracker/head_tracker_test.go: `.
Return(&head10, nil)`
$DIR/core/chains/evm/headtracker/head_tracker_test.go: `.ethClient.On("HeadByHash", mock.Anything, head8.Hash)`
$DIR/core/chains/evm/headtracker/head_tracker_test.go: `.
Return(&head8, nil)`
$DIR/core/chains/evm/headtracker/head_tracker_test.go: `.headTracker.Backfill(ctx, &h15, &head8)`
$DIR/core/chains/evm/headtracker/head_tracker_test.go: `.headSaver.Chain(h15.Hash)`
$DIR/core/chains/evm/headtracker/head_tracker_test.go: `.EarliestInChain()`
$DIR/core/chains/evm/headtracker/head_tracker_test.go: `.Run("abandons backfill and returns error if the eth node returns not found", func(t *testing.T) {
htu := newHeadTrackerUniverse(t, opts{Heads: heads})
htu.ethClient.On("HeadByHash", mock.Anything, head10.Hash).
Return(&head10, nil).
Once()
htu.ethClient.On("HeadByHash", mock.Anything, head8.Hash).
Return(nil, ethereum.NotFound).
Once()
err := htu.headTracker.Backfill(ctx, &h12, &head8)
require.Error(t, err)
require.EqualError(t, err, "fetchAndSaveHead failed: not found")
h := htu.headSaver.Chain(h12.Hash)
// Should contain 12, 11, 10, 9
assert.Equal(t, 4, int(h.ChainLength()))
assert.Equal(t, int64(9), h.EarliestInChain().BlockNumber())
})`
$DIR/core/chains/evm/headtracker/head_tracker_test.go: `.ethClient.On("HeadByHash", mock.Anything, head10.Hash)`
$DIR/core/chains/evm/headtracker/head_tracker_test.go: `.
Return(&head10, nil)`
$DIR/core/chains/evm/headtracker/head_tracker_test.go: `.
Once()`
$DIR/core/chains/evm/headtracker/head_tracker_test.go: `.ethClient.On("HeadByHash", mock.Anything, head8.Hash)`
$DIR/core/chains/evm/headtracker/head_tracker_test.go: `.
Return(nil, ethereum.NotFound)`
$DIR/core/chains/evm/headtracker/head_tracker_test.go: `.
Once()`
$DIR/core/chains/evm/headtracker/head_tracker_test.go: `.headTracker.Backfill(ctx, &h12, &head8)`
$DIR/core/chains/evm/headtracker/head_tracker_test.go: `.headSaver.Chain(h12.Hash)`
$DIR/core/chains/evm/headtracker/head_tracker_test.go: `.Run("abandons backfill and returns error if the context time budget is exceeded", func(t *testing.T) {
htu := newHeadTrackerUniverse(t, opts{Heads: heads})
htu.ethClient.On("HeadByHash", mock.Anything, head10.Hash).
Return(&head10, nil)
lctx, cancel := context.WithCancel(ctx)
htu.ethClient.On("HeadByHash", mock.Anything, head8.Hash).
Return(nil, context.DeadlineExceeded).Run(func(args mock.Arguments) {
cancel()
})
err := htu.headTracker.Backfill(lctx, &h12, &head8)
require.Error(t, err)
require.EqualError(t, err, "fetchAndSaveHead failed: context canceled")
h := htu.headSaver.Chain(h12.Hash)
// Should contain 12, 11, 10, 9
assert.Equal(t, 4, int(h.ChainLength()))
assert.Equal(t, int64(9), h.EarliestInChain().BlockNumber())
})`
$DIR/core/chains/evm/headtracker/head_tracker_test.go: `.ethClient.On("HeadByHash", mock.Anything, head10.Hash)`
$DIR/core/chains/evm/headtracker/head_tracker_test.go: `.
Return(&head10, nil)`
$DIR/core/chains/evm/headtracker/head_tracker_test.go: `.WithCancel(ctx)`
$DIR/core/chains/evm/headtracker/head_tracker_test.go: `.ethClient.On("HeadByHash", mock.Anything, head8.Hash)`
$DIR/core/chains/evm/headtracker/head_tracker_test.go: `.
Return(nil, context.DeadlineExceeded)`
$DIR/core/chains/evm/headtracker/head_tracker_test.go: `.Run(func(args mock.Arguments) {
cancel()
})`
$DIR/core/chains/evm/headtracker/head_tracker_test.go: `.headTracker.Backfill(lctx, &h12, &head8)`
$DIR/core/chains/evm/headtracker/head_tracker_test.go: `.headSaver.Chain(h12.Hash)`
$DIR/core/chains/evm/headtracker/head_tracker_test.go: `.Run("abandons backfill and returns error when fetching a block by hash fails, indicating a reorg", func(t *testing.T) {
htu := newHeadTrackerUniverse(t, opts{})
htu.ethClient.On("HeadByHash", mock.Anything, h14.Hash).Return(&h14, nil).Once()
htu.ethClient.On("HeadByHash", mock.Anything, h13.Hash).Return(&h13, nil).Once()
htu.ethClient.On("HeadByHash", mock.Anything, h12.Hash).Return(nil, errors.New("not found")).Once()
err := htu.headTracker.Backfill(ctx, &h15, &h11)
require.Error(t, err)
require.EqualError(t, err, "fetchAndSaveHead failed: not found")
h := htu.headSaver.Chain(h14.Hash)
// Should contain 14, 13 (15 was never added). When trying to get the parent of h13 by hash, a reorg happened and backfill exited.
assert.Equal(t, 2, int(h.ChainLength()))
assert.Equal(t, int64(13), h.EarliestInChain().BlockNumber())
})`
$DIR/core/chains/evm/headtracker/head_tracker_test.go: `.ethClient.On("HeadByHash", mock.Anything, h14.Hash)`
$DIR/core/chains/evm/headtracker/head_tracker_test.go: `.Return(&h14, nil)`
$DIR/core/chains/evm/headtracker/head_tracker_test.go: `.Once()`
$DIR/core/chains/evm/headtracker/head_tracker_test.go: `.ethClient.On("HeadByHash", mock.Anything, h13.Hash)`
$DIR/core/chains/evm/headtracker/head_tracker_test.go: `.Return(&h13, nil)`
$DIR/core/chains/evm/headtracker/head_tracker_test.go: `.Once()`
$DIR/core/chains/evm/headtracker/head_tracker_test.go: `.ethClient.On("HeadByHash", mock.Anything, h12.Hash)`
$DIR/core/chains/evm/headtracker/head_tracker_test.go: `.Return(nil, errors.New("not found"))`
$DIR/core/chains/evm/headtracker/head_tracker_test.go: `.New("not found")`
$DIR/core/chains/evm/headtracker/head_tracker_test.go: `.Once()`
$DIR/core/chains/evm/headtracker/head_tracker_test.go: `.headTracker.Backfill(ctx, &h15, &h11)`
$DIR/core/chains/evm/headtracker/head_tracker_test.go: `.headSaver.Chain(h14.Hash)`
$DIR/core/chains/evm/headtracker/head_tracker_test.go: `.headTracker.Backfill(ctx, &h15, &finalizedH15)`
$DIR/core/chains/evm/headtracker/head_tracker_test.go: `.headSaver.LatestChain()`
$DIR/core/chains/evm/headtracker/heads_test.go: `heads.AddHeads(testutils.Head(100), testutils.Head(200), testutils.Head(300))`
$DIR/core/chains/evm/headtracker/heads_test.go: `heads.AddHeads(testutils.Head(250))`
$DIR/core/chains/evm/headtracker/heads_test.go: `latest = heads.LatestHead()`
$DIR/core/chains/evm/headtracker/heads_test.go: `heads.AddHeads(testutils.Head(400))`
$DIR/core/chains/evm/headtracker/heads_test.go: `latest = heads.LatestHead()`
$DIR/core/chains/evm/headtracker/heads_test.go: `heads.AddHeads(testHeads...)`
$DIR/core/chains/evm/headtracker/heads_test.go: `head = heads.HeadByHash(utils.NewHash())`
$DIR/core/chains/evm/headtracker/heads_test.go: `heads.AddHeads(testutils.Head(100), testutils.Head(200), testutils.Head(300))`
$DIR/core/chains/evm/headtracker/heads_test.go: `heads.AddHeads(testutils.Head(400))`
$DIR/core/chains/evm/headtracker/heads_test.go: `testHeads = append(testHeads, &h)`
$DIR/core/chains/evm/headtracker/heads_test.go: `testHeads = append(testHeads, &h)`
$DIR/core/chains/evm/headtracker/heads_test.go: `parentHash = hash`
$DIR/core/chains/evm/headtracker/heads_test.go: `heads.AddHeads(testHeads...)`
$DIR/core/chains/evm/headtracker/heads_test.go: `heads.AddHeads(testHeads[2:5]...)`
$DIR/core/chains/evm/headtracker/heads_test.go: `head = heads.HeadByHash(uncleHash)`
$DIR/core/chains/evm/headtracker/heads_test.go: `heads.AddHeads(allHeads...)`
$DIR/core/chains/evm/headtracker/heads_test.go: `t.Helper()`
$DIR/core/chains/evm/headtracker/heads_test.go: `t.Run("blocks were correctly marked as finalized", ensureProperFinalization)`
$DIR/core/chains/evm/headtracker/heads_test.go: `heads.AddHeads(h0, h1, h2, h2Uncle, h3, h4, h5)`
$DIR/core/chains/evm/headtracker/heads_test.go: `.NewHeads()`
$DIR/core/chains/evm/headtracker/heads_test.go: `.AddHeads(testutils.Head(100), testutils.Head(200), testutils.Head(300))`
$DIR/core/chains/evm/headtracker/heads_test.go: `.Head(100)`
$DIR/core/chains/evm/headtracker/heads_test.go: `.Head(200)`
$DIR/core/chains/evm/headtracker/heads_test.go: `.Head(300)`
$DIR/core/chains/evm/headtracker/heads_test.go: `.LatestHead()`
$DIR/core/chains/evm/headtracker/heads_test.go: `.AddHeads(testutils.Head(250))`
$DIR/core/chains/evm/headtracker/heads_test.go: `.Head(250)`
$DIR/core/chains/evm/headtracker/heads_test.go: `.LatestHead()`
$DIR/core/chains/evm/headtracker/heads_test.go: `.AddHeads(testutils.Head(400))`
$DIR/core/chains/evm/headtracker/heads_test.go: `.Head(400)`
$DIR/core/chains/evm/headtracker/heads_test.go: `.LatestHead()`
$DIR/core/chains/evm/headtracker/heads_test.go: `.Head(100)`
$DIR/core/chains/evm/headtracker/heads_test.go: `.Head(200)`
$DIR/core/chains/evm/headtracker/heads_test.go: `.Head(300)`
$DIR/core/chains/evm/headtracker/heads_test.go: `.NewHeads()`
$DIR/core/chains/evm/headtracker/heads_test.go: `.AddHeads(testHeads...)`
$DIR/core/chains/evm/headtracker/heads_test.go: `.HeadByHash(testHeads[1].Hash)`
$DIR/core/chains/evm/headtracker/heads_test.go: `.HeadByHash(utils.NewHash())`
$DIR/core/chains/evm/headtracker/heads_test.go: `.NewHash()`
$DIR/core/chains/evm/headtracker/heads_test.go: `.NewHeads()`
$DIR/core/chains/evm/headtracker/heads_test.go: `.AddHeads(testutils.Head(100), testutils.Head(200), testutils.Head(300))`
$DIR/core/chains/evm/headtracker/heads_test.go: `.Head(100)`
$DIR/core/chains/evm/headtracker/heads_test.go: `.Head(200)`
$DIR/core/chains/evm/headtracker/heads_test.go: `.Head(300)`
$DIR/core/chains/evm/headtracker/heads_test.go: `.AddHeads(testutils.Head(400))`
$DIR/core/chains/evm/headtracker/heads_test.go: `.Head(400)`
$DIR/core/chains/evm/headtracker/heads_test.go: `.Count()`
$DIR/core/chains/evm/headtracker/heads_test.go: `.NewHash()`
$DIR/core/chains/evm/headtracker/heads_test.go: `.NewHeads()`
$DIR/core/chains/evm/headtracker/heads_test.go: `.NewHash()`
$DIR/core/chains/evm/headtracker/heads_test.go: `.NewHead(big.NewInt(int64(i)), hash, parentHash, uint64(time.Now().Unix()), ubig.NewI(0))`
$DIR/core/chains/evm/headtracker/heads_test.go: `.NewInt(int64(i))`
$DIR/core/chains/evm/headtracker/heads_test.go: `.Now()`
$DIR/core/chains/evm/headtracker/heads_test.go: `.Unix()`
$DIR/core/chains/evm/headtracker/heads_test.go: `.NewI(0)`
$DIR/core/chains/evm/headtracker/heads_test.go: `.NewHead(big.NewInt(int64(i)), uncleHash, parentHash, uint64(time.Now().Unix()), ubig.NewI(0))`
$DIR/core/chains/evm/headtracker/heads_test.go: `.NewInt(int64(i))`
$DIR/core/chains/evm/headtracker/heads_test.go: `.Now()`
$DIR/core/chains/evm/headtracker/heads_test.go: `.Unix()`
$DIR/core/chains/evm/headtracker/heads_test.go: `.NewI(0)`
$DIR/core/chains/evm/headtracker/heads_test.go: `.AddHeads(testHeads...)`
$DIR/core/chains/evm/headtracker/heads_test.go: `.AddHeads(testHeads[2:5]...)`
$DIR/core/chains/evm/headtracker/heads_test.go: `.LatestHead()`
$DIR/core/chains/evm/headtracker/heads_test.go: `.HeadByHash(uncleHash)`
$DIR/core/chains/evm/headtracker/heads_test.go: `.ChainLength()`
$DIR/core/chains/evm/headtracker/heads_test.go: `.NewHeads()`
$DIR/core/chains/evm/headtracker/heads_test.go: `.NewHead(big.NewInt(int64(num)), utils.NewHash(), parent, uint64(time.Now().Unix()), ubig.NewI(0))`
$DIR/core/chains/evm/headtracker/heads_test.go: `.NewInt(int64(num))`
$DIR/core/chains/evm/headtracker/heads_test.go: `.NewHash()`
$DIR/core/chains/evm/headtracker/heads_test.go: `.Now()`
$DIR/core/chains/evm/headtracker/heads_test.go: `.Unix()`
$DIR/core/chains/evm/headtracker/heads_test.go: `.NewI(0)`
$DIR/core/chains/evm/headtracker/heads_test.go: `.NewHash()`
$DIR/core/chains/evm/headtracker/heads_test.go: `.AddHeads(allHeads...)`
$DIR/core/chains/evm/headtracker/heads_test.go: `.Helper()`
$DIR/core/chains/evm/headtracker/heads_test.go: `.Run("blocks were correctly marked as finalized", ensureProperFinalization)`
$DIR/core/chains/evm/headtracker/heads_test.go: `.AddHeads(h0, h1, h2, h2Uncle, h3, h4, h5)`
$DIR/core/chains/evm/headtracker/orm_test.go: `foundHead, err = orm.LatestHead(tests.Context(t))`
$DIR/core/chains/evm/headtracker/orm_test.go: `hash = head.Hash`
$DIR/core/chains/evm/headtracker/orm_test.go: `.NewSqlxDB(t)`
$DIR/core/chains/evm/headtracker/orm_test.go: `.NewORM(*testutils.FixtureChainID, db)`
$DIR/core/chains/evm/headtracker/orm_test.go: `.Head(0)`
$DIR/core/chains/evm/headtracker/orm_test.go: `.LatestHead(tests.Context(t))`
$DIR/core/chains/evm/headtracker/orm_test.go: `.Context(t)`
$DIR/core/chains/evm/headtracker/orm_test.go: `.LatestHead(tests.Context(t))`
$DIR/core/chains/evm/headtracker/orm_test.go: `.Context(t)`
$DIR/core/chains/evm/headtracker/orm_test.go: `.NewSqlxDB(t)`
$DIR/core/chains/evm/headtracker/orm_test.go: `.NewORM(*testutils.FixtureChainID, db)`
$DIR/core/chains/evm/headtracker/orm_test.go: `.Head(i)`
$DIR/core/chains/evm/headtracker/orm_test.go: `.Head(5)`
$DIR/core/chains/evm/headtracker/orm_test.go: `.TrimOldHeads(tests.Context(t), 5)`
$DIR/core/chains/evm/headtracker/orm_test.go: `.Context(t)`
$DIR/core/chains/evm/headtracker/orm_test.go: `.LatestHeads(tests.Context(t), 0)`
$DIR/core/chains/evm/headtracker/orm_test.go: `.Context(t)`
$DIR/core/chains/evm/headtracker/orm_test.go: `.NewSqlxDB(t)`
$DIR/core/chains/evm/headtracker/orm_test.go: `.NewORM(*testutils.FixtureChainID, db)`
$DIR/core/chains/evm/headtracker/orm_test.go: `.Head(i)`
$DIR/core/chains/evm/headtracker/orm_test.go: `.HeadByHash(tests.Context(t), hash)`
$DIR/core/chains/evm/headtracker/orm_test.go: `.Context(t)`
$DIR/core/chains/evm/headtracker/orm_test.go: `.NewSqlxDB(t)`
$DIR/core/chains/evm/headtracker/orm_test.go: `.NewORM(*testutils.FixtureChainID, db)`
$DIR/core/chains/evm/headtracker/orm_test.go: `.Head(123)`
$DIR/core/chains/evm/headtracker/orm_test.go: `.HeadByHash(tests.Context(t), hash)`
$DIR/core/chains/evm/headtracker/orm_test.go: `.Context(t)`
$DIR/core/chains/evm/headtracker/orm_test.go: `.NewSqlxDB(t)`
$DIR/core/chains/evm/headtracker/orm_test.go: `.NewORM(*testutils.FixtureChainID, db)`
$DIR/core/chains/evm/headtracker/orm_test.go: `.LatestHeads(tests.Context(t), 100)`
$DIR/core/chains/evm/headtracker/orm_test.go: `.Context(t)`
$DIR/core/chains/evm/log/integration_test.go: `helper.lb.AddDependents(2)`
$DIR/core/chains/evm/log/integration_test.go: `helper.register(listener, newMockContract(t), 1)`
$DIR/core/chains/evm/log/integration_test.go: `helper.start()`
$DIR/core/chains/evm/log/integration_test.go: `g.Consistently(func() int32 { return helper.mockEth.SubscribeCallCount() }, 1*time.Second, cltest.DBPollingInterval).Should(gomega.Equal(int32(0)))`
$DIR/core/chains/evm/log/integration_test.go: `helper.lb.DependentReady()`
$DIR/core/chains/evm/log/integration_test.go: `g.Consistently(func() int32 { return helper.mockEth.SubscribeCallCount() }, 1*time.Second, cltest.DBPollingInterval).Should(gomega.Equal(int32(0)))`
$DIR/core/chains/evm/log/integration_test.go: `helper.lb.DependentReady()`
$DIR/core/chains/evm/log/integration_test.go: `g.Consistently(func() int32 { return helper.mockEth.SubscribeCallCount() }, 1*time.Second, cltest.DBPollingInterval).Should(gomega.Equal(int32(1)))`
$DIR/core/chains/evm/log/integration_test.go: `helper.unsubscribeAll()`
$DIR/core/chains/evm/log/integration_test.go: `testutils.SkipShortDB(t)`
$DIR/core/chains/evm/log/integration_test.go: `helper.mockEth = mockEth`
$DIR/core/chains/evm/log/integration_test.go: `backfillCount.Store(1)`
$DIR/core/chains/evm/log/integration_test.go: `helper.register(listener, newMockContract(t), numConfirmations)`
$DIR/core/chains/evm/log/integration_test.go: `helper.register(listener, newMockContract(t), 1)`
$DIR/core/chains/evm/log/integration_test.go: `helper.start()`
$DIR/core/chains/evm/log/integration_test.go: `gomega.NewWithT(t).Consistently(func() int32 { return helper.mockEth.SubscribeCallCount() }, 1*time.Second, cltest.DBPollingInterval).Should(gomega.Equal(int32(1)))`
$DIR/core/chains/evm/log/integration_test.go: `gomega.NewWithT(t).Consistently(func() int32 { return helper.mockEth.UnsubscribeCallCount() }, 1*time.Second, cltest.DBPollingInterval).Should(gomega.Equal(int32(0)))`
$DIR/core/chains/evm/log/integration_test.go: `helper.unsubscribeAll()`
$DIR/core/chains/evm/log/integration_test.go: `backfillCount.Store(2)`
$DIR/core/chains/evm/log/integration_test.go: `helper.register(listenerLast, newMockContract(t), 1)`
$DIR/core/chains/evm/log/integration_test.go: `gomega.NewWithT(t).Consistently(func() int32 { return helper.mockEth.SubscribeCallCount() }, 1*time.Second, cltest.DBPollingInterval).Should(gomega.Equal(int32(2)))`
$DIR/core/chains/evm/log/integration_test.go: `gomega.NewWithT(t).Consistently(func() int32 { return helper.mockEth.UnsubscribeCallCount() }, 1*time.Second, cltest.DBPollingInterval).Should(gomega.Equal(int32(1)))`
$DIR/core/chains/evm/log/integration_test.go: `testutils.SkipShortDB(t)`
$DIR/core/chains/evm/log/integration_test.go: `helper.mockEth = mockEth`
$DIR/core/chains/evm/log/integration_test.go: `helper.register(listener, newMockContract(t), uint32(maxNumConfirmations))`
$DIR/core/chains/evm/log/integration_test.go: `helper.register(listener2, newMockContract(t), uint32(2))`
$DIR/core/chains/evm/log/integration_test.go: `func() {
helper.start()
defer helper.stop()
require.Eventually(t, func() bool { return helper.mockEth.SubscribeCallCount() == 1 }, testutils.WaitTimeout(t), time.Second)
require.Eventually(t, func() bool { return backfillCount.Load() == 1 }, testutils.WaitTimeout(t), time.Second)
helper.lb.ReplayFromBlock(replayFrom, false)
require.Eventually(t, func() bool { return backfillCount.Load() >= 2 }, testutils.WaitTimeout(t), time.Second)
}()`
$DIR/core/chains/evm/log/integration_test.go: `helper.start()`
$DIR/core/chains/evm/log/integration_test.go: `helper.lb.ReplayFromBlock(replayFrom, false)`
$DIR/core/chains/evm/log/integration_test.go: `testutils.SkipShortDB(t)`
$DIR/core/chains/evm/log/integration_test.go: `helper.mockEth = mockEth`
$DIR/core/chains/evm/log/integration_test.go: `helper.register(listener, contract, 2)`
$DIR/core/chains/evm/log/integration_test.go: `func() {
helper.start()
defer helper.stop()
// To start, no logs are sent
require.Eventually(t, func() bool { return len(listener.getUniqueLogs()) == 0 }, testutils.WaitTimeout(t), time.Second,
"expected unique logs to be 0 but was %d", len(listener.getUniqueLogs()))
// Replay from block 2, the logs should be delivered. An incoming head must be simulated to
// trigger log delivery.
helper.lb.ReplayFromBlock(2, false)
<-cltest.SimulateIncomingHeads(t, blocks.Slice(10, 11), helper.lb)
require.Eventually(t, func() bool { return len(listener.getUniqueLogs()) == 2 }, testutils.WaitTimeout(t), time.Second,
"expected unique logs to be 2 but was %d", len(listener.getUniqueLogs()))
// Replay again, the logs are already marked consumed, so they should not be included in
// getUniqueLogs.
helper.lb.ReplayFromBlock(2, false)
<-cltest.SimulateIncomingHeads(t, blocks.Slice(11, 12), helper.lb)
require.Eventually(t, func() bool { return len(listener.getUniqueLogs()) == 2 }, testutils.WaitTimeout(t), time.Second,
"expected unique logs to be 2 but was %d", len(listener.getUniqueLogs()))
// Replay again with forceBroadcast. The logs are consumed again.
helper.lb.ReplayFromBlock(2, true)
<-cltest.SimulateIncomingHeads(t, blocks.Slice(12, 13), helper.lb)
require.Eventually(t, func() bool { return len(listener.getUniqueLogs()) == 4 }, testutils.WaitTimeout(t), time.Second,
"expected unique logs to be 4 but was %d", len(listener.getUniqueLogs()))
}()`
$DIR/core/chains/evm/log/integration_test.go: `helper.start()`
$DIR/core/chains/evm/log/integration_test.go: `helper.lb.ReplayFromBlock(2, false)`
$DIR/core/chains/evm/log/integration_test.go: `<-cltest.SimulateIncomingHeads(t, blocks.Slice(10, 11), helper.lb)`
$DIR/core/chains/evm/log/integration_test.go: `helper.lb.ReplayFromBlock(2, false)`
$DIR/core/chains/evm/log/integration_test.go: `<-cltest.SimulateIncomingHeads(t, blocks.Slice(11, 12), helper.lb)`
$DIR/core/chains/evm/log/integration_test.go: `helper.lb.ReplayFromBlock(2, true)`
$DIR/core/chains/evm/log/integration_test.go: `<-cltest.SimulateIncomingHeads(t, blocks.Slice(12, 13), helper.lb)`
$DIR/core/chains/evm/log/integration_test.go: `t.Run("pool two logs from subscription, then shut down", func(t *testing.T) {
helper := newBroadcasterHelper(t, 0, 1, logs, func(c *chainlink.Config, s *chainlink.Secrets) {
c.EVM[0].FinalityDepth = ptr[uint32](confs)
})
ctx := testutils.Context(t)
orm := log.NewORM(helper.db, cltest.FixtureChainID)
listener := helper.newLogListenerWithJob("one")
listener.SkipMarkingConsumed(true)
listener2 := helper.newLogListenerWithJob("two")
listener2.SkipMarkingConsumed(true)
expBlock := int64(log1.BlockNumber)
helper.simulateHeads(t, listener, listener2, contract1, contract2, confs, blocks.Slice(0, 2), orm, &expBlock, func() {
chRawLogs := <-helper.chchRawLogs
chRawLogs.TrySend(log1)
chRawLogs.TrySend(log2)
})
// Pool min block in DB and neither listener received a broadcast
blockNum, err := orm.GetPendingMinBlock(ctx)
require.NoError(t, err)
require.NotNil(t, blockNum)
require.Equal(t, int64(log1.BlockNumber), *blockNum)
require.Empty(t, listener.getUniqueLogs())
require.Empty(t, listener2.getUniqueLogs())
helper.requireBroadcastCount(0)
})`
$DIR/core/chains/evm/log/integration_test.go: `c.EVM[0].FinalityDepth = ptr[uint32](confs)`
$DIR/core/chains/evm/log/integration_test.go: `listener.SkipMarkingConsumed(true)`
$DIR/core/chains/evm/log/integration_test.go: `listener2.SkipMarkingConsumed(true)`
$DIR/core/chains/evm/log/integration_test.go: `helper.simulateHeads(t, listener, listener2, contract1, contract2, confs, blocks.Slice(0, 2), orm, &expBlock, func() {
chRawLogs := <-helper.chchRawLogs
chRawLogs.TrySend(log1)
chRawLogs.TrySend(log2)
})`
$DIR/core/chains/evm/log/integration_test.go: `chRawLogs.TrySend(log1)`
$DIR/core/chains/evm/log/integration_test.go: `chRawLogs.TrySend(log2)`
$DIR/core/chains/evm/log/integration_test.go: `helper.requireBroadcastCount(0)`
$DIR/core/chains/evm/log/integration_test.go: `t.Run("backfill pool with both, then broadcast one, but don't consume", func(t *testing.T) {
helper := newBroadcasterHelper(t, 2, 1, logs, func(c *chainlink.Config, s *chainlink.Secrets) {
c.EVM[0].FinalityDepth = ptr[uint32](confs)
})
ctx := testutils.Context(t)
orm := log.NewORM(helper.db, cltest.FixtureChainID)
contract1.On("ParseLog", log1).Return(flux_aggregator_wrapper.FluxAggregatorNewRound{}, nil)
contract2.On("ParseLog", log2).Return(flux_aggregator_wrapper.FluxAggregatorAnswerUpdated{}, nil)
listener := helper.newLogListenerWithJob("one")
listener.SkipMarkingConsumed(true)
listener2 := helper.newLogListenerWithJob("two")
listener2.SkipMarkingConsumed(true)
expBlock := int64(log2.BlockNumber)
helper.simulateHeads(t, listener, listener2, contract1, contract2, confs, blocks.Slice(2, 5), orm, &expBlock, nil)
// Pool min block in DB and one listener received but didn't consume
blockNum, err := orm.GetPendingMinBlock(ctx)
require.NoError(t, err)
require.NotNil(t, blockNum)
require.Equal(t, int64(log2.BlockNumber), *blockNum)
require.NotEmpty(t, listener.getUniqueLogs())
require.Empty(t, listener2.getUniqueLogs())
c, err := orm.WasBroadcastConsumed(ctx, log1.BlockHash, log1.Index, listener.JobID())
require.NoError(t, err)
require.False(t, c)
})`
$DIR/core/chains/evm/log/integration_test.go: `c.EVM[0].FinalityDepth = ptr[uint32](confs)`
$DIR/core/chains/evm/log/integration_test.go: `contract1.On("ParseLog", log1).Return(flux_aggregator_wrapper.FluxAggregatorNewRound{}, nil)`
$DIR/core/chains/evm/log/integration_test.go: `contract2.On("ParseLog", log2).Return(flux_aggregator_wrapper.FluxAggregatorAnswerUpdated{}, nil)`
$DIR/core/chains/evm/log/integration_test.go: `listener.SkipMarkingConsumed(true)`
$DIR/core/chains/evm/log/integration_test.go: `listener2.SkipMarkingConsumed(true)`
$DIR/core/chains/evm/log/integration_test.go: `helper.simulateHeads(t, listener, listener2, contract1, contract2, confs, blocks.Slice(2, 5), orm, &expBlock, nil)`
$DIR/core/chains/evm/log/integration_test.go: `t.Run("backfill pool and broadcast two, but only consume one", func(t *testing.T) {
helper := newBroadcasterHelper(t, 4, 1, logs, func(c *chainlink.Config, s *chainlink.Secrets) {
c.EVM[0].FinalityDepth = ptr[uint32](confs)
})
ctx := testutils.Context(t)
orm := log.NewORM(helper.db, cltest.FixtureChainID)
listener := helper.newLogListenerWithJob("one")
listener2 := helper.newLogListenerWithJob("two")
listener2.SkipMarkingConsumed(true)
helper.simulateHeads(t, listener, listener2, contract1, contract2, confs, blocks.Slice(5, 8), orm, nil, nil)
// Pool empty and one consumed but other didn't
blockNum, err := orm.GetPendingMinBlock(ctx)
require.NoError(t, err)
require.Nil(t, blockNum)
require.NotEmpty(t, listener.getUniqueLogs())
require.NotEmpty(t, listener2.getUniqueLogs())
c, err := orm.WasBroadcastConsumed(ctx, log1.BlockHash, log1.Index, listener.JobID())
require.NoError(t, err)
require.True(t, c)
c, err = orm.WasBroadcastConsumed(ctx, log2.BlockHash, log2.Index, listener2.JobID())
require.NoError(t, err)
require.False(t, c)
})`
$DIR/core/chains/evm/log/integration_test.go: `c.EVM[0].FinalityDepth = ptr[uint32](confs)`
$DIR/core/chains/evm/log/integration_test.go: `listener2.SkipMarkingConsumed(true)`
$DIR/core/chains/evm/log/integration_test.go: `helper.simulateHeads(t, listener, listener2, contract1, contract2, confs, blocks.Slice(5, 8), orm, nil, nil)`
$DIR/core/chains/evm/log/integration_test.go: `c, err = orm.WasBroadcastConsumed(ctx, log2.BlockHash, log2.Index, listener2.JobID())`
$DIR/core/chains/evm/log/integration_test.go: `c.EVM[0].FinalityDepth = ptr[uint32](confs)`
$DIR/core/chains/evm/log/integration_test.go: `helper.simulateHeads(t, listener, listener2, contract1, contract2, confs, blocks.Slice(8, 9), orm, nil, nil)`
$DIR/core/chains/evm/log/integration_test.go: `testutils.SkipShortDB(t)`
$DIR/core/chains/evm/log/integration_test.go: `c.EVM[0].BlockBackfillSkip = ptr(true)`
$DIR/core/chains/evm/log/integration_test.go: `c.EVM[0].BlockBackfillDepth = ptr[uint32](15)`
$DIR/core/chains/evm/log/integration_test.go: `helper.mockEth = mockEth`
$DIR/core/chains/evm/log/integration_test.go: `helper.register(listener, newMockContract(t), uint32(10))`
$DIR/core/chains/evm/log/integration_test.go: `helper.register(listener2, newMockContract(t), uint32(2))`
$DIR/core/chains/evm/log/integration_test.go: `backfillCount.Store(1)`
$DIR/core/chains/evm/log/integration_test.go: `func() {
helper.start()
defer helper.stop()
require.Eventually(t, func() bool { return helper.mockEth.SubscribeCallCount() == 1 }, testutils.WaitTimeout(t), time.Second)
require.Eventually(t, func() bool { return backfillCount.Load() == 1 }, testutils.WaitTimeout(t), time.Second)
}()`
$DIR/core/chains/evm/log/integration_test.go: `helper.start()`
$DIR/core/chains/evm/log/integration_test.go: `testutils.SkipShortDB(t)`
$DIR/core/chains/evm/log/integration_test.go: `c.EVM[0].LogBackfillBatchSize = ptr(uint32(batchSize))`
$DIR/core/chains/evm/log/integration_test.go: `helper.mockEth = mockEth`
$DIR/core/chains/evm/log/integration_test.go: `lggr.Infof("Log Batch: --------- times %v - %v, %v", times, fromBlock, toBlock)`
$DIR/core/chains/evm/log/integration_test.go: `helper.register(listener, newMockContract(t), numConfirmations)`
$DIR/core/chains/evm/log/integration_test.go: `helper.start()`
$DIR/core/chains/evm/log/integration_test.go: `helper.unsubscribeAll()`
$DIR/core/chains/evm/log/integration_test.go: `testutils.SkipShortDB(t)`
$DIR/core/chains/evm/log/integration_test.go: `backfilledLogs = append(backfilledLogs, aLog)`
$DIR/core/chains/evm/log/integration_test.go: `c.EVM[0].LogBackfillBatchSize = ptr(batchSize)`
$DIR/core/chains/evm/log/integration_test.go: `helper.mockEth = mockEth`
$DIR/core/chains/evm/log/integration_test.go: `lggr.Warnf("Log Batch: --------- times %v - %v, %v", times, fromBlock, toBlock)`
$DIR/core/chains/evm/log/integration_test.go: `helper.register(listener, newMockContract(t), 1)`
$DIR/core/chains/evm/log/integration_test.go: `helper.start()`
$DIR/core/chains/evm/log/integration_test.go: `g.Eventually(func() int64 { return backfillCount.Load() }, testutils.WaitTimeout(t), time.Second).Should(gomega.Equal(int64(expectedBatches)))`
$DIR/core/chains/evm/log/integration_test.go: `helper.unsubscribeAll()`
$DIR/core/chains/evm/log/integration_test.go: `helper.register(listener1, contract1, 1)`
$DIR/core/chains/evm/log/integration_test.go: `helper.register(listener2, contract1, 1)`
$DIR/core/chains/evm/log/integration_test.go: `helper.register(listener3, contract2, 1)`
$DIR/core/chains/evm/log/integration_test.go: `helper.register(listener4, contract2, 1)`
$DIR/core/chains/evm/log/integration_test.go: `helper.start()`
$DIR/core/chains/evm/log/integration_test.go: `chRawLogs.TrySend(log)`
$DIR/core/chains/evm/log/integration_test.go: `chRawLogs.TrySend(log)`
$DIR/core/chains/evm/log/integration_test.go: `<-headsDone`
$DIR/core/chains/evm/log/integration_test.go: `helper.requireBroadcastCount(12)`
$DIR/core/chains/evm/log/integration_test.go: `requireEqualLogs(t, addr1SentLogs, listener1.received.getUniqueLogs())`
$DIR/core/chains/evm/log/integration_test.go: `requireEqualLogs(t, addr1SentLogs, listener2.received.getUniqueLogs())`
$DIR/core/chains/evm/log/integration_test.go: `requireEqualLogs(t, addr2SentLogs, listener3.received.getUniqueLogs())`
$DIR/core/chains/evm/log/integration_test.go: `requireEqualLogs(t, addr2SentLogs, listener4.received.getUniqueLogs())`
$DIR/core/chains/evm/log/integration_test.go: `helper.start()`
$DIR/core/chains/evm/log/integration_test.go: `helper.register(listener1, contract1, 1)`
$DIR/core/chains/evm/log/integration_test.go: `helper.register(listener2, contract1, 8)`
$DIR/core/chains/evm/log/integration_test.go: `_ = cltest.SimulateIncomingHeads(t, blocks.Slice(0, 10), helper.lb)`
$DIR/core/chains/evm/log/integration_test.go: `chRawLogs.TrySend(log)`
$DIR/core/chains/evm/log/integration_test.go: `helper.requireBroadcastCount(5)`
$DIR/core/chains/evm/log/integration_test.go: `helper.stop()`
$DIR/core/chains/evm/log/integration_test.go: `requireEqualLogs(t,
addr1SentLogs,
listener1.received.getUniqueLogs(),
)`
$DIR/core/chains/evm/log/integration_test.go: `requireEqualLogs(t,
[]types.Log{
addr1SentLogs[0],
addr1SentLogs[1],
},
listener2.received.getUniqueLogs(),
)`
$DIR/core/chains/evm/log/integration_test.go: `requireEqualLogs(t,
listener1.received.getUniqueLogs(),
listener1.received.getLogs(),
)`
$DIR/core/chains/evm/log/integration_test.go: `requireEqualLogs(t,
listener2.received.getUniqueLogs(),
listener2.received.getLogs(),
)`
$DIR/core/chains/evm/log/integration_test.go: `c.EVM[0].FinalityDepth = ptr[uint32](1)`
$DIR/core/chains/evm/log/integration_test.go: `helper.start()`
$DIR/core/chains/evm/log/integration_test.go: `helper.register(listener1, contract1, 1)`
$DIR/core/chains/evm/log/integration_test.go: `helper.register(listener2, contract1, 3)`
$DIR/core/chains/evm/log/integration_test.go: `chRawLogs.TrySend(log)`
$DIR/core/chains/evm/log/integration_test.go: `helper.requireBroadcastCount(6)`
$DIR/core/chains/evm/log/integration_test.go: `<-headsDone`
$DIR/core/chains/evm/log/integration_test.go: `helper.register(listener3, contract1, 1)`
$DIR/core/chains/evm/log/integration_test.go: `<-cltest.SimulateIncomingHeads(t, blocks.Slice(6, 9), helper.lb)`
$DIR/core/chains/evm/log/integration_test.go: `helper.requireBroadcastCount(8)`
$DIR/core/chains/evm/log/integration_test.go: `helper.register(listener4, contract1, 1)`
$DIR/core/chains/evm/log/integration_test.go: `<-cltest.SimulateIncomingHeads(t, blocks.Slice(9, 12), helper.lb)`
$DIR/core/chains/evm/log/integration_test.go: `c.EVM[0].FinalityDepth = ptr[uint32](4)`
$DIR/core/chains/evm/log/integration_test.go: `helper.start()`
$DIR/core/chains/evm/log/integration_test.go: `helper.register(listener1, contract1, 1)`
$DIR/core/chains/evm/log/integration_test.go: `helper.register(listener2, contract1, 3)`
$DIR/core/chains/evm/log/integration_test.go: `chRawLogs.TrySend(log)`
$DIR/core/chains/evm/log/integration_test.go: `<-headsDone`
$DIR/core/chains/evm/log/integration_test.go: `helper.requireBroadcastCount(6)`
$DIR/core/chains/evm/log/integration_test.go: `helper.register(listener3, contract1, 1)`
$DIR/core/chains/evm/log/integration_test.go: `<-cltest.SimulateIncomingHeads(t, blocks.Slice(7, 9), helper.lb)`
$DIR/core/chains/evm/log/integration_test.go: `helper.requireBroadcastCount(9)`
$DIR/core/chains/evm/log/integration_test.go: `helper.register(listener4, contract1, 1)`
$DIR/core/chains/evm/log/integration_test.go: `<-cltest.SimulateIncomingHeads(t, blocks.Slice(10, 12), helper.lb)`
$DIR/core/chains/evm/log/integration_test.go: `c.EVM[0].FinalityDepth = ptr[uint32](3)`
$DIR/core/chains/evm/log/integration_test.go: `helper.start()`
$DIR/core/chains/evm/log/integration_test.go: `helper.registerWithTopicValues(listener0, contract1, 1,
map[common.Hash][][]log.Topic{
topic: {}, // no filters, so all values allowed
},
)`
$DIR/core/chains/evm/log/integration_test.go: `helper.registerWithTopicValues(listener1, contract1, 1,
map[common.Hash][][]log.Topic{
topic: {{} /**/, {}}, // two empty filters, so all values allowed
},
)`
$DIR/core/chains/evm/log/integration_test.go: `helper.registerWithTopicValues(listener2, contract1, 1,
map[common.Hash][][]log.Topic{
topic: {
{log.Topic(field1Value1), log.Topic(field1Value2)} /**/, {log.Topic(field2Value1), log.Topic(field2Value2)}, // two values for each field allowed
},
},
)`
$DIR/core/chains/evm/log/integration_test.go: `helper.registerWithTopicValues(listener3, contract1, 1,
map[common.Hash][][]log.Topic{
topic: {
{log.Topic(field1Value1), log.Topic(field1Value2)} /**/, {}, // two values allowed for field 1, and any values for field 2
},
},
)`
$DIR/core/chains/evm/log/integration_test.go: `helper.registerWithTopicValues(listener4, contract1, 1,
map[common.Hash][][]log.Topic{
topic: {
{log.Topic(field1Value1)} /**/, {log.Topic(field2Value1)}, // some values allowed
},
},
)`
$DIR/core/chains/evm/log/integration_test.go: `chRawLogs.TrySend(log)`
$DIR/core/chains/evm/log/integration_test.go: `<-headsDone`
$DIR/core/chains/evm/log/integration_test.go: `c.EVM[0].FinalityDepth = ptr[uint32](2)`
$DIR/core/chains/evm/log/integration_test.go: `helper.start()`
$DIR/core/chains/evm/log/integration_test.go: `helper.register(listener1, contract1, 1)`
$DIR/core/chains/evm/log/integration_test.go: `chRawLogs.TrySend(addr1SentLogs[0])`
$DIR/core/chains/evm/log/integration_test.go: `chRawLogs.TrySend(addr1SentLogs[1])`
$DIR/core/chains/evm/log/integration_test.go: `chRawLogs.TrySend(addr1SentLogs[2])`
$DIR/core/chains/evm/log/integration_test.go: `<-cltest.SimulateIncomingHeads(t, blocks.Slice(0, 4), helper.lb)`
$DIR/core/chains/evm/log/integration_test.go: `chRawLogs.TrySend(addr1SentLogs[3])`
$DIR/core/chains/evm/log/integration_test.go: `<-cltest.SimulateIncomingHeads(t, blocks.Slice(4, 9), helper.lb)`
$DIR/core/chains/evm/log/integration_test.go: `helper.requireBroadcastCount(4)`
$DIR/core/chains/evm/log/integration_test.go: `helper.start()`
$DIR/core/chains/evm/log/integration_test.go: `helper.register(listener1, contract1, 1)`
$DIR/core/chains/evm/log/integration_test.go: `chRawLogs.TrySend(log)`
$DIR/core/chains/evm/log/integration_test.go: `<-cltest.SimulateIncomingHeads(t, blocks.Slice(0, 10), helper.lb)`
$DIR/core/chains/evm/log/integration_test.go: `helper.requireBroadcastCount(3)`
$DIR/core/chains/evm/log/integration_test.go: `helper.stop()`
$DIR/core/chains/evm/log/integration_test.go: `requireEqualLogs(t,
addr1SentLogs,
listener1.received.getUniqueLogs(),
)`
$DIR/core/chains/evm/log/integration_test.go: `c.EVM[0].FinalityDepth = ptr[uint32](2)`
$DIR/core/chains/evm/log/integration_test.go: `helper.start()`
$DIR/core/chains/evm/log/integration_test.go: `helper.register(listener1, contract1, 1)`
$DIR/core/chains/evm/log/integration_test.go: `<-cltest.SimulateIncomingHeads(t, blocks.Slice(0, 7), helper.lb)`
$DIR/core/chains/evm/log/integration_test.go: `chRawLogs.TrySend(log)`
$DIR/core/chains/evm/log/integration_test.go: `<-cltest.SimulateIncomingHeads(t, blocks.Slice(7, 9), helper.lb)`
$DIR/core/chains/evm/log/integration_test.go: `helper.requireBroadcastCount(3)`
$DIR/core/chains/evm/log/integration_test.go: `helper.stop()`
$DIR/core/chains/evm/log/integration_test.go: `requireEqualLogs(t,
addr1SentLogs,
listener1.received.getUniqueLogs(),
)`
$DIR/core/chains/evm/log/integration_test.go: `testutils.SkipShortDB(t)`
$DIR/core/chains/evm/log/integration_test.go: `ethClient.On("ConfiguredChainID", mock.Anything).Return(&cltest.FixtureChainID)`
$DIR/core/chains/evm/log/integration_test.go: `ethClient.On("SubscribeFilterLogs", mock.Anything, mock.Anything, mock.Anything).
Return(
func(ctx context.Context, q ethereum.FilterQuery, ch chan<- types.Log) ethereum.Subscription {
defer close(chStarted)
sub := mockEth.NewSub(t)
chchRawLogs <- evmtestutils.NewRawSub(ch, sub.Err())
return sub
},
func(ctx context.Context, q ethereum.FilterQuery, ch chan<- types.Log) error {
return nil
},
).
Once()`
$DIR/core/chains/evm/log/integration_test.go: `chchRawLogs <- evmtestutils.NewRawSub(ch, sub.Err())`
$DIR/core/chains/evm/log/integration_test.go: `ethClient.On("SubscribeFilterLogs", mock.Anything, mock.Anything, mock.Anything).
Return(
func(ctx context.Context, q ethereum.FilterQuery, ch chan<- types.Log) ethereum.Subscription {
sub := mockEth.NewSub(t)
chchRawLogs <- evmtestutils.NewRawSub(ch, sub.Err())
return sub
},
func(ctx context.Context, q ethereum.FilterQuery, ch chan<- types.Log) error {
return nil
},
).
Times(3)`
$DIR/core/chains/evm/log/integration_test.go: `chchRawLogs <- evmtestutils.NewRawSub(ch, sub.Err())`
$DIR/core/chains/evm/log/integration_test.go: `ethClient.On("HeadByNumber", mock.Anything, (*big.Int)(nil)).
Return(&evmtypes.Head{Number: blockHeight}, nil)`
$DIR/core/chains/evm/log/integration_test.go: `ethClient.On("FilterLogs", mock.Anything, mock.Anything).
Run(func(args mock.Arguments) {
query := args.Get(1).(ethereum.FilterQuery)
require.Equal(t, big.NewInt(expectedBlock), query.FromBlock)
require.Contains(t, query.Addresses, contract0.Address())
require.Len(t, query.Addresses, 1)
}).
Return(nil, nil).
Times(backfillTimes)`
$DIR/core/chains/evm/log/integration_test.go: `ethClient.On("FilterLogs", mock.Anything, mock.Anything).
Run(func(args mock.Arguments) {
query := args.Get(1).(ethereum.FilterQuery)
require.Equal(t, big.NewInt(expectedBlock), query.FromBlock)
require.Contains(t, query.Addresses, contract0.Address())
require.Contains(t, query.Addresses, contract1.Address())
require.Len(t, query.Addresses, 2)
}).
Return(nil, nil).
Once()`
$DIR/core/chains/evm/log/integration_test.go: `ethClient.On("FilterLogs", mock.Anything, mock.Anything).
Run(func(args mock.Arguments) {
query := args.Get(1).(ethereum.FilterQuery)
require.Equal(t, big.NewInt(expectedBlock), query.FromBlock)
require.Contains(t, query.Addresses, contract0.Address())
require.Contains(t, query.Addresses, contract1.Address())
require.Contains(t, query.Addresses, contract2.Address())
require.Len(t, query.Addresses, 3)
}).
Return(nil, nil).
Once()`
$DIR/core/chains/evm/log/integration_test.go: `helper.lb.AddDependents(1)`
$DIR/core/chains/evm/log/integration_test.go: `helper.start()`
$DIR/core/chains/evm/log/integration_test.go: `helper.register(listener0, contract0, 1)`
$DIR/core/chains/evm/log/integration_test.go: `helper.lb.DependentReady()`
$DIR/core/chains/evm/log/integration_test.go: `helper.register(listener1, contract1, 1)`
$DIR/core/chains/evm/log/integration_test.go: `helper.register(listener2, contract2, 1)`
$DIR/core/chains/evm/log/integration_test.go: `helper.lb.ReplayFromBlock(125, false)`
$DIR/core/chains/evm/log/integration_test.go: `logsA[uint(n)] = blocks.LogOnBlockNumWithIndex(uint64(n), 0, addrA)`
$DIR/core/chains/evm/log/integration_test.go: `logsB[uint(n)] = blocks.LogOnBlockNumWithIndex(uint64(n), 1, addrB)`
$DIR/core/chains/evm/log/integration_test.go: `t.Run(test.name, func(t *testing.T) {
const backfillDepth = 5
helper := newBroadcasterHelper(t, int64(test.blockHeight1), 2, nil, func(c *chainlink.Config, s *chainlink.Secrets) {
// something other than default
c.EVM[0].BlockBackfillDepth = ptr[uint32](backfillDepth)
})
helper.start()
defer helper.stop()
logListenerA := helper.newLogListenerWithJob("logListenerA")
logListenerB := helper.newLogListenerWithJob("logListenerB")
contractA, err := flux_aggregator_wrapper.NewFluxAggregator(addrA, nil)
require.NoError(t, err)
contractB, err := flux_aggregator_wrapper.NewFluxAggregator(addrB, nil)
require.NoError(t, err)
// Register listener A
helper.register(logListenerA, contractA, 1)
// Send initial logs
chRawLogs1 := <-helper.chchRawLogs
headsDone := cltest.SimulateIncomingHeads(t, blocks.Slice(test.blockHeight1, test.blockHeight2+2),
helper.lb, cltest.HeadTrackableFunc(func(_ context.Context, head *evmtypes.Head) {
n := uint(head.Number)
if l, ok := logsA[n]; ok && slices.Contains(test.batch1, n) {
chRawLogs1.TrySend(l)
}
}))
helper.requireBroadcastCount(len(test.batch1))
expectedA := newReceived(pickLogs(logsA, test.batch1))
logListenerA.requireAllReceived(t, expectedA)
<-headsDone
helper.mockEth.EthClient.On("HeadByNumber", mock.Anything, (*big.Int)(nil)).Return(&evmtypes.Head{Number: int64(test.blockHeight2)}, nil).Once()
combinedLogs := append(pickLogs(logsA, test.backfillableLogs), pickLogs(logsB, test.backfillableLogs)...)
call := helper.mockEth.EthClient.On("FilterLogs", mock.Anything, mock.Anything).Return(combinedLogs, nil).Once()
call.Run(func(args mock.Arguments) {
// Validate that the ethereum.FilterQuery is specified correctly for the backfill that we expect
fromBlock := args.Get(1).(ethereum.FilterQuery).FromBlock
expected := big.NewInt(0)
blockNumber := helper.lb.BackfillBlockNumber()
if blockNumber.Valid && blockNumber.Int64 > int64(test.blockHeight2-backfillDepth) {
expected = big.NewInt(blockNumber.Int64)
} else if test.blockHeight2 > backfillDepth {
expected = big.NewInt(int64(test.blockHeight2) - backfillDepth)
}
require.Equal(t, expected, fromBlock)
})
// Register listener B (triggers re-subscription)
helper.register(logListenerB, contractB, 1)
// Send second batch of new logs
chRawLogs2 := <-helper.chchRawLogs
headsDone = cltest.SimulateIncomingHeads(t, blocks.Slice(test.blockHeight2, -1),
helper.lb, cltest.HeadTrackableFunc(func(_ context.Context, head *evmtypes.Head) {
n := uint(head.Number)
if l, ok := logsA[n]; ok && slices.Contains(test.batch2, n) {
chRawLogs2.TrySend(l)
}
if l, ok := logsB[n]; ok && slices.Contains(test.batch2, n) {
chRawLogs2.TrySend(l)
}
}))
defer func() { <-headsDone }()
expectedA = newReceived(pickLogs(logsA, test.expectedFilteredA))
expectedB := newReceived(pickLogs(logsB, test.expectedFilteredB))
logListenerA.requireAllReceived(t, expectedA)
logListenerB.requireAllReceived(t, expectedB)
helper.requireBroadcastCount(len(test.expectedFilteredA) + len(test.expectedFilteredB))
})`
$DIR/core/chains/evm/log/integration_test.go: `c.EVM[0].BlockBackfillDepth = ptr[uint32](backfillDepth)`
$DIR/core/chains/evm/log/integration_test.go: `helper.start()`
$DIR/core/chains/evm/log/integration_test.go: `helper.register(logListenerA, contractA, 1)`
$DIR/core/chains/evm/log/integration_test.go: `chRawLogs1.TrySend(l)`
$DIR/core/chains/evm/log/integration_test.go: `helper.requireBroadcastCount(len(test.batch1))`
$DIR/core/chains/evm/log/integration_test.go: `logListenerA.requireAllReceived(t, expectedA)`
$DIR/core/chains/evm/log/integration_test.go: `<-headsDone`
$DIR/core/chains/evm/log/integration_test.go: `helper.mockEth.EthClient.On("HeadByNumber", mock.Anything, (*big.Int)(nil)).Return(&evmtypes.Head{Number: int64(test.blockHeight2)}, nil).Once()`
$DIR/core/chains/evm/log/integration_test.go: `call.Run(func(args mock.Arguments) {
// Validate that the ethereum.FilterQuery is specified correctly for the backfill that we expect
fromBlock := args.Get(1).(ethereum.FilterQuery).FromBlock
expected := big.NewInt(0)
blockNumber := helper.lb.BackfillBlockNumber()
if blockNumber.Valid && blockNumber.Int64 > int64(test.blockHeight2-backfillDepth) {
expected = big.NewInt(blockNumber.Int64)
} else if test.blockHeight2 > backfillDepth {
expected = big.NewInt(int64(test.blockHeight2) - backfillDepth)
}
require.Equal(t, expected, fromBlock)
})`
$DIR/core/chains/evm/log/integration_test.go: `expected = big.NewInt(blockNumber.Int64)`
$DIR/core/chains/evm/log/integration_test.go: `expected = big.NewInt(int64(test.blockHeight2) - backfillDepth)`
$DIR/core/chains/evm/log/integration_test.go: `helper.register(logListenerB, contractB, 1)`
$DIR/core/chains/evm/log/integration_test.go: `chRawLogs2.TrySend(l)`
$DIR/core/chains/evm/log/integration_test.go: `chRawLogs2.TrySend(l)`
$DIR/core/chains/evm/log/integration_test.go: `<-headsDone`
$DIR/core/chains/evm/log/integration_test.go: `expectedA = newReceived(pickLogs(logsA, test.expectedFilteredA))`
$DIR/core/chains/evm/log/integration_test.go: `logListenerA.requireAllReceived(t, expectedA)`
$DIR/core/chains/evm/log/integration_test.go: `logListenerB.requireAllReceived(t, expectedB)`
$DIR/core/chains/evm/log/integration_test.go: `helper.requireBroadcastCount(len(test.expectedFilteredA) + len(test.expectedFilteredB))`
$DIR/core/chains/evm/log/integration_test.go: `chCombined = lb.ExportedAppendLogChannel(chCombined, ch3)`
$DIR/core/chains/evm/log/integration_test.go: `ch1 <- log`
$DIR/core/chains/evm/log/integration_test.go: `ch2 <- log`
$DIR/core/chains/evm/log/integration_test.go: `ch3 <- log`
$DIR/core/chains/evm/log/integration_test.go: `expected = append(expected, logs3...)`
$DIR/core/chains/evm/log/integration_test.go: `i++`
$DIR/core/chains/evm/log/integration_test.go: `helper.start()`
$DIR/core/chains/evm/log/integration_test.go: `contract.On("ParseLog", log1).Return(flux_aggregator_wrapper.FluxAggregatorNewRound{}, nil)`
$DIR/core/chains/evm/log/integration_test.go: `contract.On("ParseLog", log2).Return(flux_aggregator_wrapper.FluxAggregatorAnswerUpdated{}, nil)`
$DIR/core/chains/evm/log/integration_test.go: `helper.register(logListener, contract, uint32(5))`
$DIR/core/chains/evm/log/integration_test.go: `chRawLogs.TrySend(log1)`
$DIR/core/chains/evm/log/integration_test.go: `chRawLogs.TrySend(log2)`
$DIR/core/chains/evm/log/integration_test.go: `<-headsDone`
$DIR/core/chains/evm/log/integration_test.go: `helper.start()`
$DIR/core/chains/evm/log/integration_test.go: `helper.register(listenerA, contract, 1)`
$DIR/core/chains/evm/log/integration_test.go: `helper.register(listenerB, contract, 3)`
$DIR/core/chains/evm/log/integration_test.go: `helper.lb.OnNewLongestChain(ctx, x)`
$DIR/core/chains/evm/log/integration_test.go: `chRawLogs.TrySend(x)`
$DIR/core/chains/evm/log/integration_test.go: `time.Sleep(250 * time.Millisecond)`
$DIR/core/chains/evm/log/integration_test.go: `g.Eventually(func() []uint64 { return listenerA.getUniqueLogsBlockNumbers() }, testutils.WaitTimeout(t), time.Second).
Should(gomega.Equal([]uint64{0, 1, 2, 1, 2, 3, 3}))`
$DIR/core/chains/evm/log/integration_test.go: `g.Eventually(func() []uint64 { return listenerB.getUniqueLogsBlockNumbers() }, testutils.WaitTimeout(t), time.Second).
Should(gomega.Equal([]uint64{0, 1, 1, 2, 2}))`
$DIR/core/chains/evm/log/integration_test.go: `helper.unsubscribeAll()`
$DIR/core/chains/evm/log/integration_test.go: `helper.mockEth.EthClient.On("HeadByNumber", mock.Anything, (*big.Int)(nil)).Return(&evmtypes.Head{Number: blockHeight}, nil).Times(1)`
$DIR/core/chains/evm/log/integration_test.go: `helper.mockEth.EthClient.On("FilterLogs", mock.Anything, mock.Anything).Return(nil, nil).Times(1)`
$DIR/core/chains/evm/log/integration_test.go: `helper.start()`
$DIR/core/chains/evm/log/integration_test.go: `helper.registerWithTopics(listener1, contract, topics1, 1)`
$DIR/core/chains/evm/log/integration_test.go: `g.Consistently(func() int32 { return helper.mockEth.SubscribeCallCount() }, 1*time.Second, cltest.DBPollingInterval).Should(gomega.Equal(int32(1)))`
$DIR/core/chains/evm/log/integration_test.go: `<-helper.chchRawLogs`
$DIR/core/chains/evm/log/integration_test.go: `helper.registerWithTopics(listener2, contract, topics2, 1)`
$DIR/core/chains/evm/log/integration_test.go: `g.Consistently(func() int32 { return helper.mockEth.SubscribeCallCount() }, 1*time.Second, cltest.DBPollingInterval).Should(gomega.Equal(int32(2)))`
$DIR/core/chains/evm/log/integration_test.go: `testutils.SkipShortDB(t)`
$DIR/core/chains/evm/log/integration_test.go: `ethClient.On("ConfiguredChainID").Return(big.NewInt(0)).Maybe()`
$DIR/core/chains/evm/log/integration_test.go: `ethClient.On("SubscribeFilterLogs", mock.Anything, mock.Anything, mock.Anything).
Return(
func(ctx context.Context, q ethereum.FilterQuery, ch chan<- types.Log) ethereum.Subscription {
sub := mockEth.NewSub(t)
logsChCh <- evmtestutils.NewRawSub(ch, sub.Err())
return sub
},
func(ctx context.Context, q ethereum.FilterQuery, ch chan<- types.Log) error {
return nil
},
).
Once()`
$DIR/core/chains/evm/log/integration_test.go: `logsChCh <- evmtestutils.NewRawSub(ch, sub.Err())`
$DIR/core/chains/evm/log/integration_test.go: `ethClient.On("HeadByNumber", mock.Anything, (*big.Int)(nil)).
Return(&evmtypes.Head{Number: 1}, nil)`
$DIR/core/chains/evm/log/integration_test.go: `ethClient.On("FilterLogs", mock.Anything, mock.Anything).
Return(nil, nil)`
$DIR/core/chains/evm/log/integration_test.go: `helper.start()`
$DIR/core/chains/evm/log/integration_test.go: `helper.register(listener1, contract1, 0)`
$DIR/core/chains/evm/log/integration_test.go: `helper.register(listener2, contract1, 0)`
$DIR/core/chains/evm/log/integration_test.go: `logs.TrySend(log)`
$DIR/core/chains/evm/log/integration_test.go: `gm.Eventually(func() bool {
helper.lb.Pause()
defer helper.lb.Resume()
return helper.lb.LogsFromBlock(bh) == len(addr1SentLogs)
}, 2*time.Second, 100*time.Millisecond).Should(gomega.BeTrue())`
$DIR/core/chains/evm/log/integration_test.go: `helper.lb.Pause()`
$DIR/core/chains/evm/log/integration_test.go: `helper.lb.OnNewLongestChain(testutils.Context(t), &evmtypes.Head{Number: 2})`
$DIR/core/chains/evm/log/integration_test.go: `gm.Eventually(func() bool {
return len(listener1.getUniqueLogs()) == len(addr1SentLogs) && len(listener2.getUniqueLogs()) == len(addr1SentLogs)
}, 2*time.Second, cltest.DBPollingInterval).Should(gomega.BeTrue())`
$DIR/core/chains/evm/log/integration_test.go: `.NewWithT(t)`
$DIR/core/chains/evm/log/integration_test.go: `.lb.AddDependents(2)`
$DIR/core/chains/evm/log/integration_test.go: `.newLogListenerWithJob("A")`
$DIR/core/chains/evm/log/integration_test.go: `.register(listener, newMockContract(t), 1)`
$DIR/core/chains/evm/log/integration_test.go: `.start()`
$DIR/core/chains/evm/log/integration_test.go: `.stop()`
$DIR/core/chains/evm/log/integration_test.go: `.Consistently(func() int32 { return helper.mockEth.SubscribeCallCount() }, 1*time.Second, cltest.DBPollingInterval)`
$DIR/core/chains/evm/log/integration_test.go: `.mockEth.SubscribeCallCount()`
$DIR/core/chains/evm/log/integration_test.go: `.Should(gomega.Equal(int32(0)))`
$DIR/core/chains/evm/log/integration_test.go: `.Equal(int32(0))`
$DIR/core/chains/evm/log/integration_test.go: `.lb.DependentReady()`
$DIR/core/chains/evm/log/integration_test.go: `.Consistently(func() int32 { return helper.mockEth.SubscribeCallCount() }, 1*time.Second, cltest.DBPollingInterval)`
$DIR/core/chains/evm/log/integration_test.go: `.mockEth.SubscribeCallCount()`
$DIR/core/chains/evm/log/integration_test.go: `.Should(gomega.Equal(int32(0)))`
$DIR/core/chains/evm/log/integration_test.go: `.Equal(int32(0))`
$DIR/core/chains/evm/log/integration_test.go: `.lb.DependentReady()`
$DIR/core/chains/evm/log/integration_test.go: `.Consistently(func() int32 { return helper.mockEth.SubscribeCallCount() }, 1*time.Second, cltest.DBPollingInterval)`
$DIR/core/chains/evm/log/integration_test.go: `.mockEth.SubscribeCallCount()`
$DIR/core/chains/evm/log/integration_test.go: `.Should(gomega.Equal(int32(1)))`
$DIR/core/chains/evm/log/integration_test.go: `.Equal(int32(1))`
$DIR/core/chains/evm/log/integration_test.go: `.unsubscribeAll()`
$DIR/core/chains/evm/log/integration_test.go: `.Consistently(func() int32 { return helper.mockEth.UnsubscribeCallCount() }, 1*time.Second, cltest.DBPollingInterval)`
$DIR/core/chains/evm/log/integration_test.go: `.mockEth.UnsubscribeCallCount()`
$DIR/core/chains/evm/log/integration_test.go: `.Equal(int32(1))`
$DIR/core/chains/evm/log/integration_test.go: `.SkipShortDB(t)`
$DIR/core/chains/evm/log/integration_test.go: `.Head(lastStoredBlockHeight)`
$DIR/core/chains/evm/log/integration_test.go: `.config.EVM()`
$DIR/core/chains/evm/log/integration_test.go: `.BlockBackfillDepth()`
$DIR/core/chains/evm/log/integration_test.go: `.Store(1)`
$DIR/core/chains/evm/log/integration_test.go: `.newLogListenerWithJob("initial")`
$DIR/core/chains/evm/log/integration_test.go: `.register(listener, newMockContract(t), numConfirmations)`
$DIR/core/chains/evm/log/integration_test.go: `.newLogListenerWithJob("")`
$DIR/core/chains/evm/log/integration_test.go: `.register(listener, newMockContract(t), 1)`
$DIR/core/chains/evm/log/integration_test.go: `.start()`
$DIR/core/chains/evm/log/integration_test.go: `.stop()`
$DIR/core/chains/evm/log/integration_test.go: `.NewWithT(t)`
$DIR/core/chains/evm/log/integration_test.go: `.Consistently(func() int32 { return helper.mockEth.SubscribeCallCount() }, 1*time.Second, cltest.DBPollingInterval)`
$DIR/core/chains/evm/log/integration_test.go: `.mockEth.SubscribeCallCount()`
$DIR/core/chains/evm/log/integration_test.go: `.Should(gomega.Equal(int32(1)))`
$DIR/core/chains/evm/log/integration_test.go: `.Equal(int32(1))`
$DIR/core/chains/evm/log/integration_test.go: `.NewWithT(t)`
$DIR/core/chains/evm/log/integration_test.go: `.Consistently(func() int32 { return helper.mockEth.UnsubscribeCallCount() }, 1*time.Second, cltest.DBPollingInterval)`
$DIR/core/chains/evm/log/integration_test.go: `.mockEth.UnsubscribeCallCount()`
$DIR/core/chains/evm/log/integration_test.go: `.Should(gomega.Equal(int32(0)))`
$DIR/core/chains/evm/log/integration_test.go: `.Equal(int32(0))`
$DIR/core/chains/evm/log/integration_test.go: `.unsubscribeAll()`
$DIR/core/chains/evm/log/integration_test.go: `.Store(2)`
$DIR/core/chains/evm/log/integration_test.go: `.newLogListenerWithJob("last")`
$DIR/core/chains/evm/log/integration_test.go: `.register(listenerLast, newMockContract(t), 1)`
$DIR/core/chains/evm/log/integration_test.go: `.NewWithT(t)`
$DIR/core/chains/evm/log/integration_test.go: `.Consistently(func() int32 { return helper.mockEth.SubscribeCallCount() }, 1*time.Second, cltest.DBPollingInterval)`
$DIR/core/chains/evm/log/integration_test.go: `.mockEth.SubscribeCallCount()`
$DIR/core/chains/evm/log/integration_test.go: `.Should(gomega.Equal(int32(2)))`
$DIR/core/chains/evm/log/integration_test.go: `.Equal(int32(2))`
$DIR/core/chains/evm/log/integration_test.go: `.NewWithT(t)`
$DIR/core/chains/evm/log/integration_test.go: `.Consistently(func() int32 { return helper.mockEth.UnsubscribeCallCount() }, 1*time.Second, cltest.DBPollingInterval)`
$DIR/core/chains/evm/log/integration_test.go: `.mockEth.UnsubscribeCallCount()`
$DIR/core/chains/evm/log/integration_test.go: `.Should(gomega.Equal(int32(1)))`
$DIR/core/chains/evm/log/integration_test.go: `.Equal(int32(1))`
$DIR/core/chains/evm/log/integration_test.go: `.Load()`
$DIR/core/chains/evm/log/integration_test.go: `.WaitTimeout(t)`
$DIR/core/chains/evm/log/integration_test.go: `.SkipShortDB(t)`
$DIR/core/chains/evm/log/integration_test.go: `.Head(lastStoredBlockHeight)`
$DIR/core/chains/evm/log/integration_test.go: `.newLogListenerWithJob("one")`
$DIR/core/chains/evm/log/integration_test.go: `.register(listener, newMockContract(t), uint32(maxNumConfirmations))`
$DIR/core/chains/evm/log/integration_test.go: `.newLogListenerWithJob("two")`
$DIR/core/chains/evm/log/integration_test.go: `.register(listener2, newMockContract(t), uint32(2))`
$DIR/core/chains/evm/log/integration_test.go: `.config.EVM()`
$DIR/core/chains/evm/log/integration_test.go: `.BlockBackfillDepth()`
$DIR/core/chains/evm/log/integration_test.go: `.Add(1)`
$DIR/core/chains/evm/log/integration_test.go: `.start()`
$DIR/core/chains/evm/log/integration_test.go: `.stop()`
$DIR/core/chains/evm/log/integration_test.go: `.lb.ReplayFromBlock(replayFrom, false)`
$DIR/core/chains/evm/log/integration_test.go: `.mockEth.UnsubscribeCallCount()`
$DIR/core/chains/evm/log/integration_test.go: `.WaitTimeout(t)`
$DIR/core/chains/evm/log/integration_test.go: `.SkipShortDB(t)`
$DIR/core/chains/evm/log/integration_test.go: `.NewBlocks(t, blockHeight+3)`
$DIR/core/chains/evm/log/integration_test.go: `.NewFluxAggregator(testutils.NewAddress(), nil)`
$DIR/core/chains/evm/log/integration_test.go: `.NewAddress()`
$DIR/core/chains/evm/log/integration_test.go: `.LogOnBlockNum(3, contract.Address())`
$DIR/core/chains/evm/log/integration_test.go: `.Address()`
$DIR/core/chains/evm/log/integration_test.go: `.LogOnBlockNum(7, contract.Address())`
$DIR/core/chains/evm/log/integration_test.go: `.Address()`
$DIR/core/chains/evm/log/integration_test.go: `.Head(blockHeight)`
$DIR/core/chains/evm/log/integration_test.go: `.newLogListenerWithJob("listener")`
$DIR/core/chains/evm/log/integration_test.go: `.register(listener, contract, 2)`
$DIR/core/chains/evm/log/integration_test.go: `.start()`
$DIR/core/chains/evm/log/integration_test.go: `.stop()`
$DIR/core/chains/evm/log/integration_test.go: `.lb.ReplayFromBlock(2, false)`
$DIR/core/chains/evm/log/integration_test.go: `.SimulateIncomingHeads(t, blocks.Slice(10, 11), helper.lb)`
$DIR/core/chains/evm/log/integration_test.go: `.Slice(10, 11)`
$DIR/core/chains/evm/log/integration_test.go: `.lb.ReplayFromBlock(2, false)`
$DIR/core/chains/evm/log/integration_test.go: `.SimulateIncomingHeads(t, blocks.Slice(11, 12), helper.lb)`
$DIR/core/chains/evm/log/integration_test.go: `.Slice(11, 12)`
$DIR/core/chains/evm/log/integration_test.go: `.lb.ReplayFromBlock(2, true)`
$DIR/core/chains/evm/log/integration_test.go: `.SimulateIncomingHeads(t, blocks.Slice(12, 13), helper.lb)`
$DIR/core/chains/evm/log/integration_test.go: `.Slice(12, 13)`
$DIR/core/chains/evm/log/integration_test.go: `.mockEth.UnsubscribeCallCount()`
$DIR/core/chains/evm/log/integration_test.go: `.WaitTimeout(t)`
$DIR/core/chains/evm/log/integration_test.go: `.NewBlocks(t, 10)`
$DIR/core/chains/evm/log/integration_test.go: `.LogOnBlockNum(log1Block, contract1.Address())`
$DIR/core/chains/evm/log/integration_test.go: `.Address()`
$DIR/core/chains/evm/log/integration_test.go: `.LogOnBlockNum(log2Block, contract2.Address())`
$DIR/core/chains/evm/log/integration_test.go: `.Address()`
$DIR/core/chains/evm/log/integration_test.go: `.Run("pool two logs from subscription, then shut down", func(t *testing.T) {
helper := newBroadcasterHelper(t, 0, 1, logs, func(c *chainlink.Config, s *chainlink.Secrets) {
c.EVM[0].FinalityDepth = ptr[uint32](confs)
})
ctx := testutils.Context(t)
orm := log.NewORM(helper.db, cltest.FixtureChainID)
listener := helper.newLogListenerWithJob("one")
listener.SkipMarkingConsumed(true)
listener2 := helper.newLogListenerWithJob("two")
listener2.SkipMarkingConsumed(true)
expBlock := int64(log1.BlockNumber)
helper.simulateHeads(t, listener, listener2, contract1, contract2, confs, blocks.Slice(0, 2), orm, &expBlock, func() {
chRawLogs := <-helper.chchRawLogs
chRawLogs.TrySend(log1)
chRawLogs.TrySend(log2)
})
// Pool min block in DB and neither listener received a broadcast
blockNum, err := orm.GetPendingMinBlock(ctx)
require.NoError(t, err)
require.NotNil(t, blockNum)
require.Equal(t, int64(log1.BlockNumber), *blockNum)
require.Empty(t, listener.getUniqueLogs())
require.Empty(t, listener2.getUniqueLogs())
helper.requireBroadcastCount(0)
})`
$DIR/core/chains/evm/log/integration_test.go: `.Context(t)`
$DIR/core/chains/evm/log/integration_test.go: `.NewORM(helper.db, cltest.FixtureChainID)`
$DIR/core/chains/evm/log/integration_test.go: `.newLogListenerWithJob("one")`
$DIR/core/chains/evm/log/integration_test.go: `.SkipMarkingConsumed(true)`
$DIR/core/chains/evm/log/integration_test.go: `.newLogListenerWithJob("two")`
$DIR/core/chains/evm/log/integration_test.go: `.SkipMarkingConsumed(true)`
$DIR/core/chains/evm/log/integration_test.go: `.simulateHeads(t, listener, listener2, contract1, contract2, confs, blocks.Slice(0, 2), orm, &expBlock, func() {
chRawLogs := <-helper.chchRawLogs
chRawLogs.TrySend(log1)
chRawLogs.TrySend(log2)
})`
$DIR/core/chains/evm/log/integration_test.go: `.Slice(0, 2)`
$DIR/core/chains/evm/log/integration_test.go: `.TrySend(log1)`
$DIR/core/chains/evm/log/integration_test.go: `.TrySend(log2)`
$DIR/core/chains/evm/log/integration_test.go: `.GetPendingMinBlock(ctx)`
$DIR/core/chains/evm/log/integration_test.go: `.requireBroadcastCount(0)`
$DIR/core/chains/evm/log/integration_test.go: `.Run("backfill pool with both, then broadcast one, but don't consume", func(t *testing.T) {
helper := newBroadcasterHelper(t, 2, 1, logs, func(c *chainlink.Config, s *chainlink.Secrets) {
c.EVM[0].FinalityDepth = ptr[uint32](confs)
})
ctx := testutils.Context(t)
orm := log.NewORM(helper.db, cltest.FixtureChainID)
contract1.On("ParseLog", log1).Return(flux_aggregator_wrapper.FluxAggregatorNewRound{}, nil)
contract2.On("ParseLog", log2).Return(flux_aggregator_wrapper.FluxAggregatorAnswerUpdated{}, nil)
listener := helper.newLogListenerWithJob("one")
listener.SkipMarkingConsumed(true)
listener2 := helper.newLogListenerWithJob("two")
listener2.SkipMarkingConsumed(true)
expBlock := int64(log2.BlockNumber)
helper.simulateHeads(t, listener, listener2, contract1, contract2, confs, blocks.Slice(2, 5), orm, &expBlock, nil)
// Pool min block in DB and one listener received but didn't consume
blockNum, err := orm.GetPendingMinBlock(ctx)
require.NoError(t, err)
require.NotNil(t, blockNum)
require.Equal(t, int64(log2.BlockNumber), *blockNum)
require.NotEmpty(t, listener.getUniqueLogs())
require.Empty(t, listener2.getUniqueLogs())
c, err := orm.WasBroadcastConsumed(ctx, log1.BlockHash, log1.Index, listener.JobID())
require.NoError(t, err)
require.False(t, c)
})`
$DIR/core/chains/evm/log/integration_test.go: `.Context(t)`
$DIR/core/chains/evm/log/integration_test.go: `.NewORM(helper.db, cltest.FixtureChainID)`
$DIR/core/chains/evm/log/integration_test.go: `.On("ParseLog", log1)`
$DIR/core/chains/evm/log/integration_test.go: `.Return(flux_aggregator_wrapper.FluxAggregatorNewRound{}, nil)`
$DIR/core/chains/evm/log/integration_test.go: `.On("ParseLog", log2)`
$DIR/core/chains/evm/log/integration_test.go: `.Return(flux_aggregator_wrapper.FluxAggregatorAnswerUpdated{}, nil)`
$DIR/core/chains/evm/log/integration_test.go: `.newLogListenerWithJob("one")`
$DIR/core/chains/evm/log/integration_test.go: `.SkipMarkingConsumed(true)`
$DIR/core/chains/evm/log/integration_test.go: `.newLogListenerWithJob("two")`
$DIR/core/chains/evm/log/integration_test.go: `.SkipMarkingConsumed(true)`
$DIR/core/chains/evm/log/integration_test.go: `.simulateHeads(t, listener, listener2, contract1, contract2, confs, blocks.Slice(2, 5), orm, &expBlock, nil)`
$DIR/core/chains/evm/log/integration_test.go: `.Slice(2, 5)`
$DIR/core/chains/evm/log/integration_test.go: `.GetPendingMinBlock(ctx)`
$DIR/core/chains/evm/log/integration_test.go: `.WasBroadcastConsumed(ctx, log1.BlockHash, log1.Index, listener.JobID())`
$DIR/core/chains/evm/log/integration_test.go: `.JobID()`
$DIR/core/chains/evm/log/integration_test.go: `.Run("backfill pool and broadcast two, but only consume one", func(t *testing.T) {
helper := newBroadcasterHelper(t, 4, 1, logs, func(c *chainlink.Config, s *chainlink.Secrets) {
c.EVM[0].FinalityDepth = ptr[uint32](confs)
})
ctx := testutils.Context(t)
orm := log.NewORM(helper.db, cltest.FixtureChainID)
listener := helper.newLogListenerWithJob("one")
listener2 := helper.newLogListenerWithJob("two")
listener2.SkipMarkingConsumed(true)
helper.simulateHeads(t, listener, listener2, contract1, contract2, confs, blocks.Slice(5, 8), orm, nil, nil)
// Pool empty and one consumed but other didn't
blockNum, err := orm.GetPendingMinBlock(ctx)
require.NoError(t, err)
require.Nil(t, blockNum)
require.NotEmpty(t, listener.getUniqueLogs())
require.NotEmpty(t, listener2.getUniqueLogs())
c, err := orm.WasBroadcastConsumed(ctx, log1.BlockHash, log1.Index, listener.JobID())
require.NoError(t, err)
require.True(t, c)
c, err = orm.WasBroadcastConsumed(ctx, log2.BlockHash, log2.Index, listener2.JobID())
require.NoError(t, err)
require.False(t, c)
})`
$DIR/core/chains/evm/log/integration_test.go: `.Context(t)`
$DIR/core/chains/evm/log/integration_test.go: `.NewORM(helper.db, cltest.FixtureChainID)`
$DIR/core/chains/evm/log/integration_test.go: `.newLogListenerWithJob("one")`
$DIR/core/chains/evm/log/integration_test.go: `.newLogListenerWithJob("two")`
$DIR/core/chains/evm/log/integration_test.go: `.SkipMarkingConsumed(true)`
$DIR/core/chains/evm/log/integration_test.go: `.simulateHeads(t, listener, listener2, contract1, contract2, confs, blocks.Slice(5, 8), orm, nil, nil)`
$DIR/core/chains/evm/log/integration_test.go: `.Slice(5, 8)`
$DIR/core/chains/evm/log/integration_test.go: `.GetPendingMinBlock(ctx)`
$DIR/core/chains/evm/log/integration_test.go: `.WasBroadcastConsumed(ctx, log1.BlockHash, log1.Index, listener.JobID())`
$DIR/core/chains/evm/log/integration_test.go: `.JobID()`
$DIR/core/chains/evm/log/integration_test.go: `.WasBroadcastConsumed(ctx, log2.BlockHash, log2.Index, listener2.JobID())`
$DIR/core/chains/evm/log/integration_test.go: `.JobID()`
$DIR/core/chains/evm/log/integration_test.go: `.Context(t)`
$DIR/core/chains/evm/log/integration_test.go: `.NewORM(helper.db, cltest.FixtureChainID)`
$DIR/core/chains/evm/log/integration_test.go: `.newLogListenerWithJob("one")`
$DIR/core/chains/evm/log/integration_test.go: `.newLogListenerWithJob("two")`
$DIR/core/chains/evm/log/integration_test.go: `.simulateHeads(t, listener, listener2, contract1, contract2, confs, blocks.Slice(8, 9), orm, nil, nil)`
$DIR/core/chains/evm/log/integration_test.go: `.Slice(8, 9)`
$DIR/core/chains/evm/log/integration_test.go: `.GetPendingMinBlock(ctx)`
$DIR/core/chains/evm/log/integration_test.go: `.WasBroadcastConsumed(ctx, log2.BlockHash, log2.Index, listener2.JobID())`
$DIR/core/chains/evm/log/integration_test.go: `.JobID()`
$DIR/core/chains/evm/log/integration_test.go: `.SkipShortDB(t)`
$DIR/core/chains/evm/log/integration_test.go: `.Head(lastStoredBlockHeight)`
$DIR/core/chains/evm/log/integration_test.go: `.newLogListenerWithJob("one")`
$DIR/core/chains/evm/log/integration_test.go: `.register(listener, newMockContract(t), uint32(10))`
$DIR/core/chains/evm/log/integration_test.go: `.newLogListenerWithJob("two")`
$DIR/core/chains/evm/log/integration_test.go: `.register(listener2, newMockContract(t), uint32(2))`
$DIR/core/chains/evm/log/integration_test.go: `.Store(1)`
$DIR/core/chains/evm/log/integration_test.go: `.start()`
$DIR/core/chains/evm/log/integration_test.go: `.stop()`
$DIR/core/chains/evm/log/integration_test.go: `.mockEth.UnsubscribeCallCount()`
$DIR/core/chains/evm/log/integration_test.go: `.WaitTimeout(t)`
$DIR/core/chains/evm/log/integration_test.go: `.SkipShortDB(t)`
$DIR/core/chains/evm/log/integration_test.go: `.Head(lastStoredBlockHeight)`
$DIR/core/chains/evm/log/integration_test.go: `.config.EVM()`
$DIR/core/chains/evm/log/integration_test.go: `.BlockBackfillDepth()`
$DIR/core/chains/evm/log/integration_test.go: `.Test(t)`
$DIR/core/chains/evm/log/integration_test.go: `.Add(1)`
$DIR/core/chains/evm/log/integration_test.go: `.Infof("Log Batch: --------- times %v - %v, %v", times, fromBlock, toBlock)`
$DIR/core/chains/evm/log/integration_test.go: `.newLogListenerWithJob("initial")`
$DIR/core/chains/evm/log/integration_test.go: `.register(listener, newMockContract(t), numConfirmations)`
$DIR/core/chains/evm/log/integration_test.go: `.start()`
$DIR/core/chains/evm/log/integration_test.go: `.stop()`
$DIR/core/chains/evm/log/integration_test.go: `.unsubscribeAll()`
$DIR/core/chains/evm/log/integration_test.go: `.mockEth.UnsubscribeCallCount()`
$DIR/core/chains/evm/log/integration_test.go: `.WaitTimeout(t)`
$DIR/core/chains/evm/log/integration_test.go: `.SkipShortDB(t)`
$DIR/core/chains/evm/log/integration_test.go: `.NewWithT(t)`
$DIR/core/chains/evm/log/integration_test.go: `.NewFluxAggregator(testutils.NewAddress(), nil)`
$DIR/core/chains/evm/log/integration_test.go: `.NewAddress()`
$DIR/core/chains/evm/log/integration_test.go: `.NewBlocks(t, 7)`
$DIR/core/chains/evm/log/integration_test.go: `.LogOnBlockNum(0, contract1.Address())`
$DIR/core/chains/evm/log/integration_test.go: `.Address()`
$DIR/core/chains/evm/log/integration_test.go: `.Head(lastStoredBlockHeight)`
$DIR/core/chains/evm/log/integration_test.go: `.Test(t)`
$DIR/core/chains/evm/log/integration_test.go: `.Add(1)`
$DIR/core/chains/evm/log/integration_test.go: `.Warnf("Log Batch: --------- times %v - %v, %v", times, fromBlock, toBlock)`
$DIR/core/chains/evm/log/integration_test.go: `.newLogListenerWithJob("initial")`
$DIR/core/chains/evm/log/integration_test.go: `.register(listener, newMockContract(t), 1)`
$DIR/core/chains/evm/log/integration_test.go: `.start()`
$DIR/core/chains/evm/log/integration_test.go: `.stop()`
$DIR/core/chains/evm/log/integration_test.go: `.Eventually(func() int64 { return backfillCount.Load() }, testutils.WaitTimeout(t), time.Second)`
$DIR/core/chains/evm/log/integration_test.go: `.Load()`
$DIR/core/chains/evm/log/integration_test.go: `.WaitTimeout(t)`
$DIR/core/chains/evm/log/integration_test.go: `.Should(gomega.Equal(int64(expectedBatches)))`
$DIR/core/chains/evm/log/integration_test.go: `.Equal(int64(expectedBatches))`
$DIR/core/chains/evm/log/integration_test.go: `.unsubscribeAll()`
$DIR/core/chains/evm/log/integration_test.go: `.Eventually(func() int32 { return helper.mockEth.UnsubscribeCallCount() }, testutils.WaitTimeout(t), time.Second)`
$DIR/core/chains/evm/log/integration_test.go: `.mockEth.UnsubscribeCallCount()`
$DIR/core/chains/evm/log/integration_test.go: `.WaitTimeout(t)`
$DIR/core/chains/evm/log/integration_test.go: `.BeNumerically(">=", int32(1))`
$DIR/core/chains/evm/log/integration_test.go: `.NewFluxAggregator(testutils.NewAddress(), nil)`
$DIR/core/chains/evm/log/integration_test.go: `.NewAddress()`
$DIR/core/chains/evm/log/integration_test.go: `.NewFluxAggregator(testutils.NewAddress(), nil)`
$DIR/core/chains/evm/log/integration_test.go: `.NewAddress()`
$DIR/core/chains/evm/log/integration_test.go: `.NewBlocks(t, 10)`
$DIR/core/chains/evm/log/integration_test.go: `.LogOnBlockNum(1, contract1.Address())`
$DIR/core/chains/evm/log/integration_test.go: `.Address()`
$DIR/core/chains/evm/log/integration_test.go: `.LogOnBlockNum(2, contract1.Address())`
$DIR/core/chains/evm/log/integration_test.go: `.Address()`
$DIR/core/chains/evm/log/integration_test.go: `.LogOnBlockNum(3, contract1.Address())`
$DIR/core/chains/evm/log/integration_test.go: `.Address()`
$DIR/core/chains/evm/log/integration_test.go: `.LogOnBlockNum(4, contract2.Address())`
$DIR/core/chains/evm/log/integration_test.go: `.Address()`
$DIR/core/chains/evm/log/integration_test.go: `.LogOnBlockNum(5, contract2.Address())`
$DIR/core/chains/evm/log/integration_test.go: `.Address()`
$DIR/core/chains/evm/log/integration_test.go: `.LogOnBlockNum(6, contract2.Address())`
$DIR/core/chains/evm/log/integration_test.go: `.Address()`
$DIR/core/chains/evm/log/integration_test.go: `.newLogListenerWithJob("listener 1")`
$DIR/core/chains/evm/log/integration_test.go: `.newLogListenerWithJob("listener 2")`
$DIR/core/chains/evm/log/integration_test.go: `.newLogListenerWithJob("listener 3")`
$DIR/core/chains/evm/log/integration_test.go: `.newLogListenerWithJob("listener 4")`
$DIR/core/chains/evm/log/integration_test.go: `.register(listener1, contract1, 1)`
$DIR/core/chains/evm/log/integration_test.go: `.register(listener2, contract1, 1)`
$DIR/core/chains/evm/log/integration_test.go: `.register(listener3, contract2, 1)`
$DIR/core/chains/evm/log/integration_test.go: `.register(listener4, contract2, 1)`
$DIR/core/chains/evm/log/integration_test.go: `.start()`
$DIR/core/chains/evm/log/integration_test.go: `.stop()`
$DIR/core/chains/evm/log/integration_test.go: `.SimulateIncomingHeads(t, blocks.Slice(0, 10), helper.lb)`
$DIR/core/chains/evm/log/integration_test.go: `.Slice(0, 10)`
$DIR/core/chains/evm/log/integration_test.go: `.unsubscribeAll()`
$DIR/core/chains/evm/log/integration_test.go: `.TrySend(log)`
$DIR/core/chains/evm/log/integration_test.go: `.TrySend(log)`
$DIR/core/chains/evm/log/integration_test.go: `.requireBroadcastCount(12)`
$DIR/core/chains/evm/log/integration_test.go: `.received.getUniqueLogs()`
$DIR/core/chains/evm/log/integration_test.go: `.received.getUniqueLogs()`
$DIR/core/chains/evm/log/integration_test.go: `.received.getUniqueLogs()`
$DIR/core/chains/evm/log/integration_test.go: `.received.getUniqueLogs()`
$DIR/core/chains/evm/log/integration_test.go: `.start()`
$DIR/core/chains/evm/log/integration_test.go: `.NewFluxAggregator(testutils.NewAddress(), nil)`
$DIR/core/chains/evm/log/integration_test.go: `.NewAddress()`
$DIR/core/chains/evm/log/integration_test.go: `.NewBlocks(t, 10)`
$DIR/core/chains/evm/log/integration_test.go: `.LogOnBlockNum(1, contract1.Address())`
$DIR/core/chains/evm/log/integration_test.go: `.Address()`
$DIR/core/chains/evm/log/integration_test.go: `.LogOnBlockNum(2, contract1.Address())`
$DIR/core/chains/evm/log/integration_test.go: `.Address()`
$DIR/core/chains/evm/log/integration_test.go: `.LogOnBlockNum(3, contract1.Address())`
$DIR/core/chains/evm/log/integration_test.go: `.Address()`
$DIR/core/chains/evm/log/integration_test.go: `.newLogListenerWithJob("listener 1")`
$DIR/core/chains/evm/log/integration_test.go: `.newLogListenerWithJob("listener 2")`
$DIR/core/chains/evm/log/integration_test.go: `.register(listener1, contract1, 1)`
$DIR/core/chains/evm/log/integration_test.go: `.register(listener2, contract1, 8)`
$DIR/core/chains/evm/log/integration_test.go: `.SimulateIncomingHeads(t, blocks.Slice(0, 10), helper.lb)`
$DIR/core/chains/evm/log/integration_test.go: `.Slice(0, 10)`
$DIR/core/chains/evm/log/integration_test.go: `.TrySend(log)`
$DIR/core/chains/evm/log/integration_test.go: `.requireBroadcastCount(5)`
$DIR/core/chains/evm/log/integration_test.go: `.stop()`
$DIR/core/chains/evm/log/integration_test.go: `.received.getUniqueLogs()`
$DIR/core/chains/evm/log/integration_test.go: `.received.getUniqueLogs()`
$DIR/core/chains/evm/log/integration_test.go: `.received.getUniqueLogs()`
$DIR/core/chains/evm/log/integration_test.go: `.received.getLogs()`
$DIR/core/chains/evm/log/integration_test.go: `.received.getUniqueLogs()`
$DIR/core/chains/evm/log/integration_test.go: `.received.getLogs()`
$DIR/core/chains/evm/log/integration_test.go: `.received.logsOnBlocks()`
$DIR/core/chains/evm/log/integration_test.go: `.start()`
$DIR/core/chains/evm/log/integration_test.go: `.stop()`
$DIR/core/chains/evm/log/integration_test.go: `.NewFluxAggregator(testutils.NewAddress(), nil)`
$DIR/core/chains/evm/log/integration_test.go: `.NewAddress()`
$DIR/core/chains/evm/log/integration_test.go: `.NewBlocks(t, 20)`
$DIR/core/chains/evm/log/integration_test.go: `.LogOnBlockNum(1, contract1.Address())`
$DIR/core/chains/evm/log/integration_test.go: `.Address()`
$DIR/core/chains/evm/log/integration_test.go: `.LogOnBlockNum(2, contract1.Address())`
$DIR/core/chains/evm/log/integration_test.go: `.Address()`
$DIR/core/chains/evm/log/integration_test.go: `.LogOnBlockNum(3, contract1.Address())`
$DIR/core/chains/evm/log/integration_test.go: `.Address()`
$DIR/core/chains/evm/log/integration_test.go: `.newLogListenerWithJob("listener 1")`
$DIR/core/chains/evm/log/integration_test.go: `.newLogListenerWithJob("listener 2")`
$DIR/core/chains/evm/log/integration_test.go: `.newLogListenerWithJob("listener 3")`
$DIR/core/chains/evm/log/integration_test.go: `.newLogListenerWithJob("listener 4")`
$DIR/core/chains/evm/log/integration_test.go: `.register(listener1, contract1, 1)`
$DIR/core/chains/evm/log/integration_test.go: `.register(listener2, contract1, 3)`
$DIR/core/chains/evm/log/integration_test.go: `.SimulateIncomingHeads(t, blocks.Slice(0, 6), helper.lb)`
$DIR/core/chains/evm/log/integration_test.go: `.Slice(0, 6)`
$DIR/core/chains/evm/log/integration_test.go: `.TrySend(log)`
$DIR/core/chains/evm/log/integration_test.go: `.requireBroadcastCount(6)`
$DIR/core/chains/evm/log/integration_test.go: `.register(listener3, contract1, 1)`
$DIR/core/chains/evm/log/integration_test.go: `.SimulateIncomingHeads(t, blocks.Slice(6, 9), helper.lb)`
$DIR/core/chains/evm/log/integration_test.go: `.Slice(6, 9)`
$DIR/core/chains/evm/log/integration_test.go: `.requireBroadcastCount(8)`
$DIR/core/chains/evm/log/integration_test.go: `.register(listener4, contract1, 1)`
$DIR/core/chains/evm/log/integration_test.go: `.SimulateIncomingHeads(t, blocks.Slice(9, 12), helper.lb)`
$DIR/core/chains/evm/log/integration_test.go: `.Slice(9, 12)`
$DIR/core/chains/evm/log/integration_test.go: `.received.getUniqueLogs()`
$DIR/core/chains/evm/log/integration_test.go: `.start()`
$DIR/core/chains/evm/log/integration_test.go: `.stop()`
$DIR/core/chains/evm/log/integration_test.go: `.NewFluxAggregator(testutils.NewAddress(), nil)`
$DIR/core/chains/evm/log/integration_test.go: `.NewAddress()`
$DIR/core/chains/evm/log/integration_test.go: `.NewBlocks(t, 20)`
$DIR/core/chains/evm/log/integration_test.go: `.LogOnBlockNum(1, contract1.Address())`
$DIR/core/chains/evm/log/integration_test.go: `.Address()`
$DIR/core/chains/evm/log/integration_test.go: `.LogOnBlockNum(2, contract1.Address())`
$DIR/core/chains/evm/log/integration_test.go: `.Address()`
$DIR/core/chains/evm/log/integration_test.go: `.LogOnBlockNum(3, contract1.Address())`
$DIR/core/chains/evm/log/integration_test.go: `.Address()`
$DIR/core/chains/evm/log/integration_test.go: `.newLogListenerWithJob("listener 1")`
$DIR/core/chains/evm/log/integration_test.go: `.newLogListenerWithJob("listener 2")`
$DIR/core/chains/evm/log/integration_test.go: `.newLogListenerWithJob("listener 3")`
$DIR/core/chains/evm/log/integration_test.go: `.newLogListenerWithJob("listener 4")`
$DIR/core/chains/evm/log/integration_test.go: `.register(listener1, contract1, 1)`
$DIR/core/chains/evm/log/integration_test.go: `.register(listener2, contract1, 3)`
$DIR/core/chains/evm/log/integration_test.go: `.SimulateIncomingHeads(t, blocks.Slice(0, 6), helper.lb)`
$DIR/core/chains/evm/log/integration_test.go: `.Slice(0, 6)`
$DIR/core/chains/evm/log/integration_test.go: `.TrySend(log)`
$DIR/core/chains/evm/log/integration_test.go: `.requireBroadcastCount(6)`
$DIR/core/chains/evm/log/integration_test.go: `.register(listener3, contract1, 1)`
$DIR/core/chains/evm/log/integration_test.go: `.SimulateIncomingHeads(t, blocks.Slice(7, 9), helper.lb)`
$DIR/core/chains/evm/log/integration_test.go: `.Slice(7, 9)`
$DIR/core/chains/evm/log/integration_test.go: `.requireBroadcastCount(9)`
$DIR/core/chains/evm/log/integration_test.go: `.register(listener4, contract1, 1)`
$DIR/core/chains/evm/log/integration_test.go: `.SimulateIncomingHeads(t, blocks.Slice(10, 12), helper.lb)`
$DIR/core/chains/evm/log/integration_test.go: `.Slice(10, 12)`
$DIR/core/chains/evm/log/integration_test.go: `.received.getUniqueLogs()`
$DIR/core/chains/evm/log/integration_test.go: `.start()`
$DIR/core/chains/evm/log/integration_test.go: `.stop()`
$DIR/core/chains/evm/log/integration_test.go: `.NewFluxAggregator(testutils.NewAddress(), nil)`
$DIR/core/chains/evm/log/integration_test.go: `.NewAddress()`
$DIR/core/chains/evm/log/integration_test.go: `.NewBlocks(t, 20)`
$DIR/core/chains/evm/log/integration_test.go: `.Topic()`
$DIR/core/chains/evm/log/integration_test.go: `.NewHash()`
$DIR/core/chains/evm/log/integration_test.go: `.NewHash()`
$DIR/core/chains/evm/log/integration_test.go: `.NewHash()`
$DIR/core/chains/evm/log/integration_test.go: `.NewHash()`
$DIR/core/chains/evm/log/integration_test.go: `.LogOnBlockNumWithTopics(1, 0, contract1.Address(), []common.Hash{topic, field1Value1, field2Value1})`
$DIR/core/chains/evm/log/integration_test.go: `.Address()`
$DIR/core/chains/evm/log/integration_test.go: `.LogOnBlockNumWithTopics(1, 1, contract1.Address(), []common.Hash{topic, field1Value2, field2Value2})`
$DIR/core/chains/evm/log/integration_test.go: `.Address()`
$DIR/core/chains/evm/log/integration_test.go: `.LogOnBlockNumWithTopics(2, 0, contract1.Address(), []common.Hash{topic, utils.NewHash(), field2Value2})`
$DIR/core/chains/evm/log/integration_test.go: `.Address()`
$DIR/core/chains/evm/log/integration_test.go: `.NewHash()`
$DIR/core/chains/evm/log/integration_test.go: `.LogOnBlockNumWithTopics(2, 1, contract1.Address(), []common.Hash{topic, field1Value2, utils.NewHash()})`
$DIR/core/chains/evm/log/integration_test.go: `.Address()`
$DIR/core/chains/evm/log/integration_test.go: `.NewHash()`
$DIR/core/chains/evm/log/integration_test.go: `.newLogListenerWithJob("listener 0")`
$DIR/core/chains/evm/log/integration_test.go: `.newLogListenerWithJob("listener 1")`
$DIR/core/chains/evm/log/integration_test.go: `.newLogListenerWithJob("listener 2")`
$DIR/core/chains/evm/log/integration_test.go: `.newLogListenerWithJob("listener 3")`
$DIR/core/chains/evm/log/integration_test.go: `.newLogListenerWithJob("listener 4")`
$DIR/core/chains/evm/log/integration_test.go: `.registerWithTopicValues(listener0, contract1, 1,
map[common.Hash][][]log.Topic{
topic: {}, // no filters, so all values allowed
},
)`
$DIR/core/chains/evm/log/integration_test.go: `.registerWithTopicValues(listener1, contract1, 1,
map[common.Hash][][]log.Topic{
topic: {{} /**/, {}}, // two empty filters, so all values allowed
},
)`
$DIR/core/chains/evm/log/integration_test.go: `.registerWithTopicValues(listener2, contract1, 1,
map[common.Hash][][]log.Topic{
topic: {
{log.Topic(field1Value1), log.Topic(field1Value2)} /**/, {log.Topic(field2Value1), log.Topic(field2Value2)}, // two values for each field allowed
},
},
)`
$DIR/core/chains/evm/log/integration_test.go: `.Topic(field1Value1)`
$DIR/core/chains/evm/log/integration_test.go: `.Topic(field1Value2)`
$DIR/core/chains/evm/log/integration_test.go: `.Topic(field2Value1)`
$DIR/core/chains/evm/log/integration_test.go: `.Topic(field2Value2)`
$DIR/core/chains/evm/log/integration_test.go: `.registerWithTopicValues(listener3, contract1, 1,
map[common.Hash][][]log.Topic{
topic: {
{log.Topic(field1Value1), log.Topic(field1Value2)} /**/, {}, // two values allowed for field 1, and any values for field 2
},
},
)`
$DIR/core/chains/evm/log/integration_test.go: `.Topic(field1Value1)`
$DIR/core/chains/evm/log/integration_test.go: `.Topic(field1Value2)`
$DIR/core/chains/evm/log/integration_test.go: `.registerWithTopicValues(listener4, contract1, 1,
map[common.Hash][][]log.Topic{
topic: {
{log.Topic(field1Value1)} /**/, {log.Topic(field2Value1)}, // some values allowed
},
},
)`
$DIR/core/chains/evm/log/integration_test.go: `.Topic(field1Value1)`
$DIR/core/chains/evm/log/integration_test.go: `.Topic(field2Value1)`
$DIR/core/chains/evm/log/integration_test.go: `.SimulateIncomingHeads(t, blocks.Slice(0, 6), helper.lb)`
$DIR/core/chains/evm/log/integration_test.go: `.Slice(0, 6)`
$DIR/core/chains/evm/log/integration_test.go: `.TrySend(log)`
$DIR/core/chains/evm/log/integration_test.go: `.received.getUniqueLogs()`
$DIR/core/chains/evm/log/integration_test.go: `.WaitTimeout(t)`
$DIR/core/chains/evm/log/integration_test.go: `.start()`
$DIR/core/chains/evm/log/integration_test.go: `.NewFluxAggregator(testutils.NewAddress(), nil)`
$DIR/core/chains/evm/log/integration_test.go: `.NewAddress()`
$DIR/core/chains/evm/log/integration_test.go: `.NewBlocks(t, 12)`
$DIR/core/chains/evm/log/integration_test.go: `.LogOnBlockNum(1, contract1.Address())`
$DIR/core/chains/evm/log/integration_test.go: `.Address()`
$DIR/core/chains/evm/log/integration_test.go: `.LogOnBlockNum(2, contract1.Address())`
$DIR/core/chains/evm/log/integration_test.go: `.Address()`
$DIR/core/chains/evm/log/integration_test.go: `.LogOnBlockNum(3, contract1.Address())`
$DIR/core/chains/evm/log/integration_test.go: `.Address()`
$DIR/core/chains/evm/log/integration_test.go: `.LogOnBlockNumWithIndex(3, 1, contract1.Address())`
$DIR/core/chains/evm/log/integration_test.go: `.Address()`
$DIR/core/chains/evm/log/integration_test.go: `.newLogListenerWithJob("listener 1")`
$DIR/core/chains/evm/log/integration_test.go: `.register(listener1, contract1, 1)`
$DIR/core/chains/evm/log/integration_test.go: `.TrySend(addr1SentLogs[0])`
$DIR/core/chains/evm/log/integration_test.go: `.TrySend(addr1SentLogs[1])`
$DIR/core/chains/evm/log/integration_test.go: `.TrySend(addr1SentLogs[2])`
$DIR/core/chains/evm/log/integration_test.go: `.SimulateIncomingHeads(t, blocks.Slice(0, 4), helper.lb)`
$DIR/core/chains/evm/log/integration_test.go: `.Slice(0, 4)`
$DIR/core/chains/evm/log/integration_test.go: `.TrySend(addr1SentLogs[3])`
$DIR/core/chains/evm/log/integration_test.go: `.SimulateIncomingHeads(t, blocks.Slice(4, 9), helper.lb)`
$DIR/core/chains/evm/log/integration_test.go: `.Slice(4, 9)`
$DIR/core/chains/evm/log/integration_test.go: `.requireBroadcastCount(4)`
$DIR/core/chains/evm/log/integration_test.go: `.start()`
$DIR/core/chains/evm/log/integration_test.go: `.NewFluxAggregator(testutils.NewAddress(), nil)`
$DIR/core/chains/evm/log/integration_test.go: `.NewAddress()`
$DIR/core/chains/evm/log/integration_test.go: `.NewBlocks(t, 10)`
$DIR/core/chains/evm/log/integration_test.go: `.LogOnBlockNum(1, contract1.Address())`
$DIR/core/chains/evm/log/integration_test.go: `.Address()`
$DIR/core/chains/evm/log/integration_test.go: `.LogOnBlockNum(2, contract1.Address())`
$DIR/core/chains/evm/log/integration_test.go: `.Address()`
$DIR/core/chains/evm/log/integration_test.go: `.LogOnBlockNum(3, contract1.Address())`
$DIR/core/chains/evm/log/integration_test.go: `.Address()`
$DIR/core/chains/evm/log/integration_test.go: `.newLogListenerWithJob("listener 1")`
$DIR/core/chains/evm/log/integration_test.go: `.register(listener1, contract1, 1)`
$DIR/core/chains/evm/log/integration_test.go: `.TrySend(log)`
$DIR/core/chains/evm/log/integration_test.go: `.SimulateIncomingHeads(t, blocks.Slice(0, 10), helper.lb)`
$DIR/core/chains/evm/log/integration_test.go: `.Slice(0, 10)`
$DIR/core/chains/evm/log/integration_test.go: `.requireBroadcastCount(3)`
$DIR/core/chains/evm/log/integration_test.go: `.stop()`
$DIR/core/chains/evm/log/integration_test.go: `.received.getUniqueLogs()`
$DIR/core/chains/evm/log/integration_test.go: `.received.getUniqueLogs()`
$DIR/core/chains/evm/log/integration_test.go: `.received.getLogs()`
$DIR/core/chains/evm/log/integration_test.go: `.start()`
$DIR/core/chains/evm/log/integration_test.go: `.NewFluxAggregator(testutils.NewAddress(), nil)`
$DIR/core/chains/evm/log/integration_test.go: `.NewAddress()`
$DIR/core/chains/evm/log/integration_test.go: `.NewBlocks(t, 12)`
$DIR/core/chains/evm/log/integration_test.go: `.LogOnBlockNum(1, contract1.Address())`
$DIR/core/chains/evm/log/integration_test.go: `.Address()`
$DIR/core/chains/evm/log/integration_test.go: `.LogOnBlockNum(2, contract1.Address())`
$DIR/core/chains/evm/log/integration_test.go: `.Address()`
$DIR/core/chains/evm/log/integration_test.go: `.LogOnBlockNum(3, contract1.Address())`
$DIR/core/chains/evm/log/integration_test.go: `.Address()`
$DIR/core/chains/evm/log/integration_test.go: `.newLogListenerWithJob("listener 1")`
$DIR/core/chains/evm/log/integration_test.go: `.register(listener1, contract1, 1)`
$DIR/core/chains/evm/log/integration_test.go: `.SimulateIncomingHeads(t, blocks.Slice(0, 7), helper.lb)`
$DIR/core/chains/evm/log/integration_test.go: `.Slice(0, 7)`
$DIR/core/chains/evm/log/integration_test.go: `.TrySend(log)`
$DIR/core/chains/evm/log/integration_test.go: `.SimulateIncomingHeads(t, blocks.Slice(7, 9), helper.lb)`
$DIR/core/chains/evm/log/integration_test.go: `.Slice(7, 9)`
$DIR/core/chains/evm/log/integration_test.go: `.requireBroadcastCount(3)`
$DIR/core/chains/evm/log/integration_test.go: `.stop()`
$DIR/core/chains/evm/log/integration_test.go: `.received.getUniqueLogs()`
$DIR/core/chains/evm/log/integration_test.go: `.received.getUniqueLogs()`
$DIR/core/chains/evm/log/integration_test.go: `.received.getLogs()`
$DIR/core/chains/evm/log/integration_test.go: `.SkipShortDB(t)`
$DIR/core/chains/evm/log/integration_test.go: `.NewClient(t)`
$DIR/core/chains/evm/log/integration_test.go: `.On("ConfiguredChainID", mock.Anything)`
$DIR/core/chains/evm/log/integration_test.go: `.Return(&cltest.FixtureChainID)`
$DIR/core/chains/evm/log/integration_test.go: `.On("SubscribeFilterLogs", mock.Anything, mock.Anything, mock.Anything)`
$DIR/core/chains/evm/log/integration_test.go: `.
Return(
func(ctx context.Context, q ethereum.FilterQuery, ch chan<- types.Log) ethereum.Subscription {
defer close(chStarted)
sub := mockEth.NewSub(t)
chchRawLogs <- evmtestutils.NewRawSub(ch, sub.Err())
return sub
},
func(ctx context.Context, q ethereum.FilterQuery, ch chan<- types.Log) error {
return nil
},
)`
$DIR/core/chains/evm/log/integration_test.go: `.NewSub(t)`
$DIR/core/chains/evm/log/integration_test.go: `.NewRawSub(ch, sub.Err())`
$DIR/core/chains/evm/log/integration_test.go: `.Err()`
$DIR/core/chains/evm/log/integration_test.go: `.
Once()`
$DIR/core/chains/evm/log/integration_test.go: `.On("SubscribeFilterLogs", mock.Anything, mock.Anything, mock.Anything)`
$DIR/core/chains/evm/log/integration_test.go: `.
Return(
func(ctx context.Context, q ethereum.FilterQuery, ch chan<- types.Log) ethereum.Subscription {
sub := mockEth.NewSub(t)
chchRawLogs <- evmtestutils.NewRawSub(ch, sub.Err())
return sub
},
func(ctx context.Context, q ethereum.FilterQuery, ch chan<- types.Log) error {
return nil
},
)`
$DIR/core/chains/evm/log/integration_test.go: `.NewSub(t)`
$DIR/core/chains/evm/log/integration_test.go: `.NewRawSub(ch, sub.Err())`
$DIR/core/chains/evm/log/integration_test.go: `.Err()`
$DIR/core/chains/evm/log/integration_test.go: `.
Times(3)`
$DIR/core/chains/evm/log/integration_test.go: `.On("HeadByNumber", mock.Anything, (*big.Int)(nil))`
$DIR/core/chains/evm/log/integration_test.go: `.
Return(&evmtypes.Head{Number: blockHeight}, nil)`
$DIR/core/chains/evm/log/integration_test.go: `.On("FilterLogs", mock.Anything, mock.Anything)`
$DIR/core/chains/evm/log/integration_test.go: `.
Run(func(args mock.Arguments) {
query := args.Get(1).(ethereum.FilterQuery)
require.Equal(t, big.NewInt(expectedBlock), query.FromBlock)
require.Contains(t, query.Addresses, contract0.Address())
require.Len(t, query.Addresses, 1)
})`
$DIR/core/chains/evm/log/integration_test.go: `.Get(1)`
$DIR/core/chains/evm/log/integration_test.go: `.
Return(nil, nil)`
$DIR/core/chains/evm/log/integration_test.go: `.
Times(backfillTimes)`
$DIR/core/chains/evm/log/integration_test.go: `.On("FilterLogs", mock.Anything, mock.Anything)`
$DIR/core/chains/evm/log/integration_test.go: `.
Run(func(args mock.Arguments) {
query := args.Get(1).(ethereum.FilterQuery)
require.Equal(t, big.NewInt(expectedBlock), query.FromBlock)
require.Contains(t, query.Addresses, contract0.Address())
require.Contains(t, query.Addresses, contract1.Address())
require.Len(t, query.Addresses, 2)
})`
$DIR/core/chains/evm/log/integration_test.go: `.Get(1)`
$DIR/core/chains/evm/log/integration_test.go: `.
Return(nil, nil)`
$DIR/core/chains/evm/log/integration_test.go: `.
Once()`
$DIR/core/chains/evm/log/integration_test.go: `.On("FilterLogs", mock.Anything, mock.Anything)`
$DIR/core/chains/evm/log/integration_test.go: `.
Run(func(args mock.Arguments) {
query := args.Get(1).(ethereum.FilterQuery)
require.Equal(t, big.NewInt(expectedBlock), query.FromBlock)
require.Contains(t, query.Addresses, contract0.Address())
require.Contains(t, query.Addresses, contract1.Address())
require.Contains(t, query.Addresses, contract2.Address())
require.Len(t, query.Addresses, 3)
})`
$DIR/core/chains/evm/log/integration_test.go: `.Get(1)`
$DIR/core/chains/evm/log/integration_test.go: `.
Return(nil, nil)`
$DIR/core/chains/evm/log/integration_test.go: `.
Once()`
$DIR/core/chains/evm/log/integration_test.go: `.lb.AddDependents(1)`
$DIR/core/chains/evm/log/integration_test.go: `.start()`
$DIR/core/chains/evm/log/integration_test.go: `.stop()`
$DIR/core/chains/evm/log/integration_test.go: `.newLogListenerWithJob("0")`
$DIR/core/chains/evm/log/integration_test.go: `.newLogListenerWithJob("1")`
$DIR/core/chains/evm/log/integration_test.go: `.newLogListenerWithJob("2")`
$DIR/core/chains/evm/log/integration_test.go: `.register(listener0, contract0, 1)`
$DIR/core/chains/evm/log/integration_test.go: `.unsubscribeAll()`
$DIR/core/chains/evm/log/integration_test.go: `.lb.DependentReady()`
$DIR/core/chains/evm/log/integration_test.go: `.After(testutils.WaitTimeout(t))`
$DIR/core/chains/evm/log/integration_test.go: `.WaitTimeout(t)`
$DIR/core/chains/evm/log/integration_test.go: `.After(testutils.WaitTimeout(t))`
$DIR/core/chains/evm/log/integration_test.go: `.WaitTimeout(t)`
$DIR/core/chains/evm/log/integration_test.go: `.register(listener1, contract1, 1)`
$DIR/core/chains/evm/log/integration_test.go: `.After(testutils.WaitTimeout(t))`
$DIR/core/chains/evm/log/integration_test.go: `.WaitTimeout(t)`
$DIR/core/chains/evm/log/integration_test.go: `.register(listener2, contract2, 1)`
$DIR/core/chains/evm/log/integration_test.go: `.After(testutils.WaitTimeout(t))`
$DIR/core/chains/evm/log/integration_test.go: `.WaitTimeout(t)`
$DIR/core/chains/evm/log/integration_test.go: `.lb.ReplayFromBlock(125, false)`
$DIR/core/chains/evm/log/integration_test.go: `.After(testutils.WaitTimeout(t))`
$DIR/core/chains/evm/log/integration_test.go: `.WaitTimeout(t)`
$DIR/core/chains/evm/log/integration_test.go: `.WaitTimeout(t)`
$DIR/core/chains/evm/log/integration_test.go: `.HexToAddress("0xaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa")`
$DIR/core/chains/evm/log/integration_test.go: `.HexToAddress("0xbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb")`
$DIR/core/chains/evm/log/integration_test.go: `.NewBlocks(t, 20)`
$DIR/core/chains/evm/log/integration_test.go: `.LogOnBlockNumWithIndex(uint64(n), 0, addrA)`
$DIR/core/chains/evm/log/integration_test.go: `.LogOnBlockNumWithIndex(uint64(n), 1, addrB)`
$DIR/core/chains/evm/log/integration_test.go: `.Run(test.name, func(t *testing.T) {
const backfillDepth = 5
helper := newBroadcasterHelper(t, int64(test.blockHeight1), 2, nil, func(c *chainlink.Config, s *chainlink.Secrets) {
// something other than default
c.EVM[0].BlockBackfillDepth = ptr[uint32](backfillDepth)
})
helper.start()
defer helper.stop()
logListenerA := helper.newLogListenerWithJob("logListenerA")
logListenerB := helper.newLogListenerWithJob("logListenerB")
contractA, err := flux_aggregator_wrapper.NewFluxAggregator(addrA, nil)
require.NoError(t, err)
contractB, err := flux_aggregator_wrapper.NewFluxAggregator(addrB, nil)
require.NoError(t, err)
// Register listener A
helper.register(logListenerA, contractA, 1)
// Send initial logs
chRawLogs1 := <-helper.chchRawLogs
headsDone := cltest.SimulateIncomingHeads(t, blocks.Slice(test.blockHeight1, test.blockHeight2+2),
helper.lb, cltest.HeadTrackableFunc(func(_ context.Context, head *evmtypes.Head) {
n := uint(head.Number)
if l, ok := logsA[n]; ok && slices.Contains(test.batch1, n) {
chRawLogs1.TrySend(l)
}
}))
helper.requireBroadcastCount(len(test.batch1))
expectedA := newReceived(pickLogs(logsA, test.batch1))
logListenerA.requireAllReceived(t, expectedA)
<-headsDone
helper.mockEth.EthClient.On("HeadByNumber", mock.Anything, (*big.Int)(nil)).Return(&evmtypes.Head{Number: int64(test.blockHeight2)}, nil).Once()
combinedLogs := append(pickLogs(logsA, test.backfillableLogs), pickLogs(logsB, test.backfillableLogs)...)
call := helper.mockEth.EthClient.On("FilterLogs", mock.Anything, mock.Anything).Return(combinedLogs, nil).Once()
call.Run(func(args mock.Arguments) {
// Validate that the ethereum.FilterQuery is specified correctly for the backfill that we expect
fromBlock := args.Get(1).(ethereum.FilterQuery).FromBlock
expected := big.NewInt(0)
blockNumber := helper.lb.BackfillBlockNumber()
if blockNumber.Valid && blockNumber.Int64 > int64(test.blockHeight2-backfillDepth) {
expected = big.NewInt(blockNumber.Int64)
} else if test.blockHeight2 > backfillDepth {
expected = big.NewInt(int64(test.blockHeight2) - backfillDepth)
}
require.Equal(t, expected, fromBlock)
})
// Register listener B (triggers re-subscription)
helper.register(logListenerB, contractB, 1)
// Send second batch of new logs
chRawLogs2 := <-helper.chchRawLogs
headsDone = cltest.SimulateIncomingHeads(t, blocks.Slice(test.blockHeight2, -1),
helper.lb, cltest.HeadTrackableFunc(func(_ context.Context, head *evmtypes.Head) {
n := uint(head.Number)
if l, ok := logsA[n]; ok && slices.Contains(test.batch2, n) {
chRawLogs2.TrySend(l)
}
if l, ok := logsB[n]; ok && slices.Contains(test.batch2, n) {
chRawLogs2.TrySend(l)
}
}))
defer func() { <-headsDone }()
expectedA = newReceived(pickLogs(logsA, test.expectedFilteredA))
expectedB := newReceived(pickLogs(logsB, test.expectedFilteredB))
logListenerA.requireAllReceived(t, expectedA)
logListenerB.requireAllReceived(t, expectedB)
helper.requireBroadcastCount(len(test.expectedFilteredA) + len(test.expectedFilteredB))
})`
$DIR/core/chains/evm/log/integration_test.go: `.start()`
$DIR/core/chains/evm/log/integration_test.go: `.stop()`
$DIR/core/chains/evm/log/integration_test.go: `.newLogListenerWithJob("logListenerA")`
$DIR/core/chains/evm/log/integration_test.go: `.newLogListenerWithJob("logListenerB")`
$DIR/core/chains/evm/log/integration_test.go: `.NewFluxAggregator(addrA, nil)`
$DIR/core/chains/evm/log/integration_test.go: `.NewFluxAggregator(addrB, nil)`
$DIR/core/chains/evm/log/integration_test.go: `.register(logListenerA, contractA, 1)`
$DIR/core/chains/evm/log/integration_test.go: `.SimulateIncomingHeads(t, blocks.Slice(test.blockHeight1, test.blockHeight2+2),
helper.lb, cltest.HeadTrackableFunc(func(_ context.Context, head *evmtypes.Head) {
n := uint(head.Number)
if l, ok := logsA[n]; ok && slices.Contains(test.batch1, n) {
chRawLogs1.TrySend(l)
}
}))`
$DIR/core/chains/evm/log/integration_test.go: `.Slice(test.blockHeight1, test.blockHeight2+2)`
$DIR/core/chains/evm/log/integration_test.go: `.HeadTrackableFunc(func(_ context.Context, head *evmtypes.Head) {
n := uint(head.Number)
if l, ok := logsA[n]; ok && slices.Contains(test.batch1, n) {
chRawLogs1.TrySend(l)
}
})`
$DIR/core/chains/evm/log/integration_test.go: `.Contains(test.batch1, n)`
$DIR/core/chains/evm/log/integration_test.go: `.TrySend(l)`
$DIR/core/chains/evm/log/integration_test.go: `.requireBroadcastCount(len(test.batch1))`
$DIR/core/chains/evm/log/integration_test.go: `.requireAllReceived(t, expectedA)`
$DIR/core/chains/evm/log/integration_test.go: `.mockEth.EthClient.On("HeadByNumber", mock.Anything, (*big.Int)(nil))`
$DIR/core/chains/evm/log/integration_test.go: `.Return(&evmtypes.Head{Number: int64(test.blockHeight2)}, nil)`
$DIR/core/chains/evm/log/integration_test.go: `.Once()`
$DIR/core/chains/evm/log/integration_test.go: `.mockEth.EthClient.On("FilterLogs", mock.Anything, mock.Anything)`
$DIR/core/chains/evm/log/integration_test.go: `.Return(combinedLogs, nil)`
$DIR/core/chains/evm/log/integration_test.go: `.Once()`
$DIR/core/chains/evm/log/integration_test.go: `.Run(func(args mock.Arguments) {
// Validate that the ethereum.FilterQuery is specified correctly for the backfill that we expect
fromBlock := args.Get(1).(ethereum.FilterQuery).FromBlock
expected := big.NewInt(0)
blockNumber := helper.lb.BackfillBlockNumber()
if blockNumber.Valid && blockNumber.Int64 > int64(test.blockHeight2-backfillDepth) {
expected = big.NewInt(blockNumber.Int64)
} else if test.blockHeight2 > backfillDepth {
expected = big.NewInt(int64(test.blockHeight2) - backfillDepth)
}
require.Equal(t, expected, fromBlock)
})`
$DIR/core/chains/evm/log/integration_test.go: `.Get(1)`
$DIR/core/chains/evm/log/integration_test.go: `.NewInt(0)`
$DIR/core/chains/evm/log/integration_test.go: `.lb.BackfillBlockNumber()`
$DIR/core/chains/evm/log/integration_test.go: `.NewInt(blockNumber.Int64)`
$DIR/core/chains/evm/log/integration_test.go: `.NewInt(int64(test.blockHeight2) - backfillDepth)`
$DIR/core/chains/evm/log/integration_test.go: `.register(logListenerB, contractB, 1)`
$DIR/core/chains/evm/log/integration_test.go: `.SimulateIncomingHeads(t, blocks.Slice(test.blockHeight2, -1),
helper.lb, cltest.HeadTrackableFunc(func(_ context.Context, head *evmtypes.Head) {
n := uint(head.Number)
if l, ok := logsA[n]; ok && slices.Contains(test.batch2, n) {
chRawLogs2.TrySend(l)
}
if l, ok := logsB[n]; ok && slices.Contains(test.batch2, n) {
chRawLogs2.TrySend(l)
}
}))`
$DIR/core/chains/evm/log/integration_test.go: `.Slice(test.blockHeight2, -1)`
$DIR/core/chains/evm/log/integration_test.go: `.HeadTrackableFunc(func(_ context.Context, head *evmtypes.Head) {
n := uint(head.Number)
if l, ok := logsA[n]; ok && slices.Contains(test.batch2, n) {
chRawLogs2.TrySend(l)
}
if l, ok := logsB[n]; ok && slices.Contains(test.batch2, n) {
chRawLogs2.TrySend(l)
}
})`
$DIR/core/chains/evm/log/integration_test.go: `.Contains(test.batch2, n)`
$DIR/core/chains/evm/log/integration_test.go: `.TrySend(l)`
$DIR/core/chains/evm/log/integration_test.go: `.Contains(test.batch2, n)`
$DIR/core/chains/evm/log/integration_test.go: `.TrySend(l)`
$DIR/core/chains/evm/log/integration_test.go: `.requireAllReceived(t, expectedA)`
$DIR/core/chains/evm/log/integration_test.go: `.requireAllReceived(t, expectedB)`
$DIR/core/chains/evm/log/integration_test.go: `.requireBroadcastCount(len(test.expectedFilteredA) + len(test.expectedFilteredB))`
$DIR/core/chains/evm/log/integration_test.go: `.NewEthClientMockWithDefaultChain(t)`
$DIR/core/chains/evm/log/integration_test.go: `.RunHealthy(t, mailboxtest.NewMonitor(t))`
$DIR/core/chains/evm/log/integration_test.go: `.NewMonitor(t)`
$DIR/core/chains/evm/log/integration_test.go: `.NewBroadcaster(nil, ethClient, nil, logger.Test(t), nil, mailMon)`
$DIR/core/chains/evm/log/integration_test.go: `.Test(t)`
$DIR/core/chains/evm/log/integration_test.go: `.ExportedAppendLogChannel(ch1, ch2)`
$DIR/core/chains/evm/log/integration_test.go: `.ExportedAppendLogChannel(chCombined, ch3)`
$DIR/core/chains/evm/log/integration_test.go: `.start()`
$DIR/core/chains/evm/log/integration_test.go: `.stop()`
$DIR/core/chains/evm/log/integration_test.go: `.NewBlocks(t, 20)`
$DIR/core/chains/evm/log/integration_test.go: `.newLogListenerWithJob("logListener")`
$DIR/core/chains/evm/log/integration_test.go: `.LogOnBlockNum(0, contract.Address())`
$DIR/core/chains/evm/log/integration_test.go: `.Address()`
$DIR/core/chains/evm/log/integration_test.go: `.LogOnBlockNum(1, contract.Address())`
$DIR/core/chains/evm/log/integration_test.go: `.Address()`
$DIR/core/chains/evm/log/integration_test.go: `.On("ParseLog", log1)`
$DIR/core/chains/evm/log/integration_test.go: `.Return(flux_aggregator_wrapper.FluxAggregatorNewRound{}, nil)`
$DIR/core/chains/evm/log/integration_test.go: `.On("ParseLog", log2)`
$DIR/core/chains/evm/log/integration_test.go: `.Return(flux_aggregator_wrapper.FluxAggregatorAnswerUpdated{}, nil)`
$DIR/core/chains/evm/log/integration_test.go: `.register(logListener, contract, uint32(5))`
$DIR/core/chains/evm/log/integration_test.go: `.SimulateIncomingHeads(t, blocks.Slice(3, 20), helper.lb)`
$DIR/core/chains/evm/log/integration_test.go: `.Slice(3, 20)`
$DIR/core/chains/evm/log/integration_test.go: `.TrySend(log1)`
$DIR/core/chains/evm/log/integration_test.go: `.TrySend(log2)`
$DIR/core/chains/evm/log/integration_test.go: `.NewWithT(t)`
$DIR/core/chains/evm/log/integration_test.go: `.start()`
$DIR/core/chains/evm/log/integration_test.go: `.stop()`
$DIR/core/chains/evm/log/integration_test.go: `.NewBlocks(t, 10)`
$DIR/core/chains/evm/log/integration_test.go: `.ForkAt(t, 1, 5)`
$DIR/core/chains/evm/log/integration_test.go: `.NewAddress()`
$DIR/core/chains/evm/log/integration_test.go: `.LogOnBlockNum(0, addr)`
$DIR/core/chains/evm/log/integration_test.go: `.LogOnBlockNum(1, addr)`
$DIR/core/chains/evm/log/integration_test.go: `.LogOnBlockNum(2, addr)`
$DIR/core/chains/evm/log/integration_test.go: `.LogOnBlockNumRemoved(1, addr)`
$DIR/core/chains/evm/log/integration_test.go: `.LogOnBlockNumRemoved(2, addr)`
$DIR/core/chains/evm/log/integration_test.go: `.LogOnBlockNum(1, addr)`
$DIR/core/chains/evm/log/integration_test.go: `.LogOnBlockNum(2, addr)`
$DIR/core/chains/evm/log/integration_test.go: `.LogOnBlockNumWithIndex(3, 0, addr)`
$DIR/core/chains/evm/log/integration_test.go: `.LogOnBlockNumWithIndex(3, 1, addr)`
$DIR/core/chains/evm/log/integration_test.go: `.LogOnBlockNumRemoved(1, addr)`
$DIR/core/chains/evm/log/integration_test.go: `.LogOnBlockNumRemoved(2, addr)`
$DIR/core/chains/evm/log/integration_test.go: `.LogOnBlockNumWithIndexRemoved(3, 0, addr)`
$DIR/core/chains/evm/log/integration_test.go: `.LogOnBlockNumWithIndexRemoved(3, 1, addr)`
$DIR/core/chains/evm/log/integration_test.go: `.Head(0)`
$DIR/core/chains/evm/log/integration_test.go: `.Head(2)`
$DIR/core/chains/evm/log/integration_test.go: `.Head(3)`
$DIR/core/chains/evm/log/integration_test.go: `.Head(1)`
$DIR/core/chains/evm/log/integration_test.go: `.Head(2)`
$DIR/core/chains/evm/log/integration_test.go: `.Head(3)`
$DIR/core/chains/evm/log/integration_test.go: `.Head(4)`
$DIR/core/chains/evm/log/integration_test.go: `.Head(4)`
$DIR/core/chains/evm/log/integration_test.go: `.Head(5)`
$DIR/core/chains/evm/log/integration_test.go: `.Head(6)`
$DIR/core/chains/evm/log/integration_test.go: `.Head(7)`
$DIR/core/chains/evm/log/integration_test.go: `.NewFluxAggregator(addr, nil)`
$DIR/core/chains/evm/log/integration_test.go: `.newLogListenerWithJob("listenerA")`
$DIR/core/chains/evm/log/integration_test.go: `.newLogListenerWithJob("listenerB")`
$DIR/core/chains/evm/log/integration_test.go: `.register(listenerA, contract, 1)`
$DIR/core/chains/evm/log/integration_test.go: `.register(listenerB, contract, 3)`
$DIR/core/chains/evm/log/integration_test.go: `.Context(t)`
$DIR/core/chains/evm/log/integration_test.go: `.lb.OnNewLongestChain(ctx, x)`
$DIR/core/chains/evm/log/integration_test.go: `.TrySend(x)`
$DIR/core/chains/evm/log/integration_test.go: `.Sleep(250 * time.Millisecond)`
$DIR/core/chains/evm/log/integration_test.go: `.Eventually(func() []uint64 { return listenerA.getUniqueLogsBlockNumbers() }, testutils.WaitTimeout(t), time.Second)`
$DIR/core/chains/evm/log/integration_test.go: `.getUniqueLogsBlockNumbers()`
$DIR/core/chains/evm/log/integration_test.go: `.WaitTimeout(t)`
$DIR/core/chains/evm/log/integration_test.go: `.
Should(gomega.Equal([]uint64{0, 1, 2, 1, 2, 3, 3}))`
$DIR/core/chains/evm/log/integration_test.go: `.Equal([]uint64{0, 1, 2, 1, 2, 3, 3})`
$DIR/core/chains/evm/log/integration_test.go: `.Eventually(func() []uint64 { return listenerB.getUniqueLogsBlockNumbers() }, testutils.WaitTimeout(t), time.Second)`
$DIR/core/chains/evm/log/integration_test.go: `.getUniqueLogsBlockNumbers()`
$DIR/core/chains/evm/log/integration_test.go: `.WaitTimeout(t)`
$DIR/core/chains/evm/log/integration_test.go: `.
Should(gomega.Equal([]uint64{0, 1, 1, 2, 2}))`
$DIR/core/chains/evm/log/integration_test.go: `.Equal([]uint64{0, 1, 1, 2, 2})`
$DIR/core/chains/evm/log/integration_test.go: `.unsubscribeAll()`
$DIR/core/chains/evm/log/integration_test.go: `.getUniqueLogs()`
$DIR/core/chains/evm/log/integration_test.go: `.NewWithT(t)`
$DIR/core/chains/evm/log/integration_test.go: `.mockEth.EthClient.On("HeadByNumber", mock.Anything, (*big.Int)(nil))`
$DIR/core/chains/evm/log/integration_test.go: `.Return(&evmtypes.Head{Number: blockHeight}, nil)`
$DIR/core/chains/evm/log/integration_test.go: `.Times(1)`
$DIR/core/chains/evm/log/integration_test.go: `.mockEth.EthClient.On("FilterLogs", mock.Anything, mock.Anything)`
$DIR/core/chains/evm/log/integration_test.go: `.Return(nil, nil)`
$DIR/core/chains/evm/log/integration_test.go: `.Times(1)`
$DIR/core/chains/evm/log/integration_test.go: `.start()`
$DIR/core/chains/evm/log/integration_test.go: `.stop()`
$DIR/core/chains/evm/log/integration_test.go: `.NewAddress()`
$DIR/core/chains/evm/log/integration_test.go: `.NewFluxAggregator(addr1, nil)`
$DIR/core/chains/evm/log/integration_test.go: `.newLogListenerWithJob("1")`
$DIR/core/chains/evm/log/integration_test.go: `.newLogListenerWithJob("2")`
$DIR/core/chains/evm/log/integration_test.go: `.registerWithTopics(listener1, contract, topics1, 1)`
$DIR/core/chains/evm/log/integration_test.go: `.Consistently(func() int32 { return helper.mockEth.SubscribeCallCount() }, 1*time.Second, cltest.DBPollingInterval)`
$DIR/core/chains/evm/log/integration_test.go: `.mockEth.SubscribeCallCount()`
$DIR/core/chains/evm/log/integration_test.go: `.Should(gomega.Equal(int32(1)))`
$DIR/core/chains/evm/log/integration_test.go: `.Equal(int32(1))`
$DIR/core/chains/evm/log/integration_test.go: `.registerWithTopics(listener2, contract, topics2, 1)`
$DIR/core/chains/evm/log/integration_test.go: `.Consistently(func() int32 { return helper.mockEth.SubscribeCallCount() }, 1*time.Second, cltest.DBPollingInterval)`
$DIR/core/chains/evm/log/integration_test.go: `.mockEth.SubscribeCallCount()`
$DIR/core/chains/evm/log/integration_test.go: `.Should(gomega.Equal(int32(2)))`
$DIR/core/chains/evm/log/integration_test.go: `.Equal(int32(2))`
$DIR/core/chains/evm/log/integration_test.go: `.SkipShortDB(t)`
$DIR/core/chains/evm/log/integration_test.go: `.NewWithT(t)`
$DIR/core/chains/evm/log/integration_test.go: `.NewClient(t)`
$DIR/core/chains/evm/log/integration_test.go: `.On("ConfiguredChainID")`
$DIR/core/chains/evm/log/integration_test.go: `.Return(big.NewInt(0))`
$DIR/core/chains/evm/log/integration_test.go: `.NewInt(0)`
$DIR/core/chains/evm/log/integration_test.go: `.Maybe()`
$DIR/core/chains/evm/log/integration_test.go: `.On("SubscribeFilterLogs", mock.Anything, mock.Anything, mock.Anything)`
$DIR/core/chains/evm/log/integration_test.go: `.
Return(
func(ctx context.Context, q ethereum.FilterQuery, ch chan<- types.Log) ethereum.Subscription {
sub := mockEth.NewSub(t)
logsChCh <- evmtestutils.NewRawSub(ch, sub.Err())
return sub
},
func(ctx context.Context, q ethereum.FilterQuery, ch chan<- types.Log) error {
return nil
},
)`
$DIR/core/chains/evm/log/integration_test.go: `.NewSub(t)`
$DIR/core/chains/evm/log/integration_test.go: `.NewRawSub(ch, sub.Err())`
$DIR/core/chains/evm/log/integration_test.go: `.Err()`
$DIR/core/chains/evm/log/integration_test.go: `.
Once()`
$DIR/core/chains/evm/log/integration_test.go: `.On("HeadByNumber", mock.Anything, (*big.Int)(nil))`
$DIR/core/chains/evm/log/integration_test.go: `.
Return(&evmtypes.Head{Number: 1}, nil)`
$DIR/core/chains/evm/log/integration_test.go: `.On("FilterLogs", mock.Anything, mock.Anything)`
$DIR/core/chains/evm/log/integration_test.go: `.
Return(nil, nil)`
$DIR/core/chains/evm/log/integration_test.go: `.start()`
$DIR/core/chains/evm/log/integration_test.go: `.stop()`
$DIR/core/chains/evm/log/integration_test.go: `.HexToAddress("0xf0d54349aDdcf704F77AE15b96510dEA15cb7952")`
$DIR/core/chains/evm/log/integration_test.go: `.NewFluxAggregator(addr, nil)`
$DIR/core/chains/evm/log/integration_test.go: `.NewHash()`
$DIR/core/chains/evm/log/integration_test.go: `.Topic()`
$DIR/core/chains/evm/log/integration_test.go: `.NewHash()`
$DIR/core/chains/evm/log/integration_test.go: `.NewHash()`
$DIR/core/chains/evm/log/integration_test.go: `.Topic()`
$DIR/core/chains/evm/log/integration_test.go: `.NewHash()`
$DIR/core/chains/evm/log/integration_test.go: `.NewHash()`
$DIR/core/chains/evm/log/integration_test.go: `.Topic()`
$DIR/core/chains/evm/log/integration_test.go: `.NewHash()`
$DIR/core/chains/evm/log/integration_test.go: `.NewHash()`
$DIR/core/chains/evm/log/integration_test.go: `.newLogListenerWithJob("1")`
$DIR/core/chains/evm/log/integration_test.go: `.register(listener1, contract1, 0)`
$DIR/core/chains/evm/log/integration_test.go: `.newLogListenerWithJob("2")`
$DIR/core/chains/evm/log/integration_test.go: `.register(listener2, contract1, 0)`
$DIR/core/chains/evm/log/integration_test.go: `.TrySend(log)`
$DIR/core/chains/evm/log/integration_test.go: `.Eventually(func() bool {
helper.lb.Pause()
defer helper.lb.Resume()
return helper.lb.LogsFromBlock(bh) == len(addr1SentLogs)
}, 2*time.Second, 100*time.Millisecond)`
$DIR/core/chains/evm/log/integration_test.go: `.lb.Pause()`
$DIR/core/chains/evm/log/integration_test.go: `.lb.Resume()`
$DIR/core/chains/evm/log/integration_test.go: `.lb.LogsFromBlock(bh)`
$DIR/core/chains/evm/log/integration_test.go: `.Should(gomega.BeTrue())`
$DIR/core/chains/evm/log/integration_test.go: `.BeTrue()`
$DIR/core/chains/evm/log/integration_test.go: `.lb.OnNewLongestChain(testutils.Context(t), &evmtypes.Head{Number: 2})`
$DIR/core/chains/evm/log/integration_test.go: `.Context(t)`
$DIR/core/chains/evm/log/integration_test.go: `.Eventually(func() bool {
return len(listener1.getUniqueLogs()) == len(addr1SentLogs) && len(listener2.getUniqueLogs()) == len(addr1SentLogs)
}, 2*time.Second, cltest.DBPollingInterval)`
$DIR/core/chains/evm/log/integration_test.go: `.getUniqueLogs()`
$DIR/core/chains/evm/log/integration_test.go: `.getUniqueLogs()`
$DIR/core/chains/evm/log/integration_test.go: `.Should(gomega.BeTrue())`
$DIR/core/chains/evm/log/integration_test.go: `.BeTrue()`
$DIR/core/chains/evm/log/integration_test.go: `.Consistently(func() bool {
return len(listener1.getUniqueLogs()) == len(addr1SentLogs) && len(listener2.getUniqueLogs()) == len(addr1SentLogs)
}, 1*time.Second, cltest.DBPollingInterval)`
$DIR/core/chains/evm/log/integration_test.go: `.getUniqueLogs()`
$DIR/core/chains/evm/log/integration_test.go: `.getUniqueLogs()`
$DIR/core/chains/evm/log/integration_test.go: `.BeTrue()`
$DIR/core/chains/evm/log/orm_test.go: `t.Run("WasBroadcastConsumed_DNE", func(t *testing.T) {
_, err := orm.WasBroadcastConsumed(testutils.Context(t), rawLog.BlockHash, rawLog.Index, listener.JobID())
require.NoError(t, err)
})`
$DIR/core/chains/evm/log/orm_test.go: `t.Run("WasBroadcastConsumed_false", func(t *testing.T) {
was, err := orm.WasBroadcastConsumed(testutils.Context(t), rawLog.BlockHash, rawLog.Index, listener.JobID())
require.NoError(t, err)
require.False(t, was)
})`
$DIR/core/chains/evm/log/orm_test.go: `err = orm.SetPendingMinBlock(ctx, &num10)`
$DIR/core/chains/evm/log/orm_test.go: `num, err = orm.GetPendingMinBlock(ctx)`
$DIR/core/chains/evm/log/orm_test.go: `err = orm.SetPendingMinBlock(ctx, nil)`
$DIR/core/chains/evm/log/orm_test.go: `num, err = orm.GetPendingMinBlock(ctx)`
$DIR/core/chains/evm/log/orm_test.go: `logBefore.BlockNumber = 34`
$DIR/core/chains/evm/log/orm_test.go: `logAt.BlockNumber = 38`
$DIR/core/chains/evm/log/orm_test.go: `logAfter.BlockNumber = 40`
$DIR/core/chains/evm/log/orm_test.go: `consumed, err = orm.WasBroadcastConsumed(ctx, logAt.BlockHash, logAt.Index, job1.ID)`
$DIR/core/chains/evm/log/orm_test.go: `consumed, err = orm.WasBroadcastConsumed(ctx, logAfter.BlockHash, logAfter.Index, job2.ID)`
$DIR/core/chains/evm/log/orm_test.go: `t.Run(tt.name, func(t *testing.T) {
db := pgtest.NewSqlxDB(t)
ctx := testutils.Context(t)
orm := log.NewORM(db, cltest.FixtureChainID)
jobID := cltest.MustInsertV2JobSpec(t, db, common.BigToAddress(big.NewInt(rand.Int63()))).ID
for _, b := range tt.broadcasts {
if b.Consumed {
err := orm.MarkBroadcastConsumed(ctx, b.BlockHash, b.BlockNumber.Uint64(), b.LogIndex, jobID)
require.NoError(t, err)
} else {
err := orm.CreateBroadcast(ctx, b.BlockHash, b.BlockNumber.Uint64(), b.LogIndex, jobID)
require.NoError(t, err)
}
}
if tt.pendingBlockNum != nil {
require.NoError(t, orm.SetPendingMinBlock(ctx, tt.pendingBlockNum))
}
pendingBlockNum, err := orm.Reinitialize(ctx)
require.NoError(t, err)
assert.Equal(t, tt.expPendingBlockNum, pendingBlockNum)
pendingBlockNum, err = orm.GetPendingMinBlock(ctx)
if assert.NoError(t, err) {
assert.Equal(t, tt.expPendingBlockNum, pendingBlockNum)
}
bs, err := orm.FindBroadcasts(ctx, 0, 20)
if assert.NoError(t, err) {
for _, b := range bs {
assert.True(t, b.Consumed)
}
}
})`
$DIR/core/chains/evm/log/orm_test.go: `pendingBlockNum, err = orm.GetPendingMinBlock(ctx)`
$DIR/core/chains/evm/log/orm_test.go: `.NewSqlxDB(t)`
$DIR/core/chains/evm/log/orm_test.go: `.NewKeyStore(t, db)`
$DIR/core/chains/evm/log/orm_test.go: `.Eth()`
$DIR/core/chains/evm/log/orm_test.go: `.NewORM(db, cltest.FixtureChainID)`
$DIR/core/chains/evm/log/orm_test.go: `.MustInsertRandomKey(t, ethKeyStore)`
$DIR/core/chains/evm/log/orm_test.go: `.MustInsertV2JobSpec(t, db, addr)`
$DIR/core/chains/evm/log/orm_test.go: `.RandomLog(t)`
$DIR/core/chains/evm/log/orm_test.go: `.JobID()`
$DIR/core/chains/evm/log/orm_test.go: `.FixtureChainID.String()`
$DIR/core/chains/evm/log/orm_test.go: `.Exec(selectQuery, queryArgs...)`
$DIR/core/chains/evm/log/orm_test.go: `.RowsAffected()`
$DIR/core/chains/evm/log/orm_test.go: `.Run("WasBroadcastConsumed_DNE", func(t *testing.T) {
_, err := orm.WasBroadcastConsumed(testutils.Context(t), rawLog.BlockHash, rawLog.Index, listener.JobID())
require.NoError(t, err)
})`
$DIR/core/chains/evm/log/orm_test.go: `.WasBroadcastConsumed(testutils.Context(t), rawLog.BlockHash, rawLog.Index, listener.JobID())`
$DIR/core/chains/evm/log/orm_test.go: `.Context(t)`
$DIR/core/chains/evm/log/orm_test.go: `.JobID()`
$DIR/core/chains/evm/log/orm_test.go: `.Run("WasBroadcastConsumed_false", func(t *testing.T) {
was, err := orm.WasBroadcastConsumed(testutils.Context(t), rawLog.BlockHash, rawLog.Index, listener.JobID())
require.NoError(t, err)
require.False(t, was)
})`
$DIR/core/chains/evm/log/orm_test.go: `.WasBroadcastConsumed(testutils.Context(t), rawLog.BlockHash, rawLog.Index, listener.JobID())`
$DIR/core/chains/evm/log/orm_test.go: `.Context(t)`
$DIR/core/chains/evm/log/orm_test.go: `.JobID()`
$DIR/core/chains/evm/log/orm_test.go: `.WasBroadcastConsumed(testutils.Context(t), rawLog.BlockHash, rawLog.Index, listener.JobID())`
$DIR/core/chains/evm/log/orm_test.go: `.Context(t)`
$DIR/core/chains/evm/log/orm_test.go: `.JobID()`
$DIR/core/chains/evm/log/orm_test.go: `.Context(t)`
$DIR/core/chains/evm/log/orm_test.go: `.NewSqlxDB(t)`
$DIR/core/chains/evm/log/orm_test.go: `.NewORM(db, cltest.FixtureChainID)`
$DIR/core/chains/evm/log/orm_test.go: `.GetPendingMinBlock(ctx)`
$DIR/core/chains/evm/log/orm_test.go: `.SetPendingMinBlock(ctx, &num10)`
$DIR/core/chains/evm/log/orm_test.go: `.GetPendingMinBlock(ctx)`
$DIR/core/chains/evm/log/orm_test.go: `.SetPendingMinBlock(ctx, nil)`
$DIR/core/chains/evm/log/orm_test.go: `.GetPendingMinBlock(ctx)`
$DIR/core/chains/evm/log/orm_test.go: `.Context(t)`
$DIR/core/chains/evm/log/orm_test.go: `.NewSqlxDB(t)`
$DIR/core/chains/evm/log/orm_test.go: `.NewKeyStore(t, db)`
$DIR/core/chains/evm/log/orm_test.go: `.Eth()`
$DIR/core/chains/evm/log/orm_test.go: `.NewORM(db, cltest.FixtureChainID)`
$DIR/core/chains/evm/log/orm_test.go: `.MustInsertRandomKey(t, ethKeyStore)`
$DIR/core/chains/evm/log/orm_test.go: `.MustInsertV2JobSpec(t, db, addr1)`
$DIR/core/chains/evm/log/orm_test.go: `.MustInsertRandomKey(t, ethKeyStore)`
$DIR/core/chains/evm/log/orm_test.go: `.MustInsertV2JobSpec(t, db, addr2)`
$DIR/core/chains/evm/log/orm_test.go: `.RandomLog(t)`
$DIR/core/chains/evm/log/orm_test.go: `.RandomLog(t)`
$DIR/core/chains/evm/log/orm_test.go: `.RandomLog(t)`
$DIR/core/chains/evm/log/orm_test.go: `.WasBroadcastConsumed(ctx, logBefore.BlockHash, logBefore.Index, job1.ID)`
$DIR/core/chains/evm/log/orm_test.go: `.WasBroadcastConsumed(ctx, logAt.BlockHash, logAt.Index, job1.ID)`
$DIR/core/chains/evm/log/orm_test.go: `.WasBroadcastConsumed(ctx, logAfter.BlockHash, logAfter.Index, job2.ID)`
$DIR/core/chains/evm/log/orm_test.go: `.BigToHash(big.NewInt(rand.Int63()))`
$DIR/core/chains/evm/log/orm_test.go: `.NewInt(rand.Int63())`
$DIR/core/chains/evm/log/orm_test.go: `.Int63()`
$DIR/core/chains/evm/log/orm_test.go: `.NewInt(blockNum)`
$DIR/core/chains/evm/log/orm_test.go: `.Uint32()`
$DIR/core/chains/evm/log/orm_test.go: `.BigToHash(big.NewInt(rand.Int63()))`
$DIR/core/chains/evm/log/orm_test.go: `.NewInt(rand.Int63())`
$DIR/core/chains/evm/log/orm_test.go: `.Int63()`
$DIR/core/chains/evm/log/orm_test.go: `.NewInt(blockNum)`
$DIR/core/chains/evm/log/orm_test.go: `.Uint32()`
$DIR/core/chains/evm/log/orm_test.go: `.IntFrom(10)`
$DIR/core/chains/evm/log/orm_test.go: `.Ptr()`
$DIR/core/chains/evm/log/orm_test.go: `.IntFrom(10)`
$DIR/core/chains/evm/log/orm_test.go: `.Ptr()`
$DIR/core/chains/evm/log/orm_test.go: `.IntFrom(9)`
$DIR/core/chains/evm/log/orm_test.go: `.Ptr()`
$DIR/core/chains/evm/log/orm_test.go: `.IntFrom(10)`
$DIR/core/chains/evm/log/orm_test.go: `.Ptr()`
$DIR/core/chains/evm/log/orm_test.go: `.IntFrom(9)`
$DIR/core/chains/evm/log/orm_test.go: `.Ptr()`
$DIR/core/chains/evm/log/orm_test.go: `.IntFrom(10)`
$DIR/core/chains/evm/log/orm_test.go: `.Ptr()`
$DIR/core/chains/evm/log/orm_test.go: `.IntFrom(10)`
$DIR/core/chains/evm/log/orm_test.go: `.Ptr()`
$DIR/core/chains/evm/log/orm_test.go: `.Run(tt.name, func(t *testing.T) {
db := pgtest.NewSqlxDB(t)
ctx := testutils.Context(t)
orm := log.NewORM(db, cltest.FixtureChainID)
jobID := cltest.MustInsertV2JobSpec(t, db, common.BigToAddress(big.NewInt(rand.Int63()))).ID
for _, b := range tt.broadcasts {
if b.Consumed {
err := orm.MarkBroadcastConsumed(ctx, b.BlockHash, b.BlockNumber.Uint64(), b.LogIndex, jobID)
require.NoError(t, err)
} else {
err := orm.CreateBroadcast(ctx, b.BlockHash, b.BlockNumber.Uint64(), b.LogIndex, jobID)
require.NoError(t, err)
}
}
if tt.pendingBlockNum != nil {
require.NoError(t, orm.SetPendingMinBlock(ctx, tt.pendingBlockNum))
}
pendingBlockNum, err := orm.Reinitialize(ctx)
require.NoError(t, err)
assert.Equal(t, tt.expPendingBlockNum, pendingBlockNum)
pendingBlockNum, err = orm.GetPendingMinBlock(ctx)
if assert.NoError(t, err) {
assert.Equal(t, tt.expPendingBlockNum, pendingBlockNum)
}
bs, err := orm.FindBroadcasts(ctx, 0, 20)
if assert.NoError(t, err) {
for _, b := range bs {
assert.True(t, b.Consumed)
}
}
})`
$DIR/core/chains/evm/log/orm_test.go: `.NewSqlxDB(t)`
$DIR/core/chains/evm/log/orm_test.go: `.Context(t)`
$DIR/core/chains/evm/log/orm_test.go: `.NewORM(db, cltest.FixtureChainID)`
$DIR/core/chains/evm/log/orm_test.go: `.MustInsertV2JobSpec(t, db, common.BigToAddress(big.NewInt(rand.Int63())))`
$DIR/core/chains/evm/log/orm_test.go: `.BigToAddress(big.NewInt(rand.Int63()))`
$DIR/core/chains/evm/log/orm_test.go: `.NewInt(rand.Int63())`
$DIR/core/chains/evm/log/orm_test.go: `.Int63()`
$DIR/core/chains/evm/log/orm_test.go: `.MarkBroadcastConsumed(ctx, b.BlockHash, b.BlockNumber.Uint64(), b.LogIndex, jobID)`
$DIR/core/chains/evm/log/orm_test.go: `.BlockNumber.Uint64()`
$DIR/core/chains/evm/log/orm_test.go: `.CreateBroadcast(ctx, b.BlockHash, b.BlockNumber.Uint64(), b.LogIndex, jobID)`
$DIR/core/chains/evm/log/orm_test.go: `.BlockNumber.Uint64()`
$DIR/core/chains/evm/log/orm_test.go: `.Reinitialize(ctx)`
$DIR/core/chains/evm/log/orm_test.go: `.GetPendingMinBlock(ctx)`
$DIR/core/chains/evm/log/orm_test.go: `.FindBroadcasts(ctx, 0, 20)`
$DIR/core/chains/evm/log/pool_test.go: `l2.Index = 43`
$DIR/core/chains/evm/log/pool_test.go: `l2 = l1`
$DIR/core/chains/evm/log/pool_test.go: `l2.TxIndex = 13`
$DIR/core/chains/evm/log/pool_test.go: `l3.BlockNumber = 3`
$DIR/core/chains/evm/log/pool_test.go: `l3.BlockHash = common.BigToHash(big.NewInt(3))`
$DIR/core/chains/evm/log/pool_test.go: `l4.BlockNumber = 0`
$DIR/core/chains/evm/log/pool_test.go: `l4.BlockHash = common.BigToHash(big.NewInt(0))`
$DIR/core/chains/evm/log/pool_test.go: `p.addLog(L1)`
$DIR/core/chains/evm/log/pool_test.go: `p.addLog(L1)`
$DIR/core/chains/evm/log/pool_test.go: `p.addLog(L21)`
$DIR/core/chains/evm/log/pool_test.go: `p.addLog(L22)`
$DIR/core/chains/evm/log/pool_test.go: `p.addLog(L3)`
$DIR/core/chains/evm/log/pool_test.go: `p.addLog(L1)`
$DIR/core/chains/evm/log/pool_test.go: `p.addLog(L21)`
$DIR/core/chains/evm/log/pool_test.go: `p.addLog(L3)`
$DIR/core/chains/evm/log/pool_test.go: `t.Run(test.name, func(t *testing.T) {
logsOnBlocks, minBlockNumToSend := p.getLogsToSend(test.latestBlockNumber)
assert.Equal(t, test.expectedMinBlockNumToSend, minBlockNumToSend)
assert.ElementsMatch(t, test.expectedLogs, logsOnBlocks)
})`
$DIR/core/chains/evm/log/pool_test.go: `t.Run(test.name, func(t *testing.T) {
var p iLogPool = newLogPool(logger.Test(t))
p.addLog(L1)
p.addLog(L21)
p.addLog(L3)
oldestKeptBlock := p.deleteOlderLogs(test.keptDepth)
assert.Equal(t, test.expectedOldestBlock, oldestKeptBlock)
keptLogs, _ := p.getLogsToSend(4)
assert.ElementsMatch(t, test.expectedKeptLogs, keptLogs)
})`
$DIR/core/chains/evm/log/pool_test.go: `p.addLog(L1)`
$DIR/core/chains/evm/log/pool_test.go: `p.addLog(L21)`
$DIR/core/chains/evm/log/pool_test.go: `p.addLog(L3)`
$DIR/core/chains/evm/log/pool_test.go: `t.Run(test.name, func(t *testing.T) {
var p iLogPool = newLogPool(logger.Test(t))
p.addLog(L21)
p.addLog(L22)
p.addLog(L23)
p.addLog(L3)
p.removeBlock(test.blockHash, test.blockNumber)
assert.Equal(t, 0, p.testOnly_getNumLogsForBlock(test.blockHash))
p.deleteOlderLogs(int64(test.blockNumber)) // Pruning logs for easier testing next line
logsOnBlock, _ := p.getLogsToSend(int64(test.blockNumber))
assert.ElementsMatch(t, test.expectedRemainingLogs, logsOnBlock)
})`
$DIR/core/chains/evm/log/pool_test.go: `p.addLog(L21)`
$DIR/core/chains/evm/log/pool_test.go: `p.addLog(L22)`
$DIR/core/chains/evm/log/pool_test.go: `p.addLog(L23)`
$DIR/core/chains/evm/log/pool_test.go: `p.addLog(L3)`
$DIR/core/chains/evm/log/pool_test.go: `p.removeBlock(test.blockHash, test.blockNumber)`
$DIR/core/chains/evm/log/pool_test.go: `p.deleteOlderLogs(int64(test.blockNumber))`
$DIR/core/chains/evm/log/pool_test.go: `.Test(t)`
$DIR/core/chains/evm/log/pool_test.go: `.BigToHash(big.NewInt(1))`
$DIR/core/chains/evm/log/pool_test.go: `.NewInt(1)`
$DIR/core/chains/evm/log/pool_test.go: `.BigToHash(big.NewInt(3))`
$DIR/core/chains/evm/log/pool_test.go: `.NewInt(3)`
$DIR/core/chains/evm/log/pool_test.go: `.BigToHash(big.NewInt(0))`
$DIR/core/chains/evm/log/pool_test.go: `.NewInt(0)`
$DIR/core/chains/evm/log/pool_test.go: `.testOnly_getNumLogsForBlock(l4.BlockHash)`
$DIR/core/chains/evm/log/pool_test.go: `.Test(t)`
$DIR/core/chains/evm/log/pool_test.go: `.addLog(L1)`
$DIR/core/chains/evm/log/pool_test.go: `.addLog(L1)`
$DIR/core/chains/evm/log/pool_test.go: `.addLog(L21)`
$DIR/core/chains/evm/log/pool_test.go: `.addLog(L22)`
$DIR/core/chains/evm/log/pool_test.go: `.addLog(L3)`
$DIR/core/chains/evm/log/pool_test.go: `.getAndDeleteAll()`
$DIR/core/chains/evm/log/pool_test.go: `.testOnly_getNumLogsForBlock(L3.BlockHash)`
$DIR/core/chains/evm/log/pool_test.go: `.Test(t)`
$DIR/core/chains/evm/log/pool_test.go: `.getLogsToSend(1)`
$DIR/core/chains/evm/log/pool_test.go: `.Test(t)`
$DIR/core/chains/evm/log/pool_test.go: `.addLog(L1)`
$DIR/core/chains/evm/log/pool_test.go: `.addLog(L21)`
$DIR/core/chains/evm/log/pool_test.go: `.addLog(L3)`
$DIR/core/chains/evm/log/pool_test.go: `.Run(test.name, func(t *testing.T) {
logsOnBlocks, minBlockNumToSend := p.getLogsToSend(test.latestBlockNumber)
assert.Equal(t, test.expectedMinBlockNumToSend, minBlockNumToSend)
assert.ElementsMatch(t, test.expectedLogs, logsOnBlocks)
})`
$DIR/core/chains/evm/log/pool_test.go: `.getLogsToSend(test.latestBlockNumber)`
$DIR/core/chains/evm/log/pool_test.go: `.Test(t)`
$DIR/core/chains/evm/log/pool_test.go: `.deleteOlderLogs(1)`
$DIR/core/chains/evm/log/pool_test.go: `.Run(test.name, func(t *testing.T) {
var p iLogPool = newLogPool(logger.Test(t))
p.addLog(L1)
p.addLog(L21)
p.addLog(L3)
oldestKeptBlock := p.deleteOlderLogs(test.keptDepth)
assert.Equal(t, test.expectedOldestBlock, oldestKeptBlock)
keptLogs, _ := p.getLogsToSend(4)
assert.ElementsMatch(t, test.expectedKeptLogs, keptLogs)
})`
$DIR/core/chains/evm/log/pool_test.go: `.Test(t)`
$DIR/core/chains/evm/log/pool_test.go: `.addLog(L1)`
$DIR/core/chains/evm/log/pool_test.go: `.addLog(L21)`
$DIR/core/chains/evm/log/pool_test.go: `.addLog(L3)`
$DIR/core/chains/evm/log/pool_test.go: `.deleteOlderLogs(test.keptDepth)`
$DIR/core/chains/evm/log/pool_test.go: `.getLogsToSend(4)`
$DIR/core/chains/evm/log/pool_test.go: `.Test(t)`
$DIR/core/chains/evm/log/pool_test.go: `.Run(test.name, func(t *testing.T) {
var p iLogPool = newLogPool(logger.Test(t))
p.addLog(L21)
p.addLog(L22)
p.addLog(L23)
p.addLog(L3)
p.removeBlock(test.blockHash, test.blockNumber)
assert.Equal(t, 0, p.testOnly_getNumLogsForBlock(test.blockHash))
p.deleteOlderLogs(int64(test.blockNumber)) // Pruning logs for easier testing next line
logsOnBlock, _ := p.getLogsToSend(int64(test.blockNumber))
assert.ElementsMatch(t, test.expectedRemainingLogs, logsOnBlock)
})`
$DIR/core/chains/evm/log/pool_test.go: `.Test(t)`
$DIR/core/chains/evm/log/pool_test.go: `.addLog(L21)`
$DIR/core/chains/evm/log/pool_test.go: `.addLog(L22)`
$DIR/core/chains/evm/log/pool_test.go: `.addLog(L23)`
$DIR/core/chains/evm/log/pool_test.go: `.addLog(L3)`
$DIR/core/chains/evm/log/pool_test.go: `.removeBlock(test.blockHash, test.blockNumber)`
$DIR/core/chains/evm/log/pool_test.go: `.deleteOlderLogs(int64(test.blockNumber))`
$DIR/core/chains/evm/log/pool_test.go: `.getLogsToSend(int64(test.blockNumber))`
$DIR/core/chains/evm/log/registrations_test.go: `r.addSubscriber(sub)`
$DIR/core/chains/evm/log/registrations_test.go: `r.addSubscriber(subB)`
$DIR/core/chains/evm/log/registrations_test.go: `r.addSubscriber(sub2)`
$DIR/core/chains/evm/log/registrations_test.go: `r.removeSubscriber(sub)`
$DIR/core/chains/evm/log/registrations_test.go: `logsWithTopics[topic1] = topicValueFilters1`
$DIR/core/chains/evm/log/registrations_test.go: `logsWithTopics[topic2] = topicValueFilters2`
$DIR/core/chains/evm/log/registrations_test.go: `logsWithTopics[topic3] = topicValueFilters3`
$DIR/core/chains/evm/log/registrations_test.go: `logsWithTopics3[topic4] = topicValueFilters4`
$DIR/core/chains/evm/log/registrations_test.go: `opts3.LogsWithTopics = logsWithTopics3`
$DIR/core/chains/evm/log/registrations_test.go: `opts4.MinIncomingConfirmations = 42`
$DIR/core/chains/evm/log/registrations_test.go: `opts5.MinIncomingConfirmations = 21`
$DIR/core/chains/evm/log/registrations_test.go: `t.Run("addSubscriber", func(t *testing.T) {
needsResub := r.addSubscriber(sub)
assert.True(t, needsResub)
// same contract, same topics
needsResub = r.addSubscriber(sub2)
assert.False(t, needsResub)
// same contract, different topics
needsResub = r.addSubscriber(sub3)
assert.True(t, needsResub)
assert.Equal(t, 1, int(r.highestNumConfirmations))
// same contract, same topics, different MinIncomingConfirmations
needsResub = r.addSubscriber(sub4)
// resub required because confirmations went higher
assert.True(t, needsResub)
assert.Equal(t, 42, int(r.highestNumConfirmations))
// same contract, same topics, midrange MinIncomingConfirmations
needsResub = r.addSubscriber(sub5)
// resub NOT required because confirmations is lower than the highest
assert.False(t, needsResub)
assert.Equal(t, 42, int(r.highestNumConfirmations))
assert.Len(t, r.registeredSubs, 5)
assert.Contains(t, r.registeredSubs, sub)
assert.Contains(t, r.registeredSubs, sub2)
assert.Contains(t, r.registeredSubs, sub3)
assert.Contains(t, r.registeredSubs, sub4)
assert.Contains(t, r.registeredSubs, sub5)
assert.Len(t, r.handlersByConfs, 3)
require.Contains(t, r.handlersByConfs, uint32(1))
require.Contains(t, r.handlersByConfs, uint32(21))
require.Contains(t, r.handlersByConfs, uint32(42))
// contractAddress => logTopic => Listener
handlers1 := r.handlersByConfs[1].lookupSubs
assert.Len(t, handlers1, 1)
assert.Contains(t, handlers1, contractAddr)
h1 := handlers1[contractAddr]
// 4 topics on this contract addr
assert.Len(t, h1, 4)
assert.Contains(t, h1, topic1)
assert.Contains(t, h1, topic2)
assert.Contains(t, h1, topic3)
assert.Contains(t, h1, topic4)
// topics map to their subscribers
assert.Len(t, h1[topic1], 2) // listeners 1 and 2
assert.Contains(t, h1[topic1], sub)
assert.Contains(t, h1[topic1], sub2)
assert.Len(t, h1[topic2], 2) // listeners 1 and 2
assert.Contains(t, h1[topic2], sub)
assert.Contains(t, h1[topic2], sub2)
assert.Len(t, h1[topic3], 2) // listeners 1 and 2
assert.Contains(t, h1[topic3], sub)
assert.Contains(t, h1[topic3], sub2)
assert.Len(t, h1[topic4], 1) // listener 3
assert.Contains(t, h1[topic4], sub3)
handlers42 := r.handlersByConfs[42].lookupSubs
assert.Len(t, handlers42, 1)
assert.Contains(t, handlers1, contractAddr)
h42 := handlers42[contractAddr]
// 1 topic on this contract addr
assert.Len(t, h42, 1)
assert.Contains(t, h1, topic4)
// topic maps to its subscriber
assert.Len(t, h42[topic4], 1) // listener 4
assert.Contains(t, h42[topic4], sub4)
handlers21 := r.handlersByConfs[21].lookupSubs
assert.Len(t, handlers21, 1)
assert.Contains(t, handlers1, contractAddr)
h21 := handlers21[contractAddr]
// 1 topic on this contract addr
assert.Len(t, h21, 1)
assert.Contains(t, h1, topic4)
// topic maps to its subscriber
assert.Len(t, h21[topic4], 1) // listener 5
assert.Contains(t, h21[topic4], sub5)
})`
$DIR/core/chains/evm/log/registrations_test.go: `needsResub = r.addSubscriber(sub2)`
$DIR/core/chains/evm/log/registrations_test.go: `needsResub = r.addSubscriber(sub3)`
$DIR/core/chains/evm/log/registrations_test.go: `needsResub = r.addSubscriber(sub4)`
$DIR/core/chains/evm/log/registrations_test.go: `needsResub = r.addSubscriber(sub5)`
$DIR/core/chains/evm/log/registrations_test.go: `needsResub = r.removeSubscriber(sub2)`
$DIR/core/chains/evm/log/registrations_test.go: `needsResub = r.removeSubscriber(sub3)`
$DIR/core/chains/evm/log/registrations_test.go: `needsResub = r.removeSubscriber(sub4)`
$DIR/core/chains/evm/log/registrations_test.go: `needsResub = r.removeSubscriber(sub5)`
$DIR/core/chains/evm/log/registrations_test.go: `.NewAddress()`
$DIR/core/chains/evm/log/registrations_test.go: `.addSubscriber(sub)`
$DIR/core/chains/evm/log/registrations_test.go: `.NewAddress()`
$DIR/core/chains/evm/log/registrations_test.go: `.addSubscriber(subB)`
$DIR/core/chains/evm/log/registrations_test.go: `.addSubscriber(sub2)`
$DIR/core/chains/evm/log/registrations_test.go: `.removeSubscriber(sub)`
$DIR/core/chains/evm/log/registrations_test.go: `.NewAddress()`
$DIR/core/chains/evm/log/registrations_test.go: `.NewHash()`
$DIR/core/chains/evm/log/registrations_test.go: `.NewHash()`
$DIR/core/chains/evm/log/registrations_test.go: `.NewHash()`
$DIR/core/chains/evm/log/registrations_test.go: `.NewHash()`
$DIR/core/chains/evm/log/registrations_test.go: `.Run("addSubscriber", func(t *testing.T) {
needsResub := r.addSubscriber(sub)
assert.True(t, needsResub)
// same contract, same topics
needsResub = r.addSubscriber(sub2)
assert.False(t, needsResub)
// same contract, different topics
needsResub = r.addSubscriber(sub3)
assert.True(t, needsResub)
assert.Equal(t, 1, int(r.highestNumConfirmations))
// same contract, same topics, different MinIncomingConfirmations
needsResub = r.addSubscriber(sub4)
// resub required because confirmations went higher
assert.True(t, needsResub)
assert.Equal(t, 42, int(r.highestNumConfirmations))
// same contract, same topics, midrange MinIncomingConfirmations
needsResub = r.addSubscriber(sub5)
// resub NOT required because confirmations is lower than the highest
assert.False(t, needsResub)
assert.Equal(t, 42, int(r.highestNumConfirmations))
assert.Len(t, r.registeredSubs, 5)
assert.Contains(t, r.registeredSubs, sub)
assert.Contains(t, r.registeredSubs, sub2)
assert.Contains(t, r.registeredSubs, sub3)
assert.Contains(t, r.registeredSubs, sub4)
assert.Contains(t, r.registeredSubs, sub5)
assert.Len(t, r.handlersByConfs, 3)
require.Contains(t, r.handlersByConfs, uint32(1))
require.Contains(t, r.handlersByConfs, uint32(21))
require.Contains(t, r.handlersByConfs, uint32(42))
// contractAddress => logTopic => Listener
handlers1 := r.handlersByConfs[1].lookupSubs
assert.Len(t, handlers1, 1)
assert.Contains(t, handlers1, contractAddr)
h1 := handlers1[contractAddr]
// 4 topics on this contract addr
assert.Len(t, h1, 4)
assert.Contains(t, h1, topic1)
assert.Contains(t, h1, topic2)
assert.Contains(t, h1, topic3)
assert.Contains(t, h1, topic4)
// topics map to their subscribers
assert.Len(t, h1[topic1], 2) // listeners 1 and 2
assert.Contains(t, h1[topic1], sub)
assert.Contains(t, h1[topic1], sub2)
assert.Len(t, h1[topic2], 2) // listeners 1 and 2
assert.Contains(t, h1[topic2], sub)
assert.Contains(t, h1[topic2], sub2)
assert.Len(t, h1[topic3], 2) // listeners 1 and 2
assert.Contains(t, h1[topic3], sub)
assert.Contains(t, h1[topic3], sub2)
assert.Len(t, h1[topic4], 1) // listener 3
assert.Contains(t, h1[topic4], sub3)
handlers42 := r.handlersByConfs[42].lookupSubs
assert.Len(t, handlers42, 1)
assert.Contains(t, handlers1, contractAddr)
h42 := handlers42[contractAddr]
// 1 topic on this contract addr
assert.Len(t, h42, 1)
assert.Contains(t, h1, topic4)
// topic maps to its subscriber
assert.Len(t, h42[topic4], 1) // listener 4
assert.Contains(t, h42[topic4], sub4)
handlers21 := r.handlersByConfs[21].lookupSubs
assert.Len(t, handlers21, 1)
assert.Contains(t, handlers1, contractAddr)
h21 := handlers21[contractAddr]
// 1 topic on this contract addr
assert.Len(t, h21, 1)
assert.Contains(t, h1, topic4)
// topic maps to its subscriber
assert.Len(t, h21[topic4], 1) // listener 5
assert.Contains(t, h21[topic4], sub5)
})`
$DIR/core/chains/evm/log/registrations_test.go: `.addSubscriber(sub)`
$DIR/core/chains/evm/log/registrations_test.go: `.addSubscriber(sub2)`
$DIR/core/chains/evm/log/registrations_test.go: `.addSubscriber(sub3)`
$DIR/core/chains/evm/log/registrations_test.go: `.addSubscriber(sub4)`
$DIR/core/chains/evm/log/registrations_test.go: `.addSubscriber(sub5)`
$DIR/core/chains/evm/log/registrations_test.go: `.removeSubscriber(sub)`
$DIR/core/chains/evm/log/registrations_test.go: `.removeSubscriber(sub2)`
$DIR/core/chains/evm/log/registrations_test.go: `.removeSubscriber(sub3)`
$DIR/core/chains/evm/log/registrations_test.go: `.removeSubscriber(sub4)`
$DIR/core/chains/evm/log/registrations_test.go: `.removeSubscriber(sub5)`
$DIR/core/chains/evm/logpoller/log_poller_internal_test.go: `validateFiltersTable(t, lp, orm)`
$DIR/core/chains/evm/logpoller/log_poller_internal_test.go: `err = lp.RegisterFilter(ctx, Filter{Name: "Emitter Log 1 + 2", EventSigs: []common.Hash{EmitterABI.Events["Log1"].ID, EmitterABI.Events["Log2"].ID}, Addresses: []common.Address{a2}})`
$DIR/core/chains/evm/logpoller/log_poller_internal_test.go: `validateFiltersTable(t, lp, orm)`
$DIR/core/chains/evm/logpoller/log_poller_internal_test.go: `err = lp.RegisterFilter(ctx, Filter{Name: "Emitter Log 1 + 2 dupe", EventSigs: []common.Hash{EmitterABI.Events["Log1"].ID, EmitterABI.Events["Log2"].ID}, Addresses: []common.Address{a2}})`
$DIR/core/chains/evm/logpoller/log_poller_internal_test.go: `validateFiltersTable(t, lp, orm)`
$DIR/core/chains/evm/logpoller/log_poller_internal_test.go: `err = lp.RegisterFilter(ctx, Filter{Name: "no address", EventSigs: []common.Hash{EmitterABI.Events["Log1"].ID}})`
$DIR/core/chains/evm/logpoller/log_poller_internal_test.go: `err = lp.RegisterFilter(ctx, Filter{Name: "No event", Addresses: []common.Address{a1}})`
$DIR/core/chains/evm/logpoller/log_poller_internal_test.go: `validateFiltersTable(t, lp, orm)`
$DIR/core/chains/evm/logpoller/log_poller_internal_test.go: `err = lp.UnregisterFilter(ctx, "Filter doesn't exist")`
$DIR/core/chains/evm/logpoller/log_poller_internal_test.go: `_, ok = lp.filters["Emitter Log 1 + 2"]`
$DIR/core/chains/evm/logpoller/log_poller_internal_test.go: `_, ok = lp.filters["Emitter Log 1 + 2 dupe"]`
$DIR/core/chains/evm/logpoller/log_poller_internal_test.go: `err = lp.UnregisterFilter(ctx, "Emitter Log 1 + 2")`
$DIR/core/chains/evm/logpoller/log_poller_internal_test.go: `_, ok = lp.filters["Emitter Log 1 + 2"]`
$DIR/core/chains/evm/logpoller/log_poller_internal_test.go: `validateFiltersTable(t, lp, orm)`
$DIR/core/chains/evm/logpoller/log_poller_internal_test.go: `err = lp.UnregisterFilter(ctx, "Emitter Log 1 + 2 dupe")`
$DIR/core/chains/evm/logpoller/log_poller_internal_test.go: `err = lp.UnregisterFilter(ctx, "Emitter Log 1")`
$DIR/core/chains/evm/logpoller/log_poller_internal_test.go: `t.Run(c.name, func(t *testing.T) {
logs := convertLogs(c.logs, c.blocks, lggr, big.NewInt(53))
require.Len(t, logs, c.expected)
for i := 0; i < c.expected; i++ {
if len(c.blocks) == 1 {
assert.Equal(t, c.blocks[0].BlockTimestamp, logs[i].BlockTimestamp)
} else {
assert.Equal(t, logs[i].BlockTimestamp, c.blocks[i].BlockTimestamp)
}
}
})`
$DIR/core/chains/evm/logpoller/log_poller_internal_test.go: `ec.On("HeadByNumber", mock.Anything, mock.Anything).Return(&head, nil)`
$DIR/core/chains/evm/logpoller/log_poller_internal_test.go: `ec.On("FilterLogs", mock.Anything, mock.Anything).Return([]types.Log{log1}, nil)`
$DIR/core/chains/evm/logpoller/log_poller_internal_test.go: `ec.On("ConfiguredChainID").Return(chainID, nil)`
$DIR/core/chains/evm/logpoller/log_poller_internal_test.go: `lp.BackupPollAndSaveLogs(ctx)`
$DIR/core/chains/evm/logpoller/log_poller_internal_test.go: `lp.PollAndSaveLogs(ctx, latestBlock)`
$DIR/core/chains/evm/logpoller/log_poller_internal_test.go: `lp.BackupPollAndSaveLogs(ctx)`
$DIR/core/chains/evm/logpoller/log_poller_internal_test.go: `ec.On("HeadByNumber", mock.Anything, mock.Anything).Return(func(context.Context, *big.Int) (*evmtypes.Head, error) {
headCopy := head
return &headCopy, nil
})`
$DIR/core/chains/evm/logpoller/log_poller_internal_test.go: `ec.On("FilterLogs", mock.Anything, mock.Anything).Return([]types.Log{log1}, nil).Once()`
$DIR/core/chains/evm/logpoller/log_poller_internal_test.go: `ec.On("ConfiguredChainID").Return(chainID, nil)`
$DIR/core/chains/evm/logpoller/log_poller_internal_test.go: `lp.PollAndSaveLogs(ctx, 4)`
$DIR/core/chains/evm/logpoller/log_poller_internal_test.go: `t.Run("abort before replayStart received", func(t *testing.T) {
// Replay() should abort immediately if caller's context is cancelled before request signal is read
cancelCtx, cancel := context.WithCancel(testutils.Context(t))
cancel()
err := lp.Replay(cancelCtx, 3)
assert.ErrorIs(t, err, ErrReplayRequestAborted)
})`
$DIR/core/chains/evm/logpoller/log_poller_internal_test.go: `cancel()`
$DIR/core/chains/evm/logpoller/log_poller_internal_test.go: `t.Run("returns error code on replay complete", func(t *testing.T) {
ctx := testutils.Context(t)
ec.On("FilterLogs", mock.Anything, mock.Anything).Return([]types.Log{log1}, nil).Once()
mockBatchCallContext(t, ec)
anyErr := pkgerrors.New("any error")
done := make(chan struct{})
go func() {
defer close(done)
recvStartReplay(ctx, 2)
lp.replayComplete <- anyErr
}()
assert.ErrorIs(t, lp.Replay(ctx, 1), anyErr)
<-done
})`
$DIR/core/chains/evm/logpoller/log_poller_internal_test.go: `ec.On("FilterLogs", mock.Anything, mock.Anything).Return([]types.Log{log1}, nil).Once()`
$DIR/core/chains/evm/logpoller/log_poller_internal_test.go: `mockBatchCallContext(t, ec)`
$DIR/core/chains/evm/logpoller/log_poller_internal_test.go: `recvStartReplay(ctx, 2)`
$DIR/core/chains/evm/logpoller/log_poller_internal_test.go: `lp.replayComplete <- anyErr`
$DIR/core/chains/evm/logpoller/log_poller_internal_test.go: `<-done`
$DIR/core/chains/evm/logpoller/log_poller_internal_test.go: `t.Run("late abort returns ErrReplayInProgress", func(t *testing.T) {
cancelCtx, cancel := context.WithTimeout(testutils.Context(t), time.Second) // Intentionally abort replay after 1s
done := make(chan struct{})
go func() {
defer close(done)
recvStartReplay(cancelCtx, 4)
cancel()
}()
assert.ErrorIs(t, lp.Replay(cancelCtx, 4), ErrReplayInProgress)
<-done
lp.replayComplete <- nil
lp.wg.Wait()
})`
$DIR/core/chains/evm/logpoller/log_poller_internal_test.go: `recvStartReplay(cancelCtx, 4)`
$DIR/core/chains/evm/logpoller/log_poller_internal_test.go: `cancel()`
$DIR/core/chains/evm/logpoller/log_poller_internal_test.go: `<-done`
$DIR/core/chains/evm/logpoller/log_poller_internal_test.go: `lp.replayComplete <- nil`
$DIR/core/chains/evm/logpoller/log_poller_internal_test.go: `lp.wg.Wait()`
$DIR/core/chains/evm/logpoller/log_poller_internal_test.go: `t.Run("client abort doesnt hang run loop", func(t *testing.T) {
ctx := testutils.Context(t)
lp.backupPollerNextBlock = 0
pass := make(chan struct{})
cancelled := make(chan struct{})
rctx, rcancel := context.WithCancel(testutils.Context(t))
var wg sync.WaitGroup
defer func() { wg.Wait() }()
ec.On("FilterLogs", mock.Anything, mock.Anything).Once().Return([]types.Log{log1}, nil).Run(func(args mock.Arguments) {
head = evmtypes.Head{Number: 4}
wg.Add(1)
go func() {
defer wg.Done()
assert.ErrorIs(t, lp.Replay(rctx, 4), ErrReplayInProgress)
close(cancelled)
}()
})
ec.On("FilterLogs", mock.Anything, mock.Anything).Once().Return([]types.Log{log1}, nil).Run(func(args mock.Arguments) {
rcancel()
wg.Add(1)
go func() {
defer wg.Done()
select {
case lp.replayStart <- 4:
close(pass)
case <-ctx.Done():
return
}
}()
// We cannot return until we're sure that Replay() received the cancellation signal,
// otherwise replayComplete<- might be sent first
<-cancelled
})
ec.On("FilterLogs", mock.Anything, mock.Anything).Return([]types.Log{log1}, nil).Maybe() // in case task gets delayed by >= 100ms
head = evmtypes.Head{Number: 5}
t.Cleanup(lp.reset)
servicetest.Run(t, lp)
select {
case <-ctx.Done():
t.Errorf("timed out waiting for lp.run() to respond to second replay event")
case <-pass:
}
})`
$DIR/core/chains/evm/logpoller/log_poller_internal_test.go: `lp.backupPollerNextBlock = 0`
$DIR/core/chains/evm/logpoller/log_poller_internal_test.go: `wg.Wait()`
$DIR/core/chains/evm/logpoller/log_poller_internal_test.go: `ec.On("FilterLogs", mock.Anything, mock.Anything).Once().Return([]types.Log{log1}, nil).Run(func(args mock.Arguments) {
head = evmtypes.Head{Number: 4}
wg.Add(1)
go func() {
defer wg.Done()
assert.ErrorIs(t, lp.Replay(rctx, 4), ErrReplayInProgress)
close(cancelled)
}()
})`
$DIR/core/chains/evm/logpoller/log_poller_internal_test.go: `head = evmtypes.Head{Number: 4}`
$DIR/core/chains/evm/logpoller/log_poller_internal_test.go: `wg.Add(1)`
$DIR/core/chains/evm/logpoller/log_poller_internal_test.go: `close(cancelled)`
$DIR/core/chains/evm/logpoller/log_poller_internal_test.go: `ec.On("FilterLogs", mock.Anything, mock.Anything).Once().Return([]types.Log{log1}, nil).Run(func(args mock.Arguments) {
rcancel()
wg.Add(1)
go func() {
defer wg.Done()
select {
case lp.replayStart <- 4:
close(pass)
case <-ctx.Done():
return
}
}()
// We cannot return until we're sure that Replay() received the cancellation signal,
// otherwise replayComplete<- might be sent first
<-cancelled
})`
$DIR/core/chains/evm/logpoller/log_poller_internal_test.go: `rcancel()`
$DIR/core/chains/evm/logpoller/log_poller_internal_test.go: `wg.Add(1)`
$DIR/core/chains/evm/logpoller/log_poller_internal_test.go: `close(pass)`
$DIR/core/chains/evm/logpoller/log_poller_internal_test.go: `<-cancelled`
$DIR/core/chains/evm/logpoller/log_poller_internal_test.go: `ec.On("FilterLogs", mock.Anything, mock.Anything).Return([]types.Log{log1}, nil).Maybe()`
$DIR/core/chains/evm/logpoller/log_poller_internal_test.go: `head = evmtypes.Head{Number: 5}`
$DIR/core/chains/evm/logpoller/log_poller_internal_test.go: `t.Cleanup(lp.reset)`
$DIR/core/chains/evm/logpoller/log_poller_internal_test.go: `servicetest.Run(t, lp)`
$DIR/core/chains/evm/logpoller/log_poller_internal_test.go: `ec.On("FilterLogs", mock.Anything, mock.Anything).Unset()`
$DIR/core/chains/evm/logpoller/log_poller_internal_test.go: `t.Run("shutdown during replay", func(t *testing.T) {
ctx := testutils.Context(t)
lp.backupPollerNextBlock = 0
pass := make(chan struct{})
done := make(chan struct{})
defer func() { <-done }()
ec.On("FilterLogs", mock.Anything, mock.Anything).Once().Return([]types.Log{log1}, nil).Run(func(args mock.Arguments) {
go func() {
defer close(done)
head = evmtypes.Head{Number: 4} // Restore latest block to 4, so this matches the fromBlock requested
select {
case lp.replayStart <- 4:
case <-ctx.Done():
}
}()
})
ec.On("FilterLogs", mock.Anything, mock.Anything).Once().Return([]types.Log{log1}, nil).Run(func(args mock.Arguments) {
go func() {
assert.NoError(t, lp.Close())
// prevent double close
lp.reset()
assert.NoError(t, lp.Start(ctx))
close(pass)
}()
})
ec.On("FilterLogs", mock.Anything, mock.Anything).Return([]types.Log{log1}, nil)
t.Cleanup(lp.reset)
head = evmtypes.Head{Number: 5} // Latest block must be > lastProcessed in order for SaveAndPollLogs() to call FilterLogs()
servicetest.Run(t, lp)
select {
case <-ctx.Done():
t.Error("timed out waiting for lp.run() to respond to shutdown event during replay")
case <-pass:
}
})`
$DIR/core/chains/evm/logpoller/log_poller_internal_test.go: `lp.backupPollerNextBlock = 0`
$DIR/core/chains/evm/logpoller/log_poller_internal_test.go: `<-done`
$DIR/core/chains/evm/logpoller/log_poller_internal_test.go: `ec.On("FilterLogs", mock.Anything, mock.Anything).Once().Return([]types.Log{log1}, nil).Run(func(args mock.Arguments) {
go func() {
defer close(done)
head = evmtypes.Head{Number: 4} // Restore latest block to 4, so this matches the fromBlock requested
select {
case lp.replayStart <- 4:
case <-ctx.Done():
}
}()
})`
$DIR/core/chains/evm/logpoller/log_poller_internal_test.go: `head = evmtypes.Head{Number: 4}`
$DIR/core/chains/evm/logpoller/log_poller_internal_test.go: `select {
case lp.replayStart <- 4:
case <-ctx.Done():
}`
$DIR/core/chains/evm/logpoller/log_poller_internal_test.go: `ec.On("FilterLogs", mock.Anything, mock.Anything).Once().Return([]types.Log{log1}, nil).Run(func(args mock.Arguments) {
go func() {
assert.NoError(t, lp.Close())
// prevent double close
lp.reset()
assert.NoError(t, lp.Start(ctx))
close(pass)
}()
})`
$DIR/core/chains/evm/logpoller/log_poller_internal_test.go: `lp.reset()`
$DIR/core/chains/evm/logpoller/log_poller_internal_test.go: `close(pass)`
$DIR/core/chains/evm/logpoller/log_poller_internal_test.go: `ec.On("FilterLogs", mock.Anything, mock.Anything).Return([]types.Log{log1}, nil)`
$DIR/core/chains/evm/logpoller/log_poller_internal_test.go: `t.Cleanup(lp.reset)`
$DIR/core/chains/evm/logpoller/log_poller_internal_test.go: `head = evmtypes.Head{Number: 5}`
$DIR/core/chains/evm/logpoller/log_poller_internal_test.go: `servicetest.Run(t, lp)`
$DIR/core/chains/evm/logpoller/log_poller_internal_test.go: `t.Run("ReplayAsync success", func(t *testing.T) {
t.Cleanup(lp.reset)
head = evmtypes.Head{Number: 5}
ec.On("FilterLogs", mock.Anything, mock.Anything).Return([]types.Log{log1}, nil)
mockBatchCallContext(t, ec)
servicetest.Run(t, lp)
lp.ReplayAsync(1)
recvStartReplay(testutils.Context(t), 2)
})`
$DIR/core/chains/evm/logpoller/log_poller_internal_test.go: `t.Cleanup(lp.reset)`
$DIR/core/chains/evm/logpoller/log_poller_internal_test.go: `head = evmtypes.Head{Number: 5}`
$DIR/core/chains/evm/logpoller/log_poller_internal_test.go: `ec.On("FilterLogs", mock.Anything, mock.Anything).Return([]types.Log{log1}, nil)`
$DIR/core/chains/evm/logpoller/log_poller_internal_test.go: `mockBatchCallContext(t, ec)`
$DIR/core/chains/evm/logpoller/log_poller_internal_test.go: `servicetest.Run(t, lp)`
$DIR/core/chains/evm/logpoller/log_poller_internal_test.go: `lp.ReplayAsync(1)`
$DIR/core/chains/evm/logpoller/log_poller_internal_test.go: `recvStartReplay(testutils.Context(t), 2)`
$DIR/core/chains/evm/logpoller/log_poller_internal_test.go: `t.Run("ReplayAsync error", func(t *testing.T) {
ctx := testutils.Context(t)
t.Cleanup(lp.reset)
servicetest.Run(t, lp)
head = evmtypes.Head{Number: 4}
anyErr := pkgerrors.New("async error")
observedLogs.TakeAll()
lp.ReplayAsync(4)
recvStartReplay(testutils.Context(t), 4)
select {
case lp.replayComplete <- anyErr:
time.Sleep(2 * time.Second)
case <-ctx.Done():
t.Error("timed out waiting to send replaceComplete")
}
require.Equal(t, 1, observedLogs.Len())
assert.Equal(t, observedLogs.All()[0].Message, anyErr.Error())
})`
$DIR/core/chains/evm/logpoller/log_poller_internal_test.go: `t.Cleanup(lp.reset)`
$DIR/core/chains/evm/logpoller/log_poller_internal_test.go: `servicetest.Run(t, lp)`
$DIR/core/chains/evm/logpoller/log_poller_internal_test.go: `head = evmtypes.Head{Number: 4}`
$DIR/core/chains/evm/logpoller/log_poller_internal_test.go: `observedLogs.TakeAll()`
$DIR/core/chains/evm/logpoller/log_poller_internal_test.go: `lp.ReplayAsync(4)`
$DIR/core/chains/evm/logpoller/log_poller_internal_test.go: `recvStartReplay(testutils.Context(t), 4)`
$DIR/core/chains/evm/logpoller/log_poller_internal_test.go: `time.Sleep(2 * time.Second)`
$DIR/core/chains/evm/logpoller/log_poller_internal_test.go: `t.Run("run regular replay when there are not blocks in db", func(t *testing.T) {
ctx := testutils.Context(t)
err := lp.orm.DeleteLogsAndBlocksAfter(ctx, 0)
require.NoError(t, err)
lp.ReplayAsync(1)
recvStartReplay(testutils.Context(t), 1)
})`
$DIR/core/chains/evm/logpoller/log_poller_internal_test.go: `lp.ReplayAsync(1)`
$DIR/core/chains/evm/logpoller/log_poller_internal_test.go: `recvStartReplay(testutils.Context(t), 1)`
$DIR/core/chains/evm/logpoller/log_poller_internal_test.go: `err = lp.orm.InsertBlock(ctx, head.Hash, head.Number, head.Timestamp, head.Number)`
$DIR/core/chains/evm/logpoller/log_poller_internal_test.go: `ec.On("FilterLogs", mock.Anything, mock.Anything).Return([]types.Log{log1}, nil)`
$DIR/core/chains/evm/logpoller/log_poller_internal_test.go: `mockBatchCallContext(t, ec)`
$DIR/core/chains/evm/logpoller/log_poller_internal_test.go: `err = lp.Replay(ctx, 1)`
$DIR/core/chains/evm/logpoller/log_poller_internal_test.go: `t.Run("pick latest block from chain and use finality from config with finality disabled", func(t *testing.T) {
head := evmtypes.Head{Number: 4}
lpOpts.UseFinalityTag = false
lpOpts.FinalityDepth = int64(3)
ec := evmclimocks.NewClient(t)
ec.On("HeadByNumber", mock.Anything, mock.Anything).Return(&head, nil)
lp := NewLogPoller(orm, ec, lggr, lpOpts)
latestBlock, lastFinalizedBlockNumber, err := lp.latestBlocks(ctx)
require.NoError(t, err)
require.Equal(t, latestBlock.Number, head.Number)
require.Equal(t, lpOpts.FinalityDepth, latestBlock.Number-lastFinalizedBlockNumber)
})`
$DIR/core/chains/evm/logpoller/log_poller_internal_test.go: `lpOpts.UseFinalityTag = false`
$DIR/core/chains/evm/logpoller/log_poller_internal_test.go: `lpOpts.FinalityDepth = int64(3)`
$DIR/core/chains/evm/logpoller/log_poller_internal_test.go: `ec.On("HeadByNumber", mock.Anything, mock.Anything).Return(&head, nil)`
$DIR/core/chains/evm/logpoller/log_poller_internal_test.go: `t.Run("client returns data properly", func(t *testing.T) {
expectedLatestBlockNumber := int64(20)
expectedLastFinalizedBlockNumber := int64(12)
ec := evmclimocks.NewClient(t)
ec.On("BatchCallContext", mock.Anything, mock.MatchedBy(func(b []rpc.BatchElem) bool {
return len(b) == 2 &&
reflect.DeepEqual(b[0].Args, []interface{}{"latest", false}) &&
reflect.DeepEqual(b[1].Args, []interface{}{"finalized", false})
})).Return(nil).Run(func(args mock.Arguments) {
elems := args.Get(1).([]rpc.BatchElem)
// Latest block details
*(elems[0].Result.(*evmtypes.Head)) = evmtypes.Head{Number: expectedLatestBlockNumber, Hash: utils.RandomBytes32()}
// Finalized block details
*(elems[1].Result.(*evmtypes.Head)) = evmtypes.Head{Number: expectedLastFinalizedBlockNumber, Hash: utils.RandomBytes32()}
})
lpOpts.UseFinalityTag = true
lp := NewLogPoller(orm, ec, lggr, lpOpts)
latestBlock, lastFinalizedBlockNumber, err := lp.latestBlocks(ctx)
require.NoError(t, err)
require.Equal(t, expectedLatestBlockNumber, latestBlock.Number)
require.Equal(t, expectedLastFinalizedBlockNumber, lastFinalizedBlockNumber)
})`
$DIR/core/chains/evm/logpoller/log_poller_internal_test.go: `ec.On("BatchCallContext", mock.Anything, mock.MatchedBy(func(b []rpc.BatchElem) bool {
return len(b) == 2 &&
reflect.DeepEqual(b[0].Args, []interface{}{"latest", false}) &&
reflect.DeepEqual(b[1].Args, []interface{}{"finalized", false})
})).Return(nil).Run(func(args mock.Arguments) {
elems := args.Get(1).([]rpc.BatchElem)
// Latest block details
*(elems[0].Result.(*evmtypes.Head)) = evmtypes.Head{Number: expectedLatestBlockNumber, Hash: utils.RandomBytes32()}
// Finalized block details
*(elems[1].Result.(*evmtypes.Head)) = evmtypes.Head{Number: expectedLastFinalizedBlockNumber, Hash: utils.RandomBytes32()}
})`
$DIR/core/chains/evm/logpoller/log_poller_internal_test.go: `*(elems[0].Result.(*evmtypes.Head)) = evmtypes.Head{Number: expectedLatestBlockNumber, Hash: utils.RandomBytes32()}`
$DIR/core/chains/evm/logpoller/log_poller_internal_test.go: `*(elems[1].Result.(*evmtypes.Head)) = evmtypes.Head{Number: expectedLastFinalizedBlockNumber, Hash: utils.RandomBytes32()}`
$DIR/core/chains/evm/logpoller/log_poller_internal_test.go: `lpOpts.UseFinalityTag = true`
$DIR/core/chains/evm/logpoller/log_poller_internal_test.go: `t.Run("client returns error for at least one of the calls", func(t *testing.T) {
ec := evmclimocks.NewClient(t)
ec.On("BatchCallContext", mock.Anything, mock.Anything).Return(nil).Run(func(args mock.Arguments) {
elems := args.Get(1).([]rpc.BatchElem)
// Latest block details
*(elems[0].Result.(*evmtypes.Head)) = evmtypes.Head{Number: 10}
// Finalized block details
elems[1].Error = fmt.Errorf("some error")
})
lpOpts.UseFinalityTag = true
lp := NewLogPoller(orm, ec, lggr, lpOpts)
_, _, err := lp.latestBlocks(ctx)
require.Error(t, err)
})`
$DIR/core/chains/evm/logpoller/log_poller_internal_test.go: `ec.On("BatchCallContext", mock.Anything, mock.Anything).Return(nil).Run(func(args mock.Arguments) {
elems := args.Get(1).([]rpc.BatchElem)
// Latest block details
*(elems[0].Result.(*evmtypes.Head)) = evmtypes.Head{Number: 10}
// Finalized block details
elems[1].Error = fmt.Errorf("some error")
})`
$DIR/core/chains/evm/logpoller/log_poller_internal_test.go: `*(elems[0].Result.(*evmtypes.Head)) = evmtypes.Head{Number: 10}`
$DIR/core/chains/evm/logpoller/log_poller_internal_test.go: `elems[1].Error = fmt.Errorf("some error")`
$DIR/core/chains/evm/logpoller/log_poller_internal_test.go: `lpOpts.UseFinalityTag = true`
$DIR/core/chains/evm/logpoller/log_poller_internal_test.go: `t.Run("BatchCall returns an error", func(t *testing.T) {
ec := evmclimocks.NewClient(t)
ec.On("BatchCallContext", mock.Anything, mock.Anything).Return(fmt.Errorf("some error"))
lpOpts.UseFinalityTag = true
lp := NewLogPoller(orm, ec, lggr, lpOpts)
_, _, err := lp.latestBlocks(ctx)
require.Error(t, err)
})`
$DIR/core/chains/evm/logpoller/log_poller_internal_test.go: `ec.On("BatchCallContext", mock.Anything, mock.Anything).Return(fmt.Errorf("some error"))`
$DIR/core/chains/evm/logpoller/log_poller_internal_test.go: `lpOpts.UseFinalityTag = true`
$DIR/core/chains/evm/logpoller/log_poller_internal_test.go: `mockBatchCallContext(t, ec)`
$DIR/core/chains/evm/logpoller/log_poller_internal_test.go: `blockValidationReq = finalizedBlock`
$DIR/core/chains/evm/logpoller/log_poller_internal_test.go: `t.Run(fmt.Sprintf("%s where useFinalityTag=%t", tc.name, lp.useFinalityTag), func(t *testing.T) {
blocks, err := lp.fetchBlocks(ctx, tc.blocksRequested, blockValidationReq)
if tc.expectedErr != nil {
require.Equal(t, err.Error(), tc.expectedErr.Error())
return // PASS
}
require.NoError(t, err)
for i, blockRequested := range tc.blocksRequested {
switch blockRequested {
case string(latestBlock):
assert.Equal(t, int64(8), blocks[i].Number)
case string(finalizedBlock):
assert.Equal(t, int64(5), blocks[i].Number)
default:
blockNum, err2 := hexutil.DecodeUint64(blockRequested)
require.NoError(t, err2)
assert.Equal(t, int64(blockNum), blocks[i].Number)
}
}
})`
$DIR/core/chains/evm/logpoller/log_poller_internal_test.go: `.HexToAddress("0x2ab9a2dc53736b361b72d900cdf9f78f9406fbbb")`
$DIR/core/chains/evm/logpoller/log_poller_internal_test.go: `.HexToAddress("0x2ab9a2dc53736b361b72d900cdf9f78f9406fbbc")`
$DIR/core/chains/evm/logpoller/log_poller_internal_test.go: `.TestObserved(t, zapcore.WarnLevel)`
$DIR/core/chains/evm/logpoller/log_poller_internal_test.go: `.NewRandomEVMChainID()`
$DIR/core/chains/evm/logpoller/log_poller_internal_test.go: `.NewSqlxDB(t)`
$DIR/core/chains/evm/logpoller/log_poller_internal_test.go: `.Context(t)`
$DIR/core/chains/evm/logpoller/log_poller_internal_test.go: `.Filter(nil, nil, nil)`
$DIR/core/chains/evm/logpoller/log_poller_internal_test.go: `.RegisterFilter(ctx, Filter{Name: "Emitter Log 1", EventSigs: []common.Hash{EmitterABI.Events["Log1"].ID}, Addresses: []common.Address{a1}})`
$DIR/core/chains/evm/logpoller/log_poller_internal_test.go: `.RegisterFilter(ctx, Filter{Name: "Emitter Log 1 + 2", EventSigs: []common.Hash{EmitterABI.Events["Log1"].ID, EmitterABI.Events["Log2"].ID}, Addresses: []common.Address{a2}})`
$DIR/core/chains/evm/logpoller/log_poller_internal_test.go: `.RegisterFilter(ctx, Filter{Name: "Emitter Log 1 + 2 dupe", EventSigs: []common.Hash{EmitterABI.Events["Log1"].ID, EmitterABI.Events["Log2"].ID}, Addresses: []common.Address{a2}})`
$DIR/core/chains/evm/logpoller/log_poller_internal_test.go: `.RegisterFilter(ctx, Filter{Name: "no address", EventSigs: []common.Hash{EmitterABI.Events["Log1"].ID}})`
$DIR/core/chains/evm/logpoller/log_poller_internal_test.go: `.RegisterFilter(ctx, Filter{Name: "No event", Addresses: []common.Address{a1}})`
$DIR/core/chains/evm/logpoller/log_poller_internal_test.go: `.UnregisterFilter(ctx, "Filter doesn't exist")`
$DIR/core/chains/evm/logpoller/log_poller_internal_test.go: `.UnregisterFilter(ctx, "Emitter Log 1 + 2")`
$DIR/core/chains/evm/logpoller/log_poller_internal_test.go: `.UnregisterFilter(ctx, "Emitter Log 1 + 2 dupe")`
$DIR/core/chains/evm/logpoller/log_poller_internal_test.go: `.UnregisterFilter(ctx, "Emitter Log 1")`
$DIR/core/chains/evm/logpoller/log_poller_internal_test.go: `.orm.LoadFilters(ctx)`
$DIR/core/chains/evm/logpoller/log_poller_internal_test.go: `.Filter(nil, nil, nil)`
$DIR/core/chains/evm/logpoller/log_poller_internal_test.go: `.Test(t)`
$DIR/core/chains/evm/logpoller/log_poller_internal_test.go: `.Now()`
$DIR/core/chains/evm/logpoller/log_poller_internal_test.go: `.Now()`
$DIR/core/chains/evm/logpoller/log_poller_internal_test.go: `.Run(c.name, func(t *testing.T) {
logs := convertLogs(c.logs, c.blocks, lggr, big.NewInt(53))
require.Len(t, logs, c.expected)
for i := 0; i < c.expected; i++ {
if len(c.blocks) == 1 {
assert.Equal(t, c.blocks[0].BlockTimestamp, logs[i].BlockTimestamp)
} else {
assert.Equal(t, logs[i].BlockTimestamp, c.blocks[i].BlockTimestamp)
}
}
})`
$DIR/core/chains/evm/logpoller/log_poller_internal_test.go: `.NewInt(53)`
$DIR/core/chains/evm/logpoller/log_poller_internal_test.go: `.HexToAddress("0x2ab9a2dc53736b361b72d900cdf9f78f9406fbbc")`
$DIR/core/chains/evm/logpoller/log_poller_internal_test.go: `.TestObserved(t, zapcore.WarnLevel)`
$DIR/core/chains/evm/logpoller/log_poller_internal_test.go: `.NewSqlxDB(t)`
$DIR/core/chains/evm/logpoller/log_poller_internal_test.go: `.HexToHash("0x1234")`
$DIR/core/chains/evm/logpoller/log_poller_internal_test.go: `.Bytes()`
$DIR/core/chains/evm/logpoller/log_poller_internal_test.go: `.NewClient(t)`
$DIR/core/chains/evm/logpoller/log_poller_internal_test.go: `.On("HeadByNumber", mock.Anything, mock.Anything)`
$DIR/core/chains/evm/logpoller/log_poller_internal_test.go: `.Return(&head, nil)`
$DIR/core/chains/evm/logpoller/log_poller_internal_test.go: `.On("FilterLogs", mock.Anything, mock.Anything)`
$DIR/core/chains/evm/logpoller/log_poller_internal_test.go: `.Return([]types.Log{log1}, nil)`
$DIR/core/chains/evm/logpoller/log_poller_internal_test.go: `.On("ConfiguredChainID")`
$DIR/core/chains/evm/logpoller/log_poller_internal_test.go: `.Return(chainID, nil)`
$DIR/core/chains/evm/logpoller/log_poller_internal_test.go: `.Context(t)`
$DIR/core/chains/evm/logpoller/log_poller_internal_test.go: `.BackupPollAndSaveLogs(ctx)`
$DIR/core/chains/evm/logpoller/log_poller_internal_test.go: `.PollAndSaveLogs(ctx, latestBlock)`
$DIR/core/chains/evm/logpoller/log_poller_internal_test.go: `.orm.SelectLatestBlock(ctx)`
$DIR/core/chains/evm/logpoller/log_poller_internal_test.go: `.BackupPollAndSaveLogs(ctx)`
$DIR/core/chains/evm/logpoller/log_poller_internal_test.go: `.HexToAddress("0x2ab9a2dc53736b361b72d900cdf9f78f9406fbbc")`
$DIR/core/chains/evm/logpoller/log_poller_internal_test.go: `.TestObserved(t, zapcore.ErrorLevel)`
$DIR/core/chains/evm/logpoller/log_poller_internal_test.go: `.NewSqlxDB(t)`
$DIR/core/chains/evm/logpoller/log_poller_internal_test.go: `.HexToHash("0x1234")`
$DIR/core/chains/evm/logpoller/log_poller_internal_test.go: `.Bytes()`
$DIR/core/chains/evm/logpoller/log_poller_internal_test.go: `.NewClient(t)`
$DIR/core/chains/evm/logpoller/log_poller_internal_test.go: `.On("HeadByNumber", mock.Anything, mock.Anything)`
$DIR/core/chains/evm/logpoller/log_poller_internal_test.go: `.Return(func(context.Context, *big.Int) (*evmtypes.Head, error) {
headCopy := head
return &headCopy, nil
})`
$DIR/core/chains/evm/logpoller/log_poller_internal_test.go: `.On("FilterLogs", mock.Anything, mock.Anything)`
$DIR/core/chains/evm/logpoller/log_poller_internal_test.go: `.Return([]types.Log{log1}, nil)`
$DIR/core/chains/evm/logpoller/log_poller_internal_test.go: `.Once()`
$DIR/core/chains/evm/logpoller/log_poller_internal_test.go: `.On("ConfiguredChainID")`
$DIR/core/chains/evm/logpoller/log_poller_internal_test.go: `.Return(chainID, nil)`
$DIR/core/chains/evm/logpoller/log_poller_internal_test.go: `.Context(t)`
$DIR/core/chains/evm/logpoller/log_poller_internal_test.go: `.PollAndSaveLogs(ctx, 4)`
$DIR/core/chains/evm/logpoller/log_poller_internal_test.go: `.LatestBlock(ctx)`
$DIR/core/chains/evm/logpoller/log_poller_internal_test.go: `.Run("abort before replayStart received", func(t *testing.T) {
// Replay() should abort immediately if caller's context is cancelled before request signal is read
cancelCtx, cancel := context.WithCancel(testutils.Context(t))
cancel()
err := lp.Replay(cancelCtx, 3)
assert.ErrorIs(t, err, ErrReplayRequestAborted)
})`
$DIR/core/chains/evm/logpoller/log_poller_internal_test.go: `.WithCancel(testutils.Context(t))`
$DIR/core/chains/evm/logpoller/log_poller_internal_test.go: `.Context(t)`
$DIR/core/chains/evm/logpoller/log_poller_internal_test.go: `.Replay(cancelCtx, 3)`
$DIR/core/chains/evm/logpoller/log_poller_internal_test.go: `.Done()`
$DIR/core/chains/evm/logpoller/log_poller_internal_test.go: `.Run("returns error code on replay complete", func(t *testing.T) {
ctx := testutils.Context(t)
ec.On("FilterLogs", mock.Anything, mock.Anything).Return([]types.Log{log1}, nil).Once()
mockBatchCallContext(t, ec)
anyErr := pkgerrors.New("any error")
done := make(chan struct{})
go func() {
defer close(done)
recvStartReplay(ctx, 2)
lp.replayComplete <- anyErr
}()
assert.ErrorIs(t, lp.Replay(ctx, 1), anyErr)
<-done
})`
$DIR/core/chains/evm/logpoller/log_poller_internal_test.go: `.Context(t)`
$DIR/core/chains/evm/logpoller/log_poller_internal_test.go: `.On("FilterLogs", mock.Anything, mock.Anything)`
$DIR/core/chains/evm/logpoller/log_poller_internal_test.go: `.Return([]types.Log{log1}, nil)`
$DIR/core/chains/evm/logpoller/log_poller_internal_test.go: `.Once()`
$DIR/core/chains/evm/logpoller/log_poller_internal_test.go: `.New("any error")`
$DIR/core/chains/evm/logpoller/log_poller_internal_test.go: `.Run("late abort returns ErrReplayInProgress", func(t *testing.T) {
cancelCtx, cancel := context.WithTimeout(testutils.Context(t), time.Second) // Intentionally abort replay after 1s
done := make(chan struct{})
go func() {
defer close(done)
recvStartReplay(cancelCtx, 4)
cancel()
}()
assert.ErrorIs(t, lp.Replay(cancelCtx, 4), ErrReplayInProgress)
<-done
lp.replayComplete <- nil
lp.wg.Wait()
})`
$DIR/core/chains/evm/logpoller/log_poller_internal_test.go: `.WithTimeout(testutils.Context(t), time.Second)`
$DIR/core/chains/evm/logpoller/log_poller_internal_test.go: `.Context(t)`
$DIR/core/chains/evm/logpoller/log_poller_internal_test.go: `.wg.Wait()`
$DIR/core/chains/evm/logpoller/log_poller_internal_test.go: `.Run("client abort doesnt hang run loop", func(t *testing.T) {
ctx := testutils.Context(t)
lp.backupPollerNextBlock = 0
pass := make(chan struct{})
cancelled := make(chan struct{})
rctx, rcancel := context.WithCancel(testutils.Context(t))
var wg sync.WaitGroup
defer func() { wg.Wait() }()
ec.On("FilterLogs", mock.Anything, mock.Anything).Once().Return([]types.Log{log1}, nil).Run(func(args mock.Arguments) {
head = evmtypes.Head{Number: 4}
wg.Add(1)
go func() {
defer wg.Done()
assert.ErrorIs(t, lp.Replay(rctx, 4), ErrReplayInProgress)
close(cancelled)
}()
})
ec.On("FilterLogs", mock.Anything, mock.Anything).Once().Return([]types.Log{log1}, nil).Run(func(args mock.Arguments) {
rcancel()
wg.Add(1)
go func() {
defer wg.Done()
select {
case lp.replayStart <- 4:
close(pass)
case <-ctx.Done():
return
}
}()
// We cannot return until we're sure that Replay() received the cancellation signal,
// otherwise replayComplete<- might be sent first
<-cancelled
})
ec.On("FilterLogs", mock.Anything, mock.Anything).Return([]types.Log{log1}, nil).Maybe() // in case task gets delayed by >= 100ms
head = evmtypes.Head{Number: 5}
t.Cleanup(lp.reset)
servicetest.Run(t, lp)
select {
case <-ctx.Done():
t.Errorf("timed out waiting for lp.run() to respond to second replay event")
case <-pass:
}
})`
$DIR/core/chains/evm/logpoller/log_poller_internal_test.go: `.Context(t)`
$DIR/core/chains/evm/logpoller/log_poller_internal_test.go: `.WithCancel(testutils.Context(t))`
$DIR/core/chains/evm/logpoller/log_poller_internal_test.go: `.Context(t)`
$DIR/core/chains/evm/logpoller/log_poller_internal_test.go: `.Wait()`
$DIR/core/chains/evm/logpoller/log_poller_internal_test.go: `.On("FilterLogs", mock.Anything, mock.Anything)`
$DIR/core/chains/evm/logpoller/log_poller_internal_test.go: `.Once()`
$DIR/core/chains/evm/logpoller/log_poller_internal_test.go: `.Return([]types.Log{log1}, nil)`
$DIR/core/chains/evm/logpoller/log_poller_internal_test.go: `.Run(func(args mock.Arguments) {
head = evmtypes.Head{Number: 4}
wg.Add(1)
go func() {
defer wg.Done()
assert.ErrorIs(t, lp.Replay(rctx, 4), ErrReplayInProgress)
close(cancelled)
}()
})`
$DIR/core/chains/evm/logpoller/log_poller_internal_test.go: `.Add(1)`
$DIR/core/chains/evm/logpoller/log_poller_internal_test.go: `.Done()`
$DIR/core/chains/evm/logpoller/log_poller_internal_test.go: `.On("FilterLogs", mock.Anything, mock.Anything)`
$DIR/core/chains/evm/logpoller/log_poller_internal_test.go: `.Once()`
$DIR/core/chains/evm/logpoller/log_poller_internal_test.go: `.Return([]types.Log{log1}, nil)`
$DIR/core/chains/evm/logpoller/log_poller_internal_test.go: `.Run(func(args mock.Arguments) {
rcancel()
wg.Add(1)
go func() {
defer wg.Done()
select {
case lp.replayStart <- 4:
close(pass)
case <-ctx.Done():
return
}
}()
// We cannot return until we're sure that Replay() received the cancellation signal,
// otherwise replayComplete<- might be sent first
<-cancelled
})`
$DIR/core/chains/evm/logpoller/log_poller_internal_test.go: `.Add(1)`
$DIR/core/chains/evm/logpoller/log_poller_internal_test.go: `.Done()`
$DIR/core/chains/evm/logpoller/log_poller_internal_test.go: `.Done()`
$DIR/core/chains/evm/logpoller/log_poller_internal_test.go: `.On("FilterLogs", mock.Anything, mock.Anything)`
$DIR/core/chains/evm/logpoller/log_poller_internal_test.go: `.Return([]types.Log{log1}, nil)`
$DIR/core/chains/evm/logpoller/log_poller_internal_test.go: `.Maybe()`
$DIR/core/chains/evm/logpoller/log_poller_internal_test.go: `.Cleanup(lp.reset)`
$DIR/core/chains/evm/logpoller/log_poller_internal_test.go: `.Run(t, lp)`
$DIR/core/chains/evm/logpoller/log_poller_internal_test.go: `.Done()`
$DIR/core/chains/evm/logpoller/log_poller_internal_test.go: `.On("FilterLogs", mock.Anything, mock.Anything)`
$DIR/core/chains/evm/logpoller/log_poller_internal_test.go: `.Unset()`
$DIR/core/chains/evm/logpoller/log_poller_internal_test.go: `.Run("shutdown during replay", func(t *testing.T) {
ctx := testutils.Context(t)
lp.backupPollerNextBlock = 0
pass := make(chan struct{})
done := make(chan struct{})
defer func() { <-done }()
ec.On("FilterLogs", mock.Anything, mock.Anything).Once().Return([]types.Log{log1}, nil).Run(func(args mock.Arguments) {
go func() {
defer close(done)
head = evmtypes.Head{Number: 4} // Restore latest block to 4, so this matches the fromBlock requested
select {
case lp.replayStart <- 4:
case <-ctx.Done():
}
}()
})
ec.On("FilterLogs", mock.Anything, mock.Anything).Once().Return([]types.Log{log1}, nil).Run(func(args mock.Arguments) {
go func() {
assert.NoError(t, lp.Close())
// prevent double close
lp.reset()
assert.NoError(t, lp.Start(ctx))
close(pass)
}()
})
ec.On("FilterLogs", mock.Anything, mock.Anything).Return([]types.Log{log1}, nil)
t.Cleanup(lp.reset)
head = evmtypes.Head{Number: 5} // Latest block must be > lastProcessed in order for SaveAndPollLogs() to call FilterLogs()
servicetest.Run(t, lp)
select {
case <-ctx.Done():
t.Error("timed out waiting for lp.run() to respond to shutdown event during replay")
case <-pass:
}
})`
$DIR/core/chains/evm/logpoller/log_poller_internal_test.go: `.Context(t)`
$DIR/core/chains/evm/logpoller/log_poller_internal_test.go: `.On("FilterLogs", mock.Anything, mock.Anything)`
$DIR/core/chains/evm/logpoller/log_poller_internal_test.go: `.Once()`
$DIR/core/chains/evm/logpoller/log_poller_internal_test.go: `.Return([]types.Log{log1}, nil)`
$DIR/core/chains/evm/logpoller/log_poller_internal_test.go: `.Run(func(args mock.Arguments) {
go func() {
defer close(done)
head = evmtypes.Head{Number: 4} // Restore latest block to 4, so this matches the fromBlock requested
select {
case lp.replayStart <- 4:
case <-ctx.Done():
}
}()
})`
$DIR/core/chains/evm/logpoller/log_poller_internal_test.go: `.Done()`
$DIR/core/chains/evm/logpoller/log_poller_internal_test.go: `.On("FilterLogs", mock.Anything, mock.Anything)`
$DIR/core/chains/evm/logpoller/log_poller_internal_test.go: `.Once()`
$DIR/core/chains/evm/logpoller/log_poller_internal_test.go: `.Return([]types.Log{log1}, nil)`
$DIR/core/chains/evm/logpoller/log_poller_internal_test.go: `.Run(func(args mock.Arguments) {
go func() {
assert.NoError(t, lp.Close())
// prevent double close
lp.reset()
assert.NoError(t, lp.Start(ctx))
close(pass)
}()
})`
$DIR/core/chains/evm/logpoller/log_poller_internal_test.go: `.reset()`
$DIR/core/chains/evm/logpoller/log_poller_internal_test.go: `.On("FilterLogs", mock.Anything, mock.Anything)`
$DIR/core/chains/evm/logpoller/log_poller_internal_test.go: `.Return([]types.Log{log1}, nil)`
$DIR/core/chains/evm/logpoller/log_poller_internal_test.go: `.Cleanup(lp.reset)`
$DIR/core/chains/evm/logpoller/log_poller_internal_test.go: `.Run(t, lp)`
$DIR/core/chains/evm/logpoller/log_poller_internal_test.go: `.Done()`
$DIR/core/chains/evm/logpoller/log_poller_internal_test.go: `.Run("ReplayAsync success", func(t *testing.T) {
t.Cleanup(lp.reset)
head = evmtypes.Head{Number: 5}
ec.On("FilterLogs", mock.Anything, mock.Anything).Return([]types.Log{log1}, nil)
mockBatchCallContext(t, ec)
servicetest.Run(t, lp)
lp.ReplayAsync(1)
recvStartReplay(testutils.Context(t), 2)
})`
$DIR/core/chains/evm/logpoller/log_poller_internal_test.go: `.Cleanup(lp.reset)`
$DIR/core/chains/evm/logpoller/log_poller_internal_test.go: `.On("FilterLogs", mock.Anything, mock.Anything)`
$DIR/core/chains/evm/logpoller/log_poller_internal_test.go: `.Return([]types.Log{log1}, nil)`
$DIR/core/chains/evm/logpoller/log_poller_internal_test.go: `.Run(t, lp)`
$DIR/core/chains/evm/logpoller/log_poller_internal_test.go: `.ReplayAsync(1)`
$DIR/core/chains/evm/logpoller/log_poller_internal_test.go: `.Context(t)`
$DIR/core/chains/evm/logpoller/log_poller_internal_test.go: `.Run("ReplayAsync error", func(t *testing.T) {
ctx := testutils.Context(t)
t.Cleanup(lp.reset)
servicetest.Run(t, lp)
head = evmtypes.Head{Number: 4}
anyErr := pkgerrors.New("async error")
observedLogs.TakeAll()
lp.ReplayAsync(4)
recvStartReplay(testutils.Context(t), 4)
select {
case lp.replayComplete <- anyErr:
time.Sleep(2 * time.Second)
case <-ctx.Done():
t.Error("timed out waiting to send replaceComplete")
}
require.Equal(t, 1, observedLogs.Len())
assert.Equal(t, observedLogs.All()[0].Message, anyErr.Error())
})`
$DIR/core/chains/evm/logpoller/log_poller_internal_test.go: `.Context(t)`
$DIR/core/chains/evm/logpoller/log_poller_internal_test.go: `.Cleanup(lp.reset)`
$DIR/core/chains/evm/logpoller/log_poller_internal_test.go: `.Run(t, lp)`
$DIR/core/chains/evm/logpoller/log_poller_internal_test.go: `.New("async error")`
$DIR/core/chains/evm/logpoller/log_poller_internal_test.go: `.TakeAll()`
$DIR/core/chains/evm/logpoller/log_poller_internal_test.go: `.ReplayAsync(4)`
$DIR/core/chains/evm/logpoller/log_poller_internal_test.go: `.Context(t)`
$DIR/core/chains/evm/logpoller/log_poller_internal_test.go: `.Sleep(2 * time.Second)`
$DIR/core/chains/evm/logpoller/log_poller_internal_test.go: `.Done()`
$DIR/core/chains/evm/logpoller/log_poller_internal_test.go: `.Run("run regular replay when there are not blocks in db", func(t *testing.T) {
ctx := testutils.Context(t)
err := lp.orm.DeleteLogsAndBlocksAfter(ctx, 0)
require.NoError(t, err)
lp.ReplayAsync(1)
recvStartReplay(testutils.Context(t), 1)
})`
$DIR/core/chains/evm/logpoller/log_poller_internal_test.go: `.Context(t)`
$DIR/core/chains/evm/logpoller/log_poller_internal_test.go: `.orm.DeleteLogsAndBlocksAfter(ctx, 0)`
$DIR/core/chains/evm/logpoller/log_poller_internal_test.go: `.ReplayAsync(1)`
$DIR/core/chains/evm/logpoller/log_poller_internal_test.go: `.Context(t)`
$DIR/core/chains/evm/logpoller/log_poller_internal_test.go: `.Context(t)`
$DIR/core/chains/evm/logpoller/log_poller_internal_test.go: `.orm.DeleteLogsAndBlocksAfter(ctx, 0)`
$DIR/core/chains/evm/logpoller/log_poller_internal_test.go: `.orm.InsertBlock(ctx, head.Hash, head.Number, head.Timestamp, head.Number)`
$DIR/core/chains/evm/logpoller/log_poller_internal_test.go: `.On("FilterLogs", mock.Anything, mock.Anything)`
$DIR/core/chains/evm/logpoller/log_poller_internal_test.go: `.Return([]types.Log{log1}, nil)`
$DIR/core/chains/evm/logpoller/log_poller_internal_test.go: `.Replay(ctx, 1)`
$DIR/core/chains/evm/logpoller/log_poller_internal_test.go: `.Test(t)`
$DIR/core/chains/evm/logpoller/log_poller_internal_test.go: `.NewSqlxDB(t)`
$DIR/core/chains/evm/logpoller/log_poller_internal_test.go: `.Context(t)`
$DIR/core/chains/evm/logpoller/log_poller_internal_test.go: `.Run("pick latest block from chain and use finality from config with finality disabled", func(t *testing.T) {
head := evmtypes.Head{Number: 4}
lpOpts.UseFinalityTag = false
lpOpts.FinalityDepth = int64(3)
ec := evmclimocks.NewClient(t)
ec.On("HeadByNumber", mock.Anything, mock.Anything).Return(&head, nil)
lp := NewLogPoller(orm, ec, lggr, lpOpts)
latestBlock, lastFinalizedBlockNumber, err := lp.latestBlocks(ctx)
require.NoError(t, err)
require.Equal(t, latestBlock.Number, head.Number)
require.Equal(t, lpOpts.FinalityDepth, latestBlock.Number-lastFinalizedBlockNumber)
})`
$DIR/core/chains/evm/logpoller/log_poller_internal_test.go: `.NewClient(t)`
$DIR/core/chains/evm/logpoller/log_poller_internal_test.go: `.On("HeadByNumber", mock.Anything, mock.Anything)`
$DIR/core/chains/evm/logpoller/log_poller_internal_test.go: `.Return(&head, nil)`
$DIR/core/chains/evm/logpoller/log_poller_internal_test.go: `.latestBlocks(ctx)`
$DIR/core/chains/evm/logpoller/log_poller_internal_test.go: `.Run("client returns data properly", func(t *testing.T) {
expectedLatestBlockNumber := int64(20)
expectedLastFinalizedBlockNumber := int64(12)
ec := evmclimocks.NewClient(t)
ec.On("BatchCallContext", mock.Anything, mock.MatchedBy(func(b []rpc.BatchElem) bool {
return len(b) == 2 &&
reflect.DeepEqual(b[0].Args, []interface{}{"latest", false}) &&
reflect.DeepEqual(b[1].Args, []interface{}{"finalized", false})
})).Return(nil).Run(func(args mock.Arguments) {
elems := args.Get(1).([]rpc.BatchElem)
// Latest block details
*(elems[0].Result.(*evmtypes.Head)) = evmtypes.Head{Number: expectedLatestBlockNumber, Hash: utils.RandomBytes32()}
// Finalized block details
*(elems[1].Result.(*evmtypes.Head)) = evmtypes.Head{Number: expectedLastFinalizedBlockNumber, Hash: utils.RandomBytes32()}
})
lpOpts.UseFinalityTag = true
lp := NewLogPoller(orm, ec, lggr, lpOpts)
latestBlock, lastFinalizedBlockNumber, err := lp.latestBlocks(ctx)
require.NoError(t, err)
require.Equal(t, expectedLatestBlockNumber, latestBlock.Number)
require.Equal(t, expectedLastFinalizedBlockNumber, lastFinalizedBlockNumber)
})`
$DIR/core/chains/evm/logpoller/log_poller_internal_test.go: `.NewClient(t)`
$DIR/core/chains/evm/logpoller/log_poller_internal_test.go: `.On("BatchCallContext", mock.Anything, mock.MatchedBy(func(b []rpc.BatchElem) bool {
return len(b) == 2 &&
reflect.DeepEqual(b[0].Args, []interface{}{"latest", false}) &&
reflect.DeepEqual(b[1].Args, []interface{}{"finalized", false})
}))`
$DIR/core/chains/evm/logpoller/log_poller_internal_test.go: `.MatchedBy(func(b []rpc.BatchElem) bool {
return len(b) == 2 &&
reflect.DeepEqual(b[0].Args, []interface{}{"latest", false}) &&
reflect.DeepEqual(b[1].Args, []interface{}{"finalized", false})
})`
$DIR/core/chains/evm/logpoller/log_poller_internal_test.go: `.DeepEqual(b[0].Args, []interface{}{"latest", false})`
$DIR/core/chains/evm/logpoller/log_poller_internal_test.go: `.DeepEqual(b[1].Args, []interface{}{"finalized", false})`
$DIR/core/chains/evm/logpoller/log_poller_internal_test.go: `.Return(nil)`
$DIR/core/chains/evm/logpoller/log_poller_internal_test.go: `.Run(func(args mock.Arguments) {
elems := args.Get(1).([]rpc.BatchElem)
// Latest block details
*(elems[0].Result.(*evmtypes.Head)) = evmtypes.Head{Number: expectedLatestBlockNumber, Hash: utils.RandomBytes32()}
// Finalized block details
*(elems[1].Result.(*evmtypes.Head)) = evmtypes.Head{Number: expectedLastFinalizedBlockNumber, Hash: utils.RandomBytes32()}
})`
$DIR/core/chains/evm/logpoller/log_poller_internal_test.go: `.Get(1)`
$DIR/core/chains/evm/logpoller/log_poller_internal_test.go: `.RandomBytes32()`
$DIR/core/chains/evm/logpoller/log_poller_internal_test.go: `.RandomBytes32()`
$DIR/core/chains/evm/logpoller/log_poller_internal_test.go: `.latestBlocks(ctx)`
$DIR/core/chains/evm/logpoller/log_poller_internal_test.go: `.Run("client returns error for at least one of the calls", func(t *testing.T) {
ec := evmclimocks.NewClient(t)
ec.On("BatchCallContext", mock.Anything, mock.Anything).Return(nil).Run(func(args mock.Arguments) {
elems := args.Get(1).([]rpc.BatchElem)
// Latest block details
*(elems[0].Result.(*evmtypes.Head)) = evmtypes.Head{Number: 10}
// Finalized block details
elems[1].Error = fmt.Errorf("some error")
})
lpOpts.UseFinalityTag = true
lp := NewLogPoller(orm, ec, lggr, lpOpts)
_, _, err := lp.latestBlocks(ctx)
require.Error(t, err)
})`
$DIR/core/chains/evm/logpoller/log_poller_internal_test.go: `.NewClient(t)`
$DIR/core/chains/evm/logpoller/log_poller_internal_test.go: `.On("BatchCallContext", mock.Anything, mock.Anything)`
$DIR/core/chains/evm/logpoller/log_poller_internal_test.go: `.Return(nil)`
$DIR/core/chains/evm/logpoller/log_poller_internal_test.go: `.Run(func(args mock.Arguments) {
elems := args.Get(1).([]rpc.BatchElem)
// Latest block details
*(elems[0].Result.(*evmtypes.Head)) = evmtypes.Head{Number: 10}
// Finalized block details
elems[1].Error = fmt.Errorf("some error")
})`
$DIR/core/chains/evm/logpoller/log_poller_internal_test.go: `.Get(1)`
$DIR/core/chains/evm/logpoller/log_poller_internal_test.go: `.latestBlocks(ctx)`
$DIR/core/chains/evm/logpoller/log_poller_internal_test.go: `.Run("BatchCall returns an error", func(t *testing.T) {
ec := evmclimocks.NewClient(t)
ec.On("BatchCallContext", mock.Anything, mock.Anything).Return(fmt.Errorf("some error"))
lpOpts.UseFinalityTag = true
lp := NewLogPoller(orm, ec, lggr, lpOpts)
_, _, err := lp.latestBlocks(ctx)
require.Error(t, err)
})`
$DIR/core/chains/evm/logpoller/log_poller_internal_test.go: `.NewClient(t)`
$DIR/core/chains/evm/logpoller/log_poller_internal_test.go: `.On("BatchCallContext", mock.Anything, mock.Anything)`
$DIR/core/chains/evm/logpoller/log_poller_internal_test.go: `.Return(fmt.Errorf("some error"))`
$DIR/core/chains/evm/logpoller/log_poller_internal_test.go: `.latestBlocks(ctx)`
$DIR/core/chains/evm/logpoller/log_poller_internal_test.go: `.Test(t)`
$DIR/core/chains/evm/logpoller/log_poller_internal_test.go: `.NewSqlxDB(t)`
$DIR/core/chains/evm/logpoller/log_poller_internal_test.go: `.Context(t)`
$DIR/core/chains/evm/logpoller/log_poller_internal_test.go: `.NewClient(t)`
$DIR/core/chains/evm/logpoller/log_poller_internal_test.go: `.New("Received unfinalized block 8 while expecting finalized block (latestFinalizedBlockNumber = 5)")`
$DIR/core/chains/evm/logpoller/log_poller_internal_test.go: `.New("Received unfinalized block 9 while expecting finalized block (latestFinalizedBlockNumber = 5)")`
$DIR/core/chains/evm/logpoller/log_poller_internal_test.go: `.Run(fmt.Sprintf("%s where useFinalityTag=%t", tc.name, lp.useFinalityTag), func(t *testing.T) {
blocks, err := lp.fetchBlocks(ctx, tc.blocksRequested, blockValidationReq)
if tc.expectedErr != nil {
require.Equal(t, err.Error(), tc.expectedErr.Error())
return // PASS
}
require.NoError(t, err)
for i, blockRequested := range tc.blocksRequested {
switch blockRequested {
case string(latestBlock):
assert.Equal(t, int64(8), blocks[i].Number)
case string(finalizedBlock):
assert.Equal(t, int64(5), blocks[i].Number)
default:
blockNum, err2 := hexutil.DecodeUint64(blockRequested)
require.NoError(t, err2)
assert.Equal(t, int64(blockNum), blocks[i].Number)
}
}
})`
$DIR/core/chains/evm/logpoller/log_poller_internal_test.go: `.Sprintf("%s where useFinalityTag=%t", tc.name, lp.useFinalityTag)`
$DIR/core/chains/evm/logpoller/log_poller_internal_test.go: `.fetchBlocks(ctx, tc.blocksRequested, blockValidationReq)`
$DIR/core/chains/evm/logpoller/log_poller_internal_test.go: `.DecodeUint64(blockRequested)`
$DIR/core/chains/evm/logpoller/log_poller_test.go: `func() {
defer logRuntime(t, time.Now())
_, err1 := o.SelectLogs(ctx, 750000, 800000, address1, event1)
require.NoError(t, err1)
}()`
$DIR/core/chains/evm/logpoller/log_poller_test.go: `func() {
defer logRuntime(t, time.Now())
_, err1 := o.SelectLatestLogEventSigsAddrsWithConfs(ctx, 0, []common.Address{address1}, []common.Hash{event1}, 0)
require.NoError(t, err1)
}()`
$DIR/core/chains/evm/logpoller/log_poller_test.go: `func() {
defer logRuntime(t, time.Now())
lgs, err1 := o.SelectLogsDataWordRange(ctx, address1, event1, 0, logpoller.EvmWord(50000), logpoller.EvmWord(50020), 0)
require.NoError(t, err1)
// 10 since every other log is for address1
require.Equal(t, 10, len(lgs))
}()`
$DIR/core/chains/evm/logpoller/log_poller_test.go: `func() {
defer logRuntime(t, time.Now())
lgs, err1 := o.SelectIndexedLogs(ctx, address2, event1, 1, []common.Hash{logpoller.EvmWord(50000), logpoller.EvmWord(50020)}, 0)
require.NoError(t, err1)
require.Equal(t, 2, len(lgs))
}()`
$DIR/core/chains/evm/logpoller/log_poller_test.go: `th.Client.Commit()`
$DIR/core/chains/evm/logpoller/log_poller_test.go: `_, err1 = th.Emitter1.EmitLog2(th.Owner, []*big.Int{big.NewInt(int64(i))})`
$DIR/core/chains/evm/logpoller/log_poller_test.go: `th.Client.Commit()`
$DIR/core/chains/evm/logpoller/log_poller_test.go: `testutils.AssertEventually(t, func() bool {
l, err2 := th.LogPoller.Logs(ctx, 3, 3, EmitterABI.Events["Log1"].ID, th.EmitterAddress1)
require.NoError(t, err2)
return len(l) == 1
})`
$DIR/core/chains/evm/logpoller/log_poller_test.go: `err = th.LogPoller.RegisterFilter(ctx, logpoller.Filter{
Name: "Emitter - log2",
EventSigs: []common.Hash{EmitterABI.Events["Log2"].ID},
Addresses: []common.Address{th.EmitterAddress1},
})`
$DIR/core/chains/evm/logpoller/log_poller_test.go: `logs, err = th.LogPoller.Logs(ctx, 2, 7, EmitterABI.Events["Log2"].ID, th.EmitterAddress1)`
$DIR/core/chains/evm/logpoller/log_poller_test.go: `logs, err = th.LogPoller.Logs(ctx, 2, 7, EmitterABI.Events["Log2"].ID, th.EmitterAddress1)`
$DIR/core/chains/evm/logpoller/log_poller_test.go: `cancel()`
$DIR/core/chains/evm/logpoller/log_poller_test.go: `t.Run(tt.name, func(t *testing.T) {
th := SetupTH(t,
logpoller.Opts{
UseFinalityTag: tt.finalityTag,
FinalityDepth: tt.finalityDepth,
BackfillBatchSize: 3,
RpcBatchSize: 2,
KeepFinalizedBlocksDepth: 1000,
BackupPollerBlockDelay: 100,
},
)
// later, we will need at least 32 blocks filled with logs for cache invalidation
for i := int64(0); i < 32; i++ {
// to invalidate geth's internal read-cache, a matching log must be found in the bloom Filter
// for each of the 32 blocks
tx, err := th.Emitter1.EmitLog1(th.Owner, []*big.Int{big.NewInt(i + 7)})
require.NoError(t, err)
require.NotNil(t, tx)
th.Client.Commit()
}
ctx := testutils.Context(t)
filter1 := logpoller.Filter{
Name: "filter1",
EventSigs: []common.Hash{
EmitterABI.Events["Log1"].ID,
EmitterABI.Events["Log2"].ID},
Addresses: []common.Address{th.EmitterAddress1},
}
err := th.LogPoller.RegisterFilter(ctx, filter1)
require.NoError(t, err)
filters, err := th.ORM.LoadFilters(ctx)
require.NoError(t, err)
require.Equal(t, 1, len(filters))
require.Equal(t, filter1, filters["filter1"])
err = th.LogPoller.RegisterFilter(ctx,
logpoller.Filter{
Name: "filter2",
EventSigs: []common.Hash{EmitterABI.Events["Log1"].ID},
Addresses: []common.Address{th.EmitterAddress2},
})
require.NoError(t, err)
defer func() {
assert.NoError(t, th.LogPoller.UnregisterFilter(ctx, "filter1"))
}()
defer func() {
assert.NoError(t, th.LogPoller.UnregisterFilter(ctx, "filter2"))
}()
// generate some tx's with logs
tx1, err := th.Emitter1.EmitLog1(th.Owner, []*big.Int{big.NewInt(1)})
require.NoError(t, err)
require.NotNil(t, tx1)
tx2, err := th.Emitter1.EmitLog2(th.Owner, []*big.Int{big.NewInt(2)})
require.NoError(t, err)
require.NotNil(t, tx2)
tx3, err := th.Emitter2.EmitLog1(th.Owner, []*big.Int{big.NewInt(3)})
require.NoError(t, err)
require.NotNil(t, tx3)
th.Client.Commit() // commit block 34 with 3 tx's included
h := th.Client.Blockchain().CurrentHeader() // get latest header
require.Equal(t, uint64(34), h.Number.Uint64())
// save these 3 receipts for later
receipts := rawdb.ReadReceipts(th.EthDB, h.Hash(), h.Number.Uint64(), uint64(time.Now().Unix()), params.AllEthashProtocolChanges)
require.NotZero(t, receipts.Len())
// Simulate a situation where the rpc server has a block, but no logs available for it yet
// this can't happen with geth itself, but can with other clients.
rawdb.WriteReceipts(th.EthDB, h.Hash(), h.Number.Uint64(), types.Receipts{}) // wipes out all logs for block 34
body := rawdb.ReadBody(th.EthDB, h.Hash(), h.Number.Uint64())
require.Equal(t, 3, len(body.Transactions))
txs := body.Transactions // save transactions for later
body.Transactions = types.Transactions{} // number of tx's must match # of logs for GetLogs() to succeed
rawdb.WriteBody(th.EthDB, h.Hash(), h.Number.Uint64(), body)
currentBlockNumber := th.PollAndSaveLogs(ctx, 1)
assert.Equal(t, int64(35), currentBlockNumber)
// simulate logs becoming available
rawdb.WriteReceipts(th.EthDB, h.Hash(), h.Number.Uint64(), receipts)
require.True(t, rawdb.HasReceipts(th.EthDB, h.Hash(), h.Number.Uint64()))
body.Transactions = txs
rawdb.WriteBody(th.EthDB, h.Hash(), h.Number.Uint64(), body)
// flush out cached block 34 by reading logs from first 32 blocks
query := ethereum.FilterQuery{
FromBlock: big.NewInt(int64(2)),
ToBlock: big.NewInt(int64(33)),
Addresses: []common.Address{th.EmitterAddress1},
Topics: [][]common.Hash{{EmitterABI.Events["Log1"].ID}},
}
fLogs, err := th.Client.FilterLogs(ctx, query)
require.NoError(t, err)
require.Equal(t, 32, len(fLogs))
// logs shouldn't show up yet
logs, err := th.LogPoller.Logs(ctx, 34, 34, EmitterABI.Events["Log1"].ID, th.EmitterAddress1)
require.NoError(t, err)
assert.Equal(t, 0, len(logs))
th.Client.Commit()
th.Client.Commit()
markBlockAsFinalized(t, th, 34)
// Run ordinary poller + backup poller at least once
currentBlock, _ := th.LogPoller.LatestBlock(ctx)
th.LogPoller.PollAndSaveLogs(ctx, currentBlock.BlockNumber+1)
th.LogPoller.BackupPollAndSaveLogs(ctx)
currentBlock, _ = th.LogPoller.LatestBlock(ctx)
require.Equal(t, int64(37), currentBlock.BlockNumber+1)
// logs still shouldn't show up, because we don't want to backfill the last finalized log
// to help with reorg detection
logs, err = th.LogPoller.Logs(ctx, 34, 34, EmitterABI.Events["Log1"].ID, th.EmitterAddress1)
require.NoError(t, err)
assert.Equal(t, 0, len(logs))
th.Client.Commit()
markBlockAsFinalized(t, th, 35)
// Run ordinary poller + backup poller at least once more
th.LogPoller.PollAndSaveLogs(ctx, currentBlockNumber+1)
th.LogPoller.BackupPollAndSaveLogs(ctx)
currentBlock, _ = th.LogPoller.LatestBlock(ctx)
require.Equal(t, int64(38), currentBlock.BlockNumber+1)
// all 3 logs in block 34 should show up now, thanks to backup logger
logs, err = th.LogPoller.Logs(ctx, 30, 37, EmitterABI.Events["Log1"].ID, th.EmitterAddress1)
require.NoError(t, err)
assert.Equal(t, 5, len(logs))
logs, err = th.LogPoller.Logs(ctx, 34, 34, EmitterABI.Events["Log2"].ID, th.EmitterAddress1)
require.NoError(t, err)
assert.Equal(t, 1, len(logs))
logs, err = th.LogPoller.Logs(ctx, 32, 36, EmitterABI.Events["Log1"].ID, th.EmitterAddress2)
require.NoError(t, err)
assert.Equal(t, 1, len(logs))
})`
$DIR/core/chains/evm/logpoller/log_poller_test.go: `th.Client.Commit()`
$DIR/core/chains/evm/logpoller/log_poller_test.go: `err = th.LogPoller.RegisterFilter(ctx,
logpoller.Filter{
Name: "filter2",
EventSigs: []common.Hash{EmitterABI.Events["Log1"].ID},
Addresses: []common.Address{th.EmitterAddress2},
})`
$DIR/core/chains/evm/logpoller/log_poller_test.go: `th.Client.Commit()`
$DIR/core/chains/evm/logpoller/log_poller_test.go: `rawdb.WriteReceipts(th.EthDB, h.Hash(), h.Number.Uint64(), types.Receipts{})`
$DIR/core/chains/evm/logpoller/log_poller_test.go: `body.Transactions = types.Transactions{}`
$DIR/core/chains/evm/logpoller/log_poller_test.go: `rawdb.WriteBody(th.EthDB, h.Hash(), h.Number.Uint64(), body)`
$DIR/core/chains/evm/logpoller/log_poller_test.go: `rawdb.WriteReceipts(th.EthDB, h.Hash(), h.Number.Uint64(), receipts)`
$DIR/core/chains/evm/logpoller/log_poller_test.go: `body.Transactions = txs`
$DIR/core/chains/evm/logpoller/log_poller_test.go: `rawdb.WriteBody(th.EthDB, h.Hash(), h.Number.Uint64(), body)`
$DIR/core/chains/evm/logpoller/log_poller_test.go: `th.Client.Commit()`
$DIR/core/chains/evm/logpoller/log_poller_test.go: `th.Client.Commit()`
$DIR/core/chains/evm/logpoller/log_poller_test.go: `markBlockAsFinalized(t, th, 34)`
$DIR/core/chains/evm/logpoller/log_poller_test.go: `th.LogPoller.PollAndSaveLogs(ctx, currentBlock.BlockNumber+1)`
$DIR/core/chains/evm/logpoller/log_poller_test.go: `th.LogPoller.BackupPollAndSaveLogs(ctx)`
$DIR/core/chains/evm/logpoller/log_poller_test.go: `currentBlock, _ = th.LogPoller.LatestBlock(ctx)`
$DIR/core/chains/evm/logpoller/log_poller_test.go: `logs, err = th.LogPoller.Logs(ctx, 34, 34, EmitterABI.Events["Log1"].ID, th.EmitterAddress1)`
$DIR/core/chains/evm/logpoller/log_poller_test.go: `th.Client.Commit()`
$DIR/core/chains/evm/logpoller/log_poller_test.go: `markBlockAsFinalized(t, th, 35)`
$DIR/core/chains/evm/logpoller/log_poller_test.go: `th.LogPoller.PollAndSaveLogs(ctx, currentBlockNumber+1)`
$DIR/core/chains/evm/logpoller/log_poller_test.go: `th.LogPoller.BackupPollAndSaveLogs(ctx)`
$DIR/core/chains/evm/logpoller/log_poller_test.go: `currentBlock, _ = th.LogPoller.LatestBlock(ctx)`
$DIR/core/chains/evm/logpoller/log_poller_test.go: `logs, err = th.LogPoller.Logs(ctx, 30, 37, EmitterABI.Events["Log1"].ID, th.EmitterAddress1)`
$DIR/core/chains/evm/logpoller/log_poller_test.go: `logs, err = th.LogPoller.Logs(ctx, 34, 34, EmitterABI.Events["Log2"].ID, th.EmitterAddress1)`
$DIR/core/chains/evm/logpoller/log_poller_test.go: `logs, err = th.LogPoller.Logs(ctx, 32, 36, EmitterABI.Events["Log1"].ID, th.EmitterAddress2)`
$DIR/core/chains/evm/logpoller/log_poller_test.go: `th.Client.Commit()`
$DIR/core/chains/evm/logpoller/log_poller_test.go: `markBlockAsFinalized(t, th, currentBlock-10)`
$DIR/core/chains/evm/logpoller/log_poller_test.go: `err = th.LogPoller.RegisterFilter(ctx, logpoller.Filter{
Name: "Test Emitter",
EventSigs: []common.Hash{EmitterABI.Events["Log1"].ID},
Addresses: []common.Address{th.EmitterAddress1},
})`
$DIR/core/chains/evm/logpoller/log_poller_test.go: `th.LogPoller.BackupPollAndSaveLogs(ctx)`
$DIR/core/chains/evm/logpoller/log_poller_test.go: `th.Client.Commit()`
$DIR/core/chains/evm/logpoller/log_poller_test.go: `markBlockAsFinalized(t, th, currentBlock)`
$DIR/core/chains/evm/logpoller/log_poller_test.go: `th.LogPoller.BackupPollAndSaveLogs(ctx)`
$DIR/core/chains/evm/logpoller/log_poller_test.go: `logs, err = th.LogPoller.Logs(
ctx,
0,
currentBlock+1,
EmitterABI.Events["Log1"].ID,
th.EmitterAddress1,
)`
$DIR/core/chains/evm/logpoller/log_poller_test.go: `th.Client.Commit()`
$DIR/core/chains/evm/logpoller/log_poller_test.go: `th.Client.Commit()`
$DIR/core/chains/evm/logpoller/log_poller_test.go: `markBlockAsFinalized(t, th, header.Number.Int64())`
$DIR/core/chains/evm/logpoller/log_poller_test.go: `th.PollAndSaveLogs(ctx, 1)`
$DIR/core/chains/evm/logpoller/log_poller_test.go: `err = th.LogPoller.RegisterFilter(ctx, logpoller.Filter{
Name: "Test Emitter",
EventSigs: []common.Hash{EmitterABI.Events["Log1"].ID},
Addresses: []common.Address{th.EmitterAddress1},
})`
$DIR/core/chains/evm/logpoller/log_poller_test.go: `th.LogPoller.BackupPollAndSaveLogs(ctx)`
$DIR/core/chains/evm/logpoller/log_poller_test.go: `th.Client.Commit()`
$DIR/core/chains/evm/logpoller/log_poller_test.go: `markBlockAsFinalized(t, th, firstBatchBlock-1)`
$DIR/core/chains/evm/logpoller/log_poller_test.go: `th.Client.Commit()`
$DIR/core/chains/evm/logpoller/log_poller_test.go: `markBlockAsFinalized(t, th, secondBatchBlock-1)`
$DIR/core/chains/evm/logpoller/log_poller_test.go: `th.LogPoller.BackupPollAndSaveLogs(ctx)`
$DIR/core/chains/evm/logpoller/log_poller_test.go: `blk, err = th.Client.BlockByHash(ctx, hash)`
$DIR/core/chains/evm/logpoller/log_poller_test.go: `_, err = th.Emitter1.EmitLog1(th.Owner, []*big.Int{big.NewInt(1)})`
$DIR/core/chains/evm/logpoller/log_poller_test.go: `hash = th.Client.Commit()`
$DIR/core/chains/evm/logpoller/log_poller_test.go: `blk, err = th.Client.BlockByHash(ctx, hash)`
$DIR/core/chains/evm/logpoller/log_poller_test.go: `th.Client.Commit()`
$DIR/core/chains/evm/logpoller/log_poller_test.go: `_, err = th.Emitter2.EmitLog2(th.Owner, []*big.Int{big.NewInt(2)})`
$DIR/core/chains/evm/logpoller/log_poller_test.go: `hash = th.Client.Commit()`
$DIR/core/chains/evm/logpoller/log_poller_test.go: `blk, err = th.Client.BlockByHash(ctx, hash)`
$DIR/core/chains/evm/logpoller/log_poller_test.go: `th.PollAndSaveLogs(ctx, lb.BlockNumber+1)`
$DIR/core/chains/evm/logpoller/log_poller_test.go: `testParams.MinSuccessfulTests = 100`
$DIR/core/chains/evm/logpoller/log_poller_test.go: `owner.GasPrice = big.NewInt(10e9)`
$DIR/core/chains/evm/logpoller/log_poller_test.go: `p.Property("synchronized with geth", prop.ForAll(func(mineOrReorg []uint64) bool {
// After the set of reorgs, we should have the same canonical blocks that geth does.
t.Log("Starting test", mineOrReorg)
chainID := testutils.NewRandomEVMChainID()
// Set up a test chain with a log emitting contract deployed.
orm := logpoller.NewORM(chainID, db, lggr)
// Note this property test is run concurrently and the sim is not threadsafe.
ec := backends.NewSimulatedBackend(map[common.Address]core.GenesisAccount{
owner.From: {
Balance: big.NewInt(0).Mul(big.NewInt(10), big.NewInt(1e18)),
},
}, 10e6)
_, _, emitter1, err := log_emitter.DeployLogEmitter(owner, ec)
require.NoError(t, err)
lpOpts := logpoller.Opts{
PollPeriod: 15 * time.Second,
FinalityDepth: int64(finalityDepth),
BackfillBatchSize: 3,
RpcBatchSize: 2,
KeepFinalizedBlocksDepth: 1000,
}
lp := logpoller.NewLogPoller(orm, client.NewSimulatedBackendClient(t, ec, chainID), lggr, lpOpts)
for i := 0; i < finalityDepth; i++ { // Have enough blocks that we could reorg the full finalityDepth-1.
ec.Commit()
}
currentBlockNumber := int64(1)
lp.PollAndSaveLogs(testutils.Context(t), currentBlockNumber)
currentBlock, err := lp.LatestBlock(testutils.Context(t))
require.NoError(t, err)
matchesGeth := func() bool {
// Check every block is identical
latest, err1 := ec.BlockByNumber(testutils.Context(t), nil)
require.NoError(t, err1)
for i := 1; i < int(latest.NumberU64()); i++ {
ourBlock, err1 := lp.BlockByNumber(testutils.Context(t), int64(i))
require.NoError(t, err1)
gethBlock, err1 := ec.BlockByNumber(testutils.Context(t), big.NewInt(int64(i)))
require.NoError(t, err1)
if ourBlock.BlockHash != gethBlock.Hash() {
t.Logf("Initial poll our block differs at height %d got %x want %x\n", i, ourBlock.BlockHash, gethBlock.Hash())
return false
}
}
return true
}
if !matchesGeth() {
return false
}
// Randomly pick to mine or reorg
for i := 0; i < numChainInserts; i++ {
if rand.Bool() {
// Mine blocks
for j := 0; j < int(mineOrReorg[i]); j++ {
ec.Commit()
latest, err1 := ec.BlockByNumber(testutils.Context(t), nil)
require.NoError(t, err1)
t.Log("mined block", latest.Hash())
}
} else {
// Reorg blocks
latest, err1 := ec.BlockByNumber(testutils.Context(t), nil)
require.NoError(t, err1)
reorgedBlock := big.NewInt(0).Sub(latest.Number(), big.NewInt(int64(mineOrReorg[i])))
reorg, err1 := ec.BlockByNumber(testutils.Context(t), reorgedBlock)
require.NoError(t, err1)
require.NoError(t, ec.Fork(testutils.Context(t), reorg.Hash()))
t.Logf("Reorging from (%v, %x) back to (%v, %x)\n", latest.NumberU64(), latest.Hash(), reorgedBlock.Uint64(), reorg.Hash())
// Actually need to change the block here to trigger the reorg.
_, err1 = emitter1.EmitLog1(owner, []*big.Int{big.NewInt(1)})
require.NoError(t, err1)
for j := 0; j < int(mineOrReorg[i]+1); j++ { // Need +1 to make it actually longer height so we detect it.
ec.Commit()
}
latest, err1 = ec.BlockByNumber(testutils.Context(t), nil)
require.NoError(t, err1)
t.Logf("New latest (%v, %x), latest parent %x)\n", latest.NumberU64(), latest.Hash(), latest.ParentHash())
}
lp.PollAndSaveLogs(testutils.Context(t), currentBlock.BlockNumber)
currentBlock, err = lp.LatestBlock(testutils.Context(t))
require.NoError(t, err)
}
return matchesGeth()
}, gen.SliceOfN(numChainInserts, gen.UInt64Range(1, uint64(finalityDepth-1)))))`
$DIR/core/chains/evm/logpoller/log_poller_test.go: `ec.Commit()`
$DIR/core/chains/evm/logpoller/log_poller_test.go: `lp.PollAndSaveLogs(testutils.Context(t), currentBlockNumber)`
$DIR/core/chains/evm/logpoller/log_poller_test.go: `ec.Commit()`
$DIR/core/chains/evm/logpoller/log_poller_test.go: `_, err1 = emitter1.EmitLog1(owner, []*big.Int{big.NewInt(1)})`
$DIR/core/chains/evm/logpoller/log_poller_test.go: `ec.Commit()`
$DIR/core/chains/evm/logpoller/log_poller_test.go: `latest, err1 = ec.BlockByNumber(testutils.Context(t), nil)`
$DIR/core/chains/evm/logpoller/log_poller_test.go: `lp.PollAndSaveLogs(testutils.Context(t), currentBlock.BlockNumber)`
$DIR/core/chains/evm/logpoller/log_poller_test.go: `currentBlock, err = lp.LatestBlock(testutils.Context(t))`
$DIR/core/chains/evm/logpoller/log_poller_test.go: `t.Run(tt.name, func(t *testing.T) {
lpOpts := logpoller.Opts{
UseFinalityTag: tt.finalityTag,
FinalityDepth: tt.finalityDepth,
BackfillBatchSize: 3,
RpcBatchSize: 2,
KeepFinalizedBlocksDepth: 1000,
}
th := SetupTH(t, lpOpts)
// Set up a log poller listening for log emitter logs.
err := th.LogPoller.RegisterFilter(testutils.Context(t), logpoller.Filter{
Name: "Test Emitter 1 & 2",
EventSigs: []common.Hash{EmitterABI.Events["Log1"].ID, EmitterABI.Events["Log2"].ID},
Addresses: []common.Address{th.EmitterAddress1, th.EmitterAddress2},
})
require.NoError(t, err)
b, err := th.Client.BlockByNumber(testutils.Context(t), nil)
require.NoError(t, err)
require.Equal(t, uint64(1), b.NumberU64())
require.Equal(t, uint64(10), b.Time())
// Test scenario: single block in chain, no logs.
// Chain genesis <- 1
// DB: empty
newStart := th.PollAndSaveLogs(testutils.Context(t), 1)
assert.Equal(t, int64(2), newStart)
// We expect to have saved block 1.
lpb, err := th.ORM.SelectBlockByNumber(testutils.Context(t), 1)
require.NoError(t, err)
assert.Equal(t, lpb.BlockHash, b.Hash())
assert.Equal(t, lpb.BlockNumber, int64(b.NumberU64()))
assert.Equal(t, int64(1), int64(b.NumberU64()))
assert.Equal(t, uint64(10), b.Time())
// No logs.
lgs, err := th.ORM.SelectLogsByBlockRange(testutils.Context(t), 1, 1)
require.NoError(t, err)
assert.Equal(t, 0, len(lgs))
th.assertHaveCanonical(t, 1, 1)
// Polling again should be a noop, since we are at the latest.
newStart = th.PollAndSaveLogs(testutils.Context(t), newStart)
assert.Equal(t, int64(2), newStart)
latest, err := th.ORM.SelectLatestBlock(testutils.Context(t))
require.NoError(t, err)
assert.Equal(t, int64(1), latest.BlockNumber)
th.assertHaveCanonical(t, 1, 1)
// Test scenario: one log 2 block chain.
// Chain gen <- 1 <- 2 (L1)
// DB: 1
_, err = th.Emitter1.EmitLog1(th.Owner, []*big.Int{big.NewInt(1)})
require.NoError(t, err)
th.Client.Commit()
// Polling should get us the L1 log.
newStart = th.PollAndSaveLogs(testutils.Context(t), newStart)
assert.Equal(t, int64(3), newStart)
latest, err = th.ORM.SelectLatestBlock(testutils.Context(t))
require.NoError(t, err)
assert.Equal(t, int64(2), latest.BlockNumber)
lgs, err = th.ORM.SelectLogsByBlockRange(testutils.Context(t), 1, 3)
require.NoError(t, err)
require.Equal(t, 1, len(lgs))
assert.Equal(t, th.EmitterAddress1, lgs[0].Address)
assert.Equal(t, latest.BlockHash, lgs[0].BlockHash)
assert.Equal(t, latest.BlockTimestamp, lgs[0].BlockTimestamp)
assert.Equal(t, hexutil.Encode(lgs[0].Topics[0]), EmitterABI.Events["Log1"].ID.String())
assert.Equal(t, hexutil.MustDecode(`0x0000000000000000000000000000000000000000000000000000000000000001`),
lgs[0].Data)
// Test scenario: single block reorg with log.
// Chain gen <- 1 <- 2 (L1_1)
// \ 2'(L1_2) <- 3
// DB: 1, 2
// - Detect a reorg,
// - Update the block 2's hash
// - Save L1'
// - L1_1 deleted
reorgedOutBlock, err := th.Client.BlockByNumber(testutils.Context(t), big.NewInt(2))
require.NoError(t, err)
lca, err := th.Client.BlockByNumber(testutils.Context(t), big.NewInt(1))
require.NoError(t, err)
require.NoError(t, th.Client.Fork(testutils.Context(t), lca.Hash()))
_, err = th.Emitter1.EmitLog1(th.Owner, []*big.Int{big.NewInt(2)})
require.NoError(t, err)
// Create 2'
th.Client.Commit()
// Create 3 (we need a new block for us to do any polling and detect the reorg).
th.Client.Commit()
newStart = th.PollAndSaveLogs(testutils.Context(t), newStart)
assert.Equal(t, int64(4), newStart)
latest, err = th.ORM.SelectLatestBlock(testutils.Context(t))
require.NoError(t, err)
assert.Equal(t, int64(3), latest.BlockNumber)
lgs, err = th.ORM.SelectLogsByBlockRange(testutils.Context(t), 1, 3)
require.NoError(t, err)
require.Equal(t, 1, len(lgs))
assert.Equal(t, hexutil.MustDecode(`0x0000000000000000000000000000000000000000000000000000000000000002`), lgs[0].Data)
th.assertHaveCanonical(t, 1, 3)
// Test scenario: reorg back to previous tip.
// Chain gen <- 1 <- 2 (L1_1) <- 3' (L1_3) <- 4
// \ 2'(L1_2) <- 3
require.NoError(t, th.Client.Fork(testutils.Context(t), reorgedOutBlock.Hash()))
_, err = th.Emitter1.EmitLog1(th.Owner, []*big.Int{big.NewInt(3)})
require.NoError(t, err)
// Create 3'
th.Client.Commit()
// Create 4
th.Client.Commit()
// Mark block 1 as finalized
markBlockAsFinalized(t, th, 1)
newStart = th.PollAndSaveLogs(testutils.Context(t), newStart)
assert.Equal(t, int64(5), newStart)
latest, err = th.ORM.SelectLatestBlock(testutils.Context(t))
require.NoError(t, err)
assert.Equal(t, int64(4), latest.BlockNumber)
lgs, err = th.ORM.SelectLogsByBlockRange(testutils.Context(t), 1, 3)
require.NoError(t, err)
// We expect ONLY L1_1 and L1_3 since L1_2 is reorg'd out.
assert.Equal(t, 2, len(lgs))
assert.Equal(t, int64(2), lgs[0].BlockNumber)
assert.Equal(t, hexutil.MustDecode(`0x0000000000000000000000000000000000000000000000000000000000000001`), lgs[0].Data)
assert.Equal(t, int64(3), lgs[1].BlockNumber)
assert.Equal(t, hexutil.MustDecode(`0x0000000000000000000000000000000000000000000000000000000000000003`), lgs[1].Data)
th.assertHaveCanonical(t, 1, 1)
th.assertHaveCanonical(t, 3, 4)
th.assertDontHave(t, 2, 2) // 2 gets backfilled
// Test scenario: multiple logs per block for many blocks (also after reorg).
// Chain gen <- 1 <- 2 (L1_1) <- 3' L1_3 <- 4 <- 5 (L1_4, L2_5) <- 6 (L1_6)
// \ 2'(L1_2) <- 3
// DB: 1, 2', 3'
// - Should save 4, 5, 6 blocks
// - Should obtain logs L1_3, L2_5, L1_6
_, err = th.Emitter1.EmitLog1(th.Owner, []*big.Int{big.NewInt(4)})
require.NoError(t, err)
_, err = th.Emitter2.EmitLog1(th.Owner, []*big.Int{big.NewInt(5)})
require.NoError(t, err)
// Create 4
th.Client.Commit()
_, err = th.Emitter1.EmitLog1(th.Owner, []*big.Int{big.NewInt(6)})
require.NoError(t, err)
// Create 5
th.Client.Commit()
// Mark block 2 as finalized
markBlockAsFinalized(t, th, 3)
newStart = th.PollAndSaveLogs(testutils.Context(t), newStart)
assert.Equal(t, int64(7), newStart)
lgs, err = th.ORM.SelectLogsByBlockRange(testutils.Context(t), 4, 6)
require.NoError(t, err)
require.Equal(t, 3, len(lgs))
assert.Equal(t, hexutil.MustDecode(`0x0000000000000000000000000000000000000000000000000000000000000004`), lgs[0].Data)
assert.Equal(t, th.EmitterAddress1, lgs[0].Address)
assert.Equal(t, hexutil.MustDecode(`0x0000000000000000000000000000000000000000000000000000000000000005`), lgs[1].Data)
assert.Equal(t, th.EmitterAddress2, lgs[1].Address)
assert.Equal(t, hexutil.MustDecode(`0x0000000000000000000000000000000000000000000000000000000000000006`), lgs[2].Data)
assert.Equal(t, th.EmitterAddress1, lgs[2].Address)
th.assertHaveCanonical(t, 1, 1)
th.assertDontHave(t, 2, 2) // 2 gets backfilled
th.assertHaveCanonical(t, 3, 6)
// Test scenario: node down for exactly finality + 2 blocks
// Note we only backfill up to finalized - 1 blocks, because we need to save the
// Chain gen <- 1 <- 2 (L1_1) <- 3' L1_3 <- 4 <- 5 (L1_4, L2_5) <- 6 (L1_6) <- 7 (L1_7) <- 8 (L1_8) <- 9 (L1_9) <- 10 (L1_10)
// \ 2'(L1_2) <- 3
// DB: 1, 2, 3, 4, 5, 6
// - We expect block 7 to backfilled (treated as finalized)
// - Then block 8-10 to be handled block by block (treated as unfinalized).
for i := 7; i < 11; i++ {
_, err = th.Emitter1.EmitLog1(th.Owner, []*big.Int{big.NewInt(int64(i))})
require.NoError(t, err)
th.Client.Commit()
}
// Mark block 7 as finalized
markBlockAsFinalized(t, th, 7)
newStart = th.PollAndSaveLogs(testutils.Context(t), newStart)
assert.Equal(t, int64(11), newStart)
lgs, err = th.ORM.SelectLogsByBlockRange(testutils.Context(t), 7, 9)
require.NoError(t, err)
require.Equal(t, 3, len(lgs))
assert.Equal(t, hexutil.MustDecode(`0x0000000000000000000000000000000000000000000000000000000000000007`), lgs[0].Data)
assert.Equal(t, int64(7), lgs[0].BlockNumber)
assert.Equal(t, hexutil.MustDecode(`0x0000000000000000000000000000000000000000000000000000000000000008`), lgs[1].Data)
assert.Equal(t, int64(8), lgs[1].BlockNumber)
assert.Equal(t, hexutil.MustDecode(`0x0000000000000000000000000000000000000000000000000000000000000009`), lgs[2].Data)
assert.Equal(t, int64(9), lgs[2].BlockNumber)
th.assertDontHave(t, 7, 7) // Do not expect to save backfilled blocks.
th.assertHaveCanonical(t, 8, 10)
// Test scenario large backfill (multiple batches)
// Chain gen <- 1 <- 2 (L1_1) <- 3' L1_3 <- 4 <- 5 (L1_4, L2_5) <- 6 (L1_6) <- 7 (L1_7) <- 8 (L1_8) <- 9 (L1_9) <- 10..16
// \ 2'(L1_2) <- 3
// DB: 1, 2, 3, 4, 5, 6, (backfilled 7), 8, 9, 10
// - 11, 12, 13 backfilled in batch 1
// - 14 backfilled in batch 2
// - 15, 16, 17 to be treated as unfinalized
for i := 11; i < 18; i++ {
_, err = th.Emitter1.EmitLog1(th.Owner, []*big.Int{big.NewInt(int64(i))})
require.NoError(t, err)
th.Client.Commit()
}
// Mark block 14 as finalized
markBlockAsFinalized(t, th, 14)
newStart = th.PollAndSaveLogs(testutils.Context(t), newStart)
assert.Equal(t, int64(18), newStart)
lgs, err = th.ORM.SelectLogsByBlockRange(testutils.Context(t), 11, 17)
require.NoError(t, err)
assert.Equal(t, 7, len(lgs))
th.assertHaveCanonical(t, 14, 16) // Should have last finalized block plus unfinalized blocks
th.assertDontHave(t, 11, 13) // Should not have older finalized blocks
// Verify that a custom block timestamp will get written to db correctly also
b, err = th.Client.BlockByNumber(testutils.Context(t), nil)
require.NoError(t, err)
require.Equal(t, uint64(17), b.NumberU64())
require.Equal(t, uint64(170), b.Time())
require.NoError(t, th.Client.AdjustTime(1*time.Hour))
th.Client.Commit()
b, err = th.Client.BlockByNumber(testutils.Context(t), nil)
require.NoError(t, err)
require.Equal(t, uint64(180+time.Hour.Seconds()), b.Time())
})`
$DIR/core/chains/evm/logpoller/log_poller_test.go: `th.assertHaveCanonical(t, 1, 1)`
$DIR/core/chains/evm/logpoller/log_poller_test.go: `newStart = th.PollAndSaveLogs(testutils.Context(t), newStart)`
$DIR/core/chains/evm/logpoller/log_poller_test.go: `th.assertHaveCanonical(t, 1, 1)`
$DIR/core/chains/evm/logpoller/log_poller_test.go: `_, err = th.Emitter1.EmitLog1(th.Owner, []*big.Int{big.NewInt(1)})`
$DIR/core/chains/evm/logpoller/log_poller_test.go: `th.Client.Commit()`
$DIR/core/chains/evm/logpoller/log_poller_test.go: `newStart = th.PollAndSaveLogs(testutils.Context(t), newStart)`
$DIR/core/chains/evm/logpoller/log_poller_test.go: `latest, err = th.ORM.SelectLatestBlock(testutils.Context(t))`
$DIR/core/chains/evm/logpoller/log_poller_test.go: `lgs, err = th.ORM.SelectLogsByBlockRange(testutils.Context(t), 1, 3)`
$DIR/core/chains/evm/logpoller/log_poller_test.go: `_, err = th.Emitter1.EmitLog1(th.Owner, []*big.Int{big.NewInt(2)})`
$DIR/core/chains/evm/logpoller/log_poller_test.go: `th.Client.Commit()`
$DIR/core/chains/evm/logpoller/log_poller_test.go: `th.Client.Commit()`
$DIR/core/chains/evm/logpoller/log_poller_test.go: `newStart = th.PollAndSaveLogs(testutils.Context(t), newStart)`
$DIR/core/chains/evm/logpoller/log_poller_test.go: `latest, err = th.ORM.SelectLatestBlock(testutils.Context(t))`
$DIR/core/chains/evm/logpoller/log_poller_test.go: `lgs, err = th.ORM.SelectLogsByBlockRange(testutils.Context(t), 1, 3)`
$DIR/core/chains/evm/logpoller/log_poller_test.go: `th.assertHaveCanonical(t, 1, 3)`
$DIR/core/chains/evm/logpoller/log_poller_test.go: `_, err = th.Emitter1.EmitLog1(th.Owner, []*big.Int{big.NewInt(3)})`
$DIR/core/chains/evm/logpoller/log_poller_test.go: `th.Client.Commit()`
$DIR/core/chains/evm/logpoller/log_poller_test.go: `th.Client.Commit()`
$DIR/core/chains/evm/logpoller/log_poller_test.go: `markBlockAsFinalized(t, th, 1)`
$DIR/core/chains/evm/logpoller/log_poller_test.go: `newStart = th.PollAndSaveLogs(testutils.Context(t), newStart)`
$DIR/core/chains/evm/logpoller/log_poller_test.go: `latest, err = th.ORM.SelectLatestBlock(testutils.Context(t))`
$DIR/core/chains/evm/logpoller/log_poller_test.go: `lgs, err = th.ORM.SelectLogsByBlockRange(testutils.Context(t), 1, 3)`
$DIR/core/chains/evm/logpoller/log_poller_test.go: `th.assertHaveCanonical(t, 1, 1)`
$DIR/core/chains/evm/logpoller/log_poller_test.go: `th.assertHaveCanonical(t, 3, 4)`
$DIR/core/chains/evm/logpoller/log_poller_test.go: `th.assertDontHave(t, 2, 2)`
$DIR/core/chains/evm/logpoller/log_poller_test.go: `_, err = th.Emitter1.EmitLog1(th.Owner, []*big.Int{big.NewInt(4)})`
$DIR/core/chains/evm/logpoller/log_poller_test.go: `_, err = th.Emitter2.EmitLog1(th.Owner, []*big.Int{big.NewInt(5)})`
$DIR/core/chains/evm/logpoller/log_poller_test.go: `th.Client.Commit()`
$DIR/core/chains/evm/logpoller/log_poller_test.go: `_, err = th.Emitter1.EmitLog1(th.Owner, []*big.Int{big.NewInt(6)})`
$DIR/core/chains/evm/logpoller/log_poller_test.go: `th.Client.Commit()`
$DIR/core/chains/evm/logpoller/log_poller_test.go: `markBlockAsFinalized(t, th, 3)`
$DIR/core/chains/evm/logpoller/log_poller_test.go: `newStart = th.PollAndSaveLogs(testutils.Context(t), newStart)`
$DIR/core/chains/evm/logpoller/log_poller_test.go: `lgs, err = th.ORM.SelectLogsByBlockRange(testutils.Context(t), 4, 6)`
$DIR/core/chains/evm/logpoller/log_poller_test.go: `th.assertHaveCanonical(t, 1, 1)`
$DIR/core/chains/evm/logpoller/log_poller_test.go: `th.assertDontHave(t, 2, 2)`
$DIR/core/chains/evm/logpoller/log_poller_test.go: `th.assertHaveCanonical(t, 3, 6)`
$DIR/core/chains/evm/logpoller/log_poller_test.go: `_, err = th.Emitter1.EmitLog1(th.Owner, []*big.Int{big.NewInt(int64(i))})`
$DIR/core/chains/evm/logpoller/log_poller_test.go: `th.Client.Commit()`
$DIR/core/chains/evm/logpoller/log_poller_test.go: `markBlockAsFinalized(t, th, 7)`
$DIR/core/chains/evm/logpoller/log_poller_test.go: `newStart = th.PollAndSaveLogs(testutils.Context(t), newStart)`
$DIR/core/chains/evm/logpoller/log_poller_test.go: `lgs, err = th.ORM.SelectLogsByBlockRange(testutils.Context(t), 7, 9)`
$DIR/core/chains/evm/logpoller/log_poller_test.go: `th.assertDontHave(t, 7, 7)`
$DIR/core/chains/evm/logpoller/log_poller_test.go: `th.assertHaveCanonical(t, 8, 10)`
$DIR/core/chains/evm/logpoller/log_poller_test.go: `_, err = th.Emitter1.EmitLog1(th.Owner, []*big.Int{big.NewInt(int64(i))})`
$DIR/core/chains/evm/logpoller/log_poller_test.go: `th.Client.Commit()`
$DIR/core/chains/evm/logpoller/log_poller_test.go: `markBlockAsFinalized(t, th, 14)`
$DIR/core/chains/evm/logpoller/log_poller_test.go: `newStart = th.PollAndSaveLogs(testutils.Context(t), newStart)`
$DIR/core/chains/evm/logpoller/log_poller_test.go: `lgs, err = th.ORM.SelectLogsByBlockRange(testutils.Context(t), 11, 17)`
$DIR/core/chains/evm/logpoller/log_poller_test.go: `th.assertHaveCanonical(t, 14, 16)`
$DIR/core/chains/evm/logpoller/log_poller_test.go: `th.assertDontHave(t, 11, 13)`
$DIR/core/chains/evm/logpoller/log_poller_test.go: `b, err = th.Client.BlockByNumber(testutils.Context(t), nil)`
$DIR/core/chains/evm/logpoller/log_poller_test.go: `th.Client.Commit()`
$DIR/core/chains/evm/logpoller/log_poller_test.go: `b, err = th.Client.BlockByNumber(testutils.Context(t), nil)`
$DIR/core/chains/evm/logpoller/log_poller_test.go: `t.Run(tt.name, func(t *testing.T) {
th := SetupTH(t, logpoller.Opts{
UseFinalityTag: tt.finalityTag,
FinalityDepth: tt.finalityDepth,
BackfillBatchSize: 3,
RpcBatchSize: 2,
KeepFinalizedBlocksDepth: 1000,
BackupPollerBlockDelay: 100,
})
// Set up a log poller listening for log emitter logs.
err := th.LogPoller.RegisterFilter(testutils.Context(t), logpoller.Filter{
Name: "Test Emitter",
EventSigs: []common.Hash{EmitterABI.Events["Log1"].ID},
Addresses: []common.Address{th.EmitterAddress1},
})
require.NoError(t, err)
// Test scenario
// Chain gen <- 1 <- 2 <- 3 (finalized) <- 4 (L1_1)
_, err = th.Emitter1.EmitLog1(th.Owner, []*big.Int{big.NewInt(1)})
require.NoError(t, err)
th.Client.Commit()
th.Client.Commit()
th.Client.Commit()
markBlockAsFinalized(t, th, 3)
// Polling should get us the L1 log.
firstPoll := th.PollAndSaveLogs(testutils.Context(t), 1)
assert.Equal(t, int64(5), firstPoll)
assert.NoError(t, th.LogPoller.Healthy())
// Fork deeper than finality depth
// Chain gen <- 1 <- 2 <- 3 (finalized) <- 4 (L1_1)
// \ 2' <- 3' <- 4' <- 5' <- 6' (finalized) <- 7' <- 8' <- 9' <- 10' (L1_2)
lca, err := th.Client.BlockByNumber(testutils.Context(t), big.NewInt(1))
require.NoError(t, err)
require.NoError(t, th.Client.Fork(testutils.Context(t), lca.Hash()))
// Create 2'
_, err = th.Emitter1.EmitLog1(th.Owner, []*big.Int{big.NewInt(2)})
require.NoError(t, err)
th.Client.Commit()
// Create 3-10
for i := 3; i < 10; i++ {
_, err = th.Emitter1.EmitLog1(th.Owner, []*big.Int{big.NewInt(int64(i))})
require.NoError(t, err)
th.Client.Commit()
}
markBlockAsFinalized(t, th, 6)
secondPoll := th.PollAndSaveLogs(testutils.Context(t), firstPoll)
assert.Equal(t, firstPoll, secondPoll)
assert.Equal(t, logpoller.ErrFinalityViolated, th.LogPoller.Healthy())
// Manually remove latest block from the log poller to bring it back to life
// LogPoller should be healthy again after first poll
// Chain gen <- 1
// \ 2' <- 3' <- 4' <- 5' <- 6' (finalized) <- 7' <- 8' <- 9' <- 10' (L1_2)
require.NoError(t, th.ORM.DeleteLogsAndBlocksAfter(testutils.Context(t), 2))
// Poll from latest
recoveryPoll := th.PollAndSaveLogs(testutils.Context(t), 1)
assert.Equal(t, int64(10), recoveryPoll)
assert.NoError(t, th.LogPoller.Healthy())
})`
$DIR/core/chains/evm/logpoller/log_poller_test.go: `_, err = th.Emitter1.EmitLog1(th.Owner, []*big.Int{big.NewInt(1)})`
$DIR/core/chains/evm/logpoller/log_poller_test.go: `th.Client.Commit()`
$DIR/core/chains/evm/logpoller/log_poller_test.go: `th.Client.Commit()`
$DIR/core/chains/evm/logpoller/log_poller_test.go: `th.Client.Commit()`
$DIR/core/chains/evm/logpoller/log_poller_test.go: `markBlockAsFinalized(t, th, 3)`
$DIR/core/chains/evm/logpoller/log_poller_test.go: `_, err = th.Emitter1.EmitLog1(th.Owner, []*big.Int{big.NewInt(2)})`
$DIR/core/chains/evm/logpoller/log_poller_test.go: `th.Client.Commit()`
$DIR/core/chains/evm/logpoller/log_poller_test.go: `_, err = th.Emitter1.EmitLog1(th.Owner, []*big.Int{big.NewInt(int64(i))})`
$DIR/core/chains/evm/logpoller/log_poller_test.go: `th.Client.Commit()`
$DIR/core/chains/evm/logpoller/log_poller_test.go: `markBlockAsFinalized(t, th, 6)`
$DIR/core/chains/evm/logpoller/log_poller_test.go: `t.Run(tt.name, func(t *testing.T) {
lpOpts := logpoller.Opts{
UseFinalityTag: tt.finalityTag,
FinalityDepth: tt.finalityDepth,
BackfillBatchSize: 3,
RpcBatchSize: 2,
KeepFinalizedBlocksDepth: 1000,
}
th := SetupTH(t, lpOpts)
// Set up a log poller listening for log emitter logs.
err := th.LogPoller.RegisterFilter(testutils.Context(t), logpoller.Filter{
Name: "Test Emitter",
EventSigs: []common.Hash{EmitterABI.Events["Log1"].ID},
Addresses: []common.Address{th.EmitterAddress1},
})
require.NoError(t, err)
// Test scenario: one log 2 block chain.
// Chain gen <- 1 <- 2 (L1_1)
// DB: 1
_, err = th.Emitter1.EmitLog1(th.Owner, []*big.Int{big.NewInt(1)})
require.NoError(t, err)
th.Client.Commit()
markBlockAsFinalized(t, th, 1)
// Polling should get us the L1 log.
newStart := th.PollAndSaveLogs(testutils.Context(t), 1)
assert.NoError(t, th.LogPoller.Healthy())
assert.Equal(t, int64(3), newStart)
// Check that L1_1 has a proper data payload
lgs, err := th.ORM.SelectLogsByBlockRange(testutils.Context(t), 2, 2)
require.NoError(t, err)
require.NotZero(t, len(lgs))
assert.Equal(t, hexutil.MustDecode(`0x0000000000000000000000000000000000000000000000000000000000000001`), lgs[0].Data)
// Single block reorg and log poller not working for a while, mine blocks and progress with finalization
// Chain gen <- 1 <- 2 (L1_1)
// \ 2'(L1_2) <- 3 <- 4 <- 5 <- 6 (finalized on chain) <- 7 <- 8 <- 9 <- 10
lca, err := th.Client.BlockByNumber(testutils.Context(t), big.NewInt(1))
require.NoError(t, err)
require.NoError(t, th.Client.Fork(testutils.Context(t), lca.Hash()))
// Create 2'
_, err = th.Emitter1.EmitLog1(th.Owner, []*big.Int{big.NewInt(2)})
require.NoError(t, err)
th.Client.Commit()
// Create 3-10
for i := 3; i < 10; i++ {
_, err = th.Emitter1.EmitLog1(th.Owner, []*big.Int{big.NewInt(int64(i))})
require.NoError(t, err)
th.Client.Commit()
}
markBlockAsFinalized(t, th, 6)
newStart = th.PollAndSaveLogs(testutils.Context(t), newStart)
assert.Equal(t, int64(10), newStart)
assert.NoError(t, th.LogPoller.Healthy())
// Expect L1_2 to be properly updated
lgs, err = th.ORM.SelectLogsByBlockRange(testutils.Context(t), 2, 2)
require.NoError(t, err)
require.NotZero(t, len(lgs))
assert.Equal(t, hexutil.MustDecode(`0x0000000000000000000000000000000000000000000000000000000000000002`), lgs[0].Data)
th.assertHaveCanonical(t, 1, 1)
th.assertDontHave(t, 2, 3) // These blocks are backfilled
th.assertHaveCanonical(t, 5, 10)
})`
$DIR/core/chains/evm/logpoller/log_poller_test.go: `_, err = th.Emitter1.EmitLog1(th.Owner, []*big.Int{big.NewInt(1)})`
$DIR/core/chains/evm/logpoller/log_poller_test.go: `th.Client.Commit()`
$DIR/core/chains/evm/logpoller/log_poller_test.go: `markBlockAsFinalized(t, th, 1)`
$DIR/core/chains/evm/logpoller/log_poller_test.go: `_, err = th.Emitter1.EmitLog1(th.Owner, []*big.Int{big.NewInt(2)})`
$DIR/core/chains/evm/logpoller/log_poller_test.go: `th.Client.Commit()`
$DIR/core/chains/evm/logpoller/log_poller_test.go: `_, err = th.Emitter1.EmitLog1(th.Owner, []*big.Int{big.NewInt(int64(i))})`
$DIR/core/chains/evm/logpoller/log_poller_test.go: `th.Client.Commit()`
$DIR/core/chains/evm/logpoller/log_poller_test.go: `markBlockAsFinalized(t, th, 6)`
$DIR/core/chains/evm/logpoller/log_poller_test.go: `newStart = th.PollAndSaveLogs(testutils.Context(t), newStart)`
$DIR/core/chains/evm/logpoller/log_poller_test.go: `lgs, err = th.ORM.SelectLogsByBlockRange(testutils.Context(t), 2, 2)`
$DIR/core/chains/evm/logpoller/log_poller_test.go: `th.assertHaveCanonical(t, 1, 1)`
$DIR/core/chains/evm/logpoller/log_poller_test.go: `th.assertDontHave(t, 2, 3)`
$DIR/core/chains/evm/logpoller/log_poller_test.go: `th.assertHaveCanonical(t, 5, 10)`
$DIR/core/chains/evm/logpoller/log_poller_test.go: `err = th.LogPoller.RegisterFilter(testutils.Context(t), filter2)`
$DIR/core/chains/evm/logpoller/log_poller_test.go: `err = th.LogPoller.RegisterFilter(testutils.Context(t), filter3)`
$DIR/core/chains/evm/logpoller/log_poller_test.go: `filter, ok = filters["second Filter"]`
$DIR/core/chains/evm/logpoller/log_poller_test.go: `filter, ok = filters["third Filter"]`
$DIR/core/chains/evm/logpoller/log_poller_test.go: `t.Run("HasFilter", func(t *testing.T) {
assert.True(t, th.LogPoller.HasFilter("first Filter"))
assert.True(t, th.LogPoller.HasFilter("second Filter"))
assert.True(t, th.LogPoller.HasFilter("third Filter"))
assert.False(t, th.LogPoller.HasFilter("fourth Filter"))
})`
$DIR/core/chains/evm/logpoller/log_poller_test.go: `th.Client.Commit()`
$DIR/core/chains/evm/logpoller/log_poller_test.go: `_, err = th.Emitter1.EmitLog1(th.Owner, []*big.Int{big.NewInt(2)})`
$DIR/core/chains/evm/logpoller/log_poller_test.go: `th.Client.Commit()`
$DIR/core/chains/evm/logpoller/log_poller_test.go: `err = th.LogPoller.RegisterFilter(testutils.Context(t), logpoller.Filter{
Name: "GetBlocks Test",
EventSigs: []common.Hash{EmitterABI.Events["Log1"].ID, EmitterABI.Events["Log2"].ID},
Addresses: []common.Address{th.EmitterAddress1, th.EmitterAddress2},
})`
$DIR/core/chains/evm/logpoller/log_poller_test.go: `blockNums = []uint64{1}`
$DIR/core/chains/evm/logpoller/log_poller_test.go: `blocks, err = th.LogPoller.GetBlocksRange(testutils.Context(t), blockNums)`
$DIR/core/chains/evm/logpoller/log_poller_test.go: `blockNums = []uint64{2}`
$DIR/core/chains/evm/logpoller/log_poller_test.go: `_, err = th.LogPoller.GetBlocksRange(testutils.Context(t), blockNums)`
$DIR/core/chains/evm/logpoller/log_poller_test.go: `th.Client.Commit()`
$DIR/core/chains/evm/logpoller/log_poller_test.go: `_, err = th.ORM.SelectBlockByNumber(testutils.Context(t), 2)`
$DIR/core/chains/evm/logpoller/log_poller_test.go: `th.Client.Commit()`
$DIR/core/chains/evm/logpoller/log_poller_test.go: `_, err = th.ORM.SelectBlockByNumber(testutils.Context(t), 3)`
$DIR/core/chains/evm/logpoller/log_poller_test.go: `th.LogPoller.PollAndSaveLogs(testutils.Context(t), 1)`
$DIR/core/chains/evm/logpoller/log_poller_test.go: `blockNums = []uint64{1, 2}`
$DIR/core/chains/evm/logpoller/log_poller_test.go: `blocks, err = th.LogPoller.GetBlocksRange(testutils.Context(t), blockNums)`
$DIR/core/chains/evm/logpoller/log_poller_test.go: `blockNums = []uint64{2, 1}`
$DIR/core/chains/evm/logpoller/log_poller_test.go: `cancel()`
$DIR/core/chains/evm/logpoller/log_poller_test.go: `_, err = th.LogPoller.GetBlocksRange(ctx, blockNums)`
$DIR/core/chains/evm/logpoller/log_poller_test.go: `ctx, cancel = context.WithCancel(testutils.Context(t))`
$DIR/core/chains/evm/logpoller/log_poller_test.go: `cancel()`
$DIR/core/chains/evm/logpoller/log_poller_test.go: `_, err = th.LogPoller.GetBlocksRange(ctx, blockNums)`
$DIR/core/chains/evm/logpoller/log_poller_test.go: `th.Client.Commit()`
$DIR/core/chains/evm/logpoller/log_poller_test.go: `th.Client.Commit()`
$DIR/core/chains/evm/logpoller/log_poller_test.go: `requested = int64(15)`
$DIR/core/chains/evm/logpoller/log_poller_test.go: `fromBlock, err = th.LogPoller.GetReplayFromBlock(testutils.Context(t), requested)`
$DIR/core/chains/evm/logpoller/log_poller_test.go: `requested = int64(7)`
$DIR/core/chains/evm/logpoller/log_poller_test.go: `fromBlock, err = th.LogPoller.GetReplayFromBlock(testutils.Context(t), requested)`
$DIR/core/chains/evm/logpoller/log_poller_test.go: `_, err = emitter.EmitLog1(owner, []*big.Int{big.NewInt(9)})`
$DIR/core/chains/evm/logpoller/log_poller_test.go: `_, err = emitter.EmitLog1(owner, []*big.Int{big.NewInt(7)})`
$DIR/core/chains/evm/logpoller/log_poller_test.go: `ec.Commit()`
$DIR/core/chains/evm/logpoller/log_poller_test.go: `ec.Commit()`
$DIR/core/chains/evm/logpoller/log_poller_test.go: `ec.Commit()`
$DIR/core/chains/evm/logpoller/log_poller_test.go: `err = lp.Replay(ctx, 5)`
$DIR/core/chains/evm/logpoller/log_poller_test.go: `err = lp.Replay(ctx, 2)`
$DIR/core/chains/evm/logpoller/log_poller_test.go: `time.Sleep(100 * time.Millisecond)`
$DIR/core/chains/evm/logpoller/log_poller_test.go: `testutils.AssertEventually(t, func() bool {
return observedLogs.Len() >= 1
})`
$DIR/core/chains/evm/logpoller/log_poller_test.go: `err = lp.Close()`
$DIR/core/chains/evm/logpoller/log_poller_test.go: `logMsgs[(obs.Entry.Message)] = 1`
$DIR/core/chains/evm/logpoller/log_poller_test.go: `logMsgs[(obs.Entry.Message)]++`
$DIR/core/chains/evm/logpoller/log_poller_test.go: `lp.PollAndSaveLogs(ctx, 5)`
$DIR/core/chains/evm/logpoller/log_poller_test.go: `obs.TakeAll()`
$DIR/core/chains/evm/logpoller/log_poller_test.go: `call1.Unset()`
$DIR/core/chains/evm/logpoller/log_poller_test.go: `call2.Unset()`
$DIR/core/chains/evm/logpoller/log_poller_test.go: `call1.On("HeadByNumber", mock.Anything, mock.Anything).Return(func(ctx context.Context, blockNumber *big.Int) (*evmtypes.Head, error) {
if blockNumber == nil {
return &evmtypes.Head{Number: 500}, nil // Simulate currentBlock = 300
}
return &evmtypes.Head{Number: blockNumber.Int64()}, nil
})`
$DIR/core/chains/evm/logpoller/log_poller_test.go: `call2.On("FilterLogs", mock.Anything, mock.Anything).Return(func(ctx context.Context, fq ethereum.FilterQuery) (logs []types.Log, err error) {
if fq.BlockHash != nil {
return []types.Log{}, nil // succeed when single block requested
}
return []types.Log{}, &clientErr // return "too many results" error if block range spans 4 or more blocks
})`
$DIR/core/chains/evm/logpoller/log_poller_test.go: `lp.PollAndSaveLogs(ctx, 298)`
$DIR/core/chains/evm/logpoller/log_poller_test.go: `block, err2 = o.SelectLatestBlock(ctx)`
$DIR/core/chains/evm/logpoller/log_poller_test.go: `th.Client.Commit()`
$DIR/core/chains/evm/logpoller/log_poller_test.go: `th.Client.Blockchain().SetFinalized(h)`
$DIR/core/chains/evm/logpoller/log_poller_test.go: `th.Client.Commit()`
$DIR/core/chains/evm/logpoller/log_poller_test.go: `t.Run(tt.name, func(t *testing.T) {
lpOpts := logpoller.Opts{
UseFinalityTag: tt.useFinalityTag,
FinalityDepth: tt.finalityDepth,
BackfillBatchSize: 3,
RpcBatchSize: 2,
KeepFinalizedBlocksDepth: 1000,
}
th := SetupTH(t, lpOpts)
// Should return error before the first poll and save
_, err := th.LogPoller.LatestBlock(ctx)
require.Error(t, err)
// Mark first block as finalized
h := th.Client.Blockchain().CurrentHeader()
th.Client.Blockchain().SetFinalized(h)
// Create a couple of blocks
for i := 0; i < numberOfBlocks-1; i++ {
th.Client.Commit()
}
th.PollAndSaveLogs(ctx, 1)
latestBlock, err := th.LogPoller.LatestBlock(ctx)
require.NoError(t, err)
require.Equal(t, int64(numberOfBlocks), latestBlock.BlockNumber)
require.Equal(t, tt.expectedFinalizedBlock, latestBlock.FinalizedBlockNumber)
})`
$DIR/core/chains/evm/logpoller/log_poller_test.go: `th.Client.Blockchain().SetFinalized(h)`
$DIR/core/chains/evm/logpoller/log_poller_test.go: `th.Client.Commit()`
$DIR/core/chains/evm/logpoller/log_poller_test.go: `th.PollAndSaveLogs(ctx, 1)`
$DIR/core/chains/evm/logpoller/log_poller_test.go: `t.Run(tt.name, func(t *testing.T) {
lpOpts := logpoller.Opts{
UseFinalityTag: tt.finalityTag,
FinalityDepth: tt.finalityDepth,
BackfillBatchSize: 3,
RpcBatchSize: 2,
KeepFinalizedBlocksDepth: 1000,
BackupPollerBlockDelay: 100,
}
th := SetupTH(t, lpOpts)
header, err := th.Client.HeaderByNumber(ctx, nil)
require.NoError(t, err)
genesisBlockTime := time.UnixMilli(int64(header.Time))
// Emit some logs in blocks
for i := 0; i < emittedLogs; i++ {
_, err2 := th.Emitter1.EmitLog1(th.Owner, []*big.Int{big.NewInt(int64(i))})
require.NoError(t, err2)
th.Client.Commit()
}
// First PollAndSave, no filters are registered
currentBlock := th.PollAndSaveLogs(ctx, 1)
err = th.LogPoller.RegisterFilter(ctx, logpoller.Filter{
Name: "Test Emitter",
EventSigs: []common.Hash{EmitterABI.Events["Log1"].ID},
Addresses: []common.Address{th.EmitterAddress1},
})
require.NoError(t, err)
// Emit blocks to cover finality depth, because backup always backfill up to the one block before last finalized
for i := 0; i < int(tt.finalityDepth)+1; i++ {
bh := th.Client.Commit()
markBlockAsFinalizedByHash(t, th, bh)
}
// LogPoller should backfill entire history
th.LogPoller.BackupPollAndSaveLogs(ctx)
require.NoError(t, err)
// Make sure that all logs are backfilled
logs, err := th.LogPoller.Logs(
ctx,
0,
currentBlock,
EmitterABI.Events["Log1"].ID,
th.EmitterAddress1,
)
require.NoError(t, err)
require.Len(t, logs, emittedLogs)
// We should get all the logs by the block_timestamp
logs, err = th.LogPoller.LogsCreatedAfter(
ctx,
EmitterABI.Events["Log1"].ID,
th.EmitterAddress1,
genesisBlockTime,
0,
)
require.NoError(t, err)
require.Len(t, logs, emittedLogs)
})`
$DIR/core/chains/evm/logpoller/log_poller_test.go: `th.Client.Commit()`
$DIR/core/chains/evm/logpoller/log_poller_test.go: `err = th.LogPoller.RegisterFilter(ctx, logpoller.Filter{
Name: "Test Emitter",
EventSigs: []common.Hash{EmitterABI.Events["Log1"].ID},
Addresses: []common.Address{th.EmitterAddress1},
})`
$DIR/core/chains/evm/logpoller/log_poller_test.go: `markBlockAsFinalizedByHash(t, th, bh)`
$DIR/core/chains/evm/logpoller/log_poller_test.go: `th.LogPoller.BackupPollAndSaveLogs(ctx)`
$DIR/core/chains/evm/logpoller/log_poller_test.go: `logs, err = th.LogPoller.LogsCreatedAfter(
ctx,
EmitterABI.Events["Log1"].ID,
th.EmitterAddress1,
genesisBlockTime,
0,
)`
$DIR/core/chains/evm/logpoller/log_poller_test.go: `t.Run(tt.name, func(t *testing.T) {
lpOpts := logpoller.Opts{
UseFinalityTag: true,
BackfillBatchSize: 3,
RpcBatchSize: 2,
KeepFinalizedBlocksDepth: tt.keepFinalizedBlocksDepth,
}
th := SetupTH(t, lpOpts)
for i := 1; i <= tt.blockToCreate; i++ {
err := th.ORM.InsertBlock(ctx, utils.RandomBytes32(), int64(i+10), time.Now(), int64(i))
require.NoError(t, err)
}
if tt.wantErr {
_, err := th.LogPoller.PruneOldBlocks(ctx)
require.Error(t, err)
return
}
allDeleted, err := th.LogPoller.PruneOldBlocks(ctx)
require.NoError(t, err)
assert.True(t, allDeleted)
blocks, err := th.ORM.GetBlocksRange(ctx, 0, math.MaxInt64)
require.NoError(t, err)
assert.Len(t, blocks, tt.blocksLeft)
})`
$DIR/core/chains/evm/logpoller/log_poller_test.go: `t.Run("Fails, if failed to select oldest block", func(t *testing.T) {
_, err := lp.FindLCA(ctx)
require.ErrorContains(t, err, "failed to select the latest block")
})`
$DIR/core/chains/evm/logpoller/log_poller_test.go: `t.Run("Fails, if caller's context canceled", func(t *testing.T) {
lCtx, cancel := context.WithCancel(ctx)
ec.On("HeadByHash", mock.Anything, latestBlockHash).Return(nil, nil).Run(func(_ mock.Arguments) {
cancel()
}).Once()
_, err := lp.FindLCA(lCtx)
require.ErrorContains(t, err, "aborted, FindLCA request cancelled")
})`
$DIR/core/chains/evm/logpoller/log_poller_test.go: `ec.On("HeadByHash", mock.Anything, latestBlockHash).Return(nil, nil).Run(func(_ mock.Arguments) {
cancel()
}).Once()`
$DIR/core/chains/evm/logpoller/log_poller_test.go: `cancel()`
$DIR/core/chains/evm/logpoller/log_poller_test.go: `t.Run("Fails, if RPC returns an error", func(t *testing.T) {
expectedError := fmt.Errorf("failed to call RPC")
ec.On("HeadByHash", mock.Anything, latestBlockHash).Return(nil, expectedError).Once()
_, err := lp.FindLCA(ctx)
require.ErrorContains(t, err, expectedError.Error())
})`
$DIR/core/chains/evm/logpoller/log_poller_test.go: `ec.On("HeadByHash", mock.Anything, latestBlockHash).Return(nil, expectedError).Once()`
$DIR/core/chains/evm/logpoller/log_poller_test.go: `t.Run("Fails, if block numbers do not match", func(t *testing.T) {
ec.On("HeadByHash", mock.Anything, latestBlockHash).Return(&evmtypes.Head{
Number: 123,
}, nil).Once()
_, err := lp.FindLCA(ctx)
require.ErrorContains(t, err, "expected block numbers to match")
})`
$DIR/core/chains/evm/logpoller/log_poller_test.go: `ec.On("HeadByHash", mock.Anything, latestBlockHash).Return(&evmtypes.Head{
Number: 123,
}, nil).Once()`
$DIR/core/chains/evm/logpoller/log_poller_test.go: `t.Run("Fails, if none of the blocks in db matches on chain", func(t *testing.T) {
ec.On("HeadByHash", mock.Anything, mock.Anything).Return(nil, nil).Times(3)
_, err := lp.FindLCA(ctx)
require.ErrorContains(t, err, "failed to find LCA, this means that whole database LogPoller state was reorged out of chain or RPC/Core node is misconfigured")
})`
$DIR/core/chains/evm/logpoller/log_poller_test.go: `ec.On("HeadByHash", mock.Anything, mock.Anything).Return(nil, nil).Times(3)`
$DIR/core/chains/evm/logpoller/log_poller_test.go: `t.Run(tc.Name, func(t *testing.T) {
// reset the database
require.NoError(t, orm.DeleteLogsAndBlocksAfter(ctx, 0))
for _, b := range tc.Blocks {
blockHashI++
hash := common.BigToHash(big.NewInt(blockHashI))
require.NoError(t, orm.InsertBlock(ctx, hash, int64(b.BN), time.Now(), 0))
// Hashes are unique for all test cases
var onChainBlock *evmtypes.Head
if b.Exists {
onChainBlock = &evmtypes.Head{Number: int64(b.BN)}
}
ec.On("HeadByHash", mock.Anything, hash).Return(onChainBlock, nil).Maybe()
}
result, err := lp.FindLCA(ctx)
if tc.ExpectedError != nil {
require.ErrorContains(t, err, tc.ExpectedError.Error())
} else {
require.NotNil(t, result)
require.Equal(t, result.BlockNumber, int64(tc.ExpectedBlockNumber), "expected block numbers to match")
}
})`
$DIR/core/chains/evm/logpoller/log_poller_test.go: `blockHashI++`
$DIR/core/chains/evm/logpoller/log_poller_test.go: `onChainBlock = &evmtypes.Head{Number: int64(b.BN)}`
$DIR/core/chains/evm/logpoller/log_poller_test.go: `ec.On("HeadByHash", mock.Anything, hash).Return(onChainBlock, nil).Maybe()`
$DIR/core/chains/evm/logpoller/log_poller_test.go: `.FullTestDBV2(t, nil)`
$DIR/core/chains/evm/logpoller/log_poller_test.go: `.Context(t)`
$DIR/core/chains/evm/logpoller/log_poller_test.go: `.NewInt(137)`
$DIR/core/chains/evm/logpoller/log_poller_test.go: `.NewORM(big.NewInt(137), db, logger.Test(t))`
$DIR/core/chains/evm/logpoller/log_poller_test.go: `.NewInt(137)`
$DIR/core/chains/evm/logpoller/log_poller_test.go: `.Test(t)`
$DIR/core/chains/evm/logpoller/log_poller_test.go: `.Now()`
$DIR/core/chains/evm/logpoller/log_poller_test.go: `.SelectLogs(ctx, 750000, 800000, address1, event1)`
$DIR/core/chains/evm/logpoller/log_poller_test.go: `.Now()`
$DIR/core/chains/evm/logpoller/log_poller_test.go: `.SelectLatestLogEventSigsAddrsWithConfs(ctx, 0, []common.Address{address1}, []common.Hash{event1}, 0)`
$DIR/core/chains/evm/logpoller/log_poller_test.go: `.Now()`
$DIR/core/chains/evm/logpoller/log_poller_test.go: `.SelectLogsDataWordRange(ctx, address1, event1, 0, logpoller.EvmWord(50000), logpoller.EvmWord(50020), 0)`
$DIR/core/chains/evm/logpoller/log_poller_test.go: `.EvmWord(50000)`
$DIR/core/chains/evm/logpoller/log_poller_test.go: `.EvmWord(50020)`
$DIR/core/chains/evm/logpoller/log_poller_test.go: `.Now()`
$DIR/core/chains/evm/logpoller/log_poller_test.go: `.SelectIndexedLogs(ctx, address2, event1, 1, []common.Hash{logpoller.EvmWord(50000), logpoller.EvmWord(50020)}, 0)`
$DIR/core/chains/evm/logpoller/log_poller_test.go: `.EvmWord(50000)`
$DIR/core/chains/evm/logpoller/log_poller_test.go: `.EvmWord(50020)`
$DIR/core/chains/evm/logpoller/log_poller_test.go: `.Now()`
$DIR/core/chains/evm/logpoller/log_poller_test.go: `.SelectIndexedLogsTopicRange(ctx, address1, event1, 1, logpoller.EvmWord(50000), logpoller.EvmWord(50020), 0)`
$DIR/core/chains/evm/logpoller/log_poller_test.go: `.EvmWord(50000)`
$DIR/core/chains/evm/logpoller/log_poller_test.go: `.EvmWord(50020)`
$DIR/core/chains/evm/logpoller/log_poller_test.go: `.Client.Commit()`
$DIR/core/chains/evm/logpoller/log_poller_test.go: `.Context(t)`
$DIR/core/chains/evm/logpoller/log_poller_test.go: `.Emitter1.EmitLog1(th.Owner, []*big.Int{big.NewInt(int64(i))})`
$DIR/core/chains/evm/logpoller/log_poller_test.go: `.NewInt(int64(i))`
$DIR/core/chains/evm/logpoller/log_poller_test.go: `.Emitter1.EmitLog2(th.Owner, []*big.Int{big.NewInt(int64(i))})`
$DIR/core/chains/evm/logpoller/log_poller_test.go: `.NewInt(int64(i))`
$DIR/core/chains/evm/logpoller/log_poller_test.go: `.Client.Commit()`
$DIR/core/chains/evm/logpoller/log_poller_test.go: `.LogPoller.Logs(ctx, 4, 7, EmitterABI.Events["Log1"].ID, th.EmitterAddress1)`
$DIR/core/chains/evm/logpoller/log_poller_test.go: `.AssertEventually(t, func() bool {
l, err2 := th.LogPoller.Logs(ctx, 3, 3, EmitterABI.Events["Log1"].ID, th.EmitterAddress1)
require.NoError(t, err2)
return len(l) == 1
})`
$DIR/core/chains/evm/logpoller/log_poller_test.go: `.LogPoller.Logs(ctx, 3, 3, EmitterABI.Events["Log1"].ID, th.EmitterAddress1)`
$DIR/core/chains/evm/logpoller/log_poller_test.go: `.LogPoller.RegisterFilter(ctx, logpoller.Filter{
Name: "Emitter - log2",
EventSigs: []common.Hash{EmitterABI.Events["Log2"].ID},
Addresses: []common.Address{th.EmitterAddress1},
})`
$DIR/core/chains/evm/logpoller/log_poller_test.go: `.LogPoller.Logs(ctx, 2, 7, EmitterABI.Events["Log2"].ID, th.EmitterAddress1)`
$DIR/core/chains/evm/logpoller/log_poller_test.go: `.LogPoller.Logs(ctx, 2, 7, EmitterABI.Events["Log2"].ID, th.EmitterAddress1)`
$DIR/core/chains/evm/logpoller/log_poller_test.go: `.WithCancel(testutils.Context(t))`
$DIR/core/chains/evm/logpoller/log_poller_test.go: `.Context(t)`
$DIR/core/chains/evm/logpoller/log_poller_test.go: `.LogPoller.Replay(ctx, 4)`
$DIR/core/chains/evm/logpoller/log_poller_test.go: `.Run(tt.name, func(t *testing.T) {
th := SetupTH(t,
logpoller.Opts{
UseFinalityTag: tt.finalityTag,
FinalityDepth: tt.finalityDepth,
BackfillBatchSize: 3,
RpcBatchSize: 2,
KeepFinalizedBlocksDepth: 1000,
BackupPollerBlockDelay: 100,
},
)
// later, we will need at least 32 blocks filled with logs for cache invalidation
for i := int64(0); i < 32; i++ {
// to invalidate geth's internal read-cache, a matching log must be found in the bloom Filter
// for each of the 32 blocks
tx, err := th.Emitter1.EmitLog1(th.Owner, []*big.Int{big.NewInt(i + 7)})
require.NoError(t, err)
require.NotNil(t, tx)
th.Client.Commit()
}
ctx := testutils.Context(t)
filter1 := logpoller.Filter{
Name: "filter1",
EventSigs: []common.Hash{
EmitterABI.Events["Log1"].ID,
EmitterABI.Events["Log2"].ID},
Addresses: []common.Address{th.EmitterAddress1},
}
err := th.LogPoller.RegisterFilter(ctx, filter1)
require.NoError(t, err)
filters, err := th.ORM.LoadFilters(ctx)
require.NoError(t, err)
require.Equal(t, 1, len(filters))
require.Equal(t, filter1, filters["filter1"])
err = th.LogPoller.RegisterFilter(ctx,
logpoller.Filter{
Name: "filter2",
EventSigs: []common.Hash{EmitterABI.Events["Log1"].ID},
Addresses: []common.Address{th.EmitterAddress2},
})
require.NoError(t, err)
defer func() {
assert.NoError(t, th.LogPoller.UnregisterFilter(ctx, "filter1"))
}()
defer func() {
assert.NoError(t, th.LogPoller.UnregisterFilter(ctx, "filter2"))
}()
// generate some tx's with logs
tx1, err := th.Emitter1.EmitLog1(th.Owner, []*big.Int{big.NewInt(1)})
require.NoError(t, err)
require.NotNil(t, tx1)
tx2, err := th.Emitter1.EmitLog2(th.Owner, []*big.Int{big.NewInt(2)})
require.NoError(t, err)
require.NotNil(t, tx2)
tx3, err := th.Emitter2.EmitLog1(th.Owner, []*big.Int{big.NewInt(3)})
require.NoError(t, err)
require.NotNil(t, tx3)
th.Client.Commit() // commit block 34 with 3 tx's included
h := th.Client.Blockchain().CurrentHeader() // get latest header
require.Equal(t, uint64(34), h.Number.Uint64())
// save these 3 receipts for later
receipts := rawdb.ReadReceipts(th.EthDB, h.Hash(), h.Number.Uint64(), uint64(time.Now().Unix()), params.AllEthashProtocolChanges)
require.NotZero(t, receipts.Len())
// Simulate a situation where the rpc server has a block, but no logs available for it yet
// this can't happen with geth itself, but can with other clients.
rawdb.WriteReceipts(th.EthDB, h.Hash(), h.Number.Uint64(), types.Receipts{}) // wipes out all logs for block 34
body := rawdb.ReadBody(th.EthDB, h.Hash(), h.Number.Uint64())
require.Equal(t, 3, len(body.Transactions))
txs := body.Transactions // save transactions for later
body.Transactions = types.Transactions{} // number of tx's must match # of logs for GetLogs() to succeed
rawdb.WriteBody(th.EthDB, h.Hash(), h.Number.Uint64(), body)
currentBlockNumber := th.PollAndSaveLogs(ctx, 1)
assert.Equal(t, int64(35), currentBlockNumber)
// simulate logs becoming available
rawdb.WriteReceipts(th.EthDB, h.Hash(), h.Number.Uint64(), receipts)
require.True(t, rawdb.HasReceipts(th.EthDB, h.Hash(), h.Number.Uint64()))
body.Transactions = txs
rawdb.WriteBody(th.EthDB, h.Hash(), h.Number.Uint64(), body)
// flush out cached block 34 by reading logs from first 32 blocks
query := ethereum.FilterQuery{
FromBlock: big.NewInt(int64(2)),
ToBlock: big.NewInt(int64(33)),
Addresses: []common.Address{th.EmitterAddress1},
Topics: [][]common.Hash{{EmitterABI.Events["Log1"].ID}},
}
fLogs, err := th.Client.FilterLogs(ctx, query)
require.NoError(t, err)
require.Equal(t, 32, len(fLogs))
// logs shouldn't show up yet
logs, err := th.LogPoller.Logs(ctx, 34, 34, EmitterABI.Events["Log1"].ID, th.EmitterAddress1)
require.NoError(t, err)
assert.Equal(t, 0, len(logs))
th.Client.Commit()
th.Client.Commit()
markBlockAsFinalized(t, th, 34)
// Run ordinary poller + backup poller at least once
currentBlock, _ := th.LogPoller.LatestBlock(ctx)
th.LogPoller.PollAndSaveLogs(ctx, currentBlock.BlockNumber+1)
th.LogPoller.BackupPollAndSaveLogs(ctx)
currentBlock, _ = th.LogPoller.LatestBlock(ctx)
require.Equal(t, int64(37), currentBlock.BlockNumber+1)
// logs still shouldn't show up, because we don't want to backfill the last finalized log
// to help with reorg detection
logs, err = th.LogPoller.Logs(ctx, 34, 34, EmitterABI.Events["Log1"].ID, th.EmitterAddress1)
require.NoError(t, err)
assert.Equal(t, 0, len(logs))
th.Client.Commit()
markBlockAsFinalized(t, th, 35)
// Run ordinary poller + backup poller at least once more
th.LogPoller.PollAndSaveLogs(ctx, currentBlockNumber+1)
th.LogPoller.BackupPollAndSaveLogs(ctx)
currentBlock, _ = th.LogPoller.LatestBlock(ctx)
require.Equal(t, int64(38), currentBlock.BlockNumber+1)
// all 3 logs in block 34 should show up now, thanks to backup logger
logs, err = th.LogPoller.Logs(ctx, 30, 37, EmitterABI.Events["Log1"].ID, th.EmitterAddress1)
require.NoError(t, err)
assert.Equal(t, 5, len(logs))
logs, err = th.LogPoller.Logs(ctx, 34, 34, EmitterABI.Events["Log2"].ID, th.EmitterAddress1)
require.NoError(t, err)
assert.Equal(t, 1, len(logs))
logs, err = th.LogPoller.Logs(ctx, 32, 36, EmitterABI.Events["Log1"].ID, th.EmitterAddress2)
require.NoError(t, err)
assert.Equal(t, 1, len(logs))
})`
$DIR/core/chains/evm/logpoller/log_poller_test.go: `.Emitter1.EmitLog1(th.Owner, []*big.Int{big.NewInt(i + 7)})`
$DIR/core/chains/evm/logpoller/log_poller_test.go: `.NewInt(i + 7)`
$DIR/core/chains/evm/logpoller/log_poller_test.go: `.Client.Commit()`
$DIR/core/chains/evm/logpoller/log_poller_test.go: `.Context(t)`
$DIR/core/chains/evm/logpoller/log_poller_test.go: `.LogPoller.RegisterFilter(ctx, filter1)`
$DIR/core/chains/evm/logpoller/log_poller_test.go: `.ORM.LoadFilters(ctx)`
$DIR/core/chains/evm/logpoller/log_poller_test.go: `.LogPoller.RegisterFilter(ctx,
logpoller.Filter{
Name: "filter2",
EventSigs: []common.Hash{EmitterABI.Events["Log1"].ID},
Addresses: []common.Address{th.EmitterAddress2},
})`
$DIR/core/chains/evm/logpoller/log_poller_test.go: `.Emitter1.EmitLog1(th.Owner, []*big.Int{big.NewInt(1)})`
$DIR/core/chains/evm/logpoller/log_poller_test.go: `.NewInt(1)`
$DIR/core/chains/evm/logpoller/log_poller_test.go: `.Emitter1.EmitLog2(th.Owner, []*big.Int{big.NewInt(2)})`
$DIR/core/chains/evm/logpoller/log_poller_test.go: `.NewInt(2)`
$DIR/core/chains/evm/logpoller/log_poller_test.go: `.Emitter2.EmitLog1(th.Owner, []*big.Int{big.NewInt(3)})`
$DIR/core/chains/evm/logpoller/log_poller_test.go: `.NewInt(3)`
$DIR/core/chains/evm/logpoller/log_poller_test.go: `.Client.Commit()`
$DIR/core/chains/evm/logpoller/log_poller_test.go: `.Client.Blockchain()`
$DIR/core/chains/evm/logpoller/log_poller_test.go: `.CurrentHeader()`
$DIR/core/chains/evm/logpoller/log_poller_test.go: `.ReadReceipts(th.EthDB, h.Hash(), h.Number.Uint64(), uint64(time.Now().Unix()), params.AllEthashProtocolChanges)`
$DIR/core/chains/evm/logpoller/log_poller_test.go: `.Hash()`
$DIR/core/chains/evm/logpoller/log_poller_test.go: `.Number.Uint64()`
$DIR/core/chains/evm/logpoller/log_poller_test.go: `.Now()`
$DIR/core/chains/evm/logpoller/log_poller_test.go: `.Unix()`
$DIR/core/chains/evm/logpoller/log_poller_test.go: `.WriteReceipts(th.EthDB, h.Hash(), h.Number.Uint64(), types.Receipts{})`
$DIR/core/chains/evm/logpoller/log_poller_test.go: `.Hash()`
$DIR/core/chains/evm/logpoller/log_poller_test.go: `.Number.Uint64()`
$DIR/core/chains/evm/logpoller/log_poller_test.go: `.ReadBody(th.EthDB, h.Hash(), h.Number.Uint64())`
$DIR/core/chains/evm/logpoller/log_poller_test.go: `.Hash()`
$DIR/core/chains/evm/logpoller/log_poller_test.go: `.Number.Uint64()`
$DIR/core/chains/evm/logpoller/log_poller_test.go: `.WriteBody(th.EthDB, h.Hash(), h.Number.Uint64(), body)`
$DIR/core/chains/evm/logpoller/log_poller_test.go: `.Hash()`
$DIR/core/chains/evm/logpoller/log_poller_test.go: `.Number.Uint64()`
$DIR/core/chains/evm/logpoller/log_poller_test.go: `.PollAndSaveLogs(ctx, 1)`
$DIR/core/chains/evm/logpoller/log_poller_test.go: `.WriteReceipts(th.EthDB, h.Hash(), h.Number.Uint64(), receipts)`
$DIR/core/chains/evm/logpoller/log_poller_test.go: `.Hash()`
$DIR/core/chains/evm/logpoller/log_poller_test.go: `.Number.Uint64()`
$DIR/core/chains/evm/logpoller/log_poller_test.go: `.WriteBody(th.EthDB, h.Hash(), h.Number.Uint64(), body)`
$DIR/core/chains/evm/logpoller/log_poller_test.go: `.Hash()`
$DIR/core/chains/evm/logpoller/log_poller_test.go: `.Number.Uint64()`
$DIR/core/chains/evm/logpoller/log_poller_test.go: `.NewInt(int64(2))`
$DIR/core/chains/evm/logpoller/log_poller_test.go: `.NewInt(int64(33))`
$DIR/core/chains/evm/logpoller/log_poller_test.go: `.Client.FilterLogs(ctx, query)`
$DIR/core/chains/evm/logpoller/log_poller_test.go: `.LogPoller.Logs(ctx, 34, 34, EmitterABI.Events["Log1"].ID, th.EmitterAddress1)`
$DIR/core/chains/evm/logpoller/log_poller_test.go: `.Client.Commit()`
$DIR/core/chains/evm/logpoller/log_poller_test.go: `.Client.Commit()`
$DIR/core/chains/evm/logpoller/log_poller_test.go: `.LogPoller.LatestBlock(ctx)`
$DIR/core/chains/evm/logpoller/log_poller_test.go: `.LogPoller.PollAndSaveLogs(ctx, currentBlock.BlockNumber+1)`
$DIR/core/chains/evm/logpoller/log_poller_test.go: `.LogPoller.BackupPollAndSaveLogs(ctx)`
$DIR/core/chains/evm/logpoller/log_poller_test.go: `.LogPoller.LatestBlock(ctx)`
$DIR/core/chains/evm/logpoller/log_poller_test.go: `.LogPoller.Logs(ctx, 34, 34, EmitterABI.Events["Log1"].ID, th.EmitterAddress1)`
$DIR/core/chains/evm/logpoller/log_poller_test.go: `.Client.Commit()`
$DIR/core/chains/evm/logpoller/log_poller_test.go: `.LogPoller.PollAndSaveLogs(ctx, currentBlockNumber+1)`
$DIR/core/chains/evm/logpoller/log_poller_test.go: `.LogPoller.BackupPollAndSaveLogs(ctx)`
$DIR/core/chains/evm/logpoller/log_poller_test.go: `.LogPoller.LatestBlock(ctx)`
$DIR/core/chains/evm/logpoller/log_poller_test.go: `.LogPoller.Logs(ctx, 30, 37, EmitterABI.Events["Log1"].ID, th.EmitterAddress1)`
$DIR/core/chains/evm/logpoller/log_poller_test.go: `.LogPoller.Logs(ctx, 34, 34, EmitterABI.Events["Log2"].ID, th.EmitterAddress1)`
$DIR/core/chains/evm/logpoller/log_poller_test.go: `.LogPoller.Logs(ctx, 32, 36, EmitterABI.Events["Log1"].ID, th.EmitterAddress2)`
$DIR/core/chains/evm/logpoller/log_poller_test.go: `.Context(t)`
$DIR/core/chains/evm/logpoller/log_poller_test.go: `.Client.HeaderByNumber(ctx, nil)`
$DIR/core/chains/evm/logpoller/log_poller_test.go: `.Emitter1.EmitLog1(th.Owner, []*big.Int{big.NewInt(int64(i))})`
$DIR/core/chains/evm/logpoller/log_poller_test.go: `.NewInt(int64(i))`
$DIR/core/chains/evm/logpoller/log_poller_test.go: `.Client.Commit()`
$DIR/core/chains/evm/logpoller/log_poller_test.go: `.PollAndSaveLogs(ctx, 1)`
$DIR/core/chains/evm/logpoller/log_poller_test.go: `.LogPoller.RegisterFilter(ctx, logpoller.Filter{
Name: "Test Emitter",
EventSigs: []common.Hash{EmitterABI.Events["Log1"].ID},
Addresses: []common.Address{th.EmitterAddress1},
})`
$DIR/core/chains/evm/logpoller/log_poller_test.go: `.LogPoller.BackupPollAndSaveLogs(ctx)`
$DIR/core/chains/evm/logpoller/log_poller_test.go: `.LogPoller.Logs(
ctx,
0,
currentBlock,
EmitterABI.Events["Log1"].ID,
th.EmitterAddress1,
)`
$DIR/core/chains/evm/logpoller/log_poller_test.go: `.Client.Commit()`
$DIR/core/chains/evm/logpoller/log_poller_test.go: `.LogPoller.BackupPollAndSaveLogs(ctx)`
$DIR/core/chains/evm/logpoller/log_poller_test.go: `.LogPoller.Logs(
ctx,
0,
currentBlock+1,
EmitterABI.Events["Log1"].ID,
th.EmitterAddress1,
)`
$DIR/core/chains/evm/logpoller/log_poller_test.go: `.Context(t)`
$DIR/core/chains/evm/logpoller/log_poller_test.go: `.Emitter1.EmitLog1(th.Owner, []*big.Int{big.NewInt(int64(i))})`
$DIR/core/chains/evm/logpoller/log_poller_test.go: `.NewInt(int64(i))`
$DIR/core/chains/evm/logpoller/log_poller_test.go: `.Client.Commit()`
$DIR/core/chains/evm/logpoller/log_poller_test.go: `.Client.Commit()`
$DIR/core/chains/evm/logpoller/log_poller_test.go: `.Client.HeaderByNumber(ctx, nil)`
$DIR/core/chains/evm/logpoller/log_poller_test.go: `.Number.Int64()`
$DIR/core/chains/evm/logpoller/log_poller_test.go: `.PollAndSaveLogs(ctx, 1)`
$DIR/core/chains/evm/logpoller/log_poller_test.go: `.LogPoller.LatestBlock(ctx)`
$DIR/core/chains/evm/logpoller/log_poller_test.go: `.LogPoller.RegisterFilter(ctx, logpoller.Filter{
Name: "Test Emitter",
EventSigs: []common.Hash{EmitterABI.Events["Log1"].ID},
Addresses: []common.Address{th.EmitterAddress1},
})`
$DIR/core/chains/evm/logpoller/log_poller_test.go: `.LogPoller.BackupPollAndSaveLogs(ctx)`
$DIR/core/chains/evm/logpoller/log_poller_test.go: `.LogPoller.Logs(
ctx,
0,
header.Number.Int64()+1,
EmitterABI.Events["Log1"].ID,
th.EmitterAddress1,
)`
$DIR/core/chains/evm/logpoller/log_poller_test.go: `.Number.Int64()`
$DIR/core/chains/evm/logpoller/log_poller_test.go: `.Context(t)`
$DIR/core/chains/evm/logpoller/log_poller_test.go: `.Emitter1.EmitLog1(th.Owner, []*big.Int{big.NewInt(int64(i))})`
$DIR/core/chains/evm/logpoller/log_poller_test.go: `.NewInt(int64(i))`
$DIR/core/chains/evm/logpoller/log_poller_test.go: `.Client.Commit()`
$DIR/core/chains/evm/logpoller/log_poller_test.go: `.PollAndSaveLogs(ctx, 1)`
$DIR/core/chains/evm/logpoller/log_poller_test.go: `.Emitter1.EmitLog1(th.Owner, []*big.Int{big.NewInt(int64(100 + i))})`
$DIR/core/chains/evm/logpoller/log_poller_test.go: `.NewInt(int64(100 + i))`
$DIR/core/chains/evm/logpoller/log_poller_test.go: `.Client.Commit()`
$DIR/core/chains/evm/logpoller/log_poller_test.go: `.PollAndSaveLogs(ctx, firstBatchBlock)`
$DIR/core/chains/evm/logpoller/log_poller_test.go: `.LogPoller.RegisterFilter(ctx, logpoller.Filter{
Name: "Test Emitter",
EventSigs: []common.Hash{EmitterABI.Events["Log1"].ID},
Addresses: []common.Address{th.EmitterAddress1},
})`
$DIR/core/chains/evm/logpoller/log_poller_test.go: `.LogPoller.BackupPollAndSaveLogs(ctx)`
$DIR/core/chains/evm/logpoller/log_poller_test.go: `.LogPoller.Logs(
ctx,
0,
secondBatchBlock,
EmitterABI.Events["Log1"].ID,
th.EmitterAddress1,
)`
$DIR/core/chains/evm/logpoller/log_poller_test.go: `.MustDecode(`0x000000000000000000000000000000000000000000000000000000000000000a`)`
$DIR/core/chains/evm/logpoller/log_poller_test.go: `.Context(t)`
$DIR/core/chains/evm/logpoller/log_poller_test.go: `.LogPoller.RegisterFilter(ctx, logpoller.Filter{Name: "convertLogs", EventSigs: events, Addresses: addresses})`
$DIR/core/chains/evm/logpoller/log_poller_test.go: `.Client.BlockByNumber(ctx, nil)`
$DIR/core/chains/evm/logpoller/log_poller_test.go: `.Time()`
$DIR/core/chains/evm/logpoller/log_poller_test.go: `.Client.Commit()`
$DIR/core/chains/evm/logpoller/log_poller_test.go: `.Client.BlockByHash(ctx, hash)`
$DIR/core/chains/evm/logpoller/log_poller_test.go: `.Emitter1.EmitLog1(th.Owner, []*big.Int{big.NewInt(1)})`
$DIR/core/chains/evm/logpoller/log_poller_test.go: `.NewInt(1)`
$DIR/core/chains/evm/logpoller/log_poller_test.go: `.Client.Commit()`
$DIR/core/chains/evm/logpoller/log_poller_test.go: `.Client.BlockByHash(ctx, hash)`
$DIR/core/chains/evm/logpoller/log_poller_test.go: `.Client.Commit()`
$DIR/core/chains/evm/logpoller/log_poller_test.go: `.Emitter2.EmitLog2(th.Owner, []*big.Int{big.NewInt(2)})`
$DIR/core/chains/evm/logpoller/log_poller_test.go: `.NewInt(2)`
$DIR/core/chains/evm/logpoller/log_poller_test.go: `.Client.Commit()`
$DIR/core/chains/evm/logpoller/log_poller_test.go: `.Client.BlockByHash(ctx, hash)`
$DIR/core/chains/evm/logpoller/log_poller_test.go: `.NewInt(2)`
$DIR/core/chains/evm/logpoller/log_poller_test.go: `.NewInt(5)`
$DIR/core/chains/evm/logpoller/log_poller_test.go: `.Client.FilterLogs(ctx, query)`
$DIR/core/chains/evm/logpoller/log_poller_test.go: `.LogPoller.LatestBlock(ctx)`
$DIR/core/chains/evm/logpoller/log_poller_test.go: `.PollAndSaveLogs(ctx, lb.BlockNumber+1)`
$DIR/core/chains/evm/logpoller/log_poller_test.go: `.LogPoller.Logs(ctx, 0, 20, EmitterABI.Events["Log1"].ID, th.EmitterAddress1)`
$DIR/core/chains/evm/logpoller/log_poller_test.go: `.LogPoller.Logs(ctx, 0, 20, EmitterABI.Events["Log2"].ID, th.EmitterAddress2)`
$DIR/core/chains/evm/logpoller/log_poller_test.go: `.Client.BlockByHash(ctx, lg1[0].BlockHash)`
$DIR/core/chains/evm/logpoller/log_poller_test.go: `.Client.BlockByHash(ctx, lg2[0].BlockHash)`
$DIR/core/chains/evm/logpoller/log_poller_test.go: `.Time()`
$DIR/core/chains/evm/logpoller/log_poller_test.go: `.BlockTimestamp.UTC()`
$DIR/core/chains/evm/logpoller/log_poller_test.go: `.Unix()`
$DIR/core/chains/evm/logpoller/log_poller_test.go: `.DefaultTestParameters()`
$DIR/core/chains/evm/logpoller/log_poller_test.go: `.NewProperties(testParams)`
$DIR/core/chains/evm/logpoller/log_poller_test.go: `.Test(t)`
$DIR/core/chains/evm/logpoller/log_poller_test.go: `.NewSqlxDB(t)`
$DIR/core/chains/evm/logpoller/log_poller_test.go: `.MustNewSimTransactor(t)`
$DIR/core/chains/evm/logpoller/log_poller_test.go: `.NewInt(10e9)`
$DIR/core/chains/evm/logpoller/log_poller_test.go: `.Property("synchronized with geth", prop.ForAll(func(mineOrReorg []uint64) bool {
// After the set of reorgs, we should have the same canonical blocks that geth does.
t.Log("Starting test", mineOrReorg)
chainID := testutils.NewRandomEVMChainID()
// Set up a test chain with a log emitting contract deployed.
orm := logpoller.NewORM(chainID, db, lggr)
// Note this property test is run concurrently and the sim is not threadsafe.
ec := backends.NewSimulatedBackend(map[common.Address]core.GenesisAccount{
owner.From: {
Balance: big.NewInt(0).Mul(big.NewInt(10), big.NewInt(1e18)),
},
}, 10e6)
_, _, emitter1, err := log_emitter.DeployLogEmitter(owner, ec)
require.NoError(t, err)
lpOpts := logpoller.Opts{
PollPeriod: 15 * time.Second,
FinalityDepth: int64(finalityDepth),
BackfillBatchSize: 3,
RpcBatchSize: 2,
KeepFinalizedBlocksDepth: 1000,
}
lp := logpoller.NewLogPoller(orm, client.NewSimulatedBackendClient(t, ec, chainID), lggr, lpOpts)
for i := 0; i < finalityDepth; i++ { // Have enough blocks that we could reorg the full finalityDepth-1.
ec.Commit()
}
currentBlockNumber := int64(1)
lp.PollAndSaveLogs(testutils.Context(t), currentBlockNumber)
currentBlock, err := lp.LatestBlock(testutils.Context(t))
require.NoError(t, err)
matchesGeth := func() bool {
// Check every block is identical
latest, err1 := ec.BlockByNumber(testutils.Context(t), nil)
require.NoError(t, err1)
for i := 1; i < int(latest.NumberU64()); i++ {
ourBlock, err1 := lp.BlockByNumber(testutils.Context(t), int64(i))
require.NoError(t, err1)
gethBlock, err1 := ec.BlockByNumber(testutils.Context(t), big.NewInt(int64(i)))
require.NoError(t, err1)
if ourBlock.BlockHash != gethBlock.Hash() {
t.Logf("Initial poll our block differs at height %d got %x want %x\n", i, ourBlock.BlockHash, gethBlock.Hash())
return false
}
}
return true
}
if !matchesGeth() {
return false
}
// Randomly pick to mine or reorg
for i := 0; i < numChainInserts; i++ {
if rand.Bool() {
// Mine blocks
for j := 0; j < int(mineOrReorg[i]); j++ {
ec.Commit()
latest, err1 := ec.BlockByNumber(testutils.Context(t), nil)
require.NoError(t, err1)
t.Log("mined block", latest.Hash())
}
} else {
// Reorg blocks
latest, err1 := ec.BlockByNumber(testutils.Context(t), nil)
require.NoError(t, err1)
reorgedBlock := big.NewInt(0).Sub(latest.Number(), big.NewInt(int64(mineOrReorg[i])))
reorg, err1 := ec.BlockByNumber(testutils.Context(t), reorgedBlock)
require.NoError(t, err1)
require.NoError(t, ec.Fork(testutils.Context(t), reorg.Hash()))
t.Logf("Reorging from (%v, %x) back to (%v, %x)\n", latest.NumberU64(), latest.Hash(), reorgedBlock.Uint64(), reorg.Hash())
// Actually need to change the block here to trigger the reorg.
_, err1 = emitter1.EmitLog1(owner, []*big.Int{big.NewInt(1)})
require.NoError(t, err1)
for j := 0; j < int(mineOrReorg[i]+1); j++ { // Need +1 to make it actually longer height so we detect it.
ec.Commit()
}
latest, err1 = ec.BlockByNumber(testutils.Context(t), nil)
require.NoError(t, err1)
t.Logf("New latest (%v, %x), latest parent %x)\n", latest.NumberU64(), latest.Hash(), latest.ParentHash())
}
lp.PollAndSaveLogs(testutils.Context(t), currentBlock.BlockNumber)
currentBlock, err = lp.LatestBlock(testutils.Context(t))
require.NoError(t, err)
}
return matchesGeth()
}, gen.SliceOfN(numChainInserts, gen.UInt64Range(1, uint64(finalityDepth-1)))))`
$DIR/core/chains/evm/logpoller/log_poller_test.go: `.ForAll(func(mineOrReorg []uint64) bool {
// After the set of reorgs, we should have the same canonical blocks that geth does.
t.Log("Starting test", mineOrReorg)
chainID := testutils.NewRandomEVMChainID()
// Set up a test chain with a log emitting contract deployed.
orm := logpoller.NewORM(chainID, db, lggr)
// Note this property test is run concurrently and the sim is not threadsafe.
ec := backends.NewSimulatedBackend(map[common.Address]core.GenesisAccount{
owner.From: {
Balance: big.NewInt(0).Mul(big.NewInt(10), big.NewInt(1e18)),
},
}, 10e6)
_, _, emitter1, err := log_emitter.DeployLogEmitter(owner, ec)
require.NoError(t, err)
lpOpts := logpoller.Opts{
PollPeriod: 15 * time.Second,
FinalityDepth: int64(finalityDepth),
BackfillBatchSize: 3,
RpcBatchSize: 2,
KeepFinalizedBlocksDepth: 1000,
}
lp := logpoller.NewLogPoller(orm, client.NewSimulatedBackendClient(t, ec, chainID), lggr, lpOpts)
for i := 0; i < finalityDepth; i++ { // Have enough blocks that we could reorg the full finalityDepth-1.
ec.Commit()
}
currentBlockNumber := int64(1)
lp.PollAndSaveLogs(testutils.Context(t), currentBlockNumber)
currentBlock, err := lp.LatestBlock(testutils.Context(t))
require.NoError(t, err)
matchesGeth := func() bool {
// Check every block is identical
latest, err1 := ec.BlockByNumber(testutils.Context(t), nil)
require.NoError(t, err1)
for i := 1; i < int(latest.NumberU64()); i++ {
ourBlock, err1 := lp.BlockByNumber(testutils.Context(t), int64(i))
require.NoError(t, err1)
gethBlock, err1 := ec.BlockByNumber(testutils.Context(t), big.NewInt(int64(i)))
require.NoError(t, err1)
if ourBlock.BlockHash != gethBlock.Hash() {
t.Logf("Initial poll our block differs at height %d got %x want %x\n", i, ourBlock.BlockHash, gethBlock.Hash())
return false
}
}
return true
}
if !matchesGeth() {
return false
}
// Randomly pick to mine or reorg
for i := 0; i < numChainInserts; i++ {
if rand.Bool() {
// Mine blocks
for j := 0; j < int(mineOrReorg[i]); j++ {
ec.Commit()
latest, err1 := ec.BlockByNumber(testutils.Context(t), nil)
require.NoError(t, err1)
t.Log("mined block", latest.Hash())
}
} else {
// Reorg blocks
latest, err1 := ec.BlockByNumber(testutils.Context(t), nil)
require.NoError(t, err1)
reorgedBlock := big.NewInt(0).Sub(latest.Number(), big.NewInt(int64(mineOrReorg[i])))
reorg, err1 := ec.BlockByNumber(testutils.Context(t), reorgedBlock)
require.NoError(t, err1)
require.NoError(t, ec.Fork(testutils.Context(t), reorg.Hash()))
t.Logf("Reorging from (%v, %x) back to (%v, %x)\n", latest.NumberU64(), latest.Hash(), reorgedBlock.Uint64(), reorg.Hash())
// Actually need to change the block here to trigger the reorg.
_, err1 = emitter1.EmitLog1(owner, []*big.Int{big.NewInt(1)})
require.NoError(t, err1)
for j := 0; j < int(mineOrReorg[i]+1); j++ { // Need +1 to make it actually longer height so we detect it.
ec.Commit()
}
latest, err1 = ec.BlockByNumber(testutils.Context(t), nil)
require.NoError(t, err1)
t.Logf("New latest (%v, %x), latest parent %x)\n", latest.NumberU64(), latest.Hash(), latest.ParentHash())
}
lp.PollAndSaveLogs(testutils.Context(t), currentBlock.BlockNumber)
currentBlock, err = lp.LatestBlock(testutils.Context(t))
require.NoError(t, err)
}
return matchesGeth()
}, gen.SliceOfN(numChainInserts, gen.UInt64Range(1, uint64(finalityDepth-1))))`
$DIR/core/chains/evm/logpoller/log_poller_test.go: `.NewRandomEVMChainID()`
$DIR/core/chains/evm/logpoller/log_poller_test.go: `.NewORM(chainID, db, lggr)`
$DIR/core/chains/evm/logpoller/log_poller_test.go: `.NewSimulatedBackend(map[common.Address]core.GenesisAccount{
owner.From: {
Balance: big.NewInt(0).Mul(big.NewInt(10), big.NewInt(1e18)),
},
}, 10e6)`
$DIR/core/chains/evm/logpoller/log_poller_test.go: `.NewInt(0)`
$DIR/core/chains/evm/logpoller/log_poller_test.go: `.Mul(big.NewInt(10), big.NewInt(1e18))`
$DIR/core/chains/evm/logpoller/log_poller_test.go: `.NewInt(10)`
$DIR/core/chains/evm/logpoller/log_poller_test.go: `.NewInt(1e18)`
$DIR/core/chains/evm/logpoller/log_poller_test.go: `.DeployLogEmitter(owner, ec)`
$DIR/core/chains/evm/logpoller/log_poller_test.go: `.NewLogPoller(orm, client.NewSimulatedBackendClient(t, ec, chainID), lggr, lpOpts)`
$DIR/core/chains/evm/logpoller/log_poller_test.go: `.NewSimulatedBackendClient(t, ec, chainID)`
$DIR/core/chains/evm/logpoller/log_poller_test.go: `.Commit()`
$DIR/core/chains/evm/logpoller/log_poller_test.go: `.PollAndSaveLogs(testutils.Context(t), currentBlockNumber)`
$DIR/core/chains/evm/logpoller/log_poller_test.go: `.Context(t)`
$DIR/core/chains/evm/logpoller/log_poller_test.go: `.LatestBlock(testutils.Context(t))`
$DIR/core/chains/evm/logpoller/log_poller_test.go: `.Context(t)`
$DIR/core/chains/evm/logpoller/log_poller_test.go: `.BlockByNumber(testutils.Context(t), nil)`
$DIR/core/chains/evm/logpoller/log_poller_test.go: `.Context(t)`
$DIR/core/chains/evm/logpoller/log_poller_test.go: `.NumberU64()`
$DIR/core/chains/evm/logpoller/log_poller_test.go: `.BlockByNumber(testutils.Context(t), int64(i))`
$DIR/core/chains/evm/logpoller/log_poller_test.go: `.Context(t)`
$DIR/core/chains/evm/logpoller/log_poller_test.go: `.BlockByNumber(testutils.Context(t), big.NewInt(int64(i)))`
$DIR/core/chains/evm/logpoller/log_poller_test.go: `.Context(t)`
$DIR/core/chains/evm/logpoller/log_poller_test.go: `.NewInt(int64(i))`
$DIR/core/chains/evm/logpoller/log_poller_test.go: `.Hash()`
$DIR/core/chains/evm/logpoller/log_poller_test.go: `.Bool()`
$DIR/core/chains/evm/logpoller/log_poller_test.go: `.Commit()`
$DIR/core/chains/evm/logpoller/log_poller_test.go: `.BlockByNumber(testutils.Context(t), nil)`
$DIR/core/chains/evm/logpoller/log_poller_test.go: `.Context(t)`
$DIR/core/chains/evm/logpoller/log_poller_test.go: `.BlockByNumber(testutils.Context(t), nil)`
$DIR/core/chains/evm/logpoller/log_poller_test.go: `.Context(t)`
$DIR/core/chains/evm/logpoller/log_poller_test.go: `.NewInt(0)`
$DIR/core/chains/evm/logpoller/log_poller_test.go: `.Sub(latest.Number(), big.NewInt(int64(mineOrReorg[i])))`
$DIR/core/chains/evm/logpoller/log_poller_test.go: `.Number()`
$DIR/core/chains/evm/logpoller/log_poller_test.go: `.NewInt(int64(mineOrReorg[i]))`
$DIR/core/chains/evm/logpoller/log_poller_test.go: `.BlockByNumber(testutils.Context(t), reorgedBlock)`
$DIR/core/chains/evm/logpoller/log_poller_test.go: `.Context(t)`
$DIR/core/chains/evm/logpoller/log_poller_test.go: `.EmitLog1(owner, []*big.Int{big.NewInt(1)})`
$DIR/core/chains/evm/logpoller/log_poller_test.go: `.NewInt(1)`
$DIR/core/chains/evm/logpoller/log_poller_test.go: `.Commit()`
$DIR/core/chains/evm/logpoller/log_poller_test.go: `.BlockByNumber(testutils.Context(t), nil)`
$DIR/core/chains/evm/logpoller/log_poller_test.go: `.Context(t)`
$DIR/core/chains/evm/logpoller/log_poller_test.go: `.PollAndSaveLogs(testutils.Context(t), currentBlock.BlockNumber)`
$DIR/core/chains/evm/logpoller/log_poller_test.go: `.Context(t)`
$DIR/core/chains/evm/logpoller/log_poller_test.go: `.LatestBlock(testutils.Context(t))`
$DIR/core/chains/evm/logpoller/log_poller_test.go: `.Context(t)`
$DIR/core/chains/evm/logpoller/log_poller_test.go: `.SliceOfN(numChainInserts, gen.UInt64Range(1, uint64(finalityDepth-1)))`
$DIR/core/chains/evm/logpoller/log_poller_test.go: `.UInt64Range(1, uint64(finalityDepth-1))`
$DIR/core/chains/evm/logpoller/log_poller_test.go: `.Run(tt.name, func(t *testing.T) {
lpOpts := logpoller.Opts{
UseFinalityTag: tt.finalityTag,
FinalityDepth: tt.finalityDepth,
BackfillBatchSize: 3,
RpcBatchSize: 2,
KeepFinalizedBlocksDepth: 1000,
}
th := SetupTH(t, lpOpts)
// Set up a log poller listening for log emitter logs.
err := th.LogPoller.RegisterFilter(testutils.Context(t), logpoller.Filter{
Name: "Test Emitter 1 & 2",
EventSigs: []common.Hash{EmitterABI.Events["Log1"].ID, EmitterABI.Events["Log2"].ID},
Addresses: []common.Address{th.EmitterAddress1, th.EmitterAddress2},
})
require.NoError(t, err)
b, err := th.Client.BlockByNumber(testutils.Context(t), nil)
require.NoError(t, err)
require.Equal(t, uint64(1), b.NumberU64())
require.Equal(t, uint64(10), b.Time())
// Test scenario: single block in chain, no logs.
// Chain genesis <- 1
// DB: empty
newStart := th.PollAndSaveLogs(testutils.Context(t), 1)
assert.Equal(t, int64(2), newStart)
// We expect to have saved block 1.
lpb, err := th.ORM.SelectBlockByNumber(testutils.Context(t), 1)
require.NoError(t, err)
assert.Equal(t, lpb.BlockHash, b.Hash())
assert.Equal(t, lpb.BlockNumber, int64(b.NumberU64()))
assert.Equal(t, int64(1), int64(b.NumberU64()))
assert.Equal(t, uint64(10), b.Time())
// No logs.
lgs, err := th.ORM.SelectLogsByBlockRange(testutils.Context(t), 1, 1)
require.NoError(t, err)
assert.Equal(t, 0, len(lgs))
th.assertHaveCanonical(t, 1, 1)
// Polling again should be a noop, since we are at the latest.
newStart = th.PollAndSaveLogs(testutils.Context(t), newStart)
assert.Equal(t, int64(2), newStart)
latest, err := th.ORM.SelectLatestBlock(testutils.Context(t))
require.NoError(t, err)
assert.Equal(t, int64(1), latest.BlockNumber)
th.assertHaveCanonical(t, 1, 1)
// Test scenario: one log 2 block chain.
// Chain gen <- 1 <- 2 (L1)
// DB: 1
_, err = th.Emitter1.EmitLog1(th.Owner, []*big.Int{big.NewInt(1)})
require.NoError(t, err)
th.Client.Commit()
// Polling should get us the L1 log.
newStart = th.PollAndSaveLogs(testutils.Context(t), newStart)
assert.Equal(t, int64(3), newStart)
latest, err = th.ORM.SelectLatestBlock(testutils.Context(t))
require.NoError(t, err)
assert.Equal(t, int64(2), latest.BlockNumber)
lgs, err = th.ORM.SelectLogsByBlockRange(testutils.Context(t), 1, 3)
require.NoError(t, err)
require.Equal(t, 1, len(lgs))
assert.Equal(t, th.EmitterAddress1, lgs[0].Address)
assert.Equal(t, latest.BlockHash, lgs[0].BlockHash)
assert.Equal(t, latest.BlockTimestamp, lgs[0].BlockTimestamp)
assert.Equal(t, hexutil.Encode(lgs[0].Topics[0]), EmitterABI.Events["Log1"].ID.String())
assert.Equal(t, hexutil.MustDecode(`0x0000000000000000000000000000000000000000000000000000000000000001`),
lgs[0].Data)
// Test scenario: single block reorg with log.
// Chain gen <- 1 <- 2 (L1_1)
// \ 2'(L1_2) <- 3
// DB: 1, 2
// - Detect a reorg,
// - Update the block 2's hash
// - Save L1'
// - L1_1 deleted
reorgedOutBlock, err := th.Client.BlockByNumber(testutils.Context(t), big.NewInt(2))
require.NoError(t, err)
lca, err := th.Client.BlockByNumber(testutils.Context(t), big.NewInt(1))
require.NoError(t, err)
require.NoError(t, th.Client.Fork(testutils.Context(t), lca.Hash()))
_, err = th.Emitter1.EmitLog1(th.Owner, []*big.Int{big.NewInt(2)})
require.NoError(t, err)
// Create 2'
th.Client.Commit()
// Create 3 (we need a new block for us to do any polling and detect the reorg).
th.Client.Commit()
newStart = th.PollAndSaveLogs(testutils.Context(t), newStart)
assert.Equal(t, int64(4), newStart)
latest, err = th.ORM.SelectLatestBlock(testutils.Context(t))
require.NoError(t, err)
assert.Equal(t, int64(3), latest.BlockNumber)
lgs, err = th.ORM.SelectLogsByBlockRange(testutils.Context(t), 1, 3)
require.NoError(t, err)
require.Equal(t, 1, len(lgs))
assert.Equal(t, hexutil.MustDecode(`0x0000000000000000000000000000000000000000000000000000000000000002`), lgs[0].Data)
th.assertHaveCanonical(t, 1, 3)
// Test scenario: reorg back to previous tip.
// Chain gen <- 1 <- 2 (L1_1) <- 3' (L1_3) <- 4
// \ 2'(L1_2) <- 3
require.NoError(t, th.Client.Fork(testutils.Context(t), reorgedOutBlock.Hash()))
_, err = th.Emitter1.EmitLog1(th.Owner, []*big.Int{big.NewInt(3)})
require.NoError(t, err)
// Create 3'
th.Client.Commit()
// Create 4
th.Client.Commit()
// Mark block 1 as finalized
markBlockAsFinalized(t, th, 1)
newStart = th.PollAndSaveLogs(testutils.Context(t), newStart)
assert.Equal(t, int64(5), newStart)
latest, err = th.ORM.SelectLatestBlock(testutils.Context(t))
require.NoError(t, err)
assert.Equal(t, int64(4), latest.BlockNumber)
lgs, err = th.ORM.SelectLogsByBlockRange(testutils.Context(t), 1, 3)
require.NoError(t, err)
// We expect ONLY L1_1 and L1_3 since L1_2 is reorg'd out.
assert.Equal(t, 2, len(lgs))
assert.Equal(t, int64(2), lgs[0].BlockNumber)
assert.Equal(t, hexutil.MustDecode(`0x0000000000000000000000000000000000000000000000000000000000000001`), lgs[0].Data)
assert.Equal(t, int64(3), lgs[1].BlockNumber)
assert.Equal(t, hexutil.MustDecode(`0x0000000000000000000000000000000000000000000000000000000000000003`), lgs[1].Data)
th.assertHaveCanonical(t, 1, 1)
th.assertHaveCanonical(t, 3, 4)
th.assertDontHave(t, 2, 2) // 2 gets backfilled
// Test scenario: multiple logs per block for many blocks (also after reorg).
// Chain gen <- 1 <- 2 (L1_1) <- 3' L1_3 <- 4 <- 5 (L1_4, L2_5) <- 6 (L1_6)
// \ 2'(L1_2) <- 3
// DB: 1, 2', 3'
// - Should save 4, 5, 6 blocks
// - Should obtain logs L1_3, L2_5, L1_6
_, err = th.Emitter1.EmitLog1(th.Owner, []*big.Int{big.NewInt(4)})
require.NoError(t, err)
_, err = th.Emitter2.EmitLog1(th.Owner, []*big.Int{big.NewInt(5)})
require.NoError(t, err)
// Create 4
th.Client.Commit()
_, err = th.Emitter1.EmitLog1(th.Owner, []*big.Int{big.NewInt(6)})
require.NoError(t, err)
// Create 5
th.Client.Commit()
// Mark block 2 as finalized
markBlockAsFinalized(t, th, 3)
newStart = th.PollAndSaveLogs(testutils.Context(t), newStart)
assert.Equal(t, int64(7), newStart)
lgs, err = th.ORM.SelectLogsByBlockRange(testutils.Context(t), 4, 6)
require.NoError(t, err)
require.Equal(t, 3, len(lgs))
assert.Equal(t, hexutil.MustDecode(`0x0000000000000000000000000000000000000000000000000000000000000004`), lgs[0].Data)
assert.Equal(t, th.EmitterAddress1, lgs[0].Address)
assert.Equal(t, hexutil.MustDecode(`0x0000000000000000000000000000000000000000000000000000000000000005`), lgs[1].Data)
assert.Equal(t, th.EmitterAddress2, lgs[1].Address)
assert.Equal(t, hexutil.MustDecode(`0x0000000000000000000000000000000000000000000000000000000000000006`), lgs[2].Data)
assert.Equal(t, th.EmitterAddress1, lgs[2].Address)
th.assertHaveCanonical(t, 1, 1)
th.assertDontHave(t, 2, 2) // 2 gets backfilled
th.assertHaveCanonical(t, 3, 6)
// Test scenario: node down for exactly finality + 2 blocks
// Note we only backfill up to finalized - 1 blocks, because we need to save the
// Chain gen <- 1 <- 2 (L1_1) <- 3' L1_3 <- 4 <- 5 (L1_4, L2_5) <- 6 (L1_6) <- 7 (L1_7) <- 8 (L1_8) <- 9 (L1_9) <- 10 (L1_10)
// \ 2'(L1_2) <- 3
// DB: 1, 2, 3, 4, 5, 6
// - We expect block 7 to backfilled (treated as finalized)
// - Then block 8-10 to be handled block by block (treated as unfinalized).
for i := 7; i < 11; i++ {
_, err = th.Emitter1.EmitLog1(th.Owner, []*big.Int{big.NewInt(int64(i))})
require.NoError(t, err)
th.Client.Commit()
}
// Mark block 7 as finalized
markBlockAsFinalized(t, th, 7)
newStart = th.PollAndSaveLogs(testutils.Context(t), newStart)
assert.Equal(t, int64(11), newStart)
lgs, err = th.ORM.SelectLogsByBlockRange(testutils.Context(t), 7, 9)
require.NoError(t, err)
require.Equal(t, 3, len(lgs))
assert.Equal(t, hexutil.MustDecode(`0x0000000000000000000000000000000000000000000000000000000000000007`), lgs[0].Data)
assert.Equal(t, int64(7), lgs[0].BlockNumber)
assert.Equal(t, hexutil.MustDecode(`0x0000000000000000000000000000000000000000000000000000000000000008`), lgs[1].Data)
assert.Equal(t, int64(8), lgs[1].BlockNumber)
assert.Equal(t, hexutil.MustDecode(`0x0000000000000000000000000000000000000000000000000000000000000009`), lgs[2].Data)
assert.Equal(t, int64(9), lgs[2].BlockNumber)
th.assertDontHave(t, 7, 7) // Do not expect to save backfilled blocks.
th.assertHaveCanonical(t, 8, 10)
// Test scenario large backfill (multiple batches)
// Chain gen <- 1 <- 2 (L1_1) <- 3' L1_3 <- 4 <- 5 (L1_4, L2_5) <- 6 (L1_6) <- 7 (L1_7) <- 8 (L1_8) <- 9 (L1_9) <- 10..16
// \ 2'(L1_2) <- 3
// DB: 1, 2, 3, 4, 5, 6, (backfilled 7), 8, 9, 10
// - 11, 12, 13 backfilled in batch 1
// - 14 backfilled in batch 2
// - 15, 16, 17 to be treated as unfinalized
for i := 11; i < 18; i++ {
_, err = th.Emitter1.EmitLog1(th.Owner, []*big.Int{big.NewInt(int64(i))})
require.NoError(t, err)
th.Client.Commit()
}
// Mark block 14 as finalized
markBlockAsFinalized(t, th, 14)
newStart = th.PollAndSaveLogs(testutils.Context(t), newStart)
assert.Equal(t, int64(18), newStart)
lgs, err = th.ORM.SelectLogsByBlockRange(testutils.Context(t), 11, 17)
require.NoError(t, err)
assert.Equal(t, 7, len(lgs))
th.assertHaveCanonical(t, 14, 16) // Should have last finalized block plus unfinalized blocks
th.assertDontHave(t, 11, 13) // Should not have older finalized blocks
// Verify that a custom block timestamp will get written to db correctly also
b, err = th.Client.BlockByNumber(testutils.Context(t), nil)
require.NoError(t, err)
require.Equal(t, uint64(17), b.NumberU64())
require.Equal(t, uint64(170), b.Time())
require.NoError(t, th.Client.AdjustTime(1*time.Hour))
th.Client.Commit()
b, err = th.Client.BlockByNumber(testutils.Context(t), nil)
require.NoError(t, err)
require.Equal(t, uint64(180+time.Hour.Seconds()), b.Time())
})`
$DIR/core/chains/evm/logpoller/log_poller_test.go: `.LogPoller.RegisterFilter(testutils.Context(t), logpoller.Filter{
Name: "Test Emitter 1 & 2",
EventSigs: []common.Hash{EmitterABI.Events["Log1"].ID, EmitterABI.Events["Log2"].ID},
Addresses: []common.Address{th.EmitterAddress1, th.EmitterAddress2},
})`
$DIR/core/chains/evm/logpoller/log_poller_test.go: `.Context(t)`
$DIR/core/chains/evm/logpoller/log_poller_test.go: `.Client.BlockByNumber(testutils.Context(t), nil)`
$DIR/core/chains/evm/logpoller/log_poller_test.go: `.Context(t)`
$DIR/core/chains/evm/logpoller/log_poller_test.go: `.PollAndSaveLogs(testutils.Context(t), 1)`
$DIR/core/chains/evm/logpoller/log_poller_test.go: `.Context(t)`
$DIR/core/chains/evm/logpoller/log_poller_test.go: `.ORM.SelectBlockByNumber(testutils.Context(t), 1)`
$DIR/core/chains/evm/logpoller/log_poller_test.go: `.Context(t)`
$DIR/core/chains/evm/logpoller/log_poller_test.go: `.ORM.SelectLogsByBlockRange(testutils.Context(t), 1, 1)`
$DIR/core/chains/evm/logpoller/log_poller_test.go: `.Context(t)`
$DIR/core/chains/evm/logpoller/log_poller_test.go: `.assertHaveCanonical(t, 1, 1)`
$DIR/core/chains/evm/logpoller/log_poller_test.go: `.PollAndSaveLogs(testutils.Context(t), newStart)`
$DIR/core/chains/evm/logpoller/log_poller_test.go: `.Context(t)`
$DIR/core/chains/evm/logpoller/log_poller_test.go: `.ORM.SelectLatestBlock(testutils.Context(t))`
$DIR/core/chains/evm/logpoller/log_poller_test.go: `.Context(t)`
$DIR/core/chains/evm/logpoller/log_poller_test.go: `.assertHaveCanonical(t, 1, 1)`
$DIR/core/chains/evm/logpoller/log_poller_test.go: `.Emitter1.EmitLog1(th.Owner, []*big.Int{big.NewInt(1)})`
$DIR/core/chains/evm/logpoller/log_poller_test.go: `.NewInt(1)`
$DIR/core/chains/evm/logpoller/log_poller_test.go: `.Client.Commit()`
$DIR/core/chains/evm/logpoller/log_poller_test.go: `.PollAndSaveLogs(testutils.Context(t), newStart)`
$DIR/core/chains/evm/logpoller/log_poller_test.go: `.Context(t)`
$DIR/core/chains/evm/logpoller/log_poller_test.go: `.ORM.SelectLatestBlock(testutils.Context(t))`
$DIR/core/chains/evm/logpoller/log_poller_test.go: `.Context(t)`
$DIR/core/chains/evm/logpoller/log_poller_test.go: `.ORM.SelectLogsByBlockRange(testutils.Context(t), 1, 3)`
$DIR/core/chains/evm/logpoller/log_poller_test.go: `.Context(t)`
$DIR/core/chains/evm/logpoller/log_poller_test.go: `.Client.BlockByNumber(testutils.Context(t), big.NewInt(2))`
$DIR/core/chains/evm/logpoller/log_poller_test.go: `.Context(t)`
$DIR/core/chains/evm/logpoller/log_poller_test.go: `.NewInt(2)`
$DIR/core/chains/evm/logpoller/log_poller_test.go: `.Client.BlockByNumber(testutils.Context(t), big.NewInt(1))`
$DIR/core/chains/evm/logpoller/log_poller_test.go: `.Context(t)`
$DIR/core/chains/evm/logpoller/log_poller_test.go: `.NewInt(1)`
$DIR/core/chains/evm/logpoller/log_poller_test.go: `.Emitter1.EmitLog1(th.Owner, []*big.Int{big.NewInt(2)})`
$DIR/core/chains/evm/logpoller/log_poller_test.go: `.NewInt(2)`
$DIR/core/chains/evm/logpoller/log_poller_test.go: `.Client.Commit()`
$DIR/core/chains/evm/logpoller/log_poller_test.go: `.Client.Commit()`
$DIR/core/chains/evm/logpoller/log_poller_test.go: `.PollAndSaveLogs(testutils.Context(t), newStart)`
$DIR/core/chains/evm/logpoller/log_poller_test.go: `.Context(t)`
$DIR/core/chains/evm/logpoller/log_poller_test.go: `.ORM.SelectLatestBlock(testutils.Context(t))`
$DIR/core/chains/evm/logpoller/log_poller_test.go: `.Context(t)`
$DIR/core/chains/evm/logpoller/log_poller_test.go: `.ORM.SelectLogsByBlockRange(testutils.Context(t), 1, 3)`
$DIR/core/chains/evm/logpoller/log_poller_test.go: `.Context(t)`
$DIR/core/chains/evm/logpoller/log_poller_test.go: `.assertHaveCanonical(t, 1, 3)`
$DIR/core/chains/evm/logpoller/log_poller_test.go: `.Emitter1.EmitLog1(th.Owner, []*big.Int{big.NewInt(3)})`
$DIR/core/chains/evm/logpoller/log_poller_test.go: `.NewInt(3)`
$DIR/core/chains/evm/logpoller/log_poller_test.go: `.Client.Commit()`
$DIR/core/chains/evm/logpoller/log_poller_test.go: `.Client.Commit()`
$DIR/core/chains/evm/logpoller/log_poller_test.go: `.PollAndSaveLogs(testutils.Context(t), newStart)`
$DIR/core/chains/evm/logpoller/log_poller_test.go: `.Context(t)`
$DIR/core/chains/evm/logpoller/log_poller_test.go: `.ORM.SelectLatestBlock(testutils.Context(t))`
$DIR/core/chains/evm/logpoller/log_poller_test.go: `.Context(t)`
$DIR/core/chains/evm/logpoller/log_poller_test.go: `.ORM.SelectLogsByBlockRange(testutils.Context(t), 1, 3)`
$DIR/core/chains/evm/logpoller/log_poller_test.go: `.Context(t)`
$DIR/core/chains/evm/logpoller/log_poller_test.go: `.assertHaveCanonical(t, 1, 1)`
$DIR/core/chains/evm/logpoller/log_poller_test.go: `.assertHaveCanonical(t, 3, 4)`
$DIR/core/chains/evm/logpoller/log_poller_test.go: `.assertDontHave(t, 2, 2)`
$DIR/core/chains/evm/logpoller/log_poller_test.go: `.Emitter1.EmitLog1(th.Owner, []*big.Int{big.NewInt(4)})`
$DIR/core/chains/evm/logpoller/log_poller_test.go: `.NewInt(4)`
$DIR/core/chains/evm/logpoller/log_poller_test.go: `.Emitter2.EmitLog1(th.Owner, []*big.Int{big.NewInt(5)})`
$DIR/core/chains/evm/logpoller/log_poller_test.go: `.NewInt(5)`
$DIR/core/chains/evm/logpoller/log_poller_test.go: `.Client.Commit()`
$DIR/core/chains/evm/logpoller/log_poller_test.go: `.Emitter1.EmitLog1(th.Owner, []*big.Int{big.NewInt(6)})`
$DIR/core/chains/evm/logpoller/log_poller_test.go: `.NewInt(6)`
$DIR/core/chains/evm/logpoller/log_poller_test.go: `.Client.Commit()`
$DIR/core/chains/evm/logpoller/log_poller_test.go: `.PollAndSaveLogs(testutils.Context(t), newStart)`
$DIR/core/chains/evm/logpoller/log_poller_test.go: `.Context(t)`
$DIR/core/chains/evm/logpoller/log_poller_test.go: `.ORM.SelectLogsByBlockRange(testutils.Context(t), 4, 6)`
$DIR/core/chains/evm/logpoller/log_poller_test.go: `.Context(t)`
$DIR/core/chains/evm/logpoller/log_poller_test.go: `.assertHaveCanonical(t, 1, 1)`
$DIR/core/chains/evm/logpoller/log_poller_test.go: `.assertDontHave(t, 2, 2)`
$DIR/core/chains/evm/logpoller/log_poller_test.go: `.assertHaveCanonical(t, 3, 6)`
$DIR/core/chains/evm/logpoller/log_poller_test.go: `.Emitter1.EmitLog1(th.Owner, []*big.Int{big.NewInt(int64(i))})`
$DIR/core/chains/evm/logpoller/log_poller_test.go: `.NewInt(int64(i))`
$DIR/core/chains/evm/logpoller/log_poller_test.go: `.Client.Commit()`
$DIR/core/chains/evm/logpoller/log_poller_test.go: `.PollAndSaveLogs(testutils.Context(t), newStart)`
$DIR/core/chains/evm/logpoller/log_poller_test.go: `.Context(t)`
$DIR/core/chains/evm/logpoller/log_poller_test.go: `.ORM.SelectLogsByBlockRange(testutils.Context(t), 7, 9)`
$DIR/core/chains/evm/logpoller/log_poller_test.go: `.Context(t)`
$DIR/core/chains/evm/logpoller/log_poller_test.go: `.assertDontHave(t, 7, 7)`
$DIR/core/chains/evm/logpoller/log_poller_test.go: `.assertHaveCanonical(t, 8, 10)`
$DIR/core/chains/evm/logpoller/log_poller_test.go: `.Emitter1.EmitLog1(th.Owner, []*big.Int{big.NewInt(int64(i))})`
$DIR/core/chains/evm/logpoller/log_poller_test.go: `.NewInt(int64(i))`
$DIR/core/chains/evm/logpoller/log_poller_test.go: `.Client.Commit()`
$DIR/core/chains/evm/logpoller/log_poller_test.go: `.PollAndSaveLogs(testutils.Context(t), newStart)`
$DIR/core/chains/evm/logpoller/log_poller_test.go: `.Context(t)`
$DIR/core/chains/evm/logpoller/log_poller_test.go: `.ORM.SelectLogsByBlockRange(testutils.Context(t), 11, 17)`
$DIR/core/chains/evm/logpoller/log_poller_test.go: `.Context(t)`
$DIR/core/chains/evm/logpoller/log_poller_test.go: `.assertHaveCanonical(t, 14, 16)`
$DIR/core/chains/evm/logpoller/log_poller_test.go: `.assertDontHave(t, 11, 13)`
$DIR/core/chains/evm/logpoller/log_poller_test.go: `.Client.BlockByNumber(testutils.Context(t), nil)`
$DIR/core/chains/evm/logpoller/log_poller_test.go: `.Context(t)`
$DIR/core/chains/evm/logpoller/log_poller_test.go: `.Client.Commit()`
$DIR/core/chains/evm/logpoller/log_poller_test.go: `.Client.BlockByNumber(testutils.Context(t), nil)`
$DIR/core/chains/evm/logpoller/log_poller_test.go: `.Context(t)`
$DIR/core/chains/evm/logpoller/log_poller_test.go: `.Run(tt.name, func(t *testing.T) {
th := SetupTH(t, logpoller.Opts{
UseFinalityTag: tt.finalityTag,
FinalityDepth: tt.finalityDepth,
BackfillBatchSize: 3,
RpcBatchSize: 2,
KeepFinalizedBlocksDepth: 1000,
BackupPollerBlockDelay: 100,
})
// Set up a log poller listening for log emitter logs.
err := th.LogPoller.RegisterFilter(testutils.Context(t), logpoller.Filter{
Name: "Test Emitter",
EventSigs: []common.Hash{EmitterABI.Events["Log1"].ID},
Addresses: []common.Address{th.EmitterAddress1},
})
require.NoError(t, err)
// Test scenario
// Chain gen <- 1 <- 2 <- 3 (finalized) <- 4 (L1_1)
_, err = th.Emitter1.EmitLog1(th.Owner, []*big.Int{big.NewInt(1)})
require.NoError(t, err)
th.Client.Commit()
th.Client.Commit()
th.Client.Commit()
markBlockAsFinalized(t, th, 3)
// Polling should get us the L1 log.
firstPoll := th.PollAndSaveLogs(testutils.Context(t), 1)
assert.Equal(t, int64(5), firstPoll)
assert.NoError(t, th.LogPoller.Healthy())
// Fork deeper than finality depth
// Chain gen <- 1 <- 2 <- 3 (finalized) <- 4 (L1_1)
// \ 2' <- 3' <- 4' <- 5' <- 6' (finalized) <- 7' <- 8' <- 9' <- 10' (L1_2)
lca, err := th.Client.BlockByNumber(testutils.Context(t), big.NewInt(1))
require.NoError(t, err)
require.NoError(t, th.Client.Fork(testutils.Context(t), lca.Hash()))
// Create 2'
_, err = th.Emitter1.EmitLog1(th.Owner, []*big.Int{big.NewInt(2)})
require.NoError(t, err)
th.Client.Commit()
// Create 3-10
for i := 3; i < 10; i++ {
_, err = th.Emitter1.EmitLog1(th.Owner, []*big.Int{big.NewInt(int64(i))})
require.NoError(t, err)
th.Client.Commit()
}
markBlockAsFinalized(t, th, 6)
secondPoll := th.PollAndSaveLogs(testutils.Context(t), firstPoll)
assert.Equal(t, firstPoll, secondPoll)
assert.Equal(t, logpoller.ErrFinalityViolated, th.LogPoller.Healthy())
// Manually remove latest block from the log poller to bring it back to life
// LogPoller should be healthy again after first poll
// Chain gen <- 1
// \ 2' <- 3' <- 4' <- 5' <- 6' (finalized) <- 7' <- 8' <- 9' <- 10' (L1_2)
require.NoError(t, th.ORM.DeleteLogsAndBlocksAfter(testutils.Context(t), 2))
// Poll from latest
recoveryPoll := th.PollAndSaveLogs(testutils.Context(t), 1)
assert.Equal(t, int64(10), recoveryPoll)
assert.NoError(t, th.LogPoller.Healthy())
})`
$DIR/core/chains/evm/logpoller/log_poller_test.go: `.LogPoller.RegisterFilter(testutils.Context(t), logpoller.Filter{
Name: "Test Emitter",
EventSigs: []common.Hash{EmitterABI.Events["Log1"].ID},
Addresses: []common.Address{th.EmitterAddress1},
})`
$DIR/core/chains/evm/logpoller/log_poller_test.go: `.Context(t)`
$DIR/core/chains/evm/logpoller/log_poller_test.go: `.Emitter1.EmitLog1(th.Owner, []*big.Int{big.NewInt(1)})`
$DIR/core/chains/evm/logpoller/log_poller_test.go: `.NewInt(1)`
$DIR/core/chains/evm/logpoller/log_poller_test.go: `.Client.Commit()`
$DIR/core/chains/evm/logpoller/log_poller_test.go: `.Client.Commit()`
$DIR/core/chains/evm/logpoller/log_poller_test.go: `.Client.Commit()`
$DIR/core/chains/evm/logpoller/log_poller_test.go: `.PollAndSaveLogs(testutils.Context(t), 1)`
$DIR/core/chains/evm/logpoller/log_poller_test.go: `.Context(t)`
$DIR/core/chains/evm/logpoller/log_poller_test.go: `.Client.BlockByNumber(testutils.Context(t), big.NewInt(1))`
$DIR/core/chains/evm/logpoller/log_poller_test.go: `.Context(t)`
$DIR/core/chains/evm/logpoller/log_poller_test.go: `.NewInt(1)`
$DIR/core/chains/evm/logpoller/log_poller_test.go: `.Emitter1.EmitLog1(th.Owner, []*big.Int{big.NewInt(2)})`
$DIR/core/chains/evm/logpoller/log_poller_test.go: `.NewInt(2)`
$DIR/core/chains/evm/logpoller/log_poller_test.go: `.Client.Commit()`
$DIR/core/chains/evm/logpoller/log_poller_test.go: `.Emitter1.EmitLog1(th.Owner, []*big.Int{big.NewInt(int64(i))})`
$DIR/core/chains/evm/logpoller/log_poller_test.go: `.NewInt(int64(i))`
$DIR/core/chains/evm/logpoller/log_poller_test.go: `.Client.Commit()`
$DIR/core/chains/evm/logpoller/log_poller_test.go: `.PollAndSaveLogs(testutils.Context(t), firstPoll)`
$DIR/core/chains/evm/logpoller/log_poller_test.go: `.Context(t)`
$DIR/core/chains/evm/logpoller/log_poller_test.go: `.PollAndSaveLogs(testutils.Context(t), 1)`
$DIR/core/chains/evm/logpoller/log_poller_test.go: `.Context(t)`
$DIR/core/chains/evm/logpoller/log_poller_test.go: `.Run(tt.name, func(t *testing.T) {
lpOpts := logpoller.Opts{
UseFinalityTag: tt.finalityTag,
FinalityDepth: tt.finalityDepth,
BackfillBatchSize: 3,
RpcBatchSize: 2,
KeepFinalizedBlocksDepth: 1000,
}
th := SetupTH(t, lpOpts)
// Set up a log poller listening for log emitter logs.
err := th.LogPoller.RegisterFilter(testutils.Context(t), logpoller.Filter{
Name: "Test Emitter",
EventSigs: []common.Hash{EmitterABI.Events["Log1"].ID},
Addresses: []common.Address{th.EmitterAddress1},
})
require.NoError(t, err)
// Test scenario: one log 2 block chain.
// Chain gen <- 1 <- 2 (L1_1)
// DB: 1
_, err = th.Emitter1.EmitLog1(th.Owner, []*big.Int{big.NewInt(1)})
require.NoError(t, err)
th.Client.Commit()
markBlockAsFinalized(t, th, 1)
// Polling should get us the L1 log.
newStart := th.PollAndSaveLogs(testutils.Context(t), 1)
assert.NoError(t, th.LogPoller.Healthy())
assert.Equal(t, int64(3), newStart)
// Check that L1_1 has a proper data payload
lgs, err := th.ORM.SelectLogsByBlockRange(testutils.Context(t), 2, 2)
require.NoError(t, err)
require.NotZero(t, len(lgs))
assert.Equal(t, hexutil.MustDecode(`0x0000000000000000000000000000000000000000000000000000000000000001`), lgs[0].Data)
// Single block reorg and log poller not working for a while, mine blocks and progress with finalization
// Chain gen <- 1 <- 2 (L1_1)
// \ 2'(L1_2) <- 3 <- 4 <- 5 <- 6 (finalized on chain) <- 7 <- 8 <- 9 <- 10
lca, err := th.Client.BlockByNumber(testutils.Context(t), big.NewInt(1))
require.NoError(t, err)
require.NoError(t, th.Client.Fork(testutils.Context(t), lca.Hash()))
// Create 2'
_, err = th.Emitter1.EmitLog1(th.Owner, []*big.Int{big.NewInt(2)})
require.NoError(t, err)
th.Client.Commit()
// Create 3-10
for i := 3; i < 10; i++ {
_, err = th.Emitter1.EmitLog1(th.Owner, []*big.Int{big.NewInt(int64(i))})
require.NoError(t, err)
th.Client.Commit()
}
markBlockAsFinalized(t, th, 6)
newStart = th.PollAndSaveLogs(testutils.Context(t), newStart)
assert.Equal(t, int64(10), newStart)
assert.NoError(t, th.LogPoller.Healthy())
// Expect L1_2 to be properly updated
lgs, err = th.ORM.SelectLogsByBlockRange(testutils.Context(t), 2, 2)
require.NoError(t, err)
require.NotZero(t, len(lgs))
assert.Equal(t, hexutil.MustDecode(`0x0000000000000000000000000000000000000000000000000000000000000002`), lgs[0].Data)
th.assertHaveCanonical(t, 1, 1)
th.assertDontHave(t, 2, 3) // These blocks are backfilled
th.assertHaveCanonical(t, 5, 10)
})`
$DIR/core/chains/evm/logpoller/log_poller_test.go: `.LogPoller.RegisterFilter(testutils.Context(t), logpoller.Filter{
Name: "Test Emitter",
EventSigs: []common.Hash{EmitterABI.Events["Log1"].ID},
Addresses: []common.Address{th.EmitterAddress1},
})`
$DIR/core/chains/evm/logpoller/log_poller_test.go: `.Context(t)`
$DIR/core/chains/evm/logpoller/log_poller_test.go: `.Emitter1.EmitLog1(th.Owner, []*big.Int{big.NewInt(1)})`
$DIR/core/chains/evm/logpoller/log_poller_test.go: `.NewInt(1)`
$DIR/core/chains/evm/logpoller/log_poller_test.go: `.Client.Commit()`
$DIR/core/chains/evm/logpoller/log_poller_test.go: `.PollAndSaveLogs(testutils.Context(t), 1)`
$DIR/core/chains/evm/logpoller/log_poller_test.go: `.Context(t)`
$DIR/core/chains/evm/logpoller/log_poller_test.go: `.ORM.SelectLogsByBlockRange(testutils.Context(t), 2, 2)`
$DIR/core/chains/evm/logpoller/log_poller_test.go: `.Context(t)`
$DIR/core/chains/evm/logpoller/log_poller_test.go: `.Client.BlockByNumber(testutils.Context(t), big.NewInt(1))`
$DIR/core/chains/evm/logpoller/log_poller_test.go: `.Context(t)`
$DIR/core/chains/evm/logpoller/log_poller_test.go: `.NewInt(1)`
$DIR/core/chains/evm/logpoller/log_poller_test.go: `.Emitter1.EmitLog1(th.Owner, []*big.Int{big.NewInt(2)})`
$DIR/core/chains/evm/logpoller/log_poller_test.go: `.NewInt(2)`
$DIR/core/chains/evm/logpoller/log_poller_test.go: `.Client.Commit()`
$DIR/core/chains/evm/logpoller/log_poller_test.go: `.Emitter1.EmitLog1(th.Owner, []*big.Int{big.NewInt(int64(i))})`
$DIR/core/chains/evm/logpoller/log_poller_test.go: `.NewInt(int64(i))`
$DIR/core/chains/evm/logpoller/log_poller_test.go: `.Client.Commit()`
$DIR/core/chains/evm/logpoller/log_poller_test.go: `.PollAndSaveLogs(testutils.Context(t), newStart)`
$DIR/core/chains/evm/logpoller/log_poller_test.go: `.Context(t)`
$DIR/core/chains/evm/logpoller/log_poller_test.go: `.ORM.SelectLogsByBlockRange(testutils.Context(t), 2, 2)`
$DIR/core/chains/evm/logpoller/log_poller_test.go: `.Context(t)`
$DIR/core/chains/evm/logpoller/log_poller_test.go: `.assertHaveCanonical(t, 1, 1)`
$DIR/core/chains/evm/logpoller/log_poller_test.go: `.assertDontHave(t, 2, 3)`
$DIR/core/chains/evm/logpoller/log_poller_test.go: `.assertHaveCanonical(t, 5, 10)`
$DIR/core/chains/evm/logpoller/log_poller_test.go: `.LogPoller.RegisterFilter(testutils.Context(t), filter1)`
$DIR/core/chains/evm/logpoller/log_poller_test.go: `.Context(t)`
$DIR/core/chains/evm/logpoller/log_poller_test.go: `.LogPoller.RegisterFilter(testutils.Context(t), filter2)`
$DIR/core/chains/evm/logpoller/log_poller_test.go: `.Context(t)`
$DIR/core/chains/evm/logpoller/log_poller_test.go: `.LogPoller.RegisterFilter(testutils.Context(t), filter3)`
$DIR/core/chains/evm/logpoller/log_poller_test.go: `.Context(t)`
$DIR/core/chains/evm/logpoller/log_poller_test.go: `.ORM.LoadFilters(testutils.Context(t))`
$DIR/core/chains/evm/logpoller/log_poller_test.go: `.Context(t)`
$DIR/core/chains/evm/logpoller/log_poller_test.go: `.Run("HasFilter", func(t *testing.T) {
assert.True(t, th.LogPoller.HasFilter("first Filter"))
assert.True(t, th.LogPoller.HasFilter("second Filter"))
assert.True(t, th.LogPoller.HasFilter("third Filter"))
assert.False(t, th.LogPoller.HasFilter("fourth Filter"))
})`
$DIR/core/chains/evm/logpoller/log_poller_test.go: `.LogPoller.GetFilters()`
$DIR/core/chains/evm/logpoller/log_poller_test.go: `.Emitter1.EmitLog1(th.Owner, []*big.Int{big.NewInt(1)})`
$DIR/core/chains/evm/logpoller/log_poller_test.go: `.NewInt(1)`
$DIR/core/chains/evm/logpoller/log_poller_test.go: `.Client.Commit()`
$DIR/core/chains/evm/logpoller/log_poller_test.go: `.Emitter1.EmitLog1(th.Owner, []*big.Int{big.NewInt(2)})`
$DIR/core/chains/evm/logpoller/log_poller_test.go: `.NewInt(2)`
$DIR/core/chains/evm/logpoller/log_poller_test.go: `.Client.Commit()`
$DIR/core/chains/evm/logpoller/log_poller_test.go: `.LogPoller.RegisterFilter(testutils.Context(t), logpoller.Filter{
Name: "GetBlocks Test",
EventSigs: []common.Hash{EmitterABI.Events["Log1"].ID, EmitterABI.Events["Log2"].ID},
Addresses: []common.Address{th.EmitterAddress1, th.EmitterAddress2},
})`
$DIR/core/chains/evm/logpoller/log_poller_test.go: `.Context(t)`
$DIR/core/chains/evm/logpoller/log_poller_test.go: `.LogPoller.GetBlocksRange(testutils.Context(t), blockNums)`
$DIR/core/chains/evm/logpoller/log_poller_test.go: `.Context(t)`
$DIR/core/chains/evm/logpoller/log_poller_test.go: `.LogPoller.GetBlocksRange(testutils.Context(t), blockNums)`
$DIR/core/chains/evm/logpoller/log_poller_test.go: `.Context(t)`
$DIR/core/chains/evm/logpoller/log_poller_test.go: `.LogPoller.GetBlocksRange(testutils.Context(t), blockNums)`
$DIR/core/chains/evm/logpoller/log_poller_test.go: `.Context(t)`
$DIR/core/chains/evm/logpoller/log_poller_test.go: `.Client.Commit()`
$DIR/core/chains/evm/logpoller/log_poller_test.go: `.ORM.SelectBlockByNumber(testutils.Context(t), 2)`
$DIR/core/chains/evm/logpoller/log_poller_test.go: `.Context(t)`
$DIR/core/chains/evm/logpoller/log_poller_test.go: `.LogPoller.GetBlocksRange(testutils.Context(t), blockNums)`
$DIR/core/chains/evm/logpoller/log_poller_test.go: `.Context(t)`
$DIR/core/chains/evm/logpoller/log_poller_test.go: `.Client.Commit()`
$DIR/core/chains/evm/logpoller/log_poller_test.go: `.ORM.SelectBlockByNumber(testutils.Context(t), 3)`
$DIR/core/chains/evm/logpoller/log_poller_test.go: `.Context(t)`
$DIR/core/chains/evm/logpoller/log_poller_test.go: `.LogPoller.GetBlocksRange(testutils.Context(t), blockNums2)`
$DIR/core/chains/evm/logpoller/log_poller_test.go: `.Context(t)`
$DIR/core/chains/evm/logpoller/log_poller_test.go: `.LogPoller.PollAndSaveLogs(testutils.Context(t), 1)`
$DIR/core/chains/evm/logpoller/log_poller_test.go: `.Context(t)`
$DIR/core/chains/evm/logpoller/log_poller_test.go: `.ORM.SelectBlockByNumber(testutils.Context(t), 3)`
$DIR/core/chains/evm/logpoller/log_poller_test.go: `.Context(t)`
$DIR/core/chains/evm/logpoller/log_poller_test.go: `.LogPoller.GetBlocksRange(testutils.Context(t), blockNums)`
$DIR/core/chains/evm/logpoller/log_poller_test.go: `.Context(t)`
$DIR/core/chains/evm/logpoller/log_poller_test.go: `.LogPoller.GetBlocksRange(testutils.Context(t), blockNums)`
$DIR/core/chains/evm/logpoller/log_poller_test.go: `.Context(t)`
$DIR/core/chains/evm/logpoller/log_poller_test.go: `.LogPoller.GetBlocksRange(testutils.Context(t), blockNums)`
$DIR/core/chains/evm/logpoller/log_poller_test.go: `.Context(t)`
$DIR/core/chains/evm/logpoller/log_poller_test.go: `.WithCancel(testutils.Context(t))`
$DIR/core/chains/evm/logpoller/log_poller_test.go: `.Context(t)`
$DIR/core/chains/evm/logpoller/log_poller_test.go: `.LogPoller.GetBlocksRange(ctx, blockNums)`
$DIR/core/chains/evm/logpoller/log_poller_test.go: `.WithCancel(testutils.Context(t))`
$DIR/core/chains/evm/logpoller/log_poller_test.go: `.Context(t)`
$DIR/core/chains/evm/logpoller/log_poller_test.go: `.LogPoller.GetBlocksRange(ctx, blockNums)`
$DIR/core/chains/evm/logpoller/log_poller_test.go: `.Client.Commit()`
$DIR/core/chains/evm/logpoller/log_poller_test.go: `.LogPoller.GetReplayFromBlock(testutils.Context(t), requested)`
$DIR/core/chains/evm/logpoller/log_poller_test.go: `.Context(t)`
$DIR/core/chains/evm/logpoller/log_poller_test.go: `.PollAndSaveLogs(testutils.Context(t), 1)`
$DIR/core/chains/evm/logpoller/log_poller_test.go: `.Context(t)`
$DIR/core/chains/evm/logpoller/log_poller_test.go: `.Client.Commit()`
$DIR/core/chains/evm/logpoller/log_poller_test.go: `.LogPoller.GetReplayFromBlock(testutils.Context(t), requested)`
$DIR/core/chains/evm/logpoller/log_poller_test.go: `.Context(t)`
$DIR/core/chains/evm/logpoller/log_poller_test.go: `.LogPoller.LatestBlock(testutils.Context(t))`
$DIR/core/chains/evm/logpoller/log_poller_test.go: `.Context(t)`
$DIR/core/chains/evm/logpoller/log_poller_test.go: `.LogPoller.GetReplayFromBlock(testutils.Context(t), requested)`
$DIR/core/chains/evm/logpoller/log_poller_test.go: `.Context(t)`
$DIR/core/chains/evm/logpoller/log_poller_test.go: `.Context(t)`
$DIR/core/chains/evm/logpoller/log_poller_test.go: `.TestObserved(t, zapcore.WarnLevel)`
$DIR/core/chains/evm/logpoller/log_poller_test.go: `.NewRandomEVMChainID()`
$DIR/core/chains/evm/logpoller/log_poller_test.go: `.NewRandomEVMChainID()`
$DIR/core/chains/evm/logpoller/log_poller_test.go: `.NewSqlxDB(t)`
$DIR/core/chains/evm/logpoller/log_poller_test.go: `.NewORM(chainID1, db, lggr)`
$DIR/core/chains/evm/logpoller/log_poller_test.go: `.MustNewSimTransactor(t)`
$DIR/core/chains/evm/logpoller/log_poller_test.go: `.NewMemoryDatabase()`
$DIR/core/chains/evm/logpoller/log_poller_test.go: `.NewSimulatedBackendWithDatabase(ethDB, map[common.Address]core.GenesisAccount{
owner.From: {
Balance: big.NewInt(0).Mul(big.NewInt(10), big.NewInt(1e18)),
},
}, 10e6)`
$DIR/core/chains/evm/logpoller/log_poller_test.go: `.NewInt(0)`
$DIR/core/chains/evm/logpoller/log_poller_test.go: `.Mul(big.NewInt(10), big.NewInt(1e18))`
$DIR/core/chains/evm/logpoller/log_poller_test.go: `.NewInt(10)`
$DIR/core/chains/evm/logpoller/log_poller_test.go: `.NewInt(1e18)`
$DIR/core/chains/evm/logpoller/log_poller_test.go: `.DeployLogEmitter(owner, ec)`
$DIR/core/chains/evm/logpoller/log_poller_test.go: `.EmitLog1(owner, []*big.Int{big.NewInt(9)})`
$DIR/core/chains/evm/logpoller/log_poller_test.go: `.NewInt(9)`
$DIR/core/chains/evm/logpoller/log_poller_test.go: `.EmitLog1(owner, []*big.Int{big.NewInt(7)})`
$DIR/core/chains/evm/logpoller/log_poller_test.go: `.NewInt(7)`
$DIR/core/chains/evm/logpoller/log_poller_test.go: `.Commit()`
$DIR/core/chains/evm/logpoller/log_poller_test.go: `.Commit()`
$DIR/core/chains/evm/logpoller/log_poller_test.go: `.Commit()`
$DIR/core/chains/evm/logpoller/log_poller_test.go: `.NewLogPoller(o, client.NewSimulatedBackendClient(t, ec, chainID2), lggr, lpOpts)`
$DIR/core/chains/evm/logpoller/log_poller_test.go: `.NewSimulatedBackendClient(t, ec, chainID2)`
$DIR/core/chains/evm/logpoller/log_poller_test.go: `.Replay(ctx, 5)`
$DIR/core/chains/evm/logpoller/log_poller_test.go: `.Replay(ctx, 2)`
$DIR/core/chains/evm/logpoller/log_poller_test.go: `.Sleep(100 * time.Millisecond)`
$DIR/core/chains/evm/logpoller/log_poller_test.go: `.AssertEventually(t, func() bool {
return observedLogs.Len() >= 1
})`
$DIR/core/chains/evm/logpoller/log_poller_test.go: `.Len()`
$DIR/core/chains/evm/logpoller/log_poller_test.go: `.All()`
$DIR/core/chains/evm/logpoller/log_poller_test.go: `.Context(t)`
$DIR/core/chains/evm/logpoller/log_poller_test.go: `.NewEthClientMockWithDefaultChain(t)`
$DIR/core/chains/evm/logpoller/log_poller_test.go: `.TestObserved(t, zapcore.DebugLevel)`
$DIR/core/chains/evm/logpoller/log_poller_test.go: `.NewRandomEVMChainID()`
$DIR/core/chains/evm/logpoller/log_poller_test.go: `.NewSqlxDB(t)`
$DIR/core/chains/evm/logpoller/log_poller_test.go: `.NewORM(chainID, db, lggr)`
$DIR/core/chains/evm/logpoller/log_poller_test.go: `.NewLogPoller(o, ec, lggr, lpOpts)`
$DIR/core/chains/evm/logpoller/log_poller_test.go: `.On("HeadByNumber", mock.Anything, mock.Anything)`
$DIR/core/chains/evm/logpoller/log_poller_test.go: `.Return(func(ctx context.Context, blockNumber *big.Int) (*evmtypes.Head, error) {
if blockNumber == nil {
return &evmtypes.Head{Number: 300}, nil // Simulate currentBlock = 300
}
return &evmtypes.Head{Number: blockNumber.Int64()}, nil
})`
$DIR/core/chains/evm/logpoller/log_poller_test.go: `.Int64()`
$DIR/core/chains/evm/logpoller/log_poller_test.go: `.On("FilterLogs", mock.Anything, mock.Anything)`
$DIR/core/chains/evm/logpoller/log_poller_test.go: `.Return(func(ctx context.Context, fq ethereum.FilterQuery) (logs []types.Log, err error) {
if fq.BlockHash != nil {
return []types.Log{}, nil // succeed when single block requested
}
from := fq.FromBlock.Uint64()
to := fq.ToBlock.Uint64()
if to-from >= 4 {
return []types.Log{}, &clientErr // return "too many results" error if block range spans 4 or more blocks
}
return logs, err
})`
$DIR/core/chains/evm/logpoller/log_poller_test.go: `.FromBlock.Uint64()`
$DIR/core/chains/evm/logpoller/log_poller_test.go: `.ToBlock.Uint64()`
$DIR/core/chains/evm/logpoller/log_poller_test.go: `.NewAddress()`
$DIR/core/chains/evm/logpoller/log_poller_test.go: `.RegisterFilter(ctx, logpoller.Filter{
Name: "Integration test",
EventSigs: []common.Hash{EmitterABI.Events["Log1"].ID},
Addresses: []common.Address{addr},
})`
$DIR/core/chains/evm/logpoller/log_poller_test.go: `.PollAndSaveLogs(ctx, 5)`
$DIR/core/chains/evm/logpoller/log_poller_test.go: `.SelectLatestBlock(ctx)`
$DIR/core/chains/evm/logpoller/log_poller_test.go: `.FilterLevelExact(zapcore.WarnLevel)`
$DIR/core/chains/evm/logpoller/log_poller_test.go: `.FilterMessageSnippet("halving block range batch size")`
$DIR/core/chains/evm/logpoller/log_poller_test.go: `.FilterFieldKey("newBatchSize")`
$DIR/core/chains/evm/logpoller/log_poller_test.go: `.All()`
$DIR/core/chains/evm/logpoller/log_poller_test.go: `.TakeAll()`
$DIR/core/chains/evm/logpoller/log_poller_test.go: `.Unset()`
$DIR/core/chains/evm/logpoller/log_poller_test.go: `.Unset()`
$DIR/core/chains/evm/logpoller/log_poller_test.go: `.On("HeadByNumber", mock.Anything, mock.Anything)`
$DIR/core/chains/evm/logpoller/log_poller_test.go: `.Return(func(ctx context.Context, blockNumber *big.Int) (*evmtypes.Head, error) {
if blockNumber == nil {
return &evmtypes.Head{Number: 500}, nil // Simulate currentBlock = 300
}
return &evmtypes.Head{Number: blockNumber.Int64()}, nil
})`
$DIR/core/chains/evm/logpoller/log_poller_test.go: `.Int64()`
$DIR/core/chains/evm/logpoller/log_poller_test.go: `.On("FilterLogs", mock.Anything, mock.Anything)`
$DIR/core/chains/evm/logpoller/log_poller_test.go: `.Return(func(ctx context.Context, fq ethereum.FilterQuery) (logs []types.Log, err error) {
if fq.BlockHash != nil {
return []types.Log{}, nil // succeed when single block requested
}
return []types.Log{}, &clientErr // return "too many results" error if block range spans 4 or more blocks
})`
$DIR/core/chains/evm/logpoller/log_poller_test.go: `.PollAndSaveLogs(ctx, 298)`
$DIR/core/chains/evm/logpoller/log_poller_test.go: `.SelectLatestBlock(ctx)`
$DIR/core/chains/evm/logpoller/log_poller_test.go: `.FilterMessageSnippet("halving block range")`
$DIR/core/chains/evm/logpoller/log_poller_test.go: `.FilterLevelExact(zapcore.WarnLevel)`
$DIR/core/chains/evm/logpoller/log_poller_test.go: `.All()`
$DIR/core/chains/evm/logpoller/log_poller_test.go: `.FilterMessageSnippet("failed to retrieve logs")`
$DIR/core/chains/evm/logpoller/log_poller_test.go: `.FilterLevelExact(zapcore.DPanicLevel)`
$DIR/core/chains/evm/logpoller/log_poller_test.go: `.All()`
$DIR/core/chains/evm/logpoller/log_poller_test.go: `.Context(t)`
$DIR/core/chains/evm/logpoller/log_poller_test.go: `.LogPoller.RegisterFilter(ctx, logpoller.Filter{
Name: "GetBlocks Test",
EventSigs: []common.Hash{eventSig},
Addresses: []common.Address{th.EmitterAddress1}},
)`
$DIR/core/chains/evm/logpoller/log_poller_test.go: `.Emitter1.EmitLog1(th.Owner, []*big.Int{big.NewInt(int64(i))})`
$DIR/core/chains/evm/logpoller/log_poller_test.go: `.NewInt(int64(i))`
$DIR/core/chains/evm/logpoller/log_poller_test.go: `.Client.Commit()`
$DIR/core/chains/evm/logpoller/log_poller_test.go: `.Client.Blockchain()`
$DIR/core/chains/evm/logpoller/log_poller_test.go: `.CurrentHeader()`
$DIR/core/chains/evm/logpoller/log_poller_test.go: `.Client.Blockchain()`
$DIR/core/chains/evm/logpoller/log_poller_test.go: `.SetFinalized(h)`
$DIR/core/chains/evm/logpoller/log_poller_test.go: `.Emitter1.EmitLog1(th.Owner, []*big.Int{big.NewInt(int64(i))})`
$DIR/core/chains/evm/logpoller/log_poller_test.go: `.NewInt(int64(i))`
$DIR/core/chains/evm/logpoller/log_poller_test.go: `.Client.Commit()`
$DIR/core/chains/evm/logpoller/log_poller_test.go: `.PollAndSaveLogs(ctx, 1)`
$DIR/core/chains/evm/logpoller/log_poller_test.go: `.LogPoller.LogsDataWordGreaterThan(
ctx,
eventSig,
th.EmitterAddress1,
0,
common.Hash{},
evmtypes.Finalized,
)`
$DIR/core/chains/evm/logpoller/log_poller_test.go: `.LogPoller.LogsDataWordGreaterThan(
ctx,
eventSig,
th.EmitterAddress1,
0,
common.Hash{},
evmtypes.Confirmations(numberOfConfirmations),
)`
$DIR/core/chains/evm/logpoller/log_poller_test.go: `.Confirmations(numberOfConfirmations)`
$DIR/core/chains/evm/logpoller/log_poller_test.go: `.Context(t)`
$DIR/core/chains/evm/logpoller/log_poller_test.go: `.Run(tt.name, func(t *testing.T) {
lpOpts := logpoller.Opts{
UseFinalityTag: tt.useFinalityTag,
FinalityDepth: tt.finalityDepth,
BackfillBatchSize: 3,
RpcBatchSize: 2,
KeepFinalizedBlocksDepth: 1000,
}
th := SetupTH(t, lpOpts)
// Should return error before the first poll and save
_, err := th.LogPoller.LatestBlock(ctx)
require.Error(t, err)
// Mark first block as finalized
h := th.Client.Blockchain().CurrentHeader()
th.Client.Blockchain().SetFinalized(h)
// Create a couple of blocks
for i := 0; i < numberOfBlocks-1; i++ {
th.Client.Commit()
}
th.PollAndSaveLogs(ctx, 1)
latestBlock, err := th.LogPoller.LatestBlock(ctx)
require.NoError(t, err)
require.Equal(t, int64(numberOfBlocks), latestBlock.BlockNumber)
require.Equal(t, tt.expectedFinalizedBlock, latestBlock.FinalizedBlockNumber)
})`
$DIR/core/chains/evm/logpoller/log_poller_test.go: `.LogPoller.LatestBlock(ctx)`
$DIR/core/chains/evm/logpoller/log_poller_test.go: `.Client.Blockchain()`
$DIR/core/chains/evm/logpoller/log_poller_test.go: `.CurrentHeader()`
$DIR/core/chains/evm/logpoller/log_poller_test.go: `.Client.Blockchain()`
$DIR/core/chains/evm/logpoller/log_poller_test.go: `.SetFinalized(h)`
$DIR/core/chains/evm/logpoller/log_poller_test.go: `.Client.Commit()`
$DIR/core/chains/evm/logpoller/log_poller_test.go: `.PollAndSaveLogs(ctx, 1)`
$DIR/core/chains/evm/logpoller/log_poller_test.go: `.LogPoller.LatestBlock(ctx)`
$DIR/core/chains/evm/logpoller/log_poller_test.go: `.Context(t)`
$DIR/core/chains/evm/logpoller/log_poller_test.go: `.Run(tt.name, func(t *testing.T) {
lpOpts := logpoller.Opts{
UseFinalityTag: tt.finalityTag,
FinalityDepth: tt.finalityDepth,
BackfillBatchSize: 3,
RpcBatchSize: 2,
KeepFinalizedBlocksDepth: 1000,
BackupPollerBlockDelay: 100,
}
th := SetupTH(t, lpOpts)
header, err := th.Client.HeaderByNumber(ctx, nil)
require.NoError(t, err)
genesisBlockTime := time.UnixMilli(int64(header.Time))
// Emit some logs in blocks
for i := 0; i < emittedLogs; i++ {
_, err2 := th.Emitter1.EmitLog1(th.Owner, []*big.Int{big.NewInt(int64(i))})
require.NoError(t, err2)
th.Client.Commit()
}
// First PollAndSave, no filters are registered
currentBlock := th.PollAndSaveLogs(ctx, 1)
err = th.LogPoller.RegisterFilter(ctx, logpoller.Filter{
Name: "Test Emitter",
EventSigs: []common.Hash{EmitterABI.Events["Log1"].ID},
Addresses: []common.Address{th.EmitterAddress1},
})
require.NoError(t, err)
// Emit blocks to cover finality depth, because backup always backfill up to the one block before last finalized
for i := 0; i < int(tt.finalityDepth)+1; i++ {
bh := th.Client.Commit()
markBlockAsFinalizedByHash(t, th, bh)
}
// LogPoller should backfill entire history
th.LogPoller.BackupPollAndSaveLogs(ctx)
require.NoError(t, err)
// Make sure that all logs are backfilled
logs, err := th.LogPoller.Logs(
ctx,
0,
currentBlock,
EmitterABI.Events["Log1"].ID,
th.EmitterAddress1,
)
require.NoError(t, err)
require.Len(t, logs, emittedLogs)
// We should get all the logs by the block_timestamp
logs, err = th.LogPoller.LogsCreatedAfter(
ctx,
EmitterABI.Events["Log1"].ID,
th.EmitterAddress1,
genesisBlockTime,
0,
)
require.NoError(t, err)
require.Len(t, logs, emittedLogs)
})`
$DIR/core/chains/evm/logpoller/log_poller_test.go: `.Client.HeaderByNumber(ctx, nil)`
$DIR/core/chains/evm/logpoller/log_poller_test.go: `.UnixMilli(int64(header.Time))`
$DIR/core/chains/evm/logpoller/log_poller_test.go: `.Emitter1.EmitLog1(th.Owner, []*big.Int{big.NewInt(int64(i))})`
$DIR/core/chains/evm/logpoller/log_poller_test.go: `.NewInt(int64(i))`
$DIR/core/chains/evm/logpoller/log_poller_test.go: `.Client.Commit()`
$DIR/core/chains/evm/logpoller/log_poller_test.go: `.PollAndSaveLogs(ctx, 1)`
$DIR/core/chains/evm/logpoller/log_poller_test.go: `.LogPoller.RegisterFilter(ctx, logpoller.Filter{
Name: "Test Emitter",
EventSigs: []common.Hash{EmitterABI.Events["Log1"].ID},
Addresses: []common.Address{th.EmitterAddress1},
})`
$DIR/core/chains/evm/logpoller/log_poller_test.go: `.Client.Commit()`
$DIR/core/chains/evm/logpoller/log_poller_test.go: `.LogPoller.BackupPollAndSaveLogs(ctx)`
$DIR/core/chains/evm/logpoller/log_poller_test.go: `.LogPoller.Logs(
ctx,
0,
currentBlock,
EmitterABI.Events["Log1"].ID,
th.EmitterAddress1,
)`
$DIR/core/chains/evm/logpoller/log_poller_test.go: `.LogPoller.LogsCreatedAfter(
ctx,
EmitterABI.Events["Log1"].ID,
th.EmitterAddress1,
genesisBlockTime,
0,
)`
$DIR/core/chains/evm/logpoller/log_poller_test.go: `.Context(t)`
$DIR/core/chains/evm/logpoller/log_poller_test.go: `.Run(tt.name, func(t *testing.T) {
lpOpts := logpoller.Opts{
UseFinalityTag: true,
BackfillBatchSize: 3,
RpcBatchSize: 2,
KeepFinalizedBlocksDepth: tt.keepFinalizedBlocksDepth,
}
th := SetupTH(t, lpOpts)
for i := 1; i <= tt.blockToCreate; i++ {
err := th.ORM.InsertBlock(ctx, utils.RandomBytes32(), int64(i+10), time.Now(), int64(i))
require.NoError(t, err)
}
if tt.wantErr {
_, err := th.LogPoller.PruneOldBlocks(ctx)
require.Error(t, err)
return
}
allDeleted, err := th.LogPoller.PruneOldBlocks(ctx)
require.NoError(t, err)
assert.True(t, allDeleted)
blocks, err := th.ORM.GetBlocksRange(ctx, 0, math.MaxInt64)
require.NoError(t, err)
assert.Len(t, blocks, tt.blocksLeft)
})`
$DIR/core/chains/evm/logpoller/log_poller_test.go: `.ORM.InsertBlock(ctx, utils.RandomBytes32(), int64(i+10), time.Now(), int64(i))`
$DIR/core/chains/evm/logpoller/log_poller_test.go: `.RandomBytes32()`
$DIR/core/chains/evm/logpoller/log_poller_test.go: `.Now()`
$DIR/core/chains/evm/logpoller/log_poller_test.go: `.LogPoller.PruneOldBlocks(ctx)`
$DIR/core/chains/evm/logpoller/log_poller_test.go: `.LogPoller.PruneOldBlocks(ctx)`
$DIR/core/chains/evm/logpoller/log_poller_test.go: `.ORM.GetBlocksRange(ctx, 0, math.MaxInt64)`
$DIR/core/chains/evm/logpoller/log_poller_test.go: `.Context(t)`
$DIR/core/chains/evm/logpoller/log_poller_test.go: `.NewEthClientMockWithDefaultChain(t)`
$DIR/core/chains/evm/logpoller/log_poller_test.go: `.Test(t)`
$DIR/core/chains/evm/logpoller/log_poller_test.go: `.NewRandomEVMChainID()`
$DIR/core/chains/evm/logpoller/log_poller_test.go: `.NewSqlxDB(t)`
$DIR/core/chains/evm/logpoller/log_poller_test.go: `.NewORM(chainID, db, lggr)`
$DIR/core/chains/evm/logpoller/log_poller_test.go: `.NewLogPoller(orm, ec, lggr, lpOpts)`
$DIR/core/chains/evm/logpoller/log_poller_test.go: `.Run("Fails, if failed to select oldest block", func(t *testing.T) {
_, err := lp.FindLCA(ctx)
require.ErrorContains(t, err, "failed to select the latest block")
})`
$DIR/core/chains/evm/logpoller/log_poller_test.go: `.FindLCA(ctx)`
$DIR/core/chains/evm/logpoller/log_poller_test.go: `.HexToHash("0x124")`
$DIR/core/chains/evm/logpoller/log_poller_test.go: `.Run("Fails, if caller's context canceled", func(t *testing.T) {
lCtx, cancel := context.WithCancel(ctx)
ec.On("HeadByHash", mock.Anything, latestBlockHash).Return(nil, nil).Run(func(_ mock.Arguments) {
cancel()
}).Once()
_, err := lp.FindLCA(lCtx)
require.ErrorContains(t, err, "aborted, FindLCA request cancelled")
})`
$DIR/core/chains/evm/logpoller/log_poller_test.go: `.WithCancel(ctx)`
$DIR/core/chains/evm/logpoller/log_poller_test.go: `.On("HeadByHash", mock.Anything, latestBlockHash)`
$DIR/core/chains/evm/logpoller/log_poller_test.go: `.Return(nil, nil)`
$DIR/core/chains/evm/logpoller/log_poller_test.go: `.Run(func(_ mock.Arguments) {
cancel()
})`
$DIR/core/chains/evm/logpoller/log_poller_test.go: `.Once()`
$DIR/core/chains/evm/logpoller/log_poller_test.go: `.FindLCA(lCtx)`
$DIR/core/chains/evm/logpoller/log_poller_test.go: `.Run("Fails, if RPC returns an error", func(t *testing.T) {
expectedError := fmt.Errorf("failed to call RPC")
ec.On("HeadByHash", mock.Anything, latestBlockHash).Return(nil, expectedError).Once()
_, err := lp.FindLCA(ctx)
require.ErrorContains(t, err, expectedError.Error())
})`
$DIR/core/chains/evm/logpoller/log_poller_test.go: `.On("HeadByHash", mock.Anything, latestBlockHash)`
$DIR/core/chains/evm/logpoller/log_poller_test.go: `.Return(nil, expectedError)`
$DIR/core/chains/evm/logpoller/log_poller_test.go: `.Once()`
$DIR/core/chains/evm/logpoller/log_poller_test.go: `.FindLCA(ctx)`
$DIR/core/chains/evm/logpoller/log_poller_test.go: `.Run("Fails, if block numbers do not match", func(t *testing.T) {
ec.On("HeadByHash", mock.Anything, latestBlockHash).Return(&evmtypes.Head{
Number: 123,
}, nil).Once()
_, err := lp.FindLCA(ctx)
require.ErrorContains(t, err, "expected block numbers to match")
})`
$DIR/core/chains/evm/logpoller/log_poller_test.go: `.On("HeadByHash", mock.Anything, latestBlockHash)`
$DIR/core/chains/evm/logpoller/log_poller_test.go: `.Return(&evmtypes.Head{
Number: 123,
}, nil)`
$DIR/core/chains/evm/logpoller/log_poller_test.go: `.Once()`
$DIR/core/chains/evm/logpoller/log_poller_test.go: `.FindLCA(ctx)`
$DIR/core/chains/evm/logpoller/log_poller_test.go: `.Run("Fails, if none of the blocks in db matches on chain", func(t *testing.T) {
ec.On("HeadByHash", mock.Anything, mock.Anything).Return(nil, nil).Times(3)
_, err := lp.FindLCA(ctx)
require.ErrorContains(t, err, "failed to find LCA, this means that whole database LogPoller state was reorged out of chain or RPC/Core node is misconfigured")
})`
$DIR/core/chains/evm/logpoller/log_poller_test.go: `.On("HeadByHash", mock.Anything, mock.Anything)`
$DIR/core/chains/evm/logpoller/log_poller_test.go: `.Return(nil, nil)`
$DIR/core/chains/evm/logpoller/log_poller_test.go: `.Times(3)`
$DIR/core/chains/evm/logpoller/log_poller_test.go: `.FindLCA(ctx)`
$DIR/core/chains/evm/logpoller/log_poller_test.go: `.Run(tc.Name, func(t *testing.T) {
// reset the database
require.NoError(t, orm.DeleteLogsAndBlocksAfter(ctx, 0))
for _, b := range tc.Blocks {
blockHashI++
hash := common.BigToHash(big.NewInt(blockHashI))
require.NoError(t, orm.InsertBlock(ctx, hash, int64(b.BN), time.Now(), 0))
// Hashes are unique for all test cases
var onChainBlock *evmtypes.Head
if b.Exists {
onChainBlock = &evmtypes.Head{Number: int64(b.BN)}
}
ec.On("HeadByHash", mock.Anything, hash).Return(onChainBlock, nil).Maybe()
}
result, err := lp.FindLCA(ctx)
if tc.ExpectedError != nil {
require.ErrorContains(t, err, tc.ExpectedError.Error())
} else {
require.NotNil(t, result)
require.Equal(t, result.BlockNumber, int64(tc.ExpectedBlockNumber), "expected block numbers to match")
}
})`
$DIR/core/chains/evm/logpoller/log_poller_test.go: `.BigToHash(big.NewInt(blockHashI))`
$DIR/core/chains/evm/logpoller/log_poller_test.go: `.NewInt(blockHashI)`
$DIR/core/chains/evm/logpoller/log_poller_test.go: `.On("HeadByHash", mock.Anything, hash)`
$DIR/core/chains/evm/logpoller/log_poller_test.go: `.Return(onChainBlock, nil)`
$DIR/core/chains/evm/logpoller/log_poller_test.go: `.Maybe()`
$DIR/core/chains/evm/logpoller/log_poller_test.go: `.FindLCA(ctx)`
$DIR/core/chains/evm/logpoller/observability_test.go: `t.Cleanup(func() { resetMetrics(*orm) })`
$DIR/core/chains/evm/logpoller/observability_test.go: `resetMetrics(*orm)`
$DIR/core/chains/evm/logpoller/observability_test.go: `_, _ = orm.SelectIndexedLogs(ctx, common.Address{}, common.Hash{}, 1, []common.Hash{}, 1)`
$DIR/core/chains/evm/logpoller/observability_test.go: `_, _ = orm.SelectIndexedLogsByBlockRange(ctx, 0, 1, common.Address{}, common.Hash{}, 1, []common.Hash{})`
$DIR/core/chains/evm/logpoller/observability_test.go: `_, _ = orm.SelectIndexedLogsTopicGreaterThan(ctx, common.Address{}, common.Hash{}, 1, common.Hash{}, 1)`
$DIR/core/chains/evm/logpoller/observability_test.go: `_, _ = orm.SelectIndexedLogsTopicRange(ctx, common.Address{}, common.Hash{}, 1, common.Hash{}, common.Hash{}, 1)`
$DIR/core/chains/evm/logpoller/observability_test.go: `_, _ = orm.SelectIndexedLogsWithSigsExcluding(ctx, common.Hash{}, common.Hash{}, 1, common.Address{}, 0, 1, 1)`
$DIR/core/chains/evm/logpoller/observability_test.go: `_, _ = orm.SelectLogsDataWordRange(ctx, common.Address{}, common.Hash{}, 0, common.Hash{}, common.Hash{}, 1)`
$DIR/core/chains/evm/logpoller/observability_test.go: `_, _ = orm.SelectLogsDataWordGreaterThan(ctx, common.Address{}, common.Hash{}, 0, common.Hash{}, 1)`
$DIR/core/chains/evm/logpoller/observability_test.go: `_, _ = orm.SelectLogsCreatedAfter(ctx, common.Address{}, common.Hash{}, time.Now(), 0)`
$DIR/core/chains/evm/logpoller/observability_test.go: `_, _ = orm.SelectLatestLogByEventSigWithConfs(ctx, common.Hash{}, common.Address{}, 0)`
$DIR/core/chains/evm/logpoller/observability_test.go: `_, _ = orm.SelectLatestLogEventSigsAddrsWithConfs(ctx, 0, []common.Address{{}}, []common.Hash{{}}, 1)`
$DIR/core/chains/evm/logpoller/observability_test.go: `_, _ = orm.SelectIndexedLogsCreatedAfter(ctx, common.Address{}, common.Hash{}, 1, []common.Hash{}, time.Now(), 0)`
$DIR/core/chains/evm/logpoller/observability_test.go: `_ = orm.InsertLogs(ctx, []Log{})`
$DIR/core/chains/evm/logpoller/observability_test.go: `_ = orm.InsertLogsWithBlock(ctx, []Log{}, NewLogPollerBlock(common.Hash{}, 1, time.Now(), 0))`
$DIR/core/chains/evm/logpoller/observability_test.go: `t.Cleanup(func() { resetMetrics(*orm) })`
$DIR/core/chains/evm/logpoller/observability_test.go: `resetMetrics(*orm)`
$DIR/core/chains/evm/logpoller/observability_test.go: `t.Cleanup(func() { resetMetrics(*orm) })`
$DIR/core/chains/evm/logpoller/observability_test.go: `resetMetrics(*orm)`
$DIR/core/chains/evm/logpoller/observability_test.go: `.Context(t)`
$DIR/core/chains/evm/logpoller/observability_test.go: `.Cleanup(func() { resetMetrics(*orm) })`
$DIR/core/chains/evm/logpoller/observability_test.go: `.SelectIndexedLogs(ctx, common.Address{}, common.Hash{}, 1, []common.Hash{}, 1)`
$DIR/core/chains/evm/logpoller/observability_test.go: `.SelectIndexedLogsByBlockRange(ctx, 0, 1, common.Address{}, common.Hash{}, 1, []common.Hash{})`
$DIR/core/chains/evm/logpoller/observability_test.go: `.SelectIndexedLogsTopicGreaterThan(ctx, common.Address{}, common.Hash{}, 1, common.Hash{}, 1)`
$DIR/core/chains/evm/logpoller/observability_test.go: `.SelectIndexedLogsTopicRange(ctx, common.Address{}, common.Hash{}, 1, common.Hash{}, common.Hash{}, 1)`
$DIR/core/chains/evm/logpoller/observability_test.go: `.SelectIndexedLogsWithSigsExcluding(ctx, common.Hash{}, common.Hash{}, 1, common.Address{}, 0, 1, 1)`
$DIR/core/chains/evm/logpoller/observability_test.go: `.SelectLogsDataWordRange(ctx, common.Address{}, common.Hash{}, 0, common.Hash{}, common.Hash{}, 1)`
$DIR/core/chains/evm/logpoller/observability_test.go: `.SelectLogsDataWordGreaterThan(ctx, common.Address{}, common.Hash{}, 0, common.Hash{}, 1)`
$DIR/core/chains/evm/logpoller/observability_test.go: `.SelectLogsCreatedAfter(ctx, common.Address{}, common.Hash{}, time.Now(), 0)`
$DIR/core/chains/evm/logpoller/observability_test.go: `.Now()`
$DIR/core/chains/evm/logpoller/observability_test.go: `.SelectLatestLogByEventSigWithConfs(ctx, common.Hash{}, common.Address{}, 0)`
$DIR/core/chains/evm/logpoller/observability_test.go: `.SelectLatestLogEventSigsAddrsWithConfs(ctx, 0, []common.Address{{}}, []common.Hash{{}}, 1)`
$DIR/core/chains/evm/logpoller/observability_test.go: `.SelectIndexedLogsCreatedAfter(ctx, common.Address{}, common.Hash{}, 1, []common.Hash{}, time.Now(), 0)`
$DIR/core/chains/evm/logpoller/observability_test.go: `.Now()`
$DIR/core/chains/evm/logpoller/observability_test.go: `.InsertLogs(ctx, []Log{})`
$DIR/core/chains/evm/logpoller/observability_test.go: `.InsertLogsWithBlock(ctx, []Log{}, NewLogPollerBlock(common.Hash{}, 1, time.Now(), 0))`
$DIR/core/chains/evm/logpoller/observability_test.go: `.Now()`
$DIR/core/chains/evm/logpoller/observability_test.go: `.CollectAndCount(orm.datasetSize)`
$DIR/core/chains/evm/logpoller/observability_test.go: `.Context(t)`
$DIR/core/chains/evm/logpoller/observability_test.go: `.Cleanup(func() { resetMetrics(*orm) })`
$DIR/core/chains/evm/logpoller/observability_test.go: `.SelectLatestLogByEventSigWithConfs(ctx, common.Hash{}, common.Address{}, 0)`
$DIR/core/chains/evm/logpoller/observability_test.go: `.Cleanup(func() { resetMetrics(*orm) })`
$DIR/core/chains/evm/logpoller/observability_test.go: `.Context(t)`
$DIR/core/chains/evm/logpoller/observability_test.go: `.ToFloat64(orm.blocksInserted.WithLabelValues("420"))`
$DIR/core/chains/evm/logpoller/observability_test.go: `.blocksInserted.WithLabelValues("420")`
$DIR/core/chains/evm/logpoller/orm_test.go: `logs = append(logs, GenLog(th.ChainID, int64(i+1), 1, "0x3", EmitterABI.Events["Log1"].ID.Bytes(), th.EmitterAddress1))`
$DIR/core/chains/evm/logpoller/orm_test.go: `blockNumbers = append(blockNumbers, b.number)`
$DIR/core/chains/evm/logpoller/orm_test.go: `recentBlocks = append(recentBlocks, block{number: int64(i), hash: common.HexToHash(fmt.Sprintf("0x%d", i))})`
$DIR/core/chains/evm/logpoller/orm_test.go: `blockNumbers = append(blockNumbers, b.number)`
$DIR/core/chains/evm/logpoller/orm_test.go: `latest, err = o2.SelectLatestBlock(ctx)`
$DIR/core/chains/evm/logpoller/orm_test.go: `_, err = o1.SelectBlockByHash(ctx, common.HexToHash("0x1234"))`
$DIR/core/chains/evm/logpoller/orm_test.go: `_, err = o2.SelectBlockByHash(ctx, common.HexToHash("0x1234"))`
$DIR/core/chains/evm/logpoller/orm_test.go: `_, err = o2.SelectBlockByHash(ctx, common.HexToHash("0x1235"))`
$DIR/core/chains/evm/logpoller/orm_test.go: `logs, err = o1.SelectLogsByBlockRange(ctx, 10, 10)`
$DIR/core/chains/evm/logpoller/orm_test.go: `logs, err = o1.SelectLogs(ctx, 1, 1, common.HexToAddress("0x1234"), topic)`
$DIR/core/chains/evm/logpoller/orm_test.go: `logs, err = o1.SelectLogs(ctx, 10, 10, common.HexToAddress("0x1234"), topic)`
$DIR/core/chains/evm/logpoller/orm_test.go: `_, err = o1.SelectLatestLogByEventSigWithConfs(ctx, topic, common.HexToAddress("0x1234"), 0)`
$DIR/core/chains/evm/logpoller/orm_test.go: `_, err = o1.SelectLatestLogByEventSigWithConfs(ctx, topic, common.HexToAddress("0x1234"), 1)`
$DIR/core/chains/evm/logpoller/orm_test.go: `_, err = o1.SelectLatestLogByEventSigWithConfs(ctx, topic, common.HexToAddress("0x1234"), 0)`
$DIR/core/chains/evm/logpoller/orm_test.go: `_, err = o1.SelectLatestLogByEventSigWithConfs(ctx, topic, common.HexToAddress("0x1234"), 1)`
$DIR/core/chains/evm/logpoller/orm_test.go: `_, err = o1.SelectLatestLogByEventSigWithConfs(ctx, topic, common.HexToAddress("0x1234"), 2)`
$DIR/core/chains/evm/logpoller/orm_test.go: `_, err = o1.SelectLatestLogByEventSigWithConfs(ctx, topic, common.HexToAddress("0x1234"), 3)`
$DIR/core/chains/evm/logpoller/orm_test.go: `lgs, err = o1.SelectLatestLogEventSigsAddrsWithConfs(ctx, 0 /* startBlock */, []common.Address{common.HexToAddress("0x1234"), common.HexToAddress("0x1235")}, []common.Hash{topic}, 0)`
$DIR/core/chains/evm/logpoller/orm_test.go: `lgs, err = o1.SelectLatestLogEventSigsAddrsWithConfs(ctx, 0 /* startBlock */, []common.Address{common.HexToAddress("0x1234")}, []common.Hash{topic, topic2}, 0)`
$DIR/core/chains/evm/logpoller/orm_test.go: `lgs, err = o1.SelectLatestLogEventSigsAddrsWithConfs(ctx, 0 /* startBlock */, []common.Address{common.HexToAddress("0x1234"), common.HexToAddress("0x1235")}, []common.Hash{topic, topic2}, 0)`
$DIR/core/chains/evm/logpoller/orm_test.go: `lgs, err = o1.SelectLatestLogEventSigsAddrsWithConfs(ctx, 0 /* startBlock */, []common.Address{common.HexToAddress("0x1234"), common.HexToAddress("0x1235")}, []common.Hash{topic, topic2}, 1)`
$DIR/core/chains/evm/logpoller/orm_test.go: `lgs, err = o1.SelectLatestLogEventSigsAddrsWithConfs(ctx, 0 /* startBlock */, []common.Address{common.HexToAddress("0x1234"), common.HexToAddress("0x1235")}, []common.Hash{topic, topic2}, 2)`
$DIR/core/chains/evm/logpoller/orm_test.go: `latest, err = o1.SelectLatestBlock(ctx)`
$DIR/core/chains/evm/logpoller/orm_test.go: `logs, err = o1.SelectLogsByBlockRange(ctx, 1, latest.BlockNumber)`
$DIR/core/chains/evm/logpoller/orm_test.go: `time.Sleep(2 * time.Millisecond)`
$DIR/core/chains/evm/logpoller/orm_test.go: `logs, err = o1.SelectLogsByBlockRange(ctx, 1, latest.BlockNumber)`
$DIR/core/chains/evm/logpoller/orm_test.go: `err = o1.DeleteLogsAndBlocksAfter(ctx, 1)`
$DIR/core/chains/evm/logpoller/orm_test.go: `logs, err = o1.SelectLogsByBlockRange(ctx, 1, latest.BlockNumber)`
$DIR/core/chains/evm/logpoller/orm_test.go: `t.Run("Save filter: "+filter.Name, func(t *testing.T) {
var count int
err := orm.InsertFilter(ctx, filter)
require.NoError(t, err)
err = dbx.Get(&count, `SELECT COUNT(*) FROM evm.log_poller_filters WHERE evm_chain_id = $1 AND name = $2`, ubig.New(chainID), filter.Name)
require.NoError(t, err)
expectedCount := len(filter.Addresses) * len(filter.EventSigs)
if len(filter.Topic2) > 0 {
expectedCount *= len(filter.Topic2)
}
if len(filter.Topic3) > 0 {
expectedCount *= len(filter.Topic3)
}
if len(filter.Topic4) > 0 {
expectedCount *= len(filter.Topic4)
}
assert.Equal(t, count, expectedCount)
})`
$DIR/core/chains/evm/logpoller/orm_test.go: `err = dbx.Get(&count, `SELECT COUNT(*) FROM evm.log_poller_filters WHERE evm_chain_id = $1 AND name = $2`, ubig.New(chainID), filter.Name)`
$DIR/core/chains/evm/logpoller/orm_test.go: `expectedCount *= len(filter.Topic2)`
$DIR/core/chains/evm/logpoller/orm_test.go: `expectedCount *= len(filter.Topic3)`
$DIR/core/chains/evm/logpoller/orm_test.go: `expectedCount *= len(filter.Topic4)`
$DIR/core/chains/evm/logpoller/orm_test.go: `insertLogsTopicValueRange(t, th.ChainID, o1, addr, 1, eventSig, 1, 3)`
$DIR/core/chains/evm/logpoller/orm_test.go: `insertLogsTopicValueRange(t, th.ChainID, o1, addr, 2, eventSig, 4, 4)`
$DIR/core/chains/evm/logpoller/orm_test.go: `topicFilters.Expressions[idx] = logpoller.NewEventByTopicFilter(topicIdx, []primitives.ValueComparator{
{Value: logpoller.EvmWord(value).Hex(), Operator: primitives.Eq},
})`
$DIR/core/chains/evm/logpoller/orm_test.go: `lgs, err = o1.FilteredLogs(ctx, standardFilter(1, []uint64{1}), limiter, "")`
$DIR/core/chains/evm/logpoller/orm_test.go: `lgs, err = o1.SelectIndexedLogs(ctx, addr, eventSig, 1, []common.Hash{logpoller.EvmWord(1), logpoller.EvmWord(2)}, 0)`
$DIR/core/chains/evm/logpoller/orm_test.go: `lgs, err = o1.FilteredLogs(ctx, standardFilter(1, []uint64{1, 2}), limiter, "")`
$DIR/core/chains/evm/logpoller/orm_test.go: `lgs, err = o1.SelectIndexedLogsByBlockRange(ctx, 1, 1, addr, eventSig, 1, []common.Hash{logpoller.EvmWord(1)})`
$DIR/core/chains/evm/logpoller/orm_test.go: `lgs, err = o1.FilteredLogs(ctx, blockRangeFilter(1, 1, 1, []uint64{1}), limiter, "")`
$DIR/core/chains/evm/logpoller/orm_test.go: `lgs, err = o1.SelectIndexedLogsByBlockRange(ctx, 1, 2, addr, eventSig, 1, []common.Hash{logpoller.EvmWord(2)})`
$DIR/core/chains/evm/logpoller/orm_test.go: `lgs, err = o1.FilteredLogs(ctx, blockRangeFilter(1, 2, 1, []uint64{2}), limiter, "")`
$DIR/core/chains/evm/logpoller/orm_test.go: `lgs, err = o1.SelectIndexedLogsByBlockRange(ctx, 1, 2, addr, eventSig, 1, []common.Hash{logpoller.EvmWord(1)})`
$DIR/core/chains/evm/logpoller/orm_test.go: `lgs, err = o1.FilteredLogs(ctx, blockRangeFilter(1, 2, 1, []uint64{1}), limiter, "")`
$DIR/core/chains/evm/logpoller/orm_test.go: `_, err = o1.SelectIndexedLogsByBlockRange(ctx, 1, 2, addr, eventSig, 0, []common.Hash{logpoller.EvmWord(1)})`
$DIR/core/chains/evm/logpoller/orm_test.go: `_, err = o1.FilteredLogs(ctx, blockRangeFilter(1, 2, 0, []uint64{1}), limiter, "")`
$DIR/core/chains/evm/logpoller/orm_test.go: `_, err = o1.SelectIndexedLogsByBlockRange(ctx, 1, 2, addr, eventSig, 4, []common.Hash{logpoller.EvmWord(1)})`
$DIR/core/chains/evm/logpoller/orm_test.go: `_, err = o1.FilteredLogs(ctx, blockRangeFilter(1, 2, 4, []uint64{1}), limiter, "")`
$DIR/core/chains/evm/logpoller/orm_test.go: `lgs, err = o1.SelectIndexedLogsTopicGreaterThan(ctx, addr, eventSig, 1, logpoller.EvmWord(2), 0)`
$DIR/core/chains/evm/logpoller/orm_test.go: `lgs, err = o1.FilteredLogs(ctx, filter, limiter, "")`
$DIR/core/chains/evm/logpoller/orm_test.go: `lgs, err = o1.SelectIndexedLogsTopicRange(ctx, addr, eventSig, 1, logpoller.EvmWord(3), logpoller.EvmWord(3), 0)`
$DIR/core/chains/evm/logpoller/orm_test.go: `lgs, err = o1.FilteredLogs(ctx, rangeFilter(1, 3, 3), limiter, "")`
$DIR/core/chains/evm/logpoller/orm_test.go: `lgs, err = o1.SelectIndexedLogsTopicRange(ctx, addr, eventSig, 1, logpoller.EvmWord(1), logpoller.EvmWord(3), 0)`
$DIR/core/chains/evm/logpoller/orm_test.go: `lgs, err = o1.FilteredLogs(ctx, rangeFilter(1, 1, 3), limiter, "")`
$DIR/core/chains/evm/logpoller/orm_test.go: `lgs, err = o1.SelectIndexedLogsTopicRange(ctx, addr, eventSig, 1, logpoller.EvmWord(4), logpoller.EvmWord(4), 1)`
$DIR/core/chains/evm/logpoller/orm_test.go: `lgs, err = o1.SelectIndexedLogsTopicRange(ctx, addr, eventSig, 1, logpoller.EvmWord(4), logpoller.EvmWord(4), 1)`
$DIR/core/chains/evm/logpoller/orm_test.go: `retrievedLogs, err = o1.FilteredLogs(ctx, filter, limiter, "")`
$DIR/core/chains/evm/logpoller/orm_test.go: `lgs, err = o1.FilteredLogs(ctx, wordFilter(0, 2, 2), limiter, "")`
$DIR/core/chains/evm/logpoller/orm_test.go: `lgs, err = o1.SelectLogsDataWordRange(ctx, addr, eventSig, 0, logpoller.EvmWord(1), logpoller.EvmWord(2), 0)`
$DIR/core/chains/evm/logpoller/orm_test.go: `lgs, err = o1.FilteredLogs(ctx, wordFilter(0, 1, 2), limiter, "")`
$DIR/core/chains/evm/logpoller/orm_test.go: `lgs, err = o1.SelectLogsDataWordRange(ctx, addr, eventSig, 0, logpoller.EvmWord(1), logpoller.EvmWord(1), 0)`
$DIR/core/chains/evm/logpoller/orm_test.go: `lgs, err = o1.FilteredLogs(ctx, wordFilter(0, 1, 1), limiter, "")`
$DIR/core/chains/evm/logpoller/orm_test.go: `lgs, err = o1.SelectLogsDataWordRange(ctx, addr, eventSig, 1, logpoller.EvmWord(3), logpoller.EvmWord(3), 0)`
$DIR/core/chains/evm/logpoller/orm_test.go: `lgs, err = o1.FilteredLogs(ctx, wordFilter(1, 3, 3), limiter, "")`
$DIR/core/chains/evm/logpoller/orm_test.go: `lgs, err = o1.SelectLogsDataWordRange(ctx, addr, eventSig, 1, logpoller.EvmWord(3), logpoller.EvmWord(3), 0)`
$DIR/core/chains/evm/logpoller/orm_test.go: `lgs, err = o1.FilteredLogs(ctx, wordFilter(1, 3, 3), limiter, "")`
$DIR/core/chains/evm/logpoller/orm_test.go: `lgs, err = o1.SelectLogsDataWordGreaterThan(ctx, addr, eventSig, 0, logpoller.EvmWord(1), 0)`
$DIR/core/chains/evm/logpoller/orm_test.go: `lgs, err = o1.FilteredLogs(ctx, filter, limiter, "")`
$DIR/core/chains/evm/logpoller/orm_test.go: `exp[idx] = logpoller.NewEventSigFilter(val)`
$DIR/core/chains/evm/logpoller/orm_test.go: `filters = append(filters, query.Expression{
BoolExpression: query.BoolExpression{
Expressions: exp,
BoolOperator: query.OR,
},
})`
$DIR/core/chains/evm/logpoller/orm_test.go: `filters = append(filters, query.Expression{
BoolExpression: query.BoolExpression{
Expressions: []query.Expression{
query.Block(uint64(startBlock), primitives.Gte),
query.Block(uint64(endBlock), primitives.Lte),
},
BoolOperator: query.AND,
},
})`
$DIR/core/chains/evm/logpoller/orm_test.go: `assertion(t, logs, err, startBlock, endBlock)`
$DIR/core/chains/evm/logpoller/orm_test.go: `logs, err = th.ORM.FilteredLogs(ctx, filter([]common.Hash{topic, topic2}, startBlock, endBlock), limiter, "")`
$DIR/core/chains/evm/logpoller/orm_test.go: `_, err = o1.SelectBlockByNumber(ctx, 1)`
$DIR/core/chains/evm/logpoller/orm_test.go: `deleted, err = o1.DeleteBlocksBefore(ctx, 3, 0)`
$DIR/core/chains/evm/logpoller/orm_test.go: `_, err = o1.SelectBlockByNumber(ctx, 2)`
$DIR/core/chains/evm/logpoller/orm_test.go: `_, err = o1.SelectBlockByNumber(ctx, 3)`
$DIR/core/chains/evm/logpoller/orm_test.go: `lgs, err = th.ORM.SelectLogs(ctx, 1, 3, address1, event1)`
$DIR/core/chains/evm/logpoller/orm_test.go: `lgs, err = th.ORM.FilteredLogs(ctx, logFilter(1, 3, address1), query.LimitAndSort{
SortBy: []query.SortBy{query.NewSortBySequence(query.Asc)},
}, "")`
$DIR/core/chains/evm/logpoller/orm_test.go: `lgs, err = th.ORM.SelectLogs(ctx, 2, 2, address2, event1)`
$DIR/core/chains/evm/logpoller/orm_test.go: `lgs, err = th.ORM.FilteredLogs(ctx, logFilter(2, 2, address2), query.LimitAndSort{
SortBy: []query.SortBy{query.NewSortBySequence(query.Asc)},
}, "")`
$DIR/core/chains/evm/logpoller/orm_test.go: `logs, err = orm.SelectIndexedLogsWithSigsExcluding(ctx, requestSigB, responseSigB, 1, addressB, 0, 3, 0)`
$DIR/core/chains/evm/logpoller/orm_test.go: `logs, err = orm.SelectIndexedLogsWithSigsExcluding(ctx, requestSigA, responseSigA, 1, addressA, 0, 3, 0)`
$DIR/core/chains/evm/logpoller/orm_test.go: `logs, err = orm.SelectIndexedLogsWithSigsExcluding(ctx, requestSigB, responseSigB, 1, addressB, 0, 3, 0)`
$DIR/core/chains/evm/logpoller/orm_test.go: `logs, err = orm.SelectIndexedLogsWithSigsExcluding(ctx, requestSigB, responseSigB, 3, addressC, 0, 4, 0)`
$DIR/core/chains/evm/logpoller/orm_test.go: `logs, err = orm.SelectIndexedLogsWithSigsExcluding(ctx, requestSigB, responseSigB, 3, addressC, 0, 4, 0)`
$DIR/core/chains/evm/logpoller/orm_test.go: `logs, err = orm.SelectIndexedLogsWithSigsExcluding(ctx, requestSigB, responseSigB, 3, addressC, 0, 4, 0)`
$DIR/core/chains/evm/logpoller/orm_test.go: `logs, err = orm.SelectIndexedLogsWithSigsExcluding(ctx, requestSigB, responseSigB, 3, addressC, 0, 4, 3)`
$DIR/core/chains/evm/logpoller/orm_test.go: `logs, err = orm.SelectIndexedLogsWithSigsExcluding(ctx, requestSigB, responseSigB, 3, addressC, 0, 10, 0)`
$DIR/core/chains/evm/logpoller/orm_test.go: `logs, err = orm.SelectIndexedLogsWithSigsExcluding(ctx, requestSigB, responseSigB, 3, addressC, 0, 10, 3)`
$DIR/core/chains/evm/logpoller/orm_test.go: `logs, err = orm.SelectIndexedLogsWithSigsExcluding(ctx, requestSigB, responseSigB, 3, addressC, 0, 10, 0)`
$DIR/core/chains/evm/logpoller/orm_test.go: `logs, err = orm.SelectIndexedLogsWithSigsExcluding(ctx, requestSigB, responseSigB, 1, addressB, 0, 3, 0)`
$DIR/core/chains/evm/logpoller/orm_test.go: `logs, err = orm.SelectIndexedLogsWithSigsExcluding(ctx, requestSigA, responseSigA, 1, addressA, 0, 1, 10)`
$DIR/core/chains/evm/logpoller/orm_test.go: `logs, err = orm.SelectIndexedLogsWithSigsExcluding(ctx, requestSigB, responseSigB, 1, addressB, 2, 13, 0)`
$DIR/core/chains/evm/logpoller/orm_test.go: `t.Run(tt.name, func(t *testing.T) {
blockNumber, err := th.ORM.SelectLatestBlockByEventSigsAddrsWithConfs(ctx, tt.fromBlock, tt.events, tt.addrs, tt.confs)
require.NoError(t, err)
assert.Equal(t, tt.expectedBlockNumber, blockNumber)
})`
$DIR/core/chains/evm/logpoller/orm_test.go: `exp[idx] = logpoller.NewEventByTopicFilter(uint64(topicIdx), []primitives.ValueComparator{
{Value: val.String(), Operator: primitives.Eq},
})`
$DIR/core/chains/evm/logpoller/orm_test.go: `filters = append(filters, query.Expression{
BoolExpression: query.BoolExpression{
Expressions: exp,
BoolOperator: query.OR,
},
})`
$DIR/core/chains/evm/logpoller/orm_test.go: `filters = append(filters, []query.Expression{
query.Timestamp(uint64(timestamp.Unix()), primitives.Gt),
logpoller.NewConfirmationsFilter(confs),
}...)`
$DIR/core/chains/evm/logpoller/orm_test.go: `t.Run(tt.name, func(t *testing.T) {
logs, err := th.ORM.SelectLogsCreatedAfter(ctx, address, event, tt.after, tt.confs)
assertion(t, logs, err, tt.expectedLogs)
logs, err = th.ORM.FilteredLogs(ctx, filter(tt.after, tt.confs, 0, nil), limiter, "")
assertion(t, logs, err, tt.expectedLogs)
})`
$DIR/core/chains/evm/logpoller/orm_test.go: `assertion(t, logs, err, tt.expectedLogs)`
$DIR/core/chains/evm/logpoller/orm_test.go: `logs, err = th.ORM.FilteredLogs(ctx, filter(tt.after, tt.confs, 0, nil), limiter, "")`
$DIR/core/chains/evm/logpoller/orm_test.go: `assertion(t, logs, err, tt.expectedLogs)`
$DIR/core/chains/evm/logpoller/orm_test.go: `t.Run(tt.name, func(t *testing.T) {
logs, err := th.ORM.SelectIndexedLogsCreatedAfter(ctx, address, event, 1, []common.Hash{event}, tt.after, tt.confs)
assertion(t, logs, err, tt.expectedLogs)
logs, err = th.ORM.FilteredLogs(ctx, filter(tt.after, tt.confs, 1, []common.Hash{event}), limiter, "")
assertion(t, logs, err, tt.expectedLogs)
})`
$DIR/core/chains/evm/logpoller/orm_test.go: `assertion(t, logs, err, tt.expectedLogs)`
$DIR/core/chains/evm/logpoller/orm_test.go: `logs, err = th.ORM.FilteredLogs(ctx, filter(tt.after, tt.confs, 1, []common.Hash{event}), limiter, "")`
$DIR/core/chains/evm/logpoller/orm_test.go: `assertion(t, logs, err, tt.expectedLogs)`
$DIR/core/chains/evm/logpoller/orm_test.go: `logs, err = th.ORM.SelectIndexedLogs(ctx, address, event, 1, []common.Hash{event}, evmtypes.Unconfirmed)`
$DIR/core/chains/evm/logpoller/orm_test.go: `logs, err = th.ORM.SelectIndexedLogs(ctx, address, event, 1, []common.Hash{event}, evmtypes.Confirmations(4))`
$DIR/core/chains/evm/logpoller/orm_test.go: `t.Run(tt.name, func(t *testing.T) {
// clean all logs and blocks between test cases
defer func() { _ = o.DeleteLogsAndBlocksAfter(ctx, 0) }()
insertError := o.InsertLogsWithBlock(ctx, tt.logs, tt.block)
logs, logsErr := o.SelectLogs(ctx, 0, math.MaxInt, address, event)
block, blockErr := o.SelectLatestBlock(ctx)
if tt.shouldRollback {
assert.Error(t, insertError)
assert.NoError(t, logsErr)
assert.Len(t, logs, 0)
assert.Error(t, blockErr)
} else {
assert.NoError(t, insertError)
assert.NoError(t, logsErr)
assert.Len(t, logs, len(tt.logs))
assert.NoError(t, blockErr)
assert.Equal(t, block.BlockNumber, tt.block.BlockNumber)
}
})`
$DIR/core/chains/evm/logpoller/orm_test.go: `_ = o.DeleteLogsAndBlocksAfter(ctx, 0)`
$DIR/core/chains/evm/logpoller/orm_test.go: `logs[i] = GenLog(chainID, int64(i+1), int64(i+1), utils.RandomAddress().String(), event[:], address)`
$DIR/core/chains/evm/logpoller/orm_test.go: `t.Run(tt.name, func(t *testing.T) {
// clean all logs and blocks between test cases
defer func() { _, _ = db.Exec("truncate evm.logs") }()
insertErr := o.InsertLogs(ctx, tt.logs)
logsFromDb, err := o.SelectLogs(ctx, 0, math.MaxInt, address, event)
assert.NoError(t, err)
if tt.shouldRollback {
assert.Error(t, insertErr)
assert.Len(t, logsFromDb, 0)
} else {
assert.NoError(t, insertErr)
assert.Len(t, logsFromDb, len(tt.logs))
}
})`
$DIR/core/chains/evm/logpoller/orm_test.go: `_, _ = db.Exec("truncate evm.logs")`
$DIR/core/chains/evm/logpoller/orm_test.go: `firstLogData = append(firstLogData, logpoller.EvmWord(1).Bytes()...)`
$DIR/core/chains/evm/logpoller/orm_test.go: `firstLogData = append(firstLogData, logpoller.EvmWord(10).Bytes()...)`
$DIR/core/chains/evm/logpoller/orm_test.go: `secondLogData = append(secondLogData, logpoller.EvmWord(5).Bytes()...)`
$DIR/core/chains/evm/logpoller/orm_test.go: `secondLogData = append(secondLogData, logpoller.EvmWord(20).Bytes()...)`
$DIR/core/chains/evm/logpoller/orm_test.go: `t.Run(tt.name, func(t *testing.T) {
logs, err := th.ORM.SelectLogsDataWordBetween(ctx, address, eventSig, 0, 1, logpoller.EvmWord(tt.wordValue), evmtypes.Unconfirmed)
assertion(t, logs, err, tt.expectedLogs)
logs, err = th.ORM.FilteredLogs(ctx, wordFilter(tt.wordValue), limiter, "")
assertion(t, logs, err, tt.expectedLogs)
})`
$DIR/core/chains/evm/logpoller/orm_test.go: `assertion(t, logs, err, tt.expectedLogs)`
$DIR/core/chains/evm/logpoller/orm_test.go: `logs, err = th.ORM.FilteredLogs(ctx, wordFilter(tt.wordValue), limiter, "")`
$DIR/core/chains/evm/logpoller/orm_test.go: `assertion(t, logs, err, tt.expectedLogs)`
$DIR/core/chains/evm/logpoller/orm_test.go: `t.Run("Selects oldest within given chain", func(t *testing.T) {
// insert blocks
require.NoError(t, o2.InsertBlock(ctx, common.HexToHash("0x1231"), 11, time.Now(), 0))
require.NoError(t, o2.InsertBlock(ctx, common.HexToHash("0x1232"), 12, time.Now(), 0))
// insert newer block from different chain
require.NoError(t, o1.InsertBlock(ctx, common.HexToHash("0x1233"), 13, time.Now(), 0))
require.NoError(t, o1.InsertBlock(ctx, common.HexToHash("0x1231"), 14, time.Now(), 0))
block, err := o1.SelectOldestBlock(ctx, 0)
require.NoError(t, err)
require.NotNil(t, block)
require.Equal(t, block.BlockNumber, int64(13))
require.Equal(t, block.BlockHash, common.HexToHash("0x1233"))
})`
$DIR/core/chains/evm/logpoller/orm_test.go: `.Context(t)`
$DIR/core/chains/evm/logpoller/orm_test.go: `.ID.Bytes()`
$DIR/core/chains/evm/logpoller/orm_test.go: `.ORM.SelectLogsByBlockRange(ctx, 1, 1)`
$DIR/core/chains/evm/logpoller/orm_test.go: `.Context(t)`
$DIR/core/chains/evm/logpoller/orm_test.go: `.HexToHash("0x111")`
$DIR/core/chains/evm/logpoller/orm_test.go: `.HexToHash("0x112")`
$DIR/core/chains/evm/logpoller/orm_test.go: `.HexToHash("0x113")`
$DIR/core/chains/evm/logpoller/orm_test.go: `.HexToHash("0x114")`
$DIR/core/chains/evm/logpoller/orm_test.go: `.HexToHash("0x115")`
$DIR/core/chains/evm/logpoller/orm_test.go: `.GetBlocksRange(ctx, blockNumbers[0], blockNumbers[len(blockNumbers)-1])`
$DIR/core/chains/evm/logpoller/orm_test.go: `.GetBlocksRange(ctx, blockNumbers[0], 15)`
$DIR/core/chains/evm/logpoller/orm_test.go: `.GetBlocksRange(ctx, 15, 15)`
$DIR/core/chains/evm/logpoller/orm_test.go: `.Context(t)`
$DIR/core/chains/evm/logpoller/orm_test.go: `.HexToHash(fmt.Sprintf("0x%d", i))`
$DIR/core/chains/evm/logpoller/orm_test.go: `.Sprintf("0x%d", i)`
$DIR/core/chains/evm/logpoller/orm_test.go: `.GetBlocksRange(ctx, blockNumbers[0], blockNumbers[len(blockNumbers)-1])`
$DIR/core/chains/evm/logpoller/orm_test.go: `.GetBlocksRange(ctx, blockNumbers[0], 257)`
$DIR/core/chains/evm/logpoller/orm_test.go: `.GetBlocksRange(ctx, 257, 257)`
$DIR/core/chains/evm/logpoller/orm_test.go: `.Context(t)`
$DIR/core/chains/evm/logpoller/orm_test.go: `.SelectBlockByHash(ctx, common.HexToHash("0x1234"))`
$DIR/core/chains/evm/logpoller/orm_test.go: `.HexToHash("0x1234")`
$DIR/core/chains/evm/logpoller/orm_test.go: `.SelectBlockByHash(ctx, common.HexToHash("0x1234"))`
$DIR/core/chains/evm/logpoller/orm_test.go: `.HexToHash("0x1234")`
$DIR/core/chains/evm/logpoller/orm_test.go: `.SelectLatestBlock(ctx)`
$DIR/core/chains/evm/logpoller/orm_test.go: `.SelectLatestBlock(ctx)`
$DIR/core/chains/evm/logpoller/orm_test.go: `.SelectBlockByHash(ctx, common.HexToHash("0x1234"))`
$DIR/core/chains/evm/logpoller/orm_test.go: `.HexToHash("0x1234")`
$DIR/core/chains/evm/logpoller/orm_test.go: `.SelectBlockByHash(ctx, common.HexToHash("0x1234"))`
$DIR/core/chains/evm/logpoller/orm_test.go: `.HexToHash("0x1234")`
$DIR/core/chains/evm/logpoller/orm_test.go: `.SelectBlockByHash(ctx, common.HexToHash("0x1235"))`
$DIR/core/chains/evm/logpoller/orm_test.go: `.HexToHash("0x1235")`
$DIR/core/chains/evm/logpoller/orm_test.go: `.HexToHash("0x1599")`
$DIR/core/chains/evm/logpoller/orm_test.go: `.HexToHash("0x1600")`
$DIR/core/chains/evm/logpoller/orm_test.go: `.SelectLogsByBlockRange(ctx, 1, 17)`
$DIR/core/chains/evm/logpoller/orm_test.go: `.SelectLogsByBlockRange(ctx, 10, 10)`
$DIR/core/chains/evm/logpoller/orm_test.go: `.SelectLogs(ctx, 1, 1, common.HexToAddress("0x1234"), topic)`
$DIR/core/chains/evm/logpoller/orm_test.go: `.HexToAddress("0x1234")`
$DIR/core/chains/evm/logpoller/orm_test.go: `.SelectLogs(ctx, 10, 10, common.HexToAddress("0x1234"), topic)`
$DIR/core/chains/evm/logpoller/orm_test.go: `.HexToAddress("0x1234")`
$DIR/core/chains/evm/logpoller/orm_test.go: `.SelectLatestLogByEventSigWithConfs(ctx, topic, common.HexToAddress("0x1234"), 0)`
$DIR/core/chains/evm/logpoller/orm_test.go: `.HexToAddress("0x1234")`
$DIR/core/chains/evm/logpoller/orm_test.go: `.SelectLatestLogByEventSigWithConfs(ctx, topic, common.HexToAddress("0x1234"), 0)`
$DIR/core/chains/evm/logpoller/orm_test.go: `.HexToAddress("0x1234")`
$DIR/core/chains/evm/logpoller/orm_test.go: `.SelectLatestLogByEventSigWithConfs(ctx, topic, common.HexToAddress("0x1234"), 1)`
$DIR/core/chains/evm/logpoller/orm_test.go: `.HexToAddress("0x1234")`
$DIR/core/chains/evm/logpoller/orm_test.go: `.SelectLatestLogByEventSigWithConfs(ctx, topic, common.HexToAddress("0x1234"), 0)`
$DIR/core/chains/evm/logpoller/orm_test.go: `.HexToAddress("0x1234")`
$DIR/core/chains/evm/logpoller/orm_test.go: `.SelectLatestLogByEventSigWithConfs(ctx, topic, common.HexToAddress("0x1234"), 1)`
$DIR/core/chains/evm/logpoller/orm_test.go: `.HexToAddress("0x1234")`
$DIR/core/chains/evm/logpoller/orm_test.go: `.SelectLatestLogByEventSigWithConfs(ctx, topic, common.HexToAddress("0x1234"), 2)`
$DIR/core/chains/evm/logpoller/orm_test.go: `.HexToAddress("0x1234")`
$DIR/core/chains/evm/logpoller/orm_test.go: `.SelectLatestLogByEventSigWithConfs(ctx, topic, common.HexToAddress("0x1234"), 3)`
$DIR/core/chains/evm/logpoller/orm_test.go: `.HexToAddress("0x1234")`
$DIR/core/chains/evm/logpoller/orm_test.go: `.SelectLatestLogEventSigsAddrsWithConfs(ctx, 0 /* startBlock */, []common.Address{common.HexToAddress("0x1234")}, []common.Hash{topic}, 0)`
$DIR/core/chains/evm/logpoller/orm_test.go: `.HexToAddress("0x1234")`
$DIR/core/chains/evm/logpoller/orm_test.go: `.SelectLatestLogEventSigsAddrsWithConfs(ctx, 0 /* startBlock */, []common.Address{common.HexToAddress("0x1234"), common.HexToAddress("0x1235")}, []common.Hash{topic}, 0)`
$DIR/core/chains/evm/logpoller/orm_test.go: `.HexToAddress("0x1234")`
$DIR/core/chains/evm/logpoller/orm_test.go: `.HexToAddress("0x1235")`
$DIR/core/chains/evm/logpoller/orm_test.go: `.SelectLatestLogEventSigsAddrsWithConfs(ctx, 0 /* startBlock */, []common.Address{common.HexToAddress("0x1234")}, []common.Hash{topic, topic2}, 0)`
$DIR/core/chains/evm/logpoller/orm_test.go: `.HexToAddress("0x1234")`
$DIR/core/chains/evm/logpoller/orm_test.go: `.SelectLatestLogEventSigsAddrsWithConfs(ctx, 0 /* startBlock */, []common.Address{common.HexToAddress("0x1234"), common.HexToAddress("0x1235")}, []common.Hash{topic, topic2}, 0)`
$DIR/core/chains/evm/logpoller/orm_test.go: `.HexToAddress("0x1234")`
$DIR/core/chains/evm/logpoller/orm_test.go: `.HexToAddress("0x1235")`
$DIR/core/chains/evm/logpoller/orm_test.go: `.SelectLatestLogEventSigsAddrsWithConfs(ctx, 0 /* startBlock */, []common.Address{common.HexToAddress("0x1234"), common.HexToAddress("0x1235")}, []common.Hash{topic, topic2}, 1)`
$DIR/core/chains/evm/logpoller/orm_test.go: `.HexToAddress("0x1234")`
$DIR/core/chains/evm/logpoller/orm_test.go: `.HexToAddress("0x1235")`
$DIR/core/chains/evm/logpoller/orm_test.go: `.SelectLatestLogEventSigsAddrsWithConfs(ctx, 0 /* startBlock */, []common.Address{common.HexToAddress("0x1234"), common.HexToAddress("0x1235")}, []common.Hash{topic, topic2}, 2)`
$DIR/core/chains/evm/logpoller/orm_test.go: `.HexToAddress("0x1234")`
$DIR/core/chains/evm/logpoller/orm_test.go: `.HexToAddress("0x1235")`
$DIR/core/chains/evm/logpoller/orm_test.go: `.HexToAddress("0x1234")`
$DIR/core/chains/evm/logpoller/orm_test.go: `.HexToAddress("0x1236")`
$DIR/core/chains/evm/logpoller/orm_test.go: `.HexToAddress("0x1236")`
$DIR/core/chains/evm/logpoller/orm_test.go: `.LoadFilters(ctx)`
$DIR/core/chains/evm/logpoller/orm_test.go: `.SelectLatestBlock(ctx)`
$DIR/core/chains/evm/logpoller/orm_test.go: `.SelectLogsByBlockRange(ctx, 1, latest.BlockNumber)`
$DIR/core/chains/evm/logpoller/orm_test.go: `.Sleep(2 * time.Millisecond)`
$DIR/core/chains/evm/logpoller/orm_test.go: `.DeleteExpiredLogs(ctx, 0)`
$DIR/core/chains/evm/logpoller/orm_test.go: `.SelectLogsByBlockRange(ctx, 1, latest.BlockNumber)`
$DIR/core/chains/evm/logpoller/orm_test.go: `.DeleteLogsAndBlocksAfter(ctx, 1)`
$DIR/core/chains/evm/logpoller/orm_test.go: `.SelectLogsByBlockRange(ctx, 1, latest.BlockNumber)`
$DIR/core/chains/evm/logpoller/orm_test.go: `.Test(t)`
$DIR/core/chains/evm/logpoller/orm_test.go: `.NewRandomEVMChainID()`
$DIR/core/chains/evm/logpoller/orm_test.go: `.NewSqlxDB(t)`
$DIR/core/chains/evm/logpoller/orm_test.go: `.NewORM(chainID, dbx, lggr)`
$DIR/core/chains/evm/logpoller/orm_test.go: `.HexToAddress("0x1234")`
$DIR/core/chains/evm/logpoller/orm_test.go: `.HexToHash("0x1111")`
$DIR/core/chains/evm/logpoller/orm_test.go: `.HexToHash("0x2222")`
$DIR/core/chains/evm/logpoller/orm_test.go: `.HexToHash("0x3333")`
$DIR/core/chains/evm/logpoller/orm_test.go: `.HexToHash("0x4444")`
$DIR/core/chains/evm/logpoller/orm_test.go: `.Context(t)`
$DIR/core/chains/evm/logpoller/orm_test.go: `.Run("Save filter: "+filter.Name, func(t *testing.T) {
var count int
err := orm.InsertFilter(ctx, filter)
require.NoError(t, err)
err = dbx.Get(&count, `SELECT COUNT(*) FROM evm.log_poller_filters WHERE evm_chain_id = $1 AND name = $2`, ubig.New(chainID), filter.Name)
require.NoError(t, err)
expectedCount := len(filter.Addresses) * len(filter.EventSigs)
if len(filter.Topic2) > 0 {
expectedCount *= len(filter.Topic2)
}
if len(filter.Topic3) > 0 {
expectedCount *= len(filter.Topic3)
}
if len(filter.Topic4) > 0 {
expectedCount *= len(filter.Topic4)
}
assert.Equal(t, count, expectedCount)
})`
$DIR/core/chains/evm/logpoller/orm_test.go: `.InsertFilter(ctx, filter)`
$DIR/core/chains/evm/logpoller/orm_test.go: `.Get(&count, `SELECT COUNT(*) FROM evm.log_poller_filters WHERE evm_chain_id = $1 AND name = $2`, ubig.New(chainID), filter.Name)`
$DIR/core/chains/evm/logpoller/orm_test.go: `.New(chainID)`
$DIR/core/chains/evm/logpoller/orm_test.go: `.LoadFilters(ctx)`
$DIR/core/chains/evm/logpoller/orm_test.go: `.Context(t)`
$DIR/core/chains/evm/logpoller/orm_test.go: `.HexToHash("0x1599")`
$DIR/core/chains/evm/logpoller/orm_test.go: `.HexToAddress("0x1234")`
$DIR/core/chains/evm/logpoller/orm_test.go: `.NewEventByTopicFilter(topicIdx, []primitives.ValueComparator{
{Value: logpoller.EvmWord(value).Hex(), Operator: primitives.Eq},
})`
$DIR/core/chains/evm/logpoller/orm_test.go: `.EvmWord(value)`
$DIR/core/chains/evm/logpoller/orm_test.go: `.Hex()`
$DIR/core/chains/evm/logpoller/orm_test.go: `.NewLimitAndSort(query.Limit{}, query.NewSortBySequence(query.Asc))`
$DIR/core/chains/evm/logpoller/orm_test.go: `.NewSortBySequence(query.Asc)`
$DIR/core/chains/evm/logpoller/orm_test.go: `.NewAddressFilter(addr)`
$DIR/core/chains/evm/logpoller/orm_test.go: `.NewEventSigFilter(eventSig)`
$DIR/core/chains/evm/logpoller/orm_test.go: `.Confidence(primitives.Unconfirmed)`
$DIR/core/chains/evm/logpoller/orm_test.go: `.SelectIndexedLogs(ctx, addr, eventSig, 1, []common.Hash{logpoller.EvmWord(1)}, 0)`
$DIR/core/chains/evm/logpoller/orm_test.go: `.EvmWord(1)`
$DIR/core/chains/evm/logpoller/orm_test.go: `.FilteredLogs(ctx, standardFilter(1, []uint64{1}), limiter, "")`
$DIR/core/chains/evm/logpoller/orm_test.go: `.SelectIndexedLogs(ctx, addr, eventSig, 1, []common.Hash{logpoller.EvmWord(1), logpoller.EvmWord(2)}, 0)`
$DIR/core/chains/evm/logpoller/orm_test.go: `.EvmWord(1)`
$DIR/core/chains/evm/logpoller/orm_test.go: `.EvmWord(2)`
$DIR/core/chains/evm/logpoller/orm_test.go: `.FilteredLogs(ctx, standardFilter(1, []uint64{1, 2}), limiter, "")`
$DIR/core/chains/evm/logpoller/orm_test.go: `.NewAddressFilter(addr)`
$DIR/core/chains/evm/logpoller/orm_test.go: `.NewEventSigFilter(eventSig)`
$DIR/core/chains/evm/logpoller/orm_test.go: `.Block(start, primitives.Gte)`
$DIR/core/chains/evm/logpoller/orm_test.go: `.Block(end, primitives.Lte)`
$DIR/core/chains/evm/logpoller/orm_test.go: `.SelectIndexedLogsByBlockRange(ctx, 1, 1, addr, eventSig, 1, []common.Hash{logpoller.EvmWord(1)})`
$DIR/core/chains/evm/logpoller/orm_test.go: `.EvmWord(1)`
$DIR/core/chains/evm/logpoller/orm_test.go: `.FilteredLogs(ctx, blockRangeFilter(1, 1, 1, []uint64{1}), limiter, "")`
$DIR/core/chains/evm/logpoller/orm_test.go: `.SelectIndexedLogsByBlockRange(ctx, 1, 2, addr, eventSig, 1, []common.Hash{logpoller.EvmWord(2)})`
$DIR/core/chains/evm/logpoller/orm_test.go: `.EvmWord(2)`
$DIR/core/chains/evm/logpoller/orm_test.go: `.FilteredLogs(ctx, blockRangeFilter(1, 2, 1, []uint64{2}), limiter, "")`
$DIR/core/chains/evm/logpoller/orm_test.go: `.SelectIndexedLogsByBlockRange(ctx, 1, 2, addr, eventSig, 1, []common.Hash{logpoller.EvmWord(1)})`
$DIR/core/chains/evm/logpoller/orm_test.go: `.EvmWord(1)`
$DIR/core/chains/evm/logpoller/orm_test.go: `.FilteredLogs(ctx, blockRangeFilter(1, 2, 1, []uint64{1}), limiter, "")`
$DIR/core/chains/evm/logpoller/orm_test.go: `.SelectIndexedLogsByBlockRange(ctx, 1, 2, addr, eventSig, 0, []common.Hash{logpoller.EvmWord(1)})`
$DIR/core/chains/evm/logpoller/orm_test.go: `.EvmWord(1)`
$DIR/core/chains/evm/logpoller/orm_test.go: `.FilteredLogs(ctx, blockRangeFilter(1, 2, 0, []uint64{1}), limiter, "")`
$DIR/core/chains/evm/logpoller/orm_test.go: `.SelectIndexedLogsByBlockRange(ctx, 1, 2, addr, eventSig, 4, []common.Hash{logpoller.EvmWord(1)})`
$DIR/core/chains/evm/logpoller/orm_test.go: `.EvmWord(1)`
$DIR/core/chains/evm/logpoller/orm_test.go: `.FilteredLogs(ctx, blockRangeFilter(1, 2, 4, []uint64{1}), limiter, "")`
$DIR/core/chains/evm/logpoller/orm_test.go: `.SelectIndexedLogsTopicGreaterThan(ctx, addr, eventSig, 1, logpoller.EvmWord(2), 0)`
$DIR/core/chains/evm/logpoller/orm_test.go: `.EvmWord(2)`
$DIR/core/chains/evm/logpoller/orm_test.go: `.NewAddressFilter(addr)`
$DIR/core/chains/evm/logpoller/orm_test.go: `.NewEventSigFilter(eventSig)`
$DIR/core/chains/evm/logpoller/orm_test.go: `.NewEventByTopicFilter(1, []primitives.ValueComparator{
{Value: logpoller.EvmWord(2).Hex(), Operator: primitives.Gte},
})`
$DIR/core/chains/evm/logpoller/orm_test.go: `.EvmWord(2)`
$DIR/core/chains/evm/logpoller/orm_test.go: `.Hex()`
$DIR/core/chains/evm/logpoller/orm_test.go: `.Confidence(primitives.Unconfirmed)`
$DIR/core/chains/evm/logpoller/orm_test.go: `.FilteredLogs(ctx, filter, limiter, "")`
$DIR/core/chains/evm/logpoller/orm_test.go: `.NewAddressFilter(addr)`
$DIR/core/chains/evm/logpoller/orm_test.go: `.NewEventSigFilter(eventSig)`
$DIR/core/chains/evm/logpoller/orm_test.go: `.NewEventByTopicFilter(topicIdx, []primitives.ValueComparator{
{Value: logpoller.EvmWord(min).Hex(), Operator: primitives.Gte},
})`
$DIR/core/chains/evm/logpoller/orm_test.go: `.EvmWord(min)`
$DIR/core/chains/evm/logpoller/orm_test.go: `.Hex()`
$DIR/core/chains/evm/logpoller/orm_test.go: `.NewEventByTopicFilter(topicIdx, []primitives.ValueComparator{
{Value: logpoller.EvmWord(max).Hex(), Operator: primitives.Lte},
})`
$DIR/core/chains/evm/logpoller/orm_test.go: `.EvmWord(max)`
$DIR/core/chains/evm/logpoller/orm_test.go: `.Hex()`
$DIR/core/chains/evm/logpoller/orm_test.go: `.Confidence(primitives.Unconfirmed)`
$DIR/core/chains/evm/logpoller/orm_test.go: `.SelectIndexedLogsTopicRange(ctx, addr, eventSig, 1, logpoller.EvmWord(3), logpoller.EvmWord(3), 0)`
$DIR/core/chains/evm/logpoller/orm_test.go: `.EvmWord(3)`
$DIR/core/chains/evm/logpoller/orm_test.go: `.EvmWord(3)`
$DIR/core/chains/evm/logpoller/orm_test.go: `.FilteredLogs(ctx, rangeFilter(1, 3, 3), limiter, "")`
$DIR/core/chains/evm/logpoller/orm_test.go: `.SelectIndexedLogsTopicRange(ctx, addr, eventSig, 1, logpoller.EvmWord(1), logpoller.EvmWord(3), 0)`
$DIR/core/chains/evm/logpoller/orm_test.go: `.EvmWord(1)`
$DIR/core/chains/evm/logpoller/orm_test.go: `.EvmWord(3)`
$DIR/core/chains/evm/logpoller/orm_test.go: `.FilteredLogs(ctx, rangeFilter(1, 1, 3), limiter, "")`
$DIR/core/chains/evm/logpoller/orm_test.go: `.SelectIndexedLogsTopicRange(ctx, addr, eventSig, 1, logpoller.EvmWord(4), logpoller.EvmWord(4), 1)`
$DIR/core/chains/evm/logpoller/orm_test.go: `.EvmWord(4)`
$DIR/core/chains/evm/logpoller/orm_test.go: `.EvmWord(4)`
$DIR/core/chains/evm/logpoller/orm_test.go: `.SelectIndexedLogsTopicRange(ctx, addr, eventSig, 1, logpoller.EvmWord(4), logpoller.EvmWord(4), 1)`
$DIR/core/chains/evm/logpoller/orm_test.go: `.EvmWord(4)`
$DIR/core/chains/evm/logpoller/orm_test.go: `.EvmWord(4)`
$DIR/core/chains/evm/logpoller/orm_test.go: `.Context(t)`
$DIR/core/chains/evm/logpoller/orm_test.go: `.HexToHash("0x1599")`
$DIR/core/chains/evm/logpoller/orm_test.go: `.HexToHash("0x1888")`
$DIR/core/chains/evm/logpoller/orm_test.go: `.HexToAddress("0x1234")`
$DIR/core/chains/evm/logpoller/orm_test.go: `.New(th.ChainID)`
$DIR/core/chains/evm/logpoller/orm_test.go: `.HexToHash("0x1")`
$DIR/core/chains/evm/logpoller/orm_test.go: `.EvmWord(1)`
$DIR/core/chains/evm/logpoller/orm_test.go: `.Bytes()`
$DIR/core/chains/evm/logpoller/orm_test.go: `.New(th.ChainID)`
$DIR/core/chains/evm/logpoller/orm_test.go: `.HexToHash("0x1")`
$DIR/core/chains/evm/logpoller/orm_test.go: `.EvmWord(2)`
$DIR/core/chains/evm/logpoller/orm_test.go: `.Bytes()`
$DIR/core/chains/evm/logpoller/orm_test.go: `.EvmWord(3)`
$DIR/core/chains/evm/logpoller/orm_test.go: `.Bytes()`
$DIR/core/chains/evm/logpoller/orm_test.go: `.New(th.ChainID)`
$DIR/core/chains/evm/logpoller/orm_test.go: `.HexToHash("0x1")`
$DIR/core/chains/evm/logpoller/orm_test.go: `.HexToHash("0x1889")`
$DIR/core/chains/evm/logpoller/orm_test.go: `.EvmWord(2)`
$DIR/core/chains/evm/logpoller/orm_test.go: `.Bytes()`
$DIR/core/chains/evm/logpoller/orm_test.go: `.EvmWord(3)`
$DIR/core/chains/evm/logpoller/orm_test.go: `.Bytes()`
$DIR/core/chains/evm/logpoller/orm_test.go: `.New(th.ChainID)`
$DIR/core/chains/evm/logpoller/orm_test.go: `.HexToHash("0x1")`
$DIR/core/chains/evm/logpoller/orm_test.go: `.HexToHash("0x1600")`
$DIR/core/chains/evm/logpoller/orm_test.go: `.EvmWord(2)`
$DIR/core/chains/evm/logpoller/orm_test.go: `.Bytes()`
$DIR/core/chains/evm/logpoller/orm_test.go: `.EvmWord(3)`
$DIR/core/chains/evm/logpoller/orm_test.go: `.Bytes()`
$DIR/core/chains/evm/logpoller/orm_test.go: `.SelectIndexedLogsByTxHash(ctx, addr, eventSig, txHash)`
$DIR/core/chains/evm/logpoller/orm_test.go: `.NewLimitAndSort(query.Limit{}, query.NewSortBySequence(query.Asc))`
$DIR/core/chains/evm/logpoller/orm_test.go: `.NewSortBySequence(query.Asc)`
$DIR/core/chains/evm/logpoller/orm_test.go: `.NewAddressFilter(addr)`
$DIR/core/chains/evm/logpoller/orm_test.go: `.NewEventSigFilter(eventSig)`
$DIR/core/chains/evm/logpoller/orm_test.go: `.TxHash(txHash.Hex())`
$DIR/core/chains/evm/logpoller/orm_test.go: `.Hex()`
$DIR/core/chains/evm/logpoller/orm_test.go: `.FilteredLogs(ctx, filter, limiter, "")`
$DIR/core/chains/evm/logpoller/orm_test.go: `.Context(t)`
$DIR/core/chains/evm/logpoller/orm_test.go: `.HexToHash("0x1599")`
$DIR/core/chains/evm/logpoller/orm_test.go: `.HexToAddress("0x1234")`
$DIR/core/chains/evm/logpoller/orm_test.go: `.NewAddressFilter(addr)`
$DIR/core/chains/evm/logpoller/orm_test.go: `.NewEventSigFilter(eventSig)`
$DIR/core/chains/evm/logpoller/orm_test.go: `.NewEventByWordFilter(eventSig, wordIdx, []primitives.ValueComparator{
{Value: logpoller.EvmWord(word1).Hex(), Operator: primitives.Gte},
})`
$DIR/core/chains/evm/logpoller/orm_test.go: `.EvmWord(word1)`
$DIR/core/chains/evm/logpoller/orm_test.go: `.Hex()`
$DIR/core/chains/evm/logpoller/orm_test.go: `.NewEventByWordFilter(eventSig, wordIdx, []primitives.ValueComparator{
{Value: logpoller.EvmWord(word2).Hex(), Operator: primitives.Lte},
})`
$DIR/core/chains/evm/logpoller/orm_test.go: `.EvmWord(word2)`
$DIR/core/chains/evm/logpoller/orm_test.go: `.Hex()`
$DIR/core/chains/evm/logpoller/orm_test.go: `.Confidence(primitives.Unconfirmed)`
$DIR/core/chains/evm/logpoller/orm_test.go: `.NewLimitAndSort(query.Limit{}, query.NewSortBySequence(query.Asc))`
$DIR/core/chains/evm/logpoller/orm_test.go: `.NewSortBySequence(query.Asc)`
$DIR/core/chains/evm/logpoller/orm_test.go: `.SelectLogsDataWordRange(ctx, addr, eventSig, 0, logpoller.EvmWord(2), logpoller.EvmWord(2), 0)`
$DIR/core/chains/evm/logpoller/orm_test.go: `.EvmWord(2)`
$DIR/core/chains/evm/logpoller/orm_test.go: `.EvmWord(2)`
$DIR/core/chains/evm/logpoller/orm_test.go: `.FilteredLogs(ctx, wordFilter(0, 2, 2), limiter, "")`
$DIR/core/chains/evm/logpoller/orm_test.go: `.SelectLogsDataWordRange(ctx, addr, eventSig, 0, logpoller.EvmWord(1), logpoller.EvmWord(2), 0)`
$DIR/core/chains/evm/logpoller/orm_test.go: `.EvmWord(1)`
$DIR/core/chains/evm/logpoller/orm_test.go: `.EvmWord(2)`
$DIR/core/chains/evm/logpoller/orm_test.go: `.FilteredLogs(ctx, wordFilter(0, 1, 2), limiter, "")`
$DIR/core/chains/evm/logpoller/orm_test.go: `.SelectLogsDataWordRange(ctx, addr, eventSig, 0, logpoller.EvmWord(1), logpoller.EvmWord(1), 0)`
$DIR/core/chains/evm/logpoller/orm_test.go: `.EvmWord(1)`
$DIR/core/chains/evm/logpoller/orm_test.go: `.EvmWord(1)`
$DIR/core/chains/evm/logpoller/orm_test.go: `.FilteredLogs(ctx, wordFilter(0, 1, 1), limiter, "")`
$DIR/core/chains/evm/logpoller/orm_test.go: `.SelectLogsDataWordRange(ctx, addr, eventSig, 1, logpoller.EvmWord(3), logpoller.EvmWord(3), 0)`
$DIR/core/chains/evm/logpoller/orm_test.go: `.EvmWord(3)`
$DIR/core/chains/evm/logpoller/orm_test.go: `.EvmWord(3)`
$DIR/core/chains/evm/logpoller/orm_test.go: `.FilteredLogs(ctx, wordFilter(1, 3, 3), limiter, "")`
$DIR/core/chains/evm/logpoller/orm_test.go: `.SelectLogsDataWordRange(ctx, addr, eventSig, 1, logpoller.EvmWord(3), logpoller.EvmWord(3), 0)`
$DIR/core/chains/evm/logpoller/orm_test.go: `.EvmWord(3)`
$DIR/core/chains/evm/logpoller/orm_test.go: `.EvmWord(3)`
$DIR/core/chains/evm/logpoller/orm_test.go: `.FilteredLogs(ctx, wordFilter(1, 3, 3), limiter, "")`
$DIR/core/chains/evm/logpoller/orm_test.go: `.SelectLogsDataWordGreaterThan(ctx, addr, eventSig, 0, logpoller.EvmWord(1), 0)`
$DIR/core/chains/evm/logpoller/orm_test.go: `.EvmWord(1)`
$DIR/core/chains/evm/logpoller/orm_test.go: `.NewAddressFilter(addr)`
$DIR/core/chains/evm/logpoller/orm_test.go: `.NewEventSigFilter(eventSig)`
$DIR/core/chains/evm/logpoller/orm_test.go: `.NewEventByWordFilter(eventSig, 0, []primitives.ValueComparator{
{Value: logpoller.EvmWord(1).Hex(), Operator: primitives.Gte},
})`
$DIR/core/chains/evm/logpoller/orm_test.go: `.EvmWord(1)`
$DIR/core/chains/evm/logpoller/orm_test.go: `.Hex()`
$DIR/core/chains/evm/logpoller/orm_test.go: `.Confidence(primitives.Unconfirmed)`
$DIR/core/chains/evm/logpoller/orm_test.go: `.FilteredLogs(ctx, filter, limiter, "")`
$DIR/core/chains/evm/logpoller/orm_test.go: `.Context(t)`
$DIR/core/chains/evm/logpoller/orm_test.go: `.HexToHash("0x1599")`
$DIR/core/chains/evm/logpoller/orm_test.go: `.HexToHash("0x1600")`
$DIR/core/chains/evm/logpoller/orm_test.go: `.HexToAddress("0x12345")`
$DIR/core/chains/evm/logpoller/orm_test.go: `.New(th.ChainID)`
$DIR/core/chains/evm/logpoller/orm_test.go: `.HexToHash("0x1234")`
$DIR/core/chains/evm/logpoller/orm_test.go: `.HexToHash("0x1888")`
$DIR/core/chains/evm/logpoller/orm_test.go: `.New(th.ChainID)`
$DIR/core/chains/evm/logpoller/orm_test.go: `.HexToHash("0x1235")`
$DIR/core/chains/evm/logpoller/orm_test.go: `.HexToHash("0x1888")`
$DIR/core/chains/evm/logpoller/orm_test.go: `.New(th.ChainID)`
$DIR/core/chains/evm/logpoller/orm_test.go: `.HexToHash("0x1236")`
$DIR/core/chains/evm/logpoller/orm_test.go: `.HexToAddress("0x1235")`
$DIR/core/chains/evm/logpoller/orm_test.go: `.HexToHash("0x1888")`
$DIR/core/chains/evm/logpoller/orm_test.go: `.New(th.ChainID)`
$DIR/core/chains/evm/logpoller/orm_test.go: `.HexToHash("0x1237")`
$DIR/core/chains/evm/logpoller/orm_test.go: `.HexToAddress("0x1235")`
$DIR/core/chains/evm/logpoller/orm_test.go: `.HexToHash("0x1888")`
$DIR/core/chains/evm/logpoller/orm_test.go: `.New(th.ChainID)`
$DIR/core/chains/evm/logpoller/orm_test.go: `.HexToHash("0x1238")`
$DIR/core/chains/evm/logpoller/orm_test.go: `.HexToHash("0x1888")`
$DIR/core/chains/evm/logpoller/orm_test.go: `.New(th.ChainID)`
$DIR/core/chains/evm/logpoller/orm_test.go: `.HexToHash("0x1239")`
$DIR/core/chains/evm/logpoller/orm_test.go: `.HexToHash("0x1888")`
$DIR/core/chains/evm/logpoller/orm_test.go: `.NewAddressFilter(sourceAddr)`
$DIR/core/chains/evm/logpoller/orm_test.go: `.NewEventSigFilter(val)`
$DIR/core/chains/evm/logpoller/orm_test.go: `.Block(uint64(startBlock), primitives.Gte)`
$DIR/core/chains/evm/logpoller/orm_test.go: `.Block(uint64(endBlock), primitives.Lte)`
$DIR/core/chains/evm/logpoller/orm_test.go: `.NewSortBySequence(query.Asc)`
$DIR/core/chains/evm/logpoller/orm_test.go: `.SelectLogsWithSigs(ctx, startBlock, endBlock, sourceAddr, []common.Hash{
topic,
topic2,
})`
$DIR/core/chains/evm/logpoller/orm_test.go: `.ORM.FilteredLogs(ctx, filter([]common.Hash{topic, topic2}, startBlock, endBlock), limiter, "")`
$DIR/core/chains/evm/logpoller/orm_test.go: `.Context(t)`
$DIR/core/chains/evm/logpoller/orm_test.go: `.DeleteBlocksBefore(ctx, 1, 0)`
$DIR/core/chains/evm/logpoller/orm_test.go: `.SelectBlockByNumber(ctx, 1)`
$DIR/core/chains/evm/logpoller/orm_test.go: `.SelectBlockByNumber(ctx, 2)`
$DIR/core/chains/evm/logpoller/orm_test.go: `.DeleteBlocksBefore(ctx, 3, 0)`
$DIR/core/chains/evm/logpoller/orm_test.go: `.SelectBlockByNumber(ctx, 2)`
$DIR/core/chains/evm/logpoller/orm_test.go: `.SelectBlockByNumber(ctx, 3)`
$DIR/core/chains/evm/logpoller/orm_test.go: `.Context(t)`
$DIR/core/chains/evm/logpoller/orm_test.go: `.HexToAddress("0x2ab9a2Dc53736b361b72d900CdF9F78F9406fbbb")`
$DIR/core/chains/evm/logpoller/orm_test.go: `.HexToAddress("0x6E225058950f237371261C985Db6bDe26df2200E")`
$DIR/core/chains/evm/logpoller/orm_test.go: `.ORM.SelectLogsByBlockRange(ctx, 1, 3)`
$DIR/core/chains/evm/logpoller/orm_test.go: `.NewAddressFilter(address)`
$DIR/core/chains/evm/logpoller/orm_test.go: `.NewEventSigFilter(event1)`
$DIR/core/chains/evm/logpoller/orm_test.go: `.Block(start, primitives.Gte)`
$DIR/core/chains/evm/logpoller/orm_test.go: `.Block(end, primitives.Lte)`
$DIR/core/chains/evm/logpoller/orm_test.go: `.ORM.SelectLogs(ctx, 1, 3, address1, event1)`
$DIR/core/chains/evm/logpoller/orm_test.go: `.ORM.FilteredLogs(ctx, logFilter(1, 3, address1), query.LimitAndSort{
SortBy: []query.SortBy{query.NewSortBySequence(query.Asc)},
}, "")`
$DIR/core/chains/evm/logpoller/orm_test.go: `.NewSortBySequence(query.Asc)`
$DIR/core/chains/evm/logpoller/orm_test.go: `.ORM.SelectLogs(ctx, 2, 2, address2, event1)`
$DIR/core/chains/evm/logpoller/orm_test.go: `.ORM.FilteredLogs(ctx, logFilter(2, 2, address2), query.LimitAndSort{
SortBy: []query.SortBy{query.NewSortBySequence(query.Asc)},
}, "")`
$DIR/core/chains/evm/logpoller/orm_test.go: `.NewSortBySequence(query.Asc)`
$DIR/core/chains/evm/logpoller/orm_test.go: `.Bytes()`
$DIR/core/chains/evm/logpoller/orm_test.go: `.Context(t)`
$DIR/core/chains/evm/logpoller/orm_test.go: `.HexToAddress("0x11111")`
$DIR/core/chains/evm/logpoller/orm_test.go: `.HexToAddress("0x22222")`
$DIR/core/chains/evm/logpoller/orm_test.go: `.HexToAddress("0x33333")`
$DIR/core/chains/evm/logpoller/orm_test.go: `.HexToHash("0x01")`
$DIR/core/chains/evm/logpoller/orm_test.go: `.HexToHash("0x02")`
$DIR/core/chains/evm/logpoller/orm_test.go: `.HexToHash("0x03")`
$DIR/core/chains/evm/logpoller/orm_test.go: `.HexToHash("0x04")`
$DIR/core/chains/evm/logpoller/orm_test.go: `.HexToHash("0x000a")`
$DIR/core/chains/evm/logpoller/orm_test.go: `.HexToHash("0x000b")`
$DIR/core/chains/evm/logpoller/orm_test.go: `.HexToHash("0x000c")`
$DIR/core/chains/evm/logpoller/orm_test.go: `.HexToHash("0x000d")`
$DIR/core/chains/evm/logpoller/orm_test.go: `.SelectIndexedLogsWithSigsExcluding(ctx, requestSigA, responseSigA, 1, addressA, 0, 3, 0)`
$DIR/core/chains/evm/logpoller/orm_test.go: `.SelectIndexedLogsWithSigsExcluding(ctx, requestSigB, responseSigB, 1, addressB, 0, 3, 0)`
$DIR/core/chains/evm/logpoller/orm_test.go: `.SelectIndexedLogsWithSigsExcluding(ctx, requestSigA, responseSigA, 1, addressA, 0, 3, 0)`
$DIR/core/chains/evm/logpoller/orm_test.go: `.SelectIndexedLogsWithSigsExcluding(ctx, requestSigB, responseSigB, 1, addressB, 0, 3, 0)`
$DIR/core/chains/evm/logpoller/orm_test.go: `.SelectIndexedLogsWithSigsExcluding(ctx, requestSigB, responseSigB, 3, addressC, 0, 4, 0)`
$DIR/core/chains/evm/logpoller/orm_test.go: `.SelectIndexedLogsWithSigsExcluding(ctx, requestSigB, responseSigB, 3, addressC, 0, 4, 0)`
$DIR/core/chains/evm/logpoller/orm_test.go: `.SelectIndexedLogsWithSigsExcluding(ctx, requestSigB, responseSigB, 3, addressC, 0, 4, 0)`
$DIR/core/chains/evm/logpoller/orm_test.go: `.SelectIndexedLogsWithSigsExcluding(ctx, requestSigB, responseSigB, 3, addressC, 0, 4, 3)`
$DIR/core/chains/evm/logpoller/orm_test.go: `.SelectIndexedLogsWithSigsExcluding(ctx, requestSigB, responseSigB, 3, addressC, 0, 10, 0)`
$DIR/core/chains/evm/logpoller/orm_test.go: `.SelectIndexedLogsWithSigsExcluding(ctx, requestSigB, responseSigB, 3, addressC, 0, 10, 3)`
$DIR/core/chains/evm/logpoller/orm_test.go: `.SelectIndexedLogsWithSigsExcluding(ctx, requestSigB, responseSigB, 3, addressC, 0, 10, 0)`
$DIR/core/chains/evm/logpoller/orm_test.go: `.SelectIndexedLogsWithSigsExcluding(ctx, requestSigB, responseSigB, 1, addressB, 0, 3, 0)`
$DIR/core/chains/evm/logpoller/orm_test.go: `.SelectIndexedLogsWithSigsExcluding(ctx, requestSigA, responseSigA, 1, addressA, 0, 1, 10)`
$DIR/core/chains/evm/logpoller/orm_test.go: `.SelectIndexedLogsWithSigsExcluding(ctx, requestSigB, responseSigB, 1, addressB, 2, 13, 0)`
$DIR/core/chains/evm/logpoller/orm_test.go: `.Context(t)`
$DIR/core/chains/evm/logpoller/orm_test.go: `.RandomAddress()`
$DIR/core/chains/evm/logpoller/orm_test.go: `.RandomAddress()`
$DIR/core/chains/evm/logpoller/orm_test.go: `.Run(tt.name, func(t *testing.T) {
blockNumber, err := th.ORM.SelectLatestBlockByEventSigsAddrsWithConfs(ctx, tt.fromBlock, tt.events, tt.addrs, tt.confs)
require.NoError(t, err)
assert.Equal(t, tt.expectedBlockNumber, blockNumber)
})`
$DIR/core/chains/evm/logpoller/orm_test.go: `.ORM.SelectLatestBlockByEventSigsAddrsWithConfs(ctx, tt.fromBlock, tt.events, tt.addrs, tt.confs)`
$DIR/core/chains/evm/logpoller/orm_test.go: `.Context(t)`
$DIR/core/chains/evm/logpoller/orm_test.go: `.RandomAddress()`
$DIR/core/chains/evm/logpoller/orm_test.go: `.Date(2010, 1, 1, 12, 12, 12, 0, time.UTC)`
$DIR/core/chains/evm/logpoller/orm_test.go: `.Date(2020, 1, 1, 12, 12, 12, 0, time.UTC)`
$DIR/core/chains/evm/logpoller/orm_test.go: `.Date(2030, 1, 1, 12, 12, 12, 0, time.UTC)`
$DIR/core/chains/evm/logpoller/orm_test.go: `.NewAddressFilter(address)`
$DIR/core/chains/evm/logpoller/orm_test.go: `.NewEventSigFilter(event)`
$DIR/core/chains/evm/logpoller/orm_test.go: `.NewEventByTopicFilter(uint64(topicIdx), []primitives.ValueComparator{
{Value: val.String(), Operator: primitives.Eq},
})`
$DIR/core/chains/evm/logpoller/orm_test.go: `.String()`
$DIR/core/chains/evm/logpoller/orm_test.go: `.Timestamp(uint64(timestamp.Unix()), primitives.Gt)`
$DIR/core/chains/evm/logpoller/orm_test.go: `.Unix()`
$DIR/core/chains/evm/logpoller/orm_test.go: `.NewConfirmationsFilter(confs)`
$DIR/core/chains/evm/logpoller/orm_test.go: `.NewSortBySequence(query.Asc)`
$DIR/core/chains/evm/logpoller/orm_test.go: `.Run(tt.name, func(t *testing.T) {
logs, err := th.ORM.SelectLogsCreatedAfter(ctx, address, event, tt.after, tt.confs)
assertion(t, logs, err, tt.expectedLogs)
logs, err = th.ORM.FilteredLogs(ctx, filter(tt.after, tt.confs, 0, nil), limiter, "")
assertion(t, logs, err, tt.expectedLogs)
})`
$DIR/core/chains/evm/logpoller/orm_test.go: `.ORM.SelectLogsCreatedAfter(ctx, address, event, tt.after, tt.confs)`
$DIR/core/chains/evm/logpoller/orm_test.go: `.ORM.FilteredLogs(ctx, filter(tt.after, tt.confs, 0, nil), limiter, "")`
$DIR/core/chains/evm/logpoller/orm_test.go: `.Run(tt.name, func(t *testing.T) {
logs, err := th.ORM.SelectIndexedLogsCreatedAfter(ctx, address, event, 1, []common.Hash{event}, tt.after, tt.confs)
assertion(t, logs, err, tt.expectedLogs)
logs, err = th.ORM.FilteredLogs(ctx, filter(tt.after, tt.confs, 1, []common.Hash{event}), limiter, "")
assertion(t, logs, err, tt.expectedLogs)
})`
$DIR/core/chains/evm/logpoller/orm_test.go: `.ORM.SelectIndexedLogsCreatedAfter(ctx, address, event, 1, []common.Hash{event}, tt.after, tt.confs)`
$DIR/core/chains/evm/logpoller/orm_test.go: `.ORM.FilteredLogs(ctx, filter(tt.after, tt.confs, 1, []common.Hash{event}), limiter, "")`
$DIR/core/chains/evm/logpoller/orm_test.go: `.Context(t)`
$DIR/core/chains/evm/logpoller/orm_test.go: `.RandomAddress()`
$DIR/core/chains/evm/logpoller/orm_test.go: `.ORM.SelectIndexedLogs(ctx, address, event, 1, []common.Hash{event}, evmtypes.Unconfirmed)`
$DIR/core/chains/evm/logpoller/orm_test.go: `.ORM.SelectIndexedLogs(ctx, address, event, 1, []common.Hash{event}, evmtypes.Unconfirmed)`
$DIR/core/chains/evm/logpoller/orm_test.go: `.ORM.SelectIndexedLogs(ctx, address, event, 1, []common.Hash{event}, evmtypes.Confirmations(4))`
$DIR/core/chains/evm/logpoller/orm_test.go: `.Confirmations(4)`
$DIR/core/chains/evm/logpoller/orm_test.go: `.NewRandomEVMChainID()`
$DIR/core/chains/evm/logpoller/orm_test.go: `.RandomBytes32()`
$DIR/core/chains/evm/logpoller/orm_test.go: `.RandomAddress()`
$DIR/core/chains/evm/logpoller/orm_test.go: `.Context(t)`
$DIR/core/chains/evm/logpoller/orm_test.go: `.FullTestDBV2(t, nil)`
$DIR/core/chains/evm/logpoller/orm_test.go: `.NewORM(chainID, db, logger.Test(t))`
$DIR/core/chains/evm/logpoller/orm_test.go: `.Test(t)`
$DIR/core/chains/evm/logpoller/orm_test.go: `.RandomAddress()`
$DIR/core/chains/evm/logpoller/orm_test.go: `.String()`
$DIR/core/chains/evm/logpoller/orm_test.go: `.RandomAddress()`
$DIR/core/chains/evm/logpoller/orm_test.go: `.String()`
$DIR/core/chains/evm/logpoller/orm_test.go: `.NewLogPollerBlock(utils.RandomBytes32(), 20, time.Now(), 10)`
$DIR/core/chains/evm/logpoller/orm_test.go: `.RandomBytes32()`
$DIR/core/chains/evm/logpoller/orm_test.go: `.Now()`
$DIR/core/chains/evm/logpoller/orm_test.go: `.NewLogPollerBlock(utils.RandomBytes32(), -10, time.Now(), -10)`
$DIR/core/chains/evm/logpoller/orm_test.go: `.RandomBytes32()`
$DIR/core/chains/evm/logpoller/orm_test.go: `.Now()`
$DIR/core/chains/evm/logpoller/orm_test.go: `.Run(tt.name, func(t *testing.T) {
// clean all logs and blocks between test cases
defer func() { _ = o.DeleteLogsAndBlocksAfter(ctx, 0) }()
insertError := o.InsertLogsWithBlock(ctx, tt.logs, tt.block)
logs, logsErr := o.SelectLogs(ctx, 0, math.MaxInt, address, event)
block, blockErr := o.SelectLatestBlock(ctx)
if tt.shouldRollback {
assert.Error(t, insertError)
assert.NoError(t, logsErr)
assert.Len(t, logs, 0)
assert.Error(t, blockErr)
} else {
assert.NoError(t, insertError)
assert.NoError(t, logsErr)
assert.Len(t, logs, len(tt.logs))
assert.NoError(t, blockErr)
assert.Equal(t, block.BlockNumber, tt.block.BlockNumber)
}
})`
$DIR/core/chains/evm/logpoller/orm_test.go: `.DeleteLogsAndBlocksAfter(ctx, 0)`
$DIR/core/chains/evm/logpoller/orm_test.go: `.InsertLogsWithBlock(ctx, tt.logs, tt.block)`
$DIR/core/chains/evm/logpoller/orm_test.go: `.SelectLogs(ctx, 0, math.MaxInt, address, event)`
$DIR/core/chains/evm/logpoller/orm_test.go: `.SelectLatestBlock(ctx)`
$DIR/core/chains/evm/logpoller/orm_test.go: `.NewRandomEVMChainID()`
$DIR/core/chains/evm/logpoller/orm_test.go: `.RandomBytes32()`
$DIR/core/chains/evm/logpoller/orm_test.go: `.RandomAddress()`
$DIR/core/chains/evm/logpoller/orm_test.go: `.Context(t)`
$DIR/core/chains/evm/logpoller/orm_test.go: `.FullTestDBV2(t, nil)`
$DIR/core/chains/evm/logpoller/orm_test.go: `.NewORM(chainID, db, logger.Test(t))`
$DIR/core/chains/evm/logpoller/orm_test.go: `.Test(t)`
$DIR/core/chains/evm/logpoller/orm_test.go: `.RandomAddress()`
$DIR/core/chains/evm/logpoller/orm_test.go: `.String()`
$DIR/core/chains/evm/logpoller/orm_test.go: `.RandomAddress()`
$DIR/core/chains/evm/logpoller/orm_test.go: `.String()`
$DIR/core/chains/evm/logpoller/orm_test.go: `.Run(tt.name, func(t *testing.T) {
// clean all logs and blocks between test cases
defer func() { _, _ = db.Exec("truncate evm.logs") }()
insertErr := o.InsertLogs(ctx, tt.logs)
logsFromDb, err := o.SelectLogs(ctx, 0, math.MaxInt, address, event)
assert.NoError(t, err)
if tt.shouldRollback {
assert.Error(t, insertErr)
assert.Len(t, logsFromDb, 0)
} else {
assert.NoError(t, insertErr)
assert.Len(t, logsFromDb, len(tt.logs))
}
})`
$DIR/core/chains/evm/logpoller/orm_test.go: `.Exec("truncate evm.logs")`
$DIR/core/chains/evm/logpoller/orm_test.go: `.InsertLogs(ctx, tt.logs)`
$DIR/core/chains/evm/logpoller/orm_test.go: `.SelectLogs(ctx, 0, math.MaxInt, address, event)`
$DIR/core/chains/evm/logpoller/orm_test.go: `.Context(t)`
$DIR/core/chains/evm/logpoller/orm_test.go: `.RandomAddress()`
$DIR/core/chains/evm/logpoller/orm_test.go: `.RandomBytes32()`
$DIR/core/chains/evm/logpoller/orm_test.go: `.EvmWord(1)`
$DIR/core/chains/evm/logpoller/orm_test.go: `.Bytes()`
$DIR/core/chains/evm/logpoller/orm_test.go: `.EvmWord(10)`
$DIR/core/chains/evm/logpoller/orm_test.go: `.Bytes()`
$DIR/core/chains/evm/logpoller/orm_test.go: `.EvmWord(5)`
$DIR/core/chains/evm/logpoller/orm_test.go: `.Bytes()`
$DIR/core/chains/evm/logpoller/orm_test.go: `.EvmWord(20)`
$DIR/core/chains/evm/logpoller/orm_test.go: `.Bytes()`
$DIR/core/chains/evm/logpoller/orm_test.go: `.ORM.InsertLogsWithBlock(ctx,
[]logpoller.Log{
GenLogWithData(th.ChainID, address, eventSig, 1, 1, firstLogData),
GenLogWithData(th.ChainID, address, eventSig, 2, 2, secondLogData),
},
logpoller.NewLogPollerBlock(utils.RandomBytes32(), 10, time.Now(), 1),
)`
$DIR/core/chains/evm/logpoller/orm_test.go: `.NewLogPollerBlock(utils.RandomBytes32(), 10, time.Now(), 1)`
$DIR/core/chains/evm/logpoller/orm_test.go: `.RandomBytes32()`
$DIR/core/chains/evm/logpoller/orm_test.go: `.Now()`
$DIR/core/chains/evm/logpoller/orm_test.go: `.NewSortByBlock(query.Asc)`
$DIR/core/chains/evm/logpoller/orm_test.go: `.NewSortBySequence(query.Asc)`
$DIR/core/chains/evm/logpoller/orm_test.go: `.NewAddressFilter(address)`
$DIR/core/chains/evm/logpoller/orm_test.go: `.NewEventSigFilter(eventSig)`
$DIR/core/chains/evm/logpoller/orm_test.go: `.NewEventByWordFilter(eventSig, 0, []primitives.ValueComparator{
{Value: logpoller.EvmWord(word).Hex(), Operator: primitives.Lte},
})`
$DIR/core/chains/evm/logpoller/orm_test.go: `.EvmWord(word)`
$DIR/core/chains/evm/logpoller/orm_test.go: `.Hex()`
$DIR/core/chains/evm/logpoller/orm_test.go: `.NewEventByWordFilter(eventSig, 1, []primitives.ValueComparator{
{Value: logpoller.EvmWord(word).Hex(), Operator: primitives.Gte},
})`
$DIR/core/chains/evm/logpoller/orm_test.go: `.EvmWord(word)`
$DIR/core/chains/evm/logpoller/orm_test.go: `.Hex()`
$DIR/core/chains/evm/logpoller/orm_test.go: `.Confidence(primitives.Unconfirmed)`
$DIR/core/chains/evm/logpoller/orm_test.go: `.Run(tt.name, func(t *testing.T) {
logs, err := th.ORM.SelectLogsDataWordBetween(ctx, address, eventSig, 0, 1, logpoller.EvmWord(tt.wordValue), evmtypes.Unconfirmed)
assertion(t, logs, err, tt.expectedLogs)
logs, err = th.ORM.FilteredLogs(ctx, wordFilter(tt.wordValue), limiter, "")
assertion(t, logs, err, tt.expectedLogs)
})`
$DIR/core/chains/evm/logpoller/orm_test.go: `.ORM.SelectLogsDataWordBetween(ctx, address, eventSig, 0, 1, logpoller.EvmWord(tt.wordValue), evmtypes.Unconfirmed)`
$DIR/core/chains/evm/logpoller/orm_test.go: `.EvmWord(tt.wordValue)`
$DIR/core/chains/evm/logpoller/orm_test.go: `.ORM.FilteredLogs(ctx, wordFilter(tt.wordValue), limiter, "")`
$DIR/core/chains/evm/logpoller/orm_test.go: `.Context(t)`
$DIR/core/chains/evm/logpoller/orm_test.go: `.Run("Selects oldest within given chain", func(t *testing.T) {
// insert blocks
require.NoError(t, o2.InsertBlock(ctx, common.HexToHash("0x1231"), 11, time.Now(), 0))
require.NoError(t, o2.InsertBlock(ctx, common.HexToHash("0x1232"), 12, time.Now(), 0))
// insert newer block from different chain
require.NoError(t, o1.InsertBlock(ctx, common.HexToHash("0x1233"), 13, time.Now(), 0))
require.NoError(t, o1.InsertBlock(ctx, common.HexToHash("0x1231"), 14, time.Now(), 0))
block, err := o1.SelectOldestBlock(ctx, 0)
require.NoError(t, err)
require.NotNil(t, block)
require.Equal(t, block.BlockNumber, int64(13))
require.Equal(t, block.BlockHash, common.HexToHash("0x1233"))
})`
$DIR/core/chains/evm/logpoller/orm_test.go: `.SelectOldestBlock(ctx, 0)`
$DIR/core/chains/evm/logpoller/orm_test.go: `.SelectOldestBlock(ctx, 12)`
$DIR/core/chains/evm/logpoller/parser_test.go: `t.Run("query with no filters no order and no limit", func(t *testing.T) {
t.Parallel()
parser := &pgDSLParser{}
chainID := big.NewInt(1)
expressions := []query.Expression{}
limiter := query.LimitAndSort{}
result, args, err := parser.buildQuery(chainID, expressions, limiter)
require.NoError(t, err)
assert.Equal(t, "SELECT evm.logs.* FROM evm.logs WHERE evm_chain_id = :evm_chain_id", result)
assertArgs(t, args, 1)
})`
$DIR/core/chains/evm/logpoller/parser_test.go: `assertArgs(t, args, 1)`
$DIR/core/chains/evm/logpoller/parser_test.go: `t.Run("query with cursor and no order by", func(t *testing.T) {
t.Parallel()
parser := &pgDSLParser{}
chainID := big.NewInt(1)
expressions := []query.Expression{
NewAddressFilter(common.HexToAddress("0x42")),
NewEventSigFilter(common.HexToHash("0x21")),
}
limiter := query.NewLimitAndSort(query.CursorLimit("10-0x42-5", query.CursorFollowing, 20))
result, args, err := parser.buildQuery(chainID, expressions, limiter)
expected := "SELECT evm.logs.* " +
"FROM evm.logs " +
"WHERE evm_chain_id = :evm_chain_id " +
"AND (address = :address_0 AND event_sig = :event_sig_0) " +
"AND block_number >= :cursor_block AND tx_hash >= :cursor_txhash AND log_index > :cursor_log_index " +
"ORDER BY block_number ASC, tx_hash ASC, log_index ASC " +
"LIMIT 20"
require.NoError(t, err)
assert.Equal(t, expected, result)
assertArgs(t, args, 6)
})`
$DIR/core/chains/evm/logpoller/parser_test.go: `assertArgs(t, args, 6)`
$DIR/core/chains/evm/logpoller/parser_test.go: `t.Run("query with limit and no order by", func(t *testing.T) {
t.Parallel()
parser := &pgDSLParser{}
chainID := big.NewInt(1)
expressions := []query.Expression{
NewAddressFilter(common.HexToAddress("0x42")),
NewEventSigFilter(common.HexToHash("0x21")),
}
limiter := query.NewLimitAndSort(query.CountLimit(20))
result, args, err := parser.buildQuery(chainID, expressions, limiter)
expected := "SELECT evm.logs.* " +
"FROM evm.logs " +
"WHERE evm_chain_id = :evm_chain_id " +
"AND (address = :address_0 AND event_sig = :event_sig_0) " +
"LIMIT 20"
require.NoError(t, err)
assert.Equal(t, expected, result)
assertArgs(t, args, 3)
})`
$DIR/core/chains/evm/logpoller/parser_test.go: `assertArgs(t, args, 3)`
$DIR/core/chains/evm/logpoller/parser_test.go: `t.Run("query with order by sequence no cursor no limit", func(t *testing.T) {
t.Parallel()
parser := &pgDSLParser{}
chainID := big.NewInt(1)
expressions := []query.Expression{}
limiter := query.NewLimitAndSort(query.Limit{}, query.NewSortBySequence(query.Desc))
result, args, err := parser.buildQuery(chainID, expressions, limiter)
expected := "SELECT evm.logs.* " +
"FROM evm.logs " +
"WHERE evm_chain_id = :evm_chain_id " +
"ORDER BY block_number DESC, tx_hash DESC, log_index DESC"
require.NoError(t, err)
assert.Equal(t, expected, result)
assertArgs(t, args, 1)
})`
$DIR/core/chains/evm/logpoller/parser_test.go: `assertArgs(t, args, 1)`
$DIR/core/chains/evm/logpoller/parser_test.go: `t.Run("query with multiple order by no limit", func(t *testing.T) {
t.Parallel()
parser := &pgDSLParser{}
chainID := big.NewInt(1)
expressions := []query.Expression{}
limiter := query.NewLimitAndSort(query.Limit{}, query.NewSortByBlock(query.Asc), query.NewSortByTimestamp(query.Desc))
result, args, err := parser.buildQuery(chainID, expressions, limiter)
expected := "SELECT evm.logs.* " +
"FROM evm.logs " +
"WHERE evm_chain_id = :evm_chain_id " +
"ORDER BY block_number ASC, block_timestamp DESC"
require.NoError(t, err)
assert.Equal(t, expected, result)
assertArgs(t, args, 1)
})`
$DIR/core/chains/evm/logpoller/parser_test.go: `assertArgs(t, args, 1)`
$DIR/core/chains/evm/logpoller/parser_test.go: `t.Run("basic query with default primitives no order by and cursor", func(t *testing.T) {
t.Parallel()
parser := &pgDSLParser{}
chainID := big.NewInt(1)
expressions := []query.Expression{
query.Timestamp(10, primitives.Eq),
query.TxHash(common.HexToHash("0x84").String()),
query.Block(99, primitives.Neq),
query.Confidence(primitives.Finalized),
query.Confidence(primitives.Unconfirmed),
}
limiter := query.NewLimitAndSort(query.CursorLimit("10-0x42-20", query.CursorPrevious, 20))
result, args, err := parser.buildQuery(chainID, expressions, limiter)
expected := "SELECT evm.logs.* " +
"FROM evm.logs " +
"WHERE evm_chain_id = :evm_chain_id " +
"AND (block_timestamp = :block_timestamp_0 " +
"AND tx_hash = :tx_hash_0 " +
"AND block_number != :block_number_0 " +
"AND block_number <= " +
"(SELECT finalized_block_number FROM evm.log_poller_blocks WHERE evm_chain_id = :evm_chain_id ORDER BY block_number DESC LIMIT 1) " +
"AND block_number <= (SELECT greatest(block_number - :confs_0, 0) FROM evm.log_poller_blocks WHERE evm_chain_id = :evm_chain_id ORDER BY block_number DESC LIMIT 1)) " +
"AND block_number <= :cursor_block AND tx_hash <= :cursor_txhash AND log_index < :cursor_log_index " +
"ORDER BY block_number DESC, tx_hash DESC, log_index DESC LIMIT 20"
require.NoError(t, err)
assert.Equal(t, expected, result)
assertArgs(t, args, 8)
})`
$DIR/core/chains/evm/logpoller/parser_test.go: `assertArgs(t, args, 8)`
$DIR/core/chains/evm/logpoller/parser_test.go: `t.Run("query for finality", func(t *testing.T) {
t.Parallel()
t.Run("finalized", func(t *testing.T) {
parser := &pgDSLParser{}
chainID := big.NewInt(1)
expressions := []query.Expression{query.Confidence(primitives.Finalized)}
limiter := query.LimitAndSort{}
result, args, err := parser.buildQuery(chainID, expressions, limiter)
expected := "SELECT evm.logs.* " +
"FROM evm.logs " +
"WHERE evm_chain_id = :evm_chain_id " +
"AND block_number <= (SELECT finalized_block_number FROM evm.log_poller_blocks WHERE evm_chain_id = :evm_chain_id ORDER BY block_number DESC LIMIT 1)"
require.NoError(t, err)
assert.Equal(t, expected, result)
assertArgs(t, args, 1)
})
t.Run("unconfirmed", func(t *testing.T) {
parser := &pgDSLParser{}
chainID := big.NewInt(1)
expressions := []query.Expression{query.Confidence(primitives.Unconfirmed)}
limiter := query.LimitAndSort{}
result, args, err := parser.buildQuery(chainID, expressions, limiter)
expected := "SELECT evm.logs.* " +
"FROM evm.logs " +
"WHERE evm_chain_id = :evm_chain_id " +
"AND block_number <= (SELECT greatest(block_number - :confs_0, 0) FROM evm.log_poller_blocks WHERE evm_chain_id = :evm_chain_id ORDER BY block_number DESC LIMIT 1)"
require.NoError(t, err)
assert.Equal(t, expected, result)
assertArgs(t, args, 2)
})
t.Run("exact confirmations", func(t *testing.T) {
parser := &pgDSLParser{}
chainID := big.NewInt(1)
expressions := []query.Expression{NewConfirmationsFilter(25)}
limiter := query.LimitAndSort{}
result, args, err := parser.buildQuery(chainID, expressions, limiter)
expected := "SELECT evm.logs.* " +
"FROM evm.logs " +
"WHERE evm_chain_id = :evm_chain_id " +
"AND block_number <= (SELECT greatest(block_number - :confs_0, 0) FROM evm.log_poller_blocks WHERE evm_chain_id = :evm_chain_id ORDER BY block_number DESC LIMIT 1)"
require.NoError(t, err)
assert.Equal(t, expected, result)
confirmations, ok := args.args["confs_0"]
require.True(t, ok)
require.Equal(t, uint64(25), confirmations)
assertArgs(t, args, 2)
})
})`
$DIR/core/chains/evm/logpoller/parser_test.go: `t.Run("finalized", func(t *testing.T) {
parser := &pgDSLParser{}
chainID := big.NewInt(1)
expressions := []query.Expression{query.Confidence(primitives.Finalized)}
limiter := query.LimitAndSort{}
result, args, err := parser.buildQuery(chainID, expressions, limiter)
expected := "SELECT evm.logs.* " +
"FROM evm.logs " +
"WHERE evm_chain_id = :evm_chain_id " +
"AND block_number <= (SELECT finalized_block_number FROM evm.log_poller_blocks WHERE evm_chain_id = :evm_chain_id ORDER BY block_number DESC LIMIT 1)"
require.NoError(t, err)
assert.Equal(t, expected, result)
assertArgs(t, args, 1)
})`
$DIR/core/chains/evm/logpoller/parser_test.go: `assertArgs(t, args, 1)`
$DIR/core/chains/evm/logpoller/parser_test.go: `t.Run("unconfirmed", func(t *testing.T) {
parser := &pgDSLParser{}
chainID := big.NewInt(1)
expressions := []query.Expression{query.Confidence(primitives.Unconfirmed)}
limiter := query.LimitAndSort{}
result, args, err := parser.buildQuery(chainID, expressions, limiter)
expected := "SELECT evm.logs.* " +
"FROM evm.logs " +
"WHERE evm_chain_id = :evm_chain_id " +
"AND block_number <= (SELECT greatest(block_number - :confs_0, 0) FROM evm.log_poller_blocks WHERE evm_chain_id = :evm_chain_id ORDER BY block_number DESC LIMIT 1)"
require.NoError(t, err)
assert.Equal(t, expected, result)
assertArgs(t, args, 2)
})`
$DIR/core/chains/evm/logpoller/parser_test.go: `assertArgs(t, args, 2)`
$DIR/core/chains/evm/logpoller/parser_test.go: `t.Run("exact confirmations", func(t *testing.T) {
parser := &pgDSLParser{}
chainID := big.NewInt(1)
expressions := []query.Expression{NewConfirmationsFilter(25)}
limiter := query.LimitAndSort{}
result, args, err := parser.buildQuery(chainID, expressions, limiter)
expected := "SELECT evm.logs.* " +
"FROM evm.logs " +
"WHERE evm_chain_id = :evm_chain_id " +
"AND block_number <= (SELECT greatest(block_number - :confs_0, 0) FROM evm.log_poller_blocks WHERE evm_chain_id = :evm_chain_id ORDER BY block_number DESC LIMIT 1)"
require.NoError(t, err)
assert.Equal(t, expected, result)
confirmations, ok := args.args["confs_0"]
require.True(t, ok)
require.Equal(t, uint64(25), confirmations)
assertArgs(t, args, 2)
})`
$DIR/core/chains/evm/logpoller/parser_test.go: `assertArgs(t, args, 2)`
$DIR/core/chains/evm/logpoller/parser_test.go: `t.Run("query for event by word", func(t *testing.T) {
t.Parallel()
wordFilter := NewEventByWordFilter(common.HexToHash("0x42"), 8, []primitives.ValueComparator{
{Value: "", Operator: primitives.Gt},
})
parser := &pgDSLParser{}
chainID := big.NewInt(1)
expressions := []query.Expression{wordFilter}
limiter := query.LimitAndSort{}
result, args, err := parser.buildQuery(chainID, expressions, limiter)
expected := "SELECT evm.logs.* " +
"FROM evm.logs " +
"WHERE evm_chain_id = :evm_chain_id " +
"AND substring(data from 32*:word_index_0+1 for 32) > :word_value_0"
require.NoError(t, err)
assert.Equal(t, expected, result)
assertArgs(t, args, 3)
})`
$DIR/core/chains/evm/logpoller/parser_test.go: `assertArgs(t, args, 3)`
$DIR/core/chains/evm/logpoller/parser_test.go: `t.Run("query for event topic", func(t *testing.T) {
t.Parallel()
topicFilter := NewEventByTopicFilter(2, []primitives.ValueComparator{
{Value: "a", Operator: primitives.Gt},
{Value: "b", Operator: primitives.Lt},
})
parser := &pgDSLParser{}
chainID := big.NewInt(1)
expressions := []query.Expression{topicFilter}
limiter := query.LimitAndSort{}
result, args, err := parser.buildQuery(chainID, expressions, limiter)
expected := "SELECT evm.logs.* " +
"FROM evm.logs " +
"WHERE evm_chain_id = :evm_chain_id " +
"AND topics[:topic_index_0] > :topic_value_0 AND topics[:topic_index_0] < :topic_value_1"
require.NoError(t, err)
assert.Equal(t, expected, result)
assertArgs(t, args, 4)
})`
$DIR/core/chains/evm/logpoller/parser_test.go: `assertArgs(t, args, 4)`
$DIR/core/chains/evm/logpoller/parser_test.go: `t.Run("nested query", func(t *testing.T) {
t.Parallel()
parser := &pgDSLParser{}
chainID := big.NewInt(1)
expressions := []query.Expression{
{BoolExpression: query.BoolExpression{
Expressions: []query.Expression{
query.Timestamp(10, primitives.Gte),
{BoolExpression: query.BoolExpression{
Expressions: []query.Expression{
query.TxHash(common.HexToHash("0x84").Hex()),
query.Confidence(primitives.Unconfirmed),
},
BoolOperator: query.OR,
}},
},
BoolOperator: query.AND,
}},
}
limiter := query.LimitAndSort{}
result, args, err := parser.buildQuery(chainID, expressions, limiter)
expected := "SELECT evm.logs.* " +
"FROM evm.logs " +
"WHERE evm_chain_id = :evm_chain_id " +
"AND (block_timestamp >= :block_timestamp_0 " +
"AND (tx_hash = :tx_hash_0 " +
"OR block_number <= (SELECT greatest(block_number - :confs_0, 0) FROM evm.log_poller_blocks WHERE evm_chain_id = :evm_chain_id ORDER BY block_number DESC LIMIT 1)))"
require.NoError(t, err)
assert.Equal(t, expected, result)
assertArgs(t, args, 4)
})`
$DIR/core/chains/evm/logpoller/parser_test.go: `assertArgs(t, args, 4)`
$DIR/core/chains/evm/logpoller/parser_test.go: `assertArgs(t, args, 7)`
$DIR/core/chains/evm/logpoller/parser_test.go: `.Run("query with no filters no order and no limit", func(t *testing.T) {
t.Parallel()
parser := &pgDSLParser{}
chainID := big.NewInt(1)
expressions := []query.Expression{}
limiter := query.LimitAndSort{}
result, args, err := parser.buildQuery(chainID, expressions, limiter)
require.NoError(t, err)
assert.Equal(t, "SELECT evm.logs.* FROM evm.logs WHERE evm_chain_id = :evm_chain_id", result)
assertArgs(t, args, 1)
})`
$DIR/core/chains/evm/logpoller/parser_test.go: `.NewInt(1)`
$DIR/core/chains/evm/logpoller/parser_test.go: `.buildQuery(chainID, expressions, limiter)`
$DIR/core/chains/evm/logpoller/parser_test.go: `.Run("query with cursor and no order by", func(t *testing.T) {
t.Parallel()
parser := &pgDSLParser{}
chainID := big.NewInt(1)
expressions := []query.Expression{
NewAddressFilter(common.HexToAddress("0x42")),
NewEventSigFilter(common.HexToHash("0x21")),
}
limiter := query.NewLimitAndSort(query.CursorLimit("10-0x42-5", query.CursorFollowing, 20))
result, args, err := parser.buildQuery(chainID, expressions, limiter)
expected := "SELECT evm.logs.* " +
"FROM evm.logs " +
"WHERE evm_chain_id = :evm_chain_id " +
"AND (address = :address_0 AND event_sig = :event_sig_0) " +
"AND block_number >= :cursor_block AND tx_hash >= :cursor_txhash AND log_index > :cursor_log_index " +
"ORDER BY block_number ASC, tx_hash ASC, log_index ASC " +
"LIMIT 20"
require.NoError(t, err)
assert.Equal(t, expected, result)
assertArgs(t, args, 6)
})`
$DIR/core/chains/evm/logpoller/parser_test.go: `.NewInt(1)`
$DIR/core/chains/evm/logpoller/parser_test.go: `.HexToAddress("0x42")`
$DIR/core/chains/evm/logpoller/parser_test.go: `.HexToHash("0x21")`
$DIR/core/chains/evm/logpoller/parser_test.go: `.NewLimitAndSort(query.CursorLimit("10-0x42-5", query.CursorFollowing, 20))`
$DIR/core/chains/evm/logpoller/parser_test.go: `.CursorLimit("10-0x42-5", query.CursorFollowing, 20)`
$DIR/core/chains/evm/logpoller/parser_test.go: `.buildQuery(chainID, expressions, limiter)`
$DIR/core/chains/evm/logpoller/parser_test.go: `.Run("query with limit and no order by", func(t *testing.T) {
t.Parallel()
parser := &pgDSLParser{}
chainID := big.NewInt(1)
expressions := []query.Expression{
NewAddressFilter(common.HexToAddress("0x42")),
NewEventSigFilter(common.HexToHash("0x21")),
}
limiter := query.NewLimitAndSort(query.CountLimit(20))
result, args, err := parser.buildQuery(chainID, expressions, limiter)
expected := "SELECT evm.logs.* " +
"FROM evm.logs " +
"WHERE evm_chain_id = :evm_chain_id " +
"AND (address = :address_0 AND event_sig = :event_sig_0) " +
"LIMIT 20"
require.NoError(t, err)
assert.Equal(t, expected, result)
assertArgs(t, args, 3)
})`
$DIR/core/chains/evm/logpoller/parser_test.go: `.NewInt(1)`
$DIR/core/chains/evm/logpoller/parser_test.go: `.HexToAddress("0x42")`
$DIR/core/chains/evm/logpoller/parser_test.go: `.HexToHash("0x21")`
$DIR/core/chains/evm/logpoller/parser_test.go: `.NewLimitAndSort(query.CountLimit(20))`
$DIR/core/chains/evm/logpoller/parser_test.go: `.CountLimit(20)`
$DIR/core/chains/evm/logpoller/parser_test.go: `.buildQuery(chainID, expressions, limiter)`
$DIR/core/chains/evm/logpoller/parser_test.go: `.Run("query with order by sequence no cursor no limit", func(t *testing.T) {
t.Parallel()
parser := &pgDSLParser{}
chainID := big.NewInt(1)
expressions := []query.Expression{}
limiter := query.NewLimitAndSort(query.Limit{}, query.NewSortBySequence(query.Desc))
result, args, err := parser.buildQuery(chainID, expressions, limiter)
expected := "SELECT evm.logs.* " +
"FROM evm.logs " +
"WHERE evm_chain_id = :evm_chain_id " +
"ORDER BY block_number DESC, tx_hash DESC, log_index DESC"
require.NoError(t, err)
assert.Equal(t, expected, result)
assertArgs(t, args, 1)
})`
$DIR/core/chains/evm/logpoller/parser_test.go: `.NewInt(1)`
$DIR/core/chains/evm/logpoller/parser_test.go: `.NewLimitAndSort(query.Limit{}, query.NewSortBySequence(query.Desc))`
$DIR/core/chains/evm/logpoller/parser_test.go: `.NewSortBySequence(query.Desc)`
$DIR/core/chains/evm/logpoller/parser_test.go: `.buildQuery(chainID, expressions, limiter)`
$DIR/core/chains/evm/logpoller/parser_test.go: `.Run("query with multiple order by no limit", func(t *testing.T) {
t.Parallel()
parser := &pgDSLParser{}
chainID := big.NewInt(1)
expressions := []query.Expression{}
limiter := query.NewLimitAndSort(query.Limit{}, query.NewSortByBlock(query.Asc), query.NewSortByTimestamp(query.Desc))
result, args, err := parser.buildQuery(chainID, expressions, limiter)
expected := "SELECT evm.logs.* " +
"FROM evm.logs " +
"WHERE evm_chain_id = :evm_chain_id " +
"ORDER BY block_number ASC, block_timestamp DESC"
require.NoError(t, err)
assert.Equal(t, expected, result)
assertArgs(t, args, 1)
})`
$DIR/core/chains/evm/logpoller/parser_test.go: `.NewInt(1)`
$DIR/core/chains/evm/logpoller/parser_test.go: `.NewLimitAndSort(query.Limit{}, query.NewSortByBlock(query.Asc), query.NewSortByTimestamp(query.Desc))`
$DIR/core/chains/evm/logpoller/parser_test.go: `.NewSortByBlock(query.Asc)`
$DIR/core/chains/evm/logpoller/parser_test.go: `.NewSortByTimestamp(query.Desc)`
$DIR/core/chains/evm/logpoller/parser_test.go: `.buildQuery(chainID, expressions, limiter)`
$DIR/core/chains/evm/logpoller/parser_test.go: `.Run("basic query with default primitives no order by and cursor", func(t *testing.T) {
t.Parallel()
parser := &pgDSLParser{}
chainID := big.NewInt(1)
expressions := []query.Expression{
query.Timestamp(10, primitives.Eq),
query.TxHash(common.HexToHash("0x84").String()),
query.Block(99, primitives.Neq),
query.Confidence(primitives.Finalized),
query.Confidence(primitives.Unconfirmed),
}
limiter := query.NewLimitAndSort(query.CursorLimit("10-0x42-20", query.CursorPrevious, 20))
result, args, err := parser.buildQuery(chainID, expressions, limiter)
expected := "SELECT evm.logs.* " +
"FROM evm.logs " +
"WHERE evm_chain_id = :evm_chain_id " +
"AND (block_timestamp = :block_timestamp_0 " +
"AND tx_hash = :tx_hash_0 " +
"AND block_number != :block_number_0 " +
"AND block_number <= " +
"(SELECT finalized_block_number FROM evm.log_poller_blocks WHERE evm_chain_id = :evm_chain_id ORDER BY block_number DESC LIMIT 1) " +
"AND block_number <= (SELECT greatest(block_number - :confs_0, 0) FROM evm.log_poller_blocks WHERE evm_chain_id = :evm_chain_id ORDER BY block_number DESC LIMIT 1)) " +
"AND block_number <= :cursor_block AND tx_hash <= :cursor_txhash AND log_index < :cursor_log_index " +
"ORDER BY block_number DESC, tx_hash DESC, log_index DESC LIMIT 20"
require.NoError(t, err)
assert.Equal(t, expected, result)
assertArgs(t, args, 8)
})`
$DIR/core/chains/evm/logpoller/parser_test.go: `.NewInt(1)`
$DIR/core/chains/evm/logpoller/parser_test.go: `.Timestamp(10, primitives.Eq)`
$DIR/core/chains/evm/logpoller/parser_test.go: `.TxHash(common.HexToHash("0x84").String())`
$DIR/core/chains/evm/logpoller/parser_test.go: `.HexToHash("0x84")`
$DIR/core/chains/evm/logpoller/parser_test.go: `.String()`
$DIR/core/chains/evm/logpoller/parser_test.go: `.Block(99, primitives.Neq)`
$DIR/core/chains/evm/logpoller/parser_test.go: `.Confidence(primitives.Finalized)`
$DIR/core/chains/evm/logpoller/parser_test.go: `.Confidence(primitives.Unconfirmed)`
$DIR/core/chains/evm/logpoller/parser_test.go: `.NewLimitAndSort(query.CursorLimit("10-0x42-20", query.CursorPrevious, 20))`
$DIR/core/chains/evm/logpoller/parser_test.go: `.CursorLimit("10-0x42-20", query.CursorPrevious, 20)`
$DIR/core/chains/evm/logpoller/parser_test.go: `.buildQuery(chainID, expressions, limiter)`
$DIR/core/chains/evm/logpoller/parser_test.go: `.Run("query for finality", func(t *testing.T) {
t.Parallel()
t.Run("finalized", func(t *testing.T) {
parser := &pgDSLParser{}
chainID := big.NewInt(1)
expressions := []query.Expression{query.Confidence(primitives.Finalized)}
limiter := query.LimitAndSort{}
result, args, err := parser.buildQuery(chainID, expressions, limiter)
expected := "SELECT evm.logs.* " +
"FROM evm.logs " +
"WHERE evm_chain_id = :evm_chain_id " +
"AND block_number <= (SELECT finalized_block_number FROM evm.log_poller_blocks WHERE evm_chain_id = :evm_chain_id ORDER BY block_number DESC LIMIT 1)"
require.NoError(t, err)
assert.Equal(t, expected, result)
assertArgs(t, args, 1)
})
t.Run("unconfirmed", func(t *testing.T) {
parser := &pgDSLParser{}
chainID := big.NewInt(1)
expressions := []query.Expression{query.Confidence(primitives.Unconfirmed)}
limiter := query.LimitAndSort{}
result, args, err := parser.buildQuery(chainID, expressions, limiter)
expected := "SELECT evm.logs.* " +
"FROM evm.logs " +
"WHERE evm_chain_id = :evm_chain_id " +
"AND block_number <= (SELECT greatest(block_number - :confs_0, 0) FROM evm.log_poller_blocks WHERE evm_chain_id = :evm_chain_id ORDER BY block_number DESC LIMIT 1)"
require.NoError(t, err)
assert.Equal(t, expected, result)
assertArgs(t, args, 2)
})
t.Run("exact confirmations", func(t *testing.T) {
parser := &pgDSLParser{}
chainID := big.NewInt(1)
expressions := []query.Expression{NewConfirmationsFilter(25)}
limiter := query.LimitAndSort{}
result, args, err := parser.buildQuery(chainID, expressions, limiter)
expected := "SELECT evm.logs.* " +
"FROM evm.logs " +
"WHERE evm_chain_id = :evm_chain_id " +
"AND block_number <= (SELECT greatest(block_number - :confs_0, 0) FROM evm.log_poller_blocks WHERE evm_chain_id = :evm_chain_id ORDER BY block_number DESC LIMIT 1)"
require.NoError(t, err)
assert.Equal(t, expected, result)
confirmations, ok := args.args["confs_0"]
require.True(t, ok)
require.Equal(t, uint64(25), confirmations)
assertArgs(t, args, 2)
})
})`
$DIR/core/chains/evm/logpoller/parser_test.go: `.Run("finalized", func(t *testing.T) {
parser := &pgDSLParser{}
chainID := big.NewInt(1)
expressions := []query.Expression{query.Confidence(primitives.Finalized)}
limiter := query.LimitAndSort{}
result, args, err := parser.buildQuery(chainID, expressions, limiter)
expected := "SELECT evm.logs.* " +
"FROM evm.logs " +
"WHERE evm_chain_id = :evm_chain_id " +
"AND block_number <= (SELECT finalized_block_number FROM evm.log_poller_blocks WHERE evm_chain_id = :evm_chain_id ORDER BY block_number DESC LIMIT 1)"
require.NoError(t, err)
assert.Equal(t, expected, result)
assertArgs(t, args, 1)
})`
$DIR/core/chains/evm/logpoller/parser_test.go: `.NewInt(1)`
$DIR/core/chains/evm/logpoller/parser_test.go: `.Confidence(primitives.Finalized)`
$DIR/core/chains/evm/logpoller/parser_test.go: `.buildQuery(chainID, expressions, limiter)`
$DIR/core/chains/evm/logpoller/parser_test.go: `.Run("unconfirmed", func(t *testing.T) {
parser := &pgDSLParser{}
chainID := big.NewInt(1)
expressions := []query.Expression{query.Confidence(primitives.Unconfirmed)}
limiter := query.LimitAndSort{}
result, args, err := parser.buildQuery(chainID, expressions, limiter)
expected := "SELECT evm.logs.* " +
"FROM evm.logs " +
"WHERE evm_chain_id = :evm_chain_id " +
"AND block_number <= (SELECT greatest(block_number - :confs_0, 0) FROM evm.log_poller_blocks WHERE evm_chain_id = :evm_chain_id ORDER BY block_number DESC LIMIT 1)"
require.NoError(t, err)
assert.Equal(t, expected, result)
assertArgs(t, args, 2)
})`
$DIR/core/chains/evm/logpoller/parser_test.go: `.NewInt(1)`
$DIR/core/chains/evm/logpoller/parser_test.go: `.Confidence(primitives.Unconfirmed)`
$DIR/core/chains/evm/logpoller/parser_test.go: `.buildQuery(chainID, expressions, limiter)`
$DIR/core/chains/evm/logpoller/parser_test.go: `.Run("exact confirmations", func(t *testing.T) {
parser := &pgDSLParser{}
chainID := big.NewInt(1)
expressions := []query.Expression{NewConfirmationsFilter(25)}
limiter := query.LimitAndSort{}
result, args, err := parser.buildQuery(chainID, expressions, limiter)
expected := "SELECT evm.logs.* " +
"FROM evm.logs " +
"WHERE evm_chain_id = :evm_chain_id " +
"AND block_number <= (SELECT greatest(block_number - :confs_0, 0) FROM evm.log_poller_blocks WHERE evm_chain_id = :evm_chain_id ORDER BY block_number DESC LIMIT 1)"
require.NoError(t, err)
assert.Equal(t, expected, result)
confirmations, ok := args.args["confs_0"]
require.True(t, ok)
require.Equal(t, uint64(25), confirmations)
assertArgs(t, args, 2)
})`
$DIR/core/chains/evm/logpoller/parser_test.go: `.NewInt(1)`
$DIR/core/chains/evm/logpoller/parser_test.go: `.buildQuery(chainID, expressions, limiter)`
$DIR/core/chains/evm/logpoller/parser_test.go: `.Run("query for event by word", func(t *testing.T) {
t.Parallel()
wordFilter := NewEventByWordFilter(common.HexToHash("0x42"), 8, []primitives.ValueComparator{
{Value: "", Operator: primitives.Gt},
})
parser := &pgDSLParser{}
chainID := big.NewInt(1)
expressions := []query.Expression{wordFilter}
limiter := query.LimitAndSort{}
result, args, err := parser.buildQuery(chainID, expressions, limiter)
expected := "SELECT evm.logs.* " +
"FROM evm.logs " +
"WHERE evm_chain_id = :evm_chain_id " +
"AND substring(data from 32*:word_index_0+1 for 32) > :word_value_0"
require.NoError(t, err)
assert.Equal(t, expected, result)
assertArgs(t, args, 3)
})`
$DIR/core/chains/evm/logpoller/parser_test.go: `.HexToHash("0x42")`
$DIR/core/chains/evm/logpoller/parser_test.go: `.NewInt(1)`
$DIR/core/chains/evm/logpoller/parser_test.go: `.buildQuery(chainID, expressions, limiter)`
$DIR/core/chains/evm/logpoller/parser_test.go: `.Run("query for event topic", func(t *testing.T) {
t.Parallel()
topicFilter := NewEventByTopicFilter(2, []primitives.ValueComparator{
{Value: "a", Operator: primitives.Gt},
{Value: "b", Operator: primitives.Lt},
})
parser := &pgDSLParser{}
chainID := big.NewInt(1)
expressions := []query.Expression{topicFilter}
limiter := query.LimitAndSort{}
result, args, err := parser.buildQuery(chainID, expressions, limiter)
expected := "SELECT evm.logs.* " +
"FROM evm.logs " +
"WHERE evm_chain_id = :evm_chain_id " +
"AND topics[:topic_index_0] > :topic_value_0 AND topics[:topic_index_0] < :topic_value_1"
require.NoError(t, err)
assert.Equal(t, expected, result)
assertArgs(t, args, 4)
})`
$DIR/core/chains/evm/logpoller/parser_test.go: `.NewInt(1)`
$DIR/core/chains/evm/logpoller/parser_test.go: `.buildQuery(chainID, expressions, limiter)`
$DIR/core/chains/evm/logpoller/parser_test.go: `.Run("nested query", func(t *testing.T) {
t.Parallel()
parser := &pgDSLParser{}
chainID := big.NewInt(1)
expressions := []query.Expression{
{BoolExpression: query.BoolExpression{
Expressions: []query.Expression{
query.Timestamp(10, primitives.Gte),
{BoolExpression: query.BoolExpression{
Expressions: []query.Expression{
query.TxHash(common.HexToHash("0x84").Hex()),
query.Confidence(primitives.Unconfirmed),
},
BoolOperator: query.OR,
}},
},
BoolOperator: query.AND,
}},
}
limiter := query.LimitAndSort{}
result, args, err := parser.buildQuery(chainID, expressions, limiter)
expected := "SELECT evm.logs.* " +
"FROM evm.logs " +
"WHERE evm_chain_id = :evm_chain_id " +
"AND (block_timestamp >= :block_timestamp_0 " +
"AND (tx_hash = :tx_hash_0 " +
"OR block_number <= (SELECT greatest(block_number - :confs_0, 0) FROM evm.log_poller_blocks WHERE evm_chain_id = :evm_chain_id ORDER BY block_number DESC LIMIT 1)))"
require.NoError(t, err)
assert.Equal(t, expected, result)
assertArgs(t, args, 4)
})`
$DIR/core/chains/evm/logpoller/parser_test.go: `.NewInt(1)`
$DIR/core/chains/evm/logpoller/parser_test.go: `.Timestamp(10, primitives.Gte)`
$DIR/core/chains/evm/logpoller/parser_test.go: `.TxHash(common.HexToHash("0x84").Hex())`
$DIR/core/chains/evm/logpoller/parser_test.go: `.HexToHash("0x84")`
$DIR/core/chains/evm/logpoller/parser_test.go: `.Hex()`
$DIR/core/chains/evm/logpoller/parser_test.go: `.Confidence(primitives.Unconfirmed)`
$DIR/core/chains/evm/logpoller/parser_test.go: `.buildQuery(chainID, expressions, limiter)`
$DIR/core/chains/evm/logpoller/parser_test.go: `.HexToHash("0x42")`
$DIR/core/chains/evm/logpoller/parser_test.go: `.NewInt(1)`
$DIR/core/chains/evm/logpoller/parser_test.go: `.Timestamp(10, primitives.Eq)`
$DIR/core/chains/evm/logpoller/parser_test.go: `.TxHash(common.HexToHash("0x84").Hex())`
$DIR/core/chains/evm/logpoller/parser_test.go: `.HexToHash("0x84")`
$DIR/core/chains/evm/logpoller/parser_test.go: `.Hex()`
$DIR/core/chains/evm/logpoller/parser_test.go: `.Confidence(primitives.Unconfirmed)`
$DIR/core/chains/evm/logpoller/parser_test.go: `.buildQuery(chainID, expressions, limiter)`
$DIR/core/chains/evm/logpoller/query_test.go: `t.Run(tt.name, func(t *testing.T) {
args, err := tt.queryArgs.toArgs()
if tt.wantErr {
require.Error(t, err)
} else {
require.NoError(t, err)
require.Equal(t, tt.want, args)
}
})`
$DIR/core/chains/evm/logpoller/query_test.go: `.NewInt(20)`
$DIR/core/chains/evm/logpoller/query_test.go: `.withAddress(utils.ZeroAddress)`
$DIR/core/chains/evm/logpoller/query_test.go: `.NewI(20)`
$DIR/core/chains/evm/logpoller/query_test.go: `.NewInt(20)`
$DIR/core/chains/evm/logpoller/query_test.go: `.withTopicIndex(0)`
$DIR/core/chains/evm/logpoller/query_test.go: `.withField("arg", "value")`
$DIR/core/chains/evm/logpoller/query_test.go: `.withField("hash", common.Hash{})`
$DIR/core/chains/evm/logpoller/query_test.go: `.withEventSigArray([]common.Hash{{}, {}})`
$DIR/core/chains/evm/logpoller/query_test.go: `.withTopicIndex(2)`
$DIR/core/chains/evm/logpoller/query_test.go: `.Run(tt.name, func(t *testing.T) {
args, err := tt.queryArgs.toArgs()
if tt.wantErr {
require.Error(t, err)
} else {
require.NoError(t, err)
require.Equal(t, tt.want, args)
}
})`
$DIR/core/chains/evm/logpoller/query_test.go: `.queryArgs.toArgs()`
$DIR/core/chains/evm/monitor/balance_test.go: `t.Run("updates balance from nil for multiple keys", func(t *testing.T) {
ethKeyStore := ksmocks.NewEth(t)
k0Addr := testutils.NewAddress()
k1Addr := testutils.NewAddress()
ethKeyStore.On("EnabledAddressesForChain", mock.Anything, mock.Anything).
Return([]common.Address{k0Addr, k1Addr}, nil)
ethClient := newEthClientMock(t)
bm := monitor.NewBalanceMonitor(ethClient, ethKeyStore, logger.Test(t))
k0bal := big.NewInt(42)
k1bal := big.NewInt(43)
assert.Nil(t, bm.GetEthBalance(k0Addr))
assert.Nil(t, bm.GetEthBalance(k1Addr))
ethClient.On("BalanceAt", mock.Anything, k0Addr, nilBigInt).Once().Return(k0bal, nil)
ethClient.On("BalanceAt", mock.Anything, k1Addr, nilBigInt).Once().Return(k1bal, nil)
servicetest.RunHealthy(t, bm)
gomega.NewWithT(t).Eventually(func() *big.Int {
return bm.GetEthBalance(k0Addr).ToInt()
}).Should(gomega.Equal(k0bal))
gomega.NewWithT(t).Eventually(func() *big.Int {
return bm.GetEthBalance(k1Addr).ToInt()
}).Should(gomega.Equal(k1bal))
})`
$DIR/core/chains/evm/monitor/balance_test.go: `ethKeyStore.On("EnabledAddressesForChain", mock.Anything, mock.Anything).
Return([]common.Address{k0Addr, k1Addr}, nil)`
$DIR/core/chains/evm/monitor/balance_test.go: `ethClient.On("BalanceAt", mock.Anything, k0Addr, nilBigInt).Once().Return(k0bal, nil)`
$DIR/core/chains/evm/monitor/balance_test.go: `ethClient.On("BalanceAt", mock.Anything, k1Addr, nilBigInt).Once().Return(k1bal, nil)`
$DIR/core/chains/evm/monitor/balance_test.go: `servicetest.RunHealthy(t, bm)`
$DIR/core/chains/evm/monitor/balance_test.go: `gomega.NewWithT(t).Eventually(func() *big.Int {
return bm.GetEthBalance(k0Addr).ToInt()
}).Should(gomega.Equal(k0bal))`
$DIR/core/chains/evm/monitor/balance_test.go: `gomega.NewWithT(t).Eventually(func() *big.Int {
return bm.GetEthBalance(k1Addr).ToInt()
}).Should(gomega.Equal(k1bal))`
$DIR/core/chains/evm/monitor/balance_test.go: `t.Run("handles nil head", func(t *testing.T) {
ethKeyStore := ksmocks.NewEth(t)
k0Addr := testutils.NewAddress()
ethKeyStore.On("EnabledAddressesForChain", mock.Anything, mock.Anything).
Return([]common.Address{k0Addr}, nil)
ethClient := newEthClientMock(t)
bm := monitor.NewBalanceMonitor(ethClient, ethKeyStore, logger.Test(t))
k0bal := big.NewInt(42)
ethClient.On("BalanceAt", mock.Anything, k0Addr, nilBigInt).Once().Return(k0bal, nil)
servicetest.RunHealthy(t, bm)
gomega.NewWithT(t).Eventually(func() *big.Int {
return bm.GetEthBalance(k0Addr).ToInt()
}).Should(gomega.Equal(k0bal))
})`
$DIR/core/chains/evm/monitor/balance_test.go: `ethKeyStore.On("EnabledAddressesForChain", mock.Anything, mock.Anything).
Return([]common.Address{k0Addr}, nil)`
$DIR/core/chains/evm/monitor/balance_test.go: `ethClient.On("BalanceAt", mock.Anything, k0Addr, nilBigInt).Once().Return(k0bal, nil)`
$DIR/core/chains/evm/monitor/balance_test.go: `servicetest.RunHealthy(t, bm)`
$DIR/core/chains/evm/monitor/balance_test.go: `gomega.NewWithT(t).Eventually(func() *big.Int {
return bm.GetEthBalance(k0Addr).ToInt()
}).Should(gomega.Equal(k0bal))`
$DIR/core/chains/evm/monitor/balance_test.go: `t.Run("cancelled context", func(t *testing.T) {
ethKeyStore := ksmocks.NewEth(t)
k0Addr := testutils.NewAddress()
ethKeyStore.On("EnabledAddressesForChain", mock.Anything, mock.Anything).
Return([]common.Address{k0Addr}, nil)
ethClient := newEthClientMock(t)
bm := monitor.NewBalanceMonitor(ethClient, ethKeyStore, logger.Test(t))
ctxCancelledAwaiter := testutils.NewAwaiter()
ethClient.On("BalanceAt", mock.Anything, k0Addr, nilBigInt).Once().Run(func(args mock.Arguments) {
ctx := args.Get(0).(context.Context)
select {
case <-time.After(tests.WaitTimeout(t)):
case <-ctx.Done():
ctxCancelledAwaiter.ItHappened()
}
}).Return(nil, nil)
ctx, cancel := context.WithCancel(tests.Context(t))
go func() {
<-time.After(time.Second)
cancel()
}()
assert.NoError(t, bm.Start(ctx))
ctxCancelledAwaiter.AwaitOrFail(t)
})`
$DIR/core/chains/evm/monitor/balance_test.go: `ethKeyStore.On("EnabledAddressesForChain", mock.Anything, mock.Anything).
Return([]common.Address{k0Addr}, nil)`
$DIR/core/chains/evm/monitor/balance_test.go: `ethClient.On("BalanceAt", mock.Anything, k0Addr, nilBigInt).Once().Run(func(args mock.Arguments) {
ctx := args.Get(0).(context.Context)
select {
case <-time.After(tests.WaitTimeout(t)):
case <-ctx.Done():
ctxCancelledAwaiter.ItHappened()
}
}).Return(nil, nil)`
$DIR/core/chains/evm/monitor/balance_test.go: `ctxCancelledAwaiter.ItHappened()`
$DIR/core/chains/evm/monitor/balance_test.go: `<-time.After(time.Second)`
$DIR/core/chains/evm/monitor/balance_test.go: `cancel()`
$DIR/core/chains/evm/monitor/balance_test.go: `ctxCancelledAwaiter.AwaitOrFail(t)`
$DIR/core/chains/evm/monitor/balance_test.go: `ethKeyStore.On("EnabledAddressesForChain", mock.Anything, mock.Anything).
Return([]common.Address{k0Addr}, nil)`
$DIR/core/chains/evm/monitor/balance_test.go: `ethClient.On("BalanceAt", mock.Anything, k0Addr, nilBigInt).
Once().
Return(nil, pkgerrors.New("a little easter egg for the 4chan link marines error"))`
$DIR/core/chains/evm/monitor/balance_test.go: `servicetest.RunHealthy(t, bm)`
$DIR/core/chains/evm/monitor/balance_test.go: `gomega.NewWithT(t).Consistently(func() *big.Int {
return bm.GetEthBalance(k0Addr).ToInt()
}).Should(gomega.BeNil())`
$DIR/core/chains/evm/monitor/balance_test.go: `ethKeyStore.On("EnabledAddressesForChain", mock.Anything, mock.Anything).
Return([]common.Address{k0Addr, k1Addr}, nil)`
$DIR/core/chains/evm/monitor/balance_test.go: `k1bal.SetString("19223372036854776000", 10)`
$DIR/core/chains/evm/monitor/balance_test.go: `ethClient.On("BalanceAt", mock.Anything, k0Addr, nilBigInt).Once().Return(k0bal, nil)`
$DIR/core/chains/evm/monitor/balance_test.go: `ethClient.On("BalanceAt", mock.Anything, k1Addr, nilBigInt).Once().Return(k1bal, nil)`
$DIR/core/chains/evm/monitor/balance_test.go: `servicetest.RunHealthy(t, bm)`
$DIR/core/chains/evm/monitor/balance_test.go: `ethClient.On("BalanceAt", mock.Anything, k0Addr, nilBigInt).Once().Return(k0bal, nil)`
$DIR/core/chains/evm/monitor/balance_test.go: `ethClient.On("BalanceAt", mock.Anything, k1Addr, nilBigInt).Once().Return(k1bal, nil)`
$DIR/core/chains/evm/monitor/balance_test.go: `bm.OnNewLongestChain(tests.Context(t), head)`
$DIR/core/chains/evm/monitor/balance_test.go: `<-bm.WorkDone()`
$DIR/core/chains/evm/monitor/balance_test.go: `head = testutils.Head(1)`
$DIR/core/chains/evm/monitor/balance_test.go: `ethClient.On("BalanceAt", mock.Anything, k0Addr, nilBigInt).Once().Return(k0bal2, nil)`
$DIR/core/chains/evm/monitor/balance_test.go: `ethClient.On("BalanceAt", mock.Anything, k1Addr, nilBigInt).Once().Return(k1bal2, nil)`
$DIR/core/chains/evm/monitor/balance_test.go: `bm.OnNewLongestChain(tests.Context(t), head)`
$DIR/core/chains/evm/monitor/balance_test.go: `<-bm.WorkDone()`
$DIR/core/chains/evm/monitor/balance_test.go: `ethKeyStore.On("EnabledAddressesForChain", mock.Anything, mock.Anything).
Return([]common.Address{testutils.NewAddress()}, nil)`
$DIR/core/chains/evm/monitor/balance_test.go: `ethClient.On("BalanceAt", mock.Anything, mock.Anything, mock.Anything).
Once().
Return(big.NewInt(1), nil)`
$DIR/core/chains/evm/monitor/balance_test.go: `servicetest.RunHealthy(t, bm)`
$DIR/core/chains/evm/monitor/balance_test.go: `ethClient.On("BalanceAt", mock.Anything, mock.Anything, mock.Anything).
WaitUntil(mockUnblocker).
Once().
Return(big.NewInt(42), nil)`
$DIR/core/chains/evm/monitor/balance_test.go: `ethClient.On("BalanceAt", mock.Anything, mock.Anything, mock.Anything).
Run(func(mock.Arguments) { callCount.Add(1) }).
Maybe().
Return(big.NewInt(42), nil)`
$DIR/core/chains/evm/monitor/balance_test.go: `callCount.Add(1)`
$DIR/core/chains/evm/monitor/balance_test.go: `bm.OnNewLongestChain(tests.Context(t), head)`
$DIR/core/chains/evm/monitor/balance_test.go: `callbackOrTimeout(t, "FewerRPCCallsWhenBehind unblock BalanceAt", func() {
mockUnblocker <- time.Time{}
})`
$DIR/core/chains/evm/monitor/balance_test.go: `mockUnblocker <- time.Time{}`
$DIR/core/chains/evm/monitor/balance_test.go: `t.Run(test.name, func(t *testing.T) {
eth := assets.NewEth(0)
eth.SetString(test.input, 10)
float, err := monitor.ApproximateFloat64(eth)
require.NoError(t, err)
require.Equal(t, test.want, float)
})`
$DIR/core/chains/evm/monitor/balance_test.go: `eth.SetString(test.input, 10)`
$DIR/core/chains/evm/monitor/balance_test.go: `.Run("updates balance from nil for multiple keys", func(t *testing.T) {
ethKeyStore := ksmocks.NewEth(t)
k0Addr := testutils.NewAddress()
k1Addr := testutils.NewAddress()
ethKeyStore.On("EnabledAddressesForChain", mock.Anything, mock.Anything).
Return([]common.Address{k0Addr, k1Addr}, nil)
ethClient := newEthClientMock(t)
bm := monitor.NewBalanceMonitor(ethClient, ethKeyStore, logger.Test(t))
k0bal := big.NewInt(42)
k1bal := big.NewInt(43)
assert.Nil(t, bm.GetEthBalance(k0Addr))
assert.Nil(t, bm.GetEthBalance(k1Addr))
ethClient.On("BalanceAt", mock.Anything, k0Addr, nilBigInt).Once().Return(k0bal, nil)
ethClient.On("BalanceAt", mock.Anything, k1Addr, nilBigInt).Once().Return(k1bal, nil)
servicetest.RunHealthy(t, bm)
gomega.NewWithT(t).Eventually(func() *big.Int {
return bm.GetEthBalance(k0Addr).ToInt()
}).Should(gomega.Equal(k0bal))
gomega.NewWithT(t).Eventually(func() *big.Int {
return bm.GetEthBalance(k1Addr).ToInt()
}).Should(gomega.Equal(k1bal))
})`
$DIR/core/chains/evm/monitor/balance_test.go: `.NewEth(t)`
$DIR/core/chains/evm/monitor/balance_test.go: `.NewAddress()`
$DIR/core/chains/evm/monitor/balance_test.go: `.NewAddress()`
$DIR/core/chains/evm/monitor/balance_test.go: `.On("EnabledAddressesForChain", mock.Anything, mock.Anything)`
$DIR/core/chains/evm/monitor/balance_test.go: `.
Return([]common.Address{k0Addr, k1Addr}, nil)`
$DIR/core/chains/evm/monitor/balance_test.go: `.NewBalanceMonitor(ethClient, ethKeyStore, logger.Test(t))`
$DIR/core/chains/evm/monitor/balance_test.go: `.Test(t)`
$DIR/core/chains/evm/monitor/balance_test.go: `.NewInt(42)`
$DIR/core/chains/evm/monitor/balance_test.go: `.NewInt(43)`
$DIR/core/chains/evm/monitor/balance_test.go: `.On("BalanceAt", mock.Anything, k0Addr, nilBigInt)`
$DIR/core/chains/evm/monitor/balance_test.go: `.Once()`
$DIR/core/chains/evm/monitor/balance_test.go: `.Return(k0bal, nil)`
$DIR/core/chains/evm/monitor/balance_test.go: `.On("BalanceAt", mock.Anything, k1Addr, nilBigInt)`
$DIR/core/chains/evm/monitor/balance_test.go: `.Once()`
$DIR/core/chains/evm/monitor/balance_test.go: `.Return(k1bal, nil)`
$DIR/core/chains/evm/monitor/balance_test.go: `.RunHealthy(t, bm)`
$DIR/core/chains/evm/monitor/balance_test.go: `.NewWithT(t)`
$DIR/core/chains/evm/monitor/balance_test.go: `.Eventually(func() *big.Int {
return bm.GetEthBalance(k0Addr).ToInt()
})`
$DIR/core/chains/evm/monitor/balance_test.go: `.GetEthBalance(k0Addr)`
$DIR/core/chains/evm/monitor/balance_test.go: `.ToInt()`
$DIR/core/chains/evm/monitor/balance_test.go: `.Should(gomega.Equal(k0bal))`
$DIR/core/chains/evm/monitor/balance_test.go: `.Equal(k0bal)`
$DIR/core/chains/evm/monitor/balance_test.go: `.NewWithT(t)`
$DIR/core/chains/evm/monitor/balance_test.go: `.Eventually(func() *big.Int {
return bm.GetEthBalance(k1Addr).ToInt()
})`
$DIR/core/chains/evm/monitor/balance_test.go: `.GetEthBalance(k1Addr)`
$DIR/core/chains/evm/monitor/balance_test.go: `.ToInt()`
$DIR/core/chains/evm/monitor/balance_test.go: `.Should(gomega.Equal(k1bal))`
$DIR/core/chains/evm/monitor/balance_test.go: `.Equal(k1bal)`
$DIR/core/chains/evm/monitor/balance_test.go: `.Run("handles nil head", func(t *testing.T) {
ethKeyStore := ksmocks.NewEth(t)
k0Addr := testutils.NewAddress()
ethKeyStore.On("EnabledAddressesForChain", mock.Anything, mock.Anything).
Return([]common.Address{k0Addr}, nil)
ethClient := newEthClientMock(t)
bm := monitor.NewBalanceMonitor(ethClient, ethKeyStore, logger.Test(t))
k0bal := big.NewInt(42)
ethClient.On("BalanceAt", mock.Anything, k0Addr, nilBigInt).Once().Return(k0bal, nil)
servicetest.RunHealthy(t, bm)
gomega.NewWithT(t).Eventually(func() *big.Int {
return bm.GetEthBalance(k0Addr).ToInt()
}).Should(gomega.Equal(k0bal))
})`
$DIR/core/chains/evm/monitor/balance_test.go: `.NewEth(t)`
$DIR/core/chains/evm/monitor/balance_test.go: `.NewAddress()`
$DIR/core/chains/evm/monitor/balance_test.go: `.On("EnabledAddressesForChain", mock.Anything, mock.Anything)`
$DIR/core/chains/evm/monitor/balance_test.go: `.
Return([]common.Address{k0Addr}, nil)`
$DIR/core/chains/evm/monitor/balance_test.go: `.NewBalanceMonitor(ethClient, ethKeyStore, logger.Test(t))`
$DIR/core/chains/evm/monitor/balance_test.go: `.Test(t)`
$DIR/core/chains/evm/monitor/balance_test.go: `.NewInt(42)`
$DIR/core/chains/evm/monitor/balance_test.go: `.On("BalanceAt", mock.Anything, k0Addr, nilBigInt)`
$DIR/core/chains/evm/monitor/balance_test.go: `.Once()`
$DIR/core/chains/evm/monitor/balance_test.go: `.Return(k0bal, nil)`
$DIR/core/chains/evm/monitor/balance_test.go: `.RunHealthy(t, bm)`
$DIR/core/chains/evm/monitor/balance_test.go: `.NewWithT(t)`
$DIR/core/chains/evm/monitor/balance_test.go: `.Eventually(func() *big.Int {
return bm.GetEthBalance(k0Addr).ToInt()
})`
$DIR/core/chains/evm/monitor/balance_test.go: `.GetEthBalance(k0Addr)`
$DIR/core/chains/evm/monitor/balance_test.go: `.ToInt()`
$DIR/core/chains/evm/monitor/balance_test.go: `.Should(gomega.Equal(k0bal))`
$DIR/core/chains/evm/monitor/balance_test.go: `.Equal(k0bal)`
$DIR/core/chains/evm/monitor/balance_test.go: `.Run("cancelled context", func(t *testing.T) {
ethKeyStore := ksmocks.NewEth(t)
k0Addr := testutils.NewAddress()
ethKeyStore.On("EnabledAddressesForChain", mock.Anything, mock.Anything).
Return([]common.Address{k0Addr}, nil)
ethClient := newEthClientMock(t)
bm := monitor.NewBalanceMonitor(ethClient, ethKeyStore, logger.Test(t))
ctxCancelledAwaiter := testutils.NewAwaiter()
ethClient.On("BalanceAt", mock.Anything, k0Addr, nilBigInt).Once().Run(func(args mock.Arguments) {
ctx := args.Get(0).(context.Context)
select {
case <-time.After(tests.WaitTimeout(t)):
case <-ctx.Done():
ctxCancelledAwaiter.ItHappened()
}
}).Return(nil, nil)
ctx, cancel := context.WithCancel(tests.Context(t))
go func() {
<-time.After(time.Second)
cancel()
}()
assert.NoError(t, bm.Start(ctx))
ctxCancelledAwaiter.AwaitOrFail(t)
})`
$DIR/core/chains/evm/monitor/balance_test.go: `.NewEth(t)`
$DIR/core/chains/evm/monitor/balance_test.go: `.NewAddress()`
$DIR/core/chains/evm/monitor/balance_test.go: `.On("EnabledAddressesForChain", mock.Anything, mock.Anything)`
$DIR/core/chains/evm/monitor/balance_test.go: `.
Return([]common.Address{k0Addr}, nil)`
$DIR/core/chains/evm/monitor/balance_test.go: `.NewBalanceMonitor(ethClient, ethKeyStore, logger.Test(t))`
$DIR/core/chains/evm/monitor/balance_test.go: `.Test(t)`
$DIR/core/chains/evm/monitor/balance_test.go: `.NewAwaiter()`
$DIR/core/chains/evm/monitor/balance_test.go: `.On("BalanceAt", mock.Anything, k0Addr, nilBigInt)`
$DIR/core/chains/evm/monitor/balance_test.go: `.Once()`
$DIR/core/chains/evm/monitor/balance_test.go: `.Run(func(args mock.Arguments) {
ctx := args.Get(0).(context.Context)
select {
case <-time.After(tests.WaitTimeout(t)):
case <-ctx.Done():
ctxCancelledAwaiter.ItHappened()
}
})`
$DIR/core/chains/evm/monitor/balance_test.go: `.Get(0)`
$DIR/core/chains/evm/monitor/balance_test.go: `.After(tests.WaitTimeout(t))`
$DIR/core/chains/evm/monitor/balance_test.go: `.WaitTimeout(t)`
$DIR/core/chains/evm/monitor/balance_test.go: `.Done()`
$DIR/core/chains/evm/monitor/balance_test.go: `.ItHappened()`
$DIR/core/chains/evm/monitor/balance_test.go: `.Return(nil, nil)`
$DIR/core/chains/evm/monitor/balance_test.go: `.WithCancel(tests.Context(t))`
$DIR/core/chains/evm/monitor/balance_test.go: `.Context(t)`
$DIR/core/chains/evm/monitor/balance_test.go: `.After(time.Second)`
$DIR/core/chains/evm/monitor/balance_test.go: `.AwaitOrFail(t)`
$DIR/core/chains/evm/monitor/balance_test.go: `.NewEth(t)`
$DIR/core/chains/evm/monitor/balance_test.go: `.NewAddress()`
$DIR/core/chains/evm/monitor/balance_test.go: `.On("EnabledAddressesForChain", mock.Anything, mock.Anything)`
$DIR/core/chains/evm/monitor/balance_test.go: `.
Return([]common.Address{k0Addr}, nil)`
$DIR/core/chains/evm/monitor/balance_test.go: `.NewBalanceMonitor(ethClient, ethKeyStore, logger.Test(t))`
$DIR/core/chains/evm/monitor/balance_test.go: `.Test(t)`
$DIR/core/chains/evm/monitor/balance_test.go: `.On("BalanceAt", mock.Anything, k0Addr, nilBigInt)`
$DIR/core/chains/evm/monitor/balance_test.go: `.
Once()`
$DIR/core/chains/evm/monitor/balance_test.go: `.
Return(nil, pkgerrors.New("a little easter egg for the 4chan link marines error"))`
$DIR/core/chains/evm/monitor/balance_test.go: `.New("a little easter egg for the 4chan link marines error")`
$DIR/core/chains/evm/monitor/balance_test.go: `.RunHealthy(t, bm)`
$DIR/core/chains/evm/monitor/balance_test.go: `.NewWithT(t)`
$DIR/core/chains/evm/monitor/balance_test.go: `.Consistently(func() *big.Int {
return bm.GetEthBalance(k0Addr).ToInt()
})`
$DIR/core/chains/evm/monitor/balance_test.go: `.GetEthBalance(k0Addr)`
$DIR/core/chains/evm/monitor/balance_test.go: `.ToInt()`
$DIR/core/chains/evm/monitor/balance_test.go: `.Should(gomega.BeNil())`
$DIR/core/chains/evm/monitor/balance_test.go: `.BeNil()`
$DIR/core/chains/evm/monitor/balance_test.go: `.NewEth(t)`
$DIR/core/chains/evm/monitor/balance_test.go: `.NewAddress()`
$DIR/core/chains/evm/monitor/balance_test.go: `.NewAddress()`
$DIR/core/chains/evm/monitor/balance_test.go: `.On("EnabledAddressesForChain", mock.Anything, mock.Anything)`
$DIR/core/chains/evm/monitor/balance_test.go: `.
Return([]common.Address{k0Addr, k1Addr}, nil)`
$DIR/core/chains/evm/monitor/balance_test.go: `.NewBalanceMonitor(ethClient, ethKeyStore, logger.Test(t))`
$DIR/core/chains/evm/monitor/balance_test.go: `.Test(t)`
$DIR/core/chains/evm/monitor/balance_test.go: `.NewInt(42)`
$DIR/core/chains/evm/monitor/balance_test.go: `.NewInt(0)`
$DIR/core/chains/evm/monitor/balance_test.go: `.SetString("19223372036854776000", 10)`
$DIR/core/chains/evm/monitor/balance_test.go: `.Head(0)`
$DIR/core/chains/evm/monitor/balance_test.go: `.On("BalanceAt", mock.Anything, k0Addr, nilBigInt)`
$DIR/core/chains/evm/monitor/balance_test.go: `.Once()`
$DIR/core/chains/evm/monitor/balance_test.go: `.Return(k0bal, nil)`
$DIR/core/chains/evm/monitor/balance_test.go: `.On("BalanceAt", mock.Anything, k1Addr, nilBigInt)`
$DIR/core/chains/evm/monitor/balance_test.go: `.Once()`
$DIR/core/chains/evm/monitor/balance_test.go: `.Return(k1bal, nil)`
$DIR/core/chains/evm/monitor/balance_test.go: `.RunHealthy(t, bm)`
$DIR/core/chains/evm/monitor/balance_test.go: `.On("BalanceAt", mock.Anything, k0Addr, nilBigInt)`
$DIR/core/chains/evm/monitor/balance_test.go: `.Once()`
$DIR/core/chains/evm/monitor/balance_test.go: `.Return(k0bal, nil)`
$DIR/core/chains/evm/monitor/balance_test.go: `.On("BalanceAt", mock.Anything, k1Addr, nilBigInt)`
$DIR/core/chains/evm/monitor/balance_test.go: `.Once()`
$DIR/core/chains/evm/monitor/balance_test.go: `.Return(k1bal, nil)`
$DIR/core/chains/evm/monitor/balance_test.go: `.OnNewLongestChain(tests.Context(t), head)`
$DIR/core/chains/evm/monitor/balance_test.go: `.Context(t)`
$DIR/core/chains/evm/monitor/balance_test.go: `.WorkDone()`
$DIR/core/chains/evm/monitor/balance_test.go: `.NewInt(142)`
$DIR/core/chains/evm/monitor/balance_test.go: `.NewInt(142)`
$DIR/core/chains/evm/monitor/balance_test.go: `.Head(1)`
$DIR/core/chains/evm/monitor/balance_test.go: `.On("BalanceAt", mock.Anything, k0Addr, nilBigInt)`
$DIR/core/chains/evm/monitor/balance_test.go: `.Once()`
$DIR/core/chains/evm/monitor/balance_test.go: `.Return(k0bal2, nil)`
$DIR/core/chains/evm/monitor/balance_test.go: `.On("BalanceAt", mock.Anything, k1Addr, nilBigInt)`
$DIR/core/chains/evm/monitor/balance_test.go: `.Once()`
$DIR/core/chains/evm/monitor/balance_test.go: `.Return(k1bal2, nil)`
$DIR/core/chains/evm/monitor/balance_test.go: `.OnNewLongestChain(tests.Context(t), head)`
$DIR/core/chains/evm/monitor/balance_test.go: `.Context(t)`
$DIR/core/chains/evm/monitor/balance_test.go: `.WorkDone()`
$DIR/core/chains/evm/monitor/balance_test.go: `.NewEth(t)`
$DIR/core/chains/evm/monitor/balance_test.go: `.On("EnabledAddressesForChain", mock.Anything, mock.Anything)`
$DIR/core/chains/evm/monitor/balance_test.go: `.
Return([]common.Address{testutils.NewAddress()}, nil)`
$DIR/core/chains/evm/monitor/balance_test.go: `.NewAddress()`
$DIR/core/chains/evm/monitor/balance_test.go: `.NewBalanceMonitor(ethClient, ethKeyStore, logger.Test(t))`
$DIR/core/chains/evm/monitor/balance_test.go: `.Test(t)`
$DIR/core/chains/evm/monitor/balance_test.go: `.On("BalanceAt", mock.Anything, mock.Anything, mock.Anything)`
$DIR/core/chains/evm/monitor/balance_test.go: `.
Once()`
$DIR/core/chains/evm/monitor/balance_test.go: `.
Return(big.NewInt(1), nil)`
$DIR/core/chains/evm/monitor/balance_test.go: `.NewInt(1)`
$DIR/core/chains/evm/monitor/balance_test.go: `.RunHealthy(t, bm)`
$DIR/core/chains/evm/monitor/balance_test.go: `.Head(0)`
$DIR/core/chains/evm/monitor/balance_test.go: `.On("BalanceAt", mock.Anything, mock.Anything, mock.Anything)`
$DIR/core/chains/evm/monitor/balance_test.go: `.
WaitUntil(mockUnblocker)`
$DIR/core/chains/evm/monitor/balance_test.go: `.
Once()`
$DIR/core/chains/evm/monitor/balance_test.go: `.
Return(big.NewInt(42), nil)`
$DIR/core/chains/evm/monitor/balance_test.go: `.NewInt(42)`
$DIR/core/chains/evm/monitor/balance_test.go: `.On("BalanceAt", mock.Anything, mock.Anything, mock.Anything)`
$DIR/core/chains/evm/monitor/balance_test.go: `.
Run(func(mock.Arguments) { callCount.Add(1) })`
$DIR/core/chains/evm/monitor/balance_test.go: `.Add(1)`
$DIR/core/chains/evm/monitor/balance_test.go: `.
Maybe()`
$DIR/core/chains/evm/monitor/balance_test.go: `.
Return(big.NewInt(42), nil)`
$DIR/core/chains/evm/monitor/balance_test.go: `.NewInt(42)`
$DIR/core/chains/evm/monitor/balance_test.go: `.OnNewLongestChain(tests.Context(t), head)`
$DIR/core/chains/evm/monitor/balance_test.go: `.Context(t)`
$DIR/core/chains/evm/monitor/balance_test.go: `.Load()`
$DIR/core/chains/evm/monitor/balance_test.go: `.Run(test.name, func(t *testing.T) {
eth := assets.NewEth(0)
eth.SetString(test.input, 10)
float, err := monitor.ApproximateFloat64(eth)
require.NoError(t, err)
require.Equal(t, test.want, float)
})`
$DIR/core/chains/evm/monitor/balance_test.go: `.NewEth(0)`
$DIR/core/chains/evm/monitor/balance_test.go: `.SetString(test.input, 10)`
$DIR/core/chains/evm/monitor/balance_test.go: `.ApproximateFloat64(eth)`
$DIR/core/chains/evm/testutils/config_test.go: `c.FinalityDepth = &finalityDepth`
$DIR/core/chains/evm/testutils/config_test.go: `.EVM()`
$DIR/core/chains/evm/testutils/config_test.go: `.GasEstimator()`
$DIR/core/chains/evm/testutils/config_test.go: `.EIP1559DynamicFees()`
$DIR/core/chains/evm/txmgr/attempts_test.go: `t.Run("returns correct hash for non-okex chains", func(t *testing.T) {
chainID := big.NewInt(1)
kst := ksmocks.NewEth(t)
kst.On("SignTx", mock.Anything, to, tx, chainID).Return(tx, nil).Once()
cks := txmgr.NewEvmTxAttemptBuilder(*chainID, newFeeConfig(), kst, nil)
hash, rawBytes, err := cks.SignTx(tests.Context(t), addr, tx)
require.NoError(t, err)
require.NotNil(t, rawBytes)
require.Equal(t, "0xdd68f554373fdea7ec6713a6e437e7646465d553a6aa0b43233093366cc87ef0", hash.String())
})`
$DIR/core/chains/evm/txmgr/attempts_test.go: `kst.On("SignTx", mock.Anything, to, tx, chainID).Return(tx, nil).Once()`
$DIR/core/chains/evm/txmgr/attempts_test.go: `t.Run("returns correct hash for okex chains", func(t *testing.T) {
chainID := big.NewInt(1)
kst := ksmocks.NewEth(t)
kst.On("SignTx", mock.Anything, to, tx, chainID).Return(tx, nil).Once()
cks := txmgr.NewEvmTxAttemptBuilder(*chainID, newFeeConfig(), kst, nil)
hash, rawBytes, err := cks.SignTx(tests.Context(t), addr, tx)
require.NoError(t, err)
require.NotNil(t, rawBytes)
require.Equal(t, "0xdd68f554373fdea7ec6713a6e437e7646465d553a6aa0b43233093366cc87ef0", hash.String())
})`
$DIR/core/chains/evm/txmgr/attempts_test.go: `kst.On("SignTx", mock.Anything, to, tx, chainID).Return(tx, nil).Once()`
$DIR/core/chains/evm/txmgr/attempts_test.go: `t.Run("can properly encoded and decode raw transaction for LegacyTx", func(t *testing.T) {
chainID := big.NewInt(1)
kst := ksmocks.NewEth(t)
kst.On("SignTx", mock.Anything, to, tx, chainID).Return(tx, nil).Once()
cks := txmgr.NewEvmTxAttemptBuilder(*chainID, newFeeConfig(), kst, nil)
_, rawBytes, err := cks.SignTx(tests.Context(t), addr, tx)
require.NoError(t, err)
require.NotNil(t, rawBytes)
require.Equal(t, "0xe42a82015681f294b921f7763960b296b9cbad586ff066a18d749724818e83010203808080", hexutil.Encode(rawBytes))
var decodedTx *gethtypes.Transaction
decodedTx, err = txmgr.GetGethSignedTx(rawBytes)
require.NoError(t, err)
require.Equal(t, tx.Hash(), decodedTx.Hash())
})`
$DIR/core/chains/evm/txmgr/attempts_test.go: `kst.On("SignTx", mock.Anything, to, tx, chainID).Return(tx, nil).Once()`
$DIR/core/chains/evm/txmgr/attempts_test.go: `decodedTx, err = txmgr.GetGethSignedTx(rawBytes)`
$DIR/core/chains/evm/txmgr/attempts_test.go: `kst.On("SignTx", mock.Anything, to, typedTx, chainID).Return(typedTx, nil).Once()`
$DIR/core/chains/evm/txmgr/attempts_test.go: `decodedTx, err = txmgr.GetGethSignedTx(rawBytes)`
$DIR/core/chains/evm/txmgr/attempts_test.go: `kst.On("SignTx", mock.Anything, addr, mock.Anything, big.NewInt(1)).Return(tx, nil)`
$DIR/core/chains/evm/txmgr/attempts_test.go: `t.Run("creates attempt with fields", func(t *testing.T) {
feeCfg := newFeeConfig()
feeCfg.priceMax = assets.GWei(200)
cks := txmgr.NewEvmTxAttemptBuilder(*big.NewInt(1), feeCfg, kst, nil)
dynamicFee := gas.DynamicFee{TipCap: assets.GWei(100), FeeCap: assets.GWei(200)}
a, _, err := cks.NewCustomTxAttempt(tests.Context(t), txmgr.Tx{Sequence: &n, FromAddress: addr}, gas.EvmFee{
DynamicTipCap: dynamicFee.TipCap,
DynamicFeeCap: dynamicFee.FeeCap,
}, 100, 0x2, lggr)
require.NoError(t, err)
assert.Equal(t, 100, int(a.ChainSpecificFeeLimit))
assert.Nil(t, a.TxFee.Legacy)
assert.NotNil(t, a.TxFee.DynamicTipCap)
assert.Equal(t, assets.GWei(100).String(), a.TxFee.DynamicTipCap.String())
assert.NotNil(t, a.TxFee.DynamicFeeCap)
assert.Equal(t, assets.GWei(200).String(), a.TxFee.DynamicFeeCap.String())
})`
$DIR/core/chains/evm/txmgr/attempts_test.go: `feeCfg.priceMax = assets.GWei(200)`
$DIR/core/chains/evm/txmgr/attempts_test.go: `c.GasEstimator.PriceMax = assets.GWei(4)`
$DIR/core/chains/evm/txmgr/attempts_test.go: `c.GasEstimator.PriceMin = assets.GWei(6)`
$DIR/core/chains/evm/txmgr/attempts_test.go: `c.GasEstimator.TipCapMin = assets.GWei(6)`
$DIR/core/chains/evm/txmgr/attempts_test.go: `t.Run(test.name, func(t *testing.T) {
cfg := testutils.NewTestChainScopedConfig(t, test.setCfg)
cks := txmgr.NewEvmTxAttemptBuilder(*big.NewInt(1), cfg.EVM().GasEstimator(), kst, nil)
dynamicFee := gas.DynamicFee{TipCap: test.tipcap, FeeCap: test.feecap}
_, _, err := cks.NewCustomTxAttempt(tests.Context(t), txmgr.Tx{Sequence: &n, FromAddress: addr}, gas.EvmFee{
DynamicTipCap: dynamicFee.TipCap,
DynamicFeeCap: dynamicFee.FeeCap,
}, 100, 0x2, lggr)
if test.expectError == "" {
require.NoError(t, err)
} else {
require.ErrorContains(t, err, test.expectError)
}
})`
$DIR/core/chains/evm/txmgr/attempts_test.go: `kst.On("SignTx", mock.Anything, addr, mock.Anything, big.NewInt(1)).Return(tx, nil)`
$DIR/core/chains/evm/txmgr/attempts_test.go: `gc.priceMin = assets.NewWeiI(10)`
$DIR/core/chains/evm/txmgr/attempts_test.go: `gc.priceMax = assets.NewWeiI(50)`
$DIR/core/chains/evm/txmgr/attempts_test.go: `t.Run("creates attempt with fields", func(t *testing.T) {
var n evmtypes.Nonce
a, _, err := cks.NewCustomTxAttempt(tests.Context(t), txmgr.Tx{Sequence: &n, FromAddress: addr}, gas.EvmFee{Legacy: assets.NewWeiI(25)}, 100, 0x0, lggr)
require.NoError(t, err)
assert.Equal(t, 100, int(a.ChainSpecificFeeLimit))
assert.NotNil(t, a.TxFee.Legacy)
assert.Equal(t, "25 wei", a.TxFee.Legacy.String())
assert.Nil(t, a.TxFee.DynamicTipCap)
assert.Nil(t, a.TxFee.DynamicFeeCap)
})`
$DIR/core/chains/evm/txmgr/attempts_test.go: `kst.On("SignTx", mock.Anything, addr, mock.Anything, big.NewInt(1)).Return(tx, nil)`
$DIR/core/chains/evm/txmgr/attempts_test.go: `gc.priceMin = assets.GWei(10)`
$DIR/core/chains/evm/txmgr/attempts_test.go: `gc.priceMax = assets.GWei(50)`
$DIR/core/chains/evm/txmgr/attempts_test.go: `gc.limitDefault = uint64(10)`
$DIR/core/chains/evm/txmgr/attempts_test.go: `est.On("BumpFee", mock.Anything, mock.Anything, mock.Anything, mock.Anything, mock.Anything).Return(bumpedFee, uint64(10_000), nil)`
$DIR/core/chains/evm/txmgr/attempts_test.go: `t.Run("creates legacy purge attempt with fields if previous attempt is legacy", func(t *testing.T) {
n := evmtypes.Nonce(0)
etx := txmgr.Tx{Sequence: &n, FromAddress: addr, EncodedPayload: []byte{1, 2, 3}}
prevAttempt, _, err := cks.NewCustomTxAttempt(ctx, etx, gas.EvmFee{Legacy: bumpedLegacy.Sub(assets.GWei(1))}, 100, 0x0, lggr)
require.NoError(t, err)
etx.TxAttempts = append(etx.TxAttempts, prevAttempt)
a, err := cks.NewPurgeTxAttempt(ctx, etx, lggr)
require.NoError(t, err)
// The fee limit is overridden with LimitDefault since purge attempts are just empty attempts
require.Equal(t, gc.limitDefault, a.ChainSpecificFeeLimit)
require.NotNil(t, a.TxFee.Legacy)
require.Equal(t, bumpedLegacy.String(), a.TxFee.Legacy.String())
require.Nil(t, a.TxFee.DynamicTipCap)
require.Nil(t, a.TxFee.DynamicFeeCap)
require.Equal(t, true, a.IsPurgeAttempt)
require.Equal(t, []byte{}, a.Tx.EncodedPayload)
require.Equal(t, *big.NewInt(0), a.Tx.Value)
})`
$DIR/core/chains/evm/txmgr/attempts_test.go: `etx.TxAttempts = append(etx.TxAttempts, prevAttempt)`
$DIR/core/chains/evm/txmgr/attempts_test.go: `t.Run("creates dynamic purge attempt with fields if previous attempt is dynamic", func(t *testing.T) {
n := evmtypes.Nonce(0)
etx := txmgr.Tx{Sequence: &n, FromAddress: addr, EncodedPayload: []byte{1, 2, 3}}
prevAttempt, _, err := cks.NewCustomTxAttempt(ctx, etx, gas.EvmFee{DynamicTipCap: bumpedDynamicTip.Sub(assets.GWei(1)), DynamicFeeCap: bumpedDynamicFee.Sub(assets.GWei(1))}, 100, 0x2, lggr)
require.NoError(t, err)
etx.TxAttempts = append(etx.TxAttempts, prevAttempt)
a, err := cks.NewPurgeTxAttempt(ctx, etx, lggr)
require.NoError(t, err)
// The fee limit is overridden with LimitDefault since purge attempts are just empty attempts
require.Equal(t, gc.limitDefault, a.ChainSpecificFeeLimit)
require.Nil(t, a.TxFee.Legacy)
require.NotNil(t, a.TxFee.DynamicTipCap)
require.NotNil(t, a.TxFee.DynamicFeeCap)
require.Equal(t, bumpedDynamicTip.String(), a.TxFee.DynamicTipCap.String())
require.Equal(t, bumpedDynamicFee.String(), a.TxFee.DynamicFeeCap.String())
require.Equal(t, true, a.IsPurgeAttempt)
require.Equal(t, []byte{}, a.Tx.EncodedPayload)
require.Equal(t, *big.NewInt(0), a.Tx.Value)
})`
$DIR/core/chains/evm/txmgr/attempts_test.go: `etx.TxAttempts = append(etx.TxAttempts, prevAttempt)`
$DIR/core/chains/evm/txmgr/attempts_test.go: `etx.TxAttempts = append(etx.TxAttempts, prevAttempt)`
$DIR/core/chains/evm/txmgr/attempts_test.go: `etx.TxAttempts = append(etx.TxAttempts, purgeAttempt)`
$DIR/core/chains/evm/txmgr/attempts_test.go: `t.Run("dynamic fee with legacy tx type", func(t *testing.T) {
_, retryable, err := cks.NewCustomTxAttempt(tests.Context(t), txmgr.Tx{}, gas.EvmFee{
DynamicTipCap: dynamicFee.TipCap,
DynamicFeeCap: dynamicFee.FeeCap,
}, 100, 0x0, lggr)
require.Error(t, err)
assert.False(t, retryable)
})`
$DIR/core/chains/evm/txmgr/attempts_test.go: `t.Run("legacy fee with dynamic tx type", func(t *testing.T) {
_, retryable, err := cks.NewCustomTxAttempt(tests.Context(t), txmgr.Tx{}, gas.EvmFee{Legacy: legacyFee}, 100, 0x2, lggr)
require.Error(t, err)
assert.False(t, retryable)
})`
$DIR/core/chains/evm/txmgr/attempts_test.go: `est.On("GetFee", mock.Anything, mock.Anything, mock.Anything, mock.Anything).Return(gas.EvmFee{}, uint64(0), pkgerrors.New("fail"))`
$DIR/core/chains/evm/txmgr/attempts_test.go: `est.On("BumpFee", mock.Anything, mock.Anything, mock.Anything, mock.Anything, mock.Anything).Return(gas.EvmFee{}, uint64(0), pkgerrors.New("fail"))`
$DIR/core/chains/evm/txmgr/attempts_test.go: `t.Run("NewAttempt", func(t *testing.T) {
_, _, _, retryable, err := cks.NewTxAttempt(ctx, txmgr.Tx{}, lggr)
require.Error(t, err)
assert.Contains(t, err.Error(), "failed to get fee")
assert.True(t, retryable)
})`
$DIR/core/chains/evm/txmgr/attempts_test.go: `t.Run("NewAttemptWithType", func(t *testing.T) {
_, _, _, retryable, err := cks.NewTxAttemptWithType(ctx, txmgr.Tx{}, lggr, 0x0)
require.Error(t, err)
assert.Contains(t, err.Error(), "failed to get fee")
assert.True(t, retryable)
})`
$DIR/core/chains/evm/txmgr/attempts_test.go: `.HexToAddress("0xb921F7763960b296B9cbAD586ff066A18D749724")`
$DIR/core/chains/evm/txmgr/attempts_test.go: `.HexToAddress("0xb921F7763960b296B9cbAD586ff066A18D749724")`
$DIR/core/chains/evm/txmgr/attempts_test.go: `.NewTx(&gethtypes.LegacyTx{
Nonce: 42,
To: &to,
Value: big.NewInt(142),
Gas: 242,
GasPrice: big.NewInt(342),
Data: []byte{1, 2, 3},
})`
$DIR/core/chains/evm/txmgr/attempts_test.go: `.NewInt(142)`
$DIR/core/chains/evm/txmgr/attempts_test.go: `.NewInt(342)`
$DIR/core/chains/evm/txmgr/attempts_test.go: `.Run("returns correct hash for non-okex chains", func(t *testing.T) {
chainID := big.NewInt(1)
kst := ksmocks.NewEth(t)
kst.On("SignTx", mock.Anything, to, tx, chainID).Return(tx, nil).Once()
cks := txmgr.NewEvmTxAttemptBuilder(*chainID, newFeeConfig(), kst, nil)
hash, rawBytes, err := cks.SignTx(tests.Context(t), addr, tx)
require.NoError(t, err)
require.NotNil(t, rawBytes)
require.Equal(t, "0xdd68f554373fdea7ec6713a6e437e7646465d553a6aa0b43233093366cc87ef0", hash.String())
})`
$DIR/core/chains/evm/txmgr/attempts_test.go: `.NewInt(1)`
$DIR/core/chains/evm/txmgr/attempts_test.go: `.NewEth(t)`
$DIR/core/chains/evm/txmgr/attempts_test.go: `.On("SignTx", mock.Anything, to, tx, chainID)`
$DIR/core/chains/evm/txmgr/attempts_test.go: `.Return(tx, nil)`
$DIR/core/chains/evm/txmgr/attempts_test.go: `.Once()`
$DIR/core/chains/evm/txmgr/attempts_test.go: `.NewEvmTxAttemptBuilder(*chainID, newFeeConfig(), kst, nil)`
$DIR/core/chains/evm/txmgr/attempts_test.go: `.SignTx(tests.Context(t), addr, tx)`
$DIR/core/chains/evm/txmgr/attempts_test.go: `.Context(t)`
$DIR/core/chains/evm/txmgr/attempts_test.go: `.Run("returns correct hash for okex chains", func(t *testing.T) {
chainID := big.NewInt(1)
kst := ksmocks.NewEth(t)
kst.On("SignTx", mock.Anything, to, tx, chainID).Return(tx, nil).Once()
cks := txmgr.NewEvmTxAttemptBuilder(*chainID, newFeeConfig(), kst, nil)
hash, rawBytes, err := cks.SignTx(tests.Context(t), addr, tx)
require.NoError(t, err)
require.NotNil(t, rawBytes)
require.Equal(t, "0xdd68f554373fdea7ec6713a6e437e7646465d553a6aa0b43233093366cc87ef0", hash.String())
})`
$DIR/core/chains/evm/txmgr/attempts_test.go: `.NewInt(1)`
$DIR/core/chains/evm/txmgr/attempts_test.go: `.NewEth(t)`
$DIR/core/chains/evm/txmgr/attempts_test.go: `.On("SignTx", mock.Anything, to, tx, chainID)`
$DIR/core/chains/evm/txmgr/attempts_test.go: `.Return(tx, nil)`
$DIR/core/chains/evm/txmgr/attempts_test.go: `.Once()`
$DIR/core/chains/evm/txmgr/attempts_test.go: `.NewEvmTxAttemptBuilder(*chainID, newFeeConfig(), kst, nil)`
$DIR/core/chains/evm/txmgr/attempts_test.go: `.SignTx(tests.Context(t), addr, tx)`
$DIR/core/chains/evm/txmgr/attempts_test.go: `.Context(t)`
$DIR/core/chains/evm/txmgr/attempts_test.go: `.Run("can properly encoded and decode raw transaction for LegacyTx", func(t *testing.T) {
chainID := big.NewInt(1)
kst := ksmocks.NewEth(t)
kst.On("SignTx", mock.Anything, to, tx, chainID).Return(tx, nil).Once()
cks := txmgr.NewEvmTxAttemptBuilder(*chainID, newFeeConfig(), kst, nil)
_, rawBytes, err := cks.SignTx(tests.Context(t), addr, tx)
require.NoError(t, err)
require.NotNil(t, rawBytes)
require.Equal(t, "0xe42a82015681f294b921f7763960b296b9cbad586ff066a18d749724818e83010203808080", hexutil.Encode(rawBytes))
var decodedTx *gethtypes.Transaction
decodedTx, err = txmgr.GetGethSignedTx(rawBytes)
require.NoError(t, err)
require.Equal(t, tx.Hash(), decodedTx.Hash())
})`
$DIR/core/chains/evm/txmgr/attempts_test.go: `.NewInt(1)`
$DIR/core/chains/evm/txmgr/attempts_test.go: `.NewEth(t)`
$DIR/core/chains/evm/txmgr/attempts_test.go: `.On("SignTx", mock.Anything, to, tx, chainID)`
$DIR/core/chains/evm/txmgr/attempts_test.go: `.Return(tx, nil)`
$DIR/core/chains/evm/txmgr/attempts_test.go: `.Once()`
$DIR/core/chains/evm/txmgr/attempts_test.go: `.NewEvmTxAttemptBuilder(*chainID, newFeeConfig(), kst, nil)`
$DIR/core/chains/evm/txmgr/attempts_test.go: `.SignTx(tests.Context(t), addr, tx)`
$DIR/core/chains/evm/txmgr/attempts_test.go: `.Context(t)`
$DIR/core/chains/evm/txmgr/attempts_test.go: `.GetGethSignedTx(rawBytes)`
$DIR/core/chains/evm/txmgr/attempts_test.go: `.NewInt(1)`
$DIR/core/chains/evm/txmgr/attempts_test.go: `.NewEth(t)`
$DIR/core/chains/evm/txmgr/attempts_test.go: `.NewTx(&gethtypes.DynamicFeeTx{
Nonce: 42,
To: &to,
Value: big.NewInt(142),
Gas: 242,
Data: []byte{1, 2, 3},
})`
$DIR/core/chains/evm/txmgr/attempts_test.go: `.NewInt(142)`
$DIR/core/chains/evm/txmgr/attempts_test.go: `.On("SignTx", mock.Anything, to, typedTx, chainID)`
$DIR/core/chains/evm/txmgr/attempts_test.go: `.Return(typedTx, nil)`
$DIR/core/chains/evm/txmgr/attempts_test.go: `.Once()`
$DIR/core/chains/evm/txmgr/attempts_test.go: `.NewEvmTxAttemptBuilder(*chainID, newFeeConfig(), kst, nil)`
$DIR/core/chains/evm/txmgr/attempts_test.go: `.SignTx(tests.Context(t), addr, typedTx)`
$DIR/core/chains/evm/txmgr/attempts_test.go: `.Context(t)`
$DIR/core/chains/evm/txmgr/attempts_test.go: `.GetGethSignedTx(rawBytes)`
$DIR/core/chains/evm/txmgr/attempts_test.go: `.NewTx(&types.DynamicFeeTx{})`
$DIR/core/chains/evm/txmgr/attempts_test.go: `.NewEth(t)`
$DIR/core/chains/evm/txmgr/attempts_test.go: `.On("SignTx", mock.Anything, addr, mock.Anything, big.NewInt(1))`
$DIR/core/chains/evm/txmgr/attempts_test.go: `.NewInt(1)`
$DIR/core/chains/evm/txmgr/attempts_test.go: `.Return(tx, nil)`
$DIR/core/chains/evm/txmgr/attempts_test.go: `.Test(t)`
$DIR/core/chains/evm/txmgr/attempts_test.go: `.Run("creates attempt with fields", func(t *testing.T) {
feeCfg := newFeeConfig()
feeCfg.priceMax = assets.GWei(200)
cks := txmgr.NewEvmTxAttemptBuilder(*big.NewInt(1), feeCfg, kst, nil)
dynamicFee := gas.DynamicFee{TipCap: assets.GWei(100), FeeCap: assets.GWei(200)}
a, _, err := cks.NewCustomTxAttempt(tests.Context(t), txmgr.Tx{Sequence: &n, FromAddress: addr}, gas.EvmFee{
DynamicTipCap: dynamicFee.TipCap,
DynamicFeeCap: dynamicFee.FeeCap,
}, 100, 0x2, lggr)
require.NoError(t, err)
assert.Equal(t, 100, int(a.ChainSpecificFeeLimit))
assert.Nil(t, a.TxFee.Legacy)
assert.NotNil(t, a.TxFee.DynamicTipCap)
assert.Equal(t, assets.GWei(100).String(), a.TxFee.DynamicTipCap.String())
assert.NotNil(t, a.TxFee.DynamicFeeCap)
assert.Equal(t, assets.GWei(200).String(), a.TxFee.DynamicFeeCap.String())
})`
$DIR/core/chains/evm/txmgr/attempts_test.go: `.GWei(200)`
$DIR/core/chains/evm/txmgr/attempts_test.go: `.NewEvmTxAttemptBuilder(*big.NewInt(1), feeCfg, kst, nil)`
$DIR/core/chains/evm/txmgr/attempts_test.go: `.NewInt(1)`
$DIR/core/chains/evm/txmgr/attempts_test.go: `.GWei(100)`
$DIR/core/chains/evm/txmgr/attempts_test.go: `.GWei(200)`
$DIR/core/chains/evm/txmgr/attempts_test.go: `.NewCustomTxAttempt(tests.Context(t), txmgr.Tx{Sequence: &n, FromAddress: addr}, gas.EvmFee{
DynamicTipCap: dynamicFee.TipCap,
DynamicFeeCap: dynamicFee.FeeCap,
}, 100, 0x2, lggr)`
$DIR/core/chains/evm/txmgr/attempts_test.go: `.Context(t)`
$DIR/core/chains/evm/txmgr/attempts_test.go: `.GWei(5)`
$DIR/core/chains/evm/txmgr/attempts_test.go: `.GWei(5)`
$DIR/core/chains/evm/txmgr/attempts_test.go: `.GWei(4)`
$DIR/core/chains/evm/txmgr/attempts_test.go: `.GWei(5)`
$DIR/core/chains/evm/txmgr/attempts_test.go: `.GWei(6)`
$DIR/core/chains/evm/txmgr/attempts_test.go: `.GWei(5)`
$DIR/core/chains/evm/txmgr/attempts_test.go: `.GWei(5)`
$DIR/core/chains/evm/txmgr/attempts_test.go: `.GWei(5)`
$DIR/core/chains/evm/txmgr/attempts_test.go: `.GWei(4)`
$DIR/core/chains/evm/txmgr/attempts_test.go: `.GWei(5)`
$DIR/core/chains/evm/txmgr/attempts_test.go: `.GWei(5)`
$DIR/core/chains/evm/txmgr/attempts_test.go: `.GWei(6)`
$DIR/core/chains/evm/txmgr/attempts_test.go: `.GWei(5)`
$DIR/core/chains/evm/txmgr/attempts_test.go: `.GWei(5)`
$DIR/core/chains/evm/txmgr/attempts_test.go: `.GWei(6)`
$DIR/core/chains/evm/txmgr/attempts_test.go: `.Run(test.name, func(t *testing.T) {
cfg := testutils.NewTestChainScopedConfig(t, test.setCfg)
cks := txmgr.NewEvmTxAttemptBuilder(*big.NewInt(1), cfg.EVM().GasEstimator(), kst, nil)
dynamicFee := gas.DynamicFee{TipCap: test.tipcap, FeeCap: test.feecap}
_, _, err := cks.NewCustomTxAttempt(tests.Context(t), txmgr.Tx{Sequence: &n, FromAddress: addr}, gas.EvmFee{
DynamicTipCap: dynamicFee.TipCap,
DynamicFeeCap: dynamicFee.FeeCap,
}, 100, 0x2, lggr)
if test.expectError == "" {
require.NoError(t, err)
} else {
require.ErrorContains(t, err, test.expectError)
}
})`
$DIR/core/chains/evm/txmgr/attempts_test.go: `.NewTestChainScopedConfig(t, test.setCfg)`
$DIR/core/chains/evm/txmgr/attempts_test.go: `.NewEvmTxAttemptBuilder(*big.NewInt(1), cfg.EVM().GasEstimator(), kst, nil)`
$DIR/core/chains/evm/txmgr/attempts_test.go: `.NewInt(1)`
$DIR/core/chains/evm/txmgr/attempts_test.go: `.EVM()`
$DIR/core/chains/evm/txmgr/attempts_test.go: `.GasEstimator()`
$DIR/core/chains/evm/txmgr/attempts_test.go: `.NewCustomTxAttempt(tests.Context(t), txmgr.Tx{Sequence: &n, FromAddress: addr}, gas.EvmFee{
DynamicTipCap: dynamicFee.TipCap,
DynamicFeeCap: dynamicFee.FeeCap,
}, 100, 0x2, lggr)`
$DIR/core/chains/evm/txmgr/attempts_test.go: `.Context(t)`
$DIR/core/chains/evm/txmgr/attempts_test.go: `.NewEth(t)`
$DIR/core/chains/evm/txmgr/attempts_test.go: `.NewTx(&types.LegacyTx{})`
$DIR/core/chains/evm/txmgr/attempts_test.go: `.On("SignTx", mock.Anything, addr, mock.Anything, big.NewInt(1))`
$DIR/core/chains/evm/txmgr/attempts_test.go: `.NewInt(1)`
$DIR/core/chains/evm/txmgr/attempts_test.go: `.Return(tx, nil)`
$DIR/core/chains/evm/txmgr/attempts_test.go: `.NewWeiI(10)`
$DIR/core/chains/evm/txmgr/attempts_test.go: `.NewWeiI(50)`
$DIR/core/chains/evm/txmgr/attempts_test.go: `.NewEvmTxAttemptBuilder(*big.NewInt(1), gc, kst, nil)`
$DIR/core/chains/evm/txmgr/attempts_test.go: `.NewInt(1)`
$DIR/core/chains/evm/txmgr/attempts_test.go: `.Test(t)`
$DIR/core/chains/evm/txmgr/attempts_test.go: `.Run("creates attempt with fields", func(t *testing.T) {
var n evmtypes.Nonce
a, _, err := cks.NewCustomTxAttempt(tests.Context(t), txmgr.Tx{Sequence: &n, FromAddress: addr}, gas.EvmFee{Legacy: assets.NewWeiI(25)}, 100, 0x0, lggr)
require.NoError(t, err)
assert.Equal(t, 100, int(a.ChainSpecificFeeLimit))
assert.NotNil(t, a.TxFee.Legacy)
assert.Equal(t, "25 wei", a.TxFee.Legacy.String())
assert.Nil(t, a.TxFee.DynamicTipCap)
assert.Nil(t, a.TxFee.DynamicFeeCap)
})`
$DIR/core/chains/evm/txmgr/attempts_test.go: `.NewCustomTxAttempt(tests.Context(t), txmgr.Tx{Sequence: &n, FromAddress: addr}, gas.EvmFee{Legacy: assets.NewWeiI(25)}, 100, 0x0, lggr)`
$DIR/core/chains/evm/txmgr/attempts_test.go: `.Context(t)`
$DIR/core/chains/evm/txmgr/attempts_test.go: `.NewWeiI(25)`
$DIR/core/chains/evm/txmgr/attempts_test.go: `.NewCustomTxAttempt(tests.Context(t), txmgr.Tx{FromAddress: addr}, gas.EvmFee{Legacy: assets.NewWeiI(100)}, 100, 0x0, lggr)`
$DIR/core/chains/evm/txmgr/attempts_test.go: `.Context(t)`
$DIR/core/chains/evm/txmgr/attempts_test.go: `.NewWeiI(100)`
$DIR/core/chains/evm/txmgr/attempts_test.go: `.NewEth(t)`
$DIR/core/chains/evm/txmgr/attempts_test.go: `.NewTx(&types.LegacyTx{})`
$DIR/core/chains/evm/txmgr/attempts_test.go: `.On("SignTx", mock.Anything, addr, mock.Anything, big.NewInt(1))`
$DIR/core/chains/evm/txmgr/attempts_test.go: `.NewInt(1)`
$DIR/core/chains/evm/txmgr/attempts_test.go: `.Return(tx, nil)`
$DIR/core/chains/evm/txmgr/attempts_test.go: `.GWei(10)`
$DIR/core/chains/evm/txmgr/attempts_test.go: `.GWei(50)`
$DIR/core/chains/evm/txmgr/attempts_test.go: `.NewEvmFeeEstimator(t)`
$DIR/core/chains/evm/txmgr/attempts_test.go: `.GWei(30)`
$DIR/core/chains/evm/txmgr/attempts_test.go: `.GWei(15)`
$DIR/core/chains/evm/txmgr/attempts_test.go: `.GWei(10)`
$DIR/core/chains/evm/txmgr/attempts_test.go: `.On("BumpFee", mock.Anything, mock.Anything, mock.Anything, mock.Anything, mock.Anything)`
$DIR/core/chains/evm/txmgr/attempts_test.go: `.Return(bumpedFee, uint64(10_000), nil)`
$DIR/core/chains/evm/txmgr/attempts_test.go: `.NewEvmTxAttemptBuilder(*big.NewInt(1), gc, kst, est)`
$DIR/core/chains/evm/txmgr/attempts_test.go: `.NewInt(1)`
$DIR/core/chains/evm/txmgr/attempts_test.go: `.Test(t)`
$DIR/core/chains/evm/txmgr/attempts_test.go: `.Context(t)`
$DIR/core/chains/evm/txmgr/attempts_test.go: `.Run("creates legacy purge attempt with fields if previous attempt is legacy", func(t *testing.T) {
n := evmtypes.Nonce(0)
etx := txmgr.Tx{Sequence: &n, FromAddress: addr, EncodedPayload: []byte{1, 2, 3}}
prevAttempt, _, err := cks.NewCustomTxAttempt(ctx, etx, gas.EvmFee{Legacy: bumpedLegacy.Sub(assets.GWei(1))}, 100, 0x0, lggr)
require.NoError(t, err)
etx.TxAttempts = append(etx.TxAttempts, prevAttempt)
a, err := cks.NewPurgeTxAttempt(ctx, etx, lggr)
require.NoError(t, err)
// The fee limit is overridden with LimitDefault since purge attempts are just empty attempts
require.Equal(t, gc.limitDefault, a.ChainSpecificFeeLimit)
require.NotNil(t, a.TxFee.Legacy)
require.Equal(t, bumpedLegacy.String(), a.TxFee.Legacy.String())
require.Nil(t, a.TxFee.DynamicTipCap)
require.Nil(t, a.TxFee.DynamicFeeCap)
require.Equal(t, true, a.IsPurgeAttempt)
require.Equal(t, []byte{}, a.Tx.EncodedPayload)
require.Equal(t, *big.NewInt(0), a.Tx.Value)
})`
$DIR/core/chains/evm/txmgr/attempts_test.go: `.Nonce(0)`
$DIR/core/chains/evm/txmgr/attempts_test.go: `.NewCustomTxAttempt(ctx, etx, gas.EvmFee{Legacy: bumpedLegacy.Sub(assets.GWei(1))}, 100, 0x0, lggr)`
$DIR/core/chains/evm/txmgr/attempts_test.go: `.Sub(assets.GWei(1))`
$DIR/core/chains/evm/txmgr/attempts_test.go: `.GWei(1)`
$DIR/core/chains/evm/txmgr/attempts_test.go: `.NewPurgeTxAttempt(ctx, etx, lggr)`
$DIR/core/chains/evm/txmgr/attempts_test.go: `.Run("creates dynamic purge attempt with fields if previous attempt is dynamic", func(t *testing.T) {
n := evmtypes.Nonce(0)
etx := txmgr.Tx{Sequence: &n, FromAddress: addr, EncodedPayload: []byte{1, 2, 3}}
prevAttempt, _, err := cks.NewCustomTxAttempt(ctx, etx, gas.EvmFee{DynamicTipCap: bumpedDynamicTip.Sub(assets.GWei(1)), DynamicFeeCap: bumpedDynamicFee.Sub(assets.GWei(1))}, 100, 0x2, lggr)
require.NoError(t, err)
etx.TxAttempts = append(etx.TxAttempts, prevAttempt)
a, err := cks.NewPurgeTxAttempt(ctx, etx, lggr)
require.NoError(t, err)
// The fee limit is overridden with LimitDefault since purge attempts are just empty attempts
require.Equal(t, gc.limitDefault, a.ChainSpecificFeeLimit)
require.Nil(t, a.TxFee.Legacy)
require.NotNil(t, a.TxFee.DynamicTipCap)
require.NotNil(t, a.TxFee.DynamicFeeCap)
require.Equal(t, bumpedDynamicTip.String(), a.TxFee.DynamicTipCap.String())
require.Equal(t, bumpedDynamicFee.String(), a.TxFee.DynamicFeeCap.String())
require.Equal(t, true, a.IsPurgeAttempt)
require.Equal(t, []byte{}, a.Tx.EncodedPayload)
require.Equal(t, *big.NewInt(0), a.Tx.Value)
})`
$DIR/core/chains/evm/txmgr/attempts_test.go: `.Nonce(0)`
$DIR/core/chains/evm/txmgr/attempts_test.go: `.NewCustomTxAttempt(ctx, etx, gas.EvmFee{DynamicTipCap: bumpedDynamicTip.Sub(assets.GWei(1)), DynamicFeeCap: bumpedDynamicFee.Sub(assets.GWei(1))}, 100, 0x2, lggr)`
$DIR/core/chains/evm/txmgr/attempts_test.go: `.Sub(assets.GWei(1))`
$DIR/core/chains/evm/txmgr/attempts_test.go: `.GWei(1)`
$DIR/core/chains/evm/txmgr/attempts_test.go: `.Sub(assets.GWei(1))`
$DIR/core/chains/evm/txmgr/attempts_test.go: `.GWei(1)`
$DIR/core/chains/evm/txmgr/attempts_test.go: `.NewPurgeTxAttempt(ctx, etx, lggr)`
$DIR/core/chains/evm/txmgr/attempts_test.go: `.Nonce(0)`
$DIR/core/chains/evm/txmgr/attempts_test.go: `.NewCustomTxAttempt(ctx, etx, gas.EvmFee{Legacy: bumpedLegacy.Sub(assets.GWei(1))}, 100, 0x0, lggr)`
$DIR/core/chains/evm/txmgr/attempts_test.go: `.Sub(assets.GWei(1))`
$DIR/core/chains/evm/txmgr/attempts_test.go: `.GWei(1)`
$DIR/core/chains/evm/txmgr/attempts_test.go: `.NewPurgeTxAttempt(ctx, etx, lggr)`
$DIR/core/chains/evm/txmgr/attempts_test.go: `.NewBumpTxAttempt(ctx, etx, purgeAttempt, etx.TxAttempts, lggr)`
$DIR/core/chains/evm/txmgr/attempts_test.go: `.NewEth(t)`
$DIR/core/chains/evm/txmgr/attempts_test.go: `.Test(t)`
$DIR/core/chains/evm/txmgr/attempts_test.go: `.NewEvmTxAttemptBuilder(*big.NewInt(1), newFeeConfig(), kst, nil)`
$DIR/core/chains/evm/txmgr/attempts_test.go: `.NewInt(1)`
$DIR/core/chains/evm/txmgr/attempts_test.go: `.GWei(100)`
$DIR/core/chains/evm/txmgr/attempts_test.go: `.GWei(200)`
$DIR/core/chains/evm/txmgr/attempts_test.go: `.NewWeiI(100)`
$DIR/core/chains/evm/txmgr/attempts_test.go: `.Run("dynamic fee with legacy tx type", func(t *testing.T) {
_, retryable, err := cks.NewCustomTxAttempt(tests.Context(t), txmgr.Tx{}, gas.EvmFee{
DynamicTipCap: dynamicFee.TipCap,
DynamicFeeCap: dynamicFee.FeeCap,
}, 100, 0x0, lggr)
require.Error(t, err)
assert.False(t, retryable)
})`
$DIR/core/chains/evm/txmgr/attempts_test.go: `.NewCustomTxAttempt(tests.Context(t), txmgr.Tx{}, gas.EvmFee{
DynamicTipCap: dynamicFee.TipCap,
DynamicFeeCap: dynamicFee.FeeCap,
}, 100, 0x0, lggr)`
$DIR/core/chains/evm/txmgr/attempts_test.go: `.Context(t)`
$DIR/core/chains/evm/txmgr/attempts_test.go: `.Run("legacy fee with dynamic tx type", func(t *testing.T) {
_, retryable, err := cks.NewCustomTxAttempt(tests.Context(t), txmgr.Tx{}, gas.EvmFee{Legacy: legacyFee}, 100, 0x2, lggr)
require.Error(t, err)
assert.False(t, retryable)
})`
$DIR/core/chains/evm/txmgr/attempts_test.go: `.NewCustomTxAttempt(tests.Context(t), txmgr.Tx{}, gas.EvmFee{Legacy: legacyFee}, 100, 0x2, lggr)`
$DIR/core/chains/evm/txmgr/attempts_test.go: `.Context(t)`
$DIR/core/chains/evm/txmgr/attempts_test.go: `.NewCustomTxAttempt(tests.Context(t), txmgr.Tx{}, gas.EvmFee{}, 100, 0xA, lggr)`
$DIR/core/chains/evm/txmgr/attempts_test.go: `.Context(t)`
$DIR/core/chains/evm/txmgr/attempts_test.go: `.NewEvmFeeEstimator(t)`
$DIR/core/chains/evm/txmgr/attempts_test.go: `.On("GetFee", mock.Anything, mock.Anything, mock.Anything, mock.Anything)`
$DIR/core/chains/evm/txmgr/attempts_test.go: `.Return(gas.EvmFee{}, uint64(0), pkgerrors.New("fail"))`
$DIR/core/chains/evm/txmgr/attempts_test.go: `.New("fail")`
$DIR/core/chains/evm/txmgr/attempts_test.go: `.On("BumpFee", mock.Anything, mock.Anything, mock.Anything, mock.Anything, mock.Anything)`
$DIR/core/chains/evm/txmgr/attempts_test.go: `.Return(gas.EvmFee{}, uint64(0), pkgerrors.New("fail"))`
$DIR/core/chains/evm/txmgr/attempts_test.go: `.New("fail")`
$DIR/core/chains/evm/txmgr/attempts_test.go: `.NewEth(t)`
$DIR/core/chains/evm/txmgr/attempts_test.go: `.Test(t)`
$DIR/core/chains/evm/txmgr/attempts_test.go: `.Context(t)`
$DIR/core/chains/evm/txmgr/attempts_test.go: `.NewEvmTxAttemptBuilder(*big.NewInt(1), &feeConfig{eip1559DynamicFees: true}, kst, est)`
$DIR/core/chains/evm/txmgr/attempts_test.go: `.NewInt(1)`
$DIR/core/chains/evm/txmgr/attempts_test.go: `.Run("NewAttempt", func(t *testing.T) {
_, _, _, retryable, err := cks.NewTxAttempt(ctx, txmgr.Tx{}, lggr)
require.Error(t, err)
assert.Contains(t, err.Error(), "failed to get fee")
assert.True(t, retryable)
})`
$DIR/core/chains/evm/txmgr/attempts_test.go: `.NewTxAttempt(ctx, txmgr.Tx{}, lggr)`
$DIR/core/chains/evm/txmgr/attempts_test.go: `.Run("NewAttemptWithType", func(t *testing.T) {
_, _, _, retryable, err := cks.NewTxAttemptWithType(ctx, txmgr.Tx{}, lggr, 0x0)
require.Error(t, err)
assert.Contains(t, err.Error(), "failed to get fee")
assert.True(t, retryable)
})`
$DIR/core/chains/evm/txmgr/attempts_test.go: `.NewTxAttemptWithType(ctx, txmgr.Tx{}, lggr, 0x0)`
$DIR/core/chains/evm/txmgr/attempts_test.go: `.NewBumpTxAttempt(ctx, txmgr.Tx{}, txmgr.TxAttempt{}, nil, lggr)`
$DIR/core/chains/evm/txmgr/broadcaster_test.go: `cltest.MustInsertRandomKeyReturningState(t, ethKeyStore)`
$DIR/core/chains/evm/txmgr/broadcaster_test.go: `ethClient.On("PendingNonceAt", mock.Anything, mock.Anything).Return(uint64(0), nil)`
$DIR/core/chains/evm/txmgr/broadcaster_test.go: `err = eb.Start(ctx)`
$DIR/core/chains/evm/txmgr/broadcaster_test.go: `err = eb.Close()`
$DIR/core/chains/evm/txmgr/broadcaster_test.go: `err = eb.Start(ctx)`
$DIR/core/chains/evm/txmgr/broadcaster_test.go: `err = eb.Close()`
$DIR/core/chains/evm/txmgr/broadcaster_test.go: `cltest.MustInsertRandomKeyReturningState(t, ethKeyStore)`
$DIR/core/chains/evm/txmgr/broadcaster_test.go: `ethClient.On("PendingNonceAt", mock.Anything, mock.Anything).Return(uint64(0), errors.New("Getting on-chain nonce failed"))`
$DIR/core/chains/evm/txmgr/broadcaster_test.go: `ethClient.On("PendingNonceAt", mock.Anything, fromAddress).Return(uint64(0), nil).Once()`
$DIR/core/chains/evm/txmgr/broadcaster_test.go: `ethClient.On("PendingNonceAt", mock.Anything, otherAddress).Return(uint64(0), nil).Once()`
$DIR/core/chains/evm/txmgr/broadcaster_test.go: `t.Run("no eth_txes at all", func(t *testing.T) {
retryable, err := eb.ProcessUnstartedTxs(tests.Context(t), fromAddress)
assert.NoError(t, err)
assert.False(t, retryable)
})`
$DIR/core/chains/evm/txmgr/broadcaster_test.go: `t.Run("eth_txes exist for a different from address", func(t *testing.T) {
mustCreateUnstartedTx(t, txStore, otherAddress, toAddress, encodedPayload, gasLimit, value, testutils.FixtureChainID)
retryable, err := eb.ProcessUnstartedTxs(tests.Context(t), fromAddress)
assert.NoError(t, err)
assert.False(t, retryable)
})`
$DIR/core/chains/evm/txmgr/broadcaster_test.go: `mustCreateUnstartedTx(t, txStore, otherAddress, toAddress, encodedPayload, gasLimit, value, testutils.FixtureChainID)`
$DIR/core/chains/evm/txmgr/broadcaster_test.go: `t.Run("existing eth_txes with broadcast_at or error", func(t *testing.T) {
nonce := evmtypes.Nonce(342)
errStr := "some error"
etxUnconfirmed := txmgr.Tx{
Sequence: &nonce,
FromAddress: fromAddress,
ToAddress: toAddress,
EncodedPayload: encodedPayload,
Value: value,
FeeLimit: gasLimit,
BroadcastAt: &timeNow,
InitialBroadcastAt: &timeNow,
Error: null.String{},
State: txmgrcommon.TxUnconfirmed,
}
etxWithError := txmgr.Tx{
Sequence: nil,
FromAddress: fromAddress,
ToAddress: toAddress,
EncodedPayload: encodedPayload,
Value: value,
FeeLimit: gasLimit,
Error: null.StringFrom(errStr),
State: txmgrcommon.TxFatalError,
}
require.NoError(t, txStore.InsertTx(ctx, &etxUnconfirmed))
require.NoError(t, txStore.InsertTx(ctx, &etxWithError))
retryable, err := eb.ProcessUnstartedTxs(tests.Context(t), fromAddress)
assert.NoError(t, err)
assert.False(t, retryable)
})`
$DIR/core/chains/evm/txmgr/broadcaster_test.go: `t.Run("sends 3 EthTxs in order with higher value last, and lower values starting from the earliest", func(t *testing.T) {
// Higher value
expensiveEthTx := txmgr.Tx{
FromAddress: fromAddress,
ToAddress: toAddress,
EncodedPayload: []byte{42, 42, 0},
Value: big.Int(assets.NewEthValue(242)),
FeeLimit: gasLimit,
CreatedAt: time.Unix(0, 0),
State: txmgrcommon.TxUnstarted,
}
ethClient.On("SendTransactionReturnCode", mock.Anything, mock.MatchedBy(func(tx *gethTypes.Transaction) bool {
return tx.Nonce() == uint64(2) && tx.Value().Cmp(big.NewInt(242)) == 0
}), fromAddress).Return(commonclient.Successful, nil).Once()
// Earlier
tr := int32(99)
b, err := json.Marshal(txmgr.TxMeta{JobID: &tr})
require.NoError(t, err)
meta := sqlutil.JSON(b)
earlierEthTx := txmgr.Tx{
FromAddress: fromAddress,
ToAddress: toAddress,
EncodedPayload: []byte{42, 42, 0},
Value: value,
FeeLimit: gasLimit,
CreatedAt: time.Unix(0, 1),
State: txmgrcommon.TxUnstarted,
Meta: &meta,
}
ethClient.On("SendTransactionReturnCode", mock.Anything, mock.MatchedBy(func(tx *gethTypes.Transaction) bool {
if tx.Nonce() != uint64(0) {
return false
}
require.Equal(t, evmcfg.EVM().ChainID(), tx.ChainId())
require.Equal(t, gasLimit, tx.Gas())
require.Equal(t, evmcfg.EVM().GasEstimator().PriceDefault().ToInt(), tx.GasPrice())
require.Equal(t, toAddress, *tx.To())
require.Equal(t, value.String(), tx.Value().String())
require.Equal(t, earlierEthTx.EncodedPayload, tx.Data())
return true
}), fromAddress).Return(commonclient.Successful, nil).Once()
// Later
laterEthTx := txmgr.Tx{
FromAddress: fromAddress,
ToAddress: toAddress,
EncodedPayload: []byte{42, 42, 1},
Value: value,
FeeLimit: gasLimit,
CreatedAt: time.Unix(1, 0),
State: txmgrcommon.TxUnstarted,
}
ethClient.On("SendTransactionReturnCode", mock.Anything, mock.MatchedBy(func(tx *gethTypes.Transaction) bool {
if tx.Nonce() != uint64(1) {
return false
}
require.Equal(t, evmcfg.EVM().ChainID(), tx.ChainId())
require.Equal(t, gasLimit, tx.Gas())
require.Equal(t, evmcfg.EVM().GasEstimator().PriceDefault().ToInt(), tx.GasPrice())
require.Equal(t, toAddress, *tx.To())
require.Equal(t, value.String(), tx.Value().String())
require.Equal(t, laterEthTx.EncodedPayload, tx.Data())
return true
}), fromAddress).Return(commonclient.Successful, nil).Once()
// Insertion order deliberately reversed to test ordering
require.NoError(t, txStore.InsertTx(ctx, &expensiveEthTx))
require.NoError(t, txStore.InsertTx(ctx, &laterEthTx))
require.NoError(t, txStore.InsertTx(ctx, &earlierEthTx))
// Do the thing
retryable, err := eb.ProcessUnstartedTxs(tests.Context(t), fromAddress)
assert.NoError(t, err)
assert.False(t, retryable)
// Check earlierEthTx and it's attempt
// This was the earlier one sent so it has the lower nonce
earlierTransaction, err := txStore.FindTxWithAttempts(ctx, earlierEthTx.ID)
require.NoError(t, err)
assert.False(t, earlierTransaction.Error.Valid)
require.NotNil(t, earlierTransaction.FromAddress)
assert.Equal(t, fromAddress, earlierTransaction.FromAddress)
require.NotNil(t, earlierTransaction.Sequence)
assert.Equal(t, evmtypes.Nonce(0), *earlierTransaction.Sequence)
assert.NotNil(t, earlierTransaction.BroadcastAt)
assert.NotNil(t, earlierTransaction.InitialBroadcastAt)
assert.Len(t, earlierTransaction.TxAttempts, 1)
var m txmgr.TxMeta
err = json.Unmarshal(*earlierEthTx.Meta, &m)
require.NoError(t, err)
assert.NotNil(t, m.JobID)
assert.Equal(t, tr, *m.JobID)
attempt := earlierTransaction.TxAttempts[0]
assert.Equal(t, earlierTransaction.ID, attempt.TxID)
assert.NotNil(t, attempt.TxFee.Legacy)
assert.Nil(t, attempt.TxFee.DynamicTipCap)
assert.Nil(t, attempt.TxFee.DynamicFeeCap)
assert.Equal(t, evmcfg.EVM().GasEstimator().PriceDefault(), attempt.TxFee.Legacy)
_, err = txmgr.GetGethSignedTx(attempt.SignedRawTx)
require.NoError(t, err)
assert.Equal(t, txmgrtypes.TxAttemptBroadcast, attempt.State)
require.Len(t, attempt.Receipts, 0)
// Check laterEthTx and it's attempt
// This was the later one sent so it has the higher nonce
laterTransaction, err := txStore.FindTxWithAttempts(ctx, laterEthTx.ID)
require.NoError(t, err)
assert.False(t, earlierTransaction.Error.Valid)
require.NotNil(t, laterTransaction.FromAddress)
assert.Equal(t, fromAddress, laterTransaction.FromAddress)
require.NotNil(t, laterTransaction.Sequence)
assert.Equal(t, evmtypes.Nonce(1), *laterTransaction.Sequence)
assert.NotNil(t, laterTransaction.BroadcastAt)
assert.NotNil(t, earlierTransaction.InitialBroadcastAt)
assert.Len(t, laterTransaction.TxAttempts, 1)
attempt = laterTransaction.TxAttempts[0]
assert.Equal(t, laterTransaction.ID, attempt.TxID)
assert.Equal(t, evmcfg.EVM().GasEstimator().PriceDefault(), attempt.TxFee.Legacy)
_, err = txmgr.GetGethSignedTx(attempt.SignedRawTx)
require.NoError(t, err)
assert.Equal(t, txmgrtypes.TxAttemptBroadcast, attempt.State)
require.Len(t, attempt.Receipts, 0)
})`
$DIR/core/chains/evm/txmgr/broadcaster_test.go: `ethClient.On("SendTransactionReturnCode", mock.Anything, mock.MatchedBy(func(tx *gethTypes.Transaction) bool {
return tx.Nonce() == uint64(2) && tx.Value().Cmp(big.NewInt(242)) == 0
}), fromAddress).Return(commonclient.Successful, nil).Once()`
$DIR/core/chains/evm/txmgr/broadcaster_test.go: `ethClient.On("SendTransactionReturnCode", mock.Anything, mock.MatchedBy(func(tx *gethTypes.Transaction) bool {
if tx.Nonce() != uint64(0) {
return false
}
require.Equal(t, evmcfg.EVM().ChainID(), tx.ChainId())
require.Equal(t, gasLimit, tx.Gas())
require.Equal(t, evmcfg.EVM().GasEstimator().PriceDefault().ToInt(), tx.GasPrice())
require.Equal(t, toAddress, *tx.To())
require.Equal(t, value.String(), tx.Value().String())
require.Equal(t, earlierEthTx.EncodedPayload, tx.Data())
return true
}), fromAddress).Return(commonclient.Successful, nil).Once()`
$DIR/core/chains/evm/txmgr/broadcaster_test.go: `ethClient.On("SendTransactionReturnCode", mock.Anything, mock.MatchedBy(func(tx *gethTypes.Transaction) bool {
if tx.Nonce() != uint64(1) {
return false
}
require.Equal(t, evmcfg.EVM().ChainID(), tx.ChainId())
require.Equal(t, gasLimit, tx.Gas())
require.Equal(t, evmcfg.EVM().GasEstimator().PriceDefault().ToInt(), tx.GasPrice())
require.Equal(t, toAddress, *tx.To())
require.Equal(t, value.String(), tx.Value().String())
require.Equal(t, laterEthTx.EncodedPayload, tx.Data())
return true
}), fromAddress).Return(commonclient.Successful, nil).Once()`
$DIR/core/chains/evm/txmgr/broadcaster_test.go: `err = json.Unmarshal(*earlierEthTx.Meta, &m)`
$DIR/core/chains/evm/txmgr/broadcaster_test.go: `_, err = txmgr.GetGethSignedTx(attempt.SignedRawTx)`
$DIR/core/chains/evm/txmgr/broadcaster_test.go: `attempt = laterTransaction.TxAttempts[0]`
$DIR/core/chains/evm/txmgr/broadcaster_test.go: `_, err = txmgr.GetGethSignedTx(attempt.SignedRawTx)`
$DIR/core/chains/evm/txmgr/broadcaster_test.go: `c.EVM[0].GasEstimator.EIP1559DynamicFees = ptr(true)`
$DIR/core/chains/evm/txmgr/broadcaster_test.go: `c.EVM[0].GasEstimator.TipCapDefault = assets.NewWeiI(rnd)`
$DIR/core/chains/evm/txmgr/broadcaster_test.go: `c.EVM[0].GasEstimator.FeeCapDefault = assets.NewWeiI(rnd + 1)`
$DIR/core/chains/evm/txmgr/broadcaster_test.go: `c.EVM[0].GasEstimator.PriceMax = assets.NewWeiI(rnd + 2)`
$DIR/core/chains/evm/txmgr/broadcaster_test.go: `evmcfg = evmtest.NewChainScopedConfig(t, cfg)`
$DIR/core/chains/evm/txmgr/broadcaster_test.go: `ethClient.On("PendingNonceAt", mock.Anything, otherAddress).Return(uint64(1), nil).Once()`
$DIR/core/chains/evm/txmgr/broadcaster_test.go: `nonceTracker = txmgr.NewNonceTracker(lggr, txStore, txmgr.NewEvmTxmClient(ethClient, nil))`
$DIR/core/chains/evm/txmgr/broadcaster_test.go: `eb = NewTestEthBroadcaster(t, txStore, ethClient, ethKeyStore, cfg, evmcfg, checkerFactory, false, nonceTracker)`
$DIR/core/chains/evm/txmgr/broadcaster_test.go: `t.Run("sends transactions with type 0x2 in EIP-1559 mode", func(t *testing.T) {
ethClient.On("SendTransactionReturnCode", mock.Anything, mock.MatchedBy(func(tx *gethTypes.Transaction) bool {
return tx.Nonce() == uint64(343) && tx.Value().Cmp(big.NewInt(242)) == 0
}), fromAddress).Return(commonclient.Successful, nil).Once()
etx := mustCreateUnstartedTx(t, txStore, fromAddress, toAddress, []byte{42, 42, 0}, gasLimit, big.Int(assets.NewEthValue(242)), testutils.FixtureChainID)
// Do the thing
{
retryable, err := eb.ProcessUnstartedTxs(tests.Context(t), fromAddress)
assert.NoError(t, err)
assert.False(t, retryable)
}
// Check eipTxWithAl and it's attempt
// This was the earlier one sent so it has the lower nonce
etx, err := txStore.FindTxWithAttempts(ctx, etx.ID)
require.NoError(t, err)
assert.False(t, etx.Error.Valid)
require.NotNil(t, etx.FromAddress)
assert.Equal(t, fromAddress, etx.FromAddress)
require.NotNil(t, etx.Sequence)
assert.Equal(t, evmtypes.Nonce(343), *etx.Sequence)
assert.NotNil(t, etx.BroadcastAt)
assert.NotNil(t, etx.InitialBroadcastAt)
assert.Len(t, etx.TxAttempts, 1)
attempt := etx.TxAttempts[0]
assert.Equal(t, etx.ID, attempt.TxID)
assert.Nil(t, attempt.TxFee.Legacy)
assert.Equal(t, rnd, attempt.TxFee.DynamicTipCap.ToInt().Int64())
assert.Equal(t, rnd+1, attempt.TxFee.DynamicFeeCap.ToInt().Int64())
_, err = txmgr.GetGethSignedTx(attempt.SignedRawTx)
require.NoError(t, err)
assert.Equal(t, txmgrtypes.TxAttemptBroadcast, attempt.State)
require.Len(t, attempt.Receipts, 0)
})`
$DIR/core/chains/evm/txmgr/broadcaster_test.go: `ethClient.On("SendTransactionReturnCode", mock.Anything, mock.MatchedBy(func(tx *gethTypes.Transaction) bool {
return tx.Nonce() == uint64(343) && tx.Value().Cmp(big.NewInt(242)) == 0
}), fromAddress).Return(commonclient.Successful, nil).Once()`
$DIR/core/chains/evm/txmgr/broadcaster_test.go: `_, err = txmgr.GetGethSignedTx(attempt.SignedRawTx)`
$DIR/core/chains/evm/txmgr/broadcaster_test.go: `t.Run("when simulation succeeds, sends tx as normal", func(t *testing.T) {
txRequest := txmgr.TxRequest{
FromAddress: fromAddress,
ToAddress: toAddress,
EncodedPayload: []byte{42, 0, 0},
Value: big.Int(assets.NewEthValue(442)),
FeeLimit: gasLimit,
Strategy: txmgrcommon.NewSendEveryStrategy(),
Checker: txmgr.TransmitCheckerSpec{
CheckerType: txmgr.TransmitCheckerTypeSimulate,
},
}
ethClient.On("SendTransactionReturnCode", mock.Anything, mock.MatchedBy(func(tx *gethTypes.Transaction) bool {
return tx.Nonce() == uint64(344) && tx.Value().Cmp(big.NewInt(442)) == 0
}), fromAddress).Return(commonclient.Successful, nil).Once()
ethClient.On("CallContext", mock.Anything, mock.AnythingOfType("*hexutil.Bytes"), "eth_call", mock.MatchedBy(func(callarg map[string]interface{}) bool {
if fmt.Sprintf("%s", callarg["value"]) == "0x1ba" { // 442
assert.Equal(t, txRequest.FromAddress, callarg["from"])
assert.Equal(t, &txRequest.ToAddress, callarg["to"])
assert.Equal(t, hexutil.Uint64(txRequest.FeeLimit), callarg["gas"])
assert.Nil(t, callarg["gasPrice"])
assert.Nil(t, callarg["maxFeePerGas"])
assert.Nil(t, callarg["maxPriorityFeePerGas"])
assert.Equal(t, (*hexutil.Big)(&txRequest.Value), callarg["value"])
assert.Equal(t, hexutil.Bytes(txRequest.EncodedPayload), callarg["data"])
return true
}
return false
}), "latest").Return(nil).Once()
ethTx := mustCreateUnstartedTxFromEvmTxRequest(t, txStore, txRequest, testutils.FixtureChainID)
{
retryable, err := eb.ProcessUnstartedTxs(tests.Context(t), fromAddress)
assert.NoError(t, err)
assert.False(t, retryable)
}
// Check ethtx was sent
ethTx, err := txStore.FindTxWithAttempts(ctx, ethTx.ID)
require.NoError(t, err)
assert.Equal(t, txmgrcommon.TxUnconfirmed, ethTx.State)
})`
$DIR/core/chains/evm/txmgr/broadcaster_test.go: `ethClient.On("SendTransactionReturnCode", mock.Anything, mock.MatchedBy(func(tx *gethTypes.Transaction) bool {
return tx.Nonce() == uint64(344) && tx.Value().Cmp(big.NewInt(442)) == 0
}), fromAddress).Return(commonclient.Successful, nil).Once()`
$DIR/core/chains/evm/txmgr/broadcaster_test.go: `ethClient.On("CallContext", mock.Anything, mock.AnythingOfType("*hexutil.Bytes"), "eth_call", mock.MatchedBy(func(callarg map[string]interface{}) bool {
if fmt.Sprintf("%s", callarg["value"]) == "0x1ba" { // 442
assert.Equal(t, txRequest.FromAddress, callarg["from"])
assert.Equal(t, &txRequest.ToAddress, callarg["to"])
assert.Equal(t, hexutil.Uint64(txRequest.FeeLimit), callarg["gas"])
assert.Nil(t, callarg["gasPrice"])
assert.Nil(t, callarg["maxFeePerGas"])
assert.Nil(t, callarg["maxPriorityFeePerGas"])
assert.Equal(t, (*hexutil.Big)(&txRequest.Value), callarg["value"])
assert.Equal(t, hexutil.Bytes(txRequest.EncodedPayload), callarg["data"])
return true
}
return false
}), "latest").Return(nil).Once()`
$DIR/core/chains/evm/txmgr/broadcaster_test.go: `t.Run("with unknown error, sends tx as normal", func(t *testing.T) {
ethClient.On("SendTransactionReturnCode", mock.Anything, mock.MatchedBy(func(tx *gethTypes.Transaction) bool {
return tx.Nonce() == uint64(345) && tx.Value().Cmp(big.NewInt(542)) == 0
}), fromAddress).Return(commonclient.Successful, nil).Once()
ethClient.On("CallContext", mock.Anything, mock.AnythingOfType("*hexutil.Bytes"), "eth_call", mock.MatchedBy(func(callarg map[string]interface{}) bool {
return fmt.Sprintf("%s", callarg["value"]) == "0x21e" // 542
}), "latest").Return(errors.New("this is not a revert, something unexpected went wrong")).Once()
ethTx := mustCreateUnstartedGeneratedTx(t, txStore, fromAddress, testutils.FixtureChainID,
txRequestWithChecker(checker),
txRequestWithValue(big.Int(assets.NewEthValue(542))))
{
retryable, err := eb.ProcessUnstartedTxs(tests.Context(t), fromAddress)
assert.NoError(t, err)
assert.False(t, retryable)
}
ethTx, err := txStore.FindTxWithAttempts(ctx, ethTx.ID)
require.NoError(t, err)
assert.Equal(t, txmgrcommon.TxUnconfirmed, ethTx.State)
})`
$DIR/core/chains/evm/txmgr/broadcaster_test.go: `ethClient.On("SendTransactionReturnCode", mock.Anything, mock.MatchedBy(func(tx *gethTypes.Transaction) bool {
return tx.Nonce() == uint64(345) && tx.Value().Cmp(big.NewInt(542)) == 0
}), fromAddress).Return(commonclient.Successful, nil).Once()`
$DIR/core/chains/evm/txmgr/broadcaster_test.go: `ethClient.On("CallContext", mock.Anything, mock.AnythingOfType("*hexutil.Bytes"), "eth_call", mock.MatchedBy(func(callarg map[string]interface{}) bool {
return fmt.Sprintf("%s", callarg["value"]) == "0x21e" // 542
}), "latest").Return(errors.New("this is not a revert, something unexpected went wrong")).Once()`
$DIR/core/chains/evm/txmgr/broadcaster_test.go: `t.Run("on revert, marks tx as fatally errored and does not send", func(t *testing.T) {
jerr := client.JsonError{
Code: 42,
Message: "oh no, it reverted",
Data: []byte{42, 166, 34},
}
ethClient.On("CallContext", mock.Anything, mock.AnythingOfType("*hexutil.Bytes"), "eth_call", mock.MatchedBy(func(callarg map[string]interface{}) bool {
return fmt.Sprintf("%s", callarg["value"]) == "0x282" // 642
}), "latest").Return(&jerr).Once()
ethTx := mustCreateUnstartedGeneratedTx(t, txStore, fromAddress, testutils.FixtureChainID,
txRequestWithChecker(checker),
txRequestWithValue(big.Int(assets.NewEthValue(642))))
{
retryable, err := eb.ProcessUnstartedTxs(tests.Context(t), fromAddress)
assert.NoError(t, err)
assert.False(t, retryable)
}
ethTx, err := txStore.FindTxWithAttempts(ctx, ethTx.ID)
require.NoError(t, err)
assert.Equal(t, txmgrcommon.TxFatalError, ethTx.State)
assert.True(t, ethTx.Error.Valid)
assert.Equal(t, "transaction reverted during simulation: json-rpc error { Code = 42, Message = 'oh no, it reverted', Data = 'KqYi' }", ethTx.Error.String)
})`
$DIR/core/chains/evm/txmgr/broadcaster_test.go: `ethClient.On("CallContext", mock.Anything, mock.AnythingOfType("*hexutil.Bytes"), "eth_call", mock.MatchedBy(func(callarg map[string]interface{}) bool {
return fmt.Sprintf("%s", callarg["value"]) == "0x282" // 642
}), "latest").Return(&jerr).Once()`
$DIR/core/chains/evm/txmgr/broadcaster_test.go: `ethClient.On("PendingNonceAt", mock.Anything, fromAddress).Return(uint64(0), nil).Once()`
$DIR/core/chains/evm/txmgr/broadcaster_test.go: `t.Run("when transmit checking times out, sends tx as normal", func(t *testing.T) {
// Checker will return a canceled error
checkerFactory.err = context.Canceled
ethClient.On("SendTransactionReturnCode", mock.Anything, mock.MatchedBy(func(tx *gethTypes.Transaction) bool {
return tx.Nonce() == 0 && tx.Value().Cmp(big.NewInt(442)) == 0
}), fromAddress).Return(commonclient.Successful, nil).Once()
ethTx := mustCreateUnstartedGeneratedTx(t, txStore, fromAddress, testutils.FixtureChainID,
txRequestWithValue(big.Int(assets.NewEthValue(442))),
txRequestWithChecker(checker))
{
retryable, err := eb.ProcessUnstartedTxs(tests.Context(t), fromAddress)
assert.NoError(t, err)
assert.False(t, retryable)
}
// Check ethtx was sent
ethTx, err := txStore.FindTxWithAttempts(ctx, ethTx.ID)
require.NoError(t, err)
assert.Equal(t, txmgrcommon.TxUnconfirmed, ethTx.State)
})`
$DIR/core/chains/evm/txmgr/broadcaster_test.go: `checkerFactory.err = context.Canceled`
$DIR/core/chains/evm/txmgr/broadcaster_test.go: `ethClient.On("SendTransactionReturnCode", mock.Anything, mock.MatchedBy(func(tx *gethTypes.Transaction) bool {
return tx.Nonce() == 0 && tx.Value().Cmp(big.NewInt(442)) == 0
}), fromAddress).Return(commonclient.Successful, nil).Once()`
$DIR/core/chains/evm/txmgr/broadcaster_test.go: `t.Run("when transmit checking succeeds, sends tx as normal", func(t *testing.T) {
// Checker will return no error
checkerFactory.err = nil
ethClient.On("SendTransactionReturnCode", mock.Anything, mock.MatchedBy(func(tx *gethTypes.Transaction) bool {
return tx.Nonce() == 1 && tx.Value().Cmp(big.NewInt(442)) == 0
}), fromAddress).Return(commonclient.Successful, nil).Once()
ethTx := mustCreateUnstartedGeneratedTx(t, txStore, fromAddress, testutils.FixtureChainID,
txRequestWithValue(big.Int(assets.NewEthValue(442))),
txRequestWithChecker(checker))
{
retryable, err := eb.ProcessUnstartedTxs(tests.Context(t), fromAddress)
assert.NoError(t, err)
assert.False(t, retryable)
}
// Check ethtx was sent
ethTx, err := txStore.FindTxWithAttempts(ctx, ethTx.ID)
require.NoError(t, err)
assert.Equal(t, txmgrcommon.TxUnconfirmed, ethTx.State)
})`
$DIR/core/chains/evm/txmgr/broadcaster_test.go: `checkerFactory.err = nil`
$DIR/core/chains/evm/txmgr/broadcaster_test.go: `ethClient.On("SendTransactionReturnCode", mock.Anything, mock.MatchedBy(func(tx *gethTypes.Transaction) bool {
return tx.Nonce() == 1 && tx.Value().Cmp(big.NewInt(442)) == 0
}), fromAddress).Return(commonclient.Successful, nil).Once()`
$DIR/core/chains/evm/txmgr/broadcaster_test.go: `checkerFactory.err = errors.New("fatal checker error")`
$DIR/core/chains/evm/txmgr/broadcaster_test.go: `estimator.On("GetFee", mock.Anything, mock.Anything, mock.Anything, ccfg.EVM().GasEstimator().PriceMaxKey(fromAddress)).Return(gas.EvmFee{Legacy: assets.GWei(32)}, uint64(500), nil).Run(func(_ mock.Arguments) {
close(chStartEstimate)
<-chBlock
}).Once()`
$DIR/core/chains/evm/txmgr/broadcaster_test.go: `close(chStartEstimate)`
$DIR/core/chains/evm/txmgr/broadcaster_test.go: `<-chBlock`
$DIR/core/chains/evm/txmgr/broadcaster_test.go: `ethClient.On("PendingNonceAt", mock.Anything, fromAddress).Return(uint64(0), nil)`
$DIR/core/chains/evm/txmgr/broadcaster_test.go: `eb.XXXTestDisableUnstartedTxAutoProcessing()`
$DIR/core/chains/evm/txmgr/broadcaster_test.go: `servicetest.Run(t, eb)`
$DIR/core/chains/evm/txmgr/broadcaster_test.go: `mustCreateUnstartedGeneratedTx(t, txStore, fromAddress, testutils.FixtureChainID)`
$DIR/core/chains/evm/txmgr/broadcaster_test.go: `close(chBlock)`
$DIR/core/chains/evm/txmgr/broadcaster_test.go: `c.EVM[0].GasEstimator.LimitMultiplier = &lm`
$DIR/core/chains/evm/txmgr/broadcaster_test.go: `ethClient.On("PendingNonceAt", mock.Anything, fromAddress).Return(uint64(0), nil).Once()`
$DIR/core/chains/evm/txmgr/broadcaster_test.go: `ethClient.On("SendTransactionReturnCode", mock.Anything, mock.MatchedBy(func(tx *gethTypes.Transaction) bool {
assert.Equal(t, int(1600), int(tx.Gas()))
return true
}), fromAddress).Return(commonclient.Successful, nil).Once()`
$DIR/core/chains/evm/txmgr/broadcaster_test.go: `mustCreateUnstartedTxFromEvmTxRequest(t, txStore, txRequest, testutils.FixtureChainID)`
$DIR/core/chains/evm/txmgr/broadcaster_test.go: `t.Run("cannot be more than one transaction per address in an unfinished state", func(t *testing.T) {
db := pgtest.NewSqlxDB(t)
txStore := cltest.NewTestTxStore(t, db)
ethKeyStore := cltest.NewKeyStore(t, db).Eth()
_, fromAddress := cltest.RandomKey{Nonce: nextNonce.Int64()}.MustInsertWithState(t, ethKeyStore)
firstInProgress := txmgr.Tx{
FromAddress: fromAddress,
Sequence: &firstNonce,
ToAddress: toAddress,
EncodedPayload: encodedPayload,
Value: value,
FeeLimit: gasLimit,
Error: null.String{},
State: txmgrcommon.TxInProgress,
}
secondInProgress := txmgr.Tx{
FromAddress: fromAddress,
Sequence: &secondNonce,
ToAddress: toAddress,
EncodedPayload: encodedPayload,
Value: value,
FeeLimit: gasLimit,
Error: null.String{},
State: txmgrcommon.TxInProgress,
}
require.NoError(t, txStore.InsertTx(ctx, &firstInProgress))
err := txStore.InsertTx(ctx, &secondInProgress)
require.Error(t, err)
assert.Contains(t, err.Error(), "ERROR: duplicate key value violates unique constraint \"idx_only_one_in_progress_tx_per_account_id_per_evm_chain_id\" (SQLSTATE 23505)")
})`
$DIR/core/chains/evm/txmgr/broadcaster_test.go: `t.Run("previous run assigned nonce but never broadcast", func(t *testing.T) {
db := pgtest.NewSqlxDB(t)
txStore := cltest.NewTestTxStore(t, db)
ethKeyStore := cltest.NewKeyStore(t, db).Eth()
_, fromAddress := cltest.RandomKey{Nonce: nextNonce.Int64()}.MustInsertWithState(t, ethKeyStore)
ethClient := testutils.NewEthClientMockWithDefaultChain(t)
ethClient.On("PendingNonceAt", mock.Anything, fromAddress).Return(uint64(0), nil).Once()
nonceTracker := txmgr.NewNonceTracker(logger.Test(t), txStore, txmgr.NewEvmTxmClient(ethClient, nil))
eb := NewTestEthBroadcaster(t, txStore, ethClient, ethKeyStore, cfg, evmcfg, &testCheckerFactory{}, false, nonceTracker)
// Crashed right after we commit the database transaction that saved
// the nonce to the eth_tx so evm.key_states.next_nonce has not been
// incremented yet
inProgressEthTx := mustInsertInProgressEthTxWithAttempt(t, txStore, firstNonce, fromAddress)
ethClient.On("SendTransactionReturnCode", mock.Anything, mock.MatchedBy(func(tx *gethTypes.Transaction) bool {
return tx.Nonce() == uint64(firstNonce)
}), fromAddress).Return(commonclient.Successful, nil).Once()
// Do the thing
{
retryable, err := eb.ProcessUnstartedTxs(tests.Context(t), fromAddress)
assert.NoError(t, err)
assert.False(t, retryable)
}
// Check it was saved correctly with its attempt
etx, err := txStore.FindTxWithAttempts(ctx, inProgressEthTx.ID)
require.NoError(t, err)
assert.NotNil(t, etx.BroadcastAt)
assert.NotNil(t, etx.InitialBroadcastAt)
assert.False(t, etx.Error.Valid)
assert.Len(t, etx.TxAttempts, 1)
assert.Equal(t, txmgrtypes.TxAttemptBroadcast, etx.TxAttempts[0].State)
})`
$DIR/core/chains/evm/txmgr/broadcaster_test.go: `ethClient.On("PendingNonceAt", mock.Anything, fromAddress).Return(uint64(0), nil).Once()`
$DIR/core/chains/evm/txmgr/broadcaster_test.go: `ethClient.On("SendTransactionReturnCode", mock.Anything, mock.MatchedBy(func(tx *gethTypes.Transaction) bool {
return tx.Nonce() == uint64(firstNonce)
}), fromAddress).Return(commonclient.Successful, nil).Once()`
$DIR/core/chains/evm/txmgr/broadcaster_test.go: `t.Run("previous run assigned nonce and broadcast but it fatally errored before we could save", func(t *testing.T) {
db := pgtest.NewSqlxDB(t)
txStore := cltest.NewTestTxStore(t, db)
ethKeyStore := cltest.NewKeyStore(t, db).Eth()
_, fromAddress := cltest.RandomKey{Nonce: nextNonce.Int64()}.MustInsertWithState(t, ethKeyStore)
ethClient := testutils.NewEthClientMockWithDefaultChain(t)
ethClient.On("PendingNonceAt", mock.Anything, fromAddress).Return(uint64(0), nil).Once()
nonceTracker := txmgr.NewNonceTracker(logger.Test(t), txStore, txmgr.NewEvmTxmClient(ethClient, nil))
eb := NewTestEthBroadcaster(t, txStore, ethClient, ethKeyStore, cfg, evmcfg, &testCheckerFactory{}, false, nonceTracker)
// Crashed right after we commit the database transaction that saved the nonce to the eth_tx
inProgressEthTx := mustInsertInProgressEthTxWithAttempt(t, txStore, firstNonce, fromAddress)
ethClient.On("SendTransactionReturnCode", mock.Anything, mock.MatchedBy(func(tx *gethTypes.Transaction) bool {
return tx.Nonce() == uint64(firstNonce)
}), fromAddress).Return(commonclient.Fatal, errors.New("exceeds block gas limit")).Once()
// Do the thing
{
retryable, err := eb.ProcessUnstartedTxs(tests.Context(t), fromAddress)
assert.NoError(t, err)
assert.False(t, retryable)
}
// Check it was saved correctly with its attempt
etx, err := txStore.FindTxWithAttempts(ctx, inProgressEthTx.ID)
require.NoError(t, err)
assert.Nil(t, etx.BroadcastAt)
assert.Nil(t, etx.InitialBroadcastAt)
assert.True(t, etx.Error.Valid)
assert.Equal(t, "exceeds block gas limit", etx.Error.String)
assert.Len(t, etx.TxAttempts, 0)
})`
$DIR/core/chains/evm/txmgr/broadcaster_test.go: `ethClient.On("PendingNonceAt", mock.Anything, fromAddress).Return(uint64(0), nil).Once()`
$DIR/core/chains/evm/txmgr/broadcaster_test.go: `ethClient.On("SendTransactionReturnCode", mock.Anything, mock.MatchedBy(func(tx *gethTypes.Transaction) bool {
return tx.Nonce() == uint64(firstNonce)
}), fromAddress).Return(commonclient.Fatal, errors.New("exceeds block gas limit")).Once()`
$DIR/core/chains/evm/txmgr/broadcaster_test.go: `t.Run("previous run assigned nonce and broadcast and is now in mempool", func(t *testing.T) {
db := pgtest.NewSqlxDB(t)
txStore := cltest.NewTestTxStore(t, db)
ethKeyStore := cltest.NewKeyStore(t, db).Eth()
_, fromAddress := cltest.RandomKey{Nonce: nextNonce.Int64()}.MustInsertWithState(t, ethKeyStore)
ethClient := testutils.NewEthClientMockWithDefaultChain(t)
ethClient.On("PendingNonceAt", mock.Anything, fromAddress).Return(uint64(0), nil).Once()
nonceTracker := txmgr.NewNonceTracker(logger.Test(t), txStore, txmgr.NewEvmTxmClient(ethClient, nil))
eb := NewTestEthBroadcaster(t, txStore, ethClient, ethKeyStore, cfg, evmcfg, &testCheckerFactory{}, false, nonceTracker)
// Crashed right after we commit the database transaction that saved the nonce to the eth_tx
inProgressEthTx := mustInsertInProgressEthTxWithAttempt(t, txStore, firstNonce, fromAddress)
ethClient.On("SendTransactionReturnCode", mock.Anything, mock.MatchedBy(func(tx *gethTypes.Transaction) bool {
return tx.Nonce() == uint64(firstNonce)
}), fromAddress).Return(commonclient.Successful, errors.New("known transaction: a1313bd99a81fb4d8ad1d2e90b67c6b3fa77545c990d6251444b83b70b6f8980")).Once()
// Do the thing
{
retryable, err := eb.ProcessUnstartedTxs(tests.Context(t), fromAddress)
assert.NoError(t, err)
assert.False(t, retryable)
}
// Check it was saved correctly with its attempt
etx, err := txStore.FindTxWithAttempts(ctx, inProgressEthTx.ID)
require.NoError(t, err)
assert.NotNil(t, etx.BroadcastAt)
assert.NotNil(t, etx.InitialBroadcastAt)
assert.False(t, etx.Error.Valid)
assert.Len(t, etx.TxAttempts, 1)
})`
$DIR/core/chains/evm/txmgr/broadcaster_test.go: `ethClient.On("PendingNonceAt", mock.Anything, fromAddress).Return(uint64(0), nil).Once()`
$DIR/core/chains/evm/txmgr/broadcaster_test.go: `ethClient.On("SendTransactionReturnCode", mock.Anything, mock.MatchedBy(func(tx *gethTypes.Transaction) bool {
return tx.Nonce() == uint64(firstNonce)
}), fromAddress).Return(commonclient.Successful, errors.New("known transaction: a1313bd99a81fb4d8ad1d2e90b67c6b3fa77545c990d6251444b83b70b6f8980")).Once()`
$DIR/core/chains/evm/txmgr/broadcaster_test.go: `t.Run("previous run assigned nonce and broadcast and now the transaction has been confirmed", func(t *testing.T) {
db := pgtest.NewSqlxDB(t)
txStore := cltest.NewTestTxStore(t, db)
ethKeyStore := cltest.NewKeyStore(t, db).Eth()
_, fromAddress := cltest.RandomKey{Nonce: nextNonce.Int64()}.MustInsertWithState(t, ethKeyStore)
ethClient := testutils.NewEthClientMockWithDefaultChain(t)
ethClient.On("PendingNonceAt", mock.Anything, fromAddress).Return(uint64(0), nil).Once()
nonceTracker := txmgr.NewNonceTracker(logger.Test(t), txStore, txmgr.NewEvmTxmClient(ethClient, nil))
eb := NewTestEthBroadcaster(t, txStore, ethClient, ethKeyStore, cfg, evmcfg, &testCheckerFactory{}, false, nonceTracker)
// Crashed right after we commit the database transaction that saved the nonce to the eth_tx
inProgressEthTx := mustInsertInProgressEthTxWithAttempt(t, txStore, firstNonce, fromAddress)
ethClient.On("SendTransactionReturnCode", mock.Anything, mock.MatchedBy(func(tx *gethTypes.Transaction) bool {
return tx.Nonce() == uint64(firstNonce)
}), fromAddress).Return(commonclient.TransactionAlreadyKnown, errors.New("nonce too low")).Once()
// Do the thing
{
retryable, err := eb.ProcessUnstartedTxs(tests.Context(t), fromAddress)
assert.NoError(t, err)
assert.False(t, retryable)
}
// Check it was saved correctly with its attempt
etx, err := txStore.FindTxWithAttempts(ctx, inProgressEthTx.ID)
require.NoError(t, err)
require.NotNil(t, etx.BroadcastAt)
assert.Equal(t, *etx.BroadcastAt, etx.CreatedAt)
assert.NotNil(t, etx.InitialBroadcastAt)
assert.False(t, etx.Error.Valid)
assert.Len(t, etx.TxAttempts, 1)
})`
$DIR/core/chains/evm/txmgr/broadcaster_test.go: `ethClient.On("PendingNonceAt", mock.Anything, fromAddress).Return(uint64(0), nil).Once()`
$DIR/core/chains/evm/txmgr/broadcaster_test.go: `ethClient.On("SendTransactionReturnCode", mock.Anything, mock.MatchedBy(func(tx *gethTypes.Transaction) bool {
return tx.Nonce() == uint64(firstNonce)
}), fromAddress).Return(commonclient.TransactionAlreadyKnown, errors.New("nonce too low")).Once()`
$DIR/core/chains/evm/txmgr/broadcaster_test.go: `t.Run("previous run assigned nonce and then failed to reach node for some reason and node is still down", func(t *testing.T) {
failedToReachNodeError := context.DeadlineExceeded
db := pgtest.NewSqlxDB(t)
txStore := cltest.NewTestTxStore(t, db)
ethKeyStore := cltest.NewKeyStore(t, db).Eth()
_, fromAddress := cltest.RandomKey{Nonce: nextNonce.Int64()}.MustInsertWithState(t, ethKeyStore)
ethClient := testutils.NewEthClientMockWithDefaultChain(t)
ethClient.On("PendingNonceAt", mock.Anything, fromAddress).Return(uint64(0), nil).Once()
nonceTracker := txmgr.NewNonceTracker(logger.Test(t), txStore, txmgr.NewEvmTxmClient(ethClient, nil))
eb := NewTestEthBroadcaster(t, txStore, ethClient, ethKeyStore, cfg, evmcfg, &testCheckerFactory{}, false, nonceTracker)
// Crashed right after we commit the database transaction that saved the nonce to the eth_tx
inProgressEthTx := mustInsertInProgressEthTxWithAttempt(t, txStore, firstNonce, fromAddress)
ethClient.On("SendTransactionReturnCode", mock.Anything, mock.MatchedBy(func(tx *gethTypes.Transaction) bool {
return tx.Nonce() == uint64(firstNonce)
}), fromAddress).Return(commonclient.Retryable, failedToReachNodeError).Once()
// Do the thing
retryable, err := eb.ProcessUnstartedTxs(tests.Context(t), fromAddress)
require.Error(t, err)
assert.Contains(t, err.Error(), failedToReachNodeError.Error())
assert.True(t, retryable)
// Check it was left in the unfinished state
etx, err := txStore.FindTxWithAttempts(ctx, inProgressEthTx.ID)
require.NoError(t, err)
assert.Nil(t, etx.BroadcastAt)
assert.Nil(t, etx.InitialBroadcastAt)
assert.Equal(t, nextNonce, *etx.Sequence)
assert.False(t, etx.Error.Valid)
assert.Len(t, etx.TxAttempts, 1)
})`
$DIR/core/chains/evm/txmgr/broadcaster_test.go: `ethClient.On("PendingNonceAt", mock.Anything, fromAddress).Return(uint64(0), nil).Once()`
$DIR/core/chains/evm/txmgr/broadcaster_test.go: `ethClient.On("SendTransactionReturnCode", mock.Anything, mock.MatchedBy(func(tx *gethTypes.Transaction) bool {
return tx.Nonce() == uint64(firstNonce)
}), fromAddress).Return(commonclient.Retryable, failedToReachNodeError).Once()`
$DIR/core/chains/evm/txmgr/broadcaster_test.go: `c.EVM[0].GasEstimator.PriceDefault = assets.NewWeiI(500000000000)`
$DIR/core/chains/evm/txmgr/broadcaster_test.go: `ethClient.On("PendingNonceAt", mock.Anything, fromAddress).Return(uint64(0), nil).Once()`
$DIR/core/chains/evm/txmgr/broadcaster_test.go: `ethClient.On("SendTransactionReturnCode", mock.Anything, mock.MatchedBy(func(tx *gethTypes.Transaction) bool {
// Ensure that the gas price is the same as the original attempt
s, e := txmgr.GetGethSignedTx(attempt.SignedRawTx)
require.NoError(t, e)
return tx.Nonce() == uint64(firstNonce) && tx.GasPrice().Int64() == s.GasPrice().Int64()
}), fromAddress).Return(commonclient.Successful, errors.New("known transaction: a1313bd99a81fb4d8ad1d2e90b67c6b3fa77545c990d6251444b83b70b6f8980")).Once()`
$DIR/core/chains/evm/txmgr/broadcaster_test.go: `attempt = etx.TxAttempts[0]`
$DIR/core/chains/evm/txmgr/broadcaster_test.go: `ethClient.On("PendingNonceAt", mock.Anything, fromAddress).Return(uint64(0), nil).Once()`
$DIR/core/chains/evm/txmgr/broadcaster_test.go: `t.Run("if external wallet sent a transaction from the account and now the nonce is one higher than it should be and we got replacement underpriced then we assume a previous transaction of ours was the one that succeeded, and hand off to EthConfirmer", func(t *testing.T) {
mustCreateUnstartedTx(t, txStore, fromAddress, toAddress, encodedPayload, gasLimit, value, testutils.FixtureChainID)
// First send, replacement underpriced
ethClient.On("SendTransactionReturnCode", mock.Anything, mock.MatchedBy(func(tx *gethTypes.Transaction) bool {
return tx.Nonce() == uint64(0)
}), fromAddress).Return(commonclient.Successful, errors.New("replacement transaction underpriced")).Once()
// Do the thing
retryable, err := eb.ProcessUnstartedTxs(ctx, fromAddress)
assert.NoError(t, err)
assert.False(t, retryable)
// Check that the transaction was saved correctly with its attempt
// We assume success and hand off to eth confirmer to eventually mark it as failed
var latestID int64
var etx1 txmgr.Tx
require.NoError(t, db.Get(&latestID, "SELECT max(id) FROM evm.txes"))
etx1, err = txStore.FindTxWithAttempts(ctx, latestID)
require.NoError(t, err)
require.NotNil(t, etx1.BroadcastAt)
assert.NotEqual(t, etx1.CreatedAt, *etx1.BroadcastAt)
assert.NotNil(t, etx1.InitialBroadcastAt)
require.NotNil(t, etx1.Sequence)
assert.Equal(t, evmtypes.Nonce(0), *etx1.Sequence)
assert.False(t, etx1.Error.Valid)
assert.Len(t, etx1.TxAttempts, 1)
// Check that the local nonce was incremented by one
finalNextNonce := getLocalNextNonce(t, nonceTracker, fromAddress)
require.NoError(t, err)
require.NotNil(t, finalNextNonce)
require.Equal(t, int64(1), int64(finalNextNonce))
})`
$DIR/core/chains/evm/txmgr/broadcaster_test.go: `mustCreateUnstartedTx(t, txStore, fromAddress, toAddress, encodedPayload, gasLimit, value, testutils.FixtureChainID)`
$DIR/core/chains/evm/txmgr/broadcaster_test.go: `ethClient.On("SendTransactionReturnCode", mock.Anything, mock.MatchedBy(func(tx *gethTypes.Transaction) bool {
return tx.Nonce() == uint64(0)
}), fromAddress).Return(commonclient.Successful, errors.New("replacement transaction underpriced")).Once()`
$DIR/core/chains/evm/txmgr/broadcaster_test.go: `etx1, err = txStore.FindTxWithAttempts(ctx, latestID)`
$DIR/core/chains/evm/txmgr/broadcaster_test.go: `t.Run("geth Client returns an error in the fatal errors category", func(t *testing.T) {
fatalErrorExample := "exceeds block gas limit"
localNextNonce := getLocalNextNonce(t, nonceTracker, fromAddress)
t.Run("without callback", func(t *testing.T) {
etx := mustCreateUnstartedTx(t, txStore, fromAddress, toAddress, encodedPayload, gasLimit, value, testutils.FixtureChainID)
ethClient.On("SendTransactionReturnCode", mock.Anything, mock.MatchedBy(func(tx *gethTypes.Transaction) bool {
return tx.Nonce() == localNextNonce
}), fromAddress).Return(commonclient.Fatal, errors.New(fatalErrorExample)).Once()
retryable, err := eb.ProcessUnstartedTxs(ctx, fromAddress)
assert.NoError(t, err)
assert.False(t, retryable)
// Check it was saved correctly with its attempt
etx, err = txStore.FindTxWithAttempts(ctx, etx.ID)
require.NoError(t, err)
assert.Nil(t, etx.BroadcastAt)
assert.Nil(t, etx.InitialBroadcastAt)
require.Nil(t, etx.Sequence)
assert.True(t, etx.Error.Valid)
assert.Contains(t, etx.Error.String, "exceeds block gas limit")
assert.Len(t, etx.TxAttempts, 0)
// Check that the key had its nonce reset
var nonce evmtypes.Nonce
nonce, err = nonceTracker.GetNextSequence(ctx, fromAddress)
require.NoError(t, err)
// Saved NextNonce must be the same as before because this transaction
// was not accepted by the eth node and never can be
require.Equal(t, int64(localNextNonce), int64(nonce))
})
t.Run("with callback", func(t *testing.T) {
run := cltest.MustInsertPipelineRun(t, db)
tr := cltest.MustInsertUnfinishedPipelineTaskRun(t, db, run.ID)
etx := txmgr.Tx{
FromAddress: fromAddress,
ToAddress: toAddress,
EncodedPayload: encodedPayload,
Value: value,
FeeLimit: gasLimit,
State: txmgrcommon.TxUnstarted,
PipelineTaskRunID: uuid.NullUUID{UUID: tr.ID, Valid: true},
SignalCallback: true,
}
t.Run("with erroring callback bails out", func(t *testing.T) {
require.NoError(t, txStore.InsertTx(tests.Context(t), &etx))
fn := func(ctx context.Context, id uuid.UUID, result interface{}, err error) error {
return errors.New("something exploded in the callback")
}
eb.SetResumeCallback(fn)
ethClient.On("SendTransactionReturnCode", mock.Anything, mock.MatchedBy(func(tx *gethTypes.Transaction) bool {
return tx.Nonce() == localNextNonce
}), fromAddress).Return(commonclient.Fatal, errors.New(fatalErrorExample)).Once()
retryable, err := eb.ProcessUnstartedTxs(ctx, fromAddress)
require.Error(t, err)
require.Contains(t, err.Error(), "something exploded in the callback")
assert.True(t, retryable)
})
t.Run("calls resume with error", func(t *testing.T) {
fn := func(ctx context.Context, id uuid.UUID, result interface{}, err error) error {
require.Equal(t, id, tr.ID)
require.Nil(t, result)
require.Error(t, err)
require.Contains(t, err.Error(), "fatal error while sending transaction: exceeds block gas limit")
return nil
}
eb.SetResumeCallback(fn)
ethClient.On("SendTransactionReturnCode", mock.Anything, mock.MatchedBy(func(tx *gethTypes.Transaction) bool {
return tx.Nonce() == localNextNonce
}), fromAddress).Return(commonclient.Fatal, errors.New(fatalErrorExample)).Once()
{
retryable, err := eb.ProcessUnstartedTxs(ctx, fromAddress)
assert.NoError(t, err)
assert.False(t, retryable)
}
// same as the parent test, but callback is set by ctor
t.Run("callback set by ctor", func(t *testing.T) {
estimator := gas.NewEvmFeeEstimator(lggr, func(lggr logger.Logger) gas.EvmEstimator {
return gas.NewFixedPriceEstimator(evmcfg.EVM().GasEstimator(), nil, evmcfg.EVM().GasEstimator().BlockHistory(), lggr, nil)
}, evmcfg.EVM().GasEstimator().EIP1559DynamicFees(), evmcfg.EVM().GasEstimator())
txBuilder := txmgr.NewEvmTxAttemptBuilder(*ethClient.ConfiguredChainID(), evmcfg.EVM().GasEstimator(), ethKeyStore, estimator)
localNextNonce = getLocalNextNonce(t, nonceTracker, fromAddress)
eb2 := txmgr.NewEvmBroadcaster(txStore, txmClient, txmgr.NewEvmTxmConfig(evmcfg.EVM()), txmgr.NewEvmTxmFeeConfig(evmcfg.EVM().GasEstimator()), evmcfg.EVM().Transactions(), cfg.Database().Listener(), ethKeyStore, txBuilder, lggr, &testCheckerFactory{}, false)
retryable, err := eb2.ProcessUnstartedTxs(ctx, fromAddress)
assert.NoError(t, err)
assert.False(t, retryable)
})
})
})
})`
$DIR/core/chains/evm/txmgr/broadcaster_test.go: `t.Run("without callback", func(t *testing.T) {
etx := mustCreateUnstartedTx(t, txStore, fromAddress, toAddress, encodedPayload, gasLimit, value, testutils.FixtureChainID)
ethClient.On("SendTransactionReturnCode", mock.Anything, mock.MatchedBy(func(tx *gethTypes.Transaction) bool {
return tx.Nonce() == localNextNonce
}), fromAddress).Return(commonclient.Fatal, errors.New(fatalErrorExample)).Once()
retryable, err := eb.ProcessUnstartedTxs(ctx, fromAddress)
assert.NoError(t, err)
assert.False(t, retryable)
// Check it was saved correctly with its attempt
etx, err = txStore.FindTxWithAttempts(ctx, etx.ID)
require.NoError(t, err)
assert.Nil(t, etx.BroadcastAt)
assert.Nil(t, etx.InitialBroadcastAt)
require.Nil(t, etx.Sequence)
assert.True(t, etx.Error.Valid)
assert.Contains(t, etx.Error.String, "exceeds block gas limit")
assert.Len(t, etx.TxAttempts, 0)
// Check that the key had its nonce reset
var nonce evmtypes.Nonce
nonce, err = nonceTracker.GetNextSequence(ctx, fromAddress)
require.NoError(t, err)
// Saved NextNonce must be the same as before because this transaction
// was not accepted by the eth node and never can be
require.Equal(t, int64(localNextNonce), int64(nonce))
})`
$DIR/core/chains/evm/txmgr/broadcaster_test.go: `ethClient.On("SendTransactionReturnCode", mock.Anything, mock.MatchedBy(func(tx *gethTypes.Transaction) bool {
return tx.Nonce() == localNextNonce
}), fromAddress).Return(commonclient.Fatal, errors.New(fatalErrorExample)).Once()`
$DIR/core/chains/evm/txmgr/broadcaster_test.go: `etx, err = txStore.FindTxWithAttempts(ctx, etx.ID)`
$DIR/core/chains/evm/txmgr/broadcaster_test.go: `nonce, err = nonceTracker.GetNextSequence(ctx, fromAddress)`
$DIR/core/chains/evm/txmgr/broadcaster_test.go: `t.Run("with callback", func(t *testing.T) {
run := cltest.MustInsertPipelineRun(t, db)
tr := cltest.MustInsertUnfinishedPipelineTaskRun(t, db, run.ID)
etx := txmgr.Tx{
FromAddress: fromAddress,
ToAddress: toAddress,
EncodedPayload: encodedPayload,
Value: value,
FeeLimit: gasLimit,
State: txmgrcommon.TxUnstarted,
PipelineTaskRunID: uuid.NullUUID{UUID: tr.ID, Valid: true},
SignalCallback: true,
}
t.Run("with erroring callback bails out", func(t *testing.T) {
require.NoError(t, txStore.InsertTx(tests.Context(t), &etx))
fn := func(ctx context.Context, id uuid.UUID, result interface{}, err error) error {
return errors.New("something exploded in the callback")
}
eb.SetResumeCallback(fn)
ethClient.On("SendTransactionReturnCode", mock.Anything, mock.MatchedBy(func(tx *gethTypes.Transaction) bool {
return tx.Nonce() == localNextNonce
}), fromAddress).Return(commonclient.Fatal, errors.New(fatalErrorExample)).Once()
retryable, err := eb.ProcessUnstartedTxs(ctx, fromAddress)
require.Error(t, err)
require.Contains(t, err.Error(), "something exploded in the callback")
assert.True(t, retryable)
})
t.Run("calls resume with error", func(t *testing.T) {
fn := func(ctx context.Context, id uuid.UUID, result interface{}, err error) error {
require.Equal(t, id, tr.ID)
require.Nil(t, result)
require.Error(t, err)
require.Contains(t, err.Error(), "fatal error while sending transaction: exceeds block gas limit")
return nil
}
eb.SetResumeCallback(fn)
ethClient.On("SendTransactionReturnCode", mock.Anything, mock.MatchedBy(func(tx *gethTypes.Transaction) bool {
return tx.Nonce() == localNextNonce
}), fromAddress).Return(commonclient.Fatal, errors.New(fatalErrorExample)).Once()
{
retryable, err := eb.ProcessUnstartedTxs(ctx, fromAddress)
assert.NoError(t, err)
assert.False(t, retryable)
}
// same as the parent test, but callback is set by ctor
t.Run("callback set by ctor", func(t *testing.T) {
estimator := gas.NewEvmFeeEstimator(lggr, func(lggr logger.Logger) gas.EvmEstimator {
return gas.NewFixedPriceEstimator(evmcfg.EVM().GasEstimator(), nil, evmcfg.EVM().GasEstimator().BlockHistory(), lggr, nil)
}, evmcfg.EVM().GasEstimator().EIP1559DynamicFees(), evmcfg.EVM().GasEstimator())
txBuilder := txmgr.NewEvmTxAttemptBuilder(*ethClient.ConfiguredChainID(), evmcfg.EVM().GasEstimator(), ethKeyStore, estimator)
localNextNonce = getLocalNextNonce(t, nonceTracker, fromAddress)
eb2 := txmgr.NewEvmBroadcaster(txStore, txmClient, txmgr.NewEvmTxmConfig(evmcfg.EVM()), txmgr.NewEvmTxmFeeConfig(evmcfg.EVM().GasEstimator()), evmcfg.EVM().Transactions(), cfg.Database().Listener(), ethKeyStore, txBuilder, lggr, &testCheckerFactory{}, false)
retryable, err := eb2.ProcessUnstartedTxs(ctx, fromAddress)
assert.NoError(t, err)
assert.False(t, retryable)
})
})
})`
$DIR/core/chains/evm/txmgr/broadcaster_test.go: `t.Run("with erroring callback bails out", func(t *testing.T) {
require.NoError(t, txStore.InsertTx(tests.Context(t), &etx))
fn := func(ctx context.Context, id uuid.UUID, result interface{}, err error) error {
return errors.New("something exploded in the callback")
}
eb.SetResumeCallback(fn)
ethClient.On("SendTransactionReturnCode", mock.Anything, mock.MatchedBy(func(tx *gethTypes.Transaction) bool {
return tx.Nonce() == localNextNonce
}), fromAddress).Return(commonclient.Fatal, errors.New(fatalErrorExample)).Once()
retryable, err := eb.ProcessUnstartedTxs(ctx, fromAddress)
require.Error(t, err)
require.Contains(t, err.Error(), "something exploded in the callback")
assert.True(t, retryable)
})`
$DIR/core/chains/evm/txmgr/broadcaster_test.go: `eb.SetResumeCallback(fn)`
$DIR/core/chains/evm/txmgr/broadcaster_test.go: `ethClient.On("SendTransactionReturnCode", mock.Anything, mock.MatchedBy(func(tx *gethTypes.Transaction) bool {
return tx.Nonce() == localNextNonce
}), fromAddress).Return(commonclient.Fatal, errors.New(fatalErrorExample)).Once()`
$DIR/core/chains/evm/txmgr/broadcaster_test.go: `t.Run("calls resume with error", func(t *testing.T) {
fn := func(ctx context.Context, id uuid.UUID, result interface{}, err error) error {
require.Equal(t, id, tr.ID)
require.Nil(t, result)
require.Error(t, err)
require.Contains(t, err.Error(), "fatal error while sending transaction: exceeds block gas limit")
return nil
}
eb.SetResumeCallback(fn)
ethClient.On("SendTransactionReturnCode", mock.Anything, mock.MatchedBy(func(tx *gethTypes.Transaction) bool {
return tx.Nonce() == localNextNonce
}), fromAddress).Return(commonclient.Fatal, errors.New(fatalErrorExample)).Once()
{
retryable, err := eb.ProcessUnstartedTxs(ctx, fromAddress)
assert.NoError(t, err)
assert.False(t, retryable)
}
// same as the parent test, but callback is set by ctor
t.Run("callback set by ctor", func(t *testing.T) {
estimator := gas.NewEvmFeeEstimator(lggr, func(lggr logger.Logger) gas.EvmEstimator {
return gas.NewFixedPriceEstimator(evmcfg.EVM().GasEstimator(), nil, evmcfg.EVM().GasEstimator().BlockHistory(), lggr, nil)
}, evmcfg.EVM().GasEstimator().EIP1559DynamicFees(), evmcfg.EVM().GasEstimator())
txBuilder := txmgr.NewEvmTxAttemptBuilder(*ethClient.ConfiguredChainID(), evmcfg.EVM().GasEstimator(), ethKeyStore, estimator)
localNextNonce = getLocalNextNonce(t, nonceTracker, fromAddress)
eb2 := txmgr.NewEvmBroadcaster(txStore, txmClient, txmgr.NewEvmTxmConfig(evmcfg.EVM()), txmgr.NewEvmTxmFeeConfig(evmcfg.EVM().GasEstimator()), evmcfg.EVM().Transactions(), cfg.Database().Listener(), ethKeyStore, txBuilder, lggr, &testCheckerFactory{}, false)
retryable, err := eb2.ProcessUnstartedTxs(ctx, fromAddress)
assert.NoError(t, err)
assert.False(t, retryable)
})
})`
$DIR/core/chains/evm/txmgr/broadcaster_test.go: `eb.SetResumeCallback(fn)`
$DIR/core/chains/evm/txmgr/broadcaster_test.go: `ethClient.On("SendTransactionReturnCode", mock.Anything, mock.MatchedBy(func(tx *gethTypes.Transaction) bool {
return tx.Nonce() == localNextNonce
}), fromAddress).Return(commonclient.Fatal, errors.New(fatalErrorExample)).Once()`
$DIR/core/chains/evm/txmgr/broadcaster_test.go: `t.Run("callback set by ctor", func(t *testing.T) {
estimator := gas.NewEvmFeeEstimator(lggr, func(lggr logger.Logger) gas.EvmEstimator {
return gas.NewFixedPriceEstimator(evmcfg.EVM().GasEstimator(), nil, evmcfg.EVM().GasEstimator().BlockHistory(), lggr, nil)
}, evmcfg.EVM().GasEstimator().EIP1559DynamicFees(), evmcfg.EVM().GasEstimator())
txBuilder := txmgr.NewEvmTxAttemptBuilder(*ethClient.ConfiguredChainID(), evmcfg.EVM().GasEstimator(), ethKeyStore, estimator)
localNextNonce = getLocalNextNonce(t, nonceTracker, fromAddress)
eb2 := txmgr.NewEvmBroadcaster(txStore, txmClient, txmgr.NewEvmTxmConfig(evmcfg.EVM()), txmgr.NewEvmTxmFeeConfig(evmcfg.EVM().GasEstimator()), evmcfg.EVM().Transactions(), cfg.Database().Listener(), ethKeyStore, txBuilder, lggr, &testCheckerFactory{}, false)
retryable, err := eb2.ProcessUnstartedTxs(ctx, fromAddress)
assert.NoError(t, err)
assert.False(t, retryable)
})`
$DIR/core/chains/evm/txmgr/broadcaster_test.go: `localNextNonce = getLocalNextNonce(t, nonceTracker, fromAddress)`
$DIR/core/chains/evm/txmgr/broadcaster_test.go: `eb.SetResumeCallback(nil)`
$DIR/core/chains/evm/txmgr/broadcaster_test.go: `t.Run("geth Client fails with error indicating that the transaction was too expensive", func(t *testing.T) {
TxFeeExceedsCapError := "tx fee (1.10 ether) exceeds the configured cap (1.00 ether)"
localNextNonce := getLocalNextNonce(t, nonceTracker, fromAddress)
ethClient.On("PendingNonceAt", mock.Anything, fromAddress).Return(localNextNonce, nil).Once()
etx := mustCreateUnstartedTx(t, txStore, fromAddress, toAddress, encodedPayload, gasLimit, value, testutils.FixtureChainID)
ethClient.On("SendTransactionReturnCode", mock.Anything, mock.MatchedBy(func(tx *gethTypes.Transaction) bool {
return tx.Nonce() == localNextNonce
}), fromAddress).Return(commonclient.ExceedsMaxFee, errors.New(TxFeeExceedsCapError)).Twice()
// In the first case, the tx was NOT accepted into the mempool. In the case
// of multiple RPC nodes, it is possible that it can be accepted by
// another node even if the primary one returns "exceeds the configured
// cap"
retryable, err := eb.ProcessUnstartedTxs(ctx, fromAddress)
require.Error(t, err)
assert.Contains(t, err.Error(), "tx fee (1.10 ether) exceeds the configured cap (1.00 ether)")
assert.Contains(t, err.Error(), "error while sending transaction")
assert.True(t, retryable)
// Check it was saved with its attempt
etx, err = txStore.FindTxWithAttempts(ctx, etx.ID)
require.NoError(t, err)
assert.Nil(t, etx.BroadcastAt)
assert.Nil(t, etx.InitialBroadcastAt) // Note that InitialBroadcastAt really means "InitialDefinitelySuccessfulBroadcastAt"
assert.Equal(t, evmtypes.Nonce(localNextNonce), *etx.Sequence)
assert.False(t, etx.Error.Valid)
assert.Len(t, etx.TxAttempts, 1)
attempt := etx.TxAttempts[0]
assert.Equal(t, txmgrtypes.TxAttemptInProgress, attempt.State)
// Check that the key had its nonce reset
var nonce evmtypes.Nonce
nonce, err = nonceTracker.GetNextSequence(ctx, fromAddress)
require.NoError(t, err)
// Saved NextNonce must be the same as before because this transaction
// was not accepted by the eth node and never can be
require.Equal(t, int64(localNextNonce), int64(nonce))
// On the second try, the tx has been accepted into the mempool
ethClient.On("PendingNonceAt", mock.Anything, fromAddress).Return(localNextNonce+1, nil).Once()
retryable, err = eb.ProcessUnstartedTxs(ctx, fromAddress)
assert.NoError(t, err)
assert.False(t, retryable)
// Check it was saved with its attempt
etx, err = txStore.FindTxWithAttempts(ctx, etx.ID)
require.NoError(t, err)
assert.NotNil(t, etx.BroadcastAt)
assert.NotNil(t, etx.InitialBroadcastAt) // Note that InitialBroadcastAt really means "InitialDefinitelySuccessfulBroadcastAt"
assert.Equal(t, evmtypes.Nonce(localNextNonce), *etx.Sequence)
assert.False(t, etx.Error.Valid)
assert.Len(t, etx.TxAttempts, 1)
attempt = etx.TxAttempts[0]
assert.Equal(t, txmgrtypes.TxAttemptBroadcast, attempt.State)
})`
$DIR/core/chains/evm/txmgr/broadcaster_test.go: `ethClient.On("PendingNonceAt", mock.Anything, fromAddress).Return(localNextNonce, nil).Once()`
$DIR/core/chains/evm/txmgr/broadcaster_test.go: `ethClient.On("SendTransactionReturnCode", mock.Anything, mock.MatchedBy(func(tx *gethTypes.Transaction) bool {
return tx.Nonce() == localNextNonce
}), fromAddress).Return(commonclient.ExceedsMaxFee, errors.New(TxFeeExceedsCapError)).Twice()`
$DIR/core/chains/evm/txmgr/broadcaster_test.go: `etx, err = txStore.FindTxWithAttempts(ctx, etx.ID)`
$DIR/core/chains/evm/txmgr/broadcaster_test.go: `nonce, err = nonceTracker.GetNextSequence(ctx, fromAddress)`
$DIR/core/chains/evm/txmgr/broadcaster_test.go: `ethClient.On("PendingNonceAt", mock.Anything, fromAddress).Return(localNextNonce+1, nil).Once()`
$DIR/core/chains/evm/txmgr/broadcaster_test.go: `retryable, err = eb.ProcessUnstartedTxs(ctx, fromAddress)`
$DIR/core/chains/evm/txmgr/broadcaster_test.go: `etx, err = txStore.FindTxWithAttempts(ctx, etx.ID)`
$DIR/core/chains/evm/txmgr/broadcaster_test.go: `attempt = etx.TxAttempts[0]`
$DIR/core/chains/evm/txmgr/broadcaster_test.go: `t.Run("eth Client call fails with an unexpected random error, and transaction was not accepted into mempool", func(t *testing.T) {
retryableErrorExample := "some unknown error"
localNextNonce := getLocalNextNonce(t, nonceTracker, fromAddress)
etx := mustCreateUnstartedTx(t, txStore, fromAddress, toAddress, encodedPayload, gasLimit, value, testutils.FixtureChainID)
ethClient.On("SendTransactionReturnCode", mock.Anything, mock.MatchedBy(func(tx *gethTypes.Transaction) bool {
return tx.Nonce() == localNextNonce
}), fromAddress).Return(commonclient.Unknown, errors.New(retryableErrorExample)).Once()
// Nonce is the same as localNextNonce, implying that this sent transaction has not been accepted
ethClient.On("PendingNonceAt", mock.Anything, fromAddress).Return(localNextNonce, nil).Once()
// Do the thing
retryable, err := eb.ProcessUnstartedTxs(ctx, fromAddress)
require.Error(t, err)
require.Contains(t, err.Error(), retryableErrorExample)
assert.True(t, retryable)
// Check it was saved correctly with its attempt
etx, err = txStore.FindTxWithAttempts(ctx, etx.ID)
require.NoError(t, err)
assert.Nil(t, etx.BroadcastAt)
assert.Nil(t, etx.InitialBroadcastAt)
require.NotNil(t, etx.Sequence)
assert.False(t, etx.Error.Valid)
assert.Equal(t, txmgrcommon.TxInProgress, etx.State)
assert.Len(t, etx.TxAttempts, 1)
attempt := etx.TxAttempts[0]
assert.Equal(t, txmgrtypes.TxAttemptInProgress, attempt.State)
// Now on the second run, it is successful
ethClient.On("SendTransactionReturnCode", mock.Anything, mock.MatchedBy(func(tx *gethTypes.Transaction) bool {
return tx.Nonce() == localNextNonce
}), fromAddress).Return(commonclient.Successful, nil).Once()
retryable, err = eb.ProcessUnstartedTxs(ctx, fromAddress)
assert.NoError(t, err)
assert.False(t, retryable)
// Check it was saved correctly with its attempt
etx, err = txStore.FindTxWithAttempts(ctx, etx.ID)
require.NoError(t, err)
assert.NotNil(t, etx.BroadcastAt)
assert.NotNil(t, etx.InitialBroadcastAt)
require.NotNil(t, etx.Sequence)
assert.False(t, etx.Error.Valid)
assert.Equal(t, txmgrcommon.TxUnconfirmed, etx.State)
assert.Len(t, etx.TxAttempts, 1)
attempt = etx.TxAttempts[0]
assert.Equal(t, txmgrtypes.TxAttemptBroadcast, attempt.State)
})`
$DIR/core/chains/evm/txmgr/broadcaster_test.go: `ethClient.On("SendTransactionReturnCode", mock.Anything, mock.MatchedBy(func(tx *gethTypes.Transaction) bool {
return tx.Nonce() == localNextNonce
}), fromAddress).Return(commonclient.Unknown, errors.New(retryableErrorExample)).Once()`
$DIR/core/chains/evm/txmgr/broadcaster_test.go: `ethClient.On("PendingNonceAt", mock.Anything, fromAddress).Return(localNextNonce, nil).Once()`
$DIR/core/chains/evm/txmgr/broadcaster_test.go: `etx, err = txStore.FindTxWithAttempts(ctx, etx.ID)`
$DIR/core/chains/evm/txmgr/broadcaster_test.go: `ethClient.On("SendTransactionReturnCode", mock.Anything, mock.MatchedBy(func(tx *gethTypes.Transaction) bool {
return tx.Nonce() == localNextNonce
}), fromAddress).Return(commonclient.Successful, nil).Once()`
$DIR/core/chains/evm/txmgr/broadcaster_test.go: `retryable, err = eb.ProcessUnstartedTxs(ctx, fromAddress)`
$DIR/core/chains/evm/txmgr/broadcaster_test.go: `etx, err = txStore.FindTxWithAttempts(ctx, etx.ID)`
$DIR/core/chains/evm/txmgr/broadcaster_test.go: `attempt = etx.TxAttempts[0]`
$DIR/core/chains/evm/txmgr/broadcaster_test.go: `t.Run("eth client call fails with an unexpected random error, and the nonce check also subsequently fails", func(t *testing.T) {
retryableErrorExample := "some unknown error"
localNextNonce := getLocalNextNonce(t, nonceTracker, fromAddress)
etx := mustCreateUnstartedTx(t, txStore, fromAddress, toAddress, encodedPayload, gasLimit, value, testutils.FixtureChainID)
ethClient.On("SendTransactionReturnCode", mock.Anything, mock.MatchedBy(func(tx *gethTypes.Transaction) bool {
return tx.Nonce() == localNextNonce
}), fromAddress).Return(commonclient.Unknown, errors.New(retryableErrorExample)).Once()
ethClient.On("PendingNonceAt", mock.Anything, fromAddress).Return(uint64(0), errors.New("pending nonce fetch failed")).Once()
// Do the thing
retryable, err := eb.ProcessUnstartedTxs(ctx, fromAddress)
require.Error(t, err)
require.Contains(t, err.Error(), retryableErrorExample)
require.Contains(t, err.Error(), "pending nonce fetch failed")
assert.True(t, retryable)
// Check it was saved correctly with its attempt
etx, err = txStore.FindTxWithAttempts(ctx, etx.ID)
require.NoError(t, err)
assert.Nil(t, etx.BroadcastAt)
assert.Nil(t, etx.InitialBroadcastAt)
require.NotNil(t, etx.Sequence)
assert.False(t, etx.Error.Valid)
assert.Equal(t, txmgrcommon.TxInProgress, etx.State)
assert.Len(t, etx.TxAttempts, 1)
attempt := etx.TxAttempts[0]
assert.Equal(t, txmgrtypes.TxAttemptInProgress, attempt.State)
// Now on the second run, it is successful
ethClient.On("SendTransactionReturnCode", mock.Anything, mock.MatchedBy(func(tx *gethTypes.Transaction) bool {
return tx.Nonce() == localNextNonce
}), fromAddress).Return(commonclient.Successful, nil).Once()
retryable, err = eb.ProcessUnstartedTxs(ctx, fromAddress)
assert.NoError(t, err)
assert.False(t, retryable)
// Check it was saved correctly with its attempt
etx, err = txStore.FindTxWithAttempts(ctx, etx.ID)
require.NoError(t, err)
assert.NotNil(t, etx.BroadcastAt)
assert.NotNil(t, etx.InitialBroadcastAt)
require.NotNil(t, etx.Sequence)
assert.False(t, etx.Error.Valid)
assert.Equal(t, txmgrcommon.TxUnconfirmed, etx.State)
assert.Len(t, etx.TxAttempts, 1)
attempt = etx.TxAttempts[0]
assert.Equal(t, txmgrtypes.TxAttemptBroadcast, attempt.State)
})`
$DIR/core/chains/evm/txmgr/broadcaster_test.go: `ethClient.On("SendTransactionReturnCode", mock.Anything, mock.MatchedBy(func(tx *gethTypes.Transaction) bool {
return tx.Nonce() == localNextNonce
}), fromAddress).Return(commonclient.Unknown, errors.New(retryableErrorExample)).Once()`
$DIR/core/chains/evm/txmgr/broadcaster_test.go: `ethClient.On("PendingNonceAt", mock.Anything, fromAddress).Return(uint64(0), errors.New("pending nonce fetch failed")).Once()`
$DIR/core/chains/evm/txmgr/broadcaster_test.go: `etx, err = txStore.FindTxWithAttempts(ctx, etx.ID)`
$DIR/core/chains/evm/txmgr/broadcaster_test.go: `ethClient.On("SendTransactionReturnCode", mock.Anything, mock.MatchedBy(func(tx *gethTypes.Transaction) bool {
return tx.Nonce() == localNextNonce
}), fromAddress).Return(commonclient.Successful, nil).Once()`
$DIR/core/chains/evm/txmgr/broadcaster_test.go: `retryable, err = eb.ProcessUnstartedTxs(ctx, fromAddress)`
$DIR/core/chains/evm/txmgr/broadcaster_test.go: `etx, err = txStore.FindTxWithAttempts(ctx, etx.ID)`
$DIR/core/chains/evm/txmgr/broadcaster_test.go: `attempt = etx.TxAttempts[0]`
$DIR/core/chains/evm/txmgr/broadcaster_test.go: `t.Run("eth Client call fails with an unexpected random error, and transaction was accepted into mempool", func(t *testing.T) {
retryableErrorExample := "some strange RPC returns an unexpected thing"
localNextNonce := getLocalNextNonce(t, nonceTracker, fromAddress)
etx := mustCreateUnstartedTx(t, txStore, fromAddress, toAddress, encodedPayload, gasLimit, value, testutils.FixtureChainID)
ethClient.On("SendTransactionReturnCode", mock.Anything, mock.MatchedBy(func(tx *gethTypes.Transaction) bool {
return tx.Nonce() == localNextNonce
}), fromAddress).Return(commonclient.Unknown, errors.New(retryableErrorExample)).Once()
// Nonce is one higher than localNextNonce, implying that despite the error, this sent transaction has been accepted into the mempool
ethClient.On("PendingNonceAt", mock.Anything, fromAddress).Return(localNextNonce+1, nil).Once()
// Do the thing
retryable, err := eb.ProcessUnstartedTxs(ctx, fromAddress)
require.NoError(t, err)
assert.False(t, retryable)
// Check it was saved correctly with its attempt, in a broadcast state
etx, err = txStore.FindTxWithAttempts(ctx, etx.ID)
require.NoError(t, err)
assert.NotNil(t, etx.BroadcastAt)
assert.NotNil(t, etx.InitialBroadcastAt)
require.NotNil(t, etx.Sequence)
assert.False(t, etx.Error.Valid)
assert.Equal(t, txmgrcommon.TxUnconfirmed, etx.State)
assert.Len(t, etx.TxAttempts, 1)
attempt := etx.TxAttempts[0]
assert.Equal(t, txmgrtypes.TxAttemptBroadcast, attempt.State)
})`
$DIR/core/chains/evm/txmgr/broadcaster_test.go: `ethClient.On("SendTransactionReturnCode", mock.Anything, mock.MatchedBy(func(tx *gethTypes.Transaction) bool {
return tx.Nonce() == localNextNonce
}), fromAddress).Return(commonclient.Unknown, errors.New(retryableErrorExample)).Once()`
$DIR/core/chains/evm/txmgr/broadcaster_test.go: `ethClient.On("PendingNonceAt", mock.Anything, fromAddress).Return(localNextNonce+1, nil).Once()`
$DIR/core/chains/evm/txmgr/broadcaster_test.go: `etx, err = txStore.FindTxWithAttempts(ctx, etx.ID)`
$DIR/core/chains/evm/txmgr/broadcaster_test.go: `t.Run("eth node returns underpriced transaction", func(t *testing.T) {
// This happens if a transaction's gas price is below the minimum
// configured for the transaction pool.
// This is a configuration error by the node operator, since it means they set the base gas level too low.
underpricedError := "transaction underpriced"
localNextNonce := getLocalNextNonce(t, nonceTracker, fromAddress)
etx := mustCreateUnstartedTx(t, txStore, fromAddress, toAddress, encodedPayload, gasLimit, value, testutils.FixtureChainID)
// First was underpriced
ethClient.On("SendTransactionReturnCode", mock.Anything, mock.MatchedBy(func(tx *gethTypes.Transaction) bool {
return tx.Nonce() == localNextNonce && tx.GasPrice().Cmp(evmcfg.EVM().GasEstimator().PriceDefault().ToInt()) == 0
}), fromAddress).Return(commonclient.Underpriced, errors.New(underpricedError)).Once()
// Second with gas bump was still underpriced
ethClient.On("SendTransactionReturnCode", mock.Anything, mock.MatchedBy(func(tx *gethTypes.Transaction) bool {
return tx.Nonce() == localNextNonce && tx.GasPrice().Cmp(big.NewInt(25000000000)) == 0
}), fromAddress).Return(commonclient.Underpriced, errors.New(underpricedError)).Once()
// Third succeeded
ethClient.On("SendTransactionReturnCode", mock.Anything, mock.MatchedBy(func(tx *gethTypes.Transaction) bool {
return tx.Nonce() == localNextNonce && tx.GasPrice().Cmp(big.NewInt(30000000000)) == 0
}), fromAddress).Return(commonclient.Successful, nil).Once()
// Do the thing
retryable, err := eb.ProcessUnstartedTxs(ctx, fromAddress)
require.NoError(t, err)
assert.False(t, retryable)
// Check it was saved correctly with its attempt
etx, err = txStore.FindTxWithAttempts(ctx, etx.ID)
require.NoError(t, err)
assert.NotNil(t, etx.BroadcastAt)
assert.NotNil(t, etx.InitialBroadcastAt)
require.NotNil(t, etx.Sequence)
assert.False(t, etx.Error.Valid)
assert.Len(t, etx.TxAttempts, 1)
attempt := etx.TxAttempts[0]
assert.Equal(t, "30 gwei", attempt.TxFee.Legacy.String())
})`
$DIR/core/chains/evm/txmgr/broadcaster_test.go: `ethClient.On("SendTransactionReturnCode", mock.Anything, mock.MatchedBy(func(tx *gethTypes.Transaction) bool {
return tx.Nonce() == localNextNonce && tx.GasPrice().Cmp(evmcfg.EVM().GasEstimator().PriceDefault().ToInt()) == 0
}), fromAddress).Return(commonclient.Underpriced, errors.New(underpricedError)).Once()`
$DIR/core/chains/evm/txmgr/broadcaster_test.go: `ethClient.On("SendTransactionReturnCode", mock.Anything, mock.MatchedBy(func(tx *gethTypes.Transaction) bool {
return tx.Nonce() == localNextNonce && tx.GasPrice().Cmp(big.NewInt(25000000000)) == 0
}), fromAddress).Return(commonclient.Underpriced, errors.New(underpricedError)).Once()`
$DIR/core/chains/evm/txmgr/broadcaster_test.go: `ethClient.On("SendTransactionReturnCode", mock.Anything, mock.MatchedBy(func(tx *gethTypes.Transaction) bool {
return tx.Nonce() == localNextNonce && tx.GasPrice().Cmp(big.NewInt(30000000000)) == 0
}), fromAddress).Return(commonclient.Successful, nil).Once()`
$DIR/core/chains/evm/txmgr/broadcaster_test.go: `etx, err = txStore.FindTxWithAttempts(ctx, etx.ID)`
$DIR/core/chains/evm/txmgr/broadcaster_test.go: `t.Run("failed to reach node for some reason", func(t *testing.T) {
failedToReachNodeError := context.DeadlineExceeded
localNextNonce := getLocalNextNonce(t, nonceTracker, fromAddress)
ethClient.On("SendTransactionReturnCode", mock.Anything, mock.MatchedBy(func(tx *gethTypes.Transaction) bool {
return tx.Nonce() == localNextNonce
}), fromAddress).Return(commonclient.Retryable, failedToReachNodeError).Once()
// Do the thing
retryable, err := eb.ProcessUnstartedTxs(ctx, fromAddress)
require.Error(t, err)
assert.Contains(t, err.Error(), "context deadline exceeded")
assert.True(t, retryable)
// Check it was left in the unfinished state
etx, err := txStore.FindTxWithAttempts(ctx, etxUnfinished.ID)
require.NoError(t, err)
assert.Nil(t, etx.BroadcastAt)
assert.Nil(t, etx.InitialBroadcastAt)
assert.NotNil(t, etx.Sequence)
assert.False(t, etx.Error.Valid)
assert.Equal(t, txmgrcommon.TxInProgress, etx.State)
assert.Len(t, etx.TxAttempts, 1)
assert.Equal(t, txmgrtypes.TxAttemptInProgress, etx.TxAttempts[0].State)
})`
$DIR/core/chains/evm/txmgr/broadcaster_test.go: `ethClient.On("SendTransactionReturnCode", mock.Anything, mock.MatchedBy(func(tx *gethTypes.Transaction) bool {
return tx.Nonce() == localNextNonce
}), fromAddress).Return(commonclient.Retryable, failedToReachNodeError).Once()`
$DIR/core/chains/evm/txmgr/broadcaster_test.go: `t.Run("eth node returns temporarily underpriced transaction", func(t *testing.T) {
// This happens if parity is rejecting transactions that are not priced high enough to even get into the mempool at all
// It should pretend it was accepted into the mempool and hand off to ethConfirmer to bump gas as normal
temporarilyUnderpricedError := "There are too many transactions in the queue. Your transaction was dropped due to limit. Try increasing the fee."
localNextNonce := getLocalNextNonce(t, nonceTracker, fromAddress)
// Re-use the previously unfinished transaction, no need to insert new
ethClient.On("SendTransactionReturnCode", mock.Anything, mock.MatchedBy(func(tx *gethTypes.Transaction) bool {
return tx.Nonce() == localNextNonce
}), fromAddress).Return(commonclient.Successful, errors.New(temporarilyUnderpricedError)).Once()
// Do the thing
retryable, err := eb.ProcessUnstartedTxs(ctx, fromAddress)
assert.NoError(t, err)
assert.False(t, retryable)
// Check it was saved correctly with its attempt
etx, err := txStore.FindTxWithAttempts(ctx, etxUnfinished.ID)
require.NoError(t, err)
assert.NotNil(t, etx.BroadcastAt)
assert.NotNil(t, etx.InitialBroadcastAt)
require.NotNil(t, etx.Sequence)
assert.False(t, etx.Error.Valid)
assert.Len(t, etx.TxAttempts, 1)
attempt := etx.TxAttempts[0]
assert.Equal(t, "20 gwei", attempt.TxFee.Legacy.String())
})`
$DIR/core/chains/evm/txmgr/broadcaster_test.go: `ethClient.On("SendTransactionReturnCode", mock.Anything, mock.MatchedBy(func(tx *gethTypes.Transaction) bool {
return tx.Nonce() == localNextNonce
}), fromAddress).Return(commonclient.Successful, errors.New(temporarilyUnderpricedError)).Once()`
$DIR/core/chains/evm/txmgr/broadcaster_test.go: `t.Run("eth node returns underpriced transaction and bumping gas doesn't increase it", func(t *testing.T) {
// This happens if a transaction's gas price is below the minimum
// configured for the transaction pool.
// This is a configuration error by the node operator, since it means they set the base gas level too low.
underpricedError := "transaction underpriced"
localNextNonce := getLocalNextNonce(t, nonceTracker, fromAddress)
// In this scenario the node operator REALLY fucked up and set the bump
// to zero (even though that should not be possible due to config
// validation)
evmcfg2 := evmtest.NewChainScopedConfig(t, configtest.NewGeneralConfig(t, func(c *chainlink.Config, s *chainlink.Secrets) {
c.EVM[0].GasEstimator.BumpMin = assets.NewWeiI(0)
c.EVM[0].GasEstimator.BumpPercent = ptr[uint16](0)
}))
eb2 := NewTestEthBroadcaster(t, txStore, ethClient, ethKeyStore, cfg, evmcfg2, &testCheckerFactory{}, false, nonceTracker)
mustCreateUnstartedTx(t, txStore, fromAddress, toAddress, encodedPayload, gasLimit, value, testutils.FixtureChainID)
// First was underpriced
ethClient.On("SendTransactionReturnCode", mock.Anything, mock.MatchedBy(func(tx *gethTypes.Transaction) bool {
return tx.Nonce() == localNextNonce && tx.GasPrice().Cmp(evmcfg2.EVM().GasEstimator().PriceDefault().ToInt()) == 0
}), fromAddress).Return(commonclient.Underpriced, errors.New(underpricedError)).Once()
// Do the thing
retryable, err := eb2.ProcessUnstartedTxs(ctx, fromAddress)
require.Error(t, err)
require.Contains(t, err.Error(), "bumped fee price of 20 gwei is equal to original fee price of 20 gwei. ACTION REQUIRED: This is a configuration error, you must increase either FeeEstimator.BumpPercent or FeeEstimator.BumpMin")
assert.True(t, retryable)
// TEARDOWN: Clear out the unsent tx before the next test
pgtest.MustExec(t, db, `DELETE FROM evm.txes WHERE nonce = $1`, localNextNonce)
})`
$DIR/core/chains/evm/txmgr/broadcaster_test.go: `c.EVM[0].GasEstimator.BumpMin = assets.NewWeiI(0)`
$DIR/core/chains/evm/txmgr/broadcaster_test.go: `c.EVM[0].GasEstimator.BumpPercent = ptr[uint16](0)`
$DIR/core/chains/evm/txmgr/broadcaster_test.go: `mustCreateUnstartedTx(t, txStore, fromAddress, toAddress, encodedPayload, gasLimit, value, testutils.FixtureChainID)`
$DIR/core/chains/evm/txmgr/broadcaster_test.go: `ethClient.On("SendTransactionReturnCode", mock.Anything, mock.MatchedBy(func(tx *gethTypes.Transaction) bool {
return tx.Nonce() == localNextNonce && tx.GasPrice().Cmp(evmcfg2.EVM().GasEstimator().PriceDefault().ToInt()) == 0
}), fromAddress).Return(commonclient.Underpriced, errors.New(underpricedError)).Once()`
$DIR/core/chains/evm/txmgr/broadcaster_test.go: `pgtest.MustExec(t, db, `DELETE FROM evm.txes WHERE nonce = $1`, localNextNonce)`
$DIR/core/chains/evm/txmgr/broadcaster_test.go: `t.Run("eth tx is left in progress if eth node returns insufficient eth", func(t *testing.T) {
insufficientEthError := "insufficient funds for transfer"
localNextNonce := getLocalNextNonce(t, nonceTracker, fromAddress)
etx := mustCreateUnstartedTx(t, txStore, fromAddress, toAddress, encodedPayload, gasLimit, value, testutils.FixtureChainID)
ethClient.On("SendTransactionReturnCode", mock.Anything, mock.MatchedBy(func(tx *gethTypes.Transaction) bool {
return tx.Nonce() == localNextNonce
}), fromAddress).Return(commonclient.InsufficientFunds, errors.New(insufficientEthError)).Once()
retryable, err := eb.ProcessUnstartedTxs(ctx, fromAddress)
require.Error(t, err)
assert.Contains(t, err.Error(), "insufficient funds for transfer")
assert.True(t, retryable)
// Check it was saved correctly with its attempt
etx, err = txStore.FindTxWithAttempts(ctx, etx.ID)
require.NoError(t, err)
assert.Nil(t, etx.BroadcastAt)
assert.Nil(t, etx.InitialBroadcastAt)
require.NotNil(t, etx.Sequence)
assert.False(t, etx.Error.Valid)
assert.Equal(t, txmgrcommon.TxInProgress, etx.State)
require.Len(t, etx.TxAttempts, 1)
attempt := etx.TxAttempts[0]
assert.Equal(t, txmgrtypes.TxAttemptInProgress, attempt.State)
assert.Nil(t, attempt.BroadcastBeforeBlockNum)
})`
$DIR/core/chains/evm/txmgr/broadcaster_test.go: `ethClient.On("SendTransactionReturnCode", mock.Anything, mock.MatchedBy(func(tx *gethTypes.Transaction) bool {
return tx.Nonce() == localNextNonce
}), fromAddress).Return(commonclient.InsufficientFunds, errors.New(insufficientEthError)).Once()`
$DIR/core/chains/evm/txmgr/broadcaster_test.go: `etx, err = txStore.FindTxWithAttempts(ctx, etx.ID)`
$DIR/core/chains/evm/txmgr/broadcaster_test.go: `pgtest.MustExec(t, db, `DELETE FROM evm.txes`)`
$DIR/core/chains/evm/txmgr/broadcaster_test.go: `t.Run("eth tx is left in progress if nonce is too high", func(t *testing.T) {
localNextNonce := getLocalNextNonce(t, nonceTracker, fromAddress)
nonceGapError := "NonceGap, Future nonce. Expected nonce: " + strconv.FormatUint(localNextNonce, 10)
etx := mustCreateUnstartedTx(t, txStore, fromAddress, toAddress, encodedPayload, gasLimit, value, testutils.FixtureChainID)
ethClient.On("SendTransactionReturnCode", mock.Anything, mock.MatchedBy(func(tx *gethTypes.Transaction) bool {
return tx.Nonce() == localNextNonce
}), fromAddress).Return(commonclient.Retryable, errors.New(nonceGapError)).Once()
retryable, err := eb.ProcessUnstartedTxs(ctx, fromAddress)
require.Error(t, err)
assert.Contains(t, err.Error(), nonceGapError)
assert.True(t, retryable)
etx, err = txStore.FindTxWithAttempts(ctx, etx.ID)
require.NoError(t, err)
assert.Nil(t, etx.BroadcastAt)
assert.Nil(t, etx.InitialBroadcastAt)
require.NotNil(t, etx.Sequence)
assert.False(t, etx.Error.Valid)
assert.Equal(t, txmgrcommon.TxInProgress, etx.State)
require.Len(t, etx.TxAttempts, 1)
attempt := etx.TxAttempts[0]
assert.Equal(t, txmgrtypes.TxAttemptInProgress, attempt.State)
assert.Nil(t, attempt.BroadcastBeforeBlockNum)
pgtest.MustExec(t, db, `DELETE FROM evm.txes`)
})`
$DIR/core/chains/evm/txmgr/broadcaster_test.go: `ethClient.On("SendTransactionReturnCode", mock.Anything, mock.MatchedBy(func(tx *gethTypes.Transaction) bool {
return tx.Nonce() == localNextNonce
}), fromAddress).Return(commonclient.Retryable, errors.New(nonceGapError)).Once()`
$DIR/core/chains/evm/txmgr/broadcaster_test.go: `etx, err = txStore.FindTxWithAttempts(ctx, etx.ID)`
$DIR/core/chains/evm/txmgr/broadcaster_test.go: `pgtest.MustExec(t, db, `DELETE FROM evm.txes`)`
$DIR/core/chains/evm/txmgr/broadcaster_test.go: `t.Run("eth node returns underpriced transaction and bumping gas doesn't increase it in EIP-1559 mode", func(t *testing.T) {
// This happens if a transaction's gas price is below the minimum
// configured for the transaction pool.
// This is a configuration error by the node operator, since it means they set the base gas level too low.
// In this scenario the node operator REALLY fucked up and set the bump
// to zero (even though that should not be possible due to config
// validation)
evmcfg2 := evmtest.NewChainScopedConfig(t, configtest.NewGeneralConfig(t, func(c *chainlink.Config, s *chainlink.Secrets) {
c.EVM[0].GasEstimator.EIP1559DynamicFees = ptr(true)
c.EVM[0].GasEstimator.BumpMin = assets.NewWeiI(0)
c.EVM[0].GasEstimator.BumpPercent = ptr[uint16](0)
}))
localNextNonce := getLocalNextNonce(t, nonceTracker, fromAddress)
ethClient.On("PendingNonceAt", mock.Anything, fromAddress).Return(localNextNonce, nil).Once()
eb2 := NewTestEthBroadcaster(t, txStore, ethClient, ethKeyStore, cfg, evmcfg2, &testCheckerFactory{}, false, nonceTracker)
mustCreateUnstartedTx(t, txStore, fromAddress, toAddress, encodedPayload, gasLimit, value, testutils.FixtureChainID)
underpricedError := "transaction underpriced"
localNextNonce = getLocalNextNonce(t, nonceTracker, fromAddress)
ethClient.On("SendTransactionReturnCode", mock.Anything, mock.MatchedBy(func(tx *gethTypes.Transaction) bool {
return tx.Nonce() == localNextNonce && tx.GasTipCap().Cmp(big.NewInt(1)) == 0
}), fromAddress).Return(commonclient.Underpriced, errors.New(underpricedError)).Once()
// Check gas tip cap verification
retryable, err := eb2.ProcessUnstartedTxs(ctx, fromAddress)
require.Error(t, err)
require.Contains(t, err.Error(), "bumped gas tip cap of 1 wei is less than or equal to original gas tip cap of 1 wei")
assert.True(t, retryable)
pgtest.MustExec(t, db, `DELETE FROM evm.txes`)
})`
$DIR/core/chains/evm/txmgr/broadcaster_test.go: `c.EVM[0].GasEstimator.EIP1559DynamicFees = ptr(true)`
$DIR/core/chains/evm/txmgr/broadcaster_test.go: `c.EVM[0].GasEstimator.BumpMin = assets.NewWeiI(0)`
$DIR/core/chains/evm/txmgr/broadcaster_test.go: `c.EVM[0].GasEstimator.BumpPercent = ptr[uint16](0)`
$DIR/core/chains/evm/txmgr/broadcaster_test.go: `ethClient.On("PendingNonceAt", mock.Anything, fromAddress).Return(localNextNonce, nil).Once()`
$DIR/core/chains/evm/txmgr/broadcaster_test.go: `mustCreateUnstartedTx(t, txStore, fromAddress, toAddress, encodedPayload, gasLimit, value, testutils.FixtureChainID)`
$DIR/core/chains/evm/txmgr/broadcaster_test.go: `localNextNonce = getLocalNextNonce(t, nonceTracker, fromAddress)`
$DIR/core/chains/evm/txmgr/broadcaster_test.go: `ethClient.On("SendTransactionReturnCode", mock.Anything, mock.MatchedBy(func(tx *gethTypes.Transaction) bool {
return tx.Nonce() == localNextNonce && tx.GasTipCap().Cmp(big.NewInt(1)) == 0
}), fromAddress).Return(commonclient.Underpriced, errors.New(underpricedError)).Once()`
$DIR/core/chains/evm/txmgr/broadcaster_test.go: `pgtest.MustExec(t, db, `DELETE FROM evm.txes`)`
$DIR/core/chains/evm/txmgr/broadcaster_test.go: `mustCreateUnstartedTx(t, txStore, fromAddress, toAddress, encodedPayload, gasLimit, value, testutils.FixtureChainID)`
$DIR/core/chains/evm/txmgr/broadcaster_test.go: `c.EVM[0].GasEstimator.EIP1559DynamicFees = ptr(true)`
$DIR/core/chains/evm/txmgr/broadcaster_test.go: `c.EVM[0].GasEstimator.TipCapDefault = assets.NewWeiI(0)`
$DIR/core/chains/evm/txmgr/broadcaster_test.go: `ethClient.On("PendingNonceAt", mock.Anything, fromAddress).Return(localNextNonce, nil).Once()`
$DIR/core/chains/evm/txmgr/broadcaster_test.go: `c.EVM[0].GasEstimator.EIP1559DynamicFees = ptr(true)`
$DIR/core/chains/evm/txmgr/broadcaster_test.go: `c.EVM[0].GasEstimator.TipCapDefault = gasTipCapDefault`
$DIR/core/chains/evm/txmgr/broadcaster_test.go: `localNextNonce = getLocalNextNonce(t, nonceTracker, fromAddress)`
$DIR/core/chains/evm/txmgr/broadcaster_test.go: `ethClient.On("PendingNonceAt", mock.Anything, fromAddress).Return(localNextNonce, nil).Once()`
$DIR/core/chains/evm/txmgr/broadcaster_test.go: `eb2 = NewTestEthBroadcaster(t, txStore, ethClient, ethKeyStore, cfg, evmcfg2, &testCheckerFactory{}, false, nonceTracker)`
$DIR/core/chains/evm/txmgr/broadcaster_test.go: `ethClient.On("SendTransactionReturnCode", mock.Anything, mock.MatchedBy(func(tx *gethTypes.Transaction) bool {
return tx.Nonce() == localNextNonce && tx.GasTipCap().Cmp(gasTipCapDefault.ToInt()) == 0
}), fromAddress).Return(commonclient.Underpriced, errors.New(underpricedError)).Once()`
$DIR/core/chains/evm/txmgr/broadcaster_test.go: `ethClient.On("SendTransactionReturnCode", mock.Anything, mock.MatchedBy(func(tx *gethTypes.Transaction) bool {
return tx.Nonce() == localNextNonce && tx.GasTipCap().Cmp(big.NewInt(0).Add(gasTipCapDefault.ToInt(), evmcfg2.EVM().GasEstimator().BumpMin().ToInt())) == 0
}), fromAddress).Return(commonclient.Underpriced, errors.New(underpricedError)).Once()`
$DIR/core/chains/evm/txmgr/broadcaster_test.go: `ethClient.On("SendTransactionReturnCode", mock.Anything, mock.MatchedBy(func(tx *gethTypes.Transaction) bool {
return tx.Nonce() == localNextNonce && tx.GasTipCap().Cmp(big.NewInt(0).Add(gasTipCapDefault.ToInt(), big.NewInt(0).Mul(evmcfg2.EVM().GasEstimator().BumpMin().ToInt(), big.NewInt(2)))) == 0
}), fromAddress).Return(commonclient.Successful, nil).Once()`
$DIR/core/chains/evm/txmgr/broadcaster_test.go: `retryable, err = eb2.ProcessUnstartedTxs(ctx, fromAddress)`
$DIR/core/chains/evm/txmgr/broadcaster_test.go: `pgtest.MustExec(t, db, `DELETE FROM evm.txes WHERE nonce = $1`, localNextNonce)`
$DIR/core/chains/evm/txmgr/broadcaster_test.go: `kst.On("EnabledAddressesForChain", mock.Anything, testutils.FixtureChainID).Return(addresses, nil).Once()`
$DIR/core/chains/evm/txmgr/broadcaster_test.go: `ethClient.On("PendingNonceAt", mock.Anything, fromAddress).Return(uint64(0), nil).Once()`
$DIR/core/chains/evm/txmgr/broadcaster_test.go: `kst.On("SignTx", mock.Anything,
fromAddress,
mock.AnythingOfType("*types.Transaction"),
mock.MatchedBy(func(chainID *big.Int) bool {
return chainID.Cmp(evmcfg.EVM().ChainID()) == 0
})).Return(&tx, errors.New("could not sign transaction"))`
$DIR/core/chains/evm/txmgr/broadcaster_test.go: `etx, err = txStore.FindTxWithAttempts(ctx, etx.ID)`
$DIR/core/chains/evm/txmgr/broadcaster_test.go: `nonce, err = nonceTracker.GetNextSequence(ctx, fromAddress)`
$DIR/core/chains/evm/txmgr/broadcaster_test.go: `eb.Trigger(testutils.NewAddress())`
$DIR/core/chains/evm/txmgr/broadcaster_test.go: `eb.Trigger(testutils.NewAddress())`
$DIR/core/chains/evm/txmgr/broadcaster_test.go: `c.EVM[0].NonceAutoSync = ptr(true)`
$DIR/core/chains/evm/txmgr/broadcaster_test.go: `kst.On("EnabledAddressesForChain", mock.Anything, testutils.FixtureChainID).Return(addresses, nil).Once()`
$DIR/core/chains/evm/txmgr/broadcaster_test.go: `ethClient.On("PendingNonceAt", mock.Anything, fromAddress).Return(uint64(0), nil).Once()`
$DIR/core/chains/evm/txmgr/broadcaster_test.go: `tests.AssertLogEventually(t, observed, "Skipping sequence auto-sync")`
$DIR/core/chains/evm/txmgr/broadcaster_test.go: `ethClient.On("SendTransactionReturnCode", mock.Anything, mock.MatchedBy(func(tx *gethTypes.Transaction) bool {
return tx.Nonce() == inProgressTxNonce
}), fromAddress).Return(commonclient.Successful, nil).Once()`
$DIR/core/chains/evm/txmgr/broadcaster_test.go: `mustInsertInProgressEthTxWithAttempt(t, txStore, evmtypes.Nonce(inProgressTxNonce), fromAddress)`
$DIR/core/chains/evm/txmgr/broadcaster_test.go: `nonce = getLocalNextNonce(t, nonceTracker, fromAddress)`
$DIR/core/chains/evm/txmgr/broadcaster_test.go: `.FullTestDBV2(t, nil)`
$DIR/core/chains/evm/txmgr/broadcaster_test.go: `.NewTestTxStore(t, db)`
$DIR/core/chains/evm/txmgr/broadcaster_test.go: `.NewChainScopedConfig(t, cfg)`
$DIR/core/chains/evm/txmgr/broadcaster_test.go: `.NewEthClientMockWithDefaultChain(t)`
$DIR/core/chains/evm/txmgr/broadcaster_test.go: `.NewKeyStore(t, db)`
$DIR/core/chains/evm/txmgr/broadcaster_test.go: `.Eth()`
$DIR/core/chains/evm/txmgr/broadcaster_test.go: `.MustInsertRandomKeyReturningState(t, ethKeyStore)`
$DIR/core/chains/evm/txmgr/broadcaster_test.go: `.NewEvmFeeEstimator(t)`
$DIR/core/chains/evm/txmgr/broadcaster_test.go: `.NewEvmTxAttemptBuilder(*ethClient.ConfiguredChainID(), evmcfg.EVM().GasEstimator(), ethKeyStore, estimator)`
$DIR/core/chains/evm/txmgr/broadcaster_test.go: `.ConfiguredChainID()`
$DIR/core/chains/evm/txmgr/broadcaster_test.go: `.EVM()`
$DIR/core/chains/evm/txmgr/broadcaster_test.go: `.GasEstimator()`
$DIR/core/chains/evm/txmgr/broadcaster_test.go: `.NewEvmTxmClient(ethClient, nil)`
$DIR/core/chains/evm/txmgr/broadcaster_test.go: `.On("PendingNonceAt", mock.Anything, mock.Anything)`
$DIR/core/chains/evm/txmgr/broadcaster_test.go: `.Return(uint64(0), nil)`
$DIR/core/chains/evm/txmgr/broadcaster_test.go: `.NewEvmBroadcaster(
txStore,
txmClient,
txmgr.NewEvmTxmConfig(evmcfg.EVM()),
txmgr.NewEvmTxmFeeConfig(evmcfg.EVM().GasEstimator()),
evmcfg.EVM().Transactions(),
cfg.Database().Listener(),
ethKeyStore,
txBuilder,
logger.Test(t),
&testCheckerFactory{},
false,
)`
$DIR/core/chains/evm/txmgr/broadcaster_test.go: `.NewEvmTxmConfig(evmcfg.EVM())`
$DIR/core/chains/evm/txmgr/broadcaster_test.go: `.EVM()`
$DIR/core/chains/evm/txmgr/broadcaster_test.go: `.NewEvmTxmFeeConfig(evmcfg.EVM().GasEstimator())`
$DIR/core/chains/evm/txmgr/broadcaster_test.go: `.EVM()`
$DIR/core/chains/evm/txmgr/broadcaster_test.go: `.GasEstimator()`
$DIR/core/chains/evm/txmgr/broadcaster_test.go: `.EVM()`
$DIR/core/chains/evm/txmgr/broadcaster_test.go: `.Transactions()`
$DIR/core/chains/evm/txmgr/broadcaster_test.go: `.Database()`
$DIR/core/chains/evm/txmgr/broadcaster_test.go: `.Listener()`
$DIR/core/chains/evm/txmgr/broadcaster_test.go: `.Test(t)`
$DIR/core/chains/evm/txmgr/broadcaster_test.go: `.Context(t)`
$DIR/core/chains/evm/txmgr/broadcaster_test.go: `.Start(ctx)`
$DIR/core/chains/evm/txmgr/broadcaster_test.go: `.Start(ctx)`
$DIR/core/chains/evm/txmgr/broadcaster_test.go: `.XXXTestCloseInternal()`
$DIR/core/chains/evm/txmgr/broadcaster_test.go: `.NewSqlxDB(t)`
$DIR/core/chains/evm/txmgr/broadcaster_test.go: `.NewTestGeneralConfig(t)`
$DIR/core/chains/evm/txmgr/broadcaster_test.go: `.NewTestTxStore(t, db)`
$DIR/core/chains/evm/txmgr/broadcaster_test.go: `.NewChainScopedConfig(t, cfg)`
$DIR/core/chains/evm/txmgr/broadcaster_test.go: `.NewEthClientMockWithDefaultChain(t)`
$DIR/core/chains/evm/txmgr/broadcaster_test.go: `.NewKeyStore(t, db)`
$DIR/core/chains/evm/txmgr/broadcaster_test.go: `.Eth()`
$DIR/core/chains/evm/txmgr/broadcaster_test.go: `.MustInsertRandomKeyReturningState(t, ethKeyStore)`
$DIR/core/chains/evm/txmgr/broadcaster_test.go: `.NewEvmFeeEstimator(t)`
$DIR/core/chains/evm/txmgr/broadcaster_test.go: `.NewEvmTxAttemptBuilder(*ethClient.ConfiguredChainID(), evmcfg.EVM().GasEstimator(), ethKeyStore, estimator)`
$DIR/core/chains/evm/txmgr/broadcaster_test.go: `.ConfiguredChainID()`
$DIR/core/chains/evm/txmgr/broadcaster_test.go: `.EVM()`
$DIR/core/chains/evm/txmgr/broadcaster_test.go: `.GasEstimator()`
$DIR/core/chains/evm/txmgr/broadcaster_test.go: `.On("PendingNonceAt", mock.Anything, mock.Anything)`
$DIR/core/chains/evm/txmgr/broadcaster_test.go: `.Return(uint64(0), errors.New("Getting on-chain nonce failed"))`
$DIR/core/chains/evm/txmgr/broadcaster_test.go: `.New("Getting on-chain nonce failed")`
$DIR/core/chains/evm/txmgr/broadcaster_test.go: `.NewEvmTxmClient(ethClient, nil)`
$DIR/core/chains/evm/txmgr/broadcaster_test.go: `.NewEvmBroadcaster(
txStore,
txmClient,
txmgr.NewEvmTxmConfig(evmcfg.EVM()),
txmgr.NewEvmTxmFeeConfig(evmcfg.EVM().GasEstimator()),
evmcfg.EVM().Transactions(),
cfg.Database().Listener(),
ethKeyStore,
txBuilder,
logger.Test(t),
&testCheckerFactory{},
false,
)`
$DIR/core/chains/evm/txmgr/broadcaster_test.go: `.NewEvmTxmConfig(evmcfg.EVM())`
$DIR/core/chains/evm/txmgr/broadcaster_test.go: `.EVM()`
$DIR/core/chains/evm/txmgr/broadcaster_test.go: `.NewEvmTxmFeeConfig(evmcfg.EVM().GasEstimator())`
$DIR/core/chains/evm/txmgr/broadcaster_test.go: `.EVM()`
$DIR/core/chains/evm/txmgr/broadcaster_test.go: `.GasEstimator()`
$DIR/core/chains/evm/txmgr/broadcaster_test.go: `.EVM()`
$DIR/core/chains/evm/txmgr/broadcaster_test.go: `.Transactions()`
$DIR/core/chains/evm/txmgr/broadcaster_test.go: `.Database()`
$DIR/core/chains/evm/txmgr/broadcaster_test.go: `.Listener()`
$DIR/core/chains/evm/txmgr/broadcaster_test.go: `.Test(t)`
$DIR/core/chains/evm/txmgr/broadcaster_test.go: `.Start(tests.Context(t))`
$DIR/core/chains/evm/txmgr/broadcaster_test.go: `.Context(t)`
$DIR/core/chains/evm/txmgr/broadcaster_test.go: `.NewSqlxDB(t)`
$DIR/core/chains/evm/txmgr/broadcaster_test.go: `.NewTestGeneralConfig(t)`
$DIR/core/chains/evm/txmgr/broadcaster_test.go: `.Context(t)`
$DIR/core/chains/evm/txmgr/broadcaster_test.go: `.NewTestTxStore(t, db)`
$DIR/core/chains/evm/txmgr/broadcaster_test.go: `.NewKeyStore(t, db)`
$DIR/core/chains/evm/txmgr/broadcaster_test.go: `.Eth()`
$DIR/core/chains/evm/txmgr/broadcaster_test.go: `.MustInsertRandomKey(t, ethKeyStore)`
$DIR/core/chains/evm/txmgr/broadcaster_test.go: `.MustInsertRandomKey(t, ethKeyStore)`
$DIR/core/chains/evm/txmgr/broadcaster_test.go: `.NewEthClientMockWithDefaultChain(t)`
$DIR/core/chains/evm/txmgr/broadcaster_test.go: `.NewChainScopedConfig(t, cfg)`
$DIR/core/chains/evm/txmgr/broadcaster_test.go: `.On("PendingNonceAt", mock.Anything, fromAddress)`
$DIR/core/chains/evm/txmgr/broadcaster_test.go: `.Return(uint64(0), nil)`
$DIR/core/chains/evm/txmgr/broadcaster_test.go: `.Once()`
$DIR/core/chains/evm/txmgr/broadcaster_test.go: `.On("PendingNonceAt", mock.Anything, otherAddress)`
$DIR/core/chains/evm/txmgr/broadcaster_test.go: `.Return(uint64(0), nil)`
$DIR/core/chains/evm/txmgr/broadcaster_test.go: `.Once()`
$DIR/core/chains/evm/txmgr/broadcaster_test.go: `.Test(t)`
$DIR/core/chains/evm/txmgr/broadcaster_test.go: `.NewNonceTracker(lggr, txStore, txmgr.NewEvmTxmClient(ethClient, nil))`
$DIR/core/chains/evm/txmgr/broadcaster_test.go: `.NewEvmTxmClient(ethClient, nil)`
$DIR/core/chains/evm/txmgr/broadcaster_test.go: `.HexToAddress("0x6C03DDA95a2AEd917EeCc6eddD4b9D16E6380411")`
$DIR/core/chains/evm/txmgr/broadcaster_test.go: `.Now()`
$DIR/core/chains/evm/txmgr/broadcaster_test.go: `.Int(assets.NewEthValue(142))`
$DIR/core/chains/evm/txmgr/broadcaster_test.go: `.NewEthValue(142)`
$DIR/core/chains/evm/txmgr/broadcaster_test.go: `.Run("no eth_txes at all", func(t *testing.T) {
retryable, err := eb.ProcessUnstartedTxs(tests.Context(t), fromAddress)
assert.NoError(t, err)
assert.False(t, retryable)
})`
$DIR/core/chains/evm/txmgr/broadcaster_test.go: `.ProcessUnstartedTxs(tests.Context(t), fromAddress)`
$DIR/core/chains/evm/txmgr/broadcaster_test.go: `.Context(t)`
$DIR/core/chains/evm/txmgr/broadcaster_test.go: `.Run("eth_txes exist for a different from address", func(t *testing.T) {
mustCreateUnstartedTx(t, txStore, otherAddress, toAddress, encodedPayload, gasLimit, value, testutils.FixtureChainID)
retryable, err := eb.ProcessUnstartedTxs(tests.Context(t), fromAddress)
assert.NoError(t, err)
assert.False(t, retryable)
})`
$DIR/core/chains/evm/txmgr/broadcaster_test.go: `.ProcessUnstartedTxs(tests.Context(t), fromAddress)`
$DIR/core/chains/evm/txmgr/broadcaster_test.go: `.Context(t)`
$DIR/core/chains/evm/txmgr/broadcaster_test.go: `.Run("existing eth_txes with broadcast_at or error", func(t *testing.T) {
nonce := evmtypes.Nonce(342)
errStr := "some error"
etxUnconfirmed := txmgr.Tx{
Sequence: &nonce,
FromAddress: fromAddress,
ToAddress: toAddress,
EncodedPayload: encodedPayload,
Value: value,
FeeLimit: gasLimit,
BroadcastAt: &timeNow,
InitialBroadcastAt: &timeNow,
Error: null.String{},
State: txmgrcommon.TxUnconfirmed,
}
etxWithError := txmgr.Tx{
Sequence: nil,
FromAddress: fromAddress,
ToAddress: toAddress,
EncodedPayload: encodedPayload,
Value: value,
FeeLimit: gasLimit,
Error: null.StringFrom(errStr),
State: txmgrcommon.TxFatalError,
}
require.NoError(t, txStore.InsertTx(ctx, &etxUnconfirmed))
require.NoError(t, txStore.InsertTx(ctx, &etxWithError))
retryable, err := eb.ProcessUnstartedTxs(tests.Context(t), fromAddress)
assert.NoError(t, err)
assert.False(t, retryable)
})`
$DIR/core/chains/evm/txmgr/broadcaster_test.go: `.Nonce(342)`
$DIR/core/chains/evm/txmgr/broadcaster_test.go: `.StringFrom(errStr)`
$DIR/core/chains/evm/txmgr/broadcaster_test.go: `.ProcessUnstartedTxs(tests.Context(t), fromAddress)`
$DIR/core/chains/evm/txmgr/broadcaster_test.go: `.Context(t)`
$DIR/core/chains/evm/txmgr/broadcaster_test.go: `.Run("sends 3 EthTxs in order with higher value last, and lower values starting from the earliest", func(t *testing.T) {
// Higher value
expensiveEthTx := txmgr.Tx{
FromAddress: fromAddress,
ToAddress: toAddress,
EncodedPayload: []byte{42, 42, 0},
Value: big.Int(assets.NewEthValue(242)),
FeeLimit: gasLimit,
CreatedAt: time.Unix(0, 0),
State: txmgrcommon.TxUnstarted,
}
ethClient.On("SendTransactionReturnCode", mock.Anything, mock.MatchedBy(func(tx *gethTypes.Transaction) bool {
return tx.Nonce() == uint64(2) && tx.Value().Cmp(big.NewInt(242)) == 0
}), fromAddress).Return(commonclient.Successful, nil).Once()
// Earlier
tr := int32(99)
b, err := json.Marshal(txmgr.TxMeta{JobID: &tr})
require.NoError(t, err)
meta := sqlutil.JSON(b)
earlierEthTx := txmgr.Tx{
FromAddress: fromAddress,
ToAddress: toAddress,
EncodedPayload: []byte{42, 42, 0},
Value: value,
FeeLimit: gasLimit,
CreatedAt: time.Unix(0, 1),
State: txmgrcommon.TxUnstarted,
Meta: &meta,
}
ethClient.On("SendTransactionReturnCode", mock.Anything, mock.MatchedBy(func(tx *gethTypes.Transaction) bool {
if tx.Nonce() != uint64(0) {
return false
}
require.Equal(t, evmcfg.EVM().ChainID(), tx.ChainId())
require.Equal(t, gasLimit, tx.Gas())
require.Equal(t, evmcfg.EVM().GasEstimator().PriceDefault().ToInt(), tx.GasPrice())
require.Equal(t, toAddress, *tx.To())
require.Equal(t, value.String(), tx.Value().String())
require.Equal(t, earlierEthTx.EncodedPayload, tx.Data())
return true
}), fromAddress).Return(commonclient.Successful, nil).Once()
// Later
laterEthTx := txmgr.Tx{
FromAddress: fromAddress,
ToAddress: toAddress,
EncodedPayload: []byte{42, 42, 1},
Value: value,
FeeLimit: gasLimit,
CreatedAt: time.Unix(1, 0),
State: txmgrcommon.TxUnstarted,
}
ethClient.On("SendTransactionReturnCode", mock.Anything, mock.MatchedBy(func(tx *gethTypes.Transaction) bool {
if tx.Nonce() != uint64(1) {
return false
}
require.Equal(t, evmcfg.EVM().ChainID(), tx.ChainId())
require.Equal(t, gasLimit, tx.Gas())
require.Equal(t, evmcfg.EVM().GasEstimator().PriceDefault().ToInt(), tx.GasPrice())
require.Equal(t, toAddress, *tx.To())
require.Equal(t, value.String(), tx.Value().String())
require.Equal(t, laterEthTx.EncodedPayload, tx.Data())
return true
}), fromAddress).Return(commonclient.Successful, nil).Once()
// Insertion order deliberately reversed to test ordering
require.NoError(t, txStore.InsertTx(ctx, &expensiveEthTx))
require.NoError(t, txStore.InsertTx(ctx, &laterEthTx))
require.NoError(t, txStore.InsertTx(ctx, &earlierEthTx))
// Do the thing
retryable, err := eb.ProcessUnstartedTxs(tests.Context(t), fromAddress)
assert.NoError(t, err)
assert.False(t, retryable)
// Check earlierEthTx and it's attempt
// This was the earlier one sent so it has the lower nonce
earlierTransaction, err := txStore.FindTxWithAttempts(ctx, earlierEthTx.ID)
require.NoError(t, err)
assert.False(t, earlierTransaction.Error.Valid)
require.NotNil(t, earlierTransaction.FromAddress)
assert.Equal(t, fromAddress, earlierTransaction.FromAddress)
require.NotNil(t, earlierTransaction.Sequence)
assert.Equal(t, evmtypes.Nonce(0), *earlierTransaction.Sequence)
assert.NotNil(t, earlierTransaction.BroadcastAt)
assert.NotNil(t, earlierTransaction.InitialBroadcastAt)
assert.Len(t, earlierTransaction.TxAttempts, 1)
var m txmgr.TxMeta
err = json.Unmarshal(*earlierEthTx.Meta, &m)
require.NoError(t, err)
assert.NotNil(t, m.JobID)
assert.Equal(t, tr, *m.JobID)
attempt := earlierTransaction.TxAttempts[0]
assert.Equal(t, earlierTransaction.ID, attempt.TxID)
assert.NotNil(t, attempt.TxFee.Legacy)
assert.Nil(t, attempt.TxFee.DynamicTipCap)
assert.Nil(t, attempt.TxFee.DynamicFeeCap)
assert.Equal(t, evmcfg.EVM().GasEstimator().PriceDefault(), attempt.TxFee.Legacy)
_, err = txmgr.GetGethSignedTx(attempt.SignedRawTx)
require.NoError(t, err)
assert.Equal(t, txmgrtypes.TxAttemptBroadcast, attempt.State)
require.Len(t, attempt.Receipts, 0)
// Check laterEthTx and it's attempt
// This was the later one sent so it has the higher nonce
laterTransaction, err := txStore.FindTxWithAttempts(ctx, laterEthTx.ID)
require.NoError(t, err)
assert.False(t, earlierTransaction.Error.Valid)
require.NotNil(t, laterTransaction.FromAddress)
assert.Equal(t, fromAddress, laterTransaction.FromAddress)
require.NotNil(t, laterTransaction.Sequence)
assert.Equal(t, evmtypes.Nonce(1), *laterTransaction.Sequence)
assert.NotNil(t, laterTransaction.BroadcastAt)
assert.NotNil(t, earlierTransaction.InitialBroadcastAt)
assert.Len(t, laterTransaction.TxAttempts, 1)
attempt = laterTransaction.TxAttempts[0]
assert.Equal(t, laterTransaction.ID, attempt.TxID)
assert.Equal(t, evmcfg.EVM().GasEstimator().PriceDefault(), attempt.TxFee.Legacy)
_, err = txmgr.GetGethSignedTx(attempt.SignedRawTx)
require.NoError(t, err)
assert.Equal(t, txmgrtypes.TxAttemptBroadcast, attempt.State)
require.Len(t, attempt.Receipts, 0)
})`
$DIR/core/chains/evm/txmgr/broadcaster_test.go: `.Int(assets.NewEthValue(242))`
$DIR/core/chains/evm/txmgr/broadcaster_test.go: `.NewEthValue(242)`
$DIR/core/chains/evm/txmgr/broadcaster_test.go: `.Unix(0, 0)`
$DIR/core/chains/evm/txmgr/broadcaster_test.go: `.On("SendTransactionReturnCode", mock.Anything, mock.MatchedBy(func(tx *gethTypes.Transaction) bool {
return tx.Nonce() == uint64(2) && tx.Value().Cmp(big.NewInt(242)) == 0
}), fromAddress)`
$DIR/core/chains/evm/txmgr/broadcaster_test.go: `.MatchedBy(func(tx *gethTypes.Transaction) bool {
return tx.Nonce() == uint64(2) && tx.Value().Cmp(big.NewInt(242)) == 0
})`
$DIR/core/chains/evm/txmgr/broadcaster_test.go: `.Nonce()`
$DIR/core/chains/evm/txmgr/broadcaster_test.go: `.Value()`
$DIR/core/chains/evm/txmgr/broadcaster_test.go: `.Cmp(big.NewInt(242))`
$DIR/core/chains/evm/txmgr/broadcaster_test.go: `.NewInt(242)`
$DIR/core/chains/evm/txmgr/broadcaster_test.go: `.Return(commonclient.Successful, nil)`
$DIR/core/chains/evm/txmgr/broadcaster_test.go: `.Once()`
$DIR/core/chains/evm/txmgr/broadcaster_test.go: `.Marshal(txmgr.TxMeta{JobID: &tr})`
$DIR/core/chains/evm/txmgr/broadcaster_test.go: `.JSON(b)`
$DIR/core/chains/evm/txmgr/broadcaster_test.go: `.Unix(0, 1)`
$DIR/core/chains/evm/txmgr/broadcaster_test.go: `.On("SendTransactionReturnCode", mock.Anything, mock.MatchedBy(func(tx *gethTypes.Transaction) bool {
if tx.Nonce() != uint64(0) {
return false
}
require.Equal(t, evmcfg.EVM().ChainID(), tx.ChainId())
require.Equal(t, gasLimit, tx.Gas())
require.Equal(t, evmcfg.EVM().GasEstimator().PriceDefault().ToInt(), tx.GasPrice())
require.Equal(t, toAddress, *tx.To())
require.Equal(t, value.String(), tx.Value().String())
require.Equal(t, earlierEthTx.EncodedPayload, tx.Data())
return true
}), fromAddress)`
$DIR/core/chains/evm/txmgr/broadcaster_test.go: `.MatchedBy(func(tx *gethTypes.Transaction) bool {
if tx.Nonce() != uint64(0) {
return false
}
require.Equal(t, evmcfg.EVM().ChainID(), tx.ChainId())
require.Equal(t, gasLimit, tx.Gas())
require.Equal(t, evmcfg.EVM().GasEstimator().PriceDefault().ToInt(), tx.GasPrice())
require.Equal(t, toAddress, *tx.To())
require.Equal(t, value.String(), tx.Value().String())
require.Equal(t, earlierEthTx.EncodedPayload, tx.Data())
return true
})`
$DIR/core/chains/evm/txmgr/broadcaster_test.go: `.Nonce()`
$DIR/core/chains/evm/txmgr/broadcaster_test.go: `.Return(commonclient.Successful, nil)`
$DIR/core/chains/evm/txmgr/broadcaster_test.go: `.Once()`
$DIR/core/chains/evm/txmgr/broadcaster_test.go: `.Unix(1, 0)`
$DIR/core/chains/evm/txmgr/broadcaster_test.go: `.On("SendTransactionReturnCode", mock.Anything, mock.MatchedBy(func(tx *gethTypes.Transaction) bool {
if tx.Nonce() != uint64(1) {
return false
}
require.Equal(t, evmcfg.EVM().ChainID(), tx.ChainId())
require.Equal(t, gasLimit, tx.Gas())
require.Equal(t, evmcfg.EVM().GasEstimator().PriceDefault().ToInt(), tx.GasPrice())
require.Equal(t, toAddress, *tx.To())
require.Equal(t, value.String(), tx.Value().String())
require.Equal(t, laterEthTx.EncodedPayload, tx.Data())
return true
}), fromAddress)`
$DIR/core/chains/evm/txmgr/broadcaster_test.go: `.MatchedBy(func(tx *gethTypes.Transaction) bool {
if tx.Nonce() != uint64(1) {
return false
}
require.Equal(t, evmcfg.EVM().ChainID(), tx.ChainId())
require.Equal(t, gasLimit, tx.Gas())
require.Equal(t, evmcfg.EVM().GasEstimator().PriceDefault().ToInt(), tx.GasPrice())
require.Equal(t, toAddress, *tx.To())
require.Equal(t, value.String(), tx.Value().String())
require.Equal(t, laterEthTx.EncodedPayload, tx.Data())
return true
})`
$DIR/core/chains/evm/txmgr/broadcaster_test.go: `.Nonce()`
$DIR/core/chains/evm/txmgr/broadcaster_test.go: `.Return(commonclient.Successful, nil)`
$DIR/core/chains/evm/txmgr/broadcaster_test.go: `.Once()`
$DIR/core/chains/evm/txmgr/broadcaster_test.go: `.ProcessUnstartedTxs(tests.Context(t), fromAddress)`
$DIR/core/chains/evm/txmgr/broadcaster_test.go: `.Context(t)`
$DIR/core/chains/evm/txmgr/broadcaster_test.go: `.FindTxWithAttempts(ctx, earlierEthTx.ID)`
$DIR/core/chains/evm/txmgr/broadcaster_test.go: `.Unmarshal(*earlierEthTx.Meta, &m)`
$DIR/core/chains/evm/txmgr/broadcaster_test.go: `.GetGethSignedTx(attempt.SignedRawTx)`
$DIR/core/chains/evm/txmgr/broadcaster_test.go: `.FindTxWithAttempts(ctx, laterEthTx.ID)`
$DIR/core/chains/evm/txmgr/broadcaster_test.go: `.GetGethSignedTx(attempt.SignedRawTx)`
$DIR/core/chains/evm/txmgr/broadcaster_test.go: `.Intn(5000)`
$DIR/core/chains/evm/txmgr/broadcaster_test.go: `.NewGeneralConfig(t, func(c *chainlink.Config, s *chainlink.Secrets) {
c.EVM[0].GasEstimator.EIP1559DynamicFees = ptr(true)
c.EVM[0].GasEstimator.TipCapDefault = assets.NewWeiI(rnd)
c.EVM[0].GasEstimator.FeeCapDefault = assets.NewWeiI(rnd + 1)
c.EVM[0].GasEstimator.PriceMax = assets.NewWeiI(rnd + 2)
})`
$DIR/core/chains/evm/txmgr/broadcaster_test.go: `.NewWeiI(rnd)`
$DIR/core/chains/evm/txmgr/broadcaster_test.go: `.NewWeiI(rnd + 1)`
$DIR/core/chains/evm/txmgr/broadcaster_test.go: `.NewWeiI(rnd + 2)`
$DIR/core/chains/evm/txmgr/broadcaster_test.go: `.NewChainScopedConfig(t, cfg)`
$DIR/core/chains/evm/txmgr/broadcaster_test.go: `.On("PendingNonceAt", mock.Anything, otherAddress)`
$DIR/core/chains/evm/txmgr/broadcaster_test.go: `.Return(uint64(1), nil)`
$DIR/core/chains/evm/txmgr/broadcaster_test.go: `.Once()`
$DIR/core/chains/evm/txmgr/broadcaster_test.go: `.NewNonceTracker(lggr, txStore, txmgr.NewEvmTxmClient(ethClient, nil))`
$DIR/core/chains/evm/txmgr/broadcaster_test.go: `.NewEvmTxmClient(ethClient, nil)`
$DIR/core/chains/evm/txmgr/broadcaster_test.go: `.Run("sends transactions with type 0x2 in EIP-1559 mode", func(t *testing.T) {
ethClient.On("SendTransactionReturnCode", mock.Anything, mock.MatchedBy(func(tx *gethTypes.Transaction) bool {
return tx.Nonce() == uint64(343) && tx.Value().Cmp(big.NewInt(242)) == 0
}), fromAddress).Return(commonclient.Successful, nil).Once()
etx := mustCreateUnstartedTx(t, txStore, fromAddress, toAddress, []byte{42, 42, 0}, gasLimit, big.Int(assets.NewEthValue(242)), testutils.FixtureChainID)
// Do the thing
{
retryable, err := eb.ProcessUnstartedTxs(tests.Context(t), fromAddress)
assert.NoError(t, err)
assert.False(t, retryable)
}
// Check eipTxWithAl and it's attempt
// This was the earlier one sent so it has the lower nonce
etx, err := txStore.FindTxWithAttempts(ctx, etx.ID)
require.NoError(t, err)
assert.False(t, etx.Error.Valid)
require.NotNil(t, etx.FromAddress)
assert.Equal(t, fromAddress, etx.FromAddress)
require.NotNil(t, etx.Sequence)
assert.Equal(t, evmtypes.Nonce(343), *etx.Sequence)
assert.NotNil(t, etx.BroadcastAt)
assert.NotNil(t, etx.InitialBroadcastAt)
assert.Len(t, etx.TxAttempts, 1)
attempt := etx.TxAttempts[0]
assert.Equal(t, etx.ID, attempt.TxID)
assert.Nil(t, attempt.TxFee.Legacy)
assert.Equal(t, rnd, attempt.TxFee.DynamicTipCap.ToInt().Int64())
assert.Equal(t, rnd+1, attempt.TxFee.DynamicFeeCap.ToInt().Int64())
_, err = txmgr.GetGethSignedTx(attempt.SignedRawTx)
require.NoError(t, err)
assert.Equal(t, txmgrtypes.TxAttemptBroadcast, attempt.State)
require.Len(t, attempt.Receipts, 0)
})`
$DIR/core/chains/evm/txmgr/broadcaster_test.go: `.On("SendTransactionReturnCode", mock.Anything, mock.MatchedBy(func(tx *gethTypes.Transaction) bool {
return tx.Nonce() == uint64(343) && tx.Value().Cmp(big.NewInt(242)) == 0
}), fromAddress)`
$DIR/core/chains/evm/txmgr/broadcaster_test.go: `.MatchedBy(func(tx *gethTypes.Transaction) bool {
return tx.Nonce() == uint64(343) && tx.Value().Cmp(big.NewInt(242)) == 0
})`
$DIR/core/chains/evm/txmgr/broadcaster_test.go: `.Nonce()`
$DIR/core/chains/evm/txmgr/broadcaster_test.go: `.Value()`
$DIR/core/chains/evm/txmgr/broadcaster_test.go: `.Cmp(big.NewInt(242))`
$DIR/core/chains/evm/txmgr/broadcaster_test.go: `.NewInt(242)`
$DIR/core/chains/evm/txmgr/broadcaster_test.go: `.Return(commonclient.Successful, nil)`
$DIR/core/chains/evm/txmgr/broadcaster_test.go: `.Once()`
$DIR/core/chains/evm/txmgr/broadcaster_test.go: `.Int(assets.NewEthValue(242))`
$DIR/core/chains/evm/txmgr/broadcaster_test.go: `.NewEthValue(242)`
$DIR/core/chains/evm/txmgr/broadcaster_test.go: `.ProcessUnstartedTxs(tests.Context(t), fromAddress)`
$DIR/core/chains/evm/txmgr/broadcaster_test.go: `.Context(t)`
$DIR/core/chains/evm/txmgr/broadcaster_test.go: `.FindTxWithAttempts(ctx, etx.ID)`
$DIR/core/chains/evm/txmgr/broadcaster_test.go: `.GetGethSignedTx(attempt.SignedRawTx)`
$DIR/core/chains/evm/txmgr/broadcaster_test.go: `.Run("when simulation succeeds, sends tx as normal", func(t *testing.T) {
txRequest := txmgr.TxRequest{
FromAddress: fromAddress,
ToAddress: toAddress,
EncodedPayload: []byte{42, 0, 0},
Value: big.Int(assets.NewEthValue(442)),
FeeLimit: gasLimit,
Strategy: txmgrcommon.NewSendEveryStrategy(),
Checker: txmgr.TransmitCheckerSpec{
CheckerType: txmgr.TransmitCheckerTypeSimulate,
},
}
ethClient.On("SendTransactionReturnCode", mock.Anything, mock.MatchedBy(func(tx *gethTypes.Transaction) bool {
return tx.Nonce() == uint64(344) && tx.Value().Cmp(big.NewInt(442)) == 0
}), fromAddress).Return(commonclient.Successful, nil).Once()
ethClient.On("CallContext", mock.Anything, mock.AnythingOfType("*hexutil.Bytes"), "eth_call", mock.MatchedBy(func(callarg map[string]interface{}) bool {
if fmt.Sprintf("%s", callarg["value"]) == "0x1ba" { // 442
assert.Equal(t, txRequest.FromAddress, callarg["from"])
assert.Equal(t, &txRequest.ToAddress, callarg["to"])
assert.Equal(t, hexutil.Uint64(txRequest.FeeLimit), callarg["gas"])
assert.Nil(t, callarg["gasPrice"])
assert.Nil(t, callarg["maxFeePerGas"])
assert.Nil(t, callarg["maxPriorityFeePerGas"])
assert.Equal(t, (*hexutil.Big)(&txRequest.Value), callarg["value"])
assert.Equal(t, hexutil.Bytes(txRequest.EncodedPayload), callarg["data"])
return true
}
return false
}), "latest").Return(nil).Once()
ethTx := mustCreateUnstartedTxFromEvmTxRequest(t, txStore, txRequest, testutils.FixtureChainID)
{
retryable, err := eb.ProcessUnstartedTxs(tests.Context(t), fromAddress)
assert.NoError(t, err)
assert.False(t, retryable)
}
// Check ethtx was sent
ethTx, err := txStore.FindTxWithAttempts(ctx, ethTx.ID)
require.NoError(t, err)
assert.Equal(t, txmgrcommon.TxUnconfirmed, ethTx.State)
})`
$DIR/core/chains/evm/txmgr/broadcaster_test.go: `.Int(assets.NewEthValue(442))`
$DIR/core/chains/evm/txmgr/broadcaster_test.go: `.NewEthValue(442)`
$DIR/core/chains/evm/txmgr/broadcaster_test.go: `.NewSendEveryStrategy()`
$DIR/core/chains/evm/txmgr/broadcaster_test.go: `.On("SendTransactionReturnCode", mock.Anything, mock.MatchedBy(func(tx *gethTypes.Transaction) bool {
return tx.Nonce() == uint64(344) && tx.Value().Cmp(big.NewInt(442)) == 0
}), fromAddress)`
$DIR/core/chains/evm/txmgr/broadcaster_test.go: `.MatchedBy(func(tx *gethTypes.Transaction) bool {
return tx.Nonce() == uint64(344) && tx.Value().Cmp(big.NewInt(442)) == 0
})`
$DIR/core/chains/evm/txmgr/broadcaster_test.go: `.Nonce()`
$DIR/core/chains/evm/txmgr/broadcaster_test.go: `.Value()`
$DIR/core/chains/evm/txmgr/broadcaster_test.go: `.Cmp(big.NewInt(442))`
$DIR/core/chains/evm/txmgr/broadcaster_test.go: `.NewInt(442)`
$DIR/core/chains/evm/txmgr/broadcaster_test.go: `.Return(commonclient.Successful, nil)`
$DIR/core/chains/evm/txmgr/broadcaster_test.go: `.Once()`
$DIR/core/chains/evm/txmgr/broadcaster_test.go: `.On("CallContext", mock.Anything, mock.AnythingOfType("*hexutil.Bytes"), "eth_call", mock.MatchedBy(func(callarg map[string]interface{}) bool {
if fmt.Sprintf("%s", callarg["value"]) == "0x1ba" { // 442
assert.Equal(t, txRequest.FromAddress, callarg["from"])
assert.Equal(t, &txRequest.ToAddress, callarg["to"])
assert.Equal(t, hexutil.Uint64(txRequest.FeeLimit), callarg["gas"])
assert.Nil(t, callarg["gasPrice"])
assert.Nil(t, callarg["maxFeePerGas"])
assert.Nil(t, callarg["maxPriorityFeePerGas"])
assert.Equal(t, (*hexutil.Big)(&txRequest.Value), callarg["value"])
assert.Equal(t, hexutil.Bytes(txRequest.EncodedPayload), callarg["data"])
return true
}
return false
}), "latest")`
$DIR/core/chains/evm/txmgr/broadcaster_test.go: `.AnythingOfType("*hexutil.Bytes")`
$DIR/core/chains/evm/txmgr/broadcaster_test.go: `.MatchedBy(func(callarg map[string]interface{}) bool {
if fmt.Sprintf("%s", callarg["value"]) == "0x1ba" { // 442
assert.Equal(t, txRequest.FromAddress, callarg["from"])
assert.Equal(t, &txRequest.ToAddress, callarg["to"])
assert.Equal(t, hexutil.Uint64(txRequest.FeeLimit), callarg["gas"])
assert.Nil(t, callarg["gasPrice"])
assert.Nil(t, callarg["maxFeePerGas"])
assert.Nil(t, callarg["maxPriorityFeePerGas"])
assert.Equal(t, (*hexutil.Big)(&txRequest.Value), callarg["value"])
assert.Equal(t, hexutil.Bytes(txRequest.EncodedPayload), callarg["data"])
return true
}
return false
})`
$DIR/core/chains/evm/txmgr/broadcaster_test.go: `.Sprintf("%s", callarg["value"])`
$DIR/core/chains/evm/txmgr/broadcaster_test.go: `.Return(nil)`
$DIR/core/chains/evm/txmgr/broadcaster_test.go: `.Once()`
$DIR/core/chains/evm/txmgr/broadcaster_test.go: `.ProcessUnstartedTxs(tests.Context(t), fromAddress)`
$DIR/core/chains/evm/txmgr/broadcaster_test.go: `.Context(t)`
$DIR/core/chains/evm/txmgr/broadcaster_test.go: `.FindTxWithAttempts(ctx, ethTx.ID)`
$DIR/core/chains/evm/txmgr/broadcaster_test.go: `.Run("with unknown error, sends tx as normal", func(t *testing.T) {
ethClient.On("SendTransactionReturnCode", mock.Anything, mock.MatchedBy(func(tx *gethTypes.Transaction) bool {
return tx.Nonce() == uint64(345) && tx.Value().Cmp(big.NewInt(542)) == 0
}), fromAddress).Return(commonclient.Successful, nil).Once()
ethClient.On("CallContext", mock.Anything, mock.AnythingOfType("*hexutil.Bytes"), "eth_call", mock.MatchedBy(func(callarg map[string]interface{}) bool {
return fmt.Sprintf("%s", callarg["value"]) == "0x21e" // 542
}), "latest").Return(errors.New("this is not a revert, something unexpected went wrong")).Once()
ethTx := mustCreateUnstartedGeneratedTx(t, txStore, fromAddress, testutils.FixtureChainID,
txRequestWithChecker(checker),
txRequestWithValue(big.Int(assets.NewEthValue(542))))
{
retryable, err := eb.ProcessUnstartedTxs(tests.Context(t), fromAddress)
assert.NoError(t, err)
assert.False(t, retryable)
}
ethTx, err := txStore.FindTxWithAttempts(ctx, ethTx.ID)
require.NoError(t, err)
assert.Equal(t, txmgrcommon.TxUnconfirmed, ethTx.State)
})`
$DIR/core/chains/evm/txmgr/broadcaster_test.go: `.On("SendTransactionReturnCode", mock.Anything, mock.MatchedBy(func(tx *gethTypes.Transaction) bool {
return tx.Nonce() == uint64(345) && tx.Value().Cmp(big.NewInt(542)) == 0
}), fromAddress)`
$DIR/core/chains/evm/txmgr/broadcaster_test.go: `.MatchedBy(func(tx *gethTypes.Transaction) bool {
return tx.Nonce() == uint64(345) && tx.Value().Cmp(big.NewInt(542)) == 0
})`
$DIR/core/chains/evm/txmgr/broadcaster_test.go: `.Nonce()`
$DIR/core/chains/evm/txmgr/broadcaster_test.go: `.Value()`
$DIR/core/chains/evm/txmgr/broadcaster_test.go: `.Cmp(big.NewInt(542))`
$DIR/core/chains/evm/txmgr/broadcaster_test.go: `.NewInt(542)`
$DIR/core/chains/evm/txmgr/broadcaster_test.go: `.Return(commonclient.Successful, nil)`
$DIR/core/chains/evm/txmgr/broadcaster_test.go: `.Once()`
$DIR/core/chains/evm/txmgr/broadcaster_test.go: `.On("CallContext", mock.Anything, mock.AnythingOfType("*hexutil.Bytes"), "eth_call", mock.MatchedBy(func(callarg map[string]interface{}) bool {
return fmt.Sprintf("%s", callarg["value"]) == "0x21e" // 542
}), "latest")`
$DIR/core/chains/evm/txmgr/broadcaster_test.go: `.AnythingOfType("*hexutil.Bytes")`
$DIR/core/chains/evm/txmgr/broadcaster_test.go: `.MatchedBy(func(callarg map[string]interface{}) bool {
return fmt.Sprintf("%s", callarg["value"]) == "0x21e" // 542
})`
$DIR/core/chains/evm/txmgr/broadcaster_test.go: `.Sprintf("%s", callarg["value"])`
$DIR/core/chains/evm/txmgr/broadcaster_test.go: `.Return(errors.New("this is not a revert, something unexpected went wrong"))`
$DIR/core/chains/evm/txmgr/broadcaster_test.go: `.New("this is not a revert, something unexpected went wrong")`
$DIR/core/chains/evm/txmgr/broadcaster_test.go: `.Once()`
$DIR/core/chains/evm/txmgr/broadcaster_test.go: `.Int(assets.NewEthValue(542))`
$DIR/core/chains/evm/txmgr/broadcaster_test.go: `.NewEthValue(542)`
$DIR/core/chains/evm/txmgr/broadcaster_test.go: `.ProcessUnstartedTxs(tests.Context(t), fromAddress)`
$DIR/core/chains/evm/txmgr/broadcaster_test.go: `.Context(t)`
$DIR/core/chains/evm/txmgr/broadcaster_test.go: `.FindTxWithAttempts(ctx, ethTx.ID)`
$DIR/core/chains/evm/txmgr/broadcaster_test.go: `.Run("on revert, marks tx as fatally errored and does not send", func(t *testing.T) {
jerr := client.JsonError{
Code: 42,
Message: "oh no, it reverted",
Data: []byte{42, 166, 34},
}
ethClient.On("CallContext", mock.Anything, mock.AnythingOfType("*hexutil.Bytes"), "eth_call", mock.MatchedBy(func(callarg map[string]interface{}) bool {
return fmt.Sprintf("%s", callarg["value"]) == "0x282" // 642
}), "latest").Return(&jerr).Once()
ethTx := mustCreateUnstartedGeneratedTx(t, txStore, fromAddress, testutils.FixtureChainID,
txRequestWithChecker(checker),
txRequestWithValue(big.Int(assets.NewEthValue(642))))
{
retryable, err := eb.ProcessUnstartedTxs(tests.Context(t), fromAddress)
assert.NoError(t, err)
assert.False(t, retryable)
}
ethTx, err := txStore.FindTxWithAttempts(ctx, ethTx.ID)
require.NoError(t, err)
assert.Equal(t, txmgrcommon.TxFatalError, ethTx.State)
assert.True(t, ethTx.Error.Valid)
assert.Equal(t, "transaction reverted during simulation: json-rpc error { Code = 42, Message = 'oh no, it reverted', Data = 'KqYi' }", ethTx.Error.String)
})`
$DIR/core/chains/evm/txmgr/broadcaster_test.go: `.On("CallContext", mock.Anything, mock.AnythingOfType("*hexutil.Bytes"), "eth_call", mock.MatchedBy(func(callarg map[string]interface{}) bool {
return fmt.Sprintf("%s", callarg["value"]) == "0x282" // 642
}), "latest")`
$DIR/core/chains/evm/txmgr/broadcaster_test.go: `.AnythingOfType("*hexutil.Bytes")`
$DIR/core/chains/evm/txmgr/broadcaster_test.go: `.MatchedBy(func(callarg map[string]interface{}) bool {
return fmt.Sprintf("%s", callarg["value"]) == "0x282" // 642
})`
$DIR/core/chains/evm/txmgr/broadcaster_test.go: `.Sprintf("%s", callarg["value"])`
$DIR/core/chains/evm/txmgr/broadcaster_test.go: `.Return(&jerr)`
$DIR/core/chains/evm/txmgr/broadcaster_test.go: `.Once()`
$DIR/core/chains/evm/txmgr/broadcaster_test.go: `.Int(assets.NewEthValue(642))`
$DIR/core/chains/evm/txmgr/broadcaster_test.go: `.NewEthValue(642)`
$DIR/core/chains/evm/txmgr/broadcaster_test.go: `.ProcessUnstartedTxs(tests.Context(t), fromAddress)`
$DIR/core/chains/evm/txmgr/broadcaster_test.go: `.Context(t)`
$DIR/core/chains/evm/txmgr/broadcaster_test.go: `.FindTxWithAttempts(ctx, ethTx.ID)`
$DIR/core/chains/evm/txmgr/broadcaster_test.go: `.NewSqlxDB(t)`
$DIR/core/chains/evm/txmgr/broadcaster_test.go: `.NewTestGeneralConfig(t)`
$DIR/core/chains/evm/txmgr/broadcaster_test.go: `.Context(t)`
$DIR/core/chains/evm/txmgr/broadcaster_test.go: `.NewTestTxStore(t, db)`
$DIR/core/chains/evm/txmgr/broadcaster_test.go: `.NewKeyStore(t, db)`
$DIR/core/chains/evm/txmgr/broadcaster_test.go: `.Eth()`
$DIR/core/chains/evm/txmgr/broadcaster_test.go: `.MustInsertRandomKeyReturningState(t, ethKeyStore)`
$DIR/core/chains/evm/txmgr/broadcaster_test.go: `.NewEthClientMockWithDefaultChain(t)`
$DIR/core/chains/evm/txmgr/broadcaster_test.go: `.NewChainScopedConfig(t, cfg)`
$DIR/core/chains/evm/txmgr/broadcaster_test.go: `.On("PendingNonceAt", mock.Anything, fromAddress)`
$DIR/core/chains/evm/txmgr/broadcaster_test.go: `.Return(uint64(0), nil)`
$DIR/core/chains/evm/txmgr/broadcaster_test.go: `.Once()`
$DIR/core/chains/evm/txmgr/broadcaster_test.go: `.NewNonceTracker(logger.Test(t), txStore, txmgr.NewEvmTxmClient(ethClient, nil))`
$DIR/core/chains/evm/txmgr/broadcaster_test.go: `.Test(t)`
$DIR/core/chains/evm/txmgr/broadcaster_test.go: `.NewEvmTxmClient(ethClient, nil)`
$DIR/core/chains/evm/txmgr/broadcaster_test.go: `.Run("when transmit checking times out, sends tx as normal", func(t *testing.T) {
// Checker will return a canceled error
checkerFactory.err = context.Canceled
ethClient.On("SendTransactionReturnCode", mock.Anything, mock.MatchedBy(func(tx *gethTypes.Transaction) bool {
return tx.Nonce() == 0 && tx.Value().Cmp(big.NewInt(442)) == 0
}), fromAddress).Return(commonclient.Successful, nil).Once()
ethTx := mustCreateUnstartedGeneratedTx(t, txStore, fromAddress, testutils.FixtureChainID,
txRequestWithValue(big.Int(assets.NewEthValue(442))),
txRequestWithChecker(checker))
{
retryable, err := eb.ProcessUnstartedTxs(tests.Context(t), fromAddress)
assert.NoError(t, err)
assert.False(t, retryable)
}
// Check ethtx was sent
ethTx, err := txStore.FindTxWithAttempts(ctx, ethTx.ID)
require.NoError(t, err)
assert.Equal(t, txmgrcommon.TxUnconfirmed, ethTx.State)
})`
$DIR/core/chains/evm/txmgr/broadcaster_test.go: `.On("SendTransactionReturnCode", mock.Anything, mock.MatchedBy(func(tx *gethTypes.Transaction) bool {
return tx.Nonce() == 0 && tx.Value().Cmp(big.NewInt(442)) == 0
}), fromAddress)`
$DIR/core/chains/evm/txmgr/broadcaster_test.go: `.MatchedBy(func(tx *gethTypes.Transaction) bool {
return tx.Nonce() == 0 && tx.Value().Cmp(big.NewInt(442)) == 0
})`
$DIR/core/chains/evm/txmgr/broadcaster_test.go: `.Nonce()`
$DIR/core/chains/evm/txmgr/broadcaster_test.go: `.Value()`
$DIR/core/chains/evm/txmgr/broadcaster_test.go: `.Cmp(big.NewInt(442))`
$DIR/core/chains/evm/txmgr/broadcaster_test.go: `.NewInt(442)`
$DIR/core/chains/evm/txmgr/broadcaster_test.go: `.Return(commonclient.Successful, nil)`
$DIR/core/chains/evm/txmgr/broadcaster_test.go: `.Once()`
$DIR/core/chains/evm/txmgr/broadcaster_test.go: `.Int(assets.NewEthValue(442))`
$DIR/core/chains/evm/txmgr/broadcaster_test.go: `.NewEthValue(442)`
$DIR/core/chains/evm/txmgr/broadcaster_test.go: `.ProcessUnstartedTxs(tests.Context(t), fromAddress)`
$DIR/core/chains/evm/txmgr/broadcaster_test.go: `.Context(t)`
$DIR/core/chains/evm/txmgr/broadcaster_test.go: `.FindTxWithAttempts(ctx, ethTx.ID)`
$DIR/core/chains/evm/txmgr/broadcaster_test.go: `.Run("when transmit checking succeeds, sends tx as normal", func(t *testing.T) {
// Checker will return no error
checkerFactory.err = nil
ethClient.On("SendTransactionReturnCode", mock.Anything, mock.MatchedBy(func(tx *gethTypes.Transaction) bool {
return tx.Nonce() == 1 && tx.Value().Cmp(big.NewInt(442)) == 0
}), fromAddress).Return(commonclient.Successful, nil).Once()
ethTx := mustCreateUnstartedGeneratedTx(t, txStore, fromAddress, testutils.FixtureChainID,
txRequestWithValue(big.Int(assets.NewEthValue(442))),
txRequestWithChecker(checker))
{
retryable, err := eb.ProcessUnstartedTxs(tests.Context(t), fromAddress)
assert.NoError(t, err)
assert.False(t, retryable)
}
// Check ethtx was sent
ethTx, err := txStore.FindTxWithAttempts(ctx, ethTx.ID)
require.NoError(t, err)
assert.Equal(t, txmgrcommon.TxUnconfirmed, ethTx.State)
})`
$DIR/core/chains/evm/txmgr/broadcaster_test.go: `.On("SendTransactionReturnCode", mock.Anything, mock.MatchedBy(func(tx *gethTypes.Transaction) bool {
return tx.Nonce() == 1 && tx.Value().Cmp(big.NewInt(442)) == 0
}), fromAddress)`
$DIR/core/chains/evm/txmgr/broadcaster_test.go: `.MatchedBy(func(tx *gethTypes.Transaction) bool {
return tx.Nonce() == 1 && tx.Value().Cmp(big.NewInt(442)) == 0
})`
$DIR/core/chains/evm/txmgr/broadcaster_test.go: `.Nonce()`
$DIR/core/chains/evm/txmgr/broadcaster_test.go: `.Value()`
$DIR/core/chains/evm/txmgr/broadcaster_test.go: `.Cmp(big.NewInt(442))`
$DIR/core/chains/evm/txmgr/broadcaster_test.go: `.NewInt(442)`
$DIR/core/chains/evm/txmgr/broadcaster_test.go: `.Return(commonclient.Successful, nil)`
$DIR/core/chains/evm/txmgr/broadcaster_test.go: `.Once()`
$DIR/core/chains/evm/txmgr/broadcaster_test.go: `.Int(assets.NewEthValue(442))`
$DIR/core/chains/evm/txmgr/broadcaster_test.go: `.NewEthValue(442)`
$DIR/core/chains/evm/txmgr/broadcaster_test.go: `.ProcessUnstartedTxs(tests.Context(t), fromAddress)`
$DIR/core/chains/evm/txmgr/broadcaster_test.go: `.Context(t)`
$DIR/core/chains/evm/txmgr/broadcaster_test.go: `.FindTxWithAttempts(ctx, ethTx.ID)`
$DIR/core/chains/evm/txmgr/broadcaster_test.go: `.New("fatal checker error")`
$DIR/core/chains/evm/txmgr/broadcaster_test.go: `.ProcessUnstartedTxs(tests.Context(t), fromAddress)`
$DIR/core/chains/evm/txmgr/broadcaster_test.go: `.Context(t)`
$DIR/core/chains/evm/txmgr/broadcaster_test.go: `.FindTxWithAttempts(ctx, ethTx.ID)`
$DIR/core/chains/evm/txmgr/broadcaster_test.go: `.FullTestDBV2(t, nil)`
$DIR/core/chains/evm/txmgr/broadcaster_test.go: `.NewTestTxStore(t, db)`
$DIR/core/chains/evm/txmgr/broadcaster_test.go: `.NewChainScopedConfig(t, cfg)`
$DIR/core/chains/evm/txmgr/broadcaster_test.go: `.NewEvmTxmConfig(ccfg.EVM())`
$DIR/core/chains/evm/txmgr/broadcaster_test.go: `.EVM()`
$DIR/core/chains/evm/txmgr/broadcaster_test.go: `.NewEthClientMockWithDefaultChain(t)`
$DIR/core/chains/evm/txmgr/broadcaster_test.go: `.NewKeyStore(t, db)`
$DIR/core/chains/evm/txmgr/broadcaster_test.go: `.Eth()`
$DIR/core/chains/evm/txmgr/broadcaster_test.go: `.MustInsertRandomKeyReturningState(t, ethKeyStore)`
$DIR/core/chains/evm/txmgr/broadcaster_test.go: `.NewEvmFeeEstimator(t)`
$DIR/core/chains/evm/txmgr/broadcaster_test.go: `.NewEvmTxAttemptBuilder(*ethClient.ConfiguredChainID(), ccfg.EVM().GasEstimator(), ethKeyStore, estimator)`
$DIR/core/chains/evm/txmgr/broadcaster_test.go: `.ConfiguredChainID()`
$DIR/core/chains/evm/txmgr/broadcaster_test.go: `.EVM()`
$DIR/core/chains/evm/txmgr/broadcaster_test.go: `.GasEstimator()`
$DIR/core/chains/evm/txmgr/broadcaster_test.go: `.On("GetFee", mock.Anything, mock.Anything, mock.Anything, ccfg.EVM().GasEstimator().PriceMaxKey(fromAddress))`
$DIR/core/chains/evm/txmgr/broadcaster_test.go: `.EVM()`
$DIR/core/chains/evm/txmgr/broadcaster_test.go: `.GasEstimator()`
$DIR/core/chains/evm/txmgr/broadcaster_test.go: `.PriceMaxKey(fromAddress)`
$DIR/core/chains/evm/txmgr/broadcaster_test.go: `.Return(gas.EvmFee{Legacy: assets.GWei(32)}, uint64(500), nil)`
$DIR/core/chains/evm/txmgr/broadcaster_test.go: `.GWei(32)`
$DIR/core/chains/evm/txmgr/broadcaster_test.go: `.Run(func(_ mock.Arguments) {
close(chStartEstimate)
<-chBlock
})`
$DIR/core/chains/evm/txmgr/broadcaster_test.go: `.Once()`
$DIR/core/chains/evm/txmgr/broadcaster_test.go: `.On("PendingNonceAt", mock.Anything, fromAddress)`
$DIR/core/chains/evm/txmgr/broadcaster_test.go: `.Return(uint64(0), nil)`
$DIR/core/chains/evm/txmgr/broadcaster_test.go: `.NewEvmTxmClient(ethClient, nil)`
$DIR/core/chains/evm/txmgr/broadcaster_test.go: `.NewEvmBroadcaster(
txStore,
txmClient,
evmcfg,
txmgr.NewEvmTxmFeeConfig(ccfg.EVM().GasEstimator()),
ccfg.EVM().Transactions(),
cfg.Database().Listener(),
ethKeyStore,
txBuilder,
logger.Test(t),
&testCheckerFactory{},
false,
)`
$DIR/core/chains/evm/txmgr/broadcaster_test.go: `.NewEvmTxmFeeConfig(ccfg.EVM().GasEstimator())`
$DIR/core/chains/evm/txmgr/broadcaster_test.go: `.EVM()`
$DIR/core/chains/evm/txmgr/broadcaster_test.go: `.GasEstimator()`
$DIR/core/chains/evm/txmgr/broadcaster_test.go: `.EVM()`
$DIR/core/chains/evm/txmgr/broadcaster_test.go: `.Transactions()`
$DIR/core/chains/evm/txmgr/broadcaster_test.go: `.Database()`
$DIR/core/chains/evm/txmgr/broadcaster_test.go: `.Listener()`
$DIR/core/chains/evm/txmgr/broadcaster_test.go: `.Test(t)`
$DIR/core/chains/evm/txmgr/broadcaster_test.go: `.XXXTestDisableUnstartedTxAutoProcessing()`
$DIR/core/chains/evm/txmgr/broadcaster_test.go: `.Run(t, eb)`
$DIR/core/chains/evm/txmgr/broadcaster_test.go: `.After(5 * time.Second)`
$DIR/core/chains/evm/txmgr/broadcaster_test.go: `.ProcessUnstartedTxs(tests.Context(t), fromAddress)`
$DIR/core/chains/evm/txmgr/broadcaster_test.go: `.Context(t)`
$DIR/core/chains/evm/txmgr/broadcaster_test.go: `.NewSqlxDB(t)`
$DIR/core/chains/evm/txmgr/broadcaster_test.go: `.NewGeneralConfig(t, func(c *chainlink.Config, s *chainlink.Secrets) {
// Configured gas price changed
lm := decimal.RequireFromString("1.3")
c.EVM[0].GasEstimator.LimitMultiplier = &lm
})`
$DIR/core/chains/evm/txmgr/broadcaster_test.go: `.RequireFromString("1.3")`
$DIR/core/chains/evm/txmgr/broadcaster_test.go: `.NewTestTxStore(t, db)`
$DIR/core/chains/evm/txmgr/broadcaster_test.go: `.NewKeyStore(t, db)`
$DIR/core/chains/evm/txmgr/broadcaster_test.go: `.Eth()`
$DIR/core/chains/evm/txmgr/broadcaster_test.go: `.MustInsertRandomKeyReturningState(t, ethKeyStore)`
$DIR/core/chains/evm/txmgr/broadcaster_test.go: `.NewChainScopedConfig(t, cfg)`
$DIR/core/chains/evm/txmgr/broadcaster_test.go: `.NewEthClientMockWithDefaultChain(t)`
$DIR/core/chains/evm/txmgr/broadcaster_test.go: `.On("PendingNonceAt", mock.Anything, fromAddress)`
$DIR/core/chains/evm/txmgr/broadcaster_test.go: `.Return(uint64(0), nil)`
$DIR/core/chains/evm/txmgr/broadcaster_test.go: `.Once()`
$DIR/core/chains/evm/txmgr/broadcaster_test.go: `.NewNonceTracker(logger.Test(t), txStore, txmgr.NewEvmTxmClient(ethClient, nil))`
$DIR/core/chains/evm/txmgr/broadcaster_test.go: `.Test(t)`
$DIR/core/chains/evm/txmgr/broadcaster_test.go: `.NewEvmTxmClient(ethClient, nil)`
$DIR/core/chains/evm/txmgr/broadcaster_test.go: `.On("SendTransactionReturnCode", mock.Anything, mock.MatchedBy(func(tx *gethTypes.Transaction) bool {
assert.Equal(t, int(1600), int(tx.Gas()))
return true
}), fromAddress)`
$DIR/core/chains/evm/txmgr/broadcaster_test.go: `.MatchedBy(func(tx *gethTypes.Transaction) bool {
assert.Equal(t, int(1600), int(tx.Gas()))
return true
})`
$DIR/core/chains/evm/txmgr/broadcaster_test.go: `.Return(commonclient.Successful, nil)`
$DIR/core/chains/evm/txmgr/broadcaster_test.go: `.Once()`
$DIR/core/chains/evm/txmgr/broadcaster_test.go: `.HexToAddress("0x6C03DDA95a2AEd917EeCc6eddD4b9D16E6380411")`
$DIR/core/chains/evm/txmgr/broadcaster_test.go: `.Int(assets.NewEthValue(242))`
$DIR/core/chains/evm/txmgr/broadcaster_test.go: `.NewEthValue(242)`
$DIR/core/chains/evm/txmgr/broadcaster_test.go: `.NewSendEveryStrategy()`
$DIR/core/chains/evm/txmgr/broadcaster_test.go: `.ProcessUnstartedTxs(tests.Context(t), fromAddress)`
$DIR/core/chains/evm/txmgr/broadcaster_test.go: `.Context(t)`
$DIR/core/chains/evm/txmgr/broadcaster_test.go: `.HexToAddress("0x6C03DDA95a2AEd917EeCc6eddD4b9D16E6380411")`
$DIR/core/chains/evm/txmgr/broadcaster_test.go: `.Int(assets.NewEthValue(142))`
$DIR/core/chains/evm/txmgr/broadcaster_test.go: `.NewEthValue(142)`
$DIR/core/chains/evm/txmgr/broadcaster_test.go: `.Nonce(916714082576372851)`
$DIR/core/chains/evm/txmgr/broadcaster_test.go: `.NewGeneralConfig(t, nil)`
$DIR/core/chains/evm/txmgr/broadcaster_test.go: `.NewChainScopedConfig(t, cfg)`
$DIR/core/chains/evm/txmgr/broadcaster_test.go: `.Context(t)`
$DIR/core/chains/evm/txmgr/broadcaster_test.go: `.Run("cannot be more than one transaction per address in an unfinished state", func(t *testing.T) {
db := pgtest.NewSqlxDB(t)
txStore := cltest.NewTestTxStore(t, db)
ethKeyStore := cltest.NewKeyStore(t, db).Eth()
_, fromAddress := cltest.RandomKey{Nonce: nextNonce.Int64()}.MustInsertWithState(t, ethKeyStore)
firstInProgress := txmgr.Tx{
FromAddress: fromAddress,
Sequence: &firstNonce,
ToAddress: toAddress,
EncodedPayload: encodedPayload,
Value: value,
FeeLimit: gasLimit,
Error: null.String{},
State: txmgrcommon.TxInProgress,
}
secondInProgress := txmgr.Tx{
FromAddress: fromAddress,
Sequence: &secondNonce,
ToAddress: toAddress,
EncodedPayload: encodedPayload,
Value: value,
FeeLimit: gasLimit,
Error: null.String{},
State: txmgrcommon.TxInProgress,
}
require.NoError(t, txStore.InsertTx(ctx, &firstInProgress))
err := txStore.InsertTx(ctx, &secondInProgress)
require.Error(t, err)
assert.Contains(t, err.Error(), "ERROR: duplicate key value violates unique constraint \"idx_only_one_in_progress_tx_per_account_id_per_evm_chain_id\" (SQLSTATE 23505)")
})`
$DIR/core/chains/evm/txmgr/broadcaster_test.go: `.NewSqlxDB(t)`
$DIR/core/chains/evm/txmgr/broadcaster_test.go: `.NewTestTxStore(t, db)`
$DIR/core/chains/evm/txmgr/broadcaster_test.go: `.NewKeyStore(t, db)`
$DIR/core/chains/evm/txmgr/broadcaster_test.go: `.Eth()`
$DIR/core/chains/evm/txmgr/broadcaster_test.go: `.Int64()`
$DIR/core/chains/evm/txmgr/broadcaster_test.go: `.MustInsertWithState(t, ethKeyStore)`
$DIR/core/chains/evm/txmgr/broadcaster_test.go: `.InsertTx(ctx, &secondInProgress)`
$DIR/core/chains/evm/txmgr/broadcaster_test.go: `.Run("previous run assigned nonce but never broadcast", func(t *testing.T) {
db := pgtest.NewSqlxDB(t)
txStore := cltest.NewTestTxStore(t, db)
ethKeyStore := cltest.NewKeyStore(t, db).Eth()
_, fromAddress := cltest.RandomKey{Nonce: nextNonce.Int64()}.MustInsertWithState(t, ethKeyStore)
ethClient := testutils.NewEthClientMockWithDefaultChain(t)
ethClient.On("PendingNonceAt", mock.Anything, fromAddress).Return(uint64(0), nil).Once()
nonceTracker := txmgr.NewNonceTracker(logger.Test(t), txStore, txmgr.NewEvmTxmClient(ethClient, nil))
eb := NewTestEthBroadcaster(t, txStore, ethClient, ethKeyStore, cfg, evmcfg, &testCheckerFactory{}, false, nonceTracker)
// Crashed right after we commit the database transaction that saved
// the nonce to the eth_tx so evm.key_states.next_nonce has not been
// incremented yet
inProgressEthTx := mustInsertInProgressEthTxWithAttempt(t, txStore, firstNonce, fromAddress)
ethClient.On("SendTransactionReturnCode", mock.Anything, mock.MatchedBy(func(tx *gethTypes.Transaction) bool {
return tx.Nonce() == uint64(firstNonce)
}), fromAddress).Return(commonclient.Successful, nil).Once()
// Do the thing
{
retryable, err := eb.ProcessUnstartedTxs(tests.Context(t), fromAddress)
assert.NoError(t, err)
assert.False(t, retryable)
}
// Check it was saved correctly with its attempt
etx, err := txStore.FindTxWithAttempts(ctx, inProgressEthTx.ID)
require.NoError(t, err)
assert.NotNil(t, etx.BroadcastAt)
assert.NotNil(t, etx.InitialBroadcastAt)
assert.False(t, etx.Error.Valid)
assert.Len(t, etx.TxAttempts, 1)
assert.Equal(t, txmgrtypes.TxAttemptBroadcast, etx.TxAttempts[0].State)
})`
$DIR/core/chains/evm/txmgr/broadcaster_test.go: `.NewSqlxDB(t)`
$DIR/core/chains/evm/txmgr/broadcaster_test.go: `.NewTestTxStore(t, db)`
$DIR/core/chains/evm/txmgr/broadcaster_test.go: `.NewKeyStore(t, db)`
$DIR/core/chains/evm/txmgr/broadcaster_test.go: `.Eth()`
$DIR/core/chains/evm/txmgr/broadcaster_test.go: `.Int64()`
$DIR/core/chains/evm/txmgr/broadcaster_test.go: `.MustInsertWithState(t, ethKeyStore)`
$DIR/core/chains/evm/txmgr/broadcaster_test.go: `.NewEthClientMockWithDefaultChain(t)`
$DIR/core/chains/evm/txmgr/broadcaster_test.go: `.On("PendingNonceAt", mock.Anything, fromAddress)`
$DIR/core/chains/evm/txmgr/broadcaster_test.go: `.Return(uint64(0), nil)`
$DIR/core/chains/evm/txmgr/broadcaster_test.go: `.Once()`
$DIR/core/chains/evm/txmgr/broadcaster_test.go: `.NewNonceTracker(logger.Test(t), txStore, txmgr.NewEvmTxmClient(ethClient, nil))`
$DIR/core/chains/evm/txmgr/broadcaster_test.go: `.Test(t)`
$DIR/core/chains/evm/txmgr/broadcaster_test.go: `.NewEvmTxmClient(ethClient, nil)`
$DIR/core/chains/evm/txmgr/broadcaster_test.go: `.On("SendTransactionReturnCode", mock.Anything, mock.MatchedBy(func(tx *gethTypes.Transaction) bool {
return tx.Nonce() == uint64(firstNonce)
}), fromAddress)`
$DIR/core/chains/evm/txmgr/broadcaster_test.go: `.MatchedBy(func(tx *gethTypes.Transaction) bool {
return tx.Nonce() == uint64(firstNonce)
})`
$DIR/core/chains/evm/txmgr/broadcaster_test.go: `.Nonce()`
$DIR/core/chains/evm/txmgr/broadcaster_test.go: `.Return(commonclient.Successful, nil)`
$DIR/core/chains/evm/txmgr/broadcaster_test.go: `.Once()`
$DIR/core/chains/evm/txmgr/broadcaster_test.go: `.ProcessUnstartedTxs(tests.Context(t), fromAddress)`
$DIR/core/chains/evm/txmgr/broadcaster_test.go: `.Context(t)`
$DIR/core/chains/evm/txmgr/broadcaster_test.go: `.FindTxWithAttempts(ctx, inProgressEthTx.ID)`
$DIR/core/chains/evm/txmgr/broadcaster_test.go: `.Run("previous run assigned nonce and broadcast but it fatally errored before we could save", func(t *testing.T) {
db := pgtest.NewSqlxDB(t)
txStore := cltest.NewTestTxStore(t, db)
ethKeyStore := cltest.NewKeyStore(t, db).Eth()
_, fromAddress := cltest.RandomKey{Nonce: nextNonce.Int64()}.MustInsertWithState(t, ethKeyStore)
ethClient := testutils.NewEthClientMockWithDefaultChain(t)
ethClient.On("PendingNonceAt", mock.Anything, fromAddress).Return(uint64(0), nil).Once()
nonceTracker := txmgr.NewNonceTracker(logger.Test(t), txStore, txmgr.NewEvmTxmClient(ethClient, nil))
eb := NewTestEthBroadcaster(t, txStore, ethClient, ethKeyStore, cfg, evmcfg, &testCheckerFactory{}, false, nonceTracker)
// Crashed right after we commit the database transaction that saved the nonce to the eth_tx
inProgressEthTx := mustInsertInProgressEthTxWithAttempt(t, txStore, firstNonce, fromAddress)
ethClient.On("SendTransactionReturnCode", mock.Anything, mock.MatchedBy(func(tx *gethTypes.Transaction) bool {
return tx.Nonce() == uint64(firstNonce)
}), fromAddress).Return(commonclient.Fatal, errors.New("exceeds block gas limit")).Once()
// Do the thing
{
retryable, err := eb.ProcessUnstartedTxs(tests.Context(t), fromAddress)
assert.NoError(t, err)
assert.False(t, retryable)
}
// Check it was saved correctly with its attempt
etx, err := txStore.FindTxWithAttempts(ctx, inProgressEthTx.ID)
require.NoError(t, err)
assert.Nil(t, etx.BroadcastAt)
assert.Nil(t, etx.InitialBroadcastAt)
assert.True(t, etx.Error.Valid)
assert.Equal(t, "exceeds block gas limit", etx.Error.String)
assert.Len(t, etx.TxAttempts, 0)
})`
$DIR/core/chains/evm/txmgr/broadcaster_test.go: `.NewSqlxDB(t)`
$DIR/core/chains/evm/txmgr/broadcaster_test.go: `.NewTestTxStore(t, db)`
$DIR/core/chains/evm/txmgr/broadcaster_test.go: `.NewKeyStore(t, db)`
$DIR/core/chains/evm/txmgr/broadcaster_test.go: `.Eth()`
$DIR/core/chains/evm/txmgr/broadcaster_test.go: `.Int64()`
$DIR/core/chains/evm/txmgr/broadcaster_test.go: `.MustInsertWithState(t, ethKeyStore)`
$DIR/core/chains/evm/txmgr/broadcaster_test.go: `.NewEthClientMockWithDefaultChain(t)`
$DIR/core/chains/evm/txmgr/broadcaster_test.go: `.On("PendingNonceAt", mock.Anything, fromAddress)`
$DIR/core/chains/evm/txmgr/broadcaster_test.go: `.Return(uint64(0), nil)`
$DIR/core/chains/evm/txmgr/broadcaster_test.go: `.Once()`
$DIR/core/chains/evm/txmgr/broadcaster_test.go: `.NewNonceTracker(logger.Test(t), txStore, txmgr.NewEvmTxmClient(ethClient, nil))`
$DIR/core/chains/evm/txmgr/broadcaster_test.go: `.Test(t)`
$DIR/core/chains/evm/txmgr/broadcaster_test.go: `.NewEvmTxmClient(ethClient, nil)`
$DIR/core/chains/evm/txmgr/broadcaster_test.go: `.On("SendTransactionReturnCode", mock.Anything, mock.MatchedBy(func(tx *gethTypes.Transaction) bool {
return tx.Nonce() == uint64(firstNonce)
}), fromAddress)`
$DIR/core/chains/evm/txmgr/broadcaster_test.go: `.MatchedBy(func(tx *gethTypes.Transaction) bool {
return tx.Nonce() == uint64(firstNonce)
})`
$DIR/core/chains/evm/txmgr/broadcaster_test.go: `.Nonce()`
$DIR/core/chains/evm/txmgr/broadcaster_test.go: `.Return(commonclient.Fatal, errors.New("exceeds block gas limit"))`
$DIR/core/chains/evm/txmgr/broadcaster_test.go: `.New("exceeds block gas limit")`
$DIR/core/chains/evm/txmgr/broadcaster_test.go: `.Once()`
$DIR/core/chains/evm/txmgr/broadcaster_test.go: `.ProcessUnstartedTxs(tests.Context(t), fromAddress)`
$DIR/core/chains/evm/txmgr/broadcaster_test.go: `.Context(t)`
$DIR/core/chains/evm/txmgr/broadcaster_test.go: `.FindTxWithAttempts(ctx, inProgressEthTx.ID)`
$DIR/core/chains/evm/txmgr/broadcaster_test.go: `.Run("previous run assigned nonce and broadcast and is now in mempool", func(t *testing.T) {
db := pgtest.NewSqlxDB(t)
txStore := cltest.NewTestTxStore(t, db)
ethKeyStore := cltest.NewKeyStore(t, db).Eth()
_, fromAddress := cltest.RandomKey{Nonce: nextNonce.Int64()}.MustInsertWithState(t, ethKeyStore)
ethClient := testutils.NewEthClientMockWithDefaultChain(t)
ethClient.On("PendingNonceAt", mock.Anything, fromAddress).Return(uint64(0), nil).Once()
nonceTracker := txmgr.NewNonceTracker(logger.Test(t), txStore, txmgr.NewEvmTxmClient(ethClient, nil))
eb := NewTestEthBroadcaster(t, txStore, ethClient, ethKeyStore, cfg, evmcfg, &testCheckerFactory{}, false, nonceTracker)
// Crashed right after we commit the database transaction that saved the nonce to the eth_tx
inProgressEthTx := mustInsertInProgressEthTxWithAttempt(t, txStore, firstNonce, fromAddress)
ethClient.On("SendTransactionReturnCode", mock.Anything, mock.MatchedBy(func(tx *gethTypes.Transaction) bool {
return tx.Nonce() == uint64(firstNonce)
}), fromAddress).Return(commonclient.Successful, errors.New("known transaction: a1313bd99a81fb4d8ad1d2e90b67c6b3fa77545c990d6251444b83b70b6f8980")).Once()
// Do the thing
{
retryable, err := eb.ProcessUnstartedTxs(tests.Context(t), fromAddress)
assert.NoError(t, err)
assert.False(t, retryable)
}
// Check it was saved correctly with its attempt
etx, err := txStore.FindTxWithAttempts(ctx, inProgressEthTx.ID)
require.NoError(t, err)
assert.NotNil(t, etx.BroadcastAt)
assert.NotNil(t, etx.InitialBroadcastAt)
assert.False(t, etx.Error.Valid)
assert.Len(t, etx.TxAttempts, 1)
})`
$DIR/core/chains/evm/txmgr/broadcaster_test.go: `.NewSqlxDB(t)`
$DIR/core/chains/evm/txmgr/broadcaster_test.go: `.NewTestTxStore(t, db)`
$DIR/core/chains/evm/txmgr/broadcaster_test.go: `.NewKeyStore(t, db)`
$DIR/core/chains/evm/txmgr/broadcaster_test.go: `.Eth()`
$DIR/core/chains/evm/txmgr/broadcaster_test.go: `.Int64()`
$DIR/core/chains/evm/txmgr/broadcaster_test.go: `.MustInsertWithState(t, ethKeyStore)`
$DIR/core/chains/evm/txmgr/broadcaster_test.go: `.NewEthClientMockWithDefaultChain(t)`
$DIR/core/chains/evm/txmgr/broadcaster_test.go: `.On("PendingNonceAt", mock.Anything, fromAddress)`
$DIR/core/chains/evm/txmgr/broadcaster_test.go: `.Return(uint64(0), nil)`
$DIR/core/chains/evm/txmgr/broadcaster_test.go: `.Once()`
$DIR/core/chains/evm/txmgr/broadcaster_test.go: `.NewNonceTracker(logger.Test(t), txStore, txmgr.NewEvmTxmClient(ethClient, nil))`
$DIR/core/chains/evm/txmgr/broadcaster_test.go: `.Test(t)`
$DIR/core/chains/evm/txmgr/broadcaster_test.go: `.NewEvmTxmClient(ethClient, nil)`
$DIR/core/chains/evm/txmgr/broadcaster_test.go: `.On("SendTransactionReturnCode", mock.Anything, mock.MatchedBy(func(tx *gethTypes.Transaction) bool {
return tx.Nonce() == uint64(firstNonce)
}), fromAddress)`
$DIR/core/chains/evm/txmgr/broadcaster_test.go: `.MatchedBy(func(tx *gethTypes.Transaction) bool {
return tx.Nonce() == uint64(firstNonce)
})`
$DIR/core/chains/evm/txmgr/broadcaster_test.go: `.Nonce()`
$DIR/core/chains/evm/txmgr/broadcaster_test.go: `.Return(commonclient.Successful, errors.New("known transaction: a1313bd99a81fb4d8ad1d2e90b67c6b3fa77545c990d6251444b83b70b6f8980"))`
$DIR/core/chains/evm/txmgr/broadcaster_test.go: `.New("known transaction: a1313bd99a81fb4d8ad1d2e90b67c6b3fa77545c990d6251444b83b70b6f8980")`
$DIR/core/chains/evm/txmgr/broadcaster_test.go: `.Once()`
$DIR/core/chains/evm/txmgr/broadcaster_test.go: `.ProcessUnstartedTxs(tests.Context(t), fromAddress)`
$DIR/core/chains/evm/txmgr/broadcaster_test.go: `.Context(t)`
$DIR/core/chains/evm/txmgr/broadcaster_test.go: `.FindTxWithAttempts(ctx, inProgressEthTx.ID)`
$DIR/core/chains/evm/txmgr/broadcaster_test.go: `.Run("previous run assigned nonce and broadcast and now the transaction has been confirmed", func(t *testing.T) {
db := pgtest.NewSqlxDB(t)
txStore := cltest.NewTestTxStore(t, db)
ethKeyStore := cltest.NewKeyStore(t, db).Eth()
_, fromAddress := cltest.RandomKey{Nonce: nextNonce.Int64()}.MustInsertWithState(t, ethKeyStore)
ethClient := testutils.NewEthClientMockWithDefaultChain(t)
ethClient.On("PendingNonceAt", mock.Anything, fromAddress).Return(uint64(0), nil).Once()
nonceTracker := txmgr.NewNonceTracker(logger.Test(t), txStore, txmgr.NewEvmTxmClient(ethClient, nil))
eb := NewTestEthBroadcaster(t, txStore, ethClient, ethKeyStore, cfg, evmcfg, &testCheckerFactory{}, false, nonceTracker)
// Crashed right after we commit the database transaction that saved the nonce to the eth_tx
inProgressEthTx := mustInsertInProgressEthTxWithAttempt(t, txStore, firstNonce, fromAddress)
ethClient.On("SendTransactionReturnCode", mock.Anything, mock.MatchedBy(func(tx *gethTypes.Transaction) bool {
return tx.Nonce() == uint64(firstNonce)
}), fromAddress).Return(commonclient.TransactionAlreadyKnown, errors.New("nonce too low")).Once()
// Do the thing
{
retryable, err := eb.ProcessUnstartedTxs(tests.Context(t), fromAddress)
assert.NoError(t, err)
assert.False(t, retryable)
}
// Check it was saved correctly with its attempt
etx, err := txStore.FindTxWithAttempts(ctx, inProgressEthTx.ID)
require.NoError(t, err)
require.NotNil(t, etx.BroadcastAt)
assert.Equal(t, *etx.BroadcastAt, etx.CreatedAt)
assert.NotNil(t, etx.InitialBroadcastAt)
assert.False(t, etx.Error.Valid)
assert.Len(t, etx.TxAttempts, 1)
})`
$DIR/core/chains/evm/txmgr/broadcaster_test.go: `.NewSqlxDB(t)`
$DIR/core/chains/evm/txmgr/broadcaster_test.go: `.NewTestTxStore(t, db)`
$DIR/core/chains/evm/txmgr/broadcaster_test.go: `.NewKeyStore(t, db)`
$DIR/core/chains/evm/txmgr/broadcaster_test.go: `.Eth()`
$DIR/core/chains/evm/txmgr/broadcaster_test.go: `.Int64()`
$DIR/core/chains/evm/txmgr/broadcaster_test.go: `.MustInsertWithState(t, ethKeyStore)`
$DIR/core/chains/evm/txmgr/broadcaster_test.go: `.NewEthClientMockWithDefaultChain(t)`
$DIR/core/chains/evm/txmgr/broadcaster_test.go: `.On("PendingNonceAt", mock.Anything, fromAddress)`
$DIR/core/chains/evm/txmgr/broadcaster_test.go: `.Return(uint64(0), nil)`
$DIR/core/chains/evm/txmgr/broadcaster_test.go: `.Once()`
$DIR/core/chains/evm/txmgr/broadcaster_test.go: `.NewNonceTracker(logger.Test(t), txStore, txmgr.NewEvmTxmClient(ethClient, nil))`
$DIR/core/chains/evm/txmgr/broadcaster_test.go: `.Test(t)`
$DIR/core/chains/evm/txmgr/broadcaster_test.go: `.NewEvmTxmClient(ethClient, nil)`
$DIR/core/chains/evm/txmgr/broadcaster_test.go: `.On("SendTransactionReturnCode", mock.Anything, mock.MatchedBy(func(tx *gethTypes.Transaction) bool {
return tx.Nonce() == uint64(firstNonce)
}), fromAddress)`
$DIR/core/chains/evm/txmgr/broadcaster_test.go: `.MatchedBy(func(tx *gethTypes.Transaction) bool {
return tx.Nonce() == uint64(firstNonce)
})`
$DIR/core/chains/evm/txmgr/broadcaster_test.go: `.Nonce()`
$DIR/core/chains/evm/txmgr/broadcaster_test.go: `.Return(commonclient.TransactionAlreadyKnown, errors.New("nonce too low"))`
$DIR/core/chains/evm/txmgr/broadcaster_test.go: `.New("nonce too low")`
$DIR/core/chains/evm/txmgr/broadcaster_test.go: `.Once()`
$DIR/core/chains/evm/txmgr/broadcaster_test.go: `.ProcessUnstartedTxs(tests.Context(t), fromAddress)`
$DIR/core/chains/evm/txmgr/broadcaster_test.go: `.Context(t)`
$DIR/core/chains/evm/txmgr/broadcaster_test.go: `.FindTxWithAttempts(ctx, inProgressEthTx.ID)`
$DIR/core/chains/evm/txmgr/broadcaster_test.go: `.Run("previous run assigned nonce and then failed to reach node for some reason and node is still down", func(t *testing.T) {
failedToReachNodeError := context.DeadlineExceeded
db := pgtest.NewSqlxDB(t)
txStore := cltest.NewTestTxStore(t, db)
ethKeyStore := cltest.NewKeyStore(t, db).Eth()
_, fromAddress := cltest.RandomKey{Nonce: nextNonce.Int64()}.MustInsertWithState(t, ethKeyStore)
ethClient := testutils.NewEthClientMockWithDefaultChain(t)
ethClient.On("PendingNonceAt", mock.Anything, fromAddress).Return(uint64(0), nil).Once()
nonceTracker := txmgr.NewNonceTracker(logger.Test(t), txStore, txmgr.NewEvmTxmClient(ethClient, nil))
eb := NewTestEthBroadcaster(t, txStore, ethClient, ethKeyStore, cfg, evmcfg, &testCheckerFactory{}, false, nonceTracker)
// Crashed right after we commit the database transaction that saved the nonce to the eth_tx
inProgressEthTx := mustInsertInProgressEthTxWithAttempt(t, txStore, firstNonce, fromAddress)
ethClient.On("SendTransactionReturnCode", mock.Anything, mock.MatchedBy(func(tx *gethTypes.Transaction) bool {
return tx.Nonce() == uint64(firstNonce)
}), fromAddress).Return(commonclient.Retryable, failedToReachNodeError).Once()
// Do the thing
retryable, err := eb.ProcessUnstartedTxs(tests.Context(t), fromAddress)
require.Error(t, err)
assert.Contains(t, err.Error(), failedToReachNodeError.Error())
assert.True(t, retryable)
// Check it was left in the unfinished state
etx, err := txStore.FindTxWithAttempts(ctx, inProgressEthTx.ID)
require.NoError(t, err)
assert.Nil(t, etx.BroadcastAt)
assert.Nil(t, etx.InitialBroadcastAt)
assert.Equal(t, nextNonce, *etx.Sequence)
assert.False(t, etx.Error.Valid)
assert.Len(t, etx.TxAttempts, 1)
})`
$DIR/core/chains/evm/txmgr/broadcaster_test.go: `.NewSqlxDB(t)`
$DIR/core/chains/evm/txmgr/broadcaster_test.go: `.NewTestTxStore(t, db)`
$DIR/core/chains/evm/txmgr/broadcaster_test.go: `.NewKeyStore(t, db)`
$DIR/core/chains/evm/txmgr/broadcaster_test.go: `.Eth()`
$DIR/core/chains/evm/txmgr/broadcaster_test.go: `.Int64()`
$DIR/core/chains/evm/txmgr/broadcaster_test.go: `.MustInsertWithState(t, ethKeyStore)`
$DIR/core/chains/evm/txmgr/broadcaster_test.go: `.NewEthClientMockWithDefaultChain(t)`
$DIR/core/chains/evm/txmgr/broadcaster_test.go: `.On("PendingNonceAt", mock.Anything, fromAddress)`
$DIR/core/chains/evm/txmgr/broadcaster_test.go: `.Return(uint64(0), nil)`
$DIR/core/chains/evm/txmgr/broadcaster_test.go: `.Once()`
$DIR/core/chains/evm/txmgr/broadcaster_test.go: `.NewNonceTracker(logger.Test(t), txStore, txmgr.NewEvmTxmClient(ethClient, nil))`
$DIR/core/chains/evm/txmgr/broadcaster_test.go: `.Test(t)`
$DIR/core/chains/evm/txmgr/broadcaster_test.go: `.NewEvmTxmClient(ethClient, nil)`
$DIR/core/chains/evm/txmgr/broadcaster_test.go: `.On("SendTransactionReturnCode", mock.Anything, mock.MatchedBy(func(tx *gethTypes.Transaction) bool {
return tx.Nonce() == uint64(firstNonce)
}), fromAddress)`
$DIR/core/chains/evm/txmgr/broadcaster_test.go: `.MatchedBy(func(tx *gethTypes.Transaction) bool {
return tx.Nonce() == uint64(firstNonce)
})`
$DIR/core/chains/evm/txmgr/broadcaster_test.go: `.Nonce()`
$DIR/core/chains/evm/txmgr/broadcaster_test.go: `.Return(commonclient.Retryable, failedToReachNodeError)`
$DIR/core/chains/evm/txmgr/broadcaster_test.go: `.Once()`
$DIR/core/chains/evm/txmgr/broadcaster_test.go: `.ProcessUnstartedTxs(tests.Context(t), fromAddress)`
$DIR/core/chains/evm/txmgr/broadcaster_test.go: `.Context(t)`
$DIR/core/chains/evm/txmgr/broadcaster_test.go: `.FindTxWithAttempts(ctx, inProgressEthTx.ID)`
$DIR/core/chains/evm/txmgr/broadcaster_test.go: `.NewSqlxDB(t)`
$DIR/core/chains/evm/txmgr/broadcaster_test.go: `.NewTestTxStore(t, db)`
$DIR/core/chains/evm/txmgr/broadcaster_test.go: `.NewKeyStore(t, db)`
$DIR/core/chains/evm/txmgr/broadcaster_test.go: `.Eth()`
$DIR/core/chains/evm/txmgr/broadcaster_test.go: `.Int64()`
$DIR/core/chains/evm/txmgr/broadcaster_test.go: `.MustInsertWithState(t, ethKeyStore)`
$DIR/core/chains/evm/txmgr/broadcaster_test.go: `.NewGeneralConfig(t, func(c *chainlink.Config, s *chainlink.Secrets) {
// Configured gas price changed
c.EVM[0].GasEstimator.PriceDefault = assets.NewWeiI(500000000000)
})`
$DIR/core/chains/evm/txmgr/broadcaster_test.go: `.NewWeiI(500000000000)`
$DIR/core/chains/evm/txmgr/broadcaster_test.go: `.NewChainScopedConfig(t, cfg)`
$DIR/core/chains/evm/txmgr/broadcaster_test.go: `.NewEthClientMockWithDefaultChain(t)`
$DIR/core/chains/evm/txmgr/broadcaster_test.go: `.On("PendingNonceAt", mock.Anything, fromAddress)`
$DIR/core/chains/evm/txmgr/broadcaster_test.go: `.Return(uint64(0), nil)`
$DIR/core/chains/evm/txmgr/broadcaster_test.go: `.Once()`
$DIR/core/chains/evm/txmgr/broadcaster_test.go: `.NewNonceTracker(logger.Test(t), txStore, txmgr.NewEvmTxmClient(ethClient, nil))`
$DIR/core/chains/evm/txmgr/broadcaster_test.go: `.Test(t)`
$DIR/core/chains/evm/txmgr/broadcaster_test.go: `.NewEvmTxmClient(ethClient, nil)`
$DIR/core/chains/evm/txmgr/broadcaster_test.go: `.On("SendTransactionReturnCode", mock.Anything, mock.MatchedBy(func(tx *gethTypes.Transaction) bool {
// Ensure that the gas price is the same as the original attempt
s, e := txmgr.GetGethSignedTx(attempt.SignedRawTx)
require.NoError(t, e)
return tx.Nonce() == uint64(firstNonce) && tx.GasPrice().Int64() == s.GasPrice().Int64()
}), fromAddress)`
$DIR/core/chains/evm/txmgr/broadcaster_test.go: `.MatchedBy(func(tx *gethTypes.Transaction) bool {
// Ensure that the gas price is the same as the original attempt
s, e := txmgr.GetGethSignedTx(attempt.SignedRawTx)
require.NoError(t, e)
return tx.Nonce() == uint64(firstNonce) && tx.GasPrice().Int64() == s.GasPrice().Int64()
})`
$DIR/core/chains/evm/txmgr/broadcaster_test.go: `.GetGethSignedTx(attempt.SignedRawTx)`
$DIR/core/chains/evm/txmgr/broadcaster_test.go: `.Nonce()`
$DIR/core/chains/evm/txmgr/broadcaster_test.go: `.GasPrice()`
$DIR/core/chains/evm/txmgr/broadcaster_test.go: `.Int64()`
$DIR/core/chains/evm/txmgr/broadcaster_test.go: `.GasPrice()`
$DIR/core/chains/evm/txmgr/broadcaster_test.go: `.Int64()`
$DIR/core/chains/evm/txmgr/broadcaster_test.go: `.Return(commonclient.Successful, errors.New("known transaction: a1313bd99a81fb4d8ad1d2e90b67c6b3fa77545c990d6251444b83b70b6f8980"))`
$DIR/core/chains/evm/txmgr/broadcaster_test.go: `.New("known transaction: a1313bd99a81fb4d8ad1d2e90b67c6b3fa77545c990d6251444b83b70b6f8980")`
$DIR/core/chains/evm/txmgr/broadcaster_test.go: `.Once()`
$DIR/core/chains/evm/txmgr/broadcaster_test.go: `.ProcessUnstartedTxs(tests.Context(t), fromAddress)`
$DIR/core/chains/evm/txmgr/broadcaster_test.go: `.Context(t)`
$DIR/core/chains/evm/txmgr/broadcaster_test.go: `.FindTxWithAttempts(ctx, inProgressEthTx.ID)`
$DIR/core/chains/evm/txmgr/broadcaster_test.go: `.GetGethSignedTx(attempt.SignedRawTx)`
$DIR/core/chains/evm/txmgr/broadcaster_test.go: `.HexToAddress("0x6C03DDA95a2AEd917EeCc6eddD4b9D16E6380411")`
$DIR/core/chains/evm/txmgr/broadcaster_test.go: `.Int(assets.NewEthValue(142))`
$DIR/core/chains/evm/txmgr/broadcaster_test.go: `.NewEthValue(142)`
$DIR/core/chains/evm/txmgr/broadcaster_test.go: `.NewSqlxDB(t)`
$DIR/core/chains/evm/txmgr/broadcaster_test.go: `.NewTestGeneralConfig(t)`
$DIR/core/chains/evm/txmgr/broadcaster_test.go: `.NewTestTxStore(t, db)`
$DIR/core/chains/evm/txmgr/broadcaster_test.go: `.NewKeyStore(t, db)`
$DIR/core/chains/evm/txmgr/broadcaster_test.go: `.Eth()`
$DIR/core/chains/evm/txmgr/broadcaster_test.go: `.MustInsertRandomKey(t, ethKeyStore)`
$DIR/core/chains/evm/txmgr/broadcaster_test.go: `.NewChainScopedConfig(t, cfg)`
$DIR/core/chains/evm/txmgr/broadcaster_test.go: `.NewEthClientMockWithDefaultChain(t)`
$DIR/core/chains/evm/txmgr/broadcaster_test.go: `.On("PendingNonceAt", mock.Anything, fromAddress)`
$DIR/core/chains/evm/txmgr/broadcaster_test.go: `.Return(uint64(0), nil)`
$DIR/core/chains/evm/txmgr/broadcaster_test.go: `.Once()`
$DIR/core/chains/evm/txmgr/broadcaster_test.go: `.Test(t)`
$DIR/core/chains/evm/txmgr/broadcaster_test.go: `.NewEvmTxmClient(ethClient, nil)`
$DIR/core/chains/evm/txmgr/broadcaster_test.go: `.NewNonceTracker(lggr, txStore, txmClient)`
$DIR/core/chains/evm/txmgr/broadcaster_test.go: `.Context(t)`
$DIR/core/chains/evm/txmgr/broadcaster_test.go: `.Run("if external wallet sent a transaction from the account and now the nonce is one higher than it should be and we got replacement underpriced then we assume a previous transaction of ours was the one that succeeded, and hand off to EthConfirmer", func(t *testing.T) {
mustCreateUnstartedTx(t, txStore, fromAddress, toAddress, encodedPayload, gasLimit, value, testutils.FixtureChainID)
// First send, replacement underpriced
ethClient.On("SendTransactionReturnCode", mock.Anything, mock.MatchedBy(func(tx *gethTypes.Transaction) bool {
return tx.Nonce() == uint64(0)
}), fromAddress).Return(commonclient.Successful, errors.New("replacement transaction underpriced")).Once()
// Do the thing
retryable, err := eb.ProcessUnstartedTxs(ctx, fromAddress)
assert.NoError(t, err)
assert.False(t, retryable)
// Check that the transaction was saved correctly with its attempt
// We assume success and hand off to eth confirmer to eventually mark it as failed
var latestID int64
var etx1 txmgr.Tx
require.NoError(t, db.Get(&latestID, "SELECT max(id) FROM evm.txes"))
etx1, err = txStore.FindTxWithAttempts(ctx, latestID)
require.NoError(t, err)
require.NotNil(t, etx1.BroadcastAt)
assert.NotEqual(t, etx1.CreatedAt, *etx1.BroadcastAt)
assert.NotNil(t, etx1.InitialBroadcastAt)
require.NotNil(t, etx1.Sequence)
assert.Equal(t, evmtypes.Nonce(0), *etx1.Sequence)
assert.False(t, etx1.Error.Valid)
assert.Len(t, etx1.TxAttempts, 1)
// Check that the local nonce was incremented by one
finalNextNonce := getLocalNextNonce(t, nonceTracker, fromAddress)
require.NoError(t, err)
require.NotNil(t, finalNextNonce)
require.Equal(t, int64(1), int64(finalNextNonce))
})`
$DIR/core/chains/evm/txmgr/broadcaster_test.go: `.On("SendTransactionReturnCode", mock.Anything, mock.MatchedBy(func(tx *gethTypes.Transaction) bool {
return tx.Nonce() == uint64(0)
}), fromAddress)`
$DIR/core/chains/evm/txmgr/broadcaster_test.go: `.MatchedBy(func(tx *gethTypes.Transaction) bool {
return tx.Nonce() == uint64(0)
})`
$DIR/core/chains/evm/txmgr/broadcaster_test.go: `.Nonce()`
$DIR/core/chains/evm/txmgr/broadcaster_test.go: `.Return(commonclient.Successful, errors.New("replacement transaction underpriced"))`
$DIR/core/chains/evm/txmgr/broadcaster_test.go: `.New("replacement transaction underpriced")`
$DIR/core/chains/evm/txmgr/broadcaster_test.go: `.Once()`
$DIR/core/chains/evm/txmgr/broadcaster_test.go: `.ProcessUnstartedTxs(ctx, fromAddress)`
$DIR/core/chains/evm/txmgr/broadcaster_test.go: `.FindTxWithAttempts(ctx, latestID)`
$DIR/core/chains/evm/txmgr/broadcaster_test.go: `.Run("geth Client returns an error in the fatal errors category", func(t *testing.T) {
fatalErrorExample := "exceeds block gas limit"
localNextNonce := getLocalNextNonce(t, nonceTracker, fromAddress)
t.Run("without callback", func(t *testing.T) {
etx := mustCreateUnstartedTx(t, txStore, fromAddress, toAddress, encodedPayload, gasLimit, value, testutils.FixtureChainID)
ethClient.On("SendTransactionReturnCode", mock.Anything, mock.MatchedBy(func(tx *gethTypes.Transaction) bool {
return tx.Nonce() == localNextNonce
}), fromAddress).Return(commonclient.Fatal, errors.New(fatalErrorExample)).Once()
retryable, err := eb.ProcessUnstartedTxs(ctx, fromAddress)
assert.NoError(t, err)
assert.False(t, retryable)
// Check it was saved correctly with its attempt
etx, err = txStore.FindTxWithAttempts(ctx, etx.ID)
require.NoError(t, err)
assert.Nil(t, etx.BroadcastAt)
assert.Nil(t, etx.InitialBroadcastAt)
require.Nil(t, etx.Sequence)
assert.True(t, etx.Error.Valid)
assert.Contains(t, etx.Error.String, "exceeds block gas limit")
assert.Len(t, etx.TxAttempts, 0)
// Check that the key had its nonce reset
var nonce evmtypes.Nonce
nonce, err = nonceTracker.GetNextSequence(ctx, fromAddress)
require.NoError(t, err)
// Saved NextNonce must be the same as before because this transaction
// was not accepted by the eth node and never can be
require.Equal(t, int64(localNextNonce), int64(nonce))
})
t.Run("with callback", func(t *testing.T) {
run := cltest.MustInsertPipelineRun(t, db)
tr := cltest.MustInsertUnfinishedPipelineTaskRun(t, db, run.ID)
etx := txmgr.Tx{
FromAddress: fromAddress,
ToAddress: toAddress,
EncodedPayload: encodedPayload,
Value: value,
FeeLimit: gasLimit,
State: txmgrcommon.TxUnstarted,
PipelineTaskRunID: uuid.NullUUID{UUID: tr.ID, Valid: true},
SignalCallback: true,
}
t.Run("with erroring callback bails out", func(t *testing.T) {
require.NoError(t, txStore.InsertTx(tests.Context(t), &etx))
fn := func(ctx context.Context, id uuid.UUID, result interface{}, err error) error {
return errors.New("something exploded in the callback")
}
eb.SetResumeCallback(fn)
ethClient.On("SendTransactionReturnCode", mock.Anything, mock.MatchedBy(func(tx *gethTypes.Transaction) bool {
return tx.Nonce() == localNextNonce
}), fromAddress).Return(commonclient.Fatal, errors.New(fatalErrorExample)).Once()
retryable, err := eb.ProcessUnstartedTxs(ctx, fromAddress)
require.Error(t, err)
require.Contains(t, err.Error(), "something exploded in the callback")
assert.True(t, retryable)
})
t.Run("calls resume with error", func(t *testing.T) {
fn := func(ctx context.Context, id uuid.UUID, result interface{}, err error) error {
require.Equal(t, id, tr.ID)
require.Nil(t, result)
require.Error(t, err)
require.Contains(t, err.Error(), "fatal error while sending transaction: exceeds block gas limit")
return nil
}
eb.SetResumeCallback(fn)
ethClient.On("SendTransactionReturnCode", mock.Anything, mock.MatchedBy(func(tx *gethTypes.Transaction) bool {
return tx.Nonce() == localNextNonce
}), fromAddress).Return(commonclient.Fatal, errors.New(fatalErrorExample)).Once()
{
retryable, err := eb.ProcessUnstartedTxs(ctx, fromAddress)
assert.NoError(t, err)
assert.False(t, retryable)
}
// same as the parent test, but callback is set by ctor
t.Run("callback set by ctor", func(t *testing.T) {
estimator := gas.NewEvmFeeEstimator(lggr, func(lggr logger.Logger) gas.EvmEstimator {
return gas.NewFixedPriceEstimator(evmcfg.EVM().GasEstimator(), nil, evmcfg.EVM().GasEstimator().BlockHistory(), lggr, nil)
}, evmcfg.EVM().GasEstimator().EIP1559DynamicFees(), evmcfg.EVM().GasEstimator())
txBuilder := txmgr.NewEvmTxAttemptBuilder(*ethClient.ConfiguredChainID(), evmcfg.EVM().GasEstimator(), ethKeyStore, estimator)
localNextNonce = getLocalNextNonce(t, nonceTracker, fromAddress)
eb2 := txmgr.NewEvmBroadcaster(txStore, txmClient, txmgr.NewEvmTxmConfig(evmcfg.EVM()), txmgr.NewEvmTxmFeeConfig(evmcfg.EVM().GasEstimator()), evmcfg.EVM().Transactions(), cfg.Database().Listener(), ethKeyStore, txBuilder, lggr, &testCheckerFactory{}, false)
retryable, err := eb2.ProcessUnstartedTxs(ctx, fromAddress)
assert.NoError(t, err)
assert.False(t, retryable)
})
})
})
})`
$DIR/core/chains/evm/txmgr/broadcaster_test.go: `.Run("without callback", func(t *testing.T) {
etx := mustCreateUnstartedTx(t, txStore, fromAddress, toAddress, encodedPayload, gasLimit, value, testutils.FixtureChainID)
ethClient.On("SendTransactionReturnCode", mock.Anything, mock.MatchedBy(func(tx *gethTypes.Transaction) bool {
return tx.Nonce() == localNextNonce
}), fromAddress).Return(commonclient.Fatal, errors.New(fatalErrorExample)).Once()
retryable, err := eb.ProcessUnstartedTxs(ctx, fromAddress)
assert.NoError(t, err)
assert.False(t, retryable)
// Check it was saved correctly with its attempt
etx, err = txStore.FindTxWithAttempts(ctx, etx.ID)
require.NoError(t, err)
assert.Nil(t, etx.BroadcastAt)
assert.Nil(t, etx.InitialBroadcastAt)
require.Nil(t, etx.Sequence)
assert.True(t, etx.Error.Valid)
assert.Contains(t, etx.Error.String, "exceeds block gas limit")
assert.Len(t, etx.TxAttempts, 0)
// Check that the key had its nonce reset
var nonce evmtypes.Nonce
nonce, err = nonceTracker.GetNextSequence(ctx, fromAddress)
require.NoError(t, err)
// Saved NextNonce must be the same as before because this transaction
// was not accepted by the eth node and never can be
require.Equal(t, int64(localNextNonce), int64(nonce))
})`
$DIR/core/chains/evm/txmgr/broadcaster_test.go: `.On("SendTransactionReturnCode", mock.Anything, mock.MatchedBy(func(tx *gethTypes.Transaction) bool {
return tx.Nonce() == localNextNonce
}), fromAddress)`
$DIR/core/chains/evm/txmgr/broadcaster_test.go: `.MatchedBy(func(tx *gethTypes.Transaction) bool {
return tx.Nonce() == localNextNonce
})`
$DIR/core/chains/evm/txmgr/broadcaster_test.go: `.Nonce()`
$DIR/core/chains/evm/txmgr/broadcaster_test.go: `.Return(commonclient.Fatal, errors.New(fatalErrorExample))`
$DIR/core/chains/evm/txmgr/broadcaster_test.go: `.New(fatalErrorExample)`
$DIR/core/chains/evm/txmgr/broadcaster_test.go: `.Once()`
$DIR/core/chains/evm/txmgr/broadcaster_test.go: `.ProcessUnstartedTxs(ctx, fromAddress)`
$DIR/core/chains/evm/txmgr/broadcaster_test.go: `.FindTxWithAttempts(ctx, etx.ID)`
$DIR/core/chains/evm/txmgr/broadcaster_test.go: `.GetNextSequence(ctx, fromAddress)`
$DIR/core/chains/evm/txmgr/broadcaster_test.go: `.Run("with callback", func(t *testing.T) {
run := cltest.MustInsertPipelineRun(t, db)
tr := cltest.MustInsertUnfinishedPipelineTaskRun(t, db, run.ID)
etx := txmgr.Tx{
FromAddress: fromAddress,
ToAddress: toAddress,
EncodedPayload: encodedPayload,
Value: value,
FeeLimit: gasLimit,
State: txmgrcommon.TxUnstarted,
PipelineTaskRunID: uuid.NullUUID{UUID: tr.ID, Valid: true},
SignalCallback: true,
}
t.Run("with erroring callback bails out", func(t *testing.T) {
require.NoError(t, txStore.InsertTx(tests.Context(t), &etx))
fn := func(ctx context.Context, id uuid.UUID, result interface{}, err error) error {
return errors.New("something exploded in the callback")
}
eb.SetResumeCallback(fn)
ethClient.On("SendTransactionReturnCode", mock.Anything, mock.MatchedBy(func(tx *gethTypes.Transaction) bool {
return tx.Nonce() == localNextNonce
}), fromAddress).Return(commonclient.Fatal, errors.New(fatalErrorExample)).Once()
retryable, err := eb.ProcessUnstartedTxs(ctx, fromAddress)
require.Error(t, err)
require.Contains(t, err.Error(), "something exploded in the callback")
assert.True(t, retryable)
})
t.Run("calls resume with error", func(t *testing.T) {
fn := func(ctx context.Context, id uuid.UUID, result interface{}, err error) error {
require.Equal(t, id, tr.ID)
require.Nil(t, result)
require.Error(t, err)
require.Contains(t, err.Error(), "fatal error while sending transaction: exceeds block gas limit")
return nil
}
eb.SetResumeCallback(fn)
ethClient.On("SendTransactionReturnCode", mock.Anything, mock.MatchedBy(func(tx *gethTypes.Transaction) bool {
return tx.Nonce() == localNextNonce
}), fromAddress).Return(commonclient.Fatal, errors.New(fatalErrorExample)).Once()
{
retryable, err := eb.ProcessUnstartedTxs(ctx, fromAddress)
assert.NoError(t, err)
assert.False(t, retryable)
}
// same as the parent test, but callback is set by ctor
t.Run("callback set by ctor", func(t *testing.T) {
estimator := gas.NewEvmFeeEstimator(lggr, func(lggr logger.Logger) gas.EvmEstimator {
return gas.NewFixedPriceEstimator(evmcfg.EVM().GasEstimator(), nil, evmcfg.EVM().GasEstimator().BlockHistory(), lggr, nil)
}, evmcfg.EVM().GasEstimator().EIP1559DynamicFees(), evmcfg.EVM().GasEstimator())
txBuilder := txmgr.NewEvmTxAttemptBuilder(*ethClient.ConfiguredChainID(), evmcfg.EVM().GasEstimator(), ethKeyStore, estimator)
localNextNonce = getLocalNextNonce(t, nonceTracker, fromAddress)
eb2 := txmgr.NewEvmBroadcaster(txStore, txmClient, txmgr.NewEvmTxmConfig(evmcfg.EVM()), txmgr.NewEvmTxmFeeConfig(evmcfg.EVM().GasEstimator()), evmcfg.EVM().Transactions(), cfg.Database().Listener(), ethKeyStore, txBuilder, lggr, &testCheckerFactory{}, false)
retryable, err := eb2.ProcessUnstartedTxs(ctx, fromAddress)
assert.NoError(t, err)
assert.False(t, retryable)
})
})
})`
$DIR/core/chains/evm/txmgr/broadcaster_test.go: `.MustInsertPipelineRun(t, db)`
$DIR/core/chains/evm/txmgr/broadcaster_test.go: `.MustInsertUnfinishedPipelineTaskRun(t, db, run.ID)`
$DIR/core/chains/evm/txmgr/broadcaster_test.go: `.Run("with erroring callback bails out", func(t *testing.T) {
require.NoError(t, txStore.InsertTx(tests.Context(t), &etx))
fn := func(ctx context.Context, id uuid.UUID, result interface{}, err error) error {
return errors.New("something exploded in the callback")
}
eb.SetResumeCallback(fn)
ethClient.On("SendTransactionReturnCode", mock.Anything, mock.MatchedBy(func(tx *gethTypes.Transaction) bool {
return tx.Nonce() == localNextNonce
}), fromAddress).Return(commonclient.Fatal, errors.New(fatalErrorExample)).Once()
retryable, err := eb.ProcessUnstartedTxs(ctx, fromAddress)
require.Error(t, err)
require.Contains(t, err.Error(), "something exploded in the callback")
assert.True(t, retryable)
})`
$DIR/core/chains/evm/txmgr/broadcaster_test.go: `.New("something exploded in the callback")`
$DIR/core/chains/evm/txmgr/broadcaster_test.go: `.SetResumeCallback(fn)`
$DIR/core/chains/evm/txmgr/broadcaster_test.go: `.On("SendTransactionReturnCode", mock.Anything, mock.MatchedBy(func(tx *gethTypes.Transaction) bool {
return tx.Nonce() == localNextNonce
}), fromAddress)`
$DIR/core/chains/evm/txmgr/broadcaster_test.go: `.MatchedBy(func(tx *gethTypes.Transaction) bool {
return tx.Nonce() == localNextNonce
})`
$DIR/core/chains/evm/txmgr/broadcaster_test.go: `.Nonce()`
$DIR/core/chains/evm/txmgr/broadcaster_test.go: `.Return(commonclient.Fatal, errors.New(fatalErrorExample))`
$DIR/core/chains/evm/txmgr/broadcaster_test.go: `.New(fatalErrorExample)`
$DIR/core/chains/evm/txmgr/broadcaster_test.go: `.Once()`
$DIR/core/chains/evm/txmgr/broadcaster_test.go: `.ProcessUnstartedTxs(ctx, fromAddress)`
$DIR/core/chains/evm/txmgr/broadcaster_test.go: `.Run("calls resume with error", func(t *testing.T) {
fn := func(ctx context.Context, id uuid.UUID, result interface{}, err error) error {
require.Equal(t, id, tr.ID)
require.Nil(t, result)
require.Error(t, err)
require.Contains(t, err.Error(), "fatal error while sending transaction: exceeds block gas limit")
return nil
}
eb.SetResumeCallback(fn)
ethClient.On("SendTransactionReturnCode", mock.Anything, mock.MatchedBy(func(tx *gethTypes.Transaction) bool {
return tx.Nonce() == localNextNonce
}), fromAddress).Return(commonclient.Fatal, errors.New(fatalErrorExample)).Once()
{
retryable, err := eb.ProcessUnstartedTxs(ctx, fromAddress)
assert.NoError(t, err)
assert.False(t, retryable)
}
// same as the parent test, but callback is set by ctor
t.Run("callback set by ctor", func(t *testing.T) {
estimator := gas.NewEvmFeeEstimator(lggr, func(lggr logger.Logger) gas.EvmEstimator {
return gas.NewFixedPriceEstimator(evmcfg.EVM().GasEstimator(), nil, evmcfg.EVM().GasEstimator().BlockHistory(), lggr, nil)
}, evmcfg.EVM().GasEstimator().EIP1559DynamicFees(), evmcfg.EVM().GasEstimator())
txBuilder := txmgr.NewEvmTxAttemptBuilder(*ethClient.ConfiguredChainID(), evmcfg.EVM().GasEstimator(), ethKeyStore, estimator)
localNextNonce = getLocalNextNonce(t, nonceTracker, fromAddress)
eb2 := txmgr.NewEvmBroadcaster(txStore, txmClient, txmgr.NewEvmTxmConfig(evmcfg.EVM()), txmgr.NewEvmTxmFeeConfig(evmcfg.EVM().GasEstimator()), evmcfg.EVM().Transactions(), cfg.Database().Listener(), ethKeyStore, txBuilder, lggr, &testCheckerFactory{}, false)
retryable, err := eb2.ProcessUnstartedTxs(ctx, fromAddress)
assert.NoError(t, err)
assert.False(t, retryable)
})
})`
$DIR/core/chains/evm/txmgr/broadcaster_test.go: `.SetResumeCallback(fn)`
$DIR/core/chains/evm/txmgr/broadcaster_test.go: `.On("SendTransactionReturnCode", mock.Anything, mock.MatchedBy(func(tx *gethTypes.Transaction) bool {
return tx.Nonce() == localNextNonce
}), fromAddress)`
$DIR/core/chains/evm/txmgr/broadcaster_test.go: `.MatchedBy(func(tx *gethTypes.Transaction) bool {
return tx.Nonce() == localNextNonce
})`
$DIR/core/chains/evm/txmgr/broadcaster_test.go: `.Nonce()`
$DIR/core/chains/evm/txmgr/broadcaster_test.go: `.Return(commonclient.Fatal, errors.New(fatalErrorExample))`
$DIR/core/chains/evm/txmgr/broadcaster_test.go: `.New(fatalErrorExample)`
$DIR/core/chains/evm/txmgr/broadcaster_test.go: `.Once()`
$DIR/core/chains/evm/txmgr/broadcaster_test.go: `.ProcessUnstartedTxs(ctx, fromAddress)`
$DIR/core/chains/evm/txmgr/broadcaster_test.go: `.Run("callback set by ctor", func(t *testing.T) {
estimator := gas.NewEvmFeeEstimator(lggr, func(lggr logger.Logger) gas.EvmEstimator {
return gas.NewFixedPriceEstimator(evmcfg.EVM().GasEstimator(), nil, evmcfg.EVM().GasEstimator().BlockHistory(), lggr, nil)
}, evmcfg.EVM().GasEstimator().EIP1559DynamicFees(), evmcfg.EVM().GasEstimator())
txBuilder := txmgr.NewEvmTxAttemptBuilder(*ethClient.ConfiguredChainID(), evmcfg.EVM().GasEstimator(), ethKeyStore, estimator)
localNextNonce = getLocalNextNonce(t, nonceTracker, fromAddress)
eb2 := txmgr.NewEvmBroadcaster(txStore, txmClient, txmgr.NewEvmTxmConfig(evmcfg.EVM()), txmgr.NewEvmTxmFeeConfig(evmcfg.EVM().GasEstimator()), evmcfg.EVM().Transactions(), cfg.Database().Listener(), ethKeyStore, txBuilder, lggr, &testCheckerFactory{}, false)
retryable, err := eb2.ProcessUnstartedTxs(ctx, fromAddress)
assert.NoError(t, err)
assert.False(t, retryable)
})`
$DIR/core/chains/evm/txmgr/broadcaster_test.go: `.NewEvmFeeEstimator(lggr, func(lggr logger.Logger) gas.EvmEstimator {
return gas.NewFixedPriceEstimator(evmcfg.EVM().GasEstimator(), nil, evmcfg.EVM().GasEstimator().BlockHistory(), lggr, nil)
}, evmcfg.EVM().GasEstimator().EIP1559DynamicFees(), evmcfg.EVM().GasEstimator())`
$DIR/core/chains/evm/txmgr/broadcaster_test.go: `.NewFixedPriceEstimator(evmcfg.EVM().GasEstimator(), nil, evmcfg.EVM().GasEstimator().BlockHistory(), lggr, nil)`
$DIR/core/chains/evm/txmgr/broadcaster_test.go: `.EVM()`
$DIR/core/chains/evm/txmgr/broadcaster_test.go: `.GasEstimator()`
$DIR/core/chains/evm/txmgr/broadcaster_test.go: `.EVM()`
$DIR/core/chains/evm/txmgr/broadcaster_test.go: `.GasEstimator()`
$DIR/core/chains/evm/txmgr/broadcaster_test.go: `.BlockHistory()`
$DIR/core/chains/evm/txmgr/broadcaster_test.go: `.EVM()`
$DIR/core/chains/evm/txmgr/broadcaster_test.go: `.GasEstimator()`
$DIR/core/chains/evm/txmgr/broadcaster_test.go: `.EIP1559DynamicFees()`
$DIR/core/chains/evm/txmgr/broadcaster_test.go: `.EVM()`
$DIR/core/chains/evm/txmgr/broadcaster_test.go: `.GasEstimator()`
$DIR/core/chains/evm/txmgr/broadcaster_test.go: `.NewEvmTxAttemptBuilder(*ethClient.ConfiguredChainID(), evmcfg.EVM().GasEstimator(), ethKeyStore, estimator)`
$DIR/core/chains/evm/txmgr/broadcaster_test.go: `.ConfiguredChainID()`
$DIR/core/chains/evm/txmgr/broadcaster_test.go: `.EVM()`
$DIR/core/chains/evm/txmgr/broadcaster_test.go: `.GasEstimator()`
$DIR/core/chains/evm/txmgr/broadcaster_test.go: `.NewEvmBroadcaster(txStore, txmClient, txmgr.NewEvmTxmConfig(evmcfg.EVM()), txmgr.NewEvmTxmFeeConfig(evmcfg.EVM().GasEstimator()), evmcfg.EVM().Transactions(), cfg.Database().Listener(), ethKeyStore, txBuilder, lggr, &testCheckerFactory{}, false)`
$DIR/core/chains/evm/txmgr/broadcaster_test.go: `.NewEvmTxmConfig(evmcfg.EVM())`
$DIR/core/chains/evm/txmgr/broadcaster_test.go: `.EVM()`
$DIR/core/chains/evm/txmgr/broadcaster_test.go: `.NewEvmTxmFeeConfig(evmcfg.EVM().GasEstimator())`
$DIR/core/chains/evm/txmgr/broadcaster_test.go: `.EVM()`
$DIR/core/chains/evm/txmgr/broadcaster_test.go: `.GasEstimator()`
$DIR/core/chains/evm/txmgr/broadcaster_test.go: `.EVM()`
$DIR/core/chains/evm/txmgr/broadcaster_test.go: `.Transactions()`
$DIR/core/chains/evm/txmgr/broadcaster_test.go: `.Database()`
$DIR/core/chains/evm/txmgr/broadcaster_test.go: `.Listener()`
$DIR/core/chains/evm/txmgr/broadcaster_test.go: `.ProcessUnstartedTxs(ctx, fromAddress)`
$DIR/core/chains/evm/txmgr/broadcaster_test.go: `.SetResumeCallback(nil)`
$DIR/core/chains/evm/txmgr/broadcaster_test.go: `.Run("geth Client fails with error indicating that the transaction was too expensive", func(t *testing.T) {
TxFeeExceedsCapError := "tx fee (1.10 ether) exceeds the configured cap (1.00 ether)"
localNextNonce := getLocalNextNonce(t, nonceTracker, fromAddress)
ethClient.On("PendingNonceAt", mock.Anything, fromAddress).Return(localNextNonce, nil).Once()
etx := mustCreateUnstartedTx(t, txStore, fromAddress, toAddress, encodedPayload, gasLimit, value, testutils.FixtureChainID)
ethClient.On("SendTransactionReturnCode", mock.Anything, mock.MatchedBy(func(tx *gethTypes.Transaction) bool {
return tx.Nonce() == localNextNonce
}), fromAddress).Return(commonclient.ExceedsMaxFee, errors.New(TxFeeExceedsCapError)).Twice()
// In the first case, the tx was NOT accepted into the mempool. In the case
// of multiple RPC nodes, it is possible that it can be accepted by
// another node even if the primary one returns "exceeds the configured
// cap"
retryable, err := eb.ProcessUnstartedTxs(ctx, fromAddress)
require.Error(t, err)
assert.Contains(t, err.Error(), "tx fee (1.10 ether) exceeds the configured cap (1.00 ether)")
assert.Contains(t, err.Error(), "error while sending transaction")
assert.True(t, retryable)
// Check it was saved with its attempt
etx, err = txStore.FindTxWithAttempts(ctx, etx.ID)
require.NoError(t, err)
assert.Nil(t, etx.BroadcastAt)
assert.Nil(t, etx.InitialBroadcastAt) // Note that InitialBroadcastAt really means "InitialDefinitelySuccessfulBroadcastAt"
assert.Equal(t, evmtypes.Nonce(localNextNonce), *etx.Sequence)
assert.False(t, etx.Error.Valid)
assert.Len(t, etx.TxAttempts, 1)
attempt := etx.TxAttempts[0]
assert.Equal(t, txmgrtypes.TxAttemptInProgress, attempt.State)
// Check that the key had its nonce reset
var nonce evmtypes.Nonce
nonce, err = nonceTracker.GetNextSequence(ctx, fromAddress)
require.NoError(t, err)
// Saved NextNonce must be the same as before because this transaction
// was not accepted by the eth node and never can be
require.Equal(t, int64(localNextNonce), int64(nonce))
// On the second try, the tx has been accepted into the mempool
ethClient.On("PendingNonceAt", mock.Anything, fromAddress).Return(localNextNonce+1, nil).Once()
retryable, err = eb.ProcessUnstartedTxs(ctx, fromAddress)
assert.NoError(t, err)
assert.False(t, retryable)
// Check it was saved with its attempt
etx, err = txStore.FindTxWithAttempts(ctx, etx.ID)
require.NoError(t, err)
assert.NotNil(t, etx.BroadcastAt)
assert.NotNil(t, etx.InitialBroadcastAt) // Note that InitialBroadcastAt really means "InitialDefinitelySuccessfulBroadcastAt"
assert.Equal(t, evmtypes.Nonce(localNextNonce), *etx.Sequence)
assert.False(t, etx.Error.Valid)
assert.Len(t, etx.TxAttempts, 1)
attempt = etx.TxAttempts[0]
assert.Equal(t, txmgrtypes.TxAttemptBroadcast, attempt.State)
})`
$DIR/core/chains/evm/txmgr/broadcaster_test.go: `.On("PendingNonceAt", mock.Anything, fromAddress)`
$DIR/core/chains/evm/txmgr/broadcaster_test.go: `.Return(localNextNonce, nil)`
$DIR/core/chains/evm/txmgr/broadcaster_test.go: `.Once()`
$DIR/core/chains/evm/txmgr/broadcaster_test.go: `.On("SendTransactionReturnCode", mock.Anything, mock.MatchedBy(func(tx *gethTypes.Transaction) bool {
return tx.Nonce() == localNextNonce
}), fromAddress)`
$DIR/core/chains/evm/txmgr/broadcaster_test.go: `.MatchedBy(func(tx *gethTypes.Transaction) bool {
return tx.Nonce() == localNextNonce
})`
$DIR/core/chains/evm/txmgr/broadcaster_test.go: `.Nonce()`
$DIR/core/chains/evm/txmgr/broadcaster_test.go: `.Return(commonclient.ExceedsMaxFee, errors.New(TxFeeExceedsCapError))`
$DIR/core/chains/evm/txmgr/broadcaster_test.go: `.New(TxFeeExceedsCapError)`
$DIR/core/chains/evm/txmgr/broadcaster_test.go: `.Twice()`
$DIR/core/chains/evm/txmgr/broadcaster_test.go: `.ProcessUnstartedTxs(ctx, fromAddress)`
$DIR/core/chains/evm/txmgr/broadcaster_test.go: `.FindTxWithAttempts(ctx, etx.ID)`
$DIR/core/chains/evm/txmgr/broadcaster_test.go: `.GetNextSequence(ctx, fromAddress)`
$DIR/core/chains/evm/txmgr/broadcaster_test.go: `.On("PendingNonceAt", mock.Anything, fromAddress)`
$DIR/core/chains/evm/txmgr/broadcaster_test.go: `.Return(localNextNonce+1, nil)`
$DIR/core/chains/evm/txmgr/broadcaster_test.go: `.Once()`
$DIR/core/chains/evm/txmgr/broadcaster_test.go: `.ProcessUnstartedTxs(ctx, fromAddress)`
$DIR/core/chains/evm/txmgr/broadcaster_test.go: `.FindTxWithAttempts(ctx, etx.ID)`
$DIR/core/chains/evm/txmgr/broadcaster_test.go: `.Run("eth Client call fails with an unexpected random error, and transaction was not accepted into mempool", func(t *testing.T) {
retryableErrorExample := "some unknown error"
localNextNonce := getLocalNextNonce(t, nonceTracker, fromAddress)
etx := mustCreateUnstartedTx(t, txStore, fromAddress, toAddress, encodedPayload, gasLimit, value, testutils.FixtureChainID)
ethClient.On("SendTransactionReturnCode", mock.Anything, mock.MatchedBy(func(tx *gethTypes.Transaction) bool {
return tx.Nonce() == localNextNonce
}), fromAddress).Return(commonclient.Unknown, errors.New(retryableErrorExample)).Once()
// Nonce is the same as localNextNonce, implying that this sent transaction has not been accepted
ethClient.On("PendingNonceAt", mock.Anything, fromAddress).Return(localNextNonce, nil).Once()
// Do the thing
retryable, err := eb.ProcessUnstartedTxs(ctx, fromAddress)
require.Error(t, err)
require.Contains(t, err.Error(), retryableErrorExample)
assert.True(t, retryable)
// Check it was saved correctly with its attempt
etx, err = txStore.FindTxWithAttempts(ctx, etx.ID)
require.NoError(t, err)
assert.Nil(t, etx.BroadcastAt)
assert.Nil(t, etx.InitialBroadcastAt)
require.NotNil(t, etx.Sequence)
assert.False(t, etx.Error.Valid)
assert.Equal(t, txmgrcommon.TxInProgress, etx.State)
assert.Len(t, etx.TxAttempts, 1)
attempt := etx.TxAttempts[0]
assert.Equal(t, txmgrtypes.TxAttemptInProgress, attempt.State)
// Now on the second run, it is successful
ethClient.On("SendTransactionReturnCode", mock.Anything, mock.MatchedBy(func(tx *gethTypes.Transaction) bool {
return tx.Nonce() == localNextNonce
}), fromAddress).Return(commonclient.Successful, nil).Once()
retryable, err = eb.ProcessUnstartedTxs(ctx, fromAddress)
assert.NoError(t, err)
assert.False(t, retryable)
// Check it was saved correctly with its attempt
etx, err = txStore.FindTxWithAttempts(ctx, etx.ID)
require.NoError(t, err)
assert.NotNil(t, etx.BroadcastAt)
assert.NotNil(t, etx.InitialBroadcastAt)
require.NotNil(t, etx.Sequence)
assert.False(t, etx.Error.Valid)
assert.Equal(t, txmgrcommon.TxUnconfirmed, etx.State)
assert.Len(t, etx.TxAttempts, 1)
attempt = etx.TxAttempts[0]
assert.Equal(t, txmgrtypes.TxAttemptBroadcast, attempt.State)
})`
$DIR/core/chains/evm/txmgr/broadcaster_test.go: `.On("SendTransactionReturnCode", mock.Anything, mock.MatchedBy(func(tx *gethTypes.Transaction) bool {
return tx.Nonce() == localNextNonce
}), fromAddress)`
$DIR/core/chains/evm/txmgr/broadcaster_test.go: `.MatchedBy(func(tx *gethTypes.Transaction) bool {
return tx.Nonce() == localNextNonce
})`
$DIR/core/chains/evm/txmgr/broadcaster_test.go: `.Nonce()`
$DIR/core/chains/evm/txmgr/broadcaster_test.go: `.Return(commonclient.Unknown, errors.New(retryableErrorExample))`
$DIR/core/chains/evm/txmgr/broadcaster_test.go: `.New(retryableErrorExample)`
$DIR/core/chains/evm/txmgr/broadcaster_test.go: `.Once()`
$DIR/core/chains/evm/txmgr/broadcaster_test.go: `.On("PendingNonceAt", mock.Anything, fromAddress)`
$DIR/core/chains/evm/txmgr/broadcaster_test.go: `.Return(localNextNonce, nil)`
$DIR/core/chains/evm/txmgr/broadcaster_test.go: `.Once()`
$DIR/core/chains/evm/txmgr/broadcaster_test.go: `.ProcessUnstartedTxs(ctx, fromAddress)`
$DIR/core/chains/evm/txmgr/broadcaster_test.go: `.FindTxWithAttempts(ctx, etx.ID)`
$DIR/core/chains/evm/txmgr/broadcaster_test.go: `.On("SendTransactionReturnCode", mock.Anything, mock.MatchedBy(func(tx *gethTypes.Transaction) bool {
return tx.Nonce() == localNextNonce
}), fromAddress)`
$DIR/core/chains/evm/txmgr/broadcaster_test.go: `.MatchedBy(func(tx *gethTypes.Transaction) bool {
return tx.Nonce() == localNextNonce
})`
$DIR/core/chains/evm/txmgr/broadcaster_test.go: `.Nonce()`
$DIR/core/chains/evm/txmgr/broadcaster_test.go: `.Return(commonclient.Successful, nil)`
$DIR/core/chains/evm/txmgr/broadcaster_test.go: `.Once()`
$DIR/core/chains/evm/txmgr/broadcaster_test.go: `.ProcessUnstartedTxs(ctx, fromAddress)`
$DIR/core/chains/evm/txmgr/broadcaster_test.go: `.FindTxWithAttempts(ctx, etx.ID)`
$DIR/core/chains/evm/txmgr/broadcaster_test.go: `.Run("eth client call fails with an unexpected random error, and the nonce check also subsequently fails", func(t *testing.T) {
retryableErrorExample := "some unknown error"
localNextNonce := getLocalNextNonce(t, nonceTracker, fromAddress)
etx := mustCreateUnstartedTx(t, txStore, fromAddress, toAddress, encodedPayload, gasLimit, value, testutils.FixtureChainID)
ethClient.On("SendTransactionReturnCode", mock.Anything, mock.MatchedBy(func(tx *gethTypes.Transaction) bool {
return tx.Nonce() == localNextNonce
}), fromAddress).Return(commonclient.Unknown, errors.New(retryableErrorExample)).Once()
ethClient.On("PendingNonceAt", mock.Anything, fromAddress).Return(uint64(0), errors.New("pending nonce fetch failed")).Once()
// Do the thing
retryable, err := eb.ProcessUnstartedTxs(ctx, fromAddress)
require.Error(t, err)
require.Contains(t, err.Error(), retryableErrorExample)
require.Contains(t, err.Error(), "pending nonce fetch failed")
assert.True(t, retryable)
// Check it was saved correctly with its attempt
etx, err = txStore.FindTxWithAttempts(ctx, etx.ID)
require.NoError(t, err)
assert.Nil(t, etx.BroadcastAt)
assert.Nil(t, etx.InitialBroadcastAt)
require.NotNil(t, etx.Sequence)
assert.False(t, etx.Error.Valid)
assert.Equal(t, txmgrcommon.TxInProgress, etx.State)
assert.Len(t, etx.TxAttempts, 1)
attempt := etx.TxAttempts[0]
assert.Equal(t, txmgrtypes.TxAttemptInProgress, attempt.State)
// Now on the second run, it is successful
ethClient.On("SendTransactionReturnCode", mock.Anything, mock.MatchedBy(func(tx *gethTypes.Transaction) bool {
return tx.Nonce() == localNextNonce
}), fromAddress).Return(commonclient.Successful, nil).Once()
retryable, err = eb.ProcessUnstartedTxs(ctx, fromAddress)
assert.NoError(t, err)
assert.False(t, retryable)
// Check it was saved correctly with its attempt
etx, err = txStore.FindTxWithAttempts(ctx, etx.ID)
require.NoError(t, err)
assert.NotNil(t, etx.BroadcastAt)
assert.NotNil(t, etx.InitialBroadcastAt)
require.NotNil(t, etx.Sequence)
assert.False(t, etx.Error.Valid)
assert.Equal(t, txmgrcommon.TxUnconfirmed, etx.State)
assert.Len(t, etx.TxAttempts, 1)
attempt = etx.TxAttempts[0]
assert.Equal(t, txmgrtypes.TxAttemptBroadcast, attempt.State)
})`
$DIR/core/chains/evm/txmgr/broadcaster_test.go: `.On("SendTransactionReturnCode", mock.Anything, mock.MatchedBy(func(tx *gethTypes.Transaction) bool {
return tx.Nonce() == localNextNonce
}), fromAddress)`
$DIR/core/chains/evm/txmgr/broadcaster_test.go: `.MatchedBy(func(tx *gethTypes.Transaction) bool {
return tx.Nonce() == localNextNonce
})`
$DIR/core/chains/evm/txmgr/broadcaster_test.go: `.Nonce()`
$DIR/core/chains/evm/txmgr/broadcaster_test.go: `.Return(commonclient.Unknown, errors.New(retryableErrorExample))`
$DIR/core/chains/evm/txmgr/broadcaster_test.go: `.New(retryableErrorExample)`
$DIR/core/chains/evm/txmgr/broadcaster_test.go: `.Once()`
$DIR/core/chains/evm/txmgr/broadcaster_test.go: `.On("PendingNonceAt", mock.Anything, fromAddress)`
$DIR/core/chains/evm/txmgr/broadcaster_test.go: `.Return(uint64(0), errors.New("pending nonce fetch failed"))`
$DIR/core/chains/evm/txmgr/broadcaster_test.go: `.New("pending nonce fetch failed")`
$DIR/core/chains/evm/txmgr/broadcaster_test.go: `.Once()`
$DIR/core/chains/evm/txmgr/broadcaster_test.go: `.ProcessUnstartedTxs(ctx, fromAddress)`
$DIR/core/chains/evm/txmgr/broadcaster_test.go: `.FindTxWithAttempts(ctx, etx.ID)`
$DIR/core/chains/evm/txmgr/broadcaster_test.go: `.On("SendTransactionReturnCode", mock.Anything, mock.MatchedBy(func(tx *gethTypes.Transaction) bool {
return tx.Nonce() == localNextNonce
}), fromAddress)`
$DIR/core/chains/evm/txmgr/broadcaster_test.go: `.MatchedBy(func(tx *gethTypes.Transaction) bool {
return tx.Nonce() == localNextNonce
})`
$DIR/core/chains/evm/txmgr/broadcaster_test.go: `.Nonce()`
$DIR/core/chains/evm/txmgr/broadcaster_test.go: `.Return(commonclient.Successful, nil)`
$DIR/core/chains/evm/txmgr/broadcaster_test.go: `.Once()`
$DIR/core/chains/evm/txmgr/broadcaster_test.go: `.ProcessUnstartedTxs(ctx, fromAddress)`
$DIR/core/chains/evm/txmgr/broadcaster_test.go: `.FindTxWithAttempts(ctx, etx.ID)`
$DIR/core/chains/evm/txmgr/broadcaster_test.go: `.Run("eth Client call fails with an unexpected random error, and transaction was accepted into mempool", func(t *testing.T) {
retryableErrorExample := "some strange RPC returns an unexpected thing"
localNextNonce := getLocalNextNonce(t, nonceTracker, fromAddress)
etx := mustCreateUnstartedTx(t, txStore, fromAddress, toAddress, encodedPayload, gasLimit, value, testutils.FixtureChainID)
ethClient.On("SendTransactionReturnCode", mock.Anything, mock.MatchedBy(func(tx *gethTypes.Transaction) bool {
return tx.Nonce() == localNextNonce
}), fromAddress).Return(commonclient.Unknown, errors.New(retryableErrorExample)).Once()
// Nonce is one higher than localNextNonce, implying that despite the error, this sent transaction has been accepted into the mempool
ethClient.On("PendingNonceAt", mock.Anything, fromAddress).Return(localNextNonce+1, nil).Once()
// Do the thing
retryable, err := eb.ProcessUnstartedTxs(ctx, fromAddress)
require.NoError(t, err)
assert.False(t, retryable)
// Check it was saved correctly with its attempt, in a broadcast state
etx, err = txStore.FindTxWithAttempts(ctx, etx.ID)
require.NoError(t, err)
assert.NotNil(t, etx.BroadcastAt)
assert.NotNil(t, etx.InitialBroadcastAt)
require.NotNil(t, etx.Sequence)
assert.False(t, etx.Error.Valid)
assert.Equal(t, txmgrcommon.TxUnconfirmed, etx.State)
assert.Len(t, etx.TxAttempts, 1)
attempt := etx.TxAttempts[0]
assert.Equal(t, txmgrtypes.TxAttemptBroadcast, attempt.State)
})`
$DIR/core/chains/evm/txmgr/broadcaster_test.go: `.On("SendTransactionReturnCode", mock.Anything, mock.MatchedBy(func(tx *gethTypes.Transaction) bool {
return tx.Nonce() == localNextNonce
}), fromAddress)`
$DIR/core/chains/evm/txmgr/broadcaster_test.go: `.MatchedBy(func(tx *gethTypes.Transaction) bool {
return tx.Nonce() == localNextNonce
})`
$DIR/core/chains/evm/txmgr/broadcaster_test.go: `.Nonce()`
$DIR/core/chains/evm/txmgr/broadcaster_test.go: `.Return(commonclient.Unknown, errors.New(retryableErrorExample))`
$DIR/core/chains/evm/txmgr/broadcaster_test.go: `.New(retryableErrorExample)`
$DIR/core/chains/evm/txmgr/broadcaster_test.go: `.Once()`
$DIR/core/chains/evm/txmgr/broadcaster_test.go: `.On("PendingNonceAt", mock.Anything, fromAddress)`
$DIR/core/chains/evm/txmgr/broadcaster_test.go: `.Return(localNextNonce+1, nil)`
$DIR/core/chains/evm/txmgr/broadcaster_test.go: `.Once()`
$DIR/core/chains/evm/txmgr/broadcaster_test.go: `.ProcessUnstartedTxs(ctx, fromAddress)`
$DIR/core/chains/evm/txmgr/broadcaster_test.go: `.FindTxWithAttempts(ctx, etx.ID)`
$DIR/core/chains/evm/txmgr/broadcaster_test.go: `.Run("eth node returns underpriced transaction", func(t *testing.T) {
// This happens if a transaction's gas price is below the minimum
// configured for the transaction pool.
// This is a configuration error by the node operator, since it means they set the base gas level too low.
underpricedError := "transaction underpriced"
localNextNonce := getLocalNextNonce(t, nonceTracker, fromAddress)
etx := mustCreateUnstartedTx(t, txStore, fromAddress, toAddress, encodedPayload, gasLimit, value, testutils.FixtureChainID)
// First was underpriced
ethClient.On("SendTransactionReturnCode", mock.Anything, mock.MatchedBy(func(tx *gethTypes.Transaction) bool {
return tx.Nonce() == localNextNonce && tx.GasPrice().Cmp(evmcfg.EVM().GasEstimator().PriceDefault().ToInt()) == 0
}), fromAddress).Return(commonclient.Underpriced, errors.New(underpricedError)).Once()
// Second with gas bump was still underpriced
ethClient.On("SendTransactionReturnCode", mock.Anything, mock.MatchedBy(func(tx *gethTypes.Transaction) bool {
return tx.Nonce() == localNextNonce && tx.GasPrice().Cmp(big.NewInt(25000000000)) == 0
}), fromAddress).Return(commonclient.Underpriced, errors.New(underpricedError)).Once()
// Third succeeded
ethClient.On("SendTransactionReturnCode", mock.Anything, mock.MatchedBy(func(tx *gethTypes.Transaction) bool {
return tx.Nonce() == localNextNonce && tx.GasPrice().Cmp(big.NewInt(30000000000)) == 0
}), fromAddress).Return(commonclient.Successful, nil).Once()
// Do the thing
retryable, err := eb.ProcessUnstartedTxs(ctx, fromAddress)
require.NoError(t, err)
assert.False(t, retryable)
// Check it was saved correctly with its attempt
etx, err = txStore.FindTxWithAttempts(ctx, etx.ID)
require.NoError(t, err)
assert.NotNil(t, etx.BroadcastAt)
assert.NotNil(t, etx.InitialBroadcastAt)
require.NotNil(t, etx.Sequence)
assert.False(t, etx.Error.Valid)
assert.Len(t, etx.TxAttempts, 1)
attempt := etx.TxAttempts[0]
assert.Equal(t, "30 gwei", attempt.TxFee.Legacy.String())
})`
$DIR/core/chains/evm/txmgr/broadcaster_test.go: `.On("SendTransactionReturnCode", mock.Anything, mock.MatchedBy(func(tx *gethTypes.Transaction) bool {
return tx.Nonce() == localNextNonce && tx.GasPrice().Cmp(evmcfg.EVM().GasEstimator().PriceDefault().ToInt()) == 0
}), fromAddress)`
$DIR/core/chains/evm/txmgr/broadcaster_test.go: `.MatchedBy(func(tx *gethTypes.Transaction) bool {
return tx.Nonce() == localNextNonce && tx.GasPrice().Cmp(evmcfg.EVM().GasEstimator().PriceDefault().ToInt()) == 0
})`
$DIR/core/chains/evm/txmgr/broadcaster_test.go: `.Nonce()`
$DIR/core/chains/evm/txmgr/broadcaster_test.go: `.GasPrice()`
$DIR/core/chains/evm/txmgr/broadcaster_test.go: `.Cmp(evmcfg.EVM().GasEstimator().PriceDefault().ToInt())`
$DIR/core/chains/evm/txmgr/broadcaster_test.go: `.EVM()`
$DIR/core/chains/evm/txmgr/broadcaster_test.go: `.GasEstimator()`
$DIR/core/chains/evm/txmgr/broadcaster_test.go: `.PriceDefault()`
$DIR/core/chains/evm/txmgr/broadcaster_test.go: `.ToInt()`
$DIR/core/chains/evm/txmgr/broadcaster_test.go: `.Return(commonclient.Underpriced, errors.New(underpricedError))`
$DIR/core/chains/evm/txmgr/broadcaster_test.go: `.New(underpricedError)`
$DIR/core/chains/evm/txmgr/broadcaster_test.go: `.Once()`
$DIR/core/chains/evm/txmgr/broadcaster_test.go: `.On("SendTransactionReturnCode", mock.Anything, mock.MatchedBy(func(tx *gethTypes.Transaction) bool {
return tx.Nonce() == localNextNonce && tx.GasPrice().Cmp(big.NewInt(25000000000)) == 0
}), fromAddress)`
$DIR/core/chains/evm/txmgr/broadcaster_test.go: `.MatchedBy(func(tx *gethTypes.Transaction) bool {
return tx.Nonce() == localNextNonce && tx.GasPrice().Cmp(big.NewInt(25000000000)) == 0
})`
$DIR/core/chains/evm/txmgr/broadcaster_test.go: `.Nonce()`
$DIR/core/chains/evm/txmgr/broadcaster_test.go: `.GasPrice()`
$DIR/core/chains/evm/txmgr/broadcaster_test.go: `.Cmp(big.NewInt(25000000000))`
$DIR/core/chains/evm/txmgr/broadcaster_test.go: `.NewInt(25000000000)`
$DIR/core/chains/evm/txmgr/broadcaster_test.go: `.Return(commonclient.Underpriced, errors.New(underpricedError))`
$DIR/core/chains/evm/txmgr/broadcaster_test.go: `.New(underpricedError)`
$DIR/core/chains/evm/txmgr/broadcaster_test.go: `.Once()`
$DIR/core/chains/evm/txmgr/broadcaster_test.go: `.On("SendTransactionReturnCode", mock.Anything, mock.MatchedBy(func(tx *gethTypes.Transaction) bool {
return tx.Nonce() == localNextNonce && tx.GasPrice().Cmp(big.NewInt(30000000000)) == 0
}), fromAddress)`
$DIR/core/chains/evm/txmgr/broadcaster_test.go: `.MatchedBy(func(tx *gethTypes.Transaction) bool {
return tx.Nonce() == localNextNonce && tx.GasPrice().Cmp(big.NewInt(30000000000)) == 0
})`
$DIR/core/chains/evm/txmgr/broadcaster_test.go: `.Nonce()`
$DIR/core/chains/evm/txmgr/broadcaster_test.go: `.GasPrice()`
$DIR/core/chains/evm/txmgr/broadcaster_test.go: `.Cmp(big.NewInt(30000000000))`
$DIR/core/chains/evm/txmgr/broadcaster_test.go: `.NewInt(30000000000)`
$DIR/core/chains/evm/txmgr/broadcaster_test.go: `.Return(commonclient.Successful, nil)`
$DIR/core/chains/evm/txmgr/broadcaster_test.go: `.Once()`
$DIR/core/chains/evm/txmgr/broadcaster_test.go: `.ProcessUnstartedTxs(ctx, fromAddress)`
$DIR/core/chains/evm/txmgr/broadcaster_test.go: `.FindTxWithAttempts(ctx, etx.ID)`
$DIR/core/chains/evm/txmgr/broadcaster_test.go: `.Run("failed to reach node for some reason", func(t *testing.T) {
failedToReachNodeError := context.DeadlineExceeded
localNextNonce := getLocalNextNonce(t, nonceTracker, fromAddress)
ethClient.On("SendTransactionReturnCode", mock.Anything, mock.MatchedBy(func(tx *gethTypes.Transaction) bool {
return tx.Nonce() == localNextNonce
}), fromAddress).Return(commonclient.Retryable, failedToReachNodeError).Once()
// Do the thing
retryable, err := eb.ProcessUnstartedTxs(ctx, fromAddress)
require.Error(t, err)
assert.Contains(t, err.Error(), "context deadline exceeded")
assert.True(t, retryable)
// Check it was left in the unfinished state
etx, err := txStore.FindTxWithAttempts(ctx, etxUnfinished.ID)
require.NoError(t, err)
assert.Nil(t, etx.BroadcastAt)
assert.Nil(t, etx.InitialBroadcastAt)
assert.NotNil(t, etx.Sequence)
assert.False(t, etx.Error.Valid)
assert.Equal(t, txmgrcommon.TxInProgress, etx.State)
assert.Len(t, etx.TxAttempts, 1)
assert.Equal(t, txmgrtypes.TxAttemptInProgress, etx.TxAttempts[0].State)
})`
$DIR/core/chains/evm/txmgr/broadcaster_test.go: `.On("SendTransactionReturnCode", mock.Anything, mock.MatchedBy(func(tx *gethTypes.Transaction) bool {
return tx.Nonce() == localNextNonce
}), fromAddress)`
$DIR/core/chains/evm/txmgr/broadcaster_test.go: `.MatchedBy(func(tx *gethTypes.Transaction) bool {
return tx.Nonce() == localNextNonce
})`
$DIR/core/chains/evm/txmgr/broadcaster_test.go: `.Nonce()`
$DIR/core/chains/evm/txmgr/broadcaster_test.go: `.Return(commonclient.Retryable, failedToReachNodeError)`
$DIR/core/chains/evm/txmgr/broadcaster_test.go: `.Once()`
$DIR/core/chains/evm/txmgr/broadcaster_test.go: `.ProcessUnstartedTxs(ctx, fromAddress)`
$DIR/core/chains/evm/txmgr/broadcaster_test.go: `.FindTxWithAttempts(ctx, etxUnfinished.ID)`
$DIR/core/chains/evm/txmgr/broadcaster_test.go: `.Run("eth node returns temporarily underpriced transaction", func(t *testing.T) {
// This happens if parity is rejecting transactions that are not priced high enough to even get into the mempool at all
// It should pretend it was accepted into the mempool and hand off to ethConfirmer to bump gas as normal
temporarilyUnderpricedError := "There are too many transactions in the queue. Your transaction was dropped due to limit. Try increasing the fee."
localNextNonce := getLocalNextNonce(t, nonceTracker, fromAddress)
// Re-use the previously unfinished transaction, no need to insert new
ethClient.On("SendTransactionReturnCode", mock.Anything, mock.MatchedBy(func(tx *gethTypes.Transaction) bool {
return tx.Nonce() == localNextNonce
}), fromAddress).Return(commonclient.Successful, errors.New(temporarilyUnderpricedError)).Once()
// Do the thing
retryable, err := eb.ProcessUnstartedTxs(ctx, fromAddress)
assert.NoError(t, err)
assert.False(t, retryable)
// Check it was saved correctly with its attempt
etx, err := txStore.FindTxWithAttempts(ctx, etxUnfinished.ID)
require.NoError(t, err)
assert.NotNil(t, etx.BroadcastAt)
assert.NotNil(t, etx.InitialBroadcastAt)
require.NotNil(t, etx.Sequence)
assert.False(t, etx.Error.Valid)
assert.Len(t, etx.TxAttempts, 1)
attempt := etx.TxAttempts[0]
assert.Equal(t, "20 gwei", attempt.TxFee.Legacy.String())
})`
$DIR/core/chains/evm/txmgr/broadcaster_test.go: `.On("SendTransactionReturnCode", mock.Anything, mock.MatchedBy(func(tx *gethTypes.Transaction) bool {
return tx.Nonce() == localNextNonce
}), fromAddress)`
$DIR/core/chains/evm/txmgr/broadcaster_test.go: `.MatchedBy(func(tx *gethTypes.Transaction) bool {
return tx.Nonce() == localNextNonce
})`
$DIR/core/chains/evm/txmgr/broadcaster_test.go: `.Nonce()`
$DIR/core/chains/evm/txmgr/broadcaster_test.go: `.Return(commonclient.Successful, errors.New(temporarilyUnderpricedError))`
$DIR/core/chains/evm/txmgr/broadcaster_test.go: `.New(temporarilyUnderpricedError)`
$DIR/core/chains/evm/txmgr/broadcaster_test.go: `.Once()`
$DIR/core/chains/evm/txmgr/broadcaster_test.go: `.ProcessUnstartedTxs(ctx, fromAddress)`
$DIR/core/chains/evm/txmgr/broadcaster_test.go: `.FindTxWithAttempts(ctx, etxUnfinished.ID)`
$DIR/core/chains/evm/txmgr/broadcaster_test.go: `.Run("eth node returns underpriced transaction and bumping gas doesn't increase it", func(t *testing.T) {
// This happens if a transaction's gas price is below the minimum
// configured for the transaction pool.
// This is a configuration error by the node operator, since it means they set the base gas level too low.
underpricedError := "transaction underpriced"
localNextNonce := getLocalNextNonce(t, nonceTracker, fromAddress)
// In this scenario the node operator REALLY fucked up and set the bump
// to zero (even though that should not be possible due to config
// validation)
evmcfg2 := evmtest.NewChainScopedConfig(t, configtest.NewGeneralConfig(t, func(c *chainlink.Config, s *chainlink.Secrets) {
c.EVM[0].GasEstimator.BumpMin = assets.NewWeiI(0)
c.EVM[0].GasEstimator.BumpPercent = ptr[uint16](0)
}))
eb2 := NewTestEthBroadcaster(t, txStore, ethClient, ethKeyStore, cfg, evmcfg2, &testCheckerFactory{}, false, nonceTracker)
mustCreateUnstartedTx(t, txStore, fromAddress, toAddress, encodedPayload, gasLimit, value, testutils.FixtureChainID)
// First was underpriced
ethClient.On("SendTransactionReturnCode", mock.Anything, mock.MatchedBy(func(tx *gethTypes.Transaction) bool {
return tx.Nonce() == localNextNonce && tx.GasPrice().Cmp(evmcfg2.EVM().GasEstimator().PriceDefault().ToInt()) == 0
}), fromAddress).Return(commonclient.Underpriced, errors.New(underpricedError)).Once()
// Do the thing
retryable, err := eb2.ProcessUnstartedTxs(ctx, fromAddress)
require.Error(t, err)
require.Contains(t, err.Error(), "bumped fee price of 20 gwei is equal to original fee price of 20 gwei. ACTION REQUIRED: This is a configuration error, you must increase either FeeEstimator.BumpPercent or FeeEstimator.BumpMin")
assert.True(t, retryable)
// TEARDOWN: Clear out the unsent tx before the next test
pgtest.MustExec(t, db, `DELETE FROM evm.txes WHERE nonce = $1`, localNextNonce)
})`
$DIR/core/chains/evm/txmgr/broadcaster_test.go: `.NewChainScopedConfig(t, configtest.NewGeneralConfig(t, func(c *chainlink.Config, s *chainlink.Secrets) {
c.EVM[0].GasEstimator.BumpMin = assets.NewWeiI(0)
c.EVM[0].GasEstimator.BumpPercent = ptr[uint16](0)
}))`
$DIR/core/chains/evm/txmgr/broadcaster_test.go: `.NewGeneralConfig(t, func(c *chainlink.Config, s *chainlink.Secrets) {
c.EVM[0].GasEstimator.BumpMin = assets.NewWeiI(0)
c.EVM[0].GasEstimator.BumpPercent = ptr[uint16](0)
})`
$DIR/core/chains/evm/txmgr/broadcaster_test.go: `.NewWeiI(0)`
$DIR/core/chains/evm/txmgr/broadcaster_test.go: `.On("SendTransactionReturnCode", mock.Anything, mock.MatchedBy(func(tx *gethTypes.Transaction) bool {
return tx.Nonce() == localNextNonce && tx.GasPrice().Cmp(evmcfg2.EVM().GasEstimator().PriceDefault().ToInt()) == 0
}), fromAddress)`
$DIR/core/chains/evm/txmgr/broadcaster_test.go: `.MatchedBy(func(tx *gethTypes.Transaction) bool {
return tx.Nonce() == localNextNonce && tx.GasPrice().Cmp(evmcfg2.EVM().GasEstimator().PriceDefault().ToInt()) == 0
})`
$DIR/core/chains/evm/txmgr/broadcaster_test.go: `.Nonce()`
$DIR/core/chains/evm/txmgr/broadcaster_test.go: `.GasPrice()`
$DIR/core/chains/evm/txmgr/broadcaster_test.go: `.Cmp(evmcfg2.EVM().GasEstimator().PriceDefault().ToInt())`
$DIR/core/chains/evm/txmgr/broadcaster_test.go: `.EVM()`
$DIR/core/chains/evm/txmgr/broadcaster_test.go: `.GasEstimator()`
$DIR/core/chains/evm/txmgr/broadcaster_test.go: `.PriceDefault()`
$DIR/core/chains/evm/txmgr/broadcaster_test.go: `.ToInt()`
$DIR/core/chains/evm/txmgr/broadcaster_test.go: `.Return(commonclient.Underpriced, errors.New(underpricedError))`
$DIR/core/chains/evm/txmgr/broadcaster_test.go: `.New(underpricedError)`
$DIR/core/chains/evm/txmgr/broadcaster_test.go: `.Once()`
$DIR/core/chains/evm/txmgr/broadcaster_test.go: `.ProcessUnstartedTxs(ctx, fromAddress)`
$DIR/core/chains/evm/txmgr/broadcaster_test.go: `.MustExec(t, db, `DELETE FROM evm.txes WHERE nonce = $1`, localNextNonce)`
$DIR/core/chains/evm/txmgr/broadcaster_test.go: `.Run("eth tx is left in progress if eth node returns insufficient eth", func(t *testing.T) {
insufficientEthError := "insufficient funds for transfer"
localNextNonce := getLocalNextNonce(t, nonceTracker, fromAddress)
etx := mustCreateUnstartedTx(t, txStore, fromAddress, toAddress, encodedPayload, gasLimit, value, testutils.FixtureChainID)
ethClient.On("SendTransactionReturnCode", mock.Anything, mock.MatchedBy(func(tx *gethTypes.Transaction) bool {
return tx.Nonce() == localNextNonce
}), fromAddress).Return(commonclient.InsufficientFunds, errors.New(insufficientEthError)).Once()
retryable, err := eb.ProcessUnstartedTxs(ctx, fromAddress)
require.Error(t, err)
assert.Contains(t, err.Error(), "insufficient funds for transfer")
assert.True(t, retryable)
// Check it was saved correctly with its attempt
etx, err = txStore.FindTxWithAttempts(ctx, etx.ID)
require.NoError(t, err)
assert.Nil(t, etx.BroadcastAt)
assert.Nil(t, etx.InitialBroadcastAt)
require.NotNil(t, etx.Sequence)
assert.False(t, etx.Error.Valid)
assert.Equal(t, txmgrcommon.TxInProgress, etx.State)
require.Len(t, etx.TxAttempts, 1)
attempt := etx.TxAttempts[0]
assert.Equal(t, txmgrtypes.TxAttemptInProgress, attempt.State)
assert.Nil(t, attempt.BroadcastBeforeBlockNum)
})`
$DIR/core/chains/evm/txmgr/broadcaster_test.go: `.On("SendTransactionReturnCode", mock.Anything, mock.MatchedBy(func(tx *gethTypes.Transaction) bool {
return tx.Nonce() == localNextNonce
}), fromAddress)`
$DIR/core/chains/evm/txmgr/broadcaster_test.go: `.MatchedBy(func(tx *gethTypes.Transaction) bool {
return tx.Nonce() == localNextNonce
})`
$DIR/core/chains/evm/txmgr/broadcaster_test.go: `.Nonce()`
$DIR/core/chains/evm/txmgr/broadcaster_test.go: `.Return(commonclient.InsufficientFunds, errors.New(insufficientEthError))`
$DIR/core/chains/evm/txmgr/broadcaster_test.go: `.New(insufficientEthError)`
$DIR/core/chains/evm/txmgr/broadcaster_test.go: `.Once()`
$DIR/core/chains/evm/txmgr/broadcaster_test.go: `.ProcessUnstartedTxs(ctx, fromAddress)`
$DIR/core/chains/evm/txmgr/broadcaster_test.go: `.FindTxWithAttempts(ctx, etx.ID)`
$DIR/core/chains/evm/txmgr/broadcaster_test.go: `.MustExec(t, db, `DELETE FROM evm.txes`)`
$DIR/core/chains/evm/txmgr/broadcaster_test.go: `.Run("eth tx is left in progress if nonce is too high", func(t *testing.T) {
localNextNonce := getLocalNextNonce(t, nonceTracker, fromAddress)
nonceGapError := "NonceGap, Future nonce. Expected nonce: " + strconv.FormatUint(localNextNonce, 10)
etx := mustCreateUnstartedTx(t, txStore, fromAddress, toAddress, encodedPayload, gasLimit, value, testutils.FixtureChainID)
ethClient.On("SendTransactionReturnCode", mock.Anything, mock.MatchedBy(func(tx *gethTypes.Transaction) bool {
return tx.Nonce() == localNextNonce
}), fromAddress).Return(commonclient.Retryable, errors.New(nonceGapError)).Once()
retryable, err := eb.ProcessUnstartedTxs(ctx, fromAddress)
require.Error(t, err)
assert.Contains(t, err.Error(), nonceGapError)
assert.True(t, retryable)
etx, err = txStore.FindTxWithAttempts(ctx, etx.ID)
require.NoError(t, err)
assert.Nil(t, etx.BroadcastAt)
assert.Nil(t, etx.InitialBroadcastAt)
require.NotNil(t, etx.Sequence)
assert.False(t, etx.Error.Valid)
assert.Equal(t, txmgrcommon.TxInProgress, etx.State)
require.Len(t, etx.TxAttempts, 1)
attempt := etx.TxAttempts[0]
assert.Equal(t, txmgrtypes.TxAttemptInProgress, attempt.State)
assert.Nil(t, attempt.BroadcastBeforeBlockNum)
pgtest.MustExec(t, db, `DELETE FROM evm.txes`)
})`
$DIR/core/chains/evm/txmgr/broadcaster_test.go: `.FormatUint(localNextNonce, 10)`
$DIR/core/chains/evm/txmgr/broadcaster_test.go: `.On("SendTransactionReturnCode", mock.Anything, mock.MatchedBy(func(tx *gethTypes.Transaction) bool {
return tx.Nonce() == localNextNonce
}), fromAddress)`
$DIR/core/chains/evm/txmgr/broadcaster_test.go: `.MatchedBy(func(tx *gethTypes.Transaction) bool {
return tx.Nonce() == localNextNonce
})`
$DIR/core/chains/evm/txmgr/broadcaster_test.go: `.Nonce()`
$DIR/core/chains/evm/txmgr/broadcaster_test.go: `.Return(commonclient.Retryable, errors.New(nonceGapError))`
$DIR/core/chains/evm/txmgr/broadcaster_test.go: `.New(nonceGapError)`
$DIR/core/chains/evm/txmgr/broadcaster_test.go: `.Once()`
$DIR/core/chains/evm/txmgr/broadcaster_test.go: `.ProcessUnstartedTxs(ctx, fromAddress)`
$DIR/core/chains/evm/txmgr/broadcaster_test.go: `.FindTxWithAttempts(ctx, etx.ID)`
$DIR/core/chains/evm/txmgr/broadcaster_test.go: `.MustExec(t, db, `DELETE FROM evm.txes`)`
$DIR/core/chains/evm/txmgr/broadcaster_test.go: `.Run("eth node returns underpriced transaction and bumping gas doesn't increase it in EIP-1559 mode", func(t *testing.T) {
// This happens if a transaction's gas price is below the minimum
// configured for the transaction pool.
// This is a configuration error by the node operator, since it means they set the base gas level too low.
// In this scenario the node operator REALLY fucked up and set the bump
// to zero (even though that should not be possible due to config
// validation)
evmcfg2 := evmtest.NewChainScopedConfig(t, configtest.NewGeneralConfig(t, func(c *chainlink.Config, s *chainlink.Secrets) {
c.EVM[0].GasEstimator.EIP1559DynamicFees = ptr(true)
c.EVM[0].GasEstimator.BumpMin = assets.NewWeiI(0)
c.EVM[0].GasEstimator.BumpPercent = ptr[uint16](0)
}))
localNextNonce := getLocalNextNonce(t, nonceTracker, fromAddress)
ethClient.On("PendingNonceAt", mock.Anything, fromAddress).Return(localNextNonce, nil).Once()
eb2 := NewTestEthBroadcaster(t, txStore, ethClient, ethKeyStore, cfg, evmcfg2, &testCheckerFactory{}, false, nonceTracker)
mustCreateUnstartedTx(t, txStore, fromAddress, toAddress, encodedPayload, gasLimit, value, testutils.FixtureChainID)
underpricedError := "transaction underpriced"
localNextNonce = getLocalNextNonce(t, nonceTracker, fromAddress)
ethClient.On("SendTransactionReturnCode", mock.Anything, mock.MatchedBy(func(tx *gethTypes.Transaction) bool {
return tx.Nonce() == localNextNonce && tx.GasTipCap().Cmp(big.NewInt(1)) == 0
}), fromAddress).Return(commonclient.Underpriced, errors.New(underpricedError)).Once()
// Check gas tip cap verification
retryable, err := eb2.ProcessUnstartedTxs(ctx, fromAddress)
require.Error(t, err)
require.Contains(t, err.Error(), "bumped gas tip cap of 1 wei is less than or equal to original gas tip cap of 1 wei")
assert.True(t, retryable)
pgtest.MustExec(t, db, `DELETE FROM evm.txes`)
})`
$DIR/core/chains/evm/txmgr/broadcaster_test.go: `.NewChainScopedConfig(t, configtest.NewGeneralConfig(t, func(c *chainlink.Config, s *chainlink.Secrets) {
c.EVM[0].GasEstimator.EIP1559DynamicFees = ptr(true)
c.EVM[0].GasEstimator.BumpMin = assets.NewWeiI(0)
c.EVM[0].GasEstimator.BumpPercent = ptr[uint16](0)
}))`
$DIR/core/chains/evm/txmgr/broadcaster_test.go: `.NewGeneralConfig(t, func(c *chainlink.Config, s *chainlink.Secrets) {
c.EVM[0].GasEstimator.EIP1559DynamicFees = ptr(true)
c.EVM[0].GasEstimator.BumpMin = assets.NewWeiI(0)
c.EVM[0].GasEstimator.BumpPercent = ptr[uint16](0)
})`
$DIR/core/chains/evm/txmgr/broadcaster_test.go: `.NewWeiI(0)`
$DIR/core/chains/evm/txmgr/broadcaster_test.go: `.On("PendingNonceAt", mock.Anything, fromAddress)`
$DIR/core/chains/evm/txmgr/broadcaster_test.go: `.Return(localNextNonce, nil)`
$DIR/core/chains/evm/txmgr/broadcaster_test.go: `.Once()`
$DIR/core/chains/evm/txmgr/broadcaster_test.go: `.On("SendTransactionReturnCode", mock.Anything, mock.MatchedBy(func(tx *gethTypes.Transaction) bool {
return tx.Nonce() == localNextNonce && tx.GasTipCap().Cmp(big.NewInt(1)) == 0
}), fromAddress)`
$DIR/core/chains/evm/txmgr/broadcaster_test.go: `.MatchedBy(func(tx *gethTypes.Transaction) bool {
return tx.Nonce() == localNextNonce && tx.GasTipCap().Cmp(big.NewInt(1)) == 0
})`
$DIR/core/chains/evm/txmgr/broadcaster_test.go: `.Nonce()`
$DIR/core/chains/evm/txmgr/broadcaster_test.go: `.GasTipCap()`
$DIR/core/chains/evm/txmgr/broadcaster_test.go: `.Cmp(big.NewInt(1))`
$DIR/core/chains/evm/txmgr/broadcaster_test.go: `.NewInt(1)`
$DIR/core/chains/evm/txmgr/broadcaster_test.go: `.Return(commonclient.Underpriced, errors.New(underpricedError))`
$DIR/core/chains/evm/txmgr/broadcaster_test.go: `.New(underpricedError)`
$DIR/core/chains/evm/txmgr/broadcaster_test.go: `.Once()`
$DIR/core/chains/evm/txmgr/broadcaster_test.go: `.ProcessUnstartedTxs(ctx, fromAddress)`
$DIR/core/chains/evm/txmgr/broadcaster_test.go: `.MustExec(t, db, `DELETE FROM evm.txes`)`
$DIR/core/chains/evm/txmgr/broadcaster_test.go: `.NewChainScopedConfig(t, configtest.NewGeneralConfig(t, func(c *chainlink.Config, s *chainlink.Secrets) {
c.EVM[0].GasEstimator.EIP1559DynamicFees = ptr(true)
c.EVM[0].GasEstimator.TipCapDefault = assets.NewWeiI(0)
}))`
$DIR/core/chains/evm/txmgr/broadcaster_test.go: `.NewGeneralConfig(t, func(c *chainlink.Config, s *chainlink.Secrets) {
c.EVM[0].GasEstimator.EIP1559DynamicFees = ptr(true)
c.EVM[0].GasEstimator.TipCapDefault = assets.NewWeiI(0)
})`
$DIR/core/chains/evm/txmgr/broadcaster_test.go: `.NewWeiI(0)`
$DIR/core/chains/evm/txmgr/broadcaster_test.go: `.On("PendingNonceAt", mock.Anything, fromAddress)`
$DIR/core/chains/evm/txmgr/broadcaster_test.go: `.Return(localNextNonce, nil)`
$DIR/core/chains/evm/txmgr/broadcaster_test.go: `.Once()`
$DIR/core/chains/evm/txmgr/broadcaster_test.go: `.ProcessUnstartedTxs(ctx, fromAddress)`
$DIR/core/chains/evm/txmgr/broadcaster_test.go: `.NewWeiI(42)`
$DIR/core/chains/evm/txmgr/broadcaster_test.go: `.NewChainScopedConfig(t, configtest.NewGeneralConfig(t, func(c *chainlink.Config, s *chainlink.Secrets) {
c.EVM[0].GasEstimator.EIP1559DynamicFees = ptr(true)
c.EVM[0].GasEstimator.TipCapDefault = gasTipCapDefault
}))`
$DIR/core/chains/evm/txmgr/broadcaster_test.go: `.NewGeneralConfig(t, func(c *chainlink.Config, s *chainlink.Secrets) {
c.EVM[0].GasEstimator.EIP1559DynamicFees = ptr(true)
c.EVM[0].GasEstimator.TipCapDefault = gasTipCapDefault
})`
$DIR/core/chains/evm/txmgr/broadcaster_test.go: `.On("PendingNonceAt", mock.Anything, fromAddress)`
$DIR/core/chains/evm/txmgr/broadcaster_test.go: `.Return(localNextNonce, nil)`
$DIR/core/chains/evm/txmgr/broadcaster_test.go: `.Once()`
$DIR/core/chains/evm/txmgr/broadcaster_test.go: `.On("SendTransactionReturnCode", mock.Anything, mock.MatchedBy(func(tx *gethTypes.Transaction) bool {
return tx.Nonce() == localNextNonce && tx.GasTipCap().Cmp(gasTipCapDefault.ToInt()) == 0
}), fromAddress)`
$DIR/core/chains/evm/txmgr/broadcaster_test.go: `.MatchedBy(func(tx *gethTypes.Transaction) bool {
return tx.Nonce() == localNextNonce && tx.GasTipCap().Cmp(gasTipCapDefault.ToInt()) == 0
})`
$DIR/core/chains/evm/txmgr/broadcaster_test.go: `.Nonce()`
$DIR/core/chains/evm/txmgr/broadcaster_test.go: `.GasTipCap()`
$DIR/core/chains/evm/txmgr/broadcaster_test.go: `.Cmp(gasTipCapDefault.ToInt())`
$DIR/core/chains/evm/txmgr/broadcaster_test.go: `.ToInt()`
$DIR/core/chains/evm/txmgr/broadcaster_test.go: `.Return(commonclient.Underpriced, errors.New(underpricedError))`
$DIR/core/chains/evm/txmgr/broadcaster_test.go: `.New(underpricedError)`
$DIR/core/chains/evm/txmgr/broadcaster_test.go: `.Once()`
$DIR/core/chains/evm/txmgr/broadcaster_test.go: `.On("SendTransactionReturnCode", mock.Anything, mock.MatchedBy(func(tx *gethTypes.Transaction) bool {
return tx.Nonce() == localNextNonce && tx.GasTipCap().Cmp(big.NewInt(0).Add(gasTipCapDefault.ToInt(), evmcfg2.EVM().GasEstimator().BumpMin().ToInt())) == 0
}), fromAddress)`
$DIR/core/chains/evm/txmgr/broadcaster_test.go: `.MatchedBy(func(tx *gethTypes.Transaction) bool {
return tx.Nonce() == localNextNonce && tx.GasTipCap().Cmp(big.NewInt(0).Add(gasTipCapDefault.ToInt(), evmcfg2.EVM().GasEstimator().BumpMin().ToInt())) == 0
})`
$DIR/core/chains/evm/txmgr/broadcaster_test.go: `.Nonce()`
$DIR/core/chains/evm/txmgr/broadcaster_test.go: `.GasTipCap()`
$DIR/core/chains/evm/txmgr/broadcaster_test.go: `.Cmp(big.NewInt(0).Add(gasTipCapDefault.ToInt(), evmcfg2.EVM().GasEstimator().BumpMin().ToInt()))`
$DIR/core/chains/evm/txmgr/broadcaster_test.go: `.NewInt(0)`
$DIR/core/chains/evm/txmgr/broadcaster_test.go: `.Add(gasTipCapDefault.ToInt(), evmcfg2.EVM().GasEstimator().BumpMin().ToInt())`
$DIR/core/chains/evm/txmgr/broadcaster_test.go: `.ToInt()`
$DIR/core/chains/evm/txmgr/broadcaster_test.go: `.EVM()`
$DIR/core/chains/evm/txmgr/broadcaster_test.go: `.GasEstimator()`
$DIR/core/chains/evm/txmgr/broadcaster_test.go: `.BumpMin()`
$DIR/core/chains/evm/txmgr/broadcaster_test.go: `.ToInt()`
$DIR/core/chains/evm/txmgr/broadcaster_test.go: `.Return(commonclient.Underpriced, errors.New(underpricedError))`
$DIR/core/chains/evm/txmgr/broadcaster_test.go: `.New(underpricedError)`
$DIR/core/chains/evm/txmgr/broadcaster_test.go: `.Once()`
$DIR/core/chains/evm/txmgr/broadcaster_test.go: `.On("SendTransactionReturnCode", mock.Anything, mock.MatchedBy(func(tx *gethTypes.Transaction) bool {
return tx.Nonce() == localNextNonce && tx.GasTipCap().Cmp(big.NewInt(0).Add(gasTipCapDefault.ToInt(), big.NewInt(0).Mul(evmcfg2.EVM().GasEstimator().BumpMin().ToInt(), big.NewInt(2)))) == 0
}), fromAddress)`
$DIR/core/chains/evm/txmgr/broadcaster_test.go: `.MatchedBy(func(tx *gethTypes.Transaction) bool {
return tx.Nonce() == localNextNonce && tx.GasTipCap().Cmp(big.NewInt(0).Add(gasTipCapDefault.ToInt(), big.NewInt(0).Mul(evmcfg2.EVM().GasEstimator().BumpMin().ToInt(), big.NewInt(2)))) == 0
})`
$DIR/core/chains/evm/txmgr/broadcaster_test.go: `.Nonce()`
$DIR/core/chains/evm/txmgr/broadcaster_test.go: `.GasTipCap()`
$DIR/core/chains/evm/txmgr/broadcaster_test.go: `.Cmp(big.NewInt(0).Add(gasTipCapDefault.ToInt(), big.NewInt(0).Mul(evmcfg2.EVM().GasEstimator().BumpMin().ToInt(), big.NewInt(2))))`
$DIR/core/chains/evm/txmgr/broadcaster_test.go: `.NewInt(0)`
$DIR/core/chains/evm/txmgr/broadcaster_test.go: `.Add(gasTipCapDefault.ToInt(), big.NewInt(0).Mul(evmcfg2.EVM().GasEstimator().BumpMin().ToInt(), big.NewInt(2)))`
$DIR/core/chains/evm/txmgr/broadcaster_test.go: `.ToInt()`
$DIR/core/chains/evm/txmgr/broadcaster_test.go: `.NewInt(0)`
$DIR/core/chains/evm/txmgr/broadcaster_test.go: `.Mul(evmcfg2.EVM().GasEstimator().BumpMin().ToInt(), big.NewInt(2))`
$DIR/core/chains/evm/txmgr/broadcaster_test.go: `.EVM()`
$DIR/core/chains/evm/txmgr/broadcaster_test.go: `.GasEstimator()`
$DIR/core/chains/evm/txmgr/broadcaster_test.go: `.BumpMin()`
$DIR/core/chains/evm/txmgr/broadcaster_test.go: `.ToInt()`
$DIR/core/chains/evm/txmgr/broadcaster_test.go: `.NewInt(2)`
$DIR/core/chains/evm/txmgr/broadcaster_test.go: `.Return(commonclient.Successful, nil)`
$DIR/core/chains/evm/txmgr/broadcaster_test.go: `.Once()`
$DIR/core/chains/evm/txmgr/broadcaster_test.go: `.ProcessUnstartedTxs(ctx, fromAddress)`
$DIR/core/chains/evm/txmgr/broadcaster_test.go: `.MustExec(t, db, `DELETE FROM evm.txes WHERE nonce = $1`, localNextNonce)`
$DIR/core/chains/evm/txmgr/broadcaster_test.go: `.HexToAddress("0x6C03DDA95a2AEd917EeCc6eddD4b9D16E6380411")`
$DIR/core/chains/evm/txmgr/broadcaster_test.go: `.Int(assets.NewEthValue(142))`
$DIR/core/chains/evm/txmgr/broadcaster_test.go: `.NewEthValue(142)`
$DIR/core/chains/evm/txmgr/broadcaster_test.go: `.NewSqlxDB(t)`
$DIR/core/chains/evm/txmgr/broadcaster_test.go: `.NewGeneralConfig(t, nil)`
$DIR/core/chains/evm/txmgr/broadcaster_test.go: `.NewTestTxStore(t, db)`
$DIR/core/chains/evm/txmgr/broadcaster_test.go: `.NewKeyStore(t, db)`
$DIR/core/chains/evm/txmgr/broadcaster_test.go: `.MustInsertRandomKeyReturningState(t, realKeystore.Eth())`
$DIR/core/chains/evm/txmgr/broadcaster_test.go: `.Eth()`
$DIR/core/chains/evm/txmgr/broadcaster_test.go: `.NewChainScopedConfig(t, cfg)`
$DIR/core/chains/evm/txmgr/broadcaster_test.go: `.NewEthClientMockWithDefaultChain(t)`
$DIR/core/chains/evm/txmgr/broadcaster_test.go: `.NewEth(t)`
$DIR/core/chains/evm/txmgr/broadcaster_test.go: `.On("EnabledAddressesForChain", mock.Anything, testutils.FixtureChainID)`
$DIR/core/chains/evm/txmgr/broadcaster_test.go: `.Return(addresses, nil)`
$DIR/core/chains/evm/txmgr/broadcaster_test.go: `.Once()`
$DIR/core/chains/evm/txmgr/broadcaster_test.go: `.On("PendingNonceAt", mock.Anything, fromAddress)`
$DIR/core/chains/evm/txmgr/broadcaster_test.go: `.Return(uint64(0), nil)`
$DIR/core/chains/evm/txmgr/broadcaster_test.go: `.Once()`
$DIR/core/chains/evm/txmgr/broadcaster_test.go: `.Test(t)`
$DIR/core/chains/evm/txmgr/broadcaster_test.go: `.NewNonceTracker(lggr, txStore, txmgr.NewEvmTxmClient(ethClient, nil))`
$DIR/core/chains/evm/txmgr/broadcaster_test.go: `.NewEvmTxmClient(ethClient, nil)`
$DIR/core/chains/evm/txmgr/broadcaster_test.go: `.Context(t)`
$DIR/core/chains/evm/txmgr/broadcaster_test.go: `.GetNextSequence(ctx, fromAddress)`
$DIR/core/chains/evm/txmgr/broadcaster_test.go: `.NewTx(&gethTypes.LegacyTx{})`
$DIR/core/chains/evm/txmgr/broadcaster_test.go: `.On("SignTx", mock.Anything,
fromAddress,
mock.AnythingOfType("*types.Transaction"),
mock.MatchedBy(func(chainID *big.Int) bool {
return chainID.Cmp(evmcfg.EVM().ChainID()) == 0
}))`
$DIR/core/chains/evm/txmgr/broadcaster_test.go: `.AnythingOfType("*types.Transaction")`
$DIR/core/chains/evm/txmgr/broadcaster_test.go: `.MatchedBy(func(chainID *big.Int) bool {
return chainID.Cmp(evmcfg.EVM().ChainID()) == 0
})`
$DIR/core/chains/evm/txmgr/broadcaster_test.go: `.Cmp(evmcfg.EVM().ChainID())`
$DIR/core/chains/evm/txmgr/broadcaster_test.go: `.EVM()`
$DIR/core/chains/evm/txmgr/broadcaster_test.go: `.ChainID()`
$DIR/core/chains/evm/txmgr/broadcaster_test.go: `.Return(&tx, errors.New("could not sign transaction"))`
$DIR/core/chains/evm/txmgr/broadcaster_test.go: `.New("could not sign transaction")`
$DIR/core/chains/evm/txmgr/broadcaster_test.go: `.ProcessUnstartedTxs(ctx, fromAddress)`
$DIR/core/chains/evm/txmgr/broadcaster_test.go: `.FindTxWithAttempts(ctx, etx.ID)`
$DIR/core/chains/evm/txmgr/broadcaster_test.go: `.GetNextSequence(ctx, fromAddress)`
$DIR/core/chains/evm/txmgr/broadcaster_test.go: `.NewSqlxDB(t)`
$DIR/core/chains/evm/txmgr/broadcaster_test.go: `.NewGeneralConfig(t, nil)`
$DIR/core/chains/evm/txmgr/broadcaster_test.go: `.NewTestTxStore(t, db)`
$DIR/core/chains/evm/txmgr/broadcaster_test.go: `.NewChainScopedConfig(t, cfg)`
$DIR/core/chains/evm/txmgr/broadcaster_test.go: `.NewKeyStore(t, db)`
$DIR/core/chains/evm/txmgr/broadcaster_test.go: `.Eth()`
$DIR/core/chains/evm/txmgr/broadcaster_test.go: `.NewEthClientMockWithDefaultChain(t)`
$DIR/core/chains/evm/txmgr/broadcaster_test.go: `.Test(t)`
$DIR/core/chains/evm/txmgr/broadcaster_test.go: `.NewNonceTracker(lggr, txStore, txmgr.NewEvmTxmClient(ethClient, nil))`
$DIR/core/chains/evm/txmgr/broadcaster_test.go: `.NewEvmTxmClient(ethClient, nil)`
$DIR/core/chains/evm/txmgr/broadcaster_test.go: `.Trigger(testutils.NewAddress())`
$DIR/core/chains/evm/txmgr/broadcaster_test.go: `.NewAddress()`
$DIR/core/chains/evm/txmgr/broadcaster_test.go: `.Trigger(testutils.NewAddress())`
$DIR/core/chains/evm/txmgr/broadcaster_test.go: `.NewAddress()`
$DIR/core/chains/evm/txmgr/broadcaster_test.go: `.NewAddress()`
$DIR/core/chains/evm/txmgr/broadcaster_test.go: `.NewSqlxDB(t)`
$DIR/core/chains/evm/txmgr/broadcaster_test.go: `.Context(t)`
$DIR/core/chains/evm/txmgr/broadcaster_test.go: `.TestObserved(t, zapcore.DebugLevel)`
$DIR/core/chains/evm/txmgr/broadcaster_test.go: `.NewGeneralConfig(t, func(c *chainlink.Config, s *chainlink.Secrets) {
c.EVM[0].NonceAutoSync = ptr(true)
})`
$DIR/core/chains/evm/txmgr/broadcaster_test.go: `.NewChainScopedConfig(t, cfg)`
$DIR/core/chains/evm/txmgr/broadcaster_test.go: `.NewEvmTxmConfig(evmcfg.EVM())`
$DIR/core/chains/evm/txmgr/broadcaster_test.go: `.EVM()`
$DIR/core/chains/evm/txmgr/broadcaster_test.go: `.NewTestTxStore(t, db)`
$DIR/core/chains/evm/txmgr/broadcaster_test.go: `.NewKeyStore(t, db)`
$DIR/core/chains/evm/txmgr/broadcaster_test.go: `.Eth()`
$DIR/core/chains/evm/txmgr/broadcaster_test.go: `.MustInsertWithState(t, kst)`
$DIR/core/chains/evm/txmgr/broadcaster_test.go: `.NewEvmFeeEstimator(lggr, func(lggr logger.Logger) gas.EvmEstimator {
return gas.NewFixedPriceEstimator(evmcfg.EVM().GasEstimator(), nil, evmcfg.EVM().GasEstimator().BlockHistory(), lggr, nil)
}, evmcfg.EVM().GasEstimator().EIP1559DynamicFees(), evmcfg.EVM().GasEstimator())`
$DIR/core/chains/evm/txmgr/broadcaster_test.go: `.NewFixedPriceEstimator(evmcfg.EVM().GasEstimator(), nil, evmcfg.EVM().GasEstimator().BlockHistory(), lggr, nil)`
$DIR/core/chains/evm/txmgr/broadcaster_test.go: `.EVM()`
$DIR/core/chains/evm/txmgr/broadcaster_test.go: `.GasEstimator()`
$DIR/core/chains/evm/txmgr/broadcaster_test.go: `.EVM()`
$DIR/core/chains/evm/txmgr/broadcaster_test.go: `.GasEstimator()`
$DIR/core/chains/evm/txmgr/broadcaster_test.go: `.BlockHistory()`
$DIR/core/chains/evm/txmgr/broadcaster_test.go: `.EVM()`
$DIR/core/chains/evm/txmgr/broadcaster_test.go: `.GasEstimator()`
$DIR/core/chains/evm/txmgr/broadcaster_test.go: `.EIP1559DynamicFees()`
$DIR/core/chains/evm/txmgr/broadcaster_test.go: `.EVM()`
$DIR/core/chains/evm/txmgr/broadcaster_test.go: `.GasEstimator()`
$DIR/core/chains/evm/txmgr/broadcaster_test.go: `.EVM()`
$DIR/core/chains/evm/txmgr/broadcaster_test.go: `.GasEstimator()`
$DIR/core/chains/evm/txmgr/broadcaster_test.go: `.NewEthClientMockWithDefaultChain(t)`
$DIR/core/chains/evm/txmgr/broadcaster_test.go: `.NewEvmTxAttemptBuilder(*ethClient.ConfiguredChainID(), ge, kst, estimator)`
$DIR/core/chains/evm/txmgr/broadcaster_test.go: `.ConfiguredChainID()`
$DIR/core/chains/evm/txmgr/broadcaster_test.go: `.NewEth(t)`
$DIR/core/chains/evm/txmgr/broadcaster_test.go: `.On("EnabledAddressesForChain", mock.Anything, testutils.FixtureChainID)`
$DIR/core/chains/evm/txmgr/broadcaster_test.go: `.Return(addresses, nil)`
$DIR/core/chains/evm/txmgr/broadcaster_test.go: `.Once()`
$DIR/core/chains/evm/txmgr/broadcaster_test.go: `.On("PendingNonceAt", mock.Anything, fromAddress)`
$DIR/core/chains/evm/txmgr/broadcaster_test.go: `.Return(uint64(0), nil)`
$DIR/core/chains/evm/txmgr/broadcaster_test.go: `.Once()`
$DIR/core/chains/evm/txmgr/broadcaster_test.go: `.NewEvmTxmClient(ethClient, nil)`
$DIR/core/chains/evm/txmgr/broadcaster_test.go: `.NewEvmBroadcaster(txStore, txmClient, evmTxmCfg, txmgr.NewEvmTxmFeeConfig(ge), evmcfg.EVM().Transactions(), cfg.Database().Listener(), kst, txBuilder, lggr, checkerFactory, false)`
$DIR/core/chains/evm/txmgr/broadcaster_test.go: `.NewEvmTxmFeeConfig(ge)`
$DIR/core/chains/evm/txmgr/broadcaster_test.go: `.EVM()`
$DIR/core/chains/evm/txmgr/broadcaster_test.go: `.Transactions()`
$DIR/core/chains/evm/txmgr/broadcaster_test.go: `.Database()`
$DIR/core/chains/evm/txmgr/broadcaster_test.go: `.Listener()`
$DIR/core/chains/evm/txmgr/broadcaster_test.go: `.Start(ctx)`
$DIR/core/chains/evm/txmgr/broadcaster_test.go: `.AssertLogEventually(t, observed, "Skipping sequence auto-sync")`
$DIR/core/chains/evm/txmgr/broadcaster_test.go: `.NewSqlxDB(t)`
$DIR/core/chains/evm/txmgr/broadcaster_test.go: `.NewTestGeneralConfig(t)`
$DIR/core/chains/evm/txmgr/broadcaster_test.go: `.NewTestTxStore(t, db)`
$DIR/core/chains/evm/txmgr/broadcaster_test.go: `.NewKeyStore(t, db)`
$DIR/core/chains/evm/txmgr/broadcaster_test.go: `.Eth()`
$DIR/core/chains/evm/txmgr/broadcaster_test.go: `.MustInsertRandomKey(t, ethKeyStore)`
$DIR/core/chains/evm/txmgr/broadcaster_test.go: `.NewEthClientMockWithDefaultChain(t)`
$DIR/core/chains/evm/txmgr/broadcaster_test.go: `.NewChainScopedConfig(t, cfg)`
$DIR/core/chains/evm/txmgr/broadcaster_test.go: `.Test(t)`
$DIR/core/chains/evm/txmgr/broadcaster_test.go: `.Context(t)`
$DIR/core/chains/evm/txmgr/broadcaster_test.go: `.On("SendTransactionReturnCode", mock.Anything, mock.MatchedBy(func(tx *gethTypes.Transaction) bool {
return tx.Nonce() == inProgressTxNonce
}), fromAddress)`
$DIR/core/chains/evm/txmgr/broadcaster_test.go: `.MatchedBy(func(tx *gethTypes.Transaction) bool {
return tx.Nonce() == inProgressTxNonce
})`
$DIR/core/chains/evm/txmgr/broadcaster_test.go: `.Nonce()`
$DIR/core/chains/evm/txmgr/broadcaster_test.go: `.Return(commonclient.Successful, nil)`
$DIR/core/chains/evm/txmgr/broadcaster_test.go: `.Once()`
$DIR/core/chains/evm/txmgr/broadcaster_test.go: `.Nonce(inProgressTxNonce)`
$DIR/core/chains/evm/txmgr/broadcaster_test.go: `.NewNonceTracker(lggr, txStore, txmgr.NewEvmTxmClient(ethClient, nil))`
$DIR/core/chains/evm/txmgr/broadcaster_test.go: `.NewEvmTxmClient(ethClient, nil)`
$DIR/core/chains/evm/txmgr/broadcaster_test.go: `.ProcessUnstartedTxs(ctx, fromAddress)`
$DIR/core/chains/evm/txmgr/confirmer_test.go: `cltest.MustInsertRandomKey(t, ethKeyStore)`
$DIR/core/chains/evm/txmgr/confirmer_test.go: `cltest.MustInsertRandomKey(t, ethKeyStore)`
$DIR/core/chains/evm/txmgr/confirmer_test.go: `err = ec.Start(ctx)`
$DIR/core/chains/evm/txmgr/confirmer_test.go: `err = ec.Start(ctx)`
$DIR/core/chains/evm/txmgr/confirmer_test.go: `err = ec.ProcessHead(ctx, &head)`
$DIR/core/chains/evm/txmgr/confirmer_test.go: `err = ec.Close()`
$DIR/core/chains/evm/txmgr/confirmer_test.go: `err = ec.Start(ctx)`
$DIR/core/chains/evm/txmgr/confirmer_test.go: `err = ec.Close()`
$DIR/core/chains/evm/txmgr/confirmer_test.go: `t.Run("only finds eth_txes in unconfirmed state with at least one broadcast attempt", func(t *testing.T) {
mustInsertFatalErrorEthTx(t, txStore, fromAddress)
mustInsertInProgressEthTx(t, txStore, nonce, fromAddress)
nonce++
cltest.MustInsertConfirmedEthTxWithLegacyAttempt(t, txStore, nonce, 1, fromAddress)
nonce++
mustInsertUnconfirmedEthTxWithInsufficientEthAttempt(t, txStore, nonce, fromAddress)
nonce++
mustCreateUnstartedGeneratedTx(t, txStore, fromAddress, config.EVM().ChainID())
// Do the thing
require.NoError(t, ec.CheckForReceipts(ctx, blockNum))
})`
$DIR/core/chains/evm/txmgr/confirmer_test.go: `mustInsertFatalErrorEthTx(t, txStore, fromAddress)`
$DIR/core/chains/evm/txmgr/confirmer_test.go: `mustInsertInProgressEthTx(t, txStore, nonce, fromAddress)`
$DIR/core/chains/evm/txmgr/confirmer_test.go: `nonce++`
$DIR/core/chains/evm/txmgr/confirmer_test.go: `cltest.MustInsertConfirmedEthTxWithLegacyAttempt(t, txStore, nonce, 1, fromAddress)`
$DIR/core/chains/evm/txmgr/confirmer_test.go: `nonce++`
$DIR/core/chains/evm/txmgr/confirmer_test.go: `mustInsertUnconfirmedEthTxWithInsufficientEthAttempt(t, txStore, nonce, fromAddress)`
$DIR/core/chains/evm/txmgr/confirmer_test.go: `nonce++`
$DIR/core/chains/evm/txmgr/confirmer_test.go: `mustCreateUnstartedGeneratedTx(t, txStore, fromAddress, config.EVM().ChainID())`
$DIR/core/chains/evm/txmgr/confirmer_test.go: `nonce++`
$DIR/core/chains/evm/txmgr/confirmer_test.go: `t.Run("fetches receipt for one unconfirmed eth_tx", func(t *testing.T) {
ethClient.On("SequenceAt", mock.Anything, mock.Anything, mock.Anything).Return(evmtypes.Nonce(10), nil)
// Transaction not confirmed yet, receipt is nil
ethClient.On("BatchCallContext", mock.Anything, mock.MatchedBy(func(b []rpc.BatchElem) bool {
return len(b) == 1 && cltest.BatchElemMatchesParams(b[0], hashAttempt1_1, "eth_getTransactionReceipt")
})).Return(nil).Run(func(args mock.Arguments) {
elems := args.Get(1).([]rpc.BatchElem)
elems[0].Result = &evmtypes.Receipt{}
}).Once()
// Do the thing
require.NoError(t, ec.CheckForReceipts(ctx, blockNum))
var err error
etx1, err = txStore.FindTxWithAttempts(ctx, etx1.ID)
assert.NoError(t, err)
require.Len(t, etx1.TxAttempts, 1)
attempt1_1 = etx1.TxAttempts[0]
require.NoError(t, err)
require.Len(t, attempt1_1.Receipts, 0)
})`
$DIR/core/chains/evm/txmgr/confirmer_test.go: `ethClient.On("SequenceAt", mock.Anything, mock.Anything, mock.Anything).Return(evmtypes.Nonce(10), nil)`
$DIR/core/chains/evm/txmgr/confirmer_test.go: `ethClient.On("BatchCallContext", mock.Anything, mock.MatchedBy(func(b []rpc.BatchElem) bool {
return len(b) == 1 && cltest.BatchElemMatchesParams(b[0], hashAttempt1_1, "eth_getTransactionReceipt")
})).Return(nil).Run(func(args mock.Arguments) {
elems := args.Get(1).([]rpc.BatchElem)
elems[0].Result = &evmtypes.Receipt{}
}).Once()`
$DIR/core/chains/evm/txmgr/confirmer_test.go: `elems[0].Result = &evmtypes.Receipt{}`
$DIR/core/chains/evm/txmgr/confirmer_test.go: `etx1, err = txStore.FindTxWithAttempts(ctx, etx1.ID)`
$DIR/core/chains/evm/txmgr/confirmer_test.go: `attempt1_1 = etx1.TxAttempts[0]`
$DIR/core/chains/evm/txmgr/confirmer_test.go: `t.Run("saves nothing if returned receipt does not match the attempt", func(t *testing.T) {
txmReceipt := evmtypes.Receipt{
TxHash: testutils.NewHash(),
BlockHash: testutils.NewHash(),
BlockNumber: big.NewInt(42),
TransactionIndex: uint(1),
}
ethClient.On("SequenceAt", mock.Anything, mock.Anything, mock.Anything).Return(evmtypes.Nonce(10), nil)
// First transaction confirmed
ethClient.On("BatchCallContext", mock.Anything, mock.MatchedBy(func(b []rpc.BatchElem) bool {
return len(b) == 1 && cltest.BatchElemMatchesParams(b[0], hashAttempt1_1, "eth_getTransactionReceipt")
})).Return(nil).Run(func(args mock.Arguments) {
elems := args.Get(1).([]rpc.BatchElem)
*(elems[0].Result.(*evmtypes.Receipt)) = txmReceipt
}).Once()
// No error because it is merely logged
require.NoError(t, ec.CheckForReceipts(ctx, blockNum))
etx, err := txStore.FindTxWithAttempts(ctx, etx1.ID)
require.NoError(t, err)
require.Len(t, etx.TxAttempts, 1)
require.Len(t, etx.TxAttempts[0].Receipts, 0)
})`
$DIR/core/chains/evm/txmgr/confirmer_test.go: `ethClient.On("SequenceAt", mock.Anything, mock.Anything, mock.Anything).Return(evmtypes.Nonce(10), nil)`
$DIR/core/chains/evm/txmgr/confirmer_test.go: `ethClient.On("BatchCallContext", mock.Anything, mock.MatchedBy(func(b []rpc.BatchElem) bool {
return len(b) == 1 && cltest.BatchElemMatchesParams(b[0], hashAttempt1_1, "eth_getTransactionReceipt")
})).Return(nil).Run(func(args mock.Arguments) {
elems := args.Get(1).([]rpc.BatchElem)
*(elems[0].Result.(*evmtypes.Receipt)) = txmReceipt
}).Once()`
$DIR/core/chains/evm/txmgr/confirmer_test.go: `*(elems[0].Result.(*evmtypes.Receipt)) = txmReceipt`
$DIR/core/chains/evm/txmgr/confirmer_test.go: `t.Run("saves nothing if query returns error", func(t *testing.T) {
txmReceipt := evmtypes.Receipt{
TxHash: attempt1_1.Hash,
BlockHash: testutils.NewHash(),
BlockNumber: big.NewInt(42),
TransactionIndex: uint(1),
}
ethClient.On("SequenceAt", mock.Anything, mock.Anything, mock.Anything).Return(evmtypes.Nonce(10), nil)
// First transaction confirmed
ethClient.On("BatchCallContext", mock.Anything, mock.MatchedBy(func(b []rpc.BatchElem) bool {
return len(b) == 1 && cltest.BatchElemMatchesParams(b[0], hashAttempt1_1, "eth_getTransactionReceipt")
})).Return(nil).Run(func(args mock.Arguments) {
elems := args.Get(1).([]rpc.BatchElem)
*(elems[0].Result.(*evmtypes.Receipt)) = txmReceipt
elems[0].Error = errors.New("foo")
}).Once()
// No error because it is merely logged
require.NoError(t, ec.CheckForReceipts(ctx, blockNum))
etx, err := txStore.FindTxWithAttempts(ctx, etx1.ID)
require.NoError(t, err)
require.Len(t, etx.TxAttempts, 1)
require.Len(t, etx.TxAttempts[0].Receipts, 0)
})`
$DIR/core/chains/evm/txmgr/confirmer_test.go: `ethClient.On("SequenceAt", mock.Anything, mock.Anything, mock.Anything).Return(evmtypes.Nonce(10), nil)`
$DIR/core/chains/evm/txmgr/confirmer_test.go: `ethClient.On("BatchCallContext", mock.Anything, mock.MatchedBy(func(b []rpc.BatchElem) bool {
return len(b) == 1 && cltest.BatchElemMatchesParams(b[0], hashAttempt1_1, "eth_getTransactionReceipt")
})).Return(nil).Run(func(args mock.Arguments) {
elems := args.Get(1).([]rpc.BatchElem)
*(elems[0].Result.(*evmtypes.Receipt)) = txmReceipt
elems[0].Error = errors.New("foo")
}).Once()`
$DIR/core/chains/evm/txmgr/confirmer_test.go: `*(elems[0].Result.(*evmtypes.Receipt)) = txmReceipt`
$DIR/core/chains/evm/txmgr/confirmer_test.go: `elems[0].Error = errors.New("foo")`
$DIR/core/chains/evm/txmgr/confirmer_test.go: `nonce++`
$DIR/core/chains/evm/txmgr/confirmer_test.go: `t.Run("saves eth_receipt and marks eth_tx as confirmed when geth client returns valid receipt", func(t *testing.T) {
txmReceipt := evmtypes.Receipt{
TxHash: attempt1_1.Hash,
BlockHash: testutils.NewHash(),
BlockNumber: big.NewInt(42),
TransactionIndex: uint(1),
Status: uint64(1),
}
ethClient.On("SequenceAt", mock.Anything, mock.Anything, mock.Anything).Return(evmtypes.Nonce(10), nil)
ethClient.On("BatchCallContext", mock.Anything, mock.MatchedBy(func(b []rpc.BatchElem) bool {
return len(b) == 2 &&
cltest.BatchElemMatchesParams(b[0], attempt1_1.Hash, "eth_getTransactionReceipt") &&
cltest.BatchElemMatchesParams(b[1], attempt2_1.Hash, "eth_getTransactionReceipt")
})).Return(nil).Run(func(args mock.Arguments) {
elems := args.Get(1).([]rpc.BatchElem)
// First transaction confirmed
*(elems[0].Result.(*evmtypes.Receipt)) = txmReceipt
// Second transaction still unconfirmed
elems[1].Result = &evmtypes.Receipt{}
}).Once()
// Do the thing
require.NoError(t, ec.CheckForReceipts(ctx, blockNum))
// Check that the receipt was saved
etx, err := txStore.FindTxWithAttempts(ctx, etx1.ID)
require.NoError(t, err)
assert.Equal(t, txmgrcommon.TxConfirmed, etx.State)
assert.Len(t, etx.TxAttempts, 1)
attempt1_1 = etx.TxAttempts[0]
require.Len(t, attempt1_1.Receipts, 1)
ethReceipt := attempt1_1.Receipts[0]
assert.Equal(t, txmReceipt.TxHash, ethReceipt.GetTxHash())
assert.Equal(t, txmReceipt.BlockHash, ethReceipt.GetBlockHash())
assert.Equal(t, txmReceipt.BlockNumber.Int64(), ethReceipt.GetBlockNumber().Int64())
assert.Equal(t, txmReceipt.TransactionIndex, ethReceipt.GetTransactionIndex())
receiptJSON, err := json.Marshal(txmReceipt)
require.NoError(t, err)
j, err := json.Marshal(ethReceipt)
require.NoError(t, err)
assert.JSONEq(t, string(receiptJSON), string(j))
})`
$DIR/core/chains/evm/txmgr/confirmer_test.go: `ethClient.On("SequenceAt", mock.Anything, mock.Anything, mock.Anything).Return(evmtypes.Nonce(10), nil)`
$DIR/core/chains/evm/txmgr/confirmer_test.go: `ethClient.On("BatchCallContext", mock.Anything, mock.MatchedBy(func(b []rpc.BatchElem) bool {
return len(b) == 2 &&
cltest.BatchElemMatchesParams(b[0], attempt1_1.Hash, "eth_getTransactionReceipt") &&
cltest.BatchElemMatchesParams(b[1], attempt2_1.Hash, "eth_getTransactionReceipt")
})).Return(nil).Run(func(args mock.Arguments) {
elems := args.Get(1).([]rpc.BatchElem)
// First transaction confirmed
*(elems[0].Result.(*evmtypes.Receipt)) = txmReceipt
// Second transaction still unconfirmed
elems[1].Result = &evmtypes.Receipt{}
}).Once()`
$DIR/core/chains/evm/txmgr/confirmer_test.go: `*(elems[0].Result.(*evmtypes.Receipt)) = txmReceipt`
$DIR/core/chains/evm/txmgr/confirmer_test.go: `elems[1].Result = &evmtypes.Receipt{}`
$DIR/core/chains/evm/txmgr/confirmer_test.go: `attempt1_1 = etx.TxAttempts[0]`
$DIR/core/chains/evm/txmgr/confirmer_test.go: `t.Run("fetches and saves receipts for several attempts in gas price order", func(t *testing.T) {
attempt2_2 := newBroadcastLegacyEthTxAttempt(t, etx2.ID)
attempt2_2.TxFee = gas.EvmFee{Legacy: assets.NewWeiI(10)}
attempt2_3 := newBroadcastLegacyEthTxAttempt(t, etx2.ID)
attempt2_3.TxFee = gas.EvmFee{Legacy: assets.NewWeiI(20)}
// Insert order deliberately reversed to test sorting by gas price
require.NoError(t, txStore.InsertTxAttempt(ctx, &attempt2_3))
require.NoError(t, txStore.InsertTxAttempt(ctx, &attempt2_2))
txmReceipt := evmtypes.Receipt{
TxHash: attempt2_2.Hash,
BlockHash: testutils.NewHash(),
BlockNumber: big.NewInt(42),
TransactionIndex: uint(1),
Status: uint64(1),
}
ethClient.On("SequenceAt", mock.Anything, mock.Anything, mock.Anything).Return(evmtypes.Nonce(10), nil)
ethClient.On("BatchCallContext", mock.Anything, mock.MatchedBy(func(b []rpc.BatchElem) bool {
return len(b) == 3 &&
cltest.BatchElemMatchesParams(b[2], attempt2_1.Hash, "eth_getTransactionReceipt") &&
cltest.BatchElemMatchesParams(b[1], attempt2_2.Hash, "eth_getTransactionReceipt") &&
cltest.BatchElemMatchesParams(b[0], attempt2_3.Hash, "eth_getTransactionReceipt")
})).Return(nil).Run(func(args mock.Arguments) {
elems := args.Get(1).([]rpc.BatchElem)
// Most expensive attempt still unconfirmed
elems[2].Result = &evmtypes.Receipt{}
// Second most expensive attempt is confirmed
*(elems[1].Result.(*evmtypes.Receipt)) = txmReceipt
// Cheapest attempt still unconfirmed
elems[0].Result = &evmtypes.Receipt{}
}).Once()
// Do the thing
require.NoError(t, ec.CheckForReceipts(ctx, blockNum))
// Check that the state was updated
etx, err := txStore.FindTxWithAttempts(ctx, etx2.ID)
require.NoError(t, err)
require.Equal(t, txmgrcommon.TxConfirmed, etx.State)
require.Len(t, etx.TxAttempts, 3)
})`
$DIR/core/chains/evm/txmgr/confirmer_test.go: `attempt2_2.TxFee = gas.EvmFee{Legacy: assets.NewWeiI(10)}`
$DIR/core/chains/evm/txmgr/confirmer_test.go: `attempt2_3.TxFee = gas.EvmFee{Legacy: assets.NewWeiI(20)}`
$DIR/core/chains/evm/txmgr/confirmer_test.go: `ethClient.On("SequenceAt", mock.Anything, mock.Anything, mock.Anything).Return(evmtypes.Nonce(10), nil)`
$DIR/core/chains/evm/txmgr/confirmer_test.go: `ethClient.On("BatchCallContext", mock.Anything, mock.MatchedBy(func(b []rpc.BatchElem) bool {
return len(b) == 3 &&
cltest.BatchElemMatchesParams(b[2], attempt2_1.Hash, "eth_getTransactionReceipt") &&
cltest.BatchElemMatchesParams(b[1], attempt2_2.Hash, "eth_getTransactionReceipt") &&
cltest.BatchElemMatchesParams(b[0], attempt2_3.Hash, "eth_getTransactionReceipt")
})).Return(nil).Run(func(args mock.Arguments) {
elems := args.Get(1).([]rpc.BatchElem)
// Most expensive attempt still unconfirmed
elems[2].Result = &evmtypes.Receipt{}
// Second most expensive attempt is confirmed
*(elems[1].Result.(*evmtypes.Receipt)) = txmReceipt
// Cheapest attempt still unconfirmed
elems[0].Result = &evmtypes.Receipt{}
}).Once()`
$DIR/core/chains/evm/txmgr/confirmer_test.go: `elems[2].Result = &evmtypes.Receipt{}`
$DIR/core/chains/evm/txmgr/confirmer_test.go: `*(elems[1].Result.(*evmtypes.Receipt)) = txmReceipt`
$DIR/core/chains/evm/txmgr/confirmer_test.go: `elems[0].Result = &evmtypes.Receipt{}`
$DIR/core/chains/evm/txmgr/confirmer_test.go: `nonce++`
$DIR/core/chains/evm/txmgr/confirmer_test.go: `t.Run("ignores receipt missing BlockHash that comes from querying parity too early", func(t *testing.T) {
ethClient.On("SequenceAt", mock.Anything, mock.Anything, mock.Anything).Return(evmtypes.Nonce(10), nil)
receipt := evmtypes.Receipt{
TxHash: attempt3_1.Hash,
Status: uint64(1),
}
ethClient.On("BatchCallContext", mock.Anything, mock.MatchedBy(func(b []rpc.BatchElem) bool {
return len(b) == 1 && cltest.BatchElemMatchesParams(b[0], attempt3_1.Hash, "eth_getTransactionReceipt")
})).Return(nil).Run(func(args mock.Arguments) {
elems := args.Get(1).([]rpc.BatchElem)
*(elems[0].Result.(*evmtypes.Receipt)) = receipt
}).Once()
// Do the thing
require.NoError(t, ec.CheckForReceipts(ctx, blockNum))
// No receipt, but no error either
etx, err := txStore.FindTxWithAttempts(ctx, etx3.ID)
require.NoError(t, err)
assert.Equal(t, txmgrcommon.TxUnconfirmed, etx.State)
assert.Len(t, etx.TxAttempts, 1)
attempt3_1 = etx.TxAttempts[0]
require.Len(t, attempt3_1.Receipts, 0)
})`
$DIR/core/chains/evm/txmgr/confirmer_test.go: `ethClient.On("SequenceAt", mock.Anything, mock.Anything, mock.Anything).Return(evmtypes.Nonce(10), nil)`
$DIR/core/chains/evm/txmgr/confirmer_test.go: `ethClient.On("BatchCallContext", mock.Anything, mock.MatchedBy(func(b []rpc.BatchElem) bool {
return len(b) == 1 && cltest.BatchElemMatchesParams(b[0], attempt3_1.Hash, "eth_getTransactionReceipt")
})).Return(nil).Run(func(args mock.Arguments) {
elems := args.Get(1).([]rpc.BatchElem)
*(elems[0].Result.(*evmtypes.Receipt)) = receipt
}).Once()`
$DIR/core/chains/evm/txmgr/confirmer_test.go: `*(elems[0].Result.(*evmtypes.Receipt)) = receipt`
$DIR/core/chains/evm/txmgr/confirmer_test.go: `attempt3_1 = etx.TxAttempts[0]`
$DIR/core/chains/evm/txmgr/confirmer_test.go: `t.Run("does not panic if receipt has BlockHash but is missing some other fields somehow", func(t *testing.T) {
// NOTE: This should never happen, but we shouldn't panic regardless
receipt := evmtypes.Receipt{
TxHash: attempt3_1.Hash,
BlockHash: testutils.NewHash(),
Status: uint64(1),
}
ethClient.On("BatchCallContext", mock.Anything, mock.MatchedBy(func(b []rpc.BatchElem) bool {
return len(b) == 1 && cltest.BatchElemMatchesParams(b[0], attempt3_1.Hash, "eth_getTransactionReceipt")
})).Return(nil).Run(func(args mock.Arguments) {
elems := args.Get(1).([]rpc.BatchElem)
*(elems[0].Result.(*evmtypes.Receipt)) = receipt
}).Once()
// Do the thing
require.NoError(t, ec.CheckForReceipts(ctx, blockNum))
// No receipt, but no error either
etx, err := txStore.FindTxWithAttempts(ctx, etx3.ID)
require.NoError(t, err)
assert.Equal(t, txmgrcommon.TxUnconfirmed, etx.State)
assert.Len(t, etx.TxAttempts, 1)
attempt3_1 = etx.TxAttempts[0]
require.Len(t, attempt3_1.Receipts, 0)
})`
$DIR/core/chains/evm/txmgr/confirmer_test.go: `ethClient.On("BatchCallContext", mock.Anything, mock.MatchedBy(func(b []rpc.BatchElem) bool {
return len(b) == 1 && cltest.BatchElemMatchesParams(b[0], attempt3_1.Hash, "eth_getTransactionReceipt")
})).Return(nil).Run(func(args mock.Arguments) {
elems := args.Get(1).([]rpc.BatchElem)
*(elems[0].Result.(*evmtypes.Receipt)) = receipt
}).Once()`
$DIR/core/chains/evm/txmgr/confirmer_test.go: `*(elems[0].Result.(*evmtypes.Receipt)) = receipt`
$DIR/core/chains/evm/txmgr/confirmer_test.go: `attempt3_1 = etx.TxAttempts[0]`
$DIR/core/chains/evm/txmgr/confirmer_test.go: `t.Run("handles case where eth_receipt already exists somehow", func(t *testing.T) {
ethReceipt := mustInsertEthReceipt(t, txStore, 42, testutils.NewHash(), attempt3_1.Hash)
txmReceipt := evmtypes.Receipt{
TxHash: attempt3_1.Hash,
BlockHash: ethReceipt.BlockHash,
BlockNumber: big.NewInt(ethReceipt.BlockNumber),
TransactionIndex: ethReceipt.TransactionIndex,
Status: uint64(1),
}
ethClient.On("SequenceAt", mock.Anything, mock.Anything, mock.Anything).Return(evmtypes.Nonce(10), nil)
ethClient.On("BatchCallContext", mock.Anything, mock.MatchedBy(func(b []rpc.BatchElem) bool {
return len(b) == 1 && cltest.BatchElemMatchesParams(b[0], attempt3_1.Hash, "eth_getTransactionReceipt")
})).Return(nil).Run(func(args mock.Arguments) {
elems := args.Get(1).([]rpc.BatchElem)
*(elems[0].Result.(*evmtypes.Receipt)) = txmReceipt
}).Once()
// Do the thing
require.NoError(t, ec.CheckForReceipts(ctx, blockNum))
// Check that the receipt was unchanged
etx, err := txStore.FindTxWithAttempts(ctx, etx3.ID)
require.NoError(t, err)
assert.Equal(t, txmgrcommon.TxConfirmed, etx.State)
assert.Len(t, etx.TxAttempts, 1)
attempt3_1 = etx.TxAttempts[0]
require.Len(t, attempt3_1.Receipts, 1)
ethReceipt3_1 := attempt3_1.Receipts[0]
assert.Equal(t, txmReceipt.TxHash, ethReceipt3_1.GetTxHash())
assert.Equal(t, txmReceipt.BlockHash, ethReceipt3_1.GetBlockHash())
assert.Equal(t, txmReceipt.BlockNumber.Int64(), ethReceipt3_1.GetBlockNumber().Int64())
assert.Equal(t, txmReceipt.TransactionIndex, ethReceipt3_1.GetTransactionIndex())
})`
$DIR/core/chains/evm/txmgr/confirmer_test.go: `ethClient.On("SequenceAt", mock.Anything, mock.Anything, mock.Anything).Return(evmtypes.Nonce(10), nil)`
$DIR/core/chains/evm/txmgr/confirmer_test.go: `ethClient.On("BatchCallContext", mock.Anything, mock.MatchedBy(func(b []rpc.BatchElem) bool {
return len(b) == 1 && cltest.BatchElemMatchesParams(b[0], attempt3_1.Hash, "eth_getTransactionReceipt")
})).Return(nil).Run(func(args mock.Arguments) {
elems := args.Get(1).([]rpc.BatchElem)
*(elems[0].Result.(*evmtypes.Receipt)) = txmReceipt
}).Once()`
$DIR/core/chains/evm/txmgr/confirmer_test.go: `*(elems[0].Result.(*evmtypes.Receipt)) = txmReceipt`
$DIR/core/chains/evm/txmgr/confirmer_test.go: `attempt3_1 = etx.TxAttempts[0]`
$DIR/core/chains/evm/txmgr/confirmer_test.go: `nonce++`
$DIR/core/chains/evm/txmgr/confirmer_test.go: `t.Run("on receipt fetch marks in_progress eth_tx_attempt as broadcast", func(t *testing.T) {
attempt4_2 := newInProgressLegacyEthTxAttempt(t, etx4.ID)
attempt4_2.TxFee = gas.EvmFee{Legacy: assets.NewWeiI(10)}
require.NoError(t, txStore.InsertTxAttempt(ctx, &attempt4_2))
txmReceipt := evmtypes.Receipt{
TxHash: attempt4_2.Hash,
BlockHash: testutils.NewHash(),
BlockNumber: big.NewInt(42),
TransactionIndex: uint(1),
Status: uint64(1),
}
ethClient.On("SequenceAt", mock.Anything, mock.Anything, mock.Anything).Return(evmtypes.Nonce(10), nil)
// Second attempt is confirmed
ethClient.On("BatchCallContext", mock.Anything, mock.MatchedBy(func(b []rpc.BatchElem) bool {
return len(b) == 2 &&
cltest.BatchElemMatchesParams(b[0], attempt4_2.Hash, "eth_getTransactionReceipt") &&
cltest.BatchElemMatchesParams(b[1], attempt4_1.Hash, "eth_getTransactionReceipt")
})).Return(nil).Run(func(args mock.Arguments) {
elems := args.Get(1).([]rpc.BatchElem)
// First attempt still unconfirmed
elems[1].Result = &evmtypes.Receipt{}
// Second attempt is confirmed
*(elems[0].Result.(*evmtypes.Receipt)) = txmReceipt
}).Once()
// Do the thing
require.NoError(t, ec.CheckForReceipts(ctx, blockNum))
// Check that the state was updated
var err error
etx4, err = txStore.FindTxWithAttempts(ctx, etx4.ID)
require.NoError(t, err)
attempt4_1 = etx4.TxAttempts[1]
attempt4_2 = etx4.TxAttempts[0]
// And the attempts
require.Equal(t, txmgrtypes.TxAttemptBroadcast, attempt4_1.State)
require.Nil(t, attempt4_1.BroadcastBeforeBlockNum)
require.Equal(t, txmgrtypes.TxAttemptBroadcast, attempt4_2.State)
require.Equal(t, int64(42), *attempt4_2.BroadcastBeforeBlockNum)
// Check receipts
require.Len(t, attempt4_1.Receipts, 0)
require.Len(t, attempt4_2.Receipts, 1)
})`
$DIR/core/chains/evm/txmgr/confirmer_test.go: `attempt4_2.TxFee = gas.EvmFee{Legacy: assets.NewWeiI(10)}`
$DIR/core/chains/evm/txmgr/confirmer_test.go: `ethClient.On("SequenceAt", mock.Anything, mock.Anything, mock.Anything).Return(evmtypes.Nonce(10), nil)`
$DIR/core/chains/evm/txmgr/confirmer_test.go: `ethClient.On("BatchCallContext", mock.Anything, mock.MatchedBy(func(b []rpc.BatchElem) bool {
return len(b) == 2 &&
cltest.BatchElemMatchesParams(b[0], attempt4_2.Hash, "eth_getTransactionReceipt") &&
cltest.BatchElemMatchesParams(b[1], attempt4_1.Hash, "eth_getTransactionReceipt")
})).Return(nil).Run(func(args mock.Arguments) {
elems := args.Get(1).([]rpc.BatchElem)
// First attempt still unconfirmed
elems[1].Result = &evmtypes.Receipt{}
// Second attempt is confirmed
*(elems[0].Result.(*evmtypes.Receipt)) = txmReceipt
}).Once()`
$DIR/core/chains/evm/txmgr/confirmer_test.go: `elems[1].Result = &evmtypes.Receipt{}`
$DIR/core/chains/evm/txmgr/confirmer_test.go: `*(elems[0].Result.(*evmtypes.Receipt)) = txmReceipt`
$DIR/core/chains/evm/txmgr/confirmer_test.go: `etx4, err = txStore.FindTxWithAttempts(ctx, etx4.ID)`
$DIR/core/chains/evm/txmgr/confirmer_test.go: `attempt4_1 = etx4.TxAttempts[1]`
$DIR/core/chains/evm/txmgr/confirmer_test.go: `attempt4_2 = etx4.TxAttempts[0]`
$DIR/core/chains/evm/txmgr/confirmer_test.go: `nonce++`
$DIR/core/chains/evm/txmgr/confirmer_test.go: `ethClient.On("SequenceAt", mock.Anything, mock.Anything, mock.Anything).Return(evmtypes.Nonce(10), nil)`
$DIR/core/chains/evm/txmgr/confirmer_test.go: `ethClient.On("BatchCallContext", mock.Anything, mock.MatchedBy(func(b []rpc.BatchElem) bool {
return len(b) == 1 &&
cltest.BatchElemMatchesParams(b[0], attempt5_1.Hash, "eth_getTransactionReceipt")
})).Return(nil).Run(func(args mock.Arguments) {
elems := args.Get(1).([]rpc.BatchElem)
// First attempt still unconfirmed
*(elems[0].Result.(*evmtypes.Receipt)) = txmReceipt
}).Once()`
$DIR/core/chains/evm/txmgr/confirmer_test.go: `*(elems[0].Result.(*evmtypes.Receipt)) = txmReceipt`
$DIR/core/chains/evm/txmgr/confirmer_test.go: `ethClient.On("CallContract", mock.Anything, mock.Anything, mock.Anything).Return(nil, &client.JsonError{
Code: 1,
Message: "reverted",
Data: utils.ConcatBytes(sig[:4], data),
}).Once()`
$DIR/core/chains/evm/txmgr/confirmer_test.go: `etx5, err = txStore.FindTxWithAttempts(ctx, etx5.ID)`
$DIR/core/chains/evm/txmgr/confirmer_test.go: `attempt5_1 = etx5.TxAttempts[0]`
$DIR/core/chains/evm/txmgr/confirmer_test.go: `c.EVM[0].RPCDefaultBatchSize = ptr[uint32](2)`
$DIR/core/chains/evm/txmgr/confirmer_test.go: `attempts = append(attempts, attempt)`
$DIR/core/chains/evm/txmgr/confirmer_test.go: `ethClient.On("SequenceAt", mock.Anything, mock.Anything, mock.Anything).Return(evmtypes.Nonce(10), nil)`
$DIR/core/chains/evm/txmgr/confirmer_test.go: `ethClient.On("BatchCallContext", mock.Anything, mock.MatchedBy(func(b []rpc.BatchElem) bool {
return len(b) == 2 &&
cltest.BatchElemMatchesParams(b[0], attempts[4].Hash, "eth_getTransactionReceipt") &&
cltest.BatchElemMatchesParams(b[1], attempts[3].Hash, "eth_getTransactionReceipt")
})).Return(nil).Run(func(args mock.Arguments) {
elems := args.Get(1).([]rpc.BatchElem)
elems[0].Result = &evmtypes.Receipt{}
elems[1].Result = &evmtypes.Receipt{}
}).Once()`
$DIR/core/chains/evm/txmgr/confirmer_test.go: `elems[0].Result = &evmtypes.Receipt{}`
$DIR/core/chains/evm/txmgr/confirmer_test.go: `elems[1].Result = &evmtypes.Receipt{}`
$DIR/core/chains/evm/txmgr/confirmer_test.go: `ethClient.On("BatchCallContext", mock.Anything, mock.MatchedBy(func(b []rpc.BatchElem) bool {
return len(b) == 2 &&
cltest.BatchElemMatchesParams(b[0], attempts[2].Hash, "eth_getTransactionReceipt") &&
cltest.BatchElemMatchesParams(b[1], attempts[1].Hash, "eth_getTransactionReceipt")
})).Return(nil).Run(func(args mock.Arguments) {
elems := args.Get(1).([]rpc.BatchElem)
elems[0].Result = &evmtypes.Receipt{}
elems[1].Result = &evmtypes.Receipt{}
}).Once()`
$DIR/core/chains/evm/txmgr/confirmer_test.go: `elems[0].Result = &evmtypes.Receipt{}`
$DIR/core/chains/evm/txmgr/confirmer_test.go: `elems[1].Result = &evmtypes.Receipt{}`
$DIR/core/chains/evm/txmgr/confirmer_test.go: `ethClient.On("BatchCallContext", mock.Anything, mock.MatchedBy(func(b []rpc.BatchElem) bool {
return len(b) == 1 &&
cltest.BatchElemMatchesParams(b[0], attempts[0].Hash, "eth_getTransactionReceipt")
})).Return(nil).Run(func(args mock.Arguments) {
elems := args.Get(1).([]rpc.BatchElem)
elems[0].Result = &evmtypes.Receipt{}
}).Once()`
$DIR/core/chains/evm/txmgr/confirmer_test.go: `elems[0].Result = &evmtypes.Receipt{}`
$DIR/core/chains/evm/txmgr/confirmer_test.go: `c.EVM[0].RPCDefaultBatchSize = ptr[uint32](1)`
$DIR/core/chains/evm/txmgr/confirmer_test.go: `c.EVM[0].Transactions.ForwardersEnabled = ptr(true)`
$DIR/core/chains/evm/txmgr/confirmer_test.go: `attempt.Tx.Meta = nil`
$DIR/core/chains/evm/txmgr/confirmer_test.go: `ethClient.On("SequenceAt", mock.Anything, mock.Anything, mock.Anything).Return(evmtypes.Nonce(10), nil)`
$DIR/core/chains/evm/txmgr/confirmer_test.go: `ethClient.On("BatchCallContext", mock.Anything, mock.MatchedBy(func(b []rpc.BatchElem) bool {
return len(b) == 1 &&
cltest.BatchElemMatchesParams(b[0], attempt.Hash, "eth_getTransactionReceipt")
})).Return(nil).Run(func(args mock.Arguments) {
elems := args.Get(1).([]rpc.BatchElem)
*(elems[0].Result.(*evmtypes.Receipt)) = txmReceipt // confirmed
}).Once()`
$DIR/core/chains/evm/txmgr/confirmer_test.go: `*(elems[0].Result.(*evmtypes.Receipt)) = txmReceipt`
$DIR/core/chains/evm/txmgr/confirmer_test.go: `dbtx, err = txStore.FindTxWithAttempts(ctx, etx.ID)`
$DIR/core/chains/evm/txmgr/confirmer_test.go: `c.EVM[0].RPCDefaultBatchSize = ptr[uint32](6)`
$DIR/core/chains/evm/txmgr/confirmer_test.go: `attempts = append(attempts, attempt)`
$DIR/core/chains/evm/txmgr/confirmer_test.go: `ethClient.On("SequenceAt", mock.Anything, mock.Anything, mock.Anything).Return(evmtypes.Nonce(0), nil)`
$DIR/core/chains/evm/txmgr/confirmer_test.go: `ethClient.On("BatchCallContext", mock.Anything, mock.MatchedBy(func(b []rpc.BatchElem) bool {
return len(b) == 4
})).Return(nil).Run(func(args mock.Arguments) {
elems := args.Get(1).([]rpc.BatchElem)
captured = append(captured, elems...)
elems[0].Result = &evmtypes.Receipt{}
elems[1].Result = &evmtypes.Receipt{}
elems[2].Result = &evmtypes.Receipt{}
elems[3].Result = &evmtypes.Receipt{}
}).Once()`
$DIR/core/chains/evm/txmgr/confirmer_test.go: `captured = append(captured, elems...)`
$DIR/core/chains/evm/txmgr/confirmer_test.go: `elems[0].Result = &evmtypes.Receipt{}`
$DIR/core/chains/evm/txmgr/confirmer_test.go: `elems[1].Result = &evmtypes.Receipt{}`
$DIR/core/chains/evm/txmgr/confirmer_test.go: `elems[2].Result = &evmtypes.Receipt{}`
$DIR/core/chains/evm/txmgr/confirmer_test.go: `elems[3].Result = &evmtypes.Receipt{}`
$DIR/core/chains/evm/txmgr/confirmer_test.go: `cltest.BatchElemMustMatchParams(t, captured[0], attempts[0].Hash, "eth_getTransactionReceipt")`
$DIR/core/chains/evm/txmgr/confirmer_test.go: `cltest.BatchElemMustMatchParams(t, captured[1], attempts[1].Hash, "eth_getTransactionReceipt")`
$DIR/core/chains/evm/txmgr/confirmer_test.go: `cltest.BatchElemMustMatchParams(t, captured[2], attempts[2].Hash, "eth_getTransactionReceipt")`
$DIR/core/chains/evm/txmgr/confirmer_test.go: `ethClient.On("SequenceAt", mock.Anything, mock.Anything, mock.Anything).Return(evmtypes.Nonce(0), nil)`
$DIR/core/chains/evm/txmgr/confirmer_test.go: `ethClient.On("SequenceAt", mock.Anything, mock.Anything, mock.Anything).Return(evmtypes.Nonce(20), nil)`
$DIR/core/chains/evm/txmgr/confirmer_test.go: `pgtest.MustExec(t, db, `UPDATE evm.txes SET state='confirmed' WHERE id = $1`, etx_other_chain.ID)`
$DIR/core/chains/evm/txmgr/confirmer_test.go: `ethClient.On("BatchCallContext", mock.Anything, mock.MatchedBy(func(b []rpc.BatchElem) bool {
return len(b) == 1 && cltest.BatchElemMatchesParams(b[0], attempt2_9.Hash, "eth_getTransactionReceipt")
})).Return(nil).Run(func(args mock.Arguments) {
elems := args.Get(1).([]rpc.BatchElem)
*(elems[0].Result.(*evmtypes.Receipt)) = txmReceipt2_9
}).Once()`
$DIR/core/chains/evm/txmgr/confirmer_test.go: `*(elems[0].Result.(*evmtypes.Receipt)) = txmReceipt2_9`
$DIR/core/chains/evm/txmgr/confirmer_test.go: `mustTxBeInState(t, txStore, etx1_0, txmgrcommon.TxUnconfirmed)`
$DIR/core/chains/evm/txmgr/confirmer_test.go: `mustTxBeInState(t, txStore, etx1_1, txmgrcommon.TxUnconfirmed)`
$DIR/core/chains/evm/txmgr/confirmer_test.go: `mustTxBeInState(t, txStore, etx2_9, txmgrcommon.TxConfirmed)`
$DIR/core/chains/evm/txmgr/confirmer_test.go: `ethClient.On("BatchCallContext", mock.Anything, mock.MatchedBy(func(b []rpc.BatchElem) bool {
return len(b) == 1 && cltest.BatchElemMatchesParams(b[0], attempt1_1.Hash, "eth_getTransactionReceipt")
})).Return(nil).Run(func(args mock.Arguments) {
elems := args.Get(1).([]rpc.BatchElem)
*(elems[0].Result.(*evmtypes.Receipt)) = txmReceipt1_1
}).Once()`
$DIR/core/chains/evm/txmgr/confirmer_test.go: `*(elems[0].Result.(*evmtypes.Receipt)) = txmReceipt1_1`
$DIR/core/chains/evm/txmgr/confirmer_test.go: `mustTxBeInState(t, txStore, etx1_0, txmgrcommon.TxConfirmedMissingReceipt)`
$DIR/core/chains/evm/txmgr/confirmer_test.go: `mustTxBeInState(t, txStore, etx1_1, txmgrcommon.TxConfirmed)`
$DIR/core/chains/evm/txmgr/confirmer_test.go: `c.EVM[0].FinalityDepth = ptr[uint32](50)`
$DIR/core/chains/evm/txmgr/confirmer_test.go: `attempt0_2.BroadcastBeforeBlockNum = &b`
$DIR/core/chains/evm/txmgr/confirmer_test.go: `attempt1_2.BroadcastBeforeBlockNum = &b`
$DIR/core/chains/evm/txmgr/confirmer_test.go: `pgtest.MustExec(t, db, `UPDATE evm.tx_attempts SET broadcast_before_block_num = 41 WHERE broadcast_before_block_num IS NULL`)`
$DIR/core/chains/evm/txmgr/confirmer_test.go: `t.Run("marks buried eth_txes as 'confirmed_missing_receipt'", func(t *testing.T) {
txmReceipt0 := evmtypes.Receipt{
TxHash: attempt0_2.Hash,
BlockHash: testutils.NewHash(),
BlockNumber: big.NewInt(42),
TransactionIndex: uint(1),
Status: uint64(1),
}
txmReceipt3 := evmtypes.Receipt{
TxHash: attempt3_1.Hash,
BlockHash: testutils.NewHash(),
BlockNumber: big.NewInt(42),
TransactionIndex: uint(1),
Status: uint64(1),
}
ethClient.On("SequenceAt", mock.Anything, mock.Anything, mock.Anything).Return(evmtypes.Nonce(4), nil)
ethClient.On("BatchCallContext", mock.Anything, mock.MatchedBy(func(b []rpc.BatchElem) bool {
return len(b) == 6 &&
cltest.BatchElemMatchesParams(b[0], attempt0_2.Hash, "eth_getTransactionReceipt") &&
cltest.BatchElemMatchesParams(b[1], attempt0_1.Hash, "eth_getTransactionReceipt") &&
cltest.BatchElemMatchesParams(b[2], attempt1_2.Hash, "eth_getTransactionReceipt") &&
cltest.BatchElemMatchesParams(b[3], attempt1_1.Hash, "eth_getTransactionReceipt") &&
cltest.BatchElemMatchesParams(b[4], attempt2_1.Hash, "eth_getTransactionReceipt") &&
cltest.BatchElemMatchesParams(b[5], attempt3_1.Hash, "eth_getTransactionReceipt")
})).Return(nil).Run(func(args mock.Arguments) {
elems := args.Get(1).([]rpc.BatchElem)
// First transaction confirmed
*(elems[0].Result.(*evmtypes.Receipt)) = txmReceipt0
elems[1].Result = &evmtypes.Receipt{}
// Second transaction stil unconfirmed
elems[2].Result = &evmtypes.Receipt{}
elems[3].Result = &evmtypes.Receipt{}
// Third transaction still unconfirmed
elems[4].Result = &evmtypes.Receipt{}
// Fourth transaction is confirmed
*(elems[5].Result.(*evmtypes.Receipt)) = txmReceipt3
}).Once()
// PERFORM
// Block num of 43 is one higher than the receipt (as would generally be expected)
require.NoError(t, ec.CheckForReceipts(ctx, 43))
// Expected state is that the "top" eth_tx is now confirmed, with the
// two below it "confirmed_missing_receipt" and the "bottom" eth_tx also confirmed
var err error
etx3, err = txStore.FindTxWithAttempts(ctx, etx3.ID)
require.NoError(t, err)
require.Equal(t, txmgrcommon.TxConfirmed, etx3.State)
ethReceipt := etx3.TxAttempts[0].Receipts[0]
require.Equal(t, txmReceipt3.BlockHash, ethReceipt.GetBlockHash())
etx2, err = txStore.FindTxWithAttempts(ctx, etx2.ID)
require.NoError(t, err)
require.Equal(t, txmgrcommon.TxConfirmedMissingReceipt, etx2.State)
etx1, err = txStore.FindTxWithAttempts(ctx, etx1.ID)
require.NoError(t, err)
require.Equal(t, txmgrcommon.TxConfirmedMissingReceipt, etx1.State)
etx0, err = txStore.FindTxWithAttempts(ctx, etx0.ID)
require.NoError(t, err)
require.Equal(t, txmgrcommon.TxConfirmed, etx0.State)
require.Len(t, etx0.TxAttempts, 2)
require.Len(t, etx0.TxAttempts[0].Receipts, 1)
ethReceipt = etx0.TxAttempts[0].Receipts[0]
require.Equal(t, txmReceipt0.BlockHash, ethReceipt.GetBlockHash())
})`
$DIR/core/chains/evm/txmgr/confirmer_test.go: `ethClient.On("SequenceAt", mock.Anything, mock.Anything, mock.Anything).Return(evmtypes.Nonce(4), nil)`
$DIR/core/chains/evm/txmgr/confirmer_test.go: `ethClient.On("BatchCallContext", mock.Anything, mock.MatchedBy(func(b []rpc.BatchElem) bool {
return len(b) == 6 &&
cltest.BatchElemMatchesParams(b[0], attempt0_2.Hash, "eth_getTransactionReceipt") &&
cltest.BatchElemMatchesParams(b[1], attempt0_1.Hash, "eth_getTransactionReceipt") &&
cltest.BatchElemMatchesParams(b[2], attempt1_2.Hash, "eth_getTransactionReceipt") &&
cltest.BatchElemMatchesParams(b[3], attempt1_1.Hash, "eth_getTransactionReceipt") &&
cltest.BatchElemMatchesParams(b[4], attempt2_1.Hash, "eth_getTransactionReceipt") &&
cltest.BatchElemMatchesParams(b[5], attempt3_1.Hash, "eth_getTransactionReceipt")
})).Return(nil).Run(func(args mock.Arguments) {
elems := args.Get(1).([]rpc.BatchElem)
// First transaction confirmed
*(elems[0].Result.(*evmtypes.Receipt)) = txmReceipt0
elems[1].Result = &evmtypes.Receipt{}
// Second transaction stil unconfirmed
elems[2].Result = &evmtypes.Receipt{}
elems[3].Result = &evmtypes.Receipt{}
// Third transaction still unconfirmed
elems[4].Result = &evmtypes.Receipt{}
// Fourth transaction is confirmed
*(elems[5].Result.(*evmtypes.Receipt)) = txmReceipt3
}).Once()`
$DIR/core/chains/evm/txmgr/confirmer_test.go: `*(elems[0].Result.(*evmtypes.Receipt)) = txmReceipt0`
$DIR/core/chains/evm/txmgr/confirmer_test.go: `elems[1].Result = &evmtypes.Receipt{}`
$DIR/core/chains/evm/txmgr/confirmer_test.go: `elems[2].Result = &evmtypes.Receipt{}`
$DIR/core/chains/evm/txmgr/confirmer_test.go: `elems[3].Result = &evmtypes.Receipt{}`
$DIR/core/chains/evm/txmgr/confirmer_test.go: `elems[4].Result = &evmtypes.Receipt{}`
$DIR/core/chains/evm/txmgr/confirmer_test.go: `*(elems[5].Result.(*evmtypes.Receipt)) = txmReceipt3`
$DIR/core/chains/evm/txmgr/confirmer_test.go: `etx3, err = txStore.FindTxWithAttempts(ctx, etx3.ID)`
$DIR/core/chains/evm/txmgr/confirmer_test.go: `etx2, err = txStore.FindTxWithAttempts(ctx, etx2.ID)`
$DIR/core/chains/evm/txmgr/confirmer_test.go: `etx1, err = txStore.FindTxWithAttempts(ctx, etx1.ID)`
$DIR/core/chains/evm/txmgr/confirmer_test.go: `etx0, err = txStore.FindTxWithAttempts(ctx, etx0.ID)`
$DIR/core/chains/evm/txmgr/confirmer_test.go: `ethReceipt = etx0.TxAttempts[0].Receipts[0]`
$DIR/core/chains/evm/txmgr/confirmer_test.go: `t.Run("marks eth_txes with state 'confirmed_missing_receipt' as 'confirmed' if a receipt finally shows up", func(t *testing.T) {
txmReceipt := evmtypes.Receipt{
TxHash: attempt2_1.Hash,
BlockHash: testutils.NewHash(),
BlockNumber: big.NewInt(43),
TransactionIndex: uint(1),
Status: uint64(1),
}
ethClient.On("SequenceAt", mock.Anything, mock.Anything, mock.Anything).Return(evmtypes.Nonce(10), nil)
ethClient.On("BatchCallContext", mock.Anything, mock.MatchedBy(func(b []rpc.BatchElem) bool {
return len(b) == 3 &&
cltest.BatchElemMatchesParams(b[0], attempt1_2.Hash, "eth_getTransactionReceipt") &&
cltest.BatchElemMatchesParams(b[1], attempt1_1.Hash, "eth_getTransactionReceipt") &&
cltest.BatchElemMatchesParams(b[2], attempt2_1.Hash, "eth_getTransactionReceipt")
})).Return(nil).Run(func(args mock.Arguments) {
elems := args.Get(1).([]rpc.BatchElem)
// First transaction still unconfirmed
elems[0].Result = &evmtypes.Receipt{}
elems[1].Result = &evmtypes.Receipt{}
// Second transaction confirmed
*(elems[2].Result.(*evmtypes.Receipt)) = txmReceipt
}).Once()
// PERFORM
// Block num of 44 is one higher than the receipt (as would generally be expected)
require.NoError(t, ec.CheckForReceipts(ctx, 44))
// Expected state is that the "top" two eth_txes are now confirmed, with the
// one below it still "confirmed_missing_receipt" and the bottom one remains confirmed
var err error
etx3, err = txStore.FindTxWithAttempts(ctx, etx3.ID)
require.NoError(t, err)
require.Equal(t, txmgrcommon.TxConfirmed, etx3.State)
etx2, err = txStore.FindTxWithAttempts(ctx, etx2.ID)
require.NoError(t, err)
require.Equal(t, txmgrcommon.TxConfirmed, etx2.State)
ethReceipt := etx2.TxAttempts[0].Receipts[0]
require.Equal(t, txmReceipt.BlockHash, ethReceipt.GetBlockHash())
etx1, err = txStore.FindTxWithAttempts(ctx, etx1.ID)
require.NoError(t, err)
require.Equal(t, txmgrcommon.TxConfirmedMissingReceipt, etx1.State)
etx0, err = txStore.FindTxWithAttempts(ctx, etx0.ID)
require.NoError(t, err)
require.Equal(t, txmgrcommon.TxConfirmed, etx0.State)
})`
$DIR/core/chains/evm/txmgr/confirmer_test.go: `ethClient.On("SequenceAt", mock.Anything, mock.Anything, mock.Anything).Return(evmtypes.Nonce(10), nil)`
$DIR/core/chains/evm/txmgr/confirmer_test.go: `ethClient.On("BatchCallContext", mock.Anything, mock.MatchedBy(func(b []rpc.BatchElem) bool {
return len(b) == 3 &&
cltest.BatchElemMatchesParams(b[0], attempt1_2.Hash, "eth_getTransactionReceipt") &&
cltest.BatchElemMatchesParams(b[1], attempt1_1.Hash, "eth_getTransactionReceipt") &&
cltest.BatchElemMatchesParams(b[2], attempt2_1.Hash, "eth_getTransactionReceipt")
})).Return(nil).Run(func(args mock.Arguments) {
elems := args.Get(1).([]rpc.BatchElem)
// First transaction still unconfirmed
elems[0].Result = &evmtypes.Receipt{}
elems[1].Result = &evmtypes.Receipt{}
// Second transaction confirmed
*(elems[2].Result.(*evmtypes.Receipt)) = txmReceipt
}).Once()`
$DIR/core/chains/evm/txmgr/confirmer_test.go: `elems[0].Result = &evmtypes.Receipt{}`
$DIR/core/chains/evm/txmgr/confirmer_test.go: `elems[1].Result = &evmtypes.Receipt{}`
$DIR/core/chains/evm/txmgr/confirmer_test.go: `*(elems[2].Result.(*evmtypes.Receipt)) = txmReceipt`
$DIR/core/chains/evm/txmgr/confirmer_test.go: `etx3, err = txStore.FindTxWithAttempts(ctx, etx3.ID)`
$DIR/core/chains/evm/txmgr/confirmer_test.go: `etx2, err = txStore.FindTxWithAttempts(ctx, etx2.ID)`
$DIR/core/chains/evm/txmgr/confirmer_test.go: `etx1, err = txStore.FindTxWithAttempts(ctx, etx1.ID)`
$DIR/core/chains/evm/txmgr/confirmer_test.go: `etx0, err = txStore.FindTxWithAttempts(ctx, etx0.ID)`
$DIR/core/chains/evm/txmgr/confirmer_test.go: `t.Run("continues to leave eth_txes with state 'confirmed_missing_receipt' unchanged if at least one attempt is above EVM.FinalityDepth", func(t *testing.T) {
ethClient.On("SequenceAt", mock.Anything, mock.Anything, mock.Anything).Return(evmtypes.Nonce(10), nil)
ethClient.On("BatchCallContext", mock.Anything, mock.MatchedBy(func(b []rpc.BatchElem) bool {
return len(b) == 2 &&
cltest.BatchElemMatchesParams(b[0], attempt1_2.Hash, "eth_getTransactionReceipt") &&
cltest.BatchElemMatchesParams(b[1], attempt1_1.Hash, "eth_getTransactionReceipt")
})).Return(nil).Run(func(args mock.Arguments) {
elems := args.Get(1).([]rpc.BatchElem)
// Both attempts still unconfirmed
elems[0].Result = &evmtypes.Receipt{}
elems[1].Result = &evmtypes.Receipt{}
}).Once()
// PERFORM
// Block num of 80 puts the first attempt (21) below threshold but second attempt (41) still above
require.NoError(t, ec.CheckForReceipts(ctx, 80))
// Expected state is that the "top" two eth_txes are now confirmed, with the
// one below it still "confirmed_missing_receipt" and the bottom one remains confirmed
var err error
etx3, err = txStore.FindTxWithAttempts(ctx, etx3.ID)
require.NoError(t, err)
require.Equal(t, txmgrcommon.TxConfirmed, etx3.State)
etx2, err = txStore.FindTxWithAttempts(ctx, etx2.ID)
require.NoError(t, err)
require.Equal(t, txmgrcommon.TxConfirmed, etx2.State)
etx1, err = txStore.FindTxWithAttempts(ctx, etx1.ID)
require.NoError(t, err)
require.Equal(t, txmgrcommon.TxConfirmedMissingReceipt, etx1.State)
etx0, err = txStore.FindTxWithAttempts(ctx, etx0.ID)
require.NoError(t, err)
require.Equal(t, txmgrcommon.TxConfirmed, etx0.State)
})`
$DIR/core/chains/evm/txmgr/confirmer_test.go: `ethClient.On("SequenceAt", mock.Anything, mock.Anything, mock.Anything).Return(evmtypes.Nonce(10), nil)`
$DIR/core/chains/evm/txmgr/confirmer_test.go: `ethClient.On("BatchCallContext", mock.Anything, mock.MatchedBy(func(b []rpc.BatchElem) bool {
return len(b) == 2 &&
cltest.BatchElemMatchesParams(b[0], attempt1_2.Hash, "eth_getTransactionReceipt") &&
cltest.BatchElemMatchesParams(b[1], attempt1_1.Hash, "eth_getTransactionReceipt")
})).Return(nil).Run(func(args mock.Arguments) {
elems := args.Get(1).([]rpc.BatchElem)
// Both attempts still unconfirmed
elems[0].Result = &evmtypes.Receipt{}
elems[1].Result = &evmtypes.Receipt{}
}).Once()`
$DIR/core/chains/evm/txmgr/confirmer_test.go: `elems[0].Result = &evmtypes.Receipt{}`
$DIR/core/chains/evm/txmgr/confirmer_test.go: `elems[1].Result = &evmtypes.Receipt{}`
$DIR/core/chains/evm/txmgr/confirmer_test.go: `etx3, err = txStore.FindTxWithAttempts(ctx, etx3.ID)`
$DIR/core/chains/evm/txmgr/confirmer_test.go: `etx2, err = txStore.FindTxWithAttempts(ctx, etx2.ID)`
$DIR/core/chains/evm/txmgr/confirmer_test.go: `etx1, err = txStore.FindTxWithAttempts(ctx, etx1.ID)`
$DIR/core/chains/evm/txmgr/confirmer_test.go: `etx0, err = txStore.FindTxWithAttempts(ctx, etx0.ID)`
$DIR/core/chains/evm/txmgr/confirmer_test.go: `ethClient.On("SequenceAt", mock.Anything, mock.Anything, mock.Anything).Return(evmtypes.Nonce(10), nil)`
$DIR/core/chains/evm/txmgr/confirmer_test.go: `ethClient.On("BatchCallContext", mock.Anything, mock.MatchedBy(func(b []rpc.BatchElem) bool {
return len(b) == 2 &&
cltest.BatchElemMatchesParams(b[0], attempt1_2.Hash, "eth_getTransactionReceipt") &&
cltest.BatchElemMatchesParams(b[1], attempt1_1.Hash, "eth_getTransactionReceipt")
})).Return(nil).Run(func(args mock.Arguments) {
elems := args.Get(1).([]rpc.BatchElem)
// Both attempts still unconfirmed
elems[0].Result = &evmtypes.Receipt{}
elems[1].Result = &evmtypes.Receipt{}
}).Once()`
$DIR/core/chains/evm/txmgr/confirmer_test.go: `elems[0].Result = &evmtypes.Receipt{}`
$DIR/core/chains/evm/txmgr/confirmer_test.go: `elems[1].Result = &evmtypes.Receipt{}`
$DIR/core/chains/evm/txmgr/confirmer_test.go: `etx3, err = txStore.FindTxWithAttempts(ctx, etx3.ID)`
$DIR/core/chains/evm/txmgr/confirmer_test.go: `etx2, err = txStore.FindTxWithAttempts(ctx, etx2.ID)`
$DIR/core/chains/evm/txmgr/confirmer_test.go: `etx1, err = txStore.FindTxWithAttempts(ctx, etx1.ID)`
$DIR/core/chains/evm/txmgr/confirmer_test.go: `etx0, err = txStore.FindTxWithAttempts(ctx, etx0.ID)`
$DIR/core/chains/evm/txmgr/confirmer_test.go: `c.EVM[0].FinalityDepth = ptr[uint32](50)`
$DIR/core/chains/evm/txmgr/confirmer_test.go: `ethClient.On("IsL2").Return(false).Maybe()`
$DIR/core/chains/evm/txmgr/confirmer_test.go: `ethClient.On("BatchCallContextAll", mock.Anything, mock.MatchedBy(func(b []rpc.BatchElem) bool {
return len(b) == 4 &&
cltest.BatchElemMatchesParams(b[0], hexutil.Encode(attempt0_2.SignedRawTx), "eth_sendRawTransaction") &&
cltest.BatchElemMatchesParams(b[1], hexutil.Encode(attempt1_2.SignedRawTx), "eth_sendRawTransaction") &&
cltest.BatchElemMatchesParams(b[2], hexutil.Encode(attempt2_1.SignedRawTx), "eth_sendRawTransaction") &&
cltest.BatchElemMatchesParams(b[3], hexutil.Encode(attempt3_1.SignedRawTx), "eth_sendRawTransaction")
})).Return(nil).Run(func(args mock.Arguments) {
elems := args.Get(1).([]rpc.BatchElem)
// First transaction confirmed
elems[0].Error = errors.New("nonce too low")
elems[1].Error = errors.New("transaction underpriced")
elems[2].Error = nil
elems[3].Error = errors.New("transaction already finalized")
}).Once()`
$DIR/core/chains/evm/txmgr/confirmer_test.go: `elems[0].Error = errors.New("nonce too low")`
$DIR/core/chains/evm/txmgr/confirmer_test.go: `elems[1].Error = errors.New("transaction underpriced")`
$DIR/core/chains/evm/txmgr/confirmer_test.go: `elems[2].Error = nil`
$DIR/core/chains/evm/txmgr/confirmer_test.go: `elems[3].Error = errors.New("transaction already finalized")`
$DIR/core/chains/evm/txmgr/confirmer_test.go: `etx0, err = txStore.FindTxWithAttempts(ctx, etx0.ID)`
$DIR/core/chains/evm/txmgr/confirmer_test.go: `etx1, err = txStore.FindTxWithAttempts(ctx, etx1.ID)`
$DIR/core/chains/evm/txmgr/confirmer_test.go: `etx2, err = txStore.FindTxWithAttempts(ctx, etx2.ID)`
$DIR/core/chains/evm/txmgr/confirmer_test.go: `etx3, err = txStore.FindTxWithAttempts(ctx, etx3.ID)`
$DIR/core/chains/evm/txmgr/confirmer_test.go: `c.EVM[0].FinalityDepth = ptr[uint32](50)`
$DIR/core/chains/evm/txmgr/confirmer_test.go: `ethClient.On("IsL2").Return(false).Maybe()`
$DIR/core/chains/evm/txmgr/confirmer_test.go: `ethClient.On("BatchCallContextAll", mock.Anything, mock.MatchedBy(func(b []rpc.BatchElem) bool {
return len(b) == 3 &&
cltest.BatchElemMatchesParams(b[0], hexutil.Encode(attempt0_2.SignedRawTx), "eth_sendRawTransaction") &&
cltest.BatchElemMatchesParams(b[1], hexutil.Encode(attempt1_2.SignedRawTx), "eth_sendRawTransaction") &&
cltest.BatchElemMatchesParams(b[2], hexutil.Encode(attempt2_1.SignedRawTx), "eth_sendRawTransaction")
})).Return(errors.New("Timed out")).Once()`
$DIR/core/chains/evm/txmgr/confirmer_test.go: `etx0, err = txStore.FindTxWithAttempts(ctx, etx0.ID)`
$DIR/core/chains/evm/txmgr/confirmer_test.go: `etx1, err = txStore.FindTxWithAttempts(ctx, etx1.ID)`
$DIR/core/chains/evm/txmgr/confirmer_test.go: `etx2, err = txStore.FindTxWithAttempts(ctx, etx2.ID)`
$DIR/core/chains/evm/txmgr/confirmer_test.go: `c.EVM[0].FinalityDepth = ptr[uint32](50)`
$DIR/core/chains/evm/txmgr/confirmer_test.go: `c.EVM[0].RPCDefaultBatchSize = ptr[uint32](1)`
$DIR/core/chains/evm/txmgr/confirmer_test.go: `ethClient.On("IsL2").Return(false).Maybe()`
$DIR/core/chains/evm/txmgr/confirmer_test.go: `ethClient.On("BatchCallContextAll", mock.Anything, mock.MatchedBy(func(b []rpc.BatchElem) bool {
return len(b) == 1 &&
cltest.BatchElemMatchesParams(b[0], hexutil.Encode(attempt0_2.SignedRawTx), "eth_sendRawTransaction")
})).Return(nil).Run(func(args mock.Arguments) {
elems := args.Get(1).([]rpc.BatchElem)
// First transaction confirmed
elems[0].Error = errors.New("nonce too low")
}).Once()`
$DIR/core/chains/evm/txmgr/confirmer_test.go: `elems[0].Error = errors.New("nonce too low")`
$DIR/core/chains/evm/txmgr/confirmer_test.go: `ethClient.On("BatchCallContextAll", mock.Anything, mock.MatchedBy(func(b []rpc.BatchElem) bool {
return len(b) == 1 &&
cltest.BatchElemMatchesParams(b[0], hexutil.Encode(attempt1_2.SignedRawTx), "eth_sendRawTransaction")
})).Return(errors.New("Timed out")).Once()`
$DIR/core/chains/evm/txmgr/confirmer_test.go: `etx0, err = txStore.FindTxWithAttempts(ctx, etx0.ID)`
$DIR/core/chains/evm/txmgr/confirmer_test.go: `etx1, err = txStore.FindTxWithAttempts(ctx, etx1.ID)`
$DIR/core/chains/evm/txmgr/confirmer_test.go: `etx2, err = txStore.FindTxWithAttempts(ctx, etx2.ID)`
$DIR/core/chains/evm/txmgr/confirmer_test.go: `mustInsertConfirmedEthTx(t, txStore, nonce, fromAddress)`
$DIR/core/chains/evm/txmgr/confirmer_test.go: `nonce++`
$DIR/core/chains/evm/txmgr/confirmer_test.go: `t.Run("returns nothing when there are no transactions", func(t *testing.T) {
etxs, err := ec.FindTxsRequiringRebroadcast(tests.Context(t), lggr, evmFromAddress, currentHead, gasBumpThreshold, 10, 0, &cltest.FixtureChainID)
require.NoError(t, err)
assert.Len(t, etxs, 0)
})`
$DIR/core/chains/evm/txmgr/confirmer_test.go: `mustInsertInProgressEthTx(t, txStore, nonce, fromAddress)`
$DIR/core/chains/evm/txmgr/confirmer_test.go: `nonce++`
$DIR/core/chains/evm/txmgr/confirmer_test.go: `t.Run("returns nothing when the transaction is in_progress", func(t *testing.T) {
etxs, err := ec.FindTxsRequiringRebroadcast(tests.Context(t), lggr, evmFromAddress, currentHead, gasBumpThreshold, 10, 0, &cltest.FixtureChainID)
require.NoError(t, err)
assert.Len(t, etxs, 0)
})`
$DIR/core/chains/evm/txmgr/confirmer_test.go: `cltest.MustInsertUnconfirmedEthTxWithBroadcastLegacyAttempt(t, txStore, nonce, fromAddress)`
$DIR/core/chains/evm/txmgr/confirmer_test.go: `nonce++`
$DIR/core/chains/evm/txmgr/confirmer_test.go: `t.Run("ignores unconfirmed transactions with nil BroadcastBeforeBlockNum", func(t *testing.T) {
etxs, err := ec.FindTxsRequiringRebroadcast(tests.Context(t), lggr, evmFromAddress, currentHead, gasBumpThreshold, 10, 0, &cltest.FixtureChainID)
require.NoError(t, err)
assert.Len(t, etxs, 0)
})`
$DIR/core/chains/evm/txmgr/confirmer_test.go: `nonce++`
$DIR/core/chains/evm/txmgr/confirmer_test.go: `dbAttempt.FromTxAttempt(&attempt1_1)`
$DIR/core/chains/evm/txmgr/confirmer_test.go: `attempt1_2.BroadcastBeforeBlockNum = &onTheMoney`
$DIR/core/chains/evm/txmgr/confirmer_test.go: `attempt1_2.TxFee = gas.EvmFee{Legacy: assets.NewWeiI(30000)}`
$DIR/core/chains/evm/txmgr/confirmer_test.go: `t.Run("returns nothing when the transaction is unconfirmed with an attempt that is recent", func(t *testing.T) {
etxs, err := ec.FindTxsRequiringRebroadcast(tests.Context(t), lggr, evmFromAddress, currentHead, gasBumpThreshold, 10, 0, &cltest.FixtureChainID)
require.NoError(t, err)
assert.Len(t, etxs, 0)
})`
$DIR/core/chains/evm/txmgr/confirmer_test.go: `nonce++`
$DIR/core/chains/evm/txmgr/confirmer_test.go: `dbAttempt = txmgr.DbEthTxAttempt{}`
$DIR/core/chains/evm/txmgr/confirmer_test.go: `dbAttempt.FromTxAttempt(&attempt2_1)`
$DIR/core/chains/evm/txmgr/confirmer_test.go: `t.Run("returns nothing when the transaction has attempts that are too new", func(t *testing.T) {
etxs, err := ec.FindTxsRequiringRebroadcast(tests.Context(t), lggr, evmFromAddress, currentHead, gasBumpThreshold, 10, 0, &cltest.FixtureChainID)
require.NoError(t, err)
assert.Len(t, etxs, 0)
})`
$DIR/core/chains/evm/txmgr/confirmer_test.go: `etxWithoutAttempts.Sequence = &n`
$DIR/core/chains/evm/txmgr/confirmer_test.go: `etxWithoutAttempts.BroadcastAt = &now`
$DIR/core/chains/evm/txmgr/confirmer_test.go: `etxWithoutAttempts.InitialBroadcastAt = &now`
$DIR/core/chains/evm/txmgr/confirmer_test.go: `etxWithoutAttempts.State = txmgrcommon.TxUnconfirmed`
$DIR/core/chains/evm/txmgr/confirmer_test.go: `nonce++`
$DIR/core/chains/evm/txmgr/confirmer_test.go: `t.Run("does nothing if the transaction is from a different address than the one given", func(t *testing.T) {
etxs, err := ec.FindTxsRequiringRebroadcast(tests.Context(t), lggr, evmOtherAddress, currentHead, gasBumpThreshold, 10, 0, &cltest.FixtureChainID)
require.NoError(t, err)
assert.Len(t, etxs, 0)
})`
$DIR/core/chains/evm/txmgr/confirmer_test.go: `t.Run("returns the transaction if it is unconfirmed and has no attempts (note that this is an invariant violation, but we handle it anyway)", func(t *testing.T) {
etxs, err := ec.FindTxsRequiringRebroadcast(tests.Context(t), lggr, evmFromAddress, currentHead, gasBumpThreshold, 10, 0, &cltest.FixtureChainID)
require.NoError(t, err)
require.Len(t, etxs, 1)
assert.Equal(t, etxWithoutAttempts.ID, etxs[0].ID)
})`
$DIR/core/chains/evm/txmgr/confirmer_test.go: `t.Run("returns nothing for different chain id", func(t *testing.T) {
etxs, err := ec.FindTxsRequiringRebroadcast(tests.Context(t), lggr, evmFromAddress, currentHead, gasBumpThreshold, 10, 0, big.NewInt(42))
require.NoError(t, err)
require.Len(t, etxs, 0)
})`
$DIR/core/chains/evm/txmgr/confirmer_test.go: `nonce++`
$DIR/core/chains/evm/txmgr/confirmer_test.go: `dbAttempt = txmgr.DbEthTxAttempt{}`
$DIR/core/chains/evm/txmgr/confirmer_test.go: `dbAttempt.FromTxAttempt(&attempt3_1)`
$DIR/core/chains/evm/txmgr/confirmer_test.go: `dbAttempt = txmgr.DbEthTxAttempt{}`
$DIR/core/chains/evm/txmgr/confirmer_test.go: `dbAttempt.FromTxAttempt(&attemptOther1)`
$DIR/core/chains/evm/txmgr/confirmer_test.go: `t.Run("returns the transaction if it is unconfirmed with an attempt that is older than gasBumpThreshold blocks", func(t *testing.T) {
etxs, err := ec.FindTxsRequiringRebroadcast(tests.Context(t), lggr, evmFromAddress, currentHead, gasBumpThreshold, 10, 0, &cltest.FixtureChainID)
require.NoError(t, err)
require.Len(t, etxs, 2)
assert.Equal(t, etxWithoutAttempts.ID, etxs[0].ID)
assert.Equal(t, etx3.ID, etxs[1].ID)
})`
$DIR/core/chains/evm/txmgr/confirmer_test.go: `t.Run("returns nothing if threshold is zero", func(t *testing.T) {
etxs, err := ec.FindTxsRequiringRebroadcast(tests.Context(t), lggr, evmFromAddress, currentHead, 0, 10, 0, &cltest.FixtureChainID)
require.NoError(t, err)
require.Len(t, etxs, 0)
})`
$DIR/core/chains/evm/txmgr/confirmer_test.go: `t.Run("does not return more transactions for gas bumping than gasBumpThreshold", func(t *testing.T) {
// Unconfirmed txes in DB are:
// (unnamed) (nonce 2)
// etx1 (nonce 3)
// etx2 (nonce 4)
// etxWithoutAttempts (nonce 5)
// etx3 (nonce 6) - ready for bump
// etx4 (nonce 7) - ready for bump
etxs, err := ec.FindTxsRequiringRebroadcast(tests.Context(t), lggr, evmFromAddress, currentHead, gasBumpThreshold, 4, 0, &cltest.FixtureChainID)
require.NoError(t, err)
require.Len(t, etxs, 1) // returns etxWithoutAttempts only - eligible for gas bumping because it technically doesn't have any attempts within gasBumpThreshold blocks
assert.Equal(t, etxWithoutAttempts.ID, etxs[0].ID)
etxs, err = ec.FindTxsRequiringRebroadcast(tests.Context(t), lggr, evmFromAddress, currentHead, gasBumpThreshold, 5, 0, &cltest.FixtureChainID)
require.NoError(t, err)
require.Len(t, etxs, 2) // includes etxWithoutAttempts, etx3 and etx4
assert.Equal(t, etxWithoutAttempts.ID, etxs[0].ID)
assert.Equal(t, etx3.ID, etxs[1].ID)
// Zero limit disables it
etxs, err = ec.FindTxsRequiringRebroadcast(tests.Context(t), lggr, evmFromAddress, currentHead, gasBumpThreshold, 0, 0, &cltest.FixtureChainID)
require.NoError(t, err)
require.Len(t, etxs, 2) // includes etxWithoutAttempts, etx3 and etx4
})`
$DIR/core/chains/evm/txmgr/confirmer_test.go: `etxs, err = ec.FindTxsRequiringRebroadcast(tests.Context(t), lggr, evmFromAddress, currentHead, gasBumpThreshold, 5, 0, &cltest.FixtureChainID)`
$DIR/core/chains/evm/txmgr/confirmer_test.go: `etxs, err = ec.FindTxsRequiringRebroadcast(tests.Context(t), lggr, evmFromAddress, currentHead, gasBumpThreshold, 0, 0, &cltest.FixtureChainID)`
$DIR/core/chains/evm/txmgr/confirmer_test.go: `nonce++`
$DIR/core/chains/evm/txmgr/confirmer_test.go: `dbAttempt = txmgr.DbEthTxAttempt{}`
$DIR/core/chains/evm/txmgr/confirmer_test.go: `dbAttempt.FromTxAttempt(&attempt4_1)`
$DIR/core/chains/evm/txmgr/confirmer_test.go: `t.Run("ignores pending transactions for another key", func(t *testing.T) {
// Re-use etx3 nonce for another key, it should not affect the results for this key
etxOther := cltest.MustInsertUnconfirmedEthTxWithBroadcastLegacyAttempt(t, txStore, (*etx3.Sequence).Int64(), otherAddress)
aOther := etxOther.TxAttempts[0]
dbAttempt = txmgr.DbEthTxAttempt{}
dbAttempt.FromTxAttempt(&aOther)
require.NoError(t, db.Get(&dbAttempt, `UPDATE evm.tx_attempts SET broadcast_before_block_num=$1 WHERE id=$2 RETURNING *`, oldEnough, aOther.ID))
etxs, err := ec.FindTxsRequiringRebroadcast(tests.Context(t), lggr, evmFromAddress, currentHead, gasBumpThreshold, 6, 0, &cltest.FixtureChainID)
require.NoError(t, err)
require.Len(t, etxs, 3) // includes etxWithoutAttempts, etx3 and etx4
assert.Equal(t, etxWithoutAttempts.ID, etxs[0].ID)
assert.Equal(t, etx3.ID, etxs[1].ID)
assert.Equal(t, etx4.ID, etxs[2].ID)
})`
$DIR/core/chains/evm/txmgr/confirmer_test.go: `dbAttempt = txmgr.DbEthTxAttempt{}`
$DIR/core/chains/evm/txmgr/confirmer_test.go: `dbAttempt.FromTxAttempt(&aOther)`
$DIR/core/chains/evm/txmgr/confirmer_test.go: `attempt3_2.BroadcastBeforeBlockNum = &oldEnough`
$DIR/core/chains/evm/txmgr/confirmer_test.go: `attempt3_2.TxFee = gas.EvmFee{Legacy: assets.NewWeiI(30000)}`
$DIR/core/chains/evm/txmgr/confirmer_test.go: `t.Run("returns the transaction if it is unconfirmed with two attempts that are older than gasBumpThreshold blocks", func(t *testing.T) {
etxs, err := ec.FindTxsRequiringRebroadcast(tests.Context(t), lggr, evmFromAddress, currentHead, gasBumpThreshold, 10, 0, &cltest.FixtureChainID)
require.NoError(t, err)
require.Len(t, etxs, 3)
assert.Equal(t, etxWithoutAttempts.ID, etxs[0].ID)
assert.Equal(t, etx3.ID, etxs[1].ID)
assert.Equal(t, etx4.ID, etxs[2].ID)
})`
$DIR/core/chains/evm/txmgr/confirmer_test.go: `attempt3_3.BroadcastBeforeBlockNum = &tooNew`
$DIR/core/chains/evm/txmgr/confirmer_test.go: `attempt3_3.TxFee = gas.EvmFee{Legacy: assets.NewWeiI(40000)}`
$DIR/core/chains/evm/txmgr/confirmer_test.go: `t.Run("does not return the transaction if it has some older but one newer attempt", func(t *testing.T) {
etxs, err := ec.FindTxsRequiringRebroadcast(tests.Context(t), lggr, evmFromAddress, currentHead, gasBumpThreshold, 10, 0, &cltest.FixtureChainID)
require.NoError(t, err)
require.Len(t, etxs, 2)
assert.Equal(t, etxWithoutAttempts.ID, etxs[0].ID)
assert.Equal(t, *etxWithoutAttempts.Sequence, *(etxs[0].Sequence))
require.Equal(t, evmtypes.Nonce(5), *etxWithoutAttempts.Sequence)
assert.Equal(t, etx4.ID, etxs[1].ID)
assert.Equal(t, *etx4.Sequence, *(etxs[1].Sequence))
require.Equal(t, evmtypes.Nonce(7), *etx4.Sequence)
})`
$DIR/core/chains/evm/txmgr/confirmer_test.go: `attempt0_1.State = txmgrtypes.TxAttemptInsufficientFunds`
$DIR/core/chains/evm/txmgr/confirmer_test.go: `attempt4_2.State = txmgrtypes.TxAttemptInsufficientFunds`
$DIR/core/chains/evm/txmgr/confirmer_test.go: `attempt4_2.TxFee = gas.EvmFee{Legacy: assets.NewWeiI(40000)}`
$DIR/core/chains/evm/txmgr/confirmer_test.go: `nonce++`
$DIR/core/chains/evm/txmgr/confirmer_test.go: `attempt6_2.BroadcastBeforeBlockNum = &tooNew`
$DIR/core/chains/evm/txmgr/confirmer_test.go: `attempt6_2.TxFee = gas.EvmFee{Legacy: assets.NewWeiI(30001)}`
$DIR/core/chains/evm/txmgr/confirmer_test.go: `t.Run("returns unique attempts requiring resubmission due to insufficient eth, ordered by nonce asc", func(t *testing.T) {
etxs, err := ec.FindTxsRequiringRebroadcast(tests.Context(t), lggr, evmFromAddress, currentHead, gasBumpThreshold, 10, 0, &cltest.FixtureChainID)
require.NoError(t, err)
require.Len(t, etxs, 4)
assert.Equal(t, etxWithoutAttempts.ID, etxs[0].ID)
assert.Equal(t, *etxWithoutAttempts.Sequence, *(etxs[0].Sequence))
assert.Equal(t, etx4.ID, etxs[1].ID)
assert.Equal(t, *etx4.Sequence, *(etxs[1].Sequence))
assert.Equal(t, etx5.ID, etxs[2].ID)
assert.Equal(t, *etx5.Sequence, *(etxs[2].Sequence))
assert.Equal(t, etx6.ID, etxs[3].ID)
assert.Equal(t, *etx6.Sequence, *(etxs[3].Sequence))
})`
$DIR/core/chains/evm/txmgr/confirmer_test.go: `t.Run("should retry previous attempt if connectivity check failed for legacy transactions", func(t *testing.T) {
cfg := configtest.NewGeneralConfig(t, func(c *chainlink.Config, s *chainlink.Secrets) {
c.EVM[0].GasEstimator.EIP1559DynamicFees = ptr(false)
c.EVM[0].GasEstimator.BlockHistory.BlockHistorySize = ptr[uint16](2)
c.EVM[0].GasEstimator.BlockHistory.CheckInclusionBlocks = ptr[uint16](4)
})
ccfg := evmtest.NewChainScopedConfig(t, cfg)
ctx := tests.Context(t)
txStore := cltest.NewTestTxStore(t, db)
ethKeyStore := cltest.NewKeyStore(t, db).Eth()
_, fromAddress := cltest.MustInsertRandomKeyReturningState(t, ethKeyStore)
kst := ksmocks.NewEth(t)
estimator := gasmocks.NewEvmEstimator(t)
newEst := func(logger.Logger) gas.EvmEstimator { return estimator }
estimator.On("BumpLegacyGas", mock.Anything, mock.Anything, mock.Anything, mock.Anything, mock.Anything).Return(nil, uint64(0), pkgerrors.Wrapf(commonfee.ErrConnectivity, "transaction..."))
ge := ccfg.EVM().GasEstimator()
feeEstimator := gas.NewEvmFeeEstimator(lggr, newEst, ge.EIP1559DynamicFees(), ge)
txBuilder := txmgr.NewEvmTxAttemptBuilder(*ethClient.ConfiguredChainID(), ge, kst, feeEstimator)
addresses := []gethCommon.Address{fromAddress}
kst.On("EnabledAddressesForChain", mock.Anything, &cltest.FixtureChainID).Return(addresses, nil).Maybe()
stuckTxDetector := txmgr.NewStuckTxDetector(lggr, testutils.FixtureChainID, "", assets.NewWei(assets.NewEth(100).ToInt()), ccfg.EVM().Transactions().AutoPurge(), feeEstimator, txStore, ethClient)
// Create confirmer with necessary state
ec := txmgr.NewEvmConfirmer(txStore, txmgr.NewEvmTxmClient(ethClient, nil), ccfg.EVM(), txmgr.NewEvmTxmFeeConfig(ccfg.EVM().GasEstimator()), ccfg.EVM().Transactions(), cfg.Database(), kst, txBuilder, lggr, stuckTxDetector)
servicetest.Run(t, ec)
currentHead := int64(30)
oldEnough := int64(15)
nonce := int64(0)
originalBroadcastAt := time.Unix(1616509100, 0)
etx := cltest.MustInsertUnconfirmedEthTxWithBroadcastLegacyAttempt(t, txStore, nonce, fromAddress, originalBroadcastAt)
attempt1 := etx.TxAttempts[0]
var dbAttempt txmgr.DbEthTxAttempt
dbAttempt.FromTxAttempt(&attempt1)
require.NoError(t, db.Get(&dbAttempt, `UPDATE evm.tx_attempts SET broadcast_before_block_num=$1 WHERE id=$2 RETURNING *`, oldEnough, attempt1.ID))
// Send transaction and assume success.
ethClient.On("SendTransactionReturnCode", mock.Anything, mock.Anything, fromAddress).Return(commonclient.Successful, nil).Once()
err := ec.RebroadcastWhereNecessary(tests.Context(t), currentHead)
require.NoError(t, err)
etx, err = txStore.FindTxWithAttempts(ctx, etx.ID)
require.NoError(t, err)
require.Len(t, etx.TxAttempts, 1)
})`
$DIR/core/chains/evm/txmgr/confirmer_test.go: `c.EVM[0].GasEstimator.EIP1559DynamicFees = ptr(false)`
$DIR/core/chains/evm/txmgr/confirmer_test.go: `c.EVM[0].GasEstimator.BlockHistory.BlockHistorySize = ptr[uint16](2)`
$DIR/core/chains/evm/txmgr/confirmer_test.go: `c.EVM[0].GasEstimator.BlockHistory.CheckInclusionBlocks = ptr[uint16](4)`
$DIR/core/chains/evm/txmgr/confirmer_test.go: `estimator.On("BumpLegacyGas", mock.Anything, mock.Anything, mock.Anything, mock.Anything, mock.Anything).Return(nil, uint64(0), pkgerrors.Wrapf(commonfee.ErrConnectivity, "transaction..."))`
$DIR/core/chains/evm/txmgr/confirmer_test.go: `kst.On("EnabledAddressesForChain", mock.Anything, &cltest.FixtureChainID).Return(addresses, nil).Maybe()`
$DIR/core/chains/evm/txmgr/confirmer_test.go: `servicetest.Run(t, ec)`
$DIR/core/chains/evm/txmgr/confirmer_test.go: `dbAttempt.FromTxAttempt(&attempt1)`
$DIR/core/chains/evm/txmgr/confirmer_test.go: `ethClient.On("SendTransactionReturnCode", mock.Anything, mock.Anything, fromAddress).Return(commonclient.Successful, nil).Once()`
$DIR/core/chains/evm/txmgr/confirmer_test.go: `etx, err = txStore.FindTxWithAttempts(ctx, etx.ID)`
$DIR/core/chains/evm/txmgr/confirmer_test.go: `c.EVM[0].GasEstimator.EIP1559DynamicFees = ptr(true)`
$DIR/core/chains/evm/txmgr/confirmer_test.go: `c.EVM[0].GasEstimator.BlockHistory.BlockHistorySize = ptr[uint16](2)`
$DIR/core/chains/evm/txmgr/confirmer_test.go: `c.EVM[0].GasEstimator.BlockHistory.CheckInclusionBlocks = ptr[uint16](4)`
$DIR/core/chains/evm/txmgr/confirmer_test.go: `estimator.On("BumpDynamicFee", mock.Anything, mock.Anything, mock.Anything, mock.Anything).Return(gas.DynamicFee{}, pkgerrors.Wrapf(commonfee.ErrConnectivity, "transaction..."))`
$DIR/core/chains/evm/txmgr/confirmer_test.go: `kst.On("EnabledAddressesForChain", mock.Anything, &cltest.FixtureChainID).Return(addresses, nil).Maybe()`
$DIR/core/chains/evm/txmgr/confirmer_test.go: `servicetest.Run(t, ec)`
$DIR/core/chains/evm/txmgr/confirmer_test.go: `dbAttempt.FromTxAttempt(&attempt1)`
$DIR/core/chains/evm/txmgr/confirmer_test.go: `ethClient.On("SendTransactionReturnCode", mock.Anything, mock.Anything, fromAddress).Return(commonclient.Successful, nil).Once()`
$DIR/core/chains/evm/txmgr/confirmer_test.go: `etx, err = txStore.FindTxWithAttempts(ctx, etx.ID)`
$DIR/core/chains/evm/txmgr/confirmer_test.go: `c.EVM[0].GasEstimator.PriceMax = assets.GWei(500)`
$DIR/core/chains/evm/txmgr/confirmer_test.go: `_, _ = cltest.MustInsertRandomKeyReturningState(t, ethKeyStore)`
$DIR/core/chains/evm/txmgr/confirmer_test.go: `kst.On("EnabledAddressesForChain", mock.Anything, &cltest.FixtureChainID).Return(addresses, nil).Maybe()`
$DIR/core/chains/evm/txmgr/confirmer_test.go: `kst.On("SignTx", mock.Anything,
fromAddress,
mock.MatchedBy(func(tx *types.Transaction) bool {
if tx.Nonce() != uint64(*etx.Sequence) {
return false
}
ethTx = *tx
return true
}),
mock.MatchedBy(func(chainID *big.Int) bool {
return chainID.Cmp(evmcfg.EVM().ChainID()) == 0
})).Return(ðTx, nil).Once()`
$DIR/core/chains/evm/txmgr/confirmer_test.go: `ethTx = *tx`
$DIR/core/chains/evm/txmgr/confirmer_test.go: `ethClient.On("SendTransactionReturnCode", mock.Anything, mock.MatchedBy(func(tx *types.Transaction) bool {
return tx.Nonce() == uint64(*etx.Sequence) && tx.GasPrice().Int64() == int64(20000000000)
}), fromAddress).Return(commonclient.ExceedsMaxFee, errors.New("tx fee (1.10 ether) exceeds the configured cap (1.00 ether)")).Once()`
$DIR/core/chains/evm/txmgr/confirmer_test.go: `etx, err = txStore.FindTxWithAttempts(ctx, etx.ID)`
$DIR/core/chains/evm/txmgr/confirmer_test.go: `c.EVM[0].GasEstimator.PriceMax = assets.GWei(500)`
$DIR/core/chains/evm/txmgr/confirmer_test.go: `_, _ = cltest.MustInsertRandomKeyReturningState(t, ethKeyStore)`
$DIR/core/chains/evm/txmgr/confirmer_test.go: `kst.On("EnabledAddressesForChain", mock.Anything, &cltest.FixtureChainID).Return(addresses, nil).Maybe()`
$DIR/core/chains/evm/txmgr/confirmer_test.go: `t.Run("does nothing if no transactions require bumping", func(t *testing.T) {
require.NoError(t, ec.RebroadcastWhereNecessary(tests.Context(t), currentHead))
})`
$DIR/core/chains/evm/txmgr/confirmer_test.go: `nonce++`
$DIR/core/chains/evm/txmgr/confirmer_test.go: `t.Run("re-sends previous transaction on keystore error", func(t *testing.T) {
// simulate bumped transaction that is somehow impossible to sign
kst.On("SignTx", mock.Anything, fromAddress,
mock.MatchedBy(func(tx *types.Transaction) bool {
return tx.Nonce() == uint64(*etx.Sequence)
}),
mock.Anything).Return(nil, errors.New("signing error")).Once()
// Do the thing
err := ec.RebroadcastWhereNecessary(tests.Context(t), currentHead)
require.Error(t, err)
require.Contains(t, err.Error(), "signing error")
etx, err = txStore.FindTxWithAttempts(ctx, etx.ID)
require.NoError(t, err)
require.Equal(t, txmgrcommon.TxUnconfirmed, etx.State)
require.Len(t, etx.TxAttempts, 1)
})`
$DIR/core/chains/evm/txmgr/confirmer_test.go: `kst.On("SignTx", mock.Anything, fromAddress,
mock.MatchedBy(func(tx *types.Transaction) bool {
return tx.Nonce() == uint64(*etx.Sequence)
}),
mock.Anything).Return(nil, errors.New("signing error")).Once()`
$DIR/core/chains/evm/txmgr/confirmer_test.go: `etx, err = txStore.FindTxWithAttempts(ctx, etx.ID)`
$DIR/core/chains/evm/txmgr/confirmer_test.go: `t.Run("does nothing and continues on fatal error", func(t *testing.T) {
ethTx := *types.NewTx(&types.LegacyTx{})
kst.On("SignTx", mock.Anything,
fromAddress,
mock.MatchedBy(func(tx *types.Transaction) bool {
if tx.Nonce() != uint64(*etx.Sequence) {
return false
}
ethTx = *tx
return true
}),
mock.MatchedBy(func(chainID *big.Int) bool {
return chainID.Cmp(evmcfg.EVM().ChainID()) == 0
})).Return(ðTx, nil).Once()
ethClient.On("SendTransactionReturnCode", mock.Anything, mock.MatchedBy(func(tx *types.Transaction) bool {
return tx.Nonce() == uint64(*etx.Sequence)
}), fromAddress).Return(commonclient.Fatal, errors.New("exceeds block gas limit")).Once()
// Do the thing
require.NoError(t, ec.RebroadcastWhereNecessary(tests.Context(t), currentHead))
var err error
etx, err = txStore.FindTxWithAttempts(ctx, etx.ID)
require.NoError(t, err)
require.Len(t, etx.TxAttempts, 1)
})`
$DIR/core/chains/evm/txmgr/confirmer_test.go: `kst.On("SignTx", mock.Anything,
fromAddress,
mock.MatchedBy(func(tx *types.Transaction) bool {
if tx.Nonce() != uint64(*etx.Sequence) {
return false
}
ethTx = *tx
return true
}),
mock.MatchedBy(func(chainID *big.Int) bool {
return chainID.Cmp(evmcfg.EVM().ChainID()) == 0
})).Return(ðTx, nil).Once()`
$DIR/core/chains/evm/txmgr/confirmer_test.go: `ethTx = *tx`
$DIR/core/chains/evm/txmgr/confirmer_test.go: `ethClient.On("SendTransactionReturnCode", mock.Anything, mock.MatchedBy(func(tx *types.Transaction) bool {
return tx.Nonce() == uint64(*etx.Sequence)
}), fromAddress).Return(commonclient.Fatal, errors.New("exceeds block gas limit")).Once()`
$DIR/core/chains/evm/txmgr/confirmer_test.go: `etx, err = txStore.FindTxWithAttempts(ctx, etx.ID)`
$DIR/core/chains/evm/txmgr/confirmer_test.go: `ethClient = testutils.NewEthClientMockWithDefaultChain(t)`
$DIR/core/chains/evm/txmgr/confirmer_test.go: `ec.XXXTestSetClient(txmgr.NewEvmTxmClient(ethClient, nil))`
$DIR/core/chains/evm/txmgr/confirmer_test.go: `t.Run("creates new attempt with higher gas price if transaction has an attempt older than threshold", func(t *testing.T) {
expectedBumpedGasPrice := big.NewInt(20000000000)
require.Greater(t, expectedBumpedGasPrice.Int64(), attempt1_1.TxFee.Legacy.ToInt().Int64())
ethTx := *types.NewTx(&types.LegacyTx{})
kst.On("SignTx", mock.Anything,
fromAddress,
mock.MatchedBy(func(tx *types.Transaction) bool {
if expectedBumpedGasPrice.Cmp(tx.GasPrice()) != 0 {
return false
}
ethTx = *tx
return true
}),
mock.MatchedBy(func(chainID *big.Int) bool {
return chainID.Cmp(evmcfg.EVM().ChainID()) == 0
})).Return(ðTx, nil).Once()
ethClient.On("SendTransactionReturnCode", mock.Anything, mock.MatchedBy(func(tx *types.Transaction) bool {
return expectedBumpedGasPrice.Cmp(tx.GasPrice()) == 0
}), fromAddress).Return(commonclient.Successful, nil).Once()
// Do the thing
require.NoError(t, ec.RebroadcastWhereNecessary(tests.Context(t), currentHead))
var err error
etx, err = txStore.FindTxWithAttempts(ctx, etx.ID)
require.NoError(t, err)
require.Len(t, etx.TxAttempts, 2)
require.Equal(t, attempt1_1.ID, etx.TxAttempts[1].ID)
// Got the new attempt
attempt1_2 = etx.TxAttempts[0]
assert.Equal(t, expectedBumpedGasPrice.Int64(), attempt1_2.TxFee.Legacy.ToInt().Int64())
assert.Equal(t, txmgrtypes.TxAttemptBroadcast, attempt1_2.State)
})`
$DIR/core/chains/evm/txmgr/confirmer_test.go: `kst.On("SignTx", mock.Anything,
fromAddress,
mock.MatchedBy(func(tx *types.Transaction) bool {
if expectedBumpedGasPrice.Cmp(tx.GasPrice()) != 0 {
return false
}
ethTx = *tx
return true
}),
mock.MatchedBy(func(chainID *big.Int) bool {
return chainID.Cmp(evmcfg.EVM().ChainID()) == 0
})).Return(ðTx, nil).Once()`
$DIR/core/chains/evm/txmgr/confirmer_test.go: `ethTx = *tx`
$DIR/core/chains/evm/txmgr/confirmer_test.go: `ethClient.On("SendTransactionReturnCode", mock.Anything, mock.MatchedBy(func(tx *types.Transaction) bool {
return expectedBumpedGasPrice.Cmp(tx.GasPrice()) == 0
}), fromAddress).Return(commonclient.Successful, nil).Once()`
$DIR/core/chains/evm/txmgr/confirmer_test.go: `etx, err = txStore.FindTxWithAttempts(ctx, etx.ID)`
$DIR/core/chains/evm/txmgr/confirmer_test.go: `attempt1_2 = etx.TxAttempts[0]`
$DIR/core/chains/evm/txmgr/confirmer_test.go: `t.Run("does nothing if there is an attempt without BroadcastBeforeBlockNum set", func(t *testing.T) {
// Do the thing
require.NoError(t, ec.RebroadcastWhereNecessary(tests.Context(t), currentHead))
var err error
etx, err = txStore.FindTxWithAttempts(ctx, etx.ID)
require.NoError(t, err)
require.Len(t, etx.TxAttempts, 2)
})`
$DIR/core/chains/evm/txmgr/confirmer_test.go: `etx, err = txStore.FindTxWithAttempts(ctx, etx.ID)`
$DIR/core/chains/evm/txmgr/confirmer_test.go: `t.Run("creates new attempt with higher gas price if transaction is already in mempool (e.g. due to previous crash before we could save the new attempt)", func(t *testing.T) {
expectedBumpedGasPrice := big.NewInt(25000000000)
require.Greater(t, expectedBumpedGasPrice.Int64(), attempt1_2.TxFee.Legacy.ToInt().Int64())
ethTx := *types.NewTx(&types.LegacyTx{})
kst.On("SignTx", mock.Anything,
fromAddress,
mock.MatchedBy(func(tx *types.Transaction) bool {
if evmtypes.Nonce(tx.Nonce()) != *etx.Sequence || expectedBumpedGasPrice.Cmp(tx.GasPrice()) != 0 {
return false
}
ethTx = *tx
return true
}),
mock.Anything).Return(ðTx, nil).Once()
ethClient.On("SendTransactionReturnCode", mock.Anything, mock.MatchedBy(func(tx *types.Transaction) bool {
return expectedBumpedGasPrice.Cmp(tx.GasPrice()) == 0
}), fromAddress).Return(commonclient.Successful, fmt.Errorf("known transaction: %s", ethTx.Hash().Hex())).Once()
// Do the thing
require.NoError(t, ec.RebroadcastWhereNecessary(tests.Context(t), currentHead))
var err error
etx, err = txStore.FindTxWithAttempts(ctx, etx.ID)
require.NoError(t, err)
require.Len(t, etx.TxAttempts, 3)
require.Equal(t, attempt1_1.ID, etx.TxAttempts[2].ID)
require.Equal(t, attempt1_2.ID, etx.TxAttempts[1].ID)
// Got the new attempt
attempt1_3 = etx.TxAttempts[0]
assert.Equal(t, expectedBumpedGasPrice.Int64(), attempt1_3.TxFee.Legacy.ToInt().Int64())
assert.Equal(t, txmgrtypes.TxAttemptBroadcast, attempt1_3.State)
})`
$DIR/core/chains/evm/txmgr/confirmer_test.go: `kst.On("SignTx", mock.Anything,
fromAddress,
mock.MatchedBy(func(tx *types.Transaction) bool {
if evmtypes.Nonce(tx.Nonce()) != *etx.Sequence || expectedBumpedGasPrice.Cmp(tx.GasPrice()) != 0 {
return false
}
ethTx = *tx
return true
}),
mock.Anything).Return(ðTx, nil).Once()`
$DIR/core/chains/evm/txmgr/confirmer_test.go: `ethTx = *tx`
$DIR/core/chains/evm/txmgr/confirmer_test.go: `ethClient.On("SendTransactionReturnCode", mock.Anything, mock.MatchedBy(func(tx *types.Transaction) bool {
return expectedBumpedGasPrice.Cmp(tx.GasPrice()) == 0
}), fromAddress).Return(commonclient.Successful, fmt.Errorf("known transaction: %s", ethTx.Hash().Hex())).Once()`
$DIR/core/chains/evm/txmgr/confirmer_test.go: `etx, err = txStore.FindTxWithAttempts(ctx, etx.ID)`
$DIR/core/chains/evm/txmgr/confirmer_test.go: `attempt1_3 = etx.TxAttempts[0]`
$DIR/core/chains/evm/txmgr/confirmer_test.go: `t.Run("saves new attempt even for transaction that has already been confirmed (nonce already used)", func(t *testing.T) {
expectedBumpedGasPrice := big.NewInt(30000000000)
require.Greater(t, expectedBumpedGasPrice.Int64(), attempt1_2.TxFee.Legacy.ToInt().Int64())
ethTx := *types.NewTx(&types.LegacyTx{})
receipt := evmtypes.Receipt{BlockNumber: big.NewInt(40)}
kst.On("SignTx", mock.Anything,
fromAddress,
mock.MatchedBy(func(tx *types.Transaction) bool {
if evmtypes.Nonce(tx.Nonce()) != *etx.Sequence || expectedBumpedGasPrice.Cmp(tx.GasPrice()) != 0 {
return false
}
ethTx = *tx
receipt.TxHash = tx.Hash()
return true
}),
mock.Anything).Return(ðTx, nil).Once()
ethClient.On("SendTransactionReturnCode", mock.Anything, mock.MatchedBy(func(tx *types.Transaction) bool {
return expectedBumpedGasPrice.Cmp(tx.GasPrice()) == 0
}), fromAddress).Return(commonclient.TransactionAlreadyKnown, errors.New("nonce too low")).Once()
// Do the thing
require.NoError(t, ec.RebroadcastWhereNecessary(tests.Context(t), currentHead))
var err error
etx, err = txStore.FindTxWithAttempts(ctx, etx.ID)
require.NoError(t, err)
assert.Equal(t, txmgrcommon.TxConfirmedMissingReceipt, etx.State)
// Got the new attempt
attempt1_4 = etx.TxAttempts[0]
assert.Equal(t, expectedBumpedGasPrice.Int64(), attempt1_4.TxFee.Legacy.ToInt().Int64())
require.Len(t, etx.TxAttempts, 4)
require.Equal(t, attempt1_1.ID, etx.TxAttempts[3].ID)
require.Equal(t, attempt1_2.ID, etx.TxAttempts[2].ID)
require.Equal(t, attempt1_3.ID, etx.TxAttempts[1].ID)
require.Equal(t, attempt1_4.ID, etx.TxAttempts[0].ID)
require.Equal(t, txmgrtypes.TxAttemptBroadcast, etx.TxAttempts[0].State)
require.Equal(t, txmgrtypes.TxAttemptBroadcast, etx.TxAttempts[1].State)
require.Equal(t, txmgrtypes.TxAttemptBroadcast, etx.TxAttempts[2].State)
require.Equal(t, txmgrtypes.TxAttemptBroadcast, etx.TxAttempts[3].State)
})`
$DIR/core/chains/evm/txmgr/confirmer_test.go: `kst.On("SignTx", mock.Anything,
fromAddress,
mock.MatchedBy(func(tx *types.Transaction) bool {
if evmtypes.Nonce(tx.Nonce()) != *etx.Sequence || expectedBumpedGasPrice.Cmp(tx.GasPrice()) != 0 {
return false
}
ethTx = *tx
receipt.TxHash = tx.Hash()
return true
}),
mock.Anything).Return(ðTx, nil).Once()`
$DIR/core/chains/evm/txmgr/confirmer_test.go: `ethTx = *tx`
$DIR/core/chains/evm/txmgr/confirmer_test.go: `receipt.TxHash = tx.Hash()`
$DIR/core/chains/evm/txmgr/confirmer_test.go: `ethClient.On("SendTransactionReturnCode", mock.Anything, mock.MatchedBy(func(tx *types.Transaction) bool {
return expectedBumpedGasPrice.Cmp(tx.GasPrice()) == 0
}), fromAddress).Return(commonclient.TransactionAlreadyKnown, errors.New("nonce too low")).Once()`
$DIR/core/chains/evm/txmgr/confirmer_test.go: `etx, err = txStore.FindTxWithAttempts(ctx, etx.ID)`
$DIR/core/chains/evm/txmgr/confirmer_test.go: `attempt1_4 = etx.TxAttempts[0]`
$DIR/core/chains/evm/txmgr/confirmer_test.go: `pgtest.MustExec(t, db, `UPDATE evm.txes SET state = 'confirmed'`)`
$DIR/core/chains/evm/txmgr/confirmer_test.go: `nonce++`
$DIR/core/chains/evm/txmgr/confirmer_test.go: `t.Run("saves in-progress attempt on temporary error and returns error", func(t *testing.T) {
expectedBumpedGasPrice := big.NewInt(20000000000)
require.Greater(t, expectedBumpedGasPrice.Int64(), attempt2_1.TxFee.Legacy.ToInt().Int64())
ethTx := *types.NewTx(&types.LegacyTx{})
n := *etx2.Sequence
kst.On("SignTx", mock.Anything,
fromAddress,
mock.MatchedBy(func(tx *types.Transaction) bool {
if evmtypes.Nonce(tx.Nonce()) != n || expectedBumpedGasPrice.Cmp(tx.GasPrice()) != 0 {
return false
}
ethTx = *tx
return true
}),
mock.Anything).Return(ðTx, nil).Once()
ethClient.On("SendTransactionReturnCode", mock.Anything, mock.MatchedBy(func(tx *types.Transaction) bool {
return evmtypes.Nonce(tx.Nonce()) == n && expectedBumpedGasPrice.Cmp(tx.GasPrice()) == 0
}), fromAddress).Return(commonclient.Unknown, errors.New("some network error")).Once()
// Do the thing
err := ec.RebroadcastWhereNecessary(tests.Context(t), currentHead)
require.Error(t, err)
require.Contains(t, err.Error(), "some network error")
etx2, err = txStore.FindTxWithAttempts(ctx, etx2.ID)
require.NoError(t, err)
assert.Equal(t, txmgrcommon.TxUnconfirmed, etx2.State)
// Old attempt is untouched
require.Len(t, etx2.TxAttempts, 2)
require.Equal(t, attempt2_1.ID, etx2.TxAttempts[1].ID)
attempt2_1 = etx2.TxAttempts[1]
assert.Equal(t, txmgrtypes.TxAttemptBroadcast, attempt2_1.State)
assert.Equal(t, oldEnough, *attempt2_1.BroadcastBeforeBlockNum)
// New in_progress attempt saved
attempt2_2 = etx2.TxAttempts[0]
assert.Equal(t, txmgrtypes.TxAttemptInProgress, attempt2_2.State)
assert.Nil(t, attempt2_2.BroadcastBeforeBlockNum)
// Do it again and move the attempt into "broadcast"
n = *etx2.Sequence
ethClient.On("SendTransactionReturnCode", mock.Anything, mock.MatchedBy(func(tx *types.Transaction) bool {
return evmtypes.Nonce(tx.Nonce()) == n && expectedBumpedGasPrice.Cmp(tx.GasPrice()) == 0
}), fromAddress).Return(commonclient.Successful, nil).Once()
require.NoError(t, ec.RebroadcastWhereNecessary(tests.Context(t), currentHead))
// Attempt marked "broadcast"
etx2, err = txStore.FindTxWithAttempts(ctx, etx2.ID)
require.NoError(t, err)
assert.Equal(t, txmgrcommon.TxUnconfirmed, etx2.State)
// New in_progress attempt saved
require.Len(t, etx2.TxAttempts, 2)
require.Equal(t, attempt2_2.ID, etx2.TxAttempts[0].ID)
attempt2_2 = etx2.TxAttempts[0]
require.Equal(t, txmgrtypes.TxAttemptBroadcast, attempt2_2.State)
assert.Nil(t, attempt2_2.BroadcastBeforeBlockNum)
})`
$DIR/core/chains/evm/txmgr/confirmer_test.go: `kst.On("SignTx", mock.Anything,
fromAddress,
mock.MatchedBy(func(tx *types.Transaction) bool {
if evmtypes.Nonce(tx.Nonce()) != n || expectedBumpedGasPrice.Cmp(tx.GasPrice()) != 0 {
return false
}
ethTx = *tx
return true
}),
mock.Anything).Return(ðTx, nil).Once()`
$DIR/core/chains/evm/txmgr/confirmer_test.go: `ethTx = *tx`
$DIR/core/chains/evm/txmgr/confirmer_test.go: `ethClient.On("SendTransactionReturnCode", mock.Anything, mock.MatchedBy(func(tx *types.Transaction) bool {
return evmtypes.Nonce(tx.Nonce()) == n && expectedBumpedGasPrice.Cmp(tx.GasPrice()) == 0
}), fromAddress).Return(commonclient.Unknown, errors.New("some network error")).Once()`
$DIR/core/chains/evm/txmgr/confirmer_test.go: `etx2, err = txStore.FindTxWithAttempts(ctx, etx2.ID)`
$DIR/core/chains/evm/txmgr/confirmer_test.go: `attempt2_1 = etx2.TxAttempts[1]`
$DIR/core/chains/evm/txmgr/confirmer_test.go: `attempt2_2 = etx2.TxAttempts[0]`
$DIR/core/chains/evm/txmgr/confirmer_test.go: `n = *etx2.Sequence`
$DIR/core/chains/evm/txmgr/confirmer_test.go: `ethClient.On("SendTransactionReturnCode", mock.Anything, mock.MatchedBy(func(tx *types.Transaction) bool {
return evmtypes.Nonce(tx.Nonce()) == n && expectedBumpedGasPrice.Cmp(tx.GasPrice()) == 0
}), fromAddress).Return(commonclient.Successful, nil).Once()`
$DIR/core/chains/evm/txmgr/confirmer_test.go: `etx2, err = txStore.FindTxWithAttempts(ctx, etx2.ID)`
$DIR/core/chains/evm/txmgr/confirmer_test.go: `attempt2_2 = etx2.TxAttempts[0]`
$DIR/core/chains/evm/txmgr/confirmer_test.go: `t.Run("assumes that 'nonce too low' error means confirmed_missing_receipt", func(t *testing.T) {
expectedBumpedGasPrice := big.NewInt(25000000000)
require.Greater(t, expectedBumpedGasPrice.Int64(), attempt2_1.TxFee.Legacy.ToInt().Int64())
ethTx := *types.NewTx(&types.LegacyTx{})
n := *etx2.Sequence
kst.On("SignTx", mock.Anything,
fromAddress,
mock.MatchedBy(func(tx *types.Transaction) bool {
if evmtypes.Nonce(tx.Nonce()) != n || expectedBumpedGasPrice.Cmp(tx.GasPrice()) != 0 {
return false
}
ethTx = *tx
return true
}),
mock.Anything).Return(ðTx, nil).Once()
ethClient.On("SendTransactionReturnCode", mock.Anything, mock.MatchedBy(func(tx *types.Transaction) bool {
return evmtypes.Nonce(tx.Nonce()) == n && expectedBumpedGasPrice.Cmp(tx.GasPrice()) == 0
}), fromAddress).Return(commonclient.TransactionAlreadyKnown, errors.New("nonce too low")).Once()
// Creates new attempt as normal if currentHead is not high enough
require.NoError(t, ec.RebroadcastWhereNecessary(tests.Context(t), currentHead))
var err error
etx2, err = txStore.FindTxWithAttempts(ctx, etx2.ID)
require.NoError(t, err)
assert.Equal(t, txmgrcommon.TxConfirmedMissingReceipt, etx2.State)
// One new attempt saved
require.Len(t, etx2.TxAttempts, 3)
assert.Equal(t, txmgrtypes.TxAttemptBroadcast, etx2.TxAttempts[0].State)
assert.Equal(t, txmgrtypes.TxAttemptBroadcast, etx2.TxAttempts[1].State)
assert.Equal(t, txmgrtypes.TxAttemptBroadcast, etx2.TxAttempts[2].State)
})`
$DIR/core/chains/evm/txmgr/confirmer_test.go: `kst.On("SignTx", mock.Anything,
fromAddress,
mock.MatchedBy(func(tx *types.Transaction) bool {
if evmtypes.Nonce(tx.Nonce()) != n || expectedBumpedGasPrice.Cmp(tx.GasPrice()) != 0 {
return false
}
ethTx = *tx
return true
}),
mock.Anything).Return(ðTx, nil).Once()`
$DIR/core/chains/evm/txmgr/confirmer_test.go: `ethTx = *tx`
$DIR/core/chains/evm/txmgr/confirmer_test.go: `ethClient.On("SendTransactionReturnCode", mock.Anything, mock.MatchedBy(func(tx *types.Transaction) bool {
return evmtypes.Nonce(tx.Nonce()) == n && expectedBumpedGasPrice.Cmp(tx.GasPrice()) == 0
}), fromAddress).Return(commonclient.TransactionAlreadyKnown, errors.New("nonce too low")).Once()`
$DIR/core/chains/evm/txmgr/confirmer_test.go: `etx2, err = txStore.FindTxWithAttempts(ctx, etx2.ID)`
$DIR/core/chains/evm/txmgr/confirmer_test.go: `nonce++`
$DIR/core/chains/evm/txmgr/confirmer_test.go: `t.Run("saves attempt anyway if replacement transaction is underpriced because the bumped gas price is insufficiently higher than the previous one", func(t *testing.T) {
expectedBumpedGasPrice := big.NewInt(42000000000)
require.Greater(t, expectedBumpedGasPrice.Int64(), attempt3_1.TxFee.Legacy.ToInt().Int64())
ethTx := *types.NewTx(&types.LegacyTx{})
kst.On("SignTx", mock.Anything,
fromAddress,
mock.MatchedBy(func(tx *types.Transaction) bool {
if evmtypes.Nonce(tx.Nonce()) != *etx3.Sequence || expectedBumpedGasPrice.Cmp(tx.GasPrice()) != 0 {
return false
}
ethTx = *tx
return true
}),
mock.Anything).Return(ðTx, nil).Once()
ethClient.On("SendTransactionReturnCode", mock.Anything, mock.MatchedBy(func(tx *types.Transaction) bool {
return evmtypes.Nonce(tx.Nonce()) == *etx3.Sequence && expectedBumpedGasPrice.Cmp(tx.GasPrice()) == 0
}), fromAddress).Return(commonclient.Successful, errors.New("replacement transaction underpriced")).Once()
// Do the thing
require.NoError(t, ec.RebroadcastWhereNecessary(tests.Context(t), currentHead))
var err error
etx3, err = txStore.FindTxWithAttempts(ctx, etx3.ID)
require.NoError(t, err)
assert.Equal(t, txmgrcommon.TxUnconfirmed, etx3.State)
require.Len(t, etx3.TxAttempts, 2)
require.Equal(t, attempt3_1.ID, etx3.TxAttempts[1].ID)
attempt3_2 = etx3.TxAttempts[0]
assert.Equal(t, expectedBumpedGasPrice.Int64(), attempt3_2.TxFee.Legacy.ToInt().Int64())
})`
$DIR/core/chains/evm/txmgr/confirmer_test.go: `kst.On("SignTx", mock.Anything,
fromAddress,
mock.MatchedBy(func(tx *types.Transaction) bool {
if evmtypes.Nonce(tx.Nonce()) != *etx3.Sequence || expectedBumpedGasPrice.Cmp(tx.GasPrice()) != 0 {
return false
}
ethTx = *tx
return true
}),
mock.Anything).Return(ðTx, nil).Once()`
$DIR/core/chains/evm/txmgr/confirmer_test.go: `ethTx = *tx`
$DIR/core/chains/evm/txmgr/confirmer_test.go: `ethClient.On("SendTransactionReturnCode", mock.Anything, mock.MatchedBy(func(tx *types.Transaction) bool {
return evmtypes.Nonce(tx.Nonce()) == *etx3.Sequence && expectedBumpedGasPrice.Cmp(tx.GasPrice()) == 0
}), fromAddress).Return(commonclient.Successful, errors.New("replacement transaction underpriced")).Once()`
$DIR/core/chains/evm/txmgr/confirmer_test.go: `etx3, err = txStore.FindTxWithAttempts(ctx, etx3.ID)`
$DIR/core/chains/evm/txmgr/confirmer_test.go: `attempt3_2 = etx3.TxAttempts[0]`
$DIR/core/chains/evm/txmgr/confirmer_test.go: `t.Run("handles case where transaction is already known somehow", func(t *testing.T) {
expectedBumpedGasPrice := big.NewInt(50400000000)
require.Greater(t, expectedBumpedGasPrice.Int64(), attempt3_1.TxFee.Legacy.ToInt().Int64())
ethTx := *types.NewTx(&types.LegacyTx{})
kst.On("SignTx", mock.Anything,
fromAddress,
mock.MatchedBy(func(tx *types.Transaction) bool {
if evmtypes.Nonce(tx.Nonce()) != *etx3.Sequence || expectedBumpedGasPrice.Cmp(tx.GasPrice()) != 0 {
return false
}
ethTx = *tx
return true
}),
mock.Anything).Return(ðTx, nil).Once()
ethClient.On("SendTransactionReturnCode", mock.Anything, mock.MatchedBy(func(tx *types.Transaction) bool {
return evmtypes.Nonce(tx.Nonce()) == *etx3.Sequence && expectedBumpedGasPrice.Cmp(tx.GasPrice()) == 0
}), fromAddress).Return(commonclient.Successful, fmt.Errorf("known transaction: %s", ethTx.Hash().Hex())).Once()
// Do the thing
require.NoError(t, ec.RebroadcastWhereNecessary(tests.Context(t), currentHead))
var err error
etx3, err = txStore.FindTxWithAttempts(ctx, etx3.ID)
require.NoError(t, err)
assert.Equal(t, txmgrcommon.TxUnconfirmed, etx3.State)
require.Len(t, etx3.TxAttempts, 3)
attempt3_3 = etx3.TxAttempts[0]
assert.Equal(t, expectedBumpedGasPrice.Int64(), attempt3_3.TxFee.Legacy.ToInt().Int64())
})`
$DIR/core/chains/evm/txmgr/confirmer_test.go: `kst.On("SignTx", mock.Anything,
fromAddress,
mock.MatchedBy(func(tx *types.Transaction) bool {
if evmtypes.Nonce(tx.Nonce()) != *etx3.Sequence || expectedBumpedGasPrice.Cmp(tx.GasPrice()) != 0 {
return false
}
ethTx = *tx
return true
}),
mock.Anything).Return(ðTx, nil).Once()`
$DIR/core/chains/evm/txmgr/confirmer_test.go: `ethTx = *tx`
$DIR/core/chains/evm/txmgr/confirmer_test.go: `ethClient.On("SendTransactionReturnCode", mock.Anything, mock.MatchedBy(func(tx *types.Transaction) bool {
return evmtypes.Nonce(tx.Nonce()) == *etx3.Sequence && expectedBumpedGasPrice.Cmp(tx.GasPrice()) == 0
}), fromAddress).Return(commonclient.Successful, fmt.Errorf("known transaction: %s", ethTx.Hash().Hex())).Once()`
$DIR/core/chains/evm/txmgr/confirmer_test.go: `etx3, err = txStore.FindTxWithAttempts(ctx, etx3.ID)`
$DIR/core/chains/evm/txmgr/confirmer_test.go: `attempt3_3 = etx3.TxAttempts[0]`
$DIR/core/chains/evm/txmgr/confirmer_test.go: `t.Run("pretends it was accepted and continues the cycle if rejected for being temporarily underpriced", func(t *testing.T) {
// This happens if parity is rejecting transactions that are not priced high enough to even get into the mempool at all
// It should pretend it was accepted into the mempool and hand off to the next cycle to continue bumping gas as normal
temporarilyUnderpricedError := "There are too many transactions in the queue. Your transaction was dropped due to limit. Try increasing the fee."
expectedBumpedGasPrice := big.NewInt(60480000000)
require.Greater(t, expectedBumpedGasPrice.Int64(), attempt3_2.TxFee.Legacy.ToInt().Int64())
ethTx := *types.NewTx(&types.LegacyTx{})
kst.On("SignTx", mock.Anything,
fromAddress,
mock.MatchedBy(func(tx *types.Transaction) bool {
if evmtypes.Nonce(tx.Nonce()) != *etx3.Sequence || expectedBumpedGasPrice.Cmp(tx.GasPrice()) != 0 {
return false
}
ethTx = *tx
return true
}),
mock.Anything).Return(ðTx, nil).Once()
ethClient.On("SendTransactionReturnCode", mock.Anything, mock.MatchedBy(func(tx *types.Transaction) bool {
return evmtypes.Nonce(tx.Nonce()) == *etx3.Sequence && expectedBumpedGasPrice.Cmp(tx.GasPrice()) == 0
}), fromAddress).Return(commonclient.Successful, errors.New(temporarilyUnderpricedError)).Once()
// Do the thing
require.NoError(t, ec.RebroadcastWhereNecessary(tests.Context(t), currentHead))
var err error
etx3, err = txStore.FindTxWithAttempts(ctx, etx3.ID)
require.NoError(t, err)
assert.Equal(t, txmgrcommon.TxUnconfirmed, etx3.State)
require.Len(t, etx3.TxAttempts, 4)
attempt3_4 = etx3.TxAttempts[0]
assert.Equal(t, expectedBumpedGasPrice.Int64(), attempt3_4.TxFee.Legacy.ToInt().Int64())
})`
$DIR/core/chains/evm/txmgr/confirmer_test.go: `kst.On("SignTx", mock.Anything,
fromAddress,
mock.MatchedBy(func(tx *types.Transaction) bool {
if evmtypes.Nonce(tx.Nonce()) != *etx3.Sequence || expectedBumpedGasPrice.Cmp(tx.GasPrice()) != 0 {
return false
}
ethTx = *tx
return true
}),
mock.Anything).Return(ðTx, nil).Once()`
$DIR/core/chains/evm/txmgr/confirmer_test.go: `ethTx = *tx`
$DIR/core/chains/evm/txmgr/confirmer_test.go: `ethClient.On("SendTransactionReturnCode", mock.Anything, mock.MatchedBy(func(tx *types.Transaction) bool {
return evmtypes.Nonce(tx.Nonce()) == *etx3.Sequence && expectedBumpedGasPrice.Cmp(tx.GasPrice()) == 0
}), fromAddress).Return(commonclient.Successful, errors.New(temporarilyUnderpricedError)).Once()`
$DIR/core/chains/evm/txmgr/confirmer_test.go: `etx3, err = txStore.FindTxWithAttempts(ctx, etx3.ID)`
$DIR/core/chains/evm/txmgr/confirmer_test.go: `attempt3_4 = etx3.TxAttempts[0]`
$DIR/core/chains/evm/txmgr/confirmer_test.go: `t.Run("resubmits at the old price and does not create a new attempt if one of the bumped transactions would exceed EVM.GasEstimator.PriceMax", func(t *testing.T) {
// Set price such that the next bump will exceed EVM.GasEstimator.PriceMax
// Existing gas price is: 60480000000
gasPrice := attempt3_4.TxFee.Legacy.ToInt()
gcfg := configtest.NewGeneralConfig(t, func(c *chainlink.Config, s *chainlink.Secrets) {
c.EVM[0].GasEstimator.PriceMax = assets.NewWeiI(60500000000)
})
newCfg := evmtest.NewChainScopedConfig(t, gcfg)
ec2 := newEthConfirmer(t, txStore, ethClient, gcfg, newCfg, ethKeyStore, nil)
ethClient.On("SendTransactionReturnCode", mock.Anything, mock.MatchedBy(func(tx *types.Transaction) bool {
return evmtypes.Nonce(tx.Nonce()) == *etx3.Sequence && gasPrice.Cmp(tx.GasPrice()) == 0
}), fromAddress).Return(commonclient.Successful, errors.New("already known")).Once() // we already submitted at this price, now it's time to bump and submit again but since we simply resubmitted rather than increasing gas price, geth already knows about this tx
// Do the thing
require.NoError(t, ec2.RebroadcastWhereNecessary(tests.Context(t), currentHead))
var err error
etx3, err = txStore.FindTxWithAttempts(ctx, etx3.ID)
require.NoError(t, err)
assert.Equal(t, txmgrcommon.TxUnconfirmed, etx3.State)
// No new tx attempts
require.Len(t, etx3.TxAttempts, 4)
attempt3_4 = etx3.TxAttempts[0]
assert.Equal(t, gasPrice.Int64(), attempt3_4.TxFee.Legacy.ToInt().Int64())
})`
$DIR/core/chains/evm/txmgr/confirmer_test.go: `c.EVM[0].GasEstimator.PriceMax = assets.NewWeiI(60500000000)`
$DIR/core/chains/evm/txmgr/confirmer_test.go: `ethClient.On("SendTransactionReturnCode", mock.Anything, mock.MatchedBy(func(tx *types.Transaction) bool {
return evmtypes.Nonce(tx.Nonce()) == *etx3.Sequence && gasPrice.Cmp(tx.GasPrice()) == 0
}), fromAddress).Return(commonclient.Successful, errors.New("already known")).Once()`
$DIR/core/chains/evm/txmgr/confirmer_test.go: `etx3, err = txStore.FindTxWithAttempts(ctx, etx3.ID)`
$DIR/core/chains/evm/txmgr/confirmer_test.go: `attempt3_4 = etx3.TxAttempts[0]`
$DIR/core/chains/evm/txmgr/confirmer_test.go: `t.Run("resubmits at the old price and does not create a new attempt if the current price is exactly EVM.GasEstimator.PriceMax", func(t *testing.T) {
// Set price such that the current price is already at EVM.GasEstimator.PriceMax
// Existing gas price is: 60480000000
gasPrice := attempt3_4.TxFee.Legacy.ToInt()
gcfg := configtest.NewGeneralConfig(t, func(c *chainlink.Config, s *chainlink.Secrets) {
c.EVM[0].GasEstimator.PriceMax = assets.NewWeiI(60480000000)
})
newCfg := evmtest.NewChainScopedConfig(t, gcfg)
ec2 := newEthConfirmer(t, txStore, ethClient, gcfg, newCfg, ethKeyStore, nil)
ethClient.On("SendTransactionReturnCode", mock.Anything, mock.MatchedBy(func(tx *types.Transaction) bool {
return evmtypes.Nonce(tx.Nonce()) == *etx3.Sequence && gasPrice.Cmp(tx.GasPrice()) == 0
}), fromAddress).Return(commonclient.Successful, errors.New("already known")).Once() // we already submitted at this price, now it's time to bump and submit again but since we simply resubmitted rather than increasing gas price, geth already knows about this tx
// Do the thing
require.NoError(t, ec2.RebroadcastWhereNecessary(tests.Context(t), currentHead))
var err error
etx3, err = txStore.FindTxWithAttempts(ctx, etx3.ID)
require.NoError(t, err)
assert.Equal(t, txmgrcommon.TxUnconfirmed, etx3.State)
// No new tx attempts
require.Len(t, etx3.TxAttempts, 4)
attempt3_4 = etx3.TxAttempts[0]
assert.Equal(t, gasPrice.Int64(), attempt3_4.TxFee.Legacy.ToInt().Int64())
})`
$DIR/core/chains/evm/txmgr/confirmer_test.go: `c.EVM[0].GasEstimator.PriceMax = assets.NewWeiI(60480000000)`
$DIR/core/chains/evm/txmgr/confirmer_test.go: `ethClient.On("SendTransactionReturnCode", mock.Anything, mock.MatchedBy(func(tx *types.Transaction) bool {
return evmtypes.Nonce(tx.Nonce()) == *etx3.Sequence && gasPrice.Cmp(tx.GasPrice()) == 0
}), fromAddress).Return(commonclient.Successful, errors.New("already known")).Once()`
$DIR/core/chains/evm/txmgr/confirmer_test.go: `etx3, err = txStore.FindTxWithAttempts(ctx, etx3.ID)`
$DIR/core/chains/evm/txmgr/confirmer_test.go: `attempt3_4 = etx3.TxAttempts[0]`
$DIR/core/chains/evm/txmgr/confirmer_test.go: `t.Run("EIP-1559: bumps using EIP-1559 rules when existing attempts are of type 0x2", func(t *testing.T) {
ethTx := *types.NewTx(&types.DynamicFeeTx{})
kst.On("SignTx", mock.Anything,
fromAddress,
mock.MatchedBy(func(tx *types.Transaction) bool {
if evmtypes.Nonce(tx.Nonce()) != *etx4.Sequence {
return false
}
ethTx = *tx
return true
}),
mock.Anything).Return(ðTx, nil).Once()
// This is the new, EIP-1559 attempt
gasTipCap := assets.GWei(42)
ethClient.On("SendTransactionReturnCode", mock.Anything, mock.MatchedBy(func(tx *types.Transaction) bool {
return evmtypes.Nonce(tx.Nonce()) == *etx4.Sequence && gasTipCap.ToInt().Cmp(tx.GasTipCap()) == 0
}), fromAddress).Return(commonclient.Successful, nil).Once()
require.NoError(t, ec.RebroadcastWhereNecessary(tests.Context(t), currentHead))
var err error
etx4, err = txStore.FindTxWithAttempts(ctx, etx4.ID)
require.NoError(t, err)
assert.Equal(t, txmgrcommon.TxUnconfirmed, etx4.State)
// A new, bumped attempt
require.Len(t, etx4.TxAttempts, 2)
attempt4_2 = etx4.TxAttempts[0]
assert.Nil(t, attempt4_2.TxFee.Legacy)
assert.Equal(t, assets.GWei(42).String(), attempt4_2.TxFee.DynamicTipCap.String())
assert.Equal(t, assets.GWei(120).String(), attempt4_2.TxFee.DynamicFeeCap.String())
assert.Equal(t, txmgrtypes.TxAttemptBroadcast, attempt1_2.State)
})`
$DIR/core/chains/evm/txmgr/confirmer_test.go: `kst.On("SignTx", mock.Anything,
fromAddress,
mock.MatchedBy(func(tx *types.Transaction) bool {
if evmtypes.Nonce(tx.Nonce()) != *etx4.Sequence {
return false
}
ethTx = *tx
return true
}),
mock.Anything).Return(ðTx, nil).Once()`
$DIR/core/chains/evm/txmgr/confirmer_test.go: `ethTx = *tx`
$DIR/core/chains/evm/txmgr/confirmer_test.go: `ethClient.On("SendTransactionReturnCode", mock.Anything, mock.MatchedBy(func(tx *types.Transaction) bool {
return evmtypes.Nonce(tx.Nonce()) == *etx4.Sequence && gasTipCap.ToInt().Cmp(tx.GasTipCap()) == 0
}), fromAddress).Return(commonclient.Successful, nil).Once()`
$DIR/core/chains/evm/txmgr/confirmer_test.go: `etx4, err = txStore.FindTxWithAttempts(ctx, etx4.ID)`
$DIR/core/chains/evm/txmgr/confirmer_test.go: `attempt4_2 = etx4.TxAttempts[0]`
$DIR/core/chains/evm/txmgr/confirmer_test.go: `t.Run("EIP-1559: resubmits at the old price and does not create a new attempt if one of the bumped EIP-1559 transactions would have its tip cap exceed EVM.GasEstimator.PriceMax", func(t *testing.T) {
gcfg := configtest.NewGeneralConfig(t, func(c *chainlink.Config, s *chainlink.Secrets) {
c.EVM[0].GasEstimator.PriceMax = assets.GWei(1000)
})
newCfg := evmtest.NewChainScopedConfig(t, gcfg)
ec2 := newEthConfirmer(t, txStore, ethClient, gcfg, newCfg, ethKeyStore, nil)
// Third attempt failed to bump, resubmits old one instead
ethClient.On("SendTransactionReturnCode", mock.Anything, mock.MatchedBy(func(tx *types.Transaction) bool {
return evmtypes.Nonce(tx.Nonce()) == *etx4.Sequence && attempt4_2.Hash.String() == tx.Hash().String()
}), fromAddress).Return(commonclient.Successful, nil).Once()
require.NoError(t, ec2.RebroadcastWhereNecessary(tests.Context(t), currentHead))
var err error
etx4, err = txStore.FindTxWithAttempts(ctx, etx4.ID)
require.NoError(t, err)
assert.Equal(t, txmgrcommon.TxUnconfirmed, etx4.State)
// No new tx attempts
require.Len(t, etx4.TxAttempts, 2)
assert.Equal(t, assets.GWei(999).Int64(), etx4.TxAttempts[0].TxFee.DynamicTipCap.ToInt().Int64())
assert.Equal(t, assets.GWei(1000).Int64(), etx4.TxAttempts[0].TxFee.DynamicFeeCap.ToInt().Int64())
})`
$DIR/core/chains/evm/txmgr/confirmer_test.go: `c.EVM[0].GasEstimator.PriceMax = assets.GWei(1000)`
$DIR/core/chains/evm/txmgr/confirmer_test.go: `ethClient.On("SendTransactionReturnCode", mock.Anything, mock.MatchedBy(func(tx *types.Transaction) bool {
return evmtypes.Nonce(tx.Nonce()) == *etx4.Sequence && attempt4_2.Hash.String() == tx.Hash().String()
}), fromAddress).Return(commonclient.Successful, nil).Once()`
$DIR/core/chains/evm/txmgr/confirmer_test.go: `etx4, err = txStore.FindTxWithAttempts(ctx, etx4.ID)`
$DIR/core/chains/evm/txmgr/confirmer_test.go: `kst.On("SignTx", mock.Anything,
fromAddress,
mock.MatchedBy(func(tx *types.Transaction) bool {
if evmtypes.Nonce(tx.Nonce()) != *etx4.Sequence || expectedBumpedTipCap.ToInt().Cmp(tx.GasTipCap()) != 0 {
return false
}
ethTx = *tx
return true
}),
mock.Anything).Return(ðTx, nil).Once()`
$DIR/core/chains/evm/txmgr/confirmer_test.go: `ethTx = *tx`
$DIR/core/chains/evm/txmgr/confirmer_test.go: `ethClient.On("SendTransactionReturnCode", mock.Anything, mock.MatchedBy(func(tx *types.Transaction) bool {
return evmtypes.Nonce(tx.Nonce()) == *etx4.Sequence && expectedBumpedTipCap.ToInt().Cmp(tx.GasTipCap()) == 0
}), fromAddress).Return(commonclient.Successful, errors.New("replacement transaction underpriced")).Once()`
$DIR/core/chains/evm/txmgr/confirmer_test.go: `etx4, err = txStore.FindTxWithAttempts(ctx, etx4.ID)`
$DIR/core/chains/evm/txmgr/confirmer_test.go: `c.EVM[0].GasEstimator.PriceMax = assets.GWei(500)`
$DIR/core/chains/evm/txmgr/confirmer_test.go: `_, _ = cltest.MustInsertRandomKeyReturningState(t, ethKeyStore)`
$DIR/core/chains/evm/txmgr/confirmer_test.go: `kst.On("EnabledAddressesForChain", mock.Anything, &cltest.FixtureChainID).Return(addresses, nil).Maybe()`
$DIR/core/chains/evm/txmgr/confirmer_test.go: `t.Run("terminally underpriced transaction with in_progress attempt is retried with more gas", func(t *testing.T) {
ethClient := testutils.NewEthClientMockWithDefaultChain(t)
ec := newEthConfirmer(t, txStore, ethClient, cfg, evmcfg, kst, nil)
originalBroadcastAt := time.Unix(1616509100, 0)
etx := mustInsertUnconfirmedEthTxWithAttemptState(t, txStore, nonce, fromAddress, txmgrtypes.TxAttemptInProgress, originalBroadcastAt)
require.Equal(t, originalBroadcastAt, *etx.BroadcastAt)
nonce++
attempt := etx.TxAttempts[0]
signedTx, err := txmgr.GetGethSignedTx(attempt.SignedRawTx)
require.NoError(t, err)
// Fail the first time with terminally underpriced.
ethClient.On("SendTransactionReturnCode", mock.Anything, mock.Anything, fromAddress).Return(
commonclient.Underpriced, errors.New("Transaction gas price is too low. It does not satisfy your node's minimal gas price")).Once()
// Succeed the second time after bumping gas.
ethClient.On("SendTransactionReturnCode", mock.Anything, mock.Anything, fromAddress).Return(
commonclient.Successful, nil).Once()
kst.On("SignTx", mock.Anything, mock.Anything, mock.Anything, mock.Anything).Return(
signedTx, nil,
).Once()
require.NoError(t, ec.RebroadcastWhereNecessary(tests.Context(t), currentHead))
})`
$DIR/core/chains/evm/txmgr/confirmer_test.go: `nonce++`
$DIR/core/chains/evm/txmgr/confirmer_test.go: `ethClient.On("SendTransactionReturnCode", mock.Anything, mock.Anything, fromAddress).Return(
commonclient.Underpriced, errors.New("Transaction gas price is too low. It does not satisfy your node's minimal gas price")).Once()`
$DIR/core/chains/evm/txmgr/confirmer_test.go: `ethClient.On("SendTransactionReturnCode", mock.Anything, mock.Anything, fromAddress).Return(
commonclient.Successful, nil).Once()`
$DIR/core/chains/evm/txmgr/confirmer_test.go: `kst.On("SignTx", mock.Anything, mock.Anything, mock.Anything, mock.Anything).Return(
signedTx, nil,
).Once()`
$DIR/core/chains/evm/txmgr/confirmer_test.go: `t.Run("multiple gas bumps with existing broadcast attempts are retried with more gas until success in legacy mode", func(t *testing.T) {
ethClient := testutils.NewEthClientMockWithDefaultChain(t)
ec := newEthConfirmer(t, txStore, ethClient, cfg, evmcfg, kst, nil)
etx := cltest.MustInsertUnconfirmedEthTxWithBroadcastLegacyAttempt(t, txStore, nonce, fromAddress)
nonce++
legacyAttempt := etx.TxAttempts[0]
var dbAttempt txmgr.DbEthTxAttempt
dbAttempt.FromTxAttempt(&legacyAttempt)
require.NoError(t, db.Get(&dbAttempt, `UPDATE evm.tx_attempts SET broadcast_before_block_num=$1 WHERE id=$2 RETURNING *`, oldEnough, legacyAttempt.ID))
// Fail a few times with terminally underpriced
ethClient.On("SendTransactionReturnCode", mock.Anything, mock.Anything, fromAddress).Return(
commonclient.Underpriced, errors.New("Transaction gas price is too low. It does not satisfy your node's minimal gas price")).Times(3)
// Succeed the second time after bumping gas.
ethClient.On("SendTransactionReturnCode", mock.Anything, mock.Anything, fromAddress).Return(
commonclient.Successful, nil).Once()
signedLegacyTx := new(types.Transaction)
kst.On("SignTx", mock.Anything, mock.Anything, mock.MatchedBy(func(tx *types.Transaction) bool {
return tx.Type() == 0x0 && tx.Nonce() == uint64(*etx.Sequence)
}), mock.Anything).Return(
signedLegacyTx, nil,
).Run(func(args mock.Arguments) {
unsignedLegacyTx := args.Get(2).(*types.Transaction)
// Use the real keystore to do the actual signing
thisSignedLegacyTx, err := ethKeyStore.SignTx(tests.Context(t), fromAddress, unsignedLegacyTx, testutils.FixtureChainID)
require.NoError(t, err)
*signedLegacyTx = *thisSignedLegacyTx
}).Times(4) // 3 failures 1 success
require.NoError(t, ec.RebroadcastWhereNecessary(tests.Context(t), currentHead))
})`
$DIR/core/chains/evm/txmgr/confirmer_test.go: `nonce++`
$DIR/core/chains/evm/txmgr/confirmer_test.go: `dbAttempt.FromTxAttempt(&legacyAttempt)`
$DIR/core/chains/evm/txmgr/confirmer_test.go: `ethClient.On("SendTransactionReturnCode", mock.Anything, mock.Anything, fromAddress).Return(
commonclient.Underpriced, errors.New("Transaction gas price is too low. It does not satisfy your node's minimal gas price")).Times(3)`
$DIR/core/chains/evm/txmgr/confirmer_test.go: `ethClient.On("SendTransactionReturnCode", mock.Anything, mock.Anything, fromAddress).Return(
commonclient.Successful, nil).Once()`
$DIR/core/chains/evm/txmgr/confirmer_test.go: `kst.On("SignTx", mock.Anything, mock.Anything, mock.MatchedBy(func(tx *types.Transaction) bool {
return tx.Type() == 0x0 && tx.Nonce() == uint64(*etx.Sequence)
}), mock.Anything).Return(
signedLegacyTx, nil,
).Run(func(args mock.Arguments) {
unsignedLegacyTx := args.Get(2).(*types.Transaction)
// Use the real keystore to do the actual signing
thisSignedLegacyTx, err := ethKeyStore.SignTx(tests.Context(t), fromAddress, unsignedLegacyTx, testutils.FixtureChainID)
require.NoError(t, err)
*signedLegacyTx = *thisSignedLegacyTx
}).Times(4)`
$DIR/core/chains/evm/txmgr/confirmer_test.go: `*signedLegacyTx = *thisSignedLegacyTx`
$DIR/core/chains/evm/txmgr/confirmer_test.go: `nonce++`
$DIR/core/chains/evm/txmgr/confirmer_test.go: `dbAttempt.FromTxAttempt(&dxFeeAttempt)`
$DIR/core/chains/evm/txmgr/confirmer_test.go: `ethClient.On("SendTransactionReturnCode", mock.Anything, mock.Anything, fromAddress).Return(
commonclient.Underpriced, errors.New("transaction underpriced")).Times(3)`
$DIR/core/chains/evm/txmgr/confirmer_test.go: `ethClient.On("SendTransactionReturnCode", mock.Anything, mock.Anything, fromAddress).Return(
commonclient.Successful, nil).Once()`
$DIR/core/chains/evm/txmgr/confirmer_test.go: `kst.On("SignTx", mock.Anything, mock.Anything, mock.MatchedBy(func(tx *types.Transaction) bool {
return tx.Type() == 0x2 && tx.Nonce() == uint64(*etx.Sequence)
}), mock.Anything).Return(
signedDxFeeTx, nil,
).Run(func(args mock.Arguments) {
unsignedDxFeeTx := args.Get(2).(*types.Transaction)
// Use the real keystore to do the actual signing
thisSignedDxFeeTx, err := ethKeyStore.SignTx(tests.Context(t), fromAddress, unsignedDxFeeTx, testutils.FixtureChainID)
require.NoError(t, err)
*signedDxFeeTx = *thisSignedDxFeeTx
}).Times(4)`
$DIR/core/chains/evm/txmgr/confirmer_test.go: `*signedDxFeeTx = *thisSignedDxFeeTx`
$DIR/core/chains/evm/txmgr/confirmer_test.go: `nonce++`
$DIR/core/chains/evm/txmgr/confirmer_test.go: `dbAttempt.FromTxAttempt(&attempt1_1)`
$DIR/core/chains/evm/txmgr/confirmer_test.go: `t.Run("saves attempt with state 'insufficient_eth' if eth node returns this error", func(t *testing.T) {
ec := newEthConfirmer(t, txStore, ethClient, gconfig, config, ethKeyStore, nil)
expectedBumpedGasPrice := big.NewInt(20000000000)
require.Greater(t, expectedBumpedGasPrice.Int64(), attempt1_1.TxFee.Legacy.ToInt().Int64())
ethClient.On("SendTransactionReturnCode", mock.Anything, mock.MatchedBy(func(tx *types.Transaction) bool {
return expectedBumpedGasPrice.Cmp(tx.GasPrice()) == 0
}), fromAddress).Return(commonclient.InsufficientFunds, insufficientEthError).Once()
// Do the thing
require.NoError(t, ec.RebroadcastWhereNecessary(tests.Context(t), currentHead))
etx, err = txStore.FindTxWithAttempts(ctx, etx.ID)
require.NoError(t, err)
require.Len(t, etx.TxAttempts, 2)
require.Equal(t, attempt1_1.ID, etx.TxAttempts[1].ID)
// Got the new attempt
attempt1_2 = etx.TxAttempts[0]
assert.Equal(t, expectedBumpedGasPrice.Int64(), attempt1_2.TxFee.Legacy.ToInt().Int64())
assert.Equal(t, txmgrtypes.TxAttemptInsufficientFunds, attempt1_2.State)
assert.Nil(t, attempt1_2.BroadcastBeforeBlockNum)
})`
$DIR/core/chains/evm/txmgr/confirmer_test.go: `ethClient.On("SendTransactionReturnCode", mock.Anything, mock.MatchedBy(func(tx *types.Transaction) bool {
return expectedBumpedGasPrice.Cmp(tx.GasPrice()) == 0
}), fromAddress).Return(commonclient.InsufficientFunds, insufficientEthError).Once()`
$DIR/core/chains/evm/txmgr/confirmer_test.go: `etx, err = txStore.FindTxWithAttempts(ctx, etx.ID)`
$DIR/core/chains/evm/txmgr/confirmer_test.go: `attempt1_2 = etx.TxAttempts[0]`
$DIR/core/chains/evm/txmgr/confirmer_test.go: `t.Run("does not bump gas when previous error was 'out of eth', instead resubmits existing transaction", func(t *testing.T) {
ec := newEthConfirmer(t, txStore, ethClient, gconfig, config, ethKeyStore, nil)
expectedBumpedGasPrice := big.NewInt(20000000000)
require.Greater(t, expectedBumpedGasPrice.Int64(), attempt1_1.TxFee.Legacy.ToInt().Int64())
ethClient.On("SendTransactionReturnCode", mock.Anything, mock.MatchedBy(func(tx *types.Transaction) bool {
return expectedBumpedGasPrice.Cmp(tx.GasPrice()) == 0
}), fromAddress).Return(commonclient.InsufficientFunds, insufficientEthError).Once()
// Do the thing
require.NoError(t, ec.RebroadcastWhereNecessary(tests.Context(t), currentHead))
etx, err = txStore.FindTxWithAttempts(ctx, etx.ID)
require.NoError(t, err)
// New attempt was NOT created
require.Len(t, etx.TxAttempts, 2)
// The attempt is still "out of eth"
attempt1_2 = etx.TxAttempts[0]
assert.Equal(t, expectedBumpedGasPrice.Int64(), attempt1_2.TxFee.Legacy.ToInt().Int64())
assert.Equal(t, txmgrtypes.TxAttemptInsufficientFunds, attempt1_2.State)
})`
$DIR/core/chains/evm/txmgr/confirmer_test.go: `ethClient.On("SendTransactionReturnCode", mock.Anything, mock.MatchedBy(func(tx *types.Transaction) bool {
return expectedBumpedGasPrice.Cmp(tx.GasPrice()) == 0
}), fromAddress).Return(commonclient.InsufficientFunds, insufficientEthError).Once()`
$DIR/core/chains/evm/txmgr/confirmer_test.go: `etx, err = txStore.FindTxWithAttempts(ctx, etx.ID)`
$DIR/core/chains/evm/txmgr/confirmer_test.go: `attempt1_2 = etx.TxAttempts[0]`
$DIR/core/chains/evm/txmgr/confirmer_test.go: `t.Run("saves the attempt as broadcast after node wallet has been topped up with sufficient balance", func(t *testing.T) {
ec := newEthConfirmer(t, txStore, ethClient, gconfig, config, ethKeyStore, nil)
expectedBumpedGasPrice := big.NewInt(20000000000)
require.Greater(t, expectedBumpedGasPrice.Int64(), attempt1_1.TxFee.Legacy.ToInt().Int64())
ethClient.On("SendTransactionReturnCode", mock.Anything, mock.MatchedBy(func(tx *types.Transaction) bool {
return expectedBumpedGasPrice.Cmp(tx.GasPrice()) == 0
}), fromAddress).Return(commonclient.Successful, nil).Once()
// Do the thing
require.NoError(t, ec.RebroadcastWhereNecessary(tests.Context(t), currentHead))
etx, err = txStore.FindTxWithAttempts(ctx, etx.ID)
require.NoError(t, err)
// New attempt was NOT created
require.Len(t, etx.TxAttempts, 2)
// Attempt is now 'broadcast'
attempt1_2 = etx.TxAttempts[0]
assert.Equal(t, expectedBumpedGasPrice.Int64(), attempt1_2.TxFee.Legacy.ToInt().Int64())
assert.Equal(t, txmgrtypes.TxAttemptBroadcast, attempt1_2.State)
})`
$DIR/core/chains/evm/txmgr/confirmer_test.go: `ethClient.On("SendTransactionReturnCode", mock.Anything, mock.MatchedBy(func(tx *types.Transaction) bool {
return expectedBumpedGasPrice.Cmp(tx.GasPrice()) == 0
}), fromAddress).Return(commonclient.Successful, nil).Once()`
$DIR/core/chains/evm/txmgr/confirmer_test.go: `etx, err = txStore.FindTxWithAttempts(ctx, etx.ID)`
$DIR/core/chains/evm/txmgr/confirmer_test.go: `attempt1_2 = etx.TxAttempts[0]`
$DIR/core/chains/evm/txmgr/confirmer_test.go: `c.EVM[0].GasEstimator.BumpTxDepth = ptr(uint32(depth))`
$DIR/core/chains/evm/txmgr/confirmer_test.go: `mustInsertUnconfirmedEthTxWithInsufficientEthAttempt(t, txStore, nonce, fromAddress)`
$DIR/core/chains/evm/txmgr/confirmer_test.go: `ethClient.On("SendTransactionReturnCode", mock.Anything, mock.MatchedBy(func(tx *types.Transaction) bool {
return tx.Nonce() == uint64(n)
}), fromAddress).Return(commonclient.Successful, nil).Once()`
$DIR/core/chains/evm/txmgr/confirmer_test.go: `nonce++`
$DIR/core/chains/evm/txmgr/confirmer_test.go: `t.Run("does nothing if there aren't any transactions", func(t *testing.T) {
require.NoError(t, ec.EnsureConfirmedTransactionsInLongestChain(tests.Context(t), &head))
})`
$DIR/core/chains/evm/txmgr/confirmer_test.go: `t.Run("does nothing to unconfirmed transactions", func(t *testing.T) {
etx := cltest.MustInsertUnconfirmedEthTxWithBroadcastLegacyAttempt(t, txStore, 0, fromAddress)
// Do the thing
require.NoError(t, ec.EnsureConfirmedTransactionsInLongestChain(tests.Context(t), &head))
etx, err := txStore.FindTxWithAttempts(ctx, etx.ID)
require.NoError(t, err)
assert.Equal(t, txmgrcommon.TxUnconfirmed, etx.State)
})`
$DIR/core/chains/evm/txmgr/confirmer_test.go: `t.Run("does nothing to confirmed transactions with receipts within head height of the chain and included in the chain", func(t *testing.T) {
etx := cltest.MustInsertConfirmedEthTxWithLegacyAttempt(t, txStore, 2, 1, fromAddress)
mustInsertEthReceipt(t, txStore, head.Number, head.Hash, etx.TxAttempts[0].Hash)
// Do the thing
require.NoError(t, ec.EnsureConfirmedTransactionsInLongestChain(tests.Context(t), &head))
etx, err := txStore.FindTxWithAttempts(ctx, etx.ID)
require.NoError(t, err)
assert.Equal(t, txmgrcommon.TxConfirmed, etx.State)
})`
$DIR/core/chains/evm/txmgr/confirmer_test.go: `mustInsertEthReceipt(t, txStore, head.Number, head.Hash, etx.TxAttempts[0].Hash)`
$DIR/core/chains/evm/txmgr/confirmer_test.go: `t.Run("does nothing to confirmed transactions that only have receipts older than the start of the chain", func(t *testing.T) {
etx := cltest.MustInsertConfirmedEthTxWithLegacyAttempt(t, txStore, 3, 1, fromAddress)
// Add receipt that is older than the lowest block of the chain
mustInsertEthReceipt(t, txStore, head.Parent.Parent.Number-1, testutils.NewHash(), etx.TxAttempts[0].Hash)
// Do the thing
require.NoError(t, ec.EnsureConfirmedTransactionsInLongestChain(tests.Context(t), &head))
etx, err := txStore.FindTxWithAttempts(ctx, etx.ID)
require.NoError(t, err)
assert.Equal(t, txmgrcommon.TxConfirmed, etx.State)
})`
$DIR/core/chains/evm/txmgr/confirmer_test.go: `mustInsertEthReceipt(t, txStore, head.Parent.Parent.Number-1, testutils.NewHash(), etx.TxAttempts[0].Hash)`
$DIR/core/chains/evm/txmgr/confirmer_test.go: `t.Run("unconfirms and rebroadcasts transactions that have receipts within head height of the chain but not included in the chain", func(t *testing.T) {
etx := cltest.MustInsertConfirmedEthTxWithLegacyAttempt(t, txStore, 4, 1, fromAddress)
attempt := etx.TxAttempts[0]
// Include one within head height but a different block hash
mustInsertEthReceipt(t, txStore, head.Parent.Number, testutils.NewHash(), attempt.Hash)
ethClient.On("SendTransactionReturnCode", mock.Anything, mock.MatchedBy(func(tx *types.Transaction) bool {
atx, err := txmgr.GetGethSignedTx(attempt.SignedRawTx)
require.NoError(t, err)
// Keeps gas price and nonce the same
return atx.GasPrice().Cmp(tx.GasPrice()) == 0 && atx.Nonce() == tx.Nonce()
}), fromAddress).Return(commonclient.Successful, nil).Once()
// Do the thing
require.NoError(t, ec.EnsureConfirmedTransactionsInLongestChain(tests.Context(t), &head))
etx, err := txStore.FindTxWithAttempts(ctx, etx.ID)
require.NoError(t, err)
assert.Equal(t, txmgrcommon.TxUnconfirmed, etx.State)
require.Len(t, etx.TxAttempts, 1)
attempt = etx.TxAttempts[0]
assert.Equal(t, txmgrtypes.TxAttemptBroadcast, attempt.State)
})`
$DIR/core/chains/evm/txmgr/confirmer_test.go: `mustInsertEthReceipt(t, txStore, head.Parent.Number, testutils.NewHash(), attempt.Hash)`
$DIR/core/chains/evm/txmgr/confirmer_test.go: `ethClient.On("SendTransactionReturnCode", mock.Anything, mock.MatchedBy(func(tx *types.Transaction) bool {
atx, err := txmgr.GetGethSignedTx(attempt.SignedRawTx)
require.NoError(t, err)
// Keeps gas price and nonce the same
return atx.GasPrice().Cmp(tx.GasPrice()) == 0 && atx.Nonce() == tx.Nonce()
}), fromAddress).Return(commonclient.Successful, nil).Once()`
$DIR/core/chains/evm/txmgr/confirmer_test.go: `attempt = etx.TxAttempts[0]`
$DIR/core/chains/evm/txmgr/confirmer_test.go: `t.Run("unconfirms and rebroadcasts transactions that have receipts within head height of chain but not included in the chain even if a receipt exists older than the start of the chain", func(t *testing.T) {
etx := cltest.MustInsertConfirmedEthTxWithLegacyAttempt(t, txStore, 5, 1, fromAddress)
attempt := etx.TxAttempts[0]
attemptHash := attempt.Hash
// Add receipt that is older than the lowest block of the chain
mustInsertEthReceipt(t, txStore, head.Parent.Parent.Number-1, testutils.NewHash(), attemptHash)
// Include one within head height but a different block hash
mustInsertEthReceipt(t, txStore, head.Parent.Number, testutils.NewHash(), attemptHash)
ethClient.On("SendTransactionReturnCode", mock.Anything, mock.Anything, fromAddress).Return(
commonclient.Successful, nil).Once()
// Do the thing
require.NoError(t, ec.EnsureConfirmedTransactionsInLongestChain(tests.Context(t), &head))
etx, err := txStore.FindTxWithAttempts(ctx, etx.ID)
require.NoError(t, err)
assert.Equal(t, txmgrcommon.TxUnconfirmed, etx.State)
require.Len(t, etx.TxAttempts, 1)
attempt = etx.TxAttempts[0]
assert.Equal(t, txmgrtypes.TxAttemptBroadcast, attempt.State)
})`
$DIR/core/chains/evm/txmgr/confirmer_test.go: `mustInsertEthReceipt(t, txStore, head.Parent.Parent.Number-1, testutils.NewHash(), attemptHash)`
$DIR/core/chains/evm/txmgr/confirmer_test.go: `mustInsertEthReceipt(t, txStore, head.Parent.Number, testutils.NewHash(), attemptHash)`
$DIR/core/chains/evm/txmgr/confirmer_test.go: `ethClient.On("SendTransactionReturnCode", mock.Anything, mock.Anything, fromAddress).Return(
commonclient.Successful, nil).Once()`
$DIR/core/chains/evm/txmgr/confirmer_test.go: `attempt = etx.TxAttempts[0]`
$DIR/core/chains/evm/txmgr/confirmer_test.go: `t.Run("if more than one attempt has a receipt (should not be possible but isn't prevented by database constraints) unconfirms and rebroadcasts only the attempt with the highest gas price", func(t *testing.T) {
etx := cltest.MustInsertConfirmedEthTxWithLegacyAttempt(t, txStore, 6, 1, fromAddress)
require.Len(t, etx.TxAttempts, 1)
// Sanity check to assert the included attempt has the lowest gas price
require.Less(t, etx.TxAttempts[0].TxFee.Legacy.ToInt().Int64(), int64(30000))
attempt2 := newBroadcastLegacyEthTxAttempt(t, etx.ID, 30000)
attempt2.SignedRawTx = hexutil.MustDecode("0xf88c8301f3a98503b9aca000832ab98094f5fff180082d6017036b771ba883025c654bc93580a4daa6d556000000000000000000000000000000000000000000000000000000000000000026a0f25601065ee369b6470c0399a2334afcfbeb0b5c8f3d9a9042e448ed29b5bcbda05b676e00248b85faf4dd889f0e2dcf91eb867e23ac9eeb14a73f9e4c14972cdf")
attempt3 := newBroadcastLegacyEthTxAttempt(t, etx.ID, 40000)
attempt3.SignedRawTx = hexutil.MustDecode("0xf88c8301f3a88503b9aca0008316e36094151445852b0cfdf6a4cc81440f2af99176e8ad0880a4daa6d556000000000000000000000000000000000000000000000000000000000000000026a0dcb5a7ad52b96a866257134429f944c505820716567f070e64abb74899803855a04c13eff2a22c218e68da80111e1bb6dc665d3dea7104ab40ff8a0275a99f630d")
require.NoError(t, txStore.InsertTxAttempt(ctx, &attempt2))
require.NoError(t, txStore.InsertTxAttempt(ctx, &attempt3))
// Receipt is within head height but a different block hash
mustInsertEthReceipt(t, txStore, head.Parent.Number, testutils.NewHash(), attempt2.Hash)
// Receipt is within head height but a different block hash
mustInsertEthReceipt(t, txStore, head.Parent.Number, testutils.NewHash(), attempt3.Hash)
ethClient.On("SendTransactionReturnCode", mock.Anything, mock.MatchedBy(func(tx *types.Transaction) bool {
s, err := txmgr.GetGethSignedTx(attempt3.SignedRawTx)
require.NoError(t, err)
return tx.Hash() == s.Hash()
}), fromAddress).Return(commonclient.Successful, nil).Once()
// Do the thing
require.NoError(t, ec.EnsureConfirmedTransactionsInLongestChain(tests.Context(t), &head))
etx, err := txStore.FindTxWithAttempts(ctx, etx.ID)
require.NoError(t, err)
assert.Equal(t, txmgrcommon.TxUnconfirmed, etx.State)
require.Len(t, etx.TxAttempts, 3)
attempt1 := etx.TxAttempts[0]
assert.Equal(t, txmgrtypes.TxAttemptBroadcast, attempt1.State)
attempt2 = etx.TxAttempts[1]
assert.Equal(t, txmgrtypes.TxAttemptBroadcast, attempt2.State)
attempt3 = etx.TxAttempts[2]
assert.Equal(t, txmgrtypes.TxAttemptBroadcast, attempt3.State)
})`
$DIR/core/chains/evm/txmgr/confirmer_test.go: `attempt2.SignedRawTx = hexutil.MustDecode("0xf88c8301f3a98503b9aca000832ab98094f5fff180082d6017036b771ba883025c654bc93580a4daa6d556000000000000000000000000000000000000000000000000000000000000000026a0f25601065ee369b6470c0399a2334afcfbeb0b5c8f3d9a9042e448ed29b5bcbda05b676e00248b85faf4dd889f0e2dcf91eb867e23ac9eeb14a73f9e4c14972cdf")`
$DIR/core/chains/evm/txmgr/confirmer_test.go: `attempt3.SignedRawTx = hexutil.MustDecode("0xf88c8301f3a88503b9aca0008316e36094151445852b0cfdf6a4cc81440f2af99176e8ad0880a4daa6d556000000000000000000000000000000000000000000000000000000000000000026a0dcb5a7ad52b96a866257134429f944c505820716567f070e64abb74899803855a04c13eff2a22c218e68da80111e1bb6dc665d3dea7104ab40ff8a0275a99f630d")`
$DIR/core/chains/evm/txmgr/confirmer_test.go: `mustInsertEthReceipt(t, txStore, head.Parent.Number, testutils.NewHash(), attempt2.Hash)`
$DIR/core/chains/evm/txmgr/confirmer_test.go: `mustInsertEthReceipt(t, txStore, head.Parent.Number, testutils.NewHash(), attempt3.Hash)`
$DIR/core/chains/evm/txmgr/confirmer_test.go: `ethClient.On("SendTransactionReturnCode", mock.Anything, mock.MatchedBy(func(tx *types.Transaction) bool {
s, err := txmgr.GetGethSignedTx(attempt3.SignedRawTx)
require.NoError(t, err)
return tx.Hash() == s.Hash()
}), fromAddress).Return(commonclient.Successful, nil).Once()`
$DIR/core/chains/evm/txmgr/confirmer_test.go: `attempt2 = etx.TxAttempts[1]`
$DIR/core/chains/evm/txmgr/confirmer_test.go: `attempt3 = etx.TxAttempts[2]`
$DIR/core/chains/evm/txmgr/confirmer_test.go: `mustInsertEthReceipt(t, txStore, head.Number+1, testutils.NewHash(), attempt.Hash)`
$DIR/core/chains/evm/txmgr/confirmer_test.go: `attempt = etx.TxAttempts[0]`
$DIR/core/chains/evm/txmgr/confirmer_test.go: `mustCreateUnstartedGeneratedTx(t, txStore, fromAddress, config.EVM().ChainID())`
$DIR/core/chains/evm/txmgr/confirmer_test.go: `mustInsertInProgressEthTx(t, txStore, 0, fromAddress)`
$DIR/core/chains/evm/txmgr/confirmer_test.go: `t.Run("rebroadcasts one eth_tx if it falls within in nonce range", func(t *testing.T) {
ethClient := testutils.NewEthClientMockWithDefaultChain(t)
ec := newEthConfirmer(t, txStore, ethClient, gconfig, config, ethKeyStore, nil)
ethClient.On("SendTransactionReturnCode", mock.Anything, mock.MatchedBy(func(tx *types.Transaction) bool {
return tx.Nonce() == uint64(*etx1.Sequence) &&
tx.GasPrice().Int64() == gasPriceWei.Legacy.Int64() &&
tx.Gas() == overrideGasLimit &&
reflect.DeepEqual(tx.Data(), etx1.EncodedPayload) &&
tx.To().String() == etx1.ToAddress.String()
}), mock.Anything).Return(commonclient.Successful, nil).Once()
require.NoError(t, ec.ForceRebroadcast(tests.Context(t), []evmtypes.Nonce{1}, gasPriceWei, fromAddress, overrideGasLimit))
})`
$DIR/core/chains/evm/txmgr/confirmer_test.go: `ethClient.On("SendTransactionReturnCode", mock.Anything, mock.MatchedBy(func(tx *types.Transaction) bool {
return tx.Nonce() == uint64(*etx1.Sequence) &&
tx.GasPrice().Int64() == gasPriceWei.Legacy.Int64() &&
tx.Gas() == overrideGasLimit &&
reflect.DeepEqual(tx.Data(), etx1.EncodedPayload) &&
tx.To().String() == etx1.ToAddress.String()
}), mock.Anything).Return(commonclient.Successful, nil).Once()`
$DIR/core/chains/evm/txmgr/confirmer_test.go: `t.Run("uses default gas limit if overrideGasLimit is 0", func(t *testing.T) {
ethClient := testutils.NewEthClientMockWithDefaultChain(t)
ec := newEthConfirmer(t, txStore, ethClient, gconfig, config, ethKeyStore, nil)
ethClient.On("SendTransactionReturnCode", mock.Anything, mock.MatchedBy(func(tx *types.Transaction) bool {
return tx.Nonce() == uint64(*etx1.Sequence) &&
tx.GasPrice().Int64() == gasPriceWei.Legacy.Int64() &&
tx.Gas() == etx1.FeeLimit &&
reflect.DeepEqual(tx.Data(), etx1.EncodedPayload) &&
tx.To().String() == etx1.ToAddress.String()
}), mock.Anything).Return(commonclient.Successful, nil).Once()
require.NoError(t, ec.ForceRebroadcast(tests.Context(t), []evmtypes.Nonce{(1)}, gasPriceWei, fromAddress, 0))
})`
$DIR/core/chains/evm/txmgr/confirmer_test.go: `ethClient.On("SendTransactionReturnCode", mock.Anything, mock.MatchedBy(func(tx *types.Transaction) bool {
return tx.Nonce() == uint64(*etx1.Sequence) &&
tx.GasPrice().Int64() == gasPriceWei.Legacy.Int64() &&
tx.Gas() == etx1.FeeLimit &&
reflect.DeepEqual(tx.Data(), etx1.EncodedPayload) &&
tx.To().String() == etx1.ToAddress.String()
}), mock.Anything).Return(commonclient.Successful, nil).Once()`
$DIR/core/chains/evm/txmgr/confirmer_test.go: `t.Run("rebroadcasts several eth_txes in nonce range", func(t *testing.T) {
ethClient := testutils.NewEthClientMockWithDefaultChain(t)
ec := newEthConfirmer(t, txStore, ethClient, gconfig, config, ethKeyStore, nil)
ethClient.On("SendTransactionReturnCode", mock.Anything, mock.MatchedBy(func(tx *types.Transaction) bool {
return tx.Nonce() == uint64(*etx1.Sequence) && tx.GasPrice().Int64() == gasPriceWei.Legacy.Int64() && tx.Gas() == overrideGasLimit
}), mock.Anything).Return(commonclient.Successful, nil).Once()
ethClient.On("SendTransactionReturnCode", mock.Anything, mock.MatchedBy(func(tx *types.Transaction) bool {
return tx.Nonce() == uint64(*etx2.Sequence) && tx.GasPrice().Int64() == gasPriceWei.Legacy.Int64() && tx.Gas() == overrideGasLimit
}), mock.Anything).Return(commonclient.Successful, nil).Once()
require.NoError(t, ec.ForceRebroadcast(tests.Context(t), []evmtypes.Nonce{(1), (2)}, gasPriceWei, fromAddress, overrideGasLimit))
})`
$DIR/core/chains/evm/txmgr/confirmer_test.go: `ethClient.On("SendTransactionReturnCode", mock.Anything, mock.MatchedBy(func(tx *types.Transaction) bool {
return tx.Nonce() == uint64(*etx1.Sequence) && tx.GasPrice().Int64() == gasPriceWei.Legacy.Int64() && tx.Gas() == overrideGasLimit
}), mock.Anything).Return(commonclient.Successful, nil).Once()`
$DIR/core/chains/evm/txmgr/confirmer_test.go: `ethClient.On("SendTransactionReturnCode", mock.Anything, mock.MatchedBy(func(tx *types.Transaction) bool {
return tx.Nonce() == uint64(*etx2.Sequence) && tx.GasPrice().Int64() == gasPriceWei.Legacy.Int64() && tx.Gas() == overrideGasLimit
}), mock.Anything).Return(commonclient.Successful, nil).Once()`
$DIR/core/chains/evm/txmgr/confirmer_test.go: `t.Run("broadcasts zero transactions if eth_tx doesn't exist for that nonce", func(t *testing.T) {
ethClient := testutils.NewEthClientMockWithDefaultChain(t)
ec := newEthConfirmer(t, txStore, ethClient, gconfig, config, ethKeyStore, nil)
ethClient.On("SendTransactionReturnCode", mock.Anything, mock.MatchedBy(func(tx *types.Transaction) bool {
return tx.Nonce() == uint64(1)
}), mock.Anything).Return(commonclient.Successful, nil).Once()
ethClient.On("SendTransactionReturnCode", mock.Anything, mock.MatchedBy(func(tx *types.Transaction) bool {
return tx.Nonce() == uint64(2)
}), mock.Anything).Return(commonclient.Successful, nil).Once()
for i := 3; i <= 5; i++ {
nonce := i
ethClient.On("SendTransactionReturnCode", mock.Anything, mock.MatchedBy(func(tx *types.Transaction) bool {
return tx.Nonce() == uint64(nonce) &&
tx.GasPrice().Int64() == gasPriceWei.Legacy.Int64() &&
tx.Gas() == overrideGasLimit &&
*tx.To() == fromAddress &&
tx.Value().Cmp(big.NewInt(0)) == 0 &&
len(tx.Data()) == 0
}), mock.Anything).Return(commonclient.Successful, nil).Once()
}
nonces := []evmtypes.Nonce{(1), (2), (3), (4), (5)}
require.NoError(t, ec.ForceRebroadcast(tests.Context(t), nonces, gasPriceWei, fromAddress, overrideGasLimit))
})`
$DIR/core/chains/evm/txmgr/confirmer_test.go: `ethClient.On("SendTransactionReturnCode", mock.Anything, mock.MatchedBy(func(tx *types.Transaction) bool {
return tx.Nonce() == uint64(1)
}), mock.Anything).Return(commonclient.Successful, nil).Once()`
$DIR/core/chains/evm/txmgr/confirmer_test.go: `ethClient.On("SendTransactionReturnCode", mock.Anything, mock.MatchedBy(func(tx *types.Transaction) bool {
return tx.Nonce() == uint64(2)
}), mock.Anything).Return(commonclient.Successful, nil).Once()`
$DIR/core/chains/evm/txmgr/confirmer_test.go: `ethClient.On("SendTransactionReturnCode", mock.Anything, mock.MatchedBy(func(tx *types.Transaction) bool {
return tx.Nonce() == uint64(nonce) &&
tx.GasPrice().Int64() == gasPriceWei.Legacy.Int64() &&
tx.Gas() == overrideGasLimit &&
*tx.To() == fromAddress &&
tx.Value().Cmp(big.NewInt(0)) == 0 &&
len(tx.Data()) == 0
}), mock.Anything).Return(commonclient.Successful, nil).Once()`
$DIR/core/chains/evm/txmgr/confirmer_test.go: `ethClient.On("SendTransactionReturnCode", mock.Anything, mock.MatchedBy(func(tx *types.Transaction) bool {
return tx.Nonce() == uint64(0) && tx.GasPrice().Int64() == gasPriceWei.Legacy.Int64() && tx.Gas() == config.EVM().GasEstimator().LimitDefault()
}), mock.Anything).Return(commonclient.Successful, nil).Once()`
$DIR/core/chains/evm/txmgr/confirmer_test.go: `pgtest.MustExec(t, db, `SET CONSTRAINTS fk_pipeline_runs_pruning_key DEFERRED`)`
$DIR/core/chains/evm/txmgr/confirmer_test.go: `pgtest.MustExec(t, db, `SET CONSTRAINTS pipeline_runs_pipeline_spec_id_fkey DEFERRED`)`
$DIR/core/chains/evm/txmgr/confirmer_test.go: `t.Run("doesn't process task runs that are not suspended (possibly already previously resumed)", func(t *testing.T) {
ec := newEthConfirmer(t, txStore, ethClient, config, evmcfg, ethKeyStore, func(context.Context, uuid.UUID, interface{}, error) error {
t.Fatal("No value expected")
return nil
})
run := cltest.MustInsertPipelineRun(t, db)
tr := cltest.MustInsertUnfinishedPipelineTaskRun(t, db, run.ID)
etx := cltest.MustInsertConfirmedEthTxWithLegacyAttempt(t, txStore, 1, 1, fromAddress)
mustInsertEthReceipt(t, txStore, head.Number-minConfirmations, head.Hash, etx.TxAttempts[0].Hash)
// Setting both signal_callback and callback_completed to TRUE to simulate a completed pipeline task
// It would only be in a state past suspended if the resume callback was called and callback_completed was set to TRUE
pgtest.MustExec(t, db, `UPDATE evm.txes SET pipeline_task_run_id = $1, min_confirmations = $2, signal_callback = TRUE, callback_completed = TRUE WHERE id = $3`, &tr.ID, minConfirmations, etx.ID)
err := ec.ResumePendingTaskRuns(tests.Context(t), &head)
require.NoError(t, err)
})`
$DIR/core/chains/evm/txmgr/confirmer_test.go: `mustInsertEthReceipt(t, txStore, head.Number-minConfirmations, head.Hash, etx.TxAttempts[0].Hash)`
$DIR/core/chains/evm/txmgr/confirmer_test.go: `pgtest.MustExec(t, db, `UPDATE evm.txes SET pipeline_task_run_id = $1, min_confirmations = $2, signal_callback = TRUE, callback_completed = TRUE WHERE id = $3`, &tr.ID, minConfirmations, etx.ID)`
$DIR/core/chains/evm/txmgr/confirmer_test.go: `t.Run("doesn't process task runs where the receipt is younger than minConfirmations", func(t *testing.T) {
ec := newEthConfirmer(t, txStore, ethClient, config, evmcfg, ethKeyStore, func(context.Context, uuid.UUID, interface{}, error) error {
t.Fatal("No value expected")
return nil
})
run := cltest.MustInsertPipelineRun(t, db)
tr := cltest.MustInsertUnfinishedPipelineTaskRun(t, db, run.ID)
etx := cltest.MustInsertConfirmedEthTxWithLegacyAttempt(t, txStore, 2, 1, fromAddress)
mustInsertEthReceipt(t, txStore, head.Number, head.Hash, etx.TxAttempts[0].Hash)
pgtest.MustExec(t, db, `UPDATE evm.txes SET pipeline_task_run_id = $1, min_confirmations = $2, signal_callback = TRUE WHERE id = $3`, &tr.ID, minConfirmations, etx.ID)
err := ec.ResumePendingTaskRuns(tests.Context(t), &head)
require.NoError(t, err)
})`
$DIR/core/chains/evm/txmgr/confirmer_test.go: `mustInsertEthReceipt(t, txStore, head.Number, head.Hash, etx.TxAttempts[0].Hash)`
$DIR/core/chains/evm/txmgr/confirmer_test.go: `pgtest.MustExec(t, db, `UPDATE evm.txes SET pipeline_task_run_id = $1, min_confirmations = $2, signal_callback = TRUE WHERE id = $3`, &tr.ID, minConfirmations, etx.ID)`
$DIR/core/chains/evm/txmgr/confirmer_test.go: `t.Run("processes eth_txes with receipts older than minConfirmations", func(t *testing.T) {
ch := make(chan interface{})
nonce := evmtypes.Nonce(3)
var err error
ec := newEthConfirmer(t, txStore, ethClient, config, evmcfg, ethKeyStore, func(ctx context.Context, id uuid.UUID, value interface{}, thisErr error) error {
err = thisErr
ch <- value
return nil
})
run := cltest.MustInsertPipelineRun(t, db)
tr := cltest.MustInsertUnfinishedPipelineTaskRun(t, db, run.ID)
pgtest.MustExec(t, db, `UPDATE pipeline_runs SET state = 'suspended' WHERE id = $1`, run.ID)
etx := cltest.MustInsertConfirmedEthTxWithLegacyAttempt(t, txStore, int64(nonce), 1, fromAddress)
pgtest.MustExec(t, db, `UPDATE evm.txes SET meta='{"FailOnRevert": true}'`)
receipt := mustInsertEthReceipt(t, txStore, head.Number-minConfirmations, head.Hash, etx.TxAttempts[0].Hash)
pgtest.MustExec(t, db, `UPDATE evm.txes SET pipeline_task_run_id = $1, min_confirmations = $2, signal_callback = TRUE WHERE id = $3`, &tr.ID, minConfirmations, etx.ID)
done := make(chan struct{})
t.Cleanup(func() { <-done })
go func() {
defer close(done)
err2 := ec.ResumePendingTaskRuns(tests.Context(t), &head)
if !assert.NoError(t, err2) {
return
}
// Retrieve Tx to check if callback completed flag was set to true
updateTx, err3 := txStore.FindTxWithSequence(tests.Context(t), fromAddress, nonce)
if assert.NoError(t, err3) {
assert.Equal(t, true, updateTx.CallbackCompleted)
}
}()
select {
case data := <-ch:
assert.NoError(t, err)
require.IsType(t, &evmtypes.Receipt{}, data)
r := data.(*evmtypes.Receipt)
require.Equal(t, receipt.TxHash, r.TxHash)
case <-time.After(time.Second):
t.Fatal("no value received")
}
})`
$DIR/core/chains/evm/txmgr/confirmer_test.go: `err = thisErr`
$DIR/core/chains/evm/txmgr/confirmer_test.go: `ch <- value`
$DIR/core/chains/evm/txmgr/confirmer_test.go: `pgtest.MustExec(t, db, `UPDATE pipeline_runs SET state = 'suspended' WHERE id = $1`, run.ID)`
$DIR/core/chains/evm/txmgr/confirmer_test.go: `pgtest.MustExec(t, db, `UPDATE evm.txes SET meta='{"FailOnRevert": true}'`)`
$DIR/core/chains/evm/txmgr/confirmer_test.go: `pgtest.MustExec(t, db, `UPDATE evm.txes SET pipeline_task_run_id = $1, min_confirmations = $2, signal_callback = TRUE WHERE id = $3`, &tr.ID, minConfirmations, etx.ID)`
$DIR/core/chains/evm/txmgr/confirmer_test.go: `t.Cleanup(func() { <-done })`
$DIR/core/chains/evm/txmgr/confirmer_test.go: `<-done`
$DIR/core/chains/evm/txmgr/confirmer_test.go: `pgtest.MustExec(t, db, `DELETE FROM pipeline_runs`)`
$DIR/core/chains/evm/txmgr/confirmer_test.go: `t.Run("processes eth_txes with receipt older than minConfirmations that reverted", func(t *testing.T) {
type data struct {
value any
error
}
ch := make(chan data)
nonce := evmtypes.Nonce(4)
ec := newEthConfirmer(t, txStore, ethClient, config, evmcfg, ethKeyStore, func(ctx context.Context, id uuid.UUID, value interface{}, err error) error {
ch <- data{value, err}
return nil
})
run := cltest.MustInsertPipelineRun(t, db)
tr := cltest.MustInsertUnfinishedPipelineTaskRun(t, db, run.ID)
pgtest.MustExec(t, db, `UPDATE pipeline_runs SET state = 'suspended' WHERE id = $1`, run.ID)
etx := cltest.MustInsertConfirmedEthTxWithLegacyAttempt(t, txStore, int64(nonce), 1, fromAddress)
pgtest.MustExec(t, db, `UPDATE evm.txes SET meta='{"FailOnRevert": true}'`)
// receipt is not passed through as a value since it reverted and caused an error
mustInsertRevertedEthReceipt(t, txStore, head.Number-minConfirmations, head.Hash, etx.TxAttempts[0].Hash)
pgtest.MustExec(t, db, `UPDATE evm.txes SET pipeline_task_run_id = $1, min_confirmations = $2, signal_callback = TRUE WHERE id = $3`, &tr.ID, minConfirmations, etx.ID)
done := make(chan struct{})
t.Cleanup(func() { <-done })
go func() {
defer close(done)
err2 := ec.ResumePendingTaskRuns(tests.Context(t), &head)
if !assert.NoError(t, err2) {
return
}
// Retrieve Tx to check if callback completed flag was set to true
updateTx, err3 := txStore.FindTxWithSequence(tests.Context(t), fromAddress, nonce)
if assert.NoError(t, err3) {
assert.Equal(t, true, updateTx.CallbackCompleted)
}
}()
select {
case data := <-ch:
assert.Error(t, data.error)
assert.EqualError(t, data.error, fmt.Sprintf("transaction %s reverted on-chain", etx.TxAttempts[0].Hash.String()))
assert.Nil(t, data.value)
case <-time.After(tests.WaitTimeout(t)):
t.Fatal("no value received")
}
})`
$DIR/core/chains/evm/txmgr/confirmer_test.go: `ch <- data{value, err}`
$DIR/core/chains/evm/txmgr/confirmer_test.go: `pgtest.MustExec(t, db, `UPDATE pipeline_runs SET state = 'suspended' WHERE id = $1`, run.ID)`
$DIR/core/chains/evm/txmgr/confirmer_test.go: `pgtest.MustExec(t, db, `UPDATE evm.txes SET meta='{"FailOnRevert": true}'`)`
$DIR/core/chains/evm/txmgr/confirmer_test.go: `mustInsertRevertedEthReceipt(t, txStore, head.Number-minConfirmations, head.Hash, etx.TxAttempts[0].Hash)`
$DIR/core/chains/evm/txmgr/confirmer_test.go: `pgtest.MustExec(t, db, `UPDATE evm.txes SET pipeline_task_run_id = $1, min_confirmations = $2, signal_callback = TRUE WHERE id = $3`, &tr.ID, minConfirmations, etx.ID)`
$DIR/core/chains/evm/txmgr/confirmer_test.go: `t.Cleanup(func() { <-done })`
$DIR/core/chains/evm/txmgr/confirmer_test.go: `<-done`
$DIR/core/chains/evm/txmgr/confirmer_test.go: `mustInsertEthReceipt(t, txStore, head.Number-minConfirmations, head.Hash, etx.TxAttempts[0].Hash)`
$DIR/core/chains/evm/txmgr/confirmer_test.go: `pgtest.MustExec(t, db, `UPDATE evm.txes SET pipeline_task_run_id = $1, min_confirmations = $2, signal_callback = TRUE WHERE id = $3`, &tr.ID, minConfirmations, etx.ID)`
$DIR/core/chains/evm/txmgr/confirmer_test.go: `ethClient.On("SendTransactionReturnCode", mock.Anything, mock.Anything, fromAddress).Return(commonclient.Successful, nil).Once()`
$DIR/core/chains/evm/txmgr/confirmer_test.go: `feeEstimator.On("GetFee", mock.Anything, []byte{}, uint64(0), mock.Anything).Return(fee, uint64(0), nil)`
$DIR/core/chains/evm/txmgr/confirmer_test.go: `feeEstimator.On("BumpFee", mock.Anything, mock.Anything, mock.Anything, mock.Anything, mock.Anything).Return(bumpedFee, uint64(10_000), nil)`
$DIR/core/chains/evm/txmgr/confirmer_test.go: `c.EVM[0].GasEstimator.LimitDefault = ptr(limitDefault)`
$DIR/core/chains/evm/txmgr/confirmer_test.go: `c.EVM[0].Transactions.AutoPurge.Enabled = ptr(true)`
$DIR/core/chains/evm/txmgr/confirmer_test.go: `c.EVM[0].Transactions.AutoPurge.Threshold = ptr(autoPurgeThreshold)`
$DIR/core/chains/evm/txmgr/confirmer_test.go: `c.EVM[0].Transactions.AutoPurge.MinAttempts = ptr(autoPurgeMinAttempts)`
$DIR/core/chains/evm/txmgr/confirmer_test.go: `servicetest.Run(t, ec)`
$DIR/core/chains/evm/txmgr/confirmer_test.go: `ethClient.On("SequenceAt", mock.Anything, mock.Anything, mock.Anything).Return(evmtypes.Nonce(0), nil).Once()`
$DIR/core/chains/evm/txmgr/confirmer_test.go: `ethClient.On("BatchCallContext", mock.Anything, mock.Anything).Return(nil).Once()`
$DIR/core/chains/evm/txmgr/confirmer_test.go: `head = evmtypes.Head{
Hash: testutils.NewHash(),
Number: blockNum + 1,
}`
$DIR/core/chains/evm/txmgr/confirmer_test.go: `ethClient.On("SequenceAt", mock.Anything, mock.Anything, mock.Anything).Return(evmtypes.Nonce(1), nil)`
$DIR/core/chains/evm/txmgr/confirmer_test.go: `ethClient.On("BatchCallContext", mock.Anything, mock.MatchedBy(func(b []rpc.BatchElem) bool {
return len(b) == 4 && cltest.BatchElemMatchesParams(b[0], latestAttempt.Hash, "eth_getTransactionReceipt")
})).Return(nil).Run(func(args mock.Arguments) {
elems := args.Get(1).([]rpc.BatchElem)
// First transaction confirmed
*(elems[0].Result.(*evmtypes.Receipt)) = evmtypes.Receipt{
TxHash: latestAttempt.Hash,
BlockHash: testutils.NewHash(),
BlockNumber: big.NewInt(blockNum + 1),
TransactionIndex: uint(1),
Status: uint64(1),
}
}).Once()`
$DIR/core/chains/evm/txmgr/confirmer_test.go: `*(elems[0].Result.(*evmtypes.Receipt)) = evmtypes.Receipt{
TxHash: latestAttempt.Hash,
BlockHash: testutils.NewHash(),
BlockNumber: big.NewInt(blockNum + 1),
TransactionIndex: uint(1),
Status: uint64(1),
}`
$DIR/core/chains/evm/txmgr/confirmer_test.go: `err = ec.ProcessHead(ctx, &head)`
$DIR/core/chains/evm/txmgr/confirmer_test.go: `dbTx, err = txStore.FindTxWithAttempts(ctx, tx.ID)`
$DIR/core/chains/evm/txmgr/confirmer_test.go: `.NewSqlxDB(t)`
$DIR/core/chains/evm/txmgr/confirmer_test.go: `.NewEthClientMockWithDefaultChain(t)`
$DIR/core/chains/evm/txmgr/confirmer_test.go: `.NewKeyStore(t, db)`
$DIR/core/chains/evm/txmgr/confirmer_test.go: `.Eth()`
$DIR/core/chains/evm/txmgr/confirmer_test.go: `.MustInsertRandomKey(t, ethKeyStore)`
$DIR/core/chains/evm/txmgr/confirmer_test.go: `.MustInsertRandomKey(t, ethKeyStore)`
$DIR/core/chains/evm/txmgr/confirmer_test.go: `.NewEvmEstimator(t)`
$DIR/core/chains/evm/txmgr/confirmer_test.go: `.Test(t)`
$DIR/core/chains/evm/txmgr/confirmer_test.go: `.EVM()`
$DIR/core/chains/evm/txmgr/confirmer_test.go: `.GasEstimator()`
$DIR/core/chains/evm/txmgr/confirmer_test.go: `.NewEvmFeeEstimator(lggr, newEst, ge.EIP1559DynamicFees(), ge)`
$DIR/core/chains/evm/txmgr/confirmer_test.go: `.EIP1559DynamicFees()`
$DIR/core/chains/evm/txmgr/confirmer_test.go: `.NewEvmTxAttemptBuilder(*ethClient.ConfiguredChainID(), ge, ethKeyStore, feeEstimator)`
$DIR/core/chains/evm/txmgr/confirmer_test.go: `.ConfiguredChainID()`
$DIR/core/chains/evm/txmgr/confirmer_test.go: `.NewStuckTxDetector(lggr, testutils.FixtureChainID, "", assets.NewWei(assets.NewEth(100).ToInt()), config.EVM().Transactions().AutoPurge(), feeEstimator, txStore, ethClient)`
$DIR/core/chains/evm/txmgr/confirmer_test.go: `.NewWei(assets.NewEth(100).ToInt())`
$DIR/core/chains/evm/txmgr/confirmer_test.go: `.NewEth(100)`
$DIR/core/chains/evm/txmgr/confirmer_test.go: `.ToInt()`
$DIR/core/chains/evm/txmgr/confirmer_test.go: `.EVM()`
$DIR/core/chains/evm/txmgr/confirmer_test.go: `.Transactions()`
$DIR/core/chains/evm/txmgr/confirmer_test.go: `.AutoPurge()`
$DIR/core/chains/evm/txmgr/confirmer_test.go: `.NewEvmConfirmer(txStore, txmgr.NewEvmTxmClient(ethClient, nil), txmgr.NewEvmTxmConfig(config.EVM()), txmgr.NewEvmTxmFeeConfig(ge), config.EVM().Transactions(), gconfig.Database(), ethKeyStore, txBuilder, lggr, stuckTxDetector)`
$DIR/core/chains/evm/txmgr/confirmer_test.go: `.NewEvmTxmClient(ethClient, nil)`
$DIR/core/chains/evm/txmgr/confirmer_test.go: `.NewEvmTxmConfig(config.EVM())`
$DIR/core/chains/evm/txmgr/confirmer_test.go: `.EVM()`
$DIR/core/chains/evm/txmgr/confirmer_test.go: `.NewEvmTxmFeeConfig(ge)`
$DIR/core/chains/evm/txmgr/confirmer_test.go: `.EVM()`
$DIR/core/chains/evm/txmgr/confirmer_test.go: `.Transactions()`
$DIR/core/chains/evm/txmgr/confirmer_test.go: `.Database()`
$DIR/core/chains/evm/txmgr/confirmer_test.go: `.Context(t)`
$DIR/core/chains/evm/txmgr/confirmer_test.go: `.Start(ctx)`
$DIR/core/chains/evm/txmgr/confirmer_test.go: `.Start(ctx)`
$DIR/core/chains/evm/txmgr/confirmer_test.go: `.NewHash()`
$DIR/core/chains/evm/txmgr/confirmer_test.go: `.NewHash()`
$DIR/core/chains/evm/txmgr/confirmer_test.go: `.NewHash()`
$DIR/core/chains/evm/txmgr/confirmer_test.go: `.ProcessHead(ctx, &head)`
$DIR/core/chains/evm/txmgr/confirmer_test.go: `.Start(ctx)`
$DIR/core/chains/evm/txmgr/confirmer_test.go: `.XXXTestCloseInternal()`
$DIR/core/chains/evm/txmgr/confirmer_test.go: `.NewSqlxDB(t)`
$DIR/core/chains/evm/txmgr/confirmer_test.go: `.NewTestTxStore(t, db)`
$DIR/core/chains/evm/txmgr/confirmer_test.go: `.NewEthClientMockWithDefaultChain(t)`
$DIR/core/chains/evm/txmgr/confirmer_test.go: `.NewKeyStore(t, db)`
$DIR/core/chains/evm/txmgr/confirmer_test.go: `.Eth()`
$DIR/core/chains/evm/txmgr/confirmer_test.go: `.MustInsertRandomKey(t, ethKeyStore)`
$DIR/core/chains/evm/txmgr/confirmer_test.go: `.Context(t)`
$DIR/core/chains/evm/txmgr/confirmer_test.go: `.Run("only finds eth_txes in unconfirmed state with at least one broadcast attempt", func(t *testing.T) {
mustInsertFatalErrorEthTx(t, txStore, fromAddress)
mustInsertInProgressEthTx(t, txStore, nonce, fromAddress)
nonce++
cltest.MustInsertConfirmedEthTxWithLegacyAttempt(t, txStore, nonce, 1, fromAddress)
nonce++
mustInsertUnconfirmedEthTxWithInsufficientEthAttempt(t, txStore, nonce, fromAddress)
nonce++
mustCreateUnstartedGeneratedTx(t, txStore, fromAddress, config.EVM().ChainID())
// Do the thing
require.NoError(t, ec.CheckForReceipts(ctx, blockNum))
})`
$DIR/core/chains/evm/txmgr/confirmer_test.go: `.MustInsertConfirmedEthTxWithLegacyAttempt(t, txStore, nonce, 1, fromAddress)`
$DIR/core/chains/evm/txmgr/confirmer_test.go: `.EVM()`
$DIR/core/chains/evm/txmgr/confirmer_test.go: `.ChainID()`
$DIR/core/chains/evm/txmgr/confirmer_test.go: `.MustInsertUnconfirmedEthTxWithBroadcastLegacyAttempt(t, txStore, nonce, fromAddress)`
$DIR/core/chains/evm/txmgr/confirmer_test.go: `.Run("fetches receipt for one unconfirmed eth_tx", func(t *testing.T) {
ethClient.On("SequenceAt", mock.Anything, mock.Anything, mock.Anything).Return(evmtypes.Nonce(10), nil)
// Transaction not confirmed yet, receipt is nil
ethClient.On("BatchCallContext", mock.Anything, mock.MatchedBy(func(b []rpc.BatchElem) bool {
return len(b) == 1 && cltest.BatchElemMatchesParams(b[0], hashAttempt1_1, "eth_getTransactionReceipt")
})).Return(nil).Run(func(args mock.Arguments) {
elems := args.Get(1).([]rpc.BatchElem)
elems[0].Result = &evmtypes.Receipt{}
}).Once()
// Do the thing
require.NoError(t, ec.CheckForReceipts(ctx, blockNum))
var err error
etx1, err = txStore.FindTxWithAttempts(ctx, etx1.ID)
assert.NoError(t, err)
require.Len(t, etx1.TxAttempts, 1)
attempt1_1 = etx1.TxAttempts[0]
require.NoError(t, err)
require.Len(t, attempt1_1.Receipts, 0)
})`
$DIR/core/chains/evm/txmgr/confirmer_test.go: `.On("SequenceAt", mock.Anything, mock.Anything, mock.Anything)`
$DIR/core/chains/evm/txmgr/confirmer_test.go: `.Return(evmtypes.Nonce(10), nil)`
$DIR/core/chains/evm/txmgr/confirmer_test.go: `.Nonce(10)`
$DIR/core/chains/evm/txmgr/confirmer_test.go: `.On("BatchCallContext", mock.Anything, mock.MatchedBy(func(b []rpc.BatchElem) bool {
return len(b) == 1 && cltest.BatchElemMatchesParams(b[0], hashAttempt1_1, "eth_getTransactionReceipt")
}))`
$DIR/core/chains/evm/txmgr/confirmer_test.go: `.MatchedBy(func(b []rpc.BatchElem) bool {
return len(b) == 1 && cltest.BatchElemMatchesParams(b[0], hashAttempt1_1, "eth_getTransactionReceipt")
})`
$DIR/core/chains/evm/txmgr/confirmer_test.go: `.BatchElemMatchesParams(b[0], hashAttempt1_1, "eth_getTransactionReceipt")`
$DIR/core/chains/evm/txmgr/confirmer_test.go: `.Return(nil)`
$DIR/core/chains/evm/txmgr/confirmer_test.go: `.Run(func(args mock.Arguments) {
elems := args.Get(1).([]rpc.BatchElem)
elems[0].Result = &evmtypes.Receipt{}
})`
$DIR/core/chains/evm/txmgr/confirmer_test.go: `.Get(1)`
$DIR/core/chains/evm/txmgr/confirmer_test.go: `.Once()`
$DIR/core/chains/evm/txmgr/confirmer_test.go: `.FindTxWithAttempts(ctx, etx1.ID)`
$DIR/core/chains/evm/txmgr/confirmer_test.go: `.Run("saves nothing if returned receipt does not match the attempt", func(t *testing.T) {
txmReceipt := evmtypes.Receipt{
TxHash: testutils.NewHash(),
BlockHash: testutils.NewHash(),
BlockNumber: big.NewInt(42),
TransactionIndex: uint(1),
}
ethClient.On("SequenceAt", mock.Anything, mock.Anything, mock.Anything).Return(evmtypes.Nonce(10), nil)
// First transaction confirmed
ethClient.On("BatchCallContext", mock.Anything, mock.MatchedBy(func(b []rpc.BatchElem) bool {
return len(b) == 1 && cltest.BatchElemMatchesParams(b[0], hashAttempt1_1, "eth_getTransactionReceipt")
})).Return(nil).Run(func(args mock.Arguments) {
elems := args.Get(1).([]rpc.BatchElem)
*(elems[0].Result.(*evmtypes.Receipt)) = txmReceipt
}).Once()
// No error because it is merely logged
require.NoError(t, ec.CheckForReceipts(ctx, blockNum))
etx, err := txStore.FindTxWithAttempts(ctx, etx1.ID)
require.NoError(t, err)
require.Len(t, etx.TxAttempts, 1)
require.Len(t, etx.TxAttempts[0].Receipts, 0)
})`
$DIR/core/chains/evm/txmgr/confirmer_test.go: `.NewHash()`
$DIR/core/chains/evm/txmgr/confirmer_test.go: `.NewHash()`
$DIR/core/chains/evm/txmgr/confirmer_test.go: `.NewInt(42)`
$DIR/core/chains/evm/txmgr/confirmer_test.go: `.On("SequenceAt", mock.Anything, mock.Anything, mock.Anything)`
$DIR/core/chains/evm/txmgr/confirmer_test.go: `.Return(evmtypes.Nonce(10), nil)`
$DIR/core/chains/evm/txmgr/confirmer_test.go: `.Nonce(10)`
$DIR/core/chains/evm/txmgr/confirmer_test.go: `.On("BatchCallContext", mock.Anything, mock.MatchedBy(func(b []rpc.BatchElem) bool {
return len(b) == 1 && cltest.BatchElemMatchesParams(b[0], hashAttempt1_1, "eth_getTransactionReceipt")
}))`
$DIR/core/chains/evm/txmgr/confirmer_test.go: `.MatchedBy(func(b []rpc.BatchElem) bool {
return len(b) == 1 && cltest.BatchElemMatchesParams(b[0], hashAttempt1_1, "eth_getTransactionReceipt")
})`
$DIR/core/chains/evm/txmgr/confirmer_test.go: `.BatchElemMatchesParams(b[0], hashAttempt1_1, "eth_getTransactionReceipt")`
$DIR/core/chains/evm/txmgr/confirmer_test.go: `.Return(nil)`
$DIR/core/chains/evm/txmgr/confirmer_test.go: `.Run(func(args mock.Arguments) {
elems := args.Get(1).([]rpc.BatchElem)
*(elems[0].Result.(*evmtypes.Receipt)) = txmReceipt
})`
$DIR/core/chains/evm/txmgr/confirmer_test.go: `.Get(1)`
$DIR/core/chains/evm/txmgr/confirmer_test.go: `.Once()`
$DIR/core/chains/evm/txmgr/confirmer_test.go: `.FindTxWithAttempts(ctx, etx1.ID)`
$DIR/core/chains/evm/txmgr/confirmer_test.go: `.Run("saves nothing if query returns error", func(t *testing.T) {
txmReceipt := evmtypes.Receipt{
TxHash: attempt1_1.Hash,
BlockHash: testutils.NewHash(),
BlockNumber: big.NewInt(42),
TransactionIndex: uint(1),
}
ethClient.On("SequenceAt", mock.Anything, mock.Anything, mock.Anything).Return(evmtypes.Nonce(10), nil)
// First transaction confirmed
ethClient.On("BatchCallContext", mock.Anything, mock.MatchedBy(func(b []rpc.BatchElem) bool {
return len(b) == 1 && cltest.BatchElemMatchesParams(b[0], hashAttempt1_1, "eth_getTransactionReceipt")
})).Return(nil).Run(func(args mock.Arguments) {
elems := args.Get(1).([]rpc.BatchElem)
*(elems[0].Result.(*evmtypes.Receipt)) = txmReceipt
elems[0].Error = errors.New("foo")
}).Once()
// No error because it is merely logged
require.NoError(t, ec.CheckForReceipts(ctx, blockNum))
etx, err := txStore.FindTxWithAttempts(ctx, etx1.ID)
require.NoError(t, err)
require.Len(t, etx.TxAttempts, 1)
require.Len(t, etx.TxAttempts[0].Receipts, 0)
})`
$DIR/core/chains/evm/txmgr/confirmer_test.go: `.NewHash()`
$DIR/core/chains/evm/txmgr/confirmer_test.go: `.NewInt(42)`
$DIR/core/chains/evm/txmgr/confirmer_test.go: `.On("SequenceAt", mock.Anything, mock.Anything, mock.Anything)`
$DIR/core/chains/evm/txmgr/confirmer_test.go: `.Return(evmtypes.Nonce(10), nil)`
$DIR/core/chains/evm/txmgr/confirmer_test.go: `.Nonce(10)`
$DIR/core/chains/evm/txmgr/confirmer_test.go: `.On("BatchCallContext", mock.Anything, mock.MatchedBy(func(b []rpc.BatchElem) bool {
return len(b) == 1 && cltest.BatchElemMatchesParams(b[0], hashAttempt1_1, "eth_getTransactionReceipt")
}))`
$DIR/core/chains/evm/txmgr/confirmer_test.go: `.MatchedBy(func(b []rpc.BatchElem) bool {
return len(b) == 1 && cltest.BatchElemMatchesParams(b[0], hashAttempt1_1, "eth_getTransactionReceipt")
})`
$DIR/core/chains/evm/txmgr/confirmer_test.go: `.BatchElemMatchesParams(b[0], hashAttempt1_1, "eth_getTransactionReceipt")`
$DIR/core/chains/evm/txmgr/confirmer_test.go: `.Return(nil)`
$DIR/core/chains/evm/txmgr/confirmer_test.go: `.Run(func(args mock.Arguments) {
elems := args.Get(1).([]rpc.BatchElem)
*(elems[0].Result.(*evmtypes.Receipt)) = txmReceipt
elems[0].Error = errors.New("foo")
})`
$DIR/core/chains/evm/txmgr/confirmer_test.go: `.Get(1)`
$DIR/core/chains/evm/txmgr/confirmer_test.go: `.New("foo")`
$DIR/core/chains/evm/txmgr/confirmer_test.go: `.Once()`
$DIR/core/chains/evm/txmgr/confirmer_test.go: `.FindTxWithAttempts(ctx, etx1.ID)`
$DIR/core/chains/evm/txmgr/confirmer_test.go: `.MustInsertUnconfirmedEthTxWithBroadcastLegacyAttempt(t, txStore, nonce, fromAddress)`
$DIR/core/chains/evm/txmgr/confirmer_test.go: `.Run("saves eth_receipt and marks eth_tx as confirmed when geth client returns valid receipt", func(t *testing.T) {
txmReceipt := evmtypes.Receipt{
TxHash: attempt1_1.Hash,
BlockHash: testutils.NewHash(),
BlockNumber: big.NewInt(42),
TransactionIndex: uint(1),
Status: uint64(1),
}
ethClient.On("SequenceAt", mock.Anything, mock.Anything, mock.Anything).Return(evmtypes.Nonce(10), nil)
ethClient.On("BatchCallContext", mock.Anything, mock.MatchedBy(func(b []rpc.BatchElem) bool {
return len(b) == 2 &&
cltest.BatchElemMatchesParams(b[0], attempt1_1.Hash, "eth_getTransactionReceipt") &&
cltest.BatchElemMatchesParams(b[1], attempt2_1.Hash, "eth_getTransactionReceipt")
})).Return(nil).Run(func(args mock.Arguments) {
elems := args.Get(1).([]rpc.BatchElem)
// First transaction confirmed
*(elems[0].Result.(*evmtypes.Receipt)) = txmReceipt
// Second transaction still unconfirmed
elems[1].Result = &evmtypes.Receipt{}
}).Once()
// Do the thing
require.NoError(t, ec.CheckForReceipts(ctx, blockNum))
// Check that the receipt was saved
etx, err := txStore.FindTxWithAttempts(ctx, etx1.ID)
require.NoError(t, err)
assert.Equal(t, txmgrcommon.TxConfirmed, etx.State)
assert.Len(t, etx.TxAttempts, 1)
attempt1_1 = etx.TxAttempts[0]
require.Len(t, attempt1_1.Receipts, 1)
ethReceipt := attempt1_1.Receipts[0]
assert.Equal(t, txmReceipt.TxHash, ethReceipt.GetTxHash())
assert.Equal(t, txmReceipt.BlockHash, ethReceipt.GetBlockHash())
assert.Equal(t, txmReceipt.BlockNumber.Int64(), ethReceipt.GetBlockNumber().Int64())
assert.Equal(t, txmReceipt.TransactionIndex, ethReceipt.GetTransactionIndex())
receiptJSON, err := json.Marshal(txmReceipt)
require.NoError(t, err)
j, err := json.Marshal(ethReceipt)
require.NoError(t, err)
assert.JSONEq(t, string(receiptJSON), string(j))
})`
$DIR/core/chains/evm/txmgr/confirmer_test.go: `.NewHash()`
$DIR/core/chains/evm/txmgr/confirmer_test.go: `.NewInt(42)`
$DIR/core/chains/evm/txmgr/confirmer_test.go: `.On("SequenceAt", mock.Anything, mock.Anything, mock.Anything)`
$DIR/core/chains/evm/txmgr/confirmer_test.go: `.Return(evmtypes.Nonce(10), nil)`
$DIR/core/chains/evm/txmgr/confirmer_test.go: `.Nonce(10)`
$DIR/core/chains/evm/txmgr/confirmer_test.go: `.On("BatchCallContext", mock.Anything, mock.MatchedBy(func(b []rpc.BatchElem) bool {
return len(b) == 2 &&
cltest.BatchElemMatchesParams(b[0], attempt1_1.Hash, "eth_getTransactionReceipt") &&
cltest.BatchElemMatchesParams(b[1], attempt2_1.Hash, "eth_getTransactionReceipt")
}))`
$DIR/core/chains/evm/txmgr/confirmer_test.go: `.MatchedBy(func(b []rpc.BatchElem) bool {
return len(b) == 2 &&
cltest.BatchElemMatchesParams(b[0], attempt1_1.Hash, "eth_getTransactionReceipt") &&
cltest.BatchElemMatchesParams(b[1], attempt2_1.Hash, "eth_getTransactionReceipt")
})`
$DIR/core/chains/evm/txmgr/confirmer_test.go: `.BatchElemMatchesParams(b[0], attempt1_1.Hash, "eth_getTransactionReceipt")`
$DIR/core/chains/evm/txmgr/confirmer_test.go: `.BatchElemMatchesParams(b[1], attempt2_1.Hash, "eth_getTransactionReceipt")`
$DIR/core/chains/evm/txmgr/confirmer_test.go: `.Return(nil)`
$DIR/core/chains/evm/txmgr/confirmer_test.go: `.Run(func(args mock.Arguments) {
elems := args.Get(1).([]rpc.BatchElem)
// First transaction confirmed
*(elems[0].Result.(*evmtypes.Receipt)) = txmReceipt
// Second transaction still unconfirmed
elems[1].Result = &evmtypes.Receipt{}
})`
$DIR/core/chains/evm/txmgr/confirmer_test.go: `.Get(1)`
$DIR/core/chains/evm/txmgr/confirmer_test.go: `.Once()`
$DIR/core/chains/evm/txmgr/confirmer_test.go: `.FindTxWithAttempts(ctx, etx1.ID)`
$DIR/core/chains/evm/txmgr/confirmer_test.go: `.Marshal(txmReceipt)`
$DIR/core/chains/evm/txmgr/confirmer_test.go: `.Marshal(ethReceipt)`
$DIR/core/chains/evm/txmgr/confirmer_test.go: `.Run("fetches and saves receipts for several attempts in gas price order", func(t *testing.T) {
attempt2_2 := newBroadcastLegacyEthTxAttempt(t, etx2.ID)
attempt2_2.TxFee = gas.EvmFee{Legacy: assets.NewWeiI(10)}
attempt2_3 := newBroadcastLegacyEthTxAttempt(t, etx2.ID)
attempt2_3.TxFee = gas.EvmFee{Legacy: assets.NewWeiI(20)}
// Insert order deliberately reversed to test sorting by gas price
require.NoError(t, txStore.InsertTxAttempt(ctx, &attempt2_3))
require.NoError(t, txStore.InsertTxAttempt(ctx, &attempt2_2))
txmReceipt := evmtypes.Receipt{
TxHash: attempt2_2.Hash,
BlockHash: testutils.NewHash(),
BlockNumber: big.NewInt(42),
TransactionIndex: uint(1),
Status: uint64(1),
}
ethClient.On("SequenceAt", mock.Anything, mock.Anything, mock.Anything).Return(evmtypes.Nonce(10), nil)
ethClient.On("BatchCallContext", mock.Anything, mock.MatchedBy(func(b []rpc.BatchElem) bool {
return len(b) == 3 &&
cltest.BatchElemMatchesParams(b[2], attempt2_1.Hash, "eth_getTransactionReceipt") &&
cltest.BatchElemMatchesParams(b[1], attempt2_2.Hash, "eth_getTransactionReceipt") &&
cltest.BatchElemMatchesParams(b[0], attempt2_3.Hash, "eth_getTransactionReceipt")
})).Return(nil).Run(func(args mock.Arguments) {
elems := args.Get(1).([]rpc.BatchElem)
// Most expensive attempt still unconfirmed
elems[2].Result = &evmtypes.Receipt{}
// Second most expensive attempt is confirmed
*(elems[1].Result.(*evmtypes.Receipt)) = txmReceipt
// Cheapest attempt still unconfirmed
elems[0].Result = &evmtypes.Receipt{}
}).Once()
// Do the thing
require.NoError(t, ec.CheckForReceipts(ctx, blockNum))
// Check that the state was updated
etx, err := txStore.FindTxWithAttempts(ctx, etx2.ID)
require.NoError(t, err)
require.Equal(t, txmgrcommon.TxConfirmed, etx.State)
require.Len(t, etx.TxAttempts, 3)
})`
$DIR/core/chains/evm/txmgr/confirmer_test.go: `.NewWeiI(10)`
$DIR/core/chains/evm/txmgr/confirmer_test.go: `.NewWeiI(20)`
$DIR/core/chains/evm/txmgr/confirmer_test.go: `.NewHash()`
$DIR/core/chains/evm/txmgr/confirmer_test.go: `.NewInt(42)`
$DIR/core/chains/evm/txmgr/confirmer_test.go: `.On("SequenceAt", mock.Anything, mock.Anything, mock.Anything)`
$DIR/core/chains/evm/txmgr/confirmer_test.go: `.Return(evmtypes.Nonce(10), nil)`
$DIR/core/chains/evm/txmgr/confirmer_test.go: `.Nonce(10)`
$DIR/core/chains/evm/txmgr/confirmer_test.go: `.On("BatchCallContext", mock.Anything, mock.MatchedBy(func(b []rpc.BatchElem) bool {
return len(b) == 3 &&
cltest.BatchElemMatchesParams(b[2], attempt2_1.Hash, "eth_getTransactionReceipt") &&
cltest.BatchElemMatchesParams(b[1], attempt2_2.Hash, "eth_getTransactionReceipt") &&
cltest.BatchElemMatchesParams(b[0], attempt2_3.Hash, "eth_getTransactionReceipt")
}))`
$DIR/core/chains/evm/txmgr/confirmer_test.go: `.MatchedBy(func(b []rpc.BatchElem) bool {
return len(b) == 3 &&
cltest.BatchElemMatchesParams(b[2], attempt2_1.Hash, "eth_getTransactionReceipt") &&
cltest.BatchElemMatchesParams(b[1], attempt2_2.Hash, "eth_getTransactionReceipt") &&
cltest.BatchElemMatchesParams(b[0], attempt2_3.Hash, "eth_getTransactionReceipt")
})`
$DIR/core/chains/evm/txmgr/confirmer_test.go: `.BatchElemMatchesParams(b[2], attempt2_1.Hash, "eth_getTransactionReceipt")`
$DIR/core/chains/evm/txmgr/confirmer_test.go: `.BatchElemMatchesParams(b[1], attempt2_2.Hash, "eth_getTransactionReceipt")`
$DIR/core/chains/evm/txmgr/confirmer_test.go: `.BatchElemMatchesParams(b[0], attempt2_3.Hash, "eth_getTransactionReceipt")`
$DIR/core/chains/evm/txmgr/confirmer_test.go: `.Return(nil)`
$DIR/core/chains/evm/txmgr/confirmer_test.go: `.Run(func(args mock.Arguments) {
elems := args.Get(1).([]rpc.BatchElem)
// Most expensive attempt still unconfirmed
elems[2].Result = &evmtypes.Receipt{}
// Second most expensive attempt is confirmed
*(elems[1].Result.(*evmtypes.Receipt)) = txmReceipt
// Cheapest attempt still unconfirmed
elems[0].Result = &evmtypes.Receipt{}
})`
$DIR/core/chains/evm/txmgr/confirmer_test.go: `.Get(1)`
$DIR/core/chains/evm/txmgr/confirmer_test.go: `.Once()`
$DIR/core/chains/evm/txmgr/confirmer_test.go: `.FindTxWithAttempts(ctx, etx2.ID)`
$DIR/core/chains/evm/txmgr/confirmer_test.go: `.MustInsertUnconfirmedEthTxWithBroadcastLegacyAttempt(t, txStore, nonce, fromAddress)`
$DIR/core/chains/evm/txmgr/confirmer_test.go: `.Run("ignores receipt missing BlockHash that comes from querying parity too early", func(t *testing.T) {
ethClient.On("SequenceAt", mock.Anything, mock.Anything, mock.Anything).Return(evmtypes.Nonce(10), nil)
receipt := evmtypes.Receipt{
TxHash: attempt3_1.Hash,
Status: uint64(1),
}
ethClient.On("BatchCallContext", mock.Anything, mock.MatchedBy(func(b []rpc.BatchElem) bool {
return len(b) == 1 && cltest.BatchElemMatchesParams(b[0], attempt3_1.Hash, "eth_getTransactionReceipt")
})).Return(nil).Run(func(args mock.Arguments) {
elems := args.Get(1).([]rpc.BatchElem)
*(elems[0].Result.(*evmtypes.Receipt)) = receipt
}).Once()
// Do the thing
require.NoError(t, ec.CheckForReceipts(ctx, blockNum))
// No receipt, but no error either
etx, err := txStore.FindTxWithAttempts(ctx, etx3.ID)
require.NoError(t, err)
assert.Equal(t, txmgrcommon.TxUnconfirmed, etx.State)
assert.Len(t, etx.TxAttempts, 1)
attempt3_1 = etx.TxAttempts[0]
require.Len(t, attempt3_1.Receipts, 0)
})`
$DIR/core/chains/evm/txmgr/confirmer_test.go: `.On("SequenceAt", mock.Anything, mock.Anything, mock.Anything)`
$DIR/core/chains/evm/txmgr/confirmer_test.go: `.Return(evmtypes.Nonce(10), nil)`
$DIR/core/chains/evm/txmgr/confirmer_test.go: `.Nonce(10)`
$DIR/core/chains/evm/txmgr/confirmer_test.go: `.On("BatchCallContext", mock.Anything, mock.MatchedBy(func(b []rpc.BatchElem) bool {
return len(b) == 1 && cltest.BatchElemMatchesParams(b[0], attempt3_1.Hash, "eth_getTransactionReceipt")
}))`
$DIR/core/chains/evm/txmgr/confirmer_test.go: `.MatchedBy(func(b []rpc.BatchElem) bool {
return len(b) == 1 && cltest.BatchElemMatchesParams(b[0], attempt3_1.Hash, "eth_getTransactionReceipt")
})`
$DIR/core/chains/evm/txmgr/confirmer_test.go: `.BatchElemMatchesParams(b[0], attempt3_1.Hash, "eth_getTransactionReceipt")`
$DIR/core/chains/evm/txmgr/confirmer_test.go: `.Return(nil)`
$DIR/core/chains/evm/txmgr/confirmer_test.go: `.Run(func(args mock.Arguments) {
elems := args.Get(1).([]rpc.BatchElem)
*(elems[0].Result.(*evmtypes.Receipt)) = receipt
})`
$DIR/core/chains/evm/txmgr/confirmer_test.go: `.Get(1)`
$DIR/core/chains/evm/txmgr/confirmer_test.go: `.Once()`
$DIR/core/chains/evm/txmgr/confirmer_test.go: `.FindTxWithAttempts(ctx, etx3.ID)`
$DIR/core/chains/evm/txmgr/confirmer_test.go: `.Run("does not panic if receipt has BlockHash but is missing some other fields somehow", func(t *testing.T) {
// NOTE: This should never happen, but we shouldn't panic regardless
receipt := evmtypes.Receipt{
TxHash: attempt3_1.Hash,
BlockHash: testutils.NewHash(),
Status: uint64(1),
}
ethClient.On("BatchCallContext", mock.Anything, mock.MatchedBy(func(b []rpc.BatchElem) bool {
return len(b) == 1 && cltest.BatchElemMatchesParams(b[0], attempt3_1.Hash, "eth_getTransactionReceipt")
})).Return(nil).Run(func(args mock.Arguments) {
elems := args.Get(1).([]rpc.BatchElem)
*(elems[0].Result.(*evmtypes.Receipt)) = receipt
}).Once()
// Do the thing
require.NoError(t, ec.CheckForReceipts(ctx, blockNum))
// No receipt, but no error either
etx, err := txStore.FindTxWithAttempts(ctx, etx3.ID)
require.NoError(t, err)
assert.Equal(t, txmgrcommon.TxUnconfirmed, etx.State)
assert.Len(t, etx.TxAttempts, 1)
attempt3_1 = etx.TxAttempts[0]
require.Len(t, attempt3_1.Receipts, 0)
})`
$DIR/core/chains/evm/txmgr/confirmer_test.go: `.NewHash()`
$DIR/core/chains/evm/txmgr/confirmer_test.go: `.On("BatchCallContext", mock.Anything, mock.MatchedBy(func(b []rpc.BatchElem) bool {
return len(b) == 1 && cltest.BatchElemMatchesParams(b[0], attempt3_1.Hash, "eth_getTransactionReceipt")
}))`
$DIR/core/chains/evm/txmgr/confirmer_test.go: `.MatchedBy(func(b []rpc.BatchElem) bool {
return len(b) == 1 && cltest.BatchElemMatchesParams(b[0], attempt3_1.Hash, "eth_getTransactionReceipt")
})`
$DIR/core/chains/evm/txmgr/confirmer_test.go: `.BatchElemMatchesParams(b[0], attempt3_1.Hash, "eth_getTransactionReceipt")`
$DIR/core/chains/evm/txmgr/confirmer_test.go: `.Return(nil)`
$DIR/core/chains/evm/txmgr/confirmer_test.go: `.Run(func(args mock.Arguments) {
elems := args.Get(1).([]rpc.BatchElem)
*(elems[0].Result.(*evmtypes.Receipt)) = receipt
})`
$DIR/core/chains/evm/txmgr/confirmer_test.go: `.Get(1)`
$DIR/core/chains/evm/txmgr/confirmer_test.go: `.Once()`
$DIR/core/chains/evm/txmgr/confirmer_test.go: `.FindTxWithAttempts(ctx, etx3.ID)`
$DIR/core/chains/evm/txmgr/confirmer_test.go: `.Run("handles case where eth_receipt already exists somehow", func(t *testing.T) {
ethReceipt := mustInsertEthReceipt(t, txStore, 42, testutils.NewHash(), attempt3_1.Hash)
txmReceipt := evmtypes.Receipt{
TxHash: attempt3_1.Hash,
BlockHash: ethReceipt.BlockHash,
BlockNumber: big.NewInt(ethReceipt.BlockNumber),
TransactionIndex: ethReceipt.TransactionIndex,
Status: uint64(1),
}
ethClient.On("SequenceAt", mock.Anything, mock.Anything, mock.Anything).Return(evmtypes.Nonce(10), nil)
ethClient.On("BatchCallContext", mock.Anything, mock.MatchedBy(func(b []rpc.BatchElem) bool {
return len(b) == 1 && cltest.BatchElemMatchesParams(b[0], attempt3_1.Hash, "eth_getTransactionReceipt")
})).Return(nil).Run(func(args mock.Arguments) {
elems := args.Get(1).([]rpc.BatchElem)
*(elems[0].Result.(*evmtypes.Receipt)) = txmReceipt
}).Once()
// Do the thing
require.NoError(t, ec.CheckForReceipts(ctx, blockNum))
// Check that the receipt was unchanged
etx, err := txStore.FindTxWithAttempts(ctx, etx3.ID)
require.NoError(t, err)
assert.Equal(t, txmgrcommon.TxConfirmed, etx.State)
assert.Len(t, etx.TxAttempts, 1)
attempt3_1 = etx.TxAttempts[0]
require.Len(t, attempt3_1.Receipts, 1)
ethReceipt3_1 := attempt3_1.Receipts[0]
assert.Equal(t, txmReceipt.TxHash, ethReceipt3_1.GetTxHash())
assert.Equal(t, txmReceipt.BlockHash, ethReceipt3_1.GetBlockHash())
assert.Equal(t, txmReceipt.BlockNumber.Int64(), ethReceipt3_1.GetBlockNumber().Int64())
assert.Equal(t, txmReceipt.TransactionIndex, ethReceipt3_1.GetTransactionIndex())
})`
$DIR/core/chains/evm/txmgr/confirmer_test.go: `.NewHash()`
$DIR/core/chains/evm/txmgr/confirmer_test.go: `.NewInt(ethReceipt.BlockNumber)`
$DIR/core/chains/evm/txmgr/confirmer_test.go: `.On("SequenceAt", mock.Anything, mock.Anything, mock.Anything)`
$DIR/core/chains/evm/txmgr/confirmer_test.go: `.Return(evmtypes.Nonce(10), nil)`
$DIR/core/chains/evm/txmgr/confirmer_test.go: `.Nonce(10)`
$DIR/core/chains/evm/txmgr/confirmer_test.go: `.On("BatchCallContext", mock.Anything, mock.MatchedBy(func(b []rpc.BatchElem) bool {
return len(b) == 1 && cltest.BatchElemMatchesParams(b[0], attempt3_1.Hash, "eth_getTransactionReceipt")
}))`
$DIR/core/chains/evm/txmgr/confirmer_test.go: `.MatchedBy(func(b []rpc.BatchElem) bool {
return len(b) == 1 && cltest.BatchElemMatchesParams(b[0], attempt3_1.Hash, "eth_getTransactionReceipt")
})`
$DIR/core/chains/evm/txmgr/confirmer_test.go: `.BatchElemMatchesParams(b[0], attempt3_1.Hash, "eth_getTransactionReceipt")`
$DIR/core/chains/evm/txmgr/confirmer_test.go: `.Return(nil)`
$DIR/core/chains/evm/txmgr/confirmer_test.go: `.Run(func(args mock.Arguments) {
elems := args.Get(1).([]rpc.BatchElem)
*(elems[0].Result.(*evmtypes.Receipt)) = txmReceipt
})`
$DIR/core/chains/evm/txmgr/confirmer_test.go: `.Get(1)`
$DIR/core/chains/evm/txmgr/confirmer_test.go: `.Once()`
$DIR/core/chains/evm/txmgr/confirmer_test.go: `.FindTxWithAttempts(ctx, etx3.ID)`
$DIR/core/chains/evm/txmgr/confirmer_test.go: `.MustInsertUnconfirmedEthTxWithBroadcastLegacyAttempt(t, txStore, nonce, fromAddress)`
$DIR/core/chains/evm/txmgr/confirmer_test.go: `.Run("on receipt fetch marks in_progress eth_tx_attempt as broadcast", func(t *testing.T) {
attempt4_2 := newInProgressLegacyEthTxAttempt(t, etx4.ID)
attempt4_2.TxFee = gas.EvmFee{Legacy: assets.NewWeiI(10)}
require.NoError(t, txStore.InsertTxAttempt(ctx, &attempt4_2))
txmReceipt := evmtypes.Receipt{
TxHash: attempt4_2.Hash,
BlockHash: testutils.NewHash(),
BlockNumber: big.NewInt(42),
TransactionIndex: uint(1),
Status: uint64(1),
}
ethClient.On("SequenceAt", mock.Anything, mock.Anything, mock.Anything).Return(evmtypes.Nonce(10), nil)
// Second attempt is confirmed
ethClient.On("BatchCallContext", mock.Anything, mock.MatchedBy(func(b []rpc.BatchElem) bool {
return len(b) == 2 &&
cltest.BatchElemMatchesParams(b[0], attempt4_2.Hash, "eth_getTransactionReceipt") &&
cltest.BatchElemMatchesParams(b[1], attempt4_1.Hash, "eth_getTransactionReceipt")
})).Return(nil).Run(func(args mock.Arguments) {
elems := args.Get(1).([]rpc.BatchElem)
// First attempt still unconfirmed
elems[1].Result = &evmtypes.Receipt{}
// Second attempt is confirmed
*(elems[0].Result.(*evmtypes.Receipt)) = txmReceipt
}).Once()
// Do the thing
require.NoError(t, ec.CheckForReceipts(ctx, blockNum))
// Check that the state was updated
var err error
etx4, err = txStore.FindTxWithAttempts(ctx, etx4.ID)
require.NoError(t, err)
attempt4_1 = etx4.TxAttempts[1]
attempt4_2 = etx4.TxAttempts[0]
// And the attempts
require.Equal(t, txmgrtypes.TxAttemptBroadcast, attempt4_1.State)
require.Nil(t, attempt4_1.BroadcastBeforeBlockNum)
require.Equal(t, txmgrtypes.TxAttemptBroadcast, attempt4_2.State)
require.Equal(t, int64(42), *attempt4_2.BroadcastBeforeBlockNum)
// Check receipts
require.Len(t, attempt4_1.Receipts, 0)
require.Len(t, attempt4_2.Receipts, 1)
})`
$DIR/core/chains/evm/txmgr/confirmer_test.go: `.NewWeiI(10)`
$DIR/core/chains/evm/txmgr/confirmer_test.go: `.NewHash()`
$DIR/core/chains/evm/txmgr/confirmer_test.go: `.NewInt(42)`
$DIR/core/chains/evm/txmgr/confirmer_test.go: `.On("SequenceAt", mock.Anything, mock.Anything, mock.Anything)`
$DIR/core/chains/evm/txmgr/confirmer_test.go: `.Return(evmtypes.Nonce(10), nil)`
$DIR/core/chains/evm/txmgr/confirmer_test.go: `.Nonce(10)`
$DIR/core/chains/evm/txmgr/confirmer_test.go: `.On("BatchCallContext", mock.Anything, mock.MatchedBy(func(b []rpc.BatchElem) bool {
return len(b) == 2 &&
cltest.BatchElemMatchesParams(b[0], attempt4_2.Hash, "eth_getTransactionReceipt") &&
cltest.BatchElemMatchesParams(b[1], attempt4_1.Hash, "eth_getTransactionReceipt")
}))`
$DIR/core/chains/evm/txmgr/confirmer_test.go: `.MatchedBy(func(b []rpc.BatchElem) bool {
return len(b) == 2 &&
cltest.BatchElemMatchesParams(b[0], attempt4_2.Hash, "eth_getTransactionReceipt") &&
cltest.BatchElemMatchesParams(b[1], attempt4_1.Hash, "eth_getTransactionReceipt")
})`
$DIR/core/chains/evm/txmgr/confirmer_test.go: `.BatchElemMatchesParams(b[0], attempt4_2.Hash, "eth_getTransactionReceipt")`
$DIR/core/chains/evm/txmgr/confirmer_test.go: `.BatchElemMatchesParams(b[1], attempt4_1.Hash, "eth_getTransactionReceipt")`
$DIR/core/chains/evm/txmgr/confirmer_test.go: `.Return(nil)`
$DIR/core/chains/evm/txmgr/confirmer_test.go: `.Run(func(args mock.Arguments) {
elems := args.Get(1).([]rpc.BatchElem)
// First attempt still unconfirmed
elems[1].Result = &evmtypes.Receipt{}
// Second attempt is confirmed
*(elems[0].Result.(*evmtypes.Receipt)) = txmReceipt
})`
$DIR/core/chains/evm/txmgr/confirmer_test.go: `.Get(1)`
$DIR/core/chains/evm/txmgr/confirmer_test.go: `.Once()`
$DIR/core/chains/evm/txmgr/confirmer_test.go: `.FindTxWithAttempts(ctx, etx4.ID)`
$DIR/core/chains/evm/txmgr/confirmer_test.go: `.MustInsertUnconfirmedEthTxWithBroadcastLegacyAttempt(t, txStore, nonce, fromAddress)`
$DIR/core/chains/evm/txmgr/confirmer_test.go: `.NewHash()`
$DIR/core/chains/evm/txmgr/confirmer_test.go: `.NewInt(42)`
$DIR/core/chains/evm/txmgr/confirmer_test.go: `.On("SequenceAt", mock.Anything, mock.Anything, mock.Anything)`
$DIR/core/chains/evm/txmgr/confirmer_test.go: `.Return(evmtypes.Nonce(10), nil)`
$DIR/core/chains/evm/txmgr/confirmer_test.go: `.Nonce(10)`
$DIR/core/chains/evm/txmgr/confirmer_test.go: `.On("BatchCallContext", mock.Anything, mock.MatchedBy(func(b []rpc.BatchElem) bool {
return len(b) == 1 &&
cltest.BatchElemMatchesParams(b[0], attempt5_1.Hash, "eth_getTransactionReceipt")
}))`
$DIR/core/chains/evm/txmgr/confirmer_test.go: `.MatchedBy(func(b []rpc.BatchElem) bool {
return len(b) == 1 &&
cltest.BatchElemMatchesParams(b[0], attempt5_1.Hash, "eth_getTransactionReceipt")
})`
$DIR/core/chains/evm/txmgr/confirmer_test.go: `.BatchElemMatchesParams(b[0], attempt5_1.Hash, "eth_getTransactionReceipt")`
$DIR/core/chains/evm/txmgr/confirmer_test.go: `.Return(nil)`
$DIR/core/chains/evm/txmgr/confirmer_test.go: `.Run(func(args mock.Arguments) {
elems := args.Get(1).([]rpc.BatchElem)
// First attempt still unconfirmed
*(elems[0].Result.(*evmtypes.Receipt)) = txmReceipt
})`
$DIR/core/chains/evm/txmgr/confirmer_test.go: `.Get(1)`
$DIR/core/chains/evm/txmgr/confirmer_test.go: `.Once()`
$DIR/core/chains/evm/txmgr/confirmer_test.go: `.ABIEncode(`[{"type":"uint256"}]`, big.NewInt(10))`
$DIR/core/chains/evm/txmgr/confirmer_test.go: `.NewInt(10)`
$DIR/core/chains/evm/txmgr/confirmer_test.go: `.Keccak256Fixed([]byte(`MyError(uint256)`))`
$DIR/core/chains/evm/txmgr/confirmer_test.go: `.On("CallContract", mock.Anything, mock.Anything, mock.Anything)`
$DIR/core/chains/evm/txmgr/confirmer_test.go: `.Return(nil, &client.JsonError{
Code: 1,
Message: "reverted",
Data: utils.ConcatBytes(sig[:4], data),
})`
$DIR/core/chains/evm/txmgr/confirmer_test.go: `.ConcatBytes(sig[:4], data)`
$DIR/core/chains/evm/txmgr/confirmer_test.go: `.Once()`
$DIR/core/chains/evm/txmgr/confirmer_test.go: `.FindTxWithAttempts(ctx, etx5.ID)`
$DIR/core/chains/evm/txmgr/confirmer_test.go: `.NewSqlxDB(t)`
$DIR/core/chains/evm/txmgr/confirmer_test.go: `.NewGeneralConfig(t, func(c *chainlink.Config, s *chainlink.Secrets) {
c.EVM[0].RPCDefaultBatchSize = ptr[uint32](2)
})`
$DIR/core/chains/evm/txmgr/confirmer_test.go: `.NewTestTxStore(t, db)`
$DIR/core/chains/evm/txmgr/confirmer_test.go: `.NewKeyStore(t, db)`
$DIR/core/chains/evm/txmgr/confirmer_test.go: `.Eth()`
$DIR/core/chains/evm/txmgr/confirmer_test.go: `.MustInsertRandomKeyReturningState(t, ethKeyStore)`
$DIR/core/chains/evm/txmgr/confirmer_test.go: `.NewEthClientMockWithDefaultChain(t)`
$DIR/core/chains/evm/txmgr/confirmer_test.go: `.NewChainScopedConfig(t, cfg)`
$DIR/core/chains/evm/txmgr/confirmer_test.go: `.Context(t)`
$DIR/core/chains/evm/txmgr/confirmer_test.go: `.MustInsertUnconfirmedEthTx(t, txStore, 0, fromAddress)`
$DIR/core/chains/evm/txmgr/confirmer_test.go: `.On("SequenceAt", mock.Anything, mock.Anything, mock.Anything)`
$DIR/core/chains/evm/txmgr/confirmer_test.go: `.Return(evmtypes.Nonce(10), nil)`
$DIR/core/chains/evm/txmgr/confirmer_test.go: `.Nonce(10)`
$DIR/core/chains/evm/txmgr/confirmer_test.go: `.On("BatchCallContext", mock.Anything, mock.MatchedBy(func(b []rpc.BatchElem) bool {
return len(b) == 2 &&
cltest.BatchElemMatchesParams(b[0], attempts[4].Hash, "eth_getTransactionReceipt") &&
cltest.BatchElemMatchesParams(b[1], attempts[3].Hash, "eth_getTransactionReceipt")
}))`
$DIR/core/chains/evm/txmgr/confirmer_test.go: `.MatchedBy(func(b []rpc.BatchElem) bool {
return len(b) == 2 &&
cltest.BatchElemMatchesParams(b[0], attempts[4].Hash, "eth_getTransactionReceipt") &&
cltest.BatchElemMatchesParams(b[1], attempts[3].Hash, "eth_getTransactionReceipt")
})`
$DIR/core/chains/evm/txmgr/confirmer_test.go: `.BatchElemMatchesParams(b[0], attempts[4].Hash, "eth_getTransactionReceipt")`
$DIR/core/chains/evm/txmgr/confirmer_test.go: `.BatchElemMatchesParams(b[1], attempts[3].Hash, "eth_getTransactionReceipt")`
$DIR/core/chains/evm/txmgr/confirmer_test.go: `.Return(nil)`
$DIR/core/chains/evm/txmgr/confirmer_test.go: `.Run(func(args mock.Arguments) {
elems := args.Get(1).([]rpc.BatchElem)
elems[0].Result = &evmtypes.Receipt{}
elems[1].Result = &evmtypes.Receipt{}
})`
$DIR/core/chains/evm/txmgr/confirmer_test.go: `.Get(1)`
$DIR/core/chains/evm/txmgr/confirmer_test.go: `.Once()`
$DIR/core/chains/evm/txmgr/confirmer_test.go: `.On("BatchCallContext", mock.Anything, mock.MatchedBy(func(b []rpc.BatchElem) bool {
return len(b) == 2 &&
cltest.BatchElemMatchesParams(b[0], attempts[2].Hash, "eth_getTransactionReceipt") &&
cltest.BatchElemMatchesParams(b[1], attempts[1].Hash, "eth_getTransactionReceipt")
}))`
$DIR/core/chains/evm/txmgr/confirmer_test.go: `.MatchedBy(func(b []rpc.BatchElem) bool {
return len(b) == 2 &&
cltest.BatchElemMatchesParams(b[0], attempts[2].Hash, "eth_getTransactionReceipt") &&
cltest.BatchElemMatchesParams(b[1], attempts[1].Hash, "eth_getTransactionReceipt")
})`
$DIR/core/chains/evm/txmgr/confirmer_test.go: `.BatchElemMatchesParams(b[0], attempts[2].Hash, "eth_getTransactionReceipt")`
$DIR/core/chains/evm/txmgr/confirmer_test.go: `.BatchElemMatchesParams(b[1], attempts[1].Hash, "eth_getTransactionReceipt")`
$DIR/core/chains/evm/txmgr/confirmer_test.go: `.Return(nil)`
$DIR/core/chains/evm/txmgr/confirmer_test.go: `.Run(func(args mock.Arguments) {
elems := args.Get(1).([]rpc.BatchElem)
elems[0].Result = &evmtypes.Receipt{}
elems[1].Result = &evmtypes.Receipt{}
})`
$DIR/core/chains/evm/txmgr/confirmer_test.go: `.Get(1)`
$DIR/core/chains/evm/txmgr/confirmer_test.go: `.Once()`
$DIR/core/chains/evm/txmgr/confirmer_test.go: `.On("BatchCallContext", mock.Anything, mock.MatchedBy(func(b []rpc.BatchElem) bool {
return len(b) == 1 &&
cltest.BatchElemMatchesParams(b[0], attempts[0].Hash, "eth_getTransactionReceipt")
}))`
$DIR/core/chains/evm/txmgr/confirmer_test.go: `.MatchedBy(func(b []rpc.BatchElem) bool {
return len(b) == 1 &&
cltest.BatchElemMatchesParams(b[0], attempts[0].Hash, "eth_getTransactionReceipt")
})`
$DIR/core/chains/evm/txmgr/confirmer_test.go: `.BatchElemMatchesParams(b[0], attempts[0].Hash, "eth_getTransactionReceipt")`
$DIR/core/chains/evm/txmgr/confirmer_test.go: `.Return(nil)`
$DIR/core/chains/evm/txmgr/confirmer_test.go: `.Run(func(args mock.Arguments) {
elems := args.Get(1).([]rpc.BatchElem)
elems[0].Result = &evmtypes.Receipt{}
})`
$DIR/core/chains/evm/txmgr/confirmer_test.go: `.Get(1)`
$DIR/core/chains/evm/txmgr/confirmer_test.go: `.Once()`
$DIR/core/chains/evm/txmgr/confirmer_test.go: `.CheckForReceipts(ctx, 42)`
$DIR/core/chains/evm/txmgr/confirmer_test.go: `.NewSqlxDB(t)`
$DIR/core/chains/evm/txmgr/confirmer_test.go: `.NewGeneralConfig(t, func(c *chainlink.Config, s *chainlink.Secrets) {
c.EVM[0].RPCDefaultBatchSize = ptr[uint32](1)
c.EVM[0].Transactions.ForwardersEnabled = ptr(true)
})`
$DIR/core/chains/evm/txmgr/confirmer_test.go: `.NewTestTxStore(t, db)`
$DIR/core/chains/evm/txmgr/confirmer_test.go: `.NewKeyStore(t, db)`
$DIR/core/chains/evm/txmgr/confirmer_test.go: `.Eth()`
$DIR/core/chains/evm/txmgr/confirmer_test.go: `.NewEthClientMockWithDefaultChain(t)`
$DIR/core/chains/evm/txmgr/confirmer_test.go: `.NewChainScopedConfig(t, cfg)`
$DIR/core/chains/evm/txmgr/confirmer_test.go: `.MustInsertRandomKeyReturningState(t, ethKeyStore)`
$DIR/core/chains/evm/txmgr/confirmer_test.go: `.Context(t)`
$DIR/core/chains/evm/txmgr/confirmer_test.go: `.MustInsertUnconfirmedEthTx(t, txStore, 0, fromAddress)`
$DIR/core/chains/evm/txmgr/confirmer_test.go: `.FindTxWithAttempts(ctx, etx.ID)`
$DIR/core/chains/evm/txmgr/confirmer_test.go: `.NewHash()`
$DIR/core/chains/evm/txmgr/confirmer_test.go: `.NewInt(42)`
$DIR/core/chains/evm/txmgr/confirmer_test.go: `.On("SequenceAt", mock.Anything, mock.Anything, mock.Anything)`
$DIR/core/chains/evm/txmgr/confirmer_test.go: `.Return(evmtypes.Nonce(10), nil)`
$DIR/core/chains/evm/txmgr/confirmer_test.go: `.Nonce(10)`
$DIR/core/chains/evm/txmgr/confirmer_test.go: `.On("BatchCallContext", mock.Anything, mock.MatchedBy(func(b []rpc.BatchElem) bool {
return len(b) == 1 &&
cltest.BatchElemMatchesParams(b[0], attempt.Hash, "eth_getTransactionReceipt")
}))`
$DIR/core/chains/evm/txmgr/confirmer_test.go: `.MatchedBy(func(b []rpc.BatchElem) bool {
return len(b) == 1 &&
cltest.BatchElemMatchesParams(b[0], attempt.Hash, "eth_getTransactionReceipt")
})`
$DIR/core/chains/evm/txmgr/confirmer_test.go: `.BatchElemMatchesParams(b[0], attempt.Hash, "eth_getTransactionReceipt")`
$DIR/core/chains/evm/txmgr/confirmer_test.go: `.Return(nil)`
$DIR/core/chains/evm/txmgr/confirmer_test.go: `.Run(func(args mock.Arguments) {
elems := args.Get(1).([]rpc.BatchElem)
*(elems[0].Result.(*evmtypes.Receipt)) = txmReceipt // confirmed
})`
$DIR/core/chains/evm/txmgr/confirmer_test.go: `.Get(1)`
$DIR/core/chains/evm/txmgr/confirmer_test.go: `.Once()`
$DIR/core/chains/evm/txmgr/confirmer_test.go: `.FindTxWithAttempts(ctx, etx.ID)`
$DIR/core/chains/evm/txmgr/confirmer_test.go: `.NewSqlxDB(t)`
$DIR/core/chains/evm/txmgr/confirmer_test.go: `.NewGeneralConfig(t, func(c *chainlink.Config, s *chainlink.Secrets) {
c.EVM[0].RPCDefaultBatchSize = ptr[uint32](6)
})`
$DIR/core/chains/evm/txmgr/confirmer_test.go: `.NewTestTxStore(t, db)`
$DIR/core/chains/evm/txmgr/confirmer_test.go: `.NewKeyStore(t, db)`
$DIR/core/chains/evm/txmgr/confirmer_test.go: `.Eth()`
$DIR/core/chains/evm/txmgr/confirmer_test.go: `.MustInsertRandomKeyReturningState(t, ethKeyStore)`
$DIR/core/chains/evm/txmgr/confirmer_test.go: `.NewEthClientMockWithDefaultChain(t)`
$DIR/core/chains/evm/txmgr/confirmer_test.go: `.NewChainScopedConfig(t, cfg)`
$DIR/core/chains/evm/txmgr/confirmer_test.go: `.Context(t)`
$DIR/core/chains/evm/txmgr/confirmer_test.go: `.MustInsertUnconfirmedEthTx(t, txStore, 1, fromAddress)`
$DIR/core/chains/evm/txmgr/confirmer_test.go: `.MustInsertUnconfirmedEthTx(t, txStore, 0, fromAddress)`
$DIR/core/chains/evm/txmgr/confirmer_test.go: `.On("SequenceAt", mock.Anything, mock.Anything, mock.Anything)`
$DIR/core/chains/evm/txmgr/confirmer_test.go: `.Return(evmtypes.Nonce(0), nil)`
$DIR/core/chains/evm/txmgr/confirmer_test.go: `.Nonce(0)`
$DIR/core/chains/evm/txmgr/confirmer_test.go: `.On("BatchCallContext", mock.Anything, mock.MatchedBy(func(b []rpc.BatchElem) bool {
return len(b) == 4
}))`
$DIR/core/chains/evm/txmgr/confirmer_test.go: `.MatchedBy(func(b []rpc.BatchElem) bool {
return len(b) == 4
})`
$DIR/core/chains/evm/txmgr/confirmer_test.go: `.Return(nil)`
$DIR/core/chains/evm/txmgr/confirmer_test.go: `.Run(func(args mock.Arguments) {
elems := args.Get(1).([]rpc.BatchElem)
captured = append(captured, elems...)
elems[0].Result = &evmtypes.Receipt{}
elems[1].Result = &evmtypes.Receipt{}
elems[2].Result = &evmtypes.Receipt{}
elems[3].Result = &evmtypes.Receipt{}
})`
$DIR/core/chains/evm/txmgr/confirmer_test.go: `.Get(1)`
$DIR/core/chains/evm/txmgr/confirmer_test.go: `.Once()`
$DIR/core/chains/evm/txmgr/confirmer_test.go: `.BatchElemMustMatchParams(t, captured[0], attempts[0].Hash, "eth_getTransactionReceipt")`
$DIR/core/chains/evm/txmgr/confirmer_test.go: `.BatchElemMustMatchParams(t, captured[1], attempts[1].Hash, "eth_getTransactionReceipt")`
$DIR/core/chains/evm/txmgr/confirmer_test.go: `.BatchElemMustMatchParams(t, captured[2], attempts[2].Hash, "eth_getTransactionReceipt")`
$DIR/core/chains/evm/txmgr/confirmer_test.go: `.NewSqlxDB(t)`
$DIR/core/chains/evm/txmgr/confirmer_test.go: `.NewTestTxStore(t, db)`
$DIR/core/chains/evm/txmgr/confirmer_test.go: `.NewKeyStore(t, db)`
$DIR/core/chains/evm/txmgr/confirmer_test.go: `.Eth()`
$DIR/core/chains/evm/txmgr/confirmer_test.go: `.MustInsertRandomKeyReturningState(t, ethKeyStore)`
$DIR/core/chains/evm/txmgr/confirmer_test.go: `.NewEthClientMockWithDefaultChain(t)`
$DIR/core/chains/evm/txmgr/confirmer_test.go: `.Context(t)`
$DIR/core/chains/evm/txmgr/confirmer_test.go: `.MustInsertUnconfirmedEthTx(t, txStore, 1, fromAddress)`
$DIR/core/chains/evm/txmgr/confirmer_test.go: `.On("SequenceAt", mock.Anything, mock.Anything, mock.Anything)`
$DIR/core/chains/evm/txmgr/confirmer_test.go: `.Return(evmtypes.Nonce(0), nil)`
$DIR/core/chains/evm/txmgr/confirmer_test.go: `.Nonce(0)`
$DIR/core/chains/evm/txmgr/confirmer_test.go: `.CheckForReceipts(ctx, 42)`
$DIR/core/chains/evm/txmgr/confirmer_test.go: `.NewSqlxDB(t)`
$DIR/core/chains/evm/txmgr/confirmer_test.go: `.NewTestGeneralConfig(t)`
$DIR/core/chains/evm/txmgr/confirmer_test.go: `.NewTestTxStore(t, db)`
$DIR/core/chains/evm/txmgr/confirmer_test.go: `.NewKeyStore(t, db)`
$DIR/core/chains/evm/txmgr/confirmer_test.go: `.Eth()`
$DIR/core/chains/evm/txmgr/confirmer_test.go: `.MustInsertRandomKeyReturningState(t, ethKeyStore)`
$DIR/core/chains/evm/txmgr/confirmer_test.go: `.MustInsertRandomKeyReturningState(t, ethKeyStore)`
$DIR/core/chains/evm/txmgr/confirmer_test.go: `.MustInsertRandomKeyReturningState(t, ethKeyStore)`
$DIR/core/chains/evm/txmgr/confirmer_test.go: `.NewEthClientMockWithDefaultChain(t)`
$DIR/core/chains/evm/txmgr/confirmer_test.go: `.On("SequenceAt", mock.Anything, mock.Anything, mock.Anything)`
$DIR/core/chains/evm/txmgr/confirmer_test.go: `.Return(evmtypes.Nonce(20), nil)`
$DIR/core/chains/evm/txmgr/confirmer_test.go: `.Nonce(20)`
$DIR/core/chains/evm/txmgr/confirmer_test.go: `.NewChainScopedConfig(t, cfg)`
$DIR/core/chains/evm/txmgr/confirmer_test.go: `.Context(t)`
$DIR/core/chains/evm/txmgr/confirmer_test.go: `.MustInsertUnconfirmedEthTx(t, txStore, 0, fromAddress1_1)`
$DIR/core/chains/evm/txmgr/confirmer_test.go: `.MustInsertUnconfirmedEthTx(t, txStore, 1, fromAddress1_1)`
$DIR/core/chains/evm/txmgr/confirmer_test.go: `.MustInsertUnconfirmedEthTx(t, txStore, 3, fromAddress1_2)`
$DIR/core/chains/evm/txmgr/confirmer_test.go: `.MustInsertUnconfirmedEthTx(t, txStore, 8, fromAddress2_1)`
$DIR/core/chains/evm/txmgr/confirmer_test.go: `.MustExec(t, db, `UPDATE evm.txes SET state='confirmed' WHERE id = $1`, etx_other_chain.ID)`
$DIR/core/chains/evm/txmgr/confirmer_test.go: `.On("BatchCallContext", mock.Anything, mock.MatchedBy(func(b []rpc.BatchElem) bool {
return len(b) == 1 && cltest.BatchElemMatchesParams(b[0], attempt2_9.Hash, "eth_getTransactionReceipt")
}))`
$DIR/core/chains/evm/txmgr/confirmer_test.go: `.MatchedBy(func(b []rpc.BatchElem) bool {
return len(b) == 1 && cltest.BatchElemMatchesParams(b[0], attempt2_9.Hash, "eth_getTransactionReceipt")
})`
$DIR/core/chains/evm/txmgr/confirmer_test.go: `.BatchElemMatchesParams(b[0], attempt2_9.Hash, "eth_getTransactionReceipt")`
$DIR/core/chains/evm/txmgr/confirmer_test.go: `.Return(nil)`
$DIR/core/chains/evm/txmgr/confirmer_test.go: `.Run(func(args mock.Arguments) {
elems := args.Get(1).([]rpc.BatchElem)
*(elems[0].Result.(*evmtypes.Receipt)) = txmReceipt2_9
})`
$DIR/core/chains/evm/txmgr/confirmer_test.go: `.Get(1)`
$DIR/core/chains/evm/txmgr/confirmer_test.go: `.Once()`
$DIR/core/chains/evm/txmgr/confirmer_test.go: `.On("BatchCallContext", mock.Anything, mock.MatchedBy(func(b []rpc.BatchElem) bool {
return len(b) == 1 && cltest.BatchElemMatchesParams(b[0], attempt1_1.Hash, "eth_getTransactionReceipt")
}))`
$DIR/core/chains/evm/txmgr/confirmer_test.go: `.MatchedBy(func(b []rpc.BatchElem) bool {
return len(b) == 1 && cltest.BatchElemMatchesParams(b[0], attempt1_1.Hash, "eth_getTransactionReceipt")
})`
$DIR/core/chains/evm/txmgr/confirmer_test.go: `.BatchElemMatchesParams(b[0], attempt1_1.Hash, "eth_getTransactionReceipt")`
$DIR/core/chains/evm/txmgr/confirmer_test.go: `.Return(nil)`
$DIR/core/chains/evm/txmgr/confirmer_test.go: `.Run(func(args mock.Arguments) {
elems := args.Get(1).([]rpc.BatchElem)
*(elems[0].Result.(*evmtypes.Receipt)) = txmReceipt1_1
})`
$DIR/core/chains/evm/txmgr/confirmer_test.go: `.Get(1)`
$DIR/core/chains/evm/txmgr/confirmer_test.go: `.Once()`
$DIR/core/chains/evm/txmgr/confirmer_test.go: `.NewSqlxDB(t)`
$DIR/core/chains/evm/txmgr/confirmer_test.go: `.NewGeneralConfig(t, func(c *chainlink.Config, s *chainlink.Secrets) {
c.EVM[0].FinalityDepth = ptr[uint32](50)
})`
$DIR/core/chains/evm/txmgr/confirmer_test.go: `.NewTestTxStore(t, db)`
$DIR/core/chains/evm/txmgr/confirmer_test.go: `.NewKeyStore(t, db)`
$DIR/core/chains/evm/txmgr/confirmer_test.go: `.Eth()`
$DIR/core/chains/evm/txmgr/confirmer_test.go: `.MustInsertRandomKeyReturningState(t, ethKeyStore)`
$DIR/core/chains/evm/txmgr/confirmer_test.go: `.NewEthClientMockWithDefaultChain(t)`
$DIR/core/chains/evm/txmgr/confirmer_test.go: `.NewChainScopedConfig(t, cfg)`
$DIR/core/chains/evm/txmgr/confirmer_test.go: `.Context(t)`
$DIR/core/chains/evm/txmgr/confirmer_test.go: `.MustInsertUnconfirmedEthTx(t, txStore, 0, fromAddress)`
$DIR/core/chains/evm/txmgr/confirmer_test.go: `.MustInsertUnconfirmedEthTx(t, txStore, 1, fromAddress)`
$DIR/core/chains/evm/txmgr/confirmer_test.go: `.MustInsertUnconfirmedEthTx(t, txStore, 2, fromAddress)`
$DIR/core/chains/evm/txmgr/confirmer_test.go: `.MustInsertUnconfirmedEthTx(t, txStore, 3, fromAddress)`
$DIR/core/chains/evm/txmgr/confirmer_test.go: `.MustExec(t, db, `UPDATE evm.tx_attempts SET broadcast_before_block_num = 41 WHERE broadcast_before_block_num IS NULL`)`
$DIR/core/chains/evm/txmgr/confirmer_test.go: `.Run("marks buried eth_txes as 'confirmed_missing_receipt'", func(t *testing.T) {
txmReceipt0 := evmtypes.Receipt{
TxHash: attempt0_2.Hash,
BlockHash: testutils.NewHash(),
BlockNumber: big.NewInt(42),
TransactionIndex: uint(1),
Status: uint64(1),
}
txmReceipt3 := evmtypes.Receipt{
TxHash: attempt3_1.Hash,
BlockHash: testutils.NewHash(),
BlockNumber: big.NewInt(42),
TransactionIndex: uint(1),
Status: uint64(1),
}
ethClient.On("SequenceAt", mock.Anything, mock.Anything, mock.Anything).Return(evmtypes.Nonce(4), nil)
ethClient.On("BatchCallContext", mock.Anything, mock.MatchedBy(func(b []rpc.BatchElem) bool {
return len(b) == 6 &&
cltest.BatchElemMatchesParams(b[0], attempt0_2.Hash, "eth_getTransactionReceipt") &&
cltest.BatchElemMatchesParams(b[1], attempt0_1.Hash, "eth_getTransactionReceipt") &&
cltest.BatchElemMatchesParams(b[2], attempt1_2.Hash, "eth_getTransactionReceipt") &&
cltest.BatchElemMatchesParams(b[3], attempt1_1.Hash, "eth_getTransactionReceipt") &&
cltest.BatchElemMatchesParams(b[4], attempt2_1.Hash, "eth_getTransactionReceipt") &&
cltest.BatchElemMatchesParams(b[5], attempt3_1.Hash, "eth_getTransactionReceipt")
})).Return(nil).Run(func(args mock.Arguments) {
elems := args.Get(1).([]rpc.BatchElem)
// First transaction confirmed
*(elems[0].Result.(*evmtypes.Receipt)) = txmReceipt0
elems[1].Result = &evmtypes.Receipt{}
// Second transaction stil unconfirmed
elems[2].Result = &evmtypes.Receipt{}
elems[3].Result = &evmtypes.Receipt{}
// Third transaction still unconfirmed
elems[4].Result = &evmtypes.Receipt{}
// Fourth transaction is confirmed
*(elems[5].Result.(*evmtypes.Receipt)) = txmReceipt3
}).Once()
// PERFORM
// Block num of 43 is one higher than the receipt (as would generally be expected)
require.NoError(t, ec.CheckForReceipts(ctx, 43))
// Expected state is that the "top" eth_tx is now confirmed, with the
// two below it "confirmed_missing_receipt" and the "bottom" eth_tx also confirmed
var err error
etx3, err = txStore.FindTxWithAttempts(ctx, etx3.ID)
require.NoError(t, err)
require.Equal(t, txmgrcommon.TxConfirmed, etx3.State)
ethReceipt := etx3.TxAttempts[0].Receipts[0]
require.Equal(t, txmReceipt3.BlockHash, ethReceipt.GetBlockHash())
etx2, err = txStore.FindTxWithAttempts(ctx, etx2.ID)
require.NoError(t, err)
require.Equal(t, txmgrcommon.TxConfirmedMissingReceipt, etx2.State)
etx1, err = txStore.FindTxWithAttempts(ctx, etx1.ID)
require.NoError(t, err)
require.Equal(t, txmgrcommon.TxConfirmedMissingReceipt, etx1.State)
etx0, err = txStore.FindTxWithAttempts(ctx, etx0.ID)
require.NoError(t, err)
require.Equal(t, txmgrcommon.TxConfirmed, etx0.State)
require.Len(t, etx0.TxAttempts, 2)
require.Len(t, etx0.TxAttempts[0].Receipts, 1)
ethReceipt = etx0.TxAttempts[0].Receipts[0]
require.Equal(t, txmReceipt0.BlockHash, ethReceipt.GetBlockHash())
})`
$DIR/core/chains/evm/txmgr/confirmer_test.go: `.NewHash()`
$DIR/core/chains/evm/txmgr/confirmer_test.go: `.NewInt(42)`
$DIR/core/chains/evm/txmgr/confirmer_test.go: `.NewHash()`
$DIR/core/chains/evm/txmgr/confirmer_test.go: `.NewInt(42)`
$DIR/core/chains/evm/txmgr/confirmer_test.go: `.On("SequenceAt", mock.Anything, mock.Anything, mock.Anything)`
$DIR/core/chains/evm/txmgr/confirmer_test.go: `.Return(evmtypes.Nonce(4), nil)`
$DIR/core/chains/evm/txmgr/confirmer_test.go: `.Nonce(4)`
$DIR/core/chains/evm/txmgr/confirmer_test.go: `.On("BatchCallContext", mock.Anything, mock.MatchedBy(func(b []rpc.BatchElem) bool {
return len(b) == 6 &&
cltest.BatchElemMatchesParams(b[0], attempt0_2.Hash, "eth_getTransactionReceipt") &&
cltest.BatchElemMatchesParams(b[1], attempt0_1.Hash, "eth_getTransactionReceipt") &&
cltest.BatchElemMatchesParams(b[2], attempt1_2.Hash, "eth_getTransactionReceipt") &&
cltest.BatchElemMatchesParams(b[3], attempt1_1.Hash, "eth_getTransactionReceipt") &&
cltest.BatchElemMatchesParams(b[4], attempt2_1.Hash, "eth_getTransactionReceipt") &&
cltest.BatchElemMatchesParams(b[5], attempt3_1.Hash, "eth_getTransactionReceipt")
}))`
$DIR/core/chains/evm/txmgr/confirmer_test.go: `.MatchedBy(func(b []rpc.BatchElem) bool {
return len(b) == 6 &&
cltest.BatchElemMatchesParams(b[0], attempt0_2.Hash, "eth_getTransactionReceipt") &&
cltest.BatchElemMatchesParams(b[1], attempt0_1.Hash, "eth_getTransactionReceipt") &&
cltest.BatchElemMatchesParams(b[2], attempt1_2.Hash, "eth_getTransactionReceipt") &&
cltest.BatchElemMatchesParams(b[3], attempt1_1.Hash, "eth_getTransactionReceipt") &&
cltest.BatchElemMatchesParams(b[4], attempt2_1.Hash, "eth_getTransactionReceipt") &&
cltest.BatchElemMatchesParams(b[5], attempt3_1.Hash, "eth_getTransactionReceipt")
})`
$DIR/core/chains/evm/txmgr/confirmer_test.go: `.BatchElemMatchesParams(b[0], attempt0_2.Hash, "eth_getTransactionReceipt")`
$DIR/core/chains/evm/txmgr/confirmer_test.go: `.BatchElemMatchesParams(b[1], attempt0_1.Hash, "eth_getTransactionReceipt")`
$DIR/core/chains/evm/txmgr/confirmer_test.go: `.BatchElemMatchesParams(b[2], attempt1_2.Hash, "eth_getTransactionReceipt")`
$DIR/core/chains/evm/txmgr/confirmer_test.go: `.BatchElemMatchesParams(b[3], attempt1_1.Hash, "eth_getTransactionReceipt")`
$DIR/core/chains/evm/txmgr/confirmer_test.go: `.BatchElemMatchesParams(b[4], attempt2_1.Hash, "eth_getTransactionReceipt")`
$DIR/core/chains/evm/txmgr/confirmer_test.go: `.BatchElemMatchesParams(b[5], attempt3_1.Hash, "eth_getTransactionReceipt")`
$DIR/core/chains/evm/txmgr/confirmer_test.go: `.Return(nil)`
$DIR/core/chains/evm/txmgr/confirmer_test.go: `.Run(func(args mock.Arguments) {
elems := args.Get(1).([]rpc.BatchElem)
// First transaction confirmed
*(elems[0].Result.(*evmtypes.Receipt)) = txmReceipt0
elems[1].Result = &evmtypes.Receipt{}
// Second transaction stil unconfirmed
elems[2].Result = &evmtypes.Receipt{}
elems[3].Result = &evmtypes.Receipt{}
// Third transaction still unconfirmed
elems[4].Result = &evmtypes.Receipt{}
// Fourth transaction is confirmed
*(elems[5].Result.(*evmtypes.Receipt)) = txmReceipt3
})`
$DIR/core/chains/evm/txmgr/confirmer_test.go: `.Get(1)`
$DIR/core/chains/evm/txmgr/confirmer_test.go: `.Once()`
$DIR/core/chains/evm/txmgr/confirmer_test.go: `.FindTxWithAttempts(ctx, etx3.ID)`
$DIR/core/chains/evm/txmgr/confirmer_test.go: `.FindTxWithAttempts(ctx, etx2.ID)`
$DIR/core/chains/evm/txmgr/confirmer_test.go: `.FindTxWithAttempts(ctx, etx1.ID)`
$DIR/core/chains/evm/txmgr/confirmer_test.go: `.FindTxWithAttempts(ctx, etx0.ID)`
$DIR/core/chains/evm/txmgr/confirmer_test.go: `.Run("marks eth_txes with state 'confirmed_missing_receipt' as 'confirmed' if a receipt finally shows up", func(t *testing.T) {
txmReceipt := evmtypes.Receipt{
TxHash: attempt2_1.Hash,
BlockHash: testutils.NewHash(),
BlockNumber: big.NewInt(43),
TransactionIndex: uint(1),
Status: uint64(1),
}
ethClient.On("SequenceAt", mock.Anything, mock.Anything, mock.Anything).Return(evmtypes.Nonce(10), nil)
ethClient.On("BatchCallContext", mock.Anything, mock.MatchedBy(func(b []rpc.BatchElem) bool {
return len(b) == 3 &&
cltest.BatchElemMatchesParams(b[0], attempt1_2.Hash, "eth_getTransactionReceipt") &&
cltest.BatchElemMatchesParams(b[1], attempt1_1.Hash, "eth_getTransactionReceipt") &&
cltest.BatchElemMatchesParams(b[2], attempt2_1.Hash, "eth_getTransactionReceipt")
})).Return(nil).Run(func(args mock.Arguments) {
elems := args.Get(1).([]rpc.BatchElem)
// First transaction still unconfirmed
elems[0].Result = &evmtypes.Receipt{}
elems[1].Result = &evmtypes.Receipt{}
// Second transaction confirmed
*(elems[2].Result.(*evmtypes.Receipt)) = txmReceipt
}).Once()
// PERFORM
// Block num of 44 is one higher than the receipt (as would generally be expected)
require.NoError(t, ec.CheckForReceipts(ctx, 44))
// Expected state is that the "top" two eth_txes are now confirmed, with the
// one below it still "confirmed_missing_receipt" and the bottom one remains confirmed
var err error
etx3, err = txStore.FindTxWithAttempts(ctx, etx3.ID)
require.NoError(t, err)
require.Equal(t, txmgrcommon.TxConfirmed, etx3.State)
etx2, err = txStore.FindTxWithAttempts(ctx, etx2.ID)
require.NoError(t, err)
require.Equal(t, txmgrcommon.TxConfirmed, etx2.State)
ethReceipt := etx2.TxAttempts[0].Receipts[0]
require.Equal(t, txmReceipt.BlockHash, ethReceipt.GetBlockHash())
etx1, err = txStore.FindTxWithAttempts(ctx, etx1.ID)
require.NoError(t, err)
require.Equal(t, txmgrcommon.TxConfirmedMissingReceipt, etx1.State)
etx0, err = txStore.FindTxWithAttempts(ctx, etx0.ID)
require.NoError(t, err)
require.Equal(t, txmgrcommon.TxConfirmed, etx0.State)
})`
$DIR/core/chains/evm/txmgr/confirmer_test.go: `.NewHash()`
$DIR/core/chains/evm/txmgr/confirmer_test.go: `.NewInt(43)`
$DIR/core/chains/evm/txmgr/confirmer_test.go: `.On("SequenceAt", mock.Anything, mock.Anything, mock.Anything)`
$DIR/core/chains/evm/txmgr/confirmer_test.go: `.Return(evmtypes.Nonce(10), nil)`
$DIR/core/chains/evm/txmgr/confirmer_test.go: `.Nonce(10)`
$DIR/core/chains/evm/txmgr/confirmer_test.go: `.On("BatchCallContext", mock.Anything, mock.MatchedBy(func(b []rpc.BatchElem) bool {
return len(b) == 3 &&
cltest.BatchElemMatchesParams(b[0], attempt1_2.Hash, "eth_getTransactionReceipt") &&
cltest.BatchElemMatchesParams(b[1], attempt1_1.Hash, "eth_getTransactionReceipt") &&
cltest.BatchElemMatchesParams(b[2], attempt2_1.Hash, "eth_getTransactionReceipt")
}))`
$DIR/core/chains/evm/txmgr/confirmer_test.go: `.MatchedBy(func(b []rpc.BatchElem) bool {
return len(b) == 3 &&
cltest.BatchElemMatchesParams(b[0], attempt1_2.Hash, "eth_getTransactionReceipt") &&
cltest.BatchElemMatchesParams(b[1], attempt1_1.Hash, "eth_getTransactionReceipt") &&
cltest.BatchElemMatchesParams(b[2], attempt2_1.Hash, "eth_getTransactionReceipt")
})`
$DIR/core/chains/evm/txmgr/confirmer_test.go: `.BatchElemMatchesParams(b[0], attempt1_2.Hash, "eth_getTransactionReceipt")`
$DIR/core/chains/evm/txmgr/confirmer_test.go: `.BatchElemMatchesParams(b[1], attempt1_1.Hash, "eth_getTransactionReceipt")`
$DIR/core/chains/evm/txmgr/confirmer_test.go: `.BatchElemMatchesParams(b[2], attempt2_1.Hash, "eth_getTransactionReceipt")`
$DIR/core/chains/evm/txmgr/confirmer_test.go: `.Return(nil)`
$DIR/core/chains/evm/txmgr/confirmer_test.go: `.Run(func(args mock.Arguments) {
elems := args.Get(1).([]rpc.BatchElem)
// First transaction still unconfirmed
elems[0].Result = &evmtypes.Receipt{}
elems[1].Result = &evmtypes.Receipt{}
// Second transaction confirmed
*(elems[2].Result.(*evmtypes.Receipt)) = txmReceipt
})`
$DIR/core/chains/evm/txmgr/confirmer_test.go: `.Get(1)`
$DIR/core/chains/evm/txmgr/confirmer_test.go: `.Once()`
$DIR/core/chains/evm/txmgr/confirmer_test.go: `.FindTxWithAttempts(ctx, etx3.ID)`
$DIR/core/chains/evm/txmgr/confirmer_test.go: `.FindTxWithAttempts(ctx, etx2.ID)`
$DIR/core/chains/evm/txmgr/confirmer_test.go: `.FindTxWithAttempts(ctx, etx1.ID)`
$DIR/core/chains/evm/txmgr/confirmer_test.go: `.FindTxWithAttempts(ctx, etx0.ID)`
$DIR/core/chains/evm/txmgr/confirmer_test.go: `.Run("continues to leave eth_txes with state 'confirmed_missing_receipt' unchanged if at least one attempt is above EVM.FinalityDepth", func(t *testing.T) {
ethClient.On("SequenceAt", mock.Anything, mock.Anything, mock.Anything).Return(evmtypes.Nonce(10), nil)
ethClient.On("BatchCallContext", mock.Anything, mock.MatchedBy(func(b []rpc.BatchElem) bool {
return len(b) == 2 &&
cltest.BatchElemMatchesParams(b[0], attempt1_2.Hash, "eth_getTransactionReceipt") &&
cltest.BatchElemMatchesParams(b[1], attempt1_1.Hash, "eth_getTransactionReceipt")
})).Return(nil).Run(func(args mock.Arguments) {
elems := args.Get(1).([]rpc.BatchElem)
// Both attempts still unconfirmed
elems[0].Result = &evmtypes.Receipt{}
elems[1].Result = &evmtypes.Receipt{}
}).Once()
// PERFORM
// Block num of 80 puts the first attempt (21) below threshold but second attempt (41) still above
require.NoError(t, ec.CheckForReceipts(ctx, 80))
// Expected state is that the "top" two eth_txes are now confirmed, with the
// one below it still "confirmed_missing_receipt" and the bottom one remains confirmed
var err error
etx3, err = txStore.FindTxWithAttempts(ctx, etx3.ID)
require.NoError(t, err)
require.Equal(t, txmgrcommon.TxConfirmed, etx3.State)
etx2, err = txStore.FindTxWithAttempts(ctx, etx2.ID)
require.NoError(t, err)
require.Equal(t, txmgrcommon.TxConfirmed, etx2.State)
etx1, err = txStore.FindTxWithAttempts(ctx, etx1.ID)
require.NoError(t, err)
require.Equal(t, txmgrcommon.TxConfirmedMissingReceipt, etx1.State)
etx0, err = txStore.FindTxWithAttempts(ctx, etx0.ID)
require.NoError(t, err)
require.Equal(t, txmgrcommon.TxConfirmed, etx0.State)
})`
$DIR/core/chains/evm/txmgr/confirmer_test.go: `.On("SequenceAt", mock.Anything, mock.Anything, mock.Anything)`
$DIR/core/chains/evm/txmgr/confirmer_test.go: `.Return(evmtypes.Nonce(10), nil)`
$DIR/core/chains/evm/txmgr/confirmer_test.go: `.Nonce(10)`
$DIR/core/chains/evm/txmgr/confirmer_test.go: `.On("BatchCallContext", mock.Anything, mock.MatchedBy(func(b []rpc.BatchElem) bool {
return len(b) == 2 &&
cltest.BatchElemMatchesParams(b[0], attempt1_2.Hash, "eth_getTransactionReceipt") &&
cltest.BatchElemMatchesParams(b[1], attempt1_1.Hash, "eth_getTransactionReceipt")
}))`
$DIR/core/chains/evm/txmgr/confirmer_test.go: `.MatchedBy(func(b []rpc.BatchElem) bool {
return len(b) == 2 &&
cltest.BatchElemMatchesParams(b[0], attempt1_2.Hash, "eth_getTransactionReceipt") &&
cltest.BatchElemMatchesParams(b[1], attempt1_1.Hash, "eth_getTransactionReceipt")
})`
$DIR/core/chains/evm/txmgr/confirmer_test.go: `.BatchElemMatchesParams(b[0], attempt1_2.Hash, "eth_getTransactionReceipt")`
$DIR/core/chains/evm/txmgr/confirmer_test.go: `.BatchElemMatchesParams(b[1], attempt1_1.Hash, "eth_getTransactionReceipt")`
$DIR/core/chains/evm/txmgr/confirmer_test.go: `.Return(nil)`
$DIR/core/chains/evm/txmgr/confirmer_test.go: `.Run(func(args mock.Arguments) {
elems := args.Get(1).([]rpc.BatchElem)
// Both attempts still unconfirmed
elems[0].Result = &evmtypes.Receipt{}
elems[1].Result = &evmtypes.Receipt{}
})`
$DIR/core/chains/evm/txmgr/confirmer_test.go: `.Get(1)`
$DIR/core/chains/evm/txmgr/confirmer_test.go: `.Once()`
$DIR/core/chains/evm/txmgr/confirmer_test.go: `.FindTxWithAttempts(ctx, etx3.ID)`
$DIR/core/chains/evm/txmgr/confirmer_test.go: `.FindTxWithAttempts(ctx, etx2.ID)`
$DIR/core/chains/evm/txmgr/confirmer_test.go: `.FindTxWithAttempts(ctx, etx1.ID)`
$DIR/core/chains/evm/txmgr/confirmer_test.go: `.FindTxWithAttempts(ctx, etx0.ID)`
$DIR/core/chains/evm/txmgr/confirmer_test.go: `.On("SequenceAt", mock.Anything, mock.Anything, mock.Anything)`
$DIR/core/chains/evm/txmgr/confirmer_test.go: `.Return(evmtypes.Nonce(10), nil)`
$DIR/core/chains/evm/txmgr/confirmer_test.go: `.Nonce(10)`
$DIR/core/chains/evm/txmgr/confirmer_test.go: `.On("BatchCallContext", mock.Anything, mock.MatchedBy(func(b []rpc.BatchElem) bool {
return len(b) == 2 &&
cltest.BatchElemMatchesParams(b[0], attempt1_2.Hash, "eth_getTransactionReceipt") &&
cltest.BatchElemMatchesParams(b[1], attempt1_1.Hash, "eth_getTransactionReceipt")
}))`
$DIR/core/chains/evm/txmgr/confirmer_test.go: `.MatchedBy(func(b []rpc.BatchElem) bool {
return len(b) == 2 &&
cltest.BatchElemMatchesParams(b[0], attempt1_2.Hash, "eth_getTransactionReceipt") &&
cltest.BatchElemMatchesParams(b[1], attempt1_1.Hash, "eth_getTransactionReceipt")
})`
$DIR/core/chains/evm/txmgr/confirmer_test.go: `.BatchElemMatchesParams(b[0], attempt1_2.Hash, "eth_getTransactionReceipt")`
$DIR/core/chains/evm/txmgr/confirmer_test.go: `.BatchElemMatchesParams(b[1], attempt1_1.Hash, "eth_getTransactionReceipt")`
$DIR/core/chains/evm/txmgr/confirmer_test.go: `.Return(nil)`
$DIR/core/chains/evm/txmgr/confirmer_test.go: `.Run(func(args mock.Arguments) {
elems := args.Get(1).([]rpc.BatchElem)
// Both attempts still unconfirmed
elems[0].Result = &evmtypes.Receipt{}
elems[1].Result = &evmtypes.Receipt{}
})`
$DIR/core/chains/evm/txmgr/confirmer_test.go: `.Get(1)`
$DIR/core/chains/evm/txmgr/confirmer_test.go: `.Once()`
$DIR/core/chains/evm/txmgr/confirmer_test.go: `.FindTxWithAttempts(ctx, etx3.ID)`
$DIR/core/chains/evm/txmgr/confirmer_test.go: `.FindTxWithAttempts(ctx, etx2.ID)`
$DIR/core/chains/evm/txmgr/confirmer_test.go: `.FindTxWithAttempts(ctx, etx1.ID)`
$DIR/core/chains/evm/txmgr/confirmer_test.go: `.FindTxWithAttempts(ctx, etx0.ID)`
$DIR/core/chains/evm/txmgr/confirmer_test.go: `.NewSqlxDB(t)`
$DIR/core/chains/evm/txmgr/confirmer_test.go: `.NewGeneralConfig(t, func(c *chainlink.Config, s *chainlink.Secrets) {
c.EVM[0].FinalityDepth = ptr[uint32](50)
})`
$DIR/core/chains/evm/txmgr/confirmer_test.go: `.NewTestTxStore(t, db)`
$DIR/core/chains/evm/txmgr/confirmer_test.go: `.NewKeyStore(t, db)`
$DIR/core/chains/evm/txmgr/confirmer_test.go: `.Eth()`
$DIR/core/chains/evm/txmgr/confirmer_test.go: `.MustInsertRandomKeyReturningState(t, ethKeyStore)`
$DIR/core/chains/evm/txmgr/confirmer_test.go: `.NewEthClientMockWithDefaultChain(t)`
$DIR/core/chains/evm/txmgr/confirmer_test.go: `.On("IsL2")`
$DIR/core/chains/evm/txmgr/confirmer_test.go: `.Return(false)`
$DIR/core/chains/evm/txmgr/confirmer_test.go: `.Maybe()`
$DIR/core/chains/evm/txmgr/confirmer_test.go: `.NewChainScopedConfig(t, cfg)`
$DIR/core/chains/evm/txmgr/confirmer_test.go: `.Context(t)`
$DIR/core/chains/evm/txmgr/confirmer_test.go: `.Unix(1616509100, 0)`
$DIR/core/chains/evm/txmgr/confirmer_test.go: `.On("BatchCallContextAll", mock.Anything, mock.MatchedBy(func(b []rpc.BatchElem) bool {
return len(b) == 4 &&
cltest.BatchElemMatchesParams(b[0], hexutil.Encode(attempt0_2.SignedRawTx), "eth_sendRawTransaction") &&
cltest.BatchElemMatchesParams(b[1], hexutil.Encode(attempt1_2.SignedRawTx), "eth_sendRawTransaction") &&
cltest.BatchElemMatchesParams(b[2], hexutil.Encode(attempt2_1.SignedRawTx), "eth_sendRawTransaction") &&
cltest.BatchElemMatchesParams(b[3], hexutil.Encode(attempt3_1.SignedRawTx), "eth_sendRawTransaction")
}))`
$DIR/core/chains/evm/txmgr/confirmer_test.go: `.MatchedBy(func(b []rpc.BatchElem) bool {
return len(b) == 4 &&
cltest.BatchElemMatchesParams(b[0], hexutil.Encode(attempt0_2.SignedRawTx), "eth_sendRawTransaction") &&
cltest.BatchElemMatchesParams(b[1], hexutil.Encode(attempt1_2.SignedRawTx), "eth_sendRawTransaction") &&
cltest.BatchElemMatchesParams(b[2], hexutil.Encode(attempt2_1.SignedRawTx), "eth_sendRawTransaction") &&
cltest.BatchElemMatchesParams(b[3], hexutil.Encode(attempt3_1.SignedRawTx), "eth_sendRawTransaction")
})`
$DIR/core/chains/evm/txmgr/confirmer_test.go: `.BatchElemMatchesParams(b[0], hexutil.Encode(attempt0_2.SignedRawTx), "eth_sendRawTransaction")`
$DIR/core/chains/evm/txmgr/confirmer_test.go: `.Encode(attempt0_2.SignedRawTx)`
$DIR/core/chains/evm/txmgr/confirmer_test.go: `.BatchElemMatchesParams(b[1], hexutil.Encode(attempt1_2.SignedRawTx), "eth_sendRawTransaction")`
$DIR/core/chains/evm/txmgr/confirmer_test.go: `.Encode(attempt1_2.SignedRawTx)`
$DIR/core/chains/evm/txmgr/confirmer_test.go: `.BatchElemMatchesParams(b[2], hexutil.Encode(attempt2_1.SignedRawTx), "eth_sendRawTransaction")`
$DIR/core/chains/evm/txmgr/confirmer_test.go: `.Encode(attempt2_1.SignedRawTx)`
$DIR/core/chains/evm/txmgr/confirmer_test.go: `.BatchElemMatchesParams(b[3], hexutil.Encode(attempt3_1.SignedRawTx), "eth_sendRawTransaction")`
$DIR/core/chains/evm/txmgr/confirmer_test.go: `.Encode(attempt3_1.SignedRawTx)`
$DIR/core/chains/evm/txmgr/confirmer_test.go: `.Return(nil)`
$DIR/core/chains/evm/txmgr/confirmer_test.go: `.Run(func(args mock.Arguments) {
elems := args.Get(1).([]rpc.BatchElem)
// First transaction confirmed
elems[0].Error = errors.New("nonce too low")
elems[1].Error = errors.New("transaction underpriced")
elems[2].Error = nil
elems[3].Error = errors.New("transaction already finalized")
})`
$DIR/core/chains/evm/txmgr/confirmer_test.go: `.Get(1)`
$DIR/core/chains/evm/txmgr/confirmer_test.go: `.New("nonce too low")`
$DIR/core/chains/evm/txmgr/confirmer_test.go: `.New("transaction underpriced")`
$DIR/core/chains/evm/txmgr/confirmer_test.go: `.New("transaction already finalized")`
$DIR/core/chains/evm/txmgr/confirmer_test.go: `.Once()`
$DIR/core/chains/evm/txmgr/confirmer_test.go: `.FindTxWithAttempts(ctx, etx0.ID)`
$DIR/core/chains/evm/txmgr/confirmer_test.go: `.FindTxWithAttempts(ctx, etx1.ID)`
$DIR/core/chains/evm/txmgr/confirmer_test.go: `.FindTxWithAttempts(ctx, etx2.ID)`
$DIR/core/chains/evm/txmgr/confirmer_test.go: `.FindTxWithAttempts(ctx, etx3.ID)`
$DIR/core/chains/evm/txmgr/confirmer_test.go: `.BroadcastAt.Unix()`
$DIR/core/chains/evm/txmgr/confirmer_test.go: `.Unix()`
$DIR/core/chains/evm/txmgr/confirmer_test.go: `.NewSqlxDB(t)`
$DIR/core/chains/evm/txmgr/confirmer_test.go: `.NewGeneralConfig(t, func(c *chainlink.Config, s *chainlink.Secrets) {
c.EVM[0].FinalityDepth = ptr[uint32](50)
})`
$DIR/core/chains/evm/txmgr/confirmer_test.go: `.NewTestTxStore(t, db)`
$DIR/core/chains/evm/txmgr/confirmer_test.go: `.NewKeyStore(t, db)`
$DIR/core/chains/evm/txmgr/confirmer_test.go: `.Eth()`
$DIR/core/chains/evm/txmgr/confirmer_test.go: `.MustInsertRandomKeyReturningState(t, ethKeyStore)`
$DIR/core/chains/evm/txmgr/confirmer_test.go: `.NewEthClientMockWithDefaultChain(t)`
$DIR/core/chains/evm/txmgr/confirmer_test.go: `.On("IsL2")`
$DIR/core/chains/evm/txmgr/confirmer_test.go: `.Return(false)`
$DIR/core/chains/evm/txmgr/confirmer_test.go: `.Maybe()`
$DIR/core/chains/evm/txmgr/confirmer_test.go: `.NewChainScopedConfig(t, cfg)`
$DIR/core/chains/evm/txmgr/confirmer_test.go: `.Context(t)`
$DIR/core/chains/evm/txmgr/confirmer_test.go: `.Unix(1616509100, 0)`
$DIR/core/chains/evm/txmgr/confirmer_test.go: `.On("BatchCallContextAll", mock.Anything, mock.MatchedBy(func(b []rpc.BatchElem) bool {
return len(b) == 3 &&
cltest.BatchElemMatchesParams(b[0], hexutil.Encode(attempt0_2.SignedRawTx), "eth_sendRawTransaction") &&
cltest.BatchElemMatchesParams(b[1], hexutil.Encode(attempt1_2.SignedRawTx), "eth_sendRawTransaction") &&
cltest.BatchElemMatchesParams(b[2], hexutil.Encode(attempt2_1.SignedRawTx), "eth_sendRawTransaction")
}))`
$DIR/core/chains/evm/txmgr/confirmer_test.go: `.MatchedBy(func(b []rpc.BatchElem) bool {
return len(b) == 3 &&
cltest.BatchElemMatchesParams(b[0], hexutil.Encode(attempt0_2.SignedRawTx), "eth_sendRawTransaction") &&
cltest.BatchElemMatchesParams(b[1], hexutil.Encode(attempt1_2.SignedRawTx), "eth_sendRawTransaction") &&
cltest.BatchElemMatchesParams(b[2], hexutil.Encode(attempt2_1.SignedRawTx), "eth_sendRawTransaction")
})`
$DIR/core/chains/evm/txmgr/confirmer_test.go: `.BatchElemMatchesParams(b[0], hexutil.Encode(attempt0_2.SignedRawTx), "eth_sendRawTransaction")`
$DIR/core/chains/evm/txmgr/confirmer_test.go: `.Encode(attempt0_2.SignedRawTx)`
$DIR/core/chains/evm/txmgr/confirmer_test.go: `.BatchElemMatchesParams(b[1], hexutil.Encode(attempt1_2.SignedRawTx), "eth_sendRawTransaction")`
$DIR/core/chains/evm/txmgr/confirmer_test.go: `.Encode(attempt1_2.SignedRawTx)`
$DIR/core/chains/evm/txmgr/confirmer_test.go: `.BatchElemMatchesParams(b[2], hexutil.Encode(attempt2_1.SignedRawTx), "eth_sendRawTransaction")`
$DIR/core/chains/evm/txmgr/confirmer_test.go: `.Encode(attempt2_1.SignedRawTx)`
$DIR/core/chains/evm/txmgr/confirmer_test.go: `.Return(errors.New("Timed out"))`
$DIR/core/chains/evm/txmgr/confirmer_test.go: `.New("Timed out")`
$DIR/core/chains/evm/txmgr/confirmer_test.go: `.Once()`
$DIR/core/chains/evm/txmgr/confirmer_test.go: `.FindTxWithAttempts(ctx, etx0.ID)`
$DIR/core/chains/evm/txmgr/confirmer_test.go: `.FindTxWithAttempts(ctx, etx1.ID)`
$DIR/core/chains/evm/txmgr/confirmer_test.go: `.FindTxWithAttempts(ctx, etx2.ID)`
$DIR/core/chains/evm/txmgr/confirmer_test.go: `.BroadcastAt.Unix()`
$DIR/core/chains/evm/txmgr/confirmer_test.go: `.Unix()`
$DIR/core/chains/evm/txmgr/confirmer_test.go: `.NewSqlxDB(t)`
$DIR/core/chains/evm/txmgr/confirmer_test.go: `.NewGeneralConfig(t, func(c *chainlink.Config, s *chainlink.Secrets) {
c.EVM[0].FinalityDepth = ptr[uint32](50)
c.EVM[0].RPCDefaultBatchSize = ptr[uint32](1)
})`
$DIR/core/chains/evm/txmgr/confirmer_test.go: `.NewTestTxStore(t, db)`
$DIR/core/chains/evm/txmgr/confirmer_test.go: `.NewKeyStore(t, db)`
$DIR/core/chains/evm/txmgr/confirmer_test.go: `.Eth()`
$DIR/core/chains/evm/txmgr/confirmer_test.go: `.MustInsertRandomKeyReturningState(t, ethKeyStore)`
$DIR/core/chains/evm/txmgr/confirmer_test.go: `.NewEthClientMockWithDefaultChain(t)`
$DIR/core/chains/evm/txmgr/confirmer_test.go: `.On("IsL2")`
$DIR/core/chains/evm/txmgr/confirmer_test.go: `.Return(false)`
$DIR/core/chains/evm/txmgr/confirmer_test.go: `.Maybe()`
$DIR/core/chains/evm/txmgr/confirmer_test.go: `.NewChainScopedConfig(t, cfg)`
$DIR/core/chains/evm/txmgr/confirmer_test.go: `.Context(t)`
$DIR/core/chains/evm/txmgr/confirmer_test.go: `.Unix(1616509100, 0)`
$DIR/core/chains/evm/txmgr/confirmer_test.go: `.On("BatchCallContextAll", mock.Anything, mock.MatchedBy(func(b []rpc.BatchElem) bool {
return len(b) == 1 &&
cltest.BatchElemMatchesParams(b[0], hexutil.Encode(attempt0_2.SignedRawTx), "eth_sendRawTransaction")
}))`
$DIR/core/chains/evm/txmgr/confirmer_test.go: `.MatchedBy(func(b []rpc.BatchElem) bool {
return len(b) == 1 &&
cltest.BatchElemMatchesParams(b[0], hexutil.Encode(attempt0_2.SignedRawTx), "eth_sendRawTransaction")
})`
$DIR/core/chains/evm/txmgr/confirmer_test.go: `.BatchElemMatchesParams(b[0], hexutil.Encode(attempt0_2.SignedRawTx), "eth_sendRawTransaction")`
$DIR/core/chains/evm/txmgr/confirmer_test.go: `.Encode(attempt0_2.SignedRawTx)`
$DIR/core/chains/evm/txmgr/confirmer_test.go: `.Return(nil)`
$DIR/core/chains/evm/txmgr/confirmer_test.go: `.Run(func(args mock.Arguments) {
elems := args.Get(1).([]rpc.BatchElem)
// First transaction confirmed
elems[0].Error = errors.New("nonce too low")
})`
$DIR/core/chains/evm/txmgr/confirmer_test.go: `.Get(1)`
$DIR/core/chains/evm/txmgr/confirmer_test.go: `.New("nonce too low")`
$DIR/core/chains/evm/txmgr/confirmer_test.go: `.Once()`
$DIR/core/chains/evm/txmgr/confirmer_test.go: `.On("BatchCallContextAll", mock.Anything, mock.MatchedBy(func(b []rpc.BatchElem) bool {
return len(b) == 1 &&
cltest.BatchElemMatchesParams(b[0], hexutil.Encode(attempt1_2.SignedRawTx), "eth_sendRawTransaction")
}))`
$DIR/core/chains/evm/txmgr/confirmer_test.go: `.MatchedBy(func(b []rpc.BatchElem) bool {
return len(b) == 1 &&
cltest.BatchElemMatchesParams(b[0], hexutil.Encode(attempt1_2.SignedRawTx), "eth_sendRawTransaction")
})`
$DIR/core/chains/evm/txmgr/confirmer_test.go: `.BatchElemMatchesParams(b[0], hexutil.Encode(attempt1_2.SignedRawTx), "eth_sendRawTransaction")`
$DIR/core/chains/evm/txmgr/confirmer_test.go: `.Encode(attempt1_2.SignedRawTx)`
$DIR/core/chains/evm/txmgr/confirmer_test.go: `.Return(errors.New("Timed out"))`
$DIR/core/chains/evm/txmgr/confirmer_test.go: `.New("Timed out")`
$DIR/core/chains/evm/txmgr/confirmer_test.go: `.Once()`
$DIR/core/chains/evm/txmgr/confirmer_test.go: `.FindTxWithAttempts(ctx, etx0.ID)`
$DIR/core/chains/evm/txmgr/confirmer_test.go: `.FindTxWithAttempts(ctx, etx1.ID)`
$DIR/core/chains/evm/txmgr/confirmer_test.go: `.FindTxWithAttempts(ctx, etx2.ID)`
$DIR/core/chains/evm/txmgr/confirmer_test.go: `.BroadcastAt.Unix()`
$DIR/core/chains/evm/txmgr/confirmer_test.go: `.Unix()`
$DIR/core/chains/evm/txmgr/confirmer_test.go: `.NewSqlxDB(t)`
$DIR/core/chains/evm/txmgr/confirmer_test.go: `.NewTestGeneralConfig(t)`
$DIR/core/chains/evm/txmgr/confirmer_test.go: `.NewTestTxStore(t, db)`
$DIR/core/chains/evm/txmgr/confirmer_test.go: `.Context(t)`
$DIR/core/chains/evm/txmgr/confirmer_test.go: `.NewEthClientMockWithDefaultChain(t)`
$DIR/core/chains/evm/txmgr/confirmer_test.go: `.NewChainScopedConfig(t, cfg)`
$DIR/core/chains/evm/txmgr/confirmer_test.go: `.NewKeyStore(t, db)`
$DIR/core/chains/evm/txmgr/confirmer_test.go: `.Eth()`
$DIR/core/chains/evm/txmgr/confirmer_test.go: `.MustInsertRandomKeyReturningState(t, ethKeyStore)`
$DIR/core/chains/evm/txmgr/confirmer_test.go: `.MustInsertRandomKeyReturningState(t, ethKeyStore)`
$DIR/core/chains/evm/txmgr/confirmer_test.go: `.Test(t)`
$DIR/core/chains/evm/txmgr/confirmer_test.go: `.Run("returns nothing when there are no transactions", func(t *testing.T) {
etxs, err := ec.FindTxsRequiringRebroadcast(tests.Context(t), lggr, evmFromAddress, currentHead, gasBumpThreshold, 10, 0, &cltest.FixtureChainID)
require.NoError(t, err)
assert.Len(t, etxs, 0)
})`
$DIR/core/chains/evm/txmgr/confirmer_test.go: `.FindTxsRequiringRebroadcast(tests.Context(t), lggr, evmFromAddress, currentHead, gasBumpThreshold, 10, 0, &cltest.FixtureChainID)`
$DIR/core/chains/evm/txmgr/confirmer_test.go: `.Context(t)`
$DIR/core/chains/evm/txmgr/confirmer_test.go: `.Run("returns nothing when the transaction is in_progress", func(t *testing.T) {
etxs, err := ec.FindTxsRequiringRebroadcast(tests.Context(t), lggr, evmFromAddress, currentHead, gasBumpThreshold, 10, 0, &cltest.FixtureChainID)
require.NoError(t, err)
assert.Len(t, etxs, 0)
})`
$DIR/core/chains/evm/txmgr/confirmer_test.go: `.FindTxsRequiringRebroadcast(tests.Context(t), lggr, evmFromAddress, currentHead, gasBumpThreshold, 10, 0, &cltest.FixtureChainID)`
$DIR/core/chains/evm/txmgr/confirmer_test.go: `.Context(t)`
$DIR/core/chains/evm/txmgr/confirmer_test.go: `.MustInsertUnconfirmedEthTxWithBroadcastLegacyAttempt(t, txStore, nonce, fromAddress)`
$DIR/core/chains/evm/txmgr/confirmer_test.go: `.Run("ignores unconfirmed transactions with nil BroadcastBeforeBlockNum", func(t *testing.T) {
etxs, err := ec.FindTxsRequiringRebroadcast(tests.Context(t), lggr, evmFromAddress, currentHead, gasBumpThreshold, 10, 0, &cltest.FixtureChainID)
require.NoError(t, err)
assert.Len(t, etxs, 0)
})`
$DIR/core/chains/evm/txmgr/confirmer_test.go: `.FindTxsRequiringRebroadcast(tests.Context(t), lggr, evmFromAddress, currentHead, gasBumpThreshold, 10, 0, &cltest.FixtureChainID)`
$DIR/core/chains/evm/txmgr/confirmer_test.go: `.Context(t)`
$DIR/core/chains/evm/txmgr/confirmer_test.go: `.MustInsertUnconfirmedEthTxWithBroadcastLegacyAttempt(t, txStore, nonce, fromAddress)`
$DIR/core/chains/evm/txmgr/confirmer_test.go: `.FromTxAttempt(&attempt1_1)`
$DIR/core/chains/evm/txmgr/confirmer_test.go: `.NewWeiI(30000)`
$DIR/core/chains/evm/txmgr/confirmer_test.go: `.Run("returns nothing when the transaction is unconfirmed with an attempt that is recent", func(t *testing.T) {
etxs, err := ec.FindTxsRequiringRebroadcast(tests.Context(t), lggr, evmFromAddress, currentHead, gasBumpThreshold, 10, 0, &cltest.FixtureChainID)
require.NoError(t, err)
assert.Len(t, etxs, 0)
})`
$DIR/core/chains/evm/txmgr/confirmer_test.go: `.FindTxsRequiringRebroadcast(tests.Context(t), lggr, evmFromAddress, currentHead, gasBumpThreshold, 10, 0, &cltest.FixtureChainID)`
$DIR/core/chains/evm/txmgr/confirmer_test.go: `.Context(t)`
$DIR/core/chains/evm/txmgr/confirmer_test.go: `.MustInsertUnconfirmedEthTxWithBroadcastLegacyAttempt(t, txStore, nonce, fromAddress)`
$DIR/core/chains/evm/txmgr/confirmer_test.go: `.FromTxAttempt(&attempt2_1)`
$DIR/core/chains/evm/txmgr/confirmer_test.go: `.Run("returns nothing when the transaction has attempts that are too new", func(t *testing.T) {
etxs, err := ec.FindTxsRequiringRebroadcast(tests.Context(t), lggr, evmFromAddress, currentHead, gasBumpThreshold, 10, 0, &cltest.FixtureChainID)
require.NoError(t, err)
assert.Len(t, etxs, 0)
})`
$DIR/core/chains/evm/txmgr/confirmer_test.go: `.FindTxsRequiringRebroadcast(tests.Context(t), lggr, evmFromAddress, currentHead, gasBumpThreshold, 10, 0, &cltest.FixtureChainID)`
$DIR/core/chains/evm/txmgr/confirmer_test.go: `.Context(t)`
$DIR/core/chains/evm/txmgr/confirmer_test.go: `.NewEthTx(fromAddress)`
$DIR/core/chains/evm/txmgr/confirmer_test.go: `.Nonce(nonce)`
$DIR/core/chains/evm/txmgr/confirmer_test.go: `.Now()`
$DIR/core/chains/evm/txmgr/confirmer_test.go: `.Run("does nothing if the transaction is from a different address than the one given", func(t *testing.T) {
etxs, err := ec.FindTxsRequiringRebroadcast(tests.Context(t), lggr, evmOtherAddress, currentHead, gasBumpThreshold, 10, 0, &cltest.FixtureChainID)
require.NoError(t, err)
assert.Len(t, etxs, 0)
})`
$DIR/core/chains/evm/txmgr/confirmer_test.go: `.FindTxsRequiringRebroadcast(tests.Context(t), lggr, evmOtherAddress, currentHead, gasBumpThreshold, 10, 0, &cltest.FixtureChainID)`
$DIR/core/chains/evm/txmgr/confirmer_test.go: `.Context(t)`
$DIR/core/chains/evm/txmgr/confirmer_test.go: `.Run("returns the transaction if it is unconfirmed and has no attempts (note that this is an invariant violation, but we handle it anyway)", func(t *testing.T) {
etxs, err := ec.FindTxsRequiringRebroadcast(tests.Context(t), lggr, evmFromAddress, currentHead, gasBumpThreshold, 10, 0, &cltest.FixtureChainID)
require.NoError(t, err)
require.Len(t, etxs, 1)
assert.Equal(t, etxWithoutAttempts.ID, etxs[0].ID)
})`
$DIR/core/chains/evm/txmgr/confirmer_test.go: `.FindTxsRequiringRebroadcast(tests.Context(t), lggr, evmFromAddress, currentHead, gasBumpThreshold, 10, 0, &cltest.FixtureChainID)`
$DIR/core/chains/evm/txmgr/confirmer_test.go: `.Context(t)`
$DIR/core/chains/evm/txmgr/confirmer_test.go: `.Run("returns nothing for different chain id", func(t *testing.T) {
etxs, err := ec.FindTxsRequiringRebroadcast(tests.Context(t), lggr, evmFromAddress, currentHead, gasBumpThreshold, 10, 0, big.NewInt(42))
require.NoError(t, err)
require.Len(t, etxs, 0)
})`
$DIR/core/chains/evm/txmgr/confirmer_test.go: `.FindTxsRequiringRebroadcast(tests.Context(t), lggr, evmFromAddress, currentHead, gasBumpThreshold, 10, 0, big.NewInt(42))`
$DIR/core/chains/evm/txmgr/confirmer_test.go: `.Context(t)`
$DIR/core/chains/evm/txmgr/confirmer_test.go: `.NewInt(42)`
$DIR/core/chains/evm/txmgr/confirmer_test.go: `.MustInsertUnconfirmedEthTxWithBroadcastLegacyAttempt(t, txStore, nonce, fromAddress)`
$DIR/core/chains/evm/txmgr/confirmer_test.go: `.FromTxAttempt(&attempt3_1)`
$DIR/core/chains/evm/txmgr/confirmer_test.go: `.MustInsertUnconfirmedEthTxWithBroadcastLegacyAttempt(t, txStore, 0, otherAddress)`
$DIR/core/chains/evm/txmgr/confirmer_test.go: `.FromTxAttempt(&attemptOther1)`
$DIR/core/chains/evm/txmgr/confirmer_test.go: `.Run("returns the transaction if it is unconfirmed with an attempt that is older than gasBumpThreshold blocks", func(t *testing.T) {
etxs, err := ec.FindTxsRequiringRebroadcast(tests.Context(t), lggr, evmFromAddress, currentHead, gasBumpThreshold, 10, 0, &cltest.FixtureChainID)
require.NoError(t, err)
require.Len(t, etxs, 2)
assert.Equal(t, etxWithoutAttempts.ID, etxs[0].ID)
assert.Equal(t, etx3.ID, etxs[1].ID)
})`
$DIR/core/chains/evm/txmgr/confirmer_test.go: `.FindTxsRequiringRebroadcast(tests.Context(t), lggr, evmFromAddress, currentHead, gasBumpThreshold, 10, 0, &cltest.FixtureChainID)`
$DIR/core/chains/evm/txmgr/confirmer_test.go: `.Context(t)`
$DIR/core/chains/evm/txmgr/confirmer_test.go: `.Run("returns nothing if threshold is zero", func(t *testing.T) {
etxs, err := ec.FindTxsRequiringRebroadcast(tests.Context(t), lggr, evmFromAddress, currentHead, 0, 10, 0, &cltest.FixtureChainID)
require.NoError(t, err)
require.Len(t, etxs, 0)
})`
$DIR/core/chains/evm/txmgr/confirmer_test.go: `.FindTxsRequiringRebroadcast(tests.Context(t), lggr, evmFromAddress, currentHead, 0, 10, 0, &cltest.FixtureChainID)`
$DIR/core/chains/evm/txmgr/confirmer_test.go: `.Context(t)`
$DIR/core/chains/evm/txmgr/confirmer_test.go: `.Run("does not return more transactions for gas bumping than gasBumpThreshold", func(t *testing.T) {
// Unconfirmed txes in DB are:
// (unnamed) (nonce 2)
// etx1 (nonce 3)
// etx2 (nonce 4)
// etxWithoutAttempts (nonce 5)
// etx3 (nonce 6) - ready for bump
// etx4 (nonce 7) - ready for bump
etxs, err := ec.FindTxsRequiringRebroadcast(tests.Context(t), lggr, evmFromAddress, currentHead, gasBumpThreshold, 4, 0, &cltest.FixtureChainID)
require.NoError(t, err)
require.Len(t, etxs, 1) // returns etxWithoutAttempts only - eligible for gas bumping because it technically doesn't have any attempts within gasBumpThreshold blocks
assert.Equal(t, etxWithoutAttempts.ID, etxs[0].ID)
etxs, err = ec.FindTxsRequiringRebroadcast(tests.Context(t), lggr, evmFromAddress, currentHead, gasBumpThreshold, 5, 0, &cltest.FixtureChainID)
require.NoError(t, err)
require.Len(t, etxs, 2) // includes etxWithoutAttempts, etx3 and etx4
assert.Equal(t, etxWithoutAttempts.ID, etxs[0].ID)
assert.Equal(t, etx3.ID, etxs[1].ID)
// Zero limit disables it
etxs, err = ec.FindTxsRequiringRebroadcast(tests.Context(t), lggr, evmFromAddress, currentHead, gasBumpThreshold, 0, 0, &cltest.FixtureChainID)
require.NoError(t, err)
require.Len(t, etxs, 2) // includes etxWithoutAttempts, etx3 and etx4
})`
$DIR/core/chains/evm/txmgr/confirmer_test.go: `.FindTxsRequiringRebroadcast(tests.Context(t), lggr, evmFromAddress, currentHead, gasBumpThreshold, 4, 0, &cltest.FixtureChainID)`
$DIR/core/chains/evm/txmgr/confirmer_test.go: `.Context(t)`
$DIR/core/chains/evm/txmgr/confirmer_test.go: `.FindTxsRequiringRebroadcast(tests.Context(t), lggr, evmFromAddress, currentHead, gasBumpThreshold, 5, 0, &cltest.FixtureChainID)`
$DIR/core/chains/evm/txmgr/confirmer_test.go: `.Context(t)`
$DIR/core/chains/evm/txmgr/confirmer_test.go: `.FindTxsRequiringRebroadcast(tests.Context(t), lggr, evmFromAddress, currentHead, gasBumpThreshold, 0, 0, &cltest.FixtureChainID)`
$DIR/core/chains/evm/txmgr/confirmer_test.go: `.Context(t)`
$DIR/core/chains/evm/txmgr/confirmer_test.go: `.MustInsertUnconfirmedEthTxWithBroadcastLegacyAttempt(t, txStore, nonce, fromAddress)`
$DIR/core/chains/evm/txmgr/confirmer_test.go: `.FromTxAttempt(&attempt4_1)`
$DIR/core/chains/evm/txmgr/confirmer_test.go: `.Run("ignores pending transactions for another key", func(t *testing.T) {
// Re-use etx3 nonce for another key, it should not affect the results for this key
etxOther := cltest.MustInsertUnconfirmedEthTxWithBroadcastLegacyAttempt(t, txStore, (*etx3.Sequence).Int64(), otherAddress)
aOther := etxOther.TxAttempts[0]
dbAttempt = txmgr.DbEthTxAttempt{}
dbAttempt.FromTxAttempt(&aOther)
require.NoError(t, db.Get(&dbAttempt, `UPDATE evm.tx_attempts SET broadcast_before_block_num=$1 WHERE id=$2 RETURNING *`, oldEnough, aOther.ID))
etxs, err := ec.FindTxsRequiringRebroadcast(tests.Context(t), lggr, evmFromAddress, currentHead, gasBumpThreshold, 6, 0, &cltest.FixtureChainID)
require.NoError(t, err)
require.Len(t, etxs, 3) // includes etxWithoutAttempts, etx3 and etx4
assert.Equal(t, etxWithoutAttempts.ID, etxs[0].ID)
assert.Equal(t, etx3.ID, etxs[1].ID)
assert.Equal(t, etx4.ID, etxs[2].ID)
})`
$DIR/core/chains/evm/txmgr/confirmer_test.go: `.MustInsertUnconfirmedEthTxWithBroadcastLegacyAttempt(t, txStore, (*etx3.Sequence).Int64(), otherAddress)`
$DIR/core/chains/evm/txmgr/confirmer_test.go: `.Int64()`
$DIR/core/chains/evm/txmgr/confirmer_test.go: `.FromTxAttempt(&aOther)`
$DIR/core/chains/evm/txmgr/confirmer_test.go: `.FindTxsRequiringRebroadcast(tests.Context(t), lggr, evmFromAddress, currentHead, gasBumpThreshold, 6, 0, &cltest.FixtureChainID)`
$DIR/core/chains/evm/txmgr/confirmer_test.go: `.Context(t)`
$DIR/core/chains/evm/txmgr/confirmer_test.go: `.NewWeiI(30000)`
$DIR/core/chains/evm/txmgr/confirmer_test.go: `.Run("returns the transaction if it is unconfirmed with two attempts that are older than gasBumpThreshold blocks", func(t *testing.T) {
etxs, err := ec.FindTxsRequiringRebroadcast(tests.Context(t), lggr, evmFromAddress, currentHead, gasBumpThreshold, 10, 0, &cltest.FixtureChainID)
require.NoError(t, err)
require.Len(t, etxs, 3)
assert.Equal(t, etxWithoutAttempts.ID, etxs[0].ID)
assert.Equal(t, etx3.ID, etxs[1].ID)
assert.Equal(t, etx4.ID, etxs[2].ID)
})`
$DIR/core/chains/evm/txmgr/confirmer_test.go: `.FindTxsRequiringRebroadcast(tests.Context(t), lggr, evmFromAddress, currentHead, gasBumpThreshold, 10, 0, &cltest.FixtureChainID)`
$DIR/core/chains/evm/txmgr/confirmer_test.go: `.Context(t)`
$DIR/core/chains/evm/txmgr/confirmer_test.go: `.NewWeiI(40000)`
$DIR/core/chains/evm/txmgr/confirmer_test.go: `.Run("does not return the transaction if it has some older but one newer attempt", func(t *testing.T) {
etxs, err := ec.FindTxsRequiringRebroadcast(tests.Context(t), lggr, evmFromAddress, currentHead, gasBumpThreshold, 10, 0, &cltest.FixtureChainID)
require.NoError(t, err)
require.Len(t, etxs, 2)
assert.Equal(t, etxWithoutAttempts.ID, etxs[0].ID)
assert.Equal(t, *etxWithoutAttempts.Sequence, *(etxs[0].Sequence))
require.Equal(t, evmtypes.Nonce(5), *etxWithoutAttempts.Sequence)
assert.Equal(t, etx4.ID, etxs[1].ID)
assert.Equal(t, *etx4.Sequence, *(etxs[1].Sequence))
require.Equal(t, evmtypes.Nonce(7), *etx4.Sequence)
})`
$DIR/core/chains/evm/txmgr/confirmer_test.go: `.FindTxsRequiringRebroadcast(tests.Context(t), lggr, evmFromAddress, currentHead, gasBumpThreshold, 10, 0, &cltest.FixtureChainID)`
$DIR/core/chains/evm/txmgr/confirmer_test.go: `.Context(t)`
$DIR/core/chains/evm/txmgr/confirmer_test.go: `.NewLegacyEthTxAttempt(t, etx4.ID)`
$DIR/core/chains/evm/txmgr/confirmer_test.go: `.NewWeiI(40000)`
$DIR/core/chains/evm/txmgr/confirmer_test.go: `.NewWeiI(30001)`
$DIR/core/chains/evm/txmgr/confirmer_test.go: `.Run("returns unique attempts requiring resubmission due to insufficient eth, ordered by nonce asc", func(t *testing.T) {
etxs, err := ec.FindTxsRequiringRebroadcast(tests.Context(t), lggr, evmFromAddress, currentHead, gasBumpThreshold, 10, 0, &cltest.FixtureChainID)
require.NoError(t, err)
require.Len(t, etxs, 4)
assert.Equal(t, etxWithoutAttempts.ID, etxs[0].ID)
assert.Equal(t, *etxWithoutAttempts.Sequence, *(etxs[0].Sequence))
assert.Equal(t, etx4.ID, etxs[1].ID)
assert.Equal(t, *etx4.Sequence, *(etxs[1].Sequence))
assert.Equal(t, etx5.ID, etxs[2].ID)
assert.Equal(t, *etx5.Sequence, *(etxs[2].Sequence))
assert.Equal(t, etx6.ID, etxs[3].ID)
assert.Equal(t, *etx6.Sequence, *(etxs[3].Sequence))
})`
$DIR/core/chains/evm/txmgr/confirmer_test.go: `.FindTxsRequiringRebroadcast(tests.Context(t), lggr, evmFromAddress, currentHead, gasBumpThreshold, 10, 0, &cltest.FixtureChainID)`
$DIR/core/chains/evm/txmgr/confirmer_test.go: `.Context(t)`
$DIR/core/chains/evm/txmgr/confirmer_test.go: `.FindTxsRequiringRebroadcast(tests.Context(t), lggr, evmFromAddress, currentHead, gasBumpThreshold, 10, 2, &cltest.FixtureChainID)`
$DIR/core/chains/evm/txmgr/confirmer_test.go: `.Context(t)`
$DIR/core/chains/evm/txmgr/confirmer_test.go: `.Test(t)`
$DIR/core/chains/evm/txmgr/confirmer_test.go: `.NewSqlxDB(t)`
$DIR/core/chains/evm/txmgr/confirmer_test.go: `.NewEthClientMockWithDefaultChain(t)`
$DIR/core/chains/evm/txmgr/confirmer_test.go: `.Run("should retry previous attempt if connectivity check failed for legacy transactions", func(t *testing.T) {
cfg := configtest.NewGeneralConfig(t, func(c *chainlink.Config, s *chainlink.Secrets) {
c.EVM[0].GasEstimator.EIP1559DynamicFees = ptr(false)
c.EVM[0].GasEstimator.BlockHistory.BlockHistorySize = ptr[uint16](2)
c.EVM[0].GasEstimator.BlockHistory.CheckInclusionBlocks = ptr[uint16](4)
})
ccfg := evmtest.NewChainScopedConfig(t, cfg)
ctx := tests.Context(t)
txStore := cltest.NewTestTxStore(t, db)
ethKeyStore := cltest.NewKeyStore(t, db).Eth()
_, fromAddress := cltest.MustInsertRandomKeyReturningState(t, ethKeyStore)
kst := ksmocks.NewEth(t)
estimator := gasmocks.NewEvmEstimator(t)
newEst := func(logger.Logger) gas.EvmEstimator { return estimator }
estimator.On("BumpLegacyGas", mock.Anything, mock.Anything, mock.Anything, mock.Anything, mock.Anything).Return(nil, uint64(0), pkgerrors.Wrapf(commonfee.ErrConnectivity, "transaction..."))
ge := ccfg.EVM().GasEstimator()
feeEstimator := gas.NewEvmFeeEstimator(lggr, newEst, ge.EIP1559DynamicFees(), ge)
txBuilder := txmgr.NewEvmTxAttemptBuilder(*ethClient.ConfiguredChainID(), ge, kst, feeEstimator)
addresses := []gethCommon.Address{fromAddress}
kst.On("EnabledAddressesForChain", mock.Anything, &cltest.FixtureChainID).Return(addresses, nil).Maybe()
stuckTxDetector := txmgr.NewStuckTxDetector(lggr, testutils.FixtureChainID, "", assets.NewWei(assets.NewEth(100).ToInt()), ccfg.EVM().Transactions().AutoPurge(), feeEstimator, txStore, ethClient)
// Create confirmer with necessary state
ec := txmgr.NewEvmConfirmer(txStore, txmgr.NewEvmTxmClient(ethClient, nil), ccfg.EVM(), txmgr.NewEvmTxmFeeConfig(ccfg.EVM().GasEstimator()), ccfg.EVM().Transactions(), cfg.Database(), kst, txBuilder, lggr, stuckTxDetector)
servicetest.Run(t, ec)
currentHead := int64(30)
oldEnough := int64(15)
nonce := int64(0)
originalBroadcastAt := time.Unix(1616509100, 0)
etx := cltest.MustInsertUnconfirmedEthTxWithBroadcastLegacyAttempt(t, txStore, nonce, fromAddress, originalBroadcastAt)
attempt1 := etx.TxAttempts[0]
var dbAttempt txmgr.DbEthTxAttempt
dbAttempt.FromTxAttempt(&attempt1)
require.NoError(t, db.Get(&dbAttempt, `UPDATE evm.tx_attempts SET broadcast_before_block_num=$1 WHERE id=$2 RETURNING *`, oldEnough, attempt1.ID))
// Send transaction and assume success.
ethClient.On("SendTransactionReturnCode", mock.Anything, mock.Anything, fromAddress).Return(commonclient.Successful, nil).Once()
err := ec.RebroadcastWhereNecessary(tests.Context(t), currentHead)
require.NoError(t, err)
etx, err = txStore.FindTxWithAttempts(ctx, etx.ID)
require.NoError(t, err)
require.Len(t, etx.TxAttempts, 1)
})`
$DIR/core/chains/evm/txmgr/confirmer_test.go: `.NewGeneralConfig(t, func(c *chainlink.Config, s *chainlink.Secrets) {
c.EVM[0].GasEstimator.EIP1559DynamicFees = ptr(false)
c.EVM[0].GasEstimator.BlockHistory.BlockHistorySize = ptr[uint16](2)
c.EVM[0].GasEstimator.BlockHistory.CheckInclusionBlocks = ptr[uint16](4)
})`
$DIR/core/chains/evm/txmgr/confirmer_test.go: `.NewChainScopedConfig(t, cfg)`
$DIR/core/chains/evm/txmgr/confirmer_test.go: `.Context(t)`
$DIR/core/chains/evm/txmgr/confirmer_test.go: `.NewTestTxStore(t, db)`
$DIR/core/chains/evm/txmgr/confirmer_test.go: `.NewKeyStore(t, db)`
$DIR/core/chains/evm/txmgr/confirmer_test.go: `.Eth()`
$DIR/core/chains/evm/txmgr/confirmer_test.go: `.MustInsertRandomKeyReturningState(t, ethKeyStore)`
$DIR/core/chains/evm/txmgr/confirmer_test.go: `.NewEth(t)`
$DIR/core/chains/evm/txmgr/confirmer_test.go: `.NewEvmEstimator(t)`
$DIR/core/chains/evm/txmgr/confirmer_test.go: `.On("BumpLegacyGas", mock.Anything, mock.Anything, mock.Anything, mock.Anything, mock.Anything)`
$DIR/core/chains/evm/txmgr/confirmer_test.go: `.Return(nil, uint64(0), pkgerrors.Wrapf(commonfee.ErrConnectivity, "transaction..."))`
$DIR/core/chains/evm/txmgr/confirmer_test.go: `.Wrapf(commonfee.ErrConnectivity, "transaction...")`
$DIR/core/chains/evm/txmgr/confirmer_test.go: `.EVM()`
$DIR/core/chains/evm/txmgr/confirmer_test.go: `.GasEstimator()`
$DIR/core/chains/evm/txmgr/confirmer_test.go: `.NewEvmFeeEstimator(lggr, newEst, ge.EIP1559DynamicFees(), ge)`
$DIR/core/chains/evm/txmgr/confirmer_test.go: `.EIP1559DynamicFees()`
$DIR/core/chains/evm/txmgr/confirmer_test.go: `.NewEvmTxAttemptBuilder(*ethClient.ConfiguredChainID(), ge, kst, feeEstimator)`
$DIR/core/chains/evm/txmgr/confirmer_test.go: `.ConfiguredChainID()`
$DIR/core/chains/evm/txmgr/confirmer_test.go: `.On("EnabledAddressesForChain", mock.Anything, &cltest.FixtureChainID)`
$DIR/core/chains/evm/txmgr/confirmer_test.go: `.Return(addresses, nil)`
$DIR/core/chains/evm/txmgr/confirmer_test.go: `.Maybe()`
$DIR/core/chains/evm/txmgr/confirmer_test.go: `.NewStuckTxDetector(lggr, testutils.FixtureChainID, "", assets.NewWei(assets.NewEth(100).ToInt()), ccfg.EVM().Transactions().AutoPurge(), feeEstimator, txStore, ethClient)`
$DIR/core/chains/evm/txmgr/confirmer_test.go: `.NewWei(assets.NewEth(100).ToInt())`
$DIR/core/chains/evm/txmgr/confirmer_test.go: `.NewEth(100)`
$DIR/core/chains/evm/txmgr/confirmer_test.go: `.ToInt()`
$DIR/core/chains/evm/txmgr/confirmer_test.go: `.EVM()`
$DIR/core/chains/evm/txmgr/confirmer_test.go: `.Transactions()`
$DIR/core/chains/evm/txmgr/confirmer_test.go: `.AutoPurge()`
$DIR/core/chains/evm/txmgr/confirmer_test.go: `.NewEvmConfirmer(txStore, txmgr.NewEvmTxmClient(ethClient, nil), ccfg.EVM(), txmgr.NewEvmTxmFeeConfig(ccfg.EVM().GasEstimator()), ccfg.EVM().Transactions(), cfg.Database(), kst, txBuilder, lggr, stuckTxDetector)`
$DIR/core/chains/evm/txmgr/confirmer_test.go: `.NewEvmTxmClient(ethClient, nil)`
$DIR/core/chains/evm/txmgr/confirmer_test.go: `.EVM()`
$DIR/core/chains/evm/txmgr/confirmer_test.go: `.NewEvmTxmFeeConfig(ccfg.EVM().GasEstimator())`
$DIR/core/chains/evm/txmgr/confirmer_test.go: `.EVM()`
$DIR/core/chains/evm/txmgr/confirmer_test.go: `.GasEstimator()`
$DIR/core/chains/evm/txmgr/confirmer_test.go: `.EVM()`
$DIR/core/chains/evm/txmgr/confirmer_test.go: `.Transactions()`
$DIR/core/chains/evm/txmgr/confirmer_test.go: `.Database()`
$DIR/core/chains/evm/txmgr/confirmer_test.go: `.Run(t, ec)`
$DIR/core/chains/evm/txmgr/confirmer_test.go: `.Unix(1616509100, 0)`
$DIR/core/chains/evm/txmgr/confirmer_test.go: `.MustInsertUnconfirmedEthTxWithBroadcastLegacyAttempt(t, txStore, nonce, fromAddress, originalBroadcastAt)`
$DIR/core/chains/evm/txmgr/confirmer_test.go: `.FromTxAttempt(&attempt1)`
$DIR/core/chains/evm/txmgr/confirmer_test.go: `.On("SendTransactionReturnCode", mock.Anything, mock.Anything, fromAddress)`
$DIR/core/chains/evm/txmgr/confirmer_test.go: `.Return(commonclient.Successful, nil)`
$DIR/core/chains/evm/txmgr/confirmer_test.go: `.Once()`
$DIR/core/chains/evm/txmgr/confirmer_test.go: `.RebroadcastWhereNecessary(tests.Context(t), currentHead)`
$DIR/core/chains/evm/txmgr/confirmer_test.go: `.Context(t)`
$DIR/core/chains/evm/txmgr/confirmer_test.go: `.FindTxWithAttempts(ctx, etx.ID)`
$DIR/core/chains/evm/txmgr/confirmer_test.go: `.NewGeneralConfig(t, func(c *chainlink.Config, s *chainlink.Secrets) {
c.EVM[0].GasEstimator.EIP1559DynamicFees = ptr(true)
c.EVM[0].GasEstimator.BlockHistory.BlockHistorySize = ptr[uint16](2)
c.EVM[0].GasEstimator.BlockHistory.CheckInclusionBlocks = ptr[uint16](4)
})`
$DIR/core/chains/evm/txmgr/confirmer_test.go: `.NewChainScopedConfig(t, cfg)`
$DIR/core/chains/evm/txmgr/confirmer_test.go: `.Context(t)`
$DIR/core/chains/evm/txmgr/confirmer_test.go: `.NewTestTxStore(t, db)`
$DIR/core/chains/evm/txmgr/confirmer_test.go: `.NewKeyStore(t, db)`
$DIR/core/chains/evm/txmgr/confirmer_test.go: `.Eth()`
$DIR/core/chains/evm/txmgr/confirmer_test.go: `.MustInsertRandomKeyReturningState(t, ethKeyStore)`
$DIR/core/chains/evm/txmgr/confirmer_test.go: `.NewEth(t)`
$DIR/core/chains/evm/txmgr/confirmer_test.go: `.NewEvmEstimator(t)`
$DIR/core/chains/evm/txmgr/confirmer_test.go: `.On("BumpDynamicFee", mock.Anything, mock.Anything, mock.Anything, mock.Anything)`
$DIR/core/chains/evm/txmgr/confirmer_test.go: `.Return(gas.DynamicFee{}, pkgerrors.Wrapf(commonfee.ErrConnectivity, "transaction..."))`
$DIR/core/chains/evm/txmgr/confirmer_test.go: `.Wrapf(commonfee.ErrConnectivity, "transaction...")`
$DIR/core/chains/evm/txmgr/confirmer_test.go: `.EVM()`
$DIR/core/chains/evm/txmgr/confirmer_test.go: `.GasEstimator()`
$DIR/core/chains/evm/txmgr/confirmer_test.go: `.NewEvmFeeEstimator(lggr, newEst, ge.EIP1559DynamicFees(), ge)`
$DIR/core/chains/evm/txmgr/confirmer_test.go: `.EIP1559DynamicFees()`
$DIR/core/chains/evm/txmgr/confirmer_test.go: `.NewEvmTxAttemptBuilder(*ethClient.ConfiguredChainID(), ge, kst, feeEstimator)`
$DIR/core/chains/evm/txmgr/confirmer_test.go: `.ConfiguredChainID()`
$DIR/core/chains/evm/txmgr/confirmer_test.go: `.On("EnabledAddressesForChain", mock.Anything, &cltest.FixtureChainID)`
$DIR/core/chains/evm/txmgr/confirmer_test.go: `.Return(addresses, nil)`
$DIR/core/chains/evm/txmgr/confirmer_test.go: `.Maybe()`
$DIR/core/chains/evm/txmgr/confirmer_test.go: `.NewStuckTxDetector(lggr, testutils.FixtureChainID, "", assets.NewWei(assets.NewEth(100).ToInt()), ccfg.EVM().Transactions().AutoPurge(), feeEstimator, txStore, ethClient)`
$DIR/core/chains/evm/txmgr/confirmer_test.go: `.NewWei(assets.NewEth(100).ToInt())`
$DIR/core/chains/evm/txmgr/confirmer_test.go: `.NewEth(100)`
$DIR/core/chains/evm/txmgr/confirmer_test.go: `.ToInt()`
$DIR/core/chains/evm/txmgr/confirmer_test.go: `.EVM()`
$DIR/core/chains/evm/txmgr/confirmer_test.go: `.Transactions()`
$DIR/core/chains/evm/txmgr/confirmer_test.go: `.AutoPurge()`
$DIR/core/chains/evm/txmgr/confirmer_test.go: `.NewEvmConfirmer(txStore, txmgr.NewEvmTxmClient(ethClient, nil), ccfg.EVM(), txmgr.NewEvmTxmFeeConfig(ccfg.EVM().GasEstimator()), ccfg.EVM().Transactions(), cfg.Database(), kst, txBuilder, lggr, stuckTxDetector)`
$DIR/core/chains/evm/txmgr/confirmer_test.go: `.NewEvmTxmClient(ethClient, nil)`
$DIR/core/chains/evm/txmgr/confirmer_test.go: `.EVM()`
$DIR/core/chains/evm/txmgr/confirmer_test.go: `.NewEvmTxmFeeConfig(ccfg.EVM().GasEstimator())`
$DIR/core/chains/evm/txmgr/confirmer_test.go: `.EVM()`
$DIR/core/chains/evm/txmgr/confirmer_test.go: `.GasEstimator()`
$DIR/core/chains/evm/txmgr/confirmer_test.go: `.EVM()`
$DIR/core/chains/evm/txmgr/confirmer_test.go: `.Transactions()`
$DIR/core/chains/evm/txmgr/confirmer_test.go: `.Database()`
$DIR/core/chains/evm/txmgr/confirmer_test.go: `.Run(t, ec)`
$DIR/core/chains/evm/txmgr/confirmer_test.go: `.Unix(1616509100, 0)`
$DIR/core/chains/evm/txmgr/confirmer_test.go: `.FromTxAttempt(&attempt1)`
$DIR/core/chains/evm/txmgr/confirmer_test.go: `.On("SendTransactionReturnCode", mock.Anything, mock.Anything, fromAddress)`
$DIR/core/chains/evm/txmgr/confirmer_test.go: `.Return(commonclient.Successful, nil)`
$DIR/core/chains/evm/txmgr/confirmer_test.go: `.Once()`
$DIR/core/chains/evm/txmgr/confirmer_test.go: `.RebroadcastWhereNecessary(tests.Context(t), currentHead)`
$DIR/core/chains/evm/txmgr/confirmer_test.go: `.Context(t)`
$DIR/core/chains/evm/txmgr/confirmer_test.go: `.FindTxWithAttempts(ctx, etx.ID)`
$DIR/core/chains/evm/txmgr/confirmer_test.go: `.NewSqlxDB(t)`
$DIR/core/chains/evm/txmgr/confirmer_test.go: `.NewGeneralConfig(t, func(c *chainlink.Config, s *chainlink.Secrets) {
c.EVM[0].GasEstimator.PriceMax = assets.GWei(500)
})`
$DIR/core/chains/evm/txmgr/confirmer_test.go: `.GWei(500)`
$DIR/core/chains/evm/txmgr/confirmer_test.go: `.NewTestTxStore(t, db)`
$DIR/core/chains/evm/txmgr/confirmer_test.go: `.Context(t)`
$DIR/core/chains/evm/txmgr/confirmer_test.go: `.NewEthClientMockWithDefaultChain(t)`
$DIR/core/chains/evm/txmgr/confirmer_test.go: `.NewKeyStore(t, db)`
$DIR/core/chains/evm/txmgr/confirmer_test.go: `.Eth()`
$DIR/core/chains/evm/txmgr/confirmer_test.go: `.NewChainScopedConfig(t, cfg)`
$DIR/core/chains/evm/txmgr/confirmer_test.go: `.MustInsertRandomKeyReturningState(t, ethKeyStore)`
$DIR/core/chains/evm/txmgr/confirmer_test.go: `.MustInsertRandomKeyReturningState(t, ethKeyStore)`
$DIR/core/chains/evm/txmgr/confirmer_test.go: `.NewEth(t)`
$DIR/core/chains/evm/txmgr/confirmer_test.go: `.On("EnabledAddressesForChain", mock.Anything, &cltest.FixtureChainID)`
$DIR/core/chains/evm/txmgr/confirmer_test.go: `.Return(addresses, nil)`
$DIR/core/chains/evm/txmgr/confirmer_test.go: `.Maybe()`
$DIR/core/chains/evm/txmgr/confirmer_test.go: `.Unix(1616509100, 0)`
$DIR/core/chains/evm/txmgr/confirmer_test.go: `.MustInsertUnconfirmedEthTxWithBroadcastLegacyAttempt(t, txStore, nonce, fromAddress, originalBroadcastAt)`
$DIR/core/chains/evm/txmgr/confirmer_test.go: `.NewTx(&types.LegacyTx{})`
$DIR/core/chains/evm/txmgr/confirmer_test.go: `.On("SignTx", mock.Anything,
fromAddress,
mock.MatchedBy(func(tx *types.Transaction) bool {
if tx.Nonce() != uint64(*etx.Sequence) {
return false
}
ethTx = *tx
return true
}),
mock.MatchedBy(func(chainID *big.Int) bool {
return chainID.Cmp(evmcfg.EVM().ChainID()) == 0
}))`
$DIR/core/chains/evm/txmgr/confirmer_test.go: `.MatchedBy(func(tx *types.Transaction) bool {
if tx.Nonce() != uint64(*etx.Sequence) {
return false
}
ethTx = *tx
return true
})`
$DIR/core/chains/evm/txmgr/confirmer_test.go: `.Nonce()`
$DIR/core/chains/evm/txmgr/confirmer_test.go: `.MatchedBy(func(chainID *big.Int) bool {
return chainID.Cmp(evmcfg.EVM().ChainID()) == 0
})`
$DIR/core/chains/evm/txmgr/confirmer_test.go: `.Cmp(evmcfg.EVM().ChainID())`
$DIR/core/chains/evm/txmgr/confirmer_test.go: `.EVM()`
$DIR/core/chains/evm/txmgr/confirmer_test.go: `.ChainID()`
$DIR/core/chains/evm/txmgr/confirmer_test.go: `.Return(ðTx, nil)`
$DIR/core/chains/evm/txmgr/confirmer_test.go: `.Once()`
$DIR/core/chains/evm/txmgr/confirmer_test.go: `.On("SendTransactionReturnCode", mock.Anything, mock.MatchedBy(func(tx *types.Transaction) bool {
return tx.Nonce() == uint64(*etx.Sequence) && tx.GasPrice().Int64() == int64(20000000000)
}), fromAddress)`
$DIR/core/chains/evm/txmgr/confirmer_test.go: `.MatchedBy(func(tx *types.Transaction) bool {
return tx.Nonce() == uint64(*etx.Sequence) && tx.GasPrice().Int64() == int64(20000000000)
})`
$DIR/core/chains/evm/txmgr/confirmer_test.go: `.Nonce()`
$DIR/core/chains/evm/txmgr/confirmer_test.go: `.GasPrice()`
$DIR/core/chains/evm/txmgr/confirmer_test.go: `.Int64()`
$DIR/core/chains/evm/txmgr/confirmer_test.go: `.Return(commonclient.ExceedsMaxFee, errors.New("tx fee (1.10 ether) exceeds the configured cap (1.00 ether)"))`
$DIR/core/chains/evm/txmgr/confirmer_test.go: `.New("tx fee (1.10 ether) exceeds the configured cap (1.00 ether)")`
$DIR/core/chains/evm/txmgr/confirmer_test.go: `.Once()`
$DIR/core/chains/evm/txmgr/confirmer_test.go: `.FindTxWithAttempts(ctx, etx.ID)`
$DIR/core/chains/evm/txmgr/confirmer_test.go: `.NewSqlxDB(t)`
$DIR/core/chains/evm/txmgr/confirmer_test.go: `.NewGeneralConfig(t, func(c *chainlink.Config, s *chainlink.Secrets) {
c.EVM[0].GasEstimator.PriceMax = assets.GWei(500)
})`
$DIR/core/chains/evm/txmgr/confirmer_test.go: `.GWei(500)`
$DIR/core/chains/evm/txmgr/confirmer_test.go: `.NewTestTxStore(t, db)`
$DIR/core/chains/evm/txmgr/confirmer_test.go: `.Context(t)`
$DIR/core/chains/evm/txmgr/confirmer_test.go: `.NewEthClientMockWithDefaultChain(t)`
$DIR/core/chains/evm/txmgr/confirmer_test.go: `.NewKeyStore(t, db)`
$DIR/core/chains/evm/txmgr/confirmer_test.go: `.Eth()`
$DIR/core/chains/evm/txmgr/confirmer_test.go: `.NewChainScopedConfig(t, cfg)`
$DIR/core/chains/evm/txmgr/confirmer_test.go: `.MustInsertRandomKeyReturningState(t, ethKeyStore)`
$DIR/core/chains/evm/txmgr/confirmer_test.go: `.MustInsertRandomKeyReturningState(t, ethKeyStore)`
$DIR/core/chains/evm/txmgr/confirmer_test.go: `.NewEth(t)`
$DIR/core/chains/evm/txmgr/confirmer_test.go: `.On("EnabledAddressesForChain", mock.Anything, &cltest.FixtureChainID)`
$DIR/core/chains/evm/txmgr/confirmer_test.go: `.Return(addresses, nil)`
$DIR/core/chains/evm/txmgr/confirmer_test.go: `.Maybe()`
$DIR/core/chains/evm/txmgr/confirmer_test.go: `.Run("does nothing if no transactions require bumping", func(t *testing.T) {
require.NoError(t, ec.RebroadcastWhereNecessary(tests.Context(t), currentHead))
})`
$DIR/core/chains/evm/txmgr/confirmer_test.go: `.Unix(1616509100, 0)`
$DIR/core/chains/evm/txmgr/confirmer_test.go: `.MustInsertUnconfirmedEthTxWithBroadcastLegacyAttempt(t, txStore, nonce, fromAddress, originalBroadcastAt)`
$DIR/core/chains/evm/txmgr/confirmer_test.go: `.Run("re-sends previous transaction on keystore error", func(t *testing.T) {
// simulate bumped transaction that is somehow impossible to sign
kst.On("SignTx", mock.Anything, fromAddress,
mock.MatchedBy(func(tx *types.Transaction) bool {
return tx.Nonce() == uint64(*etx.Sequence)
}),
mock.Anything).Return(nil, errors.New("signing error")).Once()
// Do the thing
err := ec.RebroadcastWhereNecessary(tests.Context(t), currentHead)
require.Error(t, err)
require.Contains(t, err.Error(), "signing error")
etx, err = txStore.FindTxWithAttempts(ctx, etx.ID)
require.NoError(t, err)
require.Equal(t, txmgrcommon.TxUnconfirmed, etx.State)
require.Len(t, etx.TxAttempts, 1)
})`
$DIR/core/chains/evm/txmgr/confirmer_test.go: `.On("SignTx", mock.Anything, fromAddress,
mock.MatchedBy(func(tx *types.Transaction) bool {
return tx.Nonce() == uint64(*etx.Sequence)
}),
mock.Anything)`
$DIR/core/chains/evm/txmgr/confirmer_test.go: `.MatchedBy(func(tx *types.Transaction) bool {
return tx.Nonce() == uint64(*etx.Sequence)
})`
$DIR/core/chains/evm/txmgr/confirmer_test.go: `.Nonce()`
$DIR/core/chains/evm/txmgr/confirmer_test.go: `.Return(nil, errors.New("signing error"))`
$DIR/core/chains/evm/txmgr/confirmer_test.go: `.New("signing error")`
$DIR/core/chains/evm/txmgr/confirmer_test.go: `.Once()`
$DIR/core/chains/evm/txmgr/confirmer_test.go: `.RebroadcastWhereNecessary(tests.Context(t), currentHead)`
$DIR/core/chains/evm/txmgr/confirmer_test.go: `.Context(t)`
$DIR/core/chains/evm/txmgr/confirmer_test.go: `.FindTxWithAttempts(ctx, etx.ID)`
$DIR/core/chains/evm/txmgr/confirmer_test.go: `.Run("does nothing and continues on fatal error", func(t *testing.T) {
ethTx := *types.NewTx(&types.LegacyTx{})
kst.On("SignTx", mock.Anything,
fromAddress,
mock.MatchedBy(func(tx *types.Transaction) bool {
if tx.Nonce() != uint64(*etx.Sequence) {
return false
}
ethTx = *tx
return true
}),
mock.MatchedBy(func(chainID *big.Int) bool {
return chainID.Cmp(evmcfg.EVM().ChainID()) == 0
})).Return(ðTx, nil).Once()
ethClient.On("SendTransactionReturnCode", mock.Anything, mock.MatchedBy(func(tx *types.Transaction) bool {
return tx.Nonce() == uint64(*etx.Sequence)
}), fromAddress).Return(commonclient.Fatal, errors.New("exceeds block gas limit")).Once()
// Do the thing
require.NoError(t, ec.RebroadcastWhereNecessary(tests.Context(t), currentHead))
var err error
etx, err = txStore.FindTxWithAttempts(ctx, etx.ID)
require.NoError(t, err)
require.Len(t, etx.TxAttempts, 1)
})`
$DIR/core/chains/evm/txmgr/confirmer_test.go: `.NewTx(&types.LegacyTx{})`
$DIR/core/chains/evm/txmgr/confirmer_test.go: `.On("SignTx", mock.Anything,
fromAddress,
mock.MatchedBy(func(tx *types.Transaction) bool {
if tx.Nonce() != uint64(*etx.Sequence) {
return false
}
ethTx = *tx
return true
}),
mock.MatchedBy(func(chainID *big.Int) bool {
return chainID.Cmp(evmcfg.EVM().ChainID()) == 0
}))`
$DIR/core/chains/evm/txmgr/confirmer_test.go: `.MatchedBy(func(tx *types.Transaction) bool {
if tx.Nonce() != uint64(*etx.Sequence) {
return false
}
ethTx = *tx
return true
})`
$DIR/core/chains/evm/txmgr/confirmer_test.go: `.Nonce()`
$DIR/core/chains/evm/txmgr/confirmer_test.go: `.MatchedBy(func(chainID *big.Int) bool {
return chainID.Cmp(evmcfg.EVM().ChainID()) == 0
})`
$DIR/core/chains/evm/txmgr/confirmer_test.go: `.Cmp(evmcfg.EVM().ChainID())`
$DIR/core/chains/evm/txmgr/confirmer_test.go: `.EVM()`
$DIR/core/chains/evm/txmgr/confirmer_test.go: `.ChainID()`
$DIR/core/chains/evm/txmgr/confirmer_test.go: `.Return(ðTx, nil)`
$DIR/core/chains/evm/txmgr/confirmer_test.go: `.Once()`
$DIR/core/chains/evm/txmgr/confirmer_test.go: `.On("SendTransactionReturnCode", mock.Anything, mock.MatchedBy(func(tx *types.Transaction) bool {
return tx.Nonce() == uint64(*etx.Sequence)
}), fromAddress)`
$DIR/core/chains/evm/txmgr/confirmer_test.go: `.MatchedBy(func(tx *types.Transaction) bool {
return tx.Nonce() == uint64(*etx.Sequence)
})`
$DIR/core/chains/evm/txmgr/confirmer_test.go: `.Nonce()`
$DIR/core/chains/evm/txmgr/confirmer_test.go: `.Return(commonclient.Fatal, errors.New("exceeds block gas limit"))`
$DIR/core/chains/evm/txmgr/confirmer_test.go: `.New("exceeds block gas limit")`
$DIR/core/chains/evm/txmgr/confirmer_test.go: `.Once()`
$DIR/core/chains/evm/txmgr/confirmer_test.go: `.FindTxWithAttempts(ctx, etx.ID)`
$DIR/core/chains/evm/txmgr/confirmer_test.go: `.NewEthClientMockWithDefaultChain(t)`
$DIR/core/chains/evm/txmgr/confirmer_test.go: `.XXXTestSetClient(txmgr.NewEvmTxmClient(ethClient, nil))`
$DIR/core/chains/evm/txmgr/confirmer_test.go: `.NewEvmTxmClient(ethClient, nil)`
$DIR/core/chains/evm/txmgr/confirmer_test.go: `.Run("creates new attempt with higher gas price if transaction has an attempt older than threshold", func(t *testing.T) {
expectedBumpedGasPrice := big.NewInt(20000000000)
require.Greater(t, expectedBumpedGasPrice.Int64(), attempt1_1.TxFee.Legacy.ToInt().Int64())
ethTx := *types.NewTx(&types.LegacyTx{})
kst.On("SignTx", mock.Anything,
fromAddress,
mock.MatchedBy(func(tx *types.Transaction) bool {
if expectedBumpedGasPrice.Cmp(tx.GasPrice()) != 0 {
return false
}
ethTx = *tx
return true
}),
mock.MatchedBy(func(chainID *big.Int) bool {
return chainID.Cmp(evmcfg.EVM().ChainID()) == 0
})).Return(ðTx, nil).Once()
ethClient.On("SendTransactionReturnCode", mock.Anything, mock.MatchedBy(func(tx *types.Transaction) bool {
return expectedBumpedGasPrice.Cmp(tx.GasPrice()) == 0
}), fromAddress).Return(commonclient.Successful, nil).Once()
// Do the thing
require.NoError(t, ec.RebroadcastWhereNecessary(tests.Context(t), currentHead))
var err error
etx, err = txStore.FindTxWithAttempts(ctx, etx.ID)
require.NoError(t, err)
require.Len(t, etx.TxAttempts, 2)
require.Equal(t, attempt1_1.ID, etx.TxAttempts[1].ID)
// Got the new attempt
attempt1_2 = etx.TxAttempts[0]
assert.Equal(t, expectedBumpedGasPrice.Int64(), attempt1_2.TxFee.Legacy.ToInt().Int64())
assert.Equal(t, txmgrtypes.TxAttemptBroadcast, attempt1_2.State)
})`
$DIR/core/chains/evm/txmgr/confirmer_test.go: `.NewInt(20000000000)`
$DIR/core/chains/evm/txmgr/confirmer_test.go: `.NewTx(&types.LegacyTx{})`
$DIR/core/chains/evm/txmgr/confirmer_test.go: `.On("SignTx", mock.Anything,
fromAddress,
mock.MatchedBy(func(tx *types.Transaction) bool {
if expectedBumpedGasPrice.Cmp(tx.GasPrice()) != 0 {
return false
}
ethTx = *tx
return true
}),
mock.MatchedBy(func(chainID *big.Int) bool {
return chainID.Cmp(evmcfg.EVM().ChainID()) == 0
}))`
$DIR/core/chains/evm/txmgr/confirmer_test.go: `.MatchedBy(func(tx *types.Transaction) bool {
if expectedBumpedGasPrice.Cmp(tx.GasPrice()) != 0 {
return false
}
ethTx = *tx
return true
})`
$DIR/core/chains/evm/txmgr/confirmer_test.go: `.Cmp(tx.GasPrice())`
$DIR/core/chains/evm/txmgr/confirmer_test.go: `.GasPrice()`
$DIR/core/chains/evm/txmgr/confirmer_test.go: `.MatchedBy(func(chainID *big.Int) bool {
return chainID.Cmp(evmcfg.EVM().ChainID()) == 0
})`
$DIR/core/chains/evm/txmgr/confirmer_test.go: `.Cmp(evmcfg.EVM().ChainID())`
$DIR/core/chains/evm/txmgr/confirmer_test.go: `.EVM()`
$DIR/core/chains/evm/txmgr/confirmer_test.go: `.ChainID()`
$DIR/core/chains/evm/txmgr/confirmer_test.go: `.Return(ðTx, nil)`
$DIR/core/chains/evm/txmgr/confirmer_test.go: `.Once()`
$DIR/core/chains/evm/txmgr/confirmer_test.go: `.On("SendTransactionReturnCode", mock.Anything, mock.MatchedBy(func(tx *types.Transaction) bool {
return expectedBumpedGasPrice.Cmp(tx.GasPrice()) == 0
}), fromAddress)`
$DIR/core/chains/evm/txmgr/confirmer_test.go: `.MatchedBy(func(tx *types.Transaction) bool {
return expectedBumpedGasPrice.Cmp(tx.GasPrice()) == 0
})`
$DIR/core/chains/evm/txmgr/confirmer_test.go: `.Cmp(tx.GasPrice())`
$DIR/core/chains/evm/txmgr/confirmer_test.go: `.GasPrice()`
$DIR/core/chains/evm/txmgr/confirmer_test.go: `.Return(commonclient.Successful, nil)`
$DIR/core/chains/evm/txmgr/confirmer_test.go: `.Once()`
$DIR/core/chains/evm/txmgr/confirmer_test.go: `.FindTxWithAttempts(ctx, etx.ID)`
$DIR/core/chains/evm/txmgr/confirmer_test.go: `.Run("does nothing if there is an attempt without BroadcastBeforeBlockNum set", func(t *testing.T) {
// Do the thing
require.NoError(t, ec.RebroadcastWhereNecessary(tests.Context(t), currentHead))
var err error
etx, err = txStore.FindTxWithAttempts(ctx, etx.ID)
require.NoError(t, err)
require.Len(t, etx.TxAttempts, 2)
})`
$DIR/core/chains/evm/txmgr/confirmer_test.go: `.FindTxWithAttempts(ctx, etx.ID)`
$DIR/core/chains/evm/txmgr/confirmer_test.go: `.Run("creates new attempt with higher gas price if transaction is already in mempool (e.g. due to previous crash before we could save the new attempt)", func(t *testing.T) {
expectedBumpedGasPrice := big.NewInt(25000000000)
require.Greater(t, expectedBumpedGasPrice.Int64(), attempt1_2.TxFee.Legacy.ToInt().Int64())
ethTx := *types.NewTx(&types.LegacyTx{})
kst.On("SignTx", mock.Anything,
fromAddress,
mock.MatchedBy(func(tx *types.Transaction) bool {
if evmtypes.Nonce(tx.Nonce()) != *etx.Sequence || expectedBumpedGasPrice.Cmp(tx.GasPrice()) != 0 {
return false
}
ethTx = *tx
return true
}),
mock.Anything).Return(ðTx, nil).Once()
ethClient.On("SendTransactionReturnCode", mock.Anything, mock.MatchedBy(func(tx *types.Transaction) bool {
return expectedBumpedGasPrice.Cmp(tx.GasPrice()) == 0
}), fromAddress).Return(commonclient.Successful, fmt.Errorf("known transaction: %s", ethTx.Hash().Hex())).Once()
// Do the thing
require.NoError(t, ec.RebroadcastWhereNecessary(tests.Context(t), currentHead))
var err error
etx, err = txStore.FindTxWithAttempts(ctx, etx.ID)
require.NoError(t, err)
require.Len(t, etx.TxAttempts, 3)
require.Equal(t, attempt1_1.ID, etx.TxAttempts[2].ID)
require.Equal(t, attempt1_2.ID, etx.TxAttempts[1].ID)
// Got the new attempt
attempt1_3 = etx.TxAttempts[0]
assert.Equal(t, expectedBumpedGasPrice.Int64(), attempt1_3.TxFee.Legacy.ToInt().Int64())
assert.Equal(t, txmgrtypes.TxAttemptBroadcast, attempt1_3.State)
})`
$DIR/core/chains/evm/txmgr/confirmer_test.go: `.NewInt(25000000000)`
$DIR/core/chains/evm/txmgr/confirmer_test.go: `.NewTx(&types.LegacyTx{})`
$DIR/core/chains/evm/txmgr/confirmer_test.go: `.On("SignTx", mock.Anything,
fromAddress,
mock.MatchedBy(func(tx *types.Transaction) bool {
if evmtypes.Nonce(tx.Nonce()) != *etx.Sequence || expectedBumpedGasPrice.Cmp(tx.GasPrice()) != 0 {
return false
}
ethTx = *tx
return true
}),
mock.Anything)`
$DIR/core/chains/evm/txmgr/confirmer_test.go: `.MatchedBy(func(tx *types.Transaction) bool {
if evmtypes.Nonce(tx.Nonce()) != *etx.Sequence || expectedBumpedGasPrice.Cmp(tx.GasPrice()) != 0 {
return false
}
ethTx = *tx
return true
})`
$DIR/core/chains/evm/txmgr/confirmer_test.go: `.Nonce(tx.Nonce())`
$DIR/core/chains/evm/txmgr/confirmer_test.go: `.Nonce()`
$DIR/core/chains/evm/txmgr/confirmer_test.go: `.Cmp(tx.GasPrice())`
$DIR/core/chains/evm/txmgr/confirmer_test.go: `.GasPrice()`
$DIR/core/chains/evm/txmgr/confirmer_test.go: `.Return(ðTx, nil)`
$DIR/core/chains/evm/txmgr/confirmer_test.go: `.Once()`
$DIR/core/chains/evm/txmgr/confirmer_test.go: `.On("SendTransactionReturnCode", mock.Anything, mock.MatchedBy(func(tx *types.Transaction) bool {
return expectedBumpedGasPrice.Cmp(tx.GasPrice()) == 0
}), fromAddress)`
$DIR/core/chains/evm/txmgr/confirmer_test.go: `.MatchedBy(func(tx *types.Transaction) bool {
return expectedBumpedGasPrice.Cmp(tx.GasPrice()) == 0
})`
$DIR/core/chains/evm/txmgr/confirmer_test.go: `.Cmp(tx.GasPrice())`
$DIR/core/chains/evm/txmgr/confirmer_test.go: `.GasPrice()`
$DIR/core/chains/evm/txmgr/confirmer_test.go: `.Return(commonclient.Successful, fmt.Errorf("known transaction: %s", ethTx.Hash().Hex()))`
$DIR/core/chains/evm/txmgr/confirmer_test.go: `.Once()`
$DIR/core/chains/evm/txmgr/confirmer_test.go: `.FindTxWithAttempts(ctx, etx.ID)`
$DIR/core/chains/evm/txmgr/confirmer_test.go: `.Run("saves new attempt even for transaction that has already been confirmed (nonce already used)", func(t *testing.T) {
expectedBumpedGasPrice := big.NewInt(30000000000)
require.Greater(t, expectedBumpedGasPrice.Int64(), attempt1_2.TxFee.Legacy.ToInt().Int64())
ethTx := *types.NewTx(&types.LegacyTx{})
receipt := evmtypes.Receipt{BlockNumber: big.NewInt(40)}
kst.On("SignTx", mock.Anything,
fromAddress,
mock.MatchedBy(func(tx *types.Transaction) bool {
if evmtypes.Nonce(tx.Nonce()) != *etx.Sequence || expectedBumpedGasPrice.Cmp(tx.GasPrice()) != 0 {
return false
}
ethTx = *tx
receipt.TxHash = tx.Hash()
return true
}),
mock.Anything).Return(ðTx, nil).Once()
ethClient.On("SendTransactionReturnCode", mock.Anything, mock.MatchedBy(func(tx *types.Transaction) bool {
return expectedBumpedGasPrice.Cmp(tx.GasPrice()) == 0
}), fromAddress).Return(commonclient.TransactionAlreadyKnown, errors.New("nonce too low")).Once()
// Do the thing
require.NoError(t, ec.RebroadcastWhereNecessary(tests.Context(t), currentHead))
var err error
etx, err = txStore.FindTxWithAttempts(ctx, etx.ID)
require.NoError(t, err)
assert.Equal(t, txmgrcommon.TxConfirmedMissingReceipt, etx.State)
// Got the new attempt
attempt1_4 = etx.TxAttempts[0]
assert.Equal(t, expectedBumpedGasPrice.Int64(), attempt1_4.TxFee.Legacy.ToInt().Int64())
require.Len(t, etx.TxAttempts, 4)
require.Equal(t, attempt1_1.ID, etx.TxAttempts[3].ID)
require.Equal(t, attempt1_2.ID, etx.TxAttempts[2].ID)
require.Equal(t, attempt1_3.ID, etx.TxAttempts[1].ID)
require.Equal(t, attempt1_4.ID, etx.TxAttempts[0].ID)
require.Equal(t, txmgrtypes.TxAttemptBroadcast, etx.TxAttempts[0].State)
require.Equal(t, txmgrtypes.TxAttemptBroadcast, etx.TxAttempts[1].State)
require.Equal(t, txmgrtypes.TxAttemptBroadcast, etx.TxAttempts[2].State)
require.Equal(t, txmgrtypes.TxAttemptBroadcast, etx.TxAttempts[3].State)
})`
$DIR/core/chains/evm/txmgr/confirmer_test.go: `.NewInt(30000000000)`
$DIR/core/chains/evm/txmgr/confirmer_test.go: `.NewTx(&types.LegacyTx{})`
$DIR/core/chains/evm/txmgr/confirmer_test.go: `.NewInt(40)`
$DIR/core/chains/evm/txmgr/confirmer_test.go: `.On("SignTx", mock.Anything,
fromAddress,
mock.MatchedBy(func(tx *types.Transaction) bool {
if evmtypes.Nonce(tx.Nonce()) != *etx.Sequence || expectedBumpedGasPrice.Cmp(tx.GasPrice()) != 0 {
return false
}
ethTx = *tx
receipt.TxHash = tx.Hash()
return true
}),
mock.Anything)`
$DIR/core/chains/evm/txmgr/confirmer_test.go: `.MatchedBy(func(tx *types.Transaction) bool {
if evmtypes.Nonce(tx.Nonce()) != *etx.Sequence || expectedBumpedGasPrice.Cmp(tx.GasPrice()) != 0 {
return false
}
ethTx = *tx
receipt.TxHash = tx.Hash()
return true
})`
$DIR/core/chains/evm/txmgr/confirmer_test.go: `.Nonce(tx.Nonce())`
$DIR/core/chains/evm/txmgr/confirmer_test.go: `.Nonce()`
$DIR/core/chains/evm/txmgr/confirmer_test.go: `.Cmp(tx.GasPrice())`
$DIR/core/chains/evm/txmgr/confirmer_test.go: `.GasPrice()`
$DIR/core/chains/evm/txmgr/confirmer_test.go: `.Hash()`
$DIR/core/chains/evm/txmgr/confirmer_test.go: `.Return(ðTx, nil)`
$DIR/core/chains/evm/txmgr/confirmer_test.go: `.Once()`
$DIR/core/chains/evm/txmgr/confirmer_test.go: `.On("SendTransactionReturnCode", mock.Anything, mock.MatchedBy(func(tx *types.Transaction) bool {
return expectedBumpedGasPrice.Cmp(tx.GasPrice()) == 0
}), fromAddress)`
$DIR/core/chains/evm/txmgr/confirmer_test.go: `.MatchedBy(func(tx *types.Transaction) bool {
return expectedBumpedGasPrice.Cmp(tx.GasPrice()) == 0
})`
$DIR/core/chains/evm/txmgr/confirmer_test.go: `.Cmp(tx.GasPrice())`
$DIR/core/chains/evm/txmgr/confirmer_test.go: `.GasPrice()`
$DIR/core/chains/evm/txmgr/confirmer_test.go: `.Return(commonclient.TransactionAlreadyKnown, errors.New("nonce too low"))`
$DIR/core/chains/evm/txmgr/confirmer_test.go: `.New("nonce too low")`
$DIR/core/chains/evm/txmgr/confirmer_test.go: `.Once()`
$DIR/core/chains/evm/txmgr/confirmer_test.go: `.FindTxWithAttempts(ctx, etx.ID)`
$DIR/core/chains/evm/txmgr/confirmer_test.go: `.MustExec(t, db, `UPDATE evm.txes SET state = 'confirmed'`)`
$DIR/core/chains/evm/txmgr/confirmer_test.go: `.MustInsertUnconfirmedEthTxWithBroadcastLegacyAttempt(t, txStore, nonce, fromAddress)`
$DIR/core/chains/evm/txmgr/confirmer_test.go: `.Run("saves in-progress attempt on temporary error and returns error", func(t *testing.T) {
expectedBumpedGasPrice := big.NewInt(20000000000)
require.Greater(t, expectedBumpedGasPrice.Int64(), attempt2_1.TxFee.Legacy.ToInt().Int64())
ethTx := *types.NewTx(&types.LegacyTx{})
n := *etx2.Sequence
kst.On("SignTx", mock.Anything,
fromAddress,
mock.MatchedBy(func(tx *types.Transaction) bool {
if evmtypes.Nonce(tx.Nonce()) != n || expectedBumpedGasPrice.Cmp(tx.GasPrice()) != 0 {
return false
}
ethTx = *tx
return true
}),
mock.Anything).Return(ðTx, nil).Once()
ethClient.On("SendTransactionReturnCode", mock.Anything, mock.MatchedBy(func(tx *types.Transaction) bool {
return evmtypes.Nonce(tx.Nonce()) == n && expectedBumpedGasPrice.Cmp(tx.GasPrice()) == 0
}), fromAddress).Return(commonclient.Unknown, errors.New("some network error")).Once()
// Do the thing
err := ec.RebroadcastWhereNecessary(tests.Context(t), currentHead)
require.Error(t, err)
require.Contains(t, err.Error(), "some network error")
etx2, err = txStore.FindTxWithAttempts(ctx, etx2.ID)
require.NoError(t, err)
assert.Equal(t, txmgrcommon.TxUnconfirmed, etx2.State)
// Old attempt is untouched
require.Len(t, etx2.TxAttempts, 2)
require.Equal(t, attempt2_1.ID, etx2.TxAttempts[1].ID)
attempt2_1 = etx2.TxAttempts[1]
assert.Equal(t, txmgrtypes.TxAttemptBroadcast, attempt2_1.State)
assert.Equal(t, oldEnough, *attempt2_1.BroadcastBeforeBlockNum)
// New in_progress attempt saved
attempt2_2 = etx2.TxAttempts[0]
assert.Equal(t, txmgrtypes.TxAttemptInProgress, attempt2_2.State)
assert.Nil(t, attempt2_2.BroadcastBeforeBlockNum)
// Do it again and move the attempt into "broadcast"
n = *etx2.Sequence
ethClient.On("SendTransactionReturnCode", mock.Anything, mock.MatchedBy(func(tx *types.Transaction) bool {
return evmtypes.Nonce(tx.Nonce()) == n && expectedBumpedGasPrice.Cmp(tx.GasPrice()) == 0
}), fromAddress).Return(commonclient.Successful, nil).Once()
require.NoError(t, ec.RebroadcastWhereNecessary(tests.Context(t), currentHead))
// Attempt marked "broadcast"
etx2, err = txStore.FindTxWithAttempts(ctx, etx2.ID)
require.NoError(t, err)
assert.Equal(t, txmgrcommon.TxUnconfirmed, etx2.State)
// New in_progress attempt saved
require.Len(t, etx2.TxAttempts, 2)
require.Equal(t, attempt2_2.ID, etx2.TxAttempts[0].ID)
attempt2_2 = etx2.TxAttempts[0]
require.Equal(t, txmgrtypes.TxAttemptBroadcast, attempt2_2.State)
assert.Nil(t, attempt2_2.BroadcastBeforeBlockNum)
})`
$DIR/core/chains/evm/txmgr/confirmer_test.go: `.NewInt(20000000000)`
$DIR/core/chains/evm/txmgr/confirmer_test.go: `.NewTx(&types.LegacyTx{})`
$DIR/core/chains/evm/txmgr/confirmer_test.go: `.On("SignTx", mock.Anything,
fromAddress,
mock.MatchedBy(func(tx *types.Transaction) bool {
if evmtypes.Nonce(tx.Nonce()) != n || expectedBumpedGasPrice.Cmp(tx.GasPrice()) != 0 {
return false
}
ethTx = *tx
return true
}),
mock.Anything)`
$DIR/core/chains/evm/txmgr/confirmer_test.go: `.MatchedBy(func(tx *types.Transaction) bool {
if evmtypes.Nonce(tx.Nonce()) != n || expectedBumpedGasPrice.Cmp(tx.GasPrice()) != 0 {
return false
}
ethTx = *tx
return true
})`
$DIR/core/chains/evm/txmgr/confirmer_test.go: `.Nonce(tx.Nonce())`
$DIR/core/chains/evm/txmgr/confirmer_test.go: `.Nonce()`
$DIR/core/chains/evm/txmgr/confirmer_test.go: `.Cmp(tx.GasPrice())`
$DIR/core/chains/evm/txmgr/confirmer_test.go: `.GasPrice()`
$DIR/core/chains/evm/txmgr/confirmer_test.go: `.Return(ðTx, nil)`
$DIR/core/chains/evm/txmgr/confirmer_test.go: `.Once()`
$DIR/core/chains/evm/txmgr/confirmer_test.go: `.On("SendTransactionReturnCode", mock.Anything, mock.MatchedBy(func(tx *types.Transaction) bool {
return evmtypes.Nonce(tx.Nonce()) == n && expectedBumpedGasPrice.Cmp(tx.GasPrice()) == 0
}), fromAddress)`
$DIR/core/chains/evm/txmgr/confirmer_test.go: `.MatchedBy(func(tx *types.Transaction) bool {
return evmtypes.Nonce(tx.Nonce()) == n && expectedBumpedGasPrice.Cmp(tx.GasPrice()) == 0
})`
$DIR/core/chains/evm/txmgr/confirmer_test.go: `.Nonce(tx.Nonce())`
$DIR/core/chains/evm/txmgr/confirmer_test.go: `.Nonce()`
$DIR/core/chains/evm/txmgr/confirmer_test.go: `.Cmp(tx.GasPrice())`
$DIR/core/chains/evm/txmgr/confirmer_test.go: `.GasPrice()`
$DIR/core/chains/evm/txmgr/confirmer_test.go: `.Return(commonclient.Unknown, errors.New("some network error"))`
$DIR/core/chains/evm/txmgr/confirmer_test.go: `.New("some network error")`
$DIR/core/chains/evm/txmgr/confirmer_test.go: `.Once()`
$DIR/core/chains/evm/txmgr/confirmer_test.go: `.RebroadcastWhereNecessary(tests.Context(t), currentHead)`
$DIR/core/chains/evm/txmgr/confirmer_test.go: `.Context(t)`
$DIR/core/chains/evm/txmgr/confirmer_test.go: `.FindTxWithAttempts(ctx, etx2.ID)`
$DIR/core/chains/evm/txmgr/confirmer_test.go: `.On("SendTransactionReturnCode", mock.Anything, mock.MatchedBy(func(tx *types.Transaction) bool {
return evmtypes.Nonce(tx.Nonce()) == n && expectedBumpedGasPrice.Cmp(tx.GasPrice()) == 0
}), fromAddress)`
$DIR/core/chains/evm/txmgr/confirmer_test.go: `.MatchedBy(func(tx *types.Transaction) bool {
return evmtypes.Nonce(tx.Nonce()) == n && expectedBumpedGasPrice.Cmp(tx.GasPrice()) == 0
})`
$DIR/core/chains/evm/txmgr/confirmer_test.go: `.Nonce(tx.Nonce())`
$DIR/core/chains/evm/txmgr/confirmer_test.go: `.Nonce()`
$DIR/core/chains/evm/txmgr/confirmer_test.go: `.Cmp(tx.GasPrice())`
$DIR/core/chains/evm/txmgr/confirmer_test.go: `.GasPrice()`
$DIR/core/chains/evm/txmgr/confirmer_test.go: `.Return(commonclient.Successful, nil)`
$DIR/core/chains/evm/txmgr/confirmer_test.go: `.Once()`
$DIR/core/chains/evm/txmgr/confirmer_test.go: `.FindTxWithAttempts(ctx, etx2.ID)`
$DIR/core/chains/evm/txmgr/confirmer_test.go: `.Run("assumes that 'nonce too low' error means confirmed_missing_receipt", func(t *testing.T) {
expectedBumpedGasPrice := big.NewInt(25000000000)
require.Greater(t, expectedBumpedGasPrice.Int64(), attempt2_1.TxFee.Legacy.ToInt().Int64())
ethTx := *types.NewTx(&types.LegacyTx{})
n := *etx2.Sequence
kst.On("SignTx", mock.Anything,
fromAddress,
mock.MatchedBy(func(tx *types.Transaction) bool {
if evmtypes.Nonce(tx.Nonce()) != n || expectedBumpedGasPrice.Cmp(tx.GasPrice()) != 0 {
return false
}
ethTx = *tx
return true
}),
mock.Anything).Return(ðTx, nil).Once()
ethClient.On("SendTransactionReturnCode", mock.Anything, mock.MatchedBy(func(tx *types.Transaction) bool {
return evmtypes.Nonce(tx.Nonce()) == n && expectedBumpedGasPrice.Cmp(tx.GasPrice()) == 0
}), fromAddress).Return(commonclient.TransactionAlreadyKnown, errors.New("nonce too low")).Once()
// Creates new attempt as normal if currentHead is not high enough
require.NoError(t, ec.RebroadcastWhereNecessary(tests.Context(t), currentHead))
var err error
etx2, err = txStore.FindTxWithAttempts(ctx, etx2.ID)
require.NoError(t, err)
assert.Equal(t, txmgrcommon.TxConfirmedMissingReceipt, etx2.State)
// One new attempt saved
require.Len(t, etx2.TxAttempts, 3)
assert.Equal(t, txmgrtypes.TxAttemptBroadcast, etx2.TxAttempts[0].State)
assert.Equal(t, txmgrtypes.TxAttemptBroadcast, etx2.TxAttempts[1].State)
assert.Equal(t, txmgrtypes.TxAttemptBroadcast, etx2.TxAttempts[2].State)
})`
$DIR/core/chains/evm/txmgr/confirmer_test.go: `.NewInt(25000000000)`
$DIR/core/chains/evm/txmgr/confirmer_test.go: `.NewTx(&types.LegacyTx{})`
$DIR/core/chains/evm/txmgr/confirmer_test.go: `.On("SignTx", mock.Anything,
fromAddress,
mock.MatchedBy(func(tx *types.Transaction) bool {
if evmtypes.Nonce(tx.Nonce()) != n || expectedBumpedGasPrice.Cmp(tx.GasPrice()) != 0 {
return false
}
ethTx = *tx
return true
}),
mock.Anything)`
$DIR/core/chains/evm/txmgr/confirmer_test.go: `.MatchedBy(func(tx *types.Transaction) bool {
if evmtypes.Nonce(tx.Nonce()) != n || expectedBumpedGasPrice.Cmp(tx.GasPrice()) != 0 {
return false
}
ethTx = *tx
return true
})`
$DIR/core/chains/evm/txmgr/confirmer_test.go: `.Nonce(tx.Nonce())`
$DIR/core/chains/evm/txmgr/confirmer_test.go: `.Nonce()`
$DIR/core/chains/evm/txmgr/confirmer_test.go: `.Cmp(tx.GasPrice())`
$DIR/core/chains/evm/txmgr/confirmer_test.go: `.GasPrice()`
$DIR/core/chains/evm/txmgr/confirmer_test.go: `.Return(ðTx, nil)`
$DIR/core/chains/evm/txmgr/confirmer_test.go: `.Once()`
$DIR/core/chains/evm/txmgr/confirmer_test.go: `.On("SendTransactionReturnCode", mock.Anything, mock.MatchedBy(func(tx *types.Transaction) bool {
return evmtypes.Nonce(tx.Nonce()) == n && expectedBumpedGasPrice.Cmp(tx.GasPrice()) == 0
}), fromAddress)`
$DIR/core/chains/evm/txmgr/confirmer_test.go: `.MatchedBy(func(tx *types.Transaction) bool {
return evmtypes.Nonce(tx.Nonce()) == n && expectedBumpedGasPrice.Cmp(tx.GasPrice()) == 0
})`
$DIR/core/chains/evm/txmgr/confirmer_test.go: `.Nonce(tx.Nonce())`
$DIR/core/chains/evm/txmgr/confirmer_test.go: `.Nonce()`
$DIR/core/chains/evm/txmgr/confirmer_test.go: `.Cmp(tx.GasPrice())`
$DIR/core/chains/evm/txmgr/confirmer_test.go: `.GasPrice()`
$DIR/core/chains/evm/txmgr/confirmer_test.go: `.Return(commonclient.TransactionAlreadyKnown, errors.New("nonce too low"))`
$DIR/core/chains/evm/txmgr/confirmer_test.go: `.New("nonce too low")`
$DIR/core/chains/evm/txmgr/confirmer_test.go: `.Once()`
$DIR/core/chains/evm/txmgr/confirmer_test.go: `.FindTxWithAttempts(ctx, etx2.ID)`
$DIR/core/chains/evm/txmgr/confirmer_test.go: `.MustInsertUnconfirmedEthTxWithBroadcastLegacyAttempt(t, txStore, nonce, fromAddress)`
$DIR/core/chains/evm/txmgr/confirmer_test.go: `.Run("saves attempt anyway if replacement transaction is underpriced because the bumped gas price is insufficiently higher than the previous one", func(t *testing.T) {
expectedBumpedGasPrice := big.NewInt(42000000000)
require.Greater(t, expectedBumpedGasPrice.Int64(), attempt3_1.TxFee.Legacy.ToInt().Int64())
ethTx := *types.NewTx(&types.LegacyTx{})
kst.On("SignTx", mock.Anything,
fromAddress,
mock.MatchedBy(func(tx *types.Transaction) bool {
if evmtypes.Nonce(tx.Nonce()) != *etx3.Sequence || expectedBumpedGasPrice.Cmp(tx.GasPrice()) != 0 {
return false
}
ethTx = *tx
return true
}),
mock.Anything).Return(ðTx, nil).Once()
ethClient.On("SendTransactionReturnCode", mock.Anything, mock.MatchedBy(func(tx *types.Transaction) bool {
return evmtypes.Nonce(tx.Nonce()) == *etx3.Sequence && expectedBumpedGasPrice.Cmp(tx.GasPrice()) == 0
}), fromAddress).Return(commonclient.Successful, errors.New("replacement transaction underpriced")).Once()
// Do the thing
require.NoError(t, ec.RebroadcastWhereNecessary(tests.Context(t), currentHead))
var err error
etx3, err = txStore.FindTxWithAttempts(ctx, etx3.ID)
require.NoError(t, err)
assert.Equal(t, txmgrcommon.TxUnconfirmed, etx3.State)
require.Len(t, etx3.TxAttempts, 2)
require.Equal(t, attempt3_1.ID, etx3.TxAttempts[1].ID)
attempt3_2 = etx3.TxAttempts[0]
assert.Equal(t, expectedBumpedGasPrice.Int64(), attempt3_2.TxFee.Legacy.ToInt().Int64())
})`
$DIR/core/chains/evm/txmgr/confirmer_test.go: `.NewInt(42000000000)`
$DIR/core/chains/evm/txmgr/confirmer_test.go: `.NewTx(&types.LegacyTx{})`
$DIR/core/chains/evm/txmgr/confirmer_test.go: `.On("SignTx", mock.Anything,
fromAddress,
mock.MatchedBy(func(tx *types.Transaction) bool {
if evmtypes.Nonce(tx.Nonce()) != *etx3.Sequence || expectedBumpedGasPrice.Cmp(tx.GasPrice()) != 0 {
return false
}
ethTx = *tx
return true
}),
mock.Anything)`
$DIR/core/chains/evm/txmgr/confirmer_test.go: `.MatchedBy(func(tx *types.Transaction) bool {
if evmtypes.Nonce(tx.Nonce()) != *etx3.Sequence || expectedBumpedGasPrice.Cmp(tx.GasPrice()) != 0 {
return false
}
ethTx = *tx
return true
})`
$DIR/core/chains/evm/txmgr/confirmer_test.go: `.Nonce(tx.Nonce())`
$DIR/core/chains/evm/txmgr/confirmer_test.go: `.Nonce()`
$DIR/core/chains/evm/txmgr/confirmer_test.go: `.Cmp(tx.GasPrice())`
$DIR/core/chains/evm/txmgr/confirmer_test.go: `.GasPrice()`
$DIR/core/chains/evm/txmgr/confirmer_test.go: `.Return(ðTx, nil)`
$DIR/core/chains/evm/txmgr/confirmer_test.go: `.Once()`
$DIR/core/chains/evm/txmgr/confirmer_test.go: `.On("SendTransactionReturnCode", mock.Anything, mock.MatchedBy(func(tx *types.Transaction) bool {
return evmtypes.Nonce(tx.Nonce()) == *etx3.Sequence && expectedBumpedGasPrice.Cmp(tx.GasPrice()) == 0
}), fromAddress)`
$DIR/core/chains/evm/txmgr/confirmer_test.go: `.MatchedBy(func(tx *types.Transaction) bool {
return evmtypes.Nonce(tx.Nonce()) == *etx3.Sequence && expectedBumpedGasPrice.Cmp(tx.GasPrice()) == 0
})`
$DIR/core/chains/evm/txmgr/confirmer_test.go: `.Nonce(tx.Nonce())`
$DIR/core/chains/evm/txmgr/confirmer_test.go: `.Nonce()`
$DIR/core/chains/evm/txmgr/confirmer_test.go: `.Cmp(tx.GasPrice())`
$DIR/core/chains/evm/txmgr/confirmer_test.go: `.GasPrice()`
$DIR/core/chains/evm/txmgr/confirmer_test.go: `.Return(commonclient.Successful, errors.New("replacement transaction underpriced"))`
$DIR/core/chains/evm/txmgr/confirmer_test.go: `.New("replacement transaction underpriced")`
$DIR/core/chains/evm/txmgr/confirmer_test.go: `.Once()`
$DIR/core/chains/evm/txmgr/confirmer_test.go: `.FindTxWithAttempts(ctx, etx3.ID)`
$DIR/core/chains/evm/txmgr/confirmer_test.go: `.Run("handles case where transaction is already known somehow", func(t *testing.T) {
expectedBumpedGasPrice := big.NewInt(50400000000)
require.Greater(t, expectedBumpedGasPrice.Int64(), attempt3_1.TxFee.Legacy.ToInt().Int64())
ethTx := *types.NewTx(&types.LegacyTx{})
kst.On("SignTx", mock.Anything,
fromAddress,
mock.MatchedBy(func(tx *types.Transaction) bool {
if evmtypes.Nonce(tx.Nonce()) != *etx3.Sequence || expectedBumpedGasPrice.Cmp(tx.GasPrice()) != 0 {
return false
}
ethTx = *tx
return true
}),
mock.Anything).Return(ðTx, nil).Once()
ethClient.On("SendTransactionReturnCode", mock.Anything, mock.MatchedBy(func(tx *types.Transaction) bool {
return evmtypes.Nonce(tx.Nonce()) == *etx3.Sequence && expectedBumpedGasPrice.Cmp(tx.GasPrice()) == 0
}), fromAddress).Return(commonclient.Successful, fmt.Errorf("known transaction: %s", ethTx.Hash().Hex())).Once()
// Do the thing
require.NoError(t, ec.RebroadcastWhereNecessary(tests.Context(t), currentHead))
var err error
etx3, err = txStore.FindTxWithAttempts(ctx, etx3.ID)
require.NoError(t, err)
assert.Equal(t, txmgrcommon.TxUnconfirmed, etx3.State)
require.Len(t, etx3.TxAttempts, 3)
attempt3_3 = etx3.TxAttempts[0]
assert.Equal(t, expectedBumpedGasPrice.Int64(), attempt3_3.TxFee.Legacy.ToInt().Int64())
})`
$DIR/core/chains/evm/txmgr/confirmer_test.go: `.NewInt(50400000000)`
$DIR/core/chains/evm/txmgr/confirmer_test.go: `.NewTx(&types.LegacyTx{})`
$DIR/core/chains/evm/txmgr/confirmer_test.go: `.On("SignTx", mock.Anything,
fromAddress,
mock.MatchedBy(func(tx *types.Transaction) bool {
if evmtypes.Nonce(tx.Nonce()) != *etx3.Sequence || expectedBumpedGasPrice.Cmp(tx.GasPrice()) != 0 {
return false
}
ethTx = *tx
return true
}),
mock.Anything)`
$DIR/core/chains/evm/txmgr/confirmer_test.go: `.MatchedBy(func(tx *types.Transaction) bool {
if evmtypes.Nonce(tx.Nonce()) != *etx3.Sequence || expectedBumpedGasPrice.Cmp(tx.GasPrice()) != 0 {
return false
}
ethTx = *tx
return true
})`
$DIR/core/chains/evm/txmgr/confirmer_test.go: `.Nonce(tx.Nonce())`
$DIR/core/chains/evm/txmgr/confirmer_test.go: `.Nonce()`
$DIR/core/chains/evm/txmgr/confirmer_test.go: `.Cmp(tx.GasPrice())`
$DIR/core/chains/evm/txmgr/confirmer_test.go: `.GasPrice()`
$DIR/core/chains/evm/txmgr/confirmer_test.go: `.Return(ðTx, nil)`
$DIR/core/chains/evm/txmgr/confirmer_test.go: `.Once()`
$DIR/core/chains/evm/txmgr/confirmer_test.go: `.On("SendTransactionReturnCode", mock.Anything, mock.MatchedBy(func(tx *types.Transaction) bool {
return evmtypes.Nonce(tx.Nonce()) == *etx3.Sequence && expectedBumpedGasPrice.Cmp(tx.GasPrice()) == 0
}), fromAddress)`
$DIR/core/chains/evm/txmgr/confirmer_test.go: `.MatchedBy(func(tx *types.Transaction) bool {
return evmtypes.Nonce(tx.Nonce()) == *etx3.Sequence && expectedBumpedGasPrice.Cmp(tx.GasPrice()) == 0
})`
$DIR/core/chains/evm/txmgr/confirmer_test.go: `.Nonce(tx.Nonce())`
$DIR/core/chains/evm/txmgr/confirmer_test.go: `.Nonce()`
$DIR/core/chains/evm/txmgr/confirmer_test.go: `.Cmp(tx.GasPrice())`
$DIR/core/chains/evm/txmgr/confirmer_test.go: `.GasPrice()`
$DIR/core/chains/evm/txmgr/confirmer_test.go: `.Return(commonclient.Successful, fmt.Errorf("known transaction: %s", ethTx.Hash().Hex()))`
$DIR/core/chains/evm/txmgr/confirmer_test.go: `.Once()`
$DIR/core/chains/evm/txmgr/confirmer_test.go: `.FindTxWithAttempts(ctx, etx3.ID)`
$DIR/core/chains/evm/txmgr/confirmer_test.go: `.Run("pretends it was accepted and continues the cycle if rejected for being temporarily underpriced", func(t *testing.T) {
// This happens if parity is rejecting transactions that are not priced high enough to even get into the mempool at all
// It should pretend it was accepted into the mempool and hand off to the next cycle to continue bumping gas as normal
temporarilyUnderpricedError := "There are too many transactions in the queue. Your transaction was dropped due to limit. Try increasing the fee."
expectedBumpedGasPrice := big.NewInt(60480000000)
require.Greater(t, expectedBumpedGasPrice.Int64(), attempt3_2.TxFee.Legacy.ToInt().Int64())
ethTx := *types.NewTx(&types.LegacyTx{})
kst.On("SignTx", mock.Anything,
fromAddress,
mock.MatchedBy(func(tx *types.Transaction) bool {
if evmtypes.Nonce(tx.Nonce()) != *etx3.Sequence || expectedBumpedGasPrice.Cmp(tx.GasPrice()) != 0 {
return false
}
ethTx = *tx
return true
}),
mock.Anything).Return(ðTx, nil).Once()
ethClient.On("SendTransactionReturnCode", mock.Anything, mock.MatchedBy(func(tx *types.Transaction) bool {
return evmtypes.Nonce(tx.Nonce()) == *etx3.Sequence && expectedBumpedGasPrice.Cmp(tx.GasPrice()) == 0
}), fromAddress).Return(commonclient.Successful, errors.New(temporarilyUnderpricedError)).Once()
// Do the thing
require.NoError(t, ec.RebroadcastWhereNecessary(tests.Context(t), currentHead))
var err error
etx3, err = txStore.FindTxWithAttempts(ctx, etx3.ID)
require.NoError(t, err)
assert.Equal(t, txmgrcommon.TxUnconfirmed, etx3.State)
require.Len(t, etx3.TxAttempts, 4)
attempt3_4 = etx3.TxAttempts[0]
assert.Equal(t, expectedBumpedGasPrice.Int64(), attempt3_4.TxFee.Legacy.ToInt().Int64())
})`
$DIR/core/chains/evm/txmgr/confirmer_test.go: `.NewInt(60480000000)`
$DIR/core/chains/evm/txmgr/confirmer_test.go: `.NewTx(&types.LegacyTx{})`
$DIR/core/chains/evm/txmgr/confirmer_test.go: `.On("SignTx", mock.Anything,
fromAddress,
mock.MatchedBy(func(tx *types.Transaction) bool {
if evmtypes.Nonce(tx.Nonce()) != *etx3.Sequence || expectedBumpedGasPrice.Cmp(tx.GasPrice()) != 0 {
return false
}
ethTx = *tx
return true
}),
mock.Anything)`
$DIR/core/chains/evm/txmgr/confirmer_test.go: `.MatchedBy(func(tx *types.Transaction) bool {
if evmtypes.Nonce(tx.Nonce()) != *etx3.Sequence || expectedBumpedGasPrice.Cmp(tx.GasPrice()) != 0 {
return false
}
ethTx = *tx
return true
})`
$DIR/core/chains/evm/txmgr/confirmer_test.go: `.Nonce(tx.Nonce())`
$DIR/core/chains/evm/txmgr/confirmer_test.go: `.Nonce()`
$DIR/core/chains/evm/txmgr/confirmer_test.go: `.Cmp(tx.GasPrice())`
$DIR/core/chains/evm/txmgr/confirmer_test.go: `.GasPrice()`
$DIR/core/chains/evm/txmgr/confirmer_test.go: `.Return(ðTx, nil)`
$DIR/core/chains/evm/txmgr/confirmer_test.go: `.Once()`
$DIR/core/chains/evm/txmgr/confirmer_test.go: `.On("SendTransactionReturnCode", mock.Anything, mock.MatchedBy(func(tx *types.Transaction) bool {
return evmtypes.Nonce(tx.Nonce()) == *etx3.Sequence && expectedBumpedGasPrice.Cmp(tx.GasPrice()) == 0
}), fromAddress)`
$DIR/core/chains/evm/txmgr/confirmer_test.go: `.MatchedBy(func(tx *types.Transaction) bool {
return evmtypes.Nonce(tx.Nonce()) == *etx3.Sequence && expectedBumpedGasPrice.Cmp(tx.GasPrice()) == 0
})`
$DIR/core/chains/evm/txmgr/confirmer_test.go: `.Nonce(tx.Nonce())`
$DIR/core/chains/evm/txmgr/confirmer_test.go: `.Nonce()`
$DIR/core/chains/evm/txmgr/confirmer_test.go: `.Cmp(tx.GasPrice())`
$DIR/core/chains/evm/txmgr/confirmer_test.go: `.GasPrice()`
$DIR/core/chains/evm/txmgr/confirmer_test.go: `.Return(commonclient.Successful, errors.New(temporarilyUnderpricedError))`
$DIR/core/chains/evm/txmgr/confirmer_test.go: `.New(temporarilyUnderpricedError)`
$DIR/core/chains/evm/txmgr/confirmer_test.go: `.Once()`
$DIR/core/chains/evm/txmgr/confirmer_test.go: `.FindTxWithAttempts(ctx, etx3.ID)`
$DIR/core/chains/evm/txmgr/confirmer_test.go: `.Run("resubmits at the old price and does not create a new attempt if one of the bumped transactions would exceed EVM.GasEstimator.PriceMax", func(t *testing.T) {
// Set price such that the next bump will exceed EVM.GasEstimator.PriceMax
// Existing gas price is: 60480000000
gasPrice := attempt3_4.TxFee.Legacy.ToInt()
gcfg := configtest.NewGeneralConfig(t, func(c *chainlink.Config, s *chainlink.Secrets) {
c.EVM[0].GasEstimator.PriceMax = assets.NewWeiI(60500000000)
})
newCfg := evmtest.NewChainScopedConfig(t, gcfg)
ec2 := newEthConfirmer(t, txStore, ethClient, gcfg, newCfg, ethKeyStore, nil)
ethClient.On("SendTransactionReturnCode", mock.Anything, mock.MatchedBy(func(tx *types.Transaction) bool {
return evmtypes.Nonce(tx.Nonce()) == *etx3.Sequence && gasPrice.Cmp(tx.GasPrice()) == 0
}), fromAddress).Return(commonclient.Successful, errors.New("already known")).Once() // we already submitted at this price, now it's time to bump and submit again but since we simply resubmitted rather than increasing gas price, geth already knows about this tx
// Do the thing
require.NoError(t, ec2.RebroadcastWhereNecessary(tests.Context(t), currentHead))
var err error
etx3, err = txStore.FindTxWithAttempts(ctx, etx3.ID)
require.NoError(t, err)
assert.Equal(t, txmgrcommon.TxUnconfirmed, etx3.State)
// No new tx attempts
require.Len(t, etx3.TxAttempts, 4)
attempt3_4 = etx3.TxAttempts[0]
assert.Equal(t, gasPrice.Int64(), attempt3_4.TxFee.Legacy.ToInt().Int64())
})`
$DIR/core/chains/evm/txmgr/confirmer_test.go: `.TxFee.Legacy.ToInt()`
$DIR/core/chains/evm/txmgr/confirmer_test.go: `.NewGeneralConfig(t, func(c *chainlink.Config, s *chainlink.Secrets) {
c.EVM[0].GasEstimator.PriceMax = assets.NewWeiI(60500000000)
})`
$DIR/core/chains/evm/txmgr/confirmer_test.go: `.NewWeiI(60500000000)`
$DIR/core/chains/evm/txmgr/confirmer_test.go: `.NewChainScopedConfig(t, gcfg)`
$DIR/core/chains/evm/txmgr/confirmer_test.go: `.On("SendTransactionReturnCode", mock.Anything, mock.MatchedBy(func(tx *types.Transaction) bool {
return evmtypes.Nonce(tx.Nonce()) == *etx3.Sequence && gasPrice.Cmp(tx.GasPrice()) == 0
}), fromAddress)`
$DIR/core/chains/evm/txmgr/confirmer_test.go: `.MatchedBy(func(tx *types.Transaction) bool {
return evmtypes.Nonce(tx.Nonce()) == *etx3.Sequence && gasPrice.Cmp(tx.GasPrice()) == 0
})`
$DIR/core/chains/evm/txmgr/confirmer_test.go: `.Nonce(tx.Nonce())`
$DIR/core/chains/evm/txmgr/confirmer_test.go: `.Nonce()`
$DIR/core/chains/evm/txmgr/confirmer_test.go: `.Cmp(tx.GasPrice())`
$DIR/core/chains/evm/txmgr/confirmer_test.go: `.GasPrice()`
$DIR/core/chains/evm/txmgr/confirmer_test.go: `.Return(commonclient.Successful, errors.New("already known"))`
$DIR/core/chains/evm/txmgr/confirmer_test.go: `.New("already known")`
$DIR/core/chains/evm/txmgr/confirmer_test.go: `.Once()`
$DIR/core/chains/evm/txmgr/confirmer_test.go: `.FindTxWithAttempts(ctx, etx3.ID)`
$DIR/core/chains/evm/txmgr/confirmer_test.go: `.Run("resubmits at the old price and does not create a new attempt if the current price is exactly EVM.GasEstimator.PriceMax", func(t *testing.T) {
// Set price such that the current price is already at EVM.GasEstimator.PriceMax
// Existing gas price is: 60480000000
gasPrice := attempt3_4.TxFee.Legacy.ToInt()
gcfg := configtest.NewGeneralConfig(t, func(c *chainlink.Config, s *chainlink.Secrets) {
c.EVM[0].GasEstimator.PriceMax = assets.NewWeiI(60480000000)
})
newCfg := evmtest.NewChainScopedConfig(t, gcfg)
ec2 := newEthConfirmer(t, txStore, ethClient, gcfg, newCfg, ethKeyStore, nil)
ethClient.On("SendTransactionReturnCode", mock.Anything, mock.MatchedBy(func(tx *types.Transaction) bool {
return evmtypes.Nonce(tx.Nonce()) == *etx3.Sequence && gasPrice.Cmp(tx.GasPrice()) == 0
}), fromAddress).Return(commonclient.Successful, errors.New("already known")).Once() // we already submitted at this price, now it's time to bump and submit again but since we simply resubmitted rather than increasing gas price, geth already knows about this tx
// Do the thing
require.NoError(t, ec2.RebroadcastWhereNecessary(tests.Context(t), currentHead))
var err error
etx3, err = txStore.FindTxWithAttempts(ctx, etx3.ID)
require.NoError(t, err)
assert.Equal(t, txmgrcommon.TxUnconfirmed, etx3.State)
// No new tx attempts
require.Len(t, etx3.TxAttempts, 4)
attempt3_4 = etx3.TxAttempts[0]
assert.Equal(t, gasPrice.Int64(), attempt3_4.TxFee.Legacy.ToInt().Int64())
})`
$DIR/core/chains/evm/txmgr/confirmer_test.go: `.TxFee.Legacy.ToInt()`
$DIR/core/chains/evm/txmgr/confirmer_test.go: `.NewGeneralConfig(t, func(c *chainlink.Config, s *chainlink.Secrets) {
c.EVM[0].GasEstimator.PriceMax = assets.NewWeiI(60480000000)
})`
$DIR/core/chains/evm/txmgr/confirmer_test.go: `.NewWeiI(60480000000)`
$DIR/core/chains/evm/txmgr/confirmer_test.go: `.NewChainScopedConfig(t, gcfg)`
$DIR/core/chains/evm/txmgr/confirmer_test.go: `.On("SendTransactionReturnCode", mock.Anything, mock.MatchedBy(func(tx *types.Transaction) bool {
return evmtypes.Nonce(tx.Nonce()) == *etx3.Sequence && gasPrice.Cmp(tx.GasPrice()) == 0
}), fromAddress)`
$DIR/core/chains/evm/txmgr/confirmer_test.go: `.MatchedBy(func(tx *types.Transaction) bool {
return evmtypes.Nonce(tx.Nonce()) == *etx3.Sequence && gasPrice.Cmp(tx.GasPrice()) == 0
})`
$DIR/core/chains/evm/txmgr/confirmer_test.go: `.Nonce(tx.Nonce())`
$DIR/core/chains/evm/txmgr/confirmer_test.go: `.Nonce()`
$DIR/core/chains/evm/txmgr/confirmer_test.go: `.Cmp(tx.GasPrice())`
$DIR/core/chains/evm/txmgr/confirmer_test.go: `.GasPrice()`
$DIR/core/chains/evm/txmgr/confirmer_test.go: `.Return(commonclient.Successful, errors.New("already known"))`
$DIR/core/chains/evm/txmgr/confirmer_test.go: `.New("already known")`
$DIR/core/chains/evm/txmgr/confirmer_test.go: `.Once()`
$DIR/core/chains/evm/txmgr/confirmer_test.go: `.FindTxWithAttempts(ctx, etx3.ID)`
$DIR/core/chains/evm/txmgr/confirmer_test.go: `.Run("EIP-1559: bumps using EIP-1559 rules when existing attempts are of type 0x2", func(t *testing.T) {
ethTx := *types.NewTx(&types.DynamicFeeTx{})
kst.On("SignTx", mock.Anything,
fromAddress,
mock.MatchedBy(func(tx *types.Transaction) bool {
if evmtypes.Nonce(tx.Nonce()) != *etx4.Sequence {
return false
}
ethTx = *tx
return true
}),
mock.Anything).Return(ðTx, nil).Once()
// This is the new, EIP-1559 attempt
gasTipCap := assets.GWei(42)
ethClient.On("SendTransactionReturnCode", mock.Anything, mock.MatchedBy(func(tx *types.Transaction) bool {
return evmtypes.Nonce(tx.Nonce()) == *etx4.Sequence && gasTipCap.ToInt().Cmp(tx.GasTipCap()) == 0
}), fromAddress).Return(commonclient.Successful, nil).Once()
require.NoError(t, ec.RebroadcastWhereNecessary(tests.Context(t), currentHead))
var err error
etx4, err = txStore.FindTxWithAttempts(ctx, etx4.ID)
require.NoError(t, err)
assert.Equal(t, txmgrcommon.TxUnconfirmed, etx4.State)
// A new, bumped attempt
require.Len(t, etx4.TxAttempts, 2)
attempt4_2 = etx4.TxAttempts[0]
assert.Nil(t, attempt4_2.TxFee.Legacy)
assert.Equal(t, assets.GWei(42).String(), attempt4_2.TxFee.DynamicTipCap.String())
assert.Equal(t, assets.GWei(120).String(), attempt4_2.TxFee.DynamicFeeCap.String())
assert.Equal(t, txmgrtypes.TxAttemptBroadcast, attempt1_2.State)
})`
$DIR/core/chains/evm/txmgr/confirmer_test.go: `.NewTx(&types.DynamicFeeTx{})`
$DIR/core/chains/evm/txmgr/confirmer_test.go: `.On("SignTx", mock.Anything,
fromAddress,
mock.MatchedBy(func(tx *types.Transaction) bool {
if evmtypes.Nonce(tx.Nonce()) != *etx4.Sequence {
return false
}
ethTx = *tx
return true
}),
mock.Anything)`
$DIR/core/chains/evm/txmgr/confirmer_test.go: `.MatchedBy(func(tx *types.Transaction) bool {
if evmtypes.Nonce(tx.Nonce()) != *etx4.Sequence {
return false
}
ethTx = *tx
return true
})`
$DIR/core/chains/evm/txmgr/confirmer_test.go: `.Nonce(tx.Nonce())`
$DIR/core/chains/evm/txmgr/confirmer_test.go: `.Nonce()`
$DIR/core/chains/evm/txmgr/confirmer_test.go: `.Return(ðTx, nil)`
$DIR/core/chains/evm/txmgr/confirmer_test.go: `.Once()`
$DIR/core/chains/evm/txmgr/confirmer_test.go: `.GWei(42)`
$DIR/core/chains/evm/txmgr/confirmer_test.go: `.On("SendTransactionReturnCode", mock.Anything, mock.MatchedBy(func(tx *types.Transaction) bool {
return evmtypes.Nonce(tx.Nonce()) == *etx4.Sequence && gasTipCap.ToInt().Cmp(tx.GasTipCap()) == 0
}), fromAddress)`
$DIR/core/chains/evm/txmgr/confirmer_test.go: `.MatchedBy(func(tx *types.Transaction) bool {
return evmtypes.Nonce(tx.Nonce()) == *etx4.Sequence && gasTipCap.ToInt().Cmp(tx.GasTipCap()) == 0
})`
$DIR/core/chains/evm/txmgr/confirmer_test.go: `.Nonce(tx.Nonce())`
$DIR/core/chains/evm/txmgr/confirmer_test.go: `.Nonce()`
$DIR/core/chains/evm/txmgr/confirmer_test.go: `.ToInt()`
$DIR/core/chains/evm/txmgr/confirmer_test.go: `.Cmp(tx.GasTipCap())`
$DIR/core/chains/evm/txmgr/confirmer_test.go: `.GasTipCap()`
$DIR/core/chains/evm/txmgr/confirmer_test.go: `.Return(commonclient.Successful, nil)`
$DIR/core/chains/evm/txmgr/confirmer_test.go: `.Once()`
$DIR/core/chains/evm/txmgr/confirmer_test.go: `.FindTxWithAttempts(ctx, etx4.ID)`
$DIR/core/chains/evm/txmgr/confirmer_test.go: `.Run("EIP-1559: resubmits at the old price and does not create a new attempt if one of the bumped EIP-1559 transactions would have its tip cap exceed EVM.GasEstimator.PriceMax", func(t *testing.T) {
gcfg := configtest.NewGeneralConfig(t, func(c *chainlink.Config, s *chainlink.Secrets) {
c.EVM[0].GasEstimator.PriceMax = assets.GWei(1000)
})
newCfg := evmtest.NewChainScopedConfig(t, gcfg)
ec2 := newEthConfirmer(t, txStore, ethClient, gcfg, newCfg, ethKeyStore, nil)
// Third attempt failed to bump, resubmits old one instead
ethClient.On("SendTransactionReturnCode", mock.Anything, mock.MatchedBy(func(tx *types.Transaction) bool {
return evmtypes.Nonce(tx.Nonce()) == *etx4.Sequence && attempt4_2.Hash.String() == tx.Hash().String()
}), fromAddress).Return(commonclient.Successful, nil).Once()
require.NoError(t, ec2.RebroadcastWhereNecessary(tests.Context(t), currentHead))
var err error
etx4, err = txStore.FindTxWithAttempts(ctx, etx4.ID)
require.NoError(t, err)
assert.Equal(t, txmgrcommon.TxUnconfirmed, etx4.State)
// No new tx attempts
require.Len(t, etx4.TxAttempts, 2)
assert.Equal(t, assets.GWei(999).Int64(), etx4.TxAttempts[0].TxFee.DynamicTipCap.ToInt().Int64())
assert.Equal(t, assets.GWei(1000).Int64(), etx4.TxAttempts[0].TxFee.DynamicFeeCap.ToInt().Int64())
})`
$DIR/core/chains/evm/txmgr/confirmer_test.go: `.NewGeneralConfig(t, func(c *chainlink.Config, s *chainlink.Secrets) {
c.EVM[0].GasEstimator.PriceMax = assets.GWei(1000)
})`
$DIR/core/chains/evm/txmgr/confirmer_test.go: `.GWei(1000)`
$DIR/core/chains/evm/txmgr/confirmer_test.go: `.NewChainScopedConfig(t, gcfg)`
$DIR/core/chains/evm/txmgr/confirmer_test.go: `.On("SendTransactionReturnCode", mock.Anything, mock.MatchedBy(func(tx *types.Transaction) bool {
return evmtypes.Nonce(tx.Nonce()) == *etx4.Sequence && attempt4_2.Hash.String() == tx.Hash().String()
}), fromAddress)`
$DIR/core/chains/evm/txmgr/confirmer_test.go: `.MatchedBy(func(tx *types.Transaction) bool {
return evmtypes.Nonce(tx.Nonce()) == *etx4.Sequence && attempt4_2.Hash.String() == tx.Hash().String()
})`
$DIR/core/chains/evm/txmgr/confirmer_test.go: `.Nonce(tx.Nonce())`
$DIR/core/chains/evm/txmgr/confirmer_test.go: `.Nonce()`
$DIR/core/chains/evm/txmgr/confirmer_test.go: `.Hash.String()`
$DIR/core/chains/evm/txmgr/confirmer_test.go: `.Hash()`
$DIR/core/chains/evm/txmgr/confirmer_test.go: `.String()`
$DIR/core/chains/evm/txmgr/confirmer_test.go: `.Return(commonclient.Successful, nil)`
$DIR/core/chains/evm/txmgr/confirmer_test.go: `.Once()`
$DIR/core/chains/evm/txmgr/confirmer_test.go: `.FindTxWithAttempts(ctx, etx4.ID)`
$DIR/core/chains/evm/txmgr/confirmer_test.go: `.GWei(54)`
$DIR/core/chains/evm/txmgr/confirmer_test.go: `.NewTx(&types.LegacyTx{})`
$DIR/core/chains/evm/txmgr/confirmer_test.go: `.On("SignTx", mock.Anything,
fromAddress,
mock.MatchedBy(func(tx *types.Transaction) bool {
if evmtypes.Nonce(tx.Nonce()) != *etx4.Sequence || expectedBumpedTipCap.ToInt().Cmp(tx.GasTipCap()) != 0 {
return false
}
ethTx = *tx
return true
}),
mock.Anything)`
$DIR/core/chains/evm/txmgr/confirmer_test.go: `.MatchedBy(func(tx *types.Transaction) bool {
if evmtypes.Nonce(tx.Nonce()) != *etx4.Sequence || expectedBumpedTipCap.ToInt().Cmp(tx.GasTipCap()) != 0 {
return false
}
ethTx = *tx
return true
})`
$DIR/core/chains/evm/txmgr/confirmer_test.go: `.Nonce(tx.Nonce())`
$DIR/core/chains/evm/txmgr/confirmer_test.go: `.Nonce()`
$DIR/core/chains/evm/txmgr/confirmer_test.go: `.ToInt()`
$DIR/core/chains/evm/txmgr/confirmer_test.go: `.Cmp(tx.GasTipCap())`
$DIR/core/chains/evm/txmgr/confirmer_test.go: `.GasTipCap()`
$DIR/core/chains/evm/txmgr/confirmer_test.go: `.Return(ðTx, nil)`
$DIR/core/chains/evm/txmgr/confirmer_test.go: `.Once()`
$DIR/core/chains/evm/txmgr/confirmer_test.go: `.On("SendTransactionReturnCode", mock.Anything, mock.MatchedBy(func(tx *types.Transaction) bool {
return evmtypes.Nonce(tx.Nonce()) == *etx4.Sequence && expectedBumpedTipCap.ToInt().Cmp(tx.GasTipCap()) == 0
}), fromAddress)`
$DIR/core/chains/evm/txmgr/confirmer_test.go: `.MatchedBy(func(tx *types.Transaction) bool {
return evmtypes.Nonce(tx.Nonce()) == *etx4.Sequence && expectedBumpedTipCap.ToInt().Cmp(tx.GasTipCap()) == 0
})`
$DIR/core/chains/evm/txmgr/confirmer_test.go: `.Nonce(tx.Nonce())`
$DIR/core/chains/evm/txmgr/confirmer_test.go: `.Nonce()`
$DIR/core/chains/evm/txmgr/confirmer_test.go: `.ToInt()`
$DIR/core/chains/evm/txmgr/confirmer_test.go: `.Cmp(tx.GasTipCap())`
$DIR/core/chains/evm/txmgr/confirmer_test.go: `.GasTipCap()`
$DIR/core/chains/evm/txmgr/confirmer_test.go: `.Return(commonclient.Successful, errors.New("replacement transaction underpriced"))`
$DIR/core/chains/evm/txmgr/confirmer_test.go: `.New("replacement transaction underpriced")`
$DIR/core/chains/evm/txmgr/confirmer_test.go: `.Once()`
$DIR/core/chains/evm/txmgr/confirmer_test.go: `.FindTxWithAttempts(ctx, etx4.ID)`
$DIR/core/chains/evm/txmgr/confirmer_test.go: `.NewSqlxDB(t)`
$DIR/core/chains/evm/txmgr/confirmer_test.go: `.NewGeneralConfig(t, func(c *chainlink.Config, s *chainlink.Secrets) {
c.EVM[0].GasEstimator.PriceMax = assets.GWei(500)
})`
$DIR/core/chains/evm/txmgr/confirmer_test.go: `.GWei(500)`
$DIR/core/chains/evm/txmgr/confirmer_test.go: `.NewTestTxStore(t, db)`
$DIR/core/chains/evm/txmgr/confirmer_test.go: `.NewKeyStore(t, db)`
$DIR/core/chains/evm/txmgr/confirmer_test.go: `.Eth()`
$DIR/core/chains/evm/txmgr/confirmer_test.go: `.NewChainScopedConfig(t, cfg)`
$DIR/core/chains/evm/txmgr/confirmer_test.go: `.MustInsertRandomKeyReturningState(t, ethKeyStore)`
$DIR/core/chains/evm/txmgr/confirmer_test.go: `.MustInsertRandomKeyReturningState(t, ethKeyStore)`
$DIR/core/chains/evm/txmgr/confirmer_test.go: `.NewEth(t)`
$DIR/core/chains/evm/txmgr/confirmer_test.go: `.On("EnabledAddressesForChain", mock.Anything, &cltest.FixtureChainID)`
$DIR/core/chains/evm/txmgr/confirmer_test.go: `.Return(addresses, nil)`
$DIR/core/chains/evm/txmgr/confirmer_test.go: `.Maybe()`
$DIR/core/chains/evm/txmgr/confirmer_test.go: `.Run("terminally underpriced transaction with in_progress attempt is retried with more gas", func(t *testing.T) {
ethClient := testutils.NewEthClientMockWithDefaultChain(t)
ec := newEthConfirmer(t, txStore, ethClient, cfg, evmcfg, kst, nil)
originalBroadcastAt := time.Unix(1616509100, 0)
etx := mustInsertUnconfirmedEthTxWithAttemptState(t, txStore, nonce, fromAddress, txmgrtypes.TxAttemptInProgress, originalBroadcastAt)
require.Equal(t, originalBroadcastAt, *etx.BroadcastAt)
nonce++
attempt := etx.TxAttempts[0]
signedTx, err := txmgr.GetGethSignedTx(attempt.SignedRawTx)
require.NoError(t, err)
// Fail the first time with terminally underpriced.
ethClient.On("SendTransactionReturnCode", mock.Anything, mock.Anything, fromAddress).Return(
commonclient.Underpriced, errors.New("Transaction gas price is too low. It does not satisfy your node's minimal gas price")).Once()
// Succeed the second time after bumping gas.
ethClient.On("SendTransactionReturnCode", mock.Anything, mock.Anything, fromAddress).Return(
commonclient.Successful, nil).Once()
kst.On("SignTx", mock.Anything, mock.Anything, mock.Anything, mock.Anything).Return(
signedTx, nil,
).Once()
require.NoError(t, ec.RebroadcastWhereNecessary(tests.Context(t), currentHead))
})`
$DIR/core/chains/evm/txmgr/confirmer_test.go: `.NewEthClientMockWithDefaultChain(t)`
$DIR/core/chains/evm/txmgr/confirmer_test.go: `.Unix(1616509100, 0)`
$DIR/core/chains/evm/txmgr/confirmer_test.go: `.GetGethSignedTx(attempt.SignedRawTx)`
$DIR/core/chains/evm/txmgr/confirmer_test.go: `.On("SendTransactionReturnCode", mock.Anything, mock.Anything, fromAddress)`
$DIR/core/chains/evm/txmgr/confirmer_test.go: `.Return(
commonclient.Underpriced, errors.New("Transaction gas price is too low. It does not satisfy your node's minimal gas price"))`
$DIR/core/chains/evm/txmgr/confirmer_test.go: `.New("Transaction gas price is too low. It does not satisfy your node's minimal gas price")`
$DIR/core/chains/evm/txmgr/confirmer_test.go: `.Once()`
$DIR/core/chains/evm/txmgr/confirmer_test.go: `.On("SendTransactionReturnCode", mock.Anything, mock.Anything, fromAddress)`
$DIR/core/chains/evm/txmgr/confirmer_test.go: `.Return(
commonclient.Successful, nil)`
$DIR/core/chains/evm/txmgr/confirmer_test.go: `.Once()`
$DIR/core/chains/evm/txmgr/confirmer_test.go: `.On("SignTx", mock.Anything, mock.Anything, mock.Anything, mock.Anything)`
$DIR/core/chains/evm/txmgr/confirmer_test.go: `.Return(
signedTx, nil,
)`
$DIR/core/chains/evm/txmgr/confirmer_test.go: `.Once()`
$DIR/core/chains/evm/txmgr/confirmer_test.go: `.Run("multiple gas bumps with existing broadcast attempts are retried with more gas until success in legacy mode", func(t *testing.T) {
ethClient := testutils.NewEthClientMockWithDefaultChain(t)
ec := newEthConfirmer(t, txStore, ethClient, cfg, evmcfg, kst, nil)
etx := cltest.MustInsertUnconfirmedEthTxWithBroadcastLegacyAttempt(t, txStore, nonce, fromAddress)
nonce++
legacyAttempt := etx.TxAttempts[0]
var dbAttempt txmgr.DbEthTxAttempt
dbAttempt.FromTxAttempt(&legacyAttempt)
require.NoError(t, db.Get(&dbAttempt, `UPDATE evm.tx_attempts SET broadcast_before_block_num=$1 WHERE id=$2 RETURNING *`, oldEnough, legacyAttempt.ID))
// Fail a few times with terminally underpriced
ethClient.On("SendTransactionReturnCode", mock.Anything, mock.Anything, fromAddress).Return(
commonclient.Underpriced, errors.New("Transaction gas price is too low. It does not satisfy your node's minimal gas price")).Times(3)
// Succeed the second time after bumping gas.
ethClient.On("SendTransactionReturnCode", mock.Anything, mock.Anything, fromAddress).Return(
commonclient.Successful, nil).Once()
signedLegacyTx := new(types.Transaction)
kst.On("SignTx", mock.Anything, mock.Anything, mock.MatchedBy(func(tx *types.Transaction) bool {
return tx.Type() == 0x0 && tx.Nonce() == uint64(*etx.Sequence)
}), mock.Anything).Return(
signedLegacyTx, nil,
).Run(func(args mock.Arguments) {
unsignedLegacyTx := args.Get(2).(*types.Transaction)
// Use the real keystore to do the actual signing
thisSignedLegacyTx, err := ethKeyStore.SignTx(tests.Context(t), fromAddress, unsignedLegacyTx, testutils.FixtureChainID)
require.NoError(t, err)
*signedLegacyTx = *thisSignedLegacyTx
}).Times(4) // 3 failures 1 success
require.NoError(t, ec.RebroadcastWhereNecessary(tests.Context(t), currentHead))
})`
$DIR/core/chains/evm/txmgr/confirmer_test.go: `.NewEthClientMockWithDefaultChain(t)`
$DIR/core/chains/evm/txmgr/confirmer_test.go: `.MustInsertUnconfirmedEthTxWithBroadcastLegacyAttempt(t, txStore, nonce, fromAddress)`
$DIR/core/chains/evm/txmgr/confirmer_test.go: `.FromTxAttempt(&legacyAttempt)`
$DIR/core/chains/evm/txmgr/confirmer_test.go: `.On("SendTransactionReturnCode", mock.Anything, mock.Anything, fromAddress)`
$DIR/core/chains/evm/txmgr/confirmer_test.go: `.Return(
commonclient.Underpriced, errors.New("Transaction gas price is too low. It does not satisfy your node's minimal gas price"))`
$DIR/core/chains/evm/txmgr/confirmer_test.go: `.New("Transaction gas price is too low. It does not satisfy your node's minimal gas price")`
$DIR/core/chains/evm/txmgr/confirmer_test.go: `.Times(3)`
$DIR/core/chains/evm/txmgr/confirmer_test.go: `.On("SendTransactionReturnCode", mock.Anything, mock.Anything, fromAddress)`
$DIR/core/chains/evm/txmgr/confirmer_test.go: `.Return(
commonclient.Successful, nil)`
$DIR/core/chains/evm/txmgr/confirmer_test.go: `.Once()`
$DIR/core/chains/evm/txmgr/confirmer_test.go: `.On("SignTx", mock.Anything, mock.Anything, mock.MatchedBy(func(tx *types.Transaction) bool {
return tx.Type() == 0x0 && tx.Nonce() == uint64(*etx.Sequence)
}), mock.Anything)`
$DIR/core/chains/evm/txmgr/confirmer_test.go: `.MatchedBy(func(tx *types.Transaction) bool {
return tx.Type() == 0x0 && tx.Nonce() == uint64(*etx.Sequence)
})`
$DIR/core/chains/evm/txmgr/confirmer_test.go: `.Type()`
$DIR/core/chains/evm/txmgr/confirmer_test.go: `.Nonce()`
$DIR/core/chains/evm/txmgr/confirmer_test.go: `.Return(
signedLegacyTx, nil,
)`
$DIR/core/chains/evm/txmgr/confirmer_test.go: `.Run(func(args mock.Arguments) {
unsignedLegacyTx := args.Get(2).(*types.Transaction)
// Use the real keystore to do the actual signing
thisSignedLegacyTx, err := ethKeyStore.SignTx(tests.Context(t), fromAddress, unsignedLegacyTx, testutils.FixtureChainID)
require.NoError(t, err)
*signedLegacyTx = *thisSignedLegacyTx
})`
$DIR/core/chains/evm/txmgr/confirmer_test.go: `.Get(2)`
$DIR/core/chains/evm/txmgr/confirmer_test.go: `.SignTx(tests.Context(t), fromAddress, unsignedLegacyTx, testutils.FixtureChainID)`
$DIR/core/chains/evm/txmgr/confirmer_test.go: `.Context(t)`
$DIR/core/chains/evm/txmgr/confirmer_test.go: `.Times(4)`
$DIR/core/chains/evm/txmgr/confirmer_test.go: `.NewEthClientMockWithDefaultChain(t)`
$DIR/core/chains/evm/txmgr/confirmer_test.go: `.FromTxAttempt(&dxFeeAttempt)`
$DIR/core/chains/evm/txmgr/confirmer_test.go: `.On("SendTransactionReturnCode", mock.Anything, mock.Anything, fromAddress)`
$DIR/core/chains/evm/txmgr/confirmer_test.go: `.Return(
commonclient.Underpriced, errors.New("transaction underpriced"))`
$DIR/core/chains/evm/txmgr/confirmer_test.go: `.New("transaction underpriced")`
$DIR/core/chains/evm/txmgr/confirmer_test.go: `.Times(3)`
$DIR/core/chains/evm/txmgr/confirmer_test.go: `.On("SendTransactionReturnCode", mock.Anything, mock.Anything, fromAddress)`
$DIR/core/chains/evm/txmgr/confirmer_test.go: `.Return(
commonclient.Successful, nil)`
$DIR/core/chains/evm/txmgr/confirmer_test.go: `.Once()`
$DIR/core/chains/evm/txmgr/confirmer_test.go: `.On("SignTx", mock.Anything, mock.Anything, mock.MatchedBy(func(tx *types.Transaction) bool {
return tx.Type() == 0x2 && tx.Nonce() == uint64(*etx.Sequence)
}), mock.Anything)`
$DIR/core/chains/evm/txmgr/confirmer_test.go: `.MatchedBy(func(tx *types.Transaction) bool {
return tx.Type() == 0x2 && tx.Nonce() == uint64(*etx.Sequence)
})`
$DIR/core/chains/evm/txmgr/confirmer_test.go: `.Type()`
$DIR/core/chains/evm/txmgr/confirmer_test.go: `.Nonce()`
$DIR/core/chains/evm/txmgr/confirmer_test.go: `.Return(
signedDxFeeTx, nil,
)`
$DIR/core/chains/evm/txmgr/confirmer_test.go: `.Run(func(args mock.Arguments) {
unsignedDxFeeTx := args.Get(2).(*types.Transaction)
// Use the real keystore to do the actual signing
thisSignedDxFeeTx, err := ethKeyStore.SignTx(tests.Context(t), fromAddress, unsignedDxFeeTx, testutils.FixtureChainID)
require.NoError(t, err)
*signedDxFeeTx = *thisSignedDxFeeTx
})`
$DIR/core/chains/evm/txmgr/confirmer_test.go: `.Get(2)`
$DIR/core/chains/evm/txmgr/confirmer_test.go: `.SignTx(tests.Context(t), fromAddress, unsignedDxFeeTx, testutils.FixtureChainID)`
$DIR/core/chains/evm/txmgr/confirmer_test.go: `.Context(t)`
$DIR/core/chains/evm/txmgr/confirmer_test.go: `.Times(4)`
$DIR/core/chains/evm/txmgr/confirmer_test.go: `.NewSqlxDB(t)`
$DIR/core/chains/evm/txmgr/confirmer_test.go: `.NewTestTxStore(t, db)`
$DIR/core/chains/evm/txmgr/confirmer_test.go: `.Context(t)`
$DIR/core/chains/evm/txmgr/confirmer_test.go: `.NewEthClientMockWithDefaultChain(t)`
$DIR/core/chains/evm/txmgr/confirmer_test.go: `.NewKeyStore(t, db)`
$DIR/core/chains/evm/txmgr/confirmer_test.go: `.Eth()`
$DIR/core/chains/evm/txmgr/confirmer_test.go: `.MustInsertRandomKeyReturningState(t, ethKeyStore)`
$DIR/core/chains/evm/txmgr/confirmer_test.go: `.EnabledKeysForChain(tests.Context(t), testutils.FixtureChainID)`
$DIR/core/chains/evm/txmgr/confirmer_test.go: `.Context(t)`
$DIR/core/chains/evm/txmgr/confirmer_test.go: `.MustInsertUnconfirmedEthTxWithBroadcastLegacyAttempt(t, txStore, nonce, fromAddress)`
$DIR/core/chains/evm/txmgr/confirmer_test.go: `.FromTxAttempt(&attempt1_1)`
$DIR/core/chains/evm/txmgr/confirmer_test.go: `.New("insufficient funds for gas * price + value")`
$DIR/core/chains/evm/txmgr/confirmer_test.go: `.Run("saves attempt with state 'insufficient_eth' if eth node returns this error", func(t *testing.T) {
ec := newEthConfirmer(t, txStore, ethClient, gconfig, config, ethKeyStore, nil)
expectedBumpedGasPrice := big.NewInt(20000000000)
require.Greater(t, expectedBumpedGasPrice.Int64(), attempt1_1.TxFee.Legacy.ToInt().Int64())
ethClient.On("SendTransactionReturnCode", mock.Anything, mock.MatchedBy(func(tx *types.Transaction) bool {
return expectedBumpedGasPrice.Cmp(tx.GasPrice()) == 0
}), fromAddress).Return(commonclient.InsufficientFunds, insufficientEthError).Once()
// Do the thing
require.NoError(t, ec.RebroadcastWhereNecessary(tests.Context(t), currentHead))
etx, err = txStore.FindTxWithAttempts(ctx, etx.ID)
require.NoError(t, err)
require.Len(t, etx.TxAttempts, 2)
require.Equal(t, attempt1_1.ID, etx.TxAttempts[1].ID)
// Got the new attempt
attempt1_2 = etx.TxAttempts[0]
assert.Equal(t, expectedBumpedGasPrice.Int64(), attempt1_2.TxFee.Legacy.ToInt().Int64())
assert.Equal(t, txmgrtypes.TxAttemptInsufficientFunds, attempt1_2.State)
assert.Nil(t, attempt1_2.BroadcastBeforeBlockNum)
})`
$DIR/core/chains/evm/txmgr/confirmer_test.go: `.NewInt(20000000000)`
$DIR/core/chains/evm/txmgr/confirmer_test.go: `.On("SendTransactionReturnCode", mock.Anything, mock.MatchedBy(func(tx *types.Transaction) bool {
return expectedBumpedGasPrice.Cmp(tx.GasPrice()) == 0
}), fromAddress)`
$DIR/core/chains/evm/txmgr/confirmer_test.go: `.MatchedBy(func(tx *types.Transaction) bool {
return expectedBumpedGasPrice.Cmp(tx.GasPrice()) == 0
})`
$DIR/core/chains/evm/txmgr/confirmer_test.go: `.Cmp(tx.GasPrice())`
$DIR/core/chains/evm/txmgr/confirmer_test.go: `.GasPrice()`
$DIR/core/chains/evm/txmgr/confirmer_test.go: `.Return(commonclient.InsufficientFunds, insufficientEthError)`
$DIR/core/chains/evm/txmgr/confirmer_test.go: `.Once()`
$DIR/core/chains/evm/txmgr/confirmer_test.go: `.FindTxWithAttempts(ctx, etx.ID)`
$DIR/core/chains/evm/txmgr/confirmer_test.go: `.Run("does not bump gas when previous error was 'out of eth', instead resubmits existing transaction", func(t *testing.T) {
ec := newEthConfirmer(t, txStore, ethClient, gconfig, config, ethKeyStore, nil)
expectedBumpedGasPrice := big.NewInt(20000000000)
require.Greater(t, expectedBumpedGasPrice.Int64(), attempt1_1.TxFee.Legacy.ToInt().Int64())
ethClient.On("SendTransactionReturnCode", mock.Anything, mock.MatchedBy(func(tx *types.Transaction) bool {
return expectedBumpedGasPrice.Cmp(tx.GasPrice()) == 0
}), fromAddress).Return(commonclient.InsufficientFunds, insufficientEthError).Once()
// Do the thing
require.NoError(t, ec.RebroadcastWhereNecessary(tests.Context(t), currentHead))
etx, err = txStore.FindTxWithAttempts(ctx, etx.ID)
require.NoError(t, err)
// New attempt was NOT created
require.Len(t, etx.TxAttempts, 2)
// The attempt is still "out of eth"
attempt1_2 = etx.TxAttempts[0]
assert.Equal(t, expectedBumpedGasPrice.Int64(), attempt1_2.TxFee.Legacy.ToInt().Int64())
assert.Equal(t, txmgrtypes.TxAttemptInsufficientFunds, attempt1_2.State)
})`
$DIR/core/chains/evm/txmgr/confirmer_test.go: `.NewInt(20000000000)`
$DIR/core/chains/evm/txmgr/confirmer_test.go: `.On("SendTransactionReturnCode", mock.Anything, mock.MatchedBy(func(tx *types.Transaction) bool {
return expectedBumpedGasPrice.Cmp(tx.GasPrice()) == 0
}), fromAddress)`
$DIR/core/chains/evm/txmgr/confirmer_test.go: `.MatchedBy(func(tx *types.Transaction) bool {
return expectedBumpedGasPrice.Cmp(tx.GasPrice()) == 0
})`
$DIR/core/chains/evm/txmgr/confirmer_test.go: `.Cmp(tx.GasPrice())`
$DIR/core/chains/evm/txmgr/confirmer_test.go: `.GasPrice()`
$DIR/core/chains/evm/txmgr/confirmer_test.go: `.Return(commonclient.InsufficientFunds, insufficientEthError)`
$DIR/core/chains/evm/txmgr/confirmer_test.go: `.Once()`
$DIR/core/chains/evm/txmgr/confirmer_test.go: `.FindTxWithAttempts(ctx, etx.ID)`
$DIR/core/chains/evm/txmgr/confirmer_test.go: `.Run("saves the attempt as broadcast after node wallet has been topped up with sufficient balance", func(t *testing.T) {
ec := newEthConfirmer(t, txStore, ethClient, gconfig, config, ethKeyStore, nil)
expectedBumpedGasPrice := big.NewInt(20000000000)
require.Greater(t, expectedBumpedGasPrice.Int64(), attempt1_1.TxFee.Legacy.ToInt().Int64())
ethClient.On("SendTransactionReturnCode", mock.Anything, mock.MatchedBy(func(tx *types.Transaction) bool {
return expectedBumpedGasPrice.Cmp(tx.GasPrice()) == 0
}), fromAddress).Return(commonclient.Successful, nil).Once()
// Do the thing
require.NoError(t, ec.RebroadcastWhereNecessary(tests.Context(t), currentHead))
etx, err = txStore.FindTxWithAttempts(ctx, etx.ID)
require.NoError(t, err)
// New attempt was NOT created
require.Len(t, etx.TxAttempts, 2)
// Attempt is now 'broadcast'
attempt1_2 = etx.TxAttempts[0]
assert.Equal(t, expectedBumpedGasPrice.Int64(), attempt1_2.TxFee.Legacy.ToInt().Int64())
assert.Equal(t, txmgrtypes.TxAttemptBroadcast, attempt1_2.State)
})`
$DIR/core/chains/evm/txmgr/confirmer_test.go: `.NewInt(20000000000)`
$DIR/core/chains/evm/txmgr/confirmer_test.go: `.On("SendTransactionReturnCode", mock.Anything, mock.MatchedBy(func(tx *types.Transaction) bool {
return expectedBumpedGasPrice.Cmp(tx.GasPrice()) == 0
}), fromAddress)`
$DIR/core/chains/evm/txmgr/confirmer_test.go: `.MatchedBy(func(tx *types.Transaction) bool {
return expectedBumpedGasPrice.Cmp(tx.GasPrice()) == 0
})`
$DIR/core/chains/evm/txmgr/confirmer_test.go: `.Cmp(tx.GasPrice())`
$DIR/core/chains/evm/txmgr/confirmer_test.go: `.GasPrice()`
$DIR/core/chains/evm/txmgr/confirmer_test.go: `.Return(commonclient.Successful, nil)`
$DIR/core/chains/evm/txmgr/confirmer_test.go: `.Once()`
$DIR/core/chains/evm/txmgr/confirmer_test.go: `.FindTxWithAttempts(ctx, etx.ID)`
$DIR/core/chains/evm/txmgr/confirmer_test.go: `.NewGeneralConfig(t, func(c *chainlink.Config, s *chainlink.Secrets) {
c.EVM[0].GasEstimator.BumpTxDepth = ptr(uint32(depth))
})`
$DIR/core/chains/evm/txmgr/confirmer_test.go: `.NewChainScopedConfig(t, cfg)`
$DIR/core/chains/evm/txmgr/confirmer_test.go: `.On("SendTransactionReturnCode", mock.Anything, mock.MatchedBy(func(tx *types.Transaction) bool {
return tx.Nonce() == uint64(n)
}), fromAddress)`
$DIR/core/chains/evm/txmgr/confirmer_test.go: `.MatchedBy(func(tx *types.Transaction) bool {
return tx.Nonce() == uint64(n)
})`
$DIR/core/chains/evm/txmgr/confirmer_test.go: `.Nonce()`
$DIR/core/chains/evm/txmgr/confirmer_test.go: `.Return(commonclient.Successful, nil)`
$DIR/core/chains/evm/txmgr/confirmer_test.go: `.Once()`
$DIR/core/chains/evm/txmgr/confirmer_test.go: `.NewSqlxDB(t)`
$DIR/core/chains/evm/txmgr/confirmer_test.go: `.NewTestTxStore(t, db)`
$DIR/core/chains/evm/txmgr/confirmer_test.go: `.Context(t)`
$DIR/core/chains/evm/txmgr/confirmer_test.go: `.NewKeyStore(t, db)`
$DIR/core/chains/evm/txmgr/confirmer_test.go: `.Eth()`
$DIR/core/chains/evm/txmgr/confirmer_test.go: `.MustInsertRandomKeyReturningState(t, ethKeyStore)`
$DIR/core/chains/evm/txmgr/confirmer_test.go: `.NewEthClientMockWithDefaultChain(t)`
$DIR/core/chains/evm/txmgr/confirmer_test.go: `.NewHash()`
$DIR/core/chains/evm/txmgr/confirmer_test.go: `.NewHash()`
$DIR/core/chains/evm/txmgr/confirmer_test.go: `.NewHash()`
$DIR/core/chains/evm/txmgr/confirmer_test.go: `.Run("does nothing if there aren't any transactions", func(t *testing.T) {
require.NoError(t, ec.EnsureConfirmedTransactionsInLongestChain(tests.Context(t), &head))
})`
$DIR/core/chains/evm/txmgr/confirmer_test.go: `.Run("does nothing to unconfirmed transactions", func(t *testing.T) {
etx := cltest.MustInsertUnconfirmedEthTxWithBroadcastLegacyAttempt(t, txStore, 0, fromAddress)
// Do the thing
require.NoError(t, ec.EnsureConfirmedTransactionsInLongestChain(tests.Context(t), &head))
etx, err := txStore.FindTxWithAttempts(ctx, etx.ID)
require.NoError(t, err)
assert.Equal(t, txmgrcommon.TxUnconfirmed, etx.State)
})`
$DIR/core/chains/evm/txmgr/confirmer_test.go: `.MustInsertUnconfirmedEthTxWithBroadcastLegacyAttempt(t, txStore, 0, fromAddress)`
$DIR/core/chains/evm/txmgr/confirmer_test.go: `.FindTxWithAttempts(ctx, etx.ID)`
$DIR/core/chains/evm/txmgr/confirmer_test.go: `.Run("does nothing to confirmed transactions with receipts within head height of the chain and included in the chain", func(t *testing.T) {
etx := cltest.MustInsertConfirmedEthTxWithLegacyAttempt(t, txStore, 2, 1, fromAddress)
mustInsertEthReceipt(t, txStore, head.Number, head.Hash, etx.TxAttempts[0].Hash)
// Do the thing
require.NoError(t, ec.EnsureConfirmedTransactionsInLongestChain(tests.Context(t), &head))
etx, err := txStore.FindTxWithAttempts(ctx, etx.ID)
require.NoError(t, err)
assert.Equal(t, txmgrcommon.TxConfirmed, etx.State)
})`
$DIR/core/chains/evm/txmgr/confirmer_test.go: `.MustInsertConfirmedEthTxWithLegacyAttempt(t, txStore, 2, 1, fromAddress)`
$DIR/core/chains/evm/txmgr/confirmer_test.go: `.FindTxWithAttempts(ctx, etx.ID)`
$DIR/core/chains/evm/txmgr/confirmer_test.go: `.Run("does nothing to confirmed transactions that only have receipts older than the start of the chain", func(t *testing.T) {
etx := cltest.MustInsertConfirmedEthTxWithLegacyAttempt(t, txStore, 3, 1, fromAddress)
// Add receipt that is older than the lowest block of the chain
mustInsertEthReceipt(t, txStore, head.Parent.Parent.Number-1, testutils.NewHash(), etx.TxAttempts[0].Hash)
// Do the thing
require.NoError(t, ec.EnsureConfirmedTransactionsInLongestChain(tests.Context(t), &head))
etx, err := txStore.FindTxWithAttempts(ctx, etx.ID)
require.NoError(t, err)
assert.Equal(t, txmgrcommon.TxConfirmed, etx.State)
})`
$DIR/core/chains/evm/txmgr/confirmer_test.go: `.MustInsertConfirmedEthTxWithLegacyAttempt(t, txStore, 3, 1, fromAddress)`
$DIR/core/chains/evm/txmgr/confirmer_test.go: `.NewHash()`
$DIR/core/chains/evm/txmgr/confirmer_test.go: `.FindTxWithAttempts(ctx, etx.ID)`
$DIR/core/chains/evm/txmgr/confirmer_test.go: `.Run("unconfirms and rebroadcasts transactions that have receipts within head height of the chain but not included in the chain", func(t *testing.T) {
etx := cltest.MustInsertConfirmedEthTxWithLegacyAttempt(t, txStore, 4, 1, fromAddress)
attempt := etx.TxAttempts[0]
// Include one within head height but a different block hash
mustInsertEthReceipt(t, txStore, head.Parent.Number, testutils.NewHash(), attempt.Hash)
ethClient.On("SendTransactionReturnCode", mock.Anything, mock.MatchedBy(func(tx *types.Transaction) bool {
atx, err := txmgr.GetGethSignedTx(attempt.SignedRawTx)
require.NoError(t, err)
// Keeps gas price and nonce the same
return atx.GasPrice().Cmp(tx.GasPrice()) == 0 && atx.Nonce() == tx.Nonce()
}), fromAddress).Return(commonclient.Successful, nil).Once()
// Do the thing
require.NoError(t, ec.EnsureConfirmedTransactionsInLongestChain(tests.Context(t), &head))
etx, err := txStore.FindTxWithAttempts(ctx, etx.ID)
require.NoError(t, err)
assert.Equal(t, txmgrcommon.TxUnconfirmed, etx.State)
require.Len(t, etx.TxAttempts, 1)
attempt = etx.TxAttempts[0]
assert.Equal(t, txmgrtypes.TxAttemptBroadcast, attempt.State)
})`
$DIR/core/chains/evm/txmgr/confirmer_test.go: `.MustInsertConfirmedEthTxWithLegacyAttempt(t, txStore, 4, 1, fromAddress)`
$DIR/core/chains/evm/txmgr/confirmer_test.go: `.NewHash()`
$DIR/core/chains/evm/txmgr/confirmer_test.go: `.On("SendTransactionReturnCode", mock.Anything, mock.MatchedBy(func(tx *types.Transaction) bool {
atx, err := txmgr.GetGethSignedTx(attempt.SignedRawTx)
require.NoError(t, err)
// Keeps gas price and nonce the same
return atx.GasPrice().Cmp(tx.GasPrice()) == 0 && atx.Nonce() == tx.Nonce()
}), fromAddress)`
$DIR/core/chains/evm/txmgr/confirmer_test.go: `.MatchedBy(func(tx *types.Transaction) bool {
atx, err := txmgr.GetGethSignedTx(attempt.SignedRawTx)
require.NoError(t, err)
// Keeps gas price and nonce the same
return atx.GasPrice().Cmp(tx.GasPrice()) == 0 && atx.Nonce() == tx.Nonce()
})`
$DIR/core/chains/evm/txmgr/confirmer_test.go: `.GetGethSignedTx(attempt.SignedRawTx)`
$DIR/core/chains/evm/txmgr/confirmer_test.go: `.GasPrice()`
$DIR/core/chains/evm/txmgr/confirmer_test.go: `.Cmp(tx.GasPrice())`
$DIR/core/chains/evm/txmgr/confirmer_test.go: `.GasPrice()`
$DIR/core/chains/evm/txmgr/confirmer_test.go: `.Nonce()`
$DIR/core/chains/evm/txmgr/confirmer_test.go: `.Nonce()`
$DIR/core/chains/evm/txmgr/confirmer_test.go: `.Return(commonclient.Successful, nil)`
$DIR/core/chains/evm/txmgr/confirmer_test.go: `.Once()`
$DIR/core/chains/evm/txmgr/confirmer_test.go: `.FindTxWithAttempts(ctx, etx.ID)`
$DIR/core/chains/evm/txmgr/confirmer_test.go: `.Run("unconfirms and rebroadcasts transactions that have receipts within head height of chain but not included in the chain even if a receipt exists older than the start of the chain", func(t *testing.T) {
etx := cltest.MustInsertConfirmedEthTxWithLegacyAttempt(t, txStore, 5, 1, fromAddress)
attempt := etx.TxAttempts[0]
attemptHash := attempt.Hash
// Add receipt that is older than the lowest block of the chain
mustInsertEthReceipt(t, txStore, head.Parent.Parent.Number-1, testutils.NewHash(), attemptHash)
// Include one within head height but a different block hash
mustInsertEthReceipt(t, txStore, head.Parent.Number, testutils.NewHash(), attemptHash)
ethClient.On("SendTransactionReturnCode", mock.Anything, mock.Anything, fromAddress).Return(
commonclient.Successful, nil).Once()
// Do the thing
require.NoError(t, ec.EnsureConfirmedTransactionsInLongestChain(tests.Context(t), &head))
etx, err := txStore.FindTxWithAttempts(ctx, etx.ID)
require.NoError(t, err)
assert.Equal(t, txmgrcommon.TxUnconfirmed, etx.State)
require.Len(t, etx.TxAttempts, 1)
attempt = etx.TxAttempts[0]
assert.Equal(t, txmgrtypes.TxAttemptBroadcast, attempt.State)
})`
$DIR/core/chains/evm/txmgr/confirmer_test.go: `.MustInsertConfirmedEthTxWithLegacyAttempt(t, txStore, 5, 1, fromAddress)`
$DIR/core/chains/evm/txmgr/confirmer_test.go: `.NewHash()`
$DIR/core/chains/evm/txmgr/confirmer_test.go: `.NewHash()`
$DIR/core/chains/evm/txmgr/confirmer_test.go: `.On("SendTransactionReturnCode", mock.Anything, mock.Anything, fromAddress)`
$DIR/core/chains/evm/txmgr/confirmer_test.go: `.Return(
commonclient.Successful, nil)`
$DIR/core/chains/evm/txmgr/confirmer_test.go: `.Once()`
$DIR/core/chains/evm/txmgr/confirmer_test.go: `.FindTxWithAttempts(ctx, etx.ID)`
$DIR/core/chains/evm/txmgr/confirmer_test.go: `.Run("if more than one attempt has a receipt (should not be possible but isn't prevented by database constraints) unconfirms and rebroadcasts only the attempt with the highest gas price", func(t *testing.T) {
etx := cltest.MustInsertConfirmedEthTxWithLegacyAttempt(t, txStore, 6, 1, fromAddress)
require.Len(t, etx.TxAttempts, 1)
// Sanity check to assert the included attempt has the lowest gas price
require.Less(t, etx.TxAttempts[0].TxFee.Legacy.ToInt().Int64(), int64(30000))
attempt2 := newBroadcastLegacyEthTxAttempt(t, etx.ID, 30000)
attempt2.SignedRawTx = hexutil.MustDecode("0xf88c8301f3a98503b9aca000832ab98094f5fff180082d6017036b771ba883025c654bc93580a4daa6d556000000000000000000000000000000000000000000000000000000000000000026a0f25601065ee369b6470c0399a2334afcfbeb0b5c8f3d9a9042e448ed29b5bcbda05b676e00248b85faf4dd889f0e2dcf91eb867e23ac9eeb14a73f9e4c14972cdf")
attempt3 := newBroadcastLegacyEthTxAttempt(t, etx.ID, 40000)
attempt3.SignedRawTx = hexutil.MustDecode("0xf88c8301f3a88503b9aca0008316e36094151445852b0cfdf6a4cc81440f2af99176e8ad0880a4daa6d556000000000000000000000000000000000000000000000000000000000000000026a0dcb5a7ad52b96a866257134429f944c505820716567f070e64abb74899803855a04c13eff2a22c218e68da80111e1bb6dc665d3dea7104ab40ff8a0275a99f630d")
require.NoError(t, txStore.InsertTxAttempt(ctx, &attempt2))
require.NoError(t, txStore.InsertTxAttempt(ctx, &attempt3))
// Receipt is within head height but a different block hash
mustInsertEthReceipt(t, txStore, head.Parent.Number, testutils.NewHash(), attempt2.Hash)
// Receipt is within head height but a different block hash
mustInsertEthReceipt(t, txStore, head.Parent.Number, testutils.NewHash(), attempt3.Hash)
ethClient.On("SendTransactionReturnCode", mock.Anything, mock.MatchedBy(func(tx *types.Transaction) bool {
s, err := txmgr.GetGethSignedTx(attempt3.SignedRawTx)
require.NoError(t, err)
return tx.Hash() == s.Hash()
}), fromAddress).Return(commonclient.Successful, nil).Once()
// Do the thing
require.NoError(t, ec.EnsureConfirmedTransactionsInLongestChain(tests.Context(t), &head))
etx, err := txStore.FindTxWithAttempts(ctx, etx.ID)
require.NoError(t, err)
assert.Equal(t, txmgrcommon.TxUnconfirmed, etx.State)
require.Len(t, etx.TxAttempts, 3)
attempt1 := etx.TxAttempts[0]
assert.Equal(t, txmgrtypes.TxAttemptBroadcast, attempt1.State)
attempt2 = etx.TxAttempts[1]
assert.Equal(t, txmgrtypes.TxAttemptBroadcast, attempt2.State)
attempt3 = etx.TxAttempts[2]
assert.Equal(t, txmgrtypes.TxAttemptBroadcast, attempt3.State)
})`
$DIR/core/chains/evm/txmgr/confirmer_test.go: `.MustInsertConfirmedEthTxWithLegacyAttempt(t, txStore, 6, 1, fromAddress)`
$DIR/core/chains/evm/txmgr/confirmer_test.go: `.MustDecode("0xf88c8301f3a98503b9aca000832ab98094f5fff180082d6017036b771ba883025c654bc93580a4daa6d556000000000000000000000000000000000000000000000000000000000000000026a0f25601065ee369b6470c0399a2334afcfbeb0b5c8f3d9a9042e448ed29b5bcbda05b676e00248b85faf4dd889f0e2dcf91eb867e23ac9eeb14a73f9e4c14972cdf")`
$DIR/core/chains/evm/txmgr/confirmer_test.go: `.MustDecode("0xf88c8301f3a88503b9aca0008316e36094151445852b0cfdf6a4cc81440f2af99176e8ad0880a4daa6d556000000000000000000000000000000000000000000000000000000000000000026a0dcb5a7ad52b96a866257134429f944c505820716567f070e64abb74899803855a04c13eff2a22c218e68da80111e1bb6dc665d3dea7104ab40ff8a0275a99f630d")`
$DIR/core/chains/evm/txmgr/confirmer_test.go: `.NewHash()`
$DIR/core/chains/evm/txmgr/confirmer_test.go: `.NewHash()`
$DIR/core/chains/evm/txmgr/confirmer_test.go: `.On("SendTransactionReturnCode", mock.Anything, mock.MatchedBy(func(tx *types.Transaction) bool {
s, err := txmgr.GetGethSignedTx(attempt3.SignedRawTx)
require.NoError(t, err)
return tx.Hash() == s.Hash()
}), fromAddress)`
$DIR/core/chains/evm/txmgr/confirmer_test.go: `.MatchedBy(func(tx *types.Transaction) bool {
s, err := txmgr.GetGethSignedTx(attempt3.SignedRawTx)
require.NoError(t, err)
return tx.Hash() == s.Hash()
})`
$DIR/core/chains/evm/txmgr/confirmer_test.go: `.GetGethSignedTx(attempt3.SignedRawTx)`
$DIR/core/chains/evm/txmgr/confirmer_test.go: `.Hash()`
$DIR/core/chains/evm/txmgr/confirmer_test.go: `.Hash()`
$DIR/core/chains/evm/txmgr/confirmer_test.go: `.Return(commonclient.Successful, nil)`
$DIR/core/chains/evm/txmgr/confirmer_test.go: `.Once()`
$DIR/core/chains/evm/txmgr/confirmer_test.go: `.FindTxWithAttempts(ctx, etx.ID)`
$DIR/core/chains/evm/txmgr/confirmer_test.go: `.MustInsertConfirmedEthTxWithLegacyAttempt(t, txStore, 7, 1, fromAddress)`
$DIR/core/chains/evm/txmgr/confirmer_test.go: `.NewHash()`
$DIR/core/chains/evm/txmgr/confirmer_test.go: `.FindTxWithAttempts(ctx, etx.ID)`
$DIR/core/chains/evm/txmgr/confirmer_test.go: `.NewSqlxDB(t)`
$DIR/core/chains/evm/txmgr/confirmer_test.go: `.NewTestTxStore(t, db)`
$DIR/core/chains/evm/txmgr/confirmer_test.go: `.NewKeyStore(t, db)`
$DIR/core/chains/evm/txmgr/confirmer_test.go: `.Eth()`
$DIR/core/chains/evm/txmgr/confirmer_test.go: `.MustInsertRandomKeyReturningState(t, ethKeyStore)`
$DIR/core/chains/evm/txmgr/confirmer_test.go: `.EVM()`
$DIR/core/chains/evm/txmgr/confirmer_test.go: `.ChainID()`
$DIR/core/chains/evm/txmgr/confirmer_test.go: `.MustInsertUnconfirmedEthTxWithBroadcastLegacyAttempt(t, txStore, 1, fromAddress)`
$DIR/core/chains/evm/txmgr/confirmer_test.go: `.MustInsertUnconfirmedEthTxWithBroadcastLegacyAttempt(t, txStore, 2, fromAddress)`
$DIR/core/chains/evm/txmgr/confirmer_test.go: `.GWei(52)`
$DIR/core/chains/evm/txmgr/confirmer_test.go: `.Run("rebroadcasts one eth_tx if it falls within in nonce range", func(t *testing.T) {
ethClient := testutils.NewEthClientMockWithDefaultChain(t)
ec := newEthConfirmer(t, txStore, ethClient, gconfig, config, ethKeyStore, nil)
ethClient.On("SendTransactionReturnCode", mock.Anything, mock.MatchedBy(func(tx *types.Transaction) bool {
return tx.Nonce() == uint64(*etx1.Sequence) &&
tx.GasPrice().Int64() == gasPriceWei.Legacy.Int64() &&
tx.Gas() == overrideGasLimit &&
reflect.DeepEqual(tx.Data(), etx1.EncodedPayload) &&
tx.To().String() == etx1.ToAddress.String()
}), mock.Anything).Return(commonclient.Successful, nil).Once()
require.NoError(t, ec.ForceRebroadcast(tests.Context(t), []evmtypes.Nonce{1}, gasPriceWei, fromAddress, overrideGasLimit))
})`
$DIR/core/chains/evm/txmgr/confirmer_test.go: `.NewEthClientMockWithDefaultChain(t)`
$DIR/core/chains/evm/txmgr/confirmer_test.go: `.On("SendTransactionReturnCode", mock.Anything, mock.MatchedBy(func(tx *types.Transaction) bool {
return tx.Nonce() == uint64(*etx1.Sequence) &&
tx.GasPrice().Int64() == gasPriceWei.Legacy.Int64() &&
tx.Gas() == overrideGasLimit &&
reflect.DeepEqual(tx.Data(), etx1.EncodedPayload) &&
tx.To().String() == etx1.ToAddress.String()
}), mock.Anything)`
$DIR/core/chains/evm/txmgr/confirmer_test.go: `.MatchedBy(func(tx *types.Transaction) bool {
return tx.Nonce() == uint64(*etx1.Sequence) &&
tx.GasPrice().Int64() == gasPriceWei.Legacy.Int64() &&
tx.Gas() == overrideGasLimit &&
reflect.DeepEqual(tx.Data(), etx1.EncodedPayload) &&
tx.To().String() == etx1.ToAddress.String()
})`
$DIR/core/chains/evm/txmgr/confirmer_test.go: `.Nonce()`
$DIR/core/chains/evm/txmgr/confirmer_test.go: `.GasPrice()`
$DIR/core/chains/evm/txmgr/confirmer_test.go: `.Int64()`
$DIR/core/chains/evm/txmgr/confirmer_test.go: `.Legacy.Int64()`
$DIR/core/chains/evm/txmgr/confirmer_test.go: `.Gas()`
$DIR/core/chains/evm/txmgr/confirmer_test.go: `.DeepEqual(tx.Data(), etx1.EncodedPayload)`
$DIR/core/chains/evm/txmgr/confirmer_test.go: `.Data()`
$DIR/core/chains/evm/txmgr/confirmer_test.go: `.To()`
$DIR/core/chains/evm/txmgr/confirmer_test.go: `.String()`
$DIR/core/chains/evm/txmgr/confirmer_test.go: `.ToAddress.String()`
$DIR/core/chains/evm/txmgr/confirmer_test.go: `.Return(commonclient.Successful, nil)`
$DIR/core/chains/evm/txmgr/confirmer_test.go: `.Once()`
$DIR/core/chains/evm/txmgr/confirmer_test.go: `.Run("uses default gas limit if overrideGasLimit is 0", func(t *testing.T) {
ethClient := testutils.NewEthClientMockWithDefaultChain(t)
ec := newEthConfirmer(t, txStore, ethClient, gconfig, config, ethKeyStore, nil)
ethClient.On("SendTransactionReturnCode", mock.Anything, mock.MatchedBy(func(tx *types.Transaction) bool {
return tx.Nonce() == uint64(*etx1.Sequence) &&
tx.GasPrice().Int64() == gasPriceWei.Legacy.Int64() &&
tx.Gas() == etx1.FeeLimit &&
reflect.DeepEqual(tx.Data(), etx1.EncodedPayload) &&
tx.To().String() == etx1.ToAddress.String()
}), mock.Anything).Return(commonclient.Successful, nil).Once()
require.NoError(t, ec.ForceRebroadcast(tests.Context(t), []evmtypes.Nonce{(1)}, gasPriceWei, fromAddress, 0))
})`
$DIR/core/chains/evm/txmgr/confirmer_test.go: `.NewEthClientMockWithDefaultChain(t)`
$DIR/core/chains/evm/txmgr/confirmer_test.go: `.On("SendTransactionReturnCode", mock.Anything, mock.MatchedBy(func(tx *types.Transaction) bool {
return tx.Nonce() == uint64(*etx1.Sequence) &&
tx.GasPrice().Int64() == gasPriceWei.Legacy.Int64() &&
tx.Gas() == etx1.FeeLimit &&
reflect.DeepEqual(tx.Data(), etx1.EncodedPayload) &&
tx.To().String() == etx1.ToAddress.String()
}), mock.Anything)`
$DIR/core/chains/evm/txmgr/confirmer_test.go: `.MatchedBy(func(tx *types.Transaction) bool {
return tx.Nonce() == uint64(*etx1.Sequence) &&
tx.GasPrice().Int64() == gasPriceWei.Legacy.Int64() &&
tx.Gas() == etx1.FeeLimit &&
reflect.DeepEqual(tx.Data(), etx1.EncodedPayload) &&
tx.To().String() == etx1.ToAddress.String()
})`
$DIR/core/chains/evm/txmgr/confirmer_test.go: `.Nonce()`
$DIR/core/chains/evm/txmgr/confirmer_test.go: `.GasPrice()`
$DIR/core/chains/evm/txmgr/confirmer_test.go: `.Int64()`
$DIR/core/chains/evm/txmgr/confirmer_test.go: `.Legacy.Int64()`
$DIR/core/chains/evm/txmgr/confirmer_test.go: `.Gas()`
$DIR/core/chains/evm/txmgr/confirmer_test.go: `.DeepEqual(tx.Data(), etx1.EncodedPayload)`
$DIR/core/chains/evm/txmgr/confirmer_test.go: `.Data()`
$DIR/core/chains/evm/txmgr/confirmer_test.go: `.To()`
$DIR/core/chains/evm/txmgr/confirmer_test.go: `.String()`
$DIR/core/chains/evm/txmgr/confirmer_test.go: `.ToAddress.String()`
$DIR/core/chains/evm/txmgr/confirmer_test.go: `.Return(commonclient.Successful, nil)`
$DIR/core/chains/evm/txmgr/confirmer_test.go: `.Once()`
$DIR/core/chains/evm/txmgr/confirmer_test.go: `.Run("rebroadcasts several eth_txes in nonce range", func(t *testing.T) {
ethClient := testutils.NewEthClientMockWithDefaultChain(t)
ec := newEthConfirmer(t, txStore, ethClient, gconfig, config, ethKeyStore, nil)
ethClient.On("SendTransactionReturnCode", mock.Anything, mock.MatchedBy(func(tx *types.Transaction) bool {
return tx.Nonce() == uint64(*etx1.Sequence) && tx.GasPrice().Int64() == gasPriceWei.Legacy.Int64() && tx.Gas() == overrideGasLimit
}), mock.Anything).Return(commonclient.Successful, nil).Once()
ethClient.On("SendTransactionReturnCode", mock.Anything, mock.MatchedBy(func(tx *types.Transaction) bool {
return tx.Nonce() == uint64(*etx2.Sequence) && tx.GasPrice().Int64() == gasPriceWei.Legacy.Int64() && tx.Gas() == overrideGasLimit
}), mock.Anything).Return(commonclient.Successful, nil).Once()
require.NoError(t, ec.ForceRebroadcast(tests.Context(t), []evmtypes.Nonce{(1), (2)}, gasPriceWei, fromAddress, overrideGasLimit))
})`
$DIR/core/chains/evm/txmgr/confirmer_test.go: `.NewEthClientMockWithDefaultChain(t)`
$DIR/core/chains/evm/txmgr/confirmer_test.go: `.On("SendTransactionReturnCode", mock.Anything, mock.MatchedBy(func(tx *types.Transaction) bool {
return tx.Nonce() == uint64(*etx1.Sequence) && tx.GasPrice().Int64() == gasPriceWei.Legacy.Int64() && tx.Gas() == overrideGasLimit
}), mock.Anything)`
$DIR/core/chains/evm/txmgr/confirmer_test.go: `.MatchedBy(func(tx *types.Transaction) bool {
return tx.Nonce() == uint64(*etx1.Sequence) && tx.GasPrice().Int64() == gasPriceWei.Legacy.Int64() && tx.Gas() == overrideGasLimit
})`
$DIR/core/chains/evm/txmgr/confirmer_test.go: `.Nonce()`
$DIR/core/chains/evm/txmgr/confirmer_test.go: `.GasPrice()`
$DIR/core/chains/evm/txmgr/confirmer_test.go: `.Int64()`
$DIR/core/chains/evm/txmgr/confirmer_test.go: `.Legacy.Int64()`
$DIR/core/chains/evm/txmgr/confirmer_test.go: `.Gas()`
$DIR/core/chains/evm/txmgr/confirmer_test.go: `.Return(commonclient.Successful, nil)`
$DIR/core/chains/evm/txmgr/confirmer_test.go: `.Once()`
$DIR/core/chains/evm/txmgr/confirmer_test.go: `.On("SendTransactionReturnCode", mock.Anything, mock.MatchedBy(func(tx *types.Transaction) bool {
return tx.Nonce() == uint64(*etx2.Sequence) && tx.GasPrice().Int64() == gasPriceWei.Legacy.Int64() && tx.Gas() == overrideGasLimit
}), mock.Anything)`
$DIR/core/chains/evm/txmgr/confirmer_test.go: `.MatchedBy(func(tx *types.Transaction) bool {
return tx.Nonce() == uint64(*etx2.Sequence) && tx.GasPrice().Int64() == gasPriceWei.Legacy.Int64() && tx.Gas() == overrideGasLimit
})`
$DIR/core/chains/evm/txmgr/confirmer_test.go: `.Nonce()`
$DIR/core/chains/evm/txmgr/confirmer_test.go: `.GasPrice()`
$DIR/core/chains/evm/txmgr/confirmer_test.go: `.Int64()`
$DIR/core/chains/evm/txmgr/confirmer_test.go: `.Legacy.Int64()`
$DIR/core/chains/evm/txmgr/confirmer_test.go: `.Gas()`
$DIR/core/chains/evm/txmgr/confirmer_test.go: `.Return(commonclient.Successful, nil)`
$DIR/core/chains/evm/txmgr/confirmer_test.go: `.Once()`
$DIR/core/chains/evm/txmgr/confirmer_test.go: `.Run("broadcasts zero transactions if eth_tx doesn't exist for that nonce", func(t *testing.T) {
ethClient := testutils.NewEthClientMockWithDefaultChain(t)
ec := newEthConfirmer(t, txStore, ethClient, gconfig, config, ethKeyStore, nil)
ethClient.On("SendTransactionReturnCode", mock.Anything, mock.MatchedBy(func(tx *types.Transaction) bool {
return tx.Nonce() == uint64(1)
}), mock.Anything).Return(commonclient.Successful, nil).Once()
ethClient.On("SendTransactionReturnCode", mock.Anything, mock.MatchedBy(func(tx *types.Transaction) bool {
return tx.Nonce() == uint64(2)
}), mock.Anything).Return(commonclient.Successful, nil).Once()
for i := 3; i <= 5; i++ {
nonce := i
ethClient.On("SendTransactionReturnCode", mock.Anything, mock.MatchedBy(func(tx *types.Transaction) bool {
return tx.Nonce() == uint64(nonce) &&
tx.GasPrice().Int64() == gasPriceWei.Legacy.Int64() &&
tx.Gas() == overrideGasLimit &&
*tx.To() == fromAddress &&
tx.Value().Cmp(big.NewInt(0)) == 0 &&
len(tx.Data()) == 0
}), mock.Anything).Return(commonclient.Successful, nil).Once()
}
nonces := []evmtypes.Nonce{(1), (2), (3), (4), (5)}
require.NoError(t, ec.ForceRebroadcast(tests.Context(t), nonces, gasPriceWei, fromAddress, overrideGasLimit))
})`
$DIR/core/chains/evm/txmgr/confirmer_test.go: `.NewEthClientMockWithDefaultChain(t)`
$DIR/core/chains/evm/txmgr/confirmer_test.go: `.On("SendTransactionReturnCode", mock.Anything, mock.MatchedBy(func(tx *types.Transaction) bool {
return tx.Nonce() == uint64(1)
}), mock.Anything)`
$DIR/core/chains/evm/txmgr/confirmer_test.go: `.MatchedBy(func(tx *types.Transaction) bool {
return tx.Nonce() == uint64(1)
})`
$DIR/core/chains/evm/txmgr/confirmer_test.go: `.Nonce()`
$DIR/core/chains/evm/txmgr/confirmer_test.go: `.Return(commonclient.Successful, nil)`
$DIR/core/chains/evm/txmgr/confirmer_test.go: `.Once()`
$DIR/core/chains/evm/txmgr/confirmer_test.go: `.On("SendTransactionReturnCode", mock.Anything, mock.MatchedBy(func(tx *types.Transaction) bool {
return tx.Nonce() == uint64(2)
}), mock.Anything)`
$DIR/core/chains/evm/txmgr/confirmer_test.go: `.MatchedBy(func(tx *types.Transaction) bool {
return tx.Nonce() == uint64(2)
})`
$DIR/core/chains/evm/txmgr/confirmer_test.go: `.Nonce()`
$DIR/core/chains/evm/txmgr/confirmer_test.go: `.Return(commonclient.Successful, nil)`
$DIR/core/chains/evm/txmgr/confirmer_test.go: `.Once()`
$DIR/core/chains/evm/txmgr/confirmer_test.go: `.On("SendTransactionReturnCode", mock.Anything, mock.MatchedBy(func(tx *types.Transaction) bool {
return tx.Nonce() == uint64(nonce) &&
tx.GasPrice().Int64() == gasPriceWei.Legacy.Int64() &&
tx.Gas() == overrideGasLimit &&
*tx.To() == fromAddress &&
tx.Value().Cmp(big.NewInt(0)) == 0 &&
len(tx.Data()) == 0
}), mock.Anything)`
$DIR/core/chains/evm/txmgr/confirmer_test.go: `.MatchedBy(func(tx *types.Transaction) bool {
return tx.Nonce() == uint64(nonce) &&
tx.GasPrice().Int64() == gasPriceWei.Legacy.Int64() &&
tx.Gas() == overrideGasLimit &&
*tx.To() == fromAddress &&
tx.Value().Cmp(big.NewInt(0)) == 0 &&
len(tx.Data()) == 0
})`
$DIR/core/chains/evm/txmgr/confirmer_test.go: `.Nonce()`
$DIR/core/chains/evm/txmgr/confirmer_test.go: `.GasPrice()`
$DIR/core/chains/evm/txmgr/confirmer_test.go: `.Int64()`
$DIR/core/chains/evm/txmgr/confirmer_test.go: `.Legacy.Int64()`
$DIR/core/chains/evm/txmgr/confirmer_test.go: `.Gas()`
$DIR/core/chains/evm/txmgr/confirmer_test.go: `.To()`
$DIR/core/chains/evm/txmgr/confirmer_test.go: `.Value()`
$DIR/core/chains/evm/txmgr/confirmer_test.go: `.Cmp(big.NewInt(0))`
$DIR/core/chains/evm/txmgr/confirmer_test.go: `.NewInt(0)`
$DIR/core/chains/evm/txmgr/confirmer_test.go: `.Data()`
$DIR/core/chains/evm/txmgr/confirmer_test.go: `.Return(commonclient.Successful, nil)`
$DIR/core/chains/evm/txmgr/confirmer_test.go: `.Once()`
$DIR/core/chains/evm/txmgr/confirmer_test.go: `.NewEthClientMockWithDefaultChain(t)`
$DIR/core/chains/evm/txmgr/confirmer_test.go: `.On("SendTransactionReturnCode", mock.Anything, mock.MatchedBy(func(tx *types.Transaction) bool {
return tx.Nonce() == uint64(0) && tx.GasPrice().Int64() == gasPriceWei.Legacy.Int64() && tx.Gas() == config.EVM().GasEstimator().LimitDefault()
}), mock.Anything)`
$DIR/core/chains/evm/txmgr/confirmer_test.go: `.MatchedBy(func(tx *types.Transaction) bool {
return tx.Nonce() == uint64(0) && tx.GasPrice().Int64() == gasPriceWei.Legacy.Int64() && tx.Gas() == config.EVM().GasEstimator().LimitDefault()
})`
$DIR/core/chains/evm/txmgr/confirmer_test.go: `.Nonce()`
$DIR/core/chains/evm/txmgr/confirmer_test.go: `.GasPrice()`
$DIR/core/chains/evm/txmgr/confirmer_test.go: `.Int64()`
$DIR/core/chains/evm/txmgr/confirmer_test.go: `.Legacy.Int64()`
$DIR/core/chains/evm/txmgr/confirmer_test.go: `.Gas()`
$DIR/core/chains/evm/txmgr/confirmer_test.go: `.EVM()`
$DIR/core/chains/evm/txmgr/confirmer_test.go: `.GasEstimator()`
$DIR/core/chains/evm/txmgr/confirmer_test.go: `.LimitDefault()`
$DIR/core/chains/evm/txmgr/confirmer_test.go: `.Return(commonclient.Successful, nil)`
$DIR/core/chains/evm/txmgr/confirmer_test.go: `.Once()`
$DIR/core/chains/evm/txmgr/confirmer_test.go: `.NewSqlxDB(t)`
$DIR/core/chains/evm/txmgr/confirmer_test.go: `.NewTestGeneralConfig(t)`
$DIR/core/chains/evm/txmgr/confirmer_test.go: `.NewTestTxStore(t, db)`
$DIR/core/chains/evm/txmgr/confirmer_test.go: `.NewKeyStore(t, db)`
$DIR/core/chains/evm/txmgr/confirmer_test.go: `.Eth()`
$DIR/core/chains/evm/txmgr/confirmer_test.go: `.MustInsertRandomKey(t, ethKeyStore)`
$DIR/core/chains/evm/txmgr/confirmer_test.go: `.NewEthClientMockWithDefaultChain(t)`
$DIR/core/chains/evm/txmgr/confirmer_test.go: `.NewChainScopedConfig(t, config)`
$DIR/core/chains/evm/txmgr/confirmer_test.go: `.NewHash()`
$DIR/core/chains/evm/txmgr/confirmer_test.go: `.NewHash()`
$DIR/core/chains/evm/txmgr/confirmer_test.go: `.NewHash()`
$DIR/core/chains/evm/txmgr/confirmer_test.go: `.MustExec(t, db, `SET CONSTRAINTS fk_pipeline_runs_pruning_key DEFERRED`)`
$DIR/core/chains/evm/txmgr/confirmer_test.go: `.MustExec(t, db, `SET CONSTRAINTS pipeline_runs_pipeline_spec_id_fkey DEFERRED`)`
$DIR/core/chains/evm/txmgr/confirmer_test.go: `.Run("doesn't process task runs that are not suspended (possibly already previously resumed)", func(t *testing.T) {
ec := newEthConfirmer(t, txStore, ethClient, config, evmcfg, ethKeyStore, func(context.Context, uuid.UUID, interface{}, error) error {
t.Fatal("No value expected")
return nil
})
run := cltest.MustInsertPipelineRun(t, db)
tr := cltest.MustInsertUnfinishedPipelineTaskRun(t, db, run.ID)
etx := cltest.MustInsertConfirmedEthTxWithLegacyAttempt(t, txStore, 1, 1, fromAddress)
mustInsertEthReceipt(t, txStore, head.Number-minConfirmations, head.Hash, etx.TxAttempts[0].Hash)
// Setting both signal_callback and callback_completed to TRUE to simulate a completed pipeline task
// It would only be in a state past suspended if the resume callback was called and callback_completed was set to TRUE
pgtest.MustExec(t, db, `UPDATE evm.txes SET pipeline_task_run_id = $1, min_confirmations = $2, signal_callback = TRUE, callback_completed = TRUE WHERE id = $3`, &tr.ID, minConfirmations, etx.ID)
err := ec.ResumePendingTaskRuns(tests.Context(t), &head)
require.NoError(t, err)
})`
$DIR/core/chains/evm/txmgr/confirmer_test.go: `.MustInsertPipelineRun(t, db)`
$DIR/core/chains/evm/txmgr/confirmer_test.go: `.MustInsertUnfinishedPipelineTaskRun(t, db, run.ID)`
$DIR/core/chains/evm/txmgr/confirmer_test.go: `.MustInsertConfirmedEthTxWithLegacyAttempt(t, txStore, 1, 1, fromAddress)`
$DIR/core/chains/evm/txmgr/confirmer_test.go: `.MustExec(t, db, `UPDATE evm.txes SET pipeline_task_run_id = $1, min_confirmations = $2, signal_callback = TRUE, callback_completed = TRUE WHERE id = $3`, &tr.ID, minConfirmations, etx.ID)`
$DIR/core/chains/evm/txmgr/confirmer_test.go: `.ResumePendingTaskRuns(tests.Context(t), &head)`
$DIR/core/chains/evm/txmgr/confirmer_test.go: `.Context(t)`
$DIR/core/chains/evm/txmgr/confirmer_test.go: `.Run("doesn't process task runs where the receipt is younger than minConfirmations", func(t *testing.T) {
ec := newEthConfirmer(t, txStore, ethClient, config, evmcfg, ethKeyStore, func(context.Context, uuid.UUID, interface{}, error) error {
t.Fatal("No value expected")
return nil
})
run := cltest.MustInsertPipelineRun(t, db)
tr := cltest.MustInsertUnfinishedPipelineTaskRun(t, db, run.ID)
etx := cltest.MustInsertConfirmedEthTxWithLegacyAttempt(t, txStore, 2, 1, fromAddress)
mustInsertEthReceipt(t, txStore, head.Number, head.Hash, etx.TxAttempts[0].Hash)
pgtest.MustExec(t, db, `UPDATE evm.txes SET pipeline_task_run_id = $1, min_confirmations = $2, signal_callback = TRUE WHERE id = $3`, &tr.ID, minConfirmations, etx.ID)
err := ec.ResumePendingTaskRuns(tests.Context(t), &head)
require.NoError(t, err)
})`
$DIR/core/chains/evm/txmgr/confirmer_test.go: `.MustInsertPipelineRun(t, db)`
$DIR/core/chains/evm/txmgr/confirmer_test.go: `.MustInsertUnfinishedPipelineTaskRun(t, db, run.ID)`
$DIR/core/chains/evm/txmgr/confirmer_test.go: `.MustInsertConfirmedEthTxWithLegacyAttempt(t, txStore, 2, 1, fromAddress)`
$DIR/core/chains/evm/txmgr/confirmer_test.go: `.MustExec(t, db, `UPDATE evm.txes SET pipeline_task_run_id = $1, min_confirmations = $2, signal_callback = TRUE WHERE id = $3`, &tr.ID, minConfirmations, etx.ID)`
$DIR/core/chains/evm/txmgr/confirmer_test.go: `.ResumePendingTaskRuns(tests.Context(t), &head)`
$DIR/core/chains/evm/txmgr/confirmer_test.go: `.Context(t)`
$DIR/core/chains/evm/txmgr/confirmer_test.go: `.Run("processes eth_txes with receipts older than minConfirmations", func(t *testing.T) {
ch := make(chan interface{})
nonce := evmtypes.Nonce(3)
var err error
ec := newEthConfirmer(t, txStore, ethClient, config, evmcfg, ethKeyStore, func(ctx context.Context, id uuid.UUID, value interface{}, thisErr error) error {
err = thisErr
ch <- value
return nil
})
run := cltest.MustInsertPipelineRun(t, db)
tr := cltest.MustInsertUnfinishedPipelineTaskRun(t, db, run.ID)
pgtest.MustExec(t, db, `UPDATE pipeline_runs SET state = 'suspended' WHERE id = $1`, run.ID)
etx := cltest.MustInsertConfirmedEthTxWithLegacyAttempt(t, txStore, int64(nonce), 1, fromAddress)
pgtest.MustExec(t, db, `UPDATE evm.txes SET meta='{"FailOnRevert": true}'`)
receipt := mustInsertEthReceipt(t, txStore, head.Number-minConfirmations, head.Hash, etx.TxAttempts[0].Hash)
pgtest.MustExec(t, db, `UPDATE evm.txes SET pipeline_task_run_id = $1, min_confirmations = $2, signal_callback = TRUE WHERE id = $3`, &tr.ID, minConfirmations, etx.ID)
done := make(chan struct{})
t.Cleanup(func() { <-done })
go func() {
defer close(done)
err2 := ec.ResumePendingTaskRuns(tests.Context(t), &head)
if !assert.NoError(t, err2) {
return
}
// Retrieve Tx to check if callback completed flag was set to true
updateTx, err3 := txStore.FindTxWithSequence(tests.Context(t), fromAddress, nonce)
if assert.NoError(t, err3) {
assert.Equal(t, true, updateTx.CallbackCompleted)
}
}()
select {
case data := <-ch:
assert.NoError(t, err)
require.IsType(t, &evmtypes.Receipt{}, data)
r := data.(*evmtypes.Receipt)
require.Equal(t, receipt.TxHash, r.TxHash)
case <-time.After(time.Second):
t.Fatal("no value received")
}
})`
$DIR/core/chains/evm/txmgr/confirmer_test.go: `.Nonce(3)`
$DIR/core/chains/evm/txmgr/confirmer_test.go: `.MustInsertPipelineRun(t, db)`
$DIR/core/chains/evm/txmgr/confirmer_test.go: `.MustInsertUnfinishedPipelineTaskRun(t, db, run.ID)`
$DIR/core/chains/evm/txmgr/confirmer_test.go: `.MustExec(t, db, `UPDATE pipeline_runs SET state = 'suspended' WHERE id = $1`, run.ID)`
$DIR/core/chains/evm/txmgr/confirmer_test.go: `.MustInsertConfirmedEthTxWithLegacyAttempt(t, txStore, int64(nonce), 1, fromAddress)`
$DIR/core/chains/evm/txmgr/confirmer_test.go: `.MustExec(t, db, `UPDATE evm.txes SET meta='{"FailOnRevert": true}'`)`
$DIR/core/chains/evm/txmgr/confirmer_test.go: `.MustExec(t, db, `UPDATE evm.txes SET pipeline_task_run_id = $1, min_confirmations = $2, signal_callback = TRUE WHERE id = $3`, &tr.ID, minConfirmations, etx.ID)`
$DIR/core/chains/evm/txmgr/confirmer_test.go: `.Cleanup(func() { <-done })`
$DIR/core/chains/evm/txmgr/confirmer_test.go: `.ResumePendingTaskRuns(tests.Context(t), &head)`
$DIR/core/chains/evm/txmgr/confirmer_test.go: `.Context(t)`
$DIR/core/chains/evm/txmgr/confirmer_test.go: `.FindTxWithSequence(tests.Context(t), fromAddress, nonce)`
$DIR/core/chains/evm/txmgr/confirmer_test.go: `.Context(t)`
$DIR/core/chains/evm/txmgr/confirmer_test.go: `.After(time.Second)`
$DIR/core/chains/evm/txmgr/confirmer_test.go: `.MustExec(t, db, `DELETE FROM pipeline_runs`)`
$DIR/core/chains/evm/txmgr/confirmer_test.go: `.Run("processes eth_txes with receipt older than minConfirmations that reverted", func(t *testing.T) {
type data struct {
value any
error
}
ch := make(chan data)
nonce := evmtypes.Nonce(4)
ec := newEthConfirmer(t, txStore, ethClient, config, evmcfg, ethKeyStore, func(ctx context.Context, id uuid.UUID, value interface{}, err error) error {
ch <- data{value, err}
return nil
})
run := cltest.MustInsertPipelineRun(t, db)
tr := cltest.MustInsertUnfinishedPipelineTaskRun(t, db, run.ID)
pgtest.MustExec(t, db, `UPDATE pipeline_runs SET state = 'suspended' WHERE id = $1`, run.ID)
etx := cltest.MustInsertConfirmedEthTxWithLegacyAttempt(t, txStore, int64(nonce), 1, fromAddress)
pgtest.MustExec(t, db, `UPDATE evm.txes SET meta='{"FailOnRevert": true}'`)
// receipt is not passed through as a value since it reverted and caused an error
mustInsertRevertedEthReceipt(t, txStore, head.Number-minConfirmations, head.Hash, etx.TxAttempts[0].Hash)
pgtest.MustExec(t, db, `UPDATE evm.txes SET pipeline_task_run_id = $1, min_confirmations = $2, signal_callback = TRUE WHERE id = $3`, &tr.ID, minConfirmations, etx.ID)
done := make(chan struct{})
t.Cleanup(func() { <-done })
go func() {
defer close(done)
err2 := ec.ResumePendingTaskRuns(tests.Context(t), &head)
if !assert.NoError(t, err2) {
return
}
// Retrieve Tx to check if callback completed flag was set to true
updateTx, err3 := txStore.FindTxWithSequence(tests.Context(t), fromAddress, nonce)
if assert.NoError(t, err3) {
assert.Equal(t, true, updateTx.CallbackCompleted)
}
}()
select {
case data := <-ch:
assert.Error(t, data.error)
assert.EqualError(t, data.error, fmt.Sprintf("transaction %s reverted on-chain", etx.TxAttempts[0].Hash.String()))
assert.Nil(t, data.value)
case <-time.After(tests.WaitTimeout(t)):
t.Fatal("no value received")
}
})`
$DIR/core/chains/evm/txmgr/confirmer_test.go: `.Nonce(4)`
$DIR/core/chains/evm/txmgr/confirmer_test.go: `.MustInsertPipelineRun(t, db)`
$DIR/core/chains/evm/txmgr/confirmer_test.go: `.MustInsertUnfinishedPipelineTaskRun(t, db, run.ID)`
$DIR/core/chains/evm/txmgr/confirmer_test.go: `.MustExec(t, db, `UPDATE pipeline_runs SET state = 'suspended' WHERE id = $1`, run.ID)`
$DIR/core/chains/evm/txmgr/confirmer_test.go: `.MustInsertConfirmedEthTxWithLegacyAttempt(t, txStore, int64(nonce), 1, fromAddress)`
$DIR/core/chains/evm/txmgr/confirmer_test.go: `.MustExec(t, db, `UPDATE evm.txes SET meta='{"FailOnRevert": true}'`)`
$DIR/core/chains/evm/txmgr/confirmer_test.go: `.MustExec(t, db, `UPDATE evm.txes SET pipeline_task_run_id = $1, min_confirmations = $2, signal_callback = TRUE WHERE id = $3`, &tr.ID, minConfirmations, etx.ID)`
$DIR/core/chains/evm/txmgr/confirmer_test.go: `.Cleanup(func() { <-done })`
$DIR/core/chains/evm/txmgr/confirmer_test.go: `.ResumePendingTaskRuns(tests.Context(t), &head)`
$DIR/core/chains/evm/txmgr/confirmer_test.go: `.Context(t)`
$DIR/core/chains/evm/txmgr/confirmer_test.go: `.FindTxWithSequence(tests.Context(t), fromAddress, nonce)`
$DIR/core/chains/evm/txmgr/confirmer_test.go: `.Context(t)`
$DIR/core/chains/evm/txmgr/confirmer_test.go: `.After(tests.WaitTimeout(t))`
$DIR/core/chains/evm/txmgr/confirmer_test.go: `.WaitTimeout(t)`
$DIR/core/chains/evm/txmgr/confirmer_test.go: `.Nonce(5)`
$DIR/core/chains/evm/txmgr/confirmer_test.go: `.New("error")`
$DIR/core/chains/evm/txmgr/confirmer_test.go: `.MustInsertPipelineRun(t, db)`
$DIR/core/chains/evm/txmgr/confirmer_test.go: `.MustInsertUnfinishedPipelineTaskRun(t, db, run.ID)`
$DIR/core/chains/evm/txmgr/confirmer_test.go: `.MustInsertConfirmedEthTxWithLegacyAttempt(t, txStore, int64(nonce), 1, fromAddress)`
$DIR/core/chains/evm/txmgr/confirmer_test.go: `.MustExec(t, db, `UPDATE evm.txes SET pipeline_task_run_id = $1, min_confirmations = $2, signal_callback = TRUE WHERE id = $3`, &tr.ID, minConfirmations, etx.ID)`
$DIR/core/chains/evm/txmgr/confirmer_test.go: `.ResumePendingTaskRuns(tests.Context(t), &head)`
$DIR/core/chains/evm/txmgr/confirmer_test.go: `.Context(t)`
$DIR/core/chains/evm/txmgr/confirmer_test.go: `.FindTxWithSequence(tests.Context(t), fromAddress, nonce)`
$DIR/core/chains/evm/txmgr/confirmer_test.go: `.Context(t)`
$DIR/core/chains/evm/txmgr/confirmer_test.go: `.NewSqlxDB(t)`
$DIR/core/chains/evm/txmgr/confirmer_test.go: `.NewTestTxStore(t, db)`
$DIR/core/chains/evm/txmgr/confirmer_test.go: `.NewKeyStore(t, db)`
$DIR/core/chains/evm/txmgr/confirmer_test.go: `.Eth()`
$DIR/core/chains/evm/txmgr/confirmer_test.go: `.MustInsertRandomKey(t, ethKeyStore)`
$DIR/core/chains/evm/txmgr/confirmer_test.go: `.NewEthClientMockWithDefaultChain(t)`
$DIR/core/chains/evm/txmgr/confirmer_test.go: `.On("SendTransactionReturnCode", mock.Anything, mock.Anything, fromAddress)`
$DIR/core/chains/evm/txmgr/confirmer_test.go: `.Return(commonclient.Successful, nil)`
$DIR/core/chains/evm/txmgr/confirmer_test.go: `.Once()`
$DIR/core/chains/evm/txmgr/confirmer_test.go: `.Test(t)`
$DIR/core/chains/evm/txmgr/confirmer_test.go: `.NewEvmFeeEstimator(t)`
$DIR/core/chains/evm/txmgr/confirmer_test.go: `.GWei(30)`
$DIR/core/chains/evm/txmgr/confirmer_test.go: `.On("GetFee", mock.Anything, []byte{}, uint64(0), mock.Anything)`
$DIR/core/chains/evm/txmgr/confirmer_test.go: `.Return(fee, uint64(0), nil)`
$DIR/core/chains/evm/txmgr/confirmer_test.go: `.On("BumpFee", mock.Anything, mock.Anything, mock.Anything, mock.Anything, mock.Anything)`
$DIR/core/chains/evm/txmgr/confirmer_test.go: `.Return(bumpedFee, uint64(10_000), nil)`
$DIR/core/chains/evm/txmgr/confirmer_test.go: `.NewGeneralConfig(t, func(c *chainlink.Config, s *chainlink.Secrets) {
c.EVM[0].GasEstimator.LimitDefault = ptr(limitDefault)
c.EVM[0].Transactions.AutoPurge.Enabled = ptr(true)
c.EVM[0].Transactions.AutoPurge.Threshold = ptr(autoPurgeThreshold)
c.EVM[0].Transactions.AutoPurge.MinAttempts = ptr(autoPurgeMinAttempts)
})`
$DIR/core/chains/evm/txmgr/confirmer_test.go: `.NewChainScopedConfig(t, cfg)`
$DIR/core/chains/evm/txmgr/confirmer_test.go: `.EVM()`
$DIR/core/chains/evm/txmgr/confirmer_test.go: `.GasEstimator()`
$DIR/core/chains/evm/txmgr/confirmer_test.go: `.NewEvmTxAttemptBuilder(*ethClient.ConfiguredChainID(), ge, ethKeyStore, feeEstimator)`
$DIR/core/chains/evm/txmgr/confirmer_test.go: `.ConfiguredChainID()`
$DIR/core/chains/evm/txmgr/confirmer_test.go: `.NewStuckTxDetector(lggr, testutils.FixtureChainID, "", assets.NewWei(assets.NewEth(100).ToInt()), evmcfg.EVM().Transactions().AutoPurge(), feeEstimator, txStore, ethClient)`
$DIR/core/chains/evm/txmgr/confirmer_test.go: `.NewWei(assets.NewEth(100).ToInt())`
$DIR/core/chains/evm/txmgr/confirmer_test.go: `.NewEth(100)`
$DIR/core/chains/evm/txmgr/confirmer_test.go: `.ToInt()`
$DIR/core/chains/evm/txmgr/confirmer_test.go: `.EVM()`
$DIR/core/chains/evm/txmgr/confirmer_test.go: `.Transactions()`
$DIR/core/chains/evm/txmgr/confirmer_test.go: `.AutoPurge()`
$DIR/core/chains/evm/txmgr/confirmer_test.go: `.NewEvmConfirmer(txStore, txmgr.NewEvmTxmClient(ethClient, nil), txmgr.NewEvmTxmConfig(evmcfg.EVM()), txmgr.NewEvmTxmFeeConfig(ge), evmcfg.EVM().Transactions(), cfg.Database(), ethKeyStore, txBuilder, lggr, stuckTxDetector)`
$DIR/core/chains/evm/txmgr/confirmer_test.go: `.NewEvmTxmClient(ethClient, nil)`
$DIR/core/chains/evm/txmgr/confirmer_test.go: `.NewEvmTxmConfig(evmcfg.EVM())`
$DIR/core/chains/evm/txmgr/confirmer_test.go: `.EVM()`
$DIR/core/chains/evm/txmgr/confirmer_test.go: `.NewEvmTxmFeeConfig(ge)`
$DIR/core/chains/evm/txmgr/confirmer_test.go: `.EVM()`
$DIR/core/chains/evm/txmgr/confirmer_test.go: `.Transactions()`
$DIR/core/chains/evm/txmgr/confirmer_test.go: `.Database()`
$DIR/core/chains/evm/txmgr/confirmer_test.go: `.Run(t, ec)`
$DIR/core/chains/evm/txmgr/confirmer_test.go: `.Context(t)`
$DIR/core/chains/evm/txmgr/confirmer_test.go: `.Add(oneGwei)`
$DIR/core/chains/evm/txmgr/confirmer_test.go: `.NewHash()`
$DIR/core/chains/evm/txmgr/confirmer_test.go: `.On("SequenceAt", mock.Anything, mock.Anything, mock.Anything)`
$DIR/core/chains/evm/txmgr/confirmer_test.go: `.Return(evmtypes.Nonce(0), nil)`
$DIR/core/chains/evm/txmgr/confirmer_test.go: `.Nonce(0)`
$DIR/core/chains/evm/txmgr/confirmer_test.go: `.Once()`
$DIR/core/chains/evm/txmgr/confirmer_test.go: `.On("BatchCallContext", mock.Anything, mock.Anything)`
$DIR/core/chains/evm/txmgr/confirmer_test.go: `.Return(nil)`
$DIR/core/chains/evm/txmgr/confirmer_test.go: `.Once()`
$DIR/core/chains/evm/txmgr/confirmer_test.go: `.ProcessHead(ctx, &head)`
$DIR/core/chains/evm/txmgr/confirmer_test.go: `.FindTxWithAttempts(ctx, tx.ID)`
$DIR/core/chains/evm/txmgr/confirmer_test.go: `.NewHash()`
$DIR/core/chains/evm/txmgr/confirmer_test.go: `.On("SequenceAt", mock.Anything, mock.Anything, mock.Anything)`
$DIR/core/chains/evm/txmgr/confirmer_test.go: `.Return(evmtypes.Nonce(1), nil)`
$DIR/core/chains/evm/txmgr/confirmer_test.go: `.Nonce(1)`
$DIR/core/chains/evm/txmgr/confirmer_test.go: `.On("BatchCallContext", mock.Anything, mock.MatchedBy(func(b []rpc.BatchElem) bool {
return len(b) == 4 && cltest.BatchElemMatchesParams(b[0], latestAttempt.Hash, "eth_getTransactionReceipt")
}))`
$DIR/core/chains/evm/txmgr/confirmer_test.go: `.MatchedBy(func(b []rpc.BatchElem) bool {
return len(b) == 4 && cltest.BatchElemMatchesParams(b[0], latestAttempt.Hash, "eth_getTransactionReceipt")
})`
$DIR/core/chains/evm/txmgr/confirmer_test.go: `.BatchElemMatchesParams(b[0], latestAttempt.Hash, "eth_getTransactionReceipt")`
$DIR/core/chains/evm/txmgr/confirmer_test.go: `.Return(nil)`
$DIR/core/chains/evm/txmgr/confirmer_test.go: `.Run(func(args mock.Arguments) {
elems := args.Get(1).([]rpc.BatchElem)
// First transaction confirmed
*(elems[0].Result.(*evmtypes.Receipt)) = evmtypes.Receipt{
TxHash: latestAttempt.Hash,
BlockHash: testutils.NewHash(),
BlockNumber: big.NewInt(blockNum + 1),
TransactionIndex: uint(1),
Status: uint64(1),
}
})`
$DIR/core/chains/evm/txmgr/confirmer_test.go: `.Get(1)`
$DIR/core/chains/evm/txmgr/confirmer_test.go: `.NewHash()`
$DIR/core/chains/evm/txmgr/confirmer_test.go: `.NewInt(blockNum + 1)`
$DIR/core/chains/evm/txmgr/confirmer_test.go: `.Once()`
$DIR/core/chains/evm/txmgr/confirmer_test.go: `.ProcessHead(ctx, &head)`
$DIR/core/chains/evm/txmgr/confirmer_test.go: `.FindTxWithAttempts(ctx, tx.ID)`
$DIR/core/chains/evm/txmgr/evm_tx_store_test.go: `cltest.MustInsertConfirmedEthTxWithLegacyAttempt(t, txStore, 0, 1, from)`
$DIR/core/chains/evm/txmgr/evm_tx_store_test.go: `attempt.State = txmgrtypes.TxAttemptBroadcast`
$DIR/core/chains/evm/txmgr/evm_tx_store_test.go: `attempt.TxFee = gas.EvmFee{Legacy: assets.NewWeiI(3)}`
$DIR/core/chains/evm/txmgr/evm_tx_store_test.go: `attempt.BroadcastBeforeBlockNum = &blockNum`
$DIR/core/chains/evm/txmgr/evm_tx_store_test.go: `mustCreateUnstartedGeneratedTx(t, txStore, from, testutils.FixtureChainID)`
$DIR/core/chains/evm/txmgr/evm_tx_store_test.go: `txs, count, err = txStore.TransactionsWithAttempts(ctx, 0, 1)`
$DIR/core/chains/evm/txmgr/evm_tx_store_test.go: `cltest.MustInsertConfirmedEthTxWithLegacyAttempt(t, txStore, 0, 1, from)`
$DIR/core/chains/evm/txmgr/evm_tx_store_test.go: `attempt.State = txmgrtypes.TxAttemptBroadcast`
$DIR/core/chains/evm/txmgr/evm_tx_store_test.go: `attempt.TxFee = gas.EvmFee{Legacy: assets.NewWeiI(3)}`
$DIR/core/chains/evm/txmgr/evm_tx_store_test.go: `attempt.BroadcastBeforeBlockNum = &blockNum`
$DIR/core/chains/evm/txmgr/evm_tx_store_test.go: `mustCreateUnstartedGeneratedTx(t, txStore, from, testutils.FixtureChainID)`
$DIR/core/chains/evm/txmgr/evm_tx_store_test.go: `t.Run("InsertTx", func(t *testing.T) {
etx = cltest.NewEthTx(fromAddress)
require.NoError(t, orm.InsertTx(ctx, &etx))
assert.Greater(t, int(etx.ID), 0)
cltest.AssertCount(t, db, "evm.txes", 1)
})`
$DIR/core/chains/evm/txmgr/evm_tx_store_test.go: `etx = cltest.NewEthTx(fromAddress)`
$DIR/core/chains/evm/txmgr/evm_tx_store_test.go: `cltest.AssertCount(t, db, "evm.txes", 1)`
$DIR/core/chains/evm/txmgr/evm_tx_store_test.go: `t.Run("InsertTxAttempt", func(t *testing.T) {
attemptD = cltest.NewDynamicFeeEthTxAttempt(t, etx.ID)
require.NoError(t, orm.InsertTxAttempt(ctx, &attemptD))
assert.Greater(t, int(attemptD.ID), 0)
cltest.AssertCount(t, db, "evm.tx_attempts", 1)
attemptL = cltest.NewLegacyEthTxAttempt(t, etx.ID)
attemptL.State = txmgrtypes.TxAttemptBroadcast
attemptL.TxFee = gas.EvmFee{Legacy: assets.NewWeiI(42)}
require.NoError(t, orm.InsertTxAttempt(ctx, &attemptL))
assert.Greater(t, int(attemptL.ID), 0)
cltest.AssertCount(t, db, "evm.tx_attempts", 2)
})`
$DIR/core/chains/evm/txmgr/evm_tx_store_test.go: `attemptD = cltest.NewDynamicFeeEthTxAttempt(t, etx.ID)`
$DIR/core/chains/evm/txmgr/evm_tx_store_test.go: `cltest.AssertCount(t, db, "evm.tx_attempts", 1)`
$DIR/core/chains/evm/txmgr/evm_tx_store_test.go: `attemptL = cltest.NewLegacyEthTxAttempt(t, etx.ID)`
$DIR/core/chains/evm/txmgr/evm_tx_store_test.go: `attemptL.State = txmgrtypes.TxAttemptBroadcast`
$DIR/core/chains/evm/txmgr/evm_tx_store_test.go: `attemptL.TxFee = gas.EvmFee{Legacy: assets.NewWeiI(42)}`
$DIR/core/chains/evm/txmgr/evm_tx_store_test.go: `cltest.AssertCount(t, db, "evm.tx_attempts", 2)`
$DIR/core/chains/evm/txmgr/evm_tx_store_test.go: `t.Run("InsertReceipt", func(t *testing.T) {
r = newEthReceipt(42, utils.NewHash(), attemptD.Hash, 0x1)
id, err := orm.InsertReceipt(ctx, &r.Receipt)
r.ID = id
require.NoError(t, err)
assert.Greater(t, int(r.ID), 0)
cltest.AssertCount(t, db, "evm.receipts", 1)
})`
$DIR/core/chains/evm/txmgr/evm_tx_store_test.go: `r = newEthReceipt(42, utils.NewHash(), attemptD.Hash, 0x1)`
$DIR/core/chains/evm/txmgr/evm_tx_store_test.go: `r.ID = id`
$DIR/core/chains/evm/txmgr/evm_tx_store_test.go: `cltest.AssertCount(t, db, "evm.receipts", 1)`
$DIR/core/chains/evm/txmgr/evm_tx_store_test.go: `t.Run("FindTxWithAttempts", func(t *testing.T) {
var err error
etx, err = orm.FindTxWithAttempts(ctx, etx.ID)
require.NoError(t, err)
require.Len(t, etx.TxAttempts, 2)
assert.Equal(t, etx.TxAttempts[0].ID, attemptD.ID)
assert.Equal(t, etx.TxAttempts[1].ID, attemptL.ID)
require.Len(t, etx.TxAttempts[0].Receipts, 1)
require.Len(t, etx.TxAttempts[1].Receipts, 0)
assert.Equal(t, r.BlockHash, etx.TxAttempts[0].Receipts[0].GetBlockHash())
})`
$DIR/core/chains/evm/txmgr/evm_tx_store_test.go: `etx, err = orm.FindTxWithAttempts(ctx, etx.ID)`
$DIR/core/chains/evm/txmgr/evm_tx_store_test.go: `t.Run("FindTxByHash", func(t *testing.T) {
foundEtx, err := orm.FindTxByHash(ctx, attemptD.Hash)
require.NoError(t, err)
assert.Equal(t, etx.ID, foundEtx.ID)
assert.Equal(t, etx.ChainID, foundEtx.ChainID)
})`
$DIR/core/chains/evm/txmgr/evm_tx_store_test.go: `attempt.State = txmgrtypes.TxAttemptBroadcast`
$DIR/core/chains/evm/txmgr/evm_tx_store_test.go: `attempt.TxFee = gas.EvmFee{Legacy: assets.NewWeiI(3)}`
$DIR/core/chains/evm/txmgr/evm_tx_store_test.go: `attempt.BroadcastBeforeBlockNum = &blockNum`
$DIR/core/chains/evm/txmgr/evm_tx_store_test.go: `mustCreateUnstartedGeneratedTx(t, orm, from, testutils.FixtureChainID)`
$DIR/core/chains/evm/txmgr/evm_tx_store_test.go: `cltest.MustInsertUnconfirmedEthTx(t, orm, 3, from)`
$DIR/core/chains/evm/txmgr/evm_tx_store_test.go: `cltest.MustInsertUnconfirmedEthTxWithBroadcastLegacyAttempt(t, orm, 4, from)`
$DIR/core/chains/evm/txmgr/evm_tx_store_test.go: `err = db.Get(&count, `SELECT count(*) FROM evm.txes`)`
$DIR/core/chains/evm/txmgr/evm_tx_store_test.go: `err = db.Get(&count, `SELECT count(*) FROM evm.tx_attempts`)`
$DIR/core/chains/evm/txmgr/evm_tx_store_test.go: `t.Run("returns nothing if there are no transactions", func(t *testing.T) {
olderThan := time.Now()
attempts, err := txStore.FindTxAttemptsRequiringResend(tests.Context(t), olderThan, 10, testutils.FixtureChainID, fromAddress)
require.NoError(t, err)
assert.Len(t, attempts, 0)
})`
$DIR/core/chains/evm/txmgr/evm_tx_store_test.go: `attempt1_2.TxFee = gas.EvmFee{Legacy: assets.NewWeiI(10)}`
$DIR/core/chains/evm/txmgr/evm_tx_store_test.go: `attempt3_2.TxFee = gas.EvmFee{Legacy: assets.NewWeiI(10)}`
$DIR/core/chains/evm/txmgr/evm_tx_store_test.go: `attempt4_2.TxFee.DynamicTipCap = assets.NewWeiI(10)`
$DIR/core/chains/evm/txmgr/evm_tx_store_test.go: `attempt4_2.TxFee.DynamicFeeCap = assets.NewWeiI(20)`
$DIR/core/chains/evm/txmgr/evm_tx_store_test.go: `attempt4_2.State = txmgrtypes.TxAttemptBroadcast`
$DIR/core/chains/evm/txmgr/evm_tx_store_test.go: `attempt4_4.TxFee.DynamicTipCap = assets.NewWeiI(30)`
$DIR/core/chains/evm/txmgr/evm_tx_store_test.go: `attempt4_4.TxFee.DynamicFeeCap = assets.NewWeiI(40)`
$DIR/core/chains/evm/txmgr/evm_tx_store_test.go: `attempt4_4.State = txmgrtypes.TxAttemptBroadcast`
$DIR/core/chains/evm/txmgr/evm_tx_store_test.go: `attempt4_3.TxFee.DynamicTipCap = assets.NewWeiI(20)`
$DIR/core/chains/evm/txmgr/evm_tx_store_test.go: `attempt4_3.TxFee.DynamicFeeCap = assets.NewWeiI(30)`
$DIR/core/chains/evm/txmgr/evm_tx_store_test.go: `attempt4_3.State = txmgrtypes.TxAttemptBroadcast`
$DIR/core/chains/evm/txmgr/evm_tx_store_test.go: `t.Run("returns nothing if there are transactions from a different key", func(t *testing.T) {
olderThan := time.Now()
attempts, err := txStore.FindTxAttemptsRequiringResend(tests.Context(t), olderThan, 10, testutils.FixtureChainID, utils.RandomAddress())
require.NoError(t, err)
assert.Len(t, attempts, 0)
})`
$DIR/core/chains/evm/txmgr/evm_tx_store_test.go: `t.Run("returns the highest price attempt for each transaction that was last broadcast before or on the given time", func(t *testing.T) {
olderThan := time.Unix(1616509200, 0)
attempts, err := txStore.FindTxAttemptsRequiringResend(tests.Context(t), olderThan, 0, testutils.FixtureChainID, fromAddress)
require.NoError(t, err)
assert.Len(t, attempts, 2)
assert.Equal(t, attempt1_2.ID, attempts[0].ID)
assert.Equal(t, etxs[1].TxAttempts[0].ID, attempts[1].ID)
})`
$DIR/core/chains/evm/txmgr/evm_tx_store_test.go: `t.Run("returns the highest price attempt for EIP-1559 transactions", func(t *testing.T) {
olderThan := time.Unix(1616509400, 0)
attempts, err := txStore.FindTxAttemptsRequiringResend(tests.Context(t), olderThan, 0, testutils.FixtureChainID, fromAddress)
require.NoError(t, err)
assert.Len(t, attempts, 4)
assert.Equal(t, attempt4_4.ID, attempts[3].ID)
})`
$DIR/core/chains/evm/txmgr/evm_tx_store_test.go: `t.Run("does not update when broadcast_at is NULL", func(t *testing.T) {
t.Parallel()
ctx := tests.Context(t)
etx := mustCreateUnstartedGeneratedTx(t, orm, fromAddress, testutils.FixtureChainID)
var nullTime *time.Time
assert.Equal(t, nullTime, etx.BroadcastAt)
currTime := time.Now()
err := orm.UpdateBroadcastAts(tests.Context(t), currTime, []int64{etx.ID})
require.NoError(t, err)
etx, err = orm.FindTxWithAttempts(ctx, etx.ID)
require.NoError(t, err)
assert.Equal(t, nullTime, etx.BroadcastAt)
})`
$DIR/core/chains/evm/txmgr/evm_tx_store_test.go: `etx, err = orm.FindTxWithAttempts(ctx, etx.ID)`
$DIR/core/chains/evm/txmgr/evm_tx_store_test.go: `etx.Sequence = new(evmtypes.Nonce)`
$DIR/core/chains/evm/txmgr/evm_tx_store_test.go: `etx.State = txmgrcommon.TxUnconfirmed`
$DIR/core/chains/evm/txmgr/evm_tx_store_test.go: `etx.BroadcastAt = &time1`
$DIR/core/chains/evm/txmgr/evm_tx_store_test.go: `etx.InitialBroadcastAt = &time1`
$DIR/core/chains/evm/txmgr/evm_tx_store_test.go: `err = orm.UpdateBroadcastAts(ctx, time2, []int64{etx.ID})`
$DIR/core/chains/evm/txmgr/evm_tx_store_test.go: `etx, err = orm.FindTxWithAttempts(ctx, etx.ID)`
$DIR/core/chains/evm/txmgr/evm_tx_store_test.go: `t.Run("saves block num to unconfirmed evm.tx_attempts without one", func(t *testing.T) {
// Do the thing
require.NoError(t, txStore.SetBroadcastBeforeBlockNum(tests.Context(t), headNum, chainID))
etx, err = txStore.FindTxWithAttempts(ctx, etx.ID)
require.NoError(t, err)
require.Len(t, etx.TxAttempts, 1)
attempt := etx.TxAttempts[0]
assert.Equal(t, int64(9000), *attempt.BroadcastBeforeBlockNum)
})`
$DIR/core/chains/evm/txmgr/evm_tx_store_test.go: `etx, err = txStore.FindTxWithAttempts(ctx, etx.ID)`
$DIR/core/chains/evm/txmgr/evm_tx_store_test.go: `t.Run("does not change evm.tx_attempts that already have BroadcastBeforeBlockNum set", func(t *testing.T) {
n := int64(42)
attempt := newBroadcastLegacyEthTxAttempt(t, etx.ID, 2)
attempt.BroadcastBeforeBlockNum = &n
require.NoError(t, txStore.InsertTxAttempt(ctx, &attempt))
// Do the thing
require.NoError(t, txStore.SetBroadcastBeforeBlockNum(tests.Context(t), headNum, chainID))
etx, err = txStore.FindTxWithAttempts(ctx, etx.ID)
require.NoError(t, err)
require.Len(t, etx.TxAttempts, 2)
attempt = etx.TxAttempts[0]
assert.Equal(t, int64(42), *attempt.BroadcastBeforeBlockNum)
})`
$DIR/core/chains/evm/txmgr/evm_tx_store_test.go: `attempt.BroadcastBeforeBlockNum = &n`
$DIR/core/chains/evm/txmgr/evm_tx_store_test.go: `etx, err = txStore.FindTxWithAttempts(ctx, etx.ID)`
$DIR/core/chains/evm/txmgr/evm_tx_store_test.go: `attempt = etx.TxAttempts[0]`
$DIR/core/chains/evm/txmgr/evm_tx_store_test.go: `etxThisChain, err = txStore.FindTxWithAttempts(ctx, etxThisChain.ID)`
$DIR/core/chains/evm/txmgr/evm_tx_store_test.go: `etxOtherChain, err = txStore.FindTxWithAttempts(ctx, etxOtherChain.ID)`
$DIR/core/chains/evm/txmgr/evm_tx_store_test.go: `attempt = etxOtherChain.TxAttempts[0]`
$DIR/core/chains/evm/txmgr/evm_tx_store_test.go: `etx0, err = txStore.FindTxWithAttempts(ctx, etx0.ID)`
$DIR/core/chains/evm/txmgr/evm_tx_store_test.go: `etx0_attempt.BroadcastBeforeBlockNum = &etx0_blocknum`
$DIR/core/chains/evm/txmgr/evm_tx_store_test.go: `etx0, err = txStore.FindTxWithAttempts(ctx, etx0.ID)`
$DIR/core/chains/evm/txmgr/evm_tx_store_test.go: `t.Run("loads eth transaction", func(t *testing.T) {
// insert etx with attempt
etx := cltest.MustInsertUnconfirmedEthTxWithBroadcastLegacyAttempt(t, txStore, int64(7), fromAddress)
// create unloaded attempt
unloadedAttempt := txmgr.TxAttempt{TxID: etx.ID}
// uninitialized EthTx
assert.Equal(t, int64(0), unloadedAttempt.Tx.ID)
attempts := []txmgr.TxAttempt{unloadedAttempt}
err := txStore.PreloadTxes(tests.Context(t), attempts)
require.NoError(t, err)
assert.Equal(t, etx.ID, attempts[0].Tx.ID)
})`
$DIR/core/chains/evm/txmgr/evm_tx_store_test.go: `pgtest.MustExec(t, db, `SET CONSTRAINTS fk_pipeline_runs_pruning_key DEFERRED`)`
$DIR/core/chains/evm/txmgr/evm_tx_store_test.go: `pgtest.MustExec(t, db, `SET CONSTRAINTS pipeline_runs_pipeline_spec_id_fkey DEFERRED`)`
$DIR/core/chains/evm/txmgr/evm_tx_store_test.go: `pgtest.MustExec(t, db, `UPDATE pipeline_runs SET state = 'suspended' WHERE id = $1`, run1.ID)`
$DIR/core/chains/evm/txmgr/evm_tx_store_test.go: `pgtest.MustExec(t, db, `UPDATE evm.txes SET meta='{"FailOnRevert": true}'`)`
$DIR/core/chains/evm/txmgr/evm_tx_store_test.go: `mustInsertEthReceipt(t, txStore, head.Number-minConfirmations, head.Hash, attempt1.Hash)`
$DIR/core/chains/evm/txmgr/evm_tx_store_test.go: `pgtest.MustExec(t, db, `UPDATE evm.txes SET pipeline_task_run_id = $1, min_confirmations = $2, signal_callback = TRUE WHERE id = $3`, &tr1.ID, minConfirmations, etx1.ID)`
$DIR/core/chains/evm/txmgr/evm_tx_store_test.go: `pgtest.MustExec(t, db, `UPDATE evm.txes SET meta='{"FailOnRevert": false}'`)`
$DIR/core/chains/evm/txmgr/evm_tx_store_test.go: `mustInsertEthReceipt(t, txStore, head.Number-minConfirmations, head.Hash, attempt2.Hash)`
$DIR/core/chains/evm/txmgr/evm_tx_store_test.go: `pgtest.MustExec(t, db, `UPDATE evm.txes SET pipeline_task_run_id = $1, min_confirmations = $2, signal_callback = TRUE, callback_completed = TRUE WHERE id = $3`, &tr2.ID, minConfirmations, etx2.ID)`
$DIR/core/chains/evm/txmgr/evm_tx_store_test.go: `pgtest.MustExec(t, db, `UPDATE pipeline_runs SET state = 'suspended' WHERE id = $1`, run3.ID)`
$DIR/core/chains/evm/txmgr/evm_tx_store_test.go: `pgtest.MustExec(t, db, `UPDATE evm.txes SET meta='{"FailOnRevert": false}'`)`
$DIR/core/chains/evm/txmgr/evm_tx_store_test.go: `mustInsertEthReceipt(t, txStore, head.Number, head.Hash, attempt3.Hash)`
$DIR/core/chains/evm/txmgr/evm_tx_store_test.go: `pgtest.MustExec(t, db, `UPDATE evm.txes SET pipeline_task_run_id = $1, min_confirmations = $2, signal_callback = TRUE WHERE id = $3`, &tr3.ID, minConfirmations, etx3.ID)`
$DIR/core/chains/evm/txmgr/evm_tx_store_test.go: `mustInsertEthReceipt(t, txStore, head.Number, head.Hash, attempt4.Hash)`
$DIR/core/chains/evm/txmgr/evm_tx_store_test.go: `pgtest.MustExec(t, db, `UPDATE evm.txes SET min_confirmations = $1 WHERE id = $2`, minConfirmations, etx4.ID)`
$DIR/core/chains/evm/txmgr/evm_tx_store_test.go: `pgtest.MustExec(t, db, `UPDATE evm.txes SET min_confirmations = $1 WHERE id = $2`, minConfirmations, etx5.ID)`
$DIR/core/chains/evm/txmgr/evm_tx_store_test.go: `t.Run("returns nil if no results", func(t *testing.T) {
idempotencyKey := "777"
etx, err := txStore.FindTxWithIdempotencyKey(tests.Context(t), idempotencyKey, big.NewInt(0))
require.NoError(t, err)
assert.Nil(t, etx)
})`
$DIR/core/chains/evm/txmgr/evm_tx_store_test.go: `cfg.EVM().ChainID()`
$DIR/core/chains/evm/txmgr/evm_tx_store_test.go: `t.Run("returns nil if no results", func(t *testing.T) {
etx, err := txStore.FindTxWithSequence(tests.Context(t), fromAddress, evmtypes.Nonce(777))
require.NoError(t, err)
assert.Nil(t, etx)
})`
$DIR/core/chains/evm/txmgr/evm_tx_store_test.go: `err = txStore.UpdateTxForRebroadcast(tests.Context(t), etx, attempt)`
$DIR/core/chains/evm/txmgr/evm_tx_store_test.go: `t.Run("confirmed tx not past finality_depth", func(t *testing.T) {
confirmedAddr := cltest.MustGenerateRandomKey(t).Address
tx := mustInsertConfirmedEthTxWithReceipt(t, txStore, confirmedAddr, 123, 1)
finalized, err := txStore.IsTxFinalized(tests.Context(t), 2, tx.ID, ethClient.ConfiguredChainID())
require.NoError(t, err)
require.False(t, finalized)
})`
$DIR/core/chains/evm/txmgr/evm_tx_store_test.go: `t.Run("no unconfirmed eth txes", func(t *testing.T) {
broadcastAt, err := txStore.FindEarliestUnconfirmedBroadcastTime(tests.Context(t), ethClient.ConfiguredChainID())
require.NoError(t, err)
require.False(t, broadcastAt.Valid)
})`
$DIR/core/chains/evm/txmgr/evm_tx_store_test.go: `t.Run("no earliest unconfirmed tx block", func(t *testing.T) {
earliestBlock, err := txStore.FindEarliestUnconfirmedTxAttemptBlock(tests.Context(t), ethClient.ConfiguredChainID())
require.NoError(t, err)
require.False(t, earliestBlock.Valid)
})`
$DIR/core/chains/evm/txmgr/evm_tx_store_test.go: `_ = mustInsertConfirmedMissingReceiptEthTxWithLegacyAttempt(t, txStore, 123, blockNum, time.Now().Add(time.Minute), fromAddress2)`
$DIR/core/chains/evm/txmgr/evm_tx_store_test.go: `err = txStore.SaveInsufficientFundsAttempt(tests.Context(t), defaultDuration, &etx.TxAttempts[0], now)`
$DIR/core/chains/evm/txmgr/evm_tx_store_test.go: `err = txStore.SaveSentAttempt(tests.Context(t), defaultDuration, &etx.TxAttempts[0], now)`
$DIR/core/chains/evm/txmgr/evm_tx_store_test.go: `err = txStore.SaveConfirmedMissingReceiptAttempt(tests.Context(t), defaultDuration, &etx.TxAttempts[0], now)`
$DIR/core/chains/evm/txmgr/evm_tx_store_test.go: `t.Run("saves new in_progress attempt if attempt is new", func(t *testing.T) {
etx := cltest.MustInsertUnconfirmedEthTx(t, txStore, 1, fromAddress)
attempt := cltest.NewLegacyEthTxAttempt(t, etx.ID)
require.Equal(t, int64(0), attempt.ID)
err := txStore.SaveInProgressAttempt(tests.Context(t), &attempt)
require.NoError(t, err)
attemptResult, err := txStore.FindTxAttempt(ctx, attempt.Hash)
require.NoError(t, err)
assert.Equal(t, txmgrtypes.TxAttemptInProgress, attemptResult.State)
})`
$DIR/core/chains/evm/txmgr/evm_tx_store_test.go: `attempt.BroadcastBeforeBlockNum = nil`
$DIR/core/chains/evm/txmgr/evm_tx_store_test.go: `attempt.State = txmgrtypes.TxAttemptInProgress`
$DIR/core/chains/evm/txmgr/evm_tx_store_test.go: `etx, err = txStore.FindTxWithAttempts(ctx, etx.ID)`
$DIR/core/chains/evm/txmgr/evm_tx_store_test.go: `mustInsertUnconfirmedEthTxWithAttemptState(t, txStore, 2, fromAddress, txmgrtypes.TxAttemptBroadcast)`
$DIR/core/chains/evm/txmgr/evm_tx_store_test.go: `err = txStore.SetBroadcastBeforeBlockNum(tests.Context(t), currentBlockNum+1, ethClient.ConfiguredChainID())`
$DIR/core/chains/evm/txmgr/evm_tx_store_test.go: `attempt3_2.State = txmgrtypes.TxAttemptInsufficientFunds`
$DIR/core/chains/evm/txmgr/evm_tx_store_test.go: `attempt3_2.TxFee.Legacy = assets.NewWeiI(100)`
$DIR/core/chains/evm/txmgr/evm_tx_store_test.go: `cltest.MustInsertUnconfirmedEthTxWithBroadcastLegacyAttempt(t, txStore, 3, fromAddress)`
$DIR/core/chains/evm/txmgr/evm_tx_store_test.go: `cltest.MustInsertConfirmedEthTxWithLegacyAttempt(t, txStore, 4, 100, fromAddress)`
$DIR/core/chains/evm/txmgr/evm_tx_store_test.go: `mustInsertUnconfirmedEthTxWithInsufficientEthAttempt(t, txStore, 0, otherAddress)`
$DIR/core/chains/evm/txmgr/evm_tx_store_test.go: `t.Run("returns all eth_txes with at least one attempt that is in insufficient_eth state", func(t *testing.T) {
etxs, err := txStore.FindTxsRequiringResubmissionDueToInsufficientFunds(tests.Context(t), fromAddress, testutils.FixtureChainID)
require.NoError(t, err)
assert.Len(t, etxs, 3)
assert.Equal(t, *etx1.Sequence, *etxs[0].Sequence)
assert.Equal(t, etx1.ID, etxs[0].ID)
assert.Equal(t, *etx2.Sequence, *etxs[1].Sequence)
assert.Equal(t, etx2.ID, etxs[1].ID)
assert.Equal(t, *etx3.Sequence, *etxs[2].Sequence)
assert.Equal(t, etx3.ID, etxs[2].ID)
})`
$DIR/core/chains/evm/txmgr/evm_tx_store_test.go: `t.Run("does not return eth_txes with different chain ID", func(t *testing.T) {
etxs, err := txStore.FindTxsRequiringResubmissionDueToInsufficientFunds(tests.Context(t), fromAddress, big.NewInt(42))
require.NoError(t, err)
assert.Len(t, etxs, 0)
})`
$DIR/core/chains/evm/txmgr/evm_tx_store_test.go: `pgtest.MustExec(t, db, `UPDATE evm.txes SET state='confirmed' WHERE id = $1`, etx1.ID)`
$DIR/core/chains/evm/txmgr/evm_tx_store_test.go: `pgtest.MustExec(t, db, `UPDATE evm.txes SET state='fatal_error', nonce=NULL, error='foo', broadcast_at=NULL, initial_broadcast_at=NULL WHERE id = $1`, etx2.ID)`
$DIR/core/chains/evm/txmgr/evm_tx_store_test.go: `t.Run("successfully mark errored transactions", func(t *testing.T) {
etx := mustInsertConfirmedMissingReceiptEthTxWithLegacyAttempt(t, txStore, 1, 7, time.Now(), fromAddress)
err := txStore.MarkOldTxesMissingReceiptAsErrored(tests.Context(t), 10, 2, ethClient.ConfiguredChainID())
require.NoError(t, err)
etx, err = txStore.FindTxWithAttempts(ctx, etx.ID)
require.NoError(t, err)
assert.Equal(t, txmgrcommon.TxFatalError, etx.State)
})`
$DIR/core/chains/evm/txmgr/evm_tx_store_test.go: `etx, err = txStore.FindTxWithAttempts(ctx, etx.ID)`
$DIR/core/chains/evm/txmgr/evm_tx_store_test.go: `etx, err = txStore.FindTxWithAttempts(ctx, etx.ID)`
$DIR/core/chains/evm/txmgr/evm_tx_store_test.go: `t.Run("load eth tx attempt", func(t *testing.T) {
etx := mustInsertConfirmedMissingReceiptEthTxWithLegacyAttempt(t, txStore, 1, 7, time.Now(), fromAddress)
etx.TxAttempts = []txmgr.TxAttempt{}
err := txStore.LoadTxesAttempts(ctx, []*txmgr.Tx{&etx})
require.NoError(t, err)
assert.Len(t, etx.TxAttempts, 1)
})`
$DIR/core/chains/evm/txmgr/evm_tx_store_test.go: `etx.TxAttempts = []txmgr.TxAttempt{}`
$DIR/core/chains/evm/txmgr/evm_tx_store_test.go: `dbAttempt.FromTxAttempt(&newAttempt)`
$DIR/core/chains/evm/txmgr/evm_tx_store_test.go: `func() {
tx, err := db.BeginTx(ctx, nil)
require.NoError(t, err)
const insertEthTxAttemptSQL = `INSERT INTO evm.tx_attempts (eth_tx_id, gas_price, signed_raw_tx, hash, broadcast_before_block_num, state, created_at, chain_specific_gas_limit, tx_type, gas_tip_cap, gas_fee_cap, is_purge_attempt) VALUES (
:eth_tx_id, :gas_price, :signed_raw_tx, :hash, :broadcast_before_block_num, :state, NOW(), :chain_specific_gas_limit, :tx_type, :gas_tip_cap, :gas_fee_cap, :is_purge_attempt
) RETURNING *`
query, args, err := sqlutil.DataSource(db).BindNamed(insertEthTxAttemptSQL, dbAttempt)
require.NoError(t, err)
_, err = tx.ExecContext(ctx, query, args...)
require.NoError(t, err)
etx.TxAttempts = []txmgr.TxAttempt{}
err = txStore.LoadTxesAttempts(ctx, []*txmgr.Tx{&etx})
require.NoError(t, err)
assert.Len(t, etx.TxAttempts, 2)
err = tx.Commit()
require.NoError(t, err)
}()`
$DIR/core/chains/evm/txmgr/evm_tx_store_test.go: `_, err = tx.ExecContext(ctx, query, args...)`
$DIR/core/chains/evm/txmgr/evm_tx_store_test.go: `etx.TxAttempts = []txmgr.TxAttempt{}`
$DIR/core/chains/evm/txmgr/evm_tx_store_test.go: `err = txStore.LoadTxesAttempts(ctx, []*txmgr.Tx{&etx})`
$DIR/core/chains/evm/txmgr/evm_tx_store_test.go: `err = tx.Commit()`
$DIR/core/chains/evm/txmgr/evm_tx_store_test.go: `etx.TxAttempts = []txmgr.TxAttempt{}`
$DIR/core/chains/evm/txmgr/evm_tx_store_test.go: `etx, err = txStore.FindTxWithAttempts(ctx, etx.ID)`
$DIR/core/chains/evm/txmgr/evm_tx_store_test.go: `t.Run("cannot find unstarted tx", func(t *testing.T) {
mustInsertInProgressEthTxWithAttempt(t, txStore, 13, fromAddress)
resultEtx, err := txStore.FindNextUnstartedTransactionFromAddress(tests.Context(t), fromAddress, ethClient.ConfiguredChainID())
assert.ErrorIs(t, err, sql.ErrNoRows)
assert.Nil(t, resultEtx)
})`
$DIR/core/chains/evm/txmgr/evm_tx_store_test.go: `mustInsertInProgressEthTxWithAttempt(t, txStore, 13, fromAddress)`
$DIR/core/chains/evm/txmgr/evm_tx_store_test.go: `mustCreateUnstartedGeneratedTx(t, txStore, fromAddress, testutils.FixtureChainID)`
$DIR/core/chains/evm/txmgr/evm_tx_store_test.go: `etx.Error = etxPretendError`
$DIR/core/chains/evm/txmgr/evm_tx_store_test.go: `etx, err = txStore.FindTxWithAttempts(ctx, etx.ID)`
$DIR/core/chains/evm/txmgr/evm_tx_store_test.go: `etx.BroadcastAt = &time1`
$DIR/core/chains/evm/txmgr/evm_tx_store_test.go: `etx.InitialBroadcastAt = &time1`
$DIR/core/chains/evm/txmgr/evm_tx_store_test.go: `i++`
$DIR/core/chains/evm/txmgr/evm_tx_store_test.go: `t.Run("update successful", func(t *testing.T) {
etx := mustCreateUnstartedGeneratedTx(t, txStore, fromAddress, testutils.FixtureChainID)
etx.Sequence = &nonce
attempt := cltest.NewLegacyEthTxAttempt(t, etx.ID)
err := txStore.UpdateTxUnstartedToInProgress(tests.Context(t), &etx, &attempt)
require.NoError(t, err)
etx, err = txStore.FindTxWithAttempts(ctx, etx.ID)
require.NoError(t, err)
assert.Equal(t, txmgrcommon.TxInProgress, etx.State)
assert.Len(t, etx.TxAttempts, 1)
})`
$DIR/core/chains/evm/txmgr/evm_tx_store_test.go: `etx.Sequence = &nonce`
$DIR/core/chains/evm/txmgr/evm_tx_store_test.go: `etx, err = txStore.FindTxWithAttempts(ctx, etx.ID)`
$DIR/core/chains/evm/txmgr/evm_tx_store_test.go: `t.Run("update fails because tx is removed", func(t *testing.T) {
etx := mustCreateUnstartedGeneratedTx(t, txStore, fromAddress, testutils.FixtureChainID)
etx.Sequence = &nonce
attempt := cltest.NewLegacyEthTxAttempt(t, etx.ID)
_, err := db.ExecContext(ctx, "DELETE FROM evm.txes WHERE id = $1", etx.ID)
require.NoError(t, err)
err = txStore.UpdateTxUnstartedToInProgress(tests.Context(t), &etx, &attempt)
require.ErrorContains(t, err, "tx removed")
})`
$DIR/core/chains/evm/txmgr/evm_tx_store_test.go: `etx.Sequence = &nonce`
$DIR/core/chains/evm/txmgr/evm_tx_store_test.go: `err = txStore.UpdateTxUnstartedToInProgress(tests.Context(t), &etx, &attempt)`
$DIR/core/chains/evm/txmgr/evm_tx_store_test.go: `db = pgtest.NewSqlxDB(t)`
$DIR/core/chains/evm/txmgr/evm_tx_store_test.go: `txStore = cltest.NewTestTxStore(t, db)`
$DIR/core/chains/evm/txmgr/evm_tx_store_test.go: `ethKeyStore = cltest.NewKeyStore(t, db).Eth()`
$DIR/core/chains/evm/txmgr/evm_tx_store_test.go: `_, fromAddress = cltest.MustInsertRandomKeyReturningState(t, ethKeyStore)`
$DIR/core/chains/evm/txmgr/evm_tx_store_test.go: `t.Run("update replaces abandoned tx with same hash", func(t *testing.T) {
etx := mustInsertInProgressEthTxWithAttempt(t, txStore, nonce, fromAddress)
require.Len(t, etx.TxAttempts, 1)
zero := commonconfig.MustNewDuration(time.Duration(0))
evmCfg := configtest.NewGeneralConfig(t, func(c *chainlink.Config, s *chainlink.Secrets) {
c.EVM[0].Chain.Transactions.ReaperInterval = zero
c.EVM[0].Chain.Transactions.ReaperThreshold = zero
c.EVM[0].Chain.Transactions.ResendAfterThreshold = zero
})
ccfg := evmtest.NewChainScopedConfig(t, evmCfg)
evmTxmCfg := txmgr.NewEvmTxmConfig(ccfg.EVM())
ec := evmtest.NewEthClientMockWithDefaultChain(t)
txMgr := txmgr.NewEvmTxm(ec.ConfiguredChainID(), evmTxmCfg, ccfg.EVM().Transactions(), nil, logger.Test(t), nil, nil,
nil, txStore, nil, nil, nil, nil)
err := txMgr.XXXTestAbandon(fromAddress) // mark transaction as abandoned
require.NoError(t, err)
etx2 := mustCreateUnstartedGeneratedTx(t, txStore, fromAddress, testutils.FixtureChainID)
etx2.Sequence = &nonce
attempt2 := cltest.NewLegacyEthTxAttempt(t, etx2.ID)
attempt2.Hash = etx.TxAttempts[0].Hash
// Even though this will initially fail due to idx_eth_tx_attempts_hash constraint, because the conflicting tx has been abandoned
// it should succeed after removing the abandoned attempt and retrying the insert
err = txStore.UpdateTxUnstartedToInProgress(tests.Context(t), &etx2, &attempt2)
require.NoError(t, err)
})`
$DIR/core/chains/evm/txmgr/evm_tx_store_test.go: `c.EVM[0].Chain.Transactions.ReaperInterval = zero`
$DIR/core/chains/evm/txmgr/evm_tx_store_test.go: `c.EVM[0].Chain.Transactions.ReaperThreshold = zero`
$DIR/core/chains/evm/txmgr/evm_tx_store_test.go: `c.EVM[0].Chain.Transactions.ResendAfterThreshold = zero`
$DIR/core/chains/evm/txmgr/evm_tx_store_test.go: `etx2.Sequence = &nonce`
$DIR/core/chains/evm/txmgr/evm_tx_store_test.go: `attempt2.Hash = etx.TxAttempts[0].Hash`
$DIR/core/chains/evm/txmgr/evm_tx_store_test.go: `err = txStore.UpdateTxUnstartedToInProgress(tests.Context(t), &etx2, &attempt2)`
$DIR/core/chains/evm/txmgr/evm_tx_store_test.go: `_, fromAddress = cltest.MustInsertRandomKeyReturningState(t, ethKeyStore)`
$DIR/core/chains/evm/txmgr/evm_tx_store_test.go: `etx.State = txmgrcommon.TxUnstarted`
$DIR/core/chains/evm/txmgr/evm_tx_store_test.go: `txStore = cltest.NewTestTxStore(t, db)`
$DIR/core/chains/evm/txmgr/evm_tx_store_test.go: `t.Run("gets 0 in progress eth transaction", func(t *testing.T) {
etxResult, err := txStore.GetTxInProgress(tests.Context(t), fromAddress)
require.NoError(t, err)
require.Nil(t, etxResult)
})`
$DIR/core/chains/evm/txmgr/evm_tx_store_test.go: `t.Run("get 0 abandoned transactions", func(t *testing.T) {
txes, err := txStore.GetAbandonedTransactionsByBatch(tests.Context(t), ethClient.ConfiguredChainID(), enabledAddrs, 0, 10)
require.NoError(t, err)
require.Empty(t, txes)
})`
$DIR/core/chains/evm/txmgr/evm_tx_store_test.go: `t.Run("do not return enabled addresses", func(t *testing.T) {
_ = mustInsertInProgressEthTxWithAttempt(t, txStore, 123, enabled)
_ = mustCreateUnstartedGeneratedTx(t, txStore, enabled, ethClient.ConfiguredChainID())
txes, err := txStore.GetAbandonedTransactionsByBatch(tests.Context(t), ethClient.ConfiguredChainID(), enabledAddrs, 0, 10)
require.NoError(t, err)
require.Empty(t, txes)
})`
$DIR/core/chains/evm/txmgr/evm_tx_store_test.go: `_ = mustInsertInProgressEthTxWithAttempt(t, txStore, 123, enabled)`
$DIR/core/chains/evm/txmgr/evm_tx_store_test.go: `_ = mustCreateUnstartedGeneratedTx(t, txStore, enabled, ethClient.ConfiguredChainID())`
$DIR/core/chains/evm/txmgr/evm_tx_store_test.go: `t.Run("get in progress, unstarted, and unconfirmed eth transactions", func(t *testing.T) {
inProgressTx := mustInsertInProgressEthTxWithAttempt(t, txStore, 123, fromAddress)
unstartedTx := mustCreateUnstartedGeneratedTx(t, txStore, fromAddress, ethClient.ConfiguredChainID())
txes, err := txStore.GetAbandonedTransactionsByBatch(tests.Context(t), ethClient.ConfiguredChainID(), enabledAddrs, 0, 10)
require.NoError(t, err)
require.Len(t, txes, 2)
for _, tx := range txes {
require.True(t, tx.ID == inProgressTx.ID || tx.ID == unstartedTx.ID)
}
})`
$DIR/core/chains/evm/txmgr/evm_tx_store_test.go: `_ = mustCreateUnstartedGeneratedTx(t, txStore, fromAddress, ethClient.ConfiguredChainID())`
$DIR/core/chains/evm/txmgr/evm_tx_store_test.go: `allTxes = append(allTxes, batchTxes...)`
$DIR/core/chains/evm/txmgr/evm_tx_store_test.go: `t.Run("no transaction", func(t *testing.T) {
tx, err := txStore.GetTxByID(tests.Context(t), int64(0))
require.NoError(t, err)
require.Nil(t, tx)
})`
$DIR/core/chains/evm/txmgr/evm_tx_store_test.go: `t.Run("gets 0 fatal eth transactions", func(t *testing.T) {
txes, err := txStore.GetFatalTransactions(tests.Context(t))
require.NoError(t, err)
require.Empty(t, txes)
})`
$DIR/core/chains/evm/txmgr/evm_tx_store_test.go: `t.Run("no in progress eth transaction", func(t *testing.T) {
exists, err := txStore.HasInProgressTransaction(tests.Context(t), fromAddress, ethClient.ConfiguredChainID())
require.NoError(t, err)
require.False(t, exists)
})`
$DIR/core/chains/evm/txmgr/evm_tx_store_test.go: `mustInsertInProgressEthTxWithAttempt(t, txStore, 123, fromAddress)`
$DIR/core/chains/evm/txmgr/evm_tx_store_test.go: `cltest.MustInsertUnconfirmedEthTxWithBroadcastLegacyAttempt(t, txStore, 0, otherAddress)`
$DIR/core/chains/evm/txmgr/evm_tx_store_test.go: `cltest.MustInsertUnconfirmedEthTxWithBroadcastLegacyAttempt(t, txStore, 0, fromAddress)`
$DIR/core/chains/evm/txmgr/evm_tx_store_test.go: `cltest.MustInsertUnconfirmedEthTxWithBroadcastLegacyAttempt(t, txStore, 1, fromAddress)`
$DIR/core/chains/evm/txmgr/evm_tx_store_test.go: `cltest.MustInsertUnconfirmedEthTxWithBroadcastLegacyAttempt(t, txStore, 2, fromAddress)`
$DIR/core/chains/evm/txmgr/evm_tx_store_test.go: `cltest.MustInsertUnconfirmedEthTxWithBroadcastLegacyAttempt(t, txStore, 0, fromAddress1)`
$DIR/core/chains/evm/txmgr/evm_tx_store_test.go: `cltest.MustInsertUnconfirmedEthTxWithBroadcastLegacyAttempt(t, txStore, 1, fromAddress2)`
$DIR/core/chains/evm/txmgr/evm_tx_store_test.go: `cltest.MustInsertUnconfirmedEthTxWithBroadcastLegacyAttempt(t, txStore, 2, fromAddress3)`
$DIR/core/chains/evm/txmgr/evm_tx_store_test.go: `mustCreateUnstartedGeneratedTx(t, txStore, fromAddress, testutils.FixtureChainID)`
$DIR/core/chains/evm/txmgr/evm_tx_store_test.go: `mustCreateUnstartedGeneratedTx(t, txStore, fromAddress, testutils.FixtureChainID)`
$DIR/core/chains/evm/txmgr/evm_tx_store_test.go: `mustCreateUnstartedGeneratedTx(t, txStore, otherAddress, testutils.FixtureChainID)`
$DIR/core/chains/evm/txmgr/evm_tx_store_test.go: `cltest.MustInsertUnconfirmedEthTxWithBroadcastLegacyAttempt(t, txStore, 2, fromAddress)`
$DIR/core/chains/evm/txmgr/evm_tx_store_test.go: `t.Run("with no eth_txes returns nil", func(t *testing.T) {
err := txStore.CheckTxQueueCapacity(tests.Context(t), fromAddress, maxUnconfirmedTransactions, testutils.FixtureChainID)
require.NoError(t, err)
})`
$DIR/core/chains/evm/txmgr/evm_tx_store_test.go: `mustCreateUnstartedTx(t, txStore, otherAddress, toAddress, encodedPayload, feeLimit, value, testutils.FixtureChainID)`
$DIR/core/chains/evm/txmgr/evm_tx_store_test.go: `t.Run("with eth_txes from another address returns nil", func(t *testing.T) {
err := txStore.CheckTxQueueCapacity(tests.Context(t), fromAddress, maxUnconfirmedTransactions, testutils.FixtureChainID)
require.NoError(t, err)
})`
$DIR/core/chains/evm/txmgr/evm_tx_store_test.go: `mustInsertFatalErrorEthTx(t, txStore, otherAddress)`
$DIR/core/chains/evm/txmgr/evm_tx_store_test.go: `t.Run("ignores fatally_errored transactions", func(t *testing.T) {
err := txStore.CheckTxQueueCapacity(tests.Context(t), fromAddress, maxUnconfirmedTransactions, testutils.FixtureChainID)
require.NoError(t, err)
})`
$DIR/core/chains/evm/txmgr/evm_tx_store_test.go: `mustInsertInProgressEthTxWithAttempt(t, txStore, evmtypes.Nonce(n), fromAddress)`
$DIR/core/chains/evm/txmgr/evm_tx_store_test.go: `n++`
$DIR/core/chains/evm/txmgr/evm_tx_store_test.go: `cltest.MustInsertUnconfirmedEthTxWithBroadcastLegacyAttempt(t, txStore, n, fromAddress)`
$DIR/core/chains/evm/txmgr/evm_tx_store_test.go: `n++`
$DIR/core/chains/evm/txmgr/evm_tx_store_test.go: `t.Run("unconfirmed and in_progress transactions do not count", func(t *testing.T) {
err := txStore.CheckTxQueueCapacity(tests.Context(t), fromAddress, 1, testutils.FixtureChainID)
require.NoError(t, err)
})`
$DIR/core/chains/evm/txmgr/evm_tx_store_test.go: `cltest.MustInsertConfirmedEthTxWithLegacyAttempt(t, txStore, n, 42, fromAddress)`
$DIR/core/chains/evm/txmgr/evm_tx_store_test.go: `n++`
$DIR/core/chains/evm/txmgr/evm_tx_store_test.go: `t.Run("with many confirmed eth_txes from the same address returns nil", func(t *testing.T) {
err := txStore.CheckTxQueueCapacity(tests.Context(t), fromAddress, maxUnconfirmedTransactions, testutils.FixtureChainID)
require.NoError(t, err)
})`
$DIR/core/chains/evm/txmgr/evm_tx_store_test.go: `mustCreateUnstartedTx(t, txStore, fromAddress, toAddress, encodedPayload, feeLimit, value, testutils.FixtureChainID)`
$DIR/core/chains/evm/txmgr/evm_tx_store_test.go: `t.Run("with fewer unstarted eth_txes than limit returns nil", func(t *testing.T) {
err := txStore.CheckTxQueueCapacity(tests.Context(t), fromAddress, maxUnconfirmedTransactions, testutils.FixtureChainID)
require.NoError(t, err)
})`
$DIR/core/chains/evm/txmgr/evm_tx_store_test.go: `mustCreateUnstartedTx(t, txStore, fromAddress, toAddress, encodedPayload, feeLimit, value, testutils.FixtureChainID)`
$DIR/core/chains/evm/txmgr/evm_tx_store_test.go: `t.Run("with equal or more unstarted eth_txes than limit returns error", func(t *testing.T) {
err := txStore.CheckTxQueueCapacity(tests.Context(t), fromAddress, maxUnconfirmedTransactions, testutils.FixtureChainID)
require.Error(t, err)
require.Contains(t, err.Error(), fmt.Sprintf("cannot create transaction; too many unstarted transactions in the queue (2/%d). WARNING: Hitting EVM.Transactions.MaxQueued", maxUnconfirmedTransactions))
mustCreateUnstartedTx(t, txStore, fromAddress, toAddress, encodedPayload, feeLimit, value, testutils.FixtureChainID)
err = txStore.CheckTxQueueCapacity(tests.Context(t), fromAddress, maxUnconfirmedTransactions, testutils.FixtureChainID)
require.Error(t, err)
require.Contains(t, err.Error(), fmt.Sprintf("cannot create transaction; too many unstarted transactions in the queue (3/%d). WARNING: Hitting EVM.Transactions.MaxQueued", maxUnconfirmedTransactions))
})`
$DIR/core/chains/evm/txmgr/evm_tx_store_test.go: `mustCreateUnstartedTx(t, txStore, fromAddress, toAddress, encodedPayload, feeLimit, value, testutils.FixtureChainID)`
$DIR/core/chains/evm/txmgr/evm_tx_store_test.go: `err = txStore.CheckTxQueueCapacity(tests.Context(t), fromAddress, maxUnconfirmedTransactions, testutils.FixtureChainID)`
$DIR/core/chains/evm/txmgr/evm_tx_store_test.go: `t.Run("with different chain ID ignores txes", func(t *testing.T) {
err := txStore.CheckTxQueueCapacity(tests.Context(t), fromAddress, maxUnconfirmedTransactions, big.NewInt(42))
require.NoError(t, err)
})`
$DIR/core/chains/evm/txmgr/evm_tx_store_test.go: `t.Run("with queue under capacity inserts eth_tx", func(t *testing.T) {
subject := uuid.New()
strategy := newMockTxStrategy(t)
strategy.On("Subject").Return(uuid.NullUUID{UUID: subject, Valid: true})
etx, err := txStore.CreateTransaction(tests.Context(t), txmgr.TxRequest{
FromAddress: fromAddress,
ToAddress: toAddress,
EncodedPayload: payload,
FeeLimit: gasLimit,
Meta: nil,
Strategy: strategy,
}, ethClient.ConfiguredChainID())
assert.NoError(t, err)
assert.Greater(t, etx.ID, int64(0))
assert.Equal(t, etx.State, txmgrcommon.TxUnstarted)
assert.Equal(t, gasLimit, etx.FeeLimit)
assert.Equal(t, fromAddress, etx.FromAddress)
assert.Equal(t, toAddress, etx.ToAddress)
assert.Equal(t, payload, etx.EncodedPayload)
assert.Equal(t, big.Int(assets.NewEthValue(0)), etx.Value)
assert.Equal(t, subject, etx.Subject.UUID)
cltest.AssertCount(t, db, "evm.txes", 1)
var dbEthTx txmgr.DbEthTx
require.NoError(t, db.Get(&dbEthTx, `SELECT * FROM evm.txes ORDER BY id ASC LIMIT 1`))
assert.Equal(t, dbEthTx.State, txmgrcommon.TxUnstarted)
assert.Equal(t, gasLimit, dbEthTx.GasLimit)
assert.Equal(t, fromAddress, dbEthTx.FromAddress)
assert.Equal(t, toAddress, dbEthTx.ToAddress)
assert.Equal(t, payload, dbEthTx.EncodedPayload)
assert.Equal(t, assets.NewEthValue(0), dbEthTx.Value)
assert.Equal(t, subject, dbEthTx.Subject.UUID)
})`
$DIR/core/chains/evm/txmgr/evm_tx_store_test.go: `strategy.On("Subject").Return(uuid.NullUUID{UUID: subject, Valid: true})`
$DIR/core/chains/evm/txmgr/evm_tx_store_test.go: `cltest.AssertCount(t, db, "evm.txes", 1)`
$DIR/core/chains/evm/txmgr/evm_tx_store_test.go: `t.Run("doesn't insert eth_tx if a matching tx already exists for that pipeline_task_run_id", func(t *testing.T) {
id := uuid.New()
txRequest := txmgr.TxRequest{
FromAddress: fromAddress,
ToAddress: testutils.NewAddress(),
EncodedPayload: []byte{1, 2, 3},
FeeLimit: 21000,
PipelineTaskRunID: &id,
Strategy: txmgrcommon.NewSendEveryStrategy(),
}
tx1, err := txStore.CreateTransaction(tests.Context(t), txRequest, ethClient.ConfiguredChainID())
assert.NoError(t, err)
tx2, err := txStore.CreateTransaction(tests.Context(t), txRequest, ethClient.ConfiguredChainID())
assert.NoError(t, err)
assert.Equal(t, tx1.GetID(), tx2.GetID())
})`
$DIR/core/chains/evm/txmgr/evm_tx_store_test.go: `strategy.On("Subject").Return(uuid.NullUUID{UUID: subject, Valid: true})`
$DIR/core/chains/evm/txmgr/evm_tx_store_test.go: `cltest.AssertCount(t, db, "evm.txes", 3)`
$DIR/core/chains/evm/txmgr/evm_tx_store_test.go: `evmtest.NewEthClientMockWithDefaultChain(t)`
$DIR/core/chains/evm/txmgr/evm_tx_store_test.go: `t.Run("does not prune if queue has not exceeded capacity-1", func(t *testing.T) {
subject1 := uuid.New()
strategy1 := txmgrcommon.NewDropOldestStrategy(subject1, uint32(5))
for i := 0; i < 5; i++ {
mustCreateUnstartedGeneratedTx(t, txStore, fromAddress, testutils.FixtureChainID, txRequestWithStrategy(strategy1))
}
AssertCountPerSubject(t, txStore, int64(4), subject1)
})`
$DIR/core/chains/evm/txmgr/evm_tx_store_test.go: `mustCreateUnstartedGeneratedTx(t, txStore, fromAddress, testutils.FixtureChainID, txRequestWithStrategy(strategy1))`
$DIR/core/chains/evm/txmgr/evm_tx_store_test.go: `AssertCountPerSubject(t, txStore, int64(4), subject1)`
$DIR/core/chains/evm/txmgr/evm_tx_store_test.go: `mustCreateUnstartedGeneratedTx(t, txStore, fromAddress, testutils.FixtureChainID, txRequestWithStrategy(strategy2))`
$DIR/core/chains/evm/txmgr/evm_tx_store_test.go: `AssertCountPerSubject(t, txStore, int64(2), subject2)`
$DIR/core/chains/evm/txmgr/evm_tx_store_test.go: `.NewSqlxDB(t)`
$DIR/core/chains/evm/txmgr/evm_tx_store_test.go: `.NewTestTxStore(t, db)`
$DIR/core/chains/evm/txmgr/evm_tx_store_test.go: `.NewKeyStore(t, db)`
$DIR/core/chains/evm/txmgr/evm_tx_store_test.go: `.Eth()`
$DIR/core/chains/evm/txmgr/evm_tx_store_test.go: `.Context(t)`
$DIR/core/chains/evm/txmgr/evm_tx_store_test.go: `.MustInsertRandomKey(t, ethKeyStore)`
$DIR/core/chains/evm/txmgr/evm_tx_store_test.go: `.MustInsertConfirmedEthTxWithLegacyAttempt(t, txStore, 0, 1, from)`
$DIR/core/chains/evm/txmgr/evm_tx_store_test.go: `.MustInsertConfirmedEthTxWithLegacyAttempt(t, txStore, 1, 2, from)`
$DIR/core/chains/evm/txmgr/evm_tx_store_test.go: `.NewLegacyEthTxAttempt(t, tx2.ID)`
$DIR/core/chains/evm/txmgr/evm_tx_store_test.go: `.NewWeiI(3)`
$DIR/core/chains/evm/txmgr/evm_tx_store_test.go: `.Get(&count, `SELECT count(*) FROM evm.txes`)`
$DIR/core/chains/evm/txmgr/evm_tx_store_test.go: `.TransactionsWithAttempts(ctx, 0, 100)`
$DIR/core/chains/evm/txmgr/evm_tx_store_test.go: `.TransactionsWithAttempts(ctx, 0, 1)`
$DIR/core/chains/evm/txmgr/evm_tx_store_test.go: `.Nonce(1)`
$DIR/core/chains/evm/txmgr/evm_tx_store_test.go: `.NewSqlxDB(t)`
$DIR/core/chains/evm/txmgr/evm_tx_store_test.go: `.NewTestTxStore(t, db)`
$DIR/core/chains/evm/txmgr/evm_tx_store_test.go: `.NewKeyStore(t, db)`
$DIR/core/chains/evm/txmgr/evm_tx_store_test.go: `.Eth()`
$DIR/core/chains/evm/txmgr/evm_tx_store_test.go: `.Context(t)`
$DIR/core/chains/evm/txmgr/evm_tx_store_test.go: `.MustInsertRandomKey(t, ethKeyStore)`
$DIR/core/chains/evm/txmgr/evm_tx_store_test.go: `.MustInsertConfirmedEthTxWithLegacyAttempt(t, txStore, 0, 1, from)`
$DIR/core/chains/evm/txmgr/evm_tx_store_test.go: `.MustInsertConfirmedEthTxWithLegacyAttempt(t, txStore, 1, 2, from)`
$DIR/core/chains/evm/txmgr/evm_tx_store_test.go: `.NewLegacyEthTxAttempt(t, tx2.ID)`
$DIR/core/chains/evm/txmgr/evm_tx_store_test.go: `.NewWeiI(3)`
$DIR/core/chains/evm/txmgr/evm_tx_store_test.go: `.Get(&count, `SELECT count(*) FROM evm.txes`)`
$DIR/core/chains/evm/txmgr/evm_tx_store_test.go: `.Transactions(ctx, 0, 100)`
$DIR/core/chains/evm/txmgr/evm_tx_store_test.go: `.NewSqlxDB(t)`
$DIR/core/chains/evm/txmgr/evm_tx_store_test.go: `.NewKeyStore(t, db)`
$DIR/core/chains/evm/txmgr/evm_tx_store_test.go: `.NewTestTxStore(t, db)`
$DIR/core/chains/evm/txmgr/evm_tx_store_test.go: `.MustInsertRandomKey(t, keyStore.Eth())`
$DIR/core/chains/evm/txmgr/evm_tx_store_test.go: `.Eth()`
$DIR/core/chains/evm/txmgr/evm_tx_store_test.go: `.Context(t)`
$DIR/core/chains/evm/txmgr/evm_tx_store_test.go: `.Run("InsertTx", func(t *testing.T) {
etx = cltest.NewEthTx(fromAddress)
require.NoError(t, orm.InsertTx(ctx, &etx))
assert.Greater(t, int(etx.ID), 0)
cltest.AssertCount(t, db, "evm.txes", 1)
})`
$DIR/core/chains/evm/txmgr/evm_tx_store_test.go: `.NewEthTx(fromAddress)`
$DIR/core/chains/evm/txmgr/evm_tx_store_test.go: `.AssertCount(t, db, "evm.txes", 1)`
$DIR/core/chains/evm/txmgr/evm_tx_store_test.go: `.Run("InsertTxAttempt", func(t *testing.T) {
attemptD = cltest.NewDynamicFeeEthTxAttempt(t, etx.ID)
require.NoError(t, orm.InsertTxAttempt(ctx, &attemptD))
assert.Greater(t, int(attemptD.ID), 0)
cltest.AssertCount(t, db, "evm.tx_attempts", 1)
attemptL = cltest.NewLegacyEthTxAttempt(t, etx.ID)
attemptL.State = txmgrtypes.TxAttemptBroadcast
attemptL.TxFee = gas.EvmFee{Legacy: assets.NewWeiI(42)}
require.NoError(t, orm.InsertTxAttempt(ctx, &attemptL))
assert.Greater(t, int(attemptL.ID), 0)
cltest.AssertCount(t, db, "evm.tx_attempts", 2)
})`
$DIR/core/chains/evm/txmgr/evm_tx_store_test.go: `.NewDynamicFeeEthTxAttempt(t, etx.ID)`
$DIR/core/chains/evm/txmgr/evm_tx_store_test.go: `.AssertCount(t, db, "evm.tx_attempts", 1)`
$DIR/core/chains/evm/txmgr/evm_tx_store_test.go: `.NewLegacyEthTxAttempt(t, etx.ID)`
$DIR/core/chains/evm/txmgr/evm_tx_store_test.go: `.NewWeiI(42)`
$DIR/core/chains/evm/txmgr/evm_tx_store_test.go: `.AssertCount(t, db, "evm.tx_attempts", 2)`
$DIR/core/chains/evm/txmgr/evm_tx_store_test.go: `.Run("InsertReceipt", func(t *testing.T) {
r = newEthReceipt(42, utils.NewHash(), attemptD.Hash, 0x1)
id, err := orm.InsertReceipt(ctx, &r.Receipt)
r.ID = id
require.NoError(t, err)
assert.Greater(t, int(r.ID), 0)
cltest.AssertCount(t, db, "evm.receipts", 1)
})`
$DIR/core/chains/evm/txmgr/evm_tx_store_test.go: `.NewHash()`
$DIR/core/chains/evm/txmgr/evm_tx_store_test.go: `.InsertReceipt(ctx, &r.Receipt)`
$DIR/core/chains/evm/txmgr/evm_tx_store_test.go: `.AssertCount(t, db, "evm.receipts", 1)`
$DIR/core/chains/evm/txmgr/evm_tx_store_test.go: `.Run("FindTxWithAttempts", func(t *testing.T) {
var err error
etx, err = orm.FindTxWithAttempts(ctx, etx.ID)
require.NoError(t, err)
require.Len(t, etx.TxAttempts, 2)
assert.Equal(t, etx.TxAttempts[0].ID, attemptD.ID)
assert.Equal(t, etx.TxAttempts[1].ID, attemptL.ID)
require.Len(t, etx.TxAttempts[0].Receipts, 1)
require.Len(t, etx.TxAttempts[1].Receipts, 0)
assert.Equal(t, r.BlockHash, etx.TxAttempts[0].Receipts[0].GetBlockHash())
})`
$DIR/core/chains/evm/txmgr/evm_tx_store_test.go: `.FindTxWithAttempts(ctx, etx.ID)`
$DIR/core/chains/evm/txmgr/evm_tx_store_test.go: `.Run("FindTxByHash", func(t *testing.T) {
foundEtx, err := orm.FindTxByHash(ctx, attemptD.Hash)
require.NoError(t, err)
assert.Equal(t, etx.ID, foundEtx.ID)
assert.Equal(t, etx.ChainID, foundEtx.ChainID)
})`
$DIR/core/chains/evm/txmgr/evm_tx_store_test.go: `.FindTxByHash(ctx, attemptD.Hash)`
$DIR/core/chains/evm/txmgr/evm_tx_store_test.go: `.FindTxAttemptsByTxIDs(ctx, []int64{etx.ID})`
$DIR/core/chains/evm/txmgr/evm_tx_store_test.go: `.NewSqlxDB(t)`
$DIR/core/chains/evm/txmgr/evm_tx_store_test.go: `.NewTestTxStore(t, db)`
$DIR/core/chains/evm/txmgr/evm_tx_store_test.go: `.NewKeyStore(t, db)`
$DIR/core/chains/evm/txmgr/evm_tx_store_test.go: `.Eth()`
$DIR/core/chains/evm/txmgr/evm_tx_store_test.go: `.Context(t)`
$DIR/core/chains/evm/txmgr/evm_tx_store_test.go: `.MustInsertRandomKey(t, ethKeyStore)`
$DIR/core/chains/evm/txmgr/evm_tx_store_test.go: `.MustInsertConfirmedEthTxWithLegacyAttempt(t, orm, 0, 1, from)`
$DIR/core/chains/evm/txmgr/evm_tx_store_test.go: `.MustInsertConfirmedEthTxWithLegacyAttempt(t, orm, 1, 2, from)`
$DIR/core/chains/evm/txmgr/evm_tx_store_test.go: `.NewLegacyEthTxAttempt(t, tx2.ID)`
$DIR/core/chains/evm/txmgr/evm_tx_store_test.go: `.NewWeiI(3)`
$DIR/core/chains/evm/txmgr/evm_tx_store_test.go: `.NewHash()`
$DIR/core/chains/evm/txmgr/evm_tx_store_test.go: `.InsertReceipt(ctx, &r.Receipt)`
$DIR/core/chains/evm/txmgr/evm_tx_store_test.go: `.MustInsertUnconfirmedEthTx(t, orm, 3, from)`
$DIR/core/chains/evm/txmgr/evm_tx_store_test.go: `.MustInsertUnconfirmedEthTxWithBroadcastLegacyAttempt(t, orm, 4, from)`
$DIR/core/chains/evm/txmgr/evm_tx_store_test.go: `.Get(&count, `SELECT count(*) FROM evm.txes`)`
$DIR/core/chains/evm/txmgr/evm_tx_store_test.go: `.Get(&count, `SELECT count(*) FROM evm.tx_attempts`)`
$DIR/core/chains/evm/txmgr/evm_tx_store_test.go: `.FindTxAttemptConfirmedByTxIDs(ctx, []int64{tx1.ID, tx2.ID})`
$DIR/core/chains/evm/txmgr/evm_tx_store_test.go: `.NewSqlxDB(t)`
$DIR/core/chains/evm/txmgr/evm_tx_store_test.go: `.NewTestTxStore(t, db)`
$DIR/core/chains/evm/txmgr/evm_tx_store_test.go: `.Context(t)`
$DIR/core/chains/evm/txmgr/evm_tx_store_test.go: `.NewKeyStore(t, db)`
$DIR/core/chains/evm/txmgr/evm_tx_store_test.go: `.Eth()`
$DIR/core/chains/evm/txmgr/evm_tx_store_test.go: `.MustInsertRandomKey(t, ethKeyStore)`
$DIR/core/chains/evm/txmgr/evm_tx_store_test.go: `.Run("returns nothing if there are no transactions", func(t *testing.T) {
olderThan := time.Now()
attempts, err := txStore.FindTxAttemptsRequiringResend(tests.Context(t), olderThan, 10, testutils.FixtureChainID, fromAddress)
require.NoError(t, err)
assert.Len(t, attempts, 0)
})`
$DIR/core/chains/evm/txmgr/evm_tx_store_test.go: `.Now()`
$DIR/core/chains/evm/txmgr/evm_tx_store_test.go: `.FindTxAttemptsRequiringResend(tests.Context(t), olderThan, 10, testutils.FixtureChainID, fromAddress)`
$DIR/core/chains/evm/txmgr/evm_tx_store_test.go: `.Context(t)`
$DIR/core/chains/evm/txmgr/evm_tx_store_test.go: `.MustInsertUnconfirmedEthTxWithBroadcastLegacyAttempt(t, txStore, 1, fromAddress, time.Unix(1616509200, 0))`
$DIR/core/chains/evm/txmgr/evm_tx_store_test.go: `.Unix(1616509200, 0)`
$DIR/core/chains/evm/txmgr/evm_tx_store_test.go: `.Unix(1616509400, 0)`
$DIR/core/chains/evm/txmgr/evm_tx_store_test.go: `.MustInsertUnconfirmedEthTxWithBroadcastLegacyAttempt(t, txStore, 0, fromAddress, time.Unix(1616509100, 0))`
$DIR/core/chains/evm/txmgr/evm_tx_store_test.go: `.Unix(1616509100, 0)`
$DIR/core/chains/evm/txmgr/evm_tx_store_test.go: `.MustInsertUnconfirmedEthTxWithBroadcastLegacyAttempt(t, txStore, 2, fromAddress, time.Unix(1616509300, 0))`
$DIR/core/chains/evm/txmgr/evm_tx_store_test.go: `.Unix(1616509300, 0)`
$DIR/core/chains/evm/txmgr/evm_tx_store_test.go: `.NewWeiI(10)`
$DIR/core/chains/evm/txmgr/evm_tx_store_test.go: `.NewWeiI(10)`
$DIR/core/chains/evm/txmgr/evm_tx_store_test.go: `.NewDynamicFeeEthTxAttempt(t, etxs[3].ID)`
$DIR/core/chains/evm/txmgr/evm_tx_store_test.go: `.NewWeiI(10)`
$DIR/core/chains/evm/txmgr/evm_tx_store_test.go: `.NewWeiI(20)`
$DIR/core/chains/evm/txmgr/evm_tx_store_test.go: `.NewDynamicFeeEthTxAttempt(t, etxs[3].ID)`
$DIR/core/chains/evm/txmgr/evm_tx_store_test.go: `.NewWeiI(30)`
$DIR/core/chains/evm/txmgr/evm_tx_store_test.go: `.NewWeiI(40)`
$DIR/core/chains/evm/txmgr/evm_tx_store_test.go: `.NewDynamicFeeEthTxAttempt(t, etxs[3].ID)`
$DIR/core/chains/evm/txmgr/evm_tx_store_test.go: `.NewWeiI(20)`
$DIR/core/chains/evm/txmgr/evm_tx_store_test.go: `.NewWeiI(30)`
$DIR/core/chains/evm/txmgr/evm_tx_store_test.go: `.Run("returns nothing if there are transactions from a different key", func(t *testing.T) {
olderThan := time.Now()
attempts, err := txStore.FindTxAttemptsRequiringResend(tests.Context(t), olderThan, 10, testutils.FixtureChainID, utils.RandomAddress())
require.NoError(t, err)
assert.Len(t, attempts, 0)
})`
$DIR/core/chains/evm/txmgr/evm_tx_store_test.go: `.Now()`
$DIR/core/chains/evm/txmgr/evm_tx_store_test.go: `.FindTxAttemptsRequiringResend(tests.Context(t), olderThan, 10, testutils.FixtureChainID, utils.RandomAddress())`
$DIR/core/chains/evm/txmgr/evm_tx_store_test.go: `.Context(t)`
$DIR/core/chains/evm/txmgr/evm_tx_store_test.go: `.RandomAddress()`
$DIR/core/chains/evm/txmgr/evm_tx_store_test.go: `.Run("returns the highest price attempt for each transaction that was last broadcast before or on the given time", func(t *testing.T) {
olderThan := time.Unix(1616509200, 0)
attempts, err := txStore.FindTxAttemptsRequiringResend(tests.Context(t), olderThan, 0, testutils.FixtureChainID, fromAddress)
require.NoError(t, err)
assert.Len(t, attempts, 2)
assert.Equal(t, attempt1_2.ID, attempts[0].ID)
assert.Equal(t, etxs[1].TxAttempts[0].ID, attempts[1].ID)
})`
$DIR/core/chains/evm/txmgr/evm_tx_store_test.go: `.Unix(1616509200, 0)`
$DIR/core/chains/evm/txmgr/evm_tx_store_test.go: `.FindTxAttemptsRequiringResend(tests.Context(t), olderThan, 0, testutils.FixtureChainID, fromAddress)`
$DIR/core/chains/evm/txmgr/evm_tx_store_test.go: `.Context(t)`
$DIR/core/chains/evm/txmgr/evm_tx_store_test.go: `.Run("returns the highest price attempt for EIP-1559 transactions", func(t *testing.T) {
olderThan := time.Unix(1616509400, 0)
attempts, err := txStore.FindTxAttemptsRequiringResend(tests.Context(t), olderThan, 0, testutils.FixtureChainID, fromAddress)
require.NoError(t, err)
assert.Len(t, attempts, 4)
assert.Equal(t, attempt4_4.ID, attempts[3].ID)
})`
$DIR/core/chains/evm/txmgr/evm_tx_store_test.go: `.Unix(1616509400, 0)`
$DIR/core/chains/evm/txmgr/evm_tx_store_test.go: `.FindTxAttemptsRequiringResend(tests.Context(t), olderThan, 0, testutils.FixtureChainID, fromAddress)`
$DIR/core/chains/evm/txmgr/evm_tx_store_test.go: `.Context(t)`
$DIR/core/chains/evm/txmgr/evm_tx_store_test.go: `.Unix(1616509200, 0)`
$DIR/core/chains/evm/txmgr/evm_tx_store_test.go: `.FindTxAttemptsRequiringResend(tests.Context(t), olderThan, 1, testutils.FixtureChainID, fromAddress)`
$DIR/core/chains/evm/txmgr/evm_tx_store_test.go: `.Context(t)`
$DIR/core/chains/evm/txmgr/evm_tx_store_test.go: `.NewSqlxDB(t)`
$DIR/core/chains/evm/txmgr/evm_tx_store_test.go: `.NewKeyStore(t, db)`
$DIR/core/chains/evm/txmgr/evm_tx_store_test.go: `.NewTestTxStore(t, db)`
$DIR/core/chains/evm/txmgr/evm_tx_store_test.go: `.MustInsertRandomKey(t, keyStore.Eth())`
$DIR/core/chains/evm/txmgr/evm_tx_store_test.go: `.Eth()`
$DIR/core/chains/evm/txmgr/evm_tx_store_test.go: `.Run("does not update when broadcast_at is NULL", func(t *testing.T) {
t.Parallel()
ctx := tests.Context(t)
etx := mustCreateUnstartedGeneratedTx(t, orm, fromAddress, testutils.FixtureChainID)
var nullTime *time.Time
assert.Equal(t, nullTime, etx.BroadcastAt)
currTime := time.Now()
err := orm.UpdateBroadcastAts(tests.Context(t), currTime, []int64{etx.ID})
require.NoError(t, err)
etx, err = orm.FindTxWithAttempts(ctx, etx.ID)
require.NoError(t, err)
assert.Equal(t, nullTime, etx.BroadcastAt)
})`
$DIR/core/chains/evm/txmgr/evm_tx_store_test.go: `.Context(t)`
$DIR/core/chains/evm/txmgr/evm_tx_store_test.go: `.Now()`
$DIR/core/chains/evm/txmgr/evm_tx_store_test.go: `.UpdateBroadcastAts(tests.Context(t), currTime, []int64{etx.ID})`
$DIR/core/chains/evm/txmgr/evm_tx_store_test.go: `.Context(t)`
$DIR/core/chains/evm/txmgr/evm_tx_store_test.go: `.FindTxWithAttempts(ctx, etx.ID)`
$DIR/core/chains/evm/txmgr/evm_tx_store_test.go: `.Context(t)`
$DIR/core/chains/evm/txmgr/evm_tx_store_test.go: `.Now()`
$DIR/core/chains/evm/txmgr/evm_tx_store_test.go: `.NewEthTx(fromAddress)`
$DIR/core/chains/evm/txmgr/evm_tx_store_test.go: `.InsertTx(ctx, &etx)`
$DIR/core/chains/evm/txmgr/evm_tx_store_test.go: `.Date(2077, 8, 14, 10, 0, 0, 0, time.UTC)`
$DIR/core/chains/evm/txmgr/evm_tx_store_test.go: `.UpdateBroadcastAts(ctx, time2, []int64{etx.ID})`
$DIR/core/chains/evm/txmgr/evm_tx_store_test.go: `.FindTxWithAttempts(ctx, etx.ID)`
$DIR/core/chains/evm/txmgr/evm_tx_store_test.go: `.NewSqlxDB(t)`
$DIR/core/chains/evm/txmgr/evm_tx_store_test.go: `.NewTestTxStore(t, db)`
$DIR/core/chains/evm/txmgr/evm_tx_store_test.go: `.NewKeyStore(t, db)`
$DIR/core/chains/evm/txmgr/evm_tx_store_test.go: `.Eth()`
$DIR/core/chains/evm/txmgr/evm_tx_store_test.go: `.NewEthClientMockWithDefaultChain(t)`
$DIR/core/chains/evm/txmgr/evm_tx_store_test.go: `.MustInsertRandomKeyReturningState(t, ethKeyStore)`
$DIR/core/chains/evm/txmgr/evm_tx_store_test.go: `.MustInsertUnconfirmedEthTxWithBroadcastLegacyAttempt(t, txStore, 0, fromAddress)`
$DIR/core/chains/evm/txmgr/evm_tx_store_test.go: `.ConfiguredChainID()`
$DIR/core/chains/evm/txmgr/evm_tx_store_test.go: `.Context(t)`
$DIR/core/chains/evm/txmgr/evm_tx_store_test.go: `.Run("saves block num to unconfirmed evm.tx_attempts without one", func(t *testing.T) {
// Do the thing
require.NoError(t, txStore.SetBroadcastBeforeBlockNum(tests.Context(t), headNum, chainID))
etx, err = txStore.FindTxWithAttempts(ctx, etx.ID)
require.NoError(t, err)
require.Len(t, etx.TxAttempts, 1)
attempt := etx.TxAttempts[0]
assert.Equal(t, int64(9000), *attempt.BroadcastBeforeBlockNum)
})`
$DIR/core/chains/evm/txmgr/evm_tx_store_test.go: `.FindTxWithAttempts(ctx, etx.ID)`
$DIR/core/chains/evm/txmgr/evm_tx_store_test.go: `.Run("does not change evm.tx_attempts that already have BroadcastBeforeBlockNum set", func(t *testing.T) {
n := int64(42)
attempt := newBroadcastLegacyEthTxAttempt(t, etx.ID, 2)
attempt.BroadcastBeforeBlockNum = &n
require.NoError(t, txStore.InsertTxAttempt(ctx, &attempt))
// Do the thing
require.NoError(t, txStore.SetBroadcastBeforeBlockNum(tests.Context(t), headNum, chainID))
etx, err = txStore.FindTxWithAttempts(ctx, etx.ID)
require.NoError(t, err)
require.Len(t, etx.TxAttempts, 2)
attempt = etx.TxAttempts[0]
assert.Equal(t, int64(42), *attempt.BroadcastBeforeBlockNum)
})`
$DIR/core/chains/evm/txmgr/evm_tx_store_test.go: `.FindTxWithAttempts(ctx, etx.ID)`
$DIR/core/chains/evm/txmgr/evm_tx_store_test.go: `.MustInsertUnconfirmedEthTxWithBroadcastLegacyAttempt(t, txStore, 1, fromAddress, cfg.EVM().ChainID())`
$DIR/core/chains/evm/txmgr/evm_tx_store_test.go: `.EVM()`
$DIR/core/chains/evm/txmgr/evm_tx_store_test.go: `.ChainID()`
$DIR/core/chains/evm/txmgr/evm_tx_store_test.go: `.MustInsertUnconfirmedEthTxWithBroadcastLegacyAttempt(t, txStore, 0, fromAddress, testutils.SimulatedChainID)`
$DIR/core/chains/evm/txmgr/evm_tx_store_test.go: `.FindTxWithAttempts(ctx, etxThisChain.ID)`
$DIR/core/chains/evm/txmgr/evm_tx_store_test.go: `.FindTxWithAttempts(ctx, etxOtherChain.ID)`
$DIR/core/chains/evm/txmgr/evm_tx_store_test.go: `.NewSqlxDB(t)`
$DIR/core/chains/evm/txmgr/evm_tx_store_test.go: `.NewTestTxStore(t, db)`
$DIR/core/chains/evm/txmgr/evm_tx_store_test.go: `.NewKeyStore(t, db)`
$DIR/core/chains/evm/txmgr/evm_tx_store_test.go: `.Eth()`
$DIR/core/chains/evm/txmgr/evm_tx_store_test.go: `.NewEthClientMockWithDefaultChain(t)`
$DIR/core/chains/evm/txmgr/evm_tx_store_test.go: `.MustInsertRandomKeyReturningState(t, ethKeyStore)`
$DIR/core/chains/evm/txmgr/evm_tx_store_test.go: `.Unix(1616509100, 0)`
$DIR/core/chains/evm/txmgr/evm_tx_store_test.go: `.FindTxAttemptsConfirmedMissingReceipt(tests.Context(t), ethClient.ConfiguredChainID())`
$DIR/core/chains/evm/txmgr/evm_tx_store_test.go: `.Context(t)`
$DIR/core/chains/evm/txmgr/evm_tx_store_test.go: `.ConfiguredChainID()`
$DIR/core/chains/evm/txmgr/evm_tx_store_test.go: `.Context(t)`
$DIR/core/chains/evm/txmgr/evm_tx_store_test.go: `.NewSqlxDB(t)`
$DIR/core/chains/evm/txmgr/evm_tx_store_test.go: `.NewTestTxStore(t, db)`
$DIR/core/chains/evm/txmgr/evm_tx_store_test.go: `.NewKeyStore(t, db)`
$DIR/core/chains/evm/txmgr/evm_tx_store_test.go: `.Eth()`
$DIR/core/chains/evm/txmgr/evm_tx_store_test.go: `.MustInsertRandomKeyReturningState(t, ethKeyStore)`
$DIR/core/chains/evm/txmgr/evm_tx_store_test.go: `.Unix(1616509100, 0)`
$DIR/core/chains/evm/txmgr/evm_tx_store_test.go: `.FindTxWithAttempts(ctx, etx0.ID)`
$DIR/core/chains/evm/txmgr/evm_tx_store_test.go: `.NewSqlxDB(t)`
$DIR/core/chains/evm/txmgr/evm_tx_store_test.go: `.NewTestTxStore(t, db)`
$DIR/core/chains/evm/txmgr/evm_tx_store_test.go: `.NewKeyStore(t, db)`
$DIR/core/chains/evm/txmgr/evm_tx_store_test.go: `.Eth()`
$DIR/core/chains/evm/txmgr/evm_tx_store_test.go: `.NewEthClientMockWithDefaultChain(t)`
$DIR/core/chains/evm/txmgr/evm_tx_store_test.go: `.MustInsertRandomKeyReturningState(t, ethKeyStore)`
$DIR/core/chains/evm/txmgr/evm_tx_store_test.go: `.Unix(1616509100, 0)`
$DIR/core/chains/evm/txmgr/evm_tx_store_test.go: `.FindTxAttemptsRequiringReceiptFetch(tests.Context(t), ethClient.ConfiguredChainID())`
$DIR/core/chains/evm/txmgr/evm_tx_store_test.go: `.Context(t)`
$DIR/core/chains/evm/txmgr/evm_tx_store_test.go: `.ConfiguredChainID()`
$DIR/core/chains/evm/txmgr/evm_tx_store_test.go: `.NewSqlxDB(t)`
$DIR/core/chains/evm/txmgr/evm_tx_store_test.go: `.NewTestTxStore(t, db)`
$DIR/core/chains/evm/txmgr/evm_tx_store_test.go: `.NewKeyStore(t, db)`
$DIR/core/chains/evm/txmgr/evm_tx_store_test.go: `.Eth()`
$DIR/core/chains/evm/txmgr/evm_tx_store_test.go: `.NewEthClientMockWithDefaultChain(t)`
$DIR/core/chains/evm/txmgr/evm_tx_store_test.go: `.MustInsertRandomKeyReturningState(t, ethKeyStore)`
$DIR/core/chains/evm/txmgr/evm_tx_store_test.go: `.Context(t)`
$DIR/core/chains/evm/txmgr/evm_tx_store_test.go: `.Unix(1616509100, 0)`
$DIR/core/chains/evm/txmgr/evm_tx_store_test.go: `.NewHash()`
$DIR/core/chains/evm/txmgr/evm_tx_store_test.go: `.NewInt(42)`
$DIR/core/chains/evm/txmgr/evm_tx_store_test.go: `.SaveFetchedReceipts(tests.Context(t), []*evmtypes.Receipt{&txmReceipt}, txmgrcommon.TxConfirmed, nil, ethClient.ConfiguredChainID())`
$DIR/core/chains/evm/txmgr/evm_tx_store_test.go: `.Context(t)`
$DIR/core/chains/evm/txmgr/evm_tx_store_test.go: `.ConfiguredChainID()`
$DIR/core/chains/evm/txmgr/evm_tx_store_test.go: `.FindTxWithAttempts(ctx, etx0.ID)`
$DIR/core/chains/evm/txmgr/evm_tx_store_test.go: `.NewSqlxDB(t)`
$DIR/core/chains/evm/txmgr/evm_tx_store_test.go: `.NewTestTxStore(t, db)`
$DIR/core/chains/evm/txmgr/evm_tx_store_test.go: `.NewKeyStore(t, db)`
$DIR/core/chains/evm/txmgr/evm_tx_store_test.go: `.Eth()`
$DIR/core/chains/evm/txmgr/evm_tx_store_test.go: `.MustInsertRandomKeyReturningState(t, ethKeyStore)`
$DIR/core/chains/evm/txmgr/evm_tx_store_test.go: `.NewEthClientMockWithDefaultChain(t)`
$DIR/core/chains/evm/txmgr/evm_tx_store_test.go: `.Context(t)`
$DIR/core/chains/evm/txmgr/evm_tx_store_test.go: `.MustInsertUnconfirmedEthTx(t, txStore, 0, fromAddress)`
$DIR/core/chains/evm/txmgr/evm_tx_store_test.go: `.ConfiguredChainID()`
$DIR/core/chains/evm/txmgr/evm_tx_store_test.go: `.MarkAllConfirmedMissingReceipt(tests.Context(t), ethClient.ConfiguredChainID())`
$DIR/core/chains/evm/txmgr/evm_tx_store_test.go: `.Context(t)`
$DIR/core/chains/evm/txmgr/evm_tx_store_test.go: `.ConfiguredChainID()`
$DIR/core/chains/evm/txmgr/evm_tx_store_test.go: `.FindTxWithAttempts(ctx, etx0.ID)`
$DIR/core/chains/evm/txmgr/evm_tx_store_test.go: `.NewSqlxDB(t)`
$DIR/core/chains/evm/txmgr/evm_tx_store_test.go: `.NewTestTxStore(t, db)`
$DIR/core/chains/evm/txmgr/evm_tx_store_test.go: `.NewKeyStore(t, db)`
$DIR/core/chains/evm/txmgr/evm_tx_store_test.go: `.Eth()`
$DIR/core/chains/evm/txmgr/evm_tx_store_test.go: `.MustInsertRandomKeyReturningState(t, ethKeyStore)`
$DIR/core/chains/evm/txmgr/evm_tx_store_test.go: `.Run("loads eth transaction", func(t *testing.T) {
// insert etx with attempt
etx := cltest.MustInsertUnconfirmedEthTxWithBroadcastLegacyAttempt(t, txStore, int64(7), fromAddress)
// create unloaded attempt
unloadedAttempt := txmgr.TxAttempt{TxID: etx.ID}
// uninitialized EthTx
assert.Equal(t, int64(0), unloadedAttempt.Tx.ID)
attempts := []txmgr.TxAttempt{unloadedAttempt}
err := txStore.PreloadTxes(tests.Context(t), attempts)
require.NoError(t, err)
assert.Equal(t, etx.ID, attempts[0].Tx.ID)
})`
$DIR/core/chains/evm/txmgr/evm_tx_store_test.go: `.MustInsertUnconfirmedEthTxWithBroadcastLegacyAttempt(t, txStore, int64(7), fromAddress)`
$DIR/core/chains/evm/txmgr/evm_tx_store_test.go: `.PreloadTxes(tests.Context(t), attempts)`
$DIR/core/chains/evm/txmgr/evm_tx_store_test.go: `.Context(t)`
$DIR/core/chains/evm/txmgr/evm_tx_store_test.go: `.PreloadTxes(tests.Context(t), emptyAttempts)`
$DIR/core/chains/evm/txmgr/evm_tx_store_test.go: `.Context(t)`
$DIR/core/chains/evm/txmgr/evm_tx_store_test.go: `.NewSqlxDB(t)`
$DIR/core/chains/evm/txmgr/evm_tx_store_test.go: `.NewTestTxStore(t, db)`
$DIR/core/chains/evm/txmgr/evm_tx_store_test.go: `.NewKeyStore(t, db)`
$DIR/core/chains/evm/txmgr/evm_tx_store_test.go: `.Eth()`
$DIR/core/chains/evm/txmgr/evm_tx_store_test.go: `.NewEthClientMockWithDefaultChain(t)`
$DIR/core/chains/evm/txmgr/evm_tx_store_test.go: `.MustInsertRandomKeyReturningState(t, ethKeyStore)`
$DIR/core/chains/evm/txmgr/evm_tx_store_test.go: `.GetInProgressTxAttempts(tests.Context(t), fromAddress, ethClient.ConfiguredChainID())`
$DIR/core/chains/evm/txmgr/evm_tx_store_test.go: `.Context(t)`
$DIR/core/chains/evm/txmgr/evm_tx_store_test.go: `.ConfiguredChainID()`
$DIR/core/chains/evm/txmgr/evm_tx_store_test.go: `.NewSqlxDB(t)`
$DIR/core/chains/evm/txmgr/evm_tx_store_test.go: `.NewTestTxStore(t, db)`
$DIR/core/chains/evm/txmgr/evm_tx_store_test.go: `.NewKeyStore(t, db)`
$DIR/core/chains/evm/txmgr/evm_tx_store_test.go: `.Eth()`
$DIR/core/chains/evm/txmgr/evm_tx_store_test.go: `.NewEthClientMockWithDefaultChain(t)`
$DIR/core/chains/evm/txmgr/evm_tx_store_test.go: `.MustInsertRandomKeyReturningState(t, ethKeyStore)`
$DIR/core/chains/evm/txmgr/evm_tx_store_test.go: `.MustExec(t, db, `SET CONSTRAINTS fk_pipeline_runs_pruning_key DEFERRED`)`
$DIR/core/chains/evm/txmgr/evm_tx_store_test.go: `.MustExec(t, db, `SET CONSTRAINTS pipeline_runs_pipeline_spec_id_fkey DEFERRED`)`
$DIR/core/chains/evm/txmgr/evm_tx_store_test.go: `.NewHash()`
$DIR/core/chains/evm/txmgr/evm_tx_store_test.go: `.NewHash()`
$DIR/core/chains/evm/txmgr/evm_tx_store_test.go: `.NewHash()`
$DIR/core/chains/evm/txmgr/evm_tx_store_test.go: `.MustInsertPipelineRun(t, db)`
$DIR/core/chains/evm/txmgr/evm_tx_store_test.go: `.MustInsertUnfinishedPipelineTaskRun(t, db, run1.ID)`
$DIR/core/chains/evm/txmgr/evm_tx_store_test.go: `.MustExec(t, db, `UPDATE pipeline_runs SET state = 'suspended' WHERE id = $1`, run1.ID)`
$DIR/core/chains/evm/txmgr/evm_tx_store_test.go: `.MustInsertConfirmedEthTxWithLegacyAttempt(t, txStore, 3, 1, fromAddress)`
$DIR/core/chains/evm/txmgr/evm_tx_store_test.go: `.MustExec(t, db, `UPDATE evm.txes SET meta='{"FailOnRevert": true}'`)`
$DIR/core/chains/evm/txmgr/evm_tx_store_test.go: `.MustExec(t, db, `UPDATE evm.txes SET pipeline_task_run_id = $1, min_confirmations = $2, signal_callback = TRUE WHERE id = $3`, &tr1.ID, minConfirmations, etx1.ID)`
$DIR/core/chains/evm/txmgr/evm_tx_store_test.go: `.MustInsertPipelineRunWithStatus(t, db, 0, pipeline.RunStatusCompleted, 0)`
$DIR/core/chains/evm/txmgr/evm_tx_store_test.go: `.MustInsertUnfinishedPipelineTaskRun(t, db, run2.ID)`
$DIR/core/chains/evm/txmgr/evm_tx_store_test.go: `.MustInsertConfirmedEthTxWithLegacyAttempt(t, txStore, 4, 1, fromAddress)`
$DIR/core/chains/evm/txmgr/evm_tx_store_test.go: `.MustExec(t, db, `UPDATE evm.txes SET meta='{"FailOnRevert": false}'`)`
$DIR/core/chains/evm/txmgr/evm_tx_store_test.go: `.MustExec(t, db, `UPDATE evm.txes SET pipeline_task_run_id = $1, min_confirmations = $2, signal_callback = TRUE, callback_completed = TRUE WHERE id = $3`, &tr2.ID, minConfirmations, etx2.ID)`
$DIR/core/chains/evm/txmgr/evm_tx_store_test.go: `.MustInsertPipelineRun(t, db)`
$DIR/core/chains/evm/txmgr/evm_tx_store_test.go: `.MustInsertUnfinishedPipelineTaskRun(t, db, run3.ID)`
$DIR/core/chains/evm/txmgr/evm_tx_store_test.go: `.MustExec(t, db, `UPDATE pipeline_runs SET state = 'suspended' WHERE id = $1`, run3.ID)`
$DIR/core/chains/evm/txmgr/evm_tx_store_test.go: `.MustInsertConfirmedEthTxWithLegacyAttempt(t, txStore, 5, 1, fromAddress)`
$DIR/core/chains/evm/txmgr/evm_tx_store_test.go: `.MustExec(t, db, `UPDATE evm.txes SET meta='{"FailOnRevert": false}'`)`
$DIR/core/chains/evm/txmgr/evm_tx_store_test.go: `.MustExec(t, db, `UPDATE evm.txes SET pipeline_task_run_id = $1, min_confirmations = $2, signal_callback = TRUE WHERE id = $3`, &tr3.ID, minConfirmations, etx3.ID)`
$DIR/core/chains/evm/txmgr/evm_tx_store_test.go: `.MustInsertConfirmedEthTxWithLegacyAttempt(t, txStore, 6, 1, fromAddress)`
$DIR/core/chains/evm/txmgr/evm_tx_store_test.go: `.MustExec(t, db, `UPDATE evm.txes SET min_confirmations = $1 WHERE id = $2`, minConfirmations, etx4.ID)`
$DIR/core/chains/evm/txmgr/evm_tx_store_test.go: `.MustInsertConfirmedEthTxWithLegacyAttempt(t, txStore, 7, 1, fromAddress)`
$DIR/core/chains/evm/txmgr/evm_tx_store_test.go: `.MustExec(t, db, `UPDATE evm.txes SET min_confirmations = $1 WHERE id = $2`, minConfirmations, etx5.ID)`
$DIR/core/chains/evm/txmgr/evm_tx_store_test.go: `.FindTxesPendingCallback(tests.Context(t), head.Number, ethClient.ConfiguredChainID())`
$DIR/core/chains/evm/txmgr/evm_tx_store_test.go: `.Context(t)`
$DIR/core/chains/evm/txmgr/evm_tx_store_test.go: `.ConfiguredChainID()`
$DIR/core/chains/evm/txmgr/evm_tx_store_test.go: `.NewSqlxDB(t)`
$DIR/core/chains/evm/txmgr/evm_tx_store_test.go: `.NewTestTxStore(t, db)`
$DIR/core/chains/evm/txmgr/evm_tx_store_test.go: `.NewKeyStore(t, db)`
$DIR/core/chains/evm/txmgr/evm_tx_store_test.go: `.Eth()`
$DIR/core/chains/evm/txmgr/evm_tx_store_test.go: `.MustInsertRandomKeyReturningState(t, ethKeyStore)`
$DIR/core/chains/evm/txmgr/evm_tx_store_test.go: `.Run("returns nil if no results", func(t *testing.T) {
idempotencyKey := "777"
etx, err := txStore.FindTxWithIdempotencyKey(tests.Context(t), idempotencyKey, big.NewInt(0))
require.NoError(t, err)
assert.Nil(t, etx)
})`
$DIR/core/chains/evm/txmgr/evm_tx_store_test.go: `.FindTxWithIdempotencyKey(tests.Context(t), idempotencyKey, big.NewInt(0))`
$DIR/core/chains/evm/txmgr/evm_tx_store_test.go: `.Context(t)`
$DIR/core/chains/evm/txmgr/evm_tx_store_test.go: `.NewInt(0)`
$DIR/core/chains/evm/txmgr/evm_tx_store_test.go: `.EVM()`
$DIR/core/chains/evm/txmgr/evm_tx_store_test.go: `.ChainID()`
$DIR/core/chains/evm/txmgr/evm_tx_store_test.go: `.NewInt(0)`
$DIR/core/chains/evm/txmgr/evm_tx_store_test.go: `.FindTxWithIdempotencyKey(tests.Context(t), idempotencyKey, big.NewInt(0))`
$DIR/core/chains/evm/txmgr/evm_tx_store_test.go: `.Context(t)`
$DIR/core/chains/evm/txmgr/evm_tx_store_test.go: `.NewInt(0)`
$DIR/core/chains/evm/txmgr/evm_tx_store_test.go: `.NewSqlxDB(t)`
$DIR/core/chains/evm/txmgr/evm_tx_store_test.go: `.NewTestTxStore(t, db)`
$DIR/core/chains/evm/txmgr/evm_tx_store_test.go: `.NewKeyStore(t, db)`
$DIR/core/chains/evm/txmgr/evm_tx_store_test.go: `.Eth()`
$DIR/core/chains/evm/txmgr/evm_tx_store_test.go: `.MustInsertRandomKeyReturningState(t, ethKeyStore)`
$DIR/core/chains/evm/txmgr/evm_tx_store_test.go: `.Run("returns nil if no results", func(t *testing.T) {
etx, err := txStore.FindTxWithSequence(tests.Context(t), fromAddress, evmtypes.Nonce(777))
require.NoError(t, err)
assert.Nil(t, etx)
})`
$DIR/core/chains/evm/txmgr/evm_tx_store_test.go: `.FindTxWithSequence(tests.Context(t), fromAddress, evmtypes.Nonce(777))`
$DIR/core/chains/evm/txmgr/evm_tx_store_test.go: `.Context(t)`
$DIR/core/chains/evm/txmgr/evm_tx_store_test.go: `.Nonce(777)`
$DIR/core/chains/evm/txmgr/evm_tx_store_test.go: `.MustInsertConfirmedEthTxWithLegacyAttempt(t, txStore, 777, 1, fromAddress)`
$DIR/core/chains/evm/txmgr/evm_tx_store_test.go: `.FindTxWithSequence(tests.Context(t), fromAddress, evmtypes.Nonce(777))`
$DIR/core/chains/evm/txmgr/evm_tx_store_test.go: `.Context(t)`
$DIR/core/chains/evm/txmgr/evm_tx_store_test.go: `.Nonce(777)`
$DIR/core/chains/evm/txmgr/evm_tx_store_test.go: `.NewSqlxDB(t)`
$DIR/core/chains/evm/txmgr/evm_tx_store_test.go: `.NewTestTxStore(t, db)`
$DIR/core/chains/evm/txmgr/evm_tx_store_test.go: `.NewKeyStore(t, db)`
$DIR/core/chains/evm/txmgr/evm_tx_store_test.go: `.Eth()`
$DIR/core/chains/evm/txmgr/evm_tx_store_test.go: `.MustInsertRandomKeyReturningState(t, ethKeyStore)`
$DIR/core/chains/evm/txmgr/evm_tx_store_test.go: `.Context(t)`
$DIR/core/chains/evm/txmgr/evm_tx_store_test.go: `.FindTxWithAttempts(ctx, etx.ID)`
$DIR/core/chains/evm/txmgr/evm_tx_store_test.go: `.UpdateTxForRebroadcast(tests.Context(t), etx, attempt)`
$DIR/core/chains/evm/txmgr/evm_tx_store_test.go: `.Context(t)`
$DIR/core/chains/evm/txmgr/evm_tx_store_test.go: `.FindTxWithAttempts(ctx, etx.ID)`
$DIR/core/chains/evm/txmgr/evm_tx_store_test.go: `.NewSqlxDB(t)`
$DIR/core/chains/evm/txmgr/evm_tx_store_test.go: `.NewTestTxStore(t, db)`
$DIR/core/chains/evm/txmgr/evm_tx_store_test.go: `.NewEthClientMockWithDefaultChain(t)`
$DIR/core/chains/evm/txmgr/evm_tx_store_test.go: `.Run("confirmed tx not past finality_depth", func(t *testing.T) {
confirmedAddr := cltest.MustGenerateRandomKey(t).Address
tx := mustInsertConfirmedEthTxWithReceipt(t, txStore, confirmedAddr, 123, 1)
finalized, err := txStore.IsTxFinalized(tests.Context(t), 2, tx.ID, ethClient.ConfiguredChainID())
require.NoError(t, err)
require.False(t, finalized)
})`
$DIR/core/chains/evm/txmgr/evm_tx_store_test.go: `.MustGenerateRandomKey(t)`
$DIR/core/chains/evm/txmgr/evm_tx_store_test.go: `.IsTxFinalized(tests.Context(t), 2, tx.ID, ethClient.ConfiguredChainID())`
$DIR/core/chains/evm/txmgr/evm_tx_store_test.go: `.Context(t)`
$DIR/core/chains/evm/txmgr/evm_tx_store_test.go: `.ConfiguredChainID()`
$DIR/core/chains/evm/txmgr/evm_tx_store_test.go: `.MustGenerateRandomKey(t)`
$DIR/core/chains/evm/txmgr/evm_tx_store_test.go: `.IsTxFinalized(tests.Context(t), 10, tx.ID, ethClient.ConfiguredChainID())`
$DIR/core/chains/evm/txmgr/evm_tx_store_test.go: `.Context(t)`
$DIR/core/chains/evm/txmgr/evm_tx_store_test.go: `.ConfiguredChainID()`
$DIR/core/chains/evm/txmgr/evm_tx_store_test.go: `.NewSqlxDB(t)`
$DIR/core/chains/evm/txmgr/evm_tx_store_test.go: `.NewTestTxStore(t, db)`
$DIR/core/chains/evm/txmgr/evm_tx_store_test.go: `.NewKeyStore(t, db)`
$DIR/core/chains/evm/txmgr/evm_tx_store_test.go: `.Eth()`
$DIR/core/chains/evm/txmgr/evm_tx_store_test.go: `.NewEthClientMockWithDefaultChain(t)`
$DIR/core/chains/evm/txmgr/evm_tx_store_test.go: `.MustInsertRandomKeyReturningState(t, ethKeyStore)`
$DIR/core/chains/evm/txmgr/evm_tx_store_test.go: `.NewHash()`
$DIR/core/chains/evm/txmgr/evm_tx_store_test.go: `.NewHash()`
$DIR/core/chains/evm/txmgr/evm_tx_store_test.go: `.NewHash()`
$DIR/core/chains/evm/txmgr/evm_tx_store_test.go: `.FindTransactionsConfirmedInBlockRange(tests.Context(t), head.Number, 8, ethClient.ConfiguredChainID())`
$DIR/core/chains/evm/txmgr/evm_tx_store_test.go: `.Context(t)`
$DIR/core/chains/evm/txmgr/evm_tx_store_test.go: `.ConfiguredChainID()`
$DIR/core/chains/evm/txmgr/evm_tx_store_test.go: `.NewSqlxDB(t)`
$DIR/core/chains/evm/txmgr/evm_tx_store_test.go: `.NewTestTxStore(t, db)`
$DIR/core/chains/evm/txmgr/evm_tx_store_test.go: `.NewKeyStore(t, db)`
$DIR/core/chains/evm/txmgr/evm_tx_store_test.go: `.Eth()`
$DIR/core/chains/evm/txmgr/evm_tx_store_test.go: `.NewEthClientMockWithDefaultChain(t)`
$DIR/core/chains/evm/txmgr/evm_tx_store_test.go: `.MustInsertRandomKeyReturningState(t, ethKeyStore)`
$DIR/core/chains/evm/txmgr/evm_tx_store_test.go: `.Run("no unconfirmed eth txes", func(t *testing.T) {
broadcastAt, err := txStore.FindEarliestUnconfirmedBroadcastTime(tests.Context(t), ethClient.ConfiguredChainID())
require.NoError(t, err)
require.False(t, broadcastAt.Valid)
})`
$DIR/core/chains/evm/txmgr/evm_tx_store_test.go: `.FindEarliestUnconfirmedBroadcastTime(tests.Context(t), ethClient.ConfiguredChainID())`
$DIR/core/chains/evm/txmgr/evm_tx_store_test.go: `.Context(t)`
$DIR/core/chains/evm/txmgr/evm_tx_store_test.go: `.ConfiguredChainID()`
$DIR/core/chains/evm/txmgr/evm_tx_store_test.go: `.MustInsertUnconfirmedEthTx(t, txStore, 123, fromAddress)`
$DIR/core/chains/evm/txmgr/evm_tx_store_test.go: `.FindEarliestUnconfirmedBroadcastTime(tests.Context(t), ethClient.ConfiguredChainID())`
$DIR/core/chains/evm/txmgr/evm_tx_store_test.go: `.Context(t)`
$DIR/core/chains/evm/txmgr/evm_tx_store_test.go: `.ConfiguredChainID()`
$DIR/core/chains/evm/txmgr/evm_tx_store_test.go: `.NewSqlxDB(t)`
$DIR/core/chains/evm/txmgr/evm_tx_store_test.go: `.NewTestTxStore(t, db)`
$DIR/core/chains/evm/txmgr/evm_tx_store_test.go: `.NewKeyStore(t, db)`
$DIR/core/chains/evm/txmgr/evm_tx_store_test.go: `.Eth()`
$DIR/core/chains/evm/txmgr/evm_tx_store_test.go: `.NewEthClientMockWithDefaultChain(t)`
$DIR/core/chains/evm/txmgr/evm_tx_store_test.go: `.MustInsertRandomKeyReturningState(t, ethKeyStore)`
$DIR/core/chains/evm/txmgr/evm_tx_store_test.go: `.MustInsertRandomKeyReturningState(t, ethKeyStore)`
$DIR/core/chains/evm/txmgr/evm_tx_store_test.go: `.Run("no earliest unconfirmed tx block", func(t *testing.T) {
earliestBlock, err := txStore.FindEarliestUnconfirmedTxAttemptBlock(tests.Context(t), ethClient.ConfiguredChainID())
require.NoError(t, err)
require.False(t, earliestBlock.Valid)
})`
$DIR/core/chains/evm/txmgr/evm_tx_store_test.go: `.FindEarliestUnconfirmedTxAttemptBlock(tests.Context(t), ethClient.ConfiguredChainID())`
$DIR/core/chains/evm/txmgr/evm_tx_store_test.go: `.Context(t)`
$DIR/core/chains/evm/txmgr/evm_tx_store_test.go: `.ConfiguredChainID()`
$DIR/core/chains/evm/txmgr/evm_tx_store_test.go: `.Now()`
$DIR/core/chains/evm/txmgr/evm_tx_store_test.go: `.Now()`
$DIR/core/chains/evm/txmgr/evm_tx_store_test.go: `.Add(time.Minute)`
$DIR/core/chains/evm/txmgr/evm_tx_store_test.go: `.UpdateTxsUnconfirmed(tests.Context(t), []int64{tx.ID})`
$DIR/core/chains/evm/txmgr/evm_tx_store_test.go: `.Context(t)`
$DIR/core/chains/evm/txmgr/evm_tx_store_test.go: `.FindEarliestUnconfirmedTxAttemptBlock(tests.Context(t), ethClient.ConfiguredChainID())`
$DIR/core/chains/evm/txmgr/evm_tx_store_test.go: `.Context(t)`
$DIR/core/chains/evm/txmgr/evm_tx_store_test.go: `.ConfiguredChainID()`
$DIR/core/chains/evm/txmgr/evm_tx_store_test.go: `.Context(t)`
$DIR/core/chains/evm/txmgr/evm_tx_store_test.go: `.NewSqlxDB(t)`
$DIR/core/chains/evm/txmgr/evm_tx_store_test.go: `.NewTestTxStore(t, db)`
$DIR/core/chains/evm/txmgr/evm_tx_store_test.go: `.NewKeyStore(t, db)`
$DIR/core/chains/evm/txmgr/evm_tx_store_test.go: `.Eth()`
$DIR/core/chains/evm/txmgr/evm_tx_store_test.go: `.MustInsertRandomKeyReturningState(t, ethKeyStore)`
$DIR/core/chains/evm/txmgr/evm_tx_store_test.go: `.ParseDuration("5s")`
$DIR/core/chains/evm/txmgr/evm_tx_store_test.go: `.Now()`
$DIR/core/chains/evm/txmgr/evm_tx_store_test.go: `.SaveInsufficientFundsAttempt(tests.Context(t), defaultDuration, &etx.TxAttempts[0], now)`
$DIR/core/chains/evm/txmgr/evm_tx_store_test.go: `.Context(t)`
$DIR/core/chains/evm/txmgr/evm_tx_store_test.go: `.FindTxAttempt(ctx, etx.TxAttempts[0].Hash)`
$DIR/core/chains/evm/txmgr/evm_tx_store_test.go: `.Context(t)`
$DIR/core/chains/evm/txmgr/evm_tx_store_test.go: `.NewSqlxDB(t)`
$DIR/core/chains/evm/txmgr/evm_tx_store_test.go: `.NewTestTxStore(t, db)`
$DIR/core/chains/evm/txmgr/evm_tx_store_test.go: `.NewKeyStore(t, db)`
$DIR/core/chains/evm/txmgr/evm_tx_store_test.go: `.Eth()`
$DIR/core/chains/evm/txmgr/evm_tx_store_test.go: `.MustInsertRandomKeyReturningState(t, ethKeyStore)`
$DIR/core/chains/evm/txmgr/evm_tx_store_test.go: `.ParseDuration("5s")`
$DIR/core/chains/evm/txmgr/evm_tx_store_test.go: `.Now()`
$DIR/core/chains/evm/txmgr/evm_tx_store_test.go: `.SaveSentAttempt(tests.Context(t), defaultDuration, &etx.TxAttempts[0], now)`
$DIR/core/chains/evm/txmgr/evm_tx_store_test.go: `.Context(t)`
$DIR/core/chains/evm/txmgr/evm_tx_store_test.go: `.FindTxAttempt(ctx, etx.TxAttempts[0].Hash)`
$DIR/core/chains/evm/txmgr/evm_tx_store_test.go: `.Context(t)`
$DIR/core/chains/evm/txmgr/evm_tx_store_test.go: `.NewSqlxDB(t)`
$DIR/core/chains/evm/txmgr/evm_tx_store_test.go: `.NewTestTxStore(t, db)`
$DIR/core/chains/evm/txmgr/evm_tx_store_test.go: `.NewKeyStore(t, db)`
$DIR/core/chains/evm/txmgr/evm_tx_store_test.go: `.Eth()`
$DIR/core/chains/evm/txmgr/evm_tx_store_test.go: `.MustInsertRandomKeyReturningState(t, ethKeyStore)`
$DIR/core/chains/evm/txmgr/evm_tx_store_test.go: `.ParseDuration("5s")`
$DIR/core/chains/evm/txmgr/evm_tx_store_test.go: `.Now()`
$DIR/core/chains/evm/txmgr/evm_tx_store_test.go: `.SaveConfirmedMissingReceiptAttempt(tests.Context(t), defaultDuration, &etx.TxAttempts[0], now)`
$DIR/core/chains/evm/txmgr/evm_tx_store_test.go: `.Context(t)`
$DIR/core/chains/evm/txmgr/evm_tx_store_test.go: `.FindTxWithAttempts(ctx, etx.ID)`
$DIR/core/chains/evm/txmgr/evm_tx_store_test.go: `.Context(t)`
$DIR/core/chains/evm/txmgr/evm_tx_store_test.go: `.NewSqlxDB(t)`
$DIR/core/chains/evm/txmgr/evm_tx_store_test.go: `.NewTestTxStore(t, db)`
$DIR/core/chains/evm/txmgr/evm_tx_store_test.go: `.NewKeyStore(t, db)`
$DIR/core/chains/evm/txmgr/evm_tx_store_test.go: `.Eth()`
$DIR/core/chains/evm/txmgr/evm_tx_store_test.go: `.MustInsertRandomKeyReturningState(t, ethKeyStore)`
$DIR/core/chains/evm/txmgr/evm_tx_store_test.go: `.DeleteInProgressAttempt(tests.Context(t), etx.TxAttempts[0])`
$DIR/core/chains/evm/txmgr/evm_tx_store_test.go: `.Context(t)`
$DIR/core/chains/evm/txmgr/evm_tx_store_test.go: `.FindTxAttempt(ctx, attempt.Hash)`
$DIR/core/chains/evm/txmgr/evm_tx_store_test.go: `.Context(t)`
$DIR/core/chains/evm/txmgr/evm_tx_store_test.go: `.NewSqlxDB(t)`
$DIR/core/chains/evm/txmgr/evm_tx_store_test.go: `.NewTestTxStore(t, db)`
$DIR/core/chains/evm/txmgr/evm_tx_store_test.go: `.NewKeyStore(t, db)`
$DIR/core/chains/evm/txmgr/evm_tx_store_test.go: `.Eth()`
$DIR/core/chains/evm/txmgr/evm_tx_store_test.go: `.MustInsertRandomKeyReturningState(t, ethKeyStore)`
$DIR/core/chains/evm/txmgr/evm_tx_store_test.go: `.Run("saves new in_progress attempt if attempt is new", func(t *testing.T) {
etx := cltest.MustInsertUnconfirmedEthTx(t, txStore, 1, fromAddress)
attempt := cltest.NewLegacyEthTxAttempt(t, etx.ID)
require.Equal(t, int64(0), attempt.ID)
err := txStore.SaveInProgressAttempt(tests.Context(t), &attempt)
require.NoError(t, err)
attemptResult, err := txStore.FindTxAttempt(ctx, attempt.Hash)
require.NoError(t, err)
assert.Equal(t, txmgrtypes.TxAttemptInProgress, attemptResult.State)
})`
$DIR/core/chains/evm/txmgr/evm_tx_store_test.go: `.MustInsertUnconfirmedEthTx(t, txStore, 1, fromAddress)`
$DIR/core/chains/evm/txmgr/evm_tx_store_test.go: `.NewLegacyEthTxAttempt(t, etx.ID)`
$DIR/core/chains/evm/txmgr/evm_tx_store_test.go: `.SaveInProgressAttempt(tests.Context(t), &attempt)`
$DIR/core/chains/evm/txmgr/evm_tx_store_test.go: `.Context(t)`
$DIR/core/chains/evm/txmgr/evm_tx_store_test.go: `.FindTxAttempt(ctx, attempt.Hash)`
$DIR/core/chains/evm/txmgr/evm_tx_store_test.go: `.SaveInProgressAttempt(tests.Context(t), &attempt)`
$DIR/core/chains/evm/txmgr/evm_tx_store_test.go: `.Context(t)`
$DIR/core/chains/evm/txmgr/evm_tx_store_test.go: `.FindTxAttempt(ctx, attempt.Hash)`
$DIR/core/chains/evm/txmgr/evm_tx_store_test.go: `.Context(t)`
$DIR/core/chains/evm/txmgr/evm_tx_store_test.go: `.NewSqlxDB(t)`
$DIR/core/chains/evm/txmgr/evm_tx_store_test.go: `.NewTestTxStore(t, db)`
$DIR/core/chains/evm/txmgr/evm_tx_store_test.go: `.NewKeyStore(t, db)`
$DIR/core/chains/evm/txmgr/evm_tx_store_test.go: `.Eth()`
$DIR/core/chains/evm/txmgr/evm_tx_store_test.go: `.NewEthClientMockWithDefaultChain(t)`
$DIR/core/chains/evm/txmgr/evm_tx_store_test.go: `.MustInsertRandomKeyReturningState(t, ethKeyStore)`
$DIR/core/chains/evm/txmgr/evm_tx_store_test.go: `.SetBroadcastBeforeBlockNum(tests.Context(t), currentBlockNum, ethClient.ConfiguredChainID())`
$DIR/core/chains/evm/txmgr/evm_tx_store_test.go: `.Context(t)`
$DIR/core/chains/evm/txmgr/evm_tx_store_test.go: `.ConfiguredChainID()`
$DIR/core/chains/evm/txmgr/evm_tx_store_test.go: `.FindTxWithAttempts(ctx, etx.ID)`
$DIR/core/chains/evm/txmgr/evm_tx_store_test.go: `.SetBroadcastBeforeBlockNum(tests.Context(t), currentBlockNum+1, ethClient.ConfiguredChainID())`
$DIR/core/chains/evm/txmgr/evm_tx_store_test.go: `.Context(t)`
$DIR/core/chains/evm/txmgr/evm_tx_store_test.go: `.ConfiguredChainID()`
$DIR/core/chains/evm/txmgr/evm_tx_store_test.go: `.FindTxsRequiringGasBump(tests.Context(t), fromAddress, newBlock, gasBumpThreshold, int64(0), ethClient.ConfiguredChainID())`
$DIR/core/chains/evm/txmgr/evm_tx_store_test.go: `.Context(t)`
$DIR/core/chains/evm/txmgr/evm_tx_store_test.go: `.ConfiguredChainID()`
$DIR/core/chains/evm/txmgr/evm_tx_store_test.go: `.NewSqlxDB(t)`
$DIR/core/chains/evm/txmgr/evm_tx_store_test.go: `.NewTestTxStore(t, db)`
$DIR/core/chains/evm/txmgr/evm_tx_store_test.go: `.Context(t)`
$DIR/core/chains/evm/txmgr/evm_tx_store_test.go: `.NewKeyStore(t, db)`
$DIR/core/chains/evm/txmgr/evm_tx_store_test.go: `.Eth()`
$DIR/core/chains/evm/txmgr/evm_tx_store_test.go: `.MustInsertRandomKeyReturningState(t, ethKeyStore)`
$DIR/core/chains/evm/txmgr/evm_tx_store_test.go: `.MustInsertRandomKeyReturningState(t, ethKeyStore)`
$DIR/core/chains/evm/txmgr/evm_tx_store_test.go: `.MustInsertUnconfirmedEthTxWithBroadcastLegacyAttempt(t, txStore, 2, fromAddress)`
$DIR/core/chains/evm/txmgr/evm_tx_store_test.go: `.NewLegacyEthTxAttempt(t, etx3.ID)`
$DIR/core/chains/evm/txmgr/evm_tx_store_test.go: `.NewWeiI(100)`
$DIR/core/chains/evm/txmgr/evm_tx_store_test.go: `.MustInsertUnconfirmedEthTxWithBroadcastLegacyAttempt(t, txStore, 3, fromAddress)`
$DIR/core/chains/evm/txmgr/evm_tx_store_test.go: `.MustInsertConfirmedEthTxWithLegacyAttempt(t, txStore, 4, 100, fromAddress)`
$DIR/core/chains/evm/txmgr/evm_tx_store_test.go: `.Run("returns all eth_txes with at least one attempt that is in insufficient_eth state", func(t *testing.T) {
etxs, err := txStore.FindTxsRequiringResubmissionDueToInsufficientFunds(tests.Context(t), fromAddress, testutils.FixtureChainID)
require.NoError(t, err)
assert.Len(t, etxs, 3)
assert.Equal(t, *etx1.Sequence, *etxs[0].Sequence)
assert.Equal(t, etx1.ID, etxs[0].ID)
assert.Equal(t, *etx2.Sequence, *etxs[1].Sequence)
assert.Equal(t, etx2.ID, etxs[1].ID)
assert.Equal(t, *etx3.Sequence, *etxs[2].Sequence)
assert.Equal(t, etx3.ID, etxs[2].ID)
})`
$DIR/core/chains/evm/txmgr/evm_tx_store_test.go: `.FindTxsRequiringResubmissionDueToInsufficientFunds(tests.Context(t), fromAddress, testutils.FixtureChainID)`
$DIR/core/chains/evm/txmgr/evm_tx_store_test.go: `.Context(t)`
$DIR/core/chains/evm/txmgr/evm_tx_store_test.go: `.Run("does not return eth_txes with different chain ID", func(t *testing.T) {
etxs, err := txStore.FindTxsRequiringResubmissionDueToInsufficientFunds(tests.Context(t), fromAddress, big.NewInt(42))
require.NoError(t, err)
assert.Len(t, etxs, 0)
})`
$DIR/core/chains/evm/txmgr/evm_tx_store_test.go: `.FindTxsRequiringResubmissionDueToInsufficientFunds(tests.Context(t), fromAddress, big.NewInt(42))`
$DIR/core/chains/evm/txmgr/evm_tx_store_test.go: `.Context(t)`
$DIR/core/chains/evm/txmgr/evm_tx_store_test.go: `.NewInt(42)`
$DIR/core/chains/evm/txmgr/evm_tx_store_test.go: `.MustExec(t, db, `UPDATE evm.txes SET state='confirmed' WHERE id = $1`, etx1.ID)`
$DIR/core/chains/evm/txmgr/evm_tx_store_test.go: `.MustExec(t, db, `UPDATE evm.txes SET state='fatal_error', nonce=NULL, error='foo', broadcast_at=NULL, initial_broadcast_at=NULL WHERE id = $1`, etx2.ID)`
$DIR/core/chains/evm/txmgr/evm_tx_store_test.go: `.FindTxsRequiringResubmissionDueToInsufficientFunds(tests.Context(t), fromAddress, testutils.FixtureChainID)`
$DIR/core/chains/evm/txmgr/evm_tx_store_test.go: `.Context(t)`
$DIR/core/chains/evm/txmgr/evm_tx_store_test.go: `.NewSqlxDB(t)`
$DIR/core/chains/evm/txmgr/evm_tx_store_test.go: `.NewTestTxStore(t, db)`
$DIR/core/chains/evm/txmgr/evm_tx_store_test.go: `.Context(t)`
$DIR/core/chains/evm/txmgr/evm_tx_store_test.go: `.NewKeyStore(t, db)`
$DIR/core/chains/evm/txmgr/evm_tx_store_test.go: `.Eth()`
$DIR/core/chains/evm/txmgr/evm_tx_store_test.go: `.NewEthClientMockWithDefaultChain(t)`
$DIR/core/chains/evm/txmgr/evm_tx_store_test.go: `.MustInsertRandomKeyReturningState(t, ethKeyStore)`
$DIR/core/chains/evm/txmgr/evm_tx_store_test.go: `.Run("successfully mark errored transactions", func(t *testing.T) {
etx := mustInsertConfirmedMissingReceiptEthTxWithLegacyAttempt(t, txStore, 1, 7, time.Now(), fromAddress)
err := txStore.MarkOldTxesMissingReceiptAsErrored(tests.Context(t), 10, 2, ethClient.ConfiguredChainID())
require.NoError(t, err)
etx, err = txStore.FindTxWithAttempts(ctx, etx.ID)
require.NoError(t, err)
assert.Equal(t, txmgrcommon.TxFatalError, etx.State)
})`
$DIR/core/chains/evm/txmgr/evm_tx_store_test.go: `.Now()`
$DIR/core/chains/evm/txmgr/evm_tx_store_test.go: `.MarkOldTxesMissingReceiptAsErrored(tests.Context(t), 10, 2, ethClient.ConfiguredChainID())`
$DIR/core/chains/evm/txmgr/evm_tx_store_test.go: `.Context(t)`
$DIR/core/chains/evm/txmgr/evm_tx_store_test.go: `.ConfiguredChainID()`
$DIR/core/chains/evm/txmgr/evm_tx_store_test.go: `.FindTxWithAttempts(ctx, etx.ID)`
$DIR/core/chains/evm/txmgr/evm_tx_store_test.go: `.Now()`
$DIR/core/chains/evm/txmgr/evm_tx_store_test.go: `.MarkOldTxesMissingReceiptAsErrored(tests.Context(t), 10, 2, ethClient.ConfiguredChainID())`
$DIR/core/chains/evm/txmgr/evm_tx_store_test.go: `.Context(t)`
$DIR/core/chains/evm/txmgr/evm_tx_store_test.go: `.ConfiguredChainID()`
$DIR/core/chains/evm/txmgr/evm_tx_store_test.go: `.FindTxWithAttempts(ctx, etx.ID)`
$DIR/core/chains/evm/txmgr/evm_tx_store_test.go: `.Context(t)`
$DIR/core/chains/evm/txmgr/evm_tx_store_test.go: `.NewSqlxDB(t)`
$DIR/core/chains/evm/txmgr/evm_tx_store_test.go: `.NewTestTxStore(t, db)`
$DIR/core/chains/evm/txmgr/evm_tx_store_test.go: `.NewKeyStore(t, db)`
$DIR/core/chains/evm/txmgr/evm_tx_store_test.go: `.Eth()`
$DIR/core/chains/evm/txmgr/evm_tx_store_test.go: `.MustInsertRandomKeyReturningState(t, ethKeyStore)`
$DIR/core/chains/evm/txmgr/evm_tx_store_test.go: `.Run("load eth tx attempt", func(t *testing.T) {
etx := mustInsertConfirmedMissingReceiptEthTxWithLegacyAttempt(t, txStore, 1, 7, time.Now(), fromAddress)
etx.TxAttempts = []txmgr.TxAttempt{}
err := txStore.LoadTxesAttempts(ctx, []*txmgr.Tx{&etx})
require.NoError(t, err)
assert.Len(t, etx.TxAttempts, 1)
})`
$DIR/core/chains/evm/txmgr/evm_tx_store_test.go: `.Now()`
$DIR/core/chains/evm/txmgr/evm_tx_store_test.go: `.LoadTxesAttempts(ctx, []*txmgr.Tx{&etx})`
$DIR/core/chains/evm/txmgr/evm_tx_store_test.go: `.Now()`
$DIR/core/chains/evm/txmgr/evm_tx_store_test.go: `.NewDynamicFeeEthTxAttempt(t, etx.ID)`
$DIR/core/chains/evm/txmgr/evm_tx_store_test.go: `.FromTxAttempt(&newAttempt)`
$DIR/core/chains/evm/txmgr/evm_tx_store_test.go: `.BeginTx(ctx, nil)`
$DIR/core/chains/evm/txmgr/evm_tx_store_test.go: `.DataSource(db)`
$DIR/core/chains/evm/txmgr/evm_tx_store_test.go: `.BindNamed(insertEthTxAttemptSQL, dbAttempt)`
$DIR/core/chains/evm/txmgr/evm_tx_store_test.go: `.ExecContext(ctx, query, args...)`
$DIR/core/chains/evm/txmgr/evm_tx_store_test.go: `.LoadTxesAttempts(ctx, []*txmgr.Tx{&etx})`
$DIR/core/chains/evm/txmgr/evm_tx_store_test.go: `.Commit()`
$DIR/core/chains/evm/txmgr/evm_tx_store_test.go: `.LoadTxesAttempts(ctx, []*txmgr.Tx{&etx})`
$DIR/core/chains/evm/txmgr/evm_tx_store_test.go: `.Context(t)`
$DIR/core/chains/evm/txmgr/evm_tx_store_test.go: `.NewSqlxDB(t)`
$DIR/core/chains/evm/txmgr/evm_tx_store_test.go: `.NewTestTxStore(t, db)`
$DIR/core/chains/evm/txmgr/evm_tx_store_test.go: `.NewKeyStore(t, db)`
$DIR/core/chains/evm/txmgr/evm_tx_store_test.go: `.Eth()`
$DIR/core/chains/evm/txmgr/evm_tx_store_test.go: `.MustInsertRandomKeyReturningState(t, ethKeyStore)`
$DIR/core/chains/evm/txmgr/evm_tx_store_test.go: `.NewDynamicFeeEthTxAttempt(t, etx.ID)`
$DIR/core/chains/evm/txmgr/evm_tx_store_test.go: `.SaveReplacementInProgressAttempt(tests.Context(t), oldAttempt, &newAttempt)`
$DIR/core/chains/evm/txmgr/evm_tx_store_test.go: `.Context(t)`
$DIR/core/chains/evm/txmgr/evm_tx_store_test.go: `.FindTxWithAttempts(ctx, etx.ID)`
$DIR/core/chains/evm/txmgr/evm_tx_store_test.go: `.NewSqlxDB(t)`
$DIR/core/chains/evm/txmgr/evm_tx_store_test.go: `.NewTestTxStore(t, db)`
$DIR/core/chains/evm/txmgr/evm_tx_store_test.go: `.NewKeyStore(t, db)`
$DIR/core/chains/evm/txmgr/evm_tx_store_test.go: `.Eth()`
$DIR/core/chains/evm/txmgr/evm_tx_store_test.go: `.NewEthClientMockWithDefaultChain(t)`
$DIR/core/chains/evm/txmgr/evm_tx_store_test.go: `.MustInsertRandomKeyReturningState(t, ethKeyStore)`
$DIR/core/chains/evm/txmgr/evm_tx_store_test.go: `.Run("cannot find unstarted tx", func(t *testing.T) {
mustInsertInProgressEthTxWithAttempt(t, txStore, 13, fromAddress)
resultEtx, err := txStore.FindNextUnstartedTransactionFromAddress(tests.Context(t), fromAddress, ethClient.ConfiguredChainID())
assert.ErrorIs(t, err, sql.ErrNoRows)
assert.Nil(t, resultEtx)
})`
$DIR/core/chains/evm/txmgr/evm_tx_store_test.go: `.FindNextUnstartedTransactionFromAddress(tests.Context(t), fromAddress, ethClient.ConfiguredChainID())`
$DIR/core/chains/evm/txmgr/evm_tx_store_test.go: `.Context(t)`
$DIR/core/chains/evm/txmgr/evm_tx_store_test.go: `.ConfiguredChainID()`
$DIR/core/chains/evm/txmgr/evm_tx_store_test.go: `.FindNextUnstartedTransactionFromAddress(tests.Context(t), fromAddress, ethClient.ConfiguredChainID())`
$DIR/core/chains/evm/txmgr/evm_tx_store_test.go: `.Context(t)`
$DIR/core/chains/evm/txmgr/evm_tx_store_test.go: `.ConfiguredChainID()`
$DIR/core/chains/evm/txmgr/evm_tx_store_test.go: `.Context(t)`
$DIR/core/chains/evm/txmgr/evm_tx_store_test.go: `.NewSqlxDB(t)`
$DIR/core/chains/evm/txmgr/evm_tx_store_test.go: `.NewTestTxStore(t, db)`
$DIR/core/chains/evm/txmgr/evm_tx_store_test.go: `.NewKeyStore(t, db)`
$DIR/core/chains/evm/txmgr/evm_tx_store_test.go: `.Eth()`
$DIR/core/chains/evm/txmgr/evm_tx_store_test.go: `.MustInsertRandomKeyReturningState(t, ethKeyStore)`
$DIR/core/chains/evm/txmgr/evm_tx_store_test.go: `.StringFrom("no more toilet paper")`
$DIR/core/chains/evm/txmgr/evm_tx_store_test.go: `.UpdateTxFatalError(tests.Context(t), &etx)`
$DIR/core/chains/evm/txmgr/evm_tx_store_test.go: `.Context(t)`
$DIR/core/chains/evm/txmgr/evm_tx_store_test.go: `.FindTxWithAttempts(ctx, etx.ID)`
$DIR/core/chains/evm/txmgr/evm_tx_store_test.go: `.Context(t)`
$DIR/core/chains/evm/txmgr/evm_tx_store_test.go: `.NewSqlxDB(t)`
$DIR/core/chains/evm/txmgr/evm_tx_store_test.go: `.NewTestTxStore(t, db)`
$DIR/core/chains/evm/txmgr/evm_tx_store_test.go: `.NewKeyStore(t, db)`
$DIR/core/chains/evm/txmgr/evm_tx_store_test.go: `.Eth()`
$DIR/core/chains/evm/txmgr/evm_tx_store_test.go: `.MustInsertRandomKeyReturningState(t, ethKeyStore)`
$DIR/core/chains/evm/txmgr/evm_tx_store_test.go: `.Now()`
$DIR/core/chains/evm/txmgr/evm_tx_store_test.go: `.UpdateTxAttemptInProgressToBroadcast(tests.Context(t), &etx, attempt, txmgrtypes.TxAttemptBroadcast)`
$DIR/core/chains/evm/txmgr/evm_tx_store_test.go: `.Context(t)`
$DIR/core/chains/evm/txmgr/evm_tx_store_test.go: `.FindTxAttempt(ctx, attempt.Hash)`
$DIR/core/chains/evm/txmgr/evm_tx_store_test.go: `.Context(t)`
$DIR/core/chains/evm/txmgr/evm_tx_store_test.go: `.NewSqlxDB(t)`
$DIR/core/chains/evm/txmgr/evm_tx_store_test.go: `.NewTestTxStore(t, db)`
$DIR/core/chains/evm/txmgr/evm_tx_store_test.go: `.NewKeyStore(t, db)`
$DIR/core/chains/evm/txmgr/evm_tx_store_test.go: `.Eth()`
$DIR/core/chains/evm/txmgr/evm_tx_store_test.go: `.MustInsertRandomKeyReturningState(t, ethKeyStore)`
$DIR/core/chains/evm/txmgr/evm_tx_store_test.go: `.Nonce(123)`
$DIR/core/chains/evm/txmgr/evm_tx_store_test.go: `.Run("update successful", func(t *testing.T) {
etx := mustCreateUnstartedGeneratedTx(t, txStore, fromAddress, testutils.FixtureChainID)
etx.Sequence = &nonce
attempt := cltest.NewLegacyEthTxAttempt(t, etx.ID)
err := txStore.UpdateTxUnstartedToInProgress(tests.Context(t), &etx, &attempt)
require.NoError(t, err)
etx, err = txStore.FindTxWithAttempts(ctx, etx.ID)
require.NoError(t, err)
assert.Equal(t, txmgrcommon.TxInProgress, etx.State)
assert.Len(t, etx.TxAttempts, 1)
})`
$DIR/core/chains/evm/txmgr/evm_tx_store_test.go: `.NewLegacyEthTxAttempt(t, etx.ID)`
$DIR/core/chains/evm/txmgr/evm_tx_store_test.go: `.UpdateTxUnstartedToInProgress(tests.Context(t), &etx, &attempt)`
$DIR/core/chains/evm/txmgr/evm_tx_store_test.go: `.Context(t)`
$DIR/core/chains/evm/txmgr/evm_tx_store_test.go: `.FindTxWithAttempts(ctx, etx.ID)`
$DIR/core/chains/evm/txmgr/evm_tx_store_test.go: `.Run("update fails because tx is removed", func(t *testing.T) {
etx := mustCreateUnstartedGeneratedTx(t, txStore, fromAddress, testutils.FixtureChainID)
etx.Sequence = &nonce
attempt := cltest.NewLegacyEthTxAttempt(t, etx.ID)
_, err := db.ExecContext(ctx, "DELETE FROM evm.txes WHERE id = $1", etx.ID)
require.NoError(t, err)
err = txStore.UpdateTxUnstartedToInProgress(tests.Context(t), &etx, &attempt)
require.ErrorContains(t, err, "tx removed")
})`
$DIR/core/chains/evm/txmgr/evm_tx_store_test.go: `.NewLegacyEthTxAttempt(t, etx.ID)`
$DIR/core/chains/evm/txmgr/evm_tx_store_test.go: `.ExecContext(ctx, "DELETE FROM evm.txes WHERE id = $1", etx.ID)`
$DIR/core/chains/evm/txmgr/evm_tx_store_test.go: `.UpdateTxUnstartedToInProgress(tests.Context(t), &etx, &attempt)`
$DIR/core/chains/evm/txmgr/evm_tx_store_test.go: `.Context(t)`
$DIR/core/chains/evm/txmgr/evm_tx_store_test.go: `.NewSqlxDB(t)`
$DIR/core/chains/evm/txmgr/evm_tx_store_test.go: `.NewTestTxStore(t, db)`
$DIR/core/chains/evm/txmgr/evm_tx_store_test.go: `.NewKeyStore(t, db)`
$DIR/core/chains/evm/txmgr/evm_tx_store_test.go: `.Eth()`
$DIR/core/chains/evm/txmgr/evm_tx_store_test.go: `.MustInsertRandomKeyReturningState(t, ethKeyStore)`
$DIR/core/chains/evm/txmgr/evm_tx_store_test.go: `.Run("update replaces abandoned tx with same hash", func(t *testing.T) {
etx := mustInsertInProgressEthTxWithAttempt(t, txStore, nonce, fromAddress)
require.Len(t, etx.TxAttempts, 1)
zero := commonconfig.MustNewDuration(time.Duration(0))
evmCfg := configtest.NewGeneralConfig(t, func(c *chainlink.Config, s *chainlink.Secrets) {
c.EVM[0].Chain.Transactions.ReaperInterval = zero
c.EVM[0].Chain.Transactions.ReaperThreshold = zero
c.EVM[0].Chain.Transactions.ResendAfterThreshold = zero
})
ccfg := evmtest.NewChainScopedConfig(t, evmCfg)
evmTxmCfg := txmgr.NewEvmTxmConfig(ccfg.EVM())
ec := evmtest.NewEthClientMockWithDefaultChain(t)
txMgr := txmgr.NewEvmTxm(ec.ConfiguredChainID(), evmTxmCfg, ccfg.EVM().Transactions(), nil, logger.Test(t), nil, nil,
nil, txStore, nil, nil, nil, nil)
err := txMgr.XXXTestAbandon(fromAddress) // mark transaction as abandoned
require.NoError(t, err)
etx2 := mustCreateUnstartedGeneratedTx(t, txStore, fromAddress, testutils.FixtureChainID)
etx2.Sequence = &nonce
attempt2 := cltest.NewLegacyEthTxAttempt(t, etx2.ID)
attempt2.Hash = etx.TxAttempts[0].Hash
// Even though this will initially fail due to idx_eth_tx_attempts_hash constraint, because the conflicting tx has been abandoned
// it should succeed after removing the abandoned attempt and retrying the insert
err = txStore.UpdateTxUnstartedToInProgress(tests.Context(t), &etx2, &attempt2)
require.NoError(t, err)
})`
$DIR/core/chains/evm/txmgr/evm_tx_store_test.go: `.MustNewDuration(time.Duration(0))`
$DIR/core/chains/evm/txmgr/evm_tx_store_test.go: `.Duration(0)`
$DIR/core/chains/evm/txmgr/evm_tx_store_test.go: `.NewGeneralConfig(t, func(c *chainlink.Config, s *chainlink.Secrets) {
c.EVM[0].Chain.Transactions.ReaperInterval = zero
c.EVM[0].Chain.Transactions.ReaperThreshold = zero
c.EVM[0].Chain.Transactions.ResendAfterThreshold = zero
})`
$DIR/core/chains/evm/txmgr/evm_tx_store_test.go: `.NewChainScopedConfig(t, evmCfg)`
$DIR/core/chains/evm/txmgr/evm_tx_store_test.go: `.NewEvmTxmConfig(ccfg.EVM())`
$DIR/core/chains/evm/txmgr/evm_tx_store_test.go: `.EVM()`
$DIR/core/chains/evm/txmgr/evm_tx_store_test.go: `.NewEthClientMockWithDefaultChain(t)`
$DIR/core/chains/evm/txmgr/evm_tx_store_test.go: `.NewEvmTxm(ec.ConfiguredChainID(), evmTxmCfg, ccfg.EVM().Transactions(), nil, logger.Test(t), nil, nil,
nil, txStore, nil, nil, nil, nil)`
$DIR/core/chains/evm/txmgr/evm_tx_store_test.go: `.ConfiguredChainID()`
$DIR/core/chains/evm/txmgr/evm_tx_store_test.go: `.EVM()`
$DIR/core/chains/evm/txmgr/evm_tx_store_test.go: `.Transactions()`
$DIR/core/chains/evm/txmgr/evm_tx_store_test.go: `.Test(t)`
$DIR/core/chains/evm/txmgr/evm_tx_store_test.go: `.XXXTestAbandon(fromAddress)`
$DIR/core/chains/evm/txmgr/evm_tx_store_test.go: `.NewLegacyEthTxAttempt(t, etx2.ID)`
$DIR/core/chains/evm/txmgr/evm_tx_store_test.go: `.UpdateTxUnstartedToInProgress(tests.Context(t), &etx2, &attempt2)`
$DIR/core/chains/evm/txmgr/evm_tx_store_test.go: `.Context(t)`
$DIR/core/chains/evm/txmgr/evm_tx_store_test.go: `.MustInsertRandomKeyReturningState(t, ethKeyStore)`
$DIR/core/chains/evm/txmgr/evm_tx_store_test.go: `.UpdateTxUnstartedToInProgress(tests.Context(t), &etx, &etx.TxAttempts[0])`
$DIR/core/chains/evm/txmgr/evm_tx_store_test.go: `.Context(t)`
$DIR/core/chains/evm/txmgr/evm_tx_store_test.go: `.NewTestTxStore(t, db)`
$DIR/core/chains/evm/txmgr/evm_tx_store_test.go: `.NewSqlxDB(t)`
$DIR/core/chains/evm/txmgr/evm_tx_store_test.go: `.NewTestTxStore(t, db)`
$DIR/core/chains/evm/txmgr/evm_tx_store_test.go: `.NewKeyStore(t, db)`
$DIR/core/chains/evm/txmgr/evm_tx_store_test.go: `.Eth()`
$DIR/core/chains/evm/txmgr/evm_tx_store_test.go: `.MustInsertRandomKeyReturningState(t, ethKeyStore)`
$DIR/core/chains/evm/txmgr/evm_tx_store_test.go: `.Run("gets 0 in progress eth transaction", func(t *testing.T) {
etxResult, err := txStore.GetTxInProgress(tests.Context(t), fromAddress)
require.NoError(t, err)
require.Nil(t, etxResult)
})`
$DIR/core/chains/evm/txmgr/evm_tx_store_test.go: `.GetTxInProgress(tests.Context(t), fromAddress)`
$DIR/core/chains/evm/txmgr/evm_tx_store_test.go: `.Context(t)`
$DIR/core/chains/evm/txmgr/evm_tx_store_test.go: `.GetTxInProgress(tests.Context(t), fromAddress)`
$DIR/core/chains/evm/txmgr/evm_tx_store_test.go: `.Context(t)`
$DIR/core/chains/evm/txmgr/evm_tx_store_test.go: `.NewSqlxDB(t)`
$DIR/core/chains/evm/txmgr/evm_tx_store_test.go: `.NewTestTxStore(t, db)`
$DIR/core/chains/evm/txmgr/evm_tx_store_test.go: `.NewKeyStore(t, db)`
$DIR/core/chains/evm/txmgr/evm_tx_store_test.go: `.Eth()`
$DIR/core/chains/evm/txmgr/evm_tx_store_test.go: `.NewEthClientMockWithDefaultChain(t)`
$DIR/core/chains/evm/txmgr/evm_tx_store_test.go: `.MustInsertRandomKeyReturningState(t, ethKeyStore)`
$DIR/core/chains/evm/txmgr/evm_tx_store_test.go: `.MustInsertRandomKeyReturningState(t, ethKeyStore)`
$DIR/core/chains/evm/txmgr/evm_tx_store_test.go: `.Run("get 0 abandoned transactions", func(t *testing.T) {
txes, err := txStore.GetAbandonedTransactionsByBatch(tests.Context(t), ethClient.ConfiguredChainID(), enabledAddrs, 0, 10)
require.NoError(t, err)
require.Empty(t, txes)
})`
$DIR/core/chains/evm/txmgr/evm_tx_store_test.go: `.GetAbandonedTransactionsByBatch(tests.Context(t), ethClient.ConfiguredChainID(), enabledAddrs, 0, 10)`
$DIR/core/chains/evm/txmgr/evm_tx_store_test.go: `.Context(t)`
$DIR/core/chains/evm/txmgr/evm_tx_store_test.go: `.ConfiguredChainID()`
$DIR/core/chains/evm/txmgr/evm_tx_store_test.go: `.Run("do not return enabled addresses", func(t *testing.T) {
_ = mustInsertInProgressEthTxWithAttempt(t, txStore, 123, enabled)
_ = mustCreateUnstartedGeneratedTx(t, txStore, enabled, ethClient.ConfiguredChainID())
txes, err := txStore.GetAbandonedTransactionsByBatch(tests.Context(t), ethClient.ConfiguredChainID(), enabledAddrs, 0, 10)
require.NoError(t, err)
require.Empty(t, txes)
})`
$DIR/core/chains/evm/txmgr/evm_tx_store_test.go: `.ConfiguredChainID()`
$DIR/core/chains/evm/txmgr/evm_tx_store_test.go: `.GetAbandonedTransactionsByBatch(tests.Context(t), ethClient.ConfiguredChainID(), enabledAddrs, 0, 10)`
$DIR/core/chains/evm/txmgr/evm_tx_store_test.go: `.Context(t)`
$DIR/core/chains/evm/txmgr/evm_tx_store_test.go: `.ConfiguredChainID()`
$DIR/core/chains/evm/txmgr/evm_tx_store_test.go: `.Run("get in progress, unstarted, and unconfirmed eth transactions", func(t *testing.T) {
inProgressTx := mustInsertInProgressEthTxWithAttempt(t, txStore, 123, fromAddress)
unstartedTx := mustCreateUnstartedGeneratedTx(t, txStore, fromAddress, ethClient.ConfiguredChainID())
txes, err := txStore.GetAbandonedTransactionsByBatch(tests.Context(t), ethClient.ConfiguredChainID(), enabledAddrs, 0, 10)
require.NoError(t, err)
require.Len(t, txes, 2)
for _, tx := range txes {
require.True(t, tx.ID == inProgressTx.ID || tx.ID == unstartedTx.ID)
}
})`
$DIR/core/chains/evm/txmgr/evm_tx_store_test.go: `.ConfiguredChainID()`
$DIR/core/chains/evm/txmgr/evm_tx_store_test.go: `.GetAbandonedTransactionsByBatch(tests.Context(t), ethClient.ConfiguredChainID(), enabledAddrs, 0, 10)`
$DIR/core/chains/evm/txmgr/evm_tx_store_test.go: `.Context(t)`
$DIR/core/chains/evm/txmgr/evm_tx_store_test.go: `.ConfiguredChainID()`
$DIR/core/chains/evm/txmgr/evm_tx_store_test.go: `.ConfiguredChainID()`
$DIR/core/chains/evm/txmgr/evm_tx_store_test.go: `.Batch(func(offset, limit uint) (count uint, err error) {
batchTxes, err := txStore.GetAbandonedTransactionsByBatch(tests.Context(t), ethClient.ConfiguredChainID(), enabledAddrs, offset, limit)
require.NoError(t, err)
allTxes = append(allTxes, batchTxes...)
return uint(len(batchTxes)), nil
}, batchSize)`
$DIR/core/chains/evm/txmgr/evm_tx_store_test.go: `.GetAbandonedTransactionsByBatch(tests.Context(t), ethClient.ConfiguredChainID(), enabledAddrs, offset, limit)`
$DIR/core/chains/evm/txmgr/evm_tx_store_test.go: `.Context(t)`
$DIR/core/chains/evm/txmgr/evm_tx_store_test.go: `.ConfiguredChainID()`
$DIR/core/chains/evm/txmgr/evm_tx_store_test.go: `.NewSqlxDB(t)`
$DIR/core/chains/evm/txmgr/evm_tx_store_test.go: `.NewTestTxStore(t, db)`
$DIR/core/chains/evm/txmgr/evm_tx_store_test.go: `.NewKeyStore(t, db)`
$DIR/core/chains/evm/txmgr/evm_tx_store_test.go: `.Eth()`
$DIR/core/chains/evm/txmgr/evm_tx_store_test.go: `.MustInsertRandomKeyReturningState(t, ethKeyStore)`
$DIR/core/chains/evm/txmgr/evm_tx_store_test.go: `.Run("no transaction", func(t *testing.T) {
tx, err := txStore.GetTxByID(tests.Context(t), int64(0))
require.NoError(t, err)
require.Nil(t, tx)
})`
$DIR/core/chains/evm/txmgr/evm_tx_store_test.go: `.GetTxByID(tests.Context(t), int64(0))`
$DIR/core/chains/evm/txmgr/evm_tx_store_test.go: `.Context(t)`
$DIR/core/chains/evm/txmgr/evm_tx_store_test.go: `.GetTxByID(tests.Context(t), insertedTx.ID)`
$DIR/core/chains/evm/txmgr/evm_tx_store_test.go: `.Context(t)`
$DIR/core/chains/evm/txmgr/evm_tx_store_test.go: `.NewSqlxDB(t)`
$DIR/core/chains/evm/txmgr/evm_tx_store_test.go: `.NewTestTxStore(t, db)`
$DIR/core/chains/evm/txmgr/evm_tx_store_test.go: `.NewKeyStore(t, db)`
$DIR/core/chains/evm/txmgr/evm_tx_store_test.go: `.Eth()`
$DIR/core/chains/evm/txmgr/evm_tx_store_test.go: `.MustInsertRandomKeyReturningState(t, ethKeyStore)`
$DIR/core/chains/evm/txmgr/evm_tx_store_test.go: `.Run("gets 0 fatal eth transactions", func(t *testing.T) {
txes, err := txStore.GetFatalTransactions(tests.Context(t))
require.NoError(t, err)
require.Empty(t, txes)
})`
$DIR/core/chains/evm/txmgr/evm_tx_store_test.go: `.GetFatalTransactions(tests.Context(t))`
$DIR/core/chains/evm/txmgr/evm_tx_store_test.go: `.Context(t)`
$DIR/core/chains/evm/txmgr/evm_tx_store_test.go: `.GetFatalTransactions(tests.Context(t))`
$DIR/core/chains/evm/txmgr/evm_tx_store_test.go: `.Context(t)`
$DIR/core/chains/evm/txmgr/evm_tx_store_test.go: `.NewSqlxDB(t)`
$DIR/core/chains/evm/txmgr/evm_tx_store_test.go: `.NewTestTxStore(t, db)`
$DIR/core/chains/evm/txmgr/evm_tx_store_test.go: `.NewKeyStore(t, db)`
$DIR/core/chains/evm/txmgr/evm_tx_store_test.go: `.Eth()`
$DIR/core/chains/evm/txmgr/evm_tx_store_test.go: `.NewEthClientMockWithDefaultChain(t)`
$DIR/core/chains/evm/txmgr/evm_tx_store_test.go: `.MustInsertRandomKeyReturningState(t, ethKeyStore)`
$DIR/core/chains/evm/txmgr/evm_tx_store_test.go: `.Run("no in progress eth transaction", func(t *testing.T) {
exists, err := txStore.HasInProgressTransaction(tests.Context(t), fromAddress, ethClient.ConfiguredChainID())
require.NoError(t, err)
require.False(t, exists)
})`
$DIR/core/chains/evm/txmgr/evm_tx_store_test.go: `.HasInProgressTransaction(tests.Context(t), fromAddress, ethClient.ConfiguredChainID())`
$DIR/core/chains/evm/txmgr/evm_tx_store_test.go: `.Context(t)`
$DIR/core/chains/evm/txmgr/evm_tx_store_test.go: `.ConfiguredChainID()`
$DIR/core/chains/evm/txmgr/evm_tx_store_test.go: `.HasInProgressTransaction(tests.Context(t), fromAddress, ethClient.ConfiguredChainID())`
$DIR/core/chains/evm/txmgr/evm_tx_store_test.go: `.Context(t)`
$DIR/core/chains/evm/txmgr/evm_tx_store_test.go: `.ConfiguredChainID()`
$DIR/core/chains/evm/txmgr/evm_tx_store_test.go: `.NewSqlxDB(t)`
$DIR/core/chains/evm/txmgr/evm_tx_store_test.go: `.NewTestTxStore(t, db)`
$DIR/core/chains/evm/txmgr/evm_tx_store_test.go: `.NewKeyStore(t, db)`
$DIR/core/chains/evm/txmgr/evm_tx_store_test.go: `.Eth()`
$DIR/core/chains/evm/txmgr/evm_tx_store_test.go: `.MustInsertRandomKey(t, ethKeyStore)`
$DIR/core/chains/evm/txmgr/evm_tx_store_test.go: `.MustInsertRandomKey(t, ethKeyStore)`
$DIR/core/chains/evm/txmgr/evm_tx_store_test.go: `.MustInsertUnconfirmedEthTxWithBroadcastLegacyAttempt(t, txStore, 0, otherAddress)`
$DIR/core/chains/evm/txmgr/evm_tx_store_test.go: `.MustInsertUnconfirmedEthTxWithBroadcastLegacyAttempt(t, txStore, 0, fromAddress)`
$DIR/core/chains/evm/txmgr/evm_tx_store_test.go: `.MustInsertUnconfirmedEthTxWithBroadcastLegacyAttempt(t, txStore, 1, fromAddress)`
$DIR/core/chains/evm/txmgr/evm_tx_store_test.go: `.MustInsertUnconfirmedEthTxWithBroadcastLegacyAttempt(t, txStore, 2, fromAddress)`
$DIR/core/chains/evm/txmgr/evm_tx_store_test.go: `.CountUnconfirmedTransactions(tests.Context(t), fromAddress, testutils.FixtureChainID)`
$DIR/core/chains/evm/txmgr/evm_tx_store_test.go: `.Context(t)`
$DIR/core/chains/evm/txmgr/evm_tx_store_test.go: `.NewSqlxDB(t)`
$DIR/core/chains/evm/txmgr/evm_tx_store_test.go: `.NewTestTxStore(t, db)`
$DIR/core/chains/evm/txmgr/evm_tx_store_test.go: `.NewKeyStore(t, db)`
$DIR/core/chains/evm/txmgr/evm_tx_store_test.go: `.Eth()`
$DIR/core/chains/evm/txmgr/evm_tx_store_test.go: `.MustInsertRandomKey(t, ethKeyStore)`
$DIR/core/chains/evm/txmgr/evm_tx_store_test.go: `.MustInsertRandomKey(t, ethKeyStore)`
$DIR/core/chains/evm/txmgr/evm_tx_store_test.go: `.MustInsertRandomKey(t, ethKeyStore)`
$DIR/core/chains/evm/txmgr/evm_tx_store_test.go: `.MustInsertUnconfirmedEthTxWithBroadcastLegacyAttempt(t, txStore, 0, fromAddress1)`
$DIR/core/chains/evm/txmgr/evm_tx_store_test.go: `.MustInsertUnconfirmedEthTxWithBroadcastLegacyAttempt(t, txStore, 1, fromAddress2)`
$DIR/core/chains/evm/txmgr/evm_tx_store_test.go: `.MustInsertUnconfirmedEthTxWithBroadcastLegacyAttempt(t, txStore, 2, fromAddress3)`
$DIR/core/chains/evm/txmgr/evm_tx_store_test.go: `.CountTransactionsByState(tests.Context(t), txmgrcommon.TxUnconfirmed, testutils.FixtureChainID)`
$DIR/core/chains/evm/txmgr/evm_tx_store_test.go: `.Context(t)`
$DIR/core/chains/evm/txmgr/evm_tx_store_test.go: `.NewSqlxDB(t)`
$DIR/core/chains/evm/txmgr/evm_tx_store_test.go: `.NewTestTxStore(t, db)`
$DIR/core/chains/evm/txmgr/evm_tx_store_test.go: `.NewKeyStore(t, db)`
$DIR/core/chains/evm/txmgr/evm_tx_store_test.go: `.Eth()`
$DIR/core/chains/evm/txmgr/evm_tx_store_test.go: `.MustInsertRandomKey(t, ethKeyStore)`
$DIR/core/chains/evm/txmgr/evm_tx_store_test.go: `.MustInsertRandomKey(t, ethKeyStore)`
$DIR/core/chains/evm/txmgr/evm_tx_store_test.go: `.MustInsertUnconfirmedEthTxWithBroadcastLegacyAttempt(t, txStore, 2, fromAddress)`
$DIR/core/chains/evm/txmgr/evm_tx_store_test.go: `.CountUnstartedTransactions(tests.Context(t), fromAddress, testutils.FixtureChainID)`
$DIR/core/chains/evm/txmgr/evm_tx_store_test.go: `.Context(t)`
$DIR/core/chains/evm/txmgr/evm_tx_store_test.go: `.NewSqlxDB(t)`
$DIR/core/chains/evm/txmgr/evm_tx_store_test.go: `.NewTestTxStore(t, db)`
$DIR/core/chains/evm/txmgr/evm_tx_store_test.go: `.NewKeyStore(t, db)`
$DIR/core/chains/evm/txmgr/evm_tx_store_test.go: `.Eth()`
$DIR/core/chains/evm/txmgr/evm_tx_store_test.go: `.MustInsertRandomKey(t, ethKeyStore)`
$DIR/core/chains/evm/txmgr/evm_tx_store_test.go: `.MustInsertRandomKey(t, ethKeyStore)`
$DIR/core/chains/evm/txmgr/evm_tx_store_test.go: `.NewAddress()`
$DIR/core/chains/evm/txmgr/evm_tx_store_test.go: `.Int(assets.NewEthValue(142))`
$DIR/core/chains/evm/txmgr/evm_tx_store_test.go: `.NewEthValue(142)`
$DIR/core/chains/evm/txmgr/evm_tx_store_test.go: `.Run("with no eth_txes returns nil", func(t *testing.T) {
err := txStore.CheckTxQueueCapacity(tests.Context(t), fromAddress, maxUnconfirmedTransactions, testutils.FixtureChainID)
require.NoError(t, err)
})`
$DIR/core/chains/evm/txmgr/evm_tx_store_test.go: `.CheckTxQueueCapacity(tests.Context(t), fromAddress, maxUnconfirmedTransactions, testutils.FixtureChainID)`
$DIR/core/chains/evm/txmgr/evm_tx_store_test.go: `.Context(t)`
$DIR/core/chains/evm/txmgr/evm_tx_store_test.go: `.Run("with eth_txes from another address returns nil", func(t *testing.T) {
err := txStore.CheckTxQueueCapacity(tests.Context(t), fromAddress, maxUnconfirmedTransactions, testutils.FixtureChainID)
require.NoError(t, err)
})`
$DIR/core/chains/evm/txmgr/evm_tx_store_test.go: `.CheckTxQueueCapacity(tests.Context(t), fromAddress, maxUnconfirmedTransactions, testutils.FixtureChainID)`
$DIR/core/chains/evm/txmgr/evm_tx_store_test.go: `.Context(t)`
$DIR/core/chains/evm/txmgr/evm_tx_store_test.go: `.Run("ignores fatally_errored transactions", func(t *testing.T) {
err := txStore.CheckTxQueueCapacity(tests.Context(t), fromAddress, maxUnconfirmedTransactions, testutils.FixtureChainID)
require.NoError(t, err)
})`
$DIR/core/chains/evm/txmgr/evm_tx_store_test.go: `.CheckTxQueueCapacity(tests.Context(t), fromAddress, maxUnconfirmedTransactions, testutils.FixtureChainID)`
$DIR/core/chains/evm/txmgr/evm_tx_store_test.go: `.Context(t)`
$DIR/core/chains/evm/txmgr/evm_tx_store_test.go: `.Nonce(n)`
$DIR/core/chains/evm/txmgr/evm_tx_store_test.go: `.MustInsertUnconfirmedEthTxWithBroadcastLegacyAttempt(t, txStore, n, fromAddress)`
$DIR/core/chains/evm/txmgr/evm_tx_store_test.go: `.Run("unconfirmed and in_progress transactions do not count", func(t *testing.T) {
err := txStore.CheckTxQueueCapacity(tests.Context(t), fromAddress, 1, testutils.FixtureChainID)
require.NoError(t, err)
})`
$DIR/core/chains/evm/txmgr/evm_tx_store_test.go: `.CheckTxQueueCapacity(tests.Context(t), fromAddress, 1, testutils.FixtureChainID)`
$DIR/core/chains/evm/txmgr/evm_tx_store_test.go: `.Context(t)`
$DIR/core/chains/evm/txmgr/evm_tx_store_test.go: `.MustInsertConfirmedEthTxWithLegacyAttempt(t, txStore, n, 42, fromAddress)`
$DIR/core/chains/evm/txmgr/evm_tx_store_test.go: `.Run("with many confirmed eth_txes from the same address returns nil", func(t *testing.T) {
err := txStore.CheckTxQueueCapacity(tests.Context(t), fromAddress, maxUnconfirmedTransactions, testutils.FixtureChainID)
require.NoError(t, err)
})`
$DIR/core/chains/evm/txmgr/evm_tx_store_test.go: `.CheckTxQueueCapacity(tests.Context(t), fromAddress, maxUnconfirmedTransactions, testutils.FixtureChainID)`
$DIR/core/chains/evm/txmgr/evm_tx_store_test.go: `.Context(t)`
$DIR/core/chains/evm/txmgr/evm_tx_store_test.go: `.Run("with fewer unstarted eth_txes than limit returns nil", func(t *testing.T) {
err := txStore.CheckTxQueueCapacity(tests.Context(t), fromAddress, maxUnconfirmedTransactions, testutils.FixtureChainID)
require.NoError(t, err)
})`
$DIR/core/chains/evm/txmgr/evm_tx_store_test.go: `.CheckTxQueueCapacity(tests.Context(t), fromAddress, maxUnconfirmedTransactions, testutils.FixtureChainID)`
$DIR/core/chains/evm/txmgr/evm_tx_store_test.go: `.Context(t)`
$DIR/core/chains/evm/txmgr/evm_tx_store_test.go: `.Run("with equal or more unstarted eth_txes than limit returns error", func(t *testing.T) {
err := txStore.CheckTxQueueCapacity(tests.Context(t), fromAddress, maxUnconfirmedTransactions, testutils.FixtureChainID)
require.Error(t, err)
require.Contains(t, err.Error(), fmt.Sprintf("cannot create transaction; too many unstarted transactions in the queue (2/%d). WARNING: Hitting EVM.Transactions.MaxQueued", maxUnconfirmedTransactions))
mustCreateUnstartedTx(t, txStore, fromAddress, toAddress, encodedPayload, feeLimit, value, testutils.FixtureChainID)
err = txStore.CheckTxQueueCapacity(tests.Context(t), fromAddress, maxUnconfirmedTransactions, testutils.FixtureChainID)
require.Error(t, err)
require.Contains(t, err.Error(), fmt.Sprintf("cannot create transaction; too many unstarted transactions in the queue (3/%d). WARNING: Hitting EVM.Transactions.MaxQueued", maxUnconfirmedTransactions))
})`
$DIR/core/chains/evm/txmgr/evm_tx_store_test.go: `.CheckTxQueueCapacity(tests.Context(t), fromAddress, maxUnconfirmedTransactions, testutils.FixtureChainID)`
$DIR/core/chains/evm/txmgr/evm_tx_store_test.go: `.Context(t)`
$DIR/core/chains/evm/txmgr/evm_tx_store_test.go: `.CheckTxQueueCapacity(tests.Context(t), fromAddress, maxUnconfirmedTransactions, testutils.FixtureChainID)`
$DIR/core/chains/evm/txmgr/evm_tx_store_test.go: `.Context(t)`
$DIR/core/chains/evm/txmgr/evm_tx_store_test.go: `.Run("with different chain ID ignores txes", func(t *testing.T) {
err := txStore.CheckTxQueueCapacity(tests.Context(t), fromAddress, maxUnconfirmedTransactions, big.NewInt(42))
require.NoError(t, err)
})`
$DIR/core/chains/evm/txmgr/evm_tx_store_test.go: `.CheckTxQueueCapacity(tests.Context(t), fromAddress, maxUnconfirmedTransactions, big.NewInt(42))`
$DIR/core/chains/evm/txmgr/evm_tx_store_test.go: `.Context(t)`
$DIR/core/chains/evm/txmgr/evm_tx_store_test.go: `.NewInt(42)`
$DIR/core/chains/evm/txmgr/evm_tx_store_test.go: `.CheckTxQueueCapacity(tests.Context(t), fromAddress, 0, testutils.FixtureChainID)`
$DIR/core/chains/evm/txmgr/evm_tx_store_test.go: `.Context(t)`
$DIR/core/chains/evm/txmgr/evm_tx_store_test.go: `.NewSqlxDB(t)`
$DIR/core/chains/evm/txmgr/evm_tx_store_test.go: `.NewKeyStore(t, db)`
$DIR/core/chains/evm/txmgr/evm_tx_store_test.go: `.MustInsertRandomKey(t, kst.Eth())`
$DIR/core/chains/evm/txmgr/evm_tx_store_test.go: `.Eth()`
$DIR/core/chains/evm/txmgr/evm_tx_store_test.go: `.NewAddress()`
$DIR/core/chains/evm/txmgr/evm_tx_store_test.go: `.NewEthClientMockWithDefaultChain(t)`
$DIR/core/chains/evm/txmgr/evm_tx_store_test.go: `.Run("with queue under capacity inserts eth_tx", func(t *testing.T) {
subject := uuid.New()
strategy := newMockTxStrategy(t)
strategy.On("Subject").Return(uuid.NullUUID{UUID: subject, Valid: true})
etx, err := txStore.CreateTransaction(tests.Context(t), txmgr.TxRequest{
FromAddress: fromAddress,
ToAddress: toAddress,
EncodedPayload: payload,
FeeLimit: gasLimit,
Meta: nil,
Strategy: strategy,
}, ethClient.ConfiguredChainID())
assert.NoError(t, err)
assert.Greater(t, etx.ID, int64(0))
assert.Equal(t, etx.State, txmgrcommon.TxUnstarted)
assert.Equal(t, gasLimit, etx.FeeLimit)
assert.Equal(t, fromAddress, etx.FromAddress)
assert.Equal(t, toAddress, etx.ToAddress)
assert.Equal(t, payload, etx.EncodedPayload)
assert.Equal(t, big.Int(assets.NewEthValue(0)), etx.Value)
assert.Equal(t, subject, etx.Subject.UUID)
cltest.AssertCount(t, db, "evm.txes", 1)
var dbEthTx txmgr.DbEthTx
require.NoError(t, db.Get(&dbEthTx, `SELECT * FROM evm.txes ORDER BY id ASC LIMIT 1`))
assert.Equal(t, dbEthTx.State, txmgrcommon.TxUnstarted)
assert.Equal(t, gasLimit, dbEthTx.GasLimit)
assert.Equal(t, fromAddress, dbEthTx.FromAddress)
assert.Equal(t, toAddress, dbEthTx.ToAddress)
assert.Equal(t, payload, dbEthTx.EncodedPayload)
assert.Equal(t, assets.NewEthValue(0), dbEthTx.Value)
assert.Equal(t, subject, dbEthTx.Subject.UUID)
})`
$DIR/core/chains/evm/txmgr/evm_tx_store_test.go: `.New()`
$DIR/core/chains/evm/txmgr/evm_tx_store_test.go: `.On("Subject")`
$DIR/core/chains/evm/txmgr/evm_tx_store_test.go: `.Return(uuid.NullUUID{UUID: subject, Valid: true})`
$DIR/core/chains/evm/txmgr/evm_tx_store_test.go: `.CreateTransaction(tests.Context(t), txmgr.TxRequest{
FromAddress: fromAddress,
ToAddress: toAddress,
EncodedPayload: payload,
FeeLimit: gasLimit,
Meta: nil,
Strategy: strategy,
}, ethClient.ConfiguredChainID())`
$DIR/core/chains/evm/txmgr/evm_tx_store_test.go: `.Context(t)`
$DIR/core/chains/evm/txmgr/evm_tx_store_test.go: `.ConfiguredChainID()`
$DIR/core/chains/evm/txmgr/evm_tx_store_test.go: `.AssertCount(t, db, "evm.txes", 1)`
$DIR/core/chains/evm/txmgr/evm_tx_store_test.go: `.Run("doesn't insert eth_tx if a matching tx already exists for that pipeline_task_run_id", func(t *testing.T) {
id := uuid.New()
txRequest := txmgr.TxRequest{
FromAddress: fromAddress,
ToAddress: testutils.NewAddress(),
EncodedPayload: []byte{1, 2, 3},
FeeLimit: 21000,
PipelineTaskRunID: &id,
Strategy: txmgrcommon.NewSendEveryStrategy(),
}
tx1, err := txStore.CreateTransaction(tests.Context(t), txRequest, ethClient.ConfiguredChainID())
assert.NoError(t, err)
tx2, err := txStore.CreateTransaction(tests.Context(t), txRequest, ethClient.ConfiguredChainID())
assert.NoError(t, err)
assert.Equal(t, tx1.GetID(), tx2.GetID())
})`
$DIR/core/chains/evm/txmgr/evm_tx_store_test.go: `.New()`
$DIR/core/chains/evm/txmgr/evm_tx_store_test.go: `.NewAddress()`
$DIR/core/chains/evm/txmgr/evm_tx_store_test.go: `.NewSendEveryStrategy()`
$DIR/core/chains/evm/txmgr/evm_tx_store_test.go: `.CreateTransaction(tests.Context(t), txRequest, ethClient.ConfiguredChainID())`
$DIR/core/chains/evm/txmgr/evm_tx_store_test.go: `.Context(t)`
$DIR/core/chains/evm/txmgr/evm_tx_store_test.go: `.ConfiguredChainID()`
$DIR/core/chains/evm/txmgr/evm_tx_store_test.go: `.CreateTransaction(tests.Context(t), txRequest, ethClient.ConfiguredChainID())`
$DIR/core/chains/evm/txmgr/evm_tx_store_test.go: `.Context(t)`
$DIR/core/chains/evm/txmgr/evm_tx_store_test.go: `.ConfiguredChainID()`
$DIR/core/chains/evm/txmgr/evm_tx_store_test.go: `.New()`
$DIR/core/chains/evm/txmgr/evm_tx_store_test.go: `.On("Subject")`
$DIR/core/chains/evm/txmgr/evm_tx_store_test.go: `.Return(uuid.NullUUID{UUID: subject, Valid: true})`
$DIR/core/chains/evm/txmgr/evm_tx_store_test.go: `.CreateTransaction(tests.Context(t), txmgr.TxRequest{
FromAddress: fromAddress,
ToAddress: toAddress,
EncodedPayload: payload,
FeeLimit: gasLimit,
Meta: nil,
Strategy: strategy,
SignalCallback: true,
}, ethClient.ConfiguredChainID())`
$DIR/core/chains/evm/txmgr/evm_tx_store_test.go: `.Context(t)`
$DIR/core/chains/evm/txmgr/evm_tx_store_test.go: `.ConfiguredChainID()`
$DIR/core/chains/evm/txmgr/evm_tx_store_test.go: `.AssertCount(t, db, "evm.txes", 3)`
$DIR/core/chains/evm/txmgr/evm_tx_store_test.go: `.NewSqlxDB(t)`
$DIR/core/chains/evm/txmgr/evm_tx_store_test.go: `.NewTxStore(db, logger.Test(t))`
$DIR/core/chains/evm/txmgr/evm_tx_store_test.go: `.Test(t)`
$DIR/core/chains/evm/txmgr/evm_tx_store_test.go: `.NewKeyStore(t, db)`
$DIR/core/chains/evm/txmgr/evm_tx_store_test.go: `.Eth()`
$DIR/core/chains/evm/txmgr/evm_tx_store_test.go: `.NewEthClientMockWithDefaultChain(t)`
$DIR/core/chains/evm/txmgr/evm_tx_store_test.go: `.MustInsertRandomKeyReturningState(t, ethKeyStore)`
$DIR/core/chains/evm/txmgr/evm_tx_store_test.go: `.Run("does not prune if queue has not exceeded capacity-1", func(t *testing.T) {
subject1 := uuid.New()
strategy1 := txmgrcommon.NewDropOldestStrategy(subject1, uint32(5))
for i := 0; i < 5; i++ {
mustCreateUnstartedGeneratedTx(t, txStore, fromAddress, testutils.FixtureChainID, txRequestWithStrategy(strategy1))
}
AssertCountPerSubject(t, txStore, int64(4), subject1)
})`
$DIR/core/chains/evm/txmgr/evm_tx_store_test.go: `.New()`
$DIR/core/chains/evm/txmgr/evm_tx_store_test.go: `.NewDropOldestStrategy(subject1, uint32(5))`
$DIR/core/chains/evm/txmgr/evm_tx_store_test.go: `.New()`
$DIR/core/chains/evm/txmgr/evm_tx_store_test.go: `.NewDropOldestStrategy(subject2, uint32(3))`
$DIR/core/chains/evm/txmgr/evm_tx_store_test.go: `.NewSqlxDB(t)`
$DIR/core/chains/evm/txmgr/evm_tx_store_test.go: `.NewTestTxStore(t, db)`
$DIR/core/chains/evm/txmgr/evm_tx_store_test.go: `.NewKeyStore(t, db)`
$DIR/core/chains/evm/txmgr/evm_tx_store_test.go: `.Eth()`
$DIR/core/chains/evm/txmgr/evm_tx_store_test.go: `.Context(t)`
$DIR/core/chains/evm/txmgr/evm_tx_store_test.go: `.MustInsertRandomKey(t, ethKeyStore)`
$DIR/core/chains/evm/txmgr/evm_tx_store_test.go: `.MustInsertConfirmedEthTxWithLegacyAttempt(t, txStore, 0, 1, from)`
$DIR/core/chains/evm/txmgr/evm_tx_store_test.go: `.NewHash()`
$DIR/core/chains/evm/txmgr/evm_tx_store_test.go: `.InsertReceipt(ctx, &r.Receipt)`
$DIR/core/chains/evm/txmgr/evm_tx_store_test.go: `.FindTxesWithAttemptsAndReceiptsByIdsAndState(ctx, []int64{tx.ID}, []txmgrtypes.TxState{txmgrcommon.TxConfirmed}, testutils.FixtureChainID)`
$DIR/core/chains/evm/txmgr/nonce_tracker_test.go: `client.On("ConfiguredChainID").Return(chainID)`
$DIR/core/chains/evm/txmgr/nonce_tracker_test.go: `t.Run("set next nonce using entries from tx table", func(t *testing.T) {
randNonce1 := testutils.NewRandomPositiveInt64()
randNonce2 := testutils.NewRandomPositiveInt64()
txStore.On("FindLatestSequence", mock.Anything, addr1, chainID).Return(types.Nonce(randNonce1), nil).Once()
txStore.On("FindLatestSequence", mock.Anything, addr2, chainID).Return(types.Nonce(randNonce2), nil).Once()
nonceTracker.LoadNextSequences(ctx, enabledAddresses)
seq, err := nonceTracker.GetNextSequence(ctx, addr1)
require.NoError(t, err)
require.Equal(t, types.Nonce(randNonce1+1), seq)
seq, err = nonceTracker.GetNextSequence(ctx, addr2)
require.NoError(t, err)
require.Equal(t, types.Nonce(randNonce2+1), seq)
})`
$DIR/core/chains/evm/txmgr/nonce_tracker_test.go: `txStore.On("FindLatestSequence", mock.Anything, addr1, chainID).Return(types.Nonce(randNonce1), nil).Once()`
$DIR/core/chains/evm/txmgr/nonce_tracker_test.go: `txStore.On("FindLatestSequence", mock.Anything, addr2, chainID).Return(types.Nonce(randNonce2), nil).Once()`
$DIR/core/chains/evm/txmgr/nonce_tracker_test.go: `nonceTracker.LoadNextSequences(ctx, enabledAddresses)`
$DIR/core/chains/evm/txmgr/nonce_tracker_test.go: `seq, err = nonceTracker.GetNextSequence(ctx, addr2)`
$DIR/core/chains/evm/txmgr/nonce_tracker_test.go: `txStore.On("FindLatestSequence", mock.Anything, addr1, chainID).Return(emptyNonce, errors.New("no rows")).Once()`
$DIR/core/chains/evm/txmgr/nonce_tracker_test.go: `txStore.On("FindLatestSequence", mock.Anything, addr2, chainID).Return(emptyNonce, errors.New("no rows")).Once()`
$DIR/core/chains/evm/txmgr/nonce_tracker_test.go: `client.On("PendingNonceAt", mock.Anything, addr1).Return(uint64(randNonce1), nil).Once()`
$DIR/core/chains/evm/txmgr/nonce_tracker_test.go: `client.On("PendingNonceAt", mock.Anything, addr2).Return(uint64(randNonce2), nil).Once()`
$DIR/core/chains/evm/txmgr/nonce_tracker_test.go: `nonceTracker.LoadNextSequences(ctx, enabledAddresses)`
$DIR/core/chains/evm/txmgr/nonce_tracker_test.go: `seq, err = nonceTracker.GetNextSequence(ctx, addr2)`
$DIR/core/chains/evm/txmgr/nonce_tracker_test.go: `client.On("ConfiguredChainID").Return(chainID)`
$DIR/core/chains/evm/txmgr/nonce_tracker_test.go: `t.Run("throws error if RPC call fails", func(t *testing.T) {
client.On("PendingNonceAt", mock.Anything, addr).Return(uint64(0), errors.New("RPC unavailable")).Once()
err := nonceTracker.SyncOnChain(ctx, addr, types.Nonce(2))
require.Error(t, err)
})`
$DIR/core/chains/evm/txmgr/nonce_tracker_test.go: `client.On("PendingNonceAt", mock.Anything, addr).Return(uint64(0), errors.New("RPC unavailable")).Once()`
$DIR/core/chains/evm/txmgr/nonce_tracker_test.go: `t.Run("uses local nonce instead of on-chain nonce if on-chain nonce is lower", func(t *testing.T) {
nonce := 2
newNonce := 5
client.On("PendingNonceAt", mock.Anything, addr).Return(uint64(nonce), nil).Once()
enabledAddresses := []common.Address{}
nonceTracker.LoadNextSequences(ctx, enabledAddresses)
// syncOnChain will set the next sequence even if the address is not present in the map
err := nonceTracker.SyncOnChain(ctx, addr, types.Nonce(newNonce))
require.NoError(t, err)
seq, err := nonceTracker.GetNextSequence(ctx, addr)
require.NoError(t, err)
require.Equal(t, types.Nonce(newNonce), seq)
})`
$DIR/core/chains/evm/txmgr/nonce_tracker_test.go: `client.On("PendingNonceAt", mock.Anything, addr).Return(uint64(nonce), nil).Once()`
$DIR/core/chains/evm/txmgr/nonce_tracker_test.go: `nonceTracker.LoadNextSequences(ctx, enabledAddresses)`
$DIR/core/chains/evm/txmgr/nonce_tracker_test.go: `client.On("PendingNonceAt", mock.Anything, addr).Return(uint64(nonce), nil).Once()`
$DIR/core/chains/evm/txmgr/nonce_tracker_test.go: `nonceTracker.LoadNextSequences(ctx, enabledAddresses)`
$DIR/core/chains/evm/txmgr/nonce_tracker_test.go: `client.On("ConfiguredChainID").Return(chainID)`
$DIR/core/chains/evm/txmgr/nonce_tracker_test.go: `t.Run("syncs sequence successfully", func(t *testing.T) {
txStoreNonce := 2
onChainNonce := 3
txStore.On("FindLatestSequence", mock.Anything, addr, chainID).Return(types.Nonce(txStoreNonce), nil).Once()
nonceTracker.LoadNextSequences(ctx, enabledAddresses)
var chStop services.StopChan
client.On("PendingNonceAt", mock.Anything, addr).Return(uint64(onChainNonce), nil).Once()
nonceTracker.SyncSequence(ctx, addr, chStop)
seq, err := nonceTracker.GetNextSequence(ctx, addr)
require.NoError(t, err)
require.Equal(t, types.Nonce(onChainNonce), seq)
})`
$DIR/core/chains/evm/txmgr/nonce_tracker_test.go: `txStore.On("FindLatestSequence", mock.Anything, addr, chainID).Return(types.Nonce(txStoreNonce), nil).Once()`
$DIR/core/chains/evm/txmgr/nonce_tracker_test.go: `nonceTracker.LoadNextSequences(ctx, enabledAddresses)`
$DIR/core/chains/evm/txmgr/nonce_tracker_test.go: `client.On("PendingNonceAt", mock.Anything, addr).Return(uint64(onChainNonce), nil).Once()`
$DIR/core/chains/evm/txmgr/nonce_tracker_test.go: `nonceTracker.SyncSequence(ctx, addr, chStop)`
$DIR/core/chains/evm/txmgr/nonce_tracker_test.go: `txStore.On("FindLatestSequence", mock.Anything, addr, chainID).Return(types.Nonce(txStoreNonce), nil).Once()`
$DIR/core/chains/evm/txmgr/nonce_tracker_test.go: `nonceTracker.LoadNextSequences(ctx, enabledAddresses)`
$DIR/core/chains/evm/txmgr/nonce_tracker_test.go: `client.On("PendingNonceAt", mock.Anything, addr).Return(uint64(0), errors.New("RPC unavailable")).Once()`
$DIR/core/chains/evm/txmgr/nonce_tracker_test.go: `client.On("PendingNonceAt", mock.Anything, addr).Return(uint64(onChainNonce), nil).Once()`
$DIR/core/chains/evm/txmgr/nonce_tracker_test.go: `nonceTracker.SyncSequence(ctx, addr, chStop)`
$DIR/core/chains/evm/txmgr/nonce_tracker_test.go: `client.On("ConfiguredChainID").Return(chainID)`
$DIR/core/chains/evm/txmgr/nonce_tracker_test.go: `t.Run("fails to get sequence if address doesn't exist in map", func(t *testing.T) {
_, err := nonceTracker.GetNextSequence(ctx, addr)
require.Error(t, err)
})`
$DIR/core/chains/evm/txmgr/nonce_tracker_test.go: `t.Run("fails to get sequence if address doesn't exist in map and is disabled", func(t *testing.T) {
_, err := nonceTracker.GetNextSequence(ctx, addr)
require.Error(t, err)
require.Contains(t, err.Error(), fmt.Sprintf("address disabled: %s", addr.Hex()))
})`
$DIR/core/chains/evm/txmgr/nonce_tracker_test.go: `t.Run("fails to get sequence if address is enabled, doesn't exist in map, and getSequenceForAddr fails", func(t *testing.T) {
enabledAddresses := []common.Address{addr}
txStore.On("FindLatestSequence", mock.Anything, addr, chainID).Return(types.Nonce(0), errors.New("no rows")).Twice()
client.On("PendingNonceAt", mock.Anything, addr).Return(uint64(0), errors.New("RPC unavailable")).Twice()
nonceTracker.LoadNextSequences(ctx, enabledAddresses)
_, err := nonceTracker.GetNextSequence(ctx, addr)
require.Error(t, err)
require.Contains(t, err.Error(), fmt.Sprintf("failed to find next sequence for address: %s", addr.Hex()))
})`
$DIR/core/chains/evm/txmgr/nonce_tracker_test.go: `txStore.On("FindLatestSequence", mock.Anything, addr, chainID).Return(types.Nonce(0), errors.New("no rows")).Twice()`
$DIR/core/chains/evm/txmgr/nonce_tracker_test.go: `client.On("PendingNonceAt", mock.Anything, addr).Return(uint64(0), errors.New("RPC unavailable")).Twice()`
$DIR/core/chains/evm/txmgr/nonce_tracker_test.go: `nonceTracker.LoadNextSequences(ctx, enabledAddresses)`
$DIR/core/chains/evm/txmgr/nonce_tracker_test.go: `txStore.On("FindLatestSequence", mock.Anything, addr, chainID).Return(types.Nonce(0), errors.New("no rows")).Once()`
$DIR/core/chains/evm/txmgr/nonce_tracker_test.go: `client.On("PendingNonceAt", mock.Anything, addr).Return(uint64(0), errors.New("RPC unavailable")).Once()`
$DIR/core/chains/evm/txmgr/nonce_tracker_test.go: `nonceTracker.LoadNextSequences(ctx, enabledAddresses)`
$DIR/core/chains/evm/txmgr/nonce_tracker_test.go: `txStore.On("FindLatestSequence", mock.Anything, addr, chainID).Return(types.Nonce(txStoreNonce), nil).Once()`
$DIR/core/chains/evm/txmgr/nonce_tracker_test.go: `client.On("ConfiguredChainID").Return(chainID)`
$DIR/core/chains/evm/txmgr/nonce_tracker_test.go: `txStore.On("FindLatestSequence", mock.Anything, addr, chainID).Return(types.Nonce(randNonce), nil).Once()`
$DIR/core/chains/evm/txmgr/nonce_tracker_test.go: `nonceTracker.LoadNextSequences(ctx, enabledAddresses)`
$DIR/core/chains/evm/txmgr/nonce_tracker_test.go: `nonceTracker.GenerateNextSequence(addr, types.Nonce(randNonce+1))`
$DIR/core/chains/evm/txmgr/nonce_tracker_test.go: `seq, err = nonceTracker.GetNextSequence(ctx, addr)`
$DIR/core/chains/evm/txmgr/nonce_tracker_test.go: `client.On("ConfiguredChainID").Return(chainID)`
$DIR/core/chains/evm/txmgr/nonce_tracker_test.go: `client.On("PendingNonceAt", mock.Anything, addr).Return(uint64(0), errors.New("failed to retrieve nonce at startup")).Once()`
$DIR/core/chains/evm/txmgr/nonce_tracker_test.go: `client.On("PendingNonceAt", mock.Anything, addr).Return(uint64(randNonce), nil).Once()`
$DIR/core/chains/evm/txmgr/nonce_tracker_test.go: `nonceTracker.LoadNextSequences(ctx, enabledAddresses)`
$DIR/core/chains/evm/txmgr/nonce_tracker_test.go: `nonce, err = nonceTracker.GetNextSequence(ctx, addr)`
$DIR/core/chains/evm/txmgr/nonce_tracker_test.go: `.Context(t)`
$DIR/core/chains/evm/txmgr/nonce_tracker_test.go: `.NewInt(0)`
$DIR/core/chains/evm/txmgr/nonce_tracker_test.go: `.NewEvmTxStore(t)`
$DIR/core/chains/evm/txmgr/nonce_tracker_test.go: `.NewClient(t)`
$DIR/core/chains/evm/txmgr/nonce_tracker_test.go: `.On("ConfiguredChainID")`
$DIR/core/chains/evm/txmgr/nonce_tracker_test.go: `.Return(chainID)`
$DIR/core/chains/evm/txmgr/nonce_tracker_test.go: `.NewNonceTracker(logger.Test(t), txStore, txmgr.NewEvmTxmClient(client, nil))`
$DIR/core/chains/evm/txmgr/nonce_tracker_test.go: `.Test(t)`
$DIR/core/chains/evm/txmgr/nonce_tracker_test.go: `.NewEvmTxmClient(client, nil)`
$DIR/core/chains/evm/txmgr/nonce_tracker_test.go: `.HexToAddress("0xd5e099c71b797516c10ed0f0d895f429c2781142")`
$DIR/core/chains/evm/txmgr/nonce_tracker_test.go: `.HexToAddress("0xd5e099c71b797516c10ed0f0d895f429c2781140")`
$DIR/core/chains/evm/txmgr/nonce_tracker_test.go: `.Run("set next nonce using entries from tx table", func(t *testing.T) {
randNonce1 := testutils.NewRandomPositiveInt64()
randNonce2 := testutils.NewRandomPositiveInt64()
txStore.On("FindLatestSequence", mock.Anything, addr1, chainID).Return(types.Nonce(randNonce1), nil).Once()
txStore.On("FindLatestSequence", mock.Anything, addr2, chainID).Return(types.Nonce(randNonce2), nil).Once()
nonceTracker.LoadNextSequences(ctx, enabledAddresses)
seq, err := nonceTracker.GetNextSequence(ctx, addr1)
require.NoError(t, err)
require.Equal(t, types.Nonce(randNonce1+1), seq)
seq, err = nonceTracker.GetNextSequence(ctx, addr2)
require.NoError(t, err)
require.Equal(t, types.Nonce(randNonce2+1), seq)
})`
$DIR/core/chains/evm/txmgr/nonce_tracker_test.go: `.NewRandomPositiveInt64()`
$DIR/core/chains/evm/txmgr/nonce_tracker_test.go: `.NewRandomPositiveInt64()`
$DIR/core/chains/evm/txmgr/nonce_tracker_test.go: `.On("FindLatestSequence", mock.Anything, addr1, chainID)`
$DIR/core/chains/evm/txmgr/nonce_tracker_test.go: `.Return(types.Nonce(randNonce1), nil)`
$DIR/core/chains/evm/txmgr/nonce_tracker_test.go: `.Nonce(randNonce1)`
$DIR/core/chains/evm/txmgr/nonce_tracker_test.go: `.Once()`
$DIR/core/chains/evm/txmgr/nonce_tracker_test.go: `.On("FindLatestSequence", mock.Anything, addr2, chainID)`
$DIR/core/chains/evm/txmgr/nonce_tracker_test.go: `.Return(types.Nonce(randNonce2), nil)`
$DIR/core/chains/evm/txmgr/nonce_tracker_test.go: `.Nonce(randNonce2)`
$DIR/core/chains/evm/txmgr/nonce_tracker_test.go: `.Once()`
$DIR/core/chains/evm/txmgr/nonce_tracker_test.go: `.LoadNextSequences(ctx, enabledAddresses)`
$DIR/core/chains/evm/txmgr/nonce_tracker_test.go: `.GetNextSequence(ctx, addr1)`
$DIR/core/chains/evm/txmgr/nonce_tracker_test.go: `.GetNextSequence(ctx, addr2)`
$DIR/core/chains/evm/txmgr/nonce_tracker_test.go: `.On("FindLatestSequence", mock.Anything, addr1, chainID)`
$DIR/core/chains/evm/txmgr/nonce_tracker_test.go: `.Return(emptyNonce, errors.New("no rows"))`
$DIR/core/chains/evm/txmgr/nonce_tracker_test.go: `.New("no rows")`
$DIR/core/chains/evm/txmgr/nonce_tracker_test.go: `.Once()`
$DIR/core/chains/evm/txmgr/nonce_tracker_test.go: `.On("FindLatestSequence", mock.Anything, addr2, chainID)`
$DIR/core/chains/evm/txmgr/nonce_tracker_test.go: `.Return(emptyNonce, errors.New("no rows"))`
$DIR/core/chains/evm/txmgr/nonce_tracker_test.go: `.New("no rows")`
$DIR/core/chains/evm/txmgr/nonce_tracker_test.go: `.Once()`
$DIR/core/chains/evm/txmgr/nonce_tracker_test.go: `.NewRandomPositiveInt64()`
$DIR/core/chains/evm/txmgr/nonce_tracker_test.go: `.NewRandomPositiveInt64()`
$DIR/core/chains/evm/txmgr/nonce_tracker_test.go: `.On("PendingNonceAt", mock.Anything, addr1)`
$DIR/core/chains/evm/txmgr/nonce_tracker_test.go: `.Return(uint64(randNonce1), nil)`
$DIR/core/chains/evm/txmgr/nonce_tracker_test.go: `.Once()`
$DIR/core/chains/evm/txmgr/nonce_tracker_test.go: `.On("PendingNonceAt", mock.Anything, addr2)`
$DIR/core/chains/evm/txmgr/nonce_tracker_test.go: `.Return(uint64(randNonce2), nil)`
$DIR/core/chains/evm/txmgr/nonce_tracker_test.go: `.Once()`
$DIR/core/chains/evm/txmgr/nonce_tracker_test.go: `.LoadNextSequences(ctx, enabledAddresses)`
$DIR/core/chains/evm/txmgr/nonce_tracker_test.go: `.GetNextSequence(ctx, addr1)`
$DIR/core/chains/evm/txmgr/nonce_tracker_test.go: `.GetNextSequence(ctx, addr2)`
$DIR/core/chains/evm/txmgr/nonce_tracker_test.go: `.Context(t)`
$DIR/core/chains/evm/txmgr/nonce_tracker_test.go: `.NewInt(0)`
$DIR/core/chains/evm/txmgr/nonce_tracker_test.go: `.NewEvmTxStore(t)`
$DIR/core/chains/evm/txmgr/nonce_tracker_test.go: `.NewClient(t)`
$DIR/core/chains/evm/txmgr/nonce_tracker_test.go: `.On("ConfiguredChainID")`
$DIR/core/chains/evm/txmgr/nonce_tracker_test.go: `.Return(chainID)`
$DIR/core/chains/evm/txmgr/nonce_tracker_test.go: `.NewNonceTracker(logger.Test(t), txStore, txmgr.NewEvmTxmClient(client, nil))`
$DIR/core/chains/evm/txmgr/nonce_tracker_test.go: `.Test(t)`
$DIR/core/chains/evm/txmgr/nonce_tracker_test.go: `.NewEvmTxmClient(client, nil)`
$DIR/core/chains/evm/txmgr/nonce_tracker_test.go: `.HexToAddress("0xd5e099c71b797516c10ed0f0d895f429c2781142")`
$DIR/core/chains/evm/txmgr/nonce_tracker_test.go: `.Run("throws error if RPC call fails", func(t *testing.T) {
client.On("PendingNonceAt", mock.Anything, addr).Return(uint64(0), errors.New("RPC unavailable")).Once()
err := nonceTracker.SyncOnChain(ctx, addr, types.Nonce(2))
require.Error(t, err)
})`
$DIR/core/chains/evm/txmgr/nonce_tracker_test.go: `.On("PendingNonceAt", mock.Anything, addr)`
$DIR/core/chains/evm/txmgr/nonce_tracker_test.go: `.Return(uint64(0), errors.New("RPC unavailable"))`
$DIR/core/chains/evm/txmgr/nonce_tracker_test.go: `.New("RPC unavailable")`
$DIR/core/chains/evm/txmgr/nonce_tracker_test.go: `.Once()`
$DIR/core/chains/evm/txmgr/nonce_tracker_test.go: `.SyncOnChain(ctx, addr, types.Nonce(2))`
$DIR/core/chains/evm/txmgr/nonce_tracker_test.go: `.Nonce(2)`
$DIR/core/chains/evm/txmgr/nonce_tracker_test.go: `.Run("uses local nonce instead of on-chain nonce if on-chain nonce is lower", func(t *testing.T) {
nonce := 2
newNonce := 5
client.On("PendingNonceAt", mock.Anything, addr).Return(uint64(nonce), nil).Once()
enabledAddresses := []common.Address{}
nonceTracker.LoadNextSequences(ctx, enabledAddresses)
// syncOnChain will set the next sequence even if the address is not present in the map
err := nonceTracker.SyncOnChain(ctx, addr, types.Nonce(newNonce))
require.NoError(t, err)
seq, err := nonceTracker.GetNextSequence(ctx, addr)
require.NoError(t, err)
require.Equal(t, types.Nonce(newNonce), seq)
})`
$DIR/core/chains/evm/txmgr/nonce_tracker_test.go: `.On("PendingNonceAt", mock.Anything, addr)`
$DIR/core/chains/evm/txmgr/nonce_tracker_test.go: `.Return(uint64(nonce), nil)`
$DIR/core/chains/evm/txmgr/nonce_tracker_test.go: `.Once()`
$DIR/core/chains/evm/txmgr/nonce_tracker_test.go: `.LoadNextSequences(ctx, enabledAddresses)`
$DIR/core/chains/evm/txmgr/nonce_tracker_test.go: `.SyncOnChain(ctx, addr, types.Nonce(newNonce))`
$DIR/core/chains/evm/txmgr/nonce_tracker_test.go: `.Nonce(newNonce)`
$DIR/core/chains/evm/txmgr/nonce_tracker_test.go: `.GetNextSequence(ctx, addr)`
$DIR/core/chains/evm/txmgr/nonce_tracker_test.go: `.On("PendingNonceAt", mock.Anything, addr)`
$DIR/core/chains/evm/txmgr/nonce_tracker_test.go: `.Return(uint64(nonce), nil)`
$DIR/core/chains/evm/txmgr/nonce_tracker_test.go: `.Once()`
$DIR/core/chains/evm/txmgr/nonce_tracker_test.go: `.LoadNextSequences(ctx, enabledAddresses)`
$DIR/core/chains/evm/txmgr/nonce_tracker_test.go: `.SyncOnChain(ctx, addr, types.Nonce(onChainNonce))`
$DIR/core/chains/evm/txmgr/nonce_tracker_test.go: `.Nonce(onChainNonce)`
$DIR/core/chains/evm/txmgr/nonce_tracker_test.go: `.GetNextSequence(ctx, addr)`
$DIR/core/chains/evm/txmgr/nonce_tracker_test.go: `.Context(t)`
$DIR/core/chains/evm/txmgr/nonce_tracker_test.go: `.NewInt(0)`
$DIR/core/chains/evm/txmgr/nonce_tracker_test.go: `.NewEvmTxStore(t)`
$DIR/core/chains/evm/txmgr/nonce_tracker_test.go: `.NewClient(t)`
$DIR/core/chains/evm/txmgr/nonce_tracker_test.go: `.On("ConfiguredChainID")`
$DIR/core/chains/evm/txmgr/nonce_tracker_test.go: `.Return(chainID)`
$DIR/core/chains/evm/txmgr/nonce_tracker_test.go: `.NewNonceTracker(logger.Test(t), txStore, txmgr.NewEvmTxmClient(client, nil))`
$DIR/core/chains/evm/txmgr/nonce_tracker_test.go: `.Test(t)`
$DIR/core/chains/evm/txmgr/nonce_tracker_test.go: `.NewEvmTxmClient(client, nil)`
$DIR/core/chains/evm/txmgr/nonce_tracker_test.go: `.HexToAddress("0xd5e099c71b797516c10ed0f0d895f429c2781142")`
$DIR/core/chains/evm/txmgr/nonce_tracker_test.go: `.Run("syncs sequence successfully", func(t *testing.T) {
txStoreNonce := 2
onChainNonce := 3
txStore.On("FindLatestSequence", mock.Anything, addr, chainID).Return(types.Nonce(txStoreNonce), nil).Once()
nonceTracker.LoadNextSequences(ctx, enabledAddresses)
var chStop services.StopChan
client.On("PendingNonceAt", mock.Anything, addr).Return(uint64(onChainNonce), nil).Once()
nonceTracker.SyncSequence(ctx, addr, chStop)
seq, err := nonceTracker.GetNextSequence(ctx, addr)
require.NoError(t, err)
require.Equal(t, types.Nonce(onChainNonce), seq)
})`
$DIR/core/chains/evm/txmgr/nonce_tracker_test.go: `.On("FindLatestSequence", mock.Anything, addr, chainID)`
$DIR/core/chains/evm/txmgr/nonce_tracker_test.go: `.Return(types.Nonce(txStoreNonce), nil)`
$DIR/core/chains/evm/txmgr/nonce_tracker_test.go: `.Nonce(txStoreNonce)`
$DIR/core/chains/evm/txmgr/nonce_tracker_test.go: `.Once()`
$DIR/core/chains/evm/txmgr/nonce_tracker_test.go: `.LoadNextSequences(ctx, enabledAddresses)`
$DIR/core/chains/evm/txmgr/nonce_tracker_test.go: `.On("PendingNonceAt", mock.Anything, addr)`
$DIR/core/chains/evm/txmgr/nonce_tracker_test.go: `.Return(uint64(onChainNonce), nil)`
$DIR/core/chains/evm/txmgr/nonce_tracker_test.go: `.Once()`
$DIR/core/chains/evm/txmgr/nonce_tracker_test.go: `.SyncSequence(ctx, addr, chStop)`
$DIR/core/chains/evm/txmgr/nonce_tracker_test.go: `.GetNextSequence(ctx, addr)`
$DIR/core/chains/evm/txmgr/nonce_tracker_test.go: `.On("FindLatestSequence", mock.Anything, addr, chainID)`
$DIR/core/chains/evm/txmgr/nonce_tracker_test.go: `.Return(types.Nonce(txStoreNonce), nil)`
$DIR/core/chains/evm/txmgr/nonce_tracker_test.go: `.Nonce(txStoreNonce)`
$DIR/core/chains/evm/txmgr/nonce_tracker_test.go: `.Once()`
$DIR/core/chains/evm/txmgr/nonce_tracker_test.go: `.LoadNextSequences(ctx, enabledAddresses)`
$DIR/core/chains/evm/txmgr/nonce_tracker_test.go: `.On("PendingNonceAt", mock.Anything, addr)`
$DIR/core/chains/evm/txmgr/nonce_tracker_test.go: `.Return(uint64(0), errors.New("RPC unavailable"))`
$DIR/core/chains/evm/txmgr/nonce_tracker_test.go: `.New("RPC unavailable")`
$DIR/core/chains/evm/txmgr/nonce_tracker_test.go: `.Once()`
$DIR/core/chains/evm/txmgr/nonce_tracker_test.go: `.On("PendingNonceAt", mock.Anything, addr)`
$DIR/core/chains/evm/txmgr/nonce_tracker_test.go: `.Return(uint64(onChainNonce), nil)`
$DIR/core/chains/evm/txmgr/nonce_tracker_test.go: `.Once()`
$DIR/core/chains/evm/txmgr/nonce_tracker_test.go: `.SyncSequence(ctx, addr, chStop)`
$DIR/core/chains/evm/txmgr/nonce_tracker_test.go: `.GetNextSequence(ctx, addr)`
$DIR/core/chains/evm/txmgr/nonce_tracker_test.go: `.Context(t)`
$DIR/core/chains/evm/txmgr/nonce_tracker_test.go: `.NewInt(0)`
$DIR/core/chains/evm/txmgr/nonce_tracker_test.go: `.NewEvmTxStore(t)`
$DIR/core/chains/evm/txmgr/nonce_tracker_test.go: `.NewClient(t)`
$DIR/core/chains/evm/txmgr/nonce_tracker_test.go: `.On("ConfiguredChainID")`
$DIR/core/chains/evm/txmgr/nonce_tracker_test.go: `.Return(chainID)`
$DIR/core/chains/evm/txmgr/nonce_tracker_test.go: `.NewNonceTracker(logger.Test(t), txStore, txmgr.NewEvmTxmClient(client, nil))`
$DIR/core/chains/evm/txmgr/nonce_tracker_test.go: `.Test(t)`
$DIR/core/chains/evm/txmgr/nonce_tracker_test.go: `.NewEvmTxmClient(client, nil)`
$DIR/core/chains/evm/txmgr/nonce_tracker_test.go: `.HexToAddress("0xd5e099c71b797516c10ed0f0d895f429c2781142")`
$DIR/core/chains/evm/txmgr/nonce_tracker_test.go: `.Run("fails to get sequence if address doesn't exist in map", func(t *testing.T) {
_, err := nonceTracker.GetNextSequence(ctx, addr)
require.Error(t, err)
})`
$DIR/core/chains/evm/txmgr/nonce_tracker_test.go: `.GetNextSequence(ctx, addr)`
$DIR/core/chains/evm/txmgr/nonce_tracker_test.go: `.Run("fails to get sequence if address doesn't exist in map and is disabled", func(t *testing.T) {
_, err := nonceTracker.GetNextSequence(ctx, addr)
require.Error(t, err)
require.Contains(t, err.Error(), fmt.Sprintf("address disabled: %s", addr.Hex()))
})`
$DIR/core/chains/evm/txmgr/nonce_tracker_test.go: `.GetNextSequence(ctx, addr)`
$DIR/core/chains/evm/txmgr/nonce_tracker_test.go: `.Run("fails to get sequence if address is enabled, doesn't exist in map, and getSequenceForAddr fails", func(t *testing.T) {
enabledAddresses := []common.Address{addr}
txStore.On("FindLatestSequence", mock.Anything, addr, chainID).Return(types.Nonce(0), errors.New("no rows")).Twice()
client.On("PendingNonceAt", mock.Anything, addr).Return(uint64(0), errors.New("RPC unavailable")).Twice()
nonceTracker.LoadNextSequences(ctx, enabledAddresses)
_, err := nonceTracker.GetNextSequence(ctx, addr)
require.Error(t, err)
require.Contains(t, err.Error(), fmt.Sprintf("failed to find next sequence for address: %s", addr.Hex()))
})`
$DIR/core/chains/evm/txmgr/nonce_tracker_test.go: `.On("FindLatestSequence", mock.Anything, addr, chainID)`
$DIR/core/chains/evm/txmgr/nonce_tracker_test.go: `.Return(types.Nonce(0), errors.New("no rows"))`
$DIR/core/chains/evm/txmgr/nonce_tracker_test.go: `.Nonce(0)`
$DIR/core/chains/evm/txmgr/nonce_tracker_test.go: `.New("no rows")`
$DIR/core/chains/evm/txmgr/nonce_tracker_test.go: `.Twice()`
$DIR/core/chains/evm/txmgr/nonce_tracker_test.go: `.On("PendingNonceAt", mock.Anything, addr)`
$DIR/core/chains/evm/txmgr/nonce_tracker_test.go: `.Return(uint64(0), errors.New("RPC unavailable"))`
$DIR/core/chains/evm/txmgr/nonce_tracker_test.go: `.New("RPC unavailable")`
$DIR/core/chains/evm/txmgr/nonce_tracker_test.go: `.Twice()`
$DIR/core/chains/evm/txmgr/nonce_tracker_test.go: `.LoadNextSequences(ctx, enabledAddresses)`
$DIR/core/chains/evm/txmgr/nonce_tracker_test.go: `.GetNextSequence(ctx, addr)`
$DIR/core/chains/evm/txmgr/nonce_tracker_test.go: `.On("FindLatestSequence", mock.Anything, addr, chainID)`
$DIR/core/chains/evm/txmgr/nonce_tracker_test.go: `.Return(types.Nonce(0), errors.New("no rows"))`
$DIR/core/chains/evm/txmgr/nonce_tracker_test.go: `.Nonce(0)`
$DIR/core/chains/evm/txmgr/nonce_tracker_test.go: `.New("no rows")`
$DIR/core/chains/evm/txmgr/nonce_tracker_test.go: `.Once()`
$DIR/core/chains/evm/txmgr/nonce_tracker_test.go: `.On("PendingNonceAt", mock.Anything, addr)`
$DIR/core/chains/evm/txmgr/nonce_tracker_test.go: `.Return(uint64(0), errors.New("RPC unavailable"))`
$DIR/core/chains/evm/txmgr/nonce_tracker_test.go: `.New("RPC unavailable")`
$DIR/core/chains/evm/txmgr/nonce_tracker_test.go: `.Once()`
$DIR/core/chains/evm/txmgr/nonce_tracker_test.go: `.LoadNextSequences(ctx, enabledAddresses)`
$DIR/core/chains/evm/txmgr/nonce_tracker_test.go: `.On("FindLatestSequence", mock.Anything, addr, chainID)`
$DIR/core/chains/evm/txmgr/nonce_tracker_test.go: `.Return(types.Nonce(txStoreNonce), nil)`
$DIR/core/chains/evm/txmgr/nonce_tracker_test.go: `.Nonce(txStoreNonce)`
$DIR/core/chains/evm/txmgr/nonce_tracker_test.go: `.Once()`
$DIR/core/chains/evm/txmgr/nonce_tracker_test.go: `.GetNextSequence(ctx, addr)`
$DIR/core/chains/evm/txmgr/nonce_tracker_test.go: `.Context(t)`
$DIR/core/chains/evm/txmgr/nonce_tracker_test.go: `.NewInt(0)`
$DIR/core/chains/evm/txmgr/nonce_tracker_test.go: `.NewEvmTxStore(t)`
$DIR/core/chains/evm/txmgr/nonce_tracker_test.go: `.NewClient(t)`
$DIR/core/chains/evm/txmgr/nonce_tracker_test.go: `.On("ConfiguredChainID")`
$DIR/core/chains/evm/txmgr/nonce_tracker_test.go: `.Return(chainID)`
$DIR/core/chains/evm/txmgr/nonce_tracker_test.go: `.NewNonceTracker(logger.Test(t), txStore, txmgr.NewEvmTxmClient(client, nil))`
$DIR/core/chains/evm/txmgr/nonce_tracker_test.go: `.Test(t)`
$DIR/core/chains/evm/txmgr/nonce_tracker_test.go: `.NewEvmTxmClient(client, nil)`
$DIR/core/chains/evm/txmgr/nonce_tracker_test.go: `.HexToAddress("0xd5e099c71b797516c10ed0f0d895f429c2781142")`
$DIR/core/chains/evm/txmgr/nonce_tracker_test.go: `.NewRandomPositiveInt64()`
$DIR/core/chains/evm/txmgr/nonce_tracker_test.go: `.On("FindLatestSequence", mock.Anything, addr, chainID)`
$DIR/core/chains/evm/txmgr/nonce_tracker_test.go: `.Return(types.Nonce(randNonce), nil)`
$DIR/core/chains/evm/txmgr/nonce_tracker_test.go: `.Nonce(randNonce)`
$DIR/core/chains/evm/txmgr/nonce_tracker_test.go: `.Once()`
$DIR/core/chains/evm/txmgr/nonce_tracker_test.go: `.LoadNextSequences(ctx, enabledAddresses)`
$DIR/core/chains/evm/txmgr/nonce_tracker_test.go: `.GetNextSequence(ctx, addr)`
$DIR/core/chains/evm/txmgr/nonce_tracker_test.go: `.GenerateNextSequence(addr, types.Nonce(randNonce+1))`
$DIR/core/chains/evm/txmgr/nonce_tracker_test.go: `.Nonce(randNonce+1)`
$DIR/core/chains/evm/txmgr/nonce_tracker_test.go: `.GetNextSequence(ctx, addr)`
$DIR/core/chains/evm/txmgr/nonce_tracker_test.go: `.Nonce(randNonce+2)`
$DIR/core/chains/evm/txmgr/nonce_tracker_test.go: `.Context(t)`
$DIR/core/chains/evm/txmgr/nonce_tracker_test.go: `.NewInt(0)`
$DIR/core/chains/evm/txmgr/nonce_tracker_test.go: `.NewSqlxDB(t)`
$DIR/core/chains/evm/txmgr/nonce_tracker_test.go: `.NewTxStore(db, logger.Test(t))`
$DIR/core/chains/evm/txmgr/nonce_tracker_test.go: `.Test(t)`
$DIR/core/chains/evm/txmgr/nonce_tracker_test.go: `.NewClient(t)`
$DIR/core/chains/evm/txmgr/nonce_tracker_test.go: `.On("ConfiguredChainID")`
$DIR/core/chains/evm/txmgr/nonce_tracker_test.go: `.Return(chainID)`
$DIR/core/chains/evm/txmgr/nonce_tracker_test.go: `.NewNonceTracker(logger.Test(t), txStore, txmgr.NewEvmTxmClient(client, nil))`
$DIR/core/chains/evm/txmgr/nonce_tracker_test.go: `.Test(t)`
$DIR/core/chains/evm/txmgr/nonce_tracker_test.go: `.NewEvmTxmClient(client, nil)`
$DIR/core/chains/evm/txmgr/nonce_tracker_test.go: `.HexToAddress("0xd5e099c71b797516c10ed0f0d895f429c2781142")`
$DIR/core/chains/evm/txmgr/nonce_tracker_test.go: `.NewRandomPositiveInt64()`
$DIR/core/chains/evm/txmgr/nonce_tracker_test.go: `.On("PendingNonceAt", mock.Anything, addr)`
$DIR/core/chains/evm/txmgr/nonce_tracker_test.go: `.Return(uint64(0), errors.New("failed to retrieve nonce at startup"))`
$DIR/core/chains/evm/txmgr/nonce_tracker_test.go: `.New("failed to retrieve nonce at startup")`
$DIR/core/chains/evm/txmgr/nonce_tracker_test.go: `.Once()`
$DIR/core/chains/evm/txmgr/nonce_tracker_test.go: `.On("PendingNonceAt", mock.Anything, addr)`
$DIR/core/chains/evm/txmgr/nonce_tracker_test.go: `.Return(uint64(randNonce), nil)`
$DIR/core/chains/evm/txmgr/nonce_tracker_test.go: `.Once()`
$DIR/core/chains/evm/txmgr/nonce_tracker_test.go: `.LoadNextSequences(ctx, enabledAddresses)`
$DIR/core/chains/evm/txmgr/nonce_tracker_test.go: `.GetNextSequence(ctx, addr)`
$DIR/core/chains/evm/txmgr/nonce_tracker_test.go: `.GetNextSequence(ctx, addr)`
$DIR/core/chains/evm/txmgr/reaper_test.go: `t.Run("with nothing in the database, doesn't error", func(t *testing.T) {
config := txmgrmocks.NewReaperConfig(t)
config.On("FinalityDepth").Return(uint32(10))
tc := &reaperConfig{reaperThreshold: 1 * time.Hour}
r := newReaper(t, txStore, config, tc)
err := r.ReapTxes(42)
assert.NoError(t, err)
})`
$DIR/core/chains/evm/txmgr/reaper_test.go: `config.On("FinalityDepth").Return(uint32(10))`
$DIR/core/chains/evm/txmgr/reaper_test.go: `mustInsertConfirmedEthTxWithReceipt(t, txStore, from, nonce, 5)`
$DIR/core/chains/evm/txmgr/reaper_test.go: `t.Run("skips if threshold=0", func(t *testing.T) {
config := txmgrmocks.NewReaperConfig(t)
tc := &reaperConfig{reaperThreshold: 0 * time.Second}
r := newReaper(t, txStore, config, tc)
err := r.ReapTxes(42)
assert.NoError(t, err)
cltest.AssertCount(t, db, "evm.txes", 1)
})`
$DIR/core/chains/evm/txmgr/reaper_test.go: `cltest.AssertCount(t, db, "evm.txes", 1)`
$DIR/core/chains/evm/txmgr/reaper_test.go: `t.Run("doesn't touch ethtxes with different chain ID", func(t *testing.T) {
config := txmgrmocks.NewReaperConfig(t)
config.On("FinalityDepth").Return(uint32(10))
tc := &reaperConfig{reaperThreshold: 1 * time.Hour}
r := newReaperWithChainID(t, txStore, config, tc, big.NewInt(42))
err := r.ReapTxes(42)
assert.NoError(t, err)
// Didn't delete because eth_tx has chain ID of 0
cltest.AssertCount(t, db, "evm.txes", 1)
})`
$DIR/core/chains/evm/txmgr/reaper_test.go: `config.On("FinalityDepth").Return(uint32(10))`
$DIR/core/chains/evm/txmgr/reaper_test.go: `cltest.AssertCount(t, db, "evm.txes", 1)`
$DIR/core/chains/evm/txmgr/reaper_test.go: `t.Run("deletes confirmed evm.txes that exceed the age threshold with at least EVM.FinalityDepth blocks above their receipt", func(t *testing.T) {
config := txmgrmocks.NewReaperConfig(t)
config.On("FinalityDepth").Return(uint32(10))
tc := &reaperConfig{reaperThreshold: 1 * time.Hour}
r := newReaper(t, txStore, config, tc)
err := r.ReapTxes(42)
assert.NoError(t, err)
// Didn't delete because eth_tx was not old enough
cltest.AssertCount(t, db, "evm.txes", 1)
pgtest.MustExec(t, db, `UPDATE evm.txes SET created_at=$1`, oneDayAgo)
err = r.ReapTxes(12)
assert.NoError(t, err)
// Didn't delete because eth_tx although old enough, was still within EVM.FinalityDepth of the current head
cltest.AssertCount(t, db, "evm.txes", 1)
err = r.ReapTxes(42)
assert.NoError(t, err)
// Now it deleted because the eth_tx was past EVM.FinalityDepth
cltest.AssertCount(t, db, "evm.txes", 0)
})`
$DIR/core/chains/evm/txmgr/reaper_test.go: `config.On("FinalityDepth").Return(uint32(10))`
$DIR/core/chains/evm/txmgr/reaper_test.go: `cltest.AssertCount(t, db, "evm.txes", 1)`
$DIR/core/chains/evm/txmgr/reaper_test.go: `pgtest.MustExec(t, db, `UPDATE evm.txes SET created_at=$1`, oneDayAgo)`
$DIR/core/chains/evm/txmgr/reaper_test.go: `err = r.ReapTxes(12)`
$DIR/core/chains/evm/txmgr/reaper_test.go: `cltest.AssertCount(t, db, "evm.txes", 1)`
$DIR/core/chains/evm/txmgr/reaper_test.go: `err = r.ReapTxes(42)`
$DIR/core/chains/evm/txmgr/reaper_test.go: `cltest.AssertCount(t, db, "evm.txes", 0)`
$DIR/core/chains/evm/txmgr/reaper_test.go: `mustInsertFatalErrorEthTx(t, txStore, from)`
$DIR/core/chains/evm/txmgr/reaper_test.go: `config.On("FinalityDepth").Return(uint32(10))`
$DIR/core/chains/evm/txmgr/reaper_test.go: `cltest.AssertCount(t, db, "evm.txes", 1)`
$DIR/core/chains/evm/txmgr/reaper_test.go: `err = r.ReapTxes(42)`
$DIR/core/chains/evm/txmgr/reaper_test.go: `cltest.AssertCount(t, db, "evm.txes", 0)`
$DIR/core/chains/evm/txmgr/reaper_test.go: `.NewSqlxDB(t)`
$DIR/core/chains/evm/txmgr/reaper_test.go: `.NewTestTxStore(t, db)`
$DIR/core/chains/evm/txmgr/reaper_test.go: `.NewKeyStore(t, db)`
$DIR/core/chains/evm/txmgr/reaper_test.go: `.Eth()`
$DIR/core/chains/evm/txmgr/reaper_test.go: `.MustInsertRandomKey(t, ethKeyStore)`
$DIR/core/chains/evm/txmgr/reaper_test.go: `.Now()`
$DIR/core/chains/evm/txmgr/reaper_test.go: `.Add(-24 * time.Hour)`
$DIR/core/chains/evm/txmgr/reaper_test.go: `.Run("with nothing in the database, doesn't error", func(t *testing.T) {
config := txmgrmocks.NewReaperConfig(t)
config.On("FinalityDepth").Return(uint32(10))
tc := &reaperConfig{reaperThreshold: 1 * time.Hour}
r := newReaper(t, txStore, config, tc)
err := r.ReapTxes(42)
assert.NoError(t, err)
})`
$DIR/core/chains/evm/txmgr/reaper_test.go: `.NewReaperConfig(t)`
$DIR/core/chains/evm/txmgr/reaper_test.go: `.On("FinalityDepth")`
$DIR/core/chains/evm/txmgr/reaper_test.go: `.Return(uint32(10))`
$DIR/core/chains/evm/txmgr/reaper_test.go: `.ReapTxes(42)`
$DIR/core/chains/evm/txmgr/reaper_test.go: `.Run("skips if threshold=0", func(t *testing.T) {
config := txmgrmocks.NewReaperConfig(t)
tc := &reaperConfig{reaperThreshold: 0 * time.Second}
r := newReaper(t, txStore, config, tc)
err := r.ReapTxes(42)
assert.NoError(t, err)
cltest.AssertCount(t, db, "evm.txes", 1)
})`
$DIR/core/chains/evm/txmgr/reaper_test.go: `.NewReaperConfig(t)`
$DIR/core/chains/evm/txmgr/reaper_test.go: `.ReapTxes(42)`
$DIR/core/chains/evm/txmgr/reaper_test.go: `.AssertCount(t, db, "evm.txes", 1)`
$DIR/core/chains/evm/txmgr/reaper_test.go: `.Run("doesn't touch ethtxes with different chain ID", func(t *testing.T) {
config := txmgrmocks.NewReaperConfig(t)
config.On("FinalityDepth").Return(uint32(10))
tc := &reaperConfig{reaperThreshold: 1 * time.Hour}
r := newReaperWithChainID(t, txStore, config, tc, big.NewInt(42))
err := r.ReapTxes(42)
assert.NoError(t, err)
// Didn't delete because eth_tx has chain ID of 0
cltest.AssertCount(t, db, "evm.txes", 1)
})`
$DIR/core/chains/evm/txmgr/reaper_test.go: `.NewReaperConfig(t)`
$DIR/core/chains/evm/txmgr/reaper_test.go: `.On("FinalityDepth")`
$DIR/core/chains/evm/txmgr/reaper_test.go: `.Return(uint32(10))`
$DIR/core/chains/evm/txmgr/reaper_test.go: `.NewInt(42)`
$DIR/core/chains/evm/txmgr/reaper_test.go: `.ReapTxes(42)`
$DIR/core/chains/evm/txmgr/reaper_test.go: `.AssertCount(t, db, "evm.txes", 1)`
$DIR/core/chains/evm/txmgr/reaper_test.go: `.Run("deletes confirmed evm.txes that exceed the age threshold with at least EVM.FinalityDepth blocks above their receipt", func(t *testing.T) {
config := txmgrmocks.NewReaperConfig(t)
config.On("FinalityDepth").Return(uint32(10))
tc := &reaperConfig{reaperThreshold: 1 * time.Hour}
r := newReaper(t, txStore, config, tc)
err := r.ReapTxes(42)
assert.NoError(t, err)
// Didn't delete because eth_tx was not old enough
cltest.AssertCount(t, db, "evm.txes", 1)
pgtest.MustExec(t, db, `UPDATE evm.txes SET created_at=$1`, oneDayAgo)
err = r.ReapTxes(12)
assert.NoError(t, err)
// Didn't delete because eth_tx although old enough, was still within EVM.FinalityDepth of the current head
cltest.AssertCount(t, db, "evm.txes", 1)
err = r.ReapTxes(42)
assert.NoError(t, err)
// Now it deleted because the eth_tx was past EVM.FinalityDepth
cltest.AssertCount(t, db, "evm.txes", 0)
})`
$DIR/core/chains/evm/txmgr/reaper_test.go: `.NewReaperConfig(t)`
$DIR/core/chains/evm/txmgr/reaper_test.go: `.On("FinalityDepth")`
$DIR/core/chains/evm/txmgr/reaper_test.go: `.Return(uint32(10))`
$DIR/core/chains/evm/txmgr/reaper_test.go: `.ReapTxes(42)`
$DIR/core/chains/evm/txmgr/reaper_test.go: `.AssertCount(t, db, "evm.txes", 1)`
$DIR/core/chains/evm/txmgr/reaper_test.go: `.MustExec(t, db, `UPDATE evm.txes SET created_at=$1`, oneDayAgo)`
$DIR/core/chains/evm/txmgr/reaper_test.go: `.ReapTxes(12)`
$DIR/core/chains/evm/txmgr/reaper_test.go: `.AssertCount(t, db, "evm.txes", 1)`
$DIR/core/chains/evm/txmgr/reaper_test.go: `.ReapTxes(42)`
$DIR/core/chains/evm/txmgr/reaper_test.go: `.AssertCount(t, db, "evm.txes", 0)`
$DIR/core/chains/evm/txmgr/reaper_test.go: `.NewReaperConfig(t)`
$DIR/core/chains/evm/txmgr/reaper_test.go: `.On("FinalityDepth")`
$DIR/core/chains/evm/txmgr/reaper_test.go: `.Return(uint32(10))`
$DIR/core/chains/evm/txmgr/reaper_test.go: `.ReapTxes(42)`
$DIR/core/chains/evm/txmgr/reaper_test.go: `.AssertCount(t, db, "evm.txes", 1)`
$DIR/core/chains/evm/txmgr/reaper_test.go: `.ReapTxes(42)`
$DIR/core/chains/evm/txmgr/reaper_test.go: `.AssertCount(t, db, "evm.txes", 0)`
$DIR/core/chains/evm/txmgr/resender_test.go: `ethClient.On("IsL2").Return(false).Maybe()`
$DIR/core/chains/evm/txmgr/resender_test.go: `addr1TxesRawHex = append(addr1TxesRawHex, hexutil.Encode(etx.TxAttempts[0].SignedRawTx))`
$DIR/core/chains/evm/txmgr/resender_test.go: `addr2TxesRawHex = append(addr2TxesRawHex, hexutil.Encode(etx.TxAttempts[0].SignedRawTx))`
$DIR/core/chains/evm/txmgr/resender_test.go: `addr3TxesRawHex = append(addr3TxesRawHex, hexutil.Encode(etx.TxAttempts[0].SignedRawTx))`
$DIR/core/chains/evm/txmgr/resender_test.go: `ethClient.On("BatchCallContextAll", mock.Anything, mock.MatchedBy(func(elems []rpc.BatchElem) bool {
for _, elem := range elems {
resentHex[elem.Args[0].(string)] = struct{}{}
}
assert.Len(t, elems, len(addr1TxesRawHex)+len(addr2TxesRawHex)+int(txConfig.MaxInFlight()))
// All addr1TxesRawHex should be included
for _, addr := range addr1TxesRawHex {
assert.Contains(t, resentHex, addr)
}
// All addr2TxesRawHex should be included
for _, addr := range addr2TxesRawHex {
assert.Contains(t, resentHex, addr)
}
// Up to limit EvmMaxInFlightTransactions addr3TxesRawHex should be included
for i, addr := range addr3TxesRawHex {
if i >= int(txConfig.MaxInFlight()) {
// Above limit EvmMaxInFlightTransactions addr3TxesRawHex should NOT be included
assert.NotContains(t, resentHex, addr)
} else {
assert.Contains(t, resentHex, addr)
}
}
return true
})).Run(func(args mock.Arguments) {}).Return(nil)`
$DIR/core/chains/evm/txmgr/resender_test.go: `resentHex[elem.Args[0].(string)] = struct{}{}`
$DIR/core/chains/evm/txmgr/resender_test.go: `ethClient.On("IsL2").Return(false).Maybe()`
$DIR/core/chains/evm/txmgr/resender_test.go: `c.Chain = toml.Defaults(ubig.New(big.NewInt(0)), &toml.Chain{
Transactions: toml.Transactions{ResendAfterThreshold: delay},
})`
$DIR/core/chains/evm/txmgr/resender_test.go: `_ = cltest.MustInsertUnconfirmedEthTxWithBroadcastLegacyAttempt(t, txStore, int64(1), fromAddress, originalBroadcastAt)`
$DIR/core/chains/evm/txmgr/resender_test.go: `ethClient.On("BatchCallContextAll", mock.Anything, mock.Anything).Return(nil)`
$DIR/core/chains/evm/txmgr/resender_test.go: `tests.AssertLogCountEventually(t, o, "TxAttempt has been unconfirmed for more than max duration", 1)`
$DIR/core/chains/evm/txmgr/resender_test.go: `c.Transactions.ResendAfterThreshold = commonconfig.MustNewDuration(42 * time.Hour)`
$DIR/core/chains/evm/txmgr/resender_test.go: `c.RPCDefaultBatchSize = ptr[uint32](1)`
$DIR/core/chains/evm/txmgr/resender_test.go: `ethClient.On("IsL2").Return(false).Maybe()`
$DIR/core/chains/evm/txmgr/resender_test.go: `cltest.MustInsertUnconfirmedEthTxWithBroadcastLegacyAttempt(t, txStore, 2, fromAddress, time.Now().Add(1*time.Hour))`
$DIR/core/chains/evm/txmgr/resender_test.go: `ethClient.On("BatchCallContextAll", mock.Anything, mock.MatchedBy(func(b []rpc.BatchElem) bool {
return len(b) == 1 &&
b[0].Method == "eth_sendRawTransaction" && b[0].Args[0] == hexutil.Encode(etx.TxAttempts[0].SignedRawTx)
})).Return(nil)`
$DIR/core/chains/evm/txmgr/resender_test.go: `ethClient.On("BatchCallContextAll", mock.Anything, mock.MatchedBy(func(b []rpc.BatchElem) bool {
return len(b) == 1 &&
b[0].Method == "eth_sendRawTransaction" && b[0].Args[0] == hexutil.Encode(etx2.TxAttempts[0].SignedRawTx)
})).Return(nil).Run(func(args mock.Arguments) {
elems := args.Get(1).([]rpc.BatchElem)
// It should update BroadcastAt even if there is an error here
elems[0].Error = pkgerrors.New("kaboom")
})`
$DIR/core/chains/evm/txmgr/resender_test.go: `elems[0].Error = pkgerrors.New("kaboom")`
$DIR/core/chains/evm/txmgr/resender_test.go: `func() {
er.Start(ctx)
defer er.Stop()
cltest.EventuallyExpectationsMet(t, ethClient, 5*time.Second, time.Second)
}()`
$DIR/core/chains/evm/txmgr/resender_test.go: `er.Start(ctx)`
$DIR/core/chains/evm/txmgr/resender_test.go: `cltest.EventuallyExpectationsMet(t, ethClient, 5*time.Second, time.Second)`
$DIR/core/chains/evm/txmgr/resender_test.go: `err = db.Get(&dbEtx2, `SELECT * FROM evm.txes WHERE id = $1`, etx2.ID)`
$DIR/core/chains/evm/txmgr/resender_test.go: `.NewSqlxDB(t)`
$DIR/core/chains/evm/txmgr/resender_test.go: `.Test(t)`
$DIR/core/chains/evm/txmgr/resender_test.go: `.NewKeyStore(t, db)`
$DIR/core/chains/evm/txmgr/resender_test.go: `.Eth()`
$DIR/core/chains/evm/txmgr/resender_test.go: `.NewEthClientMockWithDefaultChain(t)`
$DIR/core/chains/evm/txmgr/resender_test.go: `.On("IsL2")`
$DIR/core/chains/evm/txmgr/resender_test.go: `.Return(false)`
$DIR/core/chains/evm/txmgr/resender_test.go: `.Maybe()`
$DIR/core/chains/evm/txmgr/resender_test.go: `.NewTestChainScopedConfig(t, nil)`
$DIR/core/chains/evm/txmgr/resender_test.go: `.MustInsertRandomKey(t, ethKeyStore)`
$DIR/core/chains/evm/txmgr/resender_test.go: `.MustInsertRandomKey(t, ethKeyStore)`
$DIR/core/chains/evm/txmgr/resender_test.go: `.MustInsertRandomKey(t, ethKeyStore)`
$DIR/core/chains/evm/txmgr/resender_test.go: `.NewTestTxStore(t, db)`
$DIR/core/chains/evm/txmgr/resender_test.go: `.Unix(1616509100, 0)`
$DIR/core/chains/evm/txmgr/resender_test.go: `.EVM()`
$DIR/core/chains/evm/txmgr/resender_test.go: `.Transactions()`
$DIR/core/chains/evm/txmgr/resender_test.go: `.MaxInFlight()`
$DIR/core/chains/evm/txmgr/resender_test.go: `.MustInsertUnconfirmedEthTxWithBroadcastLegacyAttempt(t, txStore, int64(i), fromAddress, originalBroadcastAt)`
$DIR/core/chains/evm/txmgr/resender_test.go: `.Encode(etx.TxAttempts[0].SignedRawTx)`
$DIR/core/chains/evm/txmgr/resender_test.go: `.MaxInFlight()`
$DIR/core/chains/evm/txmgr/resender_test.go: `.MustInsertUnconfirmedEthTxWithBroadcastLegacyAttempt(t, txStore, int64(i), fromAddress2, originalBroadcastAt)`
$DIR/core/chains/evm/txmgr/resender_test.go: `.Encode(etx.TxAttempts[0].SignedRawTx)`
$DIR/core/chains/evm/txmgr/resender_test.go: `.MaxInFlight()`
$DIR/core/chains/evm/txmgr/resender_test.go: `.MustInsertUnconfirmedEthTxWithBroadcastLegacyAttempt(t, txStore, int64(i), fromAddress3, originalBroadcastAt)`
$DIR/core/chains/evm/txmgr/resender_test.go: `.Encode(etx.TxAttempts[0].SignedRawTx)`
$DIR/core/chains/evm/txmgr/resender_test.go: `.NewEvmResender(lggr, txStore, txmgr.NewEvmTxmClient(ethClient, nil), txmgr.NewEvmTracker(txStore, ethKeyStore, big.NewInt(0), lggr), ethKeyStore, 100*time.Millisecond, ccfg.EVM(), ccfg.EVM().Transactions())`
$DIR/core/chains/evm/txmgr/resender_test.go: `.NewEvmTxmClient(ethClient, nil)`
$DIR/core/chains/evm/txmgr/resender_test.go: `.NewEvmTracker(txStore, ethKeyStore, big.NewInt(0), lggr)`
$DIR/core/chains/evm/txmgr/resender_test.go: `.NewInt(0)`
$DIR/core/chains/evm/txmgr/resender_test.go: `.EVM()`
$DIR/core/chains/evm/txmgr/resender_test.go: `.EVM()`
$DIR/core/chains/evm/txmgr/resender_test.go: `.Transactions()`
$DIR/core/chains/evm/txmgr/resender_test.go: `.On("BatchCallContextAll", mock.Anything, mock.MatchedBy(func(elems []rpc.BatchElem) bool {
for _, elem := range elems {
resentHex[elem.Args[0].(string)] = struct{}{}
}
assert.Len(t, elems, len(addr1TxesRawHex)+len(addr2TxesRawHex)+int(txConfig.MaxInFlight()))
// All addr1TxesRawHex should be included
for _, addr := range addr1TxesRawHex {
assert.Contains(t, resentHex, addr)
}
// All addr2TxesRawHex should be included
for _, addr := range addr2TxesRawHex {
assert.Contains(t, resentHex, addr)
}
// Up to limit EvmMaxInFlightTransactions addr3TxesRawHex should be included
for i, addr := range addr3TxesRawHex {
if i >= int(txConfig.MaxInFlight()) {
// Above limit EvmMaxInFlightTransactions addr3TxesRawHex should NOT be included
assert.NotContains(t, resentHex, addr)
} else {
assert.Contains(t, resentHex, addr)
}
}
return true
}))`
$DIR/core/chains/evm/txmgr/resender_test.go: `.MatchedBy(func(elems []rpc.BatchElem) bool {
for _, elem := range elems {
resentHex[elem.Args[0].(string)] = struct{}{}
}
assert.Len(t, elems, len(addr1TxesRawHex)+len(addr2TxesRawHex)+int(txConfig.MaxInFlight()))
// All addr1TxesRawHex should be included
for _, addr := range addr1TxesRawHex {
assert.Contains(t, resentHex, addr)
}
// All addr2TxesRawHex should be included
for _, addr := range addr2TxesRawHex {
assert.Contains(t, resentHex, addr)
}
// Up to limit EvmMaxInFlightTransactions addr3TxesRawHex should be included
for i, addr := range addr3TxesRawHex {
if i >= int(txConfig.MaxInFlight()) {
// Above limit EvmMaxInFlightTransactions addr3TxesRawHex should NOT be included
assert.NotContains(t, resentHex, addr)
} else {
assert.Contains(t, resentHex, addr)
}
}
return true
})`
$DIR/core/chains/evm/txmgr/resender_test.go: `.MaxInFlight()`
$DIR/core/chains/evm/txmgr/resender_test.go: `.Run(func(args mock.Arguments) {})`
$DIR/core/chains/evm/txmgr/resender_test.go: `.Return(nil)`
$DIR/core/chains/evm/txmgr/resender_test.go: `.XXXTestResendUnconfirmed()`
$DIR/core/chains/evm/txmgr/resender_test.go: `.NewSqlxDB(t)`
$DIR/core/chains/evm/txmgr/resender_test.go: `.TestObserved(t, zapcore.DebugLevel)`
$DIR/core/chains/evm/txmgr/resender_test.go: `.NewKeyStore(t, db)`
$DIR/core/chains/evm/txmgr/resender_test.go: `.Eth()`
$DIR/core/chains/evm/txmgr/resender_test.go: `.NewEthClientMockWithDefaultChain(t)`
$DIR/core/chains/evm/txmgr/resender_test.go: `.On("IsL2")`
$DIR/core/chains/evm/txmgr/resender_test.go: `.Return(false)`
$DIR/core/chains/evm/txmgr/resender_test.go: `.Maybe()`
$DIR/core/chains/evm/txmgr/resender_test.go: `.MustNewDuration(1 * time.Nanosecond)`
$DIR/core/chains/evm/txmgr/resender_test.go: `.NewTestChainScopedConfig(t, func(c *toml.EVMConfig) {
c.Chain = toml.Defaults(ubig.New(big.NewInt(0)), &toml.Chain{
Transactions: toml.Transactions{ResendAfterThreshold: delay},
})
})`
$DIR/core/chains/evm/txmgr/resender_test.go: `.Defaults(ubig.New(big.NewInt(0)), &toml.Chain{
Transactions: toml.Transactions{ResendAfterThreshold: delay},
})`
$DIR/core/chains/evm/txmgr/resender_test.go: `.New(big.NewInt(0))`
$DIR/core/chains/evm/txmgr/resender_test.go: `.NewInt(0)`
$DIR/core/chains/evm/txmgr/resender_test.go: `.MustInsertRandomKey(t, ethKeyStore)`
$DIR/core/chains/evm/txmgr/resender_test.go: `.NewTestTxStore(t, db)`
$DIR/core/chains/evm/txmgr/resender_test.go: `.Unix(1616509100, 0)`
$DIR/core/chains/evm/txmgr/resender_test.go: `.NewEvmResender(lggr, txStore, txmgr.NewEvmTxmClient(ethClient, nil), txmgr.NewEvmTracker(txStore, ethKeyStore, big.NewInt(0), lggr), ethKeyStore, 100*time.Millisecond, ccfg.EVM(), ccfg.EVM().Transactions())`
$DIR/core/chains/evm/txmgr/resender_test.go: `.NewEvmTxmClient(ethClient, nil)`
$DIR/core/chains/evm/txmgr/resender_test.go: `.NewEvmTracker(txStore, ethKeyStore, big.NewInt(0), lggr)`
$DIR/core/chains/evm/txmgr/resender_test.go: `.NewInt(0)`
$DIR/core/chains/evm/txmgr/resender_test.go: `.EVM()`
$DIR/core/chains/evm/txmgr/resender_test.go: `.EVM()`
$DIR/core/chains/evm/txmgr/resender_test.go: `.Transactions()`
$DIR/core/chains/evm/txmgr/resender_test.go: `.MustInsertUnconfirmedEthTxWithBroadcastLegacyAttempt(t, txStore, int64(1), fromAddress, originalBroadcastAt)`
$DIR/core/chains/evm/txmgr/resender_test.go: `.On("BatchCallContextAll", mock.Anything, mock.Anything)`
$DIR/core/chains/evm/txmgr/resender_test.go: `.Return(nil)`
$DIR/core/chains/evm/txmgr/resender_test.go: `.XXXTestResendUnconfirmed()`
$DIR/core/chains/evm/txmgr/resender_test.go: `.XXXTestResendUnconfirmed()`
$DIR/core/chains/evm/txmgr/resender_test.go: `.AssertLogCountEventually(t, o, "TxAttempt has been unconfirmed for more than max duration", 1)`
$DIR/core/chains/evm/txmgr/resender_test.go: `.NewSqlxDB(t)`
$DIR/core/chains/evm/txmgr/resender_test.go: `.NewTestChainScopedConfig(t, func(c *toml.EVMConfig) {
// This can be anything as long as it isn't zero
c.Transactions.ResendAfterThreshold = commonconfig.MustNewDuration(42 * time.Hour)
// Set batch size low to test batching
c.RPCDefaultBatchSize = ptr[uint32](1)
})`
$DIR/core/chains/evm/txmgr/resender_test.go: `.MustNewDuration(42 * time.Hour)`
$DIR/core/chains/evm/txmgr/resender_test.go: `.NewTestTxStore(t, db)`
$DIR/core/chains/evm/txmgr/resender_test.go: `.NewKeyStore(t, db)`
$DIR/core/chains/evm/txmgr/resender_test.go: `.Eth()`
$DIR/core/chains/evm/txmgr/resender_test.go: `.MustInsertRandomKey(t, ethKeyStore)`
$DIR/core/chains/evm/txmgr/resender_test.go: `.Test(t)`
$DIR/core/chains/evm/txmgr/resender_test.go: `.Context(t)`
$DIR/core/chains/evm/txmgr/resender_test.go: `.NewEthClientMockWithDefaultChain(t)`
$DIR/core/chains/evm/txmgr/resender_test.go: `.On("IsL2")`
$DIR/core/chains/evm/txmgr/resender_test.go: `.Return(false)`
$DIR/core/chains/evm/txmgr/resender_test.go: `.Maybe()`
$DIR/core/chains/evm/txmgr/resender_test.go: `.NewEvmResender(lggr, txStore, txmgr.NewEvmTxmClient(ethClient, nil), txmgr.NewEvmTracker(txStore, ethKeyStore, big.NewInt(0), lggr), ethKeyStore, 100*time.Millisecond, ccfg.EVM(), ccfg.EVM().Transactions())`
$DIR/core/chains/evm/txmgr/resender_test.go: `.NewEvmTxmClient(ethClient, nil)`
$DIR/core/chains/evm/txmgr/resender_test.go: `.NewEvmTracker(txStore, ethKeyStore, big.NewInt(0), lggr)`
$DIR/core/chains/evm/txmgr/resender_test.go: `.NewInt(0)`
$DIR/core/chains/evm/txmgr/resender_test.go: `.EVM()`
$DIR/core/chains/evm/txmgr/resender_test.go: `.EVM()`
$DIR/core/chains/evm/txmgr/resender_test.go: `.Transactions()`
$DIR/core/chains/evm/txmgr/resender_test.go: `.Unix(1616509100, 0)`
$DIR/core/chains/evm/txmgr/resender_test.go: `.MustInsertUnconfirmedEthTxWithBroadcastLegacyAttempt(t, txStore, 0, fromAddress, originalBroadcastAt)`
$DIR/core/chains/evm/txmgr/resender_test.go: `.MustInsertUnconfirmedEthTxWithBroadcastLegacyAttempt(t, txStore, 1, fromAddress, originalBroadcastAt)`
$DIR/core/chains/evm/txmgr/resender_test.go: `.MustInsertUnconfirmedEthTxWithBroadcastLegacyAttempt(t, txStore, 2, fromAddress, time.Now().Add(1*time.Hour))`
$DIR/core/chains/evm/txmgr/resender_test.go: `.Now()`
$DIR/core/chains/evm/txmgr/resender_test.go: `.Add(1*time.Hour)`
$DIR/core/chains/evm/txmgr/resender_test.go: `.On("BatchCallContextAll", mock.Anything, mock.MatchedBy(func(b []rpc.BatchElem) bool {
return len(b) == 1 &&
b[0].Method == "eth_sendRawTransaction" && b[0].Args[0] == hexutil.Encode(etx.TxAttempts[0].SignedRawTx)
}))`
$DIR/core/chains/evm/txmgr/resender_test.go: `.MatchedBy(func(b []rpc.BatchElem) bool {
return len(b) == 1 &&
b[0].Method == "eth_sendRawTransaction" && b[0].Args[0] == hexutil.Encode(etx.TxAttempts[0].SignedRawTx)
})`
$DIR/core/chains/evm/txmgr/resender_test.go: `.Encode(etx.TxAttempts[0].SignedRawTx)`
$DIR/core/chains/evm/txmgr/resender_test.go: `.Return(nil)`
$DIR/core/chains/evm/txmgr/resender_test.go: `.On("BatchCallContextAll", mock.Anything, mock.MatchedBy(func(b []rpc.BatchElem) bool {
return len(b) == 1 &&
b[0].Method == "eth_sendRawTransaction" && b[0].Args[0] == hexutil.Encode(etx2.TxAttempts[0].SignedRawTx)
}))`
$DIR/core/chains/evm/txmgr/resender_test.go: `.MatchedBy(func(b []rpc.BatchElem) bool {
return len(b) == 1 &&
b[0].Method == "eth_sendRawTransaction" && b[0].Args[0] == hexutil.Encode(etx2.TxAttempts[0].SignedRawTx)
})`
$DIR/core/chains/evm/txmgr/resender_test.go: `.Encode(etx2.TxAttempts[0].SignedRawTx)`
$DIR/core/chains/evm/txmgr/resender_test.go: `.Return(nil)`
$DIR/core/chains/evm/txmgr/resender_test.go: `.Run(func(args mock.Arguments) {
elems := args.Get(1).([]rpc.BatchElem)
// It should update BroadcastAt even if there is an error here
elems[0].Error = pkgerrors.New("kaboom")
})`
$DIR/core/chains/evm/txmgr/resender_test.go: `.Get(1)`
$DIR/core/chains/evm/txmgr/resender_test.go: `.New("kaboom")`
$DIR/core/chains/evm/txmgr/resender_test.go: `.Start(ctx)`
$DIR/core/chains/evm/txmgr/resender_test.go: `.Stop()`
$DIR/core/chains/evm/txmgr/resender_test.go: `.EventuallyExpectationsMet(t, ethClient, 5*time.Second, time.Second)`
$DIR/core/chains/evm/txmgr/resender_test.go: `.Get(&dbEtx, `SELECT * FROM evm.txes WHERE id = $1`, etx.ID)`
$DIR/core/chains/evm/txmgr/resender_test.go: `.Get(&dbEtx2, `SELECT * FROM evm.txes WHERE id = $1`, etx2.ID)`
$DIR/core/chains/evm/txmgr/strategies_test.go: `mockTxStore.On("PruneUnstartedTxQueue", mock.Anything, queueSize-1, subject, mock.Anything, mock.Anything).Once().Return([]int64{1, 2}, nil)`
$DIR/core/chains/evm/txmgr/strategies_test.go: `.PruneQueue(tests.Context(t), nil)`
$DIR/core/chains/evm/txmgr/strategies_test.go: `.Context(t)`
$DIR/core/chains/evm/txmgr/strategies_test.go: `.New()`
$DIR/core/chains/evm/txmgr/strategies_test.go: `.NewDropOldestStrategy(subject, 1)`
$DIR/core/chains/evm/txmgr/strategies_test.go: `.Subject()`
$DIR/core/chains/evm/txmgr/strategies_test.go: `.New()`
$DIR/core/chains/evm/txmgr/strategies_test.go: `.NewEvmTxStore(t)`
$DIR/core/chains/evm/txmgr/strategies_test.go: `.NewDropOldestStrategy(subject, queueSize)`
$DIR/core/chains/evm/txmgr/strategies_test.go: `.On("PruneUnstartedTxQueue", mock.Anything, queueSize-1, subject, mock.Anything, mock.Anything)`
$DIR/core/chains/evm/txmgr/strategies_test.go: `.Once()`
$DIR/core/chains/evm/txmgr/strategies_test.go: `.Return([]int64{1, 2}, nil)`
$DIR/core/chains/evm/txmgr/strategies_test.go: `.PruneQueue(tests.Context(t), mockTxStore)`
$DIR/core/chains/evm/txmgr/strategies_test.go: `.Context(t)`
$DIR/core/chains/evm/txmgr/stuck_tx_detector_test.go: `feeEstimator.On("GetFee", mock.Anything, []byte{}, uint64(0), mock.Anything).Return(fee, uint64(0), nil)`
$DIR/core/chains/evm/txmgr/stuck_tx_detector_test.go: `mustInsertFatalErrorTxWithError(t, txStore, 0, fromAddress, blockNum)`
$DIR/core/chains/evm/txmgr/stuck_tx_detector_test.go: `mustInsertUnconfirmedTxWithBroadcastAttempts(t, txStore, 1, fromAddress, autoPurgeMinAttempts, blockNum-int64(autoPurgeThreshold), marketGasPrice.Add(oneGwei))`
$DIR/core/chains/evm/txmgr/stuck_tx_detector_test.go: `t.Run("returns empty list if no unconfimed transactions found", func(t *testing.T) {
_, fromAddress := cltest.MustInsertRandomKey(t, ethKeyStore)
stuckTxs, err := stuckTxDetector.FindUnconfirmedTxWithLowestNonce(ctx, []common.Address{fromAddress})
require.NoError(t, err)
require.Len(t, stuckTxs, 0)
})`
$DIR/core/chains/evm/txmgr/stuck_tx_detector_test.go: `t.Run("returns 1 unconfirmed transaction for each unique from address", func(t *testing.T) {
_, fromAddress1 := cltest.MustInsertRandomKey(t, ethKeyStore)
_, fromAddress2 := cltest.MustInsertRandomKey(t, ethKeyStore)
// Insert 2 txs for from address, should only return the lowest nonce txs
cltest.MustInsertUnconfirmedEthTxWithBroadcastLegacyAttempt(t, txStore, 0, fromAddress1)
cltest.MustInsertUnconfirmedEthTxWithBroadcastLegacyAttempt(t, txStore, 1, fromAddress1)
// Insert 1 tx for other from address, should return a tx
cltest.MustInsertUnconfirmedEthTxWithBroadcastLegacyAttempt(t, txStore, 0, fromAddress2)
stuckTxs, err := stuckTxDetector.FindUnconfirmedTxWithLowestNonce(ctx, []common.Address{fromAddress1, fromAddress2})
require.NoError(t, err)
require.Len(t, stuckTxs, 2)
var foundFromAddresses []common.Address
for _, stuckTx := range stuckTxs {
// Make sure lowest nonce tx is returned for both from addresses
require.Equal(t, types.Nonce(0), *stuckTx.Sequence)
// Make sure attempts are loaded into the tx
require.Len(t, stuckTx.TxAttempts, 1)
foundFromAddresses = append(foundFromAddresses, stuckTx.FromAddress)
}
require.Contains(t, foundFromAddresses, fromAddress1)
require.Contains(t, foundFromAddresses, fromAddress2)
})`
$DIR/core/chains/evm/txmgr/stuck_tx_detector_test.go: `cltest.MustInsertUnconfirmedEthTxWithBroadcastLegacyAttempt(t, txStore, 0, fromAddress1)`
$DIR/core/chains/evm/txmgr/stuck_tx_detector_test.go: `cltest.MustInsertUnconfirmedEthTxWithBroadcastLegacyAttempt(t, txStore, 1, fromAddress1)`
$DIR/core/chains/evm/txmgr/stuck_tx_detector_test.go: `cltest.MustInsertUnconfirmedEthTxWithBroadcastLegacyAttempt(t, txStore, 0, fromAddress2)`
$DIR/core/chains/evm/txmgr/stuck_tx_detector_test.go: `foundFromAddresses = append(foundFromAddresses, stuckTx.FromAddress)`
$DIR/core/chains/evm/txmgr/stuck_tx_detector_test.go: `mustInsertUnconfirmedEthTxWithBroadcastPurgeAttempt(t, txStore, 0, fromAddress)`
$DIR/core/chains/evm/txmgr/stuck_tx_detector_test.go: `feeEstimator.On("GetFee", mock.Anything, []byte{}, uint64(0), mock.Anything).Return(fee, uint64(0), nil)`
$DIR/core/chains/evm/txmgr/stuck_tx_detector_test.go: `t.Run("not stuck, Threshold amount of blocks have not passed since broadcast", func(t *testing.T) {
_, fromAddress := cltest.MustInsertRandomKey(t, ethKeyStore)
enabledAddresses := []common.Address{fromAddress}
// Create attempts broadcasted at the current broadcast number to test the block num threshold check
// Create autoPurgeMinAttempts number of attempts to ensure the broadcast attempt count check is not being triggered
// Create attempts so that the latest has a higher gas price than the market to ensure the gas price check is not being triggered
mustInsertUnconfirmedTxWithBroadcastAttempts(t, txStore, 0, fromAddress, autoPurgeMinAttempts, blockNum, marketGasPrice.Add(oneGwei))
// Run detection logic on the same block number as the latest broadcast attempt to stay within the autoPurgeThreshold
txs, err := stuckTxDetector.DetectStuckTransactions(ctx, enabledAddresses, blockNum)
require.NoError(t, err)
require.Len(t, txs, 0)
})`
$DIR/core/chains/evm/txmgr/stuck_tx_detector_test.go: `mustInsertUnconfirmedTxWithBroadcastAttempts(t, txStore, 0, fromAddress, autoPurgeMinAttempts, blockNum, marketGasPrice.Add(oneGwei))`
$DIR/core/chains/evm/txmgr/stuck_tx_detector_test.go: `t.Run("not stuck, Threshold amount of blocks have not passed since last purge", func(t *testing.T) {
_, fromAddress := cltest.MustInsertRandomKey(t, ethKeyStore)
enabledAddresses := []common.Address{fromAddress}
// Create attempts broadcasted autoPurgeThreshold block ago to ensure broadcast block num check is not being triggered
// Create autoPurgeMinAttempts number of attempts to ensure the broadcast attempt count check is not being triggered
// Create attempts so that the latest has a higher gas price than the market to ensure the gas price check is not being triggered
mustInsertUnconfirmedTxWithBroadcastAttempts(t, txStore, 0, fromAddress, autoPurgeMinAttempts, blockNum-int64(autoPurgeThreshold), marketGasPrice.Add(oneGwei))
// Set the last purge block num as the current block num to test rate limiting condition
stuckTxDetector.SetPurgeBlockNum(fromAddress, blockNum)
// Run detection logic on autoPurgeThreshold blocks past the latest broadcast attempt
txs, err := stuckTxDetector.DetectStuckTransactions(ctx, enabledAddresses, blockNum)
require.NoError(t, err)
require.Len(t, txs, 0)
})`
$DIR/core/chains/evm/txmgr/stuck_tx_detector_test.go: `mustInsertUnconfirmedTxWithBroadcastAttempts(t, txStore, 0, fromAddress, autoPurgeMinAttempts, blockNum-int64(autoPurgeThreshold), marketGasPrice.Add(oneGwei))`
$DIR/core/chains/evm/txmgr/stuck_tx_detector_test.go: `stuckTxDetector.SetPurgeBlockNum(fromAddress, blockNum)`
$DIR/core/chains/evm/txmgr/stuck_tx_detector_test.go: `t.Run("not stuck, MinAttempts amount of attempts have not been broadcasted", func(t *testing.T) {
_, fromAddress := cltest.MustInsertRandomKey(t, ethKeyStore)
enabledAddresses := []common.Address{fromAddress}
// Create attempts broadcasted autoPurgeThreshold block ago to ensure broadcast block num check is not being triggered
// Create fewer attempts than autoPurgeMinAttempts to test min attempt check
// Create attempts so that the latest has a higher gas price than the market to ensure the gas price check is not being triggered
mustInsertUnconfirmedTxWithBroadcastAttempts(t, txStore, 0, fromAddress, autoPurgeMinAttempts-1, blockNum-int64(autoPurgeThreshold), marketGasPrice.Add(oneGwei))
// Run detection logic on autoPurgeThreshold blocks past the latest broadcast attempt
txs, err := stuckTxDetector.DetectStuckTransactions(ctx, enabledAddresses, blockNum)
require.NoError(t, err)
require.Len(t, txs, 0)
})`
$DIR/core/chains/evm/txmgr/stuck_tx_detector_test.go: `mustInsertUnconfirmedTxWithBroadcastAttempts(t, txStore, 0, fromAddress, autoPurgeMinAttempts-1, blockNum-int64(autoPurgeThreshold), marketGasPrice.Add(oneGwei))`
$DIR/core/chains/evm/txmgr/stuck_tx_detector_test.go: `t.Run("not stuck, transaction gas price is lower than market gas price", func(t *testing.T) {
_, fromAddress := cltest.MustInsertRandomKey(t, ethKeyStore)
enabledAddresses := []common.Address{fromAddress}
// Create attempts broadcasted autoPurgeThreshold block ago to ensure broadcast block num check is not being triggered
// Create autoPurgeMinAttempts number of attempts to ensure the broadcast attempt count check is not being triggered
// Create attempts so that the latest has a lower gas price than the market to test the gas price check
mustInsertUnconfirmedTxWithBroadcastAttempts(t, txStore, 0, fromAddress, autoPurgeMinAttempts, blockNum-int64(autoPurgeThreshold), marketGasPrice.Sub(oneGwei))
// Run detection logic on autoPurgeThreshold blocks past the latest broadcast attempt
txs, err := stuckTxDetector.DetectStuckTransactions(ctx, enabledAddresses, blockNum)
require.NoError(t, err)
require.Len(t, txs, 0)
})`
$DIR/core/chains/evm/txmgr/stuck_tx_detector_test.go: `mustInsertUnconfirmedTxWithBroadcastAttempts(t, txStore, 0, fromAddress, autoPurgeMinAttempts, blockNum-int64(autoPurgeThreshold), marketGasPrice.Sub(oneGwei))`
$DIR/core/chains/evm/txmgr/stuck_tx_detector_test.go: `mustInsertUnconfirmedTxWithBroadcastAttempts(t, txStore, 0, fromAddress, autoPurgeMinAttempts, blockNum-int64(autoPurgeThreshold)+int64(autoPurgeMinAttempts-1), marketGasPrice.Add(oneGwei))`
$DIR/core/chains/evm/txmgr/stuck_tx_detector_test.go: `t.Run("returns empty list if no stuck transactions identified", func(t *testing.T) {
_, fromAddress := cltest.MustInsertRandomKey(t, ethKeyStore)
tx := mustInsertUnconfirmedTxWithBroadcastAttempts(t, txStore, 0, fromAddress, 1, blockNum, tenGwei)
attempts := tx.TxAttempts[0]
// Request still returns transaction by hash, transaction not discarded by network and not considered stuck
ethClient.On("BatchCallContext", mock.Anything, mock.MatchedBy(func(b []rpc.BatchElem) bool {
return len(b) == 1 && cltest.BatchElemMatchesParams(b[0], attempts.Hash, "eth_getTransactionByHash")
})).Return(nil).Run(func(args mock.Arguments) {
elems := args.Get(1).([]rpc.BatchElem)
resp, err := json.Marshal(types.Transaction{})
require.NoError(t, err)
elems[0].Error = json.Unmarshal(resp, elems[0].Result)
}).Once()
txs, err := stuckTxDetector.DetectStuckTransactions(ctx, []common.Address{fromAddress}, blockNum)
require.NoError(t, err)
require.Len(t, txs, 0)
})`
$DIR/core/chains/evm/txmgr/stuck_tx_detector_test.go: `ethClient.On("BatchCallContext", mock.Anything, mock.MatchedBy(func(b []rpc.BatchElem) bool {
return len(b) == 1 && cltest.BatchElemMatchesParams(b[0], attempts.Hash, "eth_getTransactionByHash")
})).Return(nil).Run(func(args mock.Arguments) {
elems := args.Get(1).([]rpc.BatchElem)
resp, err := json.Marshal(types.Transaction{})
require.NoError(t, err)
elems[0].Error = json.Unmarshal(resp, elems[0].Result)
}).Once()`
$DIR/core/chains/evm/txmgr/stuck_tx_detector_test.go: `elems[0].Error = json.Unmarshal(resp, elems[0].Result)`
$DIR/core/chains/evm/txmgr/stuck_tx_detector_test.go: `mustInsertUnconfirmedTxWithBroadcastAttempts(t, txStore, 0, fromAddress1, 1, blockNum, tenGwei)`
$DIR/core/chains/evm/txmgr/stuck_tx_detector_test.go: `mustInsertUnconfirmedTxWithBroadcastAttempts(t, txStore, 0, fromAddress2, 1, blockNum, tenGwei)`
$DIR/core/chains/evm/txmgr/stuck_tx_detector_test.go: `ethClient.On("BatchCallContext", mock.Anything, mock.MatchedBy(func(b []rpc.BatchElem) bool {
return len(b) == 2
})).Return(nil).Run(func(args mock.Arguments) {
elems := args.Get(1).([]rpc.BatchElem)
elems[0].Result = nil // Return nil to signal discarded tx
resp, err := json.Marshal(types.Transaction{})
require.NoError(t, err)
elems[1].Error = json.Unmarshal(resp, elems[1].Result) // Return non-nil result to signal a valid tx
}).Once()`
$DIR/core/chains/evm/txmgr/stuck_tx_detector_test.go: `elems[0].Result = nil`
$DIR/core/chains/evm/txmgr/stuck_tx_detector_test.go: `elems[1].Error = json.Unmarshal(resp, elems[1].Result)`
$DIR/core/chains/evm/txmgr/stuck_tx_detector_test.go: `.NewSqlxDB(t)`
$DIR/core/chains/evm/txmgr/stuck_tx_detector_test.go: `.NewTestTxStore(t, db)`
$DIR/core/chains/evm/txmgr/stuck_tx_detector_test.go: `.NewKeyStore(t, db)`
$DIR/core/chains/evm/txmgr/stuck_tx_detector_test.go: `.Eth()`
$DIR/core/chains/evm/txmgr/stuck_tx_detector_test.go: `.MustInsertRandomKey(t, ethKeyStore)`
$DIR/core/chains/evm/txmgr/stuck_tx_detector_test.go: `.Test(t)`
$DIR/core/chains/evm/txmgr/stuck_tx_detector_test.go: `.NewEthClientMockWithDefaultChain(t)`
$DIR/core/chains/evm/txmgr/stuck_tx_detector_test.go: `.NewEvmFeeEstimator(t)`
$DIR/core/chains/evm/txmgr/stuck_tx_detector_test.go: `.NewStuckTxDetector(lggr, testutils.FixtureChainID, "", assets.NewWei(assets.NewEth(100).ToInt()), autoPurgeCfg, feeEstimator, txStore, ethClient)`
$DIR/core/chains/evm/txmgr/stuck_tx_detector_test.go: `.NewWei(assets.NewEth(100).ToInt())`
$DIR/core/chains/evm/txmgr/stuck_tx_detector_test.go: `.NewEth(100)`
$DIR/core/chains/evm/txmgr/stuck_tx_detector_test.go: `.ToInt()`
$DIR/core/chains/evm/txmgr/stuck_tx_detector_test.go: `.DetectStuckTransactions(tests.Context(t), []common.Address{fromAddress}, 100)`
$DIR/core/chains/evm/txmgr/stuck_tx_detector_test.go: `.Context(t)`
$DIR/core/chains/evm/txmgr/stuck_tx_detector_test.go: `.NewSqlxDB(t)`
$DIR/core/chains/evm/txmgr/stuck_tx_detector_test.go: `.NewTestTxStore(t, db)`
$DIR/core/chains/evm/txmgr/stuck_tx_detector_test.go: `.NewKeyStore(t, db)`
$DIR/core/chains/evm/txmgr/stuck_tx_detector_test.go: `.Eth()`
$DIR/core/chains/evm/txmgr/stuck_tx_detector_test.go: `.Context(t)`
$DIR/core/chains/evm/txmgr/stuck_tx_detector_test.go: `.Test(t)`
$DIR/core/chains/evm/txmgr/stuck_tx_detector_test.go: `.NewEthClientMockWithDefaultChain(t)`
$DIR/core/chains/evm/txmgr/stuck_tx_detector_test.go: `.NewEvmFeeEstimator(t)`
$DIR/core/chains/evm/txmgr/stuck_tx_detector_test.go: `.GWei(15)`
$DIR/core/chains/evm/txmgr/stuck_tx_detector_test.go: `.On("GetFee", mock.Anything, []byte{}, uint64(0), mock.Anything)`
$DIR/core/chains/evm/txmgr/stuck_tx_detector_test.go: `.Return(fee, uint64(0), nil)`
$DIR/core/chains/evm/txmgr/stuck_tx_detector_test.go: `.NewStuckTxDetector(lggr, testutils.FixtureChainID, "", assets.NewWei(assets.NewEth(100).ToInt()), autoPurgeCfg, feeEstimator, txStore, ethClient)`
$DIR/core/chains/evm/txmgr/stuck_tx_detector_test.go: `.NewWei(assets.NewEth(100).ToInt())`
$DIR/core/chains/evm/txmgr/stuck_tx_detector_test.go: `.NewEth(100)`
$DIR/core/chains/evm/txmgr/stuck_tx_detector_test.go: `.ToInt()`
$DIR/core/chains/evm/txmgr/stuck_tx_detector_test.go: `.MustInsertRandomKey(t, ethKeyStore)`
$DIR/core/chains/evm/txmgr/stuck_tx_detector_test.go: `.LoadPurgeBlockNumMap(ctx, []common.Address{fromAddress})`
$DIR/core/chains/evm/txmgr/stuck_tx_detector_test.go: `.Add(oneGwei)`
$DIR/core/chains/evm/txmgr/stuck_tx_detector_test.go: `.DetectStuckTransactions(ctx, enabledAddresses, blockNum)`
$DIR/core/chains/evm/txmgr/stuck_tx_detector_test.go: `.NewSqlxDB(t)`
$DIR/core/chains/evm/txmgr/stuck_tx_detector_test.go: `.NewTestTxStore(t, db)`
$DIR/core/chains/evm/txmgr/stuck_tx_detector_test.go: `.NewKeyStore(t, db)`
$DIR/core/chains/evm/txmgr/stuck_tx_detector_test.go: `.Eth()`
$DIR/core/chains/evm/txmgr/stuck_tx_detector_test.go: `.Context(t)`
$DIR/core/chains/evm/txmgr/stuck_tx_detector_test.go: `.Test(t)`
$DIR/core/chains/evm/txmgr/stuck_tx_detector_test.go: `.NewEthClientMockWithDefaultChain(t)`
$DIR/core/chains/evm/txmgr/stuck_tx_detector_test.go: `.NewEvmFeeEstimator(t)`
$DIR/core/chains/evm/txmgr/stuck_tx_detector_test.go: `.NewStuckTxDetector(lggr, testutils.FixtureChainID, "", assets.NewWei(assets.NewEth(100).ToInt()), config.EVM().Transactions().AutoPurge(), feeEstimator, txStore, ethClient)`
$DIR/core/chains/evm/txmgr/stuck_tx_detector_test.go: `.NewWei(assets.NewEth(100).ToInt())`
$DIR/core/chains/evm/txmgr/stuck_tx_detector_test.go: `.NewEth(100)`
$DIR/core/chains/evm/txmgr/stuck_tx_detector_test.go: `.ToInt()`
$DIR/core/chains/evm/txmgr/stuck_tx_detector_test.go: `.EVM()`
$DIR/core/chains/evm/txmgr/stuck_tx_detector_test.go: `.Transactions()`
$DIR/core/chains/evm/txmgr/stuck_tx_detector_test.go: `.AutoPurge()`
$DIR/core/chains/evm/txmgr/stuck_tx_detector_test.go: `.Run("returns empty list if no unconfimed transactions found", func(t *testing.T) {
_, fromAddress := cltest.MustInsertRandomKey(t, ethKeyStore)
stuckTxs, err := stuckTxDetector.FindUnconfirmedTxWithLowestNonce(ctx, []common.Address{fromAddress})
require.NoError(t, err)
require.Len(t, stuckTxs, 0)
})`
$DIR/core/chains/evm/txmgr/stuck_tx_detector_test.go: `.MustInsertRandomKey(t, ethKeyStore)`
$DIR/core/chains/evm/txmgr/stuck_tx_detector_test.go: `.FindUnconfirmedTxWithLowestNonce(ctx, []common.Address{fromAddress})`
$DIR/core/chains/evm/txmgr/stuck_tx_detector_test.go: `.Run("returns 1 unconfirmed transaction for each unique from address", func(t *testing.T) {
_, fromAddress1 := cltest.MustInsertRandomKey(t, ethKeyStore)
_, fromAddress2 := cltest.MustInsertRandomKey(t, ethKeyStore)
// Insert 2 txs for from address, should only return the lowest nonce txs
cltest.MustInsertUnconfirmedEthTxWithBroadcastLegacyAttempt(t, txStore, 0, fromAddress1)
cltest.MustInsertUnconfirmedEthTxWithBroadcastLegacyAttempt(t, txStore, 1, fromAddress1)
// Insert 1 tx for other from address, should return a tx
cltest.MustInsertUnconfirmedEthTxWithBroadcastLegacyAttempt(t, txStore, 0, fromAddress2)
stuckTxs, err := stuckTxDetector.FindUnconfirmedTxWithLowestNonce(ctx, []common.Address{fromAddress1, fromAddress2})
require.NoError(t, err)
require.Len(t, stuckTxs, 2)
var foundFromAddresses []common.Address
for _, stuckTx := range stuckTxs {
// Make sure lowest nonce tx is returned for both from addresses
require.Equal(t, types.Nonce(0), *stuckTx.Sequence)
// Make sure attempts are loaded into the tx
require.Len(t, stuckTx.TxAttempts, 1)
foundFromAddresses = append(foundFromAddresses, stuckTx.FromAddress)
}
require.Contains(t, foundFromAddresses, fromAddress1)
require.Contains(t, foundFromAddresses, fromAddress2)
})`
$DIR/core/chains/evm/txmgr/stuck_tx_detector_test.go: `.MustInsertRandomKey(t, ethKeyStore)`
$DIR/core/chains/evm/txmgr/stuck_tx_detector_test.go: `.MustInsertRandomKey(t, ethKeyStore)`
$DIR/core/chains/evm/txmgr/stuck_tx_detector_test.go: `.MustInsertUnconfirmedEthTxWithBroadcastLegacyAttempt(t, txStore, 0, fromAddress1)`
$DIR/core/chains/evm/txmgr/stuck_tx_detector_test.go: `.MustInsertUnconfirmedEthTxWithBroadcastLegacyAttempt(t, txStore, 1, fromAddress1)`
$DIR/core/chains/evm/txmgr/stuck_tx_detector_test.go: `.MustInsertUnconfirmedEthTxWithBroadcastLegacyAttempt(t, txStore, 0, fromAddress2)`
$DIR/core/chains/evm/txmgr/stuck_tx_detector_test.go: `.FindUnconfirmedTxWithLowestNonce(ctx, []common.Address{fromAddress1, fromAddress2})`
$DIR/core/chains/evm/txmgr/stuck_tx_detector_test.go: `.MustInsertRandomKey(t, ethKeyStore)`
$DIR/core/chains/evm/txmgr/stuck_tx_detector_test.go: `.FindUnconfirmedTxWithLowestNonce(ctx, []common.Address{fromAddress})`
$DIR/core/chains/evm/txmgr/stuck_tx_detector_test.go: `.NewSqlxDB(t)`
$DIR/core/chains/evm/txmgr/stuck_tx_detector_test.go: `.NewTestTxStore(t, db)`
$DIR/core/chains/evm/txmgr/stuck_tx_detector_test.go: `.NewKeyStore(t, db)`
$DIR/core/chains/evm/txmgr/stuck_tx_detector_test.go: `.Eth()`
$DIR/core/chains/evm/txmgr/stuck_tx_detector_test.go: `.Context(t)`
$DIR/core/chains/evm/txmgr/stuck_tx_detector_test.go: `.Test(t)`
$DIR/core/chains/evm/txmgr/stuck_tx_detector_test.go: `.NewEvmFeeEstimator(t)`
$DIR/core/chains/evm/txmgr/stuck_tx_detector_test.go: `.On("GetFee", mock.Anything, []byte{}, uint64(0), mock.Anything)`
$DIR/core/chains/evm/txmgr/stuck_tx_detector_test.go: `.Return(fee, uint64(0), nil)`
$DIR/core/chains/evm/txmgr/stuck_tx_detector_test.go: `.NewEthClientMockWithDefaultChain(t)`
$DIR/core/chains/evm/txmgr/stuck_tx_detector_test.go: `.NewStuckTxDetector(lggr, testutils.FixtureChainID, "", assets.NewWei(assets.NewEth(100).ToInt()), autoPurgeCfg, feeEstimator, txStore, ethClient)`
$DIR/core/chains/evm/txmgr/stuck_tx_detector_test.go: `.NewWei(assets.NewEth(100).ToInt())`
$DIR/core/chains/evm/txmgr/stuck_tx_detector_test.go: `.NewEth(100)`
$DIR/core/chains/evm/txmgr/stuck_tx_detector_test.go: `.ToInt()`
$DIR/core/chains/evm/txmgr/stuck_tx_detector_test.go: `.Run("not stuck, Threshold amount of blocks have not passed since broadcast", func(t *testing.T) {
_, fromAddress := cltest.MustInsertRandomKey(t, ethKeyStore)
enabledAddresses := []common.Address{fromAddress}
// Create attempts broadcasted at the current broadcast number to test the block num threshold check
// Create autoPurgeMinAttempts number of attempts to ensure the broadcast attempt count check is not being triggered
// Create attempts so that the latest has a higher gas price than the market to ensure the gas price check is not being triggered
mustInsertUnconfirmedTxWithBroadcastAttempts(t, txStore, 0, fromAddress, autoPurgeMinAttempts, blockNum, marketGasPrice.Add(oneGwei))
// Run detection logic on the same block number as the latest broadcast attempt to stay within the autoPurgeThreshold
txs, err := stuckTxDetector.DetectStuckTransactions(ctx, enabledAddresses, blockNum)
require.NoError(t, err)
require.Len(t, txs, 0)
})`
$DIR/core/chains/evm/txmgr/stuck_tx_detector_test.go: `.MustInsertRandomKey(t, ethKeyStore)`
$DIR/core/chains/evm/txmgr/stuck_tx_detector_test.go: `.Add(oneGwei)`
$DIR/core/chains/evm/txmgr/stuck_tx_detector_test.go: `.DetectStuckTransactions(ctx, enabledAddresses, blockNum)`
$DIR/core/chains/evm/txmgr/stuck_tx_detector_test.go: `.Run("not stuck, Threshold amount of blocks have not passed since last purge", func(t *testing.T) {
_, fromAddress := cltest.MustInsertRandomKey(t, ethKeyStore)
enabledAddresses := []common.Address{fromAddress}
// Create attempts broadcasted autoPurgeThreshold block ago to ensure broadcast block num check is not being triggered
// Create autoPurgeMinAttempts number of attempts to ensure the broadcast attempt count check is not being triggered
// Create attempts so that the latest has a higher gas price than the market to ensure the gas price check is not being triggered
mustInsertUnconfirmedTxWithBroadcastAttempts(t, txStore, 0, fromAddress, autoPurgeMinAttempts, blockNum-int64(autoPurgeThreshold), marketGasPrice.Add(oneGwei))
// Set the last purge block num as the current block num to test rate limiting condition
stuckTxDetector.SetPurgeBlockNum(fromAddress, blockNum)
// Run detection logic on autoPurgeThreshold blocks past the latest broadcast attempt
txs, err := stuckTxDetector.DetectStuckTransactions(ctx, enabledAddresses, blockNum)
require.NoError(t, err)
require.Len(t, txs, 0)
})`
$DIR/core/chains/evm/txmgr/stuck_tx_detector_test.go: `.MustInsertRandomKey(t, ethKeyStore)`
$DIR/core/chains/evm/txmgr/stuck_tx_detector_test.go: `.Add(oneGwei)`
$DIR/core/chains/evm/txmgr/stuck_tx_detector_test.go: `.SetPurgeBlockNum(fromAddress, blockNum)`
$DIR/core/chains/evm/txmgr/stuck_tx_detector_test.go: `.DetectStuckTransactions(ctx, enabledAddresses, blockNum)`
$DIR/core/chains/evm/txmgr/stuck_tx_detector_test.go: `.Run("not stuck, MinAttempts amount of attempts have not been broadcasted", func(t *testing.T) {
_, fromAddress := cltest.MustInsertRandomKey(t, ethKeyStore)
enabledAddresses := []common.Address{fromAddress}
// Create attempts broadcasted autoPurgeThreshold block ago to ensure broadcast block num check is not being triggered
// Create fewer attempts than autoPurgeMinAttempts to test min attempt check
// Create attempts so that the latest has a higher gas price than the market to ensure the gas price check is not being triggered
mustInsertUnconfirmedTxWithBroadcastAttempts(t, txStore, 0, fromAddress, autoPurgeMinAttempts-1, blockNum-int64(autoPurgeThreshold), marketGasPrice.Add(oneGwei))
// Run detection logic on autoPurgeThreshold blocks past the latest broadcast attempt
txs, err := stuckTxDetector.DetectStuckTransactions(ctx, enabledAddresses, blockNum)
require.NoError(t, err)
require.Len(t, txs, 0)
})`
$DIR/core/chains/evm/txmgr/stuck_tx_detector_test.go: `.MustInsertRandomKey(t, ethKeyStore)`
$DIR/core/chains/evm/txmgr/stuck_tx_detector_test.go: `.Add(oneGwei)`
$DIR/core/chains/evm/txmgr/stuck_tx_detector_test.go: `.DetectStuckTransactions(ctx, enabledAddresses, blockNum)`
$DIR/core/chains/evm/txmgr/stuck_tx_detector_test.go: `.Run("not stuck, transaction gas price is lower than market gas price", func(t *testing.T) {
_, fromAddress := cltest.MustInsertRandomKey(t, ethKeyStore)
enabledAddresses := []common.Address{fromAddress}
// Create attempts broadcasted autoPurgeThreshold block ago to ensure broadcast block num check is not being triggered
// Create autoPurgeMinAttempts number of attempts to ensure the broadcast attempt count check is not being triggered
// Create attempts so that the latest has a lower gas price than the market to test the gas price check
mustInsertUnconfirmedTxWithBroadcastAttempts(t, txStore, 0, fromAddress, autoPurgeMinAttempts, blockNum-int64(autoPurgeThreshold), marketGasPrice.Sub(oneGwei))
// Run detection logic on autoPurgeThreshold blocks past the latest broadcast attempt
txs, err := stuckTxDetector.DetectStuckTransactions(ctx, enabledAddresses, blockNum)
require.NoError(t, err)
require.Len(t, txs, 0)
})`
$DIR/core/chains/evm/txmgr/stuck_tx_detector_test.go: `.MustInsertRandomKey(t, ethKeyStore)`
$DIR/core/chains/evm/txmgr/stuck_tx_detector_test.go: `.Sub(oneGwei)`
$DIR/core/chains/evm/txmgr/stuck_tx_detector_test.go: `.DetectStuckTransactions(ctx, enabledAddresses, blockNum)`
$DIR/core/chains/evm/txmgr/stuck_tx_detector_test.go: `.MustInsertRandomKey(t, ethKeyStore)`
$DIR/core/chains/evm/txmgr/stuck_tx_detector_test.go: `.Add(oneGwei)`
$DIR/core/chains/evm/txmgr/stuck_tx_detector_test.go: `.DetectStuckTransactions(ctx, enabledAddresses, blockNum)`
$DIR/core/chains/evm/txmgr/stuck_tx_detector_test.go: `.NewSqlxDB(t)`
$DIR/core/chains/evm/txmgr/stuck_tx_detector_test.go: `.NewTestTxStore(t, db)`
$DIR/core/chains/evm/txmgr/stuck_tx_detector_test.go: `.NewKeyStore(t, db)`
$DIR/core/chains/evm/txmgr/stuck_tx_detector_test.go: `.Eth()`
$DIR/core/chains/evm/txmgr/stuck_tx_detector_test.go: `.Context(t)`
$DIR/core/chains/evm/txmgr/stuck_tx_detector_test.go: `.Test(t)`
$DIR/core/chains/evm/txmgr/stuck_tx_detector_test.go: `.NewEvmFeeEstimator(t)`
$DIR/core/chains/evm/txmgr/stuck_tx_detector_test.go: `.NewEthClientMockWithDefaultChain(t)`
$DIR/core/chains/evm/txmgr/stuck_tx_detector_test.go: `.NewStuckTxDetector(lggr, testutils.FixtureChainID, chaintype.ChainZkEvm, assets.NewWei(assets.NewEth(100).ToInt()), autoPurgeCfg, feeEstimator, txStore, ethClient)`
$DIR/core/chains/evm/txmgr/stuck_tx_detector_test.go: `.NewWei(assets.NewEth(100).ToInt())`
$DIR/core/chains/evm/txmgr/stuck_tx_detector_test.go: `.NewEth(100)`
$DIR/core/chains/evm/txmgr/stuck_tx_detector_test.go: `.ToInt()`
$DIR/core/chains/evm/txmgr/stuck_tx_detector_test.go: `.Run("returns empty list if no stuck transactions identified", func(t *testing.T) {
_, fromAddress := cltest.MustInsertRandomKey(t, ethKeyStore)
tx := mustInsertUnconfirmedTxWithBroadcastAttempts(t, txStore, 0, fromAddress, 1, blockNum, tenGwei)
attempts := tx.TxAttempts[0]
// Request still returns transaction by hash, transaction not discarded by network and not considered stuck
ethClient.On("BatchCallContext", mock.Anything, mock.MatchedBy(func(b []rpc.BatchElem) bool {
return len(b) == 1 && cltest.BatchElemMatchesParams(b[0], attempts.Hash, "eth_getTransactionByHash")
})).Return(nil).Run(func(args mock.Arguments) {
elems := args.Get(1).([]rpc.BatchElem)
resp, err := json.Marshal(types.Transaction{})
require.NoError(t, err)
elems[0].Error = json.Unmarshal(resp, elems[0].Result)
}).Once()
txs, err := stuckTxDetector.DetectStuckTransactions(ctx, []common.Address{fromAddress}, blockNum)
require.NoError(t, err)
require.Len(t, txs, 0)
})`
$DIR/core/chains/evm/txmgr/stuck_tx_detector_test.go: `.MustInsertRandomKey(t, ethKeyStore)`
$DIR/core/chains/evm/txmgr/stuck_tx_detector_test.go: `.On("BatchCallContext", mock.Anything, mock.MatchedBy(func(b []rpc.BatchElem) bool {
return len(b) == 1 && cltest.BatchElemMatchesParams(b[0], attempts.Hash, "eth_getTransactionByHash")
}))`
$DIR/core/chains/evm/txmgr/stuck_tx_detector_test.go: `.MatchedBy(func(b []rpc.BatchElem) bool {
return len(b) == 1 && cltest.BatchElemMatchesParams(b[0], attempts.Hash, "eth_getTransactionByHash")
})`
$DIR/core/chains/evm/txmgr/stuck_tx_detector_test.go: `.BatchElemMatchesParams(b[0], attempts.Hash, "eth_getTransactionByHash")`
$DIR/core/chains/evm/txmgr/stuck_tx_detector_test.go: `.Return(nil)`
$DIR/core/chains/evm/txmgr/stuck_tx_detector_test.go: `.Run(func(args mock.Arguments) {
elems := args.Get(1).([]rpc.BatchElem)
resp, err := json.Marshal(types.Transaction{})
require.NoError(t, err)
elems[0].Error = json.Unmarshal(resp, elems[0].Result)
})`
$DIR/core/chains/evm/txmgr/stuck_tx_detector_test.go: `.Get(1)`
$DIR/core/chains/evm/txmgr/stuck_tx_detector_test.go: `.Marshal(types.Transaction{})`
$DIR/core/chains/evm/txmgr/stuck_tx_detector_test.go: `.Unmarshal(resp, elems[0].Result)`
$DIR/core/chains/evm/txmgr/stuck_tx_detector_test.go: `.Once()`
$DIR/core/chains/evm/txmgr/stuck_tx_detector_test.go: `.DetectStuckTransactions(ctx, []common.Address{fromAddress}, blockNum)`
$DIR/core/chains/evm/txmgr/stuck_tx_detector_test.go: `.MustInsertRandomKey(t, ethKeyStore)`
$DIR/core/chains/evm/txmgr/stuck_tx_detector_test.go: `.MustInsertRandomKey(t, ethKeyStore)`
$DIR/core/chains/evm/txmgr/stuck_tx_detector_test.go: `.On("BatchCallContext", mock.Anything, mock.MatchedBy(func(b []rpc.BatchElem) bool {
return len(b) == 2
}))`
$DIR/core/chains/evm/txmgr/stuck_tx_detector_test.go: `.MatchedBy(func(b []rpc.BatchElem) bool {
return len(b) == 2
})`
$DIR/core/chains/evm/txmgr/stuck_tx_detector_test.go: `.Return(nil)`
$DIR/core/chains/evm/txmgr/stuck_tx_detector_test.go: `.Run(func(args mock.Arguments) {
elems := args.Get(1).([]rpc.BatchElem)
elems[0].Result = nil // Return nil to signal discarded tx
resp, err := json.Marshal(types.Transaction{})
require.NoError(t, err)
elems[1].Error = json.Unmarshal(resp, elems[1].Result) // Return non-nil result to signal a valid tx
})`
$DIR/core/chains/evm/txmgr/stuck_tx_detector_test.go: `.Get(1)`
$DIR/core/chains/evm/txmgr/stuck_tx_detector_test.go: `.Marshal(types.Transaction{})`
$DIR/core/chains/evm/txmgr/stuck_tx_detector_test.go: `.Unmarshal(resp, elems[1].Result)`
$DIR/core/chains/evm/txmgr/stuck_tx_detector_test.go: `.Once()`
$DIR/core/chains/evm/txmgr/stuck_tx_detector_test.go: `.DetectStuckTransactions(ctx, []common.Address{fromAddress1, fromAddress2}, blockNum)`
$DIR/core/chains/evm/txmgr/stuck_tx_detector_test.go: `.NewSqlxDB(t)`
$DIR/core/chains/evm/txmgr/stuck_tx_detector_test.go: `.NewTestTxStore(t, db)`
$DIR/core/chains/evm/txmgr/stuck_tx_detector_test.go: `.NewKeyStore(t, db)`
$DIR/core/chains/evm/txmgr/stuck_tx_detector_test.go: `.Eth()`
$DIR/core/chains/evm/txmgr/stuck_tx_detector_test.go: `.Context(t)`
$DIR/core/chains/evm/txmgr/stuck_tx_detector_test.go: `.Test(t)`
$DIR/core/chains/evm/txmgr/stuck_tx_detector_test.go: `.NewEvmFeeEstimator(t)`
$DIR/core/chains/evm/txmgr/stuck_tx_detector_test.go: `.NewEthClientMockWithDefaultChain(t)`
$DIR/core/chains/evm/txmgr/stuck_tx_detector_test.go: `.MustInsertRandomKey(t, ethKeyStore)`
$DIR/core/chains/evm/txmgr/stuck_tx_detector_test.go: `.MustInsertRandomKey(t, ethKeyStore)`
$DIR/core/chains/evm/txmgr/stuck_tx_detector_test.go: `.NewServer(http.HandlerFunc(func(res http.ResponseWriter, req *http.Request) {
_, err := res.Write([]byte(fmt.Sprintf(`{"errcode": 0,"errmsg": "","data": {"%s": 1, "%s": 0}}`, attempts1.Hash, attempts2.Hash)))
require.NoError(t, err)
}))`
$DIR/core/chains/evm/txmgr/stuck_tx_detector_test.go: `.HandlerFunc(func(res http.ResponseWriter, req *http.Request) {
_, err := res.Write([]byte(fmt.Sprintf(`{"errcode": 0,"errmsg": "","data": {"%s": 1, "%s": 0}}`, attempts1.Hash, attempts2.Hash)))
require.NoError(t, err)
})`
$DIR/core/chains/evm/txmgr/stuck_tx_detector_test.go: `.Write([]byte(fmt.Sprintf(`{"errcode": 0,"errmsg": "","data": {"%s": 1, "%s": 0}}`, attempts1.Hash, attempts2.Hash)))`
$DIR/core/chains/evm/txmgr/stuck_tx_detector_test.go: `.Sprintf(`{"errcode": 0,"errmsg": "","data": {"%s": 1, "%s": 0}}`, attempts1.Hash, attempts2.Hash)`
$DIR/core/chains/evm/txmgr/stuck_tx_detector_test.go: `.Parse(testServer.URL)`
$DIR/core/chains/evm/txmgr/stuck_tx_detector_test.go: `.NewStuckTxDetector(lggr, testutils.FixtureChainID, chaintype.ChainScroll, assets.NewWei(assets.NewEth(100).ToInt()), autoPurgeCfg, feeEstimator, txStore, ethClient)`
$DIR/core/chains/evm/txmgr/stuck_tx_detector_test.go: `.NewWei(assets.NewEth(100).ToInt())`
$DIR/core/chains/evm/txmgr/stuck_tx_detector_test.go: `.NewEth(100)`
$DIR/core/chains/evm/txmgr/stuck_tx_detector_test.go: `.ToInt()`
$DIR/core/chains/evm/txmgr/stuck_tx_detector_test.go: `.DetectStuckTransactions(ctx, []common.Address{fromAddress1, fromAddress2}, blockNum)`
$DIR/core/chains/evm/txmgr/tracker_test.go: `_ = mustInsertInProgressEthTxWithAttempt(t, txStore, 123, inProgressAddr)`
$DIR/core/chains/evm/txmgr/tracker_test.go: `_ = cltest.MustInsertUnconfirmedEthTx(t, txStore, 123, unconfirmedAddr)`
$DIR/core/chains/evm/txmgr/tracker_test.go: `_ = mustInsertConfirmedEthTxWithReceipt(t, txStore, confirmedAddr, 123, 1)`
$DIR/core/chains/evm/txmgr/tracker_test.go: `_ = mustCreateUnstartedTx(t, txStore, unstartedAddr, cltest.MustGenerateRandomKey(t).Address, []byte{}, 0, big.Int{}, ethClient.ConfiguredChainID())`
$DIR/core/chains/evm/txmgr/tracker_test.go: `err = tracker.Close()`
$DIR/core/chains/evm/txmgr/tracker_test.go: `time.Sleep(waitTime)`
$DIR/core/chains/evm/txmgr/tracker_test.go: `tracker.XXXTestSetTTL(time.Nanosecond)`
$DIR/core/chains/evm/txmgr/tracker_test.go: `err = tracker.Close()`
$DIR/core/chains/evm/txmgr/tracker_test.go: `time.Sleep(100 * waitTime)`
$DIR/core/chains/evm/txmgr/tracker_test.go: `.Context(t)`
$DIR/core/chains/evm/txmgr/tracker_test.go: `.Context(t)`
$DIR/core/chains/evm/txmgr/tracker_test.go: `.NewEthClientMockWithDefaultChain(t)`
$DIR/core/chains/evm/txmgr/tracker_test.go: `.MustGenerateRandomKey(t)`
$DIR/core/chains/evm/txmgr/tracker_test.go: `.MustGenerateRandomKey(t)`
$DIR/core/chains/evm/txmgr/tracker_test.go: `.MustGenerateRandomKey(t)`
$DIR/core/chains/evm/txmgr/tracker_test.go: `.MustGenerateRandomKey(t)`
$DIR/core/chains/evm/txmgr/tracker_test.go: `.MustInsertUnconfirmedEthTx(t, txStore, 123, unconfirmedAddr)`
$DIR/core/chains/evm/txmgr/tracker_test.go: `.MustGenerateRandomKey(t)`
$DIR/core/chains/evm/txmgr/tracker_test.go: `.ConfiguredChainID()`
$DIR/core/chains/evm/txmgr/tracker_test.go: `.Start(ctx)`
$DIR/core/chains/evm/txmgr/tracker_test.go: `.Sleep(waitTime)`
$DIR/core/chains/evm/txmgr/tracker_test.go: `.GetAbandonedAddresses()`
$DIR/core/chains/evm/txmgr/tracker_test.go: `.Context(t)`
$DIR/core/chains/evm/txmgr/tracker_test.go: `.MustGenerateRandomKey(t)`
$DIR/core/chains/evm/txmgr/tracker_test.go: `.MustGenerateRandomKey(t)`
$DIR/core/chains/evm/txmgr/tracker_test.go: `.MustInsertUnconfirmedEthTx(t, txStore, 123, addr2)`
$DIR/core/chains/evm/txmgr/tracker_test.go: `.XXXTestSetTTL(time.Nanosecond)`
$DIR/core/chains/evm/txmgr/tracker_test.go: `.Start(ctx)`
$DIR/core/chains/evm/txmgr/tracker_test.go: `.Sleep(100 * waitTime)`
$DIR/core/chains/evm/txmgr/tracker_test.go: `.GetFatalTransactions(ctx)`
$DIR/core/chains/evm/txmgr/transmitchecker_test.go: `t.Run("no checker", func(t *testing.T) {
c, err := factory.BuildChecker(txmgr.TransmitCheckerSpec{})
require.NoError(t, err)
require.Equal(t, txmgr.NoChecker, c)
})`
$DIR/core/chains/evm/txmgr/transmitchecker_test.go: `t.Run("vrf v1 checker", func(t *testing.T) {
c, err := factory.BuildChecker(txmgr.TransmitCheckerSpec{
CheckerType: txmgr.TransmitCheckerTypeVRFV1,
VRFCoordinatorAddress: testutils.NewAddressPtr(),
})
require.NoError(t, err)
require.IsType(t, &txmgr.VRFV1Checker{}, c)
})`
$DIR/core/chains/evm/txmgr/transmitchecker_test.go: `t.Run("vrf v2 checker", func(t *testing.T) {
c, err := factory.BuildChecker(txmgr.TransmitCheckerSpec{
CheckerType: txmgr.TransmitCheckerTypeVRFV2,
VRFCoordinatorAddress: testutils.NewAddressPtr(),
VRFRequestBlockNumber: big.NewInt(1),
})
require.NoError(t, err)
require.IsType(t, &txmgr.VRFV2Checker{}, c)
// request block number not provided should error out.
c, err = factory.BuildChecker(txmgr.TransmitCheckerSpec{
CheckerType: txmgr.TransmitCheckerTypeVRFV2,
VRFCoordinatorAddress: testutils.NewAddressPtr(),
})
require.Error(t, err)
require.Nil(t, c)
})`
$DIR/core/chains/evm/txmgr/transmitchecker_test.go: `c, err = factory.BuildChecker(txmgr.TransmitCheckerSpec{
CheckerType: txmgr.TransmitCheckerTypeVRFV2,
VRFCoordinatorAddress: testutils.NewAddressPtr(),
})`
$DIR/core/chains/evm/txmgr/transmitchecker_test.go: `t.Run("vrf v2 plus checker", func(t *testing.T) {
c, err := factory.BuildChecker(txmgr.TransmitCheckerSpec{
CheckerType: txmgr.TransmitCheckerTypeVRFV2Plus,
VRFCoordinatorAddress: testutils.NewAddressPtr(),
VRFRequestBlockNumber: big.NewInt(1),
})
require.NoError(t, err)
require.IsType(t, &txmgr.VRFV2Checker{}, c)
// request block number not provided should error out.
c, err = factory.BuildChecker(txmgr.TransmitCheckerSpec{
CheckerType: txmgr.TransmitCheckerTypeVRFV2Plus,
VRFCoordinatorAddress: testutils.NewAddressPtr(),
})
require.Error(t, err)
require.Nil(t, c)
})`
$DIR/core/chains/evm/txmgr/transmitchecker_test.go: `c, err = factory.BuildChecker(txmgr.TransmitCheckerSpec{
CheckerType: txmgr.TransmitCheckerTypeVRFV2Plus,
VRFCoordinatorAddress: testutils.NewAddressPtr(),
})`
$DIR/core/chains/evm/txmgr/transmitchecker_test.go: `t.Run("simulate checker", func(t *testing.T) {
c, err := factory.BuildChecker(txmgr.TransmitCheckerSpec{
CheckerType: txmgr.TransmitCheckerTypeSimulate,
})
require.NoError(t, err)
require.Equal(t, &txmgr.SimulateChecker{Client: client}, c)
})`
$DIR/core/chains/evm/txmgr/transmitchecker_test.go: `t.Run("no checker", func(t *testing.T) {
checker := txmgr.NoChecker
require.NoError(t, checker.Check(ctx, log, txmgr.Tx{}, txmgr.TxAttempt{}))
})`
$DIR/core/chains/evm/txmgr/transmitchecker_test.go: `t.Run("simulate", func(t *testing.T) {
checker := txmgr.SimulateChecker{Client: client}
tx := txmgr.Tx{
FromAddress: common.HexToAddress("0xfe0629509E6CB8dfa7a99214ae58Ceb465d5b5A9"),
ToAddress: common.HexToAddress("0xff0Aac13eab788cb9a2D662D3FB661Aa5f58FA21"),
EncodedPayload: []byte{42, 0, 0},
Value: big.Int(assets.NewEthValue(642)),
FeeLimit: 1e9,
CreatedAt: time.Unix(0, 0),
State: txmgrcommon.TxUnstarted,
}
attempt := txmgr.TxAttempt{
Tx: tx,
Hash: common.Hash{},
CreatedAt: tx.CreatedAt,
State: txmgrtypes.TxAttemptInProgress,
}
t.Run("success", func(t *testing.T) {
client.On("CallContext", mock.Anything,
mock.AnythingOfType("*hexutil.Bytes"), "eth_call",
mock.MatchedBy(func(callarg map[string]interface{}) bool {
return fmt.Sprintf("%s", callarg["value"]) == "0x282" // 642
}), "latest").Return(nil).Once()
require.NoError(t, checker.Check(ctx, log, tx, attempt))
})
t.Run("revert", func(t *testing.T) {
jerr := evmclient.JsonError{
Code: 42,
Message: "oh no, it reverted",
Data: []byte{42, 166, 34},
}
client.On("CallContext", mock.Anything,
mock.AnythingOfType("*hexutil.Bytes"), "eth_call",
mock.MatchedBy(func(callarg map[string]interface{}) bool {
return fmt.Sprintf("%s", callarg["value"]) == "0x282" // 642
}), "latest").Return(&jerr).Once()
err := checker.Check(ctx, log, tx, attempt)
expErrMsg := "transaction reverted during simulation: json-rpc error { Code = 42, Message = 'oh no, it reverted', Data = 'KqYi' }"
require.EqualError(t, err, expErrMsg)
})
t.Run("non revert error", func(t *testing.T) {
client.On("CallContext", mock.Anything,
mock.AnythingOfType("*hexutil.Bytes"), "eth_call",
mock.MatchedBy(func(callarg map[string]interface{}) bool {
return fmt.Sprintf("%s", callarg["value"]) == "0x282" // 642
}), "latest").Return(pkgerrors.New("error")).Once()
// Non-revert errors are logged but should not prevent transmission, and do not need
// to be passed to the caller
require.NoError(t, checker.Check(ctx, log, tx, attempt))
})
})`
$DIR/core/chains/evm/txmgr/transmitchecker_test.go: `t.Run("success", func(t *testing.T) {
client.On("CallContext", mock.Anything,
mock.AnythingOfType("*hexutil.Bytes"), "eth_call",
mock.MatchedBy(func(callarg map[string]interface{}) bool {
return fmt.Sprintf("%s", callarg["value"]) == "0x282" // 642
}), "latest").Return(nil).Once()
require.NoError(t, checker.Check(ctx, log, tx, attempt))
})`
$DIR/core/chains/evm/txmgr/transmitchecker_test.go: `client.On("CallContext", mock.Anything,
mock.AnythingOfType("*hexutil.Bytes"), "eth_call",
mock.MatchedBy(func(callarg map[string]interface{}) bool {
return fmt.Sprintf("%s", callarg["value"]) == "0x282" // 642
}), "latest").Return(nil).Once()`
$DIR/core/chains/evm/txmgr/transmitchecker_test.go: `t.Run("revert", func(t *testing.T) {
jerr := evmclient.JsonError{
Code: 42,
Message: "oh no, it reverted",
Data: []byte{42, 166, 34},
}
client.On("CallContext", mock.Anything,
mock.AnythingOfType("*hexutil.Bytes"), "eth_call",
mock.MatchedBy(func(callarg map[string]interface{}) bool {
return fmt.Sprintf("%s", callarg["value"]) == "0x282" // 642
}), "latest").Return(&jerr).Once()
err := checker.Check(ctx, log, tx, attempt)
expErrMsg := "transaction reverted during simulation: json-rpc error { Code = 42, Message = 'oh no, it reverted', Data = 'KqYi' }"
require.EqualError(t, err, expErrMsg)
})`
$DIR/core/chains/evm/txmgr/transmitchecker_test.go: `client.On("CallContext", mock.Anything,
mock.AnythingOfType("*hexutil.Bytes"), "eth_call",
mock.MatchedBy(func(callarg map[string]interface{}) bool {
return fmt.Sprintf("%s", callarg["value"]) == "0x282" // 642
}), "latest").Return(&jerr).Once()`
$DIR/core/chains/evm/txmgr/transmitchecker_test.go: `t.Run("non revert error", func(t *testing.T) {
client.On("CallContext", mock.Anything,
mock.AnythingOfType("*hexutil.Bytes"), "eth_call",
mock.MatchedBy(func(callarg map[string]interface{}) bool {
return fmt.Sprintf("%s", callarg["value"]) == "0x282" // 642
}), "latest").Return(pkgerrors.New("error")).Once()
// Non-revert errors are logged but should not prevent transmission, and do not need
// to be passed to the caller
require.NoError(t, checker.Check(ctx, log, tx, attempt))
})`
$DIR/core/chains/evm/txmgr/transmitchecker_test.go: `client.On("CallContext", mock.Anything,
mock.AnythingOfType("*hexutil.Bytes"), "eth_call",
mock.MatchedBy(func(callarg map[string]interface{}) bool {
return fmt.Sprintf("%s", callarg["value"]) == "0x282" // 642
}), "latest").Return(pkgerrors.New("error")).Once()`
$DIR/core/chains/evm/txmgr/transmitchecker_test.go: `t.Run("VRF V1", func(t *testing.T) {
testDefaultSubID := uint64(2)
testDefaultMaxLink := "1000000000000000000"
txRequest := func(t *testing.T, vrfReqID [32]byte, nilTxHash bool) (txmgr.Tx, txmgr.TxAttempt) {
h := common.BytesToHash(vrfReqID[:])
txHash := common.Hash{}
meta := txmgr.TxMeta{
RequestID: &h,
MaxLink: &testDefaultMaxLink, // 1 LINK
SubID: &testDefaultSubID,
RequestTxHash: &txHash,
}
if nilTxHash {
meta.RequestTxHash = nil
}
b, err := json.Marshal(meta)
require.NoError(t, err)
metaJson := sqlutil.JSON(b)
tx := txmgr.Tx{
FromAddress: common.HexToAddress("0xfe0629509E6CB8dfa7a99214ae58Ceb465d5b5A9"),
ToAddress: common.HexToAddress("0xff0Aac13eab788cb9a2D662D3FB661Aa5f58FA21"),
EncodedPayload: []byte{42, 0, 0},
Value: big.Int(assets.NewEthValue(642)),
FeeLimit: 1e9,
CreatedAt: time.Unix(0, 0),
State: txmgrcommon.TxUnstarted,
Meta: &metaJson,
}
return tx, txmgr.TxAttempt{
Tx: tx,
Hash: common.Hash{},
CreatedAt: tx.CreatedAt,
State: txmgrtypes.TxAttemptInProgress,
}
}
r1 := [32]byte{1}
r2 := [32]byte{2}
r3 := [32]byte{3}
checker := txmgr.VRFV1Checker{
Callbacks: func(opts *bind.CallOpts, reqID [32]byte) (v1.Callbacks, error) {
if opts.BlockNumber.Cmp(big.NewInt(6)) != 0 {
// Ensure correct logic is applied to get callbacks.
return v1.Callbacks{}, pkgerrors.New("error getting callback")
}
if reqID == r1 {
// Request 1 is already fulfilled
return v1.Callbacks{
SeedAndBlockNum: [32]byte{},
}, nil
} else if reqID == r2 {
// Request 2 errors
return v1.Callbacks{}, pkgerrors.New("error getting commitment")
}
return v1.Callbacks{
SeedAndBlockNum: [32]byte{1},
}, nil
},
Client: client,
}
mockBatch := client.On("BatchCallContext", mock.Anything, mock.MatchedBy(func(b []rpc.BatchElem) bool {
return len(b) == 2 && b[0].Method == "eth_getBlockByNumber" && b[1].Method == "eth_getTransactionReceipt"
})).Return(nil).Run(func(args mock.Arguments) {
batch := args.Get(1).([]rpc.BatchElem)
// Return block 10 for eth_getBlockByNumber
mostRecentHead := batch[0].Result.(*evmtypes.Head)
mostRecentHead.Number = 10
// Return block 6 for eth_getTransactionReceipt
requestTransactionReceipt := batch[1].Result.(*types.Receipt)
requestTransactionReceipt.BlockNumber = big.NewInt(6)
})
t.Run("already fulfilled", func(t *testing.T) {
tx, attempt := txRequest(t, r1, false)
err := checker.Check(ctx, log, tx, attempt)
require.Error(t, err, "request already fulfilled")
})
t.Run("nil RequestTxHash", func(t *testing.T) {
tx, attempt := txRequest(t, r1, true)
err := checker.Check(ctx, log, tx, attempt)
require.NoError(t, err)
})
t.Run("not fulfilled", func(t *testing.T) {
tx, attempt := txRequest(t, r3, false)
require.NoError(t, checker.Check(ctx, log, tx, attempt))
})
t.Run("error checking fulfillment, should transmit", func(t *testing.T) {
tx, attempt := txRequest(t, r2, false)
require.NoError(t, checker.Check(ctx, log, tx, attempt))
})
t.Run("failure fetching tx receipt and block head", func(t *testing.T) {
tx, attempt := txRequest(t, r1, false)
mockBatch.Return(pkgerrors.New("could not fetch"))
err := checker.Check(ctx, log, tx, attempt)
require.NoError(t, err)
})
})`
$DIR/core/chains/evm/txmgr/transmitchecker_test.go: `meta.RequestTxHash = nil`
$DIR/core/chains/evm/txmgr/transmitchecker_test.go: `mostRecentHead.Number = 10`
$DIR/core/chains/evm/txmgr/transmitchecker_test.go: `requestTransactionReceipt.BlockNumber = big.NewInt(6)`
$DIR/core/chains/evm/txmgr/transmitchecker_test.go: `t.Run("already fulfilled", func(t *testing.T) {
tx, attempt := txRequest(t, r1, false)
err := checker.Check(ctx, log, tx, attempt)
require.Error(t, err, "request already fulfilled")
})`
$DIR/core/chains/evm/txmgr/transmitchecker_test.go: `t.Run("nil RequestTxHash", func(t *testing.T) {
tx, attempt := txRequest(t, r1, true)
err := checker.Check(ctx, log, tx, attempt)
require.NoError(t, err)
})`
$DIR/core/chains/evm/txmgr/transmitchecker_test.go: `t.Run("not fulfilled", func(t *testing.T) {
tx, attempt := txRequest(t, r3, false)
require.NoError(t, checker.Check(ctx, log, tx, attempt))
})`
$DIR/core/chains/evm/txmgr/transmitchecker_test.go: `t.Run("error checking fulfillment, should transmit", func(t *testing.T) {
tx, attempt := txRequest(t, r2, false)
require.NoError(t, checker.Check(ctx, log, tx, attempt))
})`
$DIR/core/chains/evm/txmgr/transmitchecker_test.go: `t.Run("failure fetching tx receipt and block head", func(t *testing.T) {
tx, attempt := txRequest(t, r1, false)
mockBatch.Return(pkgerrors.New("could not fetch"))
err := checker.Check(ctx, log, tx, attempt)
require.NoError(t, err)
})`
$DIR/core/chains/evm/txmgr/transmitchecker_test.go: `mockBatch.Return(pkgerrors.New("could not fetch"))`
$DIR/core/chains/evm/txmgr/transmitchecker_test.go: `t.Run("already fulfilled", func(t *testing.T) {
tx, attempt := txRequest(t, big.NewInt(1))
err := checker.Check(ctx, log, tx, attempt)
require.Error(t, err, "request already fulfilled")
})`
$DIR/core/chains/evm/txmgr/transmitchecker_test.go: `t.Run("not fulfilled", func(t *testing.T) {
tx, attempt := txRequest(t, big.NewInt(3))
require.NoError(t, checker.Check(ctx, log, tx, attempt))
})`
$DIR/core/chains/evm/txmgr/transmitchecker_test.go: `t.Run("error checking fulfillment, should transmit", func(t *testing.T) {
tx, attempt := txRequest(t, big.NewInt(2))
require.NoError(t, checker.Check(ctx, log, tx, attempt))
})`
$DIR/core/chains/evm/txmgr/transmitchecker_test.go: `t.Run("can't get header", func(t *testing.T) {
checker.HeadByNumber = func(ctx context.Context, n *big.Int) (*evmtypes.Head, error) {
return nil, pkgerrors.New("can't get head")
}
tx, attempt := txRequest(t, big.NewInt(3))
require.NoError(t, checker.Check(ctx, log, tx, attempt))
})`
$DIR/core/chains/evm/txmgr/transmitchecker_test.go: `t.Run("nil request block number", func(t *testing.T) {
checker.HeadByNumber = func(ctx context.Context, n *big.Int) (*evmtypes.Head, error) {
return &evmtypes.Head{
Number: 1,
}, nil
}
checker.RequestBlockNumber = nil
tx, attempt := txRequest(t, big.NewInt(4))
require.NoError(t, checker.Check(ctx, log, tx, attempt))
})`
$DIR/core/chains/evm/txmgr/transmitchecker_test.go: `checker.RequestBlockNumber = nil`
$DIR/core/chains/evm/txmgr/transmitchecker_test.go: `.NewEthClientMockWithDefaultChain(t)`
$DIR/core/chains/evm/txmgr/transmitchecker_test.go: `.Run("no checker", func(t *testing.T) {
c, err := factory.BuildChecker(txmgr.TransmitCheckerSpec{})
require.NoError(t, err)
require.Equal(t, txmgr.NoChecker, c)
})`
$DIR/core/chains/evm/txmgr/transmitchecker_test.go: `.BuildChecker(txmgr.TransmitCheckerSpec{})`
$DIR/core/chains/evm/txmgr/transmitchecker_test.go: `.Run("vrf v1 checker", func(t *testing.T) {
c, err := factory.BuildChecker(txmgr.TransmitCheckerSpec{
CheckerType: txmgr.TransmitCheckerTypeVRFV1,
VRFCoordinatorAddress: testutils.NewAddressPtr(),
})
require.NoError(t, err)
require.IsType(t, &txmgr.VRFV1Checker{}, c)
})`
$DIR/core/chains/evm/txmgr/transmitchecker_test.go: `.BuildChecker(txmgr.TransmitCheckerSpec{
CheckerType: txmgr.TransmitCheckerTypeVRFV1,
VRFCoordinatorAddress: testutils.NewAddressPtr(),
})`
$DIR/core/chains/evm/txmgr/transmitchecker_test.go: `.NewAddressPtr()`
$DIR/core/chains/evm/txmgr/transmitchecker_test.go: `.Run("vrf v2 checker", func(t *testing.T) {
c, err := factory.BuildChecker(txmgr.TransmitCheckerSpec{
CheckerType: txmgr.TransmitCheckerTypeVRFV2,
VRFCoordinatorAddress: testutils.NewAddressPtr(),
VRFRequestBlockNumber: big.NewInt(1),
})
require.NoError(t, err)
require.IsType(t, &txmgr.VRFV2Checker{}, c)
// request block number not provided should error out.
c, err = factory.BuildChecker(txmgr.TransmitCheckerSpec{
CheckerType: txmgr.TransmitCheckerTypeVRFV2,
VRFCoordinatorAddress: testutils.NewAddressPtr(),
})
require.Error(t, err)
require.Nil(t, c)
})`
$DIR/core/chains/evm/txmgr/transmitchecker_test.go: `.BuildChecker(txmgr.TransmitCheckerSpec{
CheckerType: txmgr.TransmitCheckerTypeVRFV2,
VRFCoordinatorAddress: testutils.NewAddressPtr(),
VRFRequestBlockNumber: big.NewInt(1),
})`
$DIR/core/chains/evm/txmgr/transmitchecker_test.go: `.NewAddressPtr()`
$DIR/core/chains/evm/txmgr/transmitchecker_test.go: `.NewInt(1)`
$DIR/core/chains/evm/txmgr/transmitchecker_test.go: `.BuildChecker(txmgr.TransmitCheckerSpec{
CheckerType: txmgr.TransmitCheckerTypeVRFV2,
VRFCoordinatorAddress: testutils.NewAddressPtr(),
})`
$DIR/core/chains/evm/txmgr/transmitchecker_test.go: `.NewAddressPtr()`
$DIR/core/chains/evm/txmgr/transmitchecker_test.go: `.Run("vrf v2 plus checker", func(t *testing.T) {
c, err := factory.BuildChecker(txmgr.TransmitCheckerSpec{
CheckerType: txmgr.TransmitCheckerTypeVRFV2Plus,
VRFCoordinatorAddress: testutils.NewAddressPtr(),
VRFRequestBlockNumber: big.NewInt(1),
})
require.NoError(t, err)
require.IsType(t, &txmgr.VRFV2Checker{}, c)
// request block number not provided should error out.
c, err = factory.BuildChecker(txmgr.TransmitCheckerSpec{
CheckerType: txmgr.TransmitCheckerTypeVRFV2Plus,
VRFCoordinatorAddress: testutils.NewAddressPtr(),
})
require.Error(t, err)
require.Nil(t, c)
})`
$DIR/core/chains/evm/txmgr/transmitchecker_test.go: `.BuildChecker(txmgr.TransmitCheckerSpec{
CheckerType: txmgr.TransmitCheckerTypeVRFV2Plus,
VRFCoordinatorAddress: testutils.NewAddressPtr(),
VRFRequestBlockNumber: big.NewInt(1),
})`
$DIR/core/chains/evm/txmgr/transmitchecker_test.go: `.NewAddressPtr()`
$DIR/core/chains/evm/txmgr/transmitchecker_test.go: `.NewInt(1)`
$DIR/core/chains/evm/txmgr/transmitchecker_test.go: `.BuildChecker(txmgr.TransmitCheckerSpec{
CheckerType: txmgr.TransmitCheckerTypeVRFV2Plus,
VRFCoordinatorAddress: testutils.NewAddressPtr(),
})`
$DIR/core/chains/evm/txmgr/transmitchecker_test.go: `.NewAddressPtr()`
$DIR/core/chains/evm/txmgr/transmitchecker_test.go: `.Run("simulate checker", func(t *testing.T) {
c, err := factory.BuildChecker(txmgr.TransmitCheckerSpec{
CheckerType: txmgr.TransmitCheckerTypeSimulate,
})
require.NoError(t, err)
require.Equal(t, &txmgr.SimulateChecker{Client: client}, c)
})`
$DIR/core/chains/evm/txmgr/transmitchecker_test.go: `.BuildChecker(txmgr.TransmitCheckerSpec{
CheckerType: txmgr.TransmitCheckerTypeSimulate,
})`
$DIR/core/chains/evm/txmgr/transmitchecker_test.go: `.BuildChecker(txmgr.TransmitCheckerSpec{
CheckerType: "invalid",
})`
$DIR/core/chains/evm/txmgr/transmitchecker_test.go: `.NewEthClientMockWithDefaultChain(t)`
$DIR/core/chains/evm/txmgr/transmitchecker_test.go: `.Sugared(logger.Test(t))`
$DIR/core/chains/evm/txmgr/transmitchecker_test.go: `.Test(t)`
$DIR/core/chains/evm/txmgr/transmitchecker_test.go: `.Context(t)`
$DIR/core/chains/evm/txmgr/transmitchecker_test.go: `.Run("no checker", func(t *testing.T) {
checker := txmgr.NoChecker
require.NoError(t, checker.Check(ctx, log, txmgr.Tx{}, txmgr.TxAttempt{}))
})`
$DIR/core/chains/evm/txmgr/transmitchecker_test.go: `.Run("simulate", func(t *testing.T) {
checker := txmgr.SimulateChecker{Client: client}
tx := txmgr.Tx{
FromAddress: common.HexToAddress("0xfe0629509E6CB8dfa7a99214ae58Ceb465d5b5A9"),
ToAddress: common.HexToAddress("0xff0Aac13eab788cb9a2D662D3FB661Aa5f58FA21"),
EncodedPayload: []byte{42, 0, 0},
Value: big.Int(assets.NewEthValue(642)),
FeeLimit: 1e9,
CreatedAt: time.Unix(0, 0),
State: txmgrcommon.TxUnstarted,
}
attempt := txmgr.TxAttempt{
Tx: tx,
Hash: common.Hash{},
CreatedAt: tx.CreatedAt,
State: txmgrtypes.TxAttemptInProgress,
}
t.Run("success", func(t *testing.T) {
client.On("CallContext", mock.Anything,
mock.AnythingOfType("*hexutil.Bytes"), "eth_call",
mock.MatchedBy(func(callarg map[string]interface{}) bool {
return fmt.Sprintf("%s", callarg["value"]) == "0x282" // 642
}), "latest").Return(nil).Once()
require.NoError(t, checker.Check(ctx, log, tx, attempt))
})
t.Run("revert", func(t *testing.T) {
jerr := evmclient.JsonError{
Code: 42,
Message: "oh no, it reverted",
Data: []byte{42, 166, 34},
}
client.On("CallContext", mock.Anything,
mock.AnythingOfType("*hexutil.Bytes"), "eth_call",
mock.MatchedBy(func(callarg map[string]interface{}) bool {
return fmt.Sprintf("%s", callarg["value"]) == "0x282" // 642
}), "latest").Return(&jerr).Once()
err := checker.Check(ctx, log, tx, attempt)
expErrMsg := "transaction reverted during simulation: json-rpc error { Code = 42, Message = 'oh no, it reverted', Data = 'KqYi' }"
require.EqualError(t, err, expErrMsg)
})
t.Run("non revert error", func(t *testing.T) {
client.On("CallContext", mock.Anything,
mock.AnythingOfType("*hexutil.Bytes"), "eth_call",
mock.MatchedBy(func(callarg map[string]interface{}) bool {
return fmt.Sprintf("%s", callarg["value"]) == "0x282" // 642
}), "latest").Return(pkgerrors.New("error")).Once()
// Non-revert errors are logged but should not prevent transmission, and do not need
// to be passed to the caller
require.NoError(t, checker.Check(ctx, log, tx, attempt))
})
})`
$DIR/core/chains/evm/txmgr/transmitchecker_test.go: `.HexToAddress("0xfe0629509E6CB8dfa7a99214ae58Ceb465d5b5A9")`
$DIR/core/chains/evm/txmgr/transmitchecker_test.go: `.HexToAddress("0xff0Aac13eab788cb9a2D662D3FB661Aa5f58FA21")`
$DIR/core/chains/evm/txmgr/transmitchecker_test.go: `.Int(assets.NewEthValue(642))`
$DIR/core/chains/evm/txmgr/transmitchecker_test.go: `.NewEthValue(642)`
$DIR/core/chains/evm/txmgr/transmitchecker_test.go: `.Unix(0, 0)`
$DIR/core/chains/evm/txmgr/transmitchecker_test.go: `.Run("success", func(t *testing.T) {
client.On("CallContext", mock.Anything,
mock.AnythingOfType("*hexutil.Bytes"), "eth_call",
mock.MatchedBy(func(callarg map[string]interface{}) bool {
return fmt.Sprintf("%s", callarg["value"]) == "0x282" // 642
}), "latest").Return(nil).Once()
require.NoError(t, checker.Check(ctx, log, tx, attempt))
})`
$DIR/core/chains/evm/txmgr/transmitchecker_test.go: `.On("CallContext", mock.Anything,
mock.AnythingOfType("*hexutil.Bytes"), "eth_call",
mock.MatchedBy(func(callarg map[string]interface{}) bool {
return fmt.Sprintf("%s", callarg["value"]) == "0x282" // 642
}), "latest")`
$DIR/core/chains/evm/txmgr/transmitchecker_test.go: `.AnythingOfType("*hexutil.Bytes")`
$DIR/core/chains/evm/txmgr/transmitchecker_test.go: `.MatchedBy(func(callarg map[string]interface{}) bool {
return fmt.Sprintf("%s", callarg["value"]) == "0x282" // 642
})`
$DIR/core/chains/evm/txmgr/transmitchecker_test.go: `.Sprintf("%s", callarg["value"])`
$DIR/core/chains/evm/txmgr/transmitchecker_test.go: `.Return(nil)`
$DIR/core/chains/evm/txmgr/transmitchecker_test.go: `.Once()`
$DIR/core/chains/evm/txmgr/transmitchecker_test.go: `.Run("revert", func(t *testing.T) {
jerr := evmclient.JsonError{
Code: 42,
Message: "oh no, it reverted",
Data: []byte{42, 166, 34},
}
client.On("CallContext", mock.Anything,
mock.AnythingOfType("*hexutil.Bytes"), "eth_call",
mock.MatchedBy(func(callarg map[string]interface{}) bool {
return fmt.Sprintf("%s", callarg["value"]) == "0x282" // 642
}), "latest").Return(&jerr).Once()
err := checker.Check(ctx, log, tx, attempt)
expErrMsg := "transaction reverted during simulation: json-rpc error { Code = 42, Message = 'oh no, it reverted', Data = 'KqYi' }"
require.EqualError(t, err, expErrMsg)
})`
$DIR/core/chains/evm/txmgr/transmitchecker_test.go: `.On("CallContext", mock.Anything,
mock.AnythingOfType("*hexutil.Bytes"), "eth_call",
mock.MatchedBy(func(callarg map[string]interface{}) bool {
return fmt.Sprintf("%s", callarg["value"]) == "0x282" // 642
}), "latest")`
$DIR/core/chains/evm/txmgr/transmitchecker_test.go: `.AnythingOfType("*hexutil.Bytes")`
$DIR/core/chains/evm/txmgr/transmitchecker_test.go: `.MatchedBy(func(callarg map[string]interface{}) bool {
return fmt.Sprintf("%s", callarg["value"]) == "0x282" // 642
})`
$DIR/core/chains/evm/txmgr/transmitchecker_test.go: `.Sprintf("%s", callarg["value"])`
$DIR/core/chains/evm/txmgr/transmitchecker_test.go: `.Return(&jerr)`
$DIR/core/chains/evm/txmgr/transmitchecker_test.go: `.Once()`
$DIR/core/chains/evm/txmgr/transmitchecker_test.go: `.Check(ctx, log, tx, attempt)`
$DIR/core/chains/evm/txmgr/transmitchecker_test.go: `.Run("non revert error", func(t *testing.T) {
client.On("CallContext", mock.Anything,
mock.AnythingOfType("*hexutil.Bytes"), "eth_call",
mock.MatchedBy(func(callarg map[string]interface{}) bool {
return fmt.Sprintf("%s", callarg["value"]) == "0x282" // 642
}), "latest").Return(pkgerrors.New("error")).Once()
// Non-revert errors are logged but should not prevent transmission, and do not need
// to be passed to the caller
require.NoError(t, checker.Check(ctx, log, tx, attempt))
})`
$DIR/core/chains/evm/txmgr/transmitchecker_test.go: `.On("CallContext", mock.Anything,
mock.AnythingOfType("*hexutil.Bytes"), "eth_call",
mock.MatchedBy(func(callarg map[string]interface{}) bool {
return fmt.Sprintf("%s", callarg["value"]) == "0x282" // 642
}), "latest")`
$DIR/core/chains/evm/txmgr/transmitchecker_test.go: `.AnythingOfType("*hexutil.Bytes")`
$DIR/core/chains/evm/txmgr/transmitchecker_test.go: `.MatchedBy(func(callarg map[string]interface{}) bool {
return fmt.Sprintf("%s", callarg["value"]) == "0x282" // 642
})`
$DIR/core/chains/evm/txmgr/transmitchecker_test.go: `.Sprintf("%s", callarg["value"])`
$DIR/core/chains/evm/txmgr/transmitchecker_test.go: `.Return(pkgerrors.New("error"))`
$DIR/core/chains/evm/txmgr/transmitchecker_test.go: `.New("error")`
$DIR/core/chains/evm/txmgr/transmitchecker_test.go: `.Once()`
$DIR/core/chains/evm/txmgr/transmitchecker_test.go: `.Run("VRF V1", func(t *testing.T) {
testDefaultSubID := uint64(2)
testDefaultMaxLink := "1000000000000000000"
txRequest := func(t *testing.T, vrfReqID [32]byte, nilTxHash bool) (txmgr.Tx, txmgr.TxAttempt) {
h := common.BytesToHash(vrfReqID[:])
txHash := common.Hash{}
meta := txmgr.TxMeta{
RequestID: &h,
MaxLink: &testDefaultMaxLink, // 1 LINK
SubID: &testDefaultSubID,
RequestTxHash: &txHash,
}
if nilTxHash {
meta.RequestTxHash = nil
}
b, err := json.Marshal(meta)
require.NoError(t, err)
metaJson := sqlutil.JSON(b)
tx := txmgr.Tx{
FromAddress: common.HexToAddress("0xfe0629509E6CB8dfa7a99214ae58Ceb465d5b5A9"),
ToAddress: common.HexToAddress("0xff0Aac13eab788cb9a2D662D3FB661Aa5f58FA21"),
EncodedPayload: []byte{42, 0, 0},
Value: big.Int(assets.NewEthValue(642)),
FeeLimit: 1e9,
CreatedAt: time.Unix(0, 0),
State: txmgrcommon.TxUnstarted,
Meta: &metaJson,
}
return tx, txmgr.TxAttempt{
Tx: tx,
Hash: common.Hash{},
CreatedAt: tx.CreatedAt,
State: txmgrtypes.TxAttemptInProgress,
}
}
r1 := [32]byte{1}
r2 := [32]byte{2}
r3 := [32]byte{3}
checker := txmgr.VRFV1Checker{
Callbacks: func(opts *bind.CallOpts, reqID [32]byte) (v1.Callbacks, error) {
if opts.BlockNumber.Cmp(big.NewInt(6)) != 0 {
// Ensure correct logic is applied to get callbacks.
return v1.Callbacks{}, pkgerrors.New("error getting callback")
}
if reqID == r1 {
// Request 1 is already fulfilled
return v1.Callbacks{
SeedAndBlockNum: [32]byte{},
}, nil
} else if reqID == r2 {
// Request 2 errors
return v1.Callbacks{}, pkgerrors.New("error getting commitment")
}
return v1.Callbacks{
SeedAndBlockNum: [32]byte{1},
}, nil
},
Client: client,
}
mockBatch := client.On("BatchCallContext", mock.Anything, mock.MatchedBy(func(b []rpc.BatchElem) bool {
return len(b) == 2 && b[0].Method == "eth_getBlockByNumber" && b[1].Method == "eth_getTransactionReceipt"
})).Return(nil).Run(func(args mock.Arguments) {
batch := args.Get(1).([]rpc.BatchElem)
// Return block 10 for eth_getBlockByNumber
mostRecentHead := batch[0].Result.(*evmtypes.Head)
mostRecentHead.Number = 10
// Return block 6 for eth_getTransactionReceipt
requestTransactionReceipt := batch[1].Result.(*types.Receipt)
requestTransactionReceipt.BlockNumber = big.NewInt(6)
})
t.Run("already fulfilled", func(t *testing.T) {
tx, attempt := txRequest(t, r1, false)
err := checker.Check(ctx, log, tx, attempt)
require.Error(t, err, "request already fulfilled")
})
t.Run("nil RequestTxHash", func(t *testing.T) {
tx, attempt := txRequest(t, r1, true)
err := checker.Check(ctx, log, tx, attempt)
require.NoError(t, err)
})
t.Run("not fulfilled", func(t *testing.T) {
tx, attempt := txRequest(t, r3, false)
require.NoError(t, checker.Check(ctx, log, tx, attempt))
})
t.Run("error checking fulfillment, should transmit", func(t *testing.T) {
tx, attempt := txRequest(t, r2, false)
require.NoError(t, checker.Check(ctx, log, tx, attempt))
})
t.Run("failure fetching tx receipt and block head", func(t *testing.T) {
tx, attempt := txRequest(t, r1, false)
mockBatch.Return(pkgerrors.New("could not fetch"))
err := checker.Check(ctx, log, tx, attempt)
require.NoError(t, err)
})
})`
$DIR/core/chains/evm/txmgr/transmitchecker_test.go: `.BytesToHash(vrfReqID[:])`
$DIR/core/chains/evm/txmgr/transmitchecker_test.go: `.Marshal(meta)`
$DIR/core/chains/evm/txmgr/transmitchecker_test.go: `.JSON(b)`
$DIR/core/chains/evm/txmgr/transmitchecker_test.go: `.HexToAddress("0xfe0629509E6CB8dfa7a99214ae58Ceb465d5b5A9")`
$DIR/core/chains/evm/txmgr/transmitchecker_test.go: `.HexToAddress("0xff0Aac13eab788cb9a2D662D3FB661Aa5f58FA21")`
$DIR/core/chains/evm/txmgr/transmitchecker_test.go: `.Int(assets.NewEthValue(642))`
$DIR/core/chains/evm/txmgr/transmitchecker_test.go: `.NewEthValue(642)`
$DIR/core/chains/evm/txmgr/transmitchecker_test.go: `.Unix(0, 0)`
$DIR/core/chains/evm/txmgr/transmitchecker_test.go: `.BlockNumber.Cmp(big.NewInt(6))`
$DIR/core/chains/evm/txmgr/transmitchecker_test.go: `.NewInt(6)`
$DIR/core/chains/evm/txmgr/transmitchecker_test.go: `.New("error getting callback")`
$DIR/core/chains/evm/txmgr/transmitchecker_test.go: `.New("error getting commitment")`
$DIR/core/chains/evm/txmgr/transmitchecker_test.go: `.On("BatchCallContext", mock.Anything, mock.MatchedBy(func(b []rpc.BatchElem) bool {
return len(b) == 2 && b[0].Method == "eth_getBlockByNumber" && b[1].Method == "eth_getTransactionReceipt"
}))`
$DIR/core/chains/evm/txmgr/transmitchecker_test.go: `.MatchedBy(func(b []rpc.BatchElem) bool {
return len(b) == 2 && b[0].Method == "eth_getBlockByNumber" && b[1].Method == "eth_getTransactionReceipt"
})`
$DIR/core/chains/evm/txmgr/transmitchecker_test.go: `.Return(nil)`
$DIR/core/chains/evm/txmgr/transmitchecker_test.go: `.Run(func(args mock.Arguments) {
batch := args.Get(1).([]rpc.BatchElem)
// Return block 10 for eth_getBlockByNumber
mostRecentHead := batch[0].Result.(*evmtypes.Head)
mostRecentHead.Number = 10
// Return block 6 for eth_getTransactionReceipt
requestTransactionReceipt := batch[1].Result.(*types.Receipt)
requestTransactionReceipt.BlockNumber = big.NewInt(6)
})`
$DIR/core/chains/evm/txmgr/transmitchecker_test.go: `.Get(1)`
$DIR/core/chains/evm/txmgr/transmitchecker_test.go: `.NewInt(6)`
$DIR/core/chains/evm/txmgr/transmitchecker_test.go: `.Run("already fulfilled", func(t *testing.T) {
tx, attempt := txRequest(t, r1, false)
err := checker.Check(ctx, log, tx, attempt)
require.Error(t, err, "request already fulfilled")
})`
$DIR/core/chains/evm/txmgr/transmitchecker_test.go: `.Check(ctx, log, tx, attempt)`
$DIR/core/chains/evm/txmgr/transmitchecker_test.go: `.Run("nil RequestTxHash", func(t *testing.T) {
tx, attempt := txRequest(t, r1, true)
err := checker.Check(ctx, log, tx, attempt)
require.NoError(t, err)
})`
$DIR/core/chains/evm/txmgr/transmitchecker_test.go: `.Check(ctx, log, tx, attempt)`
$DIR/core/chains/evm/txmgr/transmitchecker_test.go: `.Run("not fulfilled", func(t *testing.T) {
tx, attempt := txRequest(t, r3, false)
require.NoError(t, checker.Check(ctx, log, tx, attempt))
})`
$DIR/core/chains/evm/txmgr/transmitchecker_test.go: `.Run("error checking fulfillment, should transmit", func(t *testing.T) {
tx, attempt := txRequest(t, r2, false)
require.NoError(t, checker.Check(ctx, log, tx, attempt))
})`
$DIR/core/chains/evm/txmgr/transmitchecker_test.go: `.Run("failure fetching tx receipt and block head", func(t *testing.T) {
tx, attempt := txRequest(t, r1, false)
mockBatch.Return(pkgerrors.New("could not fetch"))
err := checker.Check(ctx, log, tx, attempt)
require.NoError(t, err)
})`
$DIR/core/chains/evm/txmgr/transmitchecker_test.go: `.Return(pkgerrors.New("could not fetch"))`
$DIR/core/chains/evm/txmgr/transmitchecker_test.go: `.New("could not fetch")`
$DIR/core/chains/evm/txmgr/transmitchecker_test.go: `.Check(ctx, log, tx, attempt)`
$DIR/core/chains/evm/txmgr/transmitchecker_test.go: `.BytesToHash(vrfReqID.Bytes())`
$DIR/core/chains/evm/txmgr/transmitchecker_test.go: `.Bytes()`
$DIR/core/chains/evm/txmgr/transmitchecker_test.go: `.Marshal(meta)`
$DIR/core/chains/evm/txmgr/transmitchecker_test.go: `.JSON(b)`
$DIR/core/chains/evm/txmgr/transmitchecker_test.go: `.HexToAddress("0xfe0629509E6CB8dfa7a99214ae58Ceb465d5b5A9")`
$DIR/core/chains/evm/txmgr/transmitchecker_test.go: `.HexToAddress("0xff0Aac13eab788cb9a2D662D3FB661Aa5f58FA21")`
$DIR/core/chains/evm/txmgr/transmitchecker_test.go: `.Int(assets.NewEthValue(642))`
$DIR/core/chains/evm/txmgr/transmitchecker_test.go: `.NewEthValue(642)`
$DIR/core/chains/evm/txmgr/transmitchecker_test.go: `.Unix(0, 0)`
$DIR/core/chains/evm/txmgr/transmitchecker_test.go: `.String()`
$DIR/core/chains/evm/txmgr/transmitchecker_test.go: `.String()`
$DIR/core/chains/evm/txmgr/transmitchecker_test.go: `.New("error getting commitment")`
$DIR/core/chains/evm/txmgr/transmitchecker_test.go: `.NewInt(1)`
$DIR/core/chains/evm/txmgr/transmitchecker_test.go: `.Run("already fulfilled", func(t *testing.T) {
tx, attempt := txRequest(t, big.NewInt(1))
err := checker.Check(ctx, log, tx, attempt)
require.Error(t, err, "request already fulfilled")
})`
$DIR/core/chains/evm/txmgr/transmitchecker_test.go: `.NewInt(1)`
$DIR/core/chains/evm/txmgr/transmitchecker_test.go: `.Check(ctx, log, tx, attempt)`
$DIR/core/chains/evm/txmgr/transmitchecker_test.go: `.Run("not fulfilled", func(t *testing.T) {
tx, attempt := txRequest(t, big.NewInt(3))
require.NoError(t, checker.Check(ctx, log, tx, attempt))
})`
$DIR/core/chains/evm/txmgr/transmitchecker_test.go: `.NewInt(3)`
$DIR/core/chains/evm/txmgr/transmitchecker_test.go: `.Run("error checking fulfillment, should transmit", func(t *testing.T) {
tx, attempt := txRequest(t, big.NewInt(2))
require.NoError(t, checker.Check(ctx, log, tx, attempt))
})`
$DIR/core/chains/evm/txmgr/transmitchecker_test.go: `.NewInt(2)`
$DIR/core/chains/evm/txmgr/transmitchecker_test.go: `.Run("can't get header", func(t *testing.T) {
checker.HeadByNumber = func(ctx context.Context, n *big.Int) (*evmtypes.Head, error) {
return nil, pkgerrors.New("can't get head")
}
tx, attempt := txRequest(t, big.NewInt(3))
require.NoError(t, checker.Check(ctx, log, tx, attempt))
})`
$DIR/core/chains/evm/txmgr/transmitchecker_test.go: `.New("can't get head")`
$DIR/core/chains/evm/txmgr/transmitchecker_test.go: `.NewInt(3)`
$DIR/core/chains/evm/txmgr/transmitchecker_test.go: `.Run("nil request block number", func(t *testing.T) {
checker.HeadByNumber = func(ctx context.Context, n *big.Int) (*evmtypes.Head, error) {
return &evmtypes.Head{
Number: 1,
}, nil
}
checker.RequestBlockNumber = nil
tx, attempt := txRequest(t, big.NewInt(4))
require.NoError(t, checker.Check(ctx, log, tx, attempt))
})`
$DIR/core/chains/evm/txmgr/transmitchecker_test.go: `.NewInt(4)`
$DIR/core/chains/evm/txmgr/txmgr_test.go: `_, err = txm.SendNativeToken(tests.Context(t), big.NewInt(0), from, to, *value, 21000)`
$DIR/core/chains/evm/txmgr/txmgr_test.go: `t.Run("with queue under capacity inserts eth_tx", func(t *testing.T) {
subject := uuid.New()
strategy := newMockTxStrategy(t)
strategy.On("Subject").Return(uuid.NullUUID{UUID: subject, Valid: true})
strategy.On("PruneQueue", mock.Anything, mock.Anything).Return(nil, nil)
evmConfig.MaxQueued = uint64(1)
etx, err := txm.CreateTransaction(tests.Context(t), txmgr.TxRequest{
FromAddress: fromAddress,
ToAddress: toAddress,
EncodedPayload: payload,
FeeLimit: gasLimit,
Meta: nil,
Strategy: strategy,
})
assert.NoError(t, err)
assert.Greater(t, etx.ID, int64(0))
assert.Equal(t, etx.State, txmgrcommon.TxUnstarted)
assert.Equal(t, gasLimit, etx.FeeLimit)
assert.Equal(t, fromAddress, etx.FromAddress)
assert.Equal(t, toAddress, etx.ToAddress)
assert.Equal(t, payload, etx.EncodedPayload)
assert.Equal(t, big.Int(assets.NewEthValue(0)), etx.Value)
assert.Equal(t, subject, etx.Subject.UUID)
cltest.AssertCount(t, db, "evm.txes", 1)
var dbEtx txmgr.DbEthTx
require.NoError(t, db.Get(&dbEtx, `SELECT * FROM evm.txes ORDER BY id ASC LIMIT 1`))
assert.Equal(t, etx.State, txmgrcommon.TxUnstarted)
assert.Equal(t, gasLimit, etx.FeeLimit)
assert.Equal(t, fromAddress, etx.FromAddress)
assert.Equal(t, toAddress, etx.ToAddress)
assert.Equal(t, payload, etx.EncodedPayload)
assert.Equal(t, big.Int(assets.NewEthValue(0)), etx.Value)
assert.Equal(t, subject, etx.Subject.UUID)
})`
$DIR/core/chains/evm/txmgr/txmgr_test.go: `strategy.On("Subject").Return(uuid.NullUUID{UUID: subject, Valid: true})`
$DIR/core/chains/evm/txmgr/txmgr_test.go: `strategy.On("PruneQueue", mock.Anything, mock.Anything).Return(nil, nil)`
$DIR/core/chains/evm/txmgr/txmgr_test.go: `evmConfig.MaxQueued = uint64(1)`
$DIR/core/chains/evm/txmgr/txmgr_test.go: `cltest.AssertCount(t, db, "evm.txes", 1)`
$DIR/core/chains/evm/txmgr/txmgr_test.go: `mustInsertUnconfirmedEthTxWithInsufficientEthAttempt(t, txStore, 0, fromAddress)`
$DIR/core/chains/evm/txmgr/txmgr_test.go: `t.Run("with queue at capacity does not insert eth_tx", func(t *testing.T) {
evmConfig.MaxQueued = uint64(1)
_, err := txm.CreateTransaction(tests.Context(t), txmgr.TxRequest{
FromAddress: fromAddress,
ToAddress: testutils.NewAddress(),
EncodedPayload: []byte{1, 2, 3},
FeeLimit: 21000,
Meta: nil,
Strategy: txmgrcommon.NewSendEveryStrategy(),
})
require.Error(t, err)
assert.Contains(t, err.Error(), "Txm#CreateTransaction: cannot create transaction; too many unstarted transactions in the queue (1/1). WARNING: Hitting EVM.Transactions.MaxQueued")
})`
$DIR/core/chains/evm/txmgr/txmgr_test.go: `evmConfig.MaxQueued = uint64(1)`
$DIR/core/chains/evm/txmgr/txmgr_test.go: `t.Run("doesn't insert eth_tx if a matching tx already exists for that pipeline_task_run_id", func(t *testing.T) {
evmConfig.MaxQueued = uint64(3)
id := uuid.New()
tx1, err := txm.CreateTransaction(tests.Context(t), txmgr.TxRequest{
FromAddress: fromAddress,
ToAddress: testutils.NewAddress(),
EncodedPayload: []byte{1, 2, 3},
FeeLimit: 21000,
PipelineTaskRunID: &id,
Strategy: txmgrcommon.NewSendEveryStrategy(),
})
assert.NoError(t, err)
tx2, err := txm.CreateTransaction(tests.Context(t), txmgr.TxRequest{
FromAddress: fromAddress,
ToAddress: testutils.NewAddress(),
EncodedPayload: []byte{1, 2, 3},
FeeLimit: 21000,
PipelineTaskRunID: &id,
Strategy: txmgrcommon.NewSendEveryStrategy(),
})
assert.NoError(t, err)
assert.Equal(t, tx1.GetID(), tx2.GetID())
})`
$DIR/core/chains/evm/txmgr/txmgr_test.go: `evmConfig.MaxQueued = uint64(3)`
$DIR/core/chains/evm/txmgr/txmgr_test.go: `t.Run("returns error if eth key state is missing or doesn't match chain ID", func(t *testing.T) {
rndAddr := testutils.NewAddress()
_, err := txm.CreateTransaction(tests.Context(t), txmgr.TxRequest{
FromAddress: rndAddr,
ToAddress: testutils.NewAddress(),
EncodedPayload: []byte{1, 2, 3},
FeeLimit: 21000,
Strategy: txmgrcommon.NewSendEveryStrategy(),
})
require.Error(t, err)
assert.Contains(t, err.Error(), fmt.Sprintf("no eth key exists with address %s", rndAddr.String()))
_, otherAddress := cltest.MustInsertRandomKey(t, kst.Eth(), *ubig.NewI(1337))
_, err = txm.CreateTransaction(tests.Context(t), txmgr.TxRequest{
FromAddress: otherAddress,
ToAddress: testutils.NewAddress(),
EncodedPayload: []byte{1, 2, 3},
FeeLimit: 21000,
Strategy: txmgrcommon.NewSendEveryStrategy(),
})
require.Error(t, err)
assert.Contains(t, err.Error(), fmt.Sprintf("cannot send transaction from %s on chain ID 0: eth key with address %s exists but is has not been enabled for chain 0 (enabled only for chain IDs: 1337)", otherAddress.Hex(), otherAddress.Hex()))
})`
$DIR/core/chains/evm/txmgr/txmgr_test.go: `_, err = txm.CreateTransaction(tests.Context(t), txmgr.TxRequest{
FromAddress: otherAddress,
ToAddress: testutils.NewAddress(),
EncodedPayload: []byte{1, 2, 3},
FeeLimit: 21000,
Strategy: txmgrcommon.NewSendEveryStrategy(),
})`
$DIR/core/chains/evm/txmgr/txmgr_test.go: `t.Run("simulate transmit checker", func(t *testing.T) {
pgtest.MustExec(t, db, `DELETE FROM evm.txes`)
checker := txmgr.TransmitCheckerSpec{
CheckerType: txmgr.TransmitCheckerTypeSimulate,
}
evmConfig.MaxQueued = uint64(1)
etx, err := txm.CreateTransaction(tests.Context(t), txmgr.TxRequest{
FromAddress: fromAddress,
ToAddress: toAddress,
EncodedPayload: payload,
FeeLimit: gasLimit,
Strategy: txmgrcommon.NewSendEveryStrategy(),
Checker: checker,
})
assert.NoError(t, err)
cltest.AssertCount(t, db, "evm.txes", 1)
var dbEtx txmgr.DbEthTx
require.NoError(t, db.Get(&dbEtx, `SELECT * FROM evm.txes ORDER BY id ASC LIMIT 1`))
var c txmgr.TransmitCheckerSpec
require.NotNil(t, etx.TransmitChecker)
require.NoError(t, json.Unmarshal(*etx.TransmitChecker, &c))
require.Equal(t, checker, c)
})`
$DIR/core/chains/evm/txmgr/txmgr_test.go: `pgtest.MustExec(t, db, `DELETE FROM evm.txes`)`
$DIR/core/chains/evm/txmgr/txmgr_test.go: `evmConfig.MaxQueued = uint64(1)`
$DIR/core/chains/evm/txmgr/txmgr_test.go: `cltest.AssertCount(t, db, "evm.txes", 1)`
$DIR/core/chains/evm/txmgr/txmgr_test.go: `t.Run("meta and vrf checker", func(t *testing.T) {
pgtest.MustExec(t, db, `DELETE FROM evm.txes`)
testDefaultSubID := uint64(2)
testDefaultMaxLink := "1000000000000000000"
testDefaultMaxEth := "2000000000000000000"
// max uint256 is 1.1579209e+77
testDefaultGlobalSubID := crypto.Keccak256Hash([]byte("sub id")).String()
jobID := int32(25)
requestID := common.HexToHash("abcd")
requestTxHash := common.HexToHash("dcba")
meta := &txmgr.TxMeta{
JobID: &jobID,
RequestID: &requestID,
RequestTxHash: &requestTxHash,
MaxLink: &testDefaultMaxLink, // 1e18
MaxEth: &testDefaultMaxEth, // 2e18
SubID: &testDefaultSubID,
GlobalSubID: &testDefaultGlobalSubID,
}
evmConfig.MaxQueued = uint64(1)
checker := txmgr.TransmitCheckerSpec{
CheckerType: txmgr.TransmitCheckerTypeVRFV2,
VRFCoordinatorAddress: testutils.NewAddressPtr(),
}
etx, err := txm.CreateTransaction(tests.Context(t), txmgr.TxRequest{
FromAddress: fromAddress,
ToAddress: toAddress,
EncodedPayload: payload,
FeeLimit: gasLimit,
Meta: meta,
Strategy: txmgrcommon.NewSendEveryStrategy(),
Checker: checker,
})
assert.NoError(t, err)
cltest.AssertCount(t, db, "evm.txes", 1)
var dbEtx txmgr.DbEthTx
require.NoError(t, db.Get(&dbEtx, `SELECT * FROM evm.txes ORDER BY id ASC LIMIT 1`))
m, err := etx.GetMeta()
require.NoError(t, err)
require.Equal(t, meta, m)
var c txmgr.TransmitCheckerSpec
require.NotNil(t, etx.TransmitChecker)
require.NoError(t, json.Unmarshal(*etx.TransmitChecker, &c))
require.Equal(t, checker, c)
})`
$DIR/core/chains/evm/txmgr/txmgr_test.go: `pgtest.MustExec(t, db, `DELETE FROM evm.txes`)`
$DIR/core/chains/evm/txmgr/txmgr_test.go: `evmConfig.MaxQueued = uint64(1)`
$DIR/core/chains/evm/txmgr/txmgr_test.go: `cltest.AssertCount(t, db, "evm.txes", 1)`
$DIR/core/chains/evm/txmgr/txmgr_test.go: `t.Run("forwards tx when a proper forwarder is set up", func(t *testing.T) {
pgtest.MustExec(t, db, `DELETE FROM evm.txes`)
pgtest.MustExec(t, db, `DELETE FROM evm.forwarders`)
evmConfig.MaxQueued = uint64(1)
// Create mock forwarder, mock authorizedsenders call.
form := forwarders.NewORM(db)
fwdrAddr := testutils.NewAddress()
fwdr, err := form.CreateForwarder(tests.Context(t), fwdrAddr, ubig.Big(cltest.FixtureChainID))
require.NoError(t, err)
require.Equal(t, fwdr.Address, fwdrAddr)
etx, err := txm.CreateTransaction(tests.Context(t), txmgr.TxRequest{
FromAddress: fromAddress,
ToAddress: toAddress,
EncodedPayload: payload,
FeeLimit: gasLimit,
ForwarderAddress: fwdr.Address,
Strategy: txmgrcommon.NewSendEveryStrategy(),
})
assert.NoError(t, err)
cltest.AssertCount(t, db, "evm.txes", 1)
var dbEtx txmgr.DbEthTx
require.NoError(t, db.Get(&dbEtx, `SELECT * FROM evm.txes ORDER BY id ASC LIMIT 1`))
m, err := etx.GetMeta()
require.NoError(t, err)
require.NotNil(t, m.FwdrDestAddress)
require.Equal(t, etx.ToAddress.String(), fwdrAddr.String())
})`
$DIR/core/chains/evm/txmgr/txmgr_test.go: `pgtest.MustExec(t, db, `DELETE FROM evm.txes`)`
$DIR/core/chains/evm/txmgr/txmgr_test.go: `pgtest.MustExec(t, db, `DELETE FROM evm.forwarders`)`
$DIR/core/chains/evm/txmgr/txmgr_test.go: `evmConfig.MaxQueued = uint64(1)`
$DIR/core/chains/evm/txmgr/txmgr_test.go: `cltest.AssertCount(t, db, "evm.txes", 1)`
$DIR/core/chains/evm/txmgr/txmgr_test.go: `t.Run("insert Tx successfully with a IdempotencyKey", func(t *testing.T) {
evmConfig.MaxQueued = uint64(3)
id := uuid.New()
idempotencyKey := "1"
_, err := txm.CreateTransaction(tests.Context(t), txmgr.TxRequest{
IdempotencyKey: &idempotencyKey,
FromAddress: fromAddress,
ToAddress: testutils.NewAddress(),
EncodedPayload: []byte{1, 2, 3},
FeeLimit: 21000,
PipelineTaskRunID: &id,
Strategy: txmgrcommon.NewSendEveryStrategy(),
})
assert.NoError(t, err)
})`
$DIR/core/chains/evm/txmgr/txmgr_test.go: `evmConfig.MaxQueued = uint64(3)`
$DIR/core/chains/evm/txmgr/txmgr_test.go: `evmConfig.MaxQueued = uint64(3)`
$DIR/core/chains/evm/txmgr/txmgr_test.go: `t.Run("if another key has any transactions with insufficient eth errors, transmits as normal", func(t *testing.T) {
payload := cltest.MustRandomBytes(t, 100)
evmConfig.MaxQueued = uint64(1)
mustInsertUnconfirmedEthTxWithInsufficientEthAttempt(t, txStore, 0, otherKey.Address)
strategy := newMockTxStrategy(t)
strategy.On("Subject").Return(uuid.NullUUID{})
strategy.On("PruneQueue", mock.Anything, mock.Anything).Return(nil, nil)
etx, err := txm.CreateTransaction(tests.Context(t), txmgr.TxRequest{
FromAddress: evmFromAddress,
ToAddress: toAddress,
EncodedPayload: payload,
FeeLimit: gasLimit,
Meta: nil,
Strategy: strategy,
})
assert.NoError(t, err)
require.Equal(t, payload, etx.EncodedPayload)
})`
$DIR/core/chains/evm/txmgr/txmgr_test.go: `evmConfig.MaxQueued = uint64(1)`
$DIR/core/chains/evm/txmgr/txmgr_test.go: `mustInsertUnconfirmedEthTxWithInsufficientEthAttempt(t, txStore, 0, otherKey.Address)`
$DIR/core/chains/evm/txmgr/txmgr_test.go: `strategy.On("Subject").Return(uuid.NullUUID{})`
$DIR/core/chains/evm/txmgr/txmgr_test.go: `strategy.On("PruneQueue", mock.Anything, mock.Anything).Return(nil, nil)`
$DIR/core/chains/evm/txmgr/txmgr_test.go: `t.Run("if this key has any transactions with insufficient eth errors, inserts it anyway", func(t *testing.T) {
payload := cltest.MustRandomBytes(t, 100)
evmConfig.MaxQueued = uint64(1)
mustInsertUnconfirmedEthTxWithInsufficientEthAttempt(t, txStore, 0, thisKey.Address)
strategy := newMockTxStrategy(t)
strategy.On("Subject").Return(uuid.NullUUID{})
strategy.On("PruneQueue", mock.Anything, mock.Anything).Return(nil, nil)
etx, err := txm.CreateTransaction(tests.Context(t), txmgr.TxRequest{
FromAddress: evmFromAddress,
ToAddress: toAddress,
EncodedPayload: payload,
FeeLimit: gasLimit,
Meta: nil,
Strategy: strategy,
})
require.NoError(t, err)
require.Equal(t, payload, etx.EncodedPayload)
})`
$DIR/core/chains/evm/txmgr/txmgr_test.go: `evmConfig.MaxQueued = uint64(1)`
$DIR/core/chains/evm/txmgr/txmgr_test.go: `mustInsertUnconfirmedEthTxWithInsufficientEthAttempt(t, txStore, 0, thisKey.Address)`
$DIR/core/chains/evm/txmgr/txmgr_test.go: `strategy.On("Subject").Return(uuid.NullUUID{})`
$DIR/core/chains/evm/txmgr/txmgr_test.go: `strategy.On("PruneQueue", mock.Anything, mock.Anything).Return(nil, nil)`
$DIR/core/chains/evm/txmgr/txmgr_test.go: `cltest.MustInsertConfirmedEthTxWithLegacyAttempt(t, txStore, 0, 42, thisKey.Address)`
$DIR/core/chains/evm/txmgr/txmgr_test.go: `strategy.On("Subject").Return(uuid.NullUUID{})`
$DIR/core/chains/evm/txmgr/txmgr_test.go: `strategy.On("PruneQueue", mock.Anything, mock.Anything).Return(nil, nil)`
$DIR/core/chains/evm/txmgr/txmgr_test.go: `evmConfig.MaxQueued = uint64(1)`
$DIR/core/chains/evm/txmgr/txmgr_test.go: `config.SetFinalityDepth(uint32(42))`
$DIR/core/chains/evm/txmgr/txmgr_test.go: `config.RpcDefaultBatchSize = uint32(4)`
$DIR/core/chains/evm/txmgr/txmgr_test.go: `evmConfig.ResendAfterThreshold = 1 * time.Hour`
$DIR/core/chains/evm/txmgr/txmgr_test.go: `evmConfig.ReaperThreshold = 1 * time.Hour`
$DIR/core/chains/evm/txmgr/txmgr_test.go: `evmConfig.ReaperInterval = 1 * time.Hour`
$DIR/core/chains/evm/txmgr/txmgr_test.go: `kst.On("EnabledAddressesForChain", mock.Anything, &cltest.FixtureChainID).Return([]common.Address{}, nil)`
$DIR/core/chains/evm/txmgr/txmgr_test.go: `kst.On("SubscribeToKeyChanges", mock.Anything).Return(keyChangeCh, unsub.ItHappened)`
$DIR/core/chains/evm/txmgr/txmgr_test.go: `txm.OnNewLongestChain(tests.Context(t), head)`
$DIR/core/chains/evm/txmgr/txmgr_test.go: `evmConfig.BumpThreshold = uint64(1)`
$DIR/core/chains/evm/txmgr/txmgr_test.go: `t.Cleanup(cancel)`
$DIR/core/chains/evm/txmgr/txmgr_test.go: `txm.OnNewLongestChain(ctx, head)`
$DIR/core/chains/evm/txmgr/txmgr_test.go: `kst.On("EnabledAddressesForChain", mock.Anything, &cltest.FixtureChainID).Return(addr, nil)`
$DIR/core/chains/evm/txmgr/txmgr_test.go: `ethClient.On("PendingNonceAt", mock.AnythingOfType("*context.cancelCtx"), common.Address{}).Return(uint64(0), nil).Maybe()`
$DIR/core/chains/evm/txmgr/txmgr_test.go: `keyChangeCh <- struct{}{}`
$DIR/core/chains/evm/txmgr/txmgr_test.go: `cltest.MustInsertConfirmedEthTxWithLegacyAttempt(t, txStore, i, i*42+1, addr)`
$DIR/core/chains/evm/txmgr/txmgr_test.go: `cltest.MustInsertConfirmedEthTxWithLegacyAttempt(t, txStore, i, i*42+1, addr2)`
$DIR/core/chains/evm/txmgr/txmgr_test.go: `ethClient.On("HeadByNumber", mock.Anything, (*big.Int)(nil)).Return(nil, nil)`
$DIR/core/chains/evm/txmgr/txmgr_test.go: `ethClient.On("BatchCallContextAll", mock.Anything, mock.Anything).Return(nil).Maybe()`
$DIR/core/chains/evm/txmgr/txmgr_test.go: `ethClient.On("PendingNonceAt", mock.Anything, addr).Return(uint64(128), nil).Maybe()`
$DIR/core/chains/evm/txmgr/txmgr_test.go: `ethClient.On("PendingNonceAt", mock.Anything, addr2).Return(uint64(44), nil).Maybe()`
$DIR/core/chains/evm/txmgr/txmgr_test.go: `cltest.MustInsertUnconfirmedEthTxWithBroadcastLegacyAttempt(t, txStore, 2, addr2)`
$DIR/core/chains/evm/txmgr/txmgr_test.go: `cltest.MustInsertUnconfirmedEthTxWithBroadcastLegacyAttempt(t, txStore, 4+int64(i), addr)`
$DIR/core/chains/evm/txmgr/txmgr_test.go: `t.Run("returns error if not started", func(t *testing.T) {
err := txm.Reset(addr, false)
require.Error(t, err)
assert.EqualError(t, err, "not started")
})`
$DIR/core/chains/evm/txmgr/txmgr_test.go: `servicetest.Run(t, txm)`
$DIR/core/chains/evm/txmgr/txmgr_test.go: `t.Run("returns no error if started", func(t *testing.T) {
err := txm.Reset(addr, false)
require.NoError(t, err)
})`
$DIR/core/chains/evm/txmgr/txmgr_test.go: `err = db.Get(&s, `SELECT error FROM evm.txes WHERE from_address = $1 AND state = 'fatal_error'`, addr)`
$DIR/core/chains/evm/txmgr/txmgr_test.go: `err = db.Get(&count, `SELECT count(*) FROM evm.txes WHERE from_address = $1 AND state = 'fatal_error'`, addr2)`
$DIR/core/chains/evm/txmgr/txmgr_test.go: `.NewSqlxDB(t)`
$DIR/core/chains/evm/txmgr/txmgr_test.go: `.NewEth(1)`
$DIR/core/chains/evm/txmgr/txmgr_test.go: `.ToInt()`
$DIR/core/chains/evm/txmgr/txmgr_test.go: `.MakeTestConfigs(t)`
$DIR/core/chains/evm/txmgr/txmgr_test.go: `.NewKeyStore(t, db)`
$DIR/core/chains/evm/txmgr/txmgr_test.go: `.Eth()`
$DIR/core/chains/evm/txmgr/txmgr_test.go: `.NewEthClientMockWithDefaultChain(t)`
$DIR/core/chains/evm/txmgr/txmgr_test.go: `.NewEstimator(logger.Test(t), ethClient, config, evmConfig.GasEstimator())`
$DIR/core/chains/evm/txmgr/txmgr_test.go: `.Test(t)`
$DIR/core/chains/evm/txmgr/txmgr_test.go: `.GasEstimator()`
$DIR/core/chains/evm/txmgr/txmgr_test.go: `.GasEstimator()`
$DIR/core/chains/evm/txmgr/txmgr_test.go: `.Transactions()`
$DIR/core/chains/evm/txmgr/txmgr_test.go: `.Listener()`
$DIR/core/chains/evm/txmgr/txmgr_test.go: `.SendNativeToken(tests.Context(t), big.NewInt(0), from, to, *value, 21000)`
$DIR/core/chains/evm/txmgr/txmgr_test.go: `.Context(t)`
$DIR/core/chains/evm/txmgr/txmgr_test.go: `.NewInt(0)`
$DIR/core/chains/evm/txmgr/txmgr_test.go: `.NewSqlxDB(t)`
$DIR/core/chains/evm/txmgr/txmgr_test.go: `.NewTestTxStore(t, db)`
$DIR/core/chains/evm/txmgr/txmgr_test.go: `.NewKeyStore(t, db)`
$DIR/core/chains/evm/txmgr/txmgr_test.go: `.MustInsertRandomKey(t, kst.Eth())`
$DIR/core/chains/evm/txmgr/txmgr_test.go: `.Eth()`
$DIR/core/chains/evm/txmgr/txmgr_test.go: `.NewAddress()`
$DIR/core/chains/evm/txmgr/txmgr_test.go: `.MakeTestConfigs(t)`
$DIR/core/chains/evm/txmgr/txmgr_test.go: `.NewEthClientMockWithDefaultChain(t)`
$DIR/core/chains/evm/txmgr/txmgr_test.go: `.NewEstimator(logger.Test(t), ethClient, config, evmConfig.GasEstimator())`
$DIR/core/chains/evm/txmgr/txmgr_test.go: `.Test(t)`
$DIR/core/chains/evm/txmgr/txmgr_test.go: `.GasEstimator()`
$DIR/core/chains/evm/txmgr/txmgr_test.go: `.GasEstimator()`
$DIR/core/chains/evm/txmgr/txmgr_test.go: `.Transactions()`
$DIR/core/chains/evm/txmgr/txmgr_test.go: `.Listener()`
$DIR/core/chains/evm/txmgr/txmgr_test.go: `.Eth()`
$DIR/core/chains/evm/txmgr/txmgr_test.go: `.Run("with queue under capacity inserts eth_tx", func(t *testing.T) {
subject := uuid.New()
strategy := newMockTxStrategy(t)
strategy.On("Subject").Return(uuid.NullUUID{UUID: subject, Valid: true})
strategy.On("PruneQueue", mock.Anything, mock.Anything).Return(nil, nil)
evmConfig.MaxQueued = uint64(1)
etx, err := txm.CreateTransaction(tests.Context(t), txmgr.TxRequest{
FromAddress: fromAddress,
ToAddress: toAddress,
EncodedPayload: payload,
FeeLimit: gasLimit,
Meta: nil,
Strategy: strategy,
})
assert.NoError(t, err)
assert.Greater(t, etx.ID, int64(0))
assert.Equal(t, etx.State, txmgrcommon.TxUnstarted)
assert.Equal(t, gasLimit, etx.FeeLimit)
assert.Equal(t, fromAddress, etx.FromAddress)
assert.Equal(t, toAddress, etx.ToAddress)
assert.Equal(t, payload, etx.EncodedPayload)
assert.Equal(t, big.Int(assets.NewEthValue(0)), etx.Value)
assert.Equal(t, subject, etx.Subject.UUID)
cltest.AssertCount(t, db, "evm.txes", 1)
var dbEtx txmgr.DbEthTx
require.NoError(t, db.Get(&dbEtx, `SELECT * FROM evm.txes ORDER BY id ASC LIMIT 1`))
assert.Equal(t, etx.State, txmgrcommon.TxUnstarted)
assert.Equal(t, gasLimit, etx.FeeLimit)
assert.Equal(t, fromAddress, etx.FromAddress)
assert.Equal(t, toAddress, etx.ToAddress)
assert.Equal(t, payload, etx.EncodedPayload)
assert.Equal(t, big.Int(assets.NewEthValue(0)), etx.Value)
assert.Equal(t, subject, etx.Subject.UUID)
})`
$DIR/core/chains/evm/txmgr/txmgr_test.go: `.New()`
$DIR/core/chains/evm/txmgr/txmgr_test.go: `.On("Subject")`
$DIR/core/chains/evm/txmgr/txmgr_test.go: `.Return(uuid.NullUUID{UUID: subject, Valid: true})`
$DIR/core/chains/evm/txmgr/txmgr_test.go: `.On("PruneQueue", mock.Anything, mock.Anything)`
$DIR/core/chains/evm/txmgr/txmgr_test.go: `.Return(nil, nil)`
$DIR/core/chains/evm/txmgr/txmgr_test.go: `.CreateTransaction(tests.Context(t), txmgr.TxRequest{
FromAddress: fromAddress,
ToAddress: toAddress,
EncodedPayload: payload,
FeeLimit: gasLimit,
Meta: nil,
Strategy: strategy,
})`
$DIR/core/chains/evm/txmgr/txmgr_test.go: `.Context(t)`
$DIR/core/chains/evm/txmgr/txmgr_test.go: `.AssertCount(t, db, "evm.txes", 1)`
$DIR/core/chains/evm/txmgr/txmgr_test.go: `.Run("with queue at capacity does not insert eth_tx", func(t *testing.T) {
evmConfig.MaxQueued = uint64(1)
_, err := txm.CreateTransaction(tests.Context(t), txmgr.TxRequest{
FromAddress: fromAddress,
ToAddress: testutils.NewAddress(),
EncodedPayload: []byte{1, 2, 3},
FeeLimit: 21000,
Meta: nil,
Strategy: txmgrcommon.NewSendEveryStrategy(),
})
require.Error(t, err)
assert.Contains(t, err.Error(), "Txm#CreateTransaction: cannot create transaction; too many unstarted transactions in the queue (1/1). WARNING: Hitting EVM.Transactions.MaxQueued")
})`
$DIR/core/chains/evm/txmgr/txmgr_test.go: `.CreateTransaction(tests.Context(t), txmgr.TxRequest{
FromAddress: fromAddress,
ToAddress: testutils.NewAddress(),
EncodedPayload: []byte{1, 2, 3},
FeeLimit: 21000,
Meta: nil,
Strategy: txmgrcommon.NewSendEveryStrategy(),
})`
$DIR/core/chains/evm/txmgr/txmgr_test.go: `.Context(t)`
$DIR/core/chains/evm/txmgr/txmgr_test.go: `.NewAddress()`
$DIR/core/chains/evm/txmgr/txmgr_test.go: `.NewSendEveryStrategy()`
$DIR/core/chains/evm/txmgr/txmgr_test.go: `.Run("doesn't insert eth_tx if a matching tx already exists for that pipeline_task_run_id", func(t *testing.T) {
evmConfig.MaxQueued = uint64(3)
id := uuid.New()
tx1, err := txm.CreateTransaction(tests.Context(t), txmgr.TxRequest{
FromAddress: fromAddress,
ToAddress: testutils.NewAddress(),
EncodedPayload: []byte{1, 2, 3},
FeeLimit: 21000,
PipelineTaskRunID: &id,
Strategy: txmgrcommon.NewSendEveryStrategy(),
})
assert.NoError(t, err)
tx2, err := txm.CreateTransaction(tests.Context(t), txmgr.TxRequest{
FromAddress: fromAddress,
ToAddress: testutils.NewAddress(),
EncodedPayload: []byte{1, 2, 3},
FeeLimit: 21000,
PipelineTaskRunID: &id,
Strategy: txmgrcommon.NewSendEveryStrategy(),
})
assert.NoError(t, err)
assert.Equal(t, tx1.GetID(), tx2.GetID())
})`
$DIR/core/chains/evm/txmgr/txmgr_test.go: `.New()`
$DIR/core/chains/evm/txmgr/txmgr_test.go: `.CreateTransaction(tests.Context(t), txmgr.TxRequest{
FromAddress: fromAddress,
ToAddress: testutils.NewAddress(),
EncodedPayload: []byte{1, 2, 3},
FeeLimit: 21000,
PipelineTaskRunID: &id,
Strategy: txmgrcommon.NewSendEveryStrategy(),
})`
$DIR/core/chains/evm/txmgr/txmgr_test.go: `.Context(t)`
$DIR/core/chains/evm/txmgr/txmgr_test.go: `.NewAddress()`
$DIR/core/chains/evm/txmgr/txmgr_test.go: `.NewSendEveryStrategy()`
$DIR/core/chains/evm/txmgr/txmgr_test.go: `.CreateTransaction(tests.Context(t), txmgr.TxRequest{
FromAddress: fromAddress,
ToAddress: testutils.NewAddress(),
EncodedPayload: []byte{1, 2, 3},
FeeLimit: 21000,
PipelineTaskRunID: &id,
Strategy: txmgrcommon.NewSendEveryStrategy(),
})`
$DIR/core/chains/evm/txmgr/txmgr_test.go: `.Context(t)`
$DIR/core/chains/evm/txmgr/txmgr_test.go: `.NewAddress()`
$DIR/core/chains/evm/txmgr/txmgr_test.go: `.NewSendEveryStrategy()`
$DIR/core/chains/evm/txmgr/txmgr_test.go: `.Run("returns error if eth key state is missing or doesn't match chain ID", func(t *testing.T) {
rndAddr := testutils.NewAddress()
_, err := txm.CreateTransaction(tests.Context(t), txmgr.TxRequest{
FromAddress: rndAddr,
ToAddress: testutils.NewAddress(),
EncodedPayload: []byte{1, 2, 3},
FeeLimit: 21000,
Strategy: txmgrcommon.NewSendEveryStrategy(),
})
require.Error(t, err)
assert.Contains(t, err.Error(), fmt.Sprintf("no eth key exists with address %s", rndAddr.String()))
_, otherAddress := cltest.MustInsertRandomKey(t, kst.Eth(), *ubig.NewI(1337))
_, err = txm.CreateTransaction(tests.Context(t), txmgr.TxRequest{
FromAddress: otherAddress,
ToAddress: testutils.NewAddress(),
EncodedPayload: []byte{1, 2, 3},
FeeLimit: 21000,
Strategy: txmgrcommon.NewSendEveryStrategy(),
})
require.Error(t, err)
assert.Contains(t, err.Error(), fmt.Sprintf("cannot send transaction from %s on chain ID 0: eth key with address %s exists but is has not been enabled for chain 0 (enabled only for chain IDs: 1337)", otherAddress.Hex(), otherAddress.Hex()))
})`
$DIR/core/chains/evm/txmgr/txmgr_test.go: `.NewAddress()`
$DIR/core/chains/evm/txmgr/txmgr_test.go: `.CreateTransaction(tests.Context(t), txmgr.TxRequest{
FromAddress: rndAddr,
ToAddress: testutils.NewAddress(),
EncodedPayload: []byte{1, 2, 3},
FeeLimit: 21000,
Strategy: txmgrcommon.NewSendEveryStrategy(),
})`
$DIR/core/chains/evm/txmgr/txmgr_test.go: `.Context(t)`
$DIR/core/chains/evm/txmgr/txmgr_test.go: `.NewAddress()`
$DIR/core/chains/evm/txmgr/txmgr_test.go: `.NewSendEveryStrategy()`
$DIR/core/chains/evm/txmgr/txmgr_test.go: `.MustInsertRandomKey(t, kst.Eth(), *ubig.NewI(1337))`
$DIR/core/chains/evm/txmgr/txmgr_test.go: `.Eth()`
$DIR/core/chains/evm/txmgr/txmgr_test.go: `.NewI(1337)`
$DIR/core/chains/evm/txmgr/txmgr_test.go: `.CreateTransaction(tests.Context(t), txmgr.TxRequest{
FromAddress: otherAddress,
ToAddress: testutils.NewAddress(),
EncodedPayload: []byte{1, 2, 3},
FeeLimit: 21000,
Strategy: txmgrcommon.NewSendEveryStrategy(),
})`
$DIR/core/chains/evm/txmgr/txmgr_test.go: `.Context(t)`
$DIR/core/chains/evm/txmgr/txmgr_test.go: `.NewAddress()`
$DIR/core/chains/evm/txmgr/txmgr_test.go: `.NewSendEveryStrategy()`
$DIR/core/chains/evm/txmgr/txmgr_test.go: `.Run("simulate transmit checker", func(t *testing.T) {
pgtest.MustExec(t, db, `DELETE FROM evm.txes`)
checker := txmgr.TransmitCheckerSpec{
CheckerType: txmgr.TransmitCheckerTypeSimulate,
}
evmConfig.MaxQueued = uint64(1)
etx, err := txm.CreateTransaction(tests.Context(t), txmgr.TxRequest{
FromAddress: fromAddress,
ToAddress: toAddress,
EncodedPayload: payload,
FeeLimit: gasLimit,
Strategy: txmgrcommon.NewSendEveryStrategy(),
Checker: checker,
})
assert.NoError(t, err)
cltest.AssertCount(t, db, "evm.txes", 1)
var dbEtx txmgr.DbEthTx
require.NoError(t, db.Get(&dbEtx, `SELECT * FROM evm.txes ORDER BY id ASC LIMIT 1`))
var c txmgr.TransmitCheckerSpec
require.NotNil(t, etx.TransmitChecker)
require.NoError(t, json.Unmarshal(*etx.TransmitChecker, &c))
require.Equal(t, checker, c)
})`
$DIR/core/chains/evm/txmgr/txmgr_test.go: `.MustExec(t, db, `DELETE FROM evm.txes`)`
$DIR/core/chains/evm/txmgr/txmgr_test.go: `.CreateTransaction(tests.Context(t), txmgr.TxRequest{
FromAddress: fromAddress,
ToAddress: toAddress,
EncodedPayload: payload,
FeeLimit: gasLimit,
Strategy: txmgrcommon.NewSendEveryStrategy(),
Checker: checker,
})`
$DIR/core/chains/evm/txmgr/txmgr_test.go: `.Context(t)`
$DIR/core/chains/evm/txmgr/txmgr_test.go: `.NewSendEveryStrategy()`
$DIR/core/chains/evm/txmgr/txmgr_test.go: `.AssertCount(t, db, "evm.txes", 1)`
$DIR/core/chains/evm/txmgr/txmgr_test.go: `.Run("meta and vrf checker", func(t *testing.T) {
pgtest.MustExec(t, db, `DELETE FROM evm.txes`)
testDefaultSubID := uint64(2)
testDefaultMaxLink := "1000000000000000000"
testDefaultMaxEth := "2000000000000000000"
// max uint256 is 1.1579209e+77
testDefaultGlobalSubID := crypto.Keccak256Hash([]byte("sub id")).String()
jobID := int32(25)
requestID := common.HexToHash("abcd")
requestTxHash := common.HexToHash("dcba")
meta := &txmgr.TxMeta{
JobID: &jobID,
RequestID: &requestID,
RequestTxHash: &requestTxHash,
MaxLink: &testDefaultMaxLink, // 1e18
MaxEth: &testDefaultMaxEth, // 2e18
SubID: &testDefaultSubID,
GlobalSubID: &testDefaultGlobalSubID,
}
evmConfig.MaxQueued = uint64(1)
checker := txmgr.TransmitCheckerSpec{
CheckerType: txmgr.TransmitCheckerTypeVRFV2,
VRFCoordinatorAddress: testutils.NewAddressPtr(),
}
etx, err := txm.CreateTransaction(tests.Context(t), txmgr.TxRequest{
FromAddress: fromAddress,
ToAddress: toAddress,
EncodedPayload: payload,
FeeLimit: gasLimit,
Meta: meta,
Strategy: txmgrcommon.NewSendEveryStrategy(),
Checker: checker,
})
assert.NoError(t, err)
cltest.AssertCount(t, db, "evm.txes", 1)
var dbEtx txmgr.DbEthTx
require.NoError(t, db.Get(&dbEtx, `SELECT * FROM evm.txes ORDER BY id ASC LIMIT 1`))
m, err := etx.GetMeta()
require.NoError(t, err)
require.Equal(t, meta, m)
var c txmgr.TransmitCheckerSpec
require.NotNil(t, etx.TransmitChecker)
require.NoError(t, json.Unmarshal(*etx.TransmitChecker, &c))
require.Equal(t, checker, c)
})`
$DIR/core/chains/evm/txmgr/txmgr_test.go: `.MustExec(t, db, `DELETE FROM evm.txes`)`
$DIR/core/chains/evm/txmgr/txmgr_test.go: `.Keccak256Hash([]byte("sub id"))`
$DIR/core/chains/evm/txmgr/txmgr_test.go: `.String()`
$DIR/core/chains/evm/txmgr/txmgr_test.go: `.HexToHash("abcd")`
$DIR/core/chains/evm/txmgr/txmgr_test.go: `.HexToHash("dcba")`
$DIR/core/chains/evm/txmgr/txmgr_test.go: `.NewAddressPtr()`
$DIR/core/chains/evm/txmgr/txmgr_test.go: `.CreateTransaction(tests.Context(t), txmgr.TxRequest{
FromAddress: fromAddress,
ToAddress: toAddress,
EncodedPayload: payload,
FeeLimit: gasLimit,
Meta: meta,
Strategy: txmgrcommon.NewSendEveryStrategy(),
Checker: checker,
})`
$DIR/core/chains/evm/txmgr/txmgr_test.go: `.Context(t)`
$DIR/core/chains/evm/txmgr/txmgr_test.go: `.NewSendEveryStrategy()`
$DIR/core/chains/evm/txmgr/txmgr_test.go: `.AssertCount(t, db, "evm.txes", 1)`
$DIR/core/chains/evm/txmgr/txmgr_test.go: `.GetMeta()`
$DIR/core/chains/evm/txmgr/txmgr_test.go: `.Run("forwards tx when a proper forwarder is set up", func(t *testing.T) {
pgtest.MustExec(t, db, `DELETE FROM evm.txes`)
pgtest.MustExec(t, db, `DELETE FROM evm.forwarders`)
evmConfig.MaxQueued = uint64(1)
// Create mock forwarder, mock authorizedsenders call.
form := forwarders.NewORM(db)
fwdrAddr := testutils.NewAddress()
fwdr, err := form.CreateForwarder(tests.Context(t), fwdrAddr, ubig.Big(cltest.FixtureChainID))
require.NoError(t, err)
require.Equal(t, fwdr.Address, fwdrAddr)
etx, err := txm.CreateTransaction(tests.Context(t), txmgr.TxRequest{
FromAddress: fromAddress,
ToAddress: toAddress,
EncodedPayload: payload,
FeeLimit: gasLimit,
ForwarderAddress: fwdr.Address,
Strategy: txmgrcommon.NewSendEveryStrategy(),
})
assert.NoError(t, err)
cltest.AssertCount(t, db, "evm.txes", 1)
var dbEtx txmgr.DbEthTx
require.NoError(t, db.Get(&dbEtx, `SELECT * FROM evm.txes ORDER BY id ASC LIMIT 1`))
m, err := etx.GetMeta()
require.NoError(t, err)
require.NotNil(t, m.FwdrDestAddress)
require.Equal(t, etx.ToAddress.String(), fwdrAddr.String())
})`
$DIR/core/chains/evm/txmgr/txmgr_test.go: `.MustExec(t, db, `DELETE FROM evm.txes`)`
$DIR/core/chains/evm/txmgr/txmgr_test.go: `.MustExec(t, db, `DELETE FROM evm.forwarders`)`
$DIR/core/chains/evm/txmgr/txmgr_test.go: `.NewORM(db)`
$DIR/core/chains/evm/txmgr/txmgr_test.go: `.NewAddress()`
$DIR/core/chains/evm/txmgr/txmgr_test.go: `.CreateForwarder(tests.Context(t), fwdrAddr, ubig.Big(cltest.FixtureChainID))`
$DIR/core/chains/evm/txmgr/txmgr_test.go: `.Context(t)`
$DIR/core/chains/evm/txmgr/txmgr_test.go: `.Big(cltest.FixtureChainID)`
$DIR/core/chains/evm/txmgr/txmgr_test.go: `.CreateTransaction(tests.Context(t), txmgr.TxRequest{
FromAddress: fromAddress,
ToAddress: toAddress,
EncodedPayload: payload,
FeeLimit: gasLimit,
ForwarderAddress: fwdr.Address,
Strategy: txmgrcommon.NewSendEveryStrategy(),
})`
$DIR/core/chains/evm/txmgr/txmgr_test.go: `.Context(t)`
$DIR/core/chains/evm/txmgr/txmgr_test.go: `.NewSendEveryStrategy()`
$DIR/core/chains/evm/txmgr/txmgr_test.go: `.AssertCount(t, db, "evm.txes", 1)`
$DIR/core/chains/evm/txmgr/txmgr_test.go: `.GetMeta()`
$DIR/core/chains/evm/txmgr/txmgr_test.go: `.Run("insert Tx successfully with a IdempotencyKey", func(t *testing.T) {
evmConfig.MaxQueued = uint64(3)
id := uuid.New()
idempotencyKey := "1"
_, err := txm.CreateTransaction(tests.Context(t), txmgr.TxRequest{
IdempotencyKey: &idempotencyKey,
FromAddress: fromAddress,
ToAddress: testutils.NewAddress(),
EncodedPayload: []byte{1, 2, 3},
FeeLimit: 21000,
PipelineTaskRunID: &id,
Strategy: txmgrcommon.NewSendEveryStrategy(),
})
assert.NoError(t, err)
})`
$DIR/core/chains/evm/txmgr/txmgr_test.go: `.New()`
$DIR/core/chains/evm/txmgr/txmgr_test.go: `.CreateTransaction(tests.Context(t), txmgr.TxRequest{
IdempotencyKey: &idempotencyKey,
FromAddress: fromAddress,
ToAddress: testutils.NewAddress(),
EncodedPayload: []byte{1, 2, 3},
FeeLimit: 21000,
PipelineTaskRunID: &id,
Strategy: txmgrcommon.NewSendEveryStrategy(),
})`
$DIR/core/chains/evm/txmgr/txmgr_test.go: `.Context(t)`
$DIR/core/chains/evm/txmgr/txmgr_test.go: `.NewAddress()`
$DIR/core/chains/evm/txmgr/txmgr_test.go: `.NewSendEveryStrategy()`
$DIR/core/chains/evm/txmgr/txmgr_test.go: `.New()`
$DIR/core/chains/evm/txmgr/txmgr_test.go: `.CreateTransaction(tests.Context(t), txmgr.TxRequest{
IdempotencyKey: &idempotencyKey,
FromAddress: fromAddress,
ToAddress: testutils.NewAddress(),
EncodedPayload: []byte{1, 2, 3},
FeeLimit: 21000,
PipelineTaskRunID: &id,
Strategy: txmgrcommon.NewSendEveryStrategy(),
})`
$DIR/core/chains/evm/txmgr/txmgr_test.go: `.Context(t)`
$DIR/core/chains/evm/txmgr/txmgr_test.go: `.NewAddress()`
$DIR/core/chains/evm/txmgr/txmgr_test.go: `.NewSendEveryStrategy()`
$DIR/core/chains/evm/txmgr/txmgr_test.go: `.CreateTransaction(tests.Context(t), txmgr.TxRequest{
IdempotencyKey: &idempotencyKey,
FromAddress: fromAddress,
ToAddress: testutils.NewAddress(),
EncodedPayload: []byte{1, 2, 3},
FeeLimit: 21000,
PipelineTaskRunID: &id,
Strategy: txmgrcommon.NewSendEveryStrategy(),
})`
$DIR/core/chains/evm/txmgr/txmgr_test.go: `.Context(t)`
$DIR/core/chains/evm/txmgr/txmgr_test.go: `.NewAddress()`
$DIR/core/chains/evm/txmgr/txmgr_test.go: `.NewSendEveryStrategy()`
$DIR/core/chains/evm/txmgr/txmgr_test.go: `.NewSqlxDB(t)`
$DIR/core/chains/evm/txmgr/txmgr_test.go: `.NewTestTxStore(t, db)`
$DIR/core/chains/evm/txmgr/txmgr_test.go: `.NewKeyStore(t, db)`
$DIR/core/chains/evm/txmgr/txmgr_test.go: `.Eth()`
$DIR/core/chains/evm/txmgr/txmgr_test.go: `.MustInsert(t, etKeyStore)`
$DIR/core/chains/evm/txmgr/txmgr_test.go: `.MustInsert(t, etKeyStore)`
$DIR/core/chains/evm/txmgr/txmgr_test.go: `.NewAddress()`
$DIR/core/chains/evm/txmgr/txmgr_test.go: `.MakeTestConfigs(t)`
$DIR/core/chains/evm/txmgr/txmgr_test.go: `.NewEthClientMockWithDefaultChain(t)`
$DIR/core/chains/evm/txmgr/txmgr_test.go: `.NewEstimator(logger.Test(t), ethClient, config, evmConfig.GasEstimator())`
$DIR/core/chains/evm/txmgr/txmgr_test.go: `.Test(t)`
$DIR/core/chains/evm/txmgr/txmgr_test.go: `.GasEstimator()`
$DIR/core/chains/evm/txmgr/txmgr_test.go: `.GasEstimator()`
$DIR/core/chains/evm/txmgr/txmgr_test.go: `.Transactions()`
$DIR/core/chains/evm/txmgr/txmgr_test.go: `.Listener()`
$DIR/core/chains/evm/txmgr/txmgr_test.go: `.Run("if another key has any transactions with insufficient eth errors, transmits as normal", func(t *testing.T) {
payload := cltest.MustRandomBytes(t, 100)
evmConfig.MaxQueued = uint64(1)
mustInsertUnconfirmedEthTxWithInsufficientEthAttempt(t, txStore, 0, otherKey.Address)
strategy := newMockTxStrategy(t)
strategy.On("Subject").Return(uuid.NullUUID{})
strategy.On("PruneQueue", mock.Anything, mock.Anything).Return(nil, nil)
etx, err := txm.CreateTransaction(tests.Context(t), txmgr.TxRequest{
FromAddress: evmFromAddress,
ToAddress: toAddress,
EncodedPayload: payload,
FeeLimit: gasLimit,
Meta: nil,
Strategy: strategy,
})
assert.NoError(t, err)
require.Equal(t, payload, etx.EncodedPayload)
})`
$DIR/core/chains/evm/txmgr/txmgr_test.go: `.MustRandomBytes(t, 100)`
$DIR/core/chains/evm/txmgr/txmgr_test.go: `.On("Subject")`
$DIR/core/chains/evm/txmgr/txmgr_test.go: `.Return(uuid.NullUUID{})`
$DIR/core/chains/evm/txmgr/txmgr_test.go: `.On("PruneQueue", mock.Anything, mock.Anything)`
$DIR/core/chains/evm/txmgr/txmgr_test.go: `.Return(nil, nil)`
$DIR/core/chains/evm/txmgr/txmgr_test.go: `.CreateTransaction(tests.Context(t), txmgr.TxRequest{
FromAddress: evmFromAddress,
ToAddress: toAddress,
EncodedPayload: payload,
FeeLimit: gasLimit,
Meta: nil,
Strategy: strategy,
})`
$DIR/core/chains/evm/txmgr/txmgr_test.go: `.Context(t)`
$DIR/core/chains/evm/txmgr/txmgr_test.go: `.Run("if this key has any transactions with insufficient eth errors, inserts it anyway", func(t *testing.T) {
payload := cltest.MustRandomBytes(t, 100)
evmConfig.MaxQueued = uint64(1)
mustInsertUnconfirmedEthTxWithInsufficientEthAttempt(t, txStore, 0, thisKey.Address)
strategy := newMockTxStrategy(t)
strategy.On("Subject").Return(uuid.NullUUID{})
strategy.On("PruneQueue", mock.Anything, mock.Anything).Return(nil, nil)
etx, err := txm.CreateTransaction(tests.Context(t), txmgr.TxRequest{
FromAddress: evmFromAddress,
ToAddress: toAddress,
EncodedPayload: payload,
FeeLimit: gasLimit,
Meta: nil,
Strategy: strategy,
})
require.NoError(t, err)
require.Equal(t, payload, etx.EncodedPayload)
})`
$DIR/core/chains/evm/txmgr/txmgr_test.go: `.MustRandomBytes(t, 100)`
$DIR/core/chains/evm/txmgr/txmgr_test.go: `.On("Subject")`
$DIR/core/chains/evm/txmgr/txmgr_test.go: `.Return(uuid.NullUUID{})`
$DIR/core/chains/evm/txmgr/txmgr_test.go: `.On("PruneQueue", mock.Anything, mock.Anything)`
$DIR/core/chains/evm/txmgr/txmgr_test.go: `.Return(nil, nil)`
$DIR/core/chains/evm/txmgr/txmgr_test.go: `.CreateTransaction(tests.Context(t), txmgr.TxRequest{
FromAddress: evmFromAddress,
ToAddress: toAddress,
EncodedPayload: payload,
FeeLimit: gasLimit,
Meta: nil,
Strategy: strategy,
})`
$DIR/core/chains/evm/txmgr/txmgr_test.go: `.Context(t)`
$DIR/core/chains/evm/txmgr/txmgr_test.go: `.MustRandomBytes(t, 100)`
$DIR/core/chains/evm/txmgr/txmgr_test.go: `.MustInsertConfirmedEthTxWithLegacyAttempt(t, txStore, 0, 42, thisKey.Address)`
$DIR/core/chains/evm/txmgr/txmgr_test.go: `.On("Subject")`
$DIR/core/chains/evm/txmgr/txmgr_test.go: `.Return(uuid.NullUUID{})`
$DIR/core/chains/evm/txmgr/txmgr_test.go: `.On("PruneQueue", mock.Anything, mock.Anything)`
$DIR/core/chains/evm/txmgr/txmgr_test.go: `.Return(nil, nil)`
$DIR/core/chains/evm/txmgr/txmgr_test.go: `.CreateTransaction(tests.Context(t), txmgr.TxRequest{
FromAddress: evmFromAddress,
ToAddress: toAddress,
EncodedPayload: payload,
FeeLimit: gasLimit,
Meta: nil,
Strategy: strategy,
})`
$DIR/core/chains/evm/txmgr/txmgr_test.go: `.Context(t)`
$DIR/core/chains/evm/txmgr/txmgr_test.go: `.NewSqlxDB(t)`
$DIR/core/chains/evm/txmgr/txmgr_test.go: `.NewEthClientMockWithDefaultChain(t)`
$DIR/core/chains/evm/txmgr/txmgr_test.go: `.NewEth(t)`
$DIR/core/chains/evm/txmgr/txmgr_test.go: `.MakeTestConfigs(t)`
$DIR/core/chains/evm/txmgr/txmgr_test.go: `.SetFinalityDepth(uint32(42))`
$DIR/core/chains/evm/txmgr/txmgr_test.go: `.On("EnabledAddressesForChain", mock.Anything, &cltest.FixtureChainID)`
$DIR/core/chains/evm/txmgr/txmgr_test.go: `.Return([]common.Address{}, nil)`
$DIR/core/chains/evm/txmgr/txmgr_test.go: `.NewAwaiter()`
$DIR/core/chains/evm/txmgr/txmgr_test.go: `.On("SubscribeToKeyChanges", mock.Anything)`
$DIR/core/chains/evm/txmgr/txmgr_test.go: `.Return(keyChangeCh, unsub.ItHappened)`
$DIR/core/chains/evm/txmgr/txmgr_test.go: `.NewEstimator(logger.Test(t), ethClient, config, evmConfig.GasEstimator())`
$DIR/core/chains/evm/txmgr/txmgr_test.go: `.Test(t)`
$DIR/core/chains/evm/txmgr/txmgr_test.go: `.GasEstimator()`
$DIR/core/chains/evm/txmgr/txmgr_test.go: `.GasEstimator()`
$DIR/core/chains/evm/txmgr/txmgr_test.go: `.Transactions()`
$DIR/core/chains/evm/txmgr/txmgr_test.go: `.Listener()`
$DIR/core/chains/evm/txmgr/txmgr_test.go: `.Head(42)`
$DIR/core/chains/evm/txmgr/txmgr_test.go: `.OnNewLongestChain(tests.Context(t), head)`
$DIR/core/chains/evm/txmgr/txmgr_test.go: `.Context(t)`
$DIR/core/chains/evm/txmgr/txmgr_test.go: `.WithTimeout(tests.Context(t), 5*time.Second)`
$DIR/core/chains/evm/txmgr/txmgr_test.go: `.Context(t)`
$DIR/core/chains/evm/txmgr/txmgr_test.go: `.Cleanup(cancel)`
$DIR/core/chains/evm/txmgr/txmgr_test.go: `.OnNewLongestChain(ctx, head)`
$DIR/core/chains/evm/txmgr/txmgr_test.go: `.MustGenerateRandomKeyState(t)`
$DIR/core/chains/evm/txmgr/txmgr_test.go: `.Address.Address()`
$DIR/core/chains/evm/txmgr/txmgr_test.go: `.On("EnabledAddressesForChain", mock.Anything, &cltest.FixtureChainID)`
$DIR/core/chains/evm/txmgr/txmgr_test.go: `.Return(addr, nil)`
$DIR/core/chains/evm/txmgr/txmgr_test.go: `.On("PendingNonceAt", mock.AnythingOfType("*context.cancelCtx"), common.Address{})`
$DIR/core/chains/evm/txmgr/txmgr_test.go: `.AnythingOfType("*context.cancelCtx")`
$DIR/core/chains/evm/txmgr/txmgr_test.go: `.Return(uint64(0), nil)`
$DIR/core/chains/evm/txmgr/txmgr_test.go: `.Maybe()`
$DIR/core/chains/evm/txmgr/txmgr_test.go: `.NewSqlxDB(t)`
$DIR/core/chains/evm/txmgr/txmgr_test.go: `.NewTestGeneralConfig(t)`
$DIR/core/chains/evm/txmgr/txmgr_test.go: `.NewChainScopedConfig(t, gcfg)`
$DIR/core/chains/evm/txmgr/txmgr_test.go: `.NewKeyStore(t, db)`
$DIR/core/chains/evm/txmgr/txmgr_test.go: `.MustInsert(t, kst.Eth())`
$DIR/core/chains/evm/txmgr/txmgr_test.go: `.Eth()`
$DIR/core/chains/evm/txmgr/txmgr_test.go: `.MustInsert(t, kst.Eth())`
$DIR/core/chains/evm/txmgr/txmgr_test.go: `.Eth()`
$DIR/core/chains/evm/txmgr/txmgr_test.go: `.NewTestTxStore(t, db)`
$DIR/core/chains/evm/txmgr/txmgr_test.go: `.MustInsertConfirmedEthTxWithLegacyAttempt(t, txStore, i, i*42+1, addr)`
$DIR/core/chains/evm/txmgr/txmgr_test.go: `.MustInsertConfirmedEthTxWithLegacyAttempt(t, txStore, i, i*42+1, addr2)`
$DIR/core/chains/evm/txmgr/txmgr_test.go: `.NewEthClientMockWithDefaultChain(t)`
$DIR/core/chains/evm/txmgr/txmgr_test.go: `.On("HeadByNumber", mock.Anything, (*big.Int)(nil))`
$DIR/core/chains/evm/txmgr/txmgr_test.go: `.Return(nil, nil)`
$DIR/core/chains/evm/txmgr/txmgr_test.go: `.On("BatchCallContextAll", mock.Anything, mock.Anything)`
$DIR/core/chains/evm/txmgr/txmgr_test.go: `.Return(nil)`
$DIR/core/chains/evm/txmgr/txmgr_test.go: `.Maybe()`
$DIR/core/chains/evm/txmgr/txmgr_test.go: `.On("PendingNonceAt", mock.Anything, addr)`
$DIR/core/chains/evm/txmgr/txmgr_test.go: `.Return(uint64(128), nil)`
$DIR/core/chains/evm/txmgr/txmgr_test.go: `.Maybe()`
$DIR/core/chains/evm/txmgr/txmgr_test.go: `.On("PendingNonceAt", mock.Anything, addr2)`
$DIR/core/chains/evm/txmgr/txmgr_test.go: `.Return(uint64(44), nil)`
$DIR/core/chains/evm/txmgr/txmgr_test.go: `.Maybe()`
$DIR/core/chains/evm/txmgr/txmgr_test.go: `.NewEstimator(logger.Test(t), ethClient, cfg.EVM(), cfg.EVM().GasEstimator())`
$DIR/core/chains/evm/txmgr/txmgr_test.go: `.Test(t)`
$DIR/core/chains/evm/txmgr/txmgr_test.go: `.EVM()`
$DIR/core/chains/evm/txmgr/txmgr_test.go: `.EVM()`
$DIR/core/chains/evm/txmgr/txmgr_test.go: `.GasEstimator()`
$DIR/core/chains/evm/txmgr/txmgr_test.go: `.EVM()`
$DIR/core/chains/evm/txmgr/txmgr_test.go: `.EVM()`
$DIR/core/chains/evm/txmgr/txmgr_test.go: `.GasEstimator()`
$DIR/core/chains/evm/txmgr/txmgr_test.go: `.EVM()`
$DIR/core/chains/evm/txmgr/txmgr_test.go: `.Transactions()`
$DIR/core/chains/evm/txmgr/txmgr_test.go: `.Database()`
$DIR/core/chains/evm/txmgr/txmgr_test.go: `.Database()`
$DIR/core/chains/evm/txmgr/txmgr_test.go: `.Listener()`
$DIR/core/chains/evm/txmgr/txmgr_test.go: `.Eth()`
$DIR/core/chains/evm/txmgr/txmgr_test.go: `.MustInsertUnconfirmedEthTxWithBroadcastLegacyAttempt(t, txStore, 2, addr2)`
$DIR/core/chains/evm/txmgr/txmgr_test.go: `.MustInsertUnconfirmedEthTxWithBroadcastLegacyAttempt(t, txStore, 4+int64(i), addr)`
$DIR/core/chains/evm/txmgr/txmgr_test.go: `.Run("returns error if not started", func(t *testing.T) {
err := txm.Reset(addr, false)
require.Error(t, err)
assert.EqualError(t, err, "not started")
})`
$DIR/core/chains/evm/txmgr/txmgr_test.go: `.Reset(addr, false)`
$DIR/core/chains/evm/txmgr/txmgr_test.go: `.Run(t, txm)`
$DIR/core/chains/evm/txmgr/txmgr_test.go: `.Run("returns no error if started", func(t *testing.T) {
err := txm.Reset(addr, false)
require.NoError(t, err)
})`
$DIR/core/chains/evm/txmgr/txmgr_test.go: `.Reset(addr, false)`
$DIR/core/chains/evm/txmgr/txmgr_test.go: `.Reset(addr, true)`
$DIR/core/chains/evm/txmgr/txmgr_test.go: `.Get(&s, `SELECT error FROM evm.txes WHERE from_address = $1 AND state = 'fatal_error'`, addr)`
$DIR/core/chains/evm/txmgr/txmgr_test.go: `.Get(&count, `SELECT count(*) FROM evm.txes WHERE from_address = $1 AND state = 'fatal_error'`, addr2)`
$DIR/core/chains/evm/types/address_test.go: `zeroAddress = types.EIP55Address("")`
$DIR/core/chains/evm/types/address_test.go: `err = zeroAddress.UnmarshalText([]byte("0xa0788FC17B1dEe36f057c42B6F373A34B014687e"))`
$DIR/core/chains/evm/types/address_test.go: `t.Run(test.name, func(t *testing.T) {
_, err := types.NewEIP55Address(test.input)
valid := err == nil
assert.Equal(t, test.valid, valid)
})`
$DIR/core/chains/evm/types/address_test.go: `err = eip55New.Scan(val)`
$DIR/core/chains/evm/types/address_test.go: `err = collectionNew.Scan(val)`
$DIR/core/chains/evm/types/address_test.go: `eip55 = types.EIP55AddressFromAddress(common.HexToAddress("0x1"))`
$DIR/core/chains/evm/types/address_test.go: `.EIP55Address("0xa0788FC17B1dEe36f057c42B6F373A34B014687e")`
$DIR/core/chains/evm/types/address_test.go: `.SetString("a0788FC17B1dEe36f057c42B6F373A34B014687e", 16)`
$DIR/core/chains/evm/types/address_test.go: `.EIP55Address("")`
$DIR/core/chains/evm/types/address_test.go: `.Unmarshal([]byte(`"0xa0788FC17B1dEe36f057c42B6F373A34B014687e"`), &zeroAddress)`
$DIR/core/chains/evm/types/address_test.go: `.EIP55Address("")`
$DIR/core/chains/evm/types/address_test.go: `.UnmarshalText([]byte("0xa0788FC17B1dEe36f057c42B6F373A34B014687e"))`
$DIR/core/chains/evm/types/address_test.go: `.String()`
$DIR/core/chains/evm/types/address_test.go: `.Run(test.name, func(t *testing.T) {
_, err := types.NewEIP55Address(test.input)
valid := err == nil
assert.Equal(t, test.valid, valid)
})`
$DIR/core/chains/evm/types/address_test.go: `.NewEIP55Address(test.input)`
$DIR/core/chains/evm/types/address_test.go: `.HexToAddress("0xa0788FC17B1dEe36f057c42B6F373A34B014687e")`
$DIR/core/chains/evm/types/address_test.go: `.EIP55AddressFromAddress(addr)`
$DIR/core/chains/evm/types/address_test.go: `.Address()`
$DIR/core/chains/evm/types/address_test.go: `.NewEIP55Address("0xa0788FC17B1dEe36f057c42B6F373A34B014687e")`
$DIR/core/chains/evm/types/address_test.go: `.Value()`
$DIR/core/chains/evm/types/address_test.go: `.Scan(val)`
$DIR/core/chains/evm/types/address_test.go: `.EIP55Address("0xa0788FC17B1dEe36f057c42B6F373A34B0146111")`
$DIR/core/chains/evm/types/address_test.go: `.EIP55Address("0xa0788FC17B1dEe36f057c42B6F373A34B0146222")`
$DIR/core/chains/evm/types/address_test.go: `.Value()`
$DIR/core/chains/evm/types/address_test.go: `.Scan(val)`
$DIR/core/chains/evm/types/address_test.go: `.EIP55AddressFromAddress(common.HexToAddress("0x0"))`
$DIR/core/chains/evm/types/address_test.go: `.HexToAddress("0x0")`
$DIR/core/chains/evm/types/address_test.go: `.EIP55AddressFromAddress(common.HexToAddress("0x1"))`
$DIR/core/chains/evm/types/address_test.go: `.HexToAddress("0x1")`
$DIR/core/chains/evm/types/address_test.go: `.IsZero()`
$DIR/core/chains/evm/types/head_test.go: `t.Run(tc.Name, func(t *testing.T) {
actual := tc.Head.LatestFinalizedHead()
if tc.Finalized == nil {
assert.Nil(t, actual)
} else {
require.NotNil(t, actual)
assert.Equal(t, tc.Finalized.Number, actual.BlockNumber())
}
})`
$DIR/core/chains/evm/types/head_test.go: `.Run(tc.Name, func(t *testing.T) {
actual := tc.Head.LatestFinalizedHead()
if tc.Finalized == nil {
assert.Nil(t, actual)
} else {
require.NotNil(t, actual)
assert.Equal(t, tc.Finalized.Number, actual.BlockNumber())
}
})`
$DIR/core/chains/evm/types/head_test.go: `.Head.LatestFinalizedHead()`
$DIR/core/chains/evm/types/models_test.go: `t.Run(test.want, func(t *testing.T) {
num := evmtypes.NewHead(test.input, utils.NewHash(), utils.NewHash(), 0, nil)
assert.Equal(t, test.want, fmt.Sprintf("%x", num.ToInt()))
})`
$DIR/core/chains/evm/types/models_test.go: `t.Run(test.name, func(t *testing.T) {
assert.Equal(t, test.greater, test.left.GreaterThan(test.right))
})`
$DIR/core/chains/evm/types/models_test.go: `t.Run(test.name, func(t *testing.T) {
assert.Equal(t, test.want, test.bn.NextInt())
})`
$DIR/core/chains/evm/types/models_test.go: `t.Run(strconv.Itoa(i), func(t *testing.T) {
actual, err := test.ary.SafeByteSlice(test.start, test.end)
assert.NoError(t, err)
assert.Equal(t, test.expected, actual)
})`
$DIR/core/chains/evm/types/models_test.go: `t.Run(strconv.Itoa(i), func(t *testing.T) {
actual, err := test.ary.SafeByteSlice(test.start, test.end)
assert.EqualError(t, err, "out of bounds slice access")
var expected []byte
assert.Equal(t, expected, actual)
})`
$DIR/core/chains/evm/types/models_test.go: `t.Run(test.name, func(t *testing.T) {
receipt := cltest.TxReceiptFromFixture(t, test.path)
require.Equal(t, test.want, evmtypes.ReceiptIndicatesRunLogFulfillment(*receipt))
})`
$DIR/core/chains/evm/types/models_test.go: `t.Run(test.name, func(t *testing.T) {
var head evmtypes.Head
err := head.UnmarshalJSON([]byte(test.json))
require.NoError(t, err)
assert.Equal(t, test.expected.Hash, head.Hash)
assert.Equal(t, test.expected.Number, head.Number)
assert.Equal(t, test.expected.ParentHash, head.ParentHash)
assert.Equal(t, test.expected.Timestamp.UTC().Unix(), head.Timestamp.UTC().Unix())
assert.Equal(t, test.expected.L1BlockNumber, head.L1BlockNumber)
assert.Equal(t, test.expected.ReceiptsRoot, head.ReceiptsRoot)
assert.Equal(t, test.expected.TransactionsRoot, head.TransactionsRoot)
assert.Equal(t, test.expected.StateRoot, head.StateRoot)
})`
$DIR/core/chains/evm/types/models_test.go: `t.Run(test.name, func(t *testing.T) {
bs, err := test.head.MarshalJSON()
require.NoError(t, err)
require.Equal(t, test.expected, string(bs))
})`
$DIR/core/chains/evm/types/models_test.go: `t.Run("unmarshals parity block", func(t *testing.T) {
b := new(evmtypes.Block)
err := b.UnmarshalJSON([]byte(paritySampleBlock))
assert.NoError(t, err)
assert.Equal(t, int64(32473599), b.Number)
assert.Equal(t, "0x0ec62c2a397e114d84ce932387d841787d7ec5757ceba3708386da87934b7c82", b.Hash.Hex())
assert.Equal(t, "0x3aa1c729fb45888bc1ce777d00bad9637c0b5f7cb48b145ebacc16098e0132d4", b.ParentHash.Hex())
assert.Equal(t, assets.NewWeiI(7), b.BaseFeePerGas)
assert.Equal(t, int64(1656602604), b.Timestamp.Unix())
assert.Len(t, b.Transactions, 2)
})`
$DIR/core/chains/evm/types/models_test.go: `t.Run("unmarshals geth block", func(t *testing.T) {
b := new(evmtypes.Block)
err := b.UnmarshalJSON([]byte(gethSampleBlock))
assert.NoError(t, err)
assert.Equal(t, int64(15051090), b.Number)
assert.Equal(t, "0x45eb0a650b6b0b9fd1ee676b870e43fa7614f1034f7404070327a332faed05c0", b.Hash.Hex())
assert.Equal(t, "0x653ea251c180d93296ef79378e64d7dc9a74f565a54df477faeb64d3330977dd", b.ParentHash.Hex())
assert.Equal(t, assets.NewWeiI(39678999761), b.BaseFeePerGas)
assert.Equal(t, int64(1656603143), b.Timestamp.Unix())
assert.Len(t, b.Transactions, 7)
})`
$DIR/core/chains/evm/types/models_test.go: `t.Run("handles empty result", func(t *testing.T) {
b := new(evmtypes.Block)
err := b.UnmarshalJSON([]byte("null"))
assert.Error(t, err)
assert.Equal(t, pkgerrors.Cause(err), evmtypes.ErrMissingBlock)
assert.True(t, pkgerrors.Is(err, evmtypes.ErrMissingBlock))
})`
$DIR/core/chains/evm/types/models_test.go: `t.Run(tt.name, func(t *testing.T) {
got := &evmtypes.Transaction{}
err := got.UnmarshalJSON(tt.args.data)
require.NoError(t, err)
require.Equal(t, tt.want, got)
})`
$DIR/core/chains/evm/types/models_test.go: `err = json.Unmarshal(d, got)`
$DIR/core/chains/evm/types/models_test.go: `err = json.Unmarshal(d, got)`
$DIR/core/chains/evm/types/models_test.go: `t.Run("non zero", func(t *testing.T) {
t.Parallel()
want := evmtypes.TxType(2)
d, err := json.Marshal(&want)
require.NoError(t, err)
got := new(evmtypes.TxType)
err = json.Unmarshal(d, got)
require.NoError(t, err)
assert.Equal(t, want, *got)
})`
$DIR/core/chains/evm/types/models_test.go: `err = json.Unmarshal(d, got)`
$DIR/core/chains/evm/types/models_test.go: `err = json.Unmarshal(d, got)`
$DIR/core/chains/evm/types/models_test.go: `.NewInt(0)`
$DIR/core/chains/evm/types/models_test.go: `.NewInt(0xf)`
$DIR/core/chains/evm/types/models_test.go: `.NewInt(0x10)`
$DIR/core/chains/evm/types/models_test.go: `.Run(test.want, func(t *testing.T) {
num := evmtypes.NewHead(test.input, utils.NewHash(), utils.NewHash(), 0, nil)
assert.Equal(t, test.want, fmt.Sprintf("%x", num.ToInt()))
})`
$DIR/core/chains/evm/types/models_test.go: `.NewHead(test.input, utils.NewHash(), utils.NewHash(), 0, nil)`
$DIR/core/chains/evm/types/models_test.go: `.NewHash()`
$DIR/core/chains/evm/types/models_test.go: `.NewHash()`
$DIR/core/chains/evm/types/models_test.go: `.Head(1)`
$DIR/core/chains/evm/types/models_test.go: `.Head(1)`
$DIR/core/chains/evm/types/models_test.go: `.Head(1)`
$DIR/core/chains/evm/types/models_test.go: `.Head(2)`
$DIR/core/chains/evm/types/models_test.go: `.Head(2)`
$DIR/core/chains/evm/types/models_test.go: `.Head(2)`
$DIR/core/chains/evm/types/models_test.go: `.Head(2)`
$DIR/core/chains/evm/types/models_test.go: `.Head(1)`
$DIR/core/chains/evm/types/models_test.go: `.Run(test.name, func(t *testing.T) {
assert.Equal(t, test.greater, test.left.GreaterThan(test.right))
})`
$DIR/core/chains/evm/types/models_test.go: `.Head(1)`
$DIR/core/chains/evm/types/models_test.go: `.NewInt(2)`
$DIR/core/chains/evm/types/models_test.go: `.Run(test.name, func(t *testing.T) {
assert.Equal(t, test.want, test.bn.NextInt())
})`
$DIR/core/chains/evm/types/models_test.go: `.GetID()`
$DIR/core/chains/evm/types/models_test.go: `.NewSqlxDB(t)`
$DIR/core/chains/evm/types/models_test.go: `.NewKeyStore(t, db)`
$DIR/core/chains/evm/types/models_test.go: `.Eth()`
$DIR/core/chains/evm/types/models_test.go: `.MustInsertRandomKey(t, ethKeyStore)`
$DIR/core/chains/evm/types/models_test.go: `.NewLegacyTransaction(uint64(42), testutils.NewAddress(), big.NewInt(142), 242, big.NewInt(342), []byte{1, 2, 3})`
$DIR/core/chains/evm/types/models_test.go: `.NewAddress()`
$DIR/core/chains/evm/types/models_test.go: `.NewInt(142)`
$DIR/core/chains/evm/types/models_test.go: `.NewInt(342)`
$DIR/core/chains/evm/types/models_test.go: `.NewInt(3)`
$DIR/core/chains/evm/types/models_test.go: `.SignTx(tests.Context(t), fromAddress, tx, chainID)`
$DIR/core/chains/evm/types/models_test.go: `.Context(t)`
$DIR/core/chains/evm/types/models_test.go: `.Bytes()`
$DIR/core/chains/evm/types/models_test.go: `.GetGethSignedTx(attempt.SignedRawTx)`
$DIR/core/chains/evm/types/models_test.go: `.Bytes()`
$DIR/core/chains/evm/types/models_test.go: `.ChainLength()`
$DIR/core/chains/evm/types/models_test.go: `.AsSlice(4)`
$DIR/core/chains/evm/types/models_test.go: `.HexToFunctionSelector("0xb3f98adc")`
$DIR/core/chains/evm/types/models_test.go: `.String()`
$DIR/core/chains/evm/types/models_test.go: `.HexToFunctionSelector("0xb3f98adc123456")`
$DIR/core/chains/evm/types/models_test.go: `.String()`
$DIR/core/chains/evm/types/models_test.go: `.Unmarshal(bytes, &fid)`
$DIR/core/chains/evm/types/models_test.go: `.String()`
$DIR/core/chains/evm/types/models_test.go: `.Unmarshal(literalSelectorBytes, &fid)`
$DIR/core/chains/evm/types/models_test.go: `.String()`
$DIR/core/chains/evm/types/models_test.go: `.Unmarshal(bytes, &fid)`
$DIR/core/chains/evm/types/models_test.go: `.Run(strconv.Itoa(i), func(t *testing.T) {
actual, err := test.ary.SafeByteSlice(test.start, test.end)
assert.NoError(t, err)
assert.Equal(t, test.expected, actual)
})`
$DIR/core/chains/evm/types/models_test.go: `.Itoa(i)`
$DIR/core/chains/evm/types/models_test.go: `.ary.SafeByteSlice(test.start, test.end)`
$DIR/core/chains/evm/types/models_test.go: `.Run(strconv.Itoa(i), func(t *testing.T) {
actual, err := test.ary.SafeByteSlice(test.start, test.end)
assert.EqualError(t, err, "out of bounds slice access")
var expected []byte
assert.Equal(t, expected, actual)
})`
$DIR/core/chains/evm/types/models_test.go: `.Itoa(i)`
$DIR/core/chains/evm/types/models_test.go: `.ary.SafeByteSlice(test.start, test.end)`
$DIR/core/chains/evm/types/models_test.go: `.EarliestInChain()`
$DIR/core/chains/evm/types/models_test.go: `.BlockNumber()`
$DIR/core/chains/evm/types/models_test.go: `.NewHash()`
$DIR/core/chains/evm/types/models_test.go: `.NewHash()`
$DIR/core/chains/evm/types/models_test.go: `.NewHash()`
$DIR/core/chains/evm/types/models_test.go: `.IsInChain(common.Hash{})`
$DIR/core/chains/evm/types/models_test.go: `.Run(test.name, func(t *testing.T) {
receipt := cltest.TxReceiptFromFixture(t, test.path)
require.Equal(t, test.want, evmtypes.ReceiptIndicatesRunLogFulfillment(*receipt))
})`
$DIR/core/chains/evm/types/models_test.go: `.TxReceiptFromFixture(t, test.path)`
$DIR/core/chains/evm/types/models_test.go: `.HexToHash("0x41800b5c3f1717687d85fc9018faac0a6e90b39deaa0b99e7fe4fe796ddeb26a")`
$DIR/core/chains/evm/types/models_test.go: `.HexToHash("0x41941023680923e0fe4d74a34bdac8141f2540e3ae90623718e47d66d1ca4a2d")`
$DIR/core/chains/evm/types/models_test.go: `.Unix(0x58318da2, 0)`
$DIR/core/chains/evm/types/models_test.go: `.UTC()`
$DIR/core/chains/evm/types/models_test.go: `.HexToHash("0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421")`
$DIR/core/chains/evm/types/models_test.go: `.HexToHash("0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421")`
$DIR/core/chains/evm/types/models_test.go: `.HexToHash("0xc7b01007a10da045eacb90385887dd0c38fcb5db7393006bdde24b93873c334b")`
$DIR/core/chains/evm/types/models_test.go: `.HexToHash("0x41800b5c3f1717687d85fc9018faac0a6e90b39deaa0b99e7fe4fe796ddeb26a")`
$DIR/core/chains/evm/types/models_test.go: `.HexToHash("0x41941023680923e0fe4d74a34bdac8141f2540e3ae90623718e47d66d1ca4a2d")`
$DIR/core/chains/evm/types/models_test.go: `.Unix(0x58318da2, 0)`
$DIR/core/chains/evm/types/models_test.go: `.UTC()`
$DIR/core/chains/evm/types/models_test.go: `.HexToHash("0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421")`
$DIR/core/chains/evm/types/models_test.go: `.HexToHash("0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421")`
$DIR/core/chains/evm/types/models_test.go: `.HexToHash("0xc7b01007a10da045eacb90385887dd0c38fcb5db7393006bdde24b93873c334b")`
$DIR/core/chains/evm/types/models_test.go: `.HexToHash("0x752dab43f7a2482db39227d46cd307623b26167841e2207e93e7566ab7ab7871")`
$DIR/core/chains/evm/types/models_test.go: `.HexToHash("0x923ad1e27c1d43cb2d2fb09e26d2502ca4b4914a2e0599161d279c6c06117d34")`
$DIR/core/chains/evm/types/models_test.go: `.Unix(0x60d0952d, 0)`
$DIR/core/chains/evm/types/models_test.go: `.UTC()`
$DIR/core/chains/evm/types/models_test.go: `.HexToHash("0x2c292672b8fc9d223647a2569e19721f0757c96a1421753a93e141f8e56cf504")`
$DIR/core/chains/evm/types/models_test.go: `.HexToHash("0x71448077f5ce420a8e24db62d4d58e8d8e6ad2c7e76318868e089d41f7e0faf3")`
$DIR/core/chains/evm/types/models_test.go: `.HexToHash("0x0000000000000000000000000000000000000000000000000000000000000000")`
$DIR/core/chains/evm/types/models_test.go: `.HexToHash("0x752dab43f7a2482db39227d46cd307623b26167841e2207e93e7566ab7ab7871")`
$DIR/core/chains/evm/types/models_test.go: `.HexToHash("0x923ad1e27c1d43cb2d2fb09e26d2502ca4b4914a2e0599161d279c6c06117d34")`
$DIR/core/chains/evm/types/models_test.go: `.Unix(0x60d0952d, 0)`
$DIR/core/chains/evm/types/models_test.go: `.UTC()`
$DIR/core/chains/evm/types/models_test.go: `.HexToHash("0x2c292672b8fc9d223647a2569e19721f0757c96a1421753a93e141f8e56cf504")`
$DIR/core/chains/evm/types/models_test.go: `.HexToHash("0x71448077f5ce420a8e24db62d4d58e8d8e6ad2c7e76318868e089d41f7e0faf3")`
$DIR/core/chains/evm/types/models_test.go: `.HexToHash("0x0000000000000000000000000000000000000000000000000000000000000000")`
$DIR/core/chains/evm/types/models_test.go: `.Run(test.name, func(t *testing.T) {
var head evmtypes.Head
err := head.UnmarshalJSON([]byte(test.json))
require.NoError(t, err)
assert.Equal(t, test.expected.Hash, head.Hash)
assert.Equal(t, test.expected.Number, head.Number)
assert.Equal(t, test.expected.ParentHash, head.ParentHash)
assert.Equal(t, test.expected.Timestamp.UTC().Unix(), head.Timestamp.UTC().Unix())
assert.Equal(t, test.expected.L1BlockNumber, head.L1BlockNumber)
assert.Equal(t, test.expected.ReceiptsRoot, head.ReceiptsRoot)
assert.Equal(t, test.expected.TransactionsRoot, head.TransactionsRoot)
assert.Equal(t, test.expected.StateRoot, head.StateRoot)
})`
$DIR/core/chains/evm/types/models_test.go: `.UnmarshalJSON([]byte(test.json))`
$DIR/core/chains/evm/types/models_test.go: `.HexToHash("0x41800b5c3f1717687d85fc9018faac0a6e90b39deaa0b99e7fe4fe796ddeb26a")`
$DIR/core/chains/evm/types/models_test.go: `.HexToHash("0x41941023680923e0fe4d74a34bdac8141f2540e3ae90623718e47d66d1ca4a2d")`
$DIR/core/chains/evm/types/models_test.go: `.Unix(0x58318da2, 0)`
$DIR/core/chains/evm/types/models_test.go: `.UTC()`
$DIR/core/chains/evm/types/models_test.go: `.HexToHash("0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421")`
$DIR/core/chains/evm/types/models_test.go: `.HexToHash("0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421")`
$DIR/core/chains/evm/types/models_test.go: `.HexToHash("0xc7b01007a10da045eacb90385887dd0c38fcb5db7393006bdde24b93873c334b")`
$DIR/core/chains/evm/types/models_test.go: `.Run(test.name, func(t *testing.T) {
bs, err := test.head.MarshalJSON()
require.NoError(t, err)
require.Equal(t, test.expected, string(bs))
})`
$DIR/core/chains/evm/types/models_test.go: `.head.MarshalJSON()`
$DIR/core/chains/evm/types/models_test.go: `.Run("unmarshals parity block", func(t *testing.T) {
b := new(evmtypes.Block)
err := b.UnmarshalJSON([]byte(paritySampleBlock))
assert.NoError(t, err)
assert.Equal(t, int64(32473599), b.Number)
assert.Equal(t, "0x0ec62c2a397e114d84ce932387d841787d7ec5757ceba3708386da87934b7c82", b.Hash.Hex())
assert.Equal(t, "0x3aa1c729fb45888bc1ce777d00bad9637c0b5f7cb48b145ebacc16098e0132d4", b.ParentHash.Hex())
assert.Equal(t, assets.NewWeiI(7), b.BaseFeePerGas)
assert.Equal(t, int64(1656602604), b.Timestamp.Unix())
assert.Len(t, b.Transactions, 2)
})`
$DIR/core/chains/evm/types/models_test.go: `.UnmarshalJSON([]byte(paritySampleBlock))`
$DIR/core/chains/evm/types/models_test.go: `.Run("unmarshals geth block", func(t *testing.T) {
b := new(evmtypes.Block)
err := b.UnmarshalJSON([]byte(gethSampleBlock))
assert.NoError(t, err)
assert.Equal(t, int64(15051090), b.Number)
assert.Equal(t, "0x45eb0a650b6b0b9fd1ee676b870e43fa7614f1034f7404070327a332faed05c0", b.Hash.Hex())
assert.Equal(t, "0x653ea251c180d93296ef79378e64d7dc9a74f565a54df477faeb64d3330977dd", b.ParentHash.Hex())
assert.Equal(t, assets.NewWeiI(39678999761), b.BaseFeePerGas)
assert.Equal(t, int64(1656603143), b.Timestamp.Unix())
assert.Len(t, b.Transactions, 7)
})`
$DIR/core/chains/evm/types/models_test.go: `.UnmarshalJSON([]byte(gethSampleBlock))`
$DIR/core/chains/evm/types/models_test.go: `.Run("handles empty result", func(t *testing.T) {
b := new(evmtypes.Block)
err := b.UnmarshalJSON([]byte("null"))
assert.Error(t, err)
assert.Equal(t, pkgerrors.Cause(err), evmtypes.ErrMissingBlock)
assert.True(t, pkgerrors.Is(err, evmtypes.ErrMissingBlock))
})`
$DIR/core/chains/evm/types/models_test.go: `.UnmarshalJSON([]byte("null"))`
$DIR/core/chains/evm/types/models_test.go: `.UnmarshalJSON([]byte(eip4844Block))`
$DIR/core/chains/evm/types/models_test.go: `.NewWei(mustHexToBig(t, "978a846d2"))`
$DIR/core/chains/evm/types/models_test.go: `.NewWei(mustHexToBig(t, "d0892241d"))`
$DIR/core/chains/evm/types/models_test.go: `.NewWei(mustHexToBig(t, "3b9aca01"))`
$DIR/core/chains/evm/types/models_test.go: `.HexToHash("0x754f49f0a2ca7680806d261dd36ee95ac88a81da59fef0b5d8d691478f075d46")`
$DIR/core/chains/evm/types/models_test.go: `.NewWei(mustHexToBig(t, "17d9abf8b5"))`
$DIR/core/chains/evm/types/models_test.go: `.NewWei(mustHexToBig(t, "8bb2c97000"))`
$DIR/core/chains/evm/types/models_test.go: `.NewWei(mustHexToBig(t, "165a0bc00"))`
$DIR/core/chains/evm/types/models_test.go: `.HexToHash("0xa97e14a2e87d322fcb97edc4b25cd976d18963cfad19bfd4b9c8066a6a2d97cf")`
$DIR/core/chains/evm/types/models_test.go: `.NewWei(mustHexToBig(t, "4f7915f5"))`
$DIR/core/chains/evm/types/models_test.go: `.HexToHash("0xbe6122d6aaf84fb85f4df136d4662c6dc344248e987255c0daa1193b3f17d5a9")`
$DIR/core/chains/evm/types/models_test.go: `.Run(tt.name, func(t *testing.T) {
got := &evmtypes.Transaction{}
err := got.UnmarshalJSON(tt.args.data)
require.NoError(t, err)
require.Equal(t, tt.want, got)
})`
$DIR/core/chains/evm/types/models_test.go: `.UnmarshalJSON(tt.args.data)`
$DIR/core/chains/evm/types/models_test.go: `.NewWei(mustHexToBig(t, "978a846d2"))`
$DIR/core/chains/evm/types/models_test.go: `.NewWei(mustHexToBig(t, "d0892241d"))`
$DIR/core/chains/evm/types/models_test.go: `.NewWei(mustHexToBig(t, "3b9aca01"))`
$DIR/core/chains/evm/types/models_test.go: `.TxType(2)`
$DIR/core/chains/evm/types/models_test.go: `.HexToHash("0x754f49f0a2ca7680806d261dd36ee95ac88a81da59fef0b5d8d691478f075d46")`
$DIR/core/chains/evm/types/models_test.go: `.Marshal(want)`
$DIR/core/chains/evm/types/models_test.go: `.Unmarshal(d, got)`
$DIR/core/chains/evm/types/models_test.go: `.Marshal(smallBlock)`
$DIR/core/chains/evm/types/models_test.go: `.Unmarshal(d, got)`
$DIR/core/chains/evm/types/models_test.go: `.Run("non zero", func(t *testing.T) {
t.Parallel()
want := evmtypes.TxType(2)
d, err := json.Marshal(&want)
require.NoError(t, err)
got := new(evmtypes.TxType)
err = json.Unmarshal(d, got)
require.NoError(t, err)
assert.Equal(t, want, *got)
})`
$DIR/core/chains/evm/types/models_test.go: `.TxType(2)`
$DIR/core/chains/evm/types/models_test.go: `.Marshal(&want)`
$DIR/core/chains/evm/types/models_test.go: `.Unmarshal(d, got)`
$DIR/core/chains/evm/types/models_test.go: `.TxType(0)`
$DIR/core/chains/evm/types/models_test.go: `.Marshal(&want)`
$DIR/core/chains/evm/types/models_test.go: `.Unmarshal(d, got)`
$DIR/core/chains/evm/types/types_test.go: `zeroTxHash.TxHash = common.HexToHash("0x0")`
$DIR/core/chains/evm/types/types_test.go: `receipt = types.FromGethReceipt(&zeroTxHash)`
$DIR/core/chains/evm/types/types_test.go: `zeroBlockHash.BlockHash = common.HexToHash("0x0")`
$DIR/core/chains/evm/types/types_test.go: `receipt = types.FromGethReceipt(&zeroBlockHash)`
$DIR/core/chains/evm/types/types_test.go: `err = parsedReceipt.UnmarshalJSON(json)`
$DIR/core/chains/evm/types/types_test.go: `err = parsedLog.UnmarshalJSON(json)`
$DIR/core/chains/evm/types/types_test.go: `.FromGethReceipt(testGethReceipt)`
$DIR/core/chains/evm/types/types_test.go: `.FromGethReceipt(testGethReceipt)`
$DIR/core/chains/evm/types/types_test.go: `.HexToHash("0x0")`
$DIR/core/chains/evm/types/types_test.go: `.FromGethReceipt(&zeroTxHash)`
$DIR/core/chains/evm/types/types_test.go: `.IsZero()`
$DIR/core/chains/evm/types/types_test.go: `.FromGethReceipt(testGethReceipt)`
$DIR/core/chains/evm/types/types_test.go: `.HexToHash("0x0")`
$DIR/core/chains/evm/types/types_test.go: `.FromGethReceipt(&zeroBlockHash)`
$DIR/core/chains/evm/types/types_test.go: `.IsUnmined()`
$DIR/core/chains/evm/types/types_test.go: `.FromGethReceipt(testGethReceipt)`
$DIR/core/chains/evm/types/types_test.go: `.MarshalJSON()`
$DIR/core/chains/evm/types/types_test.go: `.UnmarshalJSON(json)`
$DIR/core/chains/evm/types/types_test.go: `.FromGethLog(testGethLog1)`
$DIR/core/chains/evm/types/types_test.go: `.MarshalJSON()`
$DIR/core/chains/evm/types/types_test.go: `.UnmarshalJSON(json)`
$DIR/core/chains/evm/types/types_test.go: `.DecodeString("2ab9a2dc53736b361b72d900cdf9f78f9406fbbb")`
$DIR/core/chains/evm/types/types_test.go: `.DecodeString("56b9a2dc53736b361b72d900cdf9f78f9406fbbb")`
$DIR/core/chains/evm/types/types_test.go: `.DecodeString("6b361b72d900cdf9f78f9406fbbb6b361b72d900cdf9f78f9406fbbb")`
$DIR/core/chains/evm/types/types_test.go: `.DecodeString("2ab9130c6b361b72d900cdf9f78f9406fbbb6b361b72d900cdf9f78f9406fbbb")`
$DIR/core/chains/evm/types/types_test.go: `.DecodeString("56b9a2dc53736b361b72d900cdf9f78f9406fbbb06fbbb6b361b7206fbbb6b36")`
$DIR/core/chains/evm/types/types_test.go: `.DecodeString("6b361b72d900cdf9f78f9406fbbb6b361b72d900cdf9f78f9406fbbb")`
$DIR/core/chains/evm/utils/big/big_test.go: `t.Run(tc.payload, func(t *testing.T) {
var b BigFloat
err := json.Unmarshal([]byte(tc.payload), &b)
require.NoError(t, err)
assert.Equal(t, tc.exp.String(), b.Value().String())
})`
$DIR/core/chains/evm/utils/big/big_test.go: `t.Run(tc.payload, func(t *testing.T) {
var b BigFloat
err := json.Unmarshal([]byte(tc.payload), &b)
require.NoError(t, err)
assert.Equal(t, tc.exp.String(), b.Value().String())
})`
$DIR/core/chains/evm/utils/big/big_test.go: `t.Run(test.name, func(t *testing.T) {
err := i.UnmarshalText([]byte(test.input))
require.NoError(t, err)
assert.Equal(t, test.want, i.ToInt())
})`
$DIR/core/chains/evm/utils/big/big_test.go: `t.Run(test.name, func(t *testing.T) {
err := i.UnmarshalText([]byte(test.input))
require.Error(t, err)
})`
$DIR/core/chains/evm/utils/big/big_test.go: `t.Run(test.name, func(t *testing.T) {
i := (*Big)(test.input)
b, err := json.Marshal(&i)
assert.NoError(t, err)
assert.Equal(t, test.want, string(b))
})`
$DIR/core/chains/evm/utils/big/big_test.go: `t.Run(test.name, func(t *testing.T) {
i := new(Big)
err := json.Unmarshal([]byte(test.input), &i)
assert.NoError(t, err)
assert.Equal(t, test.want, i)
})`
$DIR/core/chains/evm/utils/big/big_test.go: `t.Run(test.name, func(t *testing.T) {
i := new(Big)
err := json.Unmarshal([]byte(test.input), &i)
assert.Error(t, err)
})`
$DIR/core/chains/evm/utils/big/big_test.go: `t.Run(test.name, func(t *testing.T) {
big := &Big{}
err := big.Scan(test.input)
require.NoError(t, err)
assert.Equal(t, test.want, big)
})`
$DIR/core/chains/evm/utils/big/big_test.go: `t.Run(test.name, func(t *testing.T) {
big := &Big{}
err := big.Scan(test.input)
require.Error(t, err)
})`
$DIR/core/chains/evm/utils/big/big_test.go: `.NewFloat(1)`
$DIR/core/chains/evm/utils/big/big_test.go: `.Marshal(tc.obj)`
$DIR/core/chains/evm/utils/big/big_test.go: `.NewFloat(-1)`
$DIR/core/chains/evm/utils/big/big_test.go: `.NewFloat(-1)`
$DIR/core/chains/evm/utils/big/big_test.go: `.NewFloat(100)`
$DIR/core/chains/evm/utils/big/big_test.go: `.NewFloat(100)`
$DIR/core/chains/evm/utils/big/big_test.go: `.NewFloat(3.146)`
$DIR/core/chains/evm/utils/big/big_test.go: `.NewFloat(3.146)`
$DIR/core/chains/evm/utils/big/big_test.go: `.Run(tc.payload, func(t *testing.T) {
var b BigFloat
err := json.Unmarshal([]byte(tc.payload), &b)
require.NoError(t, err)
assert.Equal(t, tc.exp.String(), b.Value().String())
})`
$DIR/core/chains/evm/utils/big/big_test.go: `.Unmarshal([]byte(tc.payload), &b)`
$DIR/core/chains/evm/utils/big/big_test.go: `.NewFloat(-1)`
$DIR/core/chains/evm/utils/big/big_test.go: `.NewFloat(100)`
$DIR/core/chains/evm/utils/big/big_test.go: `.NewFloat(3.146)`
$DIR/core/chains/evm/utils/big/big_test.go: `.RequireFromString("1.000000000000000001")`
$DIR/core/chains/evm/utils/big/big_test.go: `.BigFloat()`
$DIR/core/chains/evm/utils/big/big_test.go: `.RequireFromString("1000000.000000000000000001")`
$DIR/core/chains/evm/utils/big/big_test.go: `.BigFloat()`
$DIR/core/chains/evm/utils/big/big_test.go: `.RequireFromString("1000000000.000000000000000001")`
$DIR/core/chains/evm/utils/big/big_test.go: `.BigFloat()`
$DIR/core/chains/evm/utils/big/big_test.go: `.Run(tc.payload, func(t *testing.T) {
var b BigFloat
err := json.Unmarshal([]byte(tc.payload), &b)
require.NoError(t, err)
assert.Equal(t, tc.exp.String(), b.Value().String())
})`
$DIR/core/chains/evm/utils/big/big_test.go: `.Unmarshal([]byte(tc.payload), &b)`
$DIR/core/chains/evm/utils/big/big_test.go: `.NewInt(1234)`
$DIR/core/chains/evm/utils/big/big_test.go: `.NewInt(1234)`
$DIR/core/chains/evm/utils/big/big_test.go: `.NewInt(4660)`
$DIR/core/chains/evm/utils/big/big_test.go: `.NewInt(4660)`
$DIR/core/chains/evm/utils/big/big_test.go: `.NewInt(1234)`
$DIR/core/chains/evm/utils/big/big_test.go: `.Run(test.name, func(t *testing.T) {
err := i.UnmarshalText([]byte(test.input))
require.NoError(t, err)
assert.Equal(t, test.want, i.ToInt())
})`
$DIR/core/chains/evm/utils/big/big_test.go: `.UnmarshalText([]byte(test.input))`
$DIR/core/chains/evm/utils/big/big_test.go: `.NewInt(0)`
$DIR/core/chains/evm/utils/big/big_test.go: `.NewInt(0)`
$DIR/core/chains/evm/utils/big/big_test.go: `.NewInt(0)`
$DIR/core/chains/evm/utils/big/big_test.go: `.Run(test.name, func(t *testing.T) {
err := i.UnmarshalText([]byte(test.input))
require.Error(t, err)
})`
$DIR/core/chains/evm/utils/big/big_test.go: `.UnmarshalText([]byte(test.input))`
$DIR/core/chains/evm/utils/big/big_test.go: `.SetString("9223372036854775808", 10)`
$DIR/core/chains/evm/utils/big/big_test.go: `.NewInt(0)`
$DIR/core/chains/evm/utils/big/big_test.go: `.NewInt(1234)`
$DIR/core/chains/evm/utils/big/big_test.go: `.Run(test.name, func(t *testing.T) {
i := (*Big)(test.input)
b, err := json.Marshal(&i)
assert.NoError(t, err)
assert.Equal(t, test.want, string(b))
})`
$DIR/core/chains/evm/utils/big/big_test.go: `.Marshal(&i)`
$DIR/core/chains/evm/utils/big/big_test.go: `.SetString("9223372036854775808", 10)`
$DIR/core/chains/evm/utils/big/big_test.go: `.NewInt(0)`
$DIR/core/chains/evm/utils/big/big_test.go: `.NewInt(1234)`
$DIR/core/chains/evm/utils/big/big_test.go: `.Run(test.name, func(t *testing.T) {
i := new(Big)
err := json.Unmarshal([]byte(test.input), &i)
assert.NoError(t, err)
assert.Equal(t, test.want, i)
})`
$DIR/core/chains/evm/utils/big/big_test.go: `.Unmarshal([]byte(test.input), &i)`
$DIR/core/chains/evm/utils/big/big_test.go: `.Run(test.name, func(t *testing.T) {
i := new(Big)
err := json.Unmarshal([]byte(test.input), &i)
assert.Error(t, err)
})`
$DIR/core/chains/evm/utils/big/big_test.go: `.Unmarshal([]byte(test.input), &i)`
$DIR/core/chains/evm/utils/big/big_test.go: `.SetString("115792089237316195423570985008687907853269984665640564039457584007913129639935", 10)`
$DIR/core/chains/evm/utils/big/big_test.go: `.NewInt(0)`
$DIR/core/chains/evm/utils/big/big_test.go: `.NewInt(1)`
$DIR/core/chains/evm/utils/big/big_test.go: `.NewInt(0)`
$DIR/core/chains/evm/utils/big/big_test.go: `.NewInt(14)`
$DIR/core/chains/evm/utils/big/big_test.go: `.Run(test.name, func(t *testing.T) {
big := &Big{}
err := big.Scan(test.input)
require.NoError(t, err)
assert.Equal(t, test.want, big)
})`
$DIR/core/chains/evm/utils/big/big_test.go: `.Scan(test.input)`
$DIR/core/chains/evm/utils/big/big_test.go: `.Run(test.name, func(t *testing.T) {
big := &Big{}
err := big.Scan(test.input)
require.Error(t, err)
})`
$DIR/core/chains/evm/utils/big/big_test.go: `.Scan(test.input)`
$DIR/core/chains/evm/utils/ethabi_test.go: `val, err = EVMWordSignedBigInt(new(big.Int).SetInt64(1))`
$DIR/core/chains/evm/utils/ethabi_test.go: `val, err = EVMWordSignedBigInt(new(big.Int).SetInt64(256))`
$DIR/core/chains/evm/utils/ethabi_test.go: `val, err = EVMWordSignedBigInt(new(big.Int).SetInt64(-1))`
$DIR/core/chains/evm/utils/ethabi_test.go: `val, err = EVMWordSignedBigInt(MaxInt256)`
$DIR/core/chains/evm/utils/ethabi_test.go: `val, err = EVMWordSignedBigInt(new(big.Int).Add(MaxInt256, big.NewInt(1)))`
$DIR/core/chains/evm/utils/ethabi_test.go: `val, err = EVMWordBigInt(new(big.Int).SetInt64(1))`
$DIR/core/chains/evm/utils/ethabi_test.go: `val, err = EVMWordBigInt(new(big.Int).SetInt64(256))`
$DIR/core/chains/evm/utils/ethabi_test.go: `val, err = EVMWordBigInt(new(big.Int).SetInt64(-1))`
$DIR/core/chains/evm/utils/ethabi_test.go: `val, err = EVMWordBigInt(MaxUint256)`
$DIR/core/chains/evm/utils/ethabi_test.go: `val, err = EVMWordBigInt(new(big.Int).Add(MaxUint256, big.NewInt(1)))`
$DIR/core/chains/evm/utils/ethabi_test.go: `t.Run(test.name, func(t *testing.T) {
input := gjson.Parse(test.input)
out, err := EVMTranscodeBytes(input)
assert.NoError(t, err)
assert.Equal(t, test.output, hexutil.Encode(out))
})`
$DIR/core/chains/evm/utils/ethabi_test.go: `t.Run(test.name, func(t *testing.T) {
out, err := EVMTranscodeBool(test.input)
assert.NoError(t, err)
assert.Equal(t, test.output, hexutil.Encode(out))
})`
$DIR/core/chains/evm/utils/ethabi_test.go: `t.Run(test.name, func(t *testing.T) {
out, err := EVMTranscodeUint256(test.input)
if test.wantError {
assert.Error(t, err)
} else {
assert.NoError(t, err)
assert.Equal(t, test.output, hexutil.Encode(out))
}
})`
$DIR/core/chains/evm/utils/ethabi_test.go: `t.Run(test.name, func(t *testing.T) {
out, err := EVMTranscodeInt256(test.input)
if test.wantError {
assert.Error(t, err)
} else {
assert.NoError(t, err)
assert.Equal(t, test.output, hexutil.Encode(out))
}
})`
$DIR/core/chains/evm/utils/ethabi_test.go: `t.Run(test.name, func(t *testing.T) {
input := gjson.GetBytes([]byte(test.input), "result")
out, err := EVMTranscodeJSONWithFormat(input, test.format)
require.NoError(t, err)
assert.Equal(t, test.output, hexutil.Encode(out))
})`
$DIR/core/chains/evm/utils/ethabi_test.go: `t.Run(tc.name, func(t *testing.T) {
abiBytes, err := ABIEncode(tc.abiStr, tc.vals...)
if tc.expectErr {
t.Log(err)
require.Error(t, err)
return
}
require.NoError(t, err)
res, err := ABIDecode(tc.abiStr, abiBytes)
require.NoError(t, err)
assert.Equal(t, tc.vals, res)
})`
$DIR/core/chains/evm/utils/ethabi_test.go: `.MustDecode("0x000000000000000000000000000000000000000000000000ffffffffffffffff")`
$DIR/core/chains/evm/utils/ethabi_test.go: `.NewInt(1)`
$DIR/core/chains/evm/utils/ethabi_test.go: `.NewInt(256)`
$DIR/core/chains/evm/utils/ethabi_test.go: `.Sub(pow2(128), big.NewInt(1))`
$DIR/core/chains/evm/utils/ethabi_test.go: `.NewInt(1)`
$DIR/core/chains/evm/utils/ethabi_test.go: `.NewInt(-1)`
$DIR/core/chains/evm/utils/ethabi_test.go: `.SetInt64(1)`
$DIR/core/chains/evm/utils/ethabi_test.go: `.SetInt64(256)`
$DIR/core/chains/evm/utils/ethabi_test.go: `.SetInt64(-1)`
$DIR/core/chains/evm/utils/ethabi_test.go: `.Add(MaxInt256, big.NewInt(1))`
$DIR/core/chains/evm/utils/ethabi_test.go: `.NewInt(1)`
$DIR/core/chains/evm/utils/ethabi_test.go: `.SetInt64(1)`
$DIR/core/chains/evm/utils/ethabi_test.go: `.SetInt64(256)`
$DIR/core/chains/evm/utils/ethabi_test.go: `.SetInt64(-1)`
$DIR/core/chains/evm/utils/ethabi_test.go: `.Add(MaxUint256, big.NewInt(1))`
$DIR/core/chains/evm/utils/ethabi_test.go: `.NewInt(1)`
$DIR/core/chains/evm/utils/ethabi_test.go: `.Run(test.name, func(t *testing.T) {
input := gjson.Parse(test.input)
out, err := EVMTranscodeBytes(input)
assert.NoError(t, err)
assert.Equal(t, test.output, hexutil.Encode(out))
})`
$DIR/core/chains/evm/utils/ethabi_test.go: `.Parse(test.input)`
$DIR/core/chains/evm/utils/ethabi_test.go: `.Parse("1e+300")`
$DIR/core/chains/evm/utils/ethabi_test.go: `.Parse("{}")`
$DIR/core/chains/evm/utils/ethabi_test.go: `.Run(test.name, func(t *testing.T) {
out, err := EVMTranscodeBool(test.input)
assert.NoError(t, err)
assert.Equal(t, test.output, hexutil.Encode(out))
})`
$DIR/core/chains/evm/utils/ethabi_test.go: `.Run(test.name, func(t *testing.T) {
out, err := EVMTranscodeUint256(test.input)
if test.wantError {
assert.Error(t, err)
} else {
assert.NoError(t, err)
assert.Equal(t, test.output, hexutil.Encode(out))
}
})`
$DIR/core/chains/evm/utils/ethabi_test.go: `.Run(test.name, func(t *testing.T) {
out, err := EVMTranscodeInt256(test.input)
if test.wantError {
assert.Error(t, err)
} else {
assert.NoError(t, err)
assert.Equal(t, test.output, hexutil.Encode(out))
}
})`
$DIR/core/chains/evm/utils/ethabi_test.go: `.Run(test.name, func(t *testing.T) {
input := gjson.GetBytes([]byte(test.input), "result")
out, err := EVMTranscodeJSONWithFormat(input, test.format)
require.NoError(t, err)
assert.Equal(t, test.output, hexutil.Encode(out))
})`
$DIR/core/chains/evm/utils/ethabi_test.go: `.GetBytes([]byte(test.input), "result")`
$DIR/core/chains/evm/utils/ethabi_test.go: `.NewInt(10)`
$DIR/core/chains/evm/utils/ethabi_test.go: `.NewInt(12)`
$DIR/core/chains/evm/utils/ethabi_test.go: `.NewInt(10)`
$DIR/core/chains/evm/utils/ethabi_test.go: `.NewInt(1)`
$DIR/core/chains/evm/utils/ethabi_test.go: `.NewInt(10)`
$DIR/core/chains/evm/utils/ethabi_test.go: `.Run(tc.name, func(t *testing.T) {
abiBytes, err := ABIEncode(tc.abiStr, tc.vals...)
if tc.expectErr {
t.Log(err)
require.Error(t, err)
return
}
require.NoError(t, err)
res, err := ABIDecode(tc.abiStr, abiBytes)
require.NoError(t, err)
assert.Equal(t, tc.vals, res)
})`
$DIR/core/chains/evm/utils/utils_test.go: `t.Run(test.name, func(t *testing.T) {
input, err := hexutil.Decode(test.input)
assert.NoError(t, err)
result, err := utils.Keccak256(input)
assert.NoError(t, err)
assert.Equal(t, test.want, hexutil.Encode(result))
})`
$DIR/core/chains/evm/utils/utils_test.go: `t.Run(test.name, func(t *testing.T) {
t.Parallel()
actual := utils.IsEmptyAddress(test.addr)
assert.Equal(t, test.want, actual)
})`
$DIR/core/chains/evm/utils/utils_test.go: `_, err = utils.Uint256ToBytes(large)`
$DIR/core/chains/evm/utils/utils_test.go: `_, _ = utils.Uint256ToBytes(negative)`
$DIR/core/chains/evm/utils/utils_test.go: `err = utils.CheckUint256(negative)`
$DIR/core/chains/evm/utils/utils_test.go: `err = utils.CheckUint256(big.NewInt(123))`
$DIR/core/chains/evm/utils/utils_test.go: `b, err = utils.HexToUint256("0xFFFFFFFF")`
$DIR/core/chains/evm/utils/utils_test.go: `bs.Sleep()`
$DIR/core/chains/evm/utils/utils_test.go: `bs.Min = d`
$DIR/core/chains/evm/utils/utils_test.go: `bs.Factor = 2`
$DIR/core/chains/evm/utils/utils_test.go: `bs.Sleep()`
$DIR/core/chains/evm/utils/utils_test.go: `bs.Reset()`
$DIR/core/chains/evm/utils/utils_test.go: `utils.RetryWithBackoff(ctx, func() bool {
return false
})`
$DIR/core/chains/evm/utils/utils_test.go: `go utils.RetryWithBackoff(ctx, retry)`
$DIR/core/chains/evm/utils/utils_test.go: `cancel()`
$DIR/core/chains/evm/utils/utils_test.go: `utils.RetryWithBackoff(ctx, retry)`
$DIR/core/chains/evm/utils/utils_test.go: `.Run(test.name, func(t *testing.T) {
input, err := hexutil.Decode(test.input)
assert.NoError(t, err)
result, err := utils.Keccak256(input)
assert.NoError(t, err)
assert.Equal(t, test.want, hexutil.Encode(result))
})`
$DIR/core/chains/evm/utils/utils_test.go: `.Decode(test.input)`
$DIR/core/chains/evm/utils/utils_test.go: `.Keccak256(input)`
$DIR/core/chains/evm/utils/utils_test.go: `.NewAddress()`
$DIR/core/chains/evm/utils/utils_test.go: `.Run(test.name, func(t *testing.T) {
t.Parallel()
actual := utils.IsEmptyAddress(test.addr)
assert.Equal(t, test.want, actual)
})`
$DIR/core/chains/evm/utils/utils_test.go: `.IsEmptyAddress(test.addr)`
$DIR/core/chains/evm/utils/utils_test.go: `.ToLower(address)`
$DIR/core/chains/evm/utils/utils_test.go: `.ToUpper(address)`
$DIR/core/chains/evm/utils/utils_test.go: `.Combine(lowerErr, upperErr)`
$DIR/core/chains/evm/utils/utils_test.go: `.NewInt(0)`
$DIR/core/chains/evm/utils/utils_test.go: `.Sub(utils.MaxUint256, big.NewInt(1))`
$DIR/core/chains/evm/utils/utils_test.go: `.NewInt(1)`
$DIR/core/chains/evm/utils/utils_test.go: `.Uint256ToBytes(v)`
$DIR/core/chains/evm/utils/utils_test.go: `.Uint256ToBytes32(v)`
$DIR/core/chains/evm/utils/utils_test.go: `.NewInt(0)`
$DIR/core/chains/evm/utils/utils_test.go: `.Add(utils.MaxUint256, big.NewInt(1))`
$DIR/core/chains/evm/utils/utils_test.go: `.NewInt(1)`
$DIR/core/chains/evm/utils/utils_test.go: `.Uint256ToBytes(large)`
$DIR/core/chains/evm/utils/utils_test.go: `.NewInt(-1)`
$DIR/core/chains/evm/utils/utils_test.go: `.Uint256ToBytes(negative)`
$DIR/core/chains/evm/utils/utils_test.go: `.NewInt(0)`
$DIR/core/chains/evm/utils/utils_test.go: `.Add(utils.MaxUint256, big.NewInt(1))`
$DIR/core/chains/evm/utils/utils_test.go: `.NewInt(1)`
$DIR/core/chains/evm/utils/utils_test.go: `.CheckUint256(large)`
$DIR/core/chains/evm/utils/utils_test.go: `.NewInt(-123)`
$DIR/core/chains/evm/utils/utils_test.go: `.CheckUint256(negative)`
$DIR/core/chains/evm/utils/utils_test.go: `.CheckUint256(big.NewInt(123))`
$DIR/core/chains/evm/utils/utils_test.go: `.NewInt(123)`
$DIR/core/chains/evm/utils/utils_test.go: `.RandUint256()`
$DIR/core/chains/evm/utils/utils_test.go: `.HexToUint256("0x00")`
$DIR/core/chains/evm/utils/utils_test.go: `.HexToUint256("0xFFFFFFFF")`
$DIR/core/chains/evm/utils/utils_test.go: `.Cmp(big.NewInt(4294967295))`
$DIR/core/chains/evm/utils/utils_test.go: `.NewInt(4294967295)`
$DIR/core/chains/evm/utils/utils_test.go: `.NewHash()`
$DIR/core/chains/evm/utils/utils_test.go: `.NewHash()`
$DIR/core/chains/evm/utils/utils_test.go: `.HexToHash("0x0")`
$DIR/core/chains/evm/utils/utils_test.go: `.PadByteToHash(1)`
$DIR/core/chains/evm/utils/utils_test.go: `.String()`
$DIR/core/chains/evm/utils/utils_test.go: `.NewBackoffSleeper()`
$DIR/core/chains/evm/utils/utils_test.go: `.Sleep()`
$DIR/core/chains/evm/utils/utils_test.go: `.Sleep()`
$DIR/core/chains/evm/utils/utils_test.go: `.Reset()`
$DIR/core/chains/evm/utils/utils_test.go: `.Duration(0)`
$DIR/core/chains/evm/utils/utils_test.go: `.Duration()`
$DIR/core/chains/evm/utils/utils_test.go: `.WithCancel(tests.Context(t))`
$DIR/core/chains/evm/utils/utils_test.go: `.Context(t)`
$DIR/core/chains/evm/utils/utils_test.go: `.RetryWithBackoff(ctx, func() bool {
return false
})`
$DIR/core/chains/evm/utils/utils_test.go: `.Add(1)`
$DIR/core/chains/evm/utils/utils_test.go: `.RetryWithBackoff(ctx, retry)`
$DIR/core/chains/evm/utils/utils_test.go: `.RetryWithBackoff(ctx, retry)`
$DIR/core/chains/evm/utils/utils_test.go: `.Load()`
$DIR/core/chains/legacyevm/chain_test.go: `c.On("ID").Return(big.NewInt(7))`
$DIR/core/chains/legacyevm/chain_test.go: `t.Run(tt.name, func(t *testing.T) {
o := legacyevm.ChainOpts{
AppConfig: tt.fields.AppConfig,
MailMon: tt.fields.MailMon,
DS: tt.fields.DB,
}
if err := o.Validate(); (err != nil) != tt.wantErr {
t.Errorf("ChainOpts.Validate() error = %v, wantErr %v", err, tt.wantErr)
}
})`
$DIR/core/chains/legacyevm/chain_test.go: `.NewGeneralConfig(t, nil)`
$DIR/core/chains/legacyevm/chain_test.go: `.NewChain(t)`
$DIR/core/chains/legacyevm/chain_test.go: `.On("ID")`
$DIR/core/chains/legacyevm/chain_test.go: `.Return(big.NewInt(7))`
$DIR/core/chains/legacyevm/chain_test.go: `.NewInt(7)`
$DIR/core/chains/legacyevm/chain_test.go: `.ID()`
$DIR/core/chains/legacyevm/chain_test.go: `.String()`
$DIR/core/chains/legacyevm/chain_test.go: `.NewLegacyChains(m, legacyevmCfg.EVMConfigs())`
$DIR/core/chains/legacyevm/chain_test.go: `.EVMConfigs()`
$DIR/core/chains/legacyevm/chain_test.go: `.Get(c.ID().String())`
$DIR/core/chains/legacyevm/chain_test.go: `.ID()`
$DIR/core/chains/legacyevm/chain_test.go: `.String()`
$DIR/core/chains/legacyevm/chain_test.go: `.NewTestGeneralConfig(t)`
$DIR/core/chains/legacyevm/chain_test.go: `.NewSqlxDB(t)`
$DIR/core/chains/legacyevm/chain_test.go: `.Run(tt.name, func(t *testing.T) {
o := legacyevm.ChainOpts{
AppConfig: tt.fields.AppConfig,
MailMon: tt.fields.MailMon,
DS: tt.fields.DB,
}
if err := o.Validate(); (err != nil) != tt.wantErr {
t.Errorf("ChainOpts.Validate() error = %v, wantErr %v", err, tt.wantErr)
}
})`
$DIR/core/chains/legacyevm/chain_test.go: `.Validate()`
$DIR/core/cmd/admin_commands_test.go: `client.PasswordPrompter = cltest.MockPasswordPrompter{
Password: cltest.Password,
}`
$DIR/core/cmd/admin_commands_test.go: `t.Run(test.name, func(t *testing.T) {
set := flag.NewFlagSet("test", 0)
flagSetApplyFromAction(client.CreateUser, set, "")
require.NoError(t, set.Set("email", test.email))
require.NoError(t, set.Set("role", test.role))
c := cli.NewContext(nil, set, nil)
if test.err != "" {
assert.ErrorContains(t, client.CreateUser(c), test.err)
} else {
assert.NoError(t, client.CreateUser(c))
}
})`
$DIR/core/cmd/admin_commands_test.go: `flagSetApplyFromAction(client.CreateUser, set, "")`
$DIR/core/cmd/admin_commands_test.go: `t.Run(test.name, func(t *testing.T) {
set := flag.NewFlagSet("test", 0)
flagSetApplyFromAction(client.ChangeRole, set, "")
require.NoError(t, set.Set("email", test.email))
require.NoError(t, set.Set("new-role", test.role))
c := cli.NewContext(nil, set, nil)
if test.err != "" {
assert.ErrorContains(t, client.ChangeRole(c), test.err)
} else {
assert.NoError(t, client.ChangeRole(c))
}
})`
$DIR/core/cmd/admin_commands_test.go: `flagSetApplyFromAction(client.ChangeRole, set, "")`
$DIR/core/cmd/admin_commands_test.go: `t.Run(test.name, func(t *testing.T) {
set := flag.NewFlagSet("test", 0)
flagSetApplyFromAction(client.DeleteUser, set, "")
require.NoError(t, set.Set("email", test.email))
c := cli.NewContext(nil, set, nil)
if test.err != "" {
assert.ErrorContains(t, client.DeleteUser(c), test.err)
} else {
assert.NoError(t, client.DeleteUser(c))
}
})`
$DIR/core/cmd/admin_commands_test.go: `flagSetApplyFromAction(client.DeleteUser, set, "")`
$DIR/core/cmd/admin_commands_test.go: `flagSetApplyFromAction(client.ListUsers, set, "")`
$DIR/core/cmd/admin_commands_test.go: `client.Renderer = testRenderer`
$DIR/core/cmd/admin_commands_test.go: `userPresenterFound = true`
$DIR/core/cmd/admin_commands_test.go: `.NewShellAndRenderer()`
$DIR/core/cmd/admin_commands_test.go: `.Sprintf(`user with email %s already exists`, cltest.APIEmailAdmin)`
$DIR/core/cmd/admin_commands_test.go: `.MustRandomUser(t)`
$DIR/core/cmd/admin_commands_test.go: `.Run(test.name, func(t *testing.T) {
set := flag.NewFlagSet("test", 0)
flagSetApplyFromAction(client.CreateUser, set, "")
require.NoError(t, set.Set("email", test.email))
require.NoError(t, set.Set("role", test.role))
c := cli.NewContext(nil, set, nil)
if test.err != "" {
assert.ErrorContains(t, client.CreateUser(c), test.err)
} else {
assert.NoError(t, client.CreateUser(c))
}
})`
$DIR/core/cmd/admin_commands_test.go: `.NewFlagSet("test", 0)`
$DIR/core/cmd/admin_commands_test.go: `.NewContext(nil, set, nil)`
$DIR/core/cmd/admin_commands_test.go: `.Context(t)`
$DIR/core/cmd/admin_commands_test.go: `.NewShellAndRenderer()`
$DIR/core/cmd/admin_commands_test.go: `.MustRandomUser(t)`
$DIR/core/cmd/admin_commands_test.go: `.MustRandomUser(t)`
$DIR/core/cmd/admin_commands_test.go: `.Run(test.name, func(t *testing.T) {
set := flag.NewFlagSet("test", 0)
flagSetApplyFromAction(client.ChangeRole, set, "")
require.NoError(t, set.Set("email", test.email))
require.NoError(t, set.Set("new-role", test.role))
c := cli.NewContext(nil, set, nil)
if test.err != "" {
assert.ErrorContains(t, client.ChangeRole(c), test.err)
} else {
assert.NoError(t, client.ChangeRole(c))
}
})`
$DIR/core/cmd/admin_commands_test.go: `.NewFlagSet("test", 0)`
$DIR/core/cmd/admin_commands_test.go: `.NewContext(nil, set, nil)`
$DIR/core/cmd/admin_commands_test.go: `.Context(t)`
$DIR/core/cmd/admin_commands_test.go: `.NewShellAndRenderer()`
$DIR/core/cmd/admin_commands_test.go: `.MustRandomUser(t)`
$DIR/core/cmd/admin_commands_test.go: `.Run(test.name, func(t *testing.T) {
set := flag.NewFlagSet("test", 0)
flagSetApplyFromAction(client.DeleteUser, set, "")
require.NoError(t, set.Set("email", test.email))
c := cli.NewContext(nil, set, nil)
if test.err != "" {
assert.ErrorContains(t, client.DeleteUser(c), test.err)
} else {
assert.NoError(t, client.DeleteUser(c))
}
})`
$DIR/core/cmd/admin_commands_test.go: `.NewFlagSet("test", 0)`
$DIR/core/cmd/admin_commands_test.go: `.NewContext(nil, set, nil)`
$DIR/core/cmd/admin_commands_test.go: `.Context(t)`
$DIR/core/cmd/admin_commands_test.go: `.NewShellAndRenderer()`
$DIR/core/cmd/admin_commands_test.go: `.MustRandomUser(t)`
$DIR/core/cmd/admin_commands_test.go: `.NewFlagSet("test", 0)`
$DIR/core/cmd/admin_commands_test.go: `.NewContext(nil, set, nil)`
$DIR/core/cmd/admin_commands_test.go: `.ParseBool(presenter.HasActiveApiToken)`
$DIR/core/cmd/admin_commands_test.go: `.Now()`
$DIR/core/cmd/admin_commands_test.go: `.StringFrom("tokenKey")`
$DIR/core/cmd/admin_commands_test.go: `.Now()`
$DIR/core/cmd/admin_commands_test.go: `.Add(time.Duration(rand.Intn(10000)) * time.Second)`
$DIR/core/cmd/admin_commands_test.go: `.Duration(rand.Intn(10000))`
$DIR/core/cmd/admin_commands_test.go: `.Intn(10000)`
$DIR/core/cmd/admin_commands_test.go: `.NewBufferString("")`
$DIR/core/cmd/admin_commands_test.go: `.String()`
$DIR/core/cmd/admin_commands_test.go: `.UpdatedAt.String()`
$DIR/core/cmd/app_test.go: `t.Run(tt.name, func(t *testing.T) {
if tt.args.envVar != "" {
t.Setenv(string(env.Config), tt.args.envVar)
}
cfg, err := initServerConfig(tt.args.opts, tt.args.fileNames, tt.args.secretsFiles)
if (err != nil) != tt.wantErr {
t.Errorf("loadOpts() error = %v, wantErr %v", err, tt.wantErr)
}
if tt.wantCfg != nil {
assert.Equal(t, tt.wantCfg, cfg)
}
})`
$DIR/core/cmd/app_test.go: `t.Setenv(string(env.Config), tt.args.envVar)`
$DIR/core/cmd/app_test.go: `.WriteTOMLFile(t, testConfigFileContents, "test.toml")`
$DIR/core/cmd/app_test.go: `.WriteTOMLFile(t, testConfigFileContents, "test.toml")`
$DIR/core/cmd/app_test.go: `.WriteTOMLFile(t, testConfigFileContents, "test.toml")`
$DIR/core/cmd/app_test.go: `.WriteTOMLFile(t, testConfigFileContents, "test.toml")`
$DIR/core/cmd/app_test.go: `.WriteTOMLFile(t, testSecretsFileContents, "test_secrets.toml")`
$DIR/core/cmd/app_test.go: `.WriteTOMLFile(t, testConfigFileContents, "test.toml")`
$DIR/core/cmd/app_test.go: `.WriteTOMLFile(t, testConfigFileContents, "test.toml")`
$DIR/core/cmd/app_test.go: `.WriteTOMLFile(t, testConfigFileContents, "test.toml")`
$DIR/core/cmd/app_test.go: `.WriteTOMLFile(t, testConfigFileContents, "test.toml")`
$DIR/core/cmd/app_test.go: `.WriteTOMLFile(t, testConfigFileContents, "test.toml")`
$DIR/core/cmd/app_test.go: `.WriteTOMLFile(t, testConfigFileContents, "test.toml")`
$DIR/core/cmd/app_test.go: `.WriteTOMLFile(t, testConfigFileContents, "test.toml")`
$DIR/core/cmd/app_test.go: `.Run(tt.name, func(t *testing.T) {
if tt.args.envVar != "" {
t.Setenv(string(env.Config), tt.args.envVar)
}
cfg, err := initServerConfig(tt.args.opts, tt.args.fileNames, tt.args.secretsFiles)
if (err != nil) != tt.wantErr {
t.Errorf("loadOpts() error = %v, wantErr %v", err, tt.wantErr)
}
if tt.wantCfg != nil {
assert.Equal(t, tt.wantCfg, cfg)
}
})`
$DIR/core/cmd/app_test.go: `.Setenv(string(env.Config), tt.args.envVar)`
$DIR/core/cmd/blocks_commands_test.go: `c.EVM[0].ChainID = (*ubig.Big)(big.NewInt(5))`
$DIR/core/cmd/blocks_commands_test.go: `c.EVM[0].Enabled = ptr(true)`
$DIR/core/cmd/blocks_commands_test.go: `flagSetApplyFromAction(client.ReplayFromBlock, set, "")`
$DIR/core/cmd/blocks_commands_test.go: `c = cli.NewContext(nil, set, nil)`
$DIR/core/cmd/blocks_commands_test.go: `c = cli.NewContext(nil, set, nil)`
$DIR/core/cmd/blocks_commands_test.go: `c.EVM[0].ChainID = (*ubig.Big)(big.NewInt(5))`
$DIR/core/cmd/blocks_commands_test.go: `c.EVM[0].Enabled = ptr(true)`
$DIR/core/cmd/blocks_commands_test.go: `flagSetApplyFromAction(client.FindLCA, set, "")`
$DIR/core/cmd/blocks_commands_test.go: `c = cli.NewContext(nil, set, nil)`
$DIR/core/cmd/blocks_commands_test.go: `.NewInt(5)`
$DIR/core/cmd/blocks_commands_test.go: `.NewShellAndRenderer()`
$DIR/core/cmd/blocks_commands_test.go: `.NewFlagSet("test", 0)`
$DIR/core/cmd/blocks_commands_test.go: `.NewContext(nil, set, nil)`
$DIR/core/cmd/blocks_commands_test.go: `.NewContext(nil, set, nil)`
$DIR/core/cmd/blocks_commands_test.go: `.NewContext(nil, set, nil)`
$DIR/core/cmd/blocks_commands_test.go: `.ReplayFromBlock(c)`
$DIR/core/cmd/blocks_commands_test.go: `.NewInt(5)`
$DIR/core/cmd/blocks_commands_test.go: `.NewShellAndRenderer()`
$DIR/core/cmd/blocks_commands_test.go: `.NewFlagSet("test", 0)`
$DIR/core/cmd/blocks_commands_test.go: `.NewContext(nil, set, nil)`
$DIR/core/cmd/blocks_commands_test.go: `.NewContext(nil, set, nil)`
$DIR/core/cmd/blocks_commands_test.go: `.FindLCA(c)`
$DIR/core/cmd/bridge_commands_test.go: `buffer.Reset()`
$DIR/core/cmd/bridge_commands_test.go: `output = buffer.String()`
$DIR/core/cmd/bridge_commands_test.go: `err = app.BridgeORM().CreateBridgeType(ctx, bt2)`
$DIR/core/cmd/bridge_commands_test.go: `p = bridges[1]`
$DIR/core/cmd/bridge_commands_test.go: `flagSetApplyFromAction(client.ShowBridge, set, "")`
$DIR/core/cmd/bridge_commands_test.go: `t.Run(test.name, func(t *testing.T) {
set := flag.NewFlagSet("bridge", 0)
flagSetApplyFromAction(client.CreateBridge, set, "")
require.NoError(t, set.Parse([]string{test.param}))
c := cli.NewContext(nil, set, nil)
if test.errored {
assert.Error(t, client.CreateBridge(c))
} else {
assert.Nil(t, client.CreateBridge(c))
}
})`
$DIR/core/cmd/bridge_commands_test.go: `flagSetApplyFromAction(client.CreateBridge, set, "")`
$DIR/core/cmd/bridge_commands_test.go: `flagSetApplyFromAction(client.RemoveBridge, set, "")`
$DIR/core/cmd/bridge_commands_test.go: `.Now()`
$DIR/core/cmd/bridge_commands_test.go: `.NewBufferString("")`
$DIR/core/cmd/bridge_commands_test.go: `.NewJAID(name)`
$DIR/core/cmd/bridge_commands_test.go: `.String()`
$DIR/core/cmd/bridge_commands_test.go: `.Reset()`
$DIR/core/cmd/bridge_commands_test.go: `.String()`
$DIR/core/cmd/bridge_commands_test.go: `.Context(t)`
$DIR/core/cmd/bridge_commands_test.go: `.NewShellAndRenderer()`
$DIR/core/cmd/bridge_commands_test.go: `.MustParseBridgeName("cliindexbridges1")`
$DIR/core/cmd/bridge_commands_test.go: `.WebURL(t, "https://testing.com/bridges")`
$DIR/core/cmd/bridge_commands_test.go: `.BridgeORM()`
$DIR/core/cmd/bridge_commands_test.go: `.CreateBridgeType(ctx, bt1)`
$DIR/core/cmd/bridge_commands_test.go: `.MustParseBridgeName("cliindexbridges2")`
$DIR/core/cmd/bridge_commands_test.go: `.WebURL(t, "https://testing.com/bridges")`
$DIR/core/cmd/bridge_commands_test.go: `.BridgeORM()`
$DIR/core/cmd/bridge_commands_test.go: `.CreateBridgeType(ctx, bt2)`
$DIR/core/cmd/bridge_commands_test.go: `.NewShellAndRenderer()`
$DIR/core/cmd/bridge_commands_test.go: `.MustParseBridgeName(testutils.RandomizeName("showbridge"))`
$DIR/core/cmd/bridge_commands_test.go: `.RandomizeName("showbridge")`
$DIR/core/cmd/bridge_commands_test.go: `.WebURL(t, "https://testing.com/bridges")`
$DIR/core/cmd/bridge_commands_test.go: `.NewFlagSet("test", 0)`
$DIR/core/cmd/bridge_commands_test.go: `.NewContext(nil, set, nil)`
$DIR/core/cmd/bridge_commands_test.go: `.NewShellAndRenderer()`
$DIR/core/cmd/bridge_commands_test.go: `.Run(test.name, func(t *testing.T) {
set := flag.NewFlagSet("bridge", 0)
flagSetApplyFromAction(client.CreateBridge, set, "")
require.NoError(t, set.Parse([]string{test.param}))
c := cli.NewContext(nil, set, nil)
if test.errored {
assert.Error(t, client.CreateBridge(c))
} else {
assert.Nil(t, client.CreateBridge(c))
}
})`
$DIR/core/cmd/bridge_commands_test.go: `.NewFlagSet("bridge", 0)`
$DIR/core/cmd/bridge_commands_test.go: `.NewContext(nil, set, nil)`
$DIR/core/cmd/bridge_commands_test.go: `.NewShellAndRenderer()`
$DIR/core/cmd/bridge_commands_test.go: `.MustParseBridgeName(testutils.RandomizeName("removebridge"))`
$DIR/core/cmd/bridge_commands_test.go: `.RandomizeName("removebridge")`
$DIR/core/cmd/bridge_commands_test.go: `.WebURL(t, "https://testing.com/bridges")`
$DIR/core/cmd/bridge_commands_test.go: `.BridgeORM()`
$DIR/core/cmd/bridge_commands_test.go: `.CreateBridgeType(testutils.Context(t), bt)`
$DIR/core/cmd/bridge_commands_test.go: `.Context(t)`
$DIR/core/cmd/bridge_commands_test.go: `.NewFlagSet("test", 0)`
$DIR/core/cmd/bridge_commands_test.go: `.NewContext(nil, set, nil)`
$DIR/core/cmd/cosmos_chains_commands_test.go: `.RandomChainID()`
$DIR/core/cmd/cosmos_chains_commands_test.go: `.NewShellAndRenderer()`
$DIR/core/cmd/cosmos_keys_commands_test.go: `buffer.Reset()`
$DIR/core/cmd/cosmos_keys_commands_test.go: `output = buffer.String()`
$DIR/core/cmd/cosmos_keys_commands_test.go: `requireCosmosKeyCount(t, app, 0)`
$DIR/core/cmd/cosmos_keys_commands_test.go: `t.Run("ListCosmosKeys", func(tt *testing.T) {
defer cleanup()
ctx := testutils.Context(t)
client, r := app.NewShellAndRenderer()
key, err := app.GetKeyStore().Cosmos().Create(ctx)
require.NoError(t, err)
requireCosmosKeyCount(t, app, 1)
assert.Nil(t, cmd.NewCosmosKeysClient(client).ListKeys(cltest.EmptyCLIContext()))
require.Equal(t, 1, len(r.Renders))
keys := *r.Renders[0].(*cmd.CosmosKeyPresenters)
assert.True(t, key.PublicKeyStr() == keys[0].PubKey)
})`
$DIR/core/cmd/cosmos_keys_commands_test.go: `requireCosmosKeyCount(t, app, 1)`
$DIR/core/cmd/cosmos_keys_commands_test.go: `t.Run("CreateCosmosKey", func(tt *testing.T) {
defer cleanup()
client, _ := app.NewShellAndRenderer()
require.NoError(t, cmd.NewCosmosKeysClient(client).CreateKey(nilContext))
keys, err := app.GetKeyStore().Cosmos().GetAll()
require.NoError(t, err)
require.Len(t, keys, 1)
})`
$DIR/core/cmd/cosmos_keys_commands_test.go: `t.Run("DeleteCosmosKey", func(tt *testing.T) {
defer cleanup()
ctx := testutils.Context(t)
client, _ := app.NewShellAndRenderer()
key, err := app.GetKeyStore().Cosmos().Create(ctx)
require.NoError(t, err)
requireCosmosKeyCount(t, app, 1)
set := flag.NewFlagSet("test", 0)
flagSetApplyFromAction(cmd.NewCosmosKeysClient(client).DeleteKey, set, "cosmos")
strID := key.ID()
require.NoError(tt, set.Set("yes", "true"))
require.NoError(tt, set.Parse([]string{strID}))
c := cli.NewContext(nil, set, nil)
err = cmd.NewCosmosKeysClient(client).DeleteKey(c)
require.NoError(t, err)
requireCosmosKeyCount(t, app, 0)
})`
$DIR/core/cmd/cosmos_keys_commands_test.go: `requireCosmosKeyCount(t, app, 1)`
$DIR/core/cmd/cosmos_keys_commands_test.go: `flagSetApplyFromAction(cmd.NewCosmosKeysClient(client).DeleteKey, set, "cosmos")`
$DIR/core/cmd/cosmos_keys_commands_test.go: `err = cmd.NewCosmosKeysClient(client).DeleteKey(c)`
$DIR/core/cmd/cosmos_keys_commands_test.go: `requireCosmosKeyCount(t, app, 0)`
$DIR/core/cmd/cosmos_keys_commands_test.go: `flagSetApplyFromAction(cmd.NewCosmosKeysClient(client).ExportKey, set, "cosmos")`
$DIR/core/cmd/cosmos_keys_commands_test.go: `err = tclient.ExportKey(c)`
$DIR/core/cmd/cosmos_keys_commands_test.go: `set = flag.NewFlagSet("test Cosmos export", 0)`
$DIR/core/cmd/cosmos_keys_commands_test.go: `flagSetApplyFromAction(cmd.NewCosmosKeysClient(client).ExportKey, set, "cosmos")`
$DIR/core/cmd/cosmos_keys_commands_test.go: `c = cli.NewContext(nil, set, nil)`
$DIR/core/cmd/cosmos_keys_commands_test.go: `requireCosmosKeyCount(t, app, 0)`
$DIR/core/cmd/cosmos_keys_commands_test.go: `set = flag.NewFlagSet("test Cosmos import", 0)`
$DIR/core/cmd/cosmos_keys_commands_test.go: `flagSetApplyFromAction(cmd.NewCosmosKeysClient(client).ImportKey, set, "cosmos")`
$DIR/core/cmd/cosmos_keys_commands_test.go: `c = cli.NewContext(nil, set, nil)`
$DIR/core/cmd/cosmos_keys_commands_test.go: `requireCosmosKeyCount(t, app, 1)`
$DIR/core/cmd/cosmos_keys_commands_test.go: `.NewBufferString("")`
$DIR/core/cmd/cosmos_keys_commands_test.go: `.NewJAID(id)`
$DIR/core/cmd/cosmos_keys_commands_test.go: `.String()`
$DIR/core/cmd/cosmos_keys_commands_test.go: `.Reset()`
$DIR/core/cmd/cosmos_keys_commands_test.go: `.String()`
$DIR/core/cmd/cosmos_keys_commands_test.go: `.GetKeyStore()`
$DIR/core/cmd/cosmos_keys_commands_test.go: `.Cosmos()`
$DIR/core/cmd/cosmos_keys_commands_test.go: `.Background()`
$DIR/core/cmd/cosmos_keys_commands_test.go: `.GetAll()`
$DIR/core/cmd/cosmos_keys_commands_test.go: `.Run("ListCosmosKeys", func(tt *testing.T) {
defer cleanup()
ctx := testutils.Context(t)
client, r := app.NewShellAndRenderer()
key, err := app.GetKeyStore().Cosmos().Create(ctx)
require.NoError(t, err)
requireCosmosKeyCount(t, app, 1)
assert.Nil(t, cmd.NewCosmosKeysClient(client).ListKeys(cltest.EmptyCLIContext()))
require.Equal(t, 1, len(r.Renders))
keys := *r.Renders[0].(*cmd.CosmosKeyPresenters)
assert.True(t, key.PublicKeyStr() == keys[0].PubKey)
})`
$DIR/core/cmd/cosmos_keys_commands_test.go: `.Context(t)`
$DIR/core/cmd/cosmos_keys_commands_test.go: `.NewShellAndRenderer()`
$DIR/core/cmd/cosmos_keys_commands_test.go: `.GetKeyStore()`
$DIR/core/cmd/cosmos_keys_commands_test.go: `.Cosmos()`
$DIR/core/cmd/cosmos_keys_commands_test.go: `.Create(ctx)`
$DIR/core/cmd/cosmos_keys_commands_test.go: `.Run("CreateCosmosKey", func(tt *testing.T) {
defer cleanup()
client, _ := app.NewShellAndRenderer()
require.NoError(t, cmd.NewCosmosKeysClient(client).CreateKey(nilContext))
keys, err := app.GetKeyStore().Cosmos().GetAll()
require.NoError(t, err)
require.Len(t, keys, 1)
})`
$DIR/core/cmd/cosmos_keys_commands_test.go: `.NewShellAndRenderer()`
$DIR/core/cmd/cosmos_keys_commands_test.go: `.GetKeyStore()`
$DIR/core/cmd/cosmos_keys_commands_test.go: `.Cosmos()`
$DIR/core/cmd/cosmos_keys_commands_test.go: `.GetAll()`
$DIR/core/cmd/cosmos_keys_commands_test.go: `.Run("DeleteCosmosKey", func(tt *testing.T) {
defer cleanup()
ctx := testutils.Context(t)
client, _ := app.NewShellAndRenderer()
key, err := app.GetKeyStore().Cosmos().Create(ctx)
require.NoError(t, err)
requireCosmosKeyCount(t, app, 1)
set := flag.NewFlagSet("test", 0)
flagSetApplyFromAction(cmd.NewCosmosKeysClient(client).DeleteKey, set, "cosmos")
strID := key.ID()
require.NoError(tt, set.Set("yes", "true"))
require.NoError(tt, set.Parse([]string{strID}))
c := cli.NewContext(nil, set, nil)
err = cmd.NewCosmosKeysClient(client).DeleteKey(c)
require.NoError(t, err)
requireCosmosKeyCount(t, app, 0)
})`
$DIR/core/cmd/cosmos_keys_commands_test.go: `.Context(t)`
$DIR/core/cmd/cosmos_keys_commands_test.go: `.NewShellAndRenderer()`
$DIR/core/cmd/cosmos_keys_commands_test.go: `.GetKeyStore()`
$DIR/core/cmd/cosmos_keys_commands_test.go: `.Cosmos()`
$DIR/core/cmd/cosmos_keys_commands_test.go: `.Create(ctx)`
$DIR/core/cmd/cosmos_keys_commands_test.go: `.NewFlagSet("test", 0)`
$DIR/core/cmd/cosmos_keys_commands_test.go: `.NewCosmosKeysClient(client)`
$DIR/core/cmd/cosmos_keys_commands_test.go: `.ID()`
$DIR/core/cmd/cosmos_keys_commands_test.go: `.NewContext(nil, set, nil)`
$DIR/core/cmd/cosmos_keys_commands_test.go: `.NewCosmosKeysClient(client)`
$DIR/core/cmd/cosmos_keys_commands_test.go: `.DeleteKey(c)`
$DIR/core/cmd/cosmos_keys_commands_test.go: `.Context(t)`
$DIR/core/cmd/cosmos_keys_commands_test.go: `.NewShellAndRenderer()`
$DIR/core/cmd/cosmos_keys_commands_test.go: `.GetKeyStore()`
$DIR/core/cmd/cosmos_keys_commands_test.go: `.Cosmos()`
$DIR/core/cmd/cosmos_keys_commands_test.go: `.Create(ctx)`
$DIR/core/cmd/cosmos_keys_commands_test.go: `.NewFlagSet("test Cosmos export", 0)`
$DIR/core/cmd/cosmos_keys_commands_test.go: `.NewCosmosKeysClient(client)`
$DIR/core/cmd/cosmos_keys_commands_test.go: `.NewContext(nil, set, nil)`
$DIR/core/cmd/cosmos_keys_commands_test.go: `.NewCosmosKeysClient(client)`
$DIR/core/cmd/cosmos_keys_commands_test.go: `.ExportKey(c)`
$DIR/core/cmd/cosmos_keys_commands_test.go: `.NewFlagSet("test Cosmos export", 0)`
$DIR/core/cmd/cosmos_keys_commands_test.go: `.NewCosmosKeysClient(client)`
$DIR/core/cmd/cosmos_keys_commands_test.go: `.NewContext(nil, set, nil)`
$DIR/core/cmd/cosmos_keys_commands_test.go: `.NewFlagSet("test Cosmos import", 0)`
$DIR/core/cmd/cosmos_keys_commands_test.go: `.NewCosmosKeysClient(client)`
$DIR/core/cmd/cosmos_keys_commands_test.go: `.NewContext(nil, set, nil)`
$DIR/core/cmd/cosmos_node_commands_test.go: `assertTableRenders(t, r)`
$DIR/core/cmd/cosmos_node_commands_test.go: `.RandomChainID()`
$DIR/core/cmd/cosmos_node_commands_test.go: `.MustParseURL("http://tender.mint.test/bombay-12")`
$DIR/core/cmd/cosmos_node_commands_test.go: `.NewShellAndRenderer()`
$DIR/core/cmd/cosmos_node_commands_test.go: `.Marshal(node)`
$DIR/core/cmd/cosmos_node_commands_test.go: `.Split(b.String(), "\n")`
$DIR/core/cmd/cosmos_node_commands_test.go: `.String()`
$DIR/core/cmd/cosmos_transaction_commands_test.go: `params.InitCosmosSdk(
/* bech32Prefix= */ "wasm",
/* token= */ nativeToken,
)`
$DIR/core/cmd/cosmos_transaction_commands_test.go: `cosmosChain.SetDefaults()`
$DIR/core/cmd/cosmos_transaction_commands_test.go: `t.Run(tt.amount, func(t *testing.T) {
startBal, err := reader.Balance(from.Address, *cosmosChain.GasToken)
require.NoError(t, err)
set := flag.NewFlagSet("sendcosmoscoins", 0)
flagSetApplyFromAction(client.CosmosSendNativeToken, set, "cosmos")
require.NoError(t, set.Set("id", chainID))
require.NoError(t, set.Parse([]string{nativeToken, tt.amount, from.Address.String(), to.Address.String()}))
c := cli.NewContext(cliapp, set, nil)
err = client.CosmosSendNativeToken(c)
if tt.expErr == "" {
require.NoError(t, err)
} else {
require.Error(t, err)
require.Contains(t, err.Error(), tt.expErr)
return
}
// Check CLI output
require.Greater(t, len(r.Renders), 0)
renderer := r.Renders[len(r.Renders)-1]
renderedMsg := renderer.(*cmd.CosmosMsgPresenter)
require.NotEmpty(t, renderedMsg.ID)
assert.Equal(t, string(cosmosdb.Unstarted), renderedMsg.State)
assert.Nil(t, renderedMsg.TxHash)
// Check balance
sent, err := denom.ConvertDecCoinToDenom(sdk.NewDecCoinFromDec(nativeToken, sdk.MustNewDecFromStr(tt.amount)), *cosmosChain.GasToken)
require.NoError(t, err)
expBal := startBal.Sub(sent)
testutils.AssertEventually(t, func() bool {
endBal, err := reader.Balance(from.Address, *cosmosChain.GasToken)
require.NoError(t, err)
t.Logf("%s <= %s", endBal, expBal)
return endBal.IsLTE(expBal)
})
})`
$DIR/core/cmd/cosmos_transaction_commands_test.go: `flagSetApplyFromAction(client.CosmosSendNativeToken, set, "cosmos")`
$DIR/core/cmd/cosmos_transaction_commands_test.go: `err = client.CosmosSendNativeToken(c)`
$DIR/core/cmd/cosmos_transaction_commands_test.go: `testutils.AssertEventually(t, func() bool {
endBal, err := reader.Balance(from.Address, *cosmosChain.GasToken)
require.NoError(t, err)
t.Logf("%s <= %s", endBal, expBal)
return endBal.IsLTE(expBal)
})`
$DIR/core/cmd/cosmos_transaction_commands_test.go: `.InitCosmosSdk(
/* bech32Prefix= */ "wasm",
/* token= */ nativeToken,
)`
$DIR/core/cmd/cosmos_transaction_commands_test.go: `.Run()`
$DIR/core/cmd/cosmos_transaction_commands_test.go: `.Context(t)`
$DIR/core/cmd/cosmos_transaction_commands_test.go: `.RandomChainID()`
$DIR/core/cmd/cosmos_transaction_commands_test.go: `.SetDefaults()`
$DIR/core/cmd/cosmos_transaction_commands_test.go: `.SetupLocalCosmosNode(t, chainID, *cosmosChain.GasToken)`
$DIR/core/cmd/cosmos_transaction_commands_test.go: `.MustParseURL(url)`
$DIR/core/cmd/cosmos_transaction_commands_test.go: `.GetRelayers()`
$DIR/core/cmd/cosmos_transaction_commands_test.go: `.LegacyCosmosChains()`
$DIR/core/cmd/cosmos_transaction_commands_test.go: `.Get(chainID)`
$DIR/core/cmd/cosmos_transaction_commands_test.go: `.Reader("")`
$DIR/core/cmd/cosmos_transaction_commands_test.go: `.NewShellAndRenderer()`
$DIR/core/cmd/cosmos_transaction_commands_test.go: `.NewApp()`
$DIR/core/cmd/cosmos_transaction_commands_test.go: `.Run(tt.amount, func(t *testing.T) {
startBal, err := reader.Balance(from.Address, *cosmosChain.GasToken)
require.NoError(t, err)
set := flag.NewFlagSet("sendcosmoscoins", 0)
flagSetApplyFromAction(client.CosmosSendNativeToken, set, "cosmos")
require.NoError(t, set.Set("id", chainID))
require.NoError(t, set.Parse([]string{nativeToken, tt.amount, from.Address.String(), to.Address.String()}))
c := cli.NewContext(cliapp, set, nil)
err = client.CosmosSendNativeToken(c)
if tt.expErr == "" {
require.NoError(t, err)
} else {
require.Error(t, err)
require.Contains(t, err.Error(), tt.expErr)
return
}
// Check CLI output
require.Greater(t, len(r.Renders), 0)
renderer := r.Renders[len(r.Renders)-1]
renderedMsg := renderer.(*cmd.CosmosMsgPresenter)
require.NotEmpty(t, renderedMsg.ID)
assert.Equal(t, string(cosmosdb.Unstarted), renderedMsg.State)
assert.Nil(t, renderedMsg.TxHash)
// Check balance
sent, err := denom.ConvertDecCoinToDenom(sdk.NewDecCoinFromDec(nativeToken, sdk.MustNewDecFromStr(tt.amount)), *cosmosChain.GasToken)
require.NoError(t, err)
expBal := startBal.Sub(sent)
testutils.AssertEventually(t, func() bool {
endBal, err := reader.Balance(from.Address, *cosmosChain.GasToken)
require.NoError(t, err)
t.Logf("%s <= %s", endBal, expBal)
return endBal.IsLTE(expBal)
})
})`
$DIR/core/cmd/cosmos_transaction_commands_test.go: `.Balance(from.Address, *cosmosChain.GasToken)`
$DIR/core/cmd/cosmos_transaction_commands_test.go: `.NewFlagSet("sendcosmoscoins", 0)`
$DIR/core/cmd/cosmos_transaction_commands_test.go: `.NewContext(cliapp, set, nil)`
$DIR/core/cmd/cosmos_transaction_commands_test.go: `.CosmosSendNativeToken(c)`
$DIR/core/cmd/cosmos_transaction_commands_test.go: `.ConvertDecCoinToDenom(sdk.NewDecCoinFromDec(nativeToken, sdk.MustNewDecFromStr(tt.amount)), *cosmosChain.GasToken)`
$DIR/core/cmd/cosmos_transaction_commands_test.go: `.NewDecCoinFromDec(nativeToken, sdk.MustNewDecFromStr(tt.amount))`
$DIR/core/cmd/cosmos_transaction_commands_test.go: `.MustNewDecFromStr(tt.amount)`
$DIR/core/cmd/cosmos_transaction_commands_test.go: `.Sub(sent)`
$DIR/core/cmd/cosmos_transaction_commands_test.go: `.AssertEventually(t, func() bool {
endBal, err := reader.Balance(from.Address, *cosmosChain.GasToken)
require.NoError(t, err)
t.Logf("%s <= %s", endBal, expBal)
return endBal.IsLTE(expBal)
})`
$DIR/core/cmd/cosmos_transaction_commands_test.go: `.Balance(from.Address, *cosmosChain.GasToken)`
$DIR/core/cmd/cosmos_transaction_commands_test.go: `.IsLTE(expBal)`
$DIR/core/cmd/csa_keys_commands_test.go: `buffer.Reset()`
$DIR/core/cmd/csa_keys_commands_test.go: `output = buffer.String()`
$DIR/core/cmd/csa_keys_commands_test.go: `requireCSAKeyCount(t, app, 1)`
$DIR/core/cmd/csa_keys_commands_test.go: `requireCSAKeyCount(t, app, 0)`
$DIR/core/cmd/csa_keys_commands_test.go: `flagSetApplyFromAction(client.ExportCSAKey, set, "")`
$DIR/core/cmd/csa_keys_commands_test.go: `err = client.ExportCSAKey(c)`
$DIR/core/cmd/csa_keys_commands_test.go: `set = flag.NewFlagSet("test CSA export", 0)`
$DIR/core/cmd/csa_keys_commands_test.go: `flagSetApplyFromAction(client.ExportCSAKey, set, "")`
$DIR/core/cmd/csa_keys_commands_test.go: `c = cli.NewContext(nil, set, nil)`
$DIR/core/cmd/csa_keys_commands_test.go: `requireCSAKeyCount(t, app, 0)`
$DIR/core/cmd/csa_keys_commands_test.go: `set = flag.NewFlagSet("test CSA import", 0)`
$DIR/core/cmd/csa_keys_commands_test.go: `flagSetApplyFromAction(client.ImportCSAKey, set, "")`
$DIR/core/cmd/csa_keys_commands_test.go: `c = cli.NewContext(nil, set, nil)`
$DIR/core/cmd/csa_keys_commands_test.go: `.NewBufferString("")`
$DIR/core/cmd/csa_keys_commands_test.go: `.NewJAID(pubKey)`
$DIR/core/cmd/csa_keys_commands_test.go: `.String()`
$DIR/core/cmd/csa_keys_commands_test.go: `.Reset()`
$DIR/core/cmd/csa_keys_commands_test.go: `.String()`
$DIR/core/cmd/csa_keys_commands_test.go: `.Context(t)`
$DIR/core/cmd/csa_keys_commands_test.go: `.GetKeyStore()`
$DIR/core/cmd/csa_keys_commands_test.go: `.CSA()`
$DIR/core/cmd/csa_keys_commands_test.go: `.Create(ctx)`
$DIR/core/cmd/csa_keys_commands_test.go: `.NewShellAndRenderer()`
$DIR/core/cmd/csa_keys_commands_test.go: `.Sprintf("csa_%s", key.PublicKeyString())`
$DIR/core/cmd/csa_keys_commands_test.go: `.PublicKeyString()`
$DIR/core/cmd/csa_keys_commands_test.go: `.NewShellAndRenderer()`
$DIR/core/cmd/csa_keys_commands_test.go: `.Context(t)`
$DIR/core/cmd/csa_keys_commands_test.go: `.NewShellAndRenderer()`
$DIR/core/cmd/csa_keys_commands_test.go: `.GetKeyStore()`
$DIR/core/cmd/csa_keys_commands_test.go: `.CSA()`
$DIR/core/cmd/csa_keys_commands_test.go: `.Create(ctx)`
$DIR/core/cmd/csa_keys_commands_test.go: `.NewFlagSet("test CSA export", 0)`
$DIR/core/cmd/csa_keys_commands_test.go: `.NewContext(nil, set, nil)`
$DIR/core/cmd/csa_keys_commands_test.go: `.ExportCSAKey(c)`
$DIR/core/cmd/csa_keys_commands_test.go: `.NewFlagSet("test CSA export", 0)`
$DIR/core/cmd/csa_keys_commands_test.go: `.NewContext(nil, set, nil)`
$DIR/core/cmd/csa_keys_commands_test.go: `.NewFlagSet("test CSA import", 0)`
$DIR/core/cmd/csa_keys_commands_test.go: `.NewContext(nil, set, nil)`
$DIR/core/cmd/dkgencrypt_keys_commands_test.go: `buffer.Reset()`
$DIR/core/cmd/dkgencrypt_keys_commands_test.go: `output = buffer.String()`
$DIR/core/cmd/dkgencrypt_keys_commands_test.go: `requireDKGEncryptKeyCount(t, app, 0)`
$DIR/core/cmd/dkgencrypt_keys_commands_test.go: `t.Run("ListDKGEncryptKeys", func(tt *testing.T) {
defer cleanup()
ctx := testutils.Context(t)
client, r := app.NewShellAndRenderer()
key, err := app.GetKeyStore().DKGEncrypt().Create(ctx)
assert.NoError(tt, err)
requireDKGEncryptKeyCount(t, app, 1)
assert.Nil(t, cmd.NewDKGEncryptKeysClient(client).ListKeys(cltest.EmptyCLIContext()))
assert.Equal(t, 1, len(r.Renders))
keys := *r.Renders[0].(*cmd.DKGEncryptKeyPresenters)
assert.True(t, key.PublicKeyString() == keys[0].PublicKey)
})`
$DIR/core/cmd/dkgencrypt_keys_commands_test.go: `requireDKGEncryptKeyCount(t, app, 1)`
$DIR/core/cmd/dkgencrypt_keys_commands_test.go: `t.Run("CreateDKGEncryptKey", func(tt *testing.T) {
defer cleanup()
client, _ := app.NewShellAndRenderer()
assert.NoError(tt, cmd.NewDKGEncryptKeysClient(client).CreateKey(nilContext))
keys, err := app.GetKeyStore().DKGEncrypt().GetAll()
assert.NoError(tt, err)
assert.Len(t, keys, 1)
})`
$DIR/core/cmd/dkgencrypt_keys_commands_test.go: `t.Run("DeleteDKGEncryptKey", func(tt *testing.T) {
defer cleanup()
ctx := testutils.Context(t)
client, _ := app.NewShellAndRenderer()
key, err := app.GetKeyStore().DKGEncrypt().Create(ctx)
assert.NoError(tt, err)
requireDKGEncryptKeyCount(tt, app, 1)
set := flag.NewFlagSet("test", 0)
flagSetApplyFromAction(cmd.NewDKGEncryptKeysClient(client).DeleteKey, set, "")
require.NoError(tt, set.Set("yes", "true"))
strID := key.ID()
err = set.Parse([]string{strID})
require.NoError(t, err)
c := cli.NewContext(nil, set, nil)
err = cmd.NewDKGEncryptKeysClient(client).DeleteKey(c)
assert.NoError(tt, err)
requireDKGEncryptKeyCount(tt, app, 0)
})`
$DIR/core/cmd/dkgencrypt_keys_commands_test.go: `requireDKGEncryptKeyCount(tt, app, 1)`
$DIR/core/cmd/dkgencrypt_keys_commands_test.go: `flagSetApplyFromAction(cmd.NewDKGEncryptKeysClient(client).DeleteKey, set, "")`
$DIR/core/cmd/dkgencrypt_keys_commands_test.go: `err = set.Parse([]string{strID})`
$DIR/core/cmd/dkgencrypt_keys_commands_test.go: `err = cmd.NewDKGEncryptKeysClient(client).DeleteKey(c)`
$DIR/core/cmd/dkgencrypt_keys_commands_test.go: `requireDKGEncryptKeyCount(tt, app, 0)`
$DIR/core/cmd/dkgencrypt_keys_commands_test.go: `flagSetApplyFromAction(cmd.NewDKGEncryptKeysClient(client).ExportKey, set, "")`
$DIR/core/cmd/dkgencrypt_keys_commands_test.go: `err = cmd.NewDKGEncryptKeysClient(client).ExportKey(c)`
$DIR/core/cmd/dkgencrypt_keys_commands_test.go: `set = flag.NewFlagSet("test DKGEncrypt export", 0)`
$DIR/core/cmd/dkgencrypt_keys_commands_test.go: `flagSetApplyFromAction(cmd.NewDKGEncryptKeysClient(client).ExportKey, set, "")`
$DIR/core/cmd/dkgencrypt_keys_commands_test.go: `c = cli.NewContext(nil, set, nil)`
$DIR/core/cmd/dkgencrypt_keys_commands_test.go: `requireDKGEncryptKeyCount(tt, app, 0)`
$DIR/core/cmd/dkgencrypt_keys_commands_test.go: `set = flag.NewFlagSet("test DKGEncrypt import", 0)`
$DIR/core/cmd/dkgencrypt_keys_commands_test.go: `flagSetApplyFromAction(cmd.NewDKGEncryptKeysClient(client).ImportKey, set, "")`
$DIR/core/cmd/dkgencrypt_keys_commands_test.go: `c = cli.NewContext(nil, set, nil)`
$DIR/core/cmd/dkgencrypt_keys_commands_test.go: `requireDKGEncryptKeyCount(tt, app, 1)`
$DIR/core/cmd/dkgencrypt_keys_commands_test.go: `.NewBufferString("")`
$DIR/core/cmd/dkgencrypt_keys_commands_test.go: `.NewJAID(id)`
$DIR/core/cmd/dkgencrypt_keys_commands_test.go: `.String()`
$DIR/core/cmd/dkgencrypt_keys_commands_test.go: `.Reset()`
$DIR/core/cmd/dkgencrypt_keys_commands_test.go: `.String()`
$DIR/core/cmd/dkgencrypt_keys_commands_test.go: `.GetKeyStore()`
$DIR/core/cmd/dkgencrypt_keys_commands_test.go: `.DKGEncrypt()`
$DIR/core/cmd/dkgencrypt_keys_commands_test.go: `.Background()`
$DIR/core/cmd/dkgencrypt_keys_commands_test.go: `.GetAll()`
$DIR/core/cmd/dkgencrypt_keys_commands_test.go: `.Run("ListDKGEncryptKeys", func(tt *testing.T) {
defer cleanup()
ctx := testutils.Context(t)
client, r := app.NewShellAndRenderer()
key, err := app.GetKeyStore().DKGEncrypt().Create(ctx)
assert.NoError(tt, err)
requireDKGEncryptKeyCount(t, app, 1)
assert.Nil(t, cmd.NewDKGEncryptKeysClient(client).ListKeys(cltest.EmptyCLIContext()))
assert.Equal(t, 1, len(r.Renders))
keys := *r.Renders[0].(*cmd.DKGEncryptKeyPresenters)
assert.True(t, key.PublicKeyString() == keys[0].PublicKey)
})`
$DIR/core/cmd/dkgencrypt_keys_commands_test.go: `.Context(t)`
$DIR/core/cmd/dkgencrypt_keys_commands_test.go: `.NewShellAndRenderer()`
$DIR/core/cmd/dkgencrypt_keys_commands_test.go: `.GetKeyStore()`
$DIR/core/cmd/dkgencrypt_keys_commands_test.go: `.DKGEncrypt()`
$DIR/core/cmd/dkgencrypt_keys_commands_test.go: `.Create(ctx)`
$DIR/core/cmd/dkgencrypt_keys_commands_test.go: `.Run("CreateDKGEncryptKey", func(tt *testing.T) {
defer cleanup()
client, _ := app.NewShellAndRenderer()
assert.NoError(tt, cmd.NewDKGEncryptKeysClient(client).CreateKey(nilContext))
keys, err := app.GetKeyStore().DKGEncrypt().GetAll()
assert.NoError(tt, err)
assert.Len(t, keys, 1)
})`
$DIR/core/cmd/dkgencrypt_keys_commands_test.go: `.NewShellAndRenderer()`
$DIR/core/cmd/dkgencrypt_keys_commands_test.go: `.GetKeyStore()`
$DIR/core/cmd/dkgencrypt_keys_commands_test.go: `.DKGEncrypt()`
$DIR/core/cmd/dkgencrypt_keys_commands_test.go: `.GetAll()`
$DIR/core/cmd/dkgencrypt_keys_commands_test.go: `.Run("DeleteDKGEncryptKey", func(tt *testing.T) {
defer cleanup()
ctx := testutils.Context(t)
client, _ := app.NewShellAndRenderer()
key, err := app.GetKeyStore().DKGEncrypt().Create(ctx)
assert.NoError(tt, err)
requireDKGEncryptKeyCount(tt, app, 1)
set := flag.NewFlagSet("test", 0)
flagSetApplyFromAction(cmd.NewDKGEncryptKeysClient(client).DeleteKey, set, "")
require.NoError(tt, set.Set("yes", "true"))
strID := key.ID()
err = set.Parse([]string{strID})
require.NoError(t, err)
c := cli.NewContext(nil, set, nil)
err = cmd.NewDKGEncryptKeysClient(client).DeleteKey(c)
assert.NoError(tt, err)
requireDKGEncryptKeyCount(tt, app, 0)
})`
$DIR/core/cmd/dkgencrypt_keys_commands_test.go: `.Context(t)`
$DIR/core/cmd/dkgencrypt_keys_commands_test.go: `.NewShellAndRenderer()`
$DIR/core/cmd/dkgencrypt_keys_commands_test.go: `.GetKeyStore()`
$DIR/core/cmd/dkgencrypt_keys_commands_test.go: `.DKGEncrypt()`
$DIR/core/cmd/dkgencrypt_keys_commands_test.go: `.Create(ctx)`
$DIR/core/cmd/dkgencrypt_keys_commands_test.go: `.NewFlagSet("test", 0)`
$DIR/core/cmd/dkgencrypt_keys_commands_test.go: `.NewDKGEncryptKeysClient(client)`
$DIR/core/cmd/dkgencrypt_keys_commands_test.go: `.ID()`
$DIR/core/cmd/dkgencrypt_keys_commands_test.go: `.Parse([]string{strID})`
$DIR/core/cmd/dkgencrypt_keys_commands_test.go: `.NewContext(nil, set, nil)`
$DIR/core/cmd/dkgencrypt_keys_commands_test.go: `.NewDKGEncryptKeysClient(client)`
$DIR/core/cmd/dkgencrypt_keys_commands_test.go: `.DeleteKey(c)`
$DIR/core/cmd/dkgencrypt_keys_commands_test.go: `.Context(t)`
$DIR/core/cmd/dkgencrypt_keys_commands_test.go: `.NewShellAndRenderer()`
$DIR/core/cmd/dkgencrypt_keys_commands_test.go: `.GetKeyStore()`
$DIR/core/cmd/dkgencrypt_keys_commands_test.go: `.DKGEncrypt()`
$DIR/core/cmd/dkgencrypt_keys_commands_test.go: `.Create(ctx)`
$DIR/core/cmd/dkgencrypt_keys_commands_test.go: `.NewFlagSet("test DKGEncrypt export", 0)`
$DIR/core/cmd/dkgencrypt_keys_commands_test.go: `.NewDKGEncryptKeysClient(client)`
$DIR/core/cmd/dkgencrypt_keys_commands_test.go: `.NewContext(nil, set, nil)`
$DIR/core/cmd/dkgencrypt_keys_commands_test.go: `.NewDKGEncryptKeysClient(client)`
$DIR/core/cmd/dkgencrypt_keys_commands_test.go: `.ExportKey(c)`
$DIR/core/cmd/dkgencrypt_keys_commands_test.go: `.NewFlagSet("test DKGEncrypt export", 0)`
$DIR/core/cmd/dkgencrypt_keys_commands_test.go: `.NewDKGEncryptKeysClient(client)`
$DIR/core/cmd/dkgencrypt_keys_commands_test.go: `.NewContext(nil, set, nil)`
$DIR/core/cmd/dkgencrypt_keys_commands_test.go: `.NewFlagSet("test DKGEncrypt import", 0)`
$DIR/core/cmd/dkgencrypt_keys_commands_test.go: `.NewDKGEncryptKeysClient(client)`
$DIR/core/cmd/dkgencrypt_keys_commands_test.go: `.NewContext(nil, set, nil)`
$DIR/core/cmd/dkgsign_keys_commands_test.go: `buffer.Reset()`
$DIR/core/cmd/dkgsign_keys_commands_test.go: `output = buffer.String()`
$DIR/core/cmd/dkgsign_keys_commands_test.go: `requireDKGSignKeyCount(t, app, 0)`
$DIR/core/cmd/dkgsign_keys_commands_test.go: `t.Run("ListDKGSignKeys", func(tt *testing.T) {
defer cleanup()
ctx := testutils.Context(t)
client, r := app.NewShellAndRenderer()
key, err := app.GetKeyStore().DKGSign().Create(ctx)
assert.NoError(tt, err)
requireDKGSignKeyCount(t, app, 1)
assert.Nil(t, cmd.NewDKGSignKeysClient(client).ListKeys(cltest.EmptyCLIContext()))
assert.Equal(t, 1, len(r.Renders))
keys := *r.Renders[0].(*cmd.DKGSignKeyPresenters)
assert.True(t, key.PublicKeyString() == keys[0].PublicKey)
})`
$DIR/core/cmd/dkgsign_keys_commands_test.go: `requireDKGSignKeyCount(t, app, 1)`
$DIR/core/cmd/dkgsign_keys_commands_test.go: `t.Run("CreateDKGSignKey", func(tt *testing.T) {
defer cleanup()
client, _ := app.NewShellAndRenderer()
assert.NoError(tt, cmd.NewDKGSignKeysClient(client).CreateKey(nilContext))
keys, err := app.GetKeyStore().DKGSign().GetAll()
assert.NoError(tt, err)
assert.Len(t, keys, 1)
})`
$DIR/core/cmd/dkgsign_keys_commands_test.go: `t.Run("DeleteDKGSignKey", func(tt *testing.T) {
defer cleanup()
ctx := testutils.Context(t)
client, _ := app.NewShellAndRenderer()
key, err := app.GetKeyStore().DKGSign().Create(ctx)
assert.NoError(tt, err)
requireDKGSignKeyCount(tt, app, 1)
set := flag.NewFlagSet("test", 0)
flagSetApplyFromAction(cmd.NewDKGSignKeysClient(client).DeleteKey, set, "")
require.NoError(tt, set.Set("yes", "true"))
strID := key.ID()
err = set.Parse([]string{strID})
require.NoError(t, err)
c := cli.NewContext(nil, set, nil)
err = cmd.NewDKGSignKeysClient(client).DeleteKey(c)
assert.NoError(tt, err)
requireDKGSignKeyCount(tt, app, 0)
})`
$DIR/core/cmd/dkgsign_keys_commands_test.go: `requireDKGSignKeyCount(tt, app, 1)`
$DIR/core/cmd/dkgsign_keys_commands_test.go: `flagSetApplyFromAction(cmd.NewDKGSignKeysClient(client).DeleteKey, set, "")`
$DIR/core/cmd/dkgsign_keys_commands_test.go: `err = set.Parse([]string{strID})`
$DIR/core/cmd/dkgsign_keys_commands_test.go: `err = cmd.NewDKGSignKeysClient(client).DeleteKey(c)`
$DIR/core/cmd/dkgsign_keys_commands_test.go: `requireDKGSignKeyCount(tt, app, 0)`
$DIR/core/cmd/dkgsign_keys_commands_test.go: `flagSetApplyFromAction(cmd.NewDKGSignKeysClient(client).ExportKey, set, "")`
$DIR/core/cmd/dkgsign_keys_commands_test.go: `err = cmd.NewDKGSignKeysClient(client).ExportKey(c)`
$DIR/core/cmd/dkgsign_keys_commands_test.go: `set = flag.NewFlagSet("test DKGSign export", 0)`
$DIR/core/cmd/dkgsign_keys_commands_test.go: `flagSetApplyFromAction(cmd.NewDKGSignKeysClient(client).ExportKey, set, "")`
$DIR/core/cmd/dkgsign_keys_commands_test.go: `c = cli.NewContext(nil, set, nil)`
$DIR/core/cmd/dkgsign_keys_commands_test.go: `requireDKGSignKeyCount(tt, app, 0)`
$DIR/core/cmd/dkgsign_keys_commands_test.go: `set = flag.NewFlagSet("test DKGSign import", 0)`
$DIR/core/cmd/dkgsign_keys_commands_test.go: `flagSetApplyFromAction(cmd.NewDKGSignKeysClient(client).ImportKey, set, "")`
$DIR/core/cmd/dkgsign_keys_commands_test.go: `c = cli.NewContext(nil, set, nil)`
$DIR/core/cmd/dkgsign_keys_commands_test.go: `requireDKGSignKeyCount(tt, app, 1)`
$DIR/core/cmd/dkgsign_keys_commands_test.go: `.NewBufferString("")`
$DIR/core/cmd/dkgsign_keys_commands_test.go: `.NewJAID(id)`
$DIR/core/cmd/dkgsign_keys_commands_test.go: `.String()`
$DIR/core/cmd/dkgsign_keys_commands_test.go: `.Reset()`
$DIR/core/cmd/dkgsign_keys_commands_test.go: `.String()`
$DIR/core/cmd/dkgsign_keys_commands_test.go: `.GetKeyStore()`
$DIR/core/cmd/dkgsign_keys_commands_test.go: `.DKGSign()`
$DIR/core/cmd/dkgsign_keys_commands_test.go: `.Background()`
$DIR/core/cmd/dkgsign_keys_commands_test.go: `.GetAll()`
$DIR/core/cmd/dkgsign_keys_commands_test.go: `.Run("ListDKGSignKeys", func(tt *testing.T) {
defer cleanup()
ctx := testutils.Context(t)
client, r := app.NewShellAndRenderer()
key, err := app.GetKeyStore().DKGSign().Create(ctx)
assert.NoError(tt, err)
requireDKGSignKeyCount(t, app, 1)
assert.Nil(t, cmd.NewDKGSignKeysClient(client).ListKeys(cltest.EmptyCLIContext()))
assert.Equal(t, 1, len(r.Renders))
keys := *r.Renders[0].(*cmd.DKGSignKeyPresenters)
assert.True(t, key.PublicKeyString() == keys[0].PublicKey)
})`
$DIR/core/cmd/dkgsign_keys_commands_test.go: `.Context(t)`
$DIR/core/cmd/dkgsign_keys_commands_test.go: `.NewShellAndRenderer()`
$DIR/core/cmd/dkgsign_keys_commands_test.go: `.GetKeyStore()`
$DIR/core/cmd/dkgsign_keys_commands_test.go: `.DKGSign()`
$DIR/core/cmd/dkgsign_keys_commands_test.go: `.Create(ctx)`
$DIR/core/cmd/dkgsign_keys_commands_test.go: `.Run("CreateDKGSignKey", func(tt *testing.T) {
defer cleanup()
client, _ := app.NewShellAndRenderer()
assert.NoError(tt, cmd.NewDKGSignKeysClient(client).CreateKey(nilContext))
keys, err := app.GetKeyStore().DKGSign().GetAll()
assert.NoError(tt, err)
assert.Len(t, keys, 1)
})`
$DIR/core/cmd/dkgsign_keys_commands_test.go: `.NewShellAndRenderer()`
$DIR/core/cmd/dkgsign_keys_commands_test.go: `.GetKeyStore()`
$DIR/core/cmd/dkgsign_keys_commands_test.go: `.DKGSign()`
$DIR/core/cmd/dkgsign_keys_commands_test.go: `.GetAll()`
$DIR/core/cmd/dkgsign_keys_commands_test.go: `.Run("DeleteDKGSignKey", func(tt *testing.T) {
defer cleanup()
ctx := testutils.Context(t)
client, _ := app.NewShellAndRenderer()
key, err := app.GetKeyStore().DKGSign().Create(ctx)
assert.NoError(tt, err)
requireDKGSignKeyCount(tt, app, 1)
set := flag.NewFlagSet("test", 0)
flagSetApplyFromAction(cmd.NewDKGSignKeysClient(client).DeleteKey, set, "")
require.NoError(tt, set.Set("yes", "true"))
strID := key.ID()
err = set.Parse([]string{strID})
require.NoError(t, err)
c := cli.NewContext(nil, set, nil)
err = cmd.NewDKGSignKeysClient(client).DeleteKey(c)
assert.NoError(tt, err)
requireDKGSignKeyCount(tt, app, 0)
})`
$DIR/core/cmd/dkgsign_keys_commands_test.go: `.Context(t)`
$DIR/core/cmd/dkgsign_keys_commands_test.go: `.NewShellAndRenderer()`
$DIR/core/cmd/dkgsign_keys_commands_test.go: `.GetKeyStore()`
$DIR/core/cmd/dkgsign_keys_commands_test.go: `.DKGSign()`
$DIR/core/cmd/dkgsign_keys_commands_test.go: `.Create(ctx)`
$DIR/core/cmd/dkgsign_keys_commands_test.go: `.NewFlagSet("test", 0)`
$DIR/core/cmd/dkgsign_keys_commands_test.go: `.NewDKGSignKeysClient(client)`
$DIR/core/cmd/dkgsign_keys_commands_test.go: `.ID()`
$DIR/core/cmd/dkgsign_keys_commands_test.go: `.Parse([]string{strID})`
$DIR/core/cmd/dkgsign_keys_commands_test.go: `.NewContext(nil, set, nil)`
$DIR/core/cmd/dkgsign_keys_commands_test.go: `.NewDKGSignKeysClient(client)`
$DIR/core/cmd/dkgsign_keys_commands_test.go: `.DeleteKey(c)`
$DIR/core/cmd/dkgsign_keys_commands_test.go: `.Context(t)`
$DIR/core/cmd/dkgsign_keys_commands_test.go: `.NewShellAndRenderer()`
$DIR/core/cmd/dkgsign_keys_commands_test.go: `.GetKeyStore()`
$DIR/core/cmd/dkgsign_keys_commands_test.go: `.DKGSign()`
$DIR/core/cmd/dkgsign_keys_commands_test.go: `.Create(ctx)`
$DIR/core/cmd/dkgsign_keys_commands_test.go: `.NewFlagSet("test DKGSign export", 0)`
$DIR/core/cmd/dkgsign_keys_commands_test.go: `.NewDKGSignKeysClient(client)`
$DIR/core/cmd/dkgsign_keys_commands_test.go: `.NewContext(nil, set, nil)`
$DIR/core/cmd/dkgsign_keys_commands_test.go: `.NewDKGSignKeysClient(client)`
$DIR/core/cmd/dkgsign_keys_commands_test.go: `.ExportKey(c)`
$DIR/core/cmd/dkgsign_keys_commands_test.go: `.NewFlagSet("test DKGSign export", 0)`
$DIR/core/cmd/dkgsign_keys_commands_test.go: `.NewDKGSignKeysClient(client)`
$DIR/core/cmd/dkgsign_keys_commands_test.go: `.NewContext(nil, set, nil)`
$DIR/core/cmd/dkgsign_keys_commands_test.go: `.NewFlagSet("test DKGSign import", 0)`
$DIR/core/cmd/dkgsign_keys_commands_test.go: `.NewDKGSignKeysClient(client)`
$DIR/core/cmd/dkgsign_keys_commands_test.go: `.NewContext(nil, set, nil)`
$DIR/core/cmd/eth_keys_commands_test.go: `buffer.Reset()`
$DIR/core/cmd/eth_keys_commands_test.go: `output = buffer.String()`
$DIR/core/cmd/eth_keys_commands_test.go: `ethClient.On("BalanceAt", mock.Anything, mock.Anything, mock.Anything).Return(big.NewInt(42), nil)`
$DIR/core/cmd/eth_keys_commands_test.go: `ethClient.On("LINKBalance", mock.Anything, mock.Anything, mock.Anything).Return(commonassets.NewLinkFromJuels(13), nil)`
$DIR/core/cmd/eth_keys_commands_test.go: `ethClient.On("PendingNonceAt", mock.Anything, mock.Anything).Return(uint64(0), nil)`
$DIR/core/cmd/eth_keys_commands_test.go: `c.EVM[0].Enabled = ptr(true)`
$DIR/core/cmd/eth_keys_commands_test.go: `c.EVM[0].NonceAutoSync = ptr(false)`
$DIR/core/cmd/eth_keys_commands_test.go: `c.EVM[0].BalanceMonitor.Enabled = ptr(false)`
$DIR/core/cmd/eth_keys_commands_test.go: `ethClient.On("BalanceAt", mock.Anything, mock.Anything, mock.Anything).Return(nil, errors.New("fake error"))`
$DIR/core/cmd/eth_keys_commands_test.go: `ethClient.On("LINKBalance", mock.Anything, mock.Anything, mock.Anything).Return(nil, errors.New("fake error"))`
$DIR/core/cmd/eth_keys_commands_test.go: `ethClient.On("PendingNonceAt", mock.Anything, mock.Anything).Return(uint64(0), nil)`
$DIR/core/cmd/eth_keys_commands_test.go: `c.EVM[0].Enabled = ptr(true)`
$DIR/core/cmd/eth_keys_commands_test.go: `c.EVM[0].NonceAutoSync = ptr(false)`
$DIR/core/cmd/eth_keys_commands_test.go: `c.EVM[0].BalanceMonitor.Enabled = ptr(false)`
$DIR/core/cmd/eth_keys_commands_test.go: `c.EVM[0].Enabled = ptr(false)`
$DIR/core/cmd/eth_keys_commands_test.go: `ethClient.On("BalanceAt", mock.Anything, mock.Anything, mock.Anything).Return(big.NewInt(42), nil)`
$DIR/core/cmd/eth_keys_commands_test.go: `ethClient.On("LINKBalance", mock.Anything, mock.Anything, mock.Anything).Return(commonassets.NewLinkFromJuels(42), nil)`
$DIR/core/cmd/eth_keys_commands_test.go: `ethClient.On("PendingNonceAt", mock.Anything, mock.Anything).Return(uint64(0), nil)`
$DIR/core/cmd/eth_keys_commands_test.go: `c.EVM[0].Enabled = ptr(true)`
$DIR/core/cmd/eth_keys_commands_test.go: `c.EVM[0].NonceAutoSync = ptr(false)`
$DIR/core/cmd/eth_keys_commands_test.go: `c.EVM[0].BalanceMonitor.Enabled = ptr(false)`
$DIR/core/cmd/eth_keys_commands_test.go: `cltest.AssertCount(t, db, "evm.key_states", 1)`
$DIR/core/cmd/eth_keys_commands_test.go: `flagSetApplyFromAction(client.CreateETHKey, set, "")`
$DIR/core/cmd/eth_keys_commands_test.go: `cltest.AssertCount(t, db, "evm.key_states", 2)`
$DIR/core/cmd/eth_keys_commands_test.go: `keys, err = app.KeyStore.Eth().GetAll(testutils.Context(t))`
$DIR/core/cmd/eth_keys_commands_test.go: `c.EVM[0].Enabled = ptr(true)`
$DIR/core/cmd/eth_keys_commands_test.go: `c.EVM[0].NonceAutoSync = ptr(false)`
$DIR/core/cmd/eth_keys_commands_test.go: `c.EVM[0].BalanceMonitor.Enabled = ptr(false)`
$DIR/core/cmd/eth_keys_commands_test.go: `flagSetApplyFromAction(client.DeleteETHKey, set, "")`
$DIR/core/cmd/eth_keys_commands_test.go: `err = client.DeleteETHKey(c)`
$DIR/core/cmd/eth_keys_commands_test.go: `_, err = ethKeyStore.Get(testutils.Context(t), key.Address.Hex())`
$DIR/core/cmd/eth_keys_commands_test.go: `t.Cleanup(func() { deleteKeyExportFile(t) })`
$DIR/core/cmd/eth_keys_commands_test.go: `deleteKeyExportFile(t)`
$DIR/core/cmd/eth_keys_commands_test.go: `ethClient.On("BalanceAt", mock.Anything, mock.Anything, mock.Anything).Return(big.NewInt(42), nil)`
$DIR/core/cmd/eth_keys_commands_test.go: `ethClient.On("LINKBalance", mock.Anything, mock.Anything, mock.Anything).Return(commonassets.NewLinkFromJuels(42), nil)`
$DIR/core/cmd/eth_keys_commands_test.go: `ethClient.On("PendingNonceAt", mock.Anything, mock.Anything).Return(uint64(0), nil)`
$DIR/core/cmd/eth_keys_commands_test.go: `c.EVM[0].Enabled = ptr(true)`
$DIR/core/cmd/eth_keys_commands_test.go: `c.EVM[0].NonceAutoSync = ptr(false)`
$DIR/core/cmd/eth_keys_commands_test.go: `c.EVM[0].BalanceMonitor.Enabled = ptr(false)`
$DIR/core/cmd/eth_keys_commands_test.go: `flagSetApplyFromAction(client.RemoteLogin, set, "")`
$DIR/core/cmd/eth_keys_commands_test.go: `err = client.ListETHKeys(c)`
$DIR/core/cmd/eth_keys_commands_test.go: `r.Renders = nil`
$DIR/core/cmd/eth_keys_commands_test.go: `err = os.MkdirAll(testdir, 0700|os.ModeDir)`
$DIR/core/cmd/eth_keys_commands_test.go: `set = flag.NewFlagSet("test", 0)`
$DIR/core/cmd/eth_keys_commands_test.go: `flagSetApplyFromAction(client.ExportETHKey, set, "")`
$DIR/core/cmd/eth_keys_commands_test.go: `c = cli.NewContext(nil, set, nil)`
$DIR/core/cmd/eth_keys_commands_test.go: `err = client.ExportETHKey(c)`
$DIR/core/cmd/eth_keys_commands_test.go: `set = flag.NewFlagSet("test", 0)`
$DIR/core/cmd/eth_keys_commands_test.go: `flagSetApplyFromAction(client.DeleteETHKey, set, "")`
$DIR/core/cmd/eth_keys_commands_test.go: `c = cli.NewContext(nil, set, nil)`
$DIR/core/cmd/eth_keys_commands_test.go: `err = client.DeleteETHKey(c)`
$DIR/core/cmd/eth_keys_commands_test.go: `_, err = ethKeyStore.Get(testutils.Context(t), address)`
$DIR/core/cmd/eth_keys_commands_test.go: `cltest.AssertCount(t, app.GetDB(), "evm.key_states", 0)`
$DIR/core/cmd/eth_keys_commands_test.go: `set = flag.NewFlagSet("test", 0)`
$DIR/core/cmd/eth_keys_commands_test.go: `flagSetApplyFromAction(client.ImportETHKey, set, "")`
$DIR/core/cmd/eth_keys_commands_test.go: `c = cli.NewContext(nil, set, nil)`
$DIR/core/cmd/eth_keys_commands_test.go: `err = client.ImportETHKey(c)`
$DIR/core/cmd/eth_keys_commands_test.go: `r.Renders = nil`
$DIR/core/cmd/eth_keys_commands_test.go: `set = flag.NewFlagSet("test", 0)`
$DIR/core/cmd/eth_keys_commands_test.go: `flagSetApplyFromAction(client.ListETHKeys, set, "")`
$DIR/core/cmd/eth_keys_commands_test.go: `c = cli.NewContext(nil, set, nil)`
$DIR/core/cmd/eth_keys_commands_test.go: `err = client.ListETHKeys(c)`
$DIR/core/cmd/eth_keys_commands_test.go: `_, err = ethKeyStore.Get(testutils.Context(t), address)`
$DIR/core/cmd/eth_keys_commands_test.go: `set = flag.NewFlagSet("test Eth export invalid id", 0)`
$DIR/core/cmd/eth_keys_commands_test.go: `flagSetApplyFromAction(client.ExportETHKey, set, "")`
$DIR/core/cmd/eth_keys_commands_test.go: `c = cli.NewContext(nil, set, nil)`
$DIR/core/cmd/eth_keys_commands_test.go: `err = client.ExportETHKey(c)`
$DIR/core/cmd/eth_keys_commands_test.go: `t.Cleanup(func() { deleteKeyExportFile(t) })`
$DIR/core/cmd/eth_keys_commands_test.go: `deleteKeyExportFile(t)`
$DIR/core/cmd/eth_keys_commands_test.go: `ethClient.On("PendingNonceAt", mock.Anything, mock.Anything).Return(uint64(0), nil)`
$DIR/core/cmd/eth_keys_commands_test.go: `c.EVM[0].Enabled = ptr(true)`
$DIR/core/cmd/eth_keys_commands_test.go: `c.EVM[0].NonceAutoSync = ptr(false)`
$DIR/core/cmd/eth_keys_commands_test.go: `c.EVM[0].BalanceMonitor.Enabled = ptr(false)`
$DIR/core/cmd/eth_keys_commands_test.go: `ethClient.On("Dial", mock.Anything).Maybe()`
$DIR/core/cmd/eth_keys_commands_test.go: `ethClient.On("BalanceAt", mock.Anything, mock.Anything, mock.Anything).Return(big.NewInt(42), nil)`
$DIR/core/cmd/eth_keys_commands_test.go: `ethClient.On("LINKBalance", mock.Anything, mock.Anything, mock.Anything).Return(commonassets.NewLinkFromJuels(42), nil)`
$DIR/core/cmd/eth_keys_commands_test.go: `flagSetApplyFromAction(client.RemoteLogin, set, "")`
$DIR/core/cmd/eth_keys_commands_test.go: `err = client.ListETHKeys(c)`
$DIR/core/cmd/eth_keys_commands_test.go: `r.Renders = nil`
$DIR/core/cmd/eth_keys_commands_test.go: `err = os.MkdirAll(testdir, 0700|os.ModeDir)`
$DIR/core/cmd/eth_keys_commands_test.go: `set = flag.NewFlagSet("test", 0)`
$DIR/core/cmd/eth_keys_commands_test.go: `flagSetApplyFromAction(client.ExportETHKey, set, "")`
$DIR/core/cmd/eth_keys_commands_test.go: `c = cli.NewContext(nil, set, nil)`
$DIR/core/cmd/eth_keys_commands_test.go: `err = client.ExportETHKey(c)`
$DIR/core/cmd/eth_keys_commands_test.go: `set = flag.NewFlagSet("test", 0)`
$DIR/core/cmd/eth_keys_commands_test.go: `flagSetApplyFromAction(client.DeleteETHKey, set, "")`
$DIR/core/cmd/eth_keys_commands_test.go: `c = cli.NewContext(nil, set, nil)`
$DIR/core/cmd/eth_keys_commands_test.go: `err = client.DeleteETHKey(c)`
$DIR/core/cmd/eth_keys_commands_test.go: `_, err = ethKeyStore.Get(testutils.Context(t), address)`
$DIR/core/cmd/eth_keys_commands_test.go: `set = flag.NewFlagSet("test", 0)`
$DIR/core/cmd/eth_keys_commands_test.go: `flagSetApplyFromAction(client.ImportETHKey, set, "")`
$DIR/core/cmd/eth_keys_commands_test.go: `c = cli.NewContext(nil, set, nil)`
$DIR/core/cmd/eth_keys_commands_test.go: `err = client.ImportETHKey(c)`
$DIR/core/cmd/eth_keys_commands_test.go: `r.Renders = nil`
$DIR/core/cmd/eth_keys_commands_test.go: `set = flag.NewFlagSet("test", 0)`
$DIR/core/cmd/eth_keys_commands_test.go: `flagSetApplyFromAction(client.ListETHKeys, set, "")`
$DIR/core/cmd/eth_keys_commands_test.go: `c = cli.NewContext(nil, set, nil)`
$DIR/core/cmd/eth_keys_commands_test.go: `err = client.ListETHKeys(c)`
$DIR/core/cmd/eth_keys_commands_test.go: `_, err = ethKeyStore.Get(testutils.Context(t), address)`
$DIR/core/cmd/eth_keys_commands_test.go: `set = flag.NewFlagSet("test Eth export invalid id", 0)`
$DIR/core/cmd/eth_keys_commands_test.go: `flagSetApplyFromAction(client.ExportETHKey, set, "")`
$DIR/core/cmd/eth_keys_commands_test.go: `c = cli.NewContext(nil, set, nil)`
$DIR/core/cmd/eth_keys_commands_test.go: `err = client.ExportETHKey(c)`
$DIR/core/cmd/eth_keys_commands_test.go: `.NewEth(1)`
$DIR/core/cmd/eth_keys_commands_test.go: `.NewLinkFromJuels(2)`
$DIR/core/cmd/eth_keys_commands_test.go: `.Now()`
$DIR/core/cmd/eth_keys_commands_test.go: `.Now()`
$DIR/core/cmd/eth_keys_commands_test.go: `.Add(time.Second)`
$DIR/core/cmd/eth_keys_commands_test.go: `.NewI(12345)`
$DIR/core/cmd/eth_keys_commands_test.go: `.NewBufferString("")`
$DIR/core/cmd/eth_keys_commands_test.go: `.NewJAID(bundleID)`
$DIR/core/cmd/eth_keys_commands_test.go: `.String()`
$DIR/core/cmd/eth_keys_commands_test.go: `.Reset()`
$DIR/core/cmd/eth_keys_commands_test.go: `.String()`
$DIR/core/cmd/eth_keys_commands_test.go: `.String()`
$DIR/core/cmd/eth_keys_commands_test.go: `.On("BalanceAt", mock.Anything, mock.Anything, mock.Anything)`
$DIR/core/cmd/eth_keys_commands_test.go: `.Return(big.NewInt(42), nil)`
$DIR/core/cmd/eth_keys_commands_test.go: `.NewInt(42)`
$DIR/core/cmd/eth_keys_commands_test.go: `.On("LINKBalance", mock.Anything, mock.Anything, mock.Anything)`
$DIR/core/cmd/eth_keys_commands_test.go: `.Return(commonassets.NewLinkFromJuels(13), nil)`
$DIR/core/cmd/eth_keys_commands_test.go: `.NewLinkFromJuels(13)`
$DIR/core/cmd/eth_keys_commands_test.go: `.On("PendingNonceAt", mock.Anything, mock.Anything)`
$DIR/core/cmd/eth_keys_commands_test.go: `.Return(uint64(0), nil)`
$DIR/core/cmd/eth_keys_commands_test.go: `.NewShellAndRenderer()`
$DIR/core/cmd/eth_keys_commands_test.go: `.LinkBalance.String()`
$DIR/core/cmd/eth_keys_commands_test.go: `.On("BalanceAt", mock.Anything, mock.Anything, mock.Anything)`
$DIR/core/cmd/eth_keys_commands_test.go: `.Return(nil, errors.New("fake error"))`
$DIR/core/cmd/eth_keys_commands_test.go: `.New("fake error")`
$DIR/core/cmd/eth_keys_commands_test.go: `.On("LINKBalance", mock.Anything, mock.Anything, mock.Anything)`
$DIR/core/cmd/eth_keys_commands_test.go: `.Return(nil, errors.New("fake error"))`
$DIR/core/cmd/eth_keys_commands_test.go: `.New("fake error")`
$DIR/core/cmd/eth_keys_commands_test.go: `.On("PendingNonceAt", mock.Anything, mock.Anything)`
$DIR/core/cmd/eth_keys_commands_test.go: `.Return(uint64(0), nil)`
$DIR/core/cmd/eth_keys_commands_test.go: `.NewShellAndRenderer()`
$DIR/core/cmd/eth_keys_commands_test.go: `.NewShellAndRenderer()`
$DIR/core/cmd/eth_keys_commands_test.go: `.KeyStore.Eth()`
$DIR/core/cmd/eth_keys_commands_test.go: `.GetAll(testutils.Context(t))`
$DIR/core/cmd/eth_keys_commands_test.go: `.Context(t)`
$DIR/core/cmd/eth_keys_commands_test.go: `.Address.String()`
$DIR/core/cmd/eth_keys_commands_test.go: `.UpdatedAt.String()`
$DIR/core/cmd/eth_keys_commands_test.go: `.CreatedAt.String()`
$DIR/core/cmd/eth_keys_commands_test.go: `.ToRow()`
$DIR/core/cmd/eth_keys_commands_test.go: `.On("BalanceAt", mock.Anything, mock.Anything, mock.Anything)`
$DIR/core/cmd/eth_keys_commands_test.go: `.Return(big.NewInt(42), nil)`
$DIR/core/cmd/eth_keys_commands_test.go: `.NewInt(42)`
$DIR/core/cmd/eth_keys_commands_test.go: `.On("LINKBalance", mock.Anything, mock.Anything, mock.Anything)`
$DIR/core/cmd/eth_keys_commands_test.go: `.Return(commonassets.NewLinkFromJuels(42), nil)`
$DIR/core/cmd/eth_keys_commands_test.go: `.NewLinkFromJuels(42)`
$DIR/core/cmd/eth_keys_commands_test.go: `.On("PendingNonceAt", mock.Anything, mock.Anything)`
$DIR/core/cmd/eth_keys_commands_test.go: `.Return(uint64(0), nil)`
$DIR/core/cmd/eth_keys_commands_test.go: `.GetDB()`
$DIR/core/cmd/eth_keys_commands_test.go: `.NewShellAndRenderer()`
$DIR/core/cmd/eth_keys_commands_test.go: `.AssertCount(t, db, "evm.key_states", 1)`
$DIR/core/cmd/eth_keys_commands_test.go: `.KeyStore.Eth()`
$DIR/core/cmd/eth_keys_commands_test.go: `.GetAll(testutils.Context(t))`
$DIR/core/cmd/eth_keys_commands_test.go: `.Context(t)`
$DIR/core/cmd/eth_keys_commands_test.go: `.NewInt(0)`
$DIR/core/cmd/eth_keys_commands_test.go: `.NewFlagSet("test", 0)`
$DIR/core/cmd/eth_keys_commands_test.go: `.NewContext(nil, set, nil)`
$DIR/core/cmd/eth_keys_commands_test.go: `.AssertCount(t, db, "evm.key_states", 2)`
$DIR/core/cmd/eth_keys_commands_test.go: `.KeyStore.Eth()`
$DIR/core/cmd/eth_keys_commands_test.go: `.GetAll(testutils.Context(t))`
$DIR/core/cmd/eth_keys_commands_test.go: `.Context(t)`
$DIR/core/cmd/eth_keys_commands_test.go: `.GetKeyStore()`
$DIR/core/cmd/eth_keys_commands_test.go: `.Eth()`
$DIR/core/cmd/eth_keys_commands_test.go: `.NewShellAndRenderer()`
$DIR/core/cmd/eth_keys_commands_test.go: `.Create(testutils.Context(t), &cltest.FixtureChainID)`
$DIR/core/cmd/eth_keys_commands_test.go: `.Context(t)`
$DIR/core/cmd/eth_keys_commands_test.go: `.NewFlagSet("test", 0)`
$DIR/core/cmd/eth_keys_commands_test.go: `.NewContext(nil, set, nil)`
$DIR/core/cmd/eth_keys_commands_test.go: `.DeleteETHKey(c)`
$DIR/core/cmd/eth_keys_commands_test.go: `.Get(testutils.Context(t), key.Address.Hex())`
$DIR/core/cmd/eth_keys_commands_test.go: `.Context(t)`
$DIR/core/cmd/eth_keys_commands_test.go: `.Address.Hex()`
$DIR/core/cmd/eth_keys_commands_test.go: `.Cleanup(func() { deleteKeyExportFile(t) })`
$DIR/core/cmd/eth_keys_commands_test.go: `.On("BalanceAt", mock.Anything, mock.Anything, mock.Anything)`
$DIR/core/cmd/eth_keys_commands_test.go: `.Return(big.NewInt(42), nil)`
$DIR/core/cmd/eth_keys_commands_test.go: `.NewInt(42)`
$DIR/core/cmd/eth_keys_commands_test.go: `.On("LINKBalance", mock.Anything, mock.Anything, mock.Anything)`
$DIR/core/cmd/eth_keys_commands_test.go: `.Return(commonassets.NewLinkFromJuels(42), nil)`
$DIR/core/cmd/eth_keys_commands_test.go: `.NewLinkFromJuels(42)`
$DIR/core/cmd/eth_keys_commands_test.go: `.On("PendingNonceAt", mock.Anything, mock.Anything)`
$DIR/core/cmd/eth_keys_commands_test.go: `.Return(uint64(0), nil)`
$DIR/core/cmd/eth_keys_commands_test.go: `.NewShellAndRenderer()`
$DIR/core/cmd/eth_keys_commands_test.go: `.GetKeyStore()`
$DIR/core/cmd/eth_keys_commands_test.go: `.Eth()`
$DIR/core/cmd/eth_keys_commands_test.go: `.NewFlagSet("test", 0)`
$DIR/core/cmd/eth_keys_commands_test.go: `.NewContext(nil, set, nil)`
$DIR/core/cmd/eth_keys_commands_test.go: `.RemoteLogin(c)`
$DIR/core/cmd/eth_keys_commands_test.go: `.ListETHKeys(c)`
$DIR/core/cmd/eth_keys_commands_test.go: `.Join(os.TempDir(), t.Name())`
$DIR/core/cmd/eth_keys_commands_test.go: `.TempDir()`
$DIR/core/cmd/eth_keys_commands_test.go: `.Name()`
$DIR/core/cmd/eth_keys_commands_test.go: `.MkdirAll(testdir, 0700|os.ModeDir)`
$DIR/core/cmd/eth_keys_commands_test.go: `.RemoveAll(testdir)`
$DIR/core/cmd/eth_keys_commands_test.go: `.Join(testdir, "key")`
$DIR/core/cmd/eth_keys_commands_test.go: `.NewFlagSet("test", 0)`
$DIR/core/cmd/eth_keys_commands_test.go: `.NewContext(nil, set, nil)`
$DIR/core/cmd/eth_keys_commands_test.go: `.ExportETHKey(c)`
$DIR/core/cmd/eth_keys_commands_test.go: `.NewFlagSet("test", 0)`
$DIR/core/cmd/eth_keys_commands_test.go: `.NewContext(nil, set, nil)`
$DIR/core/cmd/eth_keys_commands_test.go: `.DeleteETHKey(c)`
$DIR/core/cmd/eth_keys_commands_test.go: `.Get(testutils.Context(t), address)`
$DIR/core/cmd/eth_keys_commands_test.go: `.Context(t)`
$DIR/core/cmd/eth_keys_commands_test.go: `.AssertCount(t, app.GetDB(), "evm.key_states", 0)`
$DIR/core/cmd/eth_keys_commands_test.go: `.GetDB()`
$DIR/core/cmd/eth_keys_commands_test.go: `.NewFlagSet("test", 0)`
$DIR/core/cmd/eth_keys_commands_test.go: `.NewContext(nil, set, nil)`
$DIR/core/cmd/eth_keys_commands_test.go: `.ImportETHKey(c)`
$DIR/core/cmd/eth_keys_commands_test.go: `.NewFlagSet("test", 0)`
$DIR/core/cmd/eth_keys_commands_test.go: `.NewContext(nil, set, nil)`
$DIR/core/cmd/eth_keys_commands_test.go: `.ListETHKeys(c)`
$DIR/core/cmd/eth_keys_commands_test.go: `.Get(testutils.Context(t), address)`
$DIR/core/cmd/eth_keys_commands_test.go: `.Context(t)`
$DIR/core/cmd/eth_keys_commands_test.go: `.NewFlagSet("test Eth export invalid id", 0)`
$DIR/core/cmd/eth_keys_commands_test.go: `.NewContext(nil, set, nil)`
$DIR/core/cmd/eth_keys_commands_test.go: `.ExportETHKey(c)`
$DIR/core/cmd/eth_keys_commands_test.go: `.JustError(os.Stat(keyName))`
$DIR/core/cmd/eth_keys_commands_test.go: `.Stat(keyName)`
$DIR/core/cmd/eth_keys_commands_test.go: `.Cleanup(func() { deleteKeyExportFile(t) })`
$DIR/core/cmd/eth_keys_commands_test.go: `.On("PendingNonceAt", mock.Anything, mock.Anything)`
$DIR/core/cmd/eth_keys_commands_test.go: `.Return(uint64(0), nil)`
$DIR/core/cmd/eth_keys_commands_test.go: `.NewShellAndRenderer()`
$DIR/core/cmd/eth_keys_commands_test.go: `.GetKeyStore()`
$DIR/core/cmd/eth_keys_commands_test.go: `.Eth()`
$DIR/core/cmd/eth_keys_commands_test.go: `.On("Dial", mock.Anything)`
$DIR/core/cmd/eth_keys_commands_test.go: `.Maybe()`
$DIR/core/cmd/eth_keys_commands_test.go: `.On("BalanceAt", mock.Anything, mock.Anything, mock.Anything)`
$DIR/core/cmd/eth_keys_commands_test.go: `.Return(big.NewInt(42), nil)`
$DIR/core/cmd/eth_keys_commands_test.go: `.NewInt(42)`
$DIR/core/cmd/eth_keys_commands_test.go: `.On("LINKBalance", mock.Anything, mock.Anything, mock.Anything)`
$DIR/core/cmd/eth_keys_commands_test.go: `.Return(commonassets.NewLinkFromJuels(42), nil)`
$DIR/core/cmd/eth_keys_commands_test.go: `.NewLinkFromJuels(42)`
$DIR/core/cmd/eth_keys_commands_test.go: `.NewFlagSet("test", 0)`
$DIR/core/cmd/eth_keys_commands_test.go: `.NewContext(nil, set, nil)`
$DIR/core/cmd/eth_keys_commands_test.go: `.RemoteLogin(c)`
$DIR/core/cmd/eth_keys_commands_test.go: `.ListETHKeys(c)`
$DIR/core/cmd/eth_keys_commands_test.go: `.Join(os.TempDir(), t.Name())`
$DIR/core/cmd/eth_keys_commands_test.go: `.TempDir()`
$DIR/core/cmd/eth_keys_commands_test.go: `.Name()`
$DIR/core/cmd/eth_keys_commands_test.go: `.MkdirAll(testdir, 0700|os.ModeDir)`
$DIR/core/cmd/eth_keys_commands_test.go: `.RemoveAll(testdir)`
$DIR/core/cmd/eth_keys_commands_test.go: `.Join(testdir, "key")`
$DIR/core/cmd/eth_keys_commands_test.go: `.NewFlagSet("test", 0)`
$DIR/core/cmd/eth_keys_commands_test.go: `.NewContext(nil, set, nil)`
$DIR/core/cmd/eth_keys_commands_test.go: `.ExportETHKey(c)`
$DIR/core/cmd/eth_keys_commands_test.go: `.NewFlagSet("test", 0)`
$DIR/core/cmd/eth_keys_commands_test.go: `.NewContext(nil, set, nil)`
$DIR/core/cmd/eth_keys_commands_test.go: `.DeleteETHKey(c)`
$DIR/core/cmd/eth_keys_commands_test.go: `.Get(testutils.Context(t), address)`
$DIR/core/cmd/eth_keys_commands_test.go: `.Context(t)`
$DIR/core/cmd/eth_keys_commands_test.go: `.NewFlagSet("test", 0)`
$DIR/core/cmd/eth_keys_commands_test.go: `.NewContext(nil, set, nil)`
$DIR/core/cmd/eth_keys_commands_test.go: `.ImportETHKey(c)`
$DIR/core/cmd/eth_keys_commands_test.go: `.NewFlagSet("test", 0)`
$DIR/core/cmd/eth_keys_commands_test.go: `.NewContext(nil, set, nil)`
$DIR/core/cmd/eth_keys_commands_test.go: `.ListETHKeys(c)`
$DIR/core/cmd/eth_keys_commands_test.go: `.Get(testutils.Context(t), address)`
$DIR/core/cmd/eth_keys_commands_test.go: `.Context(t)`
$DIR/core/cmd/eth_keys_commands_test.go: `.NewFlagSet("test Eth export invalid id", 0)`
$DIR/core/cmd/eth_keys_commands_test.go: `.NewContext(nil, set, nil)`
$DIR/core/cmd/eth_keys_commands_test.go: `.ExportETHKey(c)`
$DIR/core/cmd/eth_keys_commands_test.go: `.JustError(os.Stat(keyName))`
$DIR/core/cmd/eth_keys_commands_test.go: `.Stat(keyName)`
$DIR/core/cmd/evm_chains_commands_test.go: `c.EVM[0].Enabled = ptr(true)`
$DIR/core/cmd/evm_chains_commands_test.go: `c.EVM[0].NonceAutoSync = ptr(false)`
$DIR/core/cmd/evm_chains_commands_test.go: `c.EVM[0].BalanceMonitor.Enabled = ptr(false)`
$DIR/core/cmd/evm_chains_commands_test.go: `.NewShellAndRenderer()`
$DIR/core/cmd/evm_node_commands_test.go: `c.EVM = evmcfg.EVMConfigs{&chain}`
$DIR/core/cmd/evm_node_commands_test.go: `assertTableRenders(t, r)`
$DIR/core/cmd/evm_node_commands_test.go: `.MustParseURL("ws://localhost:8546")`
$DIR/core/cmd/evm_node_commands_test.go: `.MustParseURL("http://localhost:8546")`
$DIR/core/cmd/evm_node_commands_test.go: `.MustParseURL("ws://localhost:8547")`
$DIR/core/cmd/evm_node_commands_test.go: `.MustParseURL("http://localhost:8547")`
$DIR/core/cmd/evm_node_commands_test.go: `.Defaults(chainID)`
$DIR/core/cmd/evm_node_commands_test.go: `.NewShellAndRenderer()`
$DIR/core/cmd/evm_node_commands_test.go: `.Marshal(node1)`
$DIR/core/cmd/evm_node_commands_test.go: `.Marshal(node2)`
$DIR/core/cmd/evm_node_commands_test.go: `.Split(b.String(), "\n")`
$DIR/core/cmd/evm_node_commands_test.go: `.String()`
$DIR/core/cmd/evm_transaction_commands_test.go: `flagSetApplyFromAction(client.IndexTransactions, set, "")`
$DIR/core/cmd/evm_transaction_commands_test.go: `set = flag.NewFlagSet("test txattempts", 0)`
$DIR/core/cmd/evm_transaction_commands_test.go: `flagSetApplyFromAction(client.IndexTransactions, set, "")`
$DIR/core/cmd/evm_transaction_commands_test.go: `c = cli.NewContext(nil, set, nil)`
$DIR/core/cmd/evm_transaction_commands_test.go: `renderedTxs = *r.Renders[1].(*cmd.EthTxPresenters)`
$DIR/core/cmd/evm_transaction_commands_test.go: `flagSetApplyFromAction(client.ShowTransaction, set, "")`
$DIR/core/cmd/evm_transaction_commands_test.go: `flagSetApplyFromAction(client.IndexTxAttempts, set, "")`
$DIR/core/cmd/evm_transaction_commands_test.go: `set = flag.NewFlagSet("test transactions", 0)`
$DIR/core/cmd/evm_transaction_commands_test.go: `flagSetApplyFromAction(client.IndexTxAttempts, set, "")`
$DIR/core/cmd/evm_transaction_commands_test.go: `c = cli.NewContext(nil, set, nil)`
$DIR/core/cmd/evm_transaction_commands_test.go: `renderedAttempts = *r.Renders[1].(*cmd.EthTxPresenters)`
$DIR/core/cmd/evm_transaction_commands_test.go: `ethMock.On("BalanceAt", mock.Anything, key.Address, (*big.Int)(nil)).Return(balance.ToInt(), nil)`
$DIR/core/cmd/evm_transaction_commands_test.go: `ethMock.On("SequenceAt", mock.Anything, mock.Anything, mock.Anything).Return(evmtypes.Nonce(0), nil).Maybe()`
$DIR/core/cmd/evm_transaction_commands_test.go: `ethMock.On("PendingNonceAt", mock.Anything, fromAddress).Return(uint64(0), nil).Once()`
$DIR/core/cmd/evm_transaction_commands_test.go: `c.EVM[0].Enabled = ptr(true)`
$DIR/core/cmd/evm_transaction_commands_test.go: `c.EVM[0].NonceAutoSync = ptr(false)`
$DIR/core/cmd/evm_transaction_commands_test.go: `c.EVM[0].BalanceMonitor.Enabled = ptr(false)`
$DIR/core/cmd/evm_transaction_commands_test.go: `c.Database.Listener.FallbackPollInterval = commonconfig.MustNewDuration(time.Second)`
$DIR/core/cmd/evm_transaction_commands_test.go: `flagSetApplyFromAction(client.SendEther, set, "")`
$DIR/core/cmd/evm_transaction_commands_test.go: `ethMock.On("BalanceAt", mock.Anything, key.Address, (*big.Int)(nil)).Return(balance.ToInt(), nil)`
$DIR/core/cmd/evm_transaction_commands_test.go: `ethMock.On("SequenceAt", mock.Anything, mock.Anything, mock.Anything).Return(evmtypes.Nonce(0), nil).Maybe()`
$DIR/core/cmd/evm_transaction_commands_test.go: `ethMock.On("PendingNonceAt", mock.Anything, fromAddress).Return(uint64(0), nil).Once()`
$DIR/core/cmd/evm_transaction_commands_test.go: `c.EVM[0].Enabled = ptr(true)`
$DIR/core/cmd/evm_transaction_commands_test.go: `c.EVM[0].NonceAutoSync = ptr(false)`
$DIR/core/cmd/evm_transaction_commands_test.go: `c.EVM[0].BalanceMonitor.Enabled = ptr(false)`
$DIR/core/cmd/evm_transaction_commands_test.go: `c.Database.Listener.FallbackPollInterval = commonconfig.MustNewDuration(time.Second)`
$DIR/core/cmd/evm_transaction_commands_test.go: `flagSetApplyFromAction(client.SendEther, set, "")`
$DIR/core/cmd/evm_transaction_commands_test.go: `err = set.Parse([]string{amount, fromAddress.Hex(), to})`
$DIR/core/cmd/evm_transaction_commands_test.go: `err = set.Set("wei", "true")`
$DIR/core/cmd/evm_transaction_commands_test.go: `.NewShellAndRenderer()`
$DIR/core/cmd/evm_transaction_commands_test.go: `.MustInsertRandomKey(t, app.KeyStore.Eth())`
$DIR/core/cmd/evm_transaction_commands_test.go: `.KeyStore.Eth()`
$DIR/core/cmd/evm_transaction_commands_test.go: `.NewTestTxStore(t, app.GetDB())`
$DIR/core/cmd/evm_transaction_commands_test.go: `.GetDB()`
$DIR/core/cmd/evm_transaction_commands_test.go: `.MustInsertConfirmedEthTxWithLegacyAttempt(t, txStore, 0, 1, from)`
$DIR/core/cmd/evm_transaction_commands_test.go: `.NewFlagSet("test transactions", 0)`
$DIR/core/cmd/evm_transaction_commands_test.go: `.NewContext(nil, set, nil)`
$DIR/core/cmd/evm_transaction_commands_test.go: `.NewFlagSet("test txattempts", 0)`
$DIR/core/cmd/evm_transaction_commands_test.go: `.NewContext(nil, set, nil)`
$DIR/core/cmd/evm_transaction_commands_test.go: `.NewShellAndRenderer()`
$DIR/core/cmd/evm_transaction_commands_test.go: `.GetDB()`
$DIR/core/cmd/evm_transaction_commands_test.go: `.MustInsertRandomKey(t, app.KeyStore.Eth())`
$DIR/core/cmd/evm_transaction_commands_test.go: `.KeyStore.Eth()`
$DIR/core/cmd/evm_transaction_commands_test.go: `.NewTestTxStore(t, db)`
$DIR/core/cmd/evm_transaction_commands_test.go: `.MustInsertConfirmedEthTxWithLegacyAttempt(t, txStore, 0, 1, from)`
$DIR/core/cmd/evm_transaction_commands_test.go: `.NewFlagSet("test get tx", 0)`
$DIR/core/cmd/evm_transaction_commands_test.go: `.NewContext(nil, set, nil)`
$DIR/core/cmd/evm_transaction_commands_test.go: `.NewShellAndRenderer()`
$DIR/core/cmd/evm_transaction_commands_test.go: `.MustInsertRandomKey(t, app.KeyStore.Eth())`
$DIR/core/cmd/evm_transaction_commands_test.go: `.KeyStore.Eth()`
$DIR/core/cmd/evm_transaction_commands_test.go: `.NewTestTxStore(t, app.GetDB())`
$DIR/core/cmd/evm_transaction_commands_test.go: `.GetDB()`
$DIR/core/cmd/evm_transaction_commands_test.go: `.MustInsertConfirmedEthTxWithLegacyAttempt(t, txStore, 0, 1, from)`
$DIR/core/cmd/evm_transaction_commands_test.go: `.NewFlagSet("test txattempts", 0)`
$DIR/core/cmd/evm_transaction_commands_test.go: `.NewContext(nil, set, nil)`
$DIR/core/cmd/evm_transaction_commands_test.go: `.NewFlagSet("test transactions", 0)`
$DIR/core/cmd/evm_transaction_commands_test.go: `.NewContext(nil, set, nil)`
$DIR/core/cmd/evm_transaction_commands_test.go: `.MustGenerateRandomKey(t)`
$DIR/core/cmd/evm_transaction_commands_test.go: `.NewEthValueS("200")`
$DIR/core/cmd/evm_transaction_commands_test.go: `.On("BalanceAt", mock.Anything, key.Address, (*big.Int)(nil))`
$DIR/core/cmd/evm_transaction_commands_test.go: `.Return(balance.ToInt(), nil)`
$DIR/core/cmd/evm_transaction_commands_test.go: `.ToInt()`
$DIR/core/cmd/evm_transaction_commands_test.go: `.On("SequenceAt", mock.Anything, mock.Anything, mock.Anything)`
$DIR/core/cmd/evm_transaction_commands_test.go: `.Return(evmtypes.Nonce(0), nil)`
$DIR/core/cmd/evm_transaction_commands_test.go: `.Nonce(0)`
$DIR/core/cmd/evm_transaction_commands_test.go: `.Maybe()`
$DIR/core/cmd/evm_transaction_commands_test.go: `.On("PendingNonceAt", mock.Anything, fromAddress)`
$DIR/core/cmd/evm_transaction_commands_test.go: `.Return(uint64(0), nil)`
$DIR/core/cmd/evm_transaction_commands_test.go: `.Once()`
$DIR/core/cmd/evm_transaction_commands_test.go: `.MustNewDuration(time.Second)`
$DIR/core/cmd/evm_transaction_commands_test.go: `.NewShellAndRenderer()`
$DIR/core/cmd/evm_transaction_commands_test.go: `.GetDB()`
$DIR/core/cmd/evm_transaction_commands_test.go: `.NewTxStore(db, logger.TestLogger(t))`
$DIR/core/cmd/evm_transaction_commands_test.go: `.TestLogger(t)`
$DIR/core/cmd/evm_transaction_commands_test.go: `.NewFlagSet("sendether", 0)`
$DIR/core/cmd/evm_transaction_commands_test.go: `.NewApp()`
$DIR/core/cmd/evm_transaction_commands_test.go: `.NewContext(cliapp, set, nil)`
$DIR/core/cmd/evm_transaction_commands_test.go: `.GetAllTxes(testutils.Context(t))`
$DIR/core/cmd/evm_transaction_commands_test.go: `.Context(t)`
$DIR/core/cmd/evm_transaction_commands_test.go: `.Eth(evmTx.Value)`
$DIR/core/cmd/evm_transaction_commands_test.go: `.GetAllTxAttempts(testutils.Context(t))`
$DIR/core/cmd/evm_transaction_commands_test.go: `.Context(t)`
$DIR/core/cmd/evm_transaction_commands_test.go: `.MustGenerateRandomKey(t)`
$DIR/core/cmd/evm_transaction_commands_test.go: `.NewEthValueS("200")`
$DIR/core/cmd/evm_transaction_commands_test.go: `.On("BalanceAt", mock.Anything, key.Address, (*big.Int)(nil))`
$DIR/core/cmd/evm_transaction_commands_test.go: `.Return(balance.ToInt(), nil)`
$DIR/core/cmd/evm_transaction_commands_test.go: `.ToInt()`
$DIR/core/cmd/evm_transaction_commands_test.go: `.On("SequenceAt", mock.Anything, mock.Anything, mock.Anything)`
$DIR/core/cmd/evm_transaction_commands_test.go: `.Return(evmtypes.Nonce(0), nil)`
$DIR/core/cmd/evm_transaction_commands_test.go: `.Nonce(0)`
$DIR/core/cmd/evm_transaction_commands_test.go: `.Maybe()`
$DIR/core/cmd/evm_transaction_commands_test.go: `.On("PendingNonceAt", mock.Anything, fromAddress)`
$DIR/core/cmd/evm_transaction_commands_test.go: `.Return(uint64(0), nil)`
$DIR/core/cmd/evm_transaction_commands_test.go: `.Once()`
$DIR/core/cmd/evm_transaction_commands_test.go: `.MustNewDuration(time.Second)`
$DIR/core/cmd/evm_transaction_commands_test.go: `.NewShellAndRenderer()`
$DIR/core/cmd/evm_transaction_commands_test.go: `.GetDB()`
$DIR/core/cmd/evm_transaction_commands_test.go: `.NewTxStore(db, logger.TestLogger(t))`
$DIR/core/cmd/evm_transaction_commands_test.go: `.TestLogger(t)`
$DIR/core/cmd/evm_transaction_commands_test.go: `.NewFlagSet("sendether", 0)`
$DIR/core/cmd/evm_transaction_commands_test.go: `.Parse([]string{amount, fromAddress.Hex(), to})`
$DIR/core/cmd/evm_transaction_commands_test.go: `.Hex()`
$DIR/core/cmd/evm_transaction_commands_test.go: `.Set("wei", "true")`
$DIR/core/cmd/evm_transaction_commands_test.go: `.NewApp()`
$DIR/core/cmd/evm_transaction_commands_test.go: `.NewContext(cliapp, set, nil)`
$DIR/core/cmd/evm_transaction_commands_test.go: `.GetAllTxes(testutils.Context(t))`
$DIR/core/cmd/evm_transaction_commands_test.go: `.Context(t)`
$DIR/core/cmd/evm_transaction_commands_test.go: `.Eth(evmTx.Value)`
$DIR/core/cmd/evm_transaction_commands_test.go: `.GetAllTxAttempts(testutils.Context(t))`
$DIR/core/cmd/evm_transaction_commands_test.go: `.Context(t)`
$DIR/core/cmd/external_initiator_commands_test.go: `buffer.Reset()`
$DIR/core/cmd/external_initiator_commands_test.go: `output = buffer.String()`
$DIR/core/cmd/external_initiator_commands_test.go: `.MustWebURL(t, "http://example.com")`
$DIR/core/cmd/external_initiator_commands_test.go: `.Now()`
$DIR/core/cmd/external_initiator_commands_test.go: `.Now()`
$DIR/core/cmd/external_initiator_commands_test.go: `.NewBufferString("")`
$DIR/core/cmd/external_initiator_commands_test.go: `.NewJAID(name)`
$DIR/core/cmd/external_initiator_commands_test.go: `.String()`
$DIR/core/cmd/external_initiator_commands_test.go: `.Reset()`
$DIR/core/cmd/external_initiator_commands_test.go: `.String()`
$DIR/core/cmd/forwarders_commands_test.go: `buffer.Reset()`
$DIR/core/cmd/forwarders_commands_test.go: `output = buffer.String()`
$DIR/core/cmd/forwarders_commands_test.go: `c.EVM[0].ChainID = id`
$DIR/core/cmd/forwarders_commands_test.go: `c.EVM[0].Enabled = ptr(true)`
$DIR/core/cmd/forwarders_commands_test.go: `flagSetApplyFromAction(client.TrackForwarder, set, "")`
$DIR/core/cmd/forwarders_commands_test.go: `set = flag.NewFlagSet("test", 0)`
$DIR/core/cmd/forwarders_commands_test.go: `flagSetApplyFromAction(client.DeleteForwarder, set, "")`
$DIR/core/cmd/forwarders_commands_test.go: `fwds = *r.Renders[2].(*cmd.EVMForwarderPresenters)`
$DIR/core/cmd/forwarders_commands_test.go: `c.EVM[0].ChainID = id`
$DIR/core/cmd/forwarders_commands_test.go: `c.EVM[0].Enabled = ptr(true)`
$DIR/core/cmd/forwarders_commands_test.go: `flagSetApplyFromAction(client.TrackForwarder, set, "")`
$DIR/core/cmd/forwarders_commands_test.go: `c.EVM[0].Enabled = ptr(true)`
$DIR/core/cmd/forwarders_commands_test.go: `flagSetApplyFromAction(client.DeleteForwarder, set, "")`
$DIR/core/cmd/forwarders_commands_test.go: `.RandomAddress()`
$DIR/core/cmd/forwarders_commands_test.go: `.NewI(4)`
$DIR/core/cmd/forwarders_commands_test.go: `.Now()`
$DIR/core/cmd/forwarders_commands_test.go: `.Now()`
$DIR/core/cmd/forwarders_commands_test.go: `.Add(time.Second)`
$DIR/core/cmd/forwarders_commands_test.go: `.NewBufferString("")`
$DIR/core/cmd/forwarders_commands_test.go: `.NewJAID(id)`
$DIR/core/cmd/forwarders_commands_test.go: `.String()`
$DIR/core/cmd/forwarders_commands_test.go: `.Reset()`
$DIR/core/cmd/forwarders_commands_test.go: `.String()`
$DIR/core/cmd/forwarders_commands_test.go: `.Format(time.RFC3339)`
$DIR/core/cmd/forwarders_commands_test.go: `.NewShellAndRenderer()`
$DIR/core/cmd/forwarders_commands_test.go: `.NewFlagSet("test", 0)`
$DIR/core/cmd/forwarders_commands_test.go: `.TrackForwarder(cli.NewContext(nil, set, nil))`
$DIR/core/cmd/forwarders_commands_test.go: `.NewContext(nil, set, nil)`
$DIR/core/cmd/forwarders_commands_test.go: `.NewFlagSet("test", 0)`
$DIR/core/cmd/forwarders_commands_test.go: `.NewContext(nil, set, nil)`
$DIR/core/cmd/forwarders_commands_test.go: `.NewShellAndRenderer()`
$DIR/core/cmd/forwarders_commands_test.go: `.NewFlagSet("test", 0)`
$DIR/core/cmd/forwarders_commands_test.go: `.TrackForwarder(cli.NewContext(nil, set, nil))`
$DIR/core/cmd/forwarders_commands_test.go: `.NewContext(nil, set, nil)`
$DIR/core/cmd/forwarders_commands_test.go: `.NewShellAndRenderer()`
$DIR/core/cmd/forwarders_commands_test.go: `.NewFlagSet("test", 0)`
$DIR/core/cmd/forwarders_commands_test.go: `.NewContext(nil, set, nil)`
$DIR/core/cmd/jobs_commands_test.go: `buffer.Reset()`
$DIR/core/cmd/jobs_commands_test.go: `output = buffer.String()`
$DIR/core/cmd/jobs_commands_test.go: `t.Run("gets the tasks from the DAG in reverse order", func(t *testing.T) {
r.PipelineSpec = presenters.PipelineSpec{
DotDAGSource: "ds1 [type=http method=GET url=\"example.com\" allowunrestrictednetworkaccess=\"true\"];\n ds1_parse [type=jsonparse path=\"USD\"];\n ds1_multiply [type=multiply times=100];\n ds1 -\u003e ds1_parse -\u003e ds1_multiply;\n",
}
tasks, err := r.GetTasks()
assert.NoError(t, err)
assert.Equal(t, []string{
"ds1 http",
"ds1_parse jsonparse",
"ds1_multiply multiply",
}, tasks)
})`
$DIR/core/cmd/jobs_commands_test.go: `r.PipelineSpec = presenters.PipelineSpec{
DotDAGSource: "ds1 [type=http method=GET url=\"example.com\" allowunrestrictednetworkaccess=\"true\"];\n ds1_parse [type=jsonparse path=\"USD\"];\n ds1_multiply [type=multiply times=100];\n ds1 -\u003e ds1_parse -\u003e ds1_multiply;\n",
}`
$DIR/core/cmd/jobs_commands_test.go: `r.PipelineSpec = presenters.PipelineSpec{
DotDAGSource: "invalid dot",
}`
$DIR/core/cmd/jobs_commands_test.go: `t.Run("gets the tasks in a printable format", func(t *testing.T) {
r.PipelineSpec = presenters.PipelineSpec{
DotDAGSource: " ds1 [type=http method=GET url=\"example.com\" allowunrestrictednetworkaccess=\"true\"];\n ds1_parse [type=jsonparse path=\"USD\"];\n ds1_multiply [type=multiply times=100];\n ds1 -\u003e ds1_parse -\u003e ds1_multiply;\n",
}
assert.Equal(t, []string{
"ds1 http",
"ds1_parse jsonparse",
"ds1_multiply multiply",
}, r.FriendlyTasks())
})`
$DIR/core/cmd/jobs_commands_test.go: `r.PipelineSpec = presenters.PipelineSpec{
DotDAGSource: " ds1 [type=http method=GET url=\"example.com\" allowunrestrictednetworkaccess=\"true\"];\n ds1_parse [type=jsonparse path=\"USD\"];\n ds1_multiply [type=multiply times=100];\n ds1 -\u003e ds1_parse -\u003e ds1_multiply;\n",
}`
$DIR/core/cmd/jobs_commands_test.go: `r.PipelineSpec = presenters.PipelineSpec{
DotDAGSource: "invalid dot",
}`
$DIR/core/cmd/jobs_commands_test.go: `t.Run(tc.name, func(t *testing.T) {
assert.Equal(t, tc.result, tc.job.FriendlyCreatedAt())
})`
$DIR/core/cmd/jobs_commands_test.go: `job.PipelineSpec.DotDAGSource = ""`
$DIR/core/cmd/jobs_commands_test.go: `c.EVM[0].Enabled = ptr(true)`
$DIR/core/cmd/jobs_commands_test.go: `flagSetApplyFromAction(client.CreateJob, fs, "")`
$DIR/core/cmd/jobs_commands_test.go: `c.EVM[0].Enabled = ptr(true)`
$DIR/core/cmd/jobs_commands_test.go: `flagSetApplyFromAction(client.CreateJob, fs, "")`
$DIR/core/cmd/jobs_commands_test.go: `err = set.Parse([]string{createOutput.ID})`
$DIR/core/cmd/jobs_commands_test.go: `c.Database.Listener.FallbackPollInterval = commonconfig.MustNewDuration(100 * time.Millisecond)`
$DIR/core/cmd/jobs_commands_test.go: `c.OCR.Enabled = ptr(true)`
$DIR/core/cmd/jobs_commands_test.go: `c.P2P.V2.Enabled = ptr(true)`
$DIR/core/cmd/jobs_commands_test.go: `c.P2P.V2.ListenAddresses = &[]string{fmt.Sprintf("127.0.0.1:%d", freeport.GetOne(t))}`
$DIR/core/cmd/jobs_commands_test.go: `c.P2P.PeerID = &cltest.DefaultP2PPeerID`
$DIR/core/cmd/jobs_commands_test.go: `c.EVM[0].Enabled = ptr(true)`
$DIR/core/cmd/jobs_commands_test.go: `c.EVM[0].NonceAutoSync = ptr(false)`
$DIR/core/cmd/jobs_commands_test.go: `c.EVM[0].BalanceMonitor.Enabled = ptr(false)`
$DIR/core/cmd/jobs_commands_test.go: `c.EVM[0].GasEstimator.Mode = ptr("FixedPrice")`
$DIR/core/cmd/jobs_commands_test.go: `opts.FlagsAndDeps = append(opts.FlagsAndDeps, cltest.DefaultP2PKey)`
$DIR/core/cmd/jobs_commands_test.go: `requireJobsCount(t, app.JobORM(), 0)`
$DIR/core/cmd/jobs_commands_test.go: `flagSetApplyFromAction(client.CreateJob, fs, "")`
$DIR/core/cmd/jobs_commands_test.go: `requireJobsCount(t, app.JobORM(), 1)`
$DIR/core/cmd/jobs_commands_test.go: `c.Database.Listener.FallbackPollInterval = commonconfig.MustNewDuration(100 * time.Millisecond)`
$DIR/core/cmd/jobs_commands_test.go: `c.EVM[0].Enabled = ptr(true)`
$DIR/core/cmd/jobs_commands_test.go: `c.EVM[0].NonceAutoSync = ptr(false)`
$DIR/core/cmd/jobs_commands_test.go: `c.EVM[0].BalanceMonitor.Enabled = ptr(false)`
$DIR/core/cmd/jobs_commands_test.go: `c.EVM[0].GasEstimator.Mode = ptr("FixedPrice")`
$DIR/core/cmd/jobs_commands_test.go: `flagSetApplyFromAction(client.CreateJob, fs, "")`
$DIR/core/cmd/jobs_commands_test.go: `requireJobsCount(t, app.JobORM(), 1)`
$DIR/core/cmd/jobs_commands_test.go: `cltest.AwaitJobActive(t, app.JobSpawner(), jobID, 3*time.Second)`
$DIR/core/cmd/jobs_commands_test.go: `flagSetApplyFromAction(client.DeleteJob, set, "")`
$DIR/core/cmd/jobs_commands_test.go: `set = flag.NewFlagSet("test", 0)`
$DIR/core/cmd/jobs_commands_test.go: `flagSetApplyFromAction(client.DeleteJob, set, "")`
$DIR/core/cmd/jobs_commands_test.go: `c = cli.NewContext(nil, set, nil)`
$DIR/core/cmd/jobs_commands_test.go: `.Interval(1 * time.Second)`
$DIR/core/cmd/jobs_commands_test.go: `.Now()`
$DIR/core/cmd/jobs_commands_test.go: `.Now()`
$DIR/core/cmd/jobs_commands_test.go: `.Add(time.Second)`
$DIR/core/cmd/jobs_commands_test.go: `.NewBufferString("")`
$DIR/core/cmd/jobs_commands_test.go: `.NewJAID(id)`
$DIR/core/cmd/jobs_commands_test.go: `.JobSpecType(jobSpecType)`
$DIR/core/cmd/jobs_commands_test.go: `.String()`
$DIR/core/cmd/jobs_commands_test.go: `.Reset()`
$DIR/core/cmd/jobs_commands_test.go: `.String()`
$DIR/core/cmd/jobs_commands_test.go: `.Format(time.RFC3339)`
$DIR/core/cmd/jobs_commands_test.go: `.Run("gets the tasks from the DAG in reverse order", func(t *testing.T) {
r.PipelineSpec = presenters.PipelineSpec{
DotDAGSource: "ds1 [type=http method=GET url=\"example.com\" allowunrestrictednetworkaccess=\"true\"];\n ds1_parse [type=jsonparse path=\"USD\"];\n ds1_multiply [type=multiply times=100];\n ds1 -\u003e ds1_parse -\u003e ds1_multiply;\n",
}
tasks, err := r.GetTasks()
assert.NoError(t, err)
assert.Equal(t, []string{
"ds1 http",
"ds1_parse jsonparse",
"ds1_multiply multiply",
}, tasks)
})`
$DIR/core/cmd/jobs_commands_test.go: `.GetTasks()`
$DIR/core/cmd/jobs_commands_test.go: `.GetTasks()`
$DIR/core/cmd/jobs_commands_test.go: `.Run("gets the tasks in a printable format", func(t *testing.T) {
r.PipelineSpec = presenters.PipelineSpec{
DotDAGSource: " ds1 [type=http method=GET url=\"example.com\" allowunrestrictednetworkaccess=\"true\"];\n ds1_parse [type=jsonparse path=\"USD\"];\n ds1_multiply [type=multiply times=100];\n ds1 -\u003e ds1_parse -\u003e ds1_multiply;\n",
}
assert.Equal(t, []string{
"ds1 http",
"ds1_parse jsonparse",
"ds1_multiply multiply",
}, r.FriendlyTasks())
})`
$DIR/core/cmd/jobs_commands_test.go: `.Now()`
$DIR/core/cmd/jobs_commands_test.go: `.Format(time.RFC3339)`
$DIR/core/cmd/jobs_commands_test.go: `.Format(time.RFC3339)`
$DIR/core/cmd/jobs_commands_test.go: `.Format(time.RFC3339)`
$DIR/core/cmd/jobs_commands_test.go: `.Format(time.RFC3339)`
$DIR/core/cmd/jobs_commands_test.go: `.Format(time.RFC3339)`
$DIR/core/cmd/jobs_commands_test.go: `.Format(time.RFC3339)`
$DIR/core/cmd/jobs_commands_test.go: `.Format(time.RFC3339)`
$DIR/core/cmd/jobs_commands_test.go: `.Run(tc.name, func(t *testing.T) {
assert.Equal(t, tc.result, tc.job.FriendlyCreatedAt())
})`
$DIR/core/cmd/jobs_commands_test.go: `.Now()`
$DIR/core/cmd/jobs_commands_test.go: `.NewJAID("1")`
$DIR/core/cmd/jobs_commands_test.go: `.Format(time.RFC3339)`
$DIR/core/cmd/jobs_commands_test.go: `.ToRows()`
$DIR/core/cmd/jobs_commands_test.go: `.NewShellAndRenderer()`
$DIR/core/cmd/jobs_commands_test.go: `.NewFlagSet("", flag.ExitOnError)`
$DIR/core/cmd/jobs_commands_test.go: `.CreateJob(cli.NewContext(nil, fs, nil))`
$DIR/core/cmd/jobs_commands_test.go: `.NewContext(nil, fs, nil)`
$DIR/core/cmd/jobs_commands_test.go: `.NewShellAndRenderer()`
$DIR/core/cmd/jobs_commands_test.go: `.NewFlagSet("", flag.ExitOnError)`
$DIR/core/cmd/jobs_commands_test.go: `.CreateJob(cli.NewContext(nil, fs, nil))`
$DIR/core/cmd/jobs_commands_test.go: `.NewContext(nil, fs, nil)`
$DIR/core/cmd/jobs_commands_test.go: `.NewFlagSet("test", 0)`
$DIR/core/cmd/jobs_commands_test.go: `.Parse([]string{createOutput.ID})`
$DIR/core/cmd/jobs_commands_test.go: `.NewContext(nil, set, nil)`
$DIR/core/cmd/jobs_commands_test.go: `.MustNewDuration(100 * time.Millisecond)`
$DIR/core/cmd/jobs_commands_test.go: `.Sprintf("127.0.0.1:%d", freeport.GetOne(t))`
$DIR/core/cmd/jobs_commands_test.go: `.GetOne(t)`
$DIR/core/cmd/jobs_commands_test.go: `.NewShellAndRenderer()`
$DIR/core/cmd/jobs_commands_test.go: `.JobORM()`
$DIR/core/cmd/jobs_commands_test.go: `.NewFlagSet("", flag.ExitOnError)`
$DIR/core/cmd/jobs_commands_test.go: `.New()`
$DIR/core/cmd/jobs_commands_test.go: `.Sprintf(ocrBootstrapSpec, nameAndExternalJobID, nameAndExternalJobID)`
$DIR/core/cmd/jobs_commands_test.go: `.CreateJob(cli.NewContext(nil, fs, nil))`
$DIR/core/cmd/jobs_commands_test.go: `.NewContext(nil, fs, nil)`
$DIR/core/cmd/jobs_commands_test.go: `.JobORM()`
$DIR/core/cmd/jobs_commands_test.go: `.OffChainReportingSpec.ContractAddress.String()`
$DIR/core/cmd/jobs_commands_test.go: `.MustNewDuration(100 * time.Millisecond)`
$DIR/core/cmd/jobs_commands_test.go: `.NewShellAndRenderer()`
$DIR/core/cmd/jobs_commands_test.go: `.NewFlagSet("", flag.ExitOnError)`
$DIR/core/cmd/jobs_commands_test.go: `.CreateJob(cli.NewContext(nil, fs, nil))`
$DIR/core/cmd/jobs_commands_test.go: `.NewContext(nil, fs, nil)`
$DIR/core/cmd/jobs_commands_test.go: `.JobORM()`
$DIR/core/cmd/jobs_commands_test.go: `.Context(t)`
$DIR/core/cmd/jobs_commands_test.go: `.JobORM()`
$DIR/core/cmd/jobs_commands_test.go: `.FindJobs(ctx, 0, 1000)`
$DIR/core/cmd/jobs_commands_test.go: `.AwaitJobActive(t, app.JobSpawner(), jobID, 3*time.Second)`
$DIR/core/cmd/jobs_commands_test.go: `.JobSpawner()`
$DIR/core/cmd/jobs_commands_test.go: `.NewFlagSet("test", 0)`
$DIR/core/cmd/jobs_commands_test.go: `.NewContext(nil, set, nil)`
$DIR/core/cmd/jobs_commands_test.go: `.NewFlagSet("test", 0)`
$DIR/core/cmd/jobs_commands_test.go: `.NewContext(nil, set, nil)`
$DIR/core/cmd/jobs_commands_test.go: `.JobORM()`
$DIR/core/cmd/ocr2_keys_commands_test.go: `buffer.Reset()`
$DIR/core/cmd/ocr2_keys_commands_test.go: `output = buffer.String()`
$DIR/core/cmd/ocr2_keys_commands_test.go: `pubKeyConfig = key.ConfigEncryptionPublicKey()`
$DIR/core/cmd/ocr2_keys_commands_test.go: `requireOCR2KeyCount(t, app, 0)`
$DIR/core/cmd/ocr2_keys_commands_test.go: `t.Run("ListOCR2KeyBundles", func(tt *testing.T) {
defer cleanup()
ctx := testutils.Context(t)
client, r := app.NewShellAndRenderer()
key, err := app.GetKeyStore().OCR2().Create(ctx, "evm")
require.NoError(t, err)
requireOCR2KeyCount(t, app, 1)
assert.Nil(t, client.ListOCR2KeyBundles(cltest.EmptyCLIContext()))
require.Equal(t, 1, len(r.Renders))
output := *r.Renders[0].(*cmd.OCR2KeyBundlePresenters)
require.Equal(t, key.ID(), output[0].ID)
})`
$DIR/core/cmd/ocr2_keys_commands_test.go: `requireOCR2KeyCount(t, app, 1)`
$DIR/core/cmd/ocr2_keys_commands_test.go: `t.Run("CreateOCR2KeyBundle", func(tt *testing.T) {
defer cleanup()
client, r := app.NewShellAndRenderer()
set := flag.NewFlagSet("test", 0)
flagSetApplyFromAction(client.CreateOCR2KeyBundle, set, "")
require.NoError(tt, set.Parse([]string{"evm"}))
c := cli.NewContext(nil, set, nil)
require.NoError(t, client.CreateOCR2KeyBundle(c))
keys, err := app.GetKeyStore().OCR2().GetAll()
require.NoError(t, err)
require.Len(t, keys, 1)
require.Equal(t, 1, len(r.Renders))
output := (*r.Renders[0].(*cmd.OCR2KeyBundlePresenter))
require.Equal(t, output.ID, keys[0].ID())
})`
$DIR/core/cmd/ocr2_keys_commands_test.go: `flagSetApplyFromAction(client.CreateOCR2KeyBundle, set, "")`
$DIR/core/cmd/ocr2_keys_commands_test.go: `t.Run("DeleteOCR2KeyBundle", func(tt *testing.T) {
defer cleanup()
ctx := testutils.Context(t)
client, r := app.NewShellAndRenderer()
key, err := app.GetKeyStore().OCR2().Create(ctx, "evm")
require.NoError(t, err)
requireOCR2KeyCount(t, app, 1)
set := flag.NewFlagSet("test", 0)
flagSetApplyFromAction(client.DeleteOCR2KeyBundle, set, "")
require.NoError(tt, set.Parse([]string{key.ID()}))
require.NoError(tt, set.Set("yes", "true"))
c := cli.NewContext(nil, set, nil)
require.NoError(t, client.DeleteOCR2KeyBundle(c))
requireOCR2KeyCount(t, app, 0)
require.Equal(t, 1, len(r.Renders))
output := *r.Renders[0].(*cmd.OCR2KeyBundlePresenter)
assert.Equal(t, key.ID(), output.ID)
})`
$DIR/core/cmd/ocr2_keys_commands_test.go: `requireOCR2KeyCount(t, app, 1)`
$DIR/core/cmd/ocr2_keys_commands_test.go: `flagSetApplyFromAction(client.DeleteOCR2KeyBundle, set, "")`
$DIR/core/cmd/ocr2_keys_commands_test.go: `requireOCR2KeyCount(t, app, 0)`
$DIR/core/cmd/ocr2_keys_commands_test.go: `flagSetApplyFromAction(client.ExportOCR2Key, set, "")`
$DIR/core/cmd/ocr2_keys_commands_test.go: `err = client.ExportOCR2Key(c)`
$DIR/core/cmd/ocr2_keys_commands_test.go: `set = flag.NewFlagSet("test OCR2 export", 0)`
$DIR/core/cmd/ocr2_keys_commands_test.go: `flagSetApplyFromAction(client.ExportOCR2Key, set, "")`
$DIR/core/cmd/ocr2_keys_commands_test.go: `c = cli.NewContext(nil, set, nil)`
$DIR/core/cmd/ocr2_keys_commands_test.go: `requireOCR2KeyCount(t, app, 0)`
$DIR/core/cmd/ocr2_keys_commands_test.go: `set = flag.NewFlagSet("test OCR2 import", 0)`
$DIR/core/cmd/ocr2_keys_commands_test.go: `flagSetApplyFromAction(client.ImportOCR2Key, set, "")`
$DIR/core/cmd/ocr2_keys_commands_test.go: `c = cli.NewContext(nil, set, nil)`
$DIR/core/cmd/ocr2_keys_commands_test.go: `requireOCR2KeyCount(t, app, 1)`
$DIR/core/cmd/ocr2_keys_commands_test.go: `.NewBufferString("")`
$DIR/core/cmd/ocr2_keys_commands_test.go: `.ConfigEncryptionPublicKey()`
$DIR/core/cmd/ocr2_keys_commands_test.go: `.OffchainPublicKey()`
$DIR/core/cmd/ocr2_keys_commands_test.go: `.NewJAID(bundleID)`
$DIR/core/cmd/ocr2_keys_commands_test.go: `.NewJAID(key.ID())`
$DIR/core/cmd/ocr2_keys_commands_test.go: `.ID()`
$DIR/core/cmd/ocr2_keys_commands_test.go: `.OnChainPublicKey()`
$DIR/core/cmd/ocr2_keys_commands_test.go: `.EncodeToString(pubKey[:])`
$DIR/core/cmd/ocr2_keys_commands_test.go: `.EncodeToString(pubKeyConfig[:])`
$DIR/core/cmd/ocr2_keys_commands_test.go: `.String()`
$DIR/core/cmd/ocr2_keys_commands_test.go: `.Reset()`
$DIR/core/cmd/ocr2_keys_commands_test.go: `.String()`
$DIR/core/cmd/ocr2_keys_commands_test.go: `.ConfigEncryptionPublicKey()`
$DIR/core/cmd/ocr2_keys_commands_test.go: `.EncodeToString(pubKeyConfig[:])`
$DIR/core/cmd/ocr2_keys_commands_test.go: `.GetKeyStore()`
$DIR/core/cmd/ocr2_keys_commands_test.go: `.OCR2()`
$DIR/core/cmd/ocr2_keys_commands_test.go: `.Background()`
$DIR/core/cmd/ocr2_keys_commands_test.go: `.GetKeyStore()`
$DIR/core/cmd/ocr2_keys_commands_test.go: `.OCR2()`
$DIR/core/cmd/ocr2_keys_commands_test.go: `.GetAll()`
$DIR/core/cmd/ocr2_keys_commands_test.go: `.Run("ListOCR2KeyBundles", func(tt *testing.T) {
defer cleanup()
ctx := testutils.Context(t)
client, r := app.NewShellAndRenderer()
key, err := app.GetKeyStore().OCR2().Create(ctx, "evm")
require.NoError(t, err)
requireOCR2KeyCount(t, app, 1)
assert.Nil(t, client.ListOCR2KeyBundles(cltest.EmptyCLIContext()))
require.Equal(t, 1, len(r.Renders))
output := *r.Renders[0].(*cmd.OCR2KeyBundlePresenters)
require.Equal(t, key.ID(), output[0].ID)
})`
$DIR/core/cmd/ocr2_keys_commands_test.go: `.Context(t)`
$DIR/core/cmd/ocr2_keys_commands_test.go: `.NewShellAndRenderer()`
$DIR/core/cmd/ocr2_keys_commands_test.go: `.GetKeyStore()`
$DIR/core/cmd/ocr2_keys_commands_test.go: `.OCR2()`
$DIR/core/cmd/ocr2_keys_commands_test.go: `.Create(ctx, "evm")`
$DIR/core/cmd/ocr2_keys_commands_test.go: `.Run("CreateOCR2KeyBundle", func(tt *testing.T) {
defer cleanup()
client, r := app.NewShellAndRenderer()
set := flag.NewFlagSet("test", 0)
flagSetApplyFromAction(client.CreateOCR2KeyBundle, set, "")
require.NoError(tt, set.Parse([]string{"evm"}))
c := cli.NewContext(nil, set, nil)
require.NoError(t, client.CreateOCR2KeyBundle(c))
keys, err := app.GetKeyStore().OCR2().GetAll()
require.NoError(t, err)
require.Len(t, keys, 1)
require.Equal(t, 1, len(r.Renders))
output := (*r.Renders[0].(*cmd.OCR2KeyBundlePresenter))
require.Equal(t, output.ID, keys[0].ID())
})`
$DIR/core/cmd/ocr2_keys_commands_test.go: `.NewShellAndRenderer()`
$DIR/core/cmd/ocr2_keys_commands_test.go: `.NewFlagSet("test", 0)`
$DIR/core/cmd/ocr2_keys_commands_test.go: `.NewContext(nil, set, nil)`
$DIR/core/cmd/ocr2_keys_commands_test.go: `.GetKeyStore()`
$DIR/core/cmd/ocr2_keys_commands_test.go: `.OCR2()`
$DIR/core/cmd/ocr2_keys_commands_test.go: `.GetAll()`
$DIR/core/cmd/ocr2_keys_commands_test.go: `.Run("DeleteOCR2KeyBundle", func(tt *testing.T) {
defer cleanup()
ctx := testutils.Context(t)
client, r := app.NewShellAndRenderer()
key, err := app.GetKeyStore().OCR2().Create(ctx, "evm")
require.NoError(t, err)
requireOCR2KeyCount(t, app, 1)
set := flag.NewFlagSet("test", 0)
flagSetApplyFromAction(client.DeleteOCR2KeyBundle, set, "")
require.NoError(tt, set.Parse([]string{key.ID()}))
require.NoError(tt, set.Set("yes", "true"))
c := cli.NewContext(nil, set, nil)
require.NoError(t, client.DeleteOCR2KeyBundle(c))
requireOCR2KeyCount(t, app, 0)
require.Equal(t, 1, len(r.Renders))
output := *r.Renders[0].(*cmd.OCR2KeyBundlePresenter)
assert.Equal(t, key.ID(), output.ID)
})`
$DIR/core/cmd/ocr2_keys_commands_test.go: `.Context(t)`
$DIR/core/cmd/ocr2_keys_commands_test.go: `.NewShellAndRenderer()`
$DIR/core/cmd/ocr2_keys_commands_test.go: `.GetKeyStore()`
$DIR/core/cmd/ocr2_keys_commands_test.go: `.OCR2()`
$DIR/core/cmd/ocr2_keys_commands_test.go: `.Create(ctx, "evm")`
$DIR/core/cmd/ocr2_keys_commands_test.go: `.NewFlagSet("test", 0)`
$DIR/core/cmd/ocr2_keys_commands_test.go: `.NewContext(nil, set, nil)`
$DIR/core/cmd/ocr2_keys_commands_test.go: `.Context(t)`
$DIR/core/cmd/ocr2_keys_commands_test.go: `.NewShellAndRenderer()`
$DIR/core/cmd/ocr2_keys_commands_test.go: `.KeyStore.OCR2()`
$DIR/core/cmd/ocr2_keys_commands_test.go: `.Add(ctx, cltest.DefaultOCR2Key)`
$DIR/core/cmd/ocr2_keys_commands_test.go: `.NewFlagSet("test OCR2 export", 0)`
$DIR/core/cmd/ocr2_keys_commands_test.go: `.NewContext(nil, set, nil)`
$DIR/core/cmd/ocr2_keys_commands_test.go: `.ExportOCR2Key(c)`
$DIR/core/cmd/ocr2_keys_commands_test.go: `.NewFlagSet("test OCR2 export", 0)`
$DIR/core/cmd/ocr2_keys_commands_test.go: `.NewContext(nil, set, nil)`
$DIR/core/cmd/ocr2_keys_commands_test.go: `.NewFlagSet("test OCR2 import", 0)`
$DIR/core/cmd/ocr2_keys_commands_test.go: `.NewContext(nil, set, nil)`
$DIR/core/cmd/ocr_keys_commands_test.go: `buffer.Reset()`
$DIR/core/cmd/ocr_keys_commands_test.go: `output = buffer.String()`
$DIR/core/cmd/ocr_keys_commands_test.go: `pubKeyConfig = key.PublicKeyConfig()`
$DIR/core/cmd/ocr_keys_commands_test.go: `requireOCRKeyCount(t, app, 1)`
$DIR/core/cmd/ocr_keys_commands_test.go: `requireOCRKeyCount(t, app, 0)`
$DIR/core/cmd/ocr_keys_commands_test.go: `requireOCRKeyCount(t, app, 1)`
$DIR/core/cmd/ocr_keys_commands_test.go: `flagSetApplyFromAction(client.DeleteOCRKeyBundle, set, "")`
$DIR/core/cmd/ocr_keys_commands_test.go: `requireOCRKeyCount(t, app, 0)`
$DIR/core/cmd/ocr_keys_commands_test.go: `flagSetApplyFromAction(client.ExportOCRKey, set, "")`
$DIR/core/cmd/ocr_keys_commands_test.go: `set = flag.NewFlagSet("test OCR export", 0)`
$DIR/core/cmd/ocr_keys_commands_test.go: `flagSetApplyFromAction(client.ExportOCRKey, set, "")`
$DIR/core/cmd/ocr_keys_commands_test.go: `c = cli.NewContext(nil, set, nil)`
$DIR/core/cmd/ocr_keys_commands_test.go: `requireOCRKeyCount(t, app, 0)`
$DIR/core/cmd/ocr_keys_commands_test.go: `set = flag.NewFlagSet("test OCR import", 0)`
$DIR/core/cmd/ocr_keys_commands_test.go: `flagSetApplyFromAction(client.ImportOCRKey, set, "")`
$DIR/core/cmd/ocr_keys_commands_test.go: `c = cli.NewContext(nil, set, nil)`
$DIR/core/cmd/ocr_keys_commands_test.go: `.NewBufferString("")`
$DIR/core/cmd/ocr_keys_commands_test.go: `.NewJAID(key.ID())`
$DIR/core/cmd/ocr_keys_commands_test.go: `.ID()`
$DIR/core/cmd/ocr_keys_commands_test.go: `.OnChainSigning.Address()`
$DIR/core/cmd/ocr_keys_commands_test.go: `.OffChainSigning.PublicKey()`
$DIR/core/cmd/ocr_keys_commands_test.go: `.PublicKeyConfig()`
$DIR/core/cmd/ocr_keys_commands_test.go: `.String()`
$DIR/core/cmd/ocr_keys_commands_test.go: `.PublicKeyConfig()`
$DIR/core/cmd/ocr_keys_commands_test.go: `.Reset()`
$DIR/core/cmd/ocr_keys_commands_test.go: `.String()`
$DIR/core/cmd/ocr_keys_commands_test.go: `.PublicKeyConfig()`
$DIR/core/cmd/ocr_keys_commands_test.go: `.EncodeToString(pubKeyConfig[:])`
$DIR/core/cmd/ocr_keys_commands_test.go: `.Context(t)`
$DIR/core/cmd/ocr_keys_commands_test.go: `.NewShellAndRenderer()`
$DIR/core/cmd/ocr_keys_commands_test.go: `.GetKeyStore()`
$DIR/core/cmd/ocr_keys_commands_test.go: `.OCR()`
$DIR/core/cmd/ocr_keys_commands_test.go: `.Create(ctx)`
$DIR/core/cmd/ocr_keys_commands_test.go: `.ID()`
$DIR/core/cmd/ocr_keys_commands_test.go: `.NewShellAndRenderer()`
$DIR/core/cmd/ocr_keys_commands_test.go: `.GetKeyStore()`
$DIR/core/cmd/ocr_keys_commands_test.go: `.OCR()`
$DIR/core/cmd/ocr_keys_commands_test.go: `.GetAll()`
$DIR/core/cmd/ocr_keys_commands_test.go: `.ID()`
$DIR/core/cmd/ocr_keys_commands_test.go: `.Context(t)`
$DIR/core/cmd/ocr_keys_commands_test.go: `.NewShellAndRenderer()`
$DIR/core/cmd/ocr_keys_commands_test.go: `.GetKeyStore()`
$DIR/core/cmd/ocr_keys_commands_test.go: `.OCR()`
$DIR/core/cmd/ocr_keys_commands_test.go: `.Create(ctx)`
$DIR/core/cmd/ocr_keys_commands_test.go: `.NewFlagSet("test", 0)`
$DIR/core/cmd/ocr_keys_commands_test.go: `.NewContext(nil, set, nil)`
$DIR/core/cmd/ocr_keys_commands_test.go: `.ID()`
$DIR/core/cmd/ocr_keys_commands_test.go: `.Context(t)`
$DIR/core/cmd/ocr_keys_commands_test.go: `.NewShellAndRenderer()`
$DIR/core/cmd/ocr_keys_commands_test.go: `.NewFlagSet("test OCR export", 0)`
$DIR/core/cmd/ocr_keys_commands_test.go: `.NewContext(nil, set, nil)`
$DIR/core/cmd/ocr_keys_commands_test.go: `.ExportOCRKey(c)`
$DIR/core/cmd/ocr_keys_commands_test.go: `.NewFlagSet("test OCR export", 0)`
$DIR/core/cmd/ocr_keys_commands_test.go: `.NewContext(nil, set, nil)`
$DIR/core/cmd/ocr_keys_commands_test.go: `.NewFlagSet("test OCR import", 0)`
$DIR/core/cmd/ocr_keys_commands_test.go: `.NewContext(nil, set, nil)`
$DIR/core/cmd/p2p_keys_commands_test.go: `buffer.Reset()`
$DIR/core/cmd/p2p_keys_commands_test.go: `output = buffer.String()`
$DIR/core/cmd/p2p_keys_commands_test.go: `requireP2PKeyCount(t, app, 1)`
$DIR/core/cmd/p2p_keys_commands_test.go: `requireP2PKeyCount(t, app, 1)`
$DIR/core/cmd/p2p_keys_commands_test.go: `flagSetApplyFromAction(client.DeleteP2PKey, set, "")`
$DIR/core/cmd/p2p_keys_commands_test.go: `err = set.Parse([]string{strID})`
$DIR/core/cmd/p2p_keys_commands_test.go: `err = client.DeleteP2PKey(c)`
$DIR/core/cmd/p2p_keys_commands_test.go: `flagSetApplyFromAction(client.ExportP2PKey, set, "")`
$DIR/core/cmd/p2p_keys_commands_test.go: `err = client.ExportP2PKey(c)`
$DIR/core/cmd/p2p_keys_commands_test.go: `set = flag.NewFlagSet("test P2P export", 0)`
$DIR/core/cmd/p2p_keys_commands_test.go: `flagSetApplyFromAction(client.ExportP2PKey, set, "")`
$DIR/core/cmd/p2p_keys_commands_test.go: `c = cli.NewContext(nil, set, nil)`
$DIR/core/cmd/p2p_keys_commands_test.go: `requireP2PKeyCount(t, app, 0)`
$DIR/core/cmd/p2p_keys_commands_test.go: `set = flag.NewFlagSet("test P2P import", 0)`
$DIR/core/cmd/p2p_keys_commands_test.go: `flagSetApplyFromAction(client.ImportP2PKey, set, "")`
$DIR/core/cmd/p2p_keys_commands_test.go: `c = cli.NewContext(nil, set, nil)`
$DIR/core/cmd/p2p_keys_commands_test.go: `.NewBufferString("")`
$DIR/core/cmd/p2p_keys_commands_test.go: `.NewJAID(id)`
$DIR/core/cmd/p2p_keys_commands_test.go: `.String()`
$DIR/core/cmd/p2p_keys_commands_test.go: `.Reset()`
$DIR/core/cmd/p2p_keys_commands_test.go: `.String()`
$DIR/core/cmd/p2p_keys_commands_test.go: `.Context(t)`
$DIR/core/cmd/p2p_keys_commands_test.go: `.GetKeyStore()`
$DIR/core/cmd/p2p_keys_commands_test.go: `.P2P()`
$DIR/core/cmd/p2p_keys_commands_test.go: `.Create(ctx)`
$DIR/core/cmd/p2p_keys_commands_test.go: `.NewShellAndRenderer()`
$DIR/core/cmd/p2p_keys_commands_test.go: `.PublicKeyHex()`
$DIR/core/cmd/p2p_keys_commands_test.go: `.NewShellAndRenderer()`
$DIR/core/cmd/p2p_keys_commands_test.go: `.GetKeyStore()`
$DIR/core/cmd/p2p_keys_commands_test.go: `.P2P()`
$DIR/core/cmd/p2p_keys_commands_test.go: `.GetAll()`
$DIR/core/cmd/p2p_keys_commands_test.go: `.Context(t)`
$DIR/core/cmd/p2p_keys_commands_test.go: `.NewShellAndRenderer()`
$DIR/core/cmd/p2p_keys_commands_test.go: `.GetKeyStore()`
$DIR/core/cmd/p2p_keys_commands_test.go: `.P2P()`
$DIR/core/cmd/p2p_keys_commands_test.go: `.Create(ctx)`
$DIR/core/cmd/p2p_keys_commands_test.go: `.NewFlagSet("test", 0)`
$DIR/core/cmd/p2p_keys_commands_test.go: `.ID()`
$DIR/core/cmd/p2p_keys_commands_test.go: `.Parse([]string{strID})`
$DIR/core/cmd/p2p_keys_commands_test.go: `.NewContext(nil, set, nil)`
$DIR/core/cmd/p2p_keys_commands_test.go: `.DeleteP2PKey(c)`
$DIR/core/cmd/p2p_keys_commands_test.go: `.Context(t)`
$DIR/core/cmd/p2p_keys_commands_test.go: `.NewShellAndRenderer()`
$DIR/core/cmd/p2p_keys_commands_test.go: `.GetKeyStore()`
$DIR/core/cmd/p2p_keys_commands_test.go: `.P2P()`
$DIR/core/cmd/p2p_keys_commands_test.go: `.Create(ctx)`
$DIR/core/cmd/p2p_keys_commands_test.go: `.NewFlagSet("test P2P export", 0)`
$DIR/core/cmd/p2p_keys_commands_test.go: `.NewContext(nil, set, nil)`
$DIR/core/cmd/p2p_keys_commands_test.go: `.ExportP2PKey(c)`
$DIR/core/cmd/p2p_keys_commands_test.go: `.NewFlagSet("test P2P export", 0)`
$DIR/core/cmd/p2p_keys_commands_test.go: `.NewContext(nil, set, nil)`
$DIR/core/cmd/p2p_keys_commands_test.go: `.NewFlagSet("test P2P import", 0)`
$DIR/core/cmd/p2p_keys_commands_test.go: `.NewContext(nil, set, nil)`
$DIR/core/cmd/presenters_test.go: `t.Run("GetID", func(t *testing.T) { assert.Equal(t, "1", jaid.GetID()) })`
$DIR/core/cmd/presenters_test.go: `.Run("GetID", func(t *testing.T) { assert.Equal(t, "1", jaid.GetID()) })`
$DIR/core/cmd/presenters_test.go: `.SetID("2")`
$DIR/core/cmd/renderer_test.go: `t.Run("effective", func(t *testing.T) {
resp, cleanup := client.Get("/v2/config/v2")
t.Cleanup(cleanup)
var effective web.ConfigV2Resource
require.NoError(t, cltest.ParseJSONAPIResponse(t, resp, &effective))
assert.Equal(t, wantEffective, effective.Config)
})`
$DIR/core/cmd/renderer_test.go: `t.Cleanup(cleanup)`
$DIR/core/cmd/renderer_test.go: `t.Cleanup(cleanup)`
$DIR/core/cmd/renderer_test.go: `t.Run(test.name, func(t *testing.T) {
tw := &testWriter{test.content, t, false}
r := cmd.RendererTable{Writer: tw}
assert.NoError(t, r.Render(&eia))
assert.True(t, tw.found)
})`
$DIR/core/cmd/renderer_test.go: `.Render(&keys)`
$DIR/core/cmd/renderer_test.go: `.NewApplicationEVMDisabled(t)`
$DIR/core/cmd/renderer_test.go: `.Config.ConfigTOML()`
$DIR/core/cmd/renderer_test.go: `.NewHTTPClient(nil)`
$DIR/core/cmd/renderer_test.go: `.Run("effective", func(t *testing.T) {
resp, cleanup := client.Get("/v2/config/v2")
t.Cleanup(cleanup)
var effective web.ConfigV2Resource
require.NoError(t, cltest.ParseJSONAPIResponse(t, resp, &effective))
assert.Equal(t, wantEffective, effective.Config)
})`
$DIR/core/cmd/renderer_test.go: `.Get("/v2/config/v2")`
$DIR/core/cmd/renderer_test.go: `.Cleanup(cleanup)`
$DIR/core/cmd/renderer_test.go: `.Get("/v2/config/v2?userOnly=true")`
$DIR/core/cmd/renderer_test.go: `.Cleanup(cleanup)`
$DIR/core/cmd/renderer_test.go: `.WebURL(t, "http://localhost:8888")`
$DIR/core/cmd/renderer_test.go: `.URL.String()`
$DIR/core/cmd/renderer_test.go: `.Run(test.name, func(t *testing.T) {
tw := &testWriter{test.content, t, false}
r := cmd.RendererTable{Writer: tw}
assert.NoError(t, r.Render(&eia))
assert.True(t, tw.found)
})`
$DIR/core/cmd/renderer_test.go: `.Render(&anon)`
$DIR/core/cmd/shell_local_test.go: `t.Run(test.name, func(t *testing.T) {
cfg := configtest.NewGeneralConfig(t, func(c *chainlink.Config, s *chainlink.Secrets) {
s.Password.Keystore = models.NewSecret("dummy")
c.EVM[0].Nodes[0].Name = ptr("fake")
c.EVM[0].Nodes[0].HTTPURL = commonconfig.MustParseURL("http://fake.com")
c.EVM[0].Nodes[0].WSURL = commonconfig.MustParseURL("WSS://fake.com/ws")
// seems to be needed for config validate
c.Insecure.OCRDevelopmentMode = nil
})
db := pgtest.NewSqlxDB(t)
keyStore := cltest.NewKeyStore(t, db)
authProviderORM := localauth.NewORM(db, time.Minute, logger.TestLogger(t), audit.NoopLogger)
lggr := logger.TestLogger(t)
opts := legacyevm.ChainRelayExtenderConfig{
Logger: lggr,
KeyStore: keyStore.Eth(),
ChainOpts: legacyevm.ChainOpts{
AppConfig: cfg,
MailMon: &mailbox.Monitor{},
DS: db,
},
}
testRelayers := genTestEVMRelayers(t, opts, keyStore)
// Purge the fixture users to test assumption of single admin
// initialUser user created above
pgtest.MustExec(t, db, "DELETE FROM users;")
app := mocks.NewApplication(t)
app.On("AuthenticationProvider").Return(authProviderORM).Maybe()
app.On("BasicAdminUsersORM").Return(authProviderORM).Maybe()
app.On("GetKeyStore").Return(keyStore).Maybe()
app.On("GetRelayers").Return(testRelayers).Maybe()
app.On("Start", mock.Anything).Maybe().Return(nil)
app.On("Stop").Maybe().Return(nil)
app.On("ID").Maybe().Return(uuid.New())
ethClient := evmtest.NewEthClientMock(t)
ethClient.On("Dial", mock.Anything).Return(nil).Maybe()
ethClient.On("BalanceAt", mock.Anything, mock.Anything, mock.Anything).Return(big.NewInt(10), nil).Maybe()
cltest.MustInsertRandomKey(t, keyStore.Eth())
apiPrompt := cltest.NewMockAPIInitializer(t)
client := cmd.Shell{
Config: cfg,
FallbackAPIInitializer: apiPrompt,
Runner: cltest.EmptyRunner{},
AppFactory: cltest.InstanceAppFactory{App: app},
Logger: lggr,
}
set := flag.NewFlagSet("test", 0)
flagSetApplyFromAction(client.RunNode, set, "")
require.NoError(t, set.Set("password", test.pwdfile))
c := cli.NewContext(nil, set, nil)
run := func() error {
cli := cmd.NewApp(&client)
if err := cli.Before(c); err != nil {
return err
}
return client.RunNode(c)
}
if test.wantUnlocked {
assert.NoError(t, run())
assert.Equal(t, 1, apiPrompt.Count)
} else {
assert.Error(t, run())
assert.Equal(t, 0, apiPrompt.Count)
}
})`
$DIR/core/cmd/shell_local_test.go: `s.Password.Keystore = models.NewSecret("dummy")`
$DIR/core/cmd/shell_local_test.go: `c.EVM[0].Nodes[0].Name = ptr("fake")`
$DIR/core/cmd/shell_local_test.go: `c.EVM[0].Nodes[0].HTTPURL = commonconfig.MustParseURL("http://fake.com")`
$DIR/core/cmd/shell_local_test.go: `c.EVM[0].Nodes[0].WSURL = commonconfig.MustParseURL("WSS://fake.com/ws")`
$DIR/core/cmd/shell_local_test.go: `c.Insecure.OCRDevelopmentMode = nil`
$DIR/core/cmd/shell_local_test.go: `pgtest.MustExec(t, db, "DELETE FROM users;")`
$DIR/core/cmd/shell_local_test.go: `app.On("AuthenticationProvider").Return(authProviderORM).Maybe()`
$DIR/core/cmd/shell_local_test.go: `app.On("BasicAdminUsersORM").Return(authProviderORM).Maybe()`
$DIR/core/cmd/shell_local_test.go: `app.On("GetKeyStore").Return(keyStore).Maybe()`
$DIR/core/cmd/shell_local_test.go: `app.On("GetRelayers").Return(testRelayers).Maybe()`
$DIR/core/cmd/shell_local_test.go: `app.On("Start", mock.Anything).Maybe().Return(nil)`
$DIR/core/cmd/shell_local_test.go: `app.On("Stop").Maybe().Return(nil)`
$DIR/core/cmd/shell_local_test.go: `app.On("ID").Maybe().Return(uuid.New())`
$DIR/core/cmd/shell_local_test.go: `ethClient.On("Dial", mock.Anything).Return(nil).Maybe()`
$DIR/core/cmd/shell_local_test.go: `ethClient.On("BalanceAt", mock.Anything, mock.Anything, mock.Anything).Return(big.NewInt(10), nil).Maybe()`
$DIR/core/cmd/shell_local_test.go: `cltest.MustInsertRandomKey(t, keyStore.Eth())`
$DIR/core/cmd/shell_local_test.go: `flagSetApplyFromAction(client.RunNode, set, "")`
$DIR/core/cmd/shell_local_test.go: `t.Run(test.name, func(t *testing.T) {
cfg := configtest.NewGeneralConfig(t, func(c *chainlink.Config, s *chainlink.Secrets) {
s.Password.Keystore = models.NewSecret("16charlengthp4SsW0rD1!@#_")
c.EVM[0].Nodes[0].Name = ptr("fake")
c.EVM[0].Nodes[0].WSURL = commonconfig.MustParseURL("WSS://fake.com/ws")
c.EVM[0].Nodes[0].HTTPURL = commonconfig.MustParseURL("http://fake.com")
// seems to be needed for config validate
c.Insecure.OCRDevelopmentMode = nil
})
db := pgtest.NewSqlxDB(t)
authProviderORM := localauth.NewORM(db, time.Minute, logger.TestLogger(t), audit.NoopLogger)
// Clear out fixture users/users created from the other test cases
// This asserts that on initial run with an empty users table that the credentials file will instantiate and
// create/run with a new admin user
pgtest.MustExec(t, db, "DELETE FROM users;")
keyStore := cltest.NewKeyStore(t, db)
_, err := keyStore.Eth().Create(testutils.Context(t), &cltest.FixtureChainID)
require.NoError(t, err)
ethClient := evmtest.NewEthClientMock(t)
ethClient.On("Dial", mock.Anything).Return(nil).Maybe()
ethClient.On("BalanceAt", mock.Anything, mock.Anything, mock.Anything).Return(big.NewInt(10), nil).Maybe()
lggr := logger.TestLogger(t)
opts := legacyevm.ChainRelayExtenderConfig{
Logger: lggr,
KeyStore: keyStore.Eth(),
ChainOpts: legacyevm.ChainOpts{
AppConfig: cfg,
MailMon: &mailbox.Monitor{},
DS: db,
},
}
testRelayers := genTestEVMRelayers(t, opts, keyStore)
app := mocks.NewApplication(t)
app.On("BasicAdminUsersORM").Return(authProviderORM)
app.On("GetKeyStore").Return(keyStore)
app.On("GetRelayers").Return(testRelayers).Maybe()
app.On("Start", mock.Anything).Maybe().Return(nil)
app.On("Stop").Maybe().Return(nil)
app.On("ID").Maybe().Return(uuid.New())
prompter := cmdMocks.NewPrompter(t)
apiPrompt := cltest.NewMockAPIInitializer(t)
client := cmd.Shell{
Config: cfg,
AppFactory: cltest.InstanceAppFactory{App: app},
KeyStoreAuthenticator: cmd.TerminalKeyStoreAuthenticator{prompter},
FallbackAPIInitializer: apiPrompt,
Runner: cltest.EmptyRunner{},
Logger: lggr,
}
set := flag.NewFlagSet("test", 0)
flagSetApplyFromAction(client.RunNode, set, "")
require.NoError(t, set.Set("api", test.apiFile))
c := cli.NewContext(nil, set, nil)
if test.wantError {
err = client.RunNode(c)
assert.ErrorContains(t, err, "error creating api initializer: open doesntexist.txt: no such file or directory")
} else {
assert.NoError(t, client.RunNode(c))
}
assert.Equal(t, test.wantPrompt, apiPrompt.Count > 0)
})`
$DIR/core/cmd/shell_local_test.go: `s.Password.Keystore = models.NewSecret("16charlengthp4SsW0rD1!@#_")`
$DIR/core/cmd/shell_local_test.go: `c.EVM[0].Nodes[0].Name = ptr("fake")`
$DIR/core/cmd/shell_local_test.go: `c.EVM[0].Nodes[0].WSURL = commonconfig.MustParseURL("WSS://fake.com/ws")`
$DIR/core/cmd/shell_local_test.go: `c.EVM[0].Nodes[0].HTTPURL = commonconfig.MustParseURL("http://fake.com")`
$DIR/core/cmd/shell_local_test.go: `c.Insecure.OCRDevelopmentMode = nil`
$DIR/core/cmd/shell_local_test.go: `pgtest.MustExec(t, db, "DELETE FROM users;")`
$DIR/core/cmd/shell_local_test.go: `ethClient.On("Dial", mock.Anything).Return(nil).Maybe()`
$DIR/core/cmd/shell_local_test.go: `ethClient.On("BalanceAt", mock.Anything, mock.Anything, mock.Anything).Return(big.NewInt(10), nil).Maybe()`
$DIR/core/cmd/shell_local_test.go: `app.On("BasicAdminUsersORM").Return(authProviderORM)`
$DIR/core/cmd/shell_local_test.go: `app.On("GetKeyStore").Return(keyStore)`
$DIR/core/cmd/shell_local_test.go: `app.On("GetRelayers").Return(testRelayers).Maybe()`
$DIR/core/cmd/shell_local_test.go: `app.On("Start", mock.Anything).Maybe().Return(nil)`
$DIR/core/cmd/shell_local_test.go: `app.On("Stop").Maybe().Return(nil)`
$DIR/core/cmd/shell_local_test.go: `app.On("ID").Maybe().Return(uuid.New())`
$DIR/core/cmd/shell_local_test.go: `flagSetApplyFromAction(client.RunNode, set, "")`
$DIR/core/cmd/shell_local_test.go: `err = client.RunNode(c)`
$DIR/core/cmd/shell_local_test.go: `t.Run(tt.name, func(t *testing.T) {
cfg := logger.Config{
Dir: t.TempDir(),
FileMaxSizeMB: int(tt.logFileSize(t) / utils.MB),
}
assert.NoError(t, os.MkdirAll(cfg.Dir, os.FileMode(0700)))
lggr, closeFn := cfg.New()
t.Cleanup(func() { assert.NoError(t, closeFn()) })
// Tries to create a log file by logging. The log file won't be created if there's no logging happening.
lggr.Debug("Trying to create a log file by logging.")
_, err := os.Stat(cfg.LogsFile())
require.Equal(t, os.IsNotExist(err), !tt.fileShouldExist)
})`
$DIR/core/cmd/shell_local_test.go: `t.Cleanup(func() { assert.NoError(t, closeFn()) })`
$DIR/core/cmd/shell_local_test.go: `lggr.Debug("Trying to create a log file by logging.")`
$DIR/core/cmd/shell_local_test.go: `c.Database.Dialect = dialects.Postgres`
$DIR/core/cmd/shell_local_test.go: `c.EVM = nil`
$DIR/core/cmd/shell_local_test.go: `c.Insecure.OCRDevelopmentMode = nil`
$DIR/core/cmd/shell_local_test.go: `cltest.MustInsertConfirmedEthTxWithLegacyAttempt(t, txStore, 7, 42, fromAddress)`
$DIR/core/cmd/shell_local_test.go: `app.On("GetDB").Return(sqlxDB)`
$DIR/core/cmd/shell_local_test.go: `app.On("GetKeyStore").Return(keyStore)`
$DIR/core/cmd/shell_local_test.go: `app.On("ID").Maybe().Return(uuid.New())`
$DIR/core/cmd/shell_local_test.go: `app.On("GetConfig").Return(config)`
$DIR/core/cmd/shell_local_test.go: `app.On("GetRelayers").Return(mockRelayerChainInteroperators).Maybe()`
$DIR/core/cmd/shell_local_test.go: `ethClient.On("Dial", mock.Anything).Return(nil)`
$DIR/core/cmd/shell_local_test.go: `flagSetApplyFromAction(c.RebroadcastTransactions, set, "")`
$DIR/core/cmd/shell_local_test.go: `ethClient.On("SendTransactionReturnCode", mock.Anything, mock.MatchedBy(func(tx *gethTypes.Transaction) bool {
return tx.Nonce() == n
}), mock.Anything).Once().Return(client.Successful, nil)`
$DIR/core/cmd/shell_local_test.go: `t.Run(test.name, func(t *testing.T) {
// Use the non-transactional db for this test because we need to
// test multiple connections to the database, and changes made within
// the transaction cannot be seen from another connection.
config, sqlxDB := heavyweight.FullTestDBV2(t, func(c *chainlink.Config, s *chainlink.Secrets) {
c.Database.Dialect = dialects.Postgres
// evm config is used in this test. but if set, it must be pass config validation.
// simplest to make it nil
c.EVM = nil
// seems to be needed for config validate
c.Insecure.OCRDevelopmentMode = nil
})
keyStore := cltest.NewKeyStore(t, sqlxDB)
_, fromAddress := cltest.MustInsertRandomKey(t, keyStore.Eth())
txStore := cltest.NewTestTxStore(t, sqlxDB)
cltest.MustInsertConfirmedEthTxWithLegacyAttempt(t, txStore, int64(test.nonce), 42, fromAddress)
lggr := logger.TestLogger(t)
app := mocks.NewApplication(t)
app.On("GetDB").Return(sqlxDB)
app.On("GetKeyStore").Return(keyStore)
app.On("ID").Maybe().Return(uuid.New())
app.On("GetConfig").Return(config)
ethClient := evmtest.NewEthClientMockWithDefaultChain(t)
ethClient.On("Dial", mock.Anything).Return(nil)
legacy := cltest.NewLegacyChainsWithMockChain(t, ethClient, config)
mockRelayerChainInteroperators := &chainlinkmocks.FakeRelayerChainInteroperators{EVMChains: legacy}
app.On("GetRelayers").Return(mockRelayerChainInteroperators).Maybe()
c := cmd.Shell{
Config: config,
AppFactory: cltest.InstanceAppFactory{App: app},
FallbackAPIInitializer: cltest.NewMockAPIInitializer(t),
Runner: cltest.EmptyRunner{},
Logger: lggr,
}
set := flag.NewFlagSet("test", 0)
flagSetApplyFromAction(c.RebroadcastTransactions, set, "")
require.NoError(t, set.Set("evmChainID", testutils.FixtureChainID.String()))
require.NoError(t, set.Set("beginningNonce", strconv.FormatUint(uint64(beginningNonce), 10)))
require.NoError(t, set.Set("endingNonce", strconv.FormatUint(uint64(endingNonce), 10)))
require.NoError(t, set.Set("gasPriceWei", gasPrice.String()))
require.NoError(t, set.Set("gasLimit", strconv.FormatUint(gasLimit, 10)))
require.NoError(t, set.Set("address", fromAddress.Hex()))
require.NoError(t, set.Set("password", "../internal/fixtures/correct_password.txt"))
ctx := cli.NewContext(nil, set, nil)
for i := beginningNonce; i <= endingNonce; i++ {
n := i
ethClient.On("SendTransactionReturnCode", mock.Anything, mock.MatchedBy(func(tx *gethTypes.Transaction) bool {
return uint(tx.Nonce()) == n
}), mock.Anything).Once().Return(client.Successful, nil)
}
assert.NoError(t, c.RebroadcastTransactions(ctx))
cltest.AssertEthTxAttemptCountStays(t, txStore, 1)
})`
$DIR/core/cmd/shell_local_test.go: `c.Database.Dialect = dialects.Postgres`
$DIR/core/cmd/shell_local_test.go: `c.EVM = nil`
$DIR/core/cmd/shell_local_test.go: `c.Insecure.OCRDevelopmentMode = nil`
$DIR/core/cmd/shell_local_test.go: `cltest.MustInsertConfirmedEthTxWithLegacyAttempt(t, txStore, int64(test.nonce), 42, fromAddress)`
$DIR/core/cmd/shell_local_test.go: `app.On("GetDB").Return(sqlxDB)`
$DIR/core/cmd/shell_local_test.go: `app.On("GetKeyStore").Return(keyStore)`
$DIR/core/cmd/shell_local_test.go: `app.On("ID").Maybe().Return(uuid.New())`
$DIR/core/cmd/shell_local_test.go: `app.On("GetConfig").Return(config)`
$DIR/core/cmd/shell_local_test.go: `ethClient.On("Dial", mock.Anything).Return(nil)`
$DIR/core/cmd/shell_local_test.go: `app.On("GetRelayers").Return(mockRelayerChainInteroperators).Maybe()`
$DIR/core/cmd/shell_local_test.go: `flagSetApplyFromAction(c.RebroadcastTransactions, set, "")`
$DIR/core/cmd/shell_local_test.go: `ethClient.On("SendTransactionReturnCode", mock.Anything, mock.MatchedBy(func(tx *gethTypes.Transaction) bool {
return uint(tx.Nonce()) == n
}), mock.Anything).Once().Return(client.Successful, nil)`
$DIR/core/cmd/shell_local_test.go: `cltest.AssertEthTxAttemptCountStays(t, txStore, 1)`
$DIR/core/cmd/shell_local_test.go: `t.Run(test.name, func(t *testing.T) {
config, sqlxDB := heavyweight.FullTestDBV2(t, func(c *chainlink.Config, s *chainlink.Secrets) {
c.Database.Dialect = dialects.Postgres
c.EVM = nil
// seems to be needed for config validate
c.Insecure.OCRDevelopmentMode = nil
})
keyStore := cltest.NewKeyStore(t, sqlxDB)
_, fromAddress := cltest.MustInsertRandomKey(t, keyStore.Eth())
if !test.enableAddress {
err := keyStore.Eth().Disable(testutils.Context(t), fromAddress, testutils.FixtureChainID)
require.NoError(t, err, "failed to disable test key")
}
lggr := logger.TestLogger(t)
app := mocks.NewApplication(t)
app.On("GetDB").Maybe().Return(sqlxDB)
app.On("GetKeyStore").Return(keyStore)
app.On("ID").Maybe().Return(uuid.New())
ethClient := evmtest.NewEthClientMockWithDefaultChain(t)
ethClient.On("Dial", mock.Anything).Return(nil)
legacy := cltest.NewLegacyChainsWithMockChain(t, ethClient, config)
mockRelayerChainInteroperators := &chainlinkmocks.FakeRelayerChainInteroperators{EVMChains: legacy}
app.On("GetRelayers").Return(mockRelayerChainInteroperators).Maybe()
ethClient.On("SendTransactionReturnCode", mock.Anything, mock.Anything, mock.Anything).Maybe().Return(client.Successful, nil)
client := cmd.Shell{
Config: config,
AppFactory: cltest.InstanceAppFactory{App: app},
FallbackAPIInitializer: cltest.NewMockAPIInitializer(t),
Runner: cltest.EmptyRunner{},
Logger: lggr,
}
set := flag.NewFlagSet("test", 0)
flagSetApplyFromAction(client.RebroadcastTransactions, set, "")
require.NoError(t, set.Set("evmChainID", testutils.FixtureChainID.String()))
require.NoError(t, set.Set("address", fromAddress.Hex()))
require.NoError(t, set.Set("password", "../internal/fixtures/correct_password.txt"))
c := cli.NewContext(nil, set, nil)
if test.shouldError {
require.ErrorContains(t, client.RebroadcastTransactions(c), test.errorContains)
} else {
app.On("GetConfig").Return(config).Once()
require.NoError(t, client.RebroadcastTransactions(c))
}
})`
$DIR/core/cmd/shell_local_test.go: `c.Database.Dialect = dialects.Postgres`
$DIR/core/cmd/shell_local_test.go: `c.EVM = nil`
$DIR/core/cmd/shell_local_test.go: `c.Insecure.OCRDevelopmentMode = nil`
$DIR/core/cmd/shell_local_test.go: `app.On("GetDB").Maybe().Return(sqlxDB)`
$DIR/core/cmd/shell_local_test.go: `app.On("GetKeyStore").Return(keyStore)`
$DIR/core/cmd/shell_local_test.go: `app.On("ID").Maybe().Return(uuid.New())`
$DIR/core/cmd/shell_local_test.go: `ethClient.On("Dial", mock.Anything).Return(nil)`
$DIR/core/cmd/shell_local_test.go: `app.On("GetRelayers").Return(mockRelayerChainInteroperators).Maybe()`
$DIR/core/cmd/shell_local_test.go: `ethClient.On("SendTransactionReturnCode", mock.Anything, mock.Anything, mock.Anything).Maybe().Return(client.Successful, nil)`
$DIR/core/cmd/shell_local_test.go: `flagSetApplyFromAction(client.RebroadcastTransactions, set, "")`
$DIR/core/cmd/shell_local_test.go: `app.On("GetConfig").Return(config).Once()`
$DIR/core/cmd/shell_local_test.go: `c.Database.Dialect = dialects.Postgres`
$DIR/core/cmd/shell_local_test.go: `flagSetApplyFromAction(client.CleanupChainTables, set, "")`
$DIR/core/cmd/shell_local_test.go: `s.Password.Keystore = models.NewSecret("dummy")`
$DIR/core/cmd/shell_local_test.go: `c.EVM[0].Nodes[0].Name = ptr("fake")`
$DIR/core/cmd/shell_local_test.go: `c.EVM[0].Nodes[0].HTTPURL = commonconfig.MustParseURL("http://fake.com")`
$DIR/core/cmd/shell_local_test.go: `c.EVM[0].Nodes[0].WSURL = commonconfig.MustParseURL("WSS://fake.com/ws")`
$DIR/core/cmd/shell_local_test.go: `c.Insecure.OCRDevelopmentMode = nil`
$DIR/core/cmd/shell_local_test.go: `app.On("GetSqlxDB").Maybe().Return(db)`
$DIR/core/cmd/shell_local_test.go: `t.Run("Returns error, if --start is not positive", func(t *testing.T) {
set := flag.NewFlagSet("test", 0)
flagSetApplyFromAction(shell.RemoveBlocks, set, "")
require.NoError(t, set.Set("start", "0"))
require.NoError(t, set.Set("evm-chain-id", "12"))
c := cli.NewContext(nil, set, nil)
err := shell.RemoveBlocks(c)
require.ErrorContains(t, err, "Must pass a positive value in '--start' parameter")
})`
$DIR/core/cmd/shell_local_test.go: `flagSetApplyFromAction(shell.RemoveBlocks, set, "")`
$DIR/core/cmd/shell_local_test.go: `t.Run("Returns error, if removal fails", func(t *testing.T) {
set := flag.NewFlagSet("test", 0)
flagSetApplyFromAction(shell.RemoveBlocks, set, "")
require.NoError(t, set.Set("start", "10000"))
require.NoError(t, set.Set("evm-chain-id", "12"))
expectedError := fmt.Errorf("failed to delete log poller's data")
app.On("DeleteLogPollerDataAfter", mock.Anything, big.NewInt(12), int64(10000)).Return(expectedError).Once()
c := cli.NewContext(nil, set, nil)
err := shell.RemoveBlocks(c)
require.ErrorContains(t, err, expectedError.Error())
})`
$DIR/core/cmd/shell_local_test.go: `flagSetApplyFromAction(shell.RemoveBlocks, set, "")`
$DIR/core/cmd/shell_local_test.go: `app.On("DeleteLogPollerDataAfter", mock.Anything, big.NewInt(12), int64(10000)).Return(expectedError).Once()`
$DIR/core/cmd/shell_local_test.go: `flagSetApplyFromAction(shell.RemoveBlocks, set, "")`
$DIR/core/cmd/shell_local_test.go: `app.On("DeleteLogPollerDataAfter", mock.Anything, big.NewInt(12), int64(10000)).Return(nil).Once()`
$DIR/core/cmd/shell_local_test.go: `.Run(test.name, func(t *testing.T) {
cfg := configtest.NewGeneralConfig(t, func(c *chainlink.Config, s *chainlink.Secrets) {
s.Password.Keystore = models.NewSecret("dummy")
c.EVM[0].Nodes[0].Name = ptr("fake")
c.EVM[0].Nodes[0].HTTPURL = commonconfig.MustParseURL("http://fake.com")
c.EVM[0].Nodes[0].WSURL = commonconfig.MustParseURL("WSS://fake.com/ws")
// seems to be needed for config validate
c.Insecure.OCRDevelopmentMode = nil
})
db := pgtest.NewSqlxDB(t)
keyStore := cltest.NewKeyStore(t, db)
authProviderORM := localauth.NewORM(db, time.Minute, logger.TestLogger(t), audit.NoopLogger)
lggr := logger.TestLogger(t)
opts := legacyevm.ChainRelayExtenderConfig{
Logger: lggr,
KeyStore: keyStore.Eth(),
ChainOpts: legacyevm.ChainOpts{
AppConfig: cfg,
MailMon: &mailbox.Monitor{},
DS: db,
},
}
testRelayers := genTestEVMRelayers(t, opts, keyStore)
// Purge the fixture users to test assumption of single admin
// initialUser user created above
pgtest.MustExec(t, db, "DELETE FROM users;")
app := mocks.NewApplication(t)
app.On("AuthenticationProvider").Return(authProviderORM).Maybe()
app.On("BasicAdminUsersORM").Return(authProviderORM).Maybe()
app.On("GetKeyStore").Return(keyStore).Maybe()
app.On("GetRelayers").Return(testRelayers).Maybe()
app.On("Start", mock.Anything).Maybe().Return(nil)
app.On("Stop").Maybe().Return(nil)
app.On("ID").Maybe().Return(uuid.New())
ethClient := evmtest.NewEthClientMock(t)
ethClient.On("Dial", mock.Anything).Return(nil).Maybe()
ethClient.On("BalanceAt", mock.Anything, mock.Anything, mock.Anything).Return(big.NewInt(10), nil).Maybe()
cltest.MustInsertRandomKey(t, keyStore.Eth())
apiPrompt := cltest.NewMockAPIInitializer(t)
client := cmd.Shell{
Config: cfg,
FallbackAPIInitializer: apiPrompt,
Runner: cltest.EmptyRunner{},
AppFactory: cltest.InstanceAppFactory{App: app},
Logger: lggr,
}
set := flag.NewFlagSet("test", 0)
flagSetApplyFromAction(client.RunNode, set, "")
require.NoError(t, set.Set("password", test.pwdfile))
c := cli.NewContext(nil, set, nil)
run := func() error {
cli := cmd.NewApp(&client)
if err := cli.Before(c); err != nil {
return err
}
return client.RunNode(c)
}
if test.wantUnlocked {
assert.NoError(t, run())
assert.Equal(t, 1, apiPrompt.Count)
} else {
assert.Error(t, run())
assert.Equal(t, 0, apiPrompt.Count)
}
})`
$DIR/core/cmd/shell_local_test.go: `.NewGeneralConfig(t, func(c *chainlink.Config, s *chainlink.Secrets) {
s.Password.Keystore = models.NewSecret("dummy")
c.EVM[0].Nodes[0].Name = ptr("fake")
c.EVM[0].Nodes[0].HTTPURL = commonconfig.MustParseURL("http://fake.com")
c.EVM[0].Nodes[0].WSURL = commonconfig.MustParseURL("WSS://fake.com/ws")
// seems to be needed for config validate
c.Insecure.OCRDevelopmentMode = nil
})`
$DIR/core/cmd/shell_local_test.go: `.NewSecret("dummy")`
$DIR/core/cmd/shell_local_test.go: `.MustParseURL("http://fake.com")`
$DIR/core/cmd/shell_local_test.go: `.MustParseURL("WSS://fake.com/ws")`
$DIR/core/cmd/shell_local_test.go: `.NewSqlxDB(t)`
$DIR/core/cmd/shell_local_test.go: `.NewKeyStore(t, db)`
$DIR/core/cmd/shell_local_test.go: `.NewORM(db, time.Minute, logger.TestLogger(t), audit.NoopLogger)`
$DIR/core/cmd/shell_local_test.go: `.TestLogger(t)`
$DIR/core/cmd/shell_local_test.go: `.TestLogger(t)`
$DIR/core/cmd/shell_local_test.go: `.Eth()`
$DIR/core/cmd/shell_local_test.go: `.MustExec(t, db, "DELETE FROM users;")`
$DIR/core/cmd/shell_local_test.go: `.NewApplication(t)`
$DIR/core/cmd/shell_local_test.go: `.On("AuthenticationProvider")`
$DIR/core/cmd/shell_local_test.go: `.Return(authProviderORM)`
$DIR/core/cmd/shell_local_test.go: `.Maybe()`
$DIR/core/cmd/shell_local_test.go: `.On("BasicAdminUsersORM")`
$DIR/core/cmd/shell_local_test.go: `.Return(authProviderORM)`
$DIR/core/cmd/shell_local_test.go: `.Maybe()`
$DIR/core/cmd/shell_local_test.go: `.On("GetKeyStore")`
$DIR/core/cmd/shell_local_test.go: `.Return(keyStore)`
$DIR/core/cmd/shell_local_test.go: `.Maybe()`
$DIR/core/cmd/shell_local_test.go: `.On("GetRelayers")`
$DIR/core/cmd/shell_local_test.go: `.Return(testRelayers)`
$DIR/core/cmd/shell_local_test.go: `.Maybe()`
$DIR/core/cmd/shell_local_test.go: `.On("Start", mock.Anything)`
$DIR/core/cmd/shell_local_test.go: `.Maybe()`
$DIR/core/cmd/shell_local_test.go: `.Return(nil)`
$DIR/core/cmd/shell_local_test.go: `.On("Stop")`
$DIR/core/cmd/shell_local_test.go: `.Maybe()`
$DIR/core/cmd/shell_local_test.go: `.Return(nil)`
$DIR/core/cmd/shell_local_test.go: `.On("ID")`
$DIR/core/cmd/shell_local_test.go: `.Maybe()`
$DIR/core/cmd/shell_local_test.go: `.Return(uuid.New())`
$DIR/core/cmd/shell_local_test.go: `.New()`
$DIR/core/cmd/shell_local_test.go: `.NewEthClientMock(t)`
$DIR/core/cmd/shell_local_test.go: `.On("Dial", mock.Anything)`
$DIR/core/cmd/shell_local_test.go: `.Return(nil)`
$DIR/core/cmd/shell_local_test.go: `.Maybe()`
$DIR/core/cmd/shell_local_test.go: `.On("BalanceAt", mock.Anything, mock.Anything, mock.Anything)`
$DIR/core/cmd/shell_local_test.go: `.Return(big.NewInt(10), nil)`
$DIR/core/cmd/shell_local_test.go: `.NewInt(10)`
$DIR/core/cmd/shell_local_test.go: `.Maybe()`
$DIR/core/cmd/shell_local_test.go: `.MustInsertRandomKey(t, keyStore.Eth())`
$DIR/core/cmd/shell_local_test.go: `.Eth()`
$DIR/core/cmd/shell_local_test.go: `.NewMockAPIInitializer(t)`
$DIR/core/cmd/shell_local_test.go: `.NewFlagSet("test", 0)`
$DIR/core/cmd/shell_local_test.go: `.NewContext(nil, set, nil)`
$DIR/core/cmd/shell_local_test.go: `.NewApp(&client)`
$DIR/core/cmd/shell_local_test.go: `.Before(c)`
$DIR/core/cmd/shell_local_test.go: `.RunNode(c)`
$DIR/core/cmd/shell_local_test.go: `.Run(test.name, func(t *testing.T) {
cfg := configtest.NewGeneralConfig(t, func(c *chainlink.Config, s *chainlink.Secrets) {
s.Password.Keystore = models.NewSecret("16charlengthp4SsW0rD1!@#_")
c.EVM[0].Nodes[0].Name = ptr("fake")
c.EVM[0].Nodes[0].WSURL = commonconfig.MustParseURL("WSS://fake.com/ws")
c.EVM[0].Nodes[0].HTTPURL = commonconfig.MustParseURL("http://fake.com")
// seems to be needed for config validate
c.Insecure.OCRDevelopmentMode = nil
})
db := pgtest.NewSqlxDB(t)
authProviderORM := localauth.NewORM(db, time.Minute, logger.TestLogger(t), audit.NoopLogger)
// Clear out fixture users/users created from the other test cases
// This asserts that on initial run with an empty users table that the credentials file will instantiate and
// create/run with a new admin user
pgtest.MustExec(t, db, "DELETE FROM users;")
keyStore := cltest.NewKeyStore(t, db)
_, err := keyStore.Eth().Create(testutils.Context(t), &cltest.FixtureChainID)
require.NoError(t, err)
ethClient := evmtest.NewEthClientMock(t)
ethClient.On("Dial", mock.Anything).Return(nil).Maybe()
ethClient.On("BalanceAt", mock.Anything, mock.Anything, mock.Anything).Return(big.NewInt(10), nil).Maybe()
lggr := logger.TestLogger(t)
opts := legacyevm.ChainRelayExtenderConfig{
Logger: lggr,
KeyStore: keyStore.Eth(),
ChainOpts: legacyevm.ChainOpts{
AppConfig: cfg,
MailMon: &mailbox.Monitor{},
DS: db,
},
}
testRelayers := genTestEVMRelayers(t, opts, keyStore)
app := mocks.NewApplication(t)
app.On("BasicAdminUsersORM").Return(authProviderORM)
app.On("GetKeyStore").Return(keyStore)
app.On("GetRelayers").Return(testRelayers).Maybe()
app.On("Start", mock.Anything).Maybe().Return(nil)
app.On("Stop").Maybe().Return(nil)
app.On("ID").Maybe().Return(uuid.New())
prompter := cmdMocks.NewPrompter(t)
apiPrompt := cltest.NewMockAPIInitializer(t)
client := cmd.Shell{
Config: cfg,
AppFactory: cltest.InstanceAppFactory{App: app},
KeyStoreAuthenticator: cmd.TerminalKeyStoreAuthenticator{prompter},
FallbackAPIInitializer: apiPrompt,
Runner: cltest.EmptyRunner{},
Logger: lggr,
}
set := flag.NewFlagSet("test", 0)
flagSetApplyFromAction(client.RunNode, set, "")
require.NoError(t, set.Set("api", test.apiFile))
c := cli.NewContext(nil, set, nil)
if test.wantError {
err = client.RunNode(c)
assert.ErrorContains(t, err, "error creating api initializer: open doesntexist.txt: no such file or directory")
} else {
assert.NoError(t, client.RunNode(c))
}
assert.Equal(t, test.wantPrompt, apiPrompt.Count > 0)
})`
$DIR/core/cmd/shell_local_test.go: `.NewGeneralConfig(t, func(c *chainlink.Config, s *chainlink.Secrets) {
s.Password.Keystore = models.NewSecret("16charlengthp4SsW0rD1!@#_")
c.EVM[0].Nodes[0].Name = ptr("fake")
c.EVM[0].Nodes[0].WSURL = commonconfig.MustParseURL("WSS://fake.com/ws")
c.EVM[0].Nodes[0].HTTPURL = commonconfig.MustParseURL("http://fake.com")
// seems to be needed for config validate
c.Insecure.OCRDevelopmentMode = nil
})`
$DIR/core/cmd/shell_local_test.go: `.NewSecret("16charlengthp4SsW0rD1!@#_")`
$DIR/core/cmd/shell_local_test.go: `.MustParseURL("WSS://fake.com/ws")`
$DIR/core/cmd/shell_local_test.go: `.MustParseURL("http://fake.com")`
$DIR/core/cmd/shell_local_test.go: `.NewSqlxDB(t)`
$DIR/core/cmd/shell_local_test.go: `.NewORM(db, time.Minute, logger.TestLogger(t), audit.NoopLogger)`
$DIR/core/cmd/shell_local_test.go: `.TestLogger(t)`
$DIR/core/cmd/shell_local_test.go: `.MustExec(t, db, "DELETE FROM users;")`
$DIR/core/cmd/shell_local_test.go: `.NewKeyStore(t, db)`
$DIR/core/cmd/shell_local_test.go: `.Eth()`
$DIR/core/cmd/shell_local_test.go: `.Create(testutils.Context(t), &cltest.FixtureChainID)`
$DIR/core/cmd/shell_local_test.go: `.Context(t)`
$DIR/core/cmd/shell_local_test.go: `.NewEthClientMock(t)`
$DIR/core/cmd/shell_local_test.go: `.On("Dial", mock.Anything)`
$DIR/core/cmd/shell_local_test.go: `.Return(nil)`
$DIR/core/cmd/shell_local_test.go: `.Maybe()`
$DIR/core/cmd/shell_local_test.go: `.On("BalanceAt", mock.Anything, mock.Anything, mock.Anything)`
$DIR/core/cmd/shell_local_test.go: `.Return(big.NewInt(10), nil)`
$DIR/core/cmd/shell_local_test.go: `.NewInt(10)`
$DIR/core/cmd/shell_local_test.go: `.Maybe()`
$DIR/core/cmd/shell_local_test.go: `.TestLogger(t)`
$DIR/core/cmd/shell_local_test.go: `.Eth()`
$DIR/core/cmd/shell_local_test.go: `.NewApplication(t)`
$DIR/core/cmd/shell_local_test.go: `.On("BasicAdminUsersORM")`
$DIR/core/cmd/shell_local_test.go: `.Return(authProviderORM)`
$DIR/core/cmd/shell_local_test.go: `.On("GetKeyStore")`
$DIR/core/cmd/shell_local_test.go: `.Return(keyStore)`
$DIR/core/cmd/shell_local_test.go: `.On("GetRelayers")`
$DIR/core/cmd/shell_local_test.go: `.Return(testRelayers)`
$DIR/core/cmd/shell_local_test.go: `.Maybe()`
$DIR/core/cmd/shell_local_test.go: `.On("Start", mock.Anything)`
$DIR/core/cmd/shell_local_test.go: `.Maybe()`
$DIR/core/cmd/shell_local_test.go: `.Return(nil)`
$DIR/core/cmd/shell_local_test.go: `.On("Stop")`
$DIR/core/cmd/shell_local_test.go: `.Maybe()`
$DIR/core/cmd/shell_local_test.go: `.Return(nil)`
$DIR/core/cmd/shell_local_test.go: `.On("ID")`
$DIR/core/cmd/shell_local_test.go: `.Maybe()`
$DIR/core/cmd/shell_local_test.go: `.Return(uuid.New())`
$DIR/core/cmd/shell_local_test.go: `.New()`
$DIR/core/cmd/shell_local_test.go: `.NewPrompter(t)`
$DIR/core/cmd/shell_local_test.go: `.NewMockAPIInitializer(t)`
$DIR/core/cmd/shell_local_test.go: `.NewFlagSet("test", 0)`
$DIR/core/cmd/shell_local_test.go: `.NewContext(nil, set, nil)`
$DIR/core/cmd/shell_local_test.go: `.RunNode(c)`
$DIR/core/cmd/shell_local_test.go: `.UnmarshalText([]byte("100mb"))`
$DIR/core/cmd/shell_local_test.go: `.Run(tt.name, func(t *testing.T) {
cfg := logger.Config{
Dir: t.TempDir(),
FileMaxSizeMB: int(tt.logFileSize(t) / utils.MB),
}
assert.NoError(t, os.MkdirAll(cfg.Dir, os.FileMode(0700)))
lggr, closeFn := cfg.New()
t.Cleanup(func() { assert.NoError(t, closeFn()) })
// Tries to create a log file by logging. The log file won't be created if there's no logging happening.
lggr.Debug("Trying to create a log file by logging.")
_, err := os.Stat(cfg.LogsFile())
require.Equal(t, os.IsNotExist(err), !tt.fileShouldExist)
})`
$DIR/core/cmd/shell_local_test.go: `.TempDir()`
$DIR/core/cmd/shell_local_test.go: `.logFileSize(t)`
$DIR/core/cmd/shell_local_test.go: `.New()`
$DIR/core/cmd/shell_local_test.go: `.Cleanup(func() { assert.NoError(t, closeFn()) })`
$DIR/core/cmd/shell_local_test.go: `.Debug("Trying to create a log file by logging.")`
$DIR/core/cmd/shell_local_test.go: `.Stat(cfg.LogsFile())`
$DIR/core/cmd/shell_local_test.go: `.LogsFile()`
$DIR/core/cmd/shell_local_test.go: `.FullTestDBV2(t, func(c *chainlink.Config, s *chainlink.Secrets) {
c.Database.Dialect = dialects.Postgres
// evm config is used in this test. but if set, it must be pass config validation.
// simplest to make it nil
c.EVM = nil
// seems to be needed for config validate
c.Insecure.OCRDevelopmentMode = nil
})`
$DIR/core/cmd/shell_local_test.go: `.NewKeyStore(t, sqlxDB)`
$DIR/core/cmd/shell_local_test.go: `.MustInsertRandomKey(t, keyStore.Eth())`
$DIR/core/cmd/shell_local_test.go: `.Eth()`
$DIR/core/cmd/shell_local_test.go: `.NewTestTxStore(t, sqlxDB)`
$DIR/core/cmd/shell_local_test.go: `.MustInsertConfirmedEthTxWithLegacyAttempt(t, txStore, 7, 42, fromAddress)`
$DIR/core/cmd/shell_local_test.go: `.TestLogger(t)`
$DIR/core/cmd/shell_local_test.go: `.NewApplication(t)`
$DIR/core/cmd/shell_local_test.go: `.On("GetDB")`
$DIR/core/cmd/shell_local_test.go: `.Return(sqlxDB)`
$DIR/core/cmd/shell_local_test.go: `.On("GetKeyStore")`
$DIR/core/cmd/shell_local_test.go: `.Return(keyStore)`
$DIR/core/cmd/shell_local_test.go: `.On("ID")`
$DIR/core/cmd/shell_local_test.go: `.Maybe()`
$DIR/core/cmd/shell_local_test.go: `.Return(uuid.New())`
$DIR/core/cmd/shell_local_test.go: `.New()`
$DIR/core/cmd/shell_local_test.go: `.On("GetConfig")`
$DIR/core/cmd/shell_local_test.go: `.Return(config)`
$DIR/core/cmd/shell_local_test.go: `.NewEthClientMockWithDefaultChain(t)`
$DIR/core/cmd/shell_local_test.go: `.NewLegacyChainsWithMockChain(t, ethClient, config)`
$DIR/core/cmd/shell_local_test.go: `.On("GetRelayers")`
$DIR/core/cmd/shell_local_test.go: `.Return(mockRelayerChainInteroperators)`
$DIR/core/cmd/shell_local_test.go: `.Maybe()`
$DIR/core/cmd/shell_local_test.go: `.On("Dial", mock.Anything)`
$DIR/core/cmd/shell_local_test.go: `.Return(nil)`
$DIR/core/cmd/shell_local_test.go: `.NewMockAPIInitializer(t)`
$DIR/core/cmd/shell_local_test.go: `.NewFlagSet("test", 0)`
$DIR/core/cmd/shell_local_test.go: `.NewContext(nil, set, nil)`
$DIR/core/cmd/shell_local_test.go: `.On("SendTransactionReturnCode", mock.Anything, mock.MatchedBy(func(tx *gethTypes.Transaction) bool {
return tx.Nonce() == n
}), mock.Anything)`
$DIR/core/cmd/shell_local_test.go: `.MatchedBy(func(tx *gethTypes.Transaction) bool {
return tx.Nonce() == n
})`
$DIR/core/cmd/shell_local_test.go: `.Nonce()`
$DIR/core/cmd/shell_local_test.go: `.Once()`
$DIR/core/cmd/shell_local_test.go: `.Return(client.Successful, nil)`
$DIR/core/cmd/shell_local_test.go: `.RebroadcastTransactions(ctx)`
$DIR/core/cmd/shell_local_test.go: `.NewInt(100000000000)`
$DIR/core/cmd/shell_local_test.go: `.Run(test.name, func(t *testing.T) {
// Use the non-transactional db for this test because we need to
// test multiple connections to the database, and changes made within
// the transaction cannot be seen from another connection.
config, sqlxDB := heavyweight.FullTestDBV2(t, func(c *chainlink.Config, s *chainlink.Secrets) {
c.Database.Dialect = dialects.Postgres
// evm config is used in this test. but if set, it must be pass config validation.
// simplest to make it nil
c.EVM = nil
// seems to be needed for config validate
c.Insecure.OCRDevelopmentMode = nil
})
keyStore := cltest.NewKeyStore(t, sqlxDB)
_, fromAddress := cltest.MustInsertRandomKey(t, keyStore.Eth())
txStore := cltest.NewTestTxStore(t, sqlxDB)
cltest.MustInsertConfirmedEthTxWithLegacyAttempt(t, txStore, int64(test.nonce), 42, fromAddress)
lggr := logger.TestLogger(t)
app := mocks.NewApplication(t)
app.On("GetDB").Return(sqlxDB)
app.On("GetKeyStore").Return(keyStore)
app.On("ID").Maybe().Return(uuid.New())
app.On("GetConfig").Return(config)
ethClient := evmtest.NewEthClientMockWithDefaultChain(t)
ethClient.On("Dial", mock.Anything).Return(nil)
legacy := cltest.NewLegacyChainsWithMockChain(t, ethClient, config)
mockRelayerChainInteroperators := &chainlinkmocks.FakeRelayerChainInteroperators{EVMChains: legacy}
app.On("GetRelayers").Return(mockRelayerChainInteroperators).Maybe()
c := cmd.Shell{
Config: config,
AppFactory: cltest.InstanceAppFactory{App: app},
FallbackAPIInitializer: cltest.NewMockAPIInitializer(t),
Runner: cltest.EmptyRunner{},
Logger: lggr,
}
set := flag.NewFlagSet("test", 0)
flagSetApplyFromAction(c.RebroadcastTransactions, set, "")
require.NoError(t, set.Set("evmChainID", testutils.FixtureChainID.String()))
require.NoError(t, set.Set("beginningNonce", strconv.FormatUint(uint64(beginningNonce), 10)))
require.NoError(t, set.Set("endingNonce", strconv.FormatUint(uint64(endingNonce), 10)))
require.NoError(t, set.Set("gasPriceWei", gasPrice.String()))
require.NoError(t, set.Set("gasLimit", strconv.FormatUint(gasLimit, 10)))
require.NoError(t, set.Set("address", fromAddress.Hex()))
require.NoError(t, set.Set("password", "../internal/fixtures/correct_password.txt"))
ctx := cli.NewContext(nil, set, nil)
for i := beginningNonce; i <= endingNonce; i++ {
n := i
ethClient.On("SendTransactionReturnCode", mock.Anything, mock.MatchedBy(func(tx *gethTypes.Transaction) bool {
return uint(tx.Nonce()) == n
}), mock.Anything).Once().Return(client.Successful, nil)
}
assert.NoError(t, c.RebroadcastTransactions(ctx))
cltest.AssertEthTxAttemptCountStays(t, txStore, 1)
})`
$DIR/core/cmd/shell_local_test.go: `.FullTestDBV2(t, func(c *chainlink.Config, s *chainlink.Secrets) {
c.Database.Dialect = dialects.Postgres
// evm config is used in this test. but if set, it must be pass config validation.
// simplest to make it nil
c.EVM = nil
// seems to be needed for config validate
c.Insecure.OCRDevelopmentMode = nil
})`
$DIR/core/cmd/shell_local_test.go: `.NewKeyStore(t, sqlxDB)`
$DIR/core/cmd/shell_local_test.go: `.MustInsertRandomKey(t, keyStore.Eth())`
$DIR/core/cmd/shell_local_test.go: `.Eth()`
$DIR/core/cmd/shell_local_test.go: `.NewTestTxStore(t, sqlxDB)`
$DIR/core/cmd/shell_local_test.go: `.MustInsertConfirmedEthTxWithLegacyAttempt(t, txStore, int64(test.nonce), 42, fromAddress)`
$DIR/core/cmd/shell_local_test.go: `.TestLogger(t)`
$DIR/core/cmd/shell_local_test.go: `.NewApplication(t)`
$DIR/core/cmd/shell_local_test.go: `.On("GetDB")`
$DIR/core/cmd/shell_local_test.go: `.Return(sqlxDB)`
$DIR/core/cmd/shell_local_test.go: `.On("GetKeyStore")`
$DIR/core/cmd/shell_local_test.go: `.Return(keyStore)`
$DIR/core/cmd/shell_local_test.go: `.On("ID")`
$DIR/core/cmd/shell_local_test.go: `.Maybe()`
$DIR/core/cmd/shell_local_test.go: `.Return(uuid.New())`
$DIR/core/cmd/shell_local_test.go: `.New()`
$DIR/core/cmd/shell_local_test.go: `.On("GetConfig")`
$DIR/core/cmd/shell_local_test.go: `.Return(config)`
$DIR/core/cmd/shell_local_test.go: `.NewEthClientMockWithDefaultChain(t)`
$DIR/core/cmd/shell_local_test.go: `.On("Dial", mock.Anything)`
$DIR/core/cmd/shell_local_test.go: `.Return(nil)`
$DIR/core/cmd/shell_local_test.go: `.NewLegacyChainsWithMockChain(t, ethClient, config)`
$DIR/core/cmd/shell_local_test.go: `.On("GetRelayers")`
$DIR/core/cmd/shell_local_test.go: `.Return(mockRelayerChainInteroperators)`
$DIR/core/cmd/shell_local_test.go: `.Maybe()`
$DIR/core/cmd/shell_local_test.go: `.NewMockAPIInitializer(t)`
$DIR/core/cmd/shell_local_test.go: `.NewFlagSet("test", 0)`
$DIR/core/cmd/shell_local_test.go: `.NewContext(nil, set, nil)`
$DIR/core/cmd/shell_local_test.go: `.On("SendTransactionReturnCode", mock.Anything, mock.MatchedBy(func(tx *gethTypes.Transaction) bool {
return uint(tx.Nonce()) == n
}), mock.Anything)`
$DIR/core/cmd/shell_local_test.go: `.MatchedBy(func(tx *gethTypes.Transaction) bool {
return uint(tx.Nonce()) == n
})`
$DIR/core/cmd/shell_local_test.go: `.Nonce()`
$DIR/core/cmd/shell_local_test.go: `.Once()`
$DIR/core/cmd/shell_local_test.go: `.Return(client.Successful, nil)`
$DIR/core/cmd/shell_local_test.go: `.AssertEthTxAttemptCountStays(t, txStore, 1)`
$DIR/core/cmd/shell_local_test.go: `.Run(test.name, func(t *testing.T) {
config, sqlxDB := heavyweight.FullTestDBV2(t, func(c *chainlink.Config, s *chainlink.Secrets) {
c.Database.Dialect = dialects.Postgres
c.EVM = nil
// seems to be needed for config validate
c.Insecure.OCRDevelopmentMode = nil
})
keyStore := cltest.NewKeyStore(t, sqlxDB)
_, fromAddress := cltest.MustInsertRandomKey(t, keyStore.Eth())
if !test.enableAddress {
err := keyStore.Eth().Disable(testutils.Context(t), fromAddress, testutils.FixtureChainID)
require.NoError(t, err, "failed to disable test key")
}
lggr := logger.TestLogger(t)
app := mocks.NewApplication(t)
app.On("GetDB").Maybe().Return(sqlxDB)
app.On("GetKeyStore").Return(keyStore)
app.On("ID").Maybe().Return(uuid.New())
ethClient := evmtest.NewEthClientMockWithDefaultChain(t)
ethClient.On("Dial", mock.Anything).Return(nil)
legacy := cltest.NewLegacyChainsWithMockChain(t, ethClient, config)
mockRelayerChainInteroperators := &chainlinkmocks.FakeRelayerChainInteroperators{EVMChains: legacy}
app.On("GetRelayers").Return(mockRelayerChainInteroperators).Maybe()
ethClient.On("SendTransactionReturnCode", mock.Anything, mock.Anything, mock.Anything).Maybe().Return(client.Successful, nil)
client := cmd.Shell{
Config: config,
AppFactory: cltest.InstanceAppFactory{App: app},
FallbackAPIInitializer: cltest.NewMockAPIInitializer(t),
Runner: cltest.EmptyRunner{},
Logger: lggr,
}
set := flag.NewFlagSet("test", 0)
flagSetApplyFromAction(client.RebroadcastTransactions, set, "")
require.NoError(t, set.Set("evmChainID", testutils.FixtureChainID.String()))
require.NoError(t, set.Set("address", fromAddress.Hex()))
require.NoError(t, set.Set("password", "../internal/fixtures/correct_password.txt"))
c := cli.NewContext(nil, set, nil)
if test.shouldError {
require.ErrorContains(t, client.RebroadcastTransactions(c), test.errorContains)
} else {
app.On("GetConfig").Return(config).Once()
require.NoError(t, client.RebroadcastTransactions(c))
}
})`
$DIR/core/cmd/shell_local_test.go: `.FullTestDBV2(t, func(c *chainlink.Config, s *chainlink.Secrets) {
c.Database.Dialect = dialects.Postgres
c.EVM = nil
// seems to be needed for config validate
c.Insecure.OCRDevelopmentMode = nil
})`
$DIR/core/cmd/shell_local_test.go: `.NewKeyStore(t, sqlxDB)`
$DIR/core/cmd/shell_local_test.go: `.MustInsertRandomKey(t, keyStore.Eth())`
$DIR/core/cmd/shell_local_test.go: `.Eth()`
$DIR/core/cmd/shell_local_test.go: `.Eth()`
$DIR/core/cmd/shell_local_test.go: `.Disable(testutils.Context(t), fromAddress, testutils.FixtureChainID)`
$DIR/core/cmd/shell_local_test.go: `.Context(t)`
$DIR/core/cmd/shell_local_test.go: `.TestLogger(t)`
$DIR/core/cmd/shell_local_test.go: `.NewApplication(t)`
$DIR/core/cmd/shell_local_test.go: `.On("GetDB")`
$DIR/core/cmd/shell_local_test.go: `.Maybe()`
$DIR/core/cmd/shell_local_test.go: `.Return(sqlxDB)`
$DIR/core/cmd/shell_local_test.go: `.On("GetKeyStore")`
$DIR/core/cmd/shell_local_test.go: `.Return(keyStore)`
$DIR/core/cmd/shell_local_test.go: `.On("ID")`
$DIR/core/cmd/shell_local_test.go: `.Maybe()`
$DIR/core/cmd/shell_local_test.go: `.Return(uuid.New())`
$DIR/core/cmd/shell_local_test.go: `.New()`
$DIR/core/cmd/shell_local_test.go: `.NewEthClientMockWithDefaultChain(t)`
$DIR/core/cmd/shell_local_test.go: `.On("Dial", mock.Anything)`
$DIR/core/cmd/shell_local_test.go: `.Return(nil)`
$DIR/core/cmd/shell_local_test.go: `.NewLegacyChainsWithMockChain(t, ethClient, config)`
$DIR/core/cmd/shell_local_test.go: `.On("GetRelayers")`
$DIR/core/cmd/shell_local_test.go: `.Return(mockRelayerChainInteroperators)`
$DIR/core/cmd/shell_local_test.go: `.Maybe()`
$DIR/core/cmd/shell_local_test.go: `.On("SendTransactionReturnCode", mock.Anything, mock.Anything, mock.Anything)`
$DIR/core/cmd/shell_local_test.go: `.Maybe()`
$DIR/core/cmd/shell_local_test.go: `.Return(client.Successful, nil)`
$DIR/core/cmd/shell_local_test.go: `.NewMockAPIInitializer(t)`
$DIR/core/cmd/shell_local_test.go: `.NewFlagSet("test", 0)`
$DIR/core/cmd/shell_local_test.go: `.NewContext(nil, set, nil)`
$DIR/core/cmd/shell_local_test.go: `.On("GetConfig")`
$DIR/core/cmd/shell_local_test.go: `.Return(config)`
$DIR/core/cmd/shell_local_test.go: `.Once()`
$DIR/core/cmd/shell_local_test.go: `.FullTestDBV2(t, func(c *chainlink.Config, s *chainlink.Secrets) { c.Database.Dialect = dialects.Postgres })`
$DIR/core/cmd/shell_local_test.go: `.TestLogger(t)`
$DIR/core/cmd/shell_local_test.go: `.NewFlagSet("test", 0)`
$DIR/core/cmd/shell_local_test.go: `.NewContext(nil, set, nil)`
$DIR/core/cmd/shell_local_test.go: `.CleanupChainTables(c)`
$DIR/core/cmd/shell_local_test.go: `.NewSqlxDB(t)`
$DIR/core/cmd/shell_local_test.go: `.NewGeneralConfig(t, func(c *chainlink.Config, s *chainlink.Secrets) {
s.Password.Keystore = models.NewSecret("dummy")
c.EVM[0].Nodes[0].Name = ptr("fake")
c.EVM[0].Nodes[0].HTTPURL = commonconfig.MustParseURL("http://fake.com")
c.EVM[0].Nodes[0].WSURL = commonconfig.MustParseURL("WSS://fake.com/ws")
// seems to be needed for config validate
c.Insecure.OCRDevelopmentMode = nil
})`
$DIR/core/cmd/shell_local_test.go: `.NewSecret("dummy")`
$DIR/core/cmd/shell_local_test.go: `.MustParseURL("http://fake.com")`
$DIR/core/cmd/shell_local_test.go: `.MustParseURL("WSS://fake.com/ws")`
$DIR/core/cmd/shell_local_test.go: `.TestLogger(t)`
$DIR/core/cmd/shell_local_test.go: `.NewApplication(t)`
$DIR/core/cmd/shell_local_test.go: `.On("GetSqlxDB")`
$DIR/core/cmd/shell_local_test.go: `.Maybe()`
$DIR/core/cmd/shell_local_test.go: `.Return(db)`
$DIR/core/cmd/shell_local_test.go: `.NewMockAPIInitializer(t)`
$DIR/core/cmd/shell_local_test.go: `.Run("Returns error, if --start is not positive", func(t *testing.T) {
set := flag.NewFlagSet("test", 0)
flagSetApplyFromAction(shell.RemoveBlocks, set, "")
require.NoError(t, set.Set("start", "0"))
require.NoError(t, set.Set("evm-chain-id", "12"))
c := cli.NewContext(nil, set, nil)
err := shell.RemoveBlocks(c)
require.ErrorContains(t, err, "Must pass a positive value in '--start' parameter")
})`
$DIR/core/cmd/shell_local_test.go: `.NewFlagSet("test", 0)`
$DIR/core/cmd/shell_local_test.go: `.NewContext(nil, set, nil)`
$DIR/core/cmd/shell_local_test.go: `.RemoveBlocks(c)`
$DIR/core/cmd/shell_local_test.go: `.Run("Returns error, if removal fails", func(t *testing.T) {
set := flag.NewFlagSet("test", 0)
flagSetApplyFromAction(shell.RemoveBlocks, set, "")
require.NoError(t, set.Set("start", "10000"))
require.NoError(t, set.Set("evm-chain-id", "12"))
expectedError := fmt.Errorf("failed to delete log poller's data")
app.On("DeleteLogPollerDataAfter", mock.Anything, big.NewInt(12), int64(10000)).Return(expectedError).Once()
c := cli.NewContext(nil, set, nil)
err := shell.RemoveBlocks(c)
require.ErrorContains(t, err, expectedError.Error())
})`
$DIR/core/cmd/shell_local_test.go: `.NewFlagSet("test", 0)`
$DIR/core/cmd/shell_local_test.go: `.On("DeleteLogPollerDataAfter", mock.Anything, big.NewInt(12), int64(10000))`
$DIR/core/cmd/shell_local_test.go: `.NewInt(12)`
$DIR/core/cmd/shell_local_test.go: `.Return(expectedError)`
$DIR/core/cmd/shell_local_test.go: `.Once()`
$DIR/core/cmd/shell_local_test.go: `.NewContext(nil, set, nil)`
$DIR/core/cmd/shell_local_test.go: `.RemoveBlocks(c)`
$DIR/core/cmd/shell_local_test.go: `.NewFlagSet("test", 0)`
$DIR/core/cmd/shell_local_test.go: `.On("DeleteLogPollerDataAfter", mock.Anything, big.NewInt(12), int64(10000))`
$DIR/core/cmd/shell_local_test.go: `.NewInt(12)`
$DIR/core/cmd/shell_local_test.go: `.Return(nil)`
$DIR/core/cmd/shell_local_test.go: `.Once()`
$DIR/core/cmd/shell_local_test.go: `.NewContext(nil, set, nil)`
$DIR/core/cmd/shell_local_test.go: `.RemoveBlocks(c)`
$DIR/core/cmd/shell_remote_test.go: `c.EVM[0].Enabled = ptr(true)`
$DIR/core/cmd/shell_remote_test.go: `c.EVM[0].NonceAutoSync = ptr(false)`
$DIR/core/cmd/shell_remote_test.go: `c.EVM[0].BalanceMonitor.Enabled = ptr(false)`
$DIR/core/cmd/shell_remote_test.go: `c.EVM[0].GasEstimator.Mode = ptr("FixedPrice")`
$DIR/core/cmd/shell_remote_test.go: `flagSetApplyFromAction(client.ReplayFromBlock, set, "")`
$DIR/core/cmd/shell_remote_test.go: `c = cli.NewContext(nil, set, nil)`
$DIR/core/cmd/shell_remote_test.go: `t.Run(test.name, func(t *testing.T) {
ctx := testutils.Context(t)
app := startNewApplicationV2(t, func(c *chainlink.Config, s *chainlink.Secrets) {
c.JobPipeline.ExternalInitiatorsEnabled = ptr(true)
})
client, _ := app.NewShellAndRenderer()
set := flag.NewFlagSet("create", 0)
flagSetApplyFromAction(client.CreateExternalInitiator, set, "")
assert.NoError(t, set.Parse(test.args))
c := cli.NewContext(nil, set, nil)
err := client.CreateExternalInitiator(c)
require.NoError(t, err)
var exi bridges.ExternalInitiator
err = app.GetDB().GetContext(ctx, &exi, `SELECT * FROM external_initiators WHERE name = $1`, test.args[0])
require.NoError(t, err)
if len(test.args) > 1 {
assert.Equal(t, test.args[1], exi.URL.String())
}
})`
$DIR/core/cmd/shell_remote_test.go: `c.JobPipeline.ExternalInitiatorsEnabled = ptr(true)`
$DIR/core/cmd/shell_remote_test.go: `flagSetApplyFromAction(client.CreateExternalInitiator, set, "")`
$DIR/core/cmd/shell_remote_test.go: `err = app.GetDB().GetContext(ctx, &exi, `SELECT * FROM external_initiators WHERE name = $1`, test.args[0])`
$DIR/core/cmd/shell_remote_test.go: `t.Run(test.name, func(t *testing.T) {
app := startNewApplicationV2(t, func(c *chainlink.Config, s *chainlink.Secrets) {
c.JobPipeline.ExternalInitiatorsEnabled = ptr(true)
})
client, _ := app.NewShellAndRenderer()
initialExis := len(cltest.AllExternalInitiators(t, app.GetDB()))
set := flag.NewFlagSet("create", 0)
flagSetApplyFromAction(client.CreateExternalInitiator, set, "")
assert.NoError(t, set.Parse(test.args))
c := cli.NewContext(nil, set, nil)
err := client.CreateExternalInitiator(c)
assert.Error(t, err)
exis := cltest.AllExternalInitiators(t, app.GetDB())
assert.Len(t, exis, initialExis)
})`
$DIR/core/cmd/shell_remote_test.go: `c.JobPipeline.ExternalInitiatorsEnabled = ptr(true)`
$DIR/core/cmd/shell_remote_test.go: `flagSetApplyFromAction(client.CreateExternalInitiator, set, "")`
$DIR/core/cmd/shell_remote_test.go: `c.JobPipeline.ExternalInitiatorsEnabled = ptr(true)`
$DIR/core/cmd/shell_remote_test.go: `err = app.BridgeORM().CreateExternalInitiator(testutils.Context(t), exi)`
$DIR/core/cmd/shell_remote_test.go: `flagSetApplyFromAction(client.DeleteExternalInitiator, set, "")`
$DIR/core/cmd/shell_remote_test.go: `c.JobPipeline.ExternalInitiatorsEnabled = ptr(true)`
$DIR/core/cmd/shell_remote_test.go: `flagSetApplyFromAction(client.DeleteExternalInitiator, set, "")`
$DIR/core/cmd/shell_remote_test.go: `t.Run(test.name, func(t *testing.T) {
enteredStrings := []string{test.email, test.pwd}
prompter := &cltest.MockCountingPrompter{T: t, EnteredStrings: enteredStrings}
client := app.NewAuthenticatingShell(prompter)
set := flag.NewFlagSet("test", 0)
flagSetApplyFromAction(client.RemoteLogin, set, "")
require.NoError(t, set.Set("file", test.file))
require.NoError(t, set.Set("bypass-version-check", "true"))
c := cli.NewContext(nil, set, nil)
err := client.RemoteLogin(c)
if test.wantError {
assert.Error(t, err)
} else {
assert.NoError(t, err)
}
})`
$DIR/core/cmd/shell_remote_test.go: `flagSetApplyFromAction(client.RemoteLogin, set, "")`
$DIR/core/cmd/shell_remote_test.go: `client.HTTP = &mockHTTPClient{client.HTTP, remoteVersion, remoteSha}`
$DIR/core/cmd/shell_remote_test.go: `flagSetApplyFromAction(client.RemoteLogin, set, "")`
$DIR/core/cmd/shell_remote_test.go: `set = flag.NewFlagSet("test", 0)`
$DIR/core/cmd/shell_remote_test.go: `flagSetApplyFromAction(client.RemoteLogin, set, "")`
$DIR/core/cmd/shell_remote_test.go: `c = cli.NewContext(nil, set, nil)`
$DIR/core/cmd/shell_remote_test.go: `err = client.RemoteLogin(c)`
$DIR/core/cmd/shell_remote_test.go: `t.Run(test.name, func(t *testing.T) {
enteredStrings := []string{u.Email, cltest.Password}
prompter := &cltest.MockCountingPrompter{T: t, EnteredStrings: enteredStrings}
client := app.NewAuthenticatingShell(prompter)
client.HTTP = &mockHTTPClient{client.HTTP, test.remoteVersion, test.remoteSha}
err := client.CheckRemoteBuildCompatibility(logger.TestLogger(t), test.bypassVersionFlag, test.cliVersion, test.cliSha)
if test.wantError {
assert.Error(t, err)
assert.ErrorIs(t, err, cmd.ErrIncompatible{
RemoteVersion: test.remoteVersion,
RemoteSha: test.remoteSha,
CLIVersion: test.cliVersion,
CLISha: test.cliSha,
})
} else {
assert.NoError(t, err)
}
})`
$DIR/core/cmd/shell_remote_test.go: `client.HTTP = &mockHTTPClient{client.HTTP, test.remoteVersion, test.remoteSha}`
$DIR/core/cmd/shell_remote_test.go: `flagSetApplyFromAction(client.RemoteLogin, set, "")`
$DIR/core/cmd/shell_remote_test.go: `err = otherClient.RemoteLogin(c)`
$DIR/core/cmd/shell_remote_test.go: `client.ChangePasswordPrompter = cltest.MockChangePasswordPrompter{
UpdatePasswordRequest: web.UpdatePasswordRequest{
OldPassword: testutils.Password,
NewPassword: "12345",
},
}`
$DIR/core/cmd/shell_remote_test.go: `err = client.ChangePassword(cli.NewContext(nil, nil, nil))`
$DIR/core/cmd/shell_remote_test.go: `client.ChangePasswordPrompter = cltest.MockChangePasswordPrompter{
UpdatePasswordRequest: web.UpdatePasswordRequest{
OldPassword: testutils.Password,
NewPassword: testutils.Password + "foo",
},
}`
$DIR/core/cmd/shell_remote_test.go: `err = client.ChangePassword(cli.NewContext(nil, nil, nil))`
$DIR/core/cmd/shell_remote_test.go: `err = otherClient.IndexBridges(c)`
$DIR/core/cmd/shell_remote_test.go: `flagSetApplyFromAction(client.RemoteLogin, set, "")`
$DIR/core/cmd/shell_remote_test.go: `set.Uint("seconds", uint(d.Seconds()), "")`
$DIR/core/cmd/shell_remote_test.go: `set.String("output_dir", tDir, "")`
$DIR/core/cmd/shell_remote_test.go: `err = client.Profile(cli.NewContext(nil, set, nil))`
$DIR/core/cmd/shell_remote_test.go: `flagSetApplyFromAction(client.RemoteLogin, set, "")`
$DIR/core/cmd/shell_remote_test.go: `set.Uint("seconds", 1, "")`
$DIR/core/cmd/shell_remote_test.go: `set.String("output_dir", tDir, "")`
$DIR/core/cmd/shell_remote_test.go: `err = client.Profile(cli.NewContext(nil, set, nil))`
$DIR/core/cmd/shell_remote_test.go: `set.Uint("seconds", 1, "")`
$DIR/core/cmd/shell_remote_test.go: `set.String("output_dir", t.TempDir(), "")`
$DIR/core/cmd/shell_remote_test.go: `t.Run("user", func(t *testing.T) {
got, err := client.ConfigV2Str(true)
require.NoError(t, err)
assert.Equal(t, user, got, diff.Diff(user, got))
})`
$DIR/core/cmd/shell_remote_test.go: `c.EVM[0].Enabled = ptr(true)`
$DIR/core/cmd/shell_remote_test.go: `c.OCR.Enabled = ptr(true)`
$DIR/core/cmd/shell_remote_test.go: `c.P2P.V2.Enabled = ptr(true)`
$DIR/core/cmd/shell_remote_test.go: `c.P2P.V2.ListenAddresses = &[]string{fmt.Sprintf("127.0.0.1:%d", freeport.GetOne(t))}`
$DIR/core/cmd/shell_remote_test.go: `c.P2P.PeerID = &cltest.DefaultP2PPeerID`
$DIR/core/cmd/shell_remote_test.go: `c.EVM[0].GasEstimator.Mode = ptr("FixedPrice")`
$DIR/core/cmd/shell_remote_test.go: `opts.FlagsAndDeps = append(opts.FlagsAndDeps, cltest.DefaultP2PKey)`
$DIR/core/cmd/shell_remote_test.go: `err = toml.Unmarshal([]byte(ocrspec.Toml()), &ocrSpec)`
$DIR/core/cmd/shell_remote_test.go: `jb.OCROracleSpec = &ocrSpec`
$DIR/core/cmd/shell_remote_test.go: `jb.OCROracleSpec.TransmitterAddress = &key.EIP55Address`
$DIR/core/cmd/shell_remote_test.go: `err = app.AddJobV2(testutils.Context(t), &jb)`
$DIR/core/cmd/shell_remote_test.go: `flagSetApplyFromAction(client.RemoteLogin, set, "")`
$DIR/core/cmd/shell_remote_test.go: `flagSetApplyFromAction(client.RemoteLogin, set, "")`
$DIR/core/cmd/shell_remote_test.go: `flagSetApplyFromAction(client.RemoteLogin, set, "")`
$DIR/core/cmd/shell_remote_test.go: `client.CookieAuthenticator = cmd.NewSessionCookieAuthenticator(app.NewClientOpts(), &cmd.MemoryCookieStore{}, logger.TestLogger(t))`
$DIR/core/cmd/shell_remote_test.go: `client.HTTP = cmd.NewAuthenticatedHTTPClient(app.Logger, app.NewClientOpts(), client.CookieAuthenticator, sr)`
$DIR/core/cmd/shell_remote_test.go: `flagSetApplyFromAction(client.ListJobs, fs, "")`
$DIR/core/cmd/shell_remote_test.go: `pgtest.MustExec(t, app.GetDB(), "delete from sessions where email = $1", user.Email)`
$DIR/core/cmd/shell_remote_test.go: `err = client.ListJobs(cli.NewContext(nil, fs, nil))`
$DIR/core/cmd/shell_remote_test.go: `client.CookieAuthenticator = FailingAuthenticator{}`
$DIR/core/cmd/shell_remote_test.go: `client.HTTP = cmd.NewAuthenticatedHTTPClient(app.Logger, app.NewClientOpts(), client.CookieAuthenticator, sr)`
$DIR/core/cmd/shell_remote_test.go: `flagSetApplyFromAction(client.ListJobs, fs, "")`
$DIR/core/cmd/shell_remote_test.go: `flagSetApplyFromAction(client.SetLogLevel, set, "")`
$DIR/core/cmd/shell_remote_test.go: `set = flag.NewFlagSet("logsql", 0)`
$DIR/core/cmd/shell_remote_test.go: `flagSetApplyFromAction(client.SetLogSQL, set, "")`
$DIR/core/cmd/shell_remote_test.go: `c = cli.NewContext(nil, set, nil)`
$DIR/core/cmd/shell_remote_test.go: `err = client.SetLogSQL(c)`
$DIR/core/cmd/shell_remote_test.go: `sqlEnabled = false`
$DIR/core/cmd/shell_remote_test.go: `set = flag.NewFlagSet("logsql", 0)`
$DIR/core/cmd/shell_remote_test.go: `flagSetApplyFromAction(client.SetLogSQL, set, "")`
$DIR/core/cmd/shell_remote_test.go: `c = cli.NewContext(nil, set, nil)`
$DIR/core/cmd/shell_remote_test.go: `err = client.SetLogSQL(c)`
$DIR/core/cmd/shell_remote_test.go: `.NewShellAndRenderer()`
$DIR/core/cmd/shell_remote_test.go: `.NewFlagSet("flagset", 0)`
$DIR/core/cmd/shell_remote_test.go: `.NewContext(nil, set, nil)`
$DIR/core/cmd/shell_remote_test.go: `.NewContext(nil, set, nil)`
$DIR/core/cmd/shell_remote_test.go: `.ReplayFromBlock(c)`
$DIR/core/cmd/shell_remote_test.go: `.Run(test.name, func(t *testing.T) {
ctx := testutils.Context(t)
app := startNewApplicationV2(t, func(c *chainlink.Config, s *chainlink.Secrets) {
c.JobPipeline.ExternalInitiatorsEnabled = ptr(true)
})
client, _ := app.NewShellAndRenderer()
set := flag.NewFlagSet("create", 0)
flagSetApplyFromAction(client.CreateExternalInitiator, set, "")
assert.NoError(t, set.Parse(test.args))
c := cli.NewContext(nil, set, nil)
err := client.CreateExternalInitiator(c)
require.NoError(t, err)
var exi bridges.ExternalInitiator
err = app.GetDB().GetContext(ctx, &exi, `SELECT * FROM external_initiators WHERE name = $1`, test.args[0])
require.NoError(t, err)
if len(test.args) > 1 {
assert.Equal(t, test.args[1], exi.URL.String())
}
})`
$DIR/core/cmd/shell_remote_test.go: `.Context(t)`
$DIR/core/cmd/shell_remote_test.go: `.NewShellAndRenderer()`
$DIR/core/cmd/shell_remote_test.go: `.NewFlagSet("create", 0)`
$DIR/core/cmd/shell_remote_test.go: `.NewContext(nil, set, nil)`
$DIR/core/cmd/shell_remote_test.go: `.CreateExternalInitiator(c)`
$DIR/core/cmd/shell_remote_test.go: `.GetDB()`
$DIR/core/cmd/shell_remote_test.go: `.GetContext(ctx, &exi, `SELECT * FROM external_initiators WHERE name = $1`, test.args[0])`
$DIR/core/cmd/shell_remote_test.go: `.Run(test.name, func(t *testing.T) {
app := startNewApplicationV2(t, func(c *chainlink.Config, s *chainlink.Secrets) {
c.JobPipeline.ExternalInitiatorsEnabled = ptr(true)
})
client, _ := app.NewShellAndRenderer()
initialExis := len(cltest.AllExternalInitiators(t, app.GetDB()))
set := flag.NewFlagSet("create", 0)
flagSetApplyFromAction(client.CreateExternalInitiator, set, "")
assert.NoError(t, set.Parse(test.args))
c := cli.NewContext(nil, set, nil)
err := client.CreateExternalInitiator(c)
assert.Error(t, err)
exis := cltest.AllExternalInitiators(t, app.GetDB())
assert.Len(t, exis, initialExis)
})`
$DIR/core/cmd/shell_remote_test.go: `.NewShellAndRenderer()`
$DIR/core/cmd/shell_remote_test.go: `.AllExternalInitiators(t, app.GetDB())`
$DIR/core/cmd/shell_remote_test.go: `.GetDB()`
$DIR/core/cmd/shell_remote_test.go: `.NewFlagSet("create", 0)`
$DIR/core/cmd/shell_remote_test.go: `.NewContext(nil, set, nil)`
$DIR/core/cmd/shell_remote_test.go: `.CreateExternalInitiator(c)`
$DIR/core/cmd/shell_remote_test.go: `.AllExternalInitiators(t, app.GetDB())`
$DIR/core/cmd/shell_remote_test.go: `.GetDB()`
$DIR/core/cmd/shell_remote_test.go: `.NewShellAndRenderer()`
$DIR/core/cmd/shell_remote_test.go: `.NewToken()`
$DIR/core/cmd/shell_remote_test.go: `.NewExternalInitiator(token,
&bridges.ExternalInitiatorRequest{Name: uuid.New().String()},
)`
$DIR/core/cmd/shell_remote_test.go: `.New()`
$DIR/core/cmd/shell_remote_test.go: `.String()`
$DIR/core/cmd/shell_remote_test.go: `.BridgeORM()`
$DIR/core/cmd/shell_remote_test.go: `.CreateExternalInitiator(testutils.Context(t), exi)`
$DIR/core/cmd/shell_remote_test.go: `.Context(t)`
$DIR/core/cmd/shell_remote_test.go: `.NewFlagSet("test", 0)`
$DIR/core/cmd/shell_remote_test.go: `.NewContext(nil, set, nil)`
$DIR/core/cmd/shell_remote_test.go: `.NewShellAndRenderer()`
$DIR/core/cmd/shell_remote_test.go: `.NewFlagSet("test", 0)`
$DIR/core/cmd/shell_remote_test.go: `.NewContext(nil, set, nil)`
$DIR/core/cmd/shell_remote_test.go: `.AuthenticationProvider()`
$DIR/core/cmd/shell_remote_test.go: `.NewUserWithSession(t, orm)`
$DIR/core/cmd/shell_remote_test.go: `.Run(test.name, func(t *testing.T) {
enteredStrings := []string{test.email, test.pwd}
prompter := &cltest.MockCountingPrompter{T: t, EnteredStrings: enteredStrings}
client := app.NewAuthenticatingShell(prompter)
set := flag.NewFlagSet("test", 0)
flagSetApplyFromAction(client.RemoteLogin, set, "")
require.NoError(t, set.Set("file", test.file))
require.NoError(t, set.Set("bypass-version-check", "true"))
c := cli.NewContext(nil, set, nil)
err := client.RemoteLogin(c)
if test.wantError {
assert.Error(t, err)
} else {
assert.NoError(t, err)
}
})`
$DIR/core/cmd/shell_remote_test.go: `.NewAuthenticatingShell(prompter)`
$DIR/core/cmd/shell_remote_test.go: `.NewFlagSet("test", 0)`
$DIR/core/cmd/shell_remote_test.go: `.NewContext(nil, set, nil)`
$DIR/core/cmd/shell_remote_test.go: `.RemoteLogin(c)`
$DIR/core/cmd/shell_remote_test.go: `.NewUserWithSession(t, app.AuthenticationProvider())`
$DIR/core/cmd/shell_remote_test.go: `.AuthenticationProvider()`
$DIR/core/cmd/shell_remote_test.go: `.NewAuthenticatingShell(prompter)`
$DIR/core/cmd/shell_remote_test.go: `.NewFlagSet("test", 0)`
$DIR/core/cmd/shell_remote_test.go: `.NewContext(nil, set, nil)`
$DIR/core/cmd/shell_remote_test.go: `.RemoteLogin(c)`
$DIR/core/cmd/shell_remote_test.go: `.NewFlagSet("test", 0)`
$DIR/core/cmd/shell_remote_test.go: `.NewContext(nil, set, nil)`
$DIR/core/cmd/shell_remote_test.go: `.RemoteLogin(c)`
$DIR/core/cmd/shell_remote_test.go: `.NewUserWithSession(t, app.AuthenticationProvider())`
$DIR/core/cmd/shell_remote_test.go: `.AuthenticationProvider()`
$DIR/core/cmd/shell_remote_test.go: `.Run(test.name, func(t *testing.T) {
enteredStrings := []string{u.Email, cltest.Password}
prompter := &cltest.MockCountingPrompter{T: t, EnteredStrings: enteredStrings}
client := app.NewAuthenticatingShell(prompter)
client.HTTP = &mockHTTPClient{client.HTTP, test.remoteVersion, test.remoteSha}
err := client.CheckRemoteBuildCompatibility(logger.TestLogger(t), test.bypassVersionFlag, test.cliVersion, test.cliSha)
if test.wantError {
assert.Error(t, err)
assert.ErrorIs(t, err, cmd.ErrIncompatible{
RemoteVersion: test.remoteVersion,
RemoteSha: test.remoteSha,
CLIVersion: test.cliVersion,
CLISha: test.cliSha,
})
} else {
assert.NoError(t, err)
}
})`
$DIR/core/cmd/shell_remote_test.go: `.NewAuthenticatingShell(prompter)`
$DIR/core/cmd/shell_remote_test.go: `.CheckRemoteBuildCompatibility(logger.TestLogger(t), test.bypassVersionFlag, test.cliVersion, test.cliSha)`
$DIR/core/cmd/shell_remote_test.go: `.TestLogger(t)`
$DIR/core/cmd/shell_remote_test.go: `.NewUserWithSession(t, app.AuthenticationProvider())`
$DIR/core/cmd/shell_remote_test.go: `.AuthenticationProvider()`
$DIR/core/cmd/shell_remote_test.go: `.NewAuthenticatingShell(prompter)`
$DIR/core/cmd/shell_remote_test.go: `.NewAuthenticatingShell(prompter)`
$DIR/core/cmd/shell_remote_test.go: `.NewFlagSet("test", 0)`
$DIR/core/cmd/shell_remote_test.go: `.NewContext(nil, set, nil)`
$DIR/core/cmd/shell_remote_test.go: `.RemoteLogin(c)`
$DIR/core/cmd/shell_remote_test.go: `.RemoteLogin(c)`
$DIR/core/cmd/shell_remote_test.go: `.ChangePassword(cli.NewContext(nil, nil, nil))`
$DIR/core/cmd/shell_remote_test.go: `.NewContext(nil, nil, nil)`
$DIR/core/cmd/shell_remote_test.go: `.ChangePassword(cli.NewContext(nil, nil, nil))`
$DIR/core/cmd/shell_remote_test.go: `.NewContext(nil, nil, nil)`
$DIR/core/cmd/shell_remote_test.go: `.IndexBridges(c)`
$DIR/core/cmd/shell_remote_test.go: `.NewUserWithSession(t, app.AuthenticationProvider())`
$DIR/core/cmd/shell_remote_test.go: `.AuthenticationProvider()`
$DIR/core/cmd/shell_remote_test.go: `.NewAuthenticatingShell(prompter)`
$DIR/core/cmd/shell_remote_test.go: `.NewFlagSet("test", 0)`
$DIR/core/cmd/shell_remote_test.go: `.NewContext(nil, set, nil)`
$DIR/core/cmd/shell_remote_test.go: `.RemoteLogin(c)`
$DIR/core/cmd/shell_remote_test.go: `.Config.WebServer()`
$DIR/core/cmd/shell_remote_test.go: `.HTTPWriteTimeout()`
$DIR/core/cmd/shell_remote_test.go: `.Uint("seconds", uint(d.Seconds()), "")`
$DIR/core/cmd/shell_remote_test.go: `.Seconds()`
$DIR/core/cmd/shell_remote_test.go: `.TempDir()`
$DIR/core/cmd/shell_remote_test.go: `.String("output_dir", tDir, "")`
$DIR/core/cmd/shell_remote_test.go: `.Profile(cli.NewContext(nil, set, nil))`
$DIR/core/cmd/shell_remote_test.go: `.NewContext(nil, set, nil)`
$DIR/core/cmd/shell_remote_test.go: `.NewUserWithSession(t, app.AuthenticationProvider())`
$DIR/core/cmd/shell_remote_test.go: `.AuthenticationProvider()`
$DIR/core/cmd/shell_remote_test.go: `.NewAuthenticatingShell(prompter)`
$DIR/core/cmd/shell_remote_test.go: `.NewFlagSet("test", 0)`
$DIR/core/cmd/shell_remote_test.go: `.NewContext(nil, set, nil)`
$DIR/core/cmd/shell_remote_test.go: `.RemoteLogin(c)`
$DIR/core/cmd/shell_remote_test.go: `.Uint("seconds", 1, "")`
$DIR/core/cmd/shell_remote_test.go: `.TempDir()`
$DIR/core/cmd/shell_remote_test.go: `.String("output_dir", tDir, "")`
$DIR/core/cmd/shell_remote_test.go: `.Profile(cli.NewContext(nil, set, nil))`
$DIR/core/cmd/shell_remote_test.go: `.NewContext(nil, set, nil)`
$DIR/core/cmd/shell_remote_test.go: `.ReadDir(tDir)`
$DIR/core/cmd/shell_remote_test.go: `.NewAuthenticatingShell(&cltest.MockCountingPrompter{T: t, EnteredStrings: []string{}})`
$DIR/core/cmd/shell_remote_test.go: `.NewFlagSet("test", 0)`
$DIR/core/cmd/shell_remote_test.go: `.Uint("seconds", 1, "")`
$DIR/core/cmd/shell_remote_test.go: `.String("output_dir", t.TempDir(), "")`
$DIR/core/cmd/shell_remote_test.go: `.TempDir()`
$DIR/core/cmd/shell_remote_test.go: `.Profile(cli.NewContext(nil, set, nil))`
$DIR/core/cmd/shell_remote_test.go: `.NewContext(nil, set, nil)`
$DIR/core/cmd/shell_remote_test.go: `.NewShellAndRenderer()`
$DIR/core/cmd/shell_remote_test.go: `.Config.ConfigTOML()`
$DIR/core/cmd/shell_remote_test.go: `.Run("user", func(t *testing.T) {
got, err := client.ConfigV2Str(true)
require.NoError(t, err)
assert.Equal(t, user, got, diff.Diff(user, got))
})`
$DIR/core/cmd/shell_remote_test.go: `.ConfigV2Str(true)`
$DIR/core/cmd/shell_remote_test.go: `.ConfigV2Str(false)`
$DIR/core/cmd/shell_remote_test.go: `.Context(t)`
$DIR/core/cmd/shell_remote_test.go: `.Sprintf("127.0.0.1:%d", freeport.GetOne(t))`
$DIR/core/cmd/shell_remote_test.go: `.GetOne(t)`
$DIR/core/cmd/shell_remote_test.go: `.NewShellAndRenderer()`
$DIR/core/cmd/shell_remote_test.go: `.MustCreateBridge(t, app.GetDB(), cltest.BridgeOpts{})`
$DIR/core/cmd/shell_remote_test.go: `.GetDB()`
$DIR/core/cmd/shell_remote_test.go: `.MustCreateBridge(t, app.GetDB(), cltest.BridgeOpts{})`
$DIR/core/cmd/shell_remote_test.go: `.GetDB()`
$DIR/core/cmd/shell_remote_test.go: `.GenerateOCRSpec(testspecs.OCRSpecParams{DS1BridgeName: bridge.Name.String(), DS2BridgeName: bridge2.Name.String()})`
$DIR/core/cmd/shell_remote_test.go: `.Name.String()`
$DIR/core/cmd/shell_remote_test.go: `.Name.String()`
$DIR/core/cmd/shell_remote_test.go: `.Unmarshal([]byte(ocrspec.Toml()), &jb)`
$DIR/core/cmd/shell_remote_test.go: `.Toml()`
$DIR/core/cmd/shell_remote_test.go: `.Unmarshal([]byte(ocrspec.Toml()), &ocrSpec)`
$DIR/core/cmd/shell_remote_test.go: `.Toml()`
$DIR/core/cmd/shell_remote_test.go: `.MustInsertRandomKey(t, app.KeyStore.Eth())`
$DIR/core/cmd/shell_remote_test.go: `.KeyStore.Eth()`
$DIR/core/cmd/shell_remote_test.go: `.AddJobV2(testutils.Context(t), &jb)`
$DIR/core/cmd/shell_remote_test.go: `.Context(t)`
$DIR/core/cmd/shell_remote_test.go: `.NewFlagSet("test", 0)`
$DIR/core/cmd/shell_remote_test.go: `.NewContext(nil, set, nil)`
$DIR/core/cmd/shell_remote_test.go: `.TriggerPipelineRun(c)`
$DIR/core/cmd/shell_remote_test.go: `.NewShellAndRenderer()`
$DIR/core/cmd/shell_remote_test.go: `.NewFlagSet("test", 0)`
$DIR/core/cmd/shell_remote_test.go: `.NewContext(nil, set, nil)`
$DIR/core/cmd/shell_remote_test.go: `.TriggerPipelineRun(c)`
$DIR/core/cmd/shell_remote_test.go: `.NewShellAndRenderer()`
$DIR/core/cmd/shell_remote_test.go: `.NewFlagSet("test", 0)`
$DIR/core/cmd/shell_remote_test.go: `.NewContext(nil, set, nil)`
$DIR/core/cmd/shell_remote_test.go: `.TriggerPipelineRun(c)`
$DIR/core/cmd/shell_remote_test.go: `.Context(t)`
$DIR/core/cmd/shell_remote_test.go: `.MustRandomUser(t)`
$DIR/core/cmd/shell_remote_test.go: `.NewShellAndRenderer()`
$DIR/core/cmd/shell_remote_test.go: `.NewSessionCookieAuthenticator(app.NewClientOpts(), &cmd.MemoryCookieStore{}, logger.TestLogger(t))`
$DIR/core/cmd/shell_remote_test.go: `.NewClientOpts()`
$DIR/core/cmd/shell_remote_test.go: `.TestLogger(t)`
$DIR/core/cmd/shell_remote_test.go: `.NewAuthenticatedHTTPClient(app.Logger, app.NewClientOpts(), client.CookieAuthenticator, sr)`
$DIR/core/cmd/shell_remote_test.go: `.NewClientOpts()`
$DIR/core/cmd/shell_remote_test.go: `.NewFlagSet("", flag.ExitOnError)`
$DIR/core/cmd/shell_remote_test.go: `.ListJobs(cli.NewContext(nil, fs, nil))`
$DIR/core/cmd/shell_remote_test.go: `.NewContext(nil, fs, nil)`
$DIR/core/cmd/shell_remote_test.go: `.MustExec(t, app.GetDB(), "delete from sessions where email = $1", user.Email)`
$DIR/core/cmd/shell_remote_test.go: `.GetDB()`
$DIR/core/cmd/shell_remote_test.go: `.ListJobs(cli.NewContext(nil, fs, nil))`
$DIR/core/cmd/shell_remote_test.go: `.NewContext(nil, fs, nil)`
$DIR/core/cmd/shell_remote_test.go: `.Context(t)`
$DIR/core/cmd/shell_remote_test.go: `.MustRandomUser(t)`
$DIR/core/cmd/shell_remote_test.go: `.NewShellAndRenderer()`
$DIR/core/cmd/shell_remote_test.go: `.NewAuthenticatedHTTPClient(app.Logger, app.NewClientOpts(), client.CookieAuthenticator, sr)`
$DIR/core/cmd/shell_remote_test.go: `.NewClientOpts()`
$DIR/core/cmd/shell_remote_test.go: `.NewFlagSet("", flag.ExitOnError)`
$DIR/core/cmd/shell_remote_test.go: `.ListJobs(cli.NewContext(nil, fs, nil))`
$DIR/core/cmd/shell_remote_test.go: `.NewContext(nil, fs, nil)`
$DIR/core/cmd/shell_remote_test.go: `.NewShellAndRenderer()`
$DIR/core/cmd/shell_remote_test.go: `.NewFlagSet("loglevel", 0)`
$DIR/core/cmd/shell_remote_test.go: `.NewContext(nil, set, nil)`
$DIR/core/cmd/shell_remote_test.go: `.SetLogLevel(c)`
$DIR/core/cmd/shell_remote_test.go: `.NewFlagSet("logsql", 0)`
$DIR/core/cmd/shell_remote_test.go: `.NewContext(nil, set, nil)`
$DIR/core/cmd/shell_remote_test.go: `.SetLogSQL(c)`
$DIR/core/cmd/shell_remote_test.go: `.NewFlagSet("logsql", 0)`
$DIR/core/cmd/shell_remote_test.go: `.NewContext(nil, set, nil)`
$DIR/core/cmd/shell_remote_test.go: `.SetLogSQL(c)`
$DIR/core/cmd/shell_remote_test.go: `.Config.Database()`
$DIR/core/cmd/shell_remote_test.go: `.LogSQL()`
$DIR/core/cmd/shell_test.go: `t.Run(test.name, func(t *testing.T) {
sr := sessions.SessionRequest{Email: test.email, Password: test.pwd}
store := &cmd.MemoryCookieStore{}
tca := cmd.NewSessionCookieAuthenticator(cmd.ClientOpts{}, store, logger.TestLogger(t))
cookie, err := tca.Authenticate(ctx, sr)
assert.Error(t, err)
assert.Nil(t, cookie)
cookie, err = store.Retrieve()
assert.NoError(t, err)
assert.Nil(t, cookie)
})`
$DIR/core/cmd/shell_test.go: `cookie, err = store.Retrieve()`
$DIR/core/cmd/shell_test.go: `t.Run(test.name, func(t *testing.T) {
sr := sessions.SessionRequest{Email: test.email, Password: test.pwd}
store := &cmd.MemoryCookieStore{}
tca := cmd.NewSessionCookieAuthenticator(app.NewClientOpts(), store, logger.TestLogger(t))
cookie, err := tca.Authenticate(ctx, sr)
if test.wantError {
assert.Error(t, err)
assert.Nil(t, cookie)
cookie, err = store.Retrieve()
assert.NoError(t, err)
assert.Nil(t, cookie)
} else {
assert.NoError(t, err)
assert.NotNil(t, cookie)
retrievedCookie, err := store.Retrieve()
assert.NoError(t, err)
assert.Equal(t, cookie, retrievedCookie)
}
})`
$DIR/core/cmd/shell_test.go: `cookie, err = store.Retrieve()`
$DIR/core/cmd/shell_test.go: `t.Run("missing cookie file", func(t *testing.T) {
store := cmd.DiskCookieStore{Config: cfg}
cookie, err := store.Retrieve()
assert.NoError(t, err)
assert.Nil(t, cookie)
})`
$DIR/core/cmd/shell_test.go: `t.Run("invalid cookie file", func(t *testing.T) {
cfg.rootdir = "../internal/fixtures/badcookie"
store := cmd.DiskCookieStore{Config: cfg}
cookie, err := store.Retrieve()
assert.Error(t, err)
assert.Nil(t, cookie)
})`
$DIR/core/cmd/shell_test.go: `cfg.rootdir = "../internal/fixtures/badcookie"`
$DIR/core/cmd/shell_test.go: `cfg.rootdir = "../internal/fixtures"`
$DIR/core/cmd/shell_test.go: `t.Run(test.name, func(t *testing.T) {
ctx := testutils.Context(t)
db := pgtest.NewSqlxDB(t)
lggr := logger.TestLogger(t)
orm := localauth.NewORM(db, time.Minute, lggr, audit.NoopLogger)
mock := &cltest.MockCountingPrompter{T: t, EnteredStrings: test.enteredStrings, NotTerminal: !test.isTerminal}
tai := cmd.NewPromptingAPIInitializer(mock)
// Clear out fixture users/users created from the other test cases
// This asserts that on initial run with an empty users table that the credentials file will instantiate and
// create/run with a new admin user
pgtest.MustExec(t, db, "DELETE FROM users;")
user, err := tai.Initialize(ctx, orm, lggr)
if test.isError {
assert.Error(t, err)
} else {
assert.NoError(t, err)
assert.Equal(t, len(test.enteredStrings), mock.Count)
persistedUser, err := orm.FindUser(ctx, email)
assert.NoError(t, err)
assert.Equal(t, user.Email, persistedUser.Email)
assert.Equal(t, user.HashedPassword, persistedUser.HashedPassword)
}
})`
$DIR/core/cmd/shell_test.go: `pgtest.MustExec(t, db, "DELETE FROM users;")`
$DIR/core/cmd/shell_test.go: `t.Run(test.name, func(t *testing.T) {
ctx := testutils.Context(t)
db := pgtest.NewSqlxDB(t)
lggr := logger.TestLogger(t)
orm := localauth.NewORM(db, time.Minute, lggr, audit.NoopLogger)
// Clear out fixture users/users created from the other test cases
// This asserts that on initial run with an empty users table that the credentials file will instantiate and
// create/run with a new admin user
pgtest.MustExec(t, db, "DELETE FROM users;")
tfi := cmd.NewFileAPIInitializer(test.file)
user, err := tfi.Initialize(ctx, orm, lggr)
if test.wantError {
assert.Error(t, err)
} else {
assert.NoError(t, err)
assert.Equal(t, cltest.APIEmailAdmin, user.Email)
persistedUser, err := orm.FindUser(ctx, user.Email)
assert.NoError(t, err)
assert.Equal(t, persistedUser.Email, user.Email)
}
})`
$DIR/core/cmd/shell_test.go: `pgtest.MustExec(t, db, "DELETE FROM users;")`
$DIR/core/cmd/shell_test.go: `t.Run(test.name, func(t *testing.T) {
ctx := testutils.Context(t)
lggr := logger.TestLogger(t)
tfi := cmd.NewFileAPIInitializer(test.file)
user, err := tfi.Initialize(ctx, orm, lggr)
if test.wantError {
assert.Error(t, err)
} else {
assert.NoError(t, err)
assert.Equal(t, cltest.APIEmailAdmin, user.Email)
}
})`
$DIR/core/cmd/shell_test.go: `t.Run(test.email, func(t *testing.T) {
enteredStrings := []string{test.email, test.pwd}
prompter := &cltest.MockCountingPrompter{T: t, EnteredStrings: enteredStrings}
builder := cmd.NewPromptingSessionRequestBuilder(prompter)
sr, err := builder.Build("")
require.NoError(t, err)
assert.Equal(t, test.email, sr.Email)
assert.Equal(t, test.pwd, sr.Password)
})`
$DIR/core/cmd/shell_test.go: `t.Run(test.name, func(t *testing.T) {
sr, err := builder.Build(test.file)
assert.Equal(t, test.wantEmail, sr.Email)
if test.wantError {
assert.Error(t, err)
} else {
assert.NoError(t, err)
}
})`
$DIR/core/cmd/shell_test.go: `c.Solana = solcfg.TOMLConfigs{
&solcfg.TOMLConfig{
ChainID: ptr[string]("solana-id-1"),
Enabled: ptr(true),
Chain: solcfg.Chain{},
Nodes: []*solcfg.Node{},
},
&solcfg.TOMLConfig{
ChainID: ptr[string]("solana-id-2"),
Enabled: ptr(true),
Chain: solcfg.Chain{},
Nodes: []*solcfg.Node{},
},
&solcfg.TOMLConfig{
ChainID: ptr[string]("disabled-solana-id-1"),
Enabled: ptr(false),
Chain: solcfg.Chain{},
Nodes: []*solcfg.Node{},
},
}`
$DIR/core/cmd/shell_test.go: `c.Solana = solcfg.TOMLConfigs{
&solcfg.TOMLConfig{
ChainID: ptr[string]("solana-id-1"),
Enabled: ptr(true),
Chain: solcfg.Chain{},
Nodes: []*solcfg.Node{},
},
}`
$DIR/core/cmd/shell_test.go: `t.Run("no plugin", func(t *testing.T) {
relayers, err := rf.NewSolana(ks, tConfig.SolanaConfigs())
require.NoError(t, err)
require.NotNil(t, relayers)
require.Len(t, relayers, nEnabledChains)
// no using plugin, so registry should be empty
require.Len(t, reg.List(), 0)
})`
$DIR/core/cmd/shell_test.go: `t.Run("plugin", func(t *testing.T) {
t.Setenv("CL_SOLANA_CMD", "phony_solana_cmd")
relayers, err := rf.NewSolana(ks, tConfig.SolanaConfigs())
require.NoError(t, err)
require.NotNil(t, relayers)
require.Len(t, relayers, nEnabledChains)
// make sure registry has the plugin
require.Len(t, reg.List(), nEnabledChains)
})`
$DIR/core/cmd/shell_test.go: `t.Setenv("CL_SOLANA_CMD", "phony_solana_cmd")`
$DIR/core/cmd/shell_test.go: `c.Solana = solcfg.TOMLConfigs{
&solcfg.TOMLConfig{
ChainID: ptr[string]("dupe"),
Enabled: ptr(true),
Chain: solcfg.Chain{},
Nodes: []*solcfg.Node{},
},
&solcfg.TOMLConfig{
ChainID: ptr[string]("dupe"),
Enabled: ptr(true),
Chain: solcfg.Chain{},
Nodes: []*solcfg.Node{},
},
}`
$DIR/core/cmd/shell_test.go: `t.Run("no plugin, duplicate chains", func(t *testing.T) {
_, err := rf.NewSolana(ks, duplicateConfig.SolanaConfigs())
require.Error(t, err)
})`
$DIR/core/cmd/shell_test.go: `t.Run("plugin, duplicate chains", func(t *testing.T) {
t.Setenv("CL_SOLANA_CMD", "phony_solana_cmd")
_, err := rf.NewSolana(ks, duplicateConfig.SolanaConfigs())
require.Error(t, err)
})`
$DIR/core/cmd/shell_test.go: `t.Setenv("CL_SOLANA_CMD", "phony_solana_cmd")`
$DIR/core/cmd/shell_test.go: `t.Run("plugin env parsing fails", func(t *testing.T) {
t.Setenv("CL_SOLANA_CMD", "phony_solana_cmd")
t.Setenv("CL_SOLANA_ENV", "fake_path")
_, err := rf.NewSolana(ks, t2Config.SolanaConfigs())
require.Error(t, err)
require.Contains(t, err.Error(), "failed to parse Solana env file")
})`
$DIR/core/cmd/shell_test.go: `t.Setenv("CL_SOLANA_CMD", "phony_solana_cmd")`
$DIR/core/cmd/shell_test.go: `t.Setenv("CL_SOLANA_ENV", "fake_path")`
$DIR/core/cmd/shell_test.go: `t.Setenv("CL_SOLANA_CMD", "phony_solana_cmd")`
$DIR/core/cmd/shell_test.go: `c.Starknet = stkcfg.TOMLConfigs{
&stkcfg.TOMLConfig{
ChainID: ptr[string]("starknet-id-1"),
Enabled: ptr(true),
Chain: stkcfg.Chain{},
Nodes: []*stkcfg.Node{},
FeederURL: commoncfg.MustParseURL("https://feeder.url"),
},
&stkcfg.TOMLConfig{
ChainID: ptr[string]("starknet-id-2"),
Enabled: ptr(true),
Chain: stkcfg.Chain{},
Nodes: []*stkcfg.Node{},
FeederURL: commoncfg.MustParseURL("https://feeder.url"),
},
&stkcfg.TOMLConfig{
ChainID: ptr[string]("disabled-starknet-id-1"),
Enabled: ptr(false),
Chain: stkcfg.Chain{},
Nodes: []*stkcfg.Node{},
FeederURL: commoncfg.MustParseURL("https://feeder.url"),
},
}`
$DIR/core/cmd/shell_test.go: `c.Starknet = stkcfg.TOMLConfigs{
&stkcfg.TOMLConfig{
ChainID: ptr[string]("starknet-id-3"),
Enabled: ptr(true),
Chain: stkcfg.Chain{},
Nodes: []*stkcfg.Node{},
FeederURL: commoncfg.MustParseURL("https://feeder.url"),
},
}`
$DIR/core/cmd/shell_test.go: `t.Run("no plugin", func(t *testing.T) {
relayers, err := rf.NewStarkNet(ks, tConfig.StarknetConfigs())
require.NoError(t, err)
require.NotNil(t, relayers)
require.Len(t, relayers, nEnabledChains)
// no using plugin, so registry should be empty
require.Len(t, reg.List(), 0)
})`
$DIR/core/cmd/shell_test.go: `t.Run("plugin", func(t *testing.T) {
t.Setenv("CL_STARKNET_CMD", "phony_starknet_cmd")
relayers, err := rf.NewStarkNet(ks, tConfig.StarknetConfigs())
require.NoError(t, err)
require.NotNil(t, relayers)
require.Len(t, relayers, nEnabledChains)
// make sure registry has the plugin
require.Len(t, reg.List(), nEnabledChains)
})`
$DIR/core/cmd/shell_test.go: `t.Setenv("CL_STARKNET_CMD", "phony_starknet_cmd")`
$DIR/core/cmd/shell_test.go: `c.Starknet = stkcfg.TOMLConfigs{
&stkcfg.TOMLConfig{
ChainID: ptr[string]("dupe"),
Enabled: ptr(true),
Chain: stkcfg.Chain{},
Nodes: []*stkcfg.Node{},
FeederURL: commoncfg.MustParseURL("https://feeder.url"),
},
&stkcfg.TOMLConfig{
ChainID: ptr[string]("dupe"),
Enabled: ptr(true),
Chain: stkcfg.Chain{},
Nodes: []*stkcfg.Node{},
FeederURL: commoncfg.MustParseURL("https://feeder.url"),
},
}`
$DIR/core/cmd/shell_test.go: `t.Run("no plugin, duplicate chains", func(t *testing.T) {
_, err := rf.NewStarkNet(ks, duplicateConfig.StarknetConfigs())
require.Error(t, err)
})`
$DIR/core/cmd/shell_test.go: `t.Run("plugin, duplicate chains", func(t *testing.T) {
t.Setenv("CL_STARKNET_CMD", "phony_starknet_cmd")
_, err := rf.NewStarkNet(ks, duplicateConfig.StarknetConfigs())
require.Error(t, err)
})`
$DIR/core/cmd/shell_test.go: `t.Setenv("CL_STARKNET_CMD", "phony_starknet_cmd")`
$DIR/core/cmd/shell_test.go: `t.Run("plugin env parsing fails", func(t *testing.T) {
t.Setenv("CL_STARKNET_CMD", "phony_starknet_cmd")
t.Setenv("CL_STARKNET_ENV", "fake_path")
_, err := rf.NewStarkNet(ks, t2Config.StarknetConfigs())
require.Error(t, err)
require.Contains(t, err.Error(), "failed to parse Starknet env file")
})`
$DIR/core/cmd/shell_test.go: `t.Setenv("CL_STARKNET_CMD", "phony_starknet_cmd")`
$DIR/core/cmd/shell_test.go: `t.Setenv("CL_STARKNET_ENV", "fake_path")`
$DIR/core/cmd/shell_test.go: `t.Setenv("CL_STARKNET_CMD", "phony_starknet_cmd")`
$DIR/core/cmd/shell_test.go: `.Context(t)`
$DIR/core/cmd/shell_test.go: `.NewApplicationEVMDisabled(t)`
$DIR/core/cmd/shell_test.go: `.NewUserWithSession(t, app.AuthenticationProvider())`
$DIR/core/cmd/shell_test.go: `.AuthenticationProvider()`
$DIR/core/cmd/shell_test.go: `.Run(test.name, func(t *testing.T) {
sr := sessions.SessionRequest{Email: test.email, Password: test.pwd}
store := &cmd.MemoryCookieStore{}
tca := cmd.NewSessionCookieAuthenticator(cmd.ClientOpts{}, store, logger.TestLogger(t))
cookie, err := tca.Authenticate(ctx, sr)
assert.Error(t, err)
assert.Nil(t, cookie)
cookie, err = store.Retrieve()
assert.NoError(t, err)
assert.Nil(t, cookie)
})`
$DIR/core/cmd/shell_test.go: `.NewSessionCookieAuthenticator(cmd.ClientOpts{}, store, logger.TestLogger(t))`
$DIR/core/cmd/shell_test.go: `.TestLogger(t)`
$DIR/core/cmd/shell_test.go: `.Authenticate(ctx, sr)`
$DIR/core/cmd/shell_test.go: `.Retrieve()`
$DIR/core/cmd/shell_test.go: `.Context(t)`
$DIR/core/cmd/shell_test.go: `.NewApplicationEVMDisabled(t)`
$DIR/core/cmd/shell_test.go: `.NewUserWithSession(t, app.AuthenticationProvider())`
$DIR/core/cmd/shell_test.go: `.AuthenticationProvider()`
$DIR/core/cmd/shell_test.go: `.Run(test.name, func(t *testing.T) {
sr := sessions.SessionRequest{Email: test.email, Password: test.pwd}
store := &cmd.MemoryCookieStore{}
tca := cmd.NewSessionCookieAuthenticator(app.NewClientOpts(), store, logger.TestLogger(t))
cookie, err := tca.Authenticate(ctx, sr)
if test.wantError {
assert.Error(t, err)
assert.Nil(t, cookie)
cookie, err = store.Retrieve()
assert.NoError(t, err)
assert.Nil(t, cookie)
} else {
assert.NoError(t, err)
assert.NotNil(t, cookie)
retrievedCookie, err := store.Retrieve()
assert.NoError(t, err)
assert.Equal(t, cookie, retrievedCookie)
}
})`
$DIR/core/cmd/shell_test.go: `.NewSessionCookieAuthenticator(app.NewClientOpts(), store, logger.TestLogger(t))`
$DIR/core/cmd/shell_test.go: `.NewClientOpts()`
$DIR/core/cmd/shell_test.go: `.TestLogger(t)`
$DIR/core/cmd/shell_test.go: `.Authenticate(ctx, sr)`
$DIR/core/cmd/shell_test.go: `.Retrieve()`
$DIR/core/cmd/shell_test.go: `.Retrieve()`
$DIR/core/cmd/shell_test.go: `.Run("missing cookie file", func(t *testing.T) {
store := cmd.DiskCookieStore{Config: cfg}
cookie, err := store.Retrieve()
assert.NoError(t, err)
assert.Nil(t, cookie)
})`
$DIR/core/cmd/shell_test.go: `.Retrieve()`
$DIR/core/cmd/shell_test.go: `.Run("invalid cookie file", func(t *testing.T) {
cfg.rootdir = "../internal/fixtures/badcookie"
store := cmd.DiskCookieStore{Config: cfg}
cookie, err := store.Retrieve()
assert.Error(t, err)
assert.Nil(t, cookie)
})`
$DIR/core/cmd/shell_test.go: `.Retrieve()`
$DIR/core/cmd/shell_test.go: `.Retrieve()`
$DIR/core/cmd/shell_test.go: `.Run(test.name, func(t *testing.T) {
ctx := testutils.Context(t)
db := pgtest.NewSqlxDB(t)
lggr := logger.TestLogger(t)
orm := localauth.NewORM(db, time.Minute, lggr, audit.NoopLogger)
mock := &cltest.MockCountingPrompter{T: t, EnteredStrings: test.enteredStrings, NotTerminal: !test.isTerminal}
tai := cmd.NewPromptingAPIInitializer(mock)
// Clear out fixture users/users created from the other test cases
// This asserts that on initial run with an empty users table that the credentials file will instantiate and
// create/run with a new admin user
pgtest.MustExec(t, db, "DELETE FROM users;")
user, err := tai.Initialize(ctx, orm, lggr)
if test.isError {
assert.Error(t, err)
} else {
assert.NoError(t, err)
assert.Equal(t, len(test.enteredStrings), mock.Count)
persistedUser, err := orm.FindUser(ctx, email)
assert.NoError(t, err)
assert.Equal(t, user.Email, persistedUser.Email)
assert.Equal(t, user.HashedPassword, persistedUser.HashedPassword)
}
})`
$DIR/core/cmd/shell_test.go: `.Context(t)`
$DIR/core/cmd/shell_test.go: `.NewSqlxDB(t)`
$DIR/core/cmd/shell_test.go: `.TestLogger(t)`
$DIR/core/cmd/shell_test.go: `.NewORM(db, time.Minute, lggr, audit.NoopLogger)`
$DIR/core/cmd/shell_test.go: `.NewPromptingAPIInitializer(mock)`
$DIR/core/cmd/shell_test.go: `.MustExec(t, db, "DELETE FROM users;")`
$DIR/core/cmd/shell_test.go: `.Initialize(ctx, orm, lggr)`
$DIR/core/cmd/shell_test.go: `.FindUser(ctx, email)`
$DIR/core/cmd/shell_test.go: `.Context(t)`
$DIR/core/cmd/shell_test.go: `.NewSqlxDB(t)`
$DIR/core/cmd/shell_test.go: `.TestLogger(t)`
$DIR/core/cmd/shell_test.go: `.NewORM(db, time.Minute, lggr, audit.NoopLogger)`
$DIR/core/cmd/shell_test.go: `.Exec("DELETE FROM users;")`
$DIR/core/cmd/shell_test.go: `.MustRandomUser(t)`
$DIR/core/cmd/shell_test.go: `.NewPromptingAPIInitializer(mock)`
$DIR/core/cmd/shell_test.go: `.Initialize(ctx, orm, lggr)`
$DIR/core/cmd/shell_test.go: `.Run(test.name, func(t *testing.T) {
ctx := testutils.Context(t)
db := pgtest.NewSqlxDB(t)
lggr := logger.TestLogger(t)
orm := localauth.NewORM(db, time.Minute, lggr, audit.NoopLogger)
// Clear out fixture users/users created from the other test cases
// This asserts that on initial run with an empty users table that the credentials file will instantiate and
// create/run with a new admin user
pgtest.MustExec(t, db, "DELETE FROM users;")
tfi := cmd.NewFileAPIInitializer(test.file)
user, err := tfi.Initialize(ctx, orm, lggr)
if test.wantError {
assert.Error(t, err)
} else {
assert.NoError(t, err)
assert.Equal(t, cltest.APIEmailAdmin, user.Email)
persistedUser, err := orm.FindUser(ctx, user.Email)
assert.NoError(t, err)
assert.Equal(t, persistedUser.Email, user.Email)
}
})`
$DIR/core/cmd/shell_test.go: `.Context(t)`
$DIR/core/cmd/shell_test.go: `.NewSqlxDB(t)`
$DIR/core/cmd/shell_test.go: `.TestLogger(t)`
$DIR/core/cmd/shell_test.go: `.NewORM(db, time.Minute, lggr, audit.NoopLogger)`
$DIR/core/cmd/shell_test.go: `.MustExec(t, db, "DELETE FROM users;")`
$DIR/core/cmd/shell_test.go: `.NewFileAPIInitializer(test.file)`
$DIR/core/cmd/shell_test.go: `.Initialize(ctx, orm, lggr)`
$DIR/core/cmd/shell_test.go: `.FindUser(ctx, user.Email)`
$DIR/core/cmd/shell_test.go: `.NewSqlxDB(t)`
$DIR/core/cmd/shell_test.go: `.NewORM(db, time.Minute, logger.TestLogger(t), audit.NoopLogger)`
$DIR/core/cmd/shell_test.go: `.TestLogger(t)`
$DIR/core/cmd/shell_test.go: `.Run(test.name, func(t *testing.T) {
ctx := testutils.Context(t)
lggr := logger.TestLogger(t)
tfi := cmd.NewFileAPIInitializer(test.file)
user, err := tfi.Initialize(ctx, orm, lggr)
if test.wantError {
assert.Error(t, err)
} else {
assert.NoError(t, err)
assert.Equal(t, cltest.APIEmailAdmin, user.Email)
}
})`
$DIR/core/cmd/shell_test.go: `.Context(t)`
$DIR/core/cmd/shell_test.go: `.TestLogger(t)`
$DIR/core/cmd/shell_test.go: `.NewFileAPIInitializer(test.file)`
$DIR/core/cmd/shell_test.go: `.Initialize(ctx, orm, lggr)`
$DIR/core/cmd/shell_test.go: `.Run(test.email, func(t *testing.T) {
enteredStrings := []string{test.email, test.pwd}
prompter := &cltest.MockCountingPrompter{T: t, EnteredStrings: enteredStrings}
builder := cmd.NewPromptingSessionRequestBuilder(prompter)
sr, err := builder.Build("")
require.NoError(t, err)
assert.Equal(t, test.email, sr.Email)
assert.Equal(t, test.pwd, sr.Password)
})`
$DIR/core/cmd/shell_test.go: `.NewPromptingSessionRequestBuilder(prompter)`
$DIR/core/cmd/shell_test.go: `.Build("")`
$DIR/core/cmd/shell_test.go: `.NewFileSessionRequestBuilder(logger.TestLogger(t))`
$DIR/core/cmd/shell_test.go: `.TestLogger(t)`
$DIR/core/cmd/shell_test.go: `.Run(test.name, func(t *testing.T) {
sr, err := builder.Build(test.file)
assert.Equal(t, test.wantEmail, sr.Email)
if test.wantError {
assert.Error(t, err)
} else {
assert.NoError(t, err)
}
})`
$DIR/core/cmd/shell_test.go: `.Build(test.file)`
$DIR/core/cmd/shell_test.go: `.Int(rand.Reader, big.NewInt(256*1024*1024))`
$DIR/core/cmd/shell_test.go: `.NewInt(256*1024*1024)`
$DIR/core/cmd/shell_test.go: `.Base(fmt.Sprintf("%s-%d", t.Name(), r.Int64()))`
$DIR/core/cmd/shell_test.go: `.Sprintf("%s-%d", t.Name(), r.Int64())`
$DIR/core/cmd/shell_test.go: `.Name()`
$DIR/core/cmd/shell_test.go: `.Int64()`
$DIR/core/cmd/shell_test.go: `.TestLogger(t)`
$DIR/core/cmd/shell_test.go: `.NewUserCache(subDir, func() logger.Logger { return lggr })`
$DIR/core/cmd/shell_test.go: `.RootDir()`
$DIR/core/cmd/shell_test.go: `.TestLogger(t)`
$DIR/core/cmd/shell_test.go: `.NewLoopRegistry(lggr, nil)`
$DIR/core/cmd/shell_test.go: `.NewSolana(t)`
$DIR/core/cmd/shell_test.go: `.NewGeneralConfig(t, func(c *chainlink.Config, s *chainlink.Secrets) {
c.Solana = solcfg.TOMLConfigs{
&solcfg.TOMLConfig{
ChainID: ptr[string]("solana-id-1"),
Enabled: ptr(true),
Chain: solcfg.Chain{},
Nodes: []*solcfg.Node{},
},
&solcfg.TOMLConfig{
ChainID: ptr[string]("solana-id-2"),
Enabled: ptr(true),
Chain: solcfg.Chain{},
Nodes: []*solcfg.Node{},
},
&solcfg.TOMLConfig{
ChainID: ptr[string]("disabled-solana-id-1"),
Enabled: ptr(false),
Chain: solcfg.Chain{},
Nodes: []*solcfg.Node{},
},
}
})`
$DIR/core/cmd/shell_test.go: `.NewGeneralConfig(t, func(c *chainlink.Config, s *chainlink.Secrets) {
c.Solana = solcfg.TOMLConfigs{
&solcfg.TOMLConfig{
ChainID: ptr[string]("solana-id-1"),
Enabled: ptr(true),
Chain: solcfg.Chain{},
Nodes: []*solcfg.Node{},
},
}
})`
$DIR/core/cmd/shell_test.go: `.Run("no plugin", func(t *testing.T) {
relayers, err := rf.NewSolana(ks, tConfig.SolanaConfigs())
require.NoError(t, err)
require.NotNil(t, relayers)
require.Len(t, relayers, nEnabledChains)
// no using plugin, so registry should be empty
require.Len(t, reg.List(), 0)
})`
$DIR/core/cmd/shell_test.go: `.NewSolana(ks, tConfig.SolanaConfigs())`
$DIR/core/cmd/shell_test.go: `.SolanaConfigs()`
$DIR/core/cmd/shell_test.go: `.Run("plugin", func(t *testing.T) {
t.Setenv("CL_SOLANA_CMD", "phony_solana_cmd")
relayers, err := rf.NewSolana(ks, tConfig.SolanaConfigs())
require.NoError(t, err)
require.NotNil(t, relayers)
require.Len(t, relayers, nEnabledChains)
// make sure registry has the plugin
require.Len(t, reg.List(), nEnabledChains)
})`
$DIR/core/cmd/shell_test.go: `.Setenv("CL_SOLANA_CMD", "phony_solana_cmd")`
$DIR/core/cmd/shell_test.go: `.NewSolana(ks, tConfig.SolanaConfigs())`
$DIR/core/cmd/shell_test.go: `.SolanaConfigs()`
$DIR/core/cmd/shell_test.go: `.NewGeneralConfig(t, func(c *chainlink.Config, s *chainlink.Secrets) {
c.Solana = solcfg.TOMLConfigs{
&solcfg.TOMLConfig{
ChainID: ptr[string]("dupe"),
Enabled: ptr(true),
Chain: solcfg.Chain{},
Nodes: []*solcfg.Node{},
},
&solcfg.TOMLConfig{
ChainID: ptr[string]("dupe"),
Enabled: ptr(true),
Chain: solcfg.Chain{},
Nodes: []*solcfg.Node{},
},
}
})`
$DIR/core/cmd/shell_test.go: `.Run("no plugin, duplicate chains", func(t *testing.T) {
_, err := rf.NewSolana(ks, duplicateConfig.SolanaConfigs())
require.Error(t, err)
})`
$DIR/core/cmd/shell_test.go: `.NewSolana(ks, duplicateConfig.SolanaConfigs())`
$DIR/core/cmd/shell_test.go: `.SolanaConfigs()`
$DIR/core/cmd/shell_test.go: `.Run("plugin, duplicate chains", func(t *testing.T) {
t.Setenv("CL_SOLANA_CMD", "phony_solana_cmd")
_, err := rf.NewSolana(ks, duplicateConfig.SolanaConfigs())
require.Error(t, err)
})`
$DIR/core/cmd/shell_test.go: `.Setenv("CL_SOLANA_CMD", "phony_solana_cmd")`
$DIR/core/cmd/shell_test.go: `.NewSolana(ks, duplicateConfig.SolanaConfigs())`
$DIR/core/cmd/shell_test.go: `.SolanaConfigs()`
$DIR/core/cmd/shell_test.go: `.Run("plugin env parsing fails", func(t *testing.T) {
t.Setenv("CL_SOLANA_CMD", "phony_solana_cmd")
t.Setenv("CL_SOLANA_ENV", "fake_path")
_, err := rf.NewSolana(ks, t2Config.SolanaConfigs())
require.Error(t, err)
require.Contains(t, err.Error(), "failed to parse Solana env file")
})`
$DIR/core/cmd/shell_test.go: `.Setenv("CL_SOLANA_CMD", "phony_solana_cmd")`
$DIR/core/cmd/shell_test.go: `.Setenv("CL_SOLANA_ENV", "fake_path")`
$DIR/core/cmd/shell_test.go: `.NewSolana(ks, t2Config.SolanaConfigs())`
$DIR/core/cmd/shell_test.go: `.SolanaConfigs()`
$DIR/core/cmd/shell_test.go: `.Setenv("CL_SOLANA_CMD", "phony_solana_cmd")`
$DIR/core/cmd/shell_test.go: `.NewSolana(ks, tConfig.SolanaConfigs())`
$DIR/core/cmd/shell_test.go: `.SolanaConfigs()`
$DIR/core/cmd/shell_test.go: `.TestLogger(t)`
$DIR/core/cmd/shell_test.go: `.NewLoopRegistry(lggr, nil)`
$DIR/core/cmd/shell_test.go: `.NewStarkNet(t)`
$DIR/core/cmd/shell_test.go: `.NewGeneralConfig(t, func(c *chainlink.Config, s *chainlink.Secrets) {
c.Starknet = stkcfg.TOMLConfigs{
&stkcfg.TOMLConfig{
ChainID: ptr[string]("starknet-id-1"),
Enabled: ptr(true),
Chain: stkcfg.Chain{},
Nodes: []*stkcfg.Node{},
FeederURL: commoncfg.MustParseURL("https://feeder.url"),
},
&stkcfg.TOMLConfig{
ChainID: ptr[string]("starknet-id-2"),
Enabled: ptr(true),
Chain: stkcfg.Chain{},
Nodes: []*stkcfg.Node{},
FeederURL: commoncfg.MustParseURL("https://feeder.url"),
},
&stkcfg.TOMLConfig{
ChainID: ptr[string]("disabled-starknet-id-1"),
Enabled: ptr(false),
Chain: stkcfg.Chain{},
Nodes: []*stkcfg.Node{},
FeederURL: commoncfg.MustParseURL("https://feeder.url"),
},
}
})`
$DIR/core/cmd/shell_test.go: `.MustParseURL("https://feeder.url")`
$DIR/core/cmd/shell_test.go: `.MustParseURL("https://feeder.url")`
$DIR/core/cmd/shell_test.go: `.MustParseURL("https://feeder.url")`
$DIR/core/cmd/shell_test.go: `.NewGeneralConfig(t, func(c *chainlink.Config, s *chainlink.Secrets) {
c.Starknet = stkcfg.TOMLConfigs{
&stkcfg.TOMLConfig{
ChainID: ptr[string]("starknet-id-3"),
Enabled: ptr(true),
Chain: stkcfg.Chain{},
Nodes: []*stkcfg.Node{},
FeederURL: commoncfg.MustParseURL("https://feeder.url"),
},
}
})`
$DIR/core/cmd/shell_test.go: `.MustParseURL("https://feeder.url")`
$DIR/core/cmd/shell_test.go: `.Run("no plugin", func(t *testing.T) {
relayers, err := rf.NewStarkNet(ks, tConfig.StarknetConfigs())
require.NoError(t, err)
require.NotNil(t, relayers)
require.Len(t, relayers, nEnabledChains)
// no using plugin, so registry should be empty
require.Len(t, reg.List(), 0)
})`
$DIR/core/cmd/shell_test.go: `.NewStarkNet(ks, tConfig.StarknetConfigs())`
$DIR/core/cmd/shell_test.go: `.StarknetConfigs()`
$DIR/core/cmd/shell_test.go: `.Run("plugin", func(t *testing.T) {
t.Setenv("CL_STARKNET_CMD", "phony_starknet_cmd")
relayers, err := rf.NewStarkNet(ks, tConfig.StarknetConfigs())
require.NoError(t, err)
require.NotNil(t, relayers)
require.Len(t, relayers, nEnabledChains)
// make sure registry has the plugin
require.Len(t, reg.List(), nEnabledChains)
})`
$DIR/core/cmd/shell_test.go: `.Setenv("CL_STARKNET_CMD", "phony_starknet_cmd")`
$DIR/core/cmd/shell_test.go: `.NewStarkNet(ks, tConfig.StarknetConfigs())`
$DIR/core/cmd/shell_test.go: `.StarknetConfigs()`
$DIR/core/cmd/shell_test.go: `.NewGeneralConfig(t, func(c *chainlink.Config, s *chainlink.Secrets) {
c.Starknet = stkcfg.TOMLConfigs{
&stkcfg.TOMLConfig{
ChainID: ptr[string]("dupe"),
Enabled: ptr(true),
Chain: stkcfg.Chain{},
Nodes: []*stkcfg.Node{},
FeederURL: commoncfg.MustParseURL("https://feeder.url"),
},
&stkcfg.TOMLConfig{
ChainID: ptr[string]("dupe"),
Enabled: ptr(true),
Chain: stkcfg.Chain{},
Nodes: []*stkcfg.Node{},
FeederURL: commoncfg.MustParseURL("https://feeder.url"),
},
}
})`
$DIR/core/cmd/shell_test.go: `.MustParseURL("https://feeder.url")`
$DIR/core/cmd/shell_test.go: `.MustParseURL("https://feeder.url")`
$DIR/core/cmd/shell_test.go: `.Run("no plugin, duplicate chains", func(t *testing.T) {
_, err := rf.NewStarkNet(ks, duplicateConfig.StarknetConfigs())
require.Error(t, err)
})`
$DIR/core/cmd/shell_test.go: `.NewStarkNet(ks, duplicateConfig.StarknetConfigs())`
$DIR/core/cmd/shell_test.go: `.StarknetConfigs()`
$DIR/core/cmd/shell_test.go: `.Run("plugin, duplicate chains", func(t *testing.T) {
t.Setenv("CL_STARKNET_CMD", "phony_starknet_cmd")
_, err := rf.NewStarkNet(ks, duplicateConfig.StarknetConfigs())
require.Error(t, err)
})`
$DIR/core/cmd/shell_test.go: `.Setenv("CL_STARKNET_CMD", "phony_starknet_cmd")`
$DIR/core/cmd/shell_test.go: `.NewStarkNet(ks, duplicateConfig.StarknetConfigs())`
$DIR/core/cmd/shell_test.go: `.StarknetConfigs()`
$DIR/core/cmd/shell_test.go: `.Run("plugin env parsing fails", func(t *testing.T) {
t.Setenv("CL_STARKNET_CMD", "phony_starknet_cmd")
t.Setenv("CL_STARKNET_ENV", "fake_path")
_, err := rf.NewStarkNet(ks, t2Config.StarknetConfigs())
require.Error(t, err)
require.Contains(t, err.Error(), "failed to parse Starknet env file")
})`
$DIR/core/cmd/shell_test.go: `.Setenv("CL_STARKNET_CMD", "phony_starknet_cmd")`
$DIR/core/cmd/shell_test.go: `.Setenv("CL_STARKNET_ENV", "fake_path")`
$DIR/core/cmd/shell_test.go: `.NewStarkNet(ks, t2Config.StarknetConfigs())`
$DIR/core/cmd/shell_test.go: `.StarknetConfigs()`
$DIR/core/cmd/shell_test.go: `.Setenv("CL_STARKNET_CMD", "phony_starknet_cmd")`
$DIR/core/cmd/shell_test.go: `.NewStarkNet(ks, tConfig.StarknetConfigs())`
$DIR/core/cmd/shell_test.go: `.StarknetConfigs()`
$DIR/core/cmd/solana_chains_commands_test.go: `.RandomChainID()`
$DIR/core/cmd/solana_chains_commands_test.go: `.NewShellAndRenderer()`
$DIR/core/cmd/solana_keys_commands_test.go: `buffer.Reset()`
$DIR/core/cmd/solana_keys_commands_test.go: `output = buffer.String()`
$DIR/core/cmd/solana_keys_commands_test.go: `requireSolanaKeyCount(t, app, 0)`
$DIR/core/cmd/solana_keys_commands_test.go: `t.Run("ListSolanaKeys", func(tt *testing.T) {
defer cleanup()
ctx := testutils.Context(t)
client, r := app.NewShellAndRenderer()
key, err := app.GetKeyStore().Solana().Create(ctx)
require.NoError(t, err)
requireSolanaKeyCount(t, app, 1)
assert.Nil(t, cmd.NewSolanaKeysClient(client).ListKeys(cltest.EmptyCLIContext()))
require.Equal(t, 1, len(r.Renders))
keys := *r.Renders[0].(*cmd.SolanaKeyPresenters)
assert.True(t, key.PublicKeyStr() == keys[0].PubKey)
})`
$DIR/core/cmd/solana_keys_commands_test.go: `requireSolanaKeyCount(t, app, 1)`
$DIR/core/cmd/solana_keys_commands_test.go: `t.Run("CreateSolanaKey", func(tt *testing.T) {
defer cleanup()
client, _ := app.NewShellAndRenderer()
require.NoError(t, cmd.NewSolanaKeysClient(client).CreateKey(nilContext))
keys, err := app.GetKeyStore().Solana().GetAll()
require.NoError(t, err)
require.Len(t, keys, 1)
})`
$DIR/core/cmd/solana_keys_commands_test.go: `t.Run("DeleteSolanaKey", func(tt *testing.T) {
defer cleanup()
ctx := testutils.Context(t)
client, _ := app.NewShellAndRenderer()
key, err := app.GetKeyStore().Solana().Create(ctx)
require.NoError(t, err)
requireSolanaKeyCount(t, app, 1)
set := flag.NewFlagSet("test", 0)
flagSetApplyFromAction(cmd.NewSolanaKeysClient(client).DeleteKey, set, "solana")
require.NoError(tt, set.Set("yes", "true"))
strID := key.ID()
err = set.Parse([]string{strID})
require.NoError(t, err)
c := cli.NewContext(nil, set, nil)
err = cmd.NewSolanaKeysClient(client).DeleteKey(c)
require.NoError(t, err)
requireSolanaKeyCount(t, app, 0)
})`
$DIR/core/cmd/solana_keys_commands_test.go: `requireSolanaKeyCount(t, app, 1)`
$DIR/core/cmd/solana_keys_commands_test.go: `flagSetApplyFromAction(cmd.NewSolanaKeysClient(client).DeleteKey, set, "solana")`
$DIR/core/cmd/solana_keys_commands_test.go: `err = set.Parse([]string{strID})`
$DIR/core/cmd/solana_keys_commands_test.go: `err = cmd.NewSolanaKeysClient(client).DeleteKey(c)`
$DIR/core/cmd/solana_keys_commands_test.go: `requireSolanaKeyCount(t, app, 0)`
$DIR/core/cmd/solana_keys_commands_test.go: `flagSetApplyFromAction(cmd.NewSolanaKeysClient(client).ExportKey, set, "solana")`
$DIR/core/cmd/solana_keys_commands_test.go: `err = cmd.NewSolanaKeysClient(client).ExportKey(c)`
$DIR/core/cmd/solana_keys_commands_test.go: `set = flag.NewFlagSet("test Solana export", 0)`
$DIR/core/cmd/solana_keys_commands_test.go: `flagSetApplyFromAction(cmd.NewSolanaKeysClient(client).ExportKey, set, "solana")`
$DIR/core/cmd/solana_keys_commands_test.go: `c = cli.NewContext(nil, set, nil)`
$DIR/core/cmd/solana_keys_commands_test.go: `requireSolanaKeyCount(t, app, 0)`
$DIR/core/cmd/solana_keys_commands_test.go: `set = flag.NewFlagSet("test Solana import", 0)`
$DIR/core/cmd/solana_keys_commands_test.go: `flagSetApplyFromAction(cmd.NewSolanaKeysClient(client).ImportKey, set, "solana")`
$DIR/core/cmd/solana_keys_commands_test.go: `c = cli.NewContext(nil, set, nil)`
$DIR/core/cmd/solana_keys_commands_test.go: `requireSolanaKeyCount(t, app, 1)`
$DIR/core/cmd/solana_keys_commands_test.go: `.NewBufferString("")`
$DIR/core/cmd/solana_keys_commands_test.go: `.NewJAID(id)`
$DIR/core/cmd/solana_keys_commands_test.go: `.String()`
$DIR/core/cmd/solana_keys_commands_test.go: `.Reset()`
$DIR/core/cmd/solana_keys_commands_test.go: `.String()`
$DIR/core/cmd/solana_keys_commands_test.go: `.GetKeyStore()`
$DIR/core/cmd/solana_keys_commands_test.go: `.Solana()`
$DIR/core/cmd/solana_keys_commands_test.go: `.Background()`
$DIR/core/cmd/solana_keys_commands_test.go: `.GetAll()`
$DIR/core/cmd/solana_keys_commands_test.go: `.Run("ListSolanaKeys", func(tt *testing.T) {
defer cleanup()
ctx := testutils.Context(t)
client, r := app.NewShellAndRenderer()
key, err := app.GetKeyStore().Solana().Create(ctx)
require.NoError(t, err)
requireSolanaKeyCount(t, app, 1)
assert.Nil(t, cmd.NewSolanaKeysClient(client).ListKeys(cltest.EmptyCLIContext()))
require.Equal(t, 1, len(r.Renders))
keys := *r.Renders[0].(*cmd.SolanaKeyPresenters)
assert.True(t, key.PublicKeyStr() == keys[0].PubKey)
})`
$DIR/core/cmd/solana_keys_commands_test.go: `.Context(t)`
$DIR/core/cmd/solana_keys_commands_test.go: `.NewShellAndRenderer()`
$DIR/core/cmd/solana_keys_commands_test.go: `.GetKeyStore()`
$DIR/core/cmd/solana_keys_commands_test.go: `.Solana()`
$DIR/core/cmd/solana_keys_commands_test.go: `.Create(ctx)`
$DIR/core/cmd/solana_keys_commands_test.go: `.Run("CreateSolanaKey", func(tt *testing.T) {
defer cleanup()
client, _ := app.NewShellAndRenderer()
require.NoError(t, cmd.NewSolanaKeysClient(client).CreateKey(nilContext))
keys, err := app.GetKeyStore().Solana().GetAll()
require.NoError(t, err)
require.Len(t, keys, 1)
})`
$DIR/core/cmd/solana_keys_commands_test.go: `.NewShellAndRenderer()`
$DIR/core/cmd/solana_keys_commands_test.go: `.GetKeyStore()`
$DIR/core/cmd/solana_keys_commands_test.go: `.Solana()`
$DIR/core/cmd/solana_keys_commands_test.go: `.GetAll()`
$DIR/core/cmd/solana_keys_commands_test.go: `.Run("DeleteSolanaKey", func(tt *testing.T) {
defer cleanup()
ctx := testutils.Context(t)
client, _ := app.NewShellAndRenderer()
key, err := app.GetKeyStore().Solana().Create(ctx)
require.NoError(t, err)
requireSolanaKeyCount(t, app, 1)
set := flag.NewFlagSet("test", 0)
flagSetApplyFromAction(cmd.NewSolanaKeysClient(client).DeleteKey, set, "solana")
require.NoError(tt, set.Set("yes", "true"))
strID := key.ID()
err = set.Parse([]string{strID})
require.NoError(t, err)
c := cli.NewContext(nil, set, nil)
err = cmd.NewSolanaKeysClient(client).DeleteKey(c)
require.NoError(t, err)
requireSolanaKeyCount(t, app, 0)
})`
$DIR/core/cmd/solana_keys_commands_test.go: `.Context(t)`
$DIR/core/cmd/solana_keys_commands_test.go: `.NewShellAndRenderer()`
$DIR/core/cmd/solana_keys_commands_test.go: `.GetKeyStore()`
$DIR/core/cmd/solana_keys_commands_test.go: `.Solana()`
$DIR/core/cmd/solana_keys_commands_test.go: `.Create(ctx)`
$DIR/core/cmd/solana_keys_commands_test.go: `.NewFlagSet("test", 0)`
$DIR/core/cmd/solana_keys_commands_test.go: `.NewSolanaKeysClient(client)`
$DIR/core/cmd/solana_keys_commands_test.go: `.ID()`
$DIR/core/cmd/solana_keys_commands_test.go: `.Parse([]string{strID})`
$DIR/core/cmd/solana_keys_commands_test.go: `.NewContext(nil, set, nil)`
$DIR/core/cmd/solana_keys_commands_test.go: `.NewSolanaKeysClient(client)`
$DIR/core/cmd/solana_keys_commands_test.go: `.DeleteKey(c)`
$DIR/core/cmd/solana_keys_commands_test.go: `.Context(t)`
$DIR/core/cmd/solana_keys_commands_test.go: `.NewShellAndRenderer()`
$DIR/core/cmd/solana_keys_commands_test.go: `.GetKeyStore()`
$DIR/core/cmd/solana_keys_commands_test.go: `.Solana()`
$DIR/core/cmd/solana_keys_commands_test.go: `.Create(ctx)`
$DIR/core/cmd/solana_keys_commands_test.go: `.NewFlagSet("test Solana export", 0)`
$DIR/core/cmd/solana_keys_commands_test.go: `.NewSolanaKeysClient(client)`
$DIR/core/cmd/solana_keys_commands_test.go: `.NewContext(nil, set, nil)`
$DIR/core/cmd/solana_keys_commands_test.go: `.NewSolanaKeysClient(client)`
$DIR/core/cmd/solana_keys_commands_test.go: `.ExportKey(c)`
$DIR/core/cmd/solana_keys_commands_test.go: `.NewFlagSet("test Solana export", 0)`
$DIR/core/cmd/solana_keys_commands_test.go: `.NewSolanaKeysClient(client)`
$DIR/core/cmd/solana_keys_commands_test.go: `.NewContext(nil, set, nil)`
$DIR/core/cmd/solana_keys_commands_test.go: `.NewFlagSet("test Solana import", 0)`
$DIR/core/cmd/solana_keys_commands_test.go: `.NewSolanaKeysClient(client)`
$DIR/core/cmd/solana_keys_commands_test.go: `.NewContext(nil, set, nil)`
$DIR/core/cmd/solana_node_commands_test.go: `assertTableRenders(t, r)`
$DIR/core/cmd/solana_node_commands_test.go: `.RandomChainID()`
$DIR/core/cmd/solana_node_commands_test.go: `.MustParseURL("https://solana1.example")`
$DIR/core/cmd/solana_node_commands_test.go: `.MustParseURL("https://solana2.example")`
$DIR/core/cmd/solana_node_commands_test.go: `.NewShellAndRenderer()`
$DIR/core/cmd/solana_node_commands_test.go: `.Marshal(node1)`
$DIR/core/cmd/solana_node_commands_test.go: `.Marshal(node2)`
$DIR/core/cmd/solana_node_commands_test.go: `.Split(b.String(), "\n")`
$DIR/core/cmd/solana_node_commands_test.go: `.String()`
$DIR/core/cmd/solana_transaction_commands_test.go: `solanaClient.FundTestAccounts(t, []solanago.PublicKey{from.PublicKey()}, url)`
$DIR/core/cmd/solana_transaction_commands_test.go: `t.Run(tt.amount, func(t *testing.T) {
startBal, err := balance(from.PublicKey(), url)
require.NoError(t, err)
set := flag.NewFlagSet("sendsolcoins", 0)
flagSetApplyFromAction(client.SolanaSendSol, set, "solana")
require.NoError(t, set.Set("id", chainID))
require.NoError(t, set.Parse([]string{tt.amount, from.PublicKey().String(), to.PublicKey().String()}))
c := cli.NewContext(cliapp, set, nil)
err = client.SolanaSendSol(c)
if tt.expErr == "" {
require.NoError(t, err)
} else {
require.Error(t, err)
require.Contains(t, err.Error(), tt.expErr)
return
}
// Check CLI output
require.Greater(t, len(r.Renders), 0)
renderer := r.Renders[len(r.Renders)-1]
renderedMsg := renderer.(*cmd.SolanaMsgPresenter)
t.Logf("%+v\n", renderedMsg)
require.NotEmpty(t, renderedMsg.ID)
assert.Equal(t, chainID, renderedMsg.ChainID)
assert.Equal(t, from.PublicKey().String(), renderedMsg.From)
assert.Equal(t, to.PublicKey().String(), renderedMsg.To)
assert.Equal(t, tt.amount, strconv.FormatUint(renderedMsg.Amount, 10))
// wait for updated balance
updated := false
endBal := uint64(0)
for i := 0; i < 5; i++ {
time.Sleep(time.Second) // wait for tx execution
// Check balance
endBal, err = balance(from.PublicKey(), url)
require.NoError(t, err)
require.NoError(t, err)
// exit if difference found
if endBal != startBal {
updated = true
break
}
}
require.True(t, updated, "end bal == start bal, transaction likely not succeeded")
// Check balance
if assert.NotEqual(t, 0, startBal) && assert.NotEqual(t, 0, endBal) {
diff := startBal - endBal
receiveBal, err := balance(to.PublicKey(), url)
require.NoError(t, err)
assert.Equal(t, tt.amount, strconv.FormatUint(receiveBal, 10))
assert.Greater(t, diff, receiveBal)
}
})`
$DIR/core/cmd/solana_transaction_commands_test.go: `flagSetApplyFromAction(client.SolanaSendSol, set, "solana")`
$DIR/core/cmd/solana_transaction_commands_test.go: `err = client.SolanaSendSol(c)`
$DIR/core/cmd/solana_transaction_commands_test.go: `time.Sleep(time.Second)`
$DIR/core/cmd/solana_transaction_commands_test.go: `endBal, err = balance(from.PublicKey(), url)`
$DIR/core/cmd/solana_transaction_commands_test.go: `updated = true`
$DIR/core/cmd/solana_transaction_commands_test.go: `.Context(t)`
$DIR/core/cmd/solana_transaction_commands_test.go: `.SetupLocalSolNode(t)`
$DIR/core/cmd/solana_transaction_commands_test.go: `.Name()`
$DIR/core/cmd/solana_transaction_commands_test.go: `.MustParseURL(url)`
$DIR/core/cmd/solana_transaction_commands_test.go: `.GetKeyStore()`
$DIR/core/cmd/solana_transaction_commands_test.go: `.Solana()`
$DIR/core/cmd/solana_transaction_commands_test.go: `.Create(ctx)`
$DIR/core/cmd/solana_transaction_commands_test.go: `.NewRandomPrivateKey()`
$DIR/core/cmd/solana_transaction_commands_test.go: `.FundTestAccounts(t, []solanago.PublicKey{from.PublicKey()}, url)`
$DIR/core/cmd/solana_transaction_commands_test.go: `.PublicKey()`
$DIR/core/cmd/solana_transaction_commands_test.go: `.NewShellAndRenderer()`
$DIR/core/cmd/solana_transaction_commands_test.go: `.NewApp()`
$DIR/core/cmd/solana_transaction_commands_test.go: `.Run(tt.amount, func(t *testing.T) {
startBal, err := balance(from.PublicKey(), url)
require.NoError(t, err)
set := flag.NewFlagSet("sendsolcoins", 0)
flagSetApplyFromAction(client.SolanaSendSol, set, "solana")
require.NoError(t, set.Set("id", chainID))
require.NoError(t, set.Parse([]string{tt.amount, from.PublicKey().String(), to.PublicKey().String()}))
c := cli.NewContext(cliapp, set, nil)
err = client.SolanaSendSol(c)
if tt.expErr == "" {
require.NoError(t, err)
} else {
require.Error(t, err)
require.Contains(t, err.Error(), tt.expErr)
return
}
// Check CLI output
require.Greater(t, len(r.Renders), 0)
renderer := r.Renders[len(r.Renders)-1]
renderedMsg := renderer.(*cmd.SolanaMsgPresenter)
t.Logf("%+v\n", renderedMsg)
require.NotEmpty(t, renderedMsg.ID)
assert.Equal(t, chainID, renderedMsg.ChainID)
assert.Equal(t, from.PublicKey().String(), renderedMsg.From)
assert.Equal(t, to.PublicKey().String(), renderedMsg.To)
assert.Equal(t, tt.amount, strconv.FormatUint(renderedMsg.Amount, 10))
// wait for updated balance
updated := false
endBal := uint64(0)
for i := 0; i < 5; i++ {
time.Sleep(time.Second) // wait for tx execution
// Check balance
endBal, err = balance(from.PublicKey(), url)
require.NoError(t, err)
require.NoError(t, err)
// exit if difference found
if endBal != startBal {
updated = true
break
}
}
require.True(t, updated, "end bal == start bal, transaction likely not succeeded")
// Check balance
if assert.NotEqual(t, 0, startBal) && assert.NotEqual(t, 0, endBal) {
diff := startBal - endBal
receiveBal, err := balance(to.PublicKey(), url)
require.NoError(t, err)
assert.Equal(t, tt.amount, strconv.FormatUint(receiveBal, 10))
assert.Greater(t, diff, receiveBal)
}
})`
$DIR/core/cmd/solana_transaction_commands_test.go: `.PublicKey()`
$DIR/core/cmd/solana_transaction_commands_test.go: `.NewFlagSet("sendsolcoins", 0)`
$DIR/core/cmd/solana_transaction_commands_test.go: `.NewContext(cliapp, set, nil)`
$DIR/core/cmd/solana_transaction_commands_test.go: `.SolanaSendSol(c)`
$DIR/core/cmd/solana_transaction_commands_test.go: `.Sleep(time.Second)`
$DIR/core/cmd/solana_transaction_commands_test.go: `.PublicKey()`
$DIR/core/cmd/solana_transaction_commands_test.go: `.PublicKey()`
$DIR/core/cmd/starknet_keys_commands_test.go: `buffer.Reset()`
$DIR/core/cmd/starknet_keys_commands_test.go: `output = buffer.String()`
$DIR/core/cmd/starknet_keys_commands_test.go: `requireStarkNetKeyCount(t, app, 0)`
$DIR/core/cmd/starknet_keys_commands_test.go: `t.Run("ListStarkNetKeys", func(tt *testing.T) {
defer cleanup()
ctx := testutils.Context(t)
client, r := app.NewShellAndRenderer()
key, err := app.GetKeyStore().StarkNet().Create(ctx)
require.NoError(t, err)
requireStarkNetKeyCount(t, app, 1)
assert.Nil(t, cmd.NewStarkNetKeysClient(client).ListKeys(cltest.EmptyCLIContext()))
require.Equal(t, 1, len(r.Renders))
keys := *r.Renders[0].(*cmd.StarkNetKeyPresenters)
assert.True(t, key.StarkKeyStr() == keys[0].StarkKey)
})`
$DIR/core/cmd/starknet_keys_commands_test.go: `requireStarkNetKeyCount(t, app, 1)`
$DIR/core/cmd/starknet_keys_commands_test.go: `t.Run("CreateStarkNetKey", func(tt *testing.T) {
defer cleanup()
client, _ := app.NewShellAndRenderer()
require.NoError(t, cmd.NewStarkNetKeysClient(client).CreateKey(nilContext))
keys, err := app.GetKeyStore().StarkNet().GetAll()
require.NoError(t, err)
require.Len(t, keys, 1)
})`
$DIR/core/cmd/starknet_keys_commands_test.go: `t.Run("DeleteStarkNetKey", func(tt *testing.T) {
defer cleanup()
ctx := testutils.Context(t)
client, _ := app.NewShellAndRenderer()
key, err := app.GetKeyStore().StarkNet().Create(ctx)
require.NoError(t, err)
requireStarkNetKeyCount(t, app, 1)
set := flag.NewFlagSet("test", 0)
flagSetApplyFromAction(cmd.NewStarkNetKeysClient(client).DeleteKey, set, "starknet")
require.NoError(tt, set.Set("yes", "true"))
strID := key.ID()
err = set.Parse([]string{strID})
require.NoError(t, err)
c := cli.NewContext(nil, set, nil)
err = cmd.NewStarkNetKeysClient(client).DeleteKey(c)
require.NoError(t, err)
requireStarkNetKeyCount(t, app, 0)
})`
$DIR/core/cmd/starknet_keys_commands_test.go: `requireStarkNetKeyCount(t, app, 1)`
$DIR/core/cmd/starknet_keys_commands_test.go: `flagSetApplyFromAction(cmd.NewStarkNetKeysClient(client).DeleteKey, set, "starknet")`
$DIR/core/cmd/starknet_keys_commands_test.go: `err = set.Parse([]string{strID})`
$DIR/core/cmd/starknet_keys_commands_test.go: `err = cmd.NewStarkNetKeysClient(client).DeleteKey(c)`
$DIR/core/cmd/starknet_keys_commands_test.go: `requireStarkNetKeyCount(t, app, 0)`
$DIR/core/cmd/starknet_keys_commands_test.go: `flagSetApplyFromAction(cmd.NewStarkNetKeysClient(client).ExportKey, set, "starknet")`
$DIR/core/cmd/starknet_keys_commands_test.go: `err = cmd.NewStarkNetKeysClient(client).ExportKey(c)`
$DIR/core/cmd/starknet_keys_commands_test.go: `set = flag.NewFlagSet("test StarkNet export", 0)`
$DIR/core/cmd/starknet_keys_commands_test.go: `flagSetApplyFromAction(cmd.NewStarkNetKeysClient(client).ExportKey, set, "starknet")`
$DIR/core/cmd/starknet_keys_commands_test.go: `c = cli.NewContext(nil, set, nil)`
$DIR/core/cmd/starknet_keys_commands_test.go: `requireStarkNetKeyCount(t, app, 0)`
$DIR/core/cmd/starknet_keys_commands_test.go: `set = flag.NewFlagSet("test StarkNet import", 0)`
$DIR/core/cmd/starknet_keys_commands_test.go: `flagSetApplyFromAction(cmd.NewStarkNetKeysClient(client).ImportKey, set, "starknet")`
$DIR/core/cmd/starknet_keys_commands_test.go: `c = cli.NewContext(nil, set, nil)`
$DIR/core/cmd/starknet_keys_commands_test.go: `requireStarkNetKeyCount(t, app, 1)`
$DIR/core/cmd/starknet_keys_commands_test.go: `.NewBufferString("")`
$DIR/core/cmd/starknet_keys_commands_test.go: `.NewJAID(id)`
$DIR/core/cmd/starknet_keys_commands_test.go: `.String()`
$DIR/core/cmd/starknet_keys_commands_test.go: `.Reset()`
$DIR/core/cmd/starknet_keys_commands_test.go: `.String()`
$DIR/core/cmd/starknet_keys_commands_test.go: `.GetKeyStore()`
$DIR/core/cmd/starknet_keys_commands_test.go: `.StarkNet()`
$DIR/core/cmd/starknet_keys_commands_test.go: `.Background()`
$DIR/core/cmd/starknet_keys_commands_test.go: `.GetAll()`
$DIR/core/cmd/starknet_keys_commands_test.go: `.Run("ListStarkNetKeys", func(tt *testing.T) {
defer cleanup()
ctx := testutils.Context(t)
client, r := app.NewShellAndRenderer()
key, err := app.GetKeyStore().StarkNet().Create(ctx)
require.NoError(t, err)
requireStarkNetKeyCount(t, app, 1)
assert.Nil(t, cmd.NewStarkNetKeysClient(client).ListKeys(cltest.EmptyCLIContext()))
require.Equal(t, 1, len(r.Renders))
keys := *r.Renders[0].(*cmd.StarkNetKeyPresenters)
assert.True(t, key.StarkKeyStr() == keys[0].StarkKey)
})`
$DIR/core/cmd/starknet_keys_commands_test.go: `.Context(t)`
$DIR/core/cmd/starknet_keys_commands_test.go: `.NewShellAndRenderer()`
$DIR/core/cmd/starknet_keys_commands_test.go: `.GetKeyStore()`
$DIR/core/cmd/starknet_keys_commands_test.go: `.StarkNet()`
$DIR/core/cmd/starknet_keys_commands_test.go: `.Create(ctx)`
$DIR/core/cmd/starknet_keys_commands_test.go: `.Run("CreateStarkNetKey", func(tt *testing.T) {
defer cleanup()
client, _ := app.NewShellAndRenderer()
require.NoError(t, cmd.NewStarkNetKeysClient(client).CreateKey(nilContext))
keys, err := app.GetKeyStore().StarkNet().GetAll()
require.NoError(t, err)
require.Len(t, keys, 1)
})`
$DIR/core/cmd/starknet_keys_commands_test.go: `.NewShellAndRenderer()`
$DIR/core/cmd/starknet_keys_commands_test.go: `.GetKeyStore()`
$DIR/core/cmd/starknet_keys_commands_test.go: `.StarkNet()`
$DIR/core/cmd/starknet_keys_commands_test.go: `.GetAll()`
$DIR/core/cmd/starknet_keys_commands_test.go: `.Run("DeleteStarkNetKey", func(tt *testing.T) {
defer cleanup()
ctx := testutils.Context(t)
client, _ := app.NewShellAndRenderer()
key, err := app.GetKeyStore().StarkNet().Create(ctx)
require.NoError(t, err)
requireStarkNetKeyCount(t, app, 1)
set := flag.NewFlagSet("test", 0)
flagSetApplyFromAction(cmd.NewStarkNetKeysClient(client).DeleteKey, set, "starknet")
require.NoError(tt, set.Set("yes", "true"))
strID := key.ID()
err = set.Parse([]string{strID})
require.NoError(t, err)
c := cli.NewContext(nil, set, nil)
err = cmd.NewStarkNetKeysClient(client).DeleteKey(c)
require.NoError(t, err)
requireStarkNetKeyCount(t, app, 0)
})`
$DIR/core/cmd/starknet_keys_commands_test.go: `.Context(t)`
$DIR/core/cmd/starknet_keys_commands_test.go: `.NewShellAndRenderer()`
$DIR/core/cmd/starknet_keys_commands_test.go: `.GetKeyStore()`
$DIR/core/cmd/starknet_keys_commands_test.go: `.StarkNet()`
$DIR/core/cmd/starknet_keys_commands_test.go: `.Create(ctx)`
$DIR/core/cmd/starknet_keys_commands_test.go: `.NewFlagSet("test", 0)`
$DIR/core/cmd/starknet_keys_commands_test.go: `.NewStarkNetKeysClient(client)`
$DIR/core/cmd/starknet_keys_commands_test.go: `.ID()`
$DIR/core/cmd/starknet_keys_commands_test.go: `.Parse([]string{strID})`
$DIR/core/cmd/starknet_keys_commands_test.go: `.NewContext(nil, set, nil)`
$DIR/core/cmd/starknet_keys_commands_test.go: `.NewStarkNetKeysClient(client)`
$DIR/core/cmd/starknet_keys_commands_test.go: `.DeleteKey(c)`
$DIR/core/cmd/starknet_keys_commands_test.go: `.Context(t)`
$DIR/core/cmd/starknet_keys_commands_test.go: `.NewShellAndRenderer()`
$DIR/core/cmd/starknet_keys_commands_test.go: `.GetKeyStore()`
$DIR/core/cmd/starknet_keys_commands_test.go: `.StarkNet()`
$DIR/core/cmd/starknet_keys_commands_test.go: `.Create(ctx)`
$DIR/core/cmd/starknet_keys_commands_test.go: `.NewFlagSet("test StarkNet export", 0)`
$DIR/core/cmd/starknet_keys_commands_test.go: `.NewStarkNetKeysClient(client)`
$DIR/core/cmd/starknet_keys_commands_test.go: `.NewContext(nil, set, nil)`
$DIR/core/cmd/starknet_keys_commands_test.go: `.NewStarkNetKeysClient(client)`
$DIR/core/cmd/starknet_keys_commands_test.go: `.ExportKey(c)`
$DIR/core/cmd/starknet_keys_commands_test.go: `.NewFlagSet("test StarkNet export", 0)`
$DIR/core/cmd/starknet_keys_commands_test.go: `.NewStarkNetKeysClient(client)`
$DIR/core/cmd/starknet_keys_commands_test.go: `.NewContext(nil, set, nil)`
$DIR/core/cmd/starknet_keys_commands_test.go: `.NewFlagSet("test StarkNet import", 0)`
$DIR/core/cmd/starknet_keys_commands_test.go: `.NewStarkNetKeysClient(client)`
$DIR/core/cmd/starknet_keys_commands_test.go: `.NewContext(nil, set, nil)`
$DIR/core/cmd/starknet_node_commands_test.go: `assertTableRenders(t, r)`
$DIR/core/cmd/starknet_node_commands_test.go: `.MustParseURL("https://starknet1.example")`
$DIR/core/cmd/starknet_node_commands_test.go: `.MustParseURL("https://starknet2.example")`
$DIR/core/cmd/starknet_node_commands_test.go: `.NewShellAndRenderer()`
$DIR/core/cmd/starknet_node_commands_test.go: `.Marshal(node1)`
$DIR/core/cmd/starknet_node_commands_test.go: `.Marshal(node2)`
$DIR/core/cmd/starknet_node_commands_test.go: `.Split(b.String(), "\n")`
$DIR/core/cmd/starknet_node_commands_test.go: `.String()`
$DIR/core/cmd/vrf_keys_commands_test.go: `buffer.Reset()`
$DIR/core/cmd/vrf_keys_commands_test.go: `output = buffer.String()`
$DIR/core/cmd/vrf_keys_commands_test.go: `keys = *r.Renders[2].(*cmd.VRFKeyPresenters)`
$DIR/core/cmd/vrf_keys_commands_test.go: `AssertKeysEqual(t, k1, keys[0])`
$DIR/core/cmd/vrf_keys_commands_test.go: `keys = *r.Renders[4].(*cmd.VRFKeyPresenters)`
$DIR/core/cmd/vrf_keys_commands_test.go: `flagSetApplyFromAction(client.DeleteVRFKey, set, "")`
$DIR/core/cmd/vrf_keys_commands_test.go: `AssertKeysEqual(t, k2, deletedKey)`
$DIR/core/cmd/vrf_keys_commands_test.go: `flagSetApplyFromAction(client.ExportVRFKey, set, "")`
$DIR/core/cmd/vrf_keys_commands_test.go: `t.Cleanup(func() {
os.Remove(keyName)
})`
$DIR/core/cmd/vrf_keys_commands_test.go: `os.Remove(keyName)`
$DIR/core/cmd/vrf_keys_commands_test.go: `flagSetApplyFromAction(client.ImportVRFKey, importSet, "")`
$DIR/core/cmd/vrf_keys_commands_test.go: `set = flag.NewFlagSet("test", 0)`
$DIR/core/cmd/vrf_keys_commands_test.go: `flagSetApplyFromAction(client.DeleteVRFKey, set, "")`
$DIR/core/cmd/vrf_keys_commands_test.go: `.NewBufferString("")`
$DIR/core/cmd/vrf_keys_commands_test.go: `.String()`
$DIR/core/cmd/vrf_keys_commands_test.go: `.Reset()`
$DIR/core/cmd/vrf_keys_commands_test.go: `.String()`
$DIR/core/cmd/vrf_keys_commands_test.go: `.NewShellAndRenderer()`
$DIR/core/cmd/vrf_keys_commands_test.go: `.NewFlagSet("test", 0)`
$DIR/core/cmd/vrf_keys_commands_test.go: `.NewContext(nil, set, nil)`
$DIR/core/cmd/vrf_keys_commands_test.go: `.DeleteVRFKey(c)`
$DIR/core/cmd/vrf_keys_commands_test.go: `.KeyStore.VRF()`
$DIR/core/cmd/vrf_keys_commands_test.go: `.GetAll()`
$DIR/core/cmd/vrf_keys_commands_test.go: `.NewShellAndRenderer()`
$DIR/core/cmd/vrf_keys_commands_test.go: `.NewFlagSet("test VRF export", 0)`
$DIR/core/cmd/vrf_keys_commands_test.go: `.NewContext(nil, set, nil)`
$DIR/core/cmd/vrf_keys_commands_test.go: `.Cleanup(func() {
os.Remove(keyName)
})`
$DIR/core/cmd/vrf_keys_commands_test.go: `.Remove(keyName)`
$DIR/core/cmd/vrf_keys_commands_test.go: `.NewFlagSet("test VRF import", 0)`
$DIR/core/cmd/vrf_keys_commands_test.go: `.NewContext(nil, importSet, nil)`
$DIR/core/cmd/vrf_keys_commands_test.go: `.NewFlagSet("test", 0)`
$DIR/core/config/config_internal_test.go: `val, err = parse.BigInt("15")`
$DIR/core/config/config_internal_test.go: `val, err = parse.BigInt("x")`
$DIR/core/config/config_internal_test.go: `val, err = parse.BigInt("")`
$DIR/core/config/config_internal_test.go: `val, err = parse.LogLevel("")`
$DIR/core/config/config_internal_test.go: `val, err = parse.LogLevel("primus sucks")`
$DIR/core/config/config_internal_test.go: `t.Run(test.name, func(t *testing.T) {
i, err := parse.URL(test.input)
if test.wantError {
assert.Error(t, err)
} else {
require.NoError(t, err)
w, ok := i.(*url.URL)
require.True(t, ok)
assert.Equal(t, test.input, w.String())
}
})`
$DIR/core/config/config_internal_test.go: `val, err = parse.Bool("false")`
$DIR/core/config/config_internal_test.go: `_, err = parse.Bool("")`
$DIR/core/config/config_internal_test.go: `.BigInt("0")`
$DIR/core/config/config_internal_test.go: `.BigInt("15")`
$DIR/core/config/config_internal_test.go: `.BigInt("x")`
$DIR/core/config/config_internal_test.go: `.BigInt("")`
$DIR/core/config/config_internal_test.go: `.LogLevel("ERROR")`
$DIR/core/config/config_internal_test.go: `.LogLevel("")`
$DIR/core/config/config_internal_test.go: `.LogLevel("primus sucks")`
$DIR/core/config/config_internal_test.go: `.Level(0)`
$DIR/core/config/config_internal_test.go: `.Run(test.name, func(t *testing.T) {
i, err := parse.URL(test.input)
if test.wantError {
assert.Error(t, err)
} else {
require.NoError(t, err)
w, ok := i.(*url.URL)
require.True(t, ok)
assert.Equal(t, test.input, w.String())
}
})`
$DIR/core/config/config_internal_test.go: `.URL(test.input)`
$DIR/core/config/config_internal_test.go: `.Bool("true")`
$DIR/core/config/config_internal_test.go: `.Bool("false")`
$DIR/core/config/config_internal_test.go: `.Bool("")`
$DIR/core/config/docs/docs_test.go: `d.DisallowUnknownFields()`
$DIR/core/config/docs/docs_test.go: `cfgtest.AssertFieldsNotNil(t, c)`
$DIR/core/config/docs/docs_test.go: `t.Run("EVM", func(t *testing.T) {
fallbackDefaults := evmcfg.Defaults(nil)
docDefaults := defaults.EVM[0].Chain
require.Equal(t, chaintype.ChainType(""), docDefaults.ChainType.ChainType())
docDefaults.ChainType = nil
// clean up KeySpecific as a special case
require.Equal(t, 1, len(docDefaults.KeySpecific))
ks := evmcfg.KeySpecific{Key: new(types.EIP55Address),
GasEstimator: evmcfg.KeySpecificGasEstimator{PriceMax: new(assets.Wei)}}
require.Equal(t, ks, docDefaults.KeySpecific[0])
docDefaults.KeySpecific = nil
// EVM.GasEstimator.BumpTxDepth doesn't have a constant default - it is derived from another field
require.Zero(t, *docDefaults.GasEstimator.BumpTxDepth)
docDefaults.GasEstimator.BumpTxDepth = nil
// per-job limits are nilable
require.Zero(t, *docDefaults.GasEstimator.LimitJobType.OCR)
require.Zero(t, *docDefaults.GasEstimator.LimitJobType.OCR2)
require.Zero(t, *docDefaults.GasEstimator.LimitJobType.DR)
require.Zero(t, *docDefaults.GasEstimator.LimitJobType.Keeper)
require.Zero(t, *docDefaults.GasEstimator.LimitJobType.VRF)
require.Zero(t, *docDefaults.GasEstimator.LimitJobType.FM)
docDefaults.GasEstimator.LimitJobType = evmcfg.GasLimitJobType{}
// EIP1559FeeCapBufferBlocks doesn't have a constant default - it is derived from another field
require.Zero(t, *docDefaults.GasEstimator.BlockHistory.EIP1559FeeCapBufferBlocks)
docDefaults.GasEstimator.BlockHistory.EIP1559FeeCapBufferBlocks = nil
// addresses w/o global values
require.Zero(t, *docDefaults.FlagsContractAddress)
require.Zero(t, *docDefaults.LinkContractAddress)
require.Zero(t, *docDefaults.OperatorFactoryAddress)
docDefaults.FlagsContractAddress = nil
docDefaults.LinkContractAddress = nil
docDefaults.OperatorFactoryAddress = nil
require.Empty(t, docDefaults.Workflow.FromAddress)
require.Empty(t, docDefaults.Workflow.ForwarderAddress)
docDefaults.Workflow.FromAddress = nil
docDefaults.Workflow.ForwarderAddress = nil
docDefaults.NodePool.Errors = evmcfg.ClientErrors{}
// Transactions.AutoPurge configs are only set if the feature is enabled
docDefaults.Transactions.AutoPurge.DetectionApiUrl = nil
docDefaults.Transactions.AutoPurge.Threshold = nil
docDefaults.Transactions.AutoPurge.MinAttempts = nil
assertTOML(t, fallbackDefaults, docDefaults)
})`
$DIR/core/config/docs/docs_test.go: `docDefaults.ChainType = nil`
$DIR/core/config/docs/docs_test.go: `docDefaults.KeySpecific = nil`
$DIR/core/config/docs/docs_test.go: `docDefaults.GasEstimator.BumpTxDepth = nil`
$DIR/core/config/docs/docs_test.go: `docDefaults.GasEstimator.LimitJobType = evmcfg.GasLimitJobType{}`
$DIR/core/config/docs/docs_test.go: `docDefaults.GasEstimator.BlockHistory.EIP1559FeeCapBufferBlocks = nil`
$DIR/core/config/docs/docs_test.go: `docDefaults.FlagsContractAddress = nil`
$DIR/core/config/docs/docs_test.go: `docDefaults.LinkContractAddress = nil`
$DIR/core/config/docs/docs_test.go: `docDefaults.OperatorFactoryAddress = nil`
$DIR/core/config/docs/docs_test.go: `docDefaults.Workflow.FromAddress = nil`
$DIR/core/config/docs/docs_test.go: `docDefaults.Workflow.ForwarderAddress = nil`
$DIR/core/config/docs/docs_test.go: `docDefaults.NodePool.Errors = evmcfg.ClientErrors{}`
$DIR/core/config/docs/docs_test.go: `docDefaults.Transactions.AutoPurge.DetectionApiUrl = nil`
$DIR/core/config/docs/docs_test.go: `docDefaults.Transactions.AutoPurge.Threshold = nil`
$DIR/core/config/docs/docs_test.go: `docDefaults.Transactions.AutoPurge.MinAttempts = nil`
$DIR/core/config/docs/docs_test.go: `assertTOML(t, fallbackDefaults, docDefaults)`
$DIR/core/config/docs/docs_test.go: `t.Run("Cosmos", func(t *testing.T) {
var fallbackDefaults coscfg.TOMLConfig
fallbackDefaults.SetDefaults()
assertTOML(t, fallbackDefaults.Chain, defaults.Cosmos[0].Chain)
})`
$DIR/core/config/docs/docs_test.go: `fallbackDefaults.SetDefaults()`
$DIR/core/config/docs/docs_test.go: `assertTOML(t, fallbackDefaults.Chain, defaults.Cosmos[0].Chain)`
$DIR/core/config/docs/docs_test.go: `t.Run("Solana", func(t *testing.T) {
var fallbackDefaults solcfg.TOMLConfig
fallbackDefaults.SetDefaults()
assertTOML(t, fallbackDefaults.Chain, defaults.Solana[0].Chain)
})`
$DIR/core/config/docs/docs_test.go: `fallbackDefaults.SetDefaults()`
$DIR/core/config/docs/docs_test.go: `assertTOML(t, fallbackDefaults.Chain, defaults.Solana[0].Chain)`
$DIR/core/config/docs/docs_test.go: `fallbackDefaults.SetDefaults()`
$DIR/core/config/docs/docs_test.go: `assertTOML(t, fallbackDefaults.Chain, defaults.Starknet[0].Chain)`
$DIR/core/config/docs/docs_test.go: `.NewDecoder(strings.NewReader(docs.DocsTOML))`
$DIR/core/config/docs/docs_test.go: `.NewReader(docs.DocsTOML)`
$DIR/core/config/docs/docs_test.go: `.DisallowUnknownFields()`
$DIR/core/config/docs/docs_test.go: `.Decode(&c)`
$DIR/core/config/docs/docs_test.go: `.Contains(err.Error(), "undecoded keys: ")`
$DIR/core/config/docs/docs_test.go: `.As(err, &strict)`
$DIR/core/config/docs/docs_test.go: `.AssertFieldsNotNil(t, c)`
$DIR/core/config/docs/docs_test.go: `.Run("EVM", func(t *testing.T) {
fallbackDefaults := evmcfg.Defaults(nil)
docDefaults := defaults.EVM[0].Chain
require.Equal(t, chaintype.ChainType(""), docDefaults.ChainType.ChainType())
docDefaults.ChainType = nil
// clean up KeySpecific as a special case
require.Equal(t, 1, len(docDefaults.KeySpecific))
ks := evmcfg.KeySpecific{Key: new(types.EIP55Address),
GasEstimator: evmcfg.KeySpecificGasEstimator{PriceMax: new(assets.Wei)}}
require.Equal(t, ks, docDefaults.KeySpecific[0])
docDefaults.KeySpecific = nil
// EVM.GasEstimator.BumpTxDepth doesn't have a constant default - it is derived from another field
require.Zero(t, *docDefaults.GasEstimator.BumpTxDepth)
docDefaults.GasEstimator.BumpTxDepth = nil
// per-job limits are nilable
require.Zero(t, *docDefaults.GasEstimator.LimitJobType.OCR)
require.Zero(t, *docDefaults.GasEstimator.LimitJobType.OCR2)
require.Zero(t, *docDefaults.GasEstimator.LimitJobType.DR)
require.Zero(t, *docDefaults.GasEstimator.LimitJobType.Keeper)
require.Zero(t, *docDefaults.GasEstimator.LimitJobType.VRF)
require.Zero(t, *docDefaults.GasEstimator.LimitJobType.FM)
docDefaults.GasEstimator.LimitJobType = evmcfg.GasLimitJobType{}
// EIP1559FeeCapBufferBlocks doesn't have a constant default - it is derived from another field
require.Zero(t, *docDefaults.GasEstimator.BlockHistory.EIP1559FeeCapBufferBlocks)
docDefaults.GasEstimator.BlockHistory.EIP1559FeeCapBufferBlocks = nil
// addresses w/o global values
require.Zero(t, *docDefaults.FlagsContractAddress)
require.Zero(t, *docDefaults.LinkContractAddress)
require.Zero(t, *docDefaults.OperatorFactoryAddress)
docDefaults.FlagsContractAddress = nil
docDefaults.LinkContractAddress = nil
docDefaults.OperatorFactoryAddress = nil
require.Empty(t, docDefaults.Workflow.FromAddress)
require.Empty(t, docDefaults.Workflow.ForwarderAddress)
docDefaults.Workflow.FromAddress = nil
docDefaults.Workflow.ForwarderAddress = nil
docDefaults.NodePool.Errors = evmcfg.ClientErrors{}
// Transactions.AutoPurge configs are only set if the feature is enabled
docDefaults.Transactions.AutoPurge.DetectionApiUrl = nil
docDefaults.Transactions.AutoPurge.Threshold = nil
docDefaults.Transactions.AutoPurge.MinAttempts = nil
assertTOML(t, fallbackDefaults, docDefaults)
})`
$DIR/core/config/docs/docs_test.go: `.Defaults(nil)`
$DIR/core/config/docs/docs_test.go: `.Run("Cosmos", func(t *testing.T) {
var fallbackDefaults coscfg.TOMLConfig
fallbackDefaults.SetDefaults()
assertTOML(t, fallbackDefaults.Chain, defaults.Cosmos[0].Chain)
})`
$DIR/core/config/docs/docs_test.go: `.SetDefaults()`
$DIR/core/config/docs/docs_test.go: `.Run("Solana", func(t *testing.T) {
var fallbackDefaults solcfg.TOMLConfig
fallbackDefaults.SetDefaults()
assertTOML(t, fallbackDefaults.Chain, defaults.Solana[0].Chain)
})`
$DIR/core/config/docs/docs_test.go: `.SetDefaults()`
$DIR/core/config/docs/docs_test.go: `.SetDefaults()`
$DIR/core/config/env/env_test.go: `t.Run(tt.name, func(t *testing.T) {
got := NewPlugin(tt.kind)
require.Equal(t, tt.exp, got)
})`
$DIR/core/config/env/env_test.go: `.Run(tt.name, func(t *testing.T) {
got := NewPlugin(tt.kind)
require.Equal(t, tt.exp, got)
})`
$DIR/core/config/toml/types_test.go: `t.Run(test.name, func(t *testing.T) {
url := testutils.MustParseURL(t, test.url)
err := validateDBURL(*url)
if test.wantErr == "" {
assert.Nil(t, err)
} else {
assert.EqualError(t, err, test.wantErr)
}
})`
$DIR/core/config/toml/types_test.go: `t.Run(tt.name, func(t *testing.T) {
buildMode := build.Mode()
if tt.buildMode != "" {
buildMode = tt.buildMode
}
err := tt.input.validateConfig(buildMode)
if err == nil && len(tt.expectedErrContains) > 0 {
t.Errorf("expected errors but got none")
return
}
if err != nil {
errStr := err.Error()
for _, expectedErrSubStr := range tt.expectedErrContains {
if !strings.Contains(errStr, expectedErrSubStr) {
t.Errorf("expected error to contain substring %q but got %v", expectedErrSubStr, errStr)
}
}
}
})`
$DIR/core/config/toml/types_test.go: `buildMode = tt.buildMode`
$DIR/core/config/toml/types_test.go: `t.Run(tt.name, func(t *testing.T) {
var tlsCertPath string
if *tt.mode == "tls" {
tlsCertPath = "/path/to/cert.pem"
}
tracing := &Tracing{
Enabled: ptr(true),
TLSCertPath: &tlsCertPath,
Mode: tt.mode,
CollectorTarget: tt.collectorTarget,
}
err := tracing.ValidateConfig()
if tt.wantErr {
assert.Error(t, err)
assert.Equal(t, tt.errMsg, err.Error())
} else {
assert.NoError(t, err)
}
})`
$DIR/core/config/toml/types_test.go: `tlsCertPath = "/path/to/cert.pem"`
$DIR/core/config/toml/types_test.go: `t.Run(tt.name, func(t *testing.T) {
tracing := Tracing{
SamplingRatio: tt.samplingRatio,
Enabled: ptr(true),
}
err := tracing.ValidateConfig()
if tt.wantErr {
assert.Error(t, err)
assert.Equal(t, tt.errMsg, err.Error())
} else {
assert.NoError(t, err)
}
})`
$DIR/core/config/toml/types_test.go: `t.Run(tt.name, func(t *testing.T) {
tracing := &Tracing{
Mode: ptr("tls"),
TLSCertPath: tt.tlsCertPath,
Enabled: ptr(true),
}
err := tracing.ValidateConfig()
if tt.wantErr {
assert.Error(t, err)
assert.Equal(t, tt.errMsg, err.Error())
} else {
assert.NoError(t, err)
}
})`
$DIR/core/config/toml/types_test.go: `t.Run(tt.name, func(t *testing.T) {
tracing := &Tracing{
Mode: ptr("unencrypted"),
TLSCertPath: tt.tlsCertPath,
Enabled: ptr(true),
}
err := tracing.ValidateConfig()
if tt.wantErr {
assert.Error(t, err)
assert.Equal(t, tt.errMsg, err.Error())
} else {
assert.NoError(t, err)
}
})`
$DIR/core/config/toml/types_test.go: `t.Run(tt.name, func(t *testing.T) {
tracing := &Tracing{
Enabled: ptr(true),
Mode: tt.mode,
TLSCertPath: tt.tlsCertPath,
}
err := tracing.ValidateConfig()
if tt.wantErr {
assert.Error(t, err)
assert.Equal(t, tt.errMsg, err.Error())
} else {
assert.NoError(t, err)
}
})`
$DIR/core/config/toml/types_test.go: `t.Run(tt.name, func(t *testing.T) {
mercury := &Mercury{
TLS: MercuryTLS{
CertFile: tt.tlsCertPath,
},
}
err := mercury.ValidateConfig()
if tt.wantErr {
assert.Error(t, err)
assert.Equal(t, tt.errMsg, err.Error())
} else {
assert.NoError(t, err)
}
})`
$DIR/core/config/toml/types_test.go: `.MustSecretURL("https://facebook.com")`
$DIR/core/config/toml/types_test.go: `.NewSecret("new user1")`
$DIR/core/config/toml/types_test.go: `.NewSecret("new password1")`
$DIR/core/config/toml/types_test.go: `.MustSecretURL("HTTPS://GOOGLE.COM")`
$DIR/core/config/toml/types_test.go: `.NewSecret("new user1")`
$DIR/core/config/toml/types_test.go: `.NewSecret("new password2")`
$DIR/core/config/toml/types_test.go: `.MustSecretURL("https://abc.com")`
$DIR/core/config/toml/types_test.go: `.MustSecretURL("HTTPS://GOOGLE1.COM")`
$DIR/core/config/toml/types_test.go: `.NewSecret("new user1")`
$DIR/core/config/toml/types_test.go: `.NewSecret("new password2")`
$DIR/core/config/toml/types_test.go: `.ValidateConfig()`
$DIR/core/config/toml/types_test.go: `.MustSecretURL("HTTPS://GOOGLE.COM")`
$DIR/core/config/toml/types_test.go: `.NewSecret("new user1")`
$DIR/core/config/toml/types_test.go: `.NewSecret("new password1")`
$DIR/core/config/toml/types_test.go: `.MustSecretURL("HTTPS://GOOGLE.COM")`
$DIR/core/config/toml/types_test.go: `.NewSecret("new user2")`
$DIR/core/config/toml/types_test.go: `.NewSecret("new password2")`
$DIR/core/config/toml/types_test.go: `.ValidateConfig()`
$DIR/core/config/toml/types_test.go: `.NewSecret("new user1")`
$DIR/core/config/toml/types_test.go: `.NewSecret("new password1")`
$DIR/core/config/toml/types_test.go: `.ValidateConfig()`
$DIR/core/config/toml/types_test.go: `.Sprintf("%s %s\n", utils.ErrMsgHeader, "password is less than 16 characters long")`
$DIR/core/config/toml/types_test.go: `.Sprintf("%s %s\n", utils.ErrMsgHeader, "password is less than 16 characters long")`
$DIR/core/config/toml/types_test.go: `.Run(test.name, func(t *testing.T) {
url := testutils.MustParseURL(t, test.url)
err := validateDBURL(*url)
if test.wantErr == "" {
assert.Nil(t, err)
} else {
assert.EqualError(t, err, test.wantErr)
}
})`
$DIR/core/config/toml/types_test.go: `.MustParseURL(t, test.url)`
$DIR/core/config/toml/types_test.go: `.URL(url.URL{Scheme: "https", Host: "localhost"})`
$DIR/core/config/toml/types_test.go: `.NewSecretURL(&validUrl)`
$DIR/core/config/toml/types_test.go: `.URL(url.URL{})`
$DIR/core/config/toml/types_test.go: `.NewSecretURL(&invalidEmptyUrl)`
$DIR/core/config/toml/types_test.go: `.URL(url.URL{Scheme: "http", Host: "localhost"})`
$DIR/core/config/toml/types_test.go: `.NewSecretURL(&invalidBackupURL)`
$DIR/core/config/toml/types_test.go: `.Run(tt.name, func(t *testing.T) {
buildMode := build.Mode()
if tt.buildMode != "" {
buildMode = tt.buildMode
}
err := tt.input.validateConfig(buildMode)
if err == nil && len(tt.expectedErrContains) > 0 {
t.Errorf("expected errors but got none")
return
}
if err != nil {
errStr := err.Error()
for _, expectedErrSubStr := range tt.expectedErrContains {
if !strings.Contains(errStr, expectedErrSubStr) {
t.Errorf("expected error to contain substring %q but got %v", expectedErrSubStr, errStr)
}
}
}
})`
$DIR/core/config/toml/types_test.go: `.Mode()`
$DIR/core/config/toml/types_test.go: `.input.validateConfig(buildMode)`
$DIR/core/config/toml/types_test.go: `.Contains(errStr, expectedErrSubStr)`
$DIR/core/config/toml/types_test.go: `.Run(tt.name, func(t *testing.T) {
var tlsCertPath string
if *tt.mode == "tls" {
tlsCertPath = "/path/to/cert.pem"
}
tracing := &Tracing{
Enabled: ptr(true),
TLSCertPath: &tlsCertPath,
Mode: tt.mode,
CollectorTarget: tt.collectorTarget,
}
err := tracing.ValidateConfig()
if tt.wantErr {
assert.Error(t, err)
assert.Equal(t, tt.errMsg, err.Error())
} else {
assert.NoError(t, err)
}
})`
$DIR/core/config/toml/types_test.go: `.ValidateConfig()`
$DIR/core/config/toml/types_test.go: `.Run(tt.name, func(t *testing.T) {
tracing := Tracing{
SamplingRatio: tt.samplingRatio,
Enabled: ptr(true),
}
err := tracing.ValidateConfig()
if tt.wantErr {
assert.Error(t, err)
assert.Equal(t, tt.errMsg, err.Error())
} else {
assert.NoError(t, err)
}
})`
$DIR/core/config/toml/types_test.go: `.ValidateConfig()`
$DIR/core/config/toml/types_test.go: `.Repeat("z", 4097)`
$DIR/core/config/toml/types_test.go: `.Repeat("z", 4097)`
$DIR/core/config/toml/types_test.go: `.Repeat("z", 4097)`
$DIR/core/config/toml/types_test.go: `.Run(tt.name, func(t *testing.T) {
tracing := &Tracing{
Mode: ptr("tls"),
TLSCertPath: tt.tlsCertPath,
Enabled: ptr(true),
}
err := tracing.ValidateConfig()
if tt.wantErr {
assert.Error(t, err)
assert.Equal(t, tt.errMsg, err.Error())
} else {
assert.NoError(t, err)
}
})`
$DIR/core/config/toml/types_test.go: `.ValidateConfig()`
$DIR/core/config/toml/types_test.go: `.Run(tt.name, func(t *testing.T) {
tracing := &Tracing{
Mode: ptr("unencrypted"),
TLSCertPath: tt.tlsCertPath,
Enabled: ptr(true),
}
err := tracing.ValidateConfig()
if tt.wantErr {
assert.Error(t, err)
assert.Equal(t, tt.errMsg, err.Error())
} else {
assert.NoError(t, err)
}
})`
$DIR/core/config/toml/types_test.go: `.ValidateConfig()`
$DIR/core/config/toml/types_test.go: `.Run(tt.name, func(t *testing.T) {
tracing := &Tracing{
Enabled: ptr(true),
Mode: tt.mode,
TLSCertPath: tt.tlsCertPath,
}
err := tracing.ValidateConfig()
if tt.wantErr {
assert.Error(t, err)
assert.Equal(t, tt.errMsg, err.Error())
} else {
assert.NoError(t, err)
}
})`
$DIR/core/config/toml/types_test.go: `.ValidateConfig()`
$DIR/core/config/toml/types_test.go: `.Repeat("z", 4097)`
$DIR/core/config/toml/types_test.go: `.Repeat("z", 4097)`
$DIR/core/config/toml/types_test.go: `.Run(tt.name, func(t *testing.T) {
mercury := &Mercury{
TLS: MercuryTLS{
CertFile: tt.tlsCertPath,
},
}
err := mercury.ValidateConfig()
if tt.wantErr {
assert.Error(t, err)
assert.Equal(t, tt.errMsg, err.Error())
} else {
assert.NoError(t, err)
}
})`
$DIR/core/config/toml/types_test.go: `.ValidateConfig()`
$DIR/core/gethwrappers/abigen_test.go: `.MustNewSimTransactor(t)`
$DIR/core/gethwrappers/abigen_test.go: `.NewSimulatedBackendWithDatabase(rawdb.NewMemoryDatabase(), map[common.Address]core.GenesisAccount{
owner.From: {
Balance: big.NewInt(0).Mul(big.NewInt(10), big.NewInt(1e18)),
},
}, 10e6)`
$DIR/core/gethwrappers/abigen_test.go: `.NewMemoryDatabase()`
$DIR/core/gethwrappers/abigen_test.go: `.NewInt(0)`
$DIR/core/gethwrappers/abigen_test.go: `.Mul(big.NewInt(10), big.NewInt(1e18))`
$DIR/core/gethwrappers/abigen_test.go: `.NewInt(10)`
$DIR/core/gethwrappers/abigen_test.go: `.NewInt(1e18)`
$DIR/core/gethwrappers/abigen_test.go: `.DeployLogEmitter(owner, ec)`
$DIR/core/gethwrappers/abigen_test.go: `.Address()`
$DIR/core/gethwrappers/go_generate_test.go: `testutils.SkipShort(t, "requires compiled artifacts")`
$DIR/core/gethwrappers/go_generate_test.go: `wd = ""`
$DIR/core/gethwrappers/go_generate_test.go: `compareCurrentCompilerArtifactAgainstRecordsAndSoliditySources(t, contractVersionInfo)`
$DIR/core/gethwrappers/go_generate_test.go: `flag.Parse()`
$DIR/core/gethwrappers/go_generate_test.go: `ensureArtifacts()`
$DIR/core/gethwrappers/go_generate_test.go: `.SkipShort(t, "requires compiled artifacts")`
$DIR/core/gethwrappers/go_generate_test.go: `.Getwd()`
$DIR/core/gethwrappers/go_generate_test.go: `.ReadFile(filepath.Join(getProjectRoot(t), "contracts/LinkToken.json"))`
$DIR/core/gethwrappers/go_generate_test.go: `.Join(getProjectRoot(t), "contracts/LinkToken.json")`
$DIR/core/gethwrappers/go_generate_test.go: `.Sprintf("%x", sha256.Sum256(linkDetails))`
$DIR/core/gethwrappers/go_generate_test.go: `.Sum256(linkDetails)`
$DIR/core/gethwrappers/go_generate_test.go: `.Parse()`
$DIR/core/gethwrappers/go_generate_test.go: `.Short()`
$DIR/core/gethwrappers/go_generate_test.go: `.Run()`
$DIR/core/internal/features/features_test.go: `c.JobPipeline.ExternalInitiatorsEnabled = ptr(true)`
$DIR/core/internal/features/features_test.go: `c.Database.Listener.FallbackPollInterval = commonconfig.MustNewDuration(10 * time.Millisecond)`
$DIR/core/internal/features/features_test.go: `eiNotifiedOfCreate = true`
$DIR/core/internal/features/features_test.go: `w.WriteHeader(http.StatusOK)`
$DIR/core/internal/features/features_test.go: `eiNotifiedOfDelete = true`
$DIR/core/internal/features/features_test.go: `eiURL = mockEI.URL`
$DIR/core/internal/features/features_test.go: `eia = &auth.Token{
AccessKey: eip.AccessKey,
Secret: eip.Secret,
}`
$DIR/core/internal/features/features_test.go: `bridgeCalled = true`
$DIR/core/internal/features/features_test.go: `w.WriteHeader(http.StatusOK)`
$DIR/core/internal/features/features_test.go: `_, err = io.WriteString(w, `{}`)`
$DIR/core/internal/features/features_test.go: `jobID = job.ID`
$DIR/core/internal/features/features_test.go: `t.Run("calling webhook_spec with non-matching external_initiator_id returns unauthorized", func(t *testing.T) {
eiaWrong := auth.NewToken()
body := cltest.MustJSONMarshal(t, eiRequest)
headers := make(map[string]string)
headers[static.ExternalInitiatorAccessKeyHeader] = eiaWrong.AccessKey
headers[static.ExternalInitiatorSecretHeader] = eiaWrong.Secret
url := app.Server.URL + "/v2/jobs/" + jobUUID.String() + "/runs"
bodyBuf := bytes.NewBufferString(body)
resp, cleanup := cltest.UnauthenticatedPost(t, url, bodyBuf, headers)
defer cleanup()
cltest.AssertServerResponse(t, resp, 401)
cltest.AssertCountStays(t, app.GetDB(), "pipeline_runs", 0)
})`
$DIR/core/internal/features/features_test.go: `headers[static.ExternalInitiatorAccessKeyHeader] = eiaWrong.AccessKey`
$DIR/core/internal/features/features_test.go: `headers[static.ExternalInitiatorSecretHeader] = eiaWrong.Secret`
$DIR/core/internal/features/features_test.go: `cltest.AssertServerResponse(t, resp, 401)`
$DIR/core/internal/features/features_test.go: `cltest.AssertCountStays(t, app.GetDB(), "pipeline_runs", 0)`
$DIR/core/internal/features/features_test.go: `t.Run("calling webhook_spec with matching external_initiator_id works", func(t *testing.T) {
// Simulate request from EI -> Core node
cltest.AwaitJobActive(t, app.JobSpawner(), jobID, 3*time.Second)
_ = cltest.CreateJobRunViaExternalInitiatorV2(t, app, jobUUID, *eia, cltest.MustJSONMarshal(t, eiRequest))
pipelineORM := pipeline.NewORM(app.GetDB(), logger.TestLogger(t), cfg.JobPipeline().MaxSuccessfulRuns())
bridgeORM := bridges.NewORM(app.GetDB())
jobORM := job.NewORM(app.GetDB(), pipelineORM, bridgeORM, app.KeyStore, logger.TestLogger(t))
runs := cltest.WaitForPipelineComplete(t, 0, jobID, 1, 2, jobORM, 5*time.Second, 300*time.Millisecond)
require.Len(t, runs, 1)
run := runs[0]
require.Len(t, run.PipelineTaskRuns, 2)
require.Empty(t, run.PipelineTaskRuns[0].Error)
require.Empty(t, run.PipelineTaskRuns[1].Error)
assert.True(t, bridgeCalled, "expected bridge server to be called")
})`
$DIR/core/internal/features/features_test.go: `cltest.AwaitJobActive(t, app.JobSpawner(), jobID, 3*time.Second)`
$DIR/core/internal/features/features_test.go: `_ = cltest.CreateJobRunViaExternalInitiatorV2(t, app, jobUUID, *eia, cltest.MustJSONMarshal(t, eiRequest))`
$DIR/core/internal/features/features_test.go: `cltest.DeleteJobViaWeb(t, app, jobID)`
$DIR/core/internal/features/features_test.go: `headers[webauth.APIKey] = key`
$DIR/core/internal/features/features_test.go: `headers[webauth.APISecret] = secret`
$DIR/core/internal/features/features_test.go: `t.Run(test.name, func(t *testing.T) {
ctx := testutils.Context(t)
// Simulate a consumer contract calling to obtain ETH quotes in 3 different currencies
// in a single callback.
config := configtest.NewGeneralConfigSimulated(t, func(c *chainlink.Config, s *chainlink.Secrets) {
c.Database.Listener.FallbackPollInterval = commonconfig.MustNewDuration(100 * time.Millisecond)
c.EVM[0].GasEstimator.EIP1559DynamicFees = ptr(true)
})
operatorContracts := setupOperatorContracts(t)
b := operatorContracts.sim
app := cltest.NewApplicationWithConfigV2AndKeyOnSimulatedBlockchain(t, config, b)
sendingKeys, err := app.KeyStore.Eth().EnabledKeysForChain(ctx, testutils.SimulatedChainID)
require.NoError(t, err)
authorizedSenders := []common.Address{sendingKeys[0].Address}
tx, err := operatorContracts.operator.SetAuthorizedSenders(operatorContracts.user, authorizedSenders)
require.NoError(t, err)
b.Commit()
cltest.RequireTxSuccessful(t, b, tx.Hash())
// Fund node account with ETH.
n, err := b.NonceAt(testutils.Context(t), operatorContracts.user.From, nil)
require.NoError(t, err)
tx = cltest.NewLegacyTransaction(n, sendingKeys[0].Address, assets.Ether(100).ToInt(), 21000, big.NewInt(1000000000), nil)
signedTx, err := operatorContracts.user.Signer(operatorContracts.user.From, tx)
require.NoError(t, err)
err = b.SendTransaction(testutils.Context(t), signedTx)
require.NoError(t, err)
b.Commit()
err = app.Start(testutils.Context(t))
require.NoError(t, err)
mockServerUSD := cltest.NewHTTPMockServer(t, 200, "GET", `{"USD": 614.64}`)
mockServerEUR := cltest.NewHTTPMockServer(t, 200, "GET", `{"EUR": 507.07}`)
mockServerJPY := cltest.NewHTTPMockServer(t, 200, "GET", `{"JPY": 63818.86}`)
nameAndExternalJobID := uuid.New()
addr := operatorContracts.operatorAddress.Hex()
spec := fmt.Sprintf(multiWordSpecTemplate, nameAndExternalJobID, addr, nameAndExternalJobID, addr)
j := cltest.CreateJobViaWeb(t, app, []byte(cltest.MustJSONMarshal(t, web.CreateJobRequest{TOML: spec})))
cltest.AwaitJobActive(t, app.JobSpawner(), j.ID, 5*time.Second)
var jobID [32]byte
copy(jobID[:], j.ExternalJobID[:])
tx, err = operatorContracts.multiWord.SetSpecID(operatorContracts.user, jobID)
require.NoError(t, err)
b.Commit()
cltest.RequireTxSuccessful(t, b, tx.Hash())
operatorContracts.user.GasLimit = 1000000
tx, err = operatorContracts.multiWord.RequestMultipleParametersWithCustomURLs(operatorContracts.user,
mockServerUSD.URL, "USD",
mockServerEUR.URL, "EUR",
mockServerJPY.URL, "JPY",
big.NewInt(1000),
)
require.NoError(t, err)
b.Commit()
cltest.RequireTxSuccessful(t, b, tx.Hash())
empty := big.NewInt(0)
assertPricesUint256(t, empty, empty, empty, operatorContracts.multiWord)
stopBlocks := utils.FiniteTicker(100*time.Millisecond, func() {
triggerAllKeys(t, app)
b.Commit()
})
defer stopBlocks()
pipelineRuns := cltest.WaitForPipelineComplete(t, 0, j.ID, 1, 14, app.JobORM(), testutils.WaitTimeout(t)/2, time.Second)
pipelineRun := pipelineRuns[0]
assertPipelineTaskRunsSuccessful(t, pipelineRun.PipelineTaskRuns)
assertPricesUint256(t, big.NewInt(61464), big.NewInt(50707), big.NewInt(6381886), operatorContracts.multiWord)
nameAndExternalJobID = uuid.New()
singleWordSpec := fmt.Sprintf(singleWordSpecTemplate, nameAndExternalJobID, addr, nameAndExternalJobID, addr)
jobSingleWord := cltest.CreateJobViaWeb(t, app, []byte(cltest.MustJSONMarshal(t, web.CreateJobRequest{TOML: singleWordSpec})))
cltest.AwaitJobActive(t, app.JobSpawner(), jobSingleWord.ID, 5*time.Second)
var jobIDSingleWord [32]byte
copy(jobIDSingleWord[:], jobSingleWord.ExternalJobID[:])
tx, err = operatorContracts.singleWord.SetSpecID(operatorContracts.user, jobIDSingleWord)
require.NoError(t, err)
b.Commit()
cltest.RequireTxSuccessful(t, b, tx.Hash())
mockServerUSD2 := cltest.NewHTTPMockServer(t, 200, "GET", `{"USD": 614.64}`)
tx, err = operatorContracts.singleWord.RequestMultipleParametersWithCustomURLs(operatorContracts.user,
mockServerUSD2.URL, "USD",
big.NewInt(1000),
)
require.NoError(t, err)
b.Commit()
cltest.RequireTxSuccessful(t, b, tx.Hash())
pipelineRuns = cltest.WaitForPipelineComplete(t, 0, jobSingleWord.ID, 1, 8, app.JobORM(), testutils.WaitTimeout(t), time.Second)
pipelineRun = pipelineRuns[0]
assertPipelineTaskRunsSuccessful(t, pipelineRun.PipelineTaskRuns)
v, err := operatorContracts.singleWord.CurrentPriceInt(nil)
require.NoError(t, err)
assert.Equal(t, big.NewInt(61464), v)
})`
$DIR/core/internal/features/features_test.go: `c.Database.Listener.FallbackPollInterval = commonconfig.MustNewDuration(100 * time.Millisecond)`
$DIR/core/internal/features/features_test.go: `c.EVM[0].GasEstimator.EIP1559DynamicFees = ptr(true)`
$DIR/core/internal/features/features_test.go: `b.Commit()`
$DIR/core/internal/features/features_test.go: `cltest.RequireTxSuccessful(t, b, tx.Hash())`
$DIR/core/internal/features/features_test.go: `tx = cltest.NewLegacyTransaction(n, sendingKeys[0].Address, assets.Ether(100).ToInt(), 21000, big.NewInt(1000000000), nil)`
$DIR/core/internal/features/features_test.go: `err = b.SendTransaction(testutils.Context(t), signedTx)`
$DIR/core/internal/features/features_test.go: `b.Commit()`
$DIR/core/internal/features/features_test.go: `err = app.Start(testutils.Context(t))`
$DIR/core/internal/features/features_test.go: `cltest.AwaitJobActive(t, app.JobSpawner(), j.ID, 5*time.Second)`
$DIR/core/internal/features/features_test.go: `copy(jobID[:], j.ExternalJobID[:])`
$DIR/core/internal/features/features_test.go: `tx, err = operatorContracts.multiWord.SetSpecID(operatorContracts.user, jobID)`
$DIR/core/internal/features/features_test.go: `b.Commit()`
$DIR/core/internal/features/features_test.go: `cltest.RequireTxSuccessful(t, b, tx.Hash())`
$DIR/core/internal/features/features_test.go: `operatorContracts.user.GasLimit = 1000000`
$DIR/core/internal/features/features_test.go: `tx, err = operatorContracts.multiWord.RequestMultipleParametersWithCustomURLs(operatorContracts.user,
mockServerUSD.URL, "USD",
mockServerEUR.URL, "EUR",
mockServerJPY.URL, "JPY",
big.NewInt(1000),
)`
$DIR/core/internal/features/features_test.go: `b.Commit()`
$DIR/core/internal/features/features_test.go: `cltest.RequireTxSuccessful(t, b, tx.Hash())`
$DIR/core/internal/features/features_test.go: `assertPricesUint256(t, empty, empty, empty, operatorContracts.multiWord)`
$DIR/core/internal/features/features_test.go: `triggerAllKeys(t, app)`
$DIR/core/internal/features/features_test.go: `b.Commit()`
$DIR/core/internal/features/features_test.go: `assertPipelineTaskRunsSuccessful(t, pipelineRun.PipelineTaskRuns)`
$DIR/core/internal/features/features_test.go: `assertPricesUint256(t, big.NewInt(61464), big.NewInt(50707), big.NewInt(6381886), operatorContracts.multiWord)`
$DIR/core/internal/features/features_test.go: `nameAndExternalJobID = uuid.New()`
$DIR/core/internal/features/features_test.go: `cltest.AwaitJobActive(t, app.JobSpawner(), jobSingleWord.ID, 5*time.Second)`
$DIR/core/internal/features/features_test.go: `copy(jobIDSingleWord[:], jobSingleWord.ExternalJobID[:])`
$DIR/core/internal/features/features_test.go: `tx, err = operatorContracts.singleWord.SetSpecID(operatorContracts.user, jobIDSingleWord)`
$DIR/core/internal/features/features_test.go: `b.Commit()`
$DIR/core/internal/features/features_test.go: `cltest.RequireTxSuccessful(t, b, tx.Hash())`
$DIR/core/internal/features/features_test.go: `tx, err = operatorContracts.singleWord.RequestMultipleParametersWithCustomURLs(operatorContracts.user,
mockServerUSD2.URL, "USD",
big.NewInt(1000),
)`
$DIR/core/internal/features/features_test.go: `b.Commit()`
$DIR/core/internal/features/features_test.go: `cltest.RequireTxSuccessful(t, b, tx.Hash())`
$DIR/core/internal/features/features_test.go: `pipelineRuns = cltest.WaitForPipelineComplete(t, 0, jobSingleWord.ID, 1, 8, app.JobORM(), testutils.WaitTimeout(t), time.Second)`
$DIR/core/internal/features/features_test.go: `pipelineRun = pipelineRuns[0]`
$DIR/core/internal/features/features_test.go: `assertPipelineTaskRunsSuccessful(t, pipelineRun.PipelineTaskRuns)`
$DIR/core/internal/features/features_test.go: `t.Run("with FailOnRevert enabled, run succeeds when transaction is successful", func(t *testing.T) {
app, sendingAddr, o := setupAppForEthTx(t, operatorContracts)
tomlSpec := `
type = "webhook"
schemaVersion = 1
observationSource = """
submit_tx [type=ethtx to="%s"
data="%s"
minConfirmations="2"
failOnRevert=false
evmChainID="%s"
from="[\\"%s\\"]"
]
"""
`
// This succeeds for whatever reason
revertingData := "0xdeadbeef"
tomlSpec = fmt.Sprintf(tomlSpec, operatorContracts.linkTokenAddress.String(), revertingData, testutils.SimulatedChainID.String(), sendingAddr)
j := cltest.CreateJobViaWeb(t, app, []byte(cltest.MustJSONMarshal(t, web.CreateJobRequest{TOML: tomlSpec})))
cltest.AwaitJobActive(t, app.JobSpawner(), j.ID, testutils.WaitTimeout(t))
run := cltest.CreateJobRunViaUser(t, app, j.ExternalJobID, "")
assert.Equal(t, []*string(nil), run.Outputs)
assert.Equal(t, []*string(nil), run.Errors)
testutils.WaitForLogMessage(t, o, "Sending transaction")
b.Commit() // Needs at least two confirmations
b.Commit() // Needs at least two confirmations
b.Commit() // Needs at least two confirmations
testutils.WaitForLogMessage(t, o, "Resume run success")
pipelineRuns := cltest.WaitForPipelineComplete(t, 0, j.ID, 1, 1, app.JobORM(), testutils.WaitTimeout(t), time.Second)
// The run should have succeeded but with the receipt detailing the reverted transaction
pipelineRun := pipelineRuns[0]
assertPipelineTaskRunsSuccessful(t, pipelineRun.PipelineTaskRuns)
outputs := pipelineRun.Outputs.Val.([]interface{})
require.Len(t, outputs, 1)
output := outputs[0]
receipt := output.(map[string]interface{})
assert.Equal(t, "0x7", receipt["blockNumber"])
assert.Equal(t, "0x538f", receipt["gasUsed"])
assert.Equal(t, "0x0", receipt["status"]) // success
})`
$DIR/core/internal/features/features_test.go: `tomlSpec = fmt.Sprintf(tomlSpec, operatorContracts.linkTokenAddress.String(), revertingData, testutils.SimulatedChainID.String(), sendingAddr)`
$DIR/core/internal/features/features_test.go: `cltest.AwaitJobActive(t, app.JobSpawner(), j.ID, testutils.WaitTimeout(t))`
$DIR/core/internal/features/features_test.go: `testutils.WaitForLogMessage(t, o, "Sending transaction")`
$DIR/core/internal/features/features_test.go: `b.Commit()`
$DIR/core/internal/features/features_test.go: `b.Commit()`
$DIR/core/internal/features/features_test.go: `b.Commit()`
$DIR/core/internal/features/features_test.go: `testutils.WaitForLogMessage(t, o, "Resume run success")`
$DIR/core/internal/features/features_test.go: `assertPipelineTaskRunsSuccessful(t, pipelineRun.PipelineTaskRuns)`
$DIR/core/internal/features/features_test.go: `t.Run("with FailOnRevert enabled, run fails with transaction reverted error", func(t *testing.T) {
app, sendingAddr, o := setupAppForEthTx(t, operatorContracts)
tomlSpec := `
type = "webhook"
schemaVersion = 1
observationSource = """
submit_tx [type=ethtx to="%s"
data="%s"
minConfirmations="2"
failOnRevert=true
evmChainID="%s"
from="[\\"%s\\"]"
]
"""
`
// This data is a call to link token's `transfer` function and will revert due to insufficient LINK on the sender address
revertingData := "0xa9059cbb000000000000000000000000526485b5abdd8ae9c6a63548e0215a83e7135e6100000000000000000000000000000000000000000000000db069932ea4fe1400"
tomlSpec = fmt.Sprintf(tomlSpec, operatorContracts.linkTokenAddress.String(), revertingData, testutils.SimulatedChainID.String(), sendingAddr)
j := cltest.CreateJobViaWeb(t, app, []byte(cltest.MustJSONMarshal(t, web.CreateJobRequest{TOML: tomlSpec})))
cltest.AwaitJobActive(t, app.JobSpawner(), j.ID, testutils.WaitTimeout(t))
run := cltest.CreateJobRunViaUser(t, app, j.ExternalJobID, "")
assert.Equal(t, []*string(nil), run.Outputs)
assert.Equal(t, []*string(nil), run.Errors)
testutils.WaitForLogMessage(t, o, "Sending transaction")
b.Commit() // Needs at least two confirmations
b.Commit() // Needs at least two confirmations
b.Commit() // Needs at least two confirmations
testutils.WaitForLogMessage(t, o, "Resume run success")
pipelineRuns := cltest.WaitForPipelineError(t, 0, j.ID, 1, 1, app.JobORM(), testutils.WaitTimeout(t), time.Second)
// The run should have failed as a revert
pipelineRun := pipelineRuns[0]
assertPipelineTaskRunsErrored(t, pipelineRun.PipelineTaskRuns)
})`
$DIR/core/internal/features/features_test.go: `tomlSpec = fmt.Sprintf(tomlSpec, operatorContracts.linkTokenAddress.String(), revertingData, testutils.SimulatedChainID.String(), sendingAddr)`
$DIR/core/internal/features/features_test.go: `cltest.AwaitJobActive(t, app.JobSpawner(), j.ID, testutils.WaitTimeout(t))`
$DIR/core/internal/features/features_test.go: `testutils.WaitForLogMessage(t, o, "Sending transaction")`
$DIR/core/internal/features/features_test.go: `b.Commit()`
$DIR/core/internal/features/features_test.go: `b.Commit()`
$DIR/core/internal/features/features_test.go: `b.Commit()`
$DIR/core/internal/features/features_test.go: `testutils.WaitForLogMessage(t, o, "Resume run success")`
$DIR/core/internal/features/features_test.go: `assertPipelineTaskRunsErrored(t, pipelineRun.PipelineTaskRuns)`
$DIR/core/internal/features/features_test.go: `tomlSpec = fmt.Sprintf(tomlSpec, operatorContracts.linkTokenAddress.String(), revertingData, testutils.SimulatedChainID.String(), sendingAddr)`
$DIR/core/internal/features/features_test.go: `cltest.AwaitJobActive(t, app.JobSpawner(), j.ID, testutils.WaitTimeout(t))`
$DIR/core/internal/features/features_test.go: `testutils.WaitForLogMessage(t, o, "Sending transaction")`
$DIR/core/internal/features/features_test.go: `b.Commit()`
$DIR/core/internal/features/features_test.go: `b.Commit()`
$DIR/core/internal/features/features_test.go: `b.Commit()`
$DIR/core/internal/features/features_test.go: `testutils.WaitForLogMessage(t, o, "Resume run success")`
$DIR/core/internal/features/features_test.go: `assertPipelineTaskRunsSuccessful(t, pipelineRun.PipelineTaskRuns)`
$DIR/core/internal/features/features_test.go: `testutils.SkipShort(t, "long test")`
$DIR/core/internal/features/features_test.go: `t.Run(test.name, func(t *testing.T) {
t.Parallel()
bootstrapNodePortV2 := freeport.GetOne(t)
g := gomega.NewWithT(t)
owner, b, ocrContractAddress, ocrContract, flagsContract, flagsContractAddress := setupOCRContracts(t)
// Note it's plausible these ports could be occupied on a CI machine.
// May need a port randomize + retry approach if we observe collisions.
appBootstrap, bootstrapPeerID, _, _ := setupNode(t, owner, bootstrapNodePortV2, b, nil)
var (
oracles []confighelper.OracleIdentityExtra
transmitters []common.Address
keys []ocrkey.KeyV2
apps []*cltest.TestApplication
)
ports := freeport.GetN(t, numOracles)
for i := 0; i < numOracles; i++ {
app, peerID, transmitter, key := setupNode(t, owner, ports[i], b, func(c *chainlink.Config, s *chainlink.Secrets) {
c.EVM[0].FlagsContractAddress = ptr(evmtypes.EIP55AddressFromAddress(flagsContractAddress))
c.EVM[0].GasEstimator.EIP1559DynamicFees = ptr(test.eip1559)
c.P2P.V2.DefaultBootstrappers = &[]ocrcommontypes.BootstrapperLocator{
{PeerID: bootstrapPeerID, Addrs: []string{fmt.Sprintf("127.0.0.1:%d", bootstrapNodePortV2)}},
}
})
keys = append(keys, key)
apps = append(apps, app)
transmitters = append(transmitters, transmitter)
oracles = append(oracles, confighelper.OracleIdentityExtra{
OracleIdentity: confighelper.OracleIdentity{
OnChainSigningAddress: ocrtypes.OnChainSigningAddress(key.OnChainSigning.Address()),
TransmitAddress: transmitter,
OffchainPublicKey: key.PublicKeyOffChain(),
PeerID: peerID,
},
SharedSecretEncryptionPublicKey: key.PublicKeyConfig(),
})
}
stopBlocks := utils.FiniteTicker(time.Second, func() {
b.Commit()
})
defer stopBlocks()
_, err := ocrContract.SetPayees(owner,
transmitters,
transmitters,
)
require.NoError(t, err)
signers, transmitters, threshold, encodedConfigVersion, encodedConfig, err := confighelper.ContractSetConfigArgsForIntegrationTest(
oracles,
1,
1000000000/100, // threshold PPB
)
require.NoError(t, err)
_, err = ocrContract.SetConfig(owner,
signers,
transmitters,
threshold,
encodedConfigVersion,
encodedConfig,
)
require.NoError(t, err)
b.Commit()
err = appBootstrap.Start(testutils.Context(t))
require.NoError(t, err)
jb, err := ocr.ValidatedOracleSpecToml(appBootstrap.Config, appBootstrap.GetRelayers().LegacyEVMChains(), fmt.Sprintf(`
type = "offchainreporting"
schemaVersion = 1
name = "boot"
contractAddress = "%s"
evmChainID = "%s"
isBootstrapPeer = true
`, ocrContractAddress, testutils.SimulatedChainID.String()))
require.NoError(t, err)
jb.Name = null.NewString("boot", true)
err = appBootstrap.AddJobV2(testutils.Context(t), &jb)
require.NoError(t, err)
// Raising flags to initiate hibernation
_, err = flagsContract.RaiseFlag(owner, ocrContractAddress)
require.NoError(t, err, "failed to raise flag for ocrContractAddress")
_, err = flagsContract.RaiseFlag(owner, evmutils.ZeroAddress)
require.NoError(t, err, "failed to raise flag for ZeroAddress")
b.Commit()
var jids []int32
var servers, slowServers = make([]*httptest.Server, 4), make([]*httptest.Server, 4)
// We expect metadata of:
// latestAnswer:nil // First call
// latestAnswer:0
// latestAnswer:10
// latestAnswer:20
// latestAnswer:30
var metaLock sync.Mutex
expectedMeta := map[string]struct{}{
"0": {}, "10": {}, "20": {}, "30": {},
}
for i := 0; i < numOracles; i++ {
err = apps[i].Start(testutils.Context(t))
require.NoError(t, err)
// Since this API speed is > ObservationTimeout we should ignore it and still produce values.
slowServers[i] = httptest.NewServer(http.HandlerFunc(func(res http.ResponseWriter, req *http.Request) {
time.Sleep(5 * time.Second)
res.WriteHeader(http.StatusOK)
_, err := res.Write([]byte(`{"data":10}`))
require.NoError(t, err)
}))
t.Cleanup(slowServers[i].Close)
servers[i] = httptest.NewServer(http.HandlerFunc(func(res http.ResponseWriter, req *http.Request) {
b, err := io.ReadAll(req.Body)
require.NoError(t, err)
var m bridges.BridgeMetaDataJSON
require.NoError(t, json.Unmarshal(b, &m))
if m.Meta.LatestAnswer != nil && m.Meta.UpdatedAt != nil {
metaLock.Lock()
delete(expectedMeta, m.Meta.LatestAnswer.String())
metaLock.Unlock()
}
res.WriteHeader(http.StatusOK)
_, err = res.Write([]byte(`{"data":10}`))
require.NoError(t, err)
}))
t.Cleanup(servers[i].Close)
u, _ := url.Parse(servers[i].URL)
err := apps[i].BridgeORM().CreateBridgeType(testutils.Context(t), &bridges.BridgeType{
Name: bridges.BridgeName(fmt.Sprintf("bridge%d", i)),
URL: models.WebURL(*u),
})
require.NoError(t, err)
// Note we need: observationTimeout + observationGracePeriod + DeltaGrace (500ms) < DeltaRound (1s)
// So 200ms + 200ms + 500ms < 1s
jb, err := ocr.ValidatedOracleSpecToml(apps[i].Config, apps[i].GetRelayers().LegacyEVMChains(), fmt.Sprintf(`
type = "offchainreporting"
schemaVersion = 1
name = "web oracle spec"
contractAddress = "%s"
evmChainID = "%s"
isBootstrapPeer = false
keyBundleID = "%s"
transmitterAddress = "%s"
observationTimeout = "100ms"
contractConfigConfirmations = 1
contractConfigTrackerPollInterval = "1s"
observationSource = """
// data source 1
ds1 [type=bridge name="%s"];
ds1_parse [type=jsonparse path="data"];
ds1_multiply [type=multiply times=%d];
// data source 2
ds2 [type=http method=GET url="%s"];
ds2_parse [type=jsonparse path="data"];
ds2_multiply [type=multiply times=%d];
ds1 -> ds1_parse -> ds1_multiply -> answer1;
ds2 -> ds2_parse -> ds2_multiply -> answer1;
answer1 [type=median index=0];
"""
`, ocrContractAddress, testutils.SimulatedChainID.String(), keys[i].ID(), transmitters[i], fmt.Sprintf("bridge%d", i), i, slowServers[i].URL, i))
require.NoError(t, err)
jb.Name = null.NewString("testocr", true)
err = apps[i].AddJobV2(testutils.Context(t), &jb)
require.NoError(t, err)
jids = append(jids, jb.ID)
}
// Assert that all the OCR jobs get a run with valid values eventually.
for i := 0; i < numOracles; i++ {
// Want at least 2 runs so we see all the metadata.
pr := cltest.WaitForPipelineComplete(t, i, jids[i],
2, 7, apps[i].JobORM(), time.Minute, time.Second)
jb, err := pr[0].Outputs.MarshalJSON()
require.NoError(t, err)
assert.Equal(t, []byte(fmt.Sprintf("[\"%d\"]", 10*i)), jb, "pr[0] %+v pr[1] %+v", pr[0], pr[1])
require.NoError(t, err)
}
// 4 oracles reporting 0, 10, 20, 30. Answer should be 20 (results[4/2]).
g.Eventually(func() string {
answer, err := ocrContract.LatestAnswer(nil)
require.NoError(t, err)
return answer.String()
}, testutils.WaitTimeout(t), cltest.DBPollingInterval).Should(gomega.Equal("20"))
ctx := testutils.Context(t)
for _, app := range apps {
jobs, _, err := app.JobORM().FindJobs(ctx, 0, 1000)
require.NoError(t, err)
// No spec errors
for _, j := range jobs {
ignore := 0
for i := range j.JobSpecErrors {
// Non-fatal timing related error, ignore for testing.
if strings.Contains(j.JobSpecErrors[i].Description, "leader's phase conflicts tGrace timeout") {
ignore++
}
}
require.Len(t, j.JobSpecErrors, ignore)
}
}
metaLock.Lock()
defer metaLock.Unlock()
assert.Len(t, expectedMeta, 0, "expected metadata %v", expectedMeta)
})`
$DIR/core/internal/features/features_test.go: `c.EVM[0].FlagsContractAddress = ptr(evmtypes.EIP55AddressFromAddress(flagsContractAddress))`
$DIR/core/internal/features/features_test.go: `c.EVM[0].GasEstimator.EIP1559DynamicFees = ptr(test.eip1559)`
$DIR/core/internal/features/features_test.go: `c.P2P.V2.DefaultBootstrappers = &[]ocrcommontypes.BootstrapperLocator{
{PeerID: bootstrapPeerID, Addrs: []string{fmt.Sprintf("127.0.0.1:%d", bootstrapNodePortV2)}},
}`
$DIR/core/internal/features/features_test.go: `keys = append(keys, key)`
$DIR/core/internal/features/features_test.go: `apps = append(apps, app)`
$DIR/core/internal/features/features_test.go: `transmitters = append(transmitters, transmitter)`
$DIR/core/internal/features/features_test.go: `oracles = append(oracles, confighelper.OracleIdentityExtra{
OracleIdentity: confighelper.OracleIdentity{
OnChainSigningAddress: ocrtypes.OnChainSigningAddress(key.OnChainSigning.Address()),
TransmitAddress: transmitter,
OffchainPublicKey: key.PublicKeyOffChain(),
PeerID: peerID,
},
SharedSecretEncryptionPublicKey: key.PublicKeyConfig(),
})`
$DIR/core/internal/features/features_test.go: `b.Commit()`
$DIR/core/internal/features/features_test.go: `_, err = ocrContract.SetConfig(owner,
signers,
transmitters,
threshold,
encodedConfigVersion,
encodedConfig,
)`
$DIR/core/internal/features/features_test.go: `b.Commit()`
$DIR/core/internal/features/features_test.go: `err = appBootstrap.Start(testutils.Context(t))`
$DIR/core/internal/features/features_test.go: `jb.Name = null.NewString("boot", true)`
$DIR/core/internal/features/features_test.go: `err = appBootstrap.AddJobV2(testutils.Context(t), &jb)`
$DIR/core/internal/features/features_test.go: `_, err = flagsContract.RaiseFlag(owner, ocrContractAddress)`
$DIR/core/internal/features/features_test.go: `_, err = flagsContract.RaiseFlag(owner, evmutils.ZeroAddress)`
$DIR/core/internal/features/features_test.go: `b.Commit()`
$DIR/core/internal/features/features_test.go: `err = apps[i].Start(testutils.Context(t))`
$DIR/core/internal/features/features_test.go: `time.Sleep(5 * time.Second)`
$DIR/core/internal/features/features_test.go: `res.WriteHeader(http.StatusOK)`
$DIR/core/internal/features/features_test.go: `t.Cleanup(slowServers[i].Close)`
$DIR/core/internal/features/features_test.go: `metaLock.Lock()`
$DIR/core/internal/features/features_test.go: `delete(expectedMeta, m.Meta.LatestAnswer.String())`
$DIR/core/internal/features/features_test.go: `metaLock.Unlock()`
$DIR/core/internal/features/features_test.go: `res.WriteHeader(http.StatusOK)`
$DIR/core/internal/features/features_test.go: `_, err = res.Write([]byte(`{"data":10}`))`
$DIR/core/internal/features/features_test.go: `t.Cleanup(servers[i].Close)`
$DIR/core/internal/features/features_test.go: `jb.Name = null.NewString("testocr", true)`
$DIR/core/internal/features/features_test.go: `err = apps[i].AddJobV2(testutils.Context(t), &jb)`
$DIR/core/internal/features/features_test.go: `jids = append(jids, jb.ID)`
$DIR/core/internal/features/features_test.go: `g.Eventually(func() string {
answer, err := ocrContract.LatestAnswer(nil)
require.NoError(t, err)
return answer.String()
}, testutils.WaitTimeout(t), cltest.DBPollingInterval).Should(gomega.Equal("20"))`
$DIR/core/internal/features/features_test.go: `ignore++`
$DIR/core/internal/features/features_test.go: `metaLock.Lock()`
$DIR/core/internal/features/features_test.go: `testutils.SkipShort(t, "long test")`
$DIR/core/internal/features/features_test.go: `c.Feature.LogPoller = ptr(true)`
$DIR/core/internal/features/features_test.go: `c.EVM[0].FlagsContractAddress = ptr(evmtypes.EIP55AddressFromAddress(flagsContractAddress))`
$DIR/core/internal/features/features_test.go: `c.EVM[0].GasEstimator.EIP1559DynamicFees = ptr(true)`
$DIR/core/internal/features/features_test.go: `c.P2P.V2.DefaultBootstrappers = &[]ocrcommontypes.BootstrapperLocator{
{PeerID: bootstrapPeerID, Addrs: []string{fmt.Sprintf("127.0.0.1:%d", bootstrapNodePortV2)}},
}`
$DIR/core/internal/features/features_test.go: `keys = append(keys, key)`
$DIR/core/internal/features/features_test.go: `apps = append(apps, app)`
$DIR/core/internal/features/features_test.go: `forwardersContracts = append(forwardersContracts, forwarder)`
$DIR/core/internal/features/features_test.go: `transmitters = append(transmitters, transmitter)`
$DIR/core/internal/features/features_test.go: `oracles = append(oracles, confighelper.OracleIdentityExtra{
OracleIdentity: confighelper.OracleIdentity{
OnChainSigningAddress: ocrtypes.OnChainSigningAddress(key.OnChainSigning.Address()),
TransmitAddress: forwarder,
OffchainPublicKey: key.PublicKeyOffChain(),
PeerID: peerID,
},
SharedSecretEncryptionPublicKey: key.PublicKeyConfig(),
})`
$DIR/core/internal/features/features_test.go: `b.Commit()`
$DIR/core/internal/features/features_test.go: `b.Commit()`
$DIR/core/internal/features/features_test.go: `_, err = ocrContract.SetConfig(owner,
signers,
effectiveTransmitters, // forwarder Addresses
threshold,
encodedConfigVersion,
encodedConfig,
)`
$DIR/core/internal/features/features_test.go: `b.Commit()`
$DIR/core/internal/features/features_test.go: `err = appBootstrap.Start(testutils.Context(t))`
$DIR/core/internal/features/features_test.go: `jb.Name = null.NewString("boot", true)`
$DIR/core/internal/features/features_test.go: `err = appBootstrap.AddJobV2(testutils.Context(t), &jb)`
$DIR/core/internal/features/features_test.go: `_, err = flagsContract.RaiseFlag(owner, ocrContractAddress)`
$DIR/core/internal/features/features_test.go: `_, err = flagsContract.RaiseFlag(owner, evmutils.ZeroAddress)`
$DIR/core/internal/features/features_test.go: `b.Commit()`
$DIR/core/internal/features/features_test.go: `err = apps[i].Start(testutils.Context(t))`
$DIR/core/internal/features/features_test.go: `time.Sleep(5 * time.Second)`
$DIR/core/internal/features/features_test.go: `res.WriteHeader(http.StatusOK)`
$DIR/core/internal/features/features_test.go: `t.Cleanup(slowServers[i].Close)`
$DIR/core/internal/features/features_test.go: `metaLock.Lock()`
$DIR/core/internal/features/features_test.go: `delete(expectedMeta, m.Meta.LatestAnswer.String())`
$DIR/core/internal/features/features_test.go: `metaLock.Unlock()`
$DIR/core/internal/features/features_test.go: `res.WriteHeader(http.StatusOK)`
$DIR/core/internal/features/features_test.go: `_, err = res.Write([]byte(`{"data":10}`))`
$DIR/core/internal/features/features_test.go: `t.Cleanup(servers[i].Close)`
$DIR/core/internal/features/features_test.go: `jb.Name = null.NewString("testocr", true)`
$DIR/core/internal/features/features_test.go: `err = apps[i].AddJobV2(testutils.Context(t), &jb)`
$DIR/core/internal/features/features_test.go: `jids = append(jids, jb.ID)`
$DIR/core/internal/features/features_test.go: `g.Eventually(func() string {
answer, err := ocrContract.LatestAnswer(nil)
require.NoError(t, err)
return answer.String()
}, testutils.WaitTimeout(t), cltest.DBPollingInterval).Should(gomega.Equal("20"))`
$DIR/core/internal/features/features_test.go: `ignore++`
$DIR/core/internal/features/features_test.go: `metaLock.Lock()`
$DIR/core/internal/features/features_test.go: `c.EVM[0].BalanceMonitor.Enabled = ptr(false)`
$DIR/core/internal/features/features_test.go: `c.EVM[0].GasEstimator.BlockHistory.CheckInclusionBlocks = ptr[uint16](0)`
$DIR/core/internal/features/features_test.go: `c.EVM[0].GasEstimator.PriceDefault = assets.NewWeiI(initialDefaultGasPrice)`
$DIR/core/internal/features/features_test.go: `c.EVM[0].GasEstimator.Mode = ptr("BlockHistory")`
$DIR/core/internal/features/features_test.go: `c.EVM[0].RPCBlockQueryDelay = ptr[uint16](0)`
$DIR/core/internal/features/features_test.go: `c.EVM[0].GasEstimator.BlockHistory.BlockHistorySize = ptr[uint16](2)`
$DIR/core/internal/features/features_test.go: `c.EVM[0].FinalityDepth = ptr[uint32](3)`
$DIR/core/internal/features/features_test.go: `ethClient.On("ConfiguredChainID").Return(big.NewInt(client.NullClientChainID)).Maybe()`
$DIR/core/internal/features/features_test.go: `ethClient.On("SubscribeNewHead", mock.Anything, mock.Anything).
Return(
func(ctx context.Context, ch chan<- *evmtypes.Head) ethereum.Subscription {
sub := mockEth.NewSub(t)
chchNewHeads <- evmtestutils.NewRawSub(ch, sub.Err())
return sub
},
func(ctx context.Context, ch chan<- *evmtypes.Head) error { return nil },
)`
$DIR/core/internal/features/features_test.go: `chchNewHeads <- evmtestutils.NewRawSub(ch, sub.Err())`
$DIR/core/internal/features/features_test.go: `ethClient.On("PendingNonceAt", mock.Anything, mock.Anything).Maybe().Return(uint64(0), nil)`
$DIR/core/internal/features/features_test.go: `ethClient.On("HeadByNumber", mock.Anything, mock.AnythingOfType("*big.Int")).Return(&h42, nil)`
$DIR/core/internal/features/features_test.go: `ethClient.On("BatchCallContext", mock.Anything, mock.MatchedBy(func(b []rpc.BatchElem) bool {
return len(b) == 2 &&
b[0].Method == "eth_getBlockByNumber" && b[0].Args[0] == "0x2a" &&
b[1].Method == "eth_getBlockByNumber" && b[1].Args[0] == "0x29"
})).Return(nil).Run(func(args mock.Arguments) {
elems := args.Get(1).([]rpc.BatchElem)
elems[0].Result = &b42
elems[1].Result = &b41
})`
$DIR/core/internal/features/features_test.go: `elems[0].Result = &b42`
$DIR/core/internal/features/features_test.go: `elems[1].Result = &b41`
$DIR/core/internal/features/features_test.go: `ethClient.On("Dial", mock.Anything).Return(nil)`
$DIR/core/internal/features/features_test.go: `ethClient.On("ConfiguredChainID", mock.Anything).Return(*evmtest.MustGetDefaultChainID(t, cfg.EVMConfigs()), nil)`
$DIR/core/internal/features/features_test.go: `ethClient.On("BalanceAt", mock.Anything, mock.Anything, mock.Anything).Maybe().Return(oneETH.ToInt(), nil)`
$DIR/core/internal/features/features_test.go: `ethClient.On("HeadByHash", mock.Anything, h40.Hash).Return(&h40, nil).Maybe()`
$DIR/core/internal/features/features_test.go: `ethClient.On("HeadByHash", mock.Anything, h41.Hash).Return(&h41, nil).Maybe()`
$DIR/core/internal/features/features_test.go: `ethClient.On("HeadByHash", mock.Anything, h42.Hash).Return(&h42, nil).Maybe()`
$DIR/core/internal/features/features_test.go: `servicetest.Run(t, re)`
$DIR/core/internal/features/features_test.go: `ethClient.On("BatchCallContext", mock.Anything, mock.MatchedBy(func(b []rpc.BatchElem) bool {
return len(b) == 1 && b[0].Method == "eth_getBlockByNumber" && b[0].Args[0] == "0x2b"
})).Return(nil).Run(func(args mock.Arguments) {
elems := args.Get(1).([]rpc.BatchElem)
elems[0].Result = &b43
})`
$DIR/core/internal/features/features_test.go: `elems[0].Result = &b43`
$DIR/core/internal/features/features_test.go: `ethClient.On("Close").Return().Once()`
$DIR/core/internal/features/features_test.go: `h43.ParentHash = h42.Hash`
$DIR/core/internal/features/features_test.go: `newHeads.TrySend(h43)`
$DIR/core/internal/features/features_test.go: `.Context(t)`
$DIR/core/internal/features/features_test.go: `.NewEthMocksWithStartupAssertions(t)`
$DIR/core/internal/features/features_test.go: `.NewGeneralConfig(t, func(c *chainlink.Config, s *chainlink.Secrets) {
c.JobPipeline.ExternalInitiatorsEnabled = ptr(true)
c.Database.Listener.FallbackPollInterval = commonconfig.MustNewDuration(10 * time.Millisecond)
})`
$DIR/core/internal/features/features_test.go: `.MustNewDuration(10 * time.Millisecond)`
$DIR/core/internal/features/features_test.go: `.NewApplicationWithConfig(t, cfg, ethClient, cltest.UseRealExternalInitiatorManager)`
$DIR/core/internal/features/features_test.go: `.MustParse("0EEC7E1D-D0D2-476C-A1A8-72DFB6633F46")`
$DIR/core/internal/features/features_test.go: `.String()`
$DIR/core/internal/features/features_test.go: `.NewServer(http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {
if !eiNotifiedOfCreate {
require.Equal(t, http.MethodPost, r.Method)
eiNotifiedOfCreate = true
defer r.Body.Close()
var gotCreateJobRequest map[string]interface{}
err := json.NewDecoder(r.Body).Decode(&gotCreateJobRequest)
require.NoError(t, err)
require.Equal(t, expectedCreateJobRequest, gotCreateJobRequest)
w.WriteHeader(http.StatusOK)
} else {
require.Equal(t, http.MethodDelete, r.Method)
eiNotifiedOfDelete = true
defer r.Body.Close()
require.Equal(t, fmt.Sprintf("/%v", jobUUID.String()), r.URL.Path)
}
}))`
$DIR/core/internal/features/features_test.go: `.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {
if !eiNotifiedOfCreate {
require.Equal(t, http.MethodPost, r.Method)
eiNotifiedOfCreate = true
defer r.Body.Close()
var gotCreateJobRequest map[string]interface{}
err := json.NewDecoder(r.Body).Decode(&gotCreateJobRequest)
require.NoError(t, err)
require.Equal(t, expectedCreateJobRequest, gotCreateJobRequest)
w.WriteHeader(http.StatusOK)
} else {
require.Equal(t, http.MethodDelete, r.Method)
eiNotifiedOfDelete = true
defer r.Body.Close()
require.Equal(t, fmt.Sprintf("/%v", jobUUID.String()), r.URL.Path)
}
})`
$DIR/core/internal/features/features_test.go: `.NewDecoder(r.Body)`
$DIR/core/internal/features/features_test.go: `.Decode(&gotCreateJobRequest)`
$DIR/core/internal/features/features_test.go: `.WriteHeader(http.StatusOK)`
$DIR/core/internal/features/features_test.go: `.Marshal(eiCreate)`
$DIR/core/internal/features/features_test.go: `.CreateExternalInitiatorViaWeb(t, app, string(eiCreateJSON))`
$DIR/core/internal/features/features_test.go: `.NewServer(http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {
bridgeCalled = true
defer r.Body.Close()
var gotBridgeRequest map[string]interface{}
err := json.NewDecoder(r.Body).Decode(&gotBridgeRequest)
require.NoError(t, err)
expectedBridgeRequest := map[string]interface{}{
"value": float64(42),
}
require.Equal(t, expectedBridgeRequest, gotBridgeRequest)
w.WriteHeader(http.StatusOK)
require.NoError(t, err)
_, err = io.WriteString(w, `{}`)
require.NoError(t, err)
}))`
$DIR/core/internal/features/features_test.go: `.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {
bridgeCalled = true
defer r.Body.Close()
var gotBridgeRequest map[string]interface{}
err := json.NewDecoder(r.Body).Decode(&gotBridgeRequest)
require.NoError(t, err)
expectedBridgeRequest := map[string]interface{}{
"value": float64(42),
}
require.Equal(t, expectedBridgeRequest, gotBridgeRequest)
w.WriteHeader(http.StatusOK)
require.NoError(t, err)
_, err = io.WriteString(w, `{}`)
require.NoError(t, err)
})`
$DIR/core/internal/features/features_test.go: `.NewDecoder(r.Body)`
$DIR/core/internal/features/features_test.go: `.Decode(&gotBridgeRequest)`
$DIR/core/internal/features/features_test.go: `.WriteHeader(http.StatusOK)`
$DIR/core/internal/features/features_test.go: `.WriteString(w, `{}`)`
$DIR/core/internal/features/features_test.go: `.Parse(bridgeServer.URL)`
$DIR/core/internal/features/features_test.go: `.BridgeORM()`
$DIR/core/internal/features/features_test.go: `.CreateBridgeType(ctx, &bridges.BridgeType{
Name: bridges.BridgeName("substrate-adapter1"),
URL: models.WebURL(*u),
})`
$DIR/core/internal/features/features_test.go: `.BridgeName("substrate-adapter1")`
$DIR/core/internal/features/features_test.go: `.WebURL(*u)`
$DIR/core/internal/features/features_test.go: `.Sprintf(`
type = "webhook"
schemaVersion = 1
externalJobID = "%v"
externalInitiators = [
{
name = "%s",
spec = """
%s
"""
}
]
observationSource = """
parse [type=jsonparse path="result" data="$(jobRun.requestBody)"]
submit [type=bridge name="substrate-adapter1" requestData=<{ "value": $(parse) }>]
parse -> submit
"""
`, jobUUID, eiName, cltest.MustJSONMarshal(t, eiSpec))`
$DIR/core/internal/features/features_test.go: `.MustJSONMarshal(t, eiSpec)`
$DIR/core/internal/features/features_test.go: `.ValidatedWebhookSpec(ctx, tomlSpec, app.GetExternalInitiatorManager())`
$DIR/core/internal/features/features_test.go: `.GetExternalInitiatorManager()`
$DIR/core/internal/features/features_test.go: `.CreateJobViaWeb(t, app, []byte(cltest.MustJSONMarshal(t, web.CreateJobRequest{TOML: tomlSpec})))`
$DIR/core/internal/features/features_test.go: `.MustJSONMarshal(t, web.CreateJobRequest{TOML: tomlSpec})`
$DIR/core/internal/features/features_test.go: `.Run("calling webhook_spec with non-matching external_initiator_id returns unauthorized", func(t *testing.T) {
eiaWrong := auth.NewToken()
body := cltest.MustJSONMarshal(t, eiRequest)
headers := make(map[string]string)
headers[static.ExternalInitiatorAccessKeyHeader] = eiaWrong.AccessKey
headers[static.ExternalInitiatorSecretHeader] = eiaWrong.Secret
url := app.Server.URL + "/v2/jobs/" + jobUUID.String() + "/runs"
bodyBuf := bytes.NewBufferString(body)
resp, cleanup := cltest.UnauthenticatedPost(t, url, bodyBuf, headers)
defer cleanup()
cltest.AssertServerResponse(t, resp, 401)
cltest.AssertCountStays(t, app.GetDB(), "pipeline_runs", 0)
})`
$DIR/core/internal/features/features_test.go: `.NewToken()`
$DIR/core/internal/features/features_test.go: `.MustJSONMarshal(t, eiRequest)`
$DIR/core/internal/features/features_test.go: `.String()`
$DIR/core/internal/features/features_test.go: `.NewBufferString(body)`
$DIR/core/internal/features/features_test.go: `.UnauthenticatedPost(t, url, bodyBuf, headers)`
$DIR/core/internal/features/features_test.go: `.AssertServerResponse(t, resp, 401)`
$DIR/core/internal/features/features_test.go: `.AssertCountStays(t, app.GetDB(), "pipeline_runs", 0)`
$DIR/core/internal/features/features_test.go: `.GetDB()`
$DIR/core/internal/features/features_test.go: `.Run("calling webhook_spec with matching external_initiator_id works", func(t *testing.T) {
// Simulate request from EI -> Core node
cltest.AwaitJobActive(t, app.JobSpawner(), jobID, 3*time.Second)
_ = cltest.CreateJobRunViaExternalInitiatorV2(t, app, jobUUID, *eia, cltest.MustJSONMarshal(t, eiRequest))
pipelineORM := pipeline.NewORM(app.GetDB(), logger.TestLogger(t), cfg.JobPipeline().MaxSuccessfulRuns())
bridgeORM := bridges.NewORM(app.GetDB())
jobORM := job.NewORM(app.GetDB(), pipelineORM, bridgeORM, app.KeyStore, logger.TestLogger(t))
runs := cltest.WaitForPipelineComplete(t, 0, jobID, 1, 2, jobORM, 5*time.Second, 300*time.Millisecond)
require.Len(t, runs, 1)
run := runs[0]
require.Len(t, run.PipelineTaskRuns, 2)
require.Empty(t, run.PipelineTaskRuns[0].Error)
require.Empty(t, run.PipelineTaskRuns[1].Error)
assert.True(t, bridgeCalled, "expected bridge server to be called")
})`
$DIR/core/internal/features/features_test.go: `.AwaitJobActive(t, app.JobSpawner(), jobID, 3*time.Second)`
$DIR/core/internal/features/features_test.go: `.JobSpawner()`
$DIR/core/internal/features/features_test.go: `.CreateJobRunViaExternalInitiatorV2(t, app, jobUUID, *eia, cltest.MustJSONMarshal(t, eiRequest))`
$DIR/core/internal/features/features_test.go: `.MustJSONMarshal(t, eiRequest)`
$DIR/core/internal/features/features_test.go: `.NewORM(app.GetDB(), logger.TestLogger(t), cfg.JobPipeline().MaxSuccessfulRuns())`
$DIR/core/internal/features/features_test.go: `.GetDB()`
$DIR/core/internal/features/features_test.go: `.TestLogger(t)`
$DIR/core/internal/features/features_test.go: `.JobPipeline()`
$DIR/core/internal/features/features_test.go: `.MaxSuccessfulRuns()`
$DIR/core/internal/features/features_test.go: `.NewORM(app.GetDB())`
$DIR/core/internal/features/features_test.go: `.GetDB()`
$DIR/core/internal/features/features_test.go: `.NewORM(app.GetDB(), pipelineORM, bridgeORM, app.KeyStore, logger.TestLogger(t))`
$DIR/core/internal/features/features_test.go: `.GetDB()`
$DIR/core/internal/features/features_test.go: `.TestLogger(t)`
$DIR/core/internal/features/features_test.go: `.WaitForPipelineComplete(t, 0, jobID, 1, 2, jobORM, 5*time.Second, 300*time.Millisecond)`
$DIR/core/internal/features/features_test.go: `.DeleteJobViaWeb(t, app, jobID)`
$DIR/core/internal/features/features_test.go: `.Context(t)`
$DIR/core/internal/features/features_test.go: `.NewApplication(t)`
$DIR/core/internal/features/features_test.go: `.MustRandomUser(t)`
$DIR/core/internal/features/features_test.go: `.New()`
$DIR/core/internal/features/features_test.go: `.String()`
$DIR/core/internal/features/features_test.go: `.New()`
$DIR/core/internal/features/features_test.go: `.String()`
$DIR/core/internal/features/features_test.go: `.AuthenticationProvider()`
$DIR/core/internal/features/features_test.go: `.UnauthenticatedGet(t, url, headers)`
$DIR/core/internal/features/features_test.go: `.Run(test.name, func(t *testing.T) {
ctx := testutils.Context(t)
// Simulate a consumer contract calling to obtain ETH quotes in 3 different currencies
// in a single callback.
config := configtest.NewGeneralConfigSimulated(t, func(c *chainlink.Config, s *chainlink.Secrets) {
c.Database.Listener.FallbackPollInterval = commonconfig.MustNewDuration(100 * time.Millisecond)
c.EVM[0].GasEstimator.EIP1559DynamicFees = ptr(true)
})
operatorContracts := setupOperatorContracts(t)
b := operatorContracts.sim
app := cltest.NewApplicationWithConfigV2AndKeyOnSimulatedBlockchain(t, config, b)
sendingKeys, err := app.KeyStore.Eth().EnabledKeysForChain(ctx, testutils.SimulatedChainID)
require.NoError(t, err)
authorizedSenders := []common.Address{sendingKeys[0].Address}
tx, err := operatorContracts.operator.SetAuthorizedSenders(operatorContracts.user, authorizedSenders)
require.NoError(t, err)
b.Commit()
cltest.RequireTxSuccessful(t, b, tx.Hash())
// Fund node account with ETH.
n, err := b.NonceAt(testutils.Context(t), operatorContracts.user.From, nil)
require.NoError(t, err)
tx = cltest.NewLegacyTransaction(n, sendingKeys[0].Address, assets.Ether(100).ToInt(), 21000, big.NewInt(1000000000), nil)
signedTx, err := operatorContracts.user.Signer(operatorContracts.user.From, tx)
require.NoError(t, err)
err = b.SendTransaction(testutils.Context(t), signedTx)
require.NoError(t, err)
b.Commit()
err = app.Start(testutils.Context(t))
require.NoError(t, err)
mockServerUSD := cltest.NewHTTPMockServer(t, 200, "GET", `{"USD": 614.64}`)
mockServerEUR := cltest.NewHTTPMockServer(t, 200, "GET", `{"EUR": 507.07}`)
mockServerJPY := cltest.NewHTTPMockServer(t, 200, "GET", `{"JPY": 63818.86}`)
nameAndExternalJobID := uuid.New()
addr := operatorContracts.operatorAddress.Hex()
spec := fmt.Sprintf(multiWordSpecTemplate, nameAndExternalJobID, addr, nameAndExternalJobID, addr)
j := cltest.CreateJobViaWeb(t, app, []byte(cltest.MustJSONMarshal(t, web.CreateJobRequest{TOML: spec})))
cltest.AwaitJobActive(t, app.JobSpawner(), j.ID, 5*time.Second)
var jobID [32]byte
copy(jobID[:], j.ExternalJobID[:])
tx, err = operatorContracts.multiWord.SetSpecID(operatorContracts.user, jobID)
require.NoError(t, err)
b.Commit()
cltest.RequireTxSuccessful(t, b, tx.Hash())
operatorContracts.user.GasLimit = 1000000
tx, err = operatorContracts.multiWord.RequestMultipleParametersWithCustomURLs(operatorContracts.user,
mockServerUSD.URL, "USD",
mockServerEUR.URL, "EUR",
mockServerJPY.URL, "JPY",
big.NewInt(1000),
)
require.NoError(t, err)
b.Commit()
cltest.RequireTxSuccessful(t, b, tx.Hash())
empty := big.NewInt(0)
assertPricesUint256(t, empty, empty, empty, operatorContracts.multiWord)
stopBlocks := utils.FiniteTicker(100*time.Millisecond, func() {
triggerAllKeys(t, app)
b.Commit()
})
defer stopBlocks()
pipelineRuns := cltest.WaitForPipelineComplete(t, 0, j.ID, 1, 14, app.JobORM(), testutils.WaitTimeout(t)/2, time.Second)
pipelineRun := pipelineRuns[0]
assertPipelineTaskRunsSuccessful(t, pipelineRun.PipelineTaskRuns)
assertPricesUint256(t, big.NewInt(61464), big.NewInt(50707), big.NewInt(6381886), operatorContracts.multiWord)
nameAndExternalJobID = uuid.New()
singleWordSpec := fmt.Sprintf(singleWordSpecTemplate, nameAndExternalJobID, addr, nameAndExternalJobID, addr)
jobSingleWord := cltest.CreateJobViaWeb(t, app, []byte(cltest.MustJSONMarshal(t, web.CreateJobRequest{TOML: singleWordSpec})))
cltest.AwaitJobActive(t, app.JobSpawner(), jobSingleWord.ID, 5*time.Second)
var jobIDSingleWord [32]byte
copy(jobIDSingleWord[:], jobSingleWord.ExternalJobID[:])
tx, err = operatorContracts.singleWord.SetSpecID(operatorContracts.user, jobIDSingleWord)
require.NoError(t, err)
b.Commit()
cltest.RequireTxSuccessful(t, b, tx.Hash())
mockServerUSD2 := cltest.NewHTTPMockServer(t, 200, "GET", `{"USD": 614.64}`)
tx, err = operatorContracts.singleWord.RequestMultipleParametersWithCustomURLs(operatorContracts.user,
mockServerUSD2.URL, "USD",
big.NewInt(1000),
)
require.NoError(t, err)
b.Commit()
cltest.RequireTxSuccessful(t, b, tx.Hash())
pipelineRuns = cltest.WaitForPipelineComplete(t, 0, jobSingleWord.ID, 1, 8, app.JobORM(), testutils.WaitTimeout(t), time.Second)
pipelineRun = pipelineRuns[0]
assertPipelineTaskRunsSuccessful(t, pipelineRun.PipelineTaskRuns)
v, err := operatorContracts.singleWord.CurrentPriceInt(nil)
require.NoError(t, err)
assert.Equal(t, big.NewInt(61464), v)
})`
$DIR/core/internal/features/features_test.go: `.Context(t)`
$DIR/core/internal/features/features_test.go: `.NewGeneralConfigSimulated(t, func(c *chainlink.Config, s *chainlink.Secrets) {
c.Database.Listener.FallbackPollInterval = commonconfig.MustNewDuration(100 * time.Millisecond)
c.EVM[0].GasEstimator.EIP1559DynamicFees = ptr(true)
})`
$DIR/core/internal/features/features_test.go: `.MustNewDuration(100 * time.Millisecond)`
$DIR/core/internal/features/features_test.go: `.NewApplicationWithConfigV2AndKeyOnSimulatedBlockchain(t, config, b)`
$DIR/core/internal/features/features_test.go: `.KeyStore.Eth()`
$DIR/core/internal/features/features_test.go: `.EnabledKeysForChain(ctx, testutils.SimulatedChainID)`
$DIR/core/internal/features/features_test.go: `.operator.SetAuthorizedSenders(operatorContracts.user, authorizedSenders)`
$DIR/core/internal/features/features_test.go: `.Commit()`
$DIR/core/internal/features/features_test.go: `.RequireTxSuccessful(t, b, tx.Hash())`
$DIR/core/internal/features/features_test.go: `.Hash()`
$DIR/core/internal/features/features_test.go: `.NonceAt(testutils.Context(t), operatorContracts.user.From, nil)`
$DIR/core/internal/features/features_test.go: `.Context(t)`
$DIR/core/internal/features/features_test.go: `.NewLegacyTransaction(n, sendingKeys[0].Address, assets.Ether(100).ToInt(), 21000, big.NewInt(1000000000), nil)`
$DIR/core/internal/features/features_test.go: `.Ether(100)`
$DIR/core/internal/features/features_test.go: `.ToInt()`
$DIR/core/internal/features/features_test.go: `.NewInt(1000000000)`
$DIR/core/internal/features/features_test.go: `.user.Signer(operatorContracts.user.From, tx)`
$DIR/core/internal/features/features_test.go: `.SendTransaction(testutils.Context(t), signedTx)`
$DIR/core/internal/features/features_test.go: `.Context(t)`
$DIR/core/internal/features/features_test.go: `.Commit()`
$DIR/core/internal/features/features_test.go: `.Start(testutils.Context(t))`
$DIR/core/internal/features/features_test.go: `.Context(t)`
$DIR/core/internal/features/features_test.go: `.NewHTTPMockServer(t, 200, "GET", `{"USD": 614.64}`)`
$DIR/core/internal/features/features_test.go: `.NewHTTPMockServer(t, 200, "GET", `{"EUR": 507.07}`)`
$DIR/core/internal/features/features_test.go: `.NewHTTPMockServer(t, 200, "GET", `{"JPY": 63818.86}`)`
$DIR/core/internal/features/features_test.go: `.New()`
$DIR/core/internal/features/features_test.go: `.operatorAddress.Hex()`
$DIR/core/internal/features/features_test.go: `.Sprintf(multiWordSpecTemplate, nameAndExternalJobID, addr, nameAndExternalJobID, addr)`
$DIR/core/internal/features/features_test.go: `.CreateJobViaWeb(t, app, []byte(cltest.MustJSONMarshal(t, web.CreateJobRequest{TOML: spec})))`
$DIR/core/internal/features/features_test.go: `.MustJSONMarshal(t, web.CreateJobRequest{TOML: spec})`
$DIR/core/internal/features/features_test.go: `.AwaitJobActive(t, app.JobSpawner(), j.ID, 5*time.Second)`
$DIR/core/internal/features/features_test.go: `.JobSpawner()`
$DIR/core/internal/features/features_test.go: `.multiWord.SetSpecID(operatorContracts.user, jobID)`
$DIR/core/internal/features/features_test.go: `.Commit()`
$DIR/core/internal/features/features_test.go: `.RequireTxSuccessful(t, b, tx.Hash())`
$DIR/core/internal/features/features_test.go: `.Hash()`
$DIR/core/internal/features/features_test.go: `.multiWord.RequestMultipleParametersWithCustomURLs(operatorContracts.user,
mockServerUSD.URL, "USD",
mockServerEUR.URL, "EUR",
mockServerJPY.URL, "JPY",
big.NewInt(1000),
)`
$DIR/core/internal/features/features_test.go: `.NewInt(1000)`
$DIR/core/internal/features/features_test.go: `.Commit()`
$DIR/core/internal/features/features_test.go: `.RequireTxSuccessful(t, b, tx.Hash())`
$DIR/core/internal/features/features_test.go: `.Hash()`
$DIR/core/internal/features/features_test.go: `.NewInt(0)`
$DIR/core/internal/features/features_test.go: `.FiniteTicker(100*time.Millisecond, func() {
triggerAllKeys(t, app)
b.Commit()
})`
$DIR/core/internal/features/features_test.go: `.Commit()`
$DIR/core/internal/features/features_test.go: `.WaitForPipelineComplete(t, 0, j.ID, 1, 14, app.JobORM(), testutils.WaitTimeout(t)/2, time.Second)`
$DIR/core/internal/features/features_test.go: `.JobORM()`
$DIR/core/internal/features/features_test.go: `.WaitTimeout(t)`
$DIR/core/internal/features/features_test.go: `.NewInt(61464)`
$DIR/core/internal/features/features_test.go: `.NewInt(50707)`
$DIR/core/internal/features/features_test.go: `.NewInt(6381886)`
$DIR/core/internal/features/features_test.go: `.New()`
$DIR/core/internal/features/features_test.go: `.Sprintf(singleWordSpecTemplate, nameAndExternalJobID, addr, nameAndExternalJobID, addr)`
$DIR/core/internal/features/features_test.go: `.CreateJobViaWeb(t, app, []byte(cltest.MustJSONMarshal(t, web.CreateJobRequest{TOML: singleWordSpec})))`
$DIR/core/internal/features/features_test.go: `.MustJSONMarshal(t, web.CreateJobRequest{TOML: singleWordSpec})`
$DIR/core/internal/features/features_test.go: `.AwaitJobActive(t, app.JobSpawner(), jobSingleWord.ID, 5*time.Second)`
$DIR/core/internal/features/features_test.go: `.JobSpawner()`
$DIR/core/internal/features/features_test.go: `.singleWord.SetSpecID(operatorContracts.user, jobIDSingleWord)`
$DIR/core/internal/features/features_test.go: `.Commit()`
$DIR/core/internal/features/features_test.go: `.RequireTxSuccessful(t, b, tx.Hash())`
$DIR/core/internal/features/features_test.go: `.Hash()`
$DIR/core/internal/features/features_test.go: `.NewHTTPMockServer(t, 200, "GET", `{"USD": 614.64}`)`
$DIR/core/internal/features/features_test.go: `.singleWord.RequestMultipleParametersWithCustomURLs(operatorContracts.user,
mockServerUSD2.URL, "USD",
big.NewInt(1000),
)`
$DIR/core/internal/features/features_test.go: `.NewInt(1000)`
$DIR/core/internal/features/features_test.go: `.Commit()`
$DIR/core/internal/features/features_test.go: `.RequireTxSuccessful(t, b, tx.Hash())`
$DIR/core/internal/features/features_test.go: `.Hash()`
$DIR/core/internal/features/features_test.go: `.WaitForPipelineComplete(t, 0, jobSingleWord.ID, 1, 8, app.JobORM(), testutils.WaitTimeout(t), time.Second)`
$DIR/core/internal/features/features_test.go: `.JobORM()`
$DIR/core/internal/features/features_test.go: `.WaitTimeout(t)`
$DIR/core/internal/features/features_test.go: `.singleWord.CurrentPriceInt(nil)`
$DIR/core/internal/features/features_test.go: `.Run("with FailOnRevert enabled, run succeeds when transaction is successful", func(t *testing.T) {
app, sendingAddr, o := setupAppForEthTx(t, operatorContracts)
tomlSpec := `
type = "webhook"
schemaVersion = 1
observationSource = """
submit_tx [type=ethtx to="%s"
data="%s"
minConfirmations="2"
failOnRevert=false
evmChainID="%s"
from="[\\"%s\\"]"
]
"""
`
// This succeeds for whatever reason
revertingData := "0xdeadbeef"
tomlSpec = fmt.Sprintf(tomlSpec, operatorContracts.linkTokenAddress.String(), revertingData, testutils.SimulatedChainID.String(), sendingAddr)
j := cltest.CreateJobViaWeb(t, app, []byte(cltest.MustJSONMarshal(t, web.CreateJobRequest{TOML: tomlSpec})))
cltest.AwaitJobActive(t, app.JobSpawner(), j.ID, testutils.WaitTimeout(t))
run := cltest.CreateJobRunViaUser(t, app, j.ExternalJobID, "")
assert.Equal(t, []*string(nil), run.Outputs)
assert.Equal(t, []*string(nil), run.Errors)
testutils.WaitForLogMessage(t, o, "Sending transaction")
b.Commit() // Needs at least two confirmations
b.Commit() // Needs at least two confirmations
b.Commit() // Needs at least two confirmations
testutils.WaitForLogMessage(t, o, "Resume run success")
pipelineRuns := cltest.WaitForPipelineComplete(t, 0, j.ID, 1, 1, app.JobORM(), testutils.WaitTimeout(t), time.Second)
// The run should have succeeded but with the receipt detailing the reverted transaction
pipelineRun := pipelineRuns[0]
assertPipelineTaskRunsSuccessful(t, pipelineRun.PipelineTaskRuns)
outputs := pipelineRun.Outputs.Val.([]interface{})
require.Len(t, outputs, 1)
output := outputs[0]
receipt := output.(map[string]interface{})
assert.Equal(t, "0x7", receipt["blockNumber"])
assert.Equal(t, "0x538f", receipt["gasUsed"])
assert.Equal(t, "0x0", receipt["status"]) // success
})`
$DIR/core/internal/features/features_test.go: `.Sprintf(tomlSpec, operatorContracts.linkTokenAddress.String(), revertingData, testutils.SimulatedChainID.String(), sendingAddr)`
$DIR/core/internal/features/features_test.go: `.linkTokenAddress.String()`
$DIR/core/internal/features/features_test.go: `.SimulatedChainID.String()`
$DIR/core/internal/features/features_test.go: `.CreateJobViaWeb(t, app, []byte(cltest.MustJSONMarshal(t, web.CreateJobRequest{TOML: tomlSpec})))`
$DIR/core/internal/features/features_test.go: `.MustJSONMarshal(t, web.CreateJobRequest{TOML: tomlSpec})`
$DIR/core/internal/features/features_test.go: `.AwaitJobActive(t, app.JobSpawner(), j.ID, testutils.WaitTimeout(t))`
$DIR/core/internal/features/features_test.go: `.JobSpawner()`
$DIR/core/internal/features/features_test.go: `.WaitTimeout(t)`
$DIR/core/internal/features/features_test.go: `.CreateJobRunViaUser(t, app, j.ExternalJobID, "")`
$DIR/core/internal/features/features_test.go: `.WaitForLogMessage(t, o, "Sending transaction")`
$DIR/core/internal/features/features_test.go: `.Commit()`
$DIR/core/internal/features/features_test.go: `.Commit()`
$DIR/core/internal/features/features_test.go: `.Commit()`
$DIR/core/internal/features/features_test.go: `.WaitForLogMessage(t, o, "Resume run success")`
$DIR/core/internal/features/features_test.go: `.WaitForPipelineComplete(t, 0, j.ID, 1, 1, app.JobORM(), testutils.WaitTimeout(t), time.Second)`
$DIR/core/internal/features/features_test.go: `.JobORM()`
$DIR/core/internal/features/features_test.go: `.WaitTimeout(t)`
$DIR/core/internal/features/features_test.go: `.Run("with FailOnRevert enabled, run fails with transaction reverted error", func(t *testing.T) {
app, sendingAddr, o := setupAppForEthTx(t, operatorContracts)
tomlSpec := `
type = "webhook"
schemaVersion = 1
observationSource = """
submit_tx [type=ethtx to="%s"
data="%s"
minConfirmations="2"
failOnRevert=true
evmChainID="%s"
from="[\\"%s\\"]"
]
"""
`
// This data is a call to link token's `transfer` function and will revert due to insufficient LINK on the sender address
revertingData := "0xa9059cbb000000000000000000000000526485b5abdd8ae9c6a63548e0215a83e7135e6100000000000000000000000000000000000000000000000db069932ea4fe1400"
tomlSpec = fmt.Sprintf(tomlSpec, operatorContracts.linkTokenAddress.String(), revertingData, testutils.SimulatedChainID.String(), sendingAddr)
j := cltest.CreateJobViaWeb(t, app, []byte(cltest.MustJSONMarshal(t, web.CreateJobRequest{TOML: tomlSpec})))
cltest.AwaitJobActive(t, app.JobSpawner(), j.ID, testutils.WaitTimeout(t))
run := cltest.CreateJobRunViaUser(t, app, j.ExternalJobID, "")
assert.Equal(t, []*string(nil), run.Outputs)
assert.Equal(t, []*string(nil), run.Errors)
testutils.WaitForLogMessage(t, o, "Sending transaction")
b.Commit() // Needs at least two confirmations
b.Commit() // Needs at least two confirmations
b.Commit() // Needs at least two confirmations
testutils.WaitForLogMessage(t, o, "Resume run success")
pipelineRuns := cltest.WaitForPipelineError(t, 0, j.ID, 1, 1, app.JobORM(), testutils.WaitTimeout(t), time.Second)
// The run should have failed as a revert
pipelineRun := pipelineRuns[0]
assertPipelineTaskRunsErrored(t, pipelineRun.PipelineTaskRuns)
})`
$DIR/core/internal/features/features_test.go: `.Sprintf(tomlSpec, operatorContracts.linkTokenAddress.String(), revertingData, testutils.SimulatedChainID.String(), sendingAddr)`
$DIR/core/internal/features/features_test.go: `.linkTokenAddress.String()`
$DIR/core/internal/features/features_test.go: `.SimulatedChainID.String()`
$DIR/core/internal/features/features_test.go: `.CreateJobViaWeb(t, app, []byte(cltest.MustJSONMarshal(t, web.CreateJobRequest{TOML: tomlSpec})))`
$DIR/core/internal/features/features_test.go: `.MustJSONMarshal(t, web.CreateJobRequest{TOML: tomlSpec})`
$DIR/core/internal/features/features_test.go: `.AwaitJobActive(t, app.JobSpawner(), j.ID, testutils.WaitTimeout(t))`
$DIR/core/internal/features/features_test.go: `.JobSpawner()`
$DIR/core/internal/features/features_test.go: `.WaitTimeout(t)`
$DIR/core/internal/features/features_test.go: `.CreateJobRunViaUser(t, app, j.ExternalJobID, "")`
$DIR/core/internal/features/features_test.go: `.WaitForLogMessage(t, o, "Sending transaction")`
$DIR/core/internal/features/features_test.go: `.Commit()`
$DIR/core/internal/features/features_test.go: `.Commit()`
$DIR/core/internal/features/features_test.go: `.Commit()`
$DIR/core/internal/features/features_test.go: `.WaitForLogMessage(t, o, "Resume run success")`
$DIR/core/internal/features/features_test.go: `.WaitForPipelineError(t, 0, j.ID, 1, 1, app.JobORM(), testutils.WaitTimeout(t), time.Second)`
$DIR/core/internal/features/features_test.go: `.JobORM()`
$DIR/core/internal/features/features_test.go: `.WaitTimeout(t)`
$DIR/core/internal/features/features_test.go: `.Sprintf(tomlSpec, operatorContracts.linkTokenAddress.String(), revertingData, testutils.SimulatedChainID.String(), sendingAddr)`
$DIR/core/internal/features/features_test.go: `.linkTokenAddress.String()`
$DIR/core/internal/features/features_test.go: `.SimulatedChainID.String()`
$DIR/core/internal/features/features_test.go: `.CreateJobViaWeb(t, app, []byte(cltest.MustJSONMarshal(t, web.CreateJobRequest{TOML: tomlSpec})))`
$DIR/core/internal/features/features_test.go: `.MustJSONMarshal(t, web.CreateJobRequest{TOML: tomlSpec})`
$DIR/core/internal/features/features_test.go: `.AwaitJobActive(t, app.JobSpawner(), j.ID, testutils.WaitTimeout(t))`
$DIR/core/internal/features/features_test.go: `.JobSpawner()`
$DIR/core/internal/features/features_test.go: `.WaitTimeout(t)`
$DIR/core/internal/features/features_test.go: `.CreateJobRunViaUser(t, app, j.ExternalJobID, "")`
$DIR/core/internal/features/features_test.go: `.WaitForLogMessage(t, o, "Sending transaction")`
$DIR/core/internal/features/features_test.go: `.Commit()`
$DIR/core/internal/features/features_test.go: `.Commit()`
$DIR/core/internal/features/features_test.go: `.Commit()`
$DIR/core/internal/features/features_test.go: `.WaitForLogMessage(t, o, "Resume run success")`
$DIR/core/internal/features/features_test.go: `.WaitForPipelineComplete(t, 0, j.ID, 1, 1, app.JobORM(), testutils.WaitTimeout(t), time.Second)`
$DIR/core/internal/features/features_test.go: `.JobORM()`
$DIR/core/internal/features/features_test.go: `.WaitTimeout(t)`
$DIR/core/internal/features/features_test.go: `.SkipShort(t, "long test")`
$DIR/core/internal/features/features_test.go: `.Run(test.name, func(t *testing.T) {
t.Parallel()
bootstrapNodePortV2 := freeport.GetOne(t)
g := gomega.NewWithT(t)
owner, b, ocrContractAddress, ocrContract, flagsContract, flagsContractAddress := setupOCRContracts(t)
// Note it's plausible these ports could be occupied on a CI machine.
// May need a port randomize + retry approach if we observe collisions.
appBootstrap, bootstrapPeerID, _, _ := setupNode(t, owner, bootstrapNodePortV2, b, nil)
var (
oracles []confighelper.OracleIdentityExtra
transmitters []common.Address
keys []ocrkey.KeyV2
apps []*cltest.TestApplication
)
ports := freeport.GetN(t, numOracles)
for i := 0; i < numOracles; i++ {
app, peerID, transmitter, key := setupNode(t, owner, ports[i], b, func(c *chainlink.Config, s *chainlink.Secrets) {
c.EVM[0].FlagsContractAddress = ptr(evmtypes.EIP55AddressFromAddress(flagsContractAddress))
c.EVM[0].GasEstimator.EIP1559DynamicFees = ptr(test.eip1559)
c.P2P.V2.DefaultBootstrappers = &[]ocrcommontypes.BootstrapperLocator{
{PeerID: bootstrapPeerID, Addrs: []string{fmt.Sprintf("127.0.0.1:%d", bootstrapNodePortV2)}},
}
})
keys = append(keys, key)
apps = append(apps, app)
transmitters = append(transmitters, transmitter)
oracles = append(oracles, confighelper.OracleIdentityExtra{
OracleIdentity: confighelper.OracleIdentity{
OnChainSigningAddress: ocrtypes.OnChainSigningAddress(key.OnChainSigning.Address()),
TransmitAddress: transmitter,
OffchainPublicKey: key.PublicKeyOffChain(),
PeerID: peerID,
},
SharedSecretEncryptionPublicKey: key.PublicKeyConfig(),
})
}
stopBlocks := utils.FiniteTicker(time.Second, func() {
b.Commit()
})
defer stopBlocks()
_, err := ocrContract.SetPayees(owner,
transmitters,
transmitters,
)
require.NoError(t, err)
signers, transmitters, threshold, encodedConfigVersion, encodedConfig, err := confighelper.ContractSetConfigArgsForIntegrationTest(
oracles,
1,
1000000000/100, // threshold PPB
)
require.NoError(t, err)
_, err = ocrContract.SetConfig(owner,
signers,
transmitters,
threshold,
encodedConfigVersion,
encodedConfig,
)
require.NoError(t, err)
b.Commit()
err = appBootstrap.Start(testutils.Context(t))
require.NoError(t, err)
jb, err := ocr.ValidatedOracleSpecToml(appBootstrap.Config, appBootstrap.GetRelayers().LegacyEVMChains(), fmt.Sprintf(`
type = "offchainreporting"
schemaVersion = 1
name = "boot"
contractAddress = "%s"
evmChainID = "%s"
isBootstrapPeer = true
`, ocrContractAddress, testutils.SimulatedChainID.String()))
require.NoError(t, err)
jb.Name = null.NewString("boot", true)
err = appBootstrap.AddJobV2(testutils.Context(t), &jb)
require.NoError(t, err)
// Raising flags to initiate hibernation
_, err = flagsContract.RaiseFlag(owner, ocrContractAddress)
require.NoError(t, err, "failed to raise flag for ocrContractAddress")
_, err = flagsContract.RaiseFlag(owner, evmutils.ZeroAddress)
require.NoError(t, err, "failed to raise flag for ZeroAddress")
b.Commit()
var jids []int32
var servers, slowServers = make([]*httptest.Server, 4), make([]*httptest.Server, 4)
// We expect metadata of:
// latestAnswer:nil // First call
// latestAnswer:0
// latestAnswer:10
// latestAnswer:20
// latestAnswer:30
var metaLock sync.Mutex
expectedMeta := map[string]struct{}{
"0": {}, "10": {}, "20": {}, "30": {},
}
for i := 0; i < numOracles; i++ {
err = apps[i].Start(testutils.Context(t))
require.NoError(t, err)
// Since this API speed is > ObservationTimeout we should ignore it and still produce values.
slowServers[i] = httptest.NewServer(http.HandlerFunc(func(res http.ResponseWriter, req *http.Request) {
time.Sleep(5 * time.Second)
res.WriteHeader(http.StatusOK)
_, err := res.Write([]byte(`{"data":10}`))
require.NoError(t, err)
}))
t.Cleanup(slowServers[i].Close)
servers[i] = httptest.NewServer(http.HandlerFunc(func(res http.ResponseWriter, req *http.Request) {
b, err := io.ReadAll(req.Body)
require.NoError(t, err)
var m bridges.BridgeMetaDataJSON
require.NoError(t, json.Unmarshal(b, &m))
if m.Meta.LatestAnswer != nil && m.Meta.UpdatedAt != nil {
metaLock.Lock()
delete(expectedMeta, m.Meta.LatestAnswer.String())
metaLock.Unlock()
}
res.WriteHeader(http.StatusOK)
_, err = res.Write([]byte(`{"data":10}`))
require.NoError(t, err)
}))
t.Cleanup(servers[i].Close)
u, _ := url.Parse(servers[i].URL)
err := apps[i].BridgeORM().CreateBridgeType(testutils.Context(t), &bridges.BridgeType{
Name: bridges.BridgeName(fmt.Sprintf("bridge%d", i)),
URL: models.WebURL(*u),
})
require.NoError(t, err)
// Note we need: observationTimeout + observationGracePeriod + DeltaGrace (500ms) < DeltaRound (1s)
// So 200ms + 200ms + 500ms < 1s
jb, err := ocr.ValidatedOracleSpecToml(apps[i].Config, apps[i].GetRelayers().LegacyEVMChains(), fmt.Sprintf(`
type = "offchainreporting"
schemaVersion = 1
name = "web oracle spec"
contractAddress = "%s"
evmChainID = "%s"
isBootstrapPeer = false
keyBundleID = "%s"
transmitterAddress = "%s"
observationTimeout = "100ms"
contractConfigConfirmations = 1
contractConfigTrackerPollInterval = "1s"
observationSource = """
// data source 1
ds1 [type=bridge name="%s"];
ds1_parse [type=jsonparse path="data"];
ds1_multiply [type=multiply times=%d];
// data source 2
ds2 [type=http method=GET url="%s"];
ds2_parse [type=jsonparse path="data"];
ds2_multiply [type=multiply times=%d];
ds1 -> ds1_parse -> ds1_multiply -> answer1;
ds2 -> ds2_parse -> ds2_multiply -> answer1;
answer1 [type=median index=0];
"""
`, ocrContractAddress, testutils.SimulatedChainID.String(), keys[i].ID(), transmitters[i], fmt.Sprintf("bridge%d", i), i, slowServers[i].URL, i))
require.NoError(t, err)
jb.Name = null.NewString("testocr", true)
err = apps[i].AddJobV2(testutils.Context(t), &jb)
require.NoError(t, err)
jids = append(jids, jb.ID)
}
// Assert that all the OCR jobs get a run with valid values eventually.
for i := 0; i < numOracles; i++ {
// Want at least 2 runs so we see all the metadata.
pr := cltest.WaitForPipelineComplete(t, i, jids[i],
2, 7, apps[i].JobORM(), time.Minute, time.Second)
jb, err := pr[0].Outputs.MarshalJSON()
require.NoError(t, err)
assert.Equal(t, []byte(fmt.Sprintf("[\"%d\"]", 10*i)), jb, "pr[0] %+v pr[1] %+v", pr[0], pr[1])
require.NoError(t, err)
}
// 4 oracles reporting 0, 10, 20, 30. Answer should be 20 (results[4/2]).
g.Eventually(func() string {
answer, err := ocrContract.LatestAnswer(nil)
require.NoError(t, err)
return answer.String()
}, testutils.WaitTimeout(t), cltest.DBPollingInterval).Should(gomega.Equal("20"))
ctx := testutils.Context(t)
for _, app := range apps {
jobs, _, err := app.JobORM().FindJobs(ctx, 0, 1000)
require.NoError(t, err)
// No spec errors
for _, j := range jobs {
ignore := 0
for i := range j.JobSpecErrors {
// Non-fatal timing related error, ignore for testing.
if strings.Contains(j.JobSpecErrors[i].Description, "leader's phase conflicts tGrace timeout") {
ignore++
}
}
require.Len(t, j.JobSpecErrors, ignore)
}
}
metaLock.Lock()
defer metaLock.Unlock()
assert.Len(t, expectedMeta, 0, "expected metadata %v", expectedMeta)
})`
$DIR/core/internal/features/features_test.go: `.GetOne(t)`
$DIR/core/internal/features/features_test.go: `.NewWithT(t)`
$DIR/core/internal/features/features_test.go: `.GetN(t, numOracles)`
$DIR/core/internal/features/features_test.go: `.EIP55AddressFromAddress(flagsContractAddress)`
$DIR/core/internal/features/features_test.go: `.Sprintf("127.0.0.1:%d", bootstrapNodePortV2)`
$DIR/core/internal/features/features_test.go: `.OnChainSigningAddress(key.OnChainSigning.Address())`
$DIR/core/internal/features/features_test.go: `.OnChainSigning.Address()`
$DIR/core/internal/features/features_test.go: `.PublicKeyOffChain()`
$DIR/core/internal/features/features_test.go: `.PublicKeyConfig()`
$DIR/core/internal/features/features_test.go: `.FiniteTicker(time.Second, func() {
b.Commit()
})`
$DIR/core/internal/features/features_test.go: `.Commit()`
$DIR/core/internal/features/features_test.go: `.SetPayees(owner,
transmitters,
transmitters,
)`
$DIR/core/internal/features/features_test.go: `.ContractSetConfigArgsForIntegrationTest(
oracles,
1,
1000000000/100, // threshold PPB
)`
$DIR/core/internal/features/features_test.go: `.SetConfig(owner,
signers,
transmitters,
threshold,
encodedConfigVersion,
encodedConfig,
)`
$DIR/core/internal/features/features_test.go: `.Commit()`
$DIR/core/internal/features/features_test.go: `.Start(testutils.Context(t))`
$DIR/core/internal/features/features_test.go: `.Context(t)`
$DIR/core/internal/features/features_test.go: `.ValidatedOracleSpecToml(appBootstrap.Config, appBootstrap.GetRelayers().LegacyEVMChains(), fmt.Sprintf(`
type = "offchainreporting"
schemaVersion = 1
name = "boot"
contractAddress = "%s"
evmChainID = "%s"
isBootstrapPeer = true
`, ocrContractAddress, testutils.SimulatedChainID.String()))`
$DIR/core/internal/features/features_test.go: `.GetRelayers()`
$DIR/core/internal/features/features_test.go: `.LegacyEVMChains()`
$DIR/core/internal/features/features_test.go: `.Sprintf(`
type = "offchainreporting"
schemaVersion = 1
name = "boot"
contractAddress = "%s"
evmChainID = "%s"
isBootstrapPeer = true
`, ocrContractAddress, testutils.SimulatedChainID.String())`
$DIR/core/internal/features/features_test.go: `.SimulatedChainID.String()`
$DIR/core/internal/features/features_test.go: `.NewString("boot", true)`
$DIR/core/internal/features/features_test.go: `.AddJobV2(testutils.Context(t), &jb)`
$DIR/core/internal/features/features_test.go: `.Context(t)`
$DIR/core/internal/features/features_test.go: `.RaiseFlag(owner, ocrContractAddress)`
$DIR/core/internal/features/features_test.go: `.RaiseFlag(owner, evmutils.ZeroAddress)`
$DIR/core/internal/features/features_test.go: `.Commit()`
$DIR/core/internal/features/features_test.go: `.Start(testutils.Context(t))`
$DIR/core/internal/features/features_test.go: `.Context(t)`
$DIR/core/internal/features/features_test.go: `.NewServer(http.HandlerFunc(func(res http.ResponseWriter, req *http.Request) {
time.Sleep(5 * time.Second)
res.WriteHeader(http.StatusOK)
_, err := res.Write([]byte(`{"data":10}`))
require.NoError(t, err)
}))`
$DIR/core/internal/features/features_test.go: `.HandlerFunc(func(res http.ResponseWriter, req *http.Request) {
time.Sleep(5 * time.Second)
res.WriteHeader(http.StatusOK)
_, err := res.Write([]byte(`{"data":10}`))
require.NoError(t, err)
})`
$DIR/core/internal/features/features_test.go: `.Sleep(5 * time.Second)`
$DIR/core/internal/features/features_test.go: `.WriteHeader(http.StatusOK)`
$DIR/core/internal/features/features_test.go: `.Write([]byte(`{"data":10}`))`
$DIR/core/internal/features/features_test.go: `.Cleanup(slowServers[i].Close)`
$DIR/core/internal/features/features_test.go: `.NewServer(http.HandlerFunc(func(res http.ResponseWriter, req *http.Request) {
b, err := io.ReadAll(req.Body)
require.NoError(t, err)
var m bridges.BridgeMetaDataJSON
require.NoError(t, json.Unmarshal(b, &m))
if m.Meta.LatestAnswer != nil && m.Meta.UpdatedAt != nil {
metaLock.Lock()
delete(expectedMeta, m.Meta.LatestAnswer.String())
metaLock.Unlock()
}
res.WriteHeader(http.StatusOK)
_, err = res.Write([]byte(`{"data":10}`))
require.NoError(t, err)
}))`
$DIR/core/internal/features/features_test.go: `.HandlerFunc(func(res http.ResponseWriter, req *http.Request) {
b, err := io.ReadAll(req.Body)
require.NoError(t, err)
var m bridges.BridgeMetaDataJSON
require.NoError(t, json.Unmarshal(b, &m))
if m.Meta.LatestAnswer != nil && m.Meta.UpdatedAt != nil {
metaLock.Lock()
delete(expectedMeta, m.Meta.LatestAnswer.String())
metaLock.Unlock()
}
res.WriteHeader(http.StatusOK)
_, err = res.Write([]byte(`{"data":10}`))
require.NoError(t, err)
})`
$DIR/core/internal/features/features_test.go: `.ReadAll(req.Body)`
$DIR/core/internal/features/features_test.go: `.Lock()`
$DIR/core/internal/features/features_test.go: `.Meta.LatestAnswer.String()`
$DIR/core/internal/features/features_test.go: `.Unlock()`
$DIR/core/internal/features/features_test.go: `.WriteHeader(http.StatusOK)`
$DIR/core/internal/features/features_test.go: `.Write([]byte(`{"data":10}`))`
$DIR/core/internal/features/features_test.go: `.Cleanup(servers[i].Close)`
$DIR/core/internal/features/features_test.go: `.Parse(servers[i].URL)`
$DIR/core/internal/features/features_test.go: `.BridgeORM()`
$DIR/core/internal/features/features_test.go: `.CreateBridgeType(testutils.Context(t), &bridges.BridgeType{
Name: bridges.BridgeName(fmt.Sprintf("bridge%d", i)),
URL: models.WebURL(*u),
})`
$DIR/core/internal/features/features_test.go: `.Context(t)`
$DIR/core/internal/features/features_test.go: `.BridgeName(fmt.Sprintf("bridge%d", i))`
$DIR/core/internal/features/features_test.go: `.Sprintf("bridge%d", i)`
$DIR/core/internal/features/features_test.go: `.WebURL(*u)`
$DIR/core/internal/features/features_test.go: `.ValidatedOracleSpecToml(apps[i].Config, apps[i].GetRelayers().LegacyEVMChains(), fmt.Sprintf(`
type = "offchainreporting"
schemaVersion = 1
name = "web oracle spec"
contractAddress = "%s"
evmChainID = "%s"
isBootstrapPeer = false
keyBundleID = "%s"
transmitterAddress = "%s"
observationTimeout = "100ms"
contractConfigConfirmations = 1
contractConfigTrackerPollInterval = "1s"
observationSource = """
// data source 1
ds1 [type=bridge name="%s"];
ds1_parse [type=jsonparse path="data"];
ds1_multiply [type=multiply times=%d];
// data source 2
ds2 [type=http method=GET url="%s"];
ds2_parse [type=jsonparse path="data"];
ds2_multiply [type=multiply times=%d];
ds1 -> ds1_parse -> ds1_multiply -> answer1;
ds2 -> ds2_parse -> ds2_multiply -> answer1;
answer1 [type=median index=0];
"""
`, ocrContractAddress, testutils.SimulatedChainID.String(), keys[i].ID(), transmitters[i], fmt.Sprintf("bridge%d", i), i, slowServers[i].URL, i))`
$DIR/core/internal/features/features_test.go: `.GetRelayers()`
$DIR/core/internal/features/features_test.go: `.LegacyEVMChains()`
$DIR/core/internal/features/features_test.go: `.Sprintf(`
type = "offchainreporting"
schemaVersion = 1
name = "web oracle spec"
contractAddress = "%s"
evmChainID = "%s"
isBootstrapPeer = false
keyBundleID = "%s"
transmitterAddress = "%s"
observationTimeout = "100ms"
contractConfigConfirmations = 1
contractConfigTrackerPollInterval = "1s"
observationSource = """
// data source 1
ds1 [type=bridge name="%s"];
ds1_parse [type=jsonparse path="data"];
ds1_multiply [type=multiply times=%d];
// data source 2
ds2 [type=http method=GET url="%s"];
ds2_parse [type=jsonparse path="data"];
ds2_multiply [type=multiply times=%d];
ds1 -> ds1_parse -> ds1_multiply -> answer1;
ds2 -> ds2_parse -> ds2_multiply -> answer1;
answer1 [type=median index=0];
"""
`, ocrContractAddress, testutils.SimulatedChainID.String(), keys[i].ID(), transmitters[i], fmt.Sprintf("bridge%d", i), i, slowServers[i].URL, i)`
$DIR/core/internal/features/features_test.go: `.SimulatedChainID.String()`
$DIR/core/internal/features/features_test.go: `.ID()`
$DIR/core/internal/features/features_test.go: `.Sprintf("bridge%d", i)`
$DIR/core/internal/features/features_test.go: `.NewString("testocr", true)`
$DIR/core/internal/features/features_test.go: `.AddJobV2(testutils.Context(t), &jb)`
$DIR/core/internal/features/features_test.go: `.Context(t)`
$DIR/core/internal/features/features_test.go: `.WaitForPipelineComplete(t, i, jids[i],
2, 7, apps[i].JobORM(), time.Minute, time.Second)`
$DIR/core/internal/features/features_test.go: `.JobORM()`
$DIR/core/internal/features/features_test.go: `.Outputs.MarshalJSON()`
$DIR/core/internal/features/features_test.go: `.Eventually(func() string {
answer, err := ocrContract.LatestAnswer(nil)
require.NoError(t, err)
return answer.String()
}, testutils.WaitTimeout(t), cltest.DBPollingInterval)`
$DIR/core/internal/features/features_test.go: `.LatestAnswer(nil)`
$DIR/core/internal/features/features_test.go: `.String()`
$DIR/core/internal/features/features_test.go: `.WaitTimeout(t)`
$DIR/core/internal/features/features_test.go: `.Should(gomega.Equal("20"))`
$DIR/core/internal/features/features_test.go: `.Equal("20")`
$DIR/core/internal/features/features_test.go: `.Context(t)`
$DIR/core/internal/features/features_test.go: `.JobORM()`
$DIR/core/internal/features/features_test.go: `.FindJobs(ctx, 0, 1000)`
$DIR/core/internal/features/features_test.go: `.Contains(j.JobSpecErrors[i].Description, "leader's phase conflicts tGrace timeout")`
$DIR/core/internal/features/features_test.go: `.Lock()`
$DIR/core/internal/features/features_test.go: `.Unlock()`
$DIR/core/internal/features/features_test.go: `.SkipShort(t, "long test")`
$DIR/core/internal/features/features_test.go: `.GetOne(t)`
$DIR/core/internal/features/features_test.go: `.NewWithT(t)`
$DIR/core/internal/features/features_test.go: `.GetN(t, numOracles)`
$DIR/core/internal/features/features_test.go: `.EIP55AddressFromAddress(flagsContractAddress)`
$DIR/core/internal/features/features_test.go: `.Sprintf("127.0.0.1:%d", bootstrapNodePortV2)`
$DIR/core/internal/features/features_test.go: `.OnChainSigningAddress(key.OnChainSigning.Address())`
$DIR/core/internal/features/features_test.go: `.OnChainSigning.Address()`
$DIR/core/internal/features/features_test.go: `.PublicKeyOffChain()`
$DIR/core/internal/features/features_test.go: `.PublicKeyConfig()`
$DIR/core/internal/features/features_test.go: `.FiniteTicker(time.Second, func() {
b.Commit()
})`
$DIR/core/internal/features/features_test.go: `.Commit()`
$DIR/core/internal/features/features_test.go: `.SetPayees(owner,
forwardersContracts,
transmitters,
)`
$DIR/core/internal/features/features_test.go: `.Commit()`
$DIR/core/internal/features/features_test.go: `.ContractSetConfigArgsForIntegrationTest(
oracles,
1,
1000000000/100, // threshold PPB
)`
$DIR/core/internal/features/features_test.go: `.SetConfig(owner,
signers,
effectiveTransmitters, // forwarder Addresses
threshold,
encodedConfigVersion,
encodedConfig,
)`
$DIR/core/internal/features/features_test.go: `.Commit()`
$DIR/core/internal/features/features_test.go: `.Start(testutils.Context(t))`
$DIR/core/internal/features/features_test.go: `.Context(t)`
$DIR/core/internal/features/features_test.go: `.ValidatedOracleSpecToml(appBootstrap.Config, appBootstrap.GetRelayers().LegacyEVMChains(), fmt.Sprintf(`
type = "offchainreporting"
schemaVersion = 1
name = "boot"
contractAddress = "%s"
evmChainID = "%s"
forwardingAllowed = true
isBootstrapPeer = true
`, ocrContractAddress, testutils.SimulatedChainID.String()))`
$DIR/core/internal/features/features_test.go: `.GetRelayers()`
$DIR/core/internal/features/features_test.go: `.LegacyEVMChains()`
$DIR/core/internal/features/features_test.go: `.Sprintf(`
type = "offchainreporting"
schemaVersion = 1
name = "boot"
contractAddress = "%s"
evmChainID = "%s"
forwardingAllowed = true
isBootstrapPeer = true
`, ocrContractAddress, testutils.SimulatedChainID.String())`
$DIR/core/internal/features/features_test.go: `.SimulatedChainID.String()`
$DIR/core/internal/features/features_test.go: `.NewString("boot", true)`
$DIR/core/internal/features/features_test.go: `.AddJobV2(testutils.Context(t), &jb)`
$DIR/core/internal/features/features_test.go: `.Context(t)`
$DIR/core/internal/features/features_test.go: `.RaiseFlag(owner, ocrContractAddress)`
$DIR/core/internal/features/features_test.go: `.RaiseFlag(owner, evmutils.ZeroAddress)`
$DIR/core/internal/features/features_test.go: `.Commit()`
$DIR/core/internal/features/features_test.go: `.Start(testutils.Context(t))`
$DIR/core/internal/features/features_test.go: `.Context(t)`
$DIR/core/internal/features/features_test.go: `.NewServer(http.HandlerFunc(func(res http.ResponseWriter, req *http.Request) {
time.Sleep(5 * time.Second)
res.WriteHeader(http.StatusOK)
_, err := res.Write([]byte(`{"data":10}`))
require.NoError(t, err)
}))`
$DIR/core/internal/features/features_test.go: `.HandlerFunc(func(res http.ResponseWriter, req *http.Request) {
time.Sleep(5 * time.Second)
res.WriteHeader(http.StatusOK)
_, err := res.Write([]byte(`{"data":10}`))
require.NoError(t, err)
})`
$DIR/core/internal/features/features_test.go: `.Sleep(5 * time.Second)`
$DIR/core/internal/features/features_test.go: `.WriteHeader(http.StatusOK)`
$DIR/core/internal/features/features_test.go: `.Write([]byte(`{"data":10}`))`
$DIR/core/internal/features/features_test.go: `.Cleanup(slowServers[i].Close)`
$DIR/core/internal/features/features_test.go: `.NewServer(http.HandlerFunc(func(res http.ResponseWriter, req *http.Request) {
b, err := io.ReadAll(req.Body)
require.NoError(t, err)
var m bridges.BridgeMetaDataJSON
require.NoError(t, json.Unmarshal(b, &m))
if m.Meta.LatestAnswer != nil && m.Meta.UpdatedAt != nil {
metaLock.Lock()
delete(expectedMeta, m.Meta.LatestAnswer.String())
metaLock.Unlock()
}
res.WriteHeader(http.StatusOK)
_, err = res.Write([]byte(`{"data":10}`))
require.NoError(t, err)
}))`
$DIR/core/internal/features/features_test.go: `.HandlerFunc(func(res http.ResponseWriter, req *http.Request) {
b, err := io.ReadAll(req.Body)
require.NoError(t, err)
var m bridges.BridgeMetaDataJSON
require.NoError(t, json.Unmarshal(b, &m))
if m.Meta.LatestAnswer != nil && m.Meta.UpdatedAt != nil {
metaLock.Lock()
delete(expectedMeta, m.Meta.LatestAnswer.String())
metaLock.Unlock()
}
res.WriteHeader(http.StatusOK)
_, err = res.Write([]byte(`{"data":10}`))
require.NoError(t, err)
})`
$DIR/core/internal/features/features_test.go: `.ReadAll(req.Body)`
$DIR/core/internal/features/features_test.go: `.Lock()`
$DIR/core/internal/features/features_test.go: `.Meta.LatestAnswer.String()`
$DIR/core/internal/features/features_test.go: `.Unlock()`
$DIR/core/internal/features/features_test.go: `.WriteHeader(http.StatusOK)`
$DIR/core/internal/features/features_test.go: `.Write([]byte(`{"data":10}`))`
$DIR/core/internal/features/features_test.go: `.Cleanup(servers[i].Close)`
$DIR/core/internal/features/features_test.go: `.Parse(servers[i].URL)`
$DIR/core/internal/features/features_test.go: `.BridgeORM()`
$DIR/core/internal/features/features_test.go: `.CreateBridgeType(testutils.Context(t), &bridges.BridgeType{
Name: bridges.BridgeName(fmt.Sprintf("bridge%d", i)),
URL: models.WebURL(*u),
})`
$DIR/core/internal/features/features_test.go: `.Context(t)`
$DIR/core/internal/features/features_test.go: `.BridgeName(fmt.Sprintf("bridge%d", i))`
$DIR/core/internal/features/features_test.go: `.Sprintf("bridge%d", i)`
$DIR/core/internal/features/features_test.go: `.WebURL(*u)`
$DIR/core/internal/features/features_test.go: `.ValidatedOracleSpecToml(apps[i].Config, apps[i].GetRelayers().LegacyEVMChains(), fmt.Sprintf(`
type = "offchainreporting"
schemaVersion = 1
name = "web oracle spec"
contractAddress = "%s"
evmChainID = "%s"
forwardingAllowed = true
isBootstrapPeer = false
keyBundleID = "%s"
transmitterAddress = "%s"
observationTimeout = "100ms"
contractConfigConfirmations = 1
contractConfigTrackerPollInterval = "1s"
observationSource = """
// data source 1
ds1 [type=bridge name="%s"];
ds1_parse [type=jsonparse path="data"];
ds1_multiply [type=multiply times=%d];
// data source 2
ds2 [type=http method=GET url="%s"];
ds2_parse [type=jsonparse path="data"];
ds2_multiply [type=multiply times=%d];
ds1 -> ds1_parse -> ds1_multiply -> answer1;
ds2 -> ds2_parse -> ds2_multiply -> answer1;
answer1 [type=median index=0];
"""
`, ocrContractAddress, testutils.SimulatedChainID.String(), keys[i].ID(), transmitters[i], fmt.Sprintf("bridge%d", i), i, slowServers[i].URL, i))`
$DIR/core/internal/features/features_test.go: `.GetRelayers()`
$DIR/core/internal/features/features_test.go: `.LegacyEVMChains()`
$DIR/core/internal/features/features_test.go: `.Sprintf(`
type = "offchainreporting"
schemaVersion = 1
name = "web oracle spec"
contractAddress = "%s"
evmChainID = "%s"
forwardingAllowed = true
isBootstrapPeer = false
keyBundleID = "%s"
transmitterAddress = "%s"
observationTimeout = "100ms"
contractConfigConfirmations = 1
contractConfigTrackerPollInterval = "1s"
observationSource = """
// data source 1
ds1 [type=bridge name="%s"];
ds1_parse [type=jsonparse path="data"];
ds1_multiply [type=multiply times=%d];
// data source 2
ds2 [type=http method=GET url="%s"];
ds2_parse [type=jsonparse path="data"];
ds2_multiply [type=multiply times=%d];
ds1 -> ds1_parse -> ds1_multiply -> answer1;
ds2 -> ds2_parse -> ds2_multiply -> answer1;
answer1 [type=median index=0];
"""
`, ocrContractAddress, testutils.SimulatedChainID.String(), keys[i].ID(), transmitters[i], fmt.Sprintf("bridge%d", i), i, slowServers[i].URL, i)`
$DIR/core/internal/features/features_test.go: `.SimulatedChainID.String()`
$DIR/core/internal/features/features_test.go: `.ID()`
$DIR/core/internal/features/features_test.go: `.Sprintf("bridge%d", i)`
$DIR/core/internal/features/features_test.go: `.NewString("testocr", true)`
$DIR/core/internal/features/features_test.go: `.AddJobV2(testutils.Context(t), &jb)`
$DIR/core/internal/features/features_test.go: `.Context(t)`
$DIR/core/internal/features/features_test.go: `.WaitForPipelineComplete(t, i, jids[i],
2, 7, apps[i].JobORM(), time.Minute, time.Second)`
$DIR/core/internal/features/features_test.go: `.JobORM()`
$DIR/core/internal/features/features_test.go: `.Outputs.MarshalJSON()`
$DIR/core/internal/features/features_test.go: `.Eventually(func() string {
answer, err := ocrContract.LatestAnswer(nil)
require.NoError(t, err)
return answer.String()
}, testutils.WaitTimeout(t), cltest.DBPollingInterval)`
$DIR/core/internal/features/features_test.go: `.LatestAnswer(nil)`
$DIR/core/internal/features/features_test.go: `.String()`
$DIR/core/internal/features/features_test.go: `.WaitTimeout(t)`
$DIR/core/internal/features/features_test.go: `.Should(gomega.Equal("20"))`
$DIR/core/internal/features/features_test.go: `.Equal("20")`
$DIR/core/internal/features/features_test.go: `.Context(t)`
$DIR/core/internal/features/features_test.go: `.JobORM()`
$DIR/core/internal/features/features_test.go: `.FindJobs(ctx, 0, 1000)`
$DIR/core/internal/features/features_test.go: `.Contains(j.JobSpecErrors[i].Description, "leader's phase conflicts tGrace timeout")`
$DIR/core/internal/features/features_test.go: `.Lock()`
$DIR/core/internal/features/features_test.go: `.Unlock()`
$DIR/core/internal/features/features_test.go: `.Context(t)`
$DIR/core/internal/features/features_test.go: `.NewWeiI(10 * initialDefaultGasPrice)`
$DIR/core/internal/features/features_test.go: `.NewGeneralConfig(t, func(c *chainlink.Config, s *chainlink.Secrets) {
c.EVM[0].BalanceMonitor.Enabled = ptr(false)
c.EVM[0].GasEstimator.BlockHistory.CheckInclusionBlocks = ptr[uint16](0)
c.EVM[0].GasEstimator.PriceDefault = assets.NewWeiI(initialDefaultGasPrice)
c.EVM[0].GasEstimator.Mode = ptr("BlockHistory")
c.EVM[0].RPCBlockQueryDelay = ptr[uint16](0)
c.EVM[0].GasEstimator.BlockHistory.BlockHistorySize = ptr[uint16](2)
c.EVM[0].FinalityDepth = ptr[uint32](3)
})`
$DIR/core/internal/features/features_test.go: `.NewWeiI(initialDefaultGasPrice)`
$DIR/core/internal/features/features_test.go: `.NewEthMocks(t)`
$DIR/core/internal/features/features_test.go: `.On("ConfiguredChainID")`
$DIR/core/internal/features/features_test.go: `.Return(big.NewInt(client.NullClientChainID))`
$DIR/core/internal/features/features_test.go: `.NewInt(client.NullClientChainID)`
$DIR/core/internal/features/features_test.go: `.Maybe()`
$DIR/core/internal/features/features_test.go: `.NewSqlxDB(t)`
$DIR/core/internal/features/features_test.go: `.NewKeyStore(t, db)`
$DIR/core/internal/features/features_test.go: `.NewChainRelayExtenders(t, evmtest.TestChainOpts{DB: db, KeyStore: kst.Eth(), Client: ethClient, GeneralConfig: cfg})`
$DIR/core/internal/features/features_test.go: `.Eth()`
$DIR/core/internal/features/features_test.go: `.NewHash()`
$DIR/core/internal/features/features_test.go: `.LegacyTransactionsFromGasPrices(41_000_000_000, 41_500_000_000)`
$DIR/core/internal/features/features_test.go: `.NewHash()`
$DIR/core/internal/features/features_test.go: `.LegacyTransactionsFromGasPrices(44_000_000_000, 45_000_000_000)`
$DIR/core/internal/features/features_test.go: `.NewHash()`
$DIR/core/internal/features/features_test.go: `.LegacyTransactionsFromGasPrices(48_000_000_000, 49_000_000_000, 31_000_000_000)`
$DIR/core/internal/features/features_test.go: `.New(evmtest.MustGetDefaultChainID(t, cfg.EVMConfigs()))`
$DIR/core/internal/features/features_test.go: `.MustGetDefaultChainID(t, cfg.EVMConfigs())`
$DIR/core/internal/features/features_test.go: `.EVMConfigs()`
$DIR/core/internal/features/features_test.go: `.NewHash()`
$DIR/core/internal/features/features_test.go: `.On("SubscribeNewHead", mock.Anything, mock.Anything)`
$DIR/core/internal/features/features_test.go: `.
Return(
func(ctx context.Context, ch chan<- *evmtypes.Head) ethereum.Subscription {
sub := mockEth.NewSub(t)
chchNewHeads <- evmtestutils.NewRawSub(ch, sub.Err())
return sub
},
func(ctx context.Context, ch chan<- *evmtypes.Head) error { return nil },
)`
$DIR/core/internal/features/features_test.go: `.NewSub(t)`
$DIR/core/internal/features/features_test.go: `.NewRawSub(ch, sub.Err())`
$DIR/core/internal/features/features_test.go: `.Err()`
$DIR/core/internal/features/features_test.go: `.On("PendingNonceAt", mock.Anything, mock.Anything)`
$DIR/core/internal/features/features_test.go: `.Maybe()`
$DIR/core/internal/features/features_test.go: `.Return(uint64(0), nil)`
$DIR/core/internal/features/features_test.go: `.On("HeadByNumber", mock.Anything, mock.AnythingOfType("*big.Int"))`
$DIR/core/internal/features/features_test.go: `.AnythingOfType("*big.Int")`
$DIR/core/internal/features/features_test.go: `.Return(&h42, nil)`
$DIR/core/internal/features/features_test.go: `.On("BatchCallContext", mock.Anything, mock.MatchedBy(func(b []rpc.BatchElem) bool {
return len(b) == 2 &&
b[0].Method == "eth_getBlockByNumber" && b[0].Args[0] == "0x2a" &&
b[1].Method == "eth_getBlockByNumber" && b[1].Args[0] == "0x29"
}))`
$DIR/core/internal/features/features_test.go: `.MatchedBy(func(b []rpc.BatchElem) bool {
return len(b) == 2 &&
b[0].Method == "eth_getBlockByNumber" && b[0].Args[0] == "0x2a" &&
b[1].Method == "eth_getBlockByNumber" && b[1].Args[0] == "0x29"
})`
$DIR/core/internal/features/features_test.go: `.Return(nil)`
$DIR/core/internal/features/features_test.go: `.Run(func(args mock.Arguments) {
elems := args.Get(1).([]rpc.BatchElem)
elems[0].Result = &b42
elems[1].Result = &b41
})`
$DIR/core/internal/features/features_test.go: `.Get(1)`
$DIR/core/internal/features/features_test.go: `.On("Dial", mock.Anything)`
$DIR/core/internal/features/features_test.go: `.Return(nil)`
$DIR/core/internal/features/features_test.go: `.On("ConfiguredChainID", mock.Anything)`
$DIR/core/internal/features/features_test.go: `.Return(*evmtest.MustGetDefaultChainID(t, cfg.EVMConfigs()), nil)`
$DIR/core/internal/features/features_test.go: `.MustGetDefaultChainID(t, cfg.EVMConfigs())`
$DIR/core/internal/features/features_test.go: `.EVMConfigs()`
$DIR/core/internal/features/features_test.go: `.On("BalanceAt", mock.Anything, mock.Anything, mock.Anything)`
$DIR/core/internal/features/features_test.go: `.Maybe()`
$DIR/core/internal/features/features_test.go: `.Return(oneETH.ToInt(), nil)`
$DIR/core/internal/features/features_test.go: `.ToInt()`
$DIR/core/internal/features/features_test.go: `.On("HeadByHash", mock.Anything, h40.Hash)`
$DIR/core/internal/features/features_test.go: `.Return(&h40, nil)`
$DIR/core/internal/features/features_test.go: `.Maybe()`
$DIR/core/internal/features/features_test.go: `.On("HeadByHash", mock.Anything, h41.Hash)`
$DIR/core/internal/features/features_test.go: `.Return(&h41, nil)`
$DIR/core/internal/features/features_test.go: `.Maybe()`
$DIR/core/internal/features/features_test.go: `.On("HeadByHash", mock.Anything, h42.Hash)`
$DIR/core/internal/features/features_test.go: `.Return(&h42, nil)`
$DIR/core/internal/features/features_test.go: `.Maybe()`
$DIR/core/internal/features/features_test.go: `.NewLegacyChainsFromRelayerExtenders(cc)`
$DIR/core/internal/features/features_test.go: `.Slice()`
$DIR/core/internal/features/features_test.go: `.Run(t, re)`
$DIR/core/internal/features/features_test.go: `.After(10 * time.Second)`
$DIR/core/internal/features/features_test.go: `.MustGetDefaultChain(t, legacyChains)`
$DIR/core/internal/features/features_test.go: `.GasEstimator()`
$DIR/core/internal/features/features_test.go: `.GetFee(testutils.Context(t), nil, 500_000, maxGasPrice)`
$DIR/core/internal/features/features_test.go: `.Context(t)`
$DIR/core/internal/features/features_test.go: `.On("BatchCallContext", mock.Anything, mock.MatchedBy(func(b []rpc.BatchElem) bool {
return len(b) == 1 && b[0].Method == "eth_getBlockByNumber" && b[0].Args[0] == "0x2b"
}))`
$DIR/core/internal/features/features_test.go: `.MatchedBy(func(b []rpc.BatchElem) bool {
return len(b) == 1 && b[0].Method == "eth_getBlockByNumber" && b[0].Args[0] == "0x2b"
})`
$DIR/core/internal/features/features_test.go: `.Return(nil)`
$DIR/core/internal/features/features_test.go: `.Run(func(args mock.Arguments) {
elems := args.Get(1).([]rpc.BatchElem)
elems[0].Result = &b43
})`
$DIR/core/internal/features/features_test.go: `.Get(1)`
$DIR/core/internal/features/features_test.go: `.On("Close")`
$DIR/core/internal/features/features_test.go: `.Return()`
$DIR/core/internal/features/features_test.go: `.Once()`
$DIR/core/internal/features/features_test.go: `.Head(43)`
$DIR/core/internal/features/features_test.go: `.TrySend(h43)`
$DIR/core/internal/features/features_test.go: `.NewWithT(t)`
$DIR/core/internal/features/features_test.go: `.Eventually(func() string {
gasPrice, _, err := estimator.GetFee(testutils.Context(t), nil, 500000, maxGasPrice)
require.NoError(t, err)
return gasPrice.Legacy.String()
}, testutils.WaitTimeout(t), cltest.DBPollingInterval)`
$DIR/core/internal/features/features_test.go: `.GetFee(testutils.Context(t), nil, 500000, maxGasPrice)`
$DIR/core/internal/features/features_test.go: `.Context(t)`
$DIR/core/internal/features/features_test.go: `.Legacy.String()`
$DIR/core/internal/features/features_test.go: `.WaitTimeout(t)`
$DIR/core/internal/features/features_test.go: `.Equal("45 gwei")`
$DIR/core/internal/features/ocr2/features_ocr2_plugin_test.go: `t.Setenv(string(env.MedianPlugin.Cmd), "chainlink-feeds")`
$DIR/core/internal/features/ocr2/features_ocr2_plugin_test.go: `.Setenv(string(env.MedianPlugin.Cmd), "chainlink-feeds")`
$DIR/core/internal/features/ocr2/features_ocr2_test.go: `kbs = append(kbs, node.keybundle)`
$DIR/core/internal/features/ocr2/features_ocr2_test.go: `apps = append(apps, node.app)`
$DIR/core/internal/features/ocr2/features_ocr2_test.go: `forwarderContracts = append(forwarderContracts, node.effectiveTransmitter)`
$DIR/core/internal/features/ocr2/features_ocr2_test.go: `transmitters = append(transmitters, node.transmitter)`
$DIR/core/internal/features/ocr2/features_ocr2_test.go: `oracles = append(oracles, confighelper2.OracleIdentityExtra{
OracleIdentity: confighelper2.OracleIdentity{
OnchainPublicKey: node.keybundle.PublicKey(),
TransmitAccount: ocrtypes2.Account(node.effectiveTransmitter.String()),
OffchainPublicKey: node.keybundle.OffchainPublicKey(),
PeerID: node.peerID,
},
ConfigEncryptionPublicKey: node.keybundle.ConfigEncryptionPublicKey(),
})`
$DIR/core/internal/features/ocr2/features_ocr2_test.go: `b.Commit()`
$DIR/core/internal/features/ocr2/features_ocr2_test.go: `time.Sleep(5 * time.Second)`
$DIR/core/internal/features/ocr2/features_ocr2_test.go: `res.WriteHeader(http.StatusOK)`
$DIR/core/internal/features/ocr2/features_ocr2_test.go: `t.Cleanup(func() {
slowServers[s].Close()
})`
$DIR/core/internal/features/ocr2/features_ocr2_test.go: `metaLock.Lock()`
$DIR/core/internal/features/ocr2/features_ocr2_test.go: `delete(expectedMeta, m.Meta.LatestAnswer.String())`
$DIR/core/internal/features/ocr2/features_ocr2_test.go: `metaLock.Unlock()`
$DIR/core/internal/features/ocr2/features_ocr2_test.go: `res.WriteHeader(http.StatusOK)`
$DIR/core/internal/features/ocr2/features_ocr2_test.go: `_, err = res.Write([]byte(`{"data":10}`))`
$DIR/core/internal/features/ocr2/features_ocr2_test.go: `t.Cleanup(func() {
servers[s].Close()
})`
$DIR/core/internal/features/ocr2/features_ocr2_test.go: `err = apps[i].AddJobV2(testutils.Context(t), &ocrJob)`
$DIR/core/internal/features/ocr2/features_ocr2_test.go: `jids = append(jids, ocrJob.ID)`
$DIR/core/internal/features/ocr2/features_ocr2_test.go: `wg.Add(1)`
$DIR/core/internal/features/ocr2/features_ocr2_test.go: `wg.Wait()`
$DIR/core/internal/features/ocr2/features_ocr2_test.go: `gomega.NewGomegaWithT(t).Eventually(func() string {
answer, err := ocrContract.LatestAnswer(nil)
require.NoError(t, err)
return answer.String()
}, 1*time.Minute, 200*time.Millisecond).Should(gomega.Equal("20"))`
$DIR/core/internal/features/ocr2/features_ocr2_test.go: `ignore++`
$DIR/core/internal/features/ocr2/features_ocr2_test.go: `metaLock.Lock()`
$DIR/core/internal/features/ocr2/features_ocr2_test.go: `maps.Copy(em, expectedMeta)`
$DIR/core/internal/features/ocr2/features_ocr2_test.go: `metaLock.Unlock()`
$DIR/core/internal/features/ocr2/features_ocr2_test.go: `.TestLogger(t)`
$DIR/core/internal/features/ocr2/features_ocr2_test.go: `.GetOne(t)`
$DIR/core/internal/features/ocr2/features_ocr2_test.go: `.GetN(t, 4)`
$DIR/core/internal/features/ocr2/features_ocr2_test.go: `.Sprintf("127.0.0.1:%d", bootstrapNodePort)`
$DIR/core/internal/features/ocr2/features_ocr2_test.go: `.keybundle.PublicKey()`
$DIR/core/internal/features/ocr2/features_ocr2_test.go: `.Account(node.effectiveTransmitter.String())`
$DIR/core/internal/features/ocr2/features_ocr2_test.go: `.effectiveTransmitter.String()`
$DIR/core/internal/features/ocr2/features_ocr2_test.go: `.keybundle.OffchainPublicKey()`
$DIR/core/internal/features/ocr2/features_ocr2_test.go: `.keybundle.ConfigEncryptionPublicKey()`
$DIR/core/internal/features/ocr2/features_ocr2_test.go: `.NewTicker(1 * time.Second)`
$DIR/core/internal/features/ocr2/features_ocr2_test.go: `.Stop()`
$DIR/core/internal/features/ocr2/features_ocr2_test.go: `.Commit()`
$DIR/core/internal/features/ocr2/features_ocr2_test.go: `.Sprintf(`
type = "bootstrap"
name = "bootstrap"
relay = "evm"
schemaVersion = 1
forwardingAllowed = true
contractID = "%s"
[relayConfig]
chainID = 1337
`, ocrContractAddress)`
$DIR/core/internal/features/ocr2/features_ocr2_test.go: `.Context(t)`
$DIR/core/internal/features/ocr2/features_ocr2_test.go: `.NewServer(http.HandlerFunc(func(res http.ResponseWriter, req *http.Request) {
time.Sleep(5 * time.Second)
res.WriteHeader(http.StatusOK)
_, err := res.Write([]byte(`{"data":10}`))
require.NoError(t, err)
}))`
$DIR/core/internal/features/ocr2/features_ocr2_test.go: `.HandlerFunc(func(res http.ResponseWriter, req *http.Request) {
time.Sleep(5 * time.Second)
res.WriteHeader(http.StatusOK)
_, err := res.Write([]byte(`{"data":10}`))
require.NoError(t, err)
})`
$DIR/core/internal/features/ocr2/features_ocr2_test.go: `.Sleep(5 * time.Second)`
$DIR/core/internal/features/ocr2/features_ocr2_test.go: `.WriteHeader(http.StatusOK)`
$DIR/core/internal/features/ocr2/features_ocr2_test.go: `.Write([]byte(`{"data":10}`))`
$DIR/core/internal/features/ocr2/features_ocr2_test.go: `.Cleanup(func() {
slowServers[s].Close()
})`
$DIR/core/internal/features/ocr2/features_ocr2_test.go: `.NewServer(http.HandlerFunc(func(res http.ResponseWriter, req *http.Request) {
b, err := io.ReadAll(req.Body)
require.NoError(t, err)
var m bridges.BridgeMetaDataJSON
require.NoError(t, json.Unmarshal(b, &m))
if m.Meta.LatestAnswer != nil && m.Meta.UpdatedAt != nil {
metaLock.Lock()
delete(expectedMeta, m.Meta.LatestAnswer.String())
metaLock.Unlock()
}
res.WriteHeader(http.StatusOK)
_, err = res.Write([]byte(`{"data":10}`))
require.NoError(t, err)
}))`
$DIR/core/internal/features/ocr2/features_ocr2_test.go: `.HandlerFunc(func(res http.ResponseWriter, req *http.Request) {
b, err := io.ReadAll(req.Body)
require.NoError(t, err)
var m bridges.BridgeMetaDataJSON
require.NoError(t, json.Unmarshal(b, &m))
if m.Meta.LatestAnswer != nil && m.Meta.UpdatedAt != nil {
metaLock.Lock()
delete(expectedMeta, m.Meta.LatestAnswer.String())
metaLock.Unlock()
}
res.WriteHeader(http.StatusOK)
_, err = res.Write([]byte(`{"data":10}`))
require.NoError(t, err)
})`
$DIR/core/internal/features/ocr2/features_ocr2_test.go: `.ReadAll(req.Body)`
$DIR/core/internal/features/ocr2/features_ocr2_test.go: `.Lock()`
$DIR/core/internal/features/ocr2/features_ocr2_test.go: `.Meta.LatestAnswer.String()`
$DIR/core/internal/features/ocr2/features_ocr2_test.go: `.Unlock()`
$DIR/core/internal/features/ocr2/features_ocr2_test.go: `.WriteHeader(http.StatusOK)`
$DIR/core/internal/features/ocr2/features_ocr2_test.go: `.Write([]byte(`{"data":10}`))`
$DIR/core/internal/features/ocr2/features_ocr2_test.go: `.Cleanup(func() {
servers[s].Close()
})`
$DIR/core/internal/features/ocr2/features_ocr2_test.go: `.Parse(servers[i].URL)`
$DIR/core/internal/features/ocr2/features_ocr2_test.go: `.ValidatedOracleSpecToml(testutils.Context(t), apps[i].Config.OCR2(), apps[i].Config.Insecure(), fmt.Sprintf(`
type = "offchainreporting2"
relay = "evm"
schemaVersion = 1
pluginType = "median"
name = "web oracle spec"
forwardingAllowed = true
contractID = "%s"
ocrKeyBundleID = "%s"
transmitterID = "%s"
contractConfigConfirmations = 1
contractConfigTrackerPollInterval = "1s"
observationSource = """
// data source 1
ds1 [type=bridge name="%s"];
ds1_parse [type=jsonparse path="data"];
ds1_multiply [type=multiply times=%d];
// data source 2
ds2 [type=http method=GET url="%s"];
ds2_parse [type=jsonparse path="data"];
ds2_multiply [type=multiply times=%d];
ds1 -> ds1_parse -> ds1_multiply -> answer1;
ds2 -> ds2_parse -> ds2_multiply -> answer1;
answer1 [type=median index=0];
"""
[relayConfig]
chainID = 1337
[pluginConfig]
juelsPerFeeCoinSource = """
// data source 1
ds1 [type=bridge name="%s"];
ds1_parse [type=jsonparse path="data"];
ds1_multiply [type=multiply times=%d];
// data source 2
ds2 [type=http method=GET url="%s"];
ds2_parse [type=jsonparse path="data"];
ds2_multiply [type=multiply times=%d];
ds1 -> ds1_parse -> ds1_multiply -> answer1;
ds2 -> ds2_parse -> ds2_multiply -> answer1;
answer1 [type=median index=0];
"""
[pluginConfig.juelsPerFeeCoinCache]
updateInterval = "1m"
`, ocrContractAddress, kbs[i].ID(), transmitters[i], fmt.Sprintf("bridge%d", i), i, slowServers[i].URL, i, fmt.Sprintf("bridge%d", i), i, slowServers[i].URL, i), nil)`
$DIR/core/internal/features/ocr2/features_ocr2_test.go: `.Context(t)`
$DIR/core/internal/features/ocr2/features_ocr2_test.go: `.Config.OCR2()`
$DIR/core/internal/features/ocr2/features_ocr2_test.go: `.Config.Insecure()`
$DIR/core/internal/features/ocr2/features_ocr2_test.go: `.Sprintf(`
type = "offchainreporting2"
relay = "evm"
schemaVersion = 1
pluginType = "median"
name = "web oracle spec"
forwardingAllowed = true
contractID = "%s"
ocrKeyBundleID = "%s"
transmitterID = "%s"
contractConfigConfirmations = 1
contractConfigTrackerPollInterval = "1s"
observationSource = """
// data source 1
ds1 [type=bridge name="%s"];
ds1_parse [type=jsonparse path="data"];
ds1_multiply [type=multiply times=%d];
// data source 2
ds2 [type=http method=GET url="%s"];
ds2_parse [type=jsonparse path="data"];
ds2_multiply [type=multiply times=%d];
ds1 -> ds1_parse -> ds1_multiply -> answer1;
ds2 -> ds2_parse -> ds2_multiply -> answer1;
answer1 [type=median index=0];
"""
[relayConfig]
chainID = 1337
[pluginConfig]
juelsPerFeeCoinSource = """
// data source 1
ds1 [type=bridge name="%s"];
ds1_parse [type=jsonparse path="data"];
ds1_multiply [type=multiply times=%d];
// data source 2
ds2 [type=http method=GET url="%s"];
ds2_parse [type=jsonparse path="data"];
ds2_multiply [type=multiply times=%d];
ds1 -> ds1_parse -> ds1_multiply -> answer1;
ds2 -> ds2_parse -> ds2_multiply -> answer1;
answer1 [type=median index=0];
"""
[pluginConfig.juelsPerFeeCoinCache]
updateInterval = "1m"
`, ocrContractAddress, kbs[i].ID(), transmitters[i], fmt.Sprintf("bridge%d", i), i, slowServers[i].URL, i, fmt.Sprintf("bridge%d", i), i, slowServers[i].URL, i)`
$DIR/core/internal/features/ocr2/features_ocr2_test.go: `.ID()`
$DIR/core/internal/features/ocr2/features_ocr2_test.go: `.Sprintf("bridge%d", i)`
$DIR/core/internal/features/ocr2/features_ocr2_test.go: `.Sprintf("bridge%d", i)`
$DIR/core/internal/features/ocr2/features_ocr2_test.go: `.AddJobV2(testutils.Context(t), &ocrJob)`
$DIR/core/internal/features/ocr2/features_ocr2_test.go: `.Context(t)`
$DIR/core/internal/features/ocr2/features_ocr2_test.go: `.Add(1)`
$DIR/core/internal/features/ocr2/features_ocr2_test.go: `.Done()`
$DIR/core/internal/features/ocr2/features_ocr2_test.go: `.WaitForPipelineComplete(t, ic, jids[ic], 2, 7, apps[ic].JobORM(), 2*time.Minute, 5*time.Second)`
$DIR/core/internal/features/ocr2/features_ocr2_test.go: `.JobORM()`
$DIR/core/internal/features/ocr2/features_ocr2_test.go: `.Outputs.MarshalJSON()`
$DIR/core/internal/features/ocr2/features_ocr2_test.go: `.Wait()`
$DIR/core/internal/features/ocr2/features_ocr2_test.go: `.NewGomegaWithT(t)`
$DIR/core/internal/features/ocr2/features_ocr2_test.go: `.Eventually(func() string {
answer, err := ocrContract.LatestAnswer(nil)
require.NoError(t, err)
return answer.String()
}, 1*time.Minute, 200*time.Millisecond)`
$DIR/core/internal/features/ocr2/features_ocr2_test.go: `.LatestAnswer(nil)`
$DIR/core/internal/features/ocr2/features_ocr2_test.go: `.String()`
$DIR/core/internal/features/ocr2/features_ocr2_test.go: `.Should(gomega.Equal("20"))`
$DIR/core/internal/features/ocr2/features_ocr2_test.go: `.Equal("20")`
$DIR/core/internal/features/ocr2/features_ocr2_test.go: `.JobORM()`
$DIR/core/internal/features/ocr2/features_ocr2_test.go: `.FindJobs(ctx, 0, 1000)`
$DIR/core/internal/features/ocr2/features_ocr2_test.go: `.Contains(j.JobSpecErrors[i].Description, "leader's phase conflicts tGrace timeout")`
$DIR/core/internal/features/ocr2/features_ocr2_test.go: `.Lock()`
$DIR/core/internal/features/ocr2/features_ocr2_test.go: `.Copy(em, expectedMeta)`
$DIR/core/internal/features/ocr2/features_ocr2_test.go: `.Unlock()`
$DIR/core/internal/features/ocr2/features_ocr2_test.go: `.JSON(strings.NewReader(ocr2aggregator.OCR2AggregatorABI))`
$DIR/core/internal/features/ocr2/features_ocr2_test.go: `.NewReader(ocr2aggregator.OCR2AggregatorABI)`
$DIR/core/internal/features/ocr2/features_ocr2_test.go: `.NewOCRContractTransmitter(testutils.Context(t), ocrContractAddress, apps[0].GetRelayers().LegacyEVMChains().Slice()[0].Client(), contractABI, nil, apps[0].GetRelayers().LegacyEVMChains().Slice()[0].LogPoller(), lggr, nil)`
$DIR/core/internal/features/ocr2/features_ocr2_test.go: `.Context(t)`
$DIR/core/internal/features/ocr2/features_ocr2_test.go: `.GetRelayers()`
$DIR/core/internal/features/ocr2/features_ocr2_test.go: `.LegacyEVMChains()`
$DIR/core/internal/features/ocr2/features_ocr2_test.go: `.Slice()`
$DIR/core/internal/features/ocr2/features_ocr2_test.go: `.Client()`
$DIR/core/internal/features/ocr2/features_ocr2_test.go: `.GetRelayers()`
$DIR/core/internal/features/ocr2/features_ocr2_test.go: `.LegacyEVMChains()`
$DIR/core/internal/features/ocr2/features_ocr2_test.go: `.Slice()`
$DIR/core/internal/features/ocr2/features_ocr2_test.go: `.LogPoller()`
$DIR/core/internal/features/ocr2/features_ocr2_test.go: `.LatestConfigDigestAndEpoch(testutils.Context(t))`
$DIR/core/internal/features/ocr2/features_ocr2_test.go: `.Context(t)`
$DIR/core/internal/features/ocr2/features_ocr2_test.go: `.LatestConfigDetails(nil)`
$DIR/core/internal/features/ocr2/features_ocr2_test.go: `.LatestConfigDigestAndEpoch(nil)`
$DIR/core/internal/testutils/pgtest/txdb_test.go: `_, err = db.Exec(`CREATE TABLE txdb_test (id TEXT NOT NULL)`)`
$DIR/core/internal/testutils/pgtest/txdb_test.go: `t.Cleanup(func() {
_ = dropTable()
})`
$DIR/core/internal/testutils/pgtest/txdb_test.go: `_ = dropTable()`
$DIR/core/internal/testutils/pgtest/txdb_test.go: `_, err = db.Exec(`INSERT INTO txdb_test VALUES ($1)`, uuid.New().String())`
$DIR/core/internal/testutils/pgtest/txdb_test.go: `err = db.Select(&ids, `SELECT id from txdb_test`)`
$DIR/core/internal/testutils/pgtest/txdb_test.go: `ensureValuesPresent(t, db)`
$DIR/core/internal/testutils/pgtest/txdb_test.go: `cancel()`
$DIR/core/internal/testutils/pgtest/txdb_test.go: `time.Sleep(time.Second * 10)`
$DIR/core/internal/testutils/pgtest/txdb_test.go: `ensureValuesPresent(t, db)`
$DIR/core/internal/testutils/pgtest/txdb_test.go: `.Exec(`DROP TABLE IF EXISTS txdb_test`)`
$DIR/core/internal/testutils/pgtest/txdb_test.go: `.Exec(`CREATE TABLE txdb_test (id TEXT NOT NULL)`)`
$DIR/core/internal/testutils/pgtest/txdb_test.go: `.Cleanup(func() {
_ = dropTable()
})`
$DIR/core/internal/testutils/pgtest/txdb_test.go: `.Exec(`INSERT INTO txdb_test VALUES ($1)`, uuid.New().String())`
$DIR/core/internal/testutils/pgtest/txdb_test.go: `.New()`
$DIR/core/internal/testutils/pgtest/txdb_test.go: `.String()`
$DIR/core/internal/testutils/pgtest/txdb_test.go: `.Select(&ids, `SELECT id from txdb_test`)`
$DIR/core/internal/testutils/pgtest/txdb_test.go: `.WithCancel(testutils.Context(t))`
$DIR/core/internal/testutils/pgtest/txdb_test.go: `.Context(t)`
$DIR/core/internal/testutils/pgtest/txdb_test.go: `.BeginTx(ctx, nil)`
$DIR/core/internal/testutils/pgtest/txdb_test.go: `.Sleep(time.Second * 10)`
$DIR/core/logger/audit/audit_logger_test.go: `auditLoggerService.SetLoggingClient(&mockHTTPClient)`
$DIR/core/logger/audit/audit_logger_test.go: `set.Bool("bypass-version-check", true, "")`
$DIR/core/logger/audit/audit_logger_test.go: `set.String("admin-credentials-file", "", "")`
$DIR/core/logger/audit/audit_logger_test.go: `err = client.RemoteLogin(c)`
$DIR/core/logger/audit/audit_logger_test.go: `.TestLogger(t)`
$DIR/core/logger/audit/audit_logger_test.go: `.NewAuditLogger(logger.Named("AuditLogger"), &auditLoggerTestConfig)`
$DIR/core/logger/audit/audit_logger_test.go: `.Named("AuditLogger")`
$DIR/core/logger/audit/audit_logger_test.go: `.SetLoggingClient(&mockHTTPClient)`
$DIR/core/logger/audit/audit_logger_test.go: `.NewApplication(t, logger, auditLogger)`
$DIR/core/logger/audit/audit_logger_test.go: `.NewAuthenticatingShell(prompter)`
$DIR/core/logger/audit/audit_logger_test.go: `.NewFlagSet("test", 0)`
$DIR/core/logger/audit/audit_logger_test.go: `.Bool("bypass-version-check", true, "")`
$DIR/core/logger/audit/audit_logger_test.go: `.String("admin-credentials-file", "", "")`
$DIR/core/logger/audit/audit_logger_test.go: `.NewContext(nil, set, nil)`
$DIR/core/logger/audit/audit_logger_test.go: `.RemoteLogin(c)`
$DIR/core/logger/audit/audit_logger_test.go: `.After(5 * time.Second)`
$DIR/core/logger/disk_stats_test.go: `_, err = diskSpaceAvailable("")`
$DIR/core/logger/fields_test.go: `f1["key1"] = "value1"`
$DIR/core/logger/fields_test.go: `f2["key2"] = "value2"`
$DIR/core/logger/fields_test.go: `f["str"] = "foo"`
$DIR/core/logger/fields_test.go: `f["int"] = 123`
$DIR/core/logger/fields_test.go: `f["str"] = "foo"`
$DIR/core/logger/fields_test.go: `f["int"] = 123`
$DIR/core/logger/fields_test.go: `t.Run("single", func(t *testing.T) {
t.Parallel()
assert.Panics(t, func() {
//lint:ignore SA5012 we expect panic here
_ = f.With("xyz")
}, "expected even number of arguments")
})`
$DIR/core/logger/fields_test.go: `.Merge(f2)`
$DIR/core/logger/fields_test.go: `.Merge(f1)`
$DIR/core/logger/fields_test.go: `.Slice()`
$DIR/core/logger/fields_test.go: `.With("bool", true, "float", 3.14)`
$DIR/core/logger/fields_test.go: `.Run("single", func(t *testing.T) {
t.Parallel()
assert.Panics(t, func() {
//lint:ignore SA5012 we expect panic here
_ = f.With("xyz")
}, "expected even number of arguments")
})`
$DIR/core/logger/fields_test.go: `.With()`
$DIR/core/logger/internal/colortest/prettyconsole_test.go: `t.Run(tt.name, func(t *testing.T) {
tr := &testReader{}
pc := logger.PrettyConsole{Sink: tr}
_, err := pc.Write([]byte(tt.input))
if tt.wantError {
assert.Error(t, err)
} else {
t.Log(tr.Written)
assert.Equal(t, tt.want, tr.Written)
}
})`
$DIR/core/logger/internal/colortest/prettyconsole_test.go: `.Run(tt.name, func(t *testing.T) {
tr := &testReader{}
pc := logger.PrettyConsole{Sink: tr}
_, err := pc.Write([]byte(tt.input))
if tt.wantError {
assert.Error(t, err)
} else {
t.Log(tr.Written)
assert.Equal(t, tt.want, tr.Written)
}
})`
$DIR/core/logger/internal/colortest/prettyconsole_test.go: `.Write([]byte(tt.input))`
$DIR/core/logger/logger_test.go: `err = sw.Close()`
$DIR/core/logger/logger_test.go: `.Write([]byte("Hello, World!"))`
$DIR/core/logger/null_logger_test.go: `t.Run("names", func(t *testing.T) {
t.Parallel()
l := logger.NullLogger
assert.Equal(t, l, l.Named("foo"))
assert.Equal(t, l, l.With("foo"))
assert.Equal(t, l, l.Helper(123))
})`
$DIR/core/logger/null_logger_test.go: `l.SetLogLevel(zapcore.DebugLevel)`
$DIR/core/logger/null_logger_test.go: `l.Trace()`
$DIR/core/logger/null_logger_test.go: `l.Debug()`
$DIR/core/logger/null_logger_test.go: `l.Info()`
$DIR/core/logger/null_logger_test.go: `l.Warn()`
$DIR/core/logger/null_logger_test.go: `l.Critical()`
$DIR/core/logger/null_logger_test.go: `l.Panic()`
$DIR/core/logger/null_logger_test.go: `l.Tracef("msg")`
$DIR/core/logger/null_logger_test.go: `l.Debugf("msg")`
$DIR/core/logger/null_logger_test.go: `l.Infof("msg")`
$DIR/core/logger/null_logger_test.go: `l.Warnf("msg")`
$DIR/core/logger/null_logger_test.go: `l.Criticalf("msg")`
$DIR/core/logger/null_logger_test.go: `l.Panicf("msg")`
$DIR/core/logger/null_logger_test.go: `l.Tracew("msg")`
$DIR/core/logger/null_logger_test.go: `l.Debugw("msg")`
$DIR/core/logger/null_logger_test.go: `l.Infow("msg")`
$DIR/core/logger/null_logger_test.go: `l.Warnw("msg")`
$DIR/core/logger/null_logger_test.go: `l.Errorw("msg")`
$DIR/core/logger/null_logger_test.go: `l.Criticalw("msg")`
$DIR/core/logger/null_logger_test.go: `l.Panicw("msg")`
$DIR/core/logger/null_logger_test.go: `l.Fatalw("msg")`
$DIR/core/logger/null_logger_test.go: `l.Recover(nil)`
$DIR/core/logger/null_logger_test.go: `.Run("names", func(t *testing.T) {
t.Parallel()
l := logger.NullLogger
assert.Equal(t, l, l.Named("foo"))
assert.Equal(t, l, l.With("foo"))
assert.Equal(t, l, l.Helper(123))
})`
$DIR/core/logger/null_logger_test.go: `.SetLogLevel(zapcore.DebugLevel)`
$DIR/core/logger/null_logger_test.go: `.Trace()`
$DIR/core/logger/null_logger_test.go: `.Debug()`
$DIR/core/logger/null_logger_test.go: `.Info()`
$DIR/core/logger/null_logger_test.go: `.Warn()`
$DIR/core/logger/null_logger_test.go: `.Critical()`
$DIR/core/logger/null_logger_test.go: `.Panic()`
$DIR/core/logger/null_logger_test.go: `.Tracef("msg")`
$DIR/core/logger/null_logger_test.go: `.Debugf("msg")`
$DIR/core/logger/null_logger_test.go: `.Infof("msg")`
$DIR/core/logger/null_logger_test.go: `.Warnf("msg")`
$DIR/core/logger/null_logger_test.go: `.Criticalf("msg")`
$DIR/core/logger/null_logger_test.go: `.Panicf("msg")`
$DIR/core/logger/null_logger_test.go: `.Tracew("msg")`
$DIR/core/logger/null_logger_test.go: `.Debugw("msg")`
$DIR/core/logger/null_logger_test.go: `.Infow("msg")`
$DIR/core/logger/null_logger_test.go: `.Warnw("msg")`
$DIR/core/logger/null_logger_test.go: `.Errorw("msg")`
$DIR/core/logger/null_logger_test.go: `.Criticalw("msg")`
$DIR/core/logger/null_logger_test.go: `.Panicw("msg")`
$DIR/core/logger/null_logger_test.go: `.Fatalw("msg")`
$DIR/core/logger/null_logger_test.go: `.Recover(nil)`
$DIR/core/logger/passthrough_test.go: `t.Run(test.name, func(t *testing.T) {
t.Parallel()
m := setupMockLogger(t)
l := test.create(m)
l.With()
l.Named("xxx")
l.SetLogLevel(zapcore.DebugLevel)
l.Trace()
l.Debug()
l.Info()
l.Warn()
l.Error()
l.Critical()
l.Panic()
l.Fatal()
l.Tracef("msg")
l.Debugf("msg")
l.Infof("msg")
l.Warnf("msg")
l.Errorf("msg")
l.Criticalf("msg")
l.Panicf("msg")
l.Fatalf("msg")
l.Tracew("msg")
l.Debugw("msg")
l.Infow("msg")
l.Warnw("msg")
l.Errorw("msg")
l.Criticalw("msg")
l.Panicw("msg")
l.Fatalw("msg")
nm := l.Name()
require.Equal(t, "mockLogger", nm)
err := l.Sync()
assert.ErrorIs(t, err, errTest)
l.Recover(errTest)
})`
$DIR/core/logger/passthrough_test.go: `l.With()`
$DIR/core/logger/passthrough_test.go: `l.Named("xxx")`
$DIR/core/logger/passthrough_test.go: `l.SetLogLevel(zapcore.DebugLevel)`
$DIR/core/logger/passthrough_test.go: `l.Trace()`
$DIR/core/logger/passthrough_test.go: `l.Debug()`
$DIR/core/logger/passthrough_test.go: `l.Info()`
$DIR/core/logger/passthrough_test.go: `l.Warn()`
$DIR/core/logger/passthrough_test.go: `l.Critical()`
$DIR/core/logger/passthrough_test.go: `l.Panic()`
$DIR/core/logger/passthrough_test.go: `l.Tracef("msg")`
$DIR/core/logger/passthrough_test.go: `l.Debugf("msg")`
$DIR/core/logger/passthrough_test.go: `l.Infof("msg")`
$DIR/core/logger/passthrough_test.go: `l.Warnf("msg")`
$DIR/core/logger/passthrough_test.go: `l.Criticalf("msg")`
$DIR/core/logger/passthrough_test.go: `l.Panicf("msg")`
$DIR/core/logger/passthrough_test.go: `l.Tracew("msg")`
$DIR/core/logger/passthrough_test.go: `l.Debugw("msg")`
$DIR/core/logger/passthrough_test.go: `l.Infow("msg")`
$DIR/core/logger/passthrough_test.go: `l.Warnw("msg")`
$DIR/core/logger/passthrough_test.go: `l.Errorw("msg")`
$DIR/core/logger/passthrough_test.go: `l.Criticalw("msg")`
$DIR/core/logger/passthrough_test.go: `l.Panicw("msg")`
$DIR/core/logger/passthrough_test.go: `l.Fatalw("msg")`
$DIR/core/logger/passthrough_test.go: `l.Recover(errTest)`
$DIR/core/logger/passthrough_test.go: `.Run(test.name, func(t *testing.T) {
t.Parallel()
m := setupMockLogger(t)
l := test.create(m)
l.With()
l.Named("xxx")
l.SetLogLevel(zapcore.DebugLevel)
l.Trace()
l.Debug()
l.Info()
l.Warn()
l.Error()
l.Critical()
l.Panic()
l.Fatal()
l.Tracef("msg")
l.Debugf("msg")
l.Infof("msg")
l.Warnf("msg")
l.Errorf("msg")
l.Criticalf("msg")
l.Panicf("msg")
l.Fatalf("msg")
l.Tracew("msg")
l.Debugw("msg")
l.Infow("msg")
l.Warnw("msg")
l.Errorw("msg")
l.Criticalw("msg")
l.Panicw("msg")
l.Fatalw("msg")
nm := l.Name()
require.Equal(t, "mockLogger", nm)
err := l.Sync()
assert.ErrorIs(t, err, errTest)
l.Recover(errTest)
})`
$DIR/core/logger/passthrough_test.go: `.create(m)`
$DIR/core/logger/passthrough_test.go: `.With()`
$DIR/core/logger/passthrough_test.go: `.Named("xxx")`
$DIR/core/logger/passthrough_test.go: `.SetLogLevel(zapcore.DebugLevel)`
$DIR/core/logger/passthrough_test.go: `.Trace()`
$DIR/core/logger/passthrough_test.go: `.Debug()`
$DIR/core/logger/passthrough_test.go: `.Info()`
$DIR/core/logger/passthrough_test.go: `.Warn()`
$DIR/core/logger/passthrough_test.go: `.Critical()`
$DIR/core/logger/passthrough_test.go: `.Panic()`
$DIR/core/logger/passthrough_test.go: `.Tracef("msg")`
$DIR/core/logger/passthrough_test.go: `.Debugf("msg")`
$DIR/core/logger/passthrough_test.go: `.Infof("msg")`
$DIR/core/logger/passthrough_test.go: `.Warnf("msg")`
$DIR/core/logger/passthrough_test.go: `.Criticalf("msg")`
$DIR/core/logger/passthrough_test.go: `.Panicf("msg")`
$DIR/core/logger/passthrough_test.go: `.Tracew("msg")`
$DIR/core/logger/passthrough_test.go: `.Debugw("msg")`
$DIR/core/logger/passthrough_test.go: `.Infow("msg")`
$DIR/core/logger/passthrough_test.go: `.Warnw("msg")`
$DIR/core/logger/passthrough_test.go: `.Errorw("msg")`
$DIR/core/logger/passthrough_test.go: `.Criticalw("msg")`
$DIR/core/logger/passthrough_test.go: `.Panicw("msg")`
$DIR/core/logger/passthrough_test.go: `.Fatalw("msg")`
$DIR/core/logger/passthrough_test.go: `.Name()`
$DIR/core/logger/passthrough_test.go: `.Sync()`
$DIR/core/logger/passthrough_test.go: `.Recover(errTest)`
$DIR/core/logger/prometheus_test.go: `repeat(l.Warn, 1)`
$DIR/core/logger/prometheus_test.go: `repeat(l.Error, 2)`
$DIR/core/logger/prometheus_test.go: `repeat(l.Critical, 3)`
$DIR/core/logger/prometheus_test.go: `repeat(l.Panic, 4)`
$DIR/core/logger/prometheus_test.go: `repeat(l.Fatal, 5)`
$DIR/core/logger/prometheus_test.go: `assertCounterValue(t, warnCounter, 1)`
$DIR/core/logger/prometheus_test.go: `assertCounterValue(t, errorCounter, 2)`
$DIR/core/logger/prometheus_test.go: `assertCounterValue(t, criticalCounter, 3)`
$DIR/core/logger/prometheus_test.go: `assertCounterValue(t, panicCounter, 4)`
$DIR/core/logger/prometheus_test.go: `assertCounterValue(t, fatalCounter, 5)`
$DIR/core/logger/prometheus_test.go: `repeat(nl.Warn, 1)`
$DIR/core/logger/prometheus_test.go: `repeat(nl.Error, 1)`
$DIR/core/logger/prometheus_test.go: `repeat(nl.Critical, 1)`
$DIR/core/logger/prometheus_test.go: `repeat(nl.Panic, 1)`
$DIR/core/logger/prometheus_test.go: `repeat(nl.Fatal, 1)`
$DIR/core/logger/prometheus_test.go: `assertCounterValue(t, warnCounter, 2)`
$DIR/core/logger/prometheus_test.go: `assertCounterValue(t, errorCounter, 3)`
$DIR/core/logger/prometheus_test.go: `assertCounterValue(t, criticalCounter, 4)`
$DIR/core/logger/prometheus_test.go: `assertCounterValue(t, panicCounter, 5)`
$DIR/core/logger/prometheus_test.go: `assertCounterValue(t, fatalCounter, 6)`
$DIR/core/logger/prometheus_test.go: `repeat(wl.Warn, 1)`
$DIR/core/logger/prometheus_test.go: `repeat(wl.Error, 1)`
$DIR/core/logger/prometheus_test.go: `repeat(wl.Critical, 1)`
$DIR/core/logger/prometheus_test.go: `repeat(wl.Panic, 1)`
$DIR/core/logger/prometheus_test.go: `repeat(wl.Fatal, 1)`
$DIR/core/logger/prometheus_test.go: `assertCounterValue(t, warnCounter, 3)`
$DIR/core/logger/prometheus_test.go: `assertCounterValue(t, errorCounter, 4)`
$DIR/core/logger/prometheus_test.go: `assertCounterValue(t, criticalCounter, 5)`
$DIR/core/logger/prometheus_test.go: `assertCounterValue(t, panicCounter, 6)`
$DIR/core/logger/prometheus_test.go: `assertCounterValue(t, fatalCounter, 7)`
$DIR/core/logger/prometheus_test.go: `l.Warnf("msg")`
$DIR/core/logger/prometheus_test.go: `l.Warnw("msg")`
$DIR/core/logger/prometheus_test.go: `assertCounterValue(t, warnCounter, 5)`
$DIR/core/logger/prometheus_test.go: `assertCounterValue(t, errorCounter, 6)`
$DIR/core/logger/prometheus_test.go: `l.Criticalf("msg")`
$DIR/core/logger/prometheus_test.go: `l.Criticalw("msg")`
$DIR/core/logger/prometheus_test.go: `assertCounterValue(t, criticalCounter, 7)`
$DIR/core/logger/prometheus_test.go: `l.Panicf("msg")`
$DIR/core/logger/prometheus_test.go: `l.Panicw("msg")`
$DIR/core/logger/prometheus_test.go: `l.Recover(nil)`
$DIR/core/logger/prometheus_test.go: `assertCounterValue(t, panicCounter, 9)`
$DIR/core/logger/prometheus_test.go: `l.Fatalw("msg")`
$DIR/core/logger/prometheus_test.go: `.Sprintf("test_counter_%d", rand.Int31n(999999))`
$DIR/core/logger/prometheus_test.go: `.Int31n(999999)`
$DIR/core/logger/prometheus_test.go: `.NewCounter(prometheus.CounterOpts{Name: name})`
$DIR/core/logger/prometheus_test.go: `.Named("foo")`
$DIR/core/logger/prometheus_test.go: `.With("bar")`
$DIR/core/logger/prometheus_test.go: `.Warnf("msg")`
$DIR/core/logger/prometheus_test.go: `.Warnw("msg")`
$DIR/core/logger/prometheus_test.go: `.Criticalf("msg")`
$DIR/core/logger/prometheus_test.go: `.Criticalw("msg")`
$DIR/core/logger/prometheus_test.go: `.Panicf("msg")`
$DIR/core/logger/prometheus_test.go: `.Panicw("msg")`
$DIR/core/logger/prometheus_test.go: `.Recover(nil)`
$DIR/core/logger/prometheus_test.go: `.Fatalw("msg")`
$DIR/core/logger/sentry_test.go: `t.Run("with even number of keys/values", func(t *testing.T) {
keysAndValues := []interface{}{
"foo", 1, "bar", 42.43, "boggly", "str",
}
m := toMap(keysAndValues)
assert.Equal(t, map[string]interface{}{"bar": 42.43, "boggly": "str", "foo": 1}, m)
})`
$DIR/core/logger/sentry_test.go: `.Run("with even number of keys/values", func(t *testing.T) {
keysAndValues := []interface{}{
"foo", 1, "bar", 42.43, "boggly", "str",
}
m := toMap(keysAndValues)
assert.Equal(t, map[string]interface{}{"bar": 42.43, "boggly": "str", "foo": 1}, m)
})`
$DIR/core/logger/test_logger_test.go: `lgr.Warn(testMessage)`
$DIR/core/logger/test_logger_test.go: `srvLgr.SetLogLevel(zapcore.DebugLevel)`
$DIR/core/logger/test_logger_test.go: `srvLgr.Debugw(serviceMessage, key, value)`
$DIR/core/logger/test_logger_test.go: `logs = observed.TakeAll()`
$DIR/core/logger/test_logger_test.go: `log = logs[0]`
$DIR/core/logger/test_logger_test.go: `wrkLgr.Infow(workerMessage, resultKey, resultVal)`
$DIR/core/logger/test_logger_test.go: `logs = observed.TakeAll()`
$DIR/core/logger/test_logger_test.go: `log = logs[0]`
$DIR/core/logger/test_logger_test.go: `lgr.Critical(critMsg)`
$DIR/core/logger/test_logger_test.go: `logs = observed.TakeAll()`
$DIR/core/logger/test_logger_test.go: `log = logs[0]`
$DIR/core/logger/test_logger_test.go: `.Warn(testMessage)`
$DIR/core/logger/test_logger_test.go: `.TakeAll()`
$DIR/core/logger/test_logger_test.go: `.ContextMap()`
$DIR/core/logger/test_logger_test.go: `.Named(serviceName)`
$DIR/core/logger/test_logger_test.go: `.SetLogLevel(zapcore.DebugLevel)`
$DIR/core/logger/test_logger_test.go: `.Debugw(serviceMessage, key, value)`
$DIR/core/logger/test_logger_test.go: `.TakeAll()`
$DIR/core/logger/test_logger_test.go: `.Named(workerName)`
$DIR/core/logger/test_logger_test.go: `.With(idKey, workerId)`
$DIR/core/logger/test_logger_test.go: `.Infow(workerMessage, resultKey, resultVal)`
$DIR/core/logger/test_logger_test.go: `.TakeAll()`
$DIR/core/logger/test_logger_test.go: `.Critical(critMsg)`
$DIR/core/logger/test_logger_test.go: `.TakeAll()`
$DIR/core/logger/trace_noop_test.go: `lgr.Trace(testMessage)`
$DIR/core/logger/trace_noop_test.go: `lgr.SetLogLevel(zapcore.DebugLevel)`
$DIR/core/logger/trace_noop_test.go: `lgr.Trace(testMessage)`
$DIR/core/logger/trace_noop_test.go: `.Trace(testMessage)`
$DIR/core/logger/trace_noop_test.go: `.SetLogLevel(zapcore.DebugLevel)`
$DIR/core/logger/trace_noop_test.go: `.Trace(testMessage)`
$DIR/core/logger/trace_noop_test.go: `.TakeAll()`
$DIR/core/logger/trace_test.go: `lgr.SetLogLevel(zapcore.InfoLevel)`
$DIR/core/logger/trace_test.go: `lgr.Trace(testMessage)`
$DIR/core/logger/trace_test.go: `lgr.SetLogLevel(zapcore.DebugLevel)`
$DIR/core/logger/trace_test.go: `lgr.Trace(testMessage)`
$DIR/core/logger/trace_test.go: `.SetLogLevel(zapcore.InfoLevel)`
$DIR/core/logger/trace_test.go: `.Trace(testMessage)`
$DIR/core/logger/trace_test.go: `.SetLogLevel(zapcore.DebugLevel)`
$DIR/core/logger/trace_test.go: `.Trace(testMessage)`
$DIR/core/logger/trace_test.go: `.TakeAll()`
$DIR/core/logger/zap_test.go: `err = logFileSize.UnmarshalText([]byte("100mb"))`
$DIR/core/logger/zap_test.go: `t.Run("on logger creation", func(t *testing.T) {
pollChan := make(chan time.Time)
stop := func() {
close(pollChan)
}
local.diskSpaceAvailableFn = func(path string) (utils.FileSize, error) {
assert.Equal(t, logsDir, path)
return maxSize, nil
}
local.diskPollConfig = zapDiskPollConfig{
stop: stop,
pollChan: pollChan,
}
local.FileMaxSizeMB = int(maxSize/utils.MB) * 2
lggr := newTestLogger(t, local)
pollChan <- time.Now()
<-local.testDiskLogLvlChan
lggr.Debug("trying to write to disk when the disk logs should not be created")
logFile := local.LogsFile()
_, err = os.ReadFile(logFile)
require.Error(t, err)
require.Contains(t, err.Error(), "no such file or directory")
})`
$DIR/core/logger/zap_test.go: `close(pollChan)`
$DIR/core/logger/zap_test.go: `local.diskPollConfig = zapDiskPollConfig{
stop: stop,
pollChan: pollChan,
}`
$DIR/core/logger/zap_test.go: `local.FileMaxSizeMB = int(maxSize/utils.MB) * 2`
$DIR/core/logger/zap_test.go: `pollChan <- time.Now()`
$DIR/core/logger/zap_test.go: `<-local.testDiskLogLvlChan`
$DIR/core/logger/zap_test.go: `lggr.Debug("trying to write to disk when the disk logs should not be created")`
$DIR/core/logger/zap_test.go: `_, err = os.ReadFile(logFile)`
$DIR/core/logger/zap_test.go: `t.Run("on logger creation generic error", func(t *testing.T) {
pollChan := make(chan time.Time)
stop := func() {
close(pollChan)
}
local.diskSpaceAvailableFn = func(path string) (utils.FileSize, error) {
assert.Equal(t, logsDir, path)
return 0, nil
}
local.diskPollConfig = zapDiskPollConfig{
stop: stop,
pollChan: pollChan,
}
local.FileMaxSizeMB = int(maxSize/utils.MB) * 2
lggr := newTestLogger(t, local)
pollChan <- time.Now()
<-local.testDiskLogLvlChan
lggr.Debug("trying to write to disk when the disk logs should not be created - generic error")
logFile := local.LogsFile()
_, err = os.ReadFile(logFile)
require.Error(t, err)
require.Contains(t, err.Error(), "no such file or directory")
})`
$DIR/core/logger/zap_test.go: `close(pollChan)`
$DIR/core/logger/zap_test.go: `local.diskPollConfig = zapDiskPollConfig{
stop: stop,
pollChan: pollChan,
}`
$DIR/core/logger/zap_test.go: `local.FileMaxSizeMB = int(maxSize/utils.MB) * 2`
$DIR/core/logger/zap_test.go: `pollChan <- time.Now()`
$DIR/core/logger/zap_test.go: `<-local.testDiskLogLvlChan`
$DIR/core/logger/zap_test.go: `lggr.Debug("trying to write to disk when the disk logs should not be created - generic error")`
$DIR/core/logger/zap_test.go: `_, err = os.ReadFile(logFile)`
$DIR/core/logger/zap_test.go: `t.Run("after logger is created", func(t *testing.T) {
pollChan := make(chan time.Time)
stop := func() {
close(pollChan)
}
available := maxSize * 10
local.diskSpaceAvailableFn = func(path string) (utils.FileSize, error) {
assert.Equal(t, logsDir, path)
return available, nil
}
local.diskPollConfig = zapDiskPollConfig{
stop: stop,
pollChan: pollChan,
}
local.FileMaxSizeMB = int(maxSize/utils.MB) * 2
lggr := newTestLogger(t, local)
lggr.Debug("writing to disk on test")
available = maxSize
pollChan <- time.Now()
<-local.testDiskLogLvlChan
lggr.SetLogLevel(zapcore.WarnLevel)
lggr.Debug("writing to disk on test again")
lggr.Warn("writing to disk on test again")
logFile := local.LogsFile()
b, err := os.ReadFile(logFile)
assert.NoError(t, err)
logs := string(b)
lines := strings.Split(logs, "\n")
// the last line is a blank line, hence why using len(lines) - 2 makes sense
actualMessage := lines[len(lines)-2]
expectedMessage := fmt.Sprintf(
"Disk space is not enough to log into disk any longer, required disk space: %s, Available disk space: %s",
local.RequiredDiskSpace(),
maxSize,
)
require.Contains(t, actualMessage, expectedMessage)
})`
$DIR/core/logger/zap_test.go: `close(pollChan)`
$DIR/core/logger/zap_test.go: `local.diskPollConfig = zapDiskPollConfig{
stop: stop,
pollChan: pollChan,
}`
$DIR/core/logger/zap_test.go: `local.FileMaxSizeMB = int(maxSize/utils.MB) * 2`
$DIR/core/logger/zap_test.go: `lggr.Debug("writing to disk on test")`
$DIR/core/logger/zap_test.go: `available = maxSize`
$DIR/core/logger/zap_test.go: `pollChan <- time.Now()`
$DIR/core/logger/zap_test.go: `<-local.testDiskLogLvlChan`
$DIR/core/logger/zap_test.go: `lggr.SetLogLevel(zapcore.WarnLevel)`
$DIR/core/logger/zap_test.go: `lggr.Debug("writing to disk on test again")`
$DIR/core/logger/zap_test.go: `lggr.Warn("writing to disk on test again")`
$DIR/core/logger/zap_test.go: `close(pollChan)`
$DIR/core/logger/zap_test.go: `local.diskPollConfig = zapDiskPollConfig{
stop: stop,
pollChan: pollChan,
}`
$DIR/core/logger/zap_test.go: `local.FileMaxSizeMB = int(maxSize/utils.MB) * 2`
$DIR/core/logger/zap_test.go: `lggr.Debug("test")`
$DIR/core/logger/zap_test.go: `available = maxSize`
$DIR/core/logger/zap_test.go: `pollChan <- time.Now()`
$DIR/core/logger/zap_test.go: `<-local.testDiskLogLvlChan`
$DIR/core/logger/zap_test.go: `available = maxSize * 12`
$DIR/core/logger/zap_test.go: `pollChan <- time.Now()`
$DIR/core/logger/zap_test.go: `<-local.testDiskLogLvlChan`
$DIR/core/logger/zap_test.go: `lggr.Debug("test again")`
$DIR/core/logger/zap_test.go: `err = logFileSize.UnmarshalText([]byte("100mb"))`
$DIR/core/logger/zap_test.go: `close(pollChan)`
$DIR/core/logger/zap_test.go: `local.FileMaxSizeMB = int(maxSize/utils.MB) * 2`
$DIR/core/logger/zap_test.go: `lggr.Debug("test message with caller")`
$DIR/core/logger/zap_test.go: `pollChan <- time.Now()`
$DIR/core/logger/zap_test.go: `<-local.testDiskLogLvlChan`
$DIR/core/logger/zap_test.go: `.FileSize(5 * utils.MB)`
$DIR/core/logger/zap_test.go: `.TempDir()`
$DIR/core/logger/zap_test.go: `.CreateTemp(logsDir, "*")`
$DIR/core/logger/zap_test.go: `.UnmarshalText([]byte("100mb"))`
$DIR/core/logger/zap_test.go: `.Run("on logger creation", func(t *testing.T) {
pollChan := make(chan time.Time)
stop := func() {
close(pollChan)
}
local.diskSpaceAvailableFn = func(path string) (utils.FileSize, error) {
assert.Equal(t, logsDir, path)
return maxSize, nil
}
local.diskPollConfig = zapDiskPollConfig{
stop: stop,
pollChan: pollChan,
}
local.FileMaxSizeMB = int(maxSize/utils.MB) * 2
lggr := newTestLogger(t, local)
pollChan <- time.Now()
<-local.testDiskLogLvlChan
lggr.Debug("trying to write to disk when the disk logs should not be created")
logFile := local.LogsFile()
_, err = os.ReadFile(logFile)
require.Error(t, err)
require.Contains(t, err.Error(), "no such file or directory")
})`
$DIR/core/logger/zap_test.go: `.Now()`
$DIR/core/logger/zap_test.go: `.Debug("trying to write to disk when the disk logs should not be created")`
$DIR/core/logger/zap_test.go: `.LogsFile()`
$DIR/core/logger/zap_test.go: `.ReadFile(logFile)`
$DIR/core/logger/zap_test.go: `.Run("on logger creation generic error", func(t *testing.T) {
pollChan := make(chan time.Time)
stop := func() {
close(pollChan)
}
local.diskSpaceAvailableFn = func(path string) (utils.FileSize, error) {
assert.Equal(t, logsDir, path)
return 0, nil
}
local.diskPollConfig = zapDiskPollConfig{
stop: stop,
pollChan: pollChan,
}
local.FileMaxSizeMB = int(maxSize/utils.MB) * 2
lggr := newTestLogger(t, local)
pollChan <- time.Now()
<-local.testDiskLogLvlChan
lggr.Debug("trying to write to disk when the disk logs should not be created - generic error")
logFile := local.LogsFile()
_, err = os.ReadFile(logFile)
require.Error(t, err)
require.Contains(t, err.Error(), "no such file or directory")
})`
$DIR/core/logger/zap_test.go: `.Now()`
$DIR/core/logger/zap_test.go: `.Debug("trying to write to disk when the disk logs should not be created - generic error")`
$DIR/core/logger/zap_test.go: `.LogsFile()`
$DIR/core/logger/zap_test.go: `.ReadFile(logFile)`
$DIR/core/logger/zap_test.go: `.Run("after logger is created", func(t *testing.T) {
pollChan := make(chan time.Time)
stop := func() {
close(pollChan)
}
available := maxSize * 10
local.diskSpaceAvailableFn = func(path string) (utils.FileSize, error) {
assert.Equal(t, logsDir, path)
return available, nil
}
local.diskPollConfig = zapDiskPollConfig{
stop: stop,
pollChan: pollChan,
}
local.FileMaxSizeMB = int(maxSize/utils.MB) * 2
lggr := newTestLogger(t, local)
lggr.Debug("writing to disk on test")
available = maxSize
pollChan <- time.Now()
<-local.testDiskLogLvlChan
lggr.SetLogLevel(zapcore.WarnLevel)
lggr.Debug("writing to disk on test again")
lggr.Warn("writing to disk on test again")
logFile := local.LogsFile()
b, err := os.ReadFile(logFile)
assert.NoError(t, err)
logs := string(b)
lines := strings.Split(logs, "\n")
// the last line is a blank line, hence why using len(lines) - 2 makes sense
actualMessage := lines[len(lines)-2]
expectedMessage := fmt.Sprintf(
"Disk space is not enough to log into disk any longer, required disk space: %s, Available disk space: %s",
local.RequiredDiskSpace(),
maxSize,
)
require.Contains(t, actualMessage, expectedMessage)
})`
$DIR/core/logger/zap_test.go: `.Debug("writing to disk on test")`
$DIR/core/logger/zap_test.go: `.Now()`
$DIR/core/logger/zap_test.go: `.SetLogLevel(zapcore.WarnLevel)`
$DIR/core/logger/zap_test.go: `.Debug("writing to disk on test again")`
$DIR/core/logger/zap_test.go: `.Warn("writing to disk on test again")`
$DIR/core/logger/zap_test.go: `.LogsFile()`
$DIR/core/logger/zap_test.go: `.ReadFile(logFile)`
$DIR/core/logger/zap_test.go: `.Split(logs, "\n")`
$DIR/core/logger/zap_test.go: `.Sprintf(
"Disk space is not enough to log into disk any longer, required disk space: %s, Available disk space: %s",
local.RequiredDiskSpace(),
maxSize,
)`
$DIR/core/logger/zap_test.go: `.RequiredDiskSpace()`
$DIR/core/logger/zap_test.go: `.Debug("test")`
$DIR/core/logger/zap_test.go: `.Now()`
$DIR/core/logger/zap_test.go: `.Now()`
$DIR/core/logger/zap_test.go: `.Debug("test again")`
$DIR/core/logger/zap_test.go: `.LogsFile()`
$DIR/core/logger/zap_test.go: `.ReadFile(logFile)`
$DIR/core/logger/zap_test.go: `.Split(logs, "\n")`
$DIR/core/logger/zap_test.go: `.Sprintf(
"Disk space is not enough to log into disk any longer, required disk space: %s, Available disk space: %s",
local.RequiredDiskSpace(),
maxSize,
)`
$DIR/core/logger/zap_test.go: `.RequiredDiskSpace()`
$DIR/core/logger/zap_test.go: `.FileSize(5 * utils.MB)`
$DIR/core/logger/zap_test.go: `.TempDir()`
$DIR/core/logger/zap_test.go: `.CreateTemp(logsDir, "*")`
$DIR/core/logger/zap_test.go: `.UnmarshalText([]byte("100mb"))`
$DIR/core/logger/zap_test.go: `.Debug("test message with caller")`
$DIR/core/logger/zap_test.go: `.Now()`
$DIR/core/logger/zap_test.go: `.LogsFile()`
$DIR/core/logger/zap_test.go: `.ReadFile(logFile)`
$DIR/core/logger/zap_test.go: `.Split(logs, "\n")`
$DIR/core/logger/zap_test.go: `.Named("Lggr1")`
$DIR/core/logger/zap_test.go: `.Named("Lggr2")`
$DIR/core/logger/zap_test.go: `.Name()`
$DIR/core/null/int64_test.go: `t.Run(fmt.Sprintf("%d", test.input), func(t *testing.T) {
i := null.Int64From(test.input)
assert.True(t, i.Valid)
assert.Equal(t, test.input, i.Int64)
})`
$DIR/core/null/int64_test.go: `t.Run(test.name, func(t *testing.T) {
var i null.Int64
err := json.Unmarshal([]byte(test.input), &i)
require.NoError(t, err)
assert.True(t, i.Valid)
assert.Equal(t, int64(12345), i.Int64)
})`
$DIR/core/null/int64_test.go: `t.Run(test.name, func(t *testing.T) {
var i null.Int64
err := json.Unmarshal([]byte(test.input), &i)
require.NoError(t, err)
assert.False(t, i.Valid)
})`
$DIR/core/null/int64_test.go: `t.Run(test.name, func(t *testing.T) {
var i null.Int64
err := json.Unmarshal([]byte(test.input), &i)
require.Error(t, err)
assert.False(t, i.Valid)
})`
$DIR/core/null/int64_test.go: `err = json.Unmarshal([]byte(strconv.FormatUint(math.MaxUint64, 10)), &i)`
$DIR/core/null/int64_test.go: `t.Run(test.name, func(t *testing.T) {
var i null.Int64
err := i.UnmarshalText([]byte(test.input))
require.NoError(t, err)
assert.False(t, i.Valid)
})`
$DIR/core/null/int64_test.go: `assertJSONEquals(t, data, "12345", "non-empty json marshal")`
$DIR/core/null/int64_test.go: `data, err = json.Marshal(null)`
$DIR/core/null/int64_test.go: `assertJSONEquals(t, data, "12345", "non-empty text marshal")`
$DIR/core/null/int64_test.go: `data, err = null.MarshalText()`
$DIR/core/null/int64_test.go: `change.SetValid(12345)`
$DIR/core/null/int64_test.go: `err = i.Scan(int32(12345))`
$DIR/core/null/int64_test.go: `err = i.Scan(int64(12345))`
$DIR/core/null/int64_test.go: `err = i.Scan(math.MaxInt64)`
$DIR/core/null/int64_test.go: `err = i.Scan(uint(12345))`
$DIR/core/null/int64_test.go: `err = i.Scan(uint64(12345))`
$DIR/core/null/int64_test.go: `err = i.Scan(overflowingUint64)`
$DIR/core/null/int64_test.go: `err = i.Scan(overflowingUint)`
$DIR/core/null/int64_test.go: `err = i.Scan(nil)`
$DIR/core/null/int64_test.go: `.Run(fmt.Sprintf("%d", test.input), func(t *testing.T) {
i := null.Int64From(test.input)
assert.True(t, i.Valid)
assert.Equal(t, test.input, i.Int64)
})`
$DIR/core/null/int64_test.go: `.Sprintf("%d", test.input)`
$DIR/core/null/int64_test.go: `.Int64From(test.input)`
$DIR/core/null/int64_test.go: `.Run(test.name, func(t *testing.T) {
var i null.Int64
err := json.Unmarshal([]byte(test.input), &i)
require.NoError(t, err)
assert.True(t, i.Valid)
assert.Equal(t, int64(12345), i.Int64)
})`
$DIR/core/null/int64_test.go: `.Unmarshal([]byte(test.input), &i)`
$DIR/core/null/int64_test.go: `.Run(test.name, func(t *testing.T) {
var i null.Int64
err := json.Unmarshal([]byte(test.input), &i)
require.NoError(t, err)
assert.False(t, i.Valid)
})`
$DIR/core/null/int64_test.go: `.Unmarshal([]byte(test.input), &i)`
$DIR/core/null/int64_test.go: `.Run(test.name, func(t *testing.T) {
var i null.Int64
err := json.Unmarshal([]byte(test.input), &i)
require.Error(t, err)
assert.False(t, i.Valid)
})`
$DIR/core/null/int64_test.go: `.Unmarshal([]byte(test.input), &i)`
$DIR/core/null/int64_test.go: `.Unmarshal([]byte(strconv.FormatInt(math.MaxInt64, 10)), &i)`
$DIR/core/null/int64_test.go: `.FormatInt(math.MaxInt64, 10)`
$DIR/core/null/int64_test.go: `.Unmarshal([]byte(strconv.FormatUint(math.MaxUint64, 10)), &i)`
$DIR/core/null/int64_test.go: `.FormatUint(math.MaxUint64, 10)`
$DIR/core/null/int64_test.go: `.UnmarshalText([]byte("12345"))`
$DIR/core/null/int64_test.go: `.Run(test.name, func(t *testing.T) {
var i null.Int64
err := i.UnmarshalText([]byte(test.input))
require.NoError(t, err)
assert.False(t, i.Valid)
})`
$DIR/core/null/int64_test.go: `.UnmarshalText([]byte(test.input))`
$DIR/core/null/int64_test.go: `.Int64From(12345)`
$DIR/core/null/int64_test.go: `.Marshal(i)`
$DIR/core/null/int64_test.go: `.NewInt64(0, false)`
$DIR/core/null/int64_test.go: `.Marshal(null)`
$DIR/core/null/int64_test.go: `.Int64From(12345)`
$DIR/core/null/int64_test.go: `.MarshalText()`
$DIR/core/null/int64_test.go: `.NewInt64(0, false)`
$DIR/core/null/int64_test.go: `.MarshalText()`
$DIR/core/null/int64_test.go: `.NewInt64(0, false)`
$DIR/core/null/int64_test.go: `.SetValid(12345)`
$DIR/core/null/int64_test.go: `.Scan(int(12345))`
$DIR/core/null/int64_test.go: `.Scan(int32(12345))`
$DIR/core/null/int64_test.go: `.Scan(int64(12345))`
$DIR/core/null/int64_test.go: `.Scan(math.MaxInt64)`
$DIR/core/null/int64_test.go: `.Scan(uint(12345))`
$DIR/core/null/int64_test.go: `.Scan(uint64(12345))`
$DIR/core/null/int64_test.go: `.Scan(overflowingUint64)`
$DIR/core/null/int64_test.go: `.Scan(overflowingUint)`
$DIR/core/null/int64_test.go: `.Scan(nil)`
$DIR/core/null/uint32_test.go: `t.Run(fmt.Sprintf("%d", test.input), func(t *testing.T) {
i := null.Uint32From(test.input)
assert.True(t, i.Valid)
assert.Equal(t, test.input, i.Uint32)
})`
$DIR/core/null/uint32_test.go: `t.Run(test.name, func(t *testing.T) {
var i null.Uint32
err := json.Unmarshal([]byte(test.input), &i)
require.NoError(t, err)
assert.True(t, i.Valid)
assert.Equal(t, uint32(12345), i.Uint32)
})`
$DIR/core/null/uint32_test.go: `t.Run(test.name, func(t *testing.T) {
var i null.Uint32
err := json.Unmarshal([]byte(test.input), &i)
require.NoError(t, err)
assert.False(t, i.Valid)
})`
$DIR/core/null/uint32_test.go: `t.Run(test.name, func(t *testing.T) {
var i null.Uint32
err := json.Unmarshal([]byte(test.input), &i)
require.Error(t, err)
assert.False(t, i.Valid)
})`
$DIR/core/null/uint32_test.go: `err = json.Unmarshal([]byte(strconv.FormatUint(maxUint32+1, 10)), &i)`
$DIR/core/null/uint32_test.go: `t.Run(test.name, func(t *testing.T) {
var i null.Uint32
err := i.UnmarshalText([]byte(test.input))
require.NoError(t, err)
assert.False(t, i.Valid)
})`
$DIR/core/null/uint32_test.go: `assertJSONEquals(t, data, "12345", "non-empty json marshal")`
$DIR/core/null/uint32_test.go: `data, err = json.Marshal(null)`
$DIR/core/null/uint32_test.go: `assertJSONEquals(t, data, "12345", "non-empty text marshal")`
$DIR/core/null/uint32_test.go: `data, err = null.MarshalText()`
$DIR/core/null/uint32_test.go: `change.SetValid(12345)`
$DIR/core/null/uint32_test.go: `err = i.Scan(int64(12345))`
$DIR/core/null/uint32_test.go: `err = i.Scan(int64(math.MaxInt64))`
$DIR/core/null/uint32_test.go: `err = i.Scan(uint(12345))`
$DIR/core/null/uint32_test.go: `err = i.Scan(uint(math.MaxUint64))`
$DIR/core/null/uint32_test.go: `err = i.Scan(uint32(12345))`
$DIR/core/null/uint32_test.go: `err = i.Scan(nil)`
$DIR/core/null/uint32_test.go: `.Run(fmt.Sprintf("%d", test.input), func(t *testing.T) {
i := null.Uint32From(test.input)
assert.True(t, i.Valid)
assert.Equal(t, test.input, i.Uint32)
})`
$DIR/core/null/uint32_test.go: `.Sprintf("%d", test.input)`
$DIR/core/null/uint32_test.go: `.Uint32From(test.input)`
$DIR/core/null/uint32_test.go: `.Run(test.name, func(t *testing.T) {
var i null.Uint32
err := json.Unmarshal([]byte(test.input), &i)
require.NoError(t, err)
assert.True(t, i.Valid)
assert.Equal(t, uint32(12345), i.Uint32)
})`
$DIR/core/null/uint32_test.go: `.Unmarshal([]byte(test.input), &i)`
$DIR/core/null/uint32_test.go: `.Run(test.name, func(t *testing.T) {
var i null.Uint32
err := json.Unmarshal([]byte(test.input), &i)
require.NoError(t, err)
assert.False(t, i.Valid)
})`
$DIR/core/null/uint32_test.go: `.Unmarshal([]byte(test.input), &i)`
$DIR/core/null/uint32_test.go: `.Run(test.name, func(t *testing.T) {
var i null.Uint32
err := json.Unmarshal([]byte(test.input), &i)
require.Error(t, err)
assert.False(t, i.Valid)
})`
$DIR/core/null/uint32_test.go: `.Unmarshal([]byte(test.input), &i)`
$DIR/core/null/uint32_test.go: `.Unmarshal([]byte(strconv.FormatUint(maxUint32, 10)), &i)`
$DIR/core/null/uint32_test.go: `.FormatUint(maxUint32, 10)`
$DIR/core/null/uint32_test.go: `.Unmarshal([]byte(strconv.FormatUint(maxUint32+1, 10)), &i)`
$DIR/core/null/uint32_test.go: `.FormatUint(maxUint32+1, 10)`
$DIR/core/null/uint32_test.go: `.UnmarshalText([]byte("12345"))`
$DIR/core/null/uint32_test.go: `.Run(test.name, func(t *testing.T) {
var i null.Uint32
err := i.UnmarshalText([]byte(test.input))
require.NoError(t, err)
assert.False(t, i.Valid)
})`
$DIR/core/null/uint32_test.go: `.UnmarshalText([]byte(test.input))`
$DIR/core/null/uint32_test.go: `.Uint32From(12345)`
$DIR/core/null/uint32_test.go: `.Marshal(i)`
$DIR/core/null/uint32_test.go: `.NewUint32(0, false)`
$DIR/core/null/uint32_test.go: `.Marshal(null)`
$DIR/core/null/uint32_test.go: `.Uint32From(12345)`
$DIR/core/null/uint32_test.go: `.MarshalText()`
$DIR/core/null/uint32_test.go: `.NewUint32(0, false)`
$DIR/core/null/uint32_test.go: `.MarshalText()`
$DIR/core/null/uint32_test.go: `.NewUint32(0, false)`
$DIR/core/null/uint32_test.go: `.SetValid(12345)`
$DIR/core/null/uint32_test.go: `.Scan(12345)`
$DIR/core/null/uint32_test.go: `.Scan(int64(12345))`
$DIR/core/null/uint32_test.go: `.Scan(int64(math.MaxInt64))`
$DIR/core/null/uint32_test.go: `.Scan(uint(12345))`
$DIR/core/null/uint32_test.go: `.Scan(uint(math.MaxUint64))`
$DIR/core/null/uint32_test.go: `.Scan(uint32(12345))`
$DIR/core/null/uint32_test.go: `.Scan(nil)`
$DIR/core/scripts/common/helpers_test.go: `t.Run(test.name, func(t *testing.T) {
testFunc := func(val *big.Int) bool {
return val.Cmp(big.NewInt(test.result)) < 1
}
result := BinarySearch(big.NewInt(test.top), big.NewInt(test.bottom), testFunc)
assert.Equal(t, test.result, result.Int64())
})`
$DIR/core/scripts/common/helpers_test.go: `.Run(test.name, func(t *testing.T) {
testFunc := func(val *big.Int) bool {
return val.Cmp(big.NewInt(test.result)) < 1
}
result := BinarySearch(big.NewInt(test.top), big.NewInt(test.bottom), testFunc)
assert.Equal(t, test.result, result.Int64())
})`
$DIR/core/scripts/common/helpers_test.go: `.Cmp(big.NewInt(test.result))`
$DIR/core/scripts/common/helpers_test.go: `.NewInt(test.result)`
$DIR/core/scripts/common/helpers_test.go: `.NewInt(test.top)`
$DIR/core/scripts/common/helpers_test.go: `.NewInt(test.bottom)`
$DIR/core/scripts/functions/src/files_test.go: `t.Run(tt.name, func(t *testing.T) {
pth := filepath.Join(t.TempDir(), strings.ReplaceAll(tt.name, " ", "_"))
err := writeLines(tt.args.lines, pth)
assert.NoError(t, err)
got, err := readLines(pth)
assert.NoError(t, err)
assert.Equal(t, tt.args.lines, got)
})`
$DIR/core/scripts/functions/src/files_test.go: `.Run(tt.name, func(t *testing.T) {
pth := filepath.Join(t.TempDir(), strings.ReplaceAll(tt.name, " ", "_"))
err := writeLines(tt.args.lines, pth)
assert.NoError(t, err)
got, err := readLines(pth)
assert.NoError(t, err)
assert.Equal(t, tt.args.lines, got)
})`
$DIR/core/scripts/functions/src/files_test.go: `.Join(t.TempDir(), strings.ReplaceAll(tt.name, " ", "_"))`
$DIR/core/scripts/functions/src/files_test.go: `.TempDir()`
$DIR/core/scripts/functions/src/files_test.go: `.ReplaceAll(tt.name, " ", "_")`
$DIR/core/scripts/keystone/src/03_gen_crib_cluster_overrides_cmd_test.go: `.Join(lines, "\n")`
$DIR/core/scripts/keystone/src/88_gen_jobspecs_test.go: `.ToString()`
$DIR/core/scripts/keystone/src/88_gen_ocr3_config_test.go: `.Custom("OffchainConfig", func(s any) (any, error) {
// coerce the value to a string
s, ok := s.(string)
if !ok {
return nil, errors.New("offchain config is not a string")
}
// if the string is not empty
if s == "" {
return nil, errors.New("offchain config is empty")
}
return "", nil
})`
$DIR/core/scripts/keystone/src/88_gen_ocr3_config_test.go: `.New("offchain config is not a string")`
$DIR/core/scripts/keystone/src/88_gen_ocr3_config_test.go: `.New("offchain config is empty")`
$DIR/core/scripts/keystone/src/99_files_test.go: `t.Run(tt.name, func(t *testing.T) {
pth := filepath.Join(t.TempDir(), strings.ReplaceAll(tt.name, " ", "_"))
err := writeLines(tt.args.lines, pth)
assert.NoError(t, err)
got, err := readLines(pth)
assert.NoError(t, err)
assert.Equal(t, tt.args.lines, got)
})`
$DIR/core/scripts/keystone/src/99_files_test.go: `.Run(tt.name, func(t *testing.T) {
pth := filepath.Join(t.TempDir(), strings.ReplaceAll(tt.name, " ", "_"))
err := writeLines(tt.args.lines, pth)
assert.NoError(t, err)
got, err := readLines(pth)
assert.NoError(t, err)
assert.Equal(t, tt.args.lines, got)
})`
$DIR/core/scripts/keystone/src/99_files_test.go: `.Join(t.TempDir(), strings.ReplaceAll(tt.name, " ", "_"))`
$DIR/core/scripts/keystone/src/99_files_test.go: `.TempDir()`
$DIR/core/scripts/keystone/src/99_files_test.go: `.ReplaceAll(tt.name, " ", "_")`
$DIR/core/services/blockhashstore/bhs_test.go: `txm.On("CreateTransaction", mock.Anything, mock.MatchedBy(func(tx txmgr.TxRequest) bool {
return tx.FromAddress.String() == k1.Address.String()
})).Once().Return(txmgr.Tx{}, nil)`
$DIR/core/services/blockhashstore/bhs_test.go: `txm.On("CreateTransaction", mock.Anything, mock.MatchedBy(func(tx txmgr.TxRequest) bool {
return tx.FromAddress.String() == k2.Address.String()
})).Once().Return(txmgr.Tx{}, nil)`
$DIR/core/services/blockhashstore/bhs_test.go: `err = bhs.Store(ctx, 1)`
$DIR/core/services/blockhashstore/bhs_test.go: `err = bhs.Store(ctx, 2)`
$DIR/core/services/blockhashstore/bhs_test.go: `.Context(t)`
$DIR/core/services/blockhashstore/bhs_test.go: `.NewSqlxDB(t)`
$DIR/core/services/blockhashstore/bhs_test.go: `.NewEthClientMockWithDefaultChain(t)`
$DIR/core/services/blockhashstore/bhs_test.go: `.NewTestGeneralConfig(t)`
$DIR/core/services/blockhashstore/bhs_test.go: `.NewKeyStore(t, db)`
$DIR/core/services/blockhashstore/bhs_test.go: `.NewChainRelayExtenders(t, evmtest.TestChainOpts{DB: db, KeyStore: kst.Eth(), GeneralConfig: cfg, Client: ethClient})`
$DIR/core/services/blockhashstore/bhs_test.go: `.Eth()`
$DIR/core/services/blockhashstore/bhs_test.go: `.NewLegacyChainsFromRelayerExtenders(relayExtenders)`
$DIR/core/services/blockhashstore/bhs_test.go: `.Get(cltest.FixtureChainID.String())`
$DIR/core/services/blockhashstore/bhs_test.go: `.FixtureChainID.String()`
$DIR/core/services/blockhashstore/bhs_test.go: `.TestLogger(t)`
$DIR/core/services/blockhashstore/bhs_test.go: `.New(db, utils.FastScryptParams, lggr)`
$DIR/core/services/blockhashstore/bhs_test.go: `.Eth()`
$DIR/core/services/blockhashstore/bhs_test.go: `.Create(ctx, &cltest.FixtureChainID)`
$DIR/core/services/blockhashstore/bhs_test.go: `.Eth()`
$DIR/core/services/blockhashstore/bhs_test.go: `.Create(ctx, &cltest.FixtureChainID)`
$DIR/core/services/blockhashstore/bhs_test.go: `.HexToAddress("0x31Ca8bf590360B3198749f852D5c516c642846F6")`
$DIR/core/services/blockhashstore/bhs_test.go: `.NewBlockhashStore(bhsAddress, chain.Client())`
$DIR/core/services/blockhashstore/bhs_test.go: `.Client()`
$DIR/core/services/blockhashstore/bhs_test.go: `.NewBulletproofBHS(
chain.Config().EVM().GasEstimator(),
cfg.Database(),
fromAddresses,
txm,
store,
nil,
&cltest.FixtureChainID,
ks.Eth(),
)`
$DIR/core/services/blockhashstore/bhs_test.go: `.Config()`
$DIR/core/services/blockhashstore/bhs_test.go: `.EVM()`
$DIR/core/services/blockhashstore/bhs_test.go: `.GasEstimator()`
$DIR/core/services/blockhashstore/bhs_test.go: `.Database()`
$DIR/core/services/blockhashstore/bhs_test.go: `.Eth()`
$DIR/core/services/blockhashstore/bhs_test.go: `.On("CreateTransaction", mock.Anything, mock.MatchedBy(func(tx txmgr.TxRequest) bool {
return tx.FromAddress.String() == k1.Address.String()
}))`
$DIR/core/services/blockhashstore/bhs_test.go: `.MatchedBy(func(tx txmgr.TxRequest) bool {
return tx.FromAddress.String() == k1.Address.String()
})`
$DIR/core/services/blockhashstore/bhs_test.go: `.FromAddress.String()`
$DIR/core/services/blockhashstore/bhs_test.go: `.Address.String()`
$DIR/core/services/blockhashstore/bhs_test.go: `.Once()`
$DIR/core/services/blockhashstore/bhs_test.go: `.Return(txmgr.Tx{}, nil)`
$DIR/core/services/blockhashstore/bhs_test.go: `.On("CreateTransaction", mock.Anything, mock.MatchedBy(func(tx txmgr.TxRequest) bool {
return tx.FromAddress.String() == k2.Address.String()
}))`
$DIR/core/services/blockhashstore/bhs_test.go: `.MatchedBy(func(tx txmgr.TxRequest) bool {
return tx.FromAddress.String() == k2.Address.String()
})`
$DIR/core/services/blockhashstore/bhs_test.go: `.FromAddress.String()`
$DIR/core/services/blockhashstore/bhs_test.go: `.Address.String()`
$DIR/core/services/blockhashstore/bhs_test.go: `.Once()`
$DIR/core/services/blockhashstore/bhs_test.go: `.Return(txmgr.Tx{}, nil)`
$DIR/core/services/blockhashstore/bhs_test.go: `.Store(ctx, 1)`
$DIR/core/services/blockhashstore/bhs_test.go: `.Store(ctx, 2)`
$DIR/core/services/blockhashstore/delegate_test.go: `t.Run("happy", func(t *testing.T) {
spec := job.Job{BlockhashStoreSpec: &job.BlockhashStoreSpec{WaitBlocks: defaultWaitBlocks, EVMChainID: (*big.Big)(testutils.FixtureChainID)}}
services, err := delegate.ServicesForSpec(testutils.Context(t), spec)
require.NoError(t, err)
require.Len(t, services, 1)
})`
$DIR/core/services/blockhashstore/delegate_test.go: `t.Run("happy with coordinators", func(t *testing.T) {
coordinatorV1 := cltest.NewEIP55Address()
coordinatorV2 := cltest.NewEIP55Address()
coordinatorV2Plus := cltest.NewEIP55Address()
spec := job.Job{BlockhashStoreSpec: &job.BlockhashStoreSpec{
WaitBlocks: defaultWaitBlocks,
CoordinatorV1Address: &coordinatorV1,
CoordinatorV2Address: &coordinatorV2,
CoordinatorV2PlusAddress: &coordinatorV2Plus,
EVMChainID: (*big.Big)(testutils.FixtureChainID),
}}
services, err := delegate.ServicesForSpec(testutils.Context(t), spec)
require.NoError(t, err)
require.Len(t, services, 1)
})`
$DIR/core/services/blockhashstore/delegate_test.go: `t.Run("missing BlockhashStoreSpec", func(t *testing.T) {
spec := job.Job{BlockhashStoreSpec: nil}
_, err := delegate.ServicesForSpec(testutils.Context(t), spec)
assert.Error(t, err)
})`
$DIR/core/services/blockhashstore/delegate_test.go: `t.Run("wrong EVMChainID", func(t *testing.T) {
spec := job.Job{BlockhashStoreSpec: &job.BlockhashStoreSpec{
EVMChainID: big.NewI(123),
}}
_, err := delegate.ServicesForSpec(testutils.Context(t), spec)
assert.Error(t, err)
})`
$DIR/core/services/blockhashstore/delegate_test.go: `_, err = delegate.ServicesForSpec(testutils.Context(t), spec)`
$DIR/core/services/blockhashstore/delegate_test.go: `err = services[0].Start(testutils.Context(t))`
$DIR/core/services/blockhashstore/delegate_test.go: `err = services[0].Close()`
$DIR/core/services/blockhashstore/delegate_test.go: `.TestLogger(t)`
$DIR/core/services/blockhashstore/delegate_test.go: `.NewDelegate(nil, lggr, nil, nil)`
$DIR/core/services/blockhashstore/delegate_test.go: `.JobType()`
$DIR/core/services/blockhashstore/delegate_test.go: `.legacyChains.Slice()`
$DIR/core/services/blockhashstore/delegate_test.go: `.Config()`
$DIR/core/services/blockhashstore/delegate_test.go: `.EVM()`
$DIR/core/services/blockhashstore/delegate_test.go: `.FinalityDepth()`
$DIR/core/services/blockhashstore/delegate_test.go: `.Run("happy", func(t *testing.T) {
spec := job.Job{BlockhashStoreSpec: &job.BlockhashStoreSpec{WaitBlocks: defaultWaitBlocks, EVMChainID: (*big.Big)(testutils.FixtureChainID)}}
services, err := delegate.ServicesForSpec(testutils.Context(t), spec)
require.NoError(t, err)
require.Len(t, services, 1)
})`
$DIR/core/services/blockhashstore/delegate_test.go: `.ServicesForSpec(testutils.Context(t), spec)`
$DIR/core/services/blockhashstore/delegate_test.go: `.Context(t)`
$DIR/core/services/blockhashstore/delegate_test.go: `.Run("happy with coordinators", func(t *testing.T) {
coordinatorV1 := cltest.NewEIP55Address()
coordinatorV2 := cltest.NewEIP55Address()
coordinatorV2Plus := cltest.NewEIP55Address()
spec := job.Job{BlockhashStoreSpec: &job.BlockhashStoreSpec{
WaitBlocks: defaultWaitBlocks,
CoordinatorV1Address: &coordinatorV1,
CoordinatorV2Address: &coordinatorV2,
CoordinatorV2PlusAddress: &coordinatorV2Plus,
EVMChainID: (*big.Big)(testutils.FixtureChainID),
}}
services, err := delegate.ServicesForSpec(testutils.Context(t), spec)
require.NoError(t, err)
require.Len(t, services, 1)
})`
$DIR/core/services/blockhashstore/delegate_test.go: `.NewEIP55Address()`
$DIR/core/services/blockhashstore/delegate_test.go: `.NewEIP55Address()`
$DIR/core/services/blockhashstore/delegate_test.go: `.NewEIP55Address()`
$DIR/core/services/blockhashstore/delegate_test.go: `.ServicesForSpec(testutils.Context(t), spec)`
$DIR/core/services/blockhashstore/delegate_test.go: `.Context(t)`
$DIR/core/services/blockhashstore/delegate_test.go: `.Run("missing BlockhashStoreSpec", func(t *testing.T) {
spec := job.Job{BlockhashStoreSpec: nil}
_, err := delegate.ServicesForSpec(testutils.Context(t), spec)
assert.Error(t, err)
})`
$DIR/core/services/blockhashstore/delegate_test.go: `.ServicesForSpec(testutils.Context(t), spec)`
$DIR/core/services/blockhashstore/delegate_test.go: `.Context(t)`
$DIR/core/services/blockhashstore/delegate_test.go: `.Run("wrong EVMChainID", func(t *testing.T) {
spec := job.Job{BlockhashStoreSpec: &job.BlockhashStoreSpec{
EVMChainID: big.NewI(123),
}}
_, err := delegate.ServicesForSpec(testutils.Context(t), spec)
assert.Error(t, err)
})`
$DIR/core/services/blockhashstore/delegate_test.go: `.NewI(123)`
$DIR/core/services/blockhashstore/delegate_test.go: `.ServicesForSpec(testutils.Context(t), spec)`
$DIR/core/services/blockhashstore/delegate_test.go: `.Context(t)`
$DIR/core/services/blockhashstore/delegate_test.go: `.Context(t)`
$DIR/core/services/blockhashstore/delegate_test.go: `.ethKeyStore.Delete(ctx, testData.sendingKey.ID())`
$DIR/core/services/blockhashstore/delegate_test.go: `.sendingKey.ID()`
$DIR/core/services/blockhashstore/delegate_test.go: `.ServicesForSpec(testutils.Context(t), spec)`
$DIR/core/services/blockhashstore/delegate_test.go: `.Context(t)`
$DIR/core/services/blockhashstore/delegate_test.go: `.legacyChains.Slice()`
$DIR/core/services/blockhashstore/delegate_test.go: `.Config()`
$DIR/core/services/blockhashstore/delegate_test.go: `.EVM()`
$DIR/core/services/blockhashstore/delegate_test.go: `.FinalityDepth()`
$DIR/core/services/blockhashstore/delegate_test.go: `.WaitTimeout(t)`
$DIR/core/services/blockhashstore/delegate_test.go: `.ServicesForSpec(testutils.Context(t), spec)`
$DIR/core/services/blockhashstore/delegate_test.go: `.Context(t)`
$DIR/core/services/blockhashstore/delegate_test.go: `.Start(testutils.Context(t))`
$DIR/core/services/blockhashstore/delegate_test.go: `.Context(t)`
$DIR/core/services/blockhashstore/delegate_test.go: `.logs.FilterMessage("Stopping BHS feeder")`
$DIR/core/services/blockhashstore/delegate_test.go: `.Len()`
$DIR/core/services/blockhashstore/feeder_test.go: `t.Run("bhs_heartbeat_happy_path", func(t *testing.T) {
expectedDuration := 600 * time.Second
mockBHS := bhsmocks.NewBHS(t)
mockLogger := loggermocks.NewLogger(t)
feeder := NewFeeder(
mockLogger,
&TestCoordinator{}, // Not used for this test
mockBHS,
&mocklp.LogPoller{}, // Not used for this test
0,
25, // Not used for this test
100, // Not used for this test
expectedDuration,
func(ctx context.Context) (uint64, error) {
return tests[0].latest, nil
})
ctx, cancel := context.WithCancel(testutils.Context(t))
mockTimer := bhsmocks.NewTimer(t)
mockBHS.On("StoreEarliest", ctx).Return(nil).Once()
mockTimer.On("After", expectedDuration).Return(func() <-chan time.Time {
c := make(chan time.Time)
close(c)
return c
}()).Once()
mockTimer.On("After", expectedDuration).Return(func() <-chan time.Time {
c := make(chan time.Time)
return c
}()).Run(func(args mock.Arguments) {
cancel()
}).Once()
mockLogger.On("Infow", "Starting heartbeat blockhash using storeEarliest every 10m0s").Once()
mockLogger.On("Infow", "storing heartbeat blockhash using storeEarliest",
"heartbeatPeriodSeconds", expectedDuration.Seconds()).Once()
require.Len(t, mockLogger.ExpectedCalls, 2)
require.Len(t, mockTimer.ExpectedCalls, 2)
defer mockTimer.AssertExpectations(t)
defer mockBHS.AssertExpectations(t)
defer mockLogger.AssertExpectations(t)
feeder.StartHeartbeats(ctx, mockTimer)
})`
$DIR/core/services/blockhashstore/feeder_test.go: `mockBHS.On("StoreEarliest", ctx).Return(nil).Once()`
$DIR/core/services/blockhashstore/feeder_test.go: `mockTimer.On("After", expectedDuration).Return(func() <-chan time.Time {
c := make(chan time.Time)
close(c)
return c
}()).Once()`
$DIR/core/services/blockhashstore/feeder_test.go: `close(c)`
$DIR/core/services/blockhashstore/feeder_test.go: `mockTimer.On("After", expectedDuration).Return(func() <-chan time.Time {
c := make(chan time.Time)
return c
}()).Run(func(args mock.Arguments) {
cancel()
}).Once()`
$DIR/core/services/blockhashstore/feeder_test.go: `cancel()`
$DIR/core/services/blockhashstore/feeder_test.go: `mockLogger.On("Infow", "Starting heartbeat blockhash using storeEarliest every 10m0s").Once()`
$DIR/core/services/blockhashstore/feeder_test.go: `mockLogger.On("Infow", "storing heartbeat blockhash using storeEarliest",
"heartbeatPeriodSeconds", expectedDuration.Seconds()).Once()`
$DIR/core/services/blockhashstore/feeder_test.go: `feeder.StartHeartbeats(ctx, mockTimer)`
$DIR/core/services/blockhashstore/feeder_test.go: `t.Run("bhs_heartbeat_sad_path_store_earliest_err", func(t *testing.T) {
expectedDuration := 600 * time.Second
expectedError := fmt.Errorf("insufficient gas")
mockBHS := bhsmocks.NewBHS(t)
mockLogger := loggermocks.NewLogger(t)
feeder := NewFeeder(
mockLogger,
&TestCoordinator{}, // Not used for this test
mockBHS,
&mocklp.LogPoller{}, // Not used for this test
0,
25, // Not used for this test
100, // Not used for this test
expectedDuration,
func(ctx context.Context) (uint64, error) {
return tests[0].latest, nil
})
ctx, cancel := context.WithCancel(testutils.Context(t))
mockTimer := bhsmocks.NewTimer(t)
mockBHS.On("StoreEarliest", ctx).Return(expectedError).Once()
mockTimer.On("After", expectedDuration).Return(func() <-chan time.Time {
c := make(chan time.Time)
close(c)
return c
}()).Once()
mockTimer.On("After", expectedDuration).Return(func() <-chan time.Time {
c := make(chan time.Time)
return c
}()).Run(func(args mock.Arguments) {
cancel()
}).Once()
mockLogger.On("Infow", "Starting heartbeat blockhash using storeEarliest every 10m0s").Once()
mockLogger.On("Infow", "storing heartbeat blockhash using storeEarliest",
"heartbeatPeriodSeconds", expectedDuration.Seconds()).Once()
mockLogger.On("Infow", "failed to store heartbeat blockhash using storeEarliest",
"heartbeatPeriodSeconds", expectedDuration.Seconds(),
"err", expectedError).Once()
require.Len(t, mockLogger.ExpectedCalls, 3)
require.Len(t, mockTimer.ExpectedCalls, 2)
defer mockTimer.AssertExpectations(t)
defer mockBHS.AssertExpectations(t)
defer mockLogger.AssertExpectations(t)
feeder.StartHeartbeats(ctx, mockTimer)
})`
$DIR/core/services/blockhashstore/feeder_test.go: `mockBHS.On("StoreEarliest", ctx).Return(expectedError).Once()`
$DIR/core/services/blockhashstore/feeder_test.go: `mockTimer.On("After", expectedDuration).Return(func() <-chan time.Time {
c := make(chan time.Time)
close(c)
return c
}()).Once()`
$DIR/core/services/blockhashstore/feeder_test.go: `close(c)`
$DIR/core/services/blockhashstore/feeder_test.go: `mockTimer.On("After", expectedDuration).Return(func() <-chan time.Time {
c := make(chan time.Time)
return c
}()).Run(func(args mock.Arguments) {
cancel()
}).Once()`
$DIR/core/services/blockhashstore/feeder_test.go: `cancel()`
$DIR/core/services/blockhashstore/feeder_test.go: `mockLogger.On("Infow", "Starting heartbeat blockhash using storeEarliest every 10m0s").Once()`
$DIR/core/services/blockhashstore/feeder_test.go: `mockLogger.On("Infow", "storing heartbeat blockhash using storeEarliest",
"heartbeatPeriodSeconds", expectedDuration.Seconds()).Once()`
$DIR/core/services/blockhashstore/feeder_test.go: `mockLogger.On("Infow", "failed to store heartbeat blockhash using storeEarliest",
"heartbeatPeriodSeconds", expectedDuration.Seconds(),
"err", expectedError).Once()`
$DIR/core/services/blockhashstore/feeder_test.go: `feeder.StartHeartbeats(ctx, mockTimer)`
$DIR/core/services/blockhashstore/feeder_test.go: `mockLogger.On("Infow", "Not starting heartbeat blockhash using storeEarliest").Once()`
$DIR/core/services/blockhashstore/feeder_test.go: `feeder.StartHeartbeats(testutils.Context(t), mockTimer)`
$DIR/core/services/blockhashstore/feeder_test.go: `t.Run(test.name, test.testFeeder)`
$DIR/core/services/blockhashstore/feeder_test.go: `t.Run(test.name, test.testFeederWithLogPollerVRFv1)`
$DIR/core/services/blockhashstore/feeder_test.go: `t.Run(test.name, test.testFeederWithLogPollerVRFv2)`
$DIR/core/services/blockhashstore/feeder_test.go: `t.Run(test.name, test.testFeederWithLogPollerVRFv2Plus)`
$DIR/core/services/blockhashstore/feeder_test.go: `bhs.Stored = nil`
$DIR/core/services/blockhashstore/feeder_test.go: `.Run("bhs_heartbeat_happy_path", func(t *testing.T) {
expectedDuration := 600 * time.Second
mockBHS := bhsmocks.NewBHS(t)
mockLogger := loggermocks.NewLogger(t)
feeder := NewFeeder(
mockLogger,
&TestCoordinator{}, // Not used for this test
mockBHS,
&mocklp.LogPoller{}, // Not used for this test
0,
25, // Not used for this test
100, // Not used for this test
expectedDuration,
func(ctx context.Context) (uint64, error) {
return tests[0].latest, nil
})
ctx, cancel := context.WithCancel(testutils.Context(t))
mockTimer := bhsmocks.NewTimer(t)
mockBHS.On("StoreEarliest", ctx).Return(nil).Once()
mockTimer.On("After", expectedDuration).Return(func() <-chan time.Time {
c := make(chan time.Time)
close(c)
return c
}()).Once()
mockTimer.On("After", expectedDuration).Return(func() <-chan time.Time {
c := make(chan time.Time)
return c
}()).Run(func(args mock.Arguments) {
cancel()
}).Once()
mockLogger.On("Infow", "Starting heartbeat blockhash using storeEarliest every 10m0s").Once()
mockLogger.On("Infow", "storing heartbeat blockhash using storeEarliest",
"heartbeatPeriodSeconds", expectedDuration.Seconds()).Once()
require.Len(t, mockLogger.ExpectedCalls, 2)
require.Len(t, mockTimer.ExpectedCalls, 2)
defer mockTimer.AssertExpectations(t)
defer mockBHS.AssertExpectations(t)
defer mockLogger.AssertExpectations(t)
feeder.StartHeartbeats(ctx, mockTimer)
})`
$DIR/core/services/blockhashstore/feeder_test.go: `.NewBHS(t)`
$DIR/core/services/blockhashstore/feeder_test.go: `.NewLogger(t)`
$DIR/core/services/blockhashstore/feeder_test.go: `.WithCancel(testutils.Context(t))`
$DIR/core/services/blockhashstore/feeder_test.go: `.Context(t)`
$DIR/core/services/blockhashstore/feeder_test.go: `.NewTimer(t)`
$DIR/core/services/blockhashstore/feeder_test.go: `.On("StoreEarliest", ctx)`
$DIR/core/services/blockhashstore/feeder_test.go: `.Return(nil)`
$DIR/core/services/blockhashstore/feeder_test.go: `.Once()`
$DIR/core/services/blockhashstore/feeder_test.go: `.On("After", expectedDuration)`
$DIR/core/services/blockhashstore/feeder_test.go: `.Return(func() <-chan time.Time {
c := make(chan time.Time)
close(c)
return c
}())`
$DIR/core/services/blockhashstore/feeder_test.go: `.Once()`
$DIR/core/services/blockhashstore/feeder_test.go: `.On("After", expectedDuration)`
$DIR/core/services/blockhashstore/feeder_test.go: `.Return(func() <-chan time.Time {
c := make(chan time.Time)
return c
}())`
$DIR/core/services/blockhashstore/feeder_test.go: `.Run(func(args mock.Arguments) {
cancel()
})`
$DIR/core/services/blockhashstore/feeder_test.go: `.Once()`
$DIR/core/services/blockhashstore/feeder_test.go: `.On("Infow", "Starting heartbeat blockhash using storeEarliest every 10m0s")`
$DIR/core/services/blockhashstore/feeder_test.go: `.Once()`
$DIR/core/services/blockhashstore/feeder_test.go: `.On("Infow", "storing heartbeat blockhash using storeEarliest",
"heartbeatPeriodSeconds", expectedDuration.Seconds())`
$DIR/core/services/blockhashstore/feeder_test.go: `.Seconds()`
$DIR/core/services/blockhashstore/feeder_test.go: `.Once()`
$DIR/core/services/blockhashstore/feeder_test.go: `.AssertExpectations(t)`
$DIR/core/services/blockhashstore/feeder_test.go: `.AssertExpectations(t)`
$DIR/core/services/blockhashstore/feeder_test.go: `.AssertExpectations(t)`
$DIR/core/services/blockhashstore/feeder_test.go: `.StartHeartbeats(ctx, mockTimer)`
$DIR/core/services/blockhashstore/feeder_test.go: `.Run("bhs_heartbeat_sad_path_store_earliest_err", func(t *testing.T) {
expectedDuration := 600 * time.Second
expectedError := fmt.Errorf("insufficient gas")
mockBHS := bhsmocks.NewBHS(t)
mockLogger := loggermocks.NewLogger(t)
feeder := NewFeeder(
mockLogger,
&TestCoordinator{}, // Not used for this test
mockBHS,
&mocklp.LogPoller{}, // Not used for this test
0,
25, // Not used for this test
100, // Not used for this test
expectedDuration,
func(ctx context.Context) (uint64, error) {
return tests[0].latest, nil
})
ctx, cancel := context.WithCancel(testutils.Context(t))
mockTimer := bhsmocks.NewTimer(t)
mockBHS.On("StoreEarliest", ctx).Return(expectedError).Once()
mockTimer.On("After", expectedDuration).Return(func() <-chan time.Time {
c := make(chan time.Time)
close(c)
return c
}()).Once()
mockTimer.On("After", expectedDuration).Return(func() <-chan time.Time {
c := make(chan time.Time)
return c
}()).Run(func(args mock.Arguments) {
cancel()
}).Once()
mockLogger.On("Infow", "Starting heartbeat blockhash using storeEarliest every 10m0s").Once()
mockLogger.On("Infow", "storing heartbeat blockhash using storeEarliest",
"heartbeatPeriodSeconds", expectedDuration.Seconds()).Once()
mockLogger.On("Infow", "failed to store heartbeat blockhash using storeEarliest",
"heartbeatPeriodSeconds", expectedDuration.Seconds(),
"err", expectedError).Once()
require.Len(t, mockLogger.ExpectedCalls, 3)
require.Len(t, mockTimer.ExpectedCalls, 2)
defer mockTimer.AssertExpectations(t)
defer mockBHS.AssertExpectations(t)
defer mockLogger.AssertExpectations(t)
feeder.StartHeartbeats(ctx, mockTimer)
})`
$DIR/core/services/blockhashstore/feeder_test.go: `.NewBHS(t)`
$DIR/core/services/blockhashstore/feeder_test.go: `.NewLogger(t)`
$DIR/core/services/blockhashstore/feeder_test.go: `.WithCancel(testutils.Context(t))`
$DIR/core/services/blockhashstore/feeder_test.go: `.Context(t)`
$DIR/core/services/blockhashstore/feeder_test.go: `.NewTimer(t)`
$DIR/core/services/blockhashstore/feeder_test.go: `.On("StoreEarliest", ctx)`
$DIR/core/services/blockhashstore/feeder_test.go: `.Return(expectedError)`
$DIR/core/services/blockhashstore/feeder_test.go: `.Once()`
$DIR/core/services/blockhashstore/feeder_test.go: `.On("After", expectedDuration)`
$DIR/core/services/blockhashstore/feeder_test.go: `.Return(func() <-chan time.Time {
c := make(chan time.Time)
close(c)
return c
}())`
$DIR/core/services/blockhashstore/feeder_test.go: `.Once()`
$DIR/core/services/blockhashstore/feeder_test.go: `.On("After", expectedDuration)`
$DIR/core/services/blockhashstore/feeder_test.go: `.Return(func() <-chan time.Time {
c := make(chan time.Time)
return c
}())`
$DIR/core/services/blockhashstore/feeder_test.go: `.Run(func(args mock.Arguments) {
cancel()
})`
$DIR/core/services/blockhashstore/feeder_test.go: `.Once()`
$DIR/core/services/blockhashstore/feeder_test.go: `.On("Infow", "Starting heartbeat blockhash using storeEarliest every 10m0s")`
$DIR/core/services/blockhashstore/feeder_test.go: `.Once()`
$DIR/core/services/blockhashstore/feeder_test.go: `.On("Infow", "storing heartbeat blockhash using storeEarliest",
"heartbeatPeriodSeconds", expectedDuration.Seconds())`
$DIR/core/services/blockhashstore/feeder_test.go: `.Seconds()`
$DIR/core/services/blockhashstore/feeder_test.go: `.Once()`
$DIR/core/services/blockhashstore/feeder_test.go: `.On("Infow", "failed to store heartbeat blockhash using storeEarliest",
"heartbeatPeriodSeconds", expectedDuration.Seconds(),
"err", expectedError)`
$DIR/core/services/blockhashstore/feeder_test.go: `.Seconds()`
$DIR/core/services/blockhashstore/feeder_test.go: `.Once()`
$DIR/core/services/blockhashstore/feeder_test.go: `.AssertExpectations(t)`
$DIR/core/services/blockhashstore/feeder_test.go: `.AssertExpectations(t)`
$DIR/core/services/blockhashstore/feeder_test.go: `.AssertExpectations(t)`
$DIR/core/services/blockhashstore/feeder_test.go: `.StartHeartbeats(ctx, mockTimer)`
$DIR/core/services/blockhashstore/feeder_test.go: `.NewBHS(t)`
$DIR/core/services/blockhashstore/feeder_test.go: `.NewLogger(t)`
$DIR/core/services/blockhashstore/feeder_test.go: `.NewTimer(t)`
$DIR/core/services/blockhashstore/feeder_test.go: `.On("Infow", "Not starting heartbeat blockhash using storeEarliest")`
$DIR/core/services/blockhashstore/feeder_test.go: `.Once()`
$DIR/core/services/blockhashstore/feeder_test.go: `.AssertExpectations(t)`
$DIR/core/services/blockhashstore/feeder_test.go: `.AssertExpectations(t)`
$DIR/core/services/blockhashstore/feeder_test.go: `.AssertExpectations(t)`
$DIR/core/services/blockhashstore/feeder_test.go: `.StartHeartbeats(testutils.Context(t), mockTimer)`
$DIR/core/services/blockhashstore/feeder_test.go: `.Context(t)`
$DIR/core/services/blockhashstore/feeder_test.go: `.Run(test.name, test.testFeeder)`
$DIR/core/services/blockhashstore/feeder_test.go: `.Run(test.name, test.testFeederWithLogPollerVRFv1)`
$DIR/core/services/blockhashstore/feeder_test.go: `.Run(test.name, test.testFeederWithLogPollerVRFv2)`
$DIR/core/services/blockhashstore/feeder_test.go: `.Run(test.name, test.testFeederWithLogPollerVRFv2Plus)`
$DIR/core/services/blockhashstore/feeder_test.go: `.TestLogger(t)`
$DIR/core/services/blockhashstore/validate_test.go: `t.Run(test.name, func(t *testing.T) {
s, err := ValidatedSpec(test.toml)
test.assertion(t, s, err)
})`
$DIR/core/services/blockhashstore/validate_test.go: `test.assertion(t, s, err)`
$DIR/core/services/blockhashstore/validate_test.go: `.EIP55Address("0x1F72B4A5DCf7CC6d2E38423bF2f4BFA7db97d139")`
$DIR/core/services/blockhashstore/validate_test.go: `.EIP55Address("0x2be990eE17832b59E0086534c5ea2459Aa75E38F")`
$DIR/core/services/blockhashstore/validate_test.go: `.Run(test.name, func(t *testing.T) {
s, err := ValidatedSpec(test.toml)
test.assertion(t, s, err)
})`
$DIR/core/services/blockhashstore/validate_test.go: `.assertion(t, s, err)`
$DIR/core/services/blockheaderfeeder/block_header_feeder_test.go: `t.Run(test.name, test.testFeeder)`
$DIR/core/services/blockheaderfeeder/block_header_feeder_test.go: `ks.On("GetRoundRobinAddress", mock.Anything, testutils.FixtureChainID, mock.Anything).Maybe().Return(common.HexToAddress(fromAddress), nil)`
$DIR/core/services/blockheaderfeeder/block_header_feeder_test.go: `batchBHS.Stored = nil`
$DIR/core/services/blockheaderfeeder/block_header_feeder_test.go: `feeder.coordinator = &blockhashstore.TestCoordinator{
RequestEvents: []blockhashstore.Event{
{Block: 74, ID: "request1"},
{Block: 75, ID: "request2"},
},
}`
$DIR/core/services/blockheaderfeeder/block_header_feeder_test.go: `batchBHS.Stored = nil`
$DIR/core/services/blockheaderfeeder/block_header_feeder_test.go: `batchBHS.Stored = []uint64{175}`
$DIR/core/services/blockheaderfeeder/block_header_feeder_test.go: `feeder.coordinator = &blockhashstore.TestCoordinator{RequestEvents: []blockhashstore.Event{{Block: 174, ID: "request"}}}`
$DIR/core/services/blockheaderfeeder/block_header_feeder_test.go: `feeder.coordinator = &blockhashstore.TestCoordinator{RequestEvents: []blockhashstore.Event{{Block: 74, ID: "request"}}}`
$DIR/core/services/blockheaderfeeder/block_header_feeder_test.go: `batchBHS.Stored = []uint64{75}`
$DIR/core/services/blockheaderfeeder/block_header_feeder_test.go: `.New("internal failure")`
$DIR/core/services/blockheaderfeeder/block_header_feeder_test.go: `.New("invalid header")`
$DIR/core/services/blockheaderfeeder/block_header_feeder_test.go: `.Run(test.name, test.testFeeder)`
$DIR/core/services/blockheaderfeeder/block_header_feeder_test.go: `.EIP55Address(fromAddress)`
$DIR/core/services/blockheaderfeeder/block_header_feeder_test.go: `.NewEth(t)`
$DIR/core/services/blockheaderfeeder/block_header_feeder_test.go: `.On("GetRoundRobinAddress", mock.Anything, testutils.FixtureChainID, mock.Anything)`
$DIR/core/services/blockheaderfeeder/block_header_feeder_test.go: `.Maybe()`
$DIR/core/services/blockheaderfeeder/block_header_feeder_test.go: `.Return(common.HexToAddress(fromAddress), nil)`
$DIR/core/services/blockheaderfeeder/block_header_feeder_test.go: `.HexToAddress(fromAddress)`
$DIR/core/services/blockheaderfeeder/block_header_feeder_test.go: `.TestLogger(t)`
$DIR/core/services/blockheaderfeeder/validate_test.go: `t.Run(test.name, func(t *testing.T) {
s, err := ValidatedSpec(test.toml)
test.assertion(t, s, err)
})`
$DIR/core/services/blockheaderfeeder/validate_test.go: `test.assertion(t, s, err)`
$DIR/core/services/blockheaderfeeder/validate_test.go: `.EIP55Address("0x1F72B4A5DCf7CC6d2E38423bF2f4BFA7db97d139")`
$DIR/core/services/blockheaderfeeder/validate_test.go: `.EIP55Address("0x2be990eE17832b59E0086534c5ea2459Aa75E38F")`
$DIR/core/services/blockheaderfeeder/validate_test.go: `.EIP55Address("0x92B5e28Ac583812874e4271380c7d070C5FB6E6b")`
$DIR/core/services/blockheaderfeeder/validate_test.go: `.Run(test.name, func(t *testing.T) {
s, err := ValidatedSpec(test.toml)
test.assertion(t, s, err)
})`
$DIR/core/services/blockheaderfeeder/validate_test.go: `.assertion(t, s, err)`
$DIR/core/services/ccip/orm_test.go: `updates[selector] = generateGasPriceUpdates(selector, numUpdatesPerSourceSelector)`
$DIR/core/services/ccip/orm_test.go: `err = orm.InsertGasPricesForDestChain(ctx, destSelector, int32(i), updatesPerSelector[lastIndex:])`
$DIR/core/services/ccip/orm_test.go: `expectedPrices[selector] = updatesPerSelector[lastIndex]`
$DIR/core/services/ccip/orm_test.go: `combinedUpdates = append(combinedUpdates, updatesPerSelector[0])`
$DIR/core/services/ccip/orm_test.go: `expectedPrices[selector] = updatesPerSelector[0]`
$DIR/core/services/ccip/orm_test.go: `err = orm.InsertGasPricesForDestChain(ctx, destSelector, 1, combinedUpdates)`
$DIR/core/services/ccip/orm_test.go: `prices, err = orm.GetGasPricesByDestChain(ctx, destSelector)`
$DIR/core/services/ccip/orm_test.go: `updates[selector] = generateGasPriceUpdates(selector, numUpdatesPerSourceSelector)`
$DIR/core/services/ccip/orm_test.go: `time.Sleep(time.Duration(sleepSec) * time.Second)`
$DIR/core/services/ccip/orm_test.go: `err = orm.ClearGasPricesByDestChain(ctx, destSelector, 0)`
$DIR/core/services/ccip/orm_test.go: `updates[addr] = generateTokenPriceUpdates(addr, numUpdatesPerAddress)`
$DIR/core/services/ccip/orm_test.go: `err = orm.InsertTokenPricesForDestChain(ctx, destSelector, int32(i), updatesPerAddr[lastIndex:])`
$DIR/core/services/ccip/orm_test.go: `expectedPrices[addr] = updatesPerAddr[lastIndex]`
$DIR/core/services/ccip/orm_test.go: `combinedUpdates = append(combinedUpdates, updatesPerAddr[0])`
$DIR/core/services/ccip/orm_test.go: `expectedPrices[addr] = updatesPerAddr[0]`
$DIR/core/services/ccip/orm_test.go: `err = orm.InsertTokenPricesForDestChain(ctx, destSelector, 1, combinedUpdates)`
$DIR/core/services/ccip/orm_test.go: `prices, err = orm.GetTokenPricesByDestChain(ctx, destSelector)`
$DIR/core/services/ccip/orm_test.go: `updates[addr] = generateTokenPriceUpdates(addr, numUpdatesPerAddress)`
$DIR/core/services/ccip/orm_test.go: `time.Sleep(time.Duration(sleepSec) * time.Second)`
$DIR/core/services/ccip/orm_test.go: `err = orm.ClearTokenPricesByDestChain(ctx, destSelector, 0)`
$DIR/core/services/ccip/orm_test.go: `.Context(t)`
$DIR/core/services/ccip/orm_test.go: `.GetGasPricesByDestChain(ctx, 1)`
$DIR/core/services/ccip/orm_test.go: `.Context(t)`
$DIR/core/services/ccip/orm_test.go: `.GetTokenPricesByDestChain(ctx, 1)`
$DIR/core/services/ccip/orm_test.go: `.Context(t)`
$DIR/core/services/ccip/orm_test.go: `.InsertGasPricesForDestChain(ctx, destSelector, int32(i), updatesPerSelector[:lastIndex])`
$DIR/core/services/ccip/orm_test.go: `.InsertGasPricesForDestChain(ctx, destSelector, int32(i), updatesPerSelector[lastIndex:])`
$DIR/core/services/ccip/orm_test.go: `.GetGasPricesByDestChain(ctx, destSelector)`
$DIR/core/services/ccip/orm_test.go: `.InsertGasPricesForDestChain(ctx, destSelector, 1, combinedUpdates)`
$DIR/core/services/ccip/orm_test.go: `.GetGasPricesByDestChain(ctx, destSelector)`
$DIR/core/services/ccip/orm_test.go: `.Context(t)`
$DIR/core/services/ccip/orm_test.go: `.InsertGasPricesForDestChain(ctx, destSelector, 1, updatesPerSelector)`
$DIR/core/services/ccip/orm_test.go: `.Sleep(time.Duration(sleepSec) * time.Second)`
$DIR/core/services/ccip/orm_test.go: `.Duration(sleepSec)`
$DIR/core/services/ccip/orm_test.go: `.InsertGasPricesForDestChain(ctx, destSelector, 1, updatesPerSelector)`
$DIR/core/services/ccip/orm_test.go: `.ClearGasPricesByDestChain(ctx, destSelector, sleepSec)`
$DIR/core/services/ccip/orm_test.go: `.ClearGasPricesByDestChain(ctx, destSelector, 0)`
$DIR/core/services/ccip/orm_test.go: `.Context(t)`
$DIR/core/services/ccip/orm_test.go: `.InsertTokenPricesForDestChain(ctx, destSelector, int32(i), updatesPerAddr[:lastIndex])`
$DIR/core/services/ccip/orm_test.go: `.InsertTokenPricesForDestChain(ctx, destSelector, int32(i), updatesPerAddr[lastIndex:])`
$DIR/core/services/ccip/orm_test.go: `.GetTokenPricesByDestChain(ctx, destSelector)`
$DIR/core/services/ccip/orm_test.go: `.InsertTokenPricesForDestChain(ctx, destSelector, 1, combinedUpdates)`
$DIR/core/services/ccip/orm_test.go: `.GetTokenPricesByDestChain(ctx, destSelector)`
$DIR/core/services/ccip/orm_test.go: `.Context(t)`
$DIR/core/services/ccip/orm_test.go: `.InsertTokenPricesForDestChain(ctx, destSelector, 1, updatesPerAddr)`
$DIR/core/services/ccip/orm_test.go: `.Sleep(time.Duration(sleepSec) * time.Second)`
$DIR/core/services/ccip/orm_test.go: `.Duration(sleepSec)`
$DIR/core/services/ccip/orm_test.go: `.InsertTokenPricesForDestChain(ctx, destSelector, 1, updatesPerAddr)`
$DIR/core/services/ccip/orm_test.go: `.ClearTokenPricesByDestChain(ctx, destSelector, sleepSec)`
$DIR/core/services/ccip/orm_test.go: `.ClearTokenPricesByDestChain(ctx, destSelector, 0)`
$DIR/core/services/chainlink/config_audit_logger_test.go: `.New()`
$DIR/core/services/chainlink/config_audit_logger_test.go: `.AuditLogger()`
$DIR/core/services/chainlink/config_audit_logger_test.go: `.ForwardToUrl()`
$DIR/core/services/chainlink/config_audit_logger_test.go: `.Headers()`
$DIR/core/services/chainlink/config_auto_pprof_test.go: `.New()`
$DIR/core/services/chainlink/config_auto_pprof_test.go: `.AutoPprof()`
$DIR/core/services/chainlink/config_auto_pprof_test.go: `.GoroutineThreshold()`
$DIR/core/services/chainlink/config_capabilities_test.go: `.New()`
$DIR/core/services/chainlink/config_capabilities_test.go: `.Capabilities()`
$DIR/core/services/chainlink/config_capabilities_test.go: `.Peering()`
$DIR/core/services/chainlink/config_capabilities_test.go: `.V2()`
$DIR/core/services/chainlink/config_capabilities_test.go: `.ListenAddresses()`
$DIR/core/services/chainlink/config_database_test.go: `.New()`
$DIR/core/services/chainlink/config_database_test.go: `.Database()`
$DIR/core/services/chainlink/config_database_test.go: `.Backup()`
$DIR/core/services/chainlink/config_database_test.go: `.Database()`
$DIR/core/services/chainlink/config_database_test.go: `.URL()`
$DIR/core/services/chainlink/config_database_test.go: `.Lock()`
$DIR/core/services/chainlink/config_database_test.go: `.Listener()`
$DIR/core/services/chainlink/config_database_test.go: `.FallbackPollInterval()`
$DIR/core/services/chainlink/config_feature_test.go: `.New()`
$DIR/core/services/chainlink/config_feature_test.go: `.Feature()`
$DIR/core/services/chainlink/config_feature_test.go: `.UICSAKeys()`
$DIR/core/services/chainlink/config_flux_monitor_test.go: `.New()`
$DIR/core/services/chainlink/config_flux_monitor_test.go: `.FluxMonitor()`
$DIR/core/services/chainlink/config_flux_monitor_test.go: `.SimulateTransactions()`
$DIR/core/services/chainlink/config_general_dev_test.go: `t.Run("all insecure configs are false by default", func(t *testing.T) {
config, err := GeneralConfigOpts{}.New(logger.TestLogger(t))
require.NoError(t, err)
assert.False(t, config.Insecure().DevWebServer())
assert.False(t, config.Insecure().DisableRateLimiting())
assert.False(t, config.Insecure().InfiniteDepthQueries())
assert.False(t, config.Insecure().OCRDevelopmentMode())
})`
$DIR/core/services/chainlink/config_general_dev_test.go: `t.Run("insecure config ignore override on non-dev builds", func(t *testing.T) {
config, err := GeneralConfigOpts{
OverrideFn: func(c *Config, s *Secrets) {
*c.Insecure.DevWebServer = true
*c.Insecure.DisableRateLimiting = true
*c.Insecure.InfiniteDepthQueries = true
*c.Insecure.OCRDevelopmentMode = true
}}.New(logger.TestLogger(t))
require.NoError(t, err)
assert.True(t, config.Insecure().DevWebServer())
assert.True(t, config.Insecure().DisableRateLimiting())
assert.True(t, config.Insecure().InfiniteDepthQueries())
assert.True(t, config.OCRDevelopmentMode())
})`
$DIR/core/services/chainlink/config_general_dev_test.go: `*c.Insecure.DevWebServer = true`
$DIR/core/services/chainlink/config_general_dev_test.go: `*c.Insecure.DisableRateLimiting = true`
$DIR/core/services/chainlink/config_general_dev_test.go: `*c.Insecure.InfiniteDepthQueries = true`
$DIR/core/services/chainlink/config_general_dev_test.go: `*c.Insecure.OCRDevelopmentMode = true`
$DIR/core/services/chainlink/config_general_dev_test.go: `err = cfg.c.Validate()`
$DIR/core/services/chainlink/config_general_dev_test.go: `.Run("all insecure configs are false by default", func(t *testing.T) {
config, err := GeneralConfigOpts{}.New(logger.TestLogger(t))
require.NoError(t, err)
assert.False(t, config.Insecure().DevWebServer())
assert.False(t, config.Insecure().DisableRateLimiting())
assert.False(t, config.Insecure().InfiniteDepthQueries())
assert.False(t, config.Insecure().OCRDevelopmentMode())
})`
$DIR/core/services/chainlink/config_general_dev_test.go: `.New(logger.TestLogger(t))`
$DIR/core/services/chainlink/config_general_dev_test.go: `.TestLogger(t)`
$DIR/core/services/chainlink/config_general_dev_test.go: `.Run("insecure config ignore override on non-dev builds", func(t *testing.T) {
config, err := GeneralConfigOpts{
OverrideFn: func(c *Config, s *Secrets) {
*c.Insecure.DevWebServer = true
*c.Insecure.DisableRateLimiting = true
*c.Insecure.InfiniteDepthQueries = true
*c.Insecure.OCRDevelopmentMode = true
}}.New(logger.TestLogger(t))
require.NoError(t, err)
assert.True(t, config.Insecure().DevWebServer())
assert.True(t, config.Insecure().DisableRateLimiting())
assert.True(t, config.Insecure().InfiniteDepthQueries())
assert.True(t, config.OCRDevelopmentMode())
})`
$DIR/core/services/chainlink/config_general_dev_test.go: `.New(logger.TestLogger(t))`
$DIR/core/services/chainlink/config_general_dev_test.go: `.TestLogger(t)`
$DIR/core/services/chainlink/config_general_dev_test.go: `.ParseConfig(`
[insecure]
DevWebServer = true
`)`
$DIR/core/services/chainlink/config_general_dev_test.go: `.init()`
$DIR/core/services/chainlink/config_general_dev_test.go: `.c.Validate()`
$DIR/core/services/chainlink/config_general_test.go: `t.Run("all insecure configs are false by default", func(t *testing.T) {
config, err := GeneralConfigOpts{}.New()
require.NoError(t, err)
assert.False(t, config.Insecure().DevWebServer())
assert.False(t, config.Insecure().DisableRateLimiting())
assert.False(t, config.Insecure().InfiniteDepthQueries())
assert.False(t, config.Insecure().OCRDevelopmentMode())
})`
$DIR/core/services/chainlink/config_general_test.go: `t.Run("insecure config ignore override on non-dev builds", func(t *testing.T) {
config, err := GeneralConfigOpts{
OverrideFn: func(c *Config, s *Secrets) {
*c.Insecure.DevWebServer = true
*c.Insecure.DisableRateLimiting = true
*c.Insecure.InfiniteDepthQueries = true
*c.AuditLogger.Enabled = true
}}.New()
require.NoError(t, err)
// Just asserting that override logic work on a safe config
assert.True(t, config.AuditLogger().Enabled())
assert.False(t, config.Insecure().DevWebServer())
assert.False(t, config.Insecure().DisableRateLimiting())
assert.False(t, config.Insecure().InfiniteDepthQueries())
})`
$DIR/core/services/chainlink/config_general_test.go: `*c.Insecure.DevWebServer = true`
$DIR/core/services/chainlink/config_general_test.go: `*c.Insecure.DisableRateLimiting = true`
$DIR/core/services/chainlink/config_general_test.go: `*c.Insecure.InfiniteDepthQueries = true`
$DIR/core/services/chainlink/config_general_test.go: `*c.AuditLogger.Enabled = true`
$DIR/core/services/chainlink/config_general_test.go: `err = cfg.Validate()`
$DIR/core/services/chainlink/config_general_test.go: `t.Setenv(string(env.Config), "")`
$DIR/core/services/chainlink/config_general_test.go: `t.Run("unset db url", func(t *testing.T) {
t.Setenv(string(env.DatabaseURL), "")
config, err := GeneralConfigOpts{}.New()
require.NoError(t, err)
err = config.ValidateDB()
require.Error(t, err)
require.ErrorIs(t, err, ErrInvalidSecrets)
})`
$DIR/core/services/chainlink/config_general_test.go: `t.Setenv(string(env.DatabaseURL), "")`
$DIR/core/services/chainlink/config_general_test.go: `err = config.ValidateDB()`
$DIR/core/services/chainlink/config_general_test.go: `t.Run("dev url", func(t *testing.T) {
t.Setenv(string(env.DatabaseURL), "postgres://postgres:admin@localhost:5432/chainlink_dev_test?sslmode=disable")
config, err := GeneralConfigOpts{}.New()
require.NoError(t, err)
err = config.ValidateDB()
require.NoError(t, err)
})`
$DIR/core/services/chainlink/config_general_test.go: `t.Setenv(string(env.DatabaseURL), "postgres://postgres:admin@localhost:5432/chainlink_dev_test?sslmode=disable")`
$DIR/core/services/chainlink/config_general_test.go: `err = config.ValidateDB()`
$DIR/core/services/chainlink/config_general_test.go: `t.Setenv(string(env.DatabaseURL), "postgres://postgres:pwdTooShort@localhost:5432/chainlink_dev_prod?sslmode=disable")`
$DIR/core/services/chainlink/config_general_test.go: `t.Setenv(string(env.DatabaseAllowSimplePasswords), "false")`
$DIR/core/services/chainlink/config_general_test.go: `err = config.ValidateDB()`
$DIR/core/services/chainlink/config_general_test.go: `config.SetLogSQL(true)`
$DIR/core/services/chainlink/config_general_test.go: `config.SetLogSQL(false)`
$DIR/core/services/chainlink/config_general_test.go: `err = opts.Setup(configFiles, secretsFiles)`
$DIR/core/services/chainlink/config_general_test.go: `err = opts.parse()`
$DIR/core/services/chainlink/config_general_test.go: `err = assertDeepEqualityMercurySecrets(*merge(mercurySecrets_a.Mercury, mercurySecrets_b.Mercury), opts.Secrets.Mercury)`
$DIR/core/services/chainlink/config_general_test.go: `.New()`
$DIR/core/services/chainlink/config_general_test.go: `.WebServer()`
$DIR/core/services/chainlink/config_general_test.go: `.SessionTimeout()`
$DIR/core/services/chainlink/config_general_test.go: `.Duration()`
$DIR/core/services/chainlink/config_general_test.go: `.Run("all insecure configs are false by default", func(t *testing.T) {
config, err := GeneralConfigOpts{}.New()
require.NoError(t, err)
assert.False(t, config.Insecure().DevWebServer())
assert.False(t, config.Insecure().DisableRateLimiting())
assert.False(t, config.Insecure().InfiniteDepthQueries())
assert.False(t, config.Insecure().OCRDevelopmentMode())
})`
$DIR/core/services/chainlink/config_general_test.go: `.New()`
$DIR/core/services/chainlink/config_general_test.go: `.Run("insecure config ignore override on non-dev builds", func(t *testing.T) {
config, err := GeneralConfigOpts{
OverrideFn: func(c *Config, s *Secrets) {
*c.Insecure.DevWebServer = true
*c.Insecure.DisableRateLimiting = true
*c.Insecure.InfiniteDepthQueries = true
*c.AuditLogger.Enabled = true
}}.New()
require.NoError(t, err)
// Just asserting that override logic work on a safe config
assert.True(t, config.AuditLogger().Enabled())
assert.False(t, config.Insecure().DevWebServer())
assert.False(t, config.Insecure().DisableRateLimiting())
assert.False(t, config.Insecure().InfiniteDepthQueries())
})`
$DIR/core/services/chainlink/config_general_test.go: `.New()`
$DIR/core/services/chainlink/config_general_test.go: `.New()`
$DIR/core/services/chainlink/config_general_test.go: `.Validate()`
$DIR/core/services/chainlink/config_general_test.go: `.Setenv(string(env.Config), "")`
$DIR/core/services/chainlink/config_general_test.go: `.Run("unset db url", func(t *testing.T) {
t.Setenv(string(env.DatabaseURL), "")
config, err := GeneralConfigOpts{}.New()
require.NoError(t, err)
err = config.ValidateDB()
require.Error(t, err)
require.ErrorIs(t, err, ErrInvalidSecrets)
})`
$DIR/core/services/chainlink/config_general_test.go: `.Setenv(string(env.DatabaseURL), "")`
$DIR/core/services/chainlink/config_general_test.go: `.New()`
$DIR/core/services/chainlink/config_general_test.go: `.ValidateDB()`
$DIR/core/services/chainlink/config_general_test.go: `.Run("dev url", func(t *testing.T) {
t.Setenv(string(env.DatabaseURL), "postgres://postgres:admin@localhost:5432/chainlink_dev_test?sslmode=disable")
config, err := GeneralConfigOpts{}.New()
require.NoError(t, err)
err = config.ValidateDB()
require.NoError(t, err)
})`
$DIR/core/services/chainlink/config_general_test.go: `.Setenv(string(env.DatabaseURL), "postgres://postgres:admin@localhost:5432/chainlink_dev_test?sslmode=disable")`
$DIR/core/services/chainlink/config_general_test.go: `.New()`
$DIR/core/services/chainlink/config_general_test.go: `.ValidateDB()`
$DIR/core/services/chainlink/config_general_test.go: `.Setenv(string(env.DatabaseURL), "postgres://postgres:pwdTooShort@localhost:5432/chainlink_dev_prod?sslmode=disable")`
$DIR/core/services/chainlink/config_general_test.go: `.Setenv(string(env.DatabaseAllowSimplePasswords), "false")`
$DIR/core/services/chainlink/config_general_test.go: `.New()`
$DIR/core/services/chainlink/config_general_test.go: `.ValidateDB()`
$DIR/core/services/chainlink/config_general_test.go: `.New()`
$DIR/core/services/chainlink/config_general_test.go: `.SetLogSQL(true)`
$DIR/core/services/chainlink/config_general_test.go: `.SetLogSQL(false)`
$DIR/core/services/chainlink/config_general_test.go: `.Database()`
$DIR/core/services/chainlink/config_general_test.go: `.LogSQL()`
$DIR/core/services/chainlink/config_general_test.go: `.Setup(configFiles, secretsFiles)`
$DIR/core/services/chainlink/config_general_test.go: `.parse()`
$DIR/core/services/chainlink/config_insecure_test.go: `.New()`
$DIR/core/services/chainlink/config_insecure_test.go: `.Insecure()`
$DIR/core/services/chainlink/config_insecure_test.go: `.InfiniteDepthQueries()`
$DIR/core/services/chainlink/config_job_pipeline_test.go: `.New()`
$DIR/core/services/chainlink/config_job_pipeline_test.go: `.JobPipeline()`
$DIR/core/services/chainlink/config_job_pipeline_test.go: `.NewDuration(1 * time.Minute)`
$DIR/core/services/chainlink/config_job_pipeline_test.go: `.ExternalInitiatorsEnabled()`
$DIR/core/services/chainlink/config_keeper_test.go: `.New()`
$DIR/core/services/chainlink/config_keeper_test.go: `.Keeper()`
$DIR/core/services/chainlink/config_keeper_test.go: `.Registry()`
$DIR/core/services/chainlink/config_keeper_test.go: `.SyncUpkeepQueueSize()`
$DIR/core/services/chainlink/config_log_test.go: `.New()`
$DIR/core/services/chainlink/config_log_test.go: `.File()`
$DIR/core/services/chainlink/config_log_test.go: `.Level(3)`
$DIR/core/services/chainlink/config_log_test.go: `.Level()`
$DIR/core/services/chainlink/config_mercury_test.go: `.New()`
$DIR/core/services/chainlink/config_mercury_test.go: `.Mercury()`
$DIR/core/services/chainlink/config_mercury_test.go: `.Credentials("cred2")`
$DIR/core/services/chainlink/config_mercury_test.go: `.TLS()`
$DIR/core/services/chainlink/config_mercury_test.go: `.CertFile()`
$DIR/core/services/chainlink/config_ocr2_test.go: `.New()`
$DIR/core/services/chainlink/config_ocr2_test.go: `.OCR2()`
$DIR/core/services/chainlink/config_ocr2_test.go: `.ParseDuration("1m0s")`
$DIR/core/services/chainlink/config_ocr2_test.go: `.ParseDuration("3s")`
$DIR/core/services/chainlink/config_ocr2_test.go: `.ParseDuration("8s")`
$DIR/core/services/chainlink/config_ocr2_test.go: `.ParseDuration("1h0m0s")`
$DIR/core/services/chainlink/config_ocr2_test.go: `.ParseDuration("1m0s")`
$DIR/core/services/chainlink/config_ocr2_test.go: `.KeyBundleID()`
$DIR/core/services/chainlink/config_ocr_test.go: `.New()`
$DIR/core/services/chainlink/config_ocr_test.go: `.OCR()`
$DIR/core/services/chainlink/config_ocr_test.go: `.ParseDuration("11s")`
$DIR/core/services/chainlink/config_ocr_test.go: `.ParseDuration("3s")`
$DIR/core/services/chainlink/config_ocr_test.go: `.ParseDuration("1h0m0s")`
$DIR/core/services/chainlink/config_ocr_test.go: `.ParseDuration("1m0s")`
$DIR/core/services/chainlink/config_ocr_test.go: `.KeyBundleID()`
$DIR/core/services/chainlink/config_ocr_test.go: `.TransmitterAddress()`
$DIR/core/services/chainlink/config_ocr_test.go: `.String()`
$DIR/core/services/chainlink/config_p2p_test.go: `.New()`
$DIR/core/services/chainlink/config_p2p_test.go: `.P2P()`
$DIR/core/services/chainlink/config_p2p_test.go: `.V2()`
$DIR/core/services/chainlink/config_p2p_test.go: `.ListenAddresses()`
$DIR/core/services/chainlink/config_password_test.go: `.New()`
$DIR/core/services/chainlink/config_password_test.go: `.Password()`
$DIR/core/services/chainlink/config_password_test.go: `.Keystore()`
$DIR/core/services/chainlink/config_prometheus_test.go: `.New()`
$DIR/core/services/chainlink/config_prometheus_test.go: `.Prometheus()`
$DIR/core/services/chainlink/config_prometheus_test.go: `.AuthToken()`
$DIR/core/services/chainlink/config_pyroscope_test.go: `.New()`
$DIR/core/services/chainlink/config_pyroscope_test.go: `.Pyroscope()`
$DIR/core/services/chainlink/config_pyroscope_test.go: `.Environment()`
$DIR/core/services/chainlink/config_telemetry_ingress_test.go: `.New()`
$DIR/core/services/chainlink/config_telemetry_ingress_test.go: `.TelemetryIngress()`
$DIR/core/services/chainlink/config_telemetry_ingress_test.go: `.TelemetryIngress()`
$DIR/core/services/chainlink/config_telemetry_ingress_test.go: `.Endpoints()`
$DIR/core/services/chainlink/config_telemetry_ingress_test.go: `.ServerPubKey()`
$DIR/core/services/chainlink/config_test.go: `full.AuditLogger = toml.AuditLogger{
Enabled: ptr(true),
ForwardToUrl: mustURL("http://localhost:9898"),
Headers: ptr(serviceHeaders),
JsonWrapperKey: ptr("event"),
}`
$DIR/core/services/chainlink/config_test.go: `full.Feature = toml.Feature{
FeedsManager: ptr(true),
LogPoller: ptr(true),
UICSAKeys: ptr(true),
}`
$DIR/core/services/chainlink/config_test.go: `full.Database = toml.Database{
DefaultIdleInTxSessionTimeout: commoncfg.MustNewDuration(time.Minute),
DefaultLockTimeout: commoncfg.MustNewDuration(time.Hour),
DefaultQueryTimeout: commoncfg.MustNewDuration(time.Second),
LogQueries: ptr(true),
MigrateOnStartup: ptr(true),
MaxIdleConns: ptr[int64](7),
MaxOpenConns: ptr[int64](13),
Listener: toml.DatabaseListener{
MaxReconnectDuration: commoncfg.MustNewDuration(time.Minute),
MinReconnectInterval: commoncfg.MustNewDuration(5 * time.Minute),
FallbackPollInterval: commoncfg.MustNewDuration(2 * time.Minute),
},
Lock: toml.DatabaseLock{
Enabled: ptr(false),
LeaseDuration: &minute,
LeaseRefreshInterval: &second,
},
Backup: toml.DatabaseBackup{
Dir: ptr("test/backup/dir"),
Frequency: &hour,
Mode: &legacy.DatabaseBackupModeFull,
OnVersionUpgrade: ptr(true),
},
}`
$DIR/core/services/chainlink/config_test.go: `full.TelemetryIngress = toml.TelemetryIngress{
UniConn: ptr(true),
Logging: ptr(true),
BufferSize: ptr[uint16](1234),
MaxBatchSize: ptr[uint16](4321),
SendInterval: commoncfg.MustNewDuration(time.Minute),
SendTimeout: commoncfg.MustNewDuration(5 * time.Second),
UseBatchSend: ptr(true),
Endpoints: []toml.TelemetryIngressEndpoint{{
Network: ptr("EVM"),
ChainID: ptr("1"),
ServerPubKey: ptr("test-pub-key"),
URL: mustURL("prom.test")},
},
}`
$DIR/core/services/chainlink/config_test.go: `full.Log = toml.Log{
Level: ptr(toml.LogLevel(zapcore.DPanicLevel)),
JSONConsole: ptr(true),
UnixTS: ptr(true),
File: toml.LogFile{
Dir: ptr("log/file/dir"),
MaxSize: ptr[utils.FileSize](100 * utils.GB),
MaxAgeDays: ptr[int64](17),
MaxBackups: ptr[int64](9),
},
}`
$DIR/core/services/chainlink/config_test.go: `full.WebServer = toml.WebServer{
AuthenticationMethod: ptr("local"),
AllowOrigins: ptr("*"),
BridgeResponseURL: mustURL("https://bridge.response"),
BridgeCacheTTL: commoncfg.MustNewDuration(10 * time.Second),
HTTPWriteTimeout: commoncfg.MustNewDuration(time.Minute),
HTTPPort: ptr[uint16](56),
SecureCookies: ptr(true),
SessionTimeout: commoncfg.MustNewDuration(time.Hour),
SessionReaperExpiration: commoncfg.MustNewDuration(7 * 24 * time.Hour),
HTTPMaxSize: ptr(utils.FileSize(uint64(32770))),
StartTimeout: commoncfg.MustNewDuration(15 * time.Second),
ListenIP: mustIP("192.158.1.37"),
MFA: toml.WebServerMFA{
RPID: ptr("test-rpid"),
RPOrigin: ptr("test-rp-origin"),
},
LDAP: toml.WebServerLDAP{
ServerTLS: ptr(true),
SessionTimeout: commoncfg.MustNewDuration(15 * time.Minute),
QueryTimeout: commoncfg.MustNewDuration(2 * time.Minute),
BaseUserAttr: ptr("uid"),
BaseDN: ptr("dc=custom,dc=example,dc=com"),
UsersDN: ptr("ou=users"),
GroupsDN: ptr("ou=groups"),
ActiveAttribute: ptr("organizationalStatus"),
ActiveAttributeAllowedValue: ptr("ACTIVE"),
AdminUserGroupCN: ptr("NodeAdmins"),
EditUserGroupCN: ptr("NodeEditors"),
RunUserGroupCN: ptr("NodeRunners"),
ReadUserGroupCN: ptr("NodeReadOnly"),
UserApiTokenEnabled: ptr(false),
UserAPITokenDuration: commoncfg.MustNewDuration(240 * time.Hour),
UpstreamSyncInterval: commoncfg.MustNewDuration(0 * time.Second),
UpstreamSyncRateLimit: commoncfg.MustNewDuration(2 * time.Minute),
},
RateLimit: toml.WebServerRateLimit{
Authenticated: ptr[int64](42),
AuthenticatedPeriod: commoncfg.MustNewDuration(time.Second),
Unauthenticated: ptr[int64](7),
UnauthenticatedPeriod: commoncfg.MustNewDuration(time.Minute),
},
TLS: toml.WebServerTLS{
CertPath: ptr("tls/cert/path"),
Host: ptr("tls-host"),
KeyPath: ptr("tls/key/path"),
HTTPSPort: ptr[uint16](6789),
ForceRedirect: ptr(true),
ListenIP: mustIP("192.158.1.38"),
},
}`
$DIR/core/services/chainlink/config_test.go: `full.JobPipeline = toml.JobPipeline{
ExternalInitiatorsEnabled: ptr(true),
MaxRunDuration: commoncfg.MustNewDuration(time.Hour),
MaxSuccessfulRuns: ptr[uint64](123456),
ReaperInterval: commoncfg.MustNewDuration(4 * time.Hour),
ReaperThreshold: commoncfg.MustNewDuration(7 * 24 * time.Hour),
ResultWriteQueueDepth: ptr[uint32](10),
VerboseLogging: ptr(false),
HTTPRequest: toml.JobPipelineHTTPRequest{
MaxSize: ptr[utils.FileSize](100 * utils.MB),
DefaultTimeout: commoncfg.MustNewDuration(time.Minute),
},
}`
$DIR/core/services/chainlink/config_test.go: `full.FluxMonitor = toml.FluxMonitor{
DefaultTransactionQueueDepth: ptr[uint32](100),
SimulateTransactions: ptr(true),
}`
$DIR/core/services/chainlink/config_test.go: `full.OCR2 = toml.OCR2{
Enabled: ptr(true),
ContractConfirmations: ptr[uint32](11),
BlockchainTimeout: commoncfg.MustNewDuration(3 * time.Second),
ContractPollInterval: commoncfg.MustNewDuration(time.Hour),
ContractSubscribeInterval: commoncfg.MustNewDuration(time.Minute),
ContractTransmitterTransmitTimeout: commoncfg.MustNewDuration(time.Minute),
DatabaseTimeout: commoncfg.MustNewDuration(8 * time.Second),
KeyBundleID: ptr(models.MustSha256HashFromHex("7a5f66bbe6594259325bf2b4f5b1a9c9")),
CaptureEATelemetry: ptr(false),
CaptureAutomationCustomTelemetry: ptr(true),
DefaultTransactionQueueDepth: ptr[uint32](1),
SimulateTransactions: ptr(false),
TraceLogging: ptr(false),
}`
$DIR/core/services/chainlink/config_test.go: `full.OCR = toml.OCR{
Enabled: ptr(true),
ObservationTimeout: commoncfg.MustNewDuration(11 * time.Second),
BlockchainTimeout: commoncfg.MustNewDuration(3 * time.Second),
ContractPollInterval: commoncfg.MustNewDuration(time.Hour),
ContractSubscribeInterval: commoncfg.MustNewDuration(time.Minute),
DefaultTransactionQueueDepth: ptr[uint32](12),
KeyBundleID: ptr(models.MustSha256HashFromHex("acdd42797a8b921b2910497badc50006")),
SimulateTransactions: ptr(true),
TransmitterAddress: ptr(types.MustEIP55Address("0xa0788FC17B1dEe36f057c42B6F373A34B014687e")),
CaptureEATelemetry: ptr(false),
TraceLogging: ptr(false),
}`
$DIR/core/services/chainlink/config_test.go: `full.P2P = toml.P2P{
IncomingMessageBufferSize: ptr[int64](13),
OutgoingMessageBufferSize: ptr[int64](17),
PeerID: mustPeerID("12D3KooWMoejJznyDuEk5aX6GvbjaG12UzeornPCBNzMRqdwrFJw"),
TraceLogging: ptr(true),
V2: toml.P2PV2{
Enabled: ptr(false),
AnnounceAddresses: &[]string{"a", "b", "c"},
DefaultBootstrappers: &[]ocrcommontypes.BootstrapperLocator{
{PeerID: "12D3KooWMoejJznyDuEk5aX6GvbjaG12UzeornPCBNzMRqdwrFJw", Addrs: []string{"foo:42", "bar:10"}},
{PeerID: "12D3KooWMoejJznyDuEk5aX6GvbjaG12UzeornPCBNzMRqdwrFJw", Addrs: []string{"test:99"}},
},
DeltaDial: commoncfg.MustNewDuration(time.Minute),
DeltaReconcile: commoncfg.MustNewDuration(time.Second),
ListenAddresses: &[]string{"foo", "bar"},
},
}`
$DIR/core/services/chainlink/config_test.go: `full.Capabilities = toml.Capabilities{
Peering: toml.P2P{
IncomingMessageBufferSize: ptr[int64](13),
OutgoingMessageBufferSize: ptr[int64](17),
PeerID: mustPeerID("12D3KooWMoejJznyDuEk5aX6GvbjaG12UzeornPCBNzMRqdwrFJw"),
TraceLogging: ptr(true),
V2: toml.P2PV2{
Enabled: ptr(false),
AnnounceAddresses: &[]string{"a", "b", "c"},
DefaultBootstrappers: &[]ocrcommontypes.BootstrapperLocator{
{PeerID: "12D3KooWMoejJznyDuEk5aX6GvbjaG12UzeornPCBNzMRqdwrFJw", Addrs: []string{"foo:42", "bar:10"}},
{PeerID: "12D3KooWMoejJznyDuEk5aX6GvbjaG12UzeornPCBNzMRqdwrFJw", Addrs: []string{"test:99"}},
},
DeltaDial: commoncfg.MustNewDuration(time.Minute),
DeltaReconcile: commoncfg.MustNewDuration(2 * time.Second),
ListenAddresses: &[]string{"foo", "bar"},
},
},
}`
$DIR/core/services/chainlink/config_test.go: `full.Keeper = toml.Keeper{
DefaultTransactionQueueDepth: ptr[uint32](17),
GasPriceBufferPercent: ptr[uint16](12),
GasTipCapBufferPercent: ptr[uint16](43),
BaseFeeBufferPercent: ptr[uint16](89),
MaxGracePeriod: ptr[int64](31),
TurnLookBack: ptr[int64](91),
Registry: toml.KeeperRegistry{
CheckGasOverhead: ptr[uint32](90),
PerformGasOverhead: ptr[uint32](math.MaxUint32),
SyncInterval: commoncfg.MustNewDuration(time.Hour),
SyncUpkeepQueueSize: ptr[uint32](31),
MaxPerformDataSize: ptr[uint32](5000),
},
}`
$DIR/core/services/chainlink/config_test.go: `full.AutoPprof = toml.AutoPprof{
Enabled: ptr(true),
ProfileRoot: ptr("prof/root"),
PollInterval: commoncfg.MustNewDuration(time.Minute),
GatherDuration: commoncfg.MustNewDuration(12 * time.Second),
GatherTraceDuration: commoncfg.MustNewDuration(13 * time.Second),
MaxProfileSize: ptr[utils.FileSize](utils.GB),
CPUProfileRate: ptr[int64](7),
MemProfileRate: ptr[int64](9),
BlockProfileRate: ptr[int64](5),
MutexProfileFraction: ptr[int64](2),
MemThreshold: ptr[utils.FileSize](utils.GB),
GoroutineThreshold: ptr[int64](999),
}`
$DIR/core/services/chainlink/config_test.go: `full.Pyroscope = toml.Pyroscope{
ServerAddress: ptr("http://localhost:4040"),
Environment: ptr("tests"),
}`
$DIR/core/services/chainlink/config_test.go: `full.Sentry = toml.Sentry{
Debug: ptr(true),
DSN: ptr("sentry-dsn"),
Environment: ptr("dev"),
Release: ptr("v1.2.3"),
}`
$DIR/core/services/chainlink/config_test.go: `full.EVM = []*evmcfg.EVMConfig{
{
ChainID: ubig.NewI(1),
Enabled: ptr(false),
Chain: evmcfg.Chain{
AutoCreateKey: ptr(false),
BalanceMonitor: evmcfg.BalanceMonitor{
Enabled: ptr(true),
},
BlockBackfillDepth: ptr[uint32](100),
BlockBackfillSkip: ptr(true),
ChainType: chaintype.NewChainTypeConfig("Optimism"),
FinalityDepth: ptr[uint32](42),
FinalityTagEnabled: ptr[bool](false),
FlagsContractAddress: mustAddress("0xae4E781a6218A8031764928E88d457937A954fC3"),
GasEstimator: evmcfg.GasEstimator{
Mode: ptr("SuggestedPrice"),
EIP1559DynamicFees: ptr(true),
BumpPercent: ptr[uint16](10),
BumpThreshold: ptr[uint32](6),
BumpTxDepth: ptr[uint32](6),
BumpMin: assets.NewWeiI(100),
FeeCapDefault: assets.NewWeiI(math.MaxInt64),
LimitDefault: ptr[uint64](12),
LimitMax: ptr[uint64](17),
LimitMultiplier: mustDecimal("1.234"),
LimitTransfer: ptr[uint64](100),
TipCapDefault: assets.NewWeiI(2),
TipCapMin: assets.NewWeiI(1),
PriceDefault: assets.NewWeiI(math.MaxInt64),
PriceMax: assets.NewWei(mustHexToBig(t, "FFFFFFFFFFFF")),
PriceMin: assets.NewWeiI(13),
LimitJobType: evmcfg.GasLimitJobType{
OCR: ptr[uint32](1001),
DR: ptr[uint32](1002),
VRF: ptr[uint32](1003),
FM: ptr[uint32](1004),
Keeper: ptr[uint32](1005),
OCR2: ptr[uint32](1006),
},
BlockHistory: evmcfg.BlockHistoryEstimator{
BatchSize: ptr[uint32](17),
BlockHistorySize: ptr[uint16](12),
CheckInclusionBlocks: ptr[uint16](18),
CheckInclusionPercentile: ptr[uint16](19),
EIP1559FeeCapBufferBlocks: ptr[uint16](13),
TransactionPercentile: ptr[uint16](15),
},
},
KeySpecific: []evmcfg.KeySpecific{
{
Key: mustAddress("0x2a3e23c6f242F5345320814aC8a1b4E58707D292"),
GasEstimator: evmcfg.KeySpecificGasEstimator{
PriceMax: assets.NewWei(mustHexToBig(t, "FFFFFFFFFFFFFFFFFFFFFFFF")),
},
},
},
LinkContractAddress: mustAddress("0x538aAaB4ea120b2bC2fe5D296852D948F07D849e"),
LogBackfillBatchSize: ptr[uint32](17),
LogPollInterval: &minute,
LogKeepBlocksDepth: ptr[uint32](100000),
LogPrunePageSize: ptr[uint32](0),
BackupLogPollerBlockDelay: ptr[uint64](532),
MinContractPayment: commonassets.NewLinkFromJuels(math.MaxInt64),
MinIncomingConfirmations: ptr[uint32](13),
NonceAutoSync: ptr(true),
NoNewHeadsThreshold: &minute,
OperatorFactoryAddress: mustAddress("0xa5B85635Be42F21f94F28034B7DA440EeFF0F418"),
RPCDefaultBatchSize: ptr[uint32](17),
RPCBlockQueryDelay: ptr[uint16](10),
Transactions: evmcfg.Transactions{
MaxInFlight: ptr[uint32](19),
MaxQueued: ptr[uint32](99),
ReaperInterval: &minute,
ReaperThreshold: &minute,
ResendAfterThreshold: &hour,
ForwardersEnabled: ptr(true),
AutoPurge: evmcfg.AutoPurgeConfig{
Enabled: ptr(false),
},
},
HeadTracker: evmcfg.HeadTracker{
HistoryDepth: ptr[uint32](15),
MaxBufferSize: ptr[uint32](17),
SamplingInterval: &hour,
FinalityTagBypass: ptr[bool](false),
MaxAllowedFinalityDepth: ptr[uint32](1500),
},
NodePool: evmcfg.NodePool{
PollFailureThreshold: ptr[uint32](5),
PollInterval: &minute,
SelectionMode: &selectionMode,
SyncThreshold: ptr[uint32](13),
LeaseDuration: &zeroSeconds,
NodeIsSyncingEnabled: ptr(true),
FinalizedBlockPollInterval: &second,
Errors: evmcfg.ClientErrors{
NonceTooLow: ptr[string]("(: |^)nonce too low"),
NonceTooHigh: ptr[string]("(: |^)nonce too high"),
ReplacementTransactionUnderpriced: ptr[string]("(: |^)replacement transaction underpriced"),
LimitReached: ptr[string]("(: |^)limit reached"),
TransactionAlreadyInMempool: ptr[string]("(: |^)transaction already in mempool"),
TerminallyUnderpriced: ptr[string]("(: |^)terminally underpriced"),
InsufficientEth: ptr[string]("(: |^)insufficient eth"),
TxFeeExceedsCap: ptr[string]("(: |^)tx fee exceeds cap"),
L2FeeTooLow: ptr[string]("(: |^)l2 fee too low"),
L2FeeTooHigh: ptr[string]("(: |^)l2 fee too high"),
L2Full: ptr[string]("(: |^)l2 full"),
TransactionAlreadyMined: ptr[string]("(: |^)transaction already mined"),
Fatal: ptr[string]("(: |^)fatal"),
ServiceUnavailable: ptr[string]("(: |^)service unavailable"),
},
},
OCR: evmcfg.OCR{
ContractConfirmations: ptr[uint16](11),
ContractTransmitterTransmitTimeout: &minute,
DatabaseTimeout: &second,
DeltaCOverride: commoncfg.MustNewDuration(time.Hour),
DeltaCJitterOverride: commoncfg.MustNewDuration(time.Second),
ObservationGracePeriod: &second,
},
OCR2: evmcfg.OCR2{
Automation: evmcfg.Automation{
GasLimit: ptr[uint32](540),
},
},
},
Nodes: []*evmcfg.Node{
{
Name: ptr("foo"),
HTTPURL: mustURL("https://foo.web"),
WSURL: mustURL("wss://web.socket/test/foo"),
},
{
Name: ptr("bar"),
HTTPURL: mustURL("https://bar.com"),
WSURL: mustURL("wss://web.socket/test/bar"),
},
{
Name: ptr("broadcast"),
HTTPURL: mustURL("http://broadcast.mirror"),
SendOnly: ptr(true),
},
}},
}`
$DIR/core/services/chainlink/config_test.go: `full.Solana = []*solcfg.TOMLConfig{
{
ChainID: ptr("mainnet"),
Enabled: ptr(false),
Chain: solcfg.Chain{
BalancePollPeriod: commoncfg.MustNewDuration(time.Minute),
ConfirmPollPeriod: commoncfg.MustNewDuration(time.Second),
OCR2CachePollPeriod: commoncfg.MustNewDuration(time.Minute),
OCR2CacheTTL: commoncfg.MustNewDuration(time.Hour),
TxTimeout: commoncfg.MustNewDuration(time.Hour),
TxRetryTimeout: commoncfg.MustNewDuration(time.Minute),
TxConfirmTimeout: commoncfg.MustNewDuration(time.Second),
SkipPreflight: ptr(true),
Commitment: ptr("banana"),
MaxRetries: ptr[int64](7),
FeeEstimatorMode: ptr("fixed"),
ComputeUnitPriceMax: ptr[uint64](1000),
ComputeUnitPriceMin: ptr[uint64](10),
ComputeUnitPriceDefault: ptr[uint64](100),
FeeBumpPeriod: commoncfg.MustNewDuration(time.Minute),
BlockHistoryPollPeriod: commoncfg.MustNewDuration(time.Minute),
},
Nodes: []*solcfg.Node{
{Name: ptr("primary"), URL: commoncfg.MustParseURL("http://solana.web")},
{Name: ptr("foo"), URL: commoncfg.MustParseURL("http://solana.foo")},
{Name: ptr("bar"), URL: commoncfg.MustParseURL("http://solana.bar")},
},
},
}`
$DIR/core/services/chainlink/config_test.go: `full.Starknet = []*stkcfg.TOMLConfig{
{
ChainID: ptr("foobar"),
Enabled: ptr(true),
Chain: stkcfg.Chain{
OCR2CachePollPeriod: commoncfg.MustNewDuration(6 * time.Hour),
OCR2CacheTTL: commoncfg.MustNewDuration(3 * time.Minute),
RequestTimeout: commoncfg.MustNewDuration(time.Minute + 3*time.Second),
TxTimeout: commoncfg.MustNewDuration(13 * time.Second),
ConfirmationPoll: commoncfg.MustNewDuration(42 * time.Second),
},
FeederURL: commoncfg.MustParseURL("http://feeder.url"),
Nodes: []*stkcfg.Node{
{Name: ptr("primary"), URL: commoncfg.MustParseURL("http://stark.node"), APIKey: ptr("key")},
},
},
}`
$DIR/core/services/chainlink/config_test.go: `full.Cosmos = []*coscfg.TOMLConfig{
{
ChainID: ptr("Malaga-420"),
Enabled: ptr(true),
Chain: coscfg.Chain{
Bech32Prefix: ptr("wasm"),
BlockRate: commoncfg.MustNewDuration(time.Minute),
BlocksUntilTxTimeout: ptr[int64](12),
ConfirmPollPeriod: commoncfg.MustNewDuration(time.Second),
FallbackGasPrice: mustDecimal("0.001"),
GasToken: ptr("ucosm"),
GasLimitMultiplier: mustDecimal("1.2"),
MaxMsgsPerBatch: ptr[int64](17),
OCR2CachePollPeriod: commoncfg.MustNewDuration(time.Minute),
OCR2CacheTTL: commoncfg.MustNewDuration(time.Hour),
TxMsgTimeout: commoncfg.MustNewDuration(time.Second),
},
Nodes: []*coscfg.Node{
{Name: ptr("primary"), TendermintURL: commoncfg.MustParseURL("http://tender.mint")},
{Name: ptr("foo"), TendermintURL: commoncfg.MustParseURL("http://foo.url")},
{Name: ptr("bar"), TendermintURL: commoncfg.MustParseURL("http://bar.web")},
},
},
}`
$DIR/core/services/chainlink/config_test.go: `full.Mercury = toml.Mercury{
Cache: toml.MercuryCache{
LatestReportTTL: commoncfg.MustNewDuration(100 * time.Second),
MaxStaleAge: commoncfg.MustNewDuration(101 * time.Second),
LatestReportDeadline: commoncfg.MustNewDuration(102 * time.Second),
},
TLS: toml.MercuryTLS{
CertFile: ptr("/path/to/cert.pem"),
},
Transmitter: toml.MercuryTransmitter{
TransmitQueueMaxSize: ptr(uint32(123)),
TransmitTimeout: commoncfg.MustNewDuration(234 * time.Second),
},
}`
$DIR/core/services/chainlink/config_test.go: `t.Run(tt.name, func(t *testing.T) {
s, err := tt.config.TOMLString()
require.NoError(t, err)
assert.Equal(t, tt.exp, s, diff.Diff(tt.exp, s))
var got Config
require.NoError(t, config.DecodeTOML(strings.NewReader(s), &got))
ts, err := got.TOMLString()
require.NoError(t, err)
assert.Equal(t, tt.config, got, diff.Diff(s, ts))
})`
$DIR/core/services/chainlink/config_test.go: `got.EVM[c].Workflow.FromAddress = &addr`
$DIR/core/services/chainlink/config_test.go: `got.EVM[c].Workflow.ForwarderAddress = &addr`
$DIR/core/services/chainlink/config_test.go: `got.EVM[c].Nodes[n].WSURL = new(commoncfg.URL)`
$DIR/core/services/chainlink/config_test.go: `got.EVM[c].Nodes[n].SendOnly = ptr(true)`
$DIR/core/services/chainlink/config_test.go: `got.EVM[c].Nodes[n].Order = ptr(int32(100))`
$DIR/core/services/chainlink/config_test.go: `got.EVM[c].Transactions.AutoPurge.Threshold = ptr(uint32(0))`
$DIR/core/services/chainlink/config_test.go: `got.EVM[c].Transactions.AutoPurge.MinAttempts = ptr(uint32(0))`
$DIR/core/services/chainlink/config_test.go: `got.EVM[c].Transactions.AutoPurge.DetectionApiUrl = new(commoncfg.URL)`
$DIR/core/services/chainlink/config_test.go: `t.Run(tt.name, func(t *testing.T) {
var c Config
require.NoError(t, config.DecodeTOML(strings.NewReader(tt.toml), &c))
c.setDefaults()
assertValidationError(t, &c, tt.exp)
})`
$DIR/core/services/chainlink/config_test.go: `c.setDefaults()`
$DIR/core/services/chainlink/config_test.go: `assertValidationError(t, &c, tt.exp)`
$DIR/core/services/chainlink/config_test.go: `t.Run(tt.name, func(t *testing.T) {
lggr, observed := logger.TestLoggerObserved(t, zapcore.InfoLevel)
opts := GeneralConfigOpts{
SkipEnv: true,
ConfigStrings: []string{tt.inputConfig},
SecretsStrings: []string{tt.inputSecrets},
}
c, err := opts.New()
require.NoError(t, err)
c.LogConfiguration(lggr.Infof, lggr.Warnf)
inputLogs := observed.FilterMessageSnippet(secrets).All()
if assert.Len(t, inputLogs, 1) {
assert.Equal(t, zapcore.InfoLevel, inputLogs[0].Level)
got := strings.TrimPrefix(inputLogs[0].Message, secrets)
got = strings.TrimSuffix(got, "\n")
assert.Equal(t, tt.wantSecrets, got)
}
inputLogs = observed.FilterMessageSnippet(input).All()
if assert.Len(t, inputLogs, 1) {
assert.Equal(t, zapcore.InfoLevel, inputLogs[0].Level)
got := strings.TrimPrefix(inputLogs[0].Message, input)
got = strings.TrimSuffix(got, "\n")
assert.Equal(t, tt.wantConfig, got)
}
inputLogs = observed.FilterMessageSnippet(effective).All()
if assert.Len(t, inputLogs, 1) {
assert.Equal(t, zapcore.InfoLevel, inputLogs[0].Level)
got := strings.TrimPrefix(inputLogs[0].Message, effective)
got = strings.TrimSuffix(got, "\n")
assert.Equal(t, tt.wantEffective, got)
}
inputLogs = observed.FilterMessageSnippet(warning).All()
if tt.wantWarning != "" && assert.Len(t, inputLogs, 1) {
assert.Equal(t, zapcore.WarnLevel, inputLogs[0].Level)
got := strings.TrimPrefix(inputLogs[0].Message, warning)
got = strings.TrimSuffix(got, "\n")
assert.Equal(t, tt.wantWarning, got)
}
})`
$DIR/core/services/chainlink/config_test.go: `c.LogConfiguration(lggr.Infof, lggr.Warnf)`
$DIR/core/services/chainlink/config_test.go: `got = strings.TrimSuffix(got, "\n")`
$DIR/core/services/chainlink/config_test.go: `inputLogs = observed.FilterMessageSnippet(input).All()`
$DIR/core/services/chainlink/config_test.go: `got = strings.TrimSuffix(got, "\n")`
$DIR/core/services/chainlink/config_test.go: `inputLogs = observed.FilterMessageSnippet(effective).All()`
$DIR/core/services/chainlink/config_test.go: `got = strings.TrimSuffix(got, "\n")`
$DIR/core/services/chainlink/config_test.go: `inputLogs = observed.FilterMessageSnippet(warning).All()`
$DIR/core/services/chainlink/config_test.go: `got = strings.TrimSuffix(got, "\n")`
$DIR/core/services/chainlink/config_test.go: `t.Setenv("CL_DATABASE_URL", DBURL_OVERRIDE)`
$DIR/core/services/chainlink/config_test.go: `c.SetPasswords(ptr(PWD_OVERRIDE), nil)`
$DIR/core/services/chainlink/config_test.go: `t.Run(tt.name, func(t *testing.T) {
var s Secrets
require.NoError(t, config.DecodeTOML(strings.NewReader(tt.toml), &s))
assertValidationError(t, &s, tt.exp)
})`
$DIR/core/services/chainlink/config_test.go: `assertValidationError(t, &s, tt.exp)`
$DIR/core/services/chainlink/config_test.go: `c.EVM = evmcfg.EVMConfigs{{ChainID: ubig.NewI(99999133712345)}}`
$DIR/core/services/chainlink/config_test.go: `c.Cosmos = coscfg.TOMLConfigs{{ChainID: ptr("unknown cosmos chain")}}`
$DIR/core/services/chainlink/config_test.go: `c.Solana = solcfg.TOMLConfigs{{ChainID: ptr("unknown solana chain")}}`
$DIR/core/services/chainlink/config_test.go: `c.Starknet = stkcfg.TOMLConfigs{{ChainID: ptr("unknown starknet chain")}}`
$DIR/core/services/chainlink/config_test.go: `c.setDefaults()`
$DIR/core/services/chainlink/config_test.go: `t.Setenv("LOG_LEVEL", "warn")`
$DIR/core/services/chainlink/config_test.go: `t.Setenv("DATABASE_URL", "foo")`
$DIR/core/services/chainlink/config_test.go: `t.Setenv("GAS_UPDATER_ENABLED", "true")`
$DIR/core/services/chainlink/config_test.go: `t.Setenv("ETH_GAS_BUMP_TX_DEPTH", "7")`
$DIR/core/services/chainlink/config_test.go: `t.Run(tt.name, func(t *testing.T) {
var c Config
for _, fs := range tt.from {
var f Config
require.NoError(t, config.DecodeTOML(strings.NewReader(fs), &f))
require.NoError(t, c.SetFrom(&f))
}
ts, err := c.TOMLString()
require.NoError(t, err)
assert.Equal(t, tt.exp, ts)
})`
$DIR/core/services/chainlink/config_test.go: `t.Run(tt.name, func(t *testing.T) {
err := tt.config.warnings()
if len(tt.expectedErrors) == 0 {
assert.NoError(t, err)
} else {
for _, expectedErr := range tt.expectedErrors {
assert.Contains(t, err.Error(), expectedErr)
}
}
})`
$DIR/core/services/chainlink/config_test.go: `.MustNewDuration(time.Second * 0)`
$DIR/core/services/chainlink/config_test.go: `.MustNewDuration(time.Second)`
$DIR/core/services/chainlink/config_test.go: `.MustNewDuration(time.Minute)`
$DIR/core/services/chainlink/config_test.go: `.MustNewDuration(time.Hour)`
$DIR/core/services/chainlink/config_test.go: `.MakePeerID(s)`
$DIR/core/services/chainlink/config_test.go: `.NewFromString(s)`
$DIR/core/services/chainlink/config_test.go: `.NewEIP55Address(s)`
$DIR/core/services/chainlink/config_test.go: `.MustNewDuration(10 * time.Second)`
$DIR/core/services/chainlink/config_test.go: `.MustNewDuration(time.Minute)`
$DIR/core/services/chainlink/config_test.go: `.MustNewDuration(time.Hour)`
$DIR/core/services/chainlink/config_test.go: `.MustNewDuration(time.Second)`
$DIR/core/services/chainlink/config_test.go: `.MustNewDuration(time.Minute)`
$DIR/core/services/chainlink/config_test.go: `.MustNewDuration(5 * time.Minute)`
$DIR/core/services/chainlink/config_test.go: `.MustNewDuration(2 * time.Minute)`
$DIR/core/services/chainlink/config_test.go: `.MustNewDuration(time.Minute)`
$DIR/core/services/chainlink/config_test.go: `.MustNewDuration(5 * time.Second)`
$DIR/core/services/chainlink/config_test.go: `.LogLevel(zapcore.DPanicLevel)`
$DIR/core/services/chainlink/config_test.go: `.MustNewDuration(10 * time.Second)`
$DIR/core/services/chainlink/config_test.go: `.MustNewDuration(time.Minute)`
$DIR/core/services/chainlink/config_test.go: `.MustNewDuration(time.Hour)`
$DIR/core/services/chainlink/config_test.go: `.MustNewDuration(7 * 24 * time.Hour)`
$DIR/core/services/chainlink/config_test.go: `.FileSize(uint64(32770))`
$DIR/core/services/chainlink/config_test.go: `.MustNewDuration(15 * time.Second)`
$DIR/core/services/chainlink/config_test.go: `.MustNewDuration(15 * time.Minute)`
$DIR/core/services/chainlink/config_test.go: `.MustNewDuration(2 * time.Minute)`
$DIR/core/services/chainlink/config_test.go: `.MustNewDuration(240 * time.Hour)`
$DIR/core/services/chainlink/config_test.go: `.MustNewDuration(0 * time.Second)`
$DIR/core/services/chainlink/config_test.go: `.MustNewDuration(2 * time.Minute)`
$DIR/core/services/chainlink/config_test.go: `.MustNewDuration(time.Second)`
$DIR/core/services/chainlink/config_test.go: `.MustNewDuration(time.Minute)`
$DIR/core/services/chainlink/config_test.go: `.MustNewDuration(time.Hour)`
$DIR/core/services/chainlink/config_test.go: `.MustNewDuration(4 * time.Hour)`
$DIR/core/services/chainlink/config_test.go: `.MustNewDuration(7 * 24 * time.Hour)`
$DIR/core/services/chainlink/config_test.go: `.MustNewDuration(time.Minute)`
$DIR/core/services/chainlink/config_test.go: `.MustNewDuration(3 * time.Second)`
$DIR/core/services/chainlink/config_test.go: `.MustNewDuration(time.Hour)`
$DIR/core/services/chainlink/config_test.go: `.MustNewDuration(time.Minute)`
$DIR/core/services/chainlink/config_test.go: `.MustNewDuration(time.Minute)`
$DIR/core/services/chainlink/config_test.go: `.MustNewDuration(8 * time.Second)`
$DIR/core/services/chainlink/config_test.go: `.MustSha256HashFromHex("7a5f66bbe6594259325bf2b4f5b1a9c9")`
$DIR/core/services/chainlink/config_test.go: `.MustNewDuration(11 * time.Second)`
$DIR/core/services/chainlink/config_test.go: `.MustNewDuration(3 * time.Second)`
$DIR/core/services/chainlink/config_test.go: `.MustNewDuration(time.Hour)`
$DIR/core/services/chainlink/config_test.go: `.MustNewDuration(time.Minute)`
$DIR/core/services/chainlink/config_test.go: `.MustSha256HashFromHex("acdd42797a8b921b2910497badc50006")`
$DIR/core/services/chainlink/config_test.go: `.MustEIP55Address("0xa0788FC17B1dEe36f057c42B6F373A34B014687e")`
$DIR/core/services/chainlink/config_test.go: `.MustNewDuration(time.Minute)`
$DIR/core/services/chainlink/config_test.go: `.MustNewDuration(time.Second)`
$DIR/core/services/chainlink/config_test.go: `.MustNewDuration(time.Minute)`
$DIR/core/services/chainlink/config_test.go: `.MustNewDuration(2 * time.Second)`
$DIR/core/services/chainlink/config_test.go: `.MustNewDuration(time.Hour)`
$DIR/core/services/chainlink/config_test.go: `.MustNewDuration(time.Minute)`
$DIR/core/services/chainlink/config_test.go: `.MustNewDuration(12 * time.Second)`
$DIR/core/services/chainlink/config_test.go: `.MustNewDuration(13 * time.Second)`
$DIR/core/services/chainlink/config_test.go: `.NewI(1)`
$DIR/core/services/chainlink/config_test.go: `.NewChainTypeConfig("Optimism")`
$DIR/core/services/chainlink/config_test.go: `.NewWeiI(100)`
$DIR/core/services/chainlink/config_test.go: `.NewWeiI(math.MaxInt64)`
$DIR/core/services/chainlink/config_test.go: `.NewWeiI(2)`
$DIR/core/services/chainlink/config_test.go: `.NewWeiI(1)`
$DIR/core/services/chainlink/config_test.go: `.NewWeiI(math.MaxInt64)`
$DIR/core/services/chainlink/config_test.go: `.NewWei(mustHexToBig(t, "FFFFFFFFFFFF"))`
$DIR/core/services/chainlink/config_test.go: `.NewWeiI(13)`
$DIR/core/services/chainlink/config_test.go: `.NewWei(mustHexToBig(t, "FFFFFFFFFFFFFFFFFFFFFFFF"))`
$DIR/core/services/chainlink/config_test.go: `.NewLinkFromJuels(math.MaxInt64)`
$DIR/core/services/chainlink/config_test.go: `.MustNewDuration(time.Hour)`
$DIR/core/services/chainlink/config_test.go: `.MustNewDuration(time.Second)`
$DIR/core/services/chainlink/config_test.go: `.MustNewDuration(time.Minute)`
$DIR/core/services/chainlink/config_test.go: `.MustNewDuration(time.Second)`
$DIR/core/services/chainlink/config_test.go: `.MustNewDuration(time.Minute)`
$DIR/core/services/chainlink/config_test.go: `.MustNewDuration(time.Hour)`
$DIR/core/services/chainlink/config_test.go: `.MustNewDuration(time.Hour)`
$DIR/core/services/chainlink/config_test.go: `.MustNewDuration(time.Minute)`
$DIR/core/services/chainlink/config_test.go: `.MustNewDuration(time.Second)`
$DIR/core/services/chainlink/config_test.go: `.MustNewDuration(time.Minute)`
$DIR/core/services/chainlink/config_test.go: `.MustNewDuration(time.Minute)`
$DIR/core/services/chainlink/config_test.go: `.MustParseURL("http://solana.web")`
$DIR/core/services/chainlink/config_test.go: `.MustParseURL("http://solana.foo")`
$DIR/core/services/chainlink/config_test.go: `.MustParseURL("http://solana.bar")`
$DIR/core/services/chainlink/config_test.go: `.MustNewDuration(6 * time.Hour)`
$DIR/core/services/chainlink/config_test.go: `.MustNewDuration(3 * time.Minute)`
$DIR/core/services/chainlink/config_test.go: `.MustNewDuration(time.Minute + 3*time.Second)`
$DIR/core/services/chainlink/config_test.go: `.MustNewDuration(13 * time.Second)`
$DIR/core/services/chainlink/config_test.go: `.MustNewDuration(42 * time.Second)`
$DIR/core/services/chainlink/config_test.go: `.MustParseURL("http://feeder.url")`
$DIR/core/services/chainlink/config_test.go: `.MustParseURL("http://stark.node")`
$DIR/core/services/chainlink/config_test.go: `.MustNewDuration(time.Minute)`
$DIR/core/services/chainlink/config_test.go: `.MustNewDuration(time.Second)`
$DIR/core/services/chainlink/config_test.go: `.MustNewDuration(time.Minute)`
$DIR/core/services/chainlink/config_test.go: `.MustNewDuration(time.Hour)`
$DIR/core/services/chainlink/config_test.go: `.MustNewDuration(time.Second)`
$DIR/core/services/chainlink/config_test.go: `.MustParseURL("http://tender.mint")`
$DIR/core/services/chainlink/config_test.go: `.MustParseURL("http://foo.url")`
$DIR/core/services/chainlink/config_test.go: `.MustParseURL("http://bar.web")`
$DIR/core/services/chainlink/config_test.go: `.MustNewDuration(100 * time.Second)`
$DIR/core/services/chainlink/config_test.go: `.MustNewDuration(101 * time.Second)`
$DIR/core/services/chainlink/config_test.go: `.MustNewDuration(102 * time.Second)`
$DIR/core/services/chainlink/config_test.go: `.MustNewDuration(234 * time.Second)`
$DIR/core/services/chainlink/config_test.go: `.Run(tt.name, func(t *testing.T) {
s, err := tt.config.TOMLString()
require.NoError(t, err)
assert.Equal(t, tt.exp, s, diff.Diff(tt.exp, s))
var got Config
require.NoError(t, config.DecodeTOML(strings.NewReader(s), &got))
ts, err := got.TOMLString()
require.NoError(t, err)
assert.Equal(t, tt.config, got, diff.Diff(s, ts))
})`
$DIR/core/services/chainlink/config_test.go: `.config.TOMLString()`
$DIR/core/services/chainlink/config_test.go: `.TOMLString()`
$DIR/core/services/chainlink/config_test.go: `.NewEIP55Address("0x2a3e23c6f242F5345320814aC8a1b4E58707D292")`
$DIR/core/services/chainlink/config_test.go: `.Run(tt.name, func(t *testing.T) {
var c Config
require.NoError(t, config.DecodeTOML(strings.NewReader(tt.toml), &c))
c.setDefaults()
assertValidationError(t, &c, tt.exp)
})`
$DIR/core/services/chainlink/config_test.go: `.setDefaults()`
$DIR/core/services/chainlink/config_test.go: `.Run(tt.name, func(t *testing.T) {
lggr, observed := logger.TestLoggerObserved(t, zapcore.InfoLevel)
opts := GeneralConfigOpts{
SkipEnv: true,
ConfigStrings: []string{tt.inputConfig},
SecretsStrings: []string{tt.inputSecrets},
}
c, err := opts.New()
require.NoError(t, err)
c.LogConfiguration(lggr.Infof, lggr.Warnf)
inputLogs := observed.FilterMessageSnippet(secrets).All()
if assert.Len(t, inputLogs, 1) {
assert.Equal(t, zapcore.InfoLevel, inputLogs[0].Level)
got := strings.TrimPrefix(inputLogs[0].Message, secrets)
got = strings.TrimSuffix(got, "\n")
assert.Equal(t, tt.wantSecrets, got)
}
inputLogs = observed.FilterMessageSnippet(input).All()
if assert.Len(t, inputLogs, 1) {
assert.Equal(t, zapcore.InfoLevel, inputLogs[0].Level)
got := strings.TrimPrefix(inputLogs[0].Message, input)
got = strings.TrimSuffix(got, "\n")
assert.Equal(t, tt.wantConfig, got)
}
inputLogs = observed.FilterMessageSnippet(effective).All()
if assert.Len(t, inputLogs, 1) {
assert.Equal(t, zapcore.InfoLevel, inputLogs[0].Level)
got := strings.TrimPrefix(inputLogs[0].Message, effective)
got = strings.TrimSuffix(got, "\n")
assert.Equal(t, tt.wantEffective, got)
}
inputLogs = observed.FilterMessageSnippet(warning).All()
if tt.wantWarning != "" && assert.Len(t, inputLogs, 1) {
assert.Equal(t, zapcore.WarnLevel, inputLogs[0].Level)
got := strings.TrimPrefix(inputLogs[0].Message, warning)
got = strings.TrimSuffix(got, "\n")
assert.Equal(t, tt.wantWarning, got)
}
})`
$DIR/core/services/chainlink/config_test.go: `.TestLoggerObserved(t, zapcore.InfoLevel)`
$DIR/core/services/chainlink/config_test.go: `.New()`
$DIR/core/services/chainlink/config_test.go: `.LogConfiguration(lggr.Infof, lggr.Warnf)`
$DIR/core/services/chainlink/config_test.go: `.FilterMessageSnippet(secrets)`
$DIR/core/services/chainlink/config_test.go: `.All()`
$DIR/core/services/chainlink/config_test.go: `.TrimPrefix(inputLogs[0].Message, secrets)`
$DIR/core/services/chainlink/config_test.go: `.TrimSuffix(got, "\n")`
$DIR/core/services/chainlink/config_test.go: `.FilterMessageSnippet(input)`
$DIR/core/services/chainlink/config_test.go: `.All()`
$DIR/core/services/chainlink/config_test.go: `.TrimPrefix(inputLogs[0].Message, input)`
$DIR/core/services/chainlink/config_test.go: `.TrimSuffix(got, "\n")`
$DIR/core/services/chainlink/config_test.go: `.FilterMessageSnippet(effective)`
$DIR/core/services/chainlink/config_test.go: `.All()`
$DIR/core/services/chainlink/config_test.go: `.TrimPrefix(inputLogs[0].Message, effective)`
$DIR/core/services/chainlink/config_test.go: `.TrimSuffix(got, "\n")`
$DIR/core/services/chainlink/config_test.go: `.FilterMessageSnippet(warning)`
$DIR/core/services/chainlink/config_test.go: `.All()`
$DIR/core/services/chainlink/config_test.go: `.TrimPrefix(inputLogs[0].Message, warning)`
$DIR/core/services/chainlink/config_test.go: `.TrimSuffix(got, "\n")`
$DIR/core/services/chainlink/config_test.go: `.New()`
$DIR/core/services/chainlink/config_test.go: `.New()`
$DIR/core/services/chainlink/config_test.go: `.Setenv("CL_DATABASE_URL", DBURL_OVERRIDE)`
$DIR/core/services/chainlink/config_test.go: `.New()`
$DIR/core/services/chainlink/config_test.go: `.SetPasswords(ptr(PWD_OVERRIDE), nil)`
$DIR/core/services/chainlink/config_test.go: `.Database()`
$DIR/core/services/chainlink/config_test.go: `.URL()`
$DIR/core/services/chainlink/config_test.go: `.String()`
$DIR/core/services/chainlink/config_test.go: `.Run(tt.name, func(t *testing.T) {
var s Secrets
require.NoError(t, config.DecodeTOML(strings.NewReader(tt.toml), &s))
assertValidationError(t, &s, tt.exp)
})`
$DIR/core/services/chainlink/config_test.go: `.NewI(99999133712345)`
$DIR/core/services/chainlink/config_test.go: `.setDefaults()`
$DIR/core/services/chainlink/config_test.go: `.TOMLString()`
$DIR/core/services/chainlink/config_test.go: `.Setenv("LOG_LEVEL", "warn")`
$DIR/core/services/chainlink/config_test.go: `.Setenv("DATABASE_URL", "foo")`
$DIR/core/services/chainlink/config_test.go: `.Setenv("GAS_UPDATER_ENABLED", "true")`
$DIR/core/services/chainlink/config_test.go: `.Setenv("ETH_GAS_BUMP_TX_DEPTH", "7")`
$DIR/core/services/chainlink/config_test.go: `.Run(tt.name, func(t *testing.T) {
var c Config
for _, fs := range tt.from {
var f Config
require.NoError(t, config.DecodeTOML(strings.NewReader(fs), &f))
require.NoError(t, c.SetFrom(&f))
}
ts, err := c.TOMLString()
require.NoError(t, err)
assert.Equal(t, tt.exp, ts)
})`
$DIR/core/services/chainlink/config_test.go: `.TOMLString()`
$DIR/core/services/chainlink/config_test.go: `.Run(tt.name, func(t *testing.T) {
err := tt.config.warnings()
if len(tt.expectedErrors) == 0 {
assert.NoError(t, err)
} else {
for _, expectedErr := range tt.expectedErrors {
assert.Contains(t, err.Error(), expectedErr)
}
}
})`
$DIR/core/services/chainlink/config_test.go: `.config.warnings()`
$DIR/core/services/chainlink/config_threshold_test.go: `.New()`
$DIR/core/services/chainlink/config_threshold_test.go: `.Threshold()`
$DIR/core/services/chainlink/config_threshold_test.go: `.ThresholdKeyShare()`
$DIR/core/services/chainlink/config_tracing_test.go: `.Attributes()`
$DIR/core/services/chainlink/config_web_server_test.go: `.New()`
$DIR/core/services/chainlink/config_web_server_test.go: `.WebServer()`
$DIR/core/services/chainlink/config_web_server_test.go: `.TLS()`
$DIR/core/services/chainlink/config_web_server_test.go: `.RateLimit()`
$DIR/core/services/chainlink/config_web_server_test.go: `.MFA()`
$DIR/core/services/chainlink/config_web_server_test.go: `.RPOrigin()`
$DIR/core/services/chainlink/relayer_chain_interoperators_test.go: `c.EVM[0] = &evmcfg.EVMConfig{
ChainID: evmChainID1,
Enabled: ptr(true),
Chain: cfg,
Nodes: evmcfg.EVMNodes{&node1_1, &node1_2},
}`
$DIR/core/services/chainlink/relayer_chain_interoperators_test.go: `c.EVM = append(c.EVM, &evmcfg.EVMConfig{
ChainID: evmChainID2,
Chain: evmcfg.Defaults(id2),
Enabled: ptr(true),
Nodes: evmcfg.EVMNodes{&node2_1},
})`
$DIR/core/services/chainlink/relayer_chain_interoperators_test.go: `c.Solana = solcfg.TOMLConfigs{
&solcfg.TOMLConfig{
ChainID: &solanaChainID1,
Enabled: ptr(true),
Chain: solcfg.Chain{},
Nodes: []*solcfg.Node{{
Name: ptr("solana chain 1 node 1"),
URL: ((*commonconfig.URL)(commonconfig.MustParseURL("http://localhost:8547").URL())),
}},
},
&solcfg.TOMLConfig{
ChainID: &solanaChainID2,
Enabled: ptr(true),
Chain: solcfg.Chain{},
Nodes: []*solcfg.Node{{
Name: ptr("solana chain 2 node 1"),
URL: ((*commonconfig.URL)(commonconfig.MustParseURL("http://localhost:8527").URL())),
}},
},
}`
$DIR/core/services/chainlink/relayer_chain_interoperators_test.go: `c.Starknet = stkcfg.TOMLConfigs{
&stkcfg.TOMLConfig{
ChainID: &starknetChainID1,
Enabled: ptr(true),
Chain: stkcfg.Chain{},
FeederURL: commonconfig.MustParseURL("http://feeder.url"),
Nodes: []*stkcfg.Node{
{
Name: ptr("starknet chain 1 node 1"),
URL: ((*commonconfig.URL)(commonconfig.MustParseURL("http://localhost:8547").URL())),
APIKey: ptr("key"),
},
{
Name: ptr("starknet chain 1 node 2"),
URL: ((*commonconfig.URL)(commonconfig.MustParseURL("http://localhost:8548").URL())),
APIKey: ptr("key"),
},
{
Name: ptr("starknet chain 1 node 3"),
URL: ((*commonconfig.URL)(commonconfig.MustParseURL("http://localhost:8549").URL())),
APIKey: ptr("key"),
},
},
},
&stkcfg.TOMLConfig{
ChainID: &starknetChainID2,
Enabled: ptr(true),
Chain: stkcfg.Chain{},
FeederURL: commonconfig.MustParseURL("http://feeder.url"),
Nodes: []*stkcfg.Node{
{
Name: ptr("starknet chain 2 node 1"),
URL: ((*commonconfig.URL)(commonconfig.MustParseURL("http://localhost:3547").URL())),
APIKey: ptr("key"),
},
},
},
}`
$DIR/core/services/chainlink/relayer_chain_interoperators_test.go: `c.Cosmos = coscfg.TOMLConfigs{
&coscfg.TOMLConfig{
ChainID: &cosmosChainID1,
Enabled: ptr(true),
Chain: coscfg.Chain{
GasLimitMultiplier: ptr(decimal.RequireFromString("1.55555")),
Bech32Prefix: ptr("wasm"),
GasToken: ptr("cosm"),
},
Nodes: coscfg.Nodes{
&coscfg.Node{
Name: ptr("cosmos chain 1 node 1"),
TendermintURL: (*commonconfig.URL)(commonconfig.MustParseURL("http://localhost:9548").URL()),
},
},
},
&coscfg.TOMLConfig{
ChainID: &cosmosChainID2,
Enabled: ptr(true),
Chain: coscfg.Chain{
GasLimitMultiplier: ptr(decimal.RequireFromString("0.777")),
Bech32Prefix: ptr("wasm"),
GasToken: ptr("cosm"),
},
Nodes: coscfg.Nodes{
&coscfg.Node{
Name: ptr("cosmos chain 2 node 1"),
TendermintURL: (*commonconfig.URL)(commonconfig.MustParseURL("http://localhost:9598").URL()),
},
},
},
}`
$DIR/core/services/chainlink/relayer_chain_interoperators_test.go: `t.Run(tt.name, func(t *testing.T) {
t.Parallel()
var cr *chainlink.CoreRelayerChainInteroperators
{
var err error
cr, err = chainlink.NewCoreRelayerChainInteroperators(tt.initFuncs...)
require.NoError(t, err)
expectedChainCnt := tt.expectedEVMChainCnt + tt.expectedCosmosChainCnt + tt.expectedSolanaChainCnt + tt.expectedStarknetChainCnt
allChainsStats, cnt, err := cr.ChainStatuses(testctx, 0, 0)
assert.NoError(t, err)
assert.Len(t, allChainsStats, expectedChainCnt)
assert.Equal(t, cnt, len(allChainsStats))
assert.Len(t, cr.Slice(), expectedChainCnt)
// should be one relayer per chain and one service per relayer
assert.Len(t, cr.Slice(), expectedChainCnt)
assert.Len(t, cr.Services(), expectedChainCnt)
expectedNodeCnt := tt.expectedEVMNodeCnt + tt.expectedCosmosNodeCnt + tt.expectedSolanaNodeCnt + tt.expectedStarknetNodeCnt
allNodeStats, cnt, err := cr.NodeStatuses(testctx, 0, 0)
assert.NoError(t, err)
assert.Len(t, allNodeStats, expectedNodeCnt)
assert.Equal(t, cnt, len(allNodeStats))
}
gotRelayerNetworks := make(map[string]struct{})
for relayNetwork := range types.SupportedRelays {
var expectedChainCnt, expectedNodeCnt int
switch relayNetwork {
case types.NetworkEVM:
expectedChainCnt, expectedNodeCnt = tt.expectedEVMChainCnt, tt.expectedEVMNodeCnt
case types.NetworkCosmos:
expectedChainCnt, expectedNodeCnt = tt.expectedCosmosChainCnt, tt.expectedCosmosNodeCnt
case types.NetworkSolana:
expectedChainCnt, expectedNodeCnt = tt.expectedSolanaChainCnt, tt.expectedSolanaNodeCnt
case types.NetworkStarkNet:
expectedChainCnt, expectedNodeCnt = tt.expectedStarknetChainCnt, tt.expectedStarknetNodeCnt
default:
require.Fail(t, "untested relay network", relayNetwork)
}
interops := cr.List(chainlink.FilterRelayersByType(relayNetwork))
assert.Len(t, cr.List(chainlink.FilterRelayersByType(relayNetwork)).Slice(), expectedChainCnt)
if len(interops.Slice()) > 0 {
gotRelayerNetworks[relayNetwork] = struct{}{}
}
// check legacy chains for those that haven't migrated fully to the loop relayer interface
if relayNetwork == types.NetworkEVM {
_, wantEVM := tt.expectedRelayerNetworks[types.NetworkEVM]
if wantEVM {
assert.Len(t, cr.LegacyEVMChains().Slice(), expectedChainCnt)
} else {
assert.Nil(t, cr.LegacyEVMChains())
}
}
if relayNetwork == types.NetworkCosmos {
_, wantCosmos := tt.expectedRelayerNetworks[types.NetworkCosmos]
if wantCosmos {
assert.Len(t, cr.LegacyCosmosChains().Slice(), expectedChainCnt)
} else {
assert.Nil(t, cr.LegacyCosmosChains())
}
}
nodesStats, cnt, err := interops.NodeStatuses(testctx, 0, 0)
assert.NoError(t, err)
assert.Len(t, nodesStats, expectedNodeCnt)
assert.Equal(t, cnt, len(nodesStats))
}
assert.EqualValues(t, gotRelayerNetworks, tt.expectedRelayerNetworks)
allRelayerIds := [][]types.RelayID{
tt.expectedEVMRelayerIds,
tt.expectedCosmosRelayerIds,
tt.expectedSolanaRelayerIds,
tt.expectedStarknetRelayerIds,
}
for _, chainSpecificRelayerIds := range allRelayerIds {
for _, wantId := range chainSpecificRelayerIds {
lr, err := cr.Get(wantId)
assert.NotNil(t, lr)
assert.NoError(t, err)
stat, err := cr.ChainStatus(testctx, wantId)
assert.NoError(t, err)
assert.Equal(t, wantId.ChainID, stat.ID)
// check legacy chains for evm and cosmos
if wantId.Network == types.NetworkEVM {
c, err := cr.LegacyEVMChains().Get(wantId.ChainID)
assert.NoError(t, err)
assert.NotNil(t, c)
assert.Equal(t, wantId.ChainID, c.ID().String())
}
if wantId.Network == types.NetworkCosmos {
c, err := cr.LegacyCosmosChains().Get(wantId.ChainID)
assert.NoError(t, err)
assert.NotNil(t, c)
assert.Equal(t, wantId.ChainID, c.ID())
}
}
}
expectedMissing := types.RelayID{Network: types.NetworkCosmos, ChainID: "not a chain id"}
unwanted, err := cr.Get(expectedMissing)
assert.Nil(t, unwanted)
assert.ErrorIs(t, err, chainlink.ErrNoSuchRelayer)
})`
$DIR/core/services/chainlink/relayer_chain_interoperators_test.go: `cr, err = chainlink.NewCoreRelayerChainInteroperators(tt.initFuncs...)`
$DIR/core/services/chainlink/relayer_chain_interoperators_test.go: `expectedChainCnt, expectedNodeCnt = tt.expectedEVMChainCnt, tt.expectedEVMNodeCnt`
$DIR/core/services/chainlink/relayer_chain_interoperators_test.go: `expectedChainCnt, expectedNodeCnt = tt.expectedCosmosChainCnt, tt.expectedCosmosNodeCnt`
$DIR/core/services/chainlink/relayer_chain_interoperators_test.go: `expectedChainCnt, expectedNodeCnt = tt.expectedSolanaChainCnt, tt.expectedSolanaNodeCnt`
$DIR/core/services/chainlink/relayer_chain_interoperators_test.go: `expectedChainCnt, expectedNodeCnt = tt.expectedStarknetChainCnt, tt.expectedStarknetNodeCnt`
$DIR/core/services/chainlink/relayer_chain_interoperators_test.go: `gotRelayerNetworks[relayNetwork] = struct{}{}`
$DIR/core/services/chainlink/relayer_chain_interoperators_test.go: `.New(big.NewInt(1))`
$DIR/core/services/chainlink/relayer_chain_interoperators_test.go: `.NewInt(1)`
$DIR/core/services/chainlink/relayer_chain_interoperators_test.go: `.New(big.NewInt(2))`
$DIR/core/services/chainlink/relayer_chain_interoperators_test.go: `.NewInt(2)`
$DIR/core/services/chainlink/relayer_chain_interoperators_test.go: `.NewGeneralConfig(t, func(c *chainlink.Config, s *chainlink.Secrets) {
cfg := evmcfg.Defaults(evmChainID1)
node1_1 := evmcfg.Node{
Name: ptr("Test node chain1:1"),
WSURL: commonconfig.MustParseURL("ws://localhost:8546"),
HTTPURL: commonconfig.MustParseURL("http://localhost:8546"),
SendOnly: ptr(false),
Order: ptr(int32(15)),
}
node1_2 := evmcfg.Node{
Name: ptr("Test node chain1:2"),
WSURL: commonconfig.MustParseURL("ws://localhost:8547"),
HTTPURL: commonconfig.MustParseURL("http://localhost:8547"),
SendOnly: ptr(false),
Order: ptr(int32(36)),
}
node2_1 := evmcfg.Node{
Name: ptr("Test node chain2:1"),
WSURL: commonconfig.MustParseURL("ws://localhost:8547"),
HTTPURL: commonconfig.MustParseURL("http://localhost:8547"),
SendOnly: ptr(false),
Order: ptr(int32(11)),
}
c.EVM[0] = &evmcfg.EVMConfig{
ChainID: evmChainID1,
Enabled: ptr(true),
Chain: cfg,
Nodes: evmcfg.EVMNodes{&node1_1, &node1_2},
}
id2 := ubig.New(big.NewInt(2))
c.EVM = append(c.EVM, &evmcfg.EVMConfig{
ChainID: evmChainID2,
Chain: evmcfg.Defaults(id2),
Enabled: ptr(true),
Nodes: evmcfg.EVMNodes{&node2_1},
})
c.Solana = solcfg.TOMLConfigs{
&solcfg.TOMLConfig{
ChainID: &solanaChainID1,
Enabled: ptr(true),
Chain: solcfg.Chain{},
Nodes: []*solcfg.Node{{
Name: ptr("solana chain 1 node 1"),
URL: ((*commonconfig.URL)(commonconfig.MustParseURL("http://localhost:8547").URL())),
}},
},
&solcfg.TOMLConfig{
ChainID: &solanaChainID2,
Enabled: ptr(true),
Chain: solcfg.Chain{},
Nodes: []*solcfg.Node{{
Name: ptr("solana chain 2 node 1"),
URL: ((*commonconfig.URL)(commonconfig.MustParseURL("http://localhost:8527").URL())),
}},
},
}
c.Starknet = stkcfg.TOMLConfigs{
&stkcfg.TOMLConfig{
ChainID: &starknetChainID1,
Enabled: ptr(true),
Chain: stkcfg.Chain{},
FeederURL: commonconfig.MustParseURL("http://feeder.url"),
Nodes: []*stkcfg.Node{
{
Name: ptr("starknet chain 1 node 1"),
URL: ((*commonconfig.URL)(commonconfig.MustParseURL("http://localhost:8547").URL())),
APIKey: ptr("key"),
},
{
Name: ptr("starknet chain 1 node 2"),
URL: ((*commonconfig.URL)(commonconfig.MustParseURL("http://localhost:8548").URL())),
APIKey: ptr("key"),
},
{
Name: ptr("starknet chain 1 node 3"),
URL: ((*commonconfig.URL)(commonconfig.MustParseURL("http://localhost:8549").URL())),
APIKey: ptr("key"),
},
},
},
&stkcfg.TOMLConfig{
ChainID: &starknetChainID2,
Enabled: ptr(true),
Chain: stkcfg.Chain{},
FeederURL: commonconfig.MustParseURL("http://feeder.url"),
Nodes: []*stkcfg.Node{
{
Name: ptr("starknet chain 2 node 1"),
URL: ((*commonconfig.URL)(commonconfig.MustParseURL("http://localhost:3547").URL())),
APIKey: ptr("key"),
},
},
},
}
c.Cosmos = coscfg.TOMLConfigs{
&coscfg.TOMLConfig{
ChainID: &cosmosChainID1,
Enabled: ptr(true),
Chain: coscfg.Chain{
GasLimitMultiplier: ptr(decimal.RequireFromString("1.55555")),
Bech32Prefix: ptr("wasm"),
GasToken: ptr("cosm"),
},
Nodes: coscfg.Nodes{
&coscfg.Node{
Name: ptr("cosmos chain 1 node 1"),
TendermintURL: (*commonconfig.URL)(commonconfig.MustParseURL("http://localhost:9548").URL()),
},
},
},
&coscfg.TOMLConfig{
ChainID: &cosmosChainID2,
Enabled: ptr(true),
Chain: coscfg.Chain{
GasLimitMultiplier: ptr(decimal.RequireFromString("0.777")),
Bech32Prefix: ptr("wasm"),
GasToken: ptr("cosm"),
},
Nodes: coscfg.Nodes{
&coscfg.Node{
Name: ptr("cosmos chain 2 node 1"),
TendermintURL: (*commonconfig.URL)(commonconfig.MustParseURL("http://localhost:9598").URL()),
},
},
},
}
})`
$DIR/core/services/chainlink/relayer_chain_interoperators_test.go: `.Defaults(evmChainID1)`
$DIR/core/services/chainlink/relayer_chain_interoperators_test.go: `.MustParseURL("ws://localhost:8546")`
$DIR/core/services/chainlink/relayer_chain_interoperators_test.go: `.MustParseURL("http://localhost:8546")`
$DIR/core/services/chainlink/relayer_chain_interoperators_test.go: `.MustParseURL("ws://localhost:8547")`
$DIR/core/services/chainlink/relayer_chain_interoperators_test.go: `.MustParseURL("http://localhost:8547")`
$DIR/core/services/chainlink/relayer_chain_interoperators_test.go: `.MustParseURL("ws://localhost:8547")`
$DIR/core/services/chainlink/relayer_chain_interoperators_test.go: `.MustParseURL("http://localhost:8547")`
$DIR/core/services/chainlink/relayer_chain_interoperators_test.go: `.New(big.NewInt(2))`
$DIR/core/services/chainlink/relayer_chain_interoperators_test.go: `.NewInt(2)`
$DIR/core/services/chainlink/relayer_chain_interoperators_test.go: `.Defaults(id2)`
$DIR/core/services/chainlink/relayer_chain_interoperators_test.go: `.MustParseURL("http://localhost:8547")`
$DIR/core/services/chainlink/relayer_chain_interoperators_test.go: `.URL()`
$DIR/core/services/chainlink/relayer_chain_interoperators_test.go: `.MustParseURL("http://localhost:8527")`
$DIR/core/services/chainlink/relayer_chain_interoperators_test.go: `.URL()`
$DIR/core/services/chainlink/relayer_chain_interoperators_test.go: `.MustParseURL("http://feeder.url")`
$DIR/core/services/chainlink/relayer_chain_interoperators_test.go: `.MustParseURL("http://localhost:8547")`
$DIR/core/services/chainlink/relayer_chain_interoperators_test.go: `.URL()`
$DIR/core/services/chainlink/relayer_chain_interoperators_test.go: `.MustParseURL("http://localhost:8548")`
$DIR/core/services/chainlink/relayer_chain_interoperators_test.go: `.URL()`
$DIR/core/services/chainlink/relayer_chain_interoperators_test.go: `.MustParseURL("http://localhost:8549")`
$DIR/core/services/chainlink/relayer_chain_interoperators_test.go: `.URL()`
$DIR/core/services/chainlink/relayer_chain_interoperators_test.go: `.MustParseURL("http://feeder.url")`
$DIR/core/services/chainlink/relayer_chain_interoperators_test.go: `.MustParseURL("http://localhost:3547")`
$DIR/core/services/chainlink/relayer_chain_interoperators_test.go: `.URL()`
$DIR/core/services/chainlink/relayer_chain_interoperators_test.go: `.RequireFromString("1.55555")`
$DIR/core/services/chainlink/relayer_chain_interoperators_test.go: `.MustParseURL("http://localhost:9548")`
$DIR/core/services/chainlink/relayer_chain_interoperators_test.go: `.URL()`
$DIR/core/services/chainlink/relayer_chain_interoperators_test.go: `.RequireFromString("0.777")`
$DIR/core/services/chainlink/relayer_chain_interoperators_test.go: `.MustParseURL("http://localhost:9598")`
$DIR/core/services/chainlink/relayer_chain_interoperators_test.go: `.URL()`
$DIR/core/services/chainlink/relayer_chain_interoperators_test.go: `.NewSqlxDB(t)`
$DIR/core/services/chainlink/relayer_chain_interoperators_test.go: `.NewKeyStore(t, db)`
$DIR/core/services/chainlink/relayer_chain_interoperators_test.go: `.TestLogger(t)`
$DIR/core/services/chainlink/relayer_chain_interoperators_test.go: `.NewLoopRegistry(lggr, nil)`
$DIR/core/services/chainlink/relayer_chain_interoperators_test.go: `.Context(t)`
$DIR/core/services/chainlink/relayer_chain_interoperators_test.go: `.InitEVM(testctx, factory, chainlink.EVMFactoryConfig{
ChainOpts: legacyevm.ChainOpts{
AppConfig: cfg,
MailMon: &mailbox.Monitor{},
DS: db,
},
CSAETHKeystore: keyStore,
})`
$DIR/core/services/chainlink/relayer_chain_interoperators_test.go: `.String()`
$DIR/core/services/chainlink/relayer_chain_interoperators_test.go: `.String()`
$DIR/core/services/chainlink/relayer_chain_interoperators_test.go: `.InitSolana(testctx, factory, chainlink.SolanaFactoryConfig{
Keystore: keyStore.Solana(),
TOMLConfigs: cfg.SolanaConfigs()})`
$DIR/core/services/chainlink/relayer_chain_interoperators_test.go: `.Solana()`
$DIR/core/services/chainlink/relayer_chain_interoperators_test.go: `.SolanaConfigs()`
$DIR/core/services/chainlink/relayer_chain_interoperators_test.go: `.InitStarknet(testctx, factory, chainlink.StarkNetFactoryConfig{
Keystore: keyStore.StarkNet(),
TOMLConfigs: cfg.StarknetConfigs()})`
$DIR/core/services/chainlink/relayer_chain_interoperators_test.go: `.StarkNet()`
$DIR/core/services/chainlink/relayer_chain_interoperators_test.go: `.StarknetConfigs()`
$DIR/core/services/chainlink/relayer_chain_interoperators_test.go: `.InitCosmos(testctx, factory, chainlink.CosmosFactoryConfig{
Keystore: keyStore.Cosmos(),
TOMLConfigs: cfg.CosmosConfigs(),
DS: db,
})`
$DIR/core/services/chainlink/relayer_chain_interoperators_test.go: `.Cosmos()`
$DIR/core/services/chainlink/relayer_chain_interoperators_test.go: `.CosmosConfigs()`
$DIR/core/services/chainlink/relayer_chain_interoperators_test.go: `.InitSolana(testctx, factory, chainlink.SolanaFactoryConfig{
Keystore: keyStore.Solana(),
TOMLConfigs: cfg.SolanaConfigs()})`
$DIR/core/services/chainlink/relayer_chain_interoperators_test.go: `.Solana()`
$DIR/core/services/chainlink/relayer_chain_interoperators_test.go: `.SolanaConfigs()`
$DIR/core/services/chainlink/relayer_chain_interoperators_test.go: `.InitEVM(testctx, factory, chainlink.EVMFactoryConfig{
ChainOpts: legacyevm.ChainOpts{
AppConfig: cfg,
MailMon: &mailbox.Monitor{},
DS: db,
},
CSAETHKeystore: keyStore,
})`
$DIR/core/services/chainlink/relayer_chain_interoperators_test.go: `.InitStarknet(testctx, factory, chainlink.StarkNetFactoryConfig{
Keystore: keyStore.StarkNet(),
TOMLConfigs: cfg.StarknetConfigs()})`
$DIR/core/services/chainlink/relayer_chain_interoperators_test.go: `.StarkNet()`
$DIR/core/services/chainlink/relayer_chain_interoperators_test.go: `.StarknetConfigs()`
$DIR/core/services/chainlink/relayer_chain_interoperators_test.go: `.InitCosmos(testctx, factory, chainlink.CosmosFactoryConfig{
Keystore: keyStore.Cosmos(),
TOMLConfigs: cfg.CosmosConfigs(),
DS: db,
})`
$DIR/core/services/chainlink/relayer_chain_interoperators_test.go: `.Cosmos()`
$DIR/core/services/chainlink/relayer_chain_interoperators_test.go: `.CosmosConfigs()`
$DIR/core/services/chainlink/relayer_chain_interoperators_test.go: `.String()`
$DIR/core/services/chainlink/relayer_chain_interoperators_test.go: `.String()`
$DIR/core/services/chainlink/relayer_chain_interoperators_test.go: `.Run(tt.name, func(t *testing.T) {
t.Parallel()
var cr *chainlink.CoreRelayerChainInteroperators
{
var err error
cr, err = chainlink.NewCoreRelayerChainInteroperators(tt.initFuncs...)
require.NoError(t, err)
expectedChainCnt := tt.expectedEVMChainCnt + tt.expectedCosmosChainCnt + tt.expectedSolanaChainCnt + tt.expectedStarknetChainCnt
allChainsStats, cnt, err := cr.ChainStatuses(testctx, 0, 0)
assert.NoError(t, err)
assert.Len(t, allChainsStats, expectedChainCnt)
assert.Equal(t, cnt, len(allChainsStats))
assert.Len(t, cr.Slice(), expectedChainCnt)
// should be one relayer per chain and one service per relayer
assert.Len(t, cr.Slice(), expectedChainCnt)
assert.Len(t, cr.Services(), expectedChainCnt)
expectedNodeCnt := tt.expectedEVMNodeCnt + tt.expectedCosmosNodeCnt + tt.expectedSolanaNodeCnt + tt.expectedStarknetNodeCnt
allNodeStats, cnt, err := cr.NodeStatuses(testctx, 0, 0)
assert.NoError(t, err)
assert.Len(t, allNodeStats, expectedNodeCnt)
assert.Equal(t, cnt, len(allNodeStats))
}
gotRelayerNetworks := make(map[string]struct{})
for relayNetwork := range types.SupportedRelays {
var expectedChainCnt, expectedNodeCnt int
switch relayNetwork {
case types.NetworkEVM:
expectedChainCnt, expectedNodeCnt = tt.expectedEVMChainCnt, tt.expectedEVMNodeCnt
case types.NetworkCosmos:
expectedChainCnt, expectedNodeCnt = tt.expectedCosmosChainCnt, tt.expectedCosmosNodeCnt
case types.NetworkSolana:
expectedChainCnt, expectedNodeCnt = tt.expectedSolanaChainCnt, tt.expectedSolanaNodeCnt
case types.NetworkStarkNet:
expectedChainCnt, expectedNodeCnt = tt.expectedStarknetChainCnt, tt.expectedStarknetNodeCnt
default:
require.Fail(t, "untested relay network", relayNetwork)
}
interops := cr.List(chainlink.FilterRelayersByType(relayNetwork))
assert.Len(t, cr.List(chainlink.FilterRelayersByType(relayNetwork)).Slice(), expectedChainCnt)
if len(interops.Slice()) > 0 {
gotRelayerNetworks[relayNetwork] = struct{}{}
}
// check legacy chains for those that haven't migrated fully to the loop relayer interface
if relayNetwork == types.NetworkEVM {
_, wantEVM := tt.expectedRelayerNetworks[types.NetworkEVM]
if wantEVM {
assert.Len(t, cr.LegacyEVMChains().Slice(), expectedChainCnt)
} else {
assert.Nil(t, cr.LegacyEVMChains())
}
}
if relayNetwork == types.NetworkCosmos {
_, wantCosmos := tt.expectedRelayerNetworks[types.NetworkCosmos]
if wantCosmos {
assert.Len(t, cr.LegacyCosmosChains().Slice(), expectedChainCnt)
} else {
assert.Nil(t, cr.LegacyCosmosChains())
}
}
nodesStats, cnt, err := interops.NodeStatuses(testctx, 0, 0)
assert.NoError(t, err)
assert.Len(t, nodesStats, expectedNodeCnt)
assert.Equal(t, cnt, len(nodesStats))
}
assert.EqualValues(t, gotRelayerNetworks, tt.expectedRelayerNetworks)
allRelayerIds := [][]types.RelayID{
tt.expectedEVMRelayerIds,
tt.expectedCosmosRelayerIds,
tt.expectedSolanaRelayerIds,
tt.expectedStarknetRelayerIds,
}
for _, chainSpecificRelayerIds := range allRelayerIds {
for _, wantId := range chainSpecificRelayerIds {
lr, err := cr.Get(wantId)
assert.NotNil(t, lr)
assert.NoError(t, err)
stat, err := cr.ChainStatus(testctx, wantId)
assert.NoError(t, err)
assert.Equal(t, wantId.ChainID, stat.ID)
// check legacy chains for evm and cosmos
if wantId.Network == types.NetworkEVM {
c, err := cr.LegacyEVMChains().Get(wantId.ChainID)
assert.NoError(t, err)
assert.NotNil(t, c)
assert.Equal(t, wantId.ChainID, c.ID().String())
}
if wantId.Network == types.NetworkCosmos {
c, err := cr.LegacyCosmosChains().Get(wantId.ChainID)
assert.NoError(t, err)
assert.NotNil(t, c)
assert.Equal(t, wantId.ChainID, c.ID())
}
}
}
expectedMissing := types.RelayID{Network: types.NetworkCosmos, ChainID: "not a chain id"}
unwanted, err := cr.Get(expectedMissing)
assert.Nil(t, unwanted)
assert.ErrorIs(t, err, chainlink.ErrNoSuchRelayer)
})`
$DIR/core/services/chainlink/relayer_chain_interoperators_test.go: `.NewCoreRelayerChainInteroperators(tt.initFuncs...)`
$DIR/core/services/chainlink/relayer_chain_interoperators_test.go: `.ChainStatuses(testctx, 0, 0)`
$DIR/core/services/chainlink/relayer_chain_interoperators_test.go: `.NodeStatuses(testctx, 0, 0)`
$DIR/core/services/chainlink/relayer_chain_interoperators_test.go: `.List(chainlink.FilterRelayersByType(relayNetwork))`
$DIR/core/services/chainlink/relayer_chain_interoperators_test.go: `.FilterRelayersByType(relayNetwork)`
$DIR/core/services/chainlink/relayer_chain_interoperators_test.go: `.Slice()`
$DIR/core/services/chainlink/relayer_chain_interoperators_test.go: `.NodeStatuses(testctx, 0, 0)`
$DIR/core/services/chainlink/relayer_chain_interoperators_test.go: `.Get(wantId)`
$DIR/core/services/chainlink/relayer_chain_interoperators_test.go: `.ChainStatus(testctx, wantId)`
$DIR/core/services/chainlink/relayer_chain_interoperators_test.go: `.LegacyEVMChains()`
$DIR/core/services/chainlink/relayer_chain_interoperators_test.go: `.Get(wantId.ChainID)`
$DIR/core/services/chainlink/relayer_chain_interoperators_test.go: `.LegacyCosmosChains()`
$DIR/core/services/chainlink/relayer_chain_interoperators_test.go: `.Get(wantId.ChainID)`
$DIR/core/services/chainlink/relayer_chain_interoperators_test.go: `.Get(expectedMissing)`
$DIR/core/services/chainlink/relayer_chain_interoperators_test.go: `.New("this is a bad func")`
$DIR/core/services/chainlink/relayer_chain_interoperators_test.go: `.NewCoreRelayerChainInteroperators(badFunc())`
$DIR/core/services/chainlink/secret_generator_test.go: `.TempDir()`
$DIR/core/services/chainlink/secret_generator_test.go: `.Generate(rootDir)`
$DIR/core/services/chainlink/secret_generator_test.go: `.Generate(rootDir)`
$DIR/core/services/cron/cron_test.go: `err = service.Start(testutils.Context(t))`
$DIR/core/services/cron/cron_test.go: `runner.On("Run", mock.Anything, mock.AnythingOfType("*pipeline.Run"), mock.Anything, mock.Anything, mock.Anything).
Run(func(args mock.Arguments) { awaiter.ItHappened() }).
Return(false, nil).
Once()`
$DIR/core/services/cron/cron_test.go: `awaiter.ItHappened()`
$DIR/core/services/cron/cron_test.go: `err = service.Start(testutils.Context(t))`
$DIR/core/services/cron/cron_test.go: `.NewRunner(t)`
$DIR/core/services/cron/cron_test.go: `.NewTestGeneralConfig(t)`
$DIR/core/services/cron/cron_test.go: `.NewSqlxDB(t)`
$DIR/core/services/cron/cron_test.go: `.NewKeyStore(t, db)`
$DIR/core/services/cron/cron_test.go: `.TestLogger(t)`
$DIR/core/services/cron/cron_test.go: `.NewORM(db, lggr, cfg.JobPipeline().MaxSuccessfulRuns())`
$DIR/core/services/cron/cron_test.go: `.JobPipeline()`
$DIR/core/services/cron/cron_test.go: `.MaxSuccessfulRuns()`
$DIR/core/services/cron/cron_test.go: `.NewORM(db)`
$DIR/core/services/cron/cron_test.go: `.NewORM(db, orm, btORM, keyStore, lggr)`
$DIR/core/services/cron/cron_test.go: `.New()`
$DIR/core/services/cron/cron_test.go: `.NewDelegate(runner, lggr)`
$DIR/core/services/cron/cron_test.go: `.ServicesForSpec(testutils.Context(t), *jb)`
$DIR/core/services/cron/cron_test.go: `.Context(t)`
$DIR/core/services/cron/cron_test.go: `.Start(testutils.Context(t))`
$DIR/core/services/cron/cron_test.go: `.Context(t)`
$DIR/core/services/cron/cron_test.go: `.NewRunner(t)`
$DIR/core/services/cron/cron_test.go: `.NewAwaiter()`
$DIR/core/services/cron/cron_test.go: `.On("Run", mock.Anything, mock.AnythingOfType("*pipeline.Run"), mock.Anything, mock.Anything, mock.Anything)`
$DIR/core/services/cron/cron_test.go: `.AnythingOfType("*pipeline.Run")`
$DIR/core/services/cron/cron_test.go: `.
Run(func(args mock.Arguments) { awaiter.ItHappened() })`
$DIR/core/services/cron/cron_test.go: `.ItHappened()`
$DIR/core/services/cron/cron_test.go: `.
Return(false, nil)`
$DIR/core/services/cron/cron_test.go: `.
Once()`
$DIR/core/services/cron/cron_test.go: `.NewCronFromJobSpec(spec, runner, logger.TestLogger(t))`
$DIR/core/services/cron/cron_test.go: `.TestLogger(t)`
$DIR/core/services/cron/cron_test.go: `.Start(testutils.Context(t))`
$DIR/core/services/cron/cron_test.go: `.Context(t)`
$DIR/core/services/cron/validate_test.go: `err = jsonapi.Unmarshal(b, &r)`
$DIR/core/services/cron/validate_test.go: `t.Run(tc.name, func(t *testing.T) {
s, err := cron.ValidatedCronSpec(tc.toml)
tc.assertion(t, s, err)
})`
$DIR/core/services/cron/validate_test.go: `tc.assertion(t, s, err)`
$DIR/core/services/cron/validate_test.go: `.Marshal(s.CronSpec)`
$DIR/core/services/cron/validate_test.go: `.Unmarshal(b, &r)`
$DIR/core/services/cron/validate_test.go: `.Run(tc.name, func(t *testing.T) {
s, err := cron.ValidatedCronSpec(tc.toml)
tc.assertion(t, s, err)
})`
$DIR/core/services/cron/validate_test.go: `.ValidatedCronSpec(tc.toml)`
$DIR/core/services/cron/validate_test.go: `.assertion(t, s, err)`
$DIR/core/services/directrequest/delegate_test.go: `c.EVM[0].MinIncomingConfirmations = ptr[uint32](1)`
$DIR/core/services/directrequest/delegate_test.go: `t.Run("Spec without DirectRequestSpec", func(t *testing.T) {
spec := job.Job{}
_, err := delegate.ServicesForSpec(testutils.Context(t), spec)
assert.Error(t, err, "expects a *job.DirectRequestSpec to be present")
})`
$DIR/core/services/directrequest/delegate_test.go: `testutils.SkipShortDB(t)`
$DIR/core/services/directrequest/delegate_test.go: `t.Run("Log is an OracleRequest", func(t *testing.T) {
uni := NewDirectRequestUniverse(t)
defer uni.Cleanup()
log := log_mocks.NewBroadcast(t)
log.On("ReceiptsRoot").Return(common.Hash{})
log.On("TransactionsRoot").Return(common.Hash{})
log.On("StateRoot").Return(common.Hash{})
log.On("EVMChainID").Return(*big.NewInt(0))
uni.logBroadcaster.On("WasAlreadyConsumed", mock.Anything, mock.Anything).Return(false, nil)
logOracleRequest := operator_wrapper.OperatorOracleRequest{
CancelExpiration: big.NewInt(0),
}
log.On("RawLog").Return(types.Log{
Topics: []common.Hash{
{},
uni.spec.ExternalIDEncodeStringToTopic(),
},
})
log.On("DecodedLog").Return(&logOracleRequest)
log.On("String").Return("")
uni.logBroadcaster.On("MarkConsumed", mock.Anything, mock.Anything, mock.Anything).Return(nil)
runBeganAwaiter := cltest.NewAwaiter()
uni.runner.On("Run", mock.Anything, mock.AnythingOfType("*pipeline.Run"), mock.Anything, mock.Anything, mock.Anything).
Return(false, nil).
Run(func(args mock.Arguments) {
runBeganAwaiter.ItHappened()
fn := args.Get(4).(func(source sqlutil.DataSource) error)
require.NoError(t, fn(nil))
}).Once()
ctx := testutils.Context(t)
err := uni.service.Start(ctx)
require.NoError(t, err)
require.NotNil(t, uni.listener, "listener was nil; expected broadcaster.Register to have been called")
// check if the job exists under the correct ID
drJob, jErr := uni.jobORM.FindJob(ctx, uni.listener.JobID())
require.NoError(t, jErr)
require.Equal(t, drJob.ID, uni.listener.JobID())
require.NotNil(t, drJob.DirectRequestSpec)
uni.listener.HandleLog(ctx, log)
runBeganAwaiter.AwaitOrFail(t, 5*time.Second)
uni.service.Close()
})`
$DIR/core/services/directrequest/delegate_test.go: `log.On("ReceiptsRoot").Return(common.Hash{})`
$DIR/core/services/directrequest/delegate_test.go: `log.On("TransactionsRoot").Return(common.Hash{})`
$DIR/core/services/directrequest/delegate_test.go: `log.On("StateRoot").Return(common.Hash{})`
$DIR/core/services/directrequest/delegate_test.go: `log.On("EVMChainID").Return(*big.NewInt(0))`
$DIR/core/services/directrequest/delegate_test.go: `uni.logBroadcaster.On("WasAlreadyConsumed", mock.Anything, mock.Anything).Return(false, nil)`
$DIR/core/services/directrequest/delegate_test.go: `log.On("RawLog").Return(types.Log{
Topics: []common.Hash{
{},
uni.spec.ExternalIDEncodeStringToTopic(),
},
})`
$DIR/core/services/directrequest/delegate_test.go: `log.On("DecodedLog").Return(&logOracleRequest)`
$DIR/core/services/directrequest/delegate_test.go: `log.On("String").Return("")`
$DIR/core/services/directrequest/delegate_test.go: `uni.logBroadcaster.On("MarkConsumed", mock.Anything, mock.Anything, mock.Anything).Return(nil)`
$DIR/core/services/directrequest/delegate_test.go: `uni.runner.On("Run", mock.Anything, mock.AnythingOfType("*pipeline.Run"), mock.Anything, mock.Anything, mock.Anything).
Return(false, nil).
Run(func(args mock.Arguments) {
runBeganAwaiter.ItHappened()
fn := args.Get(4).(func(source sqlutil.DataSource) error)
require.NoError(t, fn(nil))
}).Once()`
$DIR/core/services/directrequest/delegate_test.go: `runBeganAwaiter.ItHappened()`
$DIR/core/services/directrequest/delegate_test.go: `uni.listener.HandleLog(ctx, log)`
$DIR/core/services/directrequest/delegate_test.go: `runBeganAwaiter.AwaitOrFail(t, 5*time.Second)`
$DIR/core/services/directrequest/delegate_test.go: `t.Run("Log is not consumed, as it's too young", func(t *testing.T) {
uni := NewDirectRequestUniverse(t)
defer uni.Cleanup()
log := log_mocks.NewBroadcast(t)
uni.logBroadcaster.On("WasAlreadyConsumed", mock.Anything, mock.Anything).Return(false, nil).Maybe()
logOracleRequest := operator_wrapper.OperatorOracleRequest{
CancelExpiration: big.NewInt(0),
}
log.On("RawLog").Return(types.Log{
Topics: []common.Hash{
{},
uni.spec.ExternalIDEncodeStringToTopic(),
},
BlockNumber: 0,
}).Maybe()
log.On("DecodedLog").Return(&logOracleRequest).Maybe()
log.On("String").Return("")
log.On("EVMChainID").Return(*big.NewInt(0))
uni.logBroadcaster.On("MarkConsumed", mock.Anything, mock.Anything, mock.Anything).Return(nil).Maybe()
ctx := testutils.Context(t)
err := uni.service.Start(ctx)
require.NoError(t, err)
uni.listener.HandleLog(ctx, log)
uni.logBroadcaster.On("WasAlreadyConsumed", mock.Anything, mock.Anything).Return(false, nil)
log.On("ReceiptsRoot").Return(common.Hash{})
log.On("TransactionsRoot").Return(common.Hash{})
log.On("StateRoot").Return(common.Hash{})
runBeganAwaiter := cltest.NewAwaiter()
uni.runner.On("Run", mock.Anything, mock.Anything, mock.Anything, mock.Anything, mock.Anything).
Run(func(args mock.Arguments) {
runBeganAwaiter.ItHappened()
fn := args.Get(4).(func(sqlutil.DataSource) error)
require.NoError(t, fn(nil))
}).Once().Return(false, nil)
// but should after this one, as the head Number is larger
runBeganAwaiter.AwaitOrFail(t, 5*time.Second)
uni.service.Close()
})`
$DIR/core/services/directrequest/delegate_test.go: `uni.logBroadcaster.On("WasAlreadyConsumed", mock.Anything, mock.Anything).Return(false, nil).Maybe()`
$DIR/core/services/directrequest/delegate_test.go: `log.On("RawLog").Return(types.Log{
Topics: []common.Hash{
{},
uni.spec.ExternalIDEncodeStringToTopic(),
},
BlockNumber: 0,
}).Maybe()`
$DIR/core/services/directrequest/delegate_test.go: `log.On("DecodedLog").Return(&logOracleRequest).Maybe()`
$DIR/core/services/directrequest/delegate_test.go: `log.On("String").Return("")`
$DIR/core/services/directrequest/delegate_test.go: `log.On("EVMChainID").Return(*big.NewInt(0))`
$DIR/core/services/directrequest/delegate_test.go: `uni.logBroadcaster.On("MarkConsumed", mock.Anything, mock.Anything, mock.Anything).Return(nil).Maybe()`
$DIR/core/services/directrequest/delegate_test.go: `uni.listener.HandleLog(ctx, log)`
$DIR/core/services/directrequest/delegate_test.go: `uni.logBroadcaster.On("WasAlreadyConsumed", mock.Anything, mock.Anything).Return(false, nil)`
$DIR/core/services/directrequest/delegate_test.go: `log.On("ReceiptsRoot").Return(common.Hash{})`
$DIR/core/services/directrequest/delegate_test.go: `log.On("TransactionsRoot").Return(common.Hash{})`
$DIR/core/services/directrequest/delegate_test.go: `log.On("StateRoot").Return(common.Hash{})`
$DIR/core/services/directrequest/delegate_test.go: `uni.runner.On("Run", mock.Anything, mock.Anything, mock.Anything, mock.Anything, mock.Anything).
Run(func(args mock.Arguments) {
runBeganAwaiter.ItHappened()
fn := args.Get(4).(func(sqlutil.DataSource) error)
require.NoError(t, fn(nil))
}).Once().Return(false, nil)`
$DIR/core/services/directrequest/delegate_test.go: `runBeganAwaiter.ItHappened()`
$DIR/core/services/directrequest/delegate_test.go: `runBeganAwaiter.AwaitOrFail(t, 5*time.Second)`
$DIR/core/services/directrequest/delegate_test.go: `t.Run("Log has wrong jobID", func(t *testing.T) {
uni := NewDirectRequestUniverse(t)
defer uni.Cleanup()
log := log_mocks.NewBroadcast(t)
lbAwaiter := cltest.NewAwaiter()
uni.logBroadcaster.On("WasAlreadyConsumed", mock.Anything, mock.Anything).Return(false, nil)
uni.logBroadcaster.On("MarkConsumed", mock.Anything, mock.Anything, mock.Anything).Run(func(args mock.Arguments) { lbAwaiter.ItHappened() }).Return(nil)
logCancelOracleRequest := operator_wrapper.OperatorCancelOracleRequest{RequestId: uni.spec.ExternalIDEncodeStringToTopic()}
logAwaiter := cltest.NewAwaiter()
log.On("DecodedLog").Run(func(args mock.Arguments) { logAwaiter.ItHappened() }).Return(&logCancelOracleRequest)
log.On("RawLog").Return(types.Log{
Topics: []common.Hash{{}, {}},
})
log.On("String").Return("")
ctx := testutils.Context(t)
err := uni.service.Start(ctx)
require.NoError(t, err)
uni.listener.HandleLog(ctx, log)
logAwaiter.AwaitOrFail(t)
lbAwaiter.AwaitOrFail(t)
uni.service.Close()
})`
$DIR/core/services/directrequest/delegate_test.go: `uni.logBroadcaster.On("WasAlreadyConsumed", mock.Anything, mock.Anything).Return(false, nil)`
$DIR/core/services/directrequest/delegate_test.go: `uni.logBroadcaster.On("MarkConsumed", mock.Anything, mock.Anything, mock.Anything).Run(func(args mock.Arguments) { lbAwaiter.ItHappened() }).Return(nil)`
$DIR/core/services/directrequest/delegate_test.go: `lbAwaiter.ItHappened()`
$DIR/core/services/directrequest/delegate_test.go: `log.On("DecodedLog").Run(func(args mock.Arguments) { logAwaiter.ItHappened() }).Return(&logCancelOracleRequest)`
$DIR/core/services/directrequest/delegate_test.go: `logAwaiter.ItHappened()`
$DIR/core/services/directrequest/delegate_test.go: `log.On("RawLog").Return(types.Log{
Topics: []common.Hash{{}, {}},
})`
$DIR/core/services/directrequest/delegate_test.go: `log.On("String").Return("")`
$DIR/core/services/directrequest/delegate_test.go: `uni.listener.HandleLog(ctx, log)`
$DIR/core/services/directrequest/delegate_test.go: `logAwaiter.AwaitOrFail(t)`
$DIR/core/services/directrequest/delegate_test.go: `lbAwaiter.AwaitOrFail(t)`
$DIR/core/services/directrequest/delegate_test.go: `t.Run("Log is a CancelOracleRequest with no matching run", func(t *testing.T) {
uni := NewDirectRequestUniverse(t)
defer uni.Cleanup()
log := log_mocks.NewBroadcast(t)
uni.logBroadcaster.On("WasAlreadyConsumed", mock.Anything, mock.Anything).Return(false, nil)
logCancelOracleRequest := operator_wrapper.OperatorCancelOracleRequest{RequestId: uni.spec.ExternalIDEncodeStringToTopic()}
log.On("RawLog").Return(types.Log{
Topics: []common.Hash{
{},
uni.spec.ExternalIDEncodeStringToTopic(),
},
})
log.On("String").Return("")
log.On("DecodedLog").Return(&logCancelOracleRequest)
lbAwaiter := cltest.NewAwaiter()
uni.logBroadcaster.On("MarkConsumed", mock.Anything, mock.Anything, mock.Anything).Run(func(args mock.Arguments) { lbAwaiter.ItHappened() }).Return(nil)
ctx := testutils.Context(t)
err := uni.service.Start(ctx)
require.NoError(t, err)
uni.listener.HandleLog(ctx, log)
lbAwaiter.AwaitOrFail(t)
uni.service.Close()
})`
$DIR/core/services/directrequest/delegate_test.go: `uni.logBroadcaster.On("WasAlreadyConsumed", mock.Anything, mock.Anything).Return(false, nil)`
$DIR/core/services/directrequest/delegate_test.go: `log.On("RawLog").Return(types.Log{
Topics: []common.Hash{
{},
uni.spec.ExternalIDEncodeStringToTopic(),
},
})`
$DIR/core/services/directrequest/delegate_test.go: `log.On("String").Return("")`
$DIR/core/services/directrequest/delegate_test.go: `log.On("DecodedLog").Return(&logCancelOracleRequest)`
$DIR/core/services/directrequest/delegate_test.go: `uni.logBroadcaster.On("MarkConsumed", mock.Anything, mock.Anything, mock.Anything).Run(func(args mock.Arguments) { lbAwaiter.ItHappened() }).Return(nil)`
$DIR/core/services/directrequest/delegate_test.go: `lbAwaiter.ItHappened()`
$DIR/core/services/directrequest/delegate_test.go: `uni.listener.HandleLog(ctx, log)`
$DIR/core/services/directrequest/delegate_test.go: `lbAwaiter.AwaitOrFail(t)`
$DIR/core/services/directrequest/delegate_test.go: `t.Run("Log is a CancelOracleRequest with a matching run", func(t *testing.T) {
uni := NewDirectRequestUniverse(t)
defer uni.Cleanup()
runLog := log_mocks.NewBroadcast(t)
runLog.On("ReceiptsRoot").Return(common.Hash{})
runLog.On("TransactionsRoot").Return(common.Hash{})
runLog.On("StateRoot").Return(common.Hash{})
runLog.On("EVMChainID").Return(*big.NewInt(0))
uni.logBroadcaster.On("WasAlreadyConsumed", mock.Anything, mock.Anything).Return(false, nil)
logOracleRequest := operator_wrapper.OperatorOracleRequest{
CancelExpiration: big.NewInt(0),
RequestId: uni.spec.ExternalIDEncodeStringToTopic(),
}
runLog.On("RawLog").Return(types.Log{
Topics: []common.Hash{
{},
uni.spec.ExternalIDEncodeStringToTopic(),
},
})
runLog.On("DecodedLog").Return(&logOracleRequest)
runLog.On("String").Return("")
uni.logBroadcaster.On("MarkConsumed", mock.Anything, mock.Anything, mock.Anything).Return(nil)
cancelLog := log_mocks.NewBroadcast(t)
uni.logBroadcaster.On("WasAlreadyConsumed", mock.Anything, mock.Anything).Return(false, nil)
logCancelOracleRequest := operator_wrapper.OperatorCancelOracleRequest{RequestId: uni.spec.ExternalIDEncodeStringToTopic()}
cancelLog.On("RawLog").Return(types.Log{
Topics: []common.Hash{
{},
uni.spec.ExternalIDEncodeStringToTopic(),
},
})
cancelLog.On("DecodedLog").Return(&logCancelOracleRequest)
cancelLog.On("String").Return("")
uni.logBroadcaster.On("MarkConsumed", mock.Anything, mock.Anything, mock.Anything).Return(nil)
ctx := testutils.Context(t)
err := uni.service.Start(ctx)
require.NoError(t, err)
timeout := 5 * time.Second
runBeganAwaiter := cltest.NewAwaiter()
runCancelledAwaiter := cltest.NewAwaiter()
uni.runner.On("Run", mock.Anything, mock.Anything, mock.Anything, mock.Anything, mock.Anything).Run(func(args mock.Arguments) {
runBeganAwaiter.ItHappened()
ctx := args[0].(context.Context)
select {
case <-time.After(timeout):
t.Fatalf("Timed out waiting for Run to be canceled (%v)", timeout)
case <-ctx.Done():
runCancelledAwaiter.ItHappened()
}
}).Once().Return(false, nil)
uni.listener.HandleLog(ctx, runLog)
runBeganAwaiter.AwaitOrFail(t, timeout)
uni.listener.HandleLog(ctx, cancelLog)
runCancelledAwaiter.AwaitOrFail(t, timeout)
uni.service.Close()
})`
$DIR/core/services/directrequest/delegate_test.go: `runLog.On("ReceiptsRoot").Return(common.Hash{})`
$DIR/core/services/directrequest/delegate_test.go: `runLog.On("TransactionsRoot").Return(common.Hash{})`
$DIR/core/services/directrequest/delegate_test.go: `runLog.On("StateRoot").Return(common.Hash{})`
$DIR/core/services/directrequest/delegate_test.go: `runLog.On("EVMChainID").Return(*big.NewInt(0))`
$DIR/core/services/directrequest/delegate_test.go: `uni.logBroadcaster.On("WasAlreadyConsumed", mock.Anything, mock.Anything).Return(false, nil)`
$DIR/core/services/directrequest/delegate_test.go: `runLog.On("RawLog").Return(types.Log{
Topics: []common.Hash{
{},
uni.spec.ExternalIDEncodeStringToTopic(),
},
})`
$DIR/core/services/directrequest/delegate_test.go: `runLog.On("DecodedLog").Return(&logOracleRequest)`
$DIR/core/services/directrequest/delegate_test.go: `runLog.On("String").Return("")`
$DIR/core/services/directrequest/delegate_test.go: `uni.logBroadcaster.On("MarkConsumed", mock.Anything, mock.Anything, mock.Anything).Return(nil)`
$DIR/core/services/directrequest/delegate_test.go: `uni.logBroadcaster.On("WasAlreadyConsumed", mock.Anything, mock.Anything).Return(false, nil)`
$DIR/core/services/directrequest/delegate_test.go: `cancelLog.On("RawLog").Return(types.Log{
Topics: []common.Hash{
{},
uni.spec.ExternalIDEncodeStringToTopic(),
},
})`
$DIR/core/services/directrequest/delegate_test.go: `cancelLog.On("DecodedLog").Return(&logCancelOracleRequest)`
$DIR/core/services/directrequest/delegate_test.go: `cancelLog.On("String").Return("")`
$DIR/core/services/directrequest/delegate_test.go: `uni.logBroadcaster.On("MarkConsumed", mock.Anything, mock.Anything, mock.Anything).Return(nil)`
$DIR/core/services/directrequest/delegate_test.go: `uni.runner.On("Run", mock.Anything, mock.Anything, mock.Anything, mock.Anything, mock.Anything).Run(func(args mock.Arguments) {
runBeganAwaiter.ItHappened()
ctx := args[0].(context.Context)
select {
case <-time.After(timeout):
t.Fatalf("Timed out waiting for Run to be canceled (%v)", timeout)
case <-ctx.Done():
runCancelledAwaiter.ItHappened()
}
}).Once().Return(false, nil)`
$DIR/core/services/directrequest/delegate_test.go: `runBeganAwaiter.ItHappened()`
$DIR/core/services/directrequest/delegate_test.go: `runCancelledAwaiter.ItHappened()`
$DIR/core/services/directrequest/delegate_test.go: `uni.listener.HandleLog(ctx, runLog)`
$DIR/core/services/directrequest/delegate_test.go: `runBeganAwaiter.AwaitOrFail(t, timeout)`
$DIR/core/services/directrequest/delegate_test.go: `uni.listener.HandleLog(ctx, cancelLog)`
$DIR/core/services/directrequest/delegate_test.go: `runCancelledAwaiter.AwaitOrFail(t, timeout)`
$DIR/core/services/directrequest/delegate_test.go: `t.Run("Log has sufficient funds", func(t *testing.T) {
cfg := configtest.NewGeneralConfig(t, func(c *chainlink.Config, s *chainlink.Secrets) {
c.EVM[0].MinIncomingConfirmations = ptr[uint32](1)
c.EVM[0].MinContractPayment = assets.NewLinkFromJuels(100)
})
uni := NewDirectRequestUniverseWithConfig(t, cfg, nil)
defer uni.Cleanup()
log := log_mocks.NewBroadcast(t)
log.On("ReceiptsRoot").Return(common.Hash{})
log.On("TransactionsRoot").Return(common.Hash{})
log.On("StateRoot").Return(common.Hash{})
log.On("EVMChainID").Return(*big.NewInt(0))
uni.logBroadcaster.On("WasAlreadyConsumed", mock.Anything, mock.Anything).Return(false, nil)
logOracleRequest := operator_wrapper.OperatorOracleRequest{
CancelExpiration: big.NewInt(0),
Payment: big.NewInt(100),
}
log.On("RawLog").Return(types.Log{
Topics: []common.Hash{
{},
uni.spec.ExternalIDEncodeStringToTopic(),
},
})
log.On("DecodedLog").Return(&logOracleRequest)
log.On("String").Return("")
uni.logBroadcaster.On("MarkConsumed", mock.Anything, mock.Anything, mock.Anything).Return(nil)
runBeganAwaiter := cltest.NewAwaiter()
uni.runner.On("Run", mock.Anything, mock.Anything, mock.Anything, mock.Anything, mock.Anything).Run(func(args mock.Arguments) {
runBeganAwaiter.ItHappened()
fn := args.Get(4).(func(sqlutil.DataSource) error)
require.NoError(t, fn(nil))
}).Once().Return(false, nil)
ctx := testutils.Context(t)
err := uni.service.Start(ctx)
require.NoError(t, err)
// check if the job exists under the correct ID
drJob, jErr := uni.jobORM.FindJob(ctx, uni.listener.JobID())
require.NoError(t, jErr)
require.Equal(t, drJob.ID, uni.listener.JobID())
require.NotNil(t, drJob.DirectRequestSpec)
uni.listener.HandleLog(ctx, log)
runBeganAwaiter.AwaitOrFail(t, 5*time.Second)
uni.service.Close()
})`
$DIR/core/services/directrequest/delegate_test.go: `c.EVM[0].MinIncomingConfirmations = ptr[uint32](1)`
$DIR/core/services/directrequest/delegate_test.go: `c.EVM[0].MinContractPayment = assets.NewLinkFromJuels(100)`
$DIR/core/services/directrequest/delegate_test.go: `log.On("ReceiptsRoot").Return(common.Hash{})`
$DIR/core/services/directrequest/delegate_test.go: `log.On("TransactionsRoot").Return(common.Hash{})`
$DIR/core/services/directrequest/delegate_test.go: `log.On("StateRoot").Return(common.Hash{})`
$DIR/core/services/directrequest/delegate_test.go: `log.On("EVMChainID").Return(*big.NewInt(0))`
$DIR/core/services/directrequest/delegate_test.go: `uni.logBroadcaster.On("WasAlreadyConsumed", mock.Anything, mock.Anything).Return(false, nil)`
$DIR/core/services/directrequest/delegate_test.go: `log.On("RawLog").Return(types.Log{
Topics: []common.Hash{
{},
uni.spec.ExternalIDEncodeStringToTopic(),
},
})`
$DIR/core/services/directrequest/delegate_test.go: `log.On("DecodedLog").Return(&logOracleRequest)`
$DIR/core/services/directrequest/delegate_test.go: `log.On("String").Return("")`
$DIR/core/services/directrequest/delegate_test.go: `uni.logBroadcaster.On("MarkConsumed", mock.Anything, mock.Anything, mock.Anything).Return(nil)`
$DIR/core/services/directrequest/delegate_test.go: `uni.runner.On("Run", mock.Anything, mock.Anything, mock.Anything, mock.Anything, mock.Anything).Run(func(args mock.Arguments) {
runBeganAwaiter.ItHappened()
fn := args.Get(4).(func(sqlutil.DataSource) error)
require.NoError(t, fn(nil))
}).Once().Return(false, nil)`
$DIR/core/services/directrequest/delegate_test.go: `runBeganAwaiter.ItHappened()`
$DIR/core/services/directrequest/delegate_test.go: `uni.listener.HandleLog(ctx, log)`
$DIR/core/services/directrequest/delegate_test.go: `runBeganAwaiter.AwaitOrFail(t, 5*time.Second)`
$DIR/core/services/directrequest/delegate_test.go: `t.Run("Log has insufficient funds", func(t *testing.T) {
cfg := configtest.NewGeneralConfig(t, func(c *chainlink.Config, s *chainlink.Secrets) {
c.EVM[0].MinIncomingConfirmations = ptr[uint32](1)
c.EVM[0].MinContractPayment = assets.NewLinkFromJuels(100)
})
uni := NewDirectRequestUniverseWithConfig(t, cfg, nil)
defer uni.Cleanup()
log := log_mocks.NewBroadcast(t)
uni.logBroadcaster.On("WasAlreadyConsumed", mock.Anything, mock.Anything).Return(false, nil)
logOracleRequest := operator_wrapper.OperatorOracleRequest{
CancelExpiration: big.NewInt(0),
Payment: big.NewInt(99),
}
log.On("RawLog").Return(types.Log{
Topics: []common.Hash{
{},
uni.spec.ExternalIDEncodeStringToTopic(),
},
})
log.On("DecodedLog").Return(&logOracleRequest)
log.On("String").Return("")
markConsumedLogAwaiter := cltest.NewAwaiter()
uni.logBroadcaster.On("MarkConsumed", mock.Anything, mock.Anything, mock.Anything).Run(func(args mock.Arguments) {
markConsumedLogAwaiter.ItHappened()
}).Return(nil)
ctx := testutils.Context(t)
err := uni.service.Start(ctx)
require.NoError(t, err)
uni.listener.HandleLog(ctx, log)
markConsumedLogAwaiter.AwaitOrFail(t, 5*time.Second)
uni.service.Close()
})`
$DIR/core/services/directrequest/delegate_test.go: `c.EVM[0].MinIncomingConfirmations = ptr[uint32](1)`
$DIR/core/services/directrequest/delegate_test.go: `c.EVM[0].MinContractPayment = assets.NewLinkFromJuels(100)`
$DIR/core/services/directrequest/delegate_test.go: `uni.logBroadcaster.On("WasAlreadyConsumed", mock.Anything, mock.Anything).Return(false, nil)`
$DIR/core/services/directrequest/delegate_test.go: `log.On("RawLog").Return(types.Log{
Topics: []common.Hash{
{},
uni.spec.ExternalIDEncodeStringToTopic(),
},
})`
$DIR/core/services/directrequest/delegate_test.go: `log.On("DecodedLog").Return(&logOracleRequest)`
$DIR/core/services/directrequest/delegate_test.go: `log.On("String").Return("")`
$DIR/core/services/directrequest/delegate_test.go: `uni.logBroadcaster.On("MarkConsumed", mock.Anything, mock.Anything, mock.Anything).Run(func(args mock.Arguments) {
markConsumedLogAwaiter.ItHappened()
}).Return(nil)`
$DIR/core/services/directrequest/delegate_test.go: `markConsumedLogAwaiter.ItHappened()`
$DIR/core/services/directrequest/delegate_test.go: `uni.listener.HandleLog(ctx, log)`
$DIR/core/services/directrequest/delegate_test.go: `markConsumedLogAwaiter.AwaitOrFail(t, 5*time.Second)`
$DIR/core/services/directrequest/delegate_test.go: `t.Run("requesters is specified and log is requested by a whitelisted address", func(t *testing.T) {
requester := testutils.NewAddress()
cfg := configtest.NewGeneralConfig(t, func(c *chainlink.Config, s *chainlink.Secrets) {
c.EVM[0].MinIncomingConfirmations = ptr[uint32](1)
c.EVM[0].MinContractPayment = assets.NewLinkFromJuels(100)
})
uni := NewDirectRequestUniverseWithConfig(t, cfg, func(jb *job.Job) {
jb.DirectRequestSpec.Requesters = []common.Address{testutils.NewAddress(), requester}
})
defer uni.Cleanup()
log := log_mocks.NewBroadcast(t)
log.On("ReceiptsRoot").Return(common.Hash{})
log.On("TransactionsRoot").Return(common.Hash{})
log.On("StateRoot").Return(common.Hash{})
log.On("EVMChainID").Return(*big.NewInt(0))
uni.logBroadcaster.On("WasAlreadyConsumed", mock.Anything, mock.Anything).Return(false, nil)
logOracleRequest := operator_wrapper.OperatorOracleRequest{
CancelExpiration: big.NewInt(0),
Payment: big.NewInt(100),
Requester: requester,
}
log.On("RawLog").Return(types.Log{
Topics: []common.Hash{
{},
uni.spec.ExternalIDEncodeStringToTopic(),
},
})
log.On("DecodedLog").Return(&logOracleRequest)
log.On("String").Return("")
markConsumedLogAwaiter := cltest.NewAwaiter()
uni.logBroadcaster.On("MarkConsumed", mock.Anything, mock.Anything, mock.Anything).Run(func(args mock.Arguments) {
markConsumedLogAwaiter.ItHappened()
}).Return(nil)
runBeganAwaiter := cltest.NewAwaiter()
uni.runner.On("Run", mock.Anything, mock.Anything, mock.Anything, mock.Anything, mock.Anything).Run(func(args mock.Arguments) {
runBeganAwaiter.ItHappened()
fn := args.Get(4).(func(sqlutil.DataSource) error)
require.NoError(t, fn(nil))
}).Once().Return(false, nil)
ctx := testutils.Context(t)
err := uni.service.Start(ctx)
require.NoError(t, err)
// check if the job exists under the correct ID
drJob, jErr := uni.jobORM.FindJob(ctx, uni.listener.JobID())
require.NoError(t, jErr)
require.Equal(t, drJob.ID, uni.listener.JobID())
require.NotNil(t, drJob.DirectRequestSpec)
uni.listener.HandleLog(ctx, log)
runBeganAwaiter.AwaitOrFail(t, 5*time.Second)
uni.service.Close()
})`
$DIR/core/services/directrequest/delegate_test.go: `c.EVM[0].MinIncomingConfirmations = ptr[uint32](1)`
$DIR/core/services/directrequest/delegate_test.go: `c.EVM[0].MinContractPayment = assets.NewLinkFromJuels(100)`
$DIR/core/services/directrequest/delegate_test.go: `jb.DirectRequestSpec.Requesters = []common.Address{testutils.NewAddress(), requester}`
$DIR/core/services/directrequest/delegate_test.go: `log.On("ReceiptsRoot").Return(common.Hash{})`
$DIR/core/services/directrequest/delegate_test.go: `log.On("TransactionsRoot").Return(common.Hash{})`
$DIR/core/services/directrequest/delegate_test.go: `log.On("StateRoot").Return(common.Hash{})`
$DIR/core/services/directrequest/delegate_test.go: `log.On("EVMChainID").Return(*big.NewInt(0))`
$DIR/core/services/directrequest/delegate_test.go: `uni.logBroadcaster.On("WasAlreadyConsumed", mock.Anything, mock.Anything).Return(false, nil)`
$DIR/core/services/directrequest/delegate_test.go: `log.On("RawLog").Return(types.Log{
Topics: []common.Hash{
{},
uni.spec.ExternalIDEncodeStringToTopic(),
},
})`
$DIR/core/services/directrequest/delegate_test.go: `log.On("DecodedLog").Return(&logOracleRequest)`
$DIR/core/services/directrequest/delegate_test.go: `log.On("String").Return("")`
$DIR/core/services/directrequest/delegate_test.go: `uni.logBroadcaster.On("MarkConsumed", mock.Anything, mock.Anything, mock.Anything).Run(func(args mock.Arguments) {
markConsumedLogAwaiter.ItHappened()
}).Return(nil)`
$DIR/core/services/directrequest/delegate_test.go: `markConsumedLogAwaiter.ItHappened()`
$DIR/core/services/directrequest/delegate_test.go: `uni.runner.On("Run", mock.Anything, mock.Anything, mock.Anything, mock.Anything, mock.Anything).Run(func(args mock.Arguments) {
runBeganAwaiter.ItHappened()
fn := args.Get(4).(func(sqlutil.DataSource) error)
require.NoError(t, fn(nil))
}).Once().Return(false, nil)`
$DIR/core/services/directrequest/delegate_test.go: `runBeganAwaiter.ItHappened()`
$DIR/core/services/directrequest/delegate_test.go: `uni.listener.HandleLog(ctx, log)`
$DIR/core/services/directrequest/delegate_test.go: `runBeganAwaiter.AwaitOrFail(t, 5*time.Second)`
$DIR/core/services/directrequest/delegate_test.go: `c.EVM[0].MinIncomingConfirmations = ptr[uint32](1)`
$DIR/core/services/directrequest/delegate_test.go: `c.EVM[0].MinContractPayment = assets.NewLinkFromJuels(100)`
$DIR/core/services/directrequest/delegate_test.go: `jb.DirectRequestSpec.Requesters = []common.Address{testutils.NewAddress(), testutils.NewAddress()}`
$DIR/core/services/directrequest/delegate_test.go: `uni.logBroadcaster.On("WasAlreadyConsumed", mock.Anything, mock.Anything).Return(false, nil)`
$DIR/core/services/directrequest/delegate_test.go: `log.On("RawLog").Return(types.Log{
Topics: []common.Hash{
{},
uni.spec.ExternalIDEncodeStringToTopic(),
},
})`
$DIR/core/services/directrequest/delegate_test.go: `log.On("DecodedLog").Return(&logOracleRequest)`
$DIR/core/services/directrequest/delegate_test.go: `log.On("String").Return("")`
$DIR/core/services/directrequest/delegate_test.go: `uni.logBroadcaster.On("MarkConsumed", mock.Anything, mock.Anything, mock.Anything).Run(func(args mock.Arguments) {
markConsumedLogAwaiter.ItHappened()
}).Return(nil)`
$DIR/core/services/directrequest/delegate_test.go: `markConsumedLogAwaiter.ItHappened()`
$DIR/core/services/directrequest/delegate_test.go: `uni.listener.HandleLog(ctx, log)`
$DIR/core/services/directrequest/delegate_test.go: `markConsumedLogAwaiter.AwaitOrFail(t, 5*time.Second)`
$DIR/core/services/directrequest/delegate_test.go: `.NewEthClientMockWithDefaultChain(t)`
$DIR/core/services/directrequest/delegate_test.go: `.NewRunner(t)`
$DIR/core/services/directrequest/delegate_test.go: `.NewSqlxDB(t)`
$DIR/core/services/directrequest/delegate_test.go: `.NewGeneralConfig(t, func(c *chainlink.Config, s *chainlink.Secrets) {
c.EVM[0].MinIncomingConfirmations = ptr[uint32](1)
})`
$DIR/core/services/directrequest/delegate_test.go: `.NewKeyStore(t, db)`
$DIR/core/services/directrequest/delegate_test.go: `.Run(t, mailboxtest.NewMonitor(t))`
$DIR/core/services/directrequest/delegate_test.go: `.NewMonitor(t)`
$DIR/core/services/directrequest/delegate_test.go: `.NewChainRelayExtenders(t, evmtest.TestChainOpts{DB: db, GeneralConfig: cfg, Client: ethClient, MailMon: mailMon, KeyStore: keyStore.Eth()})`
$DIR/core/services/directrequest/delegate_test.go: `.Eth()`
$DIR/core/services/directrequest/delegate_test.go: `.TestLogger(t)`
$DIR/core/services/directrequest/delegate_test.go: `.NewLegacyChainsFromRelayerExtenders(relayerExtenders)`
$DIR/core/services/directrequest/delegate_test.go: `.NewDelegate(lggr, runner, nil, legacyChains, mailMon)`
$DIR/core/services/directrequest/delegate_test.go: `.Run("Spec without DirectRequestSpec", func(t *testing.T) {
spec := job.Job{}
_, err := delegate.ServicesForSpec(testutils.Context(t), spec)
assert.Error(t, err, "expects a *job.DirectRequestSpec to be present")
})`
$DIR/core/services/directrequest/delegate_test.go: `.ServicesForSpec(testutils.Context(t), spec)`
$DIR/core/services/directrequest/delegate_test.go: `.Context(t)`
$DIR/core/services/directrequest/delegate_test.go: `.ServicesForSpec(testutils.Context(t), spec)`
$DIR/core/services/directrequest/delegate_test.go: `.Context(t)`
$DIR/core/services/directrequest/delegate_test.go: `.SkipShortDB(t)`
$DIR/core/services/directrequest/delegate_test.go: `.Run("Log is an OracleRequest", func(t *testing.T) {
uni := NewDirectRequestUniverse(t)
defer uni.Cleanup()
log := log_mocks.NewBroadcast(t)
log.On("ReceiptsRoot").Return(common.Hash{})
log.On("TransactionsRoot").Return(common.Hash{})
log.On("StateRoot").Return(common.Hash{})
log.On("EVMChainID").Return(*big.NewInt(0))
uni.logBroadcaster.On("WasAlreadyConsumed", mock.Anything, mock.Anything).Return(false, nil)
logOracleRequest := operator_wrapper.OperatorOracleRequest{
CancelExpiration: big.NewInt(0),
}
log.On("RawLog").Return(types.Log{
Topics: []common.Hash{
{},
uni.spec.ExternalIDEncodeStringToTopic(),
},
})
log.On("DecodedLog").Return(&logOracleRequest)
log.On("String").Return("")
uni.logBroadcaster.On("MarkConsumed", mock.Anything, mock.Anything, mock.Anything).Return(nil)
runBeganAwaiter := cltest.NewAwaiter()
uni.runner.On("Run", mock.Anything, mock.AnythingOfType("*pipeline.Run"), mock.Anything, mock.Anything, mock.Anything).
Return(false, nil).
Run(func(args mock.Arguments) {
runBeganAwaiter.ItHappened()
fn := args.Get(4).(func(source sqlutil.DataSource) error)
require.NoError(t, fn(nil))
}).Once()
ctx := testutils.Context(t)
err := uni.service.Start(ctx)
require.NoError(t, err)
require.NotNil(t, uni.listener, "listener was nil; expected broadcaster.Register to have been called")
// check if the job exists under the correct ID
drJob, jErr := uni.jobORM.FindJob(ctx, uni.listener.JobID())
require.NoError(t, jErr)
require.Equal(t, drJob.ID, uni.listener.JobID())
require.NotNil(t, drJob.DirectRequestSpec)
uni.listener.HandleLog(ctx, log)
runBeganAwaiter.AwaitOrFail(t, 5*time.Second)
uni.service.Close()
})`
$DIR/core/services/directrequest/delegate_test.go: `.Cleanup()`
$DIR/core/services/directrequest/delegate_test.go: `.NewBroadcast(t)`
$DIR/core/services/directrequest/delegate_test.go: `.On("ReceiptsRoot")`
$DIR/core/services/directrequest/delegate_test.go: `.Return(common.Hash{})`
$DIR/core/services/directrequest/delegate_test.go: `.On("TransactionsRoot")`
$DIR/core/services/directrequest/delegate_test.go: `.Return(common.Hash{})`
$DIR/core/services/directrequest/delegate_test.go: `.On("StateRoot")`
$DIR/core/services/directrequest/delegate_test.go: `.Return(common.Hash{})`
$DIR/core/services/directrequest/delegate_test.go: `.On("EVMChainID")`
$DIR/core/services/directrequest/delegate_test.go: `.Return(*big.NewInt(0))`
$DIR/core/services/directrequest/delegate_test.go: `.NewInt(0)`
$DIR/core/services/directrequest/delegate_test.go: `.logBroadcaster.On("WasAlreadyConsumed", mock.Anything, mock.Anything)`
$DIR/core/services/directrequest/delegate_test.go: `.Return(false, nil)`
$DIR/core/services/directrequest/delegate_test.go: `.NewInt(0)`
$DIR/core/services/directrequest/delegate_test.go: `.On("RawLog")`
$DIR/core/services/directrequest/delegate_test.go: `.Return(types.Log{
Topics: []common.Hash{
{},
uni.spec.ExternalIDEncodeStringToTopic(),
},
})`
$DIR/core/services/directrequest/delegate_test.go: `.spec.ExternalIDEncodeStringToTopic()`
$DIR/core/services/directrequest/delegate_test.go: `.On("DecodedLog")`
$DIR/core/services/directrequest/delegate_test.go: `.Return(&logOracleRequest)`
$DIR/core/services/directrequest/delegate_test.go: `.On("String")`
$DIR/core/services/directrequest/delegate_test.go: `.Return("")`
$DIR/core/services/directrequest/delegate_test.go: `.logBroadcaster.On("MarkConsumed", mock.Anything, mock.Anything, mock.Anything)`
$DIR/core/services/directrequest/delegate_test.go: `.Return(nil)`
$DIR/core/services/directrequest/delegate_test.go: `.NewAwaiter()`
$DIR/core/services/directrequest/delegate_test.go: `.runner.On("Run", mock.Anything, mock.AnythingOfType("*pipeline.Run"), mock.Anything, mock.Anything, mock.Anything)`
$DIR/core/services/directrequest/delegate_test.go: `.AnythingOfType("*pipeline.Run")`
$DIR/core/services/directrequest/delegate_test.go: `.
Return(false, nil)`
$DIR/core/services/directrequest/delegate_test.go: `.
Run(func(args mock.Arguments) {
runBeganAwaiter.ItHappened()
fn := args.Get(4).(func(source sqlutil.DataSource) error)
require.NoError(t, fn(nil))
})`
$DIR/core/services/directrequest/delegate_test.go: `.ItHappened()`
$DIR/core/services/directrequest/delegate_test.go: `.Get(4)`
$DIR/core/services/directrequest/delegate_test.go: `.Once()`
$DIR/core/services/directrequest/delegate_test.go: `.Context(t)`
$DIR/core/services/directrequest/delegate_test.go: `.service.Start(ctx)`
$DIR/core/services/directrequest/delegate_test.go: `.jobORM.FindJob(ctx, uni.listener.JobID())`
$DIR/core/services/directrequest/delegate_test.go: `.listener.JobID()`
$DIR/core/services/directrequest/delegate_test.go: `.listener.HandleLog(ctx, log)`
$DIR/core/services/directrequest/delegate_test.go: `.AwaitOrFail(t, 5*time.Second)`
$DIR/core/services/directrequest/delegate_test.go: `.Run("Log is not consumed, as it's too young", func(t *testing.T) {
uni := NewDirectRequestUniverse(t)
defer uni.Cleanup()
log := log_mocks.NewBroadcast(t)
uni.logBroadcaster.On("WasAlreadyConsumed", mock.Anything, mock.Anything).Return(false, nil).Maybe()
logOracleRequest := operator_wrapper.OperatorOracleRequest{
CancelExpiration: big.NewInt(0),
}
log.On("RawLog").Return(types.Log{
Topics: []common.Hash{
{},
uni.spec.ExternalIDEncodeStringToTopic(),
},
BlockNumber: 0,
}).Maybe()
log.On("DecodedLog").Return(&logOracleRequest).Maybe()
log.On("String").Return("")
log.On("EVMChainID").Return(*big.NewInt(0))
uni.logBroadcaster.On("MarkConsumed", mock.Anything, mock.Anything, mock.Anything).Return(nil).Maybe()
ctx := testutils.Context(t)
err := uni.service.Start(ctx)
require.NoError(t, err)
uni.listener.HandleLog(ctx, log)
uni.logBroadcaster.On("WasAlreadyConsumed", mock.Anything, mock.Anything).Return(false, nil)
log.On("ReceiptsRoot").Return(common.Hash{})
log.On("TransactionsRoot").Return(common.Hash{})
log.On("StateRoot").Return(common.Hash{})
runBeganAwaiter := cltest.NewAwaiter()
uni.runner.On("Run", mock.Anything, mock.Anything, mock.Anything, mock.Anything, mock.Anything).
Run(func(args mock.Arguments) {
runBeganAwaiter.ItHappened()
fn := args.Get(4).(func(sqlutil.DataSource) error)
require.NoError(t, fn(nil))
}).Once().Return(false, nil)
// but should after this one, as the head Number is larger
runBeganAwaiter.AwaitOrFail(t, 5*time.Second)
uni.service.Close()
})`
$DIR/core/services/directrequest/delegate_test.go: `.Cleanup()`
$DIR/core/services/directrequest/delegate_test.go: `.NewBroadcast(t)`
$DIR/core/services/directrequest/delegate_test.go: `.logBroadcaster.On("WasAlreadyConsumed", mock.Anything, mock.Anything)`
$DIR/core/services/directrequest/delegate_test.go: `.Return(false, nil)`
$DIR/core/services/directrequest/delegate_test.go: `.Maybe()`
$DIR/core/services/directrequest/delegate_test.go: `.NewInt(0)`
$DIR/core/services/directrequest/delegate_test.go: `.On("RawLog")`
$DIR/core/services/directrequest/delegate_test.go: `.Return(types.Log{
Topics: []common.Hash{
{},
uni.spec.ExternalIDEncodeStringToTopic(),
},
BlockNumber: 0,
})`
$DIR/core/services/directrequest/delegate_test.go: `.spec.ExternalIDEncodeStringToTopic()`
$DIR/core/services/directrequest/delegate_test.go: `.Maybe()`
$DIR/core/services/directrequest/delegate_test.go: `.On("DecodedLog")`
$DIR/core/services/directrequest/delegate_test.go: `.Return(&logOracleRequest)`
$DIR/core/services/directrequest/delegate_test.go: `.Maybe()`
$DIR/core/services/directrequest/delegate_test.go: `.On("String")`
$DIR/core/services/directrequest/delegate_test.go: `.Return("")`
$DIR/core/services/directrequest/delegate_test.go: `.On("EVMChainID")`
$DIR/core/services/directrequest/delegate_test.go: `.Return(*big.NewInt(0))`
$DIR/core/services/directrequest/delegate_test.go: `.NewInt(0)`
$DIR/core/services/directrequest/delegate_test.go: `.logBroadcaster.On("MarkConsumed", mock.Anything, mock.Anything, mock.Anything)`
$DIR/core/services/directrequest/delegate_test.go: `.Return(nil)`
$DIR/core/services/directrequest/delegate_test.go: `.Maybe()`
$DIR/core/services/directrequest/delegate_test.go: `.Context(t)`
$DIR/core/services/directrequest/delegate_test.go: `.service.Start(ctx)`
$DIR/core/services/directrequest/delegate_test.go: `.listener.HandleLog(ctx, log)`
$DIR/core/services/directrequest/delegate_test.go: `.logBroadcaster.On("WasAlreadyConsumed", mock.Anything, mock.Anything)`
$DIR/core/services/directrequest/delegate_test.go: `.Return(false, nil)`
$DIR/core/services/directrequest/delegate_test.go: `.On("ReceiptsRoot")`
$DIR/core/services/directrequest/delegate_test.go: `.Return(common.Hash{})`
$DIR/core/services/directrequest/delegate_test.go: `.On("TransactionsRoot")`
$DIR/core/services/directrequest/delegate_test.go: `.Return(common.Hash{})`
$DIR/core/services/directrequest/delegate_test.go: `.On("StateRoot")`
$DIR/core/services/directrequest/delegate_test.go: `.Return(common.Hash{})`
$DIR/core/services/directrequest/delegate_test.go: `.NewAwaiter()`
$DIR/core/services/directrequest/delegate_test.go: `.runner.On("Run", mock.Anything, mock.Anything, mock.Anything, mock.Anything, mock.Anything)`
$DIR/core/services/directrequest/delegate_test.go: `.
Run(func(args mock.Arguments) {
runBeganAwaiter.ItHappened()
fn := args.Get(4).(func(sqlutil.DataSource) error)
require.NoError(t, fn(nil))
})`
$DIR/core/services/directrequest/delegate_test.go: `.ItHappened()`
$DIR/core/services/directrequest/delegate_test.go: `.Get(4)`
$DIR/core/services/directrequest/delegate_test.go: `.Once()`
$DIR/core/services/directrequest/delegate_test.go: `.Return(false, nil)`
$DIR/core/services/directrequest/delegate_test.go: `.AwaitOrFail(t, 5*time.Second)`
$DIR/core/services/directrequest/delegate_test.go: `.Run("Log has wrong jobID", func(t *testing.T) {
uni := NewDirectRequestUniverse(t)
defer uni.Cleanup()
log := log_mocks.NewBroadcast(t)
lbAwaiter := cltest.NewAwaiter()
uni.logBroadcaster.On("WasAlreadyConsumed", mock.Anything, mock.Anything).Return(false, nil)
uni.logBroadcaster.On("MarkConsumed", mock.Anything, mock.Anything, mock.Anything).Run(func(args mock.Arguments) { lbAwaiter.ItHappened() }).Return(nil)
logCancelOracleRequest := operator_wrapper.OperatorCancelOracleRequest{RequestId: uni.spec.ExternalIDEncodeStringToTopic()}
logAwaiter := cltest.NewAwaiter()
log.On("DecodedLog").Run(func(args mock.Arguments) { logAwaiter.ItHappened() }).Return(&logCancelOracleRequest)
log.On("RawLog").Return(types.Log{
Topics: []common.Hash{{}, {}},
})
log.On("String").Return("")
ctx := testutils.Context(t)
err := uni.service.Start(ctx)
require.NoError(t, err)
uni.listener.HandleLog(ctx, log)
logAwaiter.AwaitOrFail(t)
lbAwaiter.AwaitOrFail(t)
uni.service.Close()
})`
$DIR/core/services/directrequest/delegate_test.go: `.Cleanup()`
$DIR/core/services/directrequest/delegate_test.go: `.NewBroadcast(t)`
$DIR/core/services/directrequest/delegate_test.go: `.NewAwaiter()`
$DIR/core/services/directrequest/delegate_test.go: `.logBroadcaster.On("WasAlreadyConsumed", mock.Anything, mock.Anything)`
$DIR/core/services/directrequest/delegate_test.go: `.Return(false, nil)`
$DIR/core/services/directrequest/delegate_test.go: `.logBroadcaster.On("MarkConsumed", mock.Anything, mock.Anything, mock.Anything)`
$DIR/core/services/directrequest/delegate_test.go: `.Run(func(args mock.Arguments) { lbAwaiter.ItHappened() })`
$DIR/core/services/directrequest/delegate_test.go: `.ItHappened()`
$DIR/core/services/directrequest/delegate_test.go: `.Return(nil)`
$DIR/core/services/directrequest/delegate_test.go: `.spec.ExternalIDEncodeStringToTopic()`
$DIR/core/services/directrequest/delegate_test.go: `.NewAwaiter()`
$DIR/core/services/directrequest/delegate_test.go: `.On("DecodedLog")`
$DIR/core/services/directrequest/delegate_test.go: `.Run(func(args mock.Arguments) { logAwaiter.ItHappened() })`
$DIR/core/services/directrequest/delegate_test.go: `.ItHappened()`
$DIR/core/services/directrequest/delegate_test.go: `.Return(&logCancelOracleRequest)`
$DIR/core/services/directrequest/delegate_test.go: `.On("RawLog")`
$DIR/core/services/directrequest/delegate_test.go: `.Return(types.Log{
Topics: []common.Hash{{}, {}},
})`
$DIR/core/services/directrequest/delegate_test.go: `.On("String")`
$DIR/core/services/directrequest/delegate_test.go: `.Return("")`
$DIR/core/services/directrequest/delegate_test.go: `.Context(t)`
$DIR/core/services/directrequest/delegate_test.go: `.service.Start(ctx)`
$DIR/core/services/directrequest/delegate_test.go: `.listener.HandleLog(ctx, log)`
$DIR/core/services/directrequest/delegate_test.go: `.AwaitOrFail(t)`
$DIR/core/services/directrequest/delegate_test.go: `.AwaitOrFail(t)`
$DIR/core/services/directrequest/delegate_test.go: `.Run("Log is a CancelOracleRequest with no matching run", func(t *testing.T) {
uni := NewDirectRequestUniverse(t)
defer uni.Cleanup()
log := log_mocks.NewBroadcast(t)
uni.logBroadcaster.On("WasAlreadyConsumed", mock.Anything, mock.Anything).Return(false, nil)
logCancelOracleRequest := operator_wrapper.OperatorCancelOracleRequest{RequestId: uni.spec.ExternalIDEncodeStringToTopic()}
log.On("RawLog").Return(types.Log{
Topics: []common.Hash{
{},
uni.spec.ExternalIDEncodeStringToTopic(),
},
})
log.On("String").Return("")
log.On("DecodedLog").Return(&logCancelOracleRequest)
lbAwaiter := cltest.NewAwaiter()
uni.logBroadcaster.On("MarkConsumed", mock.Anything, mock.Anything, mock.Anything).Run(func(args mock.Arguments) { lbAwaiter.ItHappened() }).Return(nil)
ctx := testutils.Context(t)
err := uni.service.Start(ctx)
require.NoError(t, err)
uni.listener.HandleLog(ctx, log)
lbAwaiter.AwaitOrFail(t)
uni.service.Close()
})`
$DIR/core/services/directrequest/delegate_test.go: `.Cleanup()`
$DIR/core/services/directrequest/delegate_test.go: `.NewBroadcast(t)`
$DIR/core/services/directrequest/delegate_test.go: `.logBroadcaster.On("WasAlreadyConsumed", mock.Anything, mock.Anything)`
$DIR/core/services/directrequest/delegate_test.go: `.Return(false, nil)`
$DIR/core/services/directrequest/delegate_test.go: `.spec.ExternalIDEncodeStringToTopic()`
$DIR/core/services/directrequest/delegate_test.go: `.On("RawLog")`
$DIR/core/services/directrequest/delegate_test.go: `.Return(types.Log{
Topics: []common.Hash{
{},
uni.spec.ExternalIDEncodeStringToTopic(),
},
})`
$DIR/core/services/directrequest/delegate_test.go: `.spec.ExternalIDEncodeStringToTopic()`
$DIR/core/services/directrequest/delegate_test.go: `.On("String")`
$DIR/core/services/directrequest/delegate_test.go: `.Return("")`
$DIR/core/services/directrequest/delegate_test.go: `.On("DecodedLog")`
$DIR/core/services/directrequest/delegate_test.go: `.Return(&logCancelOracleRequest)`
$DIR/core/services/directrequest/delegate_test.go: `.NewAwaiter()`
$DIR/core/services/directrequest/delegate_test.go: `.logBroadcaster.On("MarkConsumed", mock.Anything, mock.Anything, mock.Anything)`
$DIR/core/services/directrequest/delegate_test.go: `.Run(func(args mock.Arguments) { lbAwaiter.ItHappened() })`
$DIR/core/services/directrequest/delegate_test.go: `.ItHappened()`
$DIR/core/services/directrequest/delegate_test.go: `.Return(nil)`
$DIR/core/services/directrequest/delegate_test.go: `.Context(t)`
$DIR/core/services/directrequest/delegate_test.go: `.service.Start(ctx)`
$DIR/core/services/directrequest/delegate_test.go: `.listener.HandleLog(ctx, log)`
$DIR/core/services/directrequest/delegate_test.go: `.AwaitOrFail(t)`
$DIR/core/services/directrequest/delegate_test.go: `.Run("Log is a CancelOracleRequest with a matching run", func(t *testing.T) {
uni := NewDirectRequestUniverse(t)
defer uni.Cleanup()
runLog := log_mocks.NewBroadcast(t)
runLog.On("ReceiptsRoot").Return(common.Hash{})
runLog.On("TransactionsRoot").Return(common.Hash{})
runLog.On("StateRoot").Return(common.Hash{})
runLog.On("EVMChainID").Return(*big.NewInt(0))
uni.logBroadcaster.On("WasAlreadyConsumed", mock.Anything, mock.Anything).Return(false, nil)
logOracleRequest := operator_wrapper.OperatorOracleRequest{
CancelExpiration: big.NewInt(0),
RequestId: uni.spec.ExternalIDEncodeStringToTopic(),
}
runLog.On("RawLog").Return(types.Log{
Topics: []common.Hash{
{},
uni.spec.ExternalIDEncodeStringToTopic(),
},
})
runLog.On("DecodedLog").Return(&logOracleRequest)
runLog.On("String").Return("")
uni.logBroadcaster.On("MarkConsumed", mock.Anything, mock.Anything, mock.Anything).Return(nil)
cancelLog := log_mocks.NewBroadcast(t)
uni.logBroadcaster.On("WasAlreadyConsumed", mock.Anything, mock.Anything).Return(false, nil)
logCancelOracleRequest := operator_wrapper.OperatorCancelOracleRequest{RequestId: uni.spec.ExternalIDEncodeStringToTopic()}
cancelLog.On("RawLog").Return(types.Log{
Topics: []common.Hash{
{},
uni.spec.ExternalIDEncodeStringToTopic(),
},
})
cancelLog.On("DecodedLog").Return(&logCancelOracleRequest)
cancelLog.On("String").Return("")
uni.logBroadcaster.On("MarkConsumed", mock.Anything, mock.Anything, mock.Anything).Return(nil)
ctx := testutils.Context(t)
err := uni.service.Start(ctx)
require.NoError(t, err)
timeout := 5 * time.Second
runBeganAwaiter := cltest.NewAwaiter()
runCancelledAwaiter := cltest.NewAwaiter()
uni.runner.On("Run", mock.Anything, mock.Anything, mock.Anything, mock.Anything, mock.Anything).Run(func(args mock.Arguments) {
runBeganAwaiter.ItHappened()
ctx := args[0].(context.Context)
select {
case <-time.After(timeout):
t.Fatalf("Timed out waiting for Run to be canceled (%v)", timeout)
case <-ctx.Done():
runCancelledAwaiter.ItHappened()
}
}).Once().Return(false, nil)
uni.listener.HandleLog(ctx, runLog)
runBeganAwaiter.AwaitOrFail(t, timeout)
uni.listener.HandleLog(ctx, cancelLog)
runCancelledAwaiter.AwaitOrFail(t, timeout)
uni.service.Close()
})`
$DIR/core/services/directrequest/delegate_test.go: `.Cleanup()`
$DIR/core/services/directrequest/delegate_test.go: `.NewBroadcast(t)`
$DIR/core/services/directrequest/delegate_test.go: `.On("ReceiptsRoot")`
$DIR/core/services/directrequest/delegate_test.go: `.Return(common.Hash{})`
$DIR/core/services/directrequest/delegate_test.go: `.On("TransactionsRoot")`
$DIR/core/services/directrequest/delegate_test.go: `.Return(common.Hash{})`
$DIR/core/services/directrequest/delegate_test.go: `.On("StateRoot")`
$DIR/core/services/directrequest/delegate_test.go: `.Return(common.Hash{})`
$DIR/core/services/directrequest/delegate_test.go: `.On("EVMChainID")`
$DIR/core/services/directrequest/delegate_test.go: `.Return(*big.NewInt(0))`
$DIR/core/services/directrequest/delegate_test.go: `.NewInt(0)`
$DIR/core/services/directrequest/delegate_test.go: `.logBroadcaster.On("WasAlreadyConsumed", mock.Anything, mock.Anything)`
$DIR/core/services/directrequest/delegate_test.go: `.Return(false, nil)`
$DIR/core/services/directrequest/delegate_test.go: `.NewInt(0)`
$DIR/core/services/directrequest/delegate_test.go: `.spec.ExternalIDEncodeStringToTopic()`
$DIR/core/services/directrequest/delegate_test.go: `.On("RawLog")`
$DIR/core/services/directrequest/delegate_test.go: `.Return(types.Log{
Topics: []common.Hash{
{},
uni.spec.ExternalIDEncodeStringToTopic(),
},
})`
$DIR/core/services/directrequest/delegate_test.go: `.spec.ExternalIDEncodeStringToTopic()`
$DIR/core/services/directrequest/delegate_test.go: `.On("DecodedLog")`
$DIR/core/services/directrequest/delegate_test.go: `.Return(&logOracleRequest)`
$DIR/core/services/directrequest/delegate_test.go: `.On("String")`
$DIR/core/services/directrequest/delegate_test.go: `.Return("")`
$DIR/core/services/directrequest/delegate_test.go: `.logBroadcaster.On("MarkConsumed", mock.Anything, mock.Anything, mock.Anything)`
$DIR/core/services/directrequest/delegate_test.go: `.Return(nil)`
$DIR/core/services/directrequest/delegate_test.go: `.NewBroadcast(t)`
$DIR/core/services/directrequest/delegate_test.go: `.logBroadcaster.On("WasAlreadyConsumed", mock.Anything, mock.Anything)`
$DIR/core/services/directrequest/delegate_test.go: `.Return(false, nil)`
$DIR/core/services/directrequest/delegate_test.go: `.spec.ExternalIDEncodeStringToTopic()`
$DIR/core/services/directrequest/delegate_test.go: `.On("RawLog")`
$DIR/core/services/directrequest/delegate_test.go: `.Return(types.Log{
Topics: []common.Hash{
{},
uni.spec.ExternalIDEncodeStringToTopic(),
},
})`
$DIR/core/services/directrequest/delegate_test.go: `.spec.ExternalIDEncodeStringToTopic()`
$DIR/core/services/directrequest/delegate_test.go: `.On("DecodedLog")`
$DIR/core/services/directrequest/delegate_test.go: `.Return(&logCancelOracleRequest)`
$DIR/core/services/directrequest/delegate_test.go: `.On("String")`
$DIR/core/services/directrequest/delegate_test.go: `.Return("")`
$DIR/core/services/directrequest/delegate_test.go: `.logBroadcaster.On("MarkConsumed", mock.Anything, mock.Anything, mock.Anything)`
$DIR/core/services/directrequest/delegate_test.go: `.Return(nil)`
$DIR/core/services/directrequest/delegate_test.go: `.Context(t)`
$DIR/core/services/directrequest/delegate_test.go: `.service.Start(ctx)`
$DIR/core/services/directrequest/delegate_test.go: `.NewAwaiter()`
$DIR/core/services/directrequest/delegate_test.go: `.NewAwaiter()`
$DIR/core/services/directrequest/delegate_test.go: `.runner.On("Run", mock.Anything, mock.Anything, mock.Anything, mock.Anything, mock.Anything)`
$DIR/core/services/directrequest/delegate_test.go: `.Run(func(args mock.Arguments) {
runBeganAwaiter.ItHappened()
ctx := args[0].(context.Context)
select {
case <-time.After(timeout):
t.Fatalf("Timed out waiting for Run to be canceled (%v)", timeout)
case <-ctx.Done():
runCancelledAwaiter.ItHappened()
}
})`
$DIR/core/services/directrequest/delegate_test.go: `.ItHappened()`
$DIR/core/services/directrequest/delegate_test.go: `.After(timeout)`
$DIR/core/services/directrequest/delegate_test.go: `.Done()`
$DIR/core/services/directrequest/delegate_test.go: `.ItHappened()`
$DIR/core/services/directrequest/delegate_test.go: `.Once()`
$DIR/core/services/directrequest/delegate_test.go: `.Return(false, nil)`
$DIR/core/services/directrequest/delegate_test.go: `.listener.HandleLog(ctx, runLog)`
$DIR/core/services/directrequest/delegate_test.go: `.AwaitOrFail(t, timeout)`
$DIR/core/services/directrequest/delegate_test.go: `.listener.HandleLog(ctx, cancelLog)`
$DIR/core/services/directrequest/delegate_test.go: `.AwaitOrFail(t, timeout)`
$DIR/core/services/directrequest/delegate_test.go: `.Run("Log has sufficient funds", func(t *testing.T) {
cfg := configtest.NewGeneralConfig(t, func(c *chainlink.Config, s *chainlink.Secrets) {
c.EVM[0].MinIncomingConfirmations = ptr[uint32](1)
c.EVM[0].MinContractPayment = assets.NewLinkFromJuels(100)
})
uni := NewDirectRequestUniverseWithConfig(t, cfg, nil)
defer uni.Cleanup()
log := log_mocks.NewBroadcast(t)
log.On("ReceiptsRoot").Return(common.Hash{})
log.On("TransactionsRoot").Return(common.Hash{})
log.On("StateRoot").Return(common.Hash{})
log.On("EVMChainID").Return(*big.NewInt(0))
uni.logBroadcaster.On("WasAlreadyConsumed", mock.Anything, mock.Anything).Return(false, nil)
logOracleRequest := operator_wrapper.OperatorOracleRequest{
CancelExpiration: big.NewInt(0),
Payment: big.NewInt(100),
}
log.On("RawLog").Return(types.Log{
Topics: []common.Hash{
{},
uni.spec.ExternalIDEncodeStringToTopic(),
},
})
log.On("DecodedLog").Return(&logOracleRequest)
log.On("String").Return("")
uni.logBroadcaster.On("MarkConsumed", mock.Anything, mock.Anything, mock.Anything).Return(nil)
runBeganAwaiter := cltest.NewAwaiter()
uni.runner.On("Run", mock.Anything, mock.Anything, mock.Anything, mock.Anything, mock.Anything).Run(func(args mock.Arguments) {
runBeganAwaiter.ItHappened()
fn := args.Get(4).(func(sqlutil.DataSource) error)
require.NoError(t, fn(nil))
}).Once().Return(false, nil)
ctx := testutils.Context(t)
err := uni.service.Start(ctx)
require.NoError(t, err)
// check if the job exists under the correct ID
drJob, jErr := uni.jobORM.FindJob(ctx, uni.listener.JobID())
require.NoError(t, jErr)
require.Equal(t, drJob.ID, uni.listener.JobID())
require.NotNil(t, drJob.DirectRequestSpec)
uni.listener.HandleLog(ctx, log)
runBeganAwaiter.AwaitOrFail(t, 5*time.Second)
uni.service.Close()
})`
$DIR/core/services/directrequest/delegate_test.go: `.NewGeneralConfig(t, func(c *chainlink.Config, s *chainlink.Secrets) {
c.EVM[0].MinIncomingConfirmations = ptr[uint32](1)
c.EVM[0].MinContractPayment = assets.NewLinkFromJuels(100)
})`
$DIR/core/services/directrequest/delegate_test.go: `.NewLinkFromJuels(100)`
$DIR/core/services/directrequest/delegate_test.go: `.Cleanup()`
$DIR/core/services/directrequest/delegate_test.go: `.NewBroadcast(t)`
$DIR/core/services/directrequest/delegate_test.go: `.On("ReceiptsRoot")`
$DIR/core/services/directrequest/delegate_test.go: `.Return(common.Hash{})`
$DIR/core/services/directrequest/delegate_test.go: `.On("TransactionsRoot")`
$DIR/core/services/directrequest/delegate_test.go: `.Return(common.Hash{})`
$DIR/core/services/directrequest/delegate_test.go: `.On("StateRoot")`
$DIR/core/services/directrequest/delegate_test.go: `.Return(common.Hash{})`
$DIR/core/services/directrequest/delegate_test.go: `.On("EVMChainID")`
$DIR/core/services/directrequest/delegate_test.go: `.Return(*big.NewInt(0))`
$DIR/core/services/directrequest/delegate_test.go: `.NewInt(0)`
$DIR/core/services/directrequest/delegate_test.go: `.logBroadcaster.On("WasAlreadyConsumed", mock.Anything, mock.Anything)`
$DIR/core/services/directrequest/delegate_test.go: `.Return(false, nil)`
$DIR/core/services/directrequest/delegate_test.go: `.NewInt(0)`
$DIR/core/services/directrequest/delegate_test.go: `.NewInt(100)`
$DIR/core/services/directrequest/delegate_test.go: `.On("RawLog")`
$DIR/core/services/directrequest/delegate_test.go: `.Return(types.Log{
Topics: []common.Hash{
{},
uni.spec.ExternalIDEncodeStringToTopic(),
},
})`
$DIR/core/services/directrequest/delegate_test.go: `.spec.ExternalIDEncodeStringToTopic()`
$DIR/core/services/directrequest/delegate_test.go: `.On("DecodedLog")`
$DIR/core/services/directrequest/delegate_test.go: `.Return(&logOracleRequest)`
$DIR/core/services/directrequest/delegate_test.go: `.On("String")`
$DIR/core/services/directrequest/delegate_test.go: `.Return("")`
$DIR/core/services/directrequest/delegate_test.go: `.logBroadcaster.On("MarkConsumed", mock.Anything, mock.Anything, mock.Anything)`
$DIR/core/services/directrequest/delegate_test.go: `.Return(nil)`
$DIR/core/services/directrequest/delegate_test.go: `.NewAwaiter()`
$DIR/core/services/directrequest/delegate_test.go: `.runner.On("Run", mock.Anything, mock.Anything, mock.Anything, mock.Anything, mock.Anything)`
$DIR/core/services/directrequest/delegate_test.go: `.Run(func(args mock.Arguments) {
runBeganAwaiter.ItHappened()
fn := args.Get(4).(func(sqlutil.DataSource) error)
require.NoError(t, fn(nil))
})`
$DIR/core/services/directrequest/delegate_test.go: `.ItHappened()`
$DIR/core/services/directrequest/delegate_test.go: `.Get(4)`
$DIR/core/services/directrequest/delegate_test.go: `.Once()`
$DIR/core/services/directrequest/delegate_test.go: `.Return(false, nil)`
$DIR/core/services/directrequest/delegate_test.go: `.Context(t)`
$DIR/core/services/directrequest/delegate_test.go: `.service.Start(ctx)`
$DIR/core/services/directrequest/delegate_test.go: `.jobORM.FindJob(ctx, uni.listener.JobID())`
$DIR/core/services/directrequest/delegate_test.go: `.listener.JobID()`
$DIR/core/services/directrequest/delegate_test.go: `.listener.HandleLog(ctx, log)`
$DIR/core/services/directrequest/delegate_test.go: `.AwaitOrFail(t, 5*time.Second)`
$DIR/core/services/directrequest/delegate_test.go: `.Run("Log has insufficient funds", func(t *testing.T) {
cfg := configtest.NewGeneralConfig(t, func(c *chainlink.Config, s *chainlink.Secrets) {
c.EVM[0].MinIncomingConfirmations = ptr[uint32](1)
c.EVM[0].MinContractPayment = assets.NewLinkFromJuels(100)
})
uni := NewDirectRequestUniverseWithConfig(t, cfg, nil)
defer uni.Cleanup()
log := log_mocks.NewBroadcast(t)
uni.logBroadcaster.On("WasAlreadyConsumed", mock.Anything, mock.Anything).Return(false, nil)
logOracleRequest := operator_wrapper.OperatorOracleRequest{
CancelExpiration: big.NewInt(0),
Payment: big.NewInt(99),
}
log.On("RawLog").Return(types.Log{
Topics: []common.Hash{
{},
uni.spec.ExternalIDEncodeStringToTopic(),
},
})
log.On("DecodedLog").Return(&logOracleRequest)
log.On("String").Return("")
markConsumedLogAwaiter := cltest.NewAwaiter()
uni.logBroadcaster.On("MarkConsumed", mock.Anything, mock.Anything, mock.Anything).Run(func(args mock.Arguments) {
markConsumedLogAwaiter.ItHappened()
}).Return(nil)
ctx := testutils.Context(t)
err := uni.service.Start(ctx)
require.NoError(t, err)
uni.listener.HandleLog(ctx, log)
markConsumedLogAwaiter.AwaitOrFail(t, 5*time.Second)
uni.service.Close()
})`
$DIR/core/services/directrequest/delegate_test.go: `.NewGeneralConfig(t, func(c *chainlink.Config, s *chainlink.Secrets) {
c.EVM[0].MinIncomingConfirmations = ptr[uint32](1)
c.EVM[0].MinContractPayment = assets.NewLinkFromJuels(100)
})`
$DIR/core/services/directrequest/delegate_test.go: `.NewLinkFromJuels(100)`
$DIR/core/services/directrequest/delegate_test.go: `.Cleanup()`
$DIR/core/services/directrequest/delegate_test.go: `.NewBroadcast(t)`
$DIR/core/services/directrequest/delegate_test.go: `.logBroadcaster.On("WasAlreadyConsumed", mock.Anything, mock.Anything)`
$DIR/core/services/directrequest/delegate_test.go: `.Return(false, nil)`
$DIR/core/services/directrequest/delegate_test.go: `.NewInt(0)`
$DIR/core/services/directrequest/delegate_test.go: `.NewInt(99)`
$DIR/core/services/directrequest/delegate_test.go: `.On("RawLog")`
$DIR/core/services/directrequest/delegate_test.go: `.Return(types.Log{
Topics: []common.Hash{
{},
uni.spec.ExternalIDEncodeStringToTopic(),
},
})`
$DIR/core/services/directrequest/delegate_test.go: `.spec.ExternalIDEncodeStringToTopic()`
$DIR/core/services/directrequest/delegate_test.go: `.On("DecodedLog")`
$DIR/core/services/directrequest/delegate_test.go: `.Return(&logOracleRequest)`
$DIR/core/services/directrequest/delegate_test.go: `.On("String")`
$DIR/core/services/directrequest/delegate_test.go: `.Return("")`
$DIR/core/services/directrequest/delegate_test.go: `.NewAwaiter()`
$DIR/core/services/directrequest/delegate_test.go: `.logBroadcaster.On("MarkConsumed", mock.Anything, mock.Anything, mock.Anything)`
$DIR/core/services/directrequest/delegate_test.go: `.Run(func(args mock.Arguments) {
markConsumedLogAwaiter.ItHappened()
})`
$DIR/core/services/directrequest/delegate_test.go: `.ItHappened()`
$DIR/core/services/directrequest/delegate_test.go: `.Return(nil)`
$DIR/core/services/directrequest/delegate_test.go: `.Context(t)`
$DIR/core/services/directrequest/delegate_test.go: `.service.Start(ctx)`
$DIR/core/services/directrequest/delegate_test.go: `.listener.HandleLog(ctx, log)`
$DIR/core/services/directrequest/delegate_test.go: `.AwaitOrFail(t, 5*time.Second)`
$DIR/core/services/directrequest/delegate_test.go: `.Run("requesters is specified and log is requested by a whitelisted address", func(t *testing.T) {
requester := testutils.NewAddress()
cfg := configtest.NewGeneralConfig(t, func(c *chainlink.Config, s *chainlink.Secrets) {
c.EVM[0].MinIncomingConfirmations = ptr[uint32](1)
c.EVM[0].MinContractPayment = assets.NewLinkFromJuels(100)
})
uni := NewDirectRequestUniverseWithConfig(t, cfg, func(jb *job.Job) {
jb.DirectRequestSpec.Requesters = []common.Address{testutils.NewAddress(), requester}
})
defer uni.Cleanup()
log := log_mocks.NewBroadcast(t)
log.On("ReceiptsRoot").Return(common.Hash{})
log.On("TransactionsRoot").Return(common.Hash{})
log.On("StateRoot").Return(common.Hash{})
log.On("EVMChainID").Return(*big.NewInt(0))
uni.logBroadcaster.On("WasAlreadyConsumed", mock.Anything, mock.Anything).Return(false, nil)
logOracleRequest := operator_wrapper.OperatorOracleRequest{
CancelExpiration: big.NewInt(0),
Payment: big.NewInt(100),
Requester: requester,
}
log.On("RawLog").Return(types.Log{
Topics: []common.Hash{
{},
uni.spec.ExternalIDEncodeStringToTopic(),
},
})
log.On("DecodedLog").Return(&logOracleRequest)
log.On("String").Return("")
markConsumedLogAwaiter := cltest.NewAwaiter()
uni.logBroadcaster.On("MarkConsumed", mock.Anything, mock.Anything, mock.Anything).Run(func(args mock.Arguments) {
markConsumedLogAwaiter.ItHappened()
}).Return(nil)
runBeganAwaiter := cltest.NewAwaiter()
uni.runner.On("Run", mock.Anything, mock.Anything, mock.Anything, mock.Anything, mock.Anything).Run(func(args mock.Arguments) {
runBeganAwaiter.ItHappened()
fn := args.Get(4).(func(sqlutil.DataSource) error)
require.NoError(t, fn(nil))
}).Once().Return(false, nil)
ctx := testutils.Context(t)
err := uni.service.Start(ctx)
require.NoError(t, err)
// check if the job exists under the correct ID
drJob, jErr := uni.jobORM.FindJob(ctx, uni.listener.JobID())
require.NoError(t, jErr)
require.Equal(t, drJob.ID, uni.listener.JobID())
require.NotNil(t, drJob.DirectRequestSpec)
uni.listener.HandleLog(ctx, log)
runBeganAwaiter.AwaitOrFail(t, 5*time.Second)
uni.service.Close()
})`
$DIR/core/services/directrequest/delegate_test.go: `.NewAddress()`
$DIR/core/services/directrequest/delegate_test.go: `.NewGeneralConfig(t, func(c *chainlink.Config, s *chainlink.Secrets) {
c.EVM[0].MinIncomingConfirmations = ptr[uint32](1)
c.EVM[0].MinContractPayment = assets.NewLinkFromJuels(100)
})`
$DIR/core/services/directrequest/delegate_test.go: `.NewLinkFromJuels(100)`
$DIR/core/services/directrequest/delegate_test.go: `.NewAddress()`
$DIR/core/services/directrequest/delegate_test.go: `.Cleanup()`
$DIR/core/services/directrequest/delegate_test.go: `.NewBroadcast(t)`
$DIR/core/services/directrequest/delegate_test.go: `.On("ReceiptsRoot")`
$DIR/core/services/directrequest/delegate_test.go: `.Return(common.Hash{})`
$DIR/core/services/directrequest/delegate_test.go: `.On("TransactionsRoot")`
$DIR/core/services/directrequest/delegate_test.go: `.Return(common.Hash{})`
$DIR/core/services/directrequest/delegate_test.go: `.On("StateRoot")`
$DIR/core/services/directrequest/delegate_test.go: `.Return(common.Hash{})`
$DIR/core/services/directrequest/delegate_test.go: `.On("EVMChainID")`
$DIR/core/services/directrequest/delegate_test.go: `.Return(*big.NewInt(0))`
$DIR/core/services/directrequest/delegate_test.go: `.NewInt(0)`
$DIR/core/services/directrequest/delegate_test.go: `.logBroadcaster.On("WasAlreadyConsumed", mock.Anything, mock.Anything)`
$DIR/core/services/directrequest/delegate_test.go: `.Return(false, nil)`
$DIR/core/services/directrequest/delegate_test.go: `.NewInt(0)`
$DIR/core/services/directrequest/delegate_test.go: `.NewInt(100)`
$DIR/core/services/directrequest/delegate_test.go: `.On("RawLog")`
$DIR/core/services/directrequest/delegate_test.go: `.Return(types.Log{
Topics: []common.Hash{
{},
uni.spec.ExternalIDEncodeStringToTopic(),
},
})`
$DIR/core/services/directrequest/delegate_test.go: `.spec.ExternalIDEncodeStringToTopic()`
$DIR/core/services/directrequest/delegate_test.go: `.On("DecodedLog")`
$DIR/core/services/directrequest/delegate_test.go: `.Return(&logOracleRequest)`
$DIR/core/services/directrequest/delegate_test.go: `.On("String")`
$DIR/core/services/directrequest/delegate_test.go: `.Return("")`
$DIR/core/services/directrequest/delegate_test.go: `.NewAwaiter()`
$DIR/core/services/directrequest/delegate_test.go: `.logBroadcaster.On("MarkConsumed", mock.Anything, mock.Anything, mock.Anything)`
$DIR/core/services/directrequest/delegate_test.go: `.Run(func(args mock.Arguments) {
markConsumedLogAwaiter.ItHappened()
})`
$DIR/core/services/directrequest/delegate_test.go: `.ItHappened()`
$DIR/core/services/directrequest/delegate_test.go: `.Return(nil)`
$DIR/core/services/directrequest/delegate_test.go: `.NewAwaiter()`
$DIR/core/services/directrequest/delegate_test.go: `.runner.On("Run", mock.Anything, mock.Anything, mock.Anything, mock.Anything, mock.Anything)`
$DIR/core/services/directrequest/delegate_test.go: `.Run(func(args mock.Arguments) {
runBeganAwaiter.ItHappened()
fn := args.Get(4).(func(sqlutil.DataSource) error)
require.NoError(t, fn(nil))
})`
$DIR/core/services/directrequest/delegate_test.go: `.ItHappened()`
$DIR/core/services/directrequest/delegate_test.go: `.Get(4)`
$DIR/core/services/directrequest/delegate_test.go: `.Once()`
$DIR/core/services/directrequest/delegate_test.go: `.Return(false, nil)`
$DIR/core/services/directrequest/delegate_test.go: `.Context(t)`
$DIR/core/services/directrequest/delegate_test.go: `.service.Start(ctx)`
$DIR/core/services/directrequest/delegate_test.go: `.jobORM.FindJob(ctx, uni.listener.JobID())`
$DIR/core/services/directrequest/delegate_test.go: `.listener.JobID()`
$DIR/core/services/directrequest/delegate_test.go: `.listener.HandleLog(ctx, log)`
$DIR/core/services/directrequest/delegate_test.go: `.AwaitOrFail(t, 5*time.Second)`
$DIR/core/services/directrequest/delegate_test.go: `.NewAddress()`
$DIR/core/services/directrequest/delegate_test.go: `.NewGeneralConfig(t, func(c *chainlink.Config, s *chainlink.Secrets) {
c.EVM[0].MinIncomingConfirmations = ptr[uint32](1)
c.EVM[0].MinContractPayment = assets.NewLinkFromJuels(100)
})`
$DIR/core/services/directrequest/delegate_test.go: `.NewLinkFromJuels(100)`
$DIR/core/services/directrequest/delegate_test.go: `.NewAddress()`
$DIR/core/services/directrequest/delegate_test.go: `.NewAddress()`
$DIR/core/services/directrequest/delegate_test.go: `.Cleanup()`
$DIR/core/services/directrequest/delegate_test.go: `.NewBroadcast(t)`
$DIR/core/services/directrequest/delegate_test.go: `.logBroadcaster.On("WasAlreadyConsumed", mock.Anything, mock.Anything)`
$DIR/core/services/directrequest/delegate_test.go: `.Return(false, nil)`
$DIR/core/services/directrequest/delegate_test.go: `.NewInt(0)`
$DIR/core/services/directrequest/delegate_test.go: `.NewInt(100)`
$DIR/core/services/directrequest/delegate_test.go: `.On("RawLog")`
$DIR/core/services/directrequest/delegate_test.go: `.Return(types.Log{
Topics: []common.Hash{
{},
uni.spec.ExternalIDEncodeStringToTopic(),
},
})`
$DIR/core/services/directrequest/delegate_test.go: `.spec.ExternalIDEncodeStringToTopic()`
$DIR/core/services/directrequest/delegate_test.go: `.On("DecodedLog")`
$DIR/core/services/directrequest/delegate_test.go: `.Return(&logOracleRequest)`
$DIR/core/services/directrequest/delegate_test.go: `.On("String")`
$DIR/core/services/directrequest/delegate_test.go: `.Return("")`
$DIR/core/services/directrequest/delegate_test.go: `.NewAwaiter()`
$DIR/core/services/directrequest/delegate_test.go: `.logBroadcaster.On("MarkConsumed", mock.Anything, mock.Anything, mock.Anything)`
$DIR/core/services/directrequest/delegate_test.go: `.Run(func(args mock.Arguments) {
markConsumedLogAwaiter.ItHappened()
})`
$DIR/core/services/directrequest/delegate_test.go: `.ItHappened()`
$DIR/core/services/directrequest/delegate_test.go: `.Return(nil)`
$DIR/core/services/directrequest/delegate_test.go: `.Context(t)`
$DIR/core/services/directrequest/delegate_test.go: `.service.Start(ctx)`
$DIR/core/services/directrequest/delegate_test.go: `.listener.HandleLog(ctx, log)`
$DIR/core/services/directrequest/delegate_test.go: `.AwaitOrFail(t, 5*time.Second)`
$DIR/core/services/directrequest/validate_test.go: `t.Run("no minIncomingConfirmations specified", func(t *testing.T) {
t.Parallel()
toml := `
type = "directrequest"
schemaVersion = 1
name = "example eth request event spec"
`
s, err := ValidatedDirectRequestSpec(toml)
require.NoError(t, err)
assert.False(t, s.DirectRequestSpec.MinIncomingConfirmations.Valid)
})`
$DIR/core/services/directrequest/validate_test.go: `.Run("no minIncomingConfirmations specified", func(t *testing.T) {
t.Parallel()
toml := `
type = "directrequest"
schemaVersion = 1
name = "example eth request event spec"
`
s, err := ValidatedDirectRequestSpec(toml)
require.NoError(t, err)
assert.False(t, s.DirectRequestSpec.MinIncomingConfirmations.Valid)
})`
$DIR/core/services/feeds/connection_manager_test.go: `t.Run(tt.name, func(t *testing.T) {
mgr := &connectionsManager{
connections: tt.fields.connections,
}
if got := mgr.IsConnected(tt.args.id); got != tt.want {
t.Errorf("IsConnected() = %v, want %v", got, tt.want)
}
})`
$DIR/core/services/feeds/connection_manager_test.go: `.Run(tt.name, func(t *testing.T) {
mgr := &connectionsManager{
connections: tt.fields.connections,
}
if got := mgr.IsConnected(tt.args.id); got != tt.want {
t.Errorf("IsConnected() = %v, want %v", got, tt.want)
}
})`
$DIR/core/services/feeds/connection_manager_test.go: `.IsConnected(tt.args.id)`
$DIR/core/services/feeds/models_test.go: `t.Run(tt.name, func(t *testing.T) {
ct, err := NewChainType(tt.give)
assert.Equal(t, tt.want, ct)
if tt.wantErr != nil {
assert.EqualError(t, err, tt.wantErr.Error())
}
})`
$DIR/core/services/feeds/models_test.go: `pt, err = ToPluginType("execute")`
$DIR/core/services/feeds/models_test.go: `pt, err = ToPluginType("median")`
$DIR/core/services/feeds/models_test.go: `pt, err = ToPluginType("mercury")`
$DIR/core/services/feeds/models_test.go: `pt, err = ToPluginType("rebalancer")`
$DIR/core/services/feeds/models_test.go: `pt, err = ToPluginType("xxx")`
$DIR/core/services/feeds/models_test.go: `t.Run(tt.name, func(t *testing.T) {
val, err := tt.give.Value()
require.NoError(t, err)
actual, ok := val.([]byte)
require.True(t, ok)
assert.Equal(t, tt.want, string(actual))
})`
$DIR/core/services/feeds/models_test.go: `t.Run(tt.name, func(t *testing.T) {
var actual OCR1Config
err := actual.Scan([]byte(tt.give))
require.NoError(t, err)
assert.Equal(t, tt.want, actual)
})`
$DIR/core/services/feeds/models_test.go: `t.Run(tc.name, func(t *testing.T) {
t.Parallel()
jp := &JobProposalSpec{Status: tc.status}
assert.Equal(t, tc.want, jp.CanEditDefinition())
})`
$DIR/core/services/feeds/models_test.go: `.New("invalid chain type")`
$DIR/core/services/feeds/models_test.go: `.Run(tt.name, func(t *testing.T) {
ct, err := NewChainType(tt.give)
assert.Equal(t, tt.want, ct)
if tt.wantErr != nil {
assert.EqualError(t, err, tt.wantErr.Error())
}
})`
$DIR/core/services/feeds/models_test.go: `.Value()`
$DIR/core/services/feeds/models_test.go: `.Scan([]byte(give))`
$DIR/core/services/feeds/models_test.go: `.StringFrom(multiaddr)`
$DIR/core/services/feeds/models_test.go: `.StringFrom(p2pPeerID)`
$DIR/core/services/feeds/models_test.go: `.StringFrom(keyBundleID)`
$DIR/core/services/feeds/models_test.go: `.StringFrom(multiaddr)`
$DIR/core/services/feeds/models_test.go: `.StringFromPtr(nil)`
$DIR/core/services/feeds/models_test.go: `.StringFromPtr(nil)`
$DIR/core/services/feeds/models_test.go: `.StringFromPtr(nil)`
$DIR/core/services/feeds/models_test.go: `.StringFrom(p2pPeerID)`
$DIR/core/services/feeds/models_test.go: `.StringFrom(keyBundleID)`
$DIR/core/services/feeds/models_test.go: `.Run(tt.name, func(t *testing.T) {
val, err := tt.give.Value()
require.NoError(t, err)
actual, ok := val.([]byte)
require.True(t, ok)
assert.Equal(t, tt.want, string(actual))
})`
$DIR/core/services/feeds/models_test.go: `.give.Value()`
$DIR/core/services/feeds/models_test.go: `.StringFrom(multiaddr)`
$DIR/core/services/feeds/models_test.go: `.StringFrom(p2pPeerID)`
$DIR/core/services/feeds/models_test.go: `.StringFrom(keyBundleID)`
$DIR/core/services/feeds/models_test.go: `.StringFrom(multiaddr)`
$DIR/core/services/feeds/models_test.go: `.StringFromPtr(nil)`
$DIR/core/services/feeds/models_test.go: `.StringFromPtr(nil)`
$DIR/core/services/feeds/models_test.go: `.StringFromPtr(nil)`
$DIR/core/services/feeds/models_test.go: `.StringFrom(p2pPeerID)`
$DIR/core/services/feeds/models_test.go: `.StringFrom(keyBundleID)`
$DIR/core/services/feeds/models_test.go: `.Run(tt.name, func(t *testing.T) {
var actual OCR1Config
err := actual.Scan([]byte(tt.give))
require.NoError(t, err)
assert.Equal(t, tt.want, actual)
})`
$DIR/core/services/feeds/models_test.go: `.Scan([]byte(tt.give))`
$DIR/core/services/feeds/models_test.go: `.Value()`
$DIR/core/services/feeds/models_test.go: `.Scan(give)`
$DIR/core/services/feeds/models_test.go: `.StringFrom("multiaddr")`
$DIR/core/services/feeds/models_test.go: `.StringFrom("forwarderaddress")`
$DIR/core/services/feeds/models_test.go: `.StringFrom("peerid")`
$DIR/core/services/feeds/models_test.go: `.StringFrom("ocrkeyid")`
$DIR/core/services/feeds/models_test.go: `.Value()`
$DIR/core/services/feeds/models_test.go: `.StringFrom("multiaddr")`
$DIR/core/services/feeds/models_test.go: `.StringFrom("forwarderaddress")`
$DIR/core/services/feeds/models_test.go: `.StringFrom("peerid")`
$DIR/core/services/feeds/models_test.go: `.StringFrom("ocrkeyid")`
$DIR/core/services/feeds/models_test.go: `.Scan([]byte(give))`
$DIR/core/services/feeds/models_test.go: `.Run(tc.name, func(t *testing.T) {
t.Parallel()
jp := &JobProposalSpec{Status: tc.status}
assert.Equal(t, tc.want, jp.CanEditDefinition())
})`
$DIR/core/services/feeds/models_test.go: `.toMetrics()`
$DIR/core/services/feeds/orm_test.go: `count, err = orm.CountManagers(ctx)`
$DIR/core/services/feeds/orm_test.go: `_, err = orm.GetManager(ctx, -1)`
$DIR/core/services/feeds/orm_test.go: `err = orm.UpdateManager(ctx, updatedMgr)`
$DIR/core/services/feeds/orm_test.go: `assertChainConfigEqual(t, map[string]interface{}{
"feedsManagerID": cfg1.FeedsManagerID,
"chainID": cfg1.ChainID,
"chainType": cfg1.ChainType,
"accountAddress": cfg1.AccountAddress,
"accountAddressPublicKey": cfg1.AccountAddressPublicKey,
"adminAddress": cfg1.AdminAddress,
"fluxMonitorConfig": cfg1.FluxMonitorConfig,
"ocrConfig": cfg1.OCR1Config,
"ocr2Config": cfg1.OCR2Config,
}, *actual)`
$DIR/core/services/feeds/orm_test.go: `actual, err = orm.GetChainConfig(ctx, ids[1])`
$DIR/core/services/feeds/orm_test.go: `assertChainConfigEqual(t, map[string]interface{}{
"feedsManagerID": cfg2.FeedsManagerID,
"chainID": cfg2.ChainID,
"chainType": cfg2.ChainType,
"accountAddress": cfg2.AccountAddress,
"adminAddress": cfg2.AdminAddress,
"fluxMonitorConfig": cfg1.FluxMonitorConfig,
"ocrConfig": cfg1.OCR1Config,
"ocr2Config": cfg1.OCR2Config,
}, *actual)`
$DIR/core/services/feeds/orm_test.go: `ids, err = orm.CreateBatchChainConfig(ctx, []feeds.ChainConfig{})`
$DIR/core/services/feeds/orm_test.go: `_, err = orm.GetChainConfig(ctx, id)`
$DIR/core/services/feeds/orm_test.go: `_, err = orm.GetChainConfig(ctx, id)`
$DIR/core/services/feeds/orm_test.go: `updateCfg.ID = id`
$DIR/core/services/feeds/orm_test.go: `id, err = orm.UpdateChainConfig(ctx, updateCfg)`
$DIR/core/services/feeds/orm_test.go: `_, err = orm.CreateJobProposal(ctx, deletedJp)`
$DIR/core/services/feeds/orm_test.go: `t.Run("by id", func(t *testing.T) {
actual, err := orm.GetJobProposal(ctx, id)
require.NoError(t, err)
assert.Equal(t, id, actual.ID)
assertJobEquals(actual)
_, err = orm.GetJobProposal(ctx, int64(0))
require.Error(t, err)
})`
$DIR/core/services/feeds/orm_test.go: `assertJobEquals(actual)`
$DIR/core/services/feeds/orm_test.go: `_, err = orm.GetJobProposal(ctx, int64(0))`
$DIR/core/services/feeds/orm_test.go: `assertJobEquals(actual)`
$DIR/core/services/feeds/orm_test.go: `_, err = orm.GetJobProposalByRemoteUUID(ctx, deletedUUID)`
$DIR/core/services/feeds/orm_test.go: `_, err = orm.GetJobProposalByRemoteUUID(ctx, uuid.New())`
$DIR/core/services/feeds/orm_test.go: `createJobProposal(t, orm, feeds.JobProposalStatusPending, fmID)`
$DIR/core/services/feeds/orm_test.go: `createJobProposal(t, orm, feeds.JobProposalStatusCancelled, fmID)`
$DIR/core/services/feeds/orm_test.go: `_, err = orm.UpsertJobProposal(ctx, &feeds.JobProposal{
RemoteUUID: jUUID,
Status: feeds.JobProposalStatusRejected,
FeedsManagerID: fmID,
})`
$DIR/core/services/feeds/orm_test.go: `createJobSpec(t, orm, jpID)`
$DIR/core/services/feeds/orm_test.go: `err = orm.ApproveSpec(ctx, specID, jUUID)`
$DIR/core/services/feeds/orm_test.go: `err = orm.DeleteProposal(ctx, jpID)`
$DIR/core/services/feeds/orm_test.go: `t.Run(tc.name, func(t *testing.T) {
orm := setupORM(t)
counts := tc.before(t, orm)
assert.Equal(t, tc.wantPending, counts.Pending)
assert.Equal(t, tc.wantApproved, counts.Approved)
assert.Equal(t, tc.wantRejected, counts.Rejected)
assert.Equal(t, tc.wantCancelled, counts.Cancelled)
assert.Equal(t, tc.wantDeleted, counts.Deleted)
assert.Equal(t, tc.wantRevoked, counts.Revoked)
})`
$DIR/core/services/feeds/orm_test.go: `err = orm.UpdateJobProposalStatus(ctx, jpID, feeds.JobProposalStatusRejected)`
$DIR/core/services/feeds/orm_test.go: `count, err = orm.CountJobProposals(ctx)`
$DIR/core/services/feeds/orm_test.go: `jp.Multiaddrs = pq.StringArray{"dns/example.com"}`
$DIR/core/services/feeds/orm_test.go: `jp.Name = null.StringFrom("jp1_updated")`
$DIR/core/services/feeds/orm_test.go: `jpID, err = orm.UpsertJobProposal(ctx, jp)`
$DIR/core/services/feeds/orm_test.go: `err = orm.ApproveSpec(ctx, specID, externalJobID.UUID)`
$DIR/core/services/feeds/orm_test.go: `actual, err = orm.GetJobProposal(ctx, jpID)`
$DIR/core/services/feeds/orm_test.go: `jp.Multiaddrs = pq.StringArray{"dns/example1.com"}`
$DIR/core/services/feeds/orm_test.go: `jp.Name = null.StringFrom("jp1_updated_again")`
$DIR/core/services/feeds/orm_test.go: `jp.Status = feeds.JobProposalStatusPending`
$DIR/core/services/feeds/orm_test.go: `_, err = orm.UpsertJobProposal(ctx, jp)`
$DIR/core/services/feeds/orm_test.go: `actual, err = orm.GetJobProposal(ctx, jpID)`
$DIR/core/services/feeds/orm_test.go: `err = orm.DeleteProposal(ctx, jpID)`
$DIR/core/services/feeds/orm_test.go: `actual, err = orm.GetJobProposal(ctx, jpID)`
$DIR/core/services/feeds/orm_test.go: `jp.Status = feeds.JobProposalStatusRejected`
$DIR/core/services/feeds/orm_test.go: `jpID, err = orm.UpsertJobProposal(ctx, jp)`
$DIR/core/services/feeds/orm_test.go: `actual, err = orm.GetJobProposal(ctx, jpID)`
$DIR/core/services/feeds/orm_test.go: `err = orm.ApproveSpec(ctx, specID, externalJobID.UUID)`
$DIR/core/services/feeds/orm_test.go: `t.Run(tc.name, func(t *testing.T) {
ctx := testutils.Context(t)
orm := setupORM(t)
jpID, specID := tc.before(t, orm)
err := orm.CancelSpec(ctx, specID)
if tc.wantErr != "" {
require.EqualError(t, err, tc.wantErr)
} else {
require.NoError(t, err)
actual, err := orm.GetSpec(ctx, specID)
require.NoError(t, err)
assert.Equal(t, specID, actual.ID)
assert.Equal(t, tc.wantSpecStatus, actual.Status)
actualJP, err := orm.GetJobProposal(ctx, jpID)
require.NoError(t, err)
assert.Equal(t, tc.wantProposalStatus, actualJP.Status)
assert.False(t, actualJP.PendingUpdate)
}
})`
$DIR/core/services/feeds/orm_test.go: `createJobSpec(t, orm, jpID)`
$DIR/core/services/feeds/orm_test.go: `_, err = orm.UpsertJobProposal(ctx, &feeds.JobProposal{
RemoteUUID: jp.RemoteUUID,
Status: feeds.JobProposalStatusPending,
FeedsManagerID: fmID,
})`
$DIR/core/services/feeds/orm_test.go: `_, err = orm.CreateSpec(ctx, feeds.JobProposalSpec{
Definition: "spec data",
Version: 2,
Status: feeds.SpecStatusPending,
JobProposalID: jpID,
})`
$DIR/core/services/feeds/orm_test.go: `createJobSpec(t, orm, jpID)`
$DIR/core/services/feeds/orm_test.go: `createJobSpec(t, orm, jpID)`
$DIR/core/services/feeds/orm_test.go: `t.Run(tc.name, func(t *testing.T) {
ctx := testutils.Context(t)
orm := setupORM(t)
jpID := tc.before(t, orm)
err := orm.DeleteProposal(ctx, jpID)
if tc.wantErr != "" {
require.EqualError(t, err, tc.wantErr)
} else {
require.NoError(t, err)
actual, err := orm.GetJobProposal(ctx, jpID)
require.NoError(t, err)
assert.Equal(t, jpID, actual.ID)
assert.Equal(t, tc.wantProposalStatus, actual.Status)
assert.Equal(t, tc.wantProposalPendingUpdate, actual.PendingUpdate)
}
})`
$DIR/core/services/feeds/orm_test.go: `t.Run(tc.name, func(t *testing.T) {
ctx := testutils.Context(t)
orm := setupORM(t)
jpID, specID := tc.before(t, orm)
err := orm.RevokeSpec(ctx, specID)
if tc.wantErr != "" {
require.EqualError(t, err, tc.wantErr)
} else {
require.NoError(t, err)
actualJP, err := orm.GetJobProposal(ctx, jpID)
require.NoError(t, err)
assert.Equal(t, tc.wantProposalStatus, actualJP.Status)
assert.False(t, actualJP.PendingUpdate)
assert.Equal(t, jpID, actualJP.ID)
assert.Equal(t, tc.wantProposalStatus, actualJP.Status)
assert.Equal(t, tc.wantPendingUpdate, actualJP.PendingUpdate)
}
})`
$DIR/core/services/feeds/orm_test.go: `createJobSpec(t, orm, jpID)`
$DIR/core/services/feeds/orm_test.go: `exists, err = orm.ExistsSpecByJobProposalIDAndVersion(ctx, jpID, 2)`
$DIR/core/services/feeds/orm_test.go: `err = orm.CancelSpec(ctx, specID)`
$DIR/core/services/feeds/orm_test.go: `_, err = orm.GetApprovedSpec(ctx, jpID)`
$DIR/core/services/feeds/orm_test.go: `_ = createJobSpec(t, orm, jpID)`
$DIR/core/services/feeds/orm_test.go: `createJobSpec(t, orm, jp1ID)`
$DIR/core/services/feeds/orm_test.go: `createJobSpec(t, orm, jp2ID)`
$DIR/core/services/feeds/orm_test.go: `actual = specs[1]`
$DIR/core/services/feeds/orm_test.go: `t.Run(tc.name, func(t *testing.T) {
ctx := testutils.Context(t)
orm := setupORM(t)
jpID, specID := tc.before(t, orm)
err := orm.RejectSpec(ctx, specID)
if tc.wantErr != "" {
require.EqualError(t, err, tc.wantErr)
} else {
require.NoError(t, err)
actual, err := orm.GetSpec(ctx, specID)
require.NoError(t, err)
assert.Equal(t, specID, actual.ID)
assert.Equal(t, tc.wantSpecStatus, actual.Status)
actualJP, err := orm.GetJobProposal(ctx, jpID)
require.NoError(t, err)
assert.Equal(t, tc.wantProposalStatus, actualJP.Status)
assert.False(t, actualJP.PendingUpdate)
}
})`
$DIR/core/services/feeds/orm_test.go: `err = orm.UpdateSpecDefinition(ctx, specID, "updated spec")`
$DIR/core/services/feeds/orm_test.go: `err = orm.UpdateSpecDefinition(ctx, -1, "updated spec")`
$DIR/core/services/feeds/orm_test.go: `err = orm.ApproveSpec(ctx, specID, externalJobID.UUID)`
$DIR/core/services/feeds/orm_test.go: `isManaged, err = orm.IsJobManaged(ctx, int64(j.ID))`
$DIR/core/services/feeds/orm_test.go: `.Context(t)`
$DIR/core/services/feeds/orm_test.go: `.CountManagers(ctx)`
$DIR/core/services/feeds/orm_test.go: `.CreateManager(ctx, mgr)`
$DIR/core/services/feeds/orm_test.go: `.CountManagers(ctx)`
$DIR/core/services/feeds/orm_test.go: `.Context(t)`
$DIR/core/services/feeds/orm_test.go: `.CreateManager(ctx, mgr)`
$DIR/core/services/feeds/orm_test.go: `.GetManager(ctx, id)`
$DIR/core/services/feeds/orm_test.go: `.GetManager(ctx, -1)`
$DIR/core/services/feeds/orm_test.go: `.Context(t)`
$DIR/core/services/feeds/orm_test.go: `.CreateManager(ctx, mgr)`
$DIR/core/services/feeds/orm_test.go: `.ListManagers(ctx)`
$DIR/core/services/feeds/orm_test.go: `.Context(t)`
$DIR/core/services/feeds/orm_test.go: `.CreateManager(ctx, mgr)`
$DIR/core/services/feeds/orm_test.go: `.ListManagersByIDs(ctx, []int64{id})`
$DIR/core/services/feeds/orm_test.go: `.Context(t)`
$DIR/core/services/feeds/orm_test.go: `.CreateManager(ctx, mgr)`
$DIR/core/services/feeds/orm_test.go: `.PublicKey([]byte("22222222222222222222222222222222"))`
$DIR/core/services/feeds/orm_test.go: `.UpdateManager(ctx, updatedMgr)`
$DIR/core/services/feeds/orm_test.go: `.GetManager(ctx, id)`
$DIR/core/services/feeds/orm_test.go: `.Context(t)`
$DIR/core/services/feeds/orm_test.go: `.StringFrom("0x0002")`
$DIR/core/services/feeds/orm_test.go: `.StringFrom("p2pkey")`
$DIR/core/services/feeds/orm_test.go: `.StringFrom("ocrkey")`
$DIR/core/services/feeds/orm_test.go: `.StringFrom("dns/4")`
$DIR/core/services/feeds/orm_test.go: `.CreateChainConfig(ctx, cfg1)`
$DIR/core/services/feeds/orm_test.go: `.GetChainConfig(ctx, id)`
$DIR/core/services/feeds/orm_test.go: `.Context(t)`
$DIR/core/services/feeds/orm_test.go: `.StringFrom("0x0002")`
$DIR/core/services/feeds/orm_test.go: `.CreateBatchChainConfig(ctx, []feeds.ChainConfig{cfg1, cfg2})`
$DIR/core/services/feeds/orm_test.go: `.GetChainConfig(ctx, ids[0])`
$DIR/core/services/feeds/orm_test.go: `.GetChainConfig(ctx, ids[1])`
$DIR/core/services/feeds/orm_test.go: `.CreateBatchChainConfig(ctx, []feeds.ChainConfig{})`
$DIR/core/services/feeds/orm_test.go: `.Context(t)`
$DIR/core/services/feeds/orm_test.go: `.CreateChainConfig(ctx, cfg1)`
$DIR/core/services/feeds/orm_test.go: `.GetChainConfig(ctx, id)`
$DIR/core/services/feeds/orm_test.go: `.DeleteChainConfig(ctx, id)`
$DIR/core/services/feeds/orm_test.go: `.GetChainConfig(ctx, id)`
$DIR/core/services/feeds/orm_test.go: `.Context(t)`
$DIR/core/services/feeds/orm_test.go: `.StringFrom("0x0002")`
$DIR/core/services/feeds/orm_test.go: `.StringFrom("p2pkey")`
$DIR/core/services/feeds/orm_test.go: `.StringFrom("ocrkey")`
$DIR/core/services/feeds/orm_test.go: `.StringFrom("dns/4")`
$DIR/core/services/feeds/orm_test.go: `.CreateChainConfig(ctx, cfg1)`
$DIR/core/services/feeds/orm_test.go: `.ListChainConfigsByManagerIDs(ctx, []int64{fmID})`
$DIR/core/services/feeds/orm_test.go: `.Context(t)`
$DIR/core/services/feeds/orm_test.go: `.NewString("", false)`
$DIR/core/services/feeds/orm_test.go: `.StringFrom("0x0002")`
$DIR/core/services/feeds/orm_test.go: `.StringFrom("p2pkey")`
$DIR/core/services/feeds/orm_test.go: `.StringFrom("ocrkey")`
$DIR/core/services/feeds/orm_test.go: `.StringFrom("dns/4")`
$DIR/core/services/feeds/orm_test.go: `.CreateChainConfig(ctx, cfg1)`
$DIR/core/services/feeds/orm_test.go: `.UpdateChainConfig(ctx, updateCfg)`
$DIR/core/services/feeds/orm_test.go: `.GetChainConfig(ctx, id)`
$DIR/core/services/feeds/orm_test.go: `.Context(t)`
$DIR/core/services/feeds/orm_test.go: `.StringFrom("jp1")`
$DIR/core/services/feeds/orm_test.go: `.New()`
$DIR/core/services/feeds/orm_test.go: `.CountJobProposals(ctx)`
$DIR/core/services/feeds/orm_test.go: `.CreateJobProposal(ctx, jp)`
$DIR/core/services/feeds/orm_test.go: `.GetJobProposal(ctx, id)`
$DIR/core/services/feeds/orm_test.go: `.Context(t)`
$DIR/core/services/feeds/orm_test.go: `.New()`
$DIR/core/services/feeds/orm_test.go: `.New()`
$DIR/core/services/feeds/orm_test.go: `.StringFrom("jp1")`
$DIR/core/services/feeds/orm_test.go: `.CreateJobProposal(ctx, jp)`
$DIR/core/services/feeds/orm_test.go: `.CreateJobProposal(ctx, deletedJp)`
$DIR/core/services/feeds/orm_test.go: `.Run("by id", func(t *testing.T) {
actual, err := orm.GetJobProposal(ctx, id)
require.NoError(t, err)
assert.Equal(t, id, actual.ID)
assertJobEquals(actual)
_, err = orm.GetJobProposal(ctx, int64(0))
require.Error(t, err)
})`
$DIR/core/services/feeds/orm_test.go: `.GetJobProposal(ctx, id)`
$DIR/core/services/feeds/orm_test.go: `.GetJobProposal(ctx, int64(0))`
$DIR/core/services/feeds/orm_test.go: `.GetJobProposalByRemoteUUID(ctx, remoteUUID)`
$DIR/core/services/feeds/orm_test.go: `.GetJobProposalByRemoteUUID(ctx, deletedUUID)`
$DIR/core/services/feeds/orm_test.go: `.GetJobProposalByRemoteUUID(ctx, uuid.New())`
$DIR/core/services/feeds/orm_test.go: `.New()`
$DIR/core/services/feeds/orm_test.go: `.Context(t)`
$DIR/core/services/feeds/orm_test.go: `.New()`
$DIR/core/services/feeds/orm_test.go: `.StringFrom("jp1")`
$DIR/core/services/feeds/orm_test.go: `.CreateJobProposal(ctx, jp)`
$DIR/core/services/feeds/orm_test.go: `.ListJobProposals(ctx)`
$DIR/core/services/feeds/orm_test.go: `.Context(t)`
$DIR/core/services/feeds/orm_test.go: `.CountJobProposalsByStatus(ctx)`
$DIR/core/services/feeds/orm_test.go: `.Context(t)`
$DIR/core/services/feeds/orm_test.go: `.CountJobProposalsByStatus(ctx)`
$DIR/core/services/feeds/orm_test.go: `.Context(t)`
$DIR/core/services/feeds/orm_test.go: `.New()`
$DIR/core/services/feeds/orm_test.go: `.CreateJobProposal(ctx, &feeds.JobProposal{
RemoteUUID: jUUID,
Status: feeds.JobProposalStatusPending,
FeedsManagerID: fmID,
})`
$DIR/core/services/feeds/orm_test.go: `.UpsertJobProposal(ctx, &feeds.JobProposal{
RemoteUUID: jUUID,
Status: feeds.JobProposalStatusRejected,
FeedsManagerID: fmID,
})`
$DIR/core/services/feeds/orm_test.go: `.GetJobProposal(ctx, jpID)`
$DIR/core/services/feeds/orm_test.go: `.CountJobProposalsByStatus(ctx)`
$DIR/core/services/feeds/orm_test.go: `.Context(t)`
$DIR/core/services/feeds/orm_test.go: `.New()`
$DIR/core/services/feeds/orm_test.go: `.ApproveSpec(ctx, specID, jUUID)`
$DIR/core/services/feeds/orm_test.go: `.CountJobProposalsByStatus(ctx)`
$DIR/core/services/feeds/orm_test.go: `.Context(t)`
$DIR/core/services/feeds/orm_test.go: `.RevokeSpec(ctx, specID)`
$DIR/core/services/feeds/orm_test.go: `.CountJobProposalsByStatus(ctx)`
$DIR/core/services/feeds/orm_test.go: `.Context(t)`
$DIR/core/services/feeds/orm_test.go: `.DeleteProposal(ctx, jpID)`
$DIR/core/services/feeds/orm_test.go: `.CountJobProposalsByStatus(ctx)`
$DIR/core/services/feeds/orm_test.go: `.Context(t)`
$DIR/core/services/feeds/orm_test.go: `.New()`
$DIR/core/services/feeds/orm_test.go: `.CreateJobProposal(ctx, &feeds.JobProposal{
RemoteUUID: jUUID,
Status: feeds.JobProposalStatusPending,
FeedsManagerID: fmID,
PendingUpdate: true,
})`
$DIR/core/services/feeds/orm_test.go: `.ApproveSpec(ctx, specID, jUUID)`
$DIR/core/services/feeds/orm_test.go: `.DeleteProposal(ctx, jpID)`
$DIR/core/services/feeds/orm_test.go: `.CountJobProposalsByStatus(ctx)`
$DIR/core/services/feeds/orm_test.go: `.Run(tc.name, func(t *testing.T) {
orm := setupORM(t)
counts := tc.before(t, orm)
assert.Equal(t, tc.wantPending, counts.Pending)
assert.Equal(t, tc.wantApproved, counts.Approved)
assert.Equal(t, tc.wantRejected, counts.Rejected)
assert.Equal(t, tc.wantCancelled, counts.Cancelled)
assert.Equal(t, tc.wantDeleted, counts.Deleted)
assert.Equal(t, tc.wantRevoked, counts.Revoked)
})`
$DIR/core/services/feeds/orm_test.go: `.before(t, orm)`
$DIR/core/services/feeds/orm_test.go: `.Context(t)`
$DIR/core/services/feeds/orm_test.go: `.New()`
$DIR/core/services/feeds/orm_test.go: `.StringFrom("jp1")`
$DIR/core/services/feeds/orm_test.go: `.CreateJobProposal(ctx, jp)`
$DIR/core/services/feeds/orm_test.go: `.ListJobProposalsByManagersIDs(ctx, []int64{fmID})`
$DIR/core/services/feeds/orm_test.go: `.Context(t)`
$DIR/core/services/feeds/orm_test.go: `.GetJobProposal(ctx, jpID)`
$DIR/core/services/feeds/orm_test.go: `.UpdateJobProposalStatus(ctx, jpID, feeds.JobProposalStatusRejected)`
$DIR/core/services/feeds/orm_test.go: `.GetJobProposal(ctx, jpID)`
$DIR/core/services/feeds/orm_test.go: `.Context(t)`
$DIR/core/services/feeds/orm_test.go: `.StringFrom("jp1")`
$DIR/core/services/feeds/orm_test.go: `.New()`
$DIR/core/services/feeds/orm_test.go: `.New()`
$DIR/core/services/feeds/orm_test.go: `.CountJobProposals(ctx)`
$DIR/core/services/feeds/orm_test.go: `.UpsertJobProposal(ctx, jp)`
$DIR/core/services/feeds/orm_test.go: `.GetJobProposal(ctx, jpID)`
$DIR/core/services/feeds/orm_test.go: `.CountJobProposals(ctx)`
$DIR/core/services/feeds/orm_test.go: `.StringFrom("jp1_updated")`
$DIR/core/services/feeds/orm_test.go: `.UpsertJobProposal(ctx, jp)`
$DIR/core/services/feeds/orm_test.go: `.GetJobProposal(ctx, jpID)`
$DIR/core/services/feeds/orm_test.go: `.ApproveSpec(ctx, specID, externalJobID.UUID)`
$DIR/core/services/feeds/orm_test.go: `.GetJobProposal(ctx, jpID)`
$DIR/core/services/feeds/orm_test.go: `.StringFrom("jp1_updated_again")`
$DIR/core/services/feeds/orm_test.go: `.UpsertJobProposal(ctx, jp)`
$DIR/core/services/feeds/orm_test.go: `.GetJobProposal(ctx, jpID)`
$DIR/core/services/feeds/orm_test.go: `.DeleteProposal(ctx, jpID)`
$DIR/core/services/feeds/orm_test.go: `.GetJobProposal(ctx, jpID)`
$DIR/core/services/feeds/orm_test.go: `.UpsertJobProposal(ctx, jp)`
$DIR/core/services/feeds/orm_test.go: `.GetJobProposal(ctx, jpID)`
$DIR/core/services/feeds/orm_test.go: `.Context(t)`
$DIR/core/services/feeds/orm_test.go: `.New()`
$DIR/core/services/feeds/orm_test.go: `.CreateJobProposal(ctx, &feeds.JobProposal{
RemoteUUID: uuid.New(),
Status: feeds.JobProposalStatusPending,
FeedsManagerID: fmID,
PendingUpdate: true,
})`
$DIR/core/services/feeds/orm_test.go: `.New()`
$DIR/core/services/feeds/orm_test.go: `.ApproveSpec(ctx, specID, externalJobID.UUID)`
$DIR/core/services/feeds/orm_test.go: `.GetSpec(ctx, specID)`
$DIR/core/services/feeds/orm_test.go: `.GetJobProposal(ctx, jpID)`
$DIR/core/services/feeds/orm_test.go: `.Run(tc.name, func(t *testing.T) {
ctx := testutils.Context(t)
orm := setupORM(t)
jpID, specID := tc.before(t, orm)
err := orm.CancelSpec(ctx, specID)
if tc.wantErr != "" {
require.EqualError(t, err, tc.wantErr)
} else {
require.NoError(t, err)
actual, err := orm.GetSpec(ctx, specID)
require.NoError(t, err)
assert.Equal(t, specID, actual.ID)
assert.Equal(t, tc.wantSpecStatus, actual.Status)
actualJP, err := orm.GetJobProposal(ctx, jpID)
require.NoError(t, err)
assert.Equal(t, tc.wantProposalStatus, actualJP.Status)
assert.False(t, actualJP.PendingUpdate)
}
})`
$DIR/core/services/feeds/orm_test.go: `.Context(t)`
$DIR/core/services/feeds/orm_test.go: `.before(t, orm)`
$DIR/core/services/feeds/orm_test.go: `.CancelSpec(ctx, specID)`
$DIR/core/services/feeds/orm_test.go: `.GetSpec(ctx, specID)`
$DIR/core/services/feeds/orm_test.go: `.GetJobProposal(ctx, jpID)`
$DIR/core/services/feeds/orm_test.go: `.Context(t)`
$DIR/core/services/feeds/orm_test.go: `.New()`
$DIR/core/services/feeds/orm_test.go: `.ApproveSpec(ctx, specID, externalJobID.UUID)`
$DIR/core/services/feeds/orm_test.go: `.Context(t)`
$DIR/core/services/feeds/orm_test.go: `.New()`
$DIR/core/services/feeds/orm_test.go: `.ApproveSpec(ctx, specID, externalJobID.UUID)`
$DIR/core/services/feeds/orm_test.go: `.GetJobProposal(ctx, jpID)`
$DIR/core/services/feeds/orm_test.go: `.UpsertJobProposal(ctx, &feeds.JobProposal{
RemoteUUID: jp.RemoteUUID,
Status: feeds.JobProposalStatusPending,
FeedsManagerID: fmID,
})`
$DIR/core/services/feeds/orm_test.go: `.CreateSpec(ctx, feeds.JobProposalSpec{
Definition: "spec data",
Version: 2,
Status: feeds.SpecStatusPending,
JobProposalID: jpID,
})`
$DIR/core/services/feeds/orm_test.go: `.Run(tc.name, func(t *testing.T) {
ctx := testutils.Context(t)
orm := setupORM(t)
jpID := tc.before(t, orm)
err := orm.DeleteProposal(ctx, jpID)
if tc.wantErr != "" {
require.EqualError(t, err, tc.wantErr)
} else {
require.NoError(t, err)
actual, err := orm.GetJobProposal(ctx, jpID)
require.NoError(t, err)
assert.Equal(t, jpID, actual.ID)
assert.Equal(t, tc.wantProposalStatus, actual.Status)
assert.Equal(t, tc.wantProposalPendingUpdate, actual.PendingUpdate)
}
})`
$DIR/core/services/feeds/orm_test.go: `.Context(t)`
$DIR/core/services/feeds/orm_test.go: `.before(t, orm)`
$DIR/core/services/feeds/orm_test.go: `.DeleteProposal(ctx, jpID)`
$DIR/core/services/feeds/orm_test.go: `.GetJobProposal(ctx, jpID)`
$DIR/core/services/feeds/orm_test.go: `.Context(t)`
$DIR/core/services/feeds/orm_test.go: `.New()`
$DIR/core/services/feeds/orm_test.go: `.ApproveSpec(ctx, specID, externalJobID.UUID)`
$DIR/core/services/feeds/orm_test.go: `.Run(tc.name, func(t *testing.T) {
ctx := testutils.Context(t)
orm := setupORM(t)
jpID, specID := tc.before(t, orm)
err := orm.RevokeSpec(ctx, specID)
if tc.wantErr != "" {
require.EqualError(t, err, tc.wantErr)
} else {
require.NoError(t, err)
actualJP, err := orm.GetJobProposal(ctx, jpID)
require.NoError(t, err)
assert.Equal(t, tc.wantProposalStatus, actualJP.Status)
assert.False(t, actualJP.PendingUpdate)
assert.Equal(t, jpID, actualJP.ID)
assert.Equal(t, tc.wantProposalStatus, actualJP.Status)
assert.Equal(t, tc.wantPendingUpdate, actualJP.PendingUpdate)
}
})`
$DIR/core/services/feeds/orm_test.go: `.Context(t)`
$DIR/core/services/feeds/orm_test.go: `.before(t, orm)`
$DIR/core/services/feeds/orm_test.go: `.RevokeSpec(ctx, specID)`
$DIR/core/services/feeds/orm_test.go: `.GetJobProposal(ctx, jpID)`
$DIR/core/services/feeds/orm_test.go: `.Context(t)`
$DIR/core/services/feeds/orm_test.go: `.ExistsSpecByJobProposalIDAndVersion(ctx, jpID, 1)`
$DIR/core/services/feeds/orm_test.go: `.ExistsSpecByJobProposalIDAndVersion(ctx, jpID, 2)`
$DIR/core/services/feeds/orm_test.go: `.Context(t)`
$DIR/core/services/feeds/orm_test.go: `.GetSpec(ctx, specID)`
$DIR/core/services/feeds/orm_test.go: `.Context(t)`
$DIR/core/services/feeds/orm_test.go: `.New()`
$DIR/core/services/feeds/orm_test.go: `.ApproveSpec(ctx, specID, externalJobID.UUID)`
$DIR/core/services/feeds/orm_test.go: `.GetApprovedSpec(ctx, jpID)`
$DIR/core/services/feeds/orm_test.go: `.CancelSpec(ctx, specID)`
$DIR/core/services/feeds/orm_test.go: `.GetApprovedSpec(ctx, jpID)`
$DIR/core/services/feeds/orm_test.go: `.Context(t)`
$DIR/core/services/feeds/orm_test.go: `.CreateSpec(ctx, feeds.JobProposalSpec{
Definition: "spec data",
Version: 2,
Status: feeds.SpecStatusPending,
JobProposalID: jpID,
})`
$DIR/core/services/feeds/orm_test.go: `.GetSpec(ctx, spec2ID)`
$DIR/core/services/feeds/orm_test.go: `.Context(t)`
$DIR/core/services/feeds/orm_test.go: `.ListSpecsByJobProposalIDs(ctx, []int64{jp1ID, jp2ID})`
$DIR/core/services/feeds/orm_test.go: `.Context(t)`
$DIR/core/services/feeds/orm_test.go: `.New()`
$DIR/core/services/feeds/orm_test.go: `.ApproveSpec(ctx, specID, externalJobID.UUID)`
$DIR/core/services/feeds/orm_test.go: `.Run(tc.name, func(t *testing.T) {
ctx := testutils.Context(t)
orm := setupORM(t)
jpID, specID := tc.before(t, orm)
err := orm.RejectSpec(ctx, specID)
if tc.wantErr != "" {
require.EqualError(t, err, tc.wantErr)
} else {
require.NoError(t, err)
actual, err := orm.GetSpec(ctx, specID)
require.NoError(t, err)
assert.Equal(t, specID, actual.ID)
assert.Equal(t, tc.wantSpecStatus, actual.Status)
actualJP, err := orm.GetJobProposal(ctx, jpID)
require.NoError(t, err)
assert.Equal(t, tc.wantProposalStatus, actualJP.Status)
assert.False(t, actualJP.PendingUpdate)
}
})`
$DIR/core/services/feeds/orm_test.go: `.Context(t)`
$DIR/core/services/feeds/orm_test.go: `.before(t, orm)`
$DIR/core/services/feeds/orm_test.go: `.RejectSpec(ctx, specID)`
$DIR/core/services/feeds/orm_test.go: `.GetSpec(ctx, specID)`
$DIR/core/services/feeds/orm_test.go: `.GetJobProposal(ctx, jpID)`
$DIR/core/services/feeds/orm_test.go: `.Context(t)`
$DIR/core/services/feeds/orm_test.go: `.GetSpec(ctx, specID)`
$DIR/core/services/feeds/orm_test.go: `.UpdateSpecDefinition(ctx, specID, "updated spec")`
$DIR/core/services/feeds/orm_test.go: `.GetSpec(ctx, specID)`
$DIR/core/services/feeds/orm_test.go: `.UpdateSpecDefinition(ctx, -1, "updated spec")`
$DIR/core/services/feeds/orm_test.go: `.Context(t)`
$DIR/core/services/feeds/orm_test.go: `.New()`
$DIR/core/services/feeds/orm_test.go: `.IsJobManaged(ctx, int64(j.ID))`
$DIR/core/services/feeds/orm_test.go: `.ApproveSpec(ctx, specID, externalJobID.UUID)`
$DIR/core/services/feeds/orm_test.go: `.IsJobManaged(ctx, int64(j.ID))`
$DIR/core/services/feeds/rpc_handlers_test.go: `h.svc.
On("ProposeJob", ctx, &feeds.ProposeJobArgs{
FeedsManagerID: h.feedsManagerID,
RemoteUUID: jobID,
Spec: spec,
Version: int32(version),
}).
Return(int64(1), nil)`
$DIR/core/services/feeds/rpc_handlers_test.go: `h.svc.
On("DeleteJob", ctx, &feeds.DeleteJobArgs{
FeedsManagerID: h.feedsManagerID,
RemoteUUID: jobID,
}).
Return(int64(1), nil)`
$DIR/core/services/feeds/rpc_handlers_test.go: `h.svc.
On("RevokeJob", ctx, &feeds.RevokeJobArgs{
FeedsManagerID: h.feedsManagerID,
RemoteUUID: jobID,
}).
Return(int64(1), nil)`
$DIR/core/services/feeds/rpc_handlers_test.go: `.Context(t)`
$DIR/core/services/feeds/rpc_handlers_test.go: `.New()`
$DIR/core/services/feeds/rpc_handlers_test.go: `.New()`
$DIR/core/services/feeds/rpc_handlers_test.go: `.Sprintf(FluxMonitorTestSpecTemplate, nameAndExternalJobID, nameAndExternalJobID)`
$DIR/core/services/feeds/rpc_handlers_test.go: `.svc.
On("ProposeJob", ctx, &feeds.ProposeJobArgs{
FeedsManagerID: h.feedsManagerID,
RemoteUUID: jobID,
Spec: spec,
Version: int32(version),
})`
$DIR/core/services/feeds/rpc_handlers_test.go: `.
Return(int64(1), nil)`
$DIR/core/services/feeds/rpc_handlers_test.go: `.ProposeJob(ctx, &pb.ProposeJobRequest{
Id: jobID.String(),
Spec: spec,
Version: version,
})`
$DIR/core/services/feeds/rpc_handlers_test.go: `.String()`
$DIR/core/services/feeds/rpc_handlers_test.go: `.Context(t)`
$DIR/core/services/feeds/rpc_handlers_test.go: `.New()`
$DIR/core/services/feeds/rpc_handlers_test.go: `.svc.
On("DeleteJob", ctx, &feeds.DeleteJobArgs{
FeedsManagerID: h.feedsManagerID,
RemoteUUID: jobID,
})`
$DIR/core/services/feeds/rpc_handlers_test.go: `.
Return(int64(1), nil)`
$DIR/core/services/feeds/rpc_handlers_test.go: `.DeleteJob(ctx, &pb.DeleteJobRequest{
Id: jobID.String(),
})`
$DIR/core/services/feeds/rpc_handlers_test.go: `.String()`
$DIR/core/services/feeds/rpc_handlers_test.go: `.Context(t)`
$DIR/core/services/feeds/rpc_handlers_test.go: `.New()`
$DIR/core/services/feeds/rpc_handlers_test.go: `.svc.
On("RevokeJob", ctx, &feeds.RevokeJobArgs{
FeedsManagerID: h.feedsManagerID,
RemoteUUID: jobID,
})`
$DIR/core/services/feeds/rpc_handlers_test.go: `.
Return(int64(1), nil)`
$DIR/core/services/feeds/rpc_handlers_test.go: `.RevokeJob(ctx, &pb.RevokeJobRequest{
Id: jobID.String(),
})`
$DIR/core/services/feeds/rpc_handlers_test.go: `.String()`
$DIR/core/services/feeds/service_test.go: `svc.orm.On("CountManagers", mock.Anything).Return(int64(0), nil)`
$DIR/core/services/feeds/service_test.go: `svc.orm.On("CreateManager", mock.Anything, &mgr, mock.Anything).
Return(id, nil)`
$DIR/core/services/feeds/service_test.go: `svc.orm.On("CreateBatchChainConfig", mock.Anything, params.ChainConfigs, mock.Anything).
Return([]int64{}, nil)`
$DIR/core/services/feeds/service_test.go: `svc.csaKeystore.On("GetAll").Return([]csakey.KeyV2{key}, nil)`
$DIR/core/services/feeds/service_test.go: `svc.orm.On("ListManagers", testutils.Context(t)).Return([]feeds.FeedsManager{mgr}, nil).Maybe()`
$DIR/core/services/feeds/service_test.go: `transactCall.Run(func(args mock.Arguments) {
fn := args[1].(func(orm feeds.ORM) error)
transactCall.ReturnArguments = mock.Arguments{fn(svc.orm)}
})`
$DIR/core/services/feeds/service_test.go: `transactCall.ReturnArguments = mock.Arguments{fn(svc.orm)}`
$DIR/core/services/feeds/service_test.go: `svc.connMgr.On("Connect", mock.IsType(feeds.ConnectOpts{}))`
$DIR/core/services/feeds/service_test.go: `svc.orm.On("ListManagers", mock.Anything).Return(mgrs, nil)`
$DIR/core/services/feeds/service_test.go: `svc.connMgr.On("IsConnected", mgr.ID).Return(false)`
$DIR/core/services/feeds/service_test.go: `svc.orm.On("GetManager", mock.Anything, id).
Return(&mgr, nil)`
$DIR/core/services/feeds/service_test.go: `svc.connMgr.On("IsConnected", mgr.ID).Return(false)`
$DIR/core/services/feeds/service_test.go: `svc.orm.On("UpdateManager", mock.Anything, mgr, mock.Anything).Return(nil)`
$DIR/core/services/feeds/service_test.go: `svc.csaKeystore.On("GetAll").Return([]csakey.KeyV2{key}, nil)`
$DIR/core/services/feeds/service_test.go: `svc.connMgr.On("Disconnect", mgr.ID).Return(nil)`
$DIR/core/services/feeds/service_test.go: `svc.connMgr.On("Connect", mock.IsType(feeds.ConnectOpts{})).Return(nil)`
$DIR/core/services/feeds/service_test.go: `svc.orm.On("ListManagersByIDs", mock.Anything, []int64{mgr.ID}).
Return(mgrs, nil)`
$DIR/core/services/feeds/service_test.go: `svc.connMgr.On("IsConnected", mgr.ID).Return(false)`
$DIR/core/services/feeds/service_test.go: `svc.orm.On("CountManagers", mock.Anything).
Return(count, nil)`
$DIR/core/services/feeds/service_test.go: `svc.orm.On("CreateChainConfig", mock.Anything, cfg).Return(int64(1), nil)`
$DIR/core/services/feeds/service_test.go: `svc.orm.On("GetManager", mock.Anything, mgr.ID).Return(&mgr, nil)`
$DIR/core/services/feeds/service_test.go: `svc.connMgr.On("GetClient", mgr.ID).Return(svc.fmsClient, nil)`
$DIR/core/services/feeds/service_test.go: `svc.orm.On("ListChainConfigsByManagerIDs", mock.Anything, []int64{mgr.ID}).Return([]feeds.ChainConfig{cfg}, nil)`
$DIR/core/services/feeds/service_test.go: `svc.fmsClient.On("UpdateNode", mock.Anything, &proto.UpdateNodeRequest{
Version: nodeVersion.Version,
ChainConfigs: []*proto.ChainConfig{
{
Chain: &proto.Chain{
Id: cfg.ChainID,
Type: proto.ChainType_CHAIN_TYPE_EVM,
},
AccountAddress: cfg.AccountAddress,
AccountAddressPublicKey: &cfg.AccountAddressPublicKey.String,
AdminAddress: cfg.AdminAddress,
FluxMonitorConfig: &proto.FluxMonitorConfig{Enabled: true},
Ocr1Config: &proto.OCR1Config{Enabled: false},
Ocr2Config: &proto.OCR2Config{Enabled: false},
},
},
}).Return(&proto.UpdateNodeResponse{}, nil)`
$DIR/core/services/feeds/service_test.go: `svc.orm.On("GetChainConfig", mock.Anything, cfg.ID).Return(&cfg, nil)`
$DIR/core/services/feeds/service_test.go: `svc.orm.On("DeleteChainConfig", mock.Anything, cfg.ID).Return(cfg.ID, nil)`
$DIR/core/services/feeds/service_test.go: `svc.orm.On("GetManager", mock.Anything, mgr.ID).Return(&mgr, nil)`
$DIR/core/services/feeds/service_test.go: `svc.connMgr.On("GetClient", mgr.ID).Return(svc.fmsClient, nil)`
$DIR/core/services/feeds/service_test.go: `svc.orm.On("ListChainConfigsByManagerIDs", mock.Anything, []int64{mgr.ID}).Return([]feeds.ChainConfig{}, nil)`
$DIR/core/services/feeds/service_test.go: `svc.fmsClient.On("UpdateNode", mock.Anything, &proto.UpdateNodeRequest{
Version: nodeVersion.Version,
ChainConfigs: []*proto.ChainConfig{},
}).Return(&proto.UpdateNodeResponse{}, nil)`
$DIR/core/services/feeds/service_test.go: `svc.orm.On("ListChainConfigsByManagerIDs", mock.Anything, ids).Return([]feeds.ChainConfig{cfg}, nil)`
$DIR/core/services/feeds/service_test.go: `svc.orm.On("UpdateChainConfig", mock.Anything, cfg).Return(int64(1), nil)`
$DIR/core/services/feeds/service_test.go: `svc.orm.On("GetChainConfig", mock.Anything, cfg.ID).Return(&cfg, nil)`
$DIR/core/services/feeds/service_test.go: `svc.connMgr.On("GetClient", mgr.ID).Return(svc.fmsClient, nil)`
$DIR/core/services/feeds/service_test.go: `svc.orm.On("ListChainConfigsByManagerIDs", mock.Anything, []int64{mgr.ID}).Return([]feeds.ChainConfig{cfg}, nil)`
$DIR/core/services/feeds/service_test.go: `svc.fmsClient.On("UpdateNode", mock.Anything, &proto.UpdateNodeRequest{
Version: nodeVersion.Version,
ChainConfigs: []*proto.ChainConfig{
{
Chain: &proto.Chain{
Id: cfg.ChainID,
Type: proto.ChainType_CHAIN_TYPE_EVM,
},
AccountAddress: cfg.AccountAddress,
AdminAddress: cfg.AdminAddress,
AccountAddressPublicKey: &cfg.AccountAddressPublicKey.String,
FluxMonitorConfig: &proto.FluxMonitorConfig{Enabled: false},
Ocr1Config: &proto.OCR1Config{Enabled: false},
Ocr2Config: &proto.OCR2Config{Enabled: false},
},
},
}).Return(&proto.UpdateNodeResponse{}, nil)`
$DIR/core/services/feeds/service_test.go: `svc.orm.On("GetJobProposalByRemoteUUID", mock.Anything, argsWF.RemoteUUID).Return(new(feeds.JobProposal), sql.ErrNoRows)`
$DIR/core/services/feeds/service_test.go: `svc.orm.On("UpsertJobProposal", mock.Anything, &jpWF).Return(proposalIDWF, nil)`
$DIR/core/services/feeds/service_test.go: `svc.orm.On("CreateSpec", mock.Anything, proposalSpecWF).Return(jobProposalSpecIdWF, nil)`
$DIR/core/services/feeds/service_test.go: `svc.orm.On("CountJobProposalsByStatus", mock.Anything).Return(&feeds.JobProposalCounts{}, nil)`
$DIR/core/services/feeds/service_test.go: `transactCall.Run(func(args mock.Arguments) {
fn := args[1].(func(orm feeds.ORM) error)
transactCall.ReturnArguments = mock.Arguments{fn(svc.orm)}
})`
$DIR/core/services/feeds/service_test.go: `transactCall.ReturnArguments = mock.Arguments{fn(svc.orm)}`
$DIR/core/services/feeds/service_test.go: `svc.connMgr.On("GetClient", argsWF.FeedsManagerID).Return(svc.fmsClient, nil)`
$DIR/core/services/feeds/service_test.go: `svc.orm.EXPECT().GetSpec(mock.Anything, jobProposalSpecIdWF).Return(&autoApprovableProposalSpecWF, nil)`
$DIR/core/services/feeds/service_test.go: `svc.orm.EXPECT().GetJobProposal(mock.Anything, autoApprovableProposalSpecWF.JobProposalID).Return(&acceptedjpWF, nil)`
$DIR/core/services/feeds/service_test.go: `svc.jobORM.On("AssertBridgesExist", mock.Anything, mock.IsType(pipeline.Pipeline{})).Return(nil)`
$DIR/core/services/feeds/service_test.go: `svc.jobORM.On("FindJobByExternalJobID", mock.Anything, mock.Anything).Return(job.Job{}, sql.ErrNoRows)`
$DIR/core/services/feeds/service_test.go: `svc.orm.On("WithDataSource", mock.Anything).Return(feeds.ORM(svc.orm))`
$DIR/core/services/feeds/service_test.go: `svc.jobORM.On("WithDataSource", mock.Anything).Return(job.ORM(svc.jobORM))`
$DIR/core/services/feeds/service_test.go: `svc.jobORM.On("FindJobIDByWorkflow", mock.Anything, mock.Anything).Return(int32(0), sql.ErrNoRows)`
$DIR/core/services/feeds/service_test.go: `svc.spawner.
On("CreateJob",
mock.Anything,
mock.Anything,
mock.MatchedBy(func(j *job.Job) bool {
return j.WorkflowSpec.WorkflowOwner == wfOwner
}),
).
Run(func(args mock.Arguments) { (args.Get(2).(*job.Job)).ID = 1 }).
Return(nil)`
$DIR/core/services/feeds/service_test.go: `(args.Get(2).(*job.Job)).ID = 1`
$DIR/core/services/feeds/service_test.go: `svc.orm.On("ApproveSpec",
mock.Anything,
jobProposalSpecIdWF,
mock.IsType(uuid.UUID{}),
).Return(nil)`
$DIR/core/services/feeds/service_test.go: `svc.fmsClient.On("ApprovedJob",
mock.MatchedBy(func(ctx context.Context) bool { return true }),
&proto.ApprovedJobRequest{
Uuid: jpWF.RemoteUUID.String(),
Version: int64(proposalSpecWF.Version),
},
).Return(&proto.ApprovedJobResponse{}, nil)`
$DIR/core/services/feeds/service_test.go: `svc.orm.On("GetJobProposalByRemoteUUID", mock.Anything, argsWF.RemoteUUID).Return(new(feeds.JobProposal), sql.ErrNoRows)`
$DIR/core/services/feeds/service_test.go: `svc.orm.On("UpsertJobProposal", mock.Anything, &jpWF).Return(proposalIDWF, nil)`
$DIR/core/services/feeds/service_test.go: `svc.orm.On("CreateSpec", mock.Anything, proposalSpecWF).Return(jobProposalSpecIdWF, nil)`
$DIR/core/services/feeds/service_test.go: `svc.orm.On("CountJobProposalsByStatus", mock.Anything).Return(&feeds.JobProposalCounts{}, nil)`
$DIR/core/services/feeds/service_test.go: `transactCall.Run(func(args mock.Arguments) {
fn := args[1].(func(orm feeds.ORM) error)
transactCall.ReturnArguments = mock.Arguments{fn(svc.orm)}
})`
$DIR/core/services/feeds/service_test.go: `transactCall.ReturnArguments = mock.Arguments{fn(svc.orm)}`
$DIR/core/services/feeds/service_test.go: `svc.connMgr.On("GetClient", argsWF.FeedsManagerID).Return(svc.fmsClient, nil)`
$DIR/core/services/feeds/service_test.go: `svc.orm.EXPECT().GetSpec(mock.Anything, jobProposalSpecIdWF).Return(&autoApprovableProposalSpecWF, nil)`
$DIR/core/services/feeds/service_test.go: `svc.orm.EXPECT().GetJobProposal(mock.Anything, autoApprovableProposalSpecWF.JobProposalID).Return(&acceptedjpWF, nil)`
$DIR/core/services/feeds/service_test.go: `svc.jobORM.On("AssertBridgesExist", mock.Anything, mock.IsType(pipeline.Pipeline{})).Return(nil)`
$DIR/core/services/feeds/service_test.go: `svc.jobORM.On("FindJobByExternalJobID", mock.Anything, mock.Anything).Return(job.Job{}, sql.ErrNoRows)`
$DIR/core/services/feeds/service_test.go: `svc.orm.On("WithDataSource", mock.Anything).Return(feeds.ORM(svc.orm))`
$DIR/core/services/feeds/service_test.go: `svc.jobORM.On("WithDataSource", mock.Anything).Return(job.ORM(svc.jobORM))`
$DIR/core/services/feeds/service_test.go: `svc.jobORM.On("FindJobIDByWorkflow", mock.Anything, mock.Anything).Return(jobIDWF, sql.ErrNoRows)`
$DIR/core/services/feeds/service_test.go: `svc.orm.On("GetApprovedSpec", mock.Anything, acceptedjpWF.ID).Return(&autoApprovableProposalSpecWF, nil)`
$DIR/core/services/feeds/service_test.go: `svc.orm.On("CancelSpec", mock.Anything, autoApprovableProposalSpecWF.ID).Return(nil)`
$DIR/core/services/feeds/service_test.go: `svc.spawner.On("DeleteJob", mock.Anything, mock.Anything, jobIDWF).Return(nil)`
$DIR/core/services/feeds/service_test.go: `svc.spawner.
On("CreateJob",
mock.Anything,
mock.Anything,
mock.MatchedBy(func(j *job.Job) bool {
return j.WorkflowSpec.WorkflowOwner == wfOwner
}),
).
Run(func(args mock.Arguments) { (args.Get(2).(*job.Job)).ID = 1 }).
Return(nil)`
$DIR/core/services/feeds/service_test.go: `(args.Get(2).(*job.Job)).ID = 1`
$DIR/core/services/feeds/service_test.go: `svc.orm.On("ApproveSpec",
mock.Anything,
jobProposalSpecIdWF,
mock.IsType(uuid.UUID{}),
).Return(nil)`
$DIR/core/services/feeds/service_test.go: `svc.fmsClient.On("ApprovedJob",
mock.MatchedBy(func(ctx context.Context) bool { return true }),
&proto.ApprovedJobRequest{
Uuid: jpWF.RemoteUUID.String(),
Version: int64(proposalSpecWF.Version),
},
).Return(&proto.ApprovedJobResponse{}, nil)`
$DIR/core/services/feeds/service_test.go: `svc.orm.On("GetJobProposalByRemoteUUID", mock.Anything, argsWF.RemoteUUID).Return(new(feeds.JobProposal), sql.ErrNoRows)`
$DIR/core/services/feeds/service_test.go: `svc.orm.On("UpsertJobProposal", mock.Anything, &jpWF).Return(proposalIDWF, nil)`
$DIR/core/services/feeds/service_test.go: `svc.orm.On("CreateSpec", mock.Anything, proposalSpecWF).Return(jobProposalSpecIdWF, nil)`
$DIR/core/services/feeds/service_test.go: `transactCall.Run(func(args mock.Arguments) {
fn := args[1].(func(orm feeds.ORM) error)
transactCall.ReturnArguments = mock.Arguments{fn(svc.orm)}
})`
$DIR/core/services/feeds/service_test.go: `transactCall.ReturnArguments = mock.Arguments{fn(svc.orm)}`
$DIR/core/services/feeds/service_test.go: `svc.connMgr.On("GetClient", argsWF.FeedsManagerID).Return(svc.fmsClient, nil)`
$DIR/core/services/feeds/service_test.go: `svc.orm.EXPECT().GetSpec(mock.Anything, jobProposalSpecIdWF).Return(&proposalSpecWF, nil)`
$DIR/core/services/feeds/service_test.go: `svc.orm.EXPECT().GetJobProposal(mock.Anything, proposalSpecWF.JobProposalID).Return(&jpWF, nil)`
$DIR/core/services/feeds/service_test.go: `svc.jobORM.On("AssertBridgesExist", mock.Anything, mock.IsType(pipeline.Pipeline{})).Return(nil)`
$DIR/core/services/feeds/service_test.go: `svc.jobORM.On("FindJobByExternalJobID", mock.Anything, mock.Anything).Return(job.Job{}, sql.ErrNoRows)`
$DIR/core/services/feeds/service_test.go: `svc.orm.On("WithDataSource", mock.Anything).Return(feeds.ORM(svc.orm))`
$DIR/core/services/feeds/service_test.go: `svc.jobORM.On("WithDataSource", mock.Anything).Return(job.ORM(svc.jobORM))`
$DIR/core/services/feeds/service_test.go: `svc.jobORM.On("FindJobIDByWorkflow", mock.Anything, mock.Anything).Return(int32(0), sql.ErrNoRows)`
$DIR/core/services/feeds/service_test.go: `svc.spawner.
On("CreateJob",
mock.Anything,
mock.Anything,
mock.MatchedBy(func(j *job.Job) bool {
return j.WorkflowSpec.WorkflowOwner == wfOwner
}),
).
Run(func(args mock.Arguments) { (args.Get(2).(*job.Job)).ID = 1 }).
Return(fmt.Errorf("error creating job"))`
$DIR/core/services/feeds/service_test.go: `(args.Get(2).(*job.Job)).ID = 1`
$DIR/core/services/feeds/service_test.go: `svc.orm.On("GetJobProposalByRemoteUUID", mock.Anything, jpFluxMonitor.RemoteUUID).Return(new(feeds.JobProposal), sql.ErrNoRows)`
$DIR/core/services/feeds/service_test.go: `svc.orm.On("UpsertJobProposal", mock.Anything, &jpFluxMonitor).Return(idFluxMonitor, nil)`
$DIR/core/services/feeds/service_test.go: `svc.orm.On("CreateSpec", mock.Anything, specFluxMonitor).Return(int64(100), nil)`
$DIR/core/services/feeds/service_test.go: `svc.orm.On("CountJobProposalsByStatus", mock.Anything).Return(&feeds.JobProposalCounts{}, nil)`
$DIR/core/services/feeds/service_test.go: `transactCall.Run(func(args mock.Arguments) {
fn := args[1].(func(orm feeds.ORM) error)
transactCall.ReturnArguments = mock.Arguments{fn(svc.orm)}
})`
$DIR/core/services/feeds/service_test.go: `transactCall.ReturnArguments = mock.Arguments{fn(svc.orm)}`
$DIR/core/services/feeds/service_test.go: `svc.orm.On("GetJobProposalByRemoteUUID", mock.Anything, jpOCR1.RemoteUUID).Return(new(feeds.JobProposal), sql.ErrNoRows)`
$DIR/core/services/feeds/service_test.go: `svc.orm.On("UpsertJobProposal", mock.Anything, &jpOCR1).Return(idOCR1, nil)`
$DIR/core/services/feeds/service_test.go: `svc.orm.On("CreateSpec", mock.Anything, specOCR1).Return(int64(100), nil)`
$DIR/core/services/feeds/service_test.go: `svc.orm.On("CountJobProposalsByStatus", mock.Anything).Return(&feeds.JobProposalCounts{}, nil)`
$DIR/core/services/feeds/service_test.go: `transactCall.Run(func(args mock.Arguments) {
fn := args[1].(func(orm feeds.ORM) error)
transactCall.ReturnArguments = mock.Arguments{fn(svc.orm)}
})`
$DIR/core/services/feeds/service_test.go: `transactCall.ReturnArguments = mock.Arguments{fn(svc.orm)}`
$DIR/core/services/feeds/service_test.go: `svc.orm.On("GetJobProposalByRemoteUUID", mock.Anything, jpOCR2.RemoteUUID).Return(new(feeds.JobProposal), sql.ErrNoRows)`
$DIR/core/services/feeds/service_test.go: `svc.orm.On("UpsertJobProposal", mock.Anything, &jpOCR2).Return(idOCR2, nil)`
$DIR/core/services/feeds/service_test.go: `svc.orm.On("CreateSpec", mock.Anything, specOCR2).Return(int64(100), nil)`
$DIR/core/services/feeds/service_test.go: `svc.orm.On("CountJobProposalsByStatus", mock.Anything).Return(&feeds.JobProposalCounts{}, nil)`
$DIR/core/services/feeds/service_test.go: `transactCall.Run(func(args mock.Arguments) {
fn := args[1].(func(orm feeds.ORM) error)
transactCall.ReturnArguments = mock.Arguments{fn(svc.orm)}
})`
$DIR/core/services/feeds/service_test.go: `transactCall.ReturnArguments = mock.Arguments{fn(svc.orm)}`
$DIR/core/services/feeds/service_test.go: `svc.orm.On("GetJobProposalByRemoteUUID", mock.Anything, jpBootstrap.RemoteUUID).Return(new(feeds.JobProposal), sql.ErrNoRows)`
$DIR/core/services/feeds/service_test.go: `svc.orm.On("UpsertJobProposal", mock.Anything, &jpBootstrap).Return(idBootstrap, nil)`
$DIR/core/services/feeds/service_test.go: `svc.orm.On("CreateSpec", mock.Anything, specBootstrap).Return(int64(102), nil)`
$DIR/core/services/feeds/service_test.go: `svc.orm.On("CountJobProposalsByStatus", mock.Anything).Return(&feeds.JobProposalCounts{}, nil)`
$DIR/core/services/feeds/service_test.go: `transactCall.Run(func(args mock.Arguments) {
fn := args[1].(func(orm feeds.ORM) error)
transactCall.ReturnArguments = mock.Arguments{fn(svc.orm)}
})`
$DIR/core/services/feeds/service_test.go: `transactCall.ReturnArguments = mock.Arguments{fn(svc.orm)}`
$DIR/core/services/feeds/service_test.go: `svc.orm.
On("GetJobProposalByRemoteUUID", mock.Anything, jpFluxMonitor.RemoteUUID).
Return(&feeds.JobProposal{
FeedsManagerID: jpFluxMonitor.FeedsManagerID,
RemoteUUID: jpFluxMonitor.RemoteUUID,
Status: feeds.JobProposalStatusPending,
}, nil)`
$DIR/core/services/feeds/service_test.go: `svc.orm.On("ExistsSpecByJobProposalIDAndVersion", mock.Anything, jpFluxMonitor.ID, argsFluxMonitor.Version).Return(false, nil)`
$DIR/core/services/feeds/service_test.go: `svc.orm.On("UpsertJobProposal", mock.Anything, &jpFluxMonitor).Return(idFluxMonitor, nil)`
$DIR/core/services/feeds/service_test.go: `svc.orm.On("CreateSpec", mock.Anything, specFluxMonitor).Return(int64(100), nil)`
$DIR/core/services/feeds/service_test.go: `svc.orm.On("CountJobProposalsByStatus", mock.Anything).Return(&feeds.JobProposalCounts{}, nil)`
$DIR/core/services/feeds/service_test.go: `transactCall.Run(func(args mock.Arguments) {
fn := args[1].(func(orm feeds.ORM) error)
transactCall.ReturnArguments = mock.Arguments{fn(svc.orm)}
})`
$DIR/core/services/feeds/service_test.go: `transactCall.ReturnArguments = mock.Arguments{fn(svc.orm)}`
$DIR/core/services/feeds/service_test.go: `svc.orm.
On("GetJobProposalByRemoteUUID", mock.Anything, jpFluxMonitor.RemoteUUID).
Return(&feeds.JobProposal{
FeedsManagerID: 2,
RemoteUUID: jpFluxMonitor.RemoteUUID,
}, nil)`
$DIR/core/services/feeds/service_test.go: `svc.orm.
On("GetJobProposalByRemoteUUID", mock.Anything, jpFluxMonitor.RemoteUUID).
Return(&feeds.JobProposal{
FeedsManagerID: jpFluxMonitor.FeedsManagerID,
RemoteUUID: jpFluxMonitor.RemoteUUID,
Status: feeds.JobProposalStatusPending,
}, nil)`
$DIR/core/services/feeds/service_test.go: `svc.orm.On("ExistsSpecByJobProposalIDAndVersion", mock.Anything, jpFluxMonitor.ID, argsFluxMonitor.Version).Return(true, nil)`
$DIR/core/services/feeds/service_test.go: `svc.orm.On("GetJobProposalByRemoteUUID", mock.Anything, jpFluxMonitor.RemoteUUID).Return(new(feeds.JobProposal), sql.ErrNoRows)`
$DIR/core/services/feeds/service_test.go: `svc.orm.On("UpsertJobProposal", mock.Anything, &jpFluxMonitor).Return(int64(0), errors.New("orm error"))`
$DIR/core/services/feeds/service_test.go: `transactCall.Run(func(args mock.Arguments) {
fn := args[1].(func(orm feeds.ORM) error)
transactCall.ReturnArguments = mock.Arguments{fn(svc.orm)}
})`
$DIR/core/services/feeds/service_test.go: `transactCall.ReturnArguments = mock.Arguments{fn(svc.orm)}`
$DIR/core/services/feeds/service_test.go: `svc.orm.On("GetJobProposalByRemoteUUID", mock.Anything, jpFluxMonitor.RemoteUUID).Return(new(feeds.JobProposal), sql.ErrNoRows)`
$DIR/core/services/feeds/service_test.go: `svc.orm.On("UpsertJobProposal", mock.Anything, &jpFluxMonitor).Return(idFluxMonitor, nil)`
$DIR/core/services/feeds/service_test.go: `svc.orm.On("CreateSpec", mock.Anything, specFluxMonitor).Return(int64(0), errors.New("orm error"))`
$DIR/core/services/feeds/service_test.go: `transactCall.Run(func(args mock.Arguments) {
fn := args[1].(func(orm feeds.ORM) error)
transactCall.ReturnArguments = mock.Arguments{fn(svc.orm)}
})`
$DIR/core/services/feeds/service_test.go: `transactCall.ReturnArguments = mock.Arguments{fn(svc.orm)}`
$DIR/core/services/feeds/service_test.go: `t.Run(tc.name, func(t *testing.T) {
t.Parallel()
svc := setupTestServiceCfg(t, func(c *chainlink.Config, s *chainlink.Secrets) {
c.JobPipeline.HTTPRequest.DefaultTimeout = &httpTimeout
c.OCR.Enabled = testutils.Ptr(true)
c.OCR2.Enabled = testutils.Ptr(true)
})
if tc.before != nil {
tc.before(svc)
}
actual, err := svc.ProposeJob(testutils.Context(t), tc.args)
if tc.wantErr != "" {
require.Error(t, err)
assert.Contains(t, err.Error(), tc.wantErr)
} else {
require.NoError(t, err)
assert.Equal(t, tc.wantID, actual)
}
})`
$DIR/core/services/feeds/service_test.go: `c.JobPipeline.HTTPRequest.DefaultTimeout = &httpTimeout`
$DIR/core/services/feeds/service_test.go: `c.OCR.Enabled = testutils.Ptr(true)`
$DIR/core/services/feeds/service_test.go: `c.OCR2.Enabled = testutils.Ptr(true)`
$DIR/core/services/feeds/service_test.go: `tc.before(svc)`
$DIR/core/services/feeds/service_test.go: `svc.orm.On("GetJobProposalByRemoteUUID", mock.Anything, approved.RemoteUUID).Return(&approved, nil)`
$DIR/core/services/feeds/service_test.go: `svc.orm.On("DeleteProposal", mock.Anything, approved.ID).Return(nil)`
$DIR/core/services/feeds/service_test.go: `svc.orm.On("CountJobProposalsByStatus", mock.Anything).Return(&feeds.JobProposalCounts{}, nil)`
$DIR/core/services/feeds/service_test.go: `svc.orm.
On("GetJobProposalByRemoteUUID", mock.Anything, approved.RemoteUUID).
Return(&feeds.JobProposal{
FeedsManagerID: 2,
RemoteUUID: approved.RemoteUUID,
Status: feeds.JobProposalStatusApproved,
}, nil)`
$DIR/core/services/feeds/service_test.go: `svc.orm.On("GetJobProposalByRemoteUUID", mock.Anything, approved.RemoteUUID).Return(nil, errors.New("orm error"))`
$DIR/core/services/feeds/service_test.go: `svc.orm.On("GetJobProposalByRemoteUUID", mock.Anything, approved.RemoteUUID).Return(nil, sql.ErrNoRows)`
$DIR/core/services/feeds/service_test.go: `svc.orm.On("GetJobProposalByRemoteUUID", mock.Anything, approved.RemoteUUID).Return(&approved, nil)`
$DIR/core/services/feeds/service_test.go: `svc.orm.On("DeleteProposal", mock.Anything, approved.ID).Return(errors.New("orm error"))`
$DIR/core/services/feeds/service_test.go: `t.Run(tc.name, func(t *testing.T) {
t.Parallel()
svc := setupTestServiceCfg(t, func(c *chainlink.Config, s *chainlink.Secrets) {
c.JobPipeline.HTTPRequest.DefaultTimeout = &httpTimeout
})
if tc.before != nil {
tc.before(svc)
}
_, err := svc.DeleteJob(testutils.Context(t), tc.args)
if tc.wantErr != "" {
require.Error(t, err)
assert.Contains(t, err.Error(), tc.wantErr)
} else {
require.NoError(t, err)
}
})`
$DIR/core/services/feeds/service_test.go: `c.JobPipeline.HTTPRequest.DefaultTimeout = &httpTimeout`
$DIR/core/services/feeds/service_test.go: `tc.before(svc)`
$DIR/core/services/feeds/service_test.go: `svc.orm.On("GetJobProposalByRemoteUUID", mock.Anything, pendingProposal.RemoteUUID).Return(pendingProposal, nil)`
$DIR/core/services/feeds/service_test.go: `svc.orm.On("GetLatestSpec", mock.Anything, pendingSpec.JobProposalID).Return(pendingSpec, nil)`
$DIR/core/services/feeds/service_test.go: `svc.orm.On("RevokeSpec", mock.Anything, pendingSpec.ID).Return(nil)`
$DIR/core/services/feeds/service_test.go: `svc.orm.On("CountJobProposalsByStatus", mock.Anything).Return(&feeds.JobProposalCounts{}, nil)`
$DIR/core/services/feeds/service_test.go: `svc.orm.On("GetJobProposalByRemoteUUID", mock.Anything, pendingProposal.RemoteUUID).Return(pendingProposal, nil)`
$DIR/core/services/feeds/service_test.go: `svc.orm.On("GetLatestSpec", mock.Anything, pendingSpec.JobProposalID).Return(&feeds.JobProposalSpec{
ID: 20,
Status: feeds.SpecStatusCancelled,
JobProposalID: pendingProposal.ID,
Version: 1,
Definition: defn,
}, nil)`
$DIR/core/services/feeds/service_test.go: `svc.orm.On("RevokeSpec", mock.Anything, pendingSpec.ID).Return(nil)`
$DIR/core/services/feeds/service_test.go: `svc.orm.On("CountJobProposalsByStatus", mock.Anything).Return(&feeds.JobProposalCounts{}, nil)`
$DIR/core/services/feeds/service_test.go: `svc.orm.
On("GetJobProposalByRemoteUUID", mock.Anything, pendingProposal.RemoteUUID).
Return(&feeds.JobProposal{
FeedsManagerID: 2,
RemoteUUID: pendingProposal.RemoteUUID,
Status: feeds.JobProposalStatusApproved,
}, nil)`
$DIR/core/services/feeds/service_test.go: `svc.orm.On("GetJobProposalByRemoteUUID", mock.Anything, pendingProposal.RemoteUUID).Return(nil, errors.New("orm error"))`
$DIR/core/services/feeds/service_test.go: `svc.orm.On("GetJobProposalByRemoteUUID", mock.Anything, pendingProposal.RemoteUUID).Return(nil, sql.ErrNoRows)`
$DIR/core/services/feeds/service_test.go: `svc.orm.On("GetJobProposalByRemoteUUID", mock.Anything, pendingProposal.RemoteUUID).Return(pendingProposal, nil)`
$DIR/core/services/feeds/service_test.go: `svc.orm.On("GetLatestSpec", mock.Anything, pendingSpec.JobProposalID).Return(nil, sql.ErrNoRows)`
$DIR/core/services/feeds/service_test.go: `svc.orm.On("GetJobProposalByRemoteUUID", mock.Anything, pendingProposal.RemoteUUID).Return(pendingProposal, nil)`
$DIR/core/services/feeds/service_test.go: `svc.orm.On("GetLatestSpec", mock.Anything, pendingSpec.JobProposalID).Return(&feeds.JobProposalSpec{
ID: 20,
Status: feeds.SpecStatusApproved,
JobProposalID: pendingProposal.ID,
Version: 1,
Definition: defn,
}, nil)`
$DIR/core/services/feeds/service_test.go: `svc.orm.On("GetJobProposalByRemoteUUID", mock.Anything, pendingProposal.RemoteUUID).Return(pendingProposal, nil)`
$DIR/core/services/feeds/service_test.go: `svc.orm.On("GetLatestSpec", mock.Anything, pendingSpec.JobProposalID).Return(&feeds.JobProposalSpec{
ID: 20,
Status: feeds.SpecStatusRejected,
JobProposalID: pendingProposal.ID,
Version: 1,
Definition: defn,
}, nil)`
$DIR/core/services/feeds/service_test.go: `svc.orm.On("GetJobProposalByRemoteUUID", mock.Anything, pendingProposal.RemoteUUID).Return(pendingProposal, nil)`
$DIR/core/services/feeds/service_test.go: `svc.orm.On("GetLatestSpec", mock.Anything, pendingSpec.JobProposalID).Return(&feeds.JobProposalSpec{
ID: 20,
Status: feeds.SpecStatusRevoked,
JobProposalID: pendingProposal.ID,
Version: 1,
Definition: defn,
}, nil)`
$DIR/core/services/feeds/service_test.go: `svc.orm.On("GetJobProposalByRemoteUUID", mock.Anything, pendingProposal.RemoteUUID).Return(&feeds.JobProposal{
ID: 1,
FeedsManagerID: 1,
RemoteUUID: remoteUUID,
Status: feeds.JobProposalStatusDeleted,
}, nil)`
$DIR/core/services/feeds/service_test.go: `svc.orm.On("GetLatestSpec", mock.Anything, pendingSpec.JobProposalID).Return(pendingSpec, nil)`
$DIR/core/services/feeds/service_test.go: `svc.orm.On("GetJobProposalByRemoteUUID", mock.Anything, pendingProposal.RemoteUUID).Return(pendingProposal, nil)`
$DIR/core/services/feeds/service_test.go: `svc.orm.On("GetLatestSpec", mock.Anything, pendingSpec.JobProposalID).Return(pendingSpec, nil)`
$DIR/core/services/feeds/service_test.go: `svc.orm.On("RevokeSpec", mock.Anything, pendingSpec.ID).Return(errors.New("orm error"))`
$DIR/core/services/feeds/service_test.go: `t.Run(tc.name, func(t *testing.T) {
t.Parallel()
svc := setupTestServiceCfg(t, func(c *chainlink.Config, s *chainlink.Secrets) {
c.OCR2.Enabled = testutils.Ptr(true)
c.JobPipeline.HTTPRequest.DefaultTimeout = &httpTimeout
})
if tc.before != nil {
tc.before(svc)
}
_, err := svc.RevokeJob(testutils.Context(t), tc.args)
if tc.wantErr != "" {
require.Error(t, err)
assert.Contains(t, err.Error(), tc.wantErr)
} else {
require.NoError(t, err)
}
})`
$DIR/core/services/feeds/service_test.go: `c.OCR2.Enabled = testutils.Ptr(true)`
$DIR/core/services/feeds/service_test.go: `c.JobPipeline.HTTPRequest.DefaultTimeout = &httpTimeout`
$DIR/core/services/feeds/service_test.go: `tc.before(svc)`
$DIR/core/services/feeds/service_test.go: `svc.connMgr.On("GetClient", mgr.ID).Return(svc.fmsClient, nil)`
$DIR/core/services/feeds/service_test.go: `svc.orm.On("ListChainConfigsByManagerIDs", mock.Anything, []int64{mgr.ID}).Return(chainConfigs, nil)`
$DIR/core/services/feeds/service_test.go: `svc.p2pKeystore.On("Get", p2pKey.PeerID()).Return(p2pKey, nil)`
$DIR/core/services/feeds/service_test.go: `svc.ocr1Keystore.On("Get", ocrKey.GetID()).Return(ocrKey, nil)`
$DIR/core/services/feeds/service_test.go: `svc.fmsClient.On("UpdateNode", mock.Anything, &proto.UpdateNodeRequest{
Version: nodeVersion.Version,
ChainConfigs: []*proto.ChainConfig{
{
Chain: &proto.Chain{
Id: ccfg.ChainID,
Type: proto.ChainType_CHAIN_TYPE_EVM,
},
AccountAddress: ccfg.AccountAddress,
AdminAddress: ccfg.AdminAddress,
FluxMonitorConfig: &proto.FluxMonitorConfig{Enabled: true},
Ocr1Config: &proto.OCR1Config{
Enabled: true,
IsBootstrap: ccfg.OCR1Config.IsBootstrap,
P2PKeyBundle: &proto.OCR1Config_P2PKeyBundle{
PeerId: p2pKey.PeerID().String(),
PublicKey: p2pKey.PublicKeyHex(),
},
OcrKeyBundle: &proto.OCR1Config_OCRKeyBundle{
BundleId: ocrKey.GetID(),
ConfigPublicKey: ocrkey.ConfigPublicKey(ocrKey.PublicKeyConfig()).String(),
OffchainPublicKey: ocrKey.OffChainSigning.PublicKey().String(),
OnchainSigningAddress: ocrKey.OnChainSigning.Address().String(),
},
},
Ocr2Config: &proto.OCR2Config{
Enabled: true,
IsBootstrap: ccfg.OCR2Config.IsBootstrap,
Multiaddr: multiaddr,
ForwarderAddress: &forwarderAddr,
Plugins: &proto.OCR2Config_Plugins{
Commit: ccfg.OCR2Config.Plugins.Commit,
Execute: ccfg.OCR2Config.Plugins.Execute,
Median: ccfg.OCR2Config.Plugins.Median,
Mercury: ccfg.OCR2Config.Plugins.Mercury,
Rebalancer: ccfg.OCR2Config.Plugins.Rebalancer,
},
},
},
},
}).Return(&proto.UpdateNodeResponse{}, nil)`
$DIR/core/services/feeds/service_test.go: `err = svc.SyncNodeInfo(testutils.Context(t), mgr.ID)`
$DIR/core/services/feeds/service_test.go: `svc.orm.On("IsJobManaged", mock.Anything, jobID).Return(true, nil)`
$DIR/core/services/feeds/service_test.go: `svc.orm.On("ListJobProposals", mock.Anything).
Return(jps, nil)`
$DIR/core/services/feeds/service_test.go: `svc.orm.On("ListJobProposalsByManagersIDs", mock.Anything, fmIDs).
Return(jps, nil)`
$DIR/core/services/feeds/service_test.go: `svc.orm.On("GetJobProposal", mock.Anything, id).
Return(&ms, nil)`
$DIR/core/services/feeds/service_test.go: `svc.connMgr.On("GetClient", jp.FeedsManagerID).Return(svc.fmsClient, nil)`
$DIR/core/services/feeds/service_test.go: `svc.orm.On("GetSpec", mock.Anything, spec.ID).Return(spec, nil)`
$DIR/core/services/feeds/service_test.go: `svc.orm.On("GetJobProposal", mock.Anything, jp.ID).Return(jp, nil)`
$DIR/core/services/feeds/service_test.go: `svc.orm.On("CancelSpec", mock.Anything, spec.ID).Return(nil)`
$DIR/core/services/feeds/service_test.go: `svc.jobORM.On("FindJobByExternalJobID", mock.Anything, externalJobID).Return(j, nil)`
$DIR/core/services/feeds/service_test.go: `svc.spawner.On("DeleteJob", mock.Anything, mock.Anything, j.ID).Return(nil)`
$DIR/core/services/feeds/service_test.go: `svc.fmsClient.On("CancelledJob",
mock.MatchedBy(func(ctx context.Context) bool { return true }),
&proto.CancelledJobRequest{
Uuid: jp.RemoteUUID.String(),
Version: int64(spec.Version),
},
).Return(&proto.CancelledJobResponse{}, nil)`
$DIR/core/services/feeds/service_test.go: `svc.orm.On("CountJobProposalsByStatus", mock.Anything).Return(&feeds.JobProposalCounts{}, nil)`
$DIR/core/services/feeds/service_test.go: `svc.orm.On("WithDataSource", mock.Anything).Return(feeds.ORM(svc.orm))`
$DIR/core/services/feeds/service_test.go: `svc.jobORM.On("WithDataSource", mock.Anything).Return(job.ORM(svc.jobORM))`
$DIR/core/services/feeds/service_test.go: `svc.connMgr.On("GetClient", jp.FeedsManagerID).Return(svc.fmsClient, nil)`
$DIR/core/services/feeds/service_test.go: `svc.orm.On("GetSpec", mock.Anything, spec.ID).Return(spec, nil)`
$DIR/core/services/feeds/service_test.go: `svc.orm.On("GetJobProposal", mock.Anything, jp.ID).Return(&feeds.JobProposal{
ID: 1,
RemoteUUID: externalJobID,
FeedsManagerID: 100,
}, nil)`
$DIR/core/services/feeds/service_test.go: `svc.orm.On("CancelSpec", mock.Anything, spec.ID).Return(nil)`
$DIR/core/services/feeds/service_test.go: `svc.fmsClient.On("CancelledJob",
mock.MatchedBy(func(ctx context.Context) bool { return true }),
&proto.CancelledJobRequest{
Uuid: jp.RemoteUUID.String(),
Version: int64(spec.Version),
},
).Return(&proto.CancelledJobResponse{}, nil)`
$DIR/core/services/feeds/service_test.go: `svc.orm.On("CountJobProposalsByStatus", mock.Anything).Return(&feeds.JobProposalCounts{}, nil)`
$DIR/core/services/feeds/service_test.go: `svc.orm.On("WithDataSource", mock.Anything).Return(feeds.ORM(svc.orm))`
$DIR/core/services/feeds/service_test.go: `svc.jobORM.On("WithDataSource", mock.Anything).Return(job.ORM(svc.jobORM))`
$DIR/core/services/feeds/service_test.go: `svc.connMgr.On("GetClient", jp.FeedsManagerID).Return(svc.fmsClient, nil)`
$DIR/core/services/feeds/service_test.go: `svc.orm.On("GetSpec", mock.Anything, spec.ID).Return(spec, nil)`
$DIR/core/services/feeds/service_test.go: `svc.orm.On("GetJobProposal", mock.Anything, jp.ID).Return(jp, nil)`
$DIR/core/services/feeds/service_test.go: `svc.orm.On("CancelSpec", mock.Anything, spec.ID).Return(nil)`
$DIR/core/services/feeds/service_test.go: `svc.jobORM.On("FindJobByExternalJobID", mock.Anything, externalJobID).Return(job.Job{}, sql.ErrNoRows)`
$DIR/core/services/feeds/service_test.go: `svc.fmsClient.On("CancelledJob",
mock.MatchedBy(func(ctx context.Context) bool { return true }),
&proto.CancelledJobRequest{
Uuid: jp.RemoteUUID.String(),
Version: int64(spec.Version),
},
).Return(&proto.CancelledJobResponse{}, nil)`
$DIR/core/services/feeds/service_test.go: `svc.orm.On("CountJobProposalsByStatus", mock.Anything).Return(&feeds.JobProposalCounts{}, nil)`
$DIR/core/services/feeds/service_test.go: `svc.orm.On("WithDataSource", mock.Anything).Return(feeds.ORM(svc.orm))`
$DIR/core/services/feeds/service_test.go: `svc.jobORM.On("WithDataSource", mock.Anything).Return(job.ORM(svc.jobORM))`
$DIR/core/services/feeds/service_test.go: `svc.orm.On("GetSpec", mock.Anything, spec.ID).Return(nil, errors.New("Not Found"))`
$DIR/core/services/feeds/service_test.go: `svc.orm.On("GetSpec", mock.Anything, pspec.ID, mock.Anything).Return(pspec, nil)`
$DIR/core/services/feeds/service_test.go: `svc.orm.On("GetSpec", mock.Anything, spec.ID).Return(spec, nil)`
$DIR/core/services/feeds/service_test.go: `svc.orm.On("GetJobProposal", mock.Anything, jp.ID).Return(nil, errors.New("Not Found"))`
$DIR/core/services/feeds/service_test.go: `svc.orm.On("GetSpec", mock.Anything, spec.ID).Return(spec, nil)`
$DIR/core/services/feeds/service_test.go: `svc.orm.On("GetJobProposal", mock.Anything, jp.ID).Return(jp, nil)`
$DIR/core/services/feeds/service_test.go: `svc.connMgr.On("GetClient", jp.FeedsManagerID).Return(nil, errors.New("Not Connected"))`
$DIR/core/services/feeds/service_test.go: `svc.connMgr.On("GetClient", jp.FeedsManagerID).Return(svc.fmsClient, nil)`
$DIR/core/services/feeds/service_test.go: `svc.orm.On("GetSpec", mock.Anything, spec.ID).Return(spec, nil)`
$DIR/core/services/feeds/service_test.go: `svc.orm.On("GetJobProposal", mock.Anything, jp.ID).Return(jp, nil)`
$DIR/core/services/feeds/service_test.go: `svc.orm.On("CancelSpec", mock.Anything, spec.ID).Return(errors.New("failure"))`
$DIR/core/services/feeds/service_test.go: `svc.orm.On("WithDataSource", mock.Anything).Return(feeds.ORM(svc.orm))`
$DIR/core/services/feeds/service_test.go: `svc.jobORM.On("WithDataSource", mock.Anything).Return(job.ORM(svc.jobORM))`
$DIR/core/services/feeds/service_test.go: `svc.connMgr.On("GetClient", jp.FeedsManagerID).Return(svc.fmsClient, nil)`
$DIR/core/services/feeds/service_test.go: `svc.orm.On("GetSpec", mock.Anything, spec.ID).Return(spec, nil)`
$DIR/core/services/feeds/service_test.go: `svc.orm.On("GetJobProposal", mock.Anything, jp.ID).Return(jp, nil)`
$DIR/core/services/feeds/service_test.go: `svc.orm.On("CancelSpec", mock.Anything, spec.ID).Return(nil)`
$DIR/core/services/feeds/service_test.go: `svc.jobORM.On("FindJobByExternalJobID", mock.Anything, externalJobID).Return(job.Job{}, errors.New("failure"))`
$DIR/core/services/feeds/service_test.go: `svc.orm.On("WithDataSource", mock.Anything).Return(feeds.ORM(svc.orm))`
$DIR/core/services/feeds/service_test.go: `svc.jobORM.On("WithDataSource", mock.Anything).Return(job.ORM(svc.jobORM))`
$DIR/core/services/feeds/service_test.go: `svc.connMgr.On("GetClient", jp.FeedsManagerID).Return(svc.fmsClient, nil)`
$DIR/core/services/feeds/service_test.go: `svc.orm.On("GetSpec", mock.Anything, spec.ID).Return(spec, nil)`
$DIR/core/services/feeds/service_test.go: `svc.orm.On("GetJobProposal", mock.Anything, jp.ID).Return(jp, nil)`
$DIR/core/services/feeds/service_test.go: `svc.orm.On("CancelSpec", mock.Anything, spec.ID).Return(nil)`
$DIR/core/services/feeds/service_test.go: `svc.jobORM.On("FindJobByExternalJobID", mock.Anything, externalJobID).Return(j, nil)`
$DIR/core/services/feeds/service_test.go: `svc.spawner.On("DeleteJob", mock.Anything, mock.Anything, j.ID).Return(errors.New("failure"))`
$DIR/core/services/feeds/service_test.go: `svc.orm.On("WithDataSource", mock.Anything).Return(feeds.ORM(svc.orm))`
$DIR/core/services/feeds/service_test.go: `svc.jobORM.On("WithDataSource", mock.Anything).Return(job.ORM(svc.jobORM))`
$DIR/core/services/feeds/service_test.go: `svc.connMgr.On("GetClient", jp.FeedsManagerID).Return(svc.fmsClient, nil)`
$DIR/core/services/feeds/service_test.go: `svc.orm.On("GetSpec", mock.Anything, spec.ID).Return(spec, nil)`
$DIR/core/services/feeds/service_test.go: `svc.orm.On("GetJobProposal", mock.Anything, jp.ID).Return(jp, nil)`
$DIR/core/services/feeds/service_test.go: `svc.orm.On("CancelSpec", mock.Anything, spec.ID).Return(nil)`
$DIR/core/services/feeds/service_test.go: `svc.jobORM.On("FindJobByExternalJobID", mock.Anything, externalJobID).Return(j, nil)`
$DIR/core/services/feeds/service_test.go: `svc.spawner.On("DeleteJob", mock.Anything, mock.Anything, j.ID).Return(nil)`
$DIR/core/services/feeds/service_test.go: `svc.fmsClient.On("CancelledJob",
mock.MatchedBy(func(ctx context.Context) bool { return true }),
&proto.CancelledJobRequest{
Uuid: jp.RemoteUUID.String(),
Version: int64(spec.Version),
},
).Return(nil, errors.New("failure"))`
$DIR/core/services/feeds/service_test.go: `svc.orm.On("WithDataSource", mock.Anything).Return(feeds.ORM(svc.orm))`
$DIR/core/services/feeds/service_test.go: `svc.jobORM.On("WithDataSource", mock.Anything).Return(job.ORM(svc.jobORM))`
$DIR/core/services/feeds/service_test.go: `t.Run(tc.name, func(t *testing.T) {
t.Parallel()
svc := setupTestService(t)
if tc.before != nil {
tc.before(svc)
}
err := svc.CancelSpec(testutils.Context(t), tc.specID)
if tc.wantErr != "" {
require.Error(t, err)
assert.EqualError(t, err, tc.wantErr)
return
}
require.NoError(t, err)
})`
$DIR/core/services/feeds/service_test.go: `tc.before(svc)`
$DIR/core/services/feeds/service_test.go: `svc.orm.On("GetSpec", mock.Anything, id).
Return(&spec, nil)`
$DIR/core/services/feeds/service_test.go: `svc.orm.On("ListSpecsByJobProposalIDs", mock.Anything, []int64{jpID}).
Return(specs, nil)`
$DIR/core/services/feeds/service_test.go: `svc.connMgr.On("GetClient", jp.FeedsManagerID).Return(svc.fmsClient, nil)`
$DIR/core/services/feeds/service_test.go: `svc.orm.EXPECT().GetSpec(mock.Anything, spec.ID).Return(spec, nil)`
$DIR/core/services/feeds/service_test.go: `svc.orm.EXPECT().GetJobProposal(mock.Anything, jp.ID).Return(jp, nil)`
$DIR/core/services/feeds/service_test.go: `svc.jobORM.On("AssertBridgesExist", mock.Anything, mock.IsType(pipeline.Pipeline{})).Return(nil)`
$DIR/core/services/feeds/service_test.go: `svc.jobORM.On("FindJobByExternalJobID", mock.Anything, externalJobID).Return(job.Job{}, sql.ErrNoRows)`
$DIR/core/services/feeds/service_test.go: `svc.jobORM.On("FindJobIDByAddress", mock.Anything, address, evmChainID, mock.Anything).Return(int32(0), sql.ErrNoRows)`
$DIR/core/services/feeds/service_test.go: `svc.spawner.
On("CreateJob",
mock.Anything,
mock.Anything,
mock.MatchedBy(func(j *job.Job) bool {
return j.Name.String == "LINK / ETH | version 3 | contract 0x0000000000000000000000000000000000000000"
}),
).
Run(func(args mock.Arguments) { (args.Get(2).(*job.Job)).ID = 1 }).
Return(nil)`
$DIR/core/services/feeds/service_test.go: `(args.Get(2).(*job.Job)).ID = 1`
$DIR/core/services/feeds/service_test.go: `svc.orm.On("ApproveSpec",
mock.Anything,
spec.ID,
mock.IsType(uuid.UUID{}),
).Return(nil)`
$DIR/core/services/feeds/service_test.go: `svc.fmsClient.On("ApprovedJob",
mock.MatchedBy(func(ctx context.Context) bool { return true }),
&proto.ApprovedJobRequest{
Uuid: jp.RemoteUUID.String(),
Version: int64(spec.Version),
},
).Return(&proto.ApprovedJobResponse{}, nil)`
$DIR/core/services/feeds/service_test.go: `svc.orm.On("CountJobProposalsByStatus", mock.Anything).Return(&feeds.JobProposalCounts{}, nil)`
$DIR/core/services/feeds/service_test.go: `svc.orm.On("WithDataSource", mock.Anything).Return(feeds.ORM(svc.orm))`
$DIR/core/services/feeds/service_test.go: `svc.jobORM.On("WithDataSource", mock.Anything).Return(job.ORM(svc.jobORM))`
$DIR/core/services/feeds/service_test.go: `svc.connMgr.On("GetClient", jp.FeedsManagerID).Return(svc.fmsClient, nil)`
$DIR/core/services/feeds/service_test.go: `svc.orm.On("GetSpec", mock.Anything, cancelledSpec.ID).Return(cancelledSpec, nil)`
$DIR/core/services/feeds/service_test.go: `svc.orm.On("GetJobProposal", mock.Anything, jp.ID).Return(jp, nil)`
$DIR/core/services/feeds/service_test.go: `svc.orm.On("GetLatestSpec", mock.Anything, cancelledSpec.JobProposalID).Return(cancelledSpec, nil)`
$DIR/core/services/feeds/service_test.go: `svc.jobORM.On("AssertBridgesExist", mock.Anything, mock.IsType(pipeline.Pipeline{})).Return(nil)`
$DIR/core/services/feeds/service_test.go: `svc.jobORM.On("FindJobByExternalJobID", mock.Anything, externalJobID).Return(job.Job{}, sql.ErrNoRows)`
$DIR/core/services/feeds/service_test.go: `svc.jobORM.On("FindJobIDByAddress", mock.Anything, address, evmChainID, mock.Anything).Return(int32(0), sql.ErrNoRows)`
$DIR/core/services/feeds/service_test.go: `svc.spawner.
On("CreateJob",
mock.Anything,
mock.Anything,
mock.MatchedBy(func(j *job.Job) bool {
return j.Name.String == "LINK / ETH | version 3 | contract 0x0000000000000000000000000000000000000000"
}),
).
Run(func(args mock.Arguments) { (args.Get(2).(*job.Job)).ID = 1 }).
Return(nil)`
$DIR/core/services/feeds/service_test.go: `(args.Get(2).(*job.Job)).ID = 1`
$DIR/core/services/feeds/service_test.go: `svc.orm.On("ApproveSpec",
mock.Anything,
cancelledSpec.ID,
externalJobID,
).Return(nil)`
$DIR/core/services/feeds/service_test.go: `svc.fmsClient.On("ApprovedJob",
mock.MatchedBy(func(ctx context.Context) bool { return true }),
&proto.ApprovedJobRequest{
Uuid: jp.RemoteUUID.String(),
Version: int64(spec.Version),
},
).Return(&proto.ApprovedJobResponse{}, nil)`
$DIR/core/services/feeds/service_test.go: `svc.orm.On("CountJobProposalsByStatus", mock.Anything).Return(&feeds.JobProposalCounts{}, nil)`
$DIR/core/services/feeds/service_test.go: `svc.orm.On("WithDataSource", mock.Anything).Return(feeds.ORM(svc.orm))`
$DIR/core/services/feeds/service_test.go: `svc.jobORM.On("WithDataSource", mock.Anything).Return(job.ORM(svc.jobORM))`
$DIR/core/services/feeds/service_test.go: `svc.connMgr.On("GetClient", jp.FeedsManagerID).Return(svc.fmsClient, nil)`
$DIR/core/services/feeds/service_test.go: `svc.orm.EXPECT().GetSpec(mock.Anything, spec.ID).Return(spec2, nil)`
$DIR/core/services/feeds/service_test.go: `svc.orm.EXPECT().GetJobProposal(mock.Anything, jp.ID).Return(jp, nil)`
$DIR/core/services/feeds/service_test.go: `svc.orm.On("GetSpec", mock.Anything, spec.ID).Return(spec, nil)`
$DIR/core/services/feeds/service_test.go: `svc.orm.On("GetJobProposal", mock.Anything, jp.ID).Return(&feeds.JobProposal{
ID: 1,
Status: feeds.JobProposalStatusRevoked,
}, nil)`
$DIR/core/services/feeds/service_test.go: `svc.orm.On("GetSpec", mock.Anything, spec.ID).Return(spec, nil)`
$DIR/core/services/feeds/service_test.go: `svc.orm.On("GetJobProposal", mock.Anything, jp.ID).Return(&feeds.JobProposal{
ID: jp.ID,
Status: feeds.JobProposalStatusDeleted,
}, nil)`
$DIR/core/services/feeds/service_test.go: `svc.orm.On("GetSpec", mock.Anything, aspec.ID, mock.Anything).Return(aspec, nil)`
$DIR/core/services/feeds/service_test.go: `svc.orm.On("GetJobProposal", mock.Anything, jp.ID).Return(jp, nil)`
$DIR/core/services/feeds/service_test.go: `svc.orm.On("GetSpec", mock.Anything, cancelledSpec.ID, mock.Anything).Return(rejectedSpec, nil)`
$DIR/core/services/feeds/service_test.go: `svc.orm.On("GetJobProposal", mock.Anything, jp.ID).Return(jp, nil)`
$DIR/core/services/feeds/service_test.go: `svc.orm.On("GetSpec", mock.Anything, cancelledSpec.ID, mock.Anything).Return(cancelledSpec, nil)`
$DIR/core/services/feeds/service_test.go: `svc.orm.On("GetJobProposal", mock.Anything, jp.ID).Return(jp, nil)`
$DIR/core/services/feeds/service_test.go: `svc.orm.On("GetLatestSpec", mock.Anything, cancelledSpec.JobProposalID).Return(&feeds.JobProposalSpec{
ID: 21,
Status: feeds.SpecStatusPending,
JobProposalID: jp.ID,
Version: 2,
Definition: defn,
}, nil)`
$DIR/core/services/feeds/service_test.go: `svc.connMgr.On("GetClient", jp.FeedsManagerID).Return(svc.fmsClient, nil)`
$DIR/core/services/feeds/service_test.go: `svc.orm.On("GetSpec", mock.Anything, spec.ID).Return(spec, nil)`
$DIR/core/services/feeds/service_test.go: `svc.orm.On("GetJobProposal", mock.Anything, jp.ID).Return(jp, nil)`
$DIR/core/services/feeds/service_test.go: `svc.jobORM.On("AssertBridgesExist", mock.Anything, mock.IsType(pipeline.Pipeline{})).Return(nil)`
$DIR/core/services/feeds/service_test.go: `svc.jobORM.On("FindJobByExternalJobID", mock.Anything, externalJobID).Return(j, nil)`
$DIR/core/services/feeds/service_test.go: `svc.orm.On("WithDataSource", mock.Anything).Return(feeds.ORM(svc.orm))`
$DIR/core/services/feeds/service_test.go: `svc.jobORM.On("WithDataSource", mock.Anything).Return(job.ORM(svc.jobORM))`
$DIR/core/services/feeds/service_test.go: `svc.connMgr.On("GetClient", jp.FeedsManagerID).Return(svc.fmsClient, nil)`
$DIR/core/services/feeds/service_test.go: `svc.orm.On("GetSpec", mock.Anything, spec.ID).Return(spec, nil)`
$DIR/core/services/feeds/service_test.go: `svc.orm.On("GetJobProposal", mock.Anything, jp.ID).Return(jp, nil)`
$DIR/core/services/feeds/service_test.go: `svc.jobORM.On("AssertBridgesExist", mock.Anything, mock.IsType(pipeline.Pipeline{})).Return(nil)`
$DIR/core/services/feeds/service_test.go: `svc.jobORM.On("FindJobByExternalJobID", mock.Anything, externalJobID).Return(job.Job{}, sql.ErrNoRows)`
$DIR/core/services/feeds/service_test.go: `svc.jobORM.On("FindJobIDByAddress", mock.Anything, address, evmChainID, mock.Anything).Return(j.ID, nil)`
$DIR/core/services/feeds/service_test.go: `svc.orm.On("WithDataSource", mock.Anything).Return(feeds.ORM(svc.orm))`
$DIR/core/services/feeds/service_test.go: `svc.jobORM.On("WithDataSource", mock.Anything).Return(job.ORM(svc.jobORM))`
$DIR/core/services/feeds/service_test.go: `svc.connMgr.On("GetClient", jp.FeedsManagerID).Return(svc.fmsClient, nil)`
$DIR/core/services/feeds/service_test.go: `svc.orm.EXPECT().GetSpec(mock.Anything, spec.ID).Return(spec, nil)`
$DIR/core/services/feeds/service_test.go: `svc.orm.EXPECT().GetJobProposal(mock.Anything, jp.ID).Return(jp, nil)`
$DIR/core/services/feeds/service_test.go: `svc.jobORM.On("AssertBridgesExist", mock.Anything, mock.IsType(pipeline.Pipeline{})).Return(nil)`
$DIR/core/services/feeds/service_test.go: `svc.jobORM.On("FindJobByExternalJobID", mock.Anything, externalJobID).Return(j, nil)`
$DIR/core/services/feeds/service_test.go: `svc.orm.EXPECT().GetApprovedSpec(mock.Anything, jp.ID).Return(nil, sql.ErrNoRows)`
$DIR/core/services/feeds/service_test.go: `svc.spawner.On("DeleteJob", mock.Anything, mock.Anything, j.ID).Return(nil)`
$DIR/core/services/feeds/service_test.go: `svc.spawner.
On("CreateJob",
mock.Anything,
mock.Anything,
mock.MatchedBy(func(j *job.Job) bool {
return j.Name.String == "LINK / ETH | version 3 | contract 0x0000000000000000000000000000000000000000"
}),
).
Run(func(args mock.Arguments) { (args.Get(2).(*job.Job)).ID = 1 }).
Return(nil)`
$DIR/core/services/feeds/service_test.go: `(args.Get(2).(*job.Job)).ID = 1`
$DIR/core/services/feeds/service_test.go: `svc.orm.On("ApproveSpec",
mock.Anything,
spec.ID,
externalJobID,
).Return(nil)`
$DIR/core/services/feeds/service_test.go: `svc.fmsClient.On("ApprovedJob",
mock.MatchedBy(func(ctx context.Context) bool { return true }),
&proto.ApprovedJobRequest{
Uuid: jp.RemoteUUID.String(),
Version: int64(spec.Version),
},
).Return(&proto.ApprovedJobResponse{}, nil)`
$DIR/core/services/feeds/service_test.go: `svc.orm.On("CountJobProposalsByStatus", mock.Anything).Return(&feeds.JobProposalCounts{}, nil)`
$DIR/core/services/feeds/service_test.go: `svc.orm.On("WithDataSource", mock.Anything).Return(feeds.ORM(svc.orm))`
$DIR/core/services/feeds/service_test.go: `svc.jobORM.On("WithDataSource", mock.Anything).Return(job.ORM(svc.jobORM))`
$DIR/core/services/feeds/service_test.go: `svc.connMgr.On("GetClient", jp.FeedsManagerID).Return(svc.fmsClient, nil)`
$DIR/core/services/feeds/service_test.go: `svc.orm.EXPECT().GetSpec(mock.Anything, spec.ID).Return(spec, nil)`
$DIR/core/services/feeds/service_test.go: `svc.orm.EXPECT().GetJobProposal(mock.Anything, jp.ID).Return(jp, nil)`
$DIR/core/services/feeds/service_test.go: `svc.jobORM.On("AssertBridgesExist", mock.Anything, mock.IsType(pipeline.Pipeline{})).Return(nil)`
$DIR/core/services/feeds/service_test.go: `svc.jobORM.On("FindJobByExternalJobID", mock.Anything, externalJobID).Return(job.Job{}, sql.ErrNoRows)`
$DIR/core/services/feeds/service_test.go: `svc.jobORM.On("FindJobIDByAddress", mock.Anything, address, evmChainID, mock.Anything).Return(j.ID, nil)`
$DIR/core/services/feeds/service_test.go: `svc.orm.EXPECT().GetApprovedSpec(mock.Anything, jp.ID).Return(nil, sql.ErrNoRows)`
$DIR/core/services/feeds/service_test.go: `svc.spawner.On("DeleteJob", mock.Anything, mock.Anything, j.ID).Return(nil)`
$DIR/core/services/feeds/service_test.go: `svc.spawner.
On("CreateJob",
mock.Anything,
mock.Anything,
mock.MatchedBy(func(j *job.Job) bool {
return j.Name.String == "LINK / ETH | version 3 | contract 0x0000000000000000000000000000000000000000"
}),
).
Run(func(args mock.Arguments) { (args.Get(2).(*job.Job)).ID = 1 }).
Return(nil)`
$DIR/core/services/feeds/service_test.go: `(args.Get(2).(*job.Job)).ID = 1`
$DIR/core/services/feeds/service_test.go: `svc.orm.On("ApproveSpec",
mock.Anything,
spec.ID,
externalJobID,
).Return(nil)`
$DIR/core/services/feeds/service_test.go: `svc.fmsClient.On("ApprovedJob",
mock.MatchedBy(func(ctx context.Context) bool { return true }),
&proto.ApprovedJobRequest{
Uuid: jp.RemoteUUID.String(),
Version: int64(spec.Version),
},
).Return(&proto.ApprovedJobResponse{}, nil)`
$DIR/core/services/feeds/service_test.go: `svc.orm.On("CountJobProposalsByStatus", mock.Anything).Return(&feeds.JobProposalCounts{}, nil)`
$DIR/core/services/feeds/service_test.go: `svc.orm.On("WithDataSource", mock.Anything).Return(feeds.ORM(svc.orm))`
$DIR/core/services/feeds/service_test.go: `svc.jobORM.On("WithDataSource", mock.Anything).Return(job.ORM(svc.jobORM))`
$DIR/core/services/feeds/service_test.go: `svc.connMgr.On("GetClient", jp.FeedsManagerID).Return(svc.fmsClient, nil)`
$DIR/core/services/feeds/service_test.go: `svc.orm.EXPECT().GetSpec(mock.Anything, spec.ID).Return(spec, nil)`
$DIR/core/services/feeds/service_test.go: `svc.orm.EXPECT().GetJobProposal(mock.Anything, jp.ID).Return(jp, nil)`
$DIR/core/services/feeds/service_test.go: `svc.jobORM.On("AssertBridgesExist", mock.Anything, mock.IsType(pipeline.Pipeline{})).Return(nil)`
$DIR/core/services/feeds/service_test.go: `svc.jobORM.On("FindJobByExternalJobID", mock.Anything, externalJobID).Return(job.Job{}, sql.ErrNoRows)`
$DIR/core/services/feeds/service_test.go: `svc.jobORM.On("FindJobIDByAddress", mock.Anything, address, evmChainID, mock.Anything).Return(j.ID, nil)`
$DIR/core/services/feeds/service_test.go: `svc.orm.EXPECT().GetApprovedSpec(mock.Anything, jp.ID).Return(&feeds.JobProposalSpec{ID: 100}, nil)`
$DIR/core/services/feeds/service_test.go: `svc.orm.EXPECT().CancelSpec(mock.Anything, int64(100)).Return(nil)`
$DIR/core/services/feeds/service_test.go: `svc.spawner.On("DeleteJob", mock.Anything, mock.Anything, j.ID).Return(nil)`
$DIR/core/services/feeds/service_test.go: `svc.spawner.
On("CreateJob",
mock.Anything,
mock.Anything,
mock.MatchedBy(func(j *job.Job) bool {
return j.Name.String == "LINK / ETH | version 3 | contract 0x0000000000000000000000000000000000000000"
}),
).
Run(func(args mock.Arguments) { (args.Get(2).(*job.Job)).ID = 1 }).
Return(nil)`
$DIR/core/services/feeds/service_test.go: `(args.Get(2).(*job.Job)).ID = 1`
$DIR/core/services/feeds/service_test.go: `svc.orm.On("ApproveSpec",
mock.Anything,
spec.ID,
externalJobID,
).Return(nil)`
$DIR/core/services/feeds/service_test.go: `svc.fmsClient.On("ApprovedJob",
mock.MatchedBy(func(ctx context.Context) bool { return true }),
&proto.ApprovedJobRequest{
Uuid: jp.RemoteUUID.String(),
Version: int64(spec.Version),
},
).Return(&proto.ApprovedJobResponse{}, nil)`
$DIR/core/services/feeds/service_test.go: `svc.orm.On("CountJobProposalsByStatus", mock.Anything).Return(&feeds.JobProposalCounts{}, nil)`
$DIR/core/services/feeds/service_test.go: `svc.orm.On("WithDataSource", mock.Anything).Return(feeds.ORM(svc.orm))`
$DIR/core/services/feeds/service_test.go: `svc.jobORM.On("WithDataSource", mock.Anything).Return(job.ORM(svc.jobORM))`
$DIR/core/services/feeds/service_test.go: `svc.orm.On("GetSpec", mock.Anything, spec.ID).Return(nil, errors.New("Not Found"))`
$DIR/core/services/feeds/service_test.go: `svc.orm.On("GetSpec", mock.Anything, spec.ID).Return(spec, nil)`
$DIR/core/services/feeds/service_test.go: `svc.orm.On("GetJobProposal", mock.Anything, jp.ID).Return(nil, errors.New("Not Found"))`
$DIR/core/services/feeds/service_test.go: `svc.connMgr.On("GetClient", jp.FeedsManagerID).Return(svc.fmsClient, nil)`
$DIR/core/services/feeds/service_test.go: `svc.orm.On("GetSpec", mock.Anything, spec.ID).Return(spec, nil)`
$DIR/core/services/feeds/service_test.go: `svc.orm.On("GetJobProposal", mock.Anything, jp.ID).Return(jp, nil)`
$DIR/core/services/feeds/service_test.go: `svc.jobORM.On("AssertBridgesExist", mock.Anything, mock.IsType(pipeline.Pipeline{})).Return(errors.New("bridges do not exist"))`
$DIR/core/services/feeds/service_test.go: `svc.orm.On("GetSpec", mock.Anything, spec.ID).Return(spec, nil)`
$DIR/core/services/feeds/service_test.go: `svc.orm.On("GetJobProposal", mock.Anything, jp.ID).Return(jp, nil)`
$DIR/core/services/feeds/service_test.go: `svc.connMgr.On("GetClient", jp.FeedsManagerID).Return(nil, errors.New("Not Connected"))`
$DIR/core/services/feeds/service_test.go: `svc.connMgr.On("GetClient", jp.FeedsManagerID).Return(svc.fmsClient, nil)`
$DIR/core/services/feeds/service_test.go: `svc.orm.EXPECT().GetSpec(mock.Anything, spec.ID).Return(spec, nil)`
$DIR/core/services/feeds/service_test.go: `svc.orm.EXPECT().GetJobProposal(mock.Anything, jp.ID).Return(jp, nil)`
$DIR/core/services/feeds/service_test.go: `svc.jobORM.On("AssertBridgesExist", mock.Anything, mock.IsType(pipeline.Pipeline{})).Return(nil)`
$DIR/core/services/feeds/service_test.go: `svc.jobORM.On("FindJobByExternalJobID", mock.Anything, externalJobID).Return(j, nil)`
$DIR/core/services/feeds/service_test.go: `svc.orm.EXPECT().GetApprovedSpec(mock.Anything, jp.ID).Return(nil, errors.New("failure"))`
$DIR/core/services/feeds/service_test.go: `svc.orm.On("WithDataSource", mock.Anything).Return(feeds.ORM(svc.orm))`
$DIR/core/services/feeds/service_test.go: `svc.jobORM.On("WithDataSource", mock.Anything).Return(job.ORM(svc.jobORM))`
$DIR/core/services/feeds/service_test.go: `svc.connMgr.On("GetClient", jp.FeedsManagerID).Return(svc.fmsClient, nil)`
$DIR/core/services/feeds/service_test.go: `svc.orm.EXPECT().GetSpec(mock.Anything, spec.ID).Return(spec, nil)`
$DIR/core/services/feeds/service_test.go: `svc.orm.EXPECT().GetJobProposal(mock.Anything, jp.ID).Return(jp, nil)`
$DIR/core/services/feeds/service_test.go: `svc.jobORM.On("AssertBridgesExist", mock.Anything, mock.IsType(pipeline.Pipeline{})).Return(nil)`
$DIR/core/services/feeds/service_test.go: `svc.jobORM.On("FindJobByExternalJobID", mock.Anything, externalJobID).Return(job.Job{}, sql.ErrNoRows)`
$DIR/core/services/feeds/service_test.go: `svc.jobORM.On("FindJobIDByAddress", mock.Anything, address, evmChainID, mock.Anything).Return(j.ID, nil)`
$DIR/core/services/feeds/service_test.go: `svc.orm.EXPECT().GetApprovedSpec(mock.Anything, jp.ID).Return(nil, errors.New("failure"))`
$DIR/core/services/feeds/service_test.go: `svc.orm.On("WithDataSource", mock.Anything).Return(feeds.ORM(svc.orm))`
$DIR/core/services/feeds/service_test.go: `svc.jobORM.On("WithDataSource", mock.Anything).Return(job.ORM(svc.jobORM))`
$DIR/core/services/feeds/service_test.go: `svc.connMgr.On("GetClient", jp.FeedsManagerID).Return(svc.fmsClient, nil)`
$DIR/core/services/feeds/service_test.go: `svc.orm.EXPECT().GetSpec(mock.Anything, spec.ID).Return(spec, nil)`
$DIR/core/services/feeds/service_test.go: `svc.orm.EXPECT().GetJobProposal(mock.Anything, jp.ID).Return(jp, nil)`
$DIR/core/services/feeds/service_test.go: `svc.jobORM.On("AssertBridgesExist", mock.Anything, mock.IsType(pipeline.Pipeline{})).Return(nil)`
$DIR/core/services/feeds/service_test.go: `svc.jobORM.On("FindJobByExternalJobID", mock.Anything, externalJobID).Return(j, nil)`
$DIR/core/services/feeds/service_test.go: `svc.orm.EXPECT().GetApprovedSpec(mock.Anything, jp.ID).Return(&feeds.JobProposalSpec{ID: 100}, nil)`
$DIR/core/services/feeds/service_test.go: `svc.orm.EXPECT().CancelSpec(mock.Anything, int64(100)).Return(errors.New("failure"))`
$DIR/core/services/feeds/service_test.go: `svc.orm.On("WithDataSource", mock.Anything).Return(feeds.ORM(svc.orm))`
$DIR/core/services/feeds/service_test.go: `svc.jobORM.On("WithDataSource", mock.Anything).Return(job.ORM(svc.jobORM))`
$DIR/core/services/feeds/service_test.go: `svc.connMgr.On("GetClient", jp.FeedsManagerID).Return(svc.fmsClient, nil)`
$DIR/core/services/feeds/service_test.go: `svc.orm.EXPECT().GetSpec(mock.Anything, spec.ID).Return(spec, nil)`
$DIR/core/services/feeds/service_test.go: `svc.orm.EXPECT().GetJobProposal(mock.Anything, jp.ID).Return(jp, nil)`
$DIR/core/services/feeds/service_test.go: `svc.jobORM.On("AssertBridgesExist", mock.Anything, mock.IsType(pipeline.Pipeline{})).Return(nil)`
$DIR/core/services/feeds/service_test.go: `svc.jobORM.On("FindJobByExternalJobID", mock.Anything, externalJobID).Return(job.Job{}, sql.ErrNoRows)`
$DIR/core/services/feeds/service_test.go: `svc.jobORM.On("FindJobIDByAddress", mock.Anything, address, evmChainID, mock.Anything).Return(j.ID, nil)`
$DIR/core/services/feeds/service_test.go: `svc.orm.EXPECT().GetApprovedSpec(mock.Anything, jp.ID).Return(&feeds.JobProposalSpec{ID: 100}, nil)`
$DIR/core/services/feeds/service_test.go: `svc.orm.EXPECT().CancelSpec(mock.Anything, int64(100)).Return(errors.New("failure"))`
$DIR/core/services/feeds/service_test.go: `svc.orm.On("WithDataSource", mock.Anything).Return(feeds.ORM(svc.orm))`
$DIR/core/services/feeds/service_test.go: `svc.jobORM.On("WithDataSource", mock.Anything).Return(job.ORM(svc.jobORM))`
$DIR/core/services/feeds/service_test.go: `svc.orm.On("GetSpec", mock.Anything, spec.ID).Return(spec, nil)`
$DIR/core/services/feeds/service_test.go: `svc.orm.On("GetJobProposal", mock.Anything, jp.ID).Return(jp, nil)`
$DIR/core/services/feeds/service_test.go: `svc.connMgr.On("GetClient", jp.FeedsManagerID).Return(svc.fmsClient, nil)`
$DIR/core/services/feeds/service_test.go: `svc.jobORM.On("AssertBridgesExist", mock.Anything, mock.IsType(pipeline.Pipeline{})).Return(nil)`
$DIR/core/services/feeds/service_test.go: `svc.jobORM.On("FindJobByExternalJobID", mock.Anything, externalJobID).Return(job.Job{}, sql.ErrNoRows)`
$DIR/core/services/feeds/service_test.go: `svc.jobORM.On("FindJobIDByAddress", mock.Anything, address, evmChainID, mock.Anything).Return(int32(0), sql.ErrNoRows)`
$DIR/core/services/feeds/service_test.go: `svc.spawner.
On("CreateJob",
mock.Anything,
mock.Anything,
mock.MatchedBy(func(j *job.Job) bool {
return j.Name.String == "LINK / ETH | version 3 | contract 0x0000000000000000000000000000000000000000"
}),
).
Return(errors.New("could not save"))`
$DIR/core/services/feeds/service_test.go: `svc.orm.On("WithDataSource", mock.Anything).Return(feeds.ORM(svc.orm))`
$DIR/core/services/feeds/service_test.go: `svc.jobORM.On("WithDataSource", mock.Anything).Return(job.ORM(svc.jobORM))`
$DIR/core/services/feeds/service_test.go: `svc.orm.On("GetSpec", mock.Anything, spec.ID).Return(spec, nil)`
$DIR/core/services/feeds/service_test.go: `svc.orm.On("GetJobProposal", mock.Anything, jp.ID).Return(jp, nil)`
$DIR/core/services/feeds/service_test.go: `svc.connMgr.On("GetClient", jp.FeedsManagerID).Return(svc.fmsClient, nil)`
$DIR/core/services/feeds/service_test.go: `svc.jobORM.On("AssertBridgesExist", mock.Anything, mock.IsType(pipeline.Pipeline{})).Return(nil)`
$DIR/core/services/feeds/service_test.go: `svc.jobORM.On("FindJobByExternalJobID", mock.Anything, externalJobID).Return(job.Job{}, sql.ErrNoRows)`
$DIR/core/services/feeds/service_test.go: `svc.jobORM.On("FindJobIDByAddress", mock.Anything, address, evmChainID, mock.Anything).Return(int32(0), sql.ErrNoRows)`
$DIR/core/services/feeds/service_test.go: `svc.spawner.
On("CreateJob",
mock.Anything,
mock.Anything,
mock.MatchedBy(func(j *job.Job) bool {
return j.Name.String == "LINK / ETH | version 3 | contract 0x0000000000000000000000000000000000000000"
}),
).
Run(func(args mock.Arguments) { (args.Get(2).(*job.Job)).ID = 1 }).
Return(nil)`
$DIR/core/services/feeds/service_test.go: `(args.Get(2).(*job.Job)).ID = 1`
$DIR/core/services/feeds/service_test.go: `svc.orm.On("ApproveSpec",
mock.Anything,
spec.ID,
externalJobID,
).Return(errors.New("failure"))`
$DIR/core/services/feeds/service_test.go: `svc.orm.On("WithDataSource", mock.Anything).Return(feeds.ORM(svc.orm))`
$DIR/core/services/feeds/service_test.go: `svc.jobORM.On("WithDataSource", mock.Anything).Return(job.ORM(svc.jobORM))`
$DIR/core/services/feeds/service_test.go: `svc.orm.On("GetSpec", mock.Anything, spec.ID).Return(spec, nil)`
$DIR/core/services/feeds/service_test.go: `svc.orm.On("GetJobProposal", mock.Anything, jp.ID).Return(jp, nil)`
$DIR/core/services/feeds/service_test.go: `svc.connMgr.On("GetClient", jp.FeedsManagerID).Return(svc.fmsClient, nil)`
$DIR/core/services/feeds/service_test.go: `svc.jobORM.On("AssertBridgesExist", mock.Anything, mock.IsType(pipeline.Pipeline{})).Return(nil)`
$DIR/core/services/feeds/service_test.go: `svc.jobORM.On("FindJobByExternalJobID", mock.Anything, externalJobID).Return(job.Job{}, sql.ErrNoRows)`
$DIR/core/services/feeds/service_test.go: `svc.jobORM.On("FindJobIDByAddress", mock.Anything, address, evmChainID, mock.Anything).Return(int32(0), sql.ErrNoRows)`
$DIR/core/services/feeds/service_test.go: `svc.spawner.
On("CreateJob",
mock.Anything,
mock.Anything,
mock.MatchedBy(func(j *job.Job) bool {
return j.Name.String == "LINK / ETH | version 3 | contract 0x0000000000000000000000000000000000000000"
}),
).
Run(func(args mock.Arguments) { (args.Get(2).(*job.Job)).ID = 1 }).
Return(nil)`
$DIR/core/services/feeds/service_test.go: `(args.Get(2).(*job.Job)).ID = 1`
$DIR/core/services/feeds/service_test.go: `svc.orm.On("ApproveSpec",
mock.Anything,
spec.ID,
externalJobID,
).Return(nil)`
$DIR/core/services/feeds/service_test.go: `svc.fmsClient.On("ApprovedJob",
mock.MatchedBy(func(ctx context.Context) bool { return true }),
&proto.ApprovedJobRequest{
Uuid: jp.RemoteUUID.String(),
Version: int64(spec.Version),
},
).Return(nil, errors.New("failure"))`
$DIR/core/services/feeds/service_test.go: `svc.orm.On("WithDataSource", mock.Anything).Return(feeds.ORM(svc.orm))`
$DIR/core/services/feeds/service_test.go: `svc.jobORM.On("WithDataSource", mock.Anything).Return(job.ORM(svc.jobORM))`
$DIR/core/services/feeds/service_test.go: `t.Run(tc.name, func(t *testing.T) {
svc := setupTestServiceCfg(t, func(c *chainlink.Config, s *chainlink.Secrets) {
c.OCR2.Enabled = testutils.Ptr(true)
if tc.httpTimeout != nil {
c.JobPipeline.HTTPRequest.DefaultTimeout = tc.httpTimeout
}
})
if tc.before != nil {
tc.before(svc)
}
err := svc.ApproveSpec(ctx, tc.id, tc.force)
if tc.wantErr != "" {
require.Error(t, err)
assert.EqualError(t, err, tc.wantErr)
} else {
require.NoError(t, err)
}
})`
$DIR/core/services/feeds/service_test.go: `c.OCR2.Enabled = testutils.Ptr(true)`
$DIR/core/services/feeds/service_test.go: `c.JobPipeline.HTTPRequest.DefaultTimeout = tc.httpTimeout`
$DIR/core/services/feeds/service_test.go: `tc.before(svc)`
$DIR/core/services/feeds/service_test.go: `svc.connMgr.On("GetClient", jp.FeedsManagerID).Return(svc.fmsClient, nil)`
$DIR/core/services/feeds/service_test.go: `svc.orm.On("GetSpec", mock.Anything, spec.ID).Return(spec, nil)`
$DIR/core/services/feeds/service_test.go: `svc.orm.On("GetJobProposal", mock.Anything, jp.ID).Return(jp, nil)`
$DIR/core/services/feeds/service_test.go: `svc.jobORM.On("AssertBridgesExist", mock.Anything, mock.IsType(pipeline.Pipeline{})).Return(nil)`
$DIR/core/services/feeds/service_test.go: `svc.jobORM.On("FindJobByExternalJobID", mock.Anything, externalJobID).Return(job.Job{}, sql.ErrNoRows)`
$DIR/core/services/feeds/service_test.go: `svc.jobORM.On("FindOCR2JobIDByAddress", mock.Anything, address, (*common.Hash)(nil)).Return(int32(0), sql.ErrNoRows)`
$DIR/core/services/feeds/service_test.go: `svc.spawner.
On("CreateJob",
mock.Anything,
mock.Anything,
mock.MatchedBy(func(j *job.Job) bool {
return j.Name.String == "LINK / ETH | version 3 | contract 0x0000000000000000000000000000000000000000"
}),
).
Run(func(args mock.Arguments) { (args.Get(2).(*job.Job)).ID = 1 }).
Return(nil)`
$DIR/core/services/feeds/service_test.go: `(args.Get(2).(*job.Job)).ID = 1`
$DIR/core/services/feeds/service_test.go: `svc.orm.On("ApproveSpec",
mock.Anything,
spec.ID,
externalJobID,
).Return(nil)`
$DIR/core/services/feeds/service_test.go: `svc.fmsClient.On("ApprovedJob",
mock.MatchedBy(func(ctx context.Context) bool { return true }),
&proto.ApprovedJobRequest{
Uuid: jp.RemoteUUID.String(),
Version: int64(spec.Version),
},
).Return(&proto.ApprovedJobResponse{}, nil)`
$DIR/core/services/feeds/service_test.go: `svc.orm.On("CountJobProposalsByStatus", mock.Anything).Return(&feeds.JobProposalCounts{}, nil)`
$DIR/core/services/feeds/service_test.go: `svc.orm.On("WithDataSource", mock.Anything).Return(feeds.ORM(svc.orm))`
$DIR/core/services/feeds/service_test.go: `svc.jobORM.On("WithDataSource", mock.Anything).Return(job.ORM(svc.jobORM))`
$DIR/core/services/feeds/service_test.go: `svc.connMgr.On("GetClient", jp.FeedsManagerID).Return(svc.fmsClient, nil)`
$DIR/core/services/feeds/service_test.go: `svc.orm.On("GetSpec", mock.Anything, cancelledSpec.ID, mock.Anything).Return(cancelledSpec, nil)`
$DIR/core/services/feeds/service_test.go: `svc.orm.On("GetJobProposal", mock.Anything, jp.ID).Return(jp, nil)`
$DIR/core/services/feeds/service_test.go: `svc.orm.On("GetLatestSpec", mock.Anything, cancelledSpec.JobProposalID).Return(cancelledSpec, nil)`
$DIR/core/services/feeds/service_test.go: `svc.jobORM.On("AssertBridgesExist", mock.Anything, mock.IsType(pipeline.Pipeline{})).Return(nil)`
$DIR/core/services/feeds/service_test.go: `svc.jobORM.On("FindJobByExternalJobID", mock.Anything, externalJobID).Return(job.Job{}, sql.ErrNoRows)`
$DIR/core/services/feeds/service_test.go: `svc.jobORM.On("FindOCR2JobIDByAddress", mock.Anything, address, (*common.Hash)(nil)).Return(int32(0), sql.ErrNoRows)`
$DIR/core/services/feeds/service_test.go: `svc.spawner.
On("CreateJob",
mock.Anything,
mock.Anything,
mock.MatchedBy(func(j *job.Job) bool {
return j.Name.String == "LINK / ETH | version 3 | contract 0x0000000000000000000000000000000000000000"
}),
).
Run(func(args mock.Arguments) { (args.Get(2).(*job.Job)).ID = 1 }).
Return(nil)`
$DIR/core/services/feeds/service_test.go: `(args.Get(2).(*job.Job)).ID = 1`
$DIR/core/services/feeds/service_test.go: `svc.orm.On("ApproveSpec",
mock.Anything,
cancelledSpec.ID,
externalJobID,
).Return(nil)`
$DIR/core/services/feeds/service_test.go: `svc.fmsClient.On("ApprovedJob",
mock.MatchedBy(func(ctx context.Context) bool { return true }),
&proto.ApprovedJobRequest{
Uuid: jp.RemoteUUID.String(),
Version: int64(spec.Version),
},
).Return(&proto.ApprovedJobResponse{}, nil)`
$DIR/core/services/feeds/service_test.go: `svc.orm.On("CountJobProposalsByStatus", mock.Anything).Return(&feeds.JobProposalCounts{}, nil)`
$DIR/core/services/feeds/service_test.go: `svc.orm.On("WithDataSource", mock.Anything).Return(feeds.ORM(svc.orm))`
$DIR/core/services/feeds/service_test.go: `svc.jobORM.On("WithDataSource", mock.Anything).Return(job.ORM(svc.jobORM))`
$DIR/core/services/feeds/service_test.go: `svc.orm.On("GetSpec", mock.Anything, cancelledSpec.ID, mock.Anything).Return(cancelledSpec, nil)`
$DIR/core/services/feeds/service_test.go: `svc.orm.On("GetJobProposal", mock.Anything, jp.ID).Return(jp, nil)`
$DIR/core/services/feeds/service_test.go: `svc.orm.On("GetLatestSpec", mock.Anything, cancelledSpec.JobProposalID).Return(&feeds.JobProposalSpec{
ID: 21,
Status: feeds.SpecStatusPending,
JobProposalID: jp.ID,
Version: 2,
Definition: defn,
}, nil)`
$DIR/core/services/feeds/service_test.go: `svc.orm.On("GetSpec", mock.Anything, cancelledSpec.ID, mock.Anything).Return(rejectedSpec, nil)`
$DIR/core/services/feeds/service_test.go: `svc.orm.On("GetJobProposal", mock.Anything, jp.ID).Return(jp, nil)`
$DIR/core/services/feeds/service_test.go: `svc.connMgr.On("GetClient", jp.FeedsManagerID).Return(svc.fmsClient, nil)`
$DIR/core/services/feeds/service_test.go: `svc.orm.On("GetSpec", mock.Anything, spec.ID).Return(spec, nil)`
$DIR/core/services/feeds/service_test.go: `svc.orm.On("GetJobProposal", mock.Anything, jp.ID).Return(jp, nil)`
$DIR/core/services/feeds/service_test.go: `svc.jobORM.On("AssertBridgesExist", mock.Anything, mock.IsType(pipeline.Pipeline{})).Return(nil)`
$DIR/core/services/feeds/service_test.go: `svc.jobORM.On("FindJobByExternalJobID", mock.Anything, externalJobID).Return(job.Job{}, sql.ErrNoRows)`
$DIR/core/services/feeds/service_test.go: `svc.jobORM.On("FindOCR2JobIDByAddress", mock.Anything, address, (*common.Hash)(nil)).Return(j.ID, nil)`
$DIR/core/services/feeds/service_test.go: `svc.orm.On("WithDataSource", mock.Anything).Return(feeds.ORM(svc.orm))`
$DIR/core/services/feeds/service_test.go: `svc.jobORM.On("WithDataSource", mock.Anything).Return(job.ORM(svc.jobORM))`
$DIR/core/services/feeds/service_test.go: `svc.connMgr.On("GetClient", jp.FeedsManagerID).Return(svc.fmsClient, nil)`
$DIR/core/services/feeds/service_test.go: `svc.orm.On("GetSpec", mock.Anything, spec.ID).Return(spec, nil)`
$DIR/core/services/feeds/service_test.go: `svc.orm.On("GetJobProposal", mock.Anything, jp.ID).Return(jp, nil)`
$DIR/core/services/feeds/service_test.go: `svc.jobORM.On("AssertBridgesExist", mock.Anything, mock.IsType(pipeline.Pipeline{})).Return(nil)`
$DIR/core/services/feeds/service_test.go: `svc.orm.EXPECT().GetApprovedSpec(mock.Anything, jp.ID).Return(nil, sql.ErrNoRows)`
$DIR/core/services/feeds/service_test.go: `svc.jobORM.On("FindJobByExternalJobID", mock.Anything, externalJobID).Return(job.Job{}, sql.ErrNoRows)`
$DIR/core/services/feeds/service_test.go: `svc.jobORM.On("FindOCR2JobIDByAddress", mock.Anything, address, (*common.Hash)(nil)).Return(j.ID, nil)`
$DIR/core/services/feeds/service_test.go: `svc.spawner.On("DeleteJob", mock.Anything, mock.Anything, j.ID).Return(nil)`
$DIR/core/services/feeds/service_test.go: `svc.spawner.
On("CreateJob",
mock.Anything,
mock.Anything,
mock.MatchedBy(func(j *job.Job) bool {
return j.Name.String == "LINK / ETH | version 3 | contract 0x0000000000000000000000000000000000000000"
}),
).
Run(func(args mock.Arguments) { (args.Get(2).(*job.Job)).ID = 1 }).
Return(nil)`
$DIR/core/services/feeds/service_test.go: `(args.Get(2).(*job.Job)).ID = 1`
$DIR/core/services/feeds/service_test.go: `svc.orm.On("ApproveSpec",
mock.Anything,
spec.ID,
externalJobID,
).Return(nil)`
$DIR/core/services/feeds/service_test.go: `svc.fmsClient.On("ApprovedJob",
mock.MatchedBy(func(ctx context.Context) bool { return true }),
&proto.ApprovedJobRequest{
Uuid: jp.RemoteUUID.String(),
Version: int64(spec.Version),
},
).Return(&proto.ApprovedJobResponse{}, nil)`
$DIR/core/services/feeds/service_test.go: `svc.orm.On("CountJobProposalsByStatus", mock.Anything).Return(&feeds.JobProposalCounts{}, nil)`
$DIR/core/services/feeds/service_test.go: `svc.orm.On("WithDataSource", mock.Anything).Return(feeds.ORM(svc.orm))`
$DIR/core/services/feeds/service_test.go: `svc.jobORM.On("WithDataSource", mock.Anything).Return(job.ORM(svc.jobORM))`
$DIR/core/services/feeds/service_test.go: `svc.connMgr.On("GetClient", jp.FeedsManagerID).Return(svc.fmsClient, nil)`
$DIR/core/services/feeds/service_test.go: `svc.orm.On("GetSpec", mock.Anything, spec.ID).Return(&feeds.JobProposalSpec{
ID: 20,
Status: feeds.SpecStatusPending,
JobProposalID: jp.ID,
Version: 1,
Definition: fmt.Sprintf(defn2, externalJobID.String(), &feedID),
}, nil)`
$DIR/core/services/feeds/service_test.go: `svc.orm.On("GetJobProposal", mock.Anything, jp.ID).Return(jp, nil)`
$DIR/core/services/feeds/service_test.go: `svc.jobORM.On("AssertBridgesExist", mock.Anything, mock.IsType(pipeline.Pipeline{})).Return(nil)`
$DIR/core/services/feeds/service_test.go: `svc.orm.EXPECT().GetApprovedSpec(mock.Anything, jp.ID).Return(nil, sql.ErrNoRows)`
$DIR/core/services/feeds/service_test.go: `svc.jobORM.On("FindJobByExternalJobID", mock.Anything, externalJobID).Return(job.Job{}, sql.ErrNoRows)`
$DIR/core/services/feeds/service_test.go: `svc.jobORM.On("FindOCR2JobIDByAddress", mock.Anything, address, &feedID).Return(j.ID, nil)`
$DIR/core/services/feeds/service_test.go: `svc.spawner.On("DeleteJob", mock.Anything, mock.Anything, j.ID).Return(nil)`
$DIR/core/services/feeds/service_test.go: `svc.spawner.
On("CreateJob",
mock.Anything,
mock.Anything,
mock.MatchedBy(func(j *job.Job) bool {
return j.Name.String == "LINK / ETH | version 3 | contract 0x0000000000000000000000000000000000000000"
}),
).
Run(func(args mock.Arguments) { (args.Get(2).(*job.Job)).ID = 1 }).
Return(nil)`
$DIR/core/services/feeds/service_test.go: `(args.Get(2).(*job.Job)).ID = 1`
$DIR/core/services/feeds/service_test.go: `svc.orm.On("ApproveSpec",
mock.Anything,
spec.ID,
externalJobID,
).Return(nil)`
$DIR/core/services/feeds/service_test.go: `svc.fmsClient.On("ApprovedJob",
mock.MatchedBy(func(ctx context.Context) bool { return true }),
&proto.ApprovedJobRequest{
Uuid: jp.RemoteUUID.String(),
Version: int64(spec.Version),
},
).Return(&proto.ApprovedJobResponse{}, nil)`
$DIR/core/services/feeds/service_test.go: `svc.orm.On("CountJobProposalsByStatus", mock.Anything).Return(&feeds.JobProposalCounts{}, nil)`
$DIR/core/services/feeds/service_test.go: `svc.orm.On("WithDataSource", mock.Anything).Return(feeds.ORM(svc.orm))`
$DIR/core/services/feeds/service_test.go: `svc.jobORM.On("WithDataSource", mock.Anything).Return(job.ORM(svc.jobORM))`
$DIR/core/services/feeds/service_test.go: `svc.connMgr.On("GetClient", jp.FeedsManagerID).Return(svc.fmsClient, nil)`
$DIR/core/services/feeds/service_test.go: `svc.orm.On("GetSpec", mock.Anything, spec.ID).Return(spec, nil)`
$DIR/core/services/feeds/service_test.go: `svc.orm.On("GetJobProposal", mock.Anything, jp.ID).Return(jp, nil)`
$DIR/core/services/feeds/service_test.go: `svc.jobORM.On("AssertBridgesExist", mock.Anything, mock.IsType(pipeline.Pipeline{})).Return(nil)`
$DIR/core/services/feeds/service_test.go: `svc.orm.EXPECT().GetApprovedSpec(mock.Anything, jp.ID).Return(&feeds.JobProposalSpec{ID: 100}, nil)`
$DIR/core/services/feeds/service_test.go: `svc.orm.EXPECT().CancelSpec(mock.Anything, int64(100)).Return(nil)`
$DIR/core/services/feeds/service_test.go: `svc.jobORM.On("FindJobByExternalJobID", mock.Anything, externalJobID).Return(job.Job{}, sql.ErrNoRows)`
$DIR/core/services/feeds/service_test.go: `svc.jobORM.On("FindOCR2JobIDByAddress", mock.Anything, address, (*common.Hash)(nil)).Return(j.ID, nil)`
$DIR/core/services/feeds/service_test.go: `svc.spawner.On("DeleteJob", mock.Anything, mock.Anything, j.ID).Return(nil)`
$DIR/core/services/feeds/service_test.go: `svc.spawner.
On("CreateJob",
mock.Anything,
mock.Anything,
mock.MatchedBy(func(j *job.Job) bool {
return j.Name.String == "LINK / ETH | version 3 | contract 0x0000000000000000000000000000000000000000"
}),
).
Run(func(args mock.Arguments) { (args.Get(2).(*job.Job)).ID = 1 }).
Return(nil)`
$DIR/core/services/feeds/service_test.go: `(args.Get(2).(*job.Job)).ID = 1`
$DIR/core/services/feeds/service_test.go: `svc.orm.On("ApproveSpec",
mock.Anything,
spec.ID,
externalJobID,
).Return(nil)`
$DIR/core/services/feeds/service_test.go: `svc.fmsClient.On("ApprovedJob",
mock.MatchedBy(func(ctx context.Context) bool { return true }),
&proto.ApprovedJobRequest{
Uuid: jp.RemoteUUID.String(),
Version: int64(spec.Version),
},
).Return(&proto.ApprovedJobResponse{}, nil)`
$DIR/core/services/feeds/service_test.go: `svc.orm.On("CountJobProposalsByStatus", mock.Anything).Return(&feeds.JobProposalCounts{}, nil)`
$DIR/core/services/feeds/service_test.go: `svc.orm.On("WithDataSource", mock.Anything).Return(feeds.ORM(svc.orm))`
$DIR/core/services/feeds/service_test.go: `svc.jobORM.On("WithDataSource", mock.Anything).Return(job.ORM(svc.jobORM))`
$DIR/core/services/feeds/service_test.go: `svc.orm.On("GetSpec", mock.Anything, spec.ID).Return(nil, errors.New("Not Found"))`
$DIR/core/services/feeds/service_test.go: `svc.orm.On("GetSpec", mock.Anything, spec.ID).Return(aspec, nil)`
$DIR/core/services/feeds/service_test.go: `svc.orm.On("GetJobProposal", mock.Anything, jp.ID).Return(jp, nil)`
$DIR/core/services/feeds/service_test.go: `svc.orm.On("GetSpec", mock.Anything, rspec.ID, mock.Anything).Return(rspec, nil)`
$DIR/core/services/feeds/service_test.go: `svc.orm.On("GetJobProposal", mock.Anything, jp.ID).Return(jp, nil)`
$DIR/core/services/feeds/service_test.go: `svc.orm.On("GetSpec", mock.Anything, spec.ID).Return(spec, nil)`
$DIR/core/services/feeds/service_test.go: `svc.orm.On("GetJobProposal", mock.Anything, jp.ID).Return(nil, errors.New("Not Found"))`
$DIR/core/services/feeds/service_test.go: `svc.connMgr.On("GetClient", jp.FeedsManagerID).Return(svc.fmsClient, nil)`
$DIR/core/services/feeds/service_test.go: `svc.orm.On("GetSpec", mock.Anything, spec.ID).Return(spec, nil)`
$DIR/core/services/feeds/service_test.go: `svc.orm.On("GetJobProposal", mock.Anything, jp.ID).Return(jp, nil)`
$DIR/core/services/feeds/service_test.go: `svc.jobORM.On("AssertBridgesExist", mock.Anything, mock.IsType(pipeline.Pipeline{})).Return(errors.New("bridges do not exist"))`
$DIR/core/services/feeds/service_test.go: `svc.orm.On("GetSpec", mock.Anything, spec.ID).Return(spec, nil)`
$DIR/core/services/feeds/service_test.go: `svc.orm.On("GetJobProposal", mock.Anything, jp.ID).Return(jp, nil)`
$DIR/core/services/feeds/service_test.go: `svc.connMgr.On("GetClient", jp.FeedsManagerID).Return(nil, errors.New("Not Connected"))`
$DIR/core/services/feeds/service_test.go: `svc.orm.On("GetSpec", mock.Anything, spec.ID).Return(spec, nil)`
$DIR/core/services/feeds/service_test.go: `svc.orm.On("GetJobProposal", mock.Anything, jp.ID).Return(jp, nil)`
$DIR/core/services/feeds/service_test.go: `svc.connMgr.On("GetClient", jp.FeedsManagerID).Return(svc.fmsClient, nil)`
$DIR/core/services/feeds/service_test.go: `svc.jobORM.On("AssertBridgesExist", mock.Anything, mock.IsType(pipeline.Pipeline{})).Return(nil)`
$DIR/core/services/feeds/service_test.go: `svc.jobORM.On("FindJobByExternalJobID", mock.Anything, externalJobID).Return(job.Job{}, sql.ErrNoRows)`
$DIR/core/services/feeds/service_test.go: `svc.jobORM.On("FindOCR2JobIDByAddress", mock.Anything, address, (*common.Hash)(nil)).Return(int32(0), sql.ErrNoRows)`
$DIR/core/services/feeds/service_test.go: `svc.spawner.
On("CreateJob",
mock.Anything,
mock.Anything,
mock.MatchedBy(func(j *job.Job) bool {
return j.Name.String == "LINK / ETH | version 3 | contract 0x0000000000000000000000000000000000000000"
}),
).
Return(errors.New("could not save"))`
$DIR/core/services/feeds/service_test.go: `svc.orm.On("WithDataSource", mock.Anything).Return(feeds.ORM(svc.orm))`
$DIR/core/services/feeds/service_test.go: `svc.jobORM.On("WithDataSource", mock.Anything).Return(job.ORM(svc.jobORM))`
$DIR/core/services/feeds/service_test.go: `svc.orm.On("GetSpec", mock.Anything, spec.ID).Return(spec, nil)`
$DIR/core/services/feeds/service_test.go: `svc.orm.On("GetJobProposal", mock.Anything, jp.ID).Return(jp, nil)`
$DIR/core/services/feeds/service_test.go: `svc.connMgr.On("GetClient", jp.FeedsManagerID).Return(svc.fmsClient, nil)`
$DIR/core/services/feeds/service_test.go: `svc.jobORM.On("AssertBridgesExist", mock.Anything, mock.IsType(pipeline.Pipeline{})).Return(nil)`
$DIR/core/services/feeds/service_test.go: `svc.jobORM.On("FindJobByExternalJobID", mock.Anything, externalJobID).Return(job.Job{}, sql.ErrNoRows)`
$DIR/core/services/feeds/service_test.go: `svc.jobORM.On("FindOCR2JobIDByAddress", mock.Anything, address, (*common.Hash)(nil)).Return(int32(0), sql.ErrNoRows)`
$DIR/core/services/feeds/service_test.go: `svc.spawner.
On("CreateJob",
mock.Anything,
mock.Anything,
mock.MatchedBy(func(j *job.Job) bool {
return j.Name.String == "LINK / ETH | version 3 | contract 0x0000000000000000000000000000000000000000"
}),
).
Run(func(args mock.Arguments) { (args.Get(2).(*job.Job)).ID = 1 }).
Return(nil)`
$DIR/core/services/feeds/service_test.go: `(args.Get(2).(*job.Job)).ID = 1`
$DIR/core/services/feeds/service_test.go: `svc.orm.On("ApproveSpec",
mock.Anything,
spec.ID,
externalJobID,
).Return(errors.New("failure"))`
$DIR/core/services/feeds/service_test.go: `svc.orm.On("WithDataSource", mock.Anything).Return(feeds.ORM(svc.orm))`
$DIR/core/services/feeds/service_test.go: `svc.jobORM.On("WithDataSource", mock.Anything).Return(job.ORM(svc.jobORM))`
$DIR/core/services/feeds/service_test.go: `svc.orm.On("GetSpec", mock.Anything, spec.ID).Return(spec, nil)`
$DIR/core/services/feeds/service_test.go: `svc.orm.On("GetJobProposal", mock.Anything, jp.ID).Return(jp, nil)`
$DIR/core/services/feeds/service_test.go: `svc.connMgr.On("GetClient", jp.FeedsManagerID).Return(svc.fmsClient, nil)`
$DIR/core/services/feeds/service_test.go: `svc.jobORM.On("AssertBridgesExist", mock.Anything, mock.IsType(pipeline.Pipeline{})).Return(nil)`
$DIR/core/services/feeds/service_test.go: `svc.jobORM.On("FindJobByExternalJobID", mock.Anything, externalJobID).Return(job.Job{}, sql.ErrNoRows)`
$DIR/core/services/feeds/service_test.go: `svc.jobORM.On("FindOCR2JobIDByAddress", mock.Anything, address, (*common.Hash)(nil)).Return(int32(0), sql.ErrNoRows)`
$DIR/core/services/feeds/service_test.go: `svc.spawner.
On("CreateJob",
mock.Anything,
mock.Anything,
mock.MatchedBy(func(j *job.Job) bool {
return j.Name.String == "LINK / ETH | version 3 | contract 0x0000000000000000000000000000000000000000"
}),
).
Run(func(args mock.Arguments) { (args.Get(2).(*job.Job)).ID = 1 }).
Return(nil)`
$DIR/core/services/feeds/service_test.go: `(args.Get(2).(*job.Job)).ID = 1`
$DIR/core/services/feeds/service_test.go: `svc.orm.On("ApproveSpec",
mock.Anything,
spec.ID,
externalJobID,
).Return(nil)`
$DIR/core/services/feeds/service_test.go: `svc.fmsClient.On("ApprovedJob",
mock.MatchedBy(func(ctx context.Context) bool { return true }),
&proto.ApprovedJobRequest{
Uuid: jp.RemoteUUID.String(),
Version: int64(spec.Version),
},
).Return(nil, errors.New("failure"))`
$DIR/core/services/feeds/service_test.go: `svc.orm.On("WithDataSource", mock.Anything).Return(feeds.ORM(svc.orm))`
$DIR/core/services/feeds/service_test.go: `svc.jobORM.On("WithDataSource", mock.Anything).Return(job.ORM(svc.jobORM))`
$DIR/core/services/feeds/service_test.go: `t.Run(tc.name, func(t *testing.T) {
svc := setupTestServiceCfg(t, func(c *chainlink.Config, s *chainlink.Secrets) {
c.OCR2.Enabled = testutils.Ptr(true)
if tc.httpTimeout != nil {
c.JobPipeline.HTTPRequest.DefaultTimeout = tc.httpTimeout
}
})
if tc.before != nil {
tc.before(svc)
}
err := svc.ApproveSpec(ctx, tc.id, tc.force)
if tc.wantErr != "" {
require.Error(t, err)
assert.EqualError(t, err, tc.wantErr)
} else {
require.NoError(t, err)
}
})`
$DIR/core/services/feeds/service_test.go: `c.OCR2.Enabled = testutils.Ptr(true)`
$DIR/core/services/feeds/service_test.go: `c.JobPipeline.HTTPRequest.DefaultTimeout = tc.httpTimeout`
$DIR/core/services/feeds/service_test.go: `tc.before(svc)`
$DIR/core/services/feeds/service_test.go: `svc.connMgr.On("GetClient", jp.FeedsManagerID).Return(svc.fmsClient, nil)`
$DIR/core/services/feeds/service_test.go: `svc.orm.On("GetSpec", mock.Anything, spec.ID).Return(spec, nil)`
$DIR/core/services/feeds/service_test.go: `svc.orm.On("GetJobProposal", mock.Anything, jp.ID).Return(jp, nil)`
$DIR/core/services/feeds/service_test.go: `svc.jobORM.On("AssertBridgesExist", mock.Anything, mock.IsType(pipeline.Pipeline{})).Return(nil)`
$DIR/core/services/feeds/service_test.go: `svc.jobORM.On("FindJobByExternalJobID", mock.Anything, externalJobID).Return(job.Job{}, sql.ErrNoRows)`
$DIR/core/services/feeds/service_test.go: `svc.jobORM.On("FindOCR2JobIDByAddress", mock.Anything, address, (*common.Hash)(nil)).Return(int32(0), sql.ErrNoRows)`
$DIR/core/services/feeds/service_test.go: `svc.spawner.
On("CreateJob",
mock.Anything,
mock.Anything,
mock.MatchedBy(func(j *job.Job) bool {
return j.Name.String == "LINK / ETH | version 3 | contract 0x0000000000000000000000000000000000000000"
}),
).
Run(func(args mock.Arguments) { (args.Get(2).(*job.Job)).ID = 1 }).
Return(nil)`
$DIR/core/services/feeds/service_test.go: `(args.Get(2).(*job.Job)).ID = 1`
$DIR/core/services/feeds/service_test.go: `svc.orm.On("ApproveSpec",
mock.Anything,
spec.ID,
externalJobID,
).Return(nil)`
$DIR/core/services/feeds/service_test.go: `svc.fmsClient.On("ApprovedJob",
mock.MatchedBy(func(ctx context.Context) bool { return true }),
&proto.ApprovedJobRequest{
Uuid: jp.RemoteUUID.String(),
Version: int64(spec.Version),
},
).Return(&proto.ApprovedJobResponse{}, nil)`
$DIR/core/services/feeds/service_test.go: `svc.orm.On("CountJobProposalsByStatus", mock.Anything).Return(&feeds.JobProposalCounts{}, nil)`
$DIR/core/services/feeds/service_test.go: `svc.orm.On("WithDataSource", mock.Anything).Return(feeds.ORM(svc.orm))`
$DIR/core/services/feeds/service_test.go: `svc.jobORM.On("WithDataSource", mock.Anything).Return(job.ORM(svc.jobORM))`
$DIR/core/services/feeds/service_test.go: `svc.connMgr.On("GetClient", jp.FeedsManagerID).Return(svc.fmsClient, nil)`
$DIR/core/services/feeds/service_test.go: `svc.orm.On("GetSpec", mock.Anything, cancelledSpec.ID, mock.Anything).Return(cancelledSpec, nil)`
$DIR/core/services/feeds/service_test.go: `svc.orm.On("GetJobProposal", mock.Anything, jp.ID).Return(jp, nil)`
$DIR/core/services/feeds/service_test.go: `svc.orm.On("GetLatestSpec", mock.Anything, cancelledSpec.JobProposalID).Return(cancelledSpec, nil)`
$DIR/core/services/feeds/service_test.go: `svc.jobORM.On("AssertBridgesExist", mock.Anything, mock.IsType(pipeline.Pipeline{})).Return(nil)`
$DIR/core/services/feeds/service_test.go: `svc.jobORM.On("FindJobByExternalJobID", mock.Anything, externalJobID).Return(job.Job{}, sql.ErrNoRows)`
$DIR/core/services/feeds/service_test.go: `svc.jobORM.On("FindOCR2JobIDByAddress", mock.Anything, address, (*common.Hash)(nil)).Return(int32(0), sql.ErrNoRows)`
$DIR/core/services/feeds/service_test.go: `svc.spawner.
On("CreateJob",
mock.Anything,
mock.Anything,
mock.MatchedBy(func(j *job.Job) bool {
return j.Name.String == "LINK / ETH | version 3 | contract 0x0000000000000000000000000000000000000000"
}),
).
Run(func(args mock.Arguments) { (args.Get(2).(*job.Job)).ID = 1 }).
Return(nil)`
$DIR/core/services/feeds/service_test.go: `(args.Get(2).(*job.Job)).ID = 1`
$DIR/core/services/feeds/service_test.go: `svc.orm.On("ApproveSpec",
mock.Anything,
cancelledSpec.ID,
externalJobID,
).Return(nil)`
$DIR/core/services/feeds/service_test.go: `svc.fmsClient.On("ApprovedJob",
mock.MatchedBy(func(ctx context.Context) bool { return true }),
&proto.ApprovedJobRequest{
Uuid: jp.RemoteUUID.String(),
Version: int64(spec.Version),
},
).Return(&proto.ApprovedJobResponse{}, nil)`
$DIR/core/services/feeds/service_test.go: `svc.orm.On("CountJobProposalsByStatus", mock.Anything).Return(&feeds.JobProposalCounts{}, nil)`
$DIR/core/services/feeds/service_test.go: `svc.orm.On("WithDataSource", mock.Anything).Return(feeds.ORM(svc.orm))`
$DIR/core/services/feeds/service_test.go: `svc.jobORM.On("WithDataSource", mock.Anything).Return(job.ORM(svc.jobORM))`
$DIR/core/services/feeds/service_test.go: `svc.orm.On("GetSpec", mock.Anything, cancelledSpec.ID, mock.Anything).Return(cancelledSpec, nil)`
$DIR/core/services/feeds/service_test.go: `svc.orm.On("GetJobProposal", mock.Anything, jp.ID).Return(jp, nil)`
$DIR/core/services/feeds/service_test.go: `svc.orm.On("GetLatestSpec", mock.Anything, cancelledSpec.JobProposalID).Return(&feeds.JobProposalSpec{
ID: 21,
Status: feeds.SpecStatusPending,
JobProposalID: jp.ID,
Version: 2,
Definition: defn,
}, nil)`
$DIR/core/services/feeds/service_test.go: `svc.orm.On("GetSpec", mock.Anything, cancelledSpec.ID, mock.Anything).Return(rejectedSpec, nil)`
$DIR/core/services/feeds/service_test.go: `svc.orm.On("GetJobProposal", mock.Anything, jp.ID).Return(jp, nil)`
$DIR/core/services/feeds/service_test.go: `svc.connMgr.On("GetClient", jp.FeedsManagerID).Return(svc.fmsClient, nil)`
$DIR/core/services/feeds/service_test.go: `svc.orm.On("GetSpec", mock.Anything, spec.ID).Return(spec, nil)`
$DIR/core/services/feeds/service_test.go: `svc.orm.On("GetJobProposal", mock.Anything, jp.ID).Return(jp, nil)`
$DIR/core/services/feeds/service_test.go: `svc.jobORM.On("AssertBridgesExist", mock.Anything, mock.IsType(pipeline.Pipeline{})).Return(nil)`
$DIR/core/services/feeds/service_test.go: `svc.jobORM.On("FindJobByExternalJobID", mock.Anything, externalJobID).Return(job.Job{}, sql.ErrNoRows)`
$DIR/core/services/feeds/service_test.go: `svc.jobORM.On("FindOCR2JobIDByAddress", mock.Anything, address, (*common.Hash)(nil)).Return(j.ID, nil)`
$DIR/core/services/feeds/service_test.go: `svc.orm.On("WithDataSource", mock.Anything).Return(feeds.ORM(svc.orm))`
$DIR/core/services/feeds/service_test.go: `svc.jobORM.On("WithDataSource", mock.Anything).Return(job.ORM(svc.jobORM))`
$DIR/core/services/feeds/service_test.go: `svc.connMgr.On("GetClient", jp.FeedsManagerID).Return(svc.fmsClient, nil)`
$DIR/core/services/feeds/service_test.go: `svc.orm.On("GetSpec", mock.Anything, spec.ID).Return(spec, nil)`
$DIR/core/services/feeds/service_test.go: `svc.orm.On("GetJobProposal", mock.Anything, jp.ID).Return(jp, nil)`
$DIR/core/services/feeds/service_test.go: `svc.jobORM.On("AssertBridgesExist", mock.Anything, mock.IsType(pipeline.Pipeline{})).Return(nil)`
$DIR/core/services/feeds/service_test.go: `svc.orm.EXPECT().GetApprovedSpec(mock.Anything, jp.ID).Return(nil, sql.ErrNoRows)`
$DIR/core/services/feeds/service_test.go: `svc.jobORM.On("FindJobByExternalJobID", mock.Anything, externalJobID).Return(job.Job{}, sql.ErrNoRows)`
$DIR/core/services/feeds/service_test.go: `svc.jobORM.On("FindOCR2JobIDByAddress", mock.Anything, address, (*common.Hash)(nil)).Return(j.ID, nil)`
$DIR/core/services/feeds/service_test.go: `svc.spawner.On("DeleteJob", mock.Anything, mock.Anything, j.ID).Return(nil)`
$DIR/core/services/feeds/service_test.go: `svc.spawner.
On("CreateJob",
mock.Anything,
mock.Anything,
mock.MatchedBy(func(j *job.Job) bool {
return j.Name.String == "LINK / ETH | version 3 | contract 0x0000000000000000000000000000000000000000"
}),
).
Run(func(args mock.Arguments) { (args.Get(2).(*job.Job)).ID = 1 }).
Return(nil)`
$DIR/core/services/feeds/service_test.go: `(args.Get(2).(*job.Job)).ID = 1`
$DIR/core/services/feeds/service_test.go: `svc.orm.On("ApproveSpec",
mock.Anything,
spec.ID,
externalJobID,
).Return(nil)`
$DIR/core/services/feeds/service_test.go: `svc.fmsClient.On("ApprovedJob",
mock.MatchedBy(func(ctx context.Context) bool { return true }),
&proto.ApprovedJobRequest{
Uuid: jp.RemoteUUID.String(),
Version: int64(spec.Version),
},
).Return(&proto.ApprovedJobResponse{}, nil)`
$DIR/core/services/feeds/service_test.go: `svc.orm.On("CountJobProposalsByStatus", mock.Anything).Return(&feeds.JobProposalCounts{}, nil)`
$DIR/core/services/feeds/service_test.go: `svc.orm.On("WithDataSource", mock.Anything).Return(feeds.ORM(svc.orm))`
$DIR/core/services/feeds/service_test.go: `svc.jobORM.On("WithDataSource", mock.Anything).Return(job.ORM(svc.jobORM))`
$DIR/core/services/feeds/service_test.go: `svc.connMgr.On("GetClient", jp.FeedsManagerID).Return(svc.fmsClient, nil)`
$DIR/core/services/feeds/service_test.go: `svc.orm.On("GetSpec", mock.Anything, spec.ID).Return(&feeds.JobProposalSpec{
ID: 20,
Status: feeds.SpecStatusPending,
JobProposalID: jp.ID,
Version: 1,
Definition: fmt.Sprintf(defn2, externalJobID.String(), feedID),
}, nil)`
$DIR/core/services/feeds/service_test.go: `svc.orm.On("GetJobProposal", mock.Anything, jp.ID).Return(jp, nil)`
$DIR/core/services/feeds/service_test.go: `svc.jobORM.On("AssertBridgesExist", mock.Anything, mock.IsType(pipeline.Pipeline{})).Return(nil)`
$DIR/core/services/feeds/service_test.go: `svc.orm.EXPECT().GetApprovedSpec(mock.Anything, jp.ID).Return(nil, sql.ErrNoRows)`
$DIR/core/services/feeds/service_test.go: `svc.jobORM.On("FindJobByExternalJobID", mock.Anything, externalJobID).Return(job.Job{}, sql.ErrNoRows)`
$DIR/core/services/feeds/service_test.go: `svc.jobORM.On("FindOCR2JobIDByAddress", mock.Anything, address, &feedID).Return(j.ID, nil)`
$DIR/core/services/feeds/service_test.go: `svc.spawner.On("DeleteJob", mock.Anything, mock.Anything, j.ID).Return(nil)`
$DIR/core/services/feeds/service_test.go: `svc.spawner.
On("CreateJob",
mock.Anything,
mock.Anything,
mock.MatchedBy(func(j *job.Job) bool {
return j.Name.String == "LINK / ETH | version 3 | contract 0x0000000000000000000000000000000000000000"
}),
).
Run(func(args mock.Arguments) { (args.Get(2).(*job.Job)).ID = 1 }).
Return(nil)`
$DIR/core/services/feeds/service_test.go: `(args.Get(2).(*job.Job)).ID = 1`
$DIR/core/services/feeds/service_test.go: `svc.orm.On("ApproveSpec",
mock.Anything,
spec.ID,
externalJobID,
).Return(nil)`
$DIR/core/services/feeds/service_test.go: `svc.fmsClient.On("ApprovedJob",
mock.MatchedBy(func(ctx context.Context) bool { return true }),
&proto.ApprovedJobRequest{
Uuid: jp.RemoteUUID.String(),
Version: int64(spec.Version),
},
).Return(&proto.ApprovedJobResponse{}, nil)`
$DIR/core/services/feeds/service_test.go: `svc.orm.On("CountJobProposalsByStatus", mock.Anything).Return(&feeds.JobProposalCounts{}, nil)`
$DIR/core/services/feeds/service_test.go: `svc.orm.On("WithDataSource", mock.Anything).Return(feeds.ORM(svc.orm))`
$DIR/core/services/feeds/service_test.go: `svc.jobORM.On("WithDataSource", mock.Anything).Return(job.ORM(svc.jobORM))`
$DIR/core/services/feeds/service_test.go: `svc.connMgr.On("GetClient", jp.FeedsManagerID).Return(svc.fmsClient, nil)`
$DIR/core/services/feeds/service_test.go: `svc.orm.On("GetSpec", mock.Anything, spec.ID).Return(spec, nil)`
$DIR/core/services/feeds/service_test.go: `svc.orm.On("GetJobProposal", mock.Anything, jp.ID).Return(jp, nil)`
$DIR/core/services/feeds/service_test.go: `svc.jobORM.On("AssertBridgesExist", mock.Anything, mock.IsType(pipeline.Pipeline{})).Return(nil)`
$DIR/core/services/feeds/service_test.go: `svc.orm.EXPECT().GetApprovedSpec(mock.Anything, jp.ID).Return(&feeds.JobProposalSpec{ID: 100}, nil)`
$DIR/core/services/feeds/service_test.go: `svc.orm.EXPECT().CancelSpec(mock.Anything, int64(100)).Return(nil)`
$DIR/core/services/feeds/service_test.go: `svc.jobORM.On("FindJobByExternalJobID", mock.Anything, externalJobID).Return(job.Job{}, sql.ErrNoRows)`
$DIR/core/services/feeds/service_test.go: `svc.jobORM.On("FindOCR2JobIDByAddress", mock.Anything, address, (*common.Hash)(nil)).Return(j.ID, nil)`
$DIR/core/services/feeds/service_test.go: `svc.spawner.On("DeleteJob", mock.Anything, mock.Anything, j.ID).Return(nil)`
$DIR/core/services/feeds/service_test.go: `svc.spawner.
On("CreateJob",
mock.Anything,
mock.Anything,
mock.MatchedBy(func(j *job.Job) bool {
return j.Name.String == "LINK / ETH | version 3 | contract 0x0000000000000000000000000000000000000000"
}),
).
Run(func(args mock.Arguments) { (args.Get(2).(*job.Job)).ID = 1 }).
Return(nil)`
$DIR/core/services/feeds/service_test.go: `(args.Get(2).(*job.Job)).ID = 1`
$DIR/core/services/feeds/service_test.go: `svc.orm.On("ApproveSpec",
mock.Anything,
spec.ID,
externalJobID,
).Return(nil)`
$DIR/core/services/feeds/service_test.go: `svc.fmsClient.On("ApprovedJob",
mock.MatchedBy(func(ctx context.Context) bool { return true }),
&proto.ApprovedJobRequest{
Uuid: jp.RemoteUUID.String(),
Version: int64(spec.Version),
},
).Return(&proto.ApprovedJobResponse{}, nil)`
$DIR/core/services/feeds/service_test.go: `svc.orm.On("CountJobProposalsByStatus", mock.Anything).Return(&feeds.JobProposalCounts{}, nil)`
$DIR/core/services/feeds/service_test.go: `svc.orm.On("WithDataSource", mock.Anything).Return(feeds.ORM(svc.orm))`
$DIR/core/services/feeds/service_test.go: `svc.jobORM.On("WithDataSource", mock.Anything).Return(job.ORM(svc.jobORM))`
$DIR/core/services/feeds/service_test.go: `svc.orm.On("GetSpec", mock.Anything, spec.ID).Return(nil, errors.New("Not Found"))`
$DIR/core/services/feeds/service_test.go: `svc.orm.On("GetSpec", mock.Anything, spec.ID).Return(aspec, nil)`
$DIR/core/services/feeds/service_test.go: `svc.orm.On("GetJobProposal", mock.Anything, jp.ID).Return(jp, nil)`
$DIR/core/services/feeds/service_test.go: `svc.orm.On("GetSpec", mock.Anything, rspec.ID).Return(rspec, nil)`
$DIR/core/services/feeds/service_test.go: `svc.orm.On("GetJobProposal", mock.Anything, jp.ID).Return(jp, nil)`
$DIR/core/services/feeds/service_test.go: `svc.orm.On("GetSpec", mock.Anything, spec.ID).Return(spec, nil)`
$DIR/core/services/feeds/service_test.go: `svc.orm.On("GetJobProposal", mock.Anything, jp.ID).Return(nil, errors.New("Not Found"))`
$DIR/core/services/feeds/service_test.go: `svc.connMgr.On("GetClient", jp.FeedsManagerID).Return(svc.fmsClient, nil)`
$DIR/core/services/feeds/service_test.go: `svc.orm.On("GetSpec", mock.Anything, spec.ID).Return(spec, nil)`
$DIR/core/services/feeds/service_test.go: `svc.orm.On("GetJobProposal", mock.Anything, jp.ID).Return(jp, nil)`
$DIR/core/services/feeds/service_test.go: `svc.jobORM.On("AssertBridgesExist", mock.Anything, mock.IsType(pipeline.Pipeline{})).Return(errors.New("bridges do not exist"))`
$DIR/core/services/feeds/service_test.go: `svc.orm.On("GetSpec", mock.Anything, spec.ID).Return(spec, nil)`
$DIR/core/services/feeds/service_test.go: `svc.orm.On("GetJobProposal", mock.Anything, jp.ID).Return(jp, nil)`
$DIR/core/services/feeds/service_test.go: `svc.connMgr.On("GetClient", jp.FeedsManagerID).Return(nil, errors.New("Not Connected"))`
$DIR/core/services/feeds/service_test.go: `svc.orm.On("GetSpec", mock.Anything, spec.ID).Return(spec, nil)`
$DIR/core/services/feeds/service_test.go: `svc.orm.On("GetJobProposal", mock.Anything, jp.ID).Return(jp, nil)`
$DIR/core/services/feeds/service_test.go: `svc.connMgr.On("GetClient", jp.FeedsManagerID).Return(svc.fmsClient, nil)`
$DIR/core/services/feeds/service_test.go: `svc.jobORM.On("AssertBridgesExist", mock.Anything, mock.IsType(pipeline.Pipeline{})).Return(nil)`
$DIR/core/services/feeds/service_test.go: `svc.jobORM.On("FindJobByExternalJobID", mock.Anything, externalJobID).Return(job.Job{}, sql.ErrNoRows)`
$DIR/core/services/feeds/service_test.go: `svc.jobORM.On("FindOCR2JobIDByAddress", mock.Anything, address, (*common.Hash)(nil)).Return(int32(0), sql.ErrNoRows)`
$DIR/core/services/feeds/service_test.go: `svc.spawner.
On("CreateJob",
mock.Anything,
mock.Anything,
mock.MatchedBy(func(j *job.Job) bool {
return j.Name.String == "LINK / ETH | version 3 | contract 0x0000000000000000000000000000000000000000"
}),
).
Return(errors.New("could not save"))`
$DIR/core/services/feeds/service_test.go: `svc.orm.On("WithDataSource", mock.Anything).Return(feeds.ORM(svc.orm))`
$DIR/core/services/feeds/service_test.go: `svc.jobORM.On("WithDataSource", mock.Anything).Return(job.ORM(svc.jobORM))`
$DIR/core/services/feeds/service_test.go: `svc.orm.On("GetSpec", mock.Anything, spec.ID).Return(spec, nil)`
$DIR/core/services/feeds/service_test.go: `svc.orm.On("GetJobProposal", mock.Anything, jp.ID).Return(jp, nil)`
$DIR/core/services/feeds/service_test.go: `svc.connMgr.On("GetClient", jp.FeedsManagerID).Return(svc.fmsClient, nil)`
$DIR/core/services/feeds/service_test.go: `svc.jobORM.On("AssertBridgesExist", mock.Anything, mock.IsType(pipeline.Pipeline{})).Return(nil)`
$DIR/core/services/feeds/service_test.go: `svc.jobORM.On("FindJobByExternalJobID", mock.Anything, externalJobID).Return(job.Job{}, sql.ErrNoRows)`
$DIR/core/services/feeds/service_test.go: `svc.jobORM.On("FindOCR2JobIDByAddress", mock.Anything, address, (*common.Hash)(nil), mock.Anything).Return(int32(0), sql.ErrNoRows)`
$DIR/core/services/feeds/service_test.go: `svc.spawner.
On("CreateJob",
mock.Anything,
mock.Anything,
mock.MatchedBy(func(j *job.Job) bool {
return j.Name.String == "LINK / ETH | version 3 | contract 0x0000000000000000000000000000000000000000"
}),
).
Run(func(args mock.Arguments) { (args.Get(2).(*job.Job)).ID = 1 }).
Return(nil)`
$DIR/core/services/feeds/service_test.go: `(args.Get(2).(*job.Job)).ID = 1`
$DIR/core/services/feeds/service_test.go: `svc.orm.On("ApproveSpec",
mock.Anything,
spec.ID,
externalJobID,
).Return(errors.New("failure"))`
$DIR/core/services/feeds/service_test.go: `svc.orm.On("WithDataSource", mock.Anything).Return(feeds.ORM(svc.orm))`
$DIR/core/services/feeds/service_test.go: `svc.jobORM.On("WithDataSource", mock.Anything).Return(job.ORM(svc.jobORM))`
$DIR/core/services/feeds/service_test.go: `svc.orm.On("GetSpec", mock.Anything, spec.ID).Return(spec, nil)`
$DIR/core/services/feeds/service_test.go: `svc.orm.On("GetJobProposal", mock.Anything, jp.ID).Return(jp, nil)`
$DIR/core/services/feeds/service_test.go: `svc.connMgr.On("GetClient", jp.FeedsManagerID).Return(svc.fmsClient, nil)`
$DIR/core/services/feeds/service_test.go: `svc.jobORM.On("AssertBridgesExist", mock.Anything, mock.IsType(pipeline.Pipeline{})).Return(nil)`
$DIR/core/services/feeds/service_test.go: `svc.jobORM.On("FindJobByExternalJobID", mock.Anything, externalJobID).Return(job.Job{}, sql.ErrNoRows)`
$DIR/core/services/feeds/service_test.go: `svc.jobORM.On("FindOCR2JobIDByAddress", mock.Anything, address, (*common.Hash)(nil)).Return(int32(0), sql.ErrNoRows)`
$DIR/core/services/feeds/service_test.go: `svc.spawner.
On("CreateJob",
mock.Anything,
mock.Anything,
mock.MatchedBy(func(j *job.Job) bool {
return j.Name.String == "LINK / ETH | version 3 | contract 0x0000000000000000000000000000000000000000"
}),
).
Run(func(args mock.Arguments) { (args.Get(2).(*job.Job)).ID = 1 }).
Return(nil)`
$DIR/core/services/feeds/service_test.go: `(args.Get(2).(*job.Job)).ID = 1`
$DIR/core/services/feeds/service_test.go: `svc.orm.On("ApproveSpec",
mock.Anything,
spec.ID,
externalJobID,
).Return(nil)`
$DIR/core/services/feeds/service_test.go: `svc.fmsClient.On("ApprovedJob",
mock.MatchedBy(func(ctx context.Context) bool { return true }),
&proto.ApprovedJobRequest{
Uuid: jp.RemoteUUID.String(),
Version: int64(spec.Version),
},
).Return(nil, errors.New("failure"))`
$DIR/core/services/feeds/service_test.go: `svc.orm.On("WithDataSource", mock.Anything).Return(feeds.ORM(svc.orm))`
$DIR/core/services/feeds/service_test.go: `svc.jobORM.On("WithDataSource", mock.Anything).Return(job.ORM(svc.jobORM))`
$DIR/core/services/feeds/service_test.go: `t.Run(tc.name, func(t *testing.T) {
svc := setupTestServiceCfg(t, func(c *chainlink.Config, s *chainlink.Secrets) {
c.OCR2.Enabled = testutils.Ptr(true)
if tc.httpTimeout != nil {
c.JobPipeline.HTTPRequest.DefaultTimeout = tc.httpTimeout
}
})
if tc.before != nil {
tc.before(svc)
}
err := svc.ApproveSpec(ctx, tc.id, tc.force)
if tc.wantErr != "" {
require.Error(t, err)
assert.EqualError(t, err, tc.wantErr)
} else {
require.NoError(t, err)
}
})`
$DIR/core/services/feeds/service_test.go: `c.OCR2.Enabled = testutils.Ptr(true)`
$DIR/core/services/feeds/service_test.go: `c.JobPipeline.HTTPRequest.DefaultTimeout = tc.httpTimeout`
$DIR/core/services/feeds/service_test.go: `tc.before(svc)`
$DIR/core/services/feeds/service_test.go: `svc.orm.On("GetSpec", mock.Anything, spec.ID).Return(spec, nil)`
$DIR/core/services/feeds/service_test.go: `svc.orm.On("GetJobProposal", mock.Anything, jp.ID).Return(jp, nil)`
$DIR/core/services/feeds/service_test.go: `svc.connMgr.On("GetClient", jp.FeedsManagerID).Return(svc.fmsClient, nil)`
$DIR/core/services/feeds/service_test.go: `svc.orm.On("RejectSpec",
mock.Anything,
spec.ID,
).Return(nil)`
$DIR/core/services/feeds/service_test.go: `svc.fmsClient.On("RejectedJob",
mock.MatchedBy(func(ctx context.Context) bool { return true }),
&proto.RejectedJobRequest{
Uuid: jp.RemoteUUID.String(),
Version: int64(spec.Version),
},
).Return(&proto.RejectedJobResponse{}, nil)`
$DIR/core/services/feeds/service_test.go: `svc.orm.On("CountJobProposalsByStatus", mock.Anything).Return(&feeds.JobProposalCounts{}, nil)`
$DIR/core/services/feeds/service_test.go: `transactCall.Run(func(args mock.Arguments) {
fn := args[1].(func(orm feeds.ORM) error)
transactCall.ReturnArguments = mock.Arguments{fn(svc.orm)}
})`
$DIR/core/services/feeds/service_test.go: `transactCall.ReturnArguments = mock.Arguments{fn(svc.orm)}`
$DIR/core/services/feeds/service_test.go: `svc.orm.On("GetSpec", mock.Anything, spec.ID).Return(nil, errors.New("failure"))`
$DIR/core/services/feeds/service_test.go: `svc.orm.On("GetSpec", mock.Anything, spec.ID).Return(&feeds.JobProposalSpec{
Status: feeds.SpecStatusRejected,
}, nil)`
$DIR/core/services/feeds/service_test.go: `svc.orm.On("GetSpec", mock.Anything, spec.ID).Return(spec, nil)`
$DIR/core/services/feeds/service_test.go: `svc.orm.On("GetJobProposal", mock.Anything, jp.ID).Return(nil, errors.New("failure"))`
$DIR/core/services/feeds/service_test.go: `svc.orm.On("GetSpec", mock.Anything, spec.ID).Return(spec, nil)`
$DIR/core/services/feeds/service_test.go: `svc.orm.On("GetJobProposal", mock.Anything, jp.ID).Return(jp, nil)`
$DIR/core/services/feeds/service_test.go: `svc.connMgr.On("GetClient", jp.FeedsManagerID).Return(nil, errors.New("disconnected"))`
$DIR/core/services/feeds/service_test.go: `svc.orm.On("GetSpec", mock.Anything, spec.ID).Return(spec, nil)`
$DIR/core/services/feeds/service_test.go: `svc.orm.On("GetJobProposal", mock.Anything, jp.ID).Return(jp, nil)`
$DIR/core/services/feeds/service_test.go: `svc.connMgr.On("GetClient", jp.FeedsManagerID).Return(svc.fmsClient, nil)`
$DIR/core/services/feeds/service_test.go: `svc.orm.On("RejectSpec", mock.Anything, mock.Anything).Return(errors.New("failure"))`
$DIR/core/services/feeds/service_test.go: `transactCall.Run(func(args mock.Arguments) {
fn := args[1].(func(orm feeds.ORM) error)
transactCall.ReturnArguments = mock.Arguments{fn(svc.orm)}
})`
$DIR/core/services/feeds/service_test.go: `transactCall.ReturnArguments = mock.Arguments{fn(svc.orm)}`
$DIR/core/services/feeds/service_test.go: `svc.orm.On("GetSpec", mock.Anything, spec.ID).Return(spec, nil)`
$DIR/core/services/feeds/service_test.go: `svc.orm.On("GetJobProposal", mock.Anything, jp.ID).Return(jp, nil)`
$DIR/core/services/feeds/service_test.go: `svc.connMgr.On("GetClient", jp.FeedsManagerID).Return(svc.fmsClient, nil)`
$DIR/core/services/feeds/service_test.go: `svc.orm.On("RejectSpec", mock.Anything, mock.Anything).Return(nil)`
$DIR/core/services/feeds/service_test.go: `svc.fmsClient.
On("RejectedJob",
mock.MatchedBy(func(ctx context.Context) bool { return true }),
&proto.RejectedJobRequest{
Uuid: jp.RemoteUUID.String(),
Version: int64(spec.Version),
}).
Return(nil, errors.New("rpc failure"))`
$DIR/core/services/feeds/service_test.go: `transactCall.Run(func(args mock.Arguments) {
fn := args[1].(func(orm feeds.ORM) error)
transactCall.ReturnArguments = mock.Arguments{fn(svc.orm)}
})`
$DIR/core/services/feeds/service_test.go: `transactCall.ReturnArguments = mock.Arguments{fn(svc.orm)}`
$DIR/core/services/feeds/service_test.go: `t.Run(tc.name, func(t *testing.T) {
t.Parallel()
svc := setupTestService(t)
if tc.before != nil {
tc.before(svc)
}
err := svc.RejectSpec(ctx, spec.ID)
if tc.wantErr != "" {
require.Error(t, err)
assert.Contains(t, err.Error(), tc.wantErr)
} else {
require.NoError(t, err)
}
})`
$DIR/core/services/feeds/service_test.go: `tc.before(svc)`
$DIR/core/services/feeds/service_test.go: `svc.orm.
On("GetSpec", mock.Anything, specID, mock.Anything).
Return(spec, nil)`
$DIR/core/services/feeds/service_test.go: `svc.orm.On("UpdateSpecDefinition", mock.Anything,
specID,
updatedSpec,
mock.Anything,
).Return(nil)`
$DIR/core/services/feeds/service_test.go: `svc.orm.
On("GetSpec", mock.Anything, specID, mock.Anything).
Return(nil, sql.ErrNoRows)`
$DIR/core/services/feeds/service_test.go: `svc.orm.
On("GetSpec", mock.Anything, specID, mock.Anything).
Return(nil, errors.New("other db error"))`
$DIR/core/services/feeds/service_test.go: `svc.orm.
On("GetSpec", mock.Anything, specID, mock.Anything).
Return(spec, nil)`
$DIR/core/services/feeds/service_test.go: `t.Run(tc.name, func(t *testing.T) {
t.Parallel()
svc := setupTestService(t)
if tc.before != nil {
tc.before(svc)
}
err := svc.UpdateSpecDefinition(ctx, tc.specID, updatedSpec)
if tc.wantErr != "" {
assert.EqualError(t, err, tc.wantErr)
} else {
require.NoError(t, err)
}
})`
$DIR/core/services/feeds/service_test.go: `tc.before(svc)`
$DIR/core/services/feeds/service_test.go: `svc.csaKeystore.On("GetAll").Return([]csakey.KeyV2{key}, nil)`
$DIR/core/services/feeds/service_test.go: `svc.orm.On("ListManagers", mock.Anything).Return([]feeds.FeedsManager{mgr}, nil)`
$DIR/core/services/feeds/service_test.go: `svc.connMgr.On("IsConnected", mgr.ID).Return(false)`
$DIR/core/services/feeds/service_test.go: `svc.connMgr.On("Connect", mock.IsType(feeds.ConnectOpts{}))`
$DIR/core/services/feeds/service_test.go: `svc.connMgr.On("Close")`
$DIR/core/services/feeds/service_test.go: `svc.orm.On("CountJobProposalsByStatus", mock.Anything).Return(&feeds.JobProposalCounts{}, nil)`
$DIR/core/services/feeds/service_test.go: `svc.csaKeystore.On("GetAll").Return([]csakey.KeyV2{key}, nil)`
$DIR/core/services/feeds/service_test.go: `svc.orm.On("ListManagers", mock.Anything).Return([]feeds.FeedsManager{}, nil)`
$DIR/core/services/feeds/service_test.go: `svc.connMgr.On("Close")`
$DIR/core/services/feeds/service_test.go: `t.Run(tt.name, func(t *testing.T) {
t.Parallel()
svc := setupTestService(t)
if tt.beforeFunc != nil {
tt.beforeFunc(svc)
}
servicetest.Run(t, svc)
})`
$DIR/core/services/feeds/service_test.go: `tt.beforeFunc(svc)`
$DIR/core/services/feeds/service_test.go: `servicetest.Run(t, svc)`
$DIR/core/services/feeds/service_test.go: `.Decode([]byte(pubKeyHex), pubKey)`
$DIR/core/services/feeds/service_test.go: `.orm.On("CountManagers", mock.Anything)`
$DIR/core/services/feeds/service_test.go: `.Return(int64(0), nil)`
$DIR/core/services/feeds/service_test.go: `.orm.On("CreateManager", mock.Anything, &mgr, mock.Anything)`
$DIR/core/services/feeds/service_test.go: `.
Return(id, nil)`
$DIR/core/services/feeds/service_test.go: `.orm.On("CreateBatchChainConfig", mock.Anything, params.ChainConfigs, mock.Anything)`
$DIR/core/services/feeds/service_test.go: `.
Return([]int64{}, nil)`
$DIR/core/services/feeds/service_test.go: `.csaKeystore.On("GetAll")`
$DIR/core/services/feeds/service_test.go: `.Return([]csakey.KeyV2{key}, nil)`
$DIR/core/services/feeds/service_test.go: `.orm.On("ListManagers", testutils.Context(t))`
$DIR/core/services/feeds/service_test.go: `.Context(t)`
$DIR/core/services/feeds/service_test.go: `.Return([]feeds.FeedsManager{mgr}, nil)`
$DIR/core/services/feeds/service_test.go: `.Maybe()`
$DIR/core/services/feeds/service_test.go: `.orm.On("Transact", mock.Anything, mock.Anything)`
$DIR/core/services/feeds/service_test.go: `.Run(func(args mock.Arguments) {
fn := args[1].(func(orm feeds.ORM) error)
transactCall.ReturnArguments = mock.Arguments{fn(svc.orm)}
})`
$DIR/core/services/feeds/service_test.go: `.connMgr.On("Connect", mock.IsType(feeds.ConnectOpts{}))`
$DIR/core/services/feeds/service_test.go: `.IsType(feeds.ConnectOpts{})`
$DIR/core/services/feeds/service_test.go: `.RegisterManager(testutils.Context(t), params)`
$DIR/core/services/feeds/service_test.go: `.Context(t)`
$DIR/core/services/feeds/service_test.go: `.Context(t)`
$DIR/core/services/feeds/service_test.go: `.orm.On("ListManagers", mock.Anything)`
$DIR/core/services/feeds/service_test.go: `.Return(mgrs, nil)`
$DIR/core/services/feeds/service_test.go: `.connMgr.On("IsConnected", mgr.ID)`
$DIR/core/services/feeds/service_test.go: `.Return(false)`
$DIR/core/services/feeds/service_test.go: `.ListManagers(ctx)`
$DIR/core/services/feeds/service_test.go: `.Context(t)`
$DIR/core/services/feeds/service_test.go: `.orm.On("GetManager", mock.Anything, id)`
$DIR/core/services/feeds/service_test.go: `.
Return(&mgr, nil)`
$DIR/core/services/feeds/service_test.go: `.connMgr.On("IsConnected", mgr.ID)`
$DIR/core/services/feeds/service_test.go: `.Return(false)`
$DIR/core/services/feeds/service_test.go: `.GetManager(ctx, id)`
$DIR/core/services/feeds/service_test.go: `.orm.On("UpdateManager", mock.Anything, mgr, mock.Anything)`
$DIR/core/services/feeds/service_test.go: `.Return(nil)`
$DIR/core/services/feeds/service_test.go: `.csaKeystore.On("GetAll")`
$DIR/core/services/feeds/service_test.go: `.Return([]csakey.KeyV2{key}, nil)`
$DIR/core/services/feeds/service_test.go: `.connMgr.On("Disconnect", mgr.ID)`
$DIR/core/services/feeds/service_test.go: `.Return(nil)`
$DIR/core/services/feeds/service_test.go: `.connMgr.On("Connect", mock.IsType(feeds.ConnectOpts{}))`
$DIR/core/services/feeds/service_test.go: `.IsType(feeds.ConnectOpts{})`
$DIR/core/services/feeds/service_test.go: `.Return(nil)`
$DIR/core/services/feeds/service_test.go: `.UpdateManager(testutils.Context(t), mgr)`
$DIR/core/services/feeds/service_test.go: `.Context(t)`
$DIR/core/services/feeds/service_test.go: `.Context(t)`
$DIR/core/services/feeds/service_test.go: `.orm.On("ListManagersByIDs", mock.Anything, []int64{mgr.ID})`
$DIR/core/services/feeds/service_test.go: `.
Return(mgrs, nil)`
$DIR/core/services/feeds/service_test.go: `.connMgr.On("IsConnected", mgr.ID)`
$DIR/core/services/feeds/service_test.go: `.Return(false)`
$DIR/core/services/feeds/service_test.go: `.ListManagersByIDs(ctx, []int64{mgr.ID})`
$DIR/core/services/feeds/service_test.go: `.Context(t)`
$DIR/core/services/feeds/service_test.go: `.orm.On("CountManagers", mock.Anything)`
$DIR/core/services/feeds/service_test.go: `.
Return(count, nil)`
$DIR/core/services/feeds/service_test.go: `.CountManagers(ctx)`
$DIR/core/services/feeds/service_test.go: `.StringFrom("0x0000000000000000000000000000000000000002")`
$DIR/core/services/feeds/service_test.go: `.orm.On("CreateChainConfig", mock.Anything, cfg)`
$DIR/core/services/feeds/service_test.go: `.Return(int64(1), nil)`
$DIR/core/services/feeds/service_test.go: `.orm.On("GetManager", mock.Anything, mgr.ID)`
$DIR/core/services/feeds/service_test.go: `.Return(&mgr, nil)`
$DIR/core/services/feeds/service_test.go: `.connMgr.On("GetClient", mgr.ID)`
$DIR/core/services/feeds/service_test.go: `.Return(svc.fmsClient, nil)`
$DIR/core/services/feeds/service_test.go: `.orm.On("ListChainConfigsByManagerIDs", mock.Anything, []int64{mgr.ID})`
$DIR/core/services/feeds/service_test.go: `.Return([]feeds.ChainConfig{cfg}, nil)`
$DIR/core/services/feeds/service_test.go: `.fmsClient.On("UpdateNode", mock.Anything, &proto.UpdateNodeRequest{
Version: nodeVersion.Version,
ChainConfigs: []*proto.ChainConfig{
{
Chain: &proto.Chain{
Id: cfg.ChainID,
Type: proto.ChainType_CHAIN_TYPE_EVM,
},
AccountAddress: cfg.AccountAddress,
AccountAddressPublicKey: &cfg.AccountAddressPublicKey.String,
AdminAddress: cfg.AdminAddress,
FluxMonitorConfig: &proto.FluxMonitorConfig{Enabled: true},
Ocr1Config: &proto.OCR1Config{Enabled: false},
Ocr2Config: &proto.OCR2Config{Enabled: false},
},
},
})`
$DIR/core/services/feeds/service_test.go: `.Return(&proto.UpdateNodeResponse{}, nil)`
$DIR/core/services/feeds/service_test.go: `.CreateChainConfig(testutils.Context(t), cfg)`
$DIR/core/services/feeds/service_test.go: `.Context(t)`
$DIR/core/services/feeds/service_test.go: `.CreateChainConfig(testutils.Context(t), cfg)`
$DIR/core/services/feeds/service_test.go: `.Context(t)`
$DIR/core/services/feeds/service_test.go: `.orm.On("GetChainConfig", mock.Anything, cfg.ID)`
$DIR/core/services/feeds/service_test.go: `.Return(&cfg, nil)`
$DIR/core/services/feeds/service_test.go: `.orm.On("DeleteChainConfig", mock.Anything, cfg.ID)`
$DIR/core/services/feeds/service_test.go: `.Return(cfg.ID, nil)`
$DIR/core/services/feeds/service_test.go: `.orm.On("GetManager", mock.Anything, mgr.ID)`
$DIR/core/services/feeds/service_test.go: `.Return(&mgr, nil)`
$DIR/core/services/feeds/service_test.go: `.connMgr.On("GetClient", mgr.ID)`
$DIR/core/services/feeds/service_test.go: `.Return(svc.fmsClient, nil)`
$DIR/core/services/feeds/service_test.go: `.orm.On("ListChainConfigsByManagerIDs", mock.Anything, []int64{mgr.ID})`
$DIR/core/services/feeds/service_test.go: `.Return([]feeds.ChainConfig{}, nil)`
$DIR/core/services/feeds/service_test.go: `.fmsClient.On("UpdateNode", mock.Anything, &proto.UpdateNodeRequest{
Version: nodeVersion.Version,
ChainConfigs: []*proto.ChainConfig{},
})`
$DIR/core/services/feeds/service_test.go: `.Return(&proto.UpdateNodeResponse{}, nil)`
$DIR/core/services/feeds/service_test.go: `.DeleteChainConfig(testutils.Context(t), cfg.ID)`
$DIR/core/services/feeds/service_test.go: `.Context(t)`
$DIR/core/services/feeds/service_test.go: `.Context(t)`
$DIR/core/services/feeds/service_test.go: `.orm.On("ListChainConfigsByManagerIDs", mock.Anything, ids)`
$DIR/core/services/feeds/service_test.go: `.Return([]feeds.ChainConfig{cfg}, nil)`
$DIR/core/services/feeds/service_test.go: `.ListChainConfigsByManagerIDs(ctx, ids)`
$DIR/core/services/feeds/service_test.go: `.StringFrom("0x0000000000000000000000000000000000000002")`
$DIR/core/services/feeds/service_test.go: `.orm.On("UpdateChainConfig", mock.Anything, cfg)`
$DIR/core/services/feeds/service_test.go: `.Return(int64(1), nil)`
$DIR/core/services/feeds/service_test.go: `.orm.On("GetChainConfig", mock.Anything, cfg.ID)`
$DIR/core/services/feeds/service_test.go: `.Return(&cfg, nil)`
$DIR/core/services/feeds/service_test.go: `.connMgr.On("GetClient", mgr.ID)`
$DIR/core/services/feeds/service_test.go: `.Return(svc.fmsClient, nil)`
$DIR/core/services/feeds/service_test.go: `.orm.On("ListChainConfigsByManagerIDs", mock.Anything, []int64{mgr.ID})`
$DIR/core/services/feeds/service_test.go: `.Return([]feeds.ChainConfig{cfg}, nil)`
$DIR/core/services/feeds/service_test.go: `.fmsClient.On("UpdateNode", mock.Anything, &proto.UpdateNodeRequest{
Version: nodeVersion.Version,
ChainConfigs: []*proto.ChainConfig{
{
Chain: &proto.Chain{
Id: cfg.ChainID,
Type: proto.ChainType_CHAIN_TYPE_EVM,
},
AccountAddress: cfg.AccountAddress,
AdminAddress: cfg.AdminAddress,
AccountAddressPublicKey: &cfg.AccountAddressPublicKey.String,
FluxMonitorConfig: &proto.FluxMonitorConfig{Enabled: false},
Ocr1Config: &proto.OCR1Config{Enabled: false},
Ocr2Config: &proto.OCR2Config{Enabled: false},
},
},
})`
$DIR/core/services/feeds/service_test.go: `.Return(&proto.UpdateNodeResponse{}, nil)`
$DIR/core/services/feeds/service_test.go: `.UpdateChainConfig(testutils.Context(t), cfg)`
$DIR/core/services/feeds/service_test.go: `.Context(t)`
$DIR/core/services/feeds/service_test.go: `.UpdateChainConfig(testutils.Context(t), cfg)`
$DIR/core/services/feeds/service_test.go: `.Context(t)`
$DIR/core/services/feeds/service_test.go: `.New()`
$DIR/core/services/feeds/service_test.go: `.New()`
$DIR/core/services/feeds/service_test.go: `.Sprintf(FluxMonitorTestSpecTemplate, nameAndExternalJobID, nameAndExternalJobID)`
$DIR/core/services/feeds/service_test.go: `.StringFrom(nameAndExternalJobID.String())`
$DIR/core/services/feeds/service_test.go: `.String()`
$DIR/core/services/feeds/service_test.go: `.New()`
$DIR/core/services/feeds/service_test.go: `.New()`
$DIR/core/services/feeds/service_test.go: `.Sprintf(OCR1TestSpecTemplate, ocr1NameAndExternalJobID, ocr1NameAndExternalJobID)`
$DIR/core/services/feeds/service_test.go: `.StringFrom(ocr1NameAndExternalJobID.String())`
$DIR/core/services/feeds/service_test.go: `.String()`
$DIR/core/services/feeds/service_test.go: `.New()`
$DIR/core/services/feeds/service_test.go: `.New()`
$DIR/core/services/feeds/service_test.go: `.Sprintf(OCR2TestSpecTemplate, ocr2NameAndExternalJobID, ocr2NameAndExternalJobID)`
$DIR/core/services/feeds/service_test.go: `.StringFrom(ocr2NameAndExternalJobID.String())`
$DIR/core/services/feeds/service_test.go: `.String()`
$DIR/core/services/feeds/service_test.go: `.New()`
$DIR/core/services/feeds/service_test.go: `.New()`
$DIR/core/services/feeds/service_test.go: `.Sprintf(BootstrapTestSpecTemplate, bootstrapName)`
$DIR/core/services/feeds/service_test.go: `.StringFrom(bootstrapName.String())`
$DIR/core/services/feeds/service_test.go: `.String()`
$DIR/core/services/feeds/service_test.go: `.MustNewDuration(1 * time.Second)`
$DIR/core/services/feeds/service_test.go: `.GenerateWorkflowSpec(wfID, wfOwner, wfName, specYaml)`
$DIR/core/services/feeds/service_test.go: `.Toml()`
$DIR/core/services/feeds/service_test.go: `.New()`
$DIR/core/services/feeds/service_test.go: `.StringFrom("test-spec")`
$DIR/core/services/feeds/service_test.go: `.StringFrom("test-spec")`
$DIR/core/services/feeds/service_test.go: `.orm.On("GetJobProposalByRemoteUUID", mock.Anything, argsWF.RemoteUUID)`
$DIR/core/services/feeds/service_test.go: `.Return(new(feeds.JobProposal), sql.ErrNoRows)`
$DIR/core/services/feeds/service_test.go: `.orm.On("UpsertJobProposal", mock.Anything, &jpWF)`
$DIR/core/services/feeds/service_test.go: `.Return(proposalIDWF, nil)`
$DIR/core/services/feeds/service_test.go: `.orm.On("CreateSpec", mock.Anything, proposalSpecWF)`
$DIR/core/services/feeds/service_test.go: `.Return(jobProposalSpecIdWF, nil)`
$DIR/core/services/feeds/service_test.go: `.orm.On("CountJobProposalsByStatus", mock.Anything)`
$DIR/core/services/feeds/service_test.go: `.Return(&feeds.JobProposalCounts{}, nil)`
$DIR/core/services/feeds/service_test.go: `.orm.On("Transact", mock.Anything, mock.Anything)`
$DIR/core/services/feeds/service_test.go: `.Run(func(args mock.Arguments) {
fn := args[1].(func(orm feeds.ORM) error)
transactCall.ReturnArguments = mock.Arguments{fn(svc.orm)}
})`
$DIR/core/services/feeds/service_test.go: `.connMgr.On("GetClient", argsWF.FeedsManagerID)`
$DIR/core/services/feeds/service_test.go: `.Return(svc.fmsClient, nil)`
$DIR/core/services/feeds/service_test.go: `.orm.EXPECT()`
$DIR/core/services/feeds/service_test.go: `.GetSpec(mock.Anything, jobProposalSpecIdWF)`
$DIR/core/services/feeds/service_test.go: `.Return(&autoApprovableProposalSpecWF, nil)`
$DIR/core/services/feeds/service_test.go: `.orm.EXPECT()`
$DIR/core/services/feeds/service_test.go: `.GetJobProposal(mock.Anything, autoApprovableProposalSpecWF.JobProposalID)`
$DIR/core/services/feeds/service_test.go: `.Return(&acceptedjpWF, nil)`
$DIR/core/services/feeds/service_test.go: `.jobORM.On("AssertBridgesExist", mock.Anything, mock.IsType(pipeline.Pipeline{}))`
$DIR/core/services/feeds/service_test.go: `.IsType(pipeline.Pipeline{})`
$DIR/core/services/feeds/service_test.go: `.Return(nil)`
$DIR/core/services/feeds/service_test.go: `.jobORM.On("FindJobByExternalJobID", mock.Anything, mock.Anything)`
$DIR/core/services/feeds/service_test.go: `.Return(job.Job{}, sql.ErrNoRows)`
$DIR/core/services/feeds/service_test.go: `.orm.On("WithDataSource", mock.Anything)`
$DIR/core/services/feeds/service_test.go: `.Return(feeds.ORM(svc.orm))`
$DIR/core/services/feeds/service_test.go: `.ORM(svc.orm)`
$DIR/core/services/feeds/service_test.go: `.jobORM.On("WithDataSource", mock.Anything)`
$DIR/core/services/feeds/service_test.go: `.Return(job.ORM(svc.jobORM))`
$DIR/core/services/feeds/service_test.go: `.ORM(svc.jobORM)`
$DIR/core/services/feeds/service_test.go: `.jobORM.On("FindJobIDByWorkflow", mock.Anything, mock.Anything)`
$DIR/core/services/feeds/service_test.go: `.Return(int32(0), sql.ErrNoRows)`
$DIR/core/services/feeds/service_test.go: `.spawner.
On("CreateJob",
mock.Anything,
mock.Anything,
mock.MatchedBy(func(j *job.Job) bool {
return j.WorkflowSpec.WorkflowOwner == wfOwner
}),
)`
$DIR/core/services/feeds/service_test.go: `.MatchedBy(func(j *job.Job) bool {
return j.WorkflowSpec.WorkflowOwner == wfOwner
})`
$DIR/core/services/feeds/service_test.go: `.
Run(func(args mock.Arguments) { (args.Get(2).(*job.Job)).ID = 1 })`
$DIR/core/services/feeds/service_test.go: `.Get(2)`
$DIR/core/services/feeds/service_test.go: `.
Return(nil)`
$DIR/core/services/feeds/service_test.go: `.orm.On("ApproveSpec",
mock.Anything,
jobProposalSpecIdWF,
mock.IsType(uuid.UUID{}),
)`
$DIR/core/services/feeds/service_test.go: `.IsType(uuid.UUID{})`
$DIR/core/services/feeds/service_test.go: `.Return(nil)`
$DIR/core/services/feeds/service_test.go: `.fmsClient.On("ApprovedJob",
mock.MatchedBy(func(ctx context.Context) bool { return true }),
&proto.ApprovedJobRequest{
Uuid: jpWF.RemoteUUID.String(),
Version: int64(proposalSpecWF.Version),
},
)`
$DIR/core/services/feeds/service_test.go: `.MatchedBy(func(ctx context.Context) bool { return true })`
$DIR/core/services/feeds/service_test.go: `.RemoteUUID.String()`
$DIR/core/services/feeds/service_test.go: `.Return(&proto.ApprovedJobResponse{}, nil)`
$DIR/core/services/feeds/service_test.go: `.orm.On("GetJobProposalByRemoteUUID", mock.Anything, argsWF.RemoteUUID)`
$DIR/core/services/feeds/service_test.go: `.Return(new(feeds.JobProposal), sql.ErrNoRows)`
$DIR/core/services/feeds/service_test.go: `.orm.On("UpsertJobProposal", mock.Anything, &jpWF)`
$DIR/core/services/feeds/service_test.go: `.Return(proposalIDWF, nil)`
$DIR/core/services/feeds/service_test.go: `.orm.On("CreateSpec", mock.Anything, proposalSpecWF)`
$DIR/core/services/feeds/service_test.go: `.Return(jobProposalSpecIdWF, nil)`
$DIR/core/services/feeds/service_test.go: `.orm.On("CountJobProposalsByStatus", mock.Anything)`
$DIR/core/services/feeds/service_test.go: `.Return(&feeds.JobProposalCounts{}, nil)`
$DIR/core/services/feeds/service_test.go: `.orm.On("Transact", mock.Anything, mock.Anything)`
$DIR/core/services/feeds/service_test.go: `.Run(func(args mock.Arguments) {
fn := args[1].(func(orm feeds.ORM) error)
transactCall.ReturnArguments = mock.Arguments{fn(svc.orm)}
})`
$DIR/core/services/feeds/service_test.go: `.connMgr.On("GetClient", argsWF.FeedsManagerID)`
$DIR/core/services/feeds/service_test.go: `.Return(svc.fmsClient, nil)`
$DIR/core/services/feeds/service_test.go: `.orm.EXPECT()`
$DIR/core/services/feeds/service_test.go: `.GetSpec(mock.Anything, jobProposalSpecIdWF)`
$DIR/core/services/feeds/service_test.go: `.Return(&autoApprovableProposalSpecWF, nil)`
$DIR/core/services/feeds/service_test.go: `.orm.EXPECT()`
$DIR/core/services/feeds/service_test.go: `.GetJobProposal(mock.Anything, autoApprovableProposalSpecWF.JobProposalID)`
$DIR/core/services/feeds/service_test.go: `.Return(&acceptedjpWF, nil)`
$DIR/core/services/feeds/service_test.go: `.jobORM.On("AssertBridgesExist", mock.Anything, mock.IsType(pipeline.Pipeline{}))`
$DIR/core/services/feeds/service_test.go: `.IsType(pipeline.Pipeline{})`
$DIR/core/services/feeds/service_test.go: `.Return(nil)`
$DIR/core/services/feeds/service_test.go: `.jobORM.On("FindJobByExternalJobID", mock.Anything, mock.Anything)`
$DIR/core/services/feeds/service_test.go: `.Return(job.Job{}, sql.ErrNoRows)`
$DIR/core/services/feeds/service_test.go: `.orm.On("WithDataSource", mock.Anything)`
$DIR/core/services/feeds/service_test.go: `.Return(feeds.ORM(svc.orm))`
$DIR/core/services/feeds/service_test.go: `.ORM(svc.orm)`
$DIR/core/services/feeds/service_test.go: `.jobORM.On("WithDataSource", mock.Anything)`
$DIR/core/services/feeds/service_test.go: `.Return(job.ORM(svc.jobORM))`
$DIR/core/services/feeds/service_test.go: `.ORM(svc.jobORM)`
$DIR/core/services/feeds/service_test.go: `.jobORM.On("FindJobIDByWorkflow", mock.Anything, mock.Anything)`
$DIR/core/services/feeds/service_test.go: `.Return(jobIDWF, sql.ErrNoRows)`
$DIR/core/services/feeds/service_test.go: `.orm.On("GetApprovedSpec", mock.Anything, acceptedjpWF.ID)`
$DIR/core/services/feeds/service_test.go: `.Return(&autoApprovableProposalSpecWF, nil)`
$DIR/core/services/feeds/service_test.go: `.orm.On("CancelSpec", mock.Anything, autoApprovableProposalSpecWF.ID)`
$DIR/core/services/feeds/service_test.go: `.Return(nil)`
$DIR/core/services/feeds/service_test.go: `.spawner.On("DeleteJob", mock.Anything, mock.Anything, jobIDWF)`
$DIR/core/services/feeds/service_test.go: `.Return(nil)`
$DIR/core/services/feeds/service_test.go: `.spawner.
On("CreateJob",
mock.Anything,
mock.Anything,
mock.MatchedBy(func(j *job.Job) bool {
return j.WorkflowSpec.WorkflowOwner == wfOwner
}),
)`
$DIR/core/services/feeds/service_test.go: `.MatchedBy(func(j *job.Job) bool {
return j.WorkflowSpec.WorkflowOwner == wfOwner
})`
$DIR/core/services/feeds/service_test.go: `.
Run(func(args mock.Arguments) { (args.Get(2).(*job.Job)).ID = 1 })`
$DIR/core/services/feeds/service_test.go: `.Get(2)`
$DIR/core/services/feeds/service_test.go: `.
Return(nil)`
$DIR/core/services/feeds/service_test.go: `.orm.On("ApproveSpec",
mock.Anything,
jobProposalSpecIdWF,
mock.IsType(uuid.UUID{}),
)`
$DIR/core/services/feeds/service_test.go: `.IsType(uuid.UUID{})`
$DIR/core/services/feeds/service_test.go: `.Return(nil)`
$DIR/core/services/feeds/service_test.go: `.fmsClient.On("ApprovedJob",
mock.MatchedBy(func(ctx context.Context) bool { return true }),
&proto.ApprovedJobRequest{
Uuid: jpWF.RemoteUUID.String(),
Version: int64(proposalSpecWF.Version),
},
)`
$DIR/core/services/feeds/service_test.go: `.MatchedBy(func(ctx context.Context) bool { return true })`
$DIR/core/services/feeds/service_test.go: `.RemoteUUID.String()`
$DIR/core/services/feeds/service_test.go: `.Return(&proto.ApprovedJobResponse{}, nil)`
$DIR/core/services/feeds/service_test.go: `.orm.On("GetJobProposalByRemoteUUID", mock.Anything, argsWF.RemoteUUID)`
$DIR/core/services/feeds/service_test.go: `.Return(new(feeds.JobProposal), sql.ErrNoRows)`
$DIR/core/services/feeds/service_test.go: `.orm.On("UpsertJobProposal", mock.Anything, &jpWF)`
$DIR/core/services/feeds/service_test.go: `.Return(proposalIDWF, nil)`
$DIR/core/services/feeds/service_test.go: `.orm.On("CreateSpec", mock.Anything, proposalSpecWF)`
$DIR/core/services/feeds/service_test.go: `.Return(jobProposalSpecIdWF, nil)`
$DIR/core/services/feeds/service_test.go: `.orm.On("Transact", mock.Anything, mock.Anything)`
$DIR/core/services/feeds/service_test.go: `.Run(func(args mock.Arguments) {
fn := args[1].(func(orm feeds.ORM) error)
transactCall.ReturnArguments = mock.Arguments{fn(svc.orm)}
})`
$DIR/core/services/feeds/service_test.go: `.connMgr.On("GetClient", argsWF.FeedsManagerID)`
$DIR/core/services/feeds/service_test.go: `.Return(svc.fmsClient, nil)`
$DIR/core/services/feeds/service_test.go: `.orm.EXPECT()`
$DIR/core/services/feeds/service_test.go: `.GetSpec(mock.Anything, jobProposalSpecIdWF)`
$DIR/core/services/feeds/service_test.go: `.Return(&proposalSpecWF, nil)`
$DIR/core/services/feeds/service_test.go: `.orm.EXPECT()`
$DIR/core/services/feeds/service_test.go: `.GetJobProposal(mock.Anything, proposalSpecWF.JobProposalID)`
$DIR/core/services/feeds/service_test.go: `.Return(&jpWF, nil)`
$DIR/core/services/feeds/service_test.go: `.jobORM.On("AssertBridgesExist", mock.Anything, mock.IsType(pipeline.Pipeline{}))`
$DIR/core/services/feeds/service_test.go: `.IsType(pipeline.Pipeline{})`
$DIR/core/services/feeds/service_test.go: `.Return(nil)`
$DIR/core/services/feeds/service_test.go: `.jobORM.On("FindJobByExternalJobID", mock.Anything, mock.Anything)`
$DIR/core/services/feeds/service_test.go: `.Return(job.Job{}, sql.ErrNoRows)`
$DIR/core/services/feeds/service_test.go: `.orm.On("WithDataSource", mock.Anything)`
$DIR/core/services/feeds/service_test.go: `.Return(feeds.ORM(svc.orm))`
$DIR/core/services/feeds/service_test.go: `.ORM(svc.orm)`
$DIR/core/services/feeds/service_test.go: `.jobORM.On("WithDataSource", mock.Anything)`
$DIR/core/services/feeds/service_test.go: `.Return(job.ORM(svc.jobORM))`
$DIR/core/services/feeds/service_test.go: `.ORM(svc.jobORM)`
$DIR/core/services/feeds/service_test.go: `.jobORM.On("FindJobIDByWorkflow", mock.Anything, mock.Anything)`
$DIR/core/services/feeds/service_test.go: `.Return(int32(0), sql.ErrNoRows)`
$DIR/core/services/feeds/service_test.go: `.spawner.
On("CreateJob",
mock.Anything,
mock.Anything,
mock.MatchedBy(func(j *job.Job) bool {
return j.WorkflowSpec.WorkflowOwner == wfOwner
}),
)`
$DIR/core/services/feeds/service_test.go: `.MatchedBy(func(j *job.Job) bool {
return j.WorkflowSpec.WorkflowOwner == wfOwner
})`
$DIR/core/services/feeds/service_test.go: `.
Run(func(args mock.Arguments) { (args.Get(2).(*job.Job)).ID = 1 })`
$DIR/core/services/feeds/service_test.go: `.Get(2)`
$DIR/core/services/feeds/service_test.go: `.
Return(fmt.Errorf("error creating job"))`
$DIR/core/services/feeds/service_test.go: `.orm.On("GetJobProposalByRemoteUUID", mock.Anything, jpFluxMonitor.RemoteUUID)`
$DIR/core/services/feeds/service_test.go: `.Return(new(feeds.JobProposal), sql.ErrNoRows)`
$DIR/core/services/feeds/service_test.go: `.orm.On("UpsertJobProposal", mock.Anything, &jpFluxMonitor)`
$DIR/core/services/feeds/service_test.go: `.Return(idFluxMonitor, nil)`
$DIR/core/services/feeds/service_test.go: `.orm.On("CreateSpec", mock.Anything, specFluxMonitor)`
$DIR/core/services/feeds/service_test.go: `.Return(int64(100), nil)`
$DIR/core/services/feeds/service_test.go: `.orm.On("CountJobProposalsByStatus", mock.Anything)`
$DIR/core/services/feeds/service_test.go: `.Return(&feeds.JobProposalCounts{}, nil)`
$DIR/core/services/feeds/service_test.go: `.orm.On("Transact", mock.Anything, mock.Anything)`
$DIR/core/services/feeds/service_test.go: `.Run(func(args mock.Arguments) {
fn := args[1].(func(orm feeds.ORM) error)
transactCall.ReturnArguments = mock.Arguments{fn(svc.orm)}
})`
$DIR/core/services/feeds/service_test.go: `.orm.On("GetJobProposalByRemoteUUID", mock.Anything, jpOCR1.RemoteUUID)`
$DIR/core/services/feeds/service_test.go: `.Return(new(feeds.JobProposal), sql.ErrNoRows)`
$DIR/core/services/feeds/service_test.go: `.orm.On("UpsertJobProposal", mock.Anything, &jpOCR1)`
$DIR/core/services/feeds/service_test.go: `.Return(idOCR1, nil)`
$DIR/core/services/feeds/service_test.go: `.orm.On("CreateSpec", mock.Anything, specOCR1)`
$DIR/core/services/feeds/service_test.go: `.Return(int64(100), nil)`
$DIR/core/services/feeds/service_test.go: `.orm.On("CountJobProposalsByStatus", mock.Anything)`
$DIR/core/services/feeds/service_test.go: `.Return(&feeds.JobProposalCounts{}, nil)`
$DIR/core/services/feeds/service_test.go: `.orm.On("Transact", mock.Anything, mock.Anything)`
$DIR/core/services/feeds/service_test.go: `.Run(func(args mock.Arguments) {
fn := args[1].(func(orm feeds.ORM) error)
transactCall.ReturnArguments = mock.Arguments{fn(svc.orm)}
})`
$DIR/core/services/feeds/service_test.go: `.orm.On("GetJobProposalByRemoteUUID", mock.Anything, jpOCR2.RemoteUUID)`
$DIR/core/services/feeds/service_test.go: `.Return(new(feeds.JobProposal), sql.ErrNoRows)`
$DIR/core/services/feeds/service_test.go: `.orm.On("UpsertJobProposal", mock.Anything, &jpOCR2)`
$DIR/core/services/feeds/service_test.go: `.Return(idOCR2, nil)`
$DIR/core/services/feeds/service_test.go: `.orm.On("CreateSpec", mock.Anything, specOCR2)`
$DIR/core/services/feeds/service_test.go: `.Return(int64(100), nil)`
$DIR/core/services/feeds/service_test.go: `.orm.On("CountJobProposalsByStatus", mock.Anything)`
$DIR/core/services/feeds/service_test.go: `.Return(&feeds.JobProposalCounts{}, nil)`
$DIR/core/services/feeds/service_test.go: `.orm.On("Transact", mock.Anything, mock.Anything)`
$DIR/core/services/feeds/service_test.go: `.Run(func(args mock.Arguments) {
fn := args[1].(func(orm feeds.ORM) error)
transactCall.ReturnArguments = mock.Arguments{fn(svc.orm)}
})`
$DIR/core/services/feeds/service_test.go: `.orm.On("GetJobProposalByRemoteUUID", mock.Anything, jpBootstrap.RemoteUUID)`
$DIR/core/services/feeds/service_test.go: `.Return(new(feeds.JobProposal), sql.ErrNoRows)`
$DIR/core/services/feeds/service_test.go: `.orm.On("UpsertJobProposal", mock.Anything, &jpBootstrap)`
$DIR/core/services/feeds/service_test.go: `.Return(idBootstrap, nil)`
$DIR/core/services/feeds/service_test.go: `.orm.On("CreateSpec", mock.Anything, specBootstrap)`
$DIR/core/services/feeds/service_test.go: `.Return(int64(102), nil)`
$DIR/core/services/feeds/service_test.go: `.orm.On("CountJobProposalsByStatus", mock.Anything)`
$DIR/core/services/feeds/service_test.go: `.Return(&feeds.JobProposalCounts{}, nil)`
$DIR/core/services/feeds/service_test.go: `.orm.On("Transact", mock.Anything, mock.Anything)`
$DIR/core/services/feeds/service_test.go: `.Run(func(args mock.Arguments) {
fn := args[1].(func(orm feeds.ORM) error)
transactCall.ReturnArguments = mock.Arguments{fn(svc.orm)}
})`
$DIR/core/services/feeds/service_test.go: `.orm.
On("GetJobProposalByRemoteUUID", mock.Anything, jpFluxMonitor.RemoteUUID)`
$DIR/core/services/feeds/service_test.go: `.
Return(&feeds.JobProposal{
FeedsManagerID: jpFluxMonitor.FeedsManagerID,
RemoteUUID: jpFluxMonitor.RemoteUUID,
Status: feeds.JobProposalStatusPending,
}, nil)`
$DIR/core/services/feeds/service_test.go: `.orm.On("ExistsSpecByJobProposalIDAndVersion", mock.Anything, jpFluxMonitor.ID, argsFluxMonitor.Version)`
$DIR/core/services/feeds/service_test.go: `.Return(false, nil)`
$DIR/core/services/feeds/service_test.go: `.orm.On("UpsertJobProposal", mock.Anything, &jpFluxMonitor)`
$DIR/core/services/feeds/service_test.go: `.Return(idFluxMonitor, nil)`
$DIR/core/services/feeds/service_test.go: `.orm.On("CreateSpec", mock.Anything, specFluxMonitor)`
$DIR/core/services/feeds/service_test.go: `.Return(int64(100), nil)`
$DIR/core/services/feeds/service_test.go: `.orm.On("CountJobProposalsByStatus", mock.Anything)`
$DIR/core/services/feeds/service_test.go: `.Return(&feeds.JobProposalCounts{}, nil)`
$DIR/core/services/feeds/service_test.go: `.orm.On("Transact", mock.Anything, mock.Anything)`
$DIR/core/services/feeds/service_test.go: `.Run(func(args mock.Arguments) {
fn := args[1].(func(orm feeds.ORM) error)
transactCall.ReturnArguments = mock.Arguments{fn(svc.orm)}
})`
$DIR/core/services/feeds/service_test.go: `.orm.
On("GetJobProposalByRemoteUUID", mock.Anything, jpFluxMonitor.RemoteUUID)`
$DIR/core/services/feeds/service_test.go: `.
Return(&feeds.JobProposal{
FeedsManagerID: 2,
RemoteUUID: jpFluxMonitor.RemoteUUID,
}, nil)`
$DIR/core/services/feeds/service_test.go: `.orm.
On("GetJobProposalByRemoteUUID", mock.Anything, jpFluxMonitor.RemoteUUID)`
$DIR/core/services/feeds/service_test.go: `.
Return(&feeds.JobProposal{
FeedsManagerID: jpFluxMonitor.FeedsManagerID,
RemoteUUID: jpFluxMonitor.RemoteUUID,
Status: feeds.JobProposalStatusPending,
}, nil)`
$DIR/core/services/feeds/service_test.go: `.orm.On("ExistsSpecByJobProposalIDAndVersion", mock.Anything, jpFluxMonitor.ID, argsFluxMonitor.Version)`
$DIR/core/services/feeds/service_test.go: `.Return(true, nil)`
$DIR/core/services/feeds/service_test.go: `.orm.On("GetJobProposalByRemoteUUID", mock.Anything, jpFluxMonitor.RemoteUUID)`
$DIR/core/services/feeds/service_test.go: `.Return(new(feeds.JobProposal), sql.ErrNoRows)`
$DIR/core/services/feeds/service_test.go: `.orm.On("UpsertJobProposal", mock.Anything, &jpFluxMonitor)`
$DIR/core/services/feeds/service_test.go: `.Return(int64(0), errors.New("orm error"))`
$DIR/core/services/feeds/service_test.go: `.New("orm error")`
$DIR/core/services/feeds/service_test.go: `.orm.On("Transact", mock.Anything, mock.Anything)`
$DIR/core/services/feeds/service_test.go: `.Run(func(args mock.Arguments) {
fn := args[1].(func(orm feeds.ORM) error)
transactCall.ReturnArguments = mock.Arguments{fn(svc.orm)}
})`
$DIR/core/services/feeds/service_test.go: `.orm.On("GetJobProposalByRemoteUUID", mock.Anything, jpFluxMonitor.RemoteUUID)`
$DIR/core/services/feeds/service_test.go: `.Return(new(feeds.JobProposal), sql.ErrNoRows)`
$DIR/core/services/feeds/service_test.go: `.orm.On("UpsertJobProposal", mock.Anything, &jpFluxMonitor)`
$DIR/core/services/feeds/service_test.go: `.Return(idFluxMonitor, nil)`
$DIR/core/services/feeds/service_test.go: `.orm.On("CreateSpec", mock.Anything, specFluxMonitor)`
$DIR/core/services/feeds/service_test.go: `.Return(int64(0), errors.New("orm error"))`
$DIR/core/services/feeds/service_test.go: `.New("orm error")`
$DIR/core/services/feeds/service_test.go: `.orm.On("Transact", mock.Anything, mock.Anything)`
$DIR/core/services/feeds/service_test.go: `.Run(func(args mock.Arguments) {
fn := args[1].(func(orm feeds.ORM) error)
transactCall.ReturnArguments = mock.Arguments{fn(svc.orm)}
})`
$DIR/core/services/feeds/service_test.go: `.Run(tc.name, func(t *testing.T) {
t.Parallel()
svc := setupTestServiceCfg(t, func(c *chainlink.Config, s *chainlink.Secrets) {
c.JobPipeline.HTTPRequest.DefaultTimeout = &httpTimeout
c.OCR.Enabled = testutils.Ptr(true)
c.OCR2.Enabled = testutils.Ptr(true)
})
if tc.before != nil {
tc.before(svc)
}
actual, err := svc.ProposeJob(testutils.Context(t), tc.args)
if tc.wantErr != "" {
require.Error(t, err)
assert.Contains(t, err.Error(), tc.wantErr)
} else {
require.NoError(t, err)
assert.Equal(t, tc.wantID, actual)
}
})`
$DIR/core/services/feeds/service_test.go: `.Ptr(true)`
$DIR/core/services/feeds/service_test.go: `.Ptr(true)`
$DIR/core/services/feeds/service_test.go: `.before(svc)`
$DIR/core/services/feeds/service_test.go: `.ProposeJob(testutils.Context(t), tc.args)`
$DIR/core/services/feeds/service_test.go: `.Context(t)`
$DIR/core/services/feeds/service_test.go: `.New()`
$DIR/core/services/feeds/service_test.go: `.MustNewDuration(1 * time.Second)`
$DIR/core/services/feeds/service_test.go: `.orm.On("GetJobProposalByRemoteUUID", mock.Anything, approved.RemoteUUID)`
$DIR/core/services/feeds/service_test.go: `.Return(&approved, nil)`
$DIR/core/services/feeds/service_test.go: `.orm.On("DeleteProposal", mock.Anything, approved.ID)`
$DIR/core/services/feeds/service_test.go: `.Return(nil)`
$DIR/core/services/feeds/service_test.go: `.orm.On("CountJobProposalsByStatus", mock.Anything)`
$DIR/core/services/feeds/service_test.go: `.Return(&feeds.JobProposalCounts{}, nil)`
$DIR/core/services/feeds/service_test.go: `.orm.
On("GetJobProposalByRemoteUUID", mock.Anything, approved.RemoteUUID)`
$DIR/core/services/feeds/service_test.go: `.
Return(&feeds.JobProposal{
FeedsManagerID: 2,
RemoteUUID: approved.RemoteUUID,
Status: feeds.JobProposalStatusApproved,
}, nil)`
$DIR/core/services/feeds/service_test.go: `.orm.On("GetJobProposalByRemoteUUID", mock.Anything, approved.RemoteUUID)`
$DIR/core/services/feeds/service_test.go: `.Return(nil, errors.New("orm error"))`
$DIR/core/services/feeds/service_test.go: `.New("orm error")`
$DIR/core/services/feeds/service_test.go: `.orm.On("GetJobProposalByRemoteUUID", mock.Anything, approved.RemoteUUID)`
$DIR/core/services/feeds/service_test.go: `.Return(nil, sql.ErrNoRows)`
$DIR/core/services/feeds/service_test.go: `.orm.On("GetJobProposalByRemoteUUID", mock.Anything, approved.RemoteUUID)`
$DIR/core/services/feeds/service_test.go: `.Return(&approved, nil)`
$DIR/core/services/feeds/service_test.go: `.orm.On("DeleteProposal", mock.Anything, approved.ID)`
$DIR/core/services/feeds/service_test.go: `.Return(errors.New("orm error"))`
$DIR/core/services/feeds/service_test.go: `.New("orm error")`
$DIR/core/services/feeds/service_test.go: `.Run(tc.name, func(t *testing.T) {
t.Parallel()
svc := setupTestServiceCfg(t, func(c *chainlink.Config, s *chainlink.Secrets) {
c.JobPipeline.HTTPRequest.DefaultTimeout = &httpTimeout
})
if tc.before != nil {
tc.before(svc)
}
_, err := svc.DeleteJob(testutils.Context(t), tc.args)
if tc.wantErr != "" {
require.Error(t, err)
assert.Contains(t, err.Error(), tc.wantErr)
} else {
require.NoError(t, err)
}
})`
$DIR/core/services/feeds/service_test.go: `.before(svc)`
$DIR/core/services/feeds/service_test.go: `.DeleteJob(testutils.Context(t), tc.args)`
$DIR/core/services/feeds/service_test.go: `.Context(t)`
$DIR/core/services/feeds/service_test.go: `.New()`
$DIR/core/services/feeds/service_test.go: `.MustNewDuration(1 * time.Second)`
$DIR/core/services/feeds/service_test.go: `.orm.On("GetJobProposalByRemoteUUID", mock.Anything, pendingProposal.RemoteUUID)`
$DIR/core/services/feeds/service_test.go: `.Return(pendingProposal, nil)`
$DIR/core/services/feeds/service_test.go: `.orm.On("GetLatestSpec", mock.Anything, pendingSpec.JobProposalID)`
$DIR/core/services/feeds/service_test.go: `.Return(pendingSpec, nil)`
$DIR/core/services/feeds/service_test.go: `.orm.On("RevokeSpec", mock.Anything, pendingSpec.ID)`
$DIR/core/services/feeds/service_test.go: `.Return(nil)`
$DIR/core/services/feeds/service_test.go: `.orm.On("CountJobProposalsByStatus", mock.Anything)`
$DIR/core/services/feeds/service_test.go: `.Return(&feeds.JobProposalCounts{}, nil)`
$DIR/core/services/feeds/service_test.go: `.orm.On("GetJobProposalByRemoteUUID", mock.Anything, pendingProposal.RemoteUUID)`
$DIR/core/services/feeds/service_test.go: `.Return(pendingProposal, nil)`
$DIR/core/services/feeds/service_test.go: `.orm.On("GetLatestSpec", mock.Anything, pendingSpec.JobProposalID)`
$DIR/core/services/feeds/service_test.go: `.Return(&feeds.JobProposalSpec{
ID: 20,
Status: feeds.SpecStatusCancelled,
JobProposalID: pendingProposal.ID,
Version: 1,
Definition: defn,
}, nil)`
$DIR/core/services/feeds/service_test.go: `.orm.On("RevokeSpec", mock.Anything, pendingSpec.ID)`
$DIR/core/services/feeds/service_test.go: `.Return(nil)`
$DIR/core/services/feeds/service_test.go: `.orm.On("CountJobProposalsByStatus", mock.Anything)`
$DIR/core/services/feeds/service_test.go: `.Return(&feeds.JobProposalCounts{}, nil)`
$DIR/core/services/feeds/service_test.go: `.orm.
On("GetJobProposalByRemoteUUID", mock.Anything, pendingProposal.RemoteUUID)`
$DIR/core/services/feeds/service_test.go: `.
Return(&feeds.JobProposal{
FeedsManagerID: 2,
RemoteUUID: pendingProposal.RemoteUUID,
Status: feeds.JobProposalStatusApproved,
}, nil)`
$DIR/core/services/feeds/service_test.go: `.orm.On("GetJobProposalByRemoteUUID", mock.Anything, pendingProposal.RemoteUUID)`
$DIR/core/services/feeds/service_test.go: `.Return(nil, errors.New("orm error"))`
$DIR/core/services/feeds/service_test.go: `.New("orm error")`
$DIR/core/services/feeds/service_test.go: `.orm.On("GetJobProposalByRemoteUUID", mock.Anything, pendingProposal.RemoteUUID)`
$DIR/core/services/feeds/service_test.go: `.Return(nil, sql.ErrNoRows)`
$DIR/core/services/feeds/service_test.go: `.orm.On("GetJobProposalByRemoteUUID", mock.Anything, pendingProposal.RemoteUUID)`
$DIR/core/services/feeds/service_test.go: `.Return(pendingProposal, nil)`
$DIR/core/services/feeds/service_test.go: `.orm.On("GetLatestSpec", mock.Anything, pendingSpec.JobProposalID)`
$DIR/core/services/feeds/service_test.go: `.Return(nil, sql.ErrNoRows)`
$DIR/core/services/feeds/service_test.go: `.orm.On("GetJobProposalByRemoteUUID", mock.Anything, pendingProposal.RemoteUUID)`
$DIR/core/services/feeds/service_test.go: `.Return(pendingProposal, nil)`
$DIR/core/services/feeds/service_test.go: `.orm.On("GetLatestSpec", mock.Anything, pendingSpec.JobProposalID)`
$DIR/core/services/feeds/service_test.go: `.Return(&feeds.JobProposalSpec{
ID: 20,
Status: feeds.SpecStatusApproved,
JobProposalID: pendingProposal.ID,
Version: 1,
Definition: defn,
}, nil)`
$DIR/core/services/feeds/service_test.go: `.orm.On("GetJobProposalByRemoteUUID", mock.Anything, pendingProposal.RemoteUUID)`
$DIR/core/services/feeds/service_test.go: `.Return(pendingProposal, nil)`
$DIR/core/services/feeds/service_test.go: `.orm.On("GetLatestSpec", mock.Anything, pendingSpec.JobProposalID)`
$DIR/core/services/feeds/service_test.go: `.Return(&feeds.JobProposalSpec{
ID: 20,
Status: feeds.SpecStatusRejected,
JobProposalID: pendingProposal.ID,
Version: 1,
Definition: defn,
}, nil)`
$DIR/core/services/feeds/service_test.go: `.orm.On("GetJobProposalByRemoteUUID", mock.Anything, pendingProposal.RemoteUUID)`
$DIR/core/services/feeds/service_test.go: `.Return(pendingProposal, nil)`
$DIR/core/services/feeds/service_test.go: `.orm.On("GetLatestSpec", mock.Anything, pendingSpec.JobProposalID)`
$DIR/core/services/feeds/service_test.go: `.Return(&feeds.JobProposalSpec{
ID: 20,
Status: feeds.SpecStatusRevoked,
JobProposalID: pendingProposal.ID,
Version: 1,
Definition: defn,
}, nil)`
$DIR/core/services/feeds/service_test.go: `.orm.On("GetJobProposalByRemoteUUID", mock.Anything, pendingProposal.RemoteUUID)`
$DIR/core/services/feeds/service_test.go: `.Return(&feeds.JobProposal{
ID: 1,
FeedsManagerID: 1,
RemoteUUID: remoteUUID,
Status: feeds.JobProposalStatusDeleted,
}, nil)`
$DIR/core/services/feeds/service_test.go: `.orm.On("GetLatestSpec", mock.Anything, pendingSpec.JobProposalID)`
$DIR/core/services/feeds/service_test.go: `.Return(pendingSpec, nil)`
$DIR/core/services/feeds/service_test.go: `.orm.On("GetJobProposalByRemoteUUID", mock.Anything, pendingProposal.RemoteUUID)`
$DIR/core/services/feeds/service_test.go: `.Return(pendingProposal, nil)`
$DIR/core/services/feeds/service_test.go: `.orm.On("GetLatestSpec", mock.Anything, pendingSpec.JobProposalID)`
$DIR/core/services/feeds/service_test.go: `.Return(pendingSpec, nil)`
$DIR/core/services/feeds/service_test.go: `.orm.On("RevokeSpec", mock.Anything, pendingSpec.ID)`
$DIR/core/services/feeds/service_test.go: `.Return(errors.New("orm error"))`
$DIR/core/services/feeds/service_test.go: `.New("orm error")`
$DIR/core/services/feeds/service_test.go: `.Run(tc.name, func(t *testing.T) {
t.Parallel()
svc := setupTestServiceCfg(t, func(c *chainlink.Config, s *chainlink.Secrets) {
c.OCR2.Enabled = testutils.Ptr(true)
c.JobPipeline.HTTPRequest.DefaultTimeout = &httpTimeout
})
if tc.before != nil {
tc.before(svc)
}
_, err := svc.RevokeJob(testutils.Context(t), tc.args)
if tc.wantErr != "" {
require.Error(t, err)
assert.Contains(t, err.Error(), tc.wantErr)
} else {
require.NoError(t, err)
}
})`
$DIR/core/services/feeds/service_test.go: `.Ptr(true)`
$DIR/core/services/feeds/service_test.go: `.before(svc)`
$DIR/core/services/feeds/service_test.go: `.RevokeJob(testutils.Context(t), tc.args)`
$DIR/core/services/feeds/service_test.go: `.Context(t)`
$DIR/core/services/feeds/service_test.go: `.NewP2PKeyV2(t)`
$DIR/core/services/feeds/service_test.go: `.NewV2()`
$DIR/core/services/feeds/service_test.go: `.StringFrom(p2pKey.PeerID().String())`
$DIR/core/services/feeds/service_test.go: `.PeerID()`
$DIR/core/services/feeds/service_test.go: `.String()`
$DIR/core/services/feeds/service_test.go: `.StringFrom(ocrKey.GetID())`
$DIR/core/services/feeds/service_test.go: `.GetID()`
$DIR/core/services/feeds/service_test.go: `.StringFrom(multiaddr)`
$DIR/core/services/feeds/service_test.go: `.StringFrom(forwarderAddr)`
$DIR/core/services/feeds/service_test.go: `.connMgr.On("GetClient", mgr.ID)`
$DIR/core/services/feeds/service_test.go: `.Return(svc.fmsClient, nil)`
$DIR/core/services/feeds/service_test.go: `.orm.On("ListChainConfigsByManagerIDs", mock.Anything, []int64{mgr.ID})`
$DIR/core/services/feeds/service_test.go: `.Return(chainConfigs, nil)`
$DIR/core/services/feeds/service_test.go: `.p2pKeystore.On("Get", p2pKey.PeerID())`
$DIR/core/services/feeds/service_test.go: `.PeerID()`
$DIR/core/services/feeds/service_test.go: `.Return(p2pKey, nil)`
$DIR/core/services/feeds/service_test.go: `.ocr1Keystore.On("Get", ocrKey.GetID())`
$DIR/core/services/feeds/service_test.go: `.GetID()`
$DIR/core/services/feeds/service_test.go: `.Return(ocrKey, nil)`
$DIR/core/services/feeds/service_test.go: `.fmsClient.On("UpdateNode", mock.Anything, &proto.UpdateNodeRequest{
Version: nodeVersion.Version,
ChainConfigs: []*proto.ChainConfig{
{
Chain: &proto.Chain{
Id: ccfg.ChainID,
Type: proto.ChainType_CHAIN_TYPE_EVM,
},
AccountAddress: ccfg.AccountAddress,
AdminAddress: ccfg.AdminAddress,
FluxMonitorConfig: &proto.FluxMonitorConfig{Enabled: true},
Ocr1Config: &proto.OCR1Config{
Enabled: true,
IsBootstrap: ccfg.OCR1Config.IsBootstrap,
P2PKeyBundle: &proto.OCR1Config_P2PKeyBundle{
PeerId: p2pKey.PeerID().String(),
PublicKey: p2pKey.PublicKeyHex(),
},
OcrKeyBundle: &proto.OCR1Config_OCRKeyBundle{
BundleId: ocrKey.GetID(),
ConfigPublicKey: ocrkey.ConfigPublicKey(ocrKey.PublicKeyConfig()).String(),
OffchainPublicKey: ocrKey.OffChainSigning.PublicKey().String(),
OnchainSigningAddress: ocrKey.OnChainSigning.Address().String(),
},
},
Ocr2Config: &proto.OCR2Config{
Enabled: true,
IsBootstrap: ccfg.OCR2Config.IsBootstrap,
Multiaddr: multiaddr,
ForwarderAddress: &forwarderAddr,
Plugins: &proto.OCR2Config_Plugins{
Commit: ccfg.OCR2Config.Plugins.Commit,
Execute: ccfg.OCR2Config.Plugins.Execute,
Median: ccfg.OCR2Config.Plugins.Median,
Mercury: ccfg.OCR2Config.Plugins.Mercury,
Rebalancer: ccfg.OCR2Config.Plugins.Rebalancer,
},
},
},
},
})`
$DIR/core/services/feeds/service_test.go: `.PeerID()`
$DIR/core/services/feeds/service_test.go: `.String()`
$DIR/core/services/feeds/service_test.go: `.PublicKeyHex()`
$DIR/core/services/feeds/service_test.go: `.GetID()`
$DIR/core/services/feeds/service_test.go: `.ConfigPublicKey(ocrKey.PublicKeyConfig())`
$DIR/core/services/feeds/service_test.go: `.PublicKeyConfig()`
$DIR/core/services/feeds/service_test.go: `.String()`
$DIR/core/services/feeds/service_test.go: `.OffChainSigning.PublicKey()`
$DIR/core/services/feeds/service_test.go: `.String()`
$DIR/core/services/feeds/service_test.go: `.OnChainSigning.Address()`
$DIR/core/services/feeds/service_test.go: `.String()`
$DIR/core/services/feeds/service_test.go: `.Return(&proto.UpdateNodeResponse{}, nil)`
$DIR/core/services/feeds/service_test.go: `.SyncNodeInfo(testutils.Context(t), mgr.ID)`
$DIR/core/services/feeds/service_test.go: `.Context(t)`
$DIR/core/services/feeds/service_test.go: `.Context(t)`
$DIR/core/services/feeds/service_test.go: `.orm.On("IsJobManaged", mock.Anything, jobID)`
$DIR/core/services/feeds/service_test.go: `.Return(true, nil)`
$DIR/core/services/feeds/service_test.go: `.IsJobManaged(ctx, jobID)`
$DIR/core/services/feeds/service_test.go: `.Context(t)`
$DIR/core/services/feeds/service_test.go: `.orm.On("ListJobProposals", mock.Anything)`
$DIR/core/services/feeds/service_test.go: `.
Return(jps, nil)`
$DIR/core/services/feeds/service_test.go: `.ListJobProposals(ctx)`
$DIR/core/services/feeds/service_test.go: `.Context(t)`
$DIR/core/services/feeds/service_test.go: `.orm.On("ListJobProposalsByManagersIDs", mock.Anything, fmIDs)`
$DIR/core/services/feeds/service_test.go: `.
Return(jps, nil)`
$DIR/core/services/feeds/service_test.go: `.ListJobProposalsByManagersIDs(ctx, fmIDs)`
$DIR/core/services/feeds/service_test.go: `.Context(t)`
$DIR/core/services/feeds/service_test.go: `.orm.On("GetJobProposal", mock.Anything, id)`
$DIR/core/services/feeds/service_test.go: `.
Return(&ms, nil)`
$DIR/core/services/feeds/service_test.go: `.GetJobProposal(ctx, id)`
$DIR/core/services/feeds/service_test.go: `.New()`
$DIR/core/services/feeds/service_test.go: `.connMgr.On("GetClient", jp.FeedsManagerID)`
$DIR/core/services/feeds/service_test.go: `.Return(svc.fmsClient, nil)`
$DIR/core/services/feeds/service_test.go: `.orm.On("GetSpec", mock.Anything, spec.ID)`
$DIR/core/services/feeds/service_test.go: `.Return(spec, nil)`
$DIR/core/services/feeds/service_test.go: `.orm.On("GetJobProposal", mock.Anything, jp.ID)`
$DIR/core/services/feeds/service_test.go: `.Return(jp, nil)`
$DIR/core/services/feeds/service_test.go: `.orm.On("CancelSpec", mock.Anything, spec.ID)`
$DIR/core/services/feeds/service_test.go: `.Return(nil)`
$DIR/core/services/feeds/service_test.go: `.jobORM.On("FindJobByExternalJobID", mock.Anything, externalJobID)`
$DIR/core/services/feeds/service_test.go: `.Return(j, nil)`
$DIR/core/services/feeds/service_test.go: `.spawner.On("DeleteJob", mock.Anything, mock.Anything, j.ID)`
$DIR/core/services/feeds/service_test.go: `.Return(nil)`
$DIR/core/services/feeds/service_test.go: `.fmsClient.On("CancelledJob",
mock.MatchedBy(func(ctx context.Context) bool { return true }),
&proto.CancelledJobRequest{
Uuid: jp.RemoteUUID.String(),
Version: int64(spec.Version),
},
)`
$DIR/core/services/feeds/service_test.go: `.MatchedBy(func(ctx context.Context) bool { return true })`
$DIR/core/services/feeds/service_test.go: `.RemoteUUID.String()`
$DIR/core/services/feeds/service_test.go: `.Return(&proto.CancelledJobResponse{}, nil)`
$DIR/core/services/feeds/service_test.go: `.orm.On("CountJobProposalsByStatus", mock.Anything)`
$DIR/core/services/feeds/service_test.go: `.Return(&feeds.JobProposalCounts{}, nil)`
$DIR/core/services/feeds/service_test.go: `.orm.On("WithDataSource", mock.Anything)`
$DIR/core/services/feeds/service_test.go: `.Return(feeds.ORM(svc.orm))`
$DIR/core/services/feeds/service_test.go: `.ORM(svc.orm)`
$DIR/core/services/feeds/service_test.go: `.jobORM.On("WithDataSource", mock.Anything)`
$DIR/core/services/feeds/service_test.go: `.Return(job.ORM(svc.jobORM))`
$DIR/core/services/feeds/service_test.go: `.ORM(svc.jobORM)`
$DIR/core/services/feeds/service_test.go: `.connMgr.On("GetClient", jp.FeedsManagerID)`
$DIR/core/services/feeds/service_test.go: `.Return(svc.fmsClient, nil)`
$DIR/core/services/feeds/service_test.go: `.orm.On("GetSpec", mock.Anything, spec.ID)`
$DIR/core/services/feeds/service_test.go: `.Return(spec, nil)`
$DIR/core/services/feeds/service_test.go: `.orm.On("GetJobProposal", mock.Anything, jp.ID)`
$DIR/core/services/feeds/service_test.go: `.Return(&feeds.JobProposal{
ID: 1,
RemoteUUID: externalJobID,
FeedsManagerID: 100,
}, nil)`
$DIR/core/services/feeds/service_test.go: `.orm.On("CancelSpec", mock.Anything, spec.ID)`
$DIR/core/services/feeds/service_test.go: `.Return(nil)`
$DIR/core/services/feeds/service_test.go: `.fmsClient.On("CancelledJob",
mock.MatchedBy(func(ctx context.Context) bool { return true }),
&proto.CancelledJobRequest{
Uuid: jp.RemoteUUID.String(),
Version: int64(spec.Version),
},
)`
$DIR/core/services/feeds/service_test.go: `.MatchedBy(func(ctx context.Context) bool { return true })`
$DIR/core/services/feeds/service_test.go: `.RemoteUUID.String()`
$DIR/core/services/feeds/service_test.go: `.Return(&proto.CancelledJobResponse{}, nil)`
$DIR/core/services/feeds/service_test.go: `.orm.On("CountJobProposalsByStatus", mock.Anything)`
$DIR/core/services/feeds/service_test.go: `.Return(&feeds.JobProposalCounts{}, nil)`
$DIR/core/services/feeds/service_test.go: `.orm.On("WithDataSource", mock.Anything)`
$DIR/core/services/feeds/service_test.go: `.Return(feeds.ORM(svc.orm))`
$DIR/core/services/feeds/service_test.go: `.ORM(svc.orm)`
$DIR/core/services/feeds/service_test.go: `.jobORM.On("WithDataSource", mock.Anything)`
$DIR/core/services/feeds/service_test.go: `.Return(job.ORM(svc.jobORM))`
$DIR/core/services/feeds/service_test.go: `.ORM(svc.jobORM)`
$DIR/core/services/feeds/service_test.go: `.connMgr.On("GetClient", jp.FeedsManagerID)`
$DIR/core/services/feeds/service_test.go: `.Return(svc.fmsClient, nil)`
$DIR/core/services/feeds/service_test.go: `.orm.On("GetSpec", mock.Anything, spec.ID)`
$DIR/core/services/feeds/service_test.go: `.Return(spec, nil)`
$DIR/core/services/feeds/service_test.go: `.orm.On("GetJobProposal", mock.Anything, jp.ID)`
$DIR/core/services/feeds/service_test.go: `.Return(jp, nil)`
$DIR/core/services/feeds/service_test.go: `.orm.On("CancelSpec", mock.Anything, spec.ID)`
$DIR/core/services/feeds/service_test.go: `.Return(nil)`
$DIR/core/services/feeds/service_test.go: `.jobORM.On("FindJobByExternalJobID", mock.Anything, externalJobID)`
$DIR/core/services/feeds/service_test.go: `.Return(job.Job{}, sql.ErrNoRows)`
$DIR/core/services/feeds/service_test.go: `.fmsClient.On("CancelledJob",
mock.MatchedBy(func(ctx context.Context) bool { return true }),
&proto.CancelledJobRequest{
Uuid: jp.RemoteUUID.String(),
Version: int64(spec.Version),
},
)`
$DIR/core/services/feeds/service_test.go: `.MatchedBy(func(ctx context.Context) bool { return true })`
$DIR/core/services/feeds/service_test.go: `.RemoteUUID.String()`
$DIR/core/services/feeds/service_test.go: `.Return(&proto.CancelledJobResponse{}, nil)`
$DIR/core/services/feeds/service_test.go: `.orm.On("CountJobProposalsByStatus", mock.Anything)`
$DIR/core/services/feeds/service_test.go: `.Return(&feeds.JobProposalCounts{}, nil)`
$DIR/core/services/feeds/service_test.go: `.orm.On("WithDataSource", mock.Anything)`
$DIR/core/services/feeds/service_test.go: `.Return(feeds.ORM(svc.orm))`
$DIR/core/services/feeds/service_test.go: `.ORM(svc.orm)`
$DIR/core/services/feeds/service_test.go: `.jobORM.On("WithDataSource", mock.Anything)`
$DIR/core/services/feeds/service_test.go: `.Return(job.ORM(svc.jobORM))`
$DIR/core/services/feeds/service_test.go: `.ORM(svc.jobORM)`
$DIR/core/services/feeds/service_test.go: `.orm.On("GetSpec", mock.Anything, spec.ID)`
$DIR/core/services/feeds/service_test.go: `.Return(nil, errors.New("Not Found"))`
$DIR/core/services/feeds/service_test.go: `.New("Not Found")`
$DIR/core/services/feeds/service_test.go: `.orm.On("GetSpec", mock.Anything, pspec.ID, mock.Anything)`
$DIR/core/services/feeds/service_test.go: `.Return(pspec, nil)`
$DIR/core/services/feeds/service_test.go: `.orm.On("GetSpec", mock.Anything, spec.ID)`
$DIR/core/services/feeds/service_test.go: `.Return(spec, nil)`
$DIR/core/services/feeds/service_test.go: `.orm.On("GetJobProposal", mock.Anything, jp.ID)`
$DIR/core/services/feeds/service_test.go: `.Return(nil, errors.New("Not Found"))`
$DIR/core/services/feeds/service_test.go: `.New("Not Found")`
$DIR/core/services/feeds/service_test.go: `.orm.On("GetSpec", mock.Anything, spec.ID)`
$DIR/core/services/feeds/service_test.go: `.Return(spec, nil)`
$DIR/core/services/feeds/service_test.go: `.orm.On("GetJobProposal", mock.Anything, jp.ID)`
$DIR/core/services/feeds/service_test.go: `.Return(jp, nil)`
$DIR/core/services/feeds/service_test.go: `.connMgr.On("GetClient", jp.FeedsManagerID)`
$DIR/core/services/feeds/service_test.go: `.Return(nil, errors.New("Not Connected"))`
$DIR/core/services/feeds/service_test.go: `.New("Not Connected")`
$DIR/core/services/feeds/service_test.go: `.connMgr.On("GetClient", jp.FeedsManagerID)`
$DIR/core/services/feeds/service_test.go: `.Return(svc.fmsClient, nil)`
$DIR/core/services/feeds/service_test.go: `.orm.On("GetSpec", mock.Anything, spec.ID)`
$DIR/core/services/feeds/service_test.go: `.Return(spec, nil)`
$DIR/core/services/feeds/service_test.go: `.orm.On("GetJobProposal", mock.Anything, jp.ID)`
$DIR/core/services/feeds/service_test.go: `.Return(jp, nil)`
$DIR/core/services/feeds/service_test.go: `.orm.On("CancelSpec", mock.Anything, spec.ID)`
$DIR/core/services/feeds/service_test.go: `.Return(errors.New("failure"))`
$DIR/core/services/feeds/service_test.go: `.New("failure")`
$DIR/core/services/feeds/service_test.go: `.orm.On("WithDataSource", mock.Anything)`
$DIR/core/services/feeds/service_test.go: `.Return(feeds.ORM(svc.orm))`
$DIR/core/services/feeds/service_test.go: `.ORM(svc.orm)`
$DIR/core/services/feeds/service_test.go: `.jobORM.On("WithDataSource", mock.Anything)`
$DIR/core/services/feeds/service_test.go: `.Return(job.ORM(svc.jobORM))`
$DIR/core/services/feeds/service_test.go: `.ORM(svc.jobORM)`
$DIR/core/services/feeds/service_test.go: `.connMgr.On("GetClient", jp.FeedsManagerID)`
$DIR/core/services/feeds/service_test.go: `.Return(svc.fmsClient, nil)`
$DIR/core/services/feeds/service_test.go: `.orm.On("GetSpec", mock.Anything, spec.ID)`
$DIR/core/services/feeds/service_test.go: `.Return(spec, nil)`
$DIR/core/services/feeds/service_test.go: `.orm.On("GetJobProposal", mock.Anything, jp.ID)`
$DIR/core/services/feeds/service_test.go: `.Return(jp, nil)`
$DIR/core/services/feeds/service_test.go: `.orm.On("CancelSpec", mock.Anything, spec.ID)`
$DIR/core/services/feeds/service_test.go: `.Return(nil)`
$DIR/core/services/feeds/service_test.go: `.jobORM.On("FindJobByExternalJobID", mock.Anything, externalJobID)`
$DIR/core/services/feeds/service_test.go: `.Return(job.Job{}, errors.New("failure"))`
$DIR/core/services/feeds/service_test.go: `.New("failure")`
$DIR/core/services/feeds/service_test.go: `.orm.On("WithDataSource", mock.Anything)`
$DIR/core/services/feeds/service_test.go: `.Return(feeds.ORM(svc.orm))`
$DIR/core/services/feeds/service_test.go: `.ORM(svc.orm)`
$DIR/core/services/feeds/service_test.go: `.jobORM.On("WithDataSource", mock.Anything)`
$DIR/core/services/feeds/service_test.go: `.Return(job.ORM(svc.jobORM))`
$DIR/core/services/feeds/service_test.go: `.ORM(svc.jobORM)`
$DIR/core/services/feeds/service_test.go: `.connMgr.On("GetClient", jp.FeedsManagerID)`
$DIR/core/services/feeds/service_test.go: `.Return(svc.fmsClient, nil)`
$DIR/core/services/feeds/service_test.go: `.orm.On("GetSpec", mock.Anything, spec.ID)`
$DIR/core/services/feeds/service_test.go: `.Return(spec, nil)`
$DIR/core/services/feeds/service_test.go: `.orm.On("GetJobProposal", mock.Anything, jp.ID)`
$DIR/core/services/feeds/service_test.go: `.Return(jp, nil)`
$DIR/core/services/feeds/service_test.go: `.orm.On("CancelSpec", mock.Anything, spec.ID)`
$DIR/core/services/feeds/service_test.go: `.Return(nil)`
$DIR/core/services/feeds/service_test.go: `.jobORM.On("FindJobByExternalJobID", mock.Anything, externalJobID)`
$DIR/core/services/feeds/service_test.go: `.Return(j, nil)`
$DIR/core/services/feeds/service_test.go: `.spawner.On("DeleteJob", mock.Anything, mock.Anything, j.ID)`
$DIR/core/services/feeds/service_test.go: `.Return(errors.New("failure"))`
$DIR/core/services/feeds/service_test.go: `.New("failure")`
$DIR/core/services/feeds/service_test.go: `.orm.On("WithDataSource", mock.Anything)`
$DIR/core/services/feeds/service_test.go: `.Return(feeds.ORM(svc.orm))`
$DIR/core/services/feeds/service_test.go: `.ORM(svc.orm)`
$DIR/core/services/feeds/service_test.go: `.jobORM.On("WithDataSource", mock.Anything)`
$DIR/core/services/feeds/service_test.go: `.Return(job.ORM(svc.jobORM))`
$DIR/core/services/feeds/service_test.go: `.ORM(svc.jobORM)`
$DIR/core/services/feeds/service_test.go: `.connMgr.On("GetClient", jp.FeedsManagerID)`
$DIR/core/services/feeds/service_test.go: `.Return(svc.fmsClient, nil)`
$DIR/core/services/feeds/service_test.go: `.orm.On("GetSpec", mock.Anything, spec.ID)`
$DIR/core/services/feeds/service_test.go: `.Return(spec, nil)`
$DIR/core/services/feeds/service_test.go: `.orm.On("GetJobProposal", mock.Anything, jp.ID)`
$DIR/core/services/feeds/service_test.go: `.Return(jp, nil)`
$DIR/core/services/feeds/service_test.go: `.orm.On("CancelSpec", mock.Anything, spec.ID)`
$DIR/core/services/feeds/service_test.go: `.Return(nil)`
$DIR/core/services/feeds/service_test.go: `.jobORM.On("FindJobByExternalJobID", mock.Anything, externalJobID)`
$DIR/core/services/feeds/service_test.go: `.Return(j, nil)`
$DIR/core/services/feeds/service_test.go: `.spawner.On("DeleteJob", mock.Anything, mock.Anything, j.ID)`
$DIR/core/services/feeds/service_test.go: `.Return(nil)`
$DIR/core/services/feeds/service_test.go: `.fmsClient.On("CancelledJob",
mock.MatchedBy(func(ctx context.Context) bool { return true }),
&proto.CancelledJobRequest{
Uuid: jp.RemoteUUID.String(),
Version: int64(spec.Version),
},
)`
$DIR/core/services/feeds/service_test.go: `.MatchedBy(func(ctx context.Context) bool { return true })`
$DIR/core/services/feeds/service_test.go: `.RemoteUUID.String()`
$DIR/core/services/feeds/service_test.go: `.Return(nil, errors.New("failure"))`
$DIR/core/services/feeds/service_test.go: `.New("failure")`
$DIR/core/services/feeds/service_test.go: `.orm.On("WithDataSource", mock.Anything)`
$DIR/core/services/feeds/service_test.go: `.Return(feeds.ORM(svc.orm))`
$DIR/core/services/feeds/service_test.go: `.ORM(svc.orm)`
$DIR/core/services/feeds/service_test.go: `.jobORM.On("WithDataSource", mock.Anything)`
$DIR/core/services/feeds/service_test.go: `.Return(job.ORM(svc.jobORM))`
$DIR/core/services/feeds/service_test.go: `.ORM(svc.jobORM)`
$DIR/core/services/feeds/service_test.go: `.Run(tc.name, func(t *testing.T) {
t.Parallel()
svc := setupTestService(t)
if tc.before != nil {
tc.before(svc)
}
err := svc.CancelSpec(testutils.Context(t), tc.specID)
if tc.wantErr != "" {
require.Error(t, err)
assert.EqualError(t, err, tc.wantErr)
return
}
require.NoError(t, err)
})`
$DIR/core/services/feeds/service_test.go: `.before(svc)`
$DIR/core/services/feeds/service_test.go: `.CancelSpec(testutils.Context(t), tc.specID)`
$DIR/core/services/feeds/service_test.go: `.Context(t)`
$DIR/core/services/feeds/service_test.go: `.Context(t)`
$DIR/core/services/feeds/service_test.go: `.orm.On("GetSpec", mock.Anything, id)`
$DIR/core/services/feeds/service_test.go: `.
Return(&spec, nil)`
$DIR/core/services/feeds/service_test.go: `.GetSpec(ctx, id)`
$DIR/core/services/feeds/service_test.go: `.Context(t)`
$DIR/core/services/feeds/service_test.go: `.orm.On("ListSpecsByJobProposalIDs", mock.Anything, []int64{jpID})`
$DIR/core/services/feeds/service_test.go: `.
Return(specs, nil)`
$DIR/core/services/feeds/service_test.go: `.ListSpecsByJobProposalIDs(ctx, []int64{jpID})`
$DIR/core/services/feeds/service_test.go: `.EIP55AddressFromAddress(common.Address{})`
$DIR/core/services/feeds/service_test.go: `.New()`
$DIR/core/services/feeds/service_test.go: `.Context(t)`
$DIR/core/services/feeds/service_test.go: `.Sprintf(defn, externalJobID)`
$DIR/core/services/feeds/service_test.go: `.Sprintf(defn, uuid.Nil)`
$DIR/core/services/feeds/service_test.go: `.Sprintf(defn, externalJobID)`
$DIR/core/services/feeds/service_test.go: `.Sprintf(defn, externalJobID)`
$DIR/core/services/feeds/service_test.go: `.MustNewDuration(1 * time.Minute)`
$DIR/core/services/feeds/service_test.go: `.connMgr.On("GetClient", jp.FeedsManagerID)`
$DIR/core/services/feeds/service_test.go: `.Return(svc.fmsClient, nil)`
$DIR/core/services/feeds/service_test.go: `.orm.EXPECT()`
$DIR/core/services/feeds/service_test.go: `.GetSpec(mock.Anything, spec.ID)`
$DIR/core/services/feeds/service_test.go: `.Return(spec, nil)`
$DIR/core/services/feeds/service_test.go: `.orm.EXPECT()`
$DIR/core/services/feeds/service_test.go: `.GetJobProposal(mock.Anything, jp.ID)`
$DIR/core/services/feeds/service_test.go: `.Return(jp, nil)`
$DIR/core/services/feeds/service_test.go: `.jobORM.On("AssertBridgesExist", mock.Anything, mock.IsType(pipeline.Pipeline{}))`
$DIR/core/services/feeds/service_test.go: `.IsType(pipeline.Pipeline{})`
$DIR/core/services/feeds/service_test.go: `.Return(nil)`
$DIR/core/services/feeds/service_test.go: `.jobORM.On("FindJobByExternalJobID", mock.Anything, externalJobID)`
$DIR/core/services/feeds/service_test.go: `.Return(job.Job{}, sql.ErrNoRows)`
$DIR/core/services/feeds/service_test.go: `.jobORM.On("FindJobIDByAddress", mock.Anything, address, evmChainID, mock.Anything)`
$DIR/core/services/feeds/service_test.go: `.Return(int32(0), sql.ErrNoRows)`
$DIR/core/services/feeds/service_test.go: `.spawner.
On("CreateJob",
mock.Anything,
mock.Anything,
mock.MatchedBy(func(j *job.Job) bool {
return j.Name.String == "LINK / ETH | version 3 | contract 0x0000000000000000000000000000000000000000"
}),
)`
$DIR/core/services/feeds/service_test.go: `.MatchedBy(func(j *job.Job) bool {
return j.Name.String == "LINK / ETH | version 3 | contract 0x0000000000000000000000000000000000000000"
})`
$DIR/core/services/feeds/service_test.go: `.
Run(func(args mock.Arguments) { (args.Get(2).(*job.Job)).ID = 1 })`
$DIR/core/services/feeds/service_test.go: `.Get(2)`
$DIR/core/services/feeds/service_test.go: `.
Return(nil)`
$DIR/core/services/feeds/service_test.go: `.orm.On("ApproveSpec",
mock.Anything,
spec.ID,
mock.IsType(uuid.UUID{}),
)`
$DIR/core/services/feeds/service_test.go: `.IsType(uuid.UUID{})`
$DIR/core/services/feeds/service_test.go: `.Return(nil)`
$DIR/core/services/feeds/service_test.go: `.fmsClient.On("ApprovedJob",
mock.MatchedBy(func(ctx context.Context) bool { return true }),
&proto.ApprovedJobRequest{
Uuid: jp.RemoteUUID.String(),
Version: int64(spec.Version),
},
)`
$DIR/core/services/feeds/service_test.go: `.MatchedBy(func(ctx context.Context) bool { return true })`
$DIR/core/services/feeds/service_test.go: `.RemoteUUID.String()`
$DIR/core/services/feeds/service_test.go: `.Return(&proto.ApprovedJobResponse{}, nil)`
$DIR/core/services/feeds/service_test.go: `.orm.On("CountJobProposalsByStatus", mock.Anything)`
$DIR/core/services/feeds/service_test.go: `.Return(&feeds.JobProposalCounts{}, nil)`
$DIR/core/services/feeds/service_test.go: `.orm.On("WithDataSource", mock.Anything)`
$DIR/core/services/feeds/service_test.go: `.Return(feeds.ORM(svc.orm))`
$DIR/core/services/feeds/service_test.go: `.ORM(svc.orm)`
$DIR/core/services/feeds/service_test.go: `.jobORM.On("WithDataSource", mock.Anything)`
$DIR/core/services/feeds/service_test.go: `.Return(job.ORM(svc.jobORM))`
$DIR/core/services/feeds/service_test.go: `.ORM(svc.jobORM)`
$DIR/core/services/feeds/service_test.go: `.MustNewDuration(1 * time.Minute)`
$DIR/core/services/feeds/service_test.go: `.connMgr.On("GetClient", jp.FeedsManagerID)`
$DIR/core/services/feeds/service_test.go: `.Return(svc.fmsClient, nil)`
$DIR/core/services/feeds/service_test.go: `.orm.On("GetSpec", mock.Anything, cancelledSpec.ID)`
$DIR/core/services/feeds/service_test.go: `.Return(cancelledSpec, nil)`
$DIR/core/services/feeds/service_test.go: `.orm.On("GetJobProposal", mock.Anything, jp.ID)`
$DIR/core/services/feeds/service_test.go: `.Return(jp, nil)`
$DIR/core/services/feeds/service_test.go: `.orm.On("GetLatestSpec", mock.Anything, cancelledSpec.JobProposalID)`
$DIR/core/services/feeds/service_test.go: `.Return(cancelledSpec, nil)`
$DIR/core/services/feeds/service_test.go: `.jobORM.On("AssertBridgesExist", mock.Anything, mock.IsType(pipeline.Pipeline{}))`
$DIR/core/services/feeds/service_test.go: `.IsType(pipeline.Pipeline{})`
$DIR/core/services/feeds/service_test.go: `.Return(nil)`
$DIR/core/services/feeds/service_test.go: `.jobORM.On("FindJobByExternalJobID", mock.Anything, externalJobID)`
$DIR/core/services/feeds/service_test.go: `.Return(job.Job{}, sql.ErrNoRows)`
$DIR/core/services/feeds/service_test.go: `.jobORM.On("FindJobIDByAddress", mock.Anything, address, evmChainID, mock.Anything)`
$DIR/core/services/feeds/service_test.go: `.Return(int32(0), sql.ErrNoRows)`
$DIR/core/services/feeds/service_test.go: `.spawner.
On("CreateJob",
mock.Anything,
mock.Anything,
mock.MatchedBy(func(j *job.Job) bool {
return j.Name.String == "LINK / ETH | version 3 | contract 0x0000000000000000000000000000000000000000"
}),
)`
$DIR/core/services/feeds/service_test.go: `.MatchedBy(func(j *job.Job) bool {
return j.Name.String == "LINK / ETH | version 3 | contract 0x0000000000000000000000000000000000000000"
})`
$DIR/core/services/feeds/service_test.go: `.
Run(func(args mock.Arguments) { (args.Get(2).(*job.Job)).ID = 1 })`
$DIR/core/services/feeds/service_test.go: `.Get(2)`
$DIR/core/services/feeds/service_test.go: `.
Return(nil)`
$DIR/core/services/feeds/service_test.go: `.orm.On("ApproveSpec",
mock.Anything,
cancelledSpec.ID,
externalJobID,
)`
$DIR/core/services/feeds/service_test.go: `.Return(nil)`
$DIR/core/services/feeds/service_test.go: `.fmsClient.On("ApprovedJob",
mock.MatchedBy(func(ctx context.Context) bool { return true }),
&proto.ApprovedJobRequest{
Uuid: jp.RemoteUUID.String(),
Version: int64(spec.Version),
},
)`
$DIR/core/services/feeds/service_test.go: `.MatchedBy(func(ctx context.Context) bool { return true })`
$DIR/core/services/feeds/service_test.go: `.RemoteUUID.String()`
$DIR/core/services/feeds/service_test.go: `.Return(&proto.ApprovedJobResponse{}, nil)`
$DIR/core/services/feeds/service_test.go: `.orm.On("CountJobProposalsByStatus", mock.Anything)`
$DIR/core/services/feeds/service_test.go: `.Return(&feeds.JobProposalCounts{}, nil)`
$DIR/core/services/feeds/service_test.go: `.orm.On("WithDataSource", mock.Anything)`
$DIR/core/services/feeds/service_test.go: `.Return(feeds.ORM(svc.orm))`
$DIR/core/services/feeds/service_test.go: `.ORM(svc.orm)`
$DIR/core/services/feeds/service_test.go: `.jobORM.On("WithDataSource", mock.Anything)`
$DIR/core/services/feeds/service_test.go: `.Return(job.ORM(svc.jobORM))`
$DIR/core/services/feeds/service_test.go: `.ORM(svc.jobORM)`
$DIR/core/services/feeds/service_test.go: `.MustNewDuration(1 * time.Minute)`
$DIR/core/services/feeds/service_test.go: `.connMgr.On("GetClient", jp.FeedsManagerID)`
$DIR/core/services/feeds/service_test.go: `.Return(svc.fmsClient, nil)`
$DIR/core/services/feeds/service_test.go: `.orm.EXPECT()`
$DIR/core/services/feeds/service_test.go: `.GetSpec(mock.Anything, spec.ID)`
$DIR/core/services/feeds/service_test.go: `.Return(spec2, nil)`
$DIR/core/services/feeds/service_test.go: `.orm.EXPECT()`
$DIR/core/services/feeds/service_test.go: `.GetJobProposal(mock.Anything, jp.ID)`
$DIR/core/services/feeds/service_test.go: `.Return(jp, nil)`
$DIR/core/services/feeds/service_test.go: `.orm.On("GetSpec", mock.Anything, spec.ID)`
$DIR/core/services/feeds/service_test.go: `.Return(spec, nil)`
$DIR/core/services/feeds/service_test.go: `.orm.On("GetJobProposal", mock.Anything, jp.ID)`
$DIR/core/services/feeds/service_test.go: `.Return(&feeds.JobProposal{
ID: 1,
Status: feeds.JobProposalStatusRevoked,
}, nil)`
$DIR/core/services/feeds/service_test.go: `.orm.On("GetSpec", mock.Anything, spec.ID)`
$DIR/core/services/feeds/service_test.go: `.Return(spec, nil)`
$DIR/core/services/feeds/service_test.go: `.orm.On("GetJobProposal", mock.Anything, jp.ID)`
$DIR/core/services/feeds/service_test.go: `.Return(&feeds.JobProposal{
ID: jp.ID,
Status: feeds.JobProposalStatusDeleted,
}, nil)`
$DIR/core/services/feeds/service_test.go: `.orm.On("GetSpec", mock.Anything, aspec.ID, mock.Anything)`
$DIR/core/services/feeds/service_test.go: `.Return(aspec, nil)`
$DIR/core/services/feeds/service_test.go: `.orm.On("GetJobProposal", mock.Anything, jp.ID)`
$DIR/core/services/feeds/service_test.go: `.Return(jp, nil)`
$DIR/core/services/feeds/service_test.go: `.orm.On("GetSpec", mock.Anything, cancelledSpec.ID, mock.Anything)`
$DIR/core/services/feeds/service_test.go: `.Return(rejectedSpec, nil)`
$DIR/core/services/feeds/service_test.go: `.orm.On("GetJobProposal", mock.Anything, jp.ID)`
$DIR/core/services/feeds/service_test.go: `.Return(jp, nil)`
$DIR/core/services/feeds/service_test.go: `.orm.On("GetSpec", mock.Anything, cancelledSpec.ID, mock.Anything)`
$DIR/core/services/feeds/service_test.go: `.Return(cancelledSpec, nil)`
$DIR/core/services/feeds/service_test.go: `.orm.On("GetJobProposal", mock.Anything, jp.ID)`
$DIR/core/services/feeds/service_test.go: `.Return(jp, nil)`
$DIR/core/services/feeds/service_test.go: `.orm.On("GetLatestSpec", mock.Anything, cancelledSpec.JobProposalID)`
$DIR/core/services/feeds/service_test.go: `.Return(&feeds.JobProposalSpec{
ID: 21,
Status: feeds.SpecStatusPending,
JobProposalID: jp.ID,
Version: 2,
Definition: defn,
}, nil)`
$DIR/core/services/feeds/service_test.go: `.MustNewDuration(1 * time.Minute)`
$DIR/core/services/feeds/service_test.go: `.connMgr.On("GetClient", jp.FeedsManagerID)`
$DIR/core/services/feeds/service_test.go: `.Return(svc.fmsClient, nil)`
$DIR/core/services/feeds/service_test.go: `.orm.On("GetSpec", mock.Anything, spec.ID)`
$DIR/core/services/feeds/service_test.go: `.Return(spec, nil)`
$DIR/core/services/feeds/service_test.go: `.orm.On("GetJobProposal", mock.Anything, jp.ID)`
$DIR/core/services/feeds/service_test.go: `.Return(jp, nil)`
$DIR/core/services/feeds/service_test.go: `.jobORM.On("AssertBridgesExist", mock.Anything, mock.IsType(pipeline.Pipeline{}))`
$DIR/core/services/feeds/service_test.go: `.IsType(pipeline.Pipeline{})`
$DIR/core/services/feeds/service_test.go: `.Return(nil)`
$DIR/core/services/feeds/service_test.go: `.jobORM.On("FindJobByExternalJobID", mock.Anything, externalJobID)`
$DIR/core/services/feeds/service_test.go: `.Return(j, nil)`
$DIR/core/services/feeds/service_test.go: `.orm.On("WithDataSource", mock.Anything)`
$DIR/core/services/feeds/service_test.go: `.Return(feeds.ORM(svc.orm))`
$DIR/core/services/feeds/service_test.go: `.ORM(svc.orm)`
$DIR/core/services/feeds/service_test.go: `.jobORM.On("WithDataSource", mock.Anything)`
$DIR/core/services/feeds/service_test.go: `.Return(job.ORM(svc.jobORM))`
$DIR/core/services/feeds/service_test.go: `.ORM(svc.jobORM)`
$DIR/core/services/feeds/service_test.go: `.MustNewDuration(1 * time.Minute)`
$DIR/core/services/feeds/service_test.go: `.connMgr.On("GetClient", jp.FeedsManagerID)`
$DIR/core/services/feeds/service_test.go: `.Return(svc.fmsClient, nil)`
$DIR/core/services/feeds/service_test.go: `.orm.On("GetSpec", mock.Anything, spec.ID)`
$DIR/core/services/feeds/service_test.go: `.Return(spec, nil)`
$DIR/core/services/feeds/service_test.go: `.orm.On("GetJobProposal", mock.Anything, jp.ID)`
$DIR/core/services/feeds/service_test.go: `.Return(jp, nil)`
$DIR/core/services/feeds/service_test.go: `.jobORM.On("AssertBridgesExist", mock.Anything, mock.IsType(pipeline.Pipeline{}))`
$DIR/core/services/feeds/service_test.go: `.IsType(pipeline.Pipeline{})`
$DIR/core/services/feeds/service_test.go: `.Return(nil)`
$DIR/core/services/feeds/service_test.go: `.jobORM.On("FindJobByExternalJobID", mock.Anything, externalJobID)`
$DIR/core/services/feeds/service_test.go: `.Return(job.Job{}, sql.ErrNoRows)`
$DIR/core/services/feeds/service_test.go: `.jobORM.On("FindJobIDByAddress", mock.Anything, address, evmChainID, mock.Anything)`
$DIR/core/services/feeds/service_test.go: `.Return(j.ID, nil)`
$DIR/core/services/feeds/service_test.go: `.orm.On("WithDataSource", mock.Anything)`
$DIR/core/services/feeds/service_test.go: `.Return(feeds.ORM(svc.orm))`
$DIR/core/services/feeds/service_test.go: `.ORM(svc.orm)`
$DIR/core/services/feeds/service_test.go: `.jobORM.On("WithDataSource", mock.Anything)`
$DIR/core/services/feeds/service_test.go: `.Return(job.ORM(svc.jobORM))`
$DIR/core/services/feeds/service_test.go: `.ORM(svc.jobORM)`
$DIR/core/services/feeds/service_test.go: `.MustNewDuration(1 * time.Minute)`
$DIR/core/services/feeds/service_test.go: `.connMgr.On("GetClient", jp.FeedsManagerID)`
$DIR/core/services/feeds/service_test.go: `.Return(svc.fmsClient, nil)`
$DIR/core/services/feeds/service_test.go: `.orm.EXPECT()`
$DIR/core/services/feeds/service_test.go: `.GetSpec(mock.Anything, spec.ID)`
$DIR/core/services/feeds/service_test.go: `.Return(spec, nil)`
$DIR/core/services/feeds/service_test.go: `.orm.EXPECT()`
$DIR/core/services/feeds/service_test.go: `.GetJobProposal(mock.Anything, jp.ID)`
$DIR/core/services/feeds/service_test.go: `.Return(jp, nil)`
$DIR/core/services/feeds/service_test.go: `.jobORM.On("AssertBridgesExist", mock.Anything, mock.IsType(pipeline.Pipeline{}))`
$DIR/core/services/feeds/service_test.go: `.IsType(pipeline.Pipeline{})`
$DIR/core/services/feeds/service_test.go: `.Return(nil)`
$DIR/core/services/feeds/service_test.go: `.jobORM.On("FindJobByExternalJobID", mock.Anything, externalJobID)`
$DIR/core/services/feeds/service_test.go: `.Return(j, nil)`
$DIR/core/services/feeds/service_test.go: `.orm.EXPECT()`
$DIR/core/services/feeds/service_test.go: `.GetApprovedSpec(mock.Anything, jp.ID)`
$DIR/core/services/feeds/service_test.go: `.Return(nil, sql.ErrNoRows)`
$DIR/core/services/feeds/service_test.go: `.spawner.On("DeleteJob", mock.Anything, mock.Anything, j.ID)`
$DIR/core/services/feeds/service_test.go: `.Return(nil)`
$DIR/core/services/feeds/service_test.go: `.spawner.
On("CreateJob",
mock.Anything,
mock.Anything,
mock.MatchedBy(func(j *job.Job) bool {
return j.Name.String == "LINK / ETH | version 3 | contract 0x0000000000000000000000000000000000000000"
}),
)`
$DIR/core/services/feeds/service_test.go: `.MatchedBy(func(j *job.Job) bool {
return j.Name.String == "LINK / ETH | version 3 | contract 0x0000000000000000000000000000000000000000"
})`
$DIR/core/services/feeds/service_test.go: `.
Run(func(args mock.Arguments) { (args.Get(2).(*job.Job)).ID = 1 })`
$DIR/core/services/feeds/service_test.go: `.Get(2)`
$DIR/core/services/feeds/service_test.go: `.
Return(nil)`
$DIR/core/services/feeds/service_test.go: `.orm.On("ApproveSpec",
mock.Anything,
spec.ID,
externalJobID,
)`
$DIR/core/services/feeds/service_test.go: `.Return(nil)`
$DIR/core/services/feeds/service_test.go: `.fmsClient.On("ApprovedJob",
mock.MatchedBy(func(ctx context.Context) bool { return true }),
&proto.ApprovedJobRequest{
Uuid: jp.RemoteUUID.String(),
Version: int64(spec.Version),
},
)`
$DIR/core/services/feeds/service_test.go: `.MatchedBy(func(ctx context.Context) bool { return true })`
$DIR/core/services/feeds/service_test.go: `.RemoteUUID.String()`
$DIR/core/services/feeds/service_test.go: `.Return(&proto.ApprovedJobResponse{}, nil)`
$DIR/core/services/feeds/service_test.go: `.orm.On("CountJobProposalsByStatus", mock.Anything)`
$DIR/core/services/feeds/service_test.go: `.Return(&feeds.JobProposalCounts{}, nil)`
$DIR/core/services/feeds/service_test.go: `.orm.On("WithDataSource", mock.Anything)`
$DIR/core/services/feeds/service_test.go: `.Return(feeds.ORM(svc.orm))`
$DIR/core/services/feeds/service_test.go: `.ORM(svc.orm)`
$DIR/core/services/feeds/service_test.go: `.jobORM.On("WithDataSource", mock.Anything)`
$DIR/core/services/feeds/service_test.go: `.Return(job.ORM(svc.jobORM))`
$DIR/core/services/feeds/service_test.go: `.ORM(svc.jobORM)`
$DIR/core/services/feeds/service_test.go: `.MustNewDuration(1 * time.Minute)`
$DIR/core/services/feeds/service_test.go: `.connMgr.On("GetClient", jp.FeedsManagerID)`
$DIR/core/services/feeds/service_test.go: `.Return(svc.fmsClient, nil)`
$DIR/core/services/feeds/service_test.go: `.orm.EXPECT()`
$DIR/core/services/feeds/service_test.go: `.GetSpec(mock.Anything, spec.ID)`
$DIR/core/services/feeds/service_test.go: `.Return(spec, nil)`
$DIR/core/services/feeds/service_test.go: `.orm.EXPECT()`
$DIR/core/services/feeds/service_test.go: `.GetJobProposal(mock.Anything, jp.ID)`
$DIR/core/services/feeds/service_test.go: `.Return(jp, nil)`
$DIR/core/services/feeds/service_test.go: `.jobORM.On("AssertBridgesExist", mock.Anything, mock.IsType(pipeline.Pipeline{}))`
$DIR/core/services/feeds/service_test.go: `.IsType(pipeline.Pipeline{})`
$DIR/core/services/feeds/service_test.go: `.Return(nil)`
$DIR/core/services/feeds/service_test.go: `.jobORM.On("FindJobByExternalJobID", mock.Anything, externalJobID)`
$DIR/core/services/feeds/service_test.go: `.Return(job.Job{}, sql.ErrNoRows)`
$DIR/core/services/feeds/service_test.go: `.jobORM.On("FindJobIDByAddress", mock.Anything, address, evmChainID, mock.Anything)`
$DIR/core/services/feeds/service_test.go: `.Return(j.ID, nil)`
$DIR/core/services/feeds/service_test.go: `.orm.EXPECT()`
$DIR/core/services/feeds/service_test.go: `.GetApprovedSpec(mock.Anything, jp.ID)`
$DIR/core/services/feeds/service_test.go: `.Return(nil, sql.ErrNoRows)`
$DIR/core/services/feeds/service_test.go: `.spawner.On("DeleteJob", mock.Anything, mock.Anything, j.ID)`
$DIR/core/services/feeds/service_test.go: `.Return(nil)`
$DIR/core/services/feeds/service_test.go: `.spawner.
On("CreateJob",
mock.Anything,
mock.Anything,
mock.MatchedBy(func(j *job.Job) bool {
return j.Name.String == "LINK / ETH | version 3 | contract 0x0000000000000000000000000000000000000000"
}),
)`
$DIR/core/services/feeds/service_test.go: `.MatchedBy(func(j *job.Job) bool {
return j.Name.String == "LINK / ETH | version 3 | contract 0x0000000000000000000000000000000000000000"
})`
$DIR/core/services/feeds/service_test.go: `.
Run(func(args mock.Arguments) { (args.Get(2).(*job.Job)).ID = 1 })`
$DIR/core/services/feeds/service_test.go: `.Get(2)`
$DIR/core/services/feeds/service_test.go: `.
Return(nil)`
$DIR/core/services/feeds/service_test.go: `.orm.On("ApproveSpec",
mock.Anything,
spec.ID,
externalJobID,
)`
$DIR/core/services/feeds/service_test.go: `.Return(nil)`
$DIR/core/services/feeds/service_test.go: `.fmsClient.On("ApprovedJob",
mock.MatchedBy(func(ctx context.Context) bool { return true }),
&proto.ApprovedJobRequest{
Uuid: jp.RemoteUUID.String(),
Version: int64(spec.Version),
},
)`
$DIR/core/services/feeds/service_test.go: `.MatchedBy(func(ctx context.Context) bool { return true })`
$DIR/core/services/feeds/service_test.go: `.RemoteUUID.String()`
$DIR/core/services/feeds/service_test.go: `.Return(&proto.ApprovedJobResponse{}, nil)`
$DIR/core/services/feeds/service_test.go: `.orm.On("CountJobProposalsByStatus", mock.Anything)`
$DIR/core/services/feeds/service_test.go: `.Return(&feeds.JobProposalCounts{}, nil)`
$DIR/core/services/feeds/service_test.go: `.orm.On("WithDataSource", mock.Anything)`
$DIR/core/services/feeds/service_test.go: `.Return(feeds.ORM(svc.orm))`
$DIR/core/services/feeds/service_test.go: `.ORM(svc.orm)`
$DIR/core/services/feeds/service_test.go: `.jobORM.On("WithDataSource", mock.Anything)`
$DIR/core/services/feeds/service_test.go: `.Return(job.ORM(svc.jobORM))`
$DIR/core/services/feeds/service_test.go: `.ORM(svc.jobORM)`
$DIR/core/services/feeds/service_test.go: `.MustNewDuration(1 * time.Minute)`
$DIR/core/services/feeds/service_test.go: `.connMgr.On("GetClient", jp.FeedsManagerID)`
$DIR/core/services/feeds/service_test.go: `.Return(svc.fmsClient, nil)`
$DIR/core/services/feeds/service_test.go: `.orm.EXPECT()`
$DIR/core/services/feeds/service_test.go: `.GetSpec(mock.Anything, spec.ID)`
$DIR/core/services/feeds/service_test.go: `.Return(spec, nil)`
$DIR/core/services/feeds/service_test.go: `.orm.EXPECT()`
$DIR/core/services/feeds/service_test.go: `.GetJobProposal(mock.Anything, jp.ID)`
$DIR/core/services/feeds/service_test.go: `.Return(jp, nil)`
$DIR/core/services/feeds/service_test.go: `.jobORM.On("AssertBridgesExist", mock.Anything, mock.IsType(pipeline.Pipeline{}))`
$DIR/core/services/feeds/service_test.go: `.IsType(pipeline.Pipeline{})`
$DIR/core/services/feeds/service_test.go: `.Return(nil)`
$DIR/core/services/feeds/service_test.go: `.jobORM.On("FindJobByExternalJobID", mock.Anything, externalJobID)`
$DIR/core/services/feeds/service_test.go: `.Return(job.Job{}, sql.ErrNoRows)`
$DIR/core/services/feeds/service_test.go: `.jobORM.On("FindJobIDByAddress", mock.Anything, address, evmChainID, mock.Anything)`
$DIR/core/services/feeds/service_test.go: `.Return(j.ID, nil)`
$DIR/core/services/feeds/service_test.go: `.orm.EXPECT()`
$DIR/core/services/feeds/service_test.go: `.GetApprovedSpec(mock.Anything, jp.ID)`
$DIR/core/services/feeds/service_test.go: `.Return(&feeds.JobProposalSpec{ID: 100}, nil)`
$DIR/core/services/feeds/service_test.go: `.orm.EXPECT()`
$DIR/core/services/feeds/service_test.go: `.CancelSpec(mock.Anything, int64(100))`
$DIR/core/services/feeds/service_test.go: `.Return(nil)`
$DIR/core/services/feeds/service_test.go: `.spawner.On("DeleteJob", mock.Anything, mock.Anything, j.ID)`
$DIR/core/services/feeds/service_test.go: `.Return(nil)`
$DIR/core/services/feeds/service_test.go: `.spawner.
On("CreateJob",
mock.Anything,
mock.Anything,
mock.MatchedBy(func(j *job.Job) bool {
return j.Name.String == "LINK / ETH | version 3 | contract 0x0000000000000000000000000000000000000000"
}),
)`
$DIR/core/services/feeds/service_test.go: `.MatchedBy(func(j *job.Job) bool {
return j.Name.String == "LINK / ETH | version 3 | contract 0x0000000000000000000000000000000000000000"
})`
$DIR/core/services/feeds/service_test.go: `.
Run(func(args mock.Arguments) { (args.Get(2).(*job.Job)).ID = 1 })`
$DIR/core/services/feeds/service_test.go: `.Get(2)`
$DIR/core/services/feeds/service_test.go: `.
Return(nil)`
$DIR/core/services/feeds/service_test.go: `.orm.On("ApproveSpec",
mock.Anything,
spec.ID,
externalJobID,
)`
$DIR/core/services/feeds/service_test.go: `.Return(nil)`
$DIR/core/services/feeds/service_test.go: `.fmsClient.On("ApprovedJob",
mock.MatchedBy(func(ctx context.Context) bool { return true }),
&proto.ApprovedJobRequest{
Uuid: jp.RemoteUUID.String(),
Version: int64(spec.Version),
},
)`
$DIR/core/services/feeds/service_test.go: `.MatchedBy(func(ctx context.Context) bool { return true })`
$DIR/core/services/feeds/service_test.go: `.RemoteUUID.String()`
$DIR/core/services/feeds/service_test.go: `.Return(&proto.ApprovedJobResponse{}, nil)`
$DIR/core/services/feeds/service_test.go: `.orm.On("CountJobProposalsByStatus", mock.Anything)`
$DIR/core/services/feeds/service_test.go: `.Return(&feeds.JobProposalCounts{}, nil)`
$DIR/core/services/feeds/service_test.go: `.orm.On("WithDataSource", mock.Anything)`
$DIR/core/services/feeds/service_test.go: `.Return(feeds.ORM(svc.orm))`
$DIR/core/services/feeds/service_test.go: `.ORM(svc.orm)`
$DIR/core/services/feeds/service_test.go: `.jobORM.On("WithDataSource", mock.Anything)`
$DIR/core/services/feeds/service_test.go: `.Return(job.ORM(svc.jobORM))`
$DIR/core/services/feeds/service_test.go: `.ORM(svc.jobORM)`
$DIR/core/services/feeds/service_test.go: `.orm.On("GetSpec", mock.Anything, spec.ID)`
$DIR/core/services/feeds/service_test.go: `.Return(nil, errors.New("Not Found"))`
$DIR/core/services/feeds/service_test.go: `.New("Not Found")`
$DIR/core/services/feeds/service_test.go: `.orm.On("GetSpec", mock.Anything, spec.ID)`
$DIR/core/services/feeds/service_test.go: `.Return(spec, nil)`
$DIR/core/services/feeds/service_test.go: `.orm.On("GetJobProposal", mock.Anything, jp.ID)`
$DIR/core/services/feeds/service_test.go: `.Return(nil, errors.New("Not Found"))`
$DIR/core/services/feeds/service_test.go: `.New("Not Found")`
$DIR/core/services/feeds/service_test.go: `.MustNewDuration(1 * time.Minute)`
$DIR/core/services/feeds/service_test.go: `.connMgr.On("GetClient", jp.FeedsManagerID)`
$DIR/core/services/feeds/service_test.go: `.Return(svc.fmsClient, nil)`
$DIR/core/services/feeds/service_test.go: `.orm.On("GetSpec", mock.Anything, spec.ID)`
$DIR/core/services/feeds/service_test.go: `.Return(spec, nil)`
$DIR/core/services/feeds/service_test.go: `.orm.On("GetJobProposal", mock.Anything, jp.ID)`
$DIR/core/services/feeds/service_test.go: `.Return(jp, nil)`
$DIR/core/services/feeds/service_test.go: `.jobORM.On("AssertBridgesExist", mock.Anything, mock.IsType(pipeline.Pipeline{}))`
$DIR/core/services/feeds/service_test.go: `.IsType(pipeline.Pipeline{})`
$DIR/core/services/feeds/service_test.go: `.Return(errors.New("bridges do not exist"))`
$DIR/core/services/feeds/service_test.go: `.New("bridges do not exist")`
$DIR/core/services/feeds/service_test.go: `.orm.On("GetSpec", mock.Anything, spec.ID)`
$DIR/core/services/feeds/service_test.go: `.Return(spec, nil)`
$DIR/core/services/feeds/service_test.go: `.orm.On("GetJobProposal", mock.Anything, jp.ID)`
$DIR/core/services/feeds/service_test.go: `.Return(jp, nil)`
$DIR/core/services/feeds/service_test.go: `.connMgr.On("GetClient", jp.FeedsManagerID)`
$DIR/core/services/feeds/service_test.go: `.Return(nil, errors.New("Not Connected"))`
$DIR/core/services/feeds/service_test.go: `.New("Not Connected")`
$DIR/core/services/feeds/service_test.go: `.MustNewDuration(1 * time.Minute)`
$DIR/core/services/feeds/service_test.go: `.connMgr.On("GetClient", jp.FeedsManagerID)`
$DIR/core/services/feeds/service_test.go: `.Return(svc.fmsClient, nil)`
$DIR/core/services/feeds/service_test.go: `.orm.EXPECT()`
$DIR/core/services/feeds/service_test.go: `.GetSpec(mock.Anything, spec.ID)`
$DIR/core/services/feeds/service_test.go: `.Return(spec, nil)`
$DIR/core/services/feeds/service_test.go: `.orm.EXPECT()`
$DIR/core/services/feeds/service_test.go: `.GetJobProposal(mock.Anything, jp.ID)`
$DIR/core/services/feeds/service_test.go: `.Return(jp, nil)`
$DIR/core/services/feeds/service_test.go: `.jobORM.On("AssertBridgesExist", mock.Anything, mock.IsType(pipeline.Pipeline{}))`
$DIR/core/services/feeds/service_test.go: `.IsType(pipeline.Pipeline{})`
$DIR/core/services/feeds/service_test.go: `.Return(nil)`
$DIR/core/services/feeds/service_test.go: `.jobORM.On("FindJobByExternalJobID", mock.Anything, externalJobID)`
$DIR/core/services/feeds/service_test.go: `.Return(j, nil)`
$DIR/core/services/feeds/service_test.go: `.orm.EXPECT()`
$DIR/core/services/feeds/service_test.go: `.GetApprovedSpec(mock.Anything, jp.ID)`
$DIR/core/services/feeds/service_test.go: `.Return(nil, errors.New("failure"))`
$DIR/core/services/feeds/service_test.go: `.New("failure")`
$DIR/core/services/feeds/service_test.go: `.orm.On("WithDataSource", mock.Anything)`
$DIR/core/services/feeds/service_test.go: `.Return(feeds.ORM(svc.orm))`
$DIR/core/services/feeds/service_test.go: `.ORM(svc.orm)`
$DIR/core/services/feeds/service_test.go: `.jobORM.On("WithDataSource", mock.Anything)`
$DIR/core/services/feeds/service_test.go: `.Return(job.ORM(svc.jobORM))`
$DIR/core/services/feeds/service_test.go: `.ORM(svc.jobORM)`
$DIR/core/services/feeds/service_test.go: `.MustNewDuration(1 * time.Minute)`
$DIR/core/services/feeds/service_test.go: `.connMgr.On("GetClient", jp.FeedsManagerID)`
$DIR/core/services/feeds/service_test.go: `.Return(svc.fmsClient, nil)`
$DIR/core/services/feeds/service_test.go: `.orm.EXPECT()`
$DIR/core/services/feeds/service_test.go: `.GetSpec(mock.Anything, spec.ID)`
$DIR/core/services/feeds/service_test.go: `.Return(spec, nil)`
$DIR/core/services/feeds/service_test.go: `.orm.EXPECT()`
$DIR/core/services/feeds/service_test.go: `.GetJobProposal(mock.Anything, jp.ID)`
$DIR/core/services/feeds/service_test.go: `.Return(jp, nil)`
$DIR/core/services/feeds/service_test.go: `.jobORM.On("AssertBridgesExist", mock.Anything, mock.IsType(pipeline.Pipeline{}))`
$DIR/core/services/feeds/service_test.go: `.IsType(pipeline.Pipeline{})`
$DIR/core/services/feeds/service_test.go: `.Return(nil)`
$DIR/core/services/feeds/service_test.go: `.jobORM.On("FindJobByExternalJobID", mock.Anything, externalJobID)`
$DIR/core/services/feeds/service_test.go: `.Return(job.Job{}, sql.ErrNoRows)`
$DIR/core/services/feeds/service_test.go: `.jobORM.On("FindJobIDByAddress", mock.Anything, address, evmChainID, mock.Anything)`
$DIR/core/services/feeds/service_test.go: `.Return(j.ID, nil)`
$DIR/core/services/feeds/service_test.go: `.orm.EXPECT()`
$DIR/core/services/feeds/service_test.go: `.GetApprovedSpec(mock.Anything, jp.ID)`
$DIR/core/services/feeds/service_test.go: `.Return(nil, errors.New("failure"))`
$DIR/core/services/feeds/service_test.go: `.New("failure")`
$DIR/core/services/feeds/service_test.go: `.orm.On("WithDataSource", mock.Anything)`
$DIR/core/services/feeds/service_test.go: `.Return(feeds.ORM(svc.orm))`
$DIR/core/services/feeds/service_test.go: `.ORM(svc.orm)`
$DIR/core/services/feeds/service_test.go: `.jobORM.On("WithDataSource", mock.Anything)`
$DIR/core/services/feeds/service_test.go: `.Return(job.ORM(svc.jobORM))`
$DIR/core/services/feeds/service_test.go: `.ORM(svc.jobORM)`
$DIR/core/services/feeds/service_test.go: `.MustNewDuration(1 * time.Minute)`
$DIR/core/services/feeds/service_test.go: `.connMgr.On("GetClient", jp.FeedsManagerID)`
$DIR/core/services/feeds/service_test.go: `.Return(svc.fmsClient, nil)`
$DIR/core/services/feeds/service_test.go: `.orm.EXPECT()`
$DIR/core/services/feeds/service_test.go: `.GetSpec(mock.Anything, spec.ID)`
$DIR/core/services/feeds/service_test.go: `.Return(spec, nil)`
$DIR/core/services/feeds/service_test.go: `.orm.EXPECT()`
$DIR/core/services/feeds/service_test.go: `.GetJobProposal(mock.Anything, jp.ID)`
$DIR/core/services/feeds/service_test.go: `.Return(jp, nil)`
$DIR/core/services/feeds/service_test.go: `.jobORM.On("AssertBridgesExist", mock.Anything, mock.IsType(pipeline.Pipeline{}))`
$DIR/core/services/feeds/service_test.go: `.IsType(pipeline.Pipeline{})`
$DIR/core/services/feeds/service_test.go: `.Return(nil)`
$DIR/core/services/feeds/service_test.go: `.jobORM.On("FindJobByExternalJobID", mock.Anything, externalJobID)`
$DIR/core/services/feeds/service_test.go: `.Return(j, nil)`
$DIR/core/services/feeds/service_test.go: `.orm.EXPECT()`
$DIR/core/services/feeds/service_test.go: `.GetApprovedSpec(mock.Anything, jp.ID)`
$DIR/core/services/feeds/service_test.go: `.Return(&feeds.JobProposalSpec{ID: 100}, nil)`
$DIR/core/services/feeds/service_test.go: `.orm.EXPECT()`
$DIR/core/services/feeds/service_test.go: `.CancelSpec(mock.Anything, int64(100))`
$DIR/core/services/feeds/service_test.go: `.Return(errors.New("failure"))`
$DIR/core/services/feeds/service_test.go: `.New("failure")`
$DIR/core/services/feeds/service_test.go: `.orm.On("WithDataSource", mock.Anything)`
$DIR/core/services/feeds/service_test.go: `.Return(feeds.ORM(svc.orm))`
$DIR/core/services/feeds/service_test.go: `.ORM(svc.orm)`
$DIR/core/services/feeds/service_test.go: `.jobORM.On("WithDataSource", mock.Anything)`
$DIR/core/services/feeds/service_test.go: `.Return(job.ORM(svc.jobORM))`
$DIR/core/services/feeds/service_test.go: `.ORM(svc.jobORM)`
$DIR/core/services/feeds/service_test.go: `.MustNewDuration(1 * time.Minute)`
$DIR/core/services/feeds/service_test.go: `.connMgr.On("GetClient", jp.FeedsManagerID)`
$DIR/core/services/feeds/service_test.go: `.Return(svc.fmsClient, nil)`
$DIR/core/services/feeds/service_test.go: `.orm.EXPECT()`
$DIR/core/services/feeds/service_test.go: `.GetSpec(mock.Anything, spec.ID)`
$DIR/core/services/feeds/service_test.go: `.Return(spec, nil)`
$DIR/core/services/feeds/service_test.go: `.orm.EXPECT()`
$DIR/core/services/feeds/service_test.go: `.GetJobProposal(mock.Anything, jp.ID)`
$DIR/core/services/feeds/service_test.go: `.Return(jp, nil)`
$DIR/core/services/feeds/service_test.go: `.jobORM.On("AssertBridgesExist", mock.Anything, mock.IsType(pipeline.Pipeline{}))`
$DIR/core/services/feeds/service_test.go: `.IsType(pipeline.Pipeline{})`
$DIR/core/services/feeds/service_test.go: `.Return(nil)`
$DIR/core/services/feeds/service_test.go: `.jobORM.On("FindJobByExternalJobID", mock.Anything, externalJobID)`
$DIR/core/services/feeds/service_test.go: `.Return(job.Job{}, sql.ErrNoRows)`
$DIR/core/services/feeds/service_test.go: `.jobORM.On("FindJobIDByAddress", mock.Anything, address, evmChainID, mock.Anything)`
$DIR/core/services/feeds/service_test.go: `.Return(j.ID, nil)`
$DIR/core/services/feeds/service_test.go: `.orm.EXPECT()`
$DIR/core/services/feeds/service_test.go: `.GetApprovedSpec(mock.Anything, jp.ID)`
$DIR/core/services/feeds/service_test.go: `.Return(&feeds.JobProposalSpec{ID: 100}, nil)`
$DIR/core/services/feeds/service_test.go: `.orm.EXPECT()`
$DIR/core/services/feeds/service_test.go: `.CancelSpec(mock.Anything, int64(100))`
$DIR/core/services/feeds/service_test.go: `.Return(errors.New("failure"))`
$DIR/core/services/feeds/service_test.go: `.New("failure")`
$DIR/core/services/feeds/service_test.go: `.orm.On("WithDataSource", mock.Anything)`
$DIR/core/services/feeds/service_test.go: `.Return(feeds.ORM(svc.orm))`
$DIR/core/services/feeds/service_test.go: `.ORM(svc.orm)`
$DIR/core/services/feeds/service_test.go: `.jobORM.On("WithDataSource", mock.Anything)`
$DIR/core/services/feeds/service_test.go: `.Return(job.ORM(svc.jobORM))`
$DIR/core/services/feeds/service_test.go: `.ORM(svc.jobORM)`
$DIR/core/services/feeds/service_test.go: `.MustNewDuration(1 * time.Minute)`
$DIR/core/services/feeds/service_test.go: `.orm.On("GetSpec", mock.Anything, spec.ID)`
$DIR/core/services/feeds/service_test.go: `.Return(spec, nil)`
$DIR/core/services/feeds/service_test.go: `.orm.On("GetJobProposal", mock.Anything, jp.ID)`
$DIR/core/services/feeds/service_test.go: `.Return(jp, nil)`
$DIR/core/services/feeds/service_test.go: `.connMgr.On("GetClient", jp.FeedsManagerID)`
$DIR/core/services/feeds/service_test.go: `.Return(svc.fmsClient, nil)`
$DIR/core/services/feeds/service_test.go: `.jobORM.On("AssertBridgesExist", mock.Anything, mock.IsType(pipeline.Pipeline{}))`
$DIR/core/services/feeds/service_test.go: `.IsType(pipeline.Pipeline{})`
$DIR/core/services/feeds/service_test.go: `.Return(nil)`
$DIR/core/services/feeds/service_test.go: `.jobORM.On("FindJobByExternalJobID", mock.Anything, externalJobID)`
$DIR/core/services/feeds/service_test.go: `.Return(job.Job{}, sql.ErrNoRows)`
$DIR/core/services/feeds/service_test.go: `.jobORM.On("FindJobIDByAddress", mock.Anything, address, evmChainID, mock.Anything)`
$DIR/core/services/feeds/service_test.go: `.Return(int32(0), sql.ErrNoRows)`
$DIR/core/services/feeds/service_test.go: `.spawner.
On("CreateJob",
mock.Anything,
mock.Anything,
mock.MatchedBy(func(j *job.Job) bool {
return j.Name.String == "LINK / ETH | version 3 | contract 0x0000000000000000000000000000000000000000"
}),
)`
$DIR/core/services/feeds/service_test.go: `.MatchedBy(func(j *job.Job) bool {
return j.Name.String == "LINK / ETH | version 3 | contract 0x0000000000000000000000000000000000000000"
})`
$DIR/core/services/feeds/service_test.go: `.
Return(errors.New("could not save"))`
$DIR/core/services/feeds/service_test.go: `.New("could not save")`
$DIR/core/services/feeds/service_test.go: `.orm.On("WithDataSource", mock.Anything)`
$DIR/core/services/feeds/service_test.go: `.Return(feeds.ORM(svc.orm))`
$DIR/core/services/feeds/service_test.go: `.ORM(svc.orm)`
$DIR/core/services/feeds/service_test.go: `.jobORM.On("WithDataSource", mock.Anything)`
$DIR/core/services/feeds/service_test.go: `.Return(job.ORM(svc.jobORM))`
$DIR/core/services/feeds/service_test.go: `.ORM(svc.jobORM)`
$DIR/core/services/feeds/service_test.go: `.MustNewDuration(1 * time.Minute)`
$DIR/core/services/feeds/service_test.go: `.orm.On("GetSpec", mock.Anything, spec.ID)`
$DIR/core/services/feeds/service_test.go: `.Return(spec, nil)`
$DIR/core/services/feeds/service_test.go: `.orm.On("GetJobProposal", mock.Anything, jp.ID)`
$DIR/core/services/feeds/service_test.go: `.Return(jp, nil)`
$DIR/core/services/feeds/service_test.go: `.connMgr.On("GetClient", jp.FeedsManagerID)`
$DIR/core/services/feeds/service_test.go: `.Return(svc.fmsClient, nil)`
$DIR/core/services/feeds/service_test.go: `.jobORM.On("AssertBridgesExist", mock.Anything, mock.IsType(pipeline.Pipeline{}))`
$DIR/core/services/feeds/service_test.go: `.IsType(pipeline.Pipeline{})`
$DIR/core/services/feeds/service_test.go: `.Return(nil)`
$DIR/core/services/feeds/service_test.go: `.jobORM.On("FindJobByExternalJobID", mock.Anything, externalJobID)`
$DIR/core/services/feeds/service_test.go: `.Return(job.Job{}, sql.ErrNoRows)`
$DIR/core/services/feeds/service_test.go: `.jobORM.On("FindJobIDByAddress", mock.Anything, address, evmChainID, mock.Anything)`
$DIR/core/services/feeds/service_test.go: `.Return(int32(0), sql.ErrNoRows)`
$DIR/core/services/feeds/service_test.go: `.spawner.
On("CreateJob",
mock.Anything,
mock.Anything,
mock.MatchedBy(func(j *job.Job) bool {
return j.Name.String == "LINK / ETH | version 3 | contract 0x0000000000000000000000000000000000000000"
}),
)`
$DIR/core/services/feeds/service_test.go: `.MatchedBy(func(j *job.Job) bool {
return j.Name.String == "LINK / ETH | version 3 | contract 0x0000000000000000000000000000000000000000"
})`
$DIR/core/services/feeds/service_test.go: `.
Run(func(args mock.Arguments) { (args.Get(2).(*job.Job)).ID = 1 })`
$DIR/core/services/feeds/service_test.go: `.Get(2)`
$DIR/core/services/feeds/service_test.go: `.
Return(nil)`
$DIR/core/services/feeds/service_test.go: `.orm.On("ApproveSpec",
mock.Anything,
spec.ID,
externalJobID,
)`
$DIR/core/services/feeds/service_test.go: `.Return(errors.New("failure"))`
$DIR/core/services/feeds/service_test.go: `.New("failure")`
$DIR/core/services/feeds/service_test.go: `.orm.On("WithDataSource", mock.Anything)`
$DIR/core/services/feeds/service_test.go: `.Return(feeds.ORM(svc.orm))`
$DIR/core/services/feeds/service_test.go: `.ORM(svc.orm)`
$DIR/core/services/feeds/service_test.go: `.jobORM.On("WithDataSource", mock.Anything)`
$DIR/core/services/feeds/service_test.go: `.Return(job.ORM(svc.jobORM))`
$DIR/core/services/feeds/service_test.go: `.ORM(svc.jobORM)`
$DIR/core/services/feeds/service_test.go: `.MustNewDuration(1 * time.Minute)`
$DIR/core/services/feeds/service_test.go: `.orm.On("GetSpec", mock.Anything, spec.ID)`
$DIR/core/services/feeds/service_test.go: `.Return(spec, nil)`
$DIR/core/services/feeds/service_test.go: `.orm.On("GetJobProposal", mock.Anything, jp.ID)`
$DIR/core/services/feeds/service_test.go: `.Return(jp, nil)`
$DIR/core/services/feeds/service_test.go: `.connMgr.On("GetClient", jp.FeedsManagerID)`
$DIR/core/services/feeds/service_test.go: `.Return(svc.fmsClient, nil)`
$DIR/core/services/feeds/service_test.go: `.jobORM.On("AssertBridgesExist", mock.Anything, mock.IsType(pipeline.Pipeline{}))`
$DIR/core/services/feeds/service_test.go: `.IsType(pipeline.Pipeline{})`
$DIR/core/services/feeds/service_test.go: `.Return(nil)`
$DIR/core/services/feeds/service_test.go: `.jobORM.On("FindJobByExternalJobID", mock.Anything, externalJobID)`
$DIR/core/services/feeds/service_test.go: `.Return(job.Job{}, sql.ErrNoRows)`
$DIR/core/services/feeds/service_test.go: `.jobORM.On("FindJobIDByAddress", mock.Anything, address, evmChainID, mock.Anything)`
$DIR/core/services/feeds/service_test.go: `.Return(int32(0), sql.ErrNoRows)`
$DIR/core/services/feeds/service_test.go: `.spawner.
On("CreateJob",
mock.Anything,
mock.Anything,
mock.MatchedBy(func(j *job.Job) bool {
return j.Name.String == "LINK / ETH | version 3 | contract 0x0000000000000000000000000000000000000000"
}),
)`
$DIR/core/services/feeds/service_test.go: `.MatchedBy(func(j *job.Job) bool {
return j.Name.String == "LINK / ETH | version 3 | contract 0x0000000000000000000000000000000000000000"
})`
$DIR/core/services/feeds/service_test.go: `.
Run(func(args mock.Arguments) { (args.Get(2).(*job.Job)).ID = 1 })`
$DIR/core/services/feeds/service_test.go: `.Get(2)`
$DIR/core/services/feeds/service_test.go: `.
Return(nil)`
$DIR/core/services/feeds/service_test.go: `.orm.On("ApproveSpec",
mock.Anything,
spec.ID,
externalJobID,
)`
$DIR/core/services/feeds/service_test.go: `.Return(nil)`
$DIR/core/services/feeds/service_test.go: `.fmsClient.On("ApprovedJob",
mock.MatchedBy(func(ctx context.Context) bool { return true }),
&proto.ApprovedJobRequest{
Uuid: jp.RemoteUUID.String(),
Version: int64(spec.Version),
},
)`
$DIR/core/services/feeds/service_test.go: `.MatchedBy(func(ctx context.Context) bool { return true })`
$DIR/core/services/feeds/service_test.go: `.RemoteUUID.String()`
$DIR/core/services/feeds/service_test.go: `.Return(nil, errors.New("failure"))`
$DIR/core/services/feeds/service_test.go: `.New("failure")`
$DIR/core/services/feeds/service_test.go: `.orm.On("WithDataSource", mock.Anything)`
$DIR/core/services/feeds/service_test.go: `.Return(feeds.ORM(svc.orm))`
$DIR/core/services/feeds/service_test.go: `.ORM(svc.orm)`
$DIR/core/services/feeds/service_test.go: `.jobORM.On("WithDataSource", mock.Anything)`
$DIR/core/services/feeds/service_test.go: `.Return(job.ORM(svc.jobORM))`
$DIR/core/services/feeds/service_test.go: `.ORM(svc.jobORM)`
$DIR/core/services/feeds/service_test.go: `.Run(tc.name, func(t *testing.T) {
svc := setupTestServiceCfg(t, func(c *chainlink.Config, s *chainlink.Secrets) {
c.OCR2.Enabled = testutils.Ptr(true)
if tc.httpTimeout != nil {
c.JobPipeline.HTTPRequest.DefaultTimeout = tc.httpTimeout
}
})
if tc.before != nil {
tc.before(svc)
}
err := svc.ApproveSpec(ctx, tc.id, tc.force)
if tc.wantErr != "" {
require.Error(t, err)
assert.EqualError(t, err, tc.wantErr)
} else {
require.NoError(t, err)
}
})`
$DIR/core/services/feeds/service_test.go: `.Ptr(true)`
$DIR/core/services/feeds/service_test.go: `.before(svc)`
$DIR/core/services/feeds/service_test.go: `.ApproveSpec(ctx, tc.id, tc.force)`
$DIR/core/services/feeds/service_test.go: `.HexToHash(feedIDHex)`
$DIR/core/services/feeds/service_test.go: `.New()`
$DIR/core/services/feeds/service_test.go: `.Context(t)`
$DIR/core/services/feeds/service_test.go: `.Sprintf(defn, externalJobID.String())`
$DIR/core/services/feeds/service_test.go: `.String()`
$DIR/core/services/feeds/service_test.go: `.Sprintf(defn, externalJobID.String())`
$DIR/core/services/feeds/service_test.go: `.String()`
$DIR/core/services/feeds/service_test.go: `.Sprintf(defn, externalJobID.String())`
$DIR/core/services/feeds/service_test.go: `.String()`
$DIR/core/services/feeds/service_test.go: `.MustNewDuration(1 * time.Minute)`
$DIR/core/services/feeds/service_test.go: `.connMgr.On("GetClient", jp.FeedsManagerID)`
$DIR/core/services/feeds/service_test.go: `.Return(svc.fmsClient, nil)`
$DIR/core/services/feeds/service_test.go: `.orm.On("GetSpec", mock.Anything, spec.ID)`
$DIR/core/services/feeds/service_test.go: `.Return(spec, nil)`
$DIR/core/services/feeds/service_test.go: `.orm.On("GetJobProposal", mock.Anything, jp.ID)`
$DIR/core/services/feeds/service_test.go: `.Return(jp, nil)`
$DIR/core/services/feeds/service_test.go: `.jobORM.On("AssertBridgesExist", mock.Anything, mock.IsType(pipeline.Pipeline{}))`
$DIR/core/services/feeds/service_test.go: `.IsType(pipeline.Pipeline{})`
$DIR/core/services/feeds/service_test.go: `.Return(nil)`
$DIR/core/services/feeds/service_test.go: `.jobORM.On("FindJobByExternalJobID", mock.Anything, externalJobID)`
$DIR/core/services/feeds/service_test.go: `.Return(job.Job{}, sql.ErrNoRows)`
$DIR/core/services/feeds/service_test.go: `.jobORM.On("FindOCR2JobIDByAddress", mock.Anything, address, (*common.Hash)(nil))`
$DIR/core/services/feeds/service_test.go: `.Return(int32(0), sql.ErrNoRows)`
$DIR/core/services/feeds/service_test.go: `.spawner.
On("CreateJob",
mock.Anything,
mock.Anything,
mock.MatchedBy(func(j *job.Job) bool {
return j.Name.String == "LINK / ETH | version 3 | contract 0x0000000000000000000000000000000000000000"
}),
)`
$DIR/core/services/feeds/service_test.go: `.MatchedBy(func(j *job.Job) bool {
return j.Name.String == "LINK / ETH | version 3 | contract 0x0000000000000000000000000000000000000000"
})`
$DIR/core/services/feeds/service_test.go: `.
Run(func(args mock.Arguments) { (args.Get(2).(*job.Job)).ID = 1 })`
$DIR/core/services/feeds/service_test.go: `.Get(2)`
$DIR/core/services/feeds/service_test.go: `.
Return(nil)`
$DIR/core/services/feeds/service_test.go: `.orm.On("ApproveSpec",
mock.Anything,
spec.ID,
externalJobID,
)`
$DIR/core/services/feeds/service_test.go: `.Return(nil)`
$DIR/core/services/feeds/service_test.go: `.fmsClient.On("ApprovedJob",
mock.MatchedBy(func(ctx context.Context) bool { return true }),
&proto.ApprovedJobRequest{
Uuid: jp.RemoteUUID.String(),
Version: int64(spec.Version),
},
)`
$DIR/core/services/feeds/service_test.go: `.MatchedBy(func(ctx context.Context) bool { return true })`
$DIR/core/services/feeds/service_test.go: `.RemoteUUID.String()`
$DIR/core/services/feeds/service_test.go: `.Return(&proto.ApprovedJobResponse{}, nil)`
$DIR/core/services/feeds/service_test.go: `.orm.On("CountJobProposalsByStatus", mock.Anything)`
$DIR/core/services/feeds/service_test.go: `.Return(&feeds.JobProposalCounts{}, nil)`
$DIR/core/services/feeds/service_test.go: `.orm.On("WithDataSource", mock.Anything)`
$DIR/core/services/feeds/service_test.go: `.Return(feeds.ORM(svc.orm))`
$DIR/core/services/feeds/service_test.go: `.ORM(svc.orm)`
$DIR/core/services/feeds/service_test.go: `.jobORM.On("WithDataSource", mock.Anything)`
$DIR/core/services/feeds/service_test.go: `.Return(job.ORM(svc.jobORM))`
$DIR/core/services/feeds/service_test.go: `.ORM(svc.jobORM)`
$DIR/core/services/feeds/service_test.go: `.MustNewDuration(1 * time.Minute)`
$DIR/core/services/feeds/service_test.go: `.connMgr.On("GetClient", jp.FeedsManagerID)`
$DIR/core/services/feeds/service_test.go: `.Return(svc.fmsClient, nil)`
$DIR/core/services/feeds/service_test.go: `.orm.On("GetSpec", mock.Anything, cancelledSpec.ID, mock.Anything)`
$DIR/core/services/feeds/service_test.go: `.Return(cancelledSpec, nil)`
$DIR/core/services/feeds/service_test.go: `.orm.On("GetJobProposal", mock.Anything, jp.ID)`
$DIR/core/services/feeds/service_test.go: `.Return(jp, nil)`
$DIR/core/services/feeds/service_test.go: `.orm.On("GetLatestSpec", mock.Anything, cancelledSpec.JobProposalID)`
$DIR/core/services/feeds/service_test.go: `.Return(cancelledSpec, nil)`
$DIR/core/services/feeds/service_test.go: `.jobORM.On("AssertBridgesExist", mock.Anything, mock.IsType(pipeline.Pipeline{}))`
$DIR/core/services/feeds/service_test.go: `.IsType(pipeline.Pipeline{})`
$DIR/core/services/feeds/service_test.go: `.Return(nil)`
$DIR/core/services/feeds/service_test.go: `.jobORM.On("FindJobByExternalJobID", mock.Anything, externalJobID)`
$DIR/core/services/feeds/service_test.go: `.Return(job.Job{}, sql.ErrNoRows)`
$DIR/core/services/feeds/service_test.go: `.jobORM.On("FindOCR2JobIDByAddress", mock.Anything, address, (*common.Hash)(nil))`
$DIR/core/services/feeds/service_test.go: `.Return(int32(0), sql.ErrNoRows)`
$DIR/core/services/feeds/service_test.go: `.spawner.
On("CreateJob",
mock.Anything,
mock.Anything,
mock.MatchedBy(func(j *job.Job) bool {
return j.Name.String == "LINK / ETH | version 3 | contract 0x0000000000000000000000000000000000000000"
}),
)`
$DIR/core/services/feeds/service_test.go: `.MatchedBy(func(j *job.Job) bool {
return j.Name.String == "LINK / ETH | version 3 | contract 0x0000000000000000000000000000000000000000"
})`
$DIR/core/services/feeds/service_test.go: `.
Run(func(args mock.Arguments) { (args.Get(2).(*job.Job)).ID = 1 })`
$DIR/core/services/feeds/service_test.go: `.Get(2)`
$DIR/core/services/feeds/service_test.go: `.
Return(nil)`
$DIR/core/services/feeds/service_test.go: `.orm.On("ApproveSpec",
mock.Anything,
cancelledSpec.ID,
externalJobID,
)`
$DIR/core/services/feeds/service_test.go: `.Return(nil)`
$DIR/core/services/feeds/service_test.go: `.fmsClient.On("ApprovedJob",
mock.MatchedBy(func(ctx context.Context) bool { return true }),
&proto.ApprovedJobRequest{
Uuid: jp.RemoteUUID.String(),
Version: int64(spec.Version),
},
)`
$DIR/core/services/feeds/service_test.go: `.MatchedBy(func(ctx context.Context) bool { return true })`
$DIR/core/services/feeds/service_test.go: `.RemoteUUID.String()`
$DIR/core/services/feeds/service_test.go: `.Return(&proto.ApprovedJobResponse{}, nil)`
$DIR/core/services/feeds/service_test.go: `.orm.On("CountJobProposalsByStatus", mock.Anything)`
$DIR/core/services/feeds/service_test.go: `.Return(&feeds.JobProposalCounts{}, nil)`
$DIR/core/services/feeds/service_test.go: `.orm.On("WithDataSource", mock.Anything)`
$DIR/core/services/feeds/service_test.go: `.Return(feeds.ORM(svc.orm))`
$DIR/core/services/feeds/service_test.go: `.ORM(svc.orm)`
$DIR/core/services/feeds/service_test.go: `.jobORM.On("WithDataSource", mock.Anything)`
$DIR/core/services/feeds/service_test.go: `.Return(job.ORM(svc.jobORM))`
$DIR/core/services/feeds/service_test.go: `.ORM(svc.jobORM)`
$DIR/core/services/feeds/service_test.go: `.orm.On("GetSpec", mock.Anything, cancelledSpec.ID, mock.Anything)`
$DIR/core/services/feeds/service_test.go: `.Return(cancelledSpec, nil)`
$DIR/core/services/feeds/service_test.go: `.orm.On("GetJobProposal", mock.Anything, jp.ID)`
$DIR/core/services/feeds/service_test.go: `.Return(jp, nil)`
$DIR/core/services/feeds/service_test.go: `.orm.On("GetLatestSpec", mock.Anything, cancelledSpec.JobProposalID)`
$DIR/core/services/feeds/service_test.go: `.Return(&feeds.JobProposalSpec{
ID: 21,
Status: feeds.SpecStatusPending,
JobProposalID: jp.ID,
Version: 2,
Definition: defn,
}, nil)`
$DIR/core/services/feeds/service_test.go: `.orm.On("GetSpec", mock.Anything, cancelledSpec.ID, mock.Anything)`
$DIR/core/services/feeds/service_test.go: `.Return(rejectedSpec, nil)`
$DIR/core/services/feeds/service_test.go: `.orm.On("GetJobProposal", mock.Anything, jp.ID)`
$DIR/core/services/feeds/service_test.go: `.Return(jp, nil)`
$DIR/core/services/feeds/service_test.go: `.MustNewDuration(1 * time.Minute)`
$DIR/core/services/feeds/service_test.go: `.connMgr.On("GetClient", jp.FeedsManagerID)`
$DIR/core/services/feeds/service_test.go: `.Return(svc.fmsClient, nil)`
$DIR/core/services/feeds/service_test.go: `.orm.On("GetSpec", mock.Anything, spec.ID)`
$DIR/core/services/feeds/service_test.go: `.Return(spec, nil)`
$DIR/core/services/feeds/service_test.go: `.orm.On("GetJobProposal", mock.Anything, jp.ID)`
$DIR/core/services/feeds/service_test.go: `.Return(jp, nil)`
$DIR/core/services/feeds/service_test.go: `.jobORM.On("AssertBridgesExist", mock.Anything, mock.IsType(pipeline.Pipeline{}))`
$DIR/core/services/feeds/service_test.go: `.IsType(pipeline.Pipeline{})`
$DIR/core/services/feeds/service_test.go: `.Return(nil)`
$DIR/core/services/feeds/service_test.go: `.jobORM.On("FindJobByExternalJobID", mock.Anything, externalJobID)`
$DIR/core/services/feeds/service_test.go: `.Return(job.Job{}, sql.ErrNoRows)`
$DIR/core/services/feeds/service_test.go: `.jobORM.On("FindOCR2JobIDByAddress", mock.Anything, address, (*common.Hash)(nil))`
$DIR/core/services/feeds/service_test.go: `.Return(j.ID, nil)`
$DIR/core/services/feeds/service_test.go: `.orm.On("WithDataSource", mock.Anything)`
$DIR/core/services/feeds/service_test.go: `.Return(feeds.ORM(svc.orm))`
$DIR/core/services/feeds/service_test.go: `.ORM(svc.orm)`
$DIR/core/services/feeds/service_test.go: `.jobORM.On("WithDataSource", mock.Anything)`
$DIR/core/services/feeds/service_test.go: `.Return(job.ORM(svc.jobORM))`
$DIR/core/services/feeds/service_test.go: `.ORM(svc.jobORM)`
$DIR/core/services/feeds/service_test.go: `.MustNewDuration(1 * time.Minute)`
$DIR/core/services/feeds/service_test.go: `.connMgr.On("GetClient", jp.FeedsManagerID)`
$DIR/core/services/feeds/service_test.go: `.Return(svc.fmsClient, nil)`
$DIR/core/services/feeds/service_test.go: `.orm.On("GetSpec", mock.Anything, spec.ID)`
$DIR/core/services/feeds/service_test.go: `.Return(spec, nil)`
$DIR/core/services/feeds/service_test.go: `.orm.On("GetJobProposal", mock.Anything, jp.ID)`
$DIR/core/services/feeds/service_test.go: `.Return(jp, nil)`
$DIR/core/services/feeds/service_test.go: `.jobORM.On("AssertBridgesExist", mock.Anything, mock.IsType(pipeline.Pipeline{}))`
$DIR/core/services/feeds/service_test.go: `.IsType(pipeline.Pipeline{})`
$DIR/core/services/feeds/service_test.go: `.Return(nil)`
$DIR/core/services/feeds/service_test.go: `.orm.EXPECT()`
$DIR/core/services/feeds/service_test.go: `.GetApprovedSpec(mock.Anything, jp.ID)`
$DIR/core/services/feeds/service_test.go: `.Return(nil, sql.ErrNoRows)`
$DIR/core/services/feeds/service_test.go: `.jobORM.On("FindJobByExternalJobID", mock.Anything, externalJobID)`
$DIR/core/services/feeds/service_test.go: `.Return(job.Job{}, sql.ErrNoRows)`
$DIR/core/services/feeds/service_test.go: `.jobORM.On("FindOCR2JobIDByAddress", mock.Anything, address, (*common.Hash)(nil))`
$DIR/core/services/feeds/service_test.go: `.Return(j.ID, nil)`
$DIR/core/services/feeds/service_test.go: `.spawner.On("DeleteJob", mock.Anything, mock.Anything, j.ID)`
$DIR/core/services/feeds/service_test.go: `.Return(nil)`
$DIR/core/services/feeds/service_test.go: `.spawner.
On("CreateJob",
mock.Anything,
mock.Anything,
mock.MatchedBy(func(j *job.Job) bool {
return j.Name.String == "LINK / ETH | version 3 | contract 0x0000000000000000000000000000000000000000"
}),
)`
$DIR/core/services/feeds/service_test.go: `.MatchedBy(func(j *job.Job) bool {
return j.Name.String == "LINK / ETH | version 3 | contract 0x0000000000000000000000000000000000000000"
})`
$DIR/core/services/feeds/service_test.go: `.
Run(func(args mock.Arguments) { (args.Get(2).(*job.Job)).ID = 1 })`
$DIR/core/services/feeds/service_test.go: `.Get(2)`
$DIR/core/services/feeds/service_test.go: `.
Return(nil)`
$DIR/core/services/feeds/service_test.go: `.orm.On("ApproveSpec",
mock.Anything,
spec.ID,
externalJobID,
)`
$DIR/core/services/feeds/service_test.go: `.Return(nil)`
$DIR/core/services/feeds/service_test.go: `.fmsClient.On("ApprovedJob",
mock.MatchedBy(func(ctx context.Context) bool { return true }),
&proto.ApprovedJobRequest{
Uuid: jp.RemoteUUID.String(),
Version: int64(spec.Version),
},
)`
$DIR/core/services/feeds/service_test.go: `.MatchedBy(func(ctx context.Context) bool { return true })`
$DIR/core/services/feeds/service_test.go: `.RemoteUUID.String()`
$DIR/core/services/feeds/service_test.go: `.Return(&proto.ApprovedJobResponse{}, nil)`
$DIR/core/services/feeds/service_test.go: `.orm.On("CountJobProposalsByStatus", mock.Anything)`
$DIR/core/services/feeds/service_test.go: `.Return(&feeds.JobProposalCounts{}, nil)`
$DIR/core/services/feeds/service_test.go: `.orm.On("WithDataSource", mock.Anything)`
$DIR/core/services/feeds/service_test.go: `.Return(feeds.ORM(svc.orm))`
$DIR/core/services/feeds/service_test.go: `.ORM(svc.orm)`
$DIR/core/services/feeds/service_test.go: `.jobORM.On("WithDataSource", mock.Anything)`
$DIR/core/services/feeds/service_test.go: `.Return(job.ORM(svc.jobORM))`
$DIR/core/services/feeds/service_test.go: `.ORM(svc.jobORM)`
$DIR/core/services/feeds/service_test.go: `.MustNewDuration(1 * time.Minute)`
$DIR/core/services/feeds/service_test.go: `.connMgr.On("GetClient", jp.FeedsManagerID)`
$DIR/core/services/feeds/service_test.go: `.Return(svc.fmsClient, nil)`
$DIR/core/services/feeds/service_test.go: `.orm.On("GetSpec", mock.Anything, spec.ID)`
$DIR/core/services/feeds/service_test.go: `.Return(&feeds.JobProposalSpec{
ID: 20,
Status: feeds.SpecStatusPending,
JobProposalID: jp.ID,
Version: 1,
Definition: fmt.Sprintf(defn2, externalJobID.String(), &feedID),
}, nil)`
$DIR/core/services/feeds/service_test.go: `.Sprintf(defn2, externalJobID.String(), &feedID)`
$DIR/core/services/feeds/service_test.go: `.String()`
$DIR/core/services/feeds/service_test.go: `.orm.On("GetJobProposal", mock.Anything, jp.ID)`
$DIR/core/services/feeds/service_test.go: `.Return(jp, nil)`
$DIR/core/services/feeds/service_test.go: `.jobORM.On("AssertBridgesExist", mock.Anything, mock.IsType(pipeline.Pipeline{}))`
$DIR/core/services/feeds/service_test.go: `.IsType(pipeline.Pipeline{})`
$DIR/core/services/feeds/service_test.go: `.Return(nil)`
$DIR/core/services/feeds/service_test.go: `.orm.EXPECT()`
$DIR/core/services/feeds/service_test.go: `.GetApprovedSpec(mock.Anything, jp.ID)`
$DIR/core/services/feeds/service_test.go: `.Return(nil, sql.ErrNoRows)`
$DIR/core/services/feeds/service_test.go: `.jobORM.On("FindJobByExternalJobID", mock.Anything, externalJobID)`
$DIR/core/services/feeds/service_test.go: `.Return(job.Job{}, sql.ErrNoRows)`
$DIR/core/services/feeds/service_test.go: `.jobORM.On("FindOCR2JobIDByAddress", mock.Anything, address, &feedID)`
$DIR/core/services/feeds/service_test.go: `.Return(j.ID, nil)`
$DIR/core/services/feeds/service_test.go: `.spawner.On("DeleteJob", mock.Anything, mock.Anything, j.ID)`
$DIR/core/services/feeds/service_test.go: `.Return(nil)`
$DIR/core/services/feeds/service_test.go: `.spawner.
On("CreateJob",
mock.Anything,
mock.Anything,
mock.MatchedBy(func(j *job.Job) bool {
return j.Name.String == "LINK / ETH | version 3 | contract 0x0000000000000000000000000000000000000000"
}),
)`
$DIR/core/services/feeds/service_test.go: `.MatchedBy(func(j *job.Job) bool {
return j.Name.String == "LINK / ETH | version 3 | contract 0x0000000000000000000000000000000000000000"
})`
$DIR/core/services/feeds/service_test.go: `.
Run(func(args mock.Arguments) { (args.Get(2).(*job.Job)).ID = 1 })`
$DIR/core/services/feeds/service_test.go: `.Get(2)`
$DIR/core/services/feeds/service_test.go: `.
Return(nil)`
$DIR/core/services/feeds/service_test.go: `.orm.On("ApproveSpec",
mock.Anything,
spec.ID,
externalJobID,
)`
$DIR/core/services/feeds/service_test.go: `.Return(nil)`
$DIR/core/services/feeds/service_test.go: `.fmsClient.On("ApprovedJob",
mock.MatchedBy(func(ctx context.Context) bool { return true }),
&proto.ApprovedJobRequest{
Uuid: jp.RemoteUUID.String(),
Version: int64(spec.Version),
},
)`
$DIR/core/services/feeds/service_test.go: `.MatchedBy(func(ctx context.Context) bool { return true })`
$DIR/core/services/feeds/service_test.go: `.RemoteUUID.String()`
$DIR/core/services/feeds/service_test.go: `.Return(&proto.ApprovedJobResponse{}, nil)`
$DIR/core/services/feeds/service_test.go: `.orm.On("CountJobProposalsByStatus", mock.Anything)`
$DIR/core/services/feeds/service_test.go: `.Return(&feeds.JobProposalCounts{}, nil)`
$DIR/core/services/feeds/service_test.go: `.orm.On("WithDataSource", mock.Anything)`
$DIR/core/services/feeds/service_test.go: `.Return(feeds.ORM(svc.orm))`
$DIR/core/services/feeds/service_test.go: `.ORM(svc.orm)`
$DIR/core/services/feeds/service_test.go: `.jobORM.On("WithDataSource", mock.Anything)`
$DIR/core/services/feeds/service_test.go: `.Return(job.ORM(svc.jobORM))`
$DIR/core/services/feeds/service_test.go: `.ORM(svc.jobORM)`
$DIR/core/services/feeds/service_test.go: `.MustNewDuration(1 * time.Minute)`
$DIR/core/services/feeds/service_test.go: `.connMgr.On("GetClient", jp.FeedsManagerID)`
$DIR/core/services/feeds/service_test.go: `.Return(svc.fmsClient, nil)`
$DIR/core/services/feeds/service_test.go: `.orm.On("GetSpec", mock.Anything, spec.ID)`
$DIR/core/services/feeds/service_test.go: `.Return(spec, nil)`
$DIR/core/services/feeds/service_test.go: `.orm.On("GetJobProposal", mock.Anything, jp.ID)`
$DIR/core/services/feeds/service_test.go: `.Return(jp, nil)`
$DIR/core/services/feeds/service_test.go: `.jobORM.On("AssertBridgesExist", mock.Anything, mock.IsType(pipeline.Pipeline{}))`
$DIR/core/services/feeds/service_test.go: `.IsType(pipeline.Pipeline{})`
$DIR/core/services/feeds/service_test.go: `.Return(nil)`
$DIR/core/services/feeds/service_test.go: `.orm.EXPECT()`
$DIR/core/services/feeds/service_test.go: `.GetApprovedSpec(mock.Anything, jp.ID)`
$DIR/core/services/feeds/service_test.go: `.Return(&feeds.JobProposalSpec{ID: 100}, nil)`
$DIR/core/services/feeds/service_test.go: `.orm.EXPECT()`
$DIR/core/services/feeds/service_test.go: `.CancelSpec(mock.Anything, int64(100))`
$DIR/core/services/feeds/service_test.go: `.Return(nil)`
$DIR/core/services/feeds/service_test.go: `.jobORM.On("FindJobByExternalJobID", mock.Anything, externalJobID)`
$DIR/core/services/feeds/service_test.go: `.Return(job.Job{}, sql.ErrNoRows)`
$DIR/core/services/feeds/service_test.go: `.jobORM.On("FindOCR2JobIDByAddress", mock.Anything, address, (*common.Hash)(nil))`
$DIR/core/services/feeds/service_test.go: `.Return(j.ID, nil)`
$DIR/core/services/feeds/service_test.go: `.spawner.On("DeleteJob", mock.Anything, mock.Anything, j.ID)`
$DIR/core/services/feeds/service_test.go: `.Return(nil)`
$DIR/core/services/feeds/service_test.go: `.spawner.
On("CreateJob",
mock.Anything,
mock.Anything,
mock.MatchedBy(func(j *job.Job) bool {
return j.Name.String == "LINK / ETH | version 3 | contract 0x0000000000000000000000000000000000000000"
}),
)`
$DIR/core/services/feeds/service_test.go: `.MatchedBy(func(j *job.Job) bool {
return j.Name.String == "LINK / ETH | version 3 | contract 0x0000000000000000000000000000000000000000"
})`
$DIR/core/services/feeds/service_test.go: `.
Run(func(args mock.Arguments) { (args.Get(2).(*job.Job)).ID = 1 })`
$DIR/core/services/feeds/service_test.go: `.Get(2)`
$DIR/core/services/feeds/service_test.go: `.
Return(nil)`
$DIR/core/services/feeds/service_test.go: `.orm.On("ApproveSpec",
mock.Anything,
spec.ID,
externalJobID,
)`
$DIR/core/services/feeds/service_test.go: `.Return(nil)`
$DIR/core/services/feeds/service_test.go: `.fmsClient.On("ApprovedJob",
mock.MatchedBy(func(ctx context.Context) bool { return true }),
&proto.ApprovedJobRequest{
Uuid: jp.RemoteUUID.String(),
Version: int64(spec.Version),
},
)`
$DIR/core/services/feeds/service_test.go: `.MatchedBy(func(ctx context.Context) bool { return true })`
$DIR/core/services/feeds/service_test.go: `.RemoteUUID.String()`
$DIR/core/services/feeds/service_test.go: `.Return(&proto.ApprovedJobResponse{}, nil)`
$DIR/core/services/feeds/service_test.go: `.orm.On("CountJobProposalsByStatus", mock.Anything)`
$DIR/core/services/feeds/service_test.go: `.Return(&feeds.JobProposalCounts{}, nil)`
$DIR/core/services/feeds/service_test.go: `.orm.On("WithDataSource", mock.Anything)`
$DIR/core/services/feeds/service_test.go: `.Return(feeds.ORM(svc.orm))`
$DIR/core/services/feeds/service_test.go: `.ORM(svc.orm)`
$DIR/core/services/feeds/service_test.go: `.jobORM.On("WithDataSource", mock.Anything)`
$DIR/core/services/feeds/service_test.go: `.Return(job.ORM(svc.jobORM))`
$DIR/core/services/feeds/service_test.go: `.ORM(svc.jobORM)`
$DIR/core/services/feeds/service_test.go: `.orm.On("GetSpec", mock.Anything, spec.ID)`
$DIR/core/services/feeds/service_test.go: `.Return(nil, errors.New("Not Found"))`
$DIR/core/services/feeds/service_test.go: `.New("Not Found")`
$DIR/core/services/feeds/service_test.go: `.orm.On("GetSpec", mock.Anything, spec.ID)`
$DIR/core/services/feeds/service_test.go: `.Return(aspec, nil)`
$DIR/core/services/feeds/service_test.go: `.orm.On("GetJobProposal", mock.Anything, jp.ID)`
$DIR/core/services/feeds/service_test.go: `.Return(jp, nil)`
$DIR/core/services/feeds/service_test.go: `.orm.On("GetSpec", mock.Anything, rspec.ID, mock.Anything)`
$DIR/core/services/feeds/service_test.go: `.Return(rspec, nil)`
$DIR/core/services/feeds/service_test.go: `.orm.On("GetJobProposal", mock.Anything, jp.ID)`
$DIR/core/services/feeds/service_test.go: `.Return(jp, nil)`
$DIR/core/services/feeds/service_test.go: `.orm.On("GetSpec", mock.Anything, spec.ID)`
$DIR/core/services/feeds/service_test.go: `.Return(spec, nil)`
$DIR/core/services/feeds/service_test.go: `.orm.On("GetJobProposal", mock.Anything, jp.ID)`
$DIR/core/services/feeds/service_test.go: `.Return(nil, errors.New("Not Found"))`
$DIR/core/services/feeds/service_test.go: `.New("Not Found")`
$DIR/core/services/feeds/service_test.go: `.MustNewDuration(1 * time.Minute)`
$DIR/core/services/feeds/service_test.go: `.connMgr.On("GetClient", jp.FeedsManagerID)`
$DIR/core/services/feeds/service_test.go: `.Return(svc.fmsClient, nil)`
$DIR/core/services/feeds/service_test.go: `.orm.On("GetSpec", mock.Anything, spec.ID)`
$DIR/core/services/feeds/service_test.go: `.Return(spec, nil)`
$DIR/core/services/feeds/service_test.go: `.orm.On("GetJobProposal", mock.Anything, jp.ID)`
$DIR/core/services/feeds/service_test.go: `.Return(jp, nil)`
$DIR/core/services/feeds/service_test.go: `.jobORM.On("AssertBridgesExist", mock.Anything, mock.IsType(pipeline.Pipeline{}))`
$DIR/core/services/feeds/service_test.go: `.IsType(pipeline.Pipeline{})`
$DIR/core/services/feeds/service_test.go: `.Return(errors.New("bridges do not exist"))`
$DIR/core/services/feeds/service_test.go: `.New("bridges do not exist")`
$DIR/core/services/feeds/service_test.go: `.orm.On("GetSpec", mock.Anything, spec.ID)`
$DIR/core/services/feeds/service_test.go: `.Return(spec, nil)`
$DIR/core/services/feeds/service_test.go: `.orm.On("GetJobProposal", mock.Anything, jp.ID)`
$DIR/core/services/feeds/service_test.go: `.Return(jp, nil)`
$DIR/core/services/feeds/service_test.go: `.connMgr.On("GetClient", jp.FeedsManagerID)`
$DIR/core/services/feeds/service_test.go: `.Return(nil, errors.New("Not Connected"))`
$DIR/core/services/feeds/service_test.go: `.New("Not Connected")`
$DIR/core/services/feeds/service_test.go: `.MustNewDuration(1 * time.Minute)`
$DIR/core/services/feeds/service_test.go: `.orm.On("GetSpec", mock.Anything, spec.ID)`
$DIR/core/services/feeds/service_test.go: `.Return(spec, nil)`
$DIR/core/services/feeds/service_test.go: `.orm.On("GetJobProposal", mock.Anything, jp.ID)`
$DIR/core/services/feeds/service_test.go: `.Return(jp, nil)`
$DIR/core/services/feeds/service_test.go: `.connMgr.On("GetClient", jp.FeedsManagerID)`
$DIR/core/services/feeds/service_test.go: `.Return(svc.fmsClient, nil)`
$DIR/core/services/feeds/service_test.go: `.jobORM.On("AssertBridgesExist", mock.Anything, mock.IsType(pipeline.Pipeline{}))`
$DIR/core/services/feeds/service_test.go: `.IsType(pipeline.Pipeline{})`
$DIR/core/services/feeds/service_test.go: `.Return(nil)`
$DIR/core/services/feeds/service_test.go: `.jobORM.On("FindJobByExternalJobID", mock.Anything, externalJobID)`
$DIR/core/services/feeds/service_test.go: `.Return(job.Job{}, sql.ErrNoRows)`
$DIR/core/services/feeds/service_test.go: `.jobORM.On("FindOCR2JobIDByAddress", mock.Anything, address, (*common.Hash)(nil))`
$DIR/core/services/feeds/service_test.go: `.Return(int32(0), sql.ErrNoRows)`
$DIR/core/services/feeds/service_test.go: `.spawner.
On("CreateJob",
mock.Anything,
mock.Anything,
mock.MatchedBy(func(j *job.Job) bool {
return j.Name.String == "LINK / ETH | version 3 | contract 0x0000000000000000000000000000000000000000"
}),
)`
$DIR/core/services/feeds/service_test.go: `.MatchedBy(func(j *job.Job) bool {
return j.Name.String == "LINK / ETH | version 3 | contract 0x0000000000000000000000000000000000000000"
})`
$DIR/core/services/feeds/service_test.go: `.
Return(errors.New("could not save"))`
$DIR/core/services/feeds/service_test.go: `.New("could not save")`
$DIR/core/services/feeds/service_test.go: `.orm.On("WithDataSource", mock.Anything)`
$DIR/core/services/feeds/service_test.go: `.Return(feeds.ORM(svc.orm))`
$DIR/core/services/feeds/service_test.go: `.ORM(svc.orm)`
$DIR/core/services/feeds/service_test.go: `.jobORM.On("WithDataSource", mock.Anything)`
$DIR/core/services/feeds/service_test.go: `.Return(job.ORM(svc.jobORM))`
$DIR/core/services/feeds/service_test.go: `.ORM(svc.jobORM)`
$DIR/core/services/feeds/service_test.go: `.MustNewDuration(1 * time.Minute)`
$DIR/core/services/feeds/service_test.go: `.orm.On("GetSpec", mock.Anything, spec.ID)`
$DIR/core/services/feeds/service_test.go: `.Return(spec, nil)`
$DIR/core/services/feeds/service_test.go: `.orm.On("GetJobProposal", mock.Anything, jp.ID)`
$DIR/core/services/feeds/service_test.go: `.Return(jp, nil)`
$DIR/core/services/feeds/service_test.go: `.connMgr.On("GetClient", jp.FeedsManagerID)`
$DIR/core/services/feeds/service_test.go: `.Return(svc.fmsClient, nil)`
$DIR/core/services/feeds/service_test.go: `.jobORM.On("AssertBridgesExist", mock.Anything, mock.IsType(pipeline.Pipeline{}))`
$DIR/core/services/feeds/service_test.go: `.IsType(pipeline.Pipeline{})`
$DIR/core/services/feeds/service_test.go: `.Return(nil)`
$DIR/core/services/feeds/service_test.go: `.jobORM.On("FindJobByExternalJobID", mock.Anything, externalJobID)`
$DIR/core/services/feeds/service_test.go: `.Return(job.Job{}, sql.ErrNoRows)`
$DIR/core/services/feeds/service_test.go: `.jobORM.On("FindOCR2JobIDByAddress", mock.Anything, address, (*common.Hash)(nil))`
$DIR/core/services/feeds/service_test.go: `.Return(int32(0), sql.ErrNoRows)`
$DIR/core/services/feeds/service_test.go: `.spawner.
On("CreateJob",
mock.Anything,
mock.Anything,
mock.MatchedBy(func(j *job.Job) bool {
return j.Name.String == "LINK / ETH | version 3 | contract 0x0000000000000000000000000000000000000000"
}),
)`
$DIR/core/services/feeds/service_test.go: `.MatchedBy(func(j *job.Job) bool {
return j.Name.String == "LINK / ETH | version 3 | contract 0x0000000000000000000000000000000000000000"
})`
$DIR/core/services/feeds/service_test.go: `.
Run(func(args mock.Arguments) { (args.Get(2).(*job.Job)).ID = 1 })`
$DIR/core/services/feeds/service_test.go: `.Get(2)`
$DIR/core/services/feeds/service_test.go: `.
Return(nil)`
$DIR/core/services/feeds/service_test.go: `.orm.On("ApproveSpec",
mock.Anything,
spec.ID,
externalJobID,
)`
$DIR/core/services/feeds/service_test.go: `.Return(errors.New("failure"))`
$DIR/core/services/feeds/service_test.go: `.New("failure")`
$DIR/core/services/feeds/service_test.go: `.orm.On("WithDataSource", mock.Anything)`
$DIR/core/services/feeds/service_test.go: `.Return(feeds.ORM(svc.orm))`
$DIR/core/services/feeds/service_test.go: `.ORM(svc.orm)`
$DIR/core/services/feeds/service_test.go: `.jobORM.On("WithDataSource", mock.Anything)`
$DIR/core/services/feeds/service_test.go: `.Return(job.ORM(svc.jobORM))`
$DIR/core/services/feeds/service_test.go: `.ORM(svc.jobORM)`
$DIR/core/services/feeds/service_test.go: `.MustNewDuration(1 * time.Minute)`
$DIR/core/services/feeds/service_test.go: `.orm.On("GetSpec", mock.Anything, spec.ID)`
$DIR/core/services/feeds/service_test.go: `.Return(spec, nil)`
$DIR/core/services/feeds/service_test.go: `.orm.On("GetJobProposal", mock.Anything, jp.ID)`
$DIR/core/services/feeds/service_test.go: `.Return(jp, nil)`
$DIR/core/services/feeds/service_test.go: `.connMgr.On("GetClient", jp.FeedsManagerID)`
$DIR/core/services/feeds/service_test.go: `.Return(svc.fmsClient, nil)`
$DIR/core/services/feeds/service_test.go: `.jobORM.On("AssertBridgesExist", mock.Anything, mock.IsType(pipeline.Pipeline{}))`
$DIR/core/services/feeds/service_test.go: `.IsType(pipeline.Pipeline{})`
$DIR/core/services/feeds/service_test.go: `.Return(nil)`
$DIR/core/services/feeds/service_test.go: `.jobORM.On("FindJobByExternalJobID", mock.Anything, externalJobID)`
$DIR/core/services/feeds/service_test.go: `.Return(job.Job{}, sql.ErrNoRows)`
$DIR/core/services/feeds/service_test.go: `.jobORM.On("FindOCR2JobIDByAddress", mock.Anything, address, (*common.Hash)(nil))`
$DIR/core/services/feeds/service_test.go: `.Return(int32(0), sql.ErrNoRows)`
$DIR/core/services/feeds/service_test.go: `.spawner.
On("CreateJob",
mock.Anything,
mock.Anything,
mock.MatchedBy(func(j *job.Job) bool {
return j.Name.String == "LINK / ETH | version 3 | contract 0x0000000000000000000000000000000000000000"
}),
)`
$DIR/core/services/feeds/service_test.go: `.MatchedBy(func(j *job.Job) bool {
return j.Name.String == "LINK / ETH | version 3 | contract 0x0000000000000000000000000000000000000000"
})`
$DIR/core/services/feeds/service_test.go: `.
Run(func(args mock.Arguments) { (args.Get(2).(*job.Job)).ID = 1 })`
$DIR/core/services/feeds/service_test.go: `.Get(2)`
$DIR/core/services/feeds/service_test.go: `.
Return(nil)`
$DIR/core/services/feeds/service_test.go: `.orm.On("ApproveSpec",
mock.Anything,
spec.ID,
externalJobID,
)`
$DIR/core/services/feeds/service_test.go: `.Return(nil)`
$DIR/core/services/feeds/service_test.go: `.fmsClient.On("ApprovedJob",
mock.MatchedBy(func(ctx context.Context) bool { return true }),
&proto.ApprovedJobRequest{
Uuid: jp.RemoteUUID.String(),
Version: int64(spec.Version),
},
)`
$DIR/core/services/feeds/service_test.go: `.MatchedBy(func(ctx context.Context) bool { return true })`
$DIR/core/services/feeds/service_test.go: `.RemoteUUID.String()`
$DIR/core/services/feeds/service_test.go: `.Return(nil, errors.New("failure"))`
$DIR/core/services/feeds/service_test.go: `.New("failure")`
$DIR/core/services/feeds/service_test.go: `.orm.On("WithDataSource", mock.Anything)`
$DIR/core/services/feeds/service_test.go: `.Return(feeds.ORM(svc.orm))`
$DIR/core/services/feeds/service_test.go: `.ORM(svc.orm)`
$DIR/core/services/feeds/service_test.go: `.jobORM.On("WithDataSource", mock.Anything)`
$DIR/core/services/feeds/service_test.go: `.Return(job.ORM(svc.jobORM))`
$DIR/core/services/feeds/service_test.go: `.ORM(svc.jobORM)`
$DIR/core/services/feeds/service_test.go: `.Run(tc.name, func(t *testing.T) {
svc := setupTestServiceCfg(t, func(c *chainlink.Config, s *chainlink.Secrets) {
c.OCR2.Enabled = testutils.Ptr(true)
if tc.httpTimeout != nil {
c.JobPipeline.HTTPRequest.DefaultTimeout = tc.httpTimeout
}
})
if tc.before != nil {
tc.before(svc)
}
err := svc.ApproveSpec(ctx, tc.id, tc.force)
if tc.wantErr != "" {
require.Error(t, err)
assert.EqualError(t, err, tc.wantErr)
} else {
require.NoError(t, err)
}
})`
$DIR/core/services/feeds/service_test.go: `.Ptr(true)`
$DIR/core/services/feeds/service_test.go: `.before(svc)`
$DIR/core/services/feeds/service_test.go: `.ApproveSpec(ctx, tc.id, tc.force)`
$DIR/core/services/feeds/service_test.go: `.HexToHash(feedIDHex)`
$DIR/core/services/feeds/service_test.go: `.New()`
$DIR/core/services/feeds/service_test.go: `.Context(t)`
$DIR/core/services/feeds/service_test.go: `.Sprintf(defn, externalJobID.String())`
$DIR/core/services/feeds/service_test.go: `.String()`
$DIR/core/services/feeds/service_test.go: `.Sprintf(defn, externalJobID.String())`
$DIR/core/services/feeds/service_test.go: `.String()`
$DIR/core/services/feeds/service_test.go: `.Sprintf(defn, externalJobID.String())`
$DIR/core/services/feeds/service_test.go: `.String()`
$DIR/core/services/feeds/service_test.go: `.MustNewDuration(1 * time.Minute)`
$DIR/core/services/feeds/service_test.go: `.connMgr.On("GetClient", jp.FeedsManagerID)`
$DIR/core/services/feeds/service_test.go: `.Return(svc.fmsClient, nil)`
$DIR/core/services/feeds/service_test.go: `.orm.On("GetSpec", mock.Anything, spec.ID)`
$DIR/core/services/feeds/service_test.go: `.Return(spec, nil)`
$DIR/core/services/feeds/service_test.go: `.orm.On("GetJobProposal", mock.Anything, jp.ID)`
$DIR/core/services/feeds/service_test.go: `.Return(jp, nil)`
$DIR/core/services/feeds/service_test.go: `.jobORM.On("AssertBridgesExist", mock.Anything, mock.IsType(pipeline.Pipeline{}))`
$DIR/core/services/feeds/service_test.go: `.IsType(pipeline.Pipeline{})`
$DIR/core/services/feeds/service_test.go: `.Return(nil)`
$DIR/core/services/feeds/service_test.go: `.jobORM.On("FindJobByExternalJobID", mock.Anything, externalJobID)`
$DIR/core/services/feeds/service_test.go: `.Return(job.Job{}, sql.ErrNoRows)`
$DIR/core/services/feeds/service_test.go: `.jobORM.On("FindOCR2JobIDByAddress", mock.Anything, address, (*common.Hash)(nil))`
$DIR/core/services/feeds/service_test.go: `.Return(int32(0), sql.ErrNoRows)`
$DIR/core/services/feeds/service_test.go: `.spawner.
On("CreateJob",
mock.Anything,
mock.Anything,
mock.MatchedBy(func(j *job.Job) bool {
return j.Name.String == "LINK / ETH | version 3 | contract 0x0000000000000000000000000000000000000000"
}),
)`
$DIR/core/services/feeds/service_test.go: `.MatchedBy(func(j *job.Job) bool {
return j.Name.String == "LINK / ETH | version 3 | contract 0x0000000000000000000000000000000000000000"
})`
$DIR/core/services/feeds/service_test.go: `.
Run(func(args mock.Arguments) { (args.Get(2).(*job.Job)).ID = 1 })`
$DIR/core/services/feeds/service_test.go: `.Get(2)`
$DIR/core/services/feeds/service_test.go: `.
Return(nil)`
$DIR/core/services/feeds/service_test.go: `.orm.On("ApproveSpec",
mock.Anything,
spec.ID,
externalJobID,
)`
$DIR/core/services/feeds/service_test.go: `.Return(nil)`
$DIR/core/services/feeds/service_test.go: `.fmsClient.On("ApprovedJob",
mock.MatchedBy(func(ctx context.Context) bool { return true }),
&proto.ApprovedJobRequest{
Uuid: jp.RemoteUUID.String(),
Version: int64(spec.Version),
},
)`
$DIR/core/services/feeds/service_test.go: `.MatchedBy(func(ctx context.Context) bool { return true })`
$DIR/core/services/feeds/service_test.go: `.RemoteUUID.String()`
$DIR/core/services/feeds/service_test.go: `.Return(&proto.ApprovedJobResponse{}, nil)`
$DIR/core/services/feeds/service_test.go: `.orm.On("CountJobProposalsByStatus", mock.Anything)`
$DIR/core/services/feeds/service_test.go: `.Return(&feeds.JobProposalCounts{}, nil)`
$DIR/core/services/feeds/service_test.go: `.orm.On("WithDataSource", mock.Anything)`
$DIR/core/services/feeds/service_test.go: `.Return(feeds.ORM(svc.orm))`
$DIR/core/services/feeds/service_test.go: `.ORM(svc.orm)`
$DIR/core/services/feeds/service_test.go: `.jobORM.On("WithDataSource", mock.Anything)`
$DIR/core/services/feeds/service_test.go: `.Return(job.ORM(svc.jobORM))`
$DIR/core/services/feeds/service_test.go: `.ORM(svc.jobORM)`
$DIR/core/services/feeds/service_test.go: `.MustNewDuration(1 * time.Minute)`
$DIR/core/services/feeds/service_test.go: `.connMgr.On("GetClient", jp.FeedsManagerID)`
$DIR/core/services/feeds/service_test.go: `.Return(svc.fmsClient, nil)`
$DIR/core/services/feeds/service_test.go: `.orm.On("GetSpec", mock.Anything, cancelledSpec.ID, mock.Anything)`
$DIR/core/services/feeds/service_test.go: `.Return(cancelledSpec, nil)`
$DIR/core/services/feeds/service_test.go: `.orm.On("GetJobProposal", mock.Anything, jp.ID)`
$DIR/core/services/feeds/service_test.go: `.Return(jp, nil)`
$DIR/core/services/feeds/service_test.go: `.orm.On("GetLatestSpec", mock.Anything, cancelledSpec.JobProposalID)`
$DIR/core/services/feeds/service_test.go: `.Return(cancelledSpec, nil)`
$DIR/core/services/feeds/service_test.go: `.jobORM.On("AssertBridgesExist", mock.Anything, mock.IsType(pipeline.Pipeline{}))`
$DIR/core/services/feeds/service_test.go: `.IsType(pipeline.Pipeline{})`
$DIR/core/services/feeds/service_test.go: `.Return(nil)`
$DIR/core/services/feeds/service_test.go: `.jobORM.On("FindJobByExternalJobID", mock.Anything, externalJobID)`
$DIR/core/services/feeds/service_test.go: `.Return(job.Job{}, sql.ErrNoRows)`
$DIR/core/services/feeds/service_test.go: `.jobORM.On("FindOCR2JobIDByAddress", mock.Anything, address, (*common.Hash)(nil))`
$DIR/core/services/feeds/service_test.go: `.Return(int32(0), sql.ErrNoRows)`
$DIR/core/services/feeds/service_test.go: `.spawner.
On("CreateJob",
mock.Anything,
mock.Anything,
mock.MatchedBy(func(j *job.Job) bool {
return j.Name.String == "LINK / ETH | version 3 | contract 0x0000000000000000000000000000000000000000"
}),
)`
$DIR/core/services/feeds/service_test.go: `.MatchedBy(func(j *job.Job) bool {
return j.Name.String == "LINK / ETH | version 3 | contract 0x0000000000000000000000000000000000000000"
})`
$DIR/core/services/feeds/service_test.go: `.
Run(func(args mock.Arguments) { (args.Get(2).(*job.Job)).ID = 1 })`
$DIR/core/services/feeds/service_test.go: `.Get(2)`
$DIR/core/services/feeds/service_test.go: `.
Return(nil)`
$DIR/core/services/feeds/service_test.go: `.orm.On("ApproveSpec",
mock.Anything,
cancelledSpec.ID,
externalJobID,
)`
$DIR/core/services/feeds/service_test.go: `.Return(nil)`
$DIR/core/services/feeds/service_test.go: `.fmsClient.On("ApprovedJob",
mock.MatchedBy(func(ctx context.Context) bool { return true }),
&proto.ApprovedJobRequest{
Uuid: jp.RemoteUUID.String(),
Version: int64(spec.Version),
},
)`
$DIR/core/services/feeds/service_test.go: `.MatchedBy(func(ctx context.Context) bool { return true })`
$DIR/core/services/feeds/service_test.go: `.RemoteUUID.String()`
$DIR/core/services/feeds/service_test.go: `.Return(&proto.ApprovedJobResponse{}, nil)`
$DIR/core/services/feeds/service_test.go: `.orm.On("CountJobProposalsByStatus", mock.Anything)`
$DIR/core/services/feeds/service_test.go: `.Return(&feeds.JobProposalCounts{}, nil)`
$DIR/core/services/feeds/service_test.go: `.orm.On("WithDataSource", mock.Anything)`
$DIR/core/services/feeds/service_test.go: `.Return(feeds.ORM(svc.orm))`
$DIR/core/services/feeds/service_test.go: `.ORM(svc.orm)`
$DIR/core/services/feeds/service_test.go: `.jobORM.On("WithDataSource", mock.Anything)`
$DIR/core/services/feeds/service_test.go: `.Return(job.ORM(svc.jobORM))`
$DIR/core/services/feeds/service_test.go: `.ORM(svc.jobORM)`
$DIR/core/services/feeds/service_test.go: `.orm.On("GetSpec", mock.Anything, cancelledSpec.ID, mock.Anything)`
$DIR/core/services/feeds/service_test.go: `.Return(cancelledSpec, nil)`
$DIR/core/services/feeds/service_test.go: `.orm.On("GetJobProposal", mock.Anything, jp.ID)`
$DIR/core/services/feeds/service_test.go: `.Return(jp, nil)`
$DIR/core/services/feeds/service_test.go: `.orm.On("GetLatestSpec", mock.Anything, cancelledSpec.JobProposalID)`
$DIR/core/services/feeds/service_test.go: `.Return(&feeds.JobProposalSpec{
ID: 21,
Status: feeds.SpecStatusPending,
JobProposalID: jp.ID,
Version: 2,
Definition: defn,
}, nil)`
$DIR/core/services/feeds/service_test.go: `.orm.On("GetSpec", mock.Anything, cancelledSpec.ID, mock.Anything)`
$DIR/core/services/feeds/service_test.go: `.Return(rejectedSpec, nil)`
$DIR/core/services/feeds/service_test.go: `.orm.On("GetJobProposal", mock.Anything, jp.ID)`
$DIR/core/services/feeds/service_test.go: `.Return(jp, nil)`
$DIR/core/services/feeds/service_test.go: `.MustNewDuration(1 * time.Minute)`
$DIR/core/services/feeds/service_test.go: `.connMgr.On("GetClient", jp.FeedsManagerID)`
$DIR/core/services/feeds/service_test.go: `.Return(svc.fmsClient, nil)`
$DIR/core/services/feeds/service_test.go: `.orm.On("GetSpec", mock.Anything, spec.ID)`
$DIR/core/services/feeds/service_test.go: `.Return(spec, nil)`
$DIR/core/services/feeds/service_test.go: `.orm.On("GetJobProposal", mock.Anything, jp.ID)`
$DIR/core/services/feeds/service_test.go: `.Return(jp, nil)`
$DIR/core/services/feeds/service_test.go: `.jobORM.On("AssertBridgesExist", mock.Anything, mock.IsType(pipeline.Pipeline{}))`
$DIR/core/services/feeds/service_test.go: `.IsType(pipeline.Pipeline{})`
$DIR/core/services/feeds/service_test.go: `.Return(nil)`
$DIR/core/services/feeds/service_test.go: `.jobORM.On("FindJobByExternalJobID", mock.Anything, externalJobID)`
$DIR/core/services/feeds/service_test.go: `.Return(job.Job{}, sql.ErrNoRows)`
$DIR/core/services/feeds/service_test.go: `.jobORM.On("FindOCR2JobIDByAddress", mock.Anything, address, (*common.Hash)(nil))`
$DIR/core/services/feeds/service_test.go: `.Return(j.ID, nil)`
$DIR/core/services/feeds/service_test.go: `.orm.On("WithDataSource", mock.Anything)`
$DIR/core/services/feeds/service_test.go: `.Return(feeds.ORM(svc.orm))`
$DIR/core/services/feeds/service_test.go: `.ORM(svc.orm)`
$DIR/core/services/feeds/service_test.go: `.jobORM.On("WithDataSource", mock.Anything)`
$DIR/core/services/feeds/service_test.go: `.Return(job.ORM(svc.jobORM))`
$DIR/core/services/feeds/service_test.go: `.ORM(svc.jobORM)`
$DIR/core/services/feeds/service_test.go: `.MustNewDuration(1 * time.Minute)`
$DIR/core/services/feeds/service_test.go: `.connMgr.On("GetClient", jp.FeedsManagerID)`
$DIR/core/services/feeds/service_test.go: `.Return(svc.fmsClient, nil)`
$DIR/core/services/feeds/service_test.go: `.orm.On("GetSpec", mock.Anything, spec.ID)`
$DIR/core/services/feeds/service_test.go: `.Return(spec, nil)`
$DIR/core/services/feeds/service_test.go: `.orm.On("GetJobProposal", mock.Anything, jp.ID)`
$DIR/core/services/feeds/service_test.go: `.Return(jp, nil)`
$DIR/core/services/feeds/service_test.go: `.jobORM.On("AssertBridgesExist", mock.Anything, mock.IsType(pipeline.Pipeline{}))`
$DIR/core/services/feeds/service_test.go: `.IsType(pipeline.Pipeline{})`
$DIR/core/services/feeds/service_test.go: `.Return(nil)`
$DIR/core/services/feeds/service_test.go: `.orm.EXPECT()`
$DIR/core/services/feeds/service_test.go: `.GetApprovedSpec(mock.Anything, jp.ID)`
$DIR/core/services/feeds/service_test.go: `.Return(nil, sql.ErrNoRows)`
$DIR/core/services/feeds/service_test.go: `.jobORM.On("FindJobByExternalJobID", mock.Anything, externalJobID)`
$DIR/core/services/feeds/service_test.go: `.Return(job.Job{}, sql.ErrNoRows)`
$DIR/core/services/feeds/service_test.go: `.jobORM.On("FindOCR2JobIDByAddress", mock.Anything, address, (*common.Hash)(nil))`
$DIR/core/services/feeds/service_test.go: `.Return(j.ID, nil)`
$DIR/core/services/feeds/service_test.go: `.spawner.On("DeleteJob", mock.Anything, mock.Anything, j.ID)`
$DIR/core/services/feeds/service_test.go: `.Return(nil)`
$DIR/core/services/feeds/service_test.go: `.spawner.
On("CreateJob",
mock.Anything,
mock.Anything,
mock.MatchedBy(func(j *job.Job) bool {
return j.Name.String == "LINK / ETH | version 3 | contract 0x0000000000000000000000000000000000000000"
}),
)`
$DIR/core/services/feeds/service_test.go: `.MatchedBy(func(j *job.Job) bool {
return j.Name.String == "LINK / ETH | version 3 | contract 0x0000000000000000000000000000000000000000"
})`
$DIR/core/services/feeds/service_test.go: `.
Run(func(args mock.Arguments) { (args.Get(2).(*job.Job)).ID = 1 })`
$DIR/core/services/feeds/service_test.go: `.Get(2)`
$DIR/core/services/feeds/service_test.go: `.
Return(nil)`
$DIR/core/services/feeds/service_test.go: `.orm.On("ApproveSpec",
mock.Anything,
spec.ID,
externalJobID,
)`
$DIR/core/services/feeds/service_test.go: `.Return(nil)`
$DIR/core/services/feeds/service_test.go: `.fmsClient.On("ApprovedJob",
mock.MatchedBy(func(ctx context.Context) bool { return true }),
&proto.ApprovedJobRequest{
Uuid: jp.RemoteUUID.String(),
Version: int64(spec.Version),
},
)`
$DIR/core/services/feeds/service_test.go: `.MatchedBy(func(ctx context.Context) bool { return true })`
$DIR/core/services/feeds/service_test.go: `.RemoteUUID.String()`
$DIR/core/services/feeds/service_test.go: `.Return(&proto.ApprovedJobResponse{}, nil)`
$DIR/core/services/feeds/service_test.go: `.orm.On("CountJobProposalsByStatus", mock.Anything)`
$DIR/core/services/feeds/service_test.go: `.Return(&feeds.JobProposalCounts{}, nil)`
$DIR/core/services/feeds/service_test.go: `.orm.On("WithDataSource", mock.Anything)`
$DIR/core/services/feeds/service_test.go: `.Return(feeds.ORM(svc.orm))`
$DIR/core/services/feeds/service_test.go: `.ORM(svc.orm)`
$DIR/core/services/feeds/service_test.go: `.jobORM.On("WithDataSource", mock.Anything)`
$DIR/core/services/feeds/service_test.go: `.Return(job.ORM(svc.jobORM))`
$DIR/core/services/feeds/service_test.go: `.ORM(svc.jobORM)`
$DIR/core/services/feeds/service_test.go: `.MustNewDuration(1 * time.Minute)`
$DIR/core/services/feeds/service_test.go: `.connMgr.On("GetClient", jp.FeedsManagerID)`
$DIR/core/services/feeds/service_test.go: `.Return(svc.fmsClient, nil)`
$DIR/core/services/feeds/service_test.go: `.orm.On("GetSpec", mock.Anything, spec.ID)`
$DIR/core/services/feeds/service_test.go: `.Return(&feeds.JobProposalSpec{
ID: 20,
Status: feeds.SpecStatusPending,
JobProposalID: jp.ID,
Version: 1,
Definition: fmt.Sprintf(defn2, externalJobID.String(), feedID),
}, nil)`
$DIR/core/services/feeds/service_test.go: `.Sprintf(defn2, externalJobID.String(), feedID)`
$DIR/core/services/feeds/service_test.go: `.String()`
$DIR/core/services/feeds/service_test.go: `.orm.On("GetJobProposal", mock.Anything, jp.ID)`
$DIR/core/services/feeds/service_test.go: `.Return(jp, nil)`
$DIR/core/services/feeds/service_test.go: `.jobORM.On("AssertBridgesExist", mock.Anything, mock.IsType(pipeline.Pipeline{}))`
$DIR/core/services/feeds/service_test.go: `.IsType(pipeline.Pipeline{})`
$DIR/core/services/feeds/service_test.go: `.Return(nil)`
$DIR/core/services/feeds/service_test.go: `.orm.EXPECT()`
$DIR/core/services/feeds/service_test.go: `.GetApprovedSpec(mock.Anything, jp.ID)`
$DIR/core/services/feeds/service_test.go: `.Return(nil, sql.ErrNoRows)`
$DIR/core/services/feeds/service_test.go: `.jobORM.On("FindJobByExternalJobID", mock.Anything, externalJobID)`
$DIR/core/services/feeds/service_test.go: `.Return(job.Job{}, sql.ErrNoRows)`
$DIR/core/services/feeds/service_test.go: `.jobORM.On("FindOCR2JobIDByAddress", mock.Anything, address, &feedID)`
$DIR/core/services/feeds/service_test.go: `.Return(j.ID, nil)`
$DIR/core/services/feeds/service_test.go: `.spawner.On("DeleteJob", mock.Anything, mock.Anything, j.ID)`
$DIR/core/services/feeds/service_test.go: `.Return(nil)`
$DIR/core/services/feeds/service_test.go: `.spawner.
On("CreateJob",
mock.Anything,
mock.Anything,
mock.MatchedBy(func(j *job.Job) bool {
return j.Name.String == "LINK / ETH | version 3 | contract 0x0000000000000000000000000000000000000000"
}),
)`
$DIR/core/services/feeds/service_test.go: `.MatchedBy(func(j *job.Job) bool {
return j.Name.String == "LINK / ETH | version 3 | contract 0x0000000000000000000000000000000000000000"
})`
$DIR/core/services/feeds/service_test.go: `.
Run(func(args mock.Arguments) { (args.Get(2).(*job.Job)).ID = 1 })`
$DIR/core/services/feeds/service_test.go: `.Get(2)`
$DIR/core/services/feeds/service_test.go: `.
Return(nil)`
$DIR/core/services/feeds/service_test.go: `.orm.On("ApproveSpec",
mock.Anything,
spec.ID,
externalJobID,
)`
$DIR/core/services/feeds/service_test.go: `.Return(nil)`
$DIR/core/services/feeds/service_test.go: `.fmsClient.On("ApprovedJob",
mock.MatchedBy(func(ctx context.Context) bool { return true }),
&proto.ApprovedJobRequest{
Uuid: jp.RemoteUUID.String(),
Version: int64(spec.Version),
},
)`
$DIR/core/services/feeds/service_test.go: `.MatchedBy(func(ctx context.Context) bool { return true })`
$DIR/core/services/feeds/service_test.go: `.RemoteUUID.String()`
$DIR/core/services/feeds/service_test.go: `.Return(&proto.ApprovedJobResponse{}, nil)`
$DIR/core/services/feeds/service_test.go: `.orm.On("CountJobProposalsByStatus", mock.Anything)`
$DIR/core/services/feeds/service_test.go: `.Return(&feeds.JobProposalCounts{}, nil)`
$DIR/core/services/feeds/service_test.go: `.orm.On("WithDataSource", mock.Anything)`
$DIR/core/services/feeds/service_test.go: `.Return(feeds.ORM(svc.orm))`
$DIR/core/services/feeds/service_test.go: `.ORM(svc.orm)`
$DIR/core/services/feeds/service_test.go: `.jobORM.On("WithDataSource", mock.Anything)`
$DIR/core/services/feeds/service_test.go: `.Return(job.ORM(svc.jobORM))`
$DIR/core/services/feeds/service_test.go: `.ORM(svc.jobORM)`
$DIR/core/services/feeds/service_test.go: `.MustNewDuration(1 * time.Minute)`
$DIR/core/services/feeds/service_test.go: `.connMgr.On("GetClient", jp.FeedsManagerID)`
$DIR/core/services/feeds/service_test.go: `.Return(svc.fmsClient, nil)`
$DIR/core/services/feeds/service_test.go: `.orm.On("GetSpec", mock.Anything, spec.ID)`
$DIR/core/services/feeds/service_test.go: `.Return(spec, nil)`
$DIR/core/services/feeds/service_test.go: `.orm.On("GetJobProposal", mock.Anything, jp.ID)`
$DIR/core/services/feeds/service_test.go: `.Return(jp, nil)`
$DIR/core/services/feeds/service_test.go: `.jobORM.On("AssertBridgesExist", mock.Anything, mock.IsType(pipeline.Pipeline{}))`
$DIR/core/services/feeds/service_test.go: `.IsType(pipeline.Pipeline{})`
$DIR/core/services/feeds/service_test.go: `.Return(nil)`
$DIR/core/services/feeds/service_test.go: `.orm.EXPECT()`
$DIR/core/services/feeds/service_test.go: `.GetApprovedSpec(mock.Anything, jp.ID)`
$DIR/core/services/feeds/service_test.go: `.Return(&feeds.JobProposalSpec{ID: 100}, nil)`
$DIR/core/services/feeds/service_test.go: `.orm.EXPECT()`
$DIR/core/services/feeds/service_test.go: `.CancelSpec(mock.Anything, int64(100))`
$DIR/core/services/feeds/service_test.go: `.Return(nil)`
$DIR/core/services/feeds/service_test.go: `.jobORM.On("FindJobByExternalJobID", mock.Anything, externalJobID)`
$DIR/core/services/feeds/service_test.go: `.Return(job.Job{}, sql.ErrNoRows)`
$DIR/core/services/feeds/service_test.go: `.jobORM.On("FindOCR2JobIDByAddress", mock.Anything, address, (*common.Hash)(nil))`
$DIR/core/services/feeds/service_test.go: `.Return(j.ID, nil)`
$DIR/core/services/feeds/service_test.go: `.spawner.On("DeleteJob", mock.Anything, mock.Anything, j.ID)`
$DIR/core/services/feeds/service_test.go: `.Return(nil)`
$DIR/core/services/feeds/service_test.go: `.spawner.
On("CreateJob",
mock.Anything,
mock.Anything,
mock.MatchedBy(func(j *job.Job) bool {
return j.Name.String == "LINK / ETH | version 3 | contract 0x0000000000000000000000000000000000000000"
}),
)`
$DIR/core/services/feeds/service_test.go: `.MatchedBy(func(j *job.Job) bool {
return j.Name.String == "LINK / ETH | version 3 | contract 0x0000000000000000000000000000000000000000"
})`
$DIR/core/services/feeds/service_test.go: `.
Run(func(args mock.Arguments) { (args.Get(2).(*job.Job)).ID = 1 })`
$DIR/core/services/feeds/service_test.go: `.Get(2)`
$DIR/core/services/feeds/service_test.go: `.
Return(nil)`
$DIR/core/services/feeds/service_test.go: `.orm.On("ApproveSpec",
mock.Anything,
spec.ID,
externalJobID,
)`
$DIR/core/services/feeds/service_test.go: `.Return(nil)`
$DIR/core/services/feeds/service_test.go: `.fmsClient.On("ApprovedJob",
mock.MatchedBy(func(ctx context.Context) bool { return true }),
&proto.ApprovedJobRequest{
Uuid: jp.RemoteUUID.String(),
Version: int64(spec.Version),
},
)`
$DIR/core/services/feeds/service_test.go: `.MatchedBy(func(ctx context.Context) bool { return true })`
$DIR/core/services/feeds/service_test.go: `.RemoteUUID.String()`
$DIR/core/services/feeds/service_test.go: `.Return(&proto.ApprovedJobResponse{}, nil)`
$DIR/core/services/feeds/service_test.go: `.orm.On("CountJobProposalsByStatus", mock.Anything)`
$DIR/core/services/feeds/service_test.go: `.Return(&feeds.JobProposalCounts{}, nil)`
$DIR/core/services/feeds/service_test.go: `.orm.On("WithDataSource", mock.Anything)`
$DIR/core/services/feeds/service_test.go: `.Return(feeds.ORM(svc.orm))`
$DIR/core/services/feeds/service_test.go: `.ORM(svc.orm)`
$DIR/core/services/feeds/service_test.go: `.jobORM.On("WithDataSource", mock.Anything)`
$DIR/core/services/feeds/service_test.go: `.Return(job.ORM(svc.jobORM))`
$DIR/core/services/feeds/service_test.go: `.ORM(svc.jobORM)`
$DIR/core/services/feeds/service_test.go: `.orm.On("GetSpec", mock.Anything, spec.ID)`
$DIR/core/services/feeds/service_test.go: `.Return(nil, errors.New("Not Found"))`
$DIR/core/services/feeds/service_test.go: `.New("Not Found")`
$DIR/core/services/feeds/service_test.go: `.orm.On("GetSpec", mock.Anything, spec.ID)`
$DIR/core/services/feeds/service_test.go: `.Return(aspec, nil)`
$DIR/core/services/feeds/service_test.go: `.orm.On("GetJobProposal", mock.Anything, jp.ID)`
$DIR/core/services/feeds/service_test.go: `.Return(jp, nil)`
$DIR/core/services/feeds/service_test.go: `.orm.On("GetSpec", mock.Anything, rspec.ID)`
$DIR/core/services/feeds/service_test.go: `.Return(rspec, nil)`
$DIR/core/services/feeds/service_test.go: `.orm.On("GetJobProposal", mock.Anything, jp.ID)`
$DIR/core/services/feeds/service_test.go: `.Return(jp, nil)`
$DIR/core/services/feeds/service_test.go: `.orm.On("GetSpec", mock.Anything, spec.ID)`
$DIR/core/services/feeds/service_test.go: `.Return(spec, nil)`
$DIR/core/services/feeds/service_test.go: `.orm.On("GetJobProposal", mock.Anything, jp.ID)`
$DIR/core/services/feeds/service_test.go: `.Return(nil, errors.New("Not Found"))`
$DIR/core/services/feeds/service_test.go: `.New("Not Found")`
$DIR/core/services/feeds/service_test.go: `.MustNewDuration(1 * time.Minute)`
$DIR/core/services/feeds/service_test.go: `.connMgr.On("GetClient", jp.FeedsManagerID)`
$DIR/core/services/feeds/service_test.go: `.Return(svc.fmsClient, nil)`
$DIR/core/services/feeds/service_test.go: `.orm.On("GetSpec", mock.Anything, spec.ID)`
$DIR/core/services/feeds/service_test.go: `.Return(spec, nil)`
$DIR/core/services/feeds/service_test.go: `.orm.On("GetJobProposal", mock.Anything, jp.ID)`
$DIR/core/services/feeds/service_test.go: `.Return(jp, nil)`
$DIR/core/services/feeds/service_test.go: `.jobORM.On("AssertBridgesExist", mock.Anything, mock.IsType(pipeline.Pipeline{}))`
$DIR/core/services/feeds/service_test.go: `.IsType(pipeline.Pipeline{})`
$DIR/core/services/feeds/service_test.go: `.Return(errors.New("bridges do not exist"))`
$DIR/core/services/feeds/service_test.go: `.New("bridges do not exist")`
$DIR/core/services/feeds/service_test.go: `.orm.On("GetSpec", mock.Anything, spec.ID)`
$DIR/core/services/feeds/service_test.go: `.Return(spec, nil)`
$DIR/core/services/feeds/service_test.go: `.orm.On("GetJobProposal", mock.Anything, jp.ID)`
$DIR/core/services/feeds/service_test.go: `.Return(jp, nil)`
$DIR/core/services/feeds/service_test.go: `.connMgr.On("GetClient", jp.FeedsManagerID)`
$DIR/core/services/feeds/service_test.go: `.Return(nil, errors.New("Not Connected"))`
$DIR/core/services/feeds/service_test.go: `.New("Not Connected")`
$DIR/core/services/feeds/service_test.go: `.MustNewDuration(1 * time.Minute)`
$DIR/core/services/feeds/service_test.go: `.orm.On("GetSpec", mock.Anything, spec.ID)`
$DIR/core/services/feeds/service_test.go: `.Return(spec, nil)`
$DIR/core/services/feeds/service_test.go: `.orm.On("GetJobProposal", mock.Anything, jp.ID)`
$DIR/core/services/feeds/service_test.go: `.Return(jp, nil)`
$DIR/core/services/feeds/service_test.go: `.connMgr.On("GetClient", jp.FeedsManagerID)`
$DIR/core/services/feeds/service_test.go: `.Return(svc.fmsClient, nil)`
$DIR/core/services/feeds/service_test.go: `.jobORM.On("AssertBridgesExist", mock.Anything, mock.IsType(pipeline.Pipeline{}))`
$DIR/core/services/feeds/service_test.go: `.IsType(pipeline.Pipeline{})`
$DIR/core/services/feeds/service_test.go: `.Return(nil)`
$DIR/core/services/feeds/service_test.go: `.jobORM.On("FindJobByExternalJobID", mock.Anything, externalJobID)`
$DIR/core/services/feeds/service_test.go: `.Return(job.Job{}, sql.ErrNoRows)`
$DIR/core/services/feeds/service_test.go: `.jobORM.On("FindOCR2JobIDByAddress", mock.Anything, address, (*common.Hash)(nil))`
$DIR/core/services/feeds/service_test.go: `.Return(int32(0), sql.ErrNoRows)`
$DIR/core/services/feeds/service_test.go: `.spawner.
On("CreateJob",
mock.Anything,
mock.Anything,
mock.MatchedBy(func(j *job.Job) bool {
return j.Name.String == "LINK / ETH | version 3 | contract 0x0000000000000000000000000000000000000000"
}),
)`
$DIR/core/services/feeds/service_test.go: `.MatchedBy(func(j *job.Job) bool {
return j.Name.String == "LINK / ETH | version 3 | contract 0x0000000000000000000000000000000000000000"
})`
$DIR/core/services/feeds/service_test.go: `.
Return(errors.New("could not save"))`
$DIR/core/services/feeds/service_test.go: `.New("could not save")`
$DIR/core/services/feeds/service_test.go: `.orm.On("WithDataSource", mock.Anything)`
$DIR/core/services/feeds/service_test.go: `.Return(feeds.ORM(svc.orm))`
$DIR/core/services/feeds/service_test.go: `.ORM(svc.orm)`
$DIR/core/services/feeds/service_test.go: `.jobORM.On("WithDataSource", mock.Anything)`
$DIR/core/services/feeds/service_test.go: `.Return(job.ORM(svc.jobORM))`
$DIR/core/services/feeds/service_test.go: `.ORM(svc.jobORM)`
$DIR/core/services/feeds/service_test.go: `.MustNewDuration(1 * time.Minute)`
$DIR/core/services/feeds/service_test.go: `.orm.On("GetSpec", mock.Anything, spec.ID)`
$DIR/core/services/feeds/service_test.go: `.Return(spec, nil)`
$DIR/core/services/feeds/service_test.go: `.orm.On("GetJobProposal", mock.Anything, jp.ID)`
$DIR/core/services/feeds/service_test.go: `.Return(jp, nil)`
$DIR/core/services/feeds/service_test.go: `.connMgr.On("GetClient", jp.FeedsManagerID)`
$DIR/core/services/feeds/service_test.go: `.Return(svc.fmsClient, nil)`
$DIR/core/services/feeds/service_test.go: `.jobORM.On("AssertBridgesExist", mock.Anything, mock.IsType(pipeline.Pipeline{}))`
$DIR/core/services/feeds/service_test.go: `.IsType(pipeline.Pipeline{})`
$DIR/core/services/feeds/service_test.go: `.Return(nil)`
$DIR/core/services/feeds/service_test.go: `.jobORM.On("FindJobByExternalJobID", mock.Anything, externalJobID)`
$DIR/core/services/feeds/service_test.go: `.Return(job.Job{}, sql.ErrNoRows)`
$DIR/core/services/feeds/service_test.go: `.jobORM.On("FindOCR2JobIDByAddress", mock.Anything, address, (*common.Hash)(nil), mock.Anything)`
$DIR/core/services/feeds/service_test.go: `.Return(int32(0), sql.ErrNoRows)`
$DIR/core/services/feeds/service_test.go: `.spawner.
On("CreateJob",
mock.Anything,
mock.Anything,
mock.MatchedBy(func(j *job.Job) bool {
return j.Name.String == "LINK / ETH | version 3 | contract 0x0000000000000000000000000000000000000000"
}),
)`
$DIR/core/services/feeds/service_test.go: `.MatchedBy(func(j *job.Job) bool {
return j.Name.String == "LINK / ETH | version 3 | contract 0x0000000000000000000000000000000000000000"
})`
$DIR/core/services/feeds/service_test.go: `.
Run(func(args mock.Arguments) { (args.Get(2).(*job.Job)).ID = 1 })`
$DIR/core/services/feeds/service_test.go: `.Get(2)`
$DIR/core/services/feeds/service_test.go: `.
Return(nil)`
$DIR/core/services/feeds/service_test.go: `.orm.On("ApproveSpec",
mock.Anything,
spec.ID,
externalJobID,
)`
$DIR/core/services/feeds/service_test.go: `.Return(errors.New("failure"))`
$DIR/core/services/feeds/service_test.go: `.New("failure")`
$DIR/core/services/feeds/service_test.go: `.orm.On("WithDataSource", mock.Anything)`
$DIR/core/services/feeds/service_test.go: `.Return(feeds.ORM(svc.orm))`
$DIR/core/services/feeds/service_test.go: `.ORM(svc.orm)`
$DIR/core/services/feeds/service_test.go: `.jobORM.On("WithDataSource", mock.Anything)`
$DIR/core/services/feeds/service_test.go: `.Return(job.ORM(svc.jobORM))`
$DIR/core/services/feeds/service_test.go: `.ORM(svc.jobORM)`
$DIR/core/services/feeds/service_test.go: `.MustNewDuration(1 * time.Minute)`
$DIR/core/services/feeds/service_test.go: `.orm.On("GetSpec", mock.Anything, spec.ID)`
$DIR/core/services/feeds/service_test.go: `.Return(spec, nil)`
$DIR/core/services/feeds/service_test.go: `.orm.On("GetJobProposal", mock.Anything, jp.ID)`
$DIR/core/services/feeds/service_test.go: `.Return(jp, nil)`
$DIR/core/services/feeds/service_test.go: `.connMgr.On("GetClient", jp.FeedsManagerID)`
$DIR/core/services/feeds/service_test.go: `.Return(svc.fmsClient, nil)`
$DIR/core/services/feeds/service_test.go: `.jobORM.On("AssertBridgesExist", mock.Anything, mock.IsType(pipeline.Pipeline{}))`
$DIR/core/services/feeds/service_test.go: `.IsType(pipeline.Pipeline{})`
$DIR/core/services/feeds/service_test.go: `.Return(nil)`
$DIR/core/services/feeds/service_test.go: `.jobORM.On("FindJobByExternalJobID", mock.Anything, externalJobID)`
$DIR/core/services/feeds/service_test.go: `.Return(job.Job{}, sql.ErrNoRows)`
$DIR/core/services/feeds/service_test.go: `.jobORM.On("FindOCR2JobIDByAddress", mock.Anything, address, (*common.Hash)(nil))`
$DIR/core/services/feeds/service_test.go: `.Return(int32(0), sql.ErrNoRows)`
$DIR/core/services/feeds/service_test.go: `.spawner.
On("CreateJob",
mock.Anything,
mock.Anything,
mock.MatchedBy(func(j *job.Job) bool {
return j.Name.String == "LINK / ETH | version 3 | contract 0x0000000000000000000000000000000000000000"
}),
)`
$DIR/core/services/feeds/service_test.go: `.MatchedBy(func(j *job.Job) bool {
return j.Name.String == "LINK / ETH | version 3 | contract 0x0000000000000000000000000000000000000000"
})`
$DIR/core/services/feeds/service_test.go: `.
Run(func(args mock.Arguments) { (args.Get(2).(*job.Job)).ID = 1 })`
$DIR/core/services/feeds/service_test.go: `.Get(2)`
$DIR/core/services/feeds/service_test.go: `.
Return(nil)`
$DIR/core/services/feeds/service_test.go: `.orm.On("ApproveSpec",
mock.Anything,
spec.ID,
externalJobID,
)`
$DIR/core/services/feeds/service_test.go: `.Return(nil)`
$DIR/core/services/feeds/service_test.go: `.fmsClient.On("ApprovedJob",
mock.MatchedBy(func(ctx context.Context) bool { return true }),
&proto.ApprovedJobRequest{
Uuid: jp.RemoteUUID.String(),
Version: int64(spec.Version),
},
)`
$DIR/core/services/feeds/service_test.go: `.MatchedBy(func(ctx context.Context) bool { return true })`
$DIR/core/services/feeds/service_test.go: `.RemoteUUID.String()`
$DIR/core/services/feeds/service_test.go: `.Return(nil, errors.New("failure"))`
$DIR/core/services/feeds/service_test.go: `.New("failure")`
$DIR/core/services/feeds/service_test.go: `.orm.On("WithDataSource", mock.Anything)`
$DIR/core/services/feeds/service_test.go: `.Return(feeds.ORM(svc.orm))`
$DIR/core/services/feeds/service_test.go: `.ORM(svc.orm)`
$DIR/core/services/feeds/service_test.go: `.jobORM.On("WithDataSource", mock.Anything)`
$DIR/core/services/feeds/service_test.go: `.Return(job.ORM(svc.jobORM))`
$DIR/core/services/feeds/service_test.go: `.ORM(svc.jobORM)`
$DIR/core/services/feeds/service_test.go: `.Run(tc.name, func(t *testing.T) {
svc := setupTestServiceCfg(t, func(c *chainlink.Config, s *chainlink.Secrets) {
c.OCR2.Enabled = testutils.Ptr(true)
if tc.httpTimeout != nil {
c.JobPipeline.HTTPRequest.DefaultTimeout = tc.httpTimeout
}
})
if tc.before != nil {
tc.before(svc)
}
err := svc.ApproveSpec(ctx, tc.id, tc.force)
if tc.wantErr != "" {
require.Error(t, err)
assert.EqualError(t, err, tc.wantErr)
} else {
require.NoError(t, err)
}
})`
$DIR/core/services/feeds/service_test.go: `.Ptr(true)`
$DIR/core/services/feeds/service_test.go: `.before(svc)`
$DIR/core/services/feeds/service_test.go: `.ApproveSpec(ctx, tc.id, tc.force)`
$DIR/core/services/feeds/service_test.go: `.Context(t)`
$DIR/core/services/feeds/service_test.go: `.orm.On("GetSpec", mock.Anything, spec.ID)`
$DIR/core/services/feeds/service_test.go: `.Return(spec, nil)`
$DIR/core/services/feeds/service_test.go: `.orm.On("GetJobProposal", mock.Anything, jp.ID)`
$DIR/core/services/feeds/service_test.go: `.Return(jp, nil)`
$DIR/core/services/feeds/service_test.go: `.connMgr.On("GetClient", jp.FeedsManagerID)`
$DIR/core/services/feeds/service_test.go: `.Return(svc.fmsClient, nil)`
$DIR/core/services/feeds/service_test.go: `.orm.On("RejectSpec",
mock.Anything,
spec.ID,
)`
$DIR/core/services/feeds/service_test.go: `.Return(nil)`
$DIR/core/services/feeds/service_test.go: `.fmsClient.On("RejectedJob",
mock.MatchedBy(func(ctx context.Context) bool { return true }),
&proto.RejectedJobRequest{
Uuid: jp.RemoteUUID.String(),
Version: int64(spec.Version),
},
)`
$DIR/core/services/feeds/service_test.go: `.MatchedBy(func(ctx context.Context) bool { return true })`
$DIR/core/services/feeds/service_test.go: `.RemoteUUID.String()`
$DIR/core/services/feeds/service_test.go: `.Return(&proto.RejectedJobResponse{}, nil)`
$DIR/core/services/feeds/service_test.go: `.orm.On("CountJobProposalsByStatus", mock.Anything)`
$DIR/core/services/feeds/service_test.go: `.Return(&feeds.JobProposalCounts{}, nil)`
$DIR/core/services/feeds/service_test.go: `.orm.On("Transact", mock.Anything, mock.Anything)`
$DIR/core/services/feeds/service_test.go: `.Run(func(args mock.Arguments) {
fn := args[1].(func(orm feeds.ORM) error)
transactCall.ReturnArguments = mock.Arguments{fn(svc.orm)}
})`
$DIR/core/services/feeds/service_test.go: `.orm.On("GetSpec", mock.Anything, spec.ID)`
$DIR/core/services/feeds/service_test.go: `.Return(nil, errors.New("failure"))`
$DIR/core/services/feeds/service_test.go: `.New("failure")`
$DIR/core/services/feeds/service_test.go: `.orm.On("GetSpec", mock.Anything, spec.ID)`
$DIR/core/services/feeds/service_test.go: `.Return(&feeds.JobProposalSpec{
Status: feeds.SpecStatusRejected,
}, nil)`
$DIR/core/services/feeds/service_test.go: `.orm.On("GetSpec", mock.Anything, spec.ID)`
$DIR/core/services/feeds/service_test.go: `.Return(spec, nil)`
$DIR/core/services/feeds/service_test.go: `.orm.On("GetJobProposal", mock.Anything, jp.ID)`
$DIR/core/services/feeds/service_test.go: `.Return(nil, errors.New("failure"))`
$DIR/core/services/feeds/service_test.go: `.New("failure")`
$DIR/core/services/feeds/service_test.go: `.orm.On("GetSpec", mock.Anything, spec.ID)`
$DIR/core/services/feeds/service_test.go: `.Return(spec, nil)`
$DIR/core/services/feeds/service_test.go: `.orm.On("GetJobProposal", mock.Anything, jp.ID)`
$DIR/core/services/feeds/service_test.go: `.Return(jp, nil)`
$DIR/core/services/feeds/service_test.go: `.connMgr.On("GetClient", jp.FeedsManagerID)`
$DIR/core/services/feeds/service_test.go: `.Return(nil, errors.New("disconnected"))`
$DIR/core/services/feeds/service_test.go: `.New("disconnected")`
$DIR/core/services/feeds/service_test.go: `.orm.On("GetSpec", mock.Anything, spec.ID)`
$DIR/core/services/feeds/service_test.go: `.Return(spec, nil)`
$DIR/core/services/feeds/service_test.go: `.orm.On("GetJobProposal", mock.Anything, jp.ID)`
$DIR/core/services/feeds/service_test.go: `.Return(jp, nil)`
$DIR/core/services/feeds/service_test.go: `.connMgr.On("GetClient", jp.FeedsManagerID)`
$DIR/core/services/feeds/service_test.go: `.Return(svc.fmsClient, nil)`
$DIR/core/services/feeds/service_test.go: `.orm.On("RejectSpec", mock.Anything, mock.Anything)`
$DIR/core/services/feeds/service_test.go: `.Return(errors.New("failure"))`
$DIR/core/services/feeds/service_test.go: `.New("failure")`
$DIR/core/services/feeds/service_test.go: `.orm.On("Transact", mock.Anything, mock.Anything)`
$DIR/core/services/feeds/service_test.go: `.Run(func(args mock.Arguments) {
fn := args[1].(func(orm feeds.ORM) error)
transactCall.ReturnArguments = mock.Arguments{fn(svc.orm)}
})`
$DIR/core/services/feeds/service_test.go: `.orm.On("GetSpec", mock.Anything, spec.ID)`
$DIR/core/services/feeds/service_test.go: `.Return(spec, nil)`
$DIR/core/services/feeds/service_test.go: `.orm.On("GetJobProposal", mock.Anything, jp.ID)`
$DIR/core/services/feeds/service_test.go: `.Return(jp, nil)`
$DIR/core/services/feeds/service_test.go: `.connMgr.On("GetClient", jp.FeedsManagerID)`
$DIR/core/services/feeds/service_test.go: `.Return(svc.fmsClient, nil)`
$DIR/core/services/feeds/service_test.go: `.orm.On("RejectSpec", mock.Anything, mock.Anything)`
$DIR/core/services/feeds/service_test.go: `.Return(nil)`
$DIR/core/services/feeds/service_test.go: `.fmsClient.
On("RejectedJob",
mock.MatchedBy(func(ctx context.Context) bool { return true }),
&proto.RejectedJobRequest{
Uuid: jp.RemoteUUID.String(),
Version: int64(spec.Version),
})`
$DIR/core/services/feeds/service_test.go: `.MatchedBy(func(ctx context.Context) bool { return true })`
$DIR/core/services/feeds/service_test.go: `.RemoteUUID.String()`
$DIR/core/services/feeds/service_test.go: `.
Return(nil, errors.New("rpc failure"))`
$DIR/core/services/feeds/service_test.go: `.New("rpc failure")`
$DIR/core/services/feeds/service_test.go: `.orm.On("Transact", mock.Anything, mock.Anything)`
$DIR/core/services/feeds/service_test.go: `.Run(func(args mock.Arguments) {
fn := args[1].(func(orm feeds.ORM) error)
transactCall.ReturnArguments = mock.Arguments{fn(svc.orm)}
})`
$DIR/core/services/feeds/service_test.go: `.Run(tc.name, func(t *testing.T) {
t.Parallel()
svc := setupTestService(t)
if tc.before != nil {
tc.before(svc)
}
err := svc.RejectSpec(ctx, spec.ID)
if tc.wantErr != "" {
require.Error(t, err)
assert.Contains(t, err.Error(), tc.wantErr)
} else {
require.NoError(t, err)
}
})`
$DIR/core/services/feeds/service_test.go: `.before(svc)`
$DIR/core/services/feeds/service_test.go: `.RejectSpec(ctx, spec.ID)`
$DIR/core/services/feeds/service_test.go: `.Context(t)`
$DIR/core/services/feeds/service_test.go: `.orm.
On("GetSpec", mock.Anything, specID, mock.Anything)`
$DIR/core/services/feeds/service_test.go: `.
Return(spec, nil)`
$DIR/core/services/feeds/service_test.go: `.orm.On("UpdateSpecDefinition", mock.Anything,
specID,
updatedSpec,
mock.Anything,
)`
$DIR/core/services/feeds/service_test.go: `.Return(nil)`
$DIR/core/services/feeds/service_test.go: `.orm.
On("GetSpec", mock.Anything, specID, mock.Anything)`
$DIR/core/services/feeds/service_test.go: `.
Return(nil, sql.ErrNoRows)`
$DIR/core/services/feeds/service_test.go: `.orm.
On("GetSpec", mock.Anything, specID, mock.Anything)`
$DIR/core/services/feeds/service_test.go: `.
Return(nil, errors.New("other db error"))`
$DIR/core/services/feeds/service_test.go: `.New("other db error")`
$DIR/core/services/feeds/service_test.go: `.orm.
On("GetSpec", mock.Anything, specID, mock.Anything)`
$DIR/core/services/feeds/service_test.go: `.
Return(spec, nil)`
$DIR/core/services/feeds/service_test.go: `.Run(tc.name, func(t *testing.T) {
t.Parallel()
svc := setupTestService(t)
if tc.before != nil {
tc.before(svc)
}
err := svc.UpdateSpecDefinition(ctx, tc.specID, updatedSpec)
if tc.wantErr != "" {
assert.EqualError(t, err, tc.wantErr)
} else {
require.NoError(t, err)
}
})`
$DIR/core/services/feeds/service_test.go: `.before(svc)`
$DIR/core/services/feeds/service_test.go: `.UpdateSpecDefinition(ctx, tc.specID, updatedSpec)`
$DIR/core/services/feeds/service_test.go: `.Decode([]byte(pubKeyHex), pubKey)`
$DIR/core/services/feeds/service_test.go: `.csaKeystore.On("GetAll")`
$DIR/core/services/feeds/service_test.go: `.Return([]csakey.KeyV2{key}, nil)`
$DIR/core/services/feeds/service_test.go: `.orm.On("ListManagers", mock.Anything)`
$DIR/core/services/feeds/service_test.go: `.Return([]feeds.FeedsManager{mgr}, nil)`
$DIR/core/services/feeds/service_test.go: `.connMgr.On("IsConnected", mgr.ID)`
$DIR/core/services/feeds/service_test.go: `.Return(false)`
$DIR/core/services/feeds/service_test.go: `.connMgr.On("Connect", mock.IsType(feeds.ConnectOpts{}))`
$DIR/core/services/feeds/service_test.go: `.IsType(feeds.ConnectOpts{})`
$DIR/core/services/feeds/service_test.go: `.connMgr.On("Close")`
$DIR/core/services/feeds/service_test.go: `.orm.On("CountJobProposalsByStatus", mock.Anything)`
$DIR/core/services/feeds/service_test.go: `.Return(&feeds.JobProposalCounts{}, nil)`
$DIR/core/services/feeds/service_test.go: `.csaKeystore.On("GetAll")`
$DIR/core/services/feeds/service_test.go: `.Return([]csakey.KeyV2{key}, nil)`
$DIR/core/services/feeds/service_test.go: `.orm.On("ListManagers", mock.Anything)`
$DIR/core/services/feeds/service_test.go: `.Return([]feeds.FeedsManager{}, nil)`
$DIR/core/services/feeds/service_test.go: `.connMgr.On("Close")`
$DIR/core/services/feeds/service_test.go: `.Run(tt.name, func(t *testing.T) {
t.Parallel()
svc := setupTestService(t)
if tt.beforeFunc != nil {
tt.beforeFunc(svc)
}
servicetest.Run(t, svc)
})`
$DIR/core/services/feeds/service_test.go: `.beforeFunc(svc)`
$DIR/core/services/feeds/service_test.go: `.Run(t, svc)`
$DIR/core/services/fluxmonitorv2/contract_submitter_test.go: `keyStore.On("GetRoundRobinAddress", mock.Anything, testutils.FixtureChainID).Return(fromAddress, nil)`
$DIR/core/services/fluxmonitorv2/contract_submitter_test.go: `fluxAggregator.On("Address").Return(toAddress)`
$DIR/core/services/fluxmonitorv2/contract_submitter_test.go: `orm.On("CreateEthTransaction", mock.Anything, fromAddress, toAddress, payload, gasLimit, &idempotencyKey).Return(nil)`
$DIR/core/services/fluxmonitorv2/contract_submitter_test.go: `err = submitter.Submit(testutils.Context(t), roundID, submission, &idempotencyKey)`
$DIR/core/services/fluxmonitorv2/contract_submitter_test.go: `.NewFluxAggregator(t)`
$DIR/core/services/fluxmonitorv2/contract_submitter_test.go: `.NewORM(t)`
$DIR/core/services/fluxmonitorv2/contract_submitter_test.go: `.NewKeyStoreInterface(t)`
$DIR/core/services/fluxmonitorv2/contract_submitter_test.go: `.NewFluxAggregatorContractSubmitter(fluxAggregator, orm, keyStore, gasLimit, forwardingAllowed, testutils.FixtureChainID)`
$DIR/core/services/fluxmonitorv2/contract_submitter_test.go: `.NewAddress()`
$DIR/core/services/fluxmonitorv2/contract_submitter_test.go: `.NewAddress()`
$DIR/core/services/fluxmonitorv2/contract_submitter_test.go: `.NewInt(1)`
$DIR/core/services/fluxmonitorv2/contract_submitter_test.go: `.NewInt(2)`
$DIR/core/services/fluxmonitorv2/contract_submitter_test.go: `.FluxAggregatorABI.Pack("submit", roundID, submission)`
$DIR/core/services/fluxmonitorv2/contract_submitter_test.go: `.On("GetRoundRobinAddress", mock.Anything, testutils.FixtureChainID)`
$DIR/core/services/fluxmonitorv2/contract_submitter_test.go: `.Return(fromAddress, nil)`
$DIR/core/services/fluxmonitorv2/contract_submitter_test.go: `.On("Address")`
$DIR/core/services/fluxmonitorv2/contract_submitter_test.go: `.Return(toAddress)`
$DIR/core/services/fluxmonitorv2/contract_submitter_test.go: `.New()`
$DIR/core/services/fluxmonitorv2/contract_submitter_test.go: `.String()`
$DIR/core/services/fluxmonitorv2/contract_submitter_test.go: `.On("CreateEthTransaction", mock.Anything, fromAddress, toAddress, payload, gasLimit, &idempotencyKey)`
$DIR/core/services/fluxmonitorv2/contract_submitter_test.go: `.Return(nil)`
$DIR/core/services/fluxmonitorv2/contract_submitter_test.go: `.Submit(testutils.Context(t), roundID, submission, &idempotencyKey)`
$DIR/core/services/fluxmonitorv2/contract_submitter_test.go: `.Context(t)`
$DIR/core/services/fluxmonitorv2/deviation_checker_test.go: `t.Run(tc.name, func(t *testing.T) { c(tc) })`
$DIR/core/services/fluxmonitorv2/deviation_checker_test.go: `c(tc)`
$DIR/core/services/fluxmonitorv2/deviation_checker_test.go: `test2.threshold = 0`
$DIR/core/services/fluxmonitorv2/deviation_checker_test.go: `test2.expectation = test2.curPrice.Sub(tc.nextPrice).Abs().GreaterThan(i(0)) ||
test2.absoluteThreshold == 0`
$DIR/core/services/fluxmonitorv2/deviation_checker_test.go: `t.Run(tc.name+" threshold zeroed", func(t *testing.T) { c(test2) })`
$DIR/core/services/fluxmonitorv2/deviation_checker_test.go: `c(test2)`
$DIR/core/services/fluxmonitorv2/deviation_checker_test.go: `test3.absoluteThreshold = 1e307`
$DIR/core/services/fluxmonitorv2/deviation_checker_test.go: `test3.expectation = false`
$DIR/core/services/fluxmonitorv2/deviation_checker_test.go: `t.Run(tc.name+" max absolute threshold", func(t *testing.T) { c(test3) })`
$DIR/core/services/fluxmonitorv2/deviation_checker_test.go: `c(test3)`
$DIR/core/services/fluxmonitorv2/deviation_checker_test.go: `.NewDeviationChecker(tc.threshold, tc.absoluteThreshold, logger.TestLogger(t))`
$DIR/core/services/fluxmonitorv2/deviation_checker_test.go: `.TestLogger(t)`
$DIR/core/services/fluxmonitorv2/deviation_checker_test.go: `.Run(tc.name, func(t *testing.T) { c(tc) })`
$DIR/core/services/fluxmonitorv2/deviation_checker_test.go: `.curPrice.Sub(tc.nextPrice)`
$DIR/core/services/fluxmonitorv2/deviation_checker_test.go: `.Abs()`
$DIR/core/services/fluxmonitorv2/deviation_checker_test.go: `.GreaterThan(i(0))`
$DIR/core/services/fluxmonitorv2/deviation_checker_test.go: `.Run(tc.name+" threshold zeroed", func(t *testing.T) { c(test2) })`
$DIR/core/services/fluxmonitorv2/deviation_checker_test.go: `.Run(tc.name+" max absolute threshold", func(t *testing.T) { c(test3) })`
$DIR/core/services/fluxmonitorv2/flags_test.go: `t.Run(tc.name, func(t *testing.T) {
t.Parallel()
var (
flagsContract = mocks.NewFlags(t)
address = testutils.NewAddress()
)
flags := fluxmonitorv2.ContractFlags{FlagsInterface: flagsContract}
flagsContract.On("GetFlags", mock.Anything, mock.Anything).
Run(func(args mock.Arguments) {
require.Equal(t, []common.Address{
utils.ZeroAddress,
address,
}, args.Get(1).([]common.Address))
}).
Return(tc.getFlagsResult, nil)
result, err := flags.IsLowered(address)
require.NoError(t, err)
require.Equal(t, tc.expected, result)
})`
$DIR/core/services/fluxmonitorv2/flags_test.go: `flagsContract.On("GetFlags", mock.Anything, mock.Anything).
Run(func(args mock.Arguments) {
require.Equal(t, []common.Address{
utils.ZeroAddress,
address,
}, args.Get(1).([]common.Address))
}).
Return(tc.getFlagsResult, nil)`
$DIR/core/services/fluxmonitorv2/flags_test.go: `.Run(tc.name, func(t *testing.T) {
t.Parallel()
var (
flagsContract = mocks.NewFlags(t)
address = testutils.NewAddress()
)
flags := fluxmonitorv2.ContractFlags{FlagsInterface: flagsContract}
flagsContract.On("GetFlags", mock.Anything, mock.Anything).
Run(func(args mock.Arguments) {
require.Equal(t, []common.Address{
utils.ZeroAddress,
address,
}, args.Get(1).([]common.Address))
}).
Return(tc.getFlagsResult, nil)
result, err := flags.IsLowered(address)
require.NoError(t, err)
require.Equal(t, tc.expected, result)
})`
$DIR/core/services/fluxmonitorv2/flags_test.go: `.NewFlags(t)`
$DIR/core/services/fluxmonitorv2/flags_test.go: `.NewAddress()`
$DIR/core/services/fluxmonitorv2/flags_test.go: `.On("GetFlags", mock.Anything, mock.Anything)`
$DIR/core/services/fluxmonitorv2/flags_test.go: `.
Run(func(args mock.Arguments) {
require.Equal(t, []common.Address{
utils.ZeroAddress,
address,
}, args.Get(1).([]common.Address))
})`
$DIR/core/services/fluxmonitorv2/flags_test.go: `.
Return(tc.getFlagsResult, nil)`
$DIR/core/services/fluxmonitorv2/flags_test.go: `.IsLowered(address)`
$DIR/core/services/fluxmonitorv2/flux_monitor_test.go: `t.Run(tc.name, func(t *testing.T) {
t.Parallel()
fm, tm := setup(t, db)
tm.keyStore.On("EnabledKeysForChain", mock.Anything, testutils.FixtureChainID).Return([]ethkey.KeyV2{{Address: nodeAddr}}, nil).Once()
tm.logBroadcaster.On("IsConnected").Return(tc.connected).Once()
// Setup Answers
answers := undeviatedAnswers
if tc.answersDeviate {
answers = deviatedAnswers
}
latestAnswer := answers.latestAnswer
// Setup Run
run := pipeline.Run{
ID: 1,
PipelineSpecID: 1,
}
if tc.hasPreviousRun {
switch tc.previousRunStatus {
case pipeline.RunStatusCompleted:
now := time.Now()
run.FinishedAt = null.TimeFrom(now)
case pipeline.RunStatusErrored:
run.FatalErrors = []null.String{
null.StringFrom("Random: String, foo"),
}
default:
}
tm.orm.
On("FindOrCreateFluxMonitorRoundStats", mock.Anything, contractAddress, uint32(reportableRoundID), mock.Anything).
Return(fluxmonitorv2.FluxMonitorRoundStatsV2{
Aggregator: contractAddress,
RoundID: reportableRoundID,
PipelineRunID: corenull.Int64From(run.ID),
NumSubmissions: 1,
}, nil)
tm.pipelineORM.
On("FindRun", mock.Anything, run.ID).
Return(run, nil)
} else {
if tc.connected {
tm.orm.
On("FindOrCreateFluxMonitorRoundStats", mock.Anything, contractAddress, uint32(reportableRoundID), mock.Anything).
Return(fluxmonitorv2.FluxMonitorRoundStatsV2{
Aggregator: contractAddress,
RoundID: reportableRoundID,
}, nil)
}
}
// Set up funds
var availableFunds *big.Int
var paymentAmount *big.Int
minPayment := defaultMinimumContractPayment.ToInt()
if tc.funded {
availableFunds = big.NewInt(1).Mul(big.NewInt(10000), minPayment)
paymentAmount = minPayment
} else {
availableFunds = big.NewInt(1)
paymentAmount = minPayment
}
roundState := flux_aggregator_wrapper.OracleRoundState{
RoundId: reportableRoundID,
EligibleToSubmit: tc.eligible,
LatestSubmission: big.NewInt(latestAnswer),
AvailableFunds: availableFunds,
PaymentAmount: paymentAmount,
OracleCount: oracleCount,
}
tm.fluxAggregator.
On("OracleRoundState", nilOpts, nodeAddr, uint32(0)).
Return(roundState, nil).Maybe()
if tc.expectedToPoll {
tm.fluxAggregator.On("LatestRoundData", nilOpts).Return(flux_aggregator_wrapper.LatestRoundData{
Answer: big.NewInt(10),
UpdatedAt: big.NewInt(100),
}, nil)
tm.pipelineRunner.
On("ExecuteRun", mock.Anything, pipelineSpec, pipeline.NewVarsFrom(
map[string]interface{}{
"jobRun": map[string]interface{}{
"meta": map[string]interface{}{
"latestAnswer": float64(10),
"updatedAt": float64(100),
},
},
"jobSpec": map[string]interface{}{
"databaseID": int32(0),
"externalJobID": uuid.UUID{},
"name": "",
"evmChainID": testutils.FixtureChainID.String(),
},
},
), mock.Anything).
Return(&run, pipeline.TaskRunResults{
{
Result: pipeline.Result{
Value: decimal.NewFromInt(answers.polledAnswer),
Error: nil,
},
Task: &pipeline.HTTPTask{},
},
}, nil)
}
if tc.expectedToSubmit {
tm.pipelineRunner.On("InsertFinishedRun", mock.Anything, mock.Anything, mock.Anything, mock.Anything).
Return(nil).
Run(func(args mock.Arguments) {
args.Get(2).(*pipeline.Run).ID = 1
}).
Once()
tm.contractSubmitter.
On("Submit", mock.Anything, big.NewInt(reportableRoundID), big.NewInt(answers.polledAnswer), buildIdempotencyKey(run.ID)).
Return(nil).
Once()
tm.orm.
On("UpdateFluxMonitorRoundStats",
mock.Anything,
contractAddress,
uint32(reportableRoundID),
int64(1),
mock.Anything,
).
Return(nil)
tm.orm.On("WithDataSource", mock.Anything).Return(fluxmonitorv2.ORM(tm.orm))
}
oracles := []common.Address{nodeAddr, testutils.NewAddress()}
tm.fluxAggregator.On("GetOracles", nilOpts).Return(oracles, nil)
require.NoError(t, fm.SetOracleAddress())
fm.ExportedPollIfEligible(thresholds.rel, thresholds.abs)
})`
$DIR/core/services/fluxmonitorv2/flux_monitor_test.go: `tm.keyStore.On("EnabledKeysForChain", mock.Anything, testutils.FixtureChainID).Return([]ethkey.KeyV2{{Address: nodeAddr}}, nil).Once()`
$DIR/core/services/fluxmonitorv2/flux_monitor_test.go: `tm.logBroadcaster.On("IsConnected").Return(tc.connected).Once()`
$DIR/core/services/fluxmonitorv2/flux_monitor_test.go: `answers = deviatedAnswers`
$DIR/core/services/fluxmonitorv2/flux_monitor_test.go: `run.FinishedAt = null.TimeFrom(now)`
$DIR/core/services/fluxmonitorv2/flux_monitor_test.go: `run.FatalErrors = []null.String{
null.StringFrom("Random: String, foo"),
}`
$DIR/core/services/fluxmonitorv2/flux_monitor_test.go: `tm.orm.
On("FindOrCreateFluxMonitorRoundStats", mock.Anything, contractAddress, uint32(reportableRoundID), mock.Anything).
Return(fluxmonitorv2.FluxMonitorRoundStatsV2{
Aggregator: contractAddress,
RoundID: reportableRoundID,
PipelineRunID: corenull.Int64From(run.ID),
NumSubmissions: 1,
}, nil)`
$DIR/core/services/fluxmonitorv2/flux_monitor_test.go: `tm.pipelineORM.
On("FindRun", mock.Anything, run.ID).
Return(run, nil)`
$DIR/core/services/fluxmonitorv2/flux_monitor_test.go: `tm.orm.
On("FindOrCreateFluxMonitorRoundStats", mock.Anything, contractAddress, uint32(reportableRoundID), mock.Anything).
Return(fluxmonitorv2.FluxMonitorRoundStatsV2{
Aggregator: contractAddress,
RoundID: reportableRoundID,
}, nil)`
$DIR/core/services/fluxmonitorv2/flux_monitor_test.go: `availableFunds = big.NewInt(1).Mul(big.NewInt(10000), minPayment)`
$DIR/core/services/fluxmonitorv2/flux_monitor_test.go: `paymentAmount = minPayment`
$DIR/core/services/fluxmonitorv2/flux_monitor_test.go: `availableFunds = big.NewInt(1)`
$DIR/core/services/fluxmonitorv2/flux_monitor_test.go: `paymentAmount = minPayment`
$DIR/core/services/fluxmonitorv2/flux_monitor_test.go: `tm.fluxAggregator.
On("OracleRoundState", nilOpts, nodeAddr, uint32(0)).
Return(roundState, nil).Maybe()`
$DIR/core/services/fluxmonitorv2/flux_monitor_test.go: `tm.fluxAggregator.On("LatestRoundData", nilOpts).Return(flux_aggregator_wrapper.LatestRoundData{
Answer: big.NewInt(10),
UpdatedAt: big.NewInt(100),
}, nil)`
$DIR/core/services/fluxmonitorv2/flux_monitor_test.go: `tm.pipelineRunner.
On("ExecuteRun", mock.Anything, pipelineSpec, pipeline.NewVarsFrom(
map[string]interface{}{
"jobRun": map[string]interface{}{
"meta": map[string]interface{}{
"latestAnswer": float64(10),
"updatedAt": float64(100),
},
},
"jobSpec": map[string]interface{}{
"databaseID": int32(0),
"externalJobID": uuid.UUID{},
"name": "",
"evmChainID": testutils.FixtureChainID.String(),
},
},
), mock.Anything).
Return(&run, pipeline.TaskRunResults{
{
Result: pipeline.Result{
Value: decimal.NewFromInt(answers.polledAnswer),
Error: nil,
},
Task: &pipeline.HTTPTask{},
},
}, nil)`
$DIR/core/services/fluxmonitorv2/flux_monitor_test.go: `tm.pipelineRunner.On("InsertFinishedRun", mock.Anything, mock.Anything, mock.Anything, mock.Anything).
Return(nil).
Run(func(args mock.Arguments) {
args.Get(2).(*pipeline.Run).ID = 1
}).
Once()`
$DIR/core/services/fluxmonitorv2/flux_monitor_test.go: `args.Get(2).(*pipeline.Run).ID = 1`
$DIR/core/services/fluxmonitorv2/flux_monitor_test.go: `tm.contractSubmitter.
On("Submit", mock.Anything, big.NewInt(reportableRoundID), big.NewInt(answers.polledAnswer), buildIdempotencyKey(run.ID)).
Return(nil).
Once()`
$DIR/core/services/fluxmonitorv2/flux_monitor_test.go: `tm.orm.
On("UpdateFluxMonitorRoundStats",
mock.Anything,
contractAddress,
uint32(reportableRoundID),
int64(1),
mock.Anything,
).
Return(nil)`
$DIR/core/services/fluxmonitorv2/flux_monitor_test.go: `tm.orm.On("WithDataSource", mock.Anything).Return(fluxmonitorv2.ORM(tm.orm))`
$DIR/core/services/fluxmonitorv2/flux_monitor_test.go: `tm.fluxAggregator.On("GetOracles", nilOpts).Return(oracles, nil)`
$DIR/core/services/fluxmonitorv2/flux_monitor_test.go: `fm.ExportedPollIfEligible(thresholds.rel, thresholds.abs)`
$DIR/core/services/fluxmonitorv2/flux_monitor_test.go: `tm.keyStore.On("EnabledKeysForChain", mock.Anything, testutils.FixtureChainID).Return([]ethkey.KeyV2{{Address: nodeAddr}}, nil).Once()`
$DIR/core/services/fluxmonitorv2/flux_monitor_test.go: `tm.logBroadcaster.On("IsConnected").Return(true).Once()`
$DIR/core/services/fluxmonitorv2/flux_monitor_test.go: `tm.jobORM.
On("TryRecordError",
mock.Anything,
pipelineSpec.JobID,
"Unable to call roundState method on provided contract. Check contract address.",
).Once()`
$DIR/core/services/fluxmonitorv2/flux_monitor_test.go: `tm.fluxAggregator.
On("OracleRoundState", nilOpts, nodeAddr, mock.Anything).
Return(roundState, errors.New("err")).
Once()`
$DIR/core/services/fluxmonitorv2/flux_monitor_test.go: `tm.fluxAggregator.On("GetOracles", nilOpts).Return(oracles, nil)`
$DIR/core/services/fluxmonitorv2/flux_monitor_test.go: `tm.keyStore.On("EnabledKeysForChain", mock.Anything, testutils.FixtureChainID).Return([]ethkey.KeyV2{{Address: nodeAddr}}, nil).Once()`
$DIR/core/services/fluxmonitorv2/flux_monitor_test.go: `tm.orm.On("WithDataSource", mock.Anything).Return(fluxmonitorv2.ORM(tm.orm))`
$DIR/core/services/fluxmonitorv2/flux_monitor_test.go: `tm.fluxAggregator.On("Address").Return(common.Address{})`
$DIR/core/services/fluxmonitorv2/flux_monitor_test.go: `tm.fluxAggregator.On("LatestRoundData", nilOpts).Return(freshContractRoundDataResponse()).Maybe()`
$DIR/core/services/fluxmonitorv2/flux_monitor_test.go: `tm.fluxAggregator.On("OracleRoundState", nilOpts, nodeAddr, uint32(1)).
Return(makeRoundStateForRoundID(1), nil).
Run(func(mock.Arguments) {
readyToFillQueue.ItHappened()
logsAwaiter.AwaitOrFail(t)
}).
Once()`
$DIR/core/services/fluxmonitorv2/flux_monitor_test.go: `readyToFillQueue.ItHappened()`
$DIR/core/services/fluxmonitorv2/flux_monitor_test.go: `logsAwaiter.AwaitOrFail(t)`
$DIR/core/services/fluxmonitorv2/flux_monitor_test.go: `tm.fluxAggregator.On("OracleRoundState", nilOpts, nodeAddr, uint32(3)).Return(makeRoundStateForRoundID(3), nil).Once()`
$DIR/core/services/fluxmonitorv2/flux_monitor_test.go: `tm.fluxAggregator.On("OracleRoundState", nilOpts, nodeAddr, uint32(4)).Return(makeRoundStateForRoundID(4), nil).Once()`
$DIR/core/services/fluxmonitorv2/flux_monitor_test.go: `tm.fluxAggregator.On("GetOracles", nilOpts).Return(oracles, nil)`
$DIR/core/services/fluxmonitorv2/flux_monitor_test.go: `tm.logBroadcaster.On("Register", fm, mock.Anything).Return(func() {})`
$DIR/core/services/fluxmonitorv2/flux_monitor_test.go: `tm.logBroadcaster.On("IsConnected").Return(true).Maybe()`
$DIR/core/services/fluxmonitorv2/flux_monitor_test.go: `tm.orm.On("MostRecentFluxMonitorRoundID", mock.Anything, contractAddress).Return(uint32(1), nil)`
$DIR/core/services/fluxmonitorv2/flux_monitor_test.go: `tm.orm.On("MostRecentFluxMonitorRoundID", mock.Anything, contractAddress).Return(uint32(3), nil)`
$DIR/core/services/fluxmonitorv2/flux_monitor_test.go: `tm.orm.On("MostRecentFluxMonitorRoundID", mock.Anything, contractAddress).Return(uint32(4), nil)`
$DIR/core/services/fluxmonitorv2/flux_monitor_test.go: `tm.orm.
On("FindOrCreateFluxMonitorRoundStats", mock.Anything, contractAddress, uint32(1), mock.Anything).
Return(fluxmonitorv2.FluxMonitorRoundStatsV2{
Aggregator: contractAddress,
RoundID: 1,
}, nil)`
$DIR/core/services/fluxmonitorv2/flux_monitor_test.go: `tm.pipelineRunner.
On("ExecuteRun", mock.Anything, pipelineSpec, mock.Anything, mock.Anything).
Return(run, pipeline.TaskRunResults{
{
Result: pipeline.Result{
Value: decimal.NewFromInt(fetchedValue),
Error: nil,
},
Task: &pipeline.HTTPTask{},
},
}, nil).Once()`
$DIR/core/services/fluxmonitorv2/flux_monitor_test.go: `tm.pipelineRunner.
On("InsertFinishedRun", mock.Anything, mock.Anything, mock.Anything, mock.Anything).
Return(nil).
Run(func(args mock.Arguments) {
args.Get(2).(*pipeline.Run).ID = 1
}).Once()`
$DIR/core/services/fluxmonitorv2/flux_monitor_test.go: `args.Get(2).(*pipeline.Run).ID = 1`
$DIR/core/services/fluxmonitorv2/flux_monitor_test.go: `tm.contractSubmitter.
On("Submit", mock.Anything, big.NewInt(1), big.NewInt(fetchedValue), buildIdempotencyKey(run.ID)).
Return(nil).
Once()`
$DIR/core/services/fluxmonitorv2/flux_monitor_test.go: `tm.orm.
On("UpdateFluxMonitorRoundStats",
mock.Anything,
contractAddress,
uint32(1),
mock.AnythingOfType("int64"), //int64(1),
mock.Anything,
).
Return(nil).Once()`
$DIR/core/services/fluxmonitorv2/flux_monitor_test.go: `run = &pipeline.Run{ID: 2}`
$DIR/core/services/fluxmonitorv2/flux_monitor_test.go: `tm.orm.
On("FindOrCreateFluxMonitorRoundStats", mock.Anything, contractAddress, uint32(3), mock.Anything).
Return(fluxmonitorv2.FluxMonitorRoundStatsV2{
Aggregator: contractAddress,
RoundID: 3,
}, nil)`
$DIR/core/services/fluxmonitorv2/flux_monitor_test.go: `tm.pipelineRunner.
On("ExecuteRun", mock.Anything, pipelineSpec, mock.Anything, mock.Anything).
Return(run, pipeline.TaskRunResults{
{
Result: pipeline.Result{
Value: decimal.NewFromInt(fetchedValue),
Error: nil,
},
Task: &pipeline.HTTPTask{},
},
}, nil).Once()`
$DIR/core/services/fluxmonitorv2/flux_monitor_test.go: `tm.pipelineRunner.
On("InsertFinishedRun", mock.Anything, mock.Anything, mock.Anything, mock.Anything).
Return(nil).
Run(func(args mock.Arguments) {
args.Get(2).(*pipeline.Run).ID = 2
}).Once()`
$DIR/core/services/fluxmonitorv2/flux_monitor_test.go: `args.Get(2).(*pipeline.Run).ID = 2`
$DIR/core/services/fluxmonitorv2/flux_monitor_test.go: `tm.contractSubmitter.
On("Submit", mock.Anything, big.NewInt(3), big.NewInt(fetchedValue), buildIdempotencyKey(run.ID)).
Return(nil).
Once()`
$DIR/core/services/fluxmonitorv2/flux_monitor_test.go: `tm.orm.
On("UpdateFluxMonitorRoundStats",
mock.Anything,
contractAddress,
uint32(3),
mock.AnythingOfType("int64"), //int64(2),
mock.Anything,
).
Return(nil).Once()`
$DIR/core/services/fluxmonitorv2/flux_monitor_test.go: `run = &pipeline.Run{ID: 3}`
$DIR/core/services/fluxmonitorv2/flux_monitor_test.go: `tm.orm.
On("FindOrCreateFluxMonitorRoundStats", mock.Anything, contractAddress, uint32(4), mock.Anything).
Return(fluxmonitorv2.FluxMonitorRoundStatsV2{
Aggregator: contractAddress,
RoundID: 3,
}, nil)`
$DIR/core/services/fluxmonitorv2/flux_monitor_test.go: `tm.pipelineRunner.
On("ExecuteRun", mock.Anything, pipelineSpec, mock.Anything, mock.Anything).
Return(run, pipeline.TaskRunResults{
{
Result: pipeline.Result{
Value: decimal.NewFromInt(fetchedValue),
Error: nil,
},
Task: &pipeline.HTTPTask{},
},
}, nil).Once()`
$DIR/core/services/fluxmonitorv2/flux_monitor_test.go: `tm.pipelineRunner.
On("InsertFinishedRun", mock.Anything, mock.Anything, mock.Anything, mock.Anything).
Return(nil).
Run(func(args mock.Arguments) {
args.Get(2).(*pipeline.Run).ID = 3
}).Once()`
$DIR/core/services/fluxmonitorv2/flux_monitor_test.go: `args.Get(2).(*pipeline.Run).ID = 3`
$DIR/core/services/fluxmonitorv2/flux_monitor_test.go: `tm.contractSubmitter.
On("Submit", mock.Anything, big.NewInt(4), big.NewInt(fetchedValue), buildIdempotencyKey(run.ID)).
Return(nil).
Once()`
$DIR/core/services/fluxmonitorv2/flux_monitor_test.go: `tm.orm.
On("UpdateFluxMonitorRoundStats",
mock.Anything,
contractAddress,
uint32(4),
mock.AnythingOfType("int64"), //int64(3),
mock.Anything,
).
Return(nil).
Once().
Run(func(mock.Arguments) { readyToAssert.ItHappened() })`
$DIR/core/services/fluxmonitorv2/flux_monitor_test.go: `readyToAssert.ItHappened()`
$DIR/core/services/fluxmonitorv2/flux_monitor_test.go: `servicetest.Run(t, fm)`
$DIR/core/services/fluxmonitorv2/flux_monitor_test.go: `logBroadcast.On("DecodedLog").Return(&flux_aggregator_wrapper.FluxAggregatorNewRound{RoundId: big.NewInt(int64(i)), StartedAt: big.NewInt(0)})`
$DIR/core/services/fluxmonitorv2/flux_monitor_test.go: `logBroadcast.On("String").Maybe().Return("")`
$DIR/core/services/fluxmonitorv2/flux_monitor_test.go: `tm.logBroadcaster.On("WasAlreadyConsumed", mock.Anything, mock.Anything).Return(false, nil)`
$DIR/core/services/fluxmonitorv2/flux_monitor_test.go: `tm.logBroadcaster.On("MarkConsumed", mock.Anything, mock.Anything, mock.Anything).Return(nil)`
$DIR/core/services/fluxmonitorv2/flux_monitor_test.go: `logBroadcasts = append(logBroadcasts, logBroadcast)`
$DIR/core/services/fluxmonitorv2/flux_monitor_test.go: `fm.HandleLog(ctx, logBroadcasts[0])`
$DIR/core/services/fluxmonitorv2/flux_monitor_test.go: `readyToFillQueue.AwaitOrFail(t)`
$DIR/core/services/fluxmonitorv2/flux_monitor_test.go: `fm.HandleLog(ctx, logBroadcasts[1])`
$DIR/core/services/fluxmonitorv2/flux_monitor_test.go: `fm.HandleLog(ctx, logBroadcasts[2])`
$DIR/core/services/fluxmonitorv2/flux_monitor_test.go: `fm.HandleLog(ctx, logBroadcasts[3])`
$DIR/core/services/fluxmonitorv2/flux_monitor_test.go: `logsAwaiter.ItHappened()`
$DIR/core/services/fluxmonitorv2/flux_monitor_test.go: `t.Run(tc.name, func(t *testing.T) {
t.Parallel()
var (
orm = newORM(t, db, nil)
)
fm, tm := setup(t, db, disablePollTicker(true), disableIdleTimer(tc.idleTimerDisabled), setIdleTimerPeriod(tc.idleDuration), withORM(orm))
tm.keyStore.On("EnabledKeysForChain", mock.Anything, testutils.FixtureChainID).Return([]ethkey.KeyV2{{Address: nodeAddr}}, nil).Once()
const fetchedAnswer = 100
answerBigInt := big.NewInt(fetchedAnswer)
tm.fluxAggregator.On("Address").Return(common.Address{})
tm.fluxAggregator.On("GetOracles", nilOpts).Return(oracles, nil)
tm.logBroadcaster.On("Register", mock.Anything, mock.Anything).Return(func() {})
tm.logBroadcaster.On("IsConnected").Return(true).Maybe()
idleDurationOccured := make(chan struct{}, 3)
tm.fluxAggregator.On("LatestRoundData", nilOpts).Return(freshContractRoundDataResponse()).Once()
if tc.expectedToSubmit {
// performInitialPoll()
roundState1 := flux_aggregator_wrapper.OracleRoundState{RoundId: 1, EligibleToSubmit: false, LatestSubmission: answerBigInt, StartedAt: now()}
tm.fluxAggregator.On("OracleRoundState", nilOpts, nodeAddr, uint32(0)).Return(roundState1, nil).Once()
// idleDuration 1
roundState2 := flux_aggregator_wrapper.OracleRoundState{RoundId: 1, EligibleToSubmit: false, LatestSubmission: answerBigInt, StartedAt: now()}
tm.fluxAggregator.On("OracleRoundState", nilOpts, nodeAddr, uint32(0)).Return(roundState2, nil).Once().Run(func(args mock.Arguments) {
idleDurationOccured <- struct{}{}
})
}
require.NoError(t, fm.Start(testutils.Context(t)))
require.Len(t, idleDurationOccured, 0, "no Job Runs created")
if tc.expectedToSubmit {
g.Eventually(func() int { return len(idleDurationOccured) }, testutils.WaitTimeout(t)).Should(gomega.Equal(1))
chBlock := make(chan struct{})
// NewRound resets the idle timer
roundState2 := flux_aggregator_wrapper.OracleRoundState{RoundId: 2, EligibleToSubmit: false, LatestSubmission: answerBigInt, StartedAt: now()}
tm.fluxAggregator.On("OracleRoundState", nilOpts, nodeAddr, uint32(2)).Return(roundState2, nil).Once().Run(func(args mock.Arguments) {
close(chBlock)
})
decodedLog := flux_aggregator_wrapper.FluxAggregatorNewRound{RoundId: big.NewInt(2), StartedAt: big.NewInt(0)}
tm.logBroadcast.On("DecodedLog").Return(&decodedLog)
tm.logBroadcast.On("String").Maybe().Return("")
tm.logBroadcaster.On("WasAlreadyConsumed", mock.Anything, mock.Anything).Return(false, nil)
tm.logBroadcaster.On("MarkConsumed", mock.Anything, mock.Anything, mock.Anything).Return(nil)
fm.HandleLog(testutils.Context(t), tm.logBroadcast)
g.Eventually(chBlock).Should(gomega.BeClosed())
// idleDuration 2
roundState3 := flux_aggregator_wrapper.OracleRoundState{RoundId: 3, EligibleToSubmit: false, LatestSubmission: answerBigInt, StartedAt: now()}
tm.fluxAggregator.On("OracleRoundState", nilOpts, nodeAddr, uint32(0)).Return(roundState3, nil).Once().Run(func(args mock.Arguments) {
idleDurationOccured <- struct{}{}
})
g.Eventually(func() int { return len(idleDurationOccured) }, testutils.WaitTimeout(t)).Should(gomega.Equal(2))
}
fm.Close()
if !tc.expectedToSubmit {
require.Len(t, idleDurationOccured, 0)
}
})`
$DIR/core/services/fluxmonitorv2/flux_monitor_test.go: `tm.keyStore.On("EnabledKeysForChain", mock.Anything, testutils.FixtureChainID).Return([]ethkey.KeyV2{{Address: nodeAddr}}, nil).Once()`
$DIR/core/services/fluxmonitorv2/flux_monitor_test.go: `tm.fluxAggregator.On("Address").Return(common.Address{})`
$DIR/core/services/fluxmonitorv2/flux_monitor_test.go: `tm.fluxAggregator.On("GetOracles", nilOpts).Return(oracles, nil)`
$DIR/core/services/fluxmonitorv2/flux_monitor_test.go: `tm.logBroadcaster.On("Register", mock.Anything, mock.Anything).Return(func() {})`
$DIR/core/services/fluxmonitorv2/flux_monitor_test.go: `tm.logBroadcaster.On("IsConnected").Return(true).Maybe()`
$DIR/core/services/fluxmonitorv2/flux_monitor_test.go: `tm.fluxAggregator.On("LatestRoundData", nilOpts).Return(freshContractRoundDataResponse()).Once()`
$DIR/core/services/fluxmonitorv2/flux_monitor_test.go: `tm.fluxAggregator.On("OracleRoundState", nilOpts, nodeAddr, uint32(0)).Return(roundState1, nil).Once()`
$DIR/core/services/fluxmonitorv2/flux_monitor_test.go: `tm.fluxAggregator.On("OracleRoundState", nilOpts, nodeAddr, uint32(0)).Return(roundState2, nil).Once().Run(func(args mock.Arguments) {
idleDurationOccured <- struct{}{}
})`
$DIR/core/services/fluxmonitorv2/flux_monitor_test.go: `idleDurationOccured <- struct{}{}`
$DIR/core/services/fluxmonitorv2/flux_monitor_test.go: `g.Eventually(func() int { return len(idleDurationOccured) }, testutils.WaitTimeout(t)).Should(gomega.Equal(1))`
$DIR/core/services/fluxmonitorv2/flux_monitor_test.go: `tm.fluxAggregator.On("OracleRoundState", nilOpts, nodeAddr, uint32(2)).Return(roundState2, nil).Once().Run(func(args mock.Arguments) {
close(chBlock)
})`
$DIR/core/services/fluxmonitorv2/flux_monitor_test.go: `close(chBlock)`
$DIR/core/services/fluxmonitorv2/flux_monitor_test.go: `tm.logBroadcast.On("DecodedLog").Return(&decodedLog)`
$DIR/core/services/fluxmonitorv2/flux_monitor_test.go: `tm.logBroadcast.On("String").Maybe().Return("")`
$DIR/core/services/fluxmonitorv2/flux_monitor_test.go: `tm.logBroadcaster.On("WasAlreadyConsumed", mock.Anything, mock.Anything).Return(false, nil)`
$DIR/core/services/fluxmonitorv2/flux_monitor_test.go: `tm.logBroadcaster.On("MarkConsumed", mock.Anything, mock.Anything, mock.Anything).Return(nil)`
$DIR/core/services/fluxmonitorv2/flux_monitor_test.go: `fm.HandleLog(testutils.Context(t), tm.logBroadcast)`
$DIR/core/services/fluxmonitorv2/flux_monitor_test.go: `g.Eventually(chBlock).Should(gomega.BeClosed())`
$DIR/core/services/fluxmonitorv2/flux_monitor_test.go: `tm.fluxAggregator.On("OracleRoundState", nilOpts, nodeAddr, uint32(0)).Return(roundState3, nil).Once().Run(func(args mock.Arguments) {
idleDurationOccured <- struct{}{}
})`
$DIR/core/services/fluxmonitorv2/flux_monitor_test.go: `idleDurationOccured <- struct{}{}`
$DIR/core/services/fluxmonitorv2/flux_monitor_test.go: `g.Eventually(func() int { return len(idleDurationOccured) }, testutils.WaitTimeout(t)).Should(gomega.Equal(2))`
$DIR/core/services/fluxmonitorv2/flux_monitor_test.go: `tm.keyStore.On("EnabledKeysForChain", mock.Anything, testutils.FixtureChainID).Return([]ethkey.KeyV2{{Address: nodeAddr}}, nil).Once()`
$DIR/core/services/fluxmonitorv2/flux_monitor_test.go: `tm.fluxAggregator.On("Address").Return(contractAddress)`
$DIR/core/services/fluxmonitorv2/flux_monitor_test.go: `tm.fluxAggregator.On("GetOracles", nilOpts).Return(oracles, nil)`
$DIR/core/services/fluxmonitorv2/flux_monitor_test.go: `tm.logBroadcaster.On("Register", mock.Anything, mock.Anything).Return(func() {})`
$DIR/core/services/fluxmonitorv2/flux_monitor_test.go: `tm.logBroadcaster.On("IsConnected").Return(true)`
$DIR/core/services/fluxmonitorv2/flux_monitor_test.go: `tm.fluxAggregator.On("LatestRoundData", nilOpts).Return(freshContractRoundDataResponse()).Once()`
$DIR/core/services/fluxmonitorv2/flux_monitor_test.go: `t.Cleanup(func() { fm.Close() })`
$DIR/core/services/fluxmonitorv2/flux_monitor_test.go: `tm.fluxAggregator.On("OracleRoundState", nilOpts, nodeAddr, uint32(0)).Return(roundState1, nil).Once().Run(func(args mock.Arguments) {
pollOccured <- struct{}{}
})`
$DIR/core/services/fluxmonitorv2/flux_monitor_test.go: `pollOccured <- struct{}{}`
$DIR/core/services/fluxmonitorv2/flux_monitor_test.go: `tm.orm.
On("FindOrCreateFluxMonitorRoundStats", mock.Anything, contractAddress, uint32(1), mock.Anything).
Return(fluxmonitorv2.FluxMonitorRoundStatsV2{
Aggregator: contractAddress,
RoundID: 1,
NumSubmissions: 0,
}, nil).Once()`
$DIR/core/services/fluxmonitorv2/flux_monitor_test.go: `g.Eventually(func() int { return len(pollOccured) }, testutils.WaitTimeout(t)).Should(gomega.Equal(1))`
$DIR/core/services/fluxmonitorv2/flux_monitor_test.go: `tm.fluxAggregator.On("OracleRoundState", nilOpts, nodeAddr, uint32(0)).Return(roundState1Responded, nil).Once().Run(func(args mock.Arguments) {
pollOccured <- struct{}{}
})`
$DIR/core/services/fluxmonitorv2/flux_monitor_test.go: `pollOccured <- struct{}{}`
$DIR/core/services/fluxmonitorv2/flux_monitor_test.go: `tm.orm.
On("FindOrCreateFluxMonitorRoundStats", mock.Anything, contractAddress, uint32(1), mock.Anything).
Return(fluxmonitorv2.FluxMonitorRoundStatsV2{
PipelineRunID: corenull.NewInt64(int64(1), true),
Aggregator: contractAddress,
RoundID: 1,
NumSubmissions: 1,
}, nil).Once()`
$DIR/core/services/fluxmonitorv2/flux_monitor_test.go: `tm.pipelineORM.On("FindRun", mock.Anything, int64(1)).Return(pipeline.Run{
FinishedAt: null.TimeFrom(finishedAt),
}, nil)`
$DIR/core/services/fluxmonitorv2/flux_monitor_test.go: `g.Eventually(func() int { return len(pollOccured) }, testutils.WaitTimeout(t)).Should(gomega.Equal(2))`
$DIR/core/services/fluxmonitorv2/flux_monitor_test.go: `tm.fluxAggregator.On("OracleRoundState", nilOpts, nodeAddr, uint32(0)).Return(roundState2, nil).Once().Run(func(args mock.Arguments) {
pollOccured <- struct{}{}
})`
$DIR/core/services/fluxmonitorv2/flux_monitor_test.go: `pollOccured <- struct{}{}`
$DIR/core/services/fluxmonitorv2/flux_monitor_test.go: `tm.orm.
On("FindOrCreateFluxMonitorRoundStats", mock.Anything, contractAddress, uint32(2), mock.Anything).
Return(fluxmonitorv2.FluxMonitorRoundStatsV2{
Aggregator: contractAddress,
RoundID: 2,
NumSubmissions: 0,
}, nil).Once()`
$DIR/core/services/fluxmonitorv2/flux_monitor_test.go: `flags.On("ContractExists").Return(true)`
$DIR/core/services/fluxmonitorv2/flux_monitor_test.go: `flags.On("Address").Return(common.Address{})`
$DIR/core/services/fluxmonitorv2/flux_monitor_test.go: `flags.On("IsLowered", mock.Anything).Return(true, nil).Once()`
$DIR/core/services/fluxmonitorv2/flux_monitor_test.go: `tm.keyStore.On("EnabledKeysForChain", mock.Anything, testutils.FixtureChainID).Return([]ethkey.KeyV2{{Address: nodeAddr}}, nil).Once()`
$DIR/core/services/fluxmonitorv2/flux_monitor_test.go: `tm.fluxAggregator.On("Address").Return(contractAddress)`
$DIR/core/services/fluxmonitorv2/flux_monitor_test.go: `tm.fluxAggregator.On("GetOracles", nilOpts).Return(oracles, nil)`
$DIR/core/services/fluxmonitorv2/flux_monitor_test.go: `tm.logBroadcaster.On("Register", mock.Anything, mock.Anything).Return(func() {})`
$DIR/core/services/fluxmonitorv2/flux_monitor_test.go: `tm.logBroadcaster.On("IsConnected").Return(true)`
$DIR/core/services/fluxmonitorv2/flux_monitor_test.go: `tm.fluxAggregator.On("LatestRoundData", nilOpts).Return(freshContractRoundDataResponse()).Once()`
$DIR/core/services/fluxmonitorv2/flux_monitor_test.go: `t.Cleanup(func() { fm.Close() })`
$DIR/core/services/fluxmonitorv2/flux_monitor_test.go: `tm.fluxAggregator.On("OracleRoundState", nilOpts, nodeAddr, roundZero).Return(roundState1, nil).Once().Run(func(args mock.Arguments) {
pollOccured <- struct{}{}
})`
$DIR/core/services/fluxmonitorv2/flux_monitor_test.go: `pollOccured <- struct{}{}`
$DIR/core/services/fluxmonitorv2/flux_monitor_test.go: `tm.orm.
On("FindOrCreateFluxMonitorRoundStats", mock.Anything, contractAddress, roundOne, mock.Anything).
Return(fluxmonitorv2.FluxMonitorRoundStatsV2{
Aggregator: contractAddress,
RoundID: 1,
NumSubmissions: 0,
}, nil).Once()`
$DIR/core/services/fluxmonitorv2/flux_monitor_test.go: `tm.fluxAggregator.On("OracleRoundState", nilOpts, nodeAddr, roundZero).Return(roundState1Responded, nil).Once().Run(func(args mock.Arguments) {
pollOccured <- struct{}{}
})`
$DIR/core/services/fluxmonitorv2/flux_monitor_test.go: `pollOccured <- struct{}{}`
$DIR/core/services/fluxmonitorv2/flux_monitor_test.go: `tm.orm.
On("FindOrCreateFluxMonitorRoundStats", mock.Anything, contractAddress, roundOne, mock.Anything).
Return(fluxmonitorv2.FluxMonitorRoundStatsV2{
PipelineRunID: corenull.NewInt64(int64(1), true),
Aggregator: contractAddress,
RoundID: 1,
NumSubmissions: 1,
}, nil).Once()`
$DIR/core/services/fluxmonitorv2/flux_monitor_test.go: `tm.pipelineORM.On("FindRun", mock.Anything, int64(1)).Return(pipeline.Run{
FinishedAt: null.TimeFrom(finishedAt),
FatalErrors: []null.String{null.StringFrom("an error to start retry ticker")},
}, nil)`
$DIR/core/services/fluxmonitorv2/flux_monitor_test.go: `flags.On("IsLowered", mock.Anything).Return(false, nil)`
$DIR/core/services/fluxmonitorv2/flux_monitor_test.go: `fm.ExportedRespondToFlagsRaisedLog()`
$DIR/core/services/fluxmonitorv2/flux_monitor_test.go: `tm.fluxAggregator.On("OracleRoundState", nilOpts, nodeAddr, roundZero).Return(roundState2, nil).Once()`
$DIR/core/services/fluxmonitorv2/flux_monitor_test.go: `tm.orm.
On("FindOrCreateFluxMonitorRoundStats", mock.Anything, contractAddress, roundTwo, mock.Anything).
Return(fluxmonitorv2.FluxMonitorRoundStatsV2{
Aggregator: contractAddress,
RoundID: 2,
NumSubmissions: 0,
}, nil).
Run(func(args mock.Arguments) {
pollOccured <- struct{}{}
}).
Once()`
$DIR/core/services/fluxmonitorv2/flux_monitor_test.go: `pollOccured <- struct{}{}`
$DIR/core/services/fluxmonitorv2/flux_monitor_test.go: `tm.keyStore.On("EnabledKeysForChain", mock.Anything, testutils.FixtureChainID).Return([]ethkey.KeyV2{{Address: nodeAddr}}, nil).Once()`
$DIR/core/services/fluxmonitorv2/flux_monitor_test.go: `tm.fluxAggregator.On("Address").Return(contractAddress)`
$DIR/core/services/fluxmonitorv2/flux_monitor_test.go: `tm.fluxAggregator.On("GetOracles", nilOpts).Return(oracles, nil)`
$DIR/core/services/fluxmonitorv2/flux_monitor_test.go: `tm.logBroadcaster.On("Register", mock.Anything, mock.Anything).Return(func() {})`
$DIR/core/services/fluxmonitorv2/flux_monitor_test.go: `tm.logBroadcaster.On("IsConnected").Return(true)`
$DIR/core/services/fluxmonitorv2/flux_monitor_test.go: `tm.fluxAggregator.On("LatestRoundData", nilOpts).Return(freshContractRoundDataResponse()).Once()`
$DIR/core/services/fluxmonitorv2/flux_monitor_test.go: `servicetest.Run(t, fm)`
$DIR/core/services/fluxmonitorv2/flux_monitor_test.go: `tm.fluxAggregator.On("OracleRoundState", nilOpts, nodeAddr, uint32(0)).Return(roundState1, nil).Once()`
$DIR/core/services/fluxmonitorv2/flux_monitor_test.go: `tm.orm.
On("FindOrCreateFluxMonitorRoundStats", mock.Anything, contractAddress, uint32(1), mock.Anything).
Return(fluxmonitorv2.FluxMonitorRoundStatsV2{
Aggregator: contractAddress,
RoundID: 1,
NumSubmissions: 0,
}, nil).Once().Run(func(args mock.Arguments) {
initialPollOccurred <- struct{}{}
})`
$DIR/core/services/fluxmonitorv2/flux_monitor_test.go: `initialPollOccurred <- struct{}{}`
$DIR/core/services/fluxmonitorv2/flux_monitor_test.go: `g.Eventually(func() int { return len(initialPollOccurred) }, testutils.WaitTimeout(t)).Should(gomega.Equal(1))`
$DIR/core/services/fluxmonitorv2/flux_monitor_test.go: `tm.fluxAggregator.On("OracleRoundState", nilOpts, nodeAddr, uint32(0)).Return(roundState1Responded, nil).Once().Run(func(args mock.Arguments) {
idleDurationOccured <- struct{}{}
})`
$DIR/core/services/fluxmonitorv2/flux_monitor_test.go: `idleDurationOccured <- struct{}{}`
$DIR/core/services/fluxmonitorv2/flux_monitor_test.go: `tm.orm.
On("FindOrCreateFluxMonitorRoundStats", mock.Anything, contractAddress, uint32(1), mock.Anything).
Return(fluxmonitorv2.FluxMonitorRoundStatsV2{
PipelineRunID: corenull.NewInt64(int64(1), true),
Aggregator: contractAddress,
RoundID: 1,
NumSubmissions: 1,
}, nil).Once()`
$DIR/core/services/fluxmonitorv2/flux_monitor_test.go: `tm.pipelineORM.On("FindRun", mock.Anything, int64(1)).Return(pipeline.Run{
FinishedAt: null.TimeFrom(finishedAt),
}, nil)`
$DIR/core/services/fluxmonitorv2/flux_monitor_test.go: `g.Eventually(func() int { return len(idleDurationOccured) }, testutils.WaitTimeout(t)).Should(gomega.Equal(1))`
$DIR/core/services/fluxmonitorv2/flux_monitor_test.go: `tm.fluxAggregator.On("OracleRoundState", nilOpts, nodeAddr, uint32(0)).Return(roundState2, nil).Once().Run(func(args mock.Arguments) {
idleDurationOccured <- struct{}{}
})`
$DIR/core/services/fluxmonitorv2/flux_monitor_test.go: `idleDurationOccured <- struct{}{}`
$DIR/core/services/fluxmonitorv2/flux_monitor_test.go: `tm.orm.
On("FindOrCreateFluxMonitorRoundStats", mock.Anything, contractAddress, uint32(2), mock.Anything).
Return(fluxmonitorv2.FluxMonitorRoundStatsV2{
Aggregator: contractAddress,
RoundID: 2,
NumSubmissions: 0,
}, nil).Once()`
$DIR/core/services/fluxmonitorv2/flux_monitor_test.go: `g.Eventually(func() int { return len(idleDurationOccured) }, testutils.WaitTimeout(t)).Should(gomega.Equal(2))`
$DIR/core/services/fluxmonitorv2/flux_monitor_test.go: `tm.fluxAggregator.On("OracleRoundState", nilOpts, nodeAddr, uint32(0)).Return(roundState3, nil).Twice().Run(func(args mock.Arguments) {
idleDurationOccured <- struct{}{}
})`
$DIR/core/services/fluxmonitorv2/flux_monitor_test.go: `idleDurationOccured <- struct{}{}`
$DIR/core/services/fluxmonitorv2/flux_monitor_test.go: `tm.orm.
On("FindOrCreateFluxMonitorRoundStats", mock.Anything, contractAddress, uint32(3), mock.Anything).
Return(fluxmonitorv2.FluxMonitorRoundStatsV2{
Aggregator: contractAddress,
RoundID: 3,
NumSubmissions: 0,
}, nil).Once()`
$DIR/core/services/fluxmonitorv2/flux_monitor_test.go: `tm.logBroadcaster.On("WasAlreadyConsumed", mock.Anything, mock.Anything).Return(false, nil).Once()`
$DIR/core/services/fluxmonitorv2/flux_monitor_test.go: `tm.logBroadcast.On("DecodedLog").Return(&flux_aggregator_wrapper.FluxAggregatorAnswerUpdated{})`
$DIR/core/services/fluxmonitorv2/flux_monitor_test.go: `tm.logBroadcast.On("String").Maybe().Return("")`
$DIR/core/services/fluxmonitorv2/flux_monitor_test.go: `tm.logBroadcaster.On("MarkConsumed", mock.Anything, mock.Anything, mock.Anything).Return(nil).Once()`
$DIR/core/services/fluxmonitorv2/flux_monitor_test.go: `fm.ExportedBacklog().Add(fluxmonitorv2.PriorityNewRoundLog, tm.logBroadcast)`
$DIR/core/services/fluxmonitorv2/flux_monitor_test.go: `fm.ExportedProcessLogs()`
$DIR/core/services/fluxmonitorv2/flux_monitor_test.go: `tm.keyStore.
On("EnabledKeysForChain", mock.Anything, testutils.FixtureChainID).
Return([]ethkey.KeyV2{{Address: nodeAddr}}, nil).
Twice()`
$DIR/core/services/fluxmonitorv2/flux_monitor_test.go: `tm.logBroadcaster.On("Register", mock.Anything, mock.Anything).Return(func() {})`
$DIR/core/services/fluxmonitorv2/flux_monitor_test.go: `tm.fluxAggregator.On("LatestRoundData", nilOpts).Return(makeRoundDataForRoundID(1), nil).Once()`
$DIR/core/services/fluxmonitorv2/flux_monitor_test.go: `tm.fluxAggregator.On("OracleRoundState", nilOpts, nodeAddr, uint32(1)).Return(roundState0, nil).Once()`
$DIR/core/services/fluxmonitorv2/flux_monitor_test.go: `tm.fluxAggregator.On("OracleRoundState", nilOpts, nodeAddr, uint32(0)).Return(flux_aggregator_wrapper.OracleRoundState{
RoundId: 1,
EligibleToSubmit: false,
LatestSubmission: answerBigInt,
StartedAt: 0,
Timeout: 0,
}, nil).
Run(func(mock.Arguments) { close(ch) }).
Once()`
$DIR/core/services/fluxmonitorv2/flux_monitor_test.go: `close(ch)`
$DIR/core/services/fluxmonitorv2/flux_monitor_test.go: `tm.fluxAggregator.On("Address").Return(common.Address{})`
$DIR/core/services/fluxmonitorv2/flux_monitor_test.go: `tm.fluxAggregator.On("GetOracles", nilOpts).Return(oracles, nil)`
$DIR/core/services/fluxmonitorv2/flux_monitor_test.go: `fm.ExportedRoundState(t)`
$DIR/core/services/fluxmonitorv2/flux_monitor_test.go: `servicetest.Run(t, fm)`
$DIR/core/services/fluxmonitorv2/flux_monitor_test.go: `t.Run(test.name, func(t *testing.T) {
t.Parallel()
orm := newORM(t, db, nil)
fm, tm := setup(t, db, disablePollTicker(true), disableIdleTimer(true), withORM(orm))
tm.keyStore.On("EnabledKeysForChain", mock.Anything, testutils.FixtureChainID).Return([]ethkey.KeyV2{{Address: nodeAddr}}, nil).Once()
tm.logBroadcaster.On("Register", mock.Anything, mock.Anything).Return(func() {})
tm.logBroadcaster.On("IsConnected").Return(true).Maybe()
tm.fluxAggregator.On("Address").Return(common.Address{})
tm.fluxAggregator.On("GetOracles", nilOpts).Return(oracles, nil)
tm.fluxAggregator.On("LatestRoundData", nilOpts).Return(makeRoundDataForRoundID(1), nil).Once()
tm.fluxAggregator.On("OracleRoundState", nilOpts, nodeAddr, uint32(1)).Return(flux_aggregator_wrapper.OracleRoundState{
RoundId: 1,
EligibleToSubmit: false,
StartedAt: now(),
Timeout: test.timeout,
}, nil).Once()
// 2nd roundstate call means round timer triggered
chRoundState := make(chan struct{})
tm.fluxAggregator.On("OracleRoundState", nilOpts, nodeAddr, uint32(0)).Return(flux_aggregator_wrapper.OracleRoundState{
RoundId: 1,
EligibleToSubmit: false,
}, nil).
Run(func(mock.Arguments) { close(chRoundState) }).
Maybe()
servicetest.Run(t, fm)
if test.expectedToSubmit {
g.Eventually(chRoundState).Should(gomega.BeClosed())
} else {
g.Consistently(chRoundState).ShouldNot(gomega.BeClosed())
}
})`
$DIR/core/services/fluxmonitorv2/flux_monitor_test.go: `tm.keyStore.On("EnabledKeysForChain", mock.Anything, testutils.FixtureChainID).Return([]ethkey.KeyV2{{Address: nodeAddr}}, nil).Once()`
$DIR/core/services/fluxmonitorv2/flux_monitor_test.go: `tm.logBroadcaster.On("Register", mock.Anything, mock.Anything).Return(func() {})`
$DIR/core/services/fluxmonitorv2/flux_monitor_test.go: `tm.logBroadcaster.On("IsConnected").Return(true).Maybe()`
$DIR/core/services/fluxmonitorv2/flux_monitor_test.go: `tm.fluxAggregator.On("Address").Return(common.Address{})`
$DIR/core/services/fluxmonitorv2/flux_monitor_test.go: `tm.fluxAggregator.On("GetOracles", nilOpts).Return(oracles, nil)`
$DIR/core/services/fluxmonitorv2/flux_monitor_test.go: `tm.fluxAggregator.On("LatestRoundData", nilOpts).Return(makeRoundDataForRoundID(1), nil).Once()`
$DIR/core/services/fluxmonitorv2/flux_monitor_test.go: `tm.fluxAggregator.On("OracleRoundState", nilOpts, nodeAddr, uint32(1)).Return(flux_aggregator_wrapper.OracleRoundState{
RoundId: 1,
EligibleToSubmit: false,
StartedAt: now(),
Timeout: test.timeout,
}, nil).Once()`
$DIR/core/services/fluxmonitorv2/flux_monitor_test.go: `tm.fluxAggregator.On("OracleRoundState", nilOpts, nodeAddr, uint32(0)).Return(flux_aggregator_wrapper.OracleRoundState{
RoundId: 1,
EligibleToSubmit: false,
}, nil).
Run(func(mock.Arguments) { close(chRoundState) }).
Maybe()`
$DIR/core/services/fluxmonitorv2/flux_monitor_test.go: `close(chRoundState)`
$DIR/core/services/fluxmonitorv2/flux_monitor_test.go: `servicetest.Run(t, fm)`
$DIR/core/services/fluxmonitorv2/flux_monitor_test.go: `g.Eventually(chRoundState).Should(gomega.BeClosed())`
$DIR/core/services/fluxmonitorv2/flux_monitor_test.go: `g.Consistently(chRoundState).ShouldNot(gomega.BeClosed())`
$DIR/core/services/fluxmonitorv2/flux_monitor_test.go: `t.Run(tc.name, func(t *testing.T) {
orm := newORM(t, db, nil)
fm, tm := setup(t,
db,
disablePollTicker(true),
withORM(orm),
)
initialPollOccurred := make(chan struct{}, 1)
tm.keyStore.On("EnabledKeysForChain", mock.Anything, testutils.FixtureChainID).Return([]ethkey.KeyV2{{Address: nodeAddr}}, nil).Once()
tm.logBroadcaster.On("Register", mock.Anything, mock.Anything).Return(func() {})
tm.logBroadcaster.On("IsConnected").Return(true).Maybe()
tm.fluxAggregator.On("Address").Return(common.Address{})
tm.fluxAggregator.On("GetOracles", nilOpts).Return(oracles, nil)
tm.fluxAggregator.On("LatestRoundData", nilOpts).Return(makeRoundDataForRoundID(1), nil).Once()
// first roundstate calling initialRoundState on fm.Start()
tm.fluxAggregator.On("OracleRoundState", nilOpts, nodeAddr, uint32(1)).Return(flux_aggregator_wrapper.OracleRoundState{
RoundId: 1,
EligibleToSubmit: false,
StartedAt: tc.startedAt,
Timeout: 10000, // round won't time out
}, nil)
// 2nd roundstate in initial poll
roundState := flux_aggregator_wrapper.OracleRoundState{RoundId: 1, EligibleToSubmit: false}
tm.fluxAggregator.On("OracleRoundState", nilOpts, nodeAddr, uint32(0)).Return(roundState, nil).
Once().
Run(func(args mock.Arguments) {
initialPollOccurred <- struct{}{}
})
// 3rd roundState call means idleTimer triggered
chRoundState := make(chan struct{})
tm.fluxAggregator.On("OracleRoundState", nilOpts, nodeAddr, uint32(0)).Return(roundState, nil).
Run(func(mock.Arguments) {
close(chRoundState)
}).
Maybe()
servicetest.Run(t, fm)
assert.Eventually(t, func() bool { return len(initialPollOccurred) == 1 }, 3*time.Second, 10*time.Millisecond)
if tc.expectedToSubmit {
g.Eventually(chRoundState).Should(gomega.BeClosed())
} else {
g.Consistently(chRoundState).ShouldNot(gomega.BeClosed())
}
})`
$DIR/core/services/fluxmonitorv2/flux_monitor_test.go: `tm.keyStore.On("EnabledKeysForChain", mock.Anything, testutils.FixtureChainID).Return([]ethkey.KeyV2{{Address: nodeAddr}}, nil).Once()`
$DIR/core/services/fluxmonitorv2/flux_monitor_test.go: `tm.logBroadcaster.On("Register", mock.Anything, mock.Anything).Return(func() {})`
$DIR/core/services/fluxmonitorv2/flux_monitor_test.go: `tm.logBroadcaster.On("IsConnected").Return(true).Maybe()`
$DIR/core/services/fluxmonitorv2/flux_monitor_test.go: `tm.fluxAggregator.On("Address").Return(common.Address{})`
$DIR/core/services/fluxmonitorv2/flux_monitor_test.go: `tm.fluxAggregator.On("GetOracles", nilOpts).Return(oracles, nil)`
$DIR/core/services/fluxmonitorv2/flux_monitor_test.go: `tm.fluxAggregator.On("LatestRoundData", nilOpts).Return(makeRoundDataForRoundID(1), nil).Once()`
$DIR/core/services/fluxmonitorv2/flux_monitor_test.go: `tm.fluxAggregator.On("OracleRoundState", nilOpts, nodeAddr, uint32(1)).Return(flux_aggregator_wrapper.OracleRoundState{
RoundId: 1,
EligibleToSubmit: false,
StartedAt: tc.startedAt,
Timeout: 10000, // round won't time out
}, nil)`
$DIR/core/services/fluxmonitorv2/flux_monitor_test.go: `tm.fluxAggregator.On("OracleRoundState", nilOpts, nodeAddr, uint32(0)).Return(roundState, nil).
Once().
Run(func(args mock.Arguments) {
initialPollOccurred <- struct{}{}
})`
$DIR/core/services/fluxmonitorv2/flux_monitor_test.go: `initialPollOccurred <- struct{}{}`
$DIR/core/services/fluxmonitorv2/flux_monitor_test.go: `tm.fluxAggregator.On("OracleRoundState", nilOpts, nodeAddr, uint32(0)).Return(roundState, nil).
Run(func(mock.Arguments) {
close(chRoundState)
}).
Maybe()`
$DIR/core/services/fluxmonitorv2/flux_monitor_test.go: `close(chRoundState)`
$DIR/core/services/fluxmonitorv2/flux_monitor_test.go: `servicetest.Run(t, fm)`
$DIR/core/services/fluxmonitorv2/flux_monitor_test.go: `g.Eventually(chRoundState).Should(gomega.BeClosed())`
$DIR/core/services/fluxmonitorv2/flux_monitor_test.go: `g.Consistently(chRoundState).ShouldNot(gomega.BeClosed())`
$DIR/core/services/fluxmonitorv2/flux_monitor_test.go: `tm.keyStore.On("EnabledKeysForChain", mock.Anything, testutils.FixtureChainID).Return([]ethkey.KeyV2{{Address: nodeAddr}}, nil).Once()`
$DIR/core/services/fluxmonitorv2/flux_monitor_test.go: `tm.logBroadcaster.On("Register", mock.Anything, mock.Anything).Return(func() {})`
$DIR/core/services/fluxmonitorv2/flux_monitor_test.go: `tm.logBroadcaster.On("IsConnected").Return(true).Maybe()`
$DIR/core/services/fluxmonitorv2/flux_monitor_test.go: `tm.fluxAggregator.On("Address").Return(common.Address{})`
$DIR/core/services/fluxmonitorv2/flux_monitor_test.go: `tm.fluxAggregator.On("GetOracles", nilOpts).Return(oracles, nil)`
$DIR/core/services/fluxmonitorv2/flux_monitor_test.go: `tm.fluxAggregator.On("LatestRoundData", nilOpts).Return(makeRoundDataForRoundID(1), nil).Once()`
$DIR/core/services/fluxmonitorv2/flux_monitor_test.go: `tm.fluxAggregator.On("OracleRoundState", nilOpts, nodeAddr, uint32(1)).Return(flux_aggregator_wrapper.OracleRoundState{
RoundId: 1,
EligibleToSubmit: false,
LatestSubmission: answerBigInt,
StartedAt: now(),
Timeout: uint64(1000000),
}, nil).Once()`
$DIR/core/services/fluxmonitorv2/flux_monitor_test.go: `tm.fluxAggregator.On("OracleRoundState", nilOpts, nodeAddr, uint32(0)).Return(flux_aggregator_wrapper.OracleRoundState{
RoundId: 1,
EligibleToSubmit: false,
LatestSubmission: answerBigInt,
StartedAt: startedAt,
PaymentAmount: big.NewInt(10),
AvailableFunds: big.NewInt(100),
Timeout: timeout,
}, nil).Once().
Run(func(mock.Arguments) { close(chRoundState1) }).
Once()`
$DIR/core/services/fluxmonitorv2/flux_monitor_test.go: `close(chRoundState1)`
$DIR/core/services/fluxmonitorv2/flux_monitor_test.go: `tm.fluxAggregator.On("OracleRoundState", nilOpts, nodeAddr, uint32(0)).Return(flux_aggregator_wrapper.OracleRoundState{
RoundId: 1,
EligibleToSubmit: false,
LatestSubmission: answerBigInt,
PaymentAmount: big.NewInt(10),
AvailableFunds: big.NewInt(100),
StartedAt: startedAt,
Timeout: timeout,
}, nil).Once().
Run(func(mock.Arguments) { close(chRoundState2) }).
Once()`
$DIR/core/services/fluxmonitorv2/flux_monitor_test.go: `close(chRoundState2)`
$DIR/core/services/fluxmonitorv2/flux_monitor_test.go: `servicetest.Run(t, fm)`
$DIR/core/services/fluxmonitorv2/flux_monitor_test.go: `tm.logBroadcaster.On("WasAlreadyConsumed", mock.Anything, mock.Anything).Return(false, nil)`
$DIR/core/services/fluxmonitorv2/flux_monitor_test.go: `tm.logBroadcaster.On("MarkConsumed", mock.Anything, mock.Anything, mock.Anything).Return(nil)`
$DIR/core/services/fluxmonitorv2/flux_monitor_test.go: `tm.logBroadcast.On("DecodedLog").Return(&flux_aggregator_wrapper.FluxAggregatorNewRound{
RoundId: big.NewInt(0),
StartedAt: big.NewInt(time.Now().UTC().Unix()),
})`
$DIR/core/services/fluxmonitorv2/flux_monitor_test.go: `tm.logBroadcast.On("String").Maybe().Return("")`
$DIR/core/services/fluxmonitorv2/flux_monitor_test.go: `fm.HandleLog(testutils.Context(t), tm.logBroadcast)`
$DIR/core/services/fluxmonitorv2/flux_monitor_test.go: `g.Eventually(chRoundState1).Should(gomega.BeClosed())`
$DIR/core/services/fluxmonitorv2/flux_monitor_test.go: `g.Eventually(chRoundState2).Should(gomega.BeClosed())`
$DIR/core/services/fluxmonitorv2/flux_monitor_test.go: `tm.fluxAggregator.
On("OracleRoundState", nilOpts, mock.Anything, mock.Anything).
Return(flux_aggregator_wrapper.OracleRoundState{RoundId: 123}, nil)`
$DIR/core/services/fluxmonitorv2/flux_monitor_test.go: `tm.logBroadcaster.On("WasAlreadyConsumed", mock.Anything, mock.Anything).Return(false, nil).Once()`
$DIR/core/services/fluxmonitorv2/flux_monitor_test.go: `tm.logBroadcast.On("DecodedLog").Return(&flux_aggregator_wrapper.FluxAggregatorAnswerUpdated{})`
$DIR/core/services/fluxmonitorv2/flux_monitor_test.go: `tm.logBroadcast.On("String").Maybe().Return("")`
$DIR/core/services/fluxmonitorv2/flux_monitor_test.go: `tm.logBroadcaster.On("MarkConsumed", mock.Anything, mock.Anything, mock.Anything).Return(nil).Once()`
$DIR/core/services/fluxmonitorv2/flux_monitor_test.go: `fm.ExportedBacklog().Add(fluxmonitorv2.PriorityNewRoundLog, tm.logBroadcast)`
$DIR/core/services/fluxmonitorv2/flux_monitor_test.go: `t.Run(tc.name, func(t *testing.T) {
t.Parallel()
fm, tm := setup(t, db)
tm.logBroadcaster.On("WasAlreadyConsumed", mock.Anything, mock.Anything).Return(tc.consumed, tc.err).Once()
fm.ExportedBacklog().Add(fluxmonitorv2.PriorityNewRoundLog, tm.logBroadcast)
fm.ExportedProcessLogs()
})`
$DIR/core/services/fluxmonitorv2/flux_monitor_test.go: `tm.logBroadcaster.On("WasAlreadyConsumed", mock.Anything, mock.Anything).Return(tc.consumed, tc.err).Once()`
$DIR/core/services/fluxmonitorv2/flux_monitor_test.go: `fm.ExportedBacklog().Add(fluxmonitorv2.PriorityNewRoundLog, tm.logBroadcast)`
$DIR/core/services/fluxmonitorv2/flux_monitor_test.go: `fm.ExportedProcessLogs()`
$DIR/core/services/fluxmonitorv2/flux_monitor_test.go: `t.Run("when NewRound log arrives, then poll ticker fires", func(t *testing.T) {
db, nodeAddr := setupStoreWithKey(t)
oracles := []common.Address{nodeAddr, testutils.NewAddress()}
fm, tm := setup(t,
db,
disableIdleTimer(true),
disablePollTicker(true),
)
var (
paymentAmount = defaultMinimumContractPayment.ToInt()
availableFunds = big.NewInt(1).Mul(paymentAmount, big.NewInt(1000))
)
const (
roundID = 3
answer = 100
)
run := &pipeline.Run{ID: 1}
tm.keyStore.On("EnabledKeysForChain", mock.Anything, testutils.FixtureChainID).Return([]ethkey.KeyV2{{Address: nodeAddr}}, nil).Once()
tm.logBroadcaster.On("IsConnected").Return(true).Maybe()
tm.orm.On("WithDataSource", mock.Anything).Return(fluxmonitorv2.ORM(tm.orm))
// Mocks initiated by the New Round log
tm.orm.On("MostRecentFluxMonitorRoundID", mock.Anything, contractAddress).Return(uint32(roundID), nil).Once()
tm.orm.
On("FindOrCreateFluxMonitorRoundStats", mock.Anything, contractAddress, uint32(roundID), mock.Anything).
Return(fluxmonitorv2.FluxMonitorRoundStatsV2{
Aggregator: contractAddress,
RoundID: roundID,
}, nil).Once()
tm.pipelineRunner.
On("ExecuteRun", mock.Anything, pipelineSpec, mock.Anything, mock.Anything).
Return(run, pipeline.TaskRunResults{
{
Result: pipeline.Result{
Value: decimal.NewFromInt(answer),
Error: nil,
},
Task: &pipeline.HTTPTask{},
},
}, nil)
tm.pipelineRunner.
On("InsertFinishedRun", mock.Anything, mock.Anything, mock.Anything, mock.Anything).
Return(nil).
Run(func(args mock.Arguments) {
args.Get(2).(*pipeline.Run).ID = 1
})
tm.logBroadcaster.On("MarkConsumed", mock.Anything, mock.Anything, mock.Anything).Return(nil).Once()
tm.contractSubmitter.On("Submit", mock.Anything, big.NewInt(roundID), big.NewInt(answer), buildIdempotencyKey(run.ID)).Return(nil).Once()
tm.orm.
On("UpdateFluxMonitorRoundStats",
mock.Anything,
contractAddress,
uint32(roundID),
int64(1),
uint(1),
).
Return(nil)
tm.fluxAggregator.On("GetOracles", nilOpts).Return(oracles, nil)
require.NoError(t, fm.SetOracleAddress())
tm.fluxAggregator.On("LatestRoundData", nilOpts).Return(flux_aggregator_wrapper.LatestRoundData{
Answer: big.NewInt(10),
UpdatedAt: big.NewInt(100),
}, nil)
// Fire off the NewRound log, which the node should respond to
tm.fluxAggregator.On("OracleRoundState", nilOpts, nodeAddr, uint32(roundID)).
Return(flux_aggregator_wrapper.OracleRoundState{
RoundId: roundID,
LatestSubmission: big.NewInt(answer),
EligibleToSubmit: true,
AvailableFunds: availableFunds,
PaymentAmount: paymentAmount,
OracleCount: 1,
}, nil).
Once()
fm.ExportedRespondToNewRoundLog(&flux_aggregator_wrapper.FluxAggregatorNewRound{
RoundId: big.NewInt(roundID),
StartedAt: big.NewInt(0),
}, log.NewLogBroadcast(types.Log{}, cltest.FixtureChainID, nil))
// Mocks initiated by polling
// Now force the node to try to poll and ensure it does not respond this time
tm.fluxAggregator.On("OracleRoundState", nilOpts, nodeAddr, uint32(0)).
Return(flux_aggregator_wrapper.OracleRoundState{
RoundId: roundID,
LatestSubmission: big.NewInt(answer),
EligibleToSubmit: true,
AvailableFunds: availableFunds,
PaymentAmount: paymentAmount,
OracleCount: 1,
}, nil).
Once()
tm.orm.
On("FindOrCreateFluxMonitorRoundStats", mock.Anything, contractAddress, uint32(roundID), mock.Anything).
Return(fluxmonitorv2.FluxMonitorRoundStatsV2{
PipelineRunID: corenull.NewInt64(int64(1), true),
Aggregator: contractAddress,
RoundID: roundID,
NumSubmissions: 1,
}, nil).Once()
now := time.Now()
tm.pipelineORM.On("FindRun", mock.Anything, int64(1)).Return(pipeline.Run{
FinishedAt: null.TimeFrom(now),
}, nil)
fm.ExportedPollIfEligible(0, 0)
})`
$DIR/core/services/fluxmonitorv2/flux_monitor_test.go: `tm.keyStore.On("EnabledKeysForChain", mock.Anything, testutils.FixtureChainID).Return([]ethkey.KeyV2{{Address: nodeAddr}}, nil).Once()`
$DIR/core/services/fluxmonitorv2/flux_monitor_test.go: `tm.logBroadcaster.On("IsConnected").Return(true).Maybe()`
$DIR/core/services/fluxmonitorv2/flux_monitor_test.go: `tm.orm.On("WithDataSource", mock.Anything).Return(fluxmonitorv2.ORM(tm.orm))`
$DIR/core/services/fluxmonitorv2/flux_monitor_test.go: `tm.orm.On("MostRecentFluxMonitorRoundID", mock.Anything, contractAddress).Return(uint32(roundID), nil).Once()`
$DIR/core/services/fluxmonitorv2/flux_monitor_test.go: `tm.orm.
On("FindOrCreateFluxMonitorRoundStats", mock.Anything, contractAddress, uint32(roundID), mock.Anything).
Return(fluxmonitorv2.FluxMonitorRoundStatsV2{
Aggregator: contractAddress,
RoundID: roundID,
}, nil).Once()`
$DIR/core/services/fluxmonitorv2/flux_monitor_test.go: `tm.pipelineRunner.
On("ExecuteRun", mock.Anything, pipelineSpec, mock.Anything, mock.Anything).
Return(run, pipeline.TaskRunResults{
{
Result: pipeline.Result{
Value: decimal.NewFromInt(answer),
Error: nil,
},
Task: &pipeline.HTTPTask{},
},
}, nil)`
$DIR/core/services/fluxmonitorv2/flux_monitor_test.go: `tm.pipelineRunner.
On("InsertFinishedRun", mock.Anything, mock.Anything, mock.Anything, mock.Anything).
Return(nil).
Run(func(args mock.Arguments) {
args.Get(2).(*pipeline.Run).ID = 1
})`
$DIR/core/services/fluxmonitorv2/flux_monitor_test.go: `args.Get(2).(*pipeline.Run).ID = 1`
$DIR/core/services/fluxmonitorv2/flux_monitor_test.go: `tm.logBroadcaster.On("MarkConsumed", mock.Anything, mock.Anything, mock.Anything).Return(nil).Once()`
$DIR/core/services/fluxmonitorv2/flux_monitor_test.go: `tm.contractSubmitter.On("Submit", mock.Anything, big.NewInt(roundID), big.NewInt(answer), buildIdempotencyKey(run.ID)).Return(nil).Once()`
$DIR/core/services/fluxmonitorv2/flux_monitor_test.go: `tm.orm.
On("UpdateFluxMonitorRoundStats",
mock.Anything,
contractAddress,
uint32(roundID),
int64(1),
uint(1),
).
Return(nil)`
$DIR/core/services/fluxmonitorv2/flux_monitor_test.go: `tm.fluxAggregator.On("GetOracles", nilOpts).Return(oracles, nil)`
$DIR/core/services/fluxmonitorv2/flux_monitor_test.go: `tm.fluxAggregator.On("LatestRoundData", nilOpts).Return(flux_aggregator_wrapper.LatestRoundData{
Answer: big.NewInt(10),
UpdatedAt: big.NewInt(100),
}, nil)`
$DIR/core/services/fluxmonitorv2/flux_monitor_test.go: `tm.fluxAggregator.On("OracleRoundState", nilOpts, nodeAddr, uint32(roundID)).
Return(flux_aggregator_wrapper.OracleRoundState{
RoundId: roundID,
LatestSubmission: big.NewInt(answer),
EligibleToSubmit: true,
AvailableFunds: availableFunds,
PaymentAmount: paymentAmount,
OracleCount: 1,
}, nil).
Once()`
$DIR/core/services/fluxmonitorv2/flux_monitor_test.go: `fm.ExportedRespondToNewRoundLog(&flux_aggregator_wrapper.FluxAggregatorNewRound{
RoundId: big.NewInt(roundID),
StartedAt: big.NewInt(0),
}, log.NewLogBroadcast(types.Log{}, cltest.FixtureChainID, nil))`
$DIR/core/services/fluxmonitorv2/flux_monitor_test.go: `tm.fluxAggregator.On("OracleRoundState", nilOpts, nodeAddr, uint32(0)).
Return(flux_aggregator_wrapper.OracleRoundState{
RoundId: roundID,
LatestSubmission: big.NewInt(answer),
EligibleToSubmit: true,
AvailableFunds: availableFunds,
PaymentAmount: paymentAmount,
OracleCount: 1,
}, nil).
Once()`
$DIR/core/services/fluxmonitorv2/flux_monitor_test.go: `tm.orm.
On("FindOrCreateFluxMonitorRoundStats", mock.Anything, contractAddress, uint32(roundID), mock.Anything).
Return(fluxmonitorv2.FluxMonitorRoundStatsV2{
PipelineRunID: corenull.NewInt64(int64(1), true),
Aggregator: contractAddress,
RoundID: roundID,
NumSubmissions: 1,
}, nil).Once()`
$DIR/core/services/fluxmonitorv2/flux_monitor_test.go: `tm.pipelineORM.On("FindRun", mock.Anything, int64(1)).Return(pipeline.Run{
FinishedAt: null.TimeFrom(now),
}, nil)`
$DIR/core/services/fluxmonitorv2/flux_monitor_test.go: `fm.ExportedPollIfEligible(0, 0)`
$DIR/core/services/fluxmonitorv2/flux_monitor_test.go: `t.Run("when poll ticker fires, then NewRound log arrives", func(t *testing.T) {
db, nodeAddr := setupStoreWithKey(t)
oracles := []common.Address{nodeAddr, testutils.NewAddress()}
fm, tm := setup(t,
db,
disableIdleTimer(true),
disablePollTicker(true),
)
var (
paymentAmount = defaultMinimumContractPayment.ToInt()
availableFunds = big.NewInt(1).Mul(paymentAmount, big.NewInt(1000))
)
const (
roundID = 3
answer = 100
)
run := &pipeline.Run{ID: 1}
tm.keyStore.On("EnabledKeysForChain", mock.Anything, testutils.FixtureChainID).Return([]ethkey.KeyV2{{Address: nodeAddr}}, nil).Once()
tm.logBroadcaster.On("IsConnected").Return(true).Maybe()
tm.orm.On("WithDataSource", mock.Anything).Return(fluxmonitorv2.ORM(tm.orm))
// First, force the node to try to poll, which should result in a submission
tm.fluxAggregator.On("LatestRoundData", nilOpts).Return(flux_aggregator_wrapper.LatestRoundData{
Answer: big.NewInt(10),
UpdatedAt: big.NewInt(100),
}, nil)
tm.fluxAggregator.On("OracleRoundState", nilOpts, nodeAddr, uint32(0)).
Return(flux_aggregator_wrapper.OracleRoundState{
RoundId: roundID,
LatestSubmission: big.NewInt(answer),
EligibleToSubmit: true,
AvailableFunds: availableFunds,
PaymentAmount: paymentAmount,
OracleCount: 1,
}, nil).
Once()
tm.orm.
On("FindOrCreateFluxMonitorRoundStats", mock.Anything, contractAddress, uint32(roundID), mock.Anything).
Return(fluxmonitorv2.FluxMonitorRoundStatsV2{
Aggregator: contractAddress,
RoundID: roundID,
}, nil).Once()
tm.pipelineRunner.
On("ExecuteRun", mock.Anything, pipelineSpec, mock.Anything, mock.Anything).
Return(run, pipeline.TaskRunResults{
{
Result: pipeline.Result{
Value: decimal.NewFromInt(answer),
Error: nil,
},
Task: &pipeline.HTTPTask{},
},
}, nil)
tm.pipelineRunner.
On("InsertFinishedRun", mock.Anything, mock.Anything, mock.Anything, mock.Anything).
Return(nil).
Run(func(args mock.Arguments) {
args.Get(2).(*pipeline.Run).ID = 1
})
tm.contractSubmitter.On("Submit", mock.Anything, big.NewInt(roundID), big.NewInt(answer), buildIdempotencyKey(run.ID)).Return(nil).Once()
tm.orm.
On("UpdateFluxMonitorRoundStats",
mock.Anything,
contractAddress,
uint32(roundID),
int64(1),
uint(0),
).
Return(nil).
Once()
tm.fluxAggregator.On("GetOracles", nilOpts).Return(oracles, nil)
require.NoError(t, fm.SetOracleAddress())
fm.ExportedPollIfEligible(0, 0)
// Now fire off the NewRound log and ensure it does not respond this time
tm.orm.On("MostRecentFluxMonitorRoundID", mock.Anything, contractAddress).Return(uint32(roundID), nil)
tm.orm.
On("FindOrCreateFluxMonitorRoundStats", mock.Anything, contractAddress, uint32(roundID), mock.Anything).
Return(fluxmonitorv2.FluxMonitorRoundStatsV2{
PipelineRunID: corenull.NewInt64(int64(1), true),
Aggregator: contractAddress,
RoundID: roundID,
NumSubmissions: 1,
}, nil).Once()
tm.pipelineORM.On("FindRun", mock.Anything, int64(1)).Return(pipeline.Run{}, nil)
tm.logBroadcaster.On("MarkConsumed", mock.Anything, mock.Anything, mock.Anything).Return(nil)
fm.ExportedRespondToNewRoundLog(&flux_aggregator_wrapper.FluxAggregatorNewRound{
RoundId: big.NewInt(roundID),
StartedAt: big.NewInt(0),
}, log.NewLogBroadcast(types.Log{}, cltest.FixtureChainID, nil))
})`
$DIR/core/services/fluxmonitorv2/flux_monitor_test.go: `tm.keyStore.On("EnabledKeysForChain", mock.Anything, testutils.FixtureChainID).Return([]ethkey.KeyV2{{Address: nodeAddr}}, nil).Once()`
$DIR/core/services/fluxmonitorv2/flux_monitor_test.go: `tm.logBroadcaster.On("IsConnected").Return(true).Maybe()`
$DIR/core/services/fluxmonitorv2/flux_monitor_test.go: `tm.orm.On("WithDataSource", mock.Anything).Return(fluxmonitorv2.ORM(tm.orm))`
$DIR/core/services/fluxmonitorv2/flux_monitor_test.go: `tm.fluxAggregator.On("LatestRoundData", nilOpts).Return(flux_aggregator_wrapper.LatestRoundData{
Answer: big.NewInt(10),
UpdatedAt: big.NewInt(100),
}, nil)`
$DIR/core/services/fluxmonitorv2/flux_monitor_test.go: `tm.fluxAggregator.On("OracleRoundState", nilOpts, nodeAddr, uint32(0)).
Return(flux_aggregator_wrapper.OracleRoundState{
RoundId: roundID,
LatestSubmission: big.NewInt(answer),
EligibleToSubmit: true,
AvailableFunds: availableFunds,
PaymentAmount: paymentAmount,
OracleCount: 1,
}, nil).
Once()`
$DIR/core/services/fluxmonitorv2/flux_monitor_test.go: `tm.orm.
On("FindOrCreateFluxMonitorRoundStats", mock.Anything, contractAddress, uint32(roundID), mock.Anything).
Return(fluxmonitorv2.FluxMonitorRoundStatsV2{
Aggregator: contractAddress,
RoundID: roundID,
}, nil).Once()`
$DIR/core/services/fluxmonitorv2/flux_monitor_test.go: `tm.pipelineRunner.
On("ExecuteRun", mock.Anything, pipelineSpec, mock.Anything, mock.Anything).
Return(run, pipeline.TaskRunResults{
{
Result: pipeline.Result{
Value: decimal.NewFromInt(answer),
Error: nil,
},
Task: &pipeline.HTTPTask{},
},
}, nil)`
$DIR/core/services/fluxmonitorv2/flux_monitor_test.go: `tm.pipelineRunner.
On("InsertFinishedRun", mock.Anything, mock.Anything, mock.Anything, mock.Anything).
Return(nil).
Run(func(args mock.Arguments) {
args.Get(2).(*pipeline.Run).ID = 1
})`
$DIR/core/services/fluxmonitorv2/flux_monitor_test.go: `args.Get(2).(*pipeline.Run).ID = 1`
$DIR/core/services/fluxmonitorv2/flux_monitor_test.go: `tm.contractSubmitter.On("Submit", mock.Anything, big.NewInt(roundID), big.NewInt(answer), buildIdempotencyKey(run.ID)).Return(nil).Once()`
$DIR/core/services/fluxmonitorv2/flux_monitor_test.go: `tm.orm.
On("UpdateFluxMonitorRoundStats",
mock.Anything,
contractAddress,
uint32(roundID),
int64(1),
uint(0),
).
Return(nil).
Once()`
$DIR/core/services/fluxmonitorv2/flux_monitor_test.go: `tm.fluxAggregator.On("GetOracles", nilOpts).Return(oracles, nil)`
$DIR/core/services/fluxmonitorv2/flux_monitor_test.go: `fm.ExportedPollIfEligible(0, 0)`
$DIR/core/services/fluxmonitorv2/flux_monitor_test.go: `tm.orm.On("MostRecentFluxMonitorRoundID", mock.Anything, contractAddress).Return(uint32(roundID), nil)`
$DIR/core/services/fluxmonitorv2/flux_monitor_test.go: `tm.orm.
On("FindOrCreateFluxMonitorRoundStats", mock.Anything, contractAddress, uint32(roundID), mock.Anything).
Return(fluxmonitorv2.FluxMonitorRoundStatsV2{
PipelineRunID: corenull.NewInt64(int64(1), true),
Aggregator: contractAddress,
RoundID: roundID,
NumSubmissions: 1,
}, nil).Once()`
$DIR/core/services/fluxmonitorv2/flux_monitor_test.go: `tm.pipelineORM.On("FindRun", mock.Anything, int64(1)).Return(pipeline.Run{}, nil)`
$DIR/core/services/fluxmonitorv2/flux_monitor_test.go: `tm.logBroadcaster.On("MarkConsumed", mock.Anything, mock.Anything, mock.Anything).Return(nil)`
$DIR/core/services/fluxmonitorv2/flux_monitor_test.go: `fm.ExportedRespondToNewRoundLog(&flux_aggregator_wrapper.FluxAggregatorNewRound{
RoundId: big.NewInt(roundID),
StartedAt: big.NewInt(0),
}, log.NewLogBroadcast(types.Log{}, cltest.FixtureChainID, nil))`
$DIR/core/services/fluxmonitorv2/flux_monitor_test.go: `tm.keyStore.On("EnabledKeysForChain", mock.Anything, testutils.FixtureChainID).Return([]ethkey.KeyV2{{Address: nodeAddr}}, nil).Once()`
$DIR/core/services/fluxmonitorv2/flux_monitor_test.go: `tm.logBroadcaster.On("IsConnected").Return(true).Maybe()`
$DIR/core/services/fluxmonitorv2/flux_monitor_test.go: `tm.orm.On("WithDataSource", mock.Anything).Return(fluxmonitorv2.ORM(tm.orm))`
$DIR/core/services/fluxmonitorv2/flux_monitor_test.go: `tm.fluxAggregator.On("LatestRoundData", nilOpts).Return(flux_aggregator_wrapper.LatestRoundData{
Answer: big.NewInt(10),
UpdatedAt: big.NewInt(100),
}, nil)`
$DIR/core/services/fluxmonitorv2/flux_monitor_test.go: `tm.fluxAggregator.On("OracleRoundState", nilOpts, nodeAddr, uint32(0)).
Return(flux_aggregator_wrapper.OracleRoundState{
RoundId: roundID,
LatestSubmission: big.NewInt(answer),
EligibleToSubmit: true,
AvailableFunds: availableFunds,
PaymentAmount: paymentAmount,
OracleCount: 1,
}, nil).
Once()`
$DIR/core/services/fluxmonitorv2/flux_monitor_test.go: `tm.orm.
On("FindOrCreateFluxMonitorRoundStats", mock.Anything, contractAddress, uint32(roundID), mock.Anything).
Return(fluxmonitorv2.FluxMonitorRoundStatsV2{
Aggregator: contractAddress,
RoundID: roundID,
}, nil).Once()`
$DIR/core/services/fluxmonitorv2/flux_monitor_test.go: `tm.pipelineRunner.
On("ExecuteRun", mock.Anything, pipelineSpec, mock.Anything, mock.Anything).
Return(run, pipeline.TaskRunResults{
{
Result: pipeline.Result{
Value: decimal.NewFromInt(answer),
Error: nil,
},
Task: &pipeline.HTTPTask{},
},
}, nil)`
$DIR/core/services/fluxmonitorv2/flux_monitor_test.go: `tm.pipelineRunner.
On("InsertFinishedRun", mock.Anything, mock.Anything, mock.Anything, mock.Anything).
Return(nil).
Run(func(args mock.Arguments) {
args.Get(2).(*pipeline.Run).ID = 1
})`
$DIR/core/services/fluxmonitorv2/flux_monitor_test.go: `args.Get(2).(*pipeline.Run).ID = 1`
$DIR/core/services/fluxmonitorv2/flux_monitor_test.go: `tm.contractSubmitter.On("Submit", mock.Anything, big.NewInt(roundID), big.NewInt(answer), buildIdempotencyKey(run.ID)).Return(nil).Once()`
$DIR/core/services/fluxmonitorv2/flux_monitor_test.go: `tm.orm.
On("UpdateFluxMonitorRoundStats",
mock.Anything,
contractAddress,
uint32(roundID),
int64(1),
uint(0),
).
Return(nil).
Once()`
$DIR/core/services/fluxmonitorv2/flux_monitor_test.go: `tm.fluxAggregator.On("GetOracles", nilOpts).Return(oracles, nil)`
$DIR/core/services/fluxmonitorv2/flux_monitor_test.go: `fm.ExportedPollIfEligible(0, 0)`
$DIR/core/services/fluxmonitorv2/flux_monitor_test.go: `tm.orm.On("MostRecentFluxMonitorRoundID", mock.Anything, contractAddress).Return(uint32(roundID), nil)`
$DIR/core/services/fluxmonitorv2/flux_monitor_test.go: `tm.orm.
On("FindOrCreateFluxMonitorRoundStats", mock.Anything, contractAddress, uint32(olderRoundID), mock.Anything).
Return(fluxmonitorv2.FluxMonitorRoundStatsV2{
PipelineRunID: corenull.NewInt64(int64(1), true),
Aggregator: contractAddress,
RoundID: olderRoundID,
NumSubmissions: 1,
}, nil).Once()`
$DIR/core/services/fluxmonitorv2/flux_monitor_test.go: `tm.pipelineORM.On("FindRun", mock.Anything, int64(1)).Return(pipeline.Run{}, nil)`
$DIR/core/services/fluxmonitorv2/flux_monitor_test.go: `tm.logBroadcaster.On("MarkConsumed", mock.Anything, mock.Anything, mock.Anything).Return(nil)`
$DIR/core/services/fluxmonitorv2/flux_monitor_test.go: `fm.ExportedRespondToNewRoundLog(&flux_aggregator_wrapper.FluxAggregatorNewRound{
RoundId: big.NewInt(olderRoundID),
StartedAt: big.NewInt(0),
}, log.NewLogBroadcast(types.Log{}, cltest.FixtureChainID, nil))`
$DIR/core/services/fluxmonitorv2/flux_monitor_test.go: `tm.orm.On("MostRecentFluxMonitorRoundID", mock.Anything, contractAddress).Return(uint32(roundID), nil)`
$DIR/core/services/fluxmonitorv2/flux_monitor_test.go: `tm.orm.
On("FindOrCreateFluxMonitorRoundStats", mock.Anything, contractAddress, uint32(olderRoundID), uint(1)).
Return(fluxmonitorv2.FluxMonitorRoundStatsV2{
PipelineRunID: corenull.NewInt64(int64(1), true),
Aggregator: contractAddress,
RoundID: olderRoundID,
NumSubmissions: 1,
NumNewRoundLogs: 1,
}, nil).Once()`
$DIR/core/services/fluxmonitorv2/flux_monitor_test.go: `tm.pipelineORM.On("FindRun", mock.Anything, int64(1)).Return(pipeline.Run{}, nil)`
$DIR/core/services/fluxmonitorv2/flux_monitor_test.go: `tm.orm.On("DeleteFluxMonitorRoundsBackThrough", mock.Anything, contractAddress, uint32(olderRoundID)).Return(nil)`
$DIR/core/services/fluxmonitorv2/flux_monitor_test.go: `tm.orm.
On("FindOrCreateFluxMonitorRoundStats", mock.Anything, contractAddress, uint32(olderRoundID), uint(1)).
Return(fluxmonitorv2.FluxMonitorRoundStatsV2{
PipelineRunID: corenull.NewInt64(int64(1), true),
Aggregator: contractAddress,
RoundID: olderRoundID,
NumSubmissions: 0,
NumNewRoundLogs: 1,
}, nil).Once()`
$DIR/core/services/fluxmonitorv2/flux_monitor_test.go: `tm.fluxAggregator.On("OracleRoundState", nilOpts, nodeAddr, uint32(olderRoundID)).
Return(flux_aggregator_wrapper.OracleRoundState{
RoundId: olderRoundID,
LatestSubmission: big.NewInt(answer),
EligibleToSubmit: true,
AvailableFunds: availableFunds,
PaymentAmount: paymentAmount,
OracleCount: 1,
}, nil).
Once()`
$DIR/core/services/fluxmonitorv2/flux_monitor_test.go: `tm.contractSubmitter.On("Submit", mock.Anything, big.NewInt(olderRoundID), big.NewInt(answer), buildIdempotencyKey(run.ID)).Return(nil).Once()`
$DIR/core/services/fluxmonitorv2/flux_monitor_test.go: `tm.orm.
On("UpdateFluxMonitorRoundStats",
mock.Anything,
contractAddress,
uint32(olderRoundID),
int64(1),
uint(1),
).
Return(nil).
Once()`
$DIR/core/services/fluxmonitorv2/flux_monitor_test.go: `tm.logBroadcaster.On("MarkConsumed", mock.Anything, mock.Anything, mock.Anything).Return(nil)`
$DIR/core/services/fluxmonitorv2/flux_monitor_test.go: `fm.ExportedRespondToNewRoundLog(&flux_aggregator_wrapper.FluxAggregatorNewRound{
RoundId: big.NewInt(olderRoundID),
StartedAt: big.NewInt(0),
}, log.NewLogBroadcast(types.Log{}, cltest.FixtureChainID, nil))`
$DIR/core/services/fluxmonitorv2/flux_monitor_test.go: `_, _ = setup(t, db, enableDrumbeatTicker("@every 10s", 0))`
$DIR/core/services/fluxmonitorv2/flux_monitor_test.go: `tm.keyStore.On("EnabledKeysForChain", mock.Anything, testutils.FixtureChainID).Return([]ethkey.KeyV2{{Address: nodeAddr}}, nil)`
$DIR/core/services/fluxmonitorv2/flux_monitor_test.go: `tm.orm.On("WithDataSource", mock.Anything).Return(fluxmonitorv2.ORM(tm.orm))`
$DIR/core/services/fluxmonitorv2/flux_monitor_test.go: `tm.fluxAggregator.On("Address").Return(common.Address{})`
$DIR/core/services/fluxmonitorv2/flux_monitor_test.go: `tm.fluxAggregator.On("GetOracles", nilOpts).Return(oracles, nil)`
$DIR/core/services/fluxmonitorv2/flux_monitor_test.go: `tm.logBroadcaster.On("Register", mock.Anything, mock.Anything).Return(func() {})`
$DIR/core/services/fluxmonitorv2/flux_monitor_test.go: `tm.logBroadcaster.On("IsConnected").Return(true).Maybe()`
$DIR/core/services/fluxmonitorv2/flux_monitor_test.go: `tm.fluxAggregator.On("LatestRoundData", nilOpts).Return(freshContractRoundDataResponse()).Once()`
$DIR/core/services/fluxmonitorv2/flux_monitor_test.go: `tm.fluxAggregator.On("OracleRoundState", nilOpts, nodeAddr, uint32(0)).
Return(roundState, nil).
Once()`
$DIR/core/services/fluxmonitorv2/flux_monitor_test.go: `tm.fluxAggregator.On("OracleRoundState", nilOpts, nodeAddr, roundID).
Return(roundState, nil).
Once()`
$DIR/core/services/fluxmonitorv2/flux_monitor_test.go: `tm.orm.On("FindOrCreateFluxMonitorRoundStats", mock.Anything, contractAddress, roundID, mock.Anything).
Return(fluxmonitorv2.FluxMonitorRoundStatsV2{Aggregator: contractAddress, RoundID: roundID}, nil).
Once()`
$DIR/core/services/fluxmonitorv2/flux_monitor_test.go: `tm.fluxAggregator.On("LatestRoundData", nilOpts).
Return(flux_aggregator_wrapper.LatestRoundData{
Answer: answerBigInt,
UpdatedAt: big.NewInt(100),
}, nil).
Once()`
$DIR/core/services/fluxmonitorv2/flux_monitor_test.go: `tm.pipelineRunner.
On("ExecuteRun", mock.Anything, pipelineSpec, pipeline.NewVarsFrom(
map[string]interface{}{
"jobRun": map[string]interface{}{
"meta": map[string]interface{}{
"latestAnswer": float64(fetchedAnswer),
"updatedAt": float64(100),
},
},
"jobSpec": map[string]interface{}{
"databaseID": int32(0),
"externalJobID": uuid.UUID{},
"name": "",
"evmChainID": testutils.FixtureChainID.String(),
},
},
), mock.Anything).
Return(&pipeline.Run{ID: runID}, pipeline.TaskRunResults{
{
Result: pipeline.Result{
Value: decimal.NewFromInt(fetchedAnswer),
Error: nil,
},
Task: &pipeline.HTTPTask{},
},
}, nil).
Once()`
$DIR/core/services/fluxmonitorv2/flux_monitor_test.go: `tm.pipelineRunner.On("InsertFinishedRun", mock.Anything, mock.Anything, mock.Anything, mock.Anything).
Return(nil).
Run(func(args mock.Arguments) {
args.Get(2).(*pipeline.Run).ID = runID
}).
Once()`
$DIR/core/services/fluxmonitorv2/flux_monitor_test.go: `args.Get(2).(*pipeline.Run).ID = runID`
$DIR/core/services/fluxmonitorv2/flux_monitor_test.go: `tm.contractSubmitter.
On("Submit", mock.Anything, big.NewInt(int64(roundID)), answerBigInt, buildIdempotencyKey(runID)).
Return(nil).
Once()`
$DIR/core/services/fluxmonitorv2/flux_monitor_test.go: `tm.orm.
On("UpdateFluxMonitorRoundStats", mock.Anything, contractAddress, roundID, runID, mock.Anything).
Return(nil).
Once()`
$DIR/core/services/fluxmonitorv2/flux_monitor_test.go: `expectSubmission(2, 1)`
$DIR/core/services/fluxmonitorv2/flux_monitor_test.go: `expectSubmission(3, 2)`
$DIR/core/services/fluxmonitorv2/flux_monitor_test.go: `expectSubmission(4, 3)`
$DIR/core/services/fluxmonitorv2/flux_monitor_test.go: `tm.fluxAggregator.
On("OracleRoundState", nilOpts, nodeAddr, uint32(0)).
Return(flux_aggregator_wrapper.OracleRoundState{RoundId: 4, EligibleToSubmit: false, LatestSubmission: answerBigInt, StartedAt: now()}, nil).
Maybe()`
$DIR/core/services/fluxmonitorv2/flux_monitor_test.go: `servicetest.Run(t, fm)`
$DIR/core/services/fluxmonitorv2/flux_monitor_test.go: `cltest.EventuallyExpectationsMet(t, tm.logBroadcaster, waitTime, interval)`
$DIR/core/services/fluxmonitorv2/flux_monitor_test.go: `cltest.EventuallyExpectationsMet(t, tm.fluxAggregator, waitTime, interval)`
$DIR/core/services/fluxmonitorv2/flux_monitor_test.go: `cltest.EventuallyExpectationsMet(t, tm.orm, waitTime, interval)`
$DIR/core/services/fluxmonitorv2/flux_monitor_test.go: `cltest.EventuallyExpectationsMet(t, tm.pipelineORM, waitTime, interval)`
$DIR/core/services/fluxmonitorv2/flux_monitor_test.go: `.Run(tc.name, func(t *testing.T) {
t.Parallel()
fm, tm := setup(t, db)
tm.keyStore.On("EnabledKeysForChain", mock.Anything, testutils.FixtureChainID).Return([]ethkey.KeyV2{{Address: nodeAddr}}, nil).Once()
tm.logBroadcaster.On("IsConnected").Return(tc.connected).Once()
// Setup Answers
answers := undeviatedAnswers
if tc.answersDeviate {
answers = deviatedAnswers
}
latestAnswer := answers.latestAnswer
// Setup Run
run := pipeline.Run{
ID: 1,
PipelineSpecID: 1,
}
if tc.hasPreviousRun {
switch tc.previousRunStatus {
case pipeline.RunStatusCompleted:
now := time.Now()
run.FinishedAt = null.TimeFrom(now)
case pipeline.RunStatusErrored:
run.FatalErrors = []null.String{
null.StringFrom("Random: String, foo"),
}
default:
}
tm.orm.
On("FindOrCreateFluxMonitorRoundStats", mock.Anything, contractAddress, uint32(reportableRoundID), mock.Anything).
Return(fluxmonitorv2.FluxMonitorRoundStatsV2{
Aggregator: contractAddress,
RoundID: reportableRoundID,
PipelineRunID: corenull.Int64From(run.ID),
NumSubmissions: 1,
}, nil)
tm.pipelineORM.
On("FindRun", mock.Anything, run.ID).
Return(run, nil)
} else {
if tc.connected {
tm.orm.
On("FindOrCreateFluxMonitorRoundStats", mock.Anything, contractAddress, uint32(reportableRoundID), mock.Anything).
Return(fluxmonitorv2.FluxMonitorRoundStatsV2{
Aggregator: contractAddress,
RoundID: reportableRoundID,
}, nil)
}
}
// Set up funds
var availableFunds *big.Int
var paymentAmount *big.Int
minPayment := defaultMinimumContractPayment.ToInt()
if tc.funded {
availableFunds = big.NewInt(1).Mul(big.NewInt(10000), minPayment)
paymentAmount = minPayment
} else {
availableFunds = big.NewInt(1)
paymentAmount = minPayment
}
roundState := flux_aggregator_wrapper.OracleRoundState{
RoundId: reportableRoundID,
EligibleToSubmit: tc.eligible,
LatestSubmission: big.NewInt(latestAnswer),
AvailableFunds: availableFunds,
PaymentAmount: paymentAmount,
OracleCount: oracleCount,
}
tm.fluxAggregator.
On("OracleRoundState", nilOpts, nodeAddr, uint32(0)).
Return(roundState, nil).Maybe()
if tc.expectedToPoll {
tm.fluxAggregator.On("LatestRoundData", nilOpts).Return(flux_aggregator_wrapper.LatestRoundData{
Answer: big.NewInt(10),
UpdatedAt: big.NewInt(100),
}, nil)
tm.pipelineRunner.
On("ExecuteRun", mock.Anything, pipelineSpec, pipeline.NewVarsFrom(
map[string]interface{}{
"jobRun": map[string]interface{}{
"meta": map[string]interface{}{
"latestAnswer": float64(10),
"updatedAt": float64(100),
},
},
"jobSpec": map[string]interface{}{
"databaseID": int32(0),
"externalJobID": uuid.UUID{},
"name": "",
"evmChainID": testutils.FixtureChainID.String(),
},
},
), mock.Anything).
Return(&run, pipeline.TaskRunResults{
{
Result: pipeline.Result{
Value: decimal.NewFromInt(answers.polledAnswer),
Error: nil,
},
Task: &pipeline.HTTPTask{},
},
}, nil)
}
if tc.expectedToSubmit {
tm.pipelineRunner.On("InsertFinishedRun", mock.Anything, mock.Anything, mock.Anything, mock.Anything).
Return(nil).
Run(func(args mock.Arguments) {
args.Get(2).(*pipeline.Run).ID = 1
}).
Once()
tm.contractSubmitter.
On("Submit", mock.Anything, big.NewInt(reportableRoundID), big.NewInt(answers.polledAnswer), buildIdempotencyKey(run.ID)).
Return(nil).
Once()
tm.orm.
On("UpdateFluxMonitorRoundStats",
mock.Anything,
contractAddress,
uint32(reportableRoundID),
int64(1),
mock.Anything,
).
Return(nil)
tm.orm.On("WithDataSource", mock.Anything).Return(fluxmonitorv2.ORM(tm.orm))
}
oracles := []common.Address{nodeAddr, testutils.NewAddress()}
tm.fluxAggregator.On("GetOracles", nilOpts).Return(oracles, nil)
require.NoError(t, fm.SetOracleAddress())
fm.ExportedPollIfEligible(thresholds.rel, thresholds.abs)
})`
$DIR/core/services/fluxmonitorv2/flux_monitor_test.go: `.keyStore.On("EnabledKeysForChain", mock.Anything, testutils.FixtureChainID)`
$DIR/core/services/fluxmonitorv2/flux_monitor_test.go: `.Return([]ethkey.KeyV2{{Address: nodeAddr}}, nil)`
$DIR/core/services/fluxmonitorv2/flux_monitor_test.go: `.Once()`
$DIR/core/services/fluxmonitorv2/flux_monitor_test.go: `.logBroadcaster.On("IsConnected")`
$DIR/core/services/fluxmonitorv2/flux_monitor_test.go: `.Return(tc.connected)`
$DIR/core/services/fluxmonitorv2/flux_monitor_test.go: `.Once()`
$DIR/core/services/fluxmonitorv2/flux_monitor_test.go: `.Now()`
$DIR/core/services/fluxmonitorv2/flux_monitor_test.go: `.TimeFrom(now)`
$DIR/core/services/fluxmonitorv2/flux_monitor_test.go: `.StringFrom("Random: String, foo")`
$DIR/core/services/fluxmonitorv2/flux_monitor_test.go: `.orm.
On("FindOrCreateFluxMonitorRoundStats", mock.Anything, contractAddress, uint32(reportableRoundID), mock.Anything)`
$DIR/core/services/fluxmonitorv2/flux_monitor_test.go: `.
Return(fluxmonitorv2.FluxMonitorRoundStatsV2{
Aggregator: contractAddress,
RoundID: reportableRoundID,
PipelineRunID: corenull.Int64From(run.ID),
NumSubmissions: 1,
}, nil)`
$DIR/core/services/fluxmonitorv2/flux_monitor_test.go: `.Int64From(run.ID)`
$DIR/core/services/fluxmonitorv2/flux_monitor_test.go: `.pipelineORM.
On("FindRun", mock.Anything, run.ID)`
$DIR/core/services/fluxmonitorv2/flux_monitor_test.go: `.
Return(run, nil)`
$DIR/core/services/fluxmonitorv2/flux_monitor_test.go: `.orm.
On("FindOrCreateFluxMonitorRoundStats", mock.Anything, contractAddress, uint32(reportableRoundID), mock.Anything)`
$DIR/core/services/fluxmonitorv2/flux_monitor_test.go: `.
Return(fluxmonitorv2.FluxMonitorRoundStatsV2{
Aggregator: contractAddress,
RoundID: reportableRoundID,
}, nil)`
$DIR/core/services/fluxmonitorv2/flux_monitor_test.go: `.ToInt()`
$DIR/core/services/fluxmonitorv2/flux_monitor_test.go: `.NewInt(1)`
$DIR/core/services/fluxmonitorv2/flux_monitor_test.go: `.Mul(big.NewInt(10000), minPayment)`
$DIR/core/services/fluxmonitorv2/flux_monitor_test.go: `.NewInt(10000)`
$DIR/core/services/fluxmonitorv2/flux_monitor_test.go: `.NewInt(1)`
$DIR/core/services/fluxmonitorv2/flux_monitor_test.go: `.NewInt(latestAnswer)`
$DIR/core/services/fluxmonitorv2/flux_monitor_test.go: `.fluxAggregator.
On("OracleRoundState", nilOpts, nodeAddr, uint32(0))`
$DIR/core/services/fluxmonitorv2/flux_monitor_test.go: `.
Return(roundState, nil)`
$DIR/core/services/fluxmonitorv2/flux_monitor_test.go: `.Maybe()`
$DIR/core/services/fluxmonitorv2/flux_monitor_test.go: `.fluxAggregator.On("LatestRoundData", nilOpts)`
$DIR/core/services/fluxmonitorv2/flux_monitor_test.go: `.Return(flux_aggregator_wrapper.LatestRoundData{
Answer: big.NewInt(10),
UpdatedAt: big.NewInt(100),
}, nil)`
$DIR/core/services/fluxmonitorv2/flux_monitor_test.go: `.NewInt(10)`
$DIR/core/services/fluxmonitorv2/flux_monitor_test.go: `.NewInt(100)`
$DIR/core/services/fluxmonitorv2/flux_monitor_test.go: `.pipelineRunner.
On("ExecuteRun", mock.Anything, pipelineSpec, pipeline.NewVarsFrom(
map[string]interface{}{
"jobRun": map[string]interface{}{
"meta": map[string]interface{}{
"latestAnswer": float64(10),
"updatedAt": float64(100),
},
},
"jobSpec": map[string]interface{}{
"databaseID": int32(0),
"externalJobID": uuid.UUID{},
"name": "",
"evmChainID": testutils.FixtureChainID.String(),
},
},
), mock.Anything)`
$DIR/core/services/fluxmonitorv2/flux_monitor_test.go: `.NewVarsFrom(
map[string]interface{}{
"jobRun": map[string]interface{}{
"meta": map[string]interface{}{
"latestAnswer": float64(10),
"updatedAt": float64(100),
},
},
"jobSpec": map[string]interface{}{
"databaseID": int32(0),
"externalJobID": uuid.UUID{},
"name": "",
"evmChainID": testutils.FixtureChainID.String(),
},
},
)`
$DIR/core/services/fluxmonitorv2/flux_monitor_test.go: `.FixtureChainID.String()`
$DIR/core/services/fluxmonitorv2/flux_monitor_test.go: `.
Return(&run, pipeline.TaskRunResults{
{
Result: pipeline.Result{
Value: decimal.NewFromInt(answers.polledAnswer),
Error: nil,
},
Task: &pipeline.HTTPTask{},
},
}, nil)`
$DIR/core/services/fluxmonitorv2/flux_monitor_test.go: `.NewFromInt(answers.polledAnswer)`
$DIR/core/services/fluxmonitorv2/flux_monitor_test.go: `.pipelineRunner.On("InsertFinishedRun", mock.Anything, mock.Anything, mock.Anything, mock.Anything)`
$DIR/core/services/fluxmonitorv2/flux_monitor_test.go: `.
Return(nil)`
$DIR/core/services/fluxmonitorv2/flux_monitor_test.go: `.
Run(func(args mock.Arguments) {
args.Get(2).(*pipeline.Run).ID = 1
})`
$DIR/core/services/fluxmonitorv2/flux_monitor_test.go: `.Get(2)`
$DIR/core/services/fluxmonitorv2/flux_monitor_test.go: `.
Once()`
$DIR/core/services/fluxmonitorv2/flux_monitor_test.go: `.contractSubmitter.
On("Submit", mock.Anything, big.NewInt(reportableRoundID), big.NewInt(answers.polledAnswer), buildIdempotencyKey(run.ID))`
$DIR/core/services/fluxmonitorv2/flux_monitor_test.go: `.NewInt(reportableRoundID)`
$DIR/core/services/fluxmonitorv2/flux_monitor_test.go: `.NewInt(answers.polledAnswer)`
$DIR/core/services/fluxmonitorv2/flux_monitor_test.go: `.
Return(nil)`
$DIR/core/services/fluxmonitorv2/flux_monitor_test.go: `.
Once()`
$DIR/core/services/fluxmonitorv2/flux_monitor_test.go: `.orm.
On("UpdateFluxMonitorRoundStats",
mock.Anything,
contractAddress,
uint32(reportableRoundID),
int64(1),
mock.Anything,
)`
$DIR/core/services/fluxmonitorv2/flux_monitor_test.go: `.
Return(nil)`
$DIR/core/services/fluxmonitorv2/flux_monitor_test.go: `.orm.On("WithDataSource", mock.Anything)`
$DIR/core/services/fluxmonitorv2/flux_monitor_test.go: `.Return(fluxmonitorv2.ORM(tm.orm))`
$DIR/core/services/fluxmonitorv2/flux_monitor_test.go: `.ORM(tm.orm)`
$DIR/core/services/fluxmonitorv2/flux_monitor_test.go: `.NewAddress()`
$DIR/core/services/fluxmonitorv2/flux_monitor_test.go: `.fluxAggregator.On("GetOracles", nilOpts)`
$DIR/core/services/fluxmonitorv2/flux_monitor_test.go: `.Return(oracles, nil)`
$DIR/core/services/fluxmonitorv2/flux_monitor_test.go: `.ExportedPollIfEligible(thresholds.rel, thresholds.abs)`
$DIR/core/services/fluxmonitorv2/flux_monitor_test.go: `.NewAddress()`
$DIR/core/services/fluxmonitorv2/flux_monitor_test.go: `.keyStore.On("EnabledKeysForChain", mock.Anything, testutils.FixtureChainID)`
$DIR/core/services/fluxmonitorv2/flux_monitor_test.go: `.Return([]ethkey.KeyV2{{Address: nodeAddr}}, nil)`
$DIR/core/services/fluxmonitorv2/flux_monitor_test.go: `.Once()`
$DIR/core/services/fluxmonitorv2/flux_monitor_test.go: `.logBroadcaster.On("IsConnected")`
$DIR/core/services/fluxmonitorv2/flux_monitor_test.go: `.Return(true)`
$DIR/core/services/fluxmonitorv2/flux_monitor_test.go: `.Once()`
$DIR/core/services/fluxmonitorv2/flux_monitor_test.go: `.jobORM.
On("TryRecordError",
mock.Anything,
pipelineSpec.JobID,
"Unable to call roundState method on provided contract. Check contract address.",
)`
$DIR/core/services/fluxmonitorv2/flux_monitor_test.go: `.Once()`
$DIR/core/services/fluxmonitorv2/flux_monitor_test.go: `.fluxAggregator.
On("OracleRoundState", nilOpts, nodeAddr, mock.Anything)`
$DIR/core/services/fluxmonitorv2/flux_monitor_test.go: `.
Return(roundState, errors.New("err"))`
$DIR/core/services/fluxmonitorv2/flux_monitor_test.go: `.New("err")`
$DIR/core/services/fluxmonitorv2/flux_monitor_test.go: `.
Once()`
$DIR/core/services/fluxmonitorv2/flux_monitor_test.go: `.fluxAggregator.On("GetOracles", nilOpts)`
$DIR/core/services/fluxmonitorv2/flux_monitor_test.go: `.Return(oracles, nil)`
$DIR/core/services/fluxmonitorv2/flux_monitor_test.go: `.NewAddress()`
$DIR/core/services/fluxmonitorv2/flux_monitor_test.go: `.NewInt(100)`
$DIR/core/services/fluxmonitorv2/flux_monitor_test.go: `.ToInt()`
$DIR/core/services/fluxmonitorv2/flux_monitor_test.go: `.ToInt()`
$DIR/core/services/fluxmonitorv2/flux_monitor_test.go: `.NewAwaiter()`
$DIR/core/services/fluxmonitorv2/flux_monitor_test.go: `.NewAwaiter()`
$DIR/core/services/fluxmonitorv2/flux_monitor_test.go: `.NewAwaiter()`
$DIR/core/services/fluxmonitorv2/flux_monitor_test.go: `.keyStore.On("EnabledKeysForChain", mock.Anything, testutils.FixtureChainID)`
$DIR/core/services/fluxmonitorv2/flux_monitor_test.go: `.Return([]ethkey.KeyV2{{Address: nodeAddr}}, nil)`
$DIR/core/services/fluxmonitorv2/flux_monitor_test.go: `.Once()`
$DIR/core/services/fluxmonitorv2/flux_monitor_test.go: `.orm.On("WithDataSource", mock.Anything)`
$DIR/core/services/fluxmonitorv2/flux_monitor_test.go: `.Return(fluxmonitorv2.ORM(tm.orm))`
$DIR/core/services/fluxmonitorv2/flux_monitor_test.go: `.ORM(tm.orm)`
$DIR/core/services/fluxmonitorv2/flux_monitor_test.go: `.fluxAggregator.On("Address")`
$DIR/core/services/fluxmonitorv2/flux_monitor_test.go: `.Return(common.Address{})`
$DIR/core/services/fluxmonitorv2/flux_monitor_test.go: `.fluxAggregator.On("LatestRoundData", nilOpts)`
$DIR/core/services/fluxmonitorv2/flux_monitor_test.go: `.Return(freshContractRoundDataResponse())`
$DIR/core/services/fluxmonitorv2/flux_monitor_test.go: `.Maybe()`
$DIR/core/services/fluxmonitorv2/flux_monitor_test.go: `.fluxAggregator.On("OracleRoundState", nilOpts, nodeAddr, uint32(1))`
$DIR/core/services/fluxmonitorv2/flux_monitor_test.go: `.
Return(makeRoundStateForRoundID(1), nil)`
$DIR/core/services/fluxmonitorv2/flux_monitor_test.go: `.
Run(func(mock.Arguments) {
readyToFillQueue.ItHappened()
logsAwaiter.AwaitOrFail(t)
})`
$DIR/core/services/fluxmonitorv2/flux_monitor_test.go: `.ItHappened()`
$DIR/core/services/fluxmonitorv2/flux_monitor_test.go: `.AwaitOrFail(t)`
$DIR/core/services/fluxmonitorv2/flux_monitor_test.go: `.
Once()`
$DIR/core/services/fluxmonitorv2/flux_monitor_test.go: `.fluxAggregator.On("OracleRoundState", nilOpts, nodeAddr, uint32(3))`
$DIR/core/services/fluxmonitorv2/flux_monitor_test.go: `.Return(makeRoundStateForRoundID(3), nil)`
$DIR/core/services/fluxmonitorv2/flux_monitor_test.go: `.Once()`
$DIR/core/services/fluxmonitorv2/flux_monitor_test.go: `.fluxAggregator.On("OracleRoundState", nilOpts, nodeAddr, uint32(4))`
$DIR/core/services/fluxmonitorv2/flux_monitor_test.go: `.Return(makeRoundStateForRoundID(4), nil)`
$DIR/core/services/fluxmonitorv2/flux_monitor_test.go: `.Once()`
$DIR/core/services/fluxmonitorv2/flux_monitor_test.go: `.fluxAggregator.On("GetOracles", nilOpts)`
$DIR/core/services/fluxmonitorv2/flux_monitor_test.go: `.Return(oracles, nil)`
$DIR/core/services/fluxmonitorv2/flux_monitor_test.go: `.logBroadcaster.On("Register", fm, mock.Anything)`
$DIR/core/services/fluxmonitorv2/flux_monitor_test.go: `.Return(func() {})`
$DIR/core/services/fluxmonitorv2/flux_monitor_test.go: `.logBroadcaster.On("IsConnected")`
$DIR/core/services/fluxmonitorv2/flux_monitor_test.go: `.Return(true)`
$DIR/core/services/fluxmonitorv2/flux_monitor_test.go: `.Maybe()`
$DIR/core/services/fluxmonitorv2/flux_monitor_test.go: `.orm.On("MostRecentFluxMonitorRoundID", mock.Anything, contractAddress)`
$DIR/core/services/fluxmonitorv2/flux_monitor_test.go: `.Return(uint32(1), nil)`
$DIR/core/services/fluxmonitorv2/flux_monitor_test.go: `.orm.On("MostRecentFluxMonitorRoundID", mock.Anything, contractAddress)`
$DIR/core/services/fluxmonitorv2/flux_monitor_test.go: `.Return(uint32(3), nil)`
$DIR/core/services/fluxmonitorv2/flux_monitor_test.go: `.orm.On("MostRecentFluxMonitorRoundID", mock.Anything, contractAddress)`
$DIR/core/services/fluxmonitorv2/flux_monitor_test.go: `.Return(uint32(4), nil)`
$DIR/core/services/fluxmonitorv2/flux_monitor_test.go: `.orm.
On("FindOrCreateFluxMonitorRoundStats", mock.Anything, contractAddress, uint32(1), mock.Anything)`
$DIR/core/services/fluxmonitorv2/flux_monitor_test.go: `.
Return(fluxmonitorv2.FluxMonitorRoundStatsV2{
Aggregator: contractAddress,
RoundID: 1,
}, nil)`
$DIR/core/services/fluxmonitorv2/flux_monitor_test.go: `.pipelineRunner.
On("ExecuteRun", mock.Anything, pipelineSpec, mock.Anything, mock.Anything)`
$DIR/core/services/fluxmonitorv2/flux_monitor_test.go: `.
Return(run, pipeline.TaskRunResults{
{
Result: pipeline.Result{
Value: decimal.NewFromInt(fetchedValue),
Error: nil,
},
Task: &pipeline.HTTPTask{},
},
}, nil)`
$DIR/core/services/fluxmonitorv2/flux_monitor_test.go: `.NewFromInt(fetchedValue)`
$DIR/core/services/fluxmonitorv2/flux_monitor_test.go: `.Once()`
$DIR/core/services/fluxmonitorv2/flux_monitor_test.go: `.pipelineRunner.
On("InsertFinishedRun", mock.Anything, mock.Anything, mock.Anything, mock.Anything)`
$DIR/core/services/fluxmonitorv2/flux_monitor_test.go: `.
Return(nil)`
$DIR/core/services/fluxmonitorv2/flux_monitor_test.go: `.
Run(func(args mock.Arguments) {
args.Get(2).(*pipeline.Run).ID = 1
})`
$DIR/core/services/fluxmonitorv2/flux_monitor_test.go: `.Get(2)`
$DIR/core/services/fluxmonitorv2/flux_monitor_test.go: `.Once()`
$DIR/core/services/fluxmonitorv2/flux_monitor_test.go: `.contractSubmitter.
On("Submit", mock.Anything, big.NewInt(1), big.NewInt(fetchedValue), buildIdempotencyKey(run.ID))`
$DIR/core/services/fluxmonitorv2/flux_monitor_test.go: `.NewInt(1)`
$DIR/core/services/fluxmonitorv2/flux_monitor_test.go: `.NewInt(fetchedValue)`
$DIR/core/services/fluxmonitorv2/flux_monitor_test.go: `.
Return(nil)`
$DIR/core/services/fluxmonitorv2/flux_monitor_test.go: `.
Once()`
$DIR/core/services/fluxmonitorv2/flux_monitor_test.go: `.orm.
On("UpdateFluxMonitorRoundStats",
mock.Anything,
contractAddress,
uint32(1),
mock.AnythingOfType("int64"), //int64(1),
mock.Anything,
)`
$DIR/core/services/fluxmonitorv2/flux_monitor_test.go: `.AnythingOfType("int64")`
$DIR/core/services/fluxmonitorv2/flux_monitor_test.go: `.
Return(nil)`
$DIR/core/services/fluxmonitorv2/flux_monitor_test.go: `.Once()`
$DIR/core/services/fluxmonitorv2/flux_monitor_test.go: `.orm.
On("FindOrCreateFluxMonitorRoundStats", mock.Anything, contractAddress, uint32(3), mock.Anything)`
$DIR/core/services/fluxmonitorv2/flux_monitor_test.go: `.
Return(fluxmonitorv2.FluxMonitorRoundStatsV2{
Aggregator: contractAddress,
RoundID: 3,
}, nil)`
$DIR/core/services/fluxmonitorv2/flux_monitor_test.go: `.pipelineRunner.
On("ExecuteRun", mock.Anything, pipelineSpec, mock.Anything, mock.Anything)`
$DIR/core/services/fluxmonitorv2/flux_monitor_test.go: `.
Return(run, pipeline.TaskRunResults{
{
Result: pipeline.Result{
Value: decimal.NewFromInt(fetchedValue),
Error: nil,
},
Task: &pipeline.HTTPTask{},
},
}, nil)`
$DIR/core/services/fluxmonitorv2/flux_monitor_test.go: `.NewFromInt(fetchedValue)`
$DIR/core/services/fluxmonitorv2/flux_monitor_test.go: `.Once()`
$DIR/core/services/fluxmonitorv2/flux_monitor_test.go: `.pipelineRunner.
On("InsertFinishedRun", mock.Anything, mock.Anything, mock.Anything, mock.Anything)`
$DIR/core/services/fluxmonitorv2/flux_monitor_test.go: `.
Return(nil)`
$DIR/core/services/fluxmonitorv2/flux_monitor_test.go: `.
Run(func(args mock.Arguments) {
args.Get(2).(*pipeline.Run).ID = 2
})`
$DIR/core/services/fluxmonitorv2/flux_monitor_test.go: `.Get(2)`
$DIR/core/services/fluxmonitorv2/flux_monitor_test.go: `.Once()`
$DIR/core/services/fluxmonitorv2/flux_monitor_test.go: `.contractSubmitter.
On("Submit", mock.Anything, big.NewInt(3), big.NewInt(fetchedValue), buildIdempotencyKey(run.ID))`
$DIR/core/services/fluxmonitorv2/flux_monitor_test.go: `.NewInt(3)`
$DIR/core/services/fluxmonitorv2/flux_monitor_test.go: `.NewInt(fetchedValue)`
$DIR/core/services/fluxmonitorv2/flux_monitor_test.go: `.
Return(nil)`
$DIR/core/services/fluxmonitorv2/flux_monitor_test.go: `.
Once()`
$DIR/core/services/fluxmonitorv2/flux_monitor_test.go: `.orm.
On("UpdateFluxMonitorRoundStats",
mock.Anything,
contractAddress,
uint32(3),
mock.AnythingOfType("int64"), //int64(2),
mock.Anything,
)`
$DIR/core/services/fluxmonitorv2/flux_monitor_test.go: `.AnythingOfType("int64")`
$DIR/core/services/fluxmonitorv2/flux_monitor_test.go: `.
Return(nil)`
$DIR/core/services/fluxmonitorv2/flux_monitor_test.go: `.Once()`
$DIR/core/services/fluxmonitorv2/flux_monitor_test.go: `.orm.
On("FindOrCreateFluxMonitorRoundStats", mock.Anything, contractAddress, uint32(4), mock.Anything)`
$DIR/core/services/fluxmonitorv2/flux_monitor_test.go: `.
Return(fluxmonitorv2.FluxMonitorRoundStatsV2{
Aggregator: contractAddress,
RoundID: 3,
}, nil)`
$DIR/core/services/fluxmonitorv2/flux_monitor_test.go: `.pipelineRunner.
On("ExecuteRun", mock.Anything, pipelineSpec, mock.Anything, mock.Anything)`
$DIR/core/services/fluxmonitorv2/flux_monitor_test.go: `.
Return(run, pipeline.TaskRunResults{
{
Result: pipeline.Result{
Value: decimal.NewFromInt(fetchedValue),
Error: nil,
},
Task: &pipeline.HTTPTask{},
},
}, nil)`
$DIR/core/services/fluxmonitorv2/flux_monitor_test.go: `.NewFromInt(fetchedValue)`
$DIR/core/services/fluxmonitorv2/flux_monitor_test.go: `.Once()`
$DIR/core/services/fluxmonitorv2/flux_monitor_test.go: `.pipelineRunner.
On("InsertFinishedRun", mock.Anything, mock.Anything, mock.Anything, mock.Anything)`
$DIR/core/services/fluxmonitorv2/flux_monitor_test.go: `.
Return(nil)`
$DIR/core/services/fluxmonitorv2/flux_monitor_test.go: `.
Run(func(args mock.Arguments) {
args.Get(2).(*pipeline.Run).ID = 3
})`
$DIR/core/services/fluxmonitorv2/flux_monitor_test.go: `.Get(2)`
$DIR/core/services/fluxmonitorv2/flux_monitor_test.go: `.Once()`
$DIR/core/services/fluxmonitorv2/flux_monitor_test.go: `.contractSubmitter.
On("Submit", mock.Anything, big.NewInt(4), big.NewInt(fetchedValue), buildIdempotencyKey(run.ID))`
$DIR/core/services/fluxmonitorv2/flux_monitor_test.go: `.NewInt(4)`
$DIR/core/services/fluxmonitorv2/flux_monitor_test.go: `.NewInt(fetchedValue)`
$DIR/core/services/fluxmonitorv2/flux_monitor_test.go: `.
Return(nil)`
$DIR/core/services/fluxmonitorv2/flux_monitor_test.go: `.
Once()`
$DIR/core/services/fluxmonitorv2/flux_monitor_test.go: `.orm.
On("UpdateFluxMonitorRoundStats",
mock.Anything,
contractAddress,
uint32(4),
mock.AnythingOfType("int64"), //int64(3),
mock.Anything,
)`
$DIR/core/services/fluxmonitorv2/flux_monitor_test.go: `.AnythingOfType("int64")`
$DIR/core/services/fluxmonitorv2/flux_monitor_test.go: `.
Return(nil)`
$DIR/core/services/fluxmonitorv2/flux_monitor_test.go: `.
Once()`
$DIR/core/services/fluxmonitorv2/flux_monitor_test.go: `.
Run(func(mock.Arguments) { readyToAssert.ItHappened() })`
$DIR/core/services/fluxmonitorv2/flux_monitor_test.go: `.ItHappened()`
$DIR/core/services/fluxmonitorv2/flux_monitor_test.go: `.Run(t, fm)`
$DIR/core/services/fluxmonitorv2/flux_monitor_test.go: `.NewBroadcast(t)`
$DIR/core/services/fluxmonitorv2/flux_monitor_test.go: `.On("DecodedLog")`
$DIR/core/services/fluxmonitorv2/flux_monitor_test.go: `.Return(&flux_aggregator_wrapper.FluxAggregatorNewRound{RoundId: big.NewInt(int64(i)), StartedAt: big.NewInt(0)})`
$DIR/core/services/fluxmonitorv2/flux_monitor_test.go: `.NewInt(int64(i))`
$DIR/core/services/fluxmonitorv2/flux_monitor_test.go: `.NewInt(0)`
$DIR/core/services/fluxmonitorv2/flux_monitor_test.go: `.On("String")`
$DIR/core/services/fluxmonitorv2/flux_monitor_test.go: `.Maybe()`
$DIR/core/services/fluxmonitorv2/flux_monitor_test.go: `.Return("")`
$DIR/core/services/fluxmonitorv2/flux_monitor_test.go: `.logBroadcaster.On("WasAlreadyConsumed", mock.Anything, mock.Anything)`
$DIR/core/services/fluxmonitorv2/flux_monitor_test.go: `.Return(false, nil)`
$DIR/core/services/fluxmonitorv2/flux_monitor_test.go: `.logBroadcaster.On("MarkConsumed", mock.Anything, mock.Anything, mock.Anything)`
$DIR/core/services/fluxmonitorv2/flux_monitor_test.go: `.Return(nil)`
$DIR/core/services/fluxmonitorv2/flux_monitor_test.go: `.Context(t)`
$DIR/core/services/fluxmonitorv2/flux_monitor_test.go: `.HandleLog(ctx, logBroadcasts[0])`
$DIR/core/services/fluxmonitorv2/flux_monitor_test.go: `.AwaitOrFail(t)`
$DIR/core/services/fluxmonitorv2/flux_monitor_test.go: `.HandleLog(ctx, logBroadcasts[1])`
$DIR/core/services/fluxmonitorv2/flux_monitor_test.go: `.HandleLog(ctx, logBroadcasts[2])`
$DIR/core/services/fluxmonitorv2/flux_monitor_test.go: `.HandleLog(ctx, logBroadcasts[3])`
$DIR/core/services/fluxmonitorv2/flux_monitor_test.go: `.ItHappened()`
$DIR/core/services/fluxmonitorv2/flux_monitor_test.go: `.NewWithT(t)`
$DIR/core/services/fluxmonitorv2/flux_monitor_test.go: `.NewAddress()`
$DIR/core/services/fluxmonitorv2/flux_monitor_test.go: `.Run(tc.name, func(t *testing.T) {
t.Parallel()
var (
orm = newORM(t, db, nil)
)
fm, tm := setup(t, db, disablePollTicker(true), disableIdleTimer(tc.idleTimerDisabled), setIdleTimerPeriod(tc.idleDuration), withORM(orm))
tm.keyStore.On("EnabledKeysForChain", mock.Anything, testutils.FixtureChainID).Return([]ethkey.KeyV2{{Address: nodeAddr}}, nil).Once()
const fetchedAnswer = 100
answerBigInt := big.NewInt(fetchedAnswer)
tm.fluxAggregator.On("Address").Return(common.Address{})
tm.fluxAggregator.On("GetOracles", nilOpts).Return(oracles, nil)
tm.logBroadcaster.On("Register", mock.Anything, mock.Anything).Return(func() {})
tm.logBroadcaster.On("IsConnected").Return(true).Maybe()
idleDurationOccured := make(chan struct{}, 3)
tm.fluxAggregator.On("LatestRoundData", nilOpts).Return(freshContractRoundDataResponse()).Once()
if tc.expectedToSubmit {
// performInitialPoll()
roundState1 := flux_aggregator_wrapper.OracleRoundState{RoundId: 1, EligibleToSubmit: false, LatestSubmission: answerBigInt, StartedAt: now()}
tm.fluxAggregator.On("OracleRoundState", nilOpts, nodeAddr, uint32(0)).Return(roundState1, nil).Once()
// idleDuration 1
roundState2 := flux_aggregator_wrapper.OracleRoundState{RoundId: 1, EligibleToSubmit: false, LatestSubmission: answerBigInt, StartedAt: now()}
tm.fluxAggregator.On("OracleRoundState", nilOpts, nodeAddr, uint32(0)).Return(roundState2, nil).Once().Run(func(args mock.Arguments) {
idleDurationOccured <- struct{}{}
})
}
require.NoError(t, fm.Start(testutils.Context(t)))
require.Len(t, idleDurationOccured, 0, "no Job Runs created")
if tc.expectedToSubmit {
g.Eventually(func() int { return len(idleDurationOccured) }, testutils.WaitTimeout(t)).Should(gomega.Equal(1))
chBlock := make(chan struct{})
// NewRound resets the idle timer
roundState2 := flux_aggregator_wrapper.OracleRoundState{RoundId: 2, EligibleToSubmit: false, LatestSubmission: answerBigInt, StartedAt: now()}
tm.fluxAggregator.On("OracleRoundState", nilOpts, nodeAddr, uint32(2)).Return(roundState2, nil).Once().Run(func(args mock.Arguments) {
close(chBlock)
})
decodedLog := flux_aggregator_wrapper.FluxAggregatorNewRound{RoundId: big.NewInt(2), StartedAt: big.NewInt(0)}
tm.logBroadcast.On("DecodedLog").Return(&decodedLog)
tm.logBroadcast.On("String").Maybe().Return("")
tm.logBroadcaster.On("WasAlreadyConsumed", mock.Anything, mock.Anything).Return(false, nil)
tm.logBroadcaster.On("MarkConsumed", mock.Anything, mock.Anything, mock.Anything).Return(nil)
fm.HandleLog(testutils.Context(t), tm.logBroadcast)
g.Eventually(chBlock).Should(gomega.BeClosed())
// idleDuration 2
roundState3 := flux_aggregator_wrapper.OracleRoundState{RoundId: 3, EligibleToSubmit: false, LatestSubmission: answerBigInt, StartedAt: now()}
tm.fluxAggregator.On("OracleRoundState", nilOpts, nodeAddr, uint32(0)).Return(roundState3, nil).Once().Run(func(args mock.Arguments) {
idleDurationOccured <- struct{}{}
})
g.Eventually(func() int { return len(idleDurationOccured) }, testutils.WaitTimeout(t)).Should(gomega.Equal(2))
}
fm.Close()
if !tc.expectedToSubmit {
require.Len(t, idleDurationOccured, 0)
}
})`
$DIR/core/services/fluxmonitorv2/flux_monitor_test.go: `.keyStore.On("EnabledKeysForChain", mock.Anything, testutils.FixtureChainID)`
$DIR/core/services/fluxmonitorv2/flux_monitor_test.go: `.Return([]ethkey.KeyV2{{Address: nodeAddr}}, nil)`
$DIR/core/services/fluxmonitorv2/flux_monitor_test.go: `.Once()`
$DIR/core/services/fluxmonitorv2/flux_monitor_test.go: `.NewInt(fetchedAnswer)`
$DIR/core/services/fluxmonitorv2/flux_monitor_test.go: `.fluxAggregator.On("Address")`
$DIR/core/services/fluxmonitorv2/flux_monitor_test.go: `.Return(common.Address{})`
$DIR/core/services/fluxmonitorv2/flux_monitor_test.go: `.fluxAggregator.On("GetOracles", nilOpts)`
$DIR/core/services/fluxmonitorv2/flux_monitor_test.go: `.Return(oracles, nil)`
$DIR/core/services/fluxmonitorv2/flux_monitor_test.go: `.logBroadcaster.On("Register", mock.Anything, mock.Anything)`
$DIR/core/services/fluxmonitorv2/flux_monitor_test.go: `.Return(func() {})`
$DIR/core/services/fluxmonitorv2/flux_monitor_test.go: `.logBroadcaster.On("IsConnected")`
$DIR/core/services/fluxmonitorv2/flux_monitor_test.go: `.Return(true)`
$DIR/core/services/fluxmonitorv2/flux_monitor_test.go: `.Maybe()`
$DIR/core/services/fluxmonitorv2/flux_monitor_test.go: `.fluxAggregator.On("LatestRoundData", nilOpts)`
$DIR/core/services/fluxmonitorv2/flux_monitor_test.go: `.Return(freshContractRoundDataResponse())`
$DIR/core/services/fluxmonitorv2/flux_monitor_test.go: `.Once()`
$DIR/core/services/fluxmonitorv2/flux_monitor_test.go: `.fluxAggregator.On("OracleRoundState", nilOpts, nodeAddr, uint32(0))`
$DIR/core/services/fluxmonitorv2/flux_monitor_test.go: `.Return(roundState1, nil)`
$DIR/core/services/fluxmonitorv2/flux_monitor_test.go: `.Once()`
$DIR/core/services/fluxmonitorv2/flux_monitor_test.go: `.fluxAggregator.On("OracleRoundState", nilOpts, nodeAddr, uint32(0))`
$DIR/core/services/fluxmonitorv2/flux_monitor_test.go: `.Return(roundState2, nil)`
$DIR/core/services/fluxmonitorv2/flux_monitor_test.go: `.Once()`
$DIR/core/services/fluxmonitorv2/flux_monitor_test.go: `.Run(func(args mock.Arguments) {
idleDurationOccured <- struct{}{}
})`
$DIR/core/services/fluxmonitorv2/flux_monitor_test.go: `.Eventually(func() int { return len(idleDurationOccured) }, testutils.WaitTimeout(t))`
$DIR/core/services/fluxmonitorv2/flux_monitor_test.go: `.WaitTimeout(t)`
$DIR/core/services/fluxmonitorv2/flux_monitor_test.go: `.Should(gomega.Equal(1))`
$DIR/core/services/fluxmonitorv2/flux_monitor_test.go: `.Equal(1)`
$DIR/core/services/fluxmonitorv2/flux_monitor_test.go: `.fluxAggregator.On("OracleRoundState", nilOpts, nodeAddr, uint32(2))`
$DIR/core/services/fluxmonitorv2/flux_monitor_test.go: `.Return(roundState2, nil)`
$DIR/core/services/fluxmonitorv2/flux_monitor_test.go: `.Once()`
$DIR/core/services/fluxmonitorv2/flux_monitor_test.go: `.Run(func(args mock.Arguments) {
close(chBlock)
})`
$DIR/core/services/fluxmonitorv2/flux_monitor_test.go: `.NewInt(2)`
$DIR/core/services/fluxmonitorv2/flux_monitor_test.go: `.NewInt(0)`
$DIR/core/services/fluxmonitorv2/flux_monitor_test.go: `.logBroadcast.On("DecodedLog")`
$DIR/core/services/fluxmonitorv2/flux_monitor_test.go: `.Return(&decodedLog)`
$DIR/core/services/fluxmonitorv2/flux_monitor_test.go: `.logBroadcast.On("String")`
$DIR/core/services/fluxmonitorv2/flux_monitor_test.go: `.Maybe()`
$DIR/core/services/fluxmonitorv2/flux_monitor_test.go: `.Return("")`
$DIR/core/services/fluxmonitorv2/flux_monitor_test.go: `.logBroadcaster.On("WasAlreadyConsumed", mock.Anything, mock.Anything)`
$DIR/core/services/fluxmonitorv2/flux_monitor_test.go: `.Return(false, nil)`
$DIR/core/services/fluxmonitorv2/flux_monitor_test.go: `.logBroadcaster.On("MarkConsumed", mock.Anything, mock.Anything, mock.Anything)`
$DIR/core/services/fluxmonitorv2/flux_monitor_test.go: `.Return(nil)`
$DIR/core/services/fluxmonitorv2/flux_monitor_test.go: `.HandleLog(testutils.Context(t), tm.logBroadcast)`
$DIR/core/services/fluxmonitorv2/flux_monitor_test.go: `.Context(t)`
$DIR/core/services/fluxmonitorv2/flux_monitor_test.go: `.Eventually(chBlock)`
$DIR/core/services/fluxmonitorv2/flux_monitor_test.go: `.Should(gomega.BeClosed())`
$DIR/core/services/fluxmonitorv2/flux_monitor_test.go: `.BeClosed()`
$DIR/core/services/fluxmonitorv2/flux_monitor_test.go: `.fluxAggregator.On("OracleRoundState", nilOpts, nodeAddr, uint32(0))`
$DIR/core/services/fluxmonitorv2/flux_monitor_test.go: `.Return(roundState3, nil)`
$DIR/core/services/fluxmonitorv2/flux_monitor_test.go: `.Once()`
$DIR/core/services/fluxmonitorv2/flux_monitor_test.go: `.Run(func(args mock.Arguments) {
idleDurationOccured <- struct{}{}
})`
$DIR/core/services/fluxmonitorv2/flux_monitor_test.go: `.Eventually(func() int { return len(idleDurationOccured) }, testutils.WaitTimeout(t))`
$DIR/core/services/fluxmonitorv2/flux_monitor_test.go: `.WaitTimeout(t)`
$DIR/core/services/fluxmonitorv2/flux_monitor_test.go: `.Should(gomega.Equal(2))`
$DIR/core/services/fluxmonitorv2/flux_monitor_test.go: `.Equal(2)`
$DIR/core/services/fluxmonitorv2/flux_monitor_test.go: `.NewWithT(t)`
$DIR/core/services/fluxmonitorv2/flux_monitor_test.go: `.NewAddress()`
$DIR/core/services/fluxmonitorv2/flux_monitor_test.go: `.keyStore.On("EnabledKeysForChain", mock.Anything, testutils.FixtureChainID)`
$DIR/core/services/fluxmonitorv2/flux_monitor_test.go: `.Return([]ethkey.KeyV2{{Address: nodeAddr}}, nil)`
$DIR/core/services/fluxmonitorv2/flux_monitor_test.go: `.Once()`
$DIR/core/services/fluxmonitorv2/flux_monitor_test.go: `.NewInt(fetchedAnswer)`
$DIR/core/services/fluxmonitorv2/flux_monitor_test.go: `.fluxAggregator.On("Address")`
$DIR/core/services/fluxmonitorv2/flux_monitor_test.go: `.Return(contractAddress)`
$DIR/core/services/fluxmonitorv2/flux_monitor_test.go: `.fluxAggregator.On("GetOracles", nilOpts)`
$DIR/core/services/fluxmonitorv2/flux_monitor_test.go: `.Return(oracles, nil)`
$DIR/core/services/fluxmonitorv2/flux_monitor_test.go: `.logBroadcaster.On("Register", mock.Anything, mock.Anything)`
$DIR/core/services/fluxmonitorv2/flux_monitor_test.go: `.Return(func() {})`
$DIR/core/services/fluxmonitorv2/flux_monitor_test.go: `.logBroadcaster.On("IsConnected")`
$DIR/core/services/fluxmonitorv2/flux_monitor_test.go: `.Return(true)`
$DIR/core/services/fluxmonitorv2/flux_monitor_test.go: `.fluxAggregator.On("LatestRoundData", nilOpts)`
$DIR/core/services/fluxmonitorv2/flux_monitor_test.go: `.Return(freshContractRoundDataResponse())`
$DIR/core/services/fluxmonitorv2/flux_monitor_test.go: `.Once()`
$DIR/core/services/fluxmonitorv2/flux_monitor_test.go: `.Start(testutils.Context(t))`
$DIR/core/services/fluxmonitorv2/flux_monitor_test.go: `.Context(t)`
$DIR/core/services/fluxmonitorv2/flux_monitor_test.go: `.Cleanup(func() { fm.Close() })`
$DIR/core/services/fluxmonitorv2/flux_monitor_test.go: `.fluxAggregator.On("OracleRoundState", nilOpts, nodeAddr, uint32(0))`
$DIR/core/services/fluxmonitorv2/flux_monitor_test.go: `.Return(roundState1, nil)`
$DIR/core/services/fluxmonitorv2/flux_monitor_test.go: `.Once()`
$DIR/core/services/fluxmonitorv2/flux_monitor_test.go: `.Run(func(args mock.Arguments) {
pollOccured <- struct{}{}
})`
$DIR/core/services/fluxmonitorv2/flux_monitor_test.go: `.orm.
On("FindOrCreateFluxMonitorRoundStats", mock.Anything, contractAddress, uint32(1), mock.Anything)`
$DIR/core/services/fluxmonitorv2/flux_monitor_test.go: `.
Return(fluxmonitorv2.FluxMonitorRoundStatsV2{
Aggregator: contractAddress,
RoundID: 1,
NumSubmissions: 0,
}, nil)`
$DIR/core/services/fluxmonitorv2/flux_monitor_test.go: `.Once()`
$DIR/core/services/fluxmonitorv2/flux_monitor_test.go: `.Eventually(func() int { return len(pollOccured) }, testutils.WaitTimeout(t))`
$DIR/core/services/fluxmonitorv2/flux_monitor_test.go: `.WaitTimeout(t)`
$DIR/core/services/fluxmonitorv2/flux_monitor_test.go: `.Should(gomega.Equal(1))`
$DIR/core/services/fluxmonitorv2/flux_monitor_test.go: `.Equal(1)`
$DIR/core/services/fluxmonitorv2/flux_monitor_test.go: `.fluxAggregator.On("OracleRoundState", nilOpts, nodeAddr, uint32(0))`
$DIR/core/services/fluxmonitorv2/flux_monitor_test.go: `.Return(roundState1Responded, nil)`
$DIR/core/services/fluxmonitorv2/flux_monitor_test.go: `.Once()`
$DIR/core/services/fluxmonitorv2/flux_monitor_test.go: `.Run(func(args mock.Arguments) {
pollOccured <- struct{}{}
})`
$DIR/core/services/fluxmonitorv2/flux_monitor_test.go: `.orm.
On("FindOrCreateFluxMonitorRoundStats", mock.Anything, contractAddress, uint32(1), mock.Anything)`
$DIR/core/services/fluxmonitorv2/flux_monitor_test.go: `.
Return(fluxmonitorv2.FluxMonitorRoundStatsV2{
PipelineRunID: corenull.NewInt64(int64(1), true),
Aggregator: contractAddress,
RoundID: 1,
NumSubmissions: 1,
}, nil)`
$DIR/core/services/fluxmonitorv2/flux_monitor_test.go: `.NewInt64(int64(1), true)`
$DIR/core/services/fluxmonitorv2/flux_monitor_test.go: `.Once()`
$DIR/core/services/fluxmonitorv2/flux_monitor_test.go: `.Now()`
$DIR/core/services/fluxmonitorv2/flux_monitor_test.go: `.pipelineORM.On("FindRun", mock.Anything, int64(1))`
$DIR/core/services/fluxmonitorv2/flux_monitor_test.go: `.Return(pipeline.Run{
FinishedAt: null.TimeFrom(finishedAt),
}, nil)`
$DIR/core/services/fluxmonitorv2/flux_monitor_test.go: `.TimeFrom(finishedAt)`
$DIR/core/services/fluxmonitorv2/flux_monitor_test.go: `.Eventually(func() int { return len(pollOccured) }, testutils.WaitTimeout(t))`
$DIR/core/services/fluxmonitorv2/flux_monitor_test.go: `.WaitTimeout(t)`
$DIR/core/services/fluxmonitorv2/flux_monitor_test.go: `.Should(gomega.Equal(2))`
$DIR/core/services/fluxmonitorv2/flux_monitor_test.go: `.Equal(2)`
$DIR/core/services/fluxmonitorv2/flux_monitor_test.go: `.fluxAggregator.On("OracleRoundState", nilOpts, nodeAddr, uint32(0))`
$DIR/core/services/fluxmonitorv2/flux_monitor_test.go: `.Return(roundState2, nil)`
$DIR/core/services/fluxmonitorv2/flux_monitor_test.go: `.Once()`
$DIR/core/services/fluxmonitorv2/flux_monitor_test.go: `.Run(func(args mock.Arguments) {
pollOccured <- struct{}{}
})`
$DIR/core/services/fluxmonitorv2/flux_monitor_test.go: `.orm.
On("FindOrCreateFluxMonitorRoundStats", mock.Anything, contractAddress, uint32(2), mock.Anything)`
$DIR/core/services/fluxmonitorv2/flux_monitor_test.go: `.
Return(fluxmonitorv2.FluxMonitorRoundStatsV2{
Aggregator: contractAddress,
RoundID: 2,
NumSubmissions: 0,
}, nil)`
$DIR/core/services/fluxmonitorv2/flux_monitor_test.go: `.Once()`
$DIR/core/services/fluxmonitorv2/flux_monitor_test.go: `.Eventually(func() int { return len(pollOccured) }, testutils.WaitTimeout(t))`
$DIR/core/services/fluxmonitorv2/flux_monitor_test.go: `.WaitTimeout(t)`
$DIR/core/services/fluxmonitorv2/flux_monitor_test.go: `.Equal(3)`
$DIR/core/services/fluxmonitorv2/flux_monitor_test.go: `.NewAddress()`
$DIR/core/services/fluxmonitorv2/flux_monitor_test.go: `.NewFlags(t)`
$DIR/core/services/fluxmonitorv2/flux_monitor_test.go: `.On("ContractExists")`
$DIR/core/services/fluxmonitorv2/flux_monitor_test.go: `.Return(true)`
$DIR/core/services/fluxmonitorv2/flux_monitor_test.go: `.On("Address")`
$DIR/core/services/fluxmonitorv2/flux_monitor_test.go: `.Return(common.Address{})`
$DIR/core/services/fluxmonitorv2/flux_monitor_test.go: `.On("IsLowered", mock.Anything)`
$DIR/core/services/fluxmonitorv2/flux_monitor_test.go: `.Return(true, nil)`
$DIR/core/services/fluxmonitorv2/flux_monitor_test.go: `.Once()`
$DIR/core/services/fluxmonitorv2/flux_monitor_test.go: `.keyStore.On("EnabledKeysForChain", mock.Anything, testutils.FixtureChainID)`
$DIR/core/services/fluxmonitorv2/flux_monitor_test.go: `.Return([]ethkey.KeyV2{{Address: nodeAddr}}, nil)`
$DIR/core/services/fluxmonitorv2/flux_monitor_test.go: `.Once()`
$DIR/core/services/fluxmonitorv2/flux_monitor_test.go: `.NewInt(fetchedAnswer)`
$DIR/core/services/fluxmonitorv2/flux_monitor_test.go: `.fluxAggregator.On("Address")`
$DIR/core/services/fluxmonitorv2/flux_monitor_test.go: `.Return(contractAddress)`
$DIR/core/services/fluxmonitorv2/flux_monitor_test.go: `.fluxAggregator.On("GetOracles", nilOpts)`
$DIR/core/services/fluxmonitorv2/flux_monitor_test.go: `.Return(oracles, nil)`
$DIR/core/services/fluxmonitorv2/flux_monitor_test.go: `.logBroadcaster.On("Register", mock.Anything, mock.Anything)`
$DIR/core/services/fluxmonitorv2/flux_monitor_test.go: `.Return(func() {})`
$DIR/core/services/fluxmonitorv2/flux_monitor_test.go: `.logBroadcaster.On("IsConnected")`
$DIR/core/services/fluxmonitorv2/flux_monitor_test.go: `.Return(true)`
$DIR/core/services/fluxmonitorv2/flux_monitor_test.go: `.fluxAggregator.On("LatestRoundData", nilOpts)`
$DIR/core/services/fluxmonitorv2/flux_monitor_test.go: `.Return(freshContractRoundDataResponse())`
$DIR/core/services/fluxmonitorv2/flux_monitor_test.go: `.Once()`
$DIR/core/services/fluxmonitorv2/flux_monitor_test.go: `.Start(testutils.Context(t))`
$DIR/core/services/fluxmonitorv2/flux_monitor_test.go: `.Context(t)`
$DIR/core/services/fluxmonitorv2/flux_monitor_test.go: `.Cleanup(func() { fm.Close() })`
$DIR/core/services/fluxmonitorv2/flux_monitor_test.go: `.NewInt(0)`
$DIR/core/services/fluxmonitorv2/flux_monitor_test.go: `.fluxAggregator.On("OracleRoundState", nilOpts, nodeAddr, roundZero)`
$DIR/core/services/fluxmonitorv2/flux_monitor_test.go: `.Return(roundState1, nil)`
$DIR/core/services/fluxmonitorv2/flux_monitor_test.go: `.Once()`
$DIR/core/services/fluxmonitorv2/flux_monitor_test.go: `.Run(func(args mock.Arguments) {
pollOccured <- struct{}{}
})`
$DIR/core/services/fluxmonitorv2/flux_monitor_test.go: `.orm.
On("FindOrCreateFluxMonitorRoundStats", mock.Anything, contractAddress, roundOne, mock.Anything)`
$DIR/core/services/fluxmonitorv2/flux_monitor_test.go: `.
Return(fluxmonitorv2.FluxMonitorRoundStatsV2{
Aggregator: contractAddress,
RoundID: 1,
NumSubmissions: 0,
}, nil)`
$DIR/core/services/fluxmonitorv2/flux_monitor_test.go: `.Once()`
$DIR/core/services/fluxmonitorv2/flux_monitor_test.go: `.After(testutils.WaitTimeout(t))`
$DIR/core/services/fluxmonitorv2/flux_monitor_test.go: `.WaitTimeout(t)`
$DIR/core/services/fluxmonitorv2/flux_monitor_test.go: `.fluxAggregator.On("OracleRoundState", nilOpts, nodeAddr, roundZero)`
$DIR/core/services/fluxmonitorv2/flux_monitor_test.go: `.Return(roundState1Responded, nil)`
$DIR/core/services/fluxmonitorv2/flux_monitor_test.go: `.Once()`
$DIR/core/services/fluxmonitorv2/flux_monitor_test.go: `.Run(func(args mock.Arguments) {
pollOccured <- struct{}{}
})`
$DIR/core/services/fluxmonitorv2/flux_monitor_test.go: `.orm.
On("FindOrCreateFluxMonitorRoundStats", mock.Anything, contractAddress, roundOne, mock.Anything)`
$DIR/core/services/fluxmonitorv2/flux_monitor_test.go: `.
Return(fluxmonitorv2.FluxMonitorRoundStatsV2{
PipelineRunID: corenull.NewInt64(int64(1), true),
Aggregator: contractAddress,
RoundID: 1,
NumSubmissions: 1,
}, nil)`
$DIR/core/services/fluxmonitorv2/flux_monitor_test.go: `.NewInt64(int64(1), true)`
$DIR/core/services/fluxmonitorv2/flux_monitor_test.go: `.Once()`
$DIR/core/services/fluxmonitorv2/flux_monitor_test.go: `.Now()`
$DIR/core/services/fluxmonitorv2/flux_monitor_test.go: `.pipelineORM.On("FindRun", mock.Anything, int64(1))`
$DIR/core/services/fluxmonitorv2/flux_monitor_test.go: `.Return(pipeline.Run{
FinishedAt: null.TimeFrom(finishedAt),
FatalErrors: []null.String{null.StringFrom("an error to start retry ticker")},
}, nil)`
$DIR/core/services/fluxmonitorv2/flux_monitor_test.go: `.TimeFrom(finishedAt)`
$DIR/core/services/fluxmonitorv2/flux_monitor_test.go: `.StringFrom("an error to start retry ticker")`
$DIR/core/services/fluxmonitorv2/flux_monitor_test.go: `.After(testutils.WaitTimeout(t))`
$DIR/core/services/fluxmonitorv2/flux_monitor_test.go: `.WaitTimeout(t)`
$DIR/core/services/fluxmonitorv2/flux_monitor_test.go: `.On("IsLowered", mock.Anything)`
$DIR/core/services/fluxmonitorv2/flux_monitor_test.go: `.Return(false, nil)`
$DIR/core/services/fluxmonitorv2/flux_monitor_test.go: `.ExportedRespondToFlagsRaisedLog()`
$DIR/core/services/fluxmonitorv2/flux_monitor_test.go: `.fluxAggregator.On("OracleRoundState", nilOpts, nodeAddr, roundZero)`
$DIR/core/services/fluxmonitorv2/flux_monitor_test.go: `.Return(roundState2, nil)`
$DIR/core/services/fluxmonitorv2/flux_monitor_test.go: `.Once()`
$DIR/core/services/fluxmonitorv2/flux_monitor_test.go: `.orm.
On("FindOrCreateFluxMonitorRoundStats", mock.Anything, contractAddress, roundTwo, mock.Anything)`
$DIR/core/services/fluxmonitorv2/flux_monitor_test.go: `.
Return(fluxmonitorv2.FluxMonitorRoundStatsV2{
Aggregator: contractAddress,
RoundID: 2,
NumSubmissions: 0,
}, nil)`
$DIR/core/services/fluxmonitorv2/flux_monitor_test.go: `.
Run(func(args mock.Arguments) {
pollOccured <- struct{}{}
})`
$DIR/core/services/fluxmonitorv2/flux_monitor_test.go: `.
Once()`
$DIR/core/services/fluxmonitorv2/flux_monitor_test.go: `.After(2 * time.Second)`
$DIR/core/services/fluxmonitorv2/flux_monitor_test.go: `.After(testutils.WaitTimeout(t))`
$DIR/core/services/fluxmonitorv2/flux_monitor_test.go: `.WaitTimeout(t)`
$DIR/core/services/fluxmonitorv2/flux_monitor_test.go: `.NewWithT(t)`
$DIR/core/services/fluxmonitorv2/flux_monitor_test.go: `.NewAddress()`
$DIR/core/services/fluxmonitorv2/flux_monitor_test.go: `.keyStore.On("EnabledKeysForChain", mock.Anything, testutils.FixtureChainID)`
$DIR/core/services/fluxmonitorv2/flux_monitor_test.go: `.Return([]ethkey.KeyV2{{Address: nodeAddr}}, nil)`
$DIR/core/services/fluxmonitorv2/flux_monitor_test.go: `.Once()`
$DIR/core/services/fluxmonitorv2/flux_monitor_test.go: `.NewInt(fetchedAnswer)`
$DIR/core/services/fluxmonitorv2/flux_monitor_test.go: `.fluxAggregator.On("Address")`
$DIR/core/services/fluxmonitorv2/flux_monitor_test.go: `.Return(contractAddress)`
$DIR/core/services/fluxmonitorv2/flux_monitor_test.go: `.fluxAggregator.On("GetOracles", nilOpts)`
$DIR/core/services/fluxmonitorv2/flux_monitor_test.go: `.Return(oracles, nil)`
$DIR/core/services/fluxmonitorv2/flux_monitor_test.go: `.logBroadcaster.On("Register", mock.Anything, mock.Anything)`
$DIR/core/services/fluxmonitorv2/flux_monitor_test.go: `.Return(func() {})`
$DIR/core/services/fluxmonitorv2/flux_monitor_test.go: `.logBroadcaster.On("IsConnected")`
$DIR/core/services/fluxmonitorv2/flux_monitor_test.go: `.Return(true)`
$DIR/core/services/fluxmonitorv2/flux_monitor_test.go: `.fluxAggregator.On("LatestRoundData", nilOpts)`
$DIR/core/services/fluxmonitorv2/flux_monitor_test.go: `.Return(freshContractRoundDataResponse())`
$DIR/core/services/fluxmonitorv2/flux_monitor_test.go: `.Once()`
$DIR/core/services/fluxmonitorv2/flux_monitor_test.go: `.Run(t, fm)`
$DIR/core/services/fluxmonitorv2/flux_monitor_test.go: `.fluxAggregator.On("OracleRoundState", nilOpts, nodeAddr, uint32(0))`
$DIR/core/services/fluxmonitorv2/flux_monitor_test.go: `.Return(roundState1, nil)`
$DIR/core/services/fluxmonitorv2/flux_monitor_test.go: `.Once()`
$DIR/core/services/fluxmonitorv2/flux_monitor_test.go: `.orm.
On("FindOrCreateFluxMonitorRoundStats", mock.Anything, contractAddress, uint32(1), mock.Anything)`
$DIR/core/services/fluxmonitorv2/flux_monitor_test.go: `.
Return(fluxmonitorv2.FluxMonitorRoundStatsV2{
Aggregator: contractAddress,
RoundID: 1,
NumSubmissions: 0,
}, nil)`
$DIR/core/services/fluxmonitorv2/flux_monitor_test.go: `.Once()`
$DIR/core/services/fluxmonitorv2/flux_monitor_test.go: `.Run(func(args mock.Arguments) {
initialPollOccurred <- struct{}{}
})`
$DIR/core/services/fluxmonitorv2/flux_monitor_test.go: `.Eventually(func() int { return len(initialPollOccurred) }, testutils.WaitTimeout(t))`
$DIR/core/services/fluxmonitorv2/flux_monitor_test.go: `.WaitTimeout(t)`
$DIR/core/services/fluxmonitorv2/flux_monitor_test.go: `.Should(gomega.Equal(1))`
$DIR/core/services/fluxmonitorv2/flux_monitor_test.go: `.Equal(1)`
$DIR/core/services/fluxmonitorv2/flux_monitor_test.go: `.fluxAggregator.On("OracleRoundState", nilOpts, nodeAddr, uint32(0))`
$DIR/core/services/fluxmonitorv2/flux_monitor_test.go: `.Return(roundState1Responded, nil)`
$DIR/core/services/fluxmonitorv2/flux_monitor_test.go: `.Once()`
$DIR/core/services/fluxmonitorv2/flux_monitor_test.go: `.Run(func(args mock.Arguments) {
idleDurationOccured <- struct{}{}
})`
$DIR/core/services/fluxmonitorv2/flux_monitor_test.go: `.orm.
On("FindOrCreateFluxMonitorRoundStats", mock.Anything, contractAddress, uint32(1), mock.Anything)`
$DIR/core/services/fluxmonitorv2/flux_monitor_test.go: `.
Return(fluxmonitorv2.FluxMonitorRoundStatsV2{
PipelineRunID: corenull.NewInt64(int64(1), true),
Aggregator: contractAddress,
RoundID: 1,
NumSubmissions: 1,
}, nil)`
$DIR/core/services/fluxmonitorv2/flux_monitor_test.go: `.NewInt64(int64(1), true)`
$DIR/core/services/fluxmonitorv2/flux_monitor_test.go: `.Once()`
$DIR/core/services/fluxmonitorv2/flux_monitor_test.go: `.Now()`
$DIR/core/services/fluxmonitorv2/flux_monitor_test.go: `.pipelineORM.On("FindRun", mock.Anything, int64(1))`
$DIR/core/services/fluxmonitorv2/flux_monitor_test.go: `.Return(pipeline.Run{
FinishedAt: null.TimeFrom(finishedAt),
}, nil)`
$DIR/core/services/fluxmonitorv2/flux_monitor_test.go: `.TimeFrom(finishedAt)`
$DIR/core/services/fluxmonitorv2/flux_monitor_test.go: `.Eventually(func() int { return len(idleDurationOccured) }, testutils.WaitTimeout(t))`
$DIR/core/services/fluxmonitorv2/flux_monitor_test.go: `.WaitTimeout(t)`
$DIR/core/services/fluxmonitorv2/flux_monitor_test.go: `.Should(gomega.Equal(1))`
$DIR/core/services/fluxmonitorv2/flux_monitor_test.go: `.Equal(1)`
$DIR/core/services/fluxmonitorv2/flux_monitor_test.go: `.fluxAggregator.On("OracleRoundState", nilOpts, nodeAddr, uint32(0))`
$DIR/core/services/fluxmonitorv2/flux_monitor_test.go: `.Return(roundState2, nil)`
$DIR/core/services/fluxmonitorv2/flux_monitor_test.go: `.Once()`
$DIR/core/services/fluxmonitorv2/flux_monitor_test.go: `.Run(func(args mock.Arguments) {
idleDurationOccured <- struct{}{}
})`
$DIR/core/services/fluxmonitorv2/flux_monitor_test.go: `.orm.
On("FindOrCreateFluxMonitorRoundStats", mock.Anything, contractAddress, uint32(2), mock.Anything)`
$DIR/core/services/fluxmonitorv2/flux_monitor_test.go: `.
Return(fluxmonitorv2.FluxMonitorRoundStatsV2{
Aggregator: contractAddress,
RoundID: 2,
NumSubmissions: 0,
}, nil)`
$DIR/core/services/fluxmonitorv2/flux_monitor_test.go: `.Once()`
$DIR/core/services/fluxmonitorv2/flux_monitor_test.go: `.Eventually(func() int { return len(idleDurationOccured) }, testutils.WaitTimeout(t))`
$DIR/core/services/fluxmonitorv2/flux_monitor_test.go: `.WaitTimeout(t)`
$DIR/core/services/fluxmonitorv2/flux_monitor_test.go: `.Should(gomega.Equal(2))`
$DIR/core/services/fluxmonitorv2/flux_monitor_test.go: `.Equal(2)`
$DIR/core/services/fluxmonitorv2/flux_monitor_test.go: `.fluxAggregator.On("OracleRoundState", nilOpts, nodeAddr, uint32(0))`
$DIR/core/services/fluxmonitorv2/flux_monitor_test.go: `.Return(roundState3, nil)`
$DIR/core/services/fluxmonitorv2/flux_monitor_test.go: `.Twice()`
$DIR/core/services/fluxmonitorv2/flux_monitor_test.go: `.Run(func(args mock.Arguments) {
idleDurationOccured <- struct{}{}
})`
$DIR/core/services/fluxmonitorv2/flux_monitor_test.go: `.orm.
On("FindOrCreateFluxMonitorRoundStats", mock.Anything, contractAddress, uint32(3), mock.Anything)`
$DIR/core/services/fluxmonitorv2/flux_monitor_test.go: `.
Return(fluxmonitorv2.FluxMonitorRoundStatsV2{
Aggregator: contractAddress,
RoundID: 3,
NumSubmissions: 0,
}, nil)`
$DIR/core/services/fluxmonitorv2/flux_monitor_test.go: `.Once()`
$DIR/core/services/fluxmonitorv2/flux_monitor_test.go: `.logBroadcaster.On("WasAlreadyConsumed", mock.Anything, mock.Anything)`
$DIR/core/services/fluxmonitorv2/flux_monitor_test.go: `.Return(false, nil)`
$DIR/core/services/fluxmonitorv2/flux_monitor_test.go: `.Once()`
$DIR/core/services/fluxmonitorv2/flux_monitor_test.go: `.logBroadcast.On("DecodedLog")`
$DIR/core/services/fluxmonitorv2/flux_monitor_test.go: `.Return(&flux_aggregator_wrapper.FluxAggregatorAnswerUpdated{})`
$DIR/core/services/fluxmonitorv2/flux_monitor_test.go: `.logBroadcast.On("String")`
$DIR/core/services/fluxmonitorv2/flux_monitor_test.go: `.Maybe()`
$DIR/core/services/fluxmonitorv2/flux_monitor_test.go: `.Return("")`
$DIR/core/services/fluxmonitorv2/flux_monitor_test.go: `.logBroadcaster.On("MarkConsumed", mock.Anything, mock.Anything, mock.Anything)`
$DIR/core/services/fluxmonitorv2/flux_monitor_test.go: `.Return(nil)`
$DIR/core/services/fluxmonitorv2/flux_monitor_test.go: `.Once()`
$DIR/core/services/fluxmonitorv2/flux_monitor_test.go: `.ExportedBacklog()`
$DIR/core/services/fluxmonitorv2/flux_monitor_test.go: `.Add(fluxmonitorv2.PriorityNewRoundLog, tm.logBroadcast)`
$DIR/core/services/fluxmonitorv2/flux_monitor_test.go: `.ExportedProcessLogs()`
$DIR/core/services/fluxmonitorv2/flux_monitor_test.go: `.Eventually(func() int { return len(idleDurationOccured) }, testutils.WaitTimeout(t))`
$DIR/core/services/fluxmonitorv2/flux_monitor_test.go: `.WaitTimeout(t)`
$DIR/core/services/fluxmonitorv2/flux_monitor_test.go: `.Equal(4)`
$DIR/core/services/fluxmonitorv2/flux_monitor_test.go: `.NewWithT(t)`
$DIR/core/services/fluxmonitorv2/flux_monitor_test.go: `.NewAddress()`
$DIR/core/services/fluxmonitorv2/flux_monitor_test.go: `.keyStore.
On("EnabledKeysForChain", mock.Anything, testutils.FixtureChainID)`
$DIR/core/services/fluxmonitorv2/flux_monitor_test.go: `.
Return([]ethkey.KeyV2{{Address: nodeAddr}}, nil)`
$DIR/core/services/fluxmonitorv2/flux_monitor_test.go: `.
Twice()`
$DIR/core/services/fluxmonitorv2/flux_monitor_test.go: `.NewInt(fetchedAnswer)`
$DIR/core/services/fluxmonitorv2/flux_monitor_test.go: `.logBroadcaster.On("Register", mock.Anything, mock.Anything)`
$DIR/core/services/fluxmonitorv2/flux_monitor_test.go: `.Return(func() {})`
$DIR/core/services/fluxmonitorv2/flux_monitor_test.go: `.fluxAggregator.On("LatestRoundData", nilOpts)`
$DIR/core/services/fluxmonitorv2/flux_monitor_test.go: `.Return(makeRoundDataForRoundID(1), nil)`
$DIR/core/services/fluxmonitorv2/flux_monitor_test.go: `.Once()`
$DIR/core/services/fluxmonitorv2/flux_monitor_test.go: `.fluxAggregator.On("OracleRoundState", nilOpts, nodeAddr, uint32(1))`
$DIR/core/services/fluxmonitorv2/flux_monitor_test.go: `.Return(roundState0, nil)`
$DIR/core/services/fluxmonitorv2/flux_monitor_test.go: `.Once()`
$DIR/core/services/fluxmonitorv2/flux_monitor_test.go: `.fluxAggregator.On("OracleRoundState", nilOpts, nodeAddr, uint32(0))`
$DIR/core/services/fluxmonitorv2/flux_monitor_test.go: `.Return(flux_aggregator_wrapper.OracleRoundState{
RoundId: 1,
EligibleToSubmit: false,
LatestSubmission: answerBigInt,
StartedAt: 0,
Timeout: 0,
}, nil)`
$DIR/core/services/fluxmonitorv2/flux_monitor_test.go: `.
Run(func(mock.Arguments) { close(ch) })`
$DIR/core/services/fluxmonitorv2/flux_monitor_test.go: `.
Once()`
$DIR/core/services/fluxmonitorv2/flux_monitor_test.go: `.fluxAggregator.On("Address")`
$DIR/core/services/fluxmonitorv2/flux_monitor_test.go: `.Return(common.Address{})`
$DIR/core/services/fluxmonitorv2/flux_monitor_test.go: `.fluxAggregator.On("GetOracles", nilOpts)`
$DIR/core/services/fluxmonitorv2/flux_monitor_test.go: `.Return(oracles, nil)`
$DIR/core/services/fluxmonitorv2/flux_monitor_test.go: `.ExportedRoundState(t)`
$DIR/core/services/fluxmonitorv2/flux_monitor_test.go: `.Run(t, fm)`
$DIR/core/services/fluxmonitorv2/flux_monitor_test.go: `.Eventually(ch)`
$DIR/core/services/fluxmonitorv2/flux_monitor_test.go: `.BeClosed()`
$DIR/core/services/fluxmonitorv2/flux_monitor_test.go: `.NewWithT(t)`
$DIR/core/services/fluxmonitorv2/flux_monitor_test.go: `.NewAddress()`
$DIR/core/services/fluxmonitorv2/flux_monitor_test.go: `.Run(test.name, func(t *testing.T) {
t.Parallel()
orm := newORM(t, db, nil)
fm, tm := setup(t, db, disablePollTicker(true), disableIdleTimer(true), withORM(orm))
tm.keyStore.On("EnabledKeysForChain", mock.Anything, testutils.FixtureChainID).Return([]ethkey.KeyV2{{Address: nodeAddr}}, nil).Once()
tm.logBroadcaster.On("Register", mock.Anything, mock.Anything).Return(func() {})
tm.logBroadcaster.On("IsConnected").Return(true).Maybe()
tm.fluxAggregator.On("Address").Return(common.Address{})
tm.fluxAggregator.On("GetOracles", nilOpts).Return(oracles, nil)
tm.fluxAggregator.On("LatestRoundData", nilOpts).Return(makeRoundDataForRoundID(1), nil).Once()
tm.fluxAggregator.On("OracleRoundState", nilOpts, nodeAddr, uint32(1)).Return(flux_aggregator_wrapper.OracleRoundState{
RoundId: 1,
EligibleToSubmit: false,
StartedAt: now(),
Timeout: test.timeout,
}, nil).Once()
// 2nd roundstate call means round timer triggered
chRoundState := make(chan struct{})
tm.fluxAggregator.On("OracleRoundState", nilOpts, nodeAddr, uint32(0)).Return(flux_aggregator_wrapper.OracleRoundState{
RoundId: 1,
EligibleToSubmit: false,
}, nil).
Run(func(mock.Arguments) { close(chRoundState) }).
Maybe()
servicetest.Run(t, fm)
if test.expectedToSubmit {
g.Eventually(chRoundState).Should(gomega.BeClosed())
} else {
g.Consistently(chRoundState).ShouldNot(gomega.BeClosed())
}
})`
$DIR/core/services/fluxmonitorv2/flux_monitor_test.go: `.keyStore.On("EnabledKeysForChain", mock.Anything, testutils.FixtureChainID)`
$DIR/core/services/fluxmonitorv2/flux_monitor_test.go: `.Return([]ethkey.KeyV2{{Address: nodeAddr}}, nil)`
$DIR/core/services/fluxmonitorv2/flux_monitor_test.go: `.Once()`
$DIR/core/services/fluxmonitorv2/flux_monitor_test.go: `.logBroadcaster.On("Register", mock.Anything, mock.Anything)`
$DIR/core/services/fluxmonitorv2/flux_monitor_test.go: `.Return(func() {})`
$DIR/core/services/fluxmonitorv2/flux_monitor_test.go: `.logBroadcaster.On("IsConnected")`
$DIR/core/services/fluxmonitorv2/flux_monitor_test.go: `.Return(true)`
$DIR/core/services/fluxmonitorv2/flux_monitor_test.go: `.Maybe()`
$DIR/core/services/fluxmonitorv2/flux_monitor_test.go: `.fluxAggregator.On("Address")`
$DIR/core/services/fluxmonitorv2/flux_monitor_test.go: `.Return(common.Address{})`
$DIR/core/services/fluxmonitorv2/flux_monitor_test.go: `.fluxAggregator.On("GetOracles", nilOpts)`
$DIR/core/services/fluxmonitorv2/flux_monitor_test.go: `.Return(oracles, nil)`
$DIR/core/services/fluxmonitorv2/flux_monitor_test.go: `.fluxAggregator.On("LatestRoundData", nilOpts)`
$DIR/core/services/fluxmonitorv2/flux_monitor_test.go: `.Return(makeRoundDataForRoundID(1), nil)`
$DIR/core/services/fluxmonitorv2/flux_monitor_test.go: `.Once()`
$DIR/core/services/fluxmonitorv2/flux_monitor_test.go: `.fluxAggregator.On("OracleRoundState", nilOpts, nodeAddr, uint32(1))`
$DIR/core/services/fluxmonitorv2/flux_monitor_test.go: `.Return(flux_aggregator_wrapper.OracleRoundState{
RoundId: 1,
EligibleToSubmit: false,
StartedAt: now(),
Timeout: test.timeout,
}, nil)`
$DIR/core/services/fluxmonitorv2/flux_monitor_test.go: `.Once()`
$DIR/core/services/fluxmonitorv2/flux_monitor_test.go: `.fluxAggregator.On("OracleRoundState", nilOpts, nodeAddr, uint32(0))`
$DIR/core/services/fluxmonitorv2/flux_monitor_test.go: `.Return(flux_aggregator_wrapper.OracleRoundState{
RoundId: 1,
EligibleToSubmit: false,
}, nil)`
$DIR/core/services/fluxmonitorv2/flux_monitor_test.go: `.
Run(func(mock.Arguments) { close(chRoundState) })`
$DIR/core/services/fluxmonitorv2/flux_monitor_test.go: `.
Maybe()`
$DIR/core/services/fluxmonitorv2/flux_monitor_test.go: `.Run(t, fm)`
$DIR/core/services/fluxmonitorv2/flux_monitor_test.go: `.Eventually(chRoundState)`
$DIR/core/services/fluxmonitorv2/flux_monitor_test.go: `.Should(gomega.BeClosed())`
$DIR/core/services/fluxmonitorv2/flux_monitor_test.go: `.BeClosed()`
$DIR/core/services/fluxmonitorv2/flux_monitor_test.go: `.Consistently(chRoundState)`
$DIR/core/services/fluxmonitorv2/flux_monitor_test.go: `.ShouldNot(gomega.BeClosed())`
$DIR/core/services/fluxmonitorv2/flux_monitor_test.go: `.BeClosed()`
$DIR/core/services/fluxmonitorv2/flux_monitor_test.go: `.NewWithT(t)`
$DIR/core/services/fluxmonitorv2/flux_monitor_test.go: `.NewAddress()`
$DIR/core/services/fluxmonitorv2/flux_monitor_test.go: `.Now()`
$DIR/core/services/fluxmonitorv2/flux_monitor_test.go: `.
Add(idleTimerPeriod * -1)`
$DIR/core/services/fluxmonitorv2/flux_monitor_test.go: `.
Add(2 * time.Second)`
$DIR/core/services/fluxmonitorv2/flux_monitor_test.go: `.
Unix()`
$DIR/core/services/fluxmonitorv2/flux_monitor_test.go: `.Run(tc.name, func(t *testing.T) {
orm := newORM(t, db, nil)
fm, tm := setup(t,
db,
disablePollTicker(true),
withORM(orm),
)
initialPollOccurred := make(chan struct{}, 1)
tm.keyStore.On("EnabledKeysForChain", mock.Anything, testutils.FixtureChainID).Return([]ethkey.KeyV2{{Address: nodeAddr}}, nil).Once()
tm.logBroadcaster.On("Register", mock.Anything, mock.Anything).Return(func() {})
tm.logBroadcaster.On("IsConnected").Return(true).Maybe()
tm.fluxAggregator.On("Address").Return(common.Address{})
tm.fluxAggregator.On("GetOracles", nilOpts).Return(oracles, nil)
tm.fluxAggregator.On("LatestRoundData", nilOpts).Return(makeRoundDataForRoundID(1), nil).Once()
// first roundstate calling initialRoundState on fm.Start()
tm.fluxAggregator.On("OracleRoundState", nilOpts, nodeAddr, uint32(1)).Return(flux_aggregator_wrapper.OracleRoundState{
RoundId: 1,
EligibleToSubmit: false,
StartedAt: tc.startedAt,
Timeout: 10000, // round won't time out
}, nil)
// 2nd roundstate in initial poll
roundState := flux_aggregator_wrapper.OracleRoundState{RoundId: 1, EligibleToSubmit: false}
tm.fluxAggregator.On("OracleRoundState", nilOpts, nodeAddr, uint32(0)).Return(roundState, nil).
Once().
Run(func(args mock.Arguments) {
initialPollOccurred <- struct{}{}
})
// 3rd roundState call means idleTimer triggered
chRoundState := make(chan struct{})
tm.fluxAggregator.On("OracleRoundState", nilOpts, nodeAddr, uint32(0)).Return(roundState, nil).
Run(func(mock.Arguments) {
close(chRoundState)
}).
Maybe()
servicetest.Run(t, fm)
assert.Eventually(t, func() bool { return len(initialPollOccurred) == 1 }, 3*time.Second, 10*time.Millisecond)
if tc.expectedToSubmit {
g.Eventually(chRoundState).Should(gomega.BeClosed())
} else {
g.Consistently(chRoundState).ShouldNot(gomega.BeClosed())
}
})`
$DIR/core/services/fluxmonitorv2/flux_monitor_test.go: `.keyStore.On("EnabledKeysForChain", mock.Anything, testutils.FixtureChainID)`
$DIR/core/services/fluxmonitorv2/flux_monitor_test.go: `.Return([]ethkey.KeyV2{{Address: nodeAddr}}, nil)`
$DIR/core/services/fluxmonitorv2/flux_monitor_test.go: `.Once()`
$DIR/core/services/fluxmonitorv2/flux_monitor_test.go: `.logBroadcaster.On("Register", mock.Anything, mock.Anything)`
$DIR/core/services/fluxmonitorv2/flux_monitor_test.go: `.Return(func() {})`
$DIR/core/services/fluxmonitorv2/flux_monitor_test.go: `.logBroadcaster.On("IsConnected")`
$DIR/core/services/fluxmonitorv2/flux_monitor_test.go: `.Return(true)`
$DIR/core/services/fluxmonitorv2/flux_monitor_test.go: `.Maybe()`
$DIR/core/services/fluxmonitorv2/flux_monitor_test.go: `.fluxAggregator.On("Address")`
$DIR/core/services/fluxmonitorv2/flux_monitor_test.go: `.Return(common.Address{})`
$DIR/core/services/fluxmonitorv2/flux_monitor_test.go: `.fluxAggregator.On("GetOracles", nilOpts)`
$DIR/core/services/fluxmonitorv2/flux_monitor_test.go: `.Return(oracles, nil)`
$DIR/core/services/fluxmonitorv2/flux_monitor_test.go: `.fluxAggregator.On("LatestRoundData", nilOpts)`
$DIR/core/services/fluxmonitorv2/flux_monitor_test.go: `.Return(makeRoundDataForRoundID(1), nil)`
$DIR/core/services/fluxmonitorv2/flux_monitor_test.go: `.Once()`
$DIR/core/services/fluxmonitorv2/flux_monitor_test.go: `.fluxAggregator.On("OracleRoundState", nilOpts, nodeAddr, uint32(1))`
$DIR/core/services/fluxmonitorv2/flux_monitor_test.go: `.Return(flux_aggregator_wrapper.OracleRoundState{
RoundId: 1,
EligibleToSubmit: false,
StartedAt: tc.startedAt,
Timeout: 10000, // round won't time out
}, nil)`
$DIR/core/services/fluxmonitorv2/flux_monitor_test.go: `.fluxAggregator.On("OracleRoundState", nilOpts, nodeAddr, uint32(0))`
$DIR/core/services/fluxmonitorv2/flux_monitor_test.go: `.Return(roundState, nil)`
$DIR/core/services/fluxmonitorv2/flux_monitor_test.go: `.
Once()`
$DIR/core/services/fluxmonitorv2/flux_monitor_test.go: `.
Run(func(args mock.Arguments) {
initialPollOccurred <- struct{}{}
})`
$DIR/core/services/fluxmonitorv2/flux_monitor_test.go: `.fluxAggregator.On("OracleRoundState", nilOpts, nodeAddr, uint32(0))`
$DIR/core/services/fluxmonitorv2/flux_monitor_test.go: `.Return(roundState, nil)`
$DIR/core/services/fluxmonitorv2/flux_monitor_test.go: `.
Run(func(mock.Arguments) {
close(chRoundState)
})`
$DIR/core/services/fluxmonitorv2/flux_monitor_test.go: `.
Maybe()`
$DIR/core/services/fluxmonitorv2/flux_monitor_test.go: `.Run(t, fm)`
$DIR/core/services/fluxmonitorv2/flux_monitor_test.go: `.Eventually(chRoundState)`
$DIR/core/services/fluxmonitorv2/flux_monitor_test.go: `.Should(gomega.BeClosed())`
$DIR/core/services/fluxmonitorv2/flux_monitor_test.go: `.BeClosed()`
$DIR/core/services/fluxmonitorv2/flux_monitor_test.go: `.Consistently(chRoundState)`
$DIR/core/services/fluxmonitorv2/flux_monitor_test.go: `.ShouldNot(gomega.BeClosed())`
$DIR/core/services/fluxmonitorv2/flux_monitor_test.go: `.BeClosed()`
$DIR/core/services/fluxmonitorv2/flux_monitor_test.go: `.NewWithT(t)`
$DIR/core/services/fluxmonitorv2/flux_monitor_test.go: `.NewAddress()`
$DIR/core/services/fluxmonitorv2/flux_monitor_test.go: `.keyStore.On("EnabledKeysForChain", mock.Anything, testutils.FixtureChainID)`
$DIR/core/services/fluxmonitorv2/flux_monitor_test.go: `.Return([]ethkey.KeyV2{{Address: nodeAddr}}, nil)`
$DIR/core/services/fluxmonitorv2/flux_monitor_test.go: `.Once()`
$DIR/core/services/fluxmonitorv2/flux_monitor_test.go: `.NewInt(fetchedAnswer)`
$DIR/core/services/fluxmonitorv2/flux_monitor_test.go: `.logBroadcaster.On("Register", mock.Anything, mock.Anything)`
$DIR/core/services/fluxmonitorv2/flux_monitor_test.go: `.Return(func() {})`
$DIR/core/services/fluxmonitorv2/flux_monitor_test.go: `.logBroadcaster.On("IsConnected")`
$DIR/core/services/fluxmonitorv2/flux_monitor_test.go: `.Return(true)`
$DIR/core/services/fluxmonitorv2/flux_monitor_test.go: `.Maybe()`
$DIR/core/services/fluxmonitorv2/flux_monitor_test.go: `.fluxAggregator.On("Address")`
$DIR/core/services/fluxmonitorv2/flux_monitor_test.go: `.Return(common.Address{})`
$DIR/core/services/fluxmonitorv2/flux_monitor_test.go: `.fluxAggregator.On("GetOracles", nilOpts)`
$DIR/core/services/fluxmonitorv2/flux_monitor_test.go: `.Return(oracles, nil)`
$DIR/core/services/fluxmonitorv2/flux_monitor_test.go: `.fluxAggregator.On("LatestRoundData", nilOpts)`
$DIR/core/services/fluxmonitorv2/flux_monitor_test.go: `.Return(makeRoundDataForRoundID(1), nil)`
$DIR/core/services/fluxmonitorv2/flux_monitor_test.go: `.Once()`
$DIR/core/services/fluxmonitorv2/flux_monitor_test.go: `.fluxAggregator.On("OracleRoundState", nilOpts, nodeAddr, uint32(1))`
$DIR/core/services/fluxmonitorv2/flux_monitor_test.go: `.Return(flux_aggregator_wrapper.OracleRoundState{
RoundId: 1,
EligibleToSubmit: false,
LatestSubmission: answerBigInt,
StartedAt: now(),
Timeout: uint64(1000000),
}, nil)`
$DIR/core/services/fluxmonitorv2/flux_monitor_test.go: `.Once()`
$DIR/core/services/fluxmonitorv2/flux_monitor_test.go: `.Now()`
$DIR/core/services/fluxmonitorv2/flux_monitor_test.go: `.Unix()`
$DIR/core/services/fluxmonitorv2/flux_monitor_test.go: `.fluxAggregator.On("OracleRoundState", nilOpts, nodeAddr, uint32(0))`
$DIR/core/services/fluxmonitorv2/flux_monitor_test.go: `.Return(flux_aggregator_wrapper.OracleRoundState{
RoundId: 1,
EligibleToSubmit: false,
LatestSubmission: answerBigInt,
StartedAt: startedAt,
PaymentAmount: big.NewInt(10),
AvailableFunds: big.NewInt(100),
Timeout: timeout,
}, nil)`
$DIR/core/services/fluxmonitorv2/flux_monitor_test.go: `.NewInt(10)`
$DIR/core/services/fluxmonitorv2/flux_monitor_test.go: `.NewInt(100)`
$DIR/core/services/fluxmonitorv2/flux_monitor_test.go: `.Once()`
$DIR/core/services/fluxmonitorv2/flux_monitor_test.go: `.
Run(func(mock.Arguments) { close(chRoundState1) })`
$DIR/core/services/fluxmonitorv2/flux_monitor_test.go: `.
Once()`
$DIR/core/services/fluxmonitorv2/flux_monitor_test.go: `.fluxAggregator.On("OracleRoundState", nilOpts, nodeAddr, uint32(0))`
$DIR/core/services/fluxmonitorv2/flux_monitor_test.go: `.Return(flux_aggregator_wrapper.OracleRoundState{
RoundId: 1,
EligibleToSubmit: false,
LatestSubmission: answerBigInt,
PaymentAmount: big.NewInt(10),
AvailableFunds: big.NewInt(100),
StartedAt: startedAt,
Timeout: timeout,
}, nil)`
$DIR/core/services/fluxmonitorv2/flux_monitor_test.go: `.NewInt(10)`
$DIR/core/services/fluxmonitorv2/flux_monitor_test.go: `.NewInt(100)`
$DIR/core/services/fluxmonitorv2/flux_monitor_test.go: `.Once()`
$DIR/core/services/fluxmonitorv2/flux_monitor_test.go: `.
Run(func(mock.Arguments) { close(chRoundState2) })`
$DIR/core/services/fluxmonitorv2/flux_monitor_test.go: `.
Once()`
$DIR/core/services/fluxmonitorv2/flux_monitor_test.go: `.Run(t, fm)`
$DIR/core/services/fluxmonitorv2/flux_monitor_test.go: `.logBroadcaster.On("WasAlreadyConsumed", mock.Anything, mock.Anything)`
$DIR/core/services/fluxmonitorv2/flux_monitor_test.go: `.Return(false, nil)`
$DIR/core/services/fluxmonitorv2/flux_monitor_test.go: `.logBroadcaster.On("MarkConsumed", mock.Anything, mock.Anything, mock.Anything)`
$DIR/core/services/fluxmonitorv2/flux_monitor_test.go: `.Return(nil)`
$DIR/core/services/fluxmonitorv2/flux_monitor_test.go: `.logBroadcast.On("DecodedLog")`
$DIR/core/services/fluxmonitorv2/flux_monitor_test.go: `.Return(&flux_aggregator_wrapper.FluxAggregatorNewRound{
RoundId: big.NewInt(0),
StartedAt: big.NewInt(time.Now().UTC().Unix()),
})`
$DIR/core/services/fluxmonitorv2/flux_monitor_test.go: `.NewInt(0)`
$DIR/core/services/fluxmonitorv2/flux_monitor_test.go: `.NewInt(time.Now().UTC().Unix())`
$DIR/core/services/fluxmonitorv2/flux_monitor_test.go: `.Now()`
$DIR/core/services/fluxmonitorv2/flux_monitor_test.go: `.UTC()`
$DIR/core/services/fluxmonitorv2/flux_monitor_test.go: `.Unix()`
$DIR/core/services/fluxmonitorv2/flux_monitor_test.go: `.logBroadcast.On("String")`
$DIR/core/services/fluxmonitorv2/flux_monitor_test.go: `.Maybe()`
$DIR/core/services/fluxmonitorv2/flux_monitor_test.go: `.Return("")`
$DIR/core/services/fluxmonitorv2/flux_monitor_test.go: `.HandleLog(testutils.Context(t), tm.logBroadcast)`
$DIR/core/services/fluxmonitorv2/flux_monitor_test.go: `.Context(t)`
$DIR/core/services/fluxmonitorv2/flux_monitor_test.go: `.Eventually(chRoundState1)`
$DIR/core/services/fluxmonitorv2/flux_monitor_test.go: `.Should(gomega.BeClosed())`
$DIR/core/services/fluxmonitorv2/flux_monitor_test.go: `.BeClosed()`
$DIR/core/services/fluxmonitorv2/flux_monitor_test.go: `.Eventually(chRoundState2)`
$DIR/core/services/fluxmonitorv2/flux_monitor_test.go: `.Should(gomega.BeClosed())`
$DIR/core/services/fluxmonitorv2/flux_monitor_test.go: `.BeClosed()`
$DIR/core/services/fluxmonitorv2/flux_monitor_test.go: `.Duration(2*timeout)`
$DIR/core/services/fluxmonitorv2/flux_monitor_test.go: `.NewSqlxDB(t)`
$DIR/core/services/fluxmonitorv2/flux_monitor_test.go: `.fluxAggregator.
On("OracleRoundState", nilOpts, mock.Anything, mock.Anything)`
$DIR/core/services/fluxmonitorv2/flux_monitor_test.go: `.
Return(flux_aggregator_wrapper.OracleRoundState{RoundId: 123}, nil)`
$DIR/core/services/fluxmonitorv2/flux_monitor_test.go: `.logBroadcaster.On("WasAlreadyConsumed", mock.Anything, mock.Anything)`
$DIR/core/services/fluxmonitorv2/flux_monitor_test.go: `.Return(false, nil)`
$DIR/core/services/fluxmonitorv2/flux_monitor_test.go: `.Once()`
$DIR/core/services/fluxmonitorv2/flux_monitor_test.go: `.logBroadcast.On("DecodedLog")`
$DIR/core/services/fluxmonitorv2/flux_monitor_test.go: `.Return(&flux_aggregator_wrapper.FluxAggregatorAnswerUpdated{})`
$DIR/core/services/fluxmonitorv2/flux_monitor_test.go: `.logBroadcast.On("String")`
$DIR/core/services/fluxmonitorv2/flux_monitor_test.go: `.Maybe()`
$DIR/core/services/fluxmonitorv2/flux_monitor_test.go: `.Return("")`
$DIR/core/services/fluxmonitorv2/flux_monitor_test.go: `.logBroadcaster.On("MarkConsumed", mock.Anything, mock.Anything, mock.Anything)`
$DIR/core/services/fluxmonitorv2/flux_monitor_test.go: `.Return(nil)`
$DIR/core/services/fluxmonitorv2/flux_monitor_test.go: `.Once()`
$DIR/core/services/fluxmonitorv2/flux_monitor_test.go: `.ExportedBacklog()`
$DIR/core/services/fluxmonitorv2/flux_monitor_test.go: `.Add(fluxmonitorv2.PriorityNewRoundLog, tm.logBroadcast)`
$DIR/core/services/fluxmonitorv2/flux_monitor_test.go: `.New("err")`
$DIR/core/services/fluxmonitorv2/flux_monitor_test.go: `.NewSqlxDB(t)`
$DIR/core/services/fluxmonitorv2/flux_monitor_test.go: `.Run(tc.name, func(t *testing.T) {
t.Parallel()
fm, tm := setup(t, db)
tm.logBroadcaster.On("WasAlreadyConsumed", mock.Anything, mock.Anything).Return(tc.consumed, tc.err).Once()
fm.ExportedBacklog().Add(fluxmonitorv2.PriorityNewRoundLog, tm.logBroadcast)
fm.ExportedProcessLogs()
})`
$DIR/core/services/fluxmonitorv2/flux_monitor_test.go: `.logBroadcaster.On("WasAlreadyConsumed", mock.Anything, mock.Anything)`
$DIR/core/services/fluxmonitorv2/flux_monitor_test.go: `.Return(tc.consumed, tc.err)`
$DIR/core/services/fluxmonitorv2/flux_monitor_test.go: `.Once()`
$DIR/core/services/fluxmonitorv2/flux_monitor_test.go: `.ExportedBacklog()`
$DIR/core/services/fluxmonitorv2/flux_monitor_test.go: `.Add(fluxmonitorv2.PriorityNewRoundLog, tm.logBroadcast)`
$DIR/core/services/fluxmonitorv2/flux_monitor_test.go: `.ExportedProcessLogs()`
$DIR/core/services/fluxmonitorv2/flux_monitor_test.go: `.Run("when NewRound log arrives, then poll ticker fires", func(t *testing.T) {
db, nodeAddr := setupStoreWithKey(t)
oracles := []common.Address{nodeAddr, testutils.NewAddress()}
fm, tm := setup(t,
db,
disableIdleTimer(true),
disablePollTicker(true),
)
var (
paymentAmount = defaultMinimumContractPayment.ToInt()
availableFunds = big.NewInt(1).Mul(paymentAmount, big.NewInt(1000))
)
const (
roundID = 3
answer = 100
)
run := &pipeline.Run{ID: 1}
tm.keyStore.On("EnabledKeysForChain", mock.Anything, testutils.FixtureChainID).Return([]ethkey.KeyV2{{Address: nodeAddr}}, nil).Once()
tm.logBroadcaster.On("IsConnected").Return(true).Maybe()
tm.orm.On("WithDataSource", mock.Anything).Return(fluxmonitorv2.ORM(tm.orm))
// Mocks initiated by the New Round log
tm.orm.On("MostRecentFluxMonitorRoundID", mock.Anything, contractAddress).Return(uint32(roundID), nil).Once()
tm.orm.
On("FindOrCreateFluxMonitorRoundStats", mock.Anything, contractAddress, uint32(roundID), mock.Anything).
Return(fluxmonitorv2.FluxMonitorRoundStatsV2{
Aggregator: contractAddress,
RoundID: roundID,
}, nil).Once()
tm.pipelineRunner.
On("ExecuteRun", mock.Anything, pipelineSpec, mock.Anything, mock.Anything).
Return(run, pipeline.TaskRunResults{
{
Result: pipeline.Result{
Value: decimal.NewFromInt(answer),
Error: nil,
},
Task: &pipeline.HTTPTask{},
},
}, nil)
tm.pipelineRunner.
On("InsertFinishedRun", mock.Anything, mock.Anything, mock.Anything, mock.Anything).
Return(nil).
Run(func(args mock.Arguments) {
args.Get(2).(*pipeline.Run).ID = 1
})
tm.logBroadcaster.On("MarkConsumed", mock.Anything, mock.Anything, mock.Anything).Return(nil).Once()
tm.contractSubmitter.On("Submit", mock.Anything, big.NewInt(roundID), big.NewInt(answer), buildIdempotencyKey(run.ID)).Return(nil).Once()
tm.orm.
On("UpdateFluxMonitorRoundStats",
mock.Anything,
contractAddress,
uint32(roundID),
int64(1),
uint(1),
).
Return(nil)
tm.fluxAggregator.On("GetOracles", nilOpts).Return(oracles, nil)
require.NoError(t, fm.SetOracleAddress())
tm.fluxAggregator.On("LatestRoundData", nilOpts).Return(flux_aggregator_wrapper.LatestRoundData{
Answer: big.NewInt(10),
UpdatedAt: big.NewInt(100),
}, nil)
// Fire off the NewRound log, which the node should respond to
tm.fluxAggregator.On("OracleRoundState", nilOpts, nodeAddr, uint32(roundID)).
Return(flux_aggregator_wrapper.OracleRoundState{
RoundId: roundID,
LatestSubmission: big.NewInt(answer),
EligibleToSubmit: true,
AvailableFunds: availableFunds,
PaymentAmount: paymentAmount,
OracleCount: 1,
}, nil).
Once()
fm.ExportedRespondToNewRoundLog(&flux_aggregator_wrapper.FluxAggregatorNewRound{
RoundId: big.NewInt(roundID),
StartedAt: big.NewInt(0),
}, log.NewLogBroadcast(types.Log{}, cltest.FixtureChainID, nil))
// Mocks initiated by polling
// Now force the node to try to poll and ensure it does not respond this time
tm.fluxAggregator.On("OracleRoundState", nilOpts, nodeAddr, uint32(0)).
Return(flux_aggregator_wrapper.OracleRoundState{
RoundId: roundID,
LatestSubmission: big.NewInt(answer),
EligibleToSubmit: true,
AvailableFunds: availableFunds,
PaymentAmount: paymentAmount,
OracleCount: 1,
}, nil).
Once()
tm.orm.
On("FindOrCreateFluxMonitorRoundStats", mock.Anything, contractAddress, uint32(roundID), mock.Anything).
Return(fluxmonitorv2.FluxMonitorRoundStatsV2{
PipelineRunID: corenull.NewInt64(int64(1), true),
Aggregator: contractAddress,
RoundID: roundID,
NumSubmissions: 1,
}, nil).Once()
now := time.Now()
tm.pipelineORM.On("FindRun", mock.Anything, int64(1)).Return(pipeline.Run{
FinishedAt: null.TimeFrom(now),
}, nil)
fm.ExportedPollIfEligible(0, 0)
})`
$DIR/core/services/fluxmonitorv2/flux_monitor_test.go: `.NewAddress()`
$DIR/core/services/fluxmonitorv2/flux_monitor_test.go: `.ToInt()`
$DIR/core/services/fluxmonitorv2/flux_monitor_test.go: `.NewInt(1)`
$DIR/core/services/fluxmonitorv2/flux_monitor_test.go: `.Mul(paymentAmount, big.NewInt(1000))`
$DIR/core/services/fluxmonitorv2/flux_monitor_test.go: `.NewInt(1000)`
$DIR/core/services/fluxmonitorv2/flux_monitor_test.go: `.keyStore.On("EnabledKeysForChain", mock.Anything, testutils.FixtureChainID)`
$DIR/core/services/fluxmonitorv2/flux_monitor_test.go: `.Return([]ethkey.KeyV2{{Address: nodeAddr}}, nil)`
$DIR/core/services/fluxmonitorv2/flux_monitor_test.go: `.Once()`
$DIR/core/services/fluxmonitorv2/flux_monitor_test.go: `.logBroadcaster.On("IsConnected")`
$DIR/core/services/fluxmonitorv2/flux_monitor_test.go: `.Return(true)`
$DIR/core/services/fluxmonitorv2/flux_monitor_test.go: `.Maybe()`
$DIR/core/services/fluxmonitorv2/flux_monitor_test.go: `.orm.On("WithDataSource", mock.Anything)`
$DIR/core/services/fluxmonitorv2/flux_monitor_test.go: `.Return(fluxmonitorv2.ORM(tm.orm))`
$DIR/core/services/fluxmonitorv2/flux_monitor_test.go: `.ORM(tm.orm)`
$DIR/core/services/fluxmonitorv2/flux_monitor_test.go: `.orm.On("MostRecentFluxMonitorRoundID", mock.Anything, contractAddress)`
$DIR/core/services/fluxmonitorv2/flux_monitor_test.go: `.Return(uint32(roundID), nil)`
$DIR/core/services/fluxmonitorv2/flux_monitor_test.go: `.Once()`
$DIR/core/services/fluxmonitorv2/flux_monitor_test.go: `.orm.
On("FindOrCreateFluxMonitorRoundStats", mock.Anything, contractAddress, uint32(roundID), mock.Anything)`
$DIR/core/services/fluxmonitorv2/flux_monitor_test.go: `.
Return(fluxmonitorv2.FluxMonitorRoundStatsV2{
Aggregator: contractAddress,
RoundID: roundID,
}, nil)`
$DIR/core/services/fluxmonitorv2/flux_monitor_test.go: `.Once()`
$DIR/core/services/fluxmonitorv2/flux_monitor_test.go: `.pipelineRunner.
On("ExecuteRun", mock.Anything, pipelineSpec, mock.Anything, mock.Anything)`
$DIR/core/services/fluxmonitorv2/flux_monitor_test.go: `.
Return(run, pipeline.TaskRunResults{
{
Result: pipeline.Result{
Value: decimal.NewFromInt(answer),
Error: nil,
},
Task: &pipeline.HTTPTask{},
},
}, nil)`
$DIR/core/services/fluxmonitorv2/flux_monitor_test.go: `.NewFromInt(answer)`
$DIR/core/services/fluxmonitorv2/flux_monitor_test.go: `.pipelineRunner.
On("InsertFinishedRun", mock.Anything, mock.Anything, mock.Anything, mock.Anything)`
$DIR/core/services/fluxmonitorv2/flux_monitor_test.go: `.
Return(nil)`
$DIR/core/services/fluxmonitorv2/flux_monitor_test.go: `.
Run(func(args mock.Arguments) {
args.Get(2).(*pipeline.Run).ID = 1
})`
$DIR/core/services/fluxmonitorv2/flux_monitor_test.go: `.Get(2)`
$DIR/core/services/fluxmonitorv2/flux_monitor_test.go: `.logBroadcaster.On("MarkConsumed", mock.Anything, mock.Anything, mock.Anything)`
$DIR/core/services/fluxmonitorv2/flux_monitor_test.go: `.Return(nil)`
$DIR/core/services/fluxmonitorv2/flux_monitor_test.go: `.Once()`
$DIR/core/services/fluxmonitorv2/flux_monitor_test.go: `.contractSubmitter.On("Submit", mock.Anything, big.NewInt(roundID), big.NewInt(answer), buildIdempotencyKey(run.ID))`
$DIR/core/services/fluxmonitorv2/flux_monitor_test.go: `.NewInt(roundID)`
$DIR/core/services/fluxmonitorv2/flux_monitor_test.go: `.NewInt(answer)`
$DIR/core/services/fluxmonitorv2/flux_monitor_test.go: `.Return(nil)`
$DIR/core/services/fluxmonitorv2/flux_monitor_test.go: `.Once()`
$DIR/core/services/fluxmonitorv2/flux_monitor_test.go: `.orm.
On("UpdateFluxMonitorRoundStats",
mock.Anything,
contractAddress,
uint32(roundID),
int64(1),
uint(1),
)`
$DIR/core/services/fluxmonitorv2/flux_monitor_test.go: `.
Return(nil)`
$DIR/core/services/fluxmonitorv2/flux_monitor_test.go: `.fluxAggregator.On("GetOracles", nilOpts)`
$DIR/core/services/fluxmonitorv2/flux_monitor_test.go: `.Return(oracles, nil)`
$DIR/core/services/fluxmonitorv2/flux_monitor_test.go: `.fluxAggregator.On("LatestRoundData", nilOpts)`
$DIR/core/services/fluxmonitorv2/flux_monitor_test.go: `.Return(flux_aggregator_wrapper.LatestRoundData{
Answer: big.NewInt(10),
UpdatedAt: big.NewInt(100),
}, nil)`
$DIR/core/services/fluxmonitorv2/flux_monitor_test.go: `.NewInt(10)`
$DIR/core/services/fluxmonitorv2/flux_monitor_test.go: `.NewInt(100)`
$DIR/core/services/fluxmonitorv2/flux_monitor_test.go: `.fluxAggregator.On("OracleRoundState", nilOpts, nodeAddr, uint32(roundID))`
$DIR/core/services/fluxmonitorv2/flux_monitor_test.go: `.
Return(flux_aggregator_wrapper.OracleRoundState{
RoundId: roundID,
LatestSubmission: big.NewInt(answer),
EligibleToSubmit: true,
AvailableFunds: availableFunds,
PaymentAmount: paymentAmount,
OracleCount: 1,
}, nil)`
$DIR/core/services/fluxmonitorv2/flux_monitor_test.go: `.NewInt(answer)`
$DIR/core/services/fluxmonitorv2/flux_monitor_test.go: `.
Once()`
$DIR/core/services/fluxmonitorv2/flux_monitor_test.go: `.ExportedRespondToNewRoundLog(&flux_aggregator_wrapper.FluxAggregatorNewRound{
RoundId: big.NewInt(roundID),
StartedAt: big.NewInt(0),
}, log.NewLogBroadcast(types.Log{}, cltest.FixtureChainID, nil))`
$DIR/core/services/fluxmonitorv2/flux_monitor_test.go: `.NewInt(roundID)`
$DIR/core/services/fluxmonitorv2/flux_monitor_test.go: `.NewInt(0)`
$DIR/core/services/fluxmonitorv2/flux_monitor_test.go: `.NewLogBroadcast(types.Log{}, cltest.FixtureChainID, nil)`
$DIR/core/services/fluxmonitorv2/flux_monitor_test.go: `.fluxAggregator.On("OracleRoundState", nilOpts, nodeAddr, uint32(0))`
$DIR/core/services/fluxmonitorv2/flux_monitor_test.go: `.
Return(flux_aggregator_wrapper.OracleRoundState{
RoundId: roundID,
LatestSubmission: big.NewInt(answer),
EligibleToSubmit: true,
AvailableFunds: availableFunds,
PaymentAmount: paymentAmount,
OracleCount: 1,
}, nil)`
$DIR/core/services/fluxmonitorv2/flux_monitor_test.go: `.NewInt(answer)`
$DIR/core/services/fluxmonitorv2/flux_monitor_test.go: `.
Once()`
$DIR/core/services/fluxmonitorv2/flux_monitor_test.go: `.orm.
On("FindOrCreateFluxMonitorRoundStats", mock.Anything, contractAddress, uint32(roundID), mock.Anything)`
$DIR/core/services/fluxmonitorv2/flux_monitor_test.go: `.
Return(fluxmonitorv2.FluxMonitorRoundStatsV2{
PipelineRunID: corenull.NewInt64(int64(1), true),
Aggregator: contractAddress,
RoundID: roundID,
NumSubmissions: 1,
}, nil)`
$DIR/core/services/fluxmonitorv2/flux_monitor_test.go: `.NewInt64(int64(1), true)`
$DIR/core/services/fluxmonitorv2/flux_monitor_test.go: `.Once()`
$DIR/core/services/fluxmonitorv2/flux_monitor_test.go: `.Now()`
$DIR/core/services/fluxmonitorv2/flux_monitor_test.go: `.pipelineORM.On("FindRun", mock.Anything, int64(1))`
$DIR/core/services/fluxmonitorv2/flux_monitor_test.go: `.Return(pipeline.Run{
FinishedAt: null.TimeFrom(now),
}, nil)`
$DIR/core/services/fluxmonitorv2/flux_monitor_test.go: `.TimeFrom(now)`
$DIR/core/services/fluxmonitorv2/flux_monitor_test.go: `.ExportedPollIfEligible(0, 0)`
$DIR/core/services/fluxmonitorv2/flux_monitor_test.go: `.Run("when poll ticker fires, then NewRound log arrives", func(t *testing.T) {
db, nodeAddr := setupStoreWithKey(t)
oracles := []common.Address{nodeAddr, testutils.NewAddress()}
fm, tm := setup(t,
db,
disableIdleTimer(true),
disablePollTicker(true),
)
var (
paymentAmount = defaultMinimumContractPayment.ToInt()
availableFunds = big.NewInt(1).Mul(paymentAmount, big.NewInt(1000))
)
const (
roundID = 3
answer = 100
)
run := &pipeline.Run{ID: 1}
tm.keyStore.On("EnabledKeysForChain", mock.Anything, testutils.FixtureChainID).Return([]ethkey.KeyV2{{Address: nodeAddr}}, nil).Once()
tm.logBroadcaster.On("IsConnected").Return(true).Maybe()
tm.orm.On("WithDataSource", mock.Anything).Return(fluxmonitorv2.ORM(tm.orm))
// First, force the node to try to poll, which should result in a submission
tm.fluxAggregator.On("LatestRoundData", nilOpts).Return(flux_aggregator_wrapper.LatestRoundData{
Answer: big.NewInt(10),
UpdatedAt: big.NewInt(100),
}, nil)
tm.fluxAggregator.On("OracleRoundState", nilOpts, nodeAddr, uint32(0)).
Return(flux_aggregator_wrapper.OracleRoundState{
RoundId: roundID,
LatestSubmission: big.NewInt(answer),
EligibleToSubmit: true,
AvailableFunds: availableFunds,
PaymentAmount: paymentAmount,
OracleCount: 1,
}, nil).
Once()
tm.orm.
On("FindOrCreateFluxMonitorRoundStats", mock.Anything, contractAddress, uint32(roundID), mock.Anything).
Return(fluxmonitorv2.FluxMonitorRoundStatsV2{
Aggregator: contractAddress,
RoundID: roundID,
}, nil).Once()
tm.pipelineRunner.
On("ExecuteRun", mock.Anything, pipelineSpec, mock.Anything, mock.Anything).
Return(run, pipeline.TaskRunResults{
{
Result: pipeline.Result{
Value: decimal.NewFromInt(answer),
Error: nil,
},
Task: &pipeline.HTTPTask{},
},
}, nil)
tm.pipelineRunner.
On("InsertFinishedRun", mock.Anything, mock.Anything, mock.Anything, mock.Anything).
Return(nil).
Run(func(args mock.Arguments) {
args.Get(2).(*pipeline.Run).ID = 1
})
tm.contractSubmitter.On("Submit", mock.Anything, big.NewInt(roundID), big.NewInt(answer), buildIdempotencyKey(run.ID)).Return(nil).Once()
tm.orm.
On("UpdateFluxMonitorRoundStats",
mock.Anything,
contractAddress,
uint32(roundID),
int64(1),
uint(0),
).
Return(nil).
Once()
tm.fluxAggregator.On("GetOracles", nilOpts).Return(oracles, nil)
require.NoError(t, fm.SetOracleAddress())
fm.ExportedPollIfEligible(0, 0)
// Now fire off the NewRound log and ensure it does not respond this time
tm.orm.On("MostRecentFluxMonitorRoundID", mock.Anything, contractAddress).Return(uint32(roundID), nil)
tm.orm.
On("FindOrCreateFluxMonitorRoundStats", mock.Anything, contractAddress, uint32(roundID), mock.Anything).
Return(fluxmonitorv2.FluxMonitorRoundStatsV2{
PipelineRunID: corenull.NewInt64(int64(1), true),
Aggregator: contractAddress,
RoundID: roundID,
NumSubmissions: 1,
}, nil).Once()
tm.pipelineORM.On("FindRun", mock.Anything, int64(1)).Return(pipeline.Run{}, nil)
tm.logBroadcaster.On("MarkConsumed", mock.Anything, mock.Anything, mock.Anything).Return(nil)
fm.ExportedRespondToNewRoundLog(&flux_aggregator_wrapper.FluxAggregatorNewRound{
RoundId: big.NewInt(roundID),
StartedAt: big.NewInt(0),
}, log.NewLogBroadcast(types.Log{}, cltest.FixtureChainID, nil))
})`
$DIR/core/services/fluxmonitorv2/flux_monitor_test.go: `.NewAddress()`
$DIR/core/services/fluxmonitorv2/flux_monitor_test.go: `.ToInt()`
$DIR/core/services/fluxmonitorv2/flux_monitor_test.go: `.NewInt(1)`
$DIR/core/services/fluxmonitorv2/flux_monitor_test.go: `.Mul(paymentAmount, big.NewInt(1000))`
$DIR/core/services/fluxmonitorv2/flux_monitor_test.go: `.NewInt(1000)`
$DIR/core/services/fluxmonitorv2/flux_monitor_test.go: `.keyStore.On("EnabledKeysForChain", mock.Anything, testutils.FixtureChainID)`
$DIR/core/services/fluxmonitorv2/flux_monitor_test.go: `.Return([]ethkey.KeyV2{{Address: nodeAddr}}, nil)`
$DIR/core/services/fluxmonitorv2/flux_monitor_test.go: `.Once()`
$DIR/core/services/fluxmonitorv2/flux_monitor_test.go: `.logBroadcaster.On("IsConnected")`
$DIR/core/services/fluxmonitorv2/flux_monitor_test.go: `.Return(true)`
$DIR/core/services/fluxmonitorv2/flux_monitor_test.go: `.Maybe()`
$DIR/core/services/fluxmonitorv2/flux_monitor_test.go: `.orm.On("WithDataSource", mock.Anything)`
$DIR/core/services/fluxmonitorv2/flux_monitor_test.go: `.Return(fluxmonitorv2.ORM(tm.orm))`
$DIR/core/services/fluxmonitorv2/flux_monitor_test.go: `.ORM(tm.orm)`
$DIR/core/services/fluxmonitorv2/flux_monitor_test.go: `.fluxAggregator.On("LatestRoundData", nilOpts)`
$DIR/core/services/fluxmonitorv2/flux_monitor_test.go: `.Return(flux_aggregator_wrapper.LatestRoundData{
Answer: big.NewInt(10),
UpdatedAt: big.NewInt(100),
}, nil)`
$DIR/core/services/fluxmonitorv2/flux_monitor_test.go: `.NewInt(10)`
$DIR/core/services/fluxmonitorv2/flux_monitor_test.go: `.NewInt(100)`
$DIR/core/services/fluxmonitorv2/flux_monitor_test.go: `.fluxAggregator.On("OracleRoundState", nilOpts, nodeAddr, uint32(0))`
$DIR/core/services/fluxmonitorv2/flux_monitor_test.go: `.
Return(flux_aggregator_wrapper.OracleRoundState{
RoundId: roundID,
LatestSubmission: big.NewInt(answer),
EligibleToSubmit: true,
AvailableFunds: availableFunds,
PaymentAmount: paymentAmount,
OracleCount: 1,
}, nil)`
$DIR/core/services/fluxmonitorv2/flux_monitor_test.go: `.NewInt(answer)`
$DIR/core/services/fluxmonitorv2/flux_monitor_test.go: `.
Once()`
$DIR/core/services/fluxmonitorv2/flux_monitor_test.go: `.orm.
On("FindOrCreateFluxMonitorRoundStats", mock.Anything, contractAddress, uint32(roundID), mock.Anything)`
$DIR/core/services/fluxmonitorv2/flux_monitor_test.go: `.
Return(fluxmonitorv2.FluxMonitorRoundStatsV2{
Aggregator: contractAddress,
RoundID: roundID,
}, nil)`
$DIR/core/services/fluxmonitorv2/flux_monitor_test.go: `.Once()`
$DIR/core/services/fluxmonitorv2/flux_monitor_test.go: `.pipelineRunner.
On("ExecuteRun", mock.Anything, pipelineSpec, mock.Anything, mock.Anything)`
$DIR/core/services/fluxmonitorv2/flux_monitor_test.go: `.
Return(run, pipeline.TaskRunResults{
{
Result: pipeline.Result{
Value: decimal.NewFromInt(answer),
Error: nil,
},
Task: &pipeline.HTTPTask{},
},
}, nil)`
$DIR/core/services/fluxmonitorv2/flux_monitor_test.go: `.NewFromInt(answer)`
$DIR/core/services/fluxmonitorv2/flux_monitor_test.go: `.pipelineRunner.
On("InsertFinishedRun", mock.Anything, mock.Anything, mock.Anything, mock.Anything)`
$DIR/core/services/fluxmonitorv2/flux_monitor_test.go: `.
Return(nil)`
$DIR/core/services/fluxmonitorv2/flux_monitor_test.go: `.
Run(func(args mock.Arguments) {
args.Get(2).(*pipeline.Run).ID = 1
})`
$DIR/core/services/fluxmonitorv2/flux_monitor_test.go: `.Get(2)`
$DIR/core/services/fluxmonitorv2/flux_monitor_test.go: `.contractSubmitter.On("Submit", mock.Anything, big.NewInt(roundID), big.NewInt(answer), buildIdempotencyKey(run.ID))`
$DIR/core/services/fluxmonitorv2/flux_monitor_test.go: `.NewInt(roundID)`
$DIR/core/services/fluxmonitorv2/flux_monitor_test.go: `.NewInt(answer)`
$DIR/core/services/fluxmonitorv2/flux_monitor_test.go: `.Return(nil)`
$DIR/core/services/fluxmonitorv2/flux_monitor_test.go: `.Once()`
$DIR/core/services/fluxmonitorv2/flux_monitor_test.go: `.orm.
On("UpdateFluxMonitorRoundStats",
mock.Anything,
contractAddress,
uint32(roundID),
int64(1),
uint(0),
)`
$DIR/core/services/fluxmonitorv2/flux_monitor_test.go: `.
Return(nil)`
$DIR/core/services/fluxmonitorv2/flux_monitor_test.go: `.
Once()`
$DIR/core/services/fluxmonitorv2/flux_monitor_test.go: `.fluxAggregator.On("GetOracles", nilOpts)`
$DIR/core/services/fluxmonitorv2/flux_monitor_test.go: `.Return(oracles, nil)`
$DIR/core/services/fluxmonitorv2/flux_monitor_test.go: `.ExportedPollIfEligible(0, 0)`
$DIR/core/services/fluxmonitorv2/flux_monitor_test.go: `.orm.On("MostRecentFluxMonitorRoundID", mock.Anything, contractAddress)`
$DIR/core/services/fluxmonitorv2/flux_monitor_test.go: `.Return(uint32(roundID), nil)`
$DIR/core/services/fluxmonitorv2/flux_monitor_test.go: `.orm.
On("FindOrCreateFluxMonitorRoundStats", mock.Anything, contractAddress, uint32(roundID), mock.Anything)`
$DIR/core/services/fluxmonitorv2/flux_monitor_test.go: `.
Return(fluxmonitorv2.FluxMonitorRoundStatsV2{
PipelineRunID: corenull.NewInt64(int64(1), true),
Aggregator: contractAddress,
RoundID: roundID,
NumSubmissions: 1,
}, nil)`
$DIR/core/services/fluxmonitorv2/flux_monitor_test.go: `.NewInt64(int64(1), true)`
$DIR/core/services/fluxmonitorv2/flux_monitor_test.go: `.Once()`
$DIR/core/services/fluxmonitorv2/flux_monitor_test.go: `.pipelineORM.On("FindRun", mock.Anything, int64(1))`
$DIR/core/services/fluxmonitorv2/flux_monitor_test.go: `.Return(pipeline.Run{}, nil)`
$DIR/core/services/fluxmonitorv2/flux_monitor_test.go: `.logBroadcaster.On("MarkConsumed", mock.Anything, mock.Anything, mock.Anything)`
$DIR/core/services/fluxmonitorv2/flux_monitor_test.go: `.Return(nil)`
$DIR/core/services/fluxmonitorv2/flux_monitor_test.go: `.ExportedRespondToNewRoundLog(&flux_aggregator_wrapper.FluxAggregatorNewRound{
RoundId: big.NewInt(roundID),
StartedAt: big.NewInt(0),
}, log.NewLogBroadcast(types.Log{}, cltest.FixtureChainID, nil))`
$DIR/core/services/fluxmonitorv2/flux_monitor_test.go: `.NewInt(roundID)`
$DIR/core/services/fluxmonitorv2/flux_monitor_test.go: `.NewInt(0)`
$DIR/core/services/fluxmonitorv2/flux_monitor_test.go: `.NewLogBroadcast(types.Log{}, cltest.FixtureChainID, nil)`
$DIR/core/services/fluxmonitorv2/flux_monitor_test.go: `.NewAddress()`
$DIR/core/services/fluxmonitorv2/flux_monitor_test.go: `.ToInt()`
$DIR/core/services/fluxmonitorv2/flux_monitor_test.go: `.NewInt(1)`
$DIR/core/services/fluxmonitorv2/flux_monitor_test.go: `.Mul(paymentAmount, big.NewInt(1000))`
$DIR/core/services/fluxmonitorv2/flux_monitor_test.go: `.NewInt(1000)`
$DIR/core/services/fluxmonitorv2/flux_monitor_test.go: `.keyStore.On("EnabledKeysForChain", mock.Anything, testutils.FixtureChainID)`
$DIR/core/services/fluxmonitorv2/flux_monitor_test.go: `.Return([]ethkey.KeyV2{{Address: nodeAddr}}, nil)`
$DIR/core/services/fluxmonitorv2/flux_monitor_test.go: `.Once()`
$DIR/core/services/fluxmonitorv2/flux_monitor_test.go: `.logBroadcaster.On("IsConnected")`
$DIR/core/services/fluxmonitorv2/flux_monitor_test.go: `.Return(true)`
$DIR/core/services/fluxmonitorv2/flux_monitor_test.go: `.Maybe()`
$DIR/core/services/fluxmonitorv2/flux_monitor_test.go: `.orm.On("WithDataSource", mock.Anything)`
$DIR/core/services/fluxmonitorv2/flux_monitor_test.go: `.Return(fluxmonitorv2.ORM(tm.orm))`
$DIR/core/services/fluxmonitorv2/flux_monitor_test.go: `.ORM(tm.orm)`
$DIR/core/services/fluxmonitorv2/flux_monitor_test.go: `.fluxAggregator.On("LatestRoundData", nilOpts)`
$DIR/core/services/fluxmonitorv2/flux_monitor_test.go: `.Return(flux_aggregator_wrapper.LatestRoundData{
Answer: big.NewInt(10),
UpdatedAt: big.NewInt(100),
}, nil)`
$DIR/core/services/fluxmonitorv2/flux_monitor_test.go: `.NewInt(10)`
$DIR/core/services/fluxmonitorv2/flux_monitor_test.go: `.NewInt(100)`
$DIR/core/services/fluxmonitorv2/flux_monitor_test.go: `.fluxAggregator.On("OracleRoundState", nilOpts, nodeAddr, uint32(0))`
$DIR/core/services/fluxmonitorv2/flux_monitor_test.go: `.
Return(flux_aggregator_wrapper.OracleRoundState{
RoundId: roundID,
LatestSubmission: big.NewInt(answer),
EligibleToSubmit: true,
AvailableFunds: availableFunds,
PaymentAmount: paymentAmount,
OracleCount: 1,
}, nil)`
$DIR/core/services/fluxmonitorv2/flux_monitor_test.go: `.NewInt(answer)`
$DIR/core/services/fluxmonitorv2/flux_monitor_test.go: `.
Once()`
$DIR/core/services/fluxmonitorv2/flux_monitor_test.go: `.orm.
On("FindOrCreateFluxMonitorRoundStats", mock.Anything, contractAddress, uint32(roundID), mock.Anything)`
$DIR/core/services/fluxmonitorv2/flux_monitor_test.go: `.
Return(fluxmonitorv2.FluxMonitorRoundStatsV2{
Aggregator: contractAddress,
RoundID: roundID,
}, nil)`
$DIR/core/services/fluxmonitorv2/flux_monitor_test.go: `.Once()`
$DIR/core/services/fluxmonitorv2/flux_monitor_test.go: `.pipelineRunner.
On("ExecuteRun", mock.Anything, pipelineSpec, mock.Anything, mock.Anything)`
$DIR/core/services/fluxmonitorv2/flux_monitor_test.go: `.
Return(run, pipeline.TaskRunResults{
{
Result: pipeline.Result{
Value: decimal.NewFromInt(answer),
Error: nil,
},
Task: &pipeline.HTTPTask{},
},
}, nil)`
$DIR/core/services/fluxmonitorv2/flux_monitor_test.go: `.NewFromInt(answer)`
$DIR/core/services/fluxmonitorv2/flux_monitor_test.go: `.pipelineRunner.
On("InsertFinishedRun", mock.Anything, mock.Anything, mock.Anything, mock.Anything)`
$DIR/core/services/fluxmonitorv2/flux_monitor_test.go: `.
Return(nil)`
$DIR/core/services/fluxmonitorv2/flux_monitor_test.go: `.
Run(func(args mock.Arguments) {
args.Get(2).(*pipeline.Run).ID = 1
})`
$DIR/core/services/fluxmonitorv2/flux_monitor_test.go: `.Get(2)`
$DIR/core/services/fluxmonitorv2/flux_monitor_test.go: `.contractSubmitter.On("Submit", mock.Anything, big.NewInt(roundID), big.NewInt(answer), buildIdempotencyKey(run.ID))`
$DIR/core/services/fluxmonitorv2/flux_monitor_test.go: `.NewInt(roundID)`
$DIR/core/services/fluxmonitorv2/flux_monitor_test.go: `.NewInt(answer)`
$DIR/core/services/fluxmonitorv2/flux_monitor_test.go: `.Return(nil)`
$DIR/core/services/fluxmonitorv2/flux_monitor_test.go: `.Once()`
$DIR/core/services/fluxmonitorv2/flux_monitor_test.go: `.orm.
On("UpdateFluxMonitorRoundStats",
mock.Anything,
contractAddress,
uint32(roundID),
int64(1),
uint(0),
)`
$DIR/core/services/fluxmonitorv2/flux_monitor_test.go: `.
Return(nil)`
$DIR/core/services/fluxmonitorv2/flux_monitor_test.go: `.
Once()`
$DIR/core/services/fluxmonitorv2/flux_monitor_test.go: `.fluxAggregator.On("GetOracles", nilOpts)`
$DIR/core/services/fluxmonitorv2/flux_monitor_test.go: `.Return(oracles, nil)`
$DIR/core/services/fluxmonitorv2/flux_monitor_test.go: `.ExportedPollIfEligible(0, 0)`
$DIR/core/services/fluxmonitorv2/flux_monitor_test.go: `.orm.On("MostRecentFluxMonitorRoundID", mock.Anything, contractAddress)`
$DIR/core/services/fluxmonitorv2/flux_monitor_test.go: `.Return(uint32(roundID), nil)`
$DIR/core/services/fluxmonitorv2/flux_monitor_test.go: `.orm.
On("FindOrCreateFluxMonitorRoundStats", mock.Anything, contractAddress, uint32(olderRoundID), mock.Anything)`
$DIR/core/services/fluxmonitorv2/flux_monitor_test.go: `.
Return(fluxmonitorv2.FluxMonitorRoundStatsV2{
PipelineRunID: corenull.NewInt64(int64(1), true),
Aggregator: contractAddress,
RoundID: olderRoundID,
NumSubmissions: 1,
}, nil)`
$DIR/core/services/fluxmonitorv2/flux_monitor_test.go: `.NewInt64(int64(1), true)`
$DIR/core/services/fluxmonitorv2/flux_monitor_test.go: `.Once()`
$DIR/core/services/fluxmonitorv2/flux_monitor_test.go: `.pipelineORM.On("FindRun", mock.Anything, int64(1))`
$DIR/core/services/fluxmonitorv2/flux_monitor_test.go: `.Return(pipeline.Run{}, nil)`
$DIR/core/services/fluxmonitorv2/flux_monitor_test.go: `.logBroadcaster.On("MarkConsumed", mock.Anything, mock.Anything, mock.Anything)`
$DIR/core/services/fluxmonitorv2/flux_monitor_test.go: `.Return(nil)`
$DIR/core/services/fluxmonitorv2/flux_monitor_test.go: `.ExportedRespondToNewRoundLog(&flux_aggregator_wrapper.FluxAggregatorNewRound{
RoundId: big.NewInt(olderRoundID),
StartedAt: big.NewInt(0),
}, log.NewLogBroadcast(types.Log{}, cltest.FixtureChainID, nil))`
$DIR/core/services/fluxmonitorv2/flux_monitor_test.go: `.NewInt(olderRoundID)`
$DIR/core/services/fluxmonitorv2/flux_monitor_test.go: `.NewInt(0)`
$DIR/core/services/fluxmonitorv2/flux_monitor_test.go: `.NewLogBroadcast(types.Log{}, cltest.FixtureChainID, nil)`
$DIR/core/services/fluxmonitorv2/flux_monitor_test.go: `.orm.On("MostRecentFluxMonitorRoundID", mock.Anything, contractAddress)`
$DIR/core/services/fluxmonitorv2/flux_monitor_test.go: `.Return(uint32(roundID), nil)`
$DIR/core/services/fluxmonitorv2/flux_monitor_test.go: `.orm.
On("FindOrCreateFluxMonitorRoundStats", mock.Anything, contractAddress, uint32(olderRoundID), uint(1))`
$DIR/core/services/fluxmonitorv2/flux_monitor_test.go: `.
Return(fluxmonitorv2.FluxMonitorRoundStatsV2{
PipelineRunID: corenull.NewInt64(int64(1), true),
Aggregator: contractAddress,
RoundID: olderRoundID,
NumSubmissions: 1,
NumNewRoundLogs: 1,
}, nil)`
$DIR/core/services/fluxmonitorv2/flux_monitor_test.go: `.NewInt64(int64(1), true)`
$DIR/core/services/fluxmonitorv2/flux_monitor_test.go: `.Once()`
$DIR/core/services/fluxmonitorv2/flux_monitor_test.go: `.pipelineORM.On("FindRun", mock.Anything, int64(1))`
$DIR/core/services/fluxmonitorv2/flux_monitor_test.go: `.Return(pipeline.Run{}, nil)`
$DIR/core/services/fluxmonitorv2/flux_monitor_test.go: `.orm.On("DeleteFluxMonitorRoundsBackThrough", mock.Anything, contractAddress, uint32(olderRoundID))`
$DIR/core/services/fluxmonitorv2/flux_monitor_test.go: `.Return(nil)`
$DIR/core/services/fluxmonitorv2/flux_monitor_test.go: `.orm.
On("FindOrCreateFluxMonitorRoundStats", mock.Anything, contractAddress, uint32(olderRoundID), uint(1))`
$DIR/core/services/fluxmonitorv2/flux_monitor_test.go: `.
Return(fluxmonitorv2.FluxMonitorRoundStatsV2{
PipelineRunID: corenull.NewInt64(int64(1), true),
Aggregator: contractAddress,
RoundID: olderRoundID,
NumSubmissions: 0,
NumNewRoundLogs: 1,
}, nil)`
$DIR/core/services/fluxmonitorv2/flux_monitor_test.go: `.NewInt64(int64(1), true)`
$DIR/core/services/fluxmonitorv2/flux_monitor_test.go: `.Once()`
$DIR/core/services/fluxmonitorv2/flux_monitor_test.go: `.fluxAggregator.On("OracleRoundState", nilOpts, nodeAddr, uint32(olderRoundID))`
$DIR/core/services/fluxmonitorv2/flux_monitor_test.go: `.
Return(flux_aggregator_wrapper.OracleRoundState{
RoundId: olderRoundID,
LatestSubmission: big.NewInt(answer),
EligibleToSubmit: true,
AvailableFunds: availableFunds,
PaymentAmount: paymentAmount,
OracleCount: 1,
}, nil)`
$DIR/core/services/fluxmonitorv2/flux_monitor_test.go: `.NewInt(answer)`
$DIR/core/services/fluxmonitorv2/flux_monitor_test.go: `.
Once()`
$DIR/core/services/fluxmonitorv2/flux_monitor_test.go: `.contractSubmitter.On("Submit", mock.Anything, big.NewInt(olderRoundID), big.NewInt(answer), buildIdempotencyKey(run.ID))`
$DIR/core/services/fluxmonitorv2/flux_monitor_test.go: `.NewInt(olderRoundID)`
$DIR/core/services/fluxmonitorv2/flux_monitor_test.go: `.NewInt(answer)`
$DIR/core/services/fluxmonitorv2/flux_monitor_test.go: `.Return(nil)`
$DIR/core/services/fluxmonitorv2/flux_monitor_test.go: `.Once()`
$DIR/core/services/fluxmonitorv2/flux_monitor_test.go: `.orm.
On("UpdateFluxMonitorRoundStats",
mock.Anything,
contractAddress,
uint32(olderRoundID),
int64(1),
uint(1),
)`
$DIR/core/services/fluxmonitorv2/flux_monitor_test.go: `.
Return(nil)`
$DIR/core/services/fluxmonitorv2/flux_monitor_test.go: `.
Once()`
$DIR/core/services/fluxmonitorv2/flux_monitor_test.go: `.logBroadcaster.On("MarkConsumed", mock.Anything, mock.Anything, mock.Anything)`
$DIR/core/services/fluxmonitorv2/flux_monitor_test.go: `.Return(nil)`
$DIR/core/services/fluxmonitorv2/flux_monitor_test.go: `.ExportedRespondToNewRoundLog(&flux_aggregator_wrapper.FluxAggregatorNewRound{
RoundId: big.NewInt(olderRoundID),
StartedAt: big.NewInt(0),
}, log.NewLogBroadcast(types.Log{}, cltest.FixtureChainID, nil))`
$DIR/core/services/fluxmonitorv2/flux_monitor_test.go: `.NewInt(olderRoundID)`
$DIR/core/services/fluxmonitorv2/flux_monitor_test.go: `.NewInt(0)`
$DIR/core/services/fluxmonitorv2/flux_monitor_test.go: `.NewLogBroadcast(types.Log{}, cltest.FixtureChainID, nil)`
$DIR/core/services/fluxmonitorv2/flux_monitor_test.go: `.NewAddress()`
$DIR/core/services/fluxmonitorv2/flux_monitor_test.go: `.keyStore.On("EnabledKeysForChain", mock.Anything, testutils.FixtureChainID)`
$DIR/core/services/fluxmonitorv2/flux_monitor_test.go: `.Return([]ethkey.KeyV2{{Address: nodeAddr}}, nil)`
$DIR/core/services/fluxmonitorv2/flux_monitor_test.go: `.orm.On("WithDataSource", mock.Anything)`
$DIR/core/services/fluxmonitorv2/flux_monitor_test.go: `.Return(fluxmonitorv2.ORM(tm.orm))`
$DIR/core/services/fluxmonitorv2/flux_monitor_test.go: `.ORM(tm.orm)`
$DIR/core/services/fluxmonitorv2/flux_monitor_test.go: `.NewInt(fetchedAnswer)`
$DIR/core/services/fluxmonitorv2/flux_monitor_test.go: `.fluxAggregator.On("Address")`
$DIR/core/services/fluxmonitorv2/flux_monitor_test.go: `.Return(common.Address{})`
$DIR/core/services/fluxmonitorv2/flux_monitor_test.go: `.fluxAggregator.On("GetOracles", nilOpts)`
$DIR/core/services/fluxmonitorv2/flux_monitor_test.go: `.Return(oracles, nil)`
$DIR/core/services/fluxmonitorv2/flux_monitor_test.go: `.logBroadcaster.On("Register", mock.Anything, mock.Anything)`
$DIR/core/services/fluxmonitorv2/flux_monitor_test.go: `.Return(func() {})`
$DIR/core/services/fluxmonitorv2/flux_monitor_test.go: `.logBroadcaster.On("IsConnected")`
$DIR/core/services/fluxmonitorv2/flux_monitor_test.go: `.Return(true)`
$DIR/core/services/fluxmonitorv2/flux_monitor_test.go: `.Maybe()`
$DIR/core/services/fluxmonitorv2/flux_monitor_test.go: `.fluxAggregator.On("LatestRoundData", nilOpts)`
$DIR/core/services/fluxmonitorv2/flux_monitor_test.go: `.Return(freshContractRoundDataResponse())`
$DIR/core/services/fluxmonitorv2/flux_monitor_test.go: `.Once()`
$DIR/core/services/fluxmonitorv2/flux_monitor_test.go: `.NewInt(1)`
$DIR/core/services/fluxmonitorv2/flux_monitor_test.go: `.Mul(big.NewInt(10000), defaultMinimumContractPayment.ToInt())`
$DIR/core/services/fluxmonitorv2/flux_monitor_test.go: `.NewInt(10000)`
$DIR/core/services/fluxmonitorv2/flux_monitor_test.go: `.ToInt()`
$DIR/core/services/fluxmonitorv2/flux_monitor_test.go: `.ToInt()`
$DIR/core/services/fluxmonitorv2/flux_monitor_test.go: `.fluxAggregator.On("OracleRoundState", nilOpts, nodeAddr, uint32(0))`
$DIR/core/services/fluxmonitorv2/flux_monitor_test.go: `.
Return(roundState, nil)`
$DIR/core/services/fluxmonitorv2/flux_monitor_test.go: `.
Once()`
$DIR/core/services/fluxmonitorv2/flux_monitor_test.go: `.fluxAggregator.On("OracleRoundState", nilOpts, nodeAddr, roundID)`
$DIR/core/services/fluxmonitorv2/flux_monitor_test.go: `.
Return(roundState, nil)`
$DIR/core/services/fluxmonitorv2/flux_monitor_test.go: `.
Once()`
$DIR/core/services/fluxmonitorv2/flux_monitor_test.go: `.orm.On("FindOrCreateFluxMonitorRoundStats", mock.Anything, contractAddress, roundID, mock.Anything)`
$DIR/core/services/fluxmonitorv2/flux_monitor_test.go: `.
Return(fluxmonitorv2.FluxMonitorRoundStatsV2{Aggregator: contractAddress, RoundID: roundID}, nil)`
$DIR/core/services/fluxmonitorv2/flux_monitor_test.go: `.
Once()`
$DIR/core/services/fluxmonitorv2/flux_monitor_test.go: `.fluxAggregator.On("LatestRoundData", nilOpts)`
$DIR/core/services/fluxmonitorv2/flux_monitor_test.go: `.
Return(flux_aggregator_wrapper.LatestRoundData{
Answer: answerBigInt,
UpdatedAt: big.NewInt(100),
}, nil)`
$DIR/core/services/fluxmonitorv2/flux_monitor_test.go: `.NewInt(100)`
$DIR/core/services/fluxmonitorv2/flux_monitor_test.go: `.
Once()`
$DIR/core/services/fluxmonitorv2/flux_monitor_test.go: `.pipelineRunner.
On("ExecuteRun", mock.Anything, pipelineSpec, pipeline.NewVarsFrom(
map[string]interface{}{
"jobRun": map[string]interface{}{
"meta": map[string]interface{}{
"latestAnswer": float64(fetchedAnswer),
"updatedAt": float64(100),
},
},
"jobSpec": map[string]interface{}{
"databaseID": int32(0),
"externalJobID": uuid.UUID{},
"name": "",
"evmChainID": testutils.FixtureChainID.String(),
},
},
), mock.Anything)`
$DIR/core/services/fluxmonitorv2/flux_monitor_test.go: `.NewVarsFrom(
map[string]interface{}{
"jobRun": map[string]interface{}{
"meta": map[string]interface{}{
"latestAnswer": float64(fetchedAnswer),
"updatedAt": float64(100),
},
},
"jobSpec": map[string]interface{}{
"databaseID": int32(0),
"externalJobID": uuid.UUID{},
"name": "",
"evmChainID": testutils.FixtureChainID.String(),
},
},
)`
$DIR/core/services/fluxmonitorv2/flux_monitor_test.go: `.FixtureChainID.String()`
$DIR/core/services/fluxmonitorv2/flux_monitor_test.go: `.
Return(&pipeline.Run{ID: runID}, pipeline.TaskRunResults{
{
Result: pipeline.Result{
Value: decimal.NewFromInt(fetchedAnswer),
Error: nil,
},
Task: &pipeline.HTTPTask{},
},
}, nil)`
$DIR/core/services/fluxmonitorv2/flux_monitor_test.go: `.NewFromInt(fetchedAnswer)`
$DIR/core/services/fluxmonitorv2/flux_monitor_test.go: `.
Once()`
$DIR/core/services/fluxmonitorv2/flux_monitor_test.go: `.pipelineRunner.On("InsertFinishedRun", mock.Anything, mock.Anything, mock.Anything, mock.Anything)`
$DIR/core/services/fluxmonitorv2/flux_monitor_test.go: `.
Return(nil)`
$DIR/core/services/fluxmonitorv2/flux_monitor_test.go: `.
Run(func(args mock.Arguments) {
args.Get(2).(*pipeline.Run).ID = runID
})`
$DIR/core/services/fluxmonitorv2/flux_monitor_test.go: `.Get(2)`
$DIR/core/services/fluxmonitorv2/flux_monitor_test.go: `.
Once()`
$DIR/core/services/fluxmonitorv2/flux_monitor_test.go: `.contractSubmitter.
On("Submit", mock.Anything, big.NewInt(int64(roundID)), answerBigInt, buildIdempotencyKey(runID))`
$DIR/core/services/fluxmonitorv2/flux_monitor_test.go: `.NewInt(int64(roundID))`
$DIR/core/services/fluxmonitorv2/flux_monitor_test.go: `.
Return(nil)`
$DIR/core/services/fluxmonitorv2/flux_monitor_test.go: `.
Once()`
$DIR/core/services/fluxmonitorv2/flux_monitor_test.go: `.orm.
On("UpdateFluxMonitorRoundStats", mock.Anything, contractAddress, roundID, runID, mock.Anything)`
$DIR/core/services/fluxmonitorv2/flux_monitor_test.go: `.
Return(nil)`
$DIR/core/services/fluxmonitorv2/flux_monitor_test.go: `.
Once()`
$DIR/core/services/fluxmonitorv2/flux_monitor_test.go: `.fluxAggregator.
On("OracleRoundState", nilOpts, nodeAddr, uint32(0))`
$DIR/core/services/fluxmonitorv2/flux_monitor_test.go: `.
Return(flux_aggregator_wrapper.OracleRoundState{RoundId: 4, EligibleToSubmit: false, LatestSubmission: answerBigInt, StartedAt: now()}, nil)`
$DIR/core/services/fluxmonitorv2/flux_monitor_test.go: `.
Maybe()`
$DIR/core/services/fluxmonitorv2/flux_monitor_test.go: `.Run(t, fm)`
$DIR/core/services/fluxmonitorv2/flux_monitor_test.go: `.EventuallyExpectationsMet(t, tm.logBroadcaster, waitTime, interval)`
$DIR/core/services/fluxmonitorv2/flux_monitor_test.go: `.EventuallyExpectationsMet(t, tm.fluxAggregator, waitTime, interval)`
$DIR/core/services/fluxmonitorv2/flux_monitor_test.go: `.EventuallyExpectationsMet(t, tm.orm, waitTime, interval)`
$DIR/core/services/fluxmonitorv2/flux_monitor_test.go: `.EventuallyExpectationsMet(t, tm.pipelineORM, waitTime, interval)`
$DIR/core/services/fluxmonitorv2/integrations_test.go: `t.Run(test.name, func(t *testing.T) {
t.Parallel()
g := gomega.NewWithT(t)
fa := setupFluxAggregatorUniverse(t)
// - add oracles
oracleList := []common.Address{fa.nallory.From}
_, err := fa.aggregatorContract.ChangeOracles(fa.sergey, emptyList, oracleList, oracleList, 1, 1, 0)
assert.NoError(t, err, "failed to add oracles to aggregator")
fa.backend.Commit()
checkOraclesAdded(t, fa, oracleList)
// Set up chainlink app
app := startApplication(t, fa, func(c *chainlink.Config, s *chainlink.Secrets) {
c.JobPipeline.HTTPRequest.DefaultTimeout = commonconfig.MustNewDuration(100 * time.Millisecond)
c.Database.Listener.FallbackPollInterval = commonconfig.MustNewDuration(1 * time.Second)
c.EVM[0].GasEstimator.EIP1559DynamicFees = &test.eip1559
})
type v struct {
count int
updatedAt int64
}
expectedMeta := map[string]v{}
var expMetaMu sync.Mutex
var reportPrice atomic.Int64
reportPrice.Store(100)
mockServer := cltest.NewHTTPMockServerWithAlterableResponseAndRequest(t,
generatePriceResponseFn(reportPrice.Load),
func(r *http.Request) {
b, err1 := io.ReadAll(r.Body)
require.NoError(t, err1)
var m bridges.BridgeMetaDataJSON
require.NoError(t, json.Unmarshal(b, &m))
if m.Meta.LatestAnswer != nil && m.Meta.UpdatedAt != nil {
k := m.Meta.LatestAnswer.String()
expMetaMu.Lock()
curr := expectedMeta[k]
assert.True(t, m.Meta.UpdatedAt.IsInt64()) // sanity check unix ts
expectedMeta[k] = v{curr.count + 1, m.Meta.UpdatedAt.Int64()}
expMetaMu.Unlock()
}
},
)
t.Cleanup(mockServer.Close)
u, _ := url.Parse(mockServer.URL)
require.NoError(t, app.BridgeORM().CreateBridgeType(testutils.Context(t), &bridges.BridgeType{
Name: "bridge",
URL: models.WebURL(*u),
}))
// When event appears on submissionReceived, flux monitor job run is complete
submissionReceived := fa.WatchSubmissionReceived(t,
[]common.Address{fa.nallory.From},
)
// Create the job
s := `
type = "fluxmonitor"
schemaVersion = 1
name = "integration test"
contractAddress = "%s"
threshold = 2.0
absoluteThreshold = 0.0
evmChainID = 1337
idleTimerPeriod = "10s"
idleTimerDisabled = false
pollTimerPeriod = "%s"
pollTimerDisabled = false
observationSource = """
ds1 [type=bridge name=bridge];
ds1_parse [type=jsonparse path="data,result"];
ds1 -> ds1_parse
"""
`
s = fmt.Sprintf(s, fa.aggregatorContractAddress, 2*time.Second)
requestBody, err := json.Marshal(web.CreateJobRequest{
TOML: s,
})
assert.NoError(t, err)
initialBalance := currentBalance(t, &fa).Int64()
jobResponse := cltest.CreateJobViaWeb2(t, app, string(requestBody))
i, err := strconv.ParseInt(jobResponse.ID, 10, 32)
require.NoError(t, err)
jobID := int32(i)
// Waiting for flux monitor to finish Register process in log broadcaster
// and then to have log broadcaster backfill logs after the debounceResubscribe period of ~ 1 sec
g.Eventually(func() uint32 {
lb := evmtest.MustGetDefaultChain(t, app.GetRelayers().LegacyEVMChains()).LogBroadcaster()
return lb.(log.BroadcasterInTest).TrackedAddressesCount()
}, testutils.WaitTimeout(t), 200*time.Millisecond).Should(gomega.BeNumerically(">=", 1))
// Initial Poll
receiptBlock, answer := awaitSubmission(t, fa.backend, submissionReceived)
lggr := logger.TestLogger(t)
lggr.Infof("Detected submission: %v in block %v", answer, receiptBlock)
assert.Equal(t, reportPrice.Load(), answer,
"failed to report correct price to contract")
checkSubmission(t,
answerParams{
fa: &fa,
roundId: 1,
answer: int64(100),
from: fa.nallory,
isNewRound: true,
completesAnswer: true,
},
initialBalance,
receiptBlock,
)
assertPipelineRunCreated(t, app.GetDB(), 1, int64(100))
// Need to wait until NewRound log is consumed - otherwise there is a chance
// it will arrive after the next answer is submitted, and cause
// DeleteFluxMonitorRoundsBackThrough to delete previous stats
checkLogWasConsumed(t, fa, app.GetDB(), jobID, receiptBlock)
lggr.Info("Updating price to 103")
// Change reported price to a value outside the deviation
reportPrice.Store(103)
receiptBlock, answer = awaitSubmission(t, fa.backend, submissionReceived)
lggr.Infof("Detected submission: %v in block %v", answer, receiptBlock)
assert.Equal(t, reportPrice.Load(), answer,
"failed to report correct price to contract")
checkSubmission(t,
answerParams{
fa: &fa,
roundId: 2,
answer: int64(103),
from: fa.nallory,
isNewRound: true,
completesAnswer: true,
},
initialBalance-fee,
receiptBlock,
)
assertPipelineRunCreated(t, app.GetDB(), 2, int64(103))
// Need to wait until NewRound log is consumed - otherwise there is a chance
// it will arrive after the next answer is submitted, and cause
// DeleteFluxMonitorRoundsBackThrough to delete previous stats
checkLogWasConsumed(t, fa, app.GetDB(), jobID, receiptBlock)
// Should not received a submission as it is inside the deviation
reportPrice.Store(104)
assertNoSubmission(t, submissionReceived, 2*time.Second, "Should not receive a submission")
expMetaMu.Lock()
defer expMetaMu.Unlock()
assert.Len(t, expectedMeta, 2, "expected metadata %v", expectedMeta)
assert.Greater(t, expectedMeta["100"].count, 0, "Stored answer metadata does not contain 100 but contains: %v", expectedMeta)
assert.Greater(t, expectedMeta["103"].count, 0, "Stored answer metadata does not contain 103 but contains: %v", expectedMeta)
assert.Greater(t, expectedMeta["103"].updatedAt, expectedMeta["100"].updatedAt)
})`
$DIR/core/services/fluxmonitorv2/integrations_test.go: `fa.backend.Commit()`
$DIR/core/services/fluxmonitorv2/integrations_test.go: `checkOraclesAdded(t, fa, oracleList)`
$DIR/core/services/fluxmonitorv2/integrations_test.go: `c.JobPipeline.HTTPRequest.DefaultTimeout = commonconfig.MustNewDuration(100 * time.Millisecond)`
$DIR/core/services/fluxmonitorv2/integrations_test.go: `c.Database.Listener.FallbackPollInterval = commonconfig.MustNewDuration(1 * time.Second)`
$DIR/core/services/fluxmonitorv2/integrations_test.go: `c.EVM[0].GasEstimator.EIP1559DynamicFees = &test.eip1559`
$DIR/core/services/fluxmonitorv2/integrations_test.go: `reportPrice.Store(100)`
$DIR/core/services/fluxmonitorv2/integrations_test.go: `expMetaMu.Lock()`
$DIR/core/services/fluxmonitorv2/integrations_test.go: `expectedMeta[k] = v{curr.count + 1, m.Meta.UpdatedAt.Int64()}`
$DIR/core/services/fluxmonitorv2/integrations_test.go: `expMetaMu.Unlock()`
$DIR/core/services/fluxmonitorv2/integrations_test.go: `t.Cleanup(mockServer.Close)`
$DIR/core/services/fluxmonitorv2/integrations_test.go: `s = fmt.Sprintf(s, fa.aggregatorContractAddress, 2*time.Second)`
$DIR/core/services/fluxmonitorv2/integrations_test.go: `g.Eventually(func() uint32 {
lb := evmtest.MustGetDefaultChain(t, app.GetRelayers().LegacyEVMChains()).LogBroadcaster()
return lb.(log.BroadcasterInTest).TrackedAddressesCount()
}, testutils.WaitTimeout(t), 200*time.Millisecond).Should(gomega.BeNumerically(">=", 1))`
$DIR/core/services/fluxmonitorv2/integrations_test.go: `lggr.Infof("Detected submission: %v in block %v", answer, receiptBlock)`
$DIR/core/services/fluxmonitorv2/integrations_test.go: `checkSubmission(t,
answerParams{
fa: &fa,
roundId: 1,
answer: int64(100),
from: fa.nallory,
isNewRound: true,
completesAnswer: true,
},
initialBalance,
receiptBlock,
)`
$DIR/core/services/fluxmonitorv2/integrations_test.go: `assertPipelineRunCreated(t, app.GetDB(), 1, int64(100))`
$DIR/core/services/fluxmonitorv2/integrations_test.go: `checkLogWasConsumed(t, fa, app.GetDB(), jobID, receiptBlock)`
$DIR/core/services/fluxmonitorv2/integrations_test.go: `lggr.Info("Updating price to 103")`
$DIR/core/services/fluxmonitorv2/integrations_test.go: `reportPrice.Store(103)`
$DIR/core/services/fluxmonitorv2/integrations_test.go: `receiptBlock, answer = awaitSubmission(t, fa.backend, submissionReceived)`
$DIR/core/services/fluxmonitorv2/integrations_test.go: `lggr.Infof("Detected submission: %v in block %v", answer, receiptBlock)`
$DIR/core/services/fluxmonitorv2/integrations_test.go: `checkSubmission(t,
answerParams{
fa: &fa,
roundId: 2,
answer: int64(103),
from: fa.nallory,
isNewRound: true,
completesAnswer: true,
},
initialBalance-fee,
receiptBlock,
)`
$DIR/core/services/fluxmonitorv2/integrations_test.go: `assertPipelineRunCreated(t, app.GetDB(), 2, int64(103))`
$DIR/core/services/fluxmonitorv2/integrations_test.go: `checkLogWasConsumed(t, fa, app.GetDB(), jobID, receiptBlock)`
$DIR/core/services/fluxmonitorv2/integrations_test.go: `reportPrice.Store(104)`
$DIR/core/services/fluxmonitorv2/integrations_test.go: `assertNoSubmission(t, submissionReceived, 2*time.Second, "Should not receive a submission")`
$DIR/core/services/fluxmonitorv2/integrations_test.go: `expMetaMu.Lock()`
$DIR/core/services/fluxmonitorv2/integrations_test.go: `fa.backend.Commit()`
$DIR/core/services/fluxmonitorv2/integrations_test.go: `checkOraclesAdded(t, fa, oracleList)`
$DIR/core/services/fluxmonitorv2/integrations_test.go: `c.JobPipeline.HTTPRequest.DefaultTimeout = commonconfig.MustNewDuration(100 * time.Millisecond)`
$DIR/core/services/fluxmonitorv2/integrations_test.go: `c.Database.Listener.FallbackPollInterval = commonconfig.MustNewDuration(1 * time.Second)`
$DIR/core/services/fluxmonitorv2/integrations_test.go: `c.EVM[0].FlagsContractAddress = &flags`
$DIR/core/services/fluxmonitorv2/integrations_test.go: `reportPrice.Store(1)`
$DIR/core/services/fluxmonitorv2/integrations_test.go: `t.Cleanup(mockServer.Close)`
$DIR/core/services/fluxmonitorv2/integrations_test.go: `s = fmt.Sprintf(s, fa.aggregatorContractAddress, testutils.SimulatedChainID.String(), pollTimerPeriod, mockServer.URL)`
$DIR/core/services/fluxmonitorv2/integrations_test.go: `_, err = fa.flagsContract.RaiseFlag(fa.sergey, evmutils.ZeroAddress)`
$DIR/core/services/fluxmonitorv2/integrations_test.go: `_, err = fa.flagsContract.RaiseFlag(fa.sergey, fa.aggregatorContractAddress)`
$DIR/core/services/fluxmonitorv2/integrations_test.go: `fa.backend.Commit()`
$DIR/core/services/fluxmonitorv2/integrations_test.go: `cltest.CreateJobViaWeb2(t, app, string(requestBody))`
$DIR/core/services/fluxmonitorv2/integrations_test.go: `g.Eventually(func() uint32 {
lb := evmtest.MustGetDefaultChain(t, app.GetRelayers().LegacyEVMChains()).LogBroadcaster()
return lb.(log.BroadcasterInTest).TrackedAddressesCount()
}, testutils.WaitTimeout(t), 200*time.Millisecond).Should(gomega.BeNumerically(">=", 2))`
$DIR/core/services/fluxmonitorv2/integrations_test.go: `submitAnswer(t, answerParams{
fa: &fa,
roundId: 1,
answer: 2,
from: fa.neil,
isNewRound: true,
completesAnswer: false,
})`
$DIR/core/services/fluxmonitorv2/integrations_test.go: `fa.backend.Commit()`
$DIR/core/services/fluxmonitorv2/integrations_test.go: `fa.backend.Commit()`
$DIR/core/services/fluxmonitorv2/integrations_test.go: `checkOraclesAdded(t, fa, oracleList)`
$DIR/core/services/fluxmonitorv2/integrations_test.go: `c.JobPipeline.HTTPRequest.DefaultTimeout = commonconfig.MustNewDuration(100 * time.Millisecond)`
$DIR/core/services/fluxmonitorv2/integrations_test.go: `c.Database.Listener.FallbackPollInterval = commonconfig.MustNewDuration(1 * time.Second)`
$DIR/core/services/fluxmonitorv2/integrations_test.go: `c.EVM[0].FlagsContractAddress = &flags`
$DIR/core/services/fluxmonitorv2/integrations_test.go: `reportPrice.Store(1)`
$DIR/core/services/fluxmonitorv2/integrations_test.go: `t.Cleanup(mockServer.Close)`
$DIR/core/services/fluxmonitorv2/integrations_test.go: `s = fmt.Sprintf(s, fa.aggregatorContractAddress, testutils.SimulatedChainID.String(), "1000ms", mockServer.URL)`
$DIR/core/services/fluxmonitorv2/integrations_test.go: `_, err = fa.flagsContract.RaiseFlag(fa.sergey, evmutils.ZeroAddress)`
$DIR/core/services/fluxmonitorv2/integrations_test.go: `_, err = fa.flagsContract.RaiseFlag(fa.sergey, fa.aggregatorContractAddress)`
$DIR/core/services/fluxmonitorv2/integrations_test.go: `fa.backend.Commit()`
$DIR/core/services/fluxmonitorv2/integrations_test.go: `cltest.AssertPipelineRunsStays(t, j.PipelineSpec.ID, app.GetDB(), 0)`
$DIR/core/services/fluxmonitorv2/integrations_test.go: `_, err = fa.flagsContract.LowerFlags(fa.sergey, []common.Address{evmutils.ZeroAddress})`
$DIR/core/services/fluxmonitorv2/integrations_test.go: `fa.backend.Commit()`
$DIR/core/services/fluxmonitorv2/integrations_test.go: `awaitSubmission(t, fa.backend, submissionReceived)`
$DIR/core/services/fluxmonitorv2/integrations_test.go: `reportPrice.Store(2)`
$DIR/core/services/fluxmonitorv2/integrations_test.go: `awaitSubmission(t, fa.backend, submissionReceived)`
$DIR/core/services/fluxmonitorv2/integrations_test.go: `_, err = fa.flagsContract.LowerFlags(fa.sergey, []common.Address{fa.aggregatorContractAddress})`
$DIR/core/services/fluxmonitorv2/integrations_test.go: `fa.backend.Commit()`
$DIR/core/services/fluxmonitorv2/integrations_test.go: `assertNoSubmission(t, submissionReceived, 5*pollTimerPeriod, "should not trigger a new run because FM is already hibernating")`
$DIR/core/services/fluxmonitorv2/integrations_test.go: `reportPrice.Store(4)`
$DIR/core/services/fluxmonitorv2/integrations_test.go: `awaitSubmission(t, fa.backend, submissionReceived)`
$DIR/core/services/fluxmonitorv2/integrations_test.go: `_, err = fa.flagsContract.RaiseFlag(fa.sergey, fa.aggregatorContractAddress)`
$DIR/core/services/fluxmonitorv2/integrations_test.go: `_, err = fa.flagsContract.RaiseFlag(fa.sergey, evmutils.ZeroAddress)`
$DIR/core/services/fluxmonitorv2/integrations_test.go: `fa.backend.Commit()`
$DIR/core/services/fluxmonitorv2/integrations_test.go: `g.Eventually(func() int {
ilogs, err := fa.flagsContract.FilterFlagRaised(nil, []common.Address{})
require.NoError(t, err)
logs := cltest.GetLogs(t, nil, ilogs)
return len(logs)
}, testutils.WaitTimeout(t), 100*time.Millisecond).Should(gomega.Equal(4))`
$DIR/core/services/fluxmonitorv2/integrations_test.go: `reportPrice.Store(8)`
$DIR/core/services/fluxmonitorv2/integrations_test.go: `fa.backend.Commit()`
$DIR/core/services/fluxmonitorv2/integrations_test.go: `c.JobPipeline.HTTPRequest.DefaultTimeout = commonconfig.MustNewDuration(100 * time.Millisecond)`
$DIR/core/services/fluxmonitorv2/integrations_test.go: `c.Database.Listener.FallbackPollInterval = commonconfig.MustNewDuration(1 * time.Second)`
$DIR/core/services/fluxmonitorv2/integrations_test.go: `reportPrice.Store(10001)`
$DIR/core/services/fluxmonitorv2/integrations_test.go: `t.Cleanup(mockServer.Close)`
$DIR/core/services/fluxmonitorv2/integrations_test.go: `_, err = fa.flagsContract.RaiseFlag(fa.sergey, evmutils.ZeroAddress)`
$DIR/core/services/fluxmonitorv2/integrations_test.go: `_, err = fa.flagsContract.RaiseFlag(fa.sergey, fa.aggregatorContractAddress)`
$DIR/core/services/fluxmonitorv2/integrations_test.go: `fa.backend.Commit()`
$DIR/core/services/fluxmonitorv2/integrations_test.go: `fa.backend.Commit()`
$DIR/core/services/fluxmonitorv2/integrations_test.go: `checkOraclesAdded(t, fa, oracleList)`
$DIR/core/services/fluxmonitorv2/integrations_test.go: `c.JobPipeline.HTTPRequest.DefaultTimeout = commonconfig.MustNewDuration(100 * time.Millisecond)`
$DIR/core/services/fluxmonitorv2/integrations_test.go: `c.Database.Listener.FallbackPollInterval = commonconfig.MustNewDuration(1 * time.Second)`
$DIR/core/services/fluxmonitorv2/integrations_test.go: `submitAnswer(t, answerParams{
fa: &fa,
roundId: roundId,
answer: processedAnswer,
from: fa.neil,
isNewRound: true,
completesAnswer: false,
})`
$DIR/core/services/fluxmonitorv2/integrations_test.go: `reportPrice.Store(answer)`
$DIR/core/services/fluxmonitorv2/integrations_test.go: `t.Cleanup(mockServer.Close)`
$DIR/core/services/fluxmonitorv2/integrations_test.go: `s = fmt.Sprintf(s, fa.aggregatorContractAddress, testutils.SimulatedChainID.String(), "200ms", mockServer.URL)`
$DIR/core/services/fluxmonitorv2/integrations_test.go: `cltest.CreateJobViaWeb2(t, app, string(requestBody))`
$DIR/core/services/fluxmonitorv2/integrations_test.go: `checkSubmission(t,
answerParams{
fa: &fa,
roundId: roundId,
answer: processedAnswer,
from: fa.nallory,
isNewRound: false,
completesAnswer: true},
initialBalance,
receiptBlock,
)`
$DIR/core/services/fluxmonitorv2/integrations_test.go: `reportPrice.Store(answer + 1)`
$DIR/core/services/fluxmonitorv2/integrations_test.go: `receiptBlock, _ = awaitSubmission(t, fa.backend, submissionReceived)`
$DIR/core/services/fluxmonitorv2/integrations_test.go: `processedAnswer = 100 * reportPrice.Load()`
$DIR/core/services/fluxmonitorv2/integrations_test.go: `checkSubmission(t,
answerParams{
fa: &fa,
roundId: newRound,
answer: processedAnswer,
from: fa.nallory,
isNewRound: true,
completesAnswer: false},
nextRoundBalance,
receiptBlock,
)`
$DIR/core/services/fluxmonitorv2/integrations_test.go: `submitAnswer(t,
answerParams{
fa: &fa,
roundId: newRound,
answer: processedAnswer,
from: fa.neil,
isNewRound: false,
completesAnswer: true},
)`
$DIR/core/services/fluxmonitorv2/integrations_test.go: `newRound = newRound + 1`
$DIR/core/services/fluxmonitorv2/integrations_test.go: `processedAnswer = 100 * reportPrice.Load()`
$DIR/core/services/fluxmonitorv2/integrations_test.go: `submitMaliciousAnswer(t,
answerParams{
fa: &fa,
roundId: newRound,
answer: processedAnswer,
from: fa.nallory,
isNewRound: true,
completesAnswer: false},
)`
$DIR/core/services/fluxmonitorv2/integrations_test.go: `assertNoSubmission(t, submissionReceived, 5*pollTimerPeriod, "FA allowed chainlink node to start a new round early")`
$DIR/core/services/fluxmonitorv2/integrations_test.go: `_, err = fa.aggregatorContract.RequestNewRound(fa.nallory)`
$DIR/core/services/fluxmonitorv2/integrations_test.go: `submitAnswer(t, answerParams{fa: &fa, roundId: newRound,
answer: processedAnswer, from: fa.ned, isNewRound: true,
completesAnswer: false})`
$DIR/core/services/fluxmonitorv2/integrations_test.go: `submitAnswer(t, answerParams{fa: &fa, roundId: newRound,
answer: processedAnswer, from: fa.neil, isNewRound: false,
completesAnswer: true})`
$DIR/core/services/fluxmonitorv2/integrations_test.go: `reportPrice.Add(3)`
$DIR/core/services/fluxmonitorv2/integrations_test.go: `.Run(test.name, func(t *testing.T) {
t.Parallel()
g := gomega.NewWithT(t)
fa := setupFluxAggregatorUniverse(t)
// - add oracles
oracleList := []common.Address{fa.nallory.From}
_, err := fa.aggregatorContract.ChangeOracles(fa.sergey, emptyList, oracleList, oracleList, 1, 1, 0)
assert.NoError(t, err, "failed to add oracles to aggregator")
fa.backend.Commit()
checkOraclesAdded(t, fa, oracleList)
// Set up chainlink app
app := startApplication(t, fa, func(c *chainlink.Config, s *chainlink.Secrets) {
c.JobPipeline.HTTPRequest.DefaultTimeout = commonconfig.MustNewDuration(100 * time.Millisecond)
c.Database.Listener.FallbackPollInterval = commonconfig.MustNewDuration(1 * time.Second)
c.EVM[0].GasEstimator.EIP1559DynamicFees = &test.eip1559
})
type v struct {
count int
updatedAt int64
}
expectedMeta := map[string]v{}
var expMetaMu sync.Mutex
var reportPrice atomic.Int64
reportPrice.Store(100)
mockServer := cltest.NewHTTPMockServerWithAlterableResponseAndRequest(t,
generatePriceResponseFn(reportPrice.Load),
func(r *http.Request) {
b, err1 := io.ReadAll(r.Body)
require.NoError(t, err1)
var m bridges.BridgeMetaDataJSON
require.NoError(t, json.Unmarshal(b, &m))
if m.Meta.LatestAnswer != nil && m.Meta.UpdatedAt != nil {
k := m.Meta.LatestAnswer.String()
expMetaMu.Lock()
curr := expectedMeta[k]
assert.True(t, m.Meta.UpdatedAt.IsInt64()) // sanity check unix ts
expectedMeta[k] = v{curr.count + 1, m.Meta.UpdatedAt.Int64()}
expMetaMu.Unlock()
}
},
)
t.Cleanup(mockServer.Close)
u, _ := url.Parse(mockServer.URL)
require.NoError(t, app.BridgeORM().CreateBridgeType(testutils.Context(t), &bridges.BridgeType{
Name: "bridge",
URL: models.WebURL(*u),
}))
// When event appears on submissionReceived, flux monitor job run is complete
submissionReceived := fa.WatchSubmissionReceived(t,
[]common.Address{fa.nallory.From},
)
// Create the job
s := `
type = "fluxmonitor"
schemaVersion = 1
name = "integration test"
contractAddress = "%s"
threshold = 2.0
absoluteThreshold = 0.0
evmChainID = 1337
idleTimerPeriod = "10s"
idleTimerDisabled = false
pollTimerPeriod = "%s"
pollTimerDisabled = false
observationSource = """
ds1 [type=bridge name=bridge];
ds1_parse [type=jsonparse path="data,result"];
ds1 -> ds1_parse
"""
`
s = fmt.Sprintf(s, fa.aggregatorContractAddress, 2*time.Second)
requestBody, err := json.Marshal(web.CreateJobRequest{
TOML: s,
})
assert.NoError(t, err)
initialBalance := currentBalance(t, &fa).Int64()
jobResponse := cltest.CreateJobViaWeb2(t, app, string(requestBody))
i, err := strconv.ParseInt(jobResponse.ID, 10, 32)
require.NoError(t, err)
jobID := int32(i)
// Waiting for flux monitor to finish Register process in log broadcaster
// and then to have log broadcaster backfill logs after the debounceResubscribe period of ~ 1 sec
g.Eventually(func() uint32 {
lb := evmtest.MustGetDefaultChain(t, app.GetRelayers().LegacyEVMChains()).LogBroadcaster()
return lb.(log.BroadcasterInTest).TrackedAddressesCount()
}, testutils.WaitTimeout(t), 200*time.Millisecond).Should(gomega.BeNumerically(">=", 1))
// Initial Poll
receiptBlock, answer := awaitSubmission(t, fa.backend, submissionReceived)
lggr := logger.TestLogger(t)
lggr.Infof("Detected submission: %v in block %v", answer, receiptBlock)
assert.Equal(t, reportPrice.Load(), answer,
"failed to report correct price to contract")
checkSubmission(t,
answerParams{
fa: &fa,
roundId: 1,
answer: int64(100),
from: fa.nallory,
isNewRound: true,
completesAnswer: true,
},
initialBalance,
receiptBlock,
)
assertPipelineRunCreated(t, app.GetDB(), 1, int64(100))
// Need to wait until NewRound log is consumed - otherwise there is a chance
// it will arrive after the next answer is submitted, and cause
// DeleteFluxMonitorRoundsBackThrough to delete previous stats
checkLogWasConsumed(t, fa, app.GetDB(), jobID, receiptBlock)
lggr.Info("Updating price to 103")
// Change reported price to a value outside the deviation
reportPrice.Store(103)
receiptBlock, answer = awaitSubmission(t, fa.backend, submissionReceived)
lggr.Infof("Detected submission: %v in block %v", answer, receiptBlock)
assert.Equal(t, reportPrice.Load(), answer,
"failed to report correct price to contract")
checkSubmission(t,
answerParams{
fa: &fa,
roundId: 2,
answer: int64(103),
from: fa.nallory,
isNewRound: true,
completesAnswer: true,
},
initialBalance-fee,
receiptBlock,
)
assertPipelineRunCreated(t, app.GetDB(), 2, int64(103))
// Need to wait until NewRound log is consumed - otherwise there is a chance
// it will arrive after the next answer is submitted, and cause
// DeleteFluxMonitorRoundsBackThrough to delete previous stats
checkLogWasConsumed(t, fa, app.GetDB(), jobID, receiptBlock)
// Should not received a submission as it is inside the deviation
reportPrice.Store(104)
assertNoSubmission(t, submissionReceived, 2*time.Second, "Should not receive a submission")
expMetaMu.Lock()
defer expMetaMu.Unlock()
assert.Len(t, expectedMeta, 2, "expected metadata %v", expectedMeta)
assert.Greater(t, expectedMeta["100"].count, 0, "Stored answer metadata does not contain 100 but contains: %v", expectedMeta)
assert.Greater(t, expectedMeta["103"].count, 0, "Stored answer metadata does not contain 103 but contains: %v", expectedMeta)
assert.Greater(t, expectedMeta["103"].updatedAt, expectedMeta["100"].updatedAt)
})`
$DIR/core/services/fluxmonitorv2/integrations_test.go: `.NewWithT(t)`
$DIR/core/services/fluxmonitorv2/integrations_test.go: `.aggregatorContract.ChangeOracles(fa.sergey, emptyList, oracleList, oracleList, 1, 1, 0)`
$DIR/core/services/fluxmonitorv2/integrations_test.go: `.backend.Commit()`
$DIR/core/services/fluxmonitorv2/integrations_test.go: `.MustNewDuration(100 * time.Millisecond)`
$DIR/core/services/fluxmonitorv2/integrations_test.go: `.MustNewDuration(1 * time.Second)`
$DIR/core/services/fluxmonitorv2/integrations_test.go: `.Store(100)`
$DIR/core/services/fluxmonitorv2/integrations_test.go: `.NewHTTPMockServerWithAlterableResponseAndRequest(t,
generatePriceResponseFn(reportPrice.Load),
func(r *http.Request) {
b, err1 := io.ReadAll(r.Body)
require.NoError(t, err1)
var m bridges.BridgeMetaDataJSON
require.NoError(t, json.Unmarshal(b, &m))
if m.Meta.LatestAnswer != nil && m.Meta.UpdatedAt != nil {
k := m.Meta.LatestAnswer.String()
expMetaMu.Lock()
curr := expectedMeta[k]
assert.True(t, m.Meta.UpdatedAt.IsInt64()) // sanity check unix ts
expectedMeta[k] = v{curr.count + 1, m.Meta.UpdatedAt.Int64()}
expMetaMu.Unlock()
}
},
)`
$DIR/core/services/fluxmonitorv2/integrations_test.go: `.ReadAll(r.Body)`
$DIR/core/services/fluxmonitorv2/integrations_test.go: `.Meta.LatestAnswer.String()`
$DIR/core/services/fluxmonitorv2/integrations_test.go: `.Lock()`
$DIR/core/services/fluxmonitorv2/integrations_test.go: `.Meta.UpdatedAt.Int64()`
$DIR/core/services/fluxmonitorv2/integrations_test.go: `.Unlock()`
$DIR/core/services/fluxmonitorv2/integrations_test.go: `.Cleanup(mockServer.Close)`
$DIR/core/services/fluxmonitorv2/integrations_test.go: `.Parse(mockServer.URL)`
$DIR/core/services/fluxmonitorv2/integrations_test.go: `.WatchSubmissionReceived(t,
[]common.Address{fa.nallory.From},
)`
$DIR/core/services/fluxmonitorv2/integrations_test.go: `.Sprintf(s, fa.aggregatorContractAddress, 2*time.Second)`
$DIR/core/services/fluxmonitorv2/integrations_test.go: `.Marshal(web.CreateJobRequest{
TOML: s,
})`
$DIR/core/services/fluxmonitorv2/integrations_test.go: `.Int64()`
$DIR/core/services/fluxmonitorv2/integrations_test.go: `.CreateJobViaWeb2(t, app, string(requestBody))`
$DIR/core/services/fluxmonitorv2/integrations_test.go: `.ParseInt(jobResponse.ID, 10, 32)`
$DIR/core/services/fluxmonitorv2/integrations_test.go: `.Eventually(func() uint32 {
lb := evmtest.MustGetDefaultChain(t, app.GetRelayers().LegacyEVMChains()).LogBroadcaster()
return lb.(log.BroadcasterInTest).TrackedAddressesCount()
}, testutils.WaitTimeout(t), 200*time.Millisecond)`
$DIR/core/services/fluxmonitorv2/integrations_test.go: `.MustGetDefaultChain(t, app.GetRelayers().LegacyEVMChains())`
$DIR/core/services/fluxmonitorv2/integrations_test.go: `.GetRelayers()`
$DIR/core/services/fluxmonitorv2/integrations_test.go: `.LegacyEVMChains()`
$DIR/core/services/fluxmonitorv2/integrations_test.go: `.LogBroadcaster()`
$DIR/core/services/fluxmonitorv2/integrations_test.go: `.TrackedAddressesCount()`
$DIR/core/services/fluxmonitorv2/integrations_test.go: `.WaitTimeout(t)`
$DIR/core/services/fluxmonitorv2/integrations_test.go: `.Should(gomega.BeNumerically(">=", 1))`
$DIR/core/services/fluxmonitorv2/integrations_test.go: `.BeNumerically(">=", 1)`
$DIR/core/services/fluxmonitorv2/integrations_test.go: `.TestLogger(t)`
$DIR/core/services/fluxmonitorv2/integrations_test.go: `.Infof("Detected submission: %v in block %v", answer, receiptBlock)`
$DIR/core/services/fluxmonitorv2/integrations_test.go: `.GetDB()`
$DIR/core/services/fluxmonitorv2/integrations_test.go: `.GetDB()`
$DIR/core/services/fluxmonitorv2/integrations_test.go: `.Info("Updating price to 103")`
$DIR/core/services/fluxmonitorv2/integrations_test.go: `.Store(103)`
$DIR/core/services/fluxmonitorv2/integrations_test.go: `.Infof("Detected submission: %v in block %v", answer, receiptBlock)`
$DIR/core/services/fluxmonitorv2/integrations_test.go: `.GetDB()`
$DIR/core/services/fluxmonitorv2/integrations_test.go: `.GetDB()`
$DIR/core/services/fluxmonitorv2/integrations_test.go: `.Store(104)`
$DIR/core/services/fluxmonitorv2/integrations_test.go: `.Lock()`
$DIR/core/services/fluxmonitorv2/integrations_test.go: `.Unlock()`
$DIR/core/services/fluxmonitorv2/integrations_test.go: `.NewWithT(t)`
$DIR/core/services/fluxmonitorv2/integrations_test.go: `.aggregatorContract.ChangeOracles(fa.sergey, emptyList, oracleList, oracleList, 1, 2, 1)`
$DIR/core/services/fluxmonitorv2/integrations_test.go: `.backend.Commit()`
$DIR/core/services/fluxmonitorv2/integrations_test.go: `.MustNewDuration(100 * time.Millisecond)`
$DIR/core/services/fluxmonitorv2/integrations_test.go: `.MustNewDuration(1 * time.Second)`
$DIR/core/services/fluxmonitorv2/integrations_test.go: `.EIP55AddressFromAddress(fa.flagsContractAddress)`
$DIR/core/services/fluxmonitorv2/integrations_test.go: `.Int64()`
$DIR/core/services/fluxmonitorv2/integrations_test.go: `.Store(1)`
$DIR/core/services/fluxmonitorv2/integrations_test.go: `.NewHTTPMockServerWithAlterableResponse(t,
generatePriceResponseFn(reportPrice.Load),
)`
$DIR/core/services/fluxmonitorv2/integrations_test.go: `.Cleanup(mockServer.Close)`
$DIR/core/services/fluxmonitorv2/integrations_test.go: `.WatchSubmissionReceived(t,
[]common.Address{fa.nallory.From},
)`
$DIR/core/services/fluxmonitorv2/integrations_test.go: `.Sprintf(s, fa.aggregatorContractAddress, testutils.SimulatedChainID.String(), pollTimerPeriod, mockServer.URL)`
$DIR/core/services/fluxmonitorv2/integrations_test.go: `.SimulatedChainID.String()`
$DIR/core/services/fluxmonitorv2/integrations_test.go: `.flagsContract.RaiseFlag(fa.sergey, evmutils.ZeroAddress)`
$DIR/core/services/fluxmonitorv2/integrations_test.go: `.flagsContract.RaiseFlag(fa.sergey, fa.aggregatorContractAddress)`
$DIR/core/services/fluxmonitorv2/integrations_test.go: `.backend.Commit()`
$DIR/core/services/fluxmonitorv2/integrations_test.go: `.Marshal(web.CreateJobRequest{
TOML: s,
})`
$DIR/core/services/fluxmonitorv2/integrations_test.go: `.CreateJobViaWeb2(t, app, string(requestBody))`
$DIR/core/services/fluxmonitorv2/integrations_test.go: `.Eventually(func() uint32 {
lb := evmtest.MustGetDefaultChain(t, app.GetRelayers().LegacyEVMChains()).LogBroadcaster()
return lb.(log.BroadcasterInTest).TrackedAddressesCount()
}, testutils.WaitTimeout(t), 200*time.Millisecond)`
$DIR/core/services/fluxmonitorv2/integrations_test.go: `.MustGetDefaultChain(t, app.GetRelayers().LegacyEVMChains())`
$DIR/core/services/fluxmonitorv2/integrations_test.go: `.GetRelayers()`
$DIR/core/services/fluxmonitorv2/integrations_test.go: `.LegacyEVMChains()`
$DIR/core/services/fluxmonitorv2/integrations_test.go: `.LogBroadcaster()`
$DIR/core/services/fluxmonitorv2/integrations_test.go: `.TrackedAddressesCount()`
$DIR/core/services/fluxmonitorv2/integrations_test.go: `.WaitTimeout(t)`
$DIR/core/services/fluxmonitorv2/integrations_test.go: `.Should(gomega.BeNumerically(">=", 2))`
$DIR/core/services/fluxmonitorv2/integrations_test.go: `.BeNumerically(">=", 2)`
$DIR/core/services/fluxmonitorv2/integrations_test.go: `.backend.Commit()`
$DIR/core/services/fluxmonitorv2/integrations_test.go: `.NewWithT(t)`
$DIR/core/services/fluxmonitorv2/integrations_test.go: `.aggregatorContract.ChangeOracles(fa.sergey, emptyList, oracleList, oracleList, 1, 1, 0)`
$DIR/core/services/fluxmonitorv2/integrations_test.go: `.backend.Commit()`
$DIR/core/services/fluxmonitorv2/integrations_test.go: `.MustNewDuration(100 * time.Millisecond)`
$DIR/core/services/fluxmonitorv2/integrations_test.go: `.MustNewDuration(1 * time.Second)`
$DIR/core/services/fluxmonitorv2/integrations_test.go: `.EIP55AddressFromAddress(fa.flagsContractAddress)`
$DIR/core/services/fluxmonitorv2/integrations_test.go: `.Store(1)`
$DIR/core/services/fluxmonitorv2/integrations_test.go: `.NewHTTPMockServerWithAlterableResponse(t,
generatePriceResponseFn(reportPrice.Load),
)`
$DIR/core/services/fluxmonitorv2/integrations_test.go: `.Cleanup(mockServer.Close)`
$DIR/core/services/fluxmonitorv2/integrations_test.go: `.WatchSubmissionReceived(t,
[]common.Address{fa.nallory.From},
)`
$DIR/core/services/fluxmonitorv2/integrations_test.go: `.Sprintf(s, fa.aggregatorContractAddress, testutils.SimulatedChainID.String(), "1000ms", mockServer.URL)`
$DIR/core/services/fluxmonitorv2/integrations_test.go: `.SimulatedChainID.String()`
$DIR/core/services/fluxmonitorv2/integrations_test.go: `.flagsContract.RaiseFlag(fa.sergey, evmutils.ZeroAddress)`
$DIR/core/services/fluxmonitorv2/integrations_test.go: `.flagsContract.RaiseFlag(fa.sergey, fa.aggregatorContractAddress)`
$DIR/core/services/fluxmonitorv2/integrations_test.go: `.backend.Commit()`
$DIR/core/services/fluxmonitorv2/integrations_test.go: `.Marshal(web.CreateJobRequest{
TOML: s,
})`
$DIR/core/services/fluxmonitorv2/integrations_test.go: `.CreateJobViaWeb2(t, app, string(requestBody))`
$DIR/core/services/fluxmonitorv2/integrations_test.go: `.AssertPipelineRunsStays(t, j.PipelineSpec.ID, app.GetDB(), 0)`
$DIR/core/services/fluxmonitorv2/integrations_test.go: `.GetDB()`
$DIR/core/services/fluxmonitorv2/integrations_test.go: `.flagsContract.LowerFlags(fa.sergey, []common.Address{evmutils.ZeroAddress})`
$DIR/core/services/fluxmonitorv2/integrations_test.go: `.backend.Commit()`
$DIR/core/services/fluxmonitorv2/integrations_test.go: `.Store(2)`
$DIR/core/services/fluxmonitorv2/integrations_test.go: `.flagsContract.LowerFlags(fa.sergey, []common.Address{fa.aggregatorContractAddress})`
$DIR/core/services/fluxmonitorv2/integrations_test.go: `.backend.Commit()`
$DIR/core/services/fluxmonitorv2/integrations_test.go: `.Store(4)`
$DIR/core/services/fluxmonitorv2/integrations_test.go: `.flagsContract.RaiseFlag(fa.sergey, fa.aggregatorContractAddress)`
$DIR/core/services/fluxmonitorv2/integrations_test.go: `.flagsContract.RaiseFlag(fa.sergey, evmutils.ZeroAddress)`
$DIR/core/services/fluxmonitorv2/integrations_test.go: `.backend.Commit()`
$DIR/core/services/fluxmonitorv2/integrations_test.go: `.Eventually(func() int {
ilogs, err := fa.flagsContract.FilterFlagRaised(nil, []common.Address{})
require.NoError(t, err)
logs := cltest.GetLogs(t, nil, ilogs)
return len(logs)
}, testutils.WaitTimeout(t), 100*time.Millisecond)`
$DIR/core/services/fluxmonitorv2/integrations_test.go: `.flagsContract.FilterFlagRaised(nil, []common.Address{})`
$DIR/core/services/fluxmonitorv2/integrations_test.go: `.GetLogs(t, nil, ilogs)`
$DIR/core/services/fluxmonitorv2/integrations_test.go: `.WaitTimeout(t)`
$DIR/core/services/fluxmonitorv2/integrations_test.go: `.Should(gomega.Equal(4))`
$DIR/core/services/fluxmonitorv2/integrations_test.go: `.Equal(4)`
$DIR/core/services/fluxmonitorv2/integrations_test.go: `.Store(8)`
$DIR/core/services/fluxmonitorv2/integrations_test.go: `.NewInt(100000000)`
$DIR/core/services/fluxmonitorv2/integrations_test.go: `.NewInt(1000000000000)`
$DIR/core/services/fluxmonitorv2/integrations_test.go: `.aggregatorContract.ChangeOracles(fa.sergey, emptyList, oracleList, oracleList, 1, 3, 2)`
$DIR/core/services/fluxmonitorv2/integrations_test.go: `.backend.Commit()`
$DIR/core/services/fluxmonitorv2/integrations_test.go: `.MustNewDuration(100 * time.Millisecond)`
$DIR/core/services/fluxmonitorv2/integrations_test.go: `.MustNewDuration(1 * time.Second)`
$DIR/core/services/fluxmonitorv2/integrations_test.go: `.Store(10001)`
$DIR/core/services/fluxmonitorv2/integrations_test.go: `.NewHTTPMockServerWithAlterableResponse(t,
generatePriceResponseFn(reportPrice.Load),
)`
$DIR/core/services/fluxmonitorv2/integrations_test.go: `.Cleanup(mockServer.Close)`
$DIR/core/services/fluxmonitorv2/integrations_test.go: `.Sprintf(toml, fa.aggregatorContractAddress, testutils.SimulatedChainID.String(), "100ms", mockServer.URL)`
$DIR/core/services/fluxmonitorv2/integrations_test.go: `.SimulatedChainID.String()`
$DIR/core/services/fluxmonitorv2/integrations_test.go: `.flagsContract.RaiseFlag(fa.sergey, evmutils.ZeroAddress)`
$DIR/core/services/fluxmonitorv2/integrations_test.go: `.flagsContract.RaiseFlag(fa.sergey, fa.aggregatorContractAddress)`
$DIR/core/services/fluxmonitorv2/integrations_test.go: `.backend.Commit()`
$DIR/core/services/fluxmonitorv2/integrations_test.go: `.Marshal(web.CreateJobRequest{
TOML: s,
})`
$DIR/core/services/fluxmonitorv2/integrations_test.go: `.CreateJobViaWeb2(t, app, string(requestBody))`
$DIR/core/services/fluxmonitorv2/integrations_test.go: `.Mine(fa.backend, 500*time.Millisecond)`
$DIR/core/services/fluxmonitorv2/integrations_test.go: `.ParseInt(j.ID, 10, 32)`
$DIR/core/services/fluxmonitorv2/integrations_test.go: `.WaitForSpecErrorV2(t, app.GetDB(), int32(jobID), 1)`
$DIR/core/services/fluxmonitorv2/integrations_test.go: `.GetDB()`
$DIR/core/services/fluxmonitorv2/integrations_test.go: `.aggregatorContract.ChangeOracles(fa.sergey, emptyList, oracleList, oracleList, 2, 3, 2)`
$DIR/core/services/fluxmonitorv2/integrations_test.go: `.backend.Commit()`
$DIR/core/services/fluxmonitorv2/integrations_test.go: `.MustNewDuration(100 * time.Millisecond)`
$DIR/core/services/fluxmonitorv2/integrations_test.go: `.MustNewDuration(1 * time.Second)`
$DIR/core/services/fluxmonitorv2/integrations_test.go: `.Int64()`
$DIR/core/services/fluxmonitorv2/integrations_test.go: `.Store(answer)`
$DIR/core/services/fluxmonitorv2/integrations_test.go: `.Sprintf(`{"data":{"result": %d}}`, reportPrice.Load())`
$DIR/core/services/fluxmonitorv2/integrations_test.go: `.Load()`
$DIR/core/services/fluxmonitorv2/integrations_test.go: `.NewHTTPMockServerWithAlterableResponse(t, priceResponse)`
$DIR/core/services/fluxmonitorv2/integrations_test.go: `.Cleanup(mockServer.Close)`
$DIR/core/services/fluxmonitorv2/integrations_test.go: `.WatchSubmissionReceived(t,
[]common.Address{fa.nallory.From},
)`
$DIR/core/services/fluxmonitorv2/integrations_test.go: `.Sprintf(s, fa.aggregatorContractAddress, testutils.SimulatedChainID.String(), "200ms", mockServer.URL)`
$DIR/core/services/fluxmonitorv2/integrations_test.go: `.SimulatedChainID.String()`
$DIR/core/services/fluxmonitorv2/integrations_test.go: `.Marshal(web.CreateJobRequest{
TOML: s,
})`
$DIR/core/services/fluxmonitorv2/integrations_test.go: `.CreateJobViaWeb2(t, app, string(requestBody))`
$DIR/core/services/fluxmonitorv2/integrations_test.go: `.Store(answer + 1)`
$DIR/core/services/fluxmonitorv2/integrations_test.go: `.Load()`
$DIR/core/services/fluxmonitorv2/integrations_test.go: `.Load()`
$DIR/core/services/fluxmonitorv2/integrations_test.go: `.aggregatorContract.RequestNewRound(fa.nallory)`
$DIR/core/services/fluxmonitorv2/integrations_test.go: `.Add(3)`
$DIR/core/services/fluxmonitorv2/key_store_test.go: `keys, err = ks.EnabledKeysForChain(ctx, testutils.SimulatedChainID)`
$DIR/core/services/fluxmonitorv2/key_store_test.go: `.Context(t)`
$DIR/core/services/fluxmonitorv2/key_store_test.go: `.NewSqlxDB(t)`
$DIR/core/services/fluxmonitorv2/key_store_test.go: `.NewKeyStore(t, db)`
$DIR/core/services/fluxmonitorv2/key_store_test.go: `.Eth()`
$DIR/core/services/fluxmonitorv2/key_store_test.go: `.NewKeyStore(ethKeyStore)`
$DIR/core/services/fluxmonitorv2/key_store_test.go: `.Create(ctx, testutils.FixtureChainID)`
$DIR/core/services/fluxmonitorv2/key_store_test.go: `.Create(ctx, testutils.SimulatedChainID)`
$DIR/core/services/fluxmonitorv2/key_store_test.go: `.EnabledKeysForChain(ctx, testutils.FixtureChainID)`
$DIR/core/services/fluxmonitorv2/key_store_test.go: `.EnabledKeysForChain(ctx, testutils.SimulatedChainID)`
$DIR/core/services/fluxmonitorv2/key_store_test.go: `.Context(t)`
$DIR/core/services/fluxmonitorv2/key_store_test.go: `.NewSqlxDB(t)`
$DIR/core/services/fluxmonitorv2/key_store_test.go: `.NewKeyStore(t, db)`
$DIR/core/services/fluxmonitorv2/key_store_test.go: `.Eth()`
$DIR/core/services/fluxmonitorv2/key_store_test.go: `.MustInsertRandomKey(t, ethKeyStore)`
$DIR/core/services/fluxmonitorv2/key_store_test.go: `.NewKeyStore(ethKeyStore)`
$DIR/core/services/fluxmonitorv2/key_store_test.go: `.GetRoundRobinAddress(ctx, testutils.FixtureChainID)`
$DIR/core/services/fluxmonitorv2/orm_test.go: `count, err = orm.CountFluxMonitorRoundStats(ctx)`
$DIR/core/services/fluxmonitorv2/orm_test.go: `roundID, err = orm.MostRecentFluxMonitorRoundID(ctx, address)`
$DIR/core/services/fluxmonitorv2/orm_test.go: `err = orm.DeleteFluxMonitorRoundsBackThrough(ctx, testutils.NewAddress(), 5)`
$DIR/core/services/fluxmonitorv2/orm_test.go: `count, err = orm.CountFluxMonitorRoundStats(ctx)`
$DIR/core/services/fluxmonitorv2/orm_test.go: `err = orm.DeleteFluxMonitorRoundsBackThrough(ctx, address, 5)`
$DIR/core/services/fluxmonitorv2/orm_test.go: `count, err = orm.CountFluxMonitorRoundStats(ctx)`
$DIR/core/services/fluxmonitorv2/orm_test.go: `err = orm.UpdateFluxMonitorRoundStats(ctx, address, roundID, run.ID, 0)`
$DIR/core/services/fluxmonitorv2/orm_test.go: `txm.On("CreateTransaction", mock.Anything, txmgr.TxRequest{
IdempotencyKey: &idempotencyKey,
FromAddress: from,
ToAddress: to,
EncodedPayload: payload,
FeeLimit: gasLimit,
Meta: nil,
Strategy: strategy,
}).Return(txmgr.Tx{}, nil).Once()`
$DIR/core/services/fluxmonitorv2/orm_test.go: `.Context(t)`
$DIR/core/services/fluxmonitorv2/orm_test.go: `.NewSqlxDB(t)`
$DIR/core/services/fluxmonitorv2/orm_test.go: `.NewAddress()`
$DIR/core/services/fluxmonitorv2/orm_test.go: `.FindOrCreateFluxMonitorRoundStats(ctx, address, round, 1)`
$DIR/core/services/fluxmonitorv2/orm_test.go: `.CountFluxMonitorRoundStats(ctx)`
$DIR/core/services/fluxmonitorv2/orm_test.go: `.FindOrCreateFluxMonitorRoundStats(ctx, address, uint32(0), 1)`
$DIR/core/services/fluxmonitorv2/orm_test.go: `.CountFluxMonitorRoundStats(ctx)`
$DIR/core/services/fluxmonitorv2/orm_test.go: `.MostRecentFluxMonitorRoundID(ctx, testutils.NewAddress())`
$DIR/core/services/fluxmonitorv2/orm_test.go: `.NewAddress()`
$DIR/core/services/fluxmonitorv2/orm_test.go: `.MostRecentFluxMonitorRoundID(ctx, address)`
$DIR/core/services/fluxmonitorv2/orm_test.go: `.DeleteFluxMonitorRoundsBackThrough(ctx, testutils.NewAddress(), 5)`
$DIR/core/services/fluxmonitorv2/orm_test.go: `.NewAddress()`
$DIR/core/services/fluxmonitorv2/orm_test.go: `.CountFluxMonitorRoundStats(ctx)`
$DIR/core/services/fluxmonitorv2/orm_test.go: `.DeleteFluxMonitorRoundsBackThrough(ctx, address, 5)`
$DIR/core/services/fluxmonitorv2/orm_test.go: `.CountFluxMonitorRoundStats(ctx)`
$DIR/core/services/fluxmonitorv2/orm_test.go: `.Context(t)`
$DIR/core/services/fluxmonitorv2/orm_test.go: `.NewGeneralConfig(t, nil)`
$DIR/core/services/fluxmonitorv2/orm_test.go: `.NewSqlxDB(t)`
$DIR/core/services/fluxmonitorv2/orm_test.go: `.NewKeyStore(t, db)`
$DIR/core/services/fluxmonitorv2/orm_test.go: `.TestLogger(t)`
$DIR/core/services/fluxmonitorv2/orm_test.go: `.NewORM(db, lggr, cfg.JobPipeline().MaxSuccessfulRuns())`
$DIR/core/services/fluxmonitorv2/orm_test.go: `.JobPipeline()`
$DIR/core/services/fluxmonitorv2/orm_test.go: `.MaxSuccessfulRuns()`
$DIR/core/services/fluxmonitorv2/orm_test.go: `.NewORM(db)`
$DIR/core/services/fluxmonitorv2/orm_test.go: `.NewORM(db, pipelineORM, bridgeORM, keyStore, lggr)`
$DIR/core/services/fluxmonitorv2/orm_test.go: `.NewAddress()`
$DIR/core/services/fluxmonitorv2/orm_test.go: `.Now()`
$DIR/core/services/fluxmonitorv2/orm_test.go: `.Now()`
$DIR/core/services/fluxmonitorv2/orm_test.go: `.TimeFrom(f)`
$DIR/core/services/fluxmonitorv2/orm_test.go: `.New()`
$DIR/core/services/fluxmonitorv2/orm_test.go: `.TimeFrom(f)`
$DIR/core/services/fluxmonitorv2/orm_test.go: `.InsertFinishedRun(ctx, run, true)`
$DIR/core/services/fluxmonitorv2/orm_test.go: `.UpdateFluxMonitorRoundStats(ctx, address, roundID, run.ID, 0)`
$DIR/core/services/fluxmonitorv2/orm_test.go: `.FindOrCreateFluxMonitorRoundStats(ctx, address, roundID, 0)`
$DIR/core/services/fluxmonitorv2/orm_test.go: `.NewSqlxDB(t)`
$DIR/core/services/fluxmonitorv2/orm_test.go: `.NewKeyStore(t, db)`
$DIR/core/services/fluxmonitorv2/orm_test.go: `.Eth()`
$DIR/core/services/fluxmonitorv2/orm_test.go: `.NewTxStrategy(t)`
$DIR/core/services/fluxmonitorv2/orm_test.go: `.NewMockEvmTxManager(t)`
$DIR/core/services/fluxmonitorv2/orm_test.go: `.NewORM(db, logger.TestLogger(t), txm, strategy, txmgr.TransmitCheckerSpec{})`
$DIR/core/services/fluxmonitorv2/orm_test.go: `.TestLogger(t)`
$DIR/core/services/fluxmonitorv2/orm_test.go: `.MustInsertRandomKey(t, ethKeyStore)`
$DIR/core/services/fluxmonitorv2/orm_test.go: `.NewAddress()`
$DIR/core/services/fluxmonitorv2/orm_test.go: `.New()`
$DIR/core/services/fluxmonitorv2/orm_test.go: `.String()`
$DIR/core/services/fluxmonitorv2/orm_test.go: `.On("CreateTransaction", mock.Anything, txmgr.TxRequest{
IdempotencyKey: &idempotencyKey,
FromAddress: from,
ToAddress: to,
EncodedPayload: payload,
FeeLimit: gasLimit,
Meta: nil,
Strategy: strategy,
})`
$DIR/core/services/fluxmonitorv2/orm_test.go: `.Return(txmgr.Tx{}, nil)`
$DIR/core/services/fluxmonitorv2/orm_test.go: `.Once()`
$DIR/core/services/fluxmonitorv2/orm_test.go: `.CreateEthTransaction(testutils.Context(t), from, to, payload, gasLimit, &idempotencyKey)`
$DIR/core/services/fluxmonitorv2/orm_test.go: `.Context(t)`
$DIR/core/services/fluxmonitorv2/payment_checker_test.go: `t.Run(tc.name, func(t *testing.T) {
t.Parallel()
assert.Equal(t, tc.want, checker.SufficientFunds(
big.NewInt(int64(tc.funds)),
big.NewInt(int64(payment)),
uint8(oracleCount),
))
})`
$DIR/core/services/fluxmonitorv2/payment_checker_test.go: `t.Run(tc.name, func(t *testing.T) {
t.Parallel()
var minJobPayment *assets.Link
if tc.minJobPayment != nil {
mjb := assets.Link(*big.NewInt(tc.minJobPayment.(int64)))
minJobPayment = &mjb
}
checker := fluxmonitorv2.NewPaymentChecker(assets.NewLinkFromJuels(tc.minContractPayment), minJobPayment)
assert.Equal(t, tc.want, checker.SufficientPayment(big.NewInt(payment)))
})`
$DIR/core/services/fluxmonitorv2/payment_checker_test.go: `minJobPayment = &mjb`
$DIR/core/services/fluxmonitorv2/payment_checker_test.go: `.NewPaymentChecker(nil, nil)`
$DIR/core/services/fluxmonitorv2/payment_checker_test.go: `.Run(tc.name, func(t *testing.T) {
t.Parallel()
assert.Equal(t, tc.want, checker.SufficientFunds(
big.NewInt(int64(tc.funds)),
big.NewInt(int64(payment)),
uint8(oracleCount),
))
})`
$DIR/core/services/fluxmonitorv2/payment_checker_test.go: `.Run(tc.name, func(t *testing.T) {
t.Parallel()
var minJobPayment *assets.Link
if tc.minJobPayment != nil {
mjb := assets.Link(*big.NewInt(tc.minJobPayment.(int64)))
minJobPayment = &mjb
}
checker := fluxmonitorv2.NewPaymentChecker(assets.NewLinkFromJuels(tc.minContractPayment), minJobPayment)
assert.Equal(t, tc.want, checker.SufficientPayment(big.NewInt(payment)))
})`
$DIR/core/services/fluxmonitorv2/payment_checker_test.go: `.Link(*big.NewInt(tc.minJobPayment.(int64)))`
$DIR/core/services/fluxmonitorv2/payment_checker_test.go: `.NewInt(tc.minJobPayment.(int64))`
$DIR/core/services/fluxmonitorv2/payment_checker_test.go: `.NewPaymentChecker(assets.NewLinkFromJuels(tc.minContractPayment), minJobPayment)`
$DIR/core/services/fluxmonitorv2/payment_checker_test.go: `.NewLinkFromJuels(tc.minContractPayment)`
$DIR/core/services/fluxmonitorv2/poll_manager_test.go: `pm.Start(false, flux_aggregator_wrapper.OracleRoundState{})`
$DIR/core/services/fluxmonitorv2/poll_manager_test.go: `t.Cleanup(pm.Stop)`
$DIR/core/services/fluxmonitorv2/poll_manager_test.go: `pm.Start(false, flux_aggregator_wrapper.OracleRoundState{
StartedAt: uint64(time.Now().Unix()) - 10, // Even 10 seconds old the idle timer should tick
})`
$DIR/core/services/fluxmonitorv2/poll_manager_test.go: `t.Cleanup(pm.Stop)`
$DIR/core/services/fluxmonitorv2/poll_manager_test.go: `pm.Start(false, flux_aggregator_wrapper.OracleRoundState{
StartedAt: uint64(time.Now().Unix()),
Timeout: 1, // in seconds
})`
$DIR/core/services/fluxmonitorv2/poll_manager_test.go: `t.Cleanup(pm.Stop)`
$DIR/core/services/fluxmonitorv2/poll_manager_test.go: `pm.Start(false, flux_aggregator_wrapper.OracleRoundState{
StartedAt: uint64(time.Now().Unix()),
Timeout: 10000, // in seconds. Don't timeout the round
})`
$DIR/core/services/fluxmonitorv2/poll_manager_test.go: `t.Cleanup(pm.Stop)`
$DIR/core/services/fluxmonitorv2/poll_manager_test.go: `pm.StartRetryTicker()`
$DIR/core/services/fluxmonitorv2/poll_manager_test.go: `pm.StopRetryTicker()`
$DIR/core/services/fluxmonitorv2/poll_manager_test.go: `ticks = watchTicks(t, pm, 2*time.Second)`
$DIR/core/services/fluxmonitorv2/poll_manager_test.go: `pm.Start(false, flux_aggregator_wrapper.OracleRoundState{})`
$DIR/core/services/fluxmonitorv2/poll_manager_test.go: `pm.Start(true, flux_aggregator_wrapper.OracleRoundState{
StartedAt: uint64(time.Now().Unix()),
Timeout: 1, // in seconds
})`
$DIR/core/services/fluxmonitorv2/poll_manager_test.go: `t.Cleanup(pm.Stop)`
$DIR/core/services/fluxmonitorv2/poll_manager_test.go: `t.Cleanup(pm.Stop)`
$DIR/core/services/fluxmonitorv2/poll_manager_test.go: `pm.Start(true, flux_aggregator_wrapper.OracleRoundState{
StartedAt: uint64(time.Now().Unix()),
Timeout: 1, // in seconds
})`
$DIR/core/services/fluxmonitorv2/poll_manager_test.go: `pm.Awaken(flux_aggregator_wrapper.OracleRoundState{
StartedAt: uint64(time.Now().Unix()),
Timeout: 1,
})`
$DIR/core/services/fluxmonitorv2/poll_manager_test.go: `ticks = watchTicks(t, pm, 2*time.Second)`
$DIR/core/services/fluxmonitorv2/poll_manager_test.go: `pm.Start(false, flux_aggregator_wrapper.OracleRoundState{
StartedAt: uint64(time.Now().Unix()),
Timeout: 1,
})`
$DIR/core/services/fluxmonitorv2/poll_manager_test.go: `t.Cleanup(pm.Stop)`
$DIR/core/services/fluxmonitorv2/poll_manager_test.go: `pm.Hibernate()`
$DIR/core/services/fluxmonitorv2/poll_manager_test.go: `ticks = watchTicks(t, pm, 2*time.Second)`
$DIR/core/services/fluxmonitorv2/poll_manager_test.go: `t.Run(tc.name, func(t *testing.T) {
t.Parallel()
pm, err := fluxmonitorv2.NewPollManager(fluxmonitorv2.PollManagerConfig{
IsHibernating: tc.isHibernating,
HibernationPollPeriod: 24 * time.Hour,
PollTickerInterval: pollTickerDefaultDuration,
PollTickerDisabled: tc.pollTickerDisabled,
IdleTimerPeriod: idleTickerDefaultDuration,
IdleTimerDisabled: tc.idleTimerDisabled,
}, logger.TestLogger(t))
require.NoError(t, err)
assert.Equal(t, tc.want, pm.ShouldPerformInitialPoll())
})`
$DIR/core/services/fluxmonitorv2/poll_manager_test.go: `pm.Start(false, flux_aggregator_wrapper.OracleRoundState{
StartedAt: uint64(time.Now().Unix()),
Timeout: 1,
})`
$DIR/core/services/fluxmonitorv2/poll_manager_test.go: `pm.Stop()`
$DIR/core/services/fluxmonitorv2/poll_manager_test.go: `ticks = watchTicks(t, pm, 2*time.Second)`
$DIR/core/services/fluxmonitorv2/poll_manager_test.go: `pm.Start(false, flux_aggregator_wrapper.OracleRoundState{
StartedAt: uint64(time.Now().Unix()),
Timeout: 1,
})`
$DIR/core/services/fluxmonitorv2/poll_manager_test.go: `t.Cleanup(pm.Stop)`
$DIR/core/services/fluxmonitorv2/poll_manager_test.go: `pm.ResetIdleTimer(uint64(time.Now().Unix()) + 1)`
$DIR/core/services/fluxmonitorv2/poll_manager_test.go: `ticks = watchTicks(t, pm, 2*time.Second)`
$DIR/core/services/fluxmonitorv2/poll_manager_test.go: `pm.Start(true, flux_aggregator_wrapper.OracleRoundState{
StartedAt: uint64(time.Now().Unix()),
Timeout: 1, // in seconds
})`
$DIR/core/services/fluxmonitorv2/poll_manager_test.go: `t.Cleanup(pm.Stop)`
$DIR/core/services/fluxmonitorv2/poll_manager_test.go: `pm.ResetIdleTimer(uint64(time.Now().Unix()))`
$DIR/core/services/fluxmonitorv2/poll_manager_test.go: `ticks = watchTicks(t, pm, 2*time.Second)`
$DIR/core/services/fluxmonitorv2/poll_manager_test.go: `pm.Start(false, flux_aggregator_wrapper.OracleRoundState{
StartedAt: uint64(time.Now().Unix()),
Timeout: 1,
})`
$DIR/core/services/fluxmonitorv2/poll_manager_test.go: `t.Cleanup(pm.Stop)`
$DIR/core/services/fluxmonitorv2/poll_manager_test.go: `pm.Reset(flux_aggregator_wrapper.OracleRoundState{
StartedAt: uint64(time.Now().Unix()),
Timeout: 1,
})`
$DIR/core/services/fluxmonitorv2/poll_manager_test.go: `ticks = watchTicks(t, pm, 2*time.Second)`
$DIR/core/services/fluxmonitorv2/poll_manager_test.go: `pm.Start(true, flux_aggregator_wrapper.OracleRoundState{
StartedAt: uint64(time.Now().Unix()),
Timeout: 1, // in seconds
})`
$DIR/core/services/fluxmonitorv2/poll_manager_test.go: `t.Cleanup(pm.Stop)`
$DIR/core/services/fluxmonitorv2/poll_manager_test.go: `pm.Reset(flux_aggregator_wrapper.OracleRoundState{
StartedAt: uint64(time.Now().Unix()),
Timeout: 1, // in seconds
})`
$DIR/core/services/fluxmonitorv2/poll_manager_test.go: `ticks = watchTicks(t, pm, 2*time.Second)`
$DIR/core/services/fluxmonitorv2/poll_manager_test.go: `.NewPollManager(fluxmonitorv2.PollManagerConfig{
PollTickerInterval: pollTickerDefaultDuration,
PollTickerDisabled: false,
IdleTimerPeriod: idleTickerDefaultDuration,
IdleTimerDisabled: true,
HibernationPollPeriod: 24 * time.Hour,
}, logger.TestLogger(t))`
$DIR/core/services/fluxmonitorv2/poll_manager_test.go: `.TestLogger(t)`
$DIR/core/services/fluxmonitorv2/poll_manager_test.go: `.Start(false, flux_aggregator_wrapper.OracleRoundState{})`
$DIR/core/services/fluxmonitorv2/poll_manager_test.go: `.Cleanup(pm.Stop)`
$DIR/core/services/fluxmonitorv2/poll_manager_test.go: `.NewPollManager(fluxmonitorv2.PollManagerConfig{
PollTickerInterval: 100 * time.Millisecond,
PollTickerDisabled: true,
IdleTimerPeriod: idleTickerDefaultDuration,
IdleTimerDisabled: false,
HibernationPollPeriod: 24 * time.Hour,
}, logger.TestLogger(t))`
$DIR/core/services/fluxmonitorv2/poll_manager_test.go: `.TestLogger(t)`
$DIR/core/services/fluxmonitorv2/poll_manager_test.go: `.Start(false, flux_aggregator_wrapper.OracleRoundState{
StartedAt: uint64(time.Now().Unix()) - 10, // Even 10 seconds old the idle timer should tick
})`
$DIR/core/services/fluxmonitorv2/poll_manager_test.go: `.Now()`
$DIR/core/services/fluxmonitorv2/poll_manager_test.go: `.Unix()`
$DIR/core/services/fluxmonitorv2/poll_manager_test.go: `.Cleanup(pm.Stop)`
$DIR/core/services/fluxmonitorv2/poll_manager_test.go: `.NewPollManager(fluxmonitorv2.PollManagerConfig{
PollTickerInterval: pollTickerDefaultDuration,
PollTickerDisabled: true,
IdleTimerPeriod: idleTickerDefaultDuration,
IdleTimerDisabled: true,
HibernationPollPeriod: 24 * time.Hour,
}, logger.TestLogger(t))`
$DIR/core/services/fluxmonitorv2/poll_manager_test.go: `.TestLogger(t)`
$DIR/core/services/fluxmonitorv2/poll_manager_test.go: `.Start(false, flux_aggregator_wrapper.OracleRoundState{
StartedAt: uint64(time.Now().Unix()),
Timeout: 1, // in seconds
})`
$DIR/core/services/fluxmonitorv2/poll_manager_test.go: `.Now()`
$DIR/core/services/fluxmonitorv2/poll_manager_test.go: `.Unix()`
$DIR/core/services/fluxmonitorv2/poll_manager_test.go: `.Cleanup(pm.Stop)`
$DIR/core/services/fluxmonitorv2/poll_manager_test.go: `.NewPollManager(fluxmonitorv2.PollManagerConfig{
PollTickerInterval: pollTickerDefaultDuration,
PollTickerDisabled: true,
IdleTimerPeriod: idleTickerDefaultDuration,
IdleTimerDisabled: true,
HibernationPollPeriod: 24 * time.Hour,
MinRetryBackoffDuration: 200 * time.Microsecond,
MaxRetryBackoffDuration: 1 * time.Minute,
}, logger.TestLogger(t))`
$DIR/core/services/fluxmonitorv2/poll_manager_test.go: `.TestLogger(t)`
$DIR/core/services/fluxmonitorv2/poll_manager_test.go: `.Start(false, flux_aggregator_wrapper.OracleRoundState{
StartedAt: uint64(time.Now().Unix()),
Timeout: 10000, // in seconds. Don't timeout the round
})`
$DIR/core/services/fluxmonitorv2/poll_manager_test.go: `.Now()`
$DIR/core/services/fluxmonitorv2/poll_manager_test.go: `.Unix()`
$DIR/core/services/fluxmonitorv2/poll_manager_test.go: `.Cleanup(pm.Stop)`
$DIR/core/services/fluxmonitorv2/poll_manager_test.go: `.StartRetryTicker()`
$DIR/core/services/fluxmonitorv2/poll_manager_test.go: `.StopRetryTicker()`
$DIR/core/services/fluxmonitorv2/poll_manager_test.go: `.Start(false, flux_aggregator_wrapper.OracleRoundState{})`
$DIR/core/services/fluxmonitorv2/poll_manager_test.go: `.NewPollManager(fluxmonitorv2.PollManagerConfig{
PollTickerInterval: pollTickerDefaultDuration,
PollTickerDisabled: true,
IdleTimerPeriod: idleTickerDefaultDuration,
IdleTimerDisabled: true,
HibernationPollPeriod: 1 * time.Second,
}, logger.TestLogger(t))`
$DIR/core/services/fluxmonitorv2/poll_manager_test.go: `.TestLogger(t)`
$DIR/core/services/fluxmonitorv2/poll_manager_test.go: `.Start(true, flux_aggregator_wrapper.OracleRoundState{
StartedAt: uint64(time.Now().Unix()),
Timeout: 1, // in seconds
})`
$DIR/core/services/fluxmonitorv2/poll_manager_test.go: `.Now()`
$DIR/core/services/fluxmonitorv2/poll_manager_test.go: `.Unix()`
$DIR/core/services/fluxmonitorv2/poll_manager_test.go: `.Cleanup(pm.Stop)`
$DIR/core/services/fluxmonitorv2/poll_manager_test.go: `.NewPollManager(fluxmonitorv2.PollManagerConfig{
PollTickerInterval: pollTickerDefaultDuration,
PollTickerDisabled: false,
IdleTimerPeriod: idleTickerDefaultDuration,
IdleTimerDisabled: false,
HibernationPollPeriod: 24 * time.Hour,
}, logger.TestLogger(t))`
$DIR/core/services/fluxmonitorv2/poll_manager_test.go: `.TestLogger(t)`
$DIR/core/services/fluxmonitorv2/poll_manager_test.go: `.Cleanup(pm.Stop)`
$DIR/core/services/fluxmonitorv2/poll_manager_test.go: `.Start(true, flux_aggregator_wrapper.OracleRoundState{
StartedAt: uint64(time.Now().Unix()),
Timeout: 1, // in seconds
})`
$DIR/core/services/fluxmonitorv2/poll_manager_test.go: `.Now()`
$DIR/core/services/fluxmonitorv2/poll_manager_test.go: `.Unix()`
$DIR/core/services/fluxmonitorv2/poll_manager_test.go: `.Awaken(flux_aggregator_wrapper.OracleRoundState{
StartedAt: uint64(time.Now().Unix()),
Timeout: 1,
})`
$DIR/core/services/fluxmonitorv2/poll_manager_test.go: `.Now()`
$DIR/core/services/fluxmonitorv2/poll_manager_test.go: `.Unix()`
$DIR/core/services/fluxmonitorv2/poll_manager_test.go: `.Start(false, flux_aggregator_wrapper.OracleRoundState{
StartedAt: uint64(time.Now().Unix()),
Timeout: 1,
})`
$DIR/core/services/fluxmonitorv2/poll_manager_test.go: `.Now()`
$DIR/core/services/fluxmonitorv2/poll_manager_test.go: `.Unix()`
$DIR/core/services/fluxmonitorv2/poll_manager_test.go: `.Cleanup(pm.Stop)`
$DIR/core/services/fluxmonitorv2/poll_manager_test.go: `.Hibernate()`
$DIR/core/services/fluxmonitorv2/poll_manager_test.go: `.Run(tc.name, func(t *testing.T) {
t.Parallel()
pm, err := fluxmonitorv2.NewPollManager(fluxmonitorv2.PollManagerConfig{
IsHibernating: tc.isHibernating,
HibernationPollPeriod: 24 * time.Hour,
PollTickerInterval: pollTickerDefaultDuration,
PollTickerDisabled: tc.pollTickerDisabled,
IdleTimerPeriod: idleTickerDefaultDuration,
IdleTimerDisabled: tc.idleTimerDisabled,
}, logger.TestLogger(t))
require.NoError(t, err)
assert.Equal(t, tc.want, pm.ShouldPerformInitialPoll())
})`
$DIR/core/services/fluxmonitorv2/poll_manager_test.go: `.NewPollManager(fluxmonitorv2.PollManagerConfig{
IsHibernating: tc.isHibernating,
HibernationPollPeriod: 24 * time.Hour,
PollTickerInterval: pollTickerDefaultDuration,
PollTickerDisabled: tc.pollTickerDisabled,
IdleTimerPeriod: idleTickerDefaultDuration,
IdleTimerDisabled: tc.idleTimerDisabled,
}, logger.TestLogger(t))`
$DIR/core/services/fluxmonitorv2/poll_manager_test.go: `.TestLogger(t)`
$DIR/core/services/fluxmonitorv2/poll_manager_test.go: `.Start(false, flux_aggregator_wrapper.OracleRoundState{
StartedAt: uint64(time.Now().Unix()),
Timeout: 1,
})`
$DIR/core/services/fluxmonitorv2/poll_manager_test.go: `.Now()`
$DIR/core/services/fluxmonitorv2/poll_manager_test.go: `.Unix()`
$DIR/core/services/fluxmonitorv2/poll_manager_test.go: `.Stop()`
$DIR/core/services/fluxmonitorv2/poll_manager_test.go: `.Start(false, flux_aggregator_wrapper.OracleRoundState{
StartedAt: uint64(time.Now().Unix()),
Timeout: 1,
})`
$DIR/core/services/fluxmonitorv2/poll_manager_test.go: `.Now()`
$DIR/core/services/fluxmonitorv2/poll_manager_test.go: `.Unix()`
$DIR/core/services/fluxmonitorv2/poll_manager_test.go: `.Cleanup(pm.Stop)`
$DIR/core/services/fluxmonitorv2/poll_manager_test.go: `.ResetIdleTimer(uint64(time.Now().Unix()) + 1)`
$DIR/core/services/fluxmonitorv2/poll_manager_test.go: `.Now()`
$DIR/core/services/fluxmonitorv2/poll_manager_test.go: `.Unix()`
$DIR/core/services/fluxmonitorv2/poll_manager_test.go: `.Start(true, flux_aggregator_wrapper.OracleRoundState{
StartedAt: uint64(time.Now().Unix()),
Timeout: 1, // in seconds
})`
$DIR/core/services/fluxmonitorv2/poll_manager_test.go: `.Now()`
$DIR/core/services/fluxmonitorv2/poll_manager_test.go: `.Unix()`
$DIR/core/services/fluxmonitorv2/poll_manager_test.go: `.Cleanup(pm.Stop)`
$DIR/core/services/fluxmonitorv2/poll_manager_test.go: `.ResetIdleTimer(uint64(time.Now().Unix()))`
$DIR/core/services/fluxmonitorv2/poll_manager_test.go: `.Now()`
$DIR/core/services/fluxmonitorv2/poll_manager_test.go: `.Unix()`
$DIR/core/services/fluxmonitorv2/poll_manager_test.go: `.Start(false, flux_aggregator_wrapper.OracleRoundState{
StartedAt: uint64(time.Now().Unix()),
Timeout: 1,
})`
$DIR/core/services/fluxmonitorv2/poll_manager_test.go: `.Now()`
$DIR/core/services/fluxmonitorv2/poll_manager_test.go: `.Unix()`
$DIR/core/services/fluxmonitorv2/poll_manager_test.go: `.Cleanup(pm.Stop)`
$DIR/core/services/fluxmonitorv2/poll_manager_test.go: `.Reset(flux_aggregator_wrapper.OracleRoundState{
StartedAt: uint64(time.Now().Unix()),
Timeout: 1,
})`
$DIR/core/services/fluxmonitorv2/poll_manager_test.go: `.Now()`
$DIR/core/services/fluxmonitorv2/poll_manager_test.go: `.Unix()`
$DIR/core/services/fluxmonitorv2/poll_manager_test.go: `.Start(true, flux_aggregator_wrapper.OracleRoundState{
StartedAt: uint64(time.Now().Unix()),
Timeout: 1, // in seconds
})`
$DIR/core/services/fluxmonitorv2/poll_manager_test.go: `.Now()`
$DIR/core/services/fluxmonitorv2/poll_manager_test.go: `.Unix()`
$DIR/core/services/fluxmonitorv2/poll_manager_test.go: `.Cleanup(pm.Stop)`
$DIR/core/services/fluxmonitorv2/poll_manager_test.go: `.Reset(flux_aggregator_wrapper.OracleRoundState{
StartedAt: uint64(time.Now().Unix()),
Timeout: 1, // in seconds
})`
$DIR/core/services/fluxmonitorv2/poll_manager_test.go: `.Now()`
$DIR/core/services/fluxmonitorv2/poll_manager_test.go: `.Unix()`
$DIR/core/services/fluxmonitorv2/submission_checker_test.go: `t.Run(tc.name, func(t *testing.T) {
t.Parallel()
assert.Equal(t, tc.want, checker.IsValid(tc.answer))
})`
$DIR/core/services/fluxmonitorv2/submission_checker_test.go: `.NewFromFloat(1)`
$DIR/core/services/fluxmonitorv2/submission_checker_test.go: `.NewFromFloat(2)`
$DIR/core/services/fluxmonitorv2/submission_checker_test.go: `.NewFromFloat(3)`
$DIR/core/services/fluxmonitorv2/submission_checker_test.go: `.NewFromFloat(0)`
$DIR/core/services/fluxmonitorv2/submission_checker_test.go: `.NewFromFloat(4)`
$DIR/core/services/fluxmonitorv2/submission_checker_test.go: `.NewSubmissionChecker(
big.NewInt(1),
big.NewInt(3),
)`
$DIR/core/services/fluxmonitorv2/submission_checker_test.go: `.NewInt(1)`
$DIR/core/services/fluxmonitorv2/submission_checker_test.go: `.NewInt(3)`
$DIR/core/services/fluxmonitorv2/submission_checker_test.go: `.Run(tc.name, func(t *testing.T) {
t.Parallel()
assert.Equal(t, tc.want, checker.IsValid(tc.answer))
})`
$DIR/core/services/fluxmonitorv2/validate_test.go: `t.Run(tc.name, func(t *testing.T) {
s, err := ValidatedFluxMonitorSpec(testcfg{}, tc.toml)
tc.assertion(t, s, err)
})`
$DIR/core/services/fluxmonitorv2/validate_test.go: `tc.assertion(t, s, err)`
$DIR/core/services/fluxmonitorv2/validate_test.go: `.Run(tc.name, func(t *testing.T) {
s, err := ValidatedFluxMonitorSpec(testcfg{}, tc.toml)
tc.assertion(t, s, err)
})`
$DIR/core/services/fluxmonitorv2/validate_test.go: `.assertion(t, s, err)`
$DIR/core/services/functions/connector_handler_test.go: `offchainTransmitter.On("ReportChannel", mock.Anything).Return(reportCh)`
$DIR/core/services/functions/connector_handler_test.go: `allowlist.On("Start", mock.Anything).Return(nil)`
$DIR/core/services/functions/connector_handler_test.go: `allowlist.On("Close", mock.Anything).Return(nil)`
$DIR/core/services/functions/connector_handler_test.go: `subscriptions.On("Start", mock.Anything).Return(nil)`
$DIR/core/services/functions/connector_handler_test.go: `subscriptions.On("Close", mock.Anything).Return(nil)`
$DIR/core/services/functions/connector_handler_test.go: `handler.SetConnector(connector)`
$DIR/core/services/functions/connector_handler_test.go: `err = handler.Start(testutils.Context(t))`
$DIR/core/services/functions/connector_handler_test.go: `t.Cleanup(func() {
assert.NoError(t, handler.Close())
})`
$DIR/core/services/functions/connector_handler_test.go: `t.Run("Sign", func(t *testing.T) {
signature, err := handler.Sign([]byte("test"))
require.NoError(t, err)
signer, err := common.ExtractSigner(signature, []byte("test"))
require.NoError(t, err)
require.Equal(t, addr.Bytes(), signer)
})`
$DIR/core/services/functions/connector_handler_test.go: `t.Run("HandleGatewayMessage", func(t *testing.T) {
t.Run("secrets_list", func(t *testing.T) {
msg := api.Message{
Body: api.MessageBody{
DonId: "fun4",
MessageId: "1",
Method: "secrets_list",
Sender: addr.Hex(),
},
}
require.NoError(t, msg.Sign(privateKey))
ctx := testutils.Context(t)
snapshot := []*s4.SnapshotRow{
{SlotId: 1, Version: 1, Expiration: 1},
{SlotId: 2, Version: 2, Expiration: 2},
}
storage.On("List", ctx, addr).Return(snapshot, nil).Once()
allowlist.On("Allow", addr).Return(true).Once()
connector.On("SendToGateway", ctx, "gw1", mock.Anything).Run(func(args mock.Arguments) {
msg, ok := args[2].(*api.Message)
require.True(t, ok)
require.Equal(t, `{"success":true,"rows":[{"slot_id":1,"version":1,"expiration":1},{"slot_id":2,"version":2,"expiration":2}]}`, string(msg.Body.Payload))
}).Return(nil).Once()
handler.HandleGatewayMessage(ctx, "gw1", &msg)
t.Run("orm error", func(t *testing.T) {
storage.On("List", ctx, addr).Return(nil, errors.New("boom")).Once()
allowlist.On("Allow", addr).Return(true).Once()
connector.On("SendToGateway", ctx, "gw1", mock.Anything).Run(func(args mock.Arguments) {
msg, ok := args[2].(*api.Message)
require.True(t, ok)
require.Equal(t, `{"success":false,"error_message":"Failed to list secrets: boom"}`, string(msg.Body.Payload))
}).Return(nil).Once()
handler.HandleGatewayMessage(ctx, "gw1", &msg)
})
t.Run("not allowed", func(t *testing.T) {
allowlist.On("Allow", addr).Return(false).Once()
handler.HandleGatewayMessage(ctx, "gw1", &msg)
})
})
t.Run("secrets_set", func(t *testing.T) {
ctx := testutils.Context(t)
key := s4.Key{
Address: addr,
SlotId: 3,
Version: 4,
}
record := s4.Record{
Expiration: 5,
Payload: []byte("test"),
}
signature, err := s4.NewEnvelopeFromRecord(&key, &record).Sign(privateKey)
signatureB64 := base64.StdEncoding.EncodeToString(signature)
require.NoError(t, err)
msg := api.Message{
Body: api.MessageBody{
DonId: "fun4",
MessageId: "1",
Method: "secrets_set",
Sender: addr.Hex(),
Payload: json.RawMessage(`{"slot_id":3,"version":4,"expiration":5,"payload":"dGVzdA==","signature":"` + signatureB64 + `"}`),
},
}
require.NoError(t, msg.Sign(privateKey))
storage.On("Put", ctx, &key, &record, signature).Return(nil).Once()
allowlist.On("Allow", addr).Return(true).Once()
subscriptions.On("GetMaxUserBalance", mock.Anything).Return(big.NewInt(100), nil).Once()
connector.On("SendToGateway", ctx, "gw1", mock.Anything).Run(func(args mock.Arguments) {
msg, ok := args[2].(*api.Message)
require.True(t, ok)
require.Equal(t, `{"success":true}`, string(msg.Body.Payload))
}).Return(nil).Once()
handler.HandleGatewayMessage(ctx, "gw1", &msg)
t.Run("orm error", func(t *testing.T) {
storage.On("Put", ctx, mock.Anything, mock.Anything, mock.Anything).Return(errors.New("boom")).Once()
allowlist.On("Allow", addr).Return(true).Once()
subscriptions.On("GetMaxUserBalance", mock.Anything).Return(big.NewInt(100), nil).Once()
connector.On("SendToGateway", ctx, "gw1", mock.Anything).Run(func(args mock.Arguments) {
msg, ok := args[2].(*api.Message)
require.True(t, ok)
require.Equal(t, `{"success":false,"error_message":"Failed to set secret: boom"}`, string(msg.Body.Payload))
}).Return(nil).Once()
handler.HandleGatewayMessage(ctx, "gw1", &msg)
})
t.Run("missing signature", func(t *testing.T) {
msg.Body.Payload = json.RawMessage(`{"slot_id":3,"version":4,"expiration":5,"payload":"dGVzdA=="}`)
require.NoError(t, msg.Sign(privateKey))
storage.On("Put", ctx, mock.Anything, mock.Anything, mock.Anything).Return(s4.ErrWrongSignature).Once()
allowlist.On("Allow", addr).Return(true).Once()
subscriptions.On("GetMaxUserBalance", mock.Anything).Return(big.NewInt(100), nil).Once()
connector.On("SendToGateway", ctx, "gw1", mock.Anything).Run(func(args mock.Arguments) {
msg, ok := args[2].(*api.Message)
require.True(t, ok)
require.Equal(t, `{"success":false,"error_message":"Failed to set secret: wrong signature"}`, string(msg.Body.Payload))
}).Return(nil).Once()
handler.HandleGatewayMessage(ctx, "gw1", &msg)
})
t.Run("malformed request", func(t *testing.T) {
msg.Body.Payload = json.RawMessage(`{sdfgdfgoscsicosd:sdf:::sdf ::; xx}`)
require.NoError(t, msg.Sign(privateKey))
allowlist.On("Allow", addr).Return(true).Once()
subscriptions.On("GetMaxUserBalance", mock.Anything).Return(big.NewInt(100), nil).Once()
connector.On("SendToGateway", ctx, "gw1", mock.Anything).Run(func(args mock.Arguments) {
msg, ok := args[2].(*api.Message)
require.True(t, ok)
require.Equal(t, `{"success":false,"error_message":"Bad request to set secret: invalid character 's' looking for beginning of object key string"}`, string(msg.Body.Payload))
}).Return(nil).Once()
handler.HandleGatewayMessage(ctx, "gw1", &msg)
})
t.Run("insufficient balance", func(t *testing.T) {
allowlist.On("Allow", addr).Return(true).Once()
subscriptions.On("GetMaxUserBalance", mock.Anything).Return(big.NewInt(0), nil).Once()
connector.On("SendToGateway", ctx, "gw1", mock.Anything).Run(func(args mock.Arguments) {
msg, ok := args[2].(*api.Message)
require.True(t, ok)
require.Equal(t, `{"success":false,"error_message":"user subscription has insufficient balance"}`, string(msg.Body.Payload))
}).Return(nil).Once()
handler.HandleGatewayMessage(ctx, "gw1", &msg)
})
})
t.Run("unsupported method", func(t *testing.T) {
msg := api.Message{
Body: api.MessageBody{
DonId: "fun4",
MessageId: "1",
Method: "foobar",
Sender: addr.Hex(),
Payload: []byte("whatever"),
},
}
require.NoError(t, msg.Sign(privateKey))
allowlist.On("Allow", addr).Return(true).Once()
handler.HandleGatewayMessage(testutils.Context(t), "gw1", &msg)
})
})`
$DIR/core/services/functions/connector_handler_test.go: `t.Run("secrets_list", func(t *testing.T) {
msg := api.Message{
Body: api.MessageBody{
DonId: "fun4",
MessageId: "1",
Method: "secrets_list",
Sender: addr.Hex(),
},
}
require.NoError(t, msg.Sign(privateKey))
ctx := testutils.Context(t)
snapshot := []*s4.SnapshotRow{
{SlotId: 1, Version: 1, Expiration: 1},
{SlotId: 2, Version: 2, Expiration: 2},
}
storage.On("List", ctx, addr).Return(snapshot, nil).Once()
allowlist.On("Allow", addr).Return(true).Once()
connector.On("SendToGateway", ctx, "gw1", mock.Anything).Run(func(args mock.Arguments) {
msg, ok := args[2].(*api.Message)
require.True(t, ok)
require.Equal(t, `{"success":true,"rows":[{"slot_id":1,"version":1,"expiration":1},{"slot_id":2,"version":2,"expiration":2}]}`, string(msg.Body.Payload))
}).Return(nil).Once()
handler.HandleGatewayMessage(ctx, "gw1", &msg)
t.Run("orm error", func(t *testing.T) {
storage.On("List", ctx, addr).Return(nil, errors.New("boom")).Once()
allowlist.On("Allow", addr).Return(true).Once()
connector.On("SendToGateway", ctx, "gw1", mock.Anything).Run(func(args mock.Arguments) {
msg, ok := args[2].(*api.Message)
require.True(t, ok)
require.Equal(t, `{"success":false,"error_message":"Failed to list secrets: boom"}`, string(msg.Body.Payload))
}).Return(nil).Once()
handler.HandleGatewayMessage(ctx, "gw1", &msg)
})
t.Run("not allowed", func(t *testing.T) {
allowlist.On("Allow", addr).Return(false).Once()
handler.HandleGatewayMessage(ctx, "gw1", &msg)
})
})`
$DIR/core/services/functions/connector_handler_test.go: `storage.On("List", ctx, addr).Return(snapshot, nil).Once()`
$DIR/core/services/functions/connector_handler_test.go: `allowlist.On("Allow", addr).Return(true).Once()`
$DIR/core/services/functions/connector_handler_test.go: `connector.On("SendToGateway", ctx, "gw1", mock.Anything).Run(func(args mock.Arguments) {
msg, ok := args[2].(*api.Message)
require.True(t, ok)
require.Equal(t, `{"success":true,"rows":[{"slot_id":1,"version":1,"expiration":1},{"slot_id":2,"version":2,"expiration":2}]}`, string(msg.Body.Payload))
}).Return(nil).Once()`
$DIR/core/services/functions/connector_handler_test.go: `handler.HandleGatewayMessage(ctx, "gw1", &msg)`
$DIR/core/services/functions/connector_handler_test.go: `t.Run("orm error", func(t *testing.T) {
storage.On("List", ctx, addr).Return(nil, errors.New("boom")).Once()
allowlist.On("Allow", addr).Return(true).Once()
connector.On("SendToGateway", ctx, "gw1", mock.Anything).Run(func(args mock.Arguments) {
msg, ok := args[2].(*api.Message)
require.True(t, ok)
require.Equal(t, `{"success":false,"error_message":"Failed to list secrets: boom"}`, string(msg.Body.Payload))
}).Return(nil).Once()
handler.HandleGatewayMessage(ctx, "gw1", &msg)
})`
$DIR/core/services/functions/connector_handler_test.go: `storage.On("List", ctx, addr).Return(nil, errors.New("boom")).Once()`
$DIR/core/services/functions/connector_handler_test.go: `allowlist.On("Allow", addr).Return(true).Once()`
$DIR/core/services/functions/connector_handler_test.go: `connector.On("SendToGateway", ctx, "gw1", mock.Anything).Run(func(args mock.Arguments) {
msg, ok := args[2].(*api.Message)
require.True(t, ok)
require.Equal(t, `{"success":false,"error_message":"Failed to list secrets: boom"}`, string(msg.Body.Payload))
}).Return(nil).Once()`
$DIR/core/services/functions/connector_handler_test.go: `handler.HandleGatewayMessage(ctx, "gw1", &msg)`
$DIR/core/services/functions/connector_handler_test.go: `t.Run("not allowed", func(t *testing.T) {
allowlist.On("Allow", addr).Return(false).Once()
handler.HandleGatewayMessage(ctx, "gw1", &msg)
})`
$DIR/core/services/functions/connector_handler_test.go: `allowlist.On("Allow", addr).Return(false).Once()`
$DIR/core/services/functions/connector_handler_test.go: `handler.HandleGatewayMessage(ctx, "gw1", &msg)`
$DIR/core/services/functions/connector_handler_test.go: `t.Run("secrets_set", func(t *testing.T) {
ctx := testutils.Context(t)
key := s4.Key{
Address: addr,
SlotId: 3,
Version: 4,
}
record := s4.Record{
Expiration: 5,
Payload: []byte("test"),
}
signature, err := s4.NewEnvelopeFromRecord(&key, &record).Sign(privateKey)
signatureB64 := base64.StdEncoding.EncodeToString(signature)
require.NoError(t, err)
msg := api.Message{
Body: api.MessageBody{
DonId: "fun4",
MessageId: "1",
Method: "secrets_set",
Sender: addr.Hex(),
Payload: json.RawMessage(`{"slot_id":3,"version":4,"expiration":5,"payload":"dGVzdA==","signature":"` + signatureB64 + `"}`),
},
}
require.NoError(t, msg.Sign(privateKey))
storage.On("Put", ctx, &key, &record, signature).Return(nil).Once()
allowlist.On("Allow", addr).Return(true).Once()
subscriptions.On("GetMaxUserBalance", mock.Anything).Return(big.NewInt(100), nil).Once()
connector.On("SendToGateway", ctx, "gw1", mock.Anything).Run(func(args mock.Arguments) {
msg, ok := args[2].(*api.Message)
require.True(t, ok)
require.Equal(t, `{"success":true}`, string(msg.Body.Payload))
}).Return(nil).Once()
handler.HandleGatewayMessage(ctx, "gw1", &msg)
t.Run("orm error", func(t *testing.T) {
storage.On("Put", ctx, mock.Anything, mock.Anything, mock.Anything).Return(errors.New("boom")).Once()
allowlist.On("Allow", addr).Return(true).Once()
subscriptions.On("GetMaxUserBalance", mock.Anything).Return(big.NewInt(100), nil).Once()
connector.On("SendToGateway", ctx, "gw1", mock.Anything).Run(func(args mock.Arguments) {
msg, ok := args[2].(*api.Message)
require.True(t, ok)
require.Equal(t, `{"success":false,"error_message":"Failed to set secret: boom"}`, string(msg.Body.Payload))
}).Return(nil).Once()
handler.HandleGatewayMessage(ctx, "gw1", &msg)
})
t.Run("missing signature", func(t *testing.T) {
msg.Body.Payload = json.RawMessage(`{"slot_id":3,"version":4,"expiration":5,"payload":"dGVzdA=="}`)
require.NoError(t, msg.Sign(privateKey))
storage.On("Put", ctx, mock.Anything, mock.Anything, mock.Anything).Return(s4.ErrWrongSignature).Once()
allowlist.On("Allow", addr).Return(true).Once()
subscriptions.On("GetMaxUserBalance", mock.Anything).Return(big.NewInt(100), nil).Once()
connector.On("SendToGateway", ctx, "gw1", mock.Anything).Run(func(args mock.Arguments) {
msg, ok := args[2].(*api.Message)
require.True(t, ok)
require.Equal(t, `{"success":false,"error_message":"Failed to set secret: wrong signature"}`, string(msg.Body.Payload))
}).Return(nil).Once()
handler.HandleGatewayMessage(ctx, "gw1", &msg)
})
t.Run("malformed request", func(t *testing.T) {
msg.Body.Payload = json.RawMessage(`{sdfgdfgoscsicosd:sdf:::sdf ::; xx}`)
require.NoError(t, msg.Sign(privateKey))
allowlist.On("Allow", addr).Return(true).Once()
subscriptions.On("GetMaxUserBalance", mock.Anything).Return(big.NewInt(100), nil).Once()
connector.On("SendToGateway", ctx, "gw1", mock.Anything).Run(func(args mock.Arguments) {
msg, ok := args[2].(*api.Message)
require.True(t, ok)
require.Equal(t, `{"success":false,"error_message":"Bad request to set secret: invalid character 's' looking for beginning of object key string"}`, string(msg.Body.Payload))
}).Return(nil).Once()
handler.HandleGatewayMessage(ctx, "gw1", &msg)
})
t.Run("insufficient balance", func(t *testing.T) {
allowlist.On("Allow", addr).Return(true).Once()
subscriptions.On("GetMaxUserBalance", mock.Anything).Return(big.NewInt(0), nil).Once()
connector.On("SendToGateway", ctx, "gw1", mock.Anything).Run(func(args mock.Arguments) {
msg, ok := args[2].(*api.Message)
require.True(t, ok)
require.Equal(t, `{"success":false,"error_message":"user subscription has insufficient balance"}`, string(msg.Body.Payload))
}).Return(nil).Once()
handler.HandleGatewayMessage(ctx, "gw1", &msg)
})
})`
$DIR/core/services/functions/connector_handler_test.go: `storage.On("Put", ctx, &key, &record, signature).Return(nil).Once()`
$DIR/core/services/functions/connector_handler_test.go: `allowlist.On("Allow", addr).Return(true).Once()`
$DIR/core/services/functions/connector_handler_test.go: `subscriptions.On("GetMaxUserBalance", mock.Anything).Return(big.NewInt(100), nil).Once()`
$DIR/core/services/functions/connector_handler_test.go: `connector.On("SendToGateway", ctx, "gw1", mock.Anything).Run(func(args mock.Arguments) {
msg, ok := args[2].(*api.Message)
require.True(t, ok)
require.Equal(t, `{"success":true}`, string(msg.Body.Payload))
}).Return(nil).Once()`
$DIR/core/services/functions/connector_handler_test.go: `handler.HandleGatewayMessage(ctx, "gw1", &msg)`
$DIR/core/services/functions/connector_handler_test.go: `t.Run("orm error", func(t *testing.T) {
storage.On("Put", ctx, mock.Anything, mock.Anything, mock.Anything).Return(errors.New("boom")).Once()
allowlist.On("Allow", addr).Return(true).Once()
subscriptions.On("GetMaxUserBalance", mock.Anything).Return(big.NewInt(100), nil).Once()
connector.On("SendToGateway", ctx, "gw1", mock.Anything).Run(func(args mock.Arguments) {
msg, ok := args[2].(*api.Message)
require.True(t, ok)
require.Equal(t, `{"success":false,"error_message":"Failed to set secret: boom"}`, string(msg.Body.Payload))
}).Return(nil).Once()
handler.HandleGatewayMessage(ctx, "gw1", &msg)
})`
$DIR/core/services/functions/connector_handler_test.go: `storage.On("Put", ctx, mock.Anything, mock.Anything, mock.Anything).Return(errors.New("boom")).Once()`
$DIR/core/services/functions/connector_handler_test.go: `allowlist.On("Allow", addr).Return(true).Once()`
$DIR/core/services/functions/connector_handler_test.go: `subscriptions.On("GetMaxUserBalance", mock.Anything).Return(big.NewInt(100), nil).Once()`
$DIR/core/services/functions/connector_handler_test.go: `connector.On("SendToGateway", ctx, "gw1", mock.Anything).Run(func(args mock.Arguments) {
msg, ok := args[2].(*api.Message)
require.True(t, ok)
require.Equal(t, `{"success":false,"error_message":"Failed to set secret: boom"}`, string(msg.Body.Payload))
}).Return(nil).Once()`
$DIR/core/services/functions/connector_handler_test.go: `handler.HandleGatewayMessage(ctx, "gw1", &msg)`
$DIR/core/services/functions/connector_handler_test.go: `t.Run("missing signature", func(t *testing.T) {
msg.Body.Payload = json.RawMessage(`{"slot_id":3,"version":4,"expiration":5,"payload":"dGVzdA=="}`)
require.NoError(t, msg.Sign(privateKey))
storage.On("Put", ctx, mock.Anything, mock.Anything, mock.Anything).Return(s4.ErrWrongSignature).Once()
allowlist.On("Allow", addr).Return(true).Once()
subscriptions.On("GetMaxUserBalance", mock.Anything).Return(big.NewInt(100), nil).Once()
connector.On("SendToGateway", ctx, "gw1", mock.Anything).Run(func(args mock.Arguments) {
msg, ok := args[2].(*api.Message)
require.True(t, ok)
require.Equal(t, `{"success":false,"error_message":"Failed to set secret: wrong signature"}`, string(msg.Body.Payload))
}).Return(nil).Once()
handler.HandleGatewayMessage(ctx, "gw1", &msg)
})`
$DIR/core/services/functions/connector_handler_test.go: `msg.Body.Payload = json.RawMessage(`{"slot_id":3,"version":4,"expiration":5,"payload":"dGVzdA=="}`)`
$DIR/core/services/functions/connector_handler_test.go: `storage.On("Put", ctx, mock.Anything, mock.Anything, mock.Anything).Return(s4.ErrWrongSignature).Once()`
$DIR/core/services/functions/connector_handler_test.go: `allowlist.On("Allow", addr).Return(true).Once()`
$DIR/core/services/functions/connector_handler_test.go: `subscriptions.On("GetMaxUserBalance", mock.Anything).Return(big.NewInt(100), nil).Once()`
$DIR/core/services/functions/connector_handler_test.go: `connector.On("SendToGateway", ctx, "gw1", mock.Anything).Run(func(args mock.Arguments) {
msg, ok := args[2].(*api.Message)
require.True(t, ok)
require.Equal(t, `{"success":false,"error_message":"Failed to set secret: wrong signature"}`, string(msg.Body.Payload))
}).Return(nil).Once()`
$DIR/core/services/functions/connector_handler_test.go: `handler.HandleGatewayMessage(ctx, "gw1", &msg)`
$DIR/core/services/functions/connector_handler_test.go: `t.Run("malformed request", func(t *testing.T) {
msg.Body.Payload = json.RawMessage(`{sdfgdfgoscsicosd:sdf:::sdf ::; xx}`)
require.NoError(t, msg.Sign(privateKey))
allowlist.On("Allow", addr).Return(true).Once()
subscriptions.On("GetMaxUserBalance", mock.Anything).Return(big.NewInt(100), nil).Once()
connector.On("SendToGateway", ctx, "gw1", mock.Anything).Run(func(args mock.Arguments) {
msg, ok := args[2].(*api.Message)
require.True(t, ok)
require.Equal(t, `{"success":false,"error_message":"Bad request to set secret: invalid character 's' looking for beginning of object key string"}`, string(msg.Body.Payload))
}).Return(nil).Once()
handler.HandleGatewayMessage(ctx, "gw1", &msg)
})`
$DIR/core/services/functions/connector_handler_test.go: `msg.Body.Payload = json.RawMessage(`{sdfgdfgoscsicosd:sdf:::sdf ::; xx}`)`
$DIR/core/services/functions/connector_handler_test.go: `allowlist.On("Allow", addr).Return(true).Once()`
$DIR/core/services/functions/connector_handler_test.go: `subscriptions.On("GetMaxUserBalance", mock.Anything).Return(big.NewInt(100), nil).Once()`
$DIR/core/services/functions/connector_handler_test.go: `connector.On("SendToGateway", ctx, "gw1", mock.Anything).Run(func(args mock.Arguments) {
msg, ok := args[2].(*api.Message)
require.True(t, ok)
require.Equal(t, `{"success":false,"error_message":"Bad request to set secret: invalid character 's' looking for beginning of object key string"}`, string(msg.Body.Payload))
}).Return(nil).Once()`
$DIR/core/services/functions/connector_handler_test.go: `handler.HandleGatewayMessage(ctx, "gw1", &msg)`
$DIR/core/services/functions/connector_handler_test.go: `t.Run("insufficient balance", func(t *testing.T) {
allowlist.On("Allow", addr).Return(true).Once()
subscriptions.On("GetMaxUserBalance", mock.Anything).Return(big.NewInt(0), nil).Once()
connector.On("SendToGateway", ctx, "gw1", mock.Anything).Run(func(args mock.Arguments) {
msg, ok := args[2].(*api.Message)
require.True(t, ok)
require.Equal(t, `{"success":false,"error_message":"user subscription has insufficient balance"}`, string(msg.Body.Payload))
}).Return(nil).Once()
handler.HandleGatewayMessage(ctx, "gw1", &msg)
})`
$DIR/core/services/functions/connector_handler_test.go: `allowlist.On("Allow", addr).Return(true).Once()`
$DIR/core/services/functions/connector_handler_test.go: `subscriptions.On("GetMaxUserBalance", mock.Anything).Return(big.NewInt(0), nil).Once()`
$DIR/core/services/functions/connector_handler_test.go: `connector.On("SendToGateway", ctx, "gw1", mock.Anything).Run(func(args mock.Arguments) {
msg, ok := args[2].(*api.Message)
require.True(t, ok)
require.Equal(t, `{"success":false,"error_message":"user subscription has insufficient balance"}`, string(msg.Body.Payload))
}).Return(nil).Once()`
$DIR/core/services/functions/connector_handler_test.go: `handler.HandleGatewayMessage(ctx, "gw1", &msg)`
$DIR/core/services/functions/connector_handler_test.go: `t.Run("unsupported method", func(t *testing.T) {
msg := api.Message{
Body: api.MessageBody{
DonId: "fun4",
MessageId: "1",
Method: "foobar",
Sender: addr.Hex(),
Payload: []byte("whatever"),
},
}
require.NoError(t, msg.Sign(privateKey))
allowlist.On("Allow", addr).Return(true).Once()
handler.HandleGatewayMessage(testutils.Context(t), "gw1", &msg)
})`
$DIR/core/services/functions/connector_handler_test.go: `allowlist.On("Allow", addr).Return(true).Once()`
$DIR/core/services/functions/connector_handler_test.go: `handler.HandleGatewayMessage(testutils.Context(t), "gw1", &msg)`
$DIR/core/services/functions/connector_handler_test.go: `t.Run("heartbeat success", func(t *testing.T) {
ctx := testutils.Context(t)
msg, internalId := newOffchainRequest(t, addr.Bytes(), 0)
require.NoError(t, msg.Sign(privateKey))
// first call to trigger the request
var response functions.HeartbeatResponse
allowlist.On("Allow", addr).Return(true).Once()
listener.On("HandleOffchainRequest", mock.Anything, mock.Anything).Return(nil).Once()
connector.On("SendToGateway", mock.Anything, "gw1", mock.Anything).Run(func(args mock.Arguments) {
respMsg, ok := args[2].(*api.Message)
require.True(t, ok)
require.NoError(t, json.Unmarshal(respMsg.Body.Payload, &response))
require.Equal(t, functions.RequestStatePending, response.Status)
}).Return(nil).Once()
handler.HandleGatewayMessage(ctx, "gw1", msg)
// async response computation
reportCh <- &functions.OffchainResponse{
RequestId: internalId[:],
Result: []byte("ok!"),
}
reportCh <- &functions.OffchainResponse{} // sending second item to make sure the first one got processed
// second call to collect the response
allowlist.On("Allow", addr).Return(true).Once()
connector.On("SendToGateway", mock.Anything, "gw1", mock.Anything).Run(func(args mock.Arguments) {
respMsg, ok := args[2].(*api.Message)
require.True(t, ok)
require.NoError(t, json.Unmarshal(respMsg.Body.Payload, &response))
require.Equal(t, functions.RequestStateComplete, response.Status)
}).Return(nil).Once()
handler.HandleGatewayMessage(ctx, "gw1", msg)
})`
$DIR/core/services/functions/connector_handler_test.go: `allowlist.On("Allow", addr).Return(true).Once()`
$DIR/core/services/functions/connector_handler_test.go: `listener.On("HandleOffchainRequest", mock.Anything, mock.Anything).Return(nil).Once()`
$DIR/core/services/functions/connector_handler_test.go: `connector.On("SendToGateway", mock.Anything, "gw1", mock.Anything).Run(func(args mock.Arguments) {
respMsg, ok := args[2].(*api.Message)
require.True(t, ok)
require.NoError(t, json.Unmarshal(respMsg.Body.Payload, &response))
require.Equal(t, functions.RequestStatePending, response.Status)
}).Return(nil).Once()`
$DIR/core/services/functions/connector_handler_test.go: `handler.HandleGatewayMessage(ctx, "gw1", msg)`
$DIR/core/services/functions/connector_handler_test.go: `reportCh <- &functions.OffchainResponse{
RequestId: internalId[:],
Result: []byte("ok!"),
}`
$DIR/core/services/functions/connector_handler_test.go: `reportCh <- &functions.OffchainResponse{}`
$DIR/core/services/functions/connector_handler_test.go: `allowlist.On("Allow", addr).Return(true).Once()`
$DIR/core/services/functions/connector_handler_test.go: `connector.On("SendToGateway", mock.Anything, "gw1", mock.Anything).Run(func(args mock.Arguments) {
respMsg, ok := args[2].(*api.Message)
require.True(t, ok)
require.NoError(t, json.Unmarshal(respMsg.Body.Payload, &response))
require.Equal(t, functions.RequestStateComplete, response.Status)
}).Return(nil).Once()`
$DIR/core/services/functions/connector_handler_test.go: `handler.HandleGatewayMessage(ctx, "gw1", msg)`
$DIR/core/services/functions/connector_handler_test.go: `t.Run("heartbeat internal error", func(t *testing.T) {
ctx := testutils.Context(t)
msg, _ := newOffchainRequest(t, addr.Bytes(), 0)
require.NoError(t, msg.Sign(privateKey))
// first call to trigger the request
var response functions.HeartbeatResponse
allowlist.On("Allow", addr).Return(true).Once()
listener.On("HandleOffchainRequest", mock.Anything, mock.Anything).Return(errors.New("boom")).Once()
connector.On("SendToGateway", mock.Anything, "gw1", mock.Anything).Return(nil).Once()
handler.HandleGatewayMessage(ctx, "gw1", msg)
// collect the response - should eventually result in an internal error
gomega.NewGomegaWithT(t).Eventually(func() bool {
returnedState := 0
allowlist.On("Allow", addr).Return(true).Once()
connector.On("SendToGateway", mock.Anything, "gw1", mock.Anything).Run(func(args mock.Arguments) {
respMsg, ok := args[2].(*api.Message)
require.True(t, ok)
require.NoError(t, json.Unmarshal(respMsg.Body.Payload, &response))
returnedState = response.Status
}).Return(nil).Once()
handler.HandleGatewayMessage(ctx, "gw1", msg)
return returnedState == functions.RequestStateInternalError
}, testutils.WaitTimeout(t), 50*time.Millisecond).Should(gomega.BeTrue())
})`
$DIR/core/services/functions/connector_handler_test.go: `allowlist.On("Allow", addr).Return(true).Once()`
$DIR/core/services/functions/connector_handler_test.go: `listener.On("HandleOffchainRequest", mock.Anything, mock.Anything).Return(errors.New("boom")).Once()`
$DIR/core/services/functions/connector_handler_test.go: `connector.On("SendToGateway", mock.Anything, "gw1", mock.Anything).Return(nil).Once()`
$DIR/core/services/functions/connector_handler_test.go: `handler.HandleGatewayMessage(ctx, "gw1", msg)`
$DIR/core/services/functions/connector_handler_test.go: `gomega.NewGomegaWithT(t).Eventually(func() bool {
returnedState := 0
allowlist.On("Allow", addr).Return(true).Once()
connector.On("SendToGateway", mock.Anything, "gw1", mock.Anything).Run(func(args mock.Arguments) {
respMsg, ok := args[2].(*api.Message)
require.True(t, ok)
require.NoError(t, json.Unmarshal(respMsg.Body.Payload, &response))
returnedState = response.Status
}).Return(nil).Once()
handler.HandleGatewayMessage(ctx, "gw1", msg)
return returnedState == functions.RequestStateInternalError
}, testutils.WaitTimeout(t), 50*time.Millisecond).Should(gomega.BeTrue())`
$DIR/core/services/functions/connector_handler_test.go: `allowlist.On("Allow", addr).Return(true).Once()`
$DIR/core/services/functions/connector_handler_test.go: `connector.On("SendToGateway", mock.Anything, "gw1", mock.Anything).Run(func(args mock.Arguments) {
respMsg, ok := args[2].(*api.Message)
require.True(t, ok)
require.NoError(t, json.Unmarshal(respMsg.Body.Payload, &response))
returnedState = response.Status
}).Return(nil).Once()`
$DIR/core/services/functions/connector_handler_test.go: `returnedState = response.Status`
$DIR/core/services/functions/connector_handler_test.go: `handler.HandleGatewayMessage(ctx, "gw1", msg)`
$DIR/core/services/functions/connector_handler_test.go: `t.Run("heartbeat sender address doesn't match", func(t *testing.T) {
ctx := testutils.Context(t)
msg, _ := newOffchainRequest(t, geth_common.BytesToAddress([]byte("0x1234")).Bytes(), 0)
require.NoError(t, msg.Sign(privateKey))
var response functions.HeartbeatResponse
allowlist.On("Allow", addr).Return(true).Once()
connector.On("SendToGateway", mock.Anything, "gw1", mock.Anything).Run(func(args mock.Arguments) {
respMsg, ok := args[2].(*api.Message)
require.True(t, ok)
require.NoError(t, json.Unmarshal(respMsg.Body.Payload, &response))
require.Equal(t, functions.RequestStateInternalError, response.Status)
}).Return(nil).Once()
handler.HandleGatewayMessage(ctx, "gw1", msg)
})`
$DIR/core/services/functions/connector_handler_test.go: `allowlist.On("Allow", addr).Return(true).Once()`
$DIR/core/services/functions/connector_handler_test.go: `connector.On("SendToGateway", mock.Anything, "gw1", mock.Anything).Run(func(args mock.Arguments) {
respMsg, ok := args[2].(*api.Message)
require.True(t, ok)
require.NoError(t, json.Unmarshal(respMsg.Body.Payload, &response))
require.Equal(t, functions.RequestStateInternalError, response.Status)
}).Return(nil).Once()`
$DIR/core/services/functions/connector_handler_test.go: `handler.HandleGatewayMessage(ctx, "gw1", msg)`
$DIR/core/services/functions/connector_handler_test.go: `allowlist.On("Allow", addr).Return(true).Once()`
$DIR/core/services/functions/connector_handler_test.go: `connector.On("SendToGateway", mock.Anything, "gw1", mock.Anything).Run(func(args mock.Arguments) {
respMsg, ok := args[2].(*api.Message)
require.True(t, ok)
require.NoError(t, json.Unmarshal(respMsg.Body.Payload, &response))
require.Equal(t, functions.RequestStateInternalError, response.Status)
}).Return(nil).Once()`
$DIR/core/services/functions/connector_handler_test.go: `handler.HandleGatewayMessage(ctx, "gw1", msg)`
$DIR/core/services/functions/connector_handler_test.go: `.TestLogger(t)`
$DIR/core/services/functions/connector_handler_test.go: `.NewPrivateKeyAndAddress(t)`
$DIR/core/services/functions/connector_handler_test.go: `.NewStorage(t)`
$DIR/core/services/functions/connector_handler_test.go: `.NewGatewayConnector(t)`
$DIR/core/services/functions/connector_handler_test.go: `.NewOnchainAllowlist(t)`
$DIR/core/services/functions/connector_handler_test.go: `.NewRateLimiter(hc.RateLimiterConfig{GlobalRPS: 100.0, GlobalBurst: 100, PerSenderRPS: 100.0, PerSenderBurst: 100})`
$DIR/core/services/functions/connector_handler_test.go: `.NewOnchainSubscriptions(t)`
$DIR/core/services/functions/connector_handler_test.go: `.NewOffchainTransmitter(t)`
$DIR/core/services/functions/connector_handler_test.go: `.On("ReportChannel", mock.Anything)`
$DIR/core/services/functions/connector_handler_test.go: `.Return(reportCh)`
$DIR/core/services/functions/connector_handler_test.go: `.NewFunctionsListener(t)`
$DIR/core/services/functions/connector_handler_test.go: `.On("Start", mock.Anything)`
$DIR/core/services/functions/connector_handler_test.go: `.Return(nil)`
$DIR/core/services/functions/connector_handler_test.go: `.On("Close", mock.Anything)`
$DIR/core/services/functions/connector_handler_test.go: `.Return(nil)`
$DIR/core/services/functions/connector_handler_test.go: `.On("Start", mock.Anything)`
$DIR/core/services/functions/connector_handler_test.go: `.Return(nil)`
$DIR/core/services/functions/connector_handler_test.go: `.On("Close", mock.Anything)`
$DIR/core/services/functions/connector_handler_test.go: `.Return(nil)`
$DIR/core/services/functions/connector_handler_test.go: `.Hex()`
$DIR/core/services/functions/connector_handler_test.go: `.NewLinkFromJuels(100)`
$DIR/core/services/functions/connector_handler_test.go: `.PubkeyToAddress(privateKey.PublicKey)`
$DIR/core/services/functions/connector_handler_test.go: `.Hex()`
$DIR/core/services/functions/connector_handler_test.go: `.NewFunctionsConnectorHandler(config, privateKey, storage, allowlist, rateLimiter, subscriptions, listener, offchainTransmitter, logger)`
$DIR/core/services/functions/connector_handler_test.go: `.SetConnector(connector)`
$DIR/core/services/functions/connector_handler_test.go: `.Start(testutils.Context(t))`
$DIR/core/services/functions/connector_handler_test.go: `.Context(t)`
$DIR/core/services/functions/connector_handler_test.go: `.Cleanup(func() {
assert.NoError(t, handler.Close())
})`
$DIR/core/services/functions/connector_handler_test.go: `.Run("Sign", func(t *testing.T) {
signature, err := handler.Sign([]byte("test"))
require.NoError(t, err)
signer, err := common.ExtractSigner(signature, []byte("test"))
require.NoError(t, err)
require.Equal(t, addr.Bytes(), signer)
})`
$DIR/core/services/functions/connector_handler_test.go: `.Sign([]byte("test"))`
$DIR/core/services/functions/connector_handler_test.go: `.ExtractSigner(signature, []byte("test"))`
$DIR/core/services/functions/connector_handler_test.go: `.Run("HandleGatewayMessage", func(t *testing.T) {
t.Run("secrets_list", func(t *testing.T) {
msg := api.Message{
Body: api.MessageBody{
DonId: "fun4",
MessageId: "1",
Method: "secrets_list",
Sender: addr.Hex(),
},
}
require.NoError(t, msg.Sign(privateKey))
ctx := testutils.Context(t)
snapshot := []*s4.SnapshotRow{
{SlotId: 1, Version: 1, Expiration: 1},
{SlotId: 2, Version: 2, Expiration: 2},
}
storage.On("List", ctx, addr).Return(snapshot, nil).Once()
allowlist.On("Allow", addr).Return(true).Once()
connector.On("SendToGateway", ctx, "gw1", mock.Anything).Run(func(args mock.Arguments) {
msg, ok := args[2].(*api.Message)
require.True(t, ok)
require.Equal(t, `{"success":true,"rows":[{"slot_id":1,"version":1,"expiration":1},{"slot_id":2,"version":2,"expiration":2}]}`, string(msg.Body.Payload))
}).Return(nil).Once()
handler.HandleGatewayMessage(ctx, "gw1", &msg)
t.Run("orm error", func(t *testing.T) {
storage.On("List", ctx, addr).Return(nil, errors.New("boom")).Once()
allowlist.On("Allow", addr).Return(true).Once()
connector.On("SendToGateway", ctx, "gw1", mock.Anything).Run(func(args mock.Arguments) {
msg, ok := args[2].(*api.Message)
require.True(t, ok)
require.Equal(t, `{"success":false,"error_message":"Failed to list secrets: boom"}`, string(msg.Body.Payload))
}).Return(nil).Once()
handler.HandleGatewayMessage(ctx, "gw1", &msg)
})
t.Run("not allowed", func(t *testing.T) {
allowlist.On("Allow", addr).Return(false).Once()
handler.HandleGatewayMessage(ctx, "gw1", &msg)
})
})
t.Run("secrets_set", func(t *testing.T) {
ctx := testutils.Context(t)
key := s4.Key{
Address: addr,
SlotId: 3,
Version: 4,
}
record := s4.Record{
Expiration: 5,
Payload: []byte("test"),
}
signature, err := s4.NewEnvelopeFromRecord(&key, &record).Sign(privateKey)
signatureB64 := base64.StdEncoding.EncodeToString(signature)
require.NoError(t, err)
msg := api.Message{
Body: api.MessageBody{
DonId: "fun4",
MessageId: "1",
Method: "secrets_set",
Sender: addr.Hex(),
Payload: json.RawMessage(`{"slot_id":3,"version":4,"expiration":5,"payload":"dGVzdA==","signature":"` + signatureB64 + `"}`),
},
}
require.NoError(t, msg.Sign(privateKey))
storage.On("Put", ctx, &key, &record, signature).Return(nil).Once()
allowlist.On("Allow", addr).Return(true).Once()
subscriptions.On("GetMaxUserBalance", mock.Anything).Return(big.NewInt(100), nil).Once()
connector.On("SendToGateway", ctx, "gw1", mock.Anything).Run(func(args mock.Arguments) {
msg, ok := args[2].(*api.Message)
require.True(t, ok)
require.Equal(t, `{"success":true}`, string(msg.Body.Payload))
}).Return(nil).Once()
handler.HandleGatewayMessage(ctx, "gw1", &msg)
t.Run("orm error", func(t *testing.T) {
storage.On("Put", ctx, mock.Anything, mock.Anything, mock.Anything).Return(errors.New("boom")).Once()
allowlist.On("Allow", addr).Return(true).Once()
subscriptions.On("GetMaxUserBalance", mock.Anything).Return(big.NewInt(100), nil).Once()
connector.On("SendToGateway", ctx, "gw1", mock.Anything).Run(func(args mock.Arguments) {
msg, ok := args[2].(*api.Message)
require.True(t, ok)
require.Equal(t, `{"success":false,"error_message":"Failed to set secret: boom"}`, string(msg.Body.Payload))
}).Return(nil).Once()
handler.HandleGatewayMessage(ctx, "gw1", &msg)
})
t.Run("missing signature", func(t *testing.T) {
msg.Body.Payload = json.RawMessage(`{"slot_id":3,"version":4,"expiration":5,"payload":"dGVzdA=="}`)
require.NoError(t, msg.Sign(privateKey))
storage.On("Put", ctx, mock.Anything, mock.Anything, mock.Anything).Return(s4.ErrWrongSignature).Once()
allowlist.On("Allow", addr).Return(true).Once()
subscriptions.On("GetMaxUserBalance", mock.Anything).Return(big.NewInt(100), nil).Once()
connector.On("SendToGateway", ctx, "gw1", mock.Anything).Run(func(args mock.Arguments) {
msg, ok := args[2].(*api.Message)
require.True(t, ok)
require.Equal(t, `{"success":false,"error_message":"Failed to set secret: wrong signature"}`, string(msg.Body.Payload))
}).Return(nil).Once()
handler.HandleGatewayMessage(ctx, "gw1", &msg)
})
t.Run("malformed request", func(t *testing.T) {
msg.Body.Payload = json.RawMessage(`{sdfgdfgoscsicosd:sdf:::sdf ::; xx}`)
require.NoError(t, msg.Sign(privateKey))
allowlist.On("Allow", addr).Return(true).Once()
subscriptions.On("GetMaxUserBalance", mock.Anything).Return(big.NewInt(100), nil).Once()
connector.On("SendToGateway", ctx, "gw1", mock.Anything).Run(func(args mock.Arguments) {
msg, ok := args[2].(*api.Message)
require.True(t, ok)
require.Equal(t, `{"success":false,"error_message":"Bad request to set secret: invalid character 's' looking for beginning of object key string"}`, string(msg.Body.Payload))
}).Return(nil).Once()
handler.HandleGatewayMessage(ctx, "gw1", &msg)
})
t.Run("insufficient balance", func(t *testing.T) {
allowlist.On("Allow", addr).Return(true).Once()
subscriptions.On("GetMaxUserBalance", mock.Anything).Return(big.NewInt(0), nil).Once()
connector.On("SendToGateway", ctx, "gw1", mock.Anything).Run(func(args mock.Arguments) {
msg, ok := args[2].(*api.Message)
require.True(t, ok)
require.Equal(t, `{"success":false,"error_message":"user subscription has insufficient balance"}`, string(msg.Body.Payload))
}).Return(nil).Once()
handler.HandleGatewayMessage(ctx, "gw1", &msg)
})
})
t.Run("unsupported method", func(t *testing.T) {
msg := api.Message{
Body: api.MessageBody{
DonId: "fun4",
MessageId: "1",
Method: "foobar",
Sender: addr.Hex(),
Payload: []byte("whatever"),
},
}
require.NoError(t, msg.Sign(privateKey))
allowlist.On("Allow", addr).Return(true).Once()
handler.HandleGatewayMessage(testutils.Context(t), "gw1", &msg)
})
})`
$DIR/core/services/functions/connector_handler_test.go: `.Run("secrets_list", func(t *testing.T) {
msg := api.Message{
Body: api.MessageBody{
DonId: "fun4",
MessageId: "1",
Method: "secrets_list",
Sender: addr.Hex(),
},
}
require.NoError(t, msg.Sign(privateKey))
ctx := testutils.Context(t)
snapshot := []*s4.SnapshotRow{
{SlotId: 1, Version: 1, Expiration: 1},
{SlotId: 2, Version: 2, Expiration: 2},
}
storage.On("List", ctx, addr).Return(snapshot, nil).Once()
allowlist.On("Allow", addr).Return(true).Once()
connector.On("SendToGateway", ctx, "gw1", mock.Anything).Run(func(args mock.Arguments) {
msg, ok := args[2].(*api.Message)
require.True(t, ok)
require.Equal(t, `{"success":true,"rows":[{"slot_id":1,"version":1,"expiration":1},{"slot_id":2,"version":2,"expiration":2}]}`, string(msg.Body.Payload))
}).Return(nil).Once()
handler.HandleGatewayMessage(ctx, "gw1", &msg)
t.Run("orm error", func(t *testing.T) {
storage.On("List", ctx, addr).Return(nil, errors.New("boom")).Once()
allowlist.On("Allow", addr).Return(true).Once()
connector.On("SendToGateway", ctx, "gw1", mock.Anything).Run(func(args mock.Arguments) {
msg, ok := args[2].(*api.Message)
require.True(t, ok)
require.Equal(t, `{"success":false,"error_message":"Failed to list secrets: boom"}`, string(msg.Body.Payload))
}).Return(nil).Once()
handler.HandleGatewayMessage(ctx, "gw1", &msg)
})
t.Run("not allowed", func(t *testing.T) {
allowlist.On("Allow", addr).Return(false).Once()
handler.HandleGatewayMessage(ctx, "gw1", &msg)
})
})`
$DIR/core/services/functions/connector_handler_test.go: `.Hex()`
$DIR/core/services/functions/connector_handler_test.go: `.Context(t)`
$DIR/core/services/functions/connector_handler_test.go: `.On("List", ctx, addr)`
$DIR/core/services/functions/connector_handler_test.go: `.Return(snapshot, nil)`
$DIR/core/services/functions/connector_handler_test.go: `.Once()`
$DIR/core/services/functions/connector_handler_test.go: `.On("Allow", addr)`
$DIR/core/services/functions/connector_handler_test.go: `.Return(true)`
$DIR/core/services/functions/connector_handler_test.go: `.Once()`
$DIR/core/services/functions/connector_handler_test.go: `.On("SendToGateway", ctx, "gw1", mock.Anything)`
$DIR/core/services/functions/connector_handler_test.go: `.Run(func(args mock.Arguments) {
msg, ok := args[2].(*api.Message)
require.True(t, ok)
require.Equal(t, `{"success":true,"rows":[{"slot_id":1,"version":1,"expiration":1},{"slot_id":2,"version":2,"expiration":2}]}`, string(msg.Body.Payload))
})`
$DIR/core/services/functions/connector_handler_test.go: `.Return(nil)`
$DIR/core/services/functions/connector_handler_test.go: `.Once()`
$DIR/core/services/functions/connector_handler_test.go: `.HandleGatewayMessage(ctx, "gw1", &msg)`
$DIR/core/services/functions/connector_handler_test.go: `.Run("orm error", func(t *testing.T) {
storage.On("List", ctx, addr).Return(nil, errors.New("boom")).Once()
allowlist.On("Allow", addr).Return(true).Once()
connector.On("SendToGateway", ctx, "gw1", mock.Anything).Run(func(args mock.Arguments) {
msg, ok := args[2].(*api.Message)
require.True(t, ok)
require.Equal(t, `{"success":false,"error_message":"Failed to list secrets: boom"}`, string(msg.Body.Payload))
}).Return(nil).Once()
handler.HandleGatewayMessage(ctx, "gw1", &msg)
})`
$DIR/core/services/functions/connector_handler_test.go: `.On("List", ctx, addr)`
$DIR/core/services/functions/connector_handler_test.go: `.Return(nil, errors.New("boom"))`
$DIR/core/services/functions/connector_handler_test.go: `.New("boom")`
$DIR/core/services/functions/connector_handler_test.go: `.Once()`
$DIR/core/services/functions/connector_handler_test.go: `.On("Allow", addr)`
$DIR/core/services/functions/connector_handler_test.go: `.Return(true)`
$DIR/core/services/functions/connector_handler_test.go: `.Once()`
$DIR/core/services/functions/connector_handler_test.go: `.On("SendToGateway", ctx, "gw1", mock.Anything)`
$DIR/core/services/functions/connector_handler_test.go: `.Run(func(args mock.Arguments) {
msg, ok := args[2].(*api.Message)
require.True(t, ok)
require.Equal(t, `{"success":false,"error_message":"Failed to list secrets: boom"}`, string(msg.Body.Payload))
})`
$DIR/core/services/functions/connector_handler_test.go: `.Return(nil)`
$DIR/core/services/functions/connector_handler_test.go: `.Once()`
$DIR/core/services/functions/connector_handler_test.go: `.HandleGatewayMessage(ctx, "gw1", &msg)`
$DIR/core/services/functions/connector_handler_test.go: `.Run("not allowed", func(t *testing.T) {
allowlist.On("Allow", addr).Return(false).Once()
handler.HandleGatewayMessage(ctx, "gw1", &msg)
})`
$DIR/core/services/functions/connector_handler_test.go: `.On("Allow", addr)`
$DIR/core/services/functions/connector_handler_test.go: `.Return(false)`
$DIR/core/services/functions/connector_handler_test.go: `.Once()`
$DIR/core/services/functions/connector_handler_test.go: `.HandleGatewayMessage(ctx, "gw1", &msg)`
$DIR/core/services/functions/connector_handler_test.go: `.Run("secrets_set", func(t *testing.T) {
ctx := testutils.Context(t)
key := s4.Key{
Address: addr,
SlotId: 3,
Version: 4,
}
record := s4.Record{
Expiration: 5,
Payload: []byte("test"),
}
signature, err := s4.NewEnvelopeFromRecord(&key, &record).Sign(privateKey)
signatureB64 := base64.StdEncoding.EncodeToString(signature)
require.NoError(t, err)
msg := api.Message{
Body: api.MessageBody{
DonId: "fun4",
MessageId: "1",
Method: "secrets_set",
Sender: addr.Hex(),
Payload: json.RawMessage(`{"slot_id":3,"version":4,"expiration":5,"payload":"dGVzdA==","signature":"` + signatureB64 + `"}`),
},
}
require.NoError(t, msg.Sign(privateKey))
storage.On("Put", ctx, &key, &record, signature).Return(nil).Once()
allowlist.On("Allow", addr).Return(true).Once()
subscriptions.On("GetMaxUserBalance", mock.Anything).Return(big.NewInt(100), nil).Once()
connector.On("SendToGateway", ctx, "gw1", mock.Anything).Run(func(args mock.Arguments) {
msg, ok := args[2].(*api.Message)
require.True(t, ok)
require.Equal(t, `{"success":true}`, string(msg.Body.Payload))
}).Return(nil).Once()
handler.HandleGatewayMessage(ctx, "gw1", &msg)
t.Run("orm error", func(t *testing.T) {
storage.On("Put", ctx, mock.Anything, mock.Anything, mock.Anything).Return(errors.New("boom")).Once()
allowlist.On("Allow", addr).Return(true).Once()
subscriptions.On("GetMaxUserBalance", mock.Anything).Return(big.NewInt(100), nil).Once()
connector.On("SendToGateway", ctx, "gw1", mock.Anything).Run(func(args mock.Arguments) {
msg, ok := args[2].(*api.Message)
require.True(t, ok)
require.Equal(t, `{"success":false,"error_message":"Failed to set secret: boom"}`, string(msg.Body.Payload))
}).Return(nil).Once()
handler.HandleGatewayMessage(ctx, "gw1", &msg)
})
t.Run("missing signature", func(t *testing.T) {
msg.Body.Payload = json.RawMessage(`{"slot_id":3,"version":4,"expiration":5,"payload":"dGVzdA=="}`)
require.NoError(t, msg.Sign(privateKey))
storage.On("Put", ctx, mock.Anything, mock.Anything, mock.Anything).Return(s4.ErrWrongSignature).Once()
allowlist.On("Allow", addr).Return(true).Once()
subscriptions.On("GetMaxUserBalance", mock.Anything).Return(big.NewInt(100), nil).Once()
connector.On("SendToGateway", ctx, "gw1", mock.Anything).Run(func(args mock.Arguments) {
msg, ok := args[2].(*api.Message)
require.True(t, ok)
require.Equal(t, `{"success":false,"error_message":"Failed to set secret: wrong signature"}`, string(msg.Body.Payload))
}).Return(nil).Once()
handler.HandleGatewayMessage(ctx, "gw1", &msg)
})
t.Run("malformed request", func(t *testing.T) {
msg.Body.Payload = json.RawMessage(`{sdfgdfgoscsicosd:sdf:::sdf ::; xx}`)
require.NoError(t, msg.Sign(privateKey))
allowlist.On("Allow", addr).Return(true).Once()
subscriptions.On("GetMaxUserBalance", mock.Anything).Return(big.NewInt(100), nil).Once()
connector.On("SendToGateway", ctx, "gw1", mock.Anything).Run(func(args mock.Arguments) {
msg, ok := args[2].(*api.Message)
require.True(t, ok)
require.Equal(t, `{"success":false,"error_message":"Bad request to set secret: invalid character 's' looking for beginning of object key string"}`, string(msg.Body.Payload))
}).Return(nil).Once()
handler.HandleGatewayMessage(ctx, "gw1", &msg)
})
t.Run("insufficient balance", func(t *testing.T) {
allowlist.On("Allow", addr).Return(true).Once()
subscriptions.On("GetMaxUserBalance", mock.Anything).Return(big.NewInt(0), nil).Once()
connector.On("SendToGateway", ctx, "gw1", mock.Anything).Run(func(args mock.Arguments) {
msg, ok := args[2].(*api.Message)
require.True(t, ok)
require.Equal(t, `{"success":false,"error_message":"user subscription has insufficient balance"}`, string(msg.Body.Payload))
}).Return(nil).Once()
handler.HandleGatewayMessage(ctx, "gw1", &msg)
})
})`
$DIR/core/services/functions/connector_handler_test.go: `.Context(t)`
$DIR/core/services/functions/connector_handler_test.go: `.NewEnvelopeFromRecord(&key, &record)`
$DIR/core/services/functions/connector_handler_test.go: `.Sign(privateKey)`
$DIR/core/services/functions/connector_handler_test.go: `.StdEncoding.EncodeToString(signature)`
$DIR/core/services/functions/connector_handler_test.go: `.Hex()`
$DIR/core/services/functions/connector_handler_test.go: `.RawMessage(`{"slot_id":3,"version":4,"expiration":5,"payload":"dGVzdA==","signature":"` + signatureB64 + `"}`)`
$DIR/core/services/functions/connector_handler_test.go: `.On("Put", ctx, &key, &record, signature)`
$DIR/core/services/functions/connector_handler_test.go: `.Return(nil)`
$DIR/core/services/functions/connector_handler_test.go: `.Once()`
$DIR/core/services/functions/connector_handler_test.go: `.On("Allow", addr)`
$DIR/core/services/functions/connector_handler_test.go: `.Return(true)`
$DIR/core/services/functions/connector_handler_test.go: `.Once()`
$DIR/core/services/functions/connector_handler_test.go: `.On("GetMaxUserBalance", mock.Anything)`
$DIR/core/services/functions/connector_handler_test.go: `.Return(big.NewInt(100), nil)`
$DIR/core/services/functions/connector_handler_test.go: `.NewInt(100)`
$DIR/core/services/functions/connector_handler_test.go: `.Once()`
$DIR/core/services/functions/connector_handler_test.go: `.On("SendToGateway", ctx, "gw1", mock.Anything)`
$DIR/core/services/functions/connector_handler_test.go: `.Run(func(args mock.Arguments) {
msg, ok := args[2].(*api.Message)
require.True(t, ok)
require.Equal(t, `{"success":true}`, string(msg.Body.Payload))
})`
$DIR/core/services/functions/connector_handler_test.go: `.Return(nil)`
$DIR/core/services/functions/connector_handler_test.go: `.Once()`
$DIR/core/services/functions/connector_handler_test.go: `.HandleGatewayMessage(ctx, "gw1", &msg)`
$DIR/core/services/functions/connector_handler_test.go: `.Run("orm error", func(t *testing.T) {
storage.On("Put", ctx, mock.Anything, mock.Anything, mock.Anything).Return(errors.New("boom")).Once()
allowlist.On("Allow", addr).Return(true).Once()
subscriptions.On("GetMaxUserBalance", mock.Anything).Return(big.NewInt(100), nil).Once()
connector.On("SendToGateway", ctx, "gw1", mock.Anything).Run(func(args mock.Arguments) {
msg, ok := args[2].(*api.Message)
require.True(t, ok)
require.Equal(t, `{"success":false,"error_message":"Failed to set secret: boom"}`, string(msg.Body.Payload))
}).Return(nil).Once()
handler.HandleGatewayMessage(ctx, "gw1", &msg)
})`
$DIR/core/services/functions/connector_handler_test.go: `.On("Put", ctx, mock.Anything, mock.Anything, mock.Anything)`
$DIR/core/services/functions/connector_handler_test.go: `.Return(errors.New("boom"))`
$DIR/core/services/functions/connector_handler_test.go: `.New("boom")`
$DIR/core/services/functions/connector_handler_test.go: `.Once()`
$DIR/core/services/functions/connector_handler_test.go: `.On("Allow", addr)`
$DIR/core/services/functions/connector_handler_test.go: `.Return(true)`
$DIR/core/services/functions/connector_handler_test.go: `.Once()`
$DIR/core/services/functions/connector_handler_test.go: `.On("GetMaxUserBalance", mock.Anything)`
$DIR/core/services/functions/connector_handler_test.go: `.Return(big.NewInt(100), nil)`
$DIR/core/services/functions/connector_handler_test.go: `.NewInt(100)`
$DIR/core/services/functions/connector_handler_test.go: `.Once()`
$DIR/core/services/functions/connector_handler_test.go: `.On("SendToGateway", ctx, "gw1", mock.Anything)`
$DIR/core/services/functions/connector_handler_test.go: `.Run(func(args mock.Arguments) {
msg, ok := args[2].(*api.Message)
require.True(t, ok)
require.Equal(t, `{"success":false,"error_message":"Failed to set secret: boom"}`, string(msg.Body.Payload))
})`
$DIR/core/services/functions/connector_handler_test.go: `.Return(nil)`
$DIR/core/services/functions/connector_handler_test.go: `.Once()`
$DIR/core/services/functions/connector_handler_test.go: `.HandleGatewayMessage(ctx, "gw1", &msg)`
$DIR/core/services/functions/connector_handler_test.go: `.Run("missing signature", func(t *testing.T) {
msg.Body.Payload = json.RawMessage(`{"slot_id":3,"version":4,"expiration":5,"payload":"dGVzdA=="}`)
require.NoError(t, msg.Sign(privateKey))
storage.On("Put", ctx, mock.Anything, mock.Anything, mock.Anything).Return(s4.ErrWrongSignature).Once()
allowlist.On("Allow", addr).Return(true).Once()
subscriptions.On("GetMaxUserBalance", mock.Anything).Return(big.NewInt(100), nil).Once()
connector.On("SendToGateway", ctx, "gw1", mock.Anything).Run(func(args mock.Arguments) {
msg, ok := args[2].(*api.Message)
require.True(t, ok)
require.Equal(t, `{"success":false,"error_message":"Failed to set secret: wrong signature"}`, string(msg.Body.Payload))
}).Return(nil).Once()
handler.HandleGatewayMessage(ctx, "gw1", &msg)
})`
$DIR/core/services/functions/connector_handler_test.go: `.RawMessage(`{"slot_id":3,"version":4,"expiration":5,"payload":"dGVzdA=="}`)`
$DIR/core/services/functions/connector_handler_test.go: `.On("Put", ctx, mock.Anything, mock.Anything, mock.Anything)`
$DIR/core/services/functions/connector_handler_test.go: `.Return(s4.ErrWrongSignature)`
$DIR/core/services/functions/connector_handler_test.go: `.Once()`
$DIR/core/services/functions/connector_handler_test.go: `.On("Allow", addr)`
$DIR/core/services/functions/connector_handler_test.go: `.Return(true)`
$DIR/core/services/functions/connector_handler_test.go: `.Once()`
$DIR/core/services/functions/connector_handler_test.go: `.On("GetMaxUserBalance", mock.Anything)`
$DIR/core/services/functions/connector_handler_test.go: `.Return(big.NewInt(100), nil)`
$DIR/core/services/functions/connector_handler_test.go: `.NewInt(100)`
$DIR/core/services/functions/connector_handler_test.go: `.Once()`
$DIR/core/services/functions/connector_handler_test.go: `.On("SendToGateway", ctx, "gw1", mock.Anything)`
$DIR/core/services/functions/connector_handler_test.go: `.Run(func(args mock.Arguments) {
msg, ok := args[2].(*api.Message)
require.True(t, ok)
require.Equal(t, `{"success":false,"error_message":"Failed to set secret: wrong signature"}`, string(msg.Body.Payload))
})`
$DIR/core/services/functions/connector_handler_test.go: `.Return(nil)`
$DIR/core/services/functions/connector_handler_test.go: `.Once()`
$DIR/core/services/functions/connector_handler_test.go: `.HandleGatewayMessage(ctx, "gw1", &msg)`
$DIR/core/services/functions/connector_handler_test.go: `.Run("malformed request", func(t *testing.T) {
msg.Body.Payload = json.RawMessage(`{sdfgdfgoscsicosd:sdf:::sdf ::; xx}`)
require.NoError(t, msg.Sign(privateKey))
allowlist.On("Allow", addr).Return(true).Once()
subscriptions.On("GetMaxUserBalance", mock.Anything).Return(big.NewInt(100), nil).Once()
connector.On("SendToGateway", ctx, "gw1", mock.Anything).Run(func(args mock.Arguments) {
msg, ok := args[2].(*api.Message)
require.True(t, ok)
require.Equal(t, `{"success":false,"error_message":"Bad request to set secret: invalid character 's' looking for beginning of object key string"}`, string(msg.Body.Payload))
}).Return(nil).Once()
handler.HandleGatewayMessage(ctx, "gw1", &msg)
})`
$DIR/core/services/functions/connector_handler_test.go: `.RawMessage(`{sdfgdfgoscsicosd:sdf:::sdf ::; xx}`)`
$DIR/core/services/functions/connector_handler_test.go: `.On("Allow", addr)`
$DIR/core/services/functions/connector_handler_test.go: `.Return(true)`
$DIR/core/services/functions/connector_handler_test.go: `.Once()`
$DIR/core/services/functions/connector_handler_test.go: `.On("GetMaxUserBalance", mock.Anything)`
$DIR/core/services/functions/connector_handler_test.go: `.Return(big.NewInt(100), nil)`
$DIR/core/services/functions/connector_handler_test.go: `.NewInt(100)`
$DIR/core/services/functions/connector_handler_test.go: `.Once()`
$DIR/core/services/functions/connector_handler_test.go: `.On("SendToGateway", ctx, "gw1", mock.Anything)`
$DIR/core/services/functions/connector_handler_test.go: `.Run(func(args mock.Arguments) {
msg, ok := args[2].(*api.Message)
require.True(t, ok)
require.Equal(t, `{"success":false,"error_message":"Bad request to set secret: invalid character 's' looking for beginning of object key string"}`, string(msg.Body.Payload))
})`
$DIR/core/services/functions/connector_handler_test.go: `.Return(nil)`
$DIR/core/services/functions/connector_handler_test.go: `.Once()`
$DIR/core/services/functions/connector_handler_test.go: `.HandleGatewayMessage(ctx, "gw1", &msg)`
$DIR/core/services/functions/connector_handler_test.go: `.Run("insufficient balance", func(t *testing.T) {
allowlist.On("Allow", addr).Return(true).Once()
subscriptions.On("GetMaxUserBalance", mock.Anything).Return(big.NewInt(0), nil).Once()
connector.On("SendToGateway", ctx, "gw1", mock.Anything).Run(func(args mock.Arguments) {
msg, ok := args[2].(*api.Message)
require.True(t, ok)
require.Equal(t, `{"success":false,"error_message":"user subscription has insufficient balance"}`, string(msg.Body.Payload))
}).Return(nil).Once()
handler.HandleGatewayMessage(ctx, "gw1", &msg)
})`
$DIR/core/services/functions/connector_handler_test.go: `.On("Allow", addr)`
$DIR/core/services/functions/connector_handler_test.go: `.Return(true)`
$DIR/core/services/functions/connector_handler_test.go: `.Once()`
$DIR/core/services/functions/connector_handler_test.go: `.On("GetMaxUserBalance", mock.Anything)`
$DIR/core/services/functions/connector_handler_test.go: `.Return(big.NewInt(0), nil)`
$DIR/core/services/functions/connector_handler_test.go: `.NewInt(0)`
$DIR/core/services/functions/connector_handler_test.go: `.Once()`
$DIR/core/services/functions/connector_handler_test.go: `.On("SendToGateway", ctx, "gw1", mock.Anything)`
$DIR/core/services/functions/connector_handler_test.go: `.Run(func(args mock.Arguments) {
msg, ok := args[2].(*api.Message)
require.True(t, ok)
require.Equal(t, `{"success":false,"error_message":"user subscription has insufficient balance"}`, string(msg.Body.Payload))
})`
$DIR/core/services/functions/connector_handler_test.go: `.Return(nil)`
$DIR/core/services/functions/connector_handler_test.go: `.Once()`
$DIR/core/services/functions/connector_handler_test.go: `.HandleGatewayMessage(ctx, "gw1", &msg)`
$DIR/core/services/functions/connector_handler_test.go: `.Run("unsupported method", func(t *testing.T) {
msg := api.Message{
Body: api.MessageBody{
DonId: "fun4",
MessageId: "1",
Method: "foobar",
Sender: addr.Hex(),
Payload: []byte("whatever"),
},
}
require.NoError(t, msg.Sign(privateKey))
allowlist.On("Allow", addr).Return(true).Once()
handler.HandleGatewayMessage(testutils.Context(t), "gw1", &msg)
})`
$DIR/core/services/functions/connector_handler_test.go: `.Hex()`
$DIR/core/services/functions/connector_handler_test.go: `.On("Allow", addr)`
$DIR/core/services/functions/connector_handler_test.go: `.Return(true)`
$DIR/core/services/functions/connector_handler_test.go: `.Once()`
$DIR/core/services/functions/connector_handler_test.go: `.HandleGatewayMessage(testutils.Context(t), "gw1", &msg)`
$DIR/core/services/functions/connector_handler_test.go: `.Context(t)`
$DIR/core/services/functions/connector_handler_test.go: `.Run("heartbeat success", func(t *testing.T) {
ctx := testutils.Context(t)
msg, internalId := newOffchainRequest(t, addr.Bytes(), 0)
require.NoError(t, msg.Sign(privateKey))
// first call to trigger the request
var response functions.HeartbeatResponse
allowlist.On("Allow", addr).Return(true).Once()
listener.On("HandleOffchainRequest", mock.Anything, mock.Anything).Return(nil).Once()
connector.On("SendToGateway", mock.Anything, "gw1", mock.Anything).Run(func(args mock.Arguments) {
respMsg, ok := args[2].(*api.Message)
require.True(t, ok)
require.NoError(t, json.Unmarshal(respMsg.Body.Payload, &response))
require.Equal(t, functions.RequestStatePending, response.Status)
}).Return(nil).Once()
handler.HandleGatewayMessage(ctx, "gw1", msg)
// async response computation
reportCh <- &functions.OffchainResponse{
RequestId: internalId[:],
Result: []byte("ok!"),
}
reportCh <- &functions.OffchainResponse{} // sending second item to make sure the first one got processed
// second call to collect the response
allowlist.On("Allow", addr).Return(true).Once()
connector.On("SendToGateway", mock.Anything, "gw1", mock.Anything).Run(func(args mock.Arguments) {
respMsg, ok := args[2].(*api.Message)
require.True(t, ok)
require.NoError(t, json.Unmarshal(respMsg.Body.Payload, &response))
require.Equal(t, functions.RequestStateComplete, response.Status)
}).Return(nil).Once()
handler.HandleGatewayMessage(ctx, "gw1", msg)
})`
$DIR/core/services/functions/connector_handler_test.go: `.Context(t)`
$DIR/core/services/functions/connector_handler_test.go: `.Bytes()`
$DIR/core/services/functions/connector_handler_test.go: `.On("Allow", addr)`
$DIR/core/services/functions/connector_handler_test.go: `.Return(true)`
$DIR/core/services/functions/connector_handler_test.go: `.Once()`
$DIR/core/services/functions/connector_handler_test.go: `.On("HandleOffchainRequest", mock.Anything, mock.Anything)`
$DIR/core/services/functions/connector_handler_test.go: `.Return(nil)`
$DIR/core/services/functions/connector_handler_test.go: `.Once()`
$DIR/core/services/functions/connector_handler_test.go: `.On("SendToGateway", mock.Anything, "gw1", mock.Anything)`
$DIR/core/services/functions/connector_handler_test.go: `.Run(func(args mock.Arguments) {
respMsg, ok := args[2].(*api.Message)
require.True(t, ok)
require.NoError(t, json.Unmarshal(respMsg.Body.Payload, &response))
require.Equal(t, functions.RequestStatePending, response.Status)
})`
$DIR/core/services/functions/connector_handler_test.go: `.Return(nil)`
$DIR/core/services/functions/connector_handler_test.go: `.Once()`
$DIR/core/services/functions/connector_handler_test.go: `.HandleGatewayMessage(ctx, "gw1", msg)`
$DIR/core/services/functions/connector_handler_test.go: `.On("Allow", addr)`
$DIR/core/services/functions/connector_handler_test.go: `.Return(true)`
$DIR/core/services/functions/connector_handler_test.go: `.Once()`
$DIR/core/services/functions/connector_handler_test.go: `.On("SendToGateway", mock.Anything, "gw1", mock.Anything)`
$DIR/core/services/functions/connector_handler_test.go: `.Run(func(args mock.Arguments) {
respMsg, ok := args[2].(*api.Message)
require.True(t, ok)
require.NoError(t, json.Unmarshal(respMsg.Body.Payload, &response))
require.Equal(t, functions.RequestStateComplete, response.Status)
})`
$DIR/core/services/functions/connector_handler_test.go: `.Return(nil)`
$DIR/core/services/functions/connector_handler_test.go: `.Once()`
$DIR/core/services/functions/connector_handler_test.go: `.HandleGatewayMessage(ctx, "gw1", msg)`
$DIR/core/services/functions/connector_handler_test.go: `.Run("heartbeat internal error", func(t *testing.T) {
ctx := testutils.Context(t)
msg, _ := newOffchainRequest(t, addr.Bytes(), 0)
require.NoError(t, msg.Sign(privateKey))
// first call to trigger the request
var response functions.HeartbeatResponse
allowlist.On("Allow", addr).Return(true).Once()
listener.On("HandleOffchainRequest", mock.Anything, mock.Anything).Return(errors.New("boom")).Once()
connector.On("SendToGateway", mock.Anything, "gw1", mock.Anything).Return(nil).Once()
handler.HandleGatewayMessage(ctx, "gw1", msg)
// collect the response - should eventually result in an internal error
gomega.NewGomegaWithT(t).Eventually(func() bool {
returnedState := 0
allowlist.On("Allow", addr).Return(true).Once()
connector.On("SendToGateway", mock.Anything, "gw1", mock.Anything).Run(func(args mock.Arguments) {
respMsg, ok := args[2].(*api.Message)
require.True(t, ok)
require.NoError(t, json.Unmarshal(respMsg.Body.Payload, &response))
returnedState = response.Status
}).Return(nil).Once()
handler.HandleGatewayMessage(ctx, "gw1", msg)
return returnedState == functions.RequestStateInternalError
}, testutils.WaitTimeout(t), 50*time.Millisecond).Should(gomega.BeTrue())
})`
$DIR/core/services/functions/connector_handler_test.go: `.Context(t)`
$DIR/core/services/functions/connector_handler_test.go: `.Bytes()`
$DIR/core/services/functions/connector_handler_test.go: `.On("Allow", addr)`
$DIR/core/services/functions/connector_handler_test.go: `.Return(true)`
$DIR/core/services/functions/connector_handler_test.go: `.Once()`
$DIR/core/services/functions/connector_handler_test.go: `.On("HandleOffchainRequest", mock.Anything, mock.Anything)`
$DIR/core/services/functions/connector_handler_test.go: `.Return(errors.New("boom"))`
$DIR/core/services/functions/connector_handler_test.go: `.New("boom")`
$DIR/core/services/functions/connector_handler_test.go: `.Once()`
$DIR/core/services/functions/connector_handler_test.go: `.On("SendToGateway", mock.Anything, "gw1", mock.Anything)`
$DIR/core/services/functions/connector_handler_test.go: `.Return(nil)`
$DIR/core/services/functions/connector_handler_test.go: `.Once()`
$DIR/core/services/functions/connector_handler_test.go: `.HandleGatewayMessage(ctx, "gw1", msg)`
$DIR/core/services/functions/connector_handler_test.go: `.NewGomegaWithT(t)`
$DIR/core/services/functions/connector_handler_test.go: `.Eventually(func() bool {
returnedState := 0
allowlist.On("Allow", addr).Return(true).Once()
connector.On("SendToGateway", mock.Anything, "gw1", mock.Anything).Run(func(args mock.Arguments) {
respMsg, ok := args[2].(*api.Message)
require.True(t, ok)
require.NoError(t, json.Unmarshal(respMsg.Body.Payload, &response))
returnedState = response.Status
}).Return(nil).Once()
handler.HandleGatewayMessage(ctx, "gw1", msg)
return returnedState == functions.RequestStateInternalError
}, testutils.WaitTimeout(t), 50*time.Millisecond)`
$DIR/core/services/functions/connector_handler_test.go: `.On("Allow", addr)`
$DIR/core/services/functions/connector_handler_test.go: `.Return(true)`
$DIR/core/services/functions/connector_handler_test.go: `.Once()`
$DIR/core/services/functions/connector_handler_test.go: `.On("SendToGateway", mock.Anything, "gw1", mock.Anything)`
$DIR/core/services/functions/connector_handler_test.go: `.Run(func(args mock.Arguments) {
respMsg, ok := args[2].(*api.Message)
require.True(t, ok)
require.NoError(t, json.Unmarshal(respMsg.Body.Payload, &response))
returnedState = response.Status
})`
$DIR/core/services/functions/connector_handler_test.go: `.Return(nil)`
$DIR/core/services/functions/connector_handler_test.go: `.Once()`
$DIR/core/services/functions/connector_handler_test.go: `.HandleGatewayMessage(ctx, "gw1", msg)`
$DIR/core/services/functions/connector_handler_test.go: `.WaitTimeout(t)`
$DIR/core/services/functions/connector_handler_test.go: `.Should(gomega.BeTrue())`
$DIR/core/services/functions/connector_handler_test.go: `.BeTrue()`
$DIR/core/services/functions/connector_handler_test.go: `.Run("heartbeat sender address doesn't match", func(t *testing.T) {
ctx := testutils.Context(t)
msg, _ := newOffchainRequest(t, geth_common.BytesToAddress([]byte("0x1234")).Bytes(), 0)
require.NoError(t, msg.Sign(privateKey))
var response functions.HeartbeatResponse
allowlist.On("Allow", addr).Return(true).Once()
connector.On("SendToGateway", mock.Anything, "gw1", mock.Anything).Run(func(args mock.Arguments) {
respMsg, ok := args[2].(*api.Message)
require.True(t, ok)
require.NoError(t, json.Unmarshal(respMsg.Body.Payload, &response))
require.Equal(t, functions.RequestStateInternalError, response.Status)
}).Return(nil).Once()
handler.HandleGatewayMessage(ctx, "gw1", msg)
})`
$DIR/core/services/functions/connector_handler_test.go: `.Context(t)`
$DIR/core/services/functions/connector_handler_test.go: `.BytesToAddress([]byte("0x1234"))`
$DIR/core/services/functions/connector_handler_test.go: `.Bytes()`
$DIR/core/services/functions/connector_handler_test.go: `.On("Allow", addr)`
$DIR/core/services/functions/connector_handler_test.go: `.Return(true)`
$DIR/core/services/functions/connector_handler_test.go: `.Once()`
$DIR/core/services/functions/connector_handler_test.go: `.On("SendToGateway", mock.Anything, "gw1", mock.Anything)`
$DIR/core/services/functions/connector_handler_test.go: `.Run(func(args mock.Arguments) {
respMsg, ok := args[2].(*api.Message)
require.True(t, ok)
require.NoError(t, json.Unmarshal(respMsg.Body.Payload, &response))
require.Equal(t, functions.RequestStateInternalError, response.Status)
})`
$DIR/core/services/functions/connector_handler_test.go: `.Return(nil)`
$DIR/core/services/functions/connector_handler_test.go: `.Once()`
$DIR/core/services/functions/connector_handler_test.go: `.HandleGatewayMessage(ctx, "gw1", msg)`
$DIR/core/services/functions/connector_handler_test.go: `.Context(t)`
$DIR/core/services/functions/connector_handler_test.go: `.Bytes()`
$DIR/core/services/functions/connector_handler_test.go: `.On("Allow", addr)`
$DIR/core/services/functions/connector_handler_test.go: `.Return(true)`
$DIR/core/services/functions/connector_handler_test.go: `.Once()`
$DIR/core/services/functions/connector_handler_test.go: `.On("SendToGateway", mock.Anything, "gw1", mock.Anything)`
$DIR/core/services/functions/connector_handler_test.go: `.Run(func(args mock.Arguments) {
respMsg, ok := args[2].(*api.Message)
require.True(t, ok)
require.NoError(t, json.Unmarshal(respMsg.Body.Payload, &response))
require.Equal(t, functions.RequestStateInternalError, response.Status)
})`
$DIR/core/services/functions/connector_handler_test.go: `.Return(nil)`
$DIR/core/services/functions/connector_handler_test.go: `.Once()`
$DIR/core/services/functions/connector_handler_test.go: `.HandleGatewayMessage(ctx, "gw1", msg)`
$DIR/core/services/functions/external_adapter_client_test.go: `fmt.Fprintln(w, "}}invalidJSON")`
$DIR/core/services/functions/external_adapter_client_test.go: `_, _, _, err = ea.RunComputation(testutils.Context(t), "requestID1234", "TestJob", "SubOwner", 1, functions.RequestFlags{}, "secRETS", reqData)`
$DIR/core/services/functions/external_adapter_client_test.go: `w.WriteHeader(http.StatusInternalServerError)`
$DIR/core/services/functions/external_adapter_client_test.go: `_, _, _, err = ea.RunComputation(testutils.Context(t), "requestID1234", "TestJob", "SubOwner", 1, functions.RequestFlags{}, "secRETS", &functions.RequestData{})`
$DIR/core/services/functions/external_adapter_client_test.go: `<-done`
$DIR/core/services/functions/external_adapter_client_test.go: `_, _, _, err = ea.RunComputation(ctx, "requestID1234", "TestJob", "SubOwner", 1, functions.RequestFlags{}, "secRETS", &functions.RequestData{})`
$DIR/core/services/functions/external_adapter_client_test.go: `t.Run("OK-retry_succeeds_after_one_failure", func(t *testing.T) {
counter := 0
ts := httptest.NewServer(http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {
switch counter {
case 0:
counter++
w.WriteHeader(http.StatusInternalServerError)
return
case 1:
counter++
fmt.Fprintln(w, runComputationSuccessResponse)
return
default:
t.Errorf("invalid amount of retries: %d", counter)
t.FailNow()
}
}))
defer ts.Close()
adapterUrl, err := url.Parse(ts.URL)
assert.NoError(t, err)
ea := functions.NewExternalAdapterClient(*adapterUrl, 100_000, 1, 1*time.Nanosecond)
_, _, _, err = ea.RunComputation(testutils.Context(t), "requestID1234", "TestJob", "SubOwner", 1, functions.RequestFlags{}, "secRETS", &functions.RequestData{})
assert.NoError(t, err)
})`
$DIR/core/services/functions/external_adapter_client_test.go: `counter++`
$DIR/core/services/functions/external_adapter_client_test.go: `w.WriteHeader(http.StatusInternalServerError)`
$DIR/core/services/functions/external_adapter_client_test.go: `counter++`
$DIR/core/services/functions/external_adapter_client_test.go: `fmt.Fprintln(w, runComputationSuccessResponse)`
$DIR/core/services/functions/external_adapter_client_test.go: `_, _, _, err = ea.RunComputation(testutils.Context(t), "requestID1234", "TestJob", "SubOwner", 1, functions.RequestFlags{}, "secRETS", &functions.RequestData{})`
$DIR/core/services/functions/external_adapter_client_test.go: `t.Run("NOK-retry_fails_after_retrial", func(t *testing.T) {
counter := 0
ts := httptest.NewServer(http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {
switch counter {
case 0, 1:
counter++
w.WriteHeader(http.StatusInternalServerError)
return
default:
t.Errorf("invalid amount of retries: %d", counter)
t.FailNow()
}
}))
defer ts.Close()
adapterUrl, err := url.Parse(ts.URL)
assert.NoError(t, err)
ea := functions.NewExternalAdapterClient(*adapterUrl, 100_000, 1, 1*time.Nanosecond)
_, _, _, err = ea.RunComputation(testutils.Context(t), "requestID1234", "TestJob", "SubOwner", 1, functions.RequestFlags{}, "secRETS", &functions.RequestData{})
assert.Error(t, err)
})`
$DIR/core/services/functions/external_adapter_client_test.go: `counter++`
$DIR/core/services/functions/external_adapter_client_test.go: `w.WriteHeader(http.StatusInternalServerError)`
$DIR/core/services/functions/external_adapter_client_test.go: `_, _, _, err = ea.RunComputation(testutils.Context(t), "requestID1234", "TestJob", "SubOwner", 1, functions.RequestFlags{}, "secRETS", &functions.RequestData{})`
$DIR/core/services/functions/external_adapter_client_test.go: `counter++`
$DIR/core/services/functions/external_adapter_client_test.go: `w.WriteHeader(http.StatusBadRequest)`
$DIR/core/services/functions/external_adapter_client_test.go: `_, _, _, err = ea.RunComputation(testutils.Context(t), "requestID1234", "TestJob", "SubOwner", 1, functions.RequestFlags{}, "secRETS", &functions.RequestData{})`
$DIR/core/services/functions/external_adapter_client_test.go: `.NewServer(http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {
body, err := io.ReadAll(r.Body)
assert.NoError(t, err)
expectedData := `{"source":"abcd","language":7,"codeLocation":42,"secretsLocation":88,"args":["arg1","arg2"]}`
expectedBody := fmt.Sprintf(`{"endpoint":"lambda","requestId":"requestID1234","jobName":"TestJob","subscriptionOwner":"SubOwner","subscriptionId":1,"flags":[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],"nodeProvidedSecrets":"secRETS","data":%s}`, expectedData)
assert.Equal(t, expectedBody, string(body))
fmt.Fprintln(w, "}}invalidJSON")
}))`
$DIR/core/services/functions/external_adapter_client_test.go: `.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {
body, err := io.ReadAll(r.Body)
assert.NoError(t, err)
expectedData := `{"source":"abcd","language":7,"codeLocation":42,"secretsLocation":88,"args":["arg1","arg2"]}`
expectedBody := fmt.Sprintf(`{"endpoint":"lambda","requestId":"requestID1234","jobName":"TestJob","subscriptionOwner":"SubOwner","subscriptionId":1,"flags":[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],"nodeProvidedSecrets":"secRETS","data":%s}`, expectedData)
assert.Equal(t, expectedBody, string(body))
fmt.Fprintln(w, "}}invalidJSON")
})`
$DIR/core/services/functions/external_adapter_client_test.go: `.ReadAll(r.Body)`
$DIR/core/services/functions/external_adapter_client_test.go: `.Sprintf(`{"endpoint":"lambda","requestId":"requestID1234","jobName":"TestJob","subscriptionOwner":"SubOwner","subscriptionId":1,"flags":[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],"nodeProvidedSecrets":"secRETS","data":%s}`, expectedData)`
$DIR/core/services/functions/external_adapter_client_test.go: `.Fprintln(w, "}}invalidJSON")`
$DIR/core/services/functions/external_adapter_client_test.go: `.Parse(ts.URL)`
$DIR/core/services/functions/external_adapter_client_test.go: `.NewExternalAdapterClient(*adapterUrl, 100_000, 0, 0)`
$DIR/core/services/functions/external_adapter_client_test.go: `.RunComputation(testutils.Context(t), "requestID1234", "TestJob", "SubOwner", 1, functions.RequestFlags{}, "secRETS", reqData)`
$DIR/core/services/functions/external_adapter_client_test.go: `.Context(t)`
$DIR/core/services/functions/external_adapter_client_test.go: `.NewServer(http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {
w.WriteHeader(http.StatusInternalServerError)
}))`
$DIR/core/services/functions/external_adapter_client_test.go: `.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {
w.WriteHeader(http.StatusInternalServerError)
})`
$DIR/core/services/functions/external_adapter_client_test.go: `.WriteHeader(http.StatusInternalServerError)`
$DIR/core/services/functions/external_adapter_client_test.go: `.Parse(ts.URL)`
$DIR/core/services/functions/external_adapter_client_test.go: `.NewExternalAdapterClient(*adapterUrl, 100_000, 0, 0)`
$DIR/core/services/functions/external_adapter_client_test.go: `.RunComputation(testutils.Context(t), "requestID1234", "TestJob", "SubOwner", 1, functions.RequestFlags{}, "secRETS", &functions.RequestData{})`
$DIR/core/services/functions/external_adapter_client_test.go: `.Context(t)`
$DIR/core/services/functions/external_adapter_client_test.go: `.NewServer(http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {
<-done
}))`
$DIR/core/services/functions/external_adapter_client_test.go: `.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {
<-done
})`
$DIR/core/services/functions/external_adapter_client_test.go: `.Parse(ts.URL)`
$DIR/core/services/functions/external_adapter_client_test.go: `.NewExternalAdapterClient(*adapterUrl, 100_000, 0, 0)`
$DIR/core/services/functions/external_adapter_client_test.go: `.WithTimeout(testutils.Context(t), 10*time.Millisecond)`
$DIR/core/services/functions/external_adapter_client_test.go: `.Context(t)`
$DIR/core/services/functions/external_adapter_client_test.go: `.RunComputation(ctx, "requestID1234", "TestJob", "SubOwner", 1, functions.RequestFlags{}, "secRETS", &functions.RequestData{})`
$DIR/core/services/functions/external_adapter_client_test.go: `.Run("OK-retry_succeeds_after_one_failure", func(t *testing.T) {
counter := 0
ts := httptest.NewServer(http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {
switch counter {
case 0:
counter++
w.WriteHeader(http.StatusInternalServerError)
return
case 1:
counter++
fmt.Fprintln(w, runComputationSuccessResponse)
return
default:
t.Errorf("invalid amount of retries: %d", counter)
t.FailNow()
}
}))
defer ts.Close()
adapterUrl, err := url.Parse(ts.URL)
assert.NoError(t, err)
ea := functions.NewExternalAdapterClient(*adapterUrl, 100_000, 1, 1*time.Nanosecond)
_, _, _, err = ea.RunComputation(testutils.Context(t), "requestID1234", "TestJob", "SubOwner", 1, functions.RequestFlags{}, "secRETS", &functions.RequestData{})
assert.NoError(t, err)
})`
$DIR/core/services/functions/external_adapter_client_test.go: `.NewServer(http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {
switch counter {
case 0:
counter++
w.WriteHeader(http.StatusInternalServerError)
return
case 1:
counter++
fmt.Fprintln(w, runComputationSuccessResponse)
return
default:
t.Errorf("invalid amount of retries: %d", counter)
t.FailNow()
}
}))`
$DIR/core/services/functions/external_adapter_client_test.go: `.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {
switch counter {
case 0:
counter++
w.WriteHeader(http.StatusInternalServerError)
return
case 1:
counter++
fmt.Fprintln(w, runComputationSuccessResponse)
return
default:
t.Errorf("invalid amount of retries: %d", counter)
t.FailNow()
}
})`
$DIR/core/services/functions/external_adapter_client_test.go: `.WriteHeader(http.StatusInternalServerError)`
$DIR/core/services/functions/external_adapter_client_test.go: `.Fprintln(w, runComputationSuccessResponse)`
$DIR/core/services/functions/external_adapter_client_test.go: `.Parse(ts.URL)`
$DIR/core/services/functions/external_adapter_client_test.go: `.NewExternalAdapterClient(*adapterUrl, 100_000, 1, 1*time.Nanosecond)`
$DIR/core/services/functions/external_adapter_client_test.go: `.RunComputation(testutils.Context(t), "requestID1234", "TestJob", "SubOwner", 1, functions.RequestFlags{}, "secRETS", &functions.RequestData{})`
$DIR/core/services/functions/external_adapter_client_test.go: `.Context(t)`
$DIR/core/services/functions/external_adapter_client_test.go: `.Run("NOK-retry_fails_after_retrial", func(t *testing.T) {
counter := 0
ts := httptest.NewServer(http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {
switch counter {
case 0, 1:
counter++
w.WriteHeader(http.StatusInternalServerError)
return
default:
t.Errorf("invalid amount of retries: %d", counter)
t.FailNow()
}
}))
defer ts.Close()
adapterUrl, err := url.Parse(ts.URL)
assert.NoError(t, err)
ea := functions.NewExternalAdapterClient(*adapterUrl, 100_000, 1, 1*time.Nanosecond)
_, _, _, err = ea.RunComputation(testutils.Context(t), "requestID1234", "TestJob", "SubOwner", 1, functions.RequestFlags{}, "secRETS", &functions.RequestData{})
assert.Error(t, err)
})`
$DIR/core/services/functions/external_adapter_client_test.go: `.NewServer(http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {
switch counter {
case 0, 1:
counter++
w.WriteHeader(http.StatusInternalServerError)
return
default:
t.Errorf("invalid amount of retries: %d", counter)
t.FailNow()
}
}))`
$DIR/core/services/functions/external_adapter_client_test.go: `.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {
switch counter {
case 0, 1:
counter++
w.WriteHeader(http.StatusInternalServerError)
return
default:
t.Errorf("invalid amount of retries: %d", counter)
t.FailNow()
}
})`
$DIR/core/services/functions/external_adapter_client_test.go: `.WriteHeader(http.StatusInternalServerError)`
$DIR/core/services/functions/external_adapter_client_test.go: `.Parse(ts.URL)`
$DIR/core/services/functions/external_adapter_client_test.go: `.NewExternalAdapterClient(*adapterUrl, 100_000, 1, 1*time.Nanosecond)`
$DIR/core/services/functions/external_adapter_client_test.go: `.RunComputation(testutils.Context(t), "requestID1234", "TestJob", "SubOwner", 1, functions.RequestFlags{}, "secRETS", &functions.RequestData{})`
$DIR/core/services/functions/external_adapter_client_test.go: `.Context(t)`
$DIR/core/services/functions/external_adapter_client_test.go: `.NewServer(http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {
switch counter {
case 0:
counter++
w.WriteHeader(http.StatusBadRequest)
return
default:
t.Errorf("invalid amount of retries: %d", counter)
t.FailNow()
}
}))`
$DIR/core/services/functions/external_adapter_client_test.go: `.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {
switch counter {
case 0:
counter++
w.WriteHeader(http.StatusBadRequest)
return
default:
t.Errorf("invalid amount of retries: %d", counter)
t.FailNow()
}
})`
$DIR/core/services/functions/external_adapter_client_test.go: `.WriteHeader(http.StatusBadRequest)`
$DIR/core/services/functions/external_adapter_client_test.go: `.Parse(ts.URL)`
$DIR/core/services/functions/external_adapter_client_test.go: `.NewExternalAdapterClient(*adapterUrl, 100_000, 1, 1*time.Nanosecond)`
$DIR/core/services/functions/external_adapter_client_test.go: `.RunComputation(testutils.Context(t), "requestID1234", "TestJob", "SubOwner", 1, functions.RequestFlags{}, "secRETS", &functions.RequestData{})`
$DIR/core/services/functions/external_adapter_client_test.go: `.Context(t)`
$DIR/core/services/functions/listener_test.go: `testutils.SkipShortDB(t)`
$DIR/core/services/functions/listener_test.go: `uni.logPollerWrapper.On("LatestEvents", mock.Anything).Return([]types.OracleRequest{request}, nil, nil).Once()`
$DIR/core/services/functions/listener_test.go: `uni.logPollerWrapper.On("LatestEvents", mock.Anything).Return(nil, nil, nil)`
$DIR/core/services/functions/listener_test.go: `uni.pluginORM.On("CreateRequest", mock.Anything, mock.Anything).Return(nil)`
$DIR/core/services/functions/listener_test.go: `uni.bridgeAccessor.On("NewExternalAdapterClient", mock.Anything).Return(uni.eaClient, nil)`
$DIR/core/services/functions/listener_test.go: `uni.eaClient.On("RunComputation", mock.Anything, RequestIDStr, mock.Anything, SubscriptionOwner.Hex(), SubscriptionID, mock.Anything, mock.Anything, mock.Anything).Return(ResultBytes, nil, nil, nil)`
$DIR/core/services/functions/listener_test.go: `uni.pluginORM.On("SetResult", mock.Anything, RequestID, ResultBytes, mock.Anything, mock.Anything).Run(func(args mock.Arguments) {
close(doneCh)
}).Return(nil)`
$DIR/core/services/functions/listener_test.go: `close(doneCh)`
$DIR/core/services/functions/listener_test.go: `servicetest.Run(t, uni.service)`
$DIR/core/services/functions/listener_test.go: `testutils.SkipShortDB(t)`
$DIR/core/services/functions/listener_test.go: `uni.pluginORM.On("CreateRequest", mock.Anything, mock.Anything, mock.Anything).Return(nil)`
$DIR/core/services/functions/listener_test.go: `uni.bridgeAccessor.On("NewExternalAdapterClient", mock.Anything).Return(uni.eaClient, nil)`
$DIR/core/services/functions/listener_test.go: `uni.eaClient.On("RunComputation", mock.Anything, RequestIDStr, mock.Anything, SubscriptionOwner.Hex(), SubscriptionID, mock.Anything, mock.Anything, mock.Anything).Return(ResultBytes, nil, nil, nil)`
$DIR/core/services/functions/listener_test.go: `uni.pluginORM.On("SetResult", mock.Anything, RequestID, ResultBytes, mock.Anything, mock.Anything).Return(nil)`
$DIR/core/services/functions/listener_test.go: `testutils.SkipShortDB(t)`
$DIR/core/services/functions/listener_test.go: `request.RequestInitiator = SubscriptionOwner.Bytes()`
$DIR/core/services/functions/listener_test.go: `request.SubscriptionOwner = []byte("invalid_address")`
$DIR/core/services/functions/listener_test.go: `request.SubscriptionOwner = SubscriptionOwner.Bytes()`
$DIR/core/services/functions/listener_test.go: `request.Timestamp = 1`
$DIR/core/services/functions/listener_test.go: `testutils.SkipShortDB(t)`
$DIR/core/services/functions/listener_test.go: `uni.pluginORM.On("CreateRequest", mock.Anything, mock.Anything, mock.Anything).Return(nil)`
$DIR/core/services/functions/listener_test.go: `uni.bridgeAccessor.On("NewExternalAdapterClient", mock.Anything).Return(uni.eaClient, nil)`
$DIR/core/services/functions/listener_test.go: `uni.eaClient.On("RunComputation", mock.Anything, RequestIDStr, mock.Anything, SubscriptionOwner.Hex(), SubscriptionID, mock.Anything, mock.Anything, mock.Anything).Return(nil, nil, nil, errors.New("error"))`
$DIR/core/services/functions/listener_test.go: `uni.pluginORM.On("SetError", mock.Anything, RequestID, mock.Anything, mock.Anything, mock.Anything, mock.Anything, mock.Anything).Return(nil)`
$DIR/core/services/functions/listener_test.go: `testutils.SkipShortDB(t)`
$DIR/core/services/functions/listener_test.go: `uni.logPollerWrapper.On("LatestEvents", mock.Anything).Return([]types.OracleRequest{request}, nil, nil).Once()`
$DIR/core/services/functions/listener_test.go: `uni.logPollerWrapper.On("LatestEvents", mock.Anything).Return(nil, nil, nil)`
$DIR/core/services/functions/listener_test.go: `uni.pluginORM.On("CreateRequest", mock.Anything, mock.Anything).Return(nil)`
$DIR/core/services/functions/listener_test.go: `uni.bridgeAccessor.On("NewExternalAdapterClient", mock.Anything).Return(uni.eaClient, nil)`
$DIR/core/services/functions/listener_test.go: `uni.eaClient.On("RunComputation", mock.Anything, RequestIDStr, mock.Anything, SubscriptionOwner.Hex(), SubscriptionID, mock.Anything, mock.Anything, mock.Anything).Return(nil, ErrorBytes, nil, nil)`
$DIR/core/services/functions/listener_test.go: `uni.pluginORM.On("SetError", mock.Anything, RequestID, mock.Anything, ErrorBytes, mock.Anything, mock.Anything, mock.Anything).Run(func(args mock.Arguments) {
close(doneCh)
}).Return(nil)`
$DIR/core/services/functions/listener_test.go: `close(doneCh)`
$DIR/core/services/functions/listener_test.go: `servicetest.Run(t, uni.service)`
$DIR/core/services/functions/listener_test.go: `testutils.SkipShortDB(t)`
$DIR/core/services/functions/listener_test.go: `cborBytes = cborBytes[1:]`
$DIR/core/services/functions/listener_test.go: `uni.logPollerWrapper.On("LatestEvents", mock.Anything).Return([]types.OracleRequest{request}, nil, nil).Once()`
$DIR/core/services/functions/listener_test.go: `uni.logPollerWrapper.On("LatestEvents", mock.Anything).Return(nil, nil, nil)`
$DIR/core/services/functions/listener_test.go: `uni.pluginORM.On("CreateRequest", mock.Anything, mock.Anything).Return(nil)`
$DIR/core/services/functions/listener_test.go: `uni.bridgeAccessor.On("NewExternalAdapterClient", mock.Anything).Return(uni.eaClient, nil)`
$DIR/core/services/functions/listener_test.go: `uni.eaClient.On("FetchEncryptedSecrets", mock.Anything, mock.Anything, RequestIDStr, mock.Anything, mock.Anything).Return(EncryptedSecrets, nil, nil)`
$DIR/core/services/functions/listener_test.go: `uni.decryptor.On("Decrypt", mock.Anything, decryptionPlugin.CiphertextId(RequestID[:]), EncryptedSecrets).Return(DecryptedSecrets, nil)`
$DIR/core/services/functions/listener_test.go: `uni.eaClient.On("RunComputation", mock.Anything, RequestIDStr, mock.Anything, SubscriptionOwner.Hex(), SubscriptionID, mock.Anything, mock.Anything, mock.Anything).Return(ResultBytes, nil, nil, nil)`
$DIR/core/services/functions/listener_test.go: `uni.pluginORM.On("SetResult", mock.Anything, RequestID, ResultBytes, mock.Anything, mock.Anything).Run(func(args mock.Arguments) {
close(doneCh)
}).Return(nil)`
$DIR/core/services/functions/listener_test.go: `close(doneCh)`
$DIR/core/services/functions/listener_test.go: `servicetest.Run(t, uni.service)`
$DIR/core/services/functions/listener_test.go: `testutils.SkipShortDB(t)`
$DIR/core/services/functions/listener_test.go: `uni.logPollerWrapper.On("LatestEvents", mock.Anything).Return([]types.OracleRequest{request}, nil, nil).Once()`
$DIR/core/services/functions/listener_test.go: `uni.logPollerWrapper.On("LatestEvents", mock.Anything).Return(nil, nil, nil)`
$DIR/core/services/functions/listener_test.go: `uni.pluginORM.On("CreateRequest", mock.Anything, mock.Anything).Return(nil)`
$DIR/core/services/functions/listener_test.go: `uni.pluginORM.On("SetError", mock.Anything, RequestID, functions_service.USER_ERROR, []byte("request too big (max 10 bytes)"), mock.Anything, mock.Anything, mock.Anything).Run(func(args mock.Arguments) {
close(doneCh)
}).Return(nil)`
$DIR/core/services/functions/listener_test.go: `close(doneCh)`
$DIR/core/services/functions/listener_test.go: `servicetest.Run(t, uni.service)`
$DIR/core/services/functions/listener_test.go: `testutils.SkipShortDB(t)`
$DIR/core/services/functions/listener_test.go: `uni.logPollerWrapper.On("LatestEvents", mock.Anything).Return([]types.OracleRequest{request}, nil, nil).Once()`
$DIR/core/services/functions/listener_test.go: `uni.logPollerWrapper.On("LatestEvents", mock.Anything).Return(nil, nil, nil)`
$DIR/core/services/functions/listener_test.go: `uni.pluginORM.On("CreateRequest", mock.Anything, mock.Anything).Return(nil)`
$DIR/core/services/functions/listener_test.go: `uni.bridgeAccessor.On("NewExternalAdapterClient", mock.Anything).Return(uni.eaClient, nil)`
$DIR/core/services/functions/listener_test.go: `uni.eaClient.On("RunComputation", mock.Anything, RequestIDStr, mock.Anything, SubscriptionOwner.Hex(), SubscriptionID, mock.Anything, mock.Anything, mock.Anything).Return(ResultBytes, nil, Domains, nil)`
$DIR/core/services/functions/listener_test.go: `uni.pluginORM.On("SetResult", mock.Anything, RequestID, ResultBytes, mock.Anything, mock.Anything).Run(func(args mock.Arguments) {
close(doneCh)
}).Return(nil)`
$DIR/core/services/functions/listener_test.go: `close(doneCh)`
$DIR/core/services/functions/listener_test.go: `uni.ingressClient.On("Send", mock.Anything, mock.AnythingOfType("[]uint8"), mock.AnythingOfType("string"), mock.AnythingOfType("TelemetryType")).Return().Run(func(args mock.Arguments) {
sentMessage = args[1].([]byte)
})`
$DIR/core/services/functions/listener_test.go: `sentMessage = args[1].([]byte)`
$DIR/core/services/functions/listener_test.go: `<-doneCh`
$DIR/core/services/functions/listener_test.go: `testutils.SkipShortDB(t)`
$DIR/core/services/functions/listener_test.go: `uni.logPollerWrapper.On("LatestEvents", mock.Anything).Return(nil, nil, nil)`
$DIR/core/services/functions/listener_test.go: `uni.pluginORM.On("PruneOldestRequests", mock.Anything, functions_service.DefaultPruneMaxStoredRequests, functions_service.DefaultPruneBatchSize, mock.Anything).Return(uint32(0), uint32(0), nil).Run(func(args mock.Arguments) {
doneCh <- true
})`
$DIR/core/services/functions/listener_test.go: `doneCh <- true`
$DIR/core/services/functions/listener_test.go: `servicetest.Run(t, uni.service)`
$DIR/core/services/functions/listener_test.go: `testutils.SkipShortDB(t)`
$DIR/core/services/functions/listener_test.go: `uni.logPollerWrapper.On("LatestEvents", mock.Anything).Return(nil, nil, nil)`
$DIR/core/services/functions/listener_test.go: `uni.pluginORM.On("TimeoutExpiredResults", mock.Anything, mock.Anything, uint32(1), mock.Anything).Return([]functions_service.RequestID{}, nil).Run(func(args mock.Arguments) {
doneCh <- true
})`
$DIR/core/services/functions/listener_test.go: `doneCh <- true`
$DIR/core/services/functions/listener_test.go: `servicetest.Run(t, uni.service)`
$DIR/core/services/functions/listener_test.go: `testutils.SkipShortDB(t)`
$DIR/core/services/functions/listener_test.go: `ormCallExited.Add(1)`
$DIR/core/services/functions/listener_test.go: `uni.logPollerWrapper.On("LatestEvents", mock.Anything).Return([]types.OracleRequest{request}, nil, nil).Once()`
$DIR/core/services/functions/listener_test.go: `uni.logPollerWrapper.On("LatestEvents", mock.Anything).Return(nil, nil, nil)`
$DIR/core/services/functions/listener_test.go: `uni.pluginORM.On("CreateRequest", mock.Anything, mock.Anything).Run(func(args mock.Arguments) {
<-args.Get(0).(context.Context).Done()
ormCallExited.Done()
}).Return(errors.New("timeout"))`
$DIR/core/services/functions/listener_test.go: `<-args.Get(0).(context.Context).Done()`
$DIR/core/services/functions/listener_test.go: `ormCallExited.Done()`
$DIR/core/services/functions/listener_test.go: `servicetest.Run(t, uni.service)`
$DIR/core/services/functions/listener_test.go: `.SkipShortDB(t)`
$DIR/core/services/functions/listener_test.go: `.logPollerWrapper.On("LatestEvents", mock.Anything)`
$DIR/core/services/functions/listener_test.go: `.Return([]types.OracleRequest{request}, nil, nil)`
$DIR/core/services/functions/listener_test.go: `.Once()`
$DIR/core/services/functions/listener_test.go: `.logPollerWrapper.On("LatestEvents", mock.Anything)`
$DIR/core/services/functions/listener_test.go: `.Return(nil, nil, nil)`
$DIR/core/services/functions/listener_test.go: `.pluginORM.On("CreateRequest", mock.Anything, mock.Anything)`
$DIR/core/services/functions/listener_test.go: `.Return(nil)`
$DIR/core/services/functions/listener_test.go: `.bridgeAccessor.On("NewExternalAdapterClient", mock.Anything)`
$DIR/core/services/functions/listener_test.go: `.Return(uni.eaClient, nil)`
$DIR/core/services/functions/listener_test.go: `.eaClient.On("RunComputation", mock.Anything, RequestIDStr, mock.Anything, SubscriptionOwner.Hex(), SubscriptionID, mock.Anything, mock.Anything, mock.Anything)`
$DIR/core/services/functions/listener_test.go: `.Hex()`
$DIR/core/services/functions/listener_test.go: `.Return(ResultBytes, nil, nil, nil)`
$DIR/core/services/functions/listener_test.go: `.pluginORM.On("SetResult", mock.Anything, RequestID, ResultBytes, mock.Anything, mock.Anything)`
$DIR/core/services/functions/listener_test.go: `.Run(func(args mock.Arguments) {
close(doneCh)
})`
$DIR/core/services/functions/listener_test.go: `.Return(nil)`
$DIR/core/services/functions/listener_test.go: `.Run(t, uni.service)`
$DIR/core/services/functions/listener_test.go: `.SkipShortDB(t)`
$DIR/core/services/functions/listener_test.go: `.pluginORM.On("CreateRequest", mock.Anything, mock.Anything, mock.Anything)`
$DIR/core/services/functions/listener_test.go: `.Return(nil)`
$DIR/core/services/functions/listener_test.go: `.bridgeAccessor.On("NewExternalAdapterClient", mock.Anything)`
$DIR/core/services/functions/listener_test.go: `.Return(uni.eaClient, nil)`
$DIR/core/services/functions/listener_test.go: `.eaClient.On("RunComputation", mock.Anything, RequestIDStr, mock.Anything, SubscriptionOwner.Hex(), SubscriptionID, mock.Anything, mock.Anything, mock.Anything)`
$DIR/core/services/functions/listener_test.go: `.Hex()`
$DIR/core/services/functions/listener_test.go: `.Return(ResultBytes, nil, nil, nil)`
$DIR/core/services/functions/listener_test.go: `.pluginORM.On("SetResult", mock.Anything, RequestID, ResultBytes, mock.Anything, mock.Anything)`
$DIR/core/services/functions/listener_test.go: `.Return(nil)`
$DIR/core/services/functions/listener_test.go: `.Bytes()`
$DIR/core/services/functions/listener_test.go: `.Bytes()`
$DIR/core/services/functions/listener_test.go: `.Now()`
$DIR/core/services/functions/listener_test.go: `.Unix()`
$DIR/core/services/functions/listener_test.go: `.service.HandleOffchainRequest(testutils.Context(t), request)`
$DIR/core/services/functions/listener_test.go: `.Context(t)`
$DIR/core/services/functions/listener_test.go: `.SkipShortDB(t)`
$DIR/core/services/functions/listener_test.go: `.Bytes()`
$DIR/core/services/functions/listener_test.go: `.Now()`
$DIR/core/services/functions/listener_test.go: `.Unix()`
$DIR/core/services/functions/listener_test.go: `.Bytes()`
$DIR/core/services/functions/listener_test.go: `.Bytes()`
$DIR/core/services/functions/listener_test.go: `.service.HandleOffchainRequest(testutils.Context(t), request)`
$DIR/core/services/functions/listener_test.go: `.Context(t)`
$DIR/core/services/functions/listener_test.go: `.SkipShortDB(t)`
$DIR/core/services/functions/listener_test.go: `.pluginORM.On("CreateRequest", mock.Anything, mock.Anything, mock.Anything)`
$DIR/core/services/functions/listener_test.go: `.Return(nil)`
$DIR/core/services/functions/listener_test.go: `.bridgeAccessor.On("NewExternalAdapterClient", mock.Anything)`
$DIR/core/services/functions/listener_test.go: `.Return(uni.eaClient, nil)`
$DIR/core/services/functions/listener_test.go: `.eaClient.On("RunComputation", mock.Anything, RequestIDStr, mock.Anything, SubscriptionOwner.Hex(), SubscriptionID, mock.Anything, mock.Anything, mock.Anything)`
$DIR/core/services/functions/listener_test.go: `.Hex()`
$DIR/core/services/functions/listener_test.go: `.Return(nil, nil, nil, errors.New("error"))`
$DIR/core/services/functions/listener_test.go: `.New("error")`
$DIR/core/services/functions/listener_test.go: `.pluginORM.On("SetError", mock.Anything, RequestID, mock.Anything, mock.Anything, mock.Anything, mock.Anything, mock.Anything)`
$DIR/core/services/functions/listener_test.go: `.Return(nil)`
$DIR/core/services/functions/listener_test.go: `.Bytes()`
$DIR/core/services/functions/listener_test.go: `.Bytes()`
$DIR/core/services/functions/listener_test.go: `.Now()`
$DIR/core/services/functions/listener_test.go: `.Unix()`
$DIR/core/services/functions/listener_test.go: `.service.HandleOffchainRequest(testutils.Context(t), request)`
$DIR/core/services/functions/listener_test.go: `.Context(t)`
$DIR/core/services/functions/listener_test.go: `.SkipShortDB(t)`
$DIR/core/services/functions/listener_test.go: `.logPollerWrapper.On("LatestEvents", mock.Anything)`
$DIR/core/services/functions/listener_test.go: `.Return([]types.OracleRequest{request}, nil, nil)`
$DIR/core/services/functions/listener_test.go: `.Once()`
$DIR/core/services/functions/listener_test.go: `.logPollerWrapper.On("LatestEvents", mock.Anything)`
$DIR/core/services/functions/listener_test.go: `.Return(nil, nil, nil)`
$DIR/core/services/functions/listener_test.go: `.pluginORM.On("CreateRequest", mock.Anything, mock.Anything)`
$DIR/core/services/functions/listener_test.go: `.Return(nil)`
$DIR/core/services/functions/listener_test.go: `.bridgeAccessor.On("NewExternalAdapterClient", mock.Anything)`
$DIR/core/services/functions/listener_test.go: `.Return(uni.eaClient, nil)`
$DIR/core/services/functions/listener_test.go: `.eaClient.On("RunComputation", mock.Anything, RequestIDStr, mock.Anything, SubscriptionOwner.Hex(), SubscriptionID, mock.Anything, mock.Anything, mock.Anything)`
$DIR/core/services/functions/listener_test.go: `.Hex()`
$DIR/core/services/functions/listener_test.go: `.Return(nil, ErrorBytes, nil, nil)`
$DIR/core/services/functions/listener_test.go: `.pluginORM.On("SetError", mock.Anything, RequestID, mock.Anything, ErrorBytes, mock.Anything, mock.Anything, mock.Anything)`
$DIR/core/services/functions/listener_test.go: `.Run(func(args mock.Arguments) {
close(doneCh)
})`
$DIR/core/services/functions/listener_test.go: `.Return(nil)`
$DIR/core/services/functions/listener_test.go: `.Run(t, uni.service)`
$DIR/core/services/functions/listener_test.go: `.SkipShortDB(t)`
$DIR/core/services/functions/listener_test.go: `.Marshal(reqData)`
$DIR/core/services/functions/listener_test.go: `.logPollerWrapper.On("LatestEvents", mock.Anything)`
$DIR/core/services/functions/listener_test.go: `.Return([]types.OracleRequest{request}, nil, nil)`
$DIR/core/services/functions/listener_test.go: `.Once()`
$DIR/core/services/functions/listener_test.go: `.logPollerWrapper.On("LatestEvents", mock.Anything)`
$DIR/core/services/functions/listener_test.go: `.Return(nil, nil, nil)`
$DIR/core/services/functions/listener_test.go: `.pluginORM.On("CreateRequest", mock.Anything, mock.Anything)`
$DIR/core/services/functions/listener_test.go: `.Return(nil)`
$DIR/core/services/functions/listener_test.go: `.bridgeAccessor.On("NewExternalAdapterClient", mock.Anything)`
$DIR/core/services/functions/listener_test.go: `.Return(uni.eaClient, nil)`
$DIR/core/services/functions/listener_test.go: `.eaClient.On("FetchEncryptedSecrets", mock.Anything, mock.Anything, RequestIDStr, mock.Anything, mock.Anything)`
$DIR/core/services/functions/listener_test.go: `.Return(EncryptedSecrets, nil, nil)`
$DIR/core/services/functions/listener_test.go: `.decryptor.On("Decrypt", mock.Anything, decryptionPlugin.CiphertextId(RequestID[:]), EncryptedSecrets)`
$DIR/core/services/functions/listener_test.go: `.CiphertextId(RequestID[:])`
$DIR/core/services/functions/listener_test.go: `.Return(DecryptedSecrets, nil)`
$DIR/core/services/functions/listener_test.go: `.eaClient.On("RunComputation", mock.Anything, RequestIDStr, mock.Anything, SubscriptionOwner.Hex(), SubscriptionID, mock.Anything, mock.Anything, mock.Anything)`
$DIR/core/services/functions/listener_test.go: `.Hex()`
$DIR/core/services/functions/listener_test.go: `.Return(ResultBytes, nil, nil, nil)`
$DIR/core/services/functions/listener_test.go: `.pluginORM.On("SetResult", mock.Anything, RequestID, ResultBytes, mock.Anything, mock.Anything)`
$DIR/core/services/functions/listener_test.go: `.Run(func(args mock.Arguments) {
close(doneCh)
})`
$DIR/core/services/functions/listener_test.go: `.Return(nil)`
$DIR/core/services/functions/listener_test.go: `.Run(t, uni.service)`
$DIR/core/services/functions/listener_test.go: `.SkipShortDB(t)`
$DIR/core/services/functions/listener_test.go: `.logPollerWrapper.On("LatestEvents", mock.Anything)`
$DIR/core/services/functions/listener_test.go: `.Return([]types.OracleRequest{request}, nil, nil)`
$DIR/core/services/functions/listener_test.go: `.Once()`
$DIR/core/services/functions/listener_test.go: `.logPollerWrapper.On("LatestEvents", mock.Anything)`
$DIR/core/services/functions/listener_test.go: `.Return(nil, nil, nil)`
$DIR/core/services/functions/listener_test.go: `.pluginORM.On("CreateRequest", mock.Anything, mock.Anything)`
$DIR/core/services/functions/listener_test.go: `.Return(nil)`
$DIR/core/services/functions/listener_test.go: `.pluginORM.On("SetError", mock.Anything, RequestID, functions_service.USER_ERROR, []byte("request too big (max 10 bytes)"), mock.Anything, mock.Anything, mock.Anything)`
$DIR/core/services/functions/listener_test.go: `.Run(func(args mock.Arguments) {
close(doneCh)
})`
$DIR/core/services/functions/listener_test.go: `.Return(nil)`
$DIR/core/services/functions/listener_test.go: `.Run(t, uni.service)`
$DIR/core/services/functions/listener_test.go: `.SkipShortDB(t)`
$DIR/core/services/functions/listener_test.go: `.logPollerWrapper.On("LatestEvents", mock.Anything)`
$DIR/core/services/functions/listener_test.go: `.Return([]types.OracleRequest{request}, nil, nil)`
$DIR/core/services/functions/listener_test.go: `.Once()`
$DIR/core/services/functions/listener_test.go: `.logPollerWrapper.On("LatestEvents", mock.Anything)`
$DIR/core/services/functions/listener_test.go: `.Return(nil, nil, nil)`
$DIR/core/services/functions/listener_test.go: `.pluginORM.On("CreateRequest", mock.Anything, mock.Anything)`
$DIR/core/services/functions/listener_test.go: `.Return(nil)`
$DIR/core/services/functions/listener_test.go: `.bridgeAccessor.On("NewExternalAdapterClient", mock.Anything)`
$DIR/core/services/functions/listener_test.go: `.Return(uni.eaClient, nil)`
$DIR/core/services/functions/listener_test.go: `.eaClient.On("RunComputation", mock.Anything, RequestIDStr, mock.Anything, SubscriptionOwner.Hex(), SubscriptionID, mock.Anything, mock.Anything, mock.Anything)`
$DIR/core/services/functions/listener_test.go: `.Hex()`
$DIR/core/services/functions/listener_test.go: `.Return(ResultBytes, nil, Domains, nil)`
$DIR/core/services/functions/listener_test.go: `.pluginORM.On("SetResult", mock.Anything, RequestID, ResultBytes, mock.Anything, mock.Anything)`
$DIR/core/services/functions/listener_test.go: `.Run(func(args mock.Arguments) {
close(doneCh)
})`
$DIR/core/services/functions/listener_test.go: `.Return(nil)`
$DIR/core/services/functions/listener_test.go: `.ingressClient.On("Send", mock.Anything, mock.AnythingOfType("[]uint8"), mock.AnythingOfType("string"), mock.AnythingOfType("TelemetryType"))`
$DIR/core/services/functions/listener_test.go: `.AnythingOfType("[]uint8")`
$DIR/core/services/functions/listener_test.go: `.AnythingOfType("string")`
$DIR/core/services/functions/listener_test.go: `.AnythingOfType("TelemetryType")`
$DIR/core/services/functions/listener_test.go: `.Return()`
$DIR/core/services/functions/listener_test.go: `.Run(func(args mock.Arguments) {
sentMessage = args[1].([]byte)
})`
$DIR/core/services/functions/listener_test.go: `.Unmarshal(sentMessage, &req)`
$DIR/core/services/functions/listener_test.go: `.SkipShortDB(t)`
$DIR/core/services/functions/listener_test.go: `.logPollerWrapper.On("LatestEvents", mock.Anything)`
$DIR/core/services/functions/listener_test.go: `.Return(nil, nil, nil)`
$DIR/core/services/functions/listener_test.go: `.pluginORM.On("PruneOldestRequests", mock.Anything, functions_service.DefaultPruneMaxStoredRequests, functions_service.DefaultPruneBatchSize, mock.Anything)`
$DIR/core/services/functions/listener_test.go: `.Return(uint32(0), uint32(0), nil)`
$DIR/core/services/functions/listener_test.go: `.Run(func(args mock.Arguments) {
doneCh <- true
})`
$DIR/core/services/functions/listener_test.go: `.Run(t, uni.service)`
$DIR/core/services/functions/listener_test.go: `.SkipShortDB(t)`
$DIR/core/services/functions/listener_test.go: `.logPollerWrapper.On("LatestEvents", mock.Anything)`
$DIR/core/services/functions/listener_test.go: `.Return(nil, nil, nil)`
$DIR/core/services/functions/listener_test.go: `.pluginORM.On("TimeoutExpiredResults", mock.Anything, mock.Anything, uint32(1), mock.Anything)`
$DIR/core/services/functions/listener_test.go: `.Return([]functions_service.RequestID{}, nil)`
$DIR/core/services/functions/listener_test.go: `.Run(func(args mock.Arguments) {
doneCh <- true
})`
$DIR/core/services/functions/listener_test.go: `.Run(t, uni.service)`
$DIR/core/services/functions/listener_test.go: `.SkipShortDB(t)`
$DIR/core/services/functions/listener_test.go: `.Add(1)`
$DIR/core/services/functions/listener_test.go: `.logPollerWrapper.On("LatestEvents", mock.Anything)`
$DIR/core/services/functions/listener_test.go: `.Return([]types.OracleRequest{request}, nil, nil)`
$DIR/core/services/functions/listener_test.go: `.Once()`
$DIR/core/services/functions/listener_test.go: `.logPollerWrapper.On("LatestEvents", mock.Anything)`
$DIR/core/services/functions/listener_test.go: `.Return(nil, nil, nil)`
$DIR/core/services/functions/listener_test.go: `.pluginORM.On("CreateRequest", mock.Anything, mock.Anything)`
$DIR/core/services/functions/listener_test.go: `.Run(func(args mock.Arguments) {
<-args.Get(0).(context.Context).Done()
ormCallExited.Done()
})`
$DIR/core/services/functions/listener_test.go: `.Get(0)`
$DIR/core/services/functions/listener_test.go: `.Done()`
$DIR/core/services/functions/listener_test.go: `.Done()`
$DIR/core/services/functions/listener_test.go: `.Return(errors.New("timeout"))`
$DIR/core/services/functions/listener_test.go: `.New("timeout")`
$DIR/core/services/functions/listener_test.go: `.Run(t, uni.service)`
$DIR/core/services/functions/offchain_transmitter_test.go: `.NewOffchainTransmitter(1)`
$DIR/core/services/functions/offchain_transmitter_test.go: `.ReportChannel()`
$DIR/core/services/functions/offchain_transmitter_test.go: `.Context(t)`
$DIR/core/services/functions/offchain_transmitter_test.go: `.WithTimeout(ctx, time.Millisecond*20)`
$DIR/core/services/functions/offchain_transmitter_test.go: `.TransmitReport(ctxTimeout, report)`
$DIR/core/services/functions/orm_test.go: `t.Run("missing ID", func(t *testing.T) {
req, err := orm.FindById(testutils.Context(t), newRequestID())
require.Error(t, err)
require.Nil(t, req)
})`
$DIR/core/services/functions/orm_test.go: `err = orm.SetResult(ctx, id, []byte{}, now)`
$DIR/core/services/functions/orm_test.go: `req, err = orm.FindById(ctx, id)`
$DIR/core/services/functions/orm_test.go: `_, err = orm.TimeoutExpiredResults(ctx, now.Add(time.Minute), 1)`
$DIR/core/services/functions/orm_test.go: `req, err = orm.FindById(ctx, id)`
$DIR/core/services/functions/orm_test.go: `err = orm.SetFinalized(ctx, id, nil, nil)`
$DIR/core/services/functions/orm_test.go: `req, err = orm.FindById(ctx, id)`
$DIR/core/services/functions/orm_test.go: `err = orm.SetConfirmed(ctx, id)`
$DIR/core/services/functions/orm_test.go: `req, err = orm.FindById(ctx, id)`
$DIR/core/services/functions/orm_test.go: `createRequestWithTimestamp(t, orm, now.Add(3*time.Minute))`
$DIR/core/services/functions/orm_test.go: `t.Run("with limit", func(t *testing.T) {
ctx := testutils.Context(t)
result, err := orm.FindOldestEntriesByState(ctx, functions.IN_PROGRESS, 2)
require.NoError(t, err)
require.Equal(t, 2, len(result), "incorrect results length")
require.Equal(t, id1, result[0].RequestID, "incorrect results order")
require.Equal(t, id2, result[1].RequestID, "incorrect results order")
require.Equal(t, defaultFlags, result[0].Flags)
require.Equal(t, defaultAggregationMethod, *result[0].AggregationMethod)
require.Equal(t, defaultGasLimit, *result[0].CallbackGasLimit)
require.Equal(t, defaultCoordinatorContract, *result[0].CoordinatorContractAddress)
require.Equal(t, defaultMetadata, result[0].OnchainMetadata)
})`
$DIR/core/services/functions/orm_test.go: `t.Run("with no limit", func(t *testing.T) {
ctx := testutils.Context(t)
result, err := orm.FindOldestEntriesByState(ctx, functions.IN_PROGRESS, 20)
require.NoError(t, err)
require.Equal(t, 3, len(result), "incorrect results length")
})`
$DIR/core/services/functions/orm_test.go: `ids = append(ids, id)`
$DIR/core/services/functions/orm_test.go: `err = orm.SetFinalized(ctx, ids[1], []byte("result"), []byte(""))`
$DIR/core/services/functions/orm_test.go: `err = orm.SetConfirmed(ctx, ids[2])`
$DIR/core/services/functions/orm_test.go: `results, err = orm.TimeoutExpiredResults(ctx, now.Add(-15*time.Minute), 10)`
$DIR/core/services/functions/orm_test.go: `results, err = orm.TimeoutExpiredResults(ctx, now.Add(-15*time.Minute), 10)`
$DIR/core/services/functions/orm_test.go: `ids = append(ids, id)`
$DIR/core/services/functions/orm_test.go: `total, pruned, err = orm.PruneOldestRequests(ctx, 1, 2)`
$DIR/core/services/functions/orm_test.go: `total, pruned, err = orm.PruneOldestRequests(ctx, 1, 20)`
$DIR/core/services/functions/orm_test.go: `total, pruned, err = orm.PruneOldestRequests(ctx, 1, 20)`
$DIR/core/services/functions/orm_test.go: `_, _ = createRequestWithTimestamp(t, orm, now.Add(time.Duration(offset)*time.Minute))`
$DIR/core/services/functions/orm_test.go: `.Context(t)`
$DIR/core/services/functions/orm_test.go: `.FindById(ctx, id1)`
$DIR/core/services/functions/orm_test.go: `.FindById(ctx, id2)`
$DIR/core/services/functions/orm_test.go: `.Run("missing ID", func(t *testing.T) {
req, err := orm.FindById(testutils.Context(t), newRequestID())
require.Error(t, err)
require.Nil(t, req)
})`
$DIR/core/services/functions/orm_test.go: `.FindById(testutils.Context(t), newRequestID())`
$DIR/core/services/functions/orm_test.go: `.Context(t)`
$DIR/core/services/functions/orm_test.go: `.CreateRequest(testutils.Context(t), newReq)`
$DIR/core/services/functions/orm_test.go: `.Context(t)`
$DIR/core/services/functions/orm_test.go: `.Context(t)`
$DIR/core/services/functions/orm_test.go: `.Now()`
$DIR/core/services/functions/orm_test.go: `.Round(time.Second)`
$DIR/core/services/functions/orm_test.go: `.SetResult(ctx, id, []byte("result"), rdts)`
$DIR/core/services/functions/orm_test.go: `.FindById(ctx, id)`
$DIR/core/services/functions/orm_test.go: `.Context(t)`
$DIR/core/services/functions/orm_test.go: `.Now()`
$DIR/core/services/functions/orm_test.go: `.Round(time.Second)`
$DIR/core/services/functions/orm_test.go: `.SetError(ctx, id, functions.USER_ERROR, []byte("error"), rdts, true)`
$DIR/core/services/functions/orm_test.go: `.FindById(ctx, id)`
$DIR/core/services/functions/orm_test.go: `.Context(t)`
$DIR/core/services/functions/orm_test.go: `.Now()`
$DIR/core/services/functions/orm_test.go: `.Round(time.Second)`
$DIR/core/services/functions/orm_test.go: `.SetError(ctx, id, functions.INTERNAL_ERROR, []byte("error"), rdts, false)`
$DIR/core/services/functions/orm_test.go: `.FindById(ctx, id)`
$DIR/core/services/functions/orm_test.go: `.Context(t)`
$DIR/core/services/functions/orm_test.go: `.SetFinalized(ctx, id, []byte("result"), []byte("error"))`
$DIR/core/services/functions/orm_test.go: `.FindById(ctx, id)`
$DIR/core/services/functions/orm_test.go: `.Context(t)`
$DIR/core/services/functions/orm_test.go: `.SetConfirmed(ctx, id)`
$DIR/core/services/functions/orm_test.go: `.FindById(ctx, id)`
$DIR/core/services/functions/orm_test.go: `.Context(t)`
$DIR/core/services/functions/orm_test.go: `.Now()`
$DIR/core/services/functions/orm_test.go: `.FindById(ctx, id)`
$DIR/core/services/functions/orm_test.go: `.SetResult(ctx, id, []byte{}, now)`
$DIR/core/services/functions/orm_test.go: `.FindById(ctx, id)`
$DIR/core/services/functions/orm_test.go: `.TimeoutExpiredResults(ctx, now.Add(time.Minute), 1)`
$DIR/core/services/functions/orm_test.go: `.Add(time.Minute)`
$DIR/core/services/functions/orm_test.go: `.FindById(ctx, id)`
$DIR/core/services/functions/orm_test.go: `.SetFinalized(ctx, id, nil, nil)`
$DIR/core/services/functions/orm_test.go: `.FindById(ctx, id)`
$DIR/core/services/functions/orm_test.go: `.SetConfirmed(ctx, id)`
$DIR/core/services/functions/orm_test.go: `.FindById(ctx, id)`
$DIR/core/services/functions/orm_test.go: `.Now()`
$DIR/core/services/functions/orm_test.go: `.Add(2*time.Minute)`
$DIR/core/services/functions/orm_test.go: `.Add(3*time.Minute)`
$DIR/core/services/functions/orm_test.go: `.Add(1*time.Minute)`
$DIR/core/services/functions/orm_test.go: `.Run("with limit", func(t *testing.T) {
ctx := testutils.Context(t)
result, err := orm.FindOldestEntriesByState(ctx, functions.IN_PROGRESS, 2)
require.NoError(t, err)
require.Equal(t, 2, len(result), "incorrect results length")
require.Equal(t, id1, result[0].RequestID, "incorrect results order")
require.Equal(t, id2, result[1].RequestID, "incorrect results order")
require.Equal(t, defaultFlags, result[0].Flags)
require.Equal(t, defaultAggregationMethod, *result[0].AggregationMethod)
require.Equal(t, defaultGasLimit, *result[0].CallbackGasLimit)
require.Equal(t, defaultCoordinatorContract, *result[0].CoordinatorContractAddress)
require.Equal(t, defaultMetadata, result[0].OnchainMetadata)
})`
$DIR/core/services/functions/orm_test.go: `.Context(t)`
$DIR/core/services/functions/orm_test.go: `.FindOldestEntriesByState(ctx, functions.IN_PROGRESS, 2)`
$DIR/core/services/functions/orm_test.go: `.Run("with no limit", func(t *testing.T) {
ctx := testutils.Context(t)
result, err := orm.FindOldestEntriesByState(ctx, functions.IN_PROGRESS, 20)
require.NoError(t, err)
require.Equal(t, 3, len(result), "incorrect results length")
})`
$DIR/core/services/functions/orm_test.go: `.Context(t)`
$DIR/core/services/functions/orm_test.go: `.FindOldestEntriesByState(ctx, functions.IN_PROGRESS, 20)`
$DIR/core/services/functions/orm_test.go: `.Context(t)`
$DIR/core/services/functions/orm_test.go: `.FindOldestEntriesByState(ctx, functions.RESULT_READY, 10)`
$DIR/core/services/functions/orm_test.go: `.Context(t)`
$DIR/core/services/functions/orm_test.go: `.Now()`
$DIR/core/services/functions/orm_test.go: `.Add(time.Duration(offset)*time.Minute)`
$DIR/core/services/functions/orm_test.go: `.Duration(offset)`
$DIR/core/services/functions/orm_test.go: `.SetResult(ctx, ids[0], []byte("result"), now)`
$DIR/core/services/functions/orm_test.go: `.SetFinalized(ctx, ids[1], []byte("result"), []byte(""))`
$DIR/core/services/functions/orm_test.go: `.SetConfirmed(ctx, ids[2])`
$DIR/core/services/functions/orm_test.go: `.TimeoutExpiredResults(ctx, now.Add(-35*time.Minute), 1)`
$DIR/core/services/functions/orm_test.go: `.Add(-35*time.Minute)`
$DIR/core/services/functions/orm_test.go: `.TimeoutExpiredResults(ctx, now.Add(-15*time.Minute), 10)`
$DIR/core/services/functions/orm_test.go: `.Add(-15*time.Minute)`
$DIR/core/services/functions/orm_test.go: `.TimeoutExpiredResults(ctx, now.Add(-15*time.Minute), 10)`
$DIR/core/services/functions/orm_test.go: `.Add(-15*time.Minute)`
$DIR/core/services/functions/orm_test.go: `.FindById(ctx, ids[i])`
$DIR/core/services/functions/orm_test.go: `.Context(t)`
$DIR/core/services/functions/orm_test.go: `.Now()`
$DIR/core/services/functions/orm_test.go: `.Add(time.Duration(offset)*time.Minute)`
$DIR/core/services/functions/orm_test.go: `.Duration(offset)`
$DIR/core/services/functions/orm_test.go: `.PruneOldestRequests(ctx, 6, 3)`
$DIR/core/services/functions/orm_test.go: `.PruneOldestRequests(ctx, 1, 2)`
$DIR/core/services/functions/orm_test.go: `.PruneOldestRequests(ctx, 1, 20)`
$DIR/core/services/functions/orm_test.go: `.PruneOldestRequests(ctx, 1, 20)`
$DIR/core/services/functions/orm_test.go: `.FindOldestEntriesByState(ctx, functions.IN_PROGRESS, 20)`
$DIR/core/services/functions/orm_test.go: `.Context(t)`
$DIR/core/services/functions/orm_test.go: `.Now()`
$DIR/core/services/functions/orm_test.go: `.Add(time.Duration(offset)*time.Minute)`
$DIR/core/services/functions/orm_test.go: `.Duration(offset)`
$DIR/core/services/functions/orm_test.go: `.PruneOldestRequests(ctx, 100, 1000)`
$DIR/core/services/functions/orm_test.go: `.FindOldestEntriesByState(ctx, functions.IN_PROGRESS, 200)`
$DIR/core/services/gateway/api/jsonrpccodec_test.go: `msg.Body = api.MessageBody{
MessageId: "aA-bB",
Receiver: "0x1234",
Method: "upload",
}`
$DIR/core/services/gateway/api/jsonrpccodec_test.go: `msg.Body = api.MessageBody{
MessageId: "aA-bB",
Receiver: "0x1234",
Method: "upload",
}`
$DIR/core/services/gateway/api/jsonrpccodec_test.go: `.DecodeRequest(input)`
$DIR/core/services/gateway/api/jsonrpccodec_test.go: `.DecodeRequest([]byte(input))`
$DIR/core/services/gateway/api/jsonrpccodec_test.go: `.EncodeRequest(&msg)`
$DIR/core/services/gateway/api/jsonrpccodec_test.go: `.DecodeRequest(bytes)`
$DIR/core/services/gateway/api/jsonrpccodec_test.go: `.DecodeResponse(input)`
$DIR/core/services/gateway/api/jsonrpccodec_test.go: `.EncodeResponse(&msg)`
$DIR/core/services/gateway/api/jsonrpccodec_test.go: `.DecodeResponse(bytes)`
$DIR/core/services/gateway/api/message_test.go: `err = msg.Sign(privateKey)`
$DIR/core/services/gateway/api/message_test.go: `msg.Body.MessageId = ""`
$DIR/core/services/gateway/api/message_test.go: `msg.Body.MessageId = "myid\x00\x00"`
$DIR/core/services/gateway/api/message_test.go: `msg.Body.MessageId = "abcd"`
$DIR/core/services/gateway/api/message_test.go: `msg.Body.DonId = ""`
$DIR/core/services/gateway/api/message_test.go: `msg.Body.DonId = "mydon\x00\x00"`
$DIR/core/services/gateway/api/message_test.go: `msg.Body.DonId = "donA"`
$DIR/core/services/gateway/api/message_test.go: `msg.Body.Method = string(bytes.Repeat([]byte("a"), api.MessageMethodMaxLen+1))`
$DIR/core/services/gateway/api/message_test.go: `msg.Body.Method = ""`
$DIR/core/services/gateway/api/message_test.go: `msg.Body.Method = "method\x00"`
$DIR/core/services/gateway/api/message_test.go: `msg.Body.Method = "request"`
$DIR/core/services/gateway/api/message_test.go: `msg.Body.Receiver = "blah"`
$DIR/core/services/gateway/api/message_test.go: `msg.Body.Receiver = "0x0000000000000000000000000000000000000000"`
$DIR/core/services/gateway/api/message_test.go: `msg.Signature = "0x00"`
$DIR/core/services/gateway/api/message_test.go: `err = msg.Sign(privateKey)`
$DIR/core/services/gateway/api/message_test.go: `msg.Body.MessageId = "dbca"`
$DIR/core/services/gateway/api/message_test.go: `signer, err = msg.ExtractSigner()`
$DIR/core/services/gateway/api/message_test.go: `.GenerateKey()`
$DIR/core/services/gateway/api/message_test.go: `.Sign(privateKey)`
$DIR/core/services/gateway/api/message_test.go: `.Repeat([]byte("a"), api.MessageMethodMaxLen+1)`
$DIR/core/services/gateway/api/message_test.go: `.Validate()`
$DIR/core/services/gateway/api/message_test.go: `.GenerateKey()`
$DIR/core/services/gateway/api/message_test.go: `.PubkeyToAddress(privateKey.PublicKey)`
$DIR/core/services/gateway/api/message_test.go: `.Bytes()`
$DIR/core/services/gateway/api/message_test.go: `.Sign(privateKey)`
$DIR/core/services/gateway/api/message_test.go: `.ExtractSigner()`
$DIR/core/services/gateway/api/message_test.go: `.ExtractSigner()`
$DIR/core/services/gateway/api/message_test.go: `.Equal(address, signer)`
$DIR/core/services/gateway/common/utils_test.go: `val = "0123456789"`
$DIR/core/services/gateway/common/utils_test.go: `data = common.StringToAlignedBytes(val, 10)`
$DIR/core/services/gateway/common/utils_test.go: `val = "世界"`
$DIR/core/services/gateway/common/utils_test.go: `data = common.StringToAlignedBytes(val, 40)`
$DIR/core/services/gateway/common/utils_test.go: `signer, err = common.ExtractSigner(signature, incorrectData)`
$DIR/core/services/gateway/common/utils_test.go: `_, err = common.ExtractSigner([]byte{0xaa, 0xbb}, data)`
$DIR/core/services/gateway/common/utils_test.go: `.Now()`
$DIR/core/services/gateway/common/utils_test.go: `.Unix()`
$DIR/core/services/gateway/common/utils_test.go: `.Uint32ToBytes(val)`
$DIR/core/services/gateway/common/utils_test.go: `.BytesToUint32(data)`
$DIR/core/services/gateway/common/utils_test.go: `.StringToAlignedBytes(val, 40)`
$DIR/core/services/gateway/common/utils_test.go: `.StringToAlignedBytes(val, 10)`
$DIR/core/services/gateway/common/utils_test.go: `.StringToAlignedBytes(val, 40)`
$DIR/core/services/gateway/common/utils_test.go: `.AlignedBytesToString(data)`
$DIR/core/services/gateway/common/utils_test.go: `.GenerateKey()`
$DIR/core/services/gateway/common/utils_test.go: `.PubkeyToAddress(privateKey.PublicKey)`
$DIR/core/services/gateway/common/utils_test.go: `.Bytes()`
$DIR/core/services/gateway/common/utils_test.go: `.SignData(privateKey, data)`
$DIR/core/services/gateway/common/utils_test.go: `.ExtractSigner(signature, data)`
$DIR/core/services/gateway/common/utils_test.go: `.ExtractSigner(signature, incorrectData)`
$DIR/core/services/gateway/common/utils_test.go: `.ExtractSigner([]byte{0xaa, 0xbb}, data)`
$DIR/core/services/gateway/connectionmanager_test.go: `t.Run(name, func(t *testing.T) {
fullConfig := `
[nodeServerConfig]
Path = "/node"` + config
_, err := gateway.NewConnectionManager(parseTOMLConfig(t, fullConfig), clockwork.NewFakeClock(), logger.TestLogger(t))
require.Error(t, err)
})`
$DIR/core/services/gateway/connectionmanager_test.go: `_, _, err = mgr.StartHandshake(signAndPackAuthHeader(t, &authHeaderElems, nodes[0].PrivateKey))`
$DIR/core/services/gateway/connectionmanager_test.go: `_, _, err = mgr.StartHandshake([]byte("ab"))`
$DIR/core/services/gateway/connectionmanager_test.go: `badAuthHeaderElems.DonId = "my_don_2"`
$DIR/core/services/gateway/connectionmanager_test.go: `_, _, err = mgr.StartHandshake(signAndPackAuthHeader(t, &badAuthHeaderElems, nodes[0].PrivateKey))`
$DIR/core/services/gateway/connectionmanager_test.go: `badAuthHeaderElems = authHeaderElems`
$DIR/core/services/gateway/connectionmanager_test.go: `badAuthHeaderElems.GatewayId = "www.example.com"`
$DIR/core/services/gateway/connectionmanager_test.go: `_, _, err = mgr.StartHandshake(signAndPackAuthHeader(t, &badAuthHeaderElems, nodes[0].PrivateKey))`
$DIR/core/services/gateway/connectionmanager_test.go: `badAuthHeaderElems = authHeaderElems`
$DIR/core/services/gateway/connectionmanager_test.go: `_, _, err = mgr.StartHandshake(signAndPackAuthHeader(t, &badAuthHeaderElems, unrelatedNode.PrivateKey))`
$DIR/core/services/gateway/connectionmanager_test.go: `badAuthHeaderElems = authHeaderElems`
$DIR/core/services/gateway/connectionmanager_test.go: `copy(rawHeader[len(rawHeader)-65:], make([]byte, 65))`
$DIR/core/services/gateway/connectionmanager_test.go: `_, _, err = mgr.StartHandshake(rawHeader)`
$DIR/core/services/gateway/connectionmanager_test.go: `badAuthHeaderElems = authHeaderElems`
$DIR/core/services/gateway/connectionmanager_test.go: `badAuthHeaderElems.Timestamp -= 10`
$DIR/core/services/gateway/connectionmanager_test.go: `_, _, err = mgr.StartHandshake(signAndPackAuthHeader(t, &badAuthHeaderElems, nodes[0].PrivateKey))`
$DIR/core/services/gateway/connectionmanager_test.go: `err = mgr.FinalizeHandshake("fake_attempt", response, nil)`
$DIR/core/services/gateway/connectionmanager_test.go: `attemptId, challenge, err = mgr.StartHandshake(signAndPackAuthHeader(t, &authHeaderElems, nodes[0].PrivateKey))`
$DIR/core/services/gateway/connectionmanager_test.go: `response, err = gc.SignData(nodes[1].PrivateKey, challenge)`
$DIR/core/services/gateway/connectionmanager_test.go: `err = mgr.FinalizeHandshake(attemptId, response, nil)`
$DIR/core/services/gateway/connectionmanager_test.go: `err = donMgr.SendToNode(testutils.Context(t), nodes[0].Address, nil)`
$DIR/core/services/gateway/connectionmanager_test.go: `err = donMgr.SendToNode(testutils.Context(t), "some_other_node", message)`
$DIR/core/services/gateway/connectionmanager_test.go: `config.ConnectionManagerConfig.HeartbeatIntervalSec = 1`
$DIR/core/services/gateway/connectionmanager_test.go: `err = mgr.Start(testutils.Context(t))`
$DIR/core/services/gateway/connectionmanager_test.go: `err = mgr.Close()`
$DIR/core/services/gateway/connectionmanager_test.go: `.NewConnectionManager(tomlConfig, clockwork.NewFakeClock(), logger.TestLogger(t))`
$DIR/core/services/gateway/connectionmanager_test.go: `.NewFakeClock()`
$DIR/core/services/gateway/connectionmanager_test.go: `.TestLogger(t)`
$DIR/core/services/gateway/connectionmanager_test.go: `.Run(name, func(t *testing.T) {
fullConfig := `
[nodeServerConfig]
Path = "/node"` + config
_, err := gateway.NewConnectionManager(parseTOMLConfig(t, fullConfig), clockwork.NewFakeClock(), logger.TestLogger(t))
require.Error(t, err)
})`
$DIR/core/services/gateway/connectionmanager_test.go: `.NewConnectionManager(parseTOMLConfig(t, fullConfig), clockwork.NewFakeClock(), logger.TestLogger(t))`
$DIR/core/services/gateway/connectionmanager_test.go: `.NewFakeClock()`
$DIR/core/services/gateway/connectionmanager_test.go: `.TestLogger(t)`
$DIR/core/services/gateway/connectionmanager_test.go: `.NewTestNodes(t, 1)`
$DIR/core/services/gateway/connectionmanager_test.go: `.NewFakeClock()`
$DIR/core/services/gateway/connectionmanager_test.go: `.NewConnectionManager(config, clock, logger.TestLogger(t))`
$DIR/core/services/gateway/connectionmanager_test.go: `.TestLogger(t)`
$DIR/core/services/gateway/connectionmanager_test.go: `.Now()`
$DIR/core/services/gateway/connectionmanager_test.go: `.Unix()`
$DIR/core/services/gateway/connectionmanager_test.go: `.StartHandshake(signAndPackAuthHeader(t, &authHeaderElems, nodes[0].PrivateKey))`
$DIR/core/services/gateway/connectionmanager_test.go: `.StartHandshake([]byte("ab"))`
$DIR/core/services/gateway/connectionmanager_test.go: `.StartHandshake(signAndPackAuthHeader(t, &badAuthHeaderElems, nodes[0].PrivateKey))`
$DIR/core/services/gateway/connectionmanager_test.go: `.StartHandshake(signAndPackAuthHeader(t, &badAuthHeaderElems, nodes[0].PrivateKey))`
$DIR/core/services/gateway/connectionmanager_test.go: `.StartHandshake(signAndPackAuthHeader(t, &badAuthHeaderElems, unrelatedNode.PrivateKey))`
$DIR/core/services/gateway/connectionmanager_test.go: `.StartHandshake(rawHeader)`
$DIR/core/services/gateway/connectionmanager_test.go: `.StartHandshake(signAndPackAuthHeader(t, &badAuthHeaderElems, nodes[0].PrivateKey))`
$DIR/core/services/gateway/connectionmanager_test.go: `.NewFakeClock()`
$DIR/core/services/gateway/connectionmanager_test.go: `.NewConnectionManager(config, clock, logger.TestLogger(t))`
$DIR/core/services/gateway/connectionmanager_test.go: `.TestLogger(t)`
$DIR/core/services/gateway/connectionmanager_test.go: `.Now()`
$DIR/core/services/gateway/connectionmanager_test.go: `.Unix()`
$DIR/core/services/gateway/connectionmanager_test.go: `.StartHandshake(signAndPackAuthHeader(t, &authHeaderElems, nodes[0].PrivateKey))`
$DIR/core/services/gateway/connectionmanager_test.go: `.SignData(nodes[0].PrivateKey, challenge)`
$DIR/core/services/gateway/connectionmanager_test.go: `.FinalizeHandshake("fake_attempt", response, nil)`
$DIR/core/services/gateway/connectionmanager_test.go: `.StartHandshake(signAndPackAuthHeader(t, &authHeaderElems, nodes[0].PrivateKey))`
$DIR/core/services/gateway/connectionmanager_test.go: `.SignData(nodes[1].PrivateKey, challenge)`
$DIR/core/services/gateway/connectionmanager_test.go: `.FinalizeHandshake(attemptId, response, nil)`
$DIR/core/services/gateway/connectionmanager_test.go: `.NewFakeClock()`
$DIR/core/services/gateway/connectionmanager_test.go: `.NewConnectionManager(config, clock, logger.TestLogger(t))`
$DIR/core/services/gateway/connectionmanager_test.go: `.TestLogger(t)`
$DIR/core/services/gateway/connectionmanager_test.go: `.DONConnectionManager("my_don_1")`
$DIR/core/services/gateway/connectionmanager_test.go: `.SendToNode(testutils.Context(t), nodes[0].Address, nil)`
$DIR/core/services/gateway/connectionmanager_test.go: `.Context(t)`
$DIR/core/services/gateway/connectionmanager_test.go: `.SendToNode(testutils.Context(t), "some_other_node", message)`
$DIR/core/services/gateway/connectionmanager_test.go: `.Context(t)`
$DIR/core/services/gateway/connectionmanager_test.go: `.NewFakeClock()`
$DIR/core/services/gateway/connectionmanager_test.go: `.NewConnectionManager(config, clock, logger.TestLogger(t))`
$DIR/core/services/gateway/connectionmanager_test.go: `.TestLogger(t)`
$DIR/core/services/gateway/connectionmanager_test.go: `.Start(testutils.Context(t))`
$DIR/core/services/gateway/connectionmanager_test.go: `.Context(t)`
$DIR/core/services/gateway/connector/connector_test.go: `t.Run(name, func(t *testing.T) {
_, err := connector.NewGatewayConnector(parseTOMLConfig(t, config), signer, handler, clock, logger.TestLogger(t))
require.Error(t, err)
})`
$DIR/core/services/gateway/connector/connector_test.go: `handler.On("Start", mock.Anything).Return(nil)`
$DIR/core/services/gateway/connector/connector_test.go: `handler.On("Close").Return(nil)`
$DIR/core/services/gateway/connector/connector_test.go: `signer.On("Sign", mock.Anything).Return(nil, errors.New("cannot sign"))`
$DIR/core/services/gateway/connector/connector_test.go: `signer.On("Sign", mock.Anything).Return(nil, errors.New("cannot sign"))`
$DIR/core/services/gateway/connector/connector_test.go: `_, err = connector.NewAuthHeader(url)`
$DIR/core/services/gateway/connector/connector_test.go: `testSignature[1] = 0xfa`
$DIR/core/services/gateway/connector/connector_test.go: `signer.On("Sign", mock.Anything).Return(testSignature, nil)`
$DIR/core/services/gateway/connector/connector_test.go: `testSignature[1] = 0xfa`
$DIR/core/services/gateway/connector/connector_test.go: `signer.On("Sign", mock.Anything).Return(testSignature, nil)`
$DIR/core/services/gateway/connector/connector_test.go: `badChallenge.Timestamp += 100`
$DIR/core/services/gateway/connector/connector_test.go: `_, err = connector.ChallengeResponse(url, network.PackChallenge(&badChallenge))`
$DIR/core/services/gateway/connector/connector_test.go: `badChallenge = challenge`
$DIR/core/services/gateway/connector/connector_test.go: `badChallenge.ChallengeBytes = []byte("aabb")`
$DIR/core/services/gateway/connector/connector_test.go: `_, err = connector.ChallengeResponse(url, network.PackChallenge(&badChallenge))`
$DIR/core/services/gateway/connector/connector_test.go: `badChallenge = challenge`
$DIR/core/services/gateway/connector/connector_test.go: `badChallenge.GatewayId = "wrong"`
$DIR/core/services/gateway/connector/connector_test.go: `_, err = connector.ChallengeResponse(url, network.PackChallenge(&badChallenge))`
$DIR/core/services/gateway/connector/connector_test.go: `.Now()`
$DIR/core/services/gateway/connector/connector_test.go: `.NewSigner(t)`
$DIR/core/services/gateway/connector/connector_test.go: `.NewGatewayConnectorHandler(t)`
$DIR/core/services/gateway/connector/connector_test.go: `.NewFakeClock()`
$DIR/core/services/gateway/connector/connector_test.go: `.Run(name, func(t *testing.T) {
_, err := connector.NewGatewayConnector(parseTOMLConfig(t, config), signer, handler, clock, logger.TestLogger(t))
require.Error(t, err)
})`
$DIR/core/services/gateway/connector/connector_test.go: `.NewGatewayConnector(parseTOMLConfig(t, config), signer, handler, clock, logger.TestLogger(t))`
$DIR/core/services/gateway/connector/connector_test.go: `.TestLogger(t)`
$DIR/core/services/gateway/connector/connector_test.go: `.Now()`
$DIR/core/services/gateway/connector/connector_test.go: `.On("Start", mock.Anything)`
$DIR/core/services/gateway/connector/connector_test.go: `.Return(nil)`
$DIR/core/services/gateway/connector/connector_test.go: `.On("Close")`
$DIR/core/services/gateway/connector/connector_test.go: `.Return(nil)`
$DIR/core/services/gateway/connector/connector_test.go: `.On("Sign", mock.Anything)`
$DIR/core/services/gateway/connector/connector_test.go: `.Return(nil, errors.New("cannot sign"))`
$DIR/core/services/gateway/connector/connector_test.go: `.New("cannot sign")`
$DIR/core/services/gateway/connector/connector_test.go: `.Now()`
$DIR/core/services/gateway/connector/connector_test.go: `.On("Sign", mock.Anything)`
$DIR/core/services/gateway/connector/connector_test.go: `.Return(nil, errors.New("cannot sign"))`
$DIR/core/services/gateway/connector/connector_test.go: `.New("cannot sign")`
$DIR/core/services/gateway/connector/connector_test.go: `.Parse("ws://localhost:8081/node")`
$DIR/core/services/gateway/connector/connector_test.go: `.NewAuthHeader(url)`
$DIR/core/services/gateway/connector/connector_test.go: `.Now()`
$DIR/core/services/gateway/connector/connector_test.go: `.On("Sign", mock.Anything)`
$DIR/core/services/gateway/connector/connector_test.go: `.Return(testSignature, nil)`
$DIR/core/services/gateway/connector/connector_test.go: `.Parse("ws://localhost:8081/node")`
$DIR/core/services/gateway/connector/connector_test.go: `.NewAuthHeader(url)`
$DIR/core/services/gateway/connector/connector_test.go: `.Now()`
$DIR/core/services/gateway/connector/connector_test.go: `.On("Sign", mock.Anything)`
$DIR/core/services/gateway/connector/connector_test.go: `.Return(testSignature, nil)`
$DIR/core/services/gateway/connector/connector_test.go: `.Parse("ws://localhost:8081/node")`
$DIR/core/services/gateway/connector/connector_test.go: `.Unix()`
$DIR/core/services/gateway/connector/connector_test.go: `.ChallengeResponse(url, network.PackChallenge(&challenge))`
$DIR/core/services/gateway/connector/connector_test.go: `.PackChallenge(&challenge)`
$DIR/core/services/gateway/connector/connector_test.go: `.ChallengeResponse(url, network.PackChallenge(&badChallenge))`
$DIR/core/services/gateway/connector/connector_test.go: `.PackChallenge(&badChallenge)`
$DIR/core/services/gateway/connector/connector_test.go: `.ChallengeResponse(url, network.PackChallenge(&badChallenge))`
$DIR/core/services/gateway/connector/connector_test.go: `.PackChallenge(&badChallenge)`
$DIR/core/services/gateway/connector/connector_test.go: `.ChallengeResponse(url, network.PackChallenge(&badChallenge))`
$DIR/core/services/gateway/connector/connector_test.go: `.PackChallenge(&badChallenge)`
$DIR/core/services/gateway/delegate_test.go: `t.Run(tc.name, func(t *testing.T) {
_, err := gateway.ValidatedGatewaySpec(tc.toml)
if tc.valid {
require.NoError(t, err)
} else {
require.Error(t, err)
}
})`
$DIR/core/services/gateway/delegate_test.go: `.Run(tc.name, func(t *testing.T) {
_, err := gateway.ValidatedGatewaySpec(tc.toml)
if tc.valid {
require.NoError(t, err)
} else {
require.Error(t, err)
}
})`
$DIR/core/services/gateway/delegate_test.go: `.ValidatedGatewaySpec(tc.toml)`
$DIR/core/services/gateway/gateway_test.go: `requireJsonRPCError(t, response, "", -32700, "invalid character '{' looking for beginning of object key string")`
$DIR/core/services/gateway/gateway_test.go: `requireJsonRPCError(t, response, "abc", -32700, "invalid DON ID length")`
$DIR/core/services/gateway/gateway_test.go: `requireJsonRPCError(t, response, "abc", -32602, "unsupported DON ID")`
$DIR/core/services/gateway/gateway_test.go: `handler.On("HandleUserMessage", mock.Anything, mock.Anything, mock.Anything).Return(nil).Run(func(args mock.Arguments) {
msg := args.Get(1).(*api.Message)
callbackCh := args.Get(2).(chan<- handlers.UserCallbackPayload)
// echo back to sender with attached payload
msg.Body.Payload = []byte(`{"result":"OK"}`)
msg.Signature = ""
callbackCh <- handlers.UserCallbackPayload{Msg: msg, ErrCode: api.NoError, ErrMsg: ""}
})`
$DIR/core/services/gateway/gateway_test.go: `msg.Body.Payload = []byte(`{"result":"OK"}`)`
$DIR/core/services/gateway/gateway_test.go: `msg.Signature = ""`
$DIR/core/services/gateway/gateway_test.go: `callbackCh <- handlers.UserCallbackPayload{Msg: msg, ErrCode: api.NoError, ErrMsg: ""}`
$DIR/core/services/gateway/gateway_test.go: `requireJsonRPCResult(t, response, "abcd",
`{"signature":"","body":{"message_id":"abcd","method":"request","don_id":"testDON","receiver":"","payload":{"result":"OK"}}}`)`
$DIR/core/services/gateway/gateway_test.go: `handler.On("HandleUserMessage", mock.Anything, mock.Anything, mock.Anything).Return(nil)`
$DIR/core/services/gateway/gateway_test.go: `requireJsonRPCError(t, response, "abcd", -32000, "handler timeout")`
$DIR/core/services/gateway/gateway_test.go: `handler.On("HandleUserMessage", mock.Anything, mock.Anything, mock.Anything).Return(errors.New("failure"))`
$DIR/core/services/gateway/gateway_test.go: `requireJsonRPCError(t, response, "abcd", -32600, "failure")`
$DIR/core/services/gateway/gateway_test.go: `.TestLogger(t)`
$DIR/core/services/gateway/gateway_test.go: `.NewGatewayFromConfig(parseTOMLConfig(t, tomlConfig), gateway.NewHandlerFactory(nil, nil, lggr), lggr)`
$DIR/core/services/gateway/gateway_test.go: `.NewHandlerFactory(nil, nil, lggr)`
$DIR/core/services/gateway/gateway_test.go: `.TestLogger(t)`
$DIR/core/services/gateway/gateway_test.go: `.NewGatewayFromConfig(parseTOMLConfig(t, tomlConfig), gateway.NewHandlerFactory(nil, nil, lggr), lggr)`
$DIR/core/services/gateway/gateway_test.go: `.NewHandlerFactory(nil, nil, lggr)`
$DIR/core/services/gateway/gateway_test.go: `.TestLogger(t)`
$DIR/core/services/gateway/gateway_test.go: `.NewGatewayFromConfig(parseTOMLConfig(t, tomlConfig), gateway.NewHandlerFactory(nil, nil, lggr), lggr)`
$DIR/core/services/gateway/gateway_test.go: `.NewHandlerFactory(nil, nil, lggr)`
$DIR/core/services/gateway/gateway_test.go: `.TestLogger(t)`
$DIR/core/services/gateway/gateway_test.go: `.NewGatewayFromConfig(parseTOMLConfig(t, tomlConfig), gateway.NewHandlerFactory(nil, nil, lggr), lggr)`
$DIR/core/services/gateway/gateway_test.go: `.NewHandlerFactory(nil, nil, lggr)`
$DIR/core/services/gateway/gateway_test.go: `.TestLogger(t)`
$DIR/core/services/gateway/gateway_test.go: `.NewGatewayFromConfig(parseTOMLConfig(t, tomlConfig), gateway.NewHandlerFactory(nil, nil, lggr), lggr)`
$DIR/core/services/gateway/gateway_test.go: `.NewHandlerFactory(nil, nil, lggr)`
$DIR/core/services/gateway/gateway_test.go: `.TestLogger(t)`
$DIR/core/services/gateway/gateway_test.go: `.NewGatewayFromConfig(parseTOMLConfig(t, buildConfig("")), gateway.NewHandlerFactory(nil, nil, lggr), lggr)`
$DIR/core/services/gateway/gateway_test.go: `.NewHandlerFactory(nil, nil, lggr)`
$DIR/core/services/gateway/gateway_test.go: `.ProcessRequest(testutils.Context(t), []byte("{{}"))`
$DIR/core/services/gateway/gateway_test.go: `.Context(t)`
$DIR/core/services/gateway/gateway_test.go: `.ProcessRequest(testutils.Context(t), req)`
$DIR/core/services/gateway/gateway_test.go: `.Context(t)`
$DIR/core/services/gateway/gateway_test.go: `.ProcessRequest(testutils.Context(t), req)`
$DIR/core/services/gateway/gateway_test.go: `.Context(t)`
$DIR/core/services/gateway/gateway_test.go: `.On("HandleUserMessage", mock.Anything, mock.Anything, mock.Anything)`
$DIR/core/services/gateway/gateway_test.go: `.Return(nil)`
$DIR/core/services/gateway/gateway_test.go: `.Run(func(args mock.Arguments) {
msg := args.Get(1).(*api.Message)
callbackCh := args.Get(2).(chan<- handlers.UserCallbackPayload)
// echo back to sender with attached payload
msg.Body.Payload = []byte(`{"result":"OK"}`)
msg.Signature = ""
callbackCh <- handlers.UserCallbackPayload{Msg: msg, ErrCode: api.NoError, ErrMsg: ""}
})`
$DIR/core/services/gateway/gateway_test.go: `.Get(1)`
$DIR/core/services/gateway/gateway_test.go: `.Get(2)`
$DIR/core/services/gateway/gateway_test.go: `.ProcessRequest(testutils.Context(t), req)`
$DIR/core/services/gateway/gateway_test.go: `.Context(t)`
$DIR/core/services/gateway/gateway_test.go: `.On("HandleUserMessage", mock.Anything, mock.Anything, mock.Anything)`
$DIR/core/services/gateway/gateway_test.go: `.Return(nil)`
$DIR/core/services/gateway/gateway_test.go: `.WithTimeout(testutils.Context(t), time.Millisecond*10)`
$DIR/core/services/gateway/gateway_test.go: `.Context(t)`
$DIR/core/services/gateway/gateway_test.go: `.ProcessRequest(timeoutCtx, req)`
$DIR/core/services/gateway/gateway_test.go: `.On("HandleUserMessage", mock.Anything, mock.Anything, mock.Anything)`
$DIR/core/services/gateway/gateway_test.go: `.Return(errors.New("failure"))`
$DIR/core/services/gateway/gateway_test.go: `.New("failure")`
$DIR/core/services/gateway/gateway_test.go: `.ProcessRequest(testutils.Context(t), req)`
$DIR/core/services/gateway/gateway_test.go: `.Context(t)`
$DIR/core/services/gateway/handlers/common/ratelimiter_test.go: `.NewRateLimiter(config)`
$DIR/core/services/gateway/handlers/common/ratelimiter_test.go: `.Allow("user3")`
$DIR/core/services/gateway/handlers/common/requestcache_test.go: `chans[i] = make(chan handlers.UserCallbackPayload)`
$DIR/core/services/gateway/handlers/common/requestcache_test.go: `reqs[i] = &api.Message{Body: api.MessageBody{MessageId: "abcd", Sender: fmt.Sprintf("sender_%d", i)}}`
$DIR/core/services/gateway/handlers/common/requestcache_test.go: `resp.Body.Receiver = reqs[i].Body.Sender`
$DIR/core/services/gateway/handlers/common/requestcache_test.go: `time.Sleep(time.Duration(n) * time.Millisecond)`
$DIR/core/services/gateway/handlers/common/requestcache_test.go: `req.Body.MessageId = "bb"`
$DIR/core/services/gateway/handlers/common/requestcache_test.go: `req.Body.MessageId = "cc"`
$DIR/core/services/gateway/handlers/common/requestcache_test.go: `.NewRequestCache[requestState](time.Hour, 1000)`
$DIR/core/services/gateway/handlers/common/requestcache_test.go: `.NewRequestCache[requestState](time.Hour, 1000)`
$DIR/core/services/gateway/handlers/common/requestcache_test.go: `.Sprintf("sender_%d", i)`
$DIR/core/services/gateway/handlers/common/requestcache_test.go: `.Intn(maxDelayMillis)`
$DIR/core/services/gateway/handlers/common/requestcache_test.go: `.Sleep(time.Duration(n) * time.Millisecond)`
$DIR/core/services/gateway/handlers/common/requestcache_test.go: `.Duration(n)`
$DIR/core/services/gateway/handlers/common/requestcache_test.go: `.NewRequestCache[requestState](time.Millisecond*10, 1000)`
$DIR/core/services/gateway/handlers/common/requestcache_test.go: `.NewRequestCache[requestState](time.Hour, 2)`
$DIR/core/services/gateway/handlers/common/requestcache_test.go: `.NewRequest(req, callbackCh, initialState)`
$DIR/core/services/gateway/handlers/functions/allowlist/allowlist_internal_test.go: `t.Run("OK-simple_update_in_batches", func(t *testing.T) {
ctx := context.Background()
config := OnchainAllowlistConfig{
ContractAddress: testutils.NewAddress(),
ContractVersion: 1,
BlockConfirmations: 1,
UpdateFrequencySec: 2,
UpdateTimeoutSec: 1,
StoredAllowlistBatchSize: 2,
OnchainAllowlistBatchSize: 10,
FetchingDelayInRangeSec: 1,
}
// allowlistSize defines how big the mocked allowlist will be
allowlistSize := 53
// allowlist represents the actual allowlist the tos contract will return
allowlist := make([]common.Address, 0, allowlistSize)
// expectedAllowlist will be used to compare the actual status with what we actually want
expectedAllowlist := make(map[common.Address]struct{}, 0)
// we load both the expectedAllowlist and the allowlist the contract will return with some new addresses
for i := 0; i < allowlistSize; i++ {
addr := testutils.NewAddress()
allowlist = append(allowlist, addr)
expectedAllowlist[addr] = struct{}{}
}
tosContract := NewTosContractMock(allowlist)
// with the orm mock we can validate the actual order in which the allowlist is fetched giving priority to newest addresses
orm := amocks.NewORM(t)
firstCall := orm.On("CreateAllowedSenders", context.Background(), allowlist[43:53]).Times(1).Return(nil)
secondCall := orm.On("CreateAllowedSenders", context.Background(), allowlist[33:43]).Times(1).Return(nil).NotBefore(firstCall)
thirdCall := orm.On("CreateAllowedSenders", context.Background(), allowlist[23:33]).Times(1).Return(nil).NotBefore(secondCall)
forthCall := orm.On("CreateAllowedSenders", context.Background(), allowlist[13:23]).Times(1).Return(nil).NotBefore(thirdCall)
fifthCall := orm.On("CreateAllowedSenders", context.Background(), allowlist[3:13]).Times(1).Return(nil).NotBefore(forthCall)
orm.On("CreateAllowedSenders", context.Background(), allowlist[0:3]).Times(1).Return(nil).NotBefore(fifthCall)
onchainAllowlist := &onchainAllowlist{
config: config,
orm: orm,
blockConfirmations: big.NewInt(int64(config.BlockConfirmations)),
lggr: logger.TestLogger(t).Named("OnchainAllowlist"),
stopCh: make(services.StopChan),
}
// we set the onchain allowlist to an empty state before updating it in batches
emptyMap := make(map[common.Address]struct{})
onchainAllowlist.allowlist.Store(&emptyMap)
err := onchainAllowlist.updateAllowedSendersInBatches(ctx, tosContract, big.NewInt(0))
require.NoError(t, err)
currentAllowlist := onchainAllowlist.allowlist.Load()
require.Equal(t, &expectedAllowlist, currentAllowlist)
})`
$DIR/core/services/gateway/handlers/functions/allowlist/allowlist_internal_test.go: `allowlist = append(allowlist, addr)`
$DIR/core/services/gateway/handlers/functions/allowlist/allowlist_internal_test.go: `expectedAllowlist[addr] = struct{}{}`
$DIR/core/services/gateway/handlers/functions/allowlist/allowlist_internal_test.go: `orm.On("CreateAllowedSenders", context.Background(), allowlist[0:3]).Times(1).Return(nil).NotBefore(fifthCall)`
$DIR/core/services/gateway/handlers/functions/allowlist/allowlist_internal_test.go: `onchainAllowlist.allowlist.Store(&emptyMap)`
$DIR/core/services/gateway/handlers/functions/allowlist/allowlist_internal_test.go: `t.Run("OK-new_address_added_while_updating_in_batches", func(t *testing.T) {
ctx := context.Background()
config := OnchainAllowlistConfig{
ContractAddress: testutils.NewAddress(),
ContractVersion: 1,
BlockConfirmations: 1,
UpdateFrequencySec: 2,
UpdateTimeoutSec: 1,
StoredAllowlistBatchSize: 2,
OnchainAllowlistBatchSize: 10,
FetchingDelayInRangeSec: 1,
}
// allowlistSize defines how big the initial mocked allowlist will be
allowlistSize := 50
// allowlist represents the actual allowlist the tos contract will return
allowlist := make([]common.Address, 0)
// expectedAllowlist will be used to compare the actual status with what we actually want
expectedAllowlist := make(map[common.Address]struct{}, 0)
// we load both the expectedAllowlist and the allowlist the contract will return with some new addresses
for i := 0; i < allowlistSize; i++ {
addr := testutils.NewAddress()
allowlist = append(allowlist, addr)
expectedAllowlist[addr] = struct{}{}
}
tosContract := NewTosContractMock(allowlist)
// with the orm mock we can validate the actual order in which the allowlist is fetched giving priority to newest addresses
orm := amocks.NewORM(t)
firstCall := orm.On("CreateAllowedSenders", context.Background(), allowlist[40:50]).Times(1).Run(func(args mock.Arguments) {
// after the first call we update the tosContract by adding a new address
addr := testutils.NewAddress()
allowlist = append(allowlist, addr)
expectedAllowlist[addr] = struct{}{}
*tosContract = *NewTosContractMock(allowlist)
}).Return(nil)
// this is the extra step that will fetch the new address we want to validate
extraStepCall := orm.On("CreateAllowedSenders", context.Background(), allowlist[50:51]).Times(1).Return(nil).NotBefore(firstCall)
secondCall := orm.On("CreateAllowedSenders", context.Background(), allowlist[30:40]).Times(1).Return(nil).NotBefore(extraStepCall)
thirdCall := orm.On("CreateAllowedSenders", context.Background(), allowlist[20:30]).Times(1).Return(nil).NotBefore(secondCall)
forthCall := orm.On("CreateAllowedSenders", context.Background(), allowlist[10:20]).Times(1).Return(nil).NotBefore(thirdCall)
orm.On("CreateAllowedSenders", context.Background(), allowlist[0:10]).Times(1).Return(nil).NotBefore(forthCall)
onchainAllowlist := &onchainAllowlist{
config: config,
orm: orm,
blockConfirmations: big.NewInt(int64(config.BlockConfirmations)),
lggr: logger.TestLogger(t).Named("OnchainAllowlist"),
stopCh: make(services.StopChan),
}
// we set the onchain allowlist to an empty state before updating it in batches
emptyMap := make(map[common.Address]struct{})
onchainAllowlist.allowlist.Store(&emptyMap)
err := onchainAllowlist.updateAllowedSendersInBatches(ctx, tosContract, big.NewInt(0))
require.NoError(t, err)
currentAllowlist := onchainAllowlist.allowlist.Load()
require.Equal(t, &expectedAllowlist, currentAllowlist)
})`
$DIR/core/services/gateway/handlers/functions/allowlist/allowlist_internal_test.go: `allowlist = append(allowlist, addr)`
$DIR/core/services/gateway/handlers/functions/allowlist/allowlist_internal_test.go: `expectedAllowlist[addr] = struct{}{}`
$DIR/core/services/gateway/handlers/functions/allowlist/allowlist_internal_test.go: `allowlist = append(allowlist, addr)`
$DIR/core/services/gateway/handlers/functions/allowlist/allowlist_internal_test.go: `expectedAllowlist[addr] = struct{}{}`
$DIR/core/services/gateway/handlers/functions/allowlist/allowlist_internal_test.go: `*tosContract = *NewTosContractMock(allowlist)`
$DIR/core/services/gateway/handlers/functions/allowlist/allowlist_internal_test.go: `orm.On("CreateAllowedSenders", context.Background(), allowlist[0:10]).Times(1).Return(nil).NotBefore(forthCall)`
$DIR/core/services/gateway/handlers/functions/allowlist/allowlist_internal_test.go: `onchainAllowlist.allowlist.Store(&emptyMap)`
$DIR/core/services/gateway/handlers/functions/allowlist/allowlist_internal_test.go: `allowlist = append(allowlist, addr)`
$DIR/core/services/gateway/handlers/functions/allowlist/allowlist_internal_test.go: `expectedAllowlist[addr] = struct{}{}`
$DIR/core/services/gateway/handlers/functions/allowlist/allowlist_internal_test.go: `orm.On("CreateAllowedSenders", context.Background(), allowlist[0:50]).Times(1).Return(nil)`
$DIR/core/services/gateway/handlers/functions/allowlist/allowlist_internal_test.go: `onchainAllowlist.allowlist.Store(&emptyMap)`
$DIR/core/services/gateway/handlers/functions/allowlist/allowlist_internal_test.go: `.Run("OK-simple_update_in_batches", func(t *testing.T) {
ctx := context.Background()
config := OnchainAllowlistConfig{
ContractAddress: testutils.NewAddress(),
ContractVersion: 1,
BlockConfirmations: 1,
UpdateFrequencySec: 2,
UpdateTimeoutSec: 1,
StoredAllowlistBatchSize: 2,
OnchainAllowlistBatchSize: 10,
FetchingDelayInRangeSec: 1,
}
// allowlistSize defines how big the mocked allowlist will be
allowlistSize := 53
// allowlist represents the actual allowlist the tos contract will return
allowlist := make([]common.Address, 0, allowlistSize)
// expectedAllowlist will be used to compare the actual status with what we actually want
expectedAllowlist := make(map[common.Address]struct{}, 0)
// we load both the expectedAllowlist and the allowlist the contract will return with some new addresses
for i := 0; i < allowlistSize; i++ {
addr := testutils.NewAddress()
allowlist = append(allowlist, addr)
expectedAllowlist[addr] = struct{}{}
}
tosContract := NewTosContractMock(allowlist)
// with the orm mock we can validate the actual order in which the allowlist is fetched giving priority to newest addresses
orm := amocks.NewORM(t)
firstCall := orm.On("CreateAllowedSenders", context.Background(), allowlist[43:53]).Times(1).Return(nil)
secondCall := orm.On("CreateAllowedSenders", context.Background(), allowlist[33:43]).Times(1).Return(nil).NotBefore(firstCall)
thirdCall := orm.On("CreateAllowedSenders", context.Background(), allowlist[23:33]).Times(1).Return(nil).NotBefore(secondCall)
forthCall := orm.On("CreateAllowedSenders", context.Background(), allowlist[13:23]).Times(1).Return(nil).NotBefore(thirdCall)
fifthCall := orm.On("CreateAllowedSenders", context.Background(), allowlist[3:13]).Times(1).Return(nil).NotBefore(forthCall)
orm.On("CreateAllowedSenders", context.Background(), allowlist[0:3]).Times(1).Return(nil).NotBefore(fifthCall)
onchainAllowlist := &onchainAllowlist{
config: config,
orm: orm,
blockConfirmations: big.NewInt(int64(config.BlockConfirmations)),
lggr: logger.TestLogger(t).Named("OnchainAllowlist"),
stopCh: make(services.StopChan),
}
// we set the onchain allowlist to an empty state before updating it in batches
emptyMap := make(map[common.Address]struct{})
onchainAllowlist.allowlist.Store(&emptyMap)
err := onchainAllowlist.updateAllowedSendersInBatches(ctx, tosContract, big.NewInt(0))
require.NoError(t, err)
currentAllowlist := onchainAllowlist.allowlist.Load()
require.Equal(t, &expectedAllowlist, currentAllowlist)
})`
$DIR/core/services/gateway/handlers/functions/allowlist/allowlist_internal_test.go: `.Background()`
$DIR/core/services/gateway/handlers/functions/allowlist/allowlist_internal_test.go: `.NewAddress()`
$DIR/core/services/gateway/handlers/functions/allowlist/allowlist_internal_test.go: `.NewAddress()`
$DIR/core/services/gateway/handlers/functions/allowlist/allowlist_internal_test.go: `.NewORM(t)`
$DIR/core/services/gateway/handlers/functions/allowlist/allowlist_internal_test.go: `.On("CreateAllowedSenders", context.Background(), allowlist[43:53])`
$DIR/core/services/gateway/handlers/functions/allowlist/allowlist_internal_test.go: `.Background()`
$DIR/core/services/gateway/handlers/functions/allowlist/allowlist_internal_test.go: `.Times(1)`
$DIR/core/services/gateway/handlers/functions/allowlist/allowlist_internal_test.go: `.Return(nil)`
$DIR/core/services/gateway/handlers/functions/allowlist/allowlist_internal_test.go: `.On("CreateAllowedSenders", context.Background(), allowlist[33:43])`
$DIR/core/services/gateway/handlers/functions/allowlist/allowlist_internal_test.go: `.Background()`
$DIR/core/services/gateway/handlers/functions/allowlist/allowlist_internal_test.go: `.Times(1)`
$DIR/core/services/gateway/handlers/functions/allowlist/allowlist_internal_test.go: `.Return(nil)`
$DIR/core/services/gateway/handlers/functions/allowlist/allowlist_internal_test.go: `.NotBefore(firstCall)`
$DIR/core/services/gateway/handlers/functions/allowlist/allowlist_internal_test.go: `.On("CreateAllowedSenders", context.Background(), allowlist[23:33])`
$DIR/core/services/gateway/handlers/functions/allowlist/allowlist_internal_test.go: `.Background()`
$DIR/core/services/gateway/handlers/functions/allowlist/allowlist_internal_test.go: `.Times(1)`
$DIR/core/services/gateway/handlers/functions/allowlist/allowlist_internal_test.go: `.Return(nil)`
$DIR/core/services/gateway/handlers/functions/allowlist/allowlist_internal_test.go: `.NotBefore(secondCall)`
$DIR/core/services/gateway/handlers/functions/allowlist/allowlist_internal_test.go: `.On("CreateAllowedSenders", context.Background(), allowlist[13:23])`
$DIR/core/services/gateway/handlers/functions/allowlist/allowlist_internal_test.go: `.Background()`
$DIR/core/services/gateway/handlers/functions/allowlist/allowlist_internal_test.go: `.Times(1)`
$DIR/core/services/gateway/handlers/functions/allowlist/allowlist_internal_test.go: `.Return(nil)`
$DIR/core/services/gateway/handlers/functions/allowlist/allowlist_internal_test.go: `.NotBefore(thirdCall)`
$DIR/core/services/gateway/handlers/functions/allowlist/allowlist_internal_test.go: `.On("CreateAllowedSenders", context.Background(), allowlist[3:13])`
$DIR/core/services/gateway/handlers/functions/allowlist/allowlist_internal_test.go: `.Background()`
$DIR/core/services/gateway/handlers/functions/allowlist/allowlist_internal_test.go: `.Times(1)`
$DIR/core/services/gateway/handlers/functions/allowlist/allowlist_internal_test.go: `.Return(nil)`
$DIR/core/services/gateway/handlers/functions/allowlist/allowlist_internal_test.go: `.NotBefore(forthCall)`
$DIR/core/services/gateway/handlers/functions/allowlist/allowlist_internal_test.go: `.On("CreateAllowedSenders", context.Background(), allowlist[0:3])`
$DIR/core/services/gateway/handlers/functions/allowlist/allowlist_internal_test.go: `.Background()`
$DIR/core/services/gateway/handlers/functions/allowlist/allowlist_internal_test.go: `.Times(1)`
$DIR/core/services/gateway/handlers/functions/allowlist/allowlist_internal_test.go: `.Return(nil)`
$DIR/core/services/gateway/handlers/functions/allowlist/allowlist_internal_test.go: `.NotBefore(fifthCall)`
$DIR/core/services/gateway/handlers/functions/allowlist/allowlist_internal_test.go: `.NewInt(int64(config.BlockConfirmations))`
$DIR/core/services/gateway/handlers/functions/allowlist/allowlist_internal_test.go: `.TestLogger(t)`
$DIR/core/services/gateway/handlers/functions/allowlist/allowlist_internal_test.go: `.Named("OnchainAllowlist")`
$DIR/core/services/gateway/handlers/functions/allowlist/allowlist_internal_test.go: `.allowlist.Store(&emptyMap)`
$DIR/core/services/gateway/handlers/functions/allowlist/allowlist_internal_test.go: `.updateAllowedSendersInBatches(ctx, tosContract, big.NewInt(0))`
$DIR/core/services/gateway/handlers/functions/allowlist/allowlist_internal_test.go: `.NewInt(0)`
$DIR/core/services/gateway/handlers/functions/allowlist/allowlist_internal_test.go: `.allowlist.Load()`
$DIR/core/services/gateway/handlers/functions/allowlist/allowlist_internal_test.go: `.Run("OK-new_address_added_while_updating_in_batches", func(t *testing.T) {
ctx := context.Background()
config := OnchainAllowlistConfig{
ContractAddress: testutils.NewAddress(),
ContractVersion: 1,
BlockConfirmations: 1,
UpdateFrequencySec: 2,
UpdateTimeoutSec: 1,
StoredAllowlistBatchSize: 2,
OnchainAllowlistBatchSize: 10,
FetchingDelayInRangeSec: 1,
}
// allowlistSize defines how big the initial mocked allowlist will be
allowlistSize := 50
// allowlist represents the actual allowlist the tos contract will return
allowlist := make([]common.Address, 0)
// expectedAllowlist will be used to compare the actual status with what we actually want
expectedAllowlist := make(map[common.Address]struct{}, 0)
// we load both the expectedAllowlist and the allowlist the contract will return with some new addresses
for i := 0; i < allowlistSize; i++ {
addr := testutils.NewAddress()
allowlist = append(allowlist, addr)
expectedAllowlist[addr] = struct{}{}
}
tosContract := NewTosContractMock(allowlist)
// with the orm mock we can validate the actual order in which the allowlist is fetched giving priority to newest addresses
orm := amocks.NewORM(t)
firstCall := orm.On("CreateAllowedSenders", context.Background(), allowlist[40:50]).Times(1).Run(func(args mock.Arguments) {
// after the first call we update the tosContract by adding a new address
addr := testutils.NewAddress()
allowlist = append(allowlist, addr)
expectedAllowlist[addr] = struct{}{}
*tosContract = *NewTosContractMock(allowlist)
}).Return(nil)
// this is the extra step that will fetch the new address we want to validate
extraStepCall := orm.On("CreateAllowedSenders", context.Background(), allowlist[50:51]).Times(1).Return(nil).NotBefore(firstCall)
secondCall := orm.On("CreateAllowedSenders", context.Background(), allowlist[30:40]).Times(1).Return(nil).NotBefore(extraStepCall)
thirdCall := orm.On("CreateAllowedSenders", context.Background(), allowlist[20:30]).Times(1).Return(nil).NotBefore(secondCall)
forthCall := orm.On("CreateAllowedSenders", context.Background(), allowlist[10:20]).Times(1).Return(nil).NotBefore(thirdCall)
orm.On("CreateAllowedSenders", context.Background(), allowlist[0:10]).Times(1).Return(nil).NotBefore(forthCall)
onchainAllowlist := &onchainAllowlist{
config: config,
orm: orm,
blockConfirmations: big.NewInt(int64(config.BlockConfirmations)),
lggr: logger.TestLogger(t).Named("OnchainAllowlist"),
stopCh: make(services.StopChan),
}
// we set the onchain allowlist to an empty state before updating it in batches
emptyMap := make(map[common.Address]struct{})
onchainAllowlist.allowlist.Store(&emptyMap)
err := onchainAllowlist.updateAllowedSendersInBatches(ctx, tosContract, big.NewInt(0))
require.NoError(t, err)
currentAllowlist := onchainAllowlist.allowlist.Load()
require.Equal(t, &expectedAllowlist, currentAllowlist)
})`
$DIR/core/services/gateway/handlers/functions/allowlist/allowlist_internal_test.go: `.Background()`
$DIR/core/services/gateway/handlers/functions/allowlist/allowlist_internal_test.go: `.NewAddress()`
$DIR/core/services/gateway/handlers/functions/allowlist/allowlist_internal_test.go: `.NewAddress()`
$DIR/core/services/gateway/handlers/functions/allowlist/allowlist_internal_test.go: `.NewORM(t)`
$DIR/core/services/gateway/handlers/functions/allowlist/allowlist_internal_test.go: `.On("CreateAllowedSenders", context.Background(), allowlist[40:50])`
$DIR/core/services/gateway/handlers/functions/allowlist/allowlist_internal_test.go: `.Background()`
$DIR/core/services/gateway/handlers/functions/allowlist/allowlist_internal_test.go: `.Times(1)`
$DIR/core/services/gateway/handlers/functions/allowlist/allowlist_internal_test.go: `.Run(func(args mock.Arguments) {
// after the first call we update the tosContract by adding a new address
addr := testutils.NewAddress()
allowlist = append(allowlist, addr)
expectedAllowlist[addr] = struct{}{}
*tosContract = *NewTosContractMock(allowlist)
})`
$DIR/core/services/gateway/handlers/functions/allowlist/allowlist_internal_test.go: `.NewAddress()`
$DIR/core/services/gateway/handlers/functions/allowlist/allowlist_internal_test.go: `.Return(nil)`
$DIR/core/services/gateway/handlers/functions/allowlist/allowlist_internal_test.go: `.On("CreateAllowedSenders", context.Background(), allowlist[50:51])`
$DIR/core/services/gateway/handlers/functions/allowlist/allowlist_internal_test.go: `.Background()`
$DIR/core/services/gateway/handlers/functions/allowlist/allowlist_internal_test.go: `.Times(1)`
$DIR/core/services/gateway/handlers/functions/allowlist/allowlist_internal_test.go: `.Return(nil)`
$DIR/core/services/gateway/handlers/functions/allowlist/allowlist_internal_test.go: `.NotBefore(firstCall)`
$DIR/core/services/gateway/handlers/functions/allowlist/allowlist_internal_test.go: `.On("CreateAllowedSenders", context.Background(), allowlist[30:40])`
$DIR/core/services/gateway/handlers/functions/allowlist/allowlist_internal_test.go: `.Background()`
$DIR/core/services/gateway/handlers/functions/allowlist/allowlist_internal_test.go: `.Times(1)`
$DIR/core/services/gateway/handlers/functions/allowlist/allowlist_internal_test.go: `.Return(nil)`
$DIR/core/services/gateway/handlers/functions/allowlist/allowlist_internal_test.go: `.NotBefore(extraStepCall)`
$DIR/core/services/gateway/handlers/functions/allowlist/allowlist_internal_test.go: `.On("CreateAllowedSenders", context.Background(), allowlist[20:30])`
$DIR/core/services/gateway/handlers/functions/allowlist/allowlist_internal_test.go: `.Background()`
$DIR/core/services/gateway/handlers/functions/allowlist/allowlist_internal_test.go: `.Times(1)`
$DIR/core/services/gateway/handlers/functions/allowlist/allowlist_internal_test.go: `.Return(nil)`
$DIR/core/services/gateway/handlers/functions/allowlist/allowlist_internal_test.go: `.NotBefore(secondCall)`
$DIR/core/services/gateway/handlers/functions/allowlist/allowlist_internal_test.go: `.On("CreateAllowedSenders", context.Background(), allowlist[10:20])`
$DIR/core/services/gateway/handlers/functions/allowlist/allowlist_internal_test.go: `.Background()`
$DIR/core/services/gateway/handlers/functions/allowlist/allowlist_internal_test.go: `.Times(1)`
$DIR/core/services/gateway/handlers/functions/allowlist/allowlist_internal_test.go: `.Return(nil)`
$DIR/core/services/gateway/handlers/functions/allowlist/allowlist_internal_test.go: `.NotBefore(thirdCall)`
$DIR/core/services/gateway/handlers/functions/allowlist/allowlist_internal_test.go: `.On("CreateAllowedSenders", context.Background(), allowlist[0:10])`
$DIR/core/services/gateway/handlers/functions/allowlist/allowlist_internal_test.go: `.Background()`
$DIR/core/services/gateway/handlers/functions/allowlist/allowlist_internal_test.go: `.Times(1)`
$DIR/core/services/gateway/handlers/functions/allowlist/allowlist_internal_test.go: `.Return(nil)`
$DIR/core/services/gateway/handlers/functions/allowlist/allowlist_internal_test.go: `.NotBefore(forthCall)`
$DIR/core/services/gateway/handlers/functions/allowlist/allowlist_internal_test.go: `.NewInt(int64(config.BlockConfirmations))`
$DIR/core/services/gateway/handlers/functions/allowlist/allowlist_internal_test.go: `.TestLogger(t)`
$DIR/core/services/gateway/handlers/functions/allowlist/allowlist_internal_test.go: `.Named("OnchainAllowlist")`
$DIR/core/services/gateway/handlers/functions/allowlist/allowlist_internal_test.go: `.allowlist.Store(&emptyMap)`
$DIR/core/services/gateway/handlers/functions/allowlist/allowlist_internal_test.go: `.updateAllowedSendersInBatches(ctx, tosContract, big.NewInt(0))`
$DIR/core/services/gateway/handlers/functions/allowlist/allowlist_internal_test.go: `.NewInt(0)`
$DIR/core/services/gateway/handlers/functions/allowlist/allowlist_internal_test.go: `.allowlist.Load()`
$DIR/core/services/gateway/handlers/functions/allowlist/allowlist_internal_test.go: `.Background()`
$DIR/core/services/gateway/handlers/functions/allowlist/allowlist_internal_test.go: `.NewAddress()`
$DIR/core/services/gateway/handlers/functions/allowlist/allowlist_internal_test.go: `.NewAddress()`
$DIR/core/services/gateway/handlers/functions/allowlist/allowlist_internal_test.go: `.NewORM(t)`
$DIR/core/services/gateway/handlers/functions/allowlist/allowlist_internal_test.go: `.On("CreateAllowedSenders", context.Background(), allowlist[0:50])`
$DIR/core/services/gateway/handlers/functions/allowlist/allowlist_internal_test.go: `.Background()`
$DIR/core/services/gateway/handlers/functions/allowlist/allowlist_internal_test.go: `.Times(1)`
$DIR/core/services/gateway/handlers/functions/allowlist/allowlist_internal_test.go: `.Return(nil)`
$DIR/core/services/gateway/handlers/functions/allowlist/allowlist_internal_test.go: `.NewInt(int64(config.BlockConfirmations))`
$DIR/core/services/gateway/handlers/functions/allowlist/allowlist_internal_test.go: `.TestLogger(t)`
$DIR/core/services/gateway/handlers/functions/allowlist/allowlist_internal_test.go: `.Named("OnchainAllowlist")`
$DIR/core/services/gateway/handlers/functions/allowlist/allowlist_internal_test.go: `.allowlist.Store(&emptyMap)`
$DIR/core/services/gateway/handlers/functions/allowlist/allowlist_internal_test.go: `.updateAllowedSendersInBatches(ctx, tosContract, big.NewInt(0))`
$DIR/core/services/gateway/handlers/functions/allowlist/allowlist_internal_test.go: `.NewInt(0)`
$DIR/core/services/gateway/handlers/functions/allowlist/allowlist_internal_test.go: `.allowlist.Load()`
$DIR/core/services/gateway/handlers/functions/allowlist/allowlist_test.go: `t.Run("OK-with_ToS_V1.0.0", func(t *testing.T) {
client := mocks.NewClient(t)
client.On("LatestBlockHeight", mock.Anything).Return(big.NewInt(42), nil)
addr := common.HexToAddress("0x0000000000000000000000000000000000000020")
typeAndVersionResponse, err := encodeTypeAndVersionResponse(ToSContractV100)
require.NoError(t, err)
client.On("CallContract", mock.Anything, ethereum.CallMsg{ // typeAndVersion
To: &addr,
Data: hexutil.MustDecode("0x181f5a77"),
}, mock.Anything).Return(typeAndVersionResponse, nil)
client.On("CallContract", mock.Anything, mock.Anything, mock.Anything).Return(sampleEncodedAllowlist(t), nil)
config := allowlist.OnchainAllowlistConfig{
ContractVersion: 1,
ContractAddress: common.Address{},
BlockConfirmations: 1,
}
orm := amocks.NewORM(t)
orm.On("PurgeAllowedSenders", mock.Anything).Times(1).Return(nil)
orm.On("CreateAllowedSenders", mock.Anything, []common.Address{common.HexToAddress(addr1), common.HexToAddress(addr2)}).Times(1).Return(nil)
allowlist, err := allowlist.NewOnchainAllowlist(client, config, orm, logger.TestLogger(t))
require.NoError(t, err)
err = allowlist.Start(testutils.Context(t))
require.NoError(t, err)
t.Cleanup(func() {
assert.NoError(t, allowlist.Close())
})
require.NoError(t, allowlist.UpdateFromContract(testutils.Context(t)))
require.False(t, allowlist.Allow(common.Address{}))
require.True(t, allowlist.Allow(common.HexToAddress(addr1)))
require.True(t, allowlist.Allow(common.HexToAddress(addr2)))
require.False(t, allowlist.Allow(common.HexToAddress(addr3)))
})`
$DIR/core/services/gateway/handlers/functions/allowlist/allowlist_test.go: `client.On("LatestBlockHeight", mock.Anything).Return(big.NewInt(42), nil)`
$DIR/core/services/gateway/handlers/functions/allowlist/allowlist_test.go: `client.On("CallContract", mock.Anything, ethereum.CallMsg{ // typeAndVersion
To: &addr,
Data: hexutil.MustDecode("0x181f5a77"),
}, mock.Anything).Return(typeAndVersionResponse, nil)`
$DIR/core/services/gateway/handlers/functions/allowlist/allowlist_test.go: `client.On("CallContract", mock.Anything, mock.Anything, mock.Anything).Return(sampleEncodedAllowlist(t), nil)`
$DIR/core/services/gateway/handlers/functions/allowlist/allowlist_test.go: `orm.On("PurgeAllowedSenders", mock.Anything).Times(1).Return(nil)`
$DIR/core/services/gateway/handlers/functions/allowlist/allowlist_test.go: `orm.On("CreateAllowedSenders", mock.Anything, []common.Address{common.HexToAddress(addr1), common.HexToAddress(addr2)}).Times(1).Return(nil)`
$DIR/core/services/gateway/handlers/functions/allowlist/allowlist_test.go: `err = allowlist.Start(testutils.Context(t))`
$DIR/core/services/gateway/handlers/functions/allowlist/allowlist_test.go: `t.Cleanup(func() {
assert.NoError(t, allowlist.Close())
})`
$DIR/core/services/gateway/handlers/functions/allowlist/allowlist_test.go: `client.On("LatestBlockHeight", mock.Anything).Return(big.NewInt(42), nil)`
$DIR/core/services/gateway/handlers/functions/allowlist/allowlist_test.go: `client.On("CallContract", mock.Anything, ethereum.CallMsg{ // typeAndVersion
To: &addr,
Data: hexutil.MustDecode("0x181f5a77"),
}, mock.Anything).Return(typeAndVersionResponse, nil)`
$DIR/core/services/gateway/handlers/functions/allowlist/allowlist_test.go: `client.On("CallContract", mock.Anything, mock.Anything, mock.Anything).Return(sampleEncodedAllowlist(t), nil)`
$DIR/core/services/gateway/handlers/functions/allowlist/allowlist_test.go: `orm.On("DeleteAllowedSenders", mock.Anything, []common.Address{common.HexToAddress(addr1), common.HexToAddress(addr2)}).Times(1).Return(nil)`
$DIR/core/services/gateway/handlers/functions/allowlist/allowlist_test.go: `orm.On("CreateAllowedSenders", mock.Anything, []common.Address{common.HexToAddress(addr1), common.HexToAddress(addr2)}).Times(1).Return(nil)`
$DIR/core/services/gateway/handlers/functions/allowlist/allowlist_test.go: `err = allowlist.Start(testutils.Context(t))`
$DIR/core/services/gateway/handlers/functions/allowlist/allowlist_test.go: `t.Cleanup(func() {
assert.NoError(t, allowlist.Close())
})`
$DIR/core/services/gateway/handlers/functions/allowlist/allowlist_test.go: `t.Run("OK-with_ToS_V1.0.0", func(t *testing.T) {
ctx, cancel := context.WithCancel(testutils.Context(t))
client := mocks.NewClient(t)
client.On("LatestBlockHeight", mock.Anything).Return(big.NewInt(42), nil)
addr := common.HexToAddress("0x0000000000000000000000000000000000000020")
typeAndVersionResponse, err := encodeTypeAndVersionResponse(ToSContractV100)
require.NoError(t, err)
client.On("CallContract", mock.Anything, ethereum.CallMsg{ // typeAndVersion
To: &addr,
Data: hexutil.MustDecode("0x181f5a77"),
}, mock.Anything).Return(typeAndVersionResponse, nil)
client.On("CallContract", mock.Anything, mock.Anything, mock.Anything).Run(func(args mock.Arguments) {
cancel()
}).Return(sampleEncodedAllowlist(t), nil)
config := allowlist.OnchainAllowlistConfig{
ContractAddress: common.Address{},
ContractVersion: 1,
BlockConfirmations: 1,
UpdateFrequencySec: 2,
UpdateTimeoutSec: 1,
}
orm := amocks.NewORM(t)
orm.On("PurgeAllowedSenders", mock.Anything).Times(1).Return(nil)
orm.On("GetAllowedSenders", mock.Anything, uint(0), uint(1000)).Return([]common.Address{}, nil)
orm.On("CreateAllowedSenders", mock.Anything, []common.Address{common.HexToAddress(addr1), common.HexToAddress(addr2)}).Times(1).Return(nil)
allowlist, err := allowlist.NewOnchainAllowlist(client, config, orm, logger.TestLogger(t))
require.NoError(t, err)
err = allowlist.Start(ctx)
require.NoError(t, err)
t.Cleanup(func() {
assert.NoError(t, allowlist.Close())
})
gomega.NewGomegaWithT(t).Eventually(func() bool {
return allowlist.Allow(common.HexToAddress(addr1)) && !allowlist.Allow(common.HexToAddress(addr3))
}, testutils.WaitTimeout(t), time.Second).Should(gomega.BeTrue())
})`
$DIR/core/services/gateway/handlers/functions/allowlist/allowlist_test.go: `client.On("LatestBlockHeight", mock.Anything).Return(big.NewInt(42), nil)`
$DIR/core/services/gateway/handlers/functions/allowlist/allowlist_test.go: `client.On("CallContract", mock.Anything, ethereum.CallMsg{ // typeAndVersion
To: &addr,
Data: hexutil.MustDecode("0x181f5a77"),
}, mock.Anything).Return(typeAndVersionResponse, nil)`
$DIR/core/services/gateway/handlers/functions/allowlist/allowlist_test.go: `client.On("CallContract", mock.Anything, mock.Anything, mock.Anything).Run(func(args mock.Arguments) {
cancel()
}).Return(sampleEncodedAllowlist(t), nil)`
$DIR/core/services/gateway/handlers/functions/allowlist/allowlist_test.go: `cancel()`
$DIR/core/services/gateway/handlers/functions/allowlist/allowlist_test.go: `orm.On("PurgeAllowedSenders", mock.Anything).Times(1).Return(nil)`
$DIR/core/services/gateway/handlers/functions/allowlist/allowlist_test.go: `orm.On("GetAllowedSenders", mock.Anything, uint(0), uint(1000)).Return([]common.Address{}, nil)`
$DIR/core/services/gateway/handlers/functions/allowlist/allowlist_test.go: `orm.On("CreateAllowedSenders", mock.Anything, []common.Address{common.HexToAddress(addr1), common.HexToAddress(addr2)}).Times(1).Return(nil)`
$DIR/core/services/gateway/handlers/functions/allowlist/allowlist_test.go: `err = allowlist.Start(ctx)`
$DIR/core/services/gateway/handlers/functions/allowlist/allowlist_test.go: `t.Cleanup(func() {
assert.NoError(t, allowlist.Close())
})`
$DIR/core/services/gateway/handlers/functions/allowlist/allowlist_test.go: `gomega.NewGomegaWithT(t).Eventually(func() bool {
return allowlist.Allow(common.HexToAddress(addr1)) && !allowlist.Allow(common.HexToAddress(addr3))
}, testutils.WaitTimeout(t), time.Second).Should(gomega.BeTrue())`
$DIR/core/services/gateway/handlers/functions/allowlist/allowlist_test.go: `client.On("LatestBlockHeight", mock.Anything).Return(big.NewInt(42), nil)`
$DIR/core/services/gateway/handlers/functions/allowlist/allowlist_test.go: `client.On("CallContract", mock.Anything, ethereum.CallMsg{ // typeAndVersion
To: &addr,
Data: hexutil.MustDecode("0x181f5a77"),
}, mock.Anything).Return(typeAndVersionResponse, nil)`
$DIR/core/services/gateway/handlers/functions/allowlist/allowlist_test.go: `client.On("CallContract", mock.Anything, mock.Anything, mock.Anything).Run(func(args mock.Arguments) {
cancel()
}).Return(sampleEncodedAllowlist(t), nil)`
$DIR/core/services/gateway/handlers/functions/allowlist/allowlist_test.go: `cancel()`
$DIR/core/services/gateway/handlers/functions/allowlist/allowlist_test.go: `orm.On("DeleteAllowedSenders", mock.Anything, []common.Address{common.HexToAddress(addr1), common.HexToAddress(addr2)}).Times(1).Return(nil)`
$DIR/core/services/gateway/handlers/functions/allowlist/allowlist_test.go: `orm.On("GetAllowedSenders", mock.Anything, uint(0), uint(1000)).Return([]common.Address{}, nil)`
$DIR/core/services/gateway/handlers/functions/allowlist/allowlist_test.go: `orm.On("CreateAllowedSenders", mock.Anything, []common.Address{common.HexToAddress(addr1), common.HexToAddress(addr2)}).Times(1).Return(nil)`
$DIR/core/services/gateway/handlers/functions/allowlist/allowlist_test.go: `err = allowlist.Start(ctx)`
$DIR/core/services/gateway/handlers/functions/allowlist/allowlist_test.go: `t.Cleanup(func() {
assert.NoError(t, allowlist.Close())
})`
$DIR/core/services/gateway/handlers/functions/allowlist/allowlist_test.go: `gomega.NewGomegaWithT(t).Eventually(func() bool {
return allowlist.Allow(common.HexToAddress(addr1)) && !allowlist.Allow(common.HexToAddress(addr3))
}, testutils.WaitTimeout(t), time.Second).Should(gomega.BeTrue())`
$DIR/core/services/gateway/handlers/functions/allowlist/allowlist_test.go: `t.Run("OK-fetch_complete_list_of_allowed_senders", func(t *testing.T) {
ctx, cancel := context.WithCancel(testutils.Context(t))
client := mocks.NewClient(t)
client.On("LatestBlockHeight", mock.Anything).Return(big.NewInt(42), nil)
addr := common.HexToAddress("0x0000000000000000000000000000000000000020")
typeAndVersionResponse, err := encodeTypeAndVersionResponse(ToSContractV100)
require.NoError(t, err)
client.On("CallContract", mock.Anything, ethereum.CallMsg{ // typeAndVersion
To: &addr,
Data: hexutil.MustDecode("0x181f5a77"),
}, mock.Anything).Return(typeAndVersionResponse, nil)
client.On("CallContract", mock.Anything, mock.Anything, mock.Anything).Run(func(args mock.Arguments) {
cancel()
}).Return(sampleEncodedAllowlist(t), nil)
config := allowlist.OnchainAllowlistConfig{
ContractAddress: common.HexToAddress(addr3),
ContractVersion: 1,
BlockConfirmations: 1,
UpdateFrequencySec: 2,
UpdateTimeoutSec: 1,
StoredAllowlistBatchSize: 2,
OnchainAllowlistBatchSize: 16,
FetchingDelayInRangeSec: 0,
}
orm := amocks.NewORM(t)
orm.On("PurgeAllowedSenders", mock.Anything).Times(1).Return(nil)
orm.On("CreateAllowedSenders", mock.Anything, []common.Address{common.HexToAddress(addr1), common.HexToAddress(addr2)}).Times(1).Return(nil)
allowlist, err := allowlist.NewOnchainAllowlist(client, config, orm, logger.TestLogger(t))
require.NoError(t, err)
err = allowlist.UpdateFromContract(ctx)
require.NoError(t, err)
gomega.NewGomegaWithT(t).Eventually(func() bool {
return allowlist.Allow(common.HexToAddress(addr1)) && !allowlist.Allow(common.HexToAddress(addr3))
}, testutils.WaitTimeout(t), time.Second).Should(gomega.BeTrue())
})`
$DIR/core/services/gateway/handlers/functions/allowlist/allowlist_test.go: `client.On("LatestBlockHeight", mock.Anything).Return(big.NewInt(42), nil)`
$DIR/core/services/gateway/handlers/functions/allowlist/allowlist_test.go: `client.On("CallContract", mock.Anything, ethereum.CallMsg{ // typeAndVersion
To: &addr,
Data: hexutil.MustDecode("0x181f5a77"),
}, mock.Anything).Return(typeAndVersionResponse, nil)`
$DIR/core/services/gateway/handlers/functions/allowlist/allowlist_test.go: `client.On("CallContract", mock.Anything, mock.Anything, mock.Anything).Run(func(args mock.Arguments) {
cancel()
}).Return(sampleEncodedAllowlist(t), nil)`
$DIR/core/services/gateway/handlers/functions/allowlist/allowlist_test.go: `cancel()`
$DIR/core/services/gateway/handlers/functions/allowlist/allowlist_test.go: `orm.On("PurgeAllowedSenders", mock.Anything).Times(1).Return(nil)`
$DIR/core/services/gateway/handlers/functions/allowlist/allowlist_test.go: `orm.On("CreateAllowedSenders", mock.Anything, []common.Address{common.HexToAddress(addr1), common.HexToAddress(addr2)}).Times(1).Return(nil)`
$DIR/core/services/gateway/handlers/functions/allowlist/allowlist_test.go: `err = allowlist.UpdateFromContract(ctx)`
$DIR/core/services/gateway/handlers/functions/allowlist/allowlist_test.go: `gomega.NewGomegaWithT(t).Eventually(func() bool {
return allowlist.Allow(common.HexToAddress(addr1)) && !allowlist.Allow(common.HexToAddress(addr3))
}, testutils.WaitTimeout(t), time.Second).Should(gomega.BeTrue())`
$DIR/core/services/gateway/handlers/functions/allowlist/allowlist_test.go: `client.On("LatestBlockHeight", mock.Anything).Return(big.NewInt(42), nil)`
$DIR/core/services/gateway/handlers/functions/allowlist/allowlist_test.go: `client.On("CallContract", mock.Anything, ethereum.CallMsg{ // typeAndVersion
To: &addr,
Data: hexutil.MustDecode("0x181f5a77"),
}, mock.Anything).Return(typeAndVersionResponse, nil)`
$DIR/core/services/gateway/handlers/functions/allowlist/allowlist_test.go: `client.On("CallContract", mock.Anything, mock.Anything, mock.Anything).Run(func(args mock.Arguments) {
cancel()
}).Return(sampleEncodedAllowlist(t), nil)`
$DIR/core/services/gateway/handlers/functions/allowlist/allowlist_test.go: `cancel()`
$DIR/core/services/gateway/handlers/functions/allowlist/allowlist_test.go: `orm.On("DeleteAllowedSenders", mock.Anything, []common.Address{common.HexToAddress(addr1), common.HexToAddress(addr2)}).Times(2).Return(nil)`
$DIR/core/services/gateway/handlers/functions/allowlist/allowlist_test.go: `orm.On("CreateAllowedSenders", mock.Anything, []common.Address{common.HexToAddress(addr1), common.HexToAddress(addr2)}).Times(2).Return(nil)`
$DIR/core/services/gateway/handlers/functions/allowlist/allowlist_test.go: `err = allowlist.UpdateFromContract(ctx)`
$DIR/core/services/gateway/handlers/functions/allowlist/allowlist_test.go: `gomega.NewGomegaWithT(t).Eventually(func() bool {
return allowlist.Allow(common.HexToAddress(addr1)) && !allowlist.Allow(common.HexToAddress(addr3))
}, testutils.WaitTimeout(t), time.Second).Should(gomega.BeTrue())`
$DIR/core/services/gateway/handlers/functions/allowlist/allowlist_test.go: `t.Run(tc.name, func(t *testing.T) {
actualResult, actualError := allowlist.ExtractContractVersion(tc.versionStr)
require.Equal(t, tc.expectedResult, actualResult)
if tc.expectedError != nil {
require.EqualError(t, actualError, *tc.expectedError)
} else {
require.NoError(t, actualError)
}
})`
$DIR/core/services/gateway/handlers/functions/allowlist/allowlist_test.go: `.Run("OK-with_ToS_V1.0.0", func(t *testing.T) {
client := mocks.NewClient(t)
client.On("LatestBlockHeight", mock.Anything).Return(big.NewInt(42), nil)
addr := common.HexToAddress("0x0000000000000000000000000000000000000020")
typeAndVersionResponse, err := encodeTypeAndVersionResponse(ToSContractV100)
require.NoError(t, err)
client.On("CallContract", mock.Anything, ethereum.CallMsg{ // typeAndVersion
To: &addr,
Data: hexutil.MustDecode("0x181f5a77"),
}, mock.Anything).Return(typeAndVersionResponse, nil)
client.On("CallContract", mock.Anything, mock.Anything, mock.Anything).Return(sampleEncodedAllowlist(t), nil)
config := allowlist.OnchainAllowlistConfig{
ContractVersion: 1,
ContractAddress: common.Address{},
BlockConfirmations: 1,
}
orm := amocks.NewORM(t)
orm.On("PurgeAllowedSenders", mock.Anything).Times(1).Return(nil)
orm.On("CreateAllowedSenders", mock.Anything, []common.Address{common.HexToAddress(addr1), common.HexToAddress(addr2)}).Times(1).Return(nil)
allowlist, err := allowlist.NewOnchainAllowlist(client, config, orm, logger.TestLogger(t))
require.NoError(t, err)
err = allowlist.Start(testutils.Context(t))
require.NoError(t, err)
t.Cleanup(func() {
assert.NoError(t, allowlist.Close())
})
require.NoError(t, allowlist.UpdateFromContract(testutils.Context(t)))
require.False(t, allowlist.Allow(common.Address{}))
require.True(t, allowlist.Allow(common.HexToAddress(addr1)))
require.True(t, allowlist.Allow(common.HexToAddress(addr2)))
require.False(t, allowlist.Allow(common.HexToAddress(addr3)))
})`
$DIR/core/services/gateway/handlers/functions/allowlist/allowlist_test.go: `.NewClient(t)`
$DIR/core/services/gateway/handlers/functions/allowlist/allowlist_test.go: `.On("LatestBlockHeight", mock.Anything)`
$DIR/core/services/gateway/handlers/functions/allowlist/allowlist_test.go: `.Return(big.NewInt(42), nil)`
$DIR/core/services/gateway/handlers/functions/allowlist/allowlist_test.go: `.NewInt(42)`
$DIR/core/services/gateway/handlers/functions/allowlist/allowlist_test.go: `.HexToAddress("0x0000000000000000000000000000000000000020")`
$DIR/core/services/gateway/handlers/functions/allowlist/allowlist_test.go: `.On("CallContract", mock.Anything, ethereum.CallMsg{ // typeAndVersion
To: &addr,
Data: hexutil.MustDecode("0x181f5a77"),
}, mock.Anything)`
$DIR/core/services/gateway/handlers/functions/allowlist/allowlist_test.go: `.MustDecode("0x181f5a77")`
$DIR/core/services/gateway/handlers/functions/allowlist/allowlist_test.go: `.Return(typeAndVersionResponse, nil)`
$DIR/core/services/gateway/handlers/functions/allowlist/allowlist_test.go: `.On("CallContract", mock.Anything, mock.Anything, mock.Anything)`
$DIR/core/services/gateway/handlers/functions/allowlist/allowlist_test.go: `.Return(sampleEncodedAllowlist(t), nil)`
$DIR/core/services/gateway/handlers/functions/allowlist/allowlist_test.go: `.NewORM(t)`
$DIR/core/services/gateway/handlers/functions/allowlist/allowlist_test.go: `.On("PurgeAllowedSenders", mock.Anything)`
$DIR/core/services/gateway/handlers/functions/allowlist/allowlist_test.go: `.Times(1)`
$DIR/core/services/gateway/handlers/functions/allowlist/allowlist_test.go: `.Return(nil)`
$DIR/core/services/gateway/handlers/functions/allowlist/allowlist_test.go: `.On("CreateAllowedSenders", mock.Anything, []common.Address{common.HexToAddress(addr1), common.HexToAddress(addr2)})`
$DIR/core/services/gateway/handlers/functions/allowlist/allowlist_test.go: `.HexToAddress(addr1)`
$DIR/core/services/gateway/handlers/functions/allowlist/allowlist_test.go: `.HexToAddress(addr2)`
$DIR/core/services/gateway/handlers/functions/allowlist/allowlist_test.go: `.Times(1)`
$DIR/core/services/gateway/handlers/functions/allowlist/allowlist_test.go: `.Return(nil)`
$DIR/core/services/gateway/handlers/functions/allowlist/allowlist_test.go: `.NewOnchainAllowlist(client, config, orm, logger.TestLogger(t))`
$DIR/core/services/gateway/handlers/functions/allowlist/allowlist_test.go: `.TestLogger(t)`
$DIR/core/services/gateway/handlers/functions/allowlist/allowlist_test.go: `.Start(testutils.Context(t))`
$DIR/core/services/gateway/handlers/functions/allowlist/allowlist_test.go: `.Context(t)`
$DIR/core/services/gateway/handlers/functions/allowlist/allowlist_test.go: `.Cleanup(func() {
assert.NoError(t, allowlist.Close())
})`
$DIR/core/services/gateway/handlers/functions/allowlist/allowlist_test.go: `.NewClient(t)`
$DIR/core/services/gateway/handlers/functions/allowlist/allowlist_test.go: `.On("LatestBlockHeight", mock.Anything)`
$DIR/core/services/gateway/handlers/functions/allowlist/allowlist_test.go: `.Return(big.NewInt(42), nil)`
$DIR/core/services/gateway/handlers/functions/allowlist/allowlist_test.go: `.NewInt(42)`
$DIR/core/services/gateway/handlers/functions/allowlist/allowlist_test.go: `.HexToAddress("0x0000000000000000000000000000000000000020")`
$DIR/core/services/gateway/handlers/functions/allowlist/allowlist_test.go: `.On("CallContract", mock.Anything, ethereum.CallMsg{ // typeAndVersion
To: &addr,
Data: hexutil.MustDecode("0x181f5a77"),
}, mock.Anything)`
$DIR/core/services/gateway/handlers/functions/allowlist/allowlist_test.go: `.MustDecode("0x181f5a77")`
$DIR/core/services/gateway/handlers/functions/allowlist/allowlist_test.go: `.Return(typeAndVersionResponse, nil)`
$DIR/core/services/gateway/handlers/functions/allowlist/allowlist_test.go: `.On("CallContract", mock.Anything, mock.Anything, mock.Anything)`
$DIR/core/services/gateway/handlers/functions/allowlist/allowlist_test.go: `.Return(sampleEncodedAllowlist(t), nil)`
$DIR/core/services/gateway/handlers/functions/allowlist/allowlist_test.go: `.NewORM(t)`
$DIR/core/services/gateway/handlers/functions/allowlist/allowlist_test.go: `.On("DeleteAllowedSenders", mock.Anything, []common.Address{common.HexToAddress(addr1), common.HexToAddress(addr2)})`
$DIR/core/services/gateway/handlers/functions/allowlist/allowlist_test.go: `.HexToAddress(addr1)`
$DIR/core/services/gateway/handlers/functions/allowlist/allowlist_test.go: `.HexToAddress(addr2)`
$DIR/core/services/gateway/handlers/functions/allowlist/allowlist_test.go: `.Times(1)`
$DIR/core/services/gateway/handlers/functions/allowlist/allowlist_test.go: `.Return(nil)`
$DIR/core/services/gateway/handlers/functions/allowlist/allowlist_test.go: `.On("CreateAllowedSenders", mock.Anything, []common.Address{common.HexToAddress(addr1), common.HexToAddress(addr2)})`
$DIR/core/services/gateway/handlers/functions/allowlist/allowlist_test.go: `.HexToAddress(addr1)`
$DIR/core/services/gateway/handlers/functions/allowlist/allowlist_test.go: `.HexToAddress(addr2)`
$DIR/core/services/gateway/handlers/functions/allowlist/allowlist_test.go: `.Times(1)`
$DIR/core/services/gateway/handlers/functions/allowlist/allowlist_test.go: `.Return(nil)`
$DIR/core/services/gateway/handlers/functions/allowlist/allowlist_test.go: `.NewOnchainAllowlist(client, config, orm, logger.TestLogger(t))`
$DIR/core/services/gateway/handlers/functions/allowlist/allowlist_test.go: `.TestLogger(t)`
$DIR/core/services/gateway/handlers/functions/allowlist/allowlist_test.go: `.Start(testutils.Context(t))`
$DIR/core/services/gateway/handlers/functions/allowlist/allowlist_test.go: `.Context(t)`
$DIR/core/services/gateway/handlers/functions/allowlist/allowlist_test.go: `.Cleanup(func() {
assert.NoError(t, allowlist.Close())
})`
$DIR/core/services/gateway/handlers/functions/allowlist/allowlist_test.go: `.NewClient(t)`
$DIR/core/services/gateway/handlers/functions/allowlist/allowlist_test.go: `.NewORM(t)`
$DIR/core/services/gateway/handlers/functions/allowlist/allowlist_test.go: `.NewOnchainAllowlist(client, config, orm, logger.TestLogger(t))`
$DIR/core/services/gateway/handlers/functions/allowlist/allowlist_test.go: `.TestLogger(t)`
$DIR/core/services/gateway/handlers/functions/allowlist/allowlist_test.go: `.Run("OK-with_ToS_V1.0.0", func(t *testing.T) {
ctx, cancel := context.WithCancel(testutils.Context(t))
client := mocks.NewClient(t)
client.On("LatestBlockHeight", mock.Anything).Return(big.NewInt(42), nil)
addr := common.HexToAddress("0x0000000000000000000000000000000000000020")
typeAndVersionResponse, err := encodeTypeAndVersionResponse(ToSContractV100)
require.NoError(t, err)
client.On("CallContract", mock.Anything, ethereum.CallMsg{ // typeAndVersion
To: &addr,
Data: hexutil.MustDecode("0x181f5a77"),
}, mock.Anything).Return(typeAndVersionResponse, nil)
client.On("CallContract", mock.Anything, mock.Anything, mock.Anything).Run(func(args mock.Arguments) {
cancel()
}).Return(sampleEncodedAllowlist(t), nil)
config := allowlist.OnchainAllowlistConfig{
ContractAddress: common.Address{},
ContractVersion: 1,
BlockConfirmations: 1,
UpdateFrequencySec: 2,
UpdateTimeoutSec: 1,
}
orm := amocks.NewORM(t)
orm.On("PurgeAllowedSenders", mock.Anything).Times(1).Return(nil)
orm.On("GetAllowedSenders", mock.Anything, uint(0), uint(1000)).Return([]common.Address{}, nil)
orm.On("CreateAllowedSenders", mock.Anything, []common.Address{common.HexToAddress(addr1), common.HexToAddress(addr2)}).Times(1).Return(nil)
allowlist, err := allowlist.NewOnchainAllowlist(client, config, orm, logger.TestLogger(t))
require.NoError(t, err)
err = allowlist.Start(ctx)
require.NoError(t, err)
t.Cleanup(func() {
assert.NoError(t, allowlist.Close())
})
gomega.NewGomegaWithT(t).Eventually(func() bool {
return allowlist.Allow(common.HexToAddress(addr1)) && !allowlist.Allow(common.HexToAddress(addr3))
}, testutils.WaitTimeout(t), time.Second).Should(gomega.BeTrue())
})`
$DIR/core/services/gateway/handlers/functions/allowlist/allowlist_test.go: `.WithCancel(testutils.Context(t))`
$DIR/core/services/gateway/handlers/functions/allowlist/allowlist_test.go: `.Context(t)`
$DIR/core/services/gateway/handlers/functions/allowlist/allowlist_test.go: `.NewClient(t)`
$DIR/core/services/gateway/handlers/functions/allowlist/allowlist_test.go: `.On("LatestBlockHeight", mock.Anything)`
$DIR/core/services/gateway/handlers/functions/allowlist/allowlist_test.go: `.Return(big.NewInt(42), nil)`
$DIR/core/services/gateway/handlers/functions/allowlist/allowlist_test.go: `.NewInt(42)`
$DIR/core/services/gateway/handlers/functions/allowlist/allowlist_test.go: `.HexToAddress("0x0000000000000000000000000000000000000020")`
$DIR/core/services/gateway/handlers/functions/allowlist/allowlist_test.go: `.On("CallContract", mock.Anything, ethereum.CallMsg{ // typeAndVersion
To: &addr,
Data: hexutil.MustDecode("0x181f5a77"),
}, mock.Anything)`
$DIR/core/services/gateway/handlers/functions/allowlist/allowlist_test.go: `.MustDecode("0x181f5a77")`
$DIR/core/services/gateway/handlers/functions/allowlist/allowlist_test.go: `.Return(typeAndVersionResponse, nil)`
$DIR/core/services/gateway/handlers/functions/allowlist/allowlist_test.go: `.On("CallContract", mock.Anything, mock.Anything, mock.Anything)`
$DIR/core/services/gateway/handlers/functions/allowlist/allowlist_test.go: `.Run(func(args mock.Arguments) {
cancel()
})`
$DIR/core/services/gateway/handlers/functions/allowlist/allowlist_test.go: `.Return(sampleEncodedAllowlist(t), nil)`
$DIR/core/services/gateway/handlers/functions/allowlist/allowlist_test.go: `.NewORM(t)`
$DIR/core/services/gateway/handlers/functions/allowlist/allowlist_test.go: `.On("PurgeAllowedSenders", mock.Anything)`
$DIR/core/services/gateway/handlers/functions/allowlist/allowlist_test.go: `.Times(1)`
$DIR/core/services/gateway/handlers/functions/allowlist/allowlist_test.go: `.Return(nil)`
$DIR/core/services/gateway/handlers/functions/allowlist/allowlist_test.go: `.On("GetAllowedSenders", mock.Anything, uint(0), uint(1000))`
$DIR/core/services/gateway/handlers/functions/allowlist/allowlist_test.go: `.Return([]common.Address{}, nil)`
$DIR/core/services/gateway/handlers/functions/allowlist/allowlist_test.go: `.On("CreateAllowedSenders", mock.Anything, []common.Address{common.HexToAddress(addr1), common.HexToAddress(addr2)})`
$DIR/core/services/gateway/handlers/functions/allowlist/allowlist_test.go: `.HexToAddress(addr1)`
$DIR/core/services/gateway/handlers/functions/allowlist/allowlist_test.go: `.HexToAddress(addr2)`
$DIR/core/services/gateway/handlers/functions/allowlist/allowlist_test.go: `.Times(1)`
$DIR/core/services/gateway/handlers/functions/allowlist/allowlist_test.go: `.Return(nil)`
$DIR/core/services/gateway/handlers/functions/allowlist/allowlist_test.go: `.NewOnchainAllowlist(client, config, orm, logger.TestLogger(t))`
$DIR/core/services/gateway/handlers/functions/allowlist/allowlist_test.go: `.TestLogger(t)`
$DIR/core/services/gateway/handlers/functions/allowlist/allowlist_test.go: `.Start(ctx)`
$DIR/core/services/gateway/handlers/functions/allowlist/allowlist_test.go: `.Cleanup(func() {
assert.NoError(t, allowlist.Close())
})`
$DIR/core/services/gateway/handlers/functions/allowlist/allowlist_test.go: `.NewGomegaWithT(t)`
$DIR/core/services/gateway/handlers/functions/allowlist/allowlist_test.go: `.Eventually(func() bool {
return allowlist.Allow(common.HexToAddress(addr1)) && !allowlist.Allow(common.HexToAddress(addr3))
}, testutils.WaitTimeout(t), time.Second)`
$DIR/core/services/gateway/handlers/functions/allowlist/allowlist_test.go: `.Allow(common.HexToAddress(addr1))`
$DIR/core/services/gateway/handlers/functions/allowlist/allowlist_test.go: `.HexToAddress(addr1)`
$DIR/core/services/gateway/handlers/functions/allowlist/allowlist_test.go: `.Allow(common.HexToAddress(addr3))`
$DIR/core/services/gateway/handlers/functions/allowlist/allowlist_test.go: `.HexToAddress(addr3)`
$DIR/core/services/gateway/handlers/functions/allowlist/allowlist_test.go: `.WaitTimeout(t)`
$DIR/core/services/gateway/handlers/functions/allowlist/allowlist_test.go: `.Should(gomega.BeTrue())`
$DIR/core/services/gateway/handlers/functions/allowlist/allowlist_test.go: `.BeTrue()`
$DIR/core/services/gateway/handlers/functions/allowlist/allowlist_test.go: `.WithCancel(testutils.Context(t))`
$DIR/core/services/gateway/handlers/functions/allowlist/allowlist_test.go: `.Context(t)`
$DIR/core/services/gateway/handlers/functions/allowlist/allowlist_test.go: `.NewClient(t)`
$DIR/core/services/gateway/handlers/functions/allowlist/allowlist_test.go: `.On("LatestBlockHeight", mock.Anything)`
$DIR/core/services/gateway/handlers/functions/allowlist/allowlist_test.go: `.Return(big.NewInt(42), nil)`
$DIR/core/services/gateway/handlers/functions/allowlist/allowlist_test.go: `.NewInt(42)`
$DIR/core/services/gateway/handlers/functions/allowlist/allowlist_test.go: `.HexToAddress("0x0000000000000000000000000000000000000020")`
$DIR/core/services/gateway/handlers/functions/allowlist/allowlist_test.go: `.On("CallContract", mock.Anything, ethereum.CallMsg{ // typeAndVersion
To: &addr,
Data: hexutil.MustDecode("0x181f5a77"),
}, mock.Anything)`
$DIR/core/services/gateway/handlers/functions/allowlist/allowlist_test.go: `.MustDecode("0x181f5a77")`
$DIR/core/services/gateway/handlers/functions/allowlist/allowlist_test.go: `.Return(typeAndVersionResponse, nil)`
$DIR/core/services/gateway/handlers/functions/allowlist/allowlist_test.go: `.On("CallContract", mock.Anything, mock.Anything, mock.Anything)`
$DIR/core/services/gateway/handlers/functions/allowlist/allowlist_test.go: `.Run(func(args mock.Arguments) {
cancel()
})`
$DIR/core/services/gateway/handlers/functions/allowlist/allowlist_test.go: `.Return(sampleEncodedAllowlist(t), nil)`
$DIR/core/services/gateway/handlers/functions/allowlist/allowlist_test.go: `.NewORM(t)`
$DIR/core/services/gateway/handlers/functions/allowlist/allowlist_test.go: `.On("DeleteAllowedSenders", mock.Anything, []common.Address{common.HexToAddress(addr1), common.HexToAddress(addr2)})`
$DIR/core/services/gateway/handlers/functions/allowlist/allowlist_test.go: `.HexToAddress(addr1)`
$DIR/core/services/gateway/handlers/functions/allowlist/allowlist_test.go: `.HexToAddress(addr2)`
$DIR/core/services/gateway/handlers/functions/allowlist/allowlist_test.go: `.Times(1)`
$DIR/core/services/gateway/handlers/functions/allowlist/allowlist_test.go: `.Return(nil)`
$DIR/core/services/gateway/handlers/functions/allowlist/allowlist_test.go: `.On("GetAllowedSenders", mock.Anything, uint(0), uint(1000))`
$DIR/core/services/gateway/handlers/functions/allowlist/allowlist_test.go: `.Return([]common.Address{}, nil)`
$DIR/core/services/gateway/handlers/functions/allowlist/allowlist_test.go: `.On("CreateAllowedSenders", mock.Anything, []common.Address{common.HexToAddress(addr1), common.HexToAddress(addr2)})`
$DIR/core/services/gateway/handlers/functions/allowlist/allowlist_test.go: `.HexToAddress(addr1)`
$DIR/core/services/gateway/handlers/functions/allowlist/allowlist_test.go: `.HexToAddress(addr2)`
$DIR/core/services/gateway/handlers/functions/allowlist/allowlist_test.go: `.Times(1)`
$DIR/core/services/gateway/handlers/functions/allowlist/allowlist_test.go: `.Return(nil)`
$DIR/core/services/gateway/handlers/functions/allowlist/allowlist_test.go: `.NewOnchainAllowlist(client, config, orm, logger.TestLogger(t))`
$DIR/core/services/gateway/handlers/functions/allowlist/allowlist_test.go: `.TestLogger(t)`
$DIR/core/services/gateway/handlers/functions/allowlist/allowlist_test.go: `.Start(ctx)`
$DIR/core/services/gateway/handlers/functions/allowlist/allowlist_test.go: `.Cleanup(func() {
assert.NoError(t, allowlist.Close())
})`
$DIR/core/services/gateway/handlers/functions/allowlist/allowlist_test.go: `.NewGomegaWithT(t)`
$DIR/core/services/gateway/handlers/functions/allowlist/allowlist_test.go: `.Eventually(func() bool {
return allowlist.Allow(common.HexToAddress(addr1)) && !allowlist.Allow(common.HexToAddress(addr3))
}, testutils.WaitTimeout(t), time.Second)`
$DIR/core/services/gateway/handlers/functions/allowlist/allowlist_test.go: `.Allow(common.HexToAddress(addr1))`
$DIR/core/services/gateway/handlers/functions/allowlist/allowlist_test.go: `.HexToAddress(addr1)`
$DIR/core/services/gateway/handlers/functions/allowlist/allowlist_test.go: `.Allow(common.HexToAddress(addr3))`
$DIR/core/services/gateway/handlers/functions/allowlist/allowlist_test.go: `.HexToAddress(addr3)`
$DIR/core/services/gateway/handlers/functions/allowlist/allowlist_test.go: `.WaitTimeout(t)`
$DIR/core/services/gateway/handlers/functions/allowlist/allowlist_test.go: `.Should(gomega.BeTrue())`
$DIR/core/services/gateway/handlers/functions/allowlist/allowlist_test.go: `.BeTrue()`
$DIR/core/services/gateway/handlers/functions/allowlist/allowlist_test.go: `.Run("OK-fetch_complete_list_of_allowed_senders", func(t *testing.T) {
ctx, cancel := context.WithCancel(testutils.Context(t))
client := mocks.NewClient(t)
client.On("LatestBlockHeight", mock.Anything).Return(big.NewInt(42), nil)
addr := common.HexToAddress("0x0000000000000000000000000000000000000020")
typeAndVersionResponse, err := encodeTypeAndVersionResponse(ToSContractV100)
require.NoError(t, err)
client.On("CallContract", mock.Anything, ethereum.CallMsg{ // typeAndVersion
To: &addr,
Data: hexutil.MustDecode("0x181f5a77"),
}, mock.Anything).Return(typeAndVersionResponse, nil)
client.On("CallContract", mock.Anything, mock.Anything, mock.Anything).Run(func(args mock.Arguments) {
cancel()
}).Return(sampleEncodedAllowlist(t), nil)
config := allowlist.OnchainAllowlistConfig{
ContractAddress: common.HexToAddress(addr3),
ContractVersion: 1,
BlockConfirmations: 1,
UpdateFrequencySec: 2,
UpdateTimeoutSec: 1,
StoredAllowlistBatchSize: 2,
OnchainAllowlistBatchSize: 16,
FetchingDelayInRangeSec: 0,
}
orm := amocks.NewORM(t)
orm.On("PurgeAllowedSenders", mock.Anything).Times(1).Return(nil)
orm.On("CreateAllowedSenders", mock.Anything, []common.Address{common.HexToAddress(addr1), common.HexToAddress(addr2)}).Times(1).Return(nil)
allowlist, err := allowlist.NewOnchainAllowlist(client, config, orm, logger.TestLogger(t))
require.NoError(t, err)
err = allowlist.UpdateFromContract(ctx)
require.NoError(t, err)
gomega.NewGomegaWithT(t).Eventually(func() bool {
return allowlist.Allow(common.HexToAddress(addr1)) && !allowlist.Allow(common.HexToAddress(addr3))
}, testutils.WaitTimeout(t), time.Second).Should(gomega.BeTrue())
})`
$DIR/core/services/gateway/handlers/functions/allowlist/allowlist_test.go: `.WithCancel(testutils.Context(t))`
$DIR/core/services/gateway/handlers/functions/allowlist/allowlist_test.go: `.Context(t)`
$DIR/core/services/gateway/handlers/functions/allowlist/allowlist_test.go: `.NewClient(t)`
$DIR/core/services/gateway/handlers/functions/allowlist/allowlist_test.go: `.On("LatestBlockHeight", mock.Anything)`
$DIR/core/services/gateway/handlers/functions/allowlist/allowlist_test.go: `.Return(big.NewInt(42), nil)`
$DIR/core/services/gateway/handlers/functions/allowlist/allowlist_test.go: `.NewInt(42)`
$DIR/core/services/gateway/handlers/functions/allowlist/allowlist_test.go: `.HexToAddress("0x0000000000000000000000000000000000000020")`
$DIR/core/services/gateway/handlers/functions/allowlist/allowlist_test.go: `.On("CallContract", mock.Anything, ethereum.CallMsg{ // typeAndVersion
To: &addr,
Data: hexutil.MustDecode("0x181f5a77"),
}, mock.Anything)`
$DIR/core/services/gateway/handlers/functions/allowlist/allowlist_test.go: `.MustDecode("0x181f5a77")`
$DIR/core/services/gateway/handlers/functions/allowlist/allowlist_test.go: `.Return(typeAndVersionResponse, nil)`
$DIR/core/services/gateway/handlers/functions/allowlist/allowlist_test.go: `.On("CallContract", mock.Anything, mock.Anything, mock.Anything)`
$DIR/core/services/gateway/handlers/functions/allowlist/allowlist_test.go: `.Run(func(args mock.Arguments) {
cancel()
})`
$DIR/core/services/gateway/handlers/functions/allowlist/allowlist_test.go: `.Return(sampleEncodedAllowlist(t), nil)`
$DIR/core/services/gateway/handlers/functions/allowlist/allowlist_test.go: `.HexToAddress(addr3)`
$DIR/core/services/gateway/handlers/functions/allowlist/allowlist_test.go: `.NewORM(t)`
$DIR/core/services/gateway/handlers/functions/allowlist/allowlist_test.go: `.On("PurgeAllowedSenders", mock.Anything)`
$DIR/core/services/gateway/handlers/functions/allowlist/allowlist_test.go: `.Times(1)`
$DIR/core/services/gateway/handlers/functions/allowlist/allowlist_test.go: `.Return(nil)`
$DIR/core/services/gateway/handlers/functions/allowlist/allowlist_test.go: `.On("CreateAllowedSenders", mock.Anything, []common.Address{common.HexToAddress(addr1), common.HexToAddress(addr2)})`
$DIR/core/services/gateway/handlers/functions/allowlist/allowlist_test.go: `.HexToAddress(addr1)`
$DIR/core/services/gateway/handlers/functions/allowlist/allowlist_test.go: `.HexToAddress(addr2)`
$DIR/core/services/gateway/handlers/functions/allowlist/allowlist_test.go: `.Times(1)`
$DIR/core/services/gateway/handlers/functions/allowlist/allowlist_test.go: `.Return(nil)`
$DIR/core/services/gateway/handlers/functions/allowlist/allowlist_test.go: `.NewOnchainAllowlist(client, config, orm, logger.TestLogger(t))`
$DIR/core/services/gateway/handlers/functions/allowlist/allowlist_test.go: `.TestLogger(t)`
$DIR/core/services/gateway/handlers/functions/allowlist/allowlist_test.go: `.UpdateFromContract(ctx)`
$DIR/core/services/gateway/handlers/functions/allowlist/allowlist_test.go: `.NewGomegaWithT(t)`
$DIR/core/services/gateway/handlers/functions/allowlist/allowlist_test.go: `.Eventually(func() bool {
return allowlist.Allow(common.HexToAddress(addr1)) && !allowlist.Allow(common.HexToAddress(addr3))
}, testutils.WaitTimeout(t), time.Second)`
$DIR/core/services/gateway/handlers/functions/allowlist/allowlist_test.go: `.Allow(common.HexToAddress(addr1))`
$DIR/core/services/gateway/handlers/functions/allowlist/allowlist_test.go: `.HexToAddress(addr1)`
$DIR/core/services/gateway/handlers/functions/allowlist/allowlist_test.go: `.Allow(common.HexToAddress(addr3))`
$DIR/core/services/gateway/handlers/functions/allowlist/allowlist_test.go: `.HexToAddress(addr3)`
$DIR/core/services/gateway/handlers/functions/allowlist/allowlist_test.go: `.WaitTimeout(t)`
$DIR/core/services/gateway/handlers/functions/allowlist/allowlist_test.go: `.Should(gomega.BeTrue())`
$DIR/core/services/gateway/handlers/functions/allowlist/allowlist_test.go: `.BeTrue()`
$DIR/core/services/gateway/handlers/functions/allowlist/allowlist_test.go: `.WithCancel(testutils.Context(t))`
$DIR/core/services/gateway/handlers/functions/allowlist/allowlist_test.go: `.Context(t)`
$DIR/core/services/gateway/handlers/functions/allowlist/allowlist_test.go: `.NewClient(t)`
$DIR/core/services/gateway/handlers/functions/allowlist/allowlist_test.go: `.On("LatestBlockHeight", mock.Anything)`
$DIR/core/services/gateway/handlers/functions/allowlist/allowlist_test.go: `.Return(big.NewInt(42), nil)`
$DIR/core/services/gateway/handlers/functions/allowlist/allowlist_test.go: `.NewInt(42)`
$DIR/core/services/gateway/handlers/functions/allowlist/allowlist_test.go: `.HexToAddress("0x0000000000000000000000000000000000000020")`
$DIR/core/services/gateway/handlers/functions/allowlist/allowlist_test.go: `.On("CallContract", mock.Anything, ethereum.CallMsg{ // typeAndVersion
To: &addr,
Data: hexutil.MustDecode("0x181f5a77"),
}, mock.Anything)`
$DIR/core/services/gateway/handlers/functions/allowlist/allowlist_test.go: `.MustDecode("0x181f5a77")`
$DIR/core/services/gateway/handlers/functions/allowlist/allowlist_test.go: `.Return(typeAndVersionResponse, nil)`
$DIR/core/services/gateway/handlers/functions/allowlist/allowlist_test.go: `.On("CallContract", mock.Anything, mock.Anything, mock.Anything)`
$DIR/core/services/gateway/handlers/functions/allowlist/allowlist_test.go: `.Run(func(args mock.Arguments) {
cancel()
})`
$DIR/core/services/gateway/handlers/functions/allowlist/allowlist_test.go: `.Return(sampleEncodedAllowlist(t), nil)`
$DIR/core/services/gateway/handlers/functions/allowlist/allowlist_test.go: `.HexToAddress(addr3)`
$DIR/core/services/gateway/handlers/functions/allowlist/allowlist_test.go: `.NewORM(t)`
$DIR/core/services/gateway/handlers/functions/allowlist/allowlist_test.go: `.On("DeleteAllowedSenders", mock.Anything, []common.Address{common.HexToAddress(addr1), common.HexToAddress(addr2)})`
$DIR/core/services/gateway/handlers/functions/allowlist/allowlist_test.go: `.HexToAddress(addr1)`
$DIR/core/services/gateway/handlers/functions/allowlist/allowlist_test.go: `.HexToAddress(addr2)`
$DIR/core/services/gateway/handlers/functions/allowlist/allowlist_test.go: `.Times(2)`
$DIR/core/services/gateway/handlers/functions/allowlist/allowlist_test.go: `.Return(nil)`
$DIR/core/services/gateway/handlers/functions/allowlist/allowlist_test.go: `.On("CreateAllowedSenders", mock.Anything, []common.Address{common.HexToAddress(addr1), common.HexToAddress(addr2)})`
$DIR/core/services/gateway/handlers/functions/allowlist/allowlist_test.go: `.HexToAddress(addr1)`
$DIR/core/services/gateway/handlers/functions/allowlist/allowlist_test.go: `.HexToAddress(addr2)`
$DIR/core/services/gateway/handlers/functions/allowlist/allowlist_test.go: `.Times(2)`
$DIR/core/services/gateway/handlers/functions/allowlist/allowlist_test.go: `.Return(nil)`
$DIR/core/services/gateway/handlers/functions/allowlist/allowlist_test.go: `.NewOnchainAllowlist(client, config, orm, logger.TestLogger(t))`
$DIR/core/services/gateway/handlers/functions/allowlist/allowlist_test.go: `.TestLogger(t)`
$DIR/core/services/gateway/handlers/functions/allowlist/allowlist_test.go: `.UpdateFromContract(ctx)`
$DIR/core/services/gateway/handlers/functions/allowlist/allowlist_test.go: `.NewGomegaWithT(t)`
$DIR/core/services/gateway/handlers/functions/allowlist/allowlist_test.go: `.Eventually(func() bool {
return allowlist.Allow(common.HexToAddress(addr1)) && !allowlist.Allow(common.HexToAddress(addr3))
}, testutils.WaitTimeout(t), time.Second)`
$DIR/core/services/gateway/handlers/functions/allowlist/allowlist_test.go: `.Allow(common.HexToAddress(addr1))`
$DIR/core/services/gateway/handlers/functions/allowlist/allowlist_test.go: `.HexToAddress(addr1)`
$DIR/core/services/gateway/handlers/functions/allowlist/allowlist_test.go: `.Allow(common.HexToAddress(addr3))`
$DIR/core/services/gateway/handlers/functions/allowlist/allowlist_test.go: `.HexToAddress(addr3)`
$DIR/core/services/gateway/handlers/functions/allowlist/allowlist_test.go: `.WaitTimeout(t)`
$DIR/core/services/gateway/handlers/functions/allowlist/allowlist_test.go: `.Should(gomega.BeTrue())`
$DIR/core/services/gateway/handlers/functions/allowlist/allowlist_test.go: `.BeTrue()`
$DIR/core/services/gateway/handlers/functions/allowlist/allowlist_test.go: `.Sprintf("version not found in string: %s", v)`
$DIR/core/services/gateway/handlers/functions/allowlist/allowlist_test.go: `.Run(tc.name, func(t *testing.T) {
actualResult, actualError := allowlist.ExtractContractVersion(tc.versionStr)
require.Equal(t, tc.expectedResult, actualResult)
if tc.expectedError != nil {
require.EqualError(t, actualError, *tc.expectedError)
} else {
require.NoError(t, actualError)
}
})`
$DIR/core/services/gateway/handlers/functions/allowlist/allowlist_test.go: `.ExtractContractVersion(tc.versionStr)`
$DIR/core/services/gateway/handlers/functions/allowlist/orm_test.go: `t.Run("fetch first page", func(t *testing.T) {
ctx := testutils.Context(t)
orm, err := setupORM(t)
require.NoError(t, err)
storedAllowedSenders := seedAllowedSenders(t, orm, 2)
results, err := orm.GetAllowedSenders(ctx, 0, 1)
require.NoError(t, err)
require.Equal(t, 1, len(results), "incorrect results length")
require.Equal(t, storedAllowedSenders[0], results[0])
})`
$DIR/core/services/gateway/handlers/functions/allowlist/orm_test.go: `t.Run("OK-create_an_allowed_sender", func(t *testing.T) {
ctx := testutils.Context(t)
orm, err := setupORM(t)
require.NoError(t, err)
expected := testutils.NewAddress()
err = orm.CreateAllowedSenders(ctx, []common.Address{expected})
require.NoError(t, err)
results, err := orm.GetAllowedSenders(ctx, 0, 1)
require.NoError(t, err)
require.Equal(t, 1, len(results), "incorrect results length")
require.Equal(t, expected, results[0])
})`
$DIR/core/services/gateway/handlers/functions/allowlist/orm_test.go: `err = orm.CreateAllowedSenders(ctx, []common.Address{expected})`
$DIR/core/services/gateway/handlers/functions/allowlist/orm_test.go: `t.Run("OK-create_an_existing_allowed_sender", func(t *testing.T) {
ctx := testutils.Context(t)
orm, err := setupORM(t)
require.NoError(t, err)
expected := testutils.NewAddress()
err = orm.CreateAllowedSenders(ctx, []common.Address{expected})
require.NoError(t, err)
err = orm.CreateAllowedSenders(ctx, []common.Address{expected})
require.NoError(t, err)
results, err := orm.GetAllowedSenders(ctx, 0, 5)
require.NoError(t, err)
require.Equal(t, 1, len(results), "incorrect results length")
require.Equal(t, expected, results[0])
})`
$DIR/core/services/gateway/handlers/functions/allowlist/orm_test.go: `err = orm.CreateAllowedSenders(ctx, []common.Address{expected})`
$DIR/core/services/gateway/handlers/functions/allowlist/orm_test.go: `err = orm.CreateAllowedSenders(ctx, []common.Address{expected})`
$DIR/core/services/gateway/handlers/functions/allowlist/orm_test.go: `t.Run("OK-create_multiple_allowed_senders_in_one_query", func(t *testing.T) {
ctx := testutils.Context(t)
orm, err := setupORM(t)
require.NoError(t, err)
expected := []common.Address{testutils.NewAddress(), testutils.NewAddress()}
err = orm.CreateAllowedSenders(ctx, expected)
require.NoError(t, err)
results, err := orm.GetAllowedSenders(ctx, 0, 2)
require.NoError(t, err)
require.Equal(t, 2, len(results), "incorrect results length")
require.Equal(t, expected[0], results[0])
require.Equal(t, expected[1], results[1])
})`
$DIR/core/services/gateway/handlers/functions/allowlist/orm_test.go: `err = orm.CreateAllowedSenders(ctx, expected)`
$DIR/core/services/gateway/handlers/functions/allowlist/orm_test.go: `t.Run("OK-create_multiple_allowed_senders_with_duplicates", func(t *testing.T) {
ctx := testutils.Context(t)
orm, err := setupORM(t)
require.NoError(t, err)
addr1 := testutils.NewAddress()
addr2 := testutils.NewAddress()
expected := []common.Address{addr1, addr2}
duplicatedAddressInput := []common.Address{addr1, addr1, addr1, addr2}
err = orm.CreateAllowedSenders(ctx, duplicatedAddressInput)
require.NoError(t, err)
results, err := orm.GetAllowedSenders(ctx, 0, 10)
require.NoError(t, err)
require.Equal(t, 2, len(results), "incorrect results length")
require.Equal(t, expected[0], results[0])
require.Equal(t, expected[1], results[1])
})`
$DIR/core/services/gateway/handlers/functions/allowlist/orm_test.go: `err = orm.CreateAllowedSenders(ctx, duplicatedAddressInput)`
$DIR/core/services/gateway/handlers/functions/allowlist/orm_test.go: `err = orm.CreateAllowedSenders(ctx, []common.Address{})`
$DIR/core/services/gateway/handlers/functions/allowlist/orm_test.go: `t.Run("OK-delete_blocked_sender_from_allowed_list", func(t *testing.T) {
ctx := testutils.Context(t)
orm, err := setupORM(t)
require.NoError(t, err)
add1 := testutils.NewAddress()
add2 := testutils.NewAddress()
add3 := testutils.NewAddress()
err = orm.CreateAllowedSenders(ctx, []common.Address{add1, add2, add3})
require.NoError(t, err)
results, err := orm.GetAllowedSenders(ctx, 0, 10)
require.NoError(t, err)
require.Equal(t, 3, len(results), "incorrect results length")
require.Equal(t, add1, results[0])
err = orm.DeleteAllowedSenders(ctx, []common.Address{add1, add3})
require.NoError(t, err)
results, err = orm.GetAllowedSenders(ctx, 0, 10)
require.NoError(t, err)
require.Equal(t, 1, len(results), "incorrect results length")
require.Equal(t, add2, results[0])
})`
$DIR/core/services/gateway/handlers/functions/allowlist/orm_test.go: `err = orm.CreateAllowedSenders(ctx, []common.Address{add1, add2, add3})`
$DIR/core/services/gateway/handlers/functions/allowlist/orm_test.go: `err = orm.DeleteAllowedSenders(ctx, []common.Address{add1, add3})`
$DIR/core/services/gateway/handlers/functions/allowlist/orm_test.go: `results, err = orm.GetAllowedSenders(ctx, 0, 10)`
$DIR/core/services/gateway/handlers/functions/allowlist/orm_test.go: `err = orm.CreateAllowedSenders(ctx, []common.Address{add1, add2})`
$DIR/core/services/gateway/handlers/functions/allowlist/orm_test.go: `err = orm.DeleteAllowedSenders(ctx, []common.Address{add3})`
$DIR/core/services/gateway/handlers/functions/allowlist/orm_test.go: `results, err = orm.GetAllowedSenders(ctx, 0, 10)`
$DIR/core/services/gateway/handlers/functions/allowlist/orm_test.go: `t.Run("OK-purge_allowed_list", func(t *testing.T) {
ctx := testutils.Context(t)
orm, err := setupORM(t)
require.NoError(t, err)
add1 := testutils.NewAddress()
add2 := testutils.NewAddress()
add3 := testutils.NewAddress()
err = orm.CreateAllowedSenders(ctx, []common.Address{add1, add2, add3})
require.NoError(t, err)
results, err := orm.GetAllowedSenders(ctx, 0, 10)
require.NoError(t, err)
require.Equal(t, 3, len(results), "incorrect results length")
require.Equal(t, add1, results[0])
err = orm.PurgeAllowedSenders(ctx)
require.NoError(t, err)
results, err = orm.GetAllowedSenders(ctx, 0, 10)
require.NoError(t, err)
require.Equal(t, 0, len(results), "incorrect results length")
})`
$DIR/core/services/gateway/handlers/functions/allowlist/orm_test.go: `err = orm.CreateAllowedSenders(ctx, []common.Address{add1, add2, add3})`
$DIR/core/services/gateway/handlers/functions/allowlist/orm_test.go: `err = orm.PurgeAllowedSenders(ctx)`
$DIR/core/services/gateway/handlers/functions/allowlist/orm_test.go: `results, err = orm.GetAllowedSenders(ctx, 0, 10)`
$DIR/core/services/gateway/handlers/functions/allowlist/orm_test.go: `err = orm1.CreateAllowedSenders(ctx, []common.Address{add1, add2})`
$DIR/core/services/gateway/handlers/functions/allowlist/orm_test.go: `err = orm2.CreateAllowedSenders(ctx, []common.Address{add3, add4})`
$DIR/core/services/gateway/handlers/functions/allowlist/orm_test.go: `results, err = orm2.GetAllowedSenders(ctx, 0, 10)`
$DIR/core/services/gateway/handlers/functions/allowlist/orm_test.go: `err = orm2.PurgeAllowedSenders(ctx)`
$DIR/core/services/gateway/handlers/functions/allowlist/orm_test.go: `results, err = orm2.GetAllowedSenders(ctx, 0, 10)`
$DIR/core/services/gateway/handlers/functions/allowlist/orm_test.go: `results, err = orm1.GetAllowedSenders(ctx, 0, 10)`
$DIR/core/services/gateway/handlers/functions/allowlist/orm_test.go: `t.Run("OK-create_ORM", func(t *testing.T) {
_, err := allowlist.NewORM(pgtest.NewSqlxDB(t), logger.TestLogger(t), testutils.NewAddress())
require.NoError(t, err)
})`
$DIR/core/services/gateway/handlers/functions/allowlist/orm_test.go: `t.Run("NOK-create_ORM_with_nil_fields", func(t *testing.T) {
_, err := allowlist.NewORM(nil, nil, common.Address{})
require.Error(t, err)
})`
$DIR/core/services/gateway/handlers/functions/allowlist/orm_test.go: `.Run("fetch first page", func(t *testing.T) {
ctx := testutils.Context(t)
orm, err := setupORM(t)
require.NoError(t, err)
storedAllowedSenders := seedAllowedSenders(t, orm, 2)
results, err := orm.GetAllowedSenders(ctx, 0, 1)
require.NoError(t, err)
require.Equal(t, 1, len(results), "incorrect results length")
require.Equal(t, storedAllowedSenders[0], results[0])
})`
$DIR/core/services/gateway/handlers/functions/allowlist/orm_test.go: `.Context(t)`
$DIR/core/services/gateway/handlers/functions/allowlist/orm_test.go: `.GetAllowedSenders(ctx, 0, 1)`
$DIR/core/services/gateway/handlers/functions/allowlist/orm_test.go: `.Context(t)`
$DIR/core/services/gateway/handlers/functions/allowlist/orm_test.go: `.GetAllowedSenders(ctx, 1, 5)`
$DIR/core/services/gateway/handlers/functions/allowlist/orm_test.go: `.Run("OK-create_an_allowed_sender", func(t *testing.T) {
ctx := testutils.Context(t)
orm, err := setupORM(t)
require.NoError(t, err)
expected := testutils.NewAddress()
err = orm.CreateAllowedSenders(ctx, []common.Address{expected})
require.NoError(t, err)
results, err := orm.GetAllowedSenders(ctx, 0, 1)
require.NoError(t, err)
require.Equal(t, 1, len(results), "incorrect results length")
require.Equal(t, expected, results[0])
})`
$DIR/core/services/gateway/handlers/functions/allowlist/orm_test.go: `.Context(t)`
$DIR/core/services/gateway/handlers/functions/allowlist/orm_test.go: `.NewAddress()`
$DIR/core/services/gateway/handlers/functions/allowlist/orm_test.go: `.CreateAllowedSenders(ctx, []common.Address{expected})`
$DIR/core/services/gateway/handlers/functions/allowlist/orm_test.go: `.GetAllowedSenders(ctx, 0, 1)`
$DIR/core/services/gateway/handlers/functions/allowlist/orm_test.go: `.Run("OK-create_an_existing_allowed_sender", func(t *testing.T) {
ctx := testutils.Context(t)
orm, err := setupORM(t)
require.NoError(t, err)
expected := testutils.NewAddress()
err = orm.CreateAllowedSenders(ctx, []common.Address{expected})
require.NoError(t, err)
err = orm.CreateAllowedSenders(ctx, []common.Address{expected})
require.NoError(t, err)
results, err := orm.GetAllowedSenders(ctx, 0, 5)
require.NoError(t, err)
require.Equal(t, 1, len(results), "incorrect results length")
require.Equal(t, expected, results[0])
})`
$DIR/core/services/gateway/handlers/functions/allowlist/orm_test.go: `.Context(t)`
$DIR/core/services/gateway/handlers/functions/allowlist/orm_test.go: `.NewAddress()`
$DIR/core/services/gateway/handlers/functions/allowlist/orm_test.go: `.CreateAllowedSenders(ctx, []common.Address{expected})`
$DIR/core/services/gateway/handlers/functions/allowlist/orm_test.go: `.CreateAllowedSenders(ctx, []common.Address{expected})`
$DIR/core/services/gateway/handlers/functions/allowlist/orm_test.go: `.GetAllowedSenders(ctx, 0, 5)`
$DIR/core/services/gateway/handlers/functions/allowlist/orm_test.go: `.Run("OK-create_multiple_allowed_senders_in_one_query", func(t *testing.T) {
ctx := testutils.Context(t)
orm, err := setupORM(t)
require.NoError(t, err)
expected := []common.Address{testutils.NewAddress(), testutils.NewAddress()}
err = orm.CreateAllowedSenders(ctx, expected)
require.NoError(t, err)
results, err := orm.GetAllowedSenders(ctx, 0, 2)
require.NoError(t, err)
require.Equal(t, 2, len(results), "incorrect results length")
require.Equal(t, expected[0], results[0])
require.Equal(t, expected[1], results[1])
})`
$DIR/core/services/gateway/handlers/functions/allowlist/orm_test.go: `.Context(t)`
$DIR/core/services/gateway/handlers/functions/allowlist/orm_test.go: `.NewAddress()`
$DIR/core/services/gateway/handlers/functions/allowlist/orm_test.go: `.NewAddress()`
$DIR/core/services/gateway/handlers/functions/allowlist/orm_test.go: `.CreateAllowedSenders(ctx, expected)`
$DIR/core/services/gateway/handlers/functions/allowlist/orm_test.go: `.GetAllowedSenders(ctx, 0, 2)`
$DIR/core/services/gateway/handlers/functions/allowlist/orm_test.go: `.Run("OK-create_multiple_allowed_senders_with_duplicates", func(t *testing.T) {
ctx := testutils.Context(t)
orm, err := setupORM(t)
require.NoError(t, err)
addr1 := testutils.NewAddress()
addr2 := testutils.NewAddress()
expected := []common.Address{addr1, addr2}
duplicatedAddressInput := []common.Address{addr1, addr1, addr1, addr2}
err = orm.CreateAllowedSenders(ctx, duplicatedAddressInput)
require.NoError(t, err)
results, err := orm.GetAllowedSenders(ctx, 0, 10)
require.NoError(t, err)
require.Equal(t, 2, len(results), "incorrect results length")
require.Equal(t, expected[0], results[0])
require.Equal(t, expected[1], results[1])
})`
$DIR/core/services/gateway/handlers/functions/allowlist/orm_test.go: `.Context(t)`
$DIR/core/services/gateway/handlers/functions/allowlist/orm_test.go: `.NewAddress()`
$DIR/core/services/gateway/handlers/functions/allowlist/orm_test.go: `.NewAddress()`
$DIR/core/services/gateway/handlers/functions/allowlist/orm_test.go: `.CreateAllowedSenders(ctx, duplicatedAddressInput)`
$DIR/core/services/gateway/handlers/functions/allowlist/orm_test.go: `.GetAllowedSenders(ctx, 0, 10)`
$DIR/core/services/gateway/handlers/functions/allowlist/orm_test.go: `.Context(t)`
$DIR/core/services/gateway/handlers/functions/allowlist/orm_test.go: `.CreateAllowedSenders(ctx, []common.Address{})`
$DIR/core/services/gateway/handlers/functions/allowlist/orm_test.go: `.Run("OK-delete_blocked_sender_from_allowed_list", func(t *testing.T) {
ctx := testutils.Context(t)
orm, err := setupORM(t)
require.NoError(t, err)
add1 := testutils.NewAddress()
add2 := testutils.NewAddress()
add3 := testutils.NewAddress()
err = orm.CreateAllowedSenders(ctx, []common.Address{add1, add2, add3})
require.NoError(t, err)
results, err := orm.GetAllowedSenders(ctx, 0, 10)
require.NoError(t, err)
require.Equal(t, 3, len(results), "incorrect results length")
require.Equal(t, add1, results[0])
err = orm.DeleteAllowedSenders(ctx, []common.Address{add1, add3})
require.NoError(t, err)
results, err = orm.GetAllowedSenders(ctx, 0, 10)
require.NoError(t, err)
require.Equal(t, 1, len(results), "incorrect results length")
require.Equal(t, add2, results[0])
})`
$DIR/core/services/gateway/handlers/functions/allowlist/orm_test.go: `.Context(t)`
$DIR/core/services/gateway/handlers/functions/allowlist/orm_test.go: `.NewAddress()`
$DIR/core/services/gateway/handlers/functions/allowlist/orm_test.go: `.NewAddress()`
$DIR/core/services/gateway/handlers/functions/allowlist/orm_test.go: `.NewAddress()`
$DIR/core/services/gateway/handlers/functions/allowlist/orm_test.go: `.CreateAllowedSenders(ctx, []common.Address{add1, add2, add3})`
$DIR/core/services/gateway/handlers/functions/allowlist/orm_test.go: `.GetAllowedSenders(ctx, 0, 10)`
$DIR/core/services/gateway/handlers/functions/allowlist/orm_test.go: `.DeleteAllowedSenders(ctx, []common.Address{add1, add3})`
$DIR/core/services/gateway/handlers/functions/allowlist/orm_test.go: `.GetAllowedSenders(ctx, 0, 10)`
$DIR/core/services/gateway/handlers/functions/allowlist/orm_test.go: `.Context(t)`
$DIR/core/services/gateway/handlers/functions/allowlist/orm_test.go: `.NewAddress()`
$DIR/core/services/gateway/handlers/functions/allowlist/orm_test.go: `.NewAddress()`
$DIR/core/services/gateway/handlers/functions/allowlist/orm_test.go: `.CreateAllowedSenders(ctx, []common.Address{add1, add2})`
$DIR/core/services/gateway/handlers/functions/allowlist/orm_test.go: `.GetAllowedSenders(ctx, 0, 10)`
$DIR/core/services/gateway/handlers/functions/allowlist/orm_test.go: `.NewAddress()`
$DIR/core/services/gateway/handlers/functions/allowlist/orm_test.go: `.DeleteAllowedSenders(ctx, []common.Address{add3})`
$DIR/core/services/gateway/handlers/functions/allowlist/orm_test.go: `.GetAllowedSenders(ctx, 0, 10)`
$DIR/core/services/gateway/handlers/functions/allowlist/orm_test.go: `.Run("OK-purge_allowed_list", func(t *testing.T) {
ctx := testutils.Context(t)
orm, err := setupORM(t)
require.NoError(t, err)
add1 := testutils.NewAddress()
add2 := testutils.NewAddress()
add3 := testutils.NewAddress()
err = orm.CreateAllowedSenders(ctx, []common.Address{add1, add2, add3})
require.NoError(t, err)
results, err := orm.GetAllowedSenders(ctx, 0, 10)
require.NoError(t, err)
require.Equal(t, 3, len(results), "incorrect results length")
require.Equal(t, add1, results[0])
err = orm.PurgeAllowedSenders(ctx)
require.NoError(t, err)
results, err = orm.GetAllowedSenders(ctx, 0, 10)
require.NoError(t, err)
require.Equal(t, 0, len(results), "incorrect results length")
})`
$DIR/core/services/gateway/handlers/functions/allowlist/orm_test.go: `.Context(t)`
$DIR/core/services/gateway/handlers/functions/allowlist/orm_test.go: `.NewAddress()`
$DIR/core/services/gateway/handlers/functions/allowlist/orm_test.go: `.NewAddress()`
$DIR/core/services/gateway/handlers/functions/allowlist/orm_test.go: `.NewAddress()`
$DIR/core/services/gateway/handlers/functions/allowlist/orm_test.go: `.CreateAllowedSenders(ctx, []common.Address{add1, add2, add3})`
$DIR/core/services/gateway/handlers/functions/allowlist/orm_test.go: `.GetAllowedSenders(ctx, 0, 10)`
$DIR/core/services/gateway/handlers/functions/allowlist/orm_test.go: `.PurgeAllowedSenders(ctx)`
$DIR/core/services/gateway/handlers/functions/allowlist/orm_test.go: `.GetAllowedSenders(ctx, 0, 10)`
$DIR/core/services/gateway/handlers/functions/allowlist/orm_test.go: `.Context(t)`
$DIR/core/services/gateway/handlers/functions/allowlist/orm_test.go: `.NewAddress()`
$DIR/core/services/gateway/handlers/functions/allowlist/orm_test.go: `.NewAddress()`
$DIR/core/services/gateway/handlers/functions/allowlist/orm_test.go: `.CreateAllowedSenders(ctx, []common.Address{add1, add2})`
$DIR/core/services/gateway/handlers/functions/allowlist/orm_test.go: `.GetAllowedSenders(ctx, 0, 10)`
$DIR/core/services/gateway/handlers/functions/allowlist/orm_test.go: `.NewAddress()`
$DIR/core/services/gateway/handlers/functions/allowlist/orm_test.go: `.NewAddress()`
$DIR/core/services/gateway/handlers/functions/allowlist/orm_test.go: `.CreateAllowedSenders(ctx, []common.Address{add3, add4})`
$DIR/core/services/gateway/handlers/functions/allowlist/orm_test.go: `.GetAllowedSenders(ctx, 0, 10)`
$DIR/core/services/gateway/handlers/functions/allowlist/orm_test.go: `.PurgeAllowedSenders(ctx)`
$DIR/core/services/gateway/handlers/functions/allowlist/orm_test.go: `.GetAllowedSenders(ctx, 0, 10)`
$DIR/core/services/gateway/handlers/functions/allowlist/orm_test.go: `.GetAllowedSenders(ctx, 0, 10)`
$DIR/core/services/gateway/handlers/functions/allowlist/orm_test.go: `.Run("OK-create_ORM", func(t *testing.T) {
_, err := allowlist.NewORM(pgtest.NewSqlxDB(t), logger.TestLogger(t), testutils.NewAddress())
require.NoError(t, err)
})`
$DIR/core/services/gateway/handlers/functions/allowlist/orm_test.go: `.NewORM(pgtest.NewSqlxDB(t), logger.TestLogger(t), testutils.NewAddress())`
$DIR/core/services/gateway/handlers/functions/allowlist/orm_test.go: `.NewSqlxDB(t)`
$DIR/core/services/gateway/handlers/functions/allowlist/orm_test.go: `.TestLogger(t)`
$DIR/core/services/gateway/handlers/functions/allowlist/orm_test.go: `.NewAddress()`
$DIR/core/services/gateway/handlers/functions/allowlist/orm_test.go: `.Run("NOK-create_ORM_with_nil_fields", func(t *testing.T) {
_, err := allowlist.NewORM(nil, nil, common.Address{})
require.Error(t, err)
})`
$DIR/core/services/gateway/handlers/functions/allowlist/orm_test.go: `.NewORM(nil, nil, common.Address{})`
$DIR/core/services/gateway/handlers/functions/allowlist/orm_test.go: `.NewORM(pgtest.NewSqlxDB(t), logger.TestLogger(t), common.Address{})`
$DIR/core/services/gateway/handlers/functions/allowlist/orm_test.go: `.NewSqlxDB(t)`
$DIR/core/services/gateway/handlers/functions/allowlist/orm_test.go: `.TestLogger(t)`
$DIR/core/services/gateway/handlers/functions/handler.functions_test.go: `err = handler.HandleUserMessage(testutils.Context(t), msg, nil)`
$DIR/core/services/gateway/handlers/functions/handler.functions_test.go: `t.Run(test.name, func(t *testing.T) {
nodes, user := gc.NewTestNodes(t, 4), gc.NewTestNodes(t, 1)[0]
handler, don, allowlist, subscriptions := newFunctionsHandlerForATestDON(t, nodes, time.Hour*24, user.Address)
userRequestMsg := newSignedMessage(t, "1234", "secrets_set", "don_id", user.PrivateKey)
callbachCh := make(chan handlers.UserCallbackPayload)
done := make(chan struct{})
go func() {
defer close(done)
// wait on a response from Gateway to the user
response := <-callbachCh
require.Equal(t, api.NoError, response.ErrCode)
require.Equal(t, userRequestMsg.Body.MessageId, response.Msg.Body.MessageId)
var payload functions.CombinedResponse
require.NoError(t, json.Unmarshal(response.Msg.Body.Payload, &payload))
require.Equal(t, test.expectedGatewayResult, payload.Success)
require.Equal(t, test.expectedNodeMessageCount, len(payload.NodeResponses))
}()
allowlist.On("Allow", common.HexToAddress(user.Address)).Return(true, nil)
subscriptions.On("GetMaxUserBalance", common.HexToAddress(user.Address)).Return(big.NewInt(1000), nil)
don.On("SendToNode", mock.Anything, mock.Anything, mock.Anything).Return(nil)
require.NoError(t, handler.HandleUserMessage(testutils.Context(t), &userRequestMsg, callbachCh))
sendNodeReponses(t, handler, userRequestMsg, nodes, test.nodeResults)
<-done
})`
$DIR/core/services/gateway/handlers/functions/handler.functions_test.go: `allowlist.On("Allow", common.HexToAddress(user.Address)).Return(true, nil)`
$DIR/core/services/gateway/handlers/functions/handler.functions_test.go: `subscriptions.On("GetMaxUserBalance", common.HexToAddress(user.Address)).Return(big.NewInt(1000), nil)`
$DIR/core/services/gateway/handlers/functions/handler.functions_test.go: `don.On("SendToNode", mock.Anything, mock.Anything, mock.Anything).Return(nil)`
$DIR/core/services/gateway/handlers/functions/handler.functions_test.go: `sendNodeReponses(t, handler, userRequestMsg, nodes, test.nodeResults)`
$DIR/core/services/gateway/handlers/functions/handler.functions_test.go: `<-done`
$DIR/core/services/gateway/handlers/functions/handler.functions_test.go: `t.Run(test.name, func(t *testing.T) {
nodes, user := gc.NewTestNodes(t, 4), gc.NewTestNodes(t, 1)[0]
handler, don, allowlist, _ := newFunctionsHandlerForATestDON(t, nodes, time.Hour*24, user.Address)
userRequestMsg := newSignedMessage(t, "1234", "heartbeat", "don_id", user.PrivateKey)
callbachCh := make(chan handlers.UserCallbackPayload)
done := make(chan struct{})
go func() {
defer close(done)
// wait on a response from Gateway to the user
response := <-callbachCh
require.Equal(t, api.NoError, response.ErrCode)
require.Equal(t, userRequestMsg.Body.MessageId, response.Msg.Body.MessageId)
var payload functions.CombinedResponse
require.NoError(t, json.Unmarshal(response.Msg.Body.Payload, &payload))
require.Equal(t, test.expectedGatewayResult, payload.Success)
require.Equal(t, test.expectedNodeMessageCount, len(payload.NodeResponses))
}()
allowlist.On("Allow", common.HexToAddress(user.Address)).Return(true, nil)
don.On("SendToNode", mock.Anything, mock.Anything, mock.Anything).Return(nil)
require.NoError(t, handler.HandleUserMessage(testutils.Context(t), &userRequestMsg, callbachCh))
sendNodeReponses(t, handler, userRequestMsg, nodes, test.nodeResults)
<-done
})`
$DIR/core/services/gateway/handlers/functions/handler.functions_test.go: `allowlist.On("Allow", common.HexToAddress(user.Address)).Return(true, nil)`
$DIR/core/services/gateway/handlers/functions/handler.functions_test.go: `don.On("SendToNode", mock.Anything, mock.Anything, mock.Anything).Return(nil)`
$DIR/core/services/gateway/handlers/functions/handler.functions_test.go: `sendNodeReponses(t, handler, userRequestMsg, nodes, test.nodeResults)`
$DIR/core/services/gateway/handlers/functions/handler.functions_test.go: `<-done`
$DIR/core/services/gateway/handlers/functions/handler.functions_test.go: `allowlist.On("Allow", common.HexToAddress(user.Address)).Return(true, nil)`
$DIR/core/services/gateway/handlers/functions/handler.functions_test.go: `allowlist.On("Allow", common.HexToAddress(user.Address)).Return(true, nil)`
$DIR/core/services/gateway/handlers/functions/handler.functions_test.go: `subscriptions.On("GetMaxUserBalance", common.HexToAddress(user.Address)).Return(big.NewInt(1000), nil)`
$DIR/core/services/gateway/handlers/functions/handler.functions_test.go: `don.On("SendToNode", mock.Anything, mock.Anything, mock.Anything).Return(nil)`
$DIR/core/services/gateway/handlers/functions/handler.functions_test.go: `.NewFunctionsHandlerFromConfig(json.RawMessage("{}"), &config.DONConfig{}, nil, nil, nil, logger.TestLogger(t))`
$DIR/core/services/gateway/handlers/functions/handler.functions_test.go: `.RawMessage("{}")`
$DIR/core/services/gateway/handlers/functions/handler.functions_test.go: `.TestLogger(t)`
$DIR/core/services/gateway/handlers/functions/handler.functions_test.go: `.HandleUserMessage(testutils.Context(t), msg, nil)`
$DIR/core/services/gateway/handlers/functions/handler.functions_test.go: `.Context(t)`
$DIR/core/services/gateway/handlers/functions/handler.functions_test.go: `.NewFunctionsHandlerFromConfig(json.RawMessage("{}"), &config.DONConfig{}, nil, nil, nil, logger.TestLogger(t))`
$DIR/core/services/gateway/handlers/functions/handler.functions_test.go: `.RawMessage("{}")`
$DIR/core/services/gateway/handlers/functions/handler.functions_test.go: `.TestLogger(t)`
$DIR/core/services/gateway/handlers/functions/handler.functions_test.go: `.Run(test.name, func(t *testing.T) {
nodes, user := gc.NewTestNodes(t, 4), gc.NewTestNodes(t, 1)[0]
handler, don, allowlist, subscriptions := newFunctionsHandlerForATestDON(t, nodes, time.Hour*24, user.Address)
userRequestMsg := newSignedMessage(t, "1234", "secrets_set", "don_id", user.PrivateKey)
callbachCh := make(chan handlers.UserCallbackPayload)
done := make(chan struct{})
go func() {
defer close(done)
// wait on a response from Gateway to the user
response := <-callbachCh
require.Equal(t, api.NoError, response.ErrCode)
require.Equal(t, userRequestMsg.Body.MessageId, response.Msg.Body.MessageId)
var payload functions.CombinedResponse
require.NoError(t, json.Unmarshal(response.Msg.Body.Payload, &payload))
require.Equal(t, test.expectedGatewayResult, payload.Success)
require.Equal(t, test.expectedNodeMessageCount, len(payload.NodeResponses))
}()
allowlist.On("Allow", common.HexToAddress(user.Address)).Return(true, nil)
subscriptions.On("GetMaxUserBalance", common.HexToAddress(user.Address)).Return(big.NewInt(1000), nil)
don.On("SendToNode", mock.Anything, mock.Anything, mock.Anything).Return(nil)
require.NoError(t, handler.HandleUserMessage(testutils.Context(t), &userRequestMsg, callbachCh))
sendNodeReponses(t, handler, userRequestMsg, nodes, test.nodeResults)
<-done
})`
$DIR/core/services/gateway/handlers/functions/handler.functions_test.go: `.NewTestNodes(t, 4)`
$DIR/core/services/gateway/handlers/functions/handler.functions_test.go: `.NewTestNodes(t, 1)`
$DIR/core/services/gateway/handlers/functions/handler.functions_test.go: `.On("Allow", common.HexToAddress(user.Address))`
$DIR/core/services/gateway/handlers/functions/handler.functions_test.go: `.HexToAddress(user.Address)`
$DIR/core/services/gateway/handlers/functions/handler.functions_test.go: `.Return(true, nil)`
$DIR/core/services/gateway/handlers/functions/handler.functions_test.go: `.On("GetMaxUserBalance", common.HexToAddress(user.Address))`
$DIR/core/services/gateway/handlers/functions/handler.functions_test.go: `.HexToAddress(user.Address)`
$DIR/core/services/gateway/handlers/functions/handler.functions_test.go: `.Return(big.NewInt(1000), nil)`
$DIR/core/services/gateway/handlers/functions/handler.functions_test.go: `.NewInt(1000)`
$DIR/core/services/gateway/handlers/functions/handler.functions_test.go: `.On("SendToNode", mock.Anything, mock.Anything, mock.Anything)`
$DIR/core/services/gateway/handlers/functions/handler.functions_test.go: `.Return(nil)`
$DIR/core/services/gateway/handlers/functions/handler.functions_test.go: `.Run(test.name, func(t *testing.T) {
nodes, user := gc.NewTestNodes(t, 4), gc.NewTestNodes(t, 1)[0]
handler, don, allowlist, _ := newFunctionsHandlerForATestDON(t, nodes, time.Hour*24, user.Address)
userRequestMsg := newSignedMessage(t, "1234", "heartbeat", "don_id", user.PrivateKey)
callbachCh := make(chan handlers.UserCallbackPayload)
done := make(chan struct{})
go func() {
defer close(done)
// wait on a response from Gateway to the user
response := <-callbachCh
require.Equal(t, api.NoError, response.ErrCode)
require.Equal(t, userRequestMsg.Body.MessageId, response.Msg.Body.MessageId)
var payload functions.CombinedResponse
require.NoError(t, json.Unmarshal(response.Msg.Body.Payload, &payload))
require.Equal(t, test.expectedGatewayResult, payload.Success)
require.Equal(t, test.expectedNodeMessageCount, len(payload.NodeResponses))
}()
allowlist.On("Allow", common.HexToAddress(user.Address)).Return(true, nil)
don.On("SendToNode", mock.Anything, mock.Anything, mock.Anything).Return(nil)
require.NoError(t, handler.HandleUserMessage(testutils.Context(t), &userRequestMsg, callbachCh))
sendNodeReponses(t, handler, userRequestMsg, nodes, test.nodeResults)
<-done
})`
$DIR/core/services/gateway/handlers/functions/handler.functions_test.go: `.NewTestNodes(t, 4)`
$DIR/core/services/gateway/handlers/functions/handler.functions_test.go: `.NewTestNodes(t, 1)`
$DIR/core/services/gateway/handlers/functions/handler.functions_test.go: `.On("Allow", common.HexToAddress(user.Address))`
$DIR/core/services/gateway/handlers/functions/handler.functions_test.go: `.HexToAddress(user.Address)`
$DIR/core/services/gateway/handlers/functions/handler.functions_test.go: `.Return(true, nil)`
$DIR/core/services/gateway/handlers/functions/handler.functions_test.go: `.On("SendToNode", mock.Anything, mock.Anything, mock.Anything)`
$DIR/core/services/gateway/handlers/functions/handler.functions_test.go: `.Return(nil)`
$DIR/core/services/gateway/handlers/functions/handler.functions_test.go: `.NewTestNodes(t, 4)`
$DIR/core/services/gateway/handlers/functions/handler.functions_test.go: `.NewTestNodes(t, 1)`
$DIR/core/services/gateway/handlers/functions/handler.functions_test.go: `.On("Allow", common.HexToAddress(user.Address))`
$DIR/core/services/gateway/handlers/functions/handler.functions_test.go: `.HexToAddress(user.Address)`
$DIR/core/services/gateway/handlers/functions/handler.functions_test.go: `.Return(true, nil)`
$DIR/core/services/gateway/handlers/functions/handler.functions_test.go: `.HandleUserMessage(testutils.Context(t), &userRequestMsg, make(chan handlers.UserCallbackPayload))`
$DIR/core/services/gateway/handlers/functions/handler.functions_test.go: `.Context(t)`
$DIR/core/services/gateway/handlers/functions/handler.functions_test.go: `.NewTestNodes(t, 4)`
$DIR/core/services/gateway/handlers/functions/handler.functions_test.go: `.NewTestNodes(t, 1)`
$DIR/core/services/gateway/handlers/functions/handler.functions_test.go: `.On("Allow", common.HexToAddress(user.Address))`
$DIR/core/services/gateway/handlers/functions/handler.functions_test.go: `.HexToAddress(user.Address)`
$DIR/core/services/gateway/handlers/functions/handler.functions_test.go: `.Return(true, nil)`
$DIR/core/services/gateway/handlers/functions/handler.functions_test.go: `.On("GetMaxUserBalance", common.HexToAddress(user.Address))`
$DIR/core/services/gateway/handlers/functions/handler.functions_test.go: `.HexToAddress(user.Address)`
$DIR/core/services/gateway/handlers/functions/handler.functions_test.go: `.Return(big.NewInt(1000), nil)`
$DIR/core/services/gateway/handlers/functions/handler.functions_test.go: `.NewInt(1000)`
$DIR/core/services/gateway/handlers/functions/handler.functions_test.go: `.On("SendToNode", mock.Anything, mock.Anything, mock.Anything)`
$DIR/core/services/gateway/handlers/functions/handler.functions_test.go: `.Return(nil)`
$DIR/core/services/gateway/handlers/functions/subscriptions/orm_test.go: `t.Run("fetch first page", func(t *testing.T) {
ctx := testutils.Context(t)
orm, err := setupORM(t)
require.NoError(t, err)
storedSubscriptions := seedSubscriptions(t, orm, 2)
results, err := orm.GetSubscriptions(ctx, 0, 1)
require.NoError(t, err)
require.Equal(t, 1, len(results), "incorrect results length")
require.Equal(t, storedSubscriptions[1], results[0])
})`
$DIR/core/services/gateway/handlers/functions/subscriptions/orm_test.go: `t.Run("create a subscription", func(t *testing.T) {
ctx := testutils.Context(t)
orm, err := setupORM(t)
require.NoError(t, err)
expected := subscriptions.StoredSubscription{
SubscriptionID: uint64(1),
IFunctionsSubscriptionsSubscription: functions_router.IFunctionsSubscriptionsSubscription{
Balance: big.NewInt(10),
Owner: testutils.NewAddress(),
BlockedBalance: big.NewInt(20),
ProposedOwner: common.Address{},
Consumers: []common.Address{testutils.NewAddress()},
Flags: defaultFlags,
},
}
err = orm.UpsertSubscription(ctx, expected)
require.NoError(t, err)
results, err := orm.GetSubscriptions(ctx, 0, 1)
require.NoError(t, err)
require.Equal(t, 1, len(results), "incorrect results length")
require.Equal(t, expected, results[0])
})`
$DIR/core/services/gateway/handlers/functions/subscriptions/orm_test.go: `err = orm.UpsertSubscription(ctx, expected)`
$DIR/core/services/gateway/handlers/functions/subscriptions/orm_test.go: `t.Run("update a subscription", func(t *testing.T) {
ctx := testutils.Context(t)
orm, err := setupORM(t)
require.NoError(t, err)
expectedUpdated := subscriptions.StoredSubscription{
SubscriptionID: uint64(1),
IFunctionsSubscriptionsSubscription: functions_router.IFunctionsSubscriptionsSubscription{
Balance: big.NewInt(10),
Owner: testutils.NewAddress(),
BlockedBalance: big.NewInt(20),
ProposedOwner: common.Address{},
Consumers: []common.Address{},
Flags: defaultFlags,
},
}
err = orm.UpsertSubscription(ctx, expectedUpdated)
require.NoError(t, err)
expectedNotUpdated := subscriptions.StoredSubscription{
SubscriptionID: uint64(2),
IFunctionsSubscriptionsSubscription: functions_router.IFunctionsSubscriptionsSubscription{
Balance: big.NewInt(10),
Owner: testutils.NewAddress(),
BlockedBalance: big.NewInt(20),
ProposedOwner: common.Address{},
Consumers: []common.Address{},
Flags: defaultFlags,
},
}
err = orm.UpsertSubscription(ctx, expectedNotUpdated)
require.NoError(t, err)
// update the balance value
expectedUpdated.Balance = big.NewInt(20)
err = orm.UpsertSubscription(ctx, expectedUpdated)
require.NoError(t, err)
results, err := orm.GetSubscriptions(ctx, 0, 5)
require.NoError(t, err)
require.Equal(t, 2, len(results), "incorrect results length")
require.Equal(t, expectedNotUpdated, results[1])
require.Equal(t, expectedUpdated, results[0])
})`
$DIR/core/services/gateway/handlers/functions/subscriptions/orm_test.go: `err = orm.UpsertSubscription(ctx, expectedUpdated)`
$DIR/core/services/gateway/handlers/functions/subscriptions/orm_test.go: `err = orm.UpsertSubscription(ctx, expectedNotUpdated)`
$DIR/core/services/gateway/handlers/functions/subscriptions/orm_test.go: `expectedUpdated.Balance = big.NewInt(20)`
$DIR/core/services/gateway/handlers/functions/subscriptions/orm_test.go: `err = orm.UpsertSubscription(ctx, expectedUpdated)`
$DIR/core/services/gateway/handlers/functions/subscriptions/orm_test.go: `t.Run("update a deleted subscription", func(t *testing.T) {
ctx := testutils.Context(t)
orm, err := setupORM(t)
require.NoError(t, err)
subscription := subscriptions.StoredSubscription{
SubscriptionID: uint64(1),
IFunctionsSubscriptionsSubscription: functions_router.IFunctionsSubscriptionsSubscription{
Balance: big.NewInt(10),
Owner: testutils.NewAddress(),
BlockedBalance: big.NewInt(20),
ProposedOwner: common.Address{},
Consumers: []common.Address{},
Flags: defaultFlags,
},
}
err = orm.UpsertSubscription(ctx, subscription)
require.NoError(t, err)
// empty subscription
subscription.IFunctionsSubscriptionsSubscription = functions_router.IFunctionsSubscriptionsSubscription{
Balance: big.NewInt(0),
Owner: common.Address{},
BlockedBalance: big.NewInt(0),
ProposedOwner: common.Address{},
Consumers: []common.Address{},
Flags: [32]byte{},
}
err = orm.UpsertSubscription(ctx, subscription)
require.NoError(t, err)
results, err := orm.GetSubscriptions(ctx, 0, 5)
require.NoError(t, err)
require.Equal(t, 1, len(results), "incorrect results length")
require.Equal(t, subscription, results[0])
})`
$DIR/core/services/gateway/handlers/functions/subscriptions/orm_test.go: `err = orm.UpsertSubscription(ctx, subscription)`
$DIR/core/services/gateway/handlers/functions/subscriptions/orm_test.go: `subscription.IFunctionsSubscriptionsSubscription = functions_router.IFunctionsSubscriptionsSubscription{
Balance: big.NewInt(0),
Owner: common.Address{},
BlockedBalance: big.NewInt(0),
ProposedOwner: common.Address{},
Consumers: []common.Address{},
Flags: [32]byte{},
}`
$DIR/core/services/gateway/handlers/functions/subscriptions/orm_test.go: `err = orm.UpsertSubscription(ctx, subscription)`
$DIR/core/services/gateway/handlers/functions/subscriptions/orm_test.go: `err = orm1.UpsertSubscription(ctx, subscription)`
$DIR/core/services/gateway/handlers/functions/subscriptions/orm_test.go: `subscription.Balance = assets.Ether(12).ToInt()`
$DIR/core/services/gateway/handlers/functions/subscriptions/orm_test.go: `err = orm1.UpsertSubscription(ctx, subscription)`
$DIR/core/services/gateway/handlers/functions/subscriptions/orm_test.go: `err = orm2.UpsertSubscription(ctx, subscription)`
$DIR/core/services/gateway/handlers/functions/subscriptions/orm_test.go: `results, err = orm1.GetSubscriptions(ctx, 0, 10)`
$DIR/core/services/gateway/handlers/functions/subscriptions/orm_test.go: `results, err = orm2.GetSubscriptions(ctx, 0, 10)`
$DIR/core/services/gateway/handlers/functions/subscriptions/orm_test.go: `t.Run("OK-create_ORM", func(t *testing.T) {
_, err := subscriptions.NewORM(pgtest.NewSqlxDB(t), logger.TestLogger(t), testutils.NewAddress())
require.NoError(t, err)
})`
$DIR/core/services/gateway/handlers/functions/subscriptions/orm_test.go: `t.Run("NOK-create_ORM_with_nil_fields", func(t *testing.T) {
_, err := subscriptions.NewORM(nil, nil, common.Address{})
require.Error(t, err)
})`
$DIR/core/services/gateway/handlers/functions/subscriptions/orm_test.go: `.Run("fetch first page", func(t *testing.T) {
ctx := testutils.Context(t)
orm, err := setupORM(t)
require.NoError(t, err)
storedSubscriptions := seedSubscriptions(t, orm, 2)
results, err := orm.GetSubscriptions(ctx, 0, 1)
require.NoError(t, err)
require.Equal(t, 1, len(results), "incorrect results length")
require.Equal(t, storedSubscriptions[1], results[0])
})`
$DIR/core/services/gateway/handlers/functions/subscriptions/orm_test.go: `.Context(t)`
$DIR/core/services/gateway/handlers/functions/subscriptions/orm_test.go: `.GetSubscriptions(ctx, 0, 1)`
$DIR/core/services/gateway/handlers/functions/subscriptions/orm_test.go: `.Context(t)`
$DIR/core/services/gateway/handlers/functions/subscriptions/orm_test.go: `.GetSubscriptions(ctx, 1, 5)`
$DIR/core/services/gateway/handlers/functions/subscriptions/orm_test.go: `.Run("create a subscription", func(t *testing.T) {
ctx := testutils.Context(t)
orm, err := setupORM(t)
require.NoError(t, err)
expected := subscriptions.StoredSubscription{
SubscriptionID: uint64(1),
IFunctionsSubscriptionsSubscription: functions_router.IFunctionsSubscriptionsSubscription{
Balance: big.NewInt(10),
Owner: testutils.NewAddress(),
BlockedBalance: big.NewInt(20),
ProposedOwner: common.Address{},
Consumers: []common.Address{testutils.NewAddress()},
Flags: defaultFlags,
},
}
err = orm.UpsertSubscription(ctx, expected)
require.NoError(t, err)
results, err := orm.GetSubscriptions(ctx, 0, 1)
require.NoError(t, err)
require.Equal(t, 1, len(results), "incorrect results length")
require.Equal(t, expected, results[0])
})`
$DIR/core/services/gateway/handlers/functions/subscriptions/orm_test.go: `.Context(t)`
$DIR/core/services/gateway/handlers/functions/subscriptions/orm_test.go: `.NewInt(10)`
$DIR/core/services/gateway/handlers/functions/subscriptions/orm_test.go: `.NewAddress()`
$DIR/core/services/gateway/handlers/functions/subscriptions/orm_test.go: `.NewInt(20)`
$DIR/core/services/gateway/handlers/functions/subscriptions/orm_test.go: `.NewAddress()`
$DIR/core/services/gateway/handlers/functions/subscriptions/orm_test.go: `.UpsertSubscription(ctx, expected)`
$DIR/core/services/gateway/handlers/functions/subscriptions/orm_test.go: `.GetSubscriptions(ctx, 0, 1)`
$DIR/core/services/gateway/handlers/functions/subscriptions/orm_test.go: `.Run("update a subscription", func(t *testing.T) {
ctx := testutils.Context(t)
orm, err := setupORM(t)
require.NoError(t, err)
expectedUpdated := subscriptions.StoredSubscription{
SubscriptionID: uint64(1),
IFunctionsSubscriptionsSubscription: functions_router.IFunctionsSubscriptionsSubscription{
Balance: big.NewInt(10),
Owner: testutils.NewAddress(),
BlockedBalance: big.NewInt(20),
ProposedOwner: common.Address{},
Consumers: []common.Address{},
Flags: defaultFlags,
},
}
err = orm.UpsertSubscription(ctx, expectedUpdated)
require.NoError(t, err)
expectedNotUpdated := subscriptions.StoredSubscription{
SubscriptionID: uint64(2),
IFunctionsSubscriptionsSubscription: functions_router.IFunctionsSubscriptionsSubscription{
Balance: big.NewInt(10),
Owner: testutils.NewAddress(),
BlockedBalance: big.NewInt(20),
ProposedOwner: common.Address{},
Consumers: []common.Address{},
Flags: defaultFlags,
},
}
err = orm.UpsertSubscription(ctx, expectedNotUpdated)
require.NoError(t, err)
// update the balance value
expectedUpdated.Balance = big.NewInt(20)
err = orm.UpsertSubscription(ctx, expectedUpdated)
require.NoError(t, err)
results, err := orm.GetSubscriptions(ctx, 0, 5)
require.NoError(t, err)
require.Equal(t, 2, len(results), "incorrect results length")
require.Equal(t, expectedNotUpdated, results[1])
require.Equal(t, expectedUpdated, results[0])
})`
$DIR/core/services/gateway/handlers/functions/subscriptions/orm_test.go: `.Context(t)`
$DIR/core/services/gateway/handlers/functions/subscriptions/orm_test.go: `.NewInt(10)`
$DIR/core/services/gateway/handlers/functions/subscriptions/orm_test.go: `.NewAddress()`
$DIR/core/services/gateway/handlers/functions/subscriptions/orm_test.go: `.NewInt(20)`
$DIR/core/services/gateway/handlers/functions/subscriptions/orm_test.go: `.UpsertSubscription(ctx, expectedUpdated)`
$DIR/core/services/gateway/handlers/functions/subscriptions/orm_test.go: `.NewInt(10)`
$DIR/core/services/gateway/handlers/functions/subscriptions/orm_test.go: `.NewAddress()`
$DIR/core/services/gateway/handlers/functions/subscriptions/orm_test.go: `.NewInt(20)`
$DIR/core/services/gateway/handlers/functions/subscriptions/orm_test.go: `.UpsertSubscription(ctx, expectedNotUpdated)`
$DIR/core/services/gateway/handlers/functions/subscriptions/orm_test.go: `.NewInt(20)`
$DIR/core/services/gateway/handlers/functions/subscriptions/orm_test.go: `.UpsertSubscription(ctx, expectedUpdated)`
$DIR/core/services/gateway/handlers/functions/subscriptions/orm_test.go: `.GetSubscriptions(ctx, 0, 5)`
$DIR/core/services/gateway/handlers/functions/subscriptions/orm_test.go: `.Run("update a deleted subscription", func(t *testing.T) {
ctx := testutils.Context(t)
orm, err := setupORM(t)
require.NoError(t, err)
subscription := subscriptions.StoredSubscription{
SubscriptionID: uint64(1),
IFunctionsSubscriptionsSubscription: functions_router.IFunctionsSubscriptionsSubscription{
Balance: big.NewInt(10),
Owner: testutils.NewAddress(),
BlockedBalance: big.NewInt(20),
ProposedOwner: common.Address{},
Consumers: []common.Address{},
Flags: defaultFlags,
},
}
err = orm.UpsertSubscription(ctx, subscription)
require.NoError(t, err)
// empty subscription
subscription.IFunctionsSubscriptionsSubscription = functions_router.IFunctionsSubscriptionsSubscription{
Balance: big.NewInt(0),
Owner: common.Address{},
BlockedBalance: big.NewInt(0),
ProposedOwner: common.Address{},
Consumers: []common.Address{},
Flags: [32]byte{},
}
err = orm.UpsertSubscription(ctx, subscription)
require.NoError(t, err)
results, err := orm.GetSubscriptions(ctx, 0, 5)
require.NoError(t, err)
require.Equal(t, 1, len(results), "incorrect results length")
require.Equal(t, subscription, results[0])
})`
$DIR/core/services/gateway/handlers/functions/subscriptions/orm_test.go: `.Context(t)`
$DIR/core/services/gateway/handlers/functions/subscriptions/orm_test.go: `.NewInt(10)`
$DIR/core/services/gateway/handlers/functions/subscriptions/orm_test.go: `.NewAddress()`
$DIR/core/services/gateway/handlers/functions/subscriptions/orm_test.go: `.NewInt(20)`
$DIR/core/services/gateway/handlers/functions/subscriptions/orm_test.go: `.UpsertSubscription(ctx, subscription)`
$DIR/core/services/gateway/handlers/functions/subscriptions/orm_test.go: `.NewInt(0)`
$DIR/core/services/gateway/handlers/functions/subscriptions/orm_test.go: `.NewInt(0)`
$DIR/core/services/gateway/handlers/functions/subscriptions/orm_test.go: `.UpsertSubscription(ctx, subscription)`
$DIR/core/services/gateway/handlers/functions/subscriptions/orm_test.go: `.GetSubscriptions(ctx, 0, 5)`
$DIR/core/services/gateway/handlers/functions/subscriptions/orm_test.go: `.Context(t)`
$DIR/core/services/gateway/handlers/functions/subscriptions/orm_test.go: `.NewSqlxDB(t)`
$DIR/core/services/gateway/handlers/functions/subscriptions/orm_test.go: `.TestLogger(t)`
$DIR/core/services/gateway/handlers/functions/subscriptions/orm_test.go: `.NewORM(db, lggr, testutils.NewAddress())`
$DIR/core/services/gateway/handlers/functions/subscriptions/orm_test.go: `.NewAddress()`
$DIR/core/services/gateway/handlers/functions/subscriptions/orm_test.go: `.NewORM(db, lggr, testutils.NewAddress())`
$DIR/core/services/gateway/handlers/functions/subscriptions/orm_test.go: `.NewAddress()`
$DIR/core/services/gateway/handlers/functions/subscriptions/orm_test.go: `.Ether(10)`
$DIR/core/services/gateway/handlers/functions/subscriptions/orm_test.go: `.ToInt()`
$DIR/core/services/gateway/handlers/functions/subscriptions/orm_test.go: `.NewAddress()`
$DIR/core/services/gateway/handlers/functions/subscriptions/orm_test.go: `.Ether(20)`
$DIR/core/services/gateway/handlers/functions/subscriptions/orm_test.go: `.ToInt()`
$DIR/core/services/gateway/handlers/functions/subscriptions/orm_test.go: `.UpsertSubscription(ctx, subscription)`
$DIR/core/services/gateway/handlers/functions/subscriptions/orm_test.go: `.Ether(12)`
$DIR/core/services/gateway/handlers/functions/subscriptions/orm_test.go: `.ToInt()`
$DIR/core/services/gateway/handlers/functions/subscriptions/orm_test.go: `.UpsertSubscription(ctx, subscription)`
$DIR/core/services/gateway/handlers/functions/subscriptions/orm_test.go: `.GetSubscriptions(ctx, 0, 10)`
$DIR/core/services/gateway/handlers/functions/subscriptions/orm_test.go: `.UpsertSubscription(ctx, subscription)`
$DIR/core/services/gateway/handlers/functions/subscriptions/orm_test.go: `.GetSubscriptions(ctx, 0, 10)`
$DIR/core/services/gateway/handlers/functions/subscriptions/orm_test.go: `.GetSubscriptions(ctx, 0, 10)`
$DIR/core/services/gateway/handlers/functions/subscriptions/orm_test.go: `.Run("OK-create_ORM", func(t *testing.T) {
_, err := subscriptions.NewORM(pgtest.NewSqlxDB(t), logger.TestLogger(t), testutils.NewAddress())
require.NoError(t, err)
})`
$DIR/core/services/gateway/handlers/functions/subscriptions/orm_test.go: `.NewORM(pgtest.NewSqlxDB(t), logger.TestLogger(t), testutils.NewAddress())`
$DIR/core/services/gateway/handlers/functions/subscriptions/orm_test.go: `.NewSqlxDB(t)`
$DIR/core/services/gateway/handlers/functions/subscriptions/orm_test.go: `.TestLogger(t)`
$DIR/core/services/gateway/handlers/functions/subscriptions/orm_test.go: `.NewAddress()`
$DIR/core/services/gateway/handlers/functions/subscriptions/orm_test.go: `.Run("NOK-create_ORM_with_nil_fields", func(t *testing.T) {
_, err := subscriptions.NewORM(nil, nil, common.Address{})
require.Error(t, err)
})`
$DIR/core/services/gateway/handlers/functions/subscriptions/orm_test.go: `.NewORM(nil, nil, common.Address{})`
$DIR/core/services/gateway/handlers/functions/subscriptions/orm_test.go: `.NewORM(pgtest.NewSqlxDB(t), logger.TestLogger(t), common.Address{})`
$DIR/core/services/gateway/handlers/functions/subscriptions/orm_test.go: `.NewSqlxDB(t)`
$DIR/core/services/gateway/handlers/functions/subscriptions/orm_test.go: `.TestLogger(t)`
$DIR/core/services/gateway/handlers/functions/subscriptions/subscriptions_test.go: `client.On("LatestBlockHeight", mock.Anything).Return(big.NewInt(42), nil)`
$DIR/core/services/gateway/handlers/functions/subscriptions/subscriptions_test.go: `client.On("CallContract", mock.Anything, ethereum.CallMsg{ // getSubscriptionCount
To: &common.Address{},
Data: hexutil.MustDecode("0x66419970"),
}, mock.Anything).Return(getSubscriptionCount, nil)`
$DIR/core/services/gateway/handlers/functions/subscriptions/subscriptions_test.go: `client.On("CallContract", mock.Anything, ethereum.CallMsg{ // GetSubscriptionsInRange
To: &common.Address{},
Data: hexutil.MustDecode("0xec2454e500000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000003"),
}, mock.Anything).Return(getSubscriptionsInRange, nil)`
$DIR/core/services/gateway/handlers/functions/subscriptions/subscriptions_test.go: `orm.On("GetSubscriptions", mock.Anything, uint(0), uint(100)).Return([]subscriptions.StoredSubscription{}, nil)`
$DIR/core/services/gateway/handlers/functions/subscriptions/subscriptions_test.go: `orm.On("UpsertSubscription", mock.Anything, mock.Anything).Return(nil)`
$DIR/core/services/gateway/handlers/functions/subscriptions/subscriptions_test.go: `err = subscriptions.Start(ctx)`
$DIR/core/services/gateway/handlers/functions/subscriptions/subscriptions_test.go: `t.Cleanup(func() {
assert.NoError(t, subscriptions.Close())
})`
$DIR/core/services/gateway/handlers/functions/subscriptions/subscriptions_test.go: `client.On("LatestBlockHeight", mock.Anything).Return(big.NewInt(42), nil)`
$DIR/core/services/gateway/handlers/functions/subscriptions/subscriptions_test.go: `client.On("CallContract", mock.Anything, ethereum.CallMsg{ // getSubscriptionCount
To: &common.Address{},
Data: hexutil.MustDecode("0x66419970"),
}, mock.Anything).Run(func(args mock.Arguments) {
currentCycle.Add(1)
}).Return(getSubscriptionCount, nil)`
$DIR/core/services/gateway/handlers/functions/subscriptions/subscriptions_test.go: `currentCycle.Add(1)`
$DIR/core/services/gateway/handlers/functions/subscriptions/subscriptions_test.go: `client.On("CallContract", mock.Anything, ethereum.CallMsg{ // GetSubscriptionsInRange(1,3)
To: &common.Address{},
Data: hexutil.MustDecode("0xec2454e500000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000003"),
}, mock.Anything).Return(getSubscriptionsInRange, nil)`
$DIR/core/services/gateway/handlers/functions/subscriptions/subscriptions_test.go: `client.On("CallContract", mock.Anything, ethereum.CallMsg{ // GetSubscriptionsInRange(4,6)
To: &common.Address{},
Data: hexutil.MustDecode("0xec2454e500000000000000000000000000000000000000000000000000000000000000040000000000000000000000000000000000000000000000000000000000000006"),
}, mock.Anything).Return(getSubscriptionsInRange, nil)`
$DIR/core/services/gateway/handlers/functions/subscriptions/subscriptions_test.go: `orm.On("GetSubscriptions", mock.Anything, uint(0), uint(100)).Return([]subscriptions.StoredSubscription{}, nil)`
$DIR/core/services/gateway/handlers/functions/subscriptions/subscriptions_test.go: `orm.On("UpsertSubscription", mock.Anything, mock.Anything).Return(nil)`
$DIR/core/services/gateway/handlers/functions/subscriptions/subscriptions_test.go: `err = subscriptions.Start(ctx)`
$DIR/core/services/gateway/handlers/functions/subscriptions/subscriptions_test.go: `t.Cleanup(func() {
assert.NoError(t, subscriptions.Close())
})`
$DIR/core/services/gateway/handlers/functions/subscriptions/subscriptions_test.go: `client.On("LatestBlockHeight", mock.Anything).Return(big.NewInt(42), nil)`
$DIR/core/services/gateway/handlers/functions/subscriptions/subscriptions_test.go: `client.On("CallContract", mock.Anything, ethereum.CallMsg{ // getSubscriptionCount
To: &common.Address{},
Data: hexutil.MustDecode("0x66419970"),
}, mock.Anything).Return(getSubscriptionCount, nil)`
$DIR/core/services/gateway/handlers/functions/subscriptions/subscriptions_test.go: `client.On("CallContract", mock.Anything, ethereum.CallMsg{ // GetSubscriptionsInRange
To: &common.Address{},
Data: hexutil.MustDecode("0xec2454e500000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000003"),
}, mock.Anything).Return(getSubscriptionsInRange, nil)`
$DIR/core/services/gateway/handlers/functions/subscriptions/subscriptions_test.go: `orm.On("GetSubscriptions", mock.Anything, uint(0), uint(1)).Return([]subscriptions.StoredSubscription{
{
SubscriptionID: 1,
IFunctionsSubscriptionsSubscription: functions_router.IFunctionsSubscriptionsSubscription{
Balance: expectedBalance,
Owner: common.HexToAddress(storedUser),
BlockedBalance: big.NewInt(10),
},
},
}, nil)`
$DIR/core/services/gateway/handlers/functions/subscriptions/subscriptions_test.go: `orm.On("GetSubscriptions", mock.Anything, uint(1), uint(1)).Return([]subscriptions.StoredSubscription{}, nil)`
$DIR/core/services/gateway/handlers/functions/subscriptions/subscriptions_test.go: `orm.On("UpsertSubscription", mock.Anything, mock.Anything).Return(nil)`
$DIR/core/services/gateway/handlers/functions/subscriptions/subscriptions_test.go: `err = subscriptions.Start(ctx)`
$DIR/core/services/gateway/handlers/functions/subscriptions/subscriptions_test.go: `t.Cleanup(func() {
assert.NoError(t, subscriptions.Close())
})`
$DIR/core/services/gateway/handlers/functions/subscriptions/subscriptions_test.go: `.MustDecode("0x0000000000000000000000000000000000000000000000000000000000000003")`
$DIR/core/services/gateway/handlers/functions/subscriptions/subscriptions_test.go: `.MustDecode("0x00000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000001600000000000000000000000000000000000000000000000000000000000000240000000000000000000000000000000000000000000000000de0b6b3a76400000000000000000000000000000109e6e1b12098cc8f3a1e9719a817ec53ab9b35c000000000000000000000000000000000000000000000000000034e23f515cb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000c000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000f5340f0968ee8b7dfd97e3327a6139273cc2c4fa000000000000000000000000000000000000000000000001158e460913d000000000000000000000000000009ed925d8206a4f88a2f643b28b3035b315753cd60000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000c0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001bc14b92364c75e20000000000000000000000009ed925d8206a4f88a2f643b28b3035b315753cd60000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000c0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000005439e5881a529f3ccbffc0e82d49f9db3950aefe")`
$DIR/core/services/gateway/handlers/functions/subscriptions/subscriptions_test.go: `.Context(t)`
$DIR/core/services/gateway/handlers/functions/subscriptions/subscriptions_test.go: `.NewClient(t)`
$DIR/core/services/gateway/handlers/functions/subscriptions/subscriptions_test.go: `.On("LatestBlockHeight", mock.Anything)`
$DIR/core/services/gateway/handlers/functions/subscriptions/subscriptions_test.go: `.Return(big.NewInt(42), nil)`
$DIR/core/services/gateway/handlers/functions/subscriptions/subscriptions_test.go: `.NewInt(42)`
$DIR/core/services/gateway/handlers/functions/subscriptions/subscriptions_test.go: `.On("CallContract", mock.Anything, ethereum.CallMsg{ // getSubscriptionCount
To: &common.Address{},
Data: hexutil.MustDecode("0x66419970"),
}, mock.Anything)`
$DIR/core/services/gateway/handlers/functions/subscriptions/subscriptions_test.go: `.MustDecode("0x66419970")`
$DIR/core/services/gateway/handlers/functions/subscriptions/subscriptions_test.go: `.Return(getSubscriptionCount, nil)`
$DIR/core/services/gateway/handlers/functions/subscriptions/subscriptions_test.go: `.On("CallContract", mock.Anything, ethereum.CallMsg{ // GetSubscriptionsInRange
To: &common.Address{},
Data: hexutil.MustDecode("0xec2454e500000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000003"),
}, mock.Anything)`
$DIR/core/services/gateway/handlers/functions/subscriptions/subscriptions_test.go: `.MustDecode("0xec2454e500000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000003")`
$DIR/core/services/gateway/handlers/functions/subscriptions/subscriptions_test.go: `.Return(getSubscriptionsInRange, nil)`
$DIR/core/services/gateway/handlers/functions/subscriptions/subscriptions_test.go: `.NewORM(t)`
$DIR/core/services/gateway/handlers/functions/subscriptions/subscriptions_test.go: `.On("GetSubscriptions", mock.Anything, uint(0), uint(100))`
$DIR/core/services/gateway/handlers/functions/subscriptions/subscriptions_test.go: `.Return([]subscriptions.StoredSubscription{}, nil)`
$DIR/core/services/gateway/handlers/functions/subscriptions/subscriptions_test.go: `.On("UpsertSubscription", mock.Anything, mock.Anything)`
$DIR/core/services/gateway/handlers/functions/subscriptions/subscriptions_test.go: `.Return(nil)`
$DIR/core/services/gateway/handlers/functions/subscriptions/subscriptions_test.go: `.NewOnchainSubscriptions(client, config, orm, logger.TestLogger(t))`
$DIR/core/services/gateway/handlers/functions/subscriptions/subscriptions_test.go: `.TestLogger(t)`
$DIR/core/services/gateway/handlers/functions/subscriptions/subscriptions_test.go: `.Start(ctx)`
$DIR/core/services/gateway/handlers/functions/subscriptions/subscriptions_test.go: `.Cleanup(func() {
assert.NoError(t, subscriptions.Close())
})`
$DIR/core/services/gateway/handlers/functions/subscriptions/subscriptions_test.go: `.NewGomegaWithT(t)`
$DIR/core/services/gateway/handlers/functions/subscriptions/subscriptions_test.go: `.Eventually(func() bool {
expectedBalance := big.NewInt(0).SetBytes(hexutil.MustDecode("0x01158e460913d00000"))
balance, err1 := subscriptions.GetMaxUserBalance(common.HexToAddress(validUser))
_, err2 := subscriptions.GetMaxUserBalance(common.HexToAddress(invalidUser))
return err1 == nil && err2 != nil && balance.Cmp(expectedBalance) == 0
}, testutils.WaitTimeout(t), time.Second)`
$DIR/core/services/gateway/handlers/functions/subscriptions/subscriptions_test.go: `.NewInt(0)`
$DIR/core/services/gateway/handlers/functions/subscriptions/subscriptions_test.go: `.SetBytes(hexutil.MustDecode("0x01158e460913d00000"))`
$DIR/core/services/gateway/handlers/functions/subscriptions/subscriptions_test.go: `.MustDecode("0x01158e460913d00000")`
$DIR/core/services/gateway/handlers/functions/subscriptions/subscriptions_test.go: `.GetMaxUserBalance(common.HexToAddress(validUser))`
$DIR/core/services/gateway/handlers/functions/subscriptions/subscriptions_test.go: `.HexToAddress(validUser)`
$DIR/core/services/gateway/handlers/functions/subscriptions/subscriptions_test.go: `.GetMaxUserBalance(common.HexToAddress(invalidUser))`
$DIR/core/services/gateway/handlers/functions/subscriptions/subscriptions_test.go: `.HexToAddress(invalidUser)`
$DIR/core/services/gateway/handlers/functions/subscriptions/subscriptions_test.go: `.Cmp(expectedBalance)`
$DIR/core/services/gateway/handlers/functions/subscriptions/subscriptions_test.go: `.WaitTimeout(t)`
$DIR/core/services/gateway/handlers/functions/subscriptions/subscriptions_test.go: `.BeTrue()`
$DIR/core/services/gateway/handlers/functions/subscriptions/subscriptions_test.go: `.MustDecode("0x0000000000000000000000000000000000000000000000000000000000000006")`
$DIR/core/services/gateway/handlers/functions/subscriptions/subscriptions_test.go: `.MustDecode("0x00000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000001600000000000000000000000000000000000000000000000000000000000000240000000000000000000000000000000000000000000000000de0b6b3a76400000000000000000000000000000109e6e1b12098cc8f3a1e9719a817ec53ab9b35c000000000000000000000000000000000000000000000000000034e23f515cb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000c000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000f5340f0968ee8b7dfd97e3327a6139273cc2c4fa000000000000000000000000000000000000000000000001158e460913d000000000000000000000000000009ed925d8206a4f88a2f643b28b3035b315753cd60000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000c0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001bc14b92364c75e20000000000000000000000009ed925d8206a4f88a2f643b28b3035b315753cd60000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000c0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000005439e5881a529f3ccbffc0e82d49f9db3950aefe")`
$DIR/core/services/gateway/handlers/functions/subscriptions/subscriptions_test.go: `.Context(t)`
$DIR/core/services/gateway/handlers/functions/subscriptions/subscriptions_test.go: `.NewClient(t)`
$DIR/core/services/gateway/handlers/functions/subscriptions/subscriptions_test.go: `.On("LatestBlockHeight", mock.Anything)`
$DIR/core/services/gateway/handlers/functions/subscriptions/subscriptions_test.go: `.Return(big.NewInt(42), nil)`
$DIR/core/services/gateway/handlers/functions/subscriptions/subscriptions_test.go: `.NewInt(42)`
$DIR/core/services/gateway/handlers/functions/subscriptions/subscriptions_test.go: `.On("CallContract", mock.Anything, ethereum.CallMsg{ // getSubscriptionCount
To: &common.Address{},
Data: hexutil.MustDecode("0x66419970"),
}, mock.Anything)`
$DIR/core/services/gateway/handlers/functions/subscriptions/subscriptions_test.go: `.MustDecode("0x66419970")`
$DIR/core/services/gateway/handlers/functions/subscriptions/subscriptions_test.go: `.Run(func(args mock.Arguments) {
currentCycle.Add(1)
})`
$DIR/core/services/gateway/handlers/functions/subscriptions/subscriptions_test.go: `.Add(1)`
$DIR/core/services/gateway/handlers/functions/subscriptions/subscriptions_test.go: `.Return(getSubscriptionCount, nil)`
$DIR/core/services/gateway/handlers/functions/subscriptions/subscriptions_test.go: `.On("CallContract", mock.Anything, ethereum.CallMsg{ // GetSubscriptionsInRange(1,3)
To: &common.Address{},
Data: hexutil.MustDecode("0xec2454e500000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000003"),
}, mock.Anything)`
$DIR/core/services/gateway/handlers/functions/subscriptions/subscriptions_test.go: `.MustDecode("0xec2454e500000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000003")`
$DIR/core/services/gateway/handlers/functions/subscriptions/subscriptions_test.go: `.Return(getSubscriptionsInRange, nil)`
$DIR/core/services/gateway/handlers/functions/subscriptions/subscriptions_test.go: `.On("CallContract", mock.Anything, ethereum.CallMsg{ // GetSubscriptionsInRange(4,6)
To: &common.Address{},
Data: hexutil.MustDecode("0xec2454e500000000000000000000000000000000000000000000000000000000000000040000000000000000000000000000000000000000000000000000000000000006"),
}, mock.Anything)`
$DIR/core/services/gateway/handlers/functions/subscriptions/subscriptions_test.go: `.MustDecode("0xec2454e500000000000000000000000000000000000000000000000000000000000000040000000000000000000000000000000000000000000000000000000000000006")`
$DIR/core/services/gateway/handlers/functions/subscriptions/subscriptions_test.go: `.Return(getSubscriptionsInRange, nil)`
$DIR/core/services/gateway/handlers/functions/subscriptions/subscriptions_test.go: `.NewORM(t)`
$DIR/core/services/gateway/handlers/functions/subscriptions/subscriptions_test.go: `.On("GetSubscriptions", mock.Anything, uint(0), uint(100))`
$DIR/core/services/gateway/handlers/functions/subscriptions/subscriptions_test.go: `.Return([]subscriptions.StoredSubscription{}, nil)`
$DIR/core/services/gateway/handlers/functions/subscriptions/subscriptions_test.go: `.On("UpsertSubscription", mock.Anything, mock.Anything)`
$DIR/core/services/gateway/handlers/functions/subscriptions/subscriptions_test.go: `.Return(nil)`
$DIR/core/services/gateway/handlers/functions/subscriptions/subscriptions_test.go: `.NewOnchainSubscriptions(client, config, orm, logger.TestLogger(t))`
$DIR/core/services/gateway/handlers/functions/subscriptions/subscriptions_test.go: `.TestLogger(t)`
$DIR/core/services/gateway/handlers/functions/subscriptions/subscriptions_test.go: `.Start(ctx)`
$DIR/core/services/gateway/handlers/functions/subscriptions/subscriptions_test.go: `.Cleanup(func() {
assert.NoError(t, subscriptions.Close())
})`
$DIR/core/services/gateway/handlers/functions/subscriptions/subscriptions_test.go: `.NewGomegaWithT(t)`
$DIR/core/services/gateway/handlers/functions/subscriptions/subscriptions_test.go: `.Eventually(func() bool {
return currentCycle.Load() == ncycles
}, testutils.WaitTimeout(t), time.Second)`
$DIR/core/services/gateway/handlers/functions/subscriptions/subscriptions_test.go: `.Load()`
$DIR/core/services/gateway/handlers/functions/subscriptions/subscriptions_test.go: `.WaitTimeout(t)`
$DIR/core/services/gateway/handlers/functions/subscriptions/subscriptions_test.go: `.BeTrue()`
$DIR/core/services/gateway/handlers/functions/subscriptions/subscriptions_test.go: `.MustDecode("0x0000000000000000000000000000000000000000000000000000000000000003")`
$DIR/core/services/gateway/handlers/functions/subscriptions/subscriptions_test.go: `.MustDecode("0x00000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000001600000000000000000000000000000000000000000000000000000000000000240000000000000000000000000000000000000000000000000de0b6b3a76400000000000000000000000000000109e6e1b12098cc8f3a1e9719a817ec53ab9b35c000000000000000000000000000000000000000000000000000034e23f515cb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000c000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000f5340f0968ee8b7dfd97e3327a6139273cc2c4fa000000000000000000000000000000000000000000000001158e460913d000000000000000000000000000009ed925d8206a4f88a2f643b28b3035b315753cd60000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000c0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001bc14b92364c75e20000000000000000000000009ed925d8206a4f88a2f643b28b3035b315753cd60000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000c0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000005439e5881a529f3ccbffc0e82d49f9db3950aefe")`
$DIR/core/services/gateway/handlers/functions/subscriptions/subscriptions_test.go: `.Context(t)`
$DIR/core/services/gateway/handlers/functions/subscriptions/subscriptions_test.go: `.NewClient(t)`
$DIR/core/services/gateway/handlers/functions/subscriptions/subscriptions_test.go: `.On("LatestBlockHeight", mock.Anything)`
$DIR/core/services/gateway/handlers/functions/subscriptions/subscriptions_test.go: `.Return(big.NewInt(42), nil)`
$DIR/core/services/gateway/handlers/functions/subscriptions/subscriptions_test.go: `.NewInt(42)`
$DIR/core/services/gateway/handlers/functions/subscriptions/subscriptions_test.go: `.On("CallContract", mock.Anything, ethereum.CallMsg{ // getSubscriptionCount
To: &common.Address{},
Data: hexutil.MustDecode("0x66419970"),
}, mock.Anything)`
$DIR/core/services/gateway/handlers/functions/subscriptions/subscriptions_test.go: `.MustDecode("0x66419970")`
$DIR/core/services/gateway/handlers/functions/subscriptions/subscriptions_test.go: `.Return(getSubscriptionCount, nil)`
$DIR/core/services/gateway/handlers/functions/subscriptions/subscriptions_test.go: `.On("CallContract", mock.Anything, ethereum.CallMsg{ // GetSubscriptionsInRange
To: &common.Address{},
Data: hexutil.MustDecode("0xec2454e500000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000003"),
}, mock.Anything)`
$DIR/core/services/gateway/handlers/functions/subscriptions/subscriptions_test.go: `.MustDecode("0xec2454e500000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000003")`
$DIR/core/services/gateway/handlers/functions/subscriptions/subscriptions_test.go: `.Return(getSubscriptionsInRange, nil)`
$DIR/core/services/gateway/handlers/functions/subscriptions/subscriptions_test.go: `.NewInt(5)`
$DIR/core/services/gateway/handlers/functions/subscriptions/subscriptions_test.go: `.NewORM(t)`
$DIR/core/services/gateway/handlers/functions/subscriptions/subscriptions_test.go: `.On("GetSubscriptions", mock.Anything, uint(0), uint(1))`
$DIR/core/services/gateway/handlers/functions/subscriptions/subscriptions_test.go: `.Return([]subscriptions.StoredSubscription{
{
SubscriptionID: 1,
IFunctionsSubscriptionsSubscription: functions_router.IFunctionsSubscriptionsSubscription{
Balance: expectedBalance,
Owner: common.HexToAddress(storedUser),
BlockedBalance: big.NewInt(10),
},
},
}, nil)`
$DIR/core/services/gateway/handlers/functions/subscriptions/subscriptions_test.go: `.HexToAddress(storedUser)`
$DIR/core/services/gateway/handlers/functions/subscriptions/subscriptions_test.go: `.NewInt(10)`
$DIR/core/services/gateway/handlers/functions/subscriptions/subscriptions_test.go: `.On("GetSubscriptions", mock.Anything, uint(1), uint(1))`
$DIR/core/services/gateway/handlers/functions/subscriptions/subscriptions_test.go: `.Return([]subscriptions.StoredSubscription{}, nil)`
$DIR/core/services/gateway/handlers/functions/subscriptions/subscriptions_test.go: `.On("UpsertSubscription", mock.Anything, mock.Anything)`
$DIR/core/services/gateway/handlers/functions/subscriptions/subscriptions_test.go: `.Return(nil)`
$DIR/core/services/gateway/handlers/functions/subscriptions/subscriptions_test.go: `.NewOnchainSubscriptions(client, config, orm, logger.TestLogger(t))`
$DIR/core/services/gateway/handlers/functions/subscriptions/subscriptions_test.go: `.TestLogger(t)`
$DIR/core/services/gateway/handlers/functions/subscriptions/subscriptions_test.go: `.Start(ctx)`
$DIR/core/services/gateway/handlers/functions/subscriptions/subscriptions_test.go: `.Cleanup(func() {
assert.NoError(t, subscriptions.Close())
})`
$DIR/core/services/gateway/handlers/functions/subscriptions/subscriptions_test.go: `.NewGomegaWithT(t)`
$DIR/core/services/gateway/handlers/functions/subscriptions/subscriptions_test.go: `.Eventually(func() bool {
actualBalance, err := subscriptions.GetMaxUserBalance(common.HexToAddress(storedUser))
return err == nil && assert.Equal(t, expectedBalance, actualBalance)
}, testutils.WaitTimeout(t), time.Second)`
$DIR/core/services/gateway/handlers/functions/subscriptions/subscriptions_test.go: `.GetMaxUserBalance(common.HexToAddress(storedUser))`
$DIR/core/services/gateway/handlers/functions/subscriptions/subscriptions_test.go: `.HexToAddress(storedUser)`
$DIR/core/services/gateway/handlers/functions/subscriptions/subscriptions_test.go: `.WaitTimeout(t)`
$DIR/core/services/gateway/handlers/functions/subscriptions/subscriptions_test.go: `.BeTrue()`
$DIR/core/services/gateway/handlers/functions/subscriptions/user_subscriptions_test.go: `t.Run("GetMaxUserBalance for unknown user", func(t *testing.T) {
_, err := us.GetMaxUserBalance(utils.RandomAddress())
assert.Error(t, err)
})`
$DIR/core/services/gateway/handlers/functions/subscriptions/user_subscriptions_test.go: `updated = us.UpdateSubscription(3, &functions_router.IFunctionsSubscriptionsSubscription{
Owner: user2,
Balance: user2Balance1,
})`
$DIR/core/services/gateway/handlers/functions/subscriptions/user_subscriptions_test.go: `updated = us.UpdateSubscription(10, &functions_router.IFunctionsSubscriptionsSubscription{
Owner: user2,
Balance: user2Balance2,
})`
$DIR/core/services/gateway/handlers/functions/subscriptions/user_subscriptions_test.go: `balance, err = us.GetMaxUserBalance(user2)`
$DIR/core/services/gateway/handlers/functions/subscriptions/user_subscriptions_test.go: `t.Run("update balance", func(t *testing.T) {
us := subscriptions.NewUserSubscriptions()
owner := utils.RandomAddress()
updated := us.UpdateSubscription(1, &functions_router.IFunctionsSubscriptionsSubscription{
Owner: owner,
Balance: big.NewInt(10),
})
assert.True(t, updated)
updated = us.UpdateSubscription(1, &functions_router.IFunctionsSubscriptionsSubscription{
Owner: owner,
Balance: big.NewInt(100),
})
assert.True(t, updated)
})`
$DIR/core/services/gateway/handlers/functions/subscriptions/user_subscriptions_test.go: `updated = us.UpdateSubscription(1, &functions_router.IFunctionsSubscriptionsSubscription{
Owner: owner,
Balance: big.NewInt(100),
})`
$DIR/core/services/gateway/handlers/functions/subscriptions/user_subscriptions_test.go: `t.Run("updated proposed owner", func(t *testing.T) {
us := subscriptions.NewUserSubscriptions()
owner := utils.RandomAddress()
updated := us.UpdateSubscription(1, &functions_router.IFunctionsSubscriptionsSubscription{
Owner: owner,
Balance: big.NewInt(10),
})
assert.True(t, updated)
updated = us.UpdateSubscription(1, &functions_router.IFunctionsSubscriptionsSubscription{
Owner: owner,
Balance: big.NewInt(10),
ProposedOwner: utils.RandomAddress(),
})
assert.True(t, updated)
})`
$DIR/core/services/gateway/handlers/functions/subscriptions/user_subscriptions_test.go: `updated = us.UpdateSubscription(1, &functions_router.IFunctionsSubscriptionsSubscription{
Owner: owner,
Balance: big.NewInt(10),
ProposedOwner: utils.RandomAddress(),
})`
$DIR/core/services/gateway/handlers/functions/subscriptions/user_subscriptions_test.go: `t.Run("remove subscriptions", func(t *testing.T) {
us := subscriptions.NewUserSubscriptions()
user2 := utils.RandomAddress()
user2Balance1 := big.NewInt(50)
user2Balance2 := big.NewInt(70)
updated := us.UpdateSubscription(3, &functions_router.IFunctionsSubscriptionsSubscription{
Owner: user2,
Balance: user2Balance1,
})
assert.True(t, updated)
updated = us.UpdateSubscription(10, &functions_router.IFunctionsSubscriptionsSubscription{
Owner: user2,
Balance: user2Balance2,
})
assert.True(t, updated)
updated = us.UpdateSubscription(3, &functions_router.IFunctionsSubscriptionsSubscription{
Owner: utils.ZeroAddress,
})
assert.True(t, updated)
updated = us.UpdateSubscription(10, &functions_router.IFunctionsSubscriptionsSubscription{
Owner: utils.ZeroAddress,
})
assert.True(t, updated)
_, err := us.GetMaxUserBalance(user2)
assert.Error(t, err)
})`
$DIR/core/services/gateway/handlers/functions/subscriptions/user_subscriptions_test.go: `updated = us.UpdateSubscription(10, &functions_router.IFunctionsSubscriptionsSubscription{
Owner: user2,
Balance: user2Balance2,
})`
$DIR/core/services/gateway/handlers/functions/subscriptions/user_subscriptions_test.go: `updated = us.UpdateSubscription(3, &functions_router.IFunctionsSubscriptionsSubscription{
Owner: utils.ZeroAddress,
})`
$DIR/core/services/gateway/handlers/functions/subscriptions/user_subscriptions_test.go: `updated = us.UpdateSubscription(10, &functions_router.IFunctionsSubscriptionsSubscription{
Owner: utils.ZeroAddress,
})`
$DIR/core/services/gateway/handlers/functions/subscriptions/user_subscriptions_test.go: `t.Run("remove a non existing subscription", func(t *testing.T) {
us := subscriptions.NewUserSubscriptions()
updated := us.UpdateSubscription(3, &functions_router.IFunctionsSubscriptionsSubscription{
Owner: utils.ZeroAddress,
})
assert.False(t, updated)
})`
$DIR/core/services/gateway/handlers/functions/subscriptions/user_subscriptions_test.go: `updated = us.UpdateSubscription(5, &identicalSubscription)`
$DIR/core/services/gateway/handlers/functions/subscriptions/user_subscriptions_test.go: `.NewUserSubscriptions()`
$DIR/core/services/gateway/handlers/functions/subscriptions/user_subscriptions_test.go: `.Run("GetMaxUserBalance for unknown user", func(t *testing.T) {
_, err := us.GetMaxUserBalance(utils.RandomAddress())
assert.Error(t, err)
})`
$DIR/core/services/gateway/handlers/functions/subscriptions/user_subscriptions_test.go: `.GetMaxUserBalance(utils.RandomAddress())`
$DIR/core/services/gateway/handlers/functions/subscriptions/user_subscriptions_test.go: `.RandomAddress()`
$DIR/core/services/gateway/handlers/functions/subscriptions/user_subscriptions_test.go: `.RandomAddress()`
$DIR/core/services/gateway/handlers/functions/subscriptions/user_subscriptions_test.go: `.NewInt(10)`
$DIR/core/services/gateway/handlers/functions/subscriptions/user_subscriptions_test.go: `.RandomAddress()`
$DIR/core/services/gateway/handlers/functions/subscriptions/user_subscriptions_test.go: `.NewInt(50)`
$DIR/core/services/gateway/handlers/functions/subscriptions/user_subscriptions_test.go: `.NewInt(70)`
$DIR/core/services/gateway/handlers/functions/subscriptions/user_subscriptions_test.go: `.UpdateSubscription(5, &functions_router.IFunctionsSubscriptionsSubscription{
Owner: user1,
Balance: user1Balance,
})`
$DIR/core/services/gateway/handlers/functions/subscriptions/user_subscriptions_test.go: `.UpdateSubscription(3, &functions_router.IFunctionsSubscriptionsSubscription{
Owner: user2,
Balance: user2Balance1,
})`
$DIR/core/services/gateway/handlers/functions/subscriptions/user_subscriptions_test.go: `.UpdateSubscription(10, &functions_router.IFunctionsSubscriptionsSubscription{
Owner: user2,
Balance: user2Balance2,
})`
$DIR/core/services/gateway/handlers/functions/subscriptions/user_subscriptions_test.go: `.GetMaxUserBalance(user1)`
$DIR/core/services/gateway/handlers/functions/subscriptions/user_subscriptions_test.go: `.GetMaxUserBalance(user2)`
$DIR/core/services/gateway/handlers/functions/subscriptions/user_subscriptions_test.go: `.Run("update balance", func(t *testing.T) {
us := subscriptions.NewUserSubscriptions()
owner := utils.RandomAddress()
updated := us.UpdateSubscription(1, &functions_router.IFunctionsSubscriptionsSubscription{
Owner: owner,
Balance: big.NewInt(10),
})
assert.True(t, updated)
updated = us.UpdateSubscription(1, &functions_router.IFunctionsSubscriptionsSubscription{
Owner: owner,
Balance: big.NewInt(100),
})
assert.True(t, updated)
})`
$DIR/core/services/gateway/handlers/functions/subscriptions/user_subscriptions_test.go: `.NewUserSubscriptions()`
$DIR/core/services/gateway/handlers/functions/subscriptions/user_subscriptions_test.go: `.RandomAddress()`
$DIR/core/services/gateway/handlers/functions/subscriptions/user_subscriptions_test.go: `.UpdateSubscription(1, &functions_router.IFunctionsSubscriptionsSubscription{
Owner: owner,
Balance: big.NewInt(10),
})`
$DIR/core/services/gateway/handlers/functions/subscriptions/user_subscriptions_test.go: `.NewInt(10)`
$DIR/core/services/gateway/handlers/functions/subscriptions/user_subscriptions_test.go: `.UpdateSubscription(1, &functions_router.IFunctionsSubscriptionsSubscription{
Owner: owner,
Balance: big.NewInt(100),
})`
$DIR/core/services/gateway/handlers/functions/subscriptions/user_subscriptions_test.go: `.NewInt(100)`
$DIR/core/services/gateway/handlers/functions/subscriptions/user_subscriptions_test.go: `.Run("updated proposed owner", func(t *testing.T) {
us := subscriptions.NewUserSubscriptions()
owner := utils.RandomAddress()
updated := us.UpdateSubscription(1, &functions_router.IFunctionsSubscriptionsSubscription{
Owner: owner,
Balance: big.NewInt(10),
})
assert.True(t, updated)
updated = us.UpdateSubscription(1, &functions_router.IFunctionsSubscriptionsSubscription{
Owner: owner,
Balance: big.NewInt(10),
ProposedOwner: utils.RandomAddress(),
})
assert.True(t, updated)
})`
$DIR/core/services/gateway/handlers/functions/subscriptions/user_subscriptions_test.go: `.NewUserSubscriptions()`
$DIR/core/services/gateway/handlers/functions/subscriptions/user_subscriptions_test.go: `.RandomAddress()`
$DIR/core/services/gateway/handlers/functions/subscriptions/user_subscriptions_test.go: `.UpdateSubscription(1, &functions_router.IFunctionsSubscriptionsSubscription{
Owner: owner,
Balance: big.NewInt(10),
})`
$DIR/core/services/gateway/handlers/functions/subscriptions/user_subscriptions_test.go: `.NewInt(10)`
$DIR/core/services/gateway/handlers/functions/subscriptions/user_subscriptions_test.go: `.UpdateSubscription(1, &functions_router.IFunctionsSubscriptionsSubscription{
Owner: owner,
Balance: big.NewInt(10),
ProposedOwner: utils.RandomAddress(),
})`
$DIR/core/services/gateway/handlers/functions/subscriptions/user_subscriptions_test.go: `.NewInt(10)`
$DIR/core/services/gateway/handlers/functions/subscriptions/user_subscriptions_test.go: `.RandomAddress()`
$DIR/core/services/gateway/handlers/functions/subscriptions/user_subscriptions_test.go: `.Run("remove subscriptions", func(t *testing.T) {
us := subscriptions.NewUserSubscriptions()
user2 := utils.RandomAddress()
user2Balance1 := big.NewInt(50)
user2Balance2 := big.NewInt(70)
updated := us.UpdateSubscription(3, &functions_router.IFunctionsSubscriptionsSubscription{
Owner: user2,
Balance: user2Balance1,
})
assert.True(t, updated)
updated = us.UpdateSubscription(10, &functions_router.IFunctionsSubscriptionsSubscription{
Owner: user2,
Balance: user2Balance2,
})
assert.True(t, updated)
updated = us.UpdateSubscription(3, &functions_router.IFunctionsSubscriptionsSubscription{
Owner: utils.ZeroAddress,
})
assert.True(t, updated)
updated = us.UpdateSubscription(10, &functions_router.IFunctionsSubscriptionsSubscription{
Owner: utils.ZeroAddress,
})
assert.True(t, updated)
_, err := us.GetMaxUserBalance(user2)
assert.Error(t, err)
})`
$DIR/core/services/gateway/handlers/functions/subscriptions/user_subscriptions_test.go: `.NewUserSubscriptions()`
$DIR/core/services/gateway/handlers/functions/subscriptions/user_subscriptions_test.go: `.RandomAddress()`
$DIR/core/services/gateway/handlers/functions/subscriptions/user_subscriptions_test.go: `.NewInt(50)`
$DIR/core/services/gateway/handlers/functions/subscriptions/user_subscriptions_test.go: `.NewInt(70)`
$DIR/core/services/gateway/handlers/functions/subscriptions/user_subscriptions_test.go: `.UpdateSubscription(3, &functions_router.IFunctionsSubscriptionsSubscription{
Owner: user2,
Balance: user2Balance1,
})`
$DIR/core/services/gateway/handlers/functions/subscriptions/user_subscriptions_test.go: `.UpdateSubscription(10, &functions_router.IFunctionsSubscriptionsSubscription{
Owner: user2,
Balance: user2Balance2,
})`
$DIR/core/services/gateway/handlers/functions/subscriptions/user_subscriptions_test.go: `.UpdateSubscription(3, &functions_router.IFunctionsSubscriptionsSubscription{
Owner: utils.ZeroAddress,
})`
$DIR/core/services/gateway/handlers/functions/subscriptions/user_subscriptions_test.go: `.UpdateSubscription(10, &functions_router.IFunctionsSubscriptionsSubscription{
Owner: utils.ZeroAddress,
})`
$DIR/core/services/gateway/handlers/functions/subscriptions/user_subscriptions_test.go: `.GetMaxUserBalance(user2)`
$DIR/core/services/gateway/handlers/functions/subscriptions/user_subscriptions_test.go: `.Run("remove a non existing subscription", func(t *testing.T) {
us := subscriptions.NewUserSubscriptions()
updated := us.UpdateSubscription(3, &functions_router.IFunctionsSubscriptionsSubscription{
Owner: utils.ZeroAddress,
})
assert.False(t, updated)
})`
$DIR/core/services/gateway/handlers/functions/subscriptions/user_subscriptions_test.go: `.NewUserSubscriptions()`
$DIR/core/services/gateway/handlers/functions/subscriptions/user_subscriptions_test.go: `.UpdateSubscription(3, &functions_router.IFunctionsSubscriptionsSubscription{
Owner: utils.ZeroAddress,
})`
$DIR/core/services/gateway/handlers/functions/subscriptions/user_subscriptions_test.go: `.NewUserSubscriptions()`
$DIR/core/services/gateway/handlers/functions/subscriptions/user_subscriptions_test.go: `.RandomAddress()`
$DIR/core/services/gateway/handlers/functions/subscriptions/user_subscriptions_test.go: `.NewInt(25)`
$DIR/core/services/gateway/handlers/functions/subscriptions/user_subscriptions_test.go: `.NewInt(25)`
$DIR/core/services/gateway/handlers/functions/subscriptions/user_subscriptions_test.go: `.UpdateSubscription(5, &subscription)`
$DIR/core/services/gateway/handlers/functions/subscriptions/user_subscriptions_test.go: `.UpdateSubscription(5, &identicalSubscription)`
$DIR/core/services/gateway/handlers/handler.dummy_test.go: `connMgr.SetHandler(handler)`
$DIR/core/services/gateway/handlers/handler.dummy_test.go: `.NewDummyHandler(&config, &connMgr, logger.TestLogger(t))`
$DIR/core/services/gateway/handlers/handler.dummy_test.go: `.TestLogger(t)`
$DIR/core/services/gateway/handlers/handler.dummy_test.go: `.SetHandler(handler)`
$DIR/core/services/gateway/handlers/handler.dummy_test.go: `.Context(t)`
$DIR/core/services/gateway/integration_tests/gateway_integration_test.go: `nodeKeys.Address = strings.ToUpper(nodeKeys.Address)`
$DIR/core/services/gateway/integration_tests/gateway_integration_test.go: `servicetest.Run(t, gateway)`
$DIR/core/services/gateway/integration_tests/gateway_integration_test.go: `client.connector = connector`
$DIR/core/services/gateway/integration_tests/gateway_integration_test.go: `servicetest.Run(t, connector)`
$DIR/core/services/gateway/integration_tests/gateway_integration_test.go: `gomega.NewGomegaWithT(t).Eventually(func() bool {
req := newHttpRequestObject(t, messageId1, userUrl, userKeys.PrivateKey)
httpClient := &http.Client{}
_, _ = httpClient.Do(req) // could initially return error if Gateway is not fully initialized yet
return client.done.Load()
}, testutils.WaitTimeout(t), testutils.TestInterval).Should(gomega.Equal(true))`
$DIR/core/services/gateway/integration_tests/gateway_integration_test.go: `_, _ = httpClient.Do(req)`
$DIR/core/services/gateway/integration_tests/gateway_integration_test.go: `.NewTestNodes(t, 2)`
$DIR/core/services/gateway/integration_tests/gateway_integration_test.go: `.ToUpper(nodeKeys.Address)`
$DIR/core/services/gateway/integration_tests/gateway_integration_test.go: `.TestLogger(t)`
$DIR/core/services/gateway/integration_tests/gateway_integration_test.go: `.Sprintf(gatewayConfigTemplate, nodeKeys.Address)`
$DIR/core/services/gateway/integration_tests/gateway_integration_test.go: `.NewGatewayFromConfig(parseGatewayConfig(t, gatewayConfig), gateway.NewHandlerFactory(nil, nil, lggr), lggr)`
$DIR/core/services/gateway/integration_tests/gateway_integration_test.go: `.NewHandlerFactory(nil, nil, lggr)`
$DIR/core/services/gateway/integration_tests/gateway_integration_test.go: `.Run(t, gateway)`
$DIR/core/services/gateway/integration_tests/gateway_integration_test.go: `.GetUserPort()`
$DIR/core/services/gateway/integration_tests/gateway_integration_test.go: `.GetNodePort()`
$DIR/core/services/gateway/integration_tests/gateway_integration_test.go: `.Sprintf("http://localhost:%d/user", userPort)`
$DIR/core/services/gateway/integration_tests/gateway_integration_test.go: `.Sprintf("ws://localhost:%d/node", nodePort)`
$DIR/core/services/gateway/integration_tests/gateway_integration_test.go: `.NewGatewayConnector(parseConnectorConfig(t, nodeConfigTemplate, nodeKeys.Address, nodeUrl), client, client, clockwork.NewRealClock(), lggr)`
$DIR/core/services/gateway/integration_tests/gateway_integration_test.go: `.NewRealClock()`
$DIR/core/services/gateway/integration_tests/gateway_integration_test.go: `.Run(t, connector)`
$DIR/core/services/gateway/integration_tests/gateway_integration_test.go: `.NewGomegaWithT(t)`
$DIR/core/services/gateway/integration_tests/gateway_integration_test.go: `.Eventually(func() bool {
req := newHttpRequestObject(t, messageId1, userUrl, userKeys.PrivateKey)
httpClient := &http.Client{}
_, _ = httpClient.Do(req) // could initially return error if Gateway is not fully initialized yet
return client.done.Load()
}, testutils.WaitTimeout(t), testutils.TestInterval)`
$DIR/core/services/gateway/integration_tests/gateway_integration_test.go: `.Do(req)`
$DIR/core/services/gateway/integration_tests/gateway_integration_test.go: `.done.Load()`
$DIR/core/services/gateway/integration_tests/gateway_integration_test.go: `.WaitTimeout(t)`
$DIR/core/services/gateway/integration_tests/gateway_integration_test.go: `.Should(gomega.Equal(true))`
$DIR/core/services/gateway/integration_tests/gateway_integration_test.go: `.Equal(true)`
$DIR/core/services/gateway/integration_tests/gateway_integration_test.go: `.Do(req)`
$DIR/core/services/gateway/integration_tests/gateway_integration_test.go: `.ReadAll(resp.Body)`
$DIR/core/services/gateway/integration_tests/gateway_integration_test.go: `.DecodeResponse(rawResp)`
$DIR/core/services/gateway/network/httpserver_test.go: `handler.On("ProcessRequest", mock.Anything, mock.Anything).Return([]byte("response"), 200)`
$DIR/core/services/gateway/network/httpserver_test.go: `url = strings.Replace(url, HTTPTestPath, network.HealthCheckPath, 1)`
$DIR/core/services/gateway/network/httpserver_test.go: `.On("ProcessRequest", mock.Anything, mock.Anything)`
$DIR/core/services/gateway/network/httpserver_test.go: `.Return([]byte("response"), 200)`
$DIR/core/services/gateway/network/httpserver_test.go: `.ReadAll(resp.Body)`
$DIR/core/services/gateway/network/httpserver_test.go: `.Replace(url, HTTPTestPath, network.HealthCheckPath, 1)`
$DIR/core/services/gateway/network/httpserver_test.go: `.ReadAll(resp.Body)`
$DIR/core/services/gateway/network/wsconnection_test.go: `servicetest.Run(t, ssl.connWrapper)`
$DIR/core/services/gateway/network/wsconnection_test.go: `servicetest.Run(t, clientConnWrapper)`
$DIR/core/services/gateway/network/wsconnection_test.go: `clientConnWrapper.Reset(conn)`
$DIR/core/services/gateway/network/wsconnection_test.go: `<-ssl.connWrapper.ReadChannel()`
$DIR/core/services/gateway/network/wsconnection_test.go: `writeErr = clientConnWrapper.Write(testutils.Context(t), websocket.TextMessage, []byte("failed send"))`
$DIR/core/services/gateway/network/wsconnection_test.go: `conn, _, err = websocket.DefaultDialer.Dial(serverURL, nil)`
$DIR/core/services/gateway/network/wsconnection_test.go: `clientConnWrapper.Reset(conn)`
$DIR/core/services/gateway/network/wsconnection_test.go: `writeErr = clientConnWrapper.Write(testutils.Context(t), websocket.TextMessage, []byte("hello again"))`
$DIR/core/services/gateway/network/wsconnection_test.go: `<-ssl.connWrapper.ReadChannel()`
$DIR/core/services/gateway/network/wsconnection_test.go: `.TestLogger(t)`
$DIR/core/services/gateway/network/wsconnection_test.go: `.NewWSConnectionWrapper(lggr)`
$DIR/core/services/gateway/network/wsconnection_test.go: `.Run(t, ssl.connWrapper)`
$DIR/core/services/gateway/network/wsconnection_test.go: `.NewServer(http.HandlerFunc(ssl.wsHandler))`
$DIR/core/services/gateway/network/wsconnection_test.go: `.HandlerFunc(ssl.wsHandler)`
$DIR/core/services/gateway/network/wsconnection_test.go: `.TrimPrefix(s.URL, "http")`
$DIR/core/services/gateway/network/wsconnection_test.go: `.NewWSConnectionWrapper(lggr)`
$DIR/core/services/gateway/network/wsconnection_test.go: `.Run(t, clientConnWrapper)`
$DIR/core/services/gateway/network/wsconnection_test.go: `.DefaultDialer.Dial(serverURL, nil)`
$DIR/core/services/gateway/network/wsconnection_test.go: `.Reset(conn)`
$DIR/core/services/gateway/network/wsconnection_test.go: `.Write(testutils.Context(t), websocket.TextMessage, []byte("hello"))`
$DIR/core/services/gateway/network/wsconnection_test.go: `.Context(t)`
$DIR/core/services/gateway/network/wsconnection_test.go: `.connWrapper.ReadChannel()`
$DIR/core/services/gateway/network/wsconnection_test.go: `.Write(testutils.Context(t), websocket.TextMessage, []byte("failed send"))`
$DIR/core/services/gateway/network/wsconnection_test.go: `.Context(t)`
$DIR/core/services/gateway/network/wsconnection_test.go: `.DefaultDialer.Dial(serverURL, nil)`
$DIR/core/services/gateway/network/wsconnection_test.go: `.Reset(conn)`
$DIR/core/services/gateway/network/wsconnection_test.go: `.Write(testutils.Context(t), websocket.TextMessage, []byte("hello again"))`
$DIR/core/services/gateway/network/wsconnection_test.go: `.Context(t)`
$DIR/core/services/gateway/network/wsconnection_test.go: `.connWrapper.ReadChannel()`
$DIR/core/services/gateway/network/wsserver_test.go: `longString += longString`
$DIR/core/services/gateway/network/wsserver_test.go: `acceptor.On("StartHandshake", mock.Anything).Return("", []byte{}, errors.New("invalid auth header"))`
$DIR/core/services/gateway/network/wsserver_test.go: `.StdEncoding.EncodeToString([]byte(longString))`
$DIR/core/services/gateway/network/wsserver_test.go: `.On("StartHandshake", mock.Anything)`
$DIR/core/services/gateway/network/wsserver_test.go: `.Return("", []byte{}, errors.New("invalid auth header"))`
$DIR/core/services/gateway/network/wsserver_test.go: `.New("invalid auth header")`
$DIR/core/services/gateway/network/wsserver_test.go: `.StdEncoding.EncodeToString([]byte("abcd"))`
$DIR/core/services/health_test.go: `ibhr.Start()`
$DIR/core/services/health_test.go: `ibhr.Stop()`
$DIR/core/services/health_test.go: `.TestLoggerObserved(t, zapcore.InfoLevel)`
$DIR/core/services/health_test.go: `.NewInBackupHealthReport(1234, lggr)`
$DIR/core/services/health_test.go: `.Start()`
$DIR/core/services/health_test.go: `.NewRequestWithContext(tests.Context(t), "GET", "http://localhost:1234/health", nil)`
$DIR/core/services/health_test.go: `.Context(t)`
$DIR/core/services/health_test.go: `.DefaultClient.Do(req)`
$DIR/core/services/health_test.go: `.Stop()`
$DIR/core/services/health_test.go: `.TakeAll()`
$DIR/core/services/job/job_orm_test.go: `func() {
ctx := testutils.Context(t)
require.NoError(t, keyStore.OCR().Add(ctx, cltest.DefaultOCRKey))
require.NoError(t, keyStore.P2P().Add(ctx, cltest.DefaultP2PKey))
}()`
$DIR/core/services/job/job_orm_test.go: `t.Run("it creates job specs", func(t *testing.T) {
err := orm.CreateJob(testutils.Context(t), jb)
require.NoError(t, err)
var returnedSpec job.Job
var OCROracleSpec job.OCROracleSpec
err = db.Get(&returnedSpec, "SELECT * FROM jobs WHERE jobs.id = $1", jb.ID)
require.NoError(t, err)
err = db.Get(&OCROracleSpec, "SELECT * FROM ocr_oracle_specs WHERE ocr_oracle_specs.id = $1", jb.OCROracleSpecID)
require.NoError(t, err)
returnedSpec.OCROracleSpec = &OCROracleSpec
compareOCRJobSpecs(t, *jb, returnedSpec)
})`
$DIR/core/services/job/job_orm_test.go: `err = db.Get(&returnedSpec, "SELECT * FROM jobs WHERE jobs.id = $1", jb.ID)`
$DIR/core/services/job/job_orm_test.go: `err = db.Get(&OCROracleSpec, "SELECT * FROM ocr_oracle_specs WHERE ocr_oracle_specs.id = $1", jb.OCROracleSpecID)`
$DIR/core/services/job/job_orm_test.go: `returnedSpec.OCROracleSpec = &OCROracleSpec`
$DIR/core/services/job/job_orm_test.go: `compareOCRJobSpecs(t, *jb, returnedSpec)`
$DIR/core/services/job/job_orm_test.go: `t.Run("it correctly mark job_pipeline_specs as primary when creating a job", func(t *testing.T) {
ctx := testutils.Context(t)
jb2 := makeOCRJobSpec(t, address, bridge.Name.String(), bridge2.Name.String())
err := orm.CreateJob(ctx, jb2)
require.NoError(t, err)
var pipelineSpec pipeline.Spec
err = db.Get(&pipelineSpec, "SELECT pipeline_specs.* FROM pipeline_specs JOIN job_pipeline_specs ON (pipeline_specs.id = job_pipeline_specs.pipeline_spec_id) WHERE job_pipeline_specs.job_id = $1", jb2.ID)
require.NoError(t, err)
var jobPipelineSpec job.PipelineSpec
err = db.Get(&jobPipelineSpec, "SELECT * FROM job_pipeline_specs WHERE job_id = $1 AND pipeline_spec_id = $2", jb2.ID, pipelineSpec.ID)
require.NoError(t, err)
// `jb2.PipelineSpecID` gets loaded when calling `orm.CreateJob()` so we can compare it directly
assert.Equal(t, jb2.PipelineSpecID, pipelineSpec.ID)
assert.True(t, jobPipelineSpec.IsPrimary)
})`
$DIR/core/services/job/job_orm_test.go: `err = db.Get(&pipelineSpec, "SELECT pipeline_specs.* FROM pipeline_specs JOIN job_pipeline_specs ON (pipeline_specs.id = job_pipeline_specs.pipeline_spec_id) WHERE job_pipeline_specs.job_id = $1", jb2.ID)`
$DIR/core/services/job/job_orm_test.go: `err = db.Get(&jobPipelineSpec, "SELECT * FROM job_pipeline_specs WHERE job_id = $1 AND pipeline_spec_id = $2", jb2.ID, pipelineSpec.ID)`
$DIR/core/services/job/job_orm_test.go: `t.Run("autogenerates external job ID if missing", func(t *testing.T) {
jb2 := makeOCRJobSpec(t, address, bridge.Name.String(), bridge2.Name.String())
jb2.ExternalJobID = uuid.UUID{}
err := orm.CreateJob(testutils.Context(t), jb2)
require.NoError(t, err)
var returnedSpec job.Job
err = db.Get(&returnedSpec, "SELECT * FROM jobs WHERE jobs.id = $1", jb.ID)
require.NoError(t, err)
assert.NotEqual(t, uuid.UUID{}, returnedSpec.ExternalJobID)
})`
$DIR/core/services/job/job_orm_test.go: `jb2.ExternalJobID = uuid.UUID{}`
$DIR/core/services/job/job_orm_test.go: `err = db.Get(&returnedSpec, "SELECT * FROM jobs WHERE jobs.id = $1", jb.ID)`
$DIR/core/services/job/job_orm_test.go: `t.Run("it deletes jobs from the DB", func(t *testing.T) {
var dbSpecs []job.Job
err := db.Select(&dbSpecs, "SELECT * FROM jobs")
require.NoError(t, err)
require.Len(t, dbSpecs, 3)
err = orm.DeleteJob(testutils.Context(t), jb.ID)
require.NoError(t, err)
dbSpecs = []job.Job{}
err = db.Select(&dbSpecs, "SELECT * FROM jobs")
require.NoError(t, err)
require.Len(t, dbSpecs, 2)
})`
$DIR/core/services/job/job_orm_test.go: `err = orm.DeleteJob(testutils.Context(t), jb.ID)`
$DIR/core/services/job/job_orm_test.go: `dbSpecs = []job.Job{}`
$DIR/core/services/job/job_orm_test.go: `err = db.Select(&dbSpecs, "SELECT * FROM jobs")`
$DIR/core/services/job/job_orm_test.go: `t.Run("increase job spec error occurrence", func(t *testing.T) {
ctx := testutils.Context(t)
jb3 := makeOCRJobSpec(t, address, bridge.Name.String(), bridge2.Name.String())
err := orm.CreateJob(ctx, jb3)
require.NoError(t, err)
var jobSpec job.Job
err = db.Get(&jobSpec, "SELECT * FROM jobs")
require.NoError(t, err)
ocrSpecError1 := "ocr spec 1 errored"
ocrSpecError2 := "ocr spec 2 errored"
require.NoError(t, orm.RecordError(ctx, jobSpec.ID, ocrSpecError1))
require.NoError(t, orm.RecordError(ctx, jobSpec.ID, ocrSpecError1))
require.NoError(t, orm.RecordError(ctx, jobSpec.ID, ocrSpecError2))
var specErrors []job.SpecError
err = db.Select(&specErrors, "SELECT * FROM job_spec_errors")
require.NoError(t, err)
require.Len(t, specErrors, 2)
assert.Equal(t, specErrors[0].Occurrences, uint(2))
assert.Equal(t, specErrors[1].Occurrences, uint(1))
assert.True(t, specErrors[0].CreatedAt.Before(specErrors[0].UpdatedAt), "expected created_at (%s) to be before updated_at (%s)", specErrors[0].CreatedAt, specErrors[0].UpdatedAt)
assert.Equal(t, specErrors[0].Description, ocrSpecError1)
assert.Equal(t, specErrors[1].Description, ocrSpecError2)
assert.True(t, specErrors[1].CreatedAt.After(specErrors[0].UpdatedAt))
var j2 job.Job
var OCROracleSpec job.OCROracleSpec
var jobSpecErrors []job.SpecError
err = db.Get(&j2, "SELECT * FROM jobs WHERE jobs.id = $1", jobSpec.ID)
require.NoError(t, err)
err = db.Get(&OCROracleSpec, "SELECT * FROM ocr_oracle_specs WHERE ocr_oracle_specs.id = $1", j2.OCROracleSpecID)
require.NoError(t, err)
err = db.Select(&jobSpecErrors, "SELECT * FROM job_spec_errors WHERE job_spec_errors.job_id = $1", j2.ID)
require.NoError(t, err)
require.Len(t, jobSpecErrors, 2)
})`
$DIR/core/services/job/job_orm_test.go: `err = db.Get(&jobSpec, "SELECT * FROM jobs")`
$DIR/core/services/job/job_orm_test.go: `err = db.Select(&specErrors, "SELECT * FROM job_spec_errors")`
$DIR/core/services/job/job_orm_test.go: `err = db.Get(&j2, "SELECT * FROM jobs WHERE jobs.id = $1", jobSpec.ID)`
$DIR/core/services/job/job_orm_test.go: `err = db.Get(&OCROracleSpec, "SELECT * FROM ocr_oracle_specs WHERE ocr_oracle_specs.id = $1", j2.OCROracleSpecID)`
$DIR/core/services/job/job_orm_test.go: `err = db.Select(&jobSpecErrors, "SELECT * FROM job_spec_errors WHERE job_spec_errors.job_id = $1", j2.ID)`
$DIR/core/services/job/job_orm_test.go: `t.Run("finds job spec error by ID", func(t *testing.T) {
ctx := testutils.Context(t)
jb3 := makeOCRJobSpec(t, address, bridge.Name.String(), bridge2.Name.String())
err := orm.CreateJob(ctx, jb3)
require.NoError(t, err)
var jobSpec job.Job
err = db.Get(&jobSpec, "SELECT * FROM jobs")
require.NoError(t, err)
var specErrors []job.SpecError
err = db.Select(&specErrors, "SELECT * FROM job_spec_errors")
require.NoError(t, err)
require.Len(t, specErrors, 2)
ocrSpecError1 := "ocr spec 3 errored"
ocrSpecError2 := "ocr spec 4 errored"
require.NoError(t, orm.RecordError(ctx, jobSpec.ID, ocrSpecError1))
require.NoError(t, orm.RecordError(ctx, jobSpec.ID, ocrSpecError2))
var updatedSpecError []job.SpecError
err = db.Select(&updatedSpecError, "SELECT * FROM job_spec_errors ORDER BY id ASC")
require.NoError(t, err)
require.Len(t, updatedSpecError, 4)
assert.Equal(t, uint(1), updatedSpecError[2].Occurrences)
assert.Equal(t, uint(1), updatedSpecError[3].Occurrences)
assert.Equal(t, ocrSpecError1, updatedSpecError[2].Description)
assert.Equal(t, ocrSpecError2, updatedSpecError[3].Description)
dbSpecErr1, err := orm.FindSpecError(ctx, updatedSpecError[2].ID)
require.NoError(t, err)
dbSpecErr2, err := orm.FindSpecError(ctx, updatedSpecError[3].ID)
require.NoError(t, err)
assert.Equal(t, uint(1), dbSpecErr1.Occurrences)
assert.Equal(t, uint(1), dbSpecErr2.Occurrences)
assert.Equal(t, ocrSpecError1, dbSpecErr1.Description)
assert.Equal(t, ocrSpecError2, dbSpecErr2.Description)
})`
$DIR/core/services/job/job_orm_test.go: `err = db.Get(&jobSpec, "SELECT * FROM jobs")`
$DIR/core/services/job/job_orm_test.go: `err = db.Select(&specErrors, "SELECT * FROM job_spec_errors")`
$DIR/core/services/job/job_orm_test.go: `err = db.Select(&updatedSpecError, "SELECT * FROM job_spec_errors ORDER BY id ASC")`
$DIR/core/services/job/job_orm_test.go: `t.Run("creates a job with a direct request spec", func(t *testing.T) {
drSpec := fmt.Sprintf(`
type = "directrequest"
schemaVersion = 1
evmChainID = "0"
name = "example eth request event spec"
contractAddress = "0x613a38AC1659769640aaE063C651F48E0250454C"
externalJobID = "%s"
observationSource = """
ds1 [type=http method=GET url="http://example.com" allowunrestrictednetworkaccess="true"];
ds1_merge [type=merge left="{}"]
ds1_parse [type=jsonparse path="USD"];
ds1_multiply [type=multiply times=100];
ds1 -> ds1_parse -> ds1_multiply;
"""
`, uuid.New())
drJob, err := directrequest.ValidatedDirectRequestSpec(drSpec)
require.NoError(t, err)
err = orm.CreateJob(testutils.Context(t), &drJob)
require.NoError(t, err)
})`
$DIR/core/services/job/job_orm_test.go: `err = orm.CreateJob(testutils.Context(t), &drJob)`
$DIR/core/services/job/job_orm_test.go: `t.Run("creates webhook specs along with external_initiator_webhook_specs", func(t *testing.T) {
ctx := testutils.Context(t)
eiFoo := cltest.MustInsertExternalInitiator(t, borm)
eiBar := cltest.MustInsertExternalInitiator(t, borm)
eiWS := []webhook.TOMLWebhookSpecExternalInitiator{
{Name: eiFoo.Name, Spec: cltest.JSONFromString(t, `{}`)},
{Name: eiBar.Name, Spec: cltest.JSONFromString(t, `{"bar": 1}`)},
}
eim := webhook.NewExternalInitiatorManager(db, nil)
jb, err := webhook.ValidatedWebhookSpec(ctx, testspecs.GenerateWebhookSpec(testspecs.WebhookSpecParams{ExternalInitiators: eiWS}).Toml(), eim)
require.NoError(t, err)
err = orm.CreateJob(testutils.Context(t), &jb)
require.NoError(t, err)
cltest.AssertCount(t, db, "external_initiator_webhook_specs", 2)
})`
$DIR/core/services/job/job_orm_test.go: `err = orm.CreateJob(testutils.Context(t), &jb)`
$DIR/core/services/job/job_orm_test.go: `cltest.AssertCount(t, db, "external_initiator_webhook_specs", 2)`
$DIR/core/services/job/job_orm_test.go: `t.Run("it creates and deletes records for blockhash store jobs", func(t *testing.T) {
ctx := testutils.Context(t)
bhsJob, err := blockhashstore.ValidatedSpec(
testspecs.GenerateBlockhashStoreSpec(testspecs.BlockhashStoreSpecParams{}).Toml())
require.NoError(t, err)
err = orm.CreateJob(ctx, &bhsJob)
require.NoError(t, err)
savedJob, err := orm.FindJob(testutils.Context(t), bhsJob.ID)
require.NoError(t, err)
require.Equal(t, bhsJob.ID, savedJob.ID)
require.Equal(t, bhsJob.Type, savedJob.Type)
require.Equal(t, bhsJob.BlockhashStoreSpec.ID, savedJob.BlockhashStoreSpec.ID)
require.Equal(t, bhsJob.BlockhashStoreSpec.CoordinatorV1Address, savedJob.BlockhashStoreSpec.CoordinatorV1Address)
require.Equal(t, bhsJob.BlockhashStoreSpec.CoordinatorV2Address, savedJob.BlockhashStoreSpec.CoordinatorV2Address)
require.Equal(t, bhsJob.BlockhashStoreSpec.CoordinatorV2PlusAddress, savedJob.BlockhashStoreSpec.CoordinatorV2PlusAddress)
require.Equal(t, bhsJob.BlockhashStoreSpec.WaitBlocks, savedJob.BlockhashStoreSpec.WaitBlocks)
require.Equal(t, bhsJob.BlockhashStoreSpec.LookbackBlocks, savedJob.BlockhashStoreSpec.LookbackBlocks)
require.Equal(t, bhsJob.BlockhashStoreSpec.HeartbeatPeriod, savedJob.BlockhashStoreSpec.HeartbeatPeriod)
require.Equal(t, bhsJob.BlockhashStoreSpec.BlockhashStoreAddress, savedJob.BlockhashStoreSpec.BlockhashStoreAddress)
require.Equal(t, bhsJob.BlockhashStoreSpec.TrustedBlockhashStoreAddress, savedJob.BlockhashStoreSpec.TrustedBlockhashStoreAddress)
require.Equal(t, bhsJob.BlockhashStoreSpec.TrustedBlockhashStoreBatchSize, savedJob.BlockhashStoreSpec.TrustedBlockhashStoreBatchSize)
require.Equal(t, bhsJob.BlockhashStoreSpec.PollPeriod, savedJob.BlockhashStoreSpec.PollPeriod)
require.Equal(t, bhsJob.BlockhashStoreSpec.RunTimeout, savedJob.BlockhashStoreSpec.RunTimeout)
require.Equal(t, bhsJob.BlockhashStoreSpec.EVMChainID, savedJob.BlockhashStoreSpec.EVMChainID)
require.Equal(t, bhsJob.BlockhashStoreSpec.FromAddresses, savedJob.BlockhashStoreSpec.FromAddresses)
err = orm.DeleteJob(ctx, bhsJob.ID)
require.NoError(t, err)
_, err = orm.FindJob(testutils.Context(t), bhsJob.ID)
require.Error(t, err)
})`
$DIR/core/services/job/job_orm_test.go: `err = orm.CreateJob(ctx, &bhsJob)`
$DIR/core/services/job/job_orm_test.go: `err = orm.DeleteJob(ctx, bhsJob.ID)`
$DIR/core/services/job/job_orm_test.go: `_, err = orm.FindJob(testutils.Context(t), bhsJob.ID)`
$DIR/core/services/job/job_orm_test.go: `err = orm.CreateJob(ctx, &bhsJob)`
$DIR/core/services/job/job_orm_test.go: `err = orm.DeleteJob(ctx, bhsJob.ID)`
$DIR/core/services/job/job_orm_test.go: `_, err = orm.FindJob(testutils.Context(t), bhsJob.ID)`
$DIR/core/services/job/job_orm_test.go: `t.Run("it deletes records for offchainreporting jobs", func(t *testing.T) {
ctx := testutils.Context(t)
_, bridge := cltest.MustCreateBridge(t, db, cltest.BridgeOpts{})
_, bridge2 := cltest.MustCreateBridge(t, db, cltest.BridgeOpts{})
_, address := cltest.MustInsertRandomKey(t, keyStore.Eth())
relayExtenders := evmtest.NewChainRelayExtenders(t, evmtest.TestChainOpts{DB: db, GeneralConfig: config, KeyStore: keyStore.Eth()})
legacyChains := evmrelay.NewLegacyChainsFromRelayerExtenders(relayExtenders)
jb, err := ocr.ValidatedOracleSpecToml(config, legacyChains, testspecs.GenerateOCRSpec(testspecs.OCRSpecParams{
TransmitterAddress: address.Hex(),
DS1BridgeName: bridge.Name.String(),
DS2BridgeName: bridge2.Name.String(),
}).Toml())
require.NoError(t, err)
err = jobORM.CreateJob(ctx, &jb)
require.NoError(t, err)
cltest.AssertCount(t, db, "ocr_oracle_specs", 1)
cltest.AssertCount(t, db, "pipeline_specs", 1)
err = jobORM.DeleteJob(ctx, jb.ID)
require.NoError(t, err)
cltest.AssertCount(t, db, "ocr_oracle_specs", 0)
cltest.AssertCount(t, db, "pipeline_specs", 0)
cltest.AssertCount(t, db, "jobs", 0)
})`
$DIR/core/services/job/job_orm_test.go: `err = jobORM.CreateJob(ctx, &jb)`
$DIR/core/services/job/job_orm_test.go: `cltest.AssertCount(t, db, "ocr_oracle_specs", 1)`
$DIR/core/services/job/job_orm_test.go: `cltest.AssertCount(t, db, "pipeline_specs", 1)`
$DIR/core/services/job/job_orm_test.go: `err = jobORM.DeleteJob(ctx, jb.ID)`
$DIR/core/services/job/job_orm_test.go: `cltest.AssertCount(t, db, "ocr_oracle_specs", 0)`
$DIR/core/services/job/job_orm_test.go: `cltest.AssertCount(t, db, "pipeline_specs", 0)`
$DIR/core/services/job/job_orm_test.go: `cltest.AssertCount(t, db, "jobs", 0)`
$DIR/core/services/job/job_orm_test.go: `t.Run("it deletes records for keeper jobs", func(t *testing.T) {
ctx := testutils.Context(t)
registry, keeperJob := cltest.MustInsertKeeperRegistry(t, db, korm, keyStore.Eth(), 0, 1, 20)
cltest.MustInsertUpkeepForRegistry(t, db, registry)
cltest.AssertCount(t, db, "keeper_specs", 1)
cltest.AssertCount(t, db, "keeper_registries", 1)
cltest.AssertCount(t, db, "upkeep_registrations", 1)
err := jobORM.DeleteJob(ctx, keeperJob.ID)
require.NoError(t, err)
cltest.AssertCount(t, db, "keeper_specs", 0)
cltest.AssertCount(t, db, "keeper_registries", 0)
cltest.AssertCount(t, db, "upkeep_registrations", 0)
cltest.AssertCount(t, db, "jobs", 0)
})`
$DIR/core/services/job/job_orm_test.go: `cltest.MustInsertUpkeepForRegistry(t, db, registry)`
$DIR/core/services/job/job_orm_test.go: `cltest.AssertCount(t, db, "keeper_specs", 1)`
$DIR/core/services/job/job_orm_test.go: `cltest.AssertCount(t, db, "keeper_registries", 1)`
$DIR/core/services/job/job_orm_test.go: `cltest.AssertCount(t, db, "upkeep_registrations", 1)`
$DIR/core/services/job/job_orm_test.go: `cltest.AssertCount(t, db, "keeper_specs", 0)`
$DIR/core/services/job/job_orm_test.go: `cltest.AssertCount(t, db, "keeper_registries", 0)`
$DIR/core/services/job/job_orm_test.go: `cltest.AssertCount(t, db, "upkeep_registrations", 0)`
$DIR/core/services/job/job_orm_test.go: `cltest.AssertCount(t, db, "jobs", 0)`
$DIR/core/services/job/job_orm_test.go: `t.Run("it creates and deletes records for vrf jobs", func(t *testing.T) {
ctx := testutils.Context(t)
key, err := keyStore.VRF().Create(ctx)
require.NoError(t, err)
pk := key.PublicKey
jb, err := vrfcommon.ValidatedVRFSpec(testspecs.GenerateVRFSpec(testspecs.VRFSpecParams{PublicKey: pk.String()}).Toml())
require.NoError(t, err)
err = jobORM.CreateJob(ctx, &jb)
require.NoError(t, err)
cltest.AssertCount(t, db, "vrf_specs", 1)
cltest.AssertCount(t, db, "jobs", 1)
err = jobORM.DeleteJob(ctx, jb.ID)
require.NoError(t, err)
cltest.AssertCount(t, db, "vrf_specs", 0)
cltest.AssertCount(t, db, "jobs", 0)
})`
$DIR/core/services/job/job_orm_test.go: `err = jobORM.CreateJob(ctx, &jb)`
$DIR/core/services/job/job_orm_test.go: `cltest.AssertCount(t, db, "vrf_specs", 1)`
$DIR/core/services/job/job_orm_test.go: `cltest.AssertCount(t, db, "jobs", 1)`
$DIR/core/services/job/job_orm_test.go: `err = jobORM.DeleteJob(ctx, jb.ID)`
$DIR/core/services/job/job_orm_test.go: `cltest.AssertCount(t, db, "vrf_specs", 0)`
$DIR/core/services/job/job_orm_test.go: `cltest.AssertCount(t, db, "jobs", 0)`
$DIR/core/services/job/job_orm_test.go: `t.Run("it deletes records for webhook jobs", func(t *testing.T) {
ctx := testutils.Context(t)
ei := cltest.MustInsertExternalInitiator(t, bridges.NewORM(db))
jb, webhookSpec := cltest.MustInsertWebhookSpec(t, db)
_, err := db.Exec(`INSERT INTO external_initiator_webhook_specs (external_initiator_id, webhook_spec_id, spec) VALUES ($1,$2,$3)`, ei.ID, webhookSpec.ID, `{"ei": "foo", "name": "webhookSpecTwoEIs"}`)
require.NoError(t, err)
err = jobORM.DeleteJob(ctx, jb.ID)
require.NoError(t, err)
cltest.AssertCount(t, db, "webhook_specs", 0)
cltest.AssertCount(t, db, "external_initiator_webhook_specs", 0)
cltest.AssertCount(t, db, "jobs", 0)
})`
$DIR/core/services/job/job_orm_test.go: `err = jobORM.DeleteJob(ctx, jb.ID)`
$DIR/core/services/job/job_orm_test.go: `cltest.AssertCount(t, db, "webhook_specs", 0)`
$DIR/core/services/job/job_orm_test.go: `cltest.AssertCount(t, db, "external_initiator_webhook_specs", 0)`
$DIR/core/services/job/job_orm_test.go: `cltest.AssertCount(t, db, "jobs", 0)`
$DIR/core/services/job/job_orm_test.go: `_, err = db.Exec(`DELETE FROM external_initiators`)`
$DIR/core/services/job/job_orm_test.go: `cltest.AssertCount(t, db, "vrf_specs", 1)`
$DIR/core/services/job/job_orm_test.go: `cltest.AssertCount(t, db, "jobs", 1)`
$DIR/core/services/job/job_orm_test.go: `actual = append(actual, common.BytesToAddress(b).String())`
$DIR/core/services/job/job_orm_test.go: `cltest.AssertCount(t, db, "vrf_specs", 0)`
$DIR/core/services/job/job_orm_test.go: `cltest.AssertCount(t, db, "jobs", 0)`
$DIR/core/services/job/job_orm_test.go: `jb, err = vrfcommon.ValidatedVRFSpec(testspecs.GenerateVRFSpec(testspecs.VRFSpecParams{RequestTimeout: 1 * time.Hour}).Toml())`
$DIR/core/services/job/job_orm_test.go: `cltest.AssertCount(t, db, "vrf_specs", 1)`
$DIR/core/services/job/job_orm_test.go: `cltest.AssertCount(t, db, "jobs", 1)`
$DIR/core/services/job/job_orm_test.go: `cltest.AssertCount(t, db, "vrf_specs", 0)`
$DIR/core/services/job/job_orm_test.go: `cltest.AssertCount(t, db, "vrf_specs", 1)`
$DIR/core/services/job/job_orm_test.go: `cltest.AssertCount(t, db, "jobs", 1)`
$DIR/core/services/job/job_orm_test.go: `actual = append(actual, common.BytesToAddress(b).String())`
$DIR/core/services/job/job_orm_test.go: `cltest.AssertCount(t, db, "vrf_specs", 0)`
$DIR/core/services/job/job_orm_test.go: `cltest.AssertCount(t, db, "jobs", 0)`
$DIR/core/services/job/job_orm_test.go: `jb, err = vrfcommon.ValidatedVRFSpec(testspecs.GenerateVRFSpec(testspecs.VRFSpecParams{
VRFVersion: vrfcommon.V2Plus,
RequestTimeout: 1 * time.Hour,
FromAddresses: fromAddresses,
}).Toml())`
$DIR/core/services/job/job_orm_test.go: `cltest.AssertCount(t, db, "vrf_specs", 1)`
$DIR/core/services/job/job_orm_test.go: `cltest.AssertCount(t, db, "jobs", 1)`
$DIR/core/services/job/job_orm_test.go: `cltest.AssertCount(t, db, "vrf_specs", 0)`
$DIR/core/services/job/job_orm_test.go: `err = jobORM.CreateJob(ctx, &jb)`
$DIR/core/services/job/job_orm_test.go: `cltest.AssertCount(t, db, "bootstrap_specs", 1)`
$DIR/core/services/job/job_orm_test.go: `cltest.AssertCount(t, db, "jobs", 1)`
$DIR/core/services/job/job_orm_test.go: `cltest.AssertCount(t, db, "bootstrap_specs", 0)`
$DIR/core/services/job/job_orm_test.go: `t.Run("evm chain id validation for ocr works", func(t *testing.T) {
jb := job.Job{
Type: job.OffchainReporting,
OCROracleSpec: &job.OCROracleSpec{},
}
assert.Equal(t, "CreateJobFailed: evm chain id must be defined", jobORM.CreateJob(testutils.Context(t), &jb).Error())
})`
$DIR/core/services/job/job_orm_test.go: `t.Run("evm chain id validation for direct request works", func(t *testing.T) {
jb := job.Job{
Type: job.DirectRequest,
DirectRequestSpec: &job.DirectRequestSpec{},
}
assert.Equal(t, "CreateJobFailed: evm chain id must be defined", jobORM.CreateJob(testutils.Context(t), &jb).Error())
})`
$DIR/core/services/job/job_orm_test.go: `t.Run("evm chain id validation for flux monitor works", func(t *testing.T) {
jb := job.Job{
Type: job.FluxMonitor,
FluxMonitorSpec: &job.FluxMonitorSpec{},
}
assert.Equal(t, "CreateJobFailed: evm chain id must be defined", jobORM.CreateJob(testutils.Context(t), &jb).Error())
})`
$DIR/core/services/job/job_orm_test.go: `t.Run("evm chain id validation for keepers works", func(t *testing.T) {
jb := job.Job{
Type: job.Keeper,
KeeperSpec: &job.KeeperSpec{},
}
assert.Equal(t, "CreateJobFailed: evm chain id must be defined", jobORM.CreateJob(testutils.Context(t), &jb).Error())
})`
$DIR/core/services/job/job_orm_test.go: `t.Run("evm chain id validation for vrf works", func(t *testing.T) {
jb := job.Job{
Type: job.VRF,
VRFSpec: &job.VRFSpec{},
}
assert.Equal(t, "CreateJobFailed: evm chain id must be defined", jobORM.CreateJob(testutils.Context(t), &jb).Error())
})`
$DIR/core/services/job/job_orm_test.go: `t.Run("evm chain id validation for block hash store works", func(t *testing.T) {
jb := job.Job{
Type: job.BlockhashStore,
BlockhashStoreSpec: &job.BlockhashStoreSpec{},
}
assert.Equal(t, "CreateJobFailed: evm chain id must be defined", jobORM.CreateJob(testutils.Context(t), &jb).Error())
})`
$DIR/core/services/job/job_orm_test.go: `t.Run("evm chain id validation for block header feeder works", func(t *testing.T) {
jb := job.Job{
Type: job.BlockHeaderFeeder,
BlockHeaderFeederSpec: &job.BlockHeaderFeederSpec{},
}
assert.Equal(t, "CreateJobFailed: evm chain id must be defined", jobORM.CreateJob(testutils.Context(t), &jb).Error())
})`
$DIR/core/services/job/job_orm_test.go: `t.Run("evm chain id validation for legacy gas station server spec works", func(t *testing.T) {
jb := job.Job{
Type: job.LegacyGasStationServer,
LegacyGasStationServerSpec: &job.LegacyGasStationServerSpec{},
}
assert.Equal(t, "CreateJobFailed: evm chain id must be defined", jobORM.CreateJob(testutils.Context(t), &jb).Error())
})`
$DIR/core/services/job/job_orm_test.go: `c.EVM = append(c.EVM, &evmcfg.EVMConfig{
ChainID: customChainID,
Chain: evmcfg.Defaults(customChainID),
Enabled: &enabled,
Nodes: evmcfg.EVMNodes{{}},
})`
$DIR/core/services/job/job_orm_test.go: `err = jobORM.CreateJob(ctx, &jb)`
$DIR/core/services/job/job_orm_test.go: `cltest.AssertCount(t, db, "ocr_oracle_specs", 1)`
$DIR/core/services/job/job_orm_test.go: `cltest.AssertCount(t, db, "jobs", 1)`
$DIR/core/services/job/job_orm_test.go: `externalJobID = uuid.NullUUID{UUID: uuid.New(), Valid: true}`
$DIR/core/services/job/job_orm_test.go: `spec.JobID = externalJobID.UUID.String()`
$DIR/core/services/job/job_orm_test.go: `err = jobORM.CreateJob(ctx, &jba)`
$DIR/core/services/job/job_orm_test.go: `externalJobID = uuid.NullUUID{UUID: uuid.New(), Valid: true}`
$DIR/core/services/job/job_orm_test.go: `spec.JobID = externalJobID.UUID.String()`
$DIR/core/services/job/job_orm_test.go: `err = jobORM.CreateJob(ctx, &jb2)`
$DIR/core/services/job/job_orm_test.go: `c.EVM = append(c.EVM, &evmcfg.EVMConfig{
ChainID: customChainID,
Chain: evmcfg.Defaults(customChainID),
Enabled: &enabled,
Nodes: evmcfg.EVMNodes{{}},
})`
$DIR/core/services/job/job_orm_test.go: `jb.Name = null.StringFrom("Job 1")`
$DIR/core/services/job/job_orm_test.go: `jb.OCR2OracleSpec.TransmitterID = null.StringFrom(address.String())`
$DIR/core/services/job/job_orm_test.go: `jb.OCR2OracleSpec.PluginConfig["juelsPerFeeCoinSource"] = juelsPerFeeCoinSource`
$DIR/core/services/job/job_orm_test.go: `err = jobORM.CreateJob(ctx, &jb)`
$DIR/core/services/job/job_orm_test.go: `jb2.Name = null.StringFrom("Job with same chain id & contract address")`
$DIR/core/services/job/job_orm_test.go: `jb2.OCR2OracleSpec.TransmitterID = null.StringFrom(address.String())`
$DIR/core/services/job/job_orm_test.go: `jb.OCR2OracleSpec.PluginConfig["juelsPerFeeCoinSource"] = juelsPerFeeCoinSource`
$DIR/core/services/job/job_orm_test.go: `err = jobORM.CreateJob(ctx, &jb2)`
$DIR/core/services/job/job_orm_test.go: `jb3.Name = null.StringFrom("Job with different chain id & same contract address")`
$DIR/core/services/job/job_orm_test.go: `jb3.OCR2OracleSpec.TransmitterID = null.StringFrom(address.String())`
$DIR/core/services/job/job_orm_test.go: `jb3.OCR2OracleSpec.RelayConfig["chainID"] = customChainID.Int64()`
$DIR/core/services/job/job_orm_test.go: `jb.OCR2OracleSpec.PluginConfig["juelsPerFeeCoinSource"] = juelsPerFeeCoinSource`
$DIR/core/services/job/job_orm_test.go: `err = jobORM.CreateJob(ctx, &jb3)`
$DIR/core/services/job/job_orm_test.go: `c.EVM = append(c.EVM, &evmcfg.EVMConfig{
ChainID: customChainID,
Chain: evmcfg.Defaults(customChainID),
Enabled: &enabled,
Nodes: evmcfg.EVMNodes{{}},
})`
$DIR/core/services/job/job_orm_test.go: `t.Run("sending keys or transmitterID must be defined", func(t *testing.T) {
ctx := testutils.Context(t)
jb.OCR2OracleSpec.TransmitterID = null.String{}
assert.Equal(t, "CreateJobFailed: neither sending keys nor transmitter ID is defined", jobORM.CreateJob(ctx, &jb).Error())
})`
$DIR/core/services/job/job_orm_test.go: `jb.OCR2OracleSpec.TransmitterID = null.String{}`
$DIR/core/services/job/job_orm_test.go: `t.Run("sending keys validation works properly", func(t *testing.T) {
ctx := testutils.Context(t)
jb.OCR2OracleSpec.TransmitterID = null.String{}
_, address2 := cltest.MustInsertRandomKey(t, keyStore.Eth())
jb.OCR2OracleSpec.RelayConfig["sendingKeys"] = interface{}([]any{address.String(), address2.String(), common.HexToAddress("0X0").String()})
assert.Equal(t, "CreateJobFailed: no EVM key matching: \"0x0000000000000000000000000000000000000000\": no such sending key exists", jobORM.CreateJob(ctx, &jb).Error())
jb.OCR2OracleSpec.RelayConfig["sendingKeys"] = interface{}([]any{1, 2, 3})
assert.Equal(t, "CreateJobFailed: sending keys are of wrong type", jobORM.CreateJob(ctx, &jb).Error())
})`
$DIR/core/services/job/job_orm_test.go: `jb.OCR2OracleSpec.TransmitterID = null.String{}`
$DIR/core/services/job/job_orm_test.go: `jb.OCR2OracleSpec.RelayConfig["sendingKeys"] = interface{}([]any{address.String(), address2.String(), common.HexToAddress("0X0").String()})`
$DIR/core/services/job/job_orm_test.go: `jb.OCR2OracleSpec.RelayConfig["sendingKeys"] = interface{}([]any{1, 2, 3})`
$DIR/core/services/job/job_orm_test.go: `t.Run("sending keys and transmitter ID can't both be defined", func(t *testing.T) {
ctx := testutils.Context(t)
jb.OCR2OracleSpec.TransmitterID = null.StringFrom(address.String())
jb.OCR2OracleSpec.RelayConfig["sendingKeys"] = interface{}([]any{address.String()})
assert.Equal(t, "CreateJobFailed: sending keys and transmitter ID can't both be defined", jobORM.CreateJob(ctx, &jb).Error())
})`
$DIR/core/services/job/job_orm_test.go: `jb.OCR2OracleSpec.TransmitterID = null.StringFrom(address.String())`
$DIR/core/services/job/job_orm_test.go: `jb.OCR2OracleSpec.RelayConfig["sendingKeys"] = interface{}([]any{address.String()})`
$DIR/core/services/job/job_orm_test.go: `jb.OCR2OracleSpec.TransmitterID = null.StringFrom("transmitterID that doesn't have a match in key store")`
$DIR/core/services/job/job_orm_test.go: `jb.OCR2OracleSpec.RelayConfig["sendingKeys"] = nil`
$DIR/core/services/job/job_orm_test.go: `jb, err = ocr2validate.ValidatedOracleSpecToml(testutils.Context(t), config.OCR2(), config.Insecure(), testspecs.GetOCR2EVMSpecMinimal(), nil)`
$DIR/core/services/job/job_orm_test.go: `t.Run("test ETH key validation", func(t *testing.T) {
ctx := testutils.Context(t)
jb.OCR2OracleSpec.Relay = types.NetworkEVM
err := job.ValidateKeyStoreMatch(ctx, jb.OCR2OracleSpec, keyStore, "bad key")
require.EqualError(t, err, "no EVM key matching: \"bad key\"")
_, evmKey := cltest.MustInsertRandomKey(t, keyStore.Eth())
err = job.ValidateKeyStoreMatch(ctx, jb.OCR2OracleSpec, keyStore, evmKey.String())
require.NoError(t, err)
})`
$DIR/core/services/job/job_orm_test.go: `jb.OCR2OracleSpec.Relay = types.NetworkEVM`
$DIR/core/services/job/job_orm_test.go: `err = job.ValidateKeyStoreMatch(ctx, jb.OCR2OracleSpec, keyStore, evmKey.String())`
$DIR/core/services/job/job_orm_test.go: `t.Run("test Cosmos key validation", func(t *testing.T) {
ctx := testutils.Context(t)
jb.OCR2OracleSpec.Relay = types.NetworkCosmos
err := job.ValidateKeyStoreMatch(ctx, jb.OCR2OracleSpec, keyStore, "bad key")
require.EqualError(t, err, "no Cosmos key matching: \"bad key\"")
cosmosKey, err := keyStore.Cosmos().Create(ctx)
require.NoError(t, err)
err = job.ValidateKeyStoreMatch(ctx, jb.OCR2OracleSpec, keyStore, cosmosKey.ID())
require.NoError(t, err)
})`
$DIR/core/services/job/job_orm_test.go: `jb.OCR2OracleSpec.Relay = types.NetworkCosmos`
$DIR/core/services/job/job_orm_test.go: `err = job.ValidateKeyStoreMatch(ctx, jb.OCR2OracleSpec, keyStore, cosmosKey.ID())`
$DIR/core/services/job/job_orm_test.go: `t.Run("test Solana key validation", func(t *testing.T) {
ctx := testutils.Context(t)
jb.OCR2OracleSpec.Relay = types.NetworkSolana
err := job.ValidateKeyStoreMatch(ctx, jb.OCR2OracleSpec, keyStore, "bad key")
require.EqualError(t, err, "no Solana key matching: \"bad key\"")
solanaKey, err := keyStore.Solana().Create(ctx)
require.NoError(t, err)
err = job.ValidateKeyStoreMatch(ctx, jb.OCR2OracleSpec, keyStore, solanaKey.ID())
require.NoError(t, err)
})`
$DIR/core/services/job/job_orm_test.go: `jb.OCR2OracleSpec.Relay = types.NetworkSolana`
$DIR/core/services/job/job_orm_test.go: `err = job.ValidateKeyStoreMatch(ctx, jb.OCR2OracleSpec, keyStore, solanaKey.ID())`
$DIR/core/services/job/job_orm_test.go: `t.Run("test Starknet key validation", func(t *testing.T) {
ctx := testutils.Context(t)
jb.OCR2OracleSpec.Relay = types.NetworkStarkNet
err := job.ValidateKeyStoreMatch(ctx, jb.OCR2OracleSpec, keyStore, "bad key")
require.EqualError(t, err, "no Starknet key matching: \"bad key\"")
starkNetKey, err := keyStore.StarkNet().Create(ctx)
require.NoError(t, err)
err = job.ValidateKeyStoreMatch(ctx, jb.OCR2OracleSpec, keyStore, starkNetKey.ID())
require.NoError(t, err)
})`
$DIR/core/services/job/job_orm_test.go: `jb.OCR2OracleSpec.Relay = types.NetworkStarkNet`
$DIR/core/services/job/job_orm_test.go: `err = job.ValidateKeyStoreMatch(ctx, jb.OCR2OracleSpec, keyStore, starkNetKey.ID())`
$DIR/core/services/job/job_orm_test.go: `jb.OCR2OracleSpec.PluginType = types.Mercury`
$DIR/core/services/job/job_orm_test.go: `err = job.ValidateKeyStoreMatch(ctx, jb.OCR2OracleSpec, keyStore, csaKey.ID())`
$DIR/core/services/job/job_orm_test.go: `err = orm.CreateJob(ctx, &jb1)`
$DIR/core/services/job/job_orm_test.go: `err = orm.CreateJob(ctx, &jb2)`
$DIR/core/services/job/job_orm_test.go: `t.Run("jobs are ordered by latest first", func(t *testing.T) {
jobs, count, err2 := orm.FindJobs(testutils.Context(t), 0, 2)
require.NoError(t, err2)
require.Len(t, jobs, 2)
assert.Equal(t, count, 2)
expectedJobs := []job.Job{jb2, jb1}
for i, exp := range expectedJobs {
assert.Equal(t, exp.ID, jobs[i].ID)
}
})`
$DIR/core/services/job/job_orm_test.go: `c.EVM = append(c.EVM, &evmcfg.EVMConfig{
ChainID: chainID,
Chain: evmcfg.Defaults(chainID),
Enabled: &enabled,
Nodes: evmcfg.EVMNodes{{}},
})`
$DIR/core/services/job/job_orm_test.go: `jobOCR2.OCR2OracleSpec.TransmitterID = null.StringFrom(address.String())`
$DIR/core/services/job/job_orm_test.go: `jobOCR2.OCR2OracleSpec.PluginConfig["juelsPerFeeCoinSource"] = juelsPerFeeCoinSource`
$DIR/core/services/job/job_orm_test.go: `jobOCR2WithFeedID2.ExternalJobID = uuid.New()`
$DIR/core/services/job/job_orm_test.go: `jobOCR2WithFeedID2.Name = null.StringFrom("new name")`
$DIR/core/services/job/job_orm_test.go: `err = orm.CreateJob(ctx, &job)`
$DIR/core/services/job/job_orm_test.go: `err = orm.CreateJob(ctx, &jobSameAddress)`
$DIR/core/services/job/job_orm_test.go: `err = orm.CreateJob(ctx, &jobOCR2)`
$DIR/core/services/job/job_orm_test.go: `err = orm.CreateJob(ctx, &jobOCR2WithFeedID1)`
$DIR/core/services/job/job_orm_test.go: `err = orm.CreateJob(ctx, &jobOCR2WithFeedID2)`
$DIR/core/services/job/job_orm_test.go: `t.Run("by id", func(t *testing.T) {
ctx, cancel := context.WithTimeout(testutils.Context(t), 5*time.Second)
defer cancel()
jb, err2 := orm.FindJob(ctx, job.ID)
require.NoError(t, err2)
assert.Equal(t, jb.ID, job.ID)
assert.Equal(t, jb.Name, job.Name)
require.Greater(t, jb.PipelineSpecID, int32(0))
require.NotNil(t, jb.PipelineSpec)
require.NotNil(t, jb.OCROracleSpecID)
require.NotNil(t, jb.OCROracleSpec)
})`
$DIR/core/services/job/job_orm_test.go: `t.Run("by external job id", func(t *testing.T) {
ctx := testutils.Context(t)
jb, err2 := orm.FindJobByExternalJobID(ctx, externalJobID)
require.NoError(t, err2)
assert.Equal(t, jb.ID, job.ID)
assert.Equal(t, jb.Name, job.Name)
require.Greater(t, jb.PipelineSpecID, int32(0))
require.NotNil(t, jb.PipelineSpec)
require.NotNil(t, jb.OCROracleSpecID)
require.NotNil(t, jb.OCROracleSpec)
})`
$DIR/core/services/job/job_orm_test.go: `t.Run("by address", func(t *testing.T) {
ctx := testutils.Context(t)
jbID, err2 := orm.FindJobIDByAddress(ctx, job.OCROracleSpec.ContractAddress, job.OCROracleSpec.EVMChainID)
require.NoError(t, err2)
assert.Equal(t, job.ID, jbID)
_, err2 = orm.FindJobIDByAddress(ctx, "not-existing", big.NewI(0))
require.Error(t, err2)
require.ErrorIs(t, err2, sql.ErrNoRows)
})`
$DIR/core/services/job/job_orm_test.go: `_, err2 = orm.FindJobIDByAddress(ctx, "not-existing", big.NewI(0))`
$DIR/core/services/job/job_orm_test.go: `t.Run("by address yet chain scoped", func(t *testing.T) {
ctx := testutils.Context(t)
commonAddr := jobSameAddress.OCROracleSpec.ContractAddress
// Find job ID for job on chain 1337 with common address.
jbID, err2 := orm.FindJobIDByAddress(ctx, commonAddr, jobSameAddress.OCROracleSpec.EVMChainID)
require.NoError(t, err2)
assert.Equal(t, jobSameAddress.ID, jbID)
// Find job ID for job on default evm chain with common address.
jbID, err2 = orm.FindJobIDByAddress(ctx, commonAddr, job.OCROracleSpec.EVMChainID)
require.NoError(t, err2)
assert.Equal(t, job.ID, jbID)
})`
$DIR/core/services/job/job_orm_test.go: `jbID, err2 = orm.FindJobIDByAddress(ctx, commonAddr, job.OCROracleSpec.EVMChainID)`
$DIR/core/services/job/job_orm_test.go: `t.Run("by contract id without feed id", func(t *testing.T) {
ctx := testutils.Context(t)
contractID := "0x613a38AC1659769640aaE063C651F48E0250454C"
// Find job ID for ocr2 job without feedID.
jbID, err2 := orm.FindOCR2JobIDByAddress(ctx, contractID, nil)
require.NoError(t, err2)
assert.Equal(t, jobOCR2.ID, jbID)
})`
$DIR/core/services/job/job_orm_test.go: `t.Run("by contract id with valid feed id", func(t *testing.T) {
ctx := testutils.Context(t)
contractID := "0x0000000000000000000000000000000000000006"
feedID := common.HexToHash(ocr2WithFeedID1)
// Find job ID for ocr2 job with feed ID
jbID, err2 := orm.FindOCR2JobIDByAddress(ctx, contractID, &feedID)
require.NoError(t, err2)
assert.Equal(t, jobOCR2WithFeedID1.ID, jbID)
})`
$DIR/core/services/job/job_orm_test.go: `jb.DirectRequestSpec.EVMChainID = big.NewI(0)`
$DIR/core/services/job/job_orm_test.go: `err = orm.CreateJob(testutils.Context(t), &jb)`
$DIR/core/services/job/job_orm_test.go: `t.Run("with jobs", func(t *testing.T) {
ctx := testutils.Context(t)
jbs, err2 := orm.FindJobsByPipelineSpecIDs(ctx, []int32{jb.PipelineSpecID})
require.NoError(t, err2)
assert.Len(t, jbs, 1)
assert.Equal(t, jb.ID, jbs[0].ID)
assert.Equal(t, jb.Name, jbs[0].Name)
require.Greater(t, jbs[0].PipelineSpecID, int32(0))
require.Equal(t, jb.PipelineSpecID, jbs[0].PipelineSpecID)
require.NotNil(t, jbs[0].PipelineSpec)
})`
$DIR/core/services/job/job_orm_test.go: `t.Run("without jobs", func(t *testing.T) {
ctx := testutils.Context(t)
jbs, err2 := orm.FindJobsByPipelineSpecIDs(ctx, []int32{-1})
require.NoError(t, err2)
assert.Len(t, jbs, 0)
})`
$DIR/core/services/job/job_orm_test.go: `err = orm.CreateJob(testutils.Context(t), &jb)`
$DIR/core/services/job/job_orm_test.go: `t.Run("with no pipeline runs", func(t *testing.T) {
ctx := testutils.Context(t)
runs, count, err2 := orm.PipelineRuns(ctx, nil, 0, 10)
require.NoError(t, err2)
assert.Equal(t, count, 0)
assert.Empty(t, runs)
})`
$DIR/core/services/job/job_orm_test.go: `err = orm.CreateJob(testutils.Context(t), &jb)`
$DIR/core/services/job/job_orm_test.go: `t.Run("with no pipeline runs", func(t *testing.T) {
ctx := testutils.Context(t)
runs, count, err2 := orm.PipelineRuns(ctx, &jb.ID, 0, 10)
require.NoError(t, err2)
assert.Equal(t, count, 0)
assert.Empty(t, runs)
})`
$DIR/core/services/job/job_orm_test.go: `jb, err = ocr.ValidatedOracleSpecToml(config, legacyChains,
testspecs.GenerateOCRSpec(testspecs.OCRSpecParams{
JobID: jobID,
Name: fmt.Sprintf("Job #%v", jobID),
DS1BridgeName: bridge.Name.String(),
DS2BridgeName: bridge2.Name.String(),
TransmitterAddress: address.Hex(),
ContractAddress: key.Address.String(),
}).Toml())`
$DIR/core/services/job/job_orm_test.go: `err = orm.CreateJob(testutils.Context(t), &jb)`
$DIR/core/services/job/job_orm_test.go: `jobs[j] = jb`
$DIR/core/services/job/job_orm_test.go: `mustInsertPipelineRun(t, pipelineORM, jobs[j])`
$DIR/core/services/job/job_orm_test.go: `j++`
$DIR/core/services/job/job_orm_test.go: `j = 0`
$DIR/core/services/job/job_orm_test.go: `t.Run("with no pipeline runs", func(t *testing.T) {
ctx := testutils.Context(t)
runIDs, err := orm.FindPipelineRunIDsByJobID(ctx, jb.ID, 0, 10)
require.NoError(t, err)
assert.Empty(t, runIDs)
})`
$DIR/core/services/job/job_orm_test.go: `t.Run("with a pipeline run", func(t *testing.T) {
ctx := testutils.Context(t)
run := mustInsertPipelineRun(t, pipelineORM, jb)
runIDs, err := orm.FindPipelineRunIDsByJobID(ctx, jb.ID, 0, 10)
require.NoError(t, err)
require.Len(t, runIDs, 1)
assert.Equal(t, run.ID, runIDs[0])
})`
$DIR/core/services/job/job_orm_test.go: `t.Run("with batch concatenation limit 10", func(t *testing.T) {
ctx := testutils.Context(t)
runIDs, err := orm.FindPipelineRunIDsByJobID(ctx, jobs[3].ID, 95, 10)
require.NoError(t, err)
require.Len(t, runIDs, 10)
assert.Equal(t, int64(4*(len(jobs)-1)), runIDs[3]-runIDs[7])
})`
$DIR/core/services/job/job_orm_test.go: `t.Run("with batch concatenation limit 100", func(t *testing.T) {
ctx := testutils.Context(t)
runIDs, err := orm.FindPipelineRunIDsByJobID(ctx, jobs[3].ID, 95, 100)
require.NoError(t, err)
require.Len(t, runIDs, 100)
assert.Equal(t, int64(67*(len(jobs)-1)), runIDs[12]-runIDs[79])
})`
$DIR/core/services/job/job_orm_test.go: `mustInsertPipelineRun(t, pipelineORM, jb)`
$DIR/core/services/job/job_orm_test.go: `t.Run("with first batch empty, over limit", func(t *testing.T) {
ctx := testutils.Context(t)
runIDs, err := orm.FindPipelineRunIDsByJobID(ctx, jobs[3].ID, 0, 25)
require.NoError(t, err)
require.Len(t, runIDs, 25)
assert.Equal(t, int64(16*(len(jobs)-1)), runIDs[7]-runIDs[23])
})`
$DIR/core/services/job/job_orm_test.go: `err = orm.CreateJob(testutils.Context(t), &jb)`
$DIR/core/services/job/job_orm_test.go: `t.Run("with no pipeline runs", func(t *testing.T) {
ctx := testutils.Context(t)
runs, err2 := orm.FindPipelineRunsByIDs(ctx, []int64{-1})
require.NoError(t, err2)
assert.Empty(t, runs)
})`
$DIR/core/services/job/job_orm_test.go: `err = orm.CreateJob(testutils.Context(t), &jb)`
$DIR/core/services/job/job_orm_test.go: `t.Run("with no pipeline run", func(t *testing.T) {
ctx := testutils.Context(t)
run, err2 := orm.FindPipelineRunByID(ctx, -1)
assert.Equal(t, run, pipeline.Run{})
require.ErrorIs(t, err2, sql.ErrNoRows)
})`
$DIR/core/services/job/job_orm_test.go: `err = orm.CreateJob(ctx, &jb)`
$DIR/core/services/job/job_orm_test.go: `err = db.Get(&jobSpec, "SELECT * FROM jobs")`
$DIR/core/services/job/job_orm_test.go: `jb, err = orm.FindJobWithoutSpecErrors(ctx, jobSpec.ID)`
$DIR/core/services/job/job_orm_test.go: `err = orm.CreateJob(ctx, &jb)`
$DIR/core/services/job/job_orm_test.go: `err = db.Get(&jobSpec, "SELECT * FROM jobs")`
$DIR/core/services/job/job_orm_test.go: `err = orm.CreateJob(testutils.Context(t), &jb)`
$DIR/core/services/job/job_orm_test.go: `t.Run("with no pipeline runs", func(t *testing.T) {
ctx := testutils.Context(t)
count, err2 := orm.CountPipelineRunsByJobID(ctx, jb.ID)
require.NoError(t, err2)
assert.Equal(t, int32(0), count)
})`
$DIR/core/services/job/job_orm_test.go: `mustInsertPipelineRun(t, pipelineORM, jb)`
$DIR/core/services/job/job_orm_test.go: `s.WorkflowName = "notmyworkflow"`
$DIR/core/services/job/job_orm_test.go: `s.WorkflowOwner = "not me"`
$DIR/core/services/job/job_orm_test.go: `t.Run(tt.name, func(t *testing.T) {
ks := cltest.NewKeyStore(t, tt.fields.ds)
pipelineORM := pipeline.NewORM(tt.fields.ds, logger.TestLogger(t), configtest.NewTestGeneralConfig(t).JobPipeline().MaxSuccessfulRuns())
bridgesORM := bridges.NewORM(tt.fields.ds)
o := NewTestORM(t, tt.fields.ds, pipelineORM, bridgesORM, ks)
var wantJobID int32
if tt.args.before != nil {
wantJobID = tt.args.before(t, o, tt.args.spec)
}
ctx := testutils.Context(t)
gotJ, err := o.FindJobIDByWorkflow(ctx, tt.args.spec)
if (err != nil) != tt.wantErr {
t.Errorf("orm.FindJobByWorkflow() error = %v, wantErr %v", err, tt.wantErr)
return
}
if err == nil {
assert.Equal(t, wantJobID, gotJ, "mismatch job id")
}
})`
$DIR/core/services/job/job_orm_test.go: `wantJobID = tt.args.before(t, o, tt.args.spec)`
$DIR/core/services/job/job_orm_test.go: `.NewTestGeneralConfig(t)`
$DIR/core/services/job/job_orm_test.go: `.NewSqlxDB(t)`
$DIR/core/services/job/job_orm_test.go: `.NewKeyStore(t, db)`
$DIR/core/services/job/job_orm_test.go: `.Eth()`
$DIR/core/services/job/job_orm_test.go: `.Context(t)`
$DIR/core/services/job/job_orm_test.go: `.NewORM(db, logger.TestLogger(t), config.JobPipeline().MaxSuccessfulRuns())`
$DIR/core/services/job/job_orm_test.go: `.TestLogger(t)`
$DIR/core/services/job/job_orm_test.go: `.JobPipeline()`
$DIR/core/services/job/job_orm_test.go: `.MaxSuccessfulRuns()`
$DIR/core/services/job/job_orm_test.go: `.NewORM(db)`
$DIR/core/services/job/job_orm_test.go: `.MustCreateBridge(t, db, cltest.BridgeOpts{})`
$DIR/core/services/job/job_orm_test.go: `.MustCreateBridge(t, db, cltest.BridgeOpts{})`
$DIR/core/services/job/job_orm_test.go: `.MustInsertRandomKey(t, ethKeyStore)`
$DIR/core/services/job/job_orm_test.go: `.Name.String()`
$DIR/core/services/job/job_orm_test.go: `.Name.String()`
$DIR/core/services/job/job_orm_test.go: `.Run("it creates job specs", func(t *testing.T) {
err := orm.CreateJob(testutils.Context(t), jb)
require.NoError(t, err)
var returnedSpec job.Job
var OCROracleSpec job.OCROracleSpec
err = db.Get(&returnedSpec, "SELECT * FROM jobs WHERE jobs.id = $1", jb.ID)
require.NoError(t, err)
err = db.Get(&OCROracleSpec, "SELECT * FROM ocr_oracle_specs WHERE ocr_oracle_specs.id = $1", jb.OCROracleSpecID)
require.NoError(t, err)
returnedSpec.OCROracleSpec = &OCROracleSpec
compareOCRJobSpecs(t, *jb, returnedSpec)
})`
$DIR/core/services/job/job_orm_test.go: `.CreateJob(testutils.Context(t), jb)`
$DIR/core/services/job/job_orm_test.go: `.Context(t)`
$DIR/core/services/job/job_orm_test.go: `.Get(&returnedSpec, "SELECT * FROM jobs WHERE jobs.id = $1", jb.ID)`
$DIR/core/services/job/job_orm_test.go: `.Get(&OCROracleSpec, "SELECT * FROM ocr_oracle_specs WHERE ocr_oracle_specs.id = $1", jb.OCROracleSpecID)`
$DIR/core/services/job/job_orm_test.go: `.Run("it correctly mark job_pipeline_specs as primary when creating a job", func(t *testing.T) {
ctx := testutils.Context(t)
jb2 := makeOCRJobSpec(t, address, bridge.Name.String(), bridge2.Name.String())
err := orm.CreateJob(ctx, jb2)
require.NoError(t, err)
var pipelineSpec pipeline.Spec
err = db.Get(&pipelineSpec, "SELECT pipeline_specs.* FROM pipeline_specs JOIN job_pipeline_specs ON (pipeline_specs.id = job_pipeline_specs.pipeline_spec_id) WHERE job_pipeline_specs.job_id = $1", jb2.ID)
require.NoError(t, err)
var jobPipelineSpec job.PipelineSpec
err = db.Get(&jobPipelineSpec, "SELECT * FROM job_pipeline_specs WHERE job_id = $1 AND pipeline_spec_id = $2", jb2.ID, pipelineSpec.ID)
require.NoError(t, err)
// `jb2.PipelineSpecID` gets loaded when calling `orm.CreateJob()` so we can compare it directly
assert.Equal(t, jb2.PipelineSpecID, pipelineSpec.ID)
assert.True(t, jobPipelineSpec.IsPrimary)
})`
$DIR/core/services/job/job_orm_test.go: `.Context(t)`
$DIR/core/services/job/job_orm_test.go: `.Name.String()`
$DIR/core/services/job/job_orm_test.go: `.Name.String()`
$DIR/core/services/job/job_orm_test.go: `.CreateJob(ctx, jb2)`
$DIR/core/services/job/job_orm_test.go: `.Get(&pipelineSpec, "SELECT pipeline_specs.* FROM pipeline_specs JOIN job_pipeline_specs ON (pipeline_specs.id = job_pipeline_specs.pipeline_spec_id) WHERE job_pipeline_specs.job_id = $1", jb2.ID)`
$DIR/core/services/job/job_orm_test.go: `.Get(&jobPipelineSpec, "SELECT * FROM job_pipeline_specs WHERE job_id = $1 AND pipeline_spec_id = $2", jb2.ID, pipelineSpec.ID)`
$DIR/core/services/job/job_orm_test.go: `.Run("autogenerates external job ID if missing", func(t *testing.T) {
jb2 := makeOCRJobSpec(t, address, bridge.Name.String(), bridge2.Name.String())
jb2.ExternalJobID = uuid.UUID{}
err := orm.CreateJob(testutils.Context(t), jb2)
require.NoError(t, err)
var returnedSpec job.Job
err = db.Get(&returnedSpec, "SELECT * FROM jobs WHERE jobs.id = $1", jb.ID)
require.NoError(t, err)
assert.NotEqual(t, uuid.UUID{}, returnedSpec.ExternalJobID)
})`
$DIR/core/services/job/job_orm_test.go: `.Name.String()`
$DIR/core/services/job/job_orm_test.go: `.Name.String()`
$DIR/core/services/job/job_orm_test.go: `.CreateJob(testutils.Context(t), jb2)`
$DIR/core/services/job/job_orm_test.go: `.Context(t)`
$DIR/core/services/job/job_orm_test.go: `.Get(&returnedSpec, "SELECT * FROM jobs WHERE jobs.id = $1", jb.ID)`
$DIR/core/services/job/job_orm_test.go: `.Run("it deletes jobs from the DB", func(t *testing.T) {
var dbSpecs []job.Job
err := db.Select(&dbSpecs, "SELECT * FROM jobs")
require.NoError(t, err)
require.Len(t, dbSpecs, 3)
err = orm.DeleteJob(testutils.Context(t), jb.ID)
require.NoError(t, err)
dbSpecs = []job.Job{}
err = db.Select(&dbSpecs, "SELECT * FROM jobs")
require.NoError(t, err)
require.Len(t, dbSpecs, 2)
})`
$DIR/core/services/job/job_orm_test.go: `.Select(&dbSpecs, "SELECT * FROM jobs")`
$DIR/core/services/job/job_orm_test.go: `.DeleteJob(testutils.Context(t), jb.ID)`
$DIR/core/services/job/job_orm_test.go: `.Context(t)`
$DIR/core/services/job/job_orm_test.go: `.Select(&dbSpecs, "SELECT * FROM jobs")`
$DIR/core/services/job/job_orm_test.go: `.Run("increase job spec error occurrence", func(t *testing.T) {
ctx := testutils.Context(t)
jb3 := makeOCRJobSpec(t, address, bridge.Name.String(), bridge2.Name.String())
err := orm.CreateJob(ctx, jb3)
require.NoError(t, err)
var jobSpec job.Job
err = db.Get(&jobSpec, "SELECT * FROM jobs")
require.NoError(t, err)
ocrSpecError1 := "ocr spec 1 errored"
ocrSpecError2 := "ocr spec 2 errored"
require.NoError(t, orm.RecordError(ctx, jobSpec.ID, ocrSpecError1))
require.NoError(t, orm.RecordError(ctx, jobSpec.ID, ocrSpecError1))
require.NoError(t, orm.RecordError(ctx, jobSpec.ID, ocrSpecError2))
var specErrors []job.SpecError
err = db.Select(&specErrors, "SELECT * FROM job_spec_errors")
require.NoError(t, err)
require.Len(t, specErrors, 2)
assert.Equal(t, specErrors[0].Occurrences, uint(2))
assert.Equal(t, specErrors[1].Occurrences, uint(1))
assert.True(t, specErrors[0].CreatedAt.Before(specErrors[0].UpdatedAt), "expected created_at (%s) to be before updated_at (%s)", specErrors[0].CreatedAt, specErrors[0].UpdatedAt)
assert.Equal(t, specErrors[0].Description, ocrSpecError1)
assert.Equal(t, specErrors[1].Description, ocrSpecError2)
assert.True(t, specErrors[1].CreatedAt.After(specErrors[0].UpdatedAt))
var j2 job.Job
var OCROracleSpec job.OCROracleSpec
var jobSpecErrors []job.SpecError
err = db.Get(&j2, "SELECT * FROM jobs WHERE jobs.id = $1", jobSpec.ID)
require.NoError(t, err)
err = db.Get(&OCROracleSpec, "SELECT * FROM ocr_oracle_specs WHERE ocr_oracle_specs.id = $1", j2.OCROracleSpecID)
require.NoError(t, err)
err = db.Select(&jobSpecErrors, "SELECT * FROM job_spec_errors WHERE job_spec_errors.job_id = $1", j2.ID)
require.NoError(t, err)
require.Len(t, jobSpecErrors, 2)
})`
$DIR/core/services/job/job_orm_test.go: `.Context(t)`
$DIR/core/services/job/job_orm_test.go: `.Name.String()`
$DIR/core/services/job/job_orm_test.go: `.Name.String()`
$DIR/core/services/job/job_orm_test.go: `.CreateJob(ctx, jb3)`
$DIR/core/services/job/job_orm_test.go: `.Get(&jobSpec, "SELECT * FROM jobs")`
$DIR/core/services/job/job_orm_test.go: `.Select(&specErrors, "SELECT * FROM job_spec_errors")`
$DIR/core/services/job/job_orm_test.go: `.Get(&j2, "SELECT * FROM jobs WHERE jobs.id = $1", jobSpec.ID)`
$DIR/core/services/job/job_orm_test.go: `.Get(&OCROracleSpec, "SELECT * FROM ocr_oracle_specs WHERE ocr_oracle_specs.id = $1", j2.OCROracleSpecID)`
$DIR/core/services/job/job_orm_test.go: `.Select(&jobSpecErrors, "SELECT * FROM job_spec_errors WHERE job_spec_errors.job_id = $1", j2.ID)`
$DIR/core/services/job/job_orm_test.go: `.Run("finds job spec error by ID", func(t *testing.T) {
ctx := testutils.Context(t)
jb3 := makeOCRJobSpec(t, address, bridge.Name.String(), bridge2.Name.String())
err := orm.CreateJob(ctx, jb3)
require.NoError(t, err)
var jobSpec job.Job
err = db.Get(&jobSpec, "SELECT * FROM jobs")
require.NoError(t, err)
var specErrors []job.SpecError
err = db.Select(&specErrors, "SELECT * FROM job_spec_errors")
require.NoError(t, err)
require.Len(t, specErrors, 2)
ocrSpecError1 := "ocr spec 3 errored"
ocrSpecError2 := "ocr spec 4 errored"
require.NoError(t, orm.RecordError(ctx, jobSpec.ID, ocrSpecError1))
require.NoError(t, orm.RecordError(ctx, jobSpec.ID, ocrSpecError2))
var updatedSpecError []job.SpecError
err = db.Select(&updatedSpecError, "SELECT * FROM job_spec_errors ORDER BY id ASC")
require.NoError(t, err)
require.Len(t, updatedSpecError, 4)
assert.Equal(t, uint(1), updatedSpecError[2].Occurrences)
assert.Equal(t, uint(1), updatedSpecError[3].Occurrences)
assert.Equal(t, ocrSpecError1, updatedSpecError[2].Description)
assert.Equal(t, ocrSpecError2, updatedSpecError[3].Description)
dbSpecErr1, err := orm.FindSpecError(ctx, updatedSpecError[2].ID)
require.NoError(t, err)
dbSpecErr2, err := orm.FindSpecError(ctx, updatedSpecError[3].ID)
require.NoError(t, err)
assert.Equal(t, uint(1), dbSpecErr1.Occurrences)
assert.Equal(t, uint(1), dbSpecErr2.Occurrences)
assert.Equal(t, ocrSpecError1, dbSpecErr1.Description)
assert.Equal(t, ocrSpecError2, dbSpecErr2.Description)
})`
$DIR/core/services/job/job_orm_test.go: `.Context(t)`
$DIR/core/services/job/job_orm_test.go: `.Name.String()`
$DIR/core/services/job/job_orm_test.go: `.Name.String()`
$DIR/core/services/job/job_orm_test.go: `.CreateJob(ctx, jb3)`
$DIR/core/services/job/job_orm_test.go: `.Get(&jobSpec, "SELECT * FROM jobs")`
$DIR/core/services/job/job_orm_test.go: `.Select(&specErrors, "SELECT * FROM job_spec_errors")`
$DIR/core/services/job/job_orm_test.go: `.Select(&updatedSpecError, "SELECT * FROM job_spec_errors ORDER BY id ASC")`
$DIR/core/services/job/job_orm_test.go: `.FindSpecError(ctx, updatedSpecError[2].ID)`
$DIR/core/services/job/job_orm_test.go: `.FindSpecError(ctx, updatedSpecError[3].ID)`
$DIR/core/services/job/job_orm_test.go: `.Run("creates a job with a direct request spec", func(t *testing.T) {
drSpec := fmt.Sprintf(`
type = "directrequest"
schemaVersion = 1
evmChainID = "0"
name = "example eth request event spec"
contractAddress = "0x613a38AC1659769640aaE063C651F48E0250454C"
externalJobID = "%s"
observationSource = """
ds1 [type=http method=GET url="http://example.com" allowunrestrictednetworkaccess="true"];
ds1_merge [type=merge left="{}"]
ds1_parse [type=jsonparse path="USD"];
ds1_multiply [type=multiply times=100];
ds1 -> ds1_parse -> ds1_multiply;
"""
`, uuid.New())
drJob, err := directrequest.ValidatedDirectRequestSpec(drSpec)
require.NoError(t, err)
err = orm.CreateJob(testutils.Context(t), &drJob)
require.NoError(t, err)
})`
$DIR/core/services/job/job_orm_test.go: `.Sprintf(`
type = "directrequest"
schemaVersion = 1
evmChainID = "0"
name = "example eth request event spec"
contractAddress = "0x613a38AC1659769640aaE063C651F48E0250454C"
externalJobID = "%s"
observationSource = """
ds1 [type=http method=GET url="http://example.com" allowunrestrictednetworkaccess="true"];
ds1_merge [type=merge left="{}"]
ds1_parse [type=jsonparse path="USD"];
ds1_multiply [type=multiply times=100];
ds1 -> ds1_parse -> ds1_multiply;
"""
`, uuid.New())`
$DIR/core/services/job/job_orm_test.go: `.New()`
$DIR/core/services/job/job_orm_test.go: `.ValidatedDirectRequestSpec(drSpec)`
$DIR/core/services/job/job_orm_test.go: `.CreateJob(testutils.Context(t), &drJob)`
$DIR/core/services/job/job_orm_test.go: `.Context(t)`
$DIR/core/services/job/job_orm_test.go: `.Run("creates webhook specs along with external_initiator_webhook_specs", func(t *testing.T) {
ctx := testutils.Context(t)
eiFoo := cltest.MustInsertExternalInitiator(t, borm)
eiBar := cltest.MustInsertExternalInitiator(t, borm)
eiWS := []webhook.TOMLWebhookSpecExternalInitiator{
{Name: eiFoo.Name, Spec: cltest.JSONFromString(t, `{}`)},
{Name: eiBar.Name, Spec: cltest.JSONFromString(t, `{"bar": 1}`)},
}
eim := webhook.NewExternalInitiatorManager(db, nil)
jb, err := webhook.ValidatedWebhookSpec(ctx, testspecs.GenerateWebhookSpec(testspecs.WebhookSpecParams{ExternalInitiators: eiWS}).Toml(), eim)
require.NoError(t, err)
err = orm.CreateJob(testutils.Context(t), &jb)
require.NoError(t, err)
cltest.AssertCount(t, db, "external_initiator_webhook_specs", 2)
})`
$DIR/core/services/job/job_orm_test.go: `.Context(t)`
$DIR/core/services/job/job_orm_test.go: `.MustInsertExternalInitiator(t, borm)`
$DIR/core/services/job/job_orm_test.go: `.MustInsertExternalInitiator(t, borm)`
$DIR/core/services/job/job_orm_test.go: `.JSONFromString(t, `{}`)`
$DIR/core/services/job/job_orm_test.go: `.JSONFromString(t, `{"bar": 1}`)`
$DIR/core/services/job/job_orm_test.go: `.NewExternalInitiatorManager(db, nil)`
$DIR/core/services/job/job_orm_test.go: `.ValidatedWebhookSpec(ctx, testspecs.GenerateWebhookSpec(testspecs.WebhookSpecParams{ExternalInitiators: eiWS}).Toml(), eim)`
$DIR/core/services/job/job_orm_test.go: `.GenerateWebhookSpec(testspecs.WebhookSpecParams{ExternalInitiators: eiWS})`
$DIR/core/services/job/job_orm_test.go: `.Toml()`
$DIR/core/services/job/job_orm_test.go: `.CreateJob(testutils.Context(t), &jb)`
$DIR/core/services/job/job_orm_test.go: `.Context(t)`
$DIR/core/services/job/job_orm_test.go: `.AssertCount(t, db, "external_initiator_webhook_specs", 2)`
$DIR/core/services/job/job_orm_test.go: `.Run("it creates and deletes records for blockhash store jobs", func(t *testing.T) {
ctx := testutils.Context(t)
bhsJob, err := blockhashstore.ValidatedSpec(
testspecs.GenerateBlockhashStoreSpec(testspecs.BlockhashStoreSpecParams{}).Toml())
require.NoError(t, err)
err = orm.CreateJob(ctx, &bhsJob)
require.NoError(t, err)
savedJob, err := orm.FindJob(testutils.Context(t), bhsJob.ID)
require.NoError(t, err)
require.Equal(t, bhsJob.ID, savedJob.ID)
require.Equal(t, bhsJob.Type, savedJob.Type)
require.Equal(t, bhsJob.BlockhashStoreSpec.ID, savedJob.BlockhashStoreSpec.ID)
require.Equal(t, bhsJob.BlockhashStoreSpec.CoordinatorV1Address, savedJob.BlockhashStoreSpec.CoordinatorV1Address)
require.Equal(t, bhsJob.BlockhashStoreSpec.CoordinatorV2Address, savedJob.BlockhashStoreSpec.CoordinatorV2Address)
require.Equal(t, bhsJob.BlockhashStoreSpec.CoordinatorV2PlusAddress, savedJob.BlockhashStoreSpec.CoordinatorV2PlusAddress)
require.Equal(t, bhsJob.BlockhashStoreSpec.WaitBlocks, savedJob.BlockhashStoreSpec.WaitBlocks)
require.Equal(t, bhsJob.BlockhashStoreSpec.LookbackBlocks, savedJob.BlockhashStoreSpec.LookbackBlocks)
require.Equal(t, bhsJob.BlockhashStoreSpec.HeartbeatPeriod, savedJob.BlockhashStoreSpec.HeartbeatPeriod)
require.Equal(t, bhsJob.BlockhashStoreSpec.BlockhashStoreAddress, savedJob.BlockhashStoreSpec.BlockhashStoreAddress)
require.Equal(t, bhsJob.BlockhashStoreSpec.TrustedBlockhashStoreAddress, savedJob.BlockhashStoreSpec.TrustedBlockhashStoreAddress)
require.Equal(t, bhsJob.BlockhashStoreSpec.TrustedBlockhashStoreBatchSize, savedJob.BlockhashStoreSpec.TrustedBlockhashStoreBatchSize)
require.Equal(t, bhsJob.BlockhashStoreSpec.PollPeriod, savedJob.BlockhashStoreSpec.PollPeriod)
require.Equal(t, bhsJob.BlockhashStoreSpec.RunTimeout, savedJob.BlockhashStoreSpec.RunTimeout)
require.Equal(t, bhsJob.BlockhashStoreSpec.EVMChainID, savedJob.BlockhashStoreSpec.EVMChainID)
require.Equal(t, bhsJob.BlockhashStoreSpec.FromAddresses, savedJob.BlockhashStoreSpec.FromAddresses)
err = orm.DeleteJob(ctx, bhsJob.ID)
require.NoError(t, err)
_, err = orm.FindJob(testutils.Context(t), bhsJob.ID)
require.Error(t, err)
})`
$DIR/core/services/job/job_orm_test.go: `.Context(t)`
$DIR/core/services/job/job_orm_test.go: `.ValidatedSpec(
testspecs.GenerateBlockhashStoreSpec(testspecs.BlockhashStoreSpecParams{}).Toml())`
$DIR/core/services/job/job_orm_test.go: `.GenerateBlockhashStoreSpec(testspecs.BlockhashStoreSpecParams{})`
$DIR/core/services/job/job_orm_test.go: `.Toml()`
$DIR/core/services/job/job_orm_test.go: `.CreateJob(ctx, &bhsJob)`
$DIR/core/services/job/job_orm_test.go: `.FindJob(testutils.Context(t), bhsJob.ID)`
$DIR/core/services/job/job_orm_test.go: `.Context(t)`
$DIR/core/services/job/job_orm_test.go: `.DeleteJob(ctx, bhsJob.ID)`
$DIR/core/services/job/job_orm_test.go: `.FindJob(testutils.Context(t), bhsJob.ID)`
$DIR/core/services/job/job_orm_test.go: `.Context(t)`
$DIR/core/services/job/job_orm_test.go: `.Context(t)`
$DIR/core/services/job/job_orm_test.go: `.ValidatedSpec(
testspecs.GenerateBlockHeaderFeederSpec(testspecs.BlockHeaderFeederSpecParams{}).Toml())`
$DIR/core/services/job/job_orm_test.go: `.GenerateBlockHeaderFeederSpec(testspecs.BlockHeaderFeederSpecParams{})`
$DIR/core/services/job/job_orm_test.go: `.Toml()`
$DIR/core/services/job/job_orm_test.go: `.CreateJob(ctx, &bhsJob)`
$DIR/core/services/job/job_orm_test.go: `.FindJob(testutils.Context(t), bhsJob.ID)`
$DIR/core/services/job/job_orm_test.go: `.Context(t)`
$DIR/core/services/job/job_orm_test.go: `.DeleteJob(ctx, bhsJob.ID)`
$DIR/core/services/job/job_orm_test.go: `.FindJob(testutils.Context(t), bhsJob.ID)`
$DIR/core/services/job/job_orm_test.go: `.Context(t)`
$DIR/core/services/job/job_orm_test.go: `.Context(t)`
$DIR/core/services/job/job_orm_test.go: `.NewGeneralConfig(t, nil)`
$DIR/core/services/job/job_orm_test.go: `.NewSqlxDB(t)`
$DIR/core/services/job/job_orm_test.go: `.NewKeyStore(t, db)`
$DIR/core/services/job/job_orm_test.go: `.TestLogger(t)`
$DIR/core/services/job/job_orm_test.go: `.NewORM(db, lggr, config.JobPipeline().MaxSuccessfulRuns())`
$DIR/core/services/job/job_orm_test.go: `.JobPipeline()`
$DIR/core/services/job/job_orm_test.go: `.MaxSuccessfulRuns()`
$DIR/core/services/job/job_orm_test.go: `.NewORM(db)`
$DIR/core/services/job/job_orm_test.go: `.NewORM(db, logger.TestLogger(t))`
$DIR/core/services/job/job_orm_test.go: `.TestLogger(t)`
$DIR/core/services/job/job_orm_test.go: `.Run("it deletes records for offchainreporting jobs", func(t *testing.T) {
ctx := testutils.Context(t)
_, bridge := cltest.MustCreateBridge(t, db, cltest.BridgeOpts{})
_, bridge2 := cltest.MustCreateBridge(t, db, cltest.BridgeOpts{})
_, address := cltest.MustInsertRandomKey(t, keyStore.Eth())
relayExtenders := evmtest.NewChainRelayExtenders(t, evmtest.TestChainOpts{DB: db, GeneralConfig: config, KeyStore: keyStore.Eth()})
legacyChains := evmrelay.NewLegacyChainsFromRelayerExtenders(relayExtenders)
jb, err := ocr.ValidatedOracleSpecToml(config, legacyChains, testspecs.GenerateOCRSpec(testspecs.OCRSpecParams{
TransmitterAddress: address.Hex(),
DS1BridgeName: bridge.Name.String(),
DS2BridgeName: bridge2.Name.String(),
}).Toml())
require.NoError(t, err)
err = jobORM.CreateJob(ctx, &jb)
require.NoError(t, err)
cltest.AssertCount(t, db, "ocr_oracle_specs", 1)
cltest.AssertCount(t, db, "pipeline_specs", 1)
err = jobORM.DeleteJob(ctx, jb.ID)
require.NoError(t, err)
cltest.AssertCount(t, db, "ocr_oracle_specs", 0)
cltest.AssertCount(t, db, "pipeline_specs", 0)
cltest.AssertCount(t, db, "jobs", 0)
})`
$DIR/core/services/job/job_orm_test.go: `.Context(t)`
$DIR/core/services/job/job_orm_test.go: `.MustCreateBridge(t, db, cltest.BridgeOpts{})`
$DIR/core/services/job/job_orm_test.go: `.MustCreateBridge(t, db, cltest.BridgeOpts{})`
$DIR/core/services/job/job_orm_test.go: `.MustInsertRandomKey(t, keyStore.Eth())`
$DIR/core/services/job/job_orm_test.go: `.Eth()`
$DIR/core/services/job/job_orm_test.go: `.NewChainRelayExtenders(t, evmtest.TestChainOpts{DB: db, GeneralConfig: config, KeyStore: keyStore.Eth()})`
$DIR/core/services/job/job_orm_test.go: `.Eth()`
$DIR/core/services/job/job_orm_test.go: `.NewLegacyChainsFromRelayerExtenders(relayExtenders)`
$DIR/core/services/job/job_orm_test.go: `.ValidatedOracleSpecToml(config, legacyChains, testspecs.GenerateOCRSpec(testspecs.OCRSpecParams{
TransmitterAddress: address.Hex(),
DS1BridgeName: bridge.Name.String(),
DS2BridgeName: bridge2.Name.String(),
}).Toml())`
$DIR/core/services/job/job_orm_test.go: `.GenerateOCRSpec(testspecs.OCRSpecParams{
TransmitterAddress: address.Hex(),
DS1BridgeName: bridge.Name.String(),
DS2BridgeName: bridge2.Name.String(),
})`
$DIR/core/services/job/job_orm_test.go: `.Hex()`
$DIR/core/services/job/job_orm_test.go: `.Name.String()`
$DIR/core/services/job/job_orm_test.go: `.Name.String()`
$DIR/core/services/job/job_orm_test.go: `.Toml()`
$DIR/core/services/job/job_orm_test.go: `.CreateJob(ctx, &jb)`
$DIR/core/services/job/job_orm_test.go: `.AssertCount(t, db, "ocr_oracle_specs", 1)`
$DIR/core/services/job/job_orm_test.go: `.AssertCount(t, db, "pipeline_specs", 1)`
$DIR/core/services/job/job_orm_test.go: `.DeleteJob(ctx, jb.ID)`
$DIR/core/services/job/job_orm_test.go: `.AssertCount(t, db, "ocr_oracle_specs", 0)`
$DIR/core/services/job/job_orm_test.go: `.AssertCount(t, db, "pipeline_specs", 0)`
$DIR/core/services/job/job_orm_test.go: `.AssertCount(t, db, "jobs", 0)`
$DIR/core/services/job/job_orm_test.go: `.Run("it deletes records for keeper jobs", func(t *testing.T) {
ctx := testutils.Context(t)
registry, keeperJob := cltest.MustInsertKeeperRegistry(t, db, korm, keyStore.Eth(), 0, 1, 20)
cltest.MustInsertUpkeepForRegistry(t, db, registry)
cltest.AssertCount(t, db, "keeper_specs", 1)
cltest.AssertCount(t, db, "keeper_registries", 1)
cltest.AssertCount(t, db, "upkeep_registrations", 1)
err := jobORM.DeleteJob(ctx, keeperJob.ID)
require.NoError(t, err)
cltest.AssertCount(t, db, "keeper_specs", 0)
cltest.AssertCount(t, db, "keeper_registries", 0)
cltest.AssertCount(t, db, "upkeep_registrations", 0)
cltest.AssertCount(t, db, "jobs", 0)
})`
$DIR/core/services/job/job_orm_test.go: `.Context(t)`
$DIR/core/services/job/job_orm_test.go: `.MustInsertKeeperRegistry(t, db, korm, keyStore.Eth(), 0, 1, 20)`
$DIR/core/services/job/job_orm_test.go: `.Eth()`
$DIR/core/services/job/job_orm_test.go: `.MustInsertUpkeepForRegistry(t, db, registry)`
$DIR/core/services/job/job_orm_test.go: `.AssertCount(t, db, "keeper_specs", 1)`
$DIR/core/services/job/job_orm_test.go: `.AssertCount(t, db, "keeper_registries", 1)`
$DIR/core/services/job/job_orm_test.go: `.AssertCount(t, db, "upkeep_registrations", 1)`
$DIR/core/services/job/job_orm_test.go: `.DeleteJob(ctx, keeperJob.ID)`
$DIR/core/services/job/job_orm_test.go: `.AssertCount(t, db, "keeper_specs", 0)`
$DIR/core/services/job/job_orm_test.go: `.AssertCount(t, db, "keeper_registries", 0)`
$DIR/core/services/job/job_orm_test.go: `.AssertCount(t, db, "upkeep_registrations", 0)`
$DIR/core/services/job/job_orm_test.go: `.AssertCount(t, db, "jobs", 0)`
$DIR/core/services/job/job_orm_test.go: `.Run("it creates and deletes records for vrf jobs", func(t *testing.T) {
ctx := testutils.Context(t)
key, err := keyStore.VRF().Create(ctx)
require.NoError(t, err)
pk := key.PublicKey
jb, err := vrfcommon.ValidatedVRFSpec(testspecs.GenerateVRFSpec(testspecs.VRFSpecParams{PublicKey: pk.String()}).Toml())
require.NoError(t, err)
err = jobORM.CreateJob(ctx, &jb)
require.NoError(t, err)
cltest.AssertCount(t, db, "vrf_specs", 1)
cltest.AssertCount(t, db, "jobs", 1)
err = jobORM.DeleteJob(ctx, jb.ID)
require.NoError(t, err)
cltest.AssertCount(t, db, "vrf_specs", 0)
cltest.AssertCount(t, db, "jobs", 0)
})`
$DIR/core/services/job/job_orm_test.go: `.Context(t)`
$DIR/core/services/job/job_orm_test.go: `.VRF()`
$DIR/core/services/job/job_orm_test.go: `.Create(ctx)`
$DIR/core/services/job/job_orm_test.go: `.ValidatedVRFSpec(testspecs.GenerateVRFSpec(testspecs.VRFSpecParams{PublicKey: pk.String()}).Toml())`
$DIR/core/services/job/job_orm_test.go: `.GenerateVRFSpec(testspecs.VRFSpecParams{PublicKey: pk.String()})`
$DIR/core/services/job/job_orm_test.go: `.String()`
$DIR/core/services/job/job_orm_test.go: `.Toml()`
$DIR/core/services/job/job_orm_test.go: `.CreateJob(ctx, &jb)`
$DIR/core/services/job/job_orm_test.go: `.AssertCount(t, db, "vrf_specs", 1)`
$DIR/core/services/job/job_orm_test.go: `.AssertCount(t, db, "jobs", 1)`
$DIR/core/services/job/job_orm_test.go: `.DeleteJob(ctx, jb.ID)`
$DIR/core/services/job/job_orm_test.go: `.AssertCount(t, db, "vrf_specs", 0)`
$DIR/core/services/job/job_orm_test.go: `.AssertCount(t, db, "jobs", 0)`
$DIR/core/services/job/job_orm_test.go: `.Run("it deletes records for webhook jobs", func(t *testing.T) {
ctx := testutils.Context(t)
ei := cltest.MustInsertExternalInitiator(t, bridges.NewORM(db))
jb, webhookSpec := cltest.MustInsertWebhookSpec(t, db)
_, err := db.Exec(`INSERT INTO external_initiator_webhook_specs (external_initiator_id, webhook_spec_id, spec) VALUES ($1,$2,$3)`, ei.ID, webhookSpec.ID, `{"ei": "foo", "name": "webhookSpecTwoEIs"}`)
require.NoError(t, err)
err = jobORM.DeleteJob(ctx, jb.ID)
require.NoError(t, err)
cltest.AssertCount(t, db, "webhook_specs", 0)
cltest.AssertCount(t, db, "external_initiator_webhook_specs", 0)
cltest.AssertCount(t, db, "jobs", 0)
})`
$DIR/core/services/job/job_orm_test.go: `.Context(t)`
$DIR/core/services/job/job_orm_test.go: `.MustInsertExternalInitiator(t, bridges.NewORM(db))`
$DIR/core/services/job/job_orm_test.go: `.NewORM(db)`
$DIR/core/services/job/job_orm_test.go: `.MustInsertWebhookSpec(t, db)`
$DIR/core/services/job/job_orm_test.go: `.Exec(`INSERT INTO external_initiator_webhook_specs (external_initiator_id, webhook_spec_id, spec) VALUES ($1,$2,$3)`, ei.ID, webhookSpec.ID, `{"ei": "foo", "name": "webhookSpecTwoEIs"}`)`
$DIR/core/services/job/job_orm_test.go: `.DeleteJob(ctx, jb.ID)`
$DIR/core/services/job/job_orm_test.go: `.AssertCount(t, db, "webhook_specs", 0)`
$DIR/core/services/job/job_orm_test.go: `.AssertCount(t, db, "external_initiator_webhook_specs", 0)`
$DIR/core/services/job/job_orm_test.go: `.AssertCount(t, db, "jobs", 0)`
$DIR/core/services/job/job_orm_test.go: `.NewSqlxDB(t)`
$DIR/core/services/job/job_orm_test.go: `.MustInsertExternalInitiator(t, bridges.NewORM(db))`
$DIR/core/services/job/job_orm_test.go: `.NewORM(db)`
$DIR/core/services/job/job_orm_test.go: `.MustInsertWebhookSpec(t, db)`
$DIR/core/services/job/job_orm_test.go: `.Exec(`INSERT INTO external_initiator_webhook_specs (external_initiator_id, webhook_spec_id, spec) VALUES ($1,$2,$3)`, ei.ID, webhookSpec.ID, `{"ei": "foo", "name": "webhookSpecTwoEIs"}`)`
$DIR/core/services/job/job_orm_test.go: `.Exec(`DELETE FROM external_initiators`)`
$DIR/core/services/job/job_orm_test.go: `.Context(t)`
$DIR/core/services/job/job_orm_test.go: `.NewTestGeneralConfig(t)`
$DIR/core/services/job/job_orm_test.go: `.NewSqlxDB(t)`
$DIR/core/services/job/job_orm_test.go: `.NewKeyStore(t, db)`
$DIR/core/services/job/job_orm_test.go: `.TestLogger(t)`
$DIR/core/services/job/job_orm_test.go: `.NewORM(db, lggr, config.JobPipeline().MaxSuccessfulRuns())`
$DIR/core/services/job/job_orm_test.go: `.JobPipeline()`
$DIR/core/services/job/job_orm_test.go: `.MaxSuccessfulRuns()`
$DIR/core/services/job/job_orm_test.go: `.NewORM(db)`
$DIR/core/services/job/job_orm_test.go: `.NewEIP55Address()`
$DIR/core/services/job/job_orm_test.go: `.String()`
$DIR/core/services/job/job_orm_test.go: `.NewEIP55Address()`
$DIR/core/services/job/job_orm_test.go: `.String()`
$DIR/core/services/job/job_orm_test.go: `.ValidatedVRFSpec(testspecs.GenerateVRFSpec(
testspecs.VRFSpecParams{
RequestedConfsDelay: 10,
FromAddresses: fromAddresses,
ChunkSize: 25,
BackoffInitialDelay: time.Minute,
BackoffMaxDelay: time.Hour,
GasLanePrice: assets.GWei(100),
VRFOwnerAddress: "0x32891BD79647DC9136Fc0a59AAB48c7825eb624c",
}).
Toml())`
$DIR/core/services/job/job_orm_test.go: `.GenerateVRFSpec(
testspecs.VRFSpecParams{
RequestedConfsDelay: 10,
FromAddresses: fromAddresses,
ChunkSize: 25,
BackoffInitialDelay: time.Minute,
BackoffMaxDelay: time.Hour,
GasLanePrice: assets.GWei(100),
VRFOwnerAddress: "0x32891BD79647DC9136Fc0a59AAB48c7825eb624c",
})`
$DIR/core/services/job/job_orm_test.go: `.GWei(100)`
$DIR/core/services/job/job_orm_test.go: `.
Toml()`
$DIR/core/services/job/job_orm_test.go: `.AssertCount(t, db, "vrf_specs", 1)`
$DIR/core/services/job/job_orm_test.go: `.AssertCount(t, db, "jobs", 1)`
$DIR/core/services/job/job_orm_test.go: `.BytesToAddress(b)`
$DIR/core/services/job/job_orm_test.go: `.String()`
$DIR/core/services/job/job_orm_test.go: `.AssertCount(t, db, "vrf_specs", 0)`
$DIR/core/services/job/job_orm_test.go: `.AssertCount(t, db, "jobs", 0)`
$DIR/core/services/job/job_orm_test.go: `.ValidatedVRFSpec(testspecs.GenerateVRFSpec(testspecs.VRFSpecParams{RequestTimeout: 1 * time.Hour}).Toml())`
$DIR/core/services/job/job_orm_test.go: `.GenerateVRFSpec(testspecs.VRFSpecParams{RequestTimeout: 1 * time.Hour})`
$DIR/core/services/job/job_orm_test.go: `.Toml()`
$DIR/core/services/job/job_orm_test.go: `.AssertCount(t, db, "vrf_specs", 1)`
$DIR/core/services/job/job_orm_test.go: `.AssertCount(t, db, "jobs", 1)`
$DIR/core/services/job/job_orm_test.go: `.AssertCount(t, db, "vrf_specs", 0)`
$DIR/core/services/job/job_orm_test.go: `.Context(t)`
$DIR/core/services/job/job_orm_test.go: `.NewTestGeneralConfig(t)`
$DIR/core/services/job/job_orm_test.go: `.NewSqlxDB(t)`
$DIR/core/services/job/job_orm_test.go: `.NewKeyStore(t, db)`
$DIR/core/services/job/job_orm_test.go: `.TestLogger(t)`
$DIR/core/services/job/job_orm_test.go: `.NewORM(db, lggr, config.JobPipeline().MaxSuccessfulRuns())`
$DIR/core/services/job/job_orm_test.go: `.JobPipeline()`
$DIR/core/services/job/job_orm_test.go: `.MaxSuccessfulRuns()`
$DIR/core/services/job/job_orm_test.go: `.NewORM(db)`
$DIR/core/services/job/job_orm_test.go: `.NewEIP55Address()`
$DIR/core/services/job/job_orm_test.go: `.String()`
$DIR/core/services/job/job_orm_test.go: `.NewEIP55Address()`
$DIR/core/services/job/job_orm_test.go: `.String()`
$DIR/core/services/job/job_orm_test.go: `.ValidatedVRFSpec(testspecs.GenerateVRFSpec(
testspecs.VRFSpecParams{
VRFVersion: vrfcommon.V2Plus,
RequestedConfsDelay: 10,
FromAddresses: fromAddresses,
ChunkSize: 25,
BackoffInitialDelay: time.Minute,
BackoffMaxDelay: time.Hour,
GasLanePrice: assets.GWei(100),
CustomRevertsPipelineEnabled: true,
}).
Toml())`
$DIR/core/services/job/job_orm_test.go: `.GenerateVRFSpec(
testspecs.VRFSpecParams{
VRFVersion: vrfcommon.V2Plus,
RequestedConfsDelay: 10,
FromAddresses: fromAddresses,
ChunkSize: 25,
BackoffInitialDelay: time.Minute,
BackoffMaxDelay: time.Hour,
GasLanePrice: assets.GWei(100),
CustomRevertsPipelineEnabled: true,
})`
$DIR/core/services/job/job_orm_test.go: `.GWei(100)`
$DIR/core/services/job/job_orm_test.go: `.
Toml()`
$DIR/core/services/job/job_orm_test.go: `.AssertCount(t, db, "vrf_specs", 1)`
$DIR/core/services/job/job_orm_test.go: `.AssertCount(t, db, "jobs", 1)`
$DIR/core/services/job/job_orm_test.go: `.BytesToAddress(b)`
$DIR/core/services/job/job_orm_test.go: `.String()`
$DIR/core/services/job/job_orm_test.go: `.AssertCount(t, db, "vrf_specs", 0)`
$DIR/core/services/job/job_orm_test.go: `.AssertCount(t, db, "jobs", 0)`
$DIR/core/services/job/job_orm_test.go: `.ValidatedVRFSpec(testspecs.GenerateVRFSpec(testspecs.VRFSpecParams{
VRFVersion: vrfcommon.V2Plus,
RequestTimeout: 1 * time.Hour,
FromAddresses: fromAddresses,
}).Toml())`
$DIR/core/services/job/job_orm_test.go: `.GenerateVRFSpec(testspecs.VRFSpecParams{
VRFVersion: vrfcommon.V2Plus,
RequestTimeout: 1 * time.Hour,
FromAddresses: fromAddresses,
})`
$DIR/core/services/job/job_orm_test.go: `.Toml()`
$DIR/core/services/job/job_orm_test.go: `.AssertCount(t, db, "vrf_specs", 1)`
$DIR/core/services/job/job_orm_test.go: `.AssertCount(t, db, "jobs", 1)`
$DIR/core/services/job/job_orm_test.go: `.AssertCount(t, db, "vrf_specs", 0)`
$DIR/core/services/job/job_orm_test.go: `.Context(t)`
$DIR/core/services/job/job_orm_test.go: `.NewTestGeneralConfig(t)`
$DIR/core/services/job/job_orm_test.go: `.NewSqlxDB(t)`
$DIR/core/services/job/job_orm_test.go: `.NewKeyStore(t, db)`
$DIR/core/services/job/job_orm_test.go: `.TestLogger(t)`
$DIR/core/services/job/job_orm_test.go: `.NewORM(db, lggr, config.JobPipeline().MaxSuccessfulRuns())`
$DIR/core/services/job/job_orm_test.go: `.JobPipeline()`
$DIR/core/services/job/job_orm_test.go: `.MaxSuccessfulRuns()`
$DIR/core/services/job/job_orm_test.go: `.NewORM(db)`
$DIR/core/services/job/job_orm_test.go: `.ValidatedBootstrapSpecToml(testspecs.GetOCRBootstrapSpec())`
$DIR/core/services/job/job_orm_test.go: `.GetOCRBootstrapSpec()`
$DIR/core/services/job/job_orm_test.go: `.CreateJob(ctx, &jb)`
$DIR/core/services/job/job_orm_test.go: `.AssertCount(t, db, "bootstrap_specs", 1)`
$DIR/core/services/job/job_orm_test.go: `.AssertCount(t, db, "jobs", 1)`
$DIR/core/services/job/job_orm_test.go: `.AssertCount(t, db, "bootstrap_specs", 0)`
$DIR/core/services/job/job_orm_test.go: `.NewGeneralConfig(t, nil)`
$DIR/core/services/job/job_orm_test.go: `.NewSqlxDB(t)`
$DIR/core/services/job/job_orm_test.go: `.NewKeyStore(t, db)`
$DIR/core/services/job/job_orm_test.go: `.TestLogger(t)`
$DIR/core/services/job/job_orm_test.go: `.NewORM(db, lggr, config.JobPipeline().MaxSuccessfulRuns())`
$DIR/core/services/job/job_orm_test.go: `.JobPipeline()`
$DIR/core/services/job/job_orm_test.go: `.MaxSuccessfulRuns()`
$DIR/core/services/job/job_orm_test.go: `.NewORM(db)`
$DIR/core/services/job/job_orm_test.go: `.Run("evm chain id validation for ocr works", func(t *testing.T) {
jb := job.Job{
Type: job.OffchainReporting,
OCROracleSpec: &job.OCROracleSpec{},
}
assert.Equal(t, "CreateJobFailed: evm chain id must be defined", jobORM.CreateJob(testutils.Context(t), &jb).Error())
})`
$DIR/core/services/job/job_orm_test.go: `.Run("evm chain id validation for direct request works", func(t *testing.T) {
jb := job.Job{
Type: job.DirectRequest,
DirectRequestSpec: &job.DirectRequestSpec{},
}
assert.Equal(t, "CreateJobFailed: evm chain id must be defined", jobORM.CreateJob(testutils.Context(t), &jb).Error())
})`
$DIR/core/services/job/job_orm_test.go: `.Run("evm chain id validation for flux monitor works", func(t *testing.T) {
jb := job.Job{
Type: job.FluxMonitor,
FluxMonitorSpec: &job.FluxMonitorSpec{},
}
assert.Equal(t, "CreateJobFailed: evm chain id must be defined", jobORM.CreateJob(testutils.Context(t), &jb).Error())
})`
$DIR/core/services/job/job_orm_test.go: `.Run("evm chain id validation for keepers works", func(t *testing.T) {
jb := job.Job{
Type: job.Keeper,
KeeperSpec: &job.KeeperSpec{},
}
assert.Equal(t, "CreateJobFailed: evm chain id must be defined", jobORM.CreateJob(testutils.Context(t), &jb).Error())
})`
$DIR/core/services/job/job_orm_test.go: `.Run("evm chain id validation for vrf works", func(t *testing.T) {
jb := job.Job{
Type: job.VRF,
VRFSpec: &job.VRFSpec{},
}
assert.Equal(t, "CreateJobFailed: evm chain id must be defined", jobORM.CreateJob(testutils.Context(t), &jb).Error())
})`
$DIR/core/services/job/job_orm_test.go: `.Run("evm chain id validation for block hash store works", func(t *testing.T) {
jb := job.Job{
Type: job.BlockhashStore,
BlockhashStoreSpec: &job.BlockhashStoreSpec{},
}
assert.Equal(t, "CreateJobFailed: evm chain id must be defined", jobORM.CreateJob(testutils.Context(t), &jb).Error())
})`
$DIR/core/services/job/job_orm_test.go: `.Run("evm chain id validation for block header feeder works", func(t *testing.T) {
jb := job.Job{
Type: job.BlockHeaderFeeder,
BlockHeaderFeederSpec: &job.BlockHeaderFeederSpec{},
}
assert.Equal(t, "CreateJobFailed: evm chain id must be defined", jobORM.CreateJob(testutils.Context(t), &jb).Error())
})`
$DIR/core/services/job/job_orm_test.go: `.Run("evm chain id validation for legacy gas station server spec works", func(t *testing.T) {
jb := job.Job{
Type: job.LegacyGasStationServer,
LegacyGasStationServerSpec: &job.LegacyGasStationServerSpec{},
}
assert.Equal(t, "CreateJobFailed: evm chain id must be defined", jobORM.CreateJob(testutils.Context(t), &jb).Error())
})`
$DIR/core/services/job/job_orm_test.go: `.Context(t)`
$DIR/core/services/job/job_orm_test.go: `.New(testutils.NewRandomEVMChainID())`
$DIR/core/services/job/job_orm_test.go: `.NewRandomEVMChainID()`
$DIR/core/services/job/job_orm_test.go: `.NewGeneralConfig(t, func(c *chainlink.Config, s *chainlink.Secrets) {
enabled := true
c.EVM = append(c.EVM, &evmcfg.EVMConfig{
ChainID: customChainID,
Chain: evmcfg.Defaults(customChainID),
Enabled: &enabled,
Nodes: evmcfg.EVMNodes{{}},
})
})`
$DIR/core/services/job/job_orm_test.go: `.Defaults(customChainID)`
$DIR/core/services/job/job_orm_test.go: `.NewSqlxDB(t)`
$DIR/core/services/job/job_orm_test.go: `.NewKeyStore(t, db)`
$DIR/core/services/job/job_orm_test.go: `.TestLogger(t)`
$DIR/core/services/job/job_orm_test.go: `.NewORM(db, lggr, config.JobPipeline().MaxSuccessfulRuns())`
$DIR/core/services/job/job_orm_test.go: `.JobPipeline()`
$DIR/core/services/job/job_orm_test.go: `.MaxSuccessfulRuns()`
$DIR/core/services/job/job_orm_test.go: `.NewORM(db)`
$DIR/core/services/job/job_orm_test.go: `.MustInsertRandomKey(t, keyStore.Eth())`
$DIR/core/services/job/job_orm_test.go: `.Eth()`
$DIR/core/services/job/job_orm_test.go: `.MustCreateBridge(t, db, cltest.BridgeOpts{})`
$DIR/core/services/job/job_orm_test.go: `.MustCreateBridge(t, db, cltest.BridgeOpts{})`
$DIR/core/services/job/job_orm_test.go: `.New()`
$DIR/core/services/job/job_orm_test.go: `.GenerateOCRSpec(testspecs.OCRSpecParams{
Name: "job3",
EVMChainID: customChainID.String(),
DS1BridgeName: bridge.Name.String(),
DS2BridgeName: bridge2.Name.String(),
TransmitterAddress: address.Hex(),
JobID: externalJobID.UUID.String(),
})`
$DIR/core/services/job/job_orm_test.go: `.String()`
$DIR/core/services/job/job_orm_test.go: `.Name.String()`
$DIR/core/services/job/job_orm_test.go: `.Name.String()`
$DIR/core/services/job/job_orm_test.go: `.Hex()`
$DIR/core/services/job/job_orm_test.go: `.UUID.String()`
$DIR/core/services/job/job_orm_test.go: `.NewChainRelayExtenders(t, evmtest.TestChainOpts{DB: db, GeneralConfig: config, KeyStore: keyStore.Eth()})`
$DIR/core/services/job/job_orm_test.go: `.Eth()`
$DIR/core/services/job/job_orm_test.go: `.NewLegacyChainsFromRelayerExtenders(relayExtenders)`
$DIR/core/services/job/job_orm_test.go: `.ValidatedOracleSpecToml(config, legacyChains, spec.Toml())`
$DIR/core/services/job/job_orm_test.go: `.Toml()`
$DIR/core/services/job/job_orm_test.go: `.Context(t)`
$DIR/core/services/job/job_orm_test.go: `.CreateJob(ctx, &jb)`
$DIR/core/services/job/job_orm_test.go: `.AssertCount(t, db, "ocr_oracle_specs", 1)`
$DIR/core/services/job/job_orm_test.go: `.AssertCount(t, db, "jobs", 1)`
$DIR/core/services/job/job_orm_test.go: `.New()`
$DIR/core/services/job/job_orm_test.go: `.UUID.String()`
$DIR/core/services/job/job_orm_test.go: `.ValidatedOracleSpecToml(config, legacyChains, spec.Toml())`
$DIR/core/services/job/job_orm_test.go: `.Toml()`
$DIR/core/services/job/job_orm_test.go: `.CreateJob(ctx, &jba)`
$DIR/core/services/job/job_orm_test.go: `.New()`
$DIR/core/services/job/job_orm_test.go: `.UUID.String()`
$DIR/core/services/job/job_orm_test.go: `.ValidatedOracleSpecToml(config, legacyChains, spec.Toml())`
$DIR/core/services/job/job_orm_test.go: `.Toml()`
$DIR/core/services/job/job_orm_test.go: `.CreateJob(ctx, &jb2)`
$DIR/core/services/job/job_orm_test.go: `.Context(t)`
$DIR/core/services/job/job_orm_test.go: `.New(testutils.NewRandomEVMChainID())`
$DIR/core/services/job/job_orm_test.go: `.NewRandomEVMChainID()`
$DIR/core/services/job/job_orm_test.go: `.NewGeneralConfig(t, func(c *chainlink.Config, s *chainlink.Secrets) {
enabled := true
c.EVM = append(c.EVM, &evmcfg.EVMConfig{
ChainID: customChainID,
Chain: evmcfg.Defaults(customChainID),
Enabled: &enabled,
Nodes: evmcfg.EVMNodes{{}},
})
})`
$DIR/core/services/job/job_orm_test.go: `.Defaults(customChainID)`
$DIR/core/services/job/job_orm_test.go: `.NewSqlxDB(t)`
$DIR/core/services/job/job_orm_test.go: `.NewKeyStore(t, db)`
$DIR/core/services/job/job_orm_test.go: `.TestLogger(t)`
$DIR/core/services/job/job_orm_test.go: `.NewORM(db, lggr, config.JobPipeline().MaxSuccessfulRuns())`
$DIR/core/services/job/job_orm_test.go: `.JobPipeline()`
$DIR/core/services/job/job_orm_test.go: `.MaxSuccessfulRuns()`
$DIR/core/services/job/job_orm_test.go: `.NewORM(db)`
$DIR/core/services/job/job_orm_test.go: `.MustInsertRandomKey(t, keyStore.Eth())`
$DIR/core/services/job/job_orm_test.go: `.Eth()`
$DIR/core/services/job/job_orm_test.go: `.ValidatedOracleSpecToml(testutils.Context(t), config.OCR2(), config.Insecure(), testspecs.GetOCR2EVMSpecMinimal(), nil)`
$DIR/core/services/job/job_orm_test.go: `.Context(t)`
$DIR/core/services/job/job_orm_test.go: `.OCR2()`
$DIR/core/services/job/job_orm_test.go: `.Insecure()`
$DIR/core/services/job/job_orm_test.go: `.GetOCR2EVMSpecMinimal()`
$DIR/core/services/job/job_orm_test.go: `.StringFrom("Job 1")`
$DIR/core/services/job/job_orm_test.go: `.StringFrom(address.String())`
$DIR/core/services/job/job_orm_test.go: `.String()`
$DIR/core/services/job/job_orm_test.go: `.CreateJob(ctx, &jb)`
$DIR/core/services/job/job_orm_test.go: `.ValidatedOracleSpecToml(testutils.Context(t), config.OCR2(), config.Insecure(), testspecs.GetOCR2EVMSpecMinimal(), nil)`
$DIR/core/services/job/job_orm_test.go: `.Context(t)`
$DIR/core/services/job/job_orm_test.go: `.OCR2()`
$DIR/core/services/job/job_orm_test.go: `.Insecure()`
$DIR/core/services/job/job_orm_test.go: `.GetOCR2EVMSpecMinimal()`
$DIR/core/services/job/job_orm_test.go: `.StringFrom("Job with same chain id & contract address")`
$DIR/core/services/job/job_orm_test.go: `.StringFrom(address.String())`
$DIR/core/services/job/job_orm_test.go: `.String()`
$DIR/core/services/job/job_orm_test.go: `.CreateJob(ctx, &jb2)`
$DIR/core/services/job/job_orm_test.go: `.ValidatedOracleSpecToml(testutils.Context(t), config.OCR2(), config.Insecure(), testspecs.GetOCR2EVMSpecMinimal(), nil)`
$DIR/core/services/job/job_orm_test.go: `.Context(t)`
$DIR/core/services/job/job_orm_test.go: `.OCR2()`
$DIR/core/services/job/job_orm_test.go: `.Insecure()`
$DIR/core/services/job/job_orm_test.go: `.GetOCR2EVMSpecMinimal()`
$DIR/core/services/job/job_orm_test.go: `.StringFrom("Job with different chain id & same contract address")`
$DIR/core/services/job/job_orm_test.go: `.StringFrom(address.String())`
$DIR/core/services/job/job_orm_test.go: `.String()`
$DIR/core/services/job/job_orm_test.go: `.Int64()`
$DIR/core/services/job/job_orm_test.go: `.CreateJob(ctx, &jb3)`
$DIR/core/services/job/job_orm_test.go: `.Context(t)`
$DIR/core/services/job/job_orm_test.go: `.New(testutils.NewRandomEVMChainID())`
$DIR/core/services/job/job_orm_test.go: `.NewRandomEVMChainID()`
$DIR/core/services/job/job_orm_test.go: `.NewGeneralConfig(t, func(c *chainlink.Config, s *chainlink.Secrets) {
enabled := true
c.EVM = append(c.EVM, &evmcfg.EVMConfig{
ChainID: customChainID,
Chain: evmcfg.Defaults(customChainID),
Enabled: &enabled,
Nodes: evmcfg.EVMNodes{{}},
})
})`
$DIR/core/services/job/job_orm_test.go: `.Defaults(customChainID)`
$DIR/core/services/job/job_orm_test.go: `.NewSqlxDB(t)`
$DIR/core/services/job/job_orm_test.go: `.NewKeyStore(t, db)`
$DIR/core/services/job/job_orm_test.go: `.TestLogger(t)`
$DIR/core/services/job/job_orm_test.go: `.NewORM(db, lggr, config.JobPipeline().MaxSuccessfulRuns())`
$DIR/core/services/job/job_orm_test.go: `.JobPipeline()`
$DIR/core/services/job/job_orm_test.go: `.MaxSuccessfulRuns()`
$DIR/core/services/job/job_orm_test.go: `.NewORM(db)`
$DIR/core/services/job/job_orm_test.go: `.ValidatedOracleSpecToml(testutils.Context(t), config.OCR2(), config.Insecure(), testspecs.GetOCR2EVMSpecMinimal(), nil)`
$DIR/core/services/job/job_orm_test.go: `.Context(t)`
$DIR/core/services/job/job_orm_test.go: `.OCR2()`
$DIR/core/services/job/job_orm_test.go: `.Insecure()`
$DIR/core/services/job/job_orm_test.go: `.GetOCR2EVMSpecMinimal()`
$DIR/core/services/job/job_orm_test.go: `.Run("sending keys or transmitterID must be defined", func(t *testing.T) {
ctx := testutils.Context(t)
jb.OCR2OracleSpec.TransmitterID = null.String{}
assert.Equal(t, "CreateJobFailed: neither sending keys nor transmitter ID is defined", jobORM.CreateJob(ctx, &jb).Error())
})`
$DIR/core/services/job/job_orm_test.go: `.Context(t)`
$DIR/core/services/job/job_orm_test.go: `.MustInsertRandomKey(t, keyStore.Eth())`
$DIR/core/services/job/job_orm_test.go: `.Eth()`
$DIR/core/services/job/job_orm_test.go: `.Run("sending keys validation works properly", func(t *testing.T) {
ctx := testutils.Context(t)
jb.OCR2OracleSpec.TransmitterID = null.String{}
_, address2 := cltest.MustInsertRandomKey(t, keyStore.Eth())
jb.OCR2OracleSpec.RelayConfig["sendingKeys"] = interface{}([]any{address.String(), address2.String(), common.HexToAddress("0X0").String()})
assert.Equal(t, "CreateJobFailed: no EVM key matching: \"0x0000000000000000000000000000000000000000\": no such sending key exists", jobORM.CreateJob(ctx, &jb).Error())
jb.OCR2OracleSpec.RelayConfig["sendingKeys"] = interface{}([]any{1, 2, 3})
assert.Equal(t, "CreateJobFailed: sending keys are of wrong type", jobORM.CreateJob(ctx, &jb).Error())
})`
$DIR/core/services/job/job_orm_test.go: `.Context(t)`
$DIR/core/services/job/job_orm_test.go: `.MustInsertRandomKey(t, keyStore.Eth())`
$DIR/core/services/job/job_orm_test.go: `.Eth()`
$DIR/core/services/job/job_orm_test.go: `.String()`
$DIR/core/services/job/job_orm_test.go: `.String()`
$DIR/core/services/job/job_orm_test.go: `.HexToAddress("0X0")`
$DIR/core/services/job/job_orm_test.go: `.String()`
$DIR/core/services/job/job_orm_test.go: `.Run("sending keys and transmitter ID can't both be defined", func(t *testing.T) {
ctx := testutils.Context(t)
jb.OCR2OracleSpec.TransmitterID = null.StringFrom(address.String())
jb.OCR2OracleSpec.RelayConfig["sendingKeys"] = interface{}([]any{address.String()})
assert.Equal(t, "CreateJobFailed: sending keys and transmitter ID can't both be defined", jobORM.CreateJob(ctx, &jb).Error())
})`
$DIR/core/services/job/job_orm_test.go: `.Context(t)`
$DIR/core/services/job/job_orm_test.go: `.StringFrom(address.String())`
$DIR/core/services/job/job_orm_test.go: `.String()`
$DIR/core/services/job/job_orm_test.go: `.String()`
$DIR/core/services/job/job_orm_test.go: `.Context(t)`
$DIR/core/services/job/job_orm_test.go: `.StringFrom("transmitterID that doesn't have a match in key store")`
$DIR/core/services/job/job_orm_test.go: `.Context(t)`
$DIR/core/services/job/job_orm_test.go: `.NewGeneralConfig(t, func(c *chainlink.Config, s *chainlink.Secrets) {})`
$DIR/core/services/job/job_orm_test.go: `.NewKeyStore(t, pgtest.NewSqlxDB(t))`
$DIR/core/services/job/job_orm_test.go: `.NewSqlxDB(t)`
$DIR/core/services/job/job_orm_test.go: `.ValidatedOracleSpecToml(testutils.Context(t), config.OCR2(), config.Insecure(), testspecs.GetOCR2EVMSpecMinimal(), nil)`
$DIR/core/services/job/job_orm_test.go: `.Context(t)`
$DIR/core/services/job/job_orm_test.go: `.OCR2()`
$DIR/core/services/job/job_orm_test.go: `.Insecure()`
$DIR/core/services/job/job_orm_test.go: `.GetOCR2EVMSpecMinimal()`
$DIR/core/services/job/job_orm_test.go: `.Run("test ETH key validation", func(t *testing.T) {
ctx := testutils.Context(t)
jb.OCR2OracleSpec.Relay = types.NetworkEVM
err := job.ValidateKeyStoreMatch(ctx, jb.OCR2OracleSpec, keyStore, "bad key")
require.EqualError(t, err, "no EVM key matching: \"bad key\"")
_, evmKey := cltest.MustInsertRandomKey(t, keyStore.Eth())
err = job.ValidateKeyStoreMatch(ctx, jb.OCR2OracleSpec, keyStore, evmKey.String())
require.NoError(t, err)
})`
$DIR/core/services/job/job_orm_test.go: `.Context(t)`
$DIR/core/services/job/job_orm_test.go: `.ValidateKeyStoreMatch(ctx, jb.OCR2OracleSpec, keyStore, "bad key")`
$DIR/core/services/job/job_orm_test.go: `.MustInsertRandomKey(t, keyStore.Eth())`
$DIR/core/services/job/job_orm_test.go: `.Eth()`
$DIR/core/services/job/job_orm_test.go: `.ValidateKeyStoreMatch(ctx, jb.OCR2OracleSpec, keyStore, evmKey.String())`
$DIR/core/services/job/job_orm_test.go: `.String()`
$DIR/core/services/job/job_orm_test.go: `.Run("test Cosmos key validation", func(t *testing.T) {
ctx := testutils.Context(t)
jb.OCR2OracleSpec.Relay = types.NetworkCosmos
err := job.ValidateKeyStoreMatch(ctx, jb.OCR2OracleSpec, keyStore, "bad key")
require.EqualError(t, err, "no Cosmos key matching: \"bad key\"")
cosmosKey, err := keyStore.Cosmos().Create(ctx)
require.NoError(t, err)
err = job.ValidateKeyStoreMatch(ctx, jb.OCR2OracleSpec, keyStore, cosmosKey.ID())
require.NoError(t, err)
})`
$DIR/core/services/job/job_orm_test.go: `.Context(t)`
$DIR/core/services/job/job_orm_test.go: `.ValidateKeyStoreMatch(ctx, jb.OCR2OracleSpec, keyStore, "bad key")`
$DIR/core/services/job/job_orm_test.go: `.Cosmos()`
$DIR/core/services/job/job_orm_test.go: `.Create(ctx)`
$DIR/core/services/job/job_orm_test.go: `.ValidateKeyStoreMatch(ctx, jb.OCR2OracleSpec, keyStore, cosmosKey.ID())`
$DIR/core/services/job/job_orm_test.go: `.ID()`
$DIR/core/services/job/job_orm_test.go: `.Run("test Solana key validation", func(t *testing.T) {
ctx := testutils.Context(t)
jb.OCR2OracleSpec.Relay = types.NetworkSolana
err := job.ValidateKeyStoreMatch(ctx, jb.OCR2OracleSpec, keyStore, "bad key")
require.EqualError(t, err, "no Solana key matching: \"bad key\"")
solanaKey, err := keyStore.Solana().Create(ctx)
require.NoError(t, err)
err = job.ValidateKeyStoreMatch(ctx, jb.OCR2OracleSpec, keyStore, solanaKey.ID())
require.NoError(t, err)
})`
$DIR/core/services/job/job_orm_test.go: `.Context(t)`
$DIR/core/services/job/job_orm_test.go: `.ValidateKeyStoreMatch(ctx, jb.OCR2OracleSpec, keyStore, "bad key")`
$DIR/core/services/job/job_orm_test.go: `.Solana()`
$DIR/core/services/job/job_orm_test.go: `.Create(ctx)`
$DIR/core/services/job/job_orm_test.go: `.ValidateKeyStoreMatch(ctx, jb.OCR2OracleSpec, keyStore, solanaKey.ID())`
$DIR/core/services/job/job_orm_test.go: `.ID()`
$DIR/core/services/job/job_orm_test.go: `.Run("test Starknet key validation", func(t *testing.T) {
ctx := testutils.Context(t)
jb.OCR2OracleSpec.Relay = types.NetworkStarkNet
err := job.ValidateKeyStoreMatch(ctx, jb.OCR2OracleSpec, keyStore, "bad key")
require.EqualError(t, err, "no Starknet key matching: \"bad key\"")
starkNetKey, err := keyStore.StarkNet().Create(ctx)
require.NoError(t, err)
err = job.ValidateKeyStoreMatch(ctx, jb.OCR2OracleSpec, keyStore, starkNetKey.ID())
require.NoError(t, err)
})`
$DIR/core/services/job/job_orm_test.go: `.Context(t)`
$DIR/core/services/job/job_orm_test.go: `.ValidateKeyStoreMatch(ctx, jb.OCR2OracleSpec, keyStore, "bad key")`
$DIR/core/services/job/job_orm_test.go: `.StarkNet()`
$DIR/core/services/job/job_orm_test.go: `.Create(ctx)`
$DIR/core/services/job/job_orm_test.go: `.ValidateKeyStoreMatch(ctx, jb.OCR2OracleSpec, keyStore, starkNetKey.ID())`
$DIR/core/services/job/job_orm_test.go: `.ID()`
$DIR/core/services/job/job_orm_test.go: `.Context(t)`
$DIR/core/services/job/job_orm_test.go: `.ValidateKeyStoreMatch(ctx, jb.OCR2OracleSpec, keyStore, "bad key")`
$DIR/core/services/job/job_orm_test.go: `.CSA()`
$DIR/core/services/job/job_orm_test.go: `.Create(ctx)`
$DIR/core/services/job/job_orm_test.go: `.ValidateKeyStoreMatch(ctx, jb.OCR2OracleSpec, keyStore, csaKey.ID())`
$DIR/core/services/job/job_orm_test.go: `.ID()`
$DIR/core/services/job/job_orm_test.go: `.Context(t)`
$DIR/core/services/job/job_orm_test.go: `.NewTestGeneralConfig(t)`
$DIR/core/services/job/job_orm_test.go: `.NewSqlxDB(t)`
$DIR/core/services/job/job_orm_test.go: `.NewKeyStore(t, db)`
$DIR/core/services/job/job_orm_test.go: `.NewORM(db, logger.TestLogger(t), config.JobPipeline().MaxSuccessfulRuns())`
$DIR/core/services/job/job_orm_test.go: `.TestLogger(t)`
$DIR/core/services/job/job_orm_test.go: `.JobPipeline()`
$DIR/core/services/job/job_orm_test.go: `.MaxSuccessfulRuns()`
$DIR/core/services/job/job_orm_test.go: `.NewORM(db)`
$DIR/core/services/job/job_orm_test.go: `.MustCreateBridge(t, db, cltest.BridgeOpts{})`
$DIR/core/services/job/job_orm_test.go: `.MustCreateBridge(t, db, cltest.BridgeOpts{})`
$DIR/core/services/job/job_orm_test.go: `.MustInsertRandomKey(t, keyStore.Eth())`
$DIR/core/services/job/job_orm_test.go: `.Eth()`
$DIR/core/services/job/job_orm_test.go: `.NewChainRelayExtenders(t, evmtest.TestChainOpts{DB: db, GeneralConfig: config, KeyStore: keyStore.Eth()})`
$DIR/core/services/job/job_orm_test.go: `.Eth()`
$DIR/core/services/job/job_orm_test.go: `.NewLegacyChainsFromRelayerExtenders(relayExtenders)`
$DIR/core/services/job/job_orm_test.go: `.ValidatedOracleSpecToml(config, legacyChains,
testspecs.GenerateOCRSpec(testspecs.OCRSpecParams{
JobID: uuid.New().String(),
TransmitterAddress: address.Hex(),
DS1BridgeName: bridge.Name.String(),
DS2BridgeName: bridge2.Name.String(),
}).Toml(),
)`
$DIR/core/services/job/job_orm_test.go: `.GenerateOCRSpec(testspecs.OCRSpecParams{
JobID: uuid.New().String(),
TransmitterAddress: address.Hex(),
DS1BridgeName: bridge.Name.String(),
DS2BridgeName: bridge2.Name.String(),
})`
$DIR/core/services/job/job_orm_test.go: `.New()`
$DIR/core/services/job/job_orm_test.go: `.String()`
$DIR/core/services/job/job_orm_test.go: `.Hex()`
$DIR/core/services/job/job_orm_test.go: `.Name.String()`
$DIR/core/services/job/job_orm_test.go: `.Name.String()`
$DIR/core/services/job/job_orm_test.go: `.Toml()`
$DIR/core/services/job/job_orm_test.go: `.CreateJob(ctx, &jb1)`
$DIR/core/services/job/job_orm_test.go: `.ValidatedDirectRequestSpec(
testspecs.GetDirectRequestSpec(),
)`
$DIR/core/services/job/job_orm_test.go: `.GetDirectRequestSpec()`
$DIR/core/services/job/job_orm_test.go: `.CreateJob(ctx, &jb2)`
$DIR/core/services/job/job_orm_test.go: `.Run("jobs are ordered by latest first", func(t *testing.T) {
jobs, count, err2 := orm.FindJobs(testutils.Context(t), 0, 2)
require.NoError(t, err2)
require.Len(t, jobs, 2)
assert.Equal(t, count, 2)
expectedJobs := []job.Job{jb2, jb1}
for i, exp := range expectedJobs {
assert.Equal(t, exp.ID, jobs[i].ID)
}
})`
$DIR/core/services/job/job_orm_test.go: `.FindJobs(testutils.Context(t), 0, 2)`
$DIR/core/services/job/job_orm_test.go: `.Context(t)`
$DIR/core/services/job/job_orm_test.go: `.FindJobs(testutils.Context(t), 0, 1)`
$DIR/core/services/job/job_orm_test.go: `.Context(t)`
$DIR/core/services/job/job_orm_test.go: `.Context(t)`
$DIR/core/services/job/job_orm_test.go: `.NewGeneralConfig(t, func(c *chainlink.Config, s *chainlink.Secrets) {
chainID := big.NewI(1337)
enabled := true
c.EVM = append(c.EVM, &evmcfg.EVMConfig{
ChainID: chainID,
Chain: evmcfg.Defaults(chainID),
Enabled: &enabled,
Nodes: evmcfg.EVMNodes{{}},
})
})`
$DIR/core/services/job/job_orm_test.go: `.NewI(1337)`
$DIR/core/services/job/job_orm_test.go: `.Defaults(chainID)`
$DIR/core/services/job/job_orm_test.go: `.NewSqlxDB(t)`
$DIR/core/services/job/job_orm_test.go: `.NewKeyStore(t, db)`
$DIR/core/services/job/job_orm_test.go: `.NewORM(db, logger.TestLogger(t), config.JobPipeline().MaxSuccessfulRuns())`
$DIR/core/services/job/job_orm_test.go: `.TestLogger(t)`
$DIR/core/services/job/job_orm_test.go: `.JobPipeline()`
$DIR/core/services/job/job_orm_test.go: `.MaxSuccessfulRuns()`
$DIR/core/services/job/job_orm_test.go: `.NewORM(db)`
$DIR/core/services/job/job_orm_test.go: `.MustCreateBridge(t, db, cltest.BridgeOpts{})`
$DIR/core/services/job/job_orm_test.go: `.MustCreateBridge(t, db, cltest.BridgeOpts{})`
$DIR/core/services/job/job_orm_test.go: `.New()`
$DIR/core/services/job/job_orm_test.go: `.MustInsertRandomKey(t, keyStore.Eth())`
$DIR/core/services/job/job_orm_test.go: `.Eth()`
$DIR/core/services/job/job_orm_test.go: `.NewChainRelayExtenders(t, evmtest.TestChainOpts{DB: db, GeneralConfig: config, KeyStore: keyStore.Eth()})`
$DIR/core/services/job/job_orm_test.go: `.Eth()`
$DIR/core/services/job/job_orm_test.go: `.NewLegacyChainsFromRelayerExtenders(relayExtenders)`
$DIR/core/services/job/job_orm_test.go: `.ValidatedOracleSpecToml(config, legacyChains,
testspecs.GenerateOCRSpec(testspecs.OCRSpecParams{
JobID: externalJobID.String(),
Name: "orig ocr spec",
TransmitterAddress: address.Hex(),
DS1BridgeName: bridge.Name.String(),
DS2BridgeName: bridge2.Name.String(),
}).Toml(),
)`
$DIR/core/services/job/job_orm_test.go: `.GenerateOCRSpec(testspecs.OCRSpecParams{
JobID: externalJobID.String(),
Name: "orig ocr spec",
TransmitterAddress: address.Hex(),
DS1BridgeName: bridge.Name.String(),
DS2BridgeName: bridge2.Name.String(),
})`
$DIR/core/services/job/job_orm_test.go: `.String()`
$DIR/core/services/job/job_orm_test.go: `.Hex()`
$DIR/core/services/job/job_orm_test.go: `.Name.String()`
$DIR/core/services/job/job_orm_test.go: `.Name.String()`
$DIR/core/services/job/job_orm_test.go: `.Toml()`
$DIR/core/services/job/job_orm_test.go: `.ValidatedOracleSpecToml(config, legacyChains,
testspecs.GenerateOCRSpec(testspecs.OCRSpecParams{
JobID: uuid.New().String(),
TransmitterAddress: address.Hex(),
Name: "ocr spec dup addr",
EVMChainID: "1337",
DS1BridgeName: bridge.Name.String(),
DS2BridgeName: bridge2.Name.String(),
}).Toml(),
)`
$DIR/core/services/job/job_orm_test.go: `.GenerateOCRSpec(testspecs.OCRSpecParams{
JobID: uuid.New().String(),
TransmitterAddress: address.Hex(),
Name: "ocr spec dup addr",
EVMChainID: "1337",
DS1BridgeName: bridge.Name.String(),
DS2BridgeName: bridge2.Name.String(),
})`
$DIR/core/services/job/job_orm_test.go: `.New()`
$DIR/core/services/job/job_orm_test.go: `.String()`
$DIR/core/services/job/job_orm_test.go: `.Hex()`
$DIR/core/services/job/job_orm_test.go: `.Name.String()`
$DIR/core/services/job/job_orm_test.go: `.Name.String()`
$DIR/core/services/job/job_orm_test.go: `.Toml()`
$DIR/core/services/job/job_orm_test.go: `.ValidatedOracleSpecToml(testutils.Context(t), config.OCR2(), config.Insecure(), testspecs.GetOCR2EVMSpecMinimal(), nil)`
$DIR/core/services/job/job_orm_test.go: `.Context(t)`
$DIR/core/services/job/job_orm_test.go: `.OCR2()`
$DIR/core/services/job/job_orm_test.go: `.Insecure()`
$DIR/core/services/job/job_orm_test.go: `.GetOCR2EVMSpecMinimal()`
$DIR/core/services/job/job_orm_test.go: `.StringFrom(address.String())`
$DIR/core/services/job/job_orm_test.go: `.String()`
$DIR/core/services/job/job_orm_test.go: `.ValidatedOracleSpecToml(
testutils.Context(t),
config.OCR2(),
config.Insecure(),
fmt.Sprintf(mercuryOracleTOML, cltest.DefaultCSAKey.PublicKeyString(), ocr2WithFeedID1),
nil,
)`
$DIR/core/services/job/job_orm_test.go: `.Context(t)`
$DIR/core/services/job/job_orm_test.go: `.OCR2()`
$DIR/core/services/job/job_orm_test.go: `.Insecure()`
$DIR/core/services/job/job_orm_test.go: `.Sprintf(mercuryOracleTOML, cltest.DefaultCSAKey.PublicKeyString(), ocr2WithFeedID1)`
$DIR/core/services/job/job_orm_test.go: `.DefaultCSAKey.PublicKeyString()`
$DIR/core/services/job/job_orm_test.go: `.ValidatedOracleSpecToml(
testutils.Context(t),
config.OCR2(),
config.Insecure(),
fmt.Sprintf(mercuryOracleTOML, cltest.DefaultCSAKey.PublicKeyString(), ocr2WithFeedID2),
nil,
)`
$DIR/core/services/job/job_orm_test.go: `.Context(t)`
$DIR/core/services/job/job_orm_test.go: `.OCR2()`
$DIR/core/services/job/job_orm_test.go: `.Insecure()`
$DIR/core/services/job/job_orm_test.go: `.Sprintf(mercuryOracleTOML, cltest.DefaultCSAKey.PublicKeyString(), ocr2WithFeedID2)`
$DIR/core/services/job/job_orm_test.go: `.DefaultCSAKey.PublicKeyString()`
$DIR/core/services/job/job_orm_test.go: `.New()`
$DIR/core/services/job/job_orm_test.go: `.StringFrom("new name")`
$DIR/core/services/job/job_orm_test.go: `.CreateJob(ctx, &job)`
$DIR/core/services/job/job_orm_test.go: `.CreateJob(ctx, &jobSameAddress)`
$DIR/core/services/job/job_orm_test.go: `.CreateJob(ctx, &jobOCR2)`
$DIR/core/services/job/job_orm_test.go: `.CreateJob(ctx, &jobOCR2WithFeedID1)`
$DIR/core/services/job/job_orm_test.go: `.CreateJob(ctx, &jobOCR2WithFeedID2)`
$DIR/core/services/job/job_orm_test.go: `.Run("by id", func(t *testing.T) {
ctx, cancel := context.WithTimeout(testutils.Context(t), 5*time.Second)
defer cancel()
jb, err2 := orm.FindJob(ctx, job.ID)
require.NoError(t, err2)
assert.Equal(t, jb.ID, job.ID)
assert.Equal(t, jb.Name, job.Name)
require.Greater(t, jb.PipelineSpecID, int32(0))
require.NotNil(t, jb.PipelineSpec)
require.NotNil(t, jb.OCROracleSpecID)
require.NotNil(t, jb.OCROracleSpec)
})`
$DIR/core/services/job/job_orm_test.go: `.WithTimeout(testutils.Context(t), 5*time.Second)`
$DIR/core/services/job/job_orm_test.go: `.Context(t)`
$DIR/core/services/job/job_orm_test.go: `.FindJob(ctx, job.ID)`
$DIR/core/services/job/job_orm_test.go: `.Run("by external job id", func(t *testing.T) {
ctx := testutils.Context(t)
jb, err2 := orm.FindJobByExternalJobID(ctx, externalJobID)
require.NoError(t, err2)
assert.Equal(t, jb.ID, job.ID)
assert.Equal(t, jb.Name, job.Name)
require.Greater(t, jb.PipelineSpecID, int32(0))
require.NotNil(t, jb.PipelineSpec)
require.NotNil(t, jb.OCROracleSpecID)
require.NotNil(t, jb.OCROracleSpec)
})`
$DIR/core/services/job/job_orm_test.go: `.Context(t)`
$DIR/core/services/job/job_orm_test.go: `.FindJobByExternalJobID(ctx, externalJobID)`
$DIR/core/services/job/job_orm_test.go: `.Run("by address", func(t *testing.T) {
ctx := testutils.Context(t)
jbID, err2 := orm.FindJobIDByAddress(ctx, job.OCROracleSpec.ContractAddress, job.OCROracleSpec.EVMChainID)
require.NoError(t, err2)
assert.Equal(t, job.ID, jbID)
_, err2 = orm.FindJobIDByAddress(ctx, "not-existing", big.NewI(0))
require.Error(t, err2)
require.ErrorIs(t, err2, sql.ErrNoRows)
})`
$DIR/core/services/job/job_orm_test.go: `.Context(t)`
$DIR/core/services/job/job_orm_test.go: `.FindJobIDByAddress(ctx, job.OCROracleSpec.ContractAddress, job.OCROracleSpec.EVMChainID)`
$DIR/core/services/job/job_orm_test.go: `.FindJobIDByAddress(ctx, "not-existing", big.NewI(0))`
$DIR/core/services/job/job_orm_test.go: `.NewI(0)`
$DIR/core/services/job/job_orm_test.go: `.Run("by address yet chain scoped", func(t *testing.T) {
ctx := testutils.Context(t)
commonAddr := jobSameAddress.OCROracleSpec.ContractAddress
// Find job ID for job on chain 1337 with common address.
jbID, err2 := orm.FindJobIDByAddress(ctx, commonAddr, jobSameAddress.OCROracleSpec.EVMChainID)
require.NoError(t, err2)
assert.Equal(t, jobSameAddress.ID, jbID)
// Find job ID for job on default evm chain with common address.
jbID, err2 = orm.FindJobIDByAddress(ctx, commonAddr, job.OCROracleSpec.EVMChainID)
require.NoError(t, err2)
assert.Equal(t, job.ID, jbID)
})`
$DIR/core/services/job/job_orm_test.go: `.Context(t)`
$DIR/core/services/job/job_orm_test.go: `.FindJobIDByAddress(ctx, commonAddr, jobSameAddress.OCROracleSpec.EVMChainID)`
$DIR/core/services/job/job_orm_test.go: `.FindJobIDByAddress(ctx, commonAddr, job.OCROracleSpec.EVMChainID)`
$DIR/core/services/job/job_orm_test.go: `.Run("by contract id without feed id", func(t *testing.T) {
ctx := testutils.Context(t)
contractID := "0x613a38AC1659769640aaE063C651F48E0250454C"
// Find job ID for ocr2 job without feedID.
jbID, err2 := orm.FindOCR2JobIDByAddress(ctx, contractID, nil)
require.NoError(t, err2)
assert.Equal(t, jobOCR2.ID, jbID)
})`
$DIR/core/services/job/job_orm_test.go: `.Context(t)`
$DIR/core/services/job/job_orm_test.go: `.FindOCR2JobIDByAddress(ctx, contractID, nil)`
$DIR/core/services/job/job_orm_test.go: `.Run("by contract id with valid feed id", func(t *testing.T) {
ctx := testutils.Context(t)
contractID := "0x0000000000000000000000000000000000000006"
feedID := common.HexToHash(ocr2WithFeedID1)
// Find job ID for ocr2 job with feed ID
jbID, err2 := orm.FindOCR2JobIDByAddress(ctx, contractID, &feedID)
require.NoError(t, err2)
assert.Equal(t, jobOCR2WithFeedID1.ID, jbID)
})`
$DIR/core/services/job/job_orm_test.go: `.Context(t)`
$DIR/core/services/job/job_orm_test.go: `.HexToHash(ocr2WithFeedID1)`
$DIR/core/services/job/job_orm_test.go: `.FindOCR2JobIDByAddress(ctx, contractID, &feedID)`
$DIR/core/services/job/job_orm_test.go: `.Context(t)`
$DIR/core/services/job/job_orm_test.go: `.HexToHash(ocr2WithFeedID2)`
$DIR/core/services/job/job_orm_test.go: `.FindOCR2JobIDByAddress(ctx, contractID, &feedID)`
$DIR/core/services/job/job_orm_test.go: `.Context(t)`
$DIR/core/services/job/job_orm_test.go: `.NewTestGeneralConfig(t)`
$DIR/core/services/job/job_orm_test.go: `.NewSqlxDB(t)`
$DIR/core/services/job/job_orm_test.go: `.NewKeyStore(t, db)`
$DIR/core/services/job/job_orm_test.go: `.NewORM(db, logger.TestLogger(t), config.JobPipeline().MaxSuccessfulRuns())`
$DIR/core/services/job/job_orm_test.go: `.TestLogger(t)`
$DIR/core/services/job/job_orm_test.go: `.JobPipeline()`
$DIR/core/services/job/job_orm_test.go: `.MaxSuccessfulRuns()`
$DIR/core/services/job/job_orm_test.go: `.NewORM(db)`
$DIR/core/services/job/job_orm_test.go: `.ValidatedDirectRequestSpec(testspecs.GetDirectRequestSpec())`
$DIR/core/services/job/job_orm_test.go: `.GetDirectRequestSpec()`
$DIR/core/services/job/job_orm_test.go: `.NewI(0)`
$DIR/core/services/job/job_orm_test.go: `.CreateJob(testutils.Context(t), &jb)`
$DIR/core/services/job/job_orm_test.go: `.Context(t)`
$DIR/core/services/job/job_orm_test.go: `.Run("with jobs", func(t *testing.T) {
ctx := testutils.Context(t)
jbs, err2 := orm.FindJobsByPipelineSpecIDs(ctx, []int32{jb.PipelineSpecID})
require.NoError(t, err2)
assert.Len(t, jbs, 1)
assert.Equal(t, jb.ID, jbs[0].ID)
assert.Equal(t, jb.Name, jbs[0].Name)
require.Greater(t, jbs[0].PipelineSpecID, int32(0))
require.Equal(t, jb.PipelineSpecID, jbs[0].PipelineSpecID)
require.NotNil(t, jbs[0].PipelineSpec)
})`
$DIR/core/services/job/job_orm_test.go: `.Context(t)`
$DIR/core/services/job/job_orm_test.go: `.FindJobsByPipelineSpecIDs(ctx, []int32{jb.PipelineSpecID})`
$DIR/core/services/job/job_orm_test.go: `.Run("without jobs", func(t *testing.T) {
ctx := testutils.Context(t)
jbs, err2 := orm.FindJobsByPipelineSpecIDs(ctx, []int32{-1})
require.NoError(t, err2)
assert.Len(t, jbs, 0)
})`
$DIR/core/services/job/job_orm_test.go: `.Context(t)`
$DIR/core/services/job/job_orm_test.go: `.FindJobsByPipelineSpecIDs(ctx, []int32{-1})`
$DIR/core/services/job/job_orm_test.go: `.Context(t)`
$DIR/core/services/job/job_orm_test.go: `.FindJobsByPipelineSpecIDs(ctx, []int32{jb.PipelineSpecID})`
$DIR/core/services/job/job_orm_test.go: `.Context(t)`
$DIR/core/services/job/job_orm_test.go: `.NewTestGeneralConfig(t)`
$DIR/core/services/job/job_orm_test.go: `.NewSqlxDB(t)`
$DIR/core/services/job/job_orm_test.go: `.NewKeyStore(t, db)`
$DIR/core/services/job/job_orm_test.go: `.NewORM(db, logger.TestLogger(t), config.JobPipeline().MaxSuccessfulRuns())`
$DIR/core/services/job/job_orm_test.go: `.TestLogger(t)`
$DIR/core/services/job/job_orm_test.go: `.JobPipeline()`
$DIR/core/services/job/job_orm_test.go: `.MaxSuccessfulRuns()`
$DIR/core/services/job/job_orm_test.go: `.NewORM(db)`
$DIR/core/services/job/job_orm_test.go: `.NewChainRelayExtenders(t, evmtest.TestChainOpts{DB: db, GeneralConfig: config, KeyStore: keyStore.Eth()})`
$DIR/core/services/job/job_orm_test.go: `.Eth()`
$DIR/core/services/job/job_orm_test.go: `.NewLegacyChainsFromRelayerExtenders(relayExtenders)`
$DIR/core/services/job/job_orm_test.go: `.MustCreateBridge(t, db, cltest.BridgeOpts{})`
$DIR/core/services/job/job_orm_test.go: `.MustCreateBridge(t, db, cltest.BridgeOpts{})`
$DIR/core/services/job/job_orm_test.go: `.New()`
$DIR/core/services/job/job_orm_test.go: `.MustInsertRandomKey(t, keyStore.Eth())`
$DIR/core/services/job/job_orm_test.go: `.Eth()`
$DIR/core/services/job/job_orm_test.go: `.ValidatedOracleSpecToml(config, legacyChains,
testspecs.GenerateOCRSpec(testspecs.OCRSpecParams{
JobID: externalJobID.String(),
TransmitterAddress: address.Hex(),
DS1BridgeName: bridge.Name.String(),
DS2BridgeName: bridge2.Name.String(),
}).Toml(),
)`
$DIR/core/services/job/job_orm_test.go: `.GenerateOCRSpec(testspecs.OCRSpecParams{
JobID: externalJobID.String(),
TransmitterAddress: address.Hex(),
DS1BridgeName: bridge.Name.String(),
DS2BridgeName: bridge2.Name.String(),
})`
$DIR/core/services/job/job_orm_test.go: `.String()`
$DIR/core/services/job/job_orm_test.go: `.Hex()`
$DIR/core/services/job/job_orm_test.go: `.Name.String()`
$DIR/core/services/job/job_orm_test.go: `.Name.String()`
$DIR/core/services/job/job_orm_test.go: `.Toml()`
$DIR/core/services/job/job_orm_test.go: `.CreateJob(testutils.Context(t), &jb)`
$DIR/core/services/job/job_orm_test.go: `.Context(t)`
$DIR/core/services/job/job_orm_test.go: `.Run("with no pipeline runs", func(t *testing.T) {
ctx := testutils.Context(t)
runs, count, err2 := orm.PipelineRuns(ctx, nil, 0, 10)
require.NoError(t, err2)
assert.Equal(t, count, 0)
assert.Empty(t, runs)
})`
$DIR/core/services/job/job_orm_test.go: `.Context(t)`
$DIR/core/services/job/job_orm_test.go: `.PipelineRuns(ctx, nil, 0, 10)`
$DIR/core/services/job/job_orm_test.go: `.Context(t)`
$DIR/core/services/job/job_orm_test.go: `.PipelineRuns(ctx, nil, 0, 10)`
$DIR/core/services/job/job_orm_test.go: `.Context(t)`
$DIR/core/services/job/job_orm_test.go: `.NewTestGeneralConfig(t)`
$DIR/core/services/job/job_orm_test.go: `.NewSqlxDB(t)`
$DIR/core/services/job/job_orm_test.go: `.NewKeyStore(t, db)`
$DIR/core/services/job/job_orm_test.go: `.NewORM(db, logger.TestLogger(t), config.JobPipeline().MaxSuccessfulRuns())`
$DIR/core/services/job/job_orm_test.go: `.TestLogger(t)`
$DIR/core/services/job/job_orm_test.go: `.JobPipeline()`
$DIR/core/services/job/job_orm_test.go: `.MaxSuccessfulRuns()`
$DIR/core/services/job/job_orm_test.go: `.NewORM(db)`
$DIR/core/services/job/job_orm_test.go: `.NewChainRelayExtenders(t, evmtest.TestChainOpts{DB: db, GeneralConfig: config, KeyStore: keyStore.Eth()})`
$DIR/core/services/job/job_orm_test.go: `.Eth()`
$DIR/core/services/job/job_orm_test.go: `.NewLegacyChainsFromRelayerExtenders(relayExtenders)`
$DIR/core/services/job/job_orm_test.go: `.MustCreateBridge(t, db, cltest.BridgeOpts{})`
$DIR/core/services/job/job_orm_test.go: `.MustCreateBridge(t, db, cltest.BridgeOpts{})`
$DIR/core/services/job/job_orm_test.go: `.New()`
$DIR/core/services/job/job_orm_test.go: `.MustInsertRandomKey(t, keyStore.Eth())`
$DIR/core/services/job/job_orm_test.go: `.Eth()`
$DIR/core/services/job/job_orm_test.go: `.ValidatedOracleSpecToml(config, legacyChains,
testspecs.GenerateOCRSpec(testspecs.OCRSpecParams{
JobID: externalJobID.String(),
TransmitterAddress: address.Hex(),
DS1BridgeName: bridge.Name.String(),
DS2BridgeName: bridge2.Name.String(),
}).Toml(),
)`
$DIR/core/services/job/job_orm_test.go: `.GenerateOCRSpec(testspecs.OCRSpecParams{
JobID: externalJobID.String(),
TransmitterAddress: address.Hex(),
DS1BridgeName: bridge.Name.String(),
DS2BridgeName: bridge2.Name.String(),
})`
$DIR/core/services/job/job_orm_test.go: `.String()`
$DIR/core/services/job/job_orm_test.go: `.Hex()`
$DIR/core/services/job/job_orm_test.go: `.Name.String()`
$DIR/core/services/job/job_orm_test.go: `.Name.String()`
$DIR/core/services/job/job_orm_test.go: `.Toml()`
$DIR/core/services/job/job_orm_test.go: `.CreateJob(testutils.Context(t), &jb)`
$DIR/core/services/job/job_orm_test.go: `.Context(t)`
$DIR/core/services/job/job_orm_test.go: `.Run("with no pipeline runs", func(t *testing.T) {
ctx := testutils.Context(t)
runs, count, err2 := orm.PipelineRuns(ctx, &jb.ID, 0, 10)
require.NoError(t, err2)
assert.Equal(t, count, 0)
assert.Empty(t, runs)
})`
$DIR/core/services/job/job_orm_test.go: `.Context(t)`
$DIR/core/services/job/job_orm_test.go: `.PipelineRuns(ctx, &jb.ID, 0, 10)`
$DIR/core/services/job/job_orm_test.go: `.Context(t)`
$DIR/core/services/job/job_orm_test.go: `.PipelineRuns(ctx, &jb.ID, 0, 10)`
$DIR/core/services/job/job_orm_test.go: `.Context(t)`
$DIR/core/services/job/job_orm_test.go: `.NewTestGeneralConfig(t)`
$DIR/core/services/job/job_orm_test.go: `.FullTestDBV2(t, nil)`
$DIR/core/services/job/job_orm_test.go: `.NewKeyStore(t, db)`
$DIR/core/services/job/job_orm_test.go: `.NewORM(db, logger.TestLogger(t), config.JobPipeline().MaxSuccessfulRuns())`
$DIR/core/services/job/job_orm_test.go: `.TestLogger(t)`
$DIR/core/services/job/job_orm_test.go: `.JobPipeline()`
$DIR/core/services/job/job_orm_test.go: `.MaxSuccessfulRuns()`
$DIR/core/services/job/job_orm_test.go: `.NewORM(db)`
$DIR/core/services/job/job_orm_test.go: `.NewChainRelayExtenders(t, evmtest.TestChainOpts{DB: db, GeneralConfig: config, KeyStore: keyStore.Eth()})`
$DIR/core/services/job/job_orm_test.go: `.Eth()`
$DIR/core/services/job/job_orm_test.go: `.NewLegacyChainsFromRelayerExtenders(relayExtenders)`
$DIR/core/services/job/job_orm_test.go: `.MustInsertRandomKey(t, keyStore.Eth())`
$DIR/core/services/job/job_orm_test.go: `.Eth()`
$DIR/core/services/job/job_orm_test.go: `.MustCreateBridge(t, db, cltest.BridgeOpts{})`
$DIR/core/services/job/job_orm_test.go: `.MustCreateBridge(t, db, cltest.BridgeOpts{})`
$DIR/core/services/job/job_orm_test.go: `.New()`
$DIR/core/services/job/job_orm_test.go: `.String()`
$DIR/core/services/job/job_orm_test.go: `.NewV2()`
$DIR/core/services/job/job_orm_test.go: `.ValidatedOracleSpecToml(config, legacyChains,
testspecs.GenerateOCRSpec(testspecs.OCRSpecParams{
JobID: jobID,
Name: fmt.Sprintf("Job #%v", jobID),
DS1BridgeName: bridge.Name.String(),
DS2BridgeName: bridge2.Name.String(),
TransmitterAddress: address.Hex(),
ContractAddress: key.Address.String(),
}).Toml())`
$DIR/core/services/job/job_orm_test.go: `.GenerateOCRSpec(testspecs.OCRSpecParams{
JobID: jobID,
Name: fmt.Sprintf("Job #%v", jobID),
DS1BridgeName: bridge.Name.String(),
DS2BridgeName: bridge2.Name.String(),
TransmitterAddress: address.Hex(),
ContractAddress: key.Address.String(),
})`
$DIR/core/services/job/job_orm_test.go: `.Sprintf("Job #%v", jobID)`
$DIR/core/services/job/job_orm_test.go: `.Name.String()`
$DIR/core/services/job/job_orm_test.go: `.Name.String()`
$DIR/core/services/job/job_orm_test.go: `.Hex()`
$DIR/core/services/job/job_orm_test.go: `.Address.String()`
$DIR/core/services/job/job_orm_test.go: `.Toml()`
$DIR/core/services/job/job_orm_test.go: `.CreateJob(testutils.Context(t), &jb)`
$DIR/core/services/job/job_orm_test.go: `.Context(t)`
$DIR/core/services/job/job_orm_test.go: `.Run("with no pipeline runs", func(t *testing.T) {
ctx := testutils.Context(t)
runIDs, err := orm.FindPipelineRunIDsByJobID(ctx, jb.ID, 0, 10)
require.NoError(t, err)
assert.Empty(t, runIDs)
})`
$DIR/core/services/job/job_orm_test.go: `.Context(t)`
$DIR/core/services/job/job_orm_test.go: `.FindPipelineRunIDsByJobID(ctx, jb.ID, 0, 10)`
$DIR/core/services/job/job_orm_test.go: `.Run("with a pipeline run", func(t *testing.T) {
ctx := testutils.Context(t)
run := mustInsertPipelineRun(t, pipelineORM, jb)
runIDs, err := orm.FindPipelineRunIDsByJobID(ctx, jb.ID, 0, 10)
require.NoError(t, err)
require.Len(t, runIDs, 1)
assert.Equal(t, run.ID, runIDs[0])
})`
$DIR/core/services/job/job_orm_test.go: `.Context(t)`
$DIR/core/services/job/job_orm_test.go: `.FindPipelineRunIDsByJobID(ctx, jb.ID, 0, 10)`
$DIR/core/services/job/job_orm_test.go: `.Run("with batch concatenation limit 10", func(t *testing.T) {
ctx := testutils.Context(t)
runIDs, err := orm.FindPipelineRunIDsByJobID(ctx, jobs[3].ID, 95, 10)
require.NoError(t, err)
require.Len(t, runIDs, 10)
assert.Equal(t, int64(4*(len(jobs)-1)), runIDs[3]-runIDs[7])
})`
$DIR/core/services/job/job_orm_test.go: `.Context(t)`
$DIR/core/services/job/job_orm_test.go: `.FindPipelineRunIDsByJobID(ctx, jobs[3].ID, 95, 10)`
$DIR/core/services/job/job_orm_test.go: `.Run("with batch concatenation limit 100", func(t *testing.T) {
ctx := testutils.Context(t)
runIDs, err := orm.FindPipelineRunIDsByJobID(ctx, jobs[3].ID, 95, 100)
require.NoError(t, err)
require.Len(t, runIDs, 100)
assert.Equal(t, int64(67*(len(jobs)-1)), runIDs[12]-runIDs[79])
})`
$DIR/core/services/job/job_orm_test.go: `.Context(t)`
$DIR/core/services/job/job_orm_test.go: `.FindPipelineRunIDsByJobID(ctx, jobs[3].ID, 95, 100)`
$DIR/core/services/job/job_orm_test.go: `.Run("with first batch empty, over limit", func(t *testing.T) {
ctx := testutils.Context(t)
runIDs, err := orm.FindPipelineRunIDsByJobID(ctx, jobs[3].ID, 0, 25)
require.NoError(t, err)
require.Len(t, runIDs, 25)
assert.Equal(t, int64(16*(len(jobs)-1)), runIDs[7]-runIDs[23])
})`
$DIR/core/services/job/job_orm_test.go: `.Context(t)`
$DIR/core/services/job/job_orm_test.go: `.FindPipelineRunIDsByJobID(ctx, jobs[3].ID, 0, 25)`
$DIR/core/services/job/job_orm_test.go: `.Context(t)`
$DIR/core/services/job/job_orm_test.go: `.FindPipelineRunIDsByJobID(ctx, jobs[3].ID, 143, 190)`
$DIR/core/services/job/job_orm_test.go: `.Context(t)`
$DIR/core/services/job/job_orm_test.go: `.NewTestGeneralConfig(t)`
$DIR/core/services/job/job_orm_test.go: `.NewSqlxDB(t)`
$DIR/core/services/job/job_orm_test.go: `.NewKeyStore(t, db)`
$DIR/core/services/job/job_orm_test.go: `.NewORM(db, logger.TestLogger(t), config.JobPipeline().MaxSuccessfulRuns())`
$DIR/core/services/job/job_orm_test.go: `.TestLogger(t)`
$DIR/core/services/job/job_orm_test.go: `.JobPipeline()`
$DIR/core/services/job/job_orm_test.go: `.MaxSuccessfulRuns()`
$DIR/core/services/job/job_orm_test.go: `.NewORM(db)`
$DIR/core/services/job/job_orm_test.go: `.NewChainRelayExtenders(t, evmtest.TestChainOpts{DB: db, GeneralConfig: config, KeyStore: keyStore.Eth()})`
$DIR/core/services/job/job_orm_test.go: `.Eth()`
$DIR/core/services/job/job_orm_test.go: `.NewLegacyChainsFromRelayerExtenders(relayExtenders)`
$DIR/core/services/job/job_orm_test.go: `.MustCreateBridge(t, db, cltest.BridgeOpts{})`
$DIR/core/services/job/job_orm_test.go: `.MustCreateBridge(t, db, cltest.BridgeOpts{})`
$DIR/core/services/job/job_orm_test.go: `.New()`
$DIR/core/services/job/job_orm_test.go: `.MustInsertRandomKey(t, keyStore.Eth())`
$DIR/core/services/job/job_orm_test.go: `.Eth()`
$DIR/core/services/job/job_orm_test.go: `.ValidatedOracleSpecToml(config, legacyChains,
testspecs.GenerateOCRSpec(testspecs.OCRSpecParams{
JobID: externalJobID.String(),
TransmitterAddress: address.Hex(),
DS1BridgeName: bridge.Name.String(),
DS2BridgeName: bridge2.Name.String(),
}).Toml(),
)`
$DIR/core/services/job/job_orm_test.go: `.GenerateOCRSpec(testspecs.OCRSpecParams{
JobID: externalJobID.String(),
TransmitterAddress: address.Hex(),
DS1BridgeName: bridge.Name.String(),
DS2BridgeName: bridge2.Name.String(),
})`
$DIR/core/services/job/job_orm_test.go: `.String()`
$DIR/core/services/job/job_orm_test.go: `.Hex()`
$DIR/core/services/job/job_orm_test.go: `.Name.String()`
$DIR/core/services/job/job_orm_test.go: `.Name.String()`
$DIR/core/services/job/job_orm_test.go: `.Toml()`
$DIR/core/services/job/job_orm_test.go: `.CreateJob(testutils.Context(t), &jb)`
$DIR/core/services/job/job_orm_test.go: `.Context(t)`
$DIR/core/services/job/job_orm_test.go: `.Run("with no pipeline runs", func(t *testing.T) {
ctx := testutils.Context(t)
runs, err2 := orm.FindPipelineRunsByIDs(ctx, []int64{-1})
require.NoError(t, err2)
assert.Empty(t, runs)
})`
$DIR/core/services/job/job_orm_test.go: `.Context(t)`
$DIR/core/services/job/job_orm_test.go: `.FindPipelineRunsByIDs(ctx, []int64{-1})`
$DIR/core/services/job/job_orm_test.go: `.Context(t)`
$DIR/core/services/job/job_orm_test.go: `.FindPipelineRunsByIDs(ctx, []int64{run.ID})`
$DIR/core/services/job/job_orm_test.go: `.Context(t)`
$DIR/core/services/job/job_orm_test.go: `.NewTestGeneralConfig(t)`
$DIR/core/services/job/job_orm_test.go: `.NewSqlxDB(t)`
$DIR/core/services/job/job_orm_test.go: `.NewKeyStore(t, db)`
$DIR/core/services/job/job_orm_test.go: `.OCR()`
$DIR/core/services/job/job_orm_test.go: `.Add(ctx, cltest.DefaultOCRKey)`
$DIR/core/services/job/job_orm_test.go: `.NewORM(db, logger.TestLogger(t), config.JobPipeline().MaxSuccessfulRuns())`
$DIR/core/services/job/job_orm_test.go: `.TestLogger(t)`
$DIR/core/services/job/job_orm_test.go: `.JobPipeline()`
$DIR/core/services/job/job_orm_test.go: `.MaxSuccessfulRuns()`
$DIR/core/services/job/job_orm_test.go: `.NewORM(db)`
$DIR/core/services/job/job_orm_test.go: `.ValidatedDirectRequestSpec(testspecs.GetDirectRequestSpec())`
$DIR/core/services/job/job_orm_test.go: `.GetDirectRequestSpec()`
$DIR/core/services/job/job_orm_test.go: `.CreateJob(testutils.Context(t), &jb)`
$DIR/core/services/job/job_orm_test.go: `.Context(t)`
$DIR/core/services/job/job_orm_test.go: `.Run("with no pipeline run", func(t *testing.T) {
ctx := testutils.Context(t)
run, err2 := orm.FindPipelineRunByID(ctx, -1)
assert.Equal(t, run, pipeline.Run{})
require.ErrorIs(t, err2, sql.ErrNoRows)
})`
$DIR/core/services/job/job_orm_test.go: `.Context(t)`
$DIR/core/services/job/job_orm_test.go: `.FindPipelineRunByID(ctx, -1)`
$DIR/core/services/job/job_orm_test.go: `.Context(t)`
$DIR/core/services/job/job_orm_test.go: `.FindPipelineRunByID(ctx, run.ID)`
$DIR/core/services/job/job_orm_test.go: `.Context(t)`
$DIR/core/services/job/job_orm_test.go: `.NewTestGeneralConfig(t)`
$DIR/core/services/job/job_orm_test.go: `.NewSqlxDB(t)`
$DIR/core/services/job/job_orm_test.go: `.NewKeyStore(t, db)`
$DIR/core/services/job/job_orm_test.go: `.OCR()`
$DIR/core/services/job/job_orm_test.go: `.Add(ctx, cltest.DefaultOCRKey)`
$DIR/core/services/job/job_orm_test.go: `.NewORM(db, logger.TestLogger(t), config.JobPipeline().MaxSuccessfulRuns())`
$DIR/core/services/job/job_orm_test.go: `.TestLogger(t)`
$DIR/core/services/job/job_orm_test.go: `.JobPipeline()`
$DIR/core/services/job/job_orm_test.go: `.MaxSuccessfulRuns()`
$DIR/core/services/job/job_orm_test.go: `.NewORM(db)`
$DIR/core/services/job/job_orm_test.go: `.ValidatedDirectRequestSpec(testspecs.GetDirectRequestSpec())`
$DIR/core/services/job/job_orm_test.go: `.GetDirectRequestSpec()`
$DIR/core/services/job/job_orm_test.go: `.CreateJob(ctx, &jb)`
$DIR/core/services/job/job_orm_test.go: `.Get(&jobSpec, "SELECT * FROM jobs")`
$DIR/core/services/job/job_orm_test.go: `.FindJobWithoutSpecErrors(ctx, jobSpec.ID)`
$DIR/core/services/job/job_orm_test.go: `.FindJobTx(testutils.Context(t), jobSpec.ID)`
$DIR/core/services/job/job_orm_test.go: `.Context(t)`
$DIR/core/services/job/job_orm_test.go: `.Context(t)`
$DIR/core/services/job/job_orm_test.go: `.NewTestGeneralConfig(t)`
$DIR/core/services/job/job_orm_test.go: `.NewSqlxDB(t)`
$DIR/core/services/job/job_orm_test.go: `.NewKeyStore(t, db)`
$DIR/core/services/job/job_orm_test.go: `.OCR()`
$DIR/core/services/job/job_orm_test.go: `.Add(ctx, cltest.DefaultOCRKey)`
$DIR/core/services/job/job_orm_test.go: `.NewORM(db, logger.TestLogger(t), config.JobPipeline().MaxSuccessfulRuns())`
$DIR/core/services/job/job_orm_test.go: `.TestLogger(t)`
$DIR/core/services/job/job_orm_test.go: `.JobPipeline()`
$DIR/core/services/job/job_orm_test.go: `.MaxSuccessfulRuns()`
$DIR/core/services/job/job_orm_test.go: `.NewORM(db)`
$DIR/core/services/job/job_orm_test.go: `.ValidatedDirectRequestSpec(testspecs.GetDirectRequestSpec())`
$DIR/core/services/job/job_orm_test.go: `.GetDirectRequestSpec()`
$DIR/core/services/job/job_orm_test.go: `.CreateJob(ctx, &jb)`
$DIR/core/services/job/job_orm_test.go: `.Get(&jobSpec, "SELECT * FROM jobs")`
$DIR/core/services/job/job_orm_test.go: `.FindSpecErrorsByJobIDs(ctx, []int32{jobSpec.ID})`
$DIR/core/services/job/job_orm_test.go: `.Context(t)`
$DIR/core/services/job/job_orm_test.go: `.NewTestGeneralConfig(t)`
$DIR/core/services/job/job_orm_test.go: `.NewSqlxDB(t)`
$DIR/core/services/job/job_orm_test.go: `.NewKeyStore(t, db)`
$DIR/core/services/job/job_orm_test.go: `.NewORM(db, logger.TestLogger(t), config.JobPipeline().MaxSuccessfulRuns())`
$DIR/core/services/job/job_orm_test.go: `.TestLogger(t)`
$DIR/core/services/job/job_orm_test.go: `.JobPipeline()`
$DIR/core/services/job/job_orm_test.go: `.MaxSuccessfulRuns()`
$DIR/core/services/job/job_orm_test.go: `.NewORM(db)`
$DIR/core/services/job/job_orm_test.go: `.NewChainRelayExtenders(t, evmtest.TestChainOpts{DB: db, GeneralConfig: config, KeyStore: keyStore.Eth()})`
$DIR/core/services/job/job_orm_test.go: `.Eth()`
$DIR/core/services/job/job_orm_test.go: `.NewLegacyChainsFromRelayerExtenders(relayExtenders)`
$DIR/core/services/job/job_orm_test.go: `.MustCreateBridge(t, db, cltest.BridgeOpts{})`
$DIR/core/services/job/job_orm_test.go: `.MustCreateBridge(t, db, cltest.BridgeOpts{})`
$DIR/core/services/job/job_orm_test.go: `.New()`
$DIR/core/services/job/job_orm_test.go: `.MustInsertRandomKey(t, keyStore.Eth())`
$DIR/core/services/job/job_orm_test.go: `.Eth()`
$DIR/core/services/job/job_orm_test.go: `.ValidatedOracleSpecToml(config, legacyChains,
testspecs.GenerateOCRSpec(testspecs.OCRSpecParams{
JobID: externalJobID.String(),
TransmitterAddress: address.Hex(),
DS1BridgeName: bridge.Name.String(),
DS2BridgeName: bridge2.Name.String(),
}).Toml(),
)`
$DIR/core/services/job/job_orm_test.go: `.GenerateOCRSpec(testspecs.OCRSpecParams{
JobID: externalJobID.String(),
TransmitterAddress: address.Hex(),
DS1BridgeName: bridge.Name.String(),
DS2BridgeName: bridge2.Name.String(),
})`
$DIR/core/services/job/job_orm_test.go: `.String()`
$DIR/core/services/job/job_orm_test.go: `.Hex()`
$DIR/core/services/job/job_orm_test.go: `.Name.String()`
$DIR/core/services/job/job_orm_test.go: `.Name.String()`
$DIR/core/services/job/job_orm_test.go: `.Toml()`
$DIR/core/services/job/job_orm_test.go: `.CreateJob(testutils.Context(t), &jb)`
$DIR/core/services/job/job_orm_test.go: `.Context(t)`
$DIR/core/services/job/job_orm_test.go: `.Run("with no pipeline runs", func(t *testing.T) {
ctx := testutils.Context(t)
count, err2 := orm.CountPipelineRunsByJobID(ctx, jb.ID)
require.NoError(t, err2)
assert.Equal(t, int32(0), count)
})`
$DIR/core/services/job/job_orm_test.go: `.Context(t)`
$DIR/core/services/job/job_orm_test.go: `.CountPipelineRunsByJobID(ctx, jb.ID)`
$DIR/core/services/job/job_orm_test.go: `.Context(t)`
$DIR/core/services/job/job_orm_test.go: `.CountPipelineRunsByJobID(ctx, jb.ID)`
$DIR/core/services/job/job_orm_test.go: `.NewSqlxDB(t)`
$DIR/core/services/job/job_orm_test.go: `.NewSqlxDB(t)`
$DIR/core/services/job/job_orm_test.go: `.NewSqlxDB(t)`
$DIR/core/services/job/job_orm_test.go: `.NewSqlxDB(t)`
$DIR/core/services/job/job_orm_test.go: `.Run(tt.name, func(t *testing.T) {
ks := cltest.NewKeyStore(t, tt.fields.ds)
pipelineORM := pipeline.NewORM(tt.fields.ds, logger.TestLogger(t), configtest.NewTestGeneralConfig(t).JobPipeline().MaxSuccessfulRuns())
bridgesORM := bridges.NewORM(tt.fields.ds)
o := NewTestORM(t, tt.fields.ds, pipelineORM, bridgesORM, ks)
var wantJobID int32
if tt.args.before != nil {
wantJobID = tt.args.before(t, o, tt.args.spec)
}
ctx := testutils.Context(t)
gotJ, err := o.FindJobIDByWorkflow(ctx, tt.args.spec)
if (err != nil) != tt.wantErr {
t.Errorf("orm.FindJobByWorkflow() error = %v, wantErr %v", err, tt.wantErr)
return
}
if err == nil {
assert.Equal(t, wantJobID, gotJ, "mismatch job id")
}
})`
$DIR/core/services/job/job_orm_test.go: `.NewKeyStore(t, tt.fields.ds)`
$DIR/core/services/job/job_orm_test.go: `.NewORM(tt.fields.ds, logger.TestLogger(t), configtest.NewTestGeneralConfig(t).JobPipeline().MaxSuccessfulRuns())`
$DIR/core/services/job/job_orm_test.go: `.TestLogger(t)`
$DIR/core/services/job/job_orm_test.go: `.NewTestGeneralConfig(t)`
$DIR/core/services/job/job_orm_test.go: `.JobPipeline()`
$DIR/core/services/job/job_orm_test.go: `.MaxSuccessfulRuns()`
$DIR/core/services/job/job_orm_test.go: `.NewORM(tt.fields.ds)`
$DIR/core/services/job/job_orm_test.go: `.args.before(t, o, tt.args.spec)`
$DIR/core/services/job/job_orm_test.go: `.Context(t)`
$DIR/core/services/job/job_orm_test.go: `.FindJobIDByWorkflow(ctx, tt.args.spec)`
$DIR/core/services/job/job_orm_test.go: `.NewSqlxDB(t)`
$DIR/core/services/job/job_orm_test.go: `.NewORM(db,
logger.TestLogger(t),
configtest.NewTestGeneralConfig(t).JobPipeline().MaxSuccessfulRuns())`
$DIR/core/services/job/job_orm_test.go: `.TestLogger(t)`
$DIR/core/services/job/job_orm_test.go: `.NewTestGeneralConfig(t)`
$DIR/core/services/job/job_orm_test.go: `.JobPipeline()`
$DIR/core/services/job/job_orm_test.go: `.MaxSuccessfulRuns()`
$DIR/core/services/job/job_orm_test.go: `.NewORM(db)`
$DIR/core/services/job/job_orm_test.go: `.NewKeyStore(t, db)`
$DIR/core/services/job/job_orm_test.go: `.Context(t)`
$DIR/core/services/job/job_orm_test.go: `.FindJobIDByWorkflow(ctx, s)`
$DIR/core/services/job/job_orm_test.go: `.FindJob(ctx, expectedIDs[i])`
$DIR/core/services/job/job_pipeline_orm_integration_test.go: `c.JobPipeline.HTTPRequest.DefaultTimeout = commonconfig.MustNewDuration(30 * time.Millisecond)`
$DIR/core/services/job/job_pipeline_orm_integration_test.go: `answer1.BaseTask = pipeline.NewBaseTask(
6,
"answer1",
[]pipeline.TaskDependency{
{PropagateResult: true, InputTask: pipeline.Task(ds1_multiply)},
{PropagateResult: true, InputTask: pipeline.Task(ds2_multiply)}},
nil,
0)`
$DIR/core/services/job/job_pipeline_orm_integration_test.go: `answer2.BaseTask = pipeline.NewBaseTask(7, "answer2", nil, nil, 1)`
$DIR/core/services/job/job_pipeline_orm_integration_test.go: `ds1_multiply.BaseTask = pipeline.NewBaseTask(
2,
"ds1_multiply",
[]pipeline.TaskDependency{{PropagateResult: true, InputTask: pipeline.Task(ds1_parse)}},
[]pipeline.Task{answer1},
0)`
$DIR/core/services/job/job_pipeline_orm_integration_test.go: `ds2_multiply.BaseTask = pipeline.NewBaseTask(
5,
"ds2_multiply",
[]pipeline.TaskDependency{{PropagateResult: true, InputTask: pipeline.Task(ds2_parse)}},
[]pipeline.Task{answer1},
0)`
$DIR/core/services/job/job_pipeline_orm_integration_test.go: `ds1_parse.BaseTask = pipeline.NewBaseTask(
1,
"ds1_parse",
[]pipeline.TaskDependency{{PropagateResult: true, InputTask: pipeline.Task(ds1)}},
[]pipeline.Task{ds1_multiply},
0)`
$DIR/core/services/job/job_pipeline_orm_integration_test.go: `ds2_parse.BaseTask = pipeline.NewBaseTask(
4,
"ds2_parse",
[]pipeline.TaskDependency{{PropagateResult: true, InputTask: pipeline.Task(ds2)}},
[]pipeline.Task{ds2_multiply},
0)`
$DIR/core/services/job/job_pipeline_orm_integration_test.go: `ds1.BaseTask = pipeline.NewBaseTask(0, "ds1", nil, []pipeline.Task{ds1_parse}, 0)`
$DIR/core/services/job/job_pipeline_orm_integration_test.go: `ds2.BaseTask = pipeline.NewBaseTask(3, "ds2", nil, []pipeline.Task{ds2_parse}, 0)`
$DIR/core/services/job/job_pipeline_orm_integration_test.go: `t.Run("creates task DAGs", func(t *testing.T) {
ctx := testutils.Context(t)
clearJobsDb(t, db)
orm := pipeline.NewORM(db, logger.TestLogger(t), config.JobPipeline().MaxSuccessfulRuns())
p, err := pipeline.Parse(DotStr)
require.NoError(t, err)
specID, err = orm.CreateSpec(ctx, *p, models.Interval(0))
require.NoError(t, err)
var pipelineSpecs []pipeline.Spec
sql := `SELECT * FROM pipeline_specs;`
err = db.Select(&pipelineSpecs, sql)
require.NoError(t, err)
require.Len(t, pipelineSpecs, 1)
require.Equal(t, specID, pipelineSpecs[0].ID)
require.Equal(t, DotStr, pipelineSpecs[0].DotDagSource)
_, err = db.Exec(`DELETE FROM pipeline_specs`)
require.NoError(t, err)
})`
$DIR/core/services/job/job_pipeline_orm_integration_test.go: `clearJobsDb(t, db)`
$DIR/core/services/job/job_pipeline_orm_integration_test.go: `specID, err = orm.CreateSpec(ctx, *p, models.Interval(0))`
$DIR/core/services/job/job_pipeline_orm_integration_test.go: `err = db.Select(&pipelineSpecs, sql)`
$DIR/core/services/job/job_pipeline_orm_integration_test.go: `_, err = db.Exec(`DELETE FROM pipeline_specs`)`
$DIR/core/services/job/job_pipeline_orm_integration_test.go: `clearJobsDb(t, db)`
$DIR/core/services/job/job_pipeline_orm_integration_test.go: `sql = `SELECT * FROM pipeline_runs WHERE id = $1;``
$DIR/core/services/job/job_pipeline_orm_integration_test.go: `err = db.Select(&pipelineRuns, sql, runID)`
$DIR/core/services/job/job_pipeline_orm_integration_test.go: `sql = `SELECT * FROM pipeline_task_runs WHERE pipeline_run_id = $1;``
$DIR/core/services/job/job_pipeline_orm_integration_test.go: `err = db.Select(&taskRuns, sql, runID)`
$DIR/core/services/job/job_pipeline_orm_integration_test.go: `.Context(t)`
$DIR/core/services/job/job_pipeline_orm_integration_test.go: `.NewGeneralConfig(t, func(c *chainlink.Config, s *chainlink.Secrets) {
c.JobPipeline.HTTPRequest.DefaultTimeout = commonconfig.MustNewDuration(30 * time.Millisecond)
})`
$DIR/core/services/job/job_pipeline_orm_integration_test.go: `.MustNewDuration(30 * time.Millisecond)`
$DIR/core/services/job/job_pipeline_orm_integration_test.go: `.NewSqlxDB(t)`
$DIR/core/services/job/job_pipeline_orm_integration_test.go: `.NewKeyStore(t, db)`
$DIR/core/services/job/job_pipeline_orm_integration_test.go: `.Eth()`
$DIR/core/services/job/job_pipeline_orm_integration_test.go: `.MustInsertRandomKey(t, ethKeyStore)`
$DIR/core/services/job/job_pipeline_orm_integration_test.go: `.NewBaseTask(
6,
"answer1",
[]pipeline.TaskDependency{
{PropagateResult: true, InputTask: pipeline.Task(ds1_multiply)},
{PropagateResult: true, InputTask: pipeline.Task(ds2_multiply)}},
nil,
0)`
$DIR/core/services/job/job_pipeline_orm_integration_test.go: `.Task(ds1_multiply)`
$DIR/core/services/job/job_pipeline_orm_integration_test.go: `.Task(ds2_multiply)`
$DIR/core/services/job/job_pipeline_orm_integration_test.go: `.NewBaseTask(7, "answer2", nil, nil, 1)`
$DIR/core/services/job/job_pipeline_orm_integration_test.go: `.NewBaseTask(
2,
"ds1_multiply",
[]pipeline.TaskDependency{{PropagateResult: true, InputTask: pipeline.Task(ds1_parse)}},
[]pipeline.Task{answer1},
0)`
$DIR/core/services/job/job_pipeline_orm_integration_test.go: `.Task(ds1_parse)`
$DIR/core/services/job/job_pipeline_orm_integration_test.go: `.NewBaseTask(
5,
"ds2_multiply",
[]pipeline.TaskDependency{{PropagateResult: true, InputTask: pipeline.Task(ds2_parse)}},
[]pipeline.Task{answer1},
0)`
$DIR/core/services/job/job_pipeline_orm_integration_test.go: `.Task(ds2_parse)`
$DIR/core/services/job/job_pipeline_orm_integration_test.go: `.NewBaseTask(
1,
"ds1_parse",
[]pipeline.TaskDependency{{PropagateResult: true, InputTask: pipeline.Task(ds1)}},
[]pipeline.Task{ds1_multiply},
0)`
$DIR/core/services/job/job_pipeline_orm_integration_test.go: `.Task(ds1)`
$DIR/core/services/job/job_pipeline_orm_integration_test.go: `.NewBaseTask(
4,
"ds2_parse",
[]pipeline.TaskDependency{{PropagateResult: true, InputTask: pipeline.Task(ds2)}},
[]pipeline.Task{ds2_multiply},
0)`
$DIR/core/services/job/job_pipeline_orm_integration_test.go: `.Task(ds2)`
$DIR/core/services/job/job_pipeline_orm_integration_test.go: `.NewBaseTask(0, "ds1", nil, []pipeline.Task{ds1_parse}, 0)`
$DIR/core/services/job/job_pipeline_orm_integration_test.go: `.NewBaseTask(3, "ds2", nil, []pipeline.Task{ds2_parse}, 0)`
$DIR/core/services/job/job_pipeline_orm_integration_test.go: `.MustCreateBridge(t, db, cltest.BridgeOpts{})`
$DIR/core/services/job/job_pipeline_orm_integration_test.go: `.MustCreateBridge(t, db, cltest.BridgeOpts{})`
$DIR/core/services/job/job_pipeline_orm_integration_test.go: `.Run("creates task DAGs", func(t *testing.T) {
ctx := testutils.Context(t)
clearJobsDb(t, db)
orm := pipeline.NewORM(db, logger.TestLogger(t), config.JobPipeline().MaxSuccessfulRuns())
p, err := pipeline.Parse(DotStr)
require.NoError(t, err)
specID, err = orm.CreateSpec(ctx, *p, models.Interval(0))
require.NoError(t, err)
var pipelineSpecs []pipeline.Spec
sql := `SELECT * FROM pipeline_specs;`
err = db.Select(&pipelineSpecs, sql)
require.NoError(t, err)
require.Len(t, pipelineSpecs, 1)
require.Equal(t, specID, pipelineSpecs[0].ID)
require.Equal(t, DotStr, pipelineSpecs[0].DotDagSource)
_, err = db.Exec(`DELETE FROM pipeline_specs`)
require.NoError(t, err)
})`
$DIR/core/services/job/job_pipeline_orm_integration_test.go: `.Context(t)`
$DIR/core/services/job/job_pipeline_orm_integration_test.go: `.NewORM(db, logger.TestLogger(t), config.JobPipeline().MaxSuccessfulRuns())`
$DIR/core/services/job/job_pipeline_orm_integration_test.go: `.TestLogger(t)`
$DIR/core/services/job/job_pipeline_orm_integration_test.go: `.JobPipeline()`
$DIR/core/services/job/job_pipeline_orm_integration_test.go: `.MaxSuccessfulRuns()`
$DIR/core/services/job/job_pipeline_orm_integration_test.go: `.Parse(DotStr)`
$DIR/core/services/job/job_pipeline_orm_integration_test.go: `.CreateSpec(ctx, *p, models.Interval(0))`
$DIR/core/services/job/job_pipeline_orm_integration_test.go: `.Interval(0)`
$DIR/core/services/job/job_pipeline_orm_integration_test.go: `.Select(&pipelineSpecs, sql)`
$DIR/core/services/job/job_pipeline_orm_integration_test.go: `.Exec(`DELETE FROM pipeline_specs`)`
$DIR/core/services/job/job_pipeline_orm_integration_test.go: `.TestLogger(t)`
$DIR/core/services/job/job_pipeline_orm_integration_test.go: `.NewTestGeneralConfig(t)`
$DIR/core/services/job/job_pipeline_orm_integration_test.go: `.NewORM(db, logger.TestLogger(t), cfg.JobPipeline().MaxSuccessfulRuns())`
$DIR/core/services/job/job_pipeline_orm_integration_test.go: `.TestLogger(t)`
$DIR/core/services/job/job_pipeline_orm_integration_test.go: `.JobPipeline()`
$DIR/core/services/job/job_pipeline_orm_integration_test.go: `.MaxSuccessfulRuns()`
$DIR/core/services/job/job_pipeline_orm_integration_test.go: `.NewORM(db)`
$DIR/core/services/job/job_pipeline_orm_integration_test.go: `.NewChainRelayExtenders(t, evmtest.TestChainOpts{Client: evmtest.NewEthClientMockWithDefaultChain(t), DB: db, GeneralConfig: config, KeyStore: ethKeyStore})`
$DIR/core/services/job/job_pipeline_orm_integration_test.go: `.NewEthClientMockWithDefaultChain(t)`
$DIR/core/services/job/job_pipeline_orm_integration_test.go: `.NewLegacyChainsFromRelayerExtenders(relayExtenders)`
$DIR/core/services/job/job_pipeline_orm_integration_test.go: `.NewRunner(orm, btORM, config.JobPipeline(), cfg.WebServer(), legacyChains, nil, nil, lggr, nil, nil)`
$DIR/core/services/job/job_pipeline_orm_integration_test.go: `.JobPipeline()`
$DIR/core/services/job/job_pipeline_orm_integration_test.go: `.WebServer()`
$DIR/core/services/job/job_pipeline_orm_integration_test.go: `.Name.String()`
$DIR/core/services/job/job_pipeline_orm_integration_test.go: `.Name.String()`
$DIR/core/services/job/job_pipeline_orm_integration_test.go: `.ExecuteAndInsertFinishedRun(testutils.Context(t), pipelineSpecs[0], pipeline.NewVarsFrom(nil), lggr, true)`
$DIR/core/services/job/job_pipeline_orm_integration_test.go: `.Context(t)`
$DIR/core/services/job/job_pipeline_orm_integration_test.go: `.NewVarsFrom(nil)`
$DIR/core/services/job/job_pipeline_orm_integration_test.go: `.Select(&pipelineRuns, sql, runID)`
$DIR/core/services/job/job_pipeline_orm_integration_test.go: `.Select(&taskRuns, sql, runID)`
$DIR/core/services/job/kv_orm_test.go: `jb.ID = jobID`
$DIR/core/services/job/kv_orm_test.go: `readBytes, err = kvStore.Get(ctx, testKey)`
$DIR/core/services/job/kv_orm_test.go: `fetchedBytes, err = kvStore.Get(ctx, key)`
$DIR/core/services/job/kv_orm_test.go: `.WithCancel(context.Background())`
$DIR/core/services/job/kv_orm_test.go: `.Background()`
$DIR/core/services/job/kv_orm_test.go: `.NewTestGeneralConfig(t)`
$DIR/core/services/job/kv_orm_test.go: `.NewSqlxDB(t)`
$DIR/core/services/job/kv_orm_test.go: `.TestLogger(t)`
$DIR/core/services/job/kv_orm_test.go: `.NewORM(db, logger.TestLogger(t), config.JobPipeline().MaxSuccessfulRuns())`
$DIR/core/services/job/kv_orm_test.go: `.TestLogger(t)`
$DIR/core/services/job/kv_orm_test.go: `.JobPipeline()`
$DIR/core/services/job/kv_orm_test.go: `.MaxSuccessfulRuns()`
$DIR/core/services/job/kv_orm_test.go: `.NewORM(db)`
$DIR/core/services/job/kv_orm_test.go: `.NewKVStore(jobID, db, lggr)`
$DIR/core/services/job/kv_orm_test.go: `.NewKeyStore(t, db)`
$DIR/core/services/job/kv_orm_test.go: `.ValidatedDirectRequestSpec(testspecs.GetDirectRequestSpec())`
$DIR/core/services/job/kv_orm_test.go: `.GetDirectRequestSpec()`
$DIR/core/services/job/kv_orm_test.go: `.Sprint(i)`
$DIR/core/services/job/kv_orm_test.go: `.Get(ctx, testKey)`
$DIR/core/services/job/kv_orm_test.go: `.Get(ctx, key)`
$DIR/core/services/job/kv_orm_test.go: `.Get(ctx, key)`
$DIR/core/services/job/kv_orm_test.go: `.DeleteJob(ctx, jobID)`
$DIR/core/services/job/models_test.go: `t.Run(tt.name, func(t *testing.T) {
t.Parallel()
s := &OCR2OracleSpec{
Relay: tt.fields.Relay,
ChainID: tt.fields.ChainID,
RelayConfig: tt.fields.RelayConfig,
}
got, err := s.RelayID()
if (err != nil) != tt.wantErr {
t.Errorf("OCR2OracleSpec.RelayIdentifier() error = %v, wantErr %v", err, tt.wantErr)
return
}
if !reflect.DeepEqual(got, tt.want) {
t.Errorf("OCR2OracleSpec.RelayIdentifier() = %v, want %v", got, tt.want)
}
})`
$DIR/core/services/job/models_test.go: `t.Run("marshal", func(t *testing.T) {
gotB, err := toml.Marshal(val)
require.NoError(t, err)
t.Log("marshaled:", string(gotB))
require.Equal(t, compact, string(gotB))
})`
$DIR/core/services/job/models_test.go: `t.Run("pretty", func(t *testing.T) {
var gotVal OCR2OracleSpec
require.NoError(t, toml.Unmarshal([]byte(pretty), &gotVal))
gotB, err := toml.Marshal(gotVal)
require.NoError(t, err)
t.Log("marshaled compact:", string(gotB))
require.Equal(t, compact, string(gotB))
})`
$DIR/core/services/job/models_test.go: `t.Run(tt.name, func(t *testing.T) {
w := &WorkflowSpec{
ID: tt.fields.ID,
WorkflowID: tt.fields.WorkflowID,
Workflow: tt.fields.Workflow,
WorkflowOwner: tt.fields.WorkflowOwner,
WorkflowName: tt.fields.WorkflowName,
CreatedAt: tt.fields.CreatedAt,
UpdatedAt: tt.fields.UpdatedAt,
}
err := w.Validate()
assert.ErrorIs(t, err, tt.expectedErr)
})`
$DIR/core/services/job/models_test.go: `.Run(tt.name, func(t *testing.T) {
t.Parallel()
s := &OCR2OracleSpec{
Relay: tt.fields.Relay,
ChainID: tt.fields.ChainID,
RelayConfig: tt.fields.RelayConfig,
}
got, err := s.RelayID()
if (err != nil) != tt.wantErr {
t.Errorf("OCR2OracleSpec.RelayIdentifier() error = %v, wantErr %v", err, tt.wantErr)
return
}
if !reflect.DeepEqual(got, tt.want) {
t.Errorf("OCR2OracleSpec.RelayIdentifier() = %v, want %v", got, tt.want)
}
})`
$DIR/core/services/job/models_test.go: `.RelayID()`
$DIR/core/services/job/models_test.go: `.DeepEqual(got, tt.want)`
$DIR/core/services/job/models_test.go: `.StringFrom("bar")`
$DIR/core/services/job/models_test.go: `.StringFrom("baz")`
$DIR/core/services/job/models_test.go: `.NewInterval(time.Second)`
$DIR/core/services/job/models_test.go: `.Run("marshal", func(t *testing.T) {
gotB, err := toml.Marshal(val)
require.NoError(t, err)
t.Log("marshaled:", string(gotB))
require.Equal(t, compact, string(gotB))
})`
$DIR/core/services/job/models_test.go: `.Marshal(val)`
$DIR/core/services/job/models_test.go: `.Marshal(gotVal)`
$DIR/core/services/job/models_test.go: `.Run("pretty", func(t *testing.T) {
var gotVal OCR2OracleSpec
require.NoError(t, toml.Unmarshal([]byte(pretty), &gotVal))
gotB, err := toml.Marshal(gotVal)
require.NoError(t, err)
t.Log("marshaled compact:", string(gotB))
require.Equal(t, compact, string(gotB))
})`
$DIR/core/services/job/models_test.go: `.Marshal(gotVal)`
$DIR/core/services/job/models_test.go: `.Run(tt.name, func(t *testing.T) {
w := &WorkflowSpec{
ID: tt.fields.ID,
WorkflowID: tt.fields.WorkflowID,
Workflow: tt.fields.Workflow,
WorkflowOwner: tt.fields.WorkflowOwner,
WorkflowName: tt.fields.WorkflowName,
CreatedAt: tt.fields.CreatedAt,
UpdatedAt: tt.fields.UpdatedAt,
}
err := w.Validate()
assert.ErrorIs(t, err, tt.expectedErr)
})`
$DIR/core/services/job/models_test.go: `.Validate()`
$DIR/core/services/job/orm_test.go: `jobSpec = job.LoadConfigVarsLocalOCR(chainConfig.EVM().OCR(), *jobSpec, config.OCR())`
$DIR/core/services/job/orm_test.go: `c.EVM[0].MinIncomingConfirmations = &hundred`
$DIR/core/services/job/orm_test.go: `.NewTestGeneralConfig(t)`
$DIR/core/services/job/orm_test.go: `.NewChainScopedConfig(t, config)`
$DIR/core/services/job/orm_test.go: `.LoadConfigVarsLocalOCR(chainConfig.EVM().OCR(), *jobSpec, config.OCR())`
$DIR/core/services/job/orm_test.go: `.EVM()`
$DIR/core/services/job/orm_test.go: `.OCR()`
$DIR/core/services/job/orm_test.go: `.OCR()`
$DIR/core/services/job/orm_test.go: `.Interval(chainConfig.EVM().OCR().ContractTransmitterTransmitTimeout())`
$DIR/core/services/job/orm_test.go: `.EVM()`
$DIR/core/services/job/orm_test.go: `.OCR()`
$DIR/core/services/job/orm_test.go: `.ContractTransmitterTransmitTimeout()`
$DIR/core/services/job/orm_test.go: `.NewGeneralConfig(t, func(c *chainlink.Config, s *chainlink.Secrets) {
hundred := uint32(100)
c.EVM[0].MinIncomingConfirmations = &hundred
})`
$DIR/core/services/job/orm_test.go: `.NewChainScopedConfig(t, config)`
$DIR/core/services/job/orm_test.go: `.Uint32From(10)`
$DIR/core/services/job/orm_test.go: `.SetDRMinIncomingConfirmations(chainConfig.EVM().MinIncomingConfirmations(), jobSpec10)`
$DIR/core/services/job/orm_test.go: `.EVM()`
$DIR/core/services/job/orm_test.go: `.MinIncomingConfirmations()`
$DIR/core/services/job/orm_test.go: `.Uint32From(200)`
$DIR/core/services/job/orm_test.go: `.SetDRMinIncomingConfirmations(chainConfig.EVM().MinIncomingConfirmations(), jobSpec200)`
$DIR/core/services/job/orm_test.go: `.EVM()`
$DIR/core/services/job/orm_test.go: `.MinIncomingConfirmations()`
$DIR/core/services/job/runner_integration_test.go: `c.P2P.V2.Enabled = ptr(true)`
$DIR/core/services/job/runner_integration_test.go: `c.P2P.V2.ListenAddresses = &[]string{fmt.Sprintf("127.0.0.1:%d", freeport.GetOne(t))}`
$DIR/core/services/job/runner_integration_test.go: `c.OCR.KeyBundleID = &kbid`
$DIR/core/services/job/runner_integration_test.go: `c.OCR.TransmitterAddress = &taddress`
$DIR/core/services/job/runner_integration_test.go: `c.OCR2.DatabaseTimeout = commonconfig.MustNewDuration(time.Second)`
$DIR/core/services/job/runner_integration_test.go: `c.OCR2.ContractTransmitterTransmitTimeout = commonconfig.MustNewDuration(time.Second)`
$DIR/core/services/job/runner_integration_test.go: `c.Insecure.OCRDevelopmentMode = ptr(true)`
$DIR/core/services/job/runner_integration_test.go: `ethClient.On("HeadByNumber", mock.Anything, (*big.Int)(nil)).Return(cltest.Head(10), nil)`
$DIR/core/services/job/runner_integration_test.go: `ethClient.On("CallContract", mock.Anything, mock.Anything, mock.Anything).Maybe().Return(nil, nil)`
$DIR/core/services/job/runner_integration_test.go: `t.Cleanup(func() { assert.NoError(t, pipelineORM.Close()) })`
$DIR/core/services/job/runner_integration_test.go: `t.Cleanup(func() { assert.NoError(t, jobORM.Close()) })`
$DIR/core/services/job/runner_integration_test.go: `servicetest.Run(t, runner)`
$DIR/core/services/job/runner_integration_test.go: `t.Run("gets the election result winner", func(t *testing.T) {
var httpURL string
mockElectionWinner := cltest.NewHTTPMockServer(t, http.StatusOK, "POST", `Hal Finney`,
func(header http.Header, s string) {
var md bridges.BridgeMetaDataJSON
require.NoError(t, json.Unmarshal([]byte(s), &md))
assert.Equal(t, big.NewInt(10), md.Meta.LatestAnswer)
assert.Equal(t, big.NewInt(100), md.Meta.UpdatedAt)
})
mockVoterTurnout := cltest.NewHTTPMockServer(t, http.StatusOK, "POST", `{"data": {"result": 62.57}}`,
func(header http.Header, s string) {
var md bridges.BridgeMetaDataJSON
require.NoError(t, json.Unmarshal([]byte(s), &md))
assert.Equal(t, big.NewInt(10), md.Meta.LatestAnswer)
assert.Equal(t, big.NewInt(100), md.Meta.UpdatedAt)
},
)
mockHTTP := cltest.NewHTTPMockServer(t, http.StatusOK, "POST", `{"turnout": 61.942}`)
httpURL = mockHTTP.URL
_, bridgeER := cltest.MustCreateBridge(t, db, cltest.BridgeOpts{URL: mockElectionWinner.URL})
_, bridgeVT := cltest.MustCreateBridge(t, db, cltest.BridgeOpts{URL: mockVoterTurnout.URL})
// Need a job in order to create a run
jb := MakeVoterTurnoutOCRJobSpecWithHTTPURL(t, transmitterAddress, httpURL, bridgeVT.Name.String(), bridgeER.Name.String())
require.NoError(t, jobORM.CreateJob(testutils.Context(t), jb))
require.NotNil(t, jb.PipelineSpec)
require.NotZero(t, jb.PipelineSpec.JobID)
m, err := bridges.MarshalBridgeMetaData(big.NewInt(10), big.NewInt(100))
require.NoError(t, err)
runID, taskResults, err := runner.ExecuteAndInsertFinishedRun(testutils.Context(t), *jb.PipelineSpec, pipeline.NewVarsFrom(map[string]interface{}{"jobRun": map[string]interface{}{"meta": m}}), logger.TestLogger(t), true)
require.NoError(t, err)
results := taskResults.FinalResult(logger.TestLogger(t))
require.Len(t, results.Values, 2)
require.GreaterOrEqual(t, len(results.FatalErrors), 2)
assert.Nil(t, results.FatalErrors[0])
assert.Nil(t, results.FatalErrors[1])
require.GreaterOrEqual(t, len(results.AllErrors), 2)
assert.Equal(t, "6225.6", results.Values[0].(decimal.Decimal).String())
assert.Equal(t, "Hal Finney", results.Values[1].(string))
// Verify individual task results
var runs []pipeline.TaskRun
sql := `SELECT * FROM pipeline_task_runs WHERE pipeline_run_id = $1`
err = db.Select(&runs, sql, runID)
assert.NoError(t, err)
assert.Len(t, runs, 8)
for _, run := range runs {
if run.GetDotID() == "answer2" {
assert.Equal(t, "Hal Finney", run.Output.Val)
} else if run.GetDotID() == "ds2" {
assert.Equal(t, `{"turnout": 61.942}`, run.Output.Val)
} else if run.GetDotID() == "ds2_parse" {
assert.Equal(t, float64(61.942), run.Output.Val)
} else if run.GetDotID() == "ds2_multiply" {
assert.Equal(t, "6194.2", run.Output.Val)
} else if run.GetDotID() == "ds1" {
assert.Equal(t, `{"data": {"result": 62.57}}`, run.Output.Val)
} else if run.GetDotID() == "ds1_parse" {
assert.Equal(t, float64(62.57), run.Output.Val)
} else if run.GetDotID() == "ds1_multiply" {
assert.Equal(t, "6257", run.Output.Val)
} else if run.GetDotID() == "answer1" {
assert.Equal(t, "6225.6", run.Output.Val)
} else {
t.Fatalf("unknown task '%v'", run.GetDotID())
}
}
})`
$DIR/core/services/job/runner_integration_test.go: `httpURL = mockHTTP.URL`
$DIR/core/services/job/runner_integration_test.go: `err = db.Select(&runs, sql, runID)`
$DIR/core/services/job/runner_integration_test.go: `t.Run("must delete job before deleting bridge", func(t *testing.T) {
ctx := testutils.Context(t)
_, bridge := cltest.MustCreateBridge(t, db, cltest.BridgeOpts{})
jb := makeOCRJobSpecFromToml(t, fmt.Sprintf(`
type = "offchainreporting"
schemaVersion = 1
evmChainID = "0"
observationSource = """
ds1 [type=bridge name="%s"];
"""
`, bridge.Name.String()))
require.NoError(t, jobORM.CreateJob(ctx, jb))
// Should not be able to delete a bridge in use.
jids, err := jobORM.FindJobIDsWithBridge(ctx, bridge.Name.String())
require.NoError(t, err)
require.Equal(t, 1, len(jids))
// But if we delete the job, then we can.
require.NoError(t, jobORM.DeleteJob(ctx, jb.ID))
jids, err = jobORM.FindJobIDsWithBridge(ctx, bridge.Name.String())
require.NoError(t, err)
require.Equal(t, 0, len(jids))
})`
$DIR/core/services/job/runner_integration_test.go: `jids, err = jobORM.FindJobIDsWithBridge(ctx, bridge.Name.String())`
$DIR/core/services/job/runner_integration_test.go: `t.Run("referencing a non-existent bridge should error", func(t *testing.T) {
ctx := testutils.Context(t)
// Create a random bridge name
_, b := cltest.MustCreateBridge(t, db, cltest.BridgeOpts{})
// Reference a different one
legacyChains := cltest.NewLegacyChainsWithMockChain(t, nil, config)
jb, err := ocr.ValidatedOracleSpecToml(config, legacyChains, fmt.Sprintf(`
type = "offchainreporting"
schemaVersion = 1
evmChainID = 0
transmitterID = "%s"
contractAddress = "0x613a38AC1659769640aaE063C651F48E0250454C"
isBootstrapPeer = false
blockchainTimeout = "1s"
observationTimeout = "10s"
databaseTimeout = "2s"
contractConfigTrackerPollInterval="15s"
contractConfigConfirmations=1
observationGracePeriod = "2s"
contractTransmitterTransmitTimeout = "5s"
contractConfigTrackerSubscribeInterval="1m"
observationSource = """
ds1 [type=bridge name=blah];
ds1_parse [type=jsonparse path="one,two"];
ds1_multiply [type=multiply times=1.23];
ds1 -> ds1_parse -> ds1_multiply -> answer1;
answer1 [type=median index=0];
"""
`, placeHolderAddress.String()))
require.NoError(t, err)
// Should error creating it
err = jobORM.CreateJob(ctx, &jb)
require.Error(t, err)
assert.Contains(t, err.Error(), "not all bridges exist")
// Same for ocr2
jb2, err := validate.ValidatedOracleSpecToml(testutils.Context(t), config.OCR2(), config.Insecure(), fmt.Sprintf(`
type = "offchainreporting2"
pluginType = "median"
schemaVersion = 1
relay = "evm"
contractID = "0x613a38AC1659769640aaE063C651F48E0250454C"
transmitterID = "%s"
blockchainTimeout = "1s"
contractConfigTrackerPollInterval = "15s"
contractConfigConfirmations = 1
observationSource = """
ds1 [type=bridge name="%s"];
ds1_parse [type=jsonparse path="one,two"];
ds1_multiply [type=multiply times=1.23];
ds1 -> ds1_parse -> ds1_multiply -> answer1;
answer1 [type=median index=0];
"""
[relayConfig]
chainID = 1337
[pluginConfig]
juelsPerFeeCoinSource = """
ds1 [type=bridge name=blah];
ds1_parse [type=jsonparse path="one,two"];
ds1_multiply [type=multiply times=1.23];
ds1 -> ds1_parse -> ds1_multiply -> answer1;
answer1 [type=median index=0];
"""
`, placeHolderAddress.String(), b.Name.String()), nil)
require.NoError(t, err)
// Should error creating it because of the juels per fee coin non-existent bridge
err = jobORM.CreateJob(ctx, &jb2)
require.Error(t, err)
assert.Contains(t, err.Error(), "not all bridges exist")
// Duplicate bridge names that exist is ok
jb3, err := validate.ValidatedOracleSpecToml(testutils.Context(t), config.OCR2(), config.Insecure(), fmt.Sprintf(`
type = "offchainreporting2"
pluginType = "median"
schemaVersion = 1
relay = "evm"
contractID = "0x613a38AC1659769640aaE063C651F48E0250454C"
transmitterID = "%s"
blockchainTimeout = "1s"
contractConfigTrackerPollInterval = "15s"
contractConfigConfirmations = 1
observationSource = """
ds1 [type=bridge name="%s"];
ds1_parse [type=jsonparse path="one,two"];
ds1_multiply [type=multiply times=1.23];
ds1 -> ds1_parse -> ds1_multiply -> answer1;
answer1 [type=median index=0];
"""
[relayConfig]
chainID = 1337
[pluginConfig]
juelsPerFeeCoinSource = """
ds1 [type=bridge name="%s"];
ds1_parse [type=jsonparse path="one,two"];
ds1_multiply [type=multiply times=1.23];
ds1 -> ds1_parse -> ds1_multiply -> answer1;
ds2 [type=bridge name="%s"];
ds2_parse [type=jsonparse path="one,two"];
ds2_multiply [type=multiply times=1.23];
ds2 -> ds2_parse -> ds2_multiply -> answer1;
answer1 [type=median index=0];
"""
`, placeHolderAddress, b.Name.String(), b.Name.String(), b.Name.String()), nil)
require.NoError(t, err)
// Should not error with duplicate bridges
err = jobORM.CreateJob(ctx, &jb3)
require.NoError(t, err)
})`
$DIR/core/services/job/runner_integration_test.go: `err = jobORM.CreateJob(ctx, &jb)`
$DIR/core/services/job/runner_integration_test.go: `err = jobORM.CreateJob(ctx, &jb2)`
$DIR/core/services/job/runner_integration_test.go: `err = jobORM.CreateJob(ctx, &jb3)`
$DIR/core/services/job/runner_integration_test.go: `t.Run("handles the case where the parsed value is literally null", func(t *testing.T) {
ctx := testutils.Context(t)
var httpURL string
resp := `{"USD": null}`
{
mockHTTP := cltest.NewHTTPMockServer(t, http.StatusOK, "GET", resp)
httpURL = mockHTTP.URL
}
// Need a job in order to create a run
jb := makeSimpleFetchOCRJobSpecWithHTTPURL(t, transmitterAddress, httpURL, false)
err := jobORM.CreateJob(ctx, jb)
require.NoError(t, err)
runID, taskResults, err := runner.ExecuteAndInsertFinishedRun(testutils.Context(t), *jb.PipelineSpec, pipeline.NewVarsFrom(nil), logger.TestLogger(t), true)
require.NoError(t, err)
results := taskResults.FinalResult(logger.TestLogger(t))
assert.Len(t, results.FatalErrors, 1)
assert.Len(t, results.Values, 1)
assert.Contains(t, results.FatalErrors[0].Error(), "type cannot be converted to decimal.Decimal")
assert.Nil(t, results.Values[0])
// Verify individual task results
var runs []pipeline.TaskRun
sql := `SELECT * FROM pipeline_task_runs WHERE pipeline_run_id = $1`
err = db.Select(&runs, sql, runID)
assert.NoError(t, err)
require.Len(t, runs, 3)
for _, run := range runs {
if run.GetDotID() == "ds1" {
assert.True(t, run.Error.IsZero())
require.NotNil(t, resp, run.Output)
assert.Equal(t, resp, run.Output.Val)
} else if run.GetDotID() == "ds1_parse" {
assert.True(t, run.Error.IsZero())
assert.False(t, run.Output.Valid)
} else if run.GetDotID() == "ds1_multiply" {
assert.Contains(t, run.Error.ValueOrZero(), "type cannot be converted to decimal.Decimal")
assert.False(t, run.Output.Valid)
} else {
t.Fatalf("unknown task '%v'", run.GetDotID())
}
}
})`
$DIR/core/services/job/runner_integration_test.go: `httpURL = mockHTTP.URL`
$DIR/core/services/job/runner_integration_test.go: `err = db.Select(&runs, sql, runID)`
$DIR/core/services/job/runner_integration_test.go: `t.Run("handles the case where the jsonparse lookup path is missing from the http response", func(t *testing.T) {
var httpURL string
resp := "{\"Response\":\"Error\",\"Message\":\"You are over your rate limit please upgrade your account!\",\"HasWarning\":false,\"Type\":99,\"RateLimit\":{\"calls_made\":{\"second\":5,\"minute\":5,\"hour\":955,\"day\":10004,\"month\":15146,\"total_calls\":15152},\"max_calls\":{\"second\":20,\"minute\":300,\"hour\":3000,\"day\":10000,\"month\":75000}},\"Data\":{}}"
{
mockHTTP := cltest.NewHTTPMockServer(t, http.StatusOK, "GET", resp)
httpURL = mockHTTP.URL
}
// Need a job in order to create a run
jb := makeSimpleFetchOCRJobSpecWithHTTPURL(t, transmitterAddress, httpURL, false)
err := jobORM.CreateJob(testutils.Context(t), jb)
require.NoError(t, err)
runID, taskResults, err := runner.ExecuteAndInsertFinishedRun(testutils.Context(t), *jb.PipelineSpec, pipeline.NewVarsFrom(nil), logger.TestLogger(t), true)
require.NoError(t, err)
results := taskResults.FinalResult(logger.TestLogger(t))
assert.Len(t, results.Values, 1)
assert.Len(t, results.FatalErrors, 1)
assert.Contains(t, results.FatalErrors[0].Error(), pipeline.ErrTooManyErrors.Error())
assert.Nil(t, results.Values[0])
// Verify individual task results
var runs []pipeline.TaskRun
sql := `SELECT * FROM pipeline_task_runs WHERE pipeline_run_id = $1`
err = db.Select(&runs, sql, runID)
assert.NoError(t, err)
require.Len(t, runs, 3)
for _, run := range runs {
if run.GetDotID() == "ds1" {
assert.True(t, run.Error.IsZero())
assert.Equal(t, resp, run.Output.Val)
} else if run.GetDotID() == "ds1_parse" {
assert.Contains(t, run.Error.ValueOrZero(), "could not resolve path [\"USD\"] in {\"Response\":\"Error\",\"Message\":\"You are over your rate limit please upgrade your account!\",\"HasWarning\":false,\"Type\":99,\"RateLimit\":{\"calls_made\":{\"second\":5,\"minute\":5,\"hour\":955,\"day\":10004,\"month\":15146,\"total_calls\":15152},\"max_calls\":{\"second\":20,\"minute\":300,\"hour\":3000,\"day\":10000,\"month\":75000}},\"Data\":{}}")
assert.False(t, run.Output.Valid)
} else if run.GetDotID() == "ds1_multiply" {
assert.Contains(t, run.Error.ValueOrZero(), pipeline.ErrTooManyErrors.Error())
assert.False(t, run.Output.Valid)
} else {
t.Fatalf("unknown task '%v'", run.GetDotID())
}
}
})`
$DIR/core/services/job/runner_integration_test.go: `httpURL = mockHTTP.URL`
$DIR/core/services/job/runner_integration_test.go: `err = db.Select(&runs, sql, runID)`
$DIR/core/services/job/runner_integration_test.go: `t.Run("handles the case where the jsonparse lookup path is missing from the http response and lax is enabled", func(t *testing.T) {
var httpURL string
resp := "{\"Response\":\"Error\",\"Message\":\"You are over your rate limit please upgrade your account!\",\"HasWarning\":false,\"Type\":99,\"RateLimit\":{\"calls_made\":{\"second\":5,\"minute\":5,\"hour\":955,\"day\":10004,\"month\":15146,\"total_calls\":15152},\"max_calls\":{\"second\":20,\"minute\":300,\"hour\":3000,\"day\":10000,\"month\":75000}},\"Data\":{}}"
{
mockHTTP := cltest.NewHTTPMockServer(t, http.StatusOK, "GET", resp)
httpURL = mockHTTP.URL
}
// Need a job in order to create a run
jb := makeSimpleFetchOCRJobSpecWithHTTPURL(t, transmitterAddress, httpURL, true)
err := jobORM.CreateJob(testutils.Context(t), jb)
require.NoError(t, err)
runID, taskResults, err := runner.ExecuteAndInsertFinishedRun(testutils.Context(t), *jb.PipelineSpec, pipeline.NewVarsFrom(nil), logger.TestLogger(t), true)
require.NoError(t, err)
results := taskResults.FinalResult(logger.TestLogger(t))
assert.Len(t, results.Values, 1)
assert.Contains(t, results.FatalErrors[0].Error(), "type cannot be converted to decimal.Decimal")
assert.Nil(t, results.Values[0])
// Verify individual task results
var runs []pipeline.TaskRun
sql := `SELECT * FROM pipeline_task_runs WHERE pipeline_run_id = $1`
err = db.Select(&runs, sql, runID)
assert.NoError(t, err)
require.Len(t, runs, 3)
for _, run := range runs {
if run.GetDotID() == "ds1" {
assert.True(t, run.Error.IsZero())
assert.Equal(t, resp, run.Output.Val)
} else if run.GetDotID() == "ds1_parse" {
assert.True(t, run.Error.IsZero())
assert.False(t, run.Output.Valid)
} else if run.GetDotID() == "ds1_multiply" {
assert.Contains(t, run.Error.ValueOrZero(), "type cannot be converted to decimal.Decimal")
assert.False(t, run.Output.Valid)
} else {
t.Fatalf("unknown task '%v'", run.GetDotID())
}
}
})`
$DIR/core/services/job/runner_integration_test.go: `httpURL = mockHTTP.URL`
$DIR/core/services/job/runner_integration_test.go: `err = db.Select(&runs, sql, runID)`
$DIR/core/services/job/runner_integration_test.go: `t.Run("minimal bootstrap", func(t *testing.T) {
ctx := testutils.Context(t)
s := `
type = "offchainreporting"
schemaVersion = 1
contractAddress = "%s"
isBootstrapPeer = true
evmChainID = "0"
`
s = fmt.Sprintf(s, cltest.NewEIP55Address())
jb, err := ocr.ValidatedOracleSpecToml(config, legacyChains, s)
require.NoError(t, err)
err = toml.Unmarshal([]byte(s), &jb)
require.NoError(t, err)
jb.MaxTaskDuration = models.Interval(cltest.MustParseDuration(t, "1s"))
err = jobORM.CreateJob(testutils.Context(t), &jb)
require.NoError(t, err)
lggr := logger.TestLogger(t)
_, err = keyStore.P2P().Create(ctx)
assert.NoError(t, err)
pw := ocrcommon.NewSingletonPeerWrapper(keyStore, config.P2P(), config.OCR(), db, lggr)
servicetest.Run(t, pw)
sd := ocr.NewDelegate(
db,
jobORM,
keyStore,
nil,
pw,
monitoringEndpoint,
legacyChains,
lggr,
config,
servicetest.Run(t, mailboxtest.NewMonitor(t)),
)
_, err = sd.ServicesForSpec(testutils.Context(t), jb)
require.NoError(t, err)
})`
$DIR/core/services/job/runner_integration_test.go: `s = fmt.Sprintf(s, cltest.NewEIP55Address())`
$DIR/core/services/job/runner_integration_test.go: `err = toml.Unmarshal([]byte(s), &jb)`
$DIR/core/services/job/runner_integration_test.go: `jb.MaxTaskDuration = models.Interval(cltest.MustParseDuration(t, "1s"))`
$DIR/core/services/job/runner_integration_test.go: `err = jobORM.CreateJob(testutils.Context(t), &jb)`
$DIR/core/services/job/runner_integration_test.go: `_, err = keyStore.P2P().Create(ctx)`
$DIR/core/services/job/runner_integration_test.go: `servicetest.Run(t, pw)`
$DIR/core/services/job/runner_integration_test.go: `_, err = sd.ServicesForSpec(testutils.Context(t), jb)`
$DIR/core/services/job/runner_integration_test.go: `t.Run("test min non-bootstrap", func(t *testing.T) {
ctx := testutils.Context(t)
kb, err := keyStore.OCR().Create(ctx)
require.NoError(t, err)
s := fmt.Sprintf(minimalNonBootstrapTemplate, cltest.NewEIP55Address(), transmitterAddress.Hex(), kb.ID(), "http://blah.com", "")
jb, err := ocr.ValidatedOracleSpecToml(config, legacyChains, s)
require.NoError(t, err)
err = toml.Unmarshal([]byte(s), &jb)
require.NoError(t, err)
jb.MaxTaskDuration = models.Interval(cltest.MustParseDuration(t, "1s"))
err = jobORM.CreateJob(testutils.Context(t), &jb)
require.NoError(t, err)
assert.Equal(t, jb.MaxTaskDuration, models.Interval(cltest.MustParseDuration(t, "1s")))
lggr := logger.TestLogger(t)
pw := ocrcommon.NewSingletonPeerWrapper(keyStore, config.P2P(), config.OCR(), db, lggr)
servicetest.Run(t, pw)
sd := ocr.NewDelegate(
db,
jobORM,
keyStore,
nil,
pw,
monitoringEndpoint,
legacyChains,
lggr,
config,
servicetest.Run(t, mailboxtest.NewMonitor(t)),
)
_, err = sd.ServicesForSpec(testutils.Context(t), jb)
require.NoError(t, err)
})`
$DIR/core/services/job/runner_integration_test.go: `err = toml.Unmarshal([]byte(s), &jb)`
$DIR/core/services/job/runner_integration_test.go: `jb.MaxTaskDuration = models.Interval(cltest.MustParseDuration(t, "1s"))`
$DIR/core/services/job/runner_integration_test.go: `err = jobORM.CreateJob(testutils.Context(t), &jb)`
$DIR/core/services/job/runner_integration_test.go: `servicetest.Run(t, pw)`
$DIR/core/services/job/runner_integration_test.go: `_, err = sd.ServicesForSpec(testutils.Context(t), jb)`
$DIR/core/services/job/runner_integration_test.go: `t.Run("test min bootstrap", func(t *testing.T) {
s := fmt.Sprintf(minimalBootstrapTemplate, cltest.NewEIP55Address())
jb, err := ocr.ValidatedOracleSpecToml(config, legacyChains, s)
require.NoError(t, err)
err = toml.Unmarshal([]byte(s), &jb)
require.NoError(t, err)
err = jobORM.CreateJob(testutils.Context(t), &jb)
require.NoError(t, err)
lggr := logger.TestLogger(t)
pw := ocrcommon.NewSingletonPeerWrapper(keyStore, config.P2P(), config.OCR(), db, lggr)
servicetest.Run(t, pw)
sd := ocr.NewDelegate(
db,
jobORM,
keyStore,
nil,
pw,
monitoringEndpoint,
legacyChains,
lggr,
config,
servicetest.Run(t, mailboxtest.NewMonitor(t)),
)
_, err = sd.ServicesForSpec(testutils.Context(t), jb)
require.NoError(t, err)
})`
$DIR/core/services/job/runner_integration_test.go: `err = toml.Unmarshal([]byte(s), &jb)`
$DIR/core/services/job/runner_integration_test.go: `err = jobORM.CreateJob(testutils.Context(t), &jb)`
$DIR/core/services/job/runner_integration_test.go: `servicetest.Run(t, pw)`
$DIR/core/services/job/runner_integration_test.go: `_, err = sd.ServicesForSpec(testutils.Context(t), jb)`
$DIR/core/services/job/runner_integration_test.go: `t.Run("test enhanced telemetry service creation", func(t *testing.T) {
ctx := testutils.Context(t)
testCases := []struct {
jbCaptureEATelemetry bool
specCaptureEATelemetry bool
expected bool
}{{false, false, false},
{true, false, false},
{false, true, true},
{true, true, true},
}
for _, tc := range testCases {
config = configtest.NewGeneralConfig(t, func(c *chainlink.Config, s *chainlink.Secrets) {
c.P2P.V2.Enabled = ptr(true)
c.P2P.V2.ListenAddresses = &[]string{fmt.Sprintf("127.0.0.1:%d", freeport.GetOne(t))}
c.OCR.CaptureEATelemetry = ptr(tc.specCaptureEATelemetry)
})
relayExtenders = evmtest.NewChainRelayExtenders(t, evmtest.TestChainOpts{DB: db, Client: ethClient, GeneralConfig: config, KeyStore: ethKeyStore})
legacyChains = evmrelay.NewLegacyChainsFromRelayerExtenders(relayExtenders)
kb, err := keyStore.OCR().Create(ctx)
require.NoError(t, err)
s := fmt.Sprintf(minimalNonBootstrapTemplate, cltest.NewEIP55Address(), transmitterAddress.Hex(), kb.ID(), "http://blah.com", "")
jb, err := ocr.ValidatedOracleSpecToml(config, legacyChains, s)
require.NoError(t, err)
err = toml.Unmarshal([]byte(s), &jb)
require.NoError(t, err)
jb.MaxTaskDuration = models.Interval(cltest.MustParseDuration(t, "1s"))
err = jobORM.CreateJob(testutils.Context(t), &jb)
require.NoError(t, err)
assert.Equal(t, jb.MaxTaskDuration, models.Interval(cltest.MustParseDuration(t, "1s")))
lggr := logger.TestLogger(t)
pw := ocrcommon.NewSingletonPeerWrapper(keyStore, config.P2P(), config.OCR(), db, lggr)
servicetest.Run(t, pw)
sd := ocr.NewDelegate(
db,
jobORM,
keyStore,
nil,
pw,
monitoringEndpoint,
legacyChains,
lggr,
config,
servicetest.Run(t, mailboxtest.NewMonitor(t)),
)
jb.OCROracleSpec.CaptureEATelemetry = tc.jbCaptureEATelemetry
services, err := sd.ServicesForSpec(testutils.Context(t), jb)
require.NoError(t, err)
enhancedTelemetryServiceCreated := false
for _, service := range services {
_, ok := service.(*ocrcommon.EnhancedTelemetryService[ocrcommon.EnhancedTelemetryData])
enhancedTelemetryServiceCreated = ok
if enhancedTelemetryServiceCreated {
break
}
}
require.Equal(t, tc.expected, enhancedTelemetryServiceCreated)
}
})`
$DIR/core/services/job/runner_integration_test.go: `c.P2P.V2.Enabled = ptr(true)`
$DIR/core/services/job/runner_integration_test.go: `c.P2P.V2.ListenAddresses = &[]string{fmt.Sprintf("127.0.0.1:%d", freeport.GetOne(t))}`
$DIR/core/services/job/runner_integration_test.go: `c.OCR.CaptureEATelemetry = ptr(tc.specCaptureEATelemetry)`
$DIR/core/services/job/runner_integration_test.go: `relayExtenders = evmtest.NewChainRelayExtenders(t, evmtest.TestChainOpts{DB: db, Client: ethClient, GeneralConfig: config, KeyStore: ethKeyStore})`
$DIR/core/services/job/runner_integration_test.go: `legacyChains = evmrelay.NewLegacyChainsFromRelayerExtenders(relayExtenders)`
$DIR/core/services/job/runner_integration_test.go: `err = toml.Unmarshal([]byte(s), &jb)`
$DIR/core/services/job/runner_integration_test.go: `jb.MaxTaskDuration = models.Interval(cltest.MustParseDuration(t, "1s"))`
$DIR/core/services/job/runner_integration_test.go: `err = jobORM.CreateJob(testutils.Context(t), &jb)`
$DIR/core/services/job/runner_integration_test.go: `servicetest.Run(t, pw)`
$DIR/core/services/job/runner_integration_test.go: `jb.OCROracleSpec.CaptureEATelemetry = tc.jbCaptureEATelemetry`
$DIR/core/services/job/runner_integration_test.go: `enhancedTelemetryServiceCreated = ok`
$DIR/core/services/job/runner_integration_test.go: `t.Run("test job spec error is created", func(t *testing.T) {
ctx := testutils.Context(t)
// Create a keystore with an ocr key bundle and p2p key.
kb, err := keyStore.OCR().Create(ctx)
require.NoError(t, err)
spec := fmt.Sprintf(ocrJobSpecTemplate, testutils.NewAddress().Hex(), kb.ID(), transmitterAddress.Hex(), fmt.Sprintf(simpleFetchDataSourceTemplate, "blah", true))
jb := makeOCRJobSpecFromToml(t, spec)
// Create an OCR job
err = jobORM.CreateJob(ctx, jb)
require.NoError(t, err)
lggr := logger.TestLogger(t)
pw := ocrcommon.NewSingletonPeerWrapper(keyStore, config.P2P(), config.OCR(), db, lggr)
servicetest.Run(t, pw)
sd := ocr.NewDelegate(
db,
jobORM,
keyStore,
nil,
pw,
monitoringEndpoint,
legacyChains,
lggr,
config,
servicetest.Run(t, mailboxtest.NewMonitor(t)),
)
services, err := sd.ServicesForSpec(testutils.Context(t), *jb)
require.NoError(t, err)
// Return an error getting the contract code.
ethClient.On("CodeAt", mock.Anything, mock.Anything, mock.Anything).Return(nil, errors.New("no such code"))
for _, s := range services {
err = s.Start(ctx)
require.NoError(t, err)
}
var se []job.SpecError
require.Eventually(t, func() bool {
err = db.Select(&se, `SELECT * FROM job_spec_errors`)
require.NoError(t, err)
return len(se) == 1
}, time.Second, 100*time.Millisecond)
require.Len(t, se, 1)
assert.Equal(t, uint(1), se[0].Occurrences)
for _, s := range services {
err = s.Close()
require.NoError(t, err)
}
// Ensure we can delete an errored
err = jobORM.DeleteJob(ctx, jb.ID)
require.NoError(t, err)
se = []job.SpecError{}
err = db.Select(&se, `SELECT * FROM job_spec_errors`)
require.NoError(t, err)
require.Len(t, se, 0)
// TODO: This breaks the txdb connection, failing subsequent tests. Resolve in the future
// Noop once the job is gone.
// jobORM.RecordError(testutils.Context(t), jb.ID, "test")
// err = db.Find(&se).Error
// require.NoError(t, err)
// require.Len(t, se, 0)
})`
$DIR/core/services/job/runner_integration_test.go: `err = jobORM.CreateJob(ctx, jb)`
$DIR/core/services/job/runner_integration_test.go: `servicetest.Run(t, pw)`
$DIR/core/services/job/runner_integration_test.go: `ethClient.On("CodeAt", mock.Anything, mock.Anything, mock.Anything).Return(nil, errors.New("no such code"))`
$DIR/core/services/job/runner_integration_test.go: `err = s.Start(ctx)`
$DIR/core/services/job/runner_integration_test.go: `err = s.Close()`
$DIR/core/services/job/runner_integration_test.go: `err = jobORM.DeleteJob(ctx, jb.ID)`
$DIR/core/services/job/runner_integration_test.go: `se = []job.SpecError{}`
$DIR/core/services/job/runner_integration_test.go: `err = db.Select(&se, `SELECT * FROM job_spec_errors`)`
$DIR/core/services/job/runner_integration_test.go: `t.Run("timeouts", func(t *testing.T) {
ctx := testutils.Context(t)
// There are 4 timeouts:
// - ObservationTimeout = how long the whole OCR time needs to run, or it fails (default 10 seconds)
// - config.JobPipelineMaxTaskDuration() = node level maximum time for a pipeline task (default 10 minutes)
// - config.transmitterAddress, http specific timeouts (default 15s * 5 retries = 75s)
// - "d1 [.... timeout="2s"]" = per task level timeout (should override the global config)
serv := httptest.NewServer(http.HandlerFunc(func(res http.ResponseWriter, req *http.Request) {
time.Sleep(1 * time.Millisecond)
res.WriteHeader(http.StatusOK)
_, err := res.Write([]byte(`{"USD":10.1}`))
require.NoError(t, err)
}))
defer serv.Close()
jb := makeMinimalHTTPOracleSpec(t, db, config, cltest.NewEIP55Address().String(), transmitterAddress.Hex(), cltest.DefaultOCRKeyBundleID, serv.URL, `timeout="1ns"`)
err := jobORM.CreateJob(ctx, jb)
require.NoError(t, err)
_, taskResults, err := runner.ExecuteAndInsertFinishedRun(testutils.Context(t), *jb.PipelineSpec, pipeline.NewVarsFrom(nil), logger.TestLogger(t), true)
require.NoError(t, err)
results := taskResults.FinalResult(logger.TestLogger(t))
assert.Nil(t, results.Values[0])
// No task timeout should succeed.
jb = makeMinimalHTTPOracleSpec(t, db, config, cltest.NewEIP55Address().String(), transmitterAddress.Hex(), cltest.DefaultOCRKeyBundleID, serv.URL, "")
jb.Name = null.NewString("a job 2", true)
err = jobORM.CreateJob(ctx, jb)
require.NoError(t, err)
_, taskResults, err = runner.ExecuteAndInsertFinishedRun(testutils.Context(t), *jb.PipelineSpec, pipeline.NewVarsFrom(nil), logger.TestLogger(t), true)
require.NoError(t, err)
results = taskResults.FinalResult(logger.TestLogger(t))
assert.Equal(t, 10.1, results.Values[0])
assert.Nil(t, results.FatalErrors[0])
// Job specified task timeout should fail.
jb = makeMinimalHTTPOracleSpec(t, db, config, cltest.NewEIP55Address().String(), transmitterAddress.Hex(), cltest.DefaultOCRKeyBundleID, serv.URL, "")
jb.MaxTaskDuration = models.Interval(time.Duration(1))
jb.Name = null.NewString("a job 3", true)
err = jobORM.CreateJob(ctx, jb)
require.NoError(t, err)
_, taskResults, err = runner.ExecuteAndInsertFinishedRun(testutils.Context(t), *jb.PipelineSpec, pipeline.NewVarsFrom(nil), logger.TestLogger(t), true)
require.NoError(t, err)
resultsNoFatalErrs := taskResults.FinalResult(logger.TestLogger(t))
assert.NotNil(t, resultsNoFatalErrs.FatalErrors[0])
})`
$DIR/core/services/job/runner_integration_test.go: `time.Sleep(1 * time.Millisecond)`
$DIR/core/services/job/runner_integration_test.go: `res.WriteHeader(http.StatusOK)`
$DIR/core/services/job/runner_integration_test.go: `jb = makeMinimalHTTPOracleSpec(t, db, config, cltest.NewEIP55Address().String(), transmitterAddress.Hex(), cltest.DefaultOCRKeyBundleID, serv.URL, "")`
$DIR/core/services/job/runner_integration_test.go: `jb.Name = null.NewString("a job 2", true)`
$DIR/core/services/job/runner_integration_test.go: `err = jobORM.CreateJob(ctx, jb)`
$DIR/core/services/job/runner_integration_test.go: `_, taskResults, err = runner.ExecuteAndInsertFinishedRun(testutils.Context(t), *jb.PipelineSpec, pipeline.NewVarsFrom(nil), logger.TestLogger(t), true)`
$DIR/core/services/job/runner_integration_test.go: `results = taskResults.FinalResult(logger.TestLogger(t))`
$DIR/core/services/job/runner_integration_test.go: `jb = makeMinimalHTTPOracleSpec(t, db, config, cltest.NewEIP55Address().String(), transmitterAddress.Hex(), cltest.DefaultOCRKeyBundleID, serv.URL, "")`
$DIR/core/services/job/runner_integration_test.go: `jb.MaxTaskDuration = models.Interval(time.Duration(1))`
$DIR/core/services/job/runner_integration_test.go: `jb.Name = null.NewString("a job 3", true)`
$DIR/core/services/job/runner_integration_test.go: `err = jobORM.CreateJob(ctx, jb)`
$DIR/core/services/job/runner_integration_test.go: `_, taskResults, err = runner.ExecuteAndInsertFinishedRun(testutils.Context(t), *jb.PipelineSpec, pipeline.NewVarsFrom(nil), logger.TestLogger(t), true)`
$DIR/core/services/job/runner_integration_test.go: `httpURL = mockHTTP.URL`
$DIR/core/services/job/runner_integration_test.go: `err = jobORM.DeleteJob(ctx, jb.ID)`
$DIR/core/services/job/runner_integration_test.go: `_, _, err = runner.ExecuteAndInsertFinishedRun(testutils.Context(t), *jb.PipelineSpec, pipeline.NewVarsFrom(nil), logger.TestLogger(t), true)`
$DIR/core/services/job/runner_integration_test.go: `c.JobPipeline.ExternalInitiatorsEnabled = &t`
$DIR/core/services/job/runner_integration_test.go: `c.Database.Listener.FallbackPollInterval = commonconfig.MustNewDuration(10 * time.Millisecond)`
$DIR/core/services/job/runner_integration_test.go: `eiNotifiedOfCreate = true`
$DIR/core/services/job/runner_integration_test.go: `w.WriteHeader(http.StatusOK)`
$DIR/core/services/job/runner_integration_test.go: `eiNotifiedOfDelete = true`
$DIR/core/services/job/runner_integration_test.go: `eiURL = mockEI.URL`
$DIR/core/services/job/runner_integration_test.go: `eia = &auth.Token{
AccessKey: eip.AccessKey,
Secret: eip.Secret,
}`
$DIR/core/services/job/runner_integration_test.go: `responseURL = bridgeRequest["responseURL"].(string)`
$DIR/core/services/job/runner_integration_test.go: `w.WriteHeader(http.StatusOK)`
$DIR/core/services/job/runner_integration_test.go: `_, err = io.WriteString(w, `{"pending": true}`)`
$DIR/core/services/job/runner_integration_test.go: `bridgeCalled <- struct{}{}`
$DIR/core/services/job/runner_integration_test.go: `bridgeName = bridge.Name.String()`
$DIR/core/services/job/runner_integration_test.go: `jobID = job.ID`
$DIR/core/services/job/runner_integration_test.go: `t.Run("simulate request from EI -> Core node with successful callback", func(t *testing.T) {
cltest.AwaitJobActive(t, app.JobSpawner(), jobID, 3*time.Second)
_ = cltest.CreateJobRunViaExternalInitiatorV2(t, app, jobUUID, *eia, cltest.MustJSONMarshal(t, eiRequest))
pipelineORM := pipeline.NewORM(app.GetDB(), logger.TestLogger(t), cfg.JobPipeline().MaxSuccessfulRuns())
bridgesORM := bridges.NewORM(app.GetDB())
jobORM := NewTestORM(t, app.GetDB(), pipelineORM, bridgesORM, app.KeyStore)
// Trigger v2/resume
select {
case <-bridgeCalled:
case <-time.After(time.Second):
t.Fatal("expected bridge server to be called")
}
// Make the request
{
url, err := url.Parse(responseURL)
require.NoError(t, err)
client := app.NewHTTPClient(nil)
body := strings.NewReader(`{"value": {"data":{"result":"123.45"}}}`)
response, cleanup := client.Patch(url.Path, body)
defer cleanup()
cltest.AssertServerResponse(t, response, http.StatusOK)
}
runs := cltest.WaitForPipelineComplete(t, 0, jobID, 1, 4, jobORM, 5*time.Second, 300*time.Millisecond)
require.Len(t, runs, 1)
run := runs[0]
require.Len(t, run.PipelineTaskRuns, 4)
require.Empty(t, run.PipelineTaskRuns[0].Error)
require.Empty(t, run.PipelineTaskRuns[1].Error)
require.Empty(t, run.PipelineTaskRuns[2].Error)
require.Empty(t, run.PipelineTaskRuns[3].Error)
require.Equal(t, jsonserializable.JSONSerializable{Val: []interface{}{"123450000000000000000"}, Valid: true}, run.Outputs)
require.Equal(t, pipeline.RunErrors{null.String{NullString: sql.NullString{String: "", Valid: false}}}, run.FatalErrors)
})`
$DIR/core/services/job/runner_integration_test.go: `cltest.AwaitJobActive(t, app.JobSpawner(), jobID, 3*time.Second)`
$DIR/core/services/job/runner_integration_test.go: `_ = cltest.CreateJobRunViaExternalInitiatorV2(t, app, jobUUID, *eia, cltest.MustJSONMarshal(t, eiRequest))`
$DIR/core/services/job/runner_integration_test.go: `cltest.AssertServerResponse(t, response, http.StatusOK)`
$DIR/core/services/job/runner_integration_test.go: `cltest.DeleteJobViaWeb(t, app, jobID)`
$DIR/core/services/job/runner_integration_test.go: `c.JobPipeline.ExternalInitiatorsEnabled = &t`
$DIR/core/services/job/runner_integration_test.go: `c.Database.Listener.FallbackPollInterval = commonconfig.MustNewDuration(10 * time.Millisecond)`
$DIR/core/services/job/runner_integration_test.go: `eiNotifiedOfCreate = true`
$DIR/core/services/job/runner_integration_test.go: `w.WriteHeader(http.StatusOK)`
$DIR/core/services/job/runner_integration_test.go: `eiNotifiedOfDelete = true`
$DIR/core/services/job/runner_integration_test.go: `eiURL = mockEI.URL`
$DIR/core/services/job/runner_integration_test.go: `eia = &auth.Token{
AccessKey: eip.AccessKey,
Secret: eip.Secret,
}`
$DIR/core/services/job/runner_integration_test.go: `responseURL = bridgeRequest["responseURL"].(string)`
$DIR/core/services/job/runner_integration_test.go: `w.WriteHeader(http.StatusOK)`
$DIR/core/services/job/runner_integration_test.go: `_, err = io.WriteString(w, `{"pending": true}`)`
$DIR/core/services/job/runner_integration_test.go: `bridgeCalled <- struct{}{}`
$DIR/core/services/job/runner_integration_test.go: `bridgeName = bridge.Name.String()`
$DIR/core/services/job/runner_integration_test.go: `jobID = job.ID`
$DIR/core/services/job/runner_integration_test.go: `t.Run("simulate request from EI -> Core node with erroring callback", func(t *testing.T) {
_ = cltest.CreateJobRunViaExternalInitiatorV2(t, app, jobUUID, *eia, cltest.MustJSONMarshal(t, eiRequest))
pipelineORM := pipeline.NewORM(app.GetDB(), logger.TestLogger(t), cfg.JobPipeline().MaxSuccessfulRuns())
bridgesORM := bridges.NewORM(app.GetDB())
jobORM := NewTestORM(t, app.GetDB(), pipelineORM, bridgesORM, app.KeyStore)
// Trigger v2/resume
select {
case <-bridgeCalled:
case <-time.After(time.Second):
t.Fatal("expected bridge server to be called")
}
// Make the request
{
url, err := url.Parse(responseURL)
require.NoError(t, err)
client := app.NewHTTPClient(nil)
body := strings.NewReader(`{"error": "something exploded in EA"}`)
response, cleanup := client.Patch(url.Path, body)
defer cleanup()
cltest.AssertServerResponse(t, response, http.StatusOK)
}
runs := cltest.WaitForPipelineError(t, 0, jobID, 1, 4, jobORM, 5*time.Second, 300*time.Millisecond)
require.Len(t, runs, 1)
run := runs[0]
require.Len(t, run.PipelineTaskRuns, 4)
require.Empty(t, run.PipelineTaskRuns[0].Error)
assert.True(t, run.PipelineTaskRuns[1].Error.Valid)
assert.Equal(t, "something exploded in EA", run.PipelineTaskRuns[1].Error.String)
assert.True(t, run.PipelineTaskRuns[2].Error.Valid)
assert.True(t, run.PipelineTaskRuns[3].Error.Valid)
require.Equal(t, jsonserializable.JSONSerializable{Val: []interface{}{interface{}(nil)}, Valid: true}, run.Outputs)
require.Equal(t, pipeline.RunErrors{null.String{NullString: sql.NullString{String: "task inputs: too many errors", Valid: true}}}, run.FatalErrors)
})`
$DIR/core/services/job/runner_integration_test.go: `_ = cltest.CreateJobRunViaExternalInitiatorV2(t, app, jobUUID, *eia, cltest.MustJSONMarshal(t, eiRequest))`
$DIR/core/services/job/runner_integration_test.go: `cltest.AssertServerResponse(t, response, http.StatusOK)`
$DIR/core/services/job/runner_integration_test.go: `cltest.DeleteJobViaWeb(t, app, jobID)`
$DIR/core/services/job/runner_integration_test.go: `.Context(t)`
$DIR/core/services/job/runner_integration_test.go: `.NewSqlxDB(t)`
$DIR/core/services/job/runner_integration_test.go: `.NewKeyStore(t, db)`
$DIR/core/services/job/runner_integration_test.go: `.Eth()`
$DIR/core/services/job/runner_integration_test.go: `.MustInsertRandomKey(t, ethKeyStore)`
$DIR/core/services/job/runner_integration_test.go: `.NewGeneralConfig(t, func(c *chainlink.Config, s *chainlink.Secrets) {
c.P2P.V2.Enabled = ptr(true)
c.P2P.V2.ListenAddresses = &[]string{fmt.Sprintf("127.0.0.1:%d", freeport.GetOne(t))}
kb, err := keyStore.OCR().Create(ctx)
require.NoError(t, err)
kbid := models.MustSha256HashFromHex(kb.ID())
c.OCR.KeyBundleID = &kbid
taddress := types.EIP55AddressFromAddress(transmitterAddress)
c.OCR.TransmitterAddress = &taddress
c.OCR2.DatabaseTimeout = commonconfig.MustNewDuration(time.Second)
c.OCR2.ContractTransmitterTransmitTimeout = commonconfig.MustNewDuration(time.Second)
c.Insecure.OCRDevelopmentMode = ptr(true)
})`
$DIR/core/services/job/runner_integration_test.go: `.Sprintf("127.0.0.1:%d", freeport.GetOne(t))`
$DIR/core/services/job/runner_integration_test.go: `.GetOne(t)`
$DIR/core/services/job/runner_integration_test.go: `.OCR()`
$DIR/core/services/job/runner_integration_test.go: `.Create(ctx)`
$DIR/core/services/job/runner_integration_test.go: `.MustSha256HashFromHex(kb.ID())`
$DIR/core/services/job/runner_integration_test.go: `.ID()`
$DIR/core/services/job/runner_integration_test.go: `.EIP55AddressFromAddress(transmitterAddress)`
$DIR/core/services/job/runner_integration_test.go: `.MustNewDuration(time.Second)`
$DIR/core/services/job/runner_integration_test.go: `.MustNewDuration(time.Second)`
$DIR/core/services/job/runner_integration_test.go: `.NewEthMocksWithDefaultChain(t)`
$DIR/core/services/job/runner_integration_test.go: `.On("HeadByNumber", mock.Anything, (*big.Int)(nil))`
$DIR/core/services/job/runner_integration_test.go: `.Return(cltest.Head(10), nil)`
$DIR/core/services/job/runner_integration_test.go: `.Head(10)`
$DIR/core/services/job/runner_integration_test.go: `.On("CallContract", mock.Anything, mock.Anything, mock.Anything)`
$DIR/core/services/job/runner_integration_test.go: `.Maybe()`
$DIR/core/services/job/runner_integration_test.go: `.Return(nil, nil)`
$DIR/core/services/job/runner_integration_test.go: `.NewORM(db, logger.TestLogger(t), config.JobPipeline().MaxSuccessfulRuns())`
$DIR/core/services/job/runner_integration_test.go: `.TestLogger(t)`
$DIR/core/services/job/runner_integration_test.go: `.JobPipeline()`
$DIR/core/services/job/runner_integration_test.go: `.MaxSuccessfulRuns()`
$DIR/core/services/job/runner_integration_test.go: `.Cleanup(func() { assert.NoError(t, pipelineORM.Close()) })`
$DIR/core/services/job/runner_integration_test.go: `.NewORM(db)`
$DIR/core/services/job/runner_integration_test.go: `.NewChainRelayExtenders(t, evmtest.TestChainOpts{DB: db, Client: ethClient, GeneralConfig: config, KeyStore: ethKeyStore})`
$DIR/core/services/job/runner_integration_test.go: `.NewLegacyChainsFromRelayerExtenders(relayExtenders)`
$DIR/core/services/job/runner_integration_test.go: `.NewTestLocalOnlyHTTPClient()`
$DIR/core/services/job/runner_integration_test.go: `.NewRunner(pipelineORM, btORM, config.JobPipeline(), config.WebServer(), legacyChains, nil, nil, logger.TestLogger(t), c, c)`
$DIR/core/services/job/runner_integration_test.go: `.JobPipeline()`
$DIR/core/services/job/runner_integration_test.go: `.WebServer()`
$DIR/core/services/job/runner_integration_test.go: `.TestLogger(t)`
$DIR/core/services/job/runner_integration_test.go: `.Cleanup(func() { assert.NoError(t, jobORM.Close()) })`
$DIR/core/services/job/runner_integration_test.go: `.MustInsertRandomKey(t, keyStore.Eth())`
$DIR/core/services/job/runner_integration_test.go: `.Eth()`
$DIR/core/services/job/runner_integration_test.go: `.Run(t, runner)`
$DIR/core/services/job/runner_integration_test.go: `.Run("gets the election result winner", func(t *testing.T) {
var httpURL string
mockElectionWinner := cltest.NewHTTPMockServer(t, http.StatusOK, "POST", `Hal Finney`,
func(header http.Header, s string) {
var md bridges.BridgeMetaDataJSON
require.NoError(t, json.Unmarshal([]byte(s), &md))
assert.Equal(t, big.NewInt(10), md.Meta.LatestAnswer)
assert.Equal(t, big.NewInt(100), md.Meta.UpdatedAt)
})
mockVoterTurnout := cltest.NewHTTPMockServer(t, http.StatusOK, "POST", `{"data": {"result": 62.57}}`,
func(header http.Header, s string) {
var md bridges.BridgeMetaDataJSON
require.NoError(t, json.Unmarshal([]byte(s), &md))
assert.Equal(t, big.NewInt(10), md.Meta.LatestAnswer)
assert.Equal(t, big.NewInt(100), md.Meta.UpdatedAt)
},
)
mockHTTP := cltest.NewHTTPMockServer(t, http.StatusOK, "POST", `{"turnout": 61.942}`)
httpURL = mockHTTP.URL
_, bridgeER := cltest.MustCreateBridge(t, db, cltest.BridgeOpts{URL: mockElectionWinner.URL})
_, bridgeVT := cltest.MustCreateBridge(t, db, cltest.BridgeOpts{URL: mockVoterTurnout.URL})
// Need a job in order to create a run
jb := MakeVoterTurnoutOCRJobSpecWithHTTPURL(t, transmitterAddress, httpURL, bridgeVT.Name.String(), bridgeER.Name.String())
require.NoError(t, jobORM.CreateJob(testutils.Context(t), jb))
require.NotNil(t, jb.PipelineSpec)
require.NotZero(t, jb.PipelineSpec.JobID)
m, err := bridges.MarshalBridgeMetaData(big.NewInt(10), big.NewInt(100))
require.NoError(t, err)
runID, taskResults, err := runner.ExecuteAndInsertFinishedRun(testutils.Context(t), *jb.PipelineSpec, pipeline.NewVarsFrom(map[string]interface{}{"jobRun": map[string]interface{}{"meta": m}}), logger.TestLogger(t), true)
require.NoError(t, err)
results := taskResults.FinalResult(logger.TestLogger(t))
require.Len(t, results.Values, 2)
require.GreaterOrEqual(t, len(results.FatalErrors), 2)
assert.Nil(t, results.FatalErrors[0])
assert.Nil(t, results.FatalErrors[1])
require.GreaterOrEqual(t, len(results.AllErrors), 2)
assert.Equal(t, "6225.6", results.Values[0].(decimal.Decimal).String())
assert.Equal(t, "Hal Finney", results.Values[1].(string))
// Verify individual task results
var runs []pipeline.TaskRun
sql := `SELECT * FROM pipeline_task_runs WHERE pipeline_run_id = $1`
err = db.Select(&runs, sql, runID)
assert.NoError(t, err)
assert.Len(t, runs, 8)
for _, run := range runs {
if run.GetDotID() == "answer2" {
assert.Equal(t, "Hal Finney", run.Output.Val)
} else if run.GetDotID() == "ds2" {
assert.Equal(t, `{"turnout": 61.942}`, run.Output.Val)
} else if run.GetDotID() == "ds2_parse" {
assert.Equal(t, float64(61.942), run.Output.Val)
} else if run.GetDotID() == "ds2_multiply" {
assert.Equal(t, "6194.2", run.Output.Val)
} else if run.GetDotID() == "ds1" {
assert.Equal(t, `{"data": {"result": 62.57}}`, run.Output.Val)
} else if run.GetDotID() == "ds1_parse" {
assert.Equal(t, float64(62.57), run.Output.Val)
} else if run.GetDotID() == "ds1_multiply" {
assert.Equal(t, "6257", run.Output.Val)
} else if run.GetDotID() == "answer1" {
assert.Equal(t, "6225.6", run.Output.Val)
} else {
t.Fatalf("unknown task '%v'", run.GetDotID())
}
}
})`
$DIR/core/services/job/runner_integration_test.go: `.NewHTTPMockServer(t, http.StatusOK, "POST", `Hal Finney`,
func(header http.Header, s string) {
var md bridges.BridgeMetaDataJSON
require.NoError(t, json.Unmarshal([]byte(s), &md))
assert.Equal(t, big.NewInt(10), md.Meta.LatestAnswer)
assert.Equal(t, big.NewInt(100), md.Meta.UpdatedAt)
})`
$DIR/core/services/job/runner_integration_test.go: `.NewHTTPMockServer(t, http.StatusOK, "POST", `{"data": {"result": 62.57}}`,
func(header http.Header, s string) {
var md bridges.BridgeMetaDataJSON
require.NoError(t, json.Unmarshal([]byte(s), &md))
assert.Equal(t, big.NewInt(10), md.Meta.LatestAnswer)
assert.Equal(t, big.NewInt(100), md.Meta.UpdatedAt)
},
)`
$DIR/core/services/job/runner_integration_test.go: `.NewHTTPMockServer(t, http.StatusOK, "POST", `{"turnout": 61.942}`)`
$DIR/core/services/job/runner_integration_test.go: `.MustCreateBridge(t, db, cltest.BridgeOpts{URL: mockElectionWinner.URL})`
$DIR/core/services/job/runner_integration_test.go: `.MustCreateBridge(t, db, cltest.BridgeOpts{URL: mockVoterTurnout.URL})`
$DIR/core/services/job/runner_integration_test.go: `.Name.String()`
$DIR/core/services/job/runner_integration_test.go: `.Name.String()`
$DIR/core/services/job/runner_integration_test.go: `.MarshalBridgeMetaData(big.NewInt(10), big.NewInt(100))`
$DIR/core/services/job/runner_integration_test.go: `.NewInt(10)`
$DIR/core/services/job/runner_integration_test.go: `.NewInt(100)`
$DIR/core/services/job/runner_integration_test.go: `.ExecuteAndInsertFinishedRun(testutils.Context(t), *jb.PipelineSpec, pipeline.NewVarsFrom(map[string]interface{}{"jobRun": map[string]interface{}{"meta": m}}), logger.TestLogger(t), true)`
$DIR/core/services/job/runner_integration_test.go: `.Context(t)`
$DIR/core/services/job/runner_integration_test.go: `.NewVarsFrom(map[string]interface{}{"jobRun": map[string]interface{}{"meta": m}})`
$DIR/core/services/job/runner_integration_test.go: `.TestLogger(t)`
$DIR/core/services/job/runner_integration_test.go: `.FinalResult(logger.TestLogger(t))`
$DIR/core/services/job/runner_integration_test.go: `.TestLogger(t)`
$DIR/core/services/job/runner_integration_test.go: `.Select(&runs, sql, runID)`
$DIR/core/services/job/runner_integration_test.go: `.GetDotID()`
$DIR/core/services/job/runner_integration_test.go: `.GetDotID()`
$DIR/core/services/job/runner_integration_test.go: `.GetDotID()`
$DIR/core/services/job/runner_integration_test.go: `.GetDotID()`
$DIR/core/services/job/runner_integration_test.go: `.GetDotID()`
$DIR/core/services/job/runner_integration_test.go: `.GetDotID()`
$DIR/core/services/job/runner_integration_test.go: `.GetDotID()`
$DIR/core/services/job/runner_integration_test.go: `.GetDotID()`
$DIR/core/services/job/runner_integration_test.go: `.Run("must delete job before deleting bridge", func(t *testing.T) {
ctx := testutils.Context(t)
_, bridge := cltest.MustCreateBridge(t, db, cltest.BridgeOpts{})
jb := makeOCRJobSpecFromToml(t, fmt.Sprintf(`
type = "offchainreporting"
schemaVersion = 1
evmChainID = "0"
observationSource = """
ds1 [type=bridge name="%s"];
"""
`, bridge.Name.String()))
require.NoError(t, jobORM.CreateJob(ctx, jb))
// Should not be able to delete a bridge in use.
jids, err := jobORM.FindJobIDsWithBridge(ctx, bridge.Name.String())
require.NoError(t, err)
require.Equal(t, 1, len(jids))
// But if we delete the job, then we can.
require.NoError(t, jobORM.DeleteJob(ctx, jb.ID))
jids, err = jobORM.FindJobIDsWithBridge(ctx, bridge.Name.String())
require.NoError(t, err)
require.Equal(t, 0, len(jids))
})`
$DIR/core/services/job/runner_integration_test.go: `.Context(t)`
$DIR/core/services/job/runner_integration_test.go: `.MustCreateBridge(t, db, cltest.BridgeOpts{})`
$DIR/core/services/job/runner_integration_test.go: `.Sprintf(`
type = "offchainreporting"
schemaVersion = 1
evmChainID = "0"
observationSource = """
ds1 [type=bridge name="%s"];
"""
`, bridge.Name.String())`
$DIR/core/services/job/runner_integration_test.go: `.Name.String()`
$DIR/core/services/job/runner_integration_test.go: `.FindJobIDsWithBridge(ctx, bridge.Name.String())`
$DIR/core/services/job/runner_integration_test.go: `.Name.String()`
$DIR/core/services/job/runner_integration_test.go: `.FindJobIDsWithBridge(ctx, bridge.Name.String())`
$DIR/core/services/job/runner_integration_test.go: `.Name.String()`
$DIR/core/services/job/runner_integration_test.go: `.Run("referencing a non-existent bridge should error", func(t *testing.T) {
ctx := testutils.Context(t)
// Create a random bridge name
_, b := cltest.MustCreateBridge(t, db, cltest.BridgeOpts{})
// Reference a different one
legacyChains := cltest.NewLegacyChainsWithMockChain(t, nil, config)
jb, err := ocr.ValidatedOracleSpecToml(config, legacyChains, fmt.Sprintf(`
type = "offchainreporting"
schemaVersion = 1
evmChainID = 0
transmitterID = "%s"
contractAddress = "0x613a38AC1659769640aaE063C651F48E0250454C"
isBootstrapPeer = false
blockchainTimeout = "1s"
observationTimeout = "10s"
databaseTimeout = "2s"
contractConfigTrackerPollInterval="15s"
contractConfigConfirmations=1
observationGracePeriod = "2s"
contractTransmitterTransmitTimeout = "5s"
contractConfigTrackerSubscribeInterval="1m"
observationSource = """
ds1 [type=bridge name=blah];
ds1_parse [type=jsonparse path="one,two"];
ds1_multiply [type=multiply times=1.23];
ds1 -> ds1_parse -> ds1_multiply -> answer1;
answer1 [type=median index=0];
"""
`, placeHolderAddress.String()))
require.NoError(t, err)
// Should error creating it
err = jobORM.CreateJob(ctx, &jb)
require.Error(t, err)
assert.Contains(t, err.Error(), "not all bridges exist")
// Same for ocr2
jb2, err := validate.ValidatedOracleSpecToml(testutils.Context(t), config.OCR2(), config.Insecure(), fmt.Sprintf(`
type = "offchainreporting2"
pluginType = "median"
schemaVersion = 1
relay = "evm"
contractID = "0x613a38AC1659769640aaE063C651F48E0250454C"
transmitterID = "%s"
blockchainTimeout = "1s"
contractConfigTrackerPollInterval = "15s"
contractConfigConfirmations = 1
observationSource = """
ds1 [type=bridge name="%s"];
ds1_parse [type=jsonparse path="one,two"];
ds1_multiply [type=multiply times=1.23];
ds1 -> ds1_parse -> ds1_multiply -> answer1;
answer1 [type=median index=0];
"""
[relayConfig]
chainID = 1337
[pluginConfig]
juelsPerFeeCoinSource = """
ds1 [type=bridge name=blah];
ds1_parse [type=jsonparse path="one,two"];
ds1_multiply [type=multiply times=1.23];
ds1 -> ds1_parse -> ds1_multiply -> answer1;
answer1 [type=median index=0];
"""
`, placeHolderAddress.String(), b.Name.String()), nil)
require.NoError(t, err)
// Should error creating it because of the juels per fee coin non-existent bridge
err = jobORM.CreateJob(ctx, &jb2)
require.Error(t, err)
assert.Contains(t, err.Error(), "not all bridges exist")
// Duplicate bridge names that exist is ok
jb3, err := validate.ValidatedOracleSpecToml(testutils.Context(t), config.OCR2(), config.Insecure(), fmt.Sprintf(`
type = "offchainreporting2"
pluginType = "median"
schemaVersion = 1
relay = "evm"
contractID = "0x613a38AC1659769640aaE063C651F48E0250454C"
transmitterID = "%s"
blockchainTimeout = "1s"
contractConfigTrackerPollInterval = "15s"
contractConfigConfirmations = 1
observationSource = """
ds1 [type=bridge name="%s"];
ds1_parse [type=jsonparse path="one,two"];
ds1_multiply [type=multiply times=1.23];
ds1 -> ds1_parse -> ds1_multiply -> answer1;
answer1 [type=median index=0];
"""
[relayConfig]
chainID = 1337
[pluginConfig]
juelsPerFeeCoinSource = """
ds1 [type=bridge name="%s"];
ds1_parse [type=jsonparse path="one,two"];
ds1_multiply [type=multiply times=1.23];
ds1 -> ds1_parse -> ds1_multiply -> answer1;
ds2 [type=bridge name="%s"];
ds2_parse [type=jsonparse path="one,two"];
ds2_multiply [type=multiply times=1.23];
ds2 -> ds2_parse -> ds2_multiply -> answer1;
answer1 [type=median index=0];
"""
`, placeHolderAddress, b.Name.String(), b.Name.String(), b.Name.String()), nil)
require.NoError(t, err)
// Should not error with duplicate bridges
err = jobORM.CreateJob(ctx, &jb3)
require.NoError(t, err)
})`
$DIR/core/services/job/runner_integration_test.go: `.Context(t)`
$DIR/core/services/job/runner_integration_test.go: `.MustCreateBridge(t, db, cltest.BridgeOpts{})`
$DIR/core/services/job/runner_integration_test.go: `.NewLegacyChainsWithMockChain(t, nil, config)`
$DIR/core/services/job/runner_integration_test.go: `.ValidatedOracleSpecToml(config, legacyChains, fmt.Sprintf(`
type = "offchainreporting"
schemaVersion = 1
evmChainID = 0
transmitterID = "%s"
contractAddress = "0x613a38AC1659769640aaE063C651F48E0250454C"
isBootstrapPeer = false
blockchainTimeout = "1s"
observationTimeout = "10s"
databaseTimeout = "2s"
contractConfigTrackerPollInterval="15s"
contractConfigConfirmations=1
observationGracePeriod = "2s"
contractTransmitterTransmitTimeout = "5s"
contractConfigTrackerSubscribeInterval="1m"
observationSource = """
ds1 [type=bridge name=blah];
ds1_parse [type=jsonparse path="one,two"];
ds1_multiply [type=multiply times=1.23];
ds1 -> ds1_parse -> ds1_multiply -> answer1;
answer1 [type=median index=0];
"""
`, placeHolderAddress.String()))`
$DIR/core/services/job/runner_integration_test.go: `.Sprintf(`
type = "offchainreporting"
schemaVersion = 1
evmChainID = 0
transmitterID = "%s"
contractAddress = "0x613a38AC1659769640aaE063C651F48E0250454C"
isBootstrapPeer = false
blockchainTimeout = "1s"
observationTimeout = "10s"
databaseTimeout = "2s"
contractConfigTrackerPollInterval="15s"
contractConfigConfirmations=1
observationGracePeriod = "2s"
contractTransmitterTransmitTimeout = "5s"
contractConfigTrackerSubscribeInterval="1m"
observationSource = """
ds1 [type=bridge name=blah];
ds1_parse [type=jsonparse path="one,two"];
ds1_multiply [type=multiply times=1.23];
ds1 -> ds1_parse -> ds1_multiply -> answer1;
answer1 [type=median index=0];
"""
`, placeHolderAddress.String())`
$DIR/core/services/job/runner_integration_test.go: `.String()`
$DIR/core/services/job/runner_integration_test.go: `.CreateJob(ctx, &jb)`
$DIR/core/services/job/runner_integration_test.go: `.ValidatedOracleSpecToml(testutils.Context(t), config.OCR2(), config.Insecure(), fmt.Sprintf(`
type = "offchainreporting2"
pluginType = "median"
schemaVersion = 1
relay = "evm"
contractID = "0x613a38AC1659769640aaE063C651F48E0250454C"
transmitterID = "%s"
blockchainTimeout = "1s"
contractConfigTrackerPollInterval = "15s"
contractConfigConfirmations = 1
observationSource = """
ds1 [type=bridge name="%s"];
ds1_parse [type=jsonparse path="one,two"];
ds1_multiply [type=multiply times=1.23];
ds1 -> ds1_parse -> ds1_multiply -> answer1;
answer1 [type=median index=0];
"""
[relayConfig]
chainID = 1337
[pluginConfig]
juelsPerFeeCoinSource = """
ds1 [type=bridge name=blah];
ds1_parse [type=jsonparse path="one,two"];
ds1_multiply [type=multiply times=1.23];
ds1 -> ds1_parse -> ds1_multiply -> answer1;
answer1 [type=median index=0];
"""
`, placeHolderAddress.String(), b.Name.String()), nil)`
$DIR/core/services/job/runner_integration_test.go: `.Context(t)`
$DIR/core/services/job/runner_integration_test.go: `.OCR2()`
$DIR/core/services/job/runner_integration_test.go: `.Insecure()`
$DIR/core/services/job/runner_integration_test.go: `.Sprintf(`
type = "offchainreporting2"
pluginType = "median"
schemaVersion = 1
relay = "evm"
contractID = "0x613a38AC1659769640aaE063C651F48E0250454C"
transmitterID = "%s"
blockchainTimeout = "1s"
contractConfigTrackerPollInterval = "15s"
contractConfigConfirmations = 1
observationSource = """
ds1 [type=bridge name="%s"];
ds1_parse [type=jsonparse path="one,two"];
ds1_multiply [type=multiply times=1.23];
ds1 -> ds1_parse -> ds1_multiply -> answer1;
answer1 [type=median index=0];
"""
[relayConfig]
chainID = 1337
[pluginConfig]
juelsPerFeeCoinSource = """
ds1 [type=bridge name=blah];
ds1_parse [type=jsonparse path="one,two"];
ds1_multiply [type=multiply times=1.23];
ds1 -> ds1_parse -> ds1_multiply -> answer1;
answer1 [type=median index=0];
"""
`, placeHolderAddress.String(), b.Name.String())`
$DIR/core/services/job/runner_integration_test.go: `.String()`
$DIR/core/services/job/runner_integration_test.go: `.Name.String()`
$DIR/core/services/job/runner_integration_test.go: `.CreateJob(ctx, &jb2)`
$DIR/core/services/job/runner_integration_test.go: `.ValidatedOracleSpecToml(testutils.Context(t), config.OCR2(), config.Insecure(), fmt.Sprintf(`
type = "offchainreporting2"
pluginType = "median"
schemaVersion = 1
relay = "evm"
contractID = "0x613a38AC1659769640aaE063C651F48E0250454C"
transmitterID = "%s"
blockchainTimeout = "1s"
contractConfigTrackerPollInterval = "15s"
contractConfigConfirmations = 1
observationSource = """
ds1 [type=bridge name="%s"];
ds1_parse [type=jsonparse path="one,two"];
ds1_multiply [type=multiply times=1.23];
ds1 -> ds1_parse -> ds1_multiply -> answer1;
answer1 [type=median index=0];
"""
[relayConfig]
chainID = 1337
[pluginConfig]
juelsPerFeeCoinSource = """
ds1 [type=bridge name="%s"];
ds1_parse [type=jsonparse path="one,two"];
ds1_multiply [type=multiply times=1.23];
ds1 -> ds1_parse -> ds1_multiply -> answer1;
ds2 [type=bridge name="%s"];
ds2_parse [type=jsonparse path="one,two"];
ds2_multiply [type=multiply times=1.23];
ds2 -> ds2_parse -> ds2_multiply -> answer1;
answer1 [type=median index=0];
"""
`, placeHolderAddress, b.Name.String(), b.Name.String(), b.Name.String()), nil)`
$DIR/core/services/job/runner_integration_test.go: `.Context(t)`
$DIR/core/services/job/runner_integration_test.go: `.OCR2()`
$DIR/core/services/job/runner_integration_test.go: `.Insecure()`
$DIR/core/services/job/runner_integration_test.go: `.Sprintf(`
type = "offchainreporting2"
pluginType = "median"
schemaVersion = 1
relay = "evm"
contractID = "0x613a38AC1659769640aaE063C651F48E0250454C"
transmitterID = "%s"
blockchainTimeout = "1s"
contractConfigTrackerPollInterval = "15s"
contractConfigConfirmations = 1
observationSource = """
ds1 [type=bridge name="%s"];
ds1_parse [type=jsonparse path="one,two"];
ds1_multiply [type=multiply times=1.23];
ds1 -> ds1_parse -> ds1_multiply -> answer1;
answer1 [type=median index=0];
"""
[relayConfig]
chainID = 1337
[pluginConfig]
juelsPerFeeCoinSource = """
ds1 [type=bridge name="%s"];
ds1_parse [type=jsonparse path="one,two"];
ds1_multiply [type=multiply times=1.23];
ds1 -> ds1_parse -> ds1_multiply -> answer1;
ds2 [type=bridge name="%s"];
ds2_parse [type=jsonparse path="one,two"];
ds2_multiply [type=multiply times=1.23];
ds2 -> ds2_parse -> ds2_multiply -> answer1;
answer1 [type=median index=0];
"""
`, placeHolderAddress, b.Name.String(), b.Name.String(), b.Name.String())`
$DIR/core/services/job/runner_integration_test.go: `.Name.String()`
$DIR/core/services/job/runner_integration_test.go: `.Name.String()`
$DIR/core/services/job/runner_integration_test.go: `.Name.String()`
$DIR/core/services/job/runner_integration_test.go: `.CreateJob(ctx, &jb3)`
$DIR/core/services/job/runner_integration_test.go: `.Run("handles the case where the parsed value is literally null", func(t *testing.T) {
ctx := testutils.Context(t)
var httpURL string
resp := `{"USD": null}`
{
mockHTTP := cltest.NewHTTPMockServer(t, http.StatusOK, "GET", resp)
httpURL = mockHTTP.URL
}
// Need a job in order to create a run
jb := makeSimpleFetchOCRJobSpecWithHTTPURL(t, transmitterAddress, httpURL, false)
err := jobORM.CreateJob(ctx, jb)
require.NoError(t, err)
runID, taskResults, err := runner.ExecuteAndInsertFinishedRun(testutils.Context(t), *jb.PipelineSpec, pipeline.NewVarsFrom(nil), logger.TestLogger(t), true)
require.NoError(t, err)
results := taskResults.FinalResult(logger.TestLogger(t))
assert.Len(t, results.FatalErrors, 1)
assert.Len(t, results.Values, 1)
assert.Contains(t, results.FatalErrors[0].Error(), "type cannot be converted to decimal.Decimal")
assert.Nil(t, results.Values[0])
// Verify individual task results
var runs []pipeline.TaskRun
sql := `SELECT * FROM pipeline_task_runs WHERE pipeline_run_id = $1`
err = db.Select(&runs, sql, runID)
assert.NoError(t, err)
require.Len(t, runs, 3)
for _, run := range runs {
if run.GetDotID() == "ds1" {
assert.True(t, run.Error.IsZero())
require.NotNil(t, resp, run.Output)
assert.Equal(t, resp, run.Output.Val)
} else if run.GetDotID() == "ds1_parse" {
assert.True(t, run.Error.IsZero())
assert.False(t, run.Output.Valid)
} else if run.GetDotID() == "ds1_multiply" {
assert.Contains(t, run.Error.ValueOrZero(), "type cannot be converted to decimal.Decimal")
assert.False(t, run.Output.Valid)
} else {
t.Fatalf("unknown task '%v'", run.GetDotID())
}
}
})`
$DIR/core/services/job/runner_integration_test.go: `.Context(t)`
$DIR/core/services/job/runner_integration_test.go: `.NewHTTPMockServer(t, http.StatusOK, "GET", resp)`
$DIR/core/services/job/runner_integration_test.go: `.CreateJob(ctx, jb)`
$DIR/core/services/job/runner_integration_test.go: `.ExecuteAndInsertFinishedRun(testutils.Context(t), *jb.PipelineSpec, pipeline.NewVarsFrom(nil), logger.TestLogger(t), true)`
$DIR/core/services/job/runner_integration_test.go: `.Context(t)`
$DIR/core/services/job/runner_integration_test.go: `.NewVarsFrom(nil)`
$DIR/core/services/job/runner_integration_test.go: `.TestLogger(t)`
$DIR/core/services/job/runner_integration_test.go: `.FinalResult(logger.TestLogger(t))`
$DIR/core/services/job/runner_integration_test.go: `.TestLogger(t)`
$DIR/core/services/job/runner_integration_test.go: `.Select(&runs, sql, runID)`
$DIR/core/services/job/runner_integration_test.go: `.GetDotID()`
$DIR/core/services/job/runner_integration_test.go: `.GetDotID()`
$DIR/core/services/job/runner_integration_test.go: `.GetDotID()`
$DIR/core/services/job/runner_integration_test.go: `.Run("handles the case where the jsonparse lookup path is missing from the http response", func(t *testing.T) {
var httpURL string
resp := "{\"Response\":\"Error\",\"Message\":\"You are over your rate limit please upgrade your account!\",\"HasWarning\":false,\"Type\":99,\"RateLimit\":{\"calls_made\":{\"second\":5,\"minute\":5,\"hour\":955,\"day\":10004,\"month\":15146,\"total_calls\":15152},\"max_calls\":{\"second\":20,\"minute\":300,\"hour\":3000,\"day\":10000,\"month\":75000}},\"Data\":{}}"
{
mockHTTP := cltest.NewHTTPMockServer(t, http.StatusOK, "GET", resp)
httpURL = mockHTTP.URL
}
// Need a job in order to create a run
jb := makeSimpleFetchOCRJobSpecWithHTTPURL(t, transmitterAddress, httpURL, false)
err := jobORM.CreateJob(testutils.Context(t), jb)
require.NoError(t, err)
runID, taskResults, err := runner.ExecuteAndInsertFinishedRun(testutils.Context(t), *jb.PipelineSpec, pipeline.NewVarsFrom(nil), logger.TestLogger(t), true)
require.NoError(t, err)
results := taskResults.FinalResult(logger.TestLogger(t))
assert.Len(t, results.Values, 1)
assert.Len(t, results.FatalErrors, 1)
assert.Contains(t, results.FatalErrors[0].Error(), pipeline.ErrTooManyErrors.Error())
assert.Nil(t, results.Values[0])
// Verify individual task results
var runs []pipeline.TaskRun
sql := `SELECT * FROM pipeline_task_runs WHERE pipeline_run_id = $1`
err = db.Select(&runs, sql, runID)
assert.NoError(t, err)
require.Len(t, runs, 3)
for _, run := range runs {
if run.GetDotID() == "ds1" {
assert.True(t, run.Error.IsZero())
assert.Equal(t, resp, run.Output.Val)
} else if run.GetDotID() == "ds1_parse" {
assert.Contains(t, run.Error.ValueOrZero(), "could not resolve path [\"USD\"] in {\"Response\":\"Error\",\"Message\":\"You are over your rate limit please upgrade your account!\",\"HasWarning\":false,\"Type\":99,\"RateLimit\":{\"calls_made\":{\"second\":5,\"minute\":5,\"hour\":955,\"day\":10004,\"month\":15146,\"total_calls\":15152},\"max_calls\":{\"second\":20,\"minute\":300,\"hour\":3000,\"day\":10000,\"month\":75000}},\"Data\":{}}")
assert.False(t, run.Output.Valid)
} else if run.GetDotID() == "ds1_multiply" {
assert.Contains(t, run.Error.ValueOrZero(), pipeline.ErrTooManyErrors.Error())
assert.False(t, run.Output.Valid)
} else {
t.Fatalf("unknown task '%v'", run.GetDotID())
}
}
})`
$DIR/core/services/job/runner_integration_test.go: `.NewHTTPMockServer(t, http.StatusOK, "GET", resp)`
$DIR/core/services/job/runner_integration_test.go: `.CreateJob(testutils.Context(t), jb)`
$DIR/core/services/job/runner_integration_test.go: `.Context(t)`
$DIR/core/services/job/runner_integration_test.go: `.ExecuteAndInsertFinishedRun(testutils.Context(t), *jb.PipelineSpec, pipeline.NewVarsFrom(nil), logger.TestLogger(t), true)`
$DIR/core/services/job/runner_integration_test.go: `.Context(t)`
$DIR/core/services/job/runner_integration_test.go: `.NewVarsFrom(nil)`
$DIR/core/services/job/runner_integration_test.go: `.TestLogger(t)`
$DIR/core/services/job/runner_integration_test.go: `.FinalResult(logger.TestLogger(t))`
$DIR/core/services/job/runner_integration_test.go: `.TestLogger(t)`
$DIR/core/services/job/runner_integration_test.go: `.Select(&runs, sql, runID)`
$DIR/core/services/job/runner_integration_test.go: `.GetDotID()`
$DIR/core/services/job/runner_integration_test.go: `.GetDotID()`
$DIR/core/services/job/runner_integration_test.go: `.GetDotID()`
$DIR/core/services/job/runner_integration_test.go: `.Run("handles the case where the jsonparse lookup path is missing from the http response and lax is enabled", func(t *testing.T) {
var httpURL string
resp := "{\"Response\":\"Error\",\"Message\":\"You are over your rate limit please upgrade your account!\",\"HasWarning\":false,\"Type\":99,\"RateLimit\":{\"calls_made\":{\"second\":5,\"minute\":5,\"hour\":955,\"day\":10004,\"month\":15146,\"total_calls\":15152},\"max_calls\":{\"second\":20,\"minute\":300,\"hour\":3000,\"day\":10000,\"month\":75000}},\"Data\":{}}"
{
mockHTTP := cltest.NewHTTPMockServer(t, http.StatusOK, "GET", resp)
httpURL = mockHTTP.URL
}
// Need a job in order to create a run
jb := makeSimpleFetchOCRJobSpecWithHTTPURL(t, transmitterAddress, httpURL, true)
err := jobORM.CreateJob(testutils.Context(t), jb)
require.NoError(t, err)
runID, taskResults, err := runner.ExecuteAndInsertFinishedRun(testutils.Context(t), *jb.PipelineSpec, pipeline.NewVarsFrom(nil), logger.TestLogger(t), true)
require.NoError(t, err)
results := taskResults.FinalResult(logger.TestLogger(t))
assert.Len(t, results.Values, 1)
assert.Contains(t, results.FatalErrors[0].Error(), "type cannot be converted to decimal.Decimal")
assert.Nil(t, results.Values[0])
// Verify individual task results
var runs []pipeline.TaskRun
sql := `SELECT * FROM pipeline_task_runs WHERE pipeline_run_id = $1`
err = db.Select(&runs, sql, runID)
assert.NoError(t, err)
require.Len(t, runs, 3)
for _, run := range runs {
if run.GetDotID() == "ds1" {
assert.True(t, run.Error.IsZero())
assert.Equal(t, resp, run.Output.Val)
} else if run.GetDotID() == "ds1_parse" {
assert.True(t, run.Error.IsZero())
assert.False(t, run.Output.Valid)
} else if run.GetDotID() == "ds1_multiply" {
assert.Contains(t, run.Error.ValueOrZero(), "type cannot be converted to decimal.Decimal")
assert.False(t, run.Output.Valid)
} else {
t.Fatalf("unknown task '%v'", run.GetDotID())
}
}
})`
$DIR/core/services/job/runner_integration_test.go: `.NewHTTPMockServer(t, http.StatusOK, "GET", resp)`
$DIR/core/services/job/runner_integration_test.go: `.CreateJob(testutils.Context(t), jb)`
$DIR/core/services/job/runner_integration_test.go: `.Context(t)`
$DIR/core/services/job/runner_integration_test.go: `.ExecuteAndInsertFinishedRun(testutils.Context(t), *jb.PipelineSpec, pipeline.NewVarsFrom(nil), logger.TestLogger(t), true)`
$DIR/core/services/job/runner_integration_test.go: `.Context(t)`
$DIR/core/services/job/runner_integration_test.go: `.NewVarsFrom(nil)`
$DIR/core/services/job/runner_integration_test.go: `.TestLogger(t)`
$DIR/core/services/job/runner_integration_test.go: `.FinalResult(logger.TestLogger(t))`
$DIR/core/services/job/runner_integration_test.go: `.TestLogger(t)`
$DIR/core/services/job/runner_integration_test.go: `.Select(&runs, sql, runID)`
$DIR/core/services/job/runner_integration_test.go: `.GetDotID()`
$DIR/core/services/job/runner_integration_test.go: `.GetDotID()`
$DIR/core/services/job/runner_integration_test.go: `.GetDotID()`
$DIR/core/services/job/runner_integration_test.go: `.Run("minimal bootstrap", func(t *testing.T) {
ctx := testutils.Context(t)
s := `
type = "offchainreporting"
schemaVersion = 1
contractAddress = "%s"
isBootstrapPeer = true
evmChainID = "0"
`
s = fmt.Sprintf(s, cltest.NewEIP55Address())
jb, err := ocr.ValidatedOracleSpecToml(config, legacyChains, s)
require.NoError(t, err)
err = toml.Unmarshal([]byte(s), &jb)
require.NoError(t, err)
jb.MaxTaskDuration = models.Interval(cltest.MustParseDuration(t, "1s"))
err = jobORM.CreateJob(testutils.Context(t), &jb)
require.NoError(t, err)
lggr := logger.TestLogger(t)
_, err = keyStore.P2P().Create(ctx)
assert.NoError(t, err)
pw := ocrcommon.NewSingletonPeerWrapper(keyStore, config.P2P(), config.OCR(), db, lggr)
servicetest.Run(t, pw)
sd := ocr.NewDelegate(
db,
jobORM,
keyStore,
nil,
pw,
monitoringEndpoint,
legacyChains,
lggr,
config,
servicetest.Run(t, mailboxtest.NewMonitor(t)),
)
_, err = sd.ServicesForSpec(testutils.Context(t), jb)
require.NoError(t, err)
})`
$DIR/core/services/job/runner_integration_test.go: `.Context(t)`
$DIR/core/services/job/runner_integration_test.go: `.Sprintf(s, cltest.NewEIP55Address())`
$DIR/core/services/job/runner_integration_test.go: `.NewEIP55Address()`
$DIR/core/services/job/runner_integration_test.go: `.ValidatedOracleSpecToml(config, legacyChains, s)`
$DIR/core/services/job/runner_integration_test.go: `.Unmarshal([]byte(s), &jb)`
$DIR/core/services/job/runner_integration_test.go: `.Interval(cltest.MustParseDuration(t, "1s"))`
$DIR/core/services/job/runner_integration_test.go: `.MustParseDuration(t, "1s")`
$DIR/core/services/job/runner_integration_test.go: `.CreateJob(testutils.Context(t), &jb)`
$DIR/core/services/job/runner_integration_test.go: `.Context(t)`
$DIR/core/services/job/runner_integration_test.go: `.TestLogger(t)`
$DIR/core/services/job/runner_integration_test.go: `.P2P()`
$DIR/core/services/job/runner_integration_test.go: `.Create(ctx)`
$DIR/core/services/job/runner_integration_test.go: `.NewSingletonPeerWrapper(keyStore, config.P2P(), config.OCR(), db, lggr)`
$DIR/core/services/job/runner_integration_test.go: `.P2P()`
$DIR/core/services/job/runner_integration_test.go: `.OCR()`
$DIR/core/services/job/runner_integration_test.go: `.Run(t, pw)`
$DIR/core/services/job/runner_integration_test.go: `.NewDelegate(
db,
jobORM,
keyStore,
nil,
pw,
monitoringEndpoint,
legacyChains,
lggr,
config,
servicetest.Run(t, mailboxtest.NewMonitor(t)),
)`
$DIR/core/services/job/runner_integration_test.go: `.Run(t, mailboxtest.NewMonitor(t))`
$DIR/core/services/job/runner_integration_test.go: `.NewMonitor(t)`
$DIR/core/services/job/runner_integration_test.go: `.ServicesForSpec(testutils.Context(t), jb)`
$DIR/core/services/job/runner_integration_test.go: `.Context(t)`
$DIR/core/services/job/runner_integration_test.go: `.Run("test min non-bootstrap", func(t *testing.T) {
ctx := testutils.Context(t)
kb, err := keyStore.OCR().Create(ctx)
require.NoError(t, err)
s := fmt.Sprintf(minimalNonBootstrapTemplate, cltest.NewEIP55Address(), transmitterAddress.Hex(), kb.ID(), "http://blah.com", "")
jb, err := ocr.ValidatedOracleSpecToml(config, legacyChains, s)
require.NoError(t, err)
err = toml.Unmarshal([]byte(s), &jb)
require.NoError(t, err)
jb.MaxTaskDuration = models.Interval(cltest.MustParseDuration(t, "1s"))
err = jobORM.CreateJob(testutils.Context(t), &jb)
require.NoError(t, err)
assert.Equal(t, jb.MaxTaskDuration, models.Interval(cltest.MustParseDuration(t, "1s")))
lggr := logger.TestLogger(t)
pw := ocrcommon.NewSingletonPeerWrapper(keyStore, config.P2P(), config.OCR(), db, lggr)
servicetest.Run(t, pw)
sd := ocr.NewDelegate(
db,
jobORM,
keyStore,
nil,
pw,
monitoringEndpoint,
legacyChains,
lggr,
config,
servicetest.Run(t, mailboxtest.NewMonitor(t)),
)
_, err = sd.ServicesForSpec(testutils.Context(t), jb)
require.NoError(t, err)
})`
$DIR/core/services/job/runner_integration_test.go: `.Context(t)`
$DIR/core/services/job/runner_integration_test.go: `.OCR()`
$DIR/core/services/job/runner_integration_test.go: `.Create(ctx)`
$DIR/core/services/job/runner_integration_test.go: `.Sprintf(minimalNonBootstrapTemplate, cltest.NewEIP55Address(), transmitterAddress.Hex(), kb.ID(), "http://blah.com", "")`
$DIR/core/services/job/runner_integration_test.go: `.NewEIP55Address()`
$DIR/core/services/job/runner_integration_test.go: `.Hex()`
$DIR/core/services/job/runner_integration_test.go: `.ID()`
$DIR/core/services/job/runner_integration_test.go: `.ValidatedOracleSpecToml(config, legacyChains, s)`
$DIR/core/services/job/runner_integration_test.go: `.Unmarshal([]byte(s), &jb)`
$DIR/core/services/job/runner_integration_test.go: `.Interval(cltest.MustParseDuration(t, "1s"))`
$DIR/core/services/job/runner_integration_test.go: `.MustParseDuration(t, "1s")`
$DIR/core/services/job/runner_integration_test.go: `.CreateJob(testutils.Context(t), &jb)`
$DIR/core/services/job/runner_integration_test.go: `.Context(t)`
$DIR/core/services/job/runner_integration_test.go: `.TestLogger(t)`
$DIR/core/services/job/runner_integration_test.go: `.NewSingletonPeerWrapper(keyStore, config.P2P(), config.OCR(), db, lggr)`
$DIR/core/services/job/runner_integration_test.go: `.P2P()`
$DIR/core/services/job/runner_integration_test.go: `.OCR()`
$DIR/core/services/job/runner_integration_test.go: `.Run(t, pw)`
$DIR/core/services/job/runner_integration_test.go: `.NewDelegate(
db,
jobORM,
keyStore,
nil,
pw,
monitoringEndpoint,
legacyChains,
lggr,
config,
servicetest.Run(t, mailboxtest.NewMonitor(t)),
)`
$DIR/core/services/job/runner_integration_test.go: `.Run(t, mailboxtest.NewMonitor(t))`
$DIR/core/services/job/runner_integration_test.go: `.NewMonitor(t)`
$DIR/core/services/job/runner_integration_test.go: `.ServicesForSpec(testutils.Context(t), jb)`
$DIR/core/services/job/runner_integration_test.go: `.Context(t)`
$DIR/core/services/job/runner_integration_test.go: `.Run("test min bootstrap", func(t *testing.T) {
s := fmt.Sprintf(minimalBootstrapTemplate, cltest.NewEIP55Address())
jb, err := ocr.ValidatedOracleSpecToml(config, legacyChains, s)
require.NoError(t, err)
err = toml.Unmarshal([]byte(s), &jb)
require.NoError(t, err)
err = jobORM.CreateJob(testutils.Context(t), &jb)
require.NoError(t, err)
lggr := logger.TestLogger(t)
pw := ocrcommon.NewSingletonPeerWrapper(keyStore, config.P2P(), config.OCR(), db, lggr)
servicetest.Run(t, pw)
sd := ocr.NewDelegate(
db,
jobORM,
keyStore,
nil,
pw,
monitoringEndpoint,
legacyChains,
lggr,
config,
servicetest.Run(t, mailboxtest.NewMonitor(t)),
)
_, err = sd.ServicesForSpec(testutils.Context(t), jb)
require.NoError(t, err)
})`
$DIR/core/services/job/runner_integration_test.go: `.Sprintf(minimalBootstrapTemplate, cltest.NewEIP55Address())`
$DIR/core/services/job/runner_integration_test.go: `.NewEIP55Address()`
$DIR/core/services/job/runner_integration_test.go: `.ValidatedOracleSpecToml(config, legacyChains, s)`
$DIR/core/services/job/runner_integration_test.go: `.Unmarshal([]byte(s), &jb)`
$DIR/core/services/job/runner_integration_test.go: `.CreateJob(testutils.Context(t), &jb)`
$DIR/core/services/job/runner_integration_test.go: `.Context(t)`
$DIR/core/services/job/runner_integration_test.go: `.TestLogger(t)`
$DIR/core/services/job/runner_integration_test.go: `.NewSingletonPeerWrapper(keyStore, config.P2P(), config.OCR(), db, lggr)`
$DIR/core/services/job/runner_integration_test.go: `.P2P()`
$DIR/core/services/job/runner_integration_test.go: `.OCR()`
$DIR/core/services/job/runner_integration_test.go: `.Run(t, pw)`
$DIR/core/services/job/runner_integration_test.go: `.NewDelegate(
db,
jobORM,
keyStore,
nil,
pw,
monitoringEndpoint,
legacyChains,
lggr,
config,
servicetest.Run(t, mailboxtest.NewMonitor(t)),
)`
$DIR/core/services/job/runner_integration_test.go: `.Run(t, mailboxtest.NewMonitor(t))`
$DIR/core/services/job/runner_integration_test.go: `.NewMonitor(t)`
$DIR/core/services/job/runner_integration_test.go: `.ServicesForSpec(testutils.Context(t), jb)`
$DIR/core/services/job/runner_integration_test.go: `.Context(t)`
$DIR/core/services/job/runner_integration_test.go: `.Run("test enhanced telemetry service creation", func(t *testing.T) {
ctx := testutils.Context(t)
testCases := []struct {
jbCaptureEATelemetry bool
specCaptureEATelemetry bool
expected bool
}{{false, false, false},
{true, false, false},
{false, true, true},
{true, true, true},
}
for _, tc := range testCases {
config = configtest.NewGeneralConfig(t, func(c *chainlink.Config, s *chainlink.Secrets) {
c.P2P.V2.Enabled = ptr(true)
c.P2P.V2.ListenAddresses = &[]string{fmt.Sprintf("127.0.0.1:%d", freeport.GetOne(t))}
c.OCR.CaptureEATelemetry = ptr(tc.specCaptureEATelemetry)
})
relayExtenders = evmtest.NewChainRelayExtenders(t, evmtest.TestChainOpts{DB: db, Client: ethClient, GeneralConfig: config, KeyStore: ethKeyStore})
legacyChains = evmrelay.NewLegacyChainsFromRelayerExtenders(relayExtenders)
kb, err := keyStore.OCR().Create(ctx)
require.NoError(t, err)
s := fmt.Sprintf(minimalNonBootstrapTemplate, cltest.NewEIP55Address(), transmitterAddress.Hex(), kb.ID(), "http://blah.com", "")
jb, err := ocr.ValidatedOracleSpecToml(config, legacyChains, s)
require.NoError(t, err)
err = toml.Unmarshal([]byte(s), &jb)
require.NoError(t, err)
jb.MaxTaskDuration = models.Interval(cltest.MustParseDuration(t, "1s"))
err = jobORM.CreateJob(testutils.Context(t), &jb)
require.NoError(t, err)
assert.Equal(t, jb.MaxTaskDuration, models.Interval(cltest.MustParseDuration(t, "1s")))
lggr := logger.TestLogger(t)
pw := ocrcommon.NewSingletonPeerWrapper(keyStore, config.P2P(), config.OCR(), db, lggr)
servicetest.Run(t, pw)
sd := ocr.NewDelegate(
db,
jobORM,
keyStore,
nil,
pw,
monitoringEndpoint,
legacyChains,
lggr,
config,
servicetest.Run(t, mailboxtest.NewMonitor(t)),
)
jb.OCROracleSpec.CaptureEATelemetry = tc.jbCaptureEATelemetry
services, err := sd.ServicesForSpec(testutils.Context(t), jb)
require.NoError(t, err)
enhancedTelemetryServiceCreated := false
for _, service := range services {
_, ok := service.(*ocrcommon.EnhancedTelemetryService[ocrcommon.EnhancedTelemetryData])
enhancedTelemetryServiceCreated = ok
if enhancedTelemetryServiceCreated {
break
}
}
require.Equal(t, tc.expected, enhancedTelemetryServiceCreated)
}
})`
$DIR/core/services/job/runner_integration_test.go: `.Context(t)`
$DIR/core/services/job/runner_integration_test.go: `.NewGeneralConfig(t, func(c *chainlink.Config, s *chainlink.Secrets) {
c.P2P.V2.Enabled = ptr(true)
c.P2P.V2.ListenAddresses = &[]string{fmt.Sprintf("127.0.0.1:%d", freeport.GetOne(t))}
c.OCR.CaptureEATelemetry = ptr(tc.specCaptureEATelemetry)
})`
$DIR/core/services/job/runner_integration_test.go: `.Sprintf("127.0.0.1:%d", freeport.GetOne(t))`
$DIR/core/services/job/runner_integration_test.go: `.GetOne(t)`
$DIR/core/services/job/runner_integration_test.go: `.NewChainRelayExtenders(t, evmtest.TestChainOpts{DB: db, Client: ethClient, GeneralConfig: config, KeyStore: ethKeyStore})`
$DIR/core/services/job/runner_integration_test.go: `.NewLegacyChainsFromRelayerExtenders(relayExtenders)`
$DIR/core/services/job/runner_integration_test.go: `.OCR()`
$DIR/core/services/job/runner_integration_test.go: `.Create(ctx)`
$DIR/core/services/job/runner_integration_test.go: `.Sprintf(minimalNonBootstrapTemplate, cltest.NewEIP55Address(), transmitterAddress.Hex(), kb.ID(), "http://blah.com", "")`
$DIR/core/services/job/runner_integration_test.go: `.NewEIP55Address()`
$DIR/core/services/job/runner_integration_test.go: `.Hex()`
$DIR/core/services/job/runner_integration_test.go: `.ID()`
$DIR/core/services/job/runner_integration_test.go: `.ValidatedOracleSpecToml(config, legacyChains, s)`
$DIR/core/services/job/runner_integration_test.go: `.Unmarshal([]byte(s), &jb)`
$DIR/core/services/job/runner_integration_test.go: `.Interval(cltest.MustParseDuration(t, "1s"))`
$DIR/core/services/job/runner_integration_test.go: `.MustParseDuration(t, "1s")`
$DIR/core/services/job/runner_integration_test.go: `.CreateJob(testutils.Context(t), &jb)`
$DIR/core/services/job/runner_integration_test.go: `.Context(t)`
$DIR/core/services/job/runner_integration_test.go: `.TestLogger(t)`
$DIR/core/services/job/runner_integration_test.go: `.NewSingletonPeerWrapper(keyStore, config.P2P(), config.OCR(), db, lggr)`
$DIR/core/services/job/runner_integration_test.go: `.P2P()`
$DIR/core/services/job/runner_integration_test.go: `.OCR()`
$DIR/core/services/job/runner_integration_test.go: `.Run(t, pw)`
$DIR/core/services/job/runner_integration_test.go: `.NewDelegate(
db,
jobORM,
keyStore,
nil,
pw,
monitoringEndpoint,
legacyChains,
lggr,
config,
servicetest.Run(t, mailboxtest.NewMonitor(t)),
)`
$DIR/core/services/job/runner_integration_test.go: `.Run(t, mailboxtest.NewMonitor(t))`
$DIR/core/services/job/runner_integration_test.go: `.NewMonitor(t)`
$DIR/core/services/job/runner_integration_test.go: `.ServicesForSpec(testutils.Context(t), jb)`
$DIR/core/services/job/runner_integration_test.go: `.Context(t)`
$DIR/core/services/job/runner_integration_test.go: `.Run("test job spec error is created", func(t *testing.T) {
ctx := testutils.Context(t)
// Create a keystore with an ocr key bundle and p2p key.
kb, err := keyStore.OCR().Create(ctx)
require.NoError(t, err)
spec := fmt.Sprintf(ocrJobSpecTemplate, testutils.NewAddress().Hex(), kb.ID(), transmitterAddress.Hex(), fmt.Sprintf(simpleFetchDataSourceTemplate, "blah", true))
jb := makeOCRJobSpecFromToml(t, spec)
// Create an OCR job
err = jobORM.CreateJob(ctx, jb)
require.NoError(t, err)
lggr := logger.TestLogger(t)
pw := ocrcommon.NewSingletonPeerWrapper(keyStore, config.P2P(), config.OCR(), db, lggr)
servicetest.Run(t, pw)
sd := ocr.NewDelegate(
db,
jobORM,
keyStore,
nil,
pw,
monitoringEndpoint,
legacyChains,
lggr,
config,
servicetest.Run(t, mailboxtest.NewMonitor(t)),
)
services, err := sd.ServicesForSpec(testutils.Context(t), *jb)
require.NoError(t, err)
// Return an error getting the contract code.
ethClient.On("CodeAt", mock.Anything, mock.Anything, mock.Anything).Return(nil, errors.New("no such code"))
for _, s := range services {
err = s.Start(ctx)
require.NoError(t, err)
}
var se []job.SpecError
require.Eventually(t, func() bool {
err = db.Select(&se, `SELECT * FROM job_spec_errors`)
require.NoError(t, err)
return len(se) == 1
}, time.Second, 100*time.Millisecond)
require.Len(t, se, 1)
assert.Equal(t, uint(1), se[0].Occurrences)
for _, s := range services {
err = s.Close()
require.NoError(t, err)
}
// Ensure we can delete an errored
err = jobORM.DeleteJob(ctx, jb.ID)
require.NoError(t, err)
se = []job.SpecError{}
err = db.Select(&se, `SELECT * FROM job_spec_errors`)
require.NoError(t, err)
require.Len(t, se, 0)
// TODO: This breaks the txdb connection, failing subsequent tests. Resolve in the future
// Noop once the job is gone.
// jobORM.RecordError(testutils.Context(t), jb.ID, "test")
// err = db.Find(&se).Error
// require.NoError(t, err)
// require.Len(t, se, 0)
})`
$DIR/core/services/job/runner_integration_test.go: `.Context(t)`
$DIR/core/services/job/runner_integration_test.go: `.OCR()`
$DIR/core/services/job/runner_integration_test.go: `.Create(ctx)`
$DIR/core/services/job/runner_integration_test.go: `.Sprintf(ocrJobSpecTemplate, testutils.NewAddress().Hex(), kb.ID(), transmitterAddress.Hex(), fmt.Sprintf(simpleFetchDataSourceTemplate, "blah", true))`
$DIR/core/services/job/runner_integration_test.go: `.NewAddress()`
$DIR/core/services/job/runner_integration_test.go: `.Hex()`
$DIR/core/services/job/runner_integration_test.go: `.ID()`
$DIR/core/services/job/runner_integration_test.go: `.Hex()`
$DIR/core/services/job/runner_integration_test.go: `.Sprintf(simpleFetchDataSourceTemplate, "blah", true)`
$DIR/core/services/job/runner_integration_test.go: `.CreateJob(ctx, jb)`
$DIR/core/services/job/runner_integration_test.go: `.TestLogger(t)`
$DIR/core/services/job/runner_integration_test.go: `.NewSingletonPeerWrapper(keyStore, config.P2P(), config.OCR(), db, lggr)`
$DIR/core/services/job/runner_integration_test.go: `.P2P()`
$DIR/core/services/job/runner_integration_test.go: `.OCR()`
$DIR/core/services/job/runner_integration_test.go: `.Run(t, pw)`
$DIR/core/services/job/runner_integration_test.go: `.NewDelegate(
db,
jobORM,
keyStore,
nil,
pw,
monitoringEndpoint,
legacyChains,
lggr,
config,
servicetest.Run(t, mailboxtest.NewMonitor(t)),
)`
$DIR/core/services/job/runner_integration_test.go: `.Run(t, mailboxtest.NewMonitor(t))`
$DIR/core/services/job/runner_integration_test.go: `.NewMonitor(t)`
$DIR/core/services/job/runner_integration_test.go: `.ServicesForSpec(testutils.Context(t), *jb)`
$DIR/core/services/job/runner_integration_test.go: `.Context(t)`
$DIR/core/services/job/runner_integration_test.go: `.On("CodeAt", mock.Anything, mock.Anything, mock.Anything)`
$DIR/core/services/job/runner_integration_test.go: `.Return(nil, errors.New("no such code"))`
$DIR/core/services/job/runner_integration_test.go: `.New("no such code")`
$DIR/core/services/job/runner_integration_test.go: `.Start(ctx)`
$DIR/core/services/job/runner_integration_test.go: `.DeleteJob(ctx, jb.ID)`
$DIR/core/services/job/runner_integration_test.go: `.Select(&se, `SELECT * FROM job_spec_errors`)`
$DIR/core/services/job/runner_integration_test.go: `.Run("timeouts", func(t *testing.T) {
ctx := testutils.Context(t)
// There are 4 timeouts:
// - ObservationTimeout = how long the whole OCR time needs to run, or it fails (default 10 seconds)
// - config.JobPipelineMaxTaskDuration() = node level maximum time for a pipeline task (default 10 minutes)
// - config.transmitterAddress, http specific timeouts (default 15s * 5 retries = 75s)
// - "d1 [.... timeout="2s"]" = per task level timeout (should override the global config)
serv := httptest.NewServer(http.HandlerFunc(func(res http.ResponseWriter, req *http.Request) {
time.Sleep(1 * time.Millisecond)
res.WriteHeader(http.StatusOK)
_, err := res.Write([]byte(`{"USD":10.1}`))
require.NoError(t, err)
}))
defer serv.Close()
jb := makeMinimalHTTPOracleSpec(t, db, config, cltest.NewEIP55Address().String(), transmitterAddress.Hex(), cltest.DefaultOCRKeyBundleID, serv.URL, `timeout="1ns"`)
err := jobORM.CreateJob(ctx, jb)
require.NoError(t, err)
_, taskResults, err := runner.ExecuteAndInsertFinishedRun(testutils.Context(t), *jb.PipelineSpec, pipeline.NewVarsFrom(nil), logger.TestLogger(t), true)
require.NoError(t, err)
results := taskResults.FinalResult(logger.TestLogger(t))
assert.Nil(t, results.Values[0])
// No task timeout should succeed.
jb = makeMinimalHTTPOracleSpec(t, db, config, cltest.NewEIP55Address().String(), transmitterAddress.Hex(), cltest.DefaultOCRKeyBundleID, serv.URL, "")
jb.Name = null.NewString("a job 2", true)
err = jobORM.CreateJob(ctx, jb)
require.NoError(t, err)
_, taskResults, err = runner.ExecuteAndInsertFinishedRun(testutils.Context(t), *jb.PipelineSpec, pipeline.NewVarsFrom(nil), logger.TestLogger(t), true)
require.NoError(t, err)
results = taskResults.FinalResult(logger.TestLogger(t))
assert.Equal(t, 10.1, results.Values[0])
assert.Nil(t, results.FatalErrors[0])
// Job specified task timeout should fail.
jb = makeMinimalHTTPOracleSpec(t, db, config, cltest.NewEIP55Address().String(), transmitterAddress.Hex(), cltest.DefaultOCRKeyBundleID, serv.URL, "")
jb.MaxTaskDuration = models.Interval(time.Duration(1))
jb.Name = null.NewString("a job 3", true)
err = jobORM.CreateJob(ctx, jb)
require.NoError(t, err)
_, taskResults, err = runner.ExecuteAndInsertFinishedRun(testutils.Context(t), *jb.PipelineSpec, pipeline.NewVarsFrom(nil), logger.TestLogger(t), true)
require.NoError(t, err)
resultsNoFatalErrs := taskResults.FinalResult(logger.TestLogger(t))
assert.NotNil(t, resultsNoFatalErrs.FatalErrors[0])
})`
$DIR/core/services/job/runner_integration_test.go: `.Context(t)`
$DIR/core/services/job/runner_integration_test.go: `.NewServer(http.HandlerFunc(func(res http.ResponseWriter, req *http.Request) {
time.Sleep(1 * time.Millisecond)
res.WriteHeader(http.StatusOK)
_, err := res.Write([]byte(`{"USD":10.1}`))
require.NoError(t, err)
}))`
$DIR/core/services/job/runner_integration_test.go: `.HandlerFunc(func(res http.ResponseWriter, req *http.Request) {
time.Sleep(1 * time.Millisecond)
res.WriteHeader(http.StatusOK)
_, err := res.Write([]byte(`{"USD":10.1}`))
require.NoError(t, err)
})`
$DIR/core/services/job/runner_integration_test.go: `.Sleep(1 * time.Millisecond)`
$DIR/core/services/job/runner_integration_test.go: `.WriteHeader(http.StatusOK)`
$DIR/core/services/job/runner_integration_test.go: `.Write([]byte(`{"USD":10.1}`))`
$DIR/core/services/job/runner_integration_test.go: `.NewEIP55Address()`
$DIR/core/services/job/runner_integration_test.go: `.String()`
$DIR/core/services/job/runner_integration_test.go: `.Hex()`
$DIR/core/services/job/runner_integration_test.go: `.CreateJob(ctx, jb)`
$DIR/core/services/job/runner_integration_test.go: `.ExecuteAndInsertFinishedRun(testutils.Context(t), *jb.PipelineSpec, pipeline.NewVarsFrom(nil), logger.TestLogger(t), true)`
$DIR/core/services/job/runner_integration_test.go: `.Context(t)`
$DIR/core/services/job/runner_integration_test.go: `.NewVarsFrom(nil)`
$DIR/core/services/job/runner_integration_test.go: `.TestLogger(t)`
$DIR/core/services/job/runner_integration_test.go: `.FinalResult(logger.TestLogger(t))`
$DIR/core/services/job/runner_integration_test.go: `.TestLogger(t)`
$DIR/core/services/job/runner_integration_test.go: `.NewEIP55Address()`
$DIR/core/services/job/runner_integration_test.go: `.String()`
$DIR/core/services/job/runner_integration_test.go: `.Hex()`
$DIR/core/services/job/runner_integration_test.go: `.NewString("a job 2", true)`
$DIR/core/services/job/runner_integration_test.go: `.CreateJob(ctx, jb)`
$DIR/core/services/job/runner_integration_test.go: `.ExecuteAndInsertFinishedRun(testutils.Context(t), *jb.PipelineSpec, pipeline.NewVarsFrom(nil), logger.TestLogger(t), true)`
$DIR/core/services/job/runner_integration_test.go: `.Context(t)`
$DIR/core/services/job/runner_integration_test.go: `.NewVarsFrom(nil)`
$DIR/core/services/job/runner_integration_test.go: `.TestLogger(t)`
$DIR/core/services/job/runner_integration_test.go: `.FinalResult(logger.TestLogger(t))`
$DIR/core/services/job/runner_integration_test.go: `.TestLogger(t)`
$DIR/core/services/job/runner_integration_test.go: `.NewEIP55Address()`
$DIR/core/services/job/runner_integration_test.go: `.String()`
$DIR/core/services/job/runner_integration_test.go: `.Hex()`
$DIR/core/services/job/runner_integration_test.go: `.Interval(time.Duration(1))`
$DIR/core/services/job/runner_integration_test.go: `.Duration(1)`
$DIR/core/services/job/runner_integration_test.go: `.NewString("a job 3", true)`
$DIR/core/services/job/runner_integration_test.go: `.CreateJob(ctx, jb)`
$DIR/core/services/job/runner_integration_test.go: `.ExecuteAndInsertFinishedRun(testutils.Context(t), *jb.PipelineSpec, pipeline.NewVarsFrom(nil), logger.TestLogger(t), true)`
$DIR/core/services/job/runner_integration_test.go: `.Context(t)`
$DIR/core/services/job/runner_integration_test.go: `.NewVarsFrom(nil)`
$DIR/core/services/job/runner_integration_test.go: `.TestLogger(t)`
$DIR/core/services/job/runner_integration_test.go: `.FinalResult(logger.TestLogger(t))`
$DIR/core/services/job/runner_integration_test.go: `.TestLogger(t)`
$DIR/core/services/job/runner_integration_test.go: `.Context(t)`
$DIR/core/services/job/runner_integration_test.go: `.NewHTTPMockServer(t, http.StatusOK, "GET", resp)`
$DIR/core/services/job/runner_integration_test.go: `.CreateJob(ctx, jb)`
$DIR/core/services/job/runner_integration_test.go: `.ExecuteAndInsertFinishedRun(testutils.Context(t), *jb.PipelineSpec, pipeline.NewVarsFrom(nil), logger.TestLogger(t), true)`
$DIR/core/services/job/runner_integration_test.go: `.Context(t)`
$DIR/core/services/job/runner_integration_test.go: `.NewVarsFrom(nil)`
$DIR/core/services/job/runner_integration_test.go: `.TestLogger(t)`
$DIR/core/services/job/runner_integration_test.go: `.FinalResult(logger.TestLogger(t))`
$DIR/core/services/job/runner_integration_test.go: `.TestLogger(t)`
$DIR/core/services/job/runner_integration_test.go: `.DeleteJob(ctx, jb.ID)`
$DIR/core/services/job/runner_integration_test.go: `.ExecuteAndInsertFinishedRun(testutils.Context(t), *jb.PipelineSpec, pipeline.NewVarsFrom(nil), logger.TestLogger(t), true)`
$DIR/core/services/job/runner_integration_test.go: `.Context(t)`
$DIR/core/services/job/runner_integration_test.go: `.NewVarsFrom(nil)`
$DIR/core/services/job/runner_integration_test.go: `.TestLogger(t)`
$DIR/core/services/job/runner_integration_test.go: `.NewEthMocksWithStartupAssertions(t)`
$DIR/core/services/job/runner_integration_test.go: `.NewGeneralConfig(t, func(c *chainlink.Config, s *chainlink.Secrets) {
t := true
c.JobPipeline.ExternalInitiatorsEnabled = &t
c.Database.Listener.FallbackPollInterval = commonconfig.MustNewDuration(10 * time.Millisecond)
})`
$DIR/core/services/job/runner_integration_test.go: `.MustNewDuration(10 * time.Millisecond)`
$DIR/core/services/job/runner_integration_test.go: `.NewApplicationWithConfig(t, cfg, ethClient, cltest.UseRealExternalInitiatorManager)`
$DIR/core/services/job/runner_integration_test.go: `.MustParse("0EEC7E1D-D0D2-476C-A1A8-72DFB6633F46")`
$DIR/core/services/job/runner_integration_test.go: `.String()`
$DIR/core/services/job/runner_integration_test.go: `.NewServer(http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {
if !eiNotifiedOfCreate {
require.Equal(t, http.MethodPost, r.Method)
eiNotifiedOfCreate = true
defer r.Body.Close()
var gotCreateJobRequest map[string]interface{}
err := json.NewDecoder(r.Body).Decode(&gotCreateJobRequest)
require.NoError(t, err)
require.Equal(t, expectedCreateJobRequest, gotCreateJobRequest)
w.WriteHeader(http.StatusOK)
} else {
require.Equal(t, http.MethodDelete, r.Method)
eiNotifiedOfDelete = true
defer r.Body.Close()
require.Equal(t, fmt.Sprintf("/%v", jobUUID.String()), r.URL.Path)
}
}))`
$DIR/core/services/job/runner_integration_test.go: `.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {
if !eiNotifiedOfCreate {
require.Equal(t, http.MethodPost, r.Method)
eiNotifiedOfCreate = true
defer r.Body.Close()
var gotCreateJobRequest map[string]interface{}
err := json.NewDecoder(r.Body).Decode(&gotCreateJobRequest)
require.NoError(t, err)
require.Equal(t, expectedCreateJobRequest, gotCreateJobRequest)
w.WriteHeader(http.StatusOK)
} else {
require.Equal(t, http.MethodDelete, r.Method)
eiNotifiedOfDelete = true
defer r.Body.Close()
require.Equal(t, fmt.Sprintf("/%v", jobUUID.String()), r.URL.Path)
}
})`
$DIR/core/services/job/runner_integration_test.go: `.NewDecoder(r.Body)`
$DIR/core/services/job/runner_integration_test.go: `.Decode(&gotCreateJobRequest)`
$DIR/core/services/job/runner_integration_test.go: `.WriteHeader(http.StatusOK)`
$DIR/core/services/job/runner_integration_test.go: `.Marshal(eiCreate)`
$DIR/core/services/job/runner_integration_test.go: `.CreateExternalInitiatorViaWeb(t, app, string(eiCreateJSON))`
$DIR/core/services/job/runner_integration_test.go: `.NewServer(http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {
defer r.Body.Close()
var bridgeRequest map[string]interface{}
err := json.NewDecoder(r.Body).Decode(&bridgeRequest)
require.NoError(t, err)
require.Equal(t, float64(42), bridgeRequest["value"])
responseURL = bridgeRequest["responseURL"].(string)
w.WriteHeader(http.StatusOK)
require.NoError(t, err)
_, err = io.WriteString(w, `{"pending": true}`)
require.NoError(t, err)
bridgeCalled <- struct{}{}
}))`
$DIR/core/services/job/runner_integration_test.go: `.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {
defer r.Body.Close()
var bridgeRequest map[string]interface{}
err := json.NewDecoder(r.Body).Decode(&bridgeRequest)
require.NoError(t, err)
require.Equal(t, float64(42), bridgeRequest["value"])
responseURL = bridgeRequest["responseURL"].(string)
w.WriteHeader(http.StatusOK)
require.NoError(t, err)
_, err = io.WriteString(w, `{"pending": true}`)
require.NoError(t, err)
bridgeCalled <- struct{}{}
})`
$DIR/core/services/job/runner_integration_test.go: `.NewDecoder(r.Body)`
$DIR/core/services/job/runner_integration_test.go: `.Decode(&bridgeRequest)`
$DIR/core/services/job/runner_integration_test.go: `.WriteHeader(http.StatusOK)`
$DIR/core/services/job/runner_integration_test.go: `.WriteString(w, `{"pending": true}`)`
$DIR/core/services/job/runner_integration_test.go: `.MustCreateBridge(t, app.GetDB(), cltest.BridgeOpts{URL: bridgeServer.URL})`
$DIR/core/services/job/runner_integration_test.go: `.GetDB()`
$DIR/core/services/job/runner_integration_test.go: `.Name.String()`
$DIR/core/services/job/runner_integration_test.go: `.Sprintf(`
type = "webhook"
schemaVersion = 1
externalJobID = "%v"
externalInitiators = [
{
name = "%s",
spec = """
%s
"""
}
]
observationSource = """
parse [type=jsonparse path="result" data="$(jobRun.requestBody)"]
ds1 [type=bridge async=true name="%s" timeout=0 requestData=<{"value": $(parse)}>]
ds1_parse [type=jsonparse lax=false path="data,result"]
ds1_multiply [type=multiply times=1000000000000000000 index=0]
parse->ds1->ds1_parse->ds1_multiply;
"""
`, jobUUID, eiName, cltest.MustJSONMarshal(t, eiSpec), bridgeName)`
$DIR/core/services/job/runner_integration_test.go: `.MustJSONMarshal(t, eiSpec)`
$DIR/core/services/job/runner_integration_test.go: `.ValidatedWebhookSpec(testutils.Context(t), tomlSpec, app.GetExternalInitiatorManager())`
$DIR/core/services/job/runner_integration_test.go: `.Context(t)`
$DIR/core/services/job/runner_integration_test.go: `.GetExternalInitiatorManager()`
$DIR/core/services/job/runner_integration_test.go: `.CreateJobViaWeb(t, app, []byte(cltest.MustJSONMarshal(t, web.CreateJobRequest{TOML: tomlSpec})))`
$DIR/core/services/job/runner_integration_test.go: `.MustJSONMarshal(t, web.CreateJobRequest{TOML: tomlSpec})`
$DIR/core/services/job/runner_integration_test.go: `.Run("simulate request from EI -> Core node with successful callback", func(t *testing.T) {
cltest.AwaitJobActive(t, app.JobSpawner(), jobID, 3*time.Second)
_ = cltest.CreateJobRunViaExternalInitiatorV2(t, app, jobUUID, *eia, cltest.MustJSONMarshal(t, eiRequest))
pipelineORM := pipeline.NewORM(app.GetDB(), logger.TestLogger(t), cfg.JobPipeline().MaxSuccessfulRuns())
bridgesORM := bridges.NewORM(app.GetDB())
jobORM := NewTestORM(t, app.GetDB(), pipelineORM, bridgesORM, app.KeyStore)
// Trigger v2/resume
select {
case <-bridgeCalled:
case <-time.After(time.Second):
t.Fatal("expected bridge server to be called")
}
// Make the request
{
url, err := url.Parse(responseURL)
require.NoError(t, err)
client := app.NewHTTPClient(nil)
body := strings.NewReader(`{"value": {"data":{"result":"123.45"}}}`)
response, cleanup := client.Patch(url.Path, body)
defer cleanup()
cltest.AssertServerResponse(t, response, http.StatusOK)
}
runs := cltest.WaitForPipelineComplete(t, 0, jobID, 1, 4, jobORM, 5*time.Second, 300*time.Millisecond)
require.Len(t, runs, 1)
run := runs[0]
require.Len(t, run.PipelineTaskRuns, 4)
require.Empty(t, run.PipelineTaskRuns[0].Error)
require.Empty(t, run.PipelineTaskRuns[1].Error)
require.Empty(t, run.PipelineTaskRuns[2].Error)
require.Empty(t, run.PipelineTaskRuns[3].Error)
require.Equal(t, jsonserializable.JSONSerializable{Val: []interface{}{"123450000000000000000"}, Valid: true}, run.Outputs)
require.Equal(t, pipeline.RunErrors{null.String{NullString: sql.NullString{String: "", Valid: false}}}, run.FatalErrors)
})`
$DIR/core/services/job/runner_integration_test.go: `.AwaitJobActive(t, app.JobSpawner(), jobID, 3*time.Second)`
$DIR/core/services/job/runner_integration_test.go: `.JobSpawner()`
$DIR/core/services/job/runner_integration_test.go: `.CreateJobRunViaExternalInitiatorV2(t, app, jobUUID, *eia, cltest.MustJSONMarshal(t, eiRequest))`
$DIR/core/services/job/runner_integration_test.go: `.MustJSONMarshal(t, eiRequest)`
$DIR/core/services/job/runner_integration_test.go: `.NewORM(app.GetDB(), logger.TestLogger(t), cfg.JobPipeline().MaxSuccessfulRuns())`
$DIR/core/services/job/runner_integration_test.go: `.GetDB()`
$DIR/core/services/job/runner_integration_test.go: `.TestLogger(t)`
$DIR/core/services/job/runner_integration_test.go: `.JobPipeline()`
$DIR/core/services/job/runner_integration_test.go: `.MaxSuccessfulRuns()`
$DIR/core/services/job/runner_integration_test.go: `.NewORM(app.GetDB())`
$DIR/core/services/job/runner_integration_test.go: `.GetDB()`
$DIR/core/services/job/runner_integration_test.go: `.GetDB()`
$DIR/core/services/job/runner_integration_test.go: `.After(time.Second)`
$DIR/core/services/job/runner_integration_test.go: `.Parse(responseURL)`
$DIR/core/services/job/runner_integration_test.go: `.NewHTTPClient(nil)`
$DIR/core/services/job/runner_integration_test.go: `.NewReader(`{"value": {"data":{"result":"123.45"}}}`)`
$DIR/core/services/job/runner_integration_test.go: `.Patch(url.Path, body)`
$DIR/core/services/job/runner_integration_test.go: `.AssertServerResponse(t, response, http.StatusOK)`
$DIR/core/services/job/runner_integration_test.go: `.WaitForPipelineComplete(t, 0, jobID, 1, 4, jobORM, 5*time.Second, 300*time.Millisecond)`
$DIR/core/services/job/runner_integration_test.go: `.DeleteJobViaWeb(t, app, jobID)`
$DIR/core/services/job/runner_integration_test.go: `.NewEthMocksWithStartupAssertions(t)`
$DIR/core/services/job/runner_integration_test.go: `.NewGeneralConfig(t, func(c *chainlink.Config, s *chainlink.Secrets) {
t := true
c.JobPipeline.ExternalInitiatorsEnabled = &t
c.Database.Listener.FallbackPollInterval = commonconfig.MustNewDuration(10 * time.Millisecond)
})`
$DIR/core/services/job/runner_integration_test.go: `.MustNewDuration(10 * time.Millisecond)`
$DIR/core/services/job/runner_integration_test.go: `.NewApplicationWithConfig(t, cfg, ethClient, cltest.UseRealExternalInitiatorManager)`
$DIR/core/services/job/runner_integration_test.go: `.MustParse("0EEC7E1D-D0D2-476C-A1A8-72DFB6633F47")`
$DIR/core/services/job/runner_integration_test.go: `.String()`
$DIR/core/services/job/runner_integration_test.go: `.NewServer(http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {
if !eiNotifiedOfCreate {
require.Equal(t, http.MethodPost, r.Method)
eiNotifiedOfCreate = true
defer r.Body.Close()
var gotCreateJobRequest map[string]interface{}
err := json.NewDecoder(r.Body).Decode(&gotCreateJobRequest)
require.NoError(t, err)
require.Equal(t, expectedCreateJobRequest, gotCreateJobRequest)
w.WriteHeader(http.StatusOK)
} else {
require.Equal(t, http.MethodDelete, r.Method)
eiNotifiedOfDelete = true
defer r.Body.Close()
require.Equal(t, fmt.Sprintf("/%v", jobUUID.String()), r.URL.Path)
}
}))`
$DIR/core/services/job/runner_integration_test.go: `.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {
if !eiNotifiedOfCreate {
require.Equal(t, http.MethodPost, r.Method)
eiNotifiedOfCreate = true
defer r.Body.Close()
var gotCreateJobRequest map[string]interface{}
err := json.NewDecoder(r.Body).Decode(&gotCreateJobRequest)
require.NoError(t, err)
require.Equal(t, expectedCreateJobRequest, gotCreateJobRequest)
w.WriteHeader(http.StatusOK)
} else {
require.Equal(t, http.MethodDelete, r.Method)
eiNotifiedOfDelete = true
defer r.Body.Close()
require.Equal(t, fmt.Sprintf("/%v", jobUUID.String()), r.URL.Path)
}
})`
$DIR/core/services/job/runner_integration_test.go: `.NewDecoder(r.Body)`
$DIR/core/services/job/runner_integration_test.go: `.Decode(&gotCreateJobRequest)`
$DIR/core/services/job/runner_integration_test.go: `.WriteHeader(http.StatusOK)`
$DIR/core/services/job/runner_integration_test.go: `.Marshal(eiCreate)`
$DIR/core/services/job/runner_integration_test.go: `.CreateExternalInitiatorViaWeb(t, app, string(eiCreateJSON))`
$DIR/core/services/job/runner_integration_test.go: `.NewServer(http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {
defer r.Body.Close()
var bridgeRequest map[string]interface{}
err := json.NewDecoder(r.Body).Decode(&bridgeRequest)
require.NoError(t, err)
require.Equal(t, float64(42), bridgeRequest["value"])
responseURL = bridgeRequest["responseURL"].(string)
w.WriteHeader(http.StatusOK)
require.NoError(t, err)
_, err = io.WriteString(w, `{"pending": true}`)
require.NoError(t, err)
bridgeCalled <- struct{}{}
}))`
$DIR/core/services/job/runner_integration_test.go: `.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {
defer r.Body.Close()
var bridgeRequest map[string]interface{}
err := json.NewDecoder(r.Body).Decode(&bridgeRequest)
require.NoError(t, err)
require.Equal(t, float64(42), bridgeRequest["value"])
responseURL = bridgeRequest["responseURL"].(string)
w.WriteHeader(http.StatusOK)
require.NoError(t, err)
_, err = io.WriteString(w, `{"pending": true}`)
require.NoError(t, err)
bridgeCalled <- struct{}{}
})`
$DIR/core/services/job/runner_integration_test.go: `.NewDecoder(r.Body)`
$DIR/core/services/job/runner_integration_test.go: `.Decode(&bridgeRequest)`
$DIR/core/services/job/runner_integration_test.go: `.WriteHeader(http.StatusOK)`
$DIR/core/services/job/runner_integration_test.go: `.WriteString(w, `{"pending": true}`)`
$DIR/core/services/job/runner_integration_test.go: `.MustCreateBridge(t, app.GetDB(), cltest.BridgeOpts{URL: bridgeServer.URL})`
$DIR/core/services/job/runner_integration_test.go: `.GetDB()`
$DIR/core/services/job/runner_integration_test.go: `.Name.String()`
$DIR/core/services/job/runner_integration_test.go: `.Sprintf(`
type = "webhook"
schemaVersion = 1
externalJobID = "%v"
externalInitiators = [
{
name = "%s",
spec = """
%s
"""
}
]
observationSource = """
parse [type=jsonparse path="result" data="$(jobRun.requestBody)"]
ds1 [type=bridge async=true name="%s" timeout=0 requestData=<{"value": $(parse)}>]
ds1_parse [type=jsonparse lax=false path="data,result"]
ds1_multiply [type=multiply times=1000000000000000000 index=0]
parse->ds1->ds1_parse->ds1_multiply;
"""
`, jobUUID, eiName, cltest.MustJSONMarshal(t, eiSpec), bridgeName)`
$DIR/core/services/job/runner_integration_test.go: `.MustJSONMarshal(t, eiSpec)`
$DIR/core/services/job/runner_integration_test.go: `.ValidatedWebhookSpec(testutils.Context(t), tomlSpec, app.GetExternalInitiatorManager())`
$DIR/core/services/job/runner_integration_test.go: `.Context(t)`
$DIR/core/services/job/runner_integration_test.go: `.GetExternalInitiatorManager()`
$DIR/core/services/job/runner_integration_test.go: `.CreateJobViaWeb(t, app, []byte(cltest.MustJSONMarshal(t, web.CreateJobRequest{TOML: tomlSpec})))`
$DIR/core/services/job/runner_integration_test.go: `.MustJSONMarshal(t, web.CreateJobRequest{TOML: tomlSpec})`
$DIR/core/services/job/runner_integration_test.go: `.Run("simulate request from EI -> Core node with erroring callback", func(t *testing.T) {
_ = cltest.CreateJobRunViaExternalInitiatorV2(t, app, jobUUID, *eia, cltest.MustJSONMarshal(t, eiRequest))
pipelineORM := pipeline.NewORM(app.GetDB(), logger.TestLogger(t), cfg.JobPipeline().MaxSuccessfulRuns())
bridgesORM := bridges.NewORM(app.GetDB())
jobORM := NewTestORM(t, app.GetDB(), pipelineORM, bridgesORM, app.KeyStore)
// Trigger v2/resume
select {
case <-bridgeCalled:
case <-time.After(time.Second):
t.Fatal("expected bridge server to be called")
}
// Make the request
{
url, err := url.Parse(responseURL)
require.NoError(t, err)
client := app.NewHTTPClient(nil)
body := strings.NewReader(`{"error": "something exploded in EA"}`)
response, cleanup := client.Patch(url.Path, body)
defer cleanup()
cltest.AssertServerResponse(t, response, http.StatusOK)
}
runs := cltest.WaitForPipelineError(t, 0, jobID, 1, 4, jobORM, 5*time.Second, 300*time.Millisecond)
require.Len(t, runs, 1)
run := runs[0]
require.Len(t, run.PipelineTaskRuns, 4)
require.Empty(t, run.PipelineTaskRuns[0].Error)
assert.True(t, run.PipelineTaskRuns[1].Error.Valid)
assert.Equal(t, "something exploded in EA", run.PipelineTaskRuns[1].Error.String)
assert.True(t, run.PipelineTaskRuns[2].Error.Valid)
assert.True(t, run.PipelineTaskRuns[3].Error.Valid)
require.Equal(t, jsonserializable.JSONSerializable{Val: []interface{}{interface{}(nil)}, Valid: true}, run.Outputs)
require.Equal(t, pipeline.RunErrors{null.String{NullString: sql.NullString{String: "task inputs: too many errors", Valid: true}}}, run.FatalErrors)
})`
$DIR/core/services/job/runner_integration_test.go: `.CreateJobRunViaExternalInitiatorV2(t, app, jobUUID, *eia, cltest.MustJSONMarshal(t, eiRequest))`
$DIR/core/services/job/runner_integration_test.go: `.MustJSONMarshal(t, eiRequest)`
$DIR/core/services/job/runner_integration_test.go: `.NewORM(app.GetDB(), logger.TestLogger(t), cfg.JobPipeline().MaxSuccessfulRuns())`
$DIR/core/services/job/runner_integration_test.go: `.GetDB()`
$DIR/core/services/job/runner_integration_test.go: `.TestLogger(t)`
$DIR/core/services/job/runner_integration_test.go: `.JobPipeline()`
$DIR/core/services/job/runner_integration_test.go: `.MaxSuccessfulRuns()`
$DIR/core/services/job/runner_integration_test.go: `.NewORM(app.GetDB())`
$DIR/core/services/job/runner_integration_test.go: `.GetDB()`
$DIR/core/services/job/runner_integration_test.go: `.GetDB()`
$DIR/core/services/job/runner_integration_test.go: `.After(time.Second)`
$DIR/core/services/job/runner_integration_test.go: `.Parse(responseURL)`
$DIR/core/services/job/runner_integration_test.go: `.NewHTTPClient(nil)`
$DIR/core/services/job/runner_integration_test.go: `.NewReader(`{"error": "something exploded in EA"}`)`
$DIR/core/services/job/runner_integration_test.go: `.Patch(url.Path, body)`
$DIR/core/services/job/runner_integration_test.go: `.AssertServerResponse(t, response, http.StatusOK)`
$DIR/core/services/job/runner_integration_test.go: `.WaitForPipelineError(t, 0, jobID, 1, 4, jobORM, 5*time.Second, 300*time.Millisecond)`
$DIR/core/services/job/runner_integration_test.go: `.DeleteJobViaWeb(t, app, jobID)`
$DIR/core/services/job/spawner_test.go: `ethClient.On("CallContext", mock.Anything, mock.Anything, "eth_getBlockByNumber", mock.Anything, false).
Run(func(args mock.Arguments) {
head := args.Get(1).(**evmtypes.Head)
*head = cltest.Head(10)
}).
Return(nil).Maybe()`
$DIR/core/services/job/spawner_test.go: `*head = cltest.Head(10)`
$DIR/core/services/job/spawner_test.go: `t.Run("should respect its dependents", func(t *testing.T) {
lggr := logger.TestLogger(t)
orm := NewTestORM(t, db, pipeline.NewORM(db, lggr, config.JobPipeline().MaxSuccessfulRuns()), bridges.NewORM(db), keyStore)
a := utils.NewDependentAwaiter()
a.AddDependents(1)
spawner := job.NewSpawner(orm, config.Database(), noopChecker{}, map[job.Type]job.Delegate{}, lggr, []utils.DependentAwaiter{a})
// Starting the spawner should signal to the dependents
result := make(chan bool)
go func() {
select {
case <-a.AwaitDependents():
result <- true
case <-time.After(2 * time.Second):
result <- false
}
}()
require.NoError(t, spawner.Start(testutils.Context(t)))
assert.True(t, <-result, "failed to signal to dependents")
})`
$DIR/core/services/job/spawner_test.go: `a.AddDependents(1)`
$DIR/core/services/job/spawner_test.go: `result <- true`
$DIR/core/services/job/spawner_test.go: `result <- false`
$DIR/core/services/job/spawner_test.go: `t.Run("starts and stops job services when jobs are added and removed", func(t *testing.T) {
jobA := cltest.MakeDirectRequestJobSpec(t)
jobB := makeOCRJobSpec(t, address, bridge.Name.String(), bridge2.Name.String())
lggr := logger.TestLogger(t)
orm := NewTestORM(t, db, pipeline.NewORM(db, lggr, config.JobPipeline().MaxSuccessfulRuns()), bridges.NewORM(db), keyStore)
eventuallyA := cltest.NewAwaiter()
serviceA1 := mocks.NewServiceCtx(t)
serviceA2 := mocks.NewServiceCtx(t)
serviceA1.On("Start", mock.Anything).Return(nil).Once()
serviceA2.On("Start", mock.Anything).Return(nil).Once().Run(func(mock.Arguments) { eventuallyA.ItHappened() })
mailMon := servicetest.Run(t, mailboxtest.NewMonitor(t))
dA := ocr.NewDelegate(nil, orm, nil, nil, nil, monitoringEndpoint, legacyChains, logger.TestLogger(t), config, mailMon)
delegateA := &delegate{jobA.Type, []job.ServiceCtx{serviceA1, serviceA2}, 0, make(chan struct{}), dA}
eventuallyB := cltest.NewAwaiter()
serviceB1 := mocks.NewServiceCtx(t)
serviceB2 := mocks.NewServiceCtx(t)
serviceB1.On("Start", mock.Anything).Return(nil).Once()
serviceB2.On("Start", mock.Anything).Return(nil).Once().Run(func(mock.Arguments) { eventuallyB.ItHappened() })
dB := ocr.NewDelegate(nil, orm, nil, nil, nil, monitoringEndpoint, legacyChains, logger.TestLogger(t), config, mailMon)
delegateB := &delegate{jobB.Type, []job.ServiceCtx{serviceB1, serviceB2}, 0, make(chan struct{}), dB}
spawner := job.NewSpawner(orm, config.Database(), noopChecker{}, map[job.Type]job.Delegate{
jobA.Type: delegateA,
jobB.Type: delegateB,
}, lggr, nil)
ctx := testutils.Context(t)
require.NoError(t, spawner.Start(ctx))
err := spawner.CreateJob(ctx, nil, jobA)
require.NoError(t, err)
jobSpecIDA := jobA.ID
delegateA.jobID = jobSpecIDA
close(delegateA.chContinueCreatingServices)
eventuallyA.AwaitOrFail(t, 20*time.Second)
err = spawner.CreateJob(ctx, nil, jobB)
require.NoError(t, err)
jobSpecIDB := jobB.ID
delegateB.jobID = jobSpecIDB
close(delegateB.chContinueCreatingServices)
eventuallyB.AwaitOrFail(t, 20*time.Second)
serviceA1.On("Close").Return(nil).Once()
serviceA2.On("Close").Return(nil).Once()
err = spawner.DeleteJob(ctx, nil, jobSpecIDA)
require.NoError(t, err)
serviceB1.On("Close").Return(nil).Once()
serviceB2.On("Close").Return(nil).Once()
err = spawner.DeleteJob(ctx, nil, jobSpecIDB)
require.NoError(t, err)
require.NoError(t, spawner.Close())
})`
$DIR/core/services/job/spawner_test.go: `serviceA1.On("Start", mock.Anything).Return(nil).Once()`
$DIR/core/services/job/spawner_test.go: `serviceA2.On("Start", mock.Anything).Return(nil).Once().Run(func(mock.Arguments) { eventuallyA.ItHappened() })`
$DIR/core/services/job/spawner_test.go: `eventuallyA.ItHappened()`
$DIR/core/services/job/spawner_test.go: `serviceB1.On("Start", mock.Anything).Return(nil).Once()`
$DIR/core/services/job/spawner_test.go: `serviceB2.On("Start", mock.Anything).Return(nil).Once().Run(func(mock.Arguments) { eventuallyB.ItHappened() })`
$DIR/core/services/job/spawner_test.go: `eventuallyB.ItHappened()`
$DIR/core/services/job/spawner_test.go: `delegateA.jobID = jobSpecIDA`
$DIR/core/services/job/spawner_test.go: `close(delegateA.chContinueCreatingServices)`
$DIR/core/services/job/spawner_test.go: `eventuallyA.AwaitOrFail(t, 20*time.Second)`
$DIR/core/services/job/spawner_test.go: `err = spawner.CreateJob(ctx, nil, jobB)`
$DIR/core/services/job/spawner_test.go: `delegateB.jobID = jobSpecIDB`
$DIR/core/services/job/spawner_test.go: `close(delegateB.chContinueCreatingServices)`
$DIR/core/services/job/spawner_test.go: `eventuallyB.AwaitOrFail(t, 20*time.Second)`
$DIR/core/services/job/spawner_test.go: `serviceA1.On("Close").Return(nil).Once()`
$DIR/core/services/job/spawner_test.go: `serviceA2.On("Close").Return(nil).Once()`
$DIR/core/services/job/spawner_test.go: `err = spawner.DeleteJob(ctx, nil, jobSpecIDA)`
$DIR/core/services/job/spawner_test.go: `serviceB1.On("Close").Return(nil).Once()`
$DIR/core/services/job/spawner_test.go: `serviceB2.On("Close").Return(nil).Once()`
$DIR/core/services/job/spawner_test.go: `err = spawner.DeleteJob(ctx, nil, jobSpecIDB)`
$DIR/core/services/job/spawner_test.go: `clearDB(t, db)`
$DIR/core/services/job/spawner_test.go: `t.Run("starts and stops job services from the DB when .Start()/.Stop() is called", func(t *testing.T) {
jobA := makeOCRJobSpec(t, address, bridge.Name.String(), bridge2.Name.String())
eventually := cltest.NewAwaiter()
serviceA1 := mocks.NewServiceCtx(t)
serviceA2 := mocks.NewServiceCtx(t)
serviceA1.On("Start", mock.Anything).Return(nil).Once()
serviceA2.On("Start", mock.Anything).Return(nil).Once().Run(func(mock.Arguments) { eventually.ItHappened() })
lggr := logger.TestLogger(t)
orm := NewTestORM(t, db, pipeline.NewORM(db, lggr, config.JobPipeline().MaxSuccessfulRuns()), bridges.NewORM(db), keyStore)
mailMon := servicetest.Run(t, mailboxtest.NewMonitor(t))
d := ocr.NewDelegate(nil, orm, nil, nil, nil, monitoringEndpoint, legacyChains, logger.TestLogger(t), config, mailMon)
delegateA := &delegate{jobA.Type, []job.ServiceCtx{serviceA1, serviceA2}, 0, nil, d}
spawner := job.NewSpawner(orm, config.Database(), noopChecker{}, map[job.Type]job.Delegate{
jobA.Type: delegateA,
}, lggr, nil)
ctx := testutils.Context(t)
err := orm.CreateJob(ctx, jobA)
require.NoError(t, err)
delegateA.jobID = jobA.ID
require.NoError(t, spawner.Start(ctx))
eventually.AwaitOrFail(t)
serviceA1.On("Close").Return(nil).Once()
serviceA2.On("Close").Return(nil).Once()
require.NoError(t, spawner.Close())
})`
$DIR/core/services/job/spawner_test.go: `serviceA1.On("Start", mock.Anything).Return(nil).Once()`
$DIR/core/services/job/spawner_test.go: `serviceA2.On("Start", mock.Anything).Return(nil).Once().Run(func(mock.Arguments) { eventually.ItHappened() })`
$DIR/core/services/job/spawner_test.go: `eventually.ItHappened()`
$DIR/core/services/job/spawner_test.go: `delegateA.jobID = jobA.ID`
$DIR/core/services/job/spawner_test.go: `eventually.AwaitOrFail(t)`
$DIR/core/services/job/spawner_test.go: `serviceA1.On("Close").Return(nil).Once()`
$DIR/core/services/job/spawner_test.go: `serviceA2.On("Close").Return(nil).Once()`
$DIR/core/services/job/spawner_test.go: `clearDB(t, db)`
$DIR/core/services/job/spawner_test.go: `t.Run("closes job services on 'DeleteJob()'", func(t *testing.T) {
jobA := makeOCRJobSpec(t, address, bridge.Name.String(), bridge2.Name.String())
eventuallyStart := cltest.NewAwaiter()
serviceA1 := mocks.NewServiceCtx(t)
serviceA2 := mocks.NewServiceCtx(t)
serviceA1.On("Start", mock.Anything).Return(nil).Once()
serviceA2.On("Start", mock.Anything).Return(nil).Once().Run(func(mock.Arguments) { eventuallyStart.ItHappened() })
lggr := logger.TestLogger(t)
orm := NewTestORM(t, db, pipeline.NewORM(db, lggr, config.JobPipeline().MaxSuccessfulRuns()), bridges.NewORM(db), keyStore)
mailMon := servicetest.Run(t, mailboxtest.NewMonitor(t))
d := ocr.NewDelegate(nil, orm, nil, nil, nil, monitoringEndpoint, legacyChains, logger.TestLogger(t), config, mailMon)
delegateA := &delegate{jobA.Type, []job.ServiceCtx{serviceA1, serviceA2}, 0, nil, d}
spawner := job.NewSpawner(orm, config.Database(), noopChecker{}, map[job.Type]job.Delegate{
jobA.Type: delegateA,
}, lggr, nil)
ctx := testutils.Context(t)
err := orm.CreateJob(ctx, jobA)
require.NoError(t, err)
jobSpecIDA := jobA.ID
delegateA.jobID = jobSpecIDA
require.NoError(t, spawner.Start(ctx))
defer func() { assert.NoError(t, spawner.Close()) }()
eventuallyStart.AwaitOrFail(t)
// Wait for the claim lock to be taken
gomega.NewWithT(t).Eventually(func() bool {
jobs := spawner.ActiveJobs()
_, exists := jobs[jobSpecIDA]
return exists
}, testutils.WaitTimeout(t), cltest.DBPollingInterval).Should(gomega.Equal(true))
eventuallyClose := cltest.NewAwaiter()
serviceA1.On("Close").Return(nil).Once()
serviceA2.On("Close").Return(nil).Once().Run(func(mock.Arguments) { eventuallyClose.ItHappened() })
err = spawner.DeleteJob(ctx, nil, jobSpecIDA)
require.NoError(t, err)
eventuallyClose.AwaitOrFail(t)
// Wait for the claim lock to be released
gomega.NewWithT(t).Eventually(func() bool {
jobs := spawner.ActiveJobs()
_, exists := jobs[jobSpecIDA]
return exists
}, testutils.WaitTimeout(t), cltest.DBPollingInterval).Should(gomega.Equal(false))
clearDB(t, db)
})`
$DIR/core/services/job/spawner_test.go: `serviceA1.On("Start", mock.Anything).Return(nil).Once()`
$DIR/core/services/job/spawner_test.go: `serviceA2.On("Start", mock.Anything).Return(nil).Once().Run(func(mock.Arguments) { eventuallyStart.ItHappened() })`
$DIR/core/services/job/spawner_test.go: `eventuallyStart.ItHappened()`
$DIR/core/services/job/spawner_test.go: `delegateA.jobID = jobSpecIDA`
$DIR/core/services/job/spawner_test.go: `eventuallyStart.AwaitOrFail(t)`
$DIR/core/services/job/spawner_test.go: `gomega.NewWithT(t).Eventually(func() bool {
jobs := spawner.ActiveJobs()
_, exists := jobs[jobSpecIDA]
return exists
}, testutils.WaitTimeout(t), cltest.DBPollingInterval).Should(gomega.Equal(true))`
$DIR/core/services/job/spawner_test.go: `serviceA1.On("Close").Return(nil).Once()`
$DIR/core/services/job/spawner_test.go: `serviceA2.On("Close").Return(nil).Once().Run(func(mock.Arguments) { eventuallyClose.ItHappened() })`
$DIR/core/services/job/spawner_test.go: `eventuallyClose.ItHappened()`
$DIR/core/services/job/spawner_test.go: `err = spawner.DeleteJob(ctx, nil, jobSpecIDA)`
$DIR/core/services/job/spawner_test.go: `eventuallyClose.AwaitOrFail(t)`
$DIR/core/services/job/spawner_test.go: `gomega.NewWithT(t).Eventually(func() bool {
jobs := spawner.ActiveJobs()
_, exists := jobs[jobSpecIDA]
return exists
}, testutils.WaitTimeout(t), cltest.DBPollingInterval).Should(gomega.Equal(false))`
$DIR/core/services/job/spawner_test.go: `clearDB(t, db)`
$DIR/core/services/job/spawner_test.go: `err = spawner.CreateJob(ctx, nil, jobOCR2Keeper)`
$DIR/core/services/job/spawner_test.go: `delegateOCR2.jobID = jobOCR2Keeper.ID`
$DIR/core/services/job/spawner_test.go: `lp.On("UnregisterFilter", mock.Anything, mock.Anything).Return(nil).Run(func(args mock.Arguments) {
lggr.Debugf("UnregisterFilter called with args %v", args)
})`
$DIR/core/services/job/spawner_test.go: `lggr.Debugf("UnregisterFilter called with args %v", args)`
$DIR/core/services/job/spawner_test.go: `err = spawner.DeleteJob(ctx, nil, jobSpecID)`
$DIR/core/services/job/spawner_test.go: `lp.AssertNumberOfCalls(t, "UnregisterFilter", 6)`
$DIR/core/services/job/spawner_test.go: `lp.On("Close").Return(nil).Once()`
$DIR/core/services/job/spawner_test.go: `.Context(t)`
$DIR/core/services/job/spawner_test.go: `.NewTestGeneralConfig(t)`
$DIR/core/services/job/spawner_test.go: `.NewSqlxDB(t)`
$DIR/core/services/job/spawner_test.go: `.NewKeyStore(t, db)`
$DIR/core/services/job/spawner_test.go: `.Eth()`
$DIR/core/services/job/spawner_test.go: `.MustInsertRandomKey(t, ethKeyStore)`
$DIR/core/services/job/spawner_test.go: `.MustCreateBridge(t, db, cltest.BridgeOpts{})`
$DIR/core/services/job/spawner_test.go: `.MustCreateBridge(t, db, cltest.BridgeOpts{})`
$DIR/core/services/job/spawner_test.go: `.NewEthMocksWithDefaultChain(t)`
$DIR/core/services/job/spawner_test.go: `.On("CallContext", mock.Anything, mock.Anything, "eth_getBlockByNumber", mock.Anything, false)`
$DIR/core/services/job/spawner_test.go: `.
Run(func(args mock.Arguments) {
head := args.Get(1).(**evmtypes.Head)
*head = cltest.Head(10)
})`
$DIR/core/services/job/spawner_test.go: `.Get(1)`
$DIR/core/services/job/spawner_test.go: `.Head(10)`
$DIR/core/services/job/spawner_test.go: `.
Return(nil)`
$DIR/core/services/job/spawner_test.go: `.Maybe()`
$DIR/core/services/job/spawner_test.go: `.NewChainRelayExtenders(t, evmtest.TestChainOpts{DB: db, Client: ethClient, GeneralConfig: config, KeyStore: ethKeyStore})`
$DIR/core/services/job/spawner_test.go: `.NewLegacyChainsFromRelayerExtenders(relayExtenders)`
$DIR/core/services/job/spawner_test.go: `.Run("should respect its dependents", func(t *testing.T) {
lggr := logger.TestLogger(t)
orm := NewTestORM(t, db, pipeline.NewORM(db, lggr, config.JobPipeline().MaxSuccessfulRuns()), bridges.NewORM(db), keyStore)
a := utils.NewDependentAwaiter()
a.AddDependents(1)
spawner := job.NewSpawner(orm, config.Database(), noopChecker{}, map[job.Type]job.Delegate{}, lggr, []utils.DependentAwaiter{a})
// Starting the spawner should signal to the dependents
result := make(chan bool)
go func() {
select {
case <-a.AwaitDependents():
result <- true
case <-time.After(2 * time.Second):
result <- false
}
}()
require.NoError(t, spawner.Start(testutils.Context(t)))
assert.True(t, <-result, "failed to signal to dependents")
})`
$DIR/core/services/job/spawner_test.go: `.TestLogger(t)`
$DIR/core/services/job/spawner_test.go: `.NewORM(db, lggr, config.JobPipeline().MaxSuccessfulRuns())`
$DIR/core/services/job/spawner_test.go: `.JobPipeline()`
$DIR/core/services/job/spawner_test.go: `.MaxSuccessfulRuns()`
$DIR/core/services/job/spawner_test.go: `.NewORM(db)`
$DIR/core/services/job/spawner_test.go: `.NewDependentAwaiter()`
$DIR/core/services/job/spawner_test.go: `.AddDependents(1)`
$DIR/core/services/job/spawner_test.go: `.NewSpawner(orm, config.Database(), noopChecker{}, map[job.Type]job.Delegate{}, lggr, []utils.DependentAwaiter{a})`
$DIR/core/services/job/spawner_test.go: `.Database()`
$DIR/core/services/job/spawner_test.go: `.AwaitDependents()`
$DIR/core/services/job/spawner_test.go: `.After(2 * time.Second)`
$DIR/core/services/job/spawner_test.go: `.Run("starts and stops job services when jobs are added and removed", func(t *testing.T) {
jobA := cltest.MakeDirectRequestJobSpec(t)
jobB := makeOCRJobSpec(t, address, bridge.Name.String(), bridge2.Name.String())
lggr := logger.TestLogger(t)
orm := NewTestORM(t, db, pipeline.NewORM(db, lggr, config.JobPipeline().MaxSuccessfulRuns()), bridges.NewORM(db), keyStore)
eventuallyA := cltest.NewAwaiter()
serviceA1 := mocks.NewServiceCtx(t)
serviceA2 := mocks.NewServiceCtx(t)
serviceA1.On("Start", mock.Anything).Return(nil).Once()
serviceA2.On("Start", mock.Anything).Return(nil).Once().Run(func(mock.Arguments) { eventuallyA.ItHappened() })
mailMon := servicetest.Run(t, mailboxtest.NewMonitor(t))
dA := ocr.NewDelegate(nil, orm, nil, nil, nil, monitoringEndpoint, legacyChains, logger.TestLogger(t), config, mailMon)
delegateA := &delegate{jobA.Type, []job.ServiceCtx{serviceA1, serviceA2}, 0, make(chan struct{}), dA}
eventuallyB := cltest.NewAwaiter()
serviceB1 := mocks.NewServiceCtx(t)
serviceB2 := mocks.NewServiceCtx(t)
serviceB1.On("Start", mock.Anything).Return(nil).Once()
serviceB2.On("Start", mock.Anything).Return(nil).Once().Run(func(mock.Arguments) { eventuallyB.ItHappened() })
dB := ocr.NewDelegate(nil, orm, nil, nil, nil, monitoringEndpoint, legacyChains, logger.TestLogger(t), config, mailMon)
delegateB := &delegate{jobB.Type, []job.ServiceCtx{serviceB1, serviceB2}, 0, make(chan struct{}), dB}
spawner := job.NewSpawner(orm, config.Database(), noopChecker{}, map[job.Type]job.Delegate{
jobA.Type: delegateA,
jobB.Type: delegateB,
}, lggr, nil)
ctx := testutils.Context(t)
require.NoError(t, spawner.Start(ctx))
err := spawner.CreateJob(ctx, nil, jobA)
require.NoError(t, err)
jobSpecIDA := jobA.ID
delegateA.jobID = jobSpecIDA
close(delegateA.chContinueCreatingServices)
eventuallyA.AwaitOrFail(t, 20*time.Second)
err = spawner.CreateJob(ctx, nil, jobB)
require.NoError(t, err)
jobSpecIDB := jobB.ID
delegateB.jobID = jobSpecIDB
close(delegateB.chContinueCreatingServices)
eventuallyB.AwaitOrFail(t, 20*time.Second)
serviceA1.On("Close").Return(nil).Once()
serviceA2.On("Close").Return(nil).Once()
err = spawner.DeleteJob(ctx, nil, jobSpecIDA)
require.NoError(t, err)
serviceB1.On("Close").Return(nil).Once()
serviceB2.On("Close").Return(nil).Once()
err = spawner.DeleteJob(ctx, nil, jobSpecIDB)
require.NoError(t, err)
require.NoError(t, spawner.Close())
})`
$DIR/core/services/job/spawner_test.go: `.MakeDirectRequestJobSpec(t)`
$DIR/core/services/job/spawner_test.go: `.Name.String()`
$DIR/core/services/job/spawner_test.go: `.Name.String()`
$DIR/core/services/job/spawner_test.go: `.TestLogger(t)`
$DIR/core/services/job/spawner_test.go: `.NewORM(db, lggr, config.JobPipeline().MaxSuccessfulRuns())`
$DIR/core/services/job/spawner_test.go: `.JobPipeline()`
$DIR/core/services/job/spawner_test.go: `.MaxSuccessfulRuns()`
$DIR/core/services/job/spawner_test.go: `.NewORM(db)`
$DIR/core/services/job/spawner_test.go: `.NewAwaiter()`
$DIR/core/services/job/spawner_test.go: `.NewServiceCtx(t)`
$DIR/core/services/job/spawner_test.go: `.NewServiceCtx(t)`
$DIR/core/services/job/spawner_test.go: `.On("Start", mock.Anything)`
$DIR/core/services/job/spawner_test.go: `.Return(nil)`
$DIR/core/services/job/spawner_test.go: `.Once()`
$DIR/core/services/job/spawner_test.go: `.On("Start", mock.Anything)`
$DIR/core/services/job/spawner_test.go: `.Return(nil)`
$DIR/core/services/job/spawner_test.go: `.Once()`
$DIR/core/services/job/spawner_test.go: `.Run(func(mock.Arguments) { eventuallyA.ItHappened() })`
$DIR/core/services/job/spawner_test.go: `.ItHappened()`
$DIR/core/services/job/spawner_test.go: `.Run(t, mailboxtest.NewMonitor(t))`
$DIR/core/services/job/spawner_test.go: `.NewMonitor(t)`
$DIR/core/services/job/spawner_test.go: `.NewDelegate(nil, orm, nil, nil, nil, monitoringEndpoint, legacyChains, logger.TestLogger(t), config, mailMon)`
$DIR/core/services/job/spawner_test.go: `.TestLogger(t)`
$DIR/core/services/job/spawner_test.go: `.NewAwaiter()`
$DIR/core/services/job/spawner_test.go: `.NewServiceCtx(t)`
$DIR/core/services/job/spawner_test.go: `.NewServiceCtx(t)`
$DIR/core/services/job/spawner_test.go: `.On("Start", mock.Anything)`
$DIR/core/services/job/spawner_test.go: `.Return(nil)`
$DIR/core/services/job/spawner_test.go: `.Once()`
$DIR/core/services/job/spawner_test.go: `.On("Start", mock.Anything)`
$DIR/core/services/job/spawner_test.go: `.Return(nil)`
$DIR/core/services/job/spawner_test.go: `.Once()`
$DIR/core/services/job/spawner_test.go: `.Run(func(mock.Arguments) { eventuallyB.ItHappened() })`
$DIR/core/services/job/spawner_test.go: `.ItHappened()`
$DIR/core/services/job/spawner_test.go: `.NewDelegate(nil, orm, nil, nil, nil, monitoringEndpoint, legacyChains, logger.TestLogger(t), config, mailMon)`
$DIR/core/services/job/spawner_test.go: `.TestLogger(t)`
$DIR/core/services/job/spawner_test.go: `.NewSpawner(orm, config.Database(), noopChecker{}, map[job.Type]job.Delegate{
jobA.Type: delegateA,
jobB.Type: delegateB,
}, lggr, nil)`
$DIR/core/services/job/spawner_test.go: `.Database()`
$DIR/core/services/job/spawner_test.go: `.Context(t)`
$DIR/core/services/job/spawner_test.go: `.CreateJob(ctx, nil, jobA)`
$DIR/core/services/job/spawner_test.go: `.AwaitOrFail(t, 20*time.Second)`
$DIR/core/services/job/spawner_test.go: `.CreateJob(ctx, nil, jobB)`
$DIR/core/services/job/spawner_test.go: `.AwaitOrFail(t, 20*time.Second)`
$DIR/core/services/job/spawner_test.go: `.On("Close")`
$DIR/core/services/job/spawner_test.go: `.Return(nil)`
$DIR/core/services/job/spawner_test.go: `.Once()`
$DIR/core/services/job/spawner_test.go: `.On("Close")`
$DIR/core/services/job/spawner_test.go: `.Return(nil)`
$DIR/core/services/job/spawner_test.go: `.Once()`
$DIR/core/services/job/spawner_test.go: `.DeleteJob(ctx, nil, jobSpecIDA)`
$DIR/core/services/job/spawner_test.go: `.On("Close")`
$DIR/core/services/job/spawner_test.go: `.Return(nil)`
$DIR/core/services/job/spawner_test.go: `.Once()`
$DIR/core/services/job/spawner_test.go: `.On("Close")`
$DIR/core/services/job/spawner_test.go: `.Return(nil)`
$DIR/core/services/job/spawner_test.go: `.Once()`
$DIR/core/services/job/spawner_test.go: `.DeleteJob(ctx, nil, jobSpecIDB)`
$DIR/core/services/job/spawner_test.go: `.Run("starts and stops job services from the DB when .Start()/.Stop() is called", func(t *testing.T) {
jobA := makeOCRJobSpec(t, address, bridge.Name.String(), bridge2.Name.String())
eventually := cltest.NewAwaiter()
serviceA1 := mocks.NewServiceCtx(t)
serviceA2 := mocks.NewServiceCtx(t)
serviceA1.On("Start", mock.Anything).Return(nil).Once()
serviceA2.On("Start", mock.Anything).Return(nil).Once().Run(func(mock.Arguments) { eventually.ItHappened() })
lggr := logger.TestLogger(t)
orm := NewTestORM(t, db, pipeline.NewORM(db, lggr, config.JobPipeline().MaxSuccessfulRuns()), bridges.NewORM(db), keyStore)
mailMon := servicetest.Run(t, mailboxtest.NewMonitor(t))
d := ocr.NewDelegate(nil, orm, nil, nil, nil, monitoringEndpoint, legacyChains, logger.TestLogger(t), config, mailMon)
delegateA := &delegate{jobA.Type, []job.ServiceCtx{serviceA1, serviceA2}, 0, nil, d}
spawner := job.NewSpawner(orm, config.Database(), noopChecker{}, map[job.Type]job.Delegate{
jobA.Type: delegateA,
}, lggr, nil)
ctx := testutils.Context(t)
err := orm.CreateJob(ctx, jobA)
require.NoError(t, err)
delegateA.jobID = jobA.ID
require.NoError(t, spawner.Start(ctx))
eventually.AwaitOrFail(t)
serviceA1.On("Close").Return(nil).Once()
serviceA2.On("Close").Return(nil).Once()
require.NoError(t, spawner.Close())
})`
$DIR/core/services/job/spawner_test.go: `.Name.String()`
$DIR/core/services/job/spawner_test.go: `.Name.String()`
$DIR/core/services/job/spawner_test.go: `.NewAwaiter()`
$DIR/core/services/job/spawner_test.go: `.NewServiceCtx(t)`
$DIR/core/services/job/spawner_test.go: `.NewServiceCtx(t)`
$DIR/core/services/job/spawner_test.go: `.On("Start", mock.Anything)`
$DIR/core/services/job/spawner_test.go: `.Return(nil)`
$DIR/core/services/job/spawner_test.go: `.Once()`
$DIR/core/services/job/spawner_test.go: `.On("Start", mock.Anything)`
$DIR/core/services/job/spawner_test.go: `.Return(nil)`
$DIR/core/services/job/spawner_test.go: `.Once()`
$DIR/core/services/job/spawner_test.go: `.Run(func(mock.Arguments) { eventually.ItHappened() })`
$DIR/core/services/job/spawner_test.go: `.ItHappened()`
$DIR/core/services/job/spawner_test.go: `.TestLogger(t)`
$DIR/core/services/job/spawner_test.go: `.NewORM(db, lggr, config.JobPipeline().MaxSuccessfulRuns())`
$DIR/core/services/job/spawner_test.go: `.JobPipeline()`
$DIR/core/services/job/spawner_test.go: `.MaxSuccessfulRuns()`
$DIR/core/services/job/spawner_test.go: `.NewORM(db)`
$DIR/core/services/job/spawner_test.go: `.Run(t, mailboxtest.NewMonitor(t))`
$DIR/core/services/job/spawner_test.go: `.NewMonitor(t)`
$DIR/core/services/job/spawner_test.go: `.NewDelegate(nil, orm, nil, nil, nil, monitoringEndpoint, legacyChains, logger.TestLogger(t), config, mailMon)`
$DIR/core/services/job/spawner_test.go: `.TestLogger(t)`
$DIR/core/services/job/spawner_test.go: `.NewSpawner(orm, config.Database(), noopChecker{}, map[job.Type]job.Delegate{
jobA.Type: delegateA,
}, lggr, nil)`
$DIR/core/services/job/spawner_test.go: `.Database()`
$DIR/core/services/job/spawner_test.go: `.Context(t)`
$DIR/core/services/job/spawner_test.go: `.CreateJob(ctx, jobA)`
$DIR/core/services/job/spawner_test.go: `.AwaitOrFail(t)`
$DIR/core/services/job/spawner_test.go: `.On("Close")`
$DIR/core/services/job/spawner_test.go: `.Return(nil)`
$DIR/core/services/job/spawner_test.go: `.Once()`
$DIR/core/services/job/spawner_test.go: `.On("Close")`
$DIR/core/services/job/spawner_test.go: `.Return(nil)`
$DIR/core/services/job/spawner_test.go: `.Once()`
$DIR/core/services/job/spawner_test.go: `.Run("closes job services on 'DeleteJob()'", func(t *testing.T) {
jobA := makeOCRJobSpec(t, address, bridge.Name.String(), bridge2.Name.String())
eventuallyStart := cltest.NewAwaiter()
serviceA1 := mocks.NewServiceCtx(t)
serviceA2 := mocks.NewServiceCtx(t)
serviceA1.On("Start", mock.Anything).Return(nil).Once()
serviceA2.On("Start", mock.Anything).Return(nil).Once().Run(func(mock.Arguments) { eventuallyStart.ItHappened() })
lggr := logger.TestLogger(t)
orm := NewTestORM(t, db, pipeline.NewORM(db, lggr, config.JobPipeline().MaxSuccessfulRuns()), bridges.NewORM(db), keyStore)
mailMon := servicetest.Run(t, mailboxtest.NewMonitor(t))
d := ocr.NewDelegate(nil, orm, nil, nil, nil, monitoringEndpoint, legacyChains, logger.TestLogger(t), config, mailMon)
delegateA := &delegate{jobA.Type, []job.ServiceCtx{serviceA1, serviceA2}, 0, nil, d}
spawner := job.NewSpawner(orm, config.Database(), noopChecker{}, map[job.Type]job.Delegate{
jobA.Type: delegateA,
}, lggr, nil)
ctx := testutils.Context(t)
err := orm.CreateJob(ctx, jobA)
require.NoError(t, err)
jobSpecIDA := jobA.ID
delegateA.jobID = jobSpecIDA
require.NoError(t, spawner.Start(ctx))
defer func() { assert.NoError(t, spawner.Close()) }()
eventuallyStart.AwaitOrFail(t)
// Wait for the claim lock to be taken
gomega.NewWithT(t).Eventually(func() bool {
jobs := spawner.ActiveJobs()
_, exists := jobs[jobSpecIDA]
return exists
}, testutils.WaitTimeout(t), cltest.DBPollingInterval).Should(gomega.Equal(true))
eventuallyClose := cltest.NewAwaiter()
serviceA1.On("Close").Return(nil).Once()
serviceA2.On("Close").Return(nil).Once().Run(func(mock.Arguments) { eventuallyClose.ItHappened() })
err = spawner.DeleteJob(ctx, nil, jobSpecIDA)
require.NoError(t, err)
eventuallyClose.AwaitOrFail(t)
// Wait for the claim lock to be released
gomega.NewWithT(t).Eventually(func() bool {
jobs := spawner.ActiveJobs()
_, exists := jobs[jobSpecIDA]
return exists
}, testutils.WaitTimeout(t), cltest.DBPollingInterval).Should(gomega.Equal(false))
clearDB(t, db)
})`
$DIR/core/services/job/spawner_test.go: `.Name.String()`
$DIR/core/services/job/spawner_test.go: `.Name.String()`
$DIR/core/services/job/spawner_test.go: `.NewAwaiter()`
$DIR/core/services/job/spawner_test.go: `.NewServiceCtx(t)`
$DIR/core/services/job/spawner_test.go: `.NewServiceCtx(t)`
$DIR/core/services/job/spawner_test.go: `.On("Start", mock.Anything)`
$DIR/core/services/job/spawner_test.go: `.Return(nil)`
$DIR/core/services/job/spawner_test.go: `.Once()`
$DIR/core/services/job/spawner_test.go: `.On("Start", mock.Anything)`
$DIR/core/services/job/spawner_test.go: `.Return(nil)`
$DIR/core/services/job/spawner_test.go: `.Once()`
$DIR/core/services/job/spawner_test.go: `.Run(func(mock.Arguments) { eventuallyStart.ItHappened() })`
$DIR/core/services/job/spawner_test.go: `.ItHappened()`
$DIR/core/services/job/spawner_test.go: `.TestLogger(t)`
$DIR/core/services/job/spawner_test.go: `.NewORM(db, lggr, config.JobPipeline().MaxSuccessfulRuns())`
$DIR/core/services/job/spawner_test.go: `.JobPipeline()`
$DIR/core/services/job/spawner_test.go: `.MaxSuccessfulRuns()`
$DIR/core/services/job/spawner_test.go: `.NewORM(db)`
$DIR/core/services/job/spawner_test.go: `.Run(t, mailboxtest.NewMonitor(t))`
$DIR/core/services/job/spawner_test.go: `.NewMonitor(t)`
$DIR/core/services/job/spawner_test.go: `.NewDelegate(nil, orm, nil, nil, nil, monitoringEndpoint, legacyChains, logger.TestLogger(t), config, mailMon)`
$DIR/core/services/job/spawner_test.go: `.TestLogger(t)`
$DIR/core/services/job/spawner_test.go: `.NewSpawner(orm, config.Database(), noopChecker{}, map[job.Type]job.Delegate{
jobA.Type: delegateA,
}, lggr, nil)`
$DIR/core/services/job/spawner_test.go: `.Database()`
$DIR/core/services/job/spawner_test.go: `.Context(t)`
$DIR/core/services/job/spawner_test.go: `.CreateJob(ctx, jobA)`
$DIR/core/services/job/spawner_test.go: `.AwaitOrFail(t)`
$DIR/core/services/job/spawner_test.go: `.NewWithT(t)`
$DIR/core/services/job/spawner_test.go: `.Eventually(func() bool {
jobs := spawner.ActiveJobs()
_, exists := jobs[jobSpecIDA]
return exists
}, testutils.WaitTimeout(t), cltest.DBPollingInterval)`
$DIR/core/services/job/spawner_test.go: `.ActiveJobs()`
$DIR/core/services/job/spawner_test.go: `.WaitTimeout(t)`
$DIR/core/services/job/spawner_test.go: `.Should(gomega.Equal(true))`
$DIR/core/services/job/spawner_test.go: `.Equal(true)`
$DIR/core/services/job/spawner_test.go: `.NewAwaiter()`
$DIR/core/services/job/spawner_test.go: `.On("Close")`
$DIR/core/services/job/spawner_test.go: `.Return(nil)`
$DIR/core/services/job/spawner_test.go: `.Once()`
$DIR/core/services/job/spawner_test.go: `.On("Close")`
$DIR/core/services/job/spawner_test.go: `.Return(nil)`
$DIR/core/services/job/spawner_test.go: `.Once()`
$DIR/core/services/job/spawner_test.go: `.Run(func(mock.Arguments) { eventuallyClose.ItHappened() })`
$DIR/core/services/job/spawner_test.go: `.ItHappened()`
$DIR/core/services/job/spawner_test.go: `.DeleteJob(ctx, nil, jobSpecIDA)`
$DIR/core/services/job/spawner_test.go: `.AwaitOrFail(t)`
$DIR/core/services/job/spawner_test.go: `.NewWithT(t)`
$DIR/core/services/job/spawner_test.go: `.Eventually(func() bool {
jobs := spawner.ActiveJobs()
_, exists := jobs[jobSpecIDA]
return exists
}, testutils.WaitTimeout(t), cltest.DBPollingInterval)`
$DIR/core/services/job/spawner_test.go: `.ActiveJobs()`
$DIR/core/services/job/spawner_test.go: `.WaitTimeout(t)`
$DIR/core/services/job/spawner_test.go: `.Should(gomega.Equal(false))`
$DIR/core/services/job/spawner_test.go: `.Equal(false)`
$DIR/core/services/job/spawner_test.go: `.NewGeneralConfig(t, func(c *chainlink.Config, s *chainlink.Secrets) {
c.Feature.LogPoller = func(b bool) *bool { return &b }(true)
})`
$DIR/core/services/job/spawner_test.go: `.TestLogger(t)`
$DIR/core/services/job/spawner_test.go: `.NewChainRelayExtenders(t, testopts)`
$DIR/core/services/job/spawner_test.go: `.NewLegacyChainsFromRelayerExtenders(relayExtenders)`
$DIR/core/services/job/spawner_test.go: `.Get("0")`
$DIR/core/services/job/spawner_test.go: `.NewRelayer(lggr, chain, evmrelayer.RelayerOpts{
DS: db,
CSAETHKeystore: keyStore,
CapabilitiesRegistry: capabilities.NewRegistry(lggr),
})`
$DIR/core/services/job/spawner_test.go: `.NewRegistry(lggr)`
$DIR/core/services/job/spawner_test.go: `.Slice()`
$DIR/core/services/job/spawner_test.go: `.ID()`
$DIR/core/services/job/spawner_test.go: `.NewORM(db, lggr, config.JobPipeline().MaxSuccessfulRuns())`
$DIR/core/services/job/spawner_test.go: `.JobPipeline()`
$DIR/core/services/job/spawner_test.go: `.MaxSuccessfulRuns()`
$DIR/core/services/job/spawner_test.go: `.NewORM(db)`
$DIR/core/services/job/spawner_test.go: `.Run(t, mailboxtest.NewMonitor(t))`
$DIR/core/services/job/spawner_test.go: `.NewMonitor(t)`
$DIR/core/services/job/spawner_test.go: `.NewRegistrarConfig(loop.GRPCOpts{}, func(name string) (*plugins.RegisteredLoop, error) { return nil, nil }, func(loopId string) {})`
$DIR/core/services/job/spawner_test.go: `.NewDelegateConfig(config.OCR2(), config.Mercury(), config.Threshold(), config.Insecure(), config.JobPipeline(), processConfig)`
$DIR/core/services/job/spawner_test.go: `.OCR2()`
$DIR/core/services/job/spawner_test.go: `.Mercury()`
$DIR/core/services/job/spawner_test.go: `.Threshold()`
$DIR/core/services/job/spawner_test.go: `.Insecure()`
$DIR/core/services/job/spawner_test.go: `.JobPipeline()`
$DIR/core/services/job/spawner_test.go: `.NewDelegate(nil, orm, nil, nil, nil, nil, nil, monitoringEndpoint, legacyChains, lggr, ocr2DelegateConfig,
keyStore.OCR2(), keyStore.DKGSign(), keyStore.DKGEncrypt(), ethKeyStore, testRelayGetter, mailMon, capabilities.NewRegistry(lggr))`
$DIR/core/services/job/spawner_test.go: `.OCR2()`
$DIR/core/services/job/spawner_test.go: `.DKGSign()`
$DIR/core/services/job/spawner_test.go: `.DKGEncrypt()`
$DIR/core/services/job/spawner_test.go: `.NewRegistry(lggr)`
$DIR/core/services/job/spawner_test.go: `.NewSpawner(orm, config.Database(), noopChecker{}, map[job.Type]job.Delegate{
jobOCR2Keeper.Type: delegateOCR2,
}, lggr, nil)`
$DIR/core/services/job/spawner_test.go: `.Database()`
$DIR/core/services/job/spawner_test.go: `.Context(t)`
$DIR/core/services/job/spawner_test.go: `.CreateJob(ctx, nil, jobOCR2Keeper)`
$DIR/core/services/job/spawner_test.go: `.On("UnregisterFilter", mock.Anything, mock.Anything)`
$DIR/core/services/job/spawner_test.go: `.Return(nil)`
$DIR/core/services/job/spawner_test.go: `.Run(func(args mock.Arguments) {
lggr.Debugf("UnregisterFilter called with args %v", args)
})`
$DIR/core/services/job/spawner_test.go: `.Debugf("UnregisterFilter called with args %v", args)`
$DIR/core/services/job/spawner_test.go: `.DeleteJob(ctx, nil, jobSpecID)`
$DIR/core/services/job/spawner_test.go: `.AssertNumberOfCalls(t, "UnregisterFilter", 6)`
$DIR/core/services/job/spawner_test.go: `.On("Close")`
$DIR/core/services/job/spawner_test.go: `.Return(nil)`
$DIR/core/services/job/spawner_test.go: `.Once()`
$DIR/core/services/job/validate_test.go: `t.Run(tc.name, func(t *testing.T) {
_, err := ValidateSpec(tc.spec)
tc.assertion(t, err)
})`
$DIR/core/services/job/validate_test.go: `tc.assertion(t, err)`
$DIR/core/services/job/validate_test.go: `.Run(tc.name, func(t *testing.T) {
_, err := ValidateSpec(tc.spec)
tc.assertion(t, err)
})`
$DIR/core/services/job/validate_test.go: `.assertion(t, err)`
$DIR/core/services/keeper/integration_test.go: `t.Run(test.name, func(t *testing.T) {
t.Parallel()
ctx := testutils.Context(t)
g := gomega.NewWithT(t)
// setup node key
nodeKey := cltest.MustGenerateRandomKey(t)
nodeAddress := nodeKey.Address
nodeAddressEIP55 := evmtypes.EIP55AddressFromAddress(nodeAddress)
// setup blockchain
sergey := testutils.MustNewSimTransactor(t) // owns all the link
steve := testutils.MustNewSimTransactor(t) // registry owner
carrol := testutils.MustNewSimTransactor(t) // client
nelly := testutils.MustNewSimTransactor(t) // other keeper operator 1
nick := testutils.MustNewSimTransactor(t) // other keeper operator 2
genesisData := core.GenesisAlloc{
sergey.From: {Balance: assets.Ether(1000).ToInt()},
steve.From: {Balance: assets.Ether(1000).ToInt()},
carrol.From: {Balance: assets.Ether(1000).ToInt()},
nelly.From: {Balance: assets.Ether(1000).ToInt()},
nick.From: {Balance: assets.Ether(1000).ToInt()},
nodeAddress: {Balance: assets.Ether(1000).ToInt()},
}
gasLimit := uint32(ethconfig.Defaults.Miner.GasCeil * 2)
b := cltest.NewSimulatedBackend(t, genesisData, gasLimit)
backend := client.NewSimulatedBackendClient(t, b, testutils.SimulatedChainID)
stopMining := cltest.Mine(backend.Backend(), 1*time.Second) // >> 2 seconds and the test gets slow, << 1 second and the app may miss heads
defer stopMining()
linkAddr, _, linkToken, err := link_token_interface.DeployLinkToken(sergey, backend)
require.NoError(t, err)
gasFeedAddr, _, _, err := mock_v3_aggregator_contract.DeployMockV3AggregatorContract(steve, backend, 18, big.NewInt(60000000000))
require.NoError(t, err)
linkFeedAddr, _, _, err := mock_v3_aggregator_contract.DeployMockV3AggregatorContract(steve, backend, 18, big.NewInt(20000000000000000))
require.NoError(t, err)
regAddr, registryWrapper := deployKeeperRegistry(t, test.registryVersion, steve, backend, linkAddr, linkFeedAddr, gasFeedAddr)
upkeepAddr, _, upkeepContract, err := basic_upkeep_contract.DeployBasicUpkeepContract(carrol, backend)
require.NoError(t, err)
_, err = linkToken.Transfer(sergey, carrol.From, oneHunEth)
require.NoError(t, err)
_, err = linkToken.Approve(carrol, regAddr, oneHunEth)
require.NoError(t, err)
_, err = registryWrapper.SetKeepers(steve, []common.Address{nodeAddress, nelly.From}, []common.Address{nodeAddress, nelly.From})
require.NoError(t, err)
registrationTx, err := registryWrapper.RegisterUpkeep(steve, upkeepAddr, 2_500_000, carrol.From, []byte{})
require.NoError(t, err)
backend.Commit()
upkeepID := getUpkeepIdFromTx(t, registryWrapper, registrationTx, backend)
_, err = upkeepContract.SetBytesToSend(carrol, payload1)
require.NoError(t, err)
_, err = upkeepContract.SetShouldPerformUpkeep(carrol, true)
require.NoError(t, err)
_, err = registryWrapper.AddFunds(carrol, upkeepID, tenEth)
require.NoError(t, err)
backend.Commit()
// setup app
config, db := heavyweight.FullTestDBV2(t, func(c *chainlink.Config, s *chainlink.Secrets) {
c.EVM[0].GasEstimator.EIP1559DynamicFees = &test.eip1559
c.Keeper.MaxGracePeriod = ptr[int64](0) // avoid waiting to re-submit for upkeeps
c.Keeper.Registry.SyncInterval = commonconfig.MustNewDuration(24 * time.Hour) // disable full sync ticker for test
c.Keeper.TurnLookBack = ptr[int64](0) // testing doesn't need to do far look back
c.EVM[0].BlockBackfillDepth = ptr[uint32](0) // backfill will trigger sync on startup
c.EVM[0].MinIncomingConfirmations = ptr[uint32](1) // disable reorg protection for this test
c.EVM[0].HeadTracker.MaxBufferSize = ptr[uint32](100) // helps prevent missed heads
})
korm := keeper.NewORM(db, logger.TestLogger(t))
app := cltest.NewApplicationWithConfigV2AndKeyOnSimulatedBlockchain(t, config, backend.Backend(), nodeKey)
require.NoError(t, app.Start(ctx))
// create job
regAddrEIP55 := evmtypes.EIP55AddressFromAddress(regAddr)
job := cltest.MustInsertKeeperJob(t, db, korm, nodeAddressEIP55, regAddrEIP55)
err = app.JobSpawner().StartService(ctx, job)
require.NoError(t, err)
// keeper job is triggered and payload is received
receivedBytes := func() []byte {
received, err2 := upkeepContract.ReceivedBytes(nil)
require.NoError(t, err2)
return received
}
g.Eventually(receivedBytes, 20*time.Second, cltest.DBPollingInterval).Should(gomega.Equal(payload1))
// submit from other keeper (because keepers must alternate)
_, err = registryWrapper.PerformUpkeep(nelly, upkeepID, []byte{})
require.NoError(t, err)
// change payload
_, err = upkeepContract.SetBytesToSend(carrol, payload2)
require.NoError(t, err)
_, err = upkeepContract.SetShouldPerformUpkeep(carrol, true)
require.NoError(t, err)
// observe 2nd job run and received payload changes
g.Eventually(receivedBytes, 20*time.Second, cltest.DBPollingInterval).Should(gomega.Equal(payload2))
// cancel upkeep
_, err = registryWrapper.CancelUpkeep(carrol, upkeepID)
require.NoError(t, err)
backend.Commit()
cltest.WaitForCount(t, app.GetDB(), "upkeep_registrations", 0)
// add new upkeep (same target contract)
registrationTx, err = registryWrapper.RegisterUpkeep(steve, upkeepAddr, 2_500_000, carrol.From, []byte{})
require.NoError(t, err)
backend.Commit()
upkeepID = getUpkeepIdFromTx(t, registryWrapper, registrationTx, backend)
_, err = upkeepContract.SetBytesToSend(carrol, payload3)
require.NoError(t, err)
_, err = upkeepContract.SetShouldPerformUpkeep(carrol, true)
require.NoError(t, err)
_, err = registryWrapper.AddFunds(carrol, upkeepID, tenEth)
require.NoError(t, err)
backend.Commit()
// observe update
g.Eventually(receivedBytes, 20*time.Second, cltest.DBPollingInterval).Should(gomega.Equal(payload3))
// remove this node from keeper list
_, err = registryWrapper.SetKeepers(steve, []common.Address{nick.From, nelly.From}, []common.Address{nick.From, nelly.From})
require.NoError(t, err)
var registry keeper.Registry
require.NoError(t, app.GetDB().GetContext(ctx, ®istry, `SELECT * FROM keeper_registries`))
cltest.AssertRecordEventually(t, app.GetDB(), ®istry, fmt.Sprintf("SELECT * FROM keeper_registries WHERE id = %d", registry.ID), func() bool {
return registry.KeeperIndex == -1
})
runs, err := app.PipelineORM().GetAllRuns(ctx)
require.NoError(t, err)
// Since we set grace period to 0, we can have more than 1 pipeline run per perform
// This happens in case we start a pipeline run before previous perform tx is committed to chain
require.GreaterOrEqual(t, len(runs), 3)
prr := webpresenters.NewPipelineRunResource(runs[0], logger.TestLogger(t))
require.Equal(t, 1, len(prr.Outputs))
require.Nil(t, prr.Outputs[0])
})`
$DIR/core/services/keeper/integration_test.go: `_, err = linkToken.Transfer(sergey, carrol.From, oneHunEth)`
$DIR/core/services/keeper/integration_test.go: `_, err = linkToken.Approve(carrol, regAddr, oneHunEth)`
$DIR/core/services/keeper/integration_test.go: `_, err = registryWrapper.SetKeepers(steve, []common.Address{nodeAddress, nelly.From}, []common.Address{nodeAddress, nelly.From})`
$DIR/core/services/keeper/integration_test.go: `backend.Commit()`
$DIR/core/services/keeper/integration_test.go: `_, err = upkeepContract.SetBytesToSend(carrol, payload1)`
$DIR/core/services/keeper/integration_test.go: `_, err = upkeepContract.SetShouldPerformUpkeep(carrol, true)`
$DIR/core/services/keeper/integration_test.go: `_, err = registryWrapper.AddFunds(carrol, upkeepID, tenEth)`
$DIR/core/services/keeper/integration_test.go: `backend.Commit()`
$DIR/core/services/keeper/integration_test.go: `c.EVM[0].GasEstimator.EIP1559DynamicFees = &test.eip1559`
$DIR/core/services/keeper/integration_test.go: `c.Keeper.MaxGracePeriod = ptr[int64](0)`
$DIR/core/services/keeper/integration_test.go: `c.Keeper.Registry.SyncInterval = commonconfig.MustNewDuration(24 * time.Hour)`
$DIR/core/services/keeper/integration_test.go: `c.Keeper.TurnLookBack = ptr[int64](0)`
$DIR/core/services/keeper/integration_test.go: `c.EVM[0].BlockBackfillDepth = ptr[uint32](0)`
$DIR/core/services/keeper/integration_test.go: `c.EVM[0].MinIncomingConfirmations = ptr[uint32](1)`
$DIR/core/services/keeper/integration_test.go: `c.EVM[0].HeadTracker.MaxBufferSize = ptr[uint32](100)`
$DIR/core/services/keeper/integration_test.go: `err = app.JobSpawner().StartService(ctx, job)`
$DIR/core/services/keeper/integration_test.go: `g.Eventually(receivedBytes, 20*time.Second, cltest.DBPollingInterval).Should(gomega.Equal(payload1))`
$DIR/core/services/keeper/integration_test.go: `_, err = registryWrapper.PerformUpkeep(nelly, upkeepID, []byte{})`
$DIR/core/services/keeper/integration_test.go: `_, err = upkeepContract.SetBytesToSend(carrol, payload2)`
$DIR/core/services/keeper/integration_test.go: `_, err = upkeepContract.SetShouldPerformUpkeep(carrol, true)`
$DIR/core/services/keeper/integration_test.go: `g.Eventually(receivedBytes, 20*time.Second, cltest.DBPollingInterval).Should(gomega.Equal(payload2))`
$DIR/core/services/keeper/integration_test.go: `_, err = registryWrapper.CancelUpkeep(carrol, upkeepID)`
$DIR/core/services/keeper/integration_test.go: `backend.Commit()`
$DIR/core/services/keeper/integration_test.go: `cltest.WaitForCount(t, app.GetDB(), "upkeep_registrations", 0)`
$DIR/core/services/keeper/integration_test.go: `registrationTx, err = registryWrapper.RegisterUpkeep(steve, upkeepAddr, 2_500_000, carrol.From, []byte{})`
$DIR/core/services/keeper/integration_test.go: `backend.Commit()`
$DIR/core/services/keeper/integration_test.go: `upkeepID = getUpkeepIdFromTx(t, registryWrapper, registrationTx, backend)`
$DIR/core/services/keeper/integration_test.go: `_, err = upkeepContract.SetBytesToSend(carrol, payload3)`
$DIR/core/services/keeper/integration_test.go: `_, err = upkeepContract.SetShouldPerformUpkeep(carrol, true)`
$DIR/core/services/keeper/integration_test.go: `_, err = registryWrapper.AddFunds(carrol, upkeepID, tenEth)`
$DIR/core/services/keeper/integration_test.go: `backend.Commit()`
$DIR/core/services/keeper/integration_test.go: `g.Eventually(receivedBytes, 20*time.Second, cltest.DBPollingInterval).Should(gomega.Equal(payload3))`
$DIR/core/services/keeper/integration_test.go: `_, err = registryWrapper.SetKeepers(steve, []common.Address{nick.From, nelly.From}, []common.Address{nick.From, nelly.From})`
$DIR/core/services/keeper/integration_test.go: `cltest.AssertRecordEventually(t, app.GetDB(), ®istry, fmt.Sprintf("SELECT * FROM keeper_registries WHERE id = %d", registry.ID), func() bool {
return registry.KeeperIndex == -1
})`
$DIR/core/services/keeper/integration_test.go: `_, err = authorizedForwarder.SetAuthorizedSenders(sergey, []common.Address{nodeAddress})`
$DIR/core/services/keeper/integration_test.go: `_, err = linkToken.Transfer(sergey, carrol.From, oneHunEth)`
$DIR/core/services/keeper/integration_test.go: `_, err = linkToken.Approve(carrol, regAddr, oneHunEth)`
$DIR/core/services/keeper/integration_test.go: `_, err = registryWrapper.SetKeepers(steve, []common.Address{fwdrAddress, nelly.From}, []common.Address{nodeAddress, nelly.From})`
$DIR/core/services/keeper/integration_test.go: `backend.Commit()`
$DIR/core/services/keeper/integration_test.go: `_, err = upkeepContract.SetBytesToSend(carrol, payload1)`
$DIR/core/services/keeper/integration_test.go: `_, err = upkeepContract.SetShouldPerformUpkeep(carrol, true)`
$DIR/core/services/keeper/integration_test.go: `_, err = registryWrapper.AddFunds(carrol, upkeepID, tenEth)`
$DIR/core/services/keeper/integration_test.go: `backend.Commit()`
$DIR/core/services/keeper/integration_test.go: `c.Feature.LogPoller = ptr(true)`
$DIR/core/services/keeper/integration_test.go: `c.EVM[0].GasEstimator.EIP1559DynamicFees = ptr(true)`
$DIR/core/services/keeper/integration_test.go: `c.Keeper.MaxGracePeriod = ptr[int64](0)`
$DIR/core/services/keeper/integration_test.go: `c.Keeper.Registry.SyncInterval = commonconfig.MustNewDuration(24 * time.Hour)`
$DIR/core/services/keeper/integration_test.go: `c.Keeper.TurnLookBack = ptr[int64](0)`
$DIR/core/services/keeper/integration_test.go: `c.EVM[0].BlockBackfillDepth = ptr[uint32](0)`
$DIR/core/services/keeper/integration_test.go: `c.EVM[0].MinIncomingConfirmations = ptr[uint32](1)`
$DIR/core/services/keeper/integration_test.go: `c.EVM[0].HeadTracker.MaxBufferSize = ptr[uint32](100)`
$DIR/core/services/keeper/integration_test.go: `c.EVM[0].Transactions.ForwardersEnabled = ptr(true)`
$DIR/core/services/keeper/integration_test.go: `c.EVM[0].ChainID = (*ubig.Big)(testutils.SimulatedChainID)`
$DIR/core/services/keeper/integration_test.go: `_, err = forwarderORM.CreateForwarder(ctx, fwdrAddress, chainID)`
$DIR/core/services/keeper/integration_test.go: `err = app.JobORM().CreateJob(testutils.Context(t), &jb)`
$DIR/core/services/keeper/integration_test.go: `err = korm.UpsertRegistry(ctx, ®istry)`
$DIR/core/services/keeper/integration_test.go: `err = app.JobSpawner().StartService(ctx, jb)`
$DIR/core/services/keeper/integration_test.go: `g.Eventually(receivedBytes, 20*time.Second, cltest.DBPollingInterval).Should(gomega.Equal(payload1))`
$DIR/core/services/keeper/integration_test.go: `g.Eventually(lastKeeper, 20*time.Second, cltest.DBPollingInterval).Should(gomega.Equal(fwdrAddress))`
$DIR/core/services/keeper/integration_test.go: `_, err = linkToken.Transfer(sergey, carrol.From, oneHunEth)`
$DIR/core/services/keeper/integration_test.go: `_, err = linkToken.Approve(carrol, regAddr, oneHunEth)`
$DIR/core/services/keeper/integration_test.go: `_, err = registryWrapper.SetKeepers(steve, []common.Address{nodeAddress, nelly.From}, []common.Address{nodeAddress, nelly.From})`
$DIR/core/services/keeper/integration_test.go: `backend.Commit()`
$DIR/core/services/keeper/integration_test.go: `_, err = registryWrapper.AddFunds(carrol, upkeepID, tenEth)`
$DIR/core/services/keeper/integration_test.go: `backend.Commit()`
$DIR/core/services/keeper/integration_test.go: `c.Keeper.MaxGracePeriod = ptr[int64](0)`
$DIR/core/services/keeper/integration_test.go: `c.Keeper.Registry.SyncInterval = commonconfig.MustNewDuration(24 * time.Hour)`
$DIR/core/services/keeper/integration_test.go: `c.Keeper.Registry.MaxPerformDataSize = ptr(uint32(maxPerformDataSize))`
$DIR/core/services/keeper/integration_test.go: `c.Keeper.TurnLookBack = ptr[int64](0)`
$DIR/core/services/keeper/integration_test.go: `c.EVM[0].BlockBackfillDepth = ptr[uint32](0)`
$DIR/core/services/keeper/integration_test.go: `c.EVM[0].MinIncomingConfirmations = ptr[uint32](1)`
$DIR/core/services/keeper/integration_test.go: `c.EVM[0].HeadTracker.MaxBufferSize = ptr[uint32](100)`
$DIR/core/services/keeper/integration_test.go: `err = app.JobSpawner().StartService(ctx, job)`
$DIR/core/services/keeper/integration_test.go: `_, err = upkeepContract.SetBytesToSend(carrol, hugePayload)`
$DIR/core/services/keeper/integration_test.go: `_, err = upkeepContract.SetShouldPerformUpkeep(carrol, true)`
$DIR/core/services/keeper/integration_test.go: `g.Consistently(receivedBytes, 20*time.Second, cltest.DBPollingInterval).Should(gomega.Equal([]byte{}))`
$DIR/core/services/keeper/integration_test.go: `_, err = upkeepContract.SetBytesToSend(carrol, smallPayload)`
$DIR/core/services/keeper/integration_test.go: `g.Eventually(receivedBytes, 20*time.Second, cltest.DBPollingInterval).Should(gomega.Equal(smallPayload))`
$DIR/core/services/keeper/integration_test.go: `.Run(test.name, func(t *testing.T) {
t.Parallel()
ctx := testutils.Context(t)
g := gomega.NewWithT(t)
// setup node key
nodeKey := cltest.MustGenerateRandomKey(t)
nodeAddress := nodeKey.Address
nodeAddressEIP55 := evmtypes.EIP55AddressFromAddress(nodeAddress)
// setup blockchain
sergey := testutils.MustNewSimTransactor(t) // owns all the link
steve := testutils.MustNewSimTransactor(t) // registry owner
carrol := testutils.MustNewSimTransactor(t) // client
nelly := testutils.MustNewSimTransactor(t) // other keeper operator 1
nick := testutils.MustNewSimTransactor(t) // other keeper operator 2
genesisData := core.GenesisAlloc{
sergey.From: {Balance: assets.Ether(1000).ToInt()},
steve.From: {Balance: assets.Ether(1000).ToInt()},
carrol.From: {Balance: assets.Ether(1000).ToInt()},
nelly.From: {Balance: assets.Ether(1000).ToInt()},
nick.From: {Balance: assets.Ether(1000).ToInt()},
nodeAddress: {Balance: assets.Ether(1000).ToInt()},
}
gasLimit := uint32(ethconfig.Defaults.Miner.GasCeil * 2)
b := cltest.NewSimulatedBackend(t, genesisData, gasLimit)
backend := client.NewSimulatedBackendClient(t, b, testutils.SimulatedChainID)
stopMining := cltest.Mine(backend.Backend(), 1*time.Second) // >> 2 seconds and the test gets slow, << 1 second and the app may miss heads
defer stopMining()
linkAddr, _, linkToken, err := link_token_interface.DeployLinkToken(sergey, backend)
require.NoError(t, err)
gasFeedAddr, _, _, err := mock_v3_aggregator_contract.DeployMockV3AggregatorContract(steve, backend, 18, big.NewInt(60000000000))
require.NoError(t, err)
linkFeedAddr, _, _, err := mock_v3_aggregator_contract.DeployMockV3AggregatorContract(steve, backend, 18, big.NewInt(20000000000000000))
require.NoError(t, err)
regAddr, registryWrapper := deployKeeperRegistry(t, test.registryVersion, steve, backend, linkAddr, linkFeedAddr, gasFeedAddr)
upkeepAddr, _, upkeepContract, err := basic_upkeep_contract.DeployBasicUpkeepContract(carrol, backend)
require.NoError(t, err)
_, err = linkToken.Transfer(sergey, carrol.From, oneHunEth)
require.NoError(t, err)
_, err = linkToken.Approve(carrol, regAddr, oneHunEth)
require.NoError(t, err)
_, err = registryWrapper.SetKeepers(steve, []common.Address{nodeAddress, nelly.From}, []common.Address{nodeAddress, nelly.From})
require.NoError(t, err)
registrationTx, err := registryWrapper.RegisterUpkeep(steve, upkeepAddr, 2_500_000, carrol.From, []byte{})
require.NoError(t, err)
backend.Commit()
upkeepID := getUpkeepIdFromTx(t, registryWrapper, registrationTx, backend)
_, err = upkeepContract.SetBytesToSend(carrol, payload1)
require.NoError(t, err)
_, err = upkeepContract.SetShouldPerformUpkeep(carrol, true)
require.NoError(t, err)
_, err = registryWrapper.AddFunds(carrol, upkeepID, tenEth)
require.NoError(t, err)
backend.Commit()
// setup app
config, db := heavyweight.FullTestDBV2(t, func(c *chainlink.Config, s *chainlink.Secrets) {
c.EVM[0].GasEstimator.EIP1559DynamicFees = &test.eip1559
c.Keeper.MaxGracePeriod = ptr[int64](0) // avoid waiting to re-submit for upkeeps
c.Keeper.Registry.SyncInterval = commonconfig.MustNewDuration(24 * time.Hour) // disable full sync ticker for test
c.Keeper.TurnLookBack = ptr[int64](0) // testing doesn't need to do far look back
c.EVM[0].BlockBackfillDepth = ptr[uint32](0) // backfill will trigger sync on startup
c.EVM[0].MinIncomingConfirmations = ptr[uint32](1) // disable reorg protection for this test
c.EVM[0].HeadTracker.MaxBufferSize = ptr[uint32](100) // helps prevent missed heads
})
korm := keeper.NewORM(db, logger.TestLogger(t))
app := cltest.NewApplicationWithConfigV2AndKeyOnSimulatedBlockchain(t, config, backend.Backend(), nodeKey)
require.NoError(t, app.Start(ctx))
// create job
regAddrEIP55 := evmtypes.EIP55AddressFromAddress(regAddr)
job := cltest.MustInsertKeeperJob(t, db, korm, nodeAddressEIP55, regAddrEIP55)
err = app.JobSpawner().StartService(ctx, job)
require.NoError(t, err)
// keeper job is triggered and payload is received
receivedBytes := func() []byte {
received, err2 := upkeepContract.ReceivedBytes(nil)
require.NoError(t, err2)
return received
}
g.Eventually(receivedBytes, 20*time.Second, cltest.DBPollingInterval).Should(gomega.Equal(payload1))
// submit from other keeper (because keepers must alternate)
_, err = registryWrapper.PerformUpkeep(nelly, upkeepID, []byte{})
require.NoError(t, err)
// change payload
_, err = upkeepContract.SetBytesToSend(carrol, payload2)
require.NoError(t, err)
_, err = upkeepContract.SetShouldPerformUpkeep(carrol, true)
require.NoError(t, err)
// observe 2nd job run and received payload changes
g.Eventually(receivedBytes, 20*time.Second, cltest.DBPollingInterval).Should(gomega.Equal(payload2))
// cancel upkeep
_, err = registryWrapper.CancelUpkeep(carrol, upkeepID)
require.NoError(t, err)
backend.Commit()
cltest.WaitForCount(t, app.GetDB(), "upkeep_registrations", 0)
// add new upkeep (same target contract)
registrationTx, err = registryWrapper.RegisterUpkeep(steve, upkeepAddr, 2_500_000, carrol.From, []byte{})
require.NoError(t, err)
backend.Commit()
upkeepID = getUpkeepIdFromTx(t, registryWrapper, registrationTx, backend)
_, err = upkeepContract.SetBytesToSend(carrol, payload3)
require.NoError(t, err)
_, err = upkeepContract.SetShouldPerformUpkeep(carrol, true)
require.NoError(t, err)
_, err = registryWrapper.AddFunds(carrol, upkeepID, tenEth)
require.NoError(t, err)
backend.Commit()
// observe update
g.Eventually(receivedBytes, 20*time.Second, cltest.DBPollingInterval).Should(gomega.Equal(payload3))
// remove this node from keeper list
_, err = registryWrapper.SetKeepers(steve, []common.Address{nick.From, nelly.From}, []common.Address{nick.From, nelly.From})
require.NoError(t, err)
var registry keeper.Registry
require.NoError(t, app.GetDB().GetContext(ctx, ®istry, `SELECT * FROM keeper_registries`))
cltest.AssertRecordEventually(t, app.GetDB(), ®istry, fmt.Sprintf("SELECT * FROM keeper_registries WHERE id = %d", registry.ID), func() bool {
return registry.KeeperIndex == -1
})
runs, err := app.PipelineORM().GetAllRuns(ctx)
require.NoError(t, err)
// Since we set grace period to 0, we can have more than 1 pipeline run per perform
// This happens in case we start a pipeline run before previous perform tx is committed to chain
require.GreaterOrEqual(t, len(runs), 3)
prr := webpresenters.NewPipelineRunResource(runs[0], logger.TestLogger(t))
require.Equal(t, 1, len(prr.Outputs))
require.Nil(t, prr.Outputs[0])
})`
$DIR/core/services/keeper/integration_test.go: `.Context(t)`
$DIR/core/services/keeper/integration_test.go: `.NewWithT(t)`
$DIR/core/services/keeper/integration_test.go: `.MustGenerateRandomKey(t)`
$DIR/core/services/keeper/integration_test.go: `.EIP55AddressFromAddress(nodeAddress)`
$DIR/core/services/keeper/integration_test.go: `.MustNewSimTransactor(t)`
$DIR/core/services/keeper/integration_test.go: `.MustNewSimTransactor(t)`
$DIR/core/services/keeper/integration_test.go: `.MustNewSimTransactor(t)`
$DIR/core/services/keeper/integration_test.go: `.MustNewSimTransactor(t)`
$DIR/core/services/keeper/integration_test.go: `.MustNewSimTransactor(t)`
$DIR/core/services/keeper/integration_test.go: `.Ether(1000)`
$DIR/core/services/keeper/integration_test.go: `.ToInt()`
$DIR/core/services/keeper/integration_test.go: `.Ether(1000)`
$DIR/core/services/keeper/integration_test.go: `.ToInt()`
$DIR/core/services/keeper/integration_test.go: `.Ether(1000)`
$DIR/core/services/keeper/integration_test.go: `.ToInt()`
$DIR/core/services/keeper/integration_test.go: `.Ether(1000)`
$DIR/core/services/keeper/integration_test.go: `.ToInt()`
$DIR/core/services/keeper/integration_test.go: `.Ether(1000)`
$DIR/core/services/keeper/integration_test.go: `.ToInt()`
$DIR/core/services/keeper/integration_test.go: `.Ether(1000)`
$DIR/core/services/keeper/integration_test.go: `.ToInt()`
$DIR/core/services/keeper/integration_test.go: `.NewSimulatedBackend(t, genesisData, gasLimit)`
$DIR/core/services/keeper/integration_test.go: `.NewSimulatedBackendClient(t, b, testutils.SimulatedChainID)`
$DIR/core/services/keeper/integration_test.go: `.Mine(backend.Backend(), 1*time.Second)`
$DIR/core/services/keeper/integration_test.go: `.Backend()`
$DIR/core/services/keeper/integration_test.go: `.DeployLinkToken(sergey, backend)`
$DIR/core/services/keeper/integration_test.go: `.DeployMockV3AggregatorContract(steve, backend, 18, big.NewInt(60000000000))`
$DIR/core/services/keeper/integration_test.go: `.NewInt(60000000000)`
$DIR/core/services/keeper/integration_test.go: `.DeployMockV3AggregatorContract(steve, backend, 18, big.NewInt(20000000000000000))`
$DIR/core/services/keeper/integration_test.go: `.NewInt(20000000000000000)`
$DIR/core/services/keeper/integration_test.go: `.DeployBasicUpkeepContract(carrol, backend)`
$DIR/core/services/keeper/integration_test.go: `.Transfer(sergey, carrol.From, oneHunEth)`
$DIR/core/services/keeper/integration_test.go: `.Approve(carrol, regAddr, oneHunEth)`
$DIR/core/services/keeper/integration_test.go: `.SetKeepers(steve, []common.Address{nodeAddress, nelly.From}, []common.Address{nodeAddress, nelly.From})`
$DIR/core/services/keeper/integration_test.go: `.RegisterUpkeep(steve, upkeepAddr, 2_500_000, carrol.From, []byte{})`
$DIR/core/services/keeper/integration_test.go: `.Commit()`
$DIR/core/services/keeper/integration_test.go: `.SetBytesToSend(carrol, payload1)`
$DIR/core/services/keeper/integration_test.go: `.SetShouldPerformUpkeep(carrol, true)`
$DIR/core/services/keeper/integration_test.go: `.AddFunds(carrol, upkeepID, tenEth)`
$DIR/core/services/keeper/integration_test.go: `.Commit()`
$DIR/core/services/keeper/integration_test.go: `.FullTestDBV2(t, func(c *chainlink.Config, s *chainlink.Secrets) {
c.EVM[0].GasEstimator.EIP1559DynamicFees = &test.eip1559
c.Keeper.MaxGracePeriod = ptr[int64](0) // avoid waiting to re-submit for upkeeps
c.Keeper.Registry.SyncInterval = commonconfig.MustNewDuration(24 * time.Hour) // disable full sync ticker for test
c.Keeper.TurnLookBack = ptr[int64](0) // testing doesn't need to do far look back
c.EVM[0].BlockBackfillDepth = ptr[uint32](0) // backfill will trigger sync on startup
c.EVM[0].MinIncomingConfirmations = ptr[uint32](1) // disable reorg protection for this test
c.EVM[0].HeadTracker.MaxBufferSize = ptr[uint32](100) // helps prevent missed heads
})`
$DIR/core/services/keeper/integration_test.go: `.MustNewDuration(24 * time.Hour)`
$DIR/core/services/keeper/integration_test.go: `.NewORM(db, logger.TestLogger(t))`
$DIR/core/services/keeper/integration_test.go: `.TestLogger(t)`
$DIR/core/services/keeper/integration_test.go: `.NewApplicationWithConfigV2AndKeyOnSimulatedBlockchain(t, config, backend.Backend(), nodeKey)`
$DIR/core/services/keeper/integration_test.go: `.Backend()`
$DIR/core/services/keeper/integration_test.go: `.EIP55AddressFromAddress(regAddr)`
$DIR/core/services/keeper/integration_test.go: `.MustInsertKeeperJob(t, db, korm, nodeAddressEIP55, regAddrEIP55)`
$DIR/core/services/keeper/integration_test.go: `.JobSpawner()`
$DIR/core/services/keeper/integration_test.go: `.StartService(ctx, job)`
$DIR/core/services/keeper/integration_test.go: `.ReceivedBytes(nil)`
$DIR/core/services/keeper/integration_test.go: `.Eventually(receivedBytes, 20*time.Second, cltest.DBPollingInterval)`
$DIR/core/services/keeper/integration_test.go: `.Should(gomega.Equal(payload1))`
$DIR/core/services/keeper/integration_test.go: `.Equal(payload1)`
$DIR/core/services/keeper/integration_test.go: `.PerformUpkeep(nelly, upkeepID, []byte{})`
$DIR/core/services/keeper/integration_test.go: `.SetBytesToSend(carrol, payload2)`
$DIR/core/services/keeper/integration_test.go: `.SetShouldPerformUpkeep(carrol, true)`
$DIR/core/services/keeper/integration_test.go: `.Eventually(receivedBytes, 20*time.Second, cltest.DBPollingInterval)`
$DIR/core/services/keeper/integration_test.go: `.Should(gomega.Equal(payload2))`
$DIR/core/services/keeper/integration_test.go: `.Equal(payload2)`
$DIR/core/services/keeper/integration_test.go: `.CancelUpkeep(carrol, upkeepID)`
$DIR/core/services/keeper/integration_test.go: `.Commit()`
$DIR/core/services/keeper/integration_test.go: `.WaitForCount(t, app.GetDB(), "upkeep_registrations", 0)`
$DIR/core/services/keeper/integration_test.go: `.GetDB()`
$DIR/core/services/keeper/integration_test.go: `.RegisterUpkeep(steve, upkeepAddr, 2_500_000, carrol.From, []byte{})`
$DIR/core/services/keeper/integration_test.go: `.Commit()`
$DIR/core/services/keeper/integration_test.go: `.SetBytesToSend(carrol, payload3)`
$DIR/core/services/keeper/integration_test.go: `.SetShouldPerformUpkeep(carrol, true)`
$DIR/core/services/keeper/integration_test.go: `.AddFunds(carrol, upkeepID, tenEth)`
$DIR/core/services/keeper/integration_test.go: `.Commit()`
$DIR/core/services/keeper/integration_test.go: `.Eventually(receivedBytes, 20*time.Second, cltest.DBPollingInterval)`
$DIR/core/services/keeper/integration_test.go: `.Should(gomega.Equal(payload3))`
$DIR/core/services/keeper/integration_test.go: `.Equal(payload3)`
$DIR/core/services/keeper/integration_test.go: `.SetKeepers(steve, []common.Address{nick.From, nelly.From}, []common.Address{nick.From, nelly.From})`
$DIR/core/services/keeper/integration_test.go: `.AssertRecordEventually(t, app.GetDB(), ®istry, fmt.Sprintf("SELECT * FROM keeper_registries WHERE id = %d", registry.ID), func() bool {
return registry.KeeperIndex == -1
})`
$DIR/core/services/keeper/integration_test.go: `.GetDB()`
$DIR/core/services/keeper/integration_test.go: `.Sprintf("SELECT * FROM keeper_registries WHERE id = %d", registry.ID)`
$DIR/core/services/keeper/integration_test.go: `.PipelineORM()`
$DIR/core/services/keeper/integration_test.go: `.GetAllRuns(ctx)`
$DIR/core/services/keeper/integration_test.go: `.NewPipelineRunResource(runs[0], logger.TestLogger(t))`
$DIR/core/services/keeper/integration_test.go: `.TestLogger(t)`
$DIR/core/services/keeper/integration_test.go: `.Context(t)`
$DIR/core/services/keeper/integration_test.go: `.NewWithT(t)`
$DIR/core/services/keeper/integration_test.go: `.MustGenerateRandomKey(t)`
$DIR/core/services/keeper/integration_test.go: `.EIP55AddressFromAddress(nodeAddress)`
$DIR/core/services/keeper/integration_test.go: `.MustNewSimTransactor(t)`
$DIR/core/services/keeper/integration_test.go: `.MustNewSimTransactor(t)`
$DIR/core/services/keeper/integration_test.go: `.MustNewSimTransactor(t)`
$DIR/core/services/keeper/integration_test.go: `.MustNewSimTransactor(t)`
$DIR/core/services/keeper/integration_test.go: `.MustNewSimTransactor(t)`
$DIR/core/services/keeper/integration_test.go: `.Ether(1000)`
$DIR/core/services/keeper/integration_test.go: `.ToInt()`
$DIR/core/services/keeper/integration_test.go: `.Ether(1000)`
$DIR/core/services/keeper/integration_test.go: `.ToInt()`
$DIR/core/services/keeper/integration_test.go: `.Ether(1000)`
$DIR/core/services/keeper/integration_test.go: `.ToInt()`
$DIR/core/services/keeper/integration_test.go: `.Ether(1000)`
$DIR/core/services/keeper/integration_test.go: `.ToInt()`
$DIR/core/services/keeper/integration_test.go: `.Ether(1000)`
$DIR/core/services/keeper/integration_test.go: `.ToInt()`
$DIR/core/services/keeper/integration_test.go: `.Ether(1000)`
$DIR/core/services/keeper/integration_test.go: `.ToInt()`
$DIR/core/services/keeper/integration_test.go: `.NewSimulatedBackend(t, genesisData, gasLimit)`
$DIR/core/services/keeper/integration_test.go: `.NewSimulatedBackendClient(t, b, testutils.SimulatedChainID)`
$DIR/core/services/keeper/integration_test.go: `.Mine(backend.Backend(), 1*time.Second)`
$DIR/core/services/keeper/integration_test.go: `.Backend()`
$DIR/core/services/keeper/integration_test.go: `.DeployLinkToken(sergey, backend)`
$DIR/core/services/keeper/integration_test.go: `.DeployMockV3AggregatorContract(steve, backend, 18, big.NewInt(60000000000))`
$DIR/core/services/keeper/integration_test.go: `.NewInt(60000000000)`
$DIR/core/services/keeper/integration_test.go: `.DeployMockV3AggregatorContract(steve, backend, 18, big.NewInt(20000000000000000))`
$DIR/core/services/keeper/integration_test.go: `.NewInt(20000000000000000)`
$DIR/core/services/keeper/integration_test.go: `.DeployAuthorizedForwarder(sergey, backend, linkAddr, sergey.From, steve.From, []byte{})`
$DIR/core/services/keeper/integration_test.go: `.SetAuthorizedSenders(sergey, []common.Address{nodeAddress})`
$DIR/core/services/keeper/integration_test.go: `.DeployBasicUpkeepContract(carrol, backend)`
$DIR/core/services/keeper/integration_test.go: `.Transfer(sergey, carrol.From, oneHunEth)`
$DIR/core/services/keeper/integration_test.go: `.Approve(carrol, regAddr, oneHunEth)`
$DIR/core/services/keeper/integration_test.go: `.SetKeepers(steve, []common.Address{fwdrAddress, nelly.From}, []common.Address{nodeAddress, nelly.From})`
$DIR/core/services/keeper/integration_test.go: `.RegisterUpkeep(steve, upkeepAddr, 2_500_000, carrol.From, []byte{})`
$DIR/core/services/keeper/integration_test.go: `.Commit()`
$DIR/core/services/keeper/integration_test.go: `.SetBytesToSend(carrol, payload1)`
$DIR/core/services/keeper/integration_test.go: `.SetShouldPerformUpkeep(carrol, true)`
$DIR/core/services/keeper/integration_test.go: `.AddFunds(carrol, upkeepID, tenEth)`
$DIR/core/services/keeper/integration_test.go: `.Commit()`
$DIR/core/services/keeper/integration_test.go: `.FullTestDBV2(t, func(c *chainlink.Config, s *chainlink.Secrets) {
c.Feature.LogPoller = ptr(true)
c.EVM[0].GasEstimator.EIP1559DynamicFees = ptr(true)
c.Keeper.MaxGracePeriod = ptr[int64](0) // avoid waiting to re-submit for upkeeps
c.Keeper.Registry.SyncInterval = commonconfig.MustNewDuration(24 * time.Hour) // disable full sync ticker for test
c.Keeper.TurnLookBack = ptr[int64](0) // testing doesn't need to do far look back
c.EVM[0].BlockBackfillDepth = ptr[uint32](0) // backfill will trigger sync on startup
c.EVM[0].MinIncomingConfirmations = ptr[uint32](1) // disable reorg protection for this test
c.EVM[0].HeadTracker.MaxBufferSize = ptr[uint32](100) // helps prevent missed heads
c.EVM[0].Transactions.ForwardersEnabled = ptr(true) // Enable Operator Forwarder flow
c.EVM[0].ChainID = (*ubig.Big)(testutils.SimulatedChainID)
})`
$DIR/core/services/keeper/integration_test.go: `.MustNewDuration(24 * time.Hour)`
$DIR/core/services/keeper/integration_test.go: `.NewORM(db, logger.TestLogger(t))`
$DIR/core/services/keeper/integration_test.go: `.TestLogger(t)`
$DIR/core/services/keeper/integration_test.go: `.NewApplicationWithConfigV2AndKeyOnSimulatedBlockchain(t, config, backend.Backend(), nodeKey)`
$DIR/core/services/keeper/integration_test.go: `.Backend()`
$DIR/core/services/keeper/integration_test.go: `.NewORM(db)`
$DIR/core/services/keeper/integration_test.go: `.Big(*backend.ConfiguredChainID())`
$DIR/core/services/keeper/integration_test.go: `.ConfiguredChainID()`
$DIR/core/services/keeper/integration_test.go: `.CreateForwarder(ctx, fwdrAddress, chainID)`
$DIR/core/services/keeper/integration_test.go: `.GetRelayers()`
$DIR/core/services/keeper/integration_test.go: `.LegacyEVMChains()`
$DIR/core/services/keeper/integration_test.go: `.Slice()`
$DIR/core/services/keeper/integration_test.go: `.TxManager()`
$DIR/core/services/keeper/integration_test.go: `.GetForwarderForEOA(ctx, nodeAddress)`
$DIR/core/services/keeper/integration_test.go: `.EIP55AddressFromAddress(regAddr)`
$DIR/core/services/keeper/integration_test.go: `.JobORM()`
$DIR/core/services/keeper/integration_test.go: `.CreateJob(testutils.Context(t), &jb)`
$DIR/core/services/keeper/integration_test.go: `.Context(t)`
$DIR/core/services/keeper/integration_test.go: `.EIP55AddressFromAddress(nelly.From)`
$DIR/core/services/keeper/integration_test.go: `.UpsertRegistry(ctx, ®istry)`
$DIR/core/services/keeper/integration_test.go: `.GetUpkeep(&callOpts, upkeepID)`
$DIR/core/services/keeper/integration_test.go: `.JobSpawner()`
$DIR/core/services/keeper/integration_test.go: `.StartService(ctx, jb)`
$DIR/core/services/keeper/integration_test.go: `.ReceivedBytes(nil)`
$DIR/core/services/keeper/integration_test.go: `.Eventually(receivedBytes, 20*time.Second, cltest.DBPollingInterval)`
$DIR/core/services/keeper/integration_test.go: `.Should(gomega.Equal(payload1))`
$DIR/core/services/keeper/integration_test.go: `.Equal(payload1)`
$DIR/core/services/keeper/integration_test.go: `.Eventually(lastKeeper, 20*time.Second, cltest.DBPollingInterval)`
$DIR/core/services/keeper/integration_test.go: `.Should(gomega.Equal(fwdrAddress))`
$DIR/core/services/keeper/integration_test.go: `.Equal(fwdrAddress)`
$DIR/core/services/keeper/integration_test.go: `.Context(t)`
$DIR/core/services/keeper/integration_test.go: `.NewWithT(t)`
$DIR/core/services/keeper/integration_test.go: `.MustGenerateRandomKey(t)`
$DIR/core/services/keeper/integration_test.go: `.EIP55AddressFromAddress(nodeAddress)`
$DIR/core/services/keeper/integration_test.go: `.MustNewSimTransactor(t)`
$DIR/core/services/keeper/integration_test.go: `.MustNewSimTransactor(t)`
$DIR/core/services/keeper/integration_test.go: `.MustNewSimTransactor(t)`
$DIR/core/services/keeper/integration_test.go: `.MustNewSimTransactor(t)`
$DIR/core/services/keeper/integration_test.go: `.MustNewSimTransactor(t)`
$DIR/core/services/keeper/integration_test.go: `.Ether(1000)`
$DIR/core/services/keeper/integration_test.go: `.ToInt()`
$DIR/core/services/keeper/integration_test.go: `.Ether(1000)`
$DIR/core/services/keeper/integration_test.go: `.ToInt()`
$DIR/core/services/keeper/integration_test.go: `.Ether(1000)`
$DIR/core/services/keeper/integration_test.go: `.ToInt()`
$DIR/core/services/keeper/integration_test.go: `.Ether(1000)`
$DIR/core/services/keeper/integration_test.go: `.ToInt()`
$DIR/core/services/keeper/integration_test.go: `.Ether(1000)`
$DIR/core/services/keeper/integration_test.go: `.ToInt()`
$DIR/core/services/keeper/integration_test.go: `.Ether(1000)`
$DIR/core/services/keeper/integration_test.go: `.ToInt()`
$DIR/core/services/keeper/integration_test.go: `.NewSimulatedBackend(t, genesisData, gasLimit)`
$DIR/core/services/keeper/integration_test.go: `.NewSimulatedBackendClient(t, b, testutils.SimulatedChainID)`
$DIR/core/services/keeper/integration_test.go: `.Mine(backend.Backend(), 1*time.Second)`
$DIR/core/services/keeper/integration_test.go: `.Backend()`
$DIR/core/services/keeper/integration_test.go: `.DeployLinkToken(sergey, backend)`
$DIR/core/services/keeper/integration_test.go: `.DeployMockV3AggregatorContract(steve, backend, 18, big.NewInt(60000000000))`
$DIR/core/services/keeper/integration_test.go: `.NewInt(60000000000)`
$DIR/core/services/keeper/integration_test.go: `.DeployMockV3AggregatorContract(steve, backend, 18, big.NewInt(20000000000000000))`
$DIR/core/services/keeper/integration_test.go: `.NewInt(20000000000000000)`
$DIR/core/services/keeper/integration_test.go: `.DeployBasicUpkeepContract(carrol, backend)`
$DIR/core/services/keeper/integration_test.go: `.Transfer(sergey, carrol.From, oneHunEth)`
$DIR/core/services/keeper/integration_test.go: `.Approve(carrol, regAddr, oneHunEth)`
$DIR/core/services/keeper/integration_test.go: `.SetKeepers(steve, []common.Address{nodeAddress, nelly.From}, []common.Address{nodeAddress, nelly.From})`
$DIR/core/services/keeper/integration_test.go: `.RegisterUpkeep(steve, upkeepAddr, 2_500_000, carrol.From, []byte{})`
$DIR/core/services/keeper/integration_test.go: `.Commit()`
$DIR/core/services/keeper/integration_test.go: `.AddFunds(carrol, upkeepID, tenEth)`
$DIR/core/services/keeper/integration_test.go: `.Commit()`
$DIR/core/services/keeper/integration_test.go: `.FullTestDBV2(t, func(c *chainlink.Config, s *chainlink.Secrets) {
c.Keeper.MaxGracePeriod = ptr[int64](0) // avoid waiting to re-submit for upkeeps
c.Keeper.Registry.SyncInterval = commonconfig.MustNewDuration(24 * time.Hour) // disable full sync ticker for test
c.Keeper.Registry.MaxPerformDataSize = ptr(uint32(maxPerformDataSize)) // set the max perform data size
c.Keeper.TurnLookBack = ptr[int64](0) // testing doesn't need to do far look back
c.EVM[0].BlockBackfillDepth = ptr[uint32](0) // backfill will trigger sync on startup
c.EVM[0].MinIncomingConfirmations = ptr[uint32](1) // disable reorg protection for this test
c.EVM[0].HeadTracker.MaxBufferSize = ptr[uint32](100) // helps prevent missed heads
})`
$DIR/core/services/keeper/integration_test.go: `.MustNewDuration(24 * time.Hour)`
$DIR/core/services/keeper/integration_test.go: `.NewORM(db, logger.TestLogger(t))`
$DIR/core/services/keeper/integration_test.go: `.TestLogger(t)`
$DIR/core/services/keeper/integration_test.go: `.NewApplicationWithConfigV2AndKeyOnSimulatedBlockchain(t, config, backend.Backend(), nodeKey)`
$DIR/core/services/keeper/integration_test.go: `.Backend()`
$DIR/core/services/keeper/integration_test.go: `.EIP55AddressFromAddress(regAddr)`
$DIR/core/services/keeper/integration_test.go: `.MustInsertKeeperJob(t, db, korm, nodeAddressEIP55, regAddrEIP55)`
$DIR/core/services/keeper/integration_test.go: `.JobSpawner()`
$DIR/core/services/keeper/integration_test.go: `.StartService(ctx, job)`
$DIR/core/services/keeper/integration_test.go: `.ReceivedBytes(nil)`
$DIR/core/services/keeper/integration_test.go: `.SetBytesToSend(carrol, hugePayload)`
$DIR/core/services/keeper/integration_test.go: `.SetShouldPerformUpkeep(carrol, true)`
$DIR/core/services/keeper/integration_test.go: `.Consistently(receivedBytes, 20*time.Second, cltest.DBPollingInterval)`
$DIR/core/services/keeper/integration_test.go: `.Should(gomega.Equal([]byte{}))`
$DIR/core/services/keeper/integration_test.go: `.Equal([]byte{})`
$DIR/core/services/keeper/integration_test.go: `.SetBytesToSend(carrol, smallPayload)`
$DIR/core/services/keeper/integration_test.go: `.Eventually(receivedBytes, 20*time.Second, cltest.DBPollingInterval)`
$DIR/core/services/keeper/integration_test.go: `.Should(gomega.Equal(smallPayload))`
$DIR/core/services/keeper/integration_test.go: `.Equal(smallPayload)`
$DIR/core/services/keeper/models_test.go: `t.Run(test.name, func(t *testing.T) {
o, ok := new(big.Int).SetString(test.id, 10)
if !ok {
t.Errorf("%s failed to parse test integer", test.name)
return
}
result := NewUpkeepIdentifier(ubig.New(o)).String()
require.Equal(t, test.hex, result)
})`
$DIR/core/services/keeper/models_test.go: `.Run(test.name, func(t *testing.T) {
o, ok := new(big.Int).SetString(test.id, 10)
if !ok {
t.Errorf("%s failed to parse test integer", test.name)
return
}
result := NewUpkeepIdentifier(ubig.New(o)).String()
require.Equal(t, test.hex, result)
})`
$DIR/core/services/keeper/models_test.go: `.SetString(test.id, 10)`
$DIR/core/services/keeper/models_test.go: `.New(o)`
$DIR/core/services/keeper/models_test.go: `.String()`
$DIR/core/services/keeper/orm_test.go: `cltest.MustInsertKeeperRegistry(t, db, orm, ethKeyStore, 0, 1, 20)`
$DIR/core/services/keeper/orm_test.go: `cltest.MustInsertKeeperRegistry(t, db, orm, ethKeyStore, 0, 1, 20)`
$DIR/core/services/keeper/orm_test.go: `cltest.MustInsertKeeperRegistry(t, db, orm, ethKeyStore, 0, 1, 20)`
$DIR/core/services/keeper/orm_test.go: `cltest.AssertCount(t, db, "upkeep_registrations", 1)`
$DIR/core/services/keeper/orm_test.go: `upkeep.ExecuteGas = 20_000`
$DIR/core/services/keeper/orm_test.go: `upkeep.CheckData = common.Hex2Bytes("8888")`
$DIR/core/services/keeper/orm_test.go: `upkeep.LastRunBlockHeight = 2`
$DIR/core/services/keeper/orm_test.go: `cltest.AssertCount(t, db, "upkeep_registrations", 1)`
$DIR/core/services/keeper/orm_test.go: `err = db.Get(&upkeepFromDB, `SELECT * FROM upkeep_registrations ORDER BY id LIMIT 1`)`
$DIR/core/services/keeper/orm_test.go: `upkeepIDs = append(upkeepIDs, *upkeep.UpkeepID)`
$DIR/core/services/keeper/orm_test.go: `cltest.AssertCount(t, db, "upkeep_registrations", 3)`
$DIR/core/services/keeper/orm_test.go: `cltest.AssertCount(t, db, "upkeep_registrations", 1)`
$DIR/core/services/keeper/orm_test.go: `err = db.Get(&remainingUpkeep, `SELECT * FROM upkeep_registrations ORDER BY id LIMIT 1`)`
$DIR/core/services/keeper/orm_test.go: `ordered[i] = int64(i)`
$DIR/core/services/keeper/orm_test.go: `cltest.AssertCount(t, db, "upkeep_registrations", 100)`
$DIR/core/services/keeper/orm_test.go: `shuffled[i] = eligibleUpkeeps[i].UpkeepID`
$DIR/core/services/keeper/orm_test.go: `cltest.MustInsertUpkeepForRegistry(t, db, registry)`
$DIR/core/services/keeper/orm_test.go: `cltest.AssertCount(t, db, "keeper_registries", 1)`
$DIR/core/services/keeper/orm_test.go: `cltest.AssertCount(t, db, "upkeep_registrations", 100)`
$DIR/core/services/keeper/orm_test.go: `cltest.MustInsertUpkeepForRegistry(t, db, registry)`
$DIR/core/services/keeper/orm_test.go: `cltest.AssertCount(t, db, "keeper_registries", 1)`
$DIR/core/services/keeper/orm_test.go: `cltest.AssertCount(t, db, "upkeep_registrations", 1000)`
$DIR/core/services/keeper/orm_test.go: `sort.Slice(list1, func(i, j int) bool {
return list1[i].UpkeepID.Cmp(list1[j].UpkeepID) == -1
})`
$DIR/core/services/keeper/orm_test.go: `sort.Slice(list2, func(i, j int) bool {
return list2[i].UpkeepID.Cmp(list2[j].UpkeepID) == -1
})`
$DIR/core/services/keeper/orm_test.go: `sort.Slice(list3, func(i, j int) bool {
return list3[i].UpkeepID.Cmp(list3[j].UpkeepID) == -1
})`
$DIR/core/services/keeper/orm_test.go: `sort.Slice(list4, func(i, j int) bool {
return list4[i].UpkeepID.Cmp(list4[j].UpkeepID) == -1
})`
$DIR/core/services/keeper/orm_test.go: `cltest.MustInsertUpkeepForRegistry(t, db, registry)`
$DIR/core/services/keeper/orm_test.go: `cltest.AssertCount(t, db, "keeper_registries", 1)`
$DIR/core/services/keeper/orm_test.go: `cltest.AssertCount(t, db, "upkeep_registrations", 100)`
$DIR/core/services/keeper/orm_test.go: `cltest.MustInsertUpkeepForRegistry(t, db, registry)`
$DIR/core/services/keeper/orm_test.go: `cltest.AssertCount(t, db, "keeper_registries", 1)`
$DIR/core/services/keeper/orm_test.go: `cltest.AssertCount(t, db, "upkeep_registrations", 100)`
$DIR/core/services/keeper/orm_test.go: `cltest.MustInsertUpkeepForRegistry(t, db, registry)`
$DIR/core/services/keeper/orm_test.go: `cltest.AssertCount(t, db, "keeper_registries", 1)`
$DIR/core/services/keeper/orm_test.go: `cltest.AssertCount(t, db, "upkeep_registrations", 100)`
$DIR/core/services/keeper/orm_test.go: `cltest.MustInsertUpkeepForRegistry(t, db, registry1)`
$DIR/core/services/keeper/orm_test.go: `cltest.MustInsertUpkeepForRegistry(t, db, registry2)`
$DIR/core/services/keeper/orm_test.go: `cltest.AssertCount(t, db, "keeper_registries", 2)`
$DIR/core/services/keeper/orm_test.go: `cltest.AssertCount(t, db, "upkeep_registrations", 2)`
$DIR/core/services/keeper/orm_test.go: `err = orm.UpsertUpkeep(ctx, &upkeep)`
$DIR/core/services/keeper/orm_test.go: `upkeep = newUpkeep(registry, 8)`
$DIR/core/services/keeper/orm_test.go: `err = orm.UpsertUpkeep(ctx, &upkeep)`
$DIR/core/services/keeper/orm_test.go: `upkeepIDs, err = orm.AllUpkeepIDsForRegistry(ctx, registry.ID)`
$DIR/core/services/keeper/orm_test.go: `registry.NumKeepers = 2`
$DIR/core/services/keeper/orm_test.go: `registry.KeeperIndexMap = map[types.EIP55Address]int32{
registry.FromAddress: 0,
types.EIP55AddressFromAddress(evmutils.ZeroAddress): 1,
}`
$DIR/core/services/keeper/orm_test.go: `assertLastRunHeight(t, db, upkeep, 100, 0)`
$DIR/core/services/keeper/orm_test.go: `rowsAffected, err = orm.SetLastRunInfoForUpkeepOnJob(ctx, j.ID, upkeep.UpkeepID, 0, registry.FromAddress)`
$DIR/core/services/keeper/orm_test.go: `assertLastRunHeight(t, db, upkeep, 100, 0)`
$DIR/core/services/keeper/orm_test.go: `rowsAffected, err = orm.SetLastRunInfoForUpkeepOnJob(ctx, j.ID, upkeep.UpkeepID, 100, types.EIP55AddressFromAddress(evmutils.ZeroAddress))`
$DIR/core/services/keeper/orm_test.go: `assertLastRunHeight(t, db, upkeep, 100, 1)`
$DIR/core/services/keeper/orm_test.go: `rowsAffected, err = orm.SetLastRunInfoForUpkeepOnJob(ctx, j.ID, upkeep.UpkeepID, 101, registry.FromAddress)`
$DIR/core/services/keeper/orm_test.go: `t.Run(test.name, func(tt *testing.T) {
var test = test
var result string
err := db.Get(&result, sql, inputBytes, test.inputLength)
if test.expectedError {
assert.Error(t, err)
return
}
assert.NoError(t, err)
assert.Equal(t, test.expectedOutput, result)
})`
$DIR/core/services/keeper/orm_test.go: `t.Run(test.name, func(tt *testing.T) {
var test = test
var result string
err := db.Get(&result, sql, test.input.String())
if test.errorExpected {
require.Error(t, err)
return
}
require.NoError(t, err)
expected := utils.LeftPadBitString(fmt.Sprintf("%b", test.input), 256)
require.Equal(t, expected, result)
})`
$DIR/core/services/keeper/orm_test.go: `.Context(t)`
$DIR/core/services/keeper/orm_test.go: `.NewKeyStore(t, db)`
$DIR/core/services/keeper/orm_test.go: `.Eth()`
$DIR/core/services/keeper/orm_test.go: `.MustInsertKeeperRegistry(t, db, orm, ethKeyStore, 0, 1, 20)`
$DIR/core/services/keeper/orm_test.go: `.MustInsertKeeperRegistry(t, db, orm, ethKeyStore, 0, 1, 20)`
$DIR/core/services/keeper/orm_test.go: `.Registries(ctx)`
$DIR/core/services/keeper/orm_test.go: `.Context(t)`
$DIR/core/services/keeper/orm_test.go: `.NewKeyStore(t, db)`
$DIR/core/services/keeper/orm_test.go: `.Eth()`
$DIR/core/services/keeper/orm_test.go: `.MustInsertKeeperRegistry(t, db, orm, ethKeyStore, 0, 1, 20)`
$DIR/core/services/keeper/orm_test.go: `.MustInsertKeeperRegistry(t, db, orm, ethKeyStore, 0, 1, 20)`
$DIR/core/services/keeper/orm_test.go: `.RegistryByContractAddress(ctx, registry.ContractAddress)`
$DIR/core/services/keeper/orm_test.go: `.Context(t)`
$DIR/core/services/keeper/orm_test.go: `.NewKeyStore(t, db)`
$DIR/core/services/keeper/orm_test.go: `.Eth()`
$DIR/core/services/keeper/orm_test.go: `.MustInsertKeeperRegistry(t, db, orm, ethKeyStore, 0, 1, 20)`
$DIR/core/services/keeper/orm_test.go: `.NewI(0)`
$DIR/core/services/keeper/orm_test.go: `.AssertCount(t, db, "upkeep_registrations", 1)`
$DIR/core/services/keeper/orm_test.go: `.Hex2Bytes("8888")`
$DIR/core/services/keeper/orm_test.go: `.UpsertUpkeep(ctx, &upkeep)`
$DIR/core/services/keeper/orm_test.go: `.AssertCount(t, db, "upkeep_registrations", 1)`
$DIR/core/services/keeper/orm_test.go: `.Get(&upkeepFromDB, `SELECT * FROM upkeep_registrations ORDER BY id LIMIT 1`)`
$DIR/core/services/keeper/orm_test.go: `.Context(t)`
$DIR/core/services/keeper/orm_test.go: `.NewKeyStore(t, db)`
$DIR/core/services/keeper/orm_test.go: `.Eth()`
$DIR/core/services/keeper/orm_test.go: `.MustInsertKeeperRegistry(t, db, orm, ethKeyStore, 0, 1, 20)`
$DIR/core/services/keeper/orm_test.go: `.MustInsertUpkeepForRegistry(t, db, registry)`
$DIR/core/services/keeper/orm_test.go: `.MustInsertUpkeepForRegistry(t, db, registry)`
$DIR/core/services/keeper/orm_test.go: `.AssertCount(t, db, "upkeep_registrations", 3)`
$DIR/core/services/keeper/orm_test.go: `.BatchDeleteUpkeepsForJob(ctx, job.ID, upkeepIDs)`
$DIR/core/services/keeper/orm_test.go: `.AssertCount(t, db, "upkeep_registrations", 1)`
$DIR/core/services/keeper/orm_test.go: `.Get(&remainingUpkeep, `SELECT * FROM upkeep_registrations ORDER BY id LIMIT 1`)`
$DIR/core/services/keeper/orm_test.go: `.Context(t)`
$DIR/core/services/keeper/orm_test.go: `.NewKeyStore(t, db)`
$DIR/core/services/keeper/orm_test.go: `.Eth()`
$DIR/core/services/keeper/orm_test.go: `.MustInsertKeeperRegistry(t, db, orm, ethKeyStore, 0, 1, 20)`
$DIR/core/services/keeper/orm_test.go: `.UpsertUpkeep(ctx, &k)`
$DIR/core/services/keeper/orm_test.go: `.AssertCount(t, db, "upkeep_registrations", 100)`
$DIR/core/services/keeper/orm_test.go: `.EligibleUpkeepsForRegistry(ctx, registry.ContractAddress, blockheight, gracePeriod, fmt.Sprintf("%b", evmutils.NewHash().Big()))`
$DIR/core/services/keeper/orm_test.go: `.Sprintf("%b", evmutils.NewHash().Big())`
$DIR/core/services/keeper/orm_test.go: `.NewHash()`
$DIR/core/services/keeper/orm_test.go: `.Big()`
$DIR/core/services/keeper/orm_test.go: `.Context(t)`
$DIR/core/services/keeper/orm_test.go: `.NewKeyStore(t, db)`
$DIR/core/services/keeper/orm_test.go: `.Eth()`
$DIR/core/services/keeper/orm_test.go: `.MustInsertKeeperRegistry(t, db, orm, ethKeyStore, 0, 2, 20)`
$DIR/core/services/keeper/orm_test.go: `.MustInsertUpkeepForRegistry(t, db, registry)`
$DIR/core/services/keeper/orm_test.go: `.AssertCount(t, db, "keeper_registries", 1)`
$DIR/core/services/keeper/orm_test.go: `.AssertCount(t, db, "upkeep_registrations", 100)`
$DIR/core/services/keeper/orm_test.go: `.EligibleUpkeepsForRegistry(ctx, registry.ContractAddress, 21, 100, fmt.Sprintf("%b", evmutils.NewHash().Big()))`
$DIR/core/services/keeper/orm_test.go: `.Sprintf("%b", evmutils.NewHash().Big())`
$DIR/core/services/keeper/orm_test.go: `.NewHash()`
$DIR/core/services/keeper/orm_test.go: `.Big()`
$DIR/core/services/keeper/orm_test.go: `.EligibleUpkeepsForRegistry(ctx, registry.ContractAddress, 121, 100, fmt.Sprintf("%b", evmutils.NewHash().Big()))`
$DIR/core/services/keeper/orm_test.go: `.Sprintf("%b", evmutils.NewHash().Big())`
$DIR/core/services/keeper/orm_test.go: `.NewHash()`
$DIR/core/services/keeper/orm_test.go: `.Big()`
$DIR/core/services/keeper/orm_test.go: `.Context(t)`
$DIR/core/services/keeper/orm_test.go: `.NewKeyStore(t, db)`
$DIR/core/services/keeper/orm_test.go: `.Eth()`
$DIR/core/services/keeper/orm_test.go: `.MustInsertKeeperRegistry(t, db, orm, ethKeyStore, 0, 3, 10)`
$DIR/core/services/keeper/orm_test.go: `.MustInsertUpkeepForRegistry(t, db, registry)`
$DIR/core/services/keeper/orm_test.go: `.AssertCount(t, db, "keeper_registries", 1)`
$DIR/core/services/keeper/orm_test.go: `.AssertCount(t, db, "upkeep_registrations", 1000)`
$DIR/core/services/keeper/orm_test.go: `.EligibleUpkeepsForRegistry(ctx, registry.ContractAddress, 20, 100, fmt.Sprintf("%b", evmutils.NewHash().Big()))`
$DIR/core/services/keeper/orm_test.go: `.Sprintf("%b", evmutils.NewHash().Big())`
$DIR/core/services/keeper/orm_test.go: `.NewHash()`
$DIR/core/services/keeper/orm_test.go: `.Big()`
$DIR/core/services/keeper/orm_test.go: `.EligibleUpkeepsForRegistry(ctx, registry.ContractAddress, 31, 100, fmt.Sprintf("%b", evmutils.NewHash().Big()))`
$DIR/core/services/keeper/orm_test.go: `.Sprintf("%b", evmutils.NewHash().Big())`
$DIR/core/services/keeper/orm_test.go: `.NewHash()`
$DIR/core/services/keeper/orm_test.go: `.Big()`
$DIR/core/services/keeper/orm_test.go: `.EligibleUpkeepsForRegistry(ctx, registry.ContractAddress, 42, 100, fmt.Sprintf("%b", evmutils.NewHash().Big()))`
$DIR/core/services/keeper/orm_test.go: `.Sprintf("%b", evmutils.NewHash().Big())`
$DIR/core/services/keeper/orm_test.go: `.NewHash()`
$DIR/core/services/keeper/orm_test.go: `.Big()`
$DIR/core/services/keeper/orm_test.go: `.EligibleUpkeepsForRegistry(ctx, registry.ContractAddress, 53, 100, fmt.Sprintf("%b", evmutils.NewHash().Big()))`
$DIR/core/services/keeper/orm_test.go: `.Sprintf("%b", evmutils.NewHash().Big())`
$DIR/core/services/keeper/orm_test.go: `.NewHash()`
$DIR/core/services/keeper/orm_test.go: `.Big()`
$DIR/core/services/keeper/orm_test.go: `.Slice(list1, func(i, j int) bool {
return list1[i].UpkeepID.Cmp(list1[j].UpkeepID) == -1
})`
$DIR/core/services/keeper/orm_test.go: `.UpkeepID.Cmp(list1[j].UpkeepID)`
$DIR/core/services/keeper/orm_test.go: `.Slice(list2, func(i, j int) bool {
return list2[i].UpkeepID.Cmp(list2[j].UpkeepID) == -1
})`
$DIR/core/services/keeper/orm_test.go: `.UpkeepID.Cmp(list2[j].UpkeepID)`
$DIR/core/services/keeper/orm_test.go: `.Slice(list3, func(i, j int) bool {
return list3[i].UpkeepID.Cmp(list3[j].UpkeepID) == -1
})`
$DIR/core/services/keeper/orm_test.go: `.UpkeepID.Cmp(list3[j].UpkeepID)`
$DIR/core/services/keeper/orm_test.go: `.Slice(list4, func(i, j int) bool {
return list4[i].UpkeepID.Cmp(list4[j].UpkeepID) == -1
})`
$DIR/core/services/keeper/orm_test.go: `.UpkeepID.Cmp(list4[j].UpkeepID)`
$DIR/core/services/keeper/orm_test.go: `.Context(t)`
$DIR/core/services/keeper/orm_test.go: `.NewKeyStore(t, db)`
$DIR/core/services/keeper/orm_test.go: `.Eth()`
$DIR/core/services/keeper/orm_test.go: `.MustInsertKeeperRegistry(t, db, orm, ethKeyStore, 0, 2, 20)`
$DIR/core/services/keeper/orm_test.go: `.MustInsertUpkeepForRegistry(t, db, registry)`
$DIR/core/services/keeper/orm_test.go: `.AssertCount(t, db, "keeper_registries", 1)`
$DIR/core/services/keeper/orm_test.go: `.AssertCount(t, db, "upkeep_registrations", 100)`
$DIR/core/services/keeper/orm_test.go: `.EligibleUpkeepsForRegistry(ctx, registry.ContractAddress, 21, 100, fmt.Sprintf("%b", evmutils.NewHash().Big()))`
$DIR/core/services/keeper/orm_test.go: `.Sprintf("%b", evmutils.NewHash().Big())`
$DIR/core/services/keeper/orm_test.go: `.NewHash()`
$DIR/core/services/keeper/orm_test.go: `.Big()`
$DIR/core/services/keeper/orm_test.go: `.Context(t)`
$DIR/core/services/keeper/orm_test.go: `.NewKeyStore(t, db)`
$DIR/core/services/keeper/orm_test.go: `.Eth()`
$DIR/core/services/keeper/orm_test.go: `.MustInsertKeeperRegistry(t, db, orm, ethKeyStore, 1, 2, 20)`
$DIR/core/services/keeper/orm_test.go: `.MustInsertUpkeepForRegistry(t, db, registry)`
$DIR/core/services/keeper/orm_test.go: `.AssertCount(t, db, "keeper_registries", 1)`
$DIR/core/services/keeper/orm_test.go: `.AssertCount(t, db, "upkeep_registrations", 100)`
$DIR/core/services/keeper/orm_test.go: `.Sprintf("%b", evmutils.NewHash().Big())`
$DIR/core/services/keeper/orm_test.go: `.NewHash()`
$DIR/core/services/keeper/orm_test.go: `.Big()`
$DIR/core/services/keeper/orm_test.go: `.EligibleUpkeepsForRegistry(ctx, registry.ContractAddress, 21, 100, binaryHash)`
$DIR/core/services/keeper/orm_test.go: `.EligibleUpkeepsForRegistry(ctx, registry.ContractAddress, 21, 100, binaryHash)`
$DIR/core/services/keeper/orm_test.go: `.Context(t)`
$DIR/core/services/keeper/orm_test.go: `.NewKeyStore(t, db)`
$DIR/core/services/keeper/orm_test.go: `.Eth()`
$DIR/core/services/keeper/orm_test.go: `.MustInsertKeeperRegistry(t, db, orm, ethKeyStore, 0, 2, 20)`
$DIR/core/services/keeper/orm_test.go: `.MustInsertUpkeepForRegistry(t, db, registry)`
$DIR/core/services/keeper/orm_test.go: `.AssertCount(t, db, "keeper_registries", 1)`
$DIR/core/services/keeper/orm_test.go: `.AssertCount(t, db, "upkeep_registrations", 100)`
$DIR/core/services/keeper/orm_test.go: `.Sprintf("%b", evmutils.NewHash().Big())`
$DIR/core/services/keeper/orm_test.go: `.NewHash()`
$DIR/core/services/keeper/orm_test.go: `.Big()`
$DIR/core/services/keeper/orm_test.go: `.EligibleUpkeepsForRegistry(ctx, registry.ContractAddress, 21, 100, binaryHash)`
$DIR/core/services/keeper/orm_test.go: `.Context(t)`
$DIR/core/services/keeper/orm_test.go: `.NewKeyStore(t, db)`
$DIR/core/services/keeper/orm_test.go: `.Eth()`
$DIR/core/services/keeper/orm_test.go: `.MustInsertKeeperRegistry(t, db, orm, ethKeyStore, 0, 1, 20)`
$DIR/core/services/keeper/orm_test.go: `.MustInsertKeeperRegistry(t, db, orm, ethKeyStore, 0, 1, 20)`
$DIR/core/services/keeper/orm_test.go: `.MustInsertUpkeepForRegistry(t, db, registry1)`
$DIR/core/services/keeper/orm_test.go: `.MustInsertUpkeepForRegistry(t, db, registry2)`
$DIR/core/services/keeper/orm_test.go: `.AssertCount(t, db, "keeper_registries", 2)`
$DIR/core/services/keeper/orm_test.go: `.AssertCount(t, db, "upkeep_registrations", 2)`
$DIR/core/services/keeper/orm_test.go: `.Sprintf("%b", evmutils.NewHash().Big())`
$DIR/core/services/keeper/orm_test.go: `.NewHash()`
$DIR/core/services/keeper/orm_test.go: `.Big()`
$DIR/core/services/keeper/orm_test.go: `.EligibleUpkeepsForRegistry(ctx, registry1.ContractAddress, 20, 100, binaryHash)`
$DIR/core/services/keeper/orm_test.go: `.EligibleUpkeepsForRegistry(ctx, registry2.ContractAddress, 20, 100, binaryHash)`
$DIR/core/services/keeper/orm_test.go: `.Context(t)`
$DIR/core/services/keeper/orm_test.go: `.NewKeyStore(t, db)`
$DIR/core/services/keeper/orm_test.go: `.Eth()`
$DIR/core/services/keeper/orm_test.go: `.MustInsertKeeperRegistry(t, db, orm, ethKeyStore, 0, 1, 20)`
$DIR/core/services/keeper/orm_test.go: `.AllUpkeepIDsForRegistry(ctx, registry.ID)`
$DIR/core/services/keeper/orm_test.go: `.UpsertUpkeep(ctx, &upkeep)`
$DIR/core/services/keeper/orm_test.go: `.UpsertUpkeep(ctx, &upkeep)`
$DIR/core/services/keeper/orm_test.go: `.AllUpkeepIDsForRegistry(ctx, registry.ID)`
$DIR/core/services/keeper/orm_test.go: `.New(big.NewInt(8))`
$DIR/core/services/keeper/orm_test.go: `.NewInt(8)`
$DIR/core/services/keeper/orm_test.go: `.Context(t)`
$DIR/core/services/keeper/orm_test.go: `.NewKeyStore(t, db)`
$DIR/core/services/keeper/orm_test.go: `.Eth()`
$DIR/core/services/keeper/orm_test.go: `.MustInsertKeeperRegistry(t, db, orm, ethKeyStore, 0, 1, 20)`
$DIR/core/services/keeper/orm_test.go: `.MustInsertUpkeepForRegistry(t, db, registry)`
$DIR/core/services/keeper/orm_test.go: `.Get(&upkeep, `SELECT * FROM upkeep_registrations WHERE upkeep_id = $1`, upkeep.UpkeepID)`
$DIR/core/services/keeper/orm_test.go: `.Context(t)`
$DIR/core/services/keeper/orm_test.go: `.NewKeyStore(t, db)`
$DIR/core/services/keeper/orm_test.go: `.Eth()`
$DIR/core/services/keeper/orm_test.go: `.MustInsertKeeperRegistry(t, db, orm, ethKeyStore, 0, 1, 20)`
$DIR/core/services/keeper/orm_test.go: `.MustInsertUpkeepForRegistry(t, db, registry)`
$DIR/core/services/keeper/orm_test.go: `.EIP55AddressFromAddress(evmutils.ZeroAddress)`
$DIR/core/services/keeper/orm_test.go: `.UpsertRegistry(ctx, ®istry)`
$DIR/core/services/keeper/orm_test.go: `.SetLastRunInfoForUpkeepOnJob(ctx, j.ID, upkeep.UpkeepID, 100, registry.FromAddress)`
$DIR/core/services/keeper/orm_test.go: `.SetLastRunInfoForUpkeepOnJob(ctx, j.ID, upkeep.UpkeepID, 0, registry.FromAddress)`
$DIR/core/services/keeper/orm_test.go: `.SetLastRunInfoForUpkeepOnJob(ctx, j.ID, upkeep.UpkeepID, 100, types.EIP55AddressFromAddress(evmutils.ZeroAddress))`
$DIR/core/services/keeper/orm_test.go: `.EIP55AddressFromAddress(evmutils.ZeroAddress)`
$DIR/core/services/keeper/orm_test.go: `.SetLastRunInfoForUpkeepOnJob(ctx, j.ID, upkeep.UpkeepID, 101, registry.FromAddress)`
$DIR/core/services/keeper/orm_test.go: `.Run(test.name, func(tt *testing.T) {
var test = test
var result string
err := db.Get(&result, sql, inputBytes, test.inputLength)
if test.expectedError {
assert.Error(t, err)
return
}
assert.NoError(t, err)
assert.Equal(t, test.expectedOutput, result)
})`
$DIR/core/services/keeper/orm_test.go: `.Get(&result, sql, inputBytes, test.inputLength)`
$DIR/core/services/keeper/orm_test.go: `.NewInt(0)`
$DIR/core/services/keeper/orm_test.go: `.RandUint256()`
$DIR/core/services/keeper/orm_test.go: `.NewInt(1)`
$DIR/core/services/keeper/orm_test.go: `.Add(evmutils.MaxUint256, big.NewInt(1))`
$DIR/core/services/keeper/orm_test.go: `.NewInt(1)`
$DIR/core/services/keeper/orm_test.go: `.Run(test.name, func(tt *testing.T) {
var test = test
var result string
err := db.Get(&result, sql, test.input.String())
if test.errorExpected {
require.Error(t, err)
return
}
require.NoError(t, err)
expected := utils.LeftPadBitString(fmt.Sprintf("%b", test.input), 256)
require.Equal(t, expected, result)
})`
$DIR/core/services/keeper/orm_test.go: `.Get(&result, sql, test.input.String())`
$DIR/core/services/keeper/orm_test.go: `.input.String()`
$DIR/core/services/keeper/orm_test.go: `.LeftPadBitString(fmt.Sprintf("%b", test.input), 256)`
$DIR/core/services/keeper/orm_test.go: `.Sprintf("%b", test.input)`
$DIR/core/services/keeper/registry1_1_synchronizer_test.go: `registryMock.MockResponse("typeAndVersion", "KeeperRegistry 1.1.0").Once()`
$DIR/core/services/keeper/registry1_1_synchronizer_test.go: `mockRegistry1_1(
t,
ethMock,
contractAddress,
registryConfig1_1,
[]common.Address{fromAddress},
[]*big.Int{},
big.NewInt(0),
upkeepConfig1_1,
0)`
$DIR/core/services/keeper/registry1_1_synchronizer_test.go: `cltest.WaitForCount(t, db, "keeper_registries", 1)`
$DIR/core/services/keeper/registry1_1_synchronizer_test.go: `err = synchronizer.Start(testutils.Context(t))`
$DIR/core/services/keeper/registry1_1_synchronizer_test.go: `upkeepConfig.LastKeeper = fromAddress`
$DIR/core/services/keeper/registry1_1_synchronizer_test.go: `mockRegistry1_1(
t,
ethMock,
contractAddress,
registryConfig1_1,
[]common.Address{fromAddress},
canceledUpkeeps,
big.NewInt(3),
upkeepConfig,
2)`
$DIR/core/services/keeper/registry1_1_synchronizer_test.go: `synchronizer.ExportedFullSync(ctx)`
$DIR/core/services/keeper/registry1_1_synchronizer_test.go: `cltest.AssertCount(t, db, "keeper_registries", 1)`
$DIR/core/services/keeper/registry1_1_synchronizer_test.go: `cltest.AssertCount(t, db, "upkeep_registrations", 2)`
$DIR/core/services/keeper/registry1_1_synchronizer_test.go: `g.Eventually(func() bool {
var upkeep keeper.UpkeepRegistration
err := db.Get(&upkeep, `SELECT * FROM upkeep_registrations`)
require.NoError(t, err)
return upkeep.LastKeeperIndex.Valid
}, testutils.WaitTimeout(t), cltest.DBPollingInterval).Should(gomega.Equal(true))`
$DIR/core/services/keeper/registry1_1_synchronizer_test.go: `g.Eventually(func() int64 {
var upkeep keeper.UpkeepRegistration
err := db.Get(&upkeep, `SELECT * FROM upkeep_registrations`)
require.NoError(t, err)
return upkeep.LastKeeperIndex.Int64
}, testutils.WaitTimeout(t), cltest.DBPollingInterval).Should(gomega.Equal(int64(0)))`
$DIR/core/services/keeper/registry1_1_synchronizer_test.go: `assertUpkeepIDs(t, db, []int64{0, 2})`
$DIR/core/services/keeper/registry1_1_synchronizer_test.go: `canceledUpkeeps = []*big.Int{big.NewInt(0), big.NewInt(1), big.NewInt(3)}`
$DIR/core/services/keeper/registry1_1_synchronizer_test.go: `mockRegistry1_1(
t,
ethMock,
contractAddress,
registryConfig1_1,
[]common.Address{fromAddress},
canceledUpkeeps,
big.NewInt(5),
upkeepConfig1_1,
2)`
$DIR/core/services/keeper/registry1_1_synchronizer_test.go: `synchronizer.ExportedFullSync(ctx)`
$DIR/core/services/keeper/registry1_1_synchronizer_test.go: `cltest.AssertCount(t, db, "keeper_registries", 1)`
$DIR/core/services/keeper/registry1_1_synchronizer_test.go: `cltest.AssertCount(t, db, "upkeep_registrations", 2)`
$DIR/core/services/keeper/registry1_1_synchronizer_test.go: `mockRegistry1_1(
t,
ethMock,
contractAddress,
registryConfig1_1,
[]common.Address{fromAddress},
[]*big.Int{},
big.NewInt(0),
upkeepConfig1_1,
0)`
$DIR/core/services/keeper/registry1_1_synchronizer_test.go: `servicetest.Run(t, synchronizer)`
$DIR/core/services/keeper/registry1_1_synchronizer_test.go: `cltest.WaitForCount(t, db, "keeper_registries", 1)`
$DIR/core/services/keeper/registry1_1_synchronizer_test.go: `newConfig.BlockCountPerTurn = big.NewInt(40)`
$DIR/core/services/keeper/registry1_1_synchronizer_test.go: `registryMock.MockResponse("getKeeperList", []common.Address{fromAddress}).Once()`
$DIR/core/services/keeper/registry1_1_synchronizer_test.go: `registryMock.MockResponse("getConfig", newConfig).Once()`
$DIR/core/services/keeper/registry1_1_synchronizer_test.go: `logBroadcast.On("DecodedLog").Return(&log)`
$DIR/core/services/keeper/registry1_1_synchronizer_test.go: `logBroadcast.On("RawLog").Return(rawLog)`
$DIR/core/services/keeper/registry1_1_synchronizer_test.go: `logBroadcast.On("String").Maybe().Return("")`
$DIR/core/services/keeper/registry1_1_synchronizer_test.go: `lb.On("MarkConsumed", mock.Anything, mock.Anything, mock.Anything).Return(nil)`
$DIR/core/services/keeper/registry1_1_synchronizer_test.go: `lb.On("WasAlreadyConsumed", mock.Anything, mock.Anything).Return(false, nil)`
$DIR/core/services/keeper/registry1_1_synchronizer_test.go: `synchronizer.HandleLog(ctx, logBroadcast)`
$DIR/core/services/keeper/registry1_1_synchronizer_test.go: `cltest.AssertRecordEventually(t, db, ®istry, fmt.Sprintf(`SELECT * FROM keeper_registries WHERE id = %d`, registry.ID), func() bool {
return registry.BlockCountPerTurn == 40
})`
$DIR/core/services/keeper/registry1_1_synchronizer_test.go: `mockRegistry1_1(
t,
ethMock,
contractAddress,
registryConfig1_1,
[]common.Address{fromAddress},
[]*big.Int{},
big.NewInt(0),
upkeepConfig1_1,
0)`
$DIR/core/services/keeper/registry1_1_synchronizer_test.go: `servicetest.Run(t, synchronizer)`
$DIR/core/services/keeper/registry1_1_synchronizer_test.go: `cltest.WaitForCount(t, db, "keeper_registries", 1)`
$DIR/core/services/keeper/registry1_1_synchronizer_test.go: `registryMock.MockResponse("getConfig", registryConfig1_1).Once()`
$DIR/core/services/keeper/registry1_1_synchronizer_test.go: `registryMock.MockResponse("getKeeperList", addresses).Once()`
$DIR/core/services/keeper/registry1_1_synchronizer_test.go: `logBroadcast.On("DecodedLog").Return(&log)`
$DIR/core/services/keeper/registry1_1_synchronizer_test.go: `logBroadcast.On("RawLog").Return(rawLog)`
$DIR/core/services/keeper/registry1_1_synchronizer_test.go: `logBroadcast.On("String").Maybe().Return("")`
$DIR/core/services/keeper/registry1_1_synchronizer_test.go: `lb.On("MarkConsumed", mock.Anything, mock.Anything, mock.Anything).Return(nil)`
$DIR/core/services/keeper/registry1_1_synchronizer_test.go: `lb.On("WasAlreadyConsumed", mock.Anything, mock.Anything).Return(false, nil)`
$DIR/core/services/keeper/registry1_1_synchronizer_test.go: `synchronizer.HandleLog(ctx, logBroadcast)`
$DIR/core/services/keeper/registry1_1_synchronizer_test.go: `cltest.AssertRecordEventually(t, db, ®istry, fmt.Sprintf(`SELECT * FROM keeper_registries WHERE id = %d`, registry.ID), func() bool {
return registry.NumKeepers == 2
})`
$DIR/core/services/keeper/registry1_1_synchronizer_test.go: `mockRegistry1_1(
t,
ethMock,
contractAddress,
registryConfig1_1,
[]common.Address{fromAddress},
[]*big.Int{},
big.NewInt(3),
upkeepConfig1_1,
3)`
$DIR/core/services/keeper/registry1_1_synchronizer_test.go: `servicetest.Run(t, synchronizer)`
$DIR/core/services/keeper/registry1_1_synchronizer_test.go: `cltest.WaitForCount(t, db, "keeper_registries", 1)`
$DIR/core/services/keeper/registry1_1_synchronizer_test.go: `cltest.WaitForCount(t, db, "upkeep_registrations", 3)`
$DIR/core/services/keeper/registry1_1_synchronizer_test.go: `logBroadcast.On("DecodedLog").Return(&log)`
$DIR/core/services/keeper/registry1_1_synchronizer_test.go: `logBroadcast.On("RawLog").Return(rawLog)`
$DIR/core/services/keeper/registry1_1_synchronizer_test.go: `logBroadcast.On("String").Maybe().Return("")`
$DIR/core/services/keeper/registry1_1_synchronizer_test.go: `lb.On("MarkConsumed", mock.Anything, mock.Anything, mock.Anything).Return(nil)`
$DIR/core/services/keeper/registry1_1_synchronizer_test.go: `lb.On("WasAlreadyConsumed", mock.Anything, mock.Anything).Return(false, nil)`
$DIR/core/services/keeper/registry1_1_synchronizer_test.go: `synchronizer.HandleLog(ctx, logBroadcast)`
$DIR/core/services/keeper/registry1_1_synchronizer_test.go: `mockRegistry1_1(
t,
ethMock,
contractAddress,
registryConfig1_1,
[]common.Address{fromAddress},
[]*big.Int{},
big.NewInt(1),
upkeepConfig1_1,
1)`
$DIR/core/services/keeper/registry1_1_synchronizer_test.go: `servicetest.Run(t, synchronizer)`
$DIR/core/services/keeper/registry1_1_synchronizer_test.go: `cltest.WaitForCount(t, db, "keeper_registries", 1)`
$DIR/core/services/keeper/registry1_1_synchronizer_test.go: `cltest.WaitForCount(t, db, "upkeep_registrations", 1)`
$DIR/core/services/keeper/registry1_1_synchronizer_test.go: `registryMock.MockResponse("getUpkeep", upkeepConfig1_1).Once()`
$DIR/core/services/keeper/registry1_1_synchronizer_test.go: `logBroadcast.On("DecodedLog").Return(&log)`
$DIR/core/services/keeper/registry1_1_synchronizer_test.go: `logBroadcast.On("RawLog").Return(rawLog)`
$DIR/core/services/keeper/registry1_1_synchronizer_test.go: `logBroadcast.On("String").Maybe().Return("")`
$DIR/core/services/keeper/registry1_1_synchronizer_test.go: `lb.On("MarkConsumed", mock.Anything, mock.Anything, mock.Anything).Return(nil)`
$DIR/core/services/keeper/registry1_1_synchronizer_test.go: `lb.On("WasAlreadyConsumed", mock.Anything, mock.Anything).Return(false, nil)`
$DIR/core/services/keeper/registry1_1_synchronizer_test.go: `synchronizer.HandleLog(ctx, logBroadcast)`
$DIR/core/services/keeper/registry1_1_synchronizer_test.go: `mockRegistry1_1(
t,
ethMock,
contractAddress,
registryConfig1_1,
[]common.Address{fromAddress},
[]*big.Int{},
big.NewInt(1),
upkeepConfig1_1,
1)`
$DIR/core/services/keeper/registry1_1_synchronizer_test.go: `servicetest.Run(t, synchronizer)`
$DIR/core/services/keeper/registry1_1_synchronizer_test.go: `cltest.WaitForCount(t, db, "keeper_registries", 1)`
$DIR/core/services/keeper/registry1_1_synchronizer_test.go: `cltest.WaitForCount(t, db, "upkeep_registrations", 1)`
$DIR/core/services/keeper/registry1_1_synchronizer_test.go: `pgtest.MustExec(t, db, `UPDATE upkeep_registrations SET last_run_block_height = 100`)`
$DIR/core/services/keeper/registry1_1_synchronizer_test.go: `logBroadcast.On("DecodedLog").Return(&log)`
$DIR/core/services/keeper/registry1_1_synchronizer_test.go: `logBroadcast.On("RawLog").Return(rawLog)`
$DIR/core/services/keeper/registry1_1_synchronizer_test.go: `logBroadcast.On("String").Maybe().Return("")`
$DIR/core/services/keeper/registry1_1_synchronizer_test.go: `lb.On("MarkConsumed", mock.Anything, mock.Anything, mock.Anything).Return(nil)`
$DIR/core/services/keeper/registry1_1_synchronizer_test.go: `lb.On("WasAlreadyConsumed", mock.Anything, mock.Anything).Return(false, nil)`
$DIR/core/services/keeper/registry1_1_synchronizer_test.go: `synchronizer.HandleLog(ctx, logBroadcast)`
$DIR/core/services/keeper/registry1_1_synchronizer_test.go: `g.Eventually(func() int64 {
var upkeep keeper.UpkeepRegistration
err := db.Get(&upkeep, `SELECT * FROM upkeep_registrations`)
require.NoError(t, err)
return upkeep.LastRunBlockHeight
}, testutils.WaitTimeout(t), cltest.DBPollingInterval).Should(gomega.Equal(int64(200)))`
$DIR/core/services/keeper/registry1_1_synchronizer_test.go: `.NewSqlxDB(t)`
$DIR/core/services/keeper/registry1_1_synchronizer_test.go: `.NewORM(db, logger.TestLogger(t))`
$DIR/core/services/keeper/registry1_1_synchronizer_test.go: `.TestLogger(t)`
$DIR/core/services/keeper/registry1_1_synchronizer_test.go: `.NewEthClientMockWithDefaultChain(t)`
$DIR/core/services/keeper/registry1_1_synchronizer_test.go: `.MustInsertKeeperJob(t, db, korm, cltest.NewEIP55Address(), cltest.NewEIP55Address())`
$DIR/core/services/keeper/registry1_1_synchronizer_test.go: `.NewEIP55Address()`
$DIR/core/services/keeper/registry1_1_synchronizer_test.go: `.NewEIP55Address()`
$DIR/core/services/keeper/registry1_1_synchronizer_test.go: `.KeeperSpec.ContractAddress.Address()`
$DIR/core/services/keeper/registry1_1_synchronizer_test.go: `.NewContractMockReceiver(t, ethClient, keeper.Registry1_1ABI, contractAddress)`
$DIR/core/services/keeper/registry1_1_synchronizer_test.go: `.MockResponse("typeAndVersion", "KeeperRegistry 1.1.0")`
$DIR/core/services/keeper/registry1_1_synchronizer_test.go: `.Once()`
$DIR/core/services/keeper/registry1_1_synchronizer_test.go: `.NewRegistryWrapper(j.KeeperSpec.ContractAddress, ethClient)`
$DIR/core/services/keeper/registry1_1_synchronizer_test.go: `.GetLogListenerOpts(1, nil)`
$DIR/core/services/keeper/registry1_1_synchronizer_test.go: `.Topic()`
$DIR/core/services/keeper/registry1_1_synchronizer_test.go: `.KeeperSpec.ContractAddress.Address()`
$DIR/core/services/keeper/registry1_1_synchronizer_test.go: `.KeeperSpec.FromAddress.Address()`
$DIR/core/services/keeper/registry1_1_synchronizer_test.go: `.NewInt(0)`
$DIR/core/services/keeper/registry1_1_synchronizer_test.go: `.Start(testutils.Context(t))`
$DIR/core/services/keeper/registry1_1_synchronizer_test.go: `.Context(t)`
$DIR/core/services/keeper/registry1_1_synchronizer_test.go: `.WaitForCount(t, db, "keeper_registries", 1)`
$DIR/core/services/keeper/registry1_1_synchronizer_test.go: `.Start(testutils.Context(t))`
$DIR/core/services/keeper/registry1_1_synchronizer_test.go: `.Context(t)`
$DIR/core/services/keeper/registry1_1_synchronizer_test.go: `.CalcPositioningConstant(ubig.NewI(upkeepID), cltest.NewEIP55Address())`
$DIR/core/services/keeper/registry1_1_synchronizer_test.go: `.NewI(upkeepID)`
$DIR/core/services/keeper/registry1_1_synchronizer_test.go: `.NewEIP55Address()`
$DIR/core/services/keeper/registry1_1_synchronizer_test.go: `.Context(t)`
$DIR/core/services/keeper/registry1_1_synchronizer_test.go: `.NewWithT(t)`
$DIR/core/services/keeper/registry1_1_synchronizer_test.go: `.KeeperSpec.ContractAddress.Address()`
$DIR/core/services/keeper/registry1_1_synchronizer_test.go: `.KeeperSpec.FromAddress.Address()`
$DIR/core/services/keeper/registry1_1_synchronizer_test.go: `.NewInt(1)`
$DIR/core/services/keeper/registry1_1_synchronizer_test.go: `.NewInt(3)`
$DIR/core/services/keeper/registry1_1_synchronizer_test.go: `.ExportedFullSync(ctx)`
$DIR/core/services/keeper/registry1_1_synchronizer_test.go: `.AssertCount(t, db, "keeper_registries", 1)`
$DIR/core/services/keeper/registry1_1_synchronizer_test.go: `.AssertCount(t, db, "upkeep_registrations", 2)`
$DIR/core/services/keeper/registry1_1_synchronizer_test.go: `.Eventually(func() bool {
var upkeep keeper.UpkeepRegistration
err := db.Get(&upkeep, `SELECT * FROM upkeep_registrations`)
require.NoError(t, err)
return upkeep.LastKeeperIndex.Valid
}, testutils.WaitTimeout(t), cltest.DBPollingInterval)`
$DIR/core/services/keeper/registry1_1_synchronizer_test.go: `.Get(&upkeep, `SELECT * FROM upkeep_registrations`)`
$DIR/core/services/keeper/registry1_1_synchronizer_test.go: `.WaitTimeout(t)`
$DIR/core/services/keeper/registry1_1_synchronizer_test.go: `.Should(gomega.Equal(true))`
$DIR/core/services/keeper/registry1_1_synchronizer_test.go: `.Equal(true)`
$DIR/core/services/keeper/registry1_1_synchronizer_test.go: `.Eventually(func() int64 {
var upkeep keeper.UpkeepRegistration
err := db.Get(&upkeep, `SELECT * FROM upkeep_registrations`)
require.NoError(t, err)
return upkeep.LastKeeperIndex.Int64
}, testutils.WaitTimeout(t), cltest.DBPollingInterval)`
$DIR/core/services/keeper/registry1_1_synchronizer_test.go: `.Get(&upkeep, `SELECT * FROM upkeep_registrations`)`
$DIR/core/services/keeper/registry1_1_synchronizer_test.go: `.WaitTimeout(t)`
$DIR/core/services/keeper/registry1_1_synchronizer_test.go: `.Should(gomega.Equal(int64(0)))`
$DIR/core/services/keeper/registry1_1_synchronizer_test.go: `.Equal(int64(0))`
$DIR/core/services/keeper/registry1_1_synchronizer_test.go: `.NewInt(0)`
$DIR/core/services/keeper/registry1_1_synchronizer_test.go: `.NewInt(1)`
$DIR/core/services/keeper/registry1_1_synchronizer_test.go: `.NewInt(3)`
$DIR/core/services/keeper/registry1_1_synchronizer_test.go: `.NewInt(5)`
$DIR/core/services/keeper/registry1_1_synchronizer_test.go: `.ExportedFullSync(ctx)`
$DIR/core/services/keeper/registry1_1_synchronizer_test.go: `.AssertCount(t, db, "keeper_registries", 1)`
$DIR/core/services/keeper/registry1_1_synchronizer_test.go: `.AssertCount(t, db, "upkeep_registrations", 2)`
$DIR/core/services/keeper/registry1_1_synchronizer_test.go: `.Context(t)`
$DIR/core/services/keeper/registry1_1_synchronizer_test.go: `.KeeperSpec.ContractAddress.Address()`
$DIR/core/services/keeper/registry1_1_synchronizer_test.go: `.KeeperSpec.FromAddress.Address()`
$DIR/core/services/keeper/registry1_1_synchronizer_test.go: `.NewInt(0)`
$DIR/core/services/keeper/registry1_1_synchronizer_test.go: `.Run(t, synchronizer)`
$DIR/core/services/keeper/registry1_1_synchronizer_test.go: `.WaitForCount(t, db, "keeper_registries", 1)`
$DIR/core/services/keeper/registry1_1_synchronizer_test.go: `.NewContractMockReceiver(t, ethMock, keeper.Registry1_1ABI, contractAddress)`
$DIR/core/services/keeper/registry1_1_synchronizer_test.go: `.NewInt(40)`
$DIR/core/services/keeper/registry1_1_synchronizer_test.go: `.MockResponse("getKeeperList", []common.Address{fromAddress})`
$DIR/core/services/keeper/registry1_1_synchronizer_test.go: `.Once()`
$DIR/core/services/keeper/registry1_1_synchronizer_test.go: `.MockResponse("getConfig", newConfig)`
$DIR/core/services/keeper/registry1_1_synchronizer_test.go: `.Once()`
$DIR/core/services/keeper/registry1_1_synchronizer_test.go: `.MustInsertHead(t, db, 1)`
$DIR/core/services/keeper/registry1_1_synchronizer_test.go: `.NewBroadcast(t)`
$DIR/core/services/keeper/registry1_1_synchronizer_test.go: `.On("DecodedLog")`
$DIR/core/services/keeper/registry1_1_synchronizer_test.go: `.Return(&log)`
$DIR/core/services/keeper/registry1_1_synchronizer_test.go: `.On("RawLog")`
$DIR/core/services/keeper/registry1_1_synchronizer_test.go: `.Return(rawLog)`
$DIR/core/services/keeper/registry1_1_synchronizer_test.go: `.On("String")`
$DIR/core/services/keeper/registry1_1_synchronizer_test.go: `.Maybe()`
$DIR/core/services/keeper/registry1_1_synchronizer_test.go: `.Return("")`
$DIR/core/services/keeper/registry1_1_synchronizer_test.go: `.On("MarkConsumed", mock.Anything, mock.Anything, mock.Anything)`
$DIR/core/services/keeper/registry1_1_synchronizer_test.go: `.Return(nil)`
$DIR/core/services/keeper/registry1_1_synchronizer_test.go: `.On("WasAlreadyConsumed", mock.Anything, mock.Anything)`
$DIR/core/services/keeper/registry1_1_synchronizer_test.go: `.Return(false, nil)`
$DIR/core/services/keeper/registry1_1_synchronizer_test.go: `.HandleLog(ctx, logBroadcast)`
$DIR/core/services/keeper/registry1_1_synchronizer_test.go: `.AssertRecordEventually(t, db, ®istry, fmt.Sprintf(`SELECT * FROM keeper_registries WHERE id = %d`, registry.ID), func() bool {
return registry.BlockCountPerTurn == 40
})`
$DIR/core/services/keeper/registry1_1_synchronizer_test.go: `.Sprintf(`SELECT * FROM keeper_registries WHERE id = %d`, registry.ID)`
$DIR/core/services/keeper/registry1_1_synchronizer_test.go: `.Context(t)`
$DIR/core/services/keeper/registry1_1_synchronizer_test.go: `.KeeperSpec.ContractAddress.Address()`
$DIR/core/services/keeper/registry1_1_synchronizer_test.go: `.KeeperSpec.FromAddress.Address()`
$DIR/core/services/keeper/registry1_1_synchronizer_test.go: `.NewInt(0)`
$DIR/core/services/keeper/registry1_1_synchronizer_test.go: `.Run(t, synchronizer)`
$DIR/core/services/keeper/registry1_1_synchronizer_test.go: `.WaitForCount(t, db, "keeper_registries", 1)`
$DIR/core/services/keeper/registry1_1_synchronizer_test.go: `.NewAddress()`
$DIR/core/services/keeper/registry1_1_synchronizer_test.go: `.NewContractMockReceiver(t, ethMock, keeper.Registry1_1ABI, contractAddress)`
$DIR/core/services/keeper/registry1_1_synchronizer_test.go: `.MockResponse("getConfig", registryConfig1_1)`
$DIR/core/services/keeper/registry1_1_synchronizer_test.go: `.Once()`
$DIR/core/services/keeper/registry1_1_synchronizer_test.go: `.MockResponse("getKeeperList", addresses)`
$DIR/core/services/keeper/registry1_1_synchronizer_test.go: `.Once()`
$DIR/core/services/keeper/registry1_1_synchronizer_test.go: `.MustInsertHead(t, db, 1)`
$DIR/core/services/keeper/registry1_1_synchronizer_test.go: `.NewBroadcast(t)`
$DIR/core/services/keeper/registry1_1_synchronizer_test.go: `.On("DecodedLog")`
$DIR/core/services/keeper/registry1_1_synchronizer_test.go: `.Return(&log)`
$DIR/core/services/keeper/registry1_1_synchronizer_test.go: `.On("RawLog")`
$DIR/core/services/keeper/registry1_1_synchronizer_test.go: `.Return(rawLog)`
$DIR/core/services/keeper/registry1_1_synchronizer_test.go: `.On("String")`
$DIR/core/services/keeper/registry1_1_synchronizer_test.go: `.Maybe()`
$DIR/core/services/keeper/registry1_1_synchronizer_test.go: `.Return("")`
$DIR/core/services/keeper/registry1_1_synchronizer_test.go: `.On("MarkConsumed", mock.Anything, mock.Anything, mock.Anything)`
$DIR/core/services/keeper/registry1_1_synchronizer_test.go: `.Return(nil)`
$DIR/core/services/keeper/registry1_1_synchronizer_test.go: `.On("WasAlreadyConsumed", mock.Anything, mock.Anything)`
$DIR/core/services/keeper/registry1_1_synchronizer_test.go: `.Return(false, nil)`
$DIR/core/services/keeper/registry1_1_synchronizer_test.go: `.HandleLog(ctx, logBroadcast)`
$DIR/core/services/keeper/registry1_1_synchronizer_test.go: `.AssertRecordEventually(t, db, ®istry, fmt.Sprintf(`SELECT * FROM keeper_registries WHERE id = %d`, registry.ID), func() bool {
return registry.NumKeepers == 2
})`
$DIR/core/services/keeper/registry1_1_synchronizer_test.go: `.Sprintf(`SELECT * FROM keeper_registries WHERE id = %d`, registry.ID)`
$DIR/core/services/keeper/registry1_1_synchronizer_test.go: `.Context(t)`
$DIR/core/services/keeper/registry1_1_synchronizer_test.go: `.KeeperSpec.ContractAddress.Address()`
$DIR/core/services/keeper/registry1_1_synchronizer_test.go: `.KeeperSpec.FromAddress.Address()`
$DIR/core/services/keeper/registry1_1_synchronizer_test.go: `.NewInt(3)`
$DIR/core/services/keeper/registry1_1_synchronizer_test.go: `.Run(t, synchronizer)`
$DIR/core/services/keeper/registry1_1_synchronizer_test.go: `.WaitForCount(t, db, "keeper_registries", 1)`
$DIR/core/services/keeper/registry1_1_synchronizer_test.go: `.WaitForCount(t, db, "upkeep_registrations", 3)`
$DIR/core/services/keeper/registry1_1_synchronizer_test.go: `.MustInsertHead(t, db, 1)`
$DIR/core/services/keeper/registry1_1_synchronizer_test.go: `.NewInt(1)`
$DIR/core/services/keeper/registry1_1_synchronizer_test.go: `.NewBroadcast(t)`
$DIR/core/services/keeper/registry1_1_synchronizer_test.go: `.On("DecodedLog")`
$DIR/core/services/keeper/registry1_1_synchronizer_test.go: `.Return(&log)`
$DIR/core/services/keeper/registry1_1_synchronizer_test.go: `.On("RawLog")`
$DIR/core/services/keeper/registry1_1_synchronizer_test.go: `.Return(rawLog)`
$DIR/core/services/keeper/registry1_1_synchronizer_test.go: `.On("String")`
$DIR/core/services/keeper/registry1_1_synchronizer_test.go: `.Maybe()`
$DIR/core/services/keeper/registry1_1_synchronizer_test.go: `.Return("")`
$DIR/core/services/keeper/registry1_1_synchronizer_test.go: `.On("MarkConsumed", mock.Anything, mock.Anything, mock.Anything)`
$DIR/core/services/keeper/registry1_1_synchronizer_test.go: `.Return(nil)`
$DIR/core/services/keeper/registry1_1_synchronizer_test.go: `.On("WasAlreadyConsumed", mock.Anything, mock.Anything)`
$DIR/core/services/keeper/registry1_1_synchronizer_test.go: `.Return(false, nil)`
$DIR/core/services/keeper/registry1_1_synchronizer_test.go: `.HandleLog(ctx, logBroadcast)`
$DIR/core/services/keeper/registry1_1_synchronizer_test.go: `.Context(t)`
$DIR/core/services/keeper/registry1_1_synchronizer_test.go: `.KeeperSpec.ContractAddress.Address()`
$DIR/core/services/keeper/registry1_1_synchronizer_test.go: `.KeeperSpec.FromAddress.Address()`
$DIR/core/services/keeper/registry1_1_synchronizer_test.go: `.NewInt(1)`
$DIR/core/services/keeper/registry1_1_synchronizer_test.go: `.Run(t, synchronizer)`
$DIR/core/services/keeper/registry1_1_synchronizer_test.go: `.WaitForCount(t, db, "keeper_registries", 1)`
$DIR/core/services/keeper/registry1_1_synchronizer_test.go: `.WaitForCount(t, db, "upkeep_registrations", 1)`
$DIR/core/services/keeper/registry1_1_synchronizer_test.go: `.NewContractMockReceiver(t, ethMock, keeper.Registry1_1ABI, contractAddress)`
$DIR/core/services/keeper/registry1_1_synchronizer_test.go: `.MockResponse("getUpkeep", upkeepConfig1_1)`
$DIR/core/services/keeper/registry1_1_synchronizer_test.go: `.Once()`
$DIR/core/services/keeper/registry1_1_synchronizer_test.go: `.MustInsertHead(t, db, 1)`
$DIR/core/services/keeper/registry1_1_synchronizer_test.go: `.NewInt(1)`
$DIR/core/services/keeper/registry1_1_synchronizer_test.go: `.NewBroadcast(t)`
$DIR/core/services/keeper/registry1_1_synchronizer_test.go: `.On("DecodedLog")`
$DIR/core/services/keeper/registry1_1_synchronizer_test.go: `.Return(&log)`
$DIR/core/services/keeper/registry1_1_synchronizer_test.go: `.On("RawLog")`
$DIR/core/services/keeper/registry1_1_synchronizer_test.go: `.Return(rawLog)`
$DIR/core/services/keeper/registry1_1_synchronizer_test.go: `.On("String")`
$DIR/core/services/keeper/registry1_1_synchronizer_test.go: `.Maybe()`
$DIR/core/services/keeper/registry1_1_synchronizer_test.go: `.Return("")`
$DIR/core/services/keeper/registry1_1_synchronizer_test.go: `.On("MarkConsumed", mock.Anything, mock.Anything, mock.Anything)`
$DIR/core/services/keeper/registry1_1_synchronizer_test.go: `.Return(nil)`
$DIR/core/services/keeper/registry1_1_synchronizer_test.go: `.On("WasAlreadyConsumed", mock.Anything, mock.Anything)`
$DIR/core/services/keeper/registry1_1_synchronizer_test.go: `.Return(false, nil)`
$DIR/core/services/keeper/registry1_1_synchronizer_test.go: `.HandleLog(ctx, logBroadcast)`
$DIR/core/services/keeper/registry1_1_synchronizer_test.go: `.Context(t)`
$DIR/core/services/keeper/registry1_1_synchronizer_test.go: `.NewWithT(t)`
$DIR/core/services/keeper/registry1_1_synchronizer_test.go: `.KeeperSpec.ContractAddress.Address()`
$DIR/core/services/keeper/registry1_1_synchronizer_test.go: `.KeeperSpec.FromAddress.Address()`
$DIR/core/services/keeper/registry1_1_synchronizer_test.go: `.NewInt(1)`
$DIR/core/services/keeper/registry1_1_synchronizer_test.go: `.Run(t, synchronizer)`
$DIR/core/services/keeper/registry1_1_synchronizer_test.go: `.WaitForCount(t, db, "keeper_registries", 1)`
$DIR/core/services/keeper/registry1_1_synchronizer_test.go: `.WaitForCount(t, db, "upkeep_registrations", 1)`
$DIR/core/services/keeper/registry1_1_synchronizer_test.go: `.MustExec(t, db, `UPDATE upkeep_registrations SET last_run_block_height = 100`)`
$DIR/core/services/keeper/registry1_1_synchronizer_test.go: `.MustInsertHead(t, db, 1)`
$DIR/core/services/keeper/registry1_1_synchronizer_test.go: `.NewInt(0)`
$DIR/core/services/keeper/registry1_1_synchronizer_test.go: `.NewBroadcast(t)`
$DIR/core/services/keeper/registry1_1_synchronizer_test.go: `.On("DecodedLog")`
$DIR/core/services/keeper/registry1_1_synchronizer_test.go: `.Return(&log)`
$DIR/core/services/keeper/registry1_1_synchronizer_test.go: `.On("RawLog")`
$DIR/core/services/keeper/registry1_1_synchronizer_test.go: `.Return(rawLog)`
$DIR/core/services/keeper/registry1_1_synchronizer_test.go: `.On("String")`
$DIR/core/services/keeper/registry1_1_synchronizer_test.go: `.Maybe()`
$DIR/core/services/keeper/registry1_1_synchronizer_test.go: `.Return("")`
$DIR/core/services/keeper/registry1_1_synchronizer_test.go: `.On("MarkConsumed", mock.Anything, mock.Anything, mock.Anything)`
$DIR/core/services/keeper/registry1_1_synchronizer_test.go: `.Return(nil)`
$DIR/core/services/keeper/registry1_1_synchronizer_test.go: `.On("WasAlreadyConsumed", mock.Anything, mock.Anything)`
$DIR/core/services/keeper/registry1_1_synchronizer_test.go: `.Return(false, nil)`
$DIR/core/services/keeper/registry1_1_synchronizer_test.go: `.HandleLog(ctx, logBroadcast)`
$DIR/core/services/keeper/registry1_1_synchronizer_test.go: `.Eventually(func() int64 {
var upkeep keeper.UpkeepRegistration
err := db.Get(&upkeep, `SELECT * FROM upkeep_registrations`)
require.NoError(t, err)
return upkeep.LastRunBlockHeight
}, testutils.WaitTimeout(t), cltest.DBPollingInterval)`
$DIR/core/services/keeper/registry1_1_synchronizer_test.go: `.Get(&upkeep, `SELECT * FROM upkeep_registrations`)`
$DIR/core/services/keeper/registry1_1_synchronizer_test.go: `.WaitTimeout(t)`
$DIR/core/services/keeper/registry1_1_synchronizer_test.go: `.Should(gomega.Equal(int64(200)))`
$DIR/core/services/keeper/registry1_1_synchronizer_test.go: `.Equal(int64(200))`
$DIR/core/services/keeper/registry1_1_synchronizer_test.go: `.Eventually(func() int64 {
var upkeep keeper.UpkeepRegistration
err := db.Get(&upkeep, `SELECT * FROM upkeep_registrations`)
require.NoError(t, err)
return upkeep.LastKeeperIndex.Int64
}, testutils.WaitTimeout(t), cltest.DBPollingInterval)`
$DIR/core/services/keeper/registry1_1_synchronizer_test.go: `.Get(&upkeep, `SELECT * FROM upkeep_registrations`)`
$DIR/core/services/keeper/registry1_1_synchronizer_test.go: `.WaitTimeout(t)`
$DIR/core/services/keeper/registry1_1_synchronizer_test.go: `.Equal(int64(0))`
$DIR/core/services/keeper/registry1_2_synchronizer_test.go: `registryMock.MockResponse("typeAndVersion", "KeeperRegistry 1.2.0").Once()`
$DIR/core/services/keeper/registry1_2_synchronizer_test.go: `mockRegistry1_2(
t,
ethMock,
contractAddress,
registryConfig1_2,
[]*big.Int{},
[]common.Address{fromAddress},
upkeepConfig1_2,
0,
2,
0)`
$DIR/core/services/keeper/registry1_2_synchronizer_test.go: `cltest.WaitForCount(t, db, "keeper_registries", 1)`
$DIR/core/services/keeper/registry1_2_synchronizer_test.go: `err = synchronizer.Start(testutils.Context(t))`
$DIR/core/services/keeper/registry1_2_synchronizer_test.go: `upkeepConfig.LastKeeper = fromAddress`
$DIR/core/services/keeper/registry1_2_synchronizer_test.go: `mockRegistry1_2(
t,
ethMock,
contractAddress,
registryConfig1_2,
[]*big.Int{big.NewInt(3), big.NewInt(69), big.NewInt(420)}, // Upkeep IDs
[]common.Address{fromAddress},
upkeepConfig,
3, // sync all 3
2,
1)`
$DIR/core/services/keeper/registry1_2_synchronizer_test.go: `synchronizer.ExportedFullSync(ctx)`
$DIR/core/services/keeper/registry1_2_synchronizer_test.go: `cltest.AssertCount(t, db, "keeper_registries", 1)`
$DIR/core/services/keeper/registry1_2_synchronizer_test.go: `cltest.AssertCount(t, db, "upkeep_registrations", 3)`
$DIR/core/services/keeper/registry1_2_synchronizer_test.go: `g.Eventually(func() bool {
var upkeep keeper.UpkeepRegistration
err := db.Get(&upkeep, `SELECT * FROM upkeep_registrations`)
require.NoError(t, err)
return upkeep.LastKeeperIndex.Valid
}, testutils.WaitTimeout(t), cltest.DBPollingInterval).Should(gomega.Equal(true))`
$DIR/core/services/keeper/registry1_2_synchronizer_test.go: `g.Eventually(func() int64 {
var upkeep keeper.UpkeepRegistration
err := db.Get(&upkeep, `SELECT * FROM upkeep_registrations`)
require.NoError(t, err)
return upkeep.LastKeeperIndex.Int64
}, testutils.WaitTimeout(t), cltest.DBPollingInterval).Should(gomega.Equal(int64(0)))`
$DIR/core/services/keeper/registry1_2_synchronizer_test.go: `assertUpkeepIDs(t, db, []int64{3, 69, 420})`
$DIR/core/services/keeper/registry1_2_synchronizer_test.go: `mockRegistry1_2(
t,
ethMock,
contractAddress,
registryConfig1_2,
[]*big.Int{big.NewInt(69), big.NewInt(420), big.NewInt(2022)}, // Upkeep IDs
[]common.Address{fromAddress},
upkeepConfig1_2,
3, // sync all 3 active upkeeps
2,
1)`
$DIR/core/services/keeper/registry1_2_synchronizer_test.go: `synchronizer.ExportedFullSync(ctx)`
$DIR/core/services/keeper/registry1_2_synchronizer_test.go: `cltest.AssertCount(t, db, "keeper_registries", 1)`
$DIR/core/services/keeper/registry1_2_synchronizer_test.go: `cltest.AssertCount(t, db, "upkeep_registrations", 3)`
$DIR/core/services/keeper/registry1_2_synchronizer_test.go: `mockRegistry1_2(
t,
ethMock,
contractAddress,
registryConfig1_2,
[]*big.Int{}, // Upkeep IDs
[]common.Address{fromAddress},
upkeepConfig1_2,
0,
2,
0)`
$DIR/core/services/keeper/registry1_2_synchronizer_test.go: `servicetest.Run(t, synchronizer)`
$DIR/core/services/keeper/registry1_2_synchronizer_test.go: `cltest.WaitForCount(t, db, "keeper_registries", 1)`
$DIR/core/services/keeper/registry1_2_synchronizer_test.go: `newConfig.BlockCountPerTurn = big.NewInt(40)`
$DIR/core/services/keeper/registry1_2_synchronizer_test.go: `registryMock.MockResponse("getState", registry1_2.GetState{
State: registryState1_2,
Config: newConfig,
Keepers: []common.Address{fromAddress},
}).Once()`
$DIR/core/services/keeper/registry1_2_synchronizer_test.go: `logBroadcast.On("DecodedLog").Return(&log)`
$DIR/core/services/keeper/registry1_2_synchronizer_test.go: `logBroadcast.On("RawLog").Return(rawLog)`
$DIR/core/services/keeper/registry1_2_synchronizer_test.go: `logBroadcast.On("String").Maybe().Return("")`
$DIR/core/services/keeper/registry1_2_synchronizer_test.go: `lb.On("MarkConsumed", mock.Anything, mock.Anything, mock.Anything).Return(nil)`
$DIR/core/services/keeper/registry1_2_synchronizer_test.go: `lb.On("WasAlreadyConsumed", mock.Anything, mock.Anything).Return(false, nil)`
$DIR/core/services/keeper/registry1_2_synchronizer_test.go: `synchronizer.HandleLog(ctx, logBroadcast)`
$DIR/core/services/keeper/registry1_2_synchronizer_test.go: `cltest.AssertRecordEventually(t, db, ®istry, fmt.Sprintf(`SELECT * FROM keeper_registries WHERE id = %d`, registry.ID), func() bool {
return registry.BlockCountPerTurn == 40
})`
$DIR/core/services/keeper/registry1_2_synchronizer_test.go: `mockRegistry1_2(
t,
ethMock,
contractAddress,
registryConfig1_2,
[]*big.Int{}, // Upkeep IDs
[]common.Address{fromAddress},
upkeepConfig1_2,
0,
2,
0)`
$DIR/core/services/keeper/registry1_2_synchronizer_test.go: `servicetest.Run(t, synchronizer)`
$DIR/core/services/keeper/registry1_2_synchronizer_test.go: `cltest.WaitForCount(t, db, "keeper_registries", 1)`
$DIR/core/services/keeper/registry1_2_synchronizer_test.go: `registryMock.MockResponse("getState", registry1_2.GetState{
State: registryState1_2,
Config: registryConfig1_2,
Keepers: addresses,
}).Once()`
$DIR/core/services/keeper/registry1_2_synchronizer_test.go: `logBroadcast.On("DecodedLog").Return(&log)`
$DIR/core/services/keeper/registry1_2_synchronizer_test.go: `logBroadcast.On("RawLog").Return(rawLog)`
$DIR/core/services/keeper/registry1_2_synchronizer_test.go: `logBroadcast.On("String").Maybe().Return("")`
$DIR/core/services/keeper/registry1_2_synchronizer_test.go: `lb.On("MarkConsumed", mock.Anything, mock.Anything, mock.Anything).Return(nil)`
$DIR/core/services/keeper/registry1_2_synchronizer_test.go: `lb.On("WasAlreadyConsumed", mock.Anything, mock.Anything).Return(false, nil)`
$DIR/core/services/keeper/registry1_2_synchronizer_test.go: `synchronizer.HandleLog(ctx, logBroadcast)`
$DIR/core/services/keeper/registry1_2_synchronizer_test.go: `cltest.AssertRecordEventually(t, db, ®istry, fmt.Sprintf(`SELECT * FROM keeper_registries WHERE id = %d`, registry.ID), func() bool {
return registry.NumKeepers == 2
})`
$DIR/core/services/keeper/registry1_2_synchronizer_test.go: `mockRegistry1_2(
t,
ethMock,
contractAddress,
registryConfig1_2,
[]*big.Int{big.NewInt(3), big.NewInt(69), big.NewInt(420)}, // Upkeep IDs
[]common.Address{fromAddress},
upkeepConfig1_2,
3,
2,
1)`
$DIR/core/services/keeper/registry1_2_synchronizer_test.go: `servicetest.Run(t, synchronizer)`
$DIR/core/services/keeper/registry1_2_synchronizer_test.go: `cltest.WaitForCount(t, db, "keeper_registries", 1)`
$DIR/core/services/keeper/registry1_2_synchronizer_test.go: `cltest.WaitForCount(t, db, "upkeep_registrations", 3)`
$DIR/core/services/keeper/registry1_2_synchronizer_test.go: `logBroadcast.On("DecodedLog").Return(&log)`
$DIR/core/services/keeper/registry1_2_synchronizer_test.go: `logBroadcast.On("RawLog").Return(rawLog)`
$DIR/core/services/keeper/registry1_2_synchronizer_test.go: `logBroadcast.On("String").Maybe().Return("")`
$DIR/core/services/keeper/registry1_2_synchronizer_test.go: `lb.On("MarkConsumed", mock.Anything, mock.Anything, mock.Anything).Return(nil)`
$DIR/core/services/keeper/registry1_2_synchronizer_test.go: `lb.On("WasAlreadyConsumed", mock.Anything, mock.Anything).Return(false, nil)`
$DIR/core/services/keeper/registry1_2_synchronizer_test.go: `synchronizer.HandleLog(ctx, logBroadcast)`
$DIR/core/services/keeper/registry1_2_synchronizer_test.go: `mockRegistry1_2(
t,
ethMock,
contractAddress,
registryConfig1_2,
[]*big.Int{big.NewInt(3)}, // Upkeep IDs
[]common.Address{fromAddress},
upkeepConfig1_2,
1,
2,
1)`
$DIR/core/services/keeper/registry1_2_synchronizer_test.go: `servicetest.Run(t, synchronizer)`
$DIR/core/services/keeper/registry1_2_synchronizer_test.go: `cltest.WaitForCount(t, db, "keeper_registries", 1)`
$DIR/core/services/keeper/registry1_2_synchronizer_test.go: `cltest.WaitForCount(t, db, "upkeep_registrations", 1)`
$DIR/core/services/keeper/registry1_2_synchronizer_test.go: `registryMock.MockResponse("getUpkeep", upkeepConfig1_2).Once()`
$DIR/core/services/keeper/registry1_2_synchronizer_test.go: `logBroadcast.On("DecodedLog").Return(&log)`
$DIR/core/services/keeper/registry1_2_synchronizer_test.go: `logBroadcast.On("RawLog").Return(rawLog)`
$DIR/core/services/keeper/registry1_2_synchronizer_test.go: `logBroadcast.On("String").Maybe().Return("")`
$DIR/core/services/keeper/registry1_2_synchronizer_test.go: `lb.On("MarkConsumed", mock.Anything, mock.Anything, mock.Anything).Return(nil)`
$DIR/core/services/keeper/registry1_2_synchronizer_test.go: `lb.On("WasAlreadyConsumed", mock.Anything, mock.Anything).Return(false, nil)`
$DIR/core/services/keeper/registry1_2_synchronizer_test.go: `synchronizer.HandleLog(ctx, logBroadcast)`
$DIR/core/services/keeper/registry1_2_synchronizer_test.go: `mockRegistry1_2(
t,
ethMock,
contractAddress,
registryConfig1_2,
[]*big.Int{big.NewInt(3)}, // Upkeep IDs
[]common.Address{fromAddress},
upkeepConfig1_2,
1,
2,
1)`
$DIR/core/services/keeper/registry1_2_synchronizer_test.go: `servicetest.Run(t, synchronizer)`
$DIR/core/services/keeper/registry1_2_synchronizer_test.go: `cltest.WaitForCount(t, db, "keeper_registries", 1)`
$DIR/core/services/keeper/registry1_2_synchronizer_test.go: `cltest.WaitForCount(t, db, "upkeep_registrations", 1)`
$DIR/core/services/keeper/registry1_2_synchronizer_test.go: `pgtest.MustExec(t, db, `UPDATE upkeep_registrations SET last_run_block_height = 100`)`
$DIR/core/services/keeper/registry1_2_synchronizer_test.go: `logBroadcast.On("DecodedLog").Return(&log)`
$DIR/core/services/keeper/registry1_2_synchronizer_test.go: `logBroadcast.On("RawLog").Return(rawLog)`
$DIR/core/services/keeper/registry1_2_synchronizer_test.go: `logBroadcast.On("String").Maybe().Return("")`
$DIR/core/services/keeper/registry1_2_synchronizer_test.go: `lb.On("MarkConsumed", mock.Anything, mock.Anything, mock.Anything).Return(nil)`
$DIR/core/services/keeper/registry1_2_synchronizer_test.go: `lb.On("WasAlreadyConsumed", mock.Anything, mock.Anything).Return(false, nil)`
$DIR/core/services/keeper/registry1_2_synchronizer_test.go: `synchronizer.HandleLog(ctx, logBroadcast)`
$DIR/core/services/keeper/registry1_2_synchronizer_test.go: `g.Eventually(func() int64 {
var upkeep keeper.UpkeepRegistration
err := db.Get(&upkeep, `SELECT * FROM upkeep_registrations`)
require.NoError(t, err)
return upkeep.LastRunBlockHeight
}, testutils.WaitTimeout(t), cltest.DBPollingInterval).Should(gomega.Equal(int64(200)))`
$DIR/core/services/keeper/registry1_2_synchronizer_test.go: `mockRegistry1_2(
t,
ethMock,
contractAddress,
registryConfig1_2,
[]*big.Int{big.NewInt(3)}, // Upkeep IDs
[]common.Address{fromAddress},
upkeepConfig1_2,
1,
2,
1)`
$DIR/core/services/keeper/registry1_2_synchronizer_test.go: `servicetest.Run(t, synchronizer)`
$DIR/core/services/keeper/registry1_2_synchronizer_test.go: `cltest.WaitForCount(t, db, "keeper_registries", 1)`
$DIR/core/services/keeper/registry1_2_synchronizer_test.go: `cltest.WaitForCount(t, db, "upkeep_registrations", 1)`
$DIR/core/services/keeper/registry1_2_synchronizer_test.go: `g.Eventually(getExecuteGas, testutils.WaitTimeout(t), cltest.DBPollingInterval).Should(gomega.Equal(uint32(2_000_000)))`
$DIR/core/services/keeper/registry1_2_synchronizer_test.go: `newConfig.ExecuteGas = 4_000_000`
$DIR/core/services/keeper/registry1_2_synchronizer_test.go: `registryMock.MockResponse("getUpkeep", newConfig).Once()`
$DIR/core/services/keeper/registry1_2_synchronizer_test.go: `logBroadcast.On("DecodedLog").Return(&log)`
$DIR/core/services/keeper/registry1_2_synchronizer_test.go: `logBroadcast.On("RawLog").Return(rawLog)`
$DIR/core/services/keeper/registry1_2_synchronizer_test.go: `logBroadcast.On("String").Maybe().Return("")`
$DIR/core/services/keeper/registry1_2_synchronizer_test.go: `lb.On("MarkConsumed", mock.Anything, mock.Anything, mock.Anything).Return(nil)`
$DIR/core/services/keeper/registry1_2_synchronizer_test.go: `lb.On("WasAlreadyConsumed", mock.Anything, mock.Anything).Return(false, nil)`
$DIR/core/services/keeper/registry1_2_synchronizer_test.go: `synchronizer.HandleLog(ctx, logBroadcast)`
$DIR/core/services/keeper/registry1_2_synchronizer_test.go: `mockRegistry1_2(
t,
ethMock,
contractAddress,
registryConfig1_2,
[]*big.Int{big.NewInt(3)}, // Upkeep IDs
[]common.Address{fromAddress},
upkeepConfig1_2,
1,
2,
1)`
$DIR/core/services/keeper/registry1_2_synchronizer_test.go: `servicetest.Run(t, synchronizer)`
$DIR/core/services/keeper/registry1_2_synchronizer_test.go: `cltest.WaitForCount(t, db, "keeper_registries", 1)`
$DIR/core/services/keeper/registry1_2_synchronizer_test.go: `cltest.WaitForCount(t, db, "upkeep_registrations", 1)`
$DIR/core/services/keeper/registry1_2_synchronizer_test.go: `registryMock.MockResponse("getUpkeep", upkeepConfig1_2).Once()`
$DIR/core/services/keeper/registry1_2_synchronizer_test.go: `logBroadcast.On("DecodedLog").Return(&log)`
$DIR/core/services/keeper/registry1_2_synchronizer_test.go: `logBroadcast.On("RawLog").Return(rawLog)`
$DIR/core/services/keeper/registry1_2_synchronizer_test.go: `logBroadcast.On("String").Maybe().Return("")`
$DIR/core/services/keeper/registry1_2_synchronizer_test.go: `lb.On("MarkConsumed", mock.Anything, mock.Anything, mock.Anything).Return(nil)`
$DIR/core/services/keeper/registry1_2_synchronizer_test.go: `lb.On("WasAlreadyConsumed", mock.Anything, mock.Anything).Return(false, nil)`
$DIR/core/services/keeper/registry1_2_synchronizer_test.go: `synchronizer.HandleLog(ctx, logBroadcast)`
$DIR/core/services/keeper/registry1_2_synchronizer_test.go: `mockRegistry1_2(
t,
ethMock,
contractAddress,
registryConfig1_2,
[]*big.Int{big.NewInt(3), big.NewInt(69), big.NewInt(420)}, // Upkeep IDs
[]common.Address{fromAddress},
upkeepConfig1_2,
3,
2,
1)`
$DIR/core/services/keeper/registry1_2_synchronizer_test.go: `servicetest.Run(t, synchronizer)`
$DIR/core/services/keeper/registry1_2_synchronizer_test.go: `cltest.WaitForCount(t, db, "keeper_registries", 1)`
$DIR/core/services/keeper/registry1_2_synchronizer_test.go: `cltest.WaitForCount(t, db, "upkeep_registrations", 3)`
$DIR/core/services/keeper/registry1_2_synchronizer_test.go: `logBroadcast.On("DecodedLog").Return(&log)`
$DIR/core/services/keeper/registry1_2_synchronizer_test.go: `logBroadcast.On("RawLog").Return(rawLog)`
$DIR/core/services/keeper/registry1_2_synchronizer_test.go: `logBroadcast.On("String").Maybe().Return("")`
$DIR/core/services/keeper/registry1_2_synchronizer_test.go: `lb.On("MarkConsumed", mock.Anything, mock.Anything, mock.Anything).Return(nil)`
$DIR/core/services/keeper/registry1_2_synchronizer_test.go: `lb.On("WasAlreadyConsumed", mock.Anything, mock.Anything).Return(false, nil)`
$DIR/core/services/keeper/registry1_2_synchronizer_test.go: `synchronizer.HandleLog(ctx, logBroadcast)`
$DIR/core/services/keeper/registry1_2_synchronizer_test.go: `.NewSqlxDB(t)`
$DIR/core/services/keeper/registry1_2_synchronizer_test.go: `.NewORM(db, logger.TestLogger(t))`
$DIR/core/services/keeper/registry1_2_synchronizer_test.go: `.TestLogger(t)`
$DIR/core/services/keeper/registry1_2_synchronizer_test.go: `.NewEthClientMockWithDefaultChain(t)`
$DIR/core/services/keeper/registry1_2_synchronizer_test.go: `.MustInsertKeeperJob(t, db, korm, cltest.NewEIP55Address(), cltest.NewEIP55Address())`
$DIR/core/services/keeper/registry1_2_synchronizer_test.go: `.NewEIP55Address()`
$DIR/core/services/keeper/registry1_2_synchronizer_test.go: `.NewEIP55Address()`
$DIR/core/services/keeper/registry1_2_synchronizer_test.go: `.KeeperSpec.ContractAddress.Address()`
$DIR/core/services/keeper/registry1_2_synchronizer_test.go: `.NewContractMockReceiver(t, ethClient, keeper.Registry1_1ABI, contractAddress)`
$DIR/core/services/keeper/registry1_2_synchronizer_test.go: `.MockResponse("typeAndVersion", "KeeperRegistry 1.2.0")`
$DIR/core/services/keeper/registry1_2_synchronizer_test.go: `.Once()`
$DIR/core/services/keeper/registry1_2_synchronizer_test.go: `.NewRegistryWrapper(j.KeeperSpec.ContractAddress, ethClient)`
$DIR/core/services/keeper/registry1_2_synchronizer_test.go: `.GetLogListenerOpts(1, nil)`
$DIR/core/services/keeper/registry1_2_synchronizer_test.go: `.Topic()`
$DIR/core/services/keeper/registry1_2_synchronizer_test.go: `.KeeperSpec.ContractAddress.Address()`
$DIR/core/services/keeper/registry1_2_synchronizer_test.go: `.KeeperSpec.FromAddress.Address()`
$DIR/core/services/keeper/registry1_2_synchronizer_test.go: `.Start(testutils.Context(t))`
$DIR/core/services/keeper/registry1_2_synchronizer_test.go: `.Context(t)`
$DIR/core/services/keeper/registry1_2_synchronizer_test.go: `.WaitForCount(t, db, "keeper_registries", 1)`
$DIR/core/services/keeper/registry1_2_synchronizer_test.go: `.Start(testutils.Context(t))`
$DIR/core/services/keeper/registry1_2_synchronizer_test.go: `.Context(t)`
$DIR/core/services/keeper/registry1_2_synchronizer_test.go: `.Context(t)`
$DIR/core/services/keeper/registry1_2_synchronizer_test.go: `.NewWithT(t)`
$DIR/core/services/keeper/registry1_2_synchronizer_test.go: `.KeeperSpec.ContractAddress.Address()`
$DIR/core/services/keeper/registry1_2_synchronizer_test.go: `.KeeperSpec.FromAddress.Address()`
$DIR/core/services/keeper/registry1_2_synchronizer_test.go: `.NewInt(3)`
$DIR/core/services/keeper/registry1_2_synchronizer_test.go: `.NewInt(69)`
$DIR/core/services/keeper/registry1_2_synchronizer_test.go: `.NewInt(420)`
$DIR/core/services/keeper/registry1_2_synchronizer_test.go: `.ExportedFullSync(ctx)`
$DIR/core/services/keeper/registry1_2_synchronizer_test.go: `.AssertCount(t, db, "keeper_registries", 1)`
$DIR/core/services/keeper/registry1_2_synchronizer_test.go: `.AssertCount(t, db, "upkeep_registrations", 3)`
$DIR/core/services/keeper/registry1_2_synchronizer_test.go: `.Eventually(func() bool {
var upkeep keeper.UpkeepRegistration
err := db.Get(&upkeep, `SELECT * FROM upkeep_registrations`)
require.NoError(t, err)
return upkeep.LastKeeperIndex.Valid
}, testutils.WaitTimeout(t), cltest.DBPollingInterval)`
$DIR/core/services/keeper/registry1_2_synchronizer_test.go: `.Get(&upkeep, `SELECT * FROM upkeep_registrations`)`
$DIR/core/services/keeper/registry1_2_synchronizer_test.go: `.WaitTimeout(t)`
$DIR/core/services/keeper/registry1_2_synchronizer_test.go: `.Should(gomega.Equal(true))`
$DIR/core/services/keeper/registry1_2_synchronizer_test.go: `.Equal(true)`
$DIR/core/services/keeper/registry1_2_synchronizer_test.go: `.Eventually(func() int64 {
var upkeep keeper.UpkeepRegistration
err := db.Get(&upkeep, `SELECT * FROM upkeep_registrations`)
require.NoError(t, err)
return upkeep.LastKeeperIndex.Int64
}, testutils.WaitTimeout(t), cltest.DBPollingInterval)`
$DIR/core/services/keeper/registry1_2_synchronizer_test.go: `.Get(&upkeep, `SELECT * FROM upkeep_registrations`)`
$DIR/core/services/keeper/registry1_2_synchronizer_test.go: `.WaitTimeout(t)`
$DIR/core/services/keeper/registry1_2_synchronizer_test.go: `.Should(gomega.Equal(int64(0)))`
$DIR/core/services/keeper/registry1_2_synchronizer_test.go: `.Equal(int64(0))`
$DIR/core/services/keeper/registry1_2_synchronizer_test.go: `.NewInt(69)`
$DIR/core/services/keeper/registry1_2_synchronizer_test.go: `.NewInt(420)`
$DIR/core/services/keeper/registry1_2_synchronizer_test.go: `.NewInt(2022)`
$DIR/core/services/keeper/registry1_2_synchronizer_test.go: `.ExportedFullSync(ctx)`
$DIR/core/services/keeper/registry1_2_synchronizer_test.go: `.AssertCount(t, db, "keeper_registries", 1)`
$DIR/core/services/keeper/registry1_2_synchronizer_test.go: `.AssertCount(t, db, "upkeep_registrations", 3)`
$DIR/core/services/keeper/registry1_2_synchronizer_test.go: `.Context(t)`
$DIR/core/services/keeper/registry1_2_synchronizer_test.go: `.KeeperSpec.ContractAddress.Address()`
$DIR/core/services/keeper/registry1_2_synchronizer_test.go: `.KeeperSpec.FromAddress.Address()`
$DIR/core/services/keeper/registry1_2_synchronizer_test.go: `.Run(t, synchronizer)`
$DIR/core/services/keeper/registry1_2_synchronizer_test.go: `.WaitForCount(t, db, "keeper_registries", 1)`
$DIR/core/services/keeper/registry1_2_synchronizer_test.go: `.NewContractMockReceiver(t, ethMock, keeper.Registry1_2ABI, contractAddress)`
$DIR/core/services/keeper/registry1_2_synchronizer_test.go: `.NewInt(40)`
$DIR/core/services/keeper/registry1_2_synchronizer_test.go: `.MockResponse("getState", registry1_2.GetState{
State: registryState1_2,
Config: newConfig,
Keepers: []common.Address{fromAddress},
})`
$DIR/core/services/keeper/registry1_2_synchronizer_test.go: `.Once()`
$DIR/core/services/keeper/registry1_2_synchronizer_test.go: `.MustInsertHead(t, db, 1)`
$DIR/core/services/keeper/registry1_2_synchronizer_test.go: `.NewBroadcast(t)`
$DIR/core/services/keeper/registry1_2_synchronizer_test.go: `.On("DecodedLog")`
$DIR/core/services/keeper/registry1_2_synchronizer_test.go: `.Return(&log)`
$DIR/core/services/keeper/registry1_2_synchronizer_test.go: `.On("RawLog")`
$DIR/core/services/keeper/registry1_2_synchronizer_test.go: `.Return(rawLog)`
$DIR/core/services/keeper/registry1_2_synchronizer_test.go: `.On("String")`
$DIR/core/services/keeper/registry1_2_synchronizer_test.go: `.Maybe()`
$DIR/core/services/keeper/registry1_2_synchronizer_test.go: `.Return("")`
$DIR/core/services/keeper/registry1_2_synchronizer_test.go: `.On("MarkConsumed", mock.Anything, mock.Anything, mock.Anything)`
$DIR/core/services/keeper/registry1_2_synchronizer_test.go: `.Return(nil)`
$DIR/core/services/keeper/registry1_2_synchronizer_test.go: `.On("WasAlreadyConsumed", mock.Anything, mock.Anything)`
$DIR/core/services/keeper/registry1_2_synchronizer_test.go: `.Return(false, nil)`
$DIR/core/services/keeper/registry1_2_synchronizer_test.go: `.HandleLog(ctx, logBroadcast)`
$DIR/core/services/keeper/registry1_2_synchronizer_test.go: `.AssertRecordEventually(t, db, ®istry, fmt.Sprintf(`SELECT * FROM keeper_registries WHERE id = %d`, registry.ID), func() bool {
return registry.BlockCountPerTurn == 40
})`
$DIR/core/services/keeper/registry1_2_synchronizer_test.go: `.Sprintf(`SELECT * FROM keeper_registries WHERE id = %d`, registry.ID)`
$DIR/core/services/keeper/registry1_2_synchronizer_test.go: `.Context(t)`
$DIR/core/services/keeper/registry1_2_synchronizer_test.go: `.KeeperSpec.ContractAddress.Address()`
$DIR/core/services/keeper/registry1_2_synchronizer_test.go: `.KeeperSpec.FromAddress.Address()`
$DIR/core/services/keeper/registry1_2_synchronizer_test.go: `.Run(t, synchronizer)`
$DIR/core/services/keeper/registry1_2_synchronizer_test.go: `.WaitForCount(t, db, "keeper_registries", 1)`
$DIR/core/services/keeper/registry1_2_synchronizer_test.go: `.NewAddress()`
$DIR/core/services/keeper/registry1_2_synchronizer_test.go: `.NewContractMockReceiver(t, ethMock, keeper.Registry1_2ABI, contractAddress)`
$DIR/core/services/keeper/registry1_2_synchronizer_test.go: `.MockResponse("getState", registry1_2.GetState{
State: registryState1_2,
Config: registryConfig1_2,
Keepers: addresses,
})`
$DIR/core/services/keeper/registry1_2_synchronizer_test.go: `.Once()`
$DIR/core/services/keeper/registry1_2_synchronizer_test.go: `.MustInsertHead(t, db, 1)`
$DIR/core/services/keeper/registry1_2_synchronizer_test.go: `.NewBroadcast(t)`
$DIR/core/services/keeper/registry1_2_synchronizer_test.go: `.On("DecodedLog")`
$DIR/core/services/keeper/registry1_2_synchronizer_test.go: `.Return(&log)`
$DIR/core/services/keeper/registry1_2_synchronizer_test.go: `.On("RawLog")`
$DIR/core/services/keeper/registry1_2_synchronizer_test.go: `.Return(rawLog)`
$DIR/core/services/keeper/registry1_2_synchronizer_test.go: `.On("String")`
$DIR/core/services/keeper/registry1_2_synchronizer_test.go: `.Maybe()`
$DIR/core/services/keeper/registry1_2_synchronizer_test.go: `.Return("")`
$DIR/core/services/keeper/registry1_2_synchronizer_test.go: `.On("MarkConsumed", mock.Anything, mock.Anything, mock.Anything)`
$DIR/core/services/keeper/registry1_2_synchronizer_test.go: `.Return(nil)`
$DIR/core/services/keeper/registry1_2_synchronizer_test.go: `.On("WasAlreadyConsumed", mock.Anything, mock.Anything)`
$DIR/core/services/keeper/registry1_2_synchronizer_test.go: `.Return(false, nil)`
$DIR/core/services/keeper/registry1_2_synchronizer_test.go: `.HandleLog(ctx, logBroadcast)`
$DIR/core/services/keeper/registry1_2_synchronizer_test.go: `.AssertRecordEventually(t, db, ®istry, fmt.Sprintf(`SELECT * FROM keeper_registries WHERE id = %d`, registry.ID), func() bool {
return registry.NumKeepers == 2
})`
$DIR/core/services/keeper/registry1_2_synchronizer_test.go: `.Sprintf(`SELECT * FROM keeper_registries WHERE id = %d`, registry.ID)`
$DIR/core/services/keeper/registry1_2_synchronizer_test.go: `.Context(t)`
$DIR/core/services/keeper/registry1_2_synchronizer_test.go: `.KeeperSpec.ContractAddress.Address()`
$DIR/core/services/keeper/registry1_2_synchronizer_test.go: `.KeeperSpec.FromAddress.Address()`
$DIR/core/services/keeper/registry1_2_synchronizer_test.go: `.NewInt(3)`
$DIR/core/services/keeper/registry1_2_synchronizer_test.go: `.NewInt(69)`
$DIR/core/services/keeper/registry1_2_synchronizer_test.go: `.NewInt(420)`
$DIR/core/services/keeper/registry1_2_synchronizer_test.go: `.Run(t, synchronizer)`
$DIR/core/services/keeper/registry1_2_synchronizer_test.go: `.WaitForCount(t, db, "keeper_registries", 1)`
$DIR/core/services/keeper/registry1_2_synchronizer_test.go: `.WaitForCount(t, db, "upkeep_registrations", 3)`
$DIR/core/services/keeper/registry1_2_synchronizer_test.go: `.MustInsertHead(t, db, 1)`
$DIR/core/services/keeper/registry1_2_synchronizer_test.go: `.NewInt(3)`
$DIR/core/services/keeper/registry1_2_synchronizer_test.go: `.NewBroadcast(t)`
$DIR/core/services/keeper/registry1_2_synchronizer_test.go: `.On("DecodedLog")`
$DIR/core/services/keeper/registry1_2_synchronizer_test.go: `.Return(&log)`
$DIR/core/services/keeper/registry1_2_synchronizer_test.go: `.On("RawLog")`
$DIR/core/services/keeper/registry1_2_synchronizer_test.go: `.Return(rawLog)`
$DIR/core/services/keeper/registry1_2_synchronizer_test.go: `.On("String")`
$DIR/core/services/keeper/registry1_2_synchronizer_test.go: `.Maybe()`
$DIR/core/services/keeper/registry1_2_synchronizer_test.go: `.Return("")`
$DIR/core/services/keeper/registry1_2_synchronizer_test.go: `.On("MarkConsumed", mock.Anything, mock.Anything, mock.Anything)`
$DIR/core/services/keeper/registry1_2_synchronizer_test.go: `.Return(nil)`
$DIR/core/services/keeper/registry1_2_synchronizer_test.go: `.On("WasAlreadyConsumed", mock.Anything, mock.Anything)`
$DIR/core/services/keeper/registry1_2_synchronizer_test.go: `.Return(false, nil)`
$DIR/core/services/keeper/registry1_2_synchronizer_test.go: `.HandleLog(ctx, logBroadcast)`
$DIR/core/services/keeper/registry1_2_synchronizer_test.go: `.Context(t)`
$DIR/core/services/keeper/registry1_2_synchronizer_test.go: `.KeeperSpec.ContractAddress.Address()`
$DIR/core/services/keeper/registry1_2_synchronizer_test.go: `.KeeperSpec.FromAddress.Address()`
$DIR/core/services/keeper/registry1_2_synchronizer_test.go: `.NewInt(3)`
$DIR/core/services/keeper/registry1_2_synchronizer_test.go: `.Run(t, synchronizer)`
$DIR/core/services/keeper/registry1_2_synchronizer_test.go: `.WaitForCount(t, db, "keeper_registries", 1)`
$DIR/core/services/keeper/registry1_2_synchronizer_test.go: `.WaitForCount(t, db, "upkeep_registrations", 1)`
$DIR/core/services/keeper/registry1_2_synchronizer_test.go: `.NewContractMockReceiver(t, ethMock, keeper.Registry1_2ABI, contractAddress)`
$DIR/core/services/keeper/registry1_2_synchronizer_test.go: `.MockResponse("getUpkeep", upkeepConfig1_2)`
$DIR/core/services/keeper/registry1_2_synchronizer_test.go: `.Once()`
$DIR/core/services/keeper/registry1_2_synchronizer_test.go: `.MustInsertHead(t, db, 1)`
$DIR/core/services/keeper/registry1_2_synchronizer_test.go: `.NewInt(420)`
$DIR/core/services/keeper/registry1_2_synchronizer_test.go: `.NewBroadcast(t)`
$DIR/core/services/keeper/registry1_2_synchronizer_test.go: `.On("DecodedLog")`
$DIR/core/services/keeper/registry1_2_synchronizer_test.go: `.Return(&log)`
$DIR/core/services/keeper/registry1_2_synchronizer_test.go: `.On("RawLog")`
$DIR/core/services/keeper/registry1_2_synchronizer_test.go: `.Return(rawLog)`
$DIR/core/services/keeper/registry1_2_synchronizer_test.go: `.On("String")`
$DIR/core/services/keeper/registry1_2_synchronizer_test.go: `.Maybe()`
$DIR/core/services/keeper/registry1_2_synchronizer_test.go: `.Return("")`
$DIR/core/services/keeper/registry1_2_synchronizer_test.go: `.On("MarkConsumed", mock.Anything, mock.Anything, mock.Anything)`
$DIR/core/services/keeper/registry1_2_synchronizer_test.go: `.Return(nil)`
$DIR/core/services/keeper/registry1_2_synchronizer_test.go: `.On("WasAlreadyConsumed", mock.Anything, mock.Anything)`
$DIR/core/services/keeper/registry1_2_synchronizer_test.go: `.Return(false, nil)`
$DIR/core/services/keeper/registry1_2_synchronizer_test.go: `.HandleLog(ctx, logBroadcast)`
$DIR/core/services/keeper/registry1_2_synchronizer_test.go: `.Context(t)`
$DIR/core/services/keeper/registry1_2_synchronizer_test.go: `.NewWithT(t)`
$DIR/core/services/keeper/registry1_2_synchronizer_test.go: `.KeeperSpec.ContractAddress.Address()`
$DIR/core/services/keeper/registry1_2_synchronizer_test.go: `.KeeperSpec.FromAddress.Address()`
$DIR/core/services/keeper/registry1_2_synchronizer_test.go: `.NewInt(3)`
$DIR/core/services/keeper/registry1_2_synchronizer_test.go: `.Run(t, synchronizer)`
$DIR/core/services/keeper/registry1_2_synchronizer_test.go: `.WaitForCount(t, db, "keeper_registries", 1)`
$DIR/core/services/keeper/registry1_2_synchronizer_test.go: `.WaitForCount(t, db, "upkeep_registrations", 1)`
$DIR/core/services/keeper/registry1_2_synchronizer_test.go: `.MustExec(t, db, `UPDATE upkeep_registrations SET last_run_block_height = 100`)`
$DIR/core/services/keeper/registry1_2_synchronizer_test.go: `.MustInsertHead(t, db, 1)`
$DIR/core/services/keeper/registry1_2_synchronizer_test.go: `.NewInt(3)`
$DIR/core/services/keeper/registry1_2_synchronizer_test.go: `.NewBroadcast(t)`
$DIR/core/services/keeper/registry1_2_synchronizer_test.go: `.On("DecodedLog")`
$DIR/core/services/keeper/registry1_2_synchronizer_test.go: `.Return(&log)`
$DIR/core/services/keeper/registry1_2_synchronizer_test.go: `.On("RawLog")`
$DIR/core/services/keeper/registry1_2_synchronizer_test.go: `.Return(rawLog)`
$DIR/core/services/keeper/registry1_2_synchronizer_test.go: `.On("String")`
$DIR/core/services/keeper/registry1_2_synchronizer_test.go: `.Maybe()`
$DIR/core/services/keeper/registry1_2_synchronizer_test.go: `.Return("")`
$DIR/core/services/keeper/registry1_2_synchronizer_test.go: `.On("MarkConsumed", mock.Anything, mock.Anything, mock.Anything)`
$DIR/core/services/keeper/registry1_2_synchronizer_test.go: `.Return(nil)`
$DIR/core/services/keeper/registry1_2_synchronizer_test.go: `.On("WasAlreadyConsumed", mock.Anything, mock.Anything)`
$DIR/core/services/keeper/registry1_2_synchronizer_test.go: `.Return(false, nil)`
$DIR/core/services/keeper/registry1_2_synchronizer_test.go: `.HandleLog(ctx, logBroadcast)`
$DIR/core/services/keeper/registry1_2_synchronizer_test.go: `.Eventually(func() int64 {
var upkeep keeper.UpkeepRegistration
err := db.Get(&upkeep, `SELECT * FROM upkeep_registrations`)
require.NoError(t, err)
return upkeep.LastRunBlockHeight
}, testutils.WaitTimeout(t), cltest.DBPollingInterval)`
$DIR/core/services/keeper/registry1_2_synchronizer_test.go: `.Get(&upkeep, `SELECT * FROM upkeep_registrations`)`
$DIR/core/services/keeper/registry1_2_synchronizer_test.go: `.WaitTimeout(t)`
$DIR/core/services/keeper/registry1_2_synchronizer_test.go: `.Should(gomega.Equal(int64(200)))`
$DIR/core/services/keeper/registry1_2_synchronizer_test.go: `.Equal(int64(200))`
$DIR/core/services/keeper/registry1_2_synchronizer_test.go: `.Eventually(func() int64 {
var upkeep keeper.UpkeepRegistration
err := db.Get(&upkeep, `SELECT * FROM upkeep_registrations`)
require.NoError(t, err)
return upkeep.LastKeeperIndex.Int64
}, testutils.WaitTimeout(t), cltest.DBPollingInterval)`
$DIR/core/services/keeper/registry1_2_synchronizer_test.go: `.Get(&upkeep, `SELECT * FROM upkeep_registrations`)`
$DIR/core/services/keeper/registry1_2_synchronizer_test.go: `.WaitTimeout(t)`
$DIR/core/services/keeper/registry1_2_synchronizer_test.go: `.Equal(int64(0))`
$DIR/core/services/keeper/registry1_2_synchronizer_test.go: `.Context(t)`
$DIR/core/services/keeper/registry1_2_synchronizer_test.go: `.NewWithT(t)`
$DIR/core/services/keeper/registry1_2_synchronizer_test.go: `.KeeperSpec.ContractAddress.Address()`
$DIR/core/services/keeper/registry1_2_synchronizer_test.go: `.KeeperSpec.FromAddress.Address()`
$DIR/core/services/keeper/registry1_2_synchronizer_test.go: `.NewInt(3)`
$DIR/core/services/keeper/registry1_2_synchronizer_test.go: `.Run(t, synchronizer)`
$DIR/core/services/keeper/registry1_2_synchronizer_test.go: `.WaitForCount(t, db, "keeper_registries", 1)`
$DIR/core/services/keeper/registry1_2_synchronizer_test.go: `.WaitForCount(t, db, "upkeep_registrations", 1)`
$DIR/core/services/keeper/registry1_2_synchronizer_test.go: `.Get(&upkeep, `SELECT * FROM upkeep_registrations`)`
$DIR/core/services/keeper/registry1_2_synchronizer_test.go: `.Eventually(getExecuteGas, testutils.WaitTimeout(t), cltest.DBPollingInterval)`
$DIR/core/services/keeper/registry1_2_synchronizer_test.go: `.WaitTimeout(t)`
$DIR/core/services/keeper/registry1_2_synchronizer_test.go: `.Should(gomega.Equal(uint32(2_000_000)))`
$DIR/core/services/keeper/registry1_2_synchronizer_test.go: `.Equal(uint32(2_000_000))`
$DIR/core/services/keeper/registry1_2_synchronizer_test.go: `.NewContractMockReceiver(t, ethMock, keeper.Registry1_2ABI, contractAddress)`
$DIR/core/services/keeper/registry1_2_synchronizer_test.go: `.MockResponse("getUpkeep", newConfig)`
$DIR/core/services/keeper/registry1_2_synchronizer_test.go: `.Once()`
$DIR/core/services/keeper/registry1_2_synchronizer_test.go: `.MustInsertHead(t, db, 1)`
$DIR/core/services/keeper/registry1_2_synchronizer_test.go: `.NewInt(3)`
$DIR/core/services/keeper/registry1_2_synchronizer_test.go: `.NewInt(4_000_000)`
$DIR/core/services/keeper/registry1_2_synchronizer_test.go: `.NewBroadcast(t)`
$DIR/core/services/keeper/registry1_2_synchronizer_test.go: `.On("DecodedLog")`
$DIR/core/services/keeper/registry1_2_synchronizer_test.go: `.Return(&log)`
$DIR/core/services/keeper/registry1_2_synchronizer_test.go: `.On("RawLog")`
$DIR/core/services/keeper/registry1_2_synchronizer_test.go: `.Return(rawLog)`
$DIR/core/services/keeper/registry1_2_synchronizer_test.go: `.On("String")`
$DIR/core/services/keeper/registry1_2_synchronizer_test.go: `.Maybe()`
$DIR/core/services/keeper/registry1_2_synchronizer_test.go: `.Return("")`
$DIR/core/services/keeper/registry1_2_synchronizer_test.go: `.On("MarkConsumed", mock.Anything, mock.Anything, mock.Anything)`
$DIR/core/services/keeper/registry1_2_synchronizer_test.go: `.Return(nil)`
$DIR/core/services/keeper/registry1_2_synchronizer_test.go: `.On("WasAlreadyConsumed", mock.Anything, mock.Anything)`
$DIR/core/services/keeper/registry1_2_synchronizer_test.go: `.Return(false, nil)`
$DIR/core/services/keeper/registry1_2_synchronizer_test.go: `.HandleLog(ctx, logBroadcast)`
$DIR/core/services/keeper/registry1_2_synchronizer_test.go: `.Eventually(getExecuteGas, testutils.WaitTimeout(t), cltest.DBPollingInterval)`
$DIR/core/services/keeper/registry1_2_synchronizer_test.go: `.WaitTimeout(t)`
$DIR/core/services/keeper/registry1_2_synchronizer_test.go: `.Equal(uint32(4_000_000))`
$DIR/core/services/keeper/registry1_2_synchronizer_test.go: `.Context(t)`
$DIR/core/services/keeper/registry1_2_synchronizer_test.go: `.KeeperSpec.ContractAddress.Address()`
$DIR/core/services/keeper/registry1_2_synchronizer_test.go: `.KeeperSpec.FromAddress.Address()`
$DIR/core/services/keeper/registry1_2_synchronizer_test.go: `.NewInt(3)`
$DIR/core/services/keeper/registry1_2_synchronizer_test.go: `.Run(t, synchronizer)`
$DIR/core/services/keeper/registry1_2_synchronizer_test.go: `.WaitForCount(t, db, "keeper_registries", 1)`
$DIR/core/services/keeper/registry1_2_synchronizer_test.go: `.WaitForCount(t, db, "upkeep_registrations", 1)`
$DIR/core/services/keeper/registry1_2_synchronizer_test.go: `.NewContractMockReceiver(t, ethMock, keeper.Registry1_2ABI, contractAddress)`
$DIR/core/services/keeper/registry1_2_synchronizer_test.go: `.MockResponse("getUpkeep", upkeepConfig1_2)`
$DIR/core/services/keeper/registry1_2_synchronizer_test.go: `.Once()`
$DIR/core/services/keeper/registry1_2_synchronizer_test.go: `.MustInsertHead(t, db, 1)`
$DIR/core/services/keeper/registry1_2_synchronizer_test.go: `.NewInt(420)`
$DIR/core/services/keeper/registry1_2_synchronizer_test.go: `.NewBroadcast(t)`
$DIR/core/services/keeper/registry1_2_synchronizer_test.go: `.On("DecodedLog")`
$DIR/core/services/keeper/registry1_2_synchronizer_test.go: `.Return(&log)`
$DIR/core/services/keeper/registry1_2_synchronizer_test.go: `.On("RawLog")`
$DIR/core/services/keeper/registry1_2_synchronizer_test.go: `.Return(rawLog)`
$DIR/core/services/keeper/registry1_2_synchronizer_test.go: `.On("String")`
$DIR/core/services/keeper/registry1_2_synchronizer_test.go: `.Maybe()`
$DIR/core/services/keeper/registry1_2_synchronizer_test.go: `.Return("")`
$DIR/core/services/keeper/registry1_2_synchronizer_test.go: `.On("MarkConsumed", mock.Anything, mock.Anything, mock.Anything)`
$DIR/core/services/keeper/registry1_2_synchronizer_test.go: `.Return(nil)`
$DIR/core/services/keeper/registry1_2_synchronizer_test.go: `.On("WasAlreadyConsumed", mock.Anything, mock.Anything)`
$DIR/core/services/keeper/registry1_2_synchronizer_test.go: `.Return(false, nil)`
$DIR/core/services/keeper/registry1_2_synchronizer_test.go: `.HandleLog(ctx, logBroadcast)`
$DIR/core/services/keeper/registry1_2_synchronizer_test.go: `.Context(t)`
$DIR/core/services/keeper/registry1_2_synchronizer_test.go: `.KeeperSpec.ContractAddress.Address()`
$DIR/core/services/keeper/registry1_2_synchronizer_test.go: `.KeeperSpec.FromAddress.Address()`
$DIR/core/services/keeper/registry1_2_synchronizer_test.go: `.NewInt(3)`
$DIR/core/services/keeper/registry1_2_synchronizer_test.go: `.NewInt(69)`
$DIR/core/services/keeper/registry1_2_synchronizer_test.go: `.NewInt(420)`
$DIR/core/services/keeper/registry1_2_synchronizer_test.go: `.Run(t, synchronizer)`
$DIR/core/services/keeper/registry1_2_synchronizer_test.go: `.WaitForCount(t, db, "keeper_registries", 1)`
$DIR/core/services/keeper/registry1_2_synchronizer_test.go: `.WaitForCount(t, db, "upkeep_registrations", 3)`
$DIR/core/services/keeper/registry1_2_synchronizer_test.go: `.MustInsertHead(t, db, 1)`
$DIR/core/services/keeper/registry1_2_synchronizer_test.go: `.NewInt(3)`
$DIR/core/services/keeper/registry1_2_synchronizer_test.go: `.NewBroadcast(t)`
$DIR/core/services/keeper/registry1_2_synchronizer_test.go: `.On("DecodedLog")`
$DIR/core/services/keeper/registry1_2_synchronizer_test.go: `.Return(&log)`
$DIR/core/services/keeper/registry1_2_synchronizer_test.go: `.On("RawLog")`
$DIR/core/services/keeper/registry1_2_synchronizer_test.go: `.Return(rawLog)`
$DIR/core/services/keeper/registry1_2_synchronizer_test.go: `.On("String")`
$DIR/core/services/keeper/registry1_2_synchronizer_test.go: `.Maybe()`
$DIR/core/services/keeper/registry1_2_synchronizer_test.go: `.Return("")`
$DIR/core/services/keeper/registry1_2_synchronizer_test.go: `.On("MarkConsumed", mock.Anything, mock.Anything, mock.Anything)`
$DIR/core/services/keeper/registry1_2_synchronizer_test.go: `.Return(nil)`
$DIR/core/services/keeper/registry1_2_synchronizer_test.go: `.On("WasAlreadyConsumed", mock.Anything, mock.Anything)`
$DIR/core/services/keeper/registry1_2_synchronizer_test.go: `.Return(false, nil)`
$DIR/core/services/keeper/registry1_2_synchronizer_test.go: `.HandleLog(ctx, logBroadcast)`
$DIR/core/services/keeper/registry1_3_synchronizer_test.go: `registryMock.MockResponse("typeAndVersion", "KeeperRegistry 1.3.0").Once()`
$DIR/core/services/keeper/registry1_3_synchronizer_test.go: `mockRegistry1_3(
t,
ethMock,
contractAddress,
registryConfig1_3,
[]*big.Int{},
[]common.Address{fromAddress},
upkeepConfig1_3,
0,
2,
0)`
$DIR/core/services/keeper/registry1_3_synchronizer_test.go: `cltest.WaitForCount(t, db, "keeper_registries", 1)`
$DIR/core/services/keeper/registry1_3_synchronizer_test.go: `err = synchronizer.Start(testutils.Context(t))`
$DIR/core/services/keeper/registry1_3_synchronizer_test.go: `upkeepConfig.LastKeeper = fromAddress`
$DIR/core/services/keeper/registry1_3_synchronizer_test.go: `mockRegistry1_3(
t,
ethMock,
contractAddress,
registryConfig1_3,
[]*big.Int{big.NewInt(3), big.NewInt(69), big.NewInt(420)}, // Upkeep IDs
[]common.Address{fromAddress},
upkeepConfig,
3, // sync all 3
2,
1)`
$DIR/core/services/keeper/registry1_3_synchronizer_test.go: `synchronizer.ExportedFullSync(ctx)`
$DIR/core/services/keeper/registry1_3_synchronizer_test.go: `cltest.AssertCount(t, db, "keeper_registries", 1)`
$DIR/core/services/keeper/registry1_3_synchronizer_test.go: `cltest.AssertCount(t, db, "upkeep_registrations", 3)`
$DIR/core/services/keeper/registry1_3_synchronizer_test.go: `g.Eventually(func() bool {
var upkeep keeper.UpkeepRegistration
err := db.Get(&upkeep, `SELECT * FROM upkeep_registrations`)
require.NoError(t, err)
return upkeep.LastKeeperIndex.Valid
}, testutils.WaitTimeout(t), cltest.DBPollingInterval).Should(gomega.Equal(true))`
$DIR/core/services/keeper/registry1_3_synchronizer_test.go: `g.Eventually(func() int64 {
var upkeep keeper.UpkeepRegistration
err := db.Get(&upkeep, `SELECT * FROM upkeep_registrations`)
require.NoError(t, err)
return upkeep.LastKeeperIndex.Int64
}, testutils.WaitTimeout(t), cltest.DBPollingInterval).Should(gomega.Equal(int64(0)))`
$DIR/core/services/keeper/registry1_3_synchronizer_test.go: `assertUpkeepIDs(t, db, []int64{3, 69, 420})`
$DIR/core/services/keeper/registry1_3_synchronizer_test.go: `mockRegistry1_3(
t,
ethMock,
contractAddress,
registryConfig1_3,
[]*big.Int{big.NewInt(69), big.NewInt(420), big.NewInt(2022)}, // Upkeep IDs
[]common.Address{fromAddress},
upkeepConfig1_3,
3, // sync all 3 upkeeps
2,
1)`
$DIR/core/services/keeper/registry1_3_synchronizer_test.go: `synchronizer.ExportedFullSync(ctx)`
$DIR/core/services/keeper/registry1_3_synchronizer_test.go: `cltest.AssertCount(t, db, "keeper_registries", 1)`
$DIR/core/services/keeper/registry1_3_synchronizer_test.go: `cltest.AssertCount(t, db, "upkeep_registrations", 3)`
$DIR/core/services/keeper/registry1_3_synchronizer_test.go: `mockRegistry1_3(
t,
ethMock,
contractAddress,
registryConfig1_3,
[]*big.Int{}, // Upkeep IDs
[]common.Address{fromAddress},
upkeepConfig1_3,
0,
2,
0)`
$DIR/core/services/keeper/registry1_3_synchronizer_test.go: `servicetest.Run(t, synchronizer)`
$DIR/core/services/keeper/registry1_3_synchronizer_test.go: `cltest.WaitForCount(t, db, "keeper_registries", 1)`
$DIR/core/services/keeper/registry1_3_synchronizer_test.go: `newConfig.BlockCountPerTurn = big.NewInt(40)`
$DIR/core/services/keeper/registry1_3_synchronizer_test.go: `registryMock.MockResponse("getState", registry1_3.GetState{
State: registryState1_3,
Config: newConfig,
Keepers: []common.Address{fromAddress},
}).Once()`
$DIR/core/services/keeper/registry1_3_synchronizer_test.go: `logBroadcast.On("DecodedLog").Return(&log)`
$DIR/core/services/keeper/registry1_3_synchronizer_test.go: `logBroadcast.On("RawLog").Return(rawLog)`
$DIR/core/services/keeper/registry1_3_synchronizer_test.go: `logBroadcast.On("String").Maybe().Return("")`
$DIR/core/services/keeper/registry1_3_synchronizer_test.go: `lb.On("MarkConsumed", mock.Anything, mock.Anything, mock.Anything).Return(nil)`
$DIR/core/services/keeper/registry1_3_synchronizer_test.go: `lb.On("WasAlreadyConsumed", mock.Anything, mock.Anything).Return(false, nil)`
$DIR/core/services/keeper/registry1_3_synchronizer_test.go: `synchronizer.HandleLog(ctx, logBroadcast)`
$DIR/core/services/keeper/registry1_3_synchronizer_test.go: `cltest.AssertRecordEventually(t, db, ®istry, fmt.Sprintf(`SELECT * FROM keeper_registries WHERE id = %d`, registry.ID), func() bool {
return registry.BlockCountPerTurn == 40
})`
$DIR/core/services/keeper/registry1_3_synchronizer_test.go: `mockRegistry1_3(
t,
ethMock,
contractAddress,
registryConfig1_3,
[]*big.Int{}, // Upkeep IDs
[]common.Address{fromAddress},
upkeepConfig1_3,
0,
2,
0)`
$DIR/core/services/keeper/registry1_3_synchronizer_test.go: `servicetest.Run(t, synchronizer)`
$DIR/core/services/keeper/registry1_3_synchronizer_test.go: `cltest.WaitForCount(t, db, "keeper_registries", 1)`
$DIR/core/services/keeper/registry1_3_synchronizer_test.go: `registryMock.MockResponse("getState", registry1_3.GetState{
State: registryState1_3,
Config: registryConfig1_3,
Keepers: addresses,
}).Once()`
$DIR/core/services/keeper/registry1_3_synchronizer_test.go: `logBroadcast.On("DecodedLog").Return(&log)`
$DIR/core/services/keeper/registry1_3_synchronizer_test.go: `logBroadcast.On("RawLog").Return(rawLog)`
$DIR/core/services/keeper/registry1_3_synchronizer_test.go: `logBroadcast.On("String").Maybe().Return("")`
$DIR/core/services/keeper/registry1_3_synchronizer_test.go: `lb.On("MarkConsumed", mock.Anything, mock.Anything, mock.Anything).Return(nil)`
$DIR/core/services/keeper/registry1_3_synchronizer_test.go: `lb.On("WasAlreadyConsumed", mock.Anything, mock.Anything).Return(false, nil)`
$DIR/core/services/keeper/registry1_3_synchronizer_test.go: `synchronizer.HandleLog(ctx, logBroadcast)`
$DIR/core/services/keeper/registry1_3_synchronizer_test.go: `cltest.AssertRecordEventually(t, db, ®istry, fmt.Sprintf(`SELECT * FROM keeper_registries WHERE id = %d`, registry.ID), func() bool {
return registry.NumKeepers == 2
})`
$DIR/core/services/keeper/registry1_3_synchronizer_test.go: `mockRegistry1_3(
t,
ethMock,
contractAddress,
registryConfig1_3,
[]*big.Int{big.NewInt(3), big.NewInt(69), big.NewInt(420)}, // Upkeep IDs
[]common.Address{fromAddress},
upkeepConfig1_3,
3,
2,
1)`
$DIR/core/services/keeper/registry1_3_synchronizer_test.go: `servicetest.Run(t, synchronizer)`
$DIR/core/services/keeper/registry1_3_synchronizer_test.go: `cltest.WaitForCount(t, db, "keeper_registries", 1)`
$DIR/core/services/keeper/registry1_3_synchronizer_test.go: `cltest.WaitForCount(t, db, "upkeep_registrations", 3)`
$DIR/core/services/keeper/registry1_3_synchronizer_test.go: `logBroadcast.On("DecodedLog").Return(&log)`
$DIR/core/services/keeper/registry1_3_synchronizer_test.go: `logBroadcast.On("RawLog").Return(rawLog)`
$DIR/core/services/keeper/registry1_3_synchronizer_test.go: `logBroadcast.On("String").Maybe().Return("")`
$DIR/core/services/keeper/registry1_3_synchronizer_test.go: `lb.On("MarkConsumed", mock.Anything, mock.Anything, mock.Anything).Return(nil)`
$DIR/core/services/keeper/registry1_3_synchronizer_test.go: `lb.On("WasAlreadyConsumed", mock.Anything, mock.Anything).Return(false, nil)`
$DIR/core/services/keeper/registry1_3_synchronizer_test.go: `synchronizer.HandleLog(ctx, logBroadcast)`
$DIR/core/services/keeper/registry1_3_synchronizer_test.go: `mockRegistry1_3(
t,
ethMock,
contractAddress,
registryConfig1_3,
[]*big.Int{big.NewInt(3)}, // Upkeep IDs
[]common.Address{fromAddress},
upkeepConfig1_3,
1,
2,
1)`
$DIR/core/services/keeper/registry1_3_synchronizer_test.go: `servicetest.Run(t, synchronizer)`
$DIR/core/services/keeper/registry1_3_synchronizer_test.go: `cltest.WaitForCount(t, db, "keeper_registries", 1)`
$DIR/core/services/keeper/registry1_3_synchronizer_test.go: `cltest.WaitForCount(t, db, "upkeep_registrations", 1)`
$DIR/core/services/keeper/registry1_3_synchronizer_test.go: `registryMock.MockResponse("getUpkeep", upkeepConfig1_3).Once()`
$DIR/core/services/keeper/registry1_3_synchronizer_test.go: `logBroadcast.On("DecodedLog").Return(&log)`
$DIR/core/services/keeper/registry1_3_synchronizer_test.go: `logBroadcast.On("RawLog").Return(rawLog)`
$DIR/core/services/keeper/registry1_3_synchronizer_test.go: `logBroadcast.On("String").Maybe().Return("")`
$DIR/core/services/keeper/registry1_3_synchronizer_test.go: `lb.On("MarkConsumed", mock.Anything, mock.Anything, mock.Anything).Return(nil)`
$DIR/core/services/keeper/registry1_3_synchronizer_test.go: `lb.On("WasAlreadyConsumed", mock.Anything, mock.Anything).Return(false, nil)`
$DIR/core/services/keeper/registry1_3_synchronizer_test.go: `synchronizer.HandleLog(ctx, logBroadcast)`
$DIR/core/services/keeper/registry1_3_synchronizer_test.go: `mockRegistry1_3(
t,
ethMock,
contractAddress,
registryConfig1_3,
[]*big.Int{big.NewInt(3)}, // Upkeep IDs
[]common.Address{fromAddress},
upkeepConfig1_3,
1,
2,
1)`
$DIR/core/services/keeper/registry1_3_synchronizer_test.go: `servicetest.Run(t, synchronizer)`
$DIR/core/services/keeper/registry1_3_synchronizer_test.go: `cltest.WaitForCount(t, db, "keeper_registries", 1)`
$DIR/core/services/keeper/registry1_3_synchronizer_test.go: `cltest.WaitForCount(t, db, "upkeep_registrations", 1)`
$DIR/core/services/keeper/registry1_3_synchronizer_test.go: `pgtest.MustExec(t, db, `UPDATE upkeep_registrations SET last_run_block_height = 100`)`
$DIR/core/services/keeper/registry1_3_synchronizer_test.go: `logBroadcast.On("DecodedLog").Return(&log)`
$DIR/core/services/keeper/registry1_3_synchronizer_test.go: `logBroadcast.On("RawLog").Return(rawLog)`
$DIR/core/services/keeper/registry1_3_synchronizer_test.go: `logBroadcast.On("String").Maybe().Return("")`
$DIR/core/services/keeper/registry1_3_synchronizer_test.go: `lb.On("MarkConsumed", mock.Anything, mock.Anything, mock.Anything).Return(nil)`
$DIR/core/services/keeper/registry1_3_synchronizer_test.go: `lb.On("WasAlreadyConsumed", mock.Anything, mock.Anything).Return(false, nil)`
$DIR/core/services/keeper/registry1_3_synchronizer_test.go: `synchronizer.HandleLog(ctx, logBroadcast)`
$DIR/core/services/keeper/registry1_3_synchronizer_test.go: `g.Eventually(func() int64 {
var upkeep keeper.UpkeepRegistration
err := db.Get(&upkeep, `SELECT * FROM upkeep_registrations`)
require.NoError(t, err)
return upkeep.LastRunBlockHeight
}, testutils.WaitTimeout(t), cltest.DBPollingInterval).Should(gomega.Equal(int64(200)))`
$DIR/core/services/keeper/registry1_3_synchronizer_test.go: `mockRegistry1_3(
t,
ethMock,
contractAddress,
registryConfig1_3,
[]*big.Int{big.NewInt(3)}, // Upkeep IDs
[]common.Address{fromAddress},
upkeepConfig1_3,
1,
2,
1)`
$DIR/core/services/keeper/registry1_3_synchronizer_test.go: `servicetest.Run(t, synchronizer)`
$DIR/core/services/keeper/registry1_3_synchronizer_test.go: `cltest.WaitForCount(t, db, "keeper_registries", 1)`
$DIR/core/services/keeper/registry1_3_synchronizer_test.go: `cltest.WaitForCount(t, db, "upkeep_registrations", 1)`
$DIR/core/services/keeper/registry1_3_synchronizer_test.go: `g.Eventually(getExecuteGas, testutils.WaitTimeout(t), cltest.DBPollingInterval).Should(gomega.Equal(uint32(2_000_000)))`
$DIR/core/services/keeper/registry1_3_synchronizer_test.go: `newConfig.ExecuteGas = 4_000_000`
$DIR/core/services/keeper/registry1_3_synchronizer_test.go: `registryMock.MockResponse("getUpkeep", newConfig).Once()`
$DIR/core/services/keeper/registry1_3_synchronizer_test.go: `logBroadcast.On("DecodedLog").Return(&log)`
$DIR/core/services/keeper/registry1_3_synchronizer_test.go: `logBroadcast.On("RawLog").Return(rawLog)`
$DIR/core/services/keeper/registry1_3_synchronizer_test.go: `logBroadcast.On("String").Maybe().Return("")`
$DIR/core/services/keeper/registry1_3_synchronizer_test.go: `lb.On("MarkConsumed", mock.Anything, mock.Anything, mock.Anything).Return(nil)`
$DIR/core/services/keeper/registry1_3_synchronizer_test.go: `lb.On("WasAlreadyConsumed", mock.Anything, mock.Anything).Return(false, nil)`
$DIR/core/services/keeper/registry1_3_synchronizer_test.go: `synchronizer.HandleLog(ctx, logBroadcast)`
$DIR/core/services/keeper/registry1_3_synchronizer_test.go: `mockRegistry1_3(
t,
ethMock,
contractAddress,
registryConfig1_3,
[]*big.Int{big.NewInt(3)}, // Upkeep IDs
[]common.Address{fromAddress},
upkeepConfig1_3,
1,
2,
1)`
$DIR/core/services/keeper/registry1_3_synchronizer_test.go: `servicetest.Run(t, synchronizer)`
$DIR/core/services/keeper/registry1_3_synchronizer_test.go: `cltest.WaitForCount(t, db, "keeper_registries", 1)`
$DIR/core/services/keeper/registry1_3_synchronizer_test.go: `cltest.WaitForCount(t, db, "upkeep_registrations", 1)`
$DIR/core/services/keeper/registry1_3_synchronizer_test.go: `registryMock.MockResponse("getUpkeep", upkeepConfig1_3).Once()`
$DIR/core/services/keeper/registry1_3_synchronizer_test.go: `logBroadcast.On("DecodedLog").Return(&log)`
$DIR/core/services/keeper/registry1_3_synchronizer_test.go: `logBroadcast.On("RawLog").Return(rawLog)`
$DIR/core/services/keeper/registry1_3_synchronizer_test.go: `logBroadcast.On("String").Maybe().Return("")`
$DIR/core/services/keeper/registry1_3_synchronizer_test.go: `lb.On("MarkConsumed", mock.Anything, mock.Anything, mock.Anything).Return(nil)`
$DIR/core/services/keeper/registry1_3_synchronizer_test.go: `lb.On("WasAlreadyConsumed", mock.Anything, mock.Anything).Return(false, nil)`
$DIR/core/services/keeper/registry1_3_synchronizer_test.go: `synchronizer.HandleLog(ctx, logBroadcast)`
$DIR/core/services/keeper/registry1_3_synchronizer_test.go: `mockRegistry1_3(
t,
ethMock,
contractAddress,
registryConfig1_3,
[]*big.Int{big.NewInt(3), big.NewInt(69), big.NewInt(420)}, // Upkeep IDs
[]common.Address{fromAddress},
upkeepConfig1_3,
3,
2,
1)`
$DIR/core/services/keeper/registry1_3_synchronizer_test.go: `servicetest.Run(t, synchronizer)`
$DIR/core/services/keeper/registry1_3_synchronizer_test.go: `cltest.WaitForCount(t, db, "keeper_registries", 1)`
$DIR/core/services/keeper/registry1_3_synchronizer_test.go: `cltest.WaitForCount(t, db, "upkeep_registrations", 3)`
$DIR/core/services/keeper/registry1_3_synchronizer_test.go: `logBroadcast.On("DecodedLog").Return(&log)`
$DIR/core/services/keeper/registry1_3_synchronizer_test.go: `logBroadcast.On("RawLog").Return(rawLog)`
$DIR/core/services/keeper/registry1_3_synchronizer_test.go: `logBroadcast.On("String").Maybe().Return("")`
$DIR/core/services/keeper/registry1_3_synchronizer_test.go: `lb.On("MarkConsumed", mock.Anything, mock.Anything, mock.Anything).Return(nil)`
$DIR/core/services/keeper/registry1_3_synchronizer_test.go: `lb.On("WasAlreadyConsumed", mock.Anything, mock.Anything).Return(false, nil)`
$DIR/core/services/keeper/registry1_3_synchronizer_test.go: `synchronizer.HandleLog(ctx, logBroadcast)`
$DIR/core/services/keeper/registry1_3_synchronizer_test.go: `mockRegistry1_3(
t,
ethMock,
contractAddress,
registryConfig1_3,
[]*big.Int{big.NewInt(3), big.NewInt(69), big.NewInt(420)}, // Upkeep IDs
[]common.Address{fromAddress},
upkeepConfig1_3,
4,
2,
1)`
$DIR/core/services/keeper/registry1_3_synchronizer_test.go: `servicetest.Run(t, synchronizer)`
$DIR/core/services/keeper/registry1_3_synchronizer_test.go: `cltest.WaitForCount(t, db, "keeper_registries", 1)`
$DIR/core/services/keeper/registry1_3_synchronizer_test.go: `cltest.WaitForCount(t, db, "upkeep_registrations", 3)`
$DIR/core/services/keeper/registry1_3_synchronizer_test.go: `logBroadcast.On("DecodedLog").Return(&log)`
$DIR/core/services/keeper/registry1_3_synchronizer_test.go: `logBroadcast.On("RawLog").Return(rawLog)`
$DIR/core/services/keeper/registry1_3_synchronizer_test.go: `logBroadcast.On("String").Maybe().Return("")`
$DIR/core/services/keeper/registry1_3_synchronizer_test.go: `lb.On("MarkConsumed", mock.Anything, mock.Anything, mock.Anything).Return(nil)`
$DIR/core/services/keeper/registry1_3_synchronizer_test.go: `lb.On("WasAlreadyConsumed", mock.Anything, mock.Anything).Return(false, nil)`
$DIR/core/services/keeper/registry1_3_synchronizer_test.go: `synchronizer.HandleLog(ctx, logBroadcast)`
$DIR/core/services/keeper/registry1_3_synchronizer_test.go: `cltest.WaitForCount(t, db, "upkeep_registrations", 2)`
$DIR/core/services/keeper/registry1_3_synchronizer_test.go: `head = cltest.MustInsertHead(t, db, 2)`
$DIR/core/services/keeper/registry1_3_synchronizer_test.go: `rawLog = types.Log{BlockHash: head.Hash}`
$DIR/core/services/keeper/registry1_3_synchronizer_test.go: `logBroadcast = logmocks.NewBroadcast(t)`
$DIR/core/services/keeper/registry1_3_synchronizer_test.go: `logBroadcast.On("DecodedLog").Return(&unpausedlog)`
$DIR/core/services/keeper/registry1_3_synchronizer_test.go: `logBroadcast.On("RawLog").Return(rawLog)`
$DIR/core/services/keeper/registry1_3_synchronizer_test.go: `logBroadcast.On("String").Maybe().Return("")`
$DIR/core/services/keeper/registry1_3_synchronizer_test.go: `lb.On("MarkConsumed", mock.Anything, mock.Anything, mock.Anything).Return(nil)`
$DIR/core/services/keeper/registry1_3_synchronizer_test.go: `lb.On("WasAlreadyConsumed", mock.Anything, mock.Anything).Return(false, nil)`
$DIR/core/services/keeper/registry1_3_synchronizer_test.go: `synchronizer.HandleLog(ctx, logBroadcast)`
$DIR/core/services/keeper/registry1_3_synchronizer_test.go: `cltest.WaitForCount(t, db, "upkeep_registrations", 3)`
$DIR/core/services/keeper/registry1_3_synchronizer_test.go: `err = db.Get(®istryId, `SELECT id from keeper_registries WHERE job_id = $1`, job.ID)`
$DIR/core/services/keeper/registry1_3_synchronizer_test.go: `mockRegistry1_3(
t,
ethMock,
contractAddress,
registryConfig1_3,
[]*big.Int{upkeepId}, // Upkeep IDs
[]common.Address{fromAddress},
upkeepConfig1_3,
1,
2,
1)`
$DIR/core/services/keeper/registry1_3_synchronizer_test.go: `servicetest.Run(t, synchronizer)`
$DIR/core/services/keeper/registry1_3_synchronizer_test.go: `cltest.WaitForCount(t, db, "keeper_registries", 1)`
$DIR/core/services/keeper/registry1_3_synchronizer_test.go: `cltest.WaitForCount(t, db, "upkeep_registrations", 1)`
$DIR/core/services/keeper/registry1_3_synchronizer_test.go: `_ = logmocks.NewBroadcast(t)`
$DIR/core/services/keeper/registry1_3_synchronizer_test.go: `newConfig.CheckData = newCheckData`
$DIR/core/services/keeper/registry1_3_synchronizer_test.go: `registryMock.MockResponse("getUpkeep", newConfig).Once()`
$DIR/core/services/keeper/registry1_3_synchronizer_test.go: `logBroadcast.On("DecodedLog").Return(&updatedLog)`
$DIR/core/services/keeper/registry1_3_synchronizer_test.go: `logBroadcast.On("RawLog").Return(rawLog)`
$DIR/core/services/keeper/registry1_3_synchronizer_test.go: `logBroadcast.On("String").Maybe().Return("")`
$DIR/core/services/keeper/registry1_3_synchronizer_test.go: `lb.On("MarkConsumed", mock.Anything, mock.Anything, mock.Anything).Return(nil)`
$DIR/core/services/keeper/registry1_3_synchronizer_test.go: `lb.On("WasAlreadyConsumed", mock.Anything, mock.Anything).Return(false, nil)`
$DIR/core/services/keeper/registry1_3_synchronizer_test.go: `synchronizer.HandleLog(ctx, logBroadcast)`
$DIR/core/services/keeper/registry1_3_synchronizer_test.go: `.NewSqlxDB(t)`
$DIR/core/services/keeper/registry1_3_synchronizer_test.go: `.NewORM(db, logger.TestLogger(t))`
$DIR/core/services/keeper/registry1_3_synchronizer_test.go: `.TestLogger(t)`
$DIR/core/services/keeper/registry1_3_synchronizer_test.go: `.NewEthClientMockWithDefaultChain(t)`
$DIR/core/services/keeper/registry1_3_synchronizer_test.go: `.MustInsertKeeperJob(t, db, korm, cltest.NewEIP55Address(), cltest.NewEIP55Address())`
$DIR/core/services/keeper/registry1_3_synchronizer_test.go: `.NewEIP55Address()`
$DIR/core/services/keeper/registry1_3_synchronizer_test.go: `.NewEIP55Address()`
$DIR/core/services/keeper/registry1_3_synchronizer_test.go: `.KeeperSpec.ContractAddress.Address()`
$DIR/core/services/keeper/registry1_3_synchronizer_test.go: `.NewContractMockReceiver(t, ethClient, keeper.Registry1_1ABI, contractAddress)`
$DIR/core/services/keeper/registry1_3_synchronizer_test.go: `.MockResponse("typeAndVersion", "KeeperRegistry 1.3.0")`
$DIR/core/services/keeper/registry1_3_synchronizer_test.go: `.Once()`
$DIR/core/services/keeper/registry1_3_synchronizer_test.go: `.NewRegistryWrapper(j.KeeperSpec.ContractAddress, ethClient)`
$DIR/core/services/keeper/registry1_3_synchronizer_test.go: `.GetLogListenerOpts(1, nil)`
$DIR/core/services/keeper/registry1_3_synchronizer_test.go: `.Topic()`
$DIR/core/services/keeper/registry1_3_synchronizer_test.go: `.KeeperSpec.ContractAddress.Address()`
$DIR/core/services/keeper/registry1_3_synchronizer_test.go: `.KeeperSpec.FromAddress.Address()`
$DIR/core/services/keeper/registry1_3_synchronizer_test.go: `.Start(testutils.Context(t))`
$DIR/core/services/keeper/registry1_3_synchronizer_test.go: `.Context(t)`
$DIR/core/services/keeper/registry1_3_synchronizer_test.go: `.WaitForCount(t, db, "keeper_registries", 1)`
$DIR/core/services/keeper/registry1_3_synchronizer_test.go: `.Start(testutils.Context(t))`
$DIR/core/services/keeper/registry1_3_synchronizer_test.go: `.Context(t)`
$DIR/core/services/keeper/registry1_3_synchronizer_test.go: `.Context(t)`
$DIR/core/services/keeper/registry1_3_synchronizer_test.go: `.NewWithT(t)`
$DIR/core/services/keeper/registry1_3_synchronizer_test.go: `.KeeperSpec.ContractAddress.Address()`
$DIR/core/services/keeper/registry1_3_synchronizer_test.go: `.KeeperSpec.FromAddress.Address()`
$DIR/core/services/keeper/registry1_3_synchronizer_test.go: `.NewInt(3)`
$DIR/core/services/keeper/registry1_3_synchronizer_test.go: `.NewInt(69)`
$DIR/core/services/keeper/registry1_3_synchronizer_test.go: `.NewInt(420)`
$DIR/core/services/keeper/registry1_3_synchronizer_test.go: `.ExportedFullSync(ctx)`
$DIR/core/services/keeper/registry1_3_synchronizer_test.go: `.AssertCount(t, db, "keeper_registries", 1)`
$DIR/core/services/keeper/registry1_3_synchronizer_test.go: `.AssertCount(t, db, "upkeep_registrations", 3)`
$DIR/core/services/keeper/registry1_3_synchronizer_test.go: `.Eventually(func() bool {
var upkeep keeper.UpkeepRegistration
err := db.Get(&upkeep, `SELECT * FROM upkeep_registrations`)
require.NoError(t, err)
return upkeep.LastKeeperIndex.Valid
}, testutils.WaitTimeout(t), cltest.DBPollingInterval)`
$DIR/core/services/keeper/registry1_3_synchronizer_test.go: `.Get(&upkeep, `SELECT * FROM upkeep_registrations`)`
$DIR/core/services/keeper/registry1_3_synchronizer_test.go: `.WaitTimeout(t)`
$DIR/core/services/keeper/registry1_3_synchronizer_test.go: `.Should(gomega.Equal(true))`
$DIR/core/services/keeper/registry1_3_synchronizer_test.go: `.Equal(true)`
$DIR/core/services/keeper/registry1_3_synchronizer_test.go: `.Eventually(func() int64 {
var upkeep keeper.UpkeepRegistration
err := db.Get(&upkeep, `SELECT * FROM upkeep_registrations`)
require.NoError(t, err)
return upkeep.LastKeeperIndex.Int64
}, testutils.WaitTimeout(t), cltest.DBPollingInterval)`
$DIR/core/services/keeper/registry1_3_synchronizer_test.go: `.Get(&upkeep, `SELECT * FROM upkeep_registrations`)`
$DIR/core/services/keeper/registry1_3_synchronizer_test.go: `.WaitTimeout(t)`
$DIR/core/services/keeper/registry1_3_synchronizer_test.go: `.Should(gomega.Equal(int64(0)))`
$DIR/core/services/keeper/registry1_3_synchronizer_test.go: `.Equal(int64(0))`
$DIR/core/services/keeper/registry1_3_synchronizer_test.go: `.NewInt(69)`
$DIR/core/services/keeper/registry1_3_synchronizer_test.go: `.NewInt(420)`
$DIR/core/services/keeper/registry1_3_synchronizer_test.go: `.NewInt(2022)`
$DIR/core/services/keeper/registry1_3_synchronizer_test.go: `.ExportedFullSync(ctx)`
$DIR/core/services/keeper/registry1_3_synchronizer_test.go: `.AssertCount(t, db, "keeper_registries", 1)`
$DIR/core/services/keeper/registry1_3_synchronizer_test.go: `.AssertCount(t, db, "upkeep_registrations", 3)`
$DIR/core/services/keeper/registry1_3_synchronizer_test.go: `.Context(t)`
$DIR/core/services/keeper/registry1_3_synchronizer_test.go: `.KeeperSpec.ContractAddress.Address()`
$DIR/core/services/keeper/registry1_3_synchronizer_test.go: `.KeeperSpec.FromAddress.Address()`
$DIR/core/services/keeper/registry1_3_synchronizer_test.go: `.Run(t, synchronizer)`
$DIR/core/services/keeper/registry1_3_synchronizer_test.go: `.WaitForCount(t, db, "keeper_registries", 1)`
$DIR/core/services/keeper/registry1_3_synchronizer_test.go: `.NewContractMockReceiver(t, ethMock, keeper.Registry1_3ABI, contractAddress)`
$DIR/core/services/keeper/registry1_3_synchronizer_test.go: `.NewInt(40)`
$DIR/core/services/keeper/registry1_3_synchronizer_test.go: `.MockResponse("getState", registry1_3.GetState{
State: registryState1_3,
Config: newConfig,
Keepers: []common.Address{fromAddress},
})`
$DIR/core/services/keeper/registry1_3_synchronizer_test.go: `.Once()`
$DIR/core/services/keeper/registry1_3_synchronizer_test.go: `.MustInsertHead(t, db, 1)`
$DIR/core/services/keeper/registry1_3_synchronizer_test.go: `.NewBroadcast(t)`
$DIR/core/services/keeper/registry1_3_synchronizer_test.go: `.On("DecodedLog")`
$DIR/core/services/keeper/registry1_3_synchronizer_test.go: `.Return(&log)`
$DIR/core/services/keeper/registry1_3_synchronizer_test.go: `.On("RawLog")`
$DIR/core/services/keeper/registry1_3_synchronizer_test.go: `.Return(rawLog)`
$DIR/core/services/keeper/registry1_3_synchronizer_test.go: `.On("String")`
$DIR/core/services/keeper/registry1_3_synchronizer_test.go: `.Maybe()`
$DIR/core/services/keeper/registry1_3_synchronizer_test.go: `.Return("")`
$DIR/core/services/keeper/registry1_3_synchronizer_test.go: `.On("MarkConsumed", mock.Anything, mock.Anything, mock.Anything)`
$DIR/core/services/keeper/registry1_3_synchronizer_test.go: `.Return(nil)`
$DIR/core/services/keeper/registry1_3_synchronizer_test.go: `.On("WasAlreadyConsumed", mock.Anything, mock.Anything)`
$DIR/core/services/keeper/registry1_3_synchronizer_test.go: `.Return(false, nil)`
$DIR/core/services/keeper/registry1_3_synchronizer_test.go: `.HandleLog(ctx, logBroadcast)`
$DIR/core/services/keeper/registry1_3_synchronizer_test.go: `.AssertRecordEventually(t, db, ®istry, fmt.Sprintf(`SELECT * FROM keeper_registries WHERE id = %d`, registry.ID), func() bool {
return registry.BlockCountPerTurn == 40
})`
$DIR/core/services/keeper/registry1_3_synchronizer_test.go: `.Sprintf(`SELECT * FROM keeper_registries WHERE id = %d`, registry.ID)`
$DIR/core/services/keeper/registry1_3_synchronizer_test.go: `.Context(t)`
$DIR/core/services/keeper/registry1_3_synchronizer_test.go: `.KeeperSpec.ContractAddress.Address()`
$DIR/core/services/keeper/registry1_3_synchronizer_test.go: `.KeeperSpec.FromAddress.Address()`
$DIR/core/services/keeper/registry1_3_synchronizer_test.go: `.Run(t, synchronizer)`
$DIR/core/services/keeper/registry1_3_synchronizer_test.go: `.WaitForCount(t, db, "keeper_registries", 1)`
$DIR/core/services/keeper/registry1_3_synchronizer_test.go: `.NewAddress()`
$DIR/core/services/keeper/registry1_3_synchronizer_test.go: `.NewContractMockReceiver(t, ethMock, keeper.Registry1_3ABI, contractAddress)`
$DIR/core/services/keeper/registry1_3_synchronizer_test.go: `.MockResponse("getState", registry1_3.GetState{
State: registryState1_3,
Config: registryConfig1_3,
Keepers: addresses,
})`
$DIR/core/services/keeper/registry1_3_synchronizer_test.go: `.Once()`
$DIR/core/services/keeper/registry1_3_synchronizer_test.go: `.MustInsertHead(t, db, 1)`
$DIR/core/services/keeper/registry1_3_synchronizer_test.go: `.NewBroadcast(t)`
$DIR/core/services/keeper/registry1_3_synchronizer_test.go: `.On("DecodedLog")`
$DIR/core/services/keeper/registry1_3_synchronizer_test.go: `.Return(&log)`
$DIR/core/services/keeper/registry1_3_synchronizer_test.go: `.On("RawLog")`
$DIR/core/services/keeper/registry1_3_synchronizer_test.go: `.Return(rawLog)`
$DIR/core/services/keeper/registry1_3_synchronizer_test.go: `.On("String")`
$DIR/core/services/keeper/registry1_3_synchronizer_test.go: `.Maybe()`
$DIR/core/services/keeper/registry1_3_synchronizer_test.go: `.Return("")`
$DIR/core/services/keeper/registry1_3_synchronizer_test.go: `.On("MarkConsumed", mock.Anything, mock.Anything, mock.Anything)`
$DIR/core/services/keeper/registry1_3_synchronizer_test.go: `.Return(nil)`
$DIR/core/services/keeper/registry1_3_synchronizer_test.go: `.On("WasAlreadyConsumed", mock.Anything, mock.Anything)`
$DIR/core/services/keeper/registry1_3_synchronizer_test.go: `.Return(false, nil)`
$DIR/core/services/keeper/registry1_3_synchronizer_test.go: `.HandleLog(ctx, logBroadcast)`
$DIR/core/services/keeper/registry1_3_synchronizer_test.go: `.AssertRecordEventually(t, db, ®istry, fmt.Sprintf(`SELECT * FROM keeper_registries WHERE id = %d`, registry.ID), func() bool {
return registry.NumKeepers == 2
})`
$DIR/core/services/keeper/registry1_3_synchronizer_test.go: `.Sprintf(`SELECT * FROM keeper_registries WHERE id = %d`, registry.ID)`
$DIR/core/services/keeper/registry1_3_synchronizer_test.go: `.Context(t)`
$DIR/core/services/keeper/registry1_3_synchronizer_test.go: `.KeeperSpec.ContractAddress.Address()`
$DIR/core/services/keeper/registry1_3_synchronizer_test.go: `.KeeperSpec.FromAddress.Address()`
$DIR/core/services/keeper/registry1_3_synchronizer_test.go: `.NewInt(3)`
$DIR/core/services/keeper/registry1_3_synchronizer_test.go: `.NewInt(69)`
$DIR/core/services/keeper/registry1_3_synchronizer_test.go: `.NewInt(420)`
$DIR/core/services/keeper/registry1_3_synchronizer_test.go: `.Run(t, synchronizer)`
$DIR/core/services/keeper/registry1_3_synchronizer_test.go: `.WaitForCount(t, db, "keeper_registries", 1)`
$DIR/core/services/keeper/registry1_3_synchronizer_test.go: `.WaitForCount(t, db, "upkeep_registrations", 3)`
$DIR/core/services/keeper/registry1_3_synchronizer_test.go: `.MustInsertHead(t, db, 1)`
$DIR/core/services/keeper/registry1_3_synchronizer_test.go: `.NewInt(3)`
$DIR/core/services/keeper/registry1_3_synchronizer_test.go: `.NewBroadcast(t)`
$DIR/core/services/keeper/registry1_3_synchronizer_test.go: `.On("DecodedLog")`
$DIR/core/services/keeper/registry1_3_synchronizer_test.go: `.Return(&log)`
$DIR/core/services/keeper/registry1_3_synchronizer_test.go: `.On("RawLog")`
$DIR/core/services/keeper/registry1_3_synchronizer_test.go: `.Return(rawLog)`
$DIR/core/services/keeper/registry1_3_synchronizer_test.go: `.On("String")`
$DIR/core/services/keeper/registry1_3_synchronizer_test.go: `.Maybe()`
$DIR/core/services/keeper/registry1_3_synchronizer_test.go: `.Return("")`
$DIR/core/services/keeper/registry1_3_synchronizer_test.go: `.On("MarkConsumed", mock.Anything, mock.Anything, mock.Anything)`
$DIR/core/services/keeper/registry1_3_synchronizer_test.go: `.Return(nil)`
$DIR/core/services/keeper/registry1_3_synchronizer_test.go: `.On("WasAlreadyConsumed", mock.Anything, mock.Anything)`
$DIR/core/services/keeper/registry1_3_synchronizer_test.go: `.Return(false, nil)`
$DIR/core/services/keeper/registry1_3_synchronizer_test.go: `.HandleLog(ctx, logBroadcast)`
$DIR/core/services/keeper/registry1_3_synchronizer_test.go: `.Context(t)`
$DIR/core/services/keeper/registry1_3_synchronizer_test.go: `.KeeperSpec.ContractAddress.Address()`
$DIR/core/services/keeper/registry1_3_synchronizer_test.go: `.KeeperSpec.FromAddress.Address()`
$DIR/core/services/keeper/registry1_3_synchronizer_test.go: `.NewInt(3)`
$DIR/core/services/keeper/registry1_3_synchronizer_test.go: `.Run(t, synchronizer)`
$DIR/core/services/keeper/registry1_3_synchronizer_test.go: `.WaitForCount(t, db, "keeper_registries", 1)`
$DIR/core/services/keeper/registry1_3_synchronizer_test.go: `.WaitForCount(t, db, "upkeep_registrations", 1)`
$DIR/core/services/keeper/registry1_3_synchronizer_test.go: `.NewContractMockReceiver(t, ethMock, keeper.Registry1_3ABI, contractAddress)`
$DIR/core/services/keeper/registry1_3_synchronizer_test.go: `.MockResponse("getUpkeep", upkeepConfig1_3)`
$DIR/core/services/keeper/registry1_3_synchronizer_test.go: `.Once()`
$DIR/core/services/keeper/registry1_3_synchronizer_test.go: `.MustInsertHead(t, db, 1)`
$DIR/core/services/keeper/registry1_3_synchronizer_test.go: `.NewInt(420)`
$DIR/core/services/keeper/registry1_3_synchronizer_test.go: `.NewBroadcast(t)`
$DIR/core/services/keeper/registry1_3_synchronizer_test.go: `.On("DecodedLog")`
$DIR/core/services/keeper/registry1_3_synchronizer_test.go: `.Return(&log)`
$DIR/core/services/keeper/registry1_3_synchronizer_test.go: `.On("RawLog")`
$DIR/core/services/keeper/registry1_3_synchronizer_test.go: `.Return(rawLog)`
$DIR/core/services/keeper/registry1_3_synchronizer_test.go: `.On("String")`
$DIR/core/services/keeper/registry1_3_synchronizer_test.go: `.Maybe()`
$DIR/core/services/keeper/registry1_3_synchronizer_test.go: `.Return("")`
$DIR/core/services/keeper/registry1_3_synchronizer_test.go: `.On("MarkConsumed", mock.Anything, mock.Anything, mock.Anything)`
$DIR/core/services/keeper/registry1_3_synchronizer_test.go: `.Return(nil)`
$DIR/core/services/keeper/registry1_3_synchronizer_test.go: `.On("WasAlreadyConsumed", mock.Anything, mock.Anything)`
$DIR/core/services/keeper/registry1_3_synchronizer_test.go: `.Return(false, nil)`
$DIR/core/services/keeper/registry1_3_synchronizer_test.go: `.HandleLog(ctx, logBroadcast)`
$DIR/core/services/keeper/registry1_3_synchronizer_test.go: `.Context(t)`
$DIR/core/services/keeper/registry1_3_synchronizer_test.go: `.NewWithT(t)`
$DIR/core/services/keeper/registry1_3_synchronizer_test.go: `.KeeperSpec.ContractAddress.Address()`
$DIR/core/services/keeper/registry1_3_synchronizer_test.go: `.KeeperSpec.FromAddress.Address()`
$DIR/core/services/keeper/registry1_3_synchronizer_test.go: `.NewInt(3)`
$DIR/core/services/keeper/registry1_3_synchronizer_test.go: `.Run(t, synchronizer)`
$DIR/core/services/keeper/registry1_3_synchronizer_test.go: `.WaitForCount(t, db, "keeper_registries", 1)`
$DIR/core/services/keeper/registry1_3_synchronizer_test.go: `.WaitForCount(t, db, "upkeep_registrations", 1)`
$DIR/core/services/keeper/registry1_3_synchronizer_test.go: `.MustExec(t, db, `UPDATE upkeep_registrations SET last_run_block_height = 100`)`
$DIR/core/services/keeper/registry1_3_synchronizer_test.go: `.MustInsertHead(t, db, 1)`
$DIR/core/services/keeper/registry1_3_synchronizer_test.go: `.NewInt(3)`
$DIR/core/services/keeper/registry1_3_synchronizer_test.go: `.NewBroadcast(t)`
$DIR/core/services/keeper/registry1_3_synchronizer_test.go: `.On("DecodedLog")`
$DIR/core/services/keeper/registry1_3_synchronizer_test.go: `.Return(&log)`
$DIR/core/services/keeper/registry1_3_synchronizer_test.go: `.On("RawLog")`
$DIR/core/services/keeper/registry1_3_synchronizer_test.go: `.Return(rawLog)`
$DIR/core/services/keeper/registry1_3_synchronizer_test.go: `.On("String")`
$DIR/core/services/keeper/registry1_3_synchronizer_test.go: `.Maybe()`
$DIR/core/services/keeper/registry1_3_synchronizer_test.go: `.Return("")`
$DIR/core/services/keeper/registry1_3_synchronizer_test.go: `.On("MarkConsumed", mock.Anything, mock.Anything, mock.Anything)`
$DIR/core/services/keeper/registry1_3_synchronizer_test.go: `.Return(nil)`
$DIR/core/services/keeper/registry1_3_synchronizer_test.go: `.On("WasAlreadyConsumed", mock.Anything, mock.Anything)`
$DIR/core/services/keeper/registry1_3_synchronizer_test.go: `.Return(false, nil)`
$DIR/core/services/keeper/registry1_3_synchronizer_test.go: `.HandleLog(ctx, logBroadcast)`
$DIR/core/services/keeper/registry1_3_synchronizer_test.go: `.Eventually(func() int64 {
var upkeep keeper.UpkeepRegistration
err := db.Get(&upkeep, `SELECT * FROM upkeep_registrations`)
require.NoError(t, err)
return upkeep.LastRunBlockHeight
}, testutils.WaitTimeout(t), cltest.DBPollingInterval)`
$DIR/core/services/keeper/registry1_3_synchronizer_test.go: `.Get(&upkeep, `SELECT * FROM upkeep_registrations`)`
$DIR/core/services/keeper/registry1_3_synchronizer_test.go: `.WaitTimeout(t)`
$DIR/core/services/keeper/registry1_3_synchronizer_test.go: `.Should(gomega.Equal(int64(200)))`
$DIR/core/services/keeper/registry1_3_synchronizer_test.go: `.Equal(int64(200))`
$DIR/core/services/keeper/registry1_3_synchronizer_test.go: `.Eventually(func() int64 {
var upkeep keeper.UpkeepRegistration
err := db.Get(&upkeep, `SELECT * FROM upkeep_registrations`)
require.NoError(t, err)
return upkeep.LastKeeperIndex.Int64
}, testutils.WaitTimeout(t), cltest.DBPollingInterval)`
$DIR/core/services/keeper/registry1_3_synchronizer_test.go: `.Get(&upkeep, `SELECT * FROM upkeep_registrations`)`
$DIR/core/services/keeper/registry1_3_synchronizer_test.go: `.WaitTimeout(t)`
$DIR/core/services/keeper/registry1_3_synchronizer_test.go: `.Equal(int64(0))`
$DIR/core/services/keeper/registry1_3_synchronizer_test.go: `.Context(t)`
$DIR/core/services/keeper/registry1_3_synchronizer_test.go: `.NewWithT(t)`
$DIR/core/services/keeper/registry1_3_synchronizer_test.go: `.KeeperSpec.ContractAddress.Address()`
$DIR/core/services/keeper/registry1_3_synchronizer_test.go: `.KeeperSpec.FromAddress.Address()`
$DIR/core/services/keeper/registry1_3_synchronizer_test.go: `.NewInt(3)`
$DIR/core/services/keeper/registry1_3_synchronizer_test.go: `.Run(t, synchronizer)`
$DIR/core/services/keeper/registry1_3_synchronizer_test.go: `.WaitForCount(t, db, "keeper_registries", 1)`
$DIR/core/services/keeper/registry1_3_synchronizer_test.go: `.WaitForCount(t, db, "upkeep_registrations", 1)`
$DIR/core/services/keeper/registry1_3_synchronizer_test.go: `.Get(&upkeep, `SELECT * FROM upkeep_registrations`)`
$DIR/core/services/keeper/registry1_3_synchronizer_test.go: `.Eventually(getExecuteGas, testutils.WaitTimeout(t), cltest.DBPollingInterval)`
$DIR/core/services/keeper/registry1_3_synchronizer_test.go: `.WaitTimeout(t)`
$DIR/core/services/keeper/registry1_3_synchronizer_test.go: `.Should(gomega.Equal(uint32(2_000_000)))`
$DIR/core/services/keeper/registry1_3_synchronizer_test.go: `.Equal(uint32(2_000_000))`
$DIR/core/services/keeper/registry1_3_synchronizer_test.go: `.NewContractMockReceiver(t, ethMock, keeper.Registry1_3ABI, contractAddress)`
$DIR/core/services/keeper/registry1_3_synchronizer_test.go: `.MockResponse("getUpkeep", newConfig)`
$DIR/core/services/keeper/registry1_3_synchronizer_test.go: `.Once()`
$DIR/core/services/keeper/registry1_3_synchronizer_test.go: `.MustInsertHead(t, db, 1)`
$DIR/core/services/keeper/registry1_3_synchronizer_test.go: `.NewInt(3)`
$DIR/core/services/keeper/registry1_3_synchronizer_test.go: `.NewInt(4_000_000)`
$DIR/core/services/keeper/registry1_3_synchronizer_test.go: `.NewBroadcast(t)`
$DIR/core/services/keeper/registry1_3_synchronizer_test.go: `.On("DecodedLog")`
$DIR/core/services/keeper/registry1_3_synchronizer_test.go: `.Return(&log)`
$DIR/core/services/keeper/registry1_3_synchronizer_test.go: `.On("RawLog")`
$DIR/core/services/keeper/registry1_3_synchronizer_test.go: `.Return(rawLog)`
$DIR/core/services/keeper/registry1_3_synchronizer_test.go: `.On("String")`
$DIR/core/services/keeper/registry1_3_synchronizer_test.go: `.Maybe()`
$DIR/core/services/keeper/registry1_3_synchronizer_test.go: `.Return("")`
$DIR/core/services/keeper/registry1_3_synchronizer_test.go: `.On("MarkConsumed", mock.Anything, mock.Anything, mock.Anything)`
$DIR/core/services/keeper/registry1_3_synchronizer_test.go: `.Return(nil)`
$DIR/core/services/keeper/registry1_3_synchronizer_test.go: `.On("WasAlreadyConsumed", mock.Anything, mock.Anything)`
$DIR/core/services/keeper/registry1_3_synchronizer_test.go: `.Return(false, nil)`
$DIR/core/services/keeper/registry1_3_synchronizer_test.go: `.HandleLog(ctx, logBroadcast)`
$DIR/core/services/keeper/registry1_3_synchronizer_test.go: `.Eventually(getExecuteGas, testutils.WaitTimeout(t), cltest.DBPollingInterval)`
$DIR/core/services/keeper/registry1_3_synchronizer_test.go: `.WaitTimeout(t)`
$DIR/core/services/keeper/registry1_3_synchronizer_test.go: `.Equal(uint32(4_000_000))`
$DIR/core/services/keeper/registry1_3_synchronizer_test.go: `.Context(t)`
$DIR/core/services/keeper/registry1_3_synchronizer_test.go: `.KeeperSpec.ContractAddress.Address()`
$DIR/core/services/keeper/registry1_3_synchronizer_test.go: `.KeeperSpec.FromAddress.Address()`
$DIR/core/services/keeper/registry1_3_synchronizer_test.go: `.NewInt(3)`
$DIR/core/services/keeper/registry1_3_synchronizer_test.go: `.Run(t, synchronizer)`
$DIR/core/services/keeper/registry1_3_synchronizer_test.go: `.WaitForCount(t, db, "keeper_registries", 1)`
$DIR/core/services/keeper/registry1_3_synchronizer_test.go: `.WaitForCount(t, db, "upkeep_registrations", 1)`
$DIR/core/services/keeper/registry1_3_synchronizer_test.go: `.NewContractMockReceiver(t, ethMock, keeper.Registry1_3ABI, contractAddress)`
$DIR/core/services/keeper/registry1_3_synchronizer_test.go: `.MockResponse("getUpkeep", upkeepConfig1_3)`
$DIR/core/services/keeper/registry1_3_synchronizer_test.go: `.Once()`
$DIR/core/services/keeper/registry1_3_synchronizer_test.go: `.MustInsertHead(t, db, 1)`
$DIR/core/services/keeper/registry1_3_synchronizer_test.go: `.NewInt(420)`
$DIR/core/services/keeper/registry1_3_synchronizer_test.go: `.NewBroadcast(t)`
$DIR/core/services/keeper/registry1_3_synchronizer_test.go: `.On("DecodedLog")`
$DIR/core/services/keeper/registry1_3_synchronizer_test.go: `.Return(&log)`
$DIR/core/services/keeper/registry1_3_synchronizer_test.go: `.On("RawLog")`
$DIR/core/services/keeper/registry1_3_synchronizer_test.go: `.Return(rawLog)`
$DIR/core/services/keeper/registry1_3_synchronizer_test.go: `.On("String")`
$DIR/core/services/keeper/registry1_3_synchronizer_test.go: `.Maybe()`
$DIR/core/services/keeper/registry1_3_synchronizer_test.go: `.Return("")`
$DIR/core/services/keeper/registry1_3_synchronizer_test.go: `.On("MarkConsumed", mock.Anything, mock.Anything, mock.Anything)`
$DIR/core/services/keeper/registry1_3_synchronizer_test.go: `.Return(nil)`
$DIR/core/services/keeper/registry1_3_synchronizer_test.go: `.On("WasAlreadyConsumed", mock.Anything, mock.Anything)`
$DIR/core/services/keeper/registry1_3_synchronizer_test.go: `.Return(false, nil)`
$DIR/core/services/keeper/registry1_3_synchronizer_test.go: `.HandleLog(ctx, logBroadcast)`
$DIR/core/services/keeper/registry1_3_synchronizer_test.go: `.Context(t)`
$DIR/core/services/keeper/registry1_3_synchronizer_test.go: `.KeeperSpec.ContractAddress.Address()`
$DIR/core/services/keeper/registry1_3_synchronizer_test.go: `.KeeperSpec.FromAddress.Address()`
$DIR/core/services/keeper/registry1_3_synchronizer_test.go: `.NewInt(3)`
$DIR/core/services/keeper/registry1_3_synchronizer_test.go: `.NewInt(69)`
$DIR/core/services/keeper/registry1_3_synchronizer_test.go: `.NewInt(420)`
$DIR/core/services/keeper/registry1_3_synchronizer_test.go: `.Run(t, synchronizer)`
$DIR/core/services/keeper/registry1_3_synchronizer_test.go: `.WaitForCount(t, db, "keeper_registries", 1)`
$DIR/core/services/keeper/registry1_3_synchronizer_test.go: `.WaitForCount(t, db, "upkeep_registrations", 3)`
$DIR/core/services/keeper/registry1_3_synchronizer_test.go: `.MustInsertHead(t, db, 1)`
$DIR/core/services/keeper/registry1_3_synchronizer_test.go: `.NewInt(3)`
$DIR/core/services/keeper/registry1_3_synchronizer_test.go: `.NewBroadcast(t)`
$DIR/core/services/keeper/registry1_3_synchronizer_test.go: `.On("DecodedLog")`
$DIR/core/services/keeper/registry1_3_synchronizer_test.go: `.Return(&log)`
$DIR/core/services/keeper/registry1_3_synchronizer_test.go: `.On("RawLog")`
$DIR/core/services/keeper/registry1_3_synchronizer_test.go: `.Return(rawLog)`
$DIR/core/services/keeper/registry1_3_synchronizer_test.go: `.On("String")`
$DIR/core/services/keeper/registry1_3_synchronizer_test.go: `.Maybe()`
$DIR/core/services/keeper/registry1_3_synchronizer_test.go: `.Return("")`
$DIR/core/services/keeper/registry1_3_synchronizer_test.go: `.On("MarkConsumed", mock.Anything, mock.Anything, mock.Anything)`
$DIR/core/services/keeper/registry1_3_synchronizer_test.go: `.Return(nil)`
$DIR/core/services/keeper/registry1_3_synchronizer_test.go: `.On("WasAlreadyConsumed", mock.Anything, mock.Anything)`
$DIR/core/services/keeper/registry1_3_synchronizer_test.go: `.Return(false, nil)`
$DIR/core/services/keeper/registry1_3_synchronizer_test.go: `.HandleLog(ctx, logBroadcast)`
$DIR/core/services/keeper/registry1_3_synchronizer_test.go: `.Context(t)`
$DIR/core/services/keeper/registry1_3_synchronizer_test.go: `.KeeperSpec.ContractAddress.Address()`
$DIR/core/services/keeper/registry1_3_synchronizer_test.go: `.KeeperSpec.FromAddress.Address()`
$DIR/core/services/keeper/registry1_3_synchronizer_test.go: `.NewInt(3)`
$DIR/core/services/keeper/registry1_3_synchronizer_test.go: `.NewInt(3)`
$DIR/core/services/keeper/registry1_3_synchronizer_test.go: `.NewInt(69)`
$DIR/core/services/keeper/registry1_3_synchronizer_test.go: `.NewInt(420)`
$DIR/core/services/keeper/registry1_3_synchronizer_test.go: `.Run(t, synchronizer)`
$DIR/core/services/keeper/registry1_3_synchronizer_test.go: `.WaitForCount(t, db, "keeper_registries", 1)`
$DIR/core/services/keeper/registry1_3_synchronizer_test.go: `.WaitForCount(t, db, "upkeep_registrations", 3)`
$DIR/core/services/keeper/registry1_3_synchronizer_test.go: `.MustInsertHead(t, db, 1)`
$DIR/core/services/keeper/registry1_3_synchronizer_test.go: `.NewBroadcast(t)`
$DIR/core/services/keeper/registry1_3_synchronizer_test.go: `.On("DecodedLog")`
$DIR/core/services/keeper/registry1_3_synchronizer_test.go: `.Return(&log)`
$DIR/core/services/keeper/registry1_3_synchronizer_test.go: `.On("RawLog")`
$DIR/core/services/keeper/registry1_3_synchronizer_test.go: `.Return(rawLog)`
$DIR/core/services/keeper/registry1_3_synchronizer_test.go: `.On("String")`
$DIR/core/services/keeper/registry1_3_synchronizer_test.go: `.Maybe()`
$DIR/core/services/keeper/registry1_3_synchronizer_test.go: `.Return("")`
$DIR/core/services/keeper/registry1_3_synchronizer_test.go: `.On("MarkConsumed", mock.Anything, mock.Anything, mock.Anything)`
$DIR/core/services/keeper/registry1_3_synchronizer_test.go: `.Return(nil)`
$DIR/core/services/keeper/registry1_3_synchronizer_test.go: `.On("WasAlreadyConsumed", mock.Anything, mock.Anything)`
$DIR/core/services/keeper/registry1_3_synchronizer_test.go: `.Return(false, nil)`
$DIR/core/services/keeper/registry1_3_synchronizer_test.go: `.HandleLog(ctx, logBroadcast)`
$DIR/core/services/keeper/registry1_3_synchronizer_test.go: `.WaitForCount(t, db, "upkeep_registrations", 2)`
$DIR/core/services/keeper/registry1_3_synchronizer_test.go: `.MustInsertHead(t, db, 2)`
$DIR/core/services/keeper/registry1_3_synchronizer_test.go: `.NewBroadcast(t)`
$DIR/core/services/keeper/registry1_3_synchronizer_test.go: `.On("DecodedLog")`
$DIR/core/services/keeper/registry1_3_synchronizer_test.go: `.Return(&unpausedlog)`
$DIR/core/services/keeper/registry1_3_synchronizer_test.go: `.On("RawLog")`
$DIR/core/services/keeper/registry1_3_synchronizer_test.go: `.Return(rawLog)`
$DIR/core/services/keeper/registry1_3_synchronizer_test.go: `.On("String")`
$DIR/core/services/keeper/registry1_3_synchronizer_test.go: `.Maybe()`
$DIR/core/services/keeper/registry1_3_synchronizer_test.go: `.Return("")`
$DIR/core/services/keeper/registry1_3_synchronizer_test.go: `.On("MarkConsumed", mock.Anything, mock.Anything, mock.Anything)`
$DIR/core/services/keeper/registry1_3_synchronizer_test.go: `.Return(nil)`
$DIR/core/services/keeper/registry1_3_synchronizer_test.go: `.On("WasAlreadyConsumed", mock.Anything, mock.Anything)`
$DIR/core/services/keeper/registry1_3_synchronizer_test.go: `.Return(false, nil)`
$DIR/core/services/keeper/registry1_3_synchronizer_test.go: `.HandleLog(ctx, logBroadcast)`
$DIR/core/services/keeper/registry1_3_synchronizer_test.go: `.WaitForCount(t, db, "upkeep_registrations", 3)`
$DIR/core/services/keeper/registry1_3_synchronizer_test.go: `.Get(&upkeep, `SELECT * FROM upkeep_registrations WHERE upkeep_id = $1`, ubig.New(upkeepId))`
$DIR/core/services/keeper/registry1_3_synchronizer_test.go: `.New(upkeepId)`
$DIR/core/services/keeper/registry1_3_synchronizer_test.go: `.Get(®istryId, `SELECT id from keeper_registries WHERE job_id = $1`, job.ID)`
$DIR/core/services/keeper/registry1_3_synchronizer_test.go: `.Context(t)`
$DIR/core/services/keeper/registry1_3_synchronizer_test.go: `.NewWithT(t)`
$DIR/core/services/keeper/registry1_3_synchronizer_test.go: `.KeeperSpec.ContractAddress.Address()`
$DIR/core/services/keeper/registry1_3_synchronizer_test.go: `.KeeperSpec.FromAddress.Address()`
$DIR/core/services/keeper/registry1_3_synchronizer_test.go: `.NewInt(3)`
$DIR/core/services/keeper/registry1_3_synchronizer_test.go: `.Run(t, synchronizer)`
$DIR/core/services/keeper/registry1_3_synchronizer_test.go: `.WaitForCount(t, db, "keeper_registries", 1)`
$DIR/core/services/keeper/registry1_3_synchronizer_test.go: `.WaitForCount(t, db, "upkeep_registrations", 1)`
$DIR/core/services/keeper/registry1_3_synchronizer_test.go: `.MustInsertHead(t, db, 1)`
$DIR/core/services/keeper/registry1_3_synchronizer_test.go: `.NewBroadcast(t)`
$DIR/core/services/keeper/registry1_3_synchronizer_test.go: `.NewContractMockReceiver(t, ethMock, keeper.Registry1_3ABI, contractAddress)`
$DIR/core/services/keeper/registry1_3_synchronizer_test.go: `.MockResponse("getUpkeep", newConfig)`
$DIR/core/services/keeper/registry1_3_synchronizer_test.go: `.Once()`
$DIR/core/services/keeper/registry1_3_synchronizer_test.go: `.NewBroadcast(t)`
$DIR/core/services/keeper/registry1_3_synchronizer_test.go: `.On("DecodedLog")`
$DIR/core/services/keeper/registry1_3_synchronizer_test.go: `.Return(&updatedLog)`
$DIR/core/services/keeper/registry1_3_synchronizer_test.go: `.On("RawLog")`
$DIR/core/services/keeper/registry1_3_synchronizer_test.go: `.Return(rawLog)`
$DIR/core/services/keeper/registry1_3_synchronizer_test.go: `.On("String")`
$DIR/core/services/keeper/registry1_3_synchronizer_test.go: `.Maybe()`
$DIR/core/services/keeper/registry1_3_synchronizer_test.go: `.Return("")`
$DIR/core/services/keeper/registry1_3_synchronizer_test.go: `.On("MarkConsumed", mock.Anything, mock.Anything, mock.Anything)`
$DIR/core/services/keeper/registry1_3_synchronizer_test.go: `.Return(nil)`
$DIR/core/services/keeper/registry1_3_synchronizer_test.go: `.On("WasAlreadyConsumed", mock.Anything, mock.Anything)`
$DIR/core/services/keeper/registry1_3_synchronizer_test.go: `.Return(false, nil)`
$DIR/core/services/keeper/registry1_3_synchronizer_test.go: `.HandleLog(ctx, logBroadcast)`
$DIR/core/services/keeper/registry1_3_synchronizer_test.go: `.Eventually(func() []byte {
var upkeep keeper.UpkeepRegistration
err := db.Get(&upkeep, `SELECT * FROM upkeep_registrations WHERE upkeep_id = $1`, ubig.New(upkeepId))
require.NoError(t, err)
return upkeep.CheckData
}, testutils.WaitTimeout(t), cltest.DBPollingInterval)`
$DIR/core/services/keeper/registry1_3_synchronizer_test.go: `.Get(&upkeep, `SELECT * FROM upkeep_registrations WHERE upkeep_id = $1`, ubig.New(upkeepId))`
$DIR/core/services/keeper/registry1_3_synchronizer_test.go: `.New(upkeepId)`
$DIR/core/services/keeper/registry1_3_synchronizer_test.go: `.WaitTimeout(t)`
$DIR/core/services/keeper/registry1_3_synchronizer_test.go: `.Equal(newCheckData)`
$DIR/core/services/keeper/registry_synchronizer_sync_test.go: `count++`
$DIR/core/services/keeper/registry_synchronizer_sync_test.go: `synchronizer.syncUpkeepWithCallback(ctx, getter, registry, id, doneFunc)`
$DIR/core/services/keeper/registry_synchronizer_sync_test.go: `keys[field.Key] = true`
$DIR/core/services/keeper/registry_synchronizer_sync_test.go: `.Context(t)`
$DIR/core/services/keeper/registry_synchronizer_sync_test.go: `.TestLoggerObserved(t, zapcore.ErrorLevel)`
$DIR/core/services/keeper/registry_synchronizer_sync_test.go: `.EIP55Address(testutils.NewAddress().Hex())`
$DIR/core/services/keeper/registry_synchronizer_sync_test.go: `.NewAddress()`
$DIR/core/services/keeper/registry_synchronizer_sync_test.go: `.Hex()`
$DIR/core/services/keeper/registry_synchronizer_sync_test.go: `.SetString("5032485723458348569331745", 10)`
$DIR/core/services/keeper/registry_synchronizer_sync_test.go: `.New(o)`
$DIR/core/services/keeper/registry_synchronizer_sync_test.go: `.syncUpkeepWithCallback(ctx, getter, registry, id, doneFunc)`
$DIR/core/services/keeper/registry_synchronizer_sync_test.go: `.All()`
$DIR/core/services/keeper/upkeep_executer_test.go: `t.Run("runs upkeep on triggering block number", func(t *testing.T) {
db, config, ethMock, executer, registry, upkeep, job, jpv2, txm, _, _, _ := setup(t, mockEstimator(t),
func(c *chainlink.Config, s *chainlink.Secrets) {
c.EVM[0].ChainID = (*ubig.Big)(testutils.SimulatedChainID)
})
gasLimit := uint64(5_000_000 + config.Keeper().Registry().PerformGasOverhead())
ethTxCreated := cltest.NewAwaiter()
txm.On("CreateTransaction",
mock.Anything,
mock.MatchedBy(func(txRequest txmgr.TxRequest) bool { return txRequest.FeeLimit == gasLimit }),
).
Once().
Return(txmgr.Tx{
ID: 1,
}, nil).
Run(func(mock.Arguments) { ethTxCreated.ItHappened() })
registryMock := cltest.NewContractMockReceiver(t, ethMock, keeper.Registry1_1ABI, registry.ContractAddress.Address())
registryMock.MockMatchedResponse(
"checkUpkeep",
func(callArgs ethereum.CallMsg) bool {
return callArgs.GasPrice == nil &&
callArgs.Gas == 0
},
checkUpkeepResponse,
)
registryMock.MockMatchedResponse(
"performUpkeep",
func(callArgs ethereum.CallMsg) bool { return true },
checkPerformResponse,
)
head := newHead()
executer.OnNewLongestChain(testutils.Context(t), &head)
ethTxCreated.AwaitOrFail(t)
runs := cltest.WaitForPipelineComplete(t, 0, job.ID, 1, taskRuns, jpv2.Jrm, time.Second, 100*time.Millisecond)
require.Len(t, runs, 1)
assert.False(t, runs[0].HasErrors())
assert.False(t, runs[0].HasFatalErrors())
waitLastRunHeight(t, db, upkeep, 20)
})`
$DIR/core/services/keeper/upkeep_executer_test.go: `c.EVM[0].ChainID = (*ubig.Big)(testutils.SimulatedChainID)`
$DIR/core/services/keeper/upkeep_executer_test.go: `txm.On("CreateTransaction",
mock.Anything,
mock.MatchedBy(func(txRequest txmgr.TxRequest) bool { return txRequest.FeeLimit == gasLimit }),
).
Once().
Return(txmgr.Tx{
ID: 1,
}, nil).
Run(func(mock.Arguments) { ethTxCreated.ItHappened() })`
$DIR/core/services/keeper/upkeep_executer_test.go: `ethTxCreated.ItHappened()`
$DIR/core/services/keeper/upkeep_executer_test.go: `registryMock.MockMatchedResponse(
"checkUpkeep",
func(callArgs ethereum.CallMsg) bool {
return callArgs.GasPrice == nil &&
callArgs.Gas == 0
},
checkUpkeepResponse,
)`
$DIR/core/services/keeper/upkeep_executer_test.go: `registryMock.MockMatchedResponse(
"performUpkeep",
func(callArgs ethereum.CallMsg) bool { return true },
checkPerformResponse,
)`
$DIR/core/services/keeper/upkeep_executer_test.go: `executer.OnNewLongestChain(testutils.Context(t), &head)`
$DIR/core/services/keeper/upkeep_executer_test.go: `ethTxCreated.AwaitOrFail(t)`
$DIR/core/services/keeper/upkeep_executer_test.go: `waitLastRunHeight(t, db, upkeep, 20)`
$DIR/core/services/keeper/upkeep_executer_test.go: `t.Run("runs upkeep on triggering block number on EIP1559 and non-EIP1559 chains", func(t *testing.T) {
runTest := func(t *testing.T, eip1559 bool) {
db, config, ethMock, executer, registry, upkeep, job, jpv2, txm, _, _, _ := setup(t, mockEstimator(t), func(c *chainlink.Config, s *chainlink.Secrets) {
c.EVM[0].GasEstimator.EIP1559DynamicFees = &eip1559
c.EVM[0].ChainID = (*ubig.Big)(testutils.SimulatedChainID)
})
gasLimit := uint64(5_000_000 + config.Keeper().Registry().PerformGasOverhead())
ethTxCreated := cltest.NewAwaiter()
txm.On("CreateTransaction",
mock.Anything,
mock.MatchedBy(func(txRequest txmgr.TxRequest) bool { return txRequest.FeeLimit == gasLimit }),
).
Once().
Return(txmgr.Tx{
ID: 1,
}, nil).
Run(func(mock.Arguments) { ethTxCreated.ItHappened() })
registryMock := cltest.NewContractMockReceiver(t, ethMock, keeper.Registry1_1ABI, registry.ContractAddress.Address())
registryMock.MockMatchedResponse(
"checkUpkeep",
func(callArgs ethereum.CallMsg) bool {
return callArgs.GasPrice == nil &&
callArgs.Gas == 0
},
checkUpkeepResponse,
)
registryMock.MockMatchedResponse(
"performUpkeep",
func(callArgs ethereum.CallMsg) bool { return true },
checkPerformResponse,
)
head := newHead()
executer.OnNewLongestChain(testutils.Context(t), &head)
ethTxCreated.AwaitOrFail(t)
runs := cltest.WaitForPipelineComplete(t, 0, job.ID, 1, taskRuns, jpv2.Jrm, time.Second, 100*time.Millisecond)
require.Len(t, runs, 1)
assert.False(t, runs[0].HasErrors())
assert.False(t, runs[0].HasFatalErrors())
waitLastRunHeight(t, db, upkeep, 20)
}
t.Run("EIP1559", func(t *testing.T) {
runTest(t, true)
})
t.Run("non-EIP1559", func(t *testing.T) {
runTest(t, false)
})
})`
$DIR/core/services/keeper/upkeep_executer_test.go: `c.EVM[0].GasEstimator.EIP1559DynamicFees = &eip1559`
$DIR/core/services/keeper/upkeep_executer_test.go: `c.EVM[0].ChainID = (*ubig.Big)(testutils.SimulatedChainID)`
$DIR/core/services/keeper/upkeep_executer_test.go: `txm.On("CreateTransaction",
mock.Anything,
mock.MatchedBy(func(txRequest txmgr.TxRequest) bool { return txRequest.FeeLimit == gasLimit }),
).
Once().
Return(txmgr.Tx{
ID: 1,
}, nil).
Run(func(mock.Arguments) { ethTxCreated.ItHappened() })`
$DIR/core/services/keeper/upkeep_executer_test.go: `ethTxCreated.ItHappened()`
$DIR/core/services/keeper/upkeep_executer_test.go: `registryMock.MockMatchedResponse(
"checkUpkeep",
func(callArgs ethereum.CallMsg) bool {
return callArgs.GasPrice == nil &&
callArgs.Gas == 0
},
checkUpkeepResponse,
)`
$DIR/core/services/keeper/upkeep_executer_test.go: `registryMock.MockMatchedResponse(
"performUpkeep",
func(callArgs ethereum.CallMsg) bool { return true },
checkPerformResponse,
)`
$DIR/core/services/keeper/upkeep_executer_test.go: `executer.OnNewLongestChain(testutils.Context(t), &head)`
$DIR/core/services/keeper/upkeep_executer_test.go: `ethTxCreated.AwaitOrFail(t)`
$DIR/core/services/keeper/upkeep_executer_test.go: `waitLastRunHeight(t, db, upkeep, 20)`
$DIR/core/services/keeper/upkeep_executer_test.go: `t.Run("EIP1559", func(t *testing.T) {
runTest(t, true)
})`
$DIR/core/services/keeper/upkeep_executer_test.go: `runTest(t, true)`
$DIR/core/services/keeper/upkeep_executer_test.go: `t.Run("non-EIP1559", func(t *testing.T) {
runTest(t, false)
})`
$DIR/core/services/keeper/upkeep_executer_test.go: `runTest(t, false)`
$DIR/core/services/keeper/upkeep_executer_test.go: `t.Run("errors if submission key not found", func(t *testing.T) {
ctx := testutils.Context(t)
_, _, ethMock, executer, registry, _, job, jpv2, _, keyStore, _, _ := setup(t, mockEstimator(t), func(c *chainlink.Config, s *chainlink.Secrets) {
c.EVM[0].ChainID = (*ubig.Big)(testutils.SimulatedChainID)
})
// replace expected key with random one
_, err := keyStore.Eth().Create(ctx, testutils.SimulatedChainID)
require.NoError(t, err)
_, err = keyStore.Eth().Delete(ctx, job.KeeperSpec.FromAddress.Hex())
require.NoError(t, err)
registryMock := cltest.NewContractMockReceiver(t, ethMock, keeper.Registry1_1ABI, registry.ContractAddress.Address())
registryMock.MockMatchedResponse(
"checkUpkeep",
func(callArgs ethereum.CallMsg) bool {
return callArgs.GasPrice == nil &&
callArgs.Gas == 0
},
checkUpkeepResponse,
)
registryMock.MockMatchedResponse(
"performUpkeep",
func(callArgs ethereum.CallMsg) bool { return true },
checkPerformResponse,
)
head := newHead()
executer.OnNewLongestChain(testutils.Context(t), &head)
runs := cltest.WaitForPipelineError(t, 0, job.ID, 1, taskRuns, jpv2.Jrm, time.Second, 100*time.Millisecond)
require.Len(t, runs, 1)
assert.True(t, runs[0].HasErrors())
assert.True(t, runs[0].HasFatalErrors())
})`
$DIR/core/services/keeper/upkeep_executer_test.go: `c.EVM[0].ChainID = (*ubig.Big)(testutils.SimulatedChainID)`
$DIR/core/services/keeper/upkeep_executer_test.go: `_, err = keyStore.Eth().Delete(ctx, job.KeeperSpec.FromAddress.Hex())`
$DIR/core/services/keeper/upkeep_executer_test.go: `registryMock.MockMatchedResponse(
"checkUpkeep",
func(callArgs ethereum.CallMsg) bool {
return callArgs.GasPrice == nil &&
callArgs.Gas == 0
},
checkUpkeepResponse,
)`
$DIR/core/services/keeper/upkeep_executer_test.go: `registryMock.MockMatchedResponse(
"performUpkeep",
func(callArgs ethereum.CallMsg) bool { return true },
checkPerformResponse,
)`
$DIR/core/services/keeper/upkeep_executer_test.go: `executer.OnNewLongestChain(testutils.Context(t), &head)`
$DIR/core/services/keeper/upkeep_executer_test.go: `t.Run("errors if submission chain not found", func(t *testing.T) {
db, cfg, ethMock, _, _, _, _, jpv2, _, keyStore, ch, orm := setup(t, mockEstimator(t), nil)
registry, jb := cltest.MustInsertKeeperRegistry(t, db, orm, keyStore.Eth(), 0, 1, 20)
// change chain ID to non-configured chain
jb.KeeperSpec.EVMChainID = (*ubig.Big)(big.NewInt(999))
cltest.MustInsertUpkeepForRegistry(t, db, registry)
lggr := logger.TestLogger(t)
executer := keeper.NewUpkeepExecuter(jb, orm, jpv2.Pr, ethMock, ch.HeadBroadcaster(), ch.GasEstimator(), lggr, cfg.Keeper(), jb.KeeperSpec.FromAddress.Address())
err := executer.Start(testutils.Context(t))
require.NoError(t, err)
head := newHead()
executer.OnNewLongestChain(testutils.Context(t), &head)
// TODO we want to see an errored run result once this is completed
// https://smartcontract-it.atlassian.net/browse/ARCHIVE-22186
cltest.AssertPipelineRunsStays(t, jb.PipelineSpecID, db, 0)
})`
$DIR/core/services/keeper/upkeep_executer_test.go: `jb.KeeperSpec.EVMChainID = (*ubig.Big)(big.NewInt(999))`
$DIR/core/services/keeper/upkeep_executer_test.go: `cltest.MustInsertUpkeepForRegistry(t, db, registry)`
$DIR/core/services/keeper/upkeep_executer_test.go: `executer.OnNewLongestChain(testutils.Context(t), &head)`
$DIR/core/services/keeper/upkeep_executer_test.go: `cltest.AssertPipelineRunsStays(t, jb.PipelineSpecID, db, 0)`
$DIR/core/services/keeper/upkeep_executer_test.go: `c.EVM[0].ChainID = (*ubig.Big)(testutils.SimulatedChainID)`
$DIR/core/services/keeper/upkeep_executer_test.go: `txm.On("CreateTransaction",
mock.Anything,
mock.MatchedBy(func(txRequest txmgr.TxRequest) bool { return txRequest.FeeLimit == gasLimit }),
).
Once().
Return(txmgr.Tx{}, nil).
Run(func(mock.Arguments) { etxs[0].ItHappened() })`
$DIR/core/services/keeper/upkeep_executer_test.go: `etxs[0].ItHappened()`
$DIR/core/services/keeper/upkeep_executer_test.go: `registryMock.MockResponse("checkUpkeep", checkUpkeepResponse)`
$DIR/core/services/keeper/upkeep_executer_test.go: `registryMock.MockMatchedResponse(
"performUpkeep",
func(callArgs ethereum.CallMsg) bool { return true },
checkPerformResponse,
)`
$DIR/core/services/keeper/upkeep_executer_test.go: `executer.OnNewLongestChain(testutils.Context(t), head)`
$DIR/core/services/keeper/upkeep_executer_test.go: `etxs[0].AwaitOrFail(t)`
$DIR/core/services/keeper/upkeep_executer_test.go: `waitLastRunHeight(t, db, upkeep, 36)`
$DIR/core/services/keeper/upkeep_executer_test.go: `c.EVM[0].ChainID = (*ubig.Big)(testutils.SimulatedChainID)`
$DIR/core/services/keeper/upkeep_executer_test.go: `registryMock.MockRevertResponse("checkUpkeep").Run(func(args mock.Arguments) {
wasCalled.Store(true)
})`
$DIR/core/services/keeper/upkeep_executer_test.go: `wasCalled.Store(true)`
$DIR/core/services/keeper/upkeep_executer_test.go: `executer.OnNewLongestChain(testutils.Context(t), &head)`
$DIR/core/services/keeper/upkeep_executer_test.go: `g.Eventually(wasCalled.Load).Should(gomega.Equal(true))`
$DIR/core/services/keeper/upkeep_executer_test.go: `.Start(testutils.Context(t))`
$DIR/core/services/keeper/upkeep_executer_test.go: `.Context(t)`
$DIR/core/services/keeper/upkeep_executer_test.go: `.Run("runs upkeep on triggering block number", func(t *testing.T) {
db, config, ethMock, executer, registry, upkeep, job, jpv2, txm, _, _, _ := setup(t, mockEstimator(t),
func(c *chainlink.Config, s *chainlink.Secrets) {
c.EVM[0].ChainID = (*ubig.Big)(testutils.SimulatedChainID)
})
gasLimit := uint64(5_000_000 + config.Keeper().Registry().PerformGasOverhead())
ethTxCreated := cltest.NewAwaiter()
txm.On("CreateTransaction",
mock.Anything,
mock.MatchedBy(func(txRequest txmgr.TxRequest) bool { return txRequest.FeeLimit == gasLimit }),
).
Once().
Return(txmgr.Tx{
ID: 1,
}, nil).
Run(func(mock.Arguments) { ethTxCreated.ItHappened() })
registryMock := cltest.NewContractMockReceiver(t, ethMock, keeper.Registry1_1ABI, registry.ContractAddress.Address())
registryMock.MockMatchedResponse(
"checkUpkeep",
func(callArgs ethereum.CallMsg) bool {
return callArgs.GasPrice == nil &&
callArgs.Gas == 0
},
checkUpkeepResponse,
)
registryMock.MockMatchedResponse(
"performUpkeep",
func(callArgs ethereum.CallMsg) bool { return true },
checkPerformResponse,
)
head := newHead()
executer.OnNewLongestChain(testutils.Context(t), &head)
ethTxCreated.AwaitOrFail(t)
runs := cltest.WaitForPipelineComplete(t, 0, job.ID, 1, taskRuns, jpv2.Jrm, time.Second, 100*time.Millisecond)
require.Len(t, runs, 1)
assert.False(t, runs[0].HasErrors())
assert.False(t, runs[0].HasFatalErrors())
waitLastRunHeight(t, db, upkeep, 20)
})`
$DIR/core/services/keeper/upkeep_executer_test.go: `.Keeper()`
$DIR/core/services/keeper/upkeep_executer_test.go: `.Registry()`
$DIR/core/services/keeper/upkeep_executer_test.go: `.PerformGasOverhead()`
$DIR/core/services/keeper/upkeep_executer_test.go: `.NewAwaiter()`
$DIR/core/services/keeper/upkeep_executer_test.go: `.On("CreateTransaction",
mock.Anything,
mock.MatchedBy(func(txRequest txmgr.TxRequest) bool { return txRequest.FeeLimit == gasLimit }),
)`
$DIR/core/services/keeper/upkeep_executer_test.go: `.MatchedBy(func(txRequest txmgr.TxRequest) bool { return txRequest.FeeLimit == gasLimit })`
$DIR/core/services/keeper/upkeep_executer_test.go: `.
Once()`
$DIR/core/services/keeper/upkeep_executer_test.go: `.
Return(txmgr.Tx{
ID: 1,
}, nil)`
$DIR/core/services/keeper/upkeep_executer_test.go: `.
Run(func(mock.Arguments) { ethTxCreated.ItHappened() })`
$DIR/core/services/keeper/upkeep_executer_test.go: `.ItHappened()`
$DIR/core/services/keeper/upkeep_executer_test.go: `.NewContractMockReceiver(t, ethMock, keeper.Registry1_1ABI, registry.ContractAddress.Address())`
$DIR/core/services/keeper/upkeep_executer_test.go: `.ContractAddress.Address()`
$DIR/core/services/keeper/upkeep_executer_test.go: `.MockMatchedResponse(
"checkUpkeep",
func(callArgs ethereum.CallMsg) bool {
return callArgs.GasPrice == nil &&
callArgs.Gas == 0
},
checkUpkeepResponse,
)`
$DIR/core/services/keeper/upkeep_executer_test.go: `.MockMatchedResponse(
"performUpkeep",
func(callArgs ethereum.CallMsg) bool { return true },
checkPerformResponse,
)`
$DIR/core/services/keeper/upkeep_executer_test.go: `.OnNewLongestChain(testutils.Context(t), &head)`
$DIR/core/services/keeper/upkeep_executer_test.go: `.Context(t)`
$DIR/core/services/keeper/upkeep_executer_test.go: `.AwaitOrFail(t)`
$DIR/core/services/keeper/upkeep_executer_test.go: `.WaitForPipelineComplete(t, 0, job.ID, 1, taskRuns, jpv2.Jrm, time.Second, 100*time.Millisecond)`
$DIR/core/services/keeper/upkeep_executer_test.go: `.Run("runs upkeep on triggering block number on EIP1559 and non-EIP1559 chains", func(t *testing.T) {
runTest := func(t *testing.T, eip1559 bool) {
db, config, ethMock, executer, registry, upkeep, job, jpv2, txm, _, _, _ := setup(t, mockEstimator(t), func(c *chainlink.Config, s *chainlink.Secrets) {
c.EVM[0].GasEstimator.EIP1559DynamicFees = &eip1559
c.EVM[0].ChainID = (*ubig.Big)(testutils.SimulatedChainID)
})
gasLimit := uint64(5_000_000 + config.Keeper().Registry().PerformGasOverhead())
ethTxCreated := cltest.NewAwaiter()
txm.On("CreateTransaction",
mock.Anything,
mock.MatchedBy(func(txRequest txmgr.TxRequest) bool { return txRequest.FeeLimit == gasLimit }),
).
Once().
Return(txmgr.Tx{
ID: 1,
}, nil).
Run(func(mock.Arguments) { ethTxCreated.ItHappened() })
registryMock := cltest.NewContractMockReceiver(t, ethMock, keeper.Registry1_1ABI, registry.ContractAddress.Address())
registryMock.MockMatchedResponse(
"checkUpkeep",
func(callArgs ethereum.CallMsg) bool {
return callArgs.GasPrice == nil &&
callArgs.Gas == 0
},
checkUpkeepResponse,
)
registryMock.MockMatchedResponse(
"performUpkeep",
func(callArgs ethereum.CallMsg) bool { return true },
checkPerformResponse,
)
head := newHead()
executer.OnNewLongestChain(testutils.Context(t), &head)
ethTxCreated.AwaitOrFail(t)
runs := cltest.WaitForPipelineComplete(t, 0, job.ID, 1, taskRuns, jpv2.Jrm, time.Second, 100*time.Millisecond)
require.Len(t, runs, 1)
assert.False(t, runs[0].HasErrors())
assert.False(t, runs[0].HasFatalErrors())
waitLastRunHeight(t, db, upkeep, 20)
}
t.Run("EIP1559", func(t *testing.T) {
runTest(t, true)
})
t.Run("non-EIP1559", func(t *testing.T) {
runTest(t, false)
})
})`
$DIR/core/services/keeper/upkeep_executer_test.go: `.Keeper()`
$DIR/core/services/keeper/upkeep_executer_test.go: `.Registry()`
$DIR/core/services/keeper/upkeep_executer_test.go: `.PerformGasOverhead()`
$DIR/core/services/keeper/upkeep_executer_test.go: `.NewAwaiter()`
$DIR/core/services/keeper/upkeep_executer_test.go: `.On("CreateTransaction",
mock.Anything,
mock.MatchedBy(func(txRequest txmgr.TxRequest) bool { return txRequest.FeeLimit == gasLimit }),
)`
$DIR/core/services/keeper/upkeep_executer_test.go: `.MatchedBy(func(txRequest txmgr.TxRequest) bool { return txRequest.FeeLimit == gasLimit })`
$DIR/core/services/keeper/upkeep_executer_test.go: `.
Once()`
$DIR/core/services/keeper/upkeep_executer_test.go: `.
Return(txmgr.Tx{
ID: 1,
}, nil)`
$DIR/core/services/keeper/upkeep_executer_test.go: `.
Run(func(mock.Arguments) { ethTxCreated.ItHappened() })`
$DIR/core/services/keeper/upkeep_executer_test.go: `.ItHappened()`
$DIR/core/services/keeper/upkeep_executer_test.go: `.NewContractMockReceiver(t, ethMock, keeper.Registry1_1ABI, registry.ContractAddress.Address())`
$DIR/core/services/keeper/upkeep_executer_test.go: `.ContractAddress.Address()`
$DIR/core/services/keeper/upkeep_executer_test.go: `.MockMatchedResponse(
"checkUpkeep",
func(callArgs ethereum.CallMsg) bool {
return callArgs.GasPrice == nil &&
callArgs.Gas == 0
},
checkUpkeepResponse,
)`
$DIR/core/services/keeper/upkeep_executer_test.go: `.MockMatchedResponse(
"performUpkeep",
func(callArgs ethereum.CallMsg) bool { return true },
checkPerformResponse,
)`
$DIR/core/services/keeper/upkeep_executer_test.go: `.OnNewLongestChain(testutils.Context(t), &head)`
$DIR/core/services/keeper/upkeep_executer_test.go: `.Context(t)`
$DIR/core/services/keeper/upkeep_executer_test.go: `.AwaitOrFail(t)`
$DIR/core/services/keeper/upkeep_executer_test.go: `.WaitForPipelineComplete(t, 0, job.ID, 1, taskRuns, jpv2.Jrm, time.Second, 100*time.Millisecond)`
$DIR/core/services/keeper/upkeep_executer_test.go: `.Run("EIP1559", func(t *testing.T) {
runTest(t, true)
})`
$DIR/core/services/keeper/upkeep_executer_test.go: `.Run("non-EIP1559", func(t *testing.T) {
runTest(t, false)
})`
$DIR/core/services/keeper/upkeep_executer_test.go: `.Run("errors if submission key not found", func(t *testing.T) {
ctx := testutils.Context(t)
_, _, ethMock, executer, registry, _, job, jpv2, _, keyStore, _, _ := setup(t, mockEstimator(t), func(c *chainlink.Config, s *chainlink.Secrets) {
c.EVM[0].ChainID = (*ubig.Big)(testutils.SimulatedChainID)
})
// replace expected key with random one
_, err := keyStore.Eth().Create(ctx, testutils.SimulatedChainID)
require.NoError(t, err)
_, err = keyStore.Eth().Delete(ctx, job.KeeperSpec.FromAddress.Hex())
require.NoError(t, err)
registryMock := cltest.NewContractMockReceiver(t, ethMock, keeper.Registry1_1ABI, registry.ContractAddress.Address())
registryMock.MockMatchedResponse(
"checkUpkeep",
func(callArgs ethereum.CallMsg) bool {
return callArgs.GasPrice == nil &&
callArgs.Gas == 0
},
checkUpkeepResponse,
)
registryMock.MockMatchedResponse(
"performUpkeep",
func(callArgs ethereum.CallMsg) bool { return true },
checkPerformResponse,
)
head := newHead()
executer.OnNewLongestChain(testutils.Context(t), &head)
runs := cltest.WaitForPipelineError(t, 0, job.ID, 1, taskRuns, jpv2.Jrm, time.Second, 100*time.Millisecond)
require.Len(t, runs, 1)
assert.True(t, runs[0].HasErrors())
assert.True(t, runs[0].HasFatalErrors())
})`
$DIR/core/services/keeper/upkeep_executer_test.go: `.Context(t)`
$DIR/core/services/keeper/upkeep_executer_test.go: `.Eth()`
$DIR/core/services/keeper/upkeep_executer_test.go: `.Create(ctx, testutils.SimulatedChainID)`
$DIR/core/services/keeper/upkeep_executer_test.go: `.Eth()`
$DIR/core/services/keeper/upkeep_executer_test.go: `.Delete(ctx, job.KeeperSpec.FromAddress.Hex())`
$DIR/core/services/keeper/upkeep_executer_test.go: `.KeeperSpec.FromAddress.Hex()`
$DIR/core/services/keeper/upkeep_executer_test.go: `.NewContractMockReceiver(t, ethMock, keeper.Registry1_1ABI, registry.ContractAddress.Address())`
$DIR/core/services/keeper/upkeep_executer_test.go: `.ContractAddress.Address()`
$DIR/core/services/keeper/upkeep_executer_test.go: `.MockMatchedResponse(
"checkUpkeep",
func(callArgs ethereum.CallMsg) bool {
return callArgs.GasPrice == nil &&
callArgs.Gas == 0
},
checkUpkeepResponse,
)`
$DIR/core/services/keeper/upkeep_executer_test.go: `.MockMatchedResponse(
"performUpkeep",
func(callArgs ethereum.CallMsg) bool { return true },
checkPerformResponse,
)`
$DIR/core/services/keeper/upkeep_executer_test.go: `.OnNewLongestChain(testutils.Context(t), &head)`
$DIR/core/services/keeper/upkeep_executer_test.go: `.Context(t)`
$DIR/core/services/keeper/upkeep_executer_test.go: `.WaitForPipelineError(t, 0, job.ID, 1, taskRuns, jpv2.Jrm, time.Second, 100*time.Millisecond)`
$DIR/core/services/keeper/upkeep_executer_test.go: `.Run("errors if submission chain not found", func(t *testing.T) {
db, cfg, ethMock, _, _, _, _, jpv2, _, keyStore, ch, orm := setup(t, mockEstimator(t), nil)
registry, jb := cltest.MustInsertKeeperRegistry(t, db, orm, keyStore.Eth(), 0, 1, 20)
// change chain ID to non-configured chain
jb.KeeperSpec.EVMChainID = (*ubig.Big)(big.NewInt(999))
cltest.MustInsertUpkeepForRegistry(t, db, registry)
lggr := logger.TestLogger(t)
executer := keeper.NewUpkeepExecuter(jb, orm, jpv2.Pr, ethMock, ch.HeadBroadcaster(), ch.GasEstimator(), lggr, cfg.Keeper(), jb.KeeperSpec.FromAddress.Address())
err := executer.Start(testutils.Context(t))
require.NoError(t, err)
head := newHead()
executer.OnNewLongestChain(testutils.Context(t), &head)
// TODO we want to see an errored run result once this is completed
// https://smartcontract-it.atlassian.net/browse/ARCHIVE-22186
cltest.AssertPipelineRunsStays(t, jb.PipelineSpecID, db, 0)
})`
$DIR/core/services/keeper/upkeep_executer_test.go: `.MustInsertKeeperRegistry(t, db, orm, keyStore.Eth(), 0, 1, 20)`
$DIR/core/services/keeper/upkeep_executer_test.go: `.Eth()`
$DIR/core/services/keeper/upkeep_executer_test.go: `.NewInt(999)`
$DIR/core/services/keeper/upkeep_executer_test.go: `.MustInsertUpkeepForRegistry(t, db, registry)`
$DIR/core/services/keeper/upkeep_executer_test.go: `.TestLogger(t)`
$DIR/core/services/keeper/upkeep_executer_test.go: `.NewUpkeepExecuter(jb, orm, jpv2.Pr, ethMock, ch.HeadBroadcaster(), ch.GasEstimator(), lggr, cfg.Keeper(), jb.KeeperSpec.FromAddress.Address())`
$DIR/core/services/keeper/upkeep_executer_test.go: `.HeadBroadcaster()`
$DIR/core/services/keeper/upkeep_executer_test.go: `.GasEstimator()`
$DIR/core/services/keeper/upkeep_executer_test.go: `.Keeper()`
$DIR/core/services/keeper/upkeep_executer_test.go: `.KeeperSpec.FromAddress.Address()`
$DIR/core/services/keeper/upkeep_executer_test.go: `.Start(testutils.Context(t))`
$DIR/core/services/keeper/upkeep_executer_test.go: `.Context(t)`
$DIR/core/services/keeper/upkeep_executer_test.go: `.OnNewLongestChain(testutils.Context(t), &head)`
$DIR/core/services/keeper/upkeep_executer_test.go: `.Context(t)`
$DIR/core/services/keeper/upkeep_executer_test.go: `.AssertPipelineRunsStays(t, jb.PipelineSpecID, db, 0)`
$DIR/core/services/keeper/upkeep_executer_test.go: `.NewAwaiter()`
$DIR/core/services/keeper/upkeep_executer_test.go: `.NewAwaiter()`
$DIR/core/services/keeper/upkeep_executer_test.go: `.Keeper()`
$DIR/core/services/keeper/upkeep_executer_test.go: `.Registry()`
$DIR/core/services/keeper/upkeep_executer_test.go: `.PerformGasOverhead()`
$DIR/core/services/keeper/upkeep_executer_test.go: `.On("CreateTransaction",
mock.Anything,
mock.MatchedBy(func(txRequest txmgr.TxRequest) bool { return txRequest.FeeLimit == gasLimit }),
)`
$DIR/core/services/keeper/upkeep_executer_test.go: `.MatchedBy(func(txRequest txmgr.TxRequest) bool { return txRequest.FeeLimit == gasLimit })`
$DIR/core/services/keeper/upkeep_executer_test.go: `.
Once()`
$DIR/core/services/keeper/upkeep_executer_test.go: `.
Return(txmgr.Tx{}, nil)`
$DIR/core/services/keeper/upkeep_executer_test.go: `.
Run(func(mock.Arguments) { etxs[0].ItHappened() })`
$DIR/core/services/keeper/upkeep_executer_test.go: `.ItHappened()`
$DIR/core/services/keeper/upkeep_executer_test.go: `.NewContractMockReceiver(t, ethMock, keeper.Registry1_1ABI, registry.ContractAddress.Address())`
$DIR/core/services/keeper/upkeep_executer_test.go: `.ContractAddress.Address()`
$DIR/core/services/keeper/upkeep_executer_test.go: `.MockResponse("checkUpkeep", checkUpkeepResponse)`
$DIR/core/services/keeper/upkeep_executer_test.go: `.MockMatchedResponse(
"performUpkeep",
func(callArgs ethereum.CallMsg) bool { return true },
checkPerformResponse,
)`
$DIR/core/services/keeper/upkeep_executer_test.go: `.Head(36)`
$DIR/core/services/keeper/upkeep_executer_test.go: `.OnNewLongestChain(testutils.Context(t), head)`
$DIR/core/services/keeper/upkeep_executer_test.go: `.Context(t)`
$DIR/core/services/keeper/upkeep_executer_test.go: `.WaitForPipelineComplete(t, 0, job.ID, 1, taskRuns, jpv2.Jrm, time.Second, 100*time.Millisecond)`
$DIR/core/services/keeper/upkeep_executer_test.go: `.AwaitOrFail(t)`
$DIR/core/services/keeper/upkeep_executer_test.go: `.NewWithT(t)`
$DIR/core/services/keeper/upkeep_executer_test.go: `.NewContractMockReceiver(t, ethMock, keeper.Registry1_1ABI, registry.ContractAddress.Address())`
$DIR/core/services/keeper/upkeep_executer_test.go: `.ContractAddress.Address()`
$DIR/core/services/keeper/upkeep_executer_test.go: `.MockRevertResponse("checkUpkeep")`
$DIR/core/services/keeper/upkeep_executer_test.go: `.Run(func(args mock.Arguments) {
wasCalled.Store(true)
})`
$DIR/core/services/keeper/upkeep_executer_test.go: `.Store(true)`
$DIR/core/services/keeper/upkeep_executer_test.go: `.OnNewLongestChain(testutils.Context(t), &head)`
$DIR/core/services/keeper/upkeep_executer_test.go: `.Context(t)`
$DIR/core/services/keeper/upkeep_executer_test.go: `.Eventually(wasCalled.Load)`
$DIR/core/services/keeper/upkeep_executer_test.go: `.Should(gomega.Equal(true))`
$DIR/core/services/keeper/upkeep_executer_test.go: `.Equal(true)`
$DIR/core/services/keeper/upkeep_executer_test.go: `.NewTxStore(db, logger.TestLogger(t))`
$DIR/core/services/keeper/upkeep_executer_test.go: `.TestLogger(t)`
$DIR/core/services/keeper/upkeep_executer_test.go: `.GetAllTxes(testutils.Context(t))`
$DIR/core/services/keeper/upkeep_executer_test.go: `.Context(t)`
$DIR/core/services/keeper/upkeep_executer_unit_test.go: `.EIP55Address(testutils.NewAddress().Hex())`
$DIR/core/services/keeper/upkeep_executer_unit_test.go: `.NewAddress()`
$DIR/core/services/keeper/upkeep_executer_unit_test.go: `.Hex()`
$DIR/core/services/keeper/upkeep_executer_unit_test.go: `.EIP55Address(testutils.NewAddress().Hex())`
$DIR/core/services/keeper/upkeep_executer_unit_test.go: `.NewAddress()`
$DIR/core/services/keeper/upkeep_executer_unit_test.go: `.Hex()`
$DIR/core/services/keeper/upkeep_executer_unit_test.go: `.NewI(4)`
$DIR/core/services/keeper/upkeep_executer_unit_test.go: `.NewWeiI(24)`
$DIR/core/services/keeper/upkeep_executer_unit_test.go: `.NewWeiI(48)`
$DIR/core/services/keeper/upkeep_executer_unit_test.go: `.NewWeiI(72)`
$DIR/core/services/keeper/upkeep_executer_unit_test.go: `.KeeperSpec.FromAddress.Address()`
$DIR/core/services/keeper/upkeep_executer_unit_test.go: `.String()`
$DIR/core/services/keeper/upkeep_executer_unit_test.go: `.KeeperSpec.FromAddress.String()`
$DIR/core/services/keeper/upkeep_executer_unit_test.go: `.String()`
$DIR/core/services/keeper/upkeep_executer_unit_test.go: `.Sprintf("UPx%064d", 4)`
$DIR/core/services/keeper/upkeep_executer_unit_test.go: `.ToInt()`
$DIR/core/services/keeper/upkeep_executer_unit_test.go: `.ToInt()`
$DIR/core/services/keeper/upkeep_executer_unit_test.go: `.ToInt()`
$DIR/core/services/keeper/validate_test.go: `t.Run(tt.name, func(t *testing.T) {
got, err := ValidatedKeeperSpec(tt.args.tomlString)
if tt.wantErr {
require.Error(t, err)
return
}
require.NoError(t, err)
require.Equal(t, tt.want.id, got.ID)
require.Equal(t, tt.want.contractAddr, got.KeeperSpec.ContractAddress.Hex())
require.Equal(t, tt.want.fromAddr, got.KeeperSpec.FromAddress.Hex())
require.Equal(t, tt.want.createdAt, got.KeeperSpec.CreatedAt)
require.Equal(t, tt.want.updatedAt, got.KeeperSpec.UpdatedAt)
})`
$DIR/core/services/keeper/validate_test.go: `.Run(tt.name, func(t *testing.T) {
got, err := ValidatedKeeperSpec(tt.args.tomlString)
if tt.wantErr {
require.Error(t, err)
return
}
require.NoError(t, err)
require.Equal(t, tt.want.id, got.ID)
require.Equal(t, tt.want.contractAddr, got.KeeperSpec.ContractAddress.Hex())
require.Equal(t, tt.want.fromAddr, got.KeeperSpec.FromAddress.Hex())
require.Equal(t, tt.want.createdAt, got.KeeperSpec.CreatedAt)
require.Equal(t, tt.want.updatedAt, got.KeeperSpec.UpdatedAt)
})`
$DIR/core/services/keystore/cosmos_test.go: `keyStore.ResetXXXTestOnly()`
$DIR/core/services/keystore/cosmos_test.go: `t.Run("initializes with an empty state", func(t *testing.T) {
defer reset()
keys, err := ks.GetAll()
require.NoError(t, err)
require.Equal(t, 0, len(keys))
})`
$DIR/core/services/keystore/cosmos_test.go: `t.Run("errors when getting non-existent ID", func(t *testing.T) {
defer reset()
_, err := ks.Get("non-existent-id")
require.Error(t, err)
})`
$DIR/core/services/keystore/cosmos_test.go: `t.Run("creates a key", func(t *testing.T) {
defer reset()
ctx := testutils.Context(t)
key, err := ks.Create(ctx)
require.NoError(t, err)
retrievedKey, err := ks.Get(key.ID())
require.NoError(t, err)
require.Equal(t, key, retrievedKey)
})`
$DIR/core/services/keystore/cosmos_test.go: `t.Run("imports and exports a key", func(t *testing.T) {
defer reset()
ctx := testutils.Context(t)
key, err := ks.Create(ctx)
require.NoError(t, err)
exportJSON, err := ks.Export(key.ID(), cltest.Password)
require.NoError(t, err)
_, err = ks.Export("non-existent", cltest.Password)
assert.Error(t, err)
_, err = ks.Delete(ctx, key.ID())
require.NoError(t, err)
_, err = ks.Get(key.ID())
require.Error(t, err)
importedKey, err := ks.Import(ctx, exportJSON, cltest.Password)
require.NoError(t, err)
_, err = ks.Import(ctx, exportJSON, cltest.Password)
assert.Error(t, err)
_, err = ks.Import(ctx, []byte(""), cltest.Password)
assert.Error(t, err)
require.Equal(t, key.ID(), importedKey.ID())
retrievedKey, err := ks.Get(key.ID())
require.NoError(t, err)
require.Equal(t, importedKey, retrievedKey)
})`
$DIR/core/services/keystore/cosmos_test.go: `_, err = ks.Export("non-existent", cltest.Password)`
$DIR/core/services/keystore/cosmos_test.go: `_, err = ks.Delete(ctx, key.ID())`
$DIR/core/services/keystore/cosmos_test.go: `_, err = ks.Get(key.ID())`
$DIR/core/services/keystore/cosmos_test.go: `_, err = ks.Import(ctx, exportJSON, cltest.Password)`
$DIR/core/services/keystore/cosmos_test.go: `_, err = ks.Import(ctx, []byte(""), cltest.Password)`
$DIR/core/services/keystore/cosmos_test.go: `t.Run("adds an externally created key / deletes a key", func(t *testing.T) {
defer reset()
ctx := testutils.Context(t)
newKey := cosmoskey.New()
err := ks.Add(ctx, newKey)
require.NoError(t, err)
err = ks.Add(ctx, newKey)
assert.Error(t, err)
keys, err := ks.GetAll()
require.NoError(t, err)
require.Equal(t, 1, len(keys))
_, err = ks.Delete(ctx, newKey.ID())
require.NoError(t, err)
_, err = ks.Delete(ctx, newKey.ID())
assert.Error(t, err)
keys, err = ks.GetAll()
require.NoError(t, err)
require.Equal(t, 0, len(keys))
_, err = ks.Get(newKey.ID())
require.Error(t, err)
})`
$DIR/core/services/keystore/cosmos_test.go: `err = ks.Add(ctx, newKey)`
$DIR/core/services/keystore/cosmos_test.go: `_, err = ks.Delete(ctx, newKey.ID())`
$DIR/core/services/keystore/cosmos_test.go: `_, err = ks.Delete(ctx, newKey.ID())`
$DIR/core/services/keystore/cosmos_test.go: `keys, err = ks.GetAll()`
$DIR/core/services/keystore/cosmos_test.go: `_, err = ks.Get(newKey.ID())`
$DIR/core/services/keystore/cosmos_test.go: `err = ks.EnsureKey(ctx)`
$DIR/core/services/keystore/cosmos_test.go: `.NewSqlxDB(t)`
$DIR/core/services/keystore/cosmos_test.go: `.ExposedNewMaster(t, db)`
$DIR/core/services/keystore/cosmos_test.go: `.Cosmos()`
$DIR/core/services/keystore/cosmos_test.go: `.Background()`
$DIR/core/services/keystore/cosmos_test.go: `.ResetXXXTestOnly()`
$DIR/core/services/keystore/cosmos_test.go: `.Run("initializes with an empty state", func(t *testing.T) {
defer reset()
keys, err := ks.GetAll()
require.NoError(t, err)
require.Equal(t, 0, len(keys))
})`
$DIR/core/services/keystore/cosmos_test.go: `.GetAll()`
$DIR/core/services/keystore/cosmos_test.go: `.Run("errors when getting non-existent ID", func(t *testing.T) {
defer reset()
_, err := ks.Get("non-existent-id")
require.Error(t, err)
})`
$DIR/core/services/keystore/cosmos_test.go: `.Get("non-existent-id")`
$DIR/core/services/keystore/cosmos_test.go: `.Run("creates a key", func(t *testing.T) {
defer reset()
ctx := testutils.Context(t)
key, err := ks.Create(ctx)
require.NoError(t, err)
retrievedKey, err := ks.Get(key.ID())
require.NoError(t, err)
require.Equal(t, key, retrievedKey)
})`
$DIR/core/services/keystore/cosmos_test.go: `.Context(t)`
$DIR/core/services/keystore/cosmos_test.go: `.Create(ctx)`
$DIR/core/services/keystore/cosmos_test.go: `.Get(key.ID())`
$DIR/core/services/keystore/cosmos_test.go: `.ID()`
$DIR/core/services/keystore/cosmos_test.go: `.Run("imports and exports a key", func(t *testing.T) {
defer reset()
ctx := testutils.Context(t)
key, err := ks.Create(ctx)
require.NoError(t, err)
exportJSON, err := ks.Export(key.ID(), cltest.Password)
require.NoError(t, err)
_, err = ks.Export("non-existent", cltest.Password)
assert.Error(t, err)
_, err = ks.Delete(ctx, key.ID())
require.NoError(t, err)
_, err = ks.Get(key.ID())
require.Error(t, err)
importedKey, err := ks.Import(ctx, exportJSON, cltest.Password)
require.NoError(t, err)
_, err = ks.Import(ctx, exportJSON, cltest.Password)
assert.Error(t, err)
_, err = ks.Import(ctx, []byte(""), cltest.Password)
assert.Error(t, err)
require.Equal(t, key.ID(), importedKey.ID())
retrievedKey, err := ks.Get(key.ID())
require.NoError(t, err)
require.Equal(t, importedKey, retrievedKey)
})`
$DIR/core/services/keystore/cosmos_test.go: `.Context(t)`
$DIR/core/services/keystore/cosmos_test.go: `.Create(ctx)`
$DIR/core/services/keystore/cosmos_test.go: `.Export(key.ID(), cltest.Password)`
$DIR/core/services/keystore/cosmos_test.go: `.ID()`
$DIR/core/services/keystore/cosmos_test.go: `.Export("non-existent", cltest.Password)`
$DIR/core/services/keystore/cosmos_test.go: `.Delete(ctx, key.ID())`
$DIR/core/services/keystore/cosmos_test.go: `.ID()`
$DIR/core/services/keystore/cosmos_test.go: `.Get(key.ID())`
$DIR/core/services/keystore/cosmos_test.go: `.ID()`
$DIR/core/services/keystore/cosmos_test.go: `.Import(ctx, exportJSON, cltest.Password)`
$DIR/core/services/keystore/cosmos_test.go: `.Import(ctx, exportJSON, cltest.Password)`
$DIR/core/services/keystore/cosmos_test.go: `.Import(ctx, []byte(""), cltest.Password)`
$DIR/core/services/keystore/cosmos_test.go: `.Get(key.ID())`
$DIR/core/services/keystore/cosmos_test.go: `.ID()`
$DIR/core/services/keystore/cosmos_test.go: `.Run("adds an externally created key / deletes a key", func(t *testing.T) {
defer reset()
ctx := testutils.Context(t)
newKey := cosmoskey.New()
err := ks.Add(ctx, newKey)
require.NoError(t, err)
err = ks.Add(ctx, newKey)
assert.Error(t, err)
keys, err := ks.GetAll()
require.NoError(t, err)
require.Equal(t, 1, len(keys))
_, err = ks.Delete(ctx, newKey.ID())
require.NoError(t, err)
_, err = ks.Delete(ctx, newKey.ID())
assert.Error(t, err)
keys, err = ks.GetAll()
require.NoError(t, err)
require.Equal(t, 0, len(keys))
_, err = ks.Get(newKey.ID())
require.Error(t, err)
})`
$DIR/core/services/keystore/cosmos_test.go: `.Context(t)`
$DIR/core/services/keystore/cosmos_test.go: `.New()`
$DIR/core/services/keystore/cosmos_test.go: `.Add(ctx, newKey)`
$DIR/core/services/keystore/cosmos_test.go: `.Add(ctx, newKey)`
$DIR/core/services/keystore/cosmos_test.go: `.GetAll()`
$DIR/core/services/keystore/cosmos_test.go: `.Delete(ctx, newKey.ID())`
$DIR/core/services/keystore/cosmos_test.go: `.ID()`
$DIR/core/services/keystore/cosmos_test.go: `.Delete(ctx, newKey.ID())`
$DIR/core/services/keystore/cosmos_test.go: `.ID()`
$DIR/core/services/keystore/cosmos_test.go: `.GetAll()`
$DIR/core/services/keystore/cosmos_test.go: `.Get(newKey.ID())`
$DIR/core/services/keystore/cosmos_test.go: `.ID()`
$DIR/core/services/keystore/cosmos_test.go: `.Context(t)`
$DIR/core/services/keystore/cosmos_test.go: `.EnsureKey(ctx)`
$DIR/core/services/keystore/cosmos_test.go: `.EnsureKey(ctx)`
$DIR/core/services/keystore/cosmos_test.go: `.GetAll()`
$DIR/core/services/keystore/csa_test.go: `keyStore.ResetXXXTestOnly()`
$DIR/core/services/keystore/csa_test.go: `t.Run("initializes with an empty state", func(t *testing.T) {
defer reset()
keys, err := ks.GetAll()
require.NoError(t, err)
require.Equal(t, 0, len(keys))
})`
$DIR/core/services/keystore/csa_test.go: `t.Run("errors when getting non-existent ID", func(t *testing.T) {
defer reset()
_, err := ks.Get("non-existent-id")
require.Error(t, err)
})`
$DIR/core/services/keystore/csa_test.go: `t.Run("creates a key", func(t *testing.T) {
defer reset()
ctx := testutils.Context(t)
key, err := ks.Create(ctx)
require.NoError(t, err)
retrievedKey, err := ks.Get(key.ID())
require.NoError(t, err)
require.Equal(t, key, retrievedKey)
t.Run("prevents creating more than one key", func(t *testing.T) {
ctx := testutils.Context(t)
k, err2 := ks.Create(ctx)
assert.Zero(t, k)
assert.Error(t, err2)
assert.True(t, errors.Is(err2, keystore.ErrCSAKeyExists))
})
})`
$DIR/core/services/keystore/csa_test.go: `t.Run("prevents creating more than one key", func(t *testing.T) {
ctx := testutils.Context(t)
k, err2 := ks.Create(ctx)
assert.Zero(t, k)
assert.Error(t, err2)
assert.True(t, errors.Is(err2, keystore.ErrCSAKeyExists))
})`
$DIR/core/services/keystore/csa_test.go: `t.Run("imports and exports a key", func(t *testing.T) {
defer reset()
ctx := testutils.Context(t)
key, err := ks.Create(ctx)
require.NoError(t, err)
exportJSON, err := ks.Export(key.ID(), cltest.Password)
require.NoError(t, err)
_, err = ks.Delete(ctx, key.ID())
require.NoError(t, err)
_, err = ks.Get(key.ID())
require.Error(t, err)
importedKey, err := ks.Import(ctx, exportJSON, cltest.Password)
require.NoError(t, err)
require.Equal(t, key.ID(), importedKey.ID())
retrievedKey, err := ks.Get(key.ID())
require.NoError(t, err)
require.Equal(t, importedKey, retrievedKey)
t.Run("prevents importing more than one key", func(t *testing.T) {
k, err2 := ks.Import(testutils.Context(t), exportJSON, cltest.Password)
assert.Zero(t, k)
assert.Error(t, err2)
assert.Equal(t, fmt.Sprintf("key with ID %s already exists", key.ID()), err2.Error())
})
t.Run("fails to import malformed key", func(t *testing.T) {
k, err2 := ks.Import(testutils.Context(t), []byte(""), cltest.Password)
assert.Zero(t, k)
assert.Error(t, err2)
})
t.Run("fails to export non-existent key", func(t *testing.T) {
exportJSON, err = ks.Export("non-existent", cltest.Password)
assert.Error(t, err)
assert.Empty(t, exportJSON)
})
})`
$DIR/core/services/keystore/csa_test.go: `_, err = ks.Delete(ctx, key.ID())`
$DIR/core/services/keystore/csa_test.go: `_, err = ks.Get(key.ID())`
$DIR/core/services/keystore/csa_test.go: `t.Run("prevents importing more than one key", func(t *testing.T) {
k, err2 := ks.Import(testutils.Context(t), exportJSON, cltest.Password)
assert.Zero(t, k)
assert.Error(t, err2)
assert.Equal(t, fmt.Sprintf("key with ID %s already exists", key.ID()), err2.Error())
})`
$DIR/core/services/keystore/csa_test.go: `t.Run("fails to import malformed key", func(t *testing.T) {
k, err2 := ks.Import(testutils.Context(t), []byte(""), cltest.Password)
assert.Zero(t, k)
assert.Error(t, err2)
})`
$DIR/core/services/keystore/csa_test.go: `t.Run("fails to export non-existent key", func(t *testing.T) {
exportJSON, err = ks.Export("non-existent", cltest.Password)
assert.Error(t, err)
assert.Empty(t, exportJSON)
})`
$DIR/core/services/keystore/csa_test.go: `exportJSON, err = ks.Export("non-existent", cltest.Password)`
$DIR/core/services/keystore/csa_test.go: `t.Run("adds an externally created key / deletes a key", func(t *testing.T) {
defer reset()
ctx := testutils.Context(t)
newKey, err := csakey.NewV2()
require.NoError(t, err)
err = ks.Add(ctx, newKey)
require.NoError(t, err)
keys, err := ks.GetAll()
require.NoError(t, err)
require.Equal(t, 1, len(keys))
_, err = ks.Delete(ctx, newKey.ID())
require.NoError(t, err)
keys, err = ks.GetAll()
require.NoError(t, err)
require.Equal(t, 0, len(keys))
_, err = ks.Get(newKey.ID())
require.Error(t, err)
t.Run("prevents adding more than one key", func(t *testing.T) {
ctx := testutils.Context(t)
err = ks.Add(ctx, newKey)
require.NoError(t, err)
err = ks.Add(ctx, newKey)
assert.Error(t, err)
assert.True(t, errors.Is(err, keystore.ErrCSAKeyExists))
})
t.Run("fails to delete non-existent key", func(t *testing.T) {
k, err2 := ks.Delete(testutils.Context(t), "non-existent")
assert.Zero(t, k)
assert.Error(t, err2)
})
})`
$DIR/core/services/keystore/csa_test.go: `err = ks.Add(ctx, newKey)`
$DIR/core/services/keystore/csa_test.go: `_, err = ks.Delete(ctx, newKey.ID())`
$DIR/core/services/keystore/csa_test.go: `keys, err = ks.GetAll()`
$DIR/core/services/keystore/csa_test.go: `_, err = ks.Get(newKey.ID())`
$DIR/core/services/keystore/csa_test.go: `t.Run("prevents adding more than one key", func(t *testing.T) {
ctx := testutils.Context(t)
err = ks.Add(ctx, newKey)
require.NoError(t, err)
err = ks.Add(ctx, newKey)
assert.Error(t, err)
assert.True(t, errors.Is(err, keystore.ErrCSAKeyExists))
})`
$DIR/core/services/keystore/csa_test.go: `err = ks.Add(ctx, newKey)`
$DIR/core/services/keystore/csa_test.go: `err = ks.Add(ctx, newKey)`
$DIR/core/services/keystore/csa_test.go: `t.Run("fails to delete non-existent key", func(t *testing.T) {
k, err2 := ks.Delete(testutils.Context(t), "non-existent")
assert.Zero(t, k)
assert.Error(t, err2)
})`
$DIR/core/services/keystore/csa_test.go: `t.Run("adds an externally created key/ensures it already exists", func(t *testing.T) {
defer reset()
ctx := testutils.Context(t)
newKey, err := csakey.NewV2()
assert.NoError(t, err)
err = ks.Add(ctx, newKey)
assert.NoError(t, err)
err = keyStore.CSA().EnsureKey(ctx)
assert.NoError(t, err)
keys, err2 := ks.GetAll()
assert.NoError(t, err2)
require.Equal(t, 1, len(keys))
require.Equal(t, newKey.ID(), keys[0].ID())
require.Equal(t, newKey.Version, keys[0].Version)
require.Equal(t, newKey.PublicKey, keys[0].PublicKey)
})`
$DIR/core/services/keystore/csa_test.go: `err = ks.Add(ctx, newKey)`
$DIR/core/services/keystore/csa_test.go: `err = keyStore.CSA().EnsureKey(ctx)`
$DIR/core/services/keystore/csa_test.go: `err = keyStore.CSA().EnsureKey(ctx)`
$DIR/core/services/keystore/csa_test.go: `keys, err = ks.GetAll()`
$DIR/core/services/keystore/csa_test.go: `.NewSqlxDB(t)`
$DIR/core/services/keystore/csa_test.go: `.ExposedNewMaster(t, db)`
$DIR/core/services/keystore/csa_test.go: `.CSA()`
$DIR/core/services/keystore/csa_test.go: `.Background()`
$DIR/core/services/keystore/csa_test.go: `.Exec("DELETE FROM encrypted_key_rings")`
$DIR/core/services/keystore/csa_test.go: `.ResetXXXTestOnly()`
$DIR/core/services/keystore/csa_test.go: `.Run("initializes with an empty state", func(t *testing.T) {
defer reset()
keys, err := ks.GetAll()
require.NoError(t, err)
require.Equal(t, 0, len(keys))
})`
$DIR/core/services/keystore/csa_test.go: `.GetAll()`
$DIR/core/services/keystore/csa_test.go: `.Run("errors when getting non-existent ID", func(t *testing.T) {
defer reset()
_, err := ks.Get("non-existent-id")
require.Error(t, err)
})`
$DIR/core/services/keystore/csa_test.go: `.Get("non-existent-id")`
$DIR/core/services/keystore/csa_test.go: `.Run("creates a key", func(t *testing.T) {
defer reset()
ctx := testutils.Context(t)
key, err := ks.Create(ctx)
require.NoError(t, err)
retrievedKey, err := ks.Get(key.ID())
require.NoError(t, err)
require.Equal(t, key, retrievedKey)
t.Run("prevents creating more than one key", func(t *testing.T) {
ctx := testutils.Context(t)
k, err2 := ks.Create(ctx)
assert.Zero(t, k)
assert.Error(t, err2)
assert.True(t, errors.Is(err2, keystore.ErrCSAKeyExists))
})
})`
$DIR/core/services/keystore/csa_test.go: `.Context(t)`
$DIR/core/services/keystore/csa_test.go: `.Create(ctx)`
$DIR/core/services/keystore/csa_test.go: `.Get(key.ID())`
$DIR/core/services/keystore/csa_test.go: `.ID()`
$DIR/core/services/keystore/csa_test.go: `.Run("prevents creating more than one key", func(t *testing.T) {
ctx := testutils.Context(t)
k, err2 := ks.Create(ctx)
assert.Zero(t, k)
assert.Error(t, err2)
assert.True(t, errors.Is(err2, keystore.ErrCSAKeyExists))
})`
$DIR/core/services/keystore/csa_test.go: `.Context(t)`
$DIR/core/services/keystore/csa_test.go: `.Create(ctx)`
$DIR/core/services/keystore/csa_test.go: `.Run("imports and exports a key", func(t *testing.T) {
defer reset()
ctx := testutils.Context(t)
key, err := ks.Create(ctx)
require.NoError(t, err)
exportJSON, err := ks.Export(key.ID(), cltest.Password)
require.NoError(t, err)
_, err = ks.Delete(ctx, key.ID())
require.NoError(t, err)
_, err = ks.Get(key.ID())
require.Error(t, err)
importedKey, err := ks.Import(ctx, exportJSON, cltest.Password)
require.NoError(t, err)
require.Equal(t, key.ID(), importedKey.ID())
retrievedKey, err := ks.Get(key.ID())
require.NoError(t, err)
require.Equal(t, importedKey, retrievedKey)
t.Run("prevents importing more than one key", func(t *testing.T) {
k, err2 := ks.Import(testutils.Context(t), exportJSON, cltest.Password)
assert.Zero(t, k)
assert.Error(t, err2)
assert.Equal(t, fmt.Sprintf("key with ID %s already exists", key.ID()), err2.Error())
})
t.Run("fails to import malformed key", func(t *testing.T) {
k, err2 := ks.Import(testutils.Context(t), []byte(""), cltest.Password)
assert.Zero(t, k)
assert.Error(t, err2)
})
t.Run("fails to export non-existent key", func(t *testing.T) {
exportJSON, err = ks.Export("non-existent", cltest.Password)
assert.Error(t, err)
assert.Empty(t, exportJSON)
})
})`
$DIR/core/services/keystore/csa_test.go: `.Context(t)`
$DIR/core/services/keystore/csa_test.go: `.Create(ctx)`
$DIR/core/services/keystore/csa_test.go: `.Export(key.ID(), cltest.Password)`
$DIR/core/services/keystore/csa_test.go: `.ID()`
$DIR/core/services/keystore/csa_test.go: `.Delete(ctx, key.ID())`
$DIR/core/services/keystore/csa_test.go: `.ID()`
$DIR/core/services/keystore/csa_test.go: `.Get(key.ID())`
$DIR/core/services/keystore/csa_test.go: `.ID()`
$DIR/core/services/keystore/csa_test.go: `.Import(ctx, exportJSON, cltest.Password)`
$DIR/core/services/keystore/csa_test.go: `.Get(key.ID())`
$DIR/core/services/keystore/csa_test.go: `.ID()`
$DIR/core/services/keystore/csa_test.go: `.Run("prevents importing more than one key", func(t *testing.T) {
k, err2 := ks.Import(testutils.Context(t), exportJSON, cltest.Password)
assert.Zero(t, k)
assert.Error(t, err2)
assert.Equal(t, fmt.Sprintf("key with ID %s already exists", key.ID()), err2.Error())
})`
$DIR/core/services/keystore/csa_test.go: `.Import(testutils.Context(t), exportJSON, cltest.Password)`
$DIR/core/services/keystore/csa_test.go: `.Context(t)`
$DIR/core/services/keystore/csa_test.go: `.Run("fails to import malformed key", func(t *testing.T) {
k, err2 := ks.Import(testutils.Context(t), []byte(""), cltest.Password)
assert.Zero(t, k)
assert.Error(t, err2)
})`
$DIR/core/services/keystore/csa_test.go: `.Import(testutils.Context(t), []byte(""), cltest.Password)`
$DIR/core/services/keystore/csa_test.go: `.Context(t)`
$DIR/core/services/keystore/csa_test.go: `.Run("fails to export non-existent key", func(t *testing.T) {
exportJSON, err = ks.Export("non-existent", cltest.Password)
assert.Error(t, err)
assert.Empty(t, exportJSON)
})`
$DIR/core/services/keystore/csa_test.go: `.Export("non-existent", cltest.Password)`
$DIR/core/services/keystore/csa_test.go: `.Run("adds an externally created key / deletes a key", func(t *testing.T) {
defer reset()
ctx := testutils.Context(t)
newKey, err := csakey.NewV2()
require.NoError(t, err)
err = ks.Add(ctx, newKey)
require.NoError(t, err)
keys, err := ks.GetAll()
require.NoError(t, err)
require.Equal(t, 1, len(keys))
_, err = ks.Delete(ctx, newKey.ID())
require.NoError(t, err)
keys, err = ks.GetAll()
require.NoError(t, err)
require.Equal(t, 0, len(keys))
_, err = ks.Get(newKey.ID())
require.Error(t, err)
t.Run("prevents adding more than one key", func(t *testing.T) {
ctx := testutils.Context(t)
err = ks.Add(ctx, newKey)
require.NoError(t, err)
err = ks.Add(ctx, newKey)
assert.Error(t, err)
assert.True(t, errors.Is(err, keystore.ErrCSAKeyExists))
})
t.Run("fails to delete non-existent key", func(t *testing.T) {
k, err2 := ks.Delete(testutils.Context(t), "non-existent")
assert.Zero(t, k)
assert.Error(t, err2)
})
})`
$DIR/core/services/keystore/csa_test.go: `.Context(t)`
$DIR/core/services/keystore/csa_test.go: `.NewV2()`
$DIR/core/services/keystore/csa_test.go: `.Add(ctx, newKey)`
$DIR/core/services/keystore/csa_test.go: `.GetAll()`
$DIR/core/services/keystore/csa_test.go: `.Delete(ctx, newKey.ID())`
$DIR/core/services/keystore/csa_test.go: `.ID()`
$DIR/core/services/keystore/csa_test.go: `.GetAll()`
$DIR/core/services/keystore/csa_test.go: `.Get(newKey.ID())`
$DIR/core/services/keystore/csa_test.go: `.ID()`
$DIR/core/services/keystore/csa_test.go: `.Run("prevents adding more than one key", func(t *testing.T) {
ctx := testutils.Context(t)
err = ks.Add(ctx, newKey)
require.NoError(t, err)
err = ks.Add(ctx, newKey)
assert.Error(t, err)
assert.True(t, errors.Is(err, keystore.ErrCSAKeyExists))
})`
$DIR/core/services/keystore/csa_test.go: `.Context(t)`
$DIR/core/services/keystore/csa_test.go: `.Add(ctx, newKey)`
$DIR/core/services/keystore/csa_test.go: `.Add(ctx, newKey)`
$DIR/core/services/keystore/csa_test.go: `.Run("fails to delete non-existent key", func(t *testing.T) {
k, err2 := ks.Delete(testutils.Context(t), "non-existent")
assert.Zero(t, k)
assert.Error(t, err2)
})`
$DIR/core/services/keystore/csa_test.go: `.Delete(testutils.Context(t), "non-existent")`
$DIR/core/services/keystore/csa_test.go: `.Context(t)`
$DIR/core/services/keystore/csa_test.go: `.Run("adds an externally created key/ensures it already exists", func(t *testing.T) {
defer reset()
ctx := testutils.Context(t)
newKey, err := csakey.NewV2()
assert.NoError(t, err)
err = ks.Add(ctx, newKey)
assert.NoError(t, err)
err = keyStore.CSA().EnsureKey(ctx)
assert.NoError(t, err)
keys, err2 := ks.GetAll()
assert.NoError(t, err2)
require.Equal(t, 1, len(keys))
require.Equal(t, newKey.ID(), keys[0].ID())
require.Equal(t, newKey.Version, keys[0].Version)
require.Equal(t, newKey.PublicKey, keys[0].PublicKey)
})`
$DIR/core/services/keystore/csa_test.go: `.Context(t)`
$DIR/core/services/keystore/csa_test.go: `.NewV2()`
$DIR/core/services/keystore/csa_test.go: `.Add(ctx, newKey)`
$DIR/core/services/keystore/csa_test.go: `.CSA()`
$DIR/core/services/keystore/csa_test.go: `.EnsureKey(ctx)`
$DIR/core/services/keystore/csa_test.go: `.GetAll()`
$DIR/core/services/keystore/csa_test.go: `.Context(t)`
$DIR/core/services/keystore/csa_test.go: `.GetAll()`
$DIR/core/services/keystore/csa_test.go: `.CSA()`
$DIR/core/services/keystore/csa_test.go: `.EnsureKey(ctx)`
$DIR/core/services/keystore/csa_test.go: `.GetAll()`
$DIR/core/services/keystore/dkgencrypt_test.go: `keyStore.ResetXXXTestOnly()`
$DIR/core/services/keystore/dkgencrypt_test.go: `t.Run("initializes with an empty state", func(t *testing.T) {
defer reset()
keys, err := ks.GetAll()
require.NoError(t, err)
require.Equal(t, 0, len(keys))
})`
$DIR/core/services/keystore/dkgencrypt_test.go: `t.Run("errors when getting non-existent ID", func(t *testing.T) {
defer reset()
_, err := ks.Get("non-existent-id")
require.Error(t, err)
})`
$DIR/core/services/keystore/dkgencrypt_test.go: `t.Run("creates a key", func(t *testing.T) {
defer reset()
ctx := testutils.Context(t)
key, err := ks.Create(ctx)
require.NoError(t, err)
retrievedKey, err := ks.Get(key.ID())
require.NoError(t, err)
require.Equal(t, key, retrievedKey)
})`
$DIR/core/services/keystore/dkgencrypt_test.go: `t.Run("imports and exports a key", func(t *testing.T) {
defer reset()
ctx := testutils.Context(t)
key, err := ks.Create(ctx)
require.NoError(t, err)
exportJSON, err := ks.Export(key.ID(), cltest.Password)
require.NoError(t, err)
_, err = ks.Delete(ctx, key.ID())
require.NoError(t, err)
_, err = ks.Get(key.ID())
require.Error(t, err)
importedKey, err := ks.Import(ctx, exportJSON, cltest.Password)
require.NoError(t, err)
require.Equal(t, key.ID(), importedKey.ID())
retrievedKey, err := ks.Get(key.ID())
require.NoError(t, err)
require.Equal(t, importedKey, retrievedKey)
})`
$DIR/core/services/keystore/dkgencrypt_test.go: `_, err = ks.Delete(ctx, key.ID())`
$DIR/core/services/keystore/dkgencrypt_test.go: `_, err = ks.Get(key.ID())`
$DIR/core/services/keystore/dkgencrypt_test.go: `t.Run("adds an externally created key / deletes a key", func(t *testing.T) {
defer reset()
ctx := testutils.Context(t)
newKey, err := dkgencryptkey.New()
require.NoError(t, err)
err = ks.Add(ctx, newKey)
require.NoError(t, err)
keys, err := ks.GetAll()
require.NoError(t, err)
require.Equal(t, 1, len(keys))
_, err = ks.Delete(ctx, newKey.ID())
require.NoError(t, err)
keys, err = ks.GetAll()
require.NoError(t, err)
require.Equal(t, 0, len(keys))
_, err = ks.Get(newKey.ID())
require.Error(t, err)
})`
$DIR/core/services/keystore/dkgencrypt_test.go: `err = ks.Add(ctx, newKey)`
$DIR/core/services/keystore/dkgencrypt_test.go: `_, err = ks.Delete(ctx, newKey.ID())`
$DIR/core/services/keystore/dkgencrypt_test.go: `keys, err = ks.GetAll()`
$DIR/core/services/keystore/dkgencrypt_test.go: `_, err = ks.Get(newKey.ID())`
$DIR/core/services/keystore/dkgencrypt_test.go: `t.Run("adds an externally created key/ensures it already exists", func(t *testing.T) {
defer reset()
ctx := testutils.Context(t)
newKey, err := dkgencryptkey.New()
assert.NoError(t, err)
err = ks.Add(ctx, newKey)
assert.NoError(t, err)
err = keyStore.DKGEncrypt().EnsureKey(ctx)
assert.NoError(t, err)
keys, err2 := ks.GetAll()
assert.NoError(t, err2)
require.Equal(t, 1, len(keys))
require.Equal(t, newKey.ID(), keys[0].ID())
require.Equal(t, newKey.PublicKey, keys[0].PublicKey)
})`
$DIR/core/services/keystore/dkgencrypt_test.go: `err = ks.Add(ctx, newKey)`
$DIR/core/services/keystore/dkgencrypt_test.go: `err = keyStore.DKGEncrypt().EnsureKey(ctx)`
$DIR/core/services/keystore/dkgencrypt_test.go: `err = keyStore.DKGEncrypt().EnsureKey(ctx)`
$DIR/core/services/keystore/dkgencrypt_test.go: `keys, err = ks.GetAll()`
$DIR/core/services/keystore/dkgencrypt_test.go: `.NewSqlxDB(t)`
$DIR/core/services/keystore/dkgencrypt_test.go: `.ExposedNewMaster(t, db)`
$DIR/core/services/keystore/dkgencrypt_test.go: `.DKGEncrypt()`
$DIR/core/services/keystore/dkgencrypt_test.go: `.Background()`
$DIR/core/services/keystore/dkgencrypt_test.go: `.Exec("DELETE FROM encrypted_key_rings")`
$DIR/core/services/keystore/dkgencrypt_test.go: `.ResetXXXTestOnly()`
$DIR/core/services/keystore/dkgencrypt_test.go: `.Run("initializes with an empty state", func(t *testing.T) {
defer reset()
keys, err := ks.GetAll()
require.NoError(t, err)
require.Equal(t, 0, len(keys))
})`
$DIR/core/services/keystore/dkgencrypt_test.go: `.GetAll()`
$DIR/core/services/keystore/dkgencrypt_test.go: `.Run("errors when getting non-existent ID", func(t *testing.T) {
defer reset()
_, err := ks.Get("non-existent-id")
require.Error(t, err)
})`
$DIR/core/services/keystore/dkgencrypt_test.go: `.Get("non-existent-id")`
$DIR/core/services/keystore/dkgencrypt_test.go: `.Run("creates a key", func(t *testing.T) {
defer reset()
ctx := testutils.Context(t)
key, err := ks.Create(ctx)
require.NoError(t, err)
retrievedKey, err := ks.Get(key.ID())
require.NoError(t, err)
require.Equal(t, key, retrievedKey)
})`
$DIR/core/services/keystore/dkgencrypt_test.go: `.Context(t)`
$DIR/core/services/keystore/dkgencrypt_test.go: `.Create(ctx)`
$DIR/core/services/keystore/dkgencrypt_test.go: `.Get(key.ID())`
$DIR/core/services/keystore/dkgencrypt_test.go: `.ID()`
$DIR/core/services/keystore/dkgencrypt_test.go: `.Run("imports and exports a key", func(t *testing.T) {
defer reset()
ctx := testutils.Context(t)
key, err := ks.Create(ctx)
require.NoError(t, err)
exportJSON, err := ks.Export(key.ID(), cltest.Password)
require.NoError(t, err)
_, err = ks.Delete(ctx, key.ID())
require.NoError(t, err)
_, err = ks.Get(key.ID())
require.Error(t, err)
importedKey, err := ks.Import(ctx, exportJSON, cltest.Password)
require.NoError(t, err)
require.Equal(t, key.ID(), importedKey.ID())
retrievedKey, err := ks.Get(key.ID())
require.NoError(t, err)
require.Equal(t, importedKey, retrievedKey)
})`
$DIR/core/services/keystore/dkgencrypt_test.go: `.Context(t)`
$DIR/core/services/keystore/dkgencrypt_test.go: `.Create(ctx)`
$DIR/core/services/keystore/dkgencrypt_test.go: `.Export(key.ID(), cltest.Password)`
$DIR/core/services/keystore/dkgencrypt_test.go: `.ID()`
$DIR/core/services/keystore/dkgencrypt_test.go: `.Delete(ctx, key.ID())`
$DIR/core/services/keystore/dkgencrypt_test.go: `.ID()`
$DIR/core/services/keystore/dkgencrypt_test.go: `.Get(key.ID())`
$DIR/core/services/keystore/dkgencrypt_test.go: `.ID()`
$DIR/core/services/keystore/dkgencrypt_test.go: `.Import(ctx, exportJSON, cltest.Password)`
$DIR/core/services/keystore/dkgencrypt_test.go: `.Get(key.ID())`
$DIR/core/services/keystore/dkgencrypt_test.go: `.ID()`
$DIR/core/services/keystore/dkgencrypt_test.go: `.Run("adds an externally created key / deletes a key", func(t *testing.T) {
defer reset()
ctx := testutils.Context(t)
newKey, err := dkgencryptkey.New()
require.NoError(t, err)
err = ks.Add(ctx, newKey)
require.NoError(t, err)
keys, err := ks.GetAll()
require.NoError(t, err)
require.Equal(t, 1, len(keys))
_, err = ks.Delete(ctx, newKey.ID())
require.NoError(t, err)
keys, err = ks.GetAll()
require.NoError(t, err)
require.Equal(t, 0, len(keys))
_, err = ks.Get(newKey.ID())
require.Error(t, err)
})`
$DIR/core/services/keystore/dkgencrypt_test.go: `.Context(t)`
$DIR/core/services/keystore/dkgencrypt_test.go: `.New()`
$DIR/core/services/keystore/dkgencrypt_test.go: `.Add(ctx, newKey)`
$DIR/core/services/keystore/dkgencrypt_test.go: `.GetAll()`
$DIR/core/services/keystore/dkgencrypt_test.go: `.Delete(ctx, newKey.ID())`
$DIR/core/services/keystore/dkgencrypt_test.go: `.ID()`
$DIR/core/services/keystore/dkgencrypt_test.go: `.GetAll()`
$DIR/core/services/keystore/dkgencrypt_test.go: `.Get(newKey.ID())`
$DIR/core/services/keystore/dkgencrypt_test.go: `.ID()`
$DIR/core/services/keystore/dkgencrypt_test.go: `.Run("adds an externally created key/ensures it already exists", func(t *testing.T) {
defer reset()
ctx := testutils.Context(t)
newKey, err := dkgencryptkey.New()
assert.NoError(t, err)
err = ks.Add(ctx, newKey)
assert.NoError(t, err)
err = keyStore.DKGEncrypt().EnsureKey(ctx)
assert.NoError(t, err)
keys, err2 := ks.GetAll()
assert.NoError(t, err2)
require.Equal(t, 1, len(keys))
require.Equal(t, newKey.ID(), keys[0].ID())
require.Equal(t, newKey.PublicKey, keys[0].PublicKey)
})`
$DIR/core/services/keystore/dkgencrypt_test.go: `.Context(t)`
$DIR/core/services/keystore/dkgencrypt_test.go: `.New()`
$DIR/core/services/keystore/dkgencrypt_test.go: `.Add(ctx, newKey)`
$DIR/core/services/keystore/dkgencrypt_test.go: `.DKGEncrypt()`
$DIR/core/services/keystore/dkgencrypt_test.go: `.EnsureKey(ctx)`
$DIR/core/services/keystore/dkgencrypt_test.go: `.GetAll()`
$DIR/core/services/keystore/dkgencrypt_test.go: `.Context(t)`
$DIR/core/services/keystore/dkgencrypt_test.go: `.GetAll()`
$DIR/core/services/keystore/dkgencrypt_test.go: `.DKGEncrypt()`
$DIR/core/services/keystore/dkgencrypt_test.go: `.EnsureKey(ctx)`
$DIR/core/services/keystore/dkgencrypt_test.go: `.GetAll()`
$DIR/core/services/keystore/dkgsign_test.go: `keyStore.ResetXXXTestOnly()`
$DIR/core/services/keystore/dkgsign_test.go: `t.Run("initializes with an empty state", func(t *testing.T) {
defer reset()
keys, err := ks.GetAll()
require.NoError(t, err)
require.Equal(t, 0, len(keys))
})`
$DIR/core/services/keystore/dkgsign_test.go: `t.Run("errors when getting non-existent ID", func(t *testing.T) {
defer reset()
_, err := ks.Get("non-existent-id")
require.Error(t, err)
})`
$DIR/core/services/keystore/dkgsign_test.go: `t.Run("creates a key", func(t *testing.T) {
defer reset()
ctx := testutils.Context(t)
key, err := ks.Create(ctx)
require.NoError(t, err)
retrievedKey, err := ks.Get(key.ID())
require.NoError(t, err)
require.Equal(t, key, retrievedKey)
})`
$DIR/core/services/keystore/dkgsign_test.go: `t.Run("imports and exports a key", func(t *testing.T) {
defer reset()
ctx := testutils.Context(t)
key, err := ks.Create(ctx)
require.NoError(t, err)
exportJSON, err := ks.Export(key.ID(), cltest.Password)
require.NoError(t, err)
_, err = ks.Delete(ctx, key.ID())
require.NoError(t, err)
_, err = ks.Get(key.ID())
require.Error(t, err)
importedKey, err := ks.Import(ctx, exportJSON, cltest.Password)
require.NoError(t, err)
require.Equal(t, key.ID(), importedKey.ID())
retrievedKey, err := ks.Get(key.ID())
require.NoError(t, err)
require.Equal(t, importedKey, retrievedKey)
})`
$DIR/core/services/keystore/dkgsign_test.go: `_, err = ks.Delete(ctx, key.ID())`
$DIR/core/services/keystore/dkgsign_test.go: `_, err = ks.Get(key.ID())`
$DIR/core/services/keystore/dkgsign_test.go: `t.Run("adds an externally created key / deletes a key", func(t *testing.T) {
defer reset()
ctx := testutils.Context(t)
newKey, err := dkgsignkey.New()
require.NoError(t, err)
err = ks.Add(ctx, newKey)
require.NoError(t, err)
keys, err := ks.GetAll()
require.NoError(t, err)
require.Equal(t, 1, len(keys))
_, err = ks.Delete(ctx, newKey.ID())
require.NoError(t, err)
keys, err = ks.GetAll()
require.NoError(t, err)
require.Equal(t, 0, len(keys))
_, err = ks.Get(newKey.ID())
require.Error(t, err)
})`
$DIR/core/services/keystore/dkgsign_test.go: `err = ks.Add(ctx, newKey)`
$DIR/core/services/keystore/dkgsign_test.go: `_, err = ks.Delete(ctx, newKey.ID())`
$DIR/core/services/keystore/dkgsign_test.go: `keys, err = ks.GetAll()`
$DIR/core/services/keystore/dkgsign_test.go: `_, err = ks.Get(newKey.ID())`
$DIR/core/services/keystore/dkgsign_test.go: `t.Run("adds an externally created key/ensures it already exists", func(t *testing.T) {
defer reset()
ctx := testutils.Context(t)
newKey, err := dkgsignkey.New()
assert.NoError(t, err)
err = ks.Add(ctx, newKey)
assert.NoError(t, err)
err = keyStore.DKGSign().EnsureKey(ctx)
assert.NoError(t, err)
keys, err2 := ks.GetAll()
assert.NoError(t, err2)
require.Equal(t, 1, len(keys))
require.Equal(t, newKey.ID(), keys[0].ID())
require.Equal(t, newKey.PublicKey, keys[0].PublicKey)
})`
$DIR/core/services/keystore/dkgsign_test.go: `err = ks.Add(ctx, newKey)`
$DIR/core/services/keystore/dkgsign_test.go: `err = keyStore.DKGSign().EnsureKey(ctx)`
$DIR/core/services/keystore/dkgsign_test.go: `err = keyStore.DKGSign().EnsureKey(ctx)`
$DIR/core/services/keystore/dkgsign_test.go: `keys, err = ks.GetAll()`
$DIR/core/services/keystore/dkgsign_test.go: `.NewSqlxDB(t)`
$DIR/core/services/keystore/dkgsign_test.go: `.ExposedNewMaster(t, db)`
$DIR/core/services/keystore/dkgsign_test.go: `.DKGSign()`
$DIR/core/services/keystore/dkgsign_test.go: `.Background()`
$DIR/core/services/keystore/dkgsign_test.go: `.Exec("DELETE FROM encrypted_key_rings")`
$DIR/core/services/keystore/dkgsign_test.go: `.ResetXXXTestOnly()`
$DIR/core/services/keystore/dkgsign_test.go: `.Run("initializes with an empty state", func(t *testing.T) {
defer reset()
keys, err := ks.GetAll()
require.NoError(t, err)
require.Equal(t, 0, len(keys))
})`
$DIR/core/services/keystore/dkgsign_test.go: `.GetAll()`
$DIR/core/services/keystore/dkgsign_test.go: `.Run("errors when getting non-existent ID", func(t *testing.T) {
defer reset()
_, err := ks.Get("non-existent-id")
require.Error(t, err)
})`
$DIR/core/services/keystore/dkgsign_test.go: `.Get("non-existent-id")`
$DIR/core/services/keystore/dkgsign_test.go: `.Run("creates a key", func(t *testing.T) {
defer reset()
ctx := testutils.Context(t)
key, err := ks.Create(ctx)
require.NoError(t, err)
retrievedKey, err := ks.Get(key.ID())
require.NoError(t, err)
require.Equal(t, key, retrievedKey)
})`
$DIR/core/services/keystore/dkgsign_test.go: `.Context(t)`
$DIR/core/services/keystore/dkgsign_test.go: `.Create(ctx)`
$DIR/core/services/keystore/dkgsign_test.go: `.Get(key.ID())`
$DIR/core/services/keystore/dkgsign_test.go: `.ID()`
$DIR/core/services/keystore/dkgsign_test.go: `.Run("imports and exports a key", func(t *testing.T) {
defer reset()
ctx := testutils.Context(t)
key, err := ks.Create(ctx)
require.NoError(t, err)
exportJSON, err := ks.Export(key.ID(), cltest.Password)
require.NoError(t, err)
_, err = ks.Delete(ctx, key.ID())
require.NoError(t, err)
_, err = ks.Get(key.ID())
require.Error(t, err)
importedKey, err := ks.Import(ctx, exportJSON, cltest.Password)
require.NoError(t, err)
require.Equal(t, key.ID(), importedKey.ID())
retrievedKey, err := ks.Get(key.ID())
require.NoError(t, err)
require.Equal(t, importedKey, retrievedKey)
})`
$DIR/core/services/keystore/dkgsign_test.go: `.Context(t)`
$DIR/core/services/keystore/dkgsign_test.go: `.Create(ctx)`
$DIR/core/services/keystore/dkgsign_test.go: `.Export(key.ID(), cltest.Password)`
$DIR/core/services/keystore/dkgsign_test.go: `.ID()`
$DIR/core/services/keystore/dkgsign_test.go: `.Delete(ctx, key.ID())`
$DIR/core/services/keystore/dkgsign_test.go: `.ID()`
$DIR/core/services/keystore/dkgsign_test.go: `.Get(key.ID())`
$DIR/core/services/keystore/dkgsign_test.go: `.ID()`
$DIR/core/services/keystore/dkgsign_test.go: `.Import(ctx, exportJSON, cltest.Password)`
$DIR/core/services/keystore/dkgsign_test.go: `.Get(key.ID())`
$DIR/core/services/keystore/dkgsign_test.go: `.ID()`
$DIR/core/services/keystore/dkgsign_test.go: `.Run("adds an externally created key / deletes a key", func(t *testing.T) {
defer reset()
ctx := testutils.Context(t)
newKey, err := dkgsignkey.New()
require.NoError(t, err)
err = ks.Add(ctx, newKey)
require.NoError(t, err)
keys, err := ks.GetAll()
require.NoError(t, err)
require.Equal(t, 1, len(keys))
_, err = ks.Delete(ctx, newKey.ID())
require.NoError(t, err)
keys, err = ks.GetAll()
require.NoError(t, err)
require.Equal(t, 0, len(keys))
_, err = ks.Get(newKey.ID())
require.Error(t, err)
})`
$DIR/core/services/keystore/dkgsign_test.go: `.Context(t)`
$DIR/core/services/keystore/dkgsign_test.go: `.New()`
$DIR/core/services/keystore/dkgsign_test.go: `.Add(ctx, newKey)`
$DIR/core/services/keystore/dkgsign_test.go: `.GetAll()`
$DIR/core/services/keystore/dkgsign_test.go: `.Delete(ctx, newKey.ID())`
$DIR/core/services/keystore/dkgsign_test.go: `.ID()`
$DIR/core/services/keystore/dkgsign_test.go: `.GetAll()`
$DIR/core/services/keystore/dkgsign_test.go: `.Get(newKey.ID())`
$DIR/core/services/keystore/dkgsign_test.go: `.ID()`
$DIR/core/services/keystore/dkgsign_test.go: `.Run("adds an externally created key/ensures it already exists", func(t *testing.T) {
defer reset()
ctx := testutils.Context(t)
newKey, err := dkgsignkey.New()
assert.NoError(t, err)
err = ks.Add(ctx, newKey)
assert.NoError(t, err)
err = keyStore.DKGSign().EnsureKey(ctx)
assert.NoError(t, err)
keys, err2 := ks.GetAll()
assert.NoError(t, err2)
require.Equal(t, 1, len(keys))
require.Equal(t, newKey.ID(), keys[0].ID())
require.Equal(t, newKey.PublicKey, keys[0].PublicKey)
})`
$DIR/core/services/keystore/dkgsign_test.go: `.Context(t)`
$DIR/core/services/keystore/dkgsign_test.go: `.New()`
$DIR/core/services/keystore/dkgsign_test.go: `.Add(ctx, newKey)`
$DIR/core/services/keystore/dkgsign_test.go: `.DKGSign()`
$DIR/core/services/keystore/dkgsign_test.go: `.EnsureKey(ctx)`
$DIR/core/services/keystore/dkgsign_test.go: `.GetAll()`
$DIR/core/services/keystore/dkgsign_test.go: `.Context(t)`
$DIR/core/services/keystore/dkgsign_test.go: `.GetAll()`
$DIR/core/services/keystore/dkgsign_test.go: `.DKGSign()`
$DIR/core/services/keystore/dkgsign_test.go: `.EnsureKey(ctx)`
$DIR/core/services/keystore/dkgsign_test.go: `.GetAll()`
$DIR/core/services/keystore/eth_test.go: `keyStore.ResetXXXTestOnly()`
$DIR/core/services/keystore/eth_test.go: `t.Run("Create / GetAll / Get", func(t *testing.T) {
ctx := testutils.Context(t)
defer reset()
key, err := ethKeyStore.Create(ctx, &cltest.FixtureChainID)
require.NoError(t, err)
retrievedKeys, err := ethKeyStore.GetAll(ctx)
require.NoError(t, err)
require.Equal(t, 1, len(retrievedKeys))
require.Equal(t, key.Address, retrievedKeys[0].Address)
foundKey, err := ethKeyStore.Get(ctx, key.Address.Hex())
require.NoError(t, err)
require.Equal(t, key, foundKey)
// adds ethkey.State
cltest.AssertCount(t, db, statesTableName, 1)
var state ethkey.State
sql := fmt.Sprintf(`SELECT address, disabled, evm_chain_id, created_at, updated_at from %s LIMIT 1`, statesTableName)
require.NoError(t, db.GetContext(ctx, &state, sql))
require.Equal(t, state.Address.Address(), retrievedKeys[0].Address)
// adds key to db
keyStore.ResetXXXTestOnly()
require.NoError(t, keyStore.Unlock(ctx, cltest.Password))
retrievedKeys, err = ethKeyStore.GetAll(ctx)
require.NoError(t, err)
require.Equal(t, 1, len(retrievedKeys))
require.Equal(t, key.Address, retrievedKeys[0].Address)
// adds 2nd key
_, err = ethKeyStore.Create(ctx, &cltest.FixtureChainID)
require.NoError(t, err)
retrievedKeys, err = ethKeyStore.GetAll(ctx)
require.NoError(t, err)
require.Equal(t, 2, len(retrievedKeys))
})`
$DIR/core/services/keystore/eth_test.go: `cltest.AssertCount(t, db, statesTableName, 1)`
$DIR/core/services/keystore/eth_test.go: `keyStore.ResetXXXTestOnly()`
$DIR/core/services/keystore/eth_test.go: `retrievedKeys, err = ethKeyStore.GetAll(ctx)`
$DIR/core/services/keystore/eth_test.go: `_, err = ethKeyStore.Create(ctx, &cltest.FixtureChainID)`
$DIR/core/services/keystore/eth_test.go: `retrievedKeys, err = ethKeyStore.GetAll(ctx)`
$DIR/core/services/keystore/eth_test.go: `t.Run("GetAll ordering", func(t *testing.T) {
ctx := testutils.Context(t)
defer reset()
var keys []ethkey.KeyV2
for i := 0; i < 5; i++ {
key, err := ethKeyStore.Create(ctx, &cltest.FixtureChainID)
require.NoError(t, err)
keys = append(keys, key)
}
retrievedKeys, err := ethKeyStore.GetAll(ctx)
require.NoError(t, err)
require.Equal(t, 5, len(retrievedKeys))
sort.Slice(keys, func(i, j int) bool { return keys[i].Cmp(keys[j]) < 0 })
assert.Equal(t, keys, retrievedKeys)
})`
$DIR/core/services/keystore/eth_test.go: `keys = append(keys, key)`
$DIR/core/services/keystore/eth_test.go: `sort.Slice(keys, func(i, j int) bool { return keys[i].Cmp(keys[j]) < 0 })`
$DIR/core/services/keystore/eth_test.go: `t.Run("RemoveKey", func(t *testing.T) {
ctx := testutils.Context(t)
defer reset()
key, err := ethKeyStore.Create(ctx, &cltest.FixtureChainID)
require.NoError(t, err)
_, err = ethKeyStore.Delete(ctx, key.ID())
require.NoError(t, err)
retrievedKeys, err := ethKeyStore.GetAll(ctx)
require.NoError(t, err)
require.Equal(t, 0, len(retrievedKeys))
cltest.AssertCount(t, db, statesTableName, 0)
})`
$DIR/core/services/keystore/eth_test.go: `_, err = ethKeyStore.Delete(ctx, key.ID())`
$DIR/core/services/keystore/eth_test.go: `cltest.AssertCount(t, db, statesTableName, 0)`
$DIR/core/services/keystore/eth_test.go: `t.Run("Delete removes key even if evm.txes are present", func(t *testing.T) {
ctx := testutils.Context(t)
defer reset()
key, err := ethKeyStore.Create(ctx, &cltest.FixtureChainID)
require.NoError(t, err)
// ensure at least one state is present
cltest.AssertCount(t, db, statesTableName, 1)
// add one eth_tx
txStore := cltest.NewTestTxStore(t, db)
cltest.MustInsertConfirmedEthTxWithLegacyAttempt(t, txStore, 0, 42, key.Address)
_, err = ethKeyStore.Delete(ctx, key.ID())
require.NoError(t, err)
retrievedKeys, err := ethKeyStore.GetAll(ctx)
require.NoError(t, err)
require.Equal(t, 0, len(retrievedKeys))
cltest.AssertCount(t, db, statesTableName, 0)
})`
$DIR/core/services/keystore/eth_test.go: `cltest.AssertCount(t, db, statesTableName, 1)`
$DIR/core/services/keystore/eth_test.go: `cltest.MustInsertConfirmedEthTxWithLegacyAttempt(t, txStore, 0, 42, key.Address)`
$DIR/core/services/keystore/eth_test.go: `_, err = ethKeyStore.Delete(ctx, key.ID())`
$DIR/core/services/keystore/eth_test.go: `cltest.AssertCount(t, db, statesTableName, 0)`
$DIR/core/services/keystore/eth_test.go: `t.Run("EnsureKeys / EnabledKeysForChain", func(t *testing.T) {
ctx := testutils.Context(t)
defer reset()
err := ethKeyStore.EnsureKeys(ctx, &cltest.FixtureChainID)
assert.NoError(t, err)
sendingKeys1, err := ethKeyStore.EnabledKeysForChain(ctx, testutils.FixtureChainID)
assert.NoError(t, err)
require.Equal(t, 1, len(sendingKeys1))
cltest.AssertCount(t, db, statesTableName, 1)
err = ethKeyStore.EnsureKeys(ctx, &cltest.FixtureChainID)
assert.NoError(t, err)
sendingKeys2, err := ethKeyStore.EnabledKeysForChain(ctx, testutils.FixtureChainID)
assert.NoError(t, err)
require.Equal(t, 1, len(sendingKeys2))
require.Equal(t, sendingKeys1, sendingKeys2)
})`
$DIR/core/services/keystore/eth_test.go: `cltest.AssertCount(t, db, statesTableName, 1)`
$DIR/core/services/keystore/eth_test.go: `err = ethKeyStore.EnsureKeys(ctx, &cltest.FixtureChainID)`
$DIR/core/services/keystore/eth_test.go: `t.Run("EnabledKeysForChain with specified chain ID", func(t *testing.T) {
ctx := testutils.Context(t)
defer reset()
key, err := ethKeyStore.Create(ctx, testutils.FixtureChainID)
require.NoError(t, err)
key2, err := ethKeyStore.Create(ctx, big.NewInt(1337))
require.NoError(t, err)
keys, err := ethKeyStore.EnabledKeysForChain(ctx, testutils.FixtureChainID)
require.NoError(t, err)
require.Len(t, keys, 1)
require.Equal(t, key, keys[0])
keys, err = ethKeyStore.EnabledKeysForChain(ctx, big.NewInt(1337))
require.NoError(t, err)
require.Len(t, keys, 1)
require.Equal(t, key2, keys[0])
_, err = ethKeyStore.EnabledKeysForChain(ctx, nil)
assert.Error(t, err)
assert.EqualError(t, err, "chainID must be non-nil")
})`
$DIR/core/services/keystore/eth_test.go: `keys, err = ethKeyStore.EnabledKeysForChain(ctx, big.NewInt(1337))`
$DIR/core/services/keystore/eth_test.go: `_, err = ethKeyStore.EnabledKeysForChain(ctx, nil)`
$DIR/core/services/keystore/eth_test.go: `testutils.AssertCount(t, db, "evm.key_states", 2)`
$DIR/core/services/keystore/eth_test.go: `enabledAddresses, err = ethKeyStore.EnabledAddressesForChain(ctx, big.NewInt(1337))`
$DIR/core/services/keystore/eth_test.go: `_, err = ethKeyStore.EnabledAddressesForChain(ctx, nil)`
$DIR/core/services/keystore/eth_test.go: `err = ethKeyStore.Disable(ctx, key.Address, testutils.FixtureChainID)`
$DIR/core/services/keystore/eth_test.go: `enabledAddresses, err = ethKeyStore.EnabledAddressesForChain(ctx, testutils.FixtureChainID)`
$DIR/core/services/keystore/eth_test.go: `enabledAddresses, err = ethKeyStore.EnabledAddressesForChain(ctx, big.NewInt(1337))`
$DIR/core/services/keystore/eth_test.go: `t.Run("should error when no addresses", func(t *testing.T) {
ctx1 := testutils.Context(t)
_, err := ethKeyStore.GetRoundRobinAddress(ctx1, testutils.FixtureChainID)
require.Error(t, err)
})`
$DIR/core/services/keystore/eth_test.go: `t.Run("with no address filter, rotates between all enabled addresses", func(t *testing.T) {
address1, err := ethKeyStore.GetRoundRobinAddress(ctx, testutils.FixtureChainID)
require.NoError(t, err)
address2, err := ethKeyStore.GetRoundRobinAddress(ctx, testutils.FixtureChainID)
require.NoError(t, err)
address3, err := ethKeyStore.GetRoundRobinAddress(ctx, testutils.FixtureChainID)
require.NoError(t, err)
address4, err := ethKeyStore.GetRoundRobinAddress(ctx, testutils.FixtureChainID)
require.NoError(t, err)
address5, err := ethKeyStore.GetRoundRobinAddress(ctx, testutils.FixtureChainID)
require.NoError(t, err)
address6, err := ethKeyStore.GetRoundRobinAddress(ctx, testutils.FixtureChainID)
require.NoError(t, err)
assert.NotEqual(t, address1, address2)
assert.NotEqual(t, address2, address3)
assert.NotEqual(t, address1, address3)
assert.Equal(t, address1, address4)
assert.Equal(t, address2, address5)
assert.Equal(t, address3, address6)
})`
$DIR/core/services/keystore/eth_test.go: `t.Run("with address filter, rotates between given addresses that match sending keys", func(t *testing.T) {
{
// k3 is a disabled address for FixtureChainID so even though it's whitelisted, it will be ignored
addresses := []common.Address{k4.Address, k3.Address, k1.Address, k2.Address, testutils.NewAddress()}
address1, err := ethKeyStore.GetRoundRobinAddress(ctx, testutils.FixtureChainID, addresses...)
require.NoError(t, err)
address2, err := ethKeyStore.GetRoundRobinAddress(ctx, testutils.FixtureChainID, addresses...)
require.NoError(t, err)
address3, err := ethKeyStore.GetRoundRobinAddress(ctx, testutils.FixtureChainID, addresses...)
require.NoError(t, err)
address4, err := ethKeyStore.GetRoundRobinAddress(ctx, testutils.FixtureChainID, addresses...)
require.NoError(t, err)
assert.NotEqual(t, k3.Address, address1)
assert.NotEqual(t, k3.Address, address2)
assert.NotEqual(t, k3.Address, address3)
assert.NotEqual(t, address1, address2)
assert.NotEqual(t, address1, address3)
assert.NotEqual(t, address2, address3)
assert.Equal(t, address1, address4)
}
{
// k2 and k4 are disabled address for SimulatedChainID so even though it's whitelisted, it will be ignored
addresses := []common.Address{k4.Address, k3.Address, k1.Address, k2.Address, testutils.NewAddress()}
address1, err := ethKeyStore.GetRoundRobinAddress(ctx, testutils.SimulatedChainID, addresses...)
require.NoError(t, err)
address2, err := ethKeyStore.GetRoundRobinAddress(ctx, testutils.SimulatedChainID, addresses...)
require.NoError(t, err)
address3, err := ethKeyStore.GetRoundRobinAddress(ctx, testutils.SimulatedChainID, addresses...)
require.NoError(t, err)
address4, err := ethKeyStore.GetRoundRobinAddress(ctx, testutils.SimulatedChainID, addresses...)
require.NoError(t, err)
assert.True(t, address1 == k1.Address || address1 == k3.Address)
assert.True(t, address2 == k1.Address || address2 == k3.Address)
assert.NotEqual(t, address1, address2)
assert.Equal(t, address1, address3)
assert.Equal(t, address2, address4)
}
})`
$DIR/core/services/keystore/eth_test.go: `keyStore.ResetXXXTestOnly()`
$DIR/core/services/keystore/eth_test.go: `t.Run("initializes with an empty state", func(t *testing.T) {
ctx := testutils.Context(t)
defer reset()
keys, err := ks.GetAll(ctx)
require.NoError(t, err)
require.Equal(t, 0, len(keys))
})`
$DIR/core/services/keystore/eth_test.go: `t.Run("errors when getting non-existent ID", func(t *testing.T) {
ctx := testutils.Context(t)
defer reset()
_, err := ks.Get(ctx, "non-existent-id")
require.Error(t, err)
})`
$DIR/core/services/keystore/eth_test.go: `t.Run("creates a key", func(t *testing.T) {
ctx := testutils.Context(t)
defer reset()
key, err := ks.Create(ctx, &cltest.FixtureChainID)
require.NoError(t, err)
retrievedKey, err := ks.Get(ctx, key.ID())
require.NoError(t, err)
require.Equal(t, key, retrievedKey)
})`
$DIR/core/services/keystore/eth_test.go: `t.Run("imports and exports a key", func(t *testing.T) {
ctx := testutils.Context(t)
defer reset()
key, err := ks.Create(ctx, &cltest.FixtureChainID)
require.NoError(t, err)
exportJSON, err := ks.Export(ctx, key.ID(), cltest.Password)
require.NoError(t, err)
_, err = ks.Delete(ctx, key.ID())
require.NoError(t, err)
_, err = ks.Get(ctx, key.ID())
require.Error(t, err)
importedKey, err := ks.Import(ctx, exportJSON, cltest.Password, &cltest.FixtureChainID)
require.NoError(t, err)
require.Equal(t, key.ID(), importedKey.ID())
retrievedKey, err := ks.Get(ctx, key.ID())
require.NoError(t, err)
require.Equal(t, importedKey, retrievedKey)
})`
$DIR/core/services/keystore/eth_test.go: `_, err = ks.Delete(ctx, key.ID())`
$DIR/core/services/keystore/eth_test.go: `_, err = ks.Get(ctx, key.ID())`
$DIR/core/services/keystore/eth_test.go: `t.Run("adds an externally created key / deletes a key", func(t *testing.T) {
ctx := testutils.Context(t)
defer reset()
newKey, err := ethkey.NewV2()
require.NoError(t, err)
ks.XXXTestingOnlyAdd(ctx, newKey)
keys, err := ks.GetAll(ctx)
require.NoError(t, err)
assert.Equal(t, 1, len(keys))
_, err = ks.Delete(ctx, newKey.ID())
require.NoError(t, err)
keys, err = ks.GetAll(ctx)
require.NoError(t, err)
assert.Equal(t, 0, len(keys))
_, err = ks.Get(ctx, newKey.ID())
assert.Error(t, err)
_, err = ks.Delete(ctx, newKey.ID())
assert.Error(t, err)
})`
$DIR/core/services/keystore/eth_test.go: `ks.XXXTestingOnlyAdd(ctx, newKey)`
$DIR/core/services/keystore/eth_test.go: `_, err = ks.Delete(ctx, newKey.ID())`
$DIR/core/services/keystore/eth_test.go: `keys, err = ks.GetAll(ctx)`
$DIR/core/services/keystore/eth_test.go: `_, err = ks.Get(ctx, newKey.ID())`
$DIR/core/services/keystore/eth_test.go: `_, err = ks.Delete(ctx, newKey.ID())`
$DIR/core/services/keystore/eth_test.go: `t.Run("imports a key exported from a v1 keystore", func(t *testing.T) {
ctx := testutils.Context(t)
exportedKey := `{"address":"0dd359b4f22a30e44b2fd744b679971941865820","crypto":{"cipher":"aes-128-ctr","ciphertext":"b30af964a3b3f37894e599446b4cf2314bbfcd1062e6b35b620d3d20bd9965cc","cipherparams":{"iv":"58a8d75629cc1945da7cf8c24520d1dc"},"kdf":"scrypt","kdfparams":{"dklen":32,"n":262144,"p":1,"r":8,"salt":"c352887e9d427d8a6a1869082619b73fac4566082a99f6e367d126f11b434f28"},"mac":"fd76a588210e0bf73d01332091e0e83a4584ee2df31eaec0e27f9a1b94f024b4"},"id":"a5ee0802-1d7b-45b6-aeb8-ea8a3351e715","version":3}`
importedKey, err := ks.Import(ctx, []byte(exportedKey), "p4SsW0rD1!@#_", &cltest.FixtureChainID)
require.NoError(t, err)
assert.Equal(t, "0x0dd359b4f22a30E44b2fD744B679971941865820", importedKey.ID())
k, err := ks.Import(ctx, []byte(exportedKey), cltest.Password, &cltest.FixtureChainID)
assert.Empty(t, k)
assert.Error(t, err)
})`
$DIR/core/services/keystore/eth_test.go: `t.Run("fails to export a non-existent key", func(t *testing.T) {
ctx := testutils.Context(t)
k, err := ks.Export(ctx, "non-existent", cltest.Password)
assert.Empty(t, k)
assert.Error(t, err)
})`
$DIR/core/services/keystore/eth_test.go: `t.Run("returns states for keys", func(t *testing.T) {
ctx := testutils.Context(t)
k1, err := ethkey.NewV2()
require.NoError(t, err)
k2, err := ethkey.NewV2()
require.NoError(t, err)
ks.XXXTestingOnlyAdd(ctx, k1)
ks.XXXTestingOnlyAdd(ctx, k2)
require.NoError(t, ks.Add(ctx, k1.Address, testutils.FixtureChainID))
require.NoError(t, ks.Enable(ctx, k1.Address, testutils.FixtureChainID))
states, err := ks.GetStatesForKeys(ctx, []ethkey.KeyV2{k1, k2})
require.NoError(t, err)
assert.Len(t, states, 1)
chainStates, err := ks.GetStatesForChain(ctx, testutils.FixtureChainID)
require.NoError(t, err)
assert.Len(t, chainStates, 2) // one created here, one created above
chainStates, err = ks.GetStatesForChain(ctx, testutils.SimulatedChainID)
require.NoError(t, err)
assert.Len(t, chainStates, 0)
})`
$DIR/core/services/keystore/eth_test.go: `ks.XXXTestingOnlyAdd(ctx, k1)`
$DIR/core/services/keystore/eth_test.go: `ks.XXXTestingOnlyAdd(ctx, k2)`
$DIR/core/services/keystore/eth_test.go: `chainStates, err = ks.GetStatesForChain(ctx, testutils.SimulatedChainID)`
$DIR/core/services/keystore/eth_test.go: `close(chDone)`
$DIR/core/services/keystore/eth_test.go: `count.Add(1)`
$DIR/core/services/keystore/eth_test.go: `<-chSub`
$DIR/core/services/keystore/eth_test.go: `count.Store(0)`
$DIR/core/services/keystore/eth_test.go: `assertCountAtLeast(1)`
$DIR/core/services/keystore/eth_test.go: `drainAndReset()`
$DIR/core/services/keystore/eth_test.go: `assertCountAtLeast(1)`
$DIR/core/services/keystore/eth_test.go: `drainAndReset()`
$DIR/core/services/keystore/eth_test.go: `assertCountAtLeast(1)`
$DIR/core/services/keystore/eth_test.go: `drainAndReset()`
$DIR/core/services/keystore/eth_test.go: `t.Run("already existing disabled key gets enabled", func(t *testing.T) {
ctx := testutils.Context(t)
k, _ := cltest.MustInsertRandomKeyNoChains(t, ks)
require.NoError(t, ks.Add(ctx, k.Address, testutils.SimulatedChainID))
require.NoError(t, ks.Disable(ctx, k.Address, testutils.SimulatedChainID))
require.NoError(t, ks.Enable(ctx, k.Address, testutils.SimulatedChainID))
key, err := ks.GetState(ctx, k.Address.Hex(), testutils.SimulatedChainID)
require.NoError(t, err)
require.Equal(t, key.Disabled, false)
})`
$DIR/core/services/keystore/eth_test.go: `t.Run("creates key, deletes it unsafely and then enable creates it again", func(t *testing.T) {
ctx := testutils.Context(t)
k, _ := cltest.MustInsertRandomKeyNoChains(t, ks)
require.NoError(t, ks.Add(ctx, k.Address, testutils.SimulatedChainID))
_, err := db.Exec("DELETE FROM evm.key_states WHERE address = $1", k.Address)
require.NoError(t, err)
require.NoError(t, ks.Enable(ctx, k.Address, testutils.SimulatedChainID))
key, err := ks.GetState(ctx, k.Address.Hex(), testutils.SimulatedChainID)
require.NoError(t, err)
require.Equal(t, key.Disabled, false)
})`
$DIR/core/services/keystore/eth_test.go: `t.Run("creates key and enables it if it exists in the keystore, but is missing from key states db table", func(t *testing.T) {
ctx := testutils.Context(t)
k, _ := cltest.MustInsertRandomKeyNoChains(t, ks)
require.NoError(t, ks.Enable(ctx, k.Address, testutils.SimulatedChainID))
key, err := ks.GetState(ctx, k.Address.Hex(), testutils.SimulatedChainID)
require.NoError(t, err)
require.Equal(t, key.Disabled, false)
})`
$DIR/core/services/keystore/eth_test.go: `t.Run("creates one unique key per chain if none exist", func(t *testing.T) {
ctx := testutils.Context(t)
db := pgtest.NewSqlxDB(t)
keyStore := cltest.NewKeyStore(t, db)
ks := keyStore.Eth()
testutils.AssertCount(t, db, "evm.key_states", 0)
err := ks.EnsureKeys(ctx, testutils.FixtureChainID, testutils.SimulatedChainID)
require.NoError(t, err)
testutils.AssertCount(t, db, "evm.key_states", 2)
keys, err := ks.GetAll(ctx)
require.NoError(t, err)
assert.Len(t, keys, 2)
})`
$DIR/core/services/keystore/eth_test.go: `testutils.AssertCount(t, db, "evm.key_states", 0)`
$DIR/core/services/keystore/eth_test.go: `testutils.AssertCount(t, db, "evm.key_states", 2)`
$DIR/core/services/keystore/eth_test.go: `t.Run("does nothing if a key exists for a chain", func(t *testing.T) {
ctx := testutils.Context(t)
db := pgtest.NewSqlxDB(t)
keyStore := cltest.NewKeyStore(t, db)
ks := keyStore.Eth()
// Add one enabled key
_, err := ks.Create(ctx, testutils.FixtureChainID)
require.NoError(t, err)
testutils.AssertCount(t, db, "evm.key_states", 1)
keys, err := ks.GetAll(ctx)
require.NoError(t, err)
assert.Len(t, keys, 1)
// this adds one more key for the additional chain
err = ks.EnsureKeys(ctx, testutils.FixtureChainID, testutils.SimulatedChainID)
require.NoError(t, err)
testutils.AssertCount(t, db, "evm.key_states", 2)
keys, err = ks.GetAll(ctx)
require.NoError(t, err)
assert.Len(t, keys, 2)
})`
$DIR/core/services/keystore/eth_test.go: `testutils.AssertCount(t, db, "evm.key_states", 1)`
$DIR/core/services/keystore/eth_test.go: `err = ks.EnsureKeys(ctx, testutils.FixtureChainID, testutils.SimulatedChainID)`
$DIR/core/services/keystore/eth_test.go: `testutils.AssertCount(t, db, "evm.key_states", 2)`
$DIR/core/services/keystore/eth_test.go: `keys, err = ks.GetAll(ctx)`
$DIR/core/services/keystore/eth_test.go: `testutils.AssertCount(t, db, "evm.key_states", 1)`
$DIR/core/services/keystore/eth_test.go: `err = ks.Disable(ctx, k.Address, testutils.FixtureChainID)`
$DIR/core/services/keystore/eth_test.go: `err = ks.EnsureKeys(ctx, testutils.FixtureChainID)`
$DIR/core/services/keystore/eth_test.go: `testutils.AssertCount(t, db, "evm.key_states", 1)`
$DIR/core/services/keystore/eth_test.go: `keys, err = ks.GetAll(ctx)`
$DIR/core/services/keystore/eth_test.go: `cltest.MustInsertRandomKey(t, ks, *ubig.New(testutils.SimulatedChainID))`
$DIR/core/services/keystore/eth_test.go: `testutils.AssertCount(t, db, "evm.key_states", 4)`
$DIR/core/services/keystore/eth_test.go: `_, err = ks.GetState(ctx, addr1.Hex(), testutils.FixtureChainID)`
$DIR/core/services/keystore/eth_test.go: `_, err = ks.GetState(ctx, addr1.Hex(), testutils.SimulatedChainID)`
$DIR/core/services/keystore/eth_test.go: `testutils.AssertCount(t, db, "evm.key_states", 2)`
$DIR/core/services/keystore/eth_test.go: `keys, err = ks.GetAll(ctx)`
$DIR/core/services/keystore/eth_test.go: `_, err = ks.GetState(ctx, addr1.Hex(), testutils.FixtureChainID)`
$DIR/core/services/keystore/eth_test.go: `_, err = ks.GetState(ctx, addr1.Hex(), testutils.SimulatedChainID)`
$DIR/core/services/keystore/eth_test.go: `_, err = ks.GetState(ctx, addr2.Hex(), testutils.FixtureChainID)`
$DIR/core/services/keystore/eth_test.go: `t.Run("enabling the same key multiple times does not create duplicate states", func(t *testing.T) {
ctx2 := testutils.Context(t)
require.NoError(t, ks.Enable(ctx2, k1.Address, testutils.FixtureChainID))
require.NoError(t, ks.Enable(ctx2, k1.Address, testutils.FixtureChainID))
require.NoError(t, ks.Enable(ctx2, k1.Address, testutils.FixtureChainID))
require.NoError(t, ks.Enable(ctx2, k1.Address, testutils.FixtureChainID))
states, err := ks.GetStatesForKeys(ctx2, []ethkey.KeyV2{k1})
require.NoError(t, err)
assert.Len(t, states, 2)
var cids []*big.Int
for i := range states {
cid := states[i].EVMChainID.ToInt()
cids = append(cids, cid)
}
assert.Contains(t, cids, testutils.FixtureChainID)
assert.Contains(t, cids, testutils.SimulatedChainID)
for _, s := range states {
assert.Equal(t, addr1, s.Address.Address())
}
})`
$DIR/core/services/keystore/eth_test.go: `cids = append(cids, cid)`
$DIR/core/services/keystore/eth_test.go: `t.Run("returns nil when key is enabled for given chain", func(t *testing.T) {
err := ks.CheckEnabled(ctx, addr1, testutils.FixtureChainID)
assert.NoError(t, err)
err = ks.CheckEnabled(ctx, addr1, testutils.SimulatedChainID)
assert.NoError(t, err)
})`
$DIR/core/services/keystore/eth_test.go: `err = ks.CheckEnabled(ctx, addr1, testutils.SimulatedChainID)`
$DIR/core/services/keystore/eth_test.go: `t.Run("returns error when key does not exist", func(t *testing.T) {
addr := utils.RandomAddress()
err := ks.CheckEnabled(ctx, addr, testutils.FixtureChainID)
assert.Error(t, err)
require.Contains(t, err.Error(), fmt.Sprintf("no eth key exists with address %s", addr.Hex()))
})`
$DIR/core/services/keystore/eth_test.go: `t.Run("returns error when key exists but has never been enabled (no state) for the given chain", func(t *testing.T) {
err := ks.CheckEnabled(ctx, addr3, testutils.FixtureChainID)
assert.Error(t, err)
require.Contains(t, err.Error(), fmt.Sprintf("eth key with address %s exists but is has not been enabled for chain 0 (enabled only for chain IDs: 1337)", addr3.Hex()))
})`
$DIR/core/services/keystore/eth_test.go: `t.Run("creates key, deletes it unsafely and then enable creates it again", func(t *testing.T) {
ctx := testutils.Context(t)
k, _ := cltest.MustInsertRandomKeyNoChains(t, ks)
require.NoError(t, ks.Add(ctx, k.Address, testutils.SimulatedChainID))
_, err := db.Exec("DELETE FROM evm.key_states WHERE address = $1", k.Address)
require.NoError(t, err)
require.NoError(t, ks.Disable(ctx, k.Address, testutils.SimulatedChainID))
key, err := ks.GetState(ctx, k.Address.Hex(), testutils.SimulatedChainID)
require.NoError(t, err)
require.Equal(t, key.Disabled, true)
})`
$DIR/core/services/keystore/eth_test.go: `t.Run("creates key and enables it if it exists in the keystore, but is missing from key states db table", func(t *testing.T) {
ctx := testutils.Context(t)
k, _ := cltest.MustInsertRandomKeyNoChains(t, ks)
require.NoError(t, ks.Disable(ctx, k.Address, testutils.SimulatedChainID))
key, err := ks.GetState(ctx, k.Address.Hex(), testutils.SimulatedChainID)
require.NoError(t, err)
require.Equal(t, key.Disabled, true)
})`
$DIR/core/services/keystore/eth_test.go: `.NewSqlxDB(t)`
$DIR/core/services/keystore/eth_test.go: `.ExposedNewMaster(t, db)`
$DIR/core/services/keystore/eth_test.go: `.Unlock(testutils.Context(t), cltest.Password)`
$DIR/core/services/keystore/eth_test.go: `.Context(t)`
$DIR/core/services/keystore/eth_test.go: `.Eth()`
$DIR/core/services/keystore/eth_test.go: `.Background()`
$DIR/core/services/keystore/eth_test.go: `.ResetXXXTestOnly()`
$DIR/core/services/keystore/eth_test.go: `.Run("Create / GetAll / Get", func(t *testing.T) {
ctx := testutils.Context(t)
defer reset()
key, err := ethKeyStore.Create(ctx, &cltest.FixtureChainID)
require.NoError(t, err)
retrievedKeys, err := ethKeyStore.GetAll(ctx)
require.NoError(t, err)
require.Equal(t, 1, len(retrievedKeys))
require.Equal(t, key.Address, retrievedKeys[0].Address)
foundKey, err := ethKeyStore.Get(ctx, key.Address.Hex())
require.NoError(t, err)
require.Equal(t, key, foundKey)
// adds ethkey.State
cltest.AssertCount(t, db, statesTableName, 1)
var state ethkey.State
sql := fmt.Sprintf(`SELECT address, disabled, evm_chain_id, created_at, updated_at from %s LIMIT 1`, statesTableName)
require.NoError(t, db.GetContext(ctx, &state, sql))
require.Equal(t, state.Address.Address(), retrievedKeys[0].Address)
// adds key to db
keyStore.ResetXXXTestOnly()
require.NoError(t, keyStore.Unlock(ctx, cltest.Password))
retrievedKeys, err = ethKeyStore.GetAll(ctx)
require.NoError(t, err)
require.Equal(t, 1, len(retrievedKeys))
require.Equal(t, key.Address, retrievedKeys[0].Address)
// adds 2nd key
_, err = ethKeyStore.Create(ctx, &cltest.FixtureChainID)
require.NoError(t, err)
retrievedKeys, err = ethKeyStore.GetAll(ctx)
require.NoError(t, err)
require.Equal(t, 2, len(retrievedKeys))
})`
$DIR/core/services/keystore/eth_test.go: `.Context(t)`
$DIR/core/services/keystore/eth_test.go: `.Create(ctx, &cltest.FixtureChainID)`
$DIR/core/services/keystore/eth_test.go: `.GetAll(ctx)`
$DIR/core/services/keystore/eth_test.go: `.Get(ctx, key.Address.Hex())`
$DIR/core/services/keystore/eth_test.go: `.Address.Hex()`
$DIR/core/services/keystore/eth_test.go: `.AssertCount(t, db, statesTableName, 1)`
$DIR/core/services/keystore/eth_test.go: `.Sprintf(`SELECT address, disabled, evm_chain_id, created_at, updated_at from %s LIMIT 1`, statesTableName)`
$DIR/core/services/keystore/eth_test.go: `.ResetXXXTestOnly()`
$DIR/core/services/keystore/eth_test.go: `.GetAll(ctx)`
$DIR/core/services/keystore/eth_test.go: `.Create(ctx, &cltest.FixtureChainID)`
$DIR/core/services/keystore/eth_test.go: `.GetAll(ctx)`
$DIR/core/services/keystore/eth_test.go: `.Run("GetAll ordering", func(t *testing.T) {
ctx := testutils.Context(t)
defer reset()
var keys []ethkey.KeyV2
for i := 0; i < 5; i++ {
key, err := ethKeyStore.Create(ctx, &cltest.FixtureChainID)
require.NoError(t, err)
keys = append(keys, key)
}
retrievedKeys, err := ethKeyStore.GetAll(ctx)
require.NoError(t, err)
require.Equal(t, 5, len(retrievedKeys))
sort.Slice(keys, func(i, j int) bool { return keys[i].Cmp(keys[j]) < 0 })
assert.Equal(t, keys, retrievedKeys)
})`
$DIR/core/services/keystore/eth_test.go: `.Context(t)`
$DIR/core/services/keystore/eth_test.go: `.Create(ctx, &cltest.FixtureChainID)`
$DIR/core/services/keystore/eth_test.go: `.GetAll(ctx)`
$DIR/core/services/keystore/eth_test.go: `.Slice(keys, func(i, j int) bool { return keys[i].Cmp(keys[j]) < 0 })`
$DIR/core/services/keystore/eth_test.go: `.Cmp(keys[j])`
$DIR/core/services/keystore/eth_test.go: `.Run("RemoveKey", func(t *testing.T) {
ctx := testutils.Context(t)
defer reset()
key, err := ethKeyStore.Create(ctx, &cltest.FixtureChainID)
require.NoError(t, err)
_, err = ethKeyStore.Delete(ctx, key.ID())
require.NoError(t, err)
retrievedKeys, err := ethKeyStore.GetAll(ctx)
require.NoError(t, err)
require.Equal(t, 0, len(retrievedKeys))
cltest.AssertCount(t, db, statesTableName, 0)
})`
$DIR/core/services/keystore/eth_test.go: `.Context(t)`
$DIR/core/services/keystore/eth_test.go: `.Create(ctx, &cltest.FixtureChainID)`
$DIR/core/services/keystore/eth_test.go: `.Delete(ctx, key.ID())`
$DIR/core/services/keystore/eth_test.go: `.ID()`
$DIR/core/services/keystore/eth_test.go: `.GetAll(ctx)`
$DIR/core/services/keystore/eth_test.go: `.AssertCount(t, db, statesTableName, 0)`
$DIR/core/services/keystore/eth_test.go: `.Run("Delete removes key even if evm.txes are present", func(t *testing.T) {
ctx := testutils.Context(t)
defer reset()
key, err := ethKeyStore.Create(ctx, &cltest.FixtureChainID)
require.NoError(t, err)
// ensure at least one state is present
cltest.AssertCount(t, db, statesTableName, 1)
// add one eth_tx
txStore := cltest.NewTestTxStore(t, db)
cltest.MustInsertConfirmedEthTxWithLegacyAttempt(t, txStore, 0, 42, key.Address)
_, err = ethKeyStore.Delete(ctx, key.ID())
require.NoError(t, err)
retrievedKeys, err := ethKeyStore.GetAll(ctx)
require.NoError(t, err)
require.Equal(t, 0, len(retrievedKeys))
cltest.AssertCount(t, db, statesTableName, 0)
})`
$DIR/core/services/keystore/eth_test.go: `.Context(t)`
$DIR/core/services/keystore/eth_test.go: `.Create(ctx, &cltest.FixtureChainID)`
$DIR/core/services/keystore/eth_test.go: `.AssertCount(t, db, statesTableName, 1)`
$DIR/core/services/keystore/eth_test.go: `.NewTestTxStore(t, db)`
$DIR/core/services/keystore/eth_test.go: `.MustInsertConfirmedEthTxWithLegacyAttempt(t, txStore, 0, 42, key.Address)`
$DIR/core/services/keystore/eth_test.go: `.Delete(ctx, key.ID())`
$DIR/core/services/keystore/eth_test.go: `.ID()`
$DIR/core/services/keystore/eth_test.go: `.GetAll(ctx)`
$DIR/core/services/keystore/eth_test.go: `.AssertCount(t, db, statesTableName, 0)`
$DIR/core/services/keystore/eth_test.go: `.Run("EnsureKeys / EnabledKeysForChain", func(t *testing.T) {
ctx := testutils.Context(t)
defer reset()
err := ethKeyStore.EnsureKeys(ctx, &cltest.FixtureChainID)
assert.NoError(t, err)
sendingKeys1, err := ethKeyStore.EnabledKeysForChain(ctx, testutils.FixtureChainID)
assert.NoError(t, err)
require.Equal(t, 1, len(sendingKeys1))
cltest.AssertCount(t, db, statesTableName, 1)
err = ethKeyStore.EnsureKeys(ctx, &cltest.FixtureChainID)
assert.NoError(t, err)
sendingKeys2, err := ethKeyStore.EnabledKeysForChain(ctx, testutils.FixtureChainID)
assert.NoError(t, err)
require.Equal(t, 1, len(sendingKeys2))
require.Equal(t, sendingKeys1, sendingKeys2)
})`
$DIR/core/services/keystore/eth_test.go: `.Context(t)`
$DIR/core/services/keystore/eth_test.go: `.EnsureKeys(ctx, &cltest.FixtureChainID)`
$DIR/core/services/keystore/eth_test.go: `.EnabledKeysForChain(ctx, testutils.FixtureChainID)`
$DIR/core/services/keystore/eth_test.go: `.AssertCount(t, db, statesTableName, 1)`
$DIR/core/services/keystore/eth_test.go: `.EnsureKeys(ctx, &cltest.FixtureChainID)`
$DIR/core/services/keystore/eth_test.go: `.EnabledKeysForChain(ctx, testutils.FixtureChainID)`
$DIR/core/services/keystore/eth_test.go: `.Run("EnabledKeysForChain with specified chain ID", func(t *testing.T) {
ctx := testutils.Context(t)
defer reset()
key, err := ethKeyStore.Create(ctx, testutils.FixtureChainID)
require.NoError(t, err)
key2, err := ethKeyStore.Create(ctx, big.NewInt(1337))
require.NoError(t, err)
keys, err := ethKeyStore.EnabledKeysForChain(ctx, testutils.FixtureChainID)
require.NoError(t, err)
require.Len(t, keys, 1)
require.Equal(t, key, keys[0])
keys, err = ethKeyStore.EnabledKeysForChain(ctx, big.NewInt(1337))
require.NoError(t, err)
require.Len(t, keys, 1)
require.Equal(t, key2, keys[0])
_, err = ethKeyStore.EnabledKeysForChain(ctx, nil)
assert.Error(t, err)
assert.EqualError(t, err, "chainID must be non-nil")
})`
$DIR/core/services/keystore/eth_test.go: `.Context(t)`
$DIR/core/services/keystore/eth_test.go: `.Create(ctx, testutils.FixtureChainID)`
$DIR/core/services/keystore/eth_test.go: `.Create(ctx, big.NewInt(1337))`
$DIR/core/services/keystore/eth_test.go: `.NewInt(1337)`
$DIR/core/services/keystore/eth_test.go: `.EnabledKeysForChain(ctx, testutils.FixtureChainID)`
$DIR/core/services/keystore/eth_test.go: `.EnabledKeysForChain(ctx, big.NewInt(1337))`
$DIR/core/services/keystore/eth_test.go: `.NewInt(1337)`
$DIR/core/services/keystore/eth_test.go: `.EnabledKeysForChain(ctx, nil)`
$DIR/core/services/keystore/eth_test.go: `.Context(t)`
$DIR/core/services/keystore/eth_test.go: `.Create(ctx, testutils.FixtureChainID)`
$DIR/core/services/keystore/eth_test.go: `.Create(ctx, big.NewInt(1337))`
$DIR/core/services/keystore/eth_test.go: `.NewInt(1337)`
$DIR/core/services/keystore/eth_test.go: `.AssertCount(t, db, "evm.key_states", 2)`
$DIR/core/services/keystore/eth_test.go: `.GetAll(ctx)`
$DIR/core/services/keystore/eth_test.go: `.EnabledAddressesForChain(ctx, testutils.FixtureChainID)`
$DIR/core/services/keystore/eth_test.go: `.EnabledAddressesForChain(ctx, big.NewInt(1337))`
$DIR/core/services/keystore/eth_test.go: `.NewInt(1337)`
$DIR/core/services/keystore/eth_test.go: `.EnabledAddressesForChain(ctx, nil)`
$DIR/core/services/keystore/eth_test.go: `.Disable(ctx, key.Address, testutils.FixtureChainID)`
$DIR/core/services/keystore/eth_test.go: `.EnabledAddressesForChain(ctx, testutils.FixtureChainID)`
$DIR/core/services/keystore/eth_test.go: `.EnabledAddressesForChain(ctx, big.NewInt(1337))`
$DIR/core/services/keystore/eth_test.go: `.NewInt(1337)`
$DIR/core/services/keystore/eth_test.go: `.Context(t)`
$DIR/core/services/keystore/eth_test.go: `.NewSqlxDB(t)`
$DIR/core/services/keystore/eth_test.go: `.NewKeyStore(t, db)`
$DIR/core/services/keystore/eth_test.go: `.Eth()`
$DIR/core/services/keystore/eth_test.go: `.Run("should error when no addresses", func(t *testing.T) {
ctx1 := testutils.Context(t)
_, err := ethKeyStore.GetRoundRobinAddress(ctx1, testutils.FixtureChainID)
require.Error(t, err)
})`
$DIR/core/services/keystore/eth_test.go: `.Context(t)`
$DIR/core/services/keystore/eth_test.go: `.GetRoundRobinAddress(ctx1, testutils.FixtureChainID)`
$DIR/core/services/keystore/eth_test.go: `.MustInsertRandomKeyNoChains(t, ethKeyStore)`
$DIR/core/services/keystore/eth_test.go: `.MustInsertRandomKeyNoChains(t, ethKeyStore)`
$DIR/core/services/keystore/eth_test.go: `.MustInsertRandomKeyNoChains(t, ethKeyStore)`
$DIR/core/services/keystore/eth_test.go: `.MustInsertRandomKeyNoChains(t, ethKeyStore)`
$DIR/core/services/keystore/eth_test.go: `.Run("with no address filter, rotates between all enabled addresses", func(t *testing.T) {
address1, err := ethKeyStore.GetRoundRobinAddress(ctx, testutils.FixtureChainID)
require.NoError(t, err)
address2, err := ethKeyStore.GetRoundRobinAddress(ctx, testutils.FixtureChainID)
require.NoError(t, err)
address3, err := ethKeyStore.GetRoundRobinAddress(ctx, testutils.FixtureChainID)
require.NoError(t, err)
address4, err := ethKeyStore.GetRoundRobinAddress(ctx, testutils.FixtureChainID)
require.NoError(t, err)
address5, err := ethKeyStore.GetRoundRobinAddress(ctx, testutils.FixtureChainID)
require.NoError(t, err)
address6, err := ethKeyStore.GetRoundRobinAddress(ctx, testutils.FixtureChainID)
require.NoError(t, err)
assert.NotEqual(t, address1, address2)
assert.NotEqual(t, address2, address3)
assert.NotEqual(t, address1, address3)
assert.Equal(t, address1, address4)
assert.Equal(t, address2, address5)
assert.Equal(t, address3, address6)
})`
$DIR/core/services/keystore/eth_test.go: `.GetRoundRobinAddress(ctx, testutils.FixtureChainID)`
$DIR/core/services/keystore/eth_test.go: `.GetRoundRobinAddress(ctx, testutils.FixtureChainID)`
$DIR/core/services/keystore/eth_test.go: `.GetRoundRobinAddress(ctx, testutils.FixtureChainID)`
$DIR/core/services/keystore/eth_test.go: `.GetRoundRobinAddress(ctx, testutils.FixtureChainID)`
$DIR/core/services/keystore/eth_test.go: `.GetRoundRobinAddress(ctx, testutils.FixtureChainID)`
$DIR/core/services/keystore/eth_test.go: `.GetRoundRobinAddress(ctx, testutils.FixtureChainID)`
$DIR/core/services/keystore/eth_test.go: `.Run("with address filter, rotates between given addresses that match sending keys", func(t *testing.T) {
{
// k3 is a disabled address for FixtureChainID so even though it's whitelisted, it will be ignored
addresses := []common.Address{k4.Address, k3.Address, k1.Address, k2.Address, testutils.NewAddress()}
address1, err := ethKeyStore.GetRoundRobinAddress(ctx, testutils.FixtureChainID, addresses...)
require.NoError(t, err)
address2, err := ethKeyStore.GetRoundRobinAddress(ctx, testutils.FixtureChainID, addresses...)
require.NoError(t, err)
address3, err := ethKeyStore.GetRoundRobinAddress(ctx, testutils.FixtureChainID, addresses...)
require.NoError(t, err)
address4, err := ethKeyStore.GetRoundRobinAddress(ctx, testutils.FixtureChainID, addresses...)
require.NoError(t, err)
assert.NotEqual(t, k3.Address, address1)
assert.NotEqual(t, k3.Address, address2)
assert.NotEqual(t, k3.Address, address3)
assert.NotEqual(t, address1, address2)
assert.NotEqual(t, address1, address3)
assert.NotEqual(t, address2, address3)
assert.Equal(t, address1, address4)
}
{
// k2 and k4 are disabled address for SimulatedChainID so even though it's whitelisted, it will be ignored
addresses := []common.Address{k4.Address, k3.Address, k1.Address, k2.Address, testutils.NewAddress()}
address1, err := ethKeyStore.GetRoundRobinAddress(ctx, testutils.SimulatedChainID, addresses...)
require.NoError(t, err)
address2, err := ethKeyStore.GetRoundRobinAddress(ctx, testutils.SimulatedChainID, addresses...)
require.NoError(t, err)
address3, err := ethKeyStore.GetRoundRobinAddress(ctx, testutils.SimulatedChainID, addresses...)
require.NoError(t, err)
address4, err := ethKeyStore.GetRoundRobinAddress(ctx, testutils.SimulatedChainID, addresses...)
require.NoError(t, err)
assert.True(t, address1 == k1.Address || address1 == k3.Address)
assert.True(t, address2 == k1.Address || address2 == k3.Address)
assert.NotEqual(t, address1, address2)
assert.Equal(t, address1, address3)
assert.Equal(t, address2, address4)
}
})`
$DIR/core/services/keystore/eth_test.go: `.NewAddress()`
$DIR/core/services/keystore/eth_test.go: `.GetRoundRobinAddress(ctx, testutils.FixtureChainID, addresses...)`
$DIR/core/services/keystore/eth_test.go: `.GetRoundRobinAddress(ctx, testutils.FixtureChainID, addresses...)`
$DIR/core/services/keystore/eth_test.go: `.GetRoundRobinAddress(ctx, testutils.FixtureChainID, addresses...)`
$DIR/core/services/keystore/eth_test.go: `.GetRoundRobinAddress(ctx, testutils.FixtureChainID, addresses...)`
$DIR/core/services/keystore/eth_test.go: `.NewAddress()`
$DIR/core/services/keystore/eth_test.go: `.GetRoundRobinAddress(ctx, testutils.SimulatedChainID, addresses...)`
$DIR/core/services/keystore/eth_test.go: `.GetRoundRobinAddress(ctx, testutils.SimulatedChainID, addresses...)`
$DIR/core/services/keystore/eth_test.go: `.GetRoundRobinAddress(ctx, testutils.SimulatedChainID, addresses...)`
$DIR/core/services/keystore/eth_test.go: `.GetRoundRobinAddress(ctx, testutils.SimulatedChainID, addresses...)`
$DIR/core/services/keystore/eth_test.go: `.NewAddress()`
$DIR/core/services/keystore/eth_test.go: `.GetRoundRobinAddress(ctx, testutils.FixtureChainID, []common.Address{addr}...)`
$DIR/core/services/keystore/eth_test.go: `.Context(t)`
$DIR/core/services/keystore/eth_test.go: `.NewSqlxDB(t)`
$DIR/core/services/keystore/eth_test.go: `.NewKeyStore(t, db)`
$DIR/core/services/keystore/eth_test.go: `.Eth()`
$DIR/core/services/keystore/eth_test.go: `.MustInsertRandomKey(t, ethKeyStore)`
$DIR/core/services/keystore/eth_test.go: `.NewInt(evmclient.NullClientChainID)`
$DIR/core/services/keystore/eth_test.go: `.NewLegacyTransaction(0, testutils.NewAddress(), big.NewInt(53), 21000, big.NewInt(1000000000), []byte{1, 2, 3, 4})`
$DIR/core/services/keystore/eth_test.go: `.NewAddress()`
$DIR/core/services/keystore/eth_test.go: `.NewInt(53)`
$DIR/core/services/keystore/eth_test.go: `.NewInt(1000000000)`
$DIR/core/services/keystore/eth_test.go: `.NewAddress()`
$DIR/core/services/keystore/eth_test.go: `.SignTx(ctx, randomAddress, tx, chainID)`
$DIR/core/services/keystore/eth_test.go: `.SignTx(ctx, k.Address, tx, chainID)`
$DIR/core/services/keystore/eth_test.go: `.NewSqlxDB(t)`
$DIR/core/services/keystore/eth_test.go: `.ExposedNewMaster(t, db)`
$DIR/core/services/keystore/eth_test.go: `.Unlock(testutils.Context(t), cltest.Password)`
$DIR/core/services/keystore/eth_test.go: `.Context(t)`
$DIR/core/services/keystore/eth_test.go: `.Eth()`
$DIR/core/services/keystore/eth_test.go: `.Context(t)`
$DIR/core/services/keystore/eth_test.go: `.ResetXXXTestOnly()`
$DIR/core/services/keystore/eth_test.go: `.Run("initializes with an empty state", func(t *testing.T) {
ctx := testutils.Context(t)
defer reset()
keys, err := ks.GetAll(ctx)
require.NoError(t, err)
require.Equal(t, 0, len(keys))
})`
$DIR/core/services/keystore/eth_test.go: `.Context(t)`
$DIR/core/services/keystore/eth_test.go: `.GetAll(ctx)`
$DIR/core/services/keystore/eth_test.go: `.Run("errors when getting non-existent ID", func(t *testing.T) {
ctx := testutils.Context(t)
defer reset()
_, err := ks.Get(ctx, "non-existent-id")
require.Error(t, err)
})`
$DIR/core/services/keystore/eth_test.go: `.Context(t)`
$DIR/core/services/keystore/eth_test.go: `.Get(ctx, "non-existent-id")`
$DIR/core/services/keystore/eth_test.go: `.Run("creates a key", func(t *testing.T) {
ctx := testutils.Context(t)
defer reset()
key, err := ks.Create(ctx, &cltest.FixtureChainID)
require.NoError(t, err)
retrievedKey, err := ks.Get(ctx, key.ID())
require.NoError(t, err)
require.Equal(t, key, retrievedKey)
})`
$DIR/core/services/keystore/eth_test.go: `.Context(t)`
$DIR/core/services/keystore/eth_test.go: `.Create(ctx, &cltest.FixtureChainID)`
$DIR/core/services/keystore/eth_test.go: `.Get(ctx, key.ID())`
$DIR/core/services/keystore/eth_test.go: `.ID()`
$DIR/core/services/keystore/eth_test.go: `.Run("imports and exports a key", func(t *testing.T) {
ctx := testutils.Context(t)
defer reset()
key, err := ks.Create(ctx, &cltest.FixtureChainID)
require.NoError(t, err)
exportJSON, err := ks.Export(ctx, key.ID(), cltest.Password)
require.NoError(t, err)
_, err = ks.Delete(ctx, key.ID())
require.NoError(t, err)
_, err = ks.Get(ctx, key.ID())
require.Error(t, err)
importedKey, err := ks.Import(ctx, exportJSON, cltest.Password, &cltest.FixtureChainID)
require.NoError(t, err)
require.Equal(t, key.ID(), importedKey.ID())
retrievedKey, err := ks.Get(ctx, key.ID())
require.NoError(t, err)
require.Equal(t, importedKey, retrievedKey)
})`
$DIR/core/services/keystore/eth_test.go: `.Context(t)`
$DIR/core/services/keystore/eth_test.go: `.Create(ctx, &cltest.FixtureChainID)`
$DIR/core/services/keystore/eth_test.go: `.Export(ctx, key.ID(), cltest.Password)`
$DIR/core/services/keystore/eth_test.go: `.ID()`
$DIR/core/services/keystore/eth_test.go: `.Delete(ctx, key.ID())`
$DIR/core/services/keystore/eth_test.go: `.ID()`
$DIR/core/services/keystore/eth_test.go: `.Get(ctx, key.ID())`
$DIR/core/services/keystore/eth_test.go: `.ID()`
$DIR/core/services/keystore/eth_test.go: `.Import(ctx, exportJSON, cltest.Password, &cltest.FixtureChainID)`
$DIR/core/services/keystore/eth_test.go: `.Get(ctx, key.ID())`
$DIR/core/services/keystore/eth_test.go: `.ID()`
$DIR/core/services/keystore/eth_test.go: `.Run("adds an externally created key / deletes a key", func(t *testing.T) {
ctx := testutils.Context(t)
defer reset()
newKey, err := ethkey.NewV2()
require.NoError(t, err)
ks.XXXTestingOnlyAdd(ctx, newKey)
keys, err := ks.GetAll(ctx)
require.NoError(t, err)
assert.Equal(t, 1, len(keys))
_, err = ks.Delete(ctx, newKey.ID())
require.NoError(t, err)
keys, err = ks.GetAll(ctx)
require.NoError(t, err)
assert.Equal(t, 0, len(keys))
_, err = ks.Get(ctx, newKey.ID())
assert.Error(t, err)
_, err = ks.Delete(ctx, newKey.ID())
assert.Error(t, err)
})`
$DIR/core/services/keystore/eth_test.go: `.Context(t)`
$DIR/core/services/keystore/eth_test.go: `.NewV2()`
$DIR/core/services/keystore/eth_test.go: `.XXXTestingOnlyAdd(ctx, newKey)`
$DIR/core/services/keystore/eth_test.go: `.GetAll(ctx)`
$DIR/core/services/keystore/eth_test.go: `.Delete(ctx, newKey.ID())`
$DIR/core/services/keystore/eth_test.go: `.ID()`
$DIR/core/services/keystore/eth_test.go: `.GetAll(ctx)`
$DIR/core/services/keystore/eth_test.go: `.Get(ctx, newKey.ID())`
$DIR/core/services/keystore/eth_test.go: `.ID()`
$DIR/core/services/keystore/eth_test.go: `.Delete(ctx, newKey.ID())`
$DIR/core/services/keystore/eth_test.go: `.ID()`
$DIR/core/services/keystore/eth_test.go: `.Run("imports a key exported from a v1 keystore", func(t *testing.T) {
ctx := testutils.Context(t)
exportedKey := `{"address":"0dd359b4f22a30e44b2fd744b679971941865820","crypto":{"cipher":"aes-128-ctr","ciphertext":"b30af964a3b3f37894e599446b4cf2314bbfcd1062e6b35b620d3d20bd9965cc","cipherparams":{"iv":"58a8d75629cc1945da7cf8c24520d1dc"},"kdf":"scrypt","kdfparams":{"dklen":32,"n":262144,"p":1,"r":8,"salt":"c352887e9d427d8a6a1869082619b73fac4566082a99f6e367d126f11b434f28"},"mac":"fd76a588210e0bf73d01332091e0e83a4584ee2df31eaec0e27f9a1b94f024b4"},"id":"a5ee0802-1d7b-45b6-aeb8-ea8a3351e715","version":3}`
importedKey, err := ks.Import(ctx, []byte(exportedKey), "p4SsW0rD1!@#_", &cltest.FixtureChainID)
require.NoError(t, err)
assert.Equal(t, "0x0dd359b4f22a30E44b2fD744B679971941865820", importedKey.ID())
k, err := ks.Import(ctx, []byte(exportedKey), cltest.Password, &cltest.FixtureChainID)
assert.Empty(t, k)
assert.Error(t, err)
})`
$DIR/core/services/keystore/eth_test.go: `.Context(t)`
$DIR/core/services/keystore/eth_test.go: `.Import(ctx, []byte(exportedKey), "p4SsW0rD1!@#_", &cltest.FixtureChainID)`
$DIR/core/services/keystore/eth_test.go: `.Import(ctx, []byte(exportedKey), cltest.Password, &cltest.FixtureChainID)`
$DIR/core/services/keystore/eth_test.go: `.Run("fails to export a non-existent key", func(t *testing.T) {
ctx := testutils.Context(t)
k, err := ks.Export(ctx, "non-existent", cltest.Password)
assert.Empty(t, k)
assert.Error(t, err)
})`
$DIR/core/services/keystore/eth_test.go: `.Context(t)`
$DIR/core/services/keystore/eth_test.go: `.Export(ctx, "non-existent", cltest.Password)`
$DIR/core/services/keystore/eth_test.go: `.Run("returns states for keys", func(t *testing.T) {
ctx := testutils.Context(t)
k1, err := ethkey.NewV2()
require.NoError(t, err)
k2, err := ethkey.NewV2()
require.NoError(t, err)
ks.XXXTestingOnlyAdd(ctx, k1)
ks.XXXTestingOnlyAdd(ctx, k2)
require.NoError(t, ks.Add(ctx, k1.Address, testutils.FixtureChainID))
require.NoError(t, ks.Enable(ctx, k1.Address, testutils.FixtureChainID))
states, err := ks.GetStatesForKeys(ctx, []ethkey.KeyV2{k1, k2})
require.NoError(t, err)
assert.Len(t, states, 1)
chainStates, err := ks.GetStatesForChain(ctx, testutils.FixtureChainID)
require.NoError(t, err)
assert.Len(t, chainStates, 2) // one created here, one created above
chainStates, err = ks.GetStatesForChain(ctx, testutils.SimulatedChainID)
require.NoError(t, err)
assert.Len(t, chainStates, 0)
})`
$DIR/core/services/keystore/eth_test.go: `.Context(t)`
$DIR/core/services/keystore/eth_test.go: `.NewV2()`
$DIR/core/services/keystore/eth_test.go: `.NewV2()`
$DIR/core/services/keystore/eth_test.go: `.XXXTestingOnlyAdd(ctx, k1)`
$DIR/core/services/keystore/eth_test.go: `.XXXTestingOnlyAdd(ctx, k2)`
$DIR/core/services/keystore/eth_test.go: `.GetStatesForKeys(ctx, []ethkey.KeyV2{k1, k2})`
$DIR/core/services/keystore/eth_test.go: `.GetStatesForChain(ctx, testutils.FixtureChainID)`
$DIR/core/services/keystore/eth_test.go: `.GetStatesForChain(ctx, testutils.SimulatedChainID)`
$DIR/core/services/keystore/eth_test.go: `.Context(t)`
$DIR/core/services/keystore/eth_test.go: `.NewSqlxDB(t)`
$DIR/core/services/keystore/eth_test.go: `.NewKeyStore(t, db)`
$DIR/core/services/keystore/eth_test.go: `.Eth()`
$DIR/core/services/keystore/eth_test.go: `.SubscribeToKeyChanges(ctx)`
$DIR/core/services/keystore/eth_test.go: `.Add(1)`
$DIR/core/services/keystore/eth_test.go: `.Store(0)`
$DIR/core/services/keystore/eth_test.go: `.EnsureKeys(ctx, &cltest.FixtureChainID)`
$DIR/core/services/keystore/eth_test.go: `.Create(ctx, testutils.FixtureChainID)`
$DIR/core/services/keystore/eth_test.go: `.NewSqlxDB(t)`
$DIR/core/services/keystore/eth_test.go: `.NewKeyStore(t, db)`
$DIR/core/services/keystore/eth_test.go: `.Eth()`
$DIR/core/services/keystore/eth_test.go: `.Run("already existing disabled key gets enabled", func(t *testing.T) {
ctx := testutils.Context(t)
k, _ := cltest.MustInsertRandomKeyNoChains(t, ks)
require.NoError(t, ks.Add(ctx, k.Address, testutils.SimulatedChainID))
require.NoError(t, ks.Disable(ctx, k.Address, testutils.SimulatedChainID))
require.NoError(t, ks.Enable(ctx, k.Address, testutils.SimulatedChainID))
key, err := ks.GetState(ctx, k.Address.Hex(), testutils.SimulatedChainID)
require.NoError(t, err)
require.Equal(t, key.Disabled, false)
})`
$DIR/core/services/keystore/eth_test.go: `.Context(t)`
$DIR/core/services/keystore/eth_test.go: `.MustInsertRandomKeyNoChains(t, ks)`
$DIR/core/services/keystore/eth_test.go: `.GetState(ctx, k.Address.Hex(), testutils.SimulatedChainID)`
$DIR/core/services/keystore/eth_test.go: `.Address.Hex()`
$DIR/core/services/keystore/eth_test.go: `.Run("creates key, deletes it unsafely and then enable creates it again", func(t *testing.T) {
ctx := testutils.Context(t)
k, _ := cltest.MustInsertRandomKeyNoChains(t, ks)
require.NoError(t, ks.Add(ctx, k.Address, testutils.SimulatedChainID))
_, err := db.Exec("DELETE FROM evm.key_states WHERE address = $1", k.Address)
require.NoError(t, err)
require.NoError(t, ks.Enable(ctx, k.Address, testutils.SimulatedChainID))
key, err := ks.GetState(ctx, k.Address.Hex(), testutils.SimulatedChainID)
require.NoError(t, err)
require.Equal(t, key.Disabled, false)
})`
$DIR/core/services/keystore/eth_test.go: `.Context(t)`
$DIR/core/services/keystore/eth_test.go: `.MustInsertRandomKeyNoChains(t, ks)`
$DIR/core/services/keystore/eth_test.go: `.Exec("DELETE FROM evm.key_states WHERE address = $1", k.Address)`
$DIR/core/services/keystore/eth_test.go: `.GetState(ctx, k.Address.Hex(), testutils.SimulatedChainID)`
$DIR/core/services/keystore/eth_test.go: `.Address.Hex()`
$DIR/core/services/keystore/eth_test.go: `.Run("creates key and enables it if it exists in the keystore, but is missing from key states db table", func(t *testing.T) {
ctx := testutils.Context(t)
k, _ := cltest.MustInsertRandomKeyNoChains(t, ks)
require.NoError(t, ks.Enable(ctx, k.Address, testutils.SimulatedChainID))
key, err := ks.GetState(ctx, k.Address.Hex(), testutils.SimulatedChainID)
require.NoError(t, err)
require.Equal(t, key.Disabled, false)
})`
$DIR/core/services/keystore/eth_test.go: `.Context(t)`
$DIR/core/services/keystore/eth_test.go: `.MustInsertRandomKeyNoChains(t, ks)`
$DIR/core/services/keystore/eth_test.go: `.GetState(ctx, k.Address.Hex(), testutils.SimulatedChainID)`
$DIR/core/services/keystore/eth_test.go: `.Address.Hex()`
$DIR/core/services/keystore/eth_test.go: `.Context(t)`
$DIR/core/services/keystore/eth_test.go: `.NewAddress()`
$DIR/core/services/keystore/eth_test.go: `.GetState(ctx, addrNotInKs.Hex(), testutils.SimulatedChainID)`
$DIR/core/services/keystore/eth_test.go: `.Hex()`
$DIR/core/services/keystore/eth_test.go: `.Run("creates one unique key per chain if none exist", func(t *testing.T) {
ctx := testutils.Context(t)
db := pgtest.NewSqlxDB(t)
keyStore := cltest.NewKeyStore(t, db)
ks := keyStore.Eth()
testutils.AssertCount(t, db, "evm.key_states", 0)
err := ks.EnsureKeys(ctx, testutils.FixtureChainID, testutils.SimulatedChainID)
require.NoError(t, err)
testutils.AssertCount(t, db, "evm.key_states", 2)
keys, err := ks.GetAll(ctx)
require.NoError(t, err)
assert.Len(t, keys, 2)
})`
$DIR/core/services/keystore/eth_test.go: `.Context(t)`
$DIR/core/services/keystore/eth_test.go: `.NewSqlxDB(t)`
$DIR/core/services/keystore/eth_test.go: `.NewKeyStore(t, db)`
$DIR/core/services/keystore/eth_test.go: `.Eth()`
$DIR/core/services/keystore/eth_test.go: `.AssertCount(t, db, "evm.key_states", 0)`
$DIR/core/services/keystore/eth_test.go: `.EnsureKeys(ctx, testutils.FixtureChainID, testutils.SimulatedChainID)`
$DIR/core/services/keystore/eth_test.go: `.AssertCount(t, db, "evm.key_states", 2)`
$DIR/core/services/keystore/eth_test.go: `.GetAll(ctx)`
$DIR/core/services/keystore/eth_test.go: `.Run("does nothing if a key exists for a chain", func(t *testing.T) {
ctx := testutils.Context(t)
db := pgtest.NewSqlxDB(t)
keyStore := cltest.NewKeyStore(t, db)
ks := keyStore.Eth()
// Add one enabled key
_, err := ks.Create(ctx, testutils.FixtureChainID)
require.NoError(t, err)
testutils.AssertCount(t, db, "evm.key_states", 1)
keys, err := ks.GetAll(ctx)
require.NoError(t, err)
assert.Len(t, keys, 1)
// this adds one more key for the additional chain
err = ks.EnsureKeys(ctx, testutils.FixtureChainID, testutils.SimulatedChainID)
require.NoError(t, err)
testutils.AssertCount(t, db, "evm.key_states", 2)
keys, err = ks.GetAll(ctx)
require.NoError(t, err)
assert.Len(t, keys, 2)
})`
$DIR/core/services/keystore/eth_test.go: `.Context(t)`
$DIR/core/services/keystore/eth_test.go: `.NewSqlxDB(t)`
$DIR/core/services/keystore/eth_test.go: `.NewKeyStore(t, db)`
$DIR/core/services/keystore/eth_test.go: `.Eth()`
$DIR/core/services/keystore/eth_test.go: `.Create(ctx, testutils.FixtureChainID)`
$DIR/core/services/keystore/eth_test.go: `.AssertCount(t, db, "evm.key_states", 1)`
$DIR/core/services/keystore/eth_test.go: `.GetAll(ctx)`
$DIR/core/services/keystore/eth_test.go: `.EnsureKeys(ctx, testutils.FixtureChainID, testutils.SimulatedChainID)`
$DIR/core/services/keystore/eth_test.go: `.AssertCount(t, db, "evm.key_states", 2)`
$DIR/core/services/keystore/eth_test.go: `.GetAll(ctx)`
$DIR/core/services/keystore/eth_test.go: `.Context(t)`
$DIR/core/services/keystore/eth_test.go: `.NewSqlxDB(t)`
$DIR/core/services/keystore/eth_test.go: `.NewKeyStore(t, db)`
$DIR/core/services/keystore/eth_test.go: `.Eth()`
$DIR/core/services/keystore/eth_test.go: `.Create(ctx, testutils.FixtureChainID)`
$DIR/core/services/keystore/eth_test.go: `.AssertCount(t, db, "evm.key_states", 1)`
$DIR/core/services/keystore/eth_test.go: `.GetAll(ctx)`
$DIR/core/services/keystore/eth_test.go: `.Disable(ctx, k.Address, testutils.FixtureChainID)`
$DIR/core/services/keystore/eth_test.go: `.EnsureKeys(ctx, testutils.FixtureChainID)`
$DIR/core/services/keystore/eth_test.go: `.AssertCount(t, db, "evm.key_states", 1)`
$DIR/core/services/keystore/eth_test.go: `.GetAll(ctx)`
$DIR/core/services/keystore/eth_test.go: `.GetState(ctx, k.Address.Hex(), testutils.FixtureChainID)`
$DIR/core/services/keystore/eth_test.go: `.Address.Hex()`
$DIR/core/services/keystore/eth_test.go: `.Context(t)`
$DIR/core/services/keystore/eth_test.go: `.NewSqlxDB(t)`
$DIR/core/services/keystore/eth_test.go: `.NewKeyStore(t, db)`
$DIR/core/services/keystore/eth_test.go: `.Eth()`
$DIR/core/services/keystore/eth_test.go: `.RandomAddress()`
$DIR/core/services/keystore/eth_test.go: `.Hex()`
$DIR/core/services/keystore/eth_test.go: `.Delete(ctx, randKeyID)`
$DIR/core/services/keystore/eth_test.go: `.MustInsertRandomKey(t, ks)`
$DIR/core/services/keystore/eth_test.go: `.MustInsertRandomKey(t, ks)`
$DIR/core/services/keystore/eth_test.go: `.MustInsertRandomKey(t, ks, *ubig.New(testutils.SimulatedChainID))`
$DIR/core/services/keystore/eth_test.go: `.New(testutils.SimulatedChainID)`
$DIR/core/services/keystore/eth_test.go: `.AssertCount(t, db, "evm.key_states", 4)`
$DIR/core/services/keystore/eth_test.go: `.GetAll(ctx)`
$DIR/core/services/keystore/eth_test.go: `.GetState(ctx, addr1.Hex(), testutils.FixtureChainID)`
$DIR/core/services/keystore/eth_test.go: `.Hex()`
$DIR/core/services/keystore/eth_test.go: `.GetState(ctx, addr1.Hex(), testutils.SimulatedChainID)`
$DIR/core/services/keystore/eth_test.go: `.Hex()`
$DIR/core/services/keystore/eth_test.go: `.Delete(ctx, addr1.String())`
$DIR/core/services/keystore/eth_test.go: `.String()`
$DIR/core/services/keystore/eth_test.go: `.AssertCount(t, db, "evm.key_states", 2)`
$DIR/core/services/keystore/eth_test.go: `.GetAll(ctx)`
$DIR/core/services/keystore/eth_test.go: `.GetState(ctx, addr1.Hex(), testutils.FixtureChainID)`
$DIR/core/services/keystore/eth_test.go: `.Hex()`
$DIR/core/services/keystore/eth_test.go: `.GetState(ctx, addr1.Hex(), testutils.SimulatedChainID)`
$DIR/core/services/keystore/eth_test.go: `.Hex()`
$DIR/core/services/keystore/eth_test.go: `.GetState(ctx, addr2.Hex(), testutils.FixtureChainID)`
$DIR/core/services/keystore/eth_test.go: `.Hex()`
$DIR/core/services/keystore/eth_test.go: `.Context(t)`
$DIR/core/services/keystore/eth_test.go: `.NewSqlxDB(t)`
$DIR/core/services/keystore/eth_test.go: `.NewKeyStore(t, db)`
$DIR/core/services/keystore/eth_test.go: `.Eth()`
$DIR/core/services/keystore/eth_test.go: `.MustInsertRandomKeyNoChains(t, ks)`
$DIR/core/services/keystore/eth_test.go: `.MustInsertRandomKeyNoChains(t, ks)`
$DIR/core/services/keystore/eth_test.go: `.MustInsertRandomKeyNoChains(t, ks)`
$DIR/core/services/keystore/eth_test.go: `.Run("enabling the same key multiple times does not create duplicate states", func(t *testing.T) {
ctx2 := testutils.Context(t)
require.NoError(t, ks.Enable(ctx2, k1.Address, testutils.FixtureChainID))
require.NoError(t, ks.Enable(ctx2, k1.Address, testutils.FixtureChainID))
require.NoError(t, ks.Enable(ctx2, k1.Address, testutils.FixtureChainID))
require.NoError(t, ks.Enable(ctx2, k1.Address, testutils.FixtureChainID))
states, err := ks.GetStatesForKeys(ctx2, []ethkey.KeyV2{k1})
require.NoError(t, err)
assert.Len(t, states, 2)
var cids []*big.Int
for i := range states {
cid := states[i].EVMChainID.ToInt()
cids = append(cids, cid)
}
assert.Contains(t, cids, testutils.FixtureChainID)
assert.Contains(t, cids, testutils.SimulatedChainID)
for _, s := range states {
assert.Equal(t, addr1, s.Address.Address())
}
})`
$DIR/core/services/keystore/eth_test.go: `.Context(t)`
$DIR/core/services/keystore/eth_test.go: `.GetStatesForKeys(ctx2, []ethkey.KeyV2{k1})`
$DIR/core/services/keystore/eth_test.go: `.EVMChainID.ToInt()`
$DIR/core/services/keystore/eth_test.go: `.Run("returns nil when key is enabled for given chain", func(t *testing.T) {
err := ks.CheckEnabled(ctx, addr1, testutils.FixtureChainID)
assert.NoError(t, err)
err = ks.CheckEnabled(ctx, addr1, testutils.SimulatedChainID)
assert.NoError(t, err)
})`
$DIR/core/services/keystore/eth_test.go: `.CheckEnabled(ctx, addr1, testutils.FixtureChainID)`
$DIR/core/services/keystore/eth_test.go: `.CheckEnabled(ctx, addr1, testutils.SimulatedChainID)`
$DIR/core/services/keystore/eth_test.go: `.Run("returns error when key does not exist", func(t *testing.T) {
addr := utils.RandomAddress()
err := ks.CheckEnabled(ctx, addr, testutils.FixtureChainID)
assert.Error(t, err)
require.Contains(t, err.Error(), fmt.Sprintf("no eth key exists with address %s", addr.Hex()))
})`
$DIR/core/services/keystore/eth_test.go: `.RandomAddress()`
$DIR/core/services/keystore/eth_test.go: `.CheckEnabled(ctx, addr, testutils.FixtureChainID)`
$DIR/core/services/keystore/eth_test.go: `.Run("returns error when key exists but has never been enabled (no state) for the given chain", func(t *testing.T) {
err := ks.CheckEnabled(ctx, addr3, testutils.FixtureChainID)
assert.Error(t, err)
require.Contains(t, err.Error(), fmt.Sprintf("eth key with address %s exists but is has not been enabled for chain 0 (enabled only for chain IDs: 1337)", addr3.Hex()))
})`
$DIR/core/services/keystore/eth_test.go: `.CheckEnabled(ctx, addr3, testutils.FixtureChainID)`
$DIR/core/services/keystore/eth_test.go: `.CheckEnabled(ctx, addr2, testutils.SimulatedChainID)`
$DIR/core/services/keystore/eth_test.go: `.NewSqlxDB(t)`
$DIR/core/services/keystore/eth_test.go: `.NewKeyStore(t, db)`
$DIR/core/services/keystore/eth_test.go: `.Eth()`
$DIR/core/services/keystore/eth_test.go: `.Run("creates key, deletes it unsafely and then enable creates it again", func(t *testing.T) {
ctx := testutils.Context(t)
k, _ := cltest.MustInsertRandomKeyNoChains(t, ks)
require.NoError(t, ks.Add(ctx, k.Address, testutils.SimulatedChainID))
_, err := db.Exec("DELETE FROM evm.key_states WHERE address = $1", k.Address)
require.NoError(t, err)
require.NoError(t, ks.Disable(ctx, k.Address, testutils.SimulatedChainID))
key, err := ks.GetState(ctx, k.Address.Hex(), testutils.SimulatedChainID)
require.NoError(t, err)
require.Equal(t, key.Disabled, true)
})`
$DIR/core/services/keystore/eth_test.go: `.Context(t)`
$DIR/core/services/keystore/eth_test.go: `.MustInsertRandomKeyNoChains(t, ks)`
$DIR/core/services/keystore/eth_test.go: `.Exec("DELETE FROM evm.key_states WHERE address = $1", k.Address)`
$DIR/core/services/keystore/eth_test.go: `.GetState(ctx, k.Address.Hex(), testutils.SimulatedChainID)`
$DIR/core/services/keystore/eth_test.go: `.Address.Hex()`
$DIR/core/services/keystore/eth_test.go: `.Run("creates key and enables it if it exists in the keystore, but is missing from key states db table", func(t *testing.T) {
ctx := testutils.Context(t)
k, _ := cltest.MustInsertRandomKeyNoChains(t, ks)
require.NoError(t, ks.Disable(ctx, k.Address, testutils.SimulatedChainID))
key, err := ks.GetState(ctx, k.Address.Hex(), testutils.SimulatedChainID)
require.NoError(t, err)
require.Equal(t, key.Disabled, true)
})`
$DIR/core/services/keystore/eth_test.go: `.Context(t)`
$DIR/core/services/keystore/eth_test.go: `.MustInsertRandomKeyNoChains(t, ks)`
$DIR/core/services/keystore/eth_test.go: `.GetState(ctx, k.Address.Hex(), testutils.SimulatedChainID)`
$DIR/core/services/keystore/eth_test.go: `.Address.Hex()`
$DIR/core/services/keystore/eth_test.go: `.Context(t)`
$DIR/core/services/keystore/eth_test.go: `.NewAddress()`
$DIR/core/services/keystore/eth_test.go: `.GetState(ctx, addrNotInKs.Hex(), testutils.SimulatedChainID)`
$DIR/core/services/keystore/eth_test.go: `.Hex()`
$DIR/core/services/keystore/keys/csakey/key_test.go: `err = key.Unlock(passphrase)`
$DIR/core/services/keystore/keys/csakey/key_test.go: `.EncryptedPrivateKey.Decrypt("passphrase")`
$DIR/core/services/keystore/keys/csakey/key_test.go: `.PrivateKey(rawprivkey)`
$DIR/core/services/keystore/keys/csakey/key_test.go: `.PublicKey(key.PublicKey)`
$DIR/core/services/keystore/keys/csakey/key_test.go: `.Public()`
$DIR/core/services/keystore/keys/csakey/key_test.go: `.Unlock(passphrase)`
$DIR/core/services/keystore/keys/csakey/key_test.go: `.EncryptedPrivateKey.Decrypt(passphrase)`
$DIR/core/services/keystore/keys/csakey/key_test.go: `.Unsafe_GetPrivateKey()`
$DIR/core/services/keystore/keys/csakey/key_test.go: `.ToV2()`
$DIR/core/services/keystore/keys/csakey/key_test.go: `.PrivateKey(key.privateKey)`
$DIR/core/services/keystore/keys/csakey/key_v2_test.go: `.GenerateKey(nil)`
$DIR/core/services/keystore/keys/csakey/key_v2_test.go: `.String()`
$DIR/core/services/keystore/keys/csakey/key_v2_test.go: `.GoString()`
$DIR/core/services/keystore/keys/csakey/key_v2_test.go: `.GenerateKey(nil)`
$DIR/core/services/keystore/keys/csakey/key_v2_test.go: `.Key()`
$DIR/core/services/keystore/keys/csakey/key_v2_test.go: `.Sprintf("CSAKeyV2{PrivateKey: , PublicKey: %s}", pubKey)`
$DIR/core/services/keystore/keys/csakey/key_v2_test.go: `.String()`
$DIR/core/services/keystore/keys/dkgencryptkey/key_test.go: `.NewInt(1337)`
$DIR/core/services/keystore/keys/dkgencryptkey/key_test.go: `.ID()`
$DIR/core/services/keystore/keys/dkgencryptkey/key_test.go: `.NewInt(1337)`
$DIR/core/services/keystore/keys/dkgencryptkey/key_test.go: `.Raw()`
$DIR/core/services/keystore/keys/dkgencryptkey/key_test.go: `.Scalar()`
$DIR/core/services/keystore/keys/dkgencryptkey/key_test.go: `.SetBytes(rawFromKey)`
$DIR/core/services/keystore/keys/dkgencryptkey/key_test.go: `.Key()`
$DIR/core/services/keystore/keys/dkgencryptkey/key_test.go: `.String()`
$DIR/core/services/keystore/keys/dkgencryptkey/key_test.go: `.NewInt(1337)`
$DIR/core/services/keystore/keys/dkgencryptkey/key_test.go: `.ToEncryptedJSON(password, utils.DefaultScryptParams)`
$DIR/core/services/keystore/keys/dkgsignkey/key_test.go: `.NewInt(1337)`
$DIR/core/services/keystore/keys/dkgsignkey/key_test.go: `.ID()`
$DIR/core/services/keystore/keys/dkgsignkey/key_test.go: `.NewInt(1337)`
$DIR/core/services/keystore/keys/dkgsignkey/key_test.go: `.Raw()`
$DIR/core/services/keystore/keys/dkgsignkey/key_test.go: `.Scalar()`
$DIR/core/services/keystore/keys/dkgsignkey/key_test.go: `.SetBytes(rawFromKey)`
$DIR/core/services/keystore/keys/dkgsignkey/key_test.go: `.Key()`
$DIR/core/services/keystore/keys/dkgsignkey/key_test.go: `.String()`
$DIR/core/services/keystore/keys/dkgsignkey/key_test.go: `.NewInt(1337)`
$DIR/core/services/keystore/keys/dkgsignkey/key_test.go: `.ToEncryptedJSON(password, utils.DefaultScryptParams)`
$DIR/core/services/keystore/keys/ethkey/key_test.go: `.Type()`
$DIR/core/services/keystore/keys/ethkey/key_v2_test.go: `.GenerateKey(crypto.S256(), rand.Reader)`
$DIR/core/services/keystore/keys/ethkey/key_v2_test.go: `.S256()`
$DIR/core/services/keystore/keys/ethkey/key_v2_test.go: `.D.Bytes()`
$DIR/core/services/keystore/keys/ethkey/key_v2_test.go: `.Key()`
$DIR/core/services/keystore/keys/ethkey/key_v2_test.go: `.EIP55AddressFromAddress(crypto.PubkeyToAddress(privateKeyECDSA.PublicKey))`
$DIR/core/services/keystore/keys/ethkey/key_v2_test.go: `.PubkeyToAddress(privateKeyECDSA.PublicKey)`
$DIR/core/services/keystore/keys/ethkey/key_v2_test.go: `.Hex()`
$DIR/core/services/keystore/keys/ethkey/key_v2_test.go: `.ID()`
$DIR/core/services/keystore/keys/ethkey/key_v2_test.go: `.GenerateKey(crypto.S256(), rand.Reader)`
$DIR/core/services/keystore/keys/ethkey/key_v2_test.go: `.S256()`
$DIR/core/services/keystore/keys/ethkey/key_v2_test.go: `.D.Bytes()`
$DIR/core/services/keystore/keys/ethkey/key_v2_test.go: `.String()`
$DIR/core/services/keystore/keys/ethkey/key_v2_test.go: `.GoString()`
$DIR/core/services/keystore/keys/ethkey/key_v2_test.go: `.Address.Hex()`
$DIR/core/services/keystore/keys/ethkey/key_v2_test.go: `.ID()`
$DIR/core/services/keystore/keys/ocr2key/cosmos_keyring_test.go: `t.Run("can verify", func(t *testing.T) {
report := ocrtypes.Report{}
sig, err := kr1.Sign(ctx, report)
require.NoError(t, err)
t.Log(len(sig))
result := kr2.Verify(kr1.PublicKey(), ctx, report, sig)
require.True(t, result)
})`
$DIR/core/services/keystore/keys/ocr2key/cosmos_keyring_test.go: `t.Run("invalid sig", func(t *testing.T) {
report := ocrtypes.Report{}
result := kr2.Verify(kr1.PublicKey(), ctx, report, []byte{0x01})
require.False(t, result)
})`
$DIR/core/services/keystore/keys/ocr2key/cosmos_keyring_test.go: `err = kr2.Unmarshal(m)`
$DIR/core/services/keystore/keys/ocr2key/cosmos_keyring_test.go: `.Run("can verify", func(t *testing.T) {
report := ocrtypes.Report{}
sig, err := kr1.Sign(ctx, report)
require.NoError(t, err)
t.Log(len(sig))
result := kr2.Verify(kr1.PublicKey(), ctx, report, sig)
require.True(t, result)
})`
$DIR/core/services/keystore/keys/ocr2key/cosmos_keyring_test.go: `.Sign(ctx, report)`
$DIR/core/services/keystore/keys/ocr2key/cosmos_keyring_test.go: `.Verify(kr1.PublicKey(), ctx, report, sig)`
$DIR/core/services/keystore/keys/ocr2key/cosmos_keyring_test.go: `.PublicKey()`
$DIR/core/services/keystore/keys/ocr2key/cosmos_keyring_test.go: `.Run("invalid sig", func(t *testing.T) {
report := ocrtypes.Report{}
result := kr2.Verify(kr1.PublicKey(), ctx, report, []byte{0x01})
require.False(t, result)
})`
$DIR/core/services/keystore/keys/ocr2key/cosmos_keyring_test.go: `.Verify(kr1.PublicKey(), ctx, report, []byte{0x01})`
$DIR/core/services/keystore/keys/ocr2key/cosmos_keyring_test.go: `.PublicKey()`
$DIR/core/services/keystore/keys/ocr2key/cosmos_keyring_test.go: `.Sign(ctx, report)`
$DIR/core/services/keystore/keys/ocr2key/cosmos_keyring_test.go: `.Verify([]byte{0x01}, ctx, report, sig)`
$DIR/core/services/keystore/keys/ocr2key/cosmos_keyring_test.go: `.Marshal()`
$DIR/core/services/keystore/keys/ocr2key/cosmos_keyring_test.go: `.Unmarshal(m)`
$DIR/core/services/keystore/keys/ocr2key/cosmos_keyring_test.go: `.Unmarshal([]byte{0x01})`
$DIR/core/services/keystore/keys/ocr2key/evm_keyring_test.go: `t.Run("can verify", func(t *testing.T) {
report := ocrtypes.Report{}
sig, err := kr1.Sign(ctx, report)
require.NoError(t, err)
t.Log(len(sig))
result := kr2.Verify(kr1.PublicKey(), ctx, report, sig)
assert.True(t, result)
})`
$DIR/core/services/keystore/keys/ocr2key/evm_keyring_test.go: `t.Run("invalid sig", func(t *testing.T) {
report := ocrtypes.Report{}
result := kr2.Verify(kr1.PublicKey(), ctx, report, []byte{0x01})
assert.False(t, result)
})`
$DIR/core/services/keystore/keys/ocr2key/evm_keyring_test.go: `t.Run("can verify", func(t *testing.T) {
sig, err := kr1.Sign3(digest, seqNr, r)
require.NoError(t, err)
t.Log(len(sig))
result := kr2.Verify3(kr1.PublicKey(), digest, seqNr, r, sig)
assert.True(t, result)
})`
$DIR/core/services/keystore/keys/ocr2key/evm_keyring_test.go: `t.Run("invalid sig", func(t *testing.T) {
result := kr2.Verify3(kr1.PublicKey(), digest, seqNr, r, []byte{0x01})
assert.False(t, result)
})`
$DIR/core/services/keystore/keys/ocr2key/evm_keyring_test.go: `err = kr2.Unmarshal(m)`
$DIR/core/services/keystore/keys/ocr2key/evm_keyring_test.go: `.Run("can verify", func(t *testing.T) {
report := ocrtypes.Report{}
sig, err := kr1.Sign(ctx, report)
require.NoError(t, err)
t.Log(len(sig))
result := kr2.Verify(kr1.PublicKey(), ctx, report, sig)
assert.True(t, result)
})`
$DIR/core/services/keystore/keys/ocr2key/evm_keyring_test.go: `.Sign(ctx, report)`
$DIR/core/services/keystore/keys/ocr2key/evm_keyring_test.go: `.Verify(kr1.PublicKey(), ctx, report, sig)`
$DIR/core/services/keystore/keys/ocr2key/evm_keyring_test.go: `.PublicKey()`
$DIR/core/services/keystore/keys/ocr2key/evm_keyring_test.go: `.Run("invalid sig", func(t *testing.T) {
report := ocrtypes.Report{}
result := kr2.Verify(kr1.PublicKey(), ctx, report, []byte{0x01})
assert.False(t, result)
})`
$DIR/core/services/keystore/keys/ocr2key/evm_keyring_test.go: `.Verify(kr1.PublicKey(), ctx, report, []byte{0x01})`
$DIR/core/services/keystore/keys/ocr2key/evm_keyring_test.go: `.PublicKey()`
$DIR/core/services/keystore/keys/ocr2key/evm_keyring_test.go: `.Sign(ctx, report)`
$DIR/core/services/keystore/keys/ocr2key/evm_keyring_test.go: `.Verify([]byte{0x01}, ctx, report, sig)`
$DIR/core/services/keystore/keys/ocr2key/evm_keyring_test.go: `.BytesToConfigDigest(testutils.MustRandBytes(32))`
$DIR/core/services/keystore/keys/ocr2key/evm_keyring_test.go: `.MustRandBytes(32)`
$DIR/core/services/keystore/keys/ocr2key/evm_keyring_test.go: `.Uint64()`
$DIR/core/services/keystore/keys/ocr2key/evm_keyring_test.go: `.Report(testutils.MustRandBytes(rand.Intn(1024)))`
$DIR/core/services/keystore/keys/ocr2key/evm_keyring_test.go: `.MustRandBytes(rand.Intn(1024))`
$DIR/core/services/keystore/keys/ocr2key/evm_keyring_test.go: `.Intn(1024)`
$DIR/core/services/keystore/keys/ocr2key/evm_keyring_test.go: `.Run("can verify", func(t *testing.T) {
sig, err := kr1.Sign3(digest, seqNr, r)
require.NoError(t, err)
t.Log(len(sig))
result := kr2.Verify3(kr1.PublicKey(), digest, seqNr, r, sig)
assert.True(t, result)
})`
$DIR/core/services/keystore/keys/ocr2key/evm_keyring_test.go: `.Sign3(digest, seqNr, r)`
$DIR/core/services/keystore/keys/ocr2key/evm_keyring_test.go: `.Verify3(kr1.PublicKey(), digest, seqNr, r, sig)`
$DIR/core/services/keystore/keys/ocr2key/evm_keyring_test.go: `.PublicKey()`
$DIR/core/services/keystore/keys/ocr2key/evm_keyring_test.go: `.Run("invalid sig", func(t *testing.T) {
result := kr2.Verify3(kr1.PublicKey(), digest, seqNr, r, []byte{0x01})
assert.False(t, result)
})`
$DIR/core/services/keystore/keys/ocr2key/evm_keyring_test.go: `.Verify3(kr1.PublicKey(), digest, seqNr, r, []byte{0x01})`
$DIR/core/services/keystore/keys/ocr2key/evm_keyring_test.go: `.PublicKey()`
$DIR/core/services/keystore/keys/ocr2key/evm_keyring_test.go: `.Sign3(digest, seqNr, r)`
$DIR/core/services/keystore/keys/ocr2key/evm_keyring_test.go: `.Verify3([]byte{0x01}, digest, seqNr, r, sig)`
$DIR/core/services/keystore/keys/ocr2key/evm_keyring_test.go: `.Marshal()`
$DIR/core/services/keystore/keys/ocr2key/evm_keyring_test.go: `.Unmarshal(m)`
$DIR/core/services/keystore/keys/ocr2key/evm_keyring_test.go: `.Unmarshal([]byte{0x01})`
$DIR/core/services/keystore/keys/ocr2key/export_test.go: `t.Run(string(tc.chain), func(t *testing.T) {
kb, err := New(tc.chain)
require.NoError(t, err)
ej, err := ToEncryptedJSON(kb, "blah", utils.FastScryptParams)
require.NoError(t, err)
kbAfter, err := FromEncryptedJSON(ej, "blah")
require.NoError(t, err)
assert.Equal(t, kbAfter.ID(), kb.ID())
assert.Equal(t, kbAfter.PublicKey(), kb.PublicKey())
assert.Equal(t, kbAfter.OffchainPublicKey(), kb.OffchainPublicKey())
assert.Equal(t, kbAfter.MaxSignatureLength(), kb.MaxSignatureLength())
assert.Equal(t, kbAfter.Raw(), kb.Raw())
assert.Equal(t, kbAfter.ConfigEncryptionPublicKey(), kb.ConfigEncryptionPublicKey())
assert.Equal(t, kbAfter.ChainType(), kb.ChainType())
})`
$DIR/core/services/keystore/keys/ocr2key/export_test.go: `.Run(string(tc.chain), func(t *testing.T) {
kb, err := New(tc.chain)
require.NoError(t, err)
ej, err := ToEncryptedJSON(kb, "blah", utils.FastScryptParams)
require.NoError(t, err)
kbAfter, err := FromEncryptedJSON(ej, "blah")
require.NoError(t, err)
assert.Equal(t, kbAfter.ID(), kb.ID())
assert.Equal(t, kbAfter.PublicKey(), kb.PublicKey())
assert.Equal(t, kbAfter.OffchainPublicKey(), kb.OffchainPublicKey())
assert.Equal(t, kbAfter.MaxSignatureLength(), kb.MaxSignatureLength())
assert.Equal(t, kbAfter.Raw(), kb.Raw())
assert.Equal(t, kbAfter.ConfigEncryptionPublicKey(), kb.ConfigEncryptionPublicKey())
assert.Equal(t, kbAfter.ChainType(), kb.ChainType())
})`
$DIR/core/services/keystore/keys/ocr2key/generic_key_bundle_test.go: `t.Run("EVM", func(t *testing.T) {
// onchain key
onKey, err := newEVMKeyring(cryptorand.Reader)
require.NoError(t, err)
onBytes, err := onKey.Marshal()
require.NoError(t, err)
// marshal old key format
oldKey := XXXOldEVMKeyBundleRawData{
ChainType: chaintype.EVM,
OffchainKeyring: offBytes,
EVMKeyring: onBytes,
}
bundleBytes, err := json.Marshal(oldKey)
require.NoError(t, err)
// test Unmarshal with old raw bundle
bundle := newKeyBundle(&evmKeyring{})
require.NoError(t, bundle.Unmarshal(bundleBytes))
newBundleBytes, err := bundle.Marshal() // marshalling migrates to a generic struct
require.NoError(t, err)
// new bundle == old bundle (only difference is Keyring == Keyring)
var newRawBundle keyBundleRawData
require.NoError(t, json.Unmarshal(newBundleBytes, &newRawBundle))
assert.Equal(t, oldKey.ChainType, newRawBundle.ChainType)
assert.Equal(t, oldKey.OffchainKeyring, newRawBundle.OffchainKeyring)
assert.Equal(t, oldKey.EVMKeyring, newRawBundle.Keyring)
// test unmarshalling again to ensure ID has not changed
// the underlying bytes have changed, but ID should be preserved
newBundle := newKeyBundle(&evmKeyring{})
require.NoError(t, newBundle.Unmarshal(newBundleBytes))
assert.Equal(t, bundle.ID(), newBundle.ID())
})`
$DIR/core/services/keystore/keys/ocr2key/generic_key_bundle_test.go: `t.Run("Solana", func(t *testing.T) {
// onchain key
onKey, err := newSolanaKeyring(cryptorand.Reader)
require.NoError(t, err)
onBytes, err := onKey.Marshal()
require.NoError(t, err)
// marshal old key format
oldKey := XXXOldSolanaKeyBundleRawData{
ChainType: chaintype.Solana,
OffchainKeyring: offBytes,
SolanaKeyring: onBytes,
}
bundleBytes, err := json.Marshal(oldKey)
require.NoError(t, err)
// test Unmarshal with old raw bundle
bundle := newKeyBundle(&solanaKeyring{})
require.NoError(t, bundle.Unmarshal(bundleBytes))
newBundleBytes, err := bundle.Marshal()
require.NoError(t, err)
// new bundle == old bundle (only difference is Keyring == Keyring)
var newRawBundle keyBundleRawData
require.NoError(t, json.Unmarshal(newBundleBytes, &newRawBundle))
assert.Equal(t, oldKey.ChainType, newRawBundle.ChainType)
assert.Equal(t, oldKey.OffchainKeyring, newRawBundle.OffchainKeyring)
assert.Equal(t, oldKey.SolanaKeyring, newRawBundle.Keyring)
// test unmarshalling again to ensure ID has not changed
// the underlying bytes have changed, but ID should be preserved
newBundle := newKeyBundle(&solanaKeyring{})
require.NoError(t, newBundle.Unmarshal(newBundleBytes))
assert.Equal(t, bundle.ID(), newBundle.ID())
})`
$DIR/core/services/keystore/keys/ocr2key/generic_key_bundle_test.go: `t.Run("Cosmos", func(t *testing.T) {
// onchain key
bundle, err := newKeyBundleRand(chaintype.Cosmos, newCosmosKeyring)
require.NoError(t, err)
bundleBytes, err := bundle.Marshal()
require.NoError(t, err)
// test unmarshalling again to ensure ID has not changed
// the underlying bytes have changed, but ID should be preserved
otherBundle := newKeyBundle(&cosmosKeyring{})
require.NoError(t, otherBundle.Unmarshal(bundleBytes))
assert.Equal(t, bundle.ID(), otherBundle.ID())
})`
$DIR/core/services/keystore/keys/ocr2key/generic_key_bundle_test.go: `.marshal()`
$DIR/core/services/keystore/keys/ocr2key/generic_key_bundle_test.go: `.Run("EVM", func(t *testing.T) {
// onchain key
onKey, err := newEVMKeyring(cryptorand.Reader)
require.NoError(t, err)
onBytes, err := onKey.Marshal()
require.NoError(t, err)
// marshal old key format
oldKey := XXXOldEVMKeyBundleRawData{
ChainType: chaintype.EVM,
OffchainKeyring: offBytes,
EVMKeyring: onBytes,
}
bundleBytes, err := json.Marshal(oldKey)
require.NoError(t, err)
// test Unmarshal with old raw bundle
bundle := newKeyBundle(&evmKeyring{})
require.NoError(t, bundle.Unmarshal(bundleBytes))
newBundleBytes, err := bundle.Marshal() // marshalling migrates to a generic struct
require.NoError(t, err)
// new bundle == old bundle (only difference is Keyring == Keyring)
var newRawBundle keyBundleRawData
require.NoError(t, json.Unmarshal(newBundleBytes, &newRawBundle))
assert.Equal(t, oldKey.ChainType, newRawBundle.ChainType)
assert.Equal(t, oldKey.OffchainKeyring, newRawBundle.OffchainKeyring)
assert.Equal(t, oldKey.EVMKeyring, newRawBundle.Keyring)
// test unmarshalling again to ensure ID has not changed
// the underlying bytes have changed, but ID should be preserved
newBundle := newKeyBundle(&evmKeyring{})
require.NoError(t, newBundle.Unmarshal(newBundleBytes))
assert.Equal(t, bundle.ID(), newBundle.ID())
})`
$DIR/core/services/keystore/keys/ocr2key/generic_key_bundle_test.go: `.Marshal()`
$DIR/core/services/keystore/keys/ocr2key/generic_key_bundle_test.go: `.Marshal(oldKey)`
$DIR/core/services/keystore/keys/ocr2key/generic_key_bundle_test.go: `.Marshal()`
$DIR/core/services/keystore/keys/ocr2key/generic_key_bundle_test.go: `.Run("Solana", func(t *testing.T) {
// onchain key
onKey, err := newSolanaKeyring(cryptorand.Reader)
require.NoError(t, err)
onBytes, err := onKey.Marshal()
require.NoError(t, err)
// marshal old key format
oldKey := XXXOldSolanaKeyBundleRawData{
ChainType: chaintype.Solana,
OffchainKeyring: offBytes,
SolanaKeyring: onBytes,
}
bundleBytes, err := json.Marshal(oldKey)
require.NoError(t, err)
// test Unmarshal with old raw bundle
bundle := newKeyBundle(&solanaKeyring{})
require.NoError(t, bundle.Unmarshal(bundleBytes))
newBundleBytes, err := bundle.Marshal()
require.NoError(t, err)
// new bundle == old bundle (only difference is Keyring == Keyring)
var newRawBundle keyBundleRawData
require.NoError(t, json.Unmarshal(newBundleBytes, &newRawBundle))
assert.Equal(t, oldKey.ChainType, newRawBundle.ChainType)
assert.Equal(t, oldKey.OffchainKeyring, newRawBundle.OffchainKeyring)
assert.Equal(t, oldKey.SolanaKeyring, newRawBundle.Keyring)
// test unmarshalling again to ensure ID has not changed
// the underlying bytes have changed, but ID should be preserved
newBundle := newKeyBundle(&solanaKeyring{})
require.NoError(t, newBundle.Unmarshal(newBundleBytes))
assert.Equal(t, bundle.ID(), newBundle.ID())
})`
$DIR/core/services/keystore/keys/ocr2key/generic_key_bundle_test.go: `.Marshal()`
$DIR/core/services/keystore/keys/ocr2key/generic_key_bundle_test.go: `.Marshal(oldKey)`
$DIR/core/services/keystore/keys/ocr2key/generic_key_bundle_test.go: `.Marshal()`
$DIR/core/services/keystore/keys/ocr2key/generic_key_bundle_test.go: `.Run("Cosmos", func(t *testing.T) {
// onchain key
bundle, err := newKeyBundleRand(chaintype.Cosmos, newCosmosKeyring)
require.NoError(t, err)
bundleBytes, err := bundle.Marshal()
require.NoError(t, err)
// test unmarshalling again to ensure ID has not changed
// the underlying bytes have changed, but ID should be preserved
otherBundle := newKeyBundle(&cosmosKeyring{})
require.NoError(t, otherBundle.Unmarshal(bundleBytes))
assert.Equal(t, bundle.ID(), otherBundle.ID())
})`
$DIR/core/services/keystore/keys/ocr2key/generic_key_bundle_test.go: `.Marshal()`
$DIR/core/services/keystore/keys/ocr2key/generic_key_bundle_test.go: `.Marshal()`
$DIR/core/services/keystore/keys/ocr2key/generic_key_bundle_test.go: `.Marshal(oldKey)`
$DIR/core/services/keystore/keys/ocr2key/generic_key_bundle_test.go: `.Marshal()`
$DIR/core/services/keystore/keys/ocr2key/key_bundle_test.go: `keys = append(keys, pk0)`
$DIR/core/services/keystore/keys/ocr2key/key_bundle_test.go: `keys = append(keys, pk1)`
$DIR/core/services/keystore/keys/ocr2key/key_bundle_test.go: `assertKeyBundlesNotEqual(t, keys[i], keys[j])`
$DIR/core/services/keystore/keys/ocr2key/key_bundle_test.go: `.New(chain)`
$DIR/core/services/keystore/keys/ocr2key/key_bundle_test.go: `.New(chain)`
$DIR/core/services/keystore/keys/ocr2key/key_bundle_test.go: `.New(chain)`
$DIR/core/services/keystore/keys/ocr2key/key_bundle_test.go: `.Raw()`
$DIR/core/services/keystore/keys/ocr2key/key_bundle_test.go: `.Key()`
$DIR/core/services/keystore/keys/ocr2key/key_bundle_test.go: `.New(chain)`
$DIR/core/services/keystore/keys/ocr2key/offchain_keyring_test.go: `_, err = kr.NaclBoxOpenAnonymous(shortMessage)`
$DIR/core/services/keystore/keys/ocr2key/offchain_keyring_test.go: `_, err = kr.NaclBoxOpenAnonymous(invalid)`
$DIR/core/services/keystore/keys/ocr2key/offchain_keyring_test.go: `.OffchainPublicKey()`
$DIR/core/services/keystore/keys/ocr2key/offchain_keyring_test.go: `.Equal(kr.signingKey.Public().(ed25519.PublicKey), pubKey[:])`
$DIR/core/services/keystore/keys/ocr2key/offchain_keyring_test.go: `.signingKey.Public()`
$DIR/core/services/keystore/keys/ocr2key/offchain_keyring_test.go: `.ConfigEncryptionPublicKey()`
$DIR/core/services/keystore/keys/ocr2key/offchain_keyring_test.go: `.NaclBoxOpenAnonymous(encryptedMessage)`
$DIR/core/services/keystore/keys/ocr2key/offchain_keyring_test.go: `.NaclBoxOpenAnonymous(shortMessage)`
$DIR/core/services/keystore/keys/ocr2key/offchain_keyring_test.go: `.NaclBoxOpenAnonymous(invalid)`
$DIR/core/services/keystore/keys/ocr2key/solana_keyring_test.go: `t.Run("can verify", func(t *testing.T) {
report := ocrtypes.Report{}
sig, err := kr1.Sign(ctx, report)
require.NoError(t, err)
t.Log(len(sig))
result := kr2.Verify(kr1.PublicKey(), ctx, report, sig)
assert.True(t, result)
})`
$DIR/core/services/keystore/keys/ocr2key/solana_keyring_test.go: `t.Run("invalid sig", func(t *testing.T) {
report := ocrtypes.Report{}
result := kr2.Verify(kr1.PublicKey(), ctx, report, []byte{0x01})
assert.False(t, result)
})`
$DIR/core/services/keystore/keys/ocr2key/solana_keyring_test.go: `err = kr2.Unmarshal(m)`
$DIR/core/services/keystore/keys/ocr2key/solana_keyring_test.go: `.Run("can verify", func(t *testing.T) {
report := ocrtypes.Report{}
sig, err := kr1.Sign(ctx, report)
require.NoError(t, err)
t.Log(len(sig))
result := kr2.Verify(kr1.PublicKey(), ctx, report, sig)
assert.True(t, result)
})`
$DIR/core/services/keystore/keys/ocr2key/solana_keyring_test.go: `.Sign(ctx, report)`
$DIR/core/services/keystore/keys/ocr2key/solana_keyring_test.go: `.Verify(kr1.PublicKey(), ctx, report, sig)`
$DIR/core/services/keystore/keys/ocr2key/solana_keyring_test.go: `.PublicKey()`
$DIR/core/services/keystore/keys/ocr2key/solana_keyring_test.go: `.Run("invalid sig", func(t *testing.T) {
report := ocrtypes.Report{}
result := kr2.Verify(kr1.PublicKey(), ctx, report, []byte{0x01})
assert.False(t, result)
})`
$DIR/core/services/keystore/keys/ocr2key/solana_keyring_test.go: `.Verify(kr1.PublicKey(), ctx, report, []byte{0x01})`
$DIR/core/services/keystore/keys/ocr2key/solana_keyring_test.go: `.PublicKey()`
$DIR/core/services/keystore/keys/ocr2key/solana_keyring_test.go: `.Sign(ctx, report)`
$DIR/core/services/keystore/keys/ocr2key/solana_keyring_test.go: `.Verify([]byte{0x01}, ctx, report, sig)`
$DIR/core/services/keystore/keys/ocr2key/solana_keyring_test.go: `.Marshal()`
$DIR/core/services/keystore/keys/ocr2key/solana_keyring_test.go: `.Unmarshal(m)`
$DIR/core/services/keystore/keys/ocr2key/solana_keyring_test.go: `.Equal(kr1.privateKey.D.Bytes(), kr2.privateKey.D.Bytes())`
$DIR/core/services/keystore/keys/ocr2key/solana_keyring_test.go: `.privateKey.D.Bytes()`
$DIR/core/services/keystore/keys/ocr2key/solana_keyring_test.go: `.privateKey.D.Bytes()`
$DIR/core/services/keystore/keys/ocrkey/config_public_key_test.go: `t.Run("fails to unmarshal invalid JSON", func(t *testing.T) {
pk := ConfigPublicKey(k.PublicKeyConfig())
err := pk.UnmarshalJSON([]byte(""))
assert.Error(t, err)
})`
$DIR/core/services/keystore/keys/ocrkey/config_public_key_test.go: `t.Run("returns serialized instance value", func(t *testing.T) {
pk := ConfigPublicKey(k.PublicKeyConfig())
v, err := pk.Value()
require.NoError(t, err)
assert.NotEmpty(t, v)
})`
$DIR/core/services/keystore/keys/ocrkey/config_public_key_test.go: `.NewInt(1)`
$DIR/core/services/keystore/keys/ocrkey/config_public_key_test.go: `.Run("fails to unmarshal invalid JSON", func(t *testing.T) {
pk := ConfigPublicKey(k.PublicKeyConfig())
err := pk.UnmarshalJSON([]byte(""))
assert.Error(t, err)
})`
$DIR/core/services/keystore/keys/ocrkey/config_public_key_test.go: `.PublicKeyConfig()`
$DIR/core/services/keystore/keys/ocrkey/config_public_key_test.go: `.UnmarshalJSON([]byte(""))`
$DIR/core/services/keystore/keys/ocrkey/config_public_key_test.go: `.Run("returns serialized instance value", func(t *testing.T) {
pk := ConfigPublicKey(k.PublicKeyConfig())
v, err := pk.Value()
require.NoError(t, err)
assert.NotEmpty(t, v)
})`
$DIR/core/services/keystore/keys/ocrkey/config_public_key_test.go: `.PublicKeyConfig()`
$DIR/core/services/keystore/keys/ocrkey/config_public_key_test.go: `.Value()`
$DIR/core/services/keystore/keys/ocrkey/config_public_key_test.go: `.PublicKeyConfig()`
$DIR/core/services/keystore/keys/ocrkey/config_public_key_test.go: `.NewInt(1)`
$DIR/core/services/keystore/keys/ocrkey/config_public_key_test.go: `.PublicKeyConfig()`
$DIR/core/services/keystore/keys/ocrkey/config_public_key_test.go: `.Scan(pk2[:])`
$DIR/core/services/keystore/keys/ocrkey/key_bundle_test.go: `assertKeyBundlesNotEqual(t, pk1, pk2)`
$DIR/core/services/keystore/keys/ocrkey/key_bundle_test.go: `assertKeyBundlesNotEqual(t, pk1, pk3)`
$DIR/core/services/keystore/keys/ocrkey/key_bundle_test.go: `err = ek.SetID("48656c6c6f20476f7068657221")`
$DIR/core/services/keystore/keys/ocrkey/key_bundle_test.go: `err = ek.SetID("invalid id")`
$DIR/core/services/keystore/keys/ocrkey/key_bundle_test.go: `_, err = ek.Decrypt("wrongpass")`
$DIR/core/services/keystore/keys/ocrkey/key_bundle_test.go: `dk.GoString()`
$DIR/core/services/keystore/keys/ocrkey/key_bundle_test.go: `err = k2.UnmarshalJSON(mk)`
$DIR/core/services/keystore/keys/ocrkey/key_bundle_test.go: `.NewV2()`
$DIR/core/services/keystore/keys/ocrkey/key_bundle_test.go: `.NewV2()`
$DIR/core/services/keystore/keys/ocrkey/key_bundle_test.go: `.NewV2()`
$DIR/core/services/keystore/keys/ocrkey/key_bundle_test.go: `.New()`
$DIR/core/services/keystore/keys/ocrkey/key_bundle_test.go: `.ToV2()`
$DIR/core/services/keystore/keys/ocrkey/key_bundle_test.go: `.ID.String()`
$DIR/core/services/keystore/keys/ocrkey/key_bundle_test.go: `.ID()`
$DIR/core/services/keystore/keys/ocrkey/key_bundle_test.go: `.MustNewV2XXXTestingOnly(big.NewInt(1))`
$DIR/core/services/keystore/keys/ocrkey/key_bundle_test.go: `.NewInt(1)`
$DIR/core/services/keystore/keys/ocrkey/key_bundle_test.go: `.ID()`
$DIR/core/services/keystore/keys/ocrkey/key_bundle_test.go: `.Raw()`
$DIR/core/services/keystore/keys/ocrkey/key_bundle_test.go: `.Key()`
$DIR/core/services/keystore/keys/ocrkey/key_bundle_test.go: `.ID()`
$DIR/core/services/keystore/keys/ocrkey/key_bundle_test.go: `.New()`
$DIR/core/services/keystore/keys/ocrkey/key_bundle_test.go: `.Encrypt("test", utils.FastScryptParams)`
$DIR/core/services/keystore/keys/ocrkey/key_bundle_test.go: `.GetID()`
$DIR/core/services/keystore/keys/ocrkey/key_bundle_test.go: `.SetID("48656c6c6f20476f7068657221")`
$DIR/core/services/keystore/keys/ocrkey/key_bundle_test.go: `.SetID("invalid id")`
$DIR/core/services/keystore/keys/ocrkey/key_bundle_test.go: `.New()`
$DIR/core/services/keystore/keys/ocrkey/key_bundle_test.go: `.Encrypt("test", utils.FastScryptParams)`
$DIR/core/services/keystore/keys/ocrkey/key_bundle_test.go: `.Decrypt("wrongpass")`
$DIR/core/services/keystore/keys/ocrkey/key_bundle_test.go: `.Decrypt("test")`
$DIR/core/services/keystore/keys/ocrkey/key_bundle_test.go: `.GoString()`
$DIR/core/services/keystore/keys/ocrkey/key_bundle_test.go: `.ID.String()`
$DIR/core/services/keystore/keys/ocrkey/key_bundle_test.go: `.ID.String()`
$DIR/core/services/keystore/keys/ocrkey/key_bundle_test.go: `.New()`
$DIR/core/services/keystore/keys/ocrkey/key_bundle_test.go: `.New()`
$DIR/core/services/keystore/keys/ocrkey/key_bundle_test.go: `.MarshalJSON()`
$DIR/core/services/keystore/keys/ocrkey/key_bundle_test.go: `.UnmarshalJSON(mk)`
$DIR/core/services/keystore/keys/ocrkey/key_bundle_test.go: `.String()`
$DIR/core/services/keystore/keys/ocrkey/key_bundle_test.go: `.String()`
$DIR/core/services/keystore/keys/ocrkey/off_chain_public_key_test.go: `rawBytes[31] = 1`
$DIR/core/services/keystore/keys/ocrkey/off_chain_public_key_test.go: `.OffChainPublicKey(rawBytes)`
$DIR/core/services/keystore/keys/ocrkey/off_chain_public_key_test.go: `.Sprintf(`"%s"`, pubKeyString)`
$DIR/core/services/keystore/keys/ocrkey/off_chain_public_key_test.go: `.Marshal(pubKey)`
$DIR/core/services/keystore/keys/ocrkey/off_chain_public_key_test.go: `.Sprintf(`"%s"`, pubKeyString)`
$DIR/core/services/keystore/keys/ocrkey/off_chain_public_key_test.go: `.Unmarshal([]byte(pubKeyJSON), &pubKey)`
$DIR/core/services/keystore/keys/ocrkey/off_chain_public_key_test.go: `.Raw()`
$DIR/core/services/keystore/keys/ocrkey/off_chain_public_key_test.go: `.Sprintf(`"%s"`, pubKeyString)`
$DIR/core/services/keystore/keys/ocrkey/off_chain_public_key_test.go: `.Unmarshal([]byte(pubKeyJSON), &pubKey)`
$DIR/core/services/keystore/keys/ocrkey/off_chan_private_key_test.go: `.offChainSigning.Sign([]byte("hello world"))`
$DIR/core/services/keystore/keys/ocrkey/on_chain_private_key_test.go: `.GenerateKey(crypto.S256(), rand.Reader)`
$DIR/core/services/keystore/keys/ocrkey/on_chain_private_key_test.go: `.S256()`
$DIR/core/services/keystore/keys/ocrkey/on_chain_private_key_test.go: `.Sign([]byte("hello world"))`
$DIR/core/services/keystore/keys/ocrkey/on_chain_public_key_test.go: `.GenerateKey(crypto.S256(), rand.Reader)`
$DIR/core/services/keystore/keys/ocrkey/on_chain_public_key_test.go: `.S256()`
$DIR/core/services/keystore/keys/ocrkey/on_chain_public_key_test.go: `.Address()`
$DIR/core/services/keystore/keys/ocrkey/on_chain_signing_address_test.go: `_, err = address.Value()`
$DIR/core/services/keystore/keys/ocrkey/on_chain_signing_address_test.go: `.UnmarshalText([]byte(ocrSigningKey))`
$DIR/core/services/keystore/keys/ocrkey/on_chain_signing_address_test.go: `.Value()`
$DIR/core/services/keystore/keys/ocrkey/on_chain_signing_address_test.go: `.String()`
$DIR/core/services/keystore/keys/p2pkey/key_test.go: `t.Run("converts into V2 key", func(t *testing.T) {
k2 := k.ToV2()
assert.Equal(t, k.PrivKey, k2.PrivKey)
assert.Equal(t, k.PeerID(), k2.peerID)
})`
$DIR/core/services/keystore/keys/p2pkey/key_test.go: `err = pkb.UnmarshalJSON(b)`
$DIR/core/services/keystore/keys/p2pkey/key_test.go: `err = pkb.UnmarshalJSON([]byte(""))`
$DIR/core/services/keystore/keys/p2pkey/key_test.go: `err = pkb.Scan([]byte(pk))`
$DIR/core/services/keystore/keys/p2pkey/key_test.go: `err = pkb.Scan("invalid-type")`
$DIR/core/services/keystore/keys/p2pkey/key_test.go: `marshalledPrivK, err = MarshalPrivateKey(k.PrivKey)`
$DIR/core/services/keystore/keys/p2pkey/key_test.go: `t.Run("sets a different ID", func(t *testing.T) {
err := p2pk.SetID("12")
require.NoError(t, err)
assert.Equal(t, int32(12), p2pk.ID)
err = p2pk.SetID("invalid")
assert.Error(t, err)
})`
$DIR/core/services/keystore/keys/p2pkey/key_test.go: `err = p2pk.SetID("invalid")`
$DIR/core/services/keystore/keys/p2pkey/key_test.go: `k, err = p2pk.Decrypt("password")`
$DIR/core/services/keystore/keys/p2pkey/key_test.go: `.GenerateKey(rand.Reader)`
$DIR/core/services/keystore/keys/p2pkey/key_test.go: `.Run("converts into V2 key", func(t *testing.T) {
k2 := k.ToV2()
assert.Equal(t, k.PrivKey, k2.PrivKey)
assert.Equal(t, k.PeerID(), k2.peerID)
})`
$DIR/core/services/keystore/keys/p2pkey/key_test.go: `.ToV2()`
$DIR/core/services/keystore/keys/p2pkey/key_test.go: `.GetPeerID()`
$DIR/core/services/keystore/keys/p2pkey/key_test.go: `.PeerID()`
$DIR/core/services/keystore/keys/p2pkey/key_test.go: `.GenerateKey(rand.Reader)`
$DIR/core/services/keystore/keys/p2pkey/key_test.go: `.MarshalJSON()`
$DIR/core/services/keystore/keys/p2pkey/key_test.go: `.UnmarshalJSON(b)`
$DIR/core/services/keystore/keys/p2pkey/key_test.go: `.UnmarshalJSON([]byte(""))`
$DIR/core/services/keystore/keys/p2pkey/key_test.go: `.Scan([]byte(pk))`
$DIR/core/services/keystore/keys/p2pkey/key_test.go: `.Scan("invalid-type")`
$DIR/core/services/keystore/keys/p2pkey/key_test.go: `.Value()`
$DIR/core/services/keystore/keys/p2pkey/key_test.go: `.GenerateKey(rand.Reader)`
$DIR/core/services/keystore/keys/p2pkey/key_test.go: `.PrivKey.Public()`
$DIR/core/services/keystore/keys/p2pkey/key_test.go: `.EncryptDataV3(marshalledPrivK, []byte(adulteratedPassword("password")), utils.FastScryptParams.N, utils.FastScryptParams.P)`
$DIR/core/services/keystore/keys/p2pkey/key_test.go: `.Marshal(&cryptoJSON)`
$DIR/core/services/keystore/keys/p2pkey/key_test.go: `.PeerID()`
$DIR/core/services/keystore/keys/p2pkey/key_test.go: `.Run("sets a different ID", func(t *testing.T) {
err := p2pk.SetID("12")
require.NoError(t, err)
assert.Equal(t, int32(12), p2pk.ID)
err = p2pk.SetID("invalid")
assert.Error(t, err)
})`
$DIR/core/services/keystore/keys/p2pkey/key_test.go: `.SetID("12")`
$DIR/core/services/keystore/keys/p2pkey/key_test.go: `.SetID("invalid")`
$DIR/core/services/keystore/keys/p2pkey/key_test.go: `.Decrypt("invalid-pass")`
$DIR/core/services/keystore/keys/p2pkey/key_test.go: `.Decrypt("password")`
$DIR/core/services/keystore/keys/p2pkey/key_v2_test.go: `.GenerateKey(rand.Reader)`
$DIR/core/services/keystore/keys/p2pkey/key_v2_test.go: `.String()`
$DIR/core/services/keystore/keys/p2pkey/key_v2_test.go: `.GenerateKey(rand.Reader)`
$DIR/core/services/keystore/keys/p2pkey/key_v2_test.go: `.ToV2()`
$DIR/core/services/keystore/keys/p2pkey/key_v2_test.go: `.PrivKey.Public()`
$DIR/core/services/keystore/keys/p2pkey/key_v2_test.go: `.EncodeToString(pkv2)`
$DIR/core/services/keystore/keys/p2pkey/key_v2_test.go: `.PublicKeyHex()`
$DIR/core/services/keystore/keys/p2pkey/peer_id_test.go: `t.Run("make peer ID", func(t *testing.T) {
id, err := MakePeerID("12D3KooWM1111111111111111111111111111111111111111111")
require.NoError(t, err)
_, err = MakePeerID("invalid")
assert.Error(t, err)
assert.Equal(t, "p2p_12D3KooWM1111111111111111111111111111111111111111111", id.String())
})`
$DIR/core/services/keystore/keys/p2pkey/peer_id_test.go: `_, err = MakePeerID("invalid")`
$DIR/core/services/keystore/keys/p2pkey/peer_id_test.go: `t.Run("unmarshals new ID", func(t *testing.T) {
id, err := MakePeerID("12D3KooWM1111111111111111111111111111111111111111111")
require.NoError(t, err)
fakeKey := MustNewV2XXXTestingOnly(big.NewInt(1))
err = id.UnmarshalString(fakeKey.ID())
require.NoError(t, err)
assert.Equal(t, "p2p_"+fakeKey.ID(), id.String())
})`
$DIR/core/services/keystore/keys/p2pkey/peer_id_test.go: `err = id.UnmarshalString(fakeKey.ID())`
$DIR/core/services/keystore/keys/p2pkey/peer_id_test.go: `err = id.Scan(fakeKey.ID())`
$DIR/core/services/keystore/keys/p2pkey/peer_id_test.go: `err = id.Scan(12)`
$DIR/core/services/keystore/keys/p2pkey/peer_id_test.go: `t.Run("json", func(t *testing.T) {
b, err := id.MarshalJSON()
require.NoError(t, err)
var got PeerID
require.NoError(t, got.UnmarshalJSON(b))
require.Equal(t, id, got)
})`
$DIR/core/services/keystore/keys/p2pkey/peer_id_test.go: `t.Run("db", func(t *testing.T) {
v, err := id.Value()
require.NoError(t, err)
var got PeerID
require.NoError(t, got.Scan(v))
require.Equal(t, id, got)
})`
$DIR/core/services/keystore/keys/p2pkey/peer_id_test.go: `.Run("make peer ID", func(t *testing.T) {
id, err := MakePeerID("12D3KooWM1111111111111111111111111111111111111111111")
require.NoError(t, err)
_, err = MakePeerID("invalid")
assert.Error(t, err)
assert.Equal(t, "p2p_12D3KooWM1111111111111111111111111111111111111111111", id.String())
})`
$DIR/core/services/keystore/keys/p2pkey/peer_id_test.go: `.Run("unmarshals new ID", func(t *testing.T) {
id, err := MakePeerID("12D3KooWM1111111111111111111111111111111111111111111")
require.NoError(t, err)
fakeKey := MustNewV2XXXTestingOnly(big.NewInt(1))
err = id.UnmarshalString(fakeKey.ID())
require.NoError(t, err)
assert.Equal(t, "p2p_"+fakeKey.ID(), id.String())
})`
$DIR/core/services/keystore/keys/p2pkey/peer_id_test.go: `.NewInt(1)`
$DIR/core/services/keystore/keys/p2pkey/peer_id_test.go: `.UnmarshalString(fakeKey.ID())`
$DIR/core/services/keystore/keys/p2pkey/peer_id_test.go: `.ID()`
$DIR/core/services/keystore/keys/p2pkey/peer_id_test.go: `.NewInt(1)`
$DIR/core/services/keystore/keys/p2pkey/peer_id_test.go: `.Scan(fakeKey.ID())`
$DIR/core/services/keystore/keys/p2pkey/peer_id_test.go: `.ID()`
$DIR/core/services/keystore/keys/p2pkey/peer_id_test.go: `.Scan(12)`
$DIR/core/services/keystore/keys/p2pkey/peer_id_test.go: `.Run("json", func(t *testing.T) {
b, err := id.MarshalJSON()
require.NoError(t, err)
var got PeerID
require.NoError(t, got.UnmarshalJSON(b))
require.Equal(t, id, got)
})`
$DIR/core/services/keystore/keys/p2pkey/peer_id_test.go: `.MarshalJSON()`
$DIR/core/services/keystore/keys/p2pkey/peer_id_test.go: `.Run("db", func(t *testing.T) {
v, err := id.Value()
require.NoError(t, err)
var got PeerID
require.NoError(t, got.Scan(v))
require.Equal(t, id, got)
})`
$DIR/core/services/keystore/keys/p2pkey/peer_id_test.go: `.Value()`
$DIR/core/services/keystore/keys/p2pkey/peer_id_test.go: `.MarshalText()`
$DIR/core/services/keystore/keys/starkkey/ocr2key_test.go: `err = kr1.Unmarshal(bytesKey[:])`
$DIR/core/services/keystore/keys/starkkey/ocr2key_test.go: `report = append(report, b1[:]...)`
$DIR/core/services/keystore/keys/starkkey/ocr2key_test.go: `report = append(report, b2[:]...)`
$DIR/core/services/keystore/keys/starkkey/ocr2key_test.go: `report = append(report, b3[:]...)`
$DIR/core/services/keystore/keys/starkkey/ocr2key_test.go: `report = append(report, b4[:]...)`
$DIR/core/services/keystore/keys/starkkey/ocr2key_test.go: `report = append(report, b4[:]...)`
$DIR/core/services/keystore/keys/starkkey/ocr2key_test.go: `report = append(report, b4[:]...)`
$DIR/core/services/keystore/keys/starkkey/ocr2key_test.go: `report = append(report, b4[:]...)`
$DIR/core/services/keystore/keys/starkkey/ocr2key_test.go: `report = append(report, b1[:]...)`
$DIR/core/services/keystore/keys/starkkey/ocr2key_test.go: `t.Run("can verify", func(t *testing.T) {
sig, err := kr1.Sign(ctx, report)
require.NoError(t, err)
result := kr2.Verify(kr1.PublicKey(), ctx, report, sig)
require.True(t, result)
})`
$DIR/core/services/keystore/keys/starkkey/ocr2key_test.go: `t.Run("invalid sig", func(t *testing.T) {
result := kr2.Verify(kr1.PublicKey(), ctx, report, []byte{0x01})
require.False(t, result)
longSig := [100]byte{}
result = kr2.Verify(kr1.PublicKey(), ctx, report, longSig[:])
require.False(t, result)
})`
$DIR/core/services/keystore/keys/starkkey/ocr2key_test.go: `result = kr2.Verify(kr1.PublicKey(), ctx, report, longSig[:])`
$DIR/core/services/keystore/keys/starkkey/ocr2key_test.go: `pk = big.NewInt(int64(31337)).Bytes()`
$DIR/core/services/keystore/keys/starkkey/ocr2key_test.go: `result = kr2.Verify(pk, ctx, report, sig)`
$DIR/core/services/keystore/keys/starkkey/ocr2key_test.go: `err = kr2.Unmarshal(m)`
$DIR/core/services/keystore/keys/starkkey/ocr2key_test.go: `.SetString("2137244795266879235401249500471353867704187908407744160927664772020405449078", 10)`
$DIR/core/services/keystore/keys/starkkey/ocr2key_test.go: `.SetString(bigKey.String())`
$DIR/core/services/keystore/keys/starkkey/ocr2key_test.go: `.String()`
$DIR/core/services/keystore/keys/starkkey/ocr2key_test.go: `.Bytes()`
$DIR/core/services/keystore/keys/starkkey/ocr2key_test.go: `.Unmarshal(bytesKey[:])`
$DIR/core/services/keystore/keys/starkkey/ocr2key_test.go: `.DecodeString("0004acf99cb25a4803916f086440c661295b105a485efdc649ac4de9536da25b")`
$DIR/core/services/keystore/keys/starkkey/ocr2key_test.go: `.BytesToConfigDigest(bytes)`
$DIR/core/services/keystore/keys/starkkey/ocr2key_test.go: `.SetUint64(1)`
$DIR/core/services/keystore/keys/starkkey/ocr2key_test.go: `.Bytes()`
$DIR/core/services/keystore/keys/starkkey/ocr2key_test.go: `.DecodeString("00010203000000000000000000000000000000000000000000000000000000")`
$DIR/core/services/keystore/keys/starkkey/ocr2key_test.go: `.SetBytes(b2Bytes)`
$DIR/core/services/keystore/keys/starkkey/ocr2key_test.go: `.Bytes()`
$DIR/core/services/keystore/keys/starkkey/ocr2key_test.go: `.SetUint64(4)`
$DIR/core/services/keystore/keys/starkkey/ocr2key_test.go: `.Bytes()`
$DIR/core/services/keystore/keys/starkkey/ocr2key_test.go: `.SetUint64(99)`
$DIR/core/services/keystore/keys/starkkey/ocr2key_test.go: `.Bytes()`
$DIR/core/services/keystore/keys/starkkey/ocr2key_test.go: `.SetString("0x1332a8dabaabef63b03438ca50760cb9f5c0292cbf015b2395e50e6157df4e3")`
$DIR/core/services/keystore/keys/starkkey/ocr2key_test.go: `.Bytes()`
$DIR/core/services/keystore/keys/starkkey/ocr2key_test.go: `.Sign(ctx, report)`
$DIR/core/services/keystore/keys/starkkey/ocr2key_test.go: `.SetBytes(sig[0:32])`
$DIR/core/services/keystore/keys/starkkey/ocr2key_test.go: `.SetBytes(sig[32:64])`
$DIR/core/services/keystore/keys/starkkey/ocr2key_test.go: `.SetBytes(sig[64:])`
$DIR/core/services/keystore/keys/starkkey/ocr2key_test.go: `.SetString("1118148281956858477519852250235501663092798578871088714409528077622994994907", 10)`
$DIR/core/services/keystore/keys/starkkey/ocr2key_test.go: `.SetBytes(bigPubExpected.Bytes())`
$DIR/core/services/keystore/keys/starkkey/ocr2key_test.go: `.Bytes()`
$DIR/core/services/keystore/keys/starkkey/ocr2key_test.go: `.SetString("2898571078985034687500959842265381508927681132188252715370774777831313601543", 10)`
$DIR/core/services/keystore/keys/starkkey/ocr2key_test.go: `.SetBytes(bigRExpected.Bytes())`
$DIR/core/services/keystore/keys/starkkey/ocr2key_test.go: `.Bytes()`
$DIR/core/services/keystore/keys/starkkey/ocr2key_test.go: `.SetString("1930849708769648077928186998643944706551011476358007177069185543644456022504", 10)`
$DIR/core/services/keystore/keys/starkkey/ocr2key_test.go: `.SetString("1687653079896483135769135784451125398975732275358080312084893914240056843079", 10)`
$DIR/core/services/keystore/keys/starkkey/ocr2key_test.go: `.SetBytes(bigSExpected.Bytes())`
$DIR/core/services/keystore/keys/starkkey/ocr2key_test.go: `.Bytes()`
$DIR/core/services/keystore/keys/starkkey/ocr2key_test.go: `.DecodeString(digest)`
$DIR/core/services/keystore/keys/starkkey/ocr2key_test.go: `.BytesToConfigDigest(bytes)`
$DIR/core/services/keystore/keys/starkkey/ocr2key_test.go: `.Run("can verify", func(t *testing.T) {
sig, err := kr1.Sign(ctx, report)
require.NoError(t, err)
result := kr2.Verify(kr1.PublicKey(), ctx, report, sig)
require.True(t, result)
})`
$DIR/core/services/keystore/keys/starkkey/ocr2key_test.go: `.Sign(ctx, report)`
$DIR/core/services/keystore/keys/starkkey/ocr2key_test.go: `.Verify(kr1.PublicKey(), ctx, report, sig)`
$DIR/core/services/keystore/keys/starkkey/ocr2key_test.go: `.PublicKey()`
$DIR/core/services/keystore/keys/starkkey/ocr2key_test.go: `.Run("invalid sig", func(t *testing.T) {
result := kr2.Verify(kr1.PublicKey(), ctx, report, []byte{0x01})
require.False(t, result)
longSig := [100]byte{}
result = kr2.Verify(kr1.PublicKey(), ctx, report, longSig[:])
require.False(t, result)
})`
$DIR/core/services/keystore/keys/starkkey/ocr2key_test.go: `.Verify(kr1.PublicKey(), ctx, report, []byte{0x01})`
$DIR/core/services/keystore/keys/starkkey/ocr2key_test.go: `.PublicKey()`
$DIR/core/services/keystore/keys/starkkey/ocr2key_test.go: `.Verify(kr1.PublicKey(), ctx, report, longSig[:])`
$DIR/core/services/keystore/keys/starkkey/ocr2key_test.go: `.PublicKey()`
$DIR/core/services/keystore/keys/starkkey/ocr2key_test.go: `.Sign(ctx, report)`
$DIR/core/services/keystore/keys/starkkey/ocr2key_test.go: `.Verify(pk, ctx, report, sig)`
$DIR/core/services/keystore/keys/starkkey/ocr2key_test.go: `.NewInt(int64(31337))`
$DIR/core/services/keystore/keys/starkkey/ocr2key_test.go: `.Bytes()`
$DIR/core/services/keystore/keys/starkkey/ocr2key_test.go: `.Verify(pk, ctx, report, sig)`
$DIR/core/services/keystore/keys/starkkey/ocr2key_test.go: `.Marshal()`
$DIR/core/services/keystore/keys/starkkey/ocr2key_test.go: `.Unmarshal(m)`
$DIR/core/services/keystore/keys/starkkey/ocr2key_test.go: `.Unmarshal([]byte{0x01})`
$DIR/core/services/keystore/keys/vrfkey/crypto_test.go: `.I()`
$DIR/core/services/keystore/keys/vrfkey/crypto_test.go: `.Sub(FieldSize, bm.One)`
$DIR/core/services/keystore/keys/vrfkey/crypto_test.go: `.Add(bm.Mul(bm.Two, bm.Mul(bm.Two, bm.Two)), bm.Seven)`
$DIR/core/services/keystore/keys/vrfkey/crypto_test.go: `.Mul(bm.Two, bm.Mul(bm.Two, bm.Two))`
$DIR/core/services/keystore/keys/vrfkey/crypto_test.go: `.Mul(bm.Two, bm.Two)`
$DIR/core/services/keystore/keys/vrfkey/crypto_test.go: `.NewInt(5)`
$DIR/core/services/keystore/keys/vrfkey/key_v2_test.go: `.GenerateKey(crypto.S256(), rand.Reader)`
$DIR/core/services/keystore/keys/vrfkey/key_v2_test.go: `.S256()`
$DIR/core/services/keystore/keys/vrfkey/key_v2_test.go: `.D.Bytes()`
$DIR/core/services/keystore/keys/vrfkey/key_v2_test.go: `.String()`
$DIR/core/services/keystore/keys/vrfkey/key_v2_test.go: `.GenerateProof(big.NewInt(1))`
$DIR/core/services/keystore/keys/vrfkey/key_v2_test.go: `.NewInt(1)`
$DIR/core/services/keystore/keys/vrfkey/models_test.go: `err = vrfk.Scan(v2)`
$DIR/core/services/keystore/keys/vrfkey/models_test.go: `err = vrfk.Scan("")`
$DIR/core/services/keystore/keys/vrfkey/models_test.go: `err = vrfk.Scan(1)`
$DIR/core/services/keystore/keys/vrfkey/models_test.go: `.JSON()`
$DIR/core/services/keystore/keys/vrfkey/models_test.go: `.Value()`
$DIR/core/services/keystore/keys/vrfkey/models_test.go: `.Scan(v2)`
$DIR/core/services/keystore/keys/vrfkey/models_test.go: `.Scan("")`
$DIR/core/services/keystore/keys/vrfkey/models_test.go: `.Scan(1)`
$DIR/core/services/keystore/keys/vrfkey/private_key_test.go: `err = json.Unmarshal(cryptoJSON, &gethKey)`
$DIR/core/services/keystore/keys/vrfkey/private_key_test.go: `_, err = Decrypt(ek, "wrong-password")`
$DIR/core/services/keystore/keys/vrfkey/private_key_test.go: `.EncryptKey(k.toGethKey(), adulteratedPassword(testutils.Password), utils.FastScryptParams.N, utils.FastScryptParams.P)`
$DIR/core/services/keystore/keys/vrfkey/private_key_test.go: `.toGethKey()`
$DIR/core/services/keystore/keys/vrfkey/private_key_test.go: `.Unmarshal(cryptoJSON, &gethKey)`
$DIR/core/services/keystore/keys/vrfkey/private_key_test.go: `.ToV2()`
$DIR/core/services/keystore/keys/vrfkey/private_key_test.go: `.Sprintf("PrivateKey{k: , PublicKey: %s}", pk.PublicKey)`
$DIR/core/services/keystore/keys/vrfkey/private_key_test.go: `.String()`
$DIR/core/services/keystore/keys/vrfkey/proof_test.go: `p.Seed = big.NewInt(0).Add(seed, big.NewInt(1))`
$DIR/core/services/keystore/keys/vrfkey/proof_test.go: `.NewInt(2)`
$DIR/core/services/keystore/keys/vrfkey/proof_test.go: `.NewInt(3)`
$DIR/core/services/keystore/keys/vrfkey/proof_test.go: `.GenerateProofWithNonce(seed, nonce)`
$DIR/core/services/keystore/keys/vrfkey/proof_test.go: `.NewInt(0)`
$DIR/core/services/keystore/keys/vrfkey/proof_test.go: `.Add(seed, big.NewInt(1))`
$DIR/core/services/keystore/keys/vrfkey/proof_test.go: `.NewInt(1)`
$DIR/core/services/keystore/keys/vrfkey/proof_test.go: `.VerifyVRFProof()`
$DIR/core/services/keystore/keys/vrfkey/proof_test.go: `.Sprintf(
"vrf.Proof{PublicKey: %s, Gamma: %s, C: %x, S: %x, Seed: %x, Output: %x}",
p.PublicKey, p.Gamma, p.C, p.S, p.Seed, p.Output)`
$DIR/core/services/keystore/keys/vrfkey/proof_test.go: `.String()`
$DIR/core/services/keystore/keys/vrfkey/public_key_test.go: `nnPk.Set(pk)`
$DIR/core/services/keystore/keys/vrfkey/public_key_test.go: `.NewStream(t, 0)`
$DIR/core/services/keystore/keys/vrfkey/public_key_test.go: `.Point()`
$DIR/core/services/keystore/keys/vrfkey/public_key_test.go: `.Pick(randomStream)`
$DIR/core/services/keystore/keys/vrfkey/public_key_test.go: `.MarshalBinary()`
$DIR/core/services/keystore/keys/vrfkey/public_key_test.go: `.Point()`
$DIR/core/services/keystore/keys/vrfkey/public_key_test.go: `.Value()`
$DIR/core/services/keystore/keys/vrfkey/public_key_test.go: `.Set(pk)`
$DIR/core/services/keystore/keys/vrfkey/public_key_test.go: `.NewPublicKeyFromHex("0x9dc09a0f898f3b5e8047204e7ce7e44b587920932f08431e29c9bf6923b8450a01")`
$DIR/core/services/keystore/keys/vrfkey/public_key_test.go: `.MustHash()`
$DIR/core/services/keystore/keys/vrfkey/public_key_test.go: `.String()`
$DIR/core/services/keystore/master_test.go: `keyStore.ResetXXXTestOnly()`
$DIR/core/services/keystore/master_test.go: `t.Run("can be unlocked more than once, as long as the passwords match", func(t *testing.T) {
defer reset()
ctx := testutils.Context(t)
require.NoError(t, keyStore.Unlock(ctx, cltest.Password))
require.NoError(t, keyStore.Unlock(ctx, cltest.Password))
require.NoError(t, keyStore.Unlock(ctx, cltest.Password))
require.Error(t, keyStore.Unlock(ctx, "wrong password"))
})`
$DIR/core/services/keystore/master_test.go: `t.Run("saves an empty keyRing", func(t *testing.T) {
defer reset()
ctx := testutils.Context(t)
require.NoError(t, keyStore.Unlock(ctx, cltest.Password))
cltest.AssertCount(t, db, tableName, 1)
require.NoError(t, keyStore.ExportedSave(ctx))
cltest.AssertCount(t, db, tableName, 1)
})`
$DIR/core/services/keystore/master_test.go: `cltest.AssertCount(t, db, tableName, 1)`
$DIR/core/services/keystore/master_test.go: `cltest.AssertCount(t, db, tableName, 1)`
$DIR/core/services/keystore/master_test.go: `t.Run("won't load a saved keyRing if the password is incorrect", func(t *testing.T) {
defer reset()
ctx := testutils.Context(t)
require.NoError(t, keyStore.Unlock(ctx, cltest.Password))
cltest.MustInsertRandomKey(t, keyStore.Eth()) // need at least 1 key to encrypt
cltest.AssertCount(t, db, tableName, 1)
keyStore.ResetXXXTestOnly()
cltest.AssertCount(t, db, tableName, 1)
require.Error(t, keyStore.Unlock(ctx, "password2"))
cltest.AssertCount(t, db, tableName, 1)
})`
$DIR/core/services/keystore/master_test.go: `cltest.MustInsertRandomKey(t, keyStore.Eth())`
$DIR/core/services/keystore/master_test.go: `cltest.AssertCount(t, db, tableName, 1)`
$DIR/core/services/keystore/master_test.go: `keyStore.ResetXXXTestOnly()`
$DIR/core/services/keystore/master_test.go: `cltest.AssertCount(t, db, tableName, 1)`
$DIR/core/services/keystore/master_test.go: `cltest.AssertCount(t, db, tableName, 1)`
$DIR/core/services/keystore/master_test.go: `keyStore.ResetXXXTestOnly()`
$DIR/core/services/keystore/master_test.go: `.NewSqlxDB(t)`
$DIR/core/services/keystore/master_test.go: `.ExposedNewMaster(t, db)`
$DIR/core/services/keystore/master_test.go: `.ResetXXXTestOnly()`
$DIR/core/services/keystore/master_test.go: `.Exec(fmt.Sprintf("DELETE FROM %s", tableName))`
$DIR/core/services/keystore/master_test.go: `.Sprintf("DELETE FROM %s", tableName)`
$DIR/core/services/keystore/master_test.go: `.Run("can be unlocked more than once, as long as the passwords match", func(t *testing.T) {
defer reset()
ctx := testutils.Context(t)
require.NoError(t, keyStore.Unlock(ctx, cltest.Password))
require.NoError(t, keyStore.Unlock(ctx, cltest.Password))
require.NoError(t, keyStore.Unlock(ctx, cltest.Password))
require.Error(t, keyStore.Unlock(ctx, "wrong password"))
})`
$DIR/core/services/keystore/master_test.go: `.Context(t)`
$DIR/core/services/keystore/master_test.go: `.Run("saves an empty keyRing", func(t *testing.T) {
defer reset()
ctx := testutils.Context(t)
require.NoError(t, keyStore.Unlock(ctx, cltest.Password))
cltest.AssertCount(t, db, tableName, 1)
require.NoError(t, keyStore.ExportedSave(ctx))
cltest.AssertCount(t, db, tableName, 1)
})`
$DIR/core/services/keystore/master_test.go: `.Context(t)`
$DIR/core/services/keystore/master_test.go: `.AssertCount(t, db, tableName, 1)`
$DIR/core/services/keystore/master_test.go: `.AssertCount(t, db, tableName, 1)`
$DIR/core/services/keystore/master_test.go: `.Run("won't load a saved keyRing if the password is incorrect", func(t *testing.T) {
defer reset()
ctx := testutils.Context(t)
require.NoError(t, keyStore.Unlock(ctx, cltest.Password))
cltest.MustInsertRandomKey(t, keyStore.Eth()) // need at least 1 key to encrypt
cltest.AssertCount(t, db, tableName, 1)
keyStore.ResetXXXTestOnly()
cltest.AssertCount(t, db, tableName, 1)
require.Error(t, keyStore.Unlock(ctx, "password2"))
cltest.AssertCount(t, db, tableName, 1)
})`
$DIR/core/services/keystore/master_test.go: `.Context(t)`
$DIR/core/services/keystore/master_test.go: `.MustInsertRandomKey(t, keyStore.Eth())`
$DIR/core/services/keystore/master_test.go: `.Eth()`
$DIR/core/services/keystore/master_test.go: `.AssertCount(t, db, tableName, 1)`
$DIR/core/services/keystore/master_test.go: `.ResetXXXTestOnly()`
$DIR/core/services/keystore/master_test.go: `.AssertCount(t, db, tableName, 1)`
$DIR/core/services/keystore/master_test.go: `.AssertCount(t, db, tableName, 1)`
$DIR/core/services/keystore/master_test.go: `.Context(t)`
$DIR/core/services/keystore/master_test.go: `.ResetXXXTestOnly()`
$DIR/core/services/keystore/models_test.go: `ocr2 = append(ocr2, key)`
$DIR/core/services/keystore/models_test.go: `ocr2_raw = append(ocr2_raw, key.Raw())`
$DIR/core/services/keystore/models_test.go: `t.Run("test encrypt/decrypt", func(t *testing.T) {
encryptedKr, err := originalKeyRing.Encrypt(password, utils.FastScryptParams)
require.NoError(t, err)
decryptedKeyRing, err := encryptedKr.Decrypt(password)
require.NoError(t, err)
// compare cosmos keys
require.Equal(t, 2, len(decryptedKeyRing.Cosmos))
require.Equal(t, originalKeyRing.Cosmos[tk1.ID()].PublicKey(), decryptedKeyRing.Cosmos[tk1.ID()].PublicKey())
require.Equal(t, originalKeyRing.Cosmos[tk2.ID()].PublicKey(), decryptedKeyRing.Cosmos[tk2.ID()].PublicKey())
// compare csa keys
require.Equal(t, 2, len(decryptedKeyRing.CSA))
require.Equal(t, originalKeyRing.CSA[csa1.ID()].PublicKey, decryptedKeyRing.CSA[csa1.ID()].PublicKey)
require.Equal(t, originalKeyRing.CSA[csa2.ID()].PublicKey, decryptedKeyRing.CSA[csa2.ID()].PublicKey)
// compare eth keys
require.Equal(t, 2, len(decryptedKeyRing.Eth))
require.Equal(t, originalKeyRing.Eth[eth1.ID()].Address, decryptedKeyRing.Eth[eth1.ID()].Address)
require.Equal(t, originalKeyRing.Eth[eth2.ID()].Address, decryptedKeyRing.Eth[eth2.ID()].Address)
// compare ocr keys
require.Equal(t, 2, len(decryptedKeyRing.OCR))
require.Equal(t, originalKeyRing.OCR[ocr[0].ID()].OnChainSigning.X, decryptedKeyRing.OCR[ocr[0].ID()].OnChainSigning.X)
require.Equal(t, originalKeyRing.OCR[ocr[0].ID()].OnChainSigning.Y, decryptedKeyRing.OCR[ocr[0].ID()].OnChainSigning.Y)
require.Equal(t, originalKeyRing.OCR[ocr[0].ID()].OnChainSigning.D, decryptedKeyRing.OCR[ocr[0].ID()].OnChainSigning.D)
require.Equal(t, originalKeyRing.OCR[ocr[0].ID()].OffChainSigning, decryptedKeyRing.OCR[ocr[0].ID()].OffChainSigning)
require.Equal(t, originalKeyRing.OCR[ocr[0].ID()].OffChainEncryption, decryptedKeyRing.OCR[ocr[0].ID()].OffChainEncryption)
require.Equal(t, originalKeyRing.OCR[ocr[1].ID()].OnChainSigning.X, decryptedKeyRing.OCR[ocr[1].ID()].OnChainSigning.X)
require.Equal(t, originalKeyRing.OCR[ocr[1].ID()].OnChainSigning.Y, decryptedKeyRing.OCR[ocr[1].ID()].OnChainSigning.Y)
require.Equal(t, originalKeyRing.OCR[ocr[1].ID()].OnChainSigning.D, decryptedKeyRing.OCR[ocr[1].ID()].OnChainSigning.D)
require.Equal(t, originalKeyRing.OCR[ocr[1].ID()].OffChainSigning, decryptedKeyRing.OCR[ocr[1].ID()].OffChainSigning)
require.Equal(t, originalKeyRing.OCR[ocr[1].ID()].OffChainEncryption, decryptedKeyRing.OCR[ocr[1].ID()].OffChainEncryption)
// compare ocr2 keys
require.Equal(t, len(chaintype.SupportedChainTypes), len(decryptedKeyRing.OCR2))
for i := range ocr2 {
id := ocr2[i].ID()
require.Equal(t, originalKeyRing.OCR2[id].ID(), decryptedKeyRing.OCR2[id].ID())
require.Equal(t, ocr2[i].OnChainPublicKey(), decryptedKeyRing.OCR2[id].OnChainPublicKey())
require.Equal(t, originalKeyRing.OCR2[id].ChainType(), decryptedKeyRing.OCR2[id].ChainType())
}
// compare p2p keys
require.Equal(t, 2, len(decryptedKeyRing.P2P))
require.Equal(t, originalKeyRing.P2P[p2p1.ID()].PublicKeyHex(), decryptedKeyRing.P2P[p2p1.ID()].PublicKeyHex())
require.Equal(t, originalKeyRing.P2P[p2p1.ID()].PeerID(), decryptedKeyRing.P2P[p2p1.ID()].PeerID())
require.Equal(t, originalKeyRing.P2P[p2p2.ID()].PublicKeyHex(), decryptedKeyRing.P2P[p2p2.ID()].PublicKeyHex())
require.Equal(t, originalKeyRing.P2P[p2p2.ID()].PeerID(), decryptedKeyRing.P2P[p2p2.ID()].PeerID())
// compare solana keys
require.Equal(t, 2, len(decryptedKeyRing.Solana))
require.Equal(t, originalKeyRing.Solana[sol1.ID()].GetPublic(), decryptedKeyRing.Solana[sol1.ID()].GetPublic())
// compare vrf keys
require.Equal(t, 2, len(decryptedKeyRing.VRF))
require.Equal(t, originalKeyRing.VRF[vrf1.ID()].PublicKey, decryptedKeyRing.VRF[vrf1.ID()].PublicKey)
require.Equal(t, originalKeyRing.VRF[vrf2.ID()].PublicKey, decryptedKeyRing.VRF[vrf2.ID()].PublicKey)
// compare dkgsign keys
require.Equal(t, 2, len(decryptedKeyRing.DKGSign))
require.Equal(t, originalKeyRing.DKGSign[dkgsign1.ID()].PublicKey, decryptedKeyRing.DKGSign[dkgsign1.ID()].PublicKey)
require.Equal(t, originalKeyRing.DKGSign[dkgsign2.ID()].PublicKey, decryptedKeyRing.DKGSign[dkgsign2.ID()].PublicKey)
// compare dkgencrypt keys
require.Equal(t, 2, len(decryptedKeyRing.DKGEncrypt))
require.Equal(t, originalKeyRing.DKGEncrypt[dkgencrypt1.ID()].PublicKey, decryptedKeyRing.DKGEncrypt[dkgencrypt1.ID()].PublicKey)
require.Equal(t, originalKeyRing.DKGEncrypt[dkgencrypt2.ID()].PublicKey, decryptedKeyRing.DKGEncrypt[dkgencrypt2.ID()].PublicKey)
})`
$DIR/core/services/keystore/models_test.go: `allKeys["OCR2"] = append(allKeys["OCR2"], newOCR2Key1.Raw().String())`
$DIR/core/services/keystore/models_test.go: `allKeys["OCR2"] = append(allKeys["OCR2"], newOCR2Key2.Raw().String())`
$DIR/core/services/keystore/models_test.go: `allKeys["P2P"] = append(allKeys["P2P"], newP2PKey1.Raw().String())`
$DIR/core/services/keystore/models_test.go: `allKeys["P2P"] = append(allKeys["P2P"], newP2PKey2.Raw().String())`
$DIR/core/services/keystore/models_test.go: `err = originalKeyRing.LegacyKeys.StoreUnsupported(newRawJson, originalKeyRing)`
$DIR/core/services/keystore/models_test.go: `err = json.Unmarshal(unloadedKeysJson, &shouldHaveAllKeys)`
$DIR/core/services/keystore/models_test.go: `err = originalKeyRing.LegacyKeys.StoreUnsupported(newRawJson, nil)`
$DIR/core/services/keystore/models_test.go: `_, err = originalKeyRing.LegacyKeys.UnloadUnsupported(nil)`
$DIR/core/services/keystore/models_test.go: `.MustNewV2XXXTestingOnly(big.NewInt(1))`
$DIR/core/services/keystore/models_test.go: `.NewInt(1)`
$DIR/core/services/keystore/models_test.go: `.MustNewV2XXXTestingOnly(big.NewInt(2))`
$DIR/core/services/keystore/models_test.go: `.NewInt(2)`
$DIR/core/services/keystore/models_test.go: `.MustNewV2XXXTestingOnly(big.NewInt(1))`
$DIR/core/services/keystore/models_test.go: `.NewInt(1)`
$DIR/core/services/keystore/models_test.go: `.MustNewV2XXXTestingOnly(big.NewInt(2))`
$DIR/core/services/keystore/models_test.go: `.NewInt(2)`
$DIR/core/services/keystore/models_test.go: `.MustNewInsecure(rand.Reader, chain)`
$DIR/core/services/keystore/models_test.go: `.Raw()`
$DIR/core/services/keystore/models_test.go: `.MustNewV2XXXTestingOnly(big.NewInt(1))`
$DIR/core/services/keystore/models_test.go: `.NewInt(1)`
$DIR/core/services/keystore/models_test.go: `.MustNewV2XXXTestingOnly(big.NewInt(2))`
$DIR/core/services/keystore/models_test.go: `.NewInt(2)`
$DIR/core/services/keystore/models_test.go: `.MustNewInsecure(rand.Reader)`
$DIR/core/services/keystore/models_test.go: `.MustNewInsecure(rand.Reader)`
$DIR/core/services/keystore/models_test.go: `.MustNewV2XXXTestingOnly(big.NewInt(1))`
$DIR/core/services/keystore/models_test.go: `.NewInt(1)`
$DIR/core/services/keystore/models_test.go: `.MustNewV2XXXTestingOnly(big.NewInt(2))`
$DIR/core/services/keystore/models_test.go: `.NewInt(2)`
$DIR/core/services/keystore/models_test.go: `.MustNewInsecure(rand.Reader)`
$DIR/core/services/keystore/models_test.go: `.MustNewInsecure(rand.Reader)`
$DIR/core/services/keystore/models_test.go: `.MustNewXXXTestingOnly(big.NewInt(1))`
$DIR/core/services/keystore/models_test.go: `.NewInt(1)`
$DIR/core/services/keystore/models_test.go: `.MustNewXXXTestingOnly(big.NewInt(2))`
$DIR/core/services/keystore/models_test.go: `.NewInt(2)`
$DIR/core/services/keystore/models_test.go: `.MustNewXXXTestingOnly(big.NewInt(1))`
$DIR/core/services/keystore/models_test.go: `.NewInt(1)`
$DIR/core/services/keystore/models_test.go: `.MustNewXXXTestingOnly(big.NewInt(2))`
$DIR/core/services/keystore/models_test.go: `.NewInt(2)`
$DIR/core/services/keystore/models_test.go: `.Raw()`
$DIR/core/services/keystore/models_test.go: `.Raw()`
$DIR/core/services/keystore/models_test.go: `.Raw()`
$DIR/core/services/keystore/models_test.go: `.Raw()`
$DIR/core/services/keystore/models_test.go: `.Raw()`
$DIR/core/services/keystore/models_test.go: `.Raw()`
$DIR/core/services/keystore/models_test.go: `.Raw()`
$DIR/core/services/keystore/models_test.go: `.Raw()`
$DIR/core/services/keystore/models_test.go: `.Raw()`
$DIR/core/services/keystore/models_test.go: `.Raw()`
$DIR/core/services/keystore/models_test.go: `.Raw()`
$DIR/core/services/keystore/models_test.go: `.Raw()`
$DIR/core/services/keystore/models_test.go: `.Raw()`
$DIR/core/services/keystore/models_test.go: `.Raw()`
$DIR/core/services/keystore/models_test.go: `.Raw()`
$DIR/core/services/keystore/models_test.go: `.Raw()`
$DIR/core/services/keystore/models_test.go: `.Raw()`
$DIR/core/services/keystore/models_test.go: `.Raw()`
$DIR/core/services/keystore/models_test.go: `.keys()`
$DIR/core/services/keystore/models_test.go: `.Run("test encrypt/decrypt", func(t *testing.T) {
encryptedKr, err := originalKeyRing.Encrypt(password, utils.FastScryptParams)
require.NoError(t, err)
decryptedKeyRing, err := encryptedKr.Decrypt(password)
require.NoError(t, err)
// compare cosmos keys
require.Equal(t, 2, len(decryptedKeyRing.Cosmos))
require.Equal(t, originalKeyRing.Cosmos[tk1.ID()].PublicKey(), decryptedKeyRing.Cosmos[tk1.ID()].PublicKey())
require.Equal(t, originalKeyRing.Cosmos[tk2.ID()].PublicKey(), decryptedKeyRing.Cosmos[tk2.ID()].PublicKey())
// compare csa keys
require.Equal(t, 2, len(decryptedKeyRing.CSA))
require.Equal(t, originalKeyRing.CSA[csa1.ID()].PublicKey, decryptedKeyRing.CSA[csa1.ID()].PublicKey)
require.Equal(t, originalKeyRing.CSA[csa2.ID()].PublicKey, decryptedKeyRing.CSA[csa2.ID()].PublicKey)
// compare eth keys
require.Equal(t, 2, len(decryptedKeyRing.Eth))
require.Equal(t, originalKeyRing.Eth[eth1.ID()].Address, decryptedKeyRing.Eth[eth1.ID()].Address)
require.Equal(t, originalKeyRing.Eth[eth2.ID()].Address, decryptedKeyRing.Eth[eth2.ID()].Address)
// compare ocr keys
require.Equal(t, 2, len(decryptedKeyRing.OCR))
require.Equal(t, originalKeyRing.OCR[ocr[0].ID()].OnChainSigning.X, decryptedKeyRing.OCR[ocr[0].ID()].OnChainSigning.X)
require.Equal(t, originalKeyRing.OCR[ocr[0].ID()].OnChainSigning.Y, decryptedKeyRing.OCR[ocr[0].ID()].OnChainSigning.Y)
require.Equal(t, originalKeyRing.OCR[ocr[0].ID()].OnChainSigning.D, decryptedKeyRing.OCR[ocr[0].ID()].OnChainSigning.D)
require.Equal(t, originalKeyRing.OCR[ocr[0].ID()].OffChainSigning, decryptedKeyRing.OCR[ocr[0].ID()].OffChainSigning)
require.Equal(t, originalKeyRing.OCR[ocr[0].ID()].OffChainEncryption, decryptedKeyRing.OCR[ocr[0].ID()].OffChainEncryption)
require.Equal(t, originalKeyRing.OCR[ocr[1].ID()].OnChainSigning.X, decryptedKeyRing.OCR[ocr[1].ID()].OnChainSigning.X)
require.Equal(t, originalKeyRing.OCR[ocr[1].ID()].OnChainSigning.Y, decryptedKeyRing.OCR[ocr[1].ID()].OnChainSigning.Y)
require.Equal(t, originalKeyRing.OCR[ocr[1].ID()].OnChainSigning.D, decryptedKeyRing.OCR[ocr[1].ID()].OnChainSigning.D)
require.Equal(t, originalKeyRing.OCR[ocr[1].ID()].OffChainSigning, decryptedKeyRing.OCR[ocr[1].ID()].OffChainSigning)
require.Equal(t, originalKeyRing.OCR[ocr[1].ID()].OffChainEncryption, decryptedKeyRing.OCR[ocr[1].ID()].OffChainEncryption)
// compare ocr2 keys
require.Equal(t, len(chaintype.SupportedChainTypes), len(decryptedKeyRing.OCR2))
for i := range ocr2 {
id := ocr2[i].ID()
require.Equal(t, originalKeyRing.OCR2[id].ID(), decryptedKeyRing.OCR2[id].ID())
require.Equal(t, ocr2[i].OnChainPublicKey(), decryptedKeyRing.OCR2[id].OnChainPublicKey())
require.Equal(t, originalKeyRing.OCR2[id].ChainType(), decryptedKeyRing.OCR2[id].ChainType())
}
// compare p2p keys
require.Equal(t, 2, len(decryptedKeyRing.P2P))
require.Equal(t, originalKeyRing.P2P[p2p1.ID()].PublicKeyHex(), decryptedKeyRing.P2P[p2p1.ID()].PublicKeyHex())
require.Equal(t, originalKeyRing.P2P[p2p1.ID()].PeerID(), decryptedKeyRing.P2P[p2p1.ID()].PeerID())
require.Equal(t, originalKeyRing.P2P[p2p2.ID()].PublicKeyHex(), decryptedKeyRing.P2P[p2p2.ID()].PublicKeyHex())
require.Equal(t, originalKeyRing.P2P[p2p2.ID()].PeerID(), decryptedKeyRing.P2P[p2p2.ID()].PeerID())
// compare solana keys
require.Equal(t, 2, len(decryptedKeyRing.Solana))
require.Equal(t, originalKeyRing.Solana[sol1.ID()].GetPublic(), decryptedKeyRing.Solana[sol1.ID()].GetPublic())
// compare vrf keys
require.Equal(t, 2, len(decryptedKeyRing.VRF))
require.Equal(t, originalKeyRing.VRF[vrf1.ID()].PublicKey, decryptedKeyRing.VRF[vrf1.ID()].PublicKey)
require.Equal(t, originalKeyRing.VRF[vrf2.ID()].PublicKey, decryptedKeyRing.VRF[vrf2.ID()].PublicKey)
// compare dkgsign keys
require.Equal(t, 2, len(decryptedKeyRing.DKGSign))
require.Equal(t, originalKeyRing.DKGSign[dkgsign1.ID()].PublicKey, decryptedKeyRing.DKGSign[dkgsign1.ID()].PublicKey)
require.Equal(t, originalKeyRing.DKGSign[dkgsign2.ID()].PublicKey, decryptedKeyRing.DKGSign[dkgsign2.ID()].PublicKey)
// compare dkgencrypt keys
require.Equal(t, 2, len(decryptedKeyRing.DKGEncrypt))
require.Equal(t, originalKeyRing.DKGEncrypt[dkgencrypt1.ID()].PublicKey, decryptedKeyRing.DKGEncrypt[dkgencrypt1.ID()].PublicKey)
require.Equal(t, originalKeyRing.DKGEncrypt[dkgencrypt2.ID()].PublicKey, decryptedKeyRing.DKGEncrypt[dkgencrypt2.ID()].PublicKey)
})`
$DIR/core/services/keystore/models_test.go: `.Encrypt(password, utils.FastScryptParams)`
$DIR/core/services/keystore/models_test.go: `.Decrypt(password)`
$DIR/core/services/keystore/models_test.go: `.ID()`
$DIR/core/services/keystore/models_test.go: `.Marshal(originalKeyRing.raw())`
$DIR/core/services/keystore/models_test.go: `.raw()`
$DIR/core/services/keystore/models_test.go: `.Unmarshal(rawJson, &allKeys)`
$DIR/core/services/keystore/models_test.go: `.MustNewV2XXXTestingOnly(big.NewInt(5))`
$DIR/core/services/keystore/models_test.go: `.NewInt(5)`
$DIR/core/services/keystore/models_test.go: `.MustNewV2XXXTestingOnly(big.NewInt(6))`
$DIR/core/services/keystore/models_test.go: `.NewInt(6)`
$DIR/core/services/keystore/models_test.go: `.Raw()`
$DIR/core/services/keystore/models_test.go: `.String()`
$DIR/core/services/keystore/models_test.go: `.Raw()`
$DIR/core/services/keystore/models_test.go: `.String()`
$DIR/core/services/keystore/models_test.go: `.MustNewV2XXXTestingOnly(big.NewInt(5))`
$DIR/core/services/keystore/models_test.go: `.NewInt(5)`
$DIR/core/services/keystore/models_test.go: `.MustNewV2XXXTestingOnly(big.NewInt(7))`
$DIR/core/services/keystore/models_test.go: `.NewInt(7)`
$DIR/core/services/keystore/models_test.go: `.Raw()`
$DIR/core/services/keystore/models_test.go: `.String()`
$DIR/core/services/keystore/models_test.go: `.Raw()`
$DIR/core/services/keystore/models_test.go: `.String()`
$DIR/core/services/keystore/models_test.go: `.Marshal(allKeys)`
$DIR/core/services/keystore/models_test.go: `.LegacyKeys.StoreUnsupported(newRawJson, originalKeyRing)`
$DIR/core/services/keystore/models_test.go: `.Marshal(originalKeyRing.raw())`
$DIR/core/services/keystore/models_test.go: `.raw()`
$DIR/core/services/keystore/models_test.go: `.LegacyKeys.UnloadUnsupported(marshalledRawKeyRingJson)`
$DIR/core/services/keystore/models_test.go: `.Unmarshal(unloadedKeysJson, &shouldHaveAllKeys)`
$DIR/core/services/keystore/models_test.go: `.LegacyKeys.StoreUnsupported(newRawJson, nil)`
$DIR/core/services/keystore/models_test.go: `.LegacyKeys.UnloadUnsupported(nil)`
$DIR/core/services/keystore/ocr2_test.go: `keyStore.ResetXXXTestOnly()`
$DIR/core/services/keystore/ocr2_test.go: `err = keyStore.Unlock(ctx, cltest.Password)`
$DIR/core/services/keystore/ocr2_test.go: `t.Run("initializes with an empty state", func(t *testing.T) {
defer reset()
keys, err := ks.GetAll()
require.NoError(t, err)
require.Equal(t, 0, len(keys))
})`
$DIR/core/services/keystore/ocr2_test.go: `t.Run("errors when getting non-existent ID", func(t *testing.T) {
defer reset()
_, err := ks.Get("non-existent-id")
require.Error(t, err)
})`
$DIR/core/services/keystore/ocr2_test.go: `t.Run("creates a key with valid type", func(t *testing.T) {
defer reset()
ctx := testutils.Context(t)
// lopp through different chain types
for _, chain := range chaintype.SupportedChainTypes {
key, err := ks.Create(ctx, chain)
require.NoError(t, err)
retrievedKey, err := ks.Get(key.ID())
require.NoError(t, err)
require.Equal(t, key, retrievedKey)
}
})`
$DIR/core/services/keystore/ocr2_test.go: `t.Run("gets keys by type", func(t *testing.T) {
defer reset()
ctx := testutils.Context(t)
created := map[chaintype.ChainType]bool{}
for _, chain := range chaintype.SupportedChainTypes {
// validate no keys exist for chain
keys, err := ks.GetAllOfType(chain)
require.NoError(t, err)
require.Len(t, keys, 0)
_, err = ks.Create(ctx, chain)
require.NoError(t, err)
created[chain] = true
// validate that only 1 of each exists after creation
for _, c := range chaintype.SupportedChainTypes {
keys, err := ks.GetAllOfType(c)
require.NoError(t, err)
if created[c] {
require.Len(t, keys, 1)
continue
}
require.Len(t, keys, 0)
}
}
})`
$DIR/core/services/keystore/ocr2_test.go: `_, err = ks.Create(ctx, chain)`
$DIR/core/services/keystore/ocr2_test.go: `created[chain] = true`
$DIR/core/services/keystore/ocr2_test.go: `t.Run("errors when creating a key with an invalid type", func(t *testing.T) {
defer reset()
ctx := testutils.Context(t)
_, err := ks.Create(ctx, "foobar")
require.Error(t, err)
})`
$DIR/core/services/keystore/ocr2_test.go: `t.Run("imports and exports a key", func(t *testing.T) {
defer reset()
ctx := testutils.Context(t)
for _, chain := range chaintype.SupportedChainTypes {
key, err := ks.Create(ctx, chain)
require.NoError(t, err)
exportJSON, err := ks.Export(key.ID(), cltest.Password)
require.NoError(t, err)
_, err = ks.Export("non-existent", cltest.Password)
assert.Error(t, err)
err = ks.Delete(ctx, key.ID())
require.NoError(t, err)
_, err = ks.Get(key.ID())
require.Error(t, err)
importedKey, err := ks.Import(ctx, exportJSON, cltest.Password)
require.NoError(t, err)
_, err = ks.Import(ctx, []byte(""), cltest.Password)
assert.Error(t, err)
require.Equal(t, key.ID(), importedKey.ID())
retrievedKey, err := ks.Get(key.ID())
require.NoError(t, err)
require.Equal(t, importedKey, retrievedKey)
require.Equal(t, importedKey.ChainType(), retrievedKey.ChainType())
}
})`
$DIR/core/services/keystore/ocr2_test.go: `_, err = ks.Export("non-existent", cltest.Password)`
$DIR/core/services/keystore/ocr2_test.go: `err = ks.Delete(ctx, key.ID())`
$DIR/core/services/keystore/ocr2_test.go: `_, err = ks.Get(key.ID())`
$DIR/core/services/keystore/ocr2_test.go: `_, err = ks.Import(ctx, []byte(""), cltest.Password)`
$DIR/core/services/keystore/ocr2_test.go: `t.Run("adds an externally created key / deletes a key", func(t *testing.T) {
defer reset()
ctx := testutils.Context(t)
for _, chain := range chaintype.SupportedChainTypes {
newKey, err := ocr2key.New(chain)
require.NoError(t, err)
err = ks.Add(ctx, newKey)
require.NoError(t, err)
err = ks.Add(ctx, newKey)
assert.Error(t, err)
keys, err := ks.GetAll()
require.NoError(t, err)
require.Equal(t, 1, len(keys))
err = ks.Delete(ctx, newKey.ID())
require.NoError(t, err)
err = ks.Delete(ctx, newKey.ID())
assert.Error(t, err)
keys, err = ks.GetAll()
require.NoError(t, err)
require.Equal(t, 0, len(keys))
_, err = ks.Get(newKey.ID())
require.Error(t, err)
}
})`
$DIR/core/services/keystore/ocr2_test.go: `err = ks.Add(ctx, newKey)`
$DIR/core/services/keystore/ocr2_test.go: `err = ks.Add(ctx, newKey)`
$DIR/core/services/keystore/ocr2_test.go: `err = ks.Delete(ctx, newKey.ID())`
$DIR/core/services/keystore/ocr2_test.go: `err = ks.Delete(ctx, newKey.ID())`
$DIR/core/services/keystore/ocr2_test.go: `keys, err = ks.GetAll()`
$DIR/core/services/keystore/ocr2_test.go: `_, err = ks.Get(newKey.ID())`
$DIR/core/services/keystore/ocr2_test.go: `t.Run("ensures key", func(t *testing.T) {
defer reset()
ctx := testutils.Context(t)
err := ks.EnsureKeys(ctx, chaintype.SupportedChainTypes...)
assert.NoError(t, err)
keys, err := ks.GetAll()
assert.NoError(t, err)
require.Equal(t, len(chaintype.SupportedChainTypes), len(keys))
err = ks.EnsureKeys(ctx, chaintype.SupportedChainTypes...)
assert.NoError(t, err)
// loop through different supported chain types
for _, chain := range chaintype.SupportedChainTypes {
keys, err := ks.GetAllOfType(chain)
assert.NoError(t, err)
require.Equal(t, 1, len(keys))
}
})`
$DIR/core/services/keystore/ocr2_test.go: `err = ks.EnsureKeys(ctx, chaintype.SupportedChainTypes...)`
$DIR/core/services/keystore/ocr2_test.go: `err = ks.EnsureKeys(ctx, chaintype.Cosmos)`
$DIR/core/services/keystore/ocr2_test.go: `keys, err = ks.GetAll()`
$DIR/core/services/keystore/ocr2_test.go: `err = ks.EnsureKeys(ctx, chaintype.StarkNet)`
$DIR/core/services/keystore/ocr2_test.go: `keys, err = ks.GetAll()`
$DIR/core/services/keystore/ocr2_test.go: `.NewSqlxDB(t)`
$DIR/core/services/keystore/ocr2_test.go: `.ExposedNewMaster(t, db)`
$DIR/core/services/keystore/ocr2_test.go: `.OCR2()`
$DIR/core/services/keystore/ocr2_test.go: `.Background()`
$DIR/core/services/keystore/ocr2_test.go: `.Exec("DELETE FROM encrypted_key_rings")`
$DIR/core/services/keystore/ocr2_test.go: `.ResetXXXTestOnly()`
$DIR/core/services/keystore/ocr2_test.go: `.Unlock(ctx, cltest.Password)`
$DIR/core/services/keystore/ocr2_test.go: `.Run("initializes with an empty state", func(t *testing.T) {
defer reset()
keys, err := ks.GetAll()
require.NoError(t, err)
require.Equal(t, 0, len(keys))
})`
$DIR/core/services/keystore/ocr2_test.go: `.GetAll()`
$DIR/core/services/keystore/ocr2_test.go: `.Run("errors when getting non-existent ID", func(t *testing.T) {
defer reset()
_, err := ks.Get("non-existent-id")
require.Error(t, err)
})`
$DIR/core/services/keystore/ocr2_test.go: `.Get("non-existent-id")`
$DIR/core/services/keystore/ocr2_test.go: `.Run("creates a key with valid type", func(t *testing.T) {
defer reset()
ctx := testutils.Context(t)
// lopp through different chain types
for _, chain := range chaintype.SupportedChainTypes {
key, err := ks.Create(ctx, chain)
require.NoError(t, err)
retrievedKey, err := ks.Get(key.ID())
require.NoError(t, err)
require.Equal(t, key, retrievedKey)
}
})`
$DIR/core/services/keystore/ocr2_test.go: `.Context(t)`
$DIR/core/services/keystore/ocr2_test.go: `.Create(ctx, chain)`
$DIR/core/services/keystore/ocr2_test.go: `.Get(key.ID())`
$DIR/core/services/keystore/ocr2_test.go: `.ID()`
$DIR/core/services/keystore/ocr2_test.go: `.Run("gets keys by type", func(t *testing.T) {
defer reset()
ctx := testutils.Context(t)
created := map[chaintype.ChainType]bool{}
for _, chain := range chaintype.SupportedChainTypes {
// validate no keys exist for chain
keys, err := ks.GetAllOfType(chain)
require.NoError(t, err)
require.Len(t, keys, 0)
_, err = ks.Create(ctx, chain)
require.NoError(t, err)
created[chain] = true
// validate that only 1 of each exists after creation
for _, c := range chaintype.SupportedChainTypes {
keys, err := ks.GetAllOfType(c)
require.NoError(t, err)
if created[c] {
require.Len(t, keys, 1)
continue
}
require.Len(t, keys, 0)
}
}
})`
$DIR/core/services/keystore/ocr2_test.go: `.Context(t)`
$DIR/core/services/keystore/ocr2_test.go: `.GetAllOfType(chain)`
$DIR/core/services/keystore/ocr2_test.go: `.Create(ctx, chain)`
$DIR/core/services/keystore/ocr2_test.go: `.GetAllOfType(c)`
$DIR/core/services/keystore/ocr2_test.go: `.Run("errors when creating a key with an invalid type", func(t *testing.T) {
defer reset()
ctx := testutils.Context(t)
_, err := ks.Create(ctx, "foobar")
require.Error(t, err)
})`
$DIR/core/services/keystore/ocr2_test.go: `.Context(t)`
$DIR/core/services/keystore/ocr2_test.go: `.Create(ctx, "foobar")`
$DIR/core/services/keystore/ocr2_test.go: `.Run("imports and exports a key", func(t *testing.T) {
defer reset()
ctx := testutils.Context(t)
for _, chain := range chaintype.SupportedChainTypes {
key, err := ks.Create(ctx, chain)
require.NoError(t, err)
exportJSON, err := ks.Export(key.ID(), cltest.Password)
require.NoError(t, err)
_, err = ks.Export("non-existent", cltest.Password)
assert.Error(t, err)
err = ks.Delete(ctx, key.ID())
require.NoError(t, err)
_, err = ks.Get(key.ID())
require.Error(t, err)
importedKey, err := ks.Import(ctx, exportJSON, cltest.Password)
require.NoError(t, err)
_, err = ks.Import(ctx, []byte(""), cltest.Password)
assert.Error(t, err)
require.Equal(t, key.ID(), importedKey.ID())
retrievedKey, err := ks.Get(key.ID())
require.NoError(t, err)
require.Equal(t, importedKey, retrievedKey)
require.Equal(t, importedKey.ChainType(), retrievedKey.ChainType())
}
})`
$DIR/core/services/keystore/ocr2_test.go: `.Context(t)`
$DIR/core/services/keystore/ocr2_test.go: `.Create(ctx, chain)`
$DIR/core/services/keystore/ocr2_test.go: `.Export(key.ID(), cltest.Password)`
$DIR/core/services/keystore/ocr2_test.go: `.ID()`
$DIR/core/services/keystore/ocr2_test.go: `.Export("non-existent", cltest.Password)`
$DIR/core/services/keystore/ocr2_test.go: `.Delete(ctx, key.ID())`
$DIR/core/services/keystore/ocr2_test.go: `.ID()`
$DIR/core/services/keystore/ocr2_test.go: `.Get(key.ID())`
$DIR/core/services/keystore/ocr2_test.go: `.ID()`
$DIR/core/services/keystore/ocr2_test.go: `.Import(ctx, exportJSON, cltest.Password)`
$DIR/core/services/keystore/ocr2_test.go: `.Import(ctx, []byte(""), cltest.Password)`
$DIR/core/services/keystore/ocr2_test.go: `.Get(key.ID())`
$DIR/core/services/keystore/ocr2_test.go: `.ID()`
$DIR/core/services/keystore/ocr2_test.go: `.Run("adds an externally created key / deletes a key", func(t *testing.T) {
defer reset()
ctx := testutils.Context(t)
for _, chain := range chaintype.SupportedChainTypes {
newKey, err := ocr2key.New(chain)
require.NoError(t, err)
err = ks.Add(ctx, newKey)
require.NoError(t, err)
err = ks.Add(ctx, newKey)
assert.Error(t, err)
keys, err := ks.GetAll()
require.NoError(t, err)
require.Equal(t, 1, len(keys))
err = ks.Delete(ctx, newKey.ID())
require.NoError(t, err)
err = ks.Delete(ctx, newKey.ID())
assert.Error(t, err)
keys, err = ks.GetAll()
require.NoError(t, err)
require.Equal(t, 0, len(keys))
_, err = ks.Get(newKey.ID())
require.Error(t, err)
}
})`
$DIR/core/services/keystore/ocr2_test.go: `.Context(t)`
$DIR/core/services/keystore/ocr2_test.go: `.New(chain)`
$DIR/core/services/keystore/ocr2_test.go: `.Add(ctx, newKey)`
$DIR/core/services/keystore/ocr2_test.go: `.Add(ctx, newKey)`
$DIR/core/services/keystore/ocr2_test.go: `.GetAll()`
$DIR/core/services/keystore/ocr2_test.go: `.Delete(ctx, newKey.ID())`
$DIR/core/services/keystore/ocr2_test.go: `.ID()`
$DIR/core/services/keystore/ocr2_test.go: `.Delete(ctx, newKey.ID())`
$DIR/core/services/keystore/ocr2_test.go: `.ID()`
$DIR/core/services/keystore/ocr2_test.go: `.GetAll()`
$DIR/core/services/keystore/ocr2_test.go: `.Get(newKey.ID())`
$DIR/core/services/keystore/ocr2_test.go: `.ID()`
$DIR/core/services/keystore/ocr2_test.go: `.Run("ensures key", func(t *testing.T) {
defer reset()
ctx := testutils.Context(t)
err := ks.EnsureKeys(ctx, chaintype.SupportedChainTypes...)
assert.NoError(t, err)
keys, err := ks.GetAll()
assert.NoError(t, err)
require.Equal(t, len(chaintype.SupportedChainTypes), len(keys))
err = ks.EnsureKeys(ctx, chaintype.SupportedChainTypes...)
assert.NoError(t, err)
// loop through different supported chain types
for _, chain := range chaintype.SupportedChainTypes {
keys, err := ks.GetAllOfType(chain)
assert.NoError(t, err)
require.Equal(t, 1, len(keys))
}
})`
$DIR/core/services/keystore/ocr2_test.go: `.Context(t)`
$DIR/core/services/keystore/ocr2_test.go: `.EnsureKeys(ctx, chaintype.SupportedChainTypes...)`
$DIR/core/services/keystore/ocr2_test.go: `.GetAll()`
$DIR/core/services/keystore/ocr2_test.go: `.EnsureKeys(ctx, chaintype.SupportedChainTypes...)`
$DIR/core/services/keystore/ocr2_test.go: `.GetAllOfType(chain)`
$DIR/core/services/keystore/ocr2_test.go: `.Context(t)`
$DIR/core/services/keystore/ocr2_test.go: `.EnsureKeys(ctx, chaintype.EVM)`
$DIR/core/services/keystore/ocr2_test.go: `.GetAll()`
$DIR/core/services/keystore/ocr2_test.go: `.EnsureKeys(ctx, chaintype.Cosmos)`
$DIR/core/services/keystore/ocr2_test.go: `.GetAll()`
$DIR/core/services/keystore/ocr2_test.go: `.GetAllOfType(chaintype.Cosmos)`
$DIR/core/services/keystore/ocr2_test.go: `.EnsureKeys(ctx, chaintype.StarkNet)`
$DIR/core/services/keystore/ocr2_test.go: `.GetAll()`
$DIR/core/services/keystore/ocr2_test.go: `.GetAllOfType(chaintype.StarkNet)`
$DIR/core/services/keystore/ocr_test.go: `keyStore.ResetXXXTestOnly()`
$DIR/core/services/keystore/ocr_test.go: `t.Run("initializes with an empty state", func(t *testing.T) {
defer reset()
keys, err := ks.GetAll()
require.NoError(t, err)
require.Equal(t, 0, len(keys))
})`
$DIR/core/services/keystore/ocr_test.go: `t.Run("errors when getting non-existent ID", func(t *testing.T) {
defer reset()
_, err := ks.Get("non-existent-id")
require.Error(t, err)
})`
$DIR/core/services/keystore/ocr_test.go: `t.Run("creates a key", func(t *testing.T) {
defer reset()
ctx := testutils.Context(t)
key, err := ks.Create(ctx)
require.NoError(t, err)
retrievedKey, err := ks.Get(key.ID())
require.NoError(t, err)
require.Equal(t, key, retrievedKey)
})`
$DIR/core/services/keystore/ocr_test.go: `t.Run("imports and exports a key", func(t *testing.T) {
defer reset()
ctx := testutils.Context(t)
key, err := ks.Create(ctx)
require.NoError(t, err)
_, err = ks.Export("non-existent", cltest.Password)
assert.Error(t, err)
exportJSON, err := ks.Export(key.ID(), cltest.Password)
require.NoError(t, err)
_, err = ks.Delete(ctx, key.ID())
require.NoError(t, err)
_, err = ks.Get(key.ID())
require.Error(t, err)
importedKey, err := ks.Import(ctx, exportJSON, cltest.Password)
require.NoError(t, err)
_, err = ks.Import(ctx, []byte(""), cltest.Password)
assert.Error(t, err)
_, err = ks.Import(ctx, exportJSON, cltest.Password)
assert.Error(t, err)
assert.Equal(t, key.ID(), importedKey.ID())
retrievedKey, err := ks.Get(key.ID())
require.NoError(t, err)
assert.Equal(t, importedKey, retrievedKey)
})`
$DIR/core/services/keystore/ocr_test.go: `_, err = ks.Export("non-existent", cltest.Password)`
$DIR/core/services/keystore/ocr_test.go: `_, err = ks.Delete(ctx, key.ID())`
$DIR/core/services/keystore/ocr_test.go: `_, err = ks.Get(key.ID())`
$DIR/core/services/keystore/ocr_test.go: `_, err = ks.Import(ctx, []byte(""), cltest.Password)`
$DIR/core/services/keystore/ocr_test.go: `_, err = ks.Import(ctx, exportJSON, cltest.Password)`
$DIR/core/services/keystore/ocr_test.go: `t.Run("adds an externally created key / deletes a key", func(t *testing.T) {
defer reset()
ctx := testutils.Context(t)
newKey, err := ocrkey.NewV2()
require.NoError(t, err)
err = ks.Add(ctx, newKey)
require.NoError(t, err)
err = ks.Add(ctx, newKey)
assert.Error(t, err)
keys, err := ks.GetAll()
require.NoError(t, err)
assert.Equal(t, 1, len(keys))
_, err = ks.Delete(ctx, newKey.ID())
require.NoError(t, err)
_, err = ks.Delete(ctx, newKey.ID())
assert.Error(t, err)
keys, err = ks.GetAll()
require.NoError(t, err)
assert.Equal(t, 0, len(keys))
_, err = ks.Get(newKey.ID())
assert.Error(t, err)
})`
$DIR/core/services/keystore/ocr_test.go: `err = ks.Add(ctx, newKey)`
$DIR/core/services/keystore/ocr_test.go: `err = ks.Add(ctx, newKey)`
$DIR/core/services/keystore/ocr_test.go: `_, err = ks.Delete(ctx, newKey.ID())`
$DIR/core/services/keystore/ocr_test.go: `_, err = ks.Delete(ctx, newKey.ID())`
$DIR/core/services/keystore/ocr_test.go: `keys, err = ks.GetAll()`
$DIR/core/services/keystore/ocr_test.go: `_, err = ks.Get(newKey.ID())`
$DIR/core/services/keystore/ocr_test.go: `t.Run("ensures key", func(t *testing.T) {
defer reset()
ctx := testutils.Context(t)
err := ks.EnsureKey(ctx)
require.NoError(t, err)
err = ks.EnsureKey(ctx)
require.NoError(t, err)
keys, err := ks.GetAll()
require.NoError(t, err)
require.Equal(t, 1, len(keys))
})`
$DIR/core/services/keystore/ocr_test.go: `err = ks.EnsureKey(ctx)`
$DIR/core/services/keystore/ocr_test.go: `.NewSqlxDB(t)`
$DIR/core/services/keystore/ocr_test.go: `.ExposedNewMaster(t, db)`
$DIR/core/services/keystore/ocr_test.go: `.OCR()`
$DIR/core/services/keystore/ocr_test.go: `.Background()`
$DIR/core/services/keystore/ocr_test.go: `.ResetXXXTestOnly()`
$DIR/core/services/keystore/ocr_test.go: `.Run("initializes with an empty state", func(t *testing.T) {
defer reset()
keys, err := ks.GetAll()
require.NoError(t, err)
require.Equal(t, 0, len(keys))
})`
$DIR/core/services/keystore/ocr_test.go: `.GetAll()`
$DIR/core/services/keystore/ocr_test.go: `.Run("errors when getting non-existent ID", func(t *testing.T) {
defer reset()
_, err := ks.Get("non-existent-id")
require.Error(t, err)
})`
$DIR/core/services/keystore/ocr_test.go: `.Get("non-existent-id")`
$DIR/core/services/keystore/ocr_test.go: `.Run("creates a key", func(t *testing.T) {
defer reset()
ctx := testutils.Context(t)
key, err := ks.Create(ctx)
require.NoError(t, err)
retrievedKey, err := ks.Get(key.ID())
require.NoError(t, err)
require.Equal(t, key, retrievedKey)
})`
$DIR/core/services/keystore/ocr_test.go: `.Context(t)`
$DIR/core/services/keystore/ocr_test.go: `.Create(ctx)`
$DIR/core/services/keystore/ocr_test.go: `.Get(key.ID())`
$DIR/core/services/keystore/ocr_test.go: `.ID()`
$DIR/core/services/keystore/ocr_test.go: `.Run("imports and exports a key", func(t *testing.T) {
defer reset()
ctx := testutils.Context(t)
key, err := ks.Create(ctx)
require.NoError(t, err)
_, err = ks.Export("non-existent", cltest.Password)
assert.Error(t, err)
exportJSON, err := ks.Export(key.ID(), cltest.Password)
require.NoError(t, err)
_, err = ks.Delete(ctx, key.ID())
require.NoError(t, err)
_, err = ks.Get(key.ID())
require.Error(t, err)
importedKey, err := ks.Import(ctx, exportJSON, cltest.Password)
require.NoError(t, err)
_, err = ks.Import(ctx, []byte(""), cltest.Password)
assert.Error(t, err)
_, err = ks.Import(ctx, exportJSON, cltest.Password)
assert.Error(t, err)
assert.Equal(t, key.ID(), importedKey.ID())
retrievedKey, err := ks.Get(key.ID())
require.NoError(t, err)
assert.Equal(t, importedKey, retrievedKey)
})`
$DIR/core/services/keystore/ocr_test.go: `.Context(t)`
$DIR/core/services/keystore/ocr_test.go: `.Create(ctx)`
$DIR/core/services/keystore/ocr_test.go: `.Export("non-existent", cltest.Password)`
$DIR/core/services/keystore/ocr_test.go: `.Export(key.ID(), cltest.Password)`
$DIR/core/services/keystore/ocr_test.go: `.ID()`
$DIR/core/services/keystore/ocr_test.go: `.Delete(ctx, key.ID())`
$DIR/core/services/keystore/ocr_test.go: `.ID()`
$DIR/core/services/keystore/ocr_test.go: `.Get(key.ID())`
$DIR/core/services/keystore/ocr_test.go: `.ID()`
$DIR/core/services/keystore/ocr_test.go: `.Import(ctx, exportJSON, cltest.Password)`
$DIR/core/services/keystore/ocr_test.go: `.Import(ctx, []byte(""), cltest.Password)`
$DIR/core/services/keystore/ocr_test.go: `.Import(ctx, exportJSON, cltest.Password)`
$DIR/core/services/keystore/ocr_test.go: `.Get(key.ID())`
$DIR/core/services/keystore/ocr_test.go: `.ID()`
$DIR/core/services/keystore/ocr_test.go: `.Run("adds an externally created key / deletes a key", func(t *testing.T) {
defer reset()
ctx := testutils.Context(t)
newKey, err := ocrkey.NewV2()
require.NoError(t, err)
err = ks.Add(ctx, newKey)
require.NoError(t, err)
err = ks.Add(ctx, newKey)
assert.Error(t, err)
keys, err := ks.GetAll()
require.NoError(t, err)
assert.Equal(t, 1, len(keys))
_, err = ks.Delete(ctx, newKey.ID())
require.NoError(t, err)
_, err = ks.Delete(ctx, newKey.ID())
assert.Error(t, err)
keys, err = ks.GetAll()
require.NoError(t, err)
assert.Equal(t, 0, len(keys))
_, err = ks.Get(newKey.ID())
assert.Error(t, err)
})`
$DIR/core/services/keystore/ocr_test.go: `.Context(t)`
$DIR/core/services/keystore/ocr_test.go: `.NewV2()`
$DIR/core/services/keystore/ocr_test.go: `.Add(ctx, newKey)`
$DIR/core/services/keystore/ocr_test.go: `.Add(ctx, newKey)`
$DIR/core/services/keystore/ocr_test.go: `.GetAll()`
$DIR/core/services/keystore/ocr_test.go: `.Delete(ctx, newKey.ID())`
$DIR/core/services/keystore/ocr_test.go: `.ID()`
$DIR/core/services/keystore/ocr_test.go: `.Delete(ctx, newKey.ID())`
$DIR/core/services/keystore/ocr_test.go: `.ID()`
$DIR/core/services/keystore/ocr_test.go: `.GetAll()`
$DIR/core/services/keystore/ocr_test.go: `.Get(newKey.ID())`
$DIR/core/services/keystore/ocr_test.go: `.ID()`
$DIR/core/services/keystore/ocr_test.go: `.Run("ensures key", func(t *testing.T) {
defer reset()
ctx := testutils.Context(t)
err := ks.EnsureKey(ctx)
require.NoError(t, err)
err = ks.EnsureKey(ctx)
require.NoError(t, err)
keys, err := ks.GetAll()
require.NoError(t, err)
require.Equal(t, 1, len(keys))
})`
$DIR/core/services/keystore/ocr_test.go: `.Context(t)`
$DIR/core/services/keystore/ocr_test.go: `.EnsureKey(ctx)`
$DIR/core/services/keystore/ocr_test.go: `.EnsureKey(ctx)`
$DIR/core/services/keystore/ocr_test.go: `.GetAll()`
$DIR/core/services/keystore/ocr_test.go: `.Context(t)`
$DIR/core/services/keystore/ocr_test.go: `.Import(ctx, []byte(exportedKey), "p4SsW0rD1!@#_")`
$DIR/core/services/keystore/p2p_test.go: `keyStore.ResetXXXTestOnly()`
$DIR/core/services/keystore/p2p_test.go: `t.Run("initializes with an empty state", func(t *testing.T) {
defer reset()
keys, err := ks.GetAll()
require.NoError(t, err)
require.Equal(t, 0, len(keys))
})`
$DIR/core/services/keystore/p2p_test.go: `t.Run("errors when getting non-existent ID", func(t *testing.T) {
defer reset()
var nonExistent p2pkey.PeerID
_, err := rand.Read(nonExistent[:])
require.NoError(t, err)
_, err = ks.Get(nonExistent)
require.Error(t, err)
})`
$DIR/core/services/keystore/p2p_test.go: `_, err = ks.Get(nonExistent)`
$DIR/core/services/keystore/p2p_test.go: `t.Run("creates a key", func(t *testing.T) {
defer reset()
ctx := testutils.Context(t)
key, err := ks.Create(ctx)
require.NoError(t, err)
retrievedKey, err := ks.Get(key.PeerID())
require.NoError(t, err)
require.Equal(t, key, retrievedKey)
})`
$DIR/core/services/keystore/p2p_test.go: `t.Run("imports and exports a key", func(t *testing.T) {
defer reset()
ctx := testutils.Context(t)
key, err := ks.Create(ctx)
require.NoError(t, err)
exportJSON, err := ks.Export(key.PeerID(), cltest.Password)
require.NoError(t, err)
var nonExistent p2pkey.PeerID
_, err = rand.Read(nonExistent[:])
require.NoError(t, err)
_, err = ks.Export(nonExistent, cltest.Password)
assert.Error(t, err)
_, err = ks.Delete(ctx, key.PeerID())
require.NoError(t, err)
_, err = ks.Get(key.PeerID())
require.Error(t, err)
importedKey, err := ks.Import(ctx, exportJSON, cltest.Password)
require.NoError(t, err)
_, err = ks.Import(ctx, exportJSON, cltest.Password)
assert.Error(t, err)
_, err = ks.Import(ctx, []byte(""), cltest.Password)
assert.Error(t, err)
require.Equal(t, key.PeerID(), importedKey.PeerID())
retrievedKey, err := ks.Get(key.PeerID())
require.NoError(t, err)
require.Equal(t, importedKey, retrievedKey)
})`
$DIR/core/services/keystore/p2p_test.go: `_, err = rand.Read(nonExistent[:])`
$DIR/core/services/keystore/p2p_test.go: `_, err = ks.Export(nonExistent, cltest.Password)`
$DIR/core/services/keystore/p2p_test.go: `_, err = ks.Delete(ctx, key.PeerID())`
$DIR/core/services/keystore/p2p_test.go: `_, err = ks.Get(key.PeerID())`
$DIR/core/services/keystore/p2p_test.go: `_, err = ks.Import(ctx, exportJSON, cltest.Password)`
$DIR/core/services/keystore/p2p_test.go: `_, err = ks.Import(ctx, []byte(""), cltest.Password)`
$DIR/core/services/keystore/p2p_test.go: `t.Run("adds an externally created key / deletes a key", func(t *testing.T) {
defer reset()
ctx := testutils.Context(t)
newKey, err := p2pkey.NewV2()
require.NoError(t, err)
err = ks.Add(ctx, newKey)
require.NoError(t, err)
err = ks.Add(ctx, newKey)
assert.Error(t, err)
keys, err := ks.GetAll()
require.NoError(t, err)
require.Equal(t, 1, len(keys))
_, err = ks.Delete(ctx, newKey.PeerID())
require.NoError(t, err)
_, err = ks.Delete(ctx, newKey.PeerID())
assert.Error(t, err)
keys, err = ks.GetAll()
require.NoError(t, err)
require.Equal(t, 0, len(keys))
_, err = ks.Get(newKey.PeerID())
require.Error(t, err)
})`
$DIR/core/services/keystore/p2p_test.go: `err = ks.Add(ctx, newKey)`
$DIR/core/services/keystore/p2p_test.go: `err = ks.Add(ctx, newKey)`
$DIR/core/services/keystore/p2p_test.go: `_, err = ks.Delete(ctx, newKey.PeerID())`
$DIR/core/services/keystore/p2p_test.go: `_, err = ks.Delete(ctx, newKey.PeerID())`
$DIR/core/services/keystore/p2p_test.go: `keys, err = ks.GetAll()`
$DIR/core/services/keystore/p2p_test.go: `_, err = ks.Get(newKey.PeerID())`
$DIR/core/services/keystore/p2p_test.go: `t.Run("ensures key", func(t *testing.T) {
defer reset()
ctx := testutils.Context(t)
err := ks.EnsureKey(ctx)
assert.NoError(t, err)
keys, err := ks.GetAll()
assert.NoError(t, err)
require.Equal(t, 1, len(keys))
err = ks.EnsureKey(ctx)
assert.NoError(t, err)
keys, err = ks.GetAll()
assert.NoError(t, err)
require.Equal(t, 1, len(keys))
})`
$DIR/core/services/keystore/p2p_test.go: `err = ks.EnsureKey(ctx)`
$DIR/core/services/keystore/p2p_test.go: `keys, err = ks.GetAll()`
$DIR/core/services/keystore/p2p_test.go: `t.Run("GetOrFirst", func(t *testing.T) {
defer reset()
ctx := testutils.Context(t)
_, err := ks.GetOrFirst(p2pkey.PeerID{})
require.Contains(t, err.Error(), "no p2p keys exist")
id := p2pkey.PeerID{0xa0}
_, err = ks.GetOrFirst(id)
require.Contains(t, err.Error(), fmt.Sprintf("unable to find P2P key with id %s", id))
k1, err := ks.Create(ctx)
require.NoError(t, err)
k2, err := ks.GetOrFirst(p2pkey.PeerID{})
require.NoError(t, err)
require.Equal(t, k1, k2)
k3, err := ks.GetOrFirst(k1.PeerID())
require.NoError(t, err)
require.Equal(t, k1, k3)
_, err = ks.Create(ctx)
require.NoError(t, err)
_, err = ks.GetOrFirst(p2pkey.PeerID{})
require.Contains(t, err.Error(), "multiple p2p keys found")
//Check for possible keys in error message
require.Contains(t, err.Error(), k1.ID())
require.Contains(t, err.Error(), k2.ID())
require.Contains(t, err.Error(), k3.ID())
k4, err := ks.GetOrFirst(k1.PeerID())
require.NoError(t, err)
require.Equal(t, k1, k4)
})`
$DIR/core/services/keystore/p2p_test.go: `_, err = ks.GetOrFirst(id)`
$DIR/core/services/keystore/p2p_test.go: `_, err = ks.Create(ctx)`
$DIR/core/services/keystore/p2p_test.go: `_, err = ks.GetOrFirst(p2pkey.PeerID{})`
$DIR/core/services/keystore/p2p_test.go: `t.Run("clears p2p_peers on delete", func(t *testing.T) {
ctx := testutils.Context(t)
key, err := ks.Create(ctx)
require.NoError(t, err)
type P2PPeer struct {
ID string
Addr string
PeerID string
CreatedAt time.Time
UpdatedAt time.Time
}
p2pPeer1 := P2PPeer{
ID: cltest.NewPeerID().String(),
Addr: testutils.NewAddress().Hex(),
PeerID: cltest.DefaultPeerID, // different p2p key
}
p2pPeer2 := P2PPeer{
ID: cltest.NewPeerID().String(),
Addr: testutils.NewAddress().Hex(),
PeerID: key.PeerID().Raw(),
}
const p2pTableName = "p2p_peers"
sql := fmt.Sprintf(`INSERT INTO %s (id, addr, peer_id, created_at, updated_at)
VALUES (:id, :addr, :peer_id, now(), now())
RETURNING *;`, p2pTableName)
stmt, err := db.PrepareNamed(sql)
require.NoError(t, err)
t.Cleanup(func() { assert.NoError(t, stmt.Close()) })
require.NoError(t, stmt.Get(&p2pPeer1, &p2pPeer1))
require.NoError(t, stmt.Get(&p2pPeer2, &p2pPeer2))
cltest.AssertCount(t, db, p2pTableName, 2)
_, err = ks.Delete(ctx, key.PeerID())
require.NoError(t, err)
cltest.AssertCount(t, db, p2pTableName, 1)
})`
$DIR/core/services/keystore/p2p_test.go: `t.Cleanup(func() { assert.NoError(t, stmt.Close()) })`
$DIR/core/services/keystore/p2p_test.go: `cltest.AssertCount(t, db, p2pTableName, 2)`
$DIR/core/services/keystore/p2p_test.go: `_, err = ks.Delete(ctx, key.PeerID())`
$DIR/core/services/keystore/p2p_test.go: `cltest.AssertCount(t, db, p2pTableName, 1)`
$DIR/core/services/keystore/p2p_test.go: `.NewSqlxDB(t)`
$DIR/core/services/keystore/p2p_test.go: `.ExposedNewMaster(t, db)`
$DIR/core/services/keystore/p2p_test.go: `.P2P()`
$DIR/core/services/keystore/p2p_test.go: `.Background()`
$DIR/core/services/keystore/p2p_test.go: `.ResetXXXTestOnly()`
$DIR/core/services/keystore/p2p_test.go: `.Run("initializes with an empty state", func(t *testing.T) {
defer reset()
keys, err := ks.GetAll()
require.NoError(t, err)
require.Equal(t, 0, len(keys))
})`
$DIR/core/services/keystore/p2p_test.go: `.GetAll()`
$DIR/core/services/keystore/p2p_test.go: `.Run("errors when getting non-existent ID", func(t *testing.T) {
defer reset()
var nonExistent p2pkey.PeerID
_, err := rand.Read(nonExistent[:])
require.NoError(t, err)
_, err = ks.Get(nonExistent)
require.Error(t, err)
})`
$DIR/core/services/keystore/p2p_test.go: `.Read(nonExistent[:])`
$DIR/core/services/keystore/p2p_test.go: `.Get(nonExistent)`
$DIR/core/services/keystore/p2p_test.go: `.Run("creates a key", func(t *testing.T) {
defer reset()
ctx := testutils.Context(t)
key, err := ks.Create(ctx)
require.NoError(t, err)
retrievedKey, err := ks.Get(key.PeerID())
require.NoError(t, err)
require.Equal(t, key, retrievedKey)
})`
$DIR/core/services/keystore/p2p_test.go: `.Context(t)`
$DIR/core/services/keystore/p2p_test.go: `.Create(ctx)`
$DIR/core/services/keystore/p2p_test.go: `.Get(key.PeerID())`
$DIR/core/services/keystore/p2p_test.go: `.PeerID()`
$DIR/core/services/keystore/p2p_test.go: `.Run("imports and exports a key", func(t *testing.T) {
defer reset()
ctx := testutils.Context(t)
key, err := ks.Create(ctx)
require.NoError(t, err)
exportJSON, err := ks.Export(key.PeerID(), cltest.Password)
require.NoError(t, err)
var nonExistent p2pkey.PeerID
_, err = rand.Read(nonExistent[:])
require.NoError(t, err)
_, err = ks.Export(nonExistent, cltest.Password)
assert.Error(t, err)
_, err = ks.Delete(ctx, key.PeerID())
require.NoError(t, err)
_, err = ks.Get(key.PeerID())
require.Error(t, err)
importedKey, err := ks.Import(ctx, exportJSON, cltest.Password)
require.NoError(t, err)
_, err = ks.Import(ctx, exportJSON, cltest.Password)
assert.Error(t, err)
_, err = ks.Import(ctx, []byte(""), cltest.Password)
assert.Error(t, err)
require.Equal(t, key.PeerID(), importedKey.PeerID())
retrievedKey, err := ks.Get(key.PeerID())
require.NoError(t, err)
require.Equal(t, importedKey, retrievedKey)
})`
$DIR/core/services/keystore/p2p_test.go: `.Context(t)`
$DIR/core/services/keystore/p2p_test.go: `.Create(ctx)`
$DIR/core/services/keystore/p2p_test.go: `.Export(key.PeerID(), cltest.Password)`
$DIR/core/services/keystore/p2p_test.go: `.PeerID()`
$DIR/core/services/keystore/p2p_test.go: `.Read(nonExistent[:])`
$DIR/core/services/keystore/p2p_test.go: `.Export(nonExistent, cltest.Password)`
$DIR/core/services/keystore/p2p_test.go: `.Delete(ctx, key.PeerID())`
$DIR/core/services/keystore/p2p_test.go: `.PeerID()`
$DIR/core/services/keystore/p2p_test.go: `.Get(key.PeerID())`
$DIR/core/services/keystore/p2p_test.go: `.PeerID()`
$DIR/core/services/keystore/p2p_test.go: `.Import(ctx, exportJSON, cltest.Password)`
$DIR/core/services/keystore/p2p_test.go: `.Import(ctx, exportJSON, cltest.Password)`
$DIR/core/services/keystore/p2p_test.go: `.Import(ctx, []byte(""), cltest.Password)`
$DIR/core/services/keystore/p2p_test.go: `.Get(key.PeerID())`
$DIR/core/services/keystore/p2p_test.go: `.PeerID()`
$DIR/core/services/keystore/p2p_test.go: `.Run("adds an externally created key / deletes a key", func(t *testing.T) {
defer reset()
ctx := testutils.Context(t)
newKey, err := p2pkey.NewV2()
require.NoError(t, err)
err = ks.Add(ctx, newKey)
require.NoError(t, err)
err = ks.Add(ctx, newKey)
assert.Error(t, err)
keys, err := ks.GetAll()
require.NoError(t, err)
require.Equal(t, 1, len(keys))
_, err = ks.Delete(ctx, newKey.PeerID())
require.NoError(t, err)
_, err = ks.Delete(ctx, newKey.PeerID())
assert.Error(t, err)
keys, err = ks.GetAll()
require.NoError(t, err)
require.Equal(t, 0, len(keys))
_, err = ks.Get(newKey.PeerID())
require.Error(t, err)
})`
$DIR/core/services/keystore/p2p_test.go: `.Context(t)`
$DIR/core/services/keystore/p2p_test.go: `.NewV2()`
$DIR/core/services/keystore/p2p_test.go: `.Add(ctx, newKey)`
$DIR/core/services/keystore/p2p_test.go: `.Add(ctx, newKey)`
$DIR/core/services/keystore/p2p_test.go: `.GetAll()`
$DIR/core/services/keystore/p2p_test.go: `.Delete(ctx, newKey.PeerID())`
$DIR/core/services/keystore/p2p_test.go: `.PeerID()`
$DIR/core/services/keystore/p2p_test.go: `.Delete(ctx, newKey.PeerID())`
$DIR/core/services/keystore/p2p_test.go: `.PeerID()`
$DIR/core/services/keystore/p2p_test.go: `.GetAll()`
$DIR/core/services/keystore/p2p_test.go: `.Get(newKey.PeerID())`
$DIR/core/services/keystore/p2p_test.go: `.PeerID()`
$DIR/core/services/keystore/p2p_test.go: `.Run("ensures key", func(t *testing.T) {
defer reset()
ctx := testutils.Context(t)
err := ks.EnsureKey(ctx)
assert.NoError(t, err)
keys, err := ks.GetAll()
assert.NoError(t, err)
require.Equal(t, 1, len(keys))
err = ks.EnsureKey(ctx)
assert.NoError(t, err)
keys, err = ks.GetAll()
assert.NoError(t, err)
require.Equal(t, 1, len(keys))
})`
$DIR/core/services/keystore/p2p_test.go: `.Context(t)`
$DIR/core/services/keystore/p2p_test.go: `.EnsureKey(ctx)`
$DIR/core/services/keystore/p2p_test.go: `.GetAll()`
$DIR/core/services/keystore/p2p_test.go: `.EnsureKey(ctx)`
$DIR/core/services/keystore/p2p_test.go: `.GetAll()`
$DIR/core/services/keystore/p2p_test.go: `.Run("GetOrFirst", func(t *testing.T) {
defer reset()
ctx := testutils.Context(t)
_, err := ks.GetOrFirst(p2pkey.PeerID{})
require.Contains(t, err.Error(), "no p2p keys exist")
id := p2pkey.PeerID{0xa0}
_, err = ks.GetOrFirst(id)
require.Contains(t, err.Error(), fmt.Sprintf("unable to find P2P key with id %s", id))
k1, err := ks.Create(ctx)
require.NoError(t, err)
k2, err := ks.GetOrFirst(p2pkey.PeerID{})
require.NoError(t, err)
require.Equal(t, k1, k2)
k3, err := ks.GetOrFirst(k1.PeerID())
require.NoError(t, err)
require.Equal(t, k1, k3)
_, err = ks.Create(ctx)
require.NoError(t, err)
_, err = ks.GetOrFirst(p2pkey.PeerID{})
require.Contains(t, err.Error(), "multiple p2p keys found")
//Check for possible keys in error message
require.Contains(t, err.Error(), k1.ID())
require.Contains(t, err.Error(), k2.ID())
require.Contains(t, err.Error(), k3.ID())
k4, err := ks.GetOrFirst(k1.PeerID())
require.NoError(t, err)
require.Equal(t, k1, k4)
})`
$DIR/core/services/keystore/p2p_test.go: `.Context(t)`
$DIR/core/services/keystore/p2p_test.go: `.GetOrFirst(p2pkey.PeerID{})`
$DIR/core/services/keystore/p2p_test.go: `.GetOrFirst(id)`
$DIR/core/services/keystore/p2p_test.go: `.Create(ctx)`
$DIR/core/services/keystore/p2p_test.go: `.GetOrFirst(p2pkey.PeerID{})`
$DIR/core/services/keystore/p2p_test.go: `.GetOrFirst(k1.PeerID())`
$DIR/core/services/keystore/p2p_test.go: `.PeerID()`
$DIR/core/services/keystore/p2p_test.go: `.Create(ctx)`
$DIR/core/services/keystore/p2p_test.go: `.GetOrFirst(p2pkey.PeerID{})`
$DIR/core/services/keystore/p2p_test.go: `.GetOrFirst(k1.PeerID())`
$DIR/core/services/keystore/p2p_test.go: `.PeerID()`
$DIR/core/services/keystore/p2p_test.go: `.Run("clears p2p_peers on delete", func(t *testing.T) {
ctx := testutils.Context(t)
key, err := ks.Create(ctx)
require.NoError(t, err)
type P2PPeer struct {
ID string
Addr string
PeerID string
CreatedAt time.Time
UpdatedAt time.Time
}
p2pPeer1 := P2PPeer{
ID: cltest.NewPeerID().String(),
Addr: testutils.NewAddress().Hex(),
PeerID: cltest.DefaultPeerID, // different p2p key
}
p2pPeer2 := P2PPeer{
ID: cltest.NewPeerID().String(),
Addr: testutils.NewAddress().Hex(),
PeerID: key.PeerID().Raw(),
}
const p2pTableName = "p2p_peers"
sql := fmt.Sprintf(`INSERT INTO %s (id, addr, peer_id, created_at, updated_at)
VALUES (:id, :addr, :peer_id, now(), now())
RETURNING *;`, p2pTableName)
stmt, err := db.PrepareNamed(sql)
require.NoError(t, err)
t.Cleanup(func() { assert.NoError(t, stmt.Close()) })
require.NoError(t, stmt.Get(&p2pPeer1, &p2pPeer1))
require.NoError(t, stmt.Get(&p2pPeer2, &p2pPeer2))
cltest.AssertCount(t, db, p2pTableName, 2)
_, err = ks.Delete(ctx, key.PeerID())
require.NoError(t, err)
cltest.AssertCount(t, db, p2pTableName, 1)
})`
$DIR/core/services/keystore/p2p_test.go: `.Context(t)`
$DIR/core/services/keystore/p2p_test.go: `.Create(ctx)`
$DIR/core/services/keystore/p2p_test.go: `.NewPeerID()`
$DIR/core/services/keystore/p2p_test.go: `.String()`
$DIR/core/services/keystore/p2p_test.go: `.NewAddress()`
$DIR/core/services/keystore/p2p_test.go: `.Hex()`
$DIR/core/services/keystore/p2p_test.go: `.NewPeerID()`
$DIR/core/services/keystore/p2p_test.go: `.String()`
$DIR/core/services/keystore/p2p_test.go: `.NewAddress()`
$DIR/core/services/keystore/p2p_test.go: `.Hex()`
$DIR/core/services/keystore/p2p_test.go: `.PeerID()`
$DIR/core/services/keystore/p2p_test.go: `.Raw()`
$DIR/core/services/keystore/p2p_test.go: `.Sprintf(`INSERT INTO %s (id, addr, peer_id, created_at, updated_at)
VALUES (:id, :addr, :peer_id, now(), now())
RETURNING *;`, p2pTableName)`
$DIR/core/services/keystore/p2p_test.go: `.PrepareNamed(sql)`
$DIR/core/services/keystore/p2p_test.go: `.Cleanup(func() { assert.NoError(t, stmt.Close()) })`
$DIR/core/services/keystore/p2p_test.go: `.AssertCount(t, db, p2pTableName, 2)`
$DIR/core/services/keystore/p2p_test.go: `.Delete(ctx, key.PeerID())`
$DIR/core/services/keystore/p2p_test.go: `.PeerID()`
$DIR/core/services/keystore/p2p_test.go: `.AssertCount(t, db, p2pTableName, 1)`
$DIR/core/services/keystore/p2p_test.go: `.Context(t)`
$DIR/core/services/keystore/p2p_test.go: `.Import(ctx, []byte(exportedKey), "p4SsW0rD1!@#_")`
$DIR/core/services/keystore/solana_test.go: `keyStore.ResetXXXTestOnly()`
$DIR/core/services/keystore/solana_test.go: `t.Run("initializes with an empty state", func(t *testing.T) {
defer reset()
keys, err := ks.GetAll()
require.NoError(t, err)
require.Equal(t, 0, len(keys))
})`
$DIR/core/services/keystore/solana_test.go: `t.Run("errors when getting non-existent ID", func(t *testing.T) {
defer reset()
_, err := ks.Get("non-existent-id")
require.Error(t, err)
})`
$DIR/core/services/keystore/solana_test.go: `t.Run("creates a key", func(t *testing.T) {
defer reset()
ctx := testutils.Context(t)
key, err := ks.Create(ctx)
require.NoError(t, err)
retrievedKey, err := ks.Get(key.ID())
require.NoError(t, err)
require.Equal(t, key, retrievedKey)
})`
$DIR/core/services/keystore/solana_test.go: `t.Run("imports and exports a key", func(t *testing.T) {
defer reset()
ctx := testutils.Context(t)
key, err := ks.Create(ctx)
require.NoError(t, err)
exportJSON, err := ks.Export(key.ID(), cltest.Password)
require.NoError(t, err)
_, err = ks.Export("non-existent", cltest.Password)
assert.Error(t, err)
_, err = ks.Delete(ctx, key.ID())
require.NoError(t, err)
_, err = ks.Get(key.ID())
require.Error(t, err)
importedKey, err := ks.Import(ctx, exportJSON, cltest.Password)
require.NoError(t, err)
_, err = ks.Import(ctx, exportJSON, cltest.Password)
assert.Error(t, err)
_, err = ks.Import(ctx, []byte(""), cltest.Password)
assert.Error(t, err)
require.Equal(t, key.ID(), importedKey.ID())
retrievedKey, err := ks.Get(key.ID())
require.NoError(t, err)
require.Equal(t, importedKey, retrievedKey)
})`
$DIR/core/services/keystore/solana_test.go: `_, err = ks.Export("non-existent", cltest.Password)`
$DIR/core/services/keystore/solana_test.go: `_, err = ks.Delete(ctx, key.ID())`
$DIR/core/services/keystore/solana_test.go: `_, err = ks.Get(key.ID())`
$DIR/core/services/keystore/solana_test.go: `_, err = ks.Import(ctx, exportJSON, cltest.Password)`
$DIR/core/services/keystore/solana_test.go: `_, err = ks.Import(ctx, []byte(""), cltest.Password)`
$DIR/core/services/keystore/solana_test.go: `t.Run("adds an externally created key / deletes a key", func(t *testing.T) {
defer reset()
ctx := testutils.Context(t)
newKey, err := solkey.New()
require.NoError(t, err)
err = ks.Add(ctx, newKey)
require.NoError(t, err)
err = ks.Add(ctx, newKey)
assert.Error(t, err)
keys, err := ks.GetAll()
require.NoError(t, err)
require.Equal(t, 1, len(keys))
_, err = ks.Delete(ctx, newKey.ID())
require.NoError(t, err)
_, err = ks.Delete(ctx, newKey.ID())
assert.Error(t, err)
keys, err = ks.GetAll()
require.NoError(t, err)
require.Equal(t, 0, len(keys))
_, err = ks.Get(newKey.ID())
require.Error(t, err)
})`
$DIR/core/services/keystore/solana_test.go: `err = ks.Add(ctx, newKey)`
$DIR/core/services/keystore/solana_test.go: `err = ks.Add(ctx, newKey)`
$DIR/core/services/keystore/solana_test.go: `_, err = ks.Delete(ctx, newKey.ID())`
$DIR/core/services/keystore/solana_test.go: `_, err = ks.Delete(ctx, newKey.ID())`
$DIR/core/services/keystore/solana_test.go: `keys, err = ks.GetAll()`
$DIR/core/services/keystore/solana_test.go: `_, err = ks.Get(newKey.ID())`
$DIR/core/services/keystore/solana_test.go: `t.Run("ensures key", func(t *testing.T) {
defer reset()
ctx := testutils.Context(t)
err := ks.EnsureKey(ctx)
assert.NoError(t, err)
err = ks.EnsureKey(ctx)
assert.NoError(t, err)
keys, err := ks.GetAll()
require.NoError(t, err)
require.Equal(t, 1, len(keys))
})`
$DIR/core/services/keystore/solana_test.go: `err = ks.EnsureKey(ctx)`
$DIR/core/services/keystore/solana_test.go: `_, err = ks.Sign(testutils.Context(t), "not-real", nil)`
$DIR/core/services/keystore/solana_test.go: `.NewSqlxDB(t)`
$DIR/core/services/keystore/solana_test.go: `.ExposedNewMaster(t, db)`
$DIR/core/services/keystore/solana_test.go: `.Solana()`
$DIR/core/services/keystore/solana_test.go: `.Background()`
$DIR/core/services/keystore/solana_test.go: `.ResetXXXTestOnly()`
$DIR/core/services/keystore/solana_test.go: `.Run("initializes with an empty state", func(t *testing.T) {
defer reset()
keys, err := ks.GetAll()
require.NoError(t, err)
require.Equal(t, 0, len(keys))
})`
$DIR/core/services/keystore/solana_test.go: `.GetAll()`
$DIR/core/services/keystore/solana_test.go: `.Run("errors when getting non-existent ID", func(t *testing.T) {
defer reset()
_, err := ks.Get("non-existent-id")
require.Error(t, err)
})`
$DIR/core/services/keystore/solana_test.go: `.Get("non-existent-id")`
$DIR/core/services/keystore/solana_test.go: `.Run("creates a key", func(t *testing.T) {
defer reset()
ctx := testutils.Context(t)
key, err := ks.Create(ctx)
require.NoError(t, err)
retrievedKey, err := ks.Get(key.ID())
require.NoError(t, err)
require.Equal(t, key, retrievedKey)
})`
$DIR/core/services/keystore/solana_test.go: `.Context(t)`
$DIR/core/services/keystore/solana_test.go: `.Create(ctx)`
$DIR/core/services/keystore/solana_test.go: `.Get(key.ID())`
$DIR/core/services/keystore/solana_test.go: `.ID()`
$DIR/core/services/keystore/solana_test.go: `.Run("imports and exports a key", func(t *testing.T) {
defer reset()
ctx := testutils.Context(t)
key, err := ks.Create(ctx)
require.NoError(t, err)
exportJSON, err := ks.Export(key.ID(), cltest.Password)
require.NoError(t, err)
_, err = ks.Export("non-existent", cltest.Password)
assert.Error(t, err)
_, err = ks.Delete(ctx, key.ID())
require.NoError(t, err)
_, err = ks.Get(key.ID())
require.Error(t, err)
importedKey, err := ks.Import(ctx, exportJSON, cltest.Password)
require.NoError(t, err)
_, err = ks.Import(ctx, exportJSON, cltest.Password)
assert.Error(t, err)
_, err = ks.Import(ctx, []byte(""), cltest.Password)
assert.Error(t, err)
require.Equal(t, key.ID(), importedKey.ID())
retrievedKey, err := ks.Get(key.ID())
require.NoError(t, err)
require.Equal(t, importedKey, retrievedKey)
})`
$DIR/core/services/keystore/solana_test.go: `.Context(t)`
$DIR/core/services/keystore/solana_test.go: `.Create(ctx)`
$DIR/core/services/keystore/solana_test.go: `.Export(key.ID(), cltest.Password)`
$DIR/core/services/keystore/solana_test.go: `.ID()`
$DIR/core/services/keystore/solana_test.go: `.Export("non-existent", cltest.Password)`
$DIR/core/services/keystore/solana_test.go: `.Delete(ctx, key.ID())`
$DIR/core/services/keystore/solana_test.go: `.ID()`
$DIR/core/services/keystore/solana_test.go: `.Get(key.ID())`
$DIR/core/services/keystore/solana_test.go: `.ID()`
$DIR/core/services/keystore/solana_test.go: `.Import(ctx, exportJSON, cltest.Password)`
$DIR/core/services/keystore/solana_test.go: `.Import(ctx, exportJSON, cltest.Password)`
$DIR/core/services/keystore/solana_test.go: `.Import(ctx, []byte(""), cltest.Password)`
$DIR/core/services/keystore/solana_test.go: `.Get(key.ID())`
$DIR/core/services/keystore/solana_test.go: `.ID()`
$DIR/core/services/keystore/solana_test.go: `.Run("adds an externally created key / deletes a key", func(t *testing.T) {
defer reset()
ctx := testutils.Context(t)
newKey, err := solkey.New()
require.NoError(t, err)
err = ks.Add(ctx, newKey)
require.NoError(t, err)
err = ks.Add(ctx, newKey)
assert.Error(t, err)
keys, err := ks.GetAll()
require.NoError(t, err)
require.Equal(t, 1, len(keys))
_, err = ks.Delete(ctx, newKey.ID())
require.NoError(t, err)
_, err = ks.Delete(ctx, newKey.ID())
assert.Error(t, err)
keys, err = ks.GetAll()
require.NoError(t, err)
require.Equal(t, 0, len(keys))
_, err = ks.Get(newKey.ID())
require.Error(t, err)
})`
$DIR/core/services/keystore/solana_test.go: `.Context(t)`
$DIR/core/services/keystore/solana_test.go: `.New()`
$DIR/core/services/keystore/solana_test.go: `.Add(ctx, newKey)`
$DIR/core/services/keystore/solana_test.go: `.Add(ctx, newKey)`
$DIR/core/services/keystore/solana_test.go: `.GetAll()`
$DIR/core/services/keystore/solana_test.go: `.Delete(ctx, newKey.ID())`
$DIR/core/services/keystore/solana_test.go: `.ID()`
$DIR/core/services/keystore/solana_test.go: `.Delete(ctx, newKey.ID())`
$DIR/core/services/keystore/solana_test.go: `.ID()`
$DIR/core/services/keystore/solana_test.go: `.GetAll()`
$DIR/core/services/keystore/solana_test.go: `.Get(newKey.ID())`
$DIR/core/services/keystore/solana_test.go: `.ID()`
$DIR/core/services/keystore/solana_test.go: `.Run("ensures key", func(t *testing.T) {
defer reset()
ctx := testutils.Context(t)
err := ks.EnsureKey(ctx)
assert.NoError(t, err)
err = ks.EnsureKey(ctx)
assert.NoError(t, err)
keys, err := ks.GetAll()
require.NoError(t, err)
require.Equal(t, 1, len(keys))
})`
$DIR/core/services/keystore/solana_test.go: `.Context(t)`
$DIR/core/services/keystore/solana_test.go: `.EnsureKey(ctx)`
$DIR/core/services/keystore/solana_test.go: `.EnsureKey(ctx)`
$DIR/core/services/keystore/solana_test.go: `.GetAll()`
$DIR/core/services/keystore/solana_test.go: `.Context(t)`
$DIR/core/services/keystore/solana_test.go: `.New()`
$DIR/core/services/keystore/solana_test.go: `.Sign(testutils.Context(t), "not-real", nil)`
$DIR/core/services/keystore/solana_test.go: `.Context(t)`
$DIR/core/services/keystore/solana_test.go: `.Sign(testutils.Context(t), newKey.ID(), payload)`
$DIR/core/services/keystore/solana_test.go: `.Context(t)`
$DIR/core/services/keystore/solana_test.go: `.ID()`
$DIR/core/services/keystore/solana_test.go: `.Sign(payload)`
$DIR/core/services/keystore/starknet_test.go: `keyStore.ResetXXXTestOnly()`
$DIR/core/services/keystore/starknet_test.go: `t.Run("initializes with an empty state", func(t *testing.T) {
defer reset()
keys, err := ks.GetAll()
require.NoError(t, err)
require.Equal(t, 0, len(keys))
})`
$DIR/core/services/keystore/starknet_test.go: `t.Run("errors when getting non-existent ID", func(t *testing.T) {
defer reset()
_, err := ks.Get("non-existent-id")
require.Error(t, err)
})`
$DIR/core/services/keystore/starknet_test.go: `t.Run("creates a key", func(t *testing.T) {
defer reset()
ctx := testutils.Context(t)
key, err := ks.Create(ctx)
require.NoError(t, err)
retrievedKey, err := ks.Get(key.ID())
require.NoError(t, err)
require.Equal(t, key, retrievedKey)
})`
$DIR/core/services/keystore/starknet_test.go: `t.Run("imports and exports a key", func(t *testing.T) {
defer reset()
ctx := testutils.Context(t)
key, err := ks.Create(ctx)
require.NoError(t, err)
exportJSON, err := ks.Export(key.ID(), cltest.Password)
require.NoError(t, err)
_, err = ks.Delete(ctx, key.ID())
require.NoError(t, err)
_, err = ks.Get(key.ID())
require.Error(t, err)
importedKey, err := ks.Import(ctx, exportJSON, cltest.Password)
require.NoError(t, err)
require.Equal(t, key.ID(), importedKey.ID())
retrievedKey, err := ks.Get(key.ID())
require.NoError(t, err)
require.Equal(t, importedKey, retrievedKey)
})`
$DIR/core/services/keystore/starknet_test.go: `_, err = ks.Delete(ctx, key.ID())`
$DIR/core/services/keystore/starknet_test.go: `_, err = ks.Get(key.ID())`
$DIR/core/services/keystore/starknet_test.go: `t.Run("adds an externally created key / deletes a key", func(t *testing.T) {
defer reset()
ctx := testutils.Context(t)
newKey, err := starkkey.New()
require.NoError(t, err)
err = ks.Add(ctx, newKey)
require.NoError(t, err)
keys, err := ks.GetAll()
require.NoError(t, err)
require.Equal(t, 1, len(keys))
_, err = ks.Delete(ctx, newKey.ID())
require.NoError(t, err)
keys, err = ks.GetAll()
require.NoError(t, err)
require.Equal(t, 0, len(keys))
_, err = ks.Get(newKey.ID())
require.Error(t, err)
})`
$DIR/core/services/keystore/starknet_test.go: `err = ks.Add(ctx, newKey)`
$DIR/core/services/keystore/starknet_test.go: `_, err = ks.Delete(ctx, newKey.ID())`
$DIR/core/services/keystore/starknet_test.go: `keys, err = ks.GetAll()`
$DIR/core/services/keystore/starknet_test.go: `_, err = ks.Get(newKey.ID())`
$DIR/core/services/keystore/starknet_test.go: `err = ks.EnsureKey(ctx)`
$DIR/core/services/keystore/starknet_test.go: `t.Run("key exists", func(t *testing.T) {
baseKs.On("Get", starknetSenderAddr).Return(starkKey, nil)
signed, err := lk.Sign(testutils.Context(t), starknetSenderAddr, nil)
require.Nil(t, signed)
require.NoError(t, err)
})`
$DIR/core/services/keystore/starknet_test.go: `baseKs.On("Get", starknetSenderAddr).Return(starkKey, nil)`
$DIR/core/services/keystore/starknet_test.go: `t.Run("key doesn't exists", func(t *testing.T) {
baseKs.On("Get", mock.Anything).Return(starkkey.Key{}, fmt.Errorf("key doesn't exist"))
signed, err := lk.Sign(testutils.Context(t), "not an address", nil)
require.Nil(t, signed)
require.Error(t, err)
})`
$DIR/core/services/keystore/starknet_test.go: `baseKs.On("Get", mock.Anything).Return(starkkey.Key{}, fmt.Errorf("key doesn't exist"))`
$DIR/core/services/keystore/starknet_test.go: `baseKs.On("Get", starknetSenderAddr).Return(starkKey, nil)`
$DIR/core/services/keystore/starknet_test.go: `.NewSqlxDB(t)`
$DIR/core/services/keystore/starknet_test.go: `.ExposedNewMaster(t, db)`
$DIR/core/services/keystore/starknet_test.go: `.StarkNet()`
$DIR/core/services/keystore/starknet_test.go: `.Background()`
$DIR/core/services/keystore/starknet_test.go: `.ResetXXXTestOnly()`
$DIR/core/services/keystore/starknet_test.go: `.Run("initializes with an empty state", func(t *testing.T) {
defer reset()
keys, err := ks.GetAll()
require.NoError(t, err)
require.Equal(t, 0, len(keys))
})`
$DIR/core/services/keystore/starknet_test.go: `.GetAll()`
$DIR/core/services/keystore/starknet_test.go: `.Run("errors when getting non-existent ID", func(t *testing.T) {
defer reset()
_, err := ks.Get("non-existent-id")
require.Error(t, err)
})`
$DIR/core/services/keystore/starknet_test.go: `.Get("non-existent-id")`
$DIR/core/services/keystore/starknet_test.go: `.Run("creates a key", func(t *testing.T) {
defer reset()
ctx := testutils.Context(t)
key, err := ks.Create(ctx)
require.NoError(t, err)
retrievedKey, err := ks.Get(key.ID())
require.NoError(t, err)
require.Equal(t, key, retrievedKey)
})`
$DIR/core/services/keystore/starknet_test.go: `.Context(t)`
$DIR/core/services/keystore/starknet_test.go: `.Create(ctx)`
$DIR/core/services/keystore/starknet_test.go: `.Get(key.ID())`
$DIR/core/services/keystore/starknet_test.go: `.ID()`
$DIR/core/services/keystore/starknet_test.go: `.Run("imports and exports a key", func(t *testing.T) {
defer reset()
ctx := testutils.Context(t)
key, err := ks.Create(ctx)
require.NoError(t, err)
exportJSON, err := ks.Export(key.ID(), cltest.Password)
require.NoError(t, err)
_, err = ks.Delete(ctx, key.ID())
require.NoError(t, err)
_, err = ks.Get(key.ID())
require.Error(t, err)
importedKey, err := ks.Import(ctx, exportJSON, cltest.Password)
require.NoError(t, err)
require.Equal(t, key.ID(), importedKey.ID())
retrievedKey, err := ks.Get(key.ID())
require.NoError(t, err)
require.Equal(t, importedKey, retrievedKey)
})`
$DIR/core/services/keystore/starknet_test.go: `.Context(t)`
$DIR/core/services/keystore/starknet_test.go: `.Create(ctx)`
$DIR/core/services/keystore/starknet_test.go: `.Export(key.ID(), cltest.Password)`
$DIR/core/services/keystore/starknet_test.go: `.ID()`
$DIR/core/services/keystore/starknet_test.go: `.Delete(ctx, key.ID())`
$DIR/core/services/keystore/starknet_test.go: `.ID()`
$DIR/core/services/keystore/starknet_test.go: `.Get(key.ID())`
$DIR/core/services/keystore/starknet_test.go: `.ID()`
$DIR/core/services/keystore/starknet_test.go: `.Import(ctx, exportJSON, cltest.Password)`
$DIR/core/services/keystore/starknet_test.go: `.Get(key.ID())`
$DIR/core/services/keystore/starknet_test.go: `.ID()`
$DIR/core/services/keystore/starknet_test.go: `.Run("adds an externally created key / deletes a key", func(t *testing.T) {
defer reset()
ctx := testutils.Context(t)
newKey, err := starkkey.New()
require.NoError(t, err)
err = ks.Add(ctx, newKey)
require.NoError(t, err)
keys, err := ks.GetAll()
require.NoError(t, err)
require.Equal(t, 1, len(keys))
_, err = ks.Delete(ctx, newKey.ID())
require.NoError(t, err)
keys, err = ks.GetAll()
require.NoError(t, err)
require.Equal(t, 0, len(keys))
_, err = ks.Get(newKey.ID())
require.Error(t, err)
})`
$DIR/core/services/keystore/starknet_test.go: `.Context(t)`
$DIR/core/services/keystore/starknet_test.go: `.New()`
$DIR/core/services/keystore/starknet_test.go: `.Add(ctx, newKey)`
$DIR/core/services/keystore/starknet_test.go: `.GetAll()`
$DIR/core/services/keystore/starknet_test.go: `.Delete(ctx, newKey.ID())`
$DIR/core/services/keystore/starknet_test.go: `.ID()`
$DIR/core/services/keystore/starknet_test.go: `.GetAll()`
$DIR/core/services/keystore/starknet_test.go: `.Get(newKey.ID())`
$DIR/core/services/keystore/starknet_test.go: `.ID()`
$DIR/core/services/keystore/starknet_test.go: `.Context(t)`
$DIR/core/services/keystore/starknet_test.go: `.EnsureKey(ctx)`
$DIR/core/services/keystore/starknet_test.go: `.EnsureKey(ctx)`
$DIR/core/services/keystore/starknet_test.go: `.GetAll()`
$DIR/core/services/keystore/starknet_test.go: `.NewStarkNet(t)`
$DIR/core/services/keystore/starknet_test.go: `.New()`
$DIR/core/services/keystore/starknet_test.go: `.Run("key exists", func(t *testing.T) {
baseKs.On("Get", starknetSenderAddr).Return(starkKey, nil)
signed, err := lk.Sign(testutils.Context(t), starknetSenderAddr, nil)
require.Nil(t, signed)
require.NoError(t, err)
})`
$DIR/core/services/keystore/starknet_test.go: `.On("Get", starknetSenderAddr)`
$DIR/core/services/keystore/starknet_test.go: `.Return(starkKey, nil)`
$DIR/core/services/keystore/starknet_test.go: `.Sign(testutils.Context(t), starknetSenderAddr, nil)`
$DIR/core/services/keystore/starknet_test.go: `.Context(t)`
$DIR/core/services/keystore/starknet_test.go: `.Run("key doesn't exists", func(t *testing.T) {
baseKs.On("Get", mock.Anything).Return(starkkey.Key{}, fmt.Errorf("key doesn't exist"))
signed, err := lk.Sign(testutils.Context(t), "not an address", nil)
require.Nil(t, signed)
require.Error(t, err)
})`
$DIR/core/services/keystore/starknet_test.go: `.On("Get", mock.Anything)`
$DIR/core/services/keystore/starknet_test.go: `.Return(starkkey.Key{}, fmt.Errorf("key doesn't exist"))`
$DIR/core/services/keystore/starknet_test.go: `.Sign(testutils.Context(t), "not an address", nil)`
$DIR/core/services/keystore/starknet_test.go: `.Context(t)`
$DIR/core/services/keystore/starknet_test.go: `.NewKeystoreAdapter(lk)`
$DIR/core/services/keystore/starknet_test.go: `.On("Get", starknetSenderAddr)`
$DIR/core/services/keystore/starknet_test.go: `.Return(starkKey, nil)`
$DIR/core/services/keystore/starknet_test.go: `.Curve.PedersenHash([]*big.Int{big.NewInt(42)})`
$DIR/core/services/keystore/starknet_test.go: `.NewInt(42)`
$DIR/core/services/keystore/starknet_test.go: `.Sign(testutils.Context(t), starknetSenderAddr, hash)`
$DIR/core/services/keystore/starknet_test.go: `.Context(t)`
$DIR/core/services/keystore/starknet_test.go: `.Curve.PrivateToPoint(starkKey.ToPrivKey())`
$DIR/core/services/keystore/starknet_test.go: `.ToPrivKey()`
$DIR/core/services/keystore/vrf_test.go: `keyStore.ResetXXXTestOnly()`
$DIR/core/services/keystore/vrf_test.go: `t.Run("initializes with an empty state", func(t *testing.T) {
defer reset()
keys, err := ks.GetAll()
require.NoError(t, err)
require.Equal(t, 0, len(keys))
})`
$DIR/core/services/keystore/vrf_test.go: `t.Run("errors when getting non-existent ID", func(t *testing.T) {
defer reset()
_, err := ks.Get("non-existent-id")
require.Error(t, err)
})`
$DIR/core/services/keystore/vrf_test.go: `t.Run("creates a key", func(t *testing.T) {
defer reset()
ctx := testutils.Context(t)
key, err := ks.Create(ctx)
require.NoError(t, err)
retrievedKey, err := ks.Get(key.ID())
require.NoError(t, err)
require.Equal(t, key, retrievedKey)
})`
$DIR/core/services/keystore/vrf_test.go: `t.Run("imports and exports a key", func(t *testing.T) {
defer reset()
ctx := testutils.Context(t)
key, err := ks.Create(ctx)
require.NoError(t, err)
exportJSON, err := ks.Export(key.ID(), cltest.Password)
require.NoError(t, err)
_, err = ks.Delete(ctx, key.ID())
require.NoError(t, err)
_, err = ks.Get(key.ID())
require.Error(t, err)
importedKey, err := ks.Import(ctx, exportJSON, cltest.Password)
require.NoError(t, err)
require.Equal(t, key.ID(), importedKey.ID())
retrievedKey, err := ks.Get(key.ID())
require.NoError(t, err)
require.Equal(t, importedKey, retrievedKey)
})`
$DIR/core/services/keystore/vrf_test.go: `_, err = ks.Delete(ctx, key.ID())`
$DIR/core/services/keystore/vrf_test.go: `_, err = ks.Get(key.ID())`
$DIR/core/services/keystore/vrf_test.go: `t.Run("adds an externally created key / deletes a key", func(t *testing.T) {
defer reset()
ctx := testutils.Context(t)
newKey, err := vrfkey.NewV2()
require.NoError(t, err)
err = ks.Add(ctx, newKey)
require.NoError(t, err)
keys, err := ks.GetAll()
require.NoError(t, err)
require.Equal(t, 1, len(keys))
_, err = ks.Delete(ctx, newKey.ID())
require.NoError(t, err)
keys, err = ks.GetAll()
require.NoError(t, err)
require.Equal(t, 0, len(keys))
_, err = ks.Get(newKey.ID())
require.Error(t, err)
})`
$DIR/core/services/keystore/vrf_test.go: `err = ks.Add(ctx, newKey)`
$DIR/core/services/keystore/vrf_test.go: `_, err = ks.Delete(ctx, newKey.ID())`
$DIR/core/services/keystore/vrf_test.go: `keys, err = ks.GetAll()`
$DIR/core/services/keystore/vrf_test.go: `_, err = ks.Get(newKey.ID())`
$DIR/core/services/keystore/vrf_test.go: `t.Run("fails to add an already added key", func(t *testing.T) {
defer reset()
ctx := testutils.Context(t)
k, err := vrfkey.NewV2()
require.NoError(t, err)
err = ks.Add(ctx, k)
require.NoError(t, err)
err = ks.Add(ctx, k)
assert.Error(t, err)
assert.Equal(t, fmt.Sprintf("key with ID %s already exists", k.ID()), err.Error())
})`
$DIR/core/services/keystore/vrf_test.go: `err = ks.Add(ctx, k)`
$DIR/core/services/keystore/vrf_test.go: `err = ks.Add(ctx, k)`
$DIR/core/services/keystore/vrf_test.go: `t.Run("fails to delete a key that doesn't exists", func(t *testing.T) {
defer reset()
ctx := testutils.Context(t)
k, err := vrfkey.NewV2()
require.NoError(t, err)
err = ks.Add(ctx, k)
require.NoError(t, err)
fk, err := ks.Delete(ctx, "non-existent")
assert.Zero(t, fk)
assert.Error(t, err)
})`
$DIR/core/services/keystore/vrf_test.go: `err = ks.Add(ctx, k)`
$DIR/core/services/keystore/vrf_test.go: `t.Run("imports a key exported from a v1 keystore", func(t *testing.T) {
defer reset()
ctx := testutils.Context(t)
exportedKey := `{"PublicKey":"0xd2377bc6be8a2c5ce163e1867ee42ef111e320686f940a98e52e9c019ca0606800","vrf_key":{"address":"b94276ad4e5452732ec0cccf30ef7919b67844b6","crypto":{"cipher":"aes-128-ctr","ciphertext":"ff66d61d02dba54a61bab1ceb8414643f9e76b7351785d2959e2c8b50ee69a92","cipherparams":{"iv":"75705da271b11e330a27b8d593a3930c"},"kdf":"scrypt","kdfparams":{"dklen":32,"n":262144,"p":1,"r":8,"salt":"efe5b372e4fe79d0af576a79d65a1ee35d0792d9c92b70107b5ada1817ea7c7b"},"mac":"e4d0bb08ffd004ab03aeaa42367acbd9bb814c6cfd981f5157503f54c30816e7"},"version":3}}`
importedKey, err := ks.Import(ctx, []byte(exportedKey), "p4SsW0rD1!@#_")
require.NoError(t, err)
require.Equal(t, "0xd2377bc6be8a2c5ce163e1867ee42ef111e320686f940a98e52e9c019ca0606800", importedKey.ID())
})`
$DIR/core/services/keystore/vrf_test.go: `t.Run("fails to import an already imported key", func(t *testing.T) {
defer reset()
ctx := testutils.Context(t)
exportedKey := `{"PublicKey":"0xd2377bc6be8a2c5ce163e1867ee42ef111e320686f940a98e52e9c019ca0606800","vrf_key":{"address":"b94276ad4e5452732ec0cccf30ef7919b67844b6","crypto":{"cipher":"aes-128-ctr","ciphertext":"ff66d61d02dba54a61bab1ceb8414643f9e76b7351785d2959e2c8b50ee69a92","cipherparams":{"iv":"75705da271b11e330a27b8d593a3930c"},"kdf":"scrypt","kdfparams":{"dklen":32,"n":262144,"p":1,"r":8,"salt":"efe5b372e4fe79d0af576a79d65a1ee35d0792d9c92b70107b5ada1817ea7c7b"},"mac":"e4d0bb08ffd004ab03aeaa42367acbd9bb814c6cfd981f5157503f54c30816e7"},"version":3}}`
importedKey, err := ks.Import(ctx, []byte(exportedKey), "p4SsW0rD1!@#_")
require.NoError(t, err)
keyStore.SetPassword("p4SsW0rD1!@#_")
k, err := ks.Import(ctx, []byte(exportedKey), "p4SsW0rD1!@#_")
assert.Zero(t, k)
assert.Error(t, err)
assert.Equal(t, fmt.Sprintf("key with ID %s already exists", importedKey.ID()), err.Error())
})`
$DIR/core/services/keystore/vrf_test.go: `keyStore.SetPassword("p4SsW0rD1!@#_")`
$DIR/core/services/keystore/vrf_test.go: `t.Run("fails to export non-existent key", func(t *testing.T) {
k, err := ks.Export("non-existent", cltest.Password)
assert.Zero(t, k)
assert.Error(t, err)
})`
$DIR/core/services/keystore/vrf_test.go: `t.Run("fails to generate proof for non-existent key", func(t *testing.T) {
pf, err := ks.GenerateProof("non-existent", big.NewInt(int64(1)))
assert.Zero(t, pf)
assert.Error(t, err)
})`
$DIR/core/services/keystore/vrf_test.go: `t.Run("generates a proof for a key", func(t *testing.T) {
ctx := testutils.Context(t)
k, err := vrfkey.NewV2()
require.NoError(t, err)
err = ks.Add(ctx, k)
require.NoError(t, err)
pf, err := ks.GenerateProof(k.ID(), big.NewInt(int64(1)))
require.NoError(t, err)
assert.NotZero(t, pf)
})`
$DIR/core/services/keystore/vrf_test.go: `err = ks.Add(ctx, k)`
$DIR/core/services/keystore/vrf_test.go: `.NewSqlxDB(t)`
$DIR/core/services/keystore/vrf_test.go: `.ExposedNewMaster(t, db)`
$DIR/core/services/keystore/vrf_test.go: `.VRF()`
$DIR/core/services/keystore/vrf_test.go: `.Background()`
$DIR/core/services/keystore/vrf_test.go: `.ResetXXXTestOnly()`
$DIR/core/services/keystore/vrf_test.go: `.Run("initializes with an empty state", func(t *testing.T) {
defer reset()
keys, err := ks.GetAll()
require.NoError(t, err)
require.Equal(t, 0, len(keys))
})`
$DIR/core/services/keystore/vrf_test.go: `.GetAll()`
$DIR/core/services/keystore/vrf_test.go: `.Run("errors when getting non-existent ID", func(t *testing.T) {
defer reset()
_, err := ks.Get("non-existent-id")
require.Error(t, err)
})`
$DIR/core/services/keystore/vrf_test.go: `.Get("non-existent-id")`
$DIR/core/services/keystore/vrf_test.go: `.Run("creates a key", func(t *testing.T) {
defer reset()
ctx := testutils.Context(t)
key, err := ks.Create(ctx)
require.NoError(t, err)
retrievedKey, err := ks.Get(key.ID())
require.NoError(t, err)
require.Equal(t, key, retrievedKey)
})`
$DIR/core/services/keystore/vrf_test.go: `.Context(t)`
$DIR/core/services/keystore/vrf_test.go: `.Create(ctx)`
$DIR/core/services/keystore/vrf_test.go: `.Get(key.ID())`
$DIR/core/services/keystore/vrf_test.go: `.ID()`
$DIR/core/services/keystore/vrf_test.go: `.Run("imports and exports a key", func(t *testing.T) {
defer reset()
ctx := testutils.Context(t)
key, err := ks.Create(ctx)
require.NoError(t, err)
exportJSON, err := ks.Export(key.ID(), cltest.Password)
require.NoError(t, err)
_, err = ks.Delete(ctx, key.ID())
require.NoError(t, err)
_, err = ks.Get(key.ID())
require.Error(t, err)
importedKey, err := ks.Import(ctx, exportJSON, cltest.Password)
require.NoError(t, err)
require.Equal(t, key.ID(), importedKey.ID())
retrievedKey, err := ks.Get(key.ID())
require.NoError(t, err)
require.Equal(t, importedKey, retrievedKey)
})`
$DIR/core/services/keystore/vrf_test.go: `.Context(t)`
$DIR/core/services/keystore/vrf_test.go: `.Create(ctx)`
$DIR/core/services/keystore/vrf_test.go: `.Export(key.ID(), cltest.Password)`
$DIR/core/services/keystore/vrf_test.go: `.ID()`
$DIR/core/services/keystore/vrf_test.go: `.Delete(ctx, key.ID())`
$DIR/core/services/keystore/vrf_test.go: `.ID()`
$DIR/core/services/keystore/vrf_test.go: `.Get(key.ID())`
$DIR/core/services/keystore/vrf_test.go: `.ID()`
$DIR/core/services/keystore/vrf_test.go: `.Import(ctx, exportJSON, cltest.Password)`
$DIR/core/services/keystore/vrf_test.go: `.Get(key.ID())`
$DIR/core/services/keystore/vrf_test.go: `.ID()`
$DIR/core/services/keystore/vrf_test.go: `.Run("adds an externally created key / deletes a key", func(t *testing.T) {
defer reset()
ctx := testutils.Context(t)
newKey, err := vrfkey.NewV2()
require.NoError(t, err)
err = ks.Add(ctx, newKey)
require.NoError(t, err)
keys, err := ks.GetAll()
require.NoError(t, err)
require.Equal(t, 1, len(keys))
_, err = ks.Delete(ctx, newKey.ID())
require.NoError(t, err)
keys, err = ks.GetAll()
require.NoError(t, err)
require.Equal(t, 0, len(keys))
_, err = ks.Get(newKey.ID())
require.Error(t, err)
})`
$DIR/core/services/keystore/vrf_test.go: `.Context(t)`
$DIR/core/services/keystore/vrf_test.go: `.NewV2()`
$DIR/core/services/keystore/vrf_test.go: `.Add(ctx, newKey)`
$DIR/core/services/keystore/vrf_test.go: `.GetAll()`
$DIR/core/services/keystore/vrf_test.go: `.Delete(ctx, newKey.ID())`
$DIR/core/services/keystore/vrf_test.go: `.ID()`
$DIR/core/services/keystore/vrf_test.go: `.GetAll()`
$DIR/core/services/keystore/vrf_test.go: `.Get(newKey.ID())`
$DIR/core/services/keystore/vrf_test.go: `.ID()`
$DIR/core/services/keystore/vrf_test.go: `.Run("fails to add an already added key", func(t *testing.T) {
defer reset()
ctx := testutils.Context(t)
k, err := vrfkey.NewV2()
require.NoError(t, err)
err = ks.Add(ctx, k)
require.NoError(t, err)
err = ks.Add(ctx, k)
assert.Error(t, err)
assert.Equal(t, fmt.Sprintf("key with ID %s already exists", k.ID()), err.Error())
})`
$DIR/core/services/keystore/vrf_test.go: `.Context(t)`
$DIR/core/services/keystore/vrf_test.go: `.NewV2()`
$DIR/core/services/keystore/vrf_test.go: `.Add(ctx, k)`
$DIR/core/services/keystore/vrf_test.go: `.Add(ctx, k)`
$DIR/core/services/keystore/vrf_test.go: `.Run("fails to delete a key that doesn't exists", func(t *testing.T) {
defer reset()
ctx := testutils.Context(t)
k, err := vrfkey.NewV2()
require.NoError(t, err)
err = ks.Add(ctx, k)
require.NoError(t, err)
fk, err := ks.Delete(ctx, "non-existent")
assert.Zero(t, fk)
assert.Error(t, err)
})`
$DIR/core/services/keystore/vrf_test.go: `.Context(t)`
$DIR/core/services/keystore/vrf_test.go: `.NewV2()`
$DIR/core/services/keystore/vrf_test.go: `.Add(ctx, k)`
$DIR/core/services/keystore/vrf_test.go: `.Delete(ctx, "non-existent")`
$DIR/core/services/keystore/vrf_test.go: `.Run("imports a key exported from a v1 keystore", func(t *testing.T) {
defer reset()
ctx := testutils.Context(t)
exportedKey := `{"PublicKey":"0xd2377bc6be8a2c5ce163e1867ee42ef111e320686f940a98e52e9c019ca0606800","vrf_key":{"address":"b94276ad4e5452732ec0cccf30ef7919b67844b6","crypto":{"cipher":"aes-128-ctr","ciphertext":"ff66d61d02dba54a61bab1ceb8414643f9e76b7351785d2959e2c8b50ee69a92","cipherparams":{"iv":"75705da271b11e330a27b8d593a3930c"},"kdf":"scrypt","kdfparams":{"dklen":32,"n":262144,"p":1,"r":8,"salt":"efe5b372e4fe79d0af576a79d65a1ee35d0792d9c92b70107b5ada1817ea7c7b"},"mac":"e4d0bb08ffd004ab03aeaa42367acbd9bb814c6cfd981f5157503f54c30816e7"},"version":3}}`
importedKey, err := ks.Import(ctx, []byte(exportedKey), "p4SsW0rD1!@#_")
require.NoError(t, err)
require.Equal(t, "0xd2377bc6be8a2c5ce163e1867ee42ef111e320686f940a98e52e9c019ca0606800", importedKey.ID())
})`
$DIR/core/services/keystore/vrf_test.go: `.Context(t)`
$DIR/core/services/keystore/vrf_test.go: `.Import(ctx, []byte(exportedKey), "p4SsW0rD1!@#_")`
$DIR/core/services/keystore/vrf_test.go: `.Run("fails to import an already imported key", func(t *testing.T) {
defer reset()
ctx := testutils.Context(t)
exportedKey := `{"PublicKey":"0xd2377bc6be8a2c5ce163e1867ee42ef111e320686f940a98e52e9c019ca0606800","vrf_key":{"address":"b94276ad4e5452732ec0cccf30ef7919b67844b6","crypto":{"cipher":"aes-128-ctr","ciphertext":"ff66d61d02dba54a61bab1ceb8414643f9e76b7351785d2959e2c8b50ee69a92","cipherparams":{"iv":"75705da271b11e330a27b8d593a3930c"},"kdf":"scrypt","kdfparams":{"dklen":32,"n":262144,"p":1,"r":8,"salt":"efe5b372e4fe79d0af576a79d65a1ee35d0792d9c92b70107b5ada1817ea7c7b"},"mac":"e4d0bb08ffd004ab03aeaa42367acbd9bb814c6cfd981f5157503f54c30816e7"},"version":3}}`
importedKey, err := ks.Import(ctx, []byte(exportedKey), "p4SsW0rD1!@#_")
require.NoError(t, err)
keyStore.SetPassword("p4SsW0rD1!@#_")
k, err := ks.Import(ctx, []byte(exportedKey), "p4SsW0rD1!@#_")
assert.Zero(t, k)
assert.Error(t, err)
assert.Equal(t, fmt.Sprintf("key with ID %s already exists", importedKey.ID()), err.Error())
})`
$DIR/core/services/keystore/vrf_test.go: `.Context(t)`
$DIR/core/services/keystore/vrf_test.go: `.Import(ctx, []byte(exportedKey), "p4SsW0rD1!@#_")`
$DIR/core/services/keystore/vrf_test.go: `.SetPassword("p4SsW0rD1!@#_")`
$DIR/core/services/keystore/vrf_test.go: `.Import(ctx, []byte(exportedKey), "p4SsW0rD1!@#_")`
$DIR/core/services/keystore/vrf_test.go: `.Run("fails to export non-existent key", func(t *testing.T) {
k, err := ks.Export("non-existent", cltest.Password)
assert.Zero(t, k)
assert.Error(t, err)
})`
$DIR/core/services/keystore/vrf_test.go: `.Export("non-existent", cltest.Password)`
$DIR/core/services/keystore/vrf_test.go: `.Run("fails to generate proof for non-existent key", func(t *testing.T) {
pf, err := ks.GenerateProof("non-existent", big.NewInt(int64(1)))
assert.Zero(t, pf)
assert.Error(t, err)
})`
$DIR/core/services/keystore/vrf_test.go: `.GenerateProof("non-existent", big.NewInt(int64(1)))`
$DIR/core/services/keystore/vrf_test.go: `.NewInt(int64(1))`
$DIR/core/services/keystore/vrf_test.go: `.Run("generates a proof for a key", func(t *testing.T) {
ctx := testutils.Context(t)
k, err := vrfkey.NewV2()
require.NoError(t, err)
err = ks.Add(ctx, k)
require.NoError(t, err)
pf, err := ks.GenerateProof(k.ID(), big.NewInt(int64(1)))
require.NoError(t, err)
assert.NotZero(t, pf)
})`
$DIR/core/services/keystore/vrf_test.go: `.Context(t)`
$DIR/core/services/keystore/vrf_test.go: `.NewV2()`
$DIR/core/services/keystore/vrf_test.go: `.Add(ctx, k)`
$DIR/core/services/keystore/vrf_test.go: `.GenerateProof(k.ID(), big.NewInt(int64(1)))`
$DIR/core/services/keystore/vrf_test.go: `.ID()`
$DIR/core/services/keystore/vrf_test.go: `.NewInt(int64(1))`
$DIR/core/services/llo/bm/dummy_transmitter_test.go: `servicetest.Run(t, tr)`
$DIR/core/services/llo/bm/dummy_transmitter_test.go: `.TestLoggerObserved(t, zapcore.DebugLevel)`
$DIR/core/services/llo/bm/dummy_transmitter_test.go: `.PublicKey("dummy")`
$DIR/core/services/llo/bm/dummy_transmitter_test.go: `.Run(t, tr)`
$DIR/core/services/llo/bm/dummy_transmitter_test.go: `.Transmit(
testutils.Context(t),
types.ConfigDigest{},
42,
ocr3types.ReportWithInfo[llotypes.ReportInfo]{},
[]types.AttributedOnchainSignature{},
)`
$DIR/core/services/llo/bm/dummy_transmitter_test.go: `.Context(t)`
$DIR/core/services/llo/data_source_test.go: `streamIDs[streams.StreamID(1)] = struct{}{}`
$DIR/core/services/llo/data_source_test.go: `streamIDs[streams.StreamID(2)] = struct{}{}`
$DIR/core/services/llo/data_source_test.go: `streamIDs[streams.StreamID(3)] = struct{}{}`
$DIR/core/services/llo/data_source_test.go: `t.Run("returns errors if no streams are defined", func(t *testing.T) {
vals, err := ds.Observe(ctx, streamIDs)
assert.NoError(t, err)
assert.Equal(t, llo.StreamValues{
2: llo.ObsResult[*big.Int]{Val: nil, Valid: false},
1: llo.ObsResult[*big.Int]{Val: nil, Valid: false},
3: llo.ObsResult[*big.Int]{Val: nil, Valid: false},
}, vals)
})`
$DIR/core/services/llo/data_source_test.go: `t.Run("observes each stream with success and returns values matching map argument", func(t *testing.T) {
reg.streams[1] = makeStreamWithSingleResult[*big.Int](big.NewInt(2181), nil)
reg.streams[2] = makeStreamWithSingleResult[*big.Int](big.NewInt(40602), nil)
reg.streams[3] = makeStreamWithSingleResult[*big.Int](big.NewInt(15), nil)
vals, err := ds.Observe(ctx, streamIDs)
assert.NoError(t, err)
assert.Equal(t, llo.StreamValues{
2: llo.ObsResult[*big.Int]{Val: big.NewInt(40602), Valid: true},
1: llo.ObsResult[*big.Int]{Val: big.NewInt(2181), Valid: true},
3: llo.ObsResult[*big.Int]{Val: big.NewInt(15), Valid: true},
}, vals)
})`
$DIR/core/services/llo/data_source_test.go: `reg.streams[1] = makeStreamWithSingleResult[*big.Int](big.NewInt(2181), nil)`
$DIR/core/services/llo/data_source_test.go: `reg.streams[2] = makeStreamWithSingleResult[*big.Int](big.NewInt(40602), nil)`
$DIR/core/services/llo/data_source_test.go: `reg.streams[3] = makeStreamWithSingleResult[*big.Int](big.NewInt(15), nil)`
$DIR/core/services/llo/data_source_test.go: `t.Run("observes each stream and returns success/errors", func(t *testing.T) {
reg.streams[1] = makeStreamWithSingleResult[*big.Int](big.NewInt(2181), errors.New("something exploded"))
reg.streams[2] = makeStreamWithSingleResult[*big.Int](big.NewInt(40602), nil)
reg.streams[3] = makeStreamWithSingleResult[*big.Int](nil, errors.New("something exploded 2"))
vals, err := ds.Observe(ctx, streamIDs)
assert.NoError(t, err)
assert.Equal(t, llo.StreamValues{
2: llo.ObsResult[*big.Int]{Val: big.NewInt(40602), Valid: true},
1: llo.ObsResult[*big.Int]{Val: nil, Valid: false},
3: llo.ObsResult[*big.Int]{Val: nil, Valid: false},
}, vals)
})`
$DIR/core/services/llo/data_source_test.go: `reg.streams[1] = makeStreamWithSingleResult[*big.Int](big.NewInt(2181), errors.New("something exploded"))`
$DIR/core/services/llo/data_source_test.go: `reg.streams[2] = makeStreamWithSingleResult[*big.Int](big.NewInt(40602), nil)`
$DIR/core/services/llo/data_source_test.go: `reg.streams[3] = makeStreamWithSingleResult[*big.Int](nil, errors.New("something exploded 2"))`
$DIR/core/services/llo/data_source_test.go: `.TestLogger(t)`
$DIR/core/services/llo/data_source_test.go: `.Context(t)`
$DIR/core/services/llo/data_source_test.go: `.StreamID(1)`
$DIR/core/services/llo/data_source_test.go: `.StreamID(2)`
$DIR/core/services/llo/data_source_test.go: `.StreamID(3)`
$DIR/core/services/llo/data_source_test.go: `.Run("returns errors if no streams are defined", func(t *testing.T) {
vals, err := ds.Observe(ctx, streamIDs)
assert.NoError(t, err)
assert.Equal(t, llo.StreamValues{
2: llo.ObsResult[*big.Int]{Val: nil, Valid: false},
1: llo.ObsResult[*big.Int]{Val: nil, Valid: false},
3: llo.ObsResult[*big.Int]{Val: nil, Valid: false},
}, vals)
})`
$DIR/core/services/llo/data_source_test.go: `.Observe(ctx, streamIDs)`
$DIR/core/services/llo/data_source_test.go: `.Run("observes each stream with success and returns values matching map argument", func(t *testing.T) {
reg.streams[1] = makeStreamWithSingleResult[*big.Int](big.NewInt(2181), nil)
reg.streams[2] = makeStreamWithSingleResult[*big.Int](big.NewInt(40602), nil)
reg.streams[3] = makeStreamWithSingleResult[*big.Int](big.NewInt(15), nil)
vals, err := ds.Observe(ctx, streamIDs)
assert.NoError(t, err)
assert.Equal(t, llo.StreamValues{
2: llo.ObsResult[*big.Int]{Val: big.NewInt(40602), Valid: true},
1: llo.ObsResult[*big.Int]{Val: big.NewInt(2181), Valid: true},
3: llo.ObsResult[*big.Int]{Val: big.NewInt(15), Valid: true},
}, vals)
})`
$DIR/core/services/llo/data_source_test.go: `.NewInt(2181)`
$DIR/core/services/llo/data_source_test.go: `.NewInt(40602)`
$DIR/core/services/llo/data_source_test.go: `.NewInt(15)`
$DIR/core/services/llo/data_source_test.go: `.Observe(ctx, streamIDs)`
$DIR/core/services/llo/data_source_test.go: `.Run("observes each stream and returns success/errors", func(t *testing.T) {
reg.streams[1] = makeStreamWithSingleResult[*big.Int](big.NewInt(2181), errors.New("something exploded"))
reg.streams[2] = makeStreamWithSingleResult[*big.Int](big.NewInt(40602), nil)
reg.streams[3] = makeStreamWithSingleResult[*big.Int](nil, errors.New("something exploded 2"))
vals, err := ds.Observe(ctx, streamIDs)
assert.NoError(t, err)
assert.Equal(t, llo.StreamValues{
2: llo.ObsResult[*big.Int]{Val: big.NewInt(40602), Valid: true},
1: llo.ObsResult[*big.Int]{Val: nil, Valid: false},
3: llo.ObsResult[*big.Int]{Val: nil, Valid: false},
}, vals)
})`
$DIR/core/services/llo/data_source_test.go: `.NewInt(2181)`
$DIR/core/services/llo/data_source_test.go: `.New("something exploded")`
$DIR/core/services/llo/data_source_test.go: `.NewInt(40602)`
$DIR/core/services/llo/data_source_test.go: `.New("something exploded 2")`
$DIR/core/services/llo/data_source_test.go: `.Observe(ctx, streamIDs)`
$DIR/core/services/llo/evm/report_codec_test.go: `t.Run("Encode errors on zero fields", func(t *testing.T) {
_, err := rc.Encode(llo.Report{})
require.Error(t, err)
assert.Contains(t, err.Error(), "failed to get chain ID for selector 0; chain not found for chain selector 0")
})`
$DIR/core/services/llo/evm/report_codec_test.go: `t.Run("Encode constructs a report from observations", func(t *testing.T) {
report := newValidReport()
encoded, err := rc.Encode(report)
require.NoError(t, err)
reportElems := make(map[string]interface{})
err = Schema.UnpackIntoMap(reportElems, encoded)
require.NoError(t, err)
assert.Equal(t, [32]uint8{0x1, 0x2, 0x3, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0}, reportElems["configDigest"])
assert.Equal(t, uint64(1), reportElems["chainId"])
assert.Equal(t, uint64(32), reportElems["seqNr"])
assert.Equal(t, uint32(31), reportElems["channelId"])
assert.Equal(t, uint32(33), reportElems["validAfterSeconds"])
assert.Equal(t, uint32(34), reportElems["validUntilSeconds"])
assert.Equal(t, []*big.Int{big.NewInt(35), big.NewInt(36)}, reportElems["values"])
assert.Equal(t, true, reportElems["specimen"])
assert.Len(t, encoded, 352)
assert.Equal(t, []byte{0x1, 0x2, 0x3, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x1, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x20, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x1f, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x21, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x22, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x1, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x1, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x2, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x23, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x24}, encoded)
t.Run("Decode decodes the report", func(t *testing.T) {
decoded, err := rc.Decode(encoded)
require.NoError(t, err)
assert.Equal(t, report.ConfigDigest, decoded.ConfigDigest)
assert.Equal(t, report.ChainSelector, decoded.ChainSelector)
assert.Equal(t, report.SeqNr, decoded.SeqNr)
assert.Equal(t, report.ChannelID, decoded.ChannelID)
assert.Equal(t, report.ValidAfterSeconds, decoded.ValidAfterSeconds)
assert.Equal(t, report.ValidUntilSeconds, decoded.ValidUntilSeconds)
assert.Equal(t, report.Values, decoded.Values)
assert.Equal(t, report.Specimen, decoded.Specimen)
})
})`
$DIR/core/services/llo/evm/report_codec_test.go: `err = Schema.UnpackIntoMap(reportElems, encoded)`
$DIR/core/services/llo/evm/report_codec_test.go: `t.Run("Decode decodes the report", func(t *testing.T) {
decoded, err := rc.Decode(encoded)
require.NoError(t, err)
assert.Equal(t, report.ConfigDigest, decoded.ConfigDigest)
assert.Equal(t, report.ChainSelector, decoded.ChainSelector)
assert.Equal(t, report.SeqNr, decoded.SeqNr)
assert.Equal(t, report.ChannelID, decoded.ChannelID)
assert.Equal(t, report.ValidAfterSeconds, decoded.ValidAfterSeconds)
assert.Equal(t, report.ValidUntilSeconds, decoded.ValidUntilSeconds)
assert.Equal(t, report.Values, decoded.Values)
assert.Equal(t, report.Specimen, decoded.Specimen)
})`
$DIR/core/services/llo/evm/report_codec_test.go: `longBad[i] = byte(i)`
$DIR/core/services/llo/evm/report_codec_test.go: `_, err = rc.Decode(longBad)`
$DIR/core/services/llo/evm/report_codec_test.go: `.Run("Encode errors on zero fields", func(t *testing.T) {
_, err := rc.Encode(llo.Report{})
require.Error(t, err)
assert.Contains(t, err.Error(), "failed to get chain ID for selector 0; chain not found for chain selector 0")
})`
$DIR/core/services/llo/evm/report_codec_test.go: `.Encode(llo.Report{})`
$DIR/core/services/llo/evm/report_codec_test.go: `.Run("Encode constructs a report from observations", func(t *testing.T) {
report := newValidReport()
encoded, err := rc.Encode(report)
require.NoError(t, err)
reportElems := make(map[string]interface{})
err = Schema.UnpackIntoMap(reportElems, encoded)
require.NoError(t, err)
assert.Equal(t, [32]uint8{0x1, 0x2, 0x3, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0}, reportElems["configDigest"])
assert.Equal(t, uint64(1), reportElems["chainId"])
assert.Equal(t, uint64(32), reportElems["seqNr"])
assert.Equal(t, uint32(31), reportElems["channelId"])
assert.Equal(t, uint32(33), reportElems["validAfterSeconds"])
assert.Equal(t, uint32(34), reportElems["validUntilSeconds"])
assert.Equal(t, []*big.Int{big.NewInt(35), big.NewInt(36)}, reportElems["values"])
assert.Equal(t, true, reportElems["specimen"])
assert.Len(t, encoded, 352)
assert.Equal(t, []byte{0x1, 0x2, 0x3, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x1, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x20, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x1f, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x21, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x22, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x1, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x1, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x2, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x23, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x24}, encoded)
t.Run("Decode decodes the report", func(t *testing.T) {
decoded, err := rc.Decode(encoded)
require.NoError(t, err)
assert.Equal(t, report.ConfigDigest, decoded.ConfigDigest)
assert.Equal(t, report.ChainSelector, decoded.ChainSelector)
assert.Equal(t, report.SeqNr, decoded.SeqNr)
assert.Equal(t, report.ChannelID, decoded.ChannelID)
assert.Equal(t, report.ValidAfterSeconds, decoded.ValidAfterSeconds)
assert.Equal(t, report.ValidUntilSeconds, decoded.ValidUntilSeconds)
assert.Equal(t, report.Values, decoded.Values)
assert.Equal(t, report.Specimen, decoded.Specimen)
})
})`
$DIR/core/services/llo/evm/report_codec_test.go: `.Encode(report)`
$DIR/core/services/llo/evm/report_codec_test.go: `.UnpackIntoMap(reportElems, encoded)`
$DIR/core/services/llo/evm/report_codec_test.go: `.Run("Decode decodes the report", func(t *testing.T) {
decoded, err := rc.Decode(encoded)
require.NoError(t, err)
assert.Equal(t, report.ConfigDigest, decoded.ConfigDigest)
assert.Equal(t, report.ChainSelector, decoded.ChainSelector)
assert.Equal(t, report.SeqNr, decoded.SeqNr)
assert.Equal(t, report.ChannelID, decoded.ChannelID)
assert.Equal(t, report.ValidAfterSeconds, decoded.ValidAfterSeconds)
assert.Equal(t, report.ValidUntilSeconds, decoded.ValidUntilSeconds)
assert.Equal(t, report.Values, decoded.Values)
assert.Equal(t, report.Specimen, decoded.Specimen)
})`
$DIR/core/services/llo/evm/report_codec_test.go: `.Decode(encoded)`
$DIR/core/services/llo/evm/report_codec_test.go: `.Decode([]byte{1, 2, 3})`
$DIR/core/services/llo/evm/report_codec_test.go: `.Decode(longBad)`
$DIR/core/services/llo/keyring_test.go: `t.Run("Sign+Verify", func(t *testing.T) {
for _, tc := range cases {
t.Run(tc.format.String(), func(t *testing.T) {
k := ks[tc.format]
defer k.(*mockKey).reset(tc.format)
sig, err := kr.Sign(cd, seqNr, ocr3types.ReportWithInfo[llotypes.ReportInfo]{Info: llotypes.ReportInfo{ReportFormat: tc.format}})
require.NoError(t, err)
assert.Equal(t, []byte(fmt.Sprintf("sig-%d", tc.format)), sig)
assert.False(t, kr.Verify(nil, cd, seqNr, ocr3types.ReportWithInfo[llotypes.ReportInfo]{Info: llotypes.ReportInfo{ReportFormat: tc.format}}, sig))
k.(*mockKey).verify = true
for _, tc2 := range cases {
verified := kr.Verify(nil, cd, seqNr, ocr3types.ReportWithInfo[llotypes.ReportInfo]{Info: llotypes.ReportInfo{ReportFormat: tc2.format}}, sig)
if tc.format == tc2.format {
assert.True(t, verified, "expected true for %s", tc2.format)
} else {
assert.False(t, verified, "expected false for %s", tc2.format)
}
}
})
}
})`
$DIR/core/services/llo/keyring_test.go: `t.Run(tc.format.String(), func(t *testing.T) {
k := ks[tc.format]
defer k.(*mockKey).reset(tc.format)
sig, err := kr.Sign(cd, seqNr, ocr3types.ReportWithInfo[llotypes.ReportInfo]{Info: llotypes.ReportInfo{ReportFormat: tc.format}})
require.NoError(t, err)
assert.Equal(t, []byte(fmt.Sprintf("sig-%d", tc.format)), sig)
assert.False(t, kr.Verify(nil, cd, seqNr, ocr3types.ReportWithInfo[llotypes.ReportInfo]{Info: llotypes.ReportInfo{ReportFormat: tc.format}}, sig))
k.(*mockKey).verify = true
for _, tc2 := range cases {
verified := kr.Verify(nil, cd, seqNr, ocr3types.ReportWithInfo[llotypes.ReportInfo]{Info: llotypes.ReportInfo{ReportFormat: tc2.format}}, sig)
if tc.format == tc2.format {
assert.True(t, verified, "expected true for %s", tc2.format)
} else {
assert.False(t, verified, "expected false for %s", tc2.format)
}
}
})`
$DIR/core/services/llo/keyring_test.go: `k.(*mockKey).verify = true`
$DIR/core/services/llo/keyring_test.go: `t.Run("MaxSignatureLength", func(t *testing.T) {
assert.Equal(t, 8+4+2+1, kr.MaxSignatureLength())
})`
$DIR/core/services/llo/keyring_test.go: `b[i] = byte(255)`
$DIR/core/services/llo/keyring_test.go: `.TestLogger(t)`
$DIR/core/services/llo/keyring_test.go: `.BytesToConfigDigest(testutils.MustRandBytes(32))`
$DIR/core/services/llo/keyring_test.go: `.MustRandBytes(32)`
$DIR/core/services/llo/keyring_test.go: `.Uint64()`
$DIR/core/services/llo/keyring_test.go: `.Run("Sign+Verify", func(t *testing.T) {
for _, tc := range cases {
t.Run(tc.format.String(), func(t *testing.T) {
k := ks[tc.format]
defer k.(*mockKey).reset(tc.format)
sig, err := kr.Sign(cd, seqNr, ocr3types.ReportWithInfo[llotypes.ReportInfo]{Info: llotypes.ReportInfo{ReportFormat: tc.format}})
require.NoError(t, err)
assert.Equal(t, []byte(fmt.Sprintf("sig-%d", tc.format)), sig)
assert.False(t, kr.Verify(nil, cd, seqNr, ocr3types.ReportWithInfo[llotypes.ReportInfo]{Info: llotypes.ReportInfo{ReportFormat: tc.format}}, sig))
k.(*mockKey).verify = true
for _, tc2 := range cases {
verified := kr.Verify(nil, cd, seqNr, ocr3types.ReportWithInfo[llotypes.ReportInfo]{Info: llotypes.ReportInfo{ReportFormat: tc2.format}}, sig)
if tc.format == tc2.format {
assert.True(t, verified, "expected true for %s", tc2.format)
} else {
assert.False(t, verified, "expected false for %s", tc2.format)
}
}
})
}
})`
$DIR/core/services/llo/keyring_test.go: `.Run(tc.format.String(), func(t *testing.T) {
k := ks[tc.format]
defer k.(*mockKey).reset(tc.format)
sig, err := kr.Sign(cd, seqNr, ocr3types.ReportWithInfo[llotypes.ReportInfo]{Info: llotypes.ReportInfo{ReportFormat: tc.format}})
require.NoError(t, err)
assert.Equal(t, []byte(fmt.Sprintf("sig-%d", tc.format)), sig)
assert.False(t, kr.Verify(nil, cd, seqNr, ocr3types.ReportWithInfo[llotypes.ReportInfo]{Info: llotypes.ReportInfo{ReportFormat: tc.format}}, sig))
k.(*mockKey).verify = true
for _, tc2 := range cases {
verified := kr.Verify(nil, cd, seqNr, ocr3types.ReportWithInfo[llotypes.ReportInfo]{Info: llotypes.ReportInfo{ReportFormat: tc2.format}}, sig)
if tc.format == tc2.format {
assert.True(t, verified, "expected true for %s", tc2.format)
} else {
assert.False(t, verified, "expected false for %s", tc2.format)
}
}
})`
$DIR/core/services/llo/keyring_test.go: `.format.String()`
$DIR/core/services/llo/keyring_test.go: `.reset(tc.format)`
$DIR/core/services/llo/keyring_test.go: `.Sign(cd, seqNr, ocr3types.ReportWithInfo[llotypes.ReportInfo]{Info: llotypes.ReportInfo{ReportFormat: tc.format}})`
$DIR/core/services/llo/keyring_test.go: `.Verify(nil, cd, seqNr, ocr3types.ReportWithInfo[llotypes.ReportInfo]{Info: llotypes.ReportInfo{ReportFormat: tc2.format}}, sig)`
$DIR/core/services/llo/keyring_test.go: `.Run("MaxSignatureLength", func(t *testing.T) {
assert.Equal(t, 8+4+2+1, kr.MaxSignatureLength())
})`
$DIR/core/services/llo/offchain_config_digester_test.go: `_, err = OffchainConfigDigester{}.ConfigDigest(types.ContractConfig{
Signers: []types.OnchainPublicKey{{1, 2}},
})`
$DIR/core/services/llo/offchain_config_digester_test.go: `_, err = OffchainConfigDigester{}.ConfigDigest(types.ContractConfig{
Transmitters: []types.Account{"0x"},
})`
$DIR/core/services/llo/offchain_config_digester_test.go: `_, err = OffchainConfigDigester{}.ConfigDigest(types.ContractConfig{
Transmitters: []types.Account{"7343581f55146951b0f678dc6cfa8fd360e2f353"},
})`
$DIR/core/services/llo/offchain_config_digester_test.go: `_, err = OffchainConfigDigester{}.ConfigDigest(types.ContractConfig{
Transmitters: []types.Account{"7343581f55146951b0f678dc6cfa8fd360e2f353aabbccddeeffaaccddeeffaz"},
})`
$DIR/core/services/llo/offchain_config_digester_test.go: `_, err = OffchainConfigDigester{ChainID: big.NewInt(0)}.ConfigDigest(types.ContractConfig{
Transmitters: []types.Account{"7343581f55146951b0f678dc6cfa8fd360e2f353aabbccddeeffaaccddeeffaa"},
})`
$DIR/core/services/llo/offchain_config_digester_test.go: `.NewInt(0)`
$DIR/core/services/llo/offchain_config_digester_test.go: `.ConfigDigest(types.ContractConfig{})`
$DIR/core/services/llo/offchain_config_digester_test.go: `.NewInt(0)`
$DIR/core/services/llo/offchain_config_digester_test.go: `.ConfigDigest(types.ContractConfig{})`
$DIR/core/services/llo/offchain_config_digester_test.go: `.NewInt(1)`
$DIR/core/services/llo/offchain_config_digester_test.go: `.ConfigDigest(types.ContractConfig{})`
$DIR/core/services/llo/offchain_config_digester_test.go: `.NewInt(1)`
$DIR/core/services/llo/offchain_config_digester_test.go: `.ConfigDigest(types.ContractConfig{})`
$DIR/core/services/llo/offchain_config_digester_test.go: `.ConfigDigest(types.ContractConfig{
Signers: []types.OnchainPublicKey{{1, 2}},
})`
$DIR/core/services/llo/offchain_config_digester_test.go: `.ConfigDigest(types.ContractConfig{
Transmitters: []types.Account{"0x"},
})`
$DIR/core/services/llo/offchain_config_digester_test.go: `.ConfigDigest(types.ContractConfig{
Transmitters: []types.Account{"7343581f55146951b0f678dc6cfa8fd360e2f353"},
})`
$DIR/core/services/llo/offchain_config_digester_test.go: `.ConfigDigest(types.ContractConfig{
Transmitters: []types.Account{"7343581f55146951b0f678dc6cfa8fd360e2f353aabbccddeeffaaccddeeffaz"},
})`
$DIR/core/services/llo/offchain_config_digester_test.go: `.NewInt(0)`
$DIR/core/services/llo/offchain_config_digester_test.go: `.ConfigDigest(types.ContractConfig{
Transmitters: []types.Account{"7343581f55146951b0f678dc6cfa8fd360e2f353aabbccddeeffaaccddeeffaa"},
})`
$DIR/core/services/llo/onchain_channel_definition_cache_test.go: `.ChannelDefinitions(map[llotypes.ChannelID]llotypes.ChannelDefinition{
1: {
ReportFormat: llotypes.ReportFormat(43),
ChainSelector: 42,
StreamIDs: []llotypes.StreamID{1, 2, 3},
},
})`
$DIR/core/services/llo/onchain_channel_definition_cache_test.go: `.ReportFormat(43)`
$DIR/core/services/llo/orm_test.go: `t.Run("returns zero values if nothing in database", func(t *testing.T) {
cd, blockNum, err := orm.LoadChannelDefinitions(ctx, addr1)
require.NoError(t, err)
assert.Zero(t, cd)
assert.Zero(t, blockNum)
})`
$DIR/core/services/llo/orm_test.go: `t.Run("loads channel definitions from database", func(t *testing.T) {
expectedBlockNum := rand.Int63()
expectedBlockNum2 := rand.Int63()
cid1 := rand.Uint32()
cid2 := rand.Uint32()
channelDefsJSON := fmt.Sprintf(`
{
"%d": {
"reportFormat": 42,
"chainSelector": 142,
"streamIds": [1, 2]
},
"%d": {
"reportFormat": 42,
"chainSelector": 142,
"streamIds": [1, 3]
}
}
`, cid1, cid2)
pgtest.MustExec(t, db, `
INSERT INTO channel_definitions(addr, evm_chain_id, definitions, block_num, updated_at)
VALUES ( $1, $2, $3, $4, NOW())
`, addr1, testutils.FixtureChainID.String(), channelDefsJSON, expectedBlockNum)
pgtest.MustExec(t, db, `
INSERT INTO channel_definitions(addr, evm_chain_id, definitions, block_num, updated_at)
VALUES ( $1, $2, $3, $4, NOW())
`, addr2, testutils.FixtureChainID.String(), `{}`, expectedBlockNum2)
{
// alternative chain ID; we expect these ones to be ignored
pgtest.MustExec(t, db, `
INSERT INTO channel_definitions(addr, evm_chain_id, definitions, block_num, updated_at)
VALUES ( $1, $2, $3, $4, NOW())
`, addr1, testutils.SimulatedChainID.String(), channelDefsJSON, expectedBlockNum)
pgtest.MustExec(t, db, `
INSERT INTO channel_definitions(addr, evm_chain_id, definitions, block_num, updated_at)
VALUES ( $1, $2, $3, $4, NOW())
`, addr3, testutils.SimulatedChainID.String(), channelDefsJSON, expectedBlockNum)
}
cd, blockNum, err := orm.LoadChannelDefinitions(ctx, addr1)
require.NoError(t, err)
assert.Equal(t, llotypes.ChannelDefinitions{
cid1: llotypes.ChannelDefinition{
ReportFormat: 42,
ChainSelector: 142,
StreamIDs: []llotypes.StreamID{1, 2},
},
cid2: llotypes.ChannelDefinition{
ReportFormat: 42,
ChainSelector: 142,
StreamIDs: []llotypes.StreamID{1, 3},
},
}, cd)
assert.Equal(t, expectedBlockNum, blockNum)
cd, blockNum, err = orm.LoadChannelDefinitions(ctx, addr2)
require.NoError(t, err)
assert.Equal(t, llotypes.ChannelDefinitions{}, cd)
assert.Equal(t, expectedBlockNum2, blockNum)
})`
$DIR/core/services/llo/orm_test.go: `pgtest.MustExec(t, db, `
INSERT INTO channel_definitions(addr, evm_chain_id, definitions, block_num, updated_at)
VALUES ( $1, $2, $3, $4, NOW())
`, addr1, testutils.FixtureChainID.String(), channelDefsJSON, expectedBlockNum)`
$DIR/core/services/llo/orm_test.go: `pgtest.MustExec(t, db, `
INSERT INTO channel_definitions(addr, evm_chain_id, definitions, block_num, updated_at)
VALUES ( $1, $2, $3, $4, NOW())
`, addr2, testutils.FixtureChainID.String(), `{}`, expectedBlockNum2)`
$DIR/core/services/llo/orm_test.go: `pgtest.MustExec(t, db, `
INSERT INTO channel_definitions(addr, evm_chain_id, definitions, block_num, updated_at)
VALUES ( $1, $2, $3, $4, NOW())
`, addr1, testutils.SimulatedChainID.String(), channelDefsJSON, expectedBlockNum)`
$DIR/core/services/llo/orm_test.go: `pgtest.MustExec(t, db, `
INSERT INTO channel_definitions(addr, evm_chain_id, definitions, block_num, updated_at)
VALUES ( $1, $2, $3, $4, NOW())
`, addr3, testutils.SimulatedChainID.String(), channelDefsJSON, expectedBlockNum)`
$DIR/core/services/llo/orm_test.go: `cd, blockNum, err = orm.LoadChannelDefinitions(ctx, addr2)`
$DIR/core/services/llo/orm_test.go: `.NewSqlxDB(t)`
$DIR/core/services/llo/orm_test.go: `.Context(t)`
$DIR/core/services/llo/orm_test.go: `.NewAddress()`
$DIR/core/services/llo/orm_test.go: `.NewAddress()`
$DIR/core/services/llo/orm_test.go: `.NewAddress()`
$DIR/core/services/llo/orm_test.go: `.Run("returns zero values if nothing in database", func(t *testing.T) {
cd, blockNum, err := orm.LoadChannelDefinitions(ctx, addr1)
require.NoError(t, err)
assert.Zero(t, cd)
assert.Zero(t, blockNum)
})`
$DIR/core/services/llo/orm_test.go: `.LoadChannelDefinitions(ctx, addr1)`
$DIR/core/services/llo/orm_test.go: `.Run("loads channel definitions from database", func(t *testing.T) {
expectedBlockNum := rand.Int63()
expectedBlockNum2 := rand.Int63()
cid1 := rand.Uint32()
cid2 := rand.Uint32()
channelDefsJSON := fmt.Sprintf(`
{
"%d": {
"reportFormat": 42,
"chainSelector": 142,
"streamIds": [1, 2]
},
"%d": {
"reportFormat": 42,
"chainSelector": 142,
"streamIds": [1, 3]
}
}
`, cid1, cid2)
pgtest.MustExec(t, db, `
INSERT INTO channel_definitions(addr, evm_chain_id, definitions, block_num, updated_at)
VALUES ( $1, $2, $3, $4, NOW())
`, addr1, testutils.FixtureChainID.String(), channelDefsJSON, expectedBlockNum)
pgtest.MustExec(t, db, `
INSERT INTO channel_definitions(addr, evm_chain_id, definitions, block_num, updated_at)
VALUES ( $1, $2, $3, $4, NOW())
`, addr2, testutils.FixtureChainID.String(), `{}`, expectedBlockNum2)
{
// alternative chain ID; we expect these ones to be ignored
pgtest.MustExec(t, db, `
INSERT INTO channel_definitions(addr, evm_chain_id, definitions, block_num, updated_at)
VALUES ( $1, $2, $3, $4, NOW())
`, addr1, testutils.SimulatedChainID.String(), channelDefsJSON, expectedBlockNum)
pgtest.MustExec(t, db, `
INSERT INTO channel_definitions(addr, evm_chain_id, definitions, block_num, updated_at)
VALUES ( $1, $2, $3, $4, NOW())
`, addr3, testutils.SimulatedChainID.String(), channelDefsJSON, expectedBlockNum)
}
cd, blockNum, err := orm.LoadChannelDefinitions(ctx, addr1)
require.NoError(t, err)
assert.Equal(t, llotypes.ChannelDefinitions{
cid1: llotypes.ChannelDefinition{
ReportFormat: 42,
ChainSelector: 142,
StreamIDs: []llotypes.StreamID{1, 2},
},
cid2: llotypes.ChannelDefinition{
ReportFormat: 42,
ChainSelector: 142,
StreamIDs: []llotypes.StreamID{1, 3},
},
}, cd)
assert.Equal(t, expectedBlockNum, blockNum)
cd, blockNum, err = orm.LoadChannelDefinitions(ctx, addr2)
require.NoError(t, err)
assert.Equal(t, llotypes.ChannelDefinitions{}, cd)
assert.Equal(t, expectedBlockNum2, blockNum)
})`
$DIR/core/services/llo/orm_test.go: `.Int63()`
$DIR/core/services/llo/orm_test.go: `.Int63()`
$DIR/core/services/llo/orm_test.go: `.Uint32()`
$DIR/core/services/llo/orm_test.go: `.Uint32()`
$DIR/core/services/llo/orm_test.go: `.Sprintf(`
{
"%d": {
"reportFormat": 42,
"chainSelector": 142,
"streamIds": [1, 2]
},
"%d": {
"reportFormat": 42,
"chainSelector": 142,
"streamIds": [1, 3]
}
}
`, cid1, cid2)`
$DIR/core/services/llo/orm_test.go: `.MustExec(t, db, `
INSERT INTO channel_definitions(addr, evm_chain_id, definitions, block_num, updated_at)
VALUES ( $1, $2, $3, $4, NOW())
`, addr1, testutils.FixtureChainID.String(), channelDefsJSON, expectedBlockNum)`
$DIR/core/services/llo/orm_test.go: `.FixtureChainID.String()`
$DIR/core/services/llo/orm_test.go: `.MustExec(t, db, `
INSERT INTO channel_definitions(addr, evm_chain_id, definitions, block_num, updated_at)
VALUES ( $1, $2, $3, $4, NOW())
`, addr2, testutils.FixtureChainID.String(), `{}`, expectedBlockNum2)`
$DIR/core/services/llo/orm_test.go: `.FixtureChainID.String()`
$DIR/core/services/llo/orm_test.go: `.MustExec(t, db, `
INSERT INTO channel_definitions(addr, evm_chain_id, definitions, block_num, updated_at)
VALUES ( $1, $2, $3, $4, NOW())
`, addr1, testutils.SimulatedChainID.String(), channelDefsJSON, expectedBlockNum)`
$DIR/core/services/llo/orm_test.go: `.SimulatedChainID.String()`
$DIR/core/services/llo/orm_test.go: `.MustExec(t, db, `
INSERT INTO channel_definitions(addr, evm_chain_id, definitions, block_num, updated_at)
VALUES ( $1, $2, $3, $4, NOW())
`, addr3, testutils.SimulatedChainID.String(), channelDefsJSON, expectedBlockNum)`
$DIR/core/services/llo/orm_test.go: `.SimulatedChainID.String()`
$DIR/core/services/llo/orm_test.go: `.LoadChannelDefinitions(ctx, addr1)`
$DIR/core/services/llo/orm_test.go: `.LoadChannelDefinitions(ctx, addr2)`
$DIR/core/services/nurse_test.go: `nrse.AddCheck("test", func() (bool, Meta) { return true, Meta{} })`
$DIR/core/services/nurse_test.go: `wc, err = nrse.createFile(time.Now(), "testgz", false)`
$DIR/core/services/nurse_test.go: `testutils.AssertEventually(t, func() bool { return profileExists(t, nrse, cpuProfName) })`
$DIR/core/services/nurse_test.go: `testutils.AssertEventually(t, func() bool { return profileExists(t, nrse, traceProfName) })`
$DIR/core/services/nurse_test.go: `.TestLogger(t)`
$DIR/core/services/nurse_test.go: `.AddCheck("test", func() (bool, Meta) { return true, Meta{} })`
$DIR/core/services/nurse_test.go: `.createFile(time.Now(), "test", false)`
$DIR/core/services/nurse_test.go: `.Now()`
$DIR/core/services/nurse_test.go: `.Write([]byte("junk"))`
$DIR/core/services/nurse_test.go: `.createFile(time.Now(), "testgz", false)`
$DIR/core/services/nurse_test.go: `.Now()`
$DIR/core/services/nurse_test.go: `.AssertEventually(t, func() bool { return profileExists(t, nrse, cpuProfName) })`
$DIR/core/services/nurse_test.go: `.AssertEventually(t, func() bool { return profileExists(t, nrse, traceProfName) })`
$DIR/core/services/nurse_test.go: `.totalProfileBytes()`
$DIR/core/services/ocr/config_overrider_test.go: `flagsContract.On("GetFlags", mock.Anything, mock.Anything).
Run(checkFlagsAddress(t, uni.contractAddress)).
Return([]bool{false, true}, nil).Once()`
$DIR/core/services/ocr/config_overrider_test.go: `flagsContract.On("GetFlags", mock.Anything, mock.Anything).
Run(checkFlagsAddress(t, uni.contractAddress)).
Return([]bool{true, true}, nil)`
$DIR/core/services/ocr/config_overrider_test.go: `servicetest.Run(t, uni.overrider)`
$DIR/core/services/ocr/config_overrider_test.go: `t.Run("Before first tick returns nil override, later does return a specific override when hibernating", func(t *testing.T) {
flagsContract := mocks.NewFlags(t)
ticker := NewFakeTicker()
uni := newConfigOverriderUni(t, ticker, flagsContract)
// not hibernating, because one of the flags is lowered
flagsContract.On("GetFlags", mock.Anything, mock.Anything).
Run(checkFlagsAddress(t, uni.contractAddress)).
Return([]bool{false, true}, nil).Once()
// hibernating
flagsContract.On("GetFlags", mock.Anything, mock.Anything).
Run(checkFlagsAddress(t, uni.contractAddress)).
Return([]bool{true, true}, nil)
servicetest.Run(t, uni.overrider)
// not hibernating initially
require.Nil(t, uni.overrider.ConfigOverride())
// update state by getting flags
require.NoError(t, uni.overrider.ExportedUpdateFlagsStatus())
expectedOverride := &ocrtypes.ConfigOverride{AlphaPPB: math.MaxUint64, DeltaC: uni.overrider.DeltaCFromAddress}
require.Equal(t, expectedOverride, uni.overrider.ConfigOverride())
})`
$DIR/core/services/ocr/config_overrider_test.go: `flagsContract.On("GetFlags", mock.Anything, mock.Anything).
Run(checkFlagsAddress(t, uni.contractAddress)).
Return([]bool{false, true}, nil).Once()`
$DIR/core/services/ocr/config_overrider_test.go: `flagsContract.On("GetFlags", mock.Anything, mock.Anything).
Run(checkFlagsAddress(t, uni.contractAddress)).
Return([]bool{true, true}, nil)`
$DIR/core/services/ocr/config_overrider_test.go: `servicetest.Run(t, uni.overrider)`
$DIR/core/services/ocr/config_overrider_test.go: `t.Run("Before first tick is hibernating, later exists hibernation", func(t *testing.T) {
flagsContract := mocks.NewFlags(t)
ticker := NewFakeTicker()
uni := newConfigOverriderUni(t, ticker, flagsContract)
// hibernating
flagsContract.On("GetFlags", mock.Anything, mock.Anything).
Run(checkFlagsAddress(t, uni.contractAddress)).
Return([]bool{true, true}, nil).Once()
// not hibernating
flagsContract.On("GetFlags", mock.Anything, mock.Anything).
Run(checkFlagsAddress(t, uni.contractAddress)).
Return([]bool{true, false}, nil)
servicetest.Run(t, uni.overrider)
// initially enters hibernation
expectedOverride := &ocrtypes.ConfigOverride{AlphaPPB: math.MaxUint64, DeltaC: uni.overrider.DeltaCFromAddress}
require.Equal(t, expectedOverride, uni.overrider.ConfigOverride())
// update state by getting flags
require.NoError(t, uni.overrider.ExportedUpdateFlagsStatus())
// should exit hibernation
require.Nil(t, uni.overrider.ConfigOverride())
})`
$DIR/core/services/ocr/config_overrider_test.go: `flagsContract.On("GetFlags", mock.Anything, mock.Anything).
Run(checkFlagsAddress(t, uni.contractAddress)).
Return([]bool{true, true}, nil).Once()`
$DIR/core/services/ocr/config_overrider_test.go: `flagsContract.On("GetFlags", mock.Anything, mock.Anything).
Run(checkFlagsAddress(t, uni.contractAddress)).
Return([]bool{true, false}, nil)`
$DIR/core/services/ocr/config_overrider_test.go: `servicetest.Run(t, uni.overrider)`
$DIR/core/services/ocr/config_overrider_test.go: `t.Run("Errors if flags contract is missing", func(t *testing.T) {
var testLogger = logger.TestLogger(t)
contractAddress := cltest.NewEIP55Address()
flags := &ocr.ContractFlags{FlagsInterface: nil}
_, err := ocr.NewConfigOverriderImpl(
testLogger,
deltaCConfig{},
contractAddress,
flags,
nil,
)
require.Error(t, err)
require.Contains(t, err.Error(), "Flags contract instance is missing, the contract does not exist")
})`
$DIR/core/services/ocr/config_overrider_test.go: `.NewWithT(t)`
$DIR/core/services/ocr/config_overrider_test.go: `.NewFlags(t)`
$DIR/core/services/ocr/config_overrider_test.go: `.NewPausableTicker(3 * time.Second)`
$DIR/core/services/ocr/config_overrider_test.go: `.On("GetFlags", mock.Anything, mock.Anything)`
$DIR/core/services/ocr/config_overrider_test.go: `.
Run(checkFlagsAddress(t, uni.contractAddress))`
$DIR/core/services/ocr/config_overrider_test.go: `.
Return([]bool{false, true}, nil)`
$DIR/core/services/ocr/config_overrider_test.go: `.Once()`
$DIR/core/services/ocr/config_overrider_test.go: `.On("GetFlags", mock.Anything, mock.Anything)`
$DIR/core/services/ocr/config_overrider_test.go: `.
Run(checkFlagsAddress(t, uni.contractAddress))`
$DIR/core/services/ocr/config_overrider_test.go: `.
Return([]bool{true, true}, nil)`
$DIR/core/services/ocr/config_overrider_test.go: `.Run(t, uni.overrider)`
$DIR/core/services/ocr/config_overrider_test.go: `.Eventually(func() *ocrtypes.ConfigOverride { return uni.overrider.ConfigOverride() }, 10*time.Second, 450*time.Millisecond)`
$DIR/core/services/ocr/config_overrider_test.go: `.overrider.ConfigOverride()`
$DIR/core/services/ocr/config_overrider_test.go: `.Equal(expectedOverride)`
$DIR/core/services/ocr/config_overrider_test.go: `.Run("Before first tick returns nil override, later does return a specific override when hibernating", func(t *testing.T) {
flagsContract := mocks.NewFlags(t)
ticker := NewFakeTicker()
uni := newConfigOverriderUni(t, ticker, flagsContract)
// not hibernating, because one of the flags is lowered
flagsContract.On("GetFlags", mock.Anything, mock.Anything).
Run(checkFlagsAddress(t, uni.contractAddress)).
Return([]bool{false, true}, nil).Once()
// hibernating
flagsContract.On("GetFlags", mock.Anything, mock.Anything).
Run(checkFlagsAddress(t, uni.contractAddress)).
Return([]bool{true, true}, nil)
servicetest.Run(t, uni.overrider)
// not hibernating initially
require.Nil(t, uni.overrider.ConfigOverride())
// update state by getting flags
require.NoError(t, uni.overrider.ExportedUpdateFlagsStatus())
expectedOverride := &ocrtypes.ConfigOverride{AlphaPPB: math.MaxUint64, DeltaC: uni.overrider.DeltaCFromAddress}
require.Equal(t, expectedOverride, uni.overrider.ConfigOverride())
})`
$DIR/core/services/ocr/config_overrider_test.go: `.NewFlags(t)`
$DIR/core/services/ocr/config_overrider_test.go: `.On("GetFlags", mock.Anything, mock.Anything)`
$DIR/core/services/ocr/config_overrider_test.go: `.
Run(checkFlagsAddress(t, uni.contractAddress))`
$DIR/core/services/ocr/config_overrider_test.go: `.
Return([]bool{false, true}, nil)`
$DIR/core/services/ocr/config_overrider_test.go: `.Once()`
$DIR/core/services/ocr/config_overrider_test.go: `.On("GetFlags", mock.Anything, mock.Anything)`
$DIR/core/services/ocr/config_overrider_test.go: `.
Run(checkFlagsAddress(t, uni.contractAddress))`
$DIR/core/services/ocr/config_overrider_test.go: `.
Return([]bool{true, true}, nil)`
$DIR/core/services/ocr/config_overrider_test.go: `.Run(t, uni.overrider)`
$DIR/core/services/ocr/config_overrider_test.go: `.Run("Before first tick is hibernating, later exists hibernation", func(t *testing.T) {
flagsContract := mocks.NewFlags(t)
ticker := NewFakeTicker()
uni := newConfigOverriderUni(t, ticker, flagsContract)
// hibernating
flagsContract.On("GetFlags", mock.Anything, mock.Anything).
Run(checkFlagsAddress(t, uni.contractAddress)).
Return([]bool{true, true}, nil).Once()
// not hibernating
flagsContract.On("GetFlags", mock.Anything, mock.Anything).
Run(checkFlagsAddress(t, uni.contractAddress)).
Return([]bool{true, false}, nil)
servicetest.Run(t, uni.overrider)
// initially enters hibernation
expectedOverride := &ocrtypes.ConfigOverride{AlphaPPB: math.MaxUint64, DeltaC: uni.overrider.DeltaCFromAddress}
require.Equal(t, expectedOverride, uni.overrider.ConfigOverride())
// update state by getting flags
require.NoError(t, uni.overrider.ExportedUpdateFlagsStatus())
// should exit hibernation
require.Nil(t, uni.overrider.ConfigOverride())
})`
$DIR/core/services/ocr/config_overrider_test.go: `.NewFlags(t)`
$DIR/core/services/ocr/config_overrider_test.go: `.On("GetFlags", mock.Anything, mock.Anything)`
$DIR/core/services/ocr/config_overrider_test.go: `.
Run(checkFlagsAddress(t, uni.contractAddress))`
$DIR/core/services/ocr/config_overrider_test.go: `.
Return([]bool{true, true}, nil)`
$DIR/core/services/ocr/config_overrider_test.go: `.Once()`
$DIR/core/services/ocr/config_overrider_test.go: `.On("GetFlags", mock.Anything, mock.Anything)`
$DIR/core/services/ocr/config_overrider_test.go: `.
Run(checkFlagsAddress(t, uni.contractAddress))`
$DIR/core/services/ocr/config_overrider_test.go: `.
Return([]bool{true, false}, nil)`
$DIR/core/services/ocr/config_overrider_test.go: `.Run(t, uni.overrider)`
$DIR/core/services/ocr/config_overrider_test.go: `.Run("Errors if flags contract is missing", func(t *testing.T) {
var testLogger = logger.TestLogger(t)
contractAddress := cltest.NewEIP55Address()
flags := &ocr.ContractFlags{FlagsInterface: nil}
_, err := ocr.NewConfigOverriderImpl(
testLogger,
deltaCConfig{},
contractAddress,
flags,
nil,
)
require.Error(t, err)
require.Contains(t, err.Error(), "Flags contract instance is missing, the contract does not exist")
})`
$DIR/core/services/ocr/config_overrider_test.go: `.TestLogger(t)`
$DIR/core/services/ocr/config_overrider_test.go: `.NewEIP55Address()`
$DIR/core/services/ocr/config_overrider_test.go: `.NewConfigOverriderImpl(
testLogger,
deltaCConfig{},
contractAddress,
flags,
nil,
)`
$DIR/core/services/ocr/config_overrider_test.go: `.TestLogger(t)`
$DIR/core/services/ocr/config_overrider_test.go: `.NewFlags(t)`
$DIR/core/services/ocr/config_overrider_test.go: `.NewEIP55Address(common.BigToAddress(big.NewInt(10000)).Hex())`
$DIR/core/services/ocr/config_overrider_test.go: `.BigToAddress(big.NewInt(10000))`
$DIR/core/services/ocr/config_overrider_test.go: `.NewInt(10000)`
$DIR/core/services/ocr/config_overrider_test.go: `.Hex()`
$DIR/core/services/ocr/config_overrider_test.go: `.NewEIP55Address(common.BigToAddress(big.NewInt(1234567890)).Hex())`
$DIR/core/services/ocr/config_overrider_test.go: `.BigToAddress(big.NewInt(1234567890))`
$DIR/core/services/ocr/config_overrider_test.go: `.NewInt(1234567890)`
$DIR/core/services/ocr/config_overrider_test.go: `.Hex()`
$DIR/core/services/ocr/config_overrider_test.go: `.NewConfigOverriderImpl(testLogger, deltaCConfig{}, address1, flags, nil)`
$DIR/core/services/ocr/config_overrider_test.go: `.NewConfigOverriderImpl(testLogger, deltaCConfig{}, address1, flags, nil)`
$DIR/core/services/ocr/config_overrider_test.go: `.NewConfigOverriderImpl(testLogger, deltaCConfig{}, address2, flags, nil)`
$DIR/core/services/ocr/contract_tracker_test.go: `t.Run("before first head incoming, looks up on-chain", func(t *testing.T) {
uni := newContractTrackerUni(t)
uni.ec.On("HeadByNumber", mock.AnythingOfType("*context.cancelCtx"), (*big.Int)(nil)).Return(&evmtypes.Head{Number: 42}, nil)
l, err := uni.tracker.LatestBlockHeight(testutils.Context(t))
require.NoError(t, err)
assert.Equal(t, uint64(42), l)
})`
$DIR/core/services/ocr/contract_tracker_test.go: `uni.ec.On("HeadByNumber", mock.AnythingOfType("*context.cancelCtx"), (*big.Int)(nil)).Return(&evmtypes.Head{Number: 42}, nil)`
$DIR/core/services/ocr/contract_tracker_test.go: `t.Run("Before first head incoming, on client error returns error", func(t *testing.T) {
uni := newContractTrackerUni(t)
uni.ec.On("HeadByNumber", mock.AnythingOfType("*context.cancelCtx"), (*big.Int)(nil)).Return(nil, nil).Once()
_, err := uni.tracker.LatestBlockHeight(testutils.Context(t))
assert.EqualError(t, err, "got nil head")
uni.ec.On("HeadByNumber", mock.AnythingOfType("*context.cancelCtx"), (*big.Int)(nil)).Return(nil, errors.New("bar")).Once()
_, err = uni.tracker.LatestBlockHeight(testutils.Context(t))
assert.EqualError(t, err, "bar")
})`
$DIR/core/services/ocr/contract_tracker_test.go: `uni.ec.On("HeadByNumber", mock.AnythingOfType("*context.cancelCtx"), (*big.Int)(nil)).Return(nil, nil).Once()`
$DIR/core/services/ocr/contract_tracker_test.go: `uni.ec.On("HeadByNumber", mock.AnythingOfType("*context.cancelCtx"), (*big.Int)(nil)).Return(nil, errors.New("bar")).Once()`
$DIR/core/services/ocr/contract_tracker_test.go: `_, err = uni.tracker.LatestBlockHeight(testutils.Context(t))`
$DIR/core/services/ocr/contract_tracker_test.go: `t.Run("after first head incoming, uses cached value", func(t *testing.T) {
uni := newContractTrackerUni(t)
uni.tracker.OnNewLongestChain(testutils.Context(t), &evmtypes.Head{Number: 42})
l, err := uni.tracker.LatestBlockHeight(testutils.Context(t))
require.NoError(t, err)
assert.Equal(t, uint64(42), l)
})`
$DIR/core/services/ocr/contract_tracker_test.go: `uni.tracker.OnNewLongestChain(testutils.Context(t), &evmtypes.Head{Number: 42})`
$DIR/core/services/ocr/contract_tracker_test.go: `uni.hb.On("Subscribe", uni.tracker).Return(&evmtypes.Head{Number: 42}, func() {})`
$DIR/core/services/ocr/contract_tracker_test.go: `uni.db.On("LoadLatestRoundRequested", mock.Anything).Return(offchainaggregator.OffchainAggregatorRoundRequested{}, nil)`
$DIR/core/services/ocr/contract_tracker_test.go: `uni.lb.On("Register", uni.tracker, mock.Anything).Return(func() {})`
$DIR/core/services/ocr/contract_tracker_test.go: `servicetest.Run(t, uni.tracker)`
$DIR/core/services/ocr/contract_tracker_test.go: `t.Run("does not update if contract address doesn't match", func(t *testing.T) {
uni := newContractTrackerUni(t)
logBroadcast := logmocks.NewBroadcast(t)
rawLog := cltest.LogFromFixture(t, "../../testdata/jsonrpc/round_requested_log_1_1.json")
logBroadcast.On("RawLog").Return(rawLog).Maybe()
logBroadcast.On("String").Return("").Maybe()
uni.lb.On("MarkConsumed", mock.Anything, mock.Anything, mock.Anything).Return(nil)
uni.lb.On("WasAlreadyConsumed", mock.Anything, mock.Anything).Return(false, nil)
configDigest, epoch, round, err := uni.tracker.LatestRoundRequested(testutils.Context(t), 0)
require.NoError(t, err)
require.Equal(t, ocrtypes.ConfigDigest{}, configDigest)
require.Equal(t, 0, int(round))
require.Equal(t, 0, int(epoch))
uni.tracker.HandleLog(testutils.Context(t), logBroadcast)
configDigest, epoch, round, err = uni.tracker.LatestRoundRequested(testutils.Context(t), 0)
require.NoError(t, err)
require.Equal(t, ocrtypes.ConfigDigest{}, configDigest)
require.Equal(t, 0, int(round))
require.Equal(t, 0, int(epoch))
})`
$DIR/core/services/ocr/contract_tracker_test.go: `logBroadcast.On("RawLog").Return(rawLog).Maybe()`
$DIR/core/services/ocr/contract_tracker_test.go: `logBroadcast.On("String").Return("").Maybe()`
$DIR/core/services/ocr/contract_tracker_test.go: `uni.lb.On("MarkConsumed", mock.Anything, mock.Anything, mock.Anything).Return(nil)`
$DIR/core/services/ocr/contract_tracker_test.go: `uni.lb.On("WasAlreadyConsumed", mock.Anything, mock.Anything).Return(false, nil)`
$DIR/core/services/ocr/contract_tracker_test.go: `uni.tracker.HandleLog(testutils.Context(t), logBroadcast)`
$DIR/core/services/ocr/contract_tracker_test.go: `configDigest, epoch, round, err = uni.tracker.LatestRoundRequested(testutils.Context(t), 0)`
$DIR/core/services/ocr/contract_tracker_test.go: `t.Run("does nothing if log has already been consumed", func(t *testing.T) {
uni := newContractTrackerUni(t, fixtureFilterer, fixtureContract)
logBroadcast := logmocks.NewBroadcast(t)
logBroadcast.On("String").Return("").Maybe()
uni.lb.On("WasAlreadyConsumed", mock.Anything, mock.Anything).Return(true, nil)
configDigest, epoch, round, err := uni.tracker.LatestRoundRequested(testutils.Context(t), 0)
require.NoError(t, err)
require.Equal(t, ocrtypes.ConfigDigest{}, configDigest)
require.Equal(t, 0, int(round))
require.Equal(t, 0, int(epoch))
uni.tracker.HandleLog(testutils.Context(t), logBroadcast)
configDigest, epoch, round, err = uni.tracker.LatestRoundRequested(testutils.Context(t), 0)
require.NoError(t, err)
require.Equal(t, ocrtypes.ConfigDigest{}, configDigest)
require.Equal(t, 0, int(round))
require.Equal(t, 0, int(epoch))
})`
$DIR/core/services/ocr/contract_tracker_test.go: `logBroadcast.On("String").Return("").Maybe()`
$DIR/core/services/ocr/contract_tracker_test.go: `uni.lb.On("WasAlreadyConsumed", mock.Anything, mock.Anything).Return(true, nil)`
$DIR/core/services/ocr/contract_tracker_test.go: `uni.tracker.HandleLog(testutils.Context(t), logBroadcast)`
$DIR/core/services/ocr/contract_tracker_test.go: `configDigest, epoch, round, err = uni.tracker.LatestRoundRequested(testutils.Context(t), 0)`
$DIR/core/services/ocr/contract_tracker_test.go: `t.Run("for new round requested log", func(t *testing.T) {
uni := newContractTrackerUni(t, fixtureFilterer, fixtureContract)
configDigest, epoch, round, err := uni.tracker.LatestRoundRequested(testutils.Context(t), 0)
require.NoError(t, err)
require.Equal(t, ocrtypes.ConfigDigest{}, configDigest)
require.Equal(t, 0, int(round))
require.Equal(t, 0, int(epoch))
// Any round supercedes the 0 round
rawLog := cltest.LogFromFixture(t, "../../testdata/jsonrpc/round_requested_log_1_1.json")
logBroadcast := logmocks.NewBroadcast(t)
logBroadcast.On("RawLog").Return(rawLog).Maybe()
logBroadcast.On("String").Return("").Maybe()
uni.lb.On("WasAlreadyConsumed", mock.Anything, mock.Anything).Return(false, nil)
uni.lb.On("MarkConsumed", mock.Anything, mock.Anything, mock.Anything).Return(nil)
uni.db.On("SaveLatestRoundRequested", mock.Anything, mock.MatchedBy(func(rr offchainaggregator.OffchainAggregatorRoundRequested) bool {
return rr.Epoch == 1 && rr.Round == 1
})).Return(nil)
uni.db.On("WithDataSource", mock.Anything).Return(uni.db)
uni.tracker.HandleLog(testutils.Context(t), logBroadcast)
configDigest, epoch, round, err = uni.tracker.LatestRoundRequested(testutils.Context(t), 0)
require.NoError(t, err)
assert.Equal(t, "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa", configDigest.Hex())
assert.Equal(t, 1, int(epoch))
assert.Equal(t, 1, int(round))
// Same round with higher epoch supercedes
rawLog2 := cltest.LogFromFixture(t, "../../testdata/jsonrpc/round_requested_log_1_9.json")
logBroadcast2 := logmocks.NewBroadcast(t)
logBroadcast2.On("RawLog").Return(rawLog2)
logBroadcast2.On("String").Return("").Maybe()
uni.lb.On("WasAlreadyConsumed", mock.Anything, mock.Anything).Return(false, nil)
uni.lb.On("MarkConsumed", mock.Anything, mock.Anything, mock.Anything).Return(nil)
uni.db.On("SaveLatestRoundRequested", mock.Anything, mock.MatchedBy(func(rr offchainaggregator.OffchainAggregatorRoundRequested) bool {
return rr.Epoch == 1 && rr.Round == 9
})).Return(nil)
uni.tracker.HandleLog(testutils.Context(t), logBroadcast2)
configDigest, epoch, round, err = uni.tracker.LatestRoundRequested(testutils.Context(t), 0)
require.NoError(t, err)
assert.Equal(t, "bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb", configDigest.Hex())
assert.Equal(t, 1, int(epoch))
assert.Equal(t, 9, int(round))
// Same round with lower epoch is ignored
uni.tracker.HandleLog(testutils.Context(t), logBroadcast)
configDigest, epoch, round, err = uni.tracker.LatestRoundRequested(testutils.Context(t), 0)
require.NoError(t, err)
assert.Equal(t, "bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb", configDigest.Hex())
assert.Equal(t, 1, int(epoch))
assert.Equal(t, 9, int(round))
// Higher epoch with lower round supercedes
rawLog3 := cltest.LogFromFixture(t, "../../testdata/jsonrpc/round_requested_log_2_1.json")
logBroadcast3 := logmocks.NewBroadcast(t)
logBroadcast3.On("RawLog").Return(rawLog3).Maybe()
logBroadcast3.On("String").Return("").Maybe()
uni.lb.On("WasAlreadyConsumed", mock.Anything, mock.Anything).Return(false, nil)
uni.lb.On("MarkConsumed", mock.Anything, mock.Anything, mock.Anything).Return(nil)
uni.db.On("SaveLatestRoundRequested", mock.Anything, mock.MatchedBy(func(rr offchainaggregator.OffchainAggregatorRoundRequested) bool {
return rr.Epoch == 2 && rr.Round == 1
})).Return(nil)
uni.tracker.HandleLog(testutils.Context(t), logBroadcast3)
configDigest, epoch, round, err = uni.tracker.LatestRoundRequested(testutils.Context(t), 0)
require.NoError(t, err)
assert.Equal(t, "cccccccccccccccccccccccccccccccc", configDigest.Hex())
assert.Equal(t, 2, int(epoch))
assert.Equal(t, 1, int(round))
})`
$DIR/core/services/ocr/contract_tracker_test.go: `logBroadcast.On("RawLog").Return(rawLog).Maybe()`
$DIR/core/services/ocr/contract_tracker_test.go: `logBroadcast.On("String").Return("").Maybe()`
$DIR/core/services/ocr/contract_tracker_test.go: `uni.lb.On("WasAlreadyConsumed", mock.Anything, mock.Anything).Return(false, nil)`
$DIR/core/services/ocr/contract_tracker_test.go: `uni.lb.On("MarkConsumed", mock.Anything, mock.Anything, mock.Anything).Return(nil)`
$DIR/core/services/ocr/contract_tracker_test.go: `uni.db.On("SaveLatestRoundRequested", mock.Anything, mock.MatchedBy(func(rr offchainaggregator.OffchainAggregatorRoundRequested) bool {
return rr.Epoch == 1 && rr.Round == 1
})).Return(nil)`
$DIR/core/services/ocr/contract_tracker_test.go: `uni.db.On("WithDataSource", mock.Anything).Return(uni.db)`
$DIR/core/services/ocr/contract_tracker_test.go: `uni.tracker.HandleLog(testutils.Context(t), logBroadcast)`
$DIR/core/services/ocr/contract_tracker_test.go: `configDigest, epoch, round, err = uni.tracker.LatestRoundRequested(testutils.Context(t), 0)`
$DIR/core/services/ocr/contract_tracker_test.go: `logBroadcast2.On("RawLog").Return(rawLog2)`
$DIR/core/services/ocr/contract_tracker_test.go: `logBroadcast2.On("String").Return("").Maybe()`
$DIR/core/services/ocr/contract_tracker_test.go: `uni.lb.On("WasAlreadyConsumed", mock.Anything, mock.Anything).Return(false, nil)`
$DIR/core/services/ocr/contract_tracker_test.go: `uni.lb.On("MarkConsumed", mock.Anything, mock.Anything, mock.Anything).Return(nil)`
$DIR/core/services/ocr/contract_tracker_test.go: `uni.db.On("SaveLatestRoundRequested", mock.Anything, mock.MatchedBy(func(rr offchainaggregator.OffchainAggregatorRoundRequested) bool {
return rr.Epoch == 1 && rr.Round == 9
})).Return(nil)`
$DIR/core/services/ocr/contract_tracker_test.go: `uni.tracker.HandleLog(testutils.Context(t), logBroadcast2)`
$DIR/core/services/ocr/contract_tracker_test.go: `configDigest, epoch, round, err = uni.tracker.LatestRoundRequested(testutils.Context(t), 0)`
$DIR/core/services/ocr/contract_tracker_test.go: `uni.tracker.HandleLog(testutils.Context(t), logBroadcast)`
$DIR/core/services/ocr/contract_tracker_test.go: `configDigest, epoch, round, err = uni.tracker.LatestRoundRequested(testutils.Context(t), 0)`
$DIR/core/services/ocr/contract_tracker_test.go: `logBroadcast3.On("RawLog").Return(rawLog3).Maybe()`
$DIR/core/services/ocr/contract_tracker_test.go: `logBroadcast3.On("String").Return("").Maybe()`
$DIR/core/services/ocr/contract_tracker_test.go: `uni.lb.On("WasAlreadyConsumed", mock.Anything, mock.Anything).Return(false, nil)`
$DIR/core/services/ocr/contract_tracker_test.go: `uni.lb.On("MarkConsumed", mock.Anything, mock.Anything, mock.Anything).Return(nil)`
$DIR/core/services/ocr/contract_tracker_test.go: `uni.db.On("SaveLatestRoundRequested", mock.Anything, mock.MatchedBy(func(rr offchainaggregator.OffchainAggregatorRoundRequested) bool {
return rr.Epoch == 2 && rr.Round == 1
})).Return(nil)`
$DIR/core/services/ocr/contract_tracker_test.go: `uni.tracker.HandleLog(testutils.Context(t), logBroadcast3)`
$DIR/core/services/ocr/contract_tracker_test.go: `configDigest, epoch, round, err = uni.tracker.LatestRoundRequested(testutils.Context(t), 0)`
$DIR/core/services/ocr/contract_tracker_test.go: `t.Run("does not mark consumed or update state if latest round fails to save", func(t *testing.T) {
uni := newContractTrackerUni(t, fixtureFilterer, fixtureContract)
rawLog := cltest.LogFromFixture(t, "../../testdata/jsonrpc/round_requested_log_1_1.json")
logBroadcast := logmocks.NewBroadcast(t)
logBroadcast.On("RawLog").Return(rawLog)
logBroadcast.On("String").Return("").Maybe()
uni.lb.On("WasAlreadyConsumed", mock.Anything, mock.Anything).Return(false, nil)
uni.db.On("SaveLatestRoundRequested", mock.Anything, mock.Anything).Return(errors.New("something exploded"))
uni.db.On("WithDataSource", mock.Anything).Return(uni.db)
uni.tracker.HandleLog(testutils.Context(t), logBroadcast)
configDigest, epoch, round, err := uni.tracker.LatestRoundRequested(testutils.Context(t), 0)
require.NoError(t, err)
require.Equal(t, ocrtypes.ConfigDigest{}, configDigest)
require.Equal(t, 0, int(round))
require.Equal(t, 0, int(epoch))
})`
$DIR/core/services/ocr/contract_tracker_test.go: `logBroadcast.On("RawLog").Return(rawLog)`
$DIR/core/services/ocr/contract_tracker_test.go: `logBroadcast.On("String").Return("").Maybe()`
$DIR/core/services/ocr/contract_tracker_test.go: `uni.lb.On("WasAlreadyConsumed", mock.Anything, mock.Anything).Return(false, nil)`
$DIR/core/services/ocr/contract_tracker_test.go: `uni.db.On("SaveLatestRoundRequested", mock.Anything, mock.Anything).Return(errors.New("something exploded"))`
$DIR/core/services/ocr/contract_tracker_test.go: `uni.db.On("WithDataSource", mock.Anything).Return(uni.db)`
$DIR/core/services/ocr/contract_tracker_test.go: `uni.tracker.HandleLog(testutils.Context(t), logBroadcast)`
$DIR/core/services/ocr/contract_tracker_test.go: `uni.lb.On("Register", uni.tracker, mock.Anything).Return(func() { eventuallyCloseLogBroadcaster.ItHappened() })`
$DIR/core/services/ocr/contract_tracker_test.go: `eventuallyCloseLogBroadcaster.ItHappened()`
$DIR/core/services/ocr/contract_tracker_test.go: `uni.lb.On("IsConnected").Return(true).Maybe()`
$DIR/core/services/ocr/contract_tracker_test.go: `uni.hb.On("Subscribe", uni.tracker).Return((*evmtypes.Head)(nil), func() { eventuallyCloseHeadBroadcaster.ItHappened() })`
$DIR/core/services/ocr/contract_tracker_test.go: `eventuallyCloseHeadBroadcaster.ItHappened()`
$DIR/core/services/ocr/contract_tracker_test.go: `uni.db.On("LoadLatestRoundRequested", mock.Anything).Return(rr, nil)`
$DIR/core/services/ocr/contract_tracker_test.go: `eventuallyCloseHeadBroadcaster.AssertHappened(t, true)`
$DIR/core/services/ocr/contract_tracker_test.go: `eventuallyCloseLogBroadcaster.AssertHappened(t, true)`
$DIR/core/services/ocr/contract_tracker_test.go: `t.Run(test.name, func(t *testing.T) {
res := ocr.IsLaterThan(test.incoming, test.existing)
assert.Equal(t, test.expected, res)
})`
$DIR/core/services/ocr/contract_tracker_test.go: `.Run("before first head incoming, looks up on-chain", func(t *testing.T) {
uni := newContractTrackerUni(t)
uni.ec.On("HeadByNumber", mock.AnythingOfType("*context.cancelCtx"), (*big.Int)(nil)).Return(&evmtypes.Head{Number: 42}, nil)
l, err := uni.tracker.LatestBlockHeight(testutils.Context(t))
require.NoError(t, err)
assert.Equal(t, uint64(42), l)
})`
$DIR/core/services/ocr/contract_tracker_test.go: `.ec.On("HeadByNumber", mock.AnythingOfType("*context.cancelCtx"), (*big.Int)(nil))`
$DIR/core/services/ocr/contract_tracker_test.go: `.AnythingOfType("*context.cancelCtx")`
$DIR/core/services/ocr/contract_tracker_test.go: `.Return(&evmtypes.Head{Number: 42}, nil)`
$DIR/core/services/ocr/contract_tracker_test.go: `.tracker.LatestBlockHeight(testutils.Context(t))`
$DIR/core/services/ocr/contract_tracker_test.go: `.Context(t)`
$DIR/core/services/ocr/contract_tracker_test.go: `.Run("Before first head incoming, on client error returns error", func(t *testing.T) {
uni := newContractTrackerUni(t)
uni.ec.On("HeadByNumber", mock.AnythingOfType("*context.cancelCtx"), (*big.Int)(nil)).Return(nil, nil).Once()
_, err := uni.tracker.LatestBlockHeight(testutils.Context(t))
assert.EqualError(t, err, "got nil head")
uni.ec.On("HeadByNumber", mock.AnythingOfType("*context.cancelCtx"), (*big.Int)(nil)).Return(nil, errors.New("bar")).Once()
_, err = uni.tracker.LatestBlockHeight(testutils.Context(t))
assert.EqualError(t, err, "bar")
})`
$DIR/core/services/ocr/contract_tracker_test.go: `.ec.On("HeadByNumber", mock.AnythingOfType("*context.cancelCtx"), (*big.Int)(nil))`
$DIR/core/services/ocr/contract_tracker_test.go: `.AnythingOfType("*context.cancelCtx")`
$DIR/core/services/ocr/contract_tracker_test.go: `.Return(nil, nil)`
$DIR/core/services/ocr/contract_tracker_test.go: `.Once()`
$DIR/core/services/ocr/contract_tracker_test.go: `.tracker.LatestBlockHeight(testutils.Context(t))`
$DIR/core/services/ocr/contract_tracker_test.go: `.Context(t)`
$DIR/core/services/ocr/contract_tracker_test.go: `.ec.On("HeadByNumber", mock.AnythingOfType("*context.cancelCtx"), (*big.Int)(nil))`
$DIR/core/services/ocr/contract_tracker_test.go: `.AnythingOfType("*context.cancelCtx")`
$DIR/core/services/ocr/contract_tracker_test.go: `.Return(nil, errors.New("bar"))`
$DIR/core/services/ocr/contract_tracker_test.go: `.New("bar")`
$DIR/core/services/ocr/contract_tracker_test.go: `.Once()`
$DIR/core/services/ocr/contract_tracker_test.go: `.tracker.LatestBlockHeight(testutils.Context(t))`
$DIR/core/services/ocr/contract_tracker_test.go: `.Context(t)`
$DIR/core/services/ocr/contract_tracker_test.go: `.Run("after first head incoming, uses cached value", func(t *testing.T) {
uni := newContractTrackerUni(t)
uni.tracker.OnNewLongestChain(testutils.Context(t), &evmtypes.Head{Number: 42})
l, err := uni.tracker.LatestBlockHeight(testutils.Context(t))
require.NoError(t, err)
assert.Equal(t, uint64(42), l)
})`
$DIR/core/services/ocr/contract_tracker_test.go: `.tracker.OnNewLongestChain(testutils.Context(t), &evmtypes.Head{Number: 42})`
$DIR/core/services/ocr/contract_tracker_test.go: `.Context(t)`
$DIR/core/services/ocr/contract_tracker_test.go: `.tracker.LatestBlockHeight(testutils.Context(t))`
$DIR/core/services/ocr/contract_tracker_test.go: `.Context(t)`
$DIR/core/services/ocr/contract_tracker_test.go: `.hb.On("Subscribe", uni.tracker)`
$DIR/core/services/ocr/contract_tracker_test.go: `.Return(&evmtypes.Head{Number: 42}, func() {})`
$DIR/core/services/ocr/contract_tracker_test.go: `.db.On("LoadLatestRoundRequested", mock.Anything)`
$DIR/core/services/ocr/contract_tracker_test.go: `.Return(offchainaggregator.OffchainAggregatorRoundRequested{}, nil)`
$DIR/core/services/ocr/contract_tracker_test.go: `.lb.On("Register", uni.tracker, mock.Anything)`
$DIR/core/services/ocr/contract_tracker_test.go: `.Return(func() {})`
$DIR/core/services/ocr/contract_tracker_test.go: `.Run(t, uni.tracker)`
$DIR/core/services/ocr/contract_tracker_test.go: `.tracker.LatestBlockHeight(testutils.Context(t))`
$DIR/core/services/ocr/contract_tracker_test.go: `.Context(t)`
$DIR/core/services/ocr/contract_tracker_test.go: `.HexToAddress("0x03bd0d5d39629423979f8a0e53dbce78c1791ebf")`
$DIR/core/services/ocr/contract_tracker_test.go: `.Run("does not update if contract address doesn't match", func(t *testing.T) {
uni := newContractTrackerUni(t)
logBroadcast := logmocks.NewBroadcast(t)
rawLog := cltest.LogFromFixture(t, "../../testdata/jsonrpc/round_requested_log_1_1.json")
logBroadcast.On("RawLog").Return(rawLog).Maybe()
logBroadcast.On("String").Return("").Maybe()
uni.lb.On("MarkConsumed", mock.Anything, mock.Anything, mock.Anything).Return(nil)
uni.lb.On("WasAlreadyConsumed", mock.Anything, mock.Anything).Return(false, nil)
configDigest, epoch, round, err := uni.tracker.LatestRoundRequested(testutils.Context(t), 0)
require.NoError(t, err)
require.Equal(t, ocrtypes.ConfigDigest{}, configDigest)
require.Equal(t, 0, int(round))
require.Equal(t, 0, int(epoch))
uni.tracker.HandleLog(testutils.Context(t), logBroadcast)
configDigest, epoch, round, err = uni.tracker.LatestRoundRequested(testutils.Context(t), 0)
require.NoError(t, err)
require.Equal(t, ocrtypes.ConfigDigest{}, configDigest)
require.Equal(t, 0, int(round))
require.Equal(t, 0, int(epoch))
})`
$DIR/core/services/ocr/contract_tracker_test.go: `.NewBroadcast(t)`
$DIR/core/services/ocr/contract_tracker_test.go: `.LogFromFixture(t, "../../testdata/jsonrpc/round_requested_log_1_1.json")`
$DIR/core/services/ocr/contract_tracker_test.go: `.On("RawLog")`
$DIR/core/services/ocr/contract_tracker_test.go: `.Return(rawLog)`
$DIR/core/services/ocr/contract_tracker_test.go: `.Maybe()`
$DIR/core/services/ocr/contract_tracker_test.go: `.On("String")`
$DIR/core/services/ocr/contract_tracker_test.go: `.Return("")`
$DIR/core/services/ocr/contract_tracker_test.go: `.Maybe()`
$DIR/core/services/ocr/contract_tracker_test.go: `.lb.On("MarkConsumed", mock.Anything, mock.Anything, mock.Anything)`
$DIR/core/services/ocr/contract_tracker_test.go: `.Return(nil)`
$DIR/core/services/ocr/contract_tracker_test.go: `.lb.On("WasAlreadyConsumed", mock.Anything, mock.Anything)`
$DIR/core/services/ocr/contract_tracker_test.go: `.Return(false, nil)`
$DIR/core/services/ocr/contract_tracker_test.go: `.tracker.LatestRoundRequested(testutils.Context(t), 0)`
$DIR/core/services/ocr/contract_tracker_test.go: `.Context(t)`
$DIR/core/services/ocr/contract_tracker_test.go: `.tracker.HandleLog(testutils.Context(t), logBroadcast)`
$DIR/core/services/ocr/contract_tracker_test.go: `.Context(t)`
$DIR/core/services/ocr/contract_tracker_test.go: `.tracker.LatestRoundRequested(testutils.Context(t), 0)`
$DIR/core/services/ocr/contract_tracker_test.go: `.Context(t)`
$DIR/core/services/ocr/contract_tracker_test.go: `.Run("does nothing if log has already been consumed", func(t *testing.T) {
uni := newContractTrackerUni(t, fixtureFilterer, fixtureContract)
logBroadcast := logmocks.NewBroadcast(t)
logBroadcast.On("String").Return("").Maybe()
uni.lb.On("WasAlreadyConsumed", mock.Anything, mock.Anything).Return(true, nil)
configDigest, epoch, round, err := uni.tracker.LatestRoundRequested(testutils.Context(t), 0)
require.NoError(t, err)
require.Equal(t, ocrtypes.ConfigDigest{}, configDigest)
require.Equal(t, 0, int(round))
require.Equal(t, 0, int(epoch))
uni.tracker.HandleLog(testutils.Context(t), logBroadcast)
configDigest, epoch, round, err = uni.tracker.LatestRoundRequested(testutils.Context(t), 0)
require.NoError(t, err)
require.Equal(t, ocrtypes.ConfigDigest{}, configDigest)
require.Equal(t, 0, int(round))
require.Equal(t, 0, int(epoch))
})`
$DIR/core/services/ocr/contract_tracker_test.go: `.NewBroadcast(t)`
$DIR/core/services/ocr/contract_tracker_test.go: `.On("String")`
$DIR/core/services/ocr/contract_tracker_test.go: `.Return("")`
$DIR/core/services/ocr/contract_tracker_test.go: `.Maybe()`
$DIR/core/services/ocr/contract_tracker_test.go: `.lb.On("WasAlreadyConsumed", mock.Anything, mock.Anything)`
$DIR/core/services/ocr/contract_tracker_test.go: `.Return(true, nil)`
$DIR/core/services/ocr/contract_tracker_test.go: `.tracker.LatestRoundRequested(testutils.Context(t), 0)`
$DIR/core/services/ocr/contract_tracker_test.go: `.Context(t)`
$DIR/core/services/ocr/contract_tracker_test.go: `.tracker.HandleLog(testutils.Context(t), logBroadcast)`
$DIR/core/services/ocr/contract_tracker_test.go: `.Context(t)`
$DIR/core/services/ocr/contract_tracker_test.go: `.tracker.LatestRoundRequested(testutils.Context(t), 0)`
$DIR/core/services/ocr/contract_tracker_test.go: `.Context(t)`
$DIR/core/services/ocr/contract_tracker_test.go: `.Run("for new round requested log", func(t *testing.T) {
uni := newContractTrackerUni(t, fixtureFilterer, fixtureContract)
configDigest, epoch, round, err := uni.tracker.LatestRoundRequested(testutils.Context(t), 0)
require.NoError(t, err)
require.Equal(t, ocrtypes.ConfigDigest{}, configDigest)
require.Equal(t, 0, int(round))
require.Equal(t, 0, int(epoch))
// Any round supercedes the 0 round
rawLog := cltest.LogFromFixture(t, "../../testdata/jsonrpc/round_requested_log_1_1.json")
logBroadcast := logmocks.NewBroadcast(t)
logBroadcast.On("RawLog").Return(rawLog).Maybe()
logBroadcast.On("String").Return("").Maybe()
uni.lb.On("WasAlreadyConsumed", mock.Anything, mock.Anything).Return(false, nil)
uni.lb.On("MarkConsumed", mock.Anything, mock.Anything, mock.Anything).Return(nil)
uni.db.On("SaveLatestRoundRequested", mock.Anything, mock.MatchedBy(func(rr offchainaggregator.OffchainAggregatorRoundRequested) bool {
return rr.Epoch == 1 && rr.Round == 1
})).Return(nil)
uni.db.On("WithDataSource", mock.Anything).Return(uni.db)
uni.tracker.HandleLog(testutils.Context(t), logBroadcast)
configDigest, epoch, round, err = uni.tracker.LatestRoundRequested(testutils.Context(t), 0)
require.NoError(t, err)
assert.Equal(t, "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa", configDigest.Hex())
assert.Equal(t, 1, int(epoch))
assert.Equal(t, 1, int(round))
// Same round with higher epoch supercedes
rawLog2 := cltest.LogFromFixture(t, "../../testdata/jsonrpc/round_requested_log_1_9.json")
logBroadcast2 := logmocks.NewBroadcast(t)
logBroadcast2.On("RawLog").Return(rawLog2)
logBroadcast2.On("String").Return("").Maybe()
uni.lb.On("WasAlreadyConsumed", mock.Anything, mock.Anything).Return(false, nil)
uni.lb.On("MarkConsumed", mock.Anything, mock.Anything, mock.Anything).Return(nil)
uni.db.On("SaveLatestRoundRequested", mock.Anything, mock.MatchedBy(func(rr offchainaggregator.OffchainAggregatorRoundRequested) bool {
return rr.Epoch == 1 && rr.Round == 9
})).Return(nil)
uni.tracker.HandleLog(testutils.Context(t), logBroadcast2)
configDigest, epoch, round, err = uni.tracker.LatestRoundRequested(testutils.Context(t), 0)
require.NoError(t, err)
assert.Equal(t, "bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb", configDigest.Hex())
assert.Equal(t, 1, int(epoch))
assert.Equal(t, 9, int(round))
// Same round with lower epoch is ignored
uni.tracker.HandleLog(testutils.Context(t), logBroadcast)
configDigest, epoch, round, err = uni.tracker.LatestRoundRequested(testutils.Context(t), 0)
require.NoError(t, err)
assert.Equal(t, "bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb", configDigest.Hex())
assert.Equal(t, 1, int(epoch))
assert.Equal(t, 9, int(round))
// Higher epoch with lower round supercedes
rawLog3 := cltest.LogFromFixture(t, "../../testdata/jsonrpc/round_requested_log_2_1.json")
logBroadcast3 := logmocks.NewBroadcast(t)
logBroadcast3.On("RawLog").Return(rawLog3).Maybe()
logBroadcast3.On("String").Return("").Maybe()
uni.lb.On("WasAlreadyConsumed", mock.Anything, mock.Anything).Return(false, nil)
uni.lb.On("MarkConsumed", mock.Anything, mock.Anything, mock.Anything).Return(nil)
uni.db.On("SaveLatestRoundRequested", mock.Anything, mock.MatchedBy(func(rr offchainaggregator.OffchainAggregatorRoundRequested) bool {
return rr.Epoch == 2 && rr.Round == 1
})).Return(nil)
uni.tracker.HandleLog(testutils.Context(t), logBroadcast3)
configDigest, epoch, round, err = uni.tracker.LatestRoundRequested(testutils.Context(t), 0)
require.NoError(t, err)
assert.Equal(t, "cccccccccccccccccccccccccccccccc", configDigest.Hex())
assert.Equal(t, 2, int(epoch))
assert.Equal(t, 1, int(round))
})`
$DIR/core/services/ocr/contract_tracker_test.go: `.tracker.LatestRoundRequested(testutils.Context(t), 0)`
$DIR/core/services/ocr/contract_tracker_test.go: `.Context(t)`
$DIR/core/services/ocr/contract_tracker_test.go: `.LogFromFixture(t, "../../testdata/jsonrpc/round_requested_log_1_1.json")`
$DIR/core/services/ocr/contract_tracker_test.go: `.NewBroadcast(t)`
$DIR/core/services/ocr/contract_tracker_test.go: `.On("RawLog")`
$DIR/core/services/ocr/contract_tracker_test.go: `.Return(rawLog)`
$DIR/core/services/ocr/contract_tracker_test.go: `.Maybe()`
$DIR/core/services/ocr/contract_tracker_test.go: `.On("String")`
$DIR/core/services/ocr/contract_tracker_test.go: `.Return("")`
$DIR/core/services/ocr/contract_tracker_test.go: `.Maybe()`
$DIR/core/services/ocr/contract_tracker_test.go: `.lb.On("WasAlreadyConsumed", mock.Anything, mock.Anything)`
$DIR/core/services/ocr/contract_tracker_test.go: `.Return(false, nil)`
$DIR/core/services/ocr/contract_tracker_test.go: `.lb.On("MarkConsumed", mock.Anything, mock.Anything, mock.Anything)`
$DIR/core/services/ocr/contract_tracker_test.go: `.Return(nil)`
$DIR/core/services/ocr/contract_tracker_test.go: `.db.On("SaveLatestRoundRequested", mock.Anything, mock.MatchedBy(func(rr offchainaggregator.OffchainAggregatorRoundRequested) bool {
return rr.Epoch == 1 && rr.Round == 1
}))`
$DIR/core/services/ocr/contract_tracker_test.go: `.MatchedBy(func(rr offchainaggregator.OffchainAggregatorRoundRequested) bool {
return rr.Epoch == 1 && rr.Round == 1
})`
$DIR/core/services/ocr/contract_tracker_test.go: `.Return(nil)`
$DIR/core/services/ocr/contract_tracker_test.go: `.db.On("WithDataSource", mock.Anything)`
$DIR/core/services/ocr/contract_tracker_test.go: `.Return(uni.db)`
$DIR/core/services/ocr/contract_tracker_test.go: `.tracker.HandleLog(testutils.Context(t), logBroadcast)`
$DIR/core/services/ocr/contract_tracker_test.go: `.Context(t)`
$DIR/core/services/ocr/contract_tracker_test.go: `.tracker.LatestRoundRequested(testutils.Context(t), 0)`
$DIR/core/services/ocr/contract_tracker_test.go: `.Context(t)`
$DIR/core/services/ocr/contract_tracker_test.go: `.LogFromFixture(t, "../../testdata/jsonrpc/round_requested_log_1_9.json")`
$DIR/core/services/ocr/contract_tracker_test.go: `.NewBroadcast(t)`
$DIR/core/services/ocr/contract_tracker_test.go: `.On("RawLog")`
$DIR/core/services/ocr/contract_tracker_test.go: `.Return(rawLog2)`
$DIR/core/services/ocr/contract_tracker_test.go: `.On("String")`
$DIR/core/services/ocr/contract_tracker_test.go: `.Return("")`
$DIR/core/services/ocr/contract_tracker_test.go: `.Maybe()`
$DIR/core/services/ocr/contract_tracker_test.go: `.lb.On("WasAlreadyConsumed", mock.Anything, mock.Anything)`
$DIR/core/services/ocr/contract_tracker_test.go: `.Return(false, nil)`
$DIR/core/services/ocr/contract_tracker_test.go: `.lb.On("MarkConsumed", mock.Anything, mock.Anything, mock.Anything)`
$DIR/core/services/ocr/contract_tracker_test.go: `.Return(nil)`
$DIR/core/services/ocr/contract_tracker_test.go: `.db.On("SaveLatestRoundRequested", mock.Anything, mock.MatchedBy(func(rr offchainaggregator.OffchainAggregatorRoundRequested) bool {
return rr.Epoch == 1 && rr.Round == 9
}))`
$DIR/core/services/ocr/contract_tracker_test.go: `.MatchedBy(func(rr offchainaggregator.OffchainAggregatorRoundRequested) bool {
return rr.Epoch == 1 && rr.Round == 9
})`
$DIR/core/services/ocr/contract_tracker_test.go: `.Return(nil)`
$DIR/core/services/ocr/contract_tracker_test.go: `.tracker.HandleLog(testutils.Context(t), logBroadcast2)`
$DIR/core/services/ocr/contract_tracker_test.go: `.Context(t)`
$DIR/core/services/ocr/contract_tracker_test.go: `.tracker.LatestRoundRequested(testutils.Context(t), 0)`
$DIR/core/services/ocr/contract_tracker_test.go: `.Context(t)`
$DIR/core/services/ocr/contract_tracker_test.go: `.tracker.HandleLog(testutils.Context(t), logBroadcast)`
$DIR/core/services/ocr/contract_tracker_test.go: `.Context(t)`
$DIR/core/services/ocr/contract_tracker_test.go: `.tracker.LatestRoundRequested(testutils.Context(t), 0)`
$DIR/core/services/ocr/contract_tracker_test.go: `.Context(t)`
$DIR/core/services/ocr/contract_tracker_test.go: `.LogFromFixture(t, "../../testdata/jsonrpc/round_requested_log_2_1.json")`
$DIR/core/services/ocr/contract_tracker_test.go: `.NewBroadcast(t)`
$DIR/core/services/ocr/contract_tracker_test.go: `.On("RawLog")`
$DIR/core/services/ocr/contract_tracker_test.go: `.Return(rawLog3)`
$DIR/core/services/ocr/contract_tracker_test.go: `.Maybe()`
$DIR/core/services/ocr/contract_tracker_test.go: `.On("String")`
$DIR/core/services/ocr/contract_tracker_test.go: `.Return("")`
$DIR/core/services/ocr/contract_tracker_test.go: `.Maybe()`
$DIR/core/services/ocr/contract_tracker_test.go: `.lb.On("WasAlreadyConsumed", mock.Anything, mock.Anything)`
$DIR/core/services/ocr/contract_tracker_test.go: `.Return(false, nil)`
$DIR/core/services/ocr/contract_tracker_test.go: `.lb.On("MarkConsumed", mock.Anything, mock.Anything, mock.Anything)`
$DIR/core/services/ocr/contract_tracker_test.go: `.Return(nil)`
$DIR/core/services/ocr/contract_tracker_test.go: `.db.On("SaveLatestRoundRequested", mock.Anything, mock.MatchedBy(func(rr offchainaggregator.OffchainAggregatorRoundRequested) bool {
return rr.Epoch == 2 && rr.Round == 1
}))`
$DIR/core/services/ocr/contract_tracker_test.go: `.MatchedBy(func(rr offchainaggregator.OffchainAggregatorRoundRequested) bool {
return rr.Epoch == 2 && rr.Round == 1
})`
$DIR/core/services/ocr/contract_tracker_test.go: `.Return(nil)`
$DIR/core/services/ocr/contract_tracker_test.go: `.tracker.HandleLog(testutils.Context(t), logBroadcast3)`
$DIR/core/services/ocr/contract_tracker_test.go: `.Context(t)`
$DIR/core/services/ocr/contract_tracker_test.go: `.tracker.LatestRoundRequested(testutils.Context(t), 0)`
$DIR/core/services/ocr/contract_tracker_test.go: `.Context(t)`
$DIR/core/services/ocr/contract_tracker_test.go: `.Run("does not mark consumed or update state if latest round fails to save", func(t *testing.T) {
uni := newContractTrackerUni(t, fixtureFilterer, fixtureContract)
rawLog := cltest.LogFromFixture(t, "../../testdata/jsonrpc/round_requested_log_1_1.json")
logBroadcast := logmocks.NewBroadcast(t)
logBroadcast.On("RawLog").Return(rawLog)
logBroadcast.On("String").Return("").Maybe()
uni.lb.On("WasAlreadyConsumed", mock.Anything, mock.Anything).Return(false, nil)
uni.db.On("SaveLatestRoundRequested", mock.Anything, mock.Anything).Return(errors.New("something exploded"))
uni.db.On("WithDataSource", mock.Anything).Return(uni.db)
uni.tracker.HandleLog(testutils.Context(t), logBroadcast)
configDigest, epoch, round, err := uni.tracker.LatestRoundRequested(testutils.Context(t), 0)
require.NoError(t, err)
require.Equal(t, ocrtypes.ConfigDigest{}, configDigest)
require.Equal(t, 0, int(round))
require.Equal(t, 0, int(epoch))
})`
$DIR/core/services/ocr/contract_tracker_test.go: `.LogFromFixture(t, "../../testdata/jsonrpc/round_requested_log_1_1.json")`
$DIR/core/services/ocr/contract_tracker_test.go: `.NewBroadcast(t)`
$DIR/core/services/ocr/contract_tracker_test.go: `.On("RawLog")`
$DIR/core/services/ocr/contract_tracker_test.go: `.Return(rawLog)`
$DIR/core/services/ocr/contract_tracker_test.go: `.On("String")`
$DIR/core/services/ocr/contract_tracker_test.go: `.Return("")`
$DIR/core/services/ocr/contract_tracker_test.go: `.Maybe()`
$DIR/core/services/ocr/contract_tracker_test.go: `.lb.On("WasAlreadyConsumed", mock.Anything, mock.Anything)`
$DIR/core/services/ocr/contract_tracker_test.go: `.Return(false, nil)`
$DIR/core/services/ocr/contract_tracker_test.go: `.db.On("SaveLatestRoundRequested", mock.Anything, mock.Anything)`
$DIR/core/services/ocr/contract_tracker_test.go: `.Return(errors.New("something exploded"))`
$DIR/core/services/ocr/contract_tracker_test.go: `.New("something exploded")`
$DIR/core/services/ocr/contract_tracker_test.go: `.db.On("WithDataSource", mock.Anything)`
$DIR/core/services/ocr/contract_tracker_test.go: `.Return(uni.db)`
$DIR/core/services/ocr/contract_tracker_test.go: `.tracker.HandleLog(testutils.Context(t), logBroadcast)`
$DIR/core/services/ocr/contract_tracker_test.go: `.Context(t)`
$DIR/core/services/ocr/contract_tracker_test.go: `.tracker.LatestRoundRequested(testutils.Context(t), 0)`
$DIR/core/services/ocr/contract_tracker_test.go: `.Context(t)`
$DIR/core/services/ocr/contract_tracker_test.go: `.LogFromFixture(t, "../../testdata/jsonrpc/round_requested_log_1_1.json")`
$DIR/core/services/ocr/contract_tracker_test.go: `.NewAddress()`
$DIR/core/services/ocr/contract_tracker_test.go: `.MakeConfigDigest(t)`
$DIR/core/services/ocr/contract_tracker_test.go: `.NewAwaiter()`
$DIR/core/services/ocr/contract_tracker_test.go: `.lb.On("Register", uni.tracker, mock.Anything)`
$DIR/core/services/ocr/contract_tracker_test.go: `.Return(func() { eventuallyCloseLogBroadcaster.ItHappened() })`
$DIR/core/services/ocr/contract_tracker_test.go: `.ItHappened()`
$DIR/core/services/ocr/contract_tracker_test.go: `.lb.On("IsConnected")`
$DIR/core/services/ocr/contract_tracker_test.go: `.Return(true)`
$DIR/core/services/ocr/contract_tracker_test.go: `.Maybe()`
$DIR/core/services/ocr/contract_tracker_test.go: `.NewAwaiter()`
$DIR/core/services/ocr/contract_tracker_test.go: `.hb.On("Subscribe", uni.tracker)`
$DIR/core/services/ocr/contract_tracker_test.go: `.Return((*evmtypes.Head)(nil), func() { eventuallyCloseHeadBroadcaster.ItHappened() })`
$DIR/core/services/ocr/contract_tracker_test.go: `.ItHappened()`
$DIR/core/services/ocr/contract_tracker_test.go: `.db.On("LoadLatestRoundRequested", mock.Anything)`
$DIR/core/services/ocr/contract_tracker_test.go: `.Return(rr, nil)`
$DIR/core/services/ocr/contract_tracker_test.go: `.tracker.LatestRoundRequested(testutils.Context(t), 0)`
$DIR/core/services/ocr/contract_tracker_test.go: `.Context(t)`
$DIR/core/services/ocr/contract_tracker_test.go: `.AssertHappened(t, true)`
$DIR/core/services/ocr/contract_tracker_test.go: `.AssertHappened(t, true)`
$DIR/core/services/ocr/contract_tracker_test.go: `.Run(test.name, func(t *testing.T) {
res := ocr.IsLaterThan(test.incoming, test.existing)
assert.Equal(t, test.expected, res)
})`
$DIR/core/services/ocr/contract_tracker_test.go: `.IsLaterThan(test.incoming, test.existing)`
$DIR/core/services/ocr/contract_transmitter_test.go: `.NewInt(42)`
$DIR/core/services/ocr/contract_transmitter_test.go: `.JSON(strings.NewReader(offchainaggregator.OffchainAggregatorABI))`
$DIR/core/services/ocr/contract_transmitter_test.go: `.NewReader(offchainaggregator.OffchainAggregatorABI)`
$DIR/core/services/ocr/contract_transmitter_test.go: `.NewOCRContractTransmitter(
testutils.NewAddress(),
nil,
contractABI,
nil,
nil,
nil,
chainID,
common.Address{},
)`
$DIR/core/services/ocr/contract_transmitter_test.go: `.NewAddress()`
$DIR/core/services/ocr/contract_transmitter_test.go: `.ChainID()`
$DIR/core/services/ocr/database_test.go: `t.Run("reads and writes state", func(t *testing.T) {
t.Log("creating DB")
odb := ocr.NewTestDB(t, db, spec.ID)
state := ocrtypes.PersistentState{
Epoch: 1,
HighestSentEpoch: 2,
HighestReceivedEpoch: []uint32{3},
}
err := odb.WriteState(testutils.Context(t), configDigest, state)
require.NoError(t, err)
readState, err := odb.ReadState(testutils.Context(t), configDigest)
require.NoError(t, err)
require.Equal(t, state, *readState)
})`
$DIR/core/services/ocr/database_test.go: `t.Run("updates state", func(t *testing.T) {
odb := ocr.NewTestDB(t, db, spec.ID)
newState := ocrtypes.PersistentState{
Epoch: 2,
HighestSentEpoch: 3,
HighestReceivedEpoch: []uint32{4, 5},
}
err := odb.WriteState(testutils.Context(t), configDigest, newState)
require.NoError(t, err)
readState, err := odb.ReadState(testutils.Context(t), configDigest)
require.NoError(t, err)
require.Equal(t, newState, *readState)
})`
$DIR/core/services/ocr/database_test.go: `t.Run("does not return result for wrong spec", func(t *testing.T) {
odb := ocr.NewTestDB(t, db, spec.ID)
state := ocrtypes.PersistentState{
Epoch: 3,
HighestSentEpoch: 4,
HighestReceivedEpoch: []uint32{5, 6},
}
err := odb.WriteState(testutils.Context(t), configDigest, state)
require.NoError(t, err)
// db with different spec
odb = ocr.NewTestDB(t, db, -1)
readState, err := odb.ReadState(testutils.Context(t), configDigest)
require.NoError(t, err)
require.Nil(t, readState)
})`
$DIR/core/services/ocr/database_test.go: `odb = ocr.NewTestDB(t, db, -1)`
$DIR/core/services/ocr/database_test.go: `t.Run("reads and writes config", func(t *testing.T) {
db := ocr.NewTestDB(t, sqlDB, spec.ID)
err := db.WriteConfig(testutils.Context(t), config)
require.NoError(t, err)
readConfig, err := db.ReadConfig(testutils.Context(t))
require.NoError(t, err)
require.Equal(t, &config, readConfig)
})`
$DIR/core/services/ocr/database_test.go: `t.Run("updates config", func(t *testing.T) {
db := ocr.NewTestDB(t, sqlDB, spec.ID)
newConfig := ocrtypes.ContractConfig{
ConfigDigest: cltest.MakeConfigDigest(t),
Signers: []common.Address{utils.ZeroAddress, transmitterAddress, testutils.NewAddress()},
Transmitters: []common.Address{utils.ZeroAddress, transmitterAddress, testutils.NewAddress()},
Threshold: uint8(36),
EncodedConfigVersion: uint64(987655),
Encoded: []byte{2, 3, 4, 5, 6},
}
err := db.WriteConfig(testutils.Context(t), newConfig)
require.NoError(t, err)
readConfig, err := db.ReadConfig(testutils.Context(t))
require.NoError(t, err)
require.Equal(t, &newConfig, readConfig)
})`
$DIR/core/services/ocr/database_test.go: `db = ocr.NewTestDB(t, sqlDB, -1)`
$DIR/core/services/ocr/database_test.go: `t.Run("stores and retrieves pending transmissions", func(t *testing.T) {
p := ocrtypes.PendingTransmission{
Time: time.Now(),
Median: ocrtypes.Observation(big.NewInt(41)),
SerializedReport: []byte{0, 2, 3},
Rs: [][32]byte{testutils.Random32Byte(), testutils.Random32Byte()},
Ss: [][32]byte{testutils.Random32Byte(), testutils.Random32Byte()},
Vs: testutils.Random32Byte(),
}
err := odb.StorePendingTransmission(testutils.Context(t), k, p)
require.NoError(t, err)
m, err := odb.PendingTransmissionsWithConfigDigest(testutils.Context(t), configDigest)
require.NoError(t, err)
assertPendingTransmissionEqual(t, m[k], p)
// Now overwrite value for k to prove that updating works
p = ocrtypes.PendingTransmission{
Time: time.Now(),
Median: ocrtypes.Observation(big.NewInt(42)),
SerializedReport: []byte{1, 2, 3},
Rs: [][32]byte{testutils.Random32Byte()},
Ss: [][32]byte{testutils.Random32Byte()},
Vs: testutils.Random32Byte(),
}
err = odb.StorePendingTransmission(testutils.Context(t), k, p)
require.NoError(t, err)
m, err = odb.PendingTransmissionsWithConfigDigest(testutils.Context(t), configDigest)
require.NoError(t, err)
assertPendingTransmissionEqual(t, m[k], p)
p2 := ocrtypes.PendingTransmission{
Time: time.Now(),
Median: ocrtypes.Observation(big.NewInt(43)),
SerializedReport: []byte{2, 2, 3},
Rs: [][32]byte{testutils.Random32Byte()},
Ss: [][32]byte{testutils.Random32Byte()},
Vs: testutils.Random32Byte(),
}
err = odb.StorePendingTransmission(testutils.Context(t), k2, p2)
require.NoError(t, err)
kRedHerring := ocrtypes.ReportTimestamp{
ConfigDigest: ocrtypes.ConfigDigest{43},
Epoch: 1,
Round: 2,
}
pRedHerring := ocrtypes.PendingTransmission{
Time: time.Now(),
Median: ocrtypes.Observation(big.NewInt(43)),
SerializedReport: []byte{3, 2, 3},
Rs: [][32]byte{testutils.Random32Byte()},
Ss: [][32]byte{testutils.Random32Byte()},
Vs: testutils.Random32Byte(),
}
err = odb.StorePendingTransmission(testutils.Context(t), kRedHerring, pRedHerring)
require.NoError(t, err)
m, err = odb.PendingTransmissionsWithConfigDigest(testutils.Context(t), configDigest)
require.NoError(t, err)
require.Len(t, m, 2)
// HACK to get around time equality because otherwise its annoying (time storage into postgres is mildly lossy)
require.Equal(t, p.Time.Unix(), m[k].Time.Unix())
require.Equal(t, p2.Time.Unix(), m[k2].Time.Unix())
var zt time.Time
p.Time, p2.Time = zt, zt
for k, v := range m {
v.Time = zt
m[k] = v
}
require.Equal(t, p, m[k])
require.Equal(t, p2, m[k2])
// No keys for this oracleSpecID yet
m, err = odb2.PendingTransmissionsWithConfigDigest(testutils.Context(t), configDigest)
require.NoError(t, err)
require.Len(t, m, 0)
})`
$DIR/core/services/ocr/database_test.go: `assertPendingTransmissionEqual(t, m[k], p)`
$DIR/core/services/ocr/database_test.go: `p = ocrtypes.PendingTransmission{
Time: time.Now(),
Median: ocrtypes.Observation(big.NewInt(42)),
SerializedReport: []byte{1, 2, 3},
Rs: [][32]byte{testutils.Random32Byte()},
Ss: [][32]byte{testutils.Random32Byte()},
Vs: testutils.Random32Byte(),
}`
$DIR/core/services/ocr/database_test.go: `err = odb.StorePendingTransmission(testutils.Context(t), k, p)`
$DIR/core/services/ocr/database_test.go: `m, err = odb.PendingTransmissionsWithConfigDigest(testutils.Context(t), configDigest)`
$DIR/core/services/ocr/database_test.go: `assertPendingTransmissionEqual(t, m[k], p)`
$DIR/core/services/ocr/database_test.go: `err = odb.StorePendingTransmission(testutils.Context(t), k2, p2)`
$DIR/core/services/ocr/database_test.go: `err = odb.StorePendingTransmission(testutils.Context(t), kRedHerring, pRedHerring)`
$DIR/core/services/ocr/database_test.go: `m, err = odb.PendingTransmissionsWithConfigDigest(testutils.Context(t), configDigest)`
$DIR/core/services/ocr/database_test.go: `p.Time, p2.Time = zt, zt`
$DIR/core/services/ocr/database_test.go: `v.Time = zt`
$DIR/core/services/ocr/database_test.go: `m[k] = v`
$DIR/core/services/ocr/database_test.go: `m, err = odb2.PendingTransmissionsWithConfigDigest(testutils.Context(t), configDigest)`
$DIR/core/services/ocr/database_test.go: `t.Run("deletes pending transmission by key", func(t *testing.T) {
p := ocrtypes.PendingTransmission{
Time: time.Unix(100, 0),
Median: ocrtypes.Observation(big.NewInt(44)),
SerializedReport: []byte{1, 4, 3},
Rs: [][32]byte{testutils.Random32Byte()},
Ss: [][32]byte{testutils.Random32Byte()},
Vs: testutils.Random32Byte(),
}
err := odb.StorePendingTransmission(testutils.Context(t), k, p)
require.NoError(t, err)
err = odb2.StorePendingTransmission(testutils.Context(t), k, p)
require.NoError(t, err)
err = odb.DeletePendingTransmission(testutils.Context(t), k)
require.NoError(t, err)
m, err := odb.PendingTransmissionsWithConfigDigest(testutils.Context(t), configDigest)
require.NoError(t, err)
require.Len(t, m, 1)
// Did not affect other oracleSpecID
m, err = odb2.PendingTransmissionsWithConfigDigest(testutils.Context(t), configDigest)
require.NoError(t, err)
require.Len(t, m, 1)
})`
$DIR/core/services/ocr/database_test.go: `err = odb2.StorePendingTransmission(testutils.Context(t), k, p)`
$DIR/core/services/ocr/database_test.go: `err = odb.DeletePendingTransmission(testutils.Context(t), k)`
$DIR/core/services/ocr/database_test.go: `m, err = odb2.PendingTransmissionsWithConfigDigest(testutils.Context(t), configDigest)`
$DIR/core/services/ocr/database_test.go: `t.Run("allows multiple duplicate keys for different spec ID", func(t *testing.T) {
p := ocrtypes.PendingTransmission{
Time: time.Unix(100, 0),
Median: ocrtypes.Observation(big.NewInt(44)),
SerializedReport: []byte{1, 4, 3},
Rs: [][32]byte{testutils.Random32Byte()},
Ss: [][32]byte{testutils.Random32Byte()},
Vs: testutils.Random32Byte(),
}
err := odb.StorePendingTransmission(testutils.Context(t), k2, p)
require.NoError(t, err)
m, err := odb.PendingTransmissionsWithConfigDigest(testutils.Context(t), configDigest)
require.NoError(t, err)
require.Len(t, m, 1)
require.Equal(t, p.Median, m[k2].Median)
})`
$DIR/core/services/ocr/database_test.go: `err = odb.StorePendingTransmission(testutils.Context(t), k2, p2)`
$DIR/core/services/ocr/database_test.go: `p2 = ocrtypes.PendingTransmission{
Time: time.Now(),
Median: ocrtypes.Observation(big.NewInt(43)),
SerializedReport: []byte{2, 2, 3},
Rs: [][32]byte{testutils.Random32Byte()},
Ss: [][32]byte{testutils.Random32Byte()},
Vs: testutils.Random32Byte(),
}`
$DIR/core/services/ocr/database_test.go: `err = odb.StorePendingTransmission(testutils.Context(t), k2, p2)`
$DIR/core/services/ocr/database_test.go: `err = odb.DeletePendingTransmissionsOlderThan(testutils.Context(t), time.Unix(900, 0))`
$DIR/core/services/ocr/database_test.go: `odb = ocr.NewTestDB(t, sqlDB, spec2.ID)`
$DIR/core/services/ocr/database_test.go: `m, err = odb.PendingTransmissionsWithConfigDigest(testutils.Context(t), configDigest)`
$DIR/core/services/ocr/database_test.go: `pgtest.MustExec(t, db, `SET CONSTRAINTS offchainreporting_latest_roun_offchainreporting_oracle_spe_fkey DEFERRED`)`
$DIR/core/services/ocr/database_test.go: `t.Run("saves latest round requested", func(t *testing.T) {
ctx := testutils.Context(t)
err := odb.SaveLatestRoundRequested(ctx, rr)
require.NoError(t, err)
rawLog.Index = 42
// Now overwrite to prove that updating works
rr = offchainaggregator.OffchainAggregatorRoundRequested{
Requester: testutils.NewAddress(),
ConfigDigest: cltest.MakeConfigDigest(t),
Epoch: 43,
Round: 8,
Raw: rawLog,
}
err = odb.SaveLatestRoundRequested(ctx, rr)
require.NoError(t, err)
})`
$DIR/core/services/ocr/database_test.go: `rawLog.Index = 42`
$DIR/core/services/ocr/database_test.go: `rr = offchainaggregator.OffchainAggregatorRoundRequested{
Requester: testutils.NewAddress(),
ConfigDigest: cltest.MakeConfigDigest(t),
Epoch: 43,
Round: 8,
Raw: rawLog,
}`
$DIR/core/services/ocr/database_test.go: `err = odb.SaveLatestRoundRequested(ctx, rr)`
$DIR/core/services/ocr/database_test.go: `t.Run("loads latest round requested", func(t *testing.T) {
ctx := testutils.Context(t)
// There is no round for db2
lrr, err := odb2.LoadLatestRoundRequested(ctx)
require.NoError(t, err)
require.Equal(t, 0, int(lrr.Epoch))
lrr, err = odb.LoadLatestRoundRequested(ctx)
require.NoError(t, err)
assert.Equal(t, rr, lrr)
})`
$DIR/core/services/ocr/database_test.go: `lrr, err = odb.LoadLatestRoundRequested(ctx)`
$DIR/core/services/ocr/database_test.go: `.NewSqlxDB(t)`
$DIR/core/services/ocr/database_test.go: `.MakeConfigDigest(t)`
$DIR/core/services/ocr/database_test.go: `.NewKeyStore(t, db)`
$DIR/core/services/ocr/database_test.go: `.Eth()`
$DIR/core/services/ocr/database_test.go: `.MustInsertRandomKey(t, ethKeyStore)`
$DIR/core/services/ocr/database_test.go: `.MustInsertOffchainreportingOracleSpec(t, db, key.EIP55Address)`
$DIR/core/services/ocr/database_test.go: `.Run("reads and writes state", func(t *testing.T) {
t.Log("creating DB")
odb := ocr.NewTestDB(t, db, spec.ID)
state := ocrtypes.PersistentState{
Epoch: 1,
HighestSentEpoch: 2,
HighestReceivedEpoch: []uint32{3},
}
err := odb.WriteState(testutils.Context(t), configDigest, state)
require.NoError(t, err)
readState, err := odb.ReadState(testutils.Context(t), configDigest)
require.NoError(t, err)
require.Equal(t, state, *readState)
})`
$DIR/core/services/ocr/database_test.go: `.NewTestDB(t, db, spec.ID)`
$DIR/core/services/ocr/database_test.go: `.WriteState(testutils.Context(t), configDigest, state)`
$DIR/core/services/ocr/database_test.go: `.Context(t)`
$DIR/core/services/ocr/database_test.go: `.ReadState(testutils.Context(t), configDigest)`
$DIR/core/services/ocr/database_test.go: `.Context(t)`
$DIR/core/services/ocr/database_test.go: `.Run("updates state", func(t *testing.T) {
odb := ocr.NewTestDB(t, db, spec.ID)
newState := ocrtypes.PersistentState{
Epoch: 2,
HighestSentEpoch: 3,
HighestReceivedEpoch: []uint32{4, 5},
}
err := odb.WriteState(testutils.Context(t), configDigest, newState)
require.NoError(t, err)
readState, err := odb.ReadState(testutils.Context(t), configDigest)
require.NoError(t, err)
require.Equal(t, newState, *readState)
})`
$DIR/core/services/ocr/database_test.go: `.NewTestDB(t, db, spec.ID)`
$DIR/core/services/ocr/database_test.go: `.WriteState(testutils.Context(t), configDigest, newState)`
$DIR/core/services/ocr/database_test.go: `.Context(t)`
$DIR/core/services/ocr/database_test.go: `.ReadState(testutils.Context(t), configDigest)`
$DIR/core/services/ocr/database_test.go: `.Context(t)`
$DIR/core/services/ocr/database_test.go: `.Run("does not return result for wrong spec", func(t *testing.T) {
odb := ocr.NewTestDB(t, db, spec.ID)
state := ocrtypes.PersistentState{
Epoch: 3,
HighestSentEpoch: 4,
HighestReceivedEpoch: []uint32{5, 6},
}
err := odb.WriteState(testutils.Context(t), configDigest, state)
require.NoError(t, err)
// db with different spec
odb = ocr.NewTestDB(t, db, -1)
readState, err := odb.ReadState(testutils.Context(t), configDigest)
require.NoError(t, err)
require.Nil(t, readState)
})`
$DIR/core/services/ocr/database_test.go: `.NewTestDB(t, db, spec.ID)`
$DIR/core/services/ocr/database_test.go: `.WriteState(testutils.Context(t), configDigest, state)`
$DIR/core/services/ocr/database_test.go: `.Context(t)`
$DIR/core/services/ocr/database_test.go: `.NewTestDB(t, db, -1)`
$DIR/core/services/ocr/database_test.go: `.ReadState(testutils.Context(t), configDigest)`
$DIR/core/services/ocr/database_test.go: `.Context(t)`
$DIR/core/services/ocr/database_test.go: `.NewTestDB(t, db, spec.ID)`
$DIR/core/services/ocr/database_test.go: `.WriteState(testutils.Context(t), configDigest, state)`
$DIR/core/services/ocr/database_test.go: `.Context(t)`
$DIR/core/services/ocr/database_test.go: `.ReadState(testutils.Context(t), cltest.MakeConfigDigest(t))`
$DIR/core/services/ocr/database_test.go: `.Context(t)`
$DIR/core/services/ocr/database_test.go: `.MakeConfigDigest(t)`
$DIR/core/services/ocr/database_test.go: `.NewSqlxDB(t)`
$DIR/core/services/ocr/database_test.go: `.MakeConfigDigest(t)`
$DIR/core/services/ocr/database_test.go: `.NewAddress()`
$DIR/core/services/ocr/database_test.go: `.NewAddress()`
$DIR/core/services/ocr/database_test.go: `.NewAddress()`
$DIR/core/services/ocr/database_test.go: `.NewAddress()`
$DIR/core/services/ocr/database_test.go: `.NewKeyStore(t, db)`
$DIR/core/services/ocr/database_test.go: `.Eth()`
$DIR/core/services/ocr/database_test.go: `.MustInsertRandomKey(t, ethKeyStore)`
$DIR/core/services/ocr/database_test.go: `.MustInsertOffchainreportingOracleSpec(t, db, key.EIP55Address)`
$DIR/core/services/ocr/database_test.go: `.Run("reads and writes config", func(t *testing.T) {
db := ocr.NewTestDB(t, sqlDB, spec.ID)
err := db.WriteConfig(testutils.Context(t), config)
require.NoError(t, err)
readConfig, err := db.ReadConfig(testutils.Context(t))
require.NoError(t, err)
require.Equal(t, &config, readConfig)
})`
$DIR/core/services/ocr/database_test.go: `.NewTestDB(t, sqlDB, spec.ID)`
$DIR/core/services/ocr/database_test.go: `.WriteConfig(testutils.Context(t), config)`
$DIR/core/services/ocr/database_test.go: `.Context(t)`
$DIR/core/services/ocr/database_test.go: `.ReadConfig(testutils.Context(t))`
$DIR/core/services/ocr/database_test.go: `.Context(t)`
$DIR/core/services/ocr/database_test.go: `.Run("updates config", func(t *testing.T) {
db := ocr.NewTestDB(t, sqlDB, spec.ID)
newConfig := ocrtypes.ContractConfig{
ConfigDigest: cltest.MakeConfigDigest(t),
Signers: []common.Address{utils.ZeroAddress, transmitterAddress, testutils.NewAddress()},
Transmitters: []common.Address{utils.ZeroAddress, transmitterAddress, testutils.NewAddress()},
Threshold: uint8(36),
EncodedConfigVersion: uint64(987655),
Encoded: []byte{2, 3, 4, 5, 6},
}
err := db.WriteConfig(testutils.Context(t), newConfig)
require.NoError(t, err)
readConfig, err := db.ReadConfig(testutils.Context(t))
require.NoError(t, err)
require.Equal(t, &newConfig, readConfig)
})`
$DIR/core/services/ocr/database_test.go: `.NewTestDB(t, sqlDB, spec.ID)`
$DIR/core/services/ocr/database_test.go: `.MakeConfigDigest(t)`
$DIR/core/services/ocr/database_test.go: `.NewAddress()`
$DIR/core/services/ocr/database_test.go: `.NewAddress()`
$DIR/core/services/ocr/database_test.go: `.WriteConfig(testutils.Context(t), newConfig)`
$DIR/core/services/ocr/database_test.go: `.Context(t)`
$DIR/core/services/ocr/database_test.go: `.ReadConfig(testutils.Context(t))`
$DIR/core/services/ocr/database_test.go: `.Context(t)`
$DIR/core/services/ocr/database_test.go: `.NewTestDB(t, sqlDB, spec.ID)`
$DIR/core/services/ocr/database_test.go: `.WriteConfig(testutils.Context(t), config)`
$DIR/core/services/ocr/database_test.go: `.Context(t)`
$DIR/core/services/ocr/database_test.go: `.NewTestDB(t, sqlDB, -1)`
$DIR/core/services/ocr/database_test.go: `.ReadConfig(testutils.Context(t))`
$DIR/core/services/ocr/database_test.go: `.Context(t)`
$DIR/core/services/ocr/database_test.go: `.NewSqlxDB(t)`
$DIR/core/services/ocr/database_test.go: `.NewKeyStore(t, db)`
$DIR/core/services/ocr/database_test.go: `.Eth()`
$DIR/core/services/ocr/database_test.go: `.MustInsertRandomKey(t, ethKeyStore)`
$DIR/core/services/ocr/database_test.go: `.MustInsertOffchainreportingOracleSpec(t, db, key.EIP55Address)`
$DIR/core/services/ocr/database_test.go: `.MustInsertOffchainreportingOracleSpec(t, db, key.EIP55Address)`
$DIR/core/services/ocr/database_test.go: `.NewTestDB(t, sqlDB, spec.ID)`
$DIR/core/services/ocr/database_test.go: `.NewTestDB(t, sqlDB, spec2.ID)`
$DIR/core/services/ocr/database_test.go: `.MakeConfigDigest(t)`
$DIR/core/services/ocr/database_test.go: `.Run("stores and retrieves pending transmissions", func(t *testing.T) {
p := ocrtypes.PendingTransmission{
Time: time.Now(),
Median: ocrtypes.Observation(big.NewInt(41)),
SerializedReport: []byte{0, 2, 3},
Rs: [][32]byte{testutils.Random32Byte(), testutils.Random32Byte()},
Ss: [][32]byte{testutils.Random32Byte(), testutils.Random32Byte()},
Vs: testutils.Random32Byte(),
}
err := odb.StorePendingTransmission(testutils.Context(t), k, p)
require.NoError(t, err)
m, err := odb.PendingTransmissionsWithConfigDigest(testutils.Context(t), configDigest)
require.NoError(t, err)
assertPendingTransmissionEqual(t, m[k], p)
// Now overwrite value for k to prove that updating works
p = ocrtypes.PendingTransmission{
Time: time.Now(),
Median: ocrtypes.Observation(big.NewInt(42)),
SerializedReport: []byte{1, 2, 3},
Rs: [][32]byte{testutils.Random32Byte()},
Ss: [][32]byte{testutils.Random32Byte()},
Vs: testutils.Random32Byte(),
}
err = odb.StorePendingTransmission(testutils.Context(t), k, p)
require.NoError(t, err)
m, err = odb.PendingTransmissionsWithConfigDigest(testutils.Context(t), configDigest)
require.NoError(t, err)
assertPendingTransmissionEqual(t, m[k], p)
p2 := ocrtypes.PendingTransmission{
Time: time.Now(),
Median: ocrtypes.Observation(big.NewInt(43)),
SerializedReport: []byte{2, 2, 3},
Rs: [][32]byte{testutils.Random32Byte()},
Ss: [][32]byte{testutils.Random32Byte()},
Vs: testutils.Random32Byte(),
}
err = odb.StorePendingTransmission(testutils.Context(t), k2, p2)
require.NoError(t, err)
kRedHerring := ocrtypes.ReportTimestamp{
ConfigDigest: ocrtypes.ConfigDigest{43},
Epoch: 1,
Round: 2,
}
pRedHerring := ocrtypes.PendingTransmission{
Time: time.Now(),
Median: ocrtypes.Observation(big.NewInt(43)),
SerializedReport: []byte{3, 2, 3},
Rs: [][32]byte{testutils.Random32Byte()},
Ss: [][32]byte{testutils.Random32Byte()},
Vs: testutils.Random32Byte(),
}
err = odb.StorePendingTransmission(testutils.Context(t), kRedHerring, pRedHerring)
require.NoError(t, err)
m, err = odb.PendingTransmissionsWithConfigDigest(testutils.Context(t), configDigest)
require.NoError(t, err)
require.Len(t, m, 2)
// HACK to get around time equality because otherwise its annoying (time storage into postgres is mildly lossy)
require.Equal(t, p.Time.Unix(), m[k].Time.Unix())
require.Equal(t, p2.Time.Unix(), m[k2].Time.Unix())
var zt time.Time
p.Time, p2.Time = zt, zt
for k, v := range m {
v.Time = zt
m[k] = v
}
require.Equal(t, p, m[k])
require.Equal(t, p2, m[k2])
// No keys for this oracleSpecID yet
m, err = odb2.PendingTransmissionsWithConfigDigest(testutils.Context(t), configDigest)
require.NoError(t, err)
require.Len(t, m, 0)
})`
$DIR/core/services/ocr/database_test.go: `.Now()`
$DIR/core/services/ocr/database_test.go: `.Observation(big.NewInt(41))`
$DIR/core/services/ocr/database_test.go: `.NewInt(41)`
$DIR/core/services/ocr/database_test.go: `.Random32Byte()`
$DIR/core/services/ocr/database_test.go: `.Random32Byte()`
$DIR/core/services/ocr/database_test.go: `.Random32Byte()`
$DIR/core/services/ocr/database_test.go: `.Random32Byte()`
$DIR/core/services/ocr/database_test.go: `.Random32Byte()`
$DIR/core/services/ocr/database_test.go: `.StorePendingTransmission(testutils.Context(t), k, p)`
$DIR/core/services/ocr/database_test.go: `.Context(t)`
$DIR/core/services/ocr/database_test.go: `.PendingTransmissionsWithConfigDigest(testutils.Context(t), configDigest)`
$DIR/core/services/ocr/database_test.go: `.Context(t)`
$DIR/core/services/ocr/database_test.go: `.Now()`
$DIR/core/services/ocr/database_test.go: `.Observation(big.NewInt(42))`
$DIR/core/services/ocr/database_test.go: `.NewInt(42)`
$DIR/core/services/ocr/database_test.go: `.Random32Byte()`
$DIR/core/services/ocr/database_test.go: `.Random32Byte()`
$DIR/core/services/ocr/database_test.go: `.Random32Byte()`
$DIR/core/services/ocr/database_test.go: `.StorePendingTransmission(testutils.Context(t), k, p)`
$DIR/core/services/ocr/database_test.go: `.Context(t)`
$DIR/core/services/ocr/database_test.go: `.PendingTransmissionsWithConfigDigest(testutils.Context(t), configDigest)`
$DIR/core/services/ocr/database_test.go: `.Context(t)`
$DIR/core/services/ocr/database_test.go: `.Now()`
$DIR/core/services/ocr/database_test.go: `.Observation(big.NewInt(43))`
$DIR/core/services/ocr/database_test.go: `.NewInt(43)`
$DIR/core/services/ocr/database_test.go: `.Random32Byte()`
$DIR/core/services/ocr/database_test.go: `.Random32Byte()`
$DIR/core/services/ocr/database_test.go: `.Random32Byte()`
$DIR/core/services/ocr/database_test.go: `.StorePendingTransmission(testutils.Context(t), k2, p2)`
$DIR/core/services/ocr/database_test.go: `.Context(t)`
$DIR/core/services/ocr/database_test.go: `.Now()`
$DIR/core/services/ocr/database_test.go: `.Observation(big.NewInt(43))`
$DIR/core/services/ocr/database_test.go: `.NewInt(43)`
$DIR/core/services/ocr/database_test.go: `.Random32Byte()`
$DIR/core/services/ocr/database_test.go: `.Random32Byte()`
$DIR/core/services/ocr/database_test.go: `.Random32Byte()`
$DIR/core/services/ocr/database_test.go: `.StorePendingTransmission(testutils.Context(t), kRedHerring, pRedHerring)`
$DIR/core/services/ocr/database_test.go: `.Context(t)`
$DIR/core/services/ocr/database_test.go: `.PendingTransmissionsWithConfigDigest(testutils.Context(t), configDigest)`
$DIR/core/services/ocr/database_test.go: `.Context(t)`
$DIR/core/services/ocr/database_test.go: `.PendingTransmissionsWithConfigDigest(testutils.Context(t), configDigest)`
$DIR/core/services/ocr/database_test.go: `.Context(t)`
$DIR/core/services/ocr/database_test.go: `.Run("deletes pending transmission by key", func(t *testing.T) {
p := ocrtypes.PendingTransmission{
Time: time.Unix(100, 0),
Median: ocrtypes.Observation(big.NewInt(44)),
SerializedReport: []byte{1, 4, 3},
Rs: [][32]byte{testutils.Random32Byte()},
Ss: [][32]byte{testutils.Random32Byte()},
Vs: testutils.Random32Byte(),
}
err := odb.StorePendingTransmission(testutils.Context(t), k, p)
require.NoError(t, err)
err = odb2.StorePendingTransmission(testutils.Context(t), k, p)
require.NoError(t, err)
err = odb.DeletePendingTransmission(testutils.Context(t), k)
require.NoError(t, err)
m, err := odb.PendingTransmissionsWithConfigDigest(testutils.Context(t), configDigest)
require.NoError(t, err)
require.Len(t, m, 1)
// Did not affect other oracleSpecID
m, err = odb2.PendingTransmissionsWithConfigDigest(testutils.Context(t), configDigest)
require.NoError(t, err)
require.Len(t, m, 1)
})`
$DIR/core/services/ocr/database_test.go: `.Unix(100, 0)`
$DIR/core/services/ocr/database_test.go: `.Observation(big.NewInt(44))`
$DIR/core/services/ocr/database_test.go: `.NewInt(44)`
$DIR/core/services/ocr/database_test.go: `.Random32Byte()`
$DIR/core/services/ocr/database_test.go: `.Random32Byte()`
$DIR/core/services/ocr/database_test.go: `.Random32Byte()`
$DIR/core/services/ocr/database_test.go: `.StorePendingTransmission(testutils.Context(t), k, p)`
$DIR/core/services/ocr/database_test.go: `.Context(t)`
$DIR/core/services/ocr/database_test.go: `.StorePendingTransmission(testutils.Context(t), k, p)`
$DIR/core/services/ocr/database_test.go: `.Context(t)`
$DIR/core/services/ocr/database_test.go: `.DeletePendingTransmission(testutils.Context(t), k)`
$DIR/core/services/ocr/database_test.go: `.Context(t)`
$DIR/core/services/ocr/database_test.go: `.PendingTransmissionsWithConfigDigest(testutils.Context(t), configDigest)`
$DIR/core/services/ocr/database_test.go: `.Context(t)`
$DIR/core/services/ocr/database_test.go: `.PendingTransmissionsWithConfigDigest(testutils.Context(t), configDigest)`
$DIR/core/services/ocr/database_test.go: `.Context(t)`
$DIR/core/services/ocr/database_test.go: `.Run("allows multiple duplicate keys for different spec ID", func(t *testing.T) {
p := ocrtypes.PendingTransmission{
Time: time.Unix(100, 0),
Median: ocrtypes.Observation(big.NewInt(44)),
SerializedReport: []byte{1, 4, 3},
Rs: [][32]byte{testutils.Random32Byte()},
Ss: [][32]byte{testutils.Random32Byte()},
Vs: testutils.Random32Byte(),
}
err := odb.StorePendingTransmission(testutils.Context(t), k2, p)
require.NoError(t, err)
m, err := odb.PendingTransmissionsWithConfigDigest(testutils.Context(t), configDigest)
require.NoError(t, err)
require.Len(t, m, 1)
require.Equal(t, p.Median, m[k2].Median)
})`
$DIR/core/services/ocr/database_test.go: `.Unix(100, 0)`
$DIR/core/services/ocr/database_test.go: `.Observation(big.NewInt(44))`
$DIR/core/services/ocr/database_test.go: `.NewInt(44)`
$DIR/core/services/ocr/database_test.go: `.Random32Byte()`
$DIR/core/services/ocr/database_test.go: `.Random32Byte()`
$DIR/core/services/ocr/database_test.go: `.Random32Byte()`
$DIR/core/services/ocr/database_test.go: `.StorePendingTransmission(testutils.Context(t), k2, p)`
$DIR/core/services/ocr/database_test.go: `.Context(t)`
$DIR/core/services/ocr/database_test.go: `.PendingTransmissionsWithConfigDigest(testutils.Context(t), configDigest)`
$DIR/core/services/ocr/database_test.go: `.Context(t)`
$DIR/core/services/ocr/database_test.go: `.Unix(100, 0)`
$DIR/core/services/ocr/database_test.go: `.Observation(big.NewInt(41))`
$DIR/core/services/ocr/database_test.go: `.NewInt(41)`
$DIR/core/services/ocr/database_test.go: `.Random32Byte()`
$DIR/core/services/ocr/database_test.go: `.Random32Byte()`
$DIR/core/services/ocr/database_test.go: `.Random32Byte()`
$DIR/core/services/ocr/database_test.go: `.StorePendingTransmission(testutils.Context(t), k, p)`
$DIR/core/services/ocr/database_test.go: `.Context(t)`
$DIR/core/services/ocr/database_test.go: `.Unix(1000, 0)`
$DIR/core/services/ocr/database_test.go: `.Observation(big.NewInt(42))`
$DIR/core/services/ocr/database_test.go: `.NewInt(42)`
$DIR/core/services/ocr/database_test.go: `.Random32Byte()`
$DIR/core/services/ocr/database_test.go: `.Random32Byte()`
$DIR/core/services/ocr/database_test.go: `.Random32Byte()`
$DIR/core/services/ocr/database_test.go: `.StorePendingTransmission(testutils.Context(t), k2, p2)`
$DIR/core/services/ocr/database_test.go: `.Context(t)`
$DIR/core/services/ocr/database_test.go: `.Now()`
$DIR/core/services/ocr/database_test.go: `.Observation(big.NewInt(43))`
$DIR/core/services/ocr/database_test.go: `.NewInt(43)`
$DIR/core/services/ocr/database_test.go: `.Random32Byte()`
$DIR/core/services/ocr/database_test.go: `.Random32Byte()`
$DIR/core/services/ocr/database_test.go: `.Random32Byte()`
$DIR/core/services/ocr/database_test.go: `.StorePendingTransmission(testutils.Context(t), k2, p2)`
$DIR/core/services/ocr/database_test.go: `.Context(t)`
$DIR/core/services/ocr/database_test.go: `.DeletePendingTransmissionsOlderThan(testutils.Context(t), time.Unix(900, 0))`
$DIR/core/services/ocr/database_test.go: `.Context(t)`
$DIR/core/services/ocr/database_test.go: `.Unix(900, 0)`
$DIR/core/services/ocr/database_test.go: `.PendingTransmissionsWithConfigDigest(testutils.Context(t), configDigest)`
$DIR/core/services/ocr/database_test.go: `.Context(t)`
$DIR/core/services/ocr/database_test.go: `.NewTestDB(t, sqlDB, spec2.ID)`
$DIR/core/services/ocr/database_test.go: `.PendingTransmissionsWithConfigDigest(testutils.Context(t), configDigest)`
$DIR/core/services/ocr/database_test.go: `.Context(t)`
$DIR/core/services/ocr/database_test.go: `.NewSqlxDB(t)`
$DIR/core/services/ocr/database_test.go: `.MustExec(t, db, `SET CONSTRAINTS offchainreporting_latest_roun_offchainreporting_oracle_spe_fkey DEFERRED`)`
$DIR/core/services/ocr/database_test.go: `.NewTestDB(t, sqlDB, 1)`
$DIR/core/services/ocr/database_test.go: `.NewTestDB(t, sqlDB, 2)`
$DIR/core/services/ocr/database_test.go: `.LogFromFixture(t, "../../testdata/jsonrpc/round_requested_log_1_1.json")`
$DIR/core/services/ocr/database_test.go: `.NewAddress()`
$DIR/core/services/ocr/database_test.go: `.MakeConfigDigest(t)`
$DIR/core/services/ocr/database_test.go: `.Run("saves latest round requested", func(t *testing.T) {
ctx := testutils.Context(t)
err := odb.SaveLatestRoundRequested(ctx, rr)
require.NoError(t, err)
rawLog.Index = 42
// Now overwrite to prove that updating works
rr = offchainaggregator.OffchainAggregatorRoundRequested{
Requester: testutils.NewAddress(),
ConfigDigest: cltest.MakeConfigDigest(t),
Epoch: 43,
Round: 8,
Raw: rawLog,
}
err = odb.SaveLatestRoundRequested(ctx, rr)
require.NoError(t, err)
})`
$DIR/core/services/ocr/database_test.go: `.Context(t)`
$DIR/core/services/ocr/database_test.go: `.SaveLatestRoundRequested(ctx, rr)`
$DIR/core/services/ocr/database_test.go: `.NewAddress()`
$DIR/core/services/ocr/database_test.go: `.MakeConfigDigest(t)`
$DIR/core/services/ocr/database_test.go: `.SaveLatestRoundRequested(ctx, rr)`
$DIR/core/services/ocr/database_test.go: `.Run("loads latest round requested", func(t *testing.T) {
ctx := testutils.Context(t)
// There is no round for db2
lrr, err := odb2.LoadLatestRoundRequested(ctx)
require.NoError(t, err)
require.Equal(t, 0, int(lrr.Epoch))
lrr, err = odb.LoadLatestRoundRequested(ctx)
require.NoError(t, err)
assert.Equal(t, rr, lrr)
})`
$DIR/core/services/ocr/database_test.go: `.Context(t)`
$DIR/core/services/ocr/database_test.go: `.LoadLatestRoundRequested(ctx)`
$DIR/core/services/ocr/database_test.go: `.LoadLatestRoundRequested(ctx)`
$DIR/core/services/ocr/database_test.go: `.Exec(`DELETE FROM ocr_oracle_specs`)`
$DIR/core/services/ocr/flags_test.go: `t.Run(tc.name, func(t *testing.T) {
var (
flagsContract = mocks.NewFlags(t)
address = testutils.NewAddress()
)
flags := fluxmonitorv2.ContractFlags{FlagsInterface: flagsContract}
flagsContract.On("GetFlags", mock.Anything, mock.Anything).
Run(func(args mock.Arguments) {
require.Equal(t, []common.Address{
utils.ZeroAddress,
address,
}, args.Get(1).([]common.Address))
}).
Return(tc.getFlagsResult, nil)
result, err := flags.IsLowered(address)
require.NoError(t, err)
require.Equal(t, tc.expected, result)
})`
$DIR/core/services/ocr/flags_test.go: `flagsContract.On("GetFlags", mock.Anything, mock.Anything).
Run(func(args mock.Arguments) {
require.Equal(t, []common.Address{
utils.ZeroAddress,
address,
}, args.Get(1).([]common.Address))
}).
Return(tc.getFlagsResult, nil)`
$DIR/core/services/ocr/flags_test.go: `.Run(tc.name, func(t *testing.T) {
var (
flagsContract = mocks.NewFlags(t)
address = testutils.NewAddress()
)
flags := fluxmonitorv2.ContractFlags{FlagsInterface: flagsContract}
flagsContract.On("GetFlags", mock.Anything, mock.Anything).
Run(func(args mock.Arguments) {
require.Equal(t, []common.Address{
utils.ZeroAddress,
address,
}, args.Get(1).([]common.Address))
}).
Return(tc.getFlagsResult, nil)
result, err := flags.IsLowered(address)
require.NoError(t, err)
require.Equal(t, tc.expected, result)
})`
$DIR/core/services/ocr/flags_test.go: `.NewFlags(t)`
$DIR/core/services/ocr/flags_test.go: `.NewAddress()`
$DIR/core/services/ocr/flags_test.go: `.On("GetFlags", mock.Anything, mock.Anything)`
$DIR/core/services/ocr/flags_test.go: `.
Run(func(args mock.Arguments) {
require.Equal(t, []common.Address{
utils.ZeroAddress,
address,
}, args.Get(1).([]common.Address))
})`
$DIR/core/services/ocr/flags_test.go: `.
Return(tc.getFlagsResult, nil)`
$DIR/core/services/ocr/flags_test.go: `.IsLowered(address)`
$DIR/core/services/ocr/validate_test.go: `err = jsonapi.Unmarshal(b, &r)`
$DIR/core/services/ocr/validate_test.go: `c.OCR.ObservationTimeout = commonconfig.MustNewDuration(20 * time.Minute)`
$DIR/core/services/ocr/validate_test.go: `t.Run(tc.name, func(t *testing.T) {
c := configtest.NewGeneralConfig(t, func(c *chainlink.Config, s *chainlink.Secrets) {
c.Insecure.OCRDevelopmentMode = null.BoolFrom(false).Ptr()
if tc.overrides != nil {
tc.overrides(c, s)
}
})
s, err := ocr.ValidatedOracleSpecTomlCfg(c, func(id *big.Int) (evmconfig.ChainScopedConfig, error) {
return evmtest.NewChainScopedConfig(t, c), nil
}, tc.toml)
tc.assertion(t, s, err)
})`
$DIR/core/services/ocr/validate_test.go: `c.Insecure.OCRDevelopmentMode = null.BoolFrom(false).Ptr()`
$DIR/core/services/ocr/validate_test.go: `tc.overrides(c, s)`
$DIR/core/services/ocr/validate_test.go: `tc.assertion(t, s, err)`
$DIR/core/services/ocr/validate_test.go: `.Marshal(os.OCROracleSpec)`
$DIR/core/services/ocr/validate_test.go: `.Unmarshal(b, &r)`
$DIR/core/services/ocr/validate_test.go: `.MustDecode("0x2222220d5c22223b22225c0d21222222")`
$DIR/core/services/ocr/validate_test.go: `.MustNewDuration(20 * time.Minute)`
$DIR/core/services/ocr/validate_test.go: `.Run(tc.name, func(t *testing.T) {
c := configtest.NewGeneralConfig(t, func(c *chainlink.Config, s *chainlink.Secrets) {
c.Insecure.OCRDevelopmentMode = null.BoolFrom(false).Ptr()
if tc.overrides != nil {
tc.overrides(c, s)
}
})
s, err := ocr.ValidatedOracleSpecTomlCfg(c, func(id *big.Int) (evmconfig.ChainScopedConfig, error) {
return evmtest.NewChainScopedConfig(t, c), nil
}, tc.toml)
tc.assertion(t, s, err)
})`
$DIR/core/services/ocr/validate_test.go: `.NewGeneralConfig(t, func(c *chainlink.Config, s *chainlink.Secrets) {
c.Insecure.OCRDevelopmentMode = null.BoolFrom(false).Ptr()
if tc.overrides != nil {
tc.overrides(c, s)
}
})`
$DIR/core/services/ocr/validate_test.go: `.BoolFrom(false)`
$DIR/core/services/ocr/validate_test.go: `.Ptr()`
$DIR/core/services/ocr/validate_test.go: `.overrides(c, s)`
$DIR/core/services/ocr/validate_test.go: `.ValidatedOracleSpecTomlCfg(c, func(id *big.Int) (evmconfig.ChainScopedConfig, error) {
return evmtest.NewChainScopedConfig(t, c), nil
}, tc.toml)`
$DIR/core/services/ocr/validate_test.go: `.NewChainScopedConfig(t, c)`
$DIR/core/services/ocr/validate_test.go: `.assertion(t, s, err)`
$DIR/core/services/ocr2/database_test.go: `t.Run("reads and writes state", func(t *testing.T) {
db := ocr2.NewDB(sqlDB, spec.ID, defaultPluginID, lggr)
state := ocrtypes.PersistentState{
Epoch: 1,
HighestSentEpoch: 2,
HighestReceivedEpoch: []uint32{3},
}
err := db.WriteState(testutils.Context(t), configDigest, state)
require.NoError(t, err)
readState, err := db.ReadState(testutils.Context(t), configDigest)
require.NoError(t, err)
require.Equal(t, state, *readState)
})`
$DIR/core/services/ocr2/database_test.go: `t.Run("updates state", func(t *testing.T) {
db := ocr2.NewDB(sqlDB, spec.ID, defaultPluginID, lggr)
newState := ocrtypes.PersistentState{
Epoch: 2,
HighestSentEpoch: 3,
HighestReceivedEpoch: []uint32{4, 5},
}
err := db.WriteState(testutils.Context(t), configDigest, newState)
require.NoError(t, err)
readState, err := db.ReadState(testutils.Context(t), configDigest)
require.NoError(t, err)
require.Equal(t, newState, *readState)
})`
$DIR/core/services/ocr2/database_test.go: `t.Run("does not return result for wrong spec", func(t *testing.T) {
db := ocr2.NewDB(sqlDB, spec.ID, defaultPluginID, lggr)
state := ocrtypes.PersistentState{
Epoch: 3,
HighestSentEpoch: 4,
HighestReceivedEpoch: []uint32{5, 6},
}
err := db.WriteState(testutils.Context(t), configDigest, state)
require.NoError(t, err)
// odb with different spec
db = ocr2.NewDB(sqlDB, -1, defaultPluginID, lggr)
readState, err := db.ReadState(testutils.Context(t), configDigest)
require.NoError(t, err)
require.Nil(t, readState)
})`
$DIR/core/services/ocr2/database_test.go: `db = ocr2.NewDB(sqlDB, -1, defaultPluginID, lggr)`
$DIR/core/services/ocr2/database_test.go: `t.Run("reads and writes config", func(t *testing.T) {
db := ocr2.NewDB(sqlDB, spec.ID, defaultPluginID, lggr)
err := db.WriteConfig(testutils.Context(t), config)
require.NoError(t, err)
readConfig, err := db.ReadConfig(testutils.Context(t))
require.NoError(t, err)
require.Equal(t, &config, readConfig)
})`
$DIR/core/services/ocr2/database_test.go: `t.Run("updates config", func(t *testing.T) {
db := ocr2.NewDB(sqlDB, spec.ID, defaultPluginID, lggr)
newConfig := ocrtypes.ContractConfig{
ConfigDigest: testhelpers.MakeConfigDigest(t),
Signers: []ocrtypes.OnchainPublicKey{},
Transmitters: []ocrtypes.Account{},
}
err := db.WriteConfig(testutils.Context(t), newConfig)
require.NoError(t, err)
readConfig, err := db.ReadConfig(testutils.Context(t))
require.NoError(t, err)
require.Equal(t, &newConfig, readConfig)
})`
$DIR/core/services/ocr2/database_test.go: `t.Run("does not return result for wrong spec", func(t *testing.T) {
db := ocr2.NewDB(sqlDB, spec.ID, defaultPluginID, lggr)
err := db.WriteConfig(testutils.Context(t), config)
require.NoError(t, err)
db = ocr2.NewDB(sqlDB, -1, defaultPluginID, lggr)
readConfig, err := db.ReadConfig(testutils.Context(t))
require.NoError(t, err)
require.Nil(t, readConfig)
})`
$DIR/core/services/ocr2/database_test.go: `db = ocr2.NewDB(sqlDB, -1, defaultPluginID, lggr)`
$DIR/core/services/ocr2/database_test.go: `err = db2.WriteConfig(testutils.Context(t), otherConfig)`
$DIR/core/services/ocr2/database_test.go: `readConfig, err = db2.ReadConfig(testutils.Context(t))`
$DIR/core/services/ocr2/database_test.go: `t.Run("stores and retrieves pending transmissions", func(t *testing.T) {
p := ocrtypes.PendingTransmission{
Time: time.Now(),
ExtraHash: testutils.Random32Byte(),
Report: []byte{0, 2, 3},
AttributedSignatures: []ocrtypes.AttributedOnchainSignature{
{Signature: cltest.MustRandomBytes(t, 7), Signer: 248},
{Signature: cltest.MustRandomBytes(t, 17), Signer: 31},
},
}
err := db.StorePendingTransmission(testutils.Context(t), k, p)
require.NoError(t, err)
m, err := db.PendingTransmissionsWithConfigDigest(testutils.Context(t), configDigest)
require.NoError(t, err)
assertPendingTransmissionEqual(t, p, m[k])
// Now overwrite value for k to prove that updating works
p = ocrtypes.PendingTransmission{
Time: time.Now(),
ExtraHash: testutils.Random32Byte(),
Report: []byte{1, 2, 3},
AttributedSignatures: []ocrtypes.AttributedOnchainSignature{
{Signature: cltest.MustRandomBytes(t, 7), Signer: 248},
},
}
err = db.StorePendingTransmission(testutils.Context(t), k, p)
require.NoError(t, err)
m, err = db.PendingTransmissionsWithConfigDigest(testutils.Context(t), configDigest)
require.NoError(t, err)
assertPendingTransmissionEqual(t, p, m[k])
p2 := ocrtypes.PendingTransmission{
Time: time.Now(),
ExtraHash: testutils.Random32Byte(),
Report: []byte{2, 2, 3},
AttributedSignatures: []ocrtypes.AttributedOnchainSignature{
{Signature: cltest.MustRandomBytes(t, 7), Signer: 248},
},
}
err = db.StorePendingTransmission(testutils.Context(t), k2, p2)
require.NoError(t, err)
kRedHerring := ocrtypes.ReportTimestamp{
ConfigDigest: ocrtypes.ConfigDigest{43},
Epoch: 1,
Round: 2,
}
pRedHerring := ocrtypes.PendingTransmission{
Time: time.Now(),
ExtraHash: testutils.Random32Byte(),
Report: []byte{3, 2, 3},
AttributedSignatures: []ocrtypes.AttributedOnchainSignature{
{Signature: cltest.MustRandomBytes(t, 7), Signer: 248},
},
}
err = db.StorePendingTransmission(testutils.Context(t), kRedHerring, pRedHerring)
require.NoError(t, err)
m, err = db.PendingTransmissionsWithConfigDigest(testutils.Context(t), configDigest)
require.NoError(t, err)
require.Len(t, m, 2)
// HACK to get around time equality because otherwise its annoying (time storage into postgres is mildly lossy)
require.Equal(t, p.Time.Unix(), m[k].Time.Unix())
require.Equal(t, p2.Time.Unix(), m[k2].Time.Unix())
var zt time.Time
p.Time, p2.Time = zt, zt
for k, v := range m {
v.Time = zt
m[k] = v
}
require.Equal(t, p, m[k])
require.Equal(t, p2, m[k2])
// No keys for this oracleSpecID yet
m, err = db2.PendingTransmissionsWithConfigDigest(testutils.Context(t), configDigest)
require.NoError(t, err)
require.Len(t, m, 0)
})`
$DIR/core/services/ocr2/database_test.go: `assertPendingTransmissionEqual(t, p, m[k])`
$DIR/core/services/ocr2/database_test.go: `p = ocrtypes.PendingTransmission{
Time: time.Now(),
ExtraHash: testutils.Random32Byte(),
Report: []byte{1, 2, 3},
AttributedSignatures: []ocrtypes.AttributedOnchainSignature{
{Signature: cltest.MustRandomBytes(t, 7), Signer: 248},
},
}`
$DIR/core/services/ocr2/database_test.go: `err = db.StorePendingTransmission(testutils.Context(t), k, p)`
$DIR/core/services/ocr2/database_test.go: `m, err = db.PendingTransmissionsWithConfigDigest(testutils.Context(t), configDigest)`
$DIR/core/services/ocr2/database_test.go: `assertPendingTransmissionEqual(t, p, m[k])`
$DIR/core/services/ocr2/database_test.go: `err = db.StorePendingTransmission(testutils.Context(t), k2, p2)`
$DIR/core/services/ocr2/database_test.go: `err = db.StorePendingTransmission(testutils.Context(t), kRedHerring, pRedHerring)`
$DIR/core/services/ocr2/database_test.go: `m, err = db.PendingTransmissionsWithConfigDigest(testutils.Context(t), configDigest)`
$DIR/core/services/ocr2/database_test.go: `p.Time, p2.Time = zt, zt`
$DIR/core/services/ocr2/database_test.go: `v.Time = zt`
$DIR/core/services/ocr2/database_test.go: `m[k] = v`
$DIR/core/services/ocr2/database_test.go: `m, err = db2.PendingTransmissionsWithConfigDigest(testutils.Context(t), configDigest)`
$DIR/core/services/ocr2/database_test.go: `t.Run("deletes pending transmission by key", func(t *testing.T) {
p := ocrtypes.PendingTransmission{
Time: time.Unix(100, 0),
ExtraHash: testutils.Random32Byte(),
Report: []byte{1, 4, 3},
AttributedSignatures: []ocrtypes.AttributedOnchainSignature{
{Signature: cltest.MustRandomBytes(t, 7), Signer: 248},
},
}
err := db.StorePendingTransmission(testutils.Context(t), k, p)
require.NoError(t, err)
err = db2.StorePendingTransmission(testutils.Context(t), k, p)
require.NoError(t, err)
err = db.DeletePendingTransmission(testutils.Context(t), k)
require.NoError(t, err)
m, err := db.PendingTransmissionsWithConfigDigest(testutils.Context(t), configDigest)
require.NoError(t, err)
require.Len(t, m, 1)
// Did not affect other oracleSpecID
m, err = db2.PendingTransmissionsWithConfigDigest(testutils.Context(t), configDigest)
require.NoError(t, err)
require.Len(t, m, 1)
})`
$DIR/core/services/ocr2/database_test.go: `err = db2.StorePendingTransmission(testutils.Context(t), k, p)`
$DIR/core/services/ocr2/database_test.go: `err = db.DeletePendingTransmission(testutils.Context(t), k)`
$DIR/core/services/ocr2/database_test.go: `m, err = db2.PendingTransmissionsWithConfigDigest(testutils.Context(t), configDigest)`
$DIR/core/services/ocr2/database_test.go: `t.Run("allows multiple duplicate keys for different spec ID", func(t *testing.T) {
p := ocrtypes.PendingTransmission{
Time: time.Unix(100, 0),
ExtraHash: testutils.Random32Byte(),
Report: []byte{2, 2, 3},
AttributedSignatures: []ocrtypes.AttributedOnchainSignature{
{Signature: cltest.MustRandomBytes(t, 7), Signer: 248},
},
}
err := db.StorePendingTransmission(testutils.Context(t), k2, p)
require.NoError(t, err)
m, err := db.PendingTransmissionsWithConfigDigest(testutils.Context(t), configDigest)
require.NoError(t, err)
require.Len(t, m, 1)
// FIXME: don't understand how the median is being used as a key or what the replacement is yet
// require.Equal(t, p.Median, m[k2].Median)
})`
$DIR/core/services/ocr2/database_test.go: `err = db.StorePendingTransmission(testutils.Context(t), k2, p2)`
$DIR/core/services/ocr2/database_test.go: `p2 = ocrtypes.PendingTransmission{
Time: time.Now(),
ExtraHash: testutils.Random32Byte(),
Report: []byte{2, 2, 3},
AttributedSignatures: []ocrtypes.AttributedOnchainSignature{
{Signature: cltest.MustRandomBytes(t, 7), Signer: 248},
},
}`
$DIR/core/services/ocr2/database_test.go: `err = db.StorePendingTransmission(testutils.Context(t), k2, p2)`
$DIR/core/services/ocr2/database_test.go: `err = db.DeletePendingTransmissionsOlderThan(testutils.Context(t), time.Unix(900, 0))`
$DIR/core/services/ocr2/database_test.go: `db = ocr2.NewDB(sqlDB, spec2.ID, defaultPluginID, lggr)`
$DIR/core/services/ocr2/database_test.go: `m, err = db.PendingTransmissionsWithConfigDigest(testutils.Context(t), configDigest)`
$DIR/core/services/ocr2/database_test.go: `testutils.AssertCount(t, sqlDB, "ocr_protocol_states", expected)`
$DIR/core/services/ocr2/database_test.go: `assertCount(0)`
$DIR/core/services/ocr2/database_test.go: `assertCount(1)`
$DIR/core/services/ocr2/database_test.go: `err = db.WriteProtocolState(ctx, cd2, "key1", []byte{2})`
$DIR/core/services/ocr2/database_test.go: `assertCount(2)`
$DIR/core/services/ocr2/database_test.go: `err = db.WriteProtocolState(ctx, cd2, "key2", []byte{3})`
$DIR/core/services/ocr2/database_test.go: `assertCount(3)`
$DIR/core/services/ocr2/database_test.go: `err = db.WriteProtocolState(ctx, cd2, "key2", []byte{4})`
$DIR/core/services/ocr2/database_test.go: `val, err = db.ReadProtocolState(ctx, cd2, "key1")`
$DIR/core/services/ocr2/database_test.go: `val, err = db.ReadProtocolState(ctx, cd2, "key2")`
$DIR/core/services/ocr2/database_test.go: `err = db.WriteProtocolState(ctx, cd1, "key1", []byte{})`
$DIR/core/services/ocr2/database_test.go: `val, err = db.ReadProtocolState(ctx, cd1, "key1")`
$DIR/core/services/ocr2/database_test.go: `assertCount(3)`
$DIR/core/services/ocr2/database_test.go: `err = db.WriteProtocolState(ctx, cd1, "key1", nil)`
$DIR/core/services/ocr2/database_test.go: `assertCount(2)`
$DIR/core/services/ocr2/database_test.go: `val, err = db.ReadProtocolState(ctx, cd1, "key1")`
$DIR/core/services/ocr2/database_test.go: `.MakeConfigDigest(t)`
$DIR/core/services/ocr2/database_test.go: `.NewKeyStore(t, sqlDB)`
$DIR/core/services/ocr2/database_test.go: `.Eth()`
$DIR/core/services/ocr2/database_test.go: `.MustInsertRandomKey(t, ethKeyStore)`
$DIR/core/services/ocr2/database_test.go: `.TestLogger(t)`
$DIR/core/services/ocr2/database_test.go: `.Run("reads and writes state", func(t *testing.T) {
db := ocr2.NewDB(sqlDB, spec.ID, defaultPluginID, lggr)
state := ocrtypes.PersistentState{
Epoch: 1,
HighestSentEpoch: 2,
HighestReceivedEpoch: []uint32{3},
}
err := db.WriteState(testutils.Context(t), configDigest, state)
require.NoError(t, err)
readState, err := db.ReadState(testutils.Context(t), configDigest)
require.NoError(t, err)
require.Equal(t, state, *readState)
})`
$DIR/core/services/ocr2/database_test.go: `.NewDB(sqlDB, spec.ID, defaultPluginID, lggr)`
$DIR/core/services/ocr2/database_test.go: `.WriteState(testutils.Context(t), configDigest, state)`
$DIR/core/services/ocr2/database_test.go: `.Context(t)`
$DIR/core/services/ocr2/database_test.go: `.ReadState(testutils.Context(t), configDigest)`
$DIR/core/services/ocr2/database_test.go: `.Context(t)`
$DIR/core/services/ocr2/database_test.go: `.Run("updates state", func(t *testing.T) {
db := ocr2.NewDB(sqlDB, spec.ID, defaultPluginID, lggr)
newState := ocrtypes.PersistentState{
Epoch: 2,
HighestSentEpoch: 3,
HighestReceivedEpoch: []uint32{4, 5},
}
err := db.WriteState(testutils.Context(t), configDigest, newState)
require.NoError(t, err)
readState, err := db.ReadState(testutils.Context(t), configDigest)
require.NoError(t, err)
require.Equal(t, newState, *readState)
})`
$DIR/core/services/ocr2/database_test.go: `.NewDB(sqlDB, spec.ID, defaultPluginID, lggr)`
$DIR/core/services/ocr2/database_test.go: `.WriteState(testutils.Context(t), configDigest, newState)`
$DIR/core/services/ocr2/database_test.go: `.Context(t)`
$DIR/core/services/ocr2/database_test.go: `.ReadState(testutils.Context(t), configDigest)`
$DIR/core/services/ocr2/database_test.go: `.Context(t)`
$DIR/core/services/ocr2/database_test.go: `.Run("does not return result for wrong spec", func(t *testing.T) {
db := ocr2.NewDB(sqlDB, spec.ID, defaultPluginID, lggr)
state := ocrtypes.PersistentState{
Epoch: 3,
HighestSentEpoch: 4,
HighestReceivedEpoch: []uint32{5, 6},
}
err := db.WriteState(testutils.Context(t), configDigest, state)
require.NoError(t, err)
// odb with different spec
db = ocr2.NewDB(sqlDB, -1, defaultPluginID, lggr)
readState, err := db.ReadState(testutils.Context(t), configDigest)
require.NoError(t, err)
require.Nil(t, readState)
})`
$DIR/core/services/ocr2/database_test.go: `.NewDB(sqlDB, spec.ID, defaultPluginID, lggr)`
$DIR/core/services/ocr2/database_test.go: `.WriteState(testutils.Context(t), configDigest, state)`
$DIR/core/services/ocr2/database_test.go: `.Context(t)`
$DIR/core/services/ocr2/database_test.go: `.NewDB(sqlDB, -1, defaultPluginID, lggr)`
$DIR/core/services/ocr2/database_test.go: `.ReadState(testutils.Context(t), configDigest)`
$DIR/core/services/ocr2/database_test.go: `.Context(t)`
$DIR/core/services/ocr2/database_test.go: `.NewDB(sqlDB, spec.ID, defaultPluginID, lggr)`
$DIR/core/services/ocr2/database_test.go: `.WriteState(testutils.Context(t), configDigest, state)`
$DIR/core/services/ocr2/database_test.go: `.Context(t)`
$DIR/core/services/ocr2/database_test.go: `.ReadState(testutils.Context(t), testhelpers.MakeConfigDigest(t))`
$DIR/core/services/ocr2/database_test.go: `.Context(t)`
$DIR/core/services/ocr2/database_test.go: `.MakeConfigDigest(t)`
$DIR/core/services/ocr2/database_test.go: `.MakeConfigDigest(t)`
$DIR/core/services/ocr2/database_test.go: `.NewKeyStore(t, sqlDB)`
$DIR/core/services/ocr2/database_test.go: `.Eth()`
$DIR/core/services/ocr2/database_test.go: `.MustInsertRandomKey(t, ethKeyStore)`
$DIR/core/services/ocr2/database_test.go: `.TestLogger(t)`
$DIR/core/services/ocr2/database_test.go: `.Run("reads and writes config", func(t *testing.T) {
db := ocr2.NewDB(sqlDB, spec.ID, defaultPluginID, lggr)
err := db.WriteConfig(testutils.Context(t), config)
require.NoError(t, err)
readConfig, err := db.ReadConfig(testutils.Context(t))
require.NoError(t, err)
require.Equal(t, &config, readConfig)
})`
$DIR/core/services/ocr2/database_test.go: `.NewDB(sqlDB, spec.ID, defaultPluginID, lggr)`
$DIR/core/services/ocr2/database_test.go: `.WriteConfig(testutils.Context(t), config)`
$DIR/core/services/ocr2/database_test.go: `.Context(t)`
$DIR/core/services/ocr2/database_test.go: `.ReadConfig(testutils.Context(t))`
$DIR/core/services/ocr2/database_test.go: `.Context(t)`
$DIR/core/services/ocr2/database_test.go: `.Run("updates config", func(t *testing.T) {
db := ocr2.NewDB(sqlDB, spec.ID, defaultPluginID, lggr)
newConfig := ocrtypes.ContractConfig{
ConfigDigest: testhelpers.MakeConfigDigest(t),
Signers: []ocrtypes.OnchainPublicKey{},
Transmitters: []ocrtypes.Account{},
}
err := db.WriteConfig(testutils.Context(t), newConfig)
require.NoError(t, err)
readConfig, err := db.ReadConfig(testutils.Context(t))
require.NoError(t, err)
require.Equal(t, &newConfig, readConfig)
})`
$DIR/core/services/ocr2/database_test.go: `.NewDB(sqlDB, spec.ID, defaultPluginID, lggr)`
$DIR/core/services/ocr2/database_test.go: `.MakeConfigDigest(t)`
$DIR/core/services/ocr2/database_test.go: `.WriteConfig(testutils.Context(t), newConfig)`
$DIR/core/services/ocr2/database_test.go: `.Context(t)`
$DIR/core/services/ocr2/database_test.go: `.ReadConfig(testutils.Context(t))`
$DIR/core/services/ocr2/database_test.go: `.Context(t)`
$DIR/core/services/ocr2/database_test.go: `.Run("does not return result for wrong spec", func(t *testing.T) {
db := ocr2.NewDB(sqlDB, spec.ID, defaultPluginID, lggr)
err := db.WriteConfig(testutils.Context(t), config)
require.NoError(t, err)
db = ocr2.NewDB(sqlDB, -1, defaultPluginID, lggr)
readConfig, err := db.ReadConfig(testutils.Context(t))
require.NoError(t, err)
require.Nil(t, readConfig)
})`
$DIR/core/services/ocr2/database_test.go: `.NewDB(sqlDB, spec.ID, defaultPluginID, lggr)`
$DIR/core/services/ocr2/database_test.go: `.WriteConfig(testutils.Context(t), config)`
$DIR/core/services/ocr2/database_test.go: `.Context(t)`
$DIR/core/services/ocr2/database_test.go: `.NewDB(sqlDB, -1, defaultPluginID, lggr)`
$DIR/core/services/ocr2/database_test.go: `.ReadConfig(testutils.Context(t))`
$DIR/core/services/ocr2/database_test.go: `.Context(t)`
$DIR/core/services/ocr2/database_test.go: `.NewDB(sqlDB, spec.ID, defaultPluginID, lggr)`
$DIR/core/services/ocr2/database_test.go: `.NewDB(sqlDB, spec.ID, otherPluginID, lggr)`
$DIR/core/services/ocr2/database_test.go: `.MakeConfigDigest(t)`
$DIR/core/services/ocr2/database_test.go: `.WriteConfig(testutils.Context(t), config)`
$DIR/core/services/ocr2/database_test.go: `.Context(t)`
$DIR/core/services/ocr2/database_test.go: `.WriteConfig(testutils.Context(t), otherConfig)`
$DIR/core/services/ocr2/database_test.go: `.Context(t)`
$DIR/core/services/ocr2/database_test.go: `.ReadConfig(testutils.Context(t))`
$DIR/core/services/ocr2/database_test.go: `.Context(t)`
$DIR/core/services/ocr2/database_test.go: `.ReadConfig(testutils.Context(t))`
$DIR/core/services/ocr2/database_test.go: `.Context(t)`
$DIR/core/services/ocr2/database_test.go: `.NewKeyStore(t, sqlDB)`
$DIR/core/services/ocr2/database_test.go: `.Eth()`
$DIR/core/services/ocr2/database_test.go: `.MustInsertRandomKey(t, ethKeyStore)`
$DIR/core/services/ocr2/database_test.go: `.TestLogger(t)`
$DIR/core/services/ocr2/database_test.go: `.NewDB(sqlDB, spec.ID, defaultPluginID, lggr)`
$DIR/core/services/ocr2/database_test.go: `.NewDB(sqlDB, spec2.ID, defaultPluginID, lggr)`
$DIR/core/services/ocr2/database_test.go: `.MakeConfigDigest(t)`
$DIR/core/services/ocr2/database_test.go: `.Run("stores and retrieves pending transmissions", func(t *testing.T) {
p := ocrtypes.PendingTransmission{
Time: time.Now(),
ExtraHash: testutils.Random32Byte(),
Report: []byte{0, 2, 3},
AttributedSignatures: []ocrtypes.AttributedOnchainSignature{
{Signature: cltest.MustRandomBytes(t, 7), Signer: 248},
{Signature: cltest.MustRandomBytes(t, 17), Signer: 31},
},
}
err := db.StorePendingTransmission(testutils.Context(t), k, p)
require.NoError(t, err)
m, err := db.PendingTransmissionsWithConfigDigest(testutils.Context(t), configDigest)
require.NoError(t, err)
assertPendingTransmissionEqual(t, p, m[k])
// Now overwrite value for k to prove that updating works
p = ocrtypes.PendingTransmission{
Time: time.Now(),
ExtraHash: testutils.Random32Byte(),
Report: []byte{1, 2, 3},
AttributedSignatures: []ocrtypes.AttributedOnchainSignature{
{Signature: cltest.MustRandomBytes(t, 7), Signer: 248},
},
}
err = db.StorePendingTransmission(testutils.Context(t), k, p)
require.NoError(t, err)
m, err = db.PendingTransmissionsWithConfigDigest(testutils.Context(t), configDigest)
require.NoError(t, err)
assertPendingTransmissionEqual(t, p, m[k])
p2 := ocrtypes.PendingTransmission{
Time: time.Now(),
ExtraHash: testutils.Random32Byte(),
Report: []byte{2, 2, 3},
AttributedSignatures: []ocrtypes.AttributedOnchainSignature{
{Signature: cltest.MustRandomBytes(t, 7), Signer: 248},
},
}
err = db.StorePendingTransmission(testutils.Context(t), k2, p2)
require.NoError(t, err)
kRedHerring := ocrtypes.ReportTimestamp{
ConfigDigest: ocrtypes.ConfigDigest{43},
Epoch: 1,
Round: 2,
}
pRedHerring := ocrtypes.PendingTransmission{
Time: time.Now(),
ExtraHash: testutils.Random32Byte(),
Report: []byte{3, 2, 3},
AttributedSignatures: []ocrtypes.AttributedOnchainSignature{
{Signature: cltest.MustRandomBytes(t, 7), Signer: 248},
},
}
err = db.StorePendingTransmission(testutils.Context(t), kRedHerring, pRedHerring)
require.NoError(t, err)
m, err = db.PendingTransmissionsWithConfigDigest(testutils.Context(t), configDigest)
require.NoError(t, err)
require.Len(t, m, 2)
// HACK to get around time equality because otherwise its annoying (time storage into postgres is mildly lossy)
require.Equal(t, p.Time.Unix(), m[k].Time.Unix())
require.Equal(t, p2.Time.Unix(), m[k2].Time.Unix())
var zt time.Time
p.Time, p2.Time = zt, zt
for k, v := range m {
v.Time = zt
m[k] = v
}
require.Equal(t, p, m[k])
require.Equal(t, p2, m[k2])
// No keys for this oracleSpecID yet
m, err = db2.PendingTransmissionsWithConfigDigest(testutils.Context(t), configDigest)
require.NoError(t, err)
require.Len(t, m, 0)
})`
$DIR/core/services/ocr2/database_test.go: `.Now()`
$DIR/core/services/ocr2/database_test.go: `.Random32Byte()`
$DIR/core/services/ocr2/database_test.go: `.MustRandomBytes(t, 7)`
$DIR/core/services/ocr2/database_test.go: `.MustRandomBytes(t, 17)`
$DIR/core/services/ocr2/database_test.go: `.StorePendingTransmission(testutils.Context(t), k, p)`
$DIR/core/services/ocr2/database_test.go: `.Context(t)`
$DIR/core/services/ocr2/database_test.go: `.PendingTransmissionsWithConfigDigest(testutils.Context(t), configDigest)`
$DIR/core/services/ocr2/database_test.go: `.Context(t)`
$DIR/core/services/ocr2/database_test.go: `.Now()`
$DIR/core/services/ocr2/database_test.go: `.Random32Byte()`
$DIR/core/services/ocr2/database_test.go: `.MustRandomBytes(t, 7)`
$DIR/core/services/ocr2/database_test.go: `.StorePendingTransmission(testutils.Context(t), k, p)`
$DIR/core/services/ocr2/database_test.go: `.Context(t)`
$DIR/core/services/ocr2/database_test.go: `.PendingTransmissionsWithConfigDigest(testutils.Context(t), configDigest)`
$DIR/core/services/ocr2/database_test.go: `.Context(t)`
$DIR/core/services/ocr2/database_test.go: `.Now()`
$DIR/core/services/ocr2/database_test.go: `.Random32Byte()`
$DIR/core/services/ocr2/database_test.go: `.MustRandomBytes(t, 7)`
$DIR/core/services/ocr2/database_test.go: `.StorePendingTransmission(testutils.Context(t), k2, p2)`
$DIR/core/services/ocr2/database_test.go: `.Context(t)`
$DIR/core/services/ocr2/database_test.go: `.Now()`
$DIR/core/services/ocr2/database_test.go: `.Random32Byte()`
$DIR/core/services/ocr2/database_test.go: `.MustRandomBytes(t, 7)`
$DIR/core/services/ocr2/database_test.go: `.StorePendingTransmission(testutils.Context(t), kRedHerring, pRedHerring)`
$DIR/core/services/ocr2/database_test.go: `.Context(t)`
$DIR/core/services/ocr2/database_test.go: `.PendingTransmissionsWithConfigDigest(testutils.Context(t), configDigest)`
$DIR/core/services/ocr2/database_test.go: `.Context(t)`
$DIR/core/services/ocr2/database_test.go: `.PendingTransmissionsWithConfigDigest(testutils.Context(t), configDigest)`
$DIR/core/services/ocr2/database_test.go: `.Context(t)`
$DIR/core/services/ocr2/database_test.go: `.Run("deletes pending transmission by key", func(t *testing.T) {
p := ocrtypes.PendingTransmission{
Time: time.Unix(100, 0),
ExtraHash: testutils.Random32Byte(),
Report: []byte{1, 4, 3},
AttributedSignatures: []ocrtypes.AttributedOnchainSignature{
{Signature: cltest.MustRandomBytes(t, 7), Signer: 248},
},
}
err := db.StorePendingTransmission(testutils.Context(t), k, p)
require.NoError(t, err)
err = db2.StorePendingTransmission(testutils.Context(t), k, p)
require.NoError(t, err)
err = db.DeletePendingTransmission(testutils.Context(t), k)
require.NoError(t, err)
m, err := db.PendingTransmissionsWithConfigDigest(testutils.Context(t), configDigest)
require.NoError(t, err)
require.Len(t, m, 1)
// Did not affect other oracleSpecID
m, err = db2.PendingTransmissionsWithConfigDigest(testutils.Context(t), configDigest)
require.NoError(t, err)
require.Len(t, m, 1)
})`
$DIR/core/services/ocr2/database_test.go: `.Unix(100, 0)`
$DIR/core/services/ocr2/database_test.go: `.Random32Byte()`
$DIR/core/services/ocr2/database_test.go: `.MustRandomBytes(t, 7)`
$DIR/core/services/ocr2/database_test.go: `.StorePendingTransmission(testutils.Context(t), k, p)`
$DIR/core/services/ocr2/database_test.go: `.Context(t)`
$DIR/core/services/ocr2/database_test.go: `.StorePendingTransmission(testutils.Context(t), k, p)`
$DIR/core/services/ocr2/database_test.go: `.Context(t)`
$DIR/core/services/ocr2/database_test.go: `.DeletePendingTransmission(testutils.Context(t), k)`
$DIR/core/services/ocr2/database_test.go: `.Context(t)`
$DIR/core/services/ocr2/database_test.go: `.PendingTransmissionsWithConfigDigest(testutils.Context(t), configDigest)`
$DIR/core/services/ocr2/database_test.go: `.Context(t)`
$DIR/core/services/ocr2/database_test.go: `.PendingTransmissionsWithConfigDigest(testutils.Context(t), configDigest)`
$DIR/core/services/ocr2/database_test.go: `.Context(t)`
$DIR/core/services/ocr2/database_test.go: `.Run("allows multiple duplicate keys for different spec ID", func(t *testing.T) {
p := ocrtypes.PendingTransmission{
Time: time.Unix(100, 0),
ExtraHash: testutils.Random32Byte(),
Report: []byte{2, 2, 3},
AttributedSignatures: []ocrtypes.AttributedOnchainSignature{
{Signature: cltest.MustRandomBytes(t, 7), Signer: 248},
},
}
err := db.StorePendingTransmission(testutils.Context(t), k2, p)
require.NoError(t, err)
m, err := db.PendingTransmissionsWithConfigDigest(testutils.Context(t), configDigest)
require.NoError(t, err)
require.Len(t, m, 1)
// FIXME: don't understand how the median is being used as a key or what the replacement is yet
// require.Equal(t, p.Median, m[k2].Median)
})`
$DIR/core/services/ocr2/database_test.go: `.Unix(100, 0)`
$DIR/core/services/ocr2/database_test.go: `.Random32Byte()`
$DIR/core/services/ocr2/database_test.go: `.MustRandomBytes(t, 7)`
$DIR/core/services/ocr2/database_test.go: `.StorePendingTransmission(testutils.Context(t), k2, p)`
$DIR/core/services/ocr2/database_test.go: `.Context(t)`
$DIR/core/services/ocr2/database_test.go: `.PendingTransmissionsWithConfigDigest(testutils.Context(t), configDigest)`
$DIR/core/services/ocr2/database_test.go: `.Context(t)`
$DIR/core/services/ocr2/database_test.go: `.Unix(100, 0)`
$DIR/core/services/ocr2/database_test.go: `.Random32Byte()`
$DIR/core/services/ocr2/database_test.go: `.MustRandomBytes(t, 7)`
$DIR/core/services/ocr2/database_test.go: `.StorePendingTransmission(testutils.Context(t), k, p)`
$DIR/core/services/ocr2/database_test.go: `.Context(t)`
$DIR/core/services/ocr2/database_test.go: `.Unix(1000, 0)`
$DIR/core/services/ocr2/database_test.go: `.Random32Byte()`
$DIR/core/services/ocr2/database_test.go: `.MustRandomBytes(t, 7)`
$DIR/core/services/ocr2/database_test.go: `.StorePendingTransmission(testutils.Context(t), k2, p2)`
$DIR/core/services/ocr2/database_test.go: `.Context(t)`
$DIR/core/services/ocr2/database_test.go: `.Now()`
$DIR/core/services/ocr2/database_test.go: `.Random32Byte()`
$DIR/core/services/ocr2/database_test.go: `.MustRandomBytes(t, 7)`
$DIR/core/services/ocr2/database_test.go: `.StorePendingTransmission(testutils.Context(t), k2, p2)`
$DIR/core/services/ocr2/database_test.go: `.Context(t)`
$DIR/core/services/ocr2/database_test.go: `.DeletePendingTransmissionsOlderThan(testutils.Context(t), time.Unix(900, 0))`
$DIR/core/services/ocr2/database_test.go: `.Context(t)`
$DIR/core/services/ocr2/database_test.go: `.Unix(900, 0)`
$DIR/core/services/ocr2/database_test.go: `.PendingTransmissionsWithConfigDigest(testutils.Context(t), configDigest)`
$DIR/core/services/ocr2/database_test.go: `.Context(t)`
$DIR/core/services/ocr2/database_test.go: `.NewDB(sqlDB, spec2.ID, defaultPluginID, lggr)`
$DIR/core/services/ocr2/database_test.go: `.PendingTransmissionsWithConfigDigest(testutils.Context(t), configDigest)`
$DIR/core/services/ocr2/database_test.go: `.Context(t)`
$DIR/core/services/ocr2/database_test.go: `.TestLogger(t)`
$DIR/core/services/ocr2/database_test.go: `.NewDB(sqlDB, 0, defaultPluginID, lggr)`
$DIR/core/services/ocr2/database_test.go: `.MakeConfigDigest(t)`
$DIR/core/services/ocr2/database_test.go: `.MakeConfigDigest(t)`
$DIR/core/services/ocr2/database_test.go: `.Context(t)`
$DIR/core/services/ocr2/database_test.go: `.AssertCount(t, sqlDB, "ocr_protocol_states", expected)`
$DIR/core/services/ocr2/database_test.go: `.WriteProtocolState(ctx, cd1, "key1", []byte{1})`
$DIR/core/services/ocr2/database_test.go: `.WriteProtocolState(ctx, cd2, "key1", []byte{2})`
$DIR/core/services/ocr2/database_test.go: `.WriteProtocolState(ctx, cd2, "key2", []byte{3})`
$DIR/core/services/ocr2/database_test.go: `.WriteProtocolState(ctx, cd2, "key2", []byte{4})`
$DIR/core/services/ocr2/database_test.go: `.ReadProtocolState(ctx, cd1, "key1")`
$DIR/core/services/ocr2/database_test.go: `.ReadProtocolState(ctx, cd2, "key1")`
$DIR/core/services/ocr2/database_test.go: `.ReadProtocolState(ctx, cd2, "key2")`
$DIR/core/services/ocr2/database_test.go: `.WriteProtocolState(ctx, cd1, "key1", []byte{})`
$DIR/core/services/ocr2/database_test.go: `.ReadProtocolState(ctx, cd1, "key1")`
$DIR/core/services/ocr2/database_test.go: `.WriteProtocolState(ctx, cd1, "key1", nil)`
$DIR/core/services/ocr2/database_test.go: `.ReadProtocolState(ctx, cd1, "key1")`
$DIR/core/services/ocr2/delegate_test.go: `c.EVM = append(c.EVM, &evmcfg.EVMConfig{
ChainID: customChainID,
Chain: evmcfg.Defaults(customChainID),
Enabled: &enabled,
Nodes: evmcfg.EVMNodes{{}},
})`
$DIR/core/services/ocr2/delegate_test.go: `jb.OCR2OracleSpec.PluginType = tc.pluginType`
$DIR/core/services/ocr2/delegate_test.go: `jb.OCR2OracleSpec.TransmitterID = tc.transmitterID`
$DIR/core/services/ocr2/delegate_test.go: `jb.OCR2OracleSpec.RelayConfig["sendingKeys"] = tc.sendingKeys`
$DIR/core/services/ocr2/delegate_test.go: `jb.ForwardingAllowed = tc.forwardingEnabled`
$DIR/core/services/ocr2/delegate_test.go: `getForwarderMethodName = "GetForwarderForEOAOCR2Feeds"`
$DIR/core/services/ocr2/delegate_test.go: `args = append(args, common.HexToAddress(jb.OCR2OracleSpec.ContractID))`
$DIR/core/services/ocr2/delegate_test.go: `txManager.Mock.On(getForwarderMethodName, args...).Return(common.HexToAddress("0x0"), errors.New("random error")).Once()`
$DIR/core/services/ocr2/delegate_test.go: `txManager.Mock.On(getForwarderMethodName, args...).Return(common.HexToAddress(tc.expectedTransmitterID), nil).Once()`
$DIR/core/services/ocr2/delegate_test.go: `t.Run("when sending keys are not defined, the first one should be set to transmitterID", func(t *testing.T) {
ctx := testutils.Context(t)
jb, err := ocr2validate.ValidatedOracleSpecToml(testutils.Context(t), config.OCR2(), config.Insecure(), testspecs.GetOCR2EVMSpecMinimal(), nil)
require.NoError(t, err)
jb.OCR2OracleSpec.TransmitterID = null.StringFrom("some transmitterID string")
jb.OCR2OracleSpec.RelayConfig["sendingKeys"] = nil
chain, err := legacyChains.Get(customChainID.String())
require.NoError(t, err)
effectiveTransmitterID, err := ocr2.GetEVMEffectiveTransmitterID(ctx, &jb, chain, lggr)
require.NoError(t, err)
require.Equal(t, "some transmitterID string", effectiveTransmitterID)
require.Equal(t, []string{"some transmitterID string"}, jb.OCR2OracleSpec.RelayConfig["sendingKeys"].([]string))
})`
$DIR/core/services/ocr2/delegate_test.go: `jb.OCR2OracleSpec.TransmitterID = null.StringFrom("some transmitterID string")`
$DIR/core/services/ocr2/delegate_test.go: `jb.OCR2OracleSpec.RelayConfig["sendingKeys"] = nil`
$DIR/core/services/ocr2/delegate_test.go: `t.Run(tc.name, func(t *testing.T) {
ctx := testutils.Context(t)
jb, err := ocr2validate.ValidatedOracleSpecToml(testutils.Context(t), config.OCR2(), config.Insecure(), testspecs.GetOCR2EVMSpecMinimal(), nil)
require.NoError(t, err)
setTestCase(&jb, tc, txManager)
chain, err := legacyChains.Get(customChainID.String())
require.NoError(t, err)
effectiveTransmitterID, err := ocr2.GetEVMEffectiveTransmitterID(ctx, &jb, chain, lggr)
if tc.expectedError {
require.Error(t, err)
} else {
require.NoError(t, err)
}
require.Equal(t, tc.expectedTransmitterID, effectiveTransmitterID)
// when forwarding is enabled effectiveTransmitter differs unless it failed to fetch forwarder address
if !jb.ForwardingAllowed {
require.Equal(t, jb.OCR2OracleSpec.TransmitterID.String, effectiveTransmitterID)
}
})`
$DIR/core/services/ocr2/delegate_test.go: `setTestCase(&jb, tc, txManager)`
$DIR/core/services/ocr2/delegate_test.go: `jb.ForwardingAllowed = true`
$DIR/core/services/ocr2/delegate_test.go: `jb.OCR2OracleSpec.TransmitterID = null.StringFrom("0x7e57000000000000000000000000000000000001")`
$DIR/core/services/ocr2/delegate_test.go: `_, err = ocr2.GetEVMEffectiveTransmitterID(ctx, &jb, chain, lggr)`
$DIR/core/services/ocr2/delegate_test.go: `.New(testutils.NewRandomEVMChainID())`
$DIR/core/services/ocr2/delegate_test.go: `.NewRandomEVMChainID()`
$DIR/core/services/ocr2/delegate_test.go: `.NewGeneralConfig(t, func(c *chainlink.Config, s *chainlink.Secrets) {
enabled := true
c.EVM = append(c.EVM, &evmcfg.EVMConfig{
ChainID: customChainID,
Chain: evmcfg.Defaults(customChainID),
Enabled: &enabled,
Nodes: evmcfg.EVMNodes{{}},
})
})`
$DIR/core/services/ocr2/delegate_test.go: `.Defaults(customChainID)`
$DIR/core/services/ocr2/delegate_test.go: `.NewSqlxDB(t)`
$DIR/core/services/ocr2/delegate_test.go: `.NewKeyStore(t, db)`
$DIR/core/services/ocr2/delegate_test.go: `.TestLogger(t)`
$DIR/core/services/ocr2/delegate_test.go: `.NewMockEvmTxManager(t)`
$DIR/core/services/ocr2/delegate_test.go: `.NewChainRelayExtenders(t, evmtest.TestChainOpts{DB: db, GeneralConfig: config, KeyStore: keyStore.Eth(), TxManager: txManager})`
$DIR/core/services/ocr2/delegate_test.go: `.Eth()`
$DIR/core/services/ocr2/delegate_test.go: `.NewLegacyChainsFromRelayerExtenders(relayExtenders)`
$DIR/core/services/ocr2/delegate_test.go: `.HexToAddress(jb.OCR2OracleSpec.ContractID)`
$DIR/core/services/ocr2/delegate_test.go: `.Mock.On(getForwarderMethodName, args...)`
$DIR/core/services/ocr2/delegate_test.go: `.Return(common.HexToAddress("0x0"), errors.New("random error"))`
$DIR/core/services/ocr2/delegate_test.go: `.HexToAddress("0x0")`
$DIR/core/services/ocr2/delegate_test.go: `.New("random error")`
$DIR/core/services/ocr2/delegate_test.go: `.Once()`
$DIR/core/services/ocr2/delegate_test.go: `.Mock.On(getForwarderMethodName, args...)`
$DIR/core/services/ocr2/delegate_test.go: `.Return(common.HexToAddress(tc.expectedTransmitterID), nil)`
$DIR/core/services/ocr2/delegate_test.go: `.HexToAddress(tc.expectedTransmitterID)`
$DIR/core/services/ocr2/delegate_test.go: `.Once()`
$DIR/core/services/ocr2/delegate_test.go: `.StringFrom("Mercury transmitterID")`
$DIR/core/services/ocr2/delegate_test.go: `.StringFrom("0x7e57000000000000000000000000000000000001")`
$DIR/core/services/ocr2/delegate_test.go: `.HexToAddress("0x7e57000000000000000000000000000000000001")`
$DIR/core/services/ocr2/delegate_test.go: `.HexToAddress("0x7e57000000000000000000000000000000000001")`
$DIR/core/services/ocr2/delegate_test.go: `.HexToAddress("0x7e57000000000000000000000000000000000001")`
$DIR/core/services/ocr2/delegate_test.go: `.StringFrom("0x7e57000000000000000000000000000000000003")`
$DIR/core/services/ocr2/delegate_test.go: `.HexToAddress("0x7e57000000000000000000000000000000000003")`
$DIR/core/services/ocr2/delegate_test.go: `.Run("when sending keys are not defined, the first one should be set to transmitterID", func(t *testing.T) {
ctx := testutils.Context(t)
jb, err := ocr2validate.ValidatedOracleSpecToml(testutils.Context(t), config.OCR2(), config.Insecure(), testspecs.GetOCR2EVMSpecMinimal(), nil)
require.NoError(t, err)
jb.OCR2OracleSpec.TransmitterID = null.StringFrom("some transmitterID string")
jb.OCR2OracleSpec.RelayConfig["sendingKeys"] = nil
chain, err := legacyChains.Get(customChainID.String())
require.NoError(t, err)
effectiveTransmitterID, err := ocr2.GetEVMEffectiveTransmitterID(ctx, &jb, chain, lggr)
require.NoError(t, err)
require.Equal(t, "some transmitterID string", effectiveTransmitterID)
require.Equal(t, []string{"some transmitterID string"}, jb.OCR2OracleSpec.RelayConfig["sendingKeys"].([]string))
})`
$DIR/core/services/ocr2/delegate_test.go: `.Context(t)`
$DIR/core/services/ocr2/delegate_test.go: `.ValidatedOracleSpecToml(testutils.Context(t), config.OCR2(), config.Insecure(), testspecs.GetOCR2EVMSpecMinimal(), nil)`
$DIR/core/services/ocr2/delegate_test.go: `.Context(t)`
$DIR/core/services/ocr2/delegate_test.go: `.OCR2()`
$DIR/core/services/ocr2/delegate_test.go: `.Insecure()`
$DIR/core/services/ocr2/delegate_test.go: `.GetOCR2EVMSpecMinimal()`
$DIR/core/services/ocr2/delegate_test.go: `.StringFrom("some transmitterID string")`
$DIR/core/services/ocr2/delegate_test.go: `.Get(customChainID.String())`
$DIR/core/services/ocr2/delegate_test.go: `.String()`
$DIR/core/services/ocr2/delegate_test.go: `.GetEVMEffectiveTransmitterID(ctx, &jb, chain, lggr)`
$DIR/core/services/ocr2/delegate_test.go: `.Run(tc.name, func(t *testing.T) {
ctx := testutils.Context(t)
jb, err := ocr2validate.ValidatedOracleSpecToml(testutils.Context(t), config.OCR2(), config.Insecure(), testspecs.GetOCR2EVMSpecMinimal(), nil)
require.NoError(t, err)
setTestCase(&jb, tc, txManager)
chain, err := legacyChains.Get(customChainID.String())
require.NoError(t, err)
effectiveTransmitterID, err := ocr2.GetEVMEffectiveTransmitterID(ctx, &jb, chain, lggr)
if tc.expectedError {
require.Error(t, err)
} else {
require.NoError(t, err)
}
require.Equal(t, tc.expectedTransmitterID, effectiveTransmitterID)
// when forwarding is enabled effectiveTransmitter differs unless it failed to fetch forwarder address
if !jb.ForwardingAllowed {
require.Equal(t, jb.OCR2OracleSpec.TransmitterID.String, effectiveTransmitterID)
}
})`
$DIR/core/services/ocr2/delegate_test.go: `.Context(t)`
$DIR/core/services/ocr2/delegate_test.go: `.ValidatedOracleSpecToml(testutils.Context(t), config.OCR2(), config.Insecure(), testspecs.GetOCR2EVMSpecMinimal(), nil)`
$DIR/core/services/ocr2/delegate_test.go: `.Context(t)`
$DIR/core/services/ocr2/delegate_test.go: `.OCR2()`
$DIR/core/services/ocr2/delegate_test.go: `.Insecure()`
$DIR/core/services/ocr2/delegate_test.go: `.GetOCR2EVMSpecMinimal()`
$DIR/core/services/ocr2/delegate_test.go: `.Get(customChainID.String())`
$DIR/core/services/ocr2/delegate_test.go: `.String()`
$DIR/core/services/ocr2/delegate_test.go: `.GetEVMEffectiveTransmitterID(ctx, &jb, chain, lggr)`
$DIR/core/services/ocr2/delegate_test.go: `.Context(t)`
$DIR/core/services/ocr2/delegate_test.go: `.ValidatedOracleSpecToml(testutils.Context(t), config.OCR2(), config.Insecure(), testspecs.GetOCR2EVMSpecMinimal(), nil)`
$DIR/core/services/ocr2/delegate_test.go: `.Context(t)`
$DIR/core/services/ocr2/delegate_test.go: `.OCR2()`
$DIR/core/services/ocr2/delegate_test.go: `.Insecure()`
$DIR/core/services/ocr2/delegate_test.go: `.GetOCR2EVMSpecMinimal()`
$DIR/core/services/ocr2/delegate_test.go: `.StringFrom("0x7e57000000000000000000000000000000000001")`
$DIR/core/services/ocr2/delegate_test.go: `.Get("not an id")`
$DIR/core/services/ocr2/delegate_test.go: `.GetEVMEffectiveTransmitterID(ctx, &jb, chain, lggr)`
$DIR/core/services/ocr2/plugins/dkg/config/config_test.go: `t.Run("no error when keys are found", func(t *testing.T) {
err = config.ValidatePluginConfig(pluginConfig, kst.DKGSign(), kst.DKGEncrypt())
require.NoError(t, err)
})`
$DIR/core/services/ocr2/plugins/dkg/config/config_test.go: `err = config.ValidatePluginConfig(pluginConfig, kst.DKGSign(), kst.DKGEncrypt())`
$DIR/core/services/ocr2/plugins/dkg/config/config_test.go: `t.Run("error when encryption key not found", func(t *testing.T) {
pluginConfig = config.PluginConfig{
EncryptionPublicKey: "wrongKey",
SigningPublicKey: signKey,
}
err = config.ValidatePluginConfig(pluginConfig, kst.DKGSign(), kst.DKGEncrypt())
require.Error(t, err)
require.Contains(t, err.Error(), "DKG encryption key: wrongKey not found in key store")
})`
$DIR/core/services/ocr2/plugins/dkg/config/config_test.go: `pluginConfig = config.PluginConfig{
EncryptionPublicKey: "wrongKey",
SigningPublicKey: signKey,
}`
$DIR/core/services/ocr2/plugins/dkg/config/config_test.go: `err = config.ValidatePluginConfig(pluginConfig, kst.DKGSign(), kst.DKGEncrypt())`
$DIR/core/services/ocr2/plugins/dkg/config/config_test.go: `pluginConfig = config.PluginConfig{
EncryptionPublicKey: encryptKey,
SigningPublicKey: "wrongKey",
}`
$DIR/core/services/ocr2/plugins/dkg/config/config_test.go: `err = config.ValidatePluginConfig(pluginConfig, kst.DKGSign(), kst.DKGEncrypt())`
$DIR/core/services/ocr2/plugins/dkg/config/config_test.go: `.Context(t)`
$DIR/core/services/ocr2/plugins/dkg/config/config_test.go: `.NewSqlxDB(t)`
$DIR/core/services/ocr2/plugins/dkg/config/config_test.go: `.NewKeyStore(t, db)`
$DIR/core/services/ocr2/plugins/dkg/config/config_test.go: `.DKGEncrypt()`
$DIR/core/services/ocr2/plugins/dkg/config/config_test.go: `.Create(ctx)`
$DIR/core/services/ocr2/plugins/dkg/config/config_test.go: `.DKGSign()`
$DIR/core/services/ocr2/plugins/dkg/config/config_test.go: `.Create(ctx)`
$DIR/core/services/ocr2/plugins/dkg/config/config_test.go: `.PublicKey.MarshalBinary()`
$DIR/core/services/ocr2/plugins/dkg/config/config_test.go: `.EncodeToString(encryptKeyBytes)`
$DIR/core/services/ocr2/plugins/dkg/config/config_test.go: `.PublicKey.MarshalBinary()`
$DIR/core/services/ocr2/plugins/dkg/config/config_test.go: `.EncodeToString(signKeyBytes)`
$DIR/core/services/ocr2/plugins/dkg/config/config_test.go: `.Run("no error when keys are found", func(t *testing.T) {
err = config.ValidatePluginConfig(pluginConfig, kst.DKGSign(), kst.DKGEncrypt())
require.NoError(t, err)
})`
$DIR/core/services/ocr2/plugins/dkg/config/config_test.go: `.ValidatePluginConfig(pluginConfig, kst.DKGSign(), kst.DKGEncrypt())`
$DIR/core/services/ocr2/plugins/dkg/config/config_test.go: `.DKGSign()`
$DIR/core/services/ocr2/plugins/dkg/config/config_test.go: `.DKGEncrypt()`
$DIR/core/services/ocr2/plugins/dkg/config/config_test.go: `.Run("error when encryption key not found", func(t *testing.T) {
pluginConfig = config.PluginConfig{
EncryptionPublicKey: "wrongKey",
SigningPublicKey: signKey,
}
err = config.ValidatePluginConfig(pluginConfig, kst.DKGSign(), kst.DKGEncrypt())
require.Error(t, err)
require.Contains(t, err.Error(), "DKG encryption key: wrongKey not found in key store")
})`
$DIR/core/services/ocr2/plugins/dkg/config/config_test.go: `.ValidatePluginConfig(pluginConfig, kst.DKGSign(), kst.DKGEncrypt())`
$DIR/core/services/ocr2/plugins/dkg/config/config_test.go: `.DKGSign()`
$DIR/core/services/ocr2/plugins/dkg/config/config_test.go: `.DKGEncrypt()`
$DIR/core/services/ocr2/plugins/dkg/config/config_test.go: `.ValidatePluginConfig(pluginConfig, kst.DKGSign(), kst.DKGEncrypt())`
$DIR/core/services/ocr2/plugins/dkg/config/config_test.go: `.DKGSign()`
$DIR/core/services/ocr2/plugins/dkg/config/config_test.go: `.DKGEncrypt()`
$DIR/core/services/ocr2/plugins/dkg/persistence/db_test.go: `t.Run("valid input", func(tt *testing.T) {
shareDB, db := setup(tt)
var expectedRecords []ocr2vrftypes.PersistentShareSetRecord
// Starting from 1 because player indexes must not be 0
for i := 1; i < 4; i++ {
b := ocr2vrftypes.RawMarshalPlayerIdxInt(ocr2vrftypes.PlayerIdxInt(i))
playerIdx, _, err := ocr2vrftypes.UnmarshalPlayerIdx(b)
require.NoError(t, err)
shareRecord := crypto.Keccak256Hash([]byte(fmt.Sprintf("%d", i)))
shareRecordHash := hash.GetHash(shareRecord[:])
var h hash.Hash
copy(h[:], shareRecordHash[:])
rec := ocr2vrftypes.PersistentShareSetRecord{
Dealer: *playerIdx,
MarshaledShareRecord: shareRecord[:],
Hash: h,
}
expectedRecords = append(expectedRecords, rec)
}
err := shareDB.WriteShareRecords(testutils.Context(t), configDigest, keyID, expectedRecords)
require.NoError(tt, err)
rows, err := db.Query(`SELECT COUNT(*) AS count FROM dkg_shares`)
require.NoError(tt, err)
t.Cleanup(func() { assert.NoError(t, rows.Close()) })
var count int
for rows.Next() {
require.NoError(tt, rows.Scan(&count))
}
require.NoError(tt, rows.Err())
require.Equal(tt, 3, count)
})`
$DIR/core/services/ocr2/plugins/dkg/persistence/db_test.go: `copy(h[:], shareRecordHash[:])`
$DIR/core/services/ocr2/plugins/dkg/persistence/db_test.go: `expectedRecords = append(expectedRecords, rec)`
$DIR/core/services/ocr2/plugins/dkg/persistence/db_test.go: `t.Cleanup(func() { assert.NoError(t, rows.Close()) })`
$DIR/core/services/ocr2/plugins/dkg/persistence/db_test.go: `t.Run("bad input, zero hash", func(tt *testing.T) {
shareDB, db := setup(tt)
b := ocr2vrftypes.RawMarshalPlayerIdxInt(ocr2vrftypes.PlayerIdxInt(1))
dealer, _, err := ocr2vrftypes.UnmarshalPlayerIdx(b)
require.NoError(tt, err)
records := []ocr2vrftypes.PersistentShareSetRecord{
{
Dealer: *dealer,
MarshaledShareRecord: []byte{1},
Hash: hash.Hash{}, // There's a problem here
},
}
// no error, but there will be no rows inserted in the db
err = shareDB.WriteShareRecords(testutils.Context(t), configDigest, keyID, records)
require.NoError(tt, err)
rows, err := db.Query(`SELECT COUNT(*) AS count FROM dkg_shares`)
require.NoError(tt, err)
t.Cleanup(func() { assert.NoError(t, rows.Close()) })
var count int
for rows.Next() {
require.NoError(tt, rows.Scan(&count))
}
require.NoError(tt, rows.Err())
require.Equal(tt, 0, count)
})`
$DIR/core/services/ocr2/plugins/dkg/persistence/db_test.go: `err = shareDB.WriteShareRecords(testutils.Context(t), configDigest, keyID, records)`
$DIR/core/services/ocr2/plugins/dkg/persistence/db_test.go: `t.Cleanup(func() { assert.NoError(t, rows.Close()) })`
$DIR/core/services/ocr2/plugins/dkg/persistence/db_test.go: `copy(h[:], shareRecordHash[:])`
$DIR/core/services/ocr2/plugins/dkg/persistence/db_test.go: `records = append(records, rec)`
$DIR/core/services/ocr2/plugins/dkg/persistence/db_test.go: `t.Cleanup(func() { assert.NoError(t, rows.Close()) })`
$DIR/core/services/ocr2/plugins/dkg/persistence/db_test.go: `copy(h[:], shareRecordHash[:])`
$DIR/core/services/ocr2/plugins/dkg/persistence/db_test.go: `expectedRecords = append(expectedRecords, rec)`
$DIR/core/services/ocr2/plugins/dkg/persistence/db_test.go: `expectedRecordsMap[*playerIdx] = rec`
$DIR/core/services/ocr2/plugins/dkg/persistence/db_test.go: `numAssertions++`
$DIR/core/services/ocr2/plugins/dkg/persistence/db_test.go: `.Random32Byte()`
$DIR/core/services/ocr2/plugins/dkg/persistence/db_test.go: `.Random32Byte()`
$DIR/core/services/ocr2/plugins/dkg/persistence/db_test.go: `.Run("valid input", func(tt *testing.T) {
shareDB, db := setup(tt)
var expectedRecords []ocr2vrftypes.PersistentShareSetRecord
// Starting from 1 because player indexes must not be 0
for i := 1; i < 4; i++ {
b := ocr2vrftypes.RawMarshalPlayerIdxInt(ocr2vrftypes.PlayerIdxInt(i))
playerIdx, _, err := ocr2vrftypes.UnmarshalPlayerIdx(b)
require.NoError(t, err)
shareRecord := crypto.Keccak256Hash([]byte(fmt.Sprintf("%d", i)))
shareRecordHash := hash.GetHash(shareRecord[:])
var h hash.Hash
copy(h[:], shareRecordHash[:])
rec := ocr2vrftypes.PersistentShareSetRecord{
Dealer: *playerIdx,
MarshaledShareRecord: shareRecord[:],
Hash: h,
}
expectedRecords = append(expectedRecords, rec)
}
err := shareDB.WriteShareRecords(testutils.Context(t), configDigest, keyID, expectedRecords)
require.NoError(tt, err)
rows, err := db.Query(`SELECT COUNT(*) AS count FROM dkg_shares`)
require.NoError(tt, err)
t.Cleanup(func() { assert.NoError(t, rows.Close()) })
var count int
for rows.Next() {
require.NoError(tt, rows.Scan(&count))
}
require.NoError(tt, rows.Err())
require.Equal(tt, 3, count)
})`
$DIR/core/services/ocr2/plugins/dkg/persistence/db_test.go: `.RawMarshalPlayerIdxInt(ocr2vrftypes.PlayerIdxInt(i))`
$DIR/core/services/ocr2/plugins/dkg/persistence/db_test.go: `.PlayerIdxInt(i)`
$DIR/core/services/ocr2/plugins/dkg/persistence/db_test.go: `.UnmarshalPlayerIdx(b)`
$DIR/core/services/ocr2/plugins/dkg/persistence/db_test.go: `.Keccak256Hash([]byte(fmt.Sprintf("%d", i)))`
$DIR/core/services/ocr2/plugins/dkg/persistence/db_test.go: `.Sprintf("%d", i)`
$DIR/core/services/ocr2/plugins/dkg/persistence/db_test.go: `.GetHash(shareRecord[:])`
$DIR/core/services/ocr2/plugins/dkg/persistence/db_test.go: `.WriteShareRecords(testutils.Context(t), configDigest, keyID, expectedRecords)`
$DIR/core/services/ocr2/plugins/dkg/persistence/db_test.go: `.Context(t)`
$DIR/core/services/ocr2/plugins/dkg/persistence/db_test.go: `.Query(`SELECT COUNT(*) AS count FROM dkg_shares`)`
$DIR/core/services/ocr2/plugins/dkg/persistence/db_test.go: `.Cleanup(func() { assert.NoError(t, rows.Close()) })`
$DIR/core/services/ocr2/plugins/dkg/persistence/db_test.go: `.Next()`
$DIR/core/services/ocr2/plugins/dkg/persistence/db_test.go: `.Run("bad input, zero hash", func(tt *testing.T) {
shareDB, db := setup(tt)
b := ocr2vrftypes.RawMarshalPlayerIdxInt(ocr2vrftypes.PlayerIdxInt(1))
dealer, _, err := ocr2vrftypes.UnmarshalPlayerIdx(b)
require.NoError(tt, err)
records := []ocr2vrftypes.PersistentShareSetRecord{
{
Dealer: *dealer,
MarshaledShareRecord: []byte{1},
Hash: hash.Hash{}, // There's a problem here
},
}
// no error, but there will be no rows inserted in the db
err = shareDB.WriteShareRecords(testutils.Context(t), configDigest, keyID, records)
require.NoError(tt, err)
rows, err := db.Query(`SELECT COUNT(*) AS count FROM dkg_shares`)
require.NoError(tt, err)
t.Cleanup(func() { assert.NoError(t, rows.Close()) })
var count int
for rows.Next() {
require.NoError(tt, rows.Scan(&count))
}
require.NoError(tt, rows.Err())
require.Equal(tt, 0, count)
})`
$DIR/core/services/ocr2/plugins/dkg/persistence/db_test.go: `.RawMarshalPlayerIdxInt(ocr2vrftypes.PlayerIdxInt(1))`
$DIR/core/services/ocr2/plugins/dkg/persistence/db_test.go: `.PlayerIdxInt(1)`
$DIR/core/services/ocr2/plugins/dkg/persistence/db_test.go: `.UnmarshalPlayerIdx(b)`
$DIR/core/services/ocr2/plugins/dkg/persistence/db_test.go: `.WriteShareRecords(testutils.Context(t), configDigest, keyID, records)`
$DIR/core/services/ocr2/plugins/dkg/persistence/db_test.go: `.Context(t)`
$DIR/core/services/ocr2/plugins/dkg/persistence/db_test.go: `.Query(`SELECT COUNT(*) AS count FROM dkg_shares`)`
$DIR/core/services/ocr2/plugins/dkg/persistence/db_test.go: `.Cleanup(func() { assert.NoError(t, rows.Close()) })`
$DIR/core/services/ocr2/plugins/dkg/persistence/db_test.go: `.Next()`
$DIR/core/services/ocr2/plugins/dkg/persistence/db_test.go: `.RawMarshalPlayerIdxInt(ocr2vrftypes.PlayerIdxInt(i))`
$DIR/core/services/ocr2/plugins/dkg/persistence/db_test.go: `.PlayerIdxInt(i)`
$DIR/core/services/ocr2/plugins/dkg/persistence/db_test.go: `.UnmarshalPlayerIdx(b)`
$DIR/core/services/ocr2/plugins/dkg/persistence/db_test.go: `.Keccak256Hash([]byte(fmt.Sprintf("%d", i)))`
$DIR/core/services/ocr2/plugins/dkg/persistence/db_test.go: `.Sprintf("%d", i)`
$DIR/core/services/ocr2/plugins/dkg/persistence/db_test.go: `.Keccak256Hash(shareRecord[:])`
$DIR/core/services/ocr2/plugins/dkg/persistence/db_test.go: `.WriteShareRecords(testutils.Context(t), configDigest, keyID, records)`
$DIR/core/services/ocr2/plugins/dkg/persistence/db_test.go: `.Context(t)`
$DIR/core/services/ocr2/plugins/dkg/persistence/db_test.go: `.Query(`SELECT COUNT(*) AS count FROM dkg_shares`)`
$DIR/core/services/ocr2/plugins/dkg/persistence/db_test.go: `.Cleanup(func() { assert.NoError(t, rows.Close()) })`
$DIR/core/services/ocr2/plugins/dkg/persistence/db_test.go: `.Next()`
$DIR/core/services/ocr2/plugins/dkg/persistence/db_test.go: `.Random32Byte()`
$DIR/core/services/ocr2/plugins/dkg/persistence/db_test.go: `.Random32Byte()`
$DIR/core/services/ocr2/plugins/dkg/persistence/db_test.go: `.RawMarshalPlayerIdxInt(ocr2vrftypes.PlayerIdxInt(i))`
$DIR/core/services/ocr2/plugins/dkg/persistence/db_test.go: `.PlayerIdxInt(i)`
$DIR/core/services/ocr2/plugins/dkg/persistence/db_test.go: `.UnmarshalPlayerIdx(b)`
$DIR/core/services/ocr2/plugins/dkg/persistence/db_test.go: `.Keccak256Hash([]byte(fmt.Sprintf("%d", i)))`
$DIR/core/services/ocr2/plugins/dkg/persistence/db_test.go: `.Sprintf("%d", i)`
$DIR/core/services/ocr2/plugins/dkg/persistence/db_test.go: `.GetHash(shareRecord[:])`
$DIR/core/services/ocr2/plugins/dkg/persistence/db_test.go: `.WriteShareRecords(testutils.Context(t), configDigest, keyID, expectedRecords)`
$DIR/core/services/ocr2/plugins/dkg/persistence/db_test.go: `.Context(t)`
$DIR/core/services/ocr2/plugins/dkg/persistence/db_test.go: `.ReadShareRecords(configDigest, keyID)`
$DIR/core/services/ocr2/plugins/functions/aggregation_test.go: `t.Run(test.name, func(t *testing.T) {
result, err := functions.Aggregate(test.mode, test.input)
require.NoError(t, err)
require.Equal(t, test.expected, result)
})`
$DIR/core/services/ocr2/plugins/functions/aggregation_test.go: `.CanAggregate(0, 0, obs[:0])`
$DIR/core/services/ocr2/plugins/functions/aggregation_test.go: `.Run(test.name, func(t *testing.T) {
result, err := functions.Aggregate(test.mode, test.input)
require.NoError(t, err)
require.Equal(t, test.expected, result)
})`
$DIR/core/services/ocr2/plugins/functions/aggregation_test.go: `.Aggregate(test.mode, test.input)`
$DIR/core/services/ocr2/plugins/functions/config/config_test.go: `.Marshal(configProto)`
$DIR/core/services/ocr2/plugins/functions/config/config_test.go: `.S4ConfigDecoder(configBytes)`
$DIR/core/services/ocr2/plugins/functions/encoding/abi_codec_test.go: `_, err = encoding.SliceToByte32([]byte("0123456789012345678901234567890123456789"))`
$DIR/core/services/ocr2/plugins/functions/encoding/abi_codec_test.go: `expected[i] = byte(i)`
$DIR/core/services/ocr2/plugins/functions/encoding/abi_codec_test.go: `.NewReportCodec(1)`
$DIR/core/services/ocr2/plugins/functions/encoding/abi_codec_test.go: `.Sprintf("%032d", 123)`
$DIR/core/services/ocr2/plugins/functions/encoding/abi_codec_test.go: `.Sprintf("%032d", 4321)`
$DIR/core/services/ocr2/plugins/functions/encoding/abi_codec_test.go: `.EncodeReport(report)`
$DIR/core/services/ocr2/plugins/functions/encoding/abi_codec_test.go: `.DecodeReport(encoded)`
$DIR/core/services/ocr2/plugins/functions/encoding/abi_codec_test.go: `.SliceToByte32([]byte("abcd"))`
$DIR/core/services/ocr2/plugins/functions/encoding/abi_codec_test.go: `.SliceToByte32([]byte("0123456789012345678901234567890123456789"))`
$DIR/core/services/ocr2/plugins/functions/encoding/abi_codec_test.go: `.SliceToByte32(expected[:])`
$DIR/core/services/ocr2/plugins/functions/integration_tests/v1/functions_integration_test.go: `utils.SetupRouterRoutes(t, b, owner, routerContract, active.Address, proposed.Address, allowListContractAddress)`
$DIR/core/services/ocr2/plugins/functions/integration_tests/v1/functions_integration_test.go: `utils.SetOracleConfig(t, b, owner, active.Contract, oracleIdentities, batchSize, &pluginConfig)`
$DIR/core/services/ocr2/plugins/functions/integration_tests/v1/functions_integration_test.go: `b.Commit()`
$DIR/core/services/ocr2/plugins/functions/integration_tests/v1/functions_integration_test.go: `utils.SetupRouterRoutes(t, b, owner, routerContract, active.Address, proposed.Address, allowListContractAddress)`
$DIR/core/services/ocr2/plugins/functions/integration_tests/v1/functions_integration_test.go: `utils.SetOracleConfig(t, b, owner, active.Contract, oracleIdentities, batchSize, &pluginConfig)`
$DIR/core/services/ocr2/plugins/functions/integration_tests/v1/functions_integration_test.go: `b.Commit()`
$DIR/core/services/ocr2/plugins/functions/integration_tests/v1/functions_integration_test.go: `utils.SetupRouterRoutes(t, b, owner, routerContract, active.Address, proposed.Address, allowListContractAddress)`
$DIR/core/services/ocr2/plugins/functions/integration_tests/v1/functions_integration_test.go: `utils.SetOracleConfig(t, b, owner, active.Contract, oracleIdentities, batchSize, &pluginConfig)`
$DIR/core/services/ocr2/plugins/functions/integration_tests/v1/functions_integration_test.go: `utils.SetOracleConfig(t, b, owner, proposed.Contract, oracleIdentities, batchSize, &pluginConfig)`
$DIR/core/services/ocr2/plugins/functions/integration_tests/v1/functions_integration_test.go: `utils.ClientTestRequests(t, owner, b, linkToken, routerAddress, routerContract, allowListContract, clientContracts, requestLenBytes, utils.DefaultSecretsUrlsBytes, subscriptionId, 1*time.Minute)`
$DIR/core/services/ocr2/plugins/functions/integration_tests/v1/functions_integration_test.go: `b.Commit()`
$DIR/core/services/ocr2/plugins/functions/integration_tests/v1/functions_integration_test.go: `.StartNewChainWithContracts(t, nClients)`
$DIR/core/services/ocr2/plugins/functions/integration_tests/v1/functions_integration_test.go: `.Stop()`
$DIR/core/services/ocr2/plugins/functions/integration_tests/v1/functions_integration_test.go: `.SetupRouterRoutes(t, b, owner, routerContract, active.Address, proposed.Address, allowListContractAddress)`
$DIR/core/services/ocr2/plugins/functions/integration_tests/v1/functions_integration_test.go: `.CreateFunctionsNodes(t, owner, b, routerAddress, nOracleNodes, maxGas, nil, nil)`
$DIR/core/services/ocr2/plugins/functions/integration_tests/v1/functions_integration_test.go: `.SetOracleConfig(t, b, owner, active.Contract, oracleIdentities, batchSize, &pluginConfig)`
$DIR/core/services/ocr2/plugins/functions/integration_tests/v1/functions_integration_test.go: `.CreateAndFundSubscriptions(t, b, owner, linkToken, routerAddress, routerContract, clientContracts, allowListContract)`
$DIR/core/services/ocr2/plugins/functions/integration_tests/v1/functions_integration_test.go: `.Commit()`
$DIR/core/services/ocr2/plugins/functions/integration_tests/v1/functions_integration_test.go: `.StartNewChainWithContracts(t, nClients)`
$DIR/core/services/ocr2/plugins/functions/integration_tests/v1/functions_integration_test.go: `.Stop()`
$DIR/core/services/ocr2/plugins/functions/integration_tests/v1/functions_integration_test.go: `.SetupRouterRoutes(t, b, owner, routerContract, active.Address, proposed.Address, allowListContractAddress)`
$DIR/core/services/ocr2/plugins/functions/integration_tests/v1/functions_integration_test.go: `.CreateFunctionsNodes(t, owner, b, routerAddress, nOracleNodes, maxGas, utils.ExportedOcr2Keystores, utils.MockThresholdKeyShares)`
$DIR/core/services/ocr2/plugins/functions/integration_tests/v1/functions_integration_test.go: `.SetOracleConfig(t, b, owner, active.Contract, oracleIdentities, batchSize, &pluginConfig)`
$DIR/core/services/ocr2/plugins/functions/integration_tests/v1/functions_integration_test.go: `.CreateAndFundSubscriptions(t, b, owner, linkToken, routerAddress, routerContract, clientContracts, allowListContract)`
$DIR/core/services/ocr2/plugins/functions/integration_tests/v1/functions_integration_test.go: `.Commit()`
$DIR/core/services/ocr2/plugins/functions/integration_tests/v1/functions_integration_test.go: `.StartNewChainWithContracts(t, nClients)`
$DIR/core/services/ocr2/plugins/functions/integration_tests/v1/functions_integration_test.go: `.Stop()`
$DIR/core/services/ocr2/plugins/functions/integration_tests/v1/functions_integration_test.go: `.SetupRouterRoutes(t, b, owner, routerContract, active.Address, proposed.Address, allowListContractAddress)`
$DIR/core/services/ocr2/plugins/functions/integration_tests/v1/functions_integration_test.go: `.CreateFunctionsNodes(t, owner, b, routerAddress, nOracleNodes, maxGas, utils.ExportedOcr2Keystores, utils.MockThresholdKeyShares)`
$DIR/core/services/ocr2/plugins/functions/integration_tests/v1/functions_integration_test.go: `.SetOracleConfig(t, b, owner, active.Contract, oracleIdentities, batchSize, &pluginConfig)`
$DIR/core/services/ocr2/plugins/functions/integration_tests/v1/functions_integration_test.go: `.SetOracleConfig(t, b, owner, proposed.Contract, oracleIdentities, batchSize, &pluginConfig)`
$DIR/core/services/ocr2/plugins/functions/integration_tests/v1/functions_integration_test.go: `.CreateAndFundSubscriptions(t, b, owner, linkToken, routerAddress, routerContract, clientContracts, allowListContract)`
$DIR/core/services/ocr2/plugins/functions/integration_tests/v1/functions_integration_test.go: `.ClientTestRequests(t, owner, b, linkToken, routerAddress, routerContract, allowListContract, clientContracts, requestLenBytes, utils.DefaultSecretsUrlsBytes, subscriptionId, 1*time.Minute)`
$DIR/core/services/ocr2/plugins/functions/integration_tests/v1/functions_integration_test.go: `.UpdateContracts(owner)`
$DIR/core/services/ocr2/plugins/functions/integration_tests/v1/functions_integration_test.go: `.Commit()`
$DIR/core/services/ocr2/plugins/functions/plugin_test.go: `ethKeystore.On("EnabledKeysForChain", mock.Anything, mock.Anything).Return([]ethkey.KeyV2{keyV2}, nil)`
$DIR/core/services/ocr2/plugins/functions/plugin_test.go: `_, err = functions.NewConnector(ctx, config, ethKeystore, chainID, s4Storage, allowlist, rateLimiter, subscriptions, listener, offchainTransmitter, logger.TestLogger(t))`
$DIR/core/services/ocr2/plugins/functions/plugin_test.go: `ethKeystore.On("EnabledKeysForChain", mock.Anything, mock.Anything).Return([]ethkey.KeyV2{{Address: common.HexToAddress(addresses[1])}}, nil)`
$DIR/core/services/ocr2/plugins/functions/plugin_test.go: `_, err = functions.NewConnector(ctx, config, ethKeystore, chainID, s4Storage, allowlist, rateLimiter, subscriptions, listener, offchainTransmitter, logger.TestLogger(t))`
$DIR/core/services/ocr2/plugins/functions/plugin_test.go: `.Context(t)`
$DIR/core/services/ocr2/plugins/functions/plugin_test.go: `.NewV2()`
$DIR/core/services/ocr2/plugins/functions/plugin_test.go: `.Address.String()`
$DIR/core/services/ocr2/plugins/functions/plugin_test.go: `.NewInt(80001)`
$DIR/core/services/ocr2/plugins/functions/plugin_test.go: `.NewEth(t)`
$DIR/core/services/ocr2/plugins/functions/plugin_test.go: `.NewStorage(t)`
$DIR/core/services/ocr2/plugins/functions/plugin_test.go: `.NewOnchainAllowlist(t)`
$DIR/core/services/ocr2/plugins/functions/plugin_test.go: `.NewOnchainSubscriptions(t)`
$DIR/core/services/ocr2/plugins/functions/plugin_test.go: `.NewRateLimiter(hc.RateLimiterConfig{GlobalRPS: 100.0, GlobalBurst: 100, PerSenderRPS: 100.0, PerSenderBurst: 100})`
$DIR/core/services/ocr2/plugins/functions/plugin_test.go: `.NewFunctionsListener(t)`
$DIR/core/services/ocr2/plugins/functions/plugin_test.go: `.NewOffchainTransmitter(t)`
$DIR/core/services/ocr2/plugins/functions/plugin_test.go: `.On("EnabledKeysForChain", mock.Anything, mock.Anything)`
$DIR/core/services/ocr2/plugins/functions/plugin_test.go: `.Return([]ethkey.KeyV2{keyV2}, nil)`
$DIR/core/services/ocr2/plugins/functions/plugin_test.go: `.NewConnector(ctx, config, ethKeystore, chainID, s4Storage, allowlist, rateLimiter, subscriptions, listener, offchainTransmitter, logger.TestLogger(t))`
$DIR/core/services/ocr2/plugins/functions/plugin_test.go: `.TestLogger(t)`
$DIR/core/services/ocr2/plugins/functions/plugin_test.go: `.Context(t)`
$DIR/core/services/ocr2/plugins/functions/plugin_test.go: `.NewInt(80001)`
$DIR/core/services/ocr2/plugins/functions/plugin_test.go: `.NewEth(t)`
$DIR/core/services/ocr2/plugins/functions/plugin_test.go: `.NewStorage(t)`
$DIR/core/services/ocr2/plugins/functions/plugin_test.go: `.NewOnchainAllowlist(t)`
$DIR/core/services/ocr2/plugins/functions/plugin_test.go: `.NewOnchainSubscriptions(t)`
$DIR/core/services/ocr2/plugins/functions/plugin_test.go: `.NewRateLimiter(hc.RateLimiterConfig{GlobalRPS: 100.0, GlobalBurst: 100, PerSenderRPS: 100.0, PerSenderBurst: 100})`
$DIR/core/services/ocr2/plugins/functions/plugin_test.go: `.NewFunctionsListener(t)`
$DIR/core/services/ocr2/plugins/functions/plugin_test.go: `.NewOffchainTransmitter(t)`
$DIR/core/services/ocr2/plugins/functions/plugin_test.go: `.On("EnabledKeysForChain", mock.Anything, mock.Anything)`
$DIR/core/services/ocr2/plugins/functions/plugin_test.go: `.Return([]ethkey.KeyV2{{Address: common.HexToAddress(addresses[1])}}, nil)`
$DIR/core/services/ocr2/plugins/functions/plugin_test.go: `.HexToAddress(addresses[1])`
$DIR/core/services/ocr2/plugins/functions/plugin_test.go: `.NewConnector(ctx, config, ethKeystore, chainID, s4Storage, allowlist, rateLimiter, subscriptions, listener, offchainTransmitter, logger.TestLogger(t))`
$DIR/core/services/ocr2/plugins/functions/plugin_test.go: `.TestLogger(t)`
$DIR/core/services/ocr2/plugins/functions/reporting_test.go: `orm.On("FindOldestEntriesByState", mock.Anything, functions_srv.RESULT_READY, uint32(batchSize), mock.Anything).Return(reqs, nil)`
$DIR/core/services/ocr2/plugins/functions/reporting_test.go: `err = proto.Unmarshal(q, queryProto)`
$DIR/core/services/ocr2/plugins/functions/reporting_test.go: `reqs[0].CoordinatorContractAddress = &common.Address{1}`
$DIR/core/services/ocr2/plugins/functions/reporting_test.go: `reqs[1].CoordinatorContractAddress = &common.Address{2}`
$DIR/core/services/ocr2/plugins/functions/reporting_test.go: `orm.On("FindOldestEntriesByState", mock.Anything, functions_srv.RESULT_READY, uint32(batchSize), mock.Anything).Return(reqs, nil)`
$DIR/core/services/ocr2/plugins/functions/reporting_test.go: `err = proto.Unmarshal(q, queryProto)`
$DIR/core/services/ocr2/plugins/functions/reporting_test.go: `orm.On("FindById", mock.Anything, req1.RequestID, mock.Anything).Return(&req1, nil)`
$DIR/core/services/ocr2/plugins/functions/reporting_test.go: `orm.On("FindById", mock.Anything, req2.RequestID, mock.Anything).Return(&req2, nil)`
$DIR/core/services/ocr2/plugins/functions/reporting_test.go: `orm.On("FindById", mock.Anything, req3.RequestID, mock.Anything).Return(&req3, nil)`
$DIR/core/services/ocr2/plugins/functions/reporting_test.go: `orm.On("FindById", mock.Anything, req4.RequestID, mock.Anything).Return(&req4, nil)`
$DIR/core/services/ocr2/plugins/functions/reporting_test.go: `orm.On("FindById", mock.Anything, nonexistentId, mock.Anything).Return(nil, errors.New("nonexistent ID"))`
$DIR/core/services/ocr2/plugins/functions/reporting_test.go: `err = proto.Unmarshal(obs, observationProto)`
$DIR/core/services/ocr2/plugins/functions/reporting_test.go: `orm.On("FindById", mock.Anything, req1.RequestID, mock.Anything).Return(&req1, nil)`
$DIR/core/services/ocr2/plugins/functions/reporting_test.go: `queryProto.RequestIDs = [][]byte{invalidId, req1.RequestID[:], invalidId}`
$DIR/core/services/ocr2/plugins/functions/reporting_test.go: `err = proto.Unmarshal(obs, observationProto)`
$DIR/core/services/ocr2/plugins/functions/reporting_test.go: `obs = append(obs, newObservation(t, 3, procReq1, procReq2))`
$DIR/core/services/ocr2/plugins/functions/reporting_test.go: `produced, reportBytes, err = plugin.Report(testutils.Context(t), types.ReportTimestamp{}, query, obs)`
$DIR/core/services/ocr2/plugins/functions/reporting_test.go: `orm.On("FindById", mock.Anything, req1.RequestID, mock.Anything).Return(nil, errors.New("nonexistent ID"))`
$DIR/core/services/ocr2/plugins/functions/reporting_test.go: `orm.On("FindById", mock.Anything, req2.RequestID, mock.Anything).Return(&req2, nil)`
$DIR/core/services/ocr2/plugins/functions/reporting_test.go: `orm.On("SetFinalized", mock.Anything, req2.RequestID, mock.Anything, mock.Anything, mock.Anything).Return(nil)`
$DIR/core/services/ocr2/plugins/functions/reporting_test.go: `orm.On("FindById", mock.Anything, req3.RequestID, mock.Anything).Return(&req3, nil)`
$DIR/core/services/ocr2/plugins/functions/reporting_test.go: `orm.On("SetFinalized", mock.Anything, req3.RequestID, mock.Anything, mock.Anything, mock.Anything).Return(errors.New("same state"))`
$DIR/core/services/ocr2/plugins/functions/reporting_test.go: `orm.On("FindById", mock.Anything, req4.RequestID, mock.Anything).Return(&req4, nil)`
$DIR/core/services/ocr2/plugins/functions/reporting_test.go: `orm.On("SetFinalized", mock.Anything, req4.RequestID, mock.Anything, mock.Anything, mock.Anything).Return(errors.New("already timed out"))`
$DIR/core/services/ocr2/plugins/functions/reporting_test.go: `should, err = plugin.ShouldAcceptFinalizedReport(testutils.Context(t), types.ReportTimestamp{}, getReportBytes(t, codec, req2, req3))`
$DIR/core/services/ocr2/plugins/functions/reporting_test.go: `should, err = plugin.ShouldAcceptFinalizedReport(testutils.Context(t), types.ReportTimestamp{}, getReportBytes(t, codec, req1, req4))`
$DIR/core/services/ocr2/plugins/functions/reporting_test.go: `req1.OnchainMetadata = []byte(functions_srv.OffchainRequestMarker)`
$DIR/core/services/ocr2/plugins/functions/reporting_test.go: `orm.On("FindById", mock.Anything, req1.RequestID, mock.Anything).Return(&req1, nil)`
$DIR/core/services/ocr2/plugins/functions/reporting_test.go: `orm.On("SetFinalized", mock.Anything, req1.RequestID, mock.Anything, mock.Anything, mock.Anything).Return(nil)`
$DIR/core/services/ocr2/plugins/functions/reporting_test.go: `offchainTransmitter.On("TransmitReport", mock.Anything, mock.Anything).Return(nil)`
$DIR/core/services/ocr2/plugins/functions/reporting_test.go: `orm.On("FindById", mock.Anything, req1.RequestID, mock.Anything).Return(nil, errors.New("nonexistent ID"))`
$DIR/core/services/ocr2/plugins/functions/reporting_test.go: `orm.On("FindById", mock.Anything, req2.RequestID, mock.Anything).Return(&req2, nil)`
$DIR/core/services/ocr2/plugins/functions/reporting_test.go: `orm.On("FindById", mock.Anything, req3.RequestID, mock.Anything).Return(&req3, nil)`
$DIR/core/services/ocr2/plugins/functions/reporting_test.go: `orm.On("FindById", mock.Anything, req4.RequestID, mock.Anything).Return(&req4, nil)`
$DIR/core/services/ocr2/plugins/functions/reporting_test.go: `orm.On("FindById", mock.Anything, req5.RequestID, mock.Anything).Return(&req5, nil)`
$DIR/core/services/ocr2/plugins/functions/reporting_test.go: `should, err = plugin.ShouldTransmitAcceptedReport(testutils.Context(t), types.ReportTimestamp{}, getReportBytes(t, codec, req2, req3))`
$DIR/core/services/ocr2/plugins/functions/reporting_test.go: `should, err = plugin.ShouldTransmitAcceptedReport(testutils.Context(t), types.ReportTimestamp{}, getReportBytes(t, codec, req1, req2))`
$DIR/core/services/ocr2/plugins/functions/reporting_test.go: `newCoord, err = functions.ShouldIncludeCoordinator(zeroAddr, nil)`
$DIR/core/services/ocr2/plugins/functions/reporting_test.go: `newCoord, err = functions.ShouldIncludeCoordinator(coord1, nil)`
$DIR/core/services/ocr2/plugins/functions/reporting_test.go: `newCoord, err = functions.ShouldIncludeCoordinator(coord1, newCoord)`
$DIR/core/services/ocr2/plugins/functions/reporting_test.go: `newCoord, err = functions.ShouldIncludeCoordinator(coord2, newCoord)`
$DIR/core/services/ocr2/plugins/functions/reporting_test.go: `.On("FindOldestEntriesByState", mock.Anything, functions_srv.RESULT_READY, uint32(batchSize), mock.Anything)`
$DIR/core/services/ocr2/plugins/functions/reporting_test.go: `.Return(reqs, nil)`
$DIR/core/services/ocr2/plugins/functions/reporting_test.go: `.Query(testutils.Context(t), types.ReportTimestamp{})`
$DIR/core/services/ocr2/plugins/functions/reporting_test.go: `.Context(t)`
$DIR/core/services/ocr2/plugins/functions/reporting_test.go: `.Unmarshal(q, queryProto)`
$DIR/core/services/ocr2/plugins/functions/reporting_test.go: `.On("FindOldestEntriesByState", mock.Anything, functions_srv.RESULT_READY, uint32(batchSize), mock.Anything)`
$DIR/core/services/ocr2/plugins/functions/reporting_test.go: `.Return(reqs, nil)`
$DIR/core/services/ocr2/plugins/functions/reporting_test.go: `.Query(testutils.Context(t), types.ReportTimestamp{})`
$DIR/core/services/ocr2/plugins/functions/reporting_test.go: `.Context(t)`
$DIR/core/services/ocr2/plugins/functions/reporting_test.go: `.Unmarshal(q, queryProto)`
$DIR/core/services/ocr2/plugins/functions/reporting_test.go: `.On("FindById", mock.Anything, req1.RequestID, mock.Anything)`
$DIR/core/services/ocr2/plugins/functions/reporting_test.go: `.Return(&req1, nil)`
$DIR/core/services/ocr2/plugins/functions/reporting_test.go: `.On("FindById", mock.Anything, req2.RequestID, mock.Anything)`
$DIR/core/services/ocr2/plugins/functions/reporting_test.go: `.Return(&req2, nil)`
$DIR/core/services/ocr2/plugins/functions/reporting_test.go: `.On("FindById", mock.Anything, req3.RequestID, mock.Anything)`
$DIR/core/services/ocr2/plugins/functions/reporting_test.go: `.Return(&req3, nil)`
$DIR/core/services/ocr2/plugins/functions/reporting_test.go: `.On("FindById", mock.Anything, req4.RequestID, mock.Anything)`
$DIR/core/services/ocr2/plugins/functions/reporting_test.go: `.Return(&req4, nil)`
$DIR/core/services/ocr2/plugins/functions/reporting_test.go: `.On("FindById", mock.Anything, nonexistentId, mock.Anything)`
$DIR/core/services/ocr2/plugins/functions/reporting_test.go: `.Return(nil, errors.New("nonexistent ID"))`
$DIR/core/services/ocr2/plugins/functions/reporting_test.go: `.New("nonexistent ID")`
$DIR/core/services/ocr2/plugins/functions/reporting_test.go: `.Observation(testutils.Context(t), types.ReportTimestamp{}, query)`
$DIR/core/services/ocr2/plugins/functions/reporting_test.go: `.Context(t)`
$DIR/core/services/ocr2/plugins/functions/reporting_test.go: `.Unmarshal(obs, observationProto)`
$DIR/core/services/ocr2/plugins/functions/reporting_test.go: `.On("FindById", mock.Anything, req1.RequestID, mock.Anything)`
$DIR/core/services/ocr2/plugins/functions/reporting_test.go: `.Return(&req1, nil)`
$DIR/core/services/ocr2/plugins/functions/reporting_test.go: `.Marshal(&queryProto)`
$DIR/core/services/ocr2/plugins/functions/reporting_test.go: `.Observation(testutils.Context(t), types.ReportTimestamp{}, marshalled)`
$DIR/core/services/ocr2/plugins/functions/reporting_test.go: `.Context(t)`
$DIR/core/services/ocr2/plugins/functions/reporting_test.go: `.Unmarshal(obs, observationProto)`
$DIR/core/services/ocr2/plugins/functions/reporting_test.go: `.Report(testutils.Context(t), types.ReportTimestamp{}, query, obs)`
$DIR/core/services/ocr2/plugins/functions/reporting_test.go: `.Context(t)`
$DIR/core/services/ocr2/plugins/functions/reporting_test.go: `.Report(testutils.Context(t), types.ReportTimestamp{}, query, obs)`
$DIR/core/services/ocr2/plugins/functions/reporting_test.go: `.Context(t)`
$DIR/core/services/ocr2/plugins/functions/reporting_test.go: `.DecodeReport(reportBytes)`
$DIR/core/services/ocr2/plugins/functions/reporting_test.go: `.Report(testutils.Context(t), types.ReportTimestamp{}, query, obs)`
$DIR/core/services/ocr2/plugins/functions/reporting_test.go: `.Context(t)`
$DIR/core/services/ocr2/plugins/functions/reporting_test.go: `.DecodeReport(reportBytes)`
$DIR/core/services/ocr2/plugins/functions/reporting_test.go: `.Report(testutils.Context(t), types.ReportTimestamp{}, query, obs)`
$DIR/core/services/ocr2/plugins/functions/reporting_test.go: `.Context(t)`
$DIR/core/services/ocr2/plugins/functions/reporting_test.go: `.DecodeReport(reportBytes)`
$DIR/core/services/ocr2/plugins/functions/reporting_test.go: `.Report(testutils.Context(t), types.ReportTimestamp{}, query, obs)`
$DIR/core/services/ocr2/plugins/functions/reporting_test.go: `.Context(t)`
$DIR/core/services/ocr2/plugins/functions/reporting_test.go: `.DecodeReport(reportBytes)`
$DIR/core/services/ocr2/plugins/functions/reporting_test.go: `.Report(testutils.Context(t), types.ReportTimestamp{}, query, obs)`
$DIR/core/services/ocr2/plugins/functions/reporting_test.go: `.Context(t)`
$DIR/core/services/ocr2/plugins/functions/reporting_test.go: `.Report(testutils.Context(t), types.ReportTimestamp{}, query, obs)`
$DIR/core/services/ocr2/plugins/functions/reporting_test.go: `.Context(t)`
$DIR/core/services/ocr2/plugins/functions/reporting_test.go: `.DecodeReport(reportBytes1)`
$DIR/core/services/ocr2/plugins/functions/reporting_test.go: `.Report(testutils.Context(t), types.ReportTimestamp{}, query, obs)`
$DIR/core/services/ocr2/plugins/functions/reporting_test.go: `.Context(t)`
$DIR/core/services/ocr2/plugins/functions/reporting_test.go: `.On("FindById", mock.Anything, req1.RequestID, mock.Anything)`
$DIR/core/services/ocr2/plugins/functions/reporting_test.go: `.Return(nil, errors.New("nonexistent ID"))`
$DIR/core/services/ocr2/plugins/functions/reporting_test.go: `.New("nonexistent ID")`
$DIR/core/services/ocr2/plugins/functions/reporting_test.go: `.On("FindById", mock.Anything, req2.RequestID, mock.Anything)`
$DIR/core/services/ocr2/plugins/functions/reporting_test.go: `.Return(&req2, nil)`
$DIR/core/services/ocr2/plugins/functions/reporting_test.go: `.On("SetFinalized", mock.Anything, req2.RequestID, mock.Anything, mock.Anything, mock.Anything)`
$DIR/core/services/ocr2/plugins/functions/reporting_test.go: `.Return(nil)`
$DIR/core/services/ocr2/plugins/functions/reporting_test.go: `.On("FindById", mock.Anything, req3.RequestID, mock.Anything)`
$DIR/core/services/ocr2/plugins/functions/reporting_test.go: `.Return(&req3, nil)`
$DIR/core/services/ocr2/plugins/functions/reporting_test.go: `.On("SetFinalized", mock.Anything, req3.RequestID, mock.Anything, mock.Anything, mock.Anything)`
$DIR/core/services/ocr2/plugins/functions/reporting_test.go: `.Return(errors.New("same state"))`
$DIR/core/services/ocr2/plugins/functions/reporting_test.go: `.New("same state")`
$DIR/core/services/ocr2/plugins/functions/reporting_test.go: `.On("FindById", mock.Anything, req4.RequestID, mock.Anything)`
$DIR/core/services/ocr2/plugins/functions/reporting_test.go: `.Return(&req4, nil)`
$DIR/core/services/ocr2/plugins/functions/reporting_test.go: `.On("SetFinalized", mock.Anything, req4.RequestID, mock.Anything, mock.Anything, mock.Anything)`
$DIR/core/services/ocr2/plugins/functions/reporting_test.go: `.Return(errors.New("already timed out"))`
$DIR/core/services/ocr2/plugins/functions/reporting_test.go: `.New("already timed out")`
$DIR/core/services/ocr2/plugins/functions/reporting_test.go: `.ShouldAcceptFinalizedReport(testutils.Context(t), types.ReportTimestamp{}, getReportBytes(t, codec, req3, req4))`
$DIR/core/services/ocr2/plugins/functions/reporting_test.go: `.Context(t)`
$DIR/core/services/ocr2/plugins/functions/reporting_test.go: `.ShouldAcceptFinalizedReport(testutils.Context(t), types.ReportTimestamp{}, getReportBytes(t, codec, req2, req3))`
$DIR/core/services/ocr2/plugins/functions/reporting_test.go: `.Context(t)`
$DIR/core/services/ocr2/plugins/functions/reporting_test.go: `.ShouldAcceptFinalizedReport(testutils.Context(t), types.ReportTimestamp{}, getReportBytes(t, codec, req1, req4))`
$DIR/core/services/ocr2/plugins/functions/reporting_test.go: `.Context(t)`
$DIR/core/services/ocr2/plugins/functions/reporting_test.go: `.On("FindById", mock.Anything, req1.RequestID, mock.Anything)`
$DIR/core/services/ocr2/plugins/functions/reporting_test.go: `.Return(&req1, nil)`
$DIR/core/services/ocr2/plugins/functions/reporting_test.go: `.On("SetFinalized", mock.Anything, req1.RequestID, mock.Anything, mock.Anything, mock.Anything)`
$DIR/core/services/ocr2/plugins/functions/reporting_test.go: `.Return(nil)`
$DIR/core/services/ocr2/plugins/functions/reporting_test.go: `.On("TransmitReport", mock.Anything, mock.Anything)`
$DIR/core/services/ocr2/plugins/functions/reporting_test.go: `.Return(nil)`
$DIR/core/services/ocr2/plugins/functions/reporting_test.go: `.ShouldAcceptFinalizedReport(testutils.Context(t), types.ReportTimestamp{}, getReportBytes(t, codec, req1))`
$DIR/core/services/ocr2/plugins/functions/reporting_test.go: `.Context(t)`
$DIR/core/services/ocr2/plugins/functions/reporting_test.go: `.On("FindById", mock.Anything, req1.RequestID, mock.Anything)`
$DIR/core/services/ocr2/plugins/functions/reporting_test.go: `.Return(nil, errors.New("nonexistent ID"))`
$DIR/core/services/ocr2/plugins/functions/reporting_test.go: `.New("nonexistent ID")`
$DIR/core/services/ocr2/plugins/functions/reporting_test.go: `.On("FindById", mock.Anything, req2.RequestID, mock.Anything)`
$DIR/core/services/ocr2/plugins/functions/reporting_test.go: `.Return(&req2, nil)`
$DIR/core/services/ocr2/plugins/functions/reporting_test.go: `.On("FindById", mock.Anything, req3.RequestID, mock.Anything)`
$DIR/core/services/ocr2/plugins/functions/reporting_test.go: `.Return(&req3, nil)`
$DIR/core/services/ocr2/plugins/functions/reporting_test.go: `.On("FindById", mock.Anything, req4.RequestID, mock.Anything)`
$DIR/core/services/ocr2/plugins/functions/reporting_test.go: `.Return(&req4, nil)`
$DIR/core/services/ocr2/plugins/functions/reporting_test.go: `.On("FindById", mock.Anything, req5.RequestID, mock.Anything)`
$DIR/core/services/ocr2/plugins/functions/reporting_test.go: `.Return(&req5, nil)`
$DIR/core/services/ocr2/plugins/functions/reporting_test.go: `.ShouldTransmitAcceptedReport(testutils.Context(t), types.ReportTimestamp{}, getReportBytes(t, codec, req5, req4))`
$DIR/core/services/ocr2/plugins/functions/reporting_test.go: `.Context(t)`
$DIR/core/services/ocr2/plugins/functions/reporting_test.go: `.ShouldTransmitAcceptedReport(testutils.Context(t), types.ReportTimestamp{}, getReportBytes(t, codec, req2, req3))`
$DIR/core/services/ocr2/plugins/functions/reporting_test.go: `.Context(t)`
$DIR/core/services/ocr2/plugins/functions/reporting_test.go: `.ShouldTransmitAcceptedReport(testutils.Context(t), types.ReportTimestamp{}, getReportBytes(t, codec, req1, req2))`
$DIR/core/services/ocr2/plugins/functions/reporting_test.go: `.Context(t)`
$DIR/core/services/ocr2/plugins/functions/reporting_test.go: `.ShouldIncludeCoordinator(nil, nil)`
$DIR/core/services/ocr2/plugins/functions/reporting_test.go: `.ShouldIncludeCoordinator(zeroAddr, nil)`
$DIR/core/services/ocr2/plugins/functions/reporting_test.go: `.ShouldIncludeCoordinator(coord1, nil)`
$DIR/core/services/ocr2/plugins/functions/reporting_test.go: `.ShouldIncludeCoordinator(coord1, newCoord)`
$DIR/core/services/ocr2/plugins/functions/reporting_test.go: `.ShouldIncludeCoordinator(coord2, newCoord)`
$DIR/core/services/ocr2/plugins/generic/merge_test.go: `merge(vars, addedVars)`
$DIR/core/services/ocr2/plugins/generic/merge_test.go: `.DeepEqual(vars, map[string]interface{}{
"jb": map[string]interface{}{
"databaseID": "some-job-id",
"some-other-var": "foo",
},
"val": 0,
})`
$DIR/core/services/ocr2/plugins/generic/pipeline_runner_adapter_test.go: `testutils.SkipShortDB(t)`
$DIR/core/services/ocr2/plugins/generic/pipeline_runner_adapter_test.go: `err = keystore.Unlock(ctx, cfg.Password().Keystore())`
$DIR/core/services/ocr2/plugins/generic/pipeline_runner_adapter_test.go: `jb.Name = null.StringFrom("Job 1")`
$DIR/core/services/ocr2/plugins/generic/pipeline_runner_adapter_test.go: `jb.OCR2OracleSpec.TransmitterID = null.StringFrom(address.String())`
$DIR/core/services/ocr2/plugins/generic/pipeline_runner_adapter_test.go: `jb.OCR2OracleSpec.PluginConfig["juelsPerFeeCoinSource"] = juelsPerFeeCoinSource`
$DIR/core/services/ocr2/plugins/generic/pipeline_runner_adapter_test.go: `err = jobORM.CreateJob(ctx, &jb)`
$DIR/core/services/ocr2/plugins/generic/pipeline_runner_adapter_test.go: `.SkipShortDB(t)`
$DIR/core/services/ocr2/plugins/generic/pipeline_runner_adapter_test.go: `.Context(t)`
$DIR/core/services/ocr2/plugins/generic/pipeline_runner_adapter_test.go: `.TestLogger(t)`
$DIR/core/services/ocr2/plugins/generic/pipeline_runner_adapter_test.go: `.NewTestGeneralConfig(t)`
$DIR/core/services/ocr2/plugins/generic/pipeline_runner_adapter_test.go: `.Database()`
$DIR/core/services/ocr2/plugins/generic/pipeline_runner_adapter_test.go: `.URL()`
$DIR/core/services/ocr2/plugins/generic/pipeline_runner_adapter_test.go: `.NewConnection(url.String(), cfg.Database().Dialect(), cfg.Database())`
$DIR/core/services/ocr2/plugins/generic/pipeline_runner_adapter_test.go: `.String()`
$DIR/core/services/ocr2/plugins/generic/pipeline_runner_adapter_test.go: `.Database()`
$DIR/core/services/ocr2/plugins/generic/pipeline_runner_adapter_test.go: `.Dialect()`
$DIR/core/services/ocr2/plugins/generic/pipeline_runner_adapter_test.go: `.Database()`
$DIR/core/services/ocr2/plugins/generic/pipeline_runner_adapter_test.go: `.NewInMemory(db, utils.FastScryptParams, logger)`
$DIR/core/services/ocr2/plugins/generic/pipeline_runner_adapter_test.go: `.NewORM(db, logger, cfg.JobPipeline().MaxSuccessfulRuns())`
$DIR/core/services/ocr2/plugins/generic/pipeline_runner_adapter_test.go: `.JobPipeline()`
$DIR/core/services/ocr2/plugins/generic/pipeline_runner_adapter_test.go: `.MaxSuccessfulRuns()`
$DIR/core/services/ocr2/plugins/generic/pipeline_runner_adapter_test.go: `.NewORM(db)`
$DIR/core/services/ocr2/plugins/generic/pipeline_runner_adapter_test.go: `.NewORM(db, pipelineORM, bridgesORM, keystore, logger)`
$DIR/core/services/ocr2/plugins/generic/pipeline_runner_adapter_test.go: `.NewRunner(
pipelineORM,
bridgesORM,
cfg.JobPipeline(),
cfg.WebServer(),
nil,
keystore.Eth(),
keystore.VRF(),
logger,
http.DefaultClient,
http.DefaultClient,
)`
$DIR/core/services/ocr2/plugins/generic/pipeline_runner_adapter_test.go: `.JobPipeline()`
$DIR/core/services/ocr2/plugins/generic/pipeline_runner_adapter_test.go: `.WebServer()`
$DIR/core/services/ocr2/plugins/generic/pipeline_runner_adapter_test.go: `.Eth()`
$DIR/core/services/ocr2/plugins/generic/pipeline_runner_adapter_test.go: `.VRF()`
$DIR/core/services/ocr2/plugins/generic/pipeline_runner_adapter_test.go: `.Unlock(ctx, cfg.Password().Keystore())`
$DIR/core/services/ocr2/plugins/generic/pipeline_runner_adapter_test.go: `.Password()`
$DIR/core/services/ocr2/plugins/generic/pipeline_runner_adapter_test.go: `.Keystore()`
$DIR/core/services/ocr2/plugins/generic/pipeline_runner_adapter_test.go: `.ValidatedOracleSpecToml(testutils.Context(t), cfg.OCR2(), cfg.Insecure(), testspecs.GetOCR2EVMSpecMinimal(), nil)`
$DIR/core/services/ocr2/plugins/generic/pipeline_runner_adapter_test.go: `.Context(t)`
$DIR/core/services/ocr2/plugins/generic/pipeline_runner_adapter_test.go: `.OCR2()`
$DIR/core/services/ocr2/plugins/generic/pipeline_runner_adapter_test.go: `.Insecure()`
$DIR/core/services/ocr2/plugins/generic/pipeline_runner_adapter_test.go: `.GetOCR2EVMSpecMinimal()`
$DIR/core/services/ocr2/plugins/generic/pipeline_runner_adapter_test.go: `.MustInsertRandomKey(t, keystore.Eth())`
$DIR/core/services/ocr2/plugins/generic/pipeline_runner_adapter_test.go: `.Eth()`
$DIR/core/services/ocr2/plugins/generic/pipeline_runner_adapter_test.go: `.StringFrom("Job 1")`
$DIR/core/services/ocr2/plugins/generic/pipeline_runner_adapter_test.go: `.StringFrom(address.String())`
$DIR/core/services/ocr2/plugins/generic/pipeline_runner_adapter_test.go: `.String()`
$DIR/core/services/ocr2/plugins/generic/pipeline_runner_adapter_test.go: `.CreateJob(ctx, &jb)`
$DIR/core/services/ocr2/plugins/generic/pipeline_runner_adapter_test.go: `.NewPipelineRunnerAdapter(logger, jb, pr)`
$DIR/core/services/ocr2/plugins/generic/pipeline_runner_adapter_test.go: `.ExecuteRun(testutils.Context(t), spec, core.Vars{Vars: map[string]interface{}{"val": 1}}, core.Options{})`
$DIR/core/services/ocr2/plugins/generic/pipeline_runner_adapter_test.go: `.Context(t)`
$DIR/core/services/ocr2/plugins/generic/pipeline_runner_adapter_test.go: `.NewFromInt(3)`
$DIR/core/services/ocr2/plugins/generic/pipeline_runner_adapter_test.go: `.Equal(finalResult)`
$DIR/core/services/ocr2/plugins/generic/pipeline_runner_adapter_test.go: `.TestLogger(t)`
$DIR/core/services/ocr2/plugins/generic/pipeline_runner_adapter_test.go: `.New()`
$DIR/core/services/ocr2/plugins/generic/pipeline_runner_adapter_test.go: `.StringFrom("job-name")`
$DIR/core/services/ocr2/plugins/generic/pipeline_runner_adapter_test.go: `.NewPipelineRunnerAdapter(logger, job.Job{ID: jobID, ExternalJobID: externalJobID, Name: name}, mpr)`
$DIR/core/services/ocr2/plugins/generic/pipeline_runner_adapter_test.go: `.ExecuteRun(testutils.Context(t), spec, core.Vars{}, core.Options{})`
$DIR/core/services/ocr2/plugins/generic/pipeline_runner_adapter_test.go: `.Context(t)`
$DIR/core/services/ocr2/plugins/generic/pipeline_runner_adapter_test.go: `.vars.Get("jb.name")`
$DIR/core/services/ocr2/plugins/generic/pipeline_runner_adapter_test.go: `.vars.Get("jb.databaseID")`
$DIR/core/services/ocr2/plugins/generic/pipeline_runner_adapter_test.go: `.vars.Get("jb.externalJobID")`
$DIR/core/services/ocr2/plugins/generic/pipeline_runner_adapter_test.go: `.TestLogger(t)`
$DIR/core/services/ocr2/plugins/generic/pipeline_runner_adapter_test.go: `.New()`
$DIR/core/services/ocr2/plugins/generic/pipeline_runner_adapter_test.go: `.StringFrom("job-name")`
$DIR/core/services/ocr2/plugins/generic/pipeline_runner_adapter_test.go: `.Type("generic")`
$DIR/core/services/ocr2/plugins/generic/pipeline_runner_adapter_test.go: `.NewPipelineRunnerAdapter(logger, job.Job{ID: jobID, ExternalJobID: externalJobID, Name: name, Type: jobType}, mpr)`
$DIR/core/services/ocr2/plugins/generic/pipeline_runner_adapter_test.go: `.ExecuteRun(testutils.Context(t), spec, core.Vars{}, core.Options{MaxTaskDuration: maxDuration})`
$DIR/core/services/ocr2/plugins/generic/pipeline_runner_adapter_test.go: `.Context(t)`
$DIR/core/services/ocr2/plugins/generic/pipeline_runner_adapter_test.go: `.spec.MaxTaskDuration.Duration()`
$DIR/core/services/ocr2/plugins/generic/relayerset_test.go: `testRelayersMap[types.RelayID{Network: "N1", ChainID: "C1"}] = &TestRelayer{}`
$DIR/core/services/ocr2/plugins/generic/relayerset_test.go: `testRelayersMap[types.RelayID{Network: "N2", ChainID: "C2"}] = &TestRelayer{}`
$DIR/core/services/ocr2/plugins/generic/relayerset_test.go: `testRelayersMap[types.RelayID{Network: "N3", ChainID: "C3"}] = &TestRelayer{}`
$DIR/core/services/ocr2/plugins/generic/relayerset_test.go: `relayers, err = relayerSet.List(context.Background(), types.RelayID{Network: "N1", ChainID: "C1"}, types.RelayID{Network: "N3", ChainID: "C3"})`
$DIR/core/services/ocr2/plugins/generic/relayerset_test.go: `_, ok = relayers[types.RelayID{Network: "N3", ChainID: "C3"}]`
$DIR/core/services/ocr2/plugins/generic/relayerset_test.go: `testRelayersMap[types.RelayID{Network: "N1", ChainID: "C1"}] = &TestRelayer{}`
$DIR/core/services/ocr2/plugins/generic/relayerset_test.go: `testRelayersMap[types.RelayID{Network: "N2", ChainID: "C2"}] = &TestRelayer{}`
$DIR/core/services/ocr2/plugins/generic/relayerset_test.go: `testRelayersMap[types.RelayID{Network: "N3", ChainID: "C3"}] = &TestRelayer{}`
$DIR/core/services/ocr2/plugins/generic/relayerset_test.go: `_, err = relayerSet.Get(context.Background(), types.RelayID{Network: "N1", ChainID: "C1"})`
$DIR/core/services/ocr2/plugins/generic/relayerset_test.go: `_, err = relayerSet.Get(context.Background(), types.RelayID{Network: "N4", ChainID: "C4"})`
$DIR/core/services/ocr2/plugins/generic/relayerset_test.go: `testRelayersMap[types.RelayID{Network: "N1", ChainID: "C1"}] = testRelayer`
$DIR/core/services/ocr2/plugins/generic/relayerset_test.go: `testRelayersMap[types.RelayID{Network: "N2", ChainID: "C2"}] = &TestRelayer{}`
$DIR/core/services/ocr2/plugins/generic/relayerset_test.go: `testRelayersMap[types.RelayID{Network: "N3", ChainID: "C3"}] = &TestRelayer{}`
$DIR/core/services/ocr2/plugins/generic/relayerset_test.go: `_, err = relayer.NewPluginProvider(context.Background(), core.RelayArgs{
ContractID: "c1",
RelayConfig: []byte("relayconfig"),
ProviderType: "p1",
MercuryCredentials: &types.MercuryCredentials{
LegacyURL: "legacy",
URL: "url",
Username: "user",
Password: "pass",
},
}, core.PluginArgs{
TransmitterID: "t1",
PluginConfig: []byte("pluginconfig"),
})`
$DIR/core/services/ocr2/plugins/generic/relayerset_test.go: `.New()`
$DIR/core/services/ocr2/plugins/generic/relayerset_test.go: `.List(context.Background())`
$DIR/core/services/ocr2/plugins/generic/relayerset_test.go: `.Background()`
$DIR/core/services/ocr2/plugins/generic/relayerset_test.go: `.List(context.Background(), types.RelayID{Network: "N1", ChainID: "C1"}, types.RelayID{Network: "N3", ChainID: "C3"})`
$DIR/core/services/ocr2/plugins/generic/relayerset_test.go: `.Background()`
$DIR/core/services/ocr2/plugins/generic/relayerset_test.go: `.New()`
$DIR/core/services/ocr2/plugins/generic/relayerset_test.go: `.Get(context.Background(), types.RelayID{Network: "N1", ChainID: "C1"})`
$DIR/core/services/ocr2/plugins/generic/relayerset_test.go: `.Background()`
$DIR/core/services/ocr2/plugins/generic/relayerset_test.go: `.Get(context.Background(), types.RelayID{Network: "N4", ChainID: "C4"})`
$DIR/core/services/ocr2/plugins/generic/relayerset_test.go: `.Background()`
$DIR/core/services/ocr2/plugins/generic/relayerset_test.go: `.New()`
$DIR/core/services/ocr2/plugins/generic/relayerset_test.go: `.Get(context.Background(), types.RelayID{Network: "N1", ChainID: "C1"})`
$DIR/core/services/ocr2/plugins/generic/relayerset_test.go: `.Background()`
$DIR/core/services/ocr2/plugins/generic/relayerset_test.go: `.NewPluginProvider(context.Background(), core.RelayArgs{
ContractID: "c1",
RelayConfig: []byte("relayconfig"),
ProviderType: "p1",
MercuryCredentials: &types.MercuryCredentials{
LegacyURL: "legacy",
URL: "url",
Username: "user",
Password: "pass",
},
}, core.PluginArgs{
TransmitterID: "t1",
PluginConfig: []byte("pluginconfig"),
})`
$DIR/core/services/ocr2/plugins/generic/relayerset_test.go: `.Background()`
$DIR/core/services/ocr2/plugins/generic/telemetry_adapter_test.go: `t.Run(test.name, func(t *testing.T) {
err := ta.Send(testutils.Context(t), test.networkID, test.chainID, test.contractID, test.telemetryType, test.payload)
if test.errorMsg != "" {
assert.ErrorContains(t, err, test.errorMsg)
} else {
require.NoError(t, err)
key := [4]string{test.networkID, test.chainID, test.contractID, test.telemetryType}
endpoint, ok := ta.Endpoints()[key]
require.True(t, ok)
me := endpoint.(*mockEndpoint)
assert.Equal(t, test.networkID, me.network)
assert.Equal(t, test.chainID, me.chainID)
assert.Equal(t, test.contractID, me.contractID)
assert.Equal(t, test.telemetryType, me.telemetryType)
assert.Equal(t, test.payload, me.payload)
}
})`
$DIR/core/services/ocr2/plugins/generic/telemetry_adapter_test.go: `.NewTelemetryAdapter(&mockGenerator{})`
$DIR/core/services/ocr2/plugins/generic/telemetry_adapter_test.go: `.Run(test.name, func(t *testing.T) {
err := ta.Send(testutils.Context(t), test.networkID, test.chainID, test.contractID, test.telemetryType, test.payload)
if test.errorMsg != "" {
assert.ErrorContains(t, err, test.errorMsg)
} else {
require.NoError(t, err)
key := [4]string{test.networkID, test.chainID, test.contractID, test.telemetryType}
endpoint, ok := ta.Endpoints()[key]
require.True(t, ok)
me := endpoint.(*mockEndpoint)
assert.Equal(t, test.networkID, me.network)
assert.Equal(t, test.chainID, me.chainID)
assert.Equal(t, test.contractID, me.contractID)
assert.Equal(t, test.telemetryType, me.telemetryType)
assert.Equal(t, test.payload, me.payload)
}
})`
$DIR/core/services/ocr2/plugins/generic/telemetry_adapter_test.go: `.Send(testutils.Context(t), test.networkID, test.chainID, test.contractID, test.telemetryType, test.payload)`
$DIR/core/services/ocr2/plugins/generic/telemetry_adapter_test.go: `.Context(t)`
$DIR/core/services/ocr2/plugins/generic/telemetry_adapter_test.go: `.Endpoints()`
$DIR/core/services/ocr2/plugins/llo/config/config_test.go: `t.Run("with all possible values set", func(t *testing.T) {
rawToml := fmt.Sprintf(`
ServerURL = "example.com:80"
ServerPubKey = "724ff6eae9e900270edfff233e16322a70ec06e1a6e62a81ef13921f398f6c93"
BenchmarkMode = true
ChannelDefinitionsContractAddress = "0xdeadbeefdeadbeefdeadbeefdeadbeefdeadbeef"
ChannelDefinitionsContractFromBlock = 1234
ChannelDefinitions = """
%s
"""`, cdjson)
var mc PluginConfig
err := toml.Unmarshal([]byte(rawToml), &mc)
require.NoError(t, err)
assert.Equal(t, "example.com:80", mc.RawServerURL)
assert.Equal(t, "724ff6eae9e900270edfff233e16322a70ec06e1a6e62a81ef13921f398f6c93", mc.ServerPubKey.String())
assert.Equal(t, "0xDeaDbeefdEAdbeefdEadbEEFdeadbeEFdEaDbeeF", mc.ChannelDefinitionsContractAddress.Hex())
assert.Equal(t, int64(1234), mc.ChannelDefinitionsContractFromBlock)
assert.JSONEq(t, cdjson, mc.ChannelDefinitions)
assert.True(t, mc.BenchmarkMode)
err = mc.Validate()
require.Error(t, err)
assert.Contains(t, err.Error(), "llo: ChannelDefinitionsContractAddress is not allowed if ChannelDefinitions is specified")
assert.Contains(t, err.Error(), "llo: ChannelDefinitionsContractFromBlock is not allowed if ChannelDefinitions is specified")
})`
$DIR/core/services/ocr2/plugins/llo/config/config_test.go: `err = mc.Validate()`
$DIR/core/services/ocr2/plugins/llo/config/config_test.go: `t.Run("with only channelDefinitions", func(t *testing.T) {
rawToml := fmt.Sprintf(`
ServerURL = "example.com:80"
ServerPubKey = "724ff6eae9e900270edfff233e16322a70ec06e1a6e62a81ef13921f398f6c93"
ChannelDefinitions = """
%s
"""`, cdjson)
var mc PluginConfig
err := toml.Unmarshal([]byte(rawToml), &mc)
require.NoError(t, err)
assert.Equal(t, "example.com:80", mc.RawServerURL)
assert.Equal(t, "724ff6eae9e900270edfff233e16322a70ec06e1a6e62a81ef13921f398f6c93", mc.ServerPubKey.String())
assert.JSONEq(t, cdjson, mc.ChannelDefinitions)
assert.False(t, mc.BenchmarkMode)
err = mc.Validate()
require.NoError(t, err)
})`
$DIR/core/services/ocr2/plugins/llo/config/config_test.go: `err = mc.Validate()`
$DIR/core/services/ocr2/plugins/llo/config/config_test.go: `t.Run("with only channelDefinitions contract details", func(t *testing.T) {
rawToml := `
ServerURL = "example.com:80"
ServerPubKey = "724ff6eae9e900270edfff233e16322a70ec06e1a6e62a81ef13921f398f6c93"
ChannelDefinitionsContractAddress = "0xdeadbeefdeadbeefdeadbeefdeadbeefdeadbeef"`
var mc PluginConfig
err := toml.Unmarshal([]byte(rawToml), &mc)
require.NoError(t, err)
assert.Equal(t, "example.com:80", mc.RawServerURL)
assert.Equal(t, "724ff6eae9e900270edfff233e16322a70ec06e1a6e62a81ef13921f398f6c93", mc.ServerPubKey.String())
assert.Equal(t, "0xDeaDbeefdEAdbeefdEadbEEFdeadbeEFdEaDbeeF", mc.ChannelDefinitionsContractAddress.Hex())
assert.False(t, mc.BenchmarkMode)
err = mc.Validate()
require.NoError(t, err)
})`
$DIR/core/services/ocr2/plugins/llo/config/config_test.go: `err = mc.Validate()`
$DIR/core/services/ocr2/plugins/llo/config/config_test.go: `t.Run("with missing ChannelDefinitionsContractAddress", func(t *testing.T) {
rawToml := `
ServerURL = "example.com:80"
ServerPubKey = "724ff6eae9e900270edfff233e16322a70ec06e1a6e62a81ef13921f398f6c93"`
var mc PluginConfig
err := toml.Unmarshal([]byte(rawToml), &mc)
require.NoError(t, err)
assert.Equal(t, "example.com:80", mc.RawServerURL)
assert.Equal(t, "724ff6eae9e900270edfff233e16322a70ec06e1a6e62a81ef13921f398f6c93", mc.ServerPubKey.String())
assert.False(t, mc.BenchmarkMode)
err = mc.Validate()
require.Error(t, err)
assert.EqualError(t, err, "llo: ChannelDefinitionsContractAddress is required if ChannelDefinitions is not specified")
})`
$DIR/core/services/ocr2/plugins/llo/config/config_test.go: `err = mc.Validate()`
$DIR/core/services/ocr2/plugins/llo/config/config_test.go: `t.Run("with invalid values", func(t *testing.T) {
rawToml := `
ChannelDefinitionsContractFromBlock = "invalid"
`
var mc PluginConfig
err := toml.Unmarshal([]byte(rawToml), &mc)
require.Error(t, err)
assert.EqualError(t, err, `toml: cannot decode TOML string into struct field config.PluginConfig.ChannelDefinitionsContractFromBlock of type int64`)
assert.False(t, mc.BenchmarkMode)
rawToml = `
ServerURL = "http://example.com"
ServerPubKey = "4242"
`
err = toml.Unmarshal([]byte(rawToml), &mc)
require.NoError(t, err)
err = mc.Validate()
require.Error(t, err)
assert.Contains(t, err.Error(), `invalid scheme specified for MercuryServer, got: "http://example.com" (scheme: "http") but expected a websocket url e.g. "192.0.2.2:4242" or "wss://192.0.2.2:4242"`)
assert.Contains(t, err.Error(), `ServerPubKey is required and must be a 32-byte hex string`)
})`
$DIR/core/services/ocr2/plugins/llo/config/config_test.go: `rawToml = `
ServerURL = "http://example.com"
ServerPubKey = "4242"
``
$DIR/core/services/ocr2/plugins/llo/config/config_test.go: `err = toml.Unmarshal([]byte(rawToml), &mc)`
$DIR/core/services/ocr2/plugins/llo/config/config_test.go: `err = mc.Validate()`
$DIR/core/services/ocr2/plugins/llo/config/config_test.go: `.Run("with all possible values set", func(t *testing.T) {
rawToml := fmt.Sprintf(`
ServerURL = "example.com:80"
ServerPubKey = "724ff6eae9e900270edfff233e16322a70ec06e1a6e62a81ef13921f398f6c93"
BenchmarkMode = true
ChannelDefinitionsContractAddress = "0xdeadbeefdeadbeefdeadbeefdeadbeefdeadbeef"
ChannelDefinitionsContractFromBlock = 1234
ChannelDefinitions = """
%s
"""`, cdjson)
var mc PluginConfig
err := toml.Unmarshal([]byte(rawToml), &mc)
require.NoError(t, err)
assert.Equal(t, "example.com:80", mc.RawServerURL)
assert.Equal(t, "724ff6eae9e900270edfff233e16322a70ec06e1a6e62a81ef13921f398f6c93", mc.ServerPubKey.String())
assert.Equal(t, "0xDeaDbeefdEAdbeefdEadbEEFdeadbeEFdEaDbeeF", mc.ChannelDefinitionsContractAddress.Hex())
assert.Equal(t, int64(1234), mc.ChannelDefinitionsContractFromBlock)
assert.JSONEq(t, cdjson, mc.ChannelDefinitions)
assert.True(t, mc.BenchmarkMode)
err = mc.Validate()
require.Error(t, err)
assert.Contains(t, err.Error(), "llo: ChannelDefinitionsContractAddress is not allowed if ChannelDefinitions is specified")
assert.Contains(t, err.Error(), "llo: ChannelDefinitionsContractFromBlock is not allowed if ChannelDefinitions is specified")
})`
$DIR/core/services/ocr2/plugins/llo/config/config_test.go: `.Sprintf(`
ServerURL = "example.com:80"
ServerPubKey = "724ff6eae9e900270edfff233e16322a70ec06e1a6e62a81ef13921f398f6c93"
BenchmarkMode = true
ChannelDefinitionsContractAddress = "0xdeadbeefdeadbeefdeadbeefdeadbeefdeadbeef"
ChannelDefinitionsContractFromBlock = 1234
ChannelDefinitions = """
%s
"""`, cdjson)`
$DIR/core/services/ocr2/plugins/llo/config/config_test.go: `.Unmarshal([]byte(rawToml), &mc)`
$DIR/core/services/ocr2/plugins/llo/config/config_test.go: `.Validate()`
$DIR/core/services/ocr2/plugins/llo/config/config_test.go: `.Run("with only channelDefinitions", func(t *testing.T) {
rawToml := fmt.Sprintf(`
ServerURL = "example.com:80"
ServerPubKey = "724ff6eae9e900270edfff233e16322a70ec06e1a6e62a81ef13921f398f6c93"
ChannelDefinitions = """
%s
"""`, cdjson)
var mc PluginConfig
err := toml.Unmarshal([]byte(rawToml), &mc)
require.NoError(t, err)
assert.Equal(t, "example.com:80", mc.RawServerURL)
assert.Equal(t, "724ff6eae9e900270edfff233e16322a70ec06e1a6e62a81ef13921f398f6c93", mc.ServerPubKey.String())
assert.JSONEq(t, cdjson, mc.ChannelDefinitions)
assert.False(t, mc.BenchmarkMode)
err = mc.Validate()
require.NoError(t, err)
})`
$DIR/core/services/ocr2/plugins/llo/config/config_test.go: `.Sprintf(`
ServerURL = "example.com:80"
ServerPubKey = "724ff6eae9e900270edfff233e16322a70ec06e1a6e62a81ef13921f398f6c93"
ChannelDefinitions = """
%s
"""`, cdjson)`
$DIR/core/services/ocr2/plugins/llo/config/config_test.go: `.Unmarshal([]byte(rawToml), &mc)`
$DIR/core/services/ocr2/plugins/llo/config/config_test.go: `.Validate()`
$DIR/core/services/ocr2/plugins/llo/config/config_test.go: `.Run("with only channelDefinitions contract details", func(t *testing.T) {
rawToml := `
ServerURL = "example.com:80"
ServerPubKey = "724ff6eae9e900270edfff233e16322a70ec06e1a6e62a81ef13921f398f6c93"
ChannelDefinitionsContractAddress = "0xdeadbeefdeadbeefdeadbeefdeadbeefdeadbeef"`
var mc PluginConfig
err := toml.Unmarshal([]byte(rawToml), &mc)
require.NoError(t, err)
assert.Equal(t, "example.com:80", mc.RawServerURL)
assert.Equal(t, "724ff6eae9e900270edfff233e16322a70ec06e1a6e62a81ef13921f398f6c93", mc.ServerPubKey.String())
assert.Equal(t, "0xDeaDbeefdEAdbeefdEadbEEFdeadbeEFdEaDbeeF", mc.ChannelDefinitionsContractAddress.Hex())
assert.False(t, mc.BenchmarkMode)
err = mc.Validate()
require.NoError(t, err)
})`
$DIR/core/services/ocr2/plugins/llo/config/config_test.go: `.Unmarshal([]byte(rawToml), &mc)`
$DIR/core/services/ocr2/plugins/llo/config/config_test.go: `.Validate()`
$DIR/core/services/ocr2/plugins/llo/config/config_test.go: `.Run("with missing ChannelDefinitionsContractAddress", func(t *testing.T) {
rawToml := `
ServerURL = "example.com:80"
ServerPubKey = "724ff6eae9e900270edfff233e16322a70ec06e1a6e62a81ef13921f398f6c93"`
var mc PluginConfig
err := toml.Unmarshal([]byte(rawToml), &mc)
require.NoError(t, err)
assert.Equal(t, "example.com:80", mc.RawServerURL)
assert.Equal(t, "724ff6eae9e900270edfff233e16322a70ec06e1a6e62a81ef13921f398f6c93", mc.ServerPubKey.String())
assert.False(t, mc.BenchmarkMode)
err = mc.Validate()
require.Error(t, err)
assert.EqualError(t, err, "llo: ChannelDefinitionsContractAddress is required if ChannelDefinitions is not specified")
})`
$DIR/core/services/ocr2/plugins/llo/config/config_test.go: `.Unmarshal([]byte(rawToml), &mc)`
$DIR/core/services/ocr2/plugins/llo/config/config_test.go: `.Validate()`
$DIR/core/services/ocr2/plugins/llo/config/config_test.go: `.Run("with invalid values", func(t *testing.T) {
rawToml := `
ChannelDefinitionsContractFromBlock = "invalid"
`
var mc PluginConfig
err := toml.Unmarshal([]byte(rawToml), &mc)
require.Error(t, err)
assert.EqualError(t, err, `toml: cannot decode TOML string into struct field config.PluginConfig.ChannelDefinitionsContractFromBlock of type int64`)
assert.False(t, mc.BenchmarkMode)
rawToml = `
ServerURL = "http://example.com"
ServerPubKey = "4242"
`
err = toml.Unmarshal([]byte(rawToml), &mc)
require.NoError(t, err)
err = mc.Validate()
require.Error(t, err)
assert.Contains(t, err.Error(), `invalid scheme specified for MercuryServer, got: "http://example.com" (scheme: "http") but expected a websocket url e.g. "192.0.2.2:4242" or "wss://192.0.2.2:4242"`)
assert.Contains(t, err.Error(), `ServerPubKey is required and must be a 32-byte hex string`)
})`
$DIR/core/services/ocr2/plugins/llo/config/config_test.go: `.Unmarshal([]byte(rawToml), &mc)`
$DIR/core/services/ocr2/plugins/llo/config/config_test.go: `.Unmarshal([]byte(rawToml), &mc)`
$DIR/core/services/ocr2/plugins/llo/config/config_test.go: `.Validate()`
$DIR/core/services/ocr2/plugins/llo/integration_test.go: `streamMap[strm.id] = strm`
$DIR/core/services/ocr2/plugins/llo/integration_test.go: `clientCSAKeys[i] = key`
$DIR/core/services/ocr2/plugins/llo/integration_test.go: `clientPubKeys[i] = key.PublicKey`
$DIR/core/services/ocr2/plugins/llo/integration_test.go: `nodes = append(nodes, Node{
app, transmitter, kb,
})`
$DIR/core/services/ocr2/plugins/llo/integration_test.go: `oracles = append(oracles, confighelper.OracleIdentityExtra{
OracleIdentity: confighelper.OracleIdentity{
OnchainPublicKey: offchainPublicKey,
TransmitAccount: ocr2types.Account(fmt.Sprintf("%x", transmitter[:])),
OffchainPublicKey: kb.OffchainPublicKey(),
PeerID: peerID,
},
ConfigEncryptionPublicKey: kb.ConfigEncryptionPublicKey(),
})`
$DIR/core/services/ocr2/plugins/llo/integration_test.go: `backend.Commit()`
$DIR/core/services/ocr2/plugins/llo/integration_test.go: `addBootstrapJob(t, bootstrapNode, chainID, verifierAddress, "job-1")`
$DIR/core/services/ocr2/plugins/llo/integration_test.go: `addOCRJobs(t, streams, serverPubKey, serverURL, verifierAddress, bootstrapPeerID, bootstrapNodePort, nodes, configStoreAddress, clientPubKeys, chainID, fromBlock)`
$DIR/core/services/ocr2/plugins/llo/integration_test.go: `seen[o.OracleIdentity.TransmitAccount] = make(map[llotypes.ChannelID]struct{})`
$DIR/core/services/ocr2/plugins/llo/integration_test.go: `r, err = (datastreamsllo.JSONReportCodec{}).Decode(report.([]byte))`
$DIR/core/services/ocr2/plugins/llo/integration_test.go: `r, err = (lloevm.ReportCodec{}).Decode(report.([]byte))`
$DIR/core/services/ocr2/plugins/llo/integration_test.go: `seen[req.TransmitterID()][r.ChannelID] = struct{}{}`
$DIR/core/services/ocr2/plugins/llo/integration_test.go: `delete(seen, req.TransmitterID())`
$DIR/core/services/ocr2/plugins/llo/integration_test.go: `.Now()`
$DIR/core/services/ocr2/plugins/llo/integration_test.go: `.Unix()`
$DIR/core/services/ocr2/plugins/llo/integration_test.go: `.NewInt(20_000 * multiplier)`
$DIR/core/services/ocr2/plugins/llo/integration_test.go: `.NewInt(1_568 * multiplier)`
$DIR/core/services/ocr2/plugins/llo/integration_test.go: `.NewInt(7150 * multiplier / 1000)`
$DIR/core/services/ocr2/plugins/llo/integration_test.go: `.NewInt(2_020 * multiplier)`
$DIR/core/services/ocr2/plugins/llo/integration_test.go: `.MustNewV2XXXTestingOnly(big.NewInt(-1))`
$DIR/core/services/ocr2/plugins/llo/integration_test.go: `.NewInt(-1)`
$DIR/core/services/ocr2/plugins/llo/integration_test.go: `.PrivateKey(serverKey.Raw())`
$DIR/core/services/ocr2/plugins/llo/integration_test.go: `.Raw()`
$DIR/core/services/ocr2/plugins/llo/integration_test.go: `.NewInt(int64(i))`
$DIR/core/services/ocr2/plugins/llo/integration_test.go: `.MustNewV2XXXTestingOnly(k)`
$DIR/core/services/ocr2/plugins/llo/integration_test.go: `.MustNewV2XXXTestingOnly(big.NewInt(-1))`
$DIR/core/services/ocr2/plugins/llo/integration_test.go: `.NewInt(-1)`
$DIR/core/services/ocr2/plugins/llo/integration_test.go: `.GetOne(t)`
$DIR/core/services/ocr2/plugins/llo/integration_test.go: `.GetN(t, nNodes)`
$DIR/core/services/ocr2/plugins/llo/integration_test.go: `.Sprintf("oracle_streams_%d", i)`
$DIR/core/services/ocr2/plugins/llo/integration_test.go: `.DecodeString(strings.TrimPrefix(kb.OnChainPublicKey(), "0x"))`
$DIR/core/services/ocr2/plugins/llo/integration_test.go: `.TrimPrefix(kb.OnChainPublicKey(), "0x")`
$DIR/core/services/ocr2/plugins/llo/integration_test.go: `.OnChainPublicKey()`
$DIR/core/services/ocr2/plugins/llo/integration_test.go: `.Account(fmt.Sprintf("%x", transmitter[:]))`
$DIR/core/services/ocr2/plugins/llo/integration_test.go: `.Sprintf("%x", transmitter[:])`
$DIR/core/services/ocr2/plugins/llo/integration_test.go: `.OffchainPublicKey()`
$DIR/core/services/ocr2/plugins/llo/integration_test.go: `.ConfigEncryptionPublicKey()`
$DIR/core/services/ocr2/plugins/llo/integration_test.go: `.App.GetRelayers()`
$DIR/core/services/ocr2/plugins/llo/integration_test.go: `.LegacyEVMChains()`
$DIR/core/services/ocr2/plugins/llo/integration_test.go: `.Get(testutils.SimulatedChainID.String())`
$DIR/core/services/ocr2/plugins/llo/integration_test.go: `.SimulatedChainID.String()`
$DIR/core/services/ocr2/plugins/llo/integration_test.go: `.Config()`
$DIR/core/services/ocr2/plugins/llo/integration_test.go: `.EVM()`
$DIR/core/services/ocr2/plugins/llo/integration_test.go: `.FinalityDepth()`
$DIR/core/services/ocr2/plugins/llo/integration_test.go: `.Commit()`
$DIR/core/services/ocr2/plugins/llo/integration_test.go: `.TransmitterID()`
$DIR/core/services/ocr2/plugins/llo/integration_test.go: `.PayloadTypes.UnpackIntoMap(v, req.req.Payload)`
$DIR/core/services/ocr2/plugins/llo/integration_test.go: `.Decode(report.([]byte))`
$DIR/core/services/ocr2/plugins/llo/integration_test.go: `.Decode(report.([]byte))`
$DIR/core/services/ocr2/plugins/llo/integration_test.go: `.TransmitterID()`
$DIR/core/services/ocr2/plugins/llo/integration_test.go: `.TransmitterID()`
$DIR/core/services/ocr2/plugins/llo/integration_test.go: `.TransmitterID()`
$DIR/core/services/ocr2/plugins/llo/integration_test.go: `.TransmitterID()`
$DIR/core/services/ocr2/plugins/llo/integration_test.go: `.Deadline()`
$DIR/core/services/ocr2/plugins/llo/integration_test.go: `.After(time.Until(d.Add(-100 * time.Millisecond)))`
$DIR/core/services/ocr2/plugins/llo/integration_test.go: `.Until(d.Add(-100 * time.Millisecond))`
$DIR/core/services/ocr2/plugins/llo/integration_test.go: `.Add(-100 * time.Millisecond)`
$DIR/core/services/ocr2/plugins/llo/onchain_channel_definition_cache_integration_test.go: `backend.Commit()`
$DIR/core/services/ocr2/plugins/llo/onchain_channel_definition_cache_integration_test.go: `t.Run("with zero fromblock", func(t *testing.T) {
lpOpts := logpoller.Opts{
PollPeriod: 100 * time.Millisecond,
FinalityDepth: 1,
BackfillBatchSize: 3,
RpcBatchSize: 2,
KeepFinalizedBlocksDepth: 1000,
}
lp := logpoller.NewLogPoller(
logpoller.NewORM(testutils.SimulatedChainID, db, lggr), ethClient, lggr, lpOpts)
servicetest.Run(t, lp)
cdc := llo.NewChannelDefinitionCache(lggr, orm, lp, configStoreAddress, 0)
servicetest.Run(t, cdc)
testutils.WaitForLogMessage(t, observedLogs, "Updated channel definitions")
dfns := cdc.Definitions()
require.Len(t, dfns, 2)
require.Contains(t, dfns, channel1)
require.Contains(t, dfns, channel2)
assert.Equal(t, llotypes.ChannelDefinition{
ReportFormat: llotypes.ReportFormatSolana,
ChainSelector: chainSelector,
StreamIDs: []uint32{1, 2, 3},
}, dfns[channel1])
assert.Equal(t, llotypes.ChannelDefinition{
ReportFormat: llotypes.ReportFormatEVM,
ChainSelector: chainSelector,
StreamIDs: []uint32{1, 2, 3},
}, dfns[channel2])
// remove solana
require.NoError(t, utils.JustError(configStoreContract.RemoveChannel(steve, channel1)))
backend.Commit()
testutils.WaitForLogMessageCount(t, observedLogs, "Updated channel definitions", 2)
dfns = cdc.Definitions()
require.Len(t, dfns, 1)
assert.NotContains(t, dfns, channel1)
require.Contains(t, dfns, channel2)
assert.Equal(t, llotypes.ChannelDefinition{
ReportFormat: llotypes.ReportFormatEVM,
ChainSelector: chainSelector,
StreamIDs: []uint32{1, 2, 3},
}, dfns[channel2])
// add channel3 with additional stream
require.NoError(t, utils.JustError(configStoreContract.AddChannel(steve, channel3, channel3Def)))
backend.Commit()
testutils.WaitForLogMessageCount(t, observedLogs, "Updated channel definitions", 3)
dfns = cdc.Definitions()
require.Len(t, dfns, 2)
require.Contains(t, dfns, channel2)
require.Contains(t, dfns, channel3)
assert.Equal(t, llotypes.ChannelDefinition{
ReportFormat: llotypes.ReportFormatEVM,
ChainSelector: chainSelector,
StreamIDs: []uint32{1, 2, 3},
}, dfns[channel2])
assert.Equal(t, llotypes.ChannelDefinition{
ReportFormat: llotypes.ReportFormatEVM,
ChainSelector: chainSelector,
StreamIDs: []uint32{1, 2, 3, 4},
}, dfns[channel3])
})`
$DIR/core/services/ocr2/plugins/llo/onchain_channel_definition_cache_integration_test.go: `servicetest.Run(t, lp)`
$DIR/core/services/ocr2/plugins/llo/onchain_channel_definition_cache_integration_test.go: `servicetest.Run(t, cdc)`
$DIR/core/services/ocr2/plugins/llo/onchain_channel_definition_cache_integration_test.go: `testutils.WaitForLogMessage(t, observedLogs, "Updated channel definitions")`
$DIR/core/services/ocr2/plugins/llo/onchain_channel_definition_cache_integration_test.go: `backend.Commit()`
$DIR/core/services/ocr2/plugins/llo/onchain_channel_definition_cache_integration_test.go: `testutils.WaitForLogMessageCount(t, observedLogs, "Updated channel definitions", 2)`
$DIR/core/services/ocr2/plugins/llo/onchain_channel_definition_cache_integration_test.go: `dfns = cdc.Definitions()`
$DIR/core/services/ocr2/plugins/llo/onchain_channel_definition_cache_integration_test.go: `backend.Commit()`
$DIR/core/services/ocr2/plugins/llo/onchain_channel_definition_cache_integration_test.go: `testutils.WaitForLogMessageCount(t, observedLogs, "Updated channel definitions", 3)`
$DIR/core/services/ocr2/plugins/llo/onchain_channel_definition_cache_integration_test.go: `dfns = cdc.Definitions()`
$DIR/core/services/ocr2/plugins/llo/onchain_channel_definition_cache_integration_test.go: `t.Run("loads from ORM", func(t *testing.T) {
// Override logpoller to always return no logs
lpOpts := logpoller.Opts{
PollPeriod: 100 * time.Millisecond,
FinalityDepth: 1,
BackfillBatchSize: 3,
RpcBatchSize: 2,
KeepFinalizedBlocksDepth: 1000,
}
lp := &mockLogPoller{
LogPoller: logpoller.NewLogPoller(logpoller.NewORM(testutils.SimulatedChainID, db, lggr), ethClient, lggr, lpOpts),
LatestBlockFn: func(ctx context.Context) (int64, error) {
return 0, nil
},
LogsWithSigsFn: func(ctx context.Context, start, end int64, eventSigs []common.Hash, address common.Address) ([]logpoller.Log, error) {
return []logpoller.Log{}, nil
},
}
cdc := llo.NewChannelDefinitionCache(lggr, orm, lp, configStoreAddress, 0)
servicetest.Run(t, cdc)
dfns := cdc.Definitions()
require.Len(t, dfns, 2)
require.Contains(t, dfns, channel2)
require.Contains(t, dfns, channel3)
assert.Equal(t, llotypes.ChannelDefinition{
ReportFormat: llotypes.ReportFormatEVM,
ChainSelector: chainSelector,
StreamIDs: []uint32{1, 2, 3},
}, dfns[channel2])
assert.Equal(t, llotypes.ChannelDefinition{
ReportFormat: llotypes.ReportFormatEVM,
ChainSelector: chainSelector,
StreamIDs: []uint32{1, 2, 3, 4},
}, dfns[channel3])
})`
$DIR/core/services/ocr2/plugins/llo/onchain_channel_definition_cache_integration_test.go: `servicetest.Run(t, cdc)`
$DIR/core/services/ocr2/plugins/llo/onchain_channel_definition_cache_integration_test.go: `pgtest.MustExec(t, db, `DELETE FROM channel_definitions`)`
$DIR/core/services/ocr2/plugins/llo/onchain_channel_definition_cache_integration_test.go: `servicetest.Run(t, lp)`
$DIR/core/services/ocr2/plugins/llo/onchain_channel_definition_cache_integration_test.go: `servicetest.Run(t, cdc)`
$DIR/core/services/ocr2/plugins/llo/onchain_channel_definition_cache_integration_test.go: `testutils.WaitForLogMessageCount(t, observedLogs, "Updated channel definitions", 4)`
$DIR/core/services/ocr2/plugins/llo/onchain_channel_definition_cache_integration_test.go: `.TestLoggerObserved(t, zapcore.InfoLevel)`
$DIR/core/services/ocr2/plugins/llo/onchain_channel_definition_cache_integration_test.go: `.NewSqlxDB(t)`
$DIR/core/services/ocr2/plugins/llo/onchain_channel_definition_cache_integration_test.go: `.Context(t)`
$DIR/core/services/ocr2/plugins/llo/onchain_channel_definition_cache_integration_test.go: `.NewORM(db, testutils.SimulatedChainID)`
$DIR/core/services/ocr2/plugins/llo/onchain_channel_definition_cache_integration_test.go: `.MustNewSimTransactor(t)`
$DIR/core/services/ocr2/plugins/llo/onchain_channel_definition_cache_integration_test.go: `.Ether(1000)`
$DIR/core/services/ocr2/plugins/llo/onchain_channel_definition_cache_integration_test.go: `.ToInt()`
$DIR/core/services/ocr2/plugins/llo/onchain_channel_definition_cache_integration_test.go: `.NewSimulatedBackend(t, genesisData, uint32(ethconfig.Defaults.Miner.GasCeil))`
$DIR/core/services/ocr2/plugins/llo/onchain_channel_definition_cache_integration_test.go: `.Commit()`
$DIR/core/services/ocr2/plugins/llo/onchain_channel_definition_cache_integration_test.go: `.NewSimulatedBackendClient(t, backend, testutils.SimulatedChainID)`
$DIR/core/services/ocr2/plugins/llo/onchain_channel_definition_cache_integration_test.go: `.DeployChannelConfigStore(steve, backend)`
$DIR/core/services/ocr2/plugins/llo/onchain_channel_definition_cache_integration_test.go: `.Uint32()`
$DIR/core/services/ocr2/plugins/llo/onchain_channel_definition_cache_integration_test.go: `.Uint32()`
$DIR/core/services/ocr2/plugins/llo/onchain_channel_definition_cache_integration_test.go: `.Uint32()`
$DIR/core/services/ocr2/plugins/llo/onchain_channel_definition_cache_integration_test.go: `.SelectorFromChainId(testutils.SimulatedChainID.Uint64())`
$DIR/core/services/ocr2/plugins/llo/onchain_channel_definition_cache_integration_test.go: `.SimulatedChainID.Uint64()`
$DIR/core/services/ocr2/plugins/llo/onchain_channel_definition_cache_integration_test.go: `.Commit()`
$DIR/core/services/ocr2/plugins/llo/onchain_channel_definition_cache_integration_test.go: `.BlockByHash(ctx, h)`
$DIR/core/services/ocr2/plugins/llo/onchain_channel_definition_cache_integration_test.go: `.Run("with zero fromblock", func(t *testing.T) {
lpOpts := logpoller.Opts{
PollPeriod: 100 * time.Millisecond,
FinalityDepth: 1,
BackfillBatchSize: 3,
RpcBatchSize: 2,
KeepFinalizedBlocksDepth: 1000,
}
lp := logpoller.NewLogPoller(
logpoller.NewORM(testutils.SimulatedChainID, db, lggr), ethClient, lggr, lpOpts)
servicetest.Run(t, lp)
cdc := llo.NewChannelDefinitionCache(lggr, orm, lp, configStoreAddress, 0)
servicetest.Run(t, cdc)
testutils.WaitForLogMessage(t, observedLogs, "Updated channel definitions")
dfns := cdc.Definitions()
require.Len(t, dfns, 2)
require.Contains(t, dfns, channel1)
require.Contains(t, dfns, channel2)
assert.Equal(t, llotypes.ChannelDefinition{
ReportFormat: llotypes.ReportFormatSolana,
ChainSelector: chainSelector,
StreamIDs: []uint32{1, 2, 3},
}, dfns[channel1])
assert.Equal(t, llotypes.ChannelDefinition{
ReportFormat: llotypes.ReportFormatEVM,
ChainSelector: chainSelector,
StreamIDs: []uint32{1, 2, 3},
}, dfns[channel2])
// remove solana
require.NoError(t, utils.JustError(configStoreContract.RemoveChannel(steve, channel1)))
backend.Commit()
testutils.WaitForLogMessageCount(t, observedLogs, "Updated channel definitions", 2)
dfns = cdc.Definitions()
require.Len(t, dfns, 1)
assert.NotContains(t, dfns, channel1)
require.Contains(t, dfns, channel2)
assert.Equal(t, llotypes.ChannelDefinition{
ReportFormat: llotypes.ReportFormatEVM,
ChainSelector: chainSelector,
StreamIDs: []uint32{1, 2, 3},
}, dfns[channel2])
// add channel3 with additional stream
require.NoError(t, utils.JustError(configStoreContract.AddChannel(steve, channel3, channel3Def)))
backend.Commit()
testutils.WaitForLogMessageCount(t, observedLogs, "Updated channel definitions", 3)
dfns = cdc.Definitions()
require.Len(t, dfns, 2)
require.Contains(t, dfns, channel2)
require.Contains(t, dfns, channel3)
assert.Equal(t, llotypes.ChannelDefinition{
ReportFormat: llotypes.ReportFormatEVM,
ChainSelector: chainSelector,
StreamIDs: []uint32{1, 2, 3},
}, dfns[channel2])
assert.Equal(t, llotypes.ChannelDefinition{
ReportFormat: llotypes.ReportFormatEVM,
ChainSelector: chainSelector,
StreamIDs: []uint32{1, 2, 3, 4},
}, dfns[channel3])
})`
$DIR/core/services/ocr2/plugins/llo/onchain_channel_definition_cache_integration_test.go: `.NewLogPoller(
logpoller.NewORM(testutils.SimulatedChainID, db, lggr), ethClient, lggr, lpOpts)`
$DIR/core/services/ocr2/plugins/llo/onchain_channel_definition_cache_integration_test.go: `.NewORM(testutils.SimulatedChainID, db, lggr)`
$DIR/core/services/ocr2/plugins/llo/onchain_channel_definition_cache_integration_test.go: `.Run(t, lp)`
$DIR/core/services/ocr2/plugins/llo/onchain_channel_definition_cache_integration_test.go: `.NewChannelDefinitionCache(lggr, orm, lp, configStoreAddress, 0)`
$DIR/core/services/ocr2/plugins/llo/onchain_channel_definition_cache_integration_test.go: `.Run(t, cdc)`
$DIR/core/services/ocr2/plugins/llo/onchain_channel_definition_cache_integration_test.go: `.WaitForLogMessage(t, observedLogs, "Updated channel definitions")`
$DIR/core/services/ocr2/plugins/llo/onchain_channel_definition_cache_integration_test.go: `.Definitions()`
$DIR/core/services/ocr2/plugins/llo/onchain_channel_definition_cache_integration_test.go: `.Commit()`
$DIR/core/services/ocr2/plugins/llo/onchain_channel_definition_cache_integration_test.go: `.WaitForLogMessageCount(t, observedLogs, "Updated channel definitions", 2)`
$DIR/core/services/ocr2/plugins/llo/onchain_channel_definition_cache_integration_test.go: `.Definitions()`
$DIR/core/services/ocr2/plugins/llo/onchain_channel_definition_cache_integration_test.go: `.Commit()`
$DIR/core/services/ocr2/plugins/llo/onchain_channel_definition_cache_integration_test.go: `.WaitForLogMessageCount(t, observedLogs, "Updated channel definitions", 3)`
$DIR/core/services/ocr2/plugins/llo/onchain_channel_definition_cache_integration_test.go: `.Definitions()`
$DIR/core/services/ocr2/plugins/llo/onchain_channel_definition_cache_integration_test.go: `.Run("loads from ORM", func(t *testing.T) {
// Override logpoller to always return no logs
lpOpts := logpoller.Opts{
PollPeriod: 100 * time.Millisecond,
FinalityDepth: 1,
BackfillBatchSize: 3,
RpcBatchSize: 2,
KeepFinalizedBlocksDepth: 1000,
}
lp := &mockLogPoller{
LogPoller: logpoller.NewLogPoller(logpoller.NewORM(testutils.SimulatedChainID, db, lggr), ethClient, lggr, lpOpts),
LatestBlockFn: func(ctx context.Context) (int64, error) {
return 0, nil
},
LogsWithSigsFn: func(ctx context.Context, start, end int64, eventSigs []common.Hash, address common.Address) ([]logpoller.Log, error) {
return []logpoller.Log{}, nil
},
}
cdc := llo.NewChannelDefinitionCache(lggr, orm, lp, configStoreAddress, 0)
servicetest.Run(t, cdc)
dfns := cdc.Definitions()
require.Len(t, dfns, 2)
require.Contains(t, dfns, channel2)
require.Contains(t, dfns, channel3)
assert.Equal(t, llotypes.ChannelDefinition{
ReportFormat: llotypes.ReportFormatEVM,
ChainSelector: chainSelector,
StreamIDs: []uint32{1, 2, 3},
}, dfns[channel2])
assert.Equal(t, llotypes.ChannelDefinition{
ReportFormat: llotypes.ReportFormatEVM,
ChainSelector: chainSelector,
StreamIDs: []uint32{1, 2, 3, 4},
}, dfns[channel3])
})`
$DIR/core/services/ocr2/plugins/llo/onchain_channel_definition_cache_integration_test.go: `.NewLogPoller(logpoller.NewORM(testutils.SimulatedChainID, db, lggr), ethClient, lggr, lpOpts)`
$DIR/core/services/ocr2/plugins/llo/onchain_channel_definition_cache_integration_test.go: `.NewORM(testutils.SimulatedChainID, db, lggr)`
$DIR/core/services/ocr2/plugins/llo/onchain_channel_definition_cache_integration_test.go: `.NewChannelDefinitionCache(lggr, orm, lp, configStoreAddress, 0)`
$DIR/core/services/ocr2/plugins/llo/onchain_channel_definition_cache_integration_test.go: `.Run(t, cdc)`
$DIR/core/services/ocr2/plugins/llo/onchain_channel_definition_cache_integration_test.go: `.Definitions()`
$DIR/core/services/ocr2/plugins/llo/onchain_channel_definition_cache_integration_test.go: `.MustExec(t, db, `DELETE FROM channel_definitions`)`
$DIR/core/services/ocr2/plugins/llo/onchain_channel_definition_cache_integration_test.go: `.NewLogPoller(logpoller.NewORM(testutils.SimulatedChainID, db, lggr), ethClient, lggr, lpOpts)`
$DIR/core/services/ocr2/plugins/llo/onchain_channel_definition_cache_integration_test.go: `.NewORM(testutils.SimulatedChainID, db, lggr)`
$DIR/core/services/ocr2/plugins/llo/onchain_channel_definition_cache_integration_test.go: `.Run(t, lp)`
$DIR/core/services/ocr2/plugins/llo/onchain_channel_definition_cache_integration_test.go: `.NewChannelDefinitionCache(lggr, orm, lp, configStoreAddress, channel2Block.Number().Int64()+1)`
$DIR/core/services/ocr2/plugins/llo/onchain_channel_definition_cache_integration_test.go: `.Number()`
$DIR/core/services/ocr2/plugins/llo/onchain_channel_definition_cache_integration_test.go: `.Int64()`
$DIR/core/services/ocr2/plugins/llo/onchain_channel_definition_cache_integration_test.go: `.Run(t, cdc)`
$DIR/core/services/ocr2/plugins/llo/onchain_channel_definition_cache_integration_test.go: `.WaitForLogMessageCount(t, observedLogs, "Updated channel definitions", 4)`
$DIR/core/services/ocr2/plugins/llo/onchain_channel_definition_cache_integration_test.go: `.Definitions()`
$DIR/core/services/ocr2/plugins/median/config/config_test.go: `t.Run("pipeline validation", func(t *testing.T) {
for _, tc := range []testCase{
{"empty pipeline", "", models.Interval(time.Minute), fmt.Errorf("invalid juelsPerFeeCoinSource pipeline: empty pipeline")},
{"blank pipeline", " ", models.Interval(time.Minute), fmt.Errorf("invalid juelsPerFeeCoinSource pipeline: empty pipeline")},
{"foo pipeline", "foo", models.Interval(time.Minute), fmt.Errorf("invalid juelsPerFeeCoinSource pipeline: UnmarshalTaskFromMap: unknown task type: \"\"")},
} {
t.Run(tc.name, func(t *testing.T) {
pc := PluginConfig{JuelsPerFeeCoinPipeline: tc.pipeline}
assert.EqualError(t, pc.ValidatePluginConfig(), tc.expectedError.Error())
})
}
})`
$DIR/core/services/ocr2/plugins/median/config/config_test.go: `t.Run(tc.name, func(t *testing.T) {
pc := PluginConfig{JuelsPerFeeCoinPipeline: tc.pipeline}
assert.EqualError(t, pc.ValidatePluginConfig(), tc.expectedError.Error())
})`
$DIR/core/services/ocr2/plugins/median/config/config_test.go: `t.Run("cache duration validation", func(t *testing.T) {
for _, tc := range []testCase{
{"cache duration below minimum", `ds1 [type=bridge name=voter_turnout];`, models.Interval(time.Second * 29), fmt.Errorf("juelsPerFeeCoinSourceCache update interval: 29s is below 30 second minimum")},
{"cache duration above maximum", `ds1 [type=bridge name=voter_turnout];`, models.Interval(time.Minute*20 + time.Second), fmt.Errorf("juelsPerFeeCoinSourceCache update interval: 20m1s is above 20 minute maximum")},
} {
t.Run(tc.name, func(t *testing.T) {
pc := PluginConfig{JuelsPerFeeCoinPipeline: tc.pipeline, JuelsPerFeeCoinCache: &JuelsPerFeeCoinCache{UpdateInterval: tc.cacheDuration}}
assert.EqualError(t, pc.ValidatePluginConfig(), tc.expectedError.Error())
})
}
})`
$DIR/core/services/ocr2/plugins/median/config/config_test.go: `t.Run(tc.name, func(t *testing.T) {
pc := PluginConfig{JuelsPerFeeCoinPipeline: tc.pipeline, JuelsPerFeeCoinCache: &JuelsPerFeeCoinCache{UpdateInterval: tc.cacheDuration}}
assert.EqualError(t, pc.ValidatePluginConfig(), tc.expectedError.Error())
})`
$DIR/core/services/ocr2/plugins/median/config/config_test.go: `t.Run(s.name, func(t *testing.T) {
pc := PluginConfig{JuelsPerFeeCoinPipeline: s.pipeline}
assert.Nil(t, pc.ValidatePluginConfig())
})`
$DIR/core/services/ocr2/plugins/median/config/config_test.go: `.Run("pipeline validation", func(t *testing.T) {
for _, tc := range []testCase{
{"empty pipeline", "", models.Interval(time.Minute), fmt.Errorf("invalid juelsPerFeeCoinSource pipeline: empty pipeline")},
{"blank pipeline", " ", models.Interval(time.Minute), fmt.Errorf("invalid juelsPerFeeCoinSource pipeline: empty pipeline")},
{"foo pipeline", "foo", models.Interval(time.Minute), fmt.Errorf("invalid juelsPerFeeCoinSource pipeline: UnmarshalTaskFromMap: unknown task type: \"\"")},
} {
t.Run(tc.name, func(t *testing.T) {
pc := PluginConfig{JuelsPerFeeCoinPipeline: tc.pipeline}
assert.EqualError(t, pc.ValidatePluginConfig(), tc.expectedError.Error())
})
}
})`
$DIR/core/services/ocr2/plugins/median/config/config_test.go: `.Interval(time.Minute)`
$DIR/core/services/ocr2/plugins/median/config/config_test.go: `.Interval(time.Minute)`
$DIR/core/services/ocr2/plugins/median/config/config_test.go: `.Interval(time.Minute)`
$DIR/core/services/ocr2/plugins/median/config/config_test.go: `.Run(tc.name, func(t *testing.T) {
pc := PluginConfig{JuelsPerFeeCoinPipeline: tc.pipeline}
assert.EqualError(t, pc.ValidatePluginConfig(), tc.expectedError.Error())
})`
$DIR/core/services/ocr2/plugins/median/config/config_test.go: `.Run("cache duration validation", func(t *testing.T) {
for _, tc := range []testCase{
{"cache duration below minimum", `ds1 [type=bridge name=voter_turnout];`, models.Interval(time.Second * 29), fmt.Errorf("juelsPerFeeCoinSourceCache update interval: 29s is below 30 second minimum")},
{"cache duration above maximum", `ds1 [type=bridge name=voter_turnout];`, models.Interval(time.Minute*20 + time.Second), fmt.Errorf("juelsPerFeeCoinSourceCache update interval: 20m1s is above 20 minute maximum")},
} {
t.Run(tc.name, func(t *testing.T) {
pc := PluginConfig{JuelsPerFeeCoinPipeline: tc.pipeline, JuelsPerFeeCoinCache: &JuelsPerFeeCoinCache{UpdateInterval: tc.cacheDuration}}
assert.EqualError(t, pc.ValidatePluginConfig(), tc.expectedError.Error())
})
}
})`
$DIR/core/services/ocr2/plugins/median/config/config_test.go: `.Interval(time.Second * 29)`
$DIR/core/services/ocr2/plugins/median/config/config_test.go: `.Interval(time.Minute*20 + time.Second)`
$DIR/core/services/ocr2/plugins/median/config/config_test.go: `.Run(tc.name, func(t *testing.T) {
pc := PluginConfig{JuelsPerFeeCoinPipeline: tc.pipeline, JuelsPerFeeCoinCache: &JuelsPerFeeCoinCache{UpdateInterval: tc.cacheDuration}}
assert.EqualError(t, pc.ValidatePluginConfig(), tc.expectedError.Error())
})`
$DIR/core/services/ocr2/plugins/median/config/config_test.go: `.Interval(time.Second * 30)`
$DIR/core/services/ocr2/plugins/median/config/config_test.go: `.Interval(time.Minute * 20)`
$DIR/core/services/ocr2/plugins/median/config/config_test.go: `.Run(s.name, func(t *testing.T) {
pc := PluginConfig{JuelsPerFeeCoinPipeline: s.pipeline}
assert.Nil(t, pc.ValidatePluginConfig())
})`
$DIR/core/services/ocr2/plugins/mercury/config/config_test.go: `t.Run("Mercury v1", func(t *testing.T) {
t.Run("with valid values", func(t *testing.T) {
rawToml := `
ServerURL = "example.com:80"
ServerPubKey = "724ff6eae9e900270edfff233e16322a70ec06e1a6e62a81ef13921f398f6c93"
InitialBlockNumber = 1234
`
var mc PluginConfig
err := toml.Unmarshal([]byte(rawToml), &mc)
require.NoError(t, err)
assert.Equal(t, "example.com:80", mc.RawServerURL)
assert.Equal(t, "724ff6eae9e900270edfff233e16322a70ec06e1a6e62a81ef13921f398f6c93", mc.ServerPubKey.String())
assert.Equal(t, int64(1234), mc.InitialBlockNumber.Int64)
err = ValidatePluginConfig(mc, v1FeedId)
require.NoError(t, err)
})
t.Run("with multiple server URLs", func(t *testing.T) {
t.Run("if no ServerURL/ServerPubKey is specified", func(t *testing.T) {
rawToml := `
Servers = { "example.com:80" = "724ff6eae9e900270edfff233e16322a70ec06e1a6e62a81ef13921f398f6c93", "example2.invalid:1234" = "524ff6eae9e900270edfff233e16322a70ec06e1a6e62a81ef13921f398f6c93" }
`
var mc PluginConfig
err := toml.Unmarshal([]byte(rawToml), &mc)
require.NoError(t, err)
assert.Len(t, mc.Servers, 2)
assert.Equal(t, "724ff6eae9e900270edfff233e16322a70ec06e1a6e62a81ef13921f398f6c93", mc.Servers["example.com:80"].String())
assert.Equal(t, "524ff6eae9e900270edfff233e16322a70ec06e1a6e62a81ef13921f398f6c93", mc.Servers["example2.invalid:1234"].String())
err = ValidatePluginConfig(mc, v1FeedId)
require.NoError(t, err)
})
t.Run("if ServerURL or ServerPubKey is specified", func(t *testing.T) {
rawToml := `
Servers = { "example.com:80" = "724ff6eae9e900270edfff233e16322a70ec06e1a6e62a81ef13921f398f6c93", "example2.invalid:1234" = "524ff6eae9e900270edfff233e16322a70ec06e1a6e62a81ef13921f398f6c93" }
ServerURL = "example.com:80"
`
var mc PluginConfig
err := toml.Unmarshal([]byte(rawToml), &mc)
require.NoError(t, err)
err = ValidatePluginConfig(mc, v1FeedId)
require.EqualError(t, err, "Mercury: Servers and RawServerURL/ServerPubKey may not be specified together")
rawToml = `
Servers = { "example.com:80" = "724ff6eae9e900270edfff233e16322a70ec06e1a6e62a81ef13921f398f6c93", "example2.invalid:1234" = "524ff6eae9e900270edfff233e16322a70ec06e1a6e62a81ef13921f398f6c93" }
ServerPubKey = "724ff6eae9e900270edfff233e16322a70ec06e1a6e62a81ef13921f398f6c93"
`
err = toml.Unmarshal([]byte(rawToml), &mc)
require.NoError(t, err)
err = ValidatePluginConfig(mc, v1FeedId)
require.EqualError(t, err, "Mercury: Servers and RawServerURL/ServerPubKey may not be specified together")
})
})
t.Run("with invalid values", func(t *testing.T) {
rawToml := `
InitialBlockNumber = "invalid"
`
var mc PluginConfig
err := toml.Unmarshal([]byte(rawToml), &mc)
require.Error(t, err)
assert.EqualError(t, err, `toml: strconv.ParseInt: parsing "invalid": invalid syntax`)
rawToml = `
ServerURL = "http://example.com"
ServerPubKey = "4242"
`
err = toml.Unmarshal([]byte(rawToml), &mc)
require.NoError(t, err)
err = ValidatePluginConfig(mc, v1FeedId)
require.Error(t, err)
assert.Contains(t, err.Error(), `Mercury: invalid scheme specified for MercuryServer, got: "http://example.com" (scheme: "http") but expected a websocket url e.g. "192.0.2.2:4242" or "wss://192.0.2.2:4242"`)
assert.Contains(t, err.Error(), `If RawServerURL is specified, ServerPubKey is also required and must be a 32-byte hex string`)
})
t.Run("with unnecessary values", func(t *testing.T) {
rawToml := `
ServerURL = "example.com:80"
ServerPubKey = "724ff6eae9e900270edfff233e16322a70ec06e1a6e62a81ef13921f398f6c93"
LinkFeedID = "0x00026b4aa7e57ca7b68ae1bf45653f56b656fd3aa335ef7fae696b663f1b8472"
`
var mc PluginConfig
err := toml.Unmarshal([]byte(rawToml), &mc)
require.NoError(t, err)
err = ValidatePluginConfig(mc, v1FeedId)
assert.Contains(t, err.Error(), `linkFeedID may not be specified for v1 jobs`)
})
})`
$DIR/core/services/ocr2/plugins/mercury/config/config_test.go: `t.Run("with valid values", func(t *testing.T) {
rawToml := `
ServerURL = "example.com:80"
ServerPubKey = "724ff6eae9e900270edfff233e16322a70ec06e1a6e62a81ef13921f398f6c93"
InitialBlockNumber = 1234
`
var mc PluginConfig
err := toml.Unmarshal([]byte(rawToml), &mc)
require.NoError(t, err)
assert.Equal(t, "example.com:80", mc.RawServerURL)
assert.Equal(t, "724ff6eae9e900270edfff233e16322a70ec06e1a6e62a81ef13921f398f6c93", mc.ServerPubKey.String())
assert.Equal(t, int64(1234), mc.InitialBlockNumber.Int64)
err = ValidatePluginConfig(mc, v1FeedId)
require.NoError(t, err)
})`
$DIR/core/services/ocr2/plugins/mercury/config/config_test.go: `err = ValidatePluginConfig(mc, v1FeedId)`
$DIR/core/services/ocr2/plugins/mercury/config/config_test.go: `t.Run("with multiple server URLs", func(t *testing.T) {
t.Run("if no ServerURL/ServerPubKey is specified", func(t *testing.T) {
rawToml := `
Servers = { "example.com:80" = "724ff6eae9e900270edfff233e16322a70ec06e1a6e62a81ef13921f398f6c93", "example2.invalid:1234" = "524ff6eae9e900270edfff233e16322a70ec06e1a6e62a81ef13921f398f6c93" }
`
var mc PluginConfig
err := toml.Unmarshal([]byte(rawToml), &mc)
require.NoError(t, err)
assert.Len(t, mc.Servers, 2)
assert.Equal(t, "724ff6eae9e900270edfff233e16322a70ec06e1a6e62a81ef13921f398f6c93", mc.Servers["example.com:80"].String())
assert.Equal(t, "524ff6eae9e900270edfff233e16322a70ec06e1a6e62a81ef13921f398f6c93", mc.Servers["example2.invalid:1234"].String())
err = ValidatePluginConfig(mc, v1FeedId)
require.NoError(t, err)
})
t.Run("if ServerURL or ServerPubKey is specified", func(t *testing.T) {
rawToml := `
Servers = { "example.com:80" = "724ff6eae9e900270edfff233e16322a70ec06e1a6e62a81ef13921f398f6c93", "example2.invalid:1234" = "524ff6eae9e900270edfff233e16322a70ec06e1a6e62a81ef13921f398f6c93" }
ServerURL = "example.com:80"
`
var mc PluginConfig
err := toml.Unmarshal([]byte(rawToml), &mc)
require.NoError(t, err)
err = ValidatePluginConfig(mc, v1FeedId)
require.EqualError(t, err, "Mercury: Servers and RawServerURL/ServerPubKey may not be specified together")
rawToml = `
Servers = { "example.com:80" = "724ff6eae9e900270edfff233e16322a70ec06e1a6e62a81ef13921f398f6c93", "example2.invalid:1234" = "524ff6eae9e900270edfff233e16322a70ec06e1a6e62a81ef13921f398f6c93" }
ServerPubKey = "724ff6eae9e900270edfff233e16322a70ec06e1a6e62a81ef13921f398f6c93"
`
err = toml.Unmarshal([]byte(rawToml), &mc)
require.NoError(t, err)
err = ValidatePluginConfig(mc, v1FeedId)
require.EqualError(t, err, "Mercury: Servers and RawServerURL/ServerPubKey may not be specified together")
})
})`
$DIR/core/services/ocr2/plugins/mercury/config/config_test.go: `t.Run("if no ServerURL/ServerPubKey is specified", func(t *testing.T) {
rawToml := `
Servers = { "example.com:80" = "724ff6eae9e900270edfff233e16322a70ec06e1a6e62a81ef13921f398f6c93", "example2.invalid:1234" = "524ff6eae9e900270edfff233e16322a70ec06e1a6e62a81ef13921f398f6c93" }
`
var mc PluginConfig
err := toml.Unmarshal([]byte(rawToml), &mc)
require.NoError(t, err)
assert.Len(t, mc.Servers, 2)
assert.Equal(t, "724ff6eae9e900270edfff233e16322a70ec06e1a6e62a81ef13921f398f6c93", mc.Servers["example.com:80"].String())
assert.Equal(t, "524ff6eae9e900270edfff233e16322a70ec06e1a6e62a81ef13921f398f6c93", mc.Servers["example2.invalid:1234"].String())
err = ValidatePluginConfig(mc, v1FeedId)
require.NoError(t, err)
})`
$DIR/core/services/ocr2/plugins/mercury/config/config_test.go: `err = ValidatePluginConfig(mc, v1FeedId)`
$DIR/core/services/ocr2/plugins/mercury/config/config_test.go: `t.Run("if ServerURL or ServerPubKey is specified", func(t *testing.T) {
rawToml := `
Servers = { "example.com:80" = "724ff6eae9e900270edfff233e16322a70ec06e1a6e62a81ef13921f398f6c93", "example2.invalid:1234" = "524ff6eae9e900270edfff233e16322a70ec06e1a6e62a81ef13921f398f6c93" }
ServerURL = "example.com:80"
`
var mc PluginConfig
err := toml.Unmarshal([]byte(rawToml), &mc)
require.NoError(t, err)
err = ValidatePluginConfig(mc, v1FeedId)
require.EqualError(t, err, "Mercury: Servers and RawServerURL/ServerPubKey may not be specified together")
rawToml = `
Servers = { "example.com:80" = "724ff6eae9e900270edfff233e16322a70ec06e1a6e62a81ef13921f398f6c93", "example2.invalid:1234" = "524ff6eae9e900270edfff233e16322a70ec06e1a6e62a81ef13921f398f6c93" }
ServerPubKey = "724ff6eae9e900270edfff233e16322a70ec06e1a6e62a81ef13921f398f6c93"
`
err = toml.Unmarshal([]byte(rawToml), &mc)
require.NoError(t, err)
err = ValidatePluginConfig(mc, v1FeedId)
require.EqualError(t, err, "Mercury: Servers and RawServerURL/ServerPubKey may not be specified together")
})`
$DIR/core/services/ocr2/plugins/mercury/config/config_test.go: `err = ValidatePluginConfig(mc, v1FeedId)`
$DIR/core/services/ocr2/plugins/mercury/config/config_test.go: `rawToml = `
Servers = { "example.com:80" = "724ff6eae9e900270edfff233e16322a70ec06e1a6e62a81ef13921f398f6c93", "example2.invalid:1234" = "524ff6eae9e900270edfff233e16322a70ec06e1a6e62a81ef13921f398f6c93" }
ServerPubKey = "724ff6eae9e900270edfff233e16322a70ec06e1a6e62a81ef13921f398f6c93"
``
$DIR/core/services/ocr2/plugins/mercury/config/config_test.go: `err = toml.Unmarshal([]byte(rawToml), &mc)`
$DIR/core/services/ocr2/plugins/mercury/config/config_test.go: `err = ValidatePluginConfig(mc, v1FeedId)`
$DIR/core/services/ocr2/plugins/mercury/config/config_test.go: `t.Run("with invalid values", func(t *testing.T) {
rawToml := `
InitialBlockNumber = "invalid"
`
var mc PluginConfig
err := toml.Unmarshal([]byte(rawToml), &mc)
require.Error(t, err)
assert.EqualError(t, err, `toml: strconv.ParseInt: parsing "invalid": invalid syntax`)
rawToml = `
ServerURL = "http://example.com"
ServerPubKey = "4242"
`
err = toml.Unmarshal([]byte(rawToml), &mc)
require.NoError(t, err)
err = ValidatePluginConfig(mc, v1FeedId)
require.Error(t, err)
assert.Contains(t, err.Error(), `Mercury: invalid scheme specified for MercuryServer, got: "http://example.com" (scheme: "http") but expected a websocket url e.g. "192.0.2.2:4242" or "wss://192.0.2.2:4242"`)
assert.Contains(t, err.Error(), `If RawServerURL is specified, ServerPubKey is also required and must be a 32-byte hex string`)
})`
$DIR/core/services/ocr2/plugins/mercury/config/config_test.go: `rawToml = `
ServerURL = "http://example.com"
ServerPubKey = "4242"
``
$DIR/core/services/ocr2/plugins/mercury/config/config_test.go: `err = toml.Unmarshal([]byte(rawToml), &mc)`
$DIR/core/services/ocr2/plugins/mercury/config/config_test.go: `err = ValidatePluginConfig(mc, v1FeedId)`
$DIR/core/services/ocr2/plugins/mercury/config/config_test.go: `t.Run("with unnecessary values", func(t *testing.T) {
rawToml := `
ServerURL = "example.com:80"
ServerPubKey = "724ff6eae9e900270edfff233e16322a70ec06e1a6e62a81ef13921f398f6c93"
LinkFeedID = "0x00026b4aa7e57ca7b68ae1bf45653f56b656fd3aa335ef7fae696b663f1b8472"
`
var mc PluginConfig
err := toml.Unmarshal([]byte(rawToml), &mc)
require.NoError(t, err)
err = ValidatePluginConfig(mc, v1FeedId)
assert.Contains(t, err.Error(), `linkFeedID may not be specified for v1 jobs`)
})`
$DIR/core/services/ocr2/plugins/mercury/config/config_test.go: `err = ValidatePluginConfig(mc, v1FeedId)`
$DIR/core/services/ocr2/plugins/mercury/config/config_test.go: `t.Run("with valid values", func(t *testing.T) {
rawToml := `
ServerURL = "example.com:80"
ServerPubKey = "724ff6eae9e900270edfff233e16322a70ec06e1a6e62a81ef13921f398f6c93"
LinkFeedID = "0x00026b4aa7e57ca7b68ae1bf45653f56b656fd3aa335ef7fae696b663f1b8472"
NativeFeedID = "0x00036b4aa7e57ca7b68ae1bf45653f56b656fd3aa335ef7fae696b663f1b8472"
`
var mc PluginConfig
err := toml.Unmarshal([]byte(rawToml), &mc)
require.NoError(t, err)
err = ValidatePluginConfig(mc, v2FeedId)
require.NoError(t, err)
require.NotNil(t, mc.LinkFeedID)
require.NotNil(t, mc.NativeFeedID)
assert.Equal(t, "0x00026b4aa7e57ca7b68ae1bf45653f56b656fd3aa335ef7fae696b663f1b8472", (*mc.LinkFeedID).String())
assert.Equal(t, "0x00036b4aa7e57ca7b68ae1bf45653f56b656fd3aa335ef7fae696b663f1b8472", (*mc.NativeFeedID).String())
})`
$DIR/core/services/ocr2/plugins/mercury/config/config_test.go: `err = ValidatePluginConfig(mc, v2FeedId)`
$DIR/core/services/ocr2/plugins/mercury/config/config_test.go: `t.Run("with invalid values", func(t *testing.T) {
var mc PluginConfig
rawToml := `LinkFeedID = "test"`
err := toml.Unmarshal([]byte(rawToml), &mc)
assert.Contains(t, err.Error(), "toml: hash: expected a hex string starting with '0x'")
rawToml = `LinkFeedID = "0xtest"`
err = toml.Unmarshal([]byte(rawToml), &mc)
assert.Contains(t, err.Error(), `toml: hash: UnmarshalText failed: encoding/hex: invalid byte: U+0074 't'`)
rawToml = `
ServerURL = "example.com:80"
ServerPubKey = "724ff6eae9e900270edfff233e16322a70ec06e1a6e62a81ef13921f398f6c93"
LinkFeedID = "0x00026b4aa7e57ca7b68ae1bf45653f56b656fd3aa335ef7fae696b663f1b8472"
`
err = toml.Unmarshal([]byte(rawToml), &mc)
require.NoError(t, err)
err = ValidatePluginConfig(mc, v2FeedId)
assert.Contains(t, err.Error(), "nativeFeedID must be specified for v2 jobs")
})`
$DIR/core/services/ocr2/plugins/mercury/config/config_test.go: `rawToml = `LinkFeedID = "0xtest"``
$DIR/core/services/ocr2/plugins/mercury/config/config_test.go: `err = toml.Unmarshal([]byte(rawToml), &mc)`
$DIR/core/services/ocr2/plugins/mercury/config/config_test.go: `rawToml = `
ServerURL = "example.com:80"
ServerPubKey = "724ff6eae9e900270edfff233e16322a70ec06e1a6e62a81ef13921f398f6c93"
LinkFeedID = "0x00026b4aa7e57ca7b68ae1bf45653f56b656fd3aa335ef7fae696b663f1b8472"
``
$DIR/core/services/ocr2/plugins/mercury/config/config_test.go: `err = toml.Unmarshal([]byte(rawToml), &mc)`
$DIR/core/services/ocr2/plugins/mercury/config/config_test.go: `err = ValidatePluginConfig(mc, v2FeedId)`
$DIR/core/services/ocr2/plugins/mercury/config/config_test.go: `t.Run("with unnecessary values", func(t *testing.T) {
rawToml := `
ServerURL = "example.com:80"
ServerPubKey = "724ff6eae9e900270edfff233e16322a70ec06e1a6e62a81ef13921f398f6c93"
InitialBlockNumber = 1234
`
var mc PluginConfig
err := toml.Unmarshal([]byte(rawToml), &mc)
require.NoError(t, err)
err = ValidatePluginConfig(mc, v2FeedId)
assert.Contains(t, err.Error(), `initialBlockNumber may not be specified for v2 jobs`)
})`
$DIR/core/services/ocr2/plugins/mercury/config/config_test.go: `err = ValidatePluginConfig(mc, v2FeedId)`
$DIR/core/services/ocr2/plugins/mercury/config/config_test.go: `t.Run("with single server", func(t *testing.T) {
pubKey := utils.PlainHexBytes([]byte{1, 2, 3})
pc := PluginConfig{RawServerURL: "example.com", ServerPubKey: pubKey}
require.Len(t, pc.GetServers(), 1)
assert.Equal(t, "example.com", pc.GetServers()[0].URL)
assert.Equal(t, pubKey, pc.GetServers()[0].PubKey)
pc = PluginConfig{RawServerURL: "wss://example.com", ServerPubKey: pubKey}
require.Len(t, pc.GetServers(), 1)
assert.Equal(t, "example.com", pc.GetServers()[0].URL)
assert.Equal(t, pubKey, pc.GetServers()[0].PubKey)
pc = PluginConfig{RawServerURL: "example.com:1234/foo", ServerPubKey: pubKey}
require.Len(t, pc.GetServers(), 1)
assert.Equal(t, "example.com:1234/foo", pc.GetServers()[0].URL)
assert.Equal(t, pubKey, pc.GetServers()[0].PubKey)
pc = PluginConfig{RawServerURL: "wss://example.com:1234/foo", ServerPubKey: pubKey}
require.Len(t, pc.GetServers(), 1)
assert.Equal(t, "example.com:1234/foo", pc.GetServers()[0].URL)
assert.Equal(t, pubKey, pc.GetServers()[0].PubKey)
})`
$DIR/core/services/ocr2/plugins/mercury/config/config_test.go: `pc = PluginConfig{RawServerURL: "wss://example.com", ServerPubKey: pubKey}`
$DIR/core/services/ocr2/plugins/mercury/config/config_test.go: `pc = PluginConfig{RawServerURL: "example.com:1234/foo", ServerPubKey: pubKey}`
$DIR/core/services/ocr2/plugins/mercury/config/config_test.go: `pc = PluginConfig{RawServerURL: "wss://example.com:1234/foo", ServerPubKey: pubKey}`
$DIR/core/services/ocr2/plugins/mercury/config/config_test.go: `.Run("Mercury v1", func(t *testing.T) {
t.Run("with valid values", func(t *testing.T) {
rawToml := `
ServerURL = "example.com:80"
ServerPubKey = "724ff6eae9e900270edfff233e16322a70ec06e1a6e62a81ef13921f398f6c93"
InitialBlockNumber = 1234
`
var mc PluginConfig
err := toml.Unmarshal([]byte(rawToml), &mc)
require.NoError(t, err)
assert.Equal(t, "example.com:80", mc.RawServerURL)
assert.Equal(t, "724ff6eae9e900270edfff233e16322a70ec06e1a6e62a81ef13921f398f6c93", mc.ServerPubKey.String())
assert.Equal(t, int64(1234), mc.InitialBlockNumber.Int64)
err = ValidatePluginConfig(mc, v1FeedId)
require.NoError(t, err)
})
t.Run("with multiple server URLs", func(t *testing.T) {
t.Run("if no ServerURL/ServerPubKey is specified", func(t *testing.T) {
rawToml := `
Servers = { "example.com:80" = "724ff6eae9e900270edfff233e16322a70ec06e1a6e62a81ef13921f398f6c93", "example2.invalid:1234" = "524ff6eae9e900270edfff233e16322a70ec06e1a6e62a81ef13921f398f6c93" }
`
var mc PluginConfig
err := toml.Unmarshal([]byte(rawToml), &mc)
require.NoError(t, err)
assert.Len(t, mc.Servers, 2)
assert.Equal(t, "724ff6eae9e900270edfff233e16322a70ec06e1a6e62a81ef13921f398f6c93", mc.Servers["example.com:80"].String())
assert.Equal(t, "524ff6eae9e900270edfff233e16322a70ec06e1a6e62a81ef13921f398f6c93", mc.Servers["example2.invalid:1234"].String())
err = ValidatePluginConfig(mc, v1FeedId)
require.NoError(t, err)
})
t.Run("if ServerURL or ServerPubKey is specified", func(t *testing.T) {
rawToml := `
Servers = { "example.com:80" = "724ff6eae9e900270edfff233e16322a70ec06e1a6e62a81ef13921f398f6c93", "example2.invalid:1234" = "524ff6eae9e900270edfff233e16322a70ec06e1a6e62a81ef13921f398f6c93" }
ServerURL = "example.com:80"
`
var mc PluginConfig
err := toml.Unmarshal([]byte(rawToml), &mc)
require.NoError(t, err)
err = ValidatePluginConfig(mc, v1FeedId)
require.EqualError(t, err, "Mercury: Servers and RawServerURL/ServerPubKey may not be specified together")
rawToml = `
Servers = { "example.com:80" = "724ff6eae9e900270edfff233e16322a70ec06e1a6e62a81ef13921f398f6c93", "example2.invalid:1234" = "524ff6eae9e900270edfff233e16322a70ec06e1a6e62a81ef13921f398f6c93" }
ServerPubKey = "724ff6eae9e900270edfff233e16322a70ec06e1a6e62a81ef13921f398f6c93"
`
err = toml.Unmarshal([]byte(rawToml), &mc)
require.NoError(t, err)
err = ValidatePluginConfig(mc, v1FeedId)
require.EqualError(t, err, "Mercury: Servers and RawServerURL/ServerPubKey may not be specified together")
})
})
t.Run("with invalid values", func(t *testing.T) {
rawToml := `
InitialBlockNumber = "invalid"
`
var mc PluginConfig
err := toml.Unmarshal([]byte(rawToml), &mc)
require.Error(t, err)
assert.EqualError(t, err, `toml: strconv.ParseInt: parsing "invalid": invalid syntax`)
rawToml = `
ServerURL = "http://example.com"
ServerPubKey = "4242"
`
err = toml.Unmarshal([]byte(rawToml), &mc)
require.NoError(t, err)
err = ValidatePluginConfig(mc, v1FeedId)
require.Error(t, err)
assert.Contains(t, err.Error(), `Mercury: invalid scheme specified for MercuryServer, got: "http://example.com" (scheme: "http") but expected a websocket url e.g. "192.0.2.2:4242" or "wss://192.0.2.2:4242"`)
assert.Contains(t, err.Error(), `If RawServerURL is specified, ServerPubKey is also required and must be a 32-byte hex string`)
})
t.Run("with unnecessary values", func(t *testing.T) {
rawToml := `
ServerURL = "example.com:80"
ServerPubKey = "724ff6eae9e900270edfff233e16322a70ec06e1a6e62a81ef13921f398f6c93"
LinkFeedID = "0x00026b4aa7e57ca7b68ae1bf45653f56b656fd3aa335ef7fae696b663f1b8472"
`
var mc PluginConfig
err := toml.Unmarshal([]byte(rawToml), &mc)
require.NoError(t, err)
err = ValidatePluginConfig(mc, v1FeedId)
assert.Contains(t, err.Error(), `linkFeedID may not be specified for v1 jobs`)
})
})`
$DIR/core/services/ocr2/plugins/mercury/config/config_test.go: `.Run("with valid values", func(t *testing.T) {
rawToml := `
ServerURL = "example.com:80"
ServerPubKey = "724ff6eae9e900270edfff233e16322a70ec06e1a6e62a81ef13921f398f6c93"
InitialBlockNumber = 1234
`
var mc PluginConfig
err := toml.Unmarshal([]byte(rawToml), &mc)
require.NoError(t, err)
assert.Equal(t, "example.com:80", mc.RawServerURL)
assert.Equal(t, "724ff6eae9e900270edfff233e16322a70ec06e1a6e62a81ef13921f398f6c93", mc.ServerPubKey.String())
assert.Equal(t, int64(1234), mc.InitialBlockNumber.Int64)
err = ValidatePluginConfig(mc, v1FeedId)
require.NoError(t, err)
})`
$DIR/core/services/ocr2/plugins/mercury/config/config_test.go: `.Unmarshal([]byte(rawToml), &mc)`
$DIR/core/services/ocr2/plugins/mercury/config/config_test.go: `.Run("with multiple server URLs", func(t *testing.T) {
t.Run("if no ServerURL/ServerPubKey is specified", func(t *testing.T) {
rawToml := `
Servers = { "example.com:80" = "724ff6eae9e900270edfff233e16322a70ec06e1a6e62a81ef13921f398f6c93", "example2.invalid:1234" = "524ff6eae9e900270edfff233e16322a70ec06e1a6e62a81ef13921f398f6c93" }
`
var mc PluginConfig
err := toml.Unmarshal([]byte(rawToml), &mc)
require.NoError(t, err)
assert.Len(t, mc.Servers, 2)
assert.Equal(t, "724ff6eae9e900270edfff233e16322a70ec06e1a6e62a81ef13921f398f6c93", mc.Servers["example.com:80"].String())
assert.Equal(t, "524ff6eae9e900270edfff233e16322a70ec06e1a6e62a81ef13921f398f6c93", mc.Servers["example2.invalid:1234"].String())
err = ValidatePluginConfig(mc, v1FeedId)
require.NoError(t, err)
})
t.Run("if ServerURL or ServerPubKey is specified", func(t *testing.T) {
rawToml := `
Servers = { "example.com:80" = "724ff6eae9e900270edfff233e16322a70ec06e1a6e62a81ef13921f398f6c93", "example2.invalid:1234" = "524ff6eae9e900270edfff233e16322a70ec06e1a6e62a81ef13921f398f6c93" }
ServerURL = "example.com:80"
`
var mc PluginConfig
err := toml.Unmarshal([]byte(rawToml), &mc)
require.NoError(t, err)
err = ValidatePluginConfig(mc, v1FeedId)
require.EqualError(t, err, "Mercury: Servers and RawServerURL/ServerPubKey may not be specified together")
rawToml = `
Servers = { "example.com:80" = "724ff6eae9e900270edfff233e16322a70ec06e1a6e62a81ef13921f398f6c93", "example2.invalid:1234" = "524ff6eae9e900270edfff233e16322a70ec06e1a6e62a81ef13921f398f6c93" }
ServerPubKey = "724ff6eae9e900270edfff233e16322a70ec06e1a6e62a81ef13921f398f6c93"
`
err = toml.Unmarshal([]byte(rawToml), &mc)
require.NoError(t, err)
err = ValidatePluginConfig(mc, v1FeedId)
require.EqualError(t, err, "Mercury: Servers and RawServerURL/ServerPubKey may not be specified together")
})
})`
$DIR/core/services/ocr2/plugins/mercury/config/config_test.go: `.Run("if no ServerURL/ServerPubKey is specified", func(t *testing.T) {
rawToml := `
Servers = { "example.com:80" = "724ff6eae9e900270edfff233e16322a70ec06e1a6e62a81ef13921f398f6c93", "example2.invalid:1234" = "524ff6eae9e900270edfff233e16322a70ec06e1a6e62a81ef13921f398f6c93" }
`
var mc PluginConfig
err := toml.Unmarshal([]byte(rawToml), &mc)
require.NoError(t, err)
assert.Len(t, mc.Servers, 2)
assert.Equal(t, "724ff6eae9e900270edfff233e16322a70ec06e1a6e62a81ef13921f398f6c93", mc.Servers["example.com:80"].String())
assert.Equal(t, "524ff6eae9e900270edfff233e16322a70ec06e1a6e62a81ef13921f398f6c93", mc.Servers["example2.invalid:1234"].String())
err = ValidatePluginConfig(mc, v1FeedId)
require.NoError(t, err)
})`
$DIR/core/services/ocr2/plugins/mercury/config/config_test.go: `.Unmarshal([]byte(rawToml), &mc)`
$DIR/core/services/ocr2/plugins/mercury/config/config_test.go: `.Run("if ServerURL or ServerPubKey is specified", func(t *testing.T) {
rawToml := `
Servers = { "example.com:80" = "724ff6eae9e900270edfff233e16322a70ec06e1a6e62a81ef13921f398f6c93", "example2.invalid:1234" = "524ff6eae9e900270edfff233e16322a70ec06e1a6e62a81ef13921f398f6c93" }
ServerURL = "example.com:80"
`
var mc PluginConfig
err := toml.Unmarshal([]byte(rawToml), &mc)
require.NoError(t, err)
err = ValidatePluginConfig(mc, v1FeedId)
require.EqualError(t, err, "Mercury: Servers and RawServerURL/ServerPubKey may not be specified together")
rawToml = `
Servers = { "example.com:80" = "724ff6eae9e900270edfff233e16322a70ec06e1a6e62a81ef13921f398f6c93", "example2.invalid:1234" = "524ff6eae9e900270edfff233e16322a70ec06e1a6e62a81ef13921f398f6c93" }
ServerPubKey = "724ff6eae9e900270edfff233e16322a70ec06e1a6e62a81ef13921f398f6c93"
`
err = toml.Unmarshal([]byte(rawToml), &mc)
require.NoError(t, err)
err = ValidatePluginConfig(mc, v1FeedId)
require.EqualError(t, err, "Mercury: Servers and RawServerURL/ServerPubKey may not be specified together")
})`
$DIR/core/services/ocr2/plugins/mercury/config/config_test.go: `.Unmarshal([]byte(rawToml), &mc)`
$DIR/core/services/ocr2/plugins/mercury/config/config_test.go: `.Unmarshal([]byte(rawToml), &mc)`
$DIR/core/services/ocr2/plugins/mercury/config/config_test.go: `.Run("with invalid values", func(t *testing.T) {
rawToml := `
InitialBlockNumber = "invalid"
`
var mc PluginConfig
err := toml.Unmarshal([]byte(rawToml), &mc)
require.Error(t, err)
assert.EqualError(t, err, `toml: strconv.ParseInt: parsing "invalid": invalid syntax`)
rawToml = `
ServerURL = "http://example.com"
ServerPubKey = "4242"
`
err = toml.Unmarshal([]byte(rawToml), &mc)
require.NoError(t, err)
err = ValidatePluginConfig(mc, v1FeedId)
require.Error(t, err)
assert.Contains(t, err.Error(), `Mercury: invalid scheme specified for MercuryServer, got: "http://example.com" (scheme: "http") but expected a websocket url e.g. "192.0.2.2:4242" or "wss://192.0.2.2:4242"`)
assert.Contains(t, err.Error(), `If RawServerURL is specified, ServerPubKey is also required and must be a 32-byte hex string`)
})`
$DIR/core/services/ocr2/plugins/mercury/config/config_test.go: `.Unmarshal([]byte(rawToml), &mc)`
$DIR/core/services/ocr2/plugins/mercury/config/config_test.go: `.Unmarshal([]byte(rawToml), &mc)`
$DIR/core/services/ocr2/plugins/mercury/config/config_test.go: `.Run("with unnecessary values", func(t *testing.T) {
rawToml := `
ServerURL = "example.com:80"
ServerPubKey = "724ff6eae9e900270edfff233e16322a70ec06e1a6e62a81ef13921f398f6c93"
LinkFeedID = "0x00026b4aa7e57ca7b68ae1bf45653f56b656fd3aa335ef7fae696b663f1b8472"
`
var mc PluginConfig
err := toml.Unmarshal([]byte(rawToml), &mc)
require.NoError(t, err)
err = ValidatePluginConfig(mc, v1FeedId)
assert.Contains(t, err.Error(), `linkFeedID may not be specified for v1 jobs`)
})`
$DIR/core/services/ocr2/plugins/mercury/config/config_test.go: `.Unmarshal([]byte(rawToml), &mc)`
$DIR/core/services/ocr2/plugins/mercury/config/config_test.go: `.Run("with valid values", func(t *testing.T) {
rawToml := `
ServerURL = "example.com:80"
ServerPubKey = "724ff6eae9e900270edfff233e16322a70ec06e1a6e62a81ef13921f398f6c93"
LinkFeedID = "0x00026b4aa7e57ca7b68ae1bf45653f56b656fd3aa335ef7fae696b663f1b8472"
NativeFeedID = "0x00036b4aa7e57ca7b68ae1bf45653f56b656fd3aa335ef7fae696b663f1b8472"
`
var mc PluginConfig
err := toml.Unmarshal([]byte(rawToml), &mc)
require.NoError(t, err)
err = ValidatePluginConfig(mc, v2FeedId)
require.NoError(t, err)
require.NotNil(t, mc.LinkFeedID)
require.NotNil(t, mc.NativeFeedID)
assert.Equal(t, "0x00026b4aa7e57ca7b68ae1bf45653f56b656fd3aa335ef7fae696b663f1b8472", (*mc.LinkFeedID).String())
assert.Equal(t, "0x00036b4aa7e57ca7b68ae1bf45653f56b656fd3aa335ef7fae696b663f1b8472", (*mc.NativeFeedID).String())
})`
$DIR/core/services/ocr2/plugins/mercury/config/config_test.go: `.Unmarshal([]byte(rawToml), &mc)`
$DIR/core/services/ocr2/plugins/mercury/config/config_test.go: `.Run("with invalid values", func(t *testing.T) {
var mc PluginConfig
rawToml := `LinkFeedID = "test"`
err := toml.Unmarshal([]byte(rawToml), &mc)
assert.Contains(t, err.Error(), "toml: hash: expected a hex string starting with '0x'")
rawToml = `LinkFeedID = "0xtest"`
err = toml.Unmarshal([]byte(rawToml), &mc)
assert.Contains(t, err.Error(), `toml: hash: UnmarshalText failed: encoding/hex: invalid byte: U+0074 't'`)
rawToml = `
ServerURL = "example.com:80"
ServerPubKey = "724ff6eae9e900270edfff233e16322a70ec06e1a6e62a81ef13921f398f6c93"
LinkFeedID = "0x00026b4aa7e57ca7b68ae1bf45653f56b656fd3aa335ef7fae696b663f1b8472"
`
err = toml.Unmarshal([]byte(rawToml), &mc)
require.NoError(t, err)
err = ValidatePluginConfig(mc, v2FeedId)
assert.Contains(t, err.Error(), "nativeFeedID must be specified for v2 jobs")
})`
$DIR/core/services/ocr2/plugins/mercury/config/config_test.go: `.Unmarshal([]byte(rawToml), &mc)`
$DIR/core/services/ocr2/plugins/mercury/config/config_test.go: `.Unmarshal([]byte(rawToml), &mc)`
$DIR/core/services/ocr2/plugins/mercury/config/config_test.go: `.Unmarshal([]byte(rawToml), &mc)`
$DIR/core/services/ocr2/plugins/mercury/config/config_test.go: `.Run("with unnecessary values", func(t *testing.T) {
rawToml := `
ServerURL = "example.com:80"
ServerPubKey = "724ff6eae9e900270edfff233e16322a70ec06e1a6e62a81ef13921f398f6c93"
InitialBlockNumber = 1234
`
var mc PluginConfig
err := toml.Unmarshal([]byte(rawToml), &mc)
require.NoError(t, err)
err = ValidatePluginConfig(mc, v2FeedId)
assert.Contains(t, err.Error(), `initialBlockNumber may not be specified for v2 jobs`)
})`
$DIR/core/services/ocr2/plugins/mercury/config/config_test.go: `.Unmarshal([]byte(rawToml), &mc)`
$DIR/core/services/ocr2/plugins/mercury/config/config_test.go: `.Run("with single server", func(t *testing.T) {
pubKey := utils.PlainHexBytes([]byte{1, 2, 3})
pc := PluginConfig{RawServerURL: "example.com", ServerPubKey: pubKey}
require.Len(t, pc.GetServers(), 1)
assert.Equal(t, "example.com", pc.GetServers()[0].URL)
assert.Equal(t, pubKey, pc.GetServers()[0].PubKey)
pc = PluginConfig{RawServerURL: "wss://example.com", ServerPubKey: pubKey}
require.Len(t, pc.GetServers(), 1)
assert.Equal(t, "example.com", pc.GetServers()[0].URL)
assert.Equal(t, pubKey, pc.GetServers()[0].PubKey)
pc = PluginConfig{RawServerURL: "example.com:1234/foo", ServerPubKey: pubKey}
require.Len(t, pc.GetServers(), 1)
assert.Equal(t, "example.com:1234/foo", pc.GetServers()[0].URL)
assert.Equal(t, pubKey, pc.GetServers()[0].PubKey)
pc = PluginConfig{RawServerURL: "wss://example.com:1234/foo", ServerPubKey: pubKey}
require.Len(t, pc.GetServers(), 1)
assert.Equal(t, "example.com:1234/foo", pc.GetServers()[0].URL)
assert.Equal(t, pubKey, pc.GetServers()[0].PubKey)
})`
$DIR/core/services/ocr2/plugins/mercury/config/config_test.go: `.PlainHexBytes([]byte{1, 2, 3})`
$DIR/core/services/ocr2/plugins/mercury/config/config_test.go: `.PlainHexBytes([]byte{1, 2, 3})`
$DIR/core/services/ocr2/plugins/mercury/config/config_test.go: `.PlainHexBytes([]byte{4, 5, 6})`
$DIR/core/services/ocr2/plugins/mercury/integration_plugin_test.go: `t.Setenv(string(env.MercuryPlugin.Cmd), "chainlink-mercury")`
$DIR/core/services/ocr2/plugins/mercury/integration_plugin_test.go: `t.Setenv(string(env.MercuryPlugin.Cmd), "chainlink-mercury")`
$DIR/core/services/ocr2/plugins/mercury/integration_plugin_test.go: `t.Setenv(string(env.MercuryPlugin.Cmd), "chainlink-mercury")`
$DIR/core/services/ocr2/plugins/mercury/integration_plugin_test.go: `.Setenv(string(env.MercuryPlugin.Cmd), "chainlink-mercury")`
$DIR/core/services/ocr2/plugins/mercury/integration_plugin_test.go: `.Setenv(string(env.MercuryPlugin.Cmd), "chainlink-mercury")`
$DIR/core/services/ocr2/plugins/mercury/integration_plugin_test.go: `.Setenv(string(env.MercuryPlugin.Cmd), "chainlink-mercury")`
$DIR/core/services/ocr2/plugins/mercury/plugin_test.go: `t.Run(tt.name, func(t *testing.T) {
if tt.loopMode {
t.Setenv(string(env.MercuryPlugin.Cmd), "fake_cmd")
assert.NotEmpty(t, env.MercuryPlugin.Cmd.Get())
}
got, err := newServicesTestWrapper(t, tt.args.pluginConfig, tt.args.feedID)
if (err != nil) != tt.wantErr {
t.Errorf("NewServices() error = %v, wantErr %v", err, tt.wantErr)
return
}
assert.Len(t, got, tt.wantServiceCnt)
if tt.loopMode {
foundLoopFactory := false
for i := 0; i < len(got); i++ {
if reflect.TypeOf(got[i]) == reflect.TypeOf(tt.wantLoopFactory) {
foundLoopFactory = true
break
}
}
assert.True(t, foundLoopFactory)
}
})`
$DIR/core/services/ocr2/plugins/mercury/plugin_test.go: `t.Setenv(string(env.MercuryPlugin.Cmd), "fake_cmd")`
$DIR/core/services/ocr2/plugins/mercury/plugin_test.go: `foundLoopFactory = true`
$DIR/core/services/ocr2/plugins/mercury/plugin_test.go: `.Run(tt.name, func(t *testing.T) {
if tt.loopMode {
t.Setenv(string(env.MercuryPlugin.Cmd), "fake_cmd")
assert.NotEmpty(t, env.MercuryPlugin.Cmd.Get())
}
got, err := newServicesTestWrapper(t, tt.args.pluginConfig, tt.args.feedID)
if (err != nil) != tt.wantErr {
t.Errorf("NewServices() error = %v, wantErr %v", err, tt.wantErr)
return
}
assert.Len(t, got, tt.wantServiceCnt)
if tt.loopMode {
foundLoopFactory := false
for i := 0; i < len(got); i++ {
if reflect.TypeOf(got[i]) == reflect.TypeOf(tt.wantLoopFactory) {
foundLoopFactory = true
break
}
}
assert.True(t, foundLoopFactory)
}
})`
$DIR/core/services/ocr2/plugins/mercury/plugin_test.go: `.Setenv(string(env.MercuryPlugin.Cmd), "fake_cmd")`
$DIR/core/services/ocr2/plugins/mercury/plugin_test.go: `.TypeOf(got[i])`
$DIR/core/services/ocr2/plugins/mercury/plugin_test.go: `.TypeOf(tt.wantLoopFactory)`
$DIR/core/services/ocr2/plugins/ocr2keeper/config_test.go: `.Unmarshal([]byte(raw), &value)`
$DIR/core/services/ocr2/plugins/ocr2keeper/config_test.go: `.Value()`
$DIR/core/services/ocr2/plugins/ocr2keeper/config_test.go: `.Unmarshal([]byte(raw), &config)`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v20/abi_test.go: `t.Run(test.Name, func(t *testing.T) {
abi, err := abi.JSON(strings.NewReader(keeper_registry_wrapper2_0.KeeperRegistryABI))
assert.Nil(t, err)
packer := &evmRegistryPackerV2_0{abi: abi}
_, err = packer.UnpackTransmitTxInput(hexutil.MustDecode(test.RawData))
assert.NotNil(t, err)
})`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v20/abi_test.go: `_, err = packer.UnpackTransmitTxInput(hexutil.MustDecode(test.RawData))`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v20/abi_test.go: `t.Run(test.Name, func(t *testing.T) {
packer := &evmRegistryPackerV2_0{abi: registryABI}
rs, err := packer.UnpackCheckResult(test.UpkeepKey, test.RawData)
assert.Nil(t, err)
assert.Equal(t, test.ExpectedResult, rs)
})`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v20/abi_test.go: `t.Run(test.Name, func(t *testing.T) {
packer := &evmRegistryPackerV2_0{abi: registryABI}
rs, err := packer.UnpackPerformResult(test.RawData)
assert.Nil(t, err)
assert.True(t, rs)
})`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v20/abi_test.go: `.JSON(strings.NewReader(keeper_registry_wrapper2_0.KeeperRegistryABI))`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v20/abi_test.go: `.NewReader(keeper_registry_wrapper2_0.KeeperRegistryABI)`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v20/abi_test.go: `.UnpackTransmitTxInput(hexutil.MustDecode("0x00011a04d404e571ead64b2f08cfae623a0d96b9beb326c20e322001cbbd344700000000000000000000000000000000000000000000000000000000000d580e35681c68a0426c30f4686e837c0cd7864200f48dbfe48c80c51f92aa5ac607b300000000000000000000000000000000000000000000000000000000000000e000000000000000000000000000000000000000000000000000000000000002e00000000000000000000000000000000000000000000000000000000000000360000100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001e000000000000000000000000000000000000000000000000000000000773594000000000000000000000000000000000000000000000000000010fb9cd2f34a00000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000c00000000000000000000000000000000000000000000000000000000000000001de1256139081c6b165a3aee0432f605d3dee0e6087ea53b46ca9478c253ea9c8000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000827075c4bacd41884f60c2ca7af3630400bedd92ad7ad0ba4e1f000e70297de0573e180000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000600000000000000000000000000000000000000000000000000000000000000a8c0000000000000000000000000000000000000000000000000000000000086470000000000000000000000000000000000000000000000000000000000000000326e2b521089d44f1457ae51b3f8d76e8577e08c4af9374bdc62aebbfad081a78a13941ab209ad44a905ee0fd704a46b2ebc022dcb60659bed87342fd94dadb70827af523f59c7c9bb8dcc77e959b0476869612e8cf84e63a2e9a5617290633f70000000000000000000000000000000000000000000000000000000000000003723d77998618c5959396115fc61380215e0395f68c18a6cf0647c3e759ee013040c2967fdd369aac59b464f931dacd7b8863498757eda53a9f6a4b6150f2dbe640771f3c242c297265c36c5e78f4c660ae74dcd1f5bda8687b6afed3d3f27e0d"))`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v20/abi_test.go: `.MustDecode("0x00011a04d404e571ead64b2f08cfae623a0d96b9beb326c20e322001cbbd344700000000000000000000000000000000000000000000000000000000000d580e35681c68a0426c30f4686e837c0cd7864200f48dbfe48c80c51f92aa5ac607b300000000000000000000000000000000000000000000000000000000000000e000000000000000000000000000000000000000000000000000000000000002e00000000000000000000000000000000000000000000000000000000000000360000100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001e000000000000000000000000000000000000000000000000000000000773594000000000000000000000000000000000000000000000000000010fb9cd2f34a00000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000c00000000000000000000000000000000000000000000000000000000000000001de1256139081c6b165a3aee0432f605d3dee0e6087ea53b46ca9478c253ea9c8000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000827075c4bacd41884f60c2ca7af3630400bedd92ad7ad0ba4e1f000e70297de0573e180000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000600000000000000000000000000000000000000000000000000000000000000a8c0000000000000000000000000000000000000000000000000000000000086470000000000000000000000000000000000000000000000000000000000000000326e2b521089d44f1457ae51b3f8d76e8577e08c4af9374bdc62aebbfad081a78a13941ab209ad44a905ee0fd704a46b2ebc022dcb60659bed87342fd94dadb70827af523f59c7c9bb8dcc77e959b0476869612e8cf84e63a2e9a5617290633f70000000000000000000000000000000000000000000000000000000000000003723d77998618c5959396115fc61380215e0395f68c18a6cf0647c3e759ee013040c2967fdd369aac59b464f931dacd7b8863498757eda53a9f6a4b6150f2dbe640771f3c242c297265c36c5e78f4c660ae74dcd1f5bda8687b6afed3d3f27e0d")`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v20/abi_test.go: `.SetString("100445849710294316610676143149039812931260394722330855891004881602834541226440", 10)`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v20/abi_test.go: `.ID.String()`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v20/abi_test.go: `.String()`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v20/abi_test.go: `.Run(test.Name, func(t *testing.T) {
abi, err := abi.JSON(strings.NewReader(keeper_registry_wrapper2_0.KeeperRegistryABI))
assert.Nil(t, err)
packer := &evmRegistryPackerV2_0{abi: abi}
_, err = packer.UnpackTransmitTxInput(hexutil.MustDecode(test.RawData))
assert.NotNil(t, err)
})`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v20/abi_test.go: `.JSON(strings.NewReader(keeper_registry_wrapper2_0.KeeperRegistryABI))`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v20/abi_test.go: `.NewReader(keeper_registry_wrapper2_0.KeeperRegistryABI)`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v20/abi_test.go: `.UnpackTransmitTxInput(hexutil.MustDecode(test.RawData))`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v20/abi_test.go: `.MustDecode(test.RawData)`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v20/abi_test.go: `.JSON(strings.NewReader(keeper_registry_wrapper2_0.KeeperRegistryABI))`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v20/abi_test.go: `.NewReader(keeper_registry_wrapper2_0.KeeperRegistryABI)`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v20/abi_test.go: `.SetString("1843548457736589226156809205796175506139185429616502850435279853710366065936", 10)`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v20/abi_test.go: `.UpkeepKey(fmt.Sprintf("19447615|%s", upkeepId))`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v20/abi_test.go: `.Sprintf("19447615|%s", upkeepId)`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v20/abi_test.go: `.NewInt(16924)`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v20/abi_test.go: `.NewInt(1000000000)`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v20/abi_test.go: `.NewInt(3532383906411401)`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v20/abi_test.go: `.UpkeepKey(fmt.Sprintf("19448272|%s", upkeepId))`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v20/abi_test.go: `.Sprintf("19448272|%s", upkeepId)`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v20/abi_test.go: `.NewInt(30001)`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v20/abi_test.go: `.NewInt(1000000000)`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v20/abi_test.go: `.NewInt(3532383906411401)`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v20/abi_test.go: `.Run(test.Name, func(t *testing.T) {
packer := &evmRegistryPackerV2_0{abi: registryABI}
rs, err := packer.UnpackCheckResult(test.UpkeepKey, test.RawData)
assert.Nil(t, err)
assert.Equal(t, test.ExpectedResult, rs)
})`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v20/abi_test.go: `.UnpackCheckResult(test.UpkeepKey, test.RawData)`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v20/abi_test.go: `.JSON(strings.NewReader(keeper_registry_wrapper2_0.KeeperRegistryABI))`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v20/abi_test.go: `.NewReader(keeper_registry_wrapper2_0.KeeperRegistryABI)`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v20/abi_test.go: `.Run(test.Name, func(t *testing.T) {
packer := &evmRegistryPackerV2_0{abi: registryABI}
rs, err := packer.UnpackPerformResult(test.RawData)
assert.Nil(t, err)
assert.True(t, rs)
})`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v20/abi_test.go: `.UnpackPerformResult(test.RawData)`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v20/encoder_test.go: `t.Run("encoding an empty list of upkeep results returns a nil byte array", func(t *testing.T) {
b, err := encoder.EncodeReport([]ocr2keepers.UpkeepResult{})
assert.Nil(t, err)
assert.Equal(t, b, []byte(nil))
})`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v20/encoder_test.go: `t.Run("attempting to encode an invalid upkeep result returns an error", func(t *testing.T) {
b, err := encoder.EncodeReport([]ocr2keepers.UpkeepResult{"data"})
assert.Error(t, err, "unexpected upkeep result struct")
assert.Equal(t, b, []byte(nil))
})`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v20/encoder_test.go: `t.Run("successfully encodes a single upkeep result", func(t *testing.T) {
upkeepResult := EVMAutomationUpkeepResult20{
Block: 1,
ID: big.NewInt(10),
Eligible: true,
GasUsed: big.NewInt(100),
PerformData: []byte("data"),
FastGasWei: big.NewInt(100),
LinkNative: big.NewInt(100),
CheckBlockNumber: 1,
CheckBlockHash: [32]byte{1, 2, 3, 4, 5, 6, 7, 8, 1, 2, 3, 4, 5, 6, 7, 8, 1, 2, 3, 4, 5, 6, 7, 8, 1, 2, 3, 4, 5, 6, 7, 8},
ExecuteGas: 10,
}
b, err := encoder.EncodeReport([]ocr2keepers.UpkeepResult{upkeepResult})
assert.Nil(t, err)
assert.Len(t, b, 416)
t.Run("successfully decodes a report with a single upkeep result", func(t *testing.T) {
upkeeps, err := encoder.DecodeReport(b)
assert.Nil(t, err)
assert.Len(t, upkeeps, 1)
upkeep := upkeeps[0].(EVMAutomationUpkeepResult20)
// some fields aren't populated by the decode so we compare field-by-field for those that are populated
assert.Equal(t, upkeep.Block, upkeepResult.Block)
assert.Equal(t, upkeep.ID, upkeepResult.ID)
assert.Equal(t, upkeep.Eligible, upkeepResult.Eligible)
assert.Equal(t, upkeep.PerformData, upkeepResult.PerformData)
assert.Equal(t, upkeep.FastGasWei, upkeepResult.FastGasWei)
assert.Equal(t, upkeep.LinkNative, upkeepResult.LinkNative)
assert.Equal(t, upkeep.CheckBlockNumber, upkeepResult.CheckBlockNumber)
assert.Equal(t, upkeep.CheckBlockHash, upkeepResult.CheckBlockHash)
})
t.Run("an error is returned when unpacking into a map fails", func(t *testing.T) {
oldUnpackIntoMapFn := unpackIntoMapFn
unpackIntoMapFn = func(v map[string]interface{}, data []byte) error {
return errors.New("failed to unpack into map")
}
defer func() {
unpackIntoMapFn = oldUnpackIntoMapFn
}()
upkeeps, err := encoder.DecodeReport(b)
assert.Error(t, err, "failed to unpack into map")
assert.Len(t, upkeeps, 0)
})
t.Run("an error is returned when an expected key is missing from the map", func(t *testing.T) {
oldMKeys := mKeys
mKeys = []string{"fastGasWei", "linkNative", "upkeepIds", "wrappedPerformDatas", "thisKeyWontExist"}
defer func() {
mKeys = oldMKeys
}()
upkeeps, err := encoder.DecodeReport(b)
assert.Error(t, err, "decoding error")
assert.Len(t, upkeeps, 0)
})
t.Run("an error is returned when the third element of the map is not a slice of big.Int", func(t *testing.T) {
oldMKeys := mKeys
mKeys = []string{"fastGasWei", "linkNative", "wrappedPerformDatas", "upkeepIds"}
defer func() {
mKeys = oldMKeys
}()
upkeeps, err := encoder.DecodeReport(b)
assert.Error(t, err, "upkeep ids of incorrect type in report")
assert.Len(t, upkeeps, 0)
})
t.Run("an error is returned when the fourth element of the map is not a struct of perform data", func(t *testing.T) {
oldMKeys := mKeys
mKeys = []string{"fastGasWei", "linkNative", "upkeepIds", "upkeepIds"}
defer func() {
mKeys = oldMKeys
}()
upkeeps, err := encoder.DecodeReport(b)
assert.Error(t, err, "performs of incorrect structure in report")
assert.Len(t, upkeeps, 0)
})
t.Run("an error is returned when the upkeep ids and performDatas are of different lengths", func(t *testing.T) {
oldUnpackIntoMapFn := unpackIntoMapFn
unpackIntoMapFn = func(v map[string]interface{}, data []byte) error {
v["fastGasWei"] = 1
v["linkNative"] = 2
v["upkeepIds"] = []*big.Int{big.NewInt(123), big.NewInt(456)}
v["wrappedPerformDatas"] = []struct {
CheckBlockNumber uint32 `json:"checkBlockNumber"`
CheckBlockhash [32]byte `json:"checkBlockhash"`
PerformData []byte `json:"performData"`
}{
{
CheckBlockNumber: 1,
CheckBlockhash: [32]byte{1, 2, 3, 4, 5, 6, 7, 8, 1, 2, 3, 4, 5, 6, 7, 8, 1, 2, 3, 4, 5, 6, 7, 8, 1, 2, 3, 4, 5, 6, 7, 8},
PerformData: []byte{},
},
}
return nil
}
defer func() {
unpackIntoMapFn = oldUnpackIntoMapFn
}()
upkeeps, err := encoder.DecodeReport(b)
assert.Error(t, err, "upkeep ids and performs should have matching length")
assert.Len(t, upkeeps, 0)
})
t.Run("an error is returned when the first element of the map is not a big int", func(t *testing.T) {
oldMKeys := mKeys
mKeys = []string{"upkeepIds", "linkNative", "upkeepIds", "wrappedPerformDatas"}
defer func() {
mKeys = oldMKeys
}()
upkeeps, err := encoder.DecodeReport(b)
assert.Error(t, err, "fast gas as wrong type")
assert.Len(t, upkeeps, 0)
})
t.Run("an error is returned when the second element of the map is not a big int", func(t *testing.T) {
oldMKeys := mKeys
mKeys = []string{"fastGasWei", "upkeepIds", "upkeepIds", "wrappedPerformDatas"}
defer func() {
mKeys = oldMKeys
}()
upkeeps, err := encoder.DecodeReport(b)
assert.Error(t, err, "link native as wrong type")
assert.Len(t, upkeeps, 0)
})
})`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v20/encoder_test.go: `t.Run("successfully decodes a report with a single upkeep result", func(t *testing.T) {
upkeeps, err := encoder.DecodeReport(b)
assert.Nil(t, err)
assert.Len(t, upkeeps, 1)
upkeep := upkeeps[0].(EVMAutomationUpkeepResult20)
// some fields aren't populated by the decode so we compare field-by-field for those that are populated
assert.Equal(t, upkeep.Block, upkeepResult.Block)
assert.Equal(t, upkeep.ID, upkeepResult.ID)
assert.Equal(t, upkeep.Eligible, upkeepResult.Eligible)
assert.Equal(t, upkeep.PerformData, upkeepResult.PerformData)
assert.Equal(t, upkeep.FastGasWei, upkeepResult.FastGasWei)
assert.Equal(t, upkeep.LinkNative, upkeepResult.LinkNative)
assert.Equal(t, upkeep.CheckBlockNumber, upkeepResult.CheckBlockNumber)
assert.Equal(t, upkeep.CheckBlockHash, upkeepResult.CheckBlockHash)
})`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v20/encoder_test.go: `t.Run("an error is returned when unpacking into a map fails", func(t *testing.T) {
oldUnpackIntoMapFn := unpackIntoMapFn
unpackIntoMapFn = func(v map[string]interface{}, data []byte) error {
return errors.New("failed to unpack into map")
}
defer func() {
unpackIntoMapFn = oldUnpackIntoMapFn
}()
upkeeps, err := encoder.DecodeReport(b)
assert.Error(t, err, "failed to unpack into map")
assert.Len(t, upkeeps, 0)
})`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v20/encoder_test.go: `unpackIntoMapFn = oldUnpackIntoMapFn`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v20/encoder_test.go: `t.Run("an error is returned when an expected key is missing from the map", func(t *testing.T) {
oldMKeys := mKeys
mKeys = []string{"fastGasWei", "linkNative", "upkeepIds", "wrappedPerformDatas", "thisKeyWontExist"}
defer func() {
mKeys = oldMKeys
}()
upkeeps, err := encoder.DecodeReport(b)
assert.Error(t, err, "decoding error")
assert.Len(t, upkeeps, 0)
})`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v20/encoder_test.go: `mKeys = []string{"fastGasWei", "linkNative", "upkeepIds", "wrappedPerformDatas", "thisKeyWontExist"}`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v20/encoder_test.go: `mKeys = oldMKeys`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v20/encoder_test.go: `t.Run("an error is returned when the third element of the map is not a slice of big.Int", func(t *testing.T) {
oldMKeys := mKeys
mKeys = []string{"fastGasWei", "linkNative", "wrappedPerformDatas", "upkeepIds"}
defer func() {
mKeys = oldMKeys
}()
upkeeps, err := encoder.DecodeReport(b)
assert.Error(t, err, "upkeep ids of incorrect type in report")
assert.Len(t, upkeeps, 0)
})`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v20/encoder_test.go: `mKeys = []string{"fastGasWei", "linkNative", "wrappedPerformDatas", "upkeepIds"}`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v20/encoder_test.go: `mKeys = oldMKeys`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v20/encoder_test.go: `t.Run("an error is returned when the fourth element of the map is not a struct of perform data", func(t *testing.T) {
oldMKeys := mKeys
mKeys = []string{"fastGasWei", "linkNative", "upkeepIds", "upkeepIds"}
defer func() {
mKeys = oldMKeys
}()
upkeeps, err := encoder.DecodeReport(b)
assert.Error(t, err, "performs of incorrect structure in report")
assert.Len(t, upkeeps, 0)
})`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v20/encoder_test.go: `mKeys = []string{"fastGasWei", "linkNative", "upkeepIds", "upkeepIds"}`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v20/encoder_test.go: `mKeys = oldMKeys`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v20/encoder_test.go: `t.Run("an error is returned when the upkeep ids and performDatas are of different lengths", func(t *testing.T) {
oldUnpackIntoMapFn := unpackIntoMapFn
unpackIntoMapFn = func(v map[string]interface{}, data []byte) error {
v["fastGasWei"] = 1
v["linkNative"] = 2
v["upkeepIds"] = []*big.Int{big.NewInt(123), big.NewInt(456)}
v["wrappedPerformDatas"] = []struct {
CheckBlockNumber uint32 `json:"checkBlockNumber"`
CheckBlockhash [32]byte `json:"checkBlockhash"`
PerformData []byte `json:"performData"`
}{
{
CheckBlockNumber: 1,
CheckBlockhash: [32]byte{1, 2, 3, 4, 5, 6, 7, 8, 1, 2, 3, 4, 5, 6, 7, 8, 1, 2, 3, 4, 5, 6, 7, 8, 1, 2, 3, 4, 5, 6, 7, 8},
PerformData: []byte{},
},
}
return nil
}
defer func() {
unpackIntoMapFn = oldUnpackIntoMapFn
}()
upkeeps, err := encoder.DecodeReport(b)
assert.Error(t, err, "upkeep ids and performs should have matching length")
assert.Len(t, upkeeps, 0)
})`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v20/encoder_test.go: `v["fastGasWei"] = 1`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v20/encoder_test.go: `v["linkNative"] = 2`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v20/encoder_test.go: `v["upkeepIds"] = []*big.Int{big.NewInt(123), big.NewInt(456)}`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v20/encoder_test.go: `v["wrappedPerformDatas"] = []struct {
CheckBlockNumber uint32 `json:"checkBlockNumber"`
CheckBlockhash [32]byte `json:"checkBlockhash"`
PerformData []byte `json:"performData"`
}{
{
CheckBlockNumber: 1,
CheckBlockhash: [32]byte{1, 2, 3, 4, 5, 6, 7, 8, 1, 2, 3, 4, 5, 6, 7, 8, 1, 2, 3, 4, 5, 6, 7, 8, 1, 2, 3, 4, 5, 6, 7, 8},
PerformData: []byte{},
},
}`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v20/encoder_test.go: `unpackIntoMapFn = oldUnpackIntoMapFn`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v20/encoder_test.go: `t.Run("an error is returned when the first element of the map is not a big int", func(t *testing.T) {
oldMKeys := mKeys
mKeys = []string{"upkeepIds", "linkNative", "upkeepIds", "wrappedPerformDatas"}
defer func() {
mKeys = oldMKeys
}()
upkeeps, err := encoder.DecodeReport(b)
assert.Error(t, err, "fast gas as wrong type")
assert.Len(t, upkeeps, 0)
})`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v20/encoder_test.go: `mKeys = []string{"upkeepIds", "linkNative", "upkeepIds", "wrappedPerformDatas"}`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v20/encoder_test.go: `mKeys = oldMKeys`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v20/encoder_test.go: `t.Run("an error is returned when the second element of the map is not a big int", func(t *testing.T) {
oldMKeys := mKeys
mKeys = []string{"fastGasWei", "upkeepIds", "upkeepIds", "wrappedPerformDatas"}
defer func() {
mKeys = oldMKeys
}()
upkeeps, err := encoder.DecodeReport(b)
assert.Error(t, err, "link native as wrong type")
assert.Len(t, upkeeps, 0)
})`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v20/encoder_test.go: `mKeys = []string{"fastGasWei", "upkeepIds", "upkeepIds", "wrappedPerformDatas"}`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v20/encoder_test.go: `mKeys = oldMKeys`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v20/encoder_test.go: `t.Run("successfully encodes multiple upkeep results", func(t *testing.T) {
upkeepResult0 := EVMAutomationUpkeepResult20{
Block: 1,
ID: big.NewInt(10),
Eligible: true,
GasUsed: big.NewInt(100),
PerformData: []byte("data0"),
FastGasWei: big.NewInt(100),
LinkNative: big.NewInt(100),
CheckBlockNumber: 1,
CheckBlockHash: [32]byte{1, 2, 3, 4, 5, 6, 7, 8, 1, 2, 3, 4, 5, 6, 7, 8, 1, 2, 3, 4, 5, 6, 7, 8, 1, 2, 3, 4, 5, 6, 7, 8},
ExecuteGas: 10,
}
upkeepResult1 := EVMAutomationUpkeepResult20{
Block: 1,
ID: big.NewInt(10),
Eligible: true,
GasUsed: big.NewInt(200),
PerformData: []byte("data1"),
FastGasWei: big.NewInt(200),
LinkNative: big.NewInt(200),
CheckBlockNumber: 2,
CheckBlockHash: [32]byte{1, 2, 3, 4, 5, 6, 7, 8, 1, 2, 3, 4, 5, 6, 7, 8, 1, 2, 3, 4, 5, 6, 7, 8, 1, 2, 3, 4, 5, 6, 7, 8},
ExecuteGas: 20,
}
b, err := encoder.EncodeReport([]ocr2keepers.UpkeepResult{upkeepResult0, upkeepResult1})
assert.Nil(t, err)
assert.Len(t, b, 640)
})`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v20/encoder_test.go: `packFn = oldPackFn`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v20/encoder_test.go: `.Run("encoding an empty list of upkeep results returns a nil byte array", func(t *testing.T) {
b, err := encoder.EncodeReport([]ocr2keepers.UpkeepResult{})
assert.Nil(t, err)
assert.Equal(t, b, []byte(nil))
})`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v20/encoder_test.go: `.EncodeReport([]ocr2keepers.UpkeepResult{})`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v20/encoder_test.go: `.Run("attempting to encode an invalid upkeep result returns an error", func(t *testing.T) {
b, err := encoder.EncodeReport([]ocr2keepers.UpkeepResult{"data"})
assert.Error(t, err, "unexpected upkeep result struct")
assert.Equal(t, b, []byte(nil))
})`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v20/encoder_test.go: `.EncodeReport([]ocr2keepers.UpkeepResult{"data"})`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v20/encoder_test.go: `.Run("successfully encodes a single upkeep result", func(t *testing.T) {
upkeepResult := EVMAutomationUpkeepResult20{
Block: 1,
ID: big.NewInt(10),
Eligible: true,
GasUsed: big.NewInt(100),
PerformData: []byte("data"),
FastGasWei: big.NewInt(100),
LinkNative: big.NewInt(100),
CheckBlockNumber: 1,
CheckBlockHash: [32]byte{1, 2, 3, 4, 5, 6, 7, 8, 1, 2, 3, 4, 5, 6, 7, 8, 1, 2, 3, 4, 5, 6, 7, 8, 1, 2, 3, 4, 5, 6, 7, 8},
ExecuteGas: 10,
}
b, err := encoder.EncodeReport([]ocr2keepers.UpkeepResult{upkeepResult})
assert.Nil(t, err)
assert.Len(t, b, 416)
t.Run("successfully decodes a report with a single upkeep result", func(t *testing.T) {
upkeeps, err := encoder.DecodeReport(b)
assert.Nil(t, err)
assert.Len(t, upkeeps, 1)
upkeep := upkeeps[0].(EVMAutomationUpkeepResult20)
// some fields aren't populated by the decode so we compare field-by-field for those that are populated
assert.Equal(t, upkeep.Block, upkeepResult.Block)
assert.Equal(t, upkeep.ID, upkeepResult.ID)
assert.Equal(t, upkeep.Eligible, upkeepResult.Eligible)
assert.Equal(t, upkeep.PerformData, upkeepResult.PerformData)
assert.Equal(t, upkeep.FastGasWei, upkeepResult.FastGasWei)
assert.Equal(t, upkeep.LinkNative, upkeepResult.LinkNative)
assert.Equal(t, upkeep.CheckBlockNumber, upkeepResult.CheckBlockNumber)
assert.Equal(t, upkeep.CheckBlockHash, upkeepResult.CheckBlockHash)
})
t.Run("an error is returned when unpacking into a map fails", func(t *testing.T) {
oldUnpackIntoMapFn := unpackIntoMapFn
unpackIntoMapFn = func(v map[string]interface{}, data []byte) error {
return errors.New("failed to unpack into map")
}
defer func() {
unpackIntoMapFn = oldUnpackIntoMapFn
}()
upkeeps, err := encoder.DecodeReport(b)
assert.Error(t, err, "failed to unpack into map")
assert.Len(t, upkeeps, 0)
})
t.Run("an error is returned when an expected key is missing from the map", func(t *testing.T) {
oldMKeys := mKeys
mKeys = []string{"fastGasWei", "linkNative", "upkeepIds", "wrappedPerformDatas", "thisKeyWontExist"}
defer func() {
mKeys = oldMKeys
}()
upkeeps, err := encoder.DecodeReport(b)
assert.Error(t, err, "decoding error")
assert.Len(t, upkeeps, 0)
})
t.Run("an error is returned when the third element of the map is not a slice of big.Int", func(t *testing.T) {
oldMKeys := mKeys
mKeys = []string{"fastGasWei", "linkNative", "wrappedPerformDatas", "upkeepIds"}
defer func() {
mKeys = oldMKeys
}()
upkeeps, err := encoder.DecodeReport(b)
assert.Error(t, err, "upkeep ids of incorrect type in report")
assert.Len(t, upkeeps, 0)
})
t.Run("an error is returned when the fourth element of the map is not a struct of perform data", func(t *testing.T) {
oldMKeys := mKeys
mKeys = []string{"fastGasWei", "linkNative", "upkeepIds", "upkeepIds"}
defer func() {
mKeys = oldMKeys
}()
upkeeps, err := encoder.DecodeReport(b)
assert.Error(t, err, "performs of incorrect structure in report")
assert.Len(t, upkeeps, 0)
})
t.Run("an error is returned when the upkeep ids and performDatas are of different lengths", func(t *testing.T) {
oldUnpackIntoMapFn := unpackIntoMapFn
unpackIntoMapFn = func(v map[string]interface{}, data []byte) error {
v["fastGasWei"] = 1
v["linkNative"] = 2
v["upkeepIds"] = []*big.Int{big.NewInt(123), big.NewInt(456)}
v["wrappedPerformDatas"] = []struct {
CheckBlockNumber uint32 `json:"checkBlockNumber"`
CheckBlockhash [32]byte `json:"checkBlockhash"`
PerformData []byte `json:"performData"`
}{
{
CheckBlockNumber: 1,
CheckBlockhash: [32]byte{1, 2, 3, 4, 5, 6, 7, 8, 1, 2, 3, 4, 5, 6, 7, 8, 1, 2, 3, 4, 5, 6, 7, 8, 1, 2, 3, 4, 5, 6, 7, 8},
PerformData: []byte{},
},
}
return nil
}
defer func() {
unpackIntoMapFn = oldUnpackIntoMapFn
}()
upkeeps, err := encoder.DecodeReport(b)
assert.Error(t, err, "upkeep ids and performs should have matching length")
assert.Len(t, upkeeps, 0)
})
t.Run("an error is returned when the first element of the map is not a big int", func(t *testing.T) {
oldMKeys := mKeys
mKeys = []string{"upkeepIds", "linkNative", "upkeepIds", "wrappedPerformDatas"}
defer func() {
mKeys = oldMKeys
}()
upkeeps, err := encoder.DecodeReport(b)
assert.Error(t, err, "fast gas as wrong type")
assert.Len(t, upkeeps, 0)
})
t.Run("an error is returned when the second element of the map is not a big int", func(t *testing.T) {
oldMKeys := mKeys
mKeys = []string{"fastGasWei", "upkeepIds", "upkeepIds", "wrappedPerformDatas"}
defer func() {
mKeys = oldMKeys
}()
upkeeps, err := encoder.DecodeReport(b)
assert.Error(t, err, "link native as wrong type")
assert.Len(t, upkeeps, 0)
})
})`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v20/encoder_test.go: `.NewInt(10)`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v20/encoder_test.go: `.NewInt(100)`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v20/encoder_test.go: `.NewInt(100)`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v20/encoder_test.go: `.NewInt(100)`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v20/encoder_test.go: `.EncodeReport([]ocr2keepers.UpkeepResult{upkeepResult})`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v20/encoder_test.go: `.Run("successfully decodes a report with a single upkeep result", func(t *testing.T) {
upkeeps, err := encoder.DecodeReport(b)
assert.Nil(t, err)
assert.Len(t, upkeeps, 1)
upkeep := upkeeps[0].(EVMAutomationUpkeepResult20)
// some fields aren't populated by the decode so we compare field-by-field for those that are populated
assert.Equal(t, upkeep.Block, upkeepResult.Block)
assert.Equal(t, upkeep.ID, upkeepResult.ID)
assert.Equal(t, upkeep.Eligible, upkeepResult.Eligible)
assert.Equal(t, upkeep.PerformData, upkeepResult.PerformData)
assert.Equal(t, upkeep.FastGasWei, upkeepResult.FastGasWei)
assert.Equal(t, upkeep.LinkNative, upkeepResult.LinkNative)
assert.Equal(t, upkeep.CheckBlockNumber, upkeepResult.CheckBlockNumber)
assert.Equal(t, upkeep.CheckBlockHash, upkeepResult.CheckBlockHash)
})`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v20/encoder_test.go: `.DecodeReport(b)`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v20/encoder_test.go: `.Run("an error is returned when unpacking into a map fails", func(t *testing.T) {
oldUnpackIntoMapFn := unpackIntoMapFn
unpackIntoMapFn = func(v map[string]interface{}, data []byte) error {
return errors.New("failed to unpack into map")
}
defer func() {
unpackIntoMapFn = oldUnpackIntoMapFn
}()
upkeeps, err := encoder.DecodeReport(b)
assert.Error(t, err, "failed to unpack into map")
assert.Len(t, upkeeps, 0)
})`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v20/encoder_test.go: `.New("failed to unpack into map")`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v20/encoder_test.go: `.DecodeReport(b)`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v20/encoder_test.go: `.Run("an error is returned when an expected key is missing from the map", func(t *testing.T) {
oldMKeys := mKeys
mKeys = []string{"fastGasWei", "linkNative", "upkeepIds", "wrappedPerformDatas", "thisKeyWontExist"}
defer func() {
mKeys = oldMKeys
}()
upkeeps, err := encoder.DecodeReport(b)
assert.Error(t, err, "decoding error")
assert.Len(t, upkeeps, 0)
})`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v20/encoder_test.go: `.DecodeReport(b)`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v20/encoder_test.go: `.Run("an error is returned when the third element of the map is not a slice of big.Int", func(t *testing.T) {
oldMKeys := mKeys
mKeys = []string{"fastGasWei", "linkNative", "wrappedPerformDatas", "upkeepIds"}
defer func() {
mKeys = oldMKeys
}()
upkeeps, err := encoder.DecodeReport(b)
assert.Error(t, err, "upkeep ids of incorrect type in report")
assert.Len(t, upkeeps, 0)
})`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v20/encoder_test.go: `.DecodeReport(b)`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v20/encoder_test.go: `.Run("an error is returned when the fourth element of the map is not a struct of perform data", func(t *testing.T) {
oldMKeys := mKeys
mKeys = []string{"fastGasWei", "linkNative", "upkeepIds", "upkeepIds"}
defer func() {
mKeys = oldMKeys
}()
upkeeps, err := encoder.DecodeReport(b)
assert.Error(t, err, "performs of incorrect structure in report")
assert.Len(t, upkeeps, 0)
})`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v20/encoder_test.go: `.DecodeReport(b)`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v20/encoder_test.go: `.Run("an error is returned when the upkeep ids and performDatas are of different lengths", func(t *testing.T) {
oldUnpackIntoMapFn := unpackIntoMapFn
unpackIntoMapFn = func(v map[string]interface{}, data []byte) error {
v["fastGasWei"] = 1
v["linkNative"] = 2
v["upkeepIds"] = []*big.Int{big.NewInt(123), big.NewInt(456)}
v["wrappedPerformDatas"] = []struct {
CheckBlockNumber uint32 `json:"checkBlockNumber"`
CheckBlockhash [32]byte `json:"checkBlockhash"`
PerformData []byte `json:"performData"`
}{
{
CheckBlockNumber: 1,
CheckBlockhash: [32]byte{1, 2, 3, 4, 5, 6, 7, 8, 1, 2, 3, 4, 5, 6, 7, 8, 1, 2, 3, 4, 5, 6, 7, 8, 1, 2, 3, 4, 5, 6, 7, 8},
PerformData: []byte{},
},
}
return nil
}
defer func() {
unpackIntoMapFn = oldUnpackIntoMapFn
}()
upkeeps, err := encoder.DecodeReport(b)
assert.Error(t, err, "upkeep ids and performs should have matching length")
assert.Len(t, upkeeps, 0)
})`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v20/encoder_test.go: `.NewInt(123)`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v20/encoder_test.go: `.NewInt(456)`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v20/encoder_test.go: `.DecodeReport(b)`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v20/encoder_test.go: `.Run("an error is returned when the first element of the map is not a big int", func(t *testing.T) {
oldMKeys := mKeys
mKeys = []string{"upkeepIds", "linkNative", "upkeepIds", "wrappedPerformDatas"}
defer func() {
mKeys = oldMKeys
}()
upkeeps, err := encoder.DecodeReport(b)
assert.Error(t, err, "fast gas as wrong type")
assert.Len(t, upkeeps, 0)
})`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v20/encoder_test.go: `.DecodeReport(b)`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v20/encoder_test.go: `.Run("an error is returned when the second element of the map is not a big int", func(t *testing.T) {
oldMKeys := mKeys
mKeys = []string{"fastGasWei", "upkeepIds", "upkeepIds", "wrappedPerformDatas"}
defer func() {
mKeys = oldMKeys
}()
upkeeps, err := encoder.DecodeReport(b)
assert.Error(t, err, "link native as wrong type")
assert.Len(t, upkeeps, 0)
})`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v20/encoder_test.go: `.DecodeReport(b)`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v20/encoder_test.go: `.Run("successfully encodes multiple upkeep results", func(t *testing.T) {
upkeepResult0 := EVMAutomationUpkeepResult20{
Block: 1,
ID: big.NewInt(10),
Eligible: true,
GasUsed: big.NewInt(100),
PerformData: []byte("data0"),
FastGasWei: big.NewInt(100),
LinkNative: big.NewInt(100),
CheckBlockNumber: 1,
CheckBlockHash: [32]byte{1, 2, 3, 4, 5, 6, 7, 8, 1, 2, 3, 4, 5, 6, 7, 8, 1, 2, 3, 4, 5, 6, 7, 8, 1, 2, 3, 4, 5, 6, 7, 8},
ExecuteGas: 10,
}
upkeepResult1 := EVMAutomationUpkeepResult20{
Block: 1,
ID: big.NewInt(10),
Eligible: true,
GasUsed: big.NewInt(200),
PerformData: []byte("data1"),
FastGasWei: big.NewInt(200),
LinkNative: big.NewInt(200),
CheckBlockNumber: 2,
CheckBlockHash: [32]byte{1, 2, 3, 4, 5, 6, 7, 8, 1, 2, 3, 4, 5, 6, 7, 8, 1, 2, 3, 4, 5, 6, 7, 8, 1, 2, 3, 4, 5, 6, 7, 8},
ExecuteGas: 20,
}
b, err := encoder.EncodeReport([]ocr2keepers.UpkeepResult{upkeepResult0, upkeepResult1})
assert.Nil(t, err)
assert.Len(t, b, 640)
})`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v20/encoder_test.go: `.NewInt(10)`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v20/encoder_test.go: `.NewInt(100)`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v20/encoder_test.go: `.NewInt(100)`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v20/encoder_test.go: `.NewInt(100)`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v20/encoder_test.go: `.NewInt(10)`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v20/encoder_test.go: `.NewInt(200)`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v20/encoder_test.go: `.NewInt(200)`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v20/encoder_test.go: `.NewInt(200)`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v20/encoder_test.go: `.EncodeReport([]ocr2keepers.UpkeepResult{upkeepResult0, upkeepResult1})`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v20/encoder_test.go: `.New("pack failed")`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v20/encoder_test.go: `.NewInt(10)`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v20/encoder_test.go: `.NewInt(100)`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v20/encoder_test.go: `.NewInt(100)`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v20/encoder_test.go: `.NewInt(100)`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v20/encoder_test.go: `.EncodeReport([]ocr2keepers.UpkeepResult{upkeepResult0})`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v20/registry_test.go: `t.Run(test.Name, func(t *testing.T) {
actives := make(map[string]activeUpkeep)
for _, id := range test.ActiveIDs {
idNum := big.NewInt(0)
idNum.SetString(id, 10)
actives[id] = activeUpkeep{ID: idNum}
}
mht := htmocks.NewHeadTracker[*evmtypes.Head, common.Hash](t)
rg := &EvmRegistry{
HeadProvider: HeadProvider{
ht: mht,
},
active: actives,
}
keys, err := rg.GetActiveUpkeepIDs(testutils.Context(t))
if test.ExpectedErr != nil {
assert.ErrorIs(t, err, test.ExpectedErr)
} else {
assert.Nil(t, err)
}
if len(test.ExpectedKeys) > 0 {
for _, key := range keys {
assert.Contains(t, test.ExpectedKeys, key)
}
} else {
assert.Equal(t, test.ExpectedKeys, keys)
}
})`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v20/registry_test.go: `idNum.SetString(id, 10)`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v20/registry_test.go: `actives[id] = activeUpkeep{ID: idNum}`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v20/registry_test.go: `t.Run(test.Name, func(t *testing.T) {
ctx := testutils.Context(t)
mp := new(mocks.LogPoller)
if test.LatestBlock != nil {
mp.On("LatestBlock", mock.Anything).
Return(logpoller.LogPollerBlock{BlockNumber: test.LatestBlock.OutputBlock}, test.LatestBlock.OutputErr)
}
if test.LogsWithSigs != nil {
fc := test.LogsWithSigs
mp.On("LogsWithSigs", mock.Anything, fc.InputStart, fc.InputEnd, upkeepStateEvents, test.Address).Return(fc.OutputLogs, fc.OutputErr)
}
rg := &EvmRegistry{
addr: test.Address,
lastPollBlock: test.LastPoll,
poller: mp,
chLog: make(chan logpoller.Log, 10),
}
err := rg.pollLogs(ctx)
assert.Equal(t, test.ExpectedLastPoll, rg.lastPollBlock)
if test.ExpectedErr != nil {
assert.ErrorIs(t, err, test.ExpectedErr)
} else {
assert.Nil(t, err)
}
var outputLogCount int
CheckLoop:
for {
chT := time.NewTimer(20 * time.Millisecond)
select {
case l := <-rg.chLog:
chT.Stop()
if test.LogsWithSigs == nil {
assert.FailNow(t, "logs detected but no logs were expected")
}
outputLogCount++
assert.Contains(t, test.LogsWithSigs.OutputLogs, l)
case <-chT.C:
break CheckLoop
}
}
if test.LogsWithSigs != nil {
assert.Equal(t, len(test.LogsWithSigs.OutputLogs), outputLogCount)
}
mp.AssertExpectations(t)
})`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v20/registry_test.go: `mp.On("LatestBlock", mock.Anything).
Return(logpoller.LogPollerBlock{BlockNumber: test.LatestBlock.OutputBlock}, test.LatestBlock.OutputErr)`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v20/registry_test.go: `mp.On("LogsWithSigs", mock.Anything, fc.InputStart, fc.InputEnd, upkeepStateEvents, test.Address).Return(fc.OutputLogs, fc.OutputErr)`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v20/registry_test.go: `chT.Stop()`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v20/registry_test.go: `outputLogCount++`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v20/registry_test.go: `mp.AssertExpectations(t)`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v20/registry_test.go: `.UpkeepIdentifier("8")`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v20/registry_test.go: `.UpkeepIdentifier("9")`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v20/registry_test.go: `.UpkeepIdentifier("3")`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v20/registry_test.go: `.UpkeepIdentifier("1")`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v20/registry_test.go: `.Run(test.Name, func(t *testing.T) {
actives := make(map[string]activeUpkeep)
for _, id := range test.ActiveIDs {
idNum := big.NewInt(0)
idNum.SetString(id, 10)
actives[id] = activeUpkeep{ID: idNum}
}
mht := htmocks.NewHeadTracker[*evmtypes.Head, common.Hash](t)
rg := &EvmRegistry{
HeadProvider: HeadProvider{
ht: mht,
},
active: actives,
}
keys, err := rg.GetActiveUpkeepIDs(testutils.Context(t))
if test.ExpectedErr != nil {
assert.ErrorIs(t, err, test.ExpectedErr)
} else {
assert.Nil(t, err)
}
if len(test.ExpectedKeys) > 0 {
for _, key := range keys {
assert.Contains(t, test.ExpectedKeys, key)
}
} else {
assert.Equal(t, test.ExpectedKeys, keys)
}
})`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v20/registry_test.go: `.NewInt(0)`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v20/registry_test.go: `.SetString(id, 10)`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v20/registry_test.go: `.GetActiveUpkeepIDs(testutils.Context(t))`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v20/registry_test.go: `.Context(t)`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v20/registry_test.go: `.BigToAddress(big.NewInt(1))`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v20/registry_test.go: `.NewInt(1)`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v20/registry_test.go: `.BigToAddress(big.NewInt(1))`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v20/registry_test.go: `.NewInt(1)`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v20/registry_test.go: `.New(big.NewInt(5))`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v20/registry_test.go: `.NewInt(5)`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v20/registry_test.go: `.New(big.NewInt(6))`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v20/registry_test.go: `.NewInt(6)`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v20/registry_test.go: `.Run(test.Name, func(t *testing.T) {
ctx := testutils.Context(t)
mp := new(mocks.LogPoller)
if test.LatestBlock != nil {
mp.On("LatestBlock", mock.Anything).
Return(logpoller.LogPollerBlock{BlockNumber: test.LatestBlock.OutputBlock}, test.LatestBlock.OutputErr)
}
if test.LogsWithSigs != nil {
fc := test.LogsWithSigs
mp.On("LogsWithSigs", mock.Anything, fc.InputStart, fc.InputEnd, upkeepStateEvents, test.Address).Return(fc.OutputLogs, fc.OutputErr)
}
rg := &EvmRegistry{
addr: test.Address,
lastPollBlock: test.LastPoll,
poller: mp,
chLog: make(chan logpoller.Log, 10),
}
err := rg.pollLogs(ctx)
assert.Equal(t, test.ExpectedLastPoll, rg.lastPollBlock)
if test.ExpectedErr != nil {
assert.ErrorIs(t, err, test.ExpectedErr)
} else {
assert.Nil(t, err)
}
var outputLogCount int
CheckLoop:
for {
chT := time.NewTimer(20 * time.Millisecond)
select {
case l := <-rg.chLog:
chT.Stop()
if test.LogsWithSigs == nil {
assert.FailNow(t, "logs detected but no logs were expected")
}
outputLogCount++
assert.Contains(t, test.LogsWithSigs.OutputLogs, l)
case <-chT.C:
break CheckLoop
}
}
if test.LogsWithSigs != nil {
assert.Equal(t, len(test.LogsWithSigs.OutputLogs), outputLogCount)
}
mp.AssertExpectations(t)
})`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v20/registry_test.go: `.Context(t)`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v20/registry_test.go: `.On("LatestBlock", mock.Anything)`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v20/registry_test.go: `.
Return(logpoller.LogPollerBlock{BlockNumber: test.LatestBlock.OutputBlock}, test.LatestBlock.OutputErr)`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v20/registry_test.go: `.On("LogsWithSigs", mock.Anything, fc.InputStart, fc.InputEnd, upkeepStateEvents, test.Address)`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v20/registry_test.go: `.Return(fc.OutputLogs, fc.OutputErr)`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v20/registry_test.go: `.pollLogs(ctx)`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v20/registry_test.go: `.NewTimer(20 * time.Millisecond)`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v20/registry_test.go: `.Stop()`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v20/registry_test.go: `.AssertExpectations(t)`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/active_list_test.go: `t.Run(tc.name, func(t *testing.T) {
al := NewActiveUpkeepList()
al.Reset(tc.initial...)
require.Equal(t, len(tc.initial), al.Size())
for _, id := range tc.initial {
require.True(t, al.IsActive(id))
}
al.Add(tc.add...)
for _, id := range tc.add {
require.True(t, al.IsActive(id))
}
al.Remove(tc.remove...)
for _, id := range tc.remove {
require.False(t, al.IsActive(id))
}
logIds := al.View(types.LogTrigger)
require.Equal(t, len(tc.expectedLogIds), len(logIds))
sort.Slice(logIds, func(i, j int) bool {
return logIds[i].Cmp(logIds[j]) < 0
})
for i := range logIds {
require.Equal(t, tc.expectedLogIds[i], logIds[i])
}
conditionalIds := al.View(types.ConditionTrigger)
require.Equal(t, len(tc.expectedConditionalIds), len(conditionalIds))
sort.Slice(conditionalIds, func(i, j int) bool {
return conditionalIds[i].Cmp(conditionalIds[j]) < 0
})
for i := range conditionalIds {
require.Equal(t, tc.expectedConditionalIds[i], conditionalIds[i])
}
})`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/active_list_test.go: `al.Reset(tc.initial...)`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/active_list_test.go: `al.Add(tc.add...)`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/active_list_test.go: `al.Remove(tc.remove...)`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/active_list_test.go: `sort.Slice(logIds, func(i, j int) bool {
return logIds[i].Cmp(logIds[j]) < 0
})`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/active_list_test.go: `sort.Slice(conditionalIds, func(i, j int) bool {
return conditionalIds[i].Cmp(conditionalIds[j]) < 0
})`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/active_list_test.go: `al.items = make(map[string]bool)`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/active_list_test.go: `al.items["not a number"] = true`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/active_list_test.go: `al.items["-1"] = true`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/active_list_test.go: `al.items["100"] = true`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/active_list_test.go: `.GenUpkeepID(types.LogTrigger, "0")`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/active_list_test.go: `.GenUpkeepID(types.LogTrigger, "1")`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/active_list_test.go: `.GenUpkeepID(types.LogTrigger, "2")`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/active_list_test.go: `.GenUpkeepID(types.LogTrigger, "3")`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/active_list_test.go: `.GenUpkeepID(types.LogTrigger, "4")`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/active_list_test.go: `.GenUpkeepID(types.ConditionTrigger, "0")`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/active_list_test.go: `.GenUpkeepID(types.ConditionTrigger, "1")`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/active_list_test.go: `.GenUpkeepID(types.ConditionTrigger, "2")`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/active_list_test.go: `.GenUpkeepID(types.ConditionTrigger, "3")`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/active_list_test.go: `.GenUpkeepID(types.ConditionTrigger, "4")`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/active_list_test.go: `.BigInt()`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/active_list_test.go: `.BigInt()`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/active_list_test.go: `.BigInt()`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/active_list_test.go: `.BigInt()`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/active_list_test.go: `.BigInt()`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/active_list_test.go: `.BigInt()`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/active_list_test.go: `.BigInt()`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/active_list_test.go: `.BigInt()`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/active_list_test.go: `.BigInt()`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/active_list_test.go: `.BigInt()`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/active_list_test.go: `.BigInt()`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/active_list_test.go: `.BigInt()`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/active_list_test.go: `.BigInt()`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/active_list_test.go: `.BigInt()`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/active_list_test.go: `.BigInt()`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/active_list_test.go: `.BigInt()`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/active_list_test.go: `.Run(tc.name, func(t *testing.T) {
al := NewActiveUpkeepList()
al.Reset(tc.initial...)
require.Equal(t, len(tc.initial), al.Size())
for _, id := range tc.initial {
require.True(t, al.IsActive(id))
}
al.Add(tc.add...)
for _, id := range tc.add {
require.True(t, al.IsActive(id))
}
al.Remove(tc.remove...)
for _, id := range tc.remove {
require.False(t, al.IsActive(id))
}
logIds := al.View(types.LogTrigger)
require.Equal(t, len(tc.expectedLogIds), len(logIds))
sort.Slice(logIds, func(i, j int) bool {
return logIds[i].Cmp(logIds[j]) < 0
})
for i := range logIds {
require.Equal(t, tc.expectedLogIds[i], logIds[i])
}
conditionalIds := al.View(types.ConditionTrigger)
require.Equal(t, len(tc.expectedConditionalIds), len(conditionalIds))
sort.Slice(conditionalIds, func(i, j int) bool {
return conditionalIds[i].Cmp(conditionalIds[j]) < 0
})
for i := range conditionalIds {
require.Equal(t, tc.expectedConditionalIds[i], conditionalIds[i])
}
})`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/active_list_test.go: `.Reset(tc.initial...)`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/active_list_test.go: `.Add(tc.add...)`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/active_list_test.go: `.Remove(tc.remove...)`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/active_list_test.go: `.View(types.LogTrigger)`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/active_list_test.go: `.Slice(logIds, func(i, j int) bool {
return logIds[i].Cmp(logIds[j]) < 0
})`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/active_list_test.go: `.Cmp(logIds[j])`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/active_list_test.go: `.View(types.ConditionTrigger)`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/active_list_test.go: `.Slice(conditionalIds, func(i, j int) bool {
return conditionalIds[i].Cmp(conditionalIds[j]) < 0
})`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/active_list_test.go: `.Cmp(conditionalIds[j])`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/active_list_test.go: `.View(types.ConditionTrigger)`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/autotelemetry21/custom_telemetry_test.go: `service.monitoringEndpoint.SendLog([]byte("test"))`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/autotelemetry21/custom_telemetry_test.go: `service.monitoringEndpoint.SendLog([]byte("test2"))`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/autotelemetry21/custom_telemetry_test.go: `.TestLogger(t)`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/autotelemetry21/custom_telemetry_test.go: `.NewBlockSubscriber(hb, lp, finality, lggr)`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/autotelemetry21/custom_telemetry_test.go: `.monitoringEndpoint.SendLog([]byte("test"))`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/autotelemetry21/custom_telemetry_test.go: `.monitoringEndpoint.SendLog([]byte("test2"))`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/block_subscriber_test.go: `bs.blockHistorySize = historySize`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/block_subscriber_test.go: `bs.blockSize = blockSize`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/block_subscriber_test.go: `subId, _, err = bs.Subscribe()`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/block_subscriber_test.go: `subId, _, err = bs.Subscribe()`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/block_subscriber_test.go: `bs.blockHistorySize = historySize`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/block_subscriber_test.go: `bs.blockSize = blockSize`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/block_subscriber_test.go: `subId, _, err = bs.Subscribe()`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/block_subscriber_test.go: `err = bs.Unsubscribe(1)`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/block_subscriber_test.go: `bs.blockHistorySize = historySize`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/block_subscriber_test.go: `bs.blockSize = blockSize`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/block_subscriber_test.go: `t.Run(tc.Name, func(t *testing.T) {
lp := new(mocks.LogPoller)
lp.On("LatestBlock", mock.Anything).Return(logpoller.LogPollerBlock{BlockNumber: tc.LatestBlock}, tc.LatestBlockErr)
bs := NewBlockSubscriber(hb, lp, finality, lggr)
bs.blockHistorySize = historySize
bs.blockSize = blockSize
blocks, err := bs.getBlockRange(testutils.Context(t))
if tc.LatestBlockErr != nil {
assert.Equal(t, tc.LatestBlockErr.Error(), err.Error())
} else {
assert.Equal(t, tc.ExpectedBlocks, blocks)
}
})`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/block_subscriber_test.go: `lp.On("LatestBlock", mock.Anything).Return(logpoller.LogPollerBlock{BlockNumber: tc.LatestBlock}, tc.LatestBlockErr)`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/block_subscriber_test.go: `bs.blockHistorySize = historySize`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/block_subscriber_test.go: `bs.blockSize = blockSize`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/block_subscriber_test.go: `t.Run(tc.Name, func(t *testing.T) {
lp := new(mocks.LogPoller)
lp.On("GetBlocksRange", mock.Anything, tc.Blocks).Return(tc.PollerBlocks, tc.Error)
bs := NewBlockSubscriber(hb, lp, finality, lggr)
bs.blockHistorySize = historySize
bs.blockSize = blockSize
err := bs.initializeBlocks(testutils.Context(t), tc.Blocks)
if tc.Error != nil {
assert.Equal(t, tc.Error.Error(), err.Error())
} else {
for _, b := range tc.PollerBlocks {
h, ok := bs.blocks[b.BlockNumber]
assert.True(t, ok)
assert.Equal(t, b.BlockHash.Hex(), h)
}
assert.Equal(t, tc.LastClearedBlock, bs.lastClearedBlock)
}
})`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/block_subscriber_test.go: `lp.On("GetBlocksRange", mock.Anything, tc.Blocks).Return(tc.PollerBlocks, tc.Error)`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/block_subscriber_test.go: `bs.blockHistorySize = historySize`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/block_subscriber_test.go: `bs.blockSize = blockSize`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/block_subscriber_test.go: `t.Run(tc.Name, func(t *testing.T) {
bs := NewBlockSubscriber(hb, lp, finality, lggr)
bs.blockHistorySize = historySize
bs.blockSize = blockSize
bs.blocks = tc.Blocks
history := bs.buildHistory(tc.Block)
assert.Equal(t, history, tc.ExpectedHistory)
})`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/block_subscriber_test.go: `bs.blockHistorySize = historySize`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/block_subscriber_test.go: `bs.blockSize = blockSize`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/block_subscriber_test.go: `bs.blocks = tc.Blocks`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/block_subscriber_test.go: `t.Run(tc.Name, func(t *testing.T) {
bs := NewBlockSubscriber(hb, lp, finality, lggr)
bs.blockHistorySize = historySize
bs.blockSize = blockSize
bs.blocks = tc.Blocks
bs.lastClearedBlock = tc.LastClearedBlock
bs.lastSentBlock = tc.LastSentBlock
bs.cleanup()
assert.Equal(t, tc.ExpectedLastClearedBlock, bs.lastClearedBlock)
assert.Equal(t, tc.ExpectedBlocks, bs.blocks)
})`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/block_subscriber_test.go: `bs.blockHistorySize = historySize`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/block_subscriber_test.go: `bs.blockSize = blockSize`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/block_subscriber_test.go: `bs.blocks = tc.Blocks`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/block_subscriber_test.go: `bs.lastClearedBlock = tc.LastClearedBlock`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/block_subscriber_test.go: `bs.lastSentBlock = tc.LastSentBlock`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/block_subscriber_test.go: `bs.cleanup()`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/block_subscriber_test.go: `hb.On("Subscribe", mock.Anything).Return(&evmtypes.Head{Number: 42}, func() {})`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/block_subscriber_test.go: `lp.On("LatestBlock", mock.Anything).Return(logpoller.LogPollerBlock{BlockNumber: 100}, nil)`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/block_subscriber_test.go: `lp.On("GetBlocksRange", mock.Anything, blocks).Return(pollerBlocks, nil)`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/block_subscriber_test.go: `bs.blockHistorySize = historySize`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/block_subscriber_test.go: `bs.blockSize = blockSize`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/block_subscriber_test.go: `bs.headC <- &h100`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/block_subscriber_test.go: `time.Sleep(100 * time.Millisecond)`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/block_subscriber_test.go: `bs.headC <- h101`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/block_subscriber_test.go: `time.Sleep(100 * time.Millisecond)`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/block_subscriber_test.go: `bs.headC <- new102`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/block_subscriber_test.go: `time.Sleep(100 * time.Millisecond)`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/block_subscriber_test.go: `bk1 = <-c1`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/block_subscriber_test.go: `.TestLogger(t)`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/block_subscriber_test.go: `.Subscribe()`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/block_subscriber_test.go: `.Subscribe()`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/block_subscriber_test.go: `.Subscribe()`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/block_subscriber_test.go: `.TestLogger(t)`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/block_subscriber_test.go: `.Subscribe()`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/block_subscriber_test.go: `.Subscribe()`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/block_subscriber_test.go: `.Unsubscribe(1)`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/block_subscriber_test.go: `.TestLogger(t)`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/block_subscriber_test.go: `.Unsubscribe(2)`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/block_subscriber_test.go: `.TestLogger(t)`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/block_subscriber_test.go: `.Run(tc.Name, func(t *testing.T) {
lp := new(mocks.LogPoller)
lp.On("LatestBlock", mock.Anything).Return(logpoller.LogPollerBlock{BlockNumber: tc.LatestBlock}, tc.LatestBlockErr)
bs := NewBlockSubscriber(hb, lp, finality, lggr)
bs.blockHistorySize = historySize
bs.blockSize = blockSize
blocks, err := bs.getBlockRange(testutils.Context(t))
if tc.LatestBlockErr != nil {
assert.Equal(t, tc.LatestBlockErr.Error(), err.Error())
} else {
assert.Equal(t, tc.ExpectedBlocks, blocks)
}
})`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/block_subscriber_test.go: `.On("LatestBlock", mock.Anything)`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/block_subscriber_test.go: `.Return(logpoller.LogPollerBlock{BlockNumber: tc.LatestBlock}, tc.LatestBlockErr)`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/block_subscriber_test.go: `.getBlockRange(testutils.Context(t))`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/block_subscriber_test.go: `.Context(t)`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/block_subscriber_test.go: `.TestLogger(t)`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/block_subscriber_test.go: `.HexToHash("0x5e7fadfc14e1cfa9c05a91128c16a20c6cbc3be38b4723c3d482d44bf9c0e07b")`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/block_subscriber_test.go: `.HexToHash("0xaf3f8b36a27837e9f1ea3b4da7cdbf2ce0bdf7ef4e87d23add83b19438a2fcba")`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/block_subscriber_test.go: `.HexToHash("0xa7ac5bbc905b81f3a2ad9fb8ef1fe45f4a95768df456736952e4ec6c21296abe")`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/block_subscriber_test.go: `.HexToHash("0xa7ac5bbc905b81f3a2ad9fb8ef1fe45f4a95768df456736952e4ec6c21296abe")`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/block_subscriber_test.go: `.Run(tc.Name, func(t *testing.T) {
lp := new(mocks.LogPoller)
lp.On("GetBlocksRange", mock.Anything, tc.Blocks).Return(tc.PollerBlocks, tc.Error)
bs := NewBlockSubscriber(hb, lp, finality, lggr)
bs.blockHistorySize = historySize
bs.blockSize = blockSize
err := bs.initializeBlocks(testutils.Context(t), tc.Blocks)
if tc.Error != nil {
assert.Equal(t, tc.Error.Error(), err.Error())
} else {
for _, b := range tc.PollerBlocks {
h, ok := bs.blocks[b.BlockNumber]
assert.True(t, ok)
assert.Equal(t, b.BlockHash.Hex(), h)
}
assert.Equal(t, tc.LastClearedBlock, bs.lastClearedBlock)
}
})`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/block_subscriber_test.go: `.On("GetBlocksRange", mock.Anything, tc.Blocks)`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/block_subscriber_test.go: `.Return(tc.PollerBlocks, tc.Error)`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/block_subscriber_test.go: `.initializeBlocks(testutils.Context(t), tc.Blocks)`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/block_subscriber_test.go: `.Context(t)`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/block_subscriber_test.go: `.TestLogger(t)`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/block_subscriber_test.go: `.HexToHash("0xaf3f8b36a27837e9f1ea3b4da7cdbf2ce0bdf7ef4e87d23add83b19438a2fcba")`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/block_subscriber_test.go: `.HexToHash("0xc20c7b47466c081a44a3b168994e89affe85cb894547845d938f923b67c633c0")`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/block_subscriber_test.go: `.HexToHash("0xa7ac5bbc905b81f3a2ad9fb8ef1fe45f4a95768df456736952e4ec6c21296abe")`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/block_subscriber_test.go: `.Run(tc.Name, func(t *testing.T) {
bs := NewBlockSubscriber(hb, lp, finality, lggr)
bs.blockHistorySize = historySize
bs.blockSize = blockSize
bs.blocks = tc.Blocks
history := bs.buildHistory(tc.Block)
assert.Equal(t, history, tc.ExpectedHistory)
})`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/block_subscriber_test.go: `.buildHistory(tc.Block)`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/block_subscriber_test.go: `.TestLogger(t)`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/block_subscriber_test.go: `.Run(tc.Name, func(t *testing.T) {
bs := NewBlockSubscriber(hb, lp, finality, lggr)
bs.blockHistorySize = historySize
bs.blockSize = blockSize
bs.blocks = tc.Blocks
bs.lastClearedBlock = tc.LastClearedBlock
bs.lastSentBlock = tc.LastSentBlock
bs.cleanup()
assert.Equal(t, tc.ExpectedLastClearedBlock, bs.lastClearedBlock)
assert.Equal(t, tc.ExpectedBlocks, bs.blocks)
})`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/block_subscriber_test.go: `.cleanup()`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/block_subscriber_test.go: `.TestLogger(t)`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/block_subscriber_test.go: `.On("Subscribe", mock.Anything)`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/block_subscriber_test.go: `.Return(&evmtypes.Head{Number: 42}, func() {})`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/block_subscriber_test.go: `.On("LatestBlock", mock.Anything)`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/block_subscriber_test.go: `.Return(logpoller.LogPollerBlock{BlockNumber: 100}, nil)`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/block_subscriber_test.go: `.HexToHash("0xda2f9d1359eadd7b93338703adc07d942021a78195564038321ef53f23f87333")`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/block_subscriber_test.go: `.HexToHash("0xc20c7b47466c081a44a3b168994e89affe85cb894547845d938f923b67c633c0")`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/block_subscriber_test.go: `.HexToHash("0x9bc2b51e147f9cad05f1614b7f1d8181cb24c544cbcf841f3155e54e752a3b44")`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/block_subscriber_test.go: `.HexToHash("0x5e7fadfc14e1cfa9c05a91128c16a20c6cbc3be38b4723c3d482d44bf9c0e07b")`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/block_subscriber_test.go: `.On("GetBlocksRange", mock.Anything, blocks)`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/block_subscriber_test.go: `.Return(pollerBlocks, nil)`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/block_subscriber_test.go: `.Start(testutils.Context(t))`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/block_subscriber_test.go: `.Context(t)`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/block_subscriber_test.go: `.HexToHash("0xda2f9d1359eadd7b93338703adc07d942021a78195564038321ef53f23f87333")`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/block_subscriber_test.go: `.HexToHash("0xc20c7b47466c081a44a3b168994e89affe85cb894547845d938f923b67c633c0")`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/block_subscriber_test.go: `.HexToHash("0x9bc2b51e147f9cad05f1614b7f1d8181cb24c544cbcf841f3155e54e752a3b44")`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/block_subscriber_test.go: `.HexToHash("0x5e7fadfc14e1cfa9c05a91128c16a20c6cbc3be38b4723c3d482d44bf9c0e07b")`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/block_subscriber_test.go: `.Sleep(100 * time.Millisecond)`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/block_subscriber_test.go: `.Subscribe()`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/block_subscriber_test.go: `.HexToHash("0xc20c7b47466c081a44a3b168994e89affe85cb894547845d938f923b67c633c0")`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/block_subscriber_test.go: `.Sleep(100 * time.Millisecond)`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/block_subscriber_test.go: `.Subscribe()`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/block_subscriber_test.go: `.HexToHash("0x70c03acc4ddbfb253ba41a25dc13fb21b25da8b63bcd1aa7fb55713d33a36c71")`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/block_subscriber_test.go: `.HexToHash("0x8a876b62d252e63e16cf3487db3486c0a7c0a8e06bc3792a3b116c5ca480503f")`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/block_subscriber_test.go: `.HexToHash("0x41b5842b8847dcf834e39556d2ac51cc7d960a7de9471ec504673d0038fd6c8e")`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/block_subscriber_test.go: `.HexToHash("0x9ac1ebc307554cf1bcfcc2a49462278e89d6878d613a33df38a64d0aeac971b5")`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/block_subscriber_test.go: `.Sleep(100 * time.Millisecond)`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/core/payload_test.go: `t.Run(tc.name, func(t *testing.T) {
// Convert the string to a big.Int
var id big.Int
_, success := id.SetString(tc.upkeepID, 10)
if !success {
t.Fatal("Invalid big integer value")
}
uid := &ocr2keepers.UpkeepIdentifier{}
ok := uid.FromBigInt(&id)
if !ok {
t.Fatal("Invalid upkeep identifier")
}
res := UpkeepWorkID(*uid, tc.trigger)
assert.Equal(t, tc.expected, res, "UpkeepWorkID mismatch")
})`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/core/payload_test.go: `t.Run(tc.name, func(t *testing.T) {
payload, err := NewUpkeepPayload(
tc.upkeepID,
tc.trigger,
tc.check,
)
if tc.errored {
assert.Error(t, err)
return
}
assert.NoError(t, err)
assert.Equal(t, tc.workID, payload.WorkID)
})`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/core/payload_test.go: `.HexToHash("0xabcdef")`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/core/payload_test.go: `.String()`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/core/payload_test.go: `.HexToHash("0xabcdef")`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/core/payload_test.go: `.HexToHash("0x12345")`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/core/payload_test.go: `.HexToHash("0xabcdef")`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/core/payload_test.go: `.HexToHash("0xb41258d18cd44ebf7a0d70de011f2bc4a67c9b68e8b6dada864045d8543bb020")`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/core/payload_test.go: `.HexToHash("0x44079b1b33aff337dbf17b9e12c5724ecab979c50c8201a9814a488ff3e22384")`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/core/payload_test.go: `.HexToHash("0xb41258d18cd44ebf7a0d70de011f2bc4a67c9b68e8b6dada864045d8543bb020")`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/core/payload_test.go: `.HexToHash("0xabcdef")`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/core/payload_test.go: `.Run(tc.name, func(t *testing.T) {
// Convert the string to a big.Int
var id big.Int
_, success := id.SetString(tc.upkeepID, 10)
if !success {
t.Fatal("Invalid big integer value")
}
uid := &ocr2keepers.UpkeepIdentifier{}
ok := uid.FromBigInt(&id)
if !ok {
t.Fatal("Invalid upkeep identifier")
}
res := UpkeepWorkID(*uid, tc.trigger)
assert.Equal(t, tc.expected, res, "UpkeepWorkID mismatch")
})`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/core/payload_test.go: `.SetString(tc.upkeepID, 10)`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/core/payload_test.go: `.FromBigInt(&id)`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/core/payload_test.go: `.NewInt(111)`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/core/payload_test.go: `.HexToHash("0x11111")`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/core/payload_test.go: `.NewInt(111)`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/core/payload_test.go: `.HexToHash("0x11111")`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/core/payload_test.go: `.HexToHash("0x11111")`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/core/payload_test.go: `.Run(tc.name, func(t *testing.T) {
payload, err := NewUpkeepPayload(
tc.upkeepID,
tc.trigger,
tc.check,
)
if tc.errored {
assert.Error(t, err)
return
}
assert.NoError(t, err)
assert.Equal(t, tc.workID, payload.WorkID)
})`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/core/trigger_test.go: `t.Run(tc.name, func(t *testing.T) {
var idBytes [32]byte
copy(idBytes[:], tc.id)
id := ocr2keepers.UpkeepIdentifier(idBytes)
encoded, err := PackTrigger(id.BigInt(), tc.trigger)
if tc.err != nil {
assert.EqualError(t, err, tc.err.Error())
} else {
assert.NoError(t, err)
assert.Equal(t, tc.encoded, encoded)
decoded, err := UnpackTrigger(id.BigInt(), encoded)
assert.NoError(t, err)
assert.Equal(t, tc.trigger.BlockNum, decoded.BlockNum)
}
})`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/core/trigger_test.go: `copy(idBytes[:], tc.id)`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/core/trigger_test.go: `t.Run("unpacking invalid trigger", func(t *testing.T) {
_, err := UnpackTrigger(big.NewInt(0), []byte{1, 2, 3})
assert.Error(t, err)
})`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/core/trigger_test.go: `copy(idBytes[:], uid)`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/core/trigger_test.go: `.LeftPadBytes([]byte{1}, 15)`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/core/trigger_test.go: `.HexToHash("0x01111111")`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/core/trigger_test.go: `.HexToHash("0x01111111")`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/core/trigger_test.go: `.HexToHash("0x01111abc")`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/core/trigger_test.go: `.Decode("0x0000000000000000000000000000000000000000000000000000000001111abc0000000000000000000000000000000000000000000000000000000001111111000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000001111111")`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/core/trigger_test.go: `.LeftPadBytes([]byte{0}, 15)`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/core/trigger_test.go: `.HexToHash("0x01111111")`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/core/trigger_test.go: `.Decode("0x00000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000001111111")`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/core/trigger_test.go: `.LeftPadBytes([]byte{8}, 15)`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/core/trigger_test.go: `.HexToHash("0x01111111")`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/core/trigger_test.go: `.Run(tc.name, func(t *testing.T) {
var idBytes [32]byte
copy(idBytes[:], tc.id)
id := ocr2keepers.UpkeepIdentifier(idBytes)
encoded, err := PackTrigger(id.BigInt(), tc.trigger)
if tc.err != nil {
assert.EqualError(t, err, tc.err.Error())
} else {
assert.NoError(t, err)
assert.Equal(t, tc.encoded, encoded)
decoded, err := UnpackTrigger(id.BigInt(), encoded)
assert.NoError(t, err)
assert.Equal(t, tc.trigger.BlockNum, decoded.BlockNum)
}
})`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/core/trigger_test.go: `.UpkeepIdentifier(idBytes)`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/core/trigger_test.go: `.BigInt()`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/core/trigger_test.go: `.BigInt()`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/core/trigger_test.go: `.Run("unpacking invalid trigger", func(t *testing.T) {
_, err := UnpackTrigger(big.NewInt(0), []byte{1, 2, 3})
assert.Error(t, err)
})`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/core/trigger_test.go: `.NewInt(0)`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/core/trigger_test.go: `.LeftPadBytes([]byte{8}, 15)`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/core/trigger_test.go: `.UpkeepIdentifier(idBytes)`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/core/trigger_test.go: `.Decode("0x00000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000001111111")`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/core/trigger_test.go: `.BigInt()`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/core/type_test.go: `t.Run(tc.name, func(t *testing.T) {
uid := ocr2keepers.UpkeepIdentifier{}
copy(uid[:], tc.upkeepID)
assert.Equal(t, tc.upkeepType, GetUpkeepType(uid))
})`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/core/type_test.go: `copy(uid[:], tc.upkeepID)`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/core/type_test.go: `.NewInt(0)`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/core/type_test.go: `.Bytes()`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/core/type_test.go: `.BigInt()`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/core/type_test.go: `.Bytes()`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/core/type_test.go: `.BigInt()`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/core/type_test.go: `.Bytes()`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/core/type_test.go: `.NewInt(0)`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/core/type_test.go: `.SetString("32329108151019397958065800113404894502874153543356521479058624064899121404671", 10)`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/core/type_test.go: `.Bytes()`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/core/type_test.go: `.Run(tc.name, func(t *testing.T) {
uid := ocr2keepers.UpkeepIdentifier{}
copy(uid[:], tc.upkeepID)
assert.Equal(t, tc.upkeepType, GetUpkeepType(uid))
})`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/core/utils_test.go: `client.On("CallContext", mock.Anything, mock.Anything, "eth_getTransactionReceipt", tt.txHash).
Return(tt.ethCallError).Run(func(args mock.Arguments) {
receipt := tt.receipt
if receipt != nil {
res := args.Get(1).(*types.Receipt)
res.Status = receipt.Status
res.TxHash = receipt.TxHash
res.BlockNumber = receipt.BlockNumber
res.BlockHash = receipt.BlockHash
}
})`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/core/utils_test.go: `res.Status = receipt.Status`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/core/utils_test.go: `res.TxHash = receipt.TxHash`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/core/utils_test.go: `res.BlockNumber = receipt.BlockNumber`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/core/utils_test.go: `res.BlockHash = receipt.BlockHash`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/core/utils_test.go: `.HexToHash("0xc48fbf05edaf18f6aaa7de24de28528546b874bb03728d624ca407b8fed582a3")`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/core/utils_test.go: `.NewInt(2000)`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/core/utils_test.go: `.HexToHash("0xc48fbf05edaf18f6aaa7de24de28528546b874bb03728d624ca407b8fed582a3")`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/core/utils_test.go: `.HexToHash("0xc48fbf05edaf18f6aaa7de24de28528546b874bb03728d624ca407b8fed582a3")`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/core/utils_test.go: `.On("CallContext", mock.Anything, mock.Anything, "eth_getTransactionReceipt", tt.txHash)`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/core/utils_test.go: `.
Return(tt.ethCallError)`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/core/utils_test.go: `.Run(func(args mock.Arguments) {
receipt := tt.receipt
if receipt != nil {
res := args.Get(1).(*types.Receipt)
res.Status = receipt.Status
res.TxHash = receipt.TxHash
res.BlockNumber = receipt.BlockNumber
res.BlockHash = receipt.BlockHash
}
})`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/core/utils_test.go: `.Get(1)`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/core/utils_test.go: `.Context(t)`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/encoding/encoder_test.go: `t.Run(tc.name, func(t *testing.T) {
b, err := encoder.Encode(tc.results...)
if tc.expectedErr != nil {
assert.Equal(t, tc.expectedErr, err)
return
}
assert.Nil(t, err)
assert.Len(t, b, tc.reportSize)
results, err := encoder.Extract(b)
assert.Nil(t, err)
assert.Len(t, results, len(tc.results))
for i, r := range results {
assert.Equal(t, r.UpkeepID, tc.results[i].UpkeepID)
assert.Equal(t, r.WorkID, tc.results[i].WorkID)
assert.Equal(t, r.Trigger, tc.results[i].Trigger)
}
})`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/encoding/encoder_test.go: `.GenUpkeepID(types.LogTrigger, "123")`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/encoding/encoder_test.go: `.GenUpkeepID(types.LogTrigger, "10")`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/encoding/encoder_test.go: `.GenUpkeepID(types.ConditionTrigger, "20")`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/encoding/encoder_test.go: `.GenUpkeepID(types.ConditionTrigger, "30")`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/encoding/encoder_test.go: `.GenUpkeepID(types.ConditionTrigger, "30")`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/encoding/encoder_test.go: `.GenUpkeepID(types.ConditionTrigger, "20")`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/encoding/encoder_test.go: `.GenUpkeepID(types.LogTrigger, "10")`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/encoding/encoder_test.go: `.Run(tc.name, func(t *testing.T) {
b, err := encoder.Encode(tc.results...)
if tc.expectedErr != nil {
assert.Equal(t, tc.expectedErr, err)
return
}
assert.Nil(t, err)
assert.Len(t, b, tc.reportSize)
results, err := encoder.Extract(b)
assert.Nil(t, err)
assert.Len(t, results, len(tc.results))
for i, r := range results {
assert.Equal(t, r.UpkeepID, tc.results[i].UpkeepID)
assert.Equal(t, r.WorkID, tc.results[i].WorkID)
assert.Equal(t, r.Trigger, tc.results[i].Trigger)
}
})`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/encoding/encoder_test.go: `.Encode(tc.results...)`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/encoding/encoder_test.go: `.Extract(b)`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/encoding/encoder_test.go: `.GenUpkeepID(types.LogTrigger, "10")`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/encoding/encoder_test.go: `.GenUpkeepID(types.ConditionTrigger, "20")`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/encoding/encoder_test.go: `.Encode(results...)`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/encoding/encoder_test.go: `.Equal(encoded, expectedEncodedReport)`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/encoding/packer_test.go: `t.Run(tc.name, func(t *testing.T) {
packer := NewAbiPacker()
bytes, err := packer.PackReport(tc.report)
if tc.expectsErr {
assert.Error(t, err)
assert.Equal(t, tc.wantErr.Error(), err.Error())
} else {
assert.NoError(t, err)
assert.Equal(t, tc.wantBytes, len(bytes))
}
})`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/encoding/packer_test.go: `upkeepId.FromBigInt(uid)`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/encoding/packer_test.go: `t.Run(test.Name, func(t *testing.T) {
packer := NewAbiPacker()
rs, err := packer.UnpackCheckResult(test.Payload, test.RawData)
if test.ExpectedError != nil {
assert.Equal(t, test.ExpectedError.Error(), err.Error())
} else {
assert.Nil(t, err)
}
assert.Equal(t, test.ExpectedResult.UpkeepID, rs.UpkeepID)
assert.Equal(t, test.ExpectedResult.Eligible, rs.Eligible)
assert.Equal(t, test.ExpectedResult.Trigger, rs.Trigger)
assert.Equal(t, test.ExpectedResult.WorkID, rs.WorkID)
assert.Equal(t, test.ExpectedResult.IneligibilityReason, rs.IneligibilityReason)
assert.Equal(t, test.ExpectedResult.PipelineExecutionState, rs.PipelineExecutionState)
})`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/encoding/packer_test.go: `t.Run(test.Name, func(t *testing.T) {
packer := NewAbiPacker()
state, rs, err := packer.UnpackPerformResult(test.RawData)
assert.Nil(t, err)
assert.True(t, rs)
assert.Equal(t, test.State, state)
})`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/encoding/packer_test.go: `t.Run(tc.name, func(t *testing.T) {
packer := NewAbiPacker()
res, err := packer.UnpackLogTriggerConfig(tc.raw)
if tc.errored {
assert.Error(t, err)
} else {
assert.NoError(t, err)
assert.Equal(t, tc.res, res)
}
})`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/encoding/packer_test.go: `.NewInt(0)`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/encoding/packer_test.go: `.NewInt(0)`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/encoding/packer_test.go: `.NewInt(3)`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/encoding/packer_test.go: `.NewInt(4)`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/encoding/packer_test.go: `.NewInt(1)`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/encoding/packer_test.go: `.NewInt(2)`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/encoding/packer_test.go: `.NewInt(4)`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/encoding/packer_test.go: `.NewInt(1)`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/encoding/packer_test.go: `.NewInt(2)`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/encoding/packer_test.go: `.NewInt(3)`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/encoding/packer_test.go: `.NewInt(1)`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/encoding/packer_test.go: `.NewInt(2)`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/encoding/packer_test.go: `.NewInt(3)`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/encoding/packer_test.go: `.NewInt(4)`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/encoding/packer_test.go: `.NewInt(1)`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/encoding/packer_test.go: `.NewInt(2)`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/encoding/packer_test.go: `.NewInt(3)`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/encoding/packer_test.go: `.NewInt(4)`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/encoding/packer_test.go: `.Run(tc.name, func(t *testing.T) {
packer := NewAbiPacker()
bytes, err := packer.PackReport(tc.report)
if tc.expectsErr {
assert.Error(t, err)
assert.Equal(t, tc.wantErr.Error(), err.Error())
} else {
assert.NoError(t, err)
assert.Equal(t, tc.wantBytes, len(bytes))
}
})`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/encoding/packer_test.go: `.PackReport(tc.report)`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/encoding/packer_test.go: `.SetString("1843548457736589226156809205796175506139185429616502850435279853710366065936", 10)`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/encoding/packer_test.go: `.FromBigInt(uid)`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/encoding/packer_test.go: `.NewUpkeepPayload(uid, ocr2keepers.NewTrigger(19447615, common.HexToHash("0x0")), []byte{})`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/encoding/packer_test.go: `.NewTrigger(19447615, common.HexToHash("0x0"))`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/encoding/packer_test.go: `.HexToHash("0x0")`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/encoding/packer_test.go: `.NewUpkeepPayload(uid, ocr2keepers.NewTrigger(19448272, common.HexToHash("0x0")), []byte{})`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/encoding/packer_test.go: `.NewTrigger(19448272, common.HexToHash("0x0"))`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/encoding/packer_test.go: `.HexToHash("0x0")`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/encoding/packer_test.go: `.NewLogTrigger(ocr2keepers.BlockNumber(19447615), [32]byte{}, nil)`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/encoding/packer_test.go: `.BlockNumber(19447615)`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/encoding/packer_test.go: `.NewInt(1000000000)`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/encoding/packer_test.go: `.NewInt(3532383906411401)`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/encoding/packer_test.go: `.NewLogTrigger(ocr2keepers.BlockNumber(19448272), [32]byte{}, nil)`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/encoding/packer_test.go: `.BlockNumber(19448272)`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/encoding/packer_test.go: `.NewInt(1000000000)`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/encoding/packer_test.go: `.NewInt(3532383906411401)`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/encoding/packer_test.go: `.Run(test.Name, func(t *testing.T) {
packer := NewAbiPacker()
rs, err := packer.UnpackCheckResult(test.Payload, test.RawData)
if test.ExpectedError != nil {
assert.Equal(t, test.ExpectedError.Error(), err.Error())
} else {
assert.Nil(t, err)
}
assert.Equal(t, test.ExpectedResult.UpkeepID, rs.UpkeepID)
assert.Equal(t, test.ExpectedResult.Eligible, rs.Eligible)
assert.Equal(t, test.ExpectedResult.Trigger, rs.Trigger)
assert.Equal(t, test.ExpectedResult.WorkID, rs.WorkID)
assert.Equal(t, test.ExpectedResult.IneligibilityReason, rs.IneligibilityReason)
assert.Equal(t, test.ExpectedResult.PipelineExecutionState, rs.PipelineExecutionState)
})`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/encoding/packer_test.go: `.UnpackCheckResult(test.Payload, test.RawData)`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/encoding/packer_test.go: `.Run(test.Name, func(t *testing.T) {
packer := NewAbiPacker()
state, rs, err := packer.UnpackPerformResult(test.RawData)
assert.Nil(t, err)
assert.True(t, rs)
assert.Equal(t, test.State, state)
})`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/encoding/packer_test.go: `.UnpackPerformResult(test.RawData)`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/encoding/packer_test.go: `.Decode("0x0000000000000000000000007456fadf415b7c34b1182bd20b0537977e945e3e00000000000000000000000000000000000000000000000000000000000000003d53a39550e04688065827f3bb86584cb007ab9ebca7ebd528e7301c9c31eb5d000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000")`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/encoding/packer_test.go: `.HexToAddress("0x7456FadF415b7c34B1182Bd20B0537977e945e3E")`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/encoding/packer_test.go: `.Decode("0x000000000000000000000000b1182bd20b0537977e945e3e00000000000000000000000000000000000000000000000000000000000000003d53a39550e04688065827f3bb86584cb007ab9ebca7ebd528e7301c9c31eb5d000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000")`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/encoding/packer_test.go: `.Run(tc.name, func(t *testing.T) {
packer := NewAbiPacker()
res, err := packer.UnpackLogTriggerConfig(tc.raw)
if tc.errored {
assert.Error(t, err)
} else {
assert.NoError(t, err)
assert.Equal(t, tc.res, res)
}
})`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/encoding/packer_test.go: `.UnpackLogTriggerConfig(tc.raw)`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/encoding/packer_test.go: `.NewInt(1)`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/encoding/packer_test.go: `.NewInt(1)`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/encoding/packer_test.go: `.NewInt(1)`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/encoding/packer_test.go: `.NewInt(2)`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/encoding/packer_test.go: `.NewInt(100)`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/encoding/packer_test.go: `.NewInt(200)`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/encoding/packer_test.go: `.PackReport(report)`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/encoding/packer_test.go: `.UnpackReport(res)`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/encoding/packer_test.go: `.Encode(res)`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/gasprice/gasprice_test.go: `t.Run(test.Name, func(t *testing.T) {
ctx := testutils.Context(t)
ge := gasMocks.NewEvmFeeEstimator(t)
if test.FailedToGetFee {
ge.On("GetFee", mock.Anything, mock.Anything, mock.Anything, mock.Anything).Return(
gas.EvmFee{},
feeLimit,
errors.New("failed to retrieve gas price"),
)
} else if test.CurrentLegacyGasPrice != nil {
ge.On("GetFee", mock.Anything, mock.Anything, mock.Anything, mock.Anything).Return(
gas.EvmFee{
Legacy: assets.NewWei(test.CurrentLegacyGasPrice),
},
feeLimit,
nil,
)
} else if test.CurrentDynamicGasPrice != nil {
ge.On("GetFee", mock.Anything, mock.Anything, mock.Anything, mock.Anything).Return(
gas.EvmFee{
DynamicFeeCap: assets.NewWei(test.CurrentDynamicGasPrice),
DynamicTipCap: assets.NewWei(big.NewInt(1_000_000_000)),
},
feeLimit,
nil,
)
}
var oc []byte
if test.ParsingFailed {
oc, _ = cbor.Marshal(WrongOffchainConfig{MaxGasPrice1: []int{1, 2, 3}})
if len(oc) > 0 {
oc[len(oc)-1] = 0x99
}
} else if test.NotConfigured {
oc = []byte{1, 2, 3, 4} // parsing this will set maxGasPrice field to nil
} else if test.MaxGasPrice != nil {
oc, _ = cbor.Marshal(UpkeepOffchainConfig{MaxGasPrice: test.MaxGasPrice})
}
fr := CheckGasPrice(ctx, uid, oc, ge, lggr)
assert.Equal(t, test.ExpectedResult, fr)
})`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/gasprice/gasprice_test.go: `ge.On("GetFee", mock.Anything, mock.Anything, mock.Anything, mock.Anything).Return(
gas.EvmFee{},
feeLimit,
errors.New("failed to retrieve gas price"),
)`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/gasprice/gasprice_test.go: `ge.On("GetFee", mock.Anything, mock.Anything, mock.Anything, mock.Anything).Return(
gas.EvmFee{
Legacy: assets.NewWei(test.CurrentLegacyGasPrice),
},
feeLimit,
nil,
)`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/gasprice/gasprice_test.go: `ge.On("GetFee", mock.Anything, mock.Anything, mock.Anything, mock.Anything).Return(
gas.EvmFee{
DynamicFeeCap: assets.NewWei(test.CurrentDynamicGasPrice),
DynamicTipCap: assets.NewWei(big.NewInt(1_000_000_000)),
},
feeLimit,
nil,
)`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/gasprice/gasprice_test.go: `oc, _ = cbor.Marshal(WrongOffchainConfig{MaxGasPrice1: []int{1, 2, 3}})`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/gasprice/gasprice_test.go: `oc[len(oc)-1] = 0x99`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/gasprice/gasprice_test.go: `oc = []byte{1, 2, 3, 4}`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/gasprice/gasprice_test.go: `oc, _ = cbor.Marshal(UpkeepOffchainConfig{MaxGasPrice: test.MaxGasPrice})`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/gasprice/gasprice_test.go: `.TestLogger(t)`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/gasprice/gasprice_test.go: `.SetString("1843548457736589226156809205796175506139185429616502850435279853710366065936", 10)`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/gasprice/gasprice_test.go: `.NewInt(10_000_000_000)`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/gasprice/gasprice_test.go: `.NewInt(8_000_000_000)`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/gasprice/gasprice_test.go: `.NewInt(10_000_000_000)`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/gasprice/gasprice_test.go: `.NewInt(18_000_000_000)`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/gasprice/gasprice_test.go: `.NewInt(10_000_000_000)`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/gasprice/gasprice_test.go: `.NewInt(15_000_000_000)`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/gasprice/gasprice_test.go: `.NewInt(8_000_000_000)`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/gasprice/gasprice_test.go: `.NewInt(5_000_000_000)`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/gasprice/gasprice_test.go: `.NewInt(10_000_000_000)`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/gasprice/gasprice_test.go: `.NewInt(8_000_000_000)`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/gasprice/gasprice_test.go: `.Run(test.Name, func(t *testing.T) {
ctx := testutils.Context(t)
ge := gasMocks.NewEvmFeeEstimator(t)
if test.FailedToGetFee {
ge.On("GetFee", mock.Anything, mock.Anything, mock.Anything, mock.Anything).Return(
gas.EvmFee{},
feeLimit,
errors.New("failed to retrieve gas price"),
)
} else if test.CurrentLegacyGasPrice != nil {
ge.On("GetFee", mock.Anything, mock.Anything, mock.Anything, mock.Anything).Return(
gas.EvmFee{
Legacy: assets.NewWei(test.CurrentLegacyGasPrice),
},
feeLimit,
nil,
)
} else if test.CurrentDynamicGasPrice != nil {
ge.On("GetFee", mock.Anything, mock.Anything, mock.Anything, mock.Anything).Return(
gas.EvmFee{
DynamicFeeCap: assets.NewWei(test.CurrentDynamicGasPrice),
DynamicTipCap: assets.NewWei(big.NewInt(1_000_000_000)),
},
feeLimit,
nil,
)
}
var oc []byte
if test.ParsingFailed {
oc, _ = cbor.Marshal(WrongOffchainConfig{MaxGasPrice1: []int{1, 2, 3}})
if len(oc) > 0 {
oc[len(oc)-1] = 0x99
}
} else if test.NotConfigured {
oc = []byte{1, 2, 3, 4} // parsing this will set maxGasPrice field to nil
} else if test.MaxGasPrice != nil {
oc, _ = cbor.Marshal(UpkeepOffchainConfig{MaxGasPrice: test.MaxGasPrice})
}
fr := CheckGasPrice(ctx, uid, oc, ge, lggr)
assert.Equal(t, test.ExpectedResult, fr)
})`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/gasprice/gasprice_test.go: `.Context(t)`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/gasprice/gasprice_test.go: `.NewEvmFeeEstimator(t)`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/gasprice/gasprice_test.go: `.On("GetFee", mock.Anything, mock.Anything, mock.Anything, mock.Anything)`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/gasprice/gasprice_test.go: `.Return(
gas.EvmFee{},
feeLimit,
errors.New("failed to retrieve gas price"),
)`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/gasprice/gasprice_test.go: `.New("failed to retrieve gas price")`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/gasprice/gasprice_test.go: `.On("GetFee", mock.Anything, mock.Anything, mock.Anything, mock.Anything)`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/gasprice/gasprice_test.go: `.Return(
gas.EvmFee{
Legacy: assets.NewWei(test.CurrentLegacyGasPrice),
},
feeLimit,
nil,
)`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/gasprice/gasprice_test.go: `.NewWei(test.CurrentLegacyGasPrice)`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/gasprice/gasprice_test.go: `.On("GetFee", mock.Anything, mock.Anything, mock.Anything, mock.Anything)`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/gasprice/gasprice_test.go: `.Return(
gas.EvmFee{
DynamicFeeCap: assets.NewWei(test.CurrentDynamicGasPrice),
DynamicTipCap: assets.NewWei(big.NewInt(1_000_000_000)),
},
feeLimit,
nil,
)`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/gasprice/gasprice_test.go: `.NewWei(test.CurrentDynamicGasPrice)`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/gasprice/gasprice_test.go: `.NewWei(big.NewInt(1_000_000_000))`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/gasprice/gasprice_test.go: `.NewInt(1_000_000_000)`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/gasprice/gasprice_test.go: `.Marshal(WrongOffchainConfig{MaxGasPrice1: []int{1, 2, 3}})`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/gasprice/gasprice_test.go: `.Marshal(UpkeepOffchainConfig{MaxGasPrice: test.MaxGasPrice})`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/keyring_test.go: `t.Run("the on chain keyring wrapper gets the public key and max signature length from the wrapped keyring", func(t *testing.T) {
onchainKeyring := &mockOnchainKeyring{
MaxSignatureLengthFn: func() int {
return 123
},
PublicKeyFn: func() types.OnchainPublicKey {
return types.OnchainPublicKey([]byte("abcdef"))
},
}
keyring := NewOnchainKeyringV3Wrapper(onchainKeyring)
assert.Equal(t, 123, keyring.MaxSignatureLength())
assert.Equal(t, types.OnchainPublicKey([]byte("abcdef")), keyring.PublicKey())
})`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/keyring_test.go: `t.Run("a report context is created and the wrapped keyring signs the report", func(t *testing.T) {
onchainKeyring := &mockOnchainKeyring{
SignFn: func(context types.ReportContext, report types.Report) (signature []byte, err error) {
assert.Equal(t, types.ReportContext{
ReportTimestamp: types.ReportTimestamp{
ConfigDigest: types.ConfigDigest([32]byte{1, 2, 3, 4, 1, 2, 3, 4, 1, 2, 3, 4, 1, 2, 3, 4, 1, 2, 3, 4, 1, 2, 3, 4, 1, 2, 3, 4, 1, 2, 3, 4}),
Epoch: 101,
Round: 0,
},
ExtraHash: [32]byte{0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},
}, context)
assert.Equal(t, types.Report([]byte("a report to sign")), report)
return []byte("signature"), err
},
}
keyring := NewOnchainKeyringV3Wrapper(onchainKeyring)
signed, err := keyring.Sign(
types.ConfigDigest([32]byte{1, 2, 3, 4, 1, 2, 3, 4, 1, 2, 3, 4, 1, 2, 3, 4, 1, 2, 3, 4, 1, 2, 3, 4, 1, 2, 3, 4, 1, 2, 3, 4}),
101,
ocr3types.ReportWithInfo[plugin.AutomationReportInfo]{
Report: []byte("a report to sign"),
Info: plugin.AutomationReportInfo{},
},
)
assert.NoError(t, err)
assert.Equal(t, []byte("signature"), signed)
})`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/keyring_test.go: `.Run("the on chain keyring wrapper gets the public key and max signature length from the wrapped keyring", func(t *testing.T) {
onchainKeyring := &mockOnchainKeyring{
MaxSignatureLengthFn: func() int {
return 123
},
PublicKeyFn: func() types.OnchainPublicKey {
return types.OnchainPublicKey([]byte("abcdef"))
},
}
keyring := NewOnchainKeyringV3Wrapper(onchainKeyring)
assert.Equal(t, 123, keyring.MaxSignatureLength())
assert.Equal(t, types.OnchainPublicKey([]byte("abcdef")), keyring.PublicKey())
})`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/keyring_test.go: `.OnchainPublicKey([]byte("abcdef"))`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/keyring_test.go: `.Run("a report context is created and the wrapped keyring signs the report", func(t *testing.T) {
onchainKeyring := &mockOnchainKeyring{
SignFn: func(context types.ReportContext, report types.Report) (signature []byte, err error) {
assert.Equal(t, types.ReportContext{
ReportTimestamp: types.ReportTimestamp{
ConfigDigest: types.ConfigDigest([32]byte{1, 2, 3, 4, 1, 2, 3, 4, 1, 2, 3, 4, 1, 2, 3, 4, 1, 2, 3, 4, 1, 2, 3, 4, 1, 2, 3, 4, 1, 2, 3, 4}),
Epoch: 101,
Round: 0,
},
ExtraHash: [32]byte{0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},
}, context)
assert.Equal(t, types.Report([]byte("a report to sign")), report)
return []byte("signature"), err
},
}
keyring := NewOnchainKeyringV3Wrapper(onchainKeyring)
signed, err := keyring.Sign(
types.ConfigDigest([32]byte{1, 2, 3, 4, 1, 2, 3, 4, 1, 2, 3, 4, 1, 2, 3, 4, 1, 2, 3, 4, 1, 2, 3, 4, 1, 2, 3, 4, 1, 2, 3, 4}),
101,
ocr3types.ReportWithInfo[plugin.AutomationReportInfo]{
Report: []byte("a report to sign"),
Info: plugin.AutomationReportInfo{},
},
)
assert.NoError(t, err)
assert.Equal(t, []byte("signature"), signed)
})`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/keyring_test.go: `.Sign(
types.ConfigDigest([32]byte{1, 2, 3, 4, 1, 2, 3, 4, 1, 2, 3, 4, 1, 2, 3, 4, 1, 2, 3, 4, 1, 2, 3, 4, 1, 2, 3, 4, 1, 2, 3, 4}),
101,
ocr3types.ReportWithInfo[plugin.AutomationReportInfo]{
Report: []byte("a report to sign"),
Info: plugin.AutomationReportInfo{},
},
)`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/keyring_test.go: `.ConfigDigest([32]byte{1, 2, 3, 4, 1, 2, 3, 4, 1, 2, 3, 4, 1, 2, 3, 4, 1, 2, 3, 4, 1, 2, 3, 4, 1, 2, 3, 4, 1, 2, 3, 4})`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/keyring_test.go: `.Verify(
types.OnchainPublicKey([]byte("key")),
types.ConfigDigest([32]byte{1, 2, 3, 4, 1, 2, 3, 4, 1, 2, 3, 4, 1, 2, 3, 4, 1, 2, 3, 4, 1, 2, 3, 4, 1, 2, 3, 4, 1, 2, 3, 4}),
999,
ocr3types.ReportWithInfo[plugin.AutomationReportInfo]{
Report: []byte("a report to sign"),
Info: plugin.AutomationReportInfo{},
},
[]byte("signature"),
)`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/keyring_test.go: `.OnchainPublicKey([]byte("key"))`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/keyring_test.go: `.ConfigDigest([32]byte{1, 2, 3, 4, 1, 2, 3, 4, 1, 2, 3, 4, 1, 2, 3, 4, 1, 2, 3, 4, 1, 2, 3, 4, 1, 2, 3, 4, 1, 2, 3, 4})`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/logprovider/block_time_test.go: `t.Run(tc.name, func(t *testing.T) {
ctx := testutils.Context(t)
lp := new(lpmocks.LogPoller)
resolver := newBlockTimeResolver(lp)
lp.On("LatestBlock", mock.Anything).Return(logpoller.LogPollerBlock{BlockNumber: tc.latestBlock}, tc.latestBlockErr)
lp.On("GetBlocksRange", mock.Anything, mock.Anything).Return(tc.blocksRange, tc.blocksRangeErr)
blockTime, err := resolver.BlockTime(ctx, tc.blockSampleSize)
if tc.blockTimeErr != nil {
require.Error(t, err)
return
}
require.Equal(t, tc.blockTime, blockTime)
})`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/logprovider/block_time_test.go: `lp.On("LatestBlock", mock.Anything).Return(logpoller.LogPollerBlock{BlockNumber: tc.latestBlock}, tc.latestBlockErr)`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/logprovider/block_time_test.go: `lp.On("GetBlocksRange", mock.Anything, mock.Anything).Return(tc.blocksRange, tc.blocksRangeErr)`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/logprovider/block_time_test.go: `.Now()`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/logprovider/block_time_test.go: `.Add(-time.Second * (2 * 4))`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/logprovider/block_time_test.go: `.Run(tc.name, func(t *testing.T) {
ctx := testutils.Context(t)
lp := new(lpmocks.LogPoller)
resolver := newBlockTimeResolver(lp)
lp.On("LatestBlock", mock.Anything).Return(logpoller.LogPollerBlock{BlockNumber: tc.latestBlock}, tc.latestBlockErr)
lp.On("GetBlocksRange", mock.Anything, mock.Anything).Return(tc.blocksRange, tc.blocksRangeErr)
blockTime, err := resolver.BlockTime(ctx, tc.blockSampleSize)
if tc.blockTimeErr != nil {
require.Error(t, err)
return
}
require.Equal(t, tc.blockTime, blockTime)
})`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/logprovider/block_time_test.go: `.Context(t)`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/logprovider/block_time_test.go: `.On("LatestBlock", mock.Anything)`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/logprovider/block_time_test.go: `.Return(logpoller.LogPollerBlock{BlockNumber: tc.latestBlock}, tc.latestBlockErr)`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/logprovider/block_time_test.go: `.On("GetBlocksRange", mock.Anything, mock.Anything)`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/logprovider/block_time_test.go: `.Return(tc.blocksRange, tc.blocksRangeErr)`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/logprovider/block_time_test.go: `.BlockTime(ctx, tc.blockSampleSize)`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/logprovider/buffer_test.go: `buf.enqueue(big.NewInt(1),
logpoller.Log{BlockNumber: 2, TxHash: common.HexToHash("0x2"), LogIndex: 0},
logpoller.Log{BlockNumber: 3, TxHash: common.HexToHash("0x3"), LogIndex: 0},
)`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/logprovider/buffer_test.go: `buf.enqueue(big.NewInt(2),
logpoller.Log{BlockNumber: 2, TxHash: common.HexToHash("0x2"), LogIndex: 2},
logpoller.Log{BlockNumber: 3, TxHash: common.HexToHash("0x3"), LogIndex: 2},
logpoller.Log{BlockNumber: 4, TxHash: common.HexToHash("0x1"), LogIndex: 0},
logpoller.Log{BlockNumber: 4, TxHash: common.HexToHash("0x1"), LogIndex: 1},
)`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/logprovider/buffer_test.go: `t.Run(tc.name, func(t *testing.T) {
blocks := buf.getBlocksInRange(int(tc.from), int(tc.to))
require.Equal(t, tc.want, len(blocks))
if tc.want > 0 {
from := tc.from
require.Equal(t, from, blocks[0].blockNumber)
to := tc.to
if to >= maxSeenBlock {
to = maxSeenBlock
}
require.Equal(t, to, blocks[len(blocks)-1].blockNumber)
}
})`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/logprovider/buffer_test.go: `to = maxSeenBlock`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/logprovider/buffer_test.go: `t.Run(tc.name, func(t *testing.T) {
blocks := buf.getBlocksInRange(int(tc.from), int(tc.to))
require.Equal(t, len(tc.expectedBlocks), len(blocks))
expectedBlockNumbers := map[int64]bool{}
for _, b := range tc.expectedBlocks {
expectedBlockNumbers[b] = false
}
for _, b := range blocks {
expectedBlockNumbers[b.blockNumber] = true
}
for k, v := range expectedBlockNumbers {
require.True(t, v, "missing block %d", k)
}
})`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/logprovider/buffer_test.go: `expectedBlockNumbers[b] = false`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/logprovider/buffer_test.go: `expectedBlockNumbers[b.blockNumber] = true`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/logprovider/buffer_test.go: `t.Run("dequeue empty", func(t *testing.T) {
buf := newLogEventBuffer(logger.TestLogger(t), 3, 10, 10)
results := buf.peekRange(int64(1), int64(2))
require.Equal(t, 0, len(results))
results = buf.peek(2)
require.Equal(t, 0, len(results))
})`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/logprovider/buffer_test.go: `results = buf.peek(2)`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/logprovider/buffer_test.go: `t.Run("enqueue", func(t *testing.T) {
buf := newLogEventBuffer(logger.TestLogger(t), 3, 10, 10)
buf.enqueue(big.NewInt(1),
logpoller.Log{BlockNumber: 1, TxHash: common.HexToHash("0x1"), LogIndex: 0},
logpoller.Log{BlockNumber: 1, TxHash: common.HexToHash("0x1"), LogIndex: 1},
)
buf.lock.Lock()
require.Equal(t, 2, len(buf.blocks[0].logs))
buf.lock.Unlock()
})`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/logprovider/buffer_test.go: `buf.enqueue(big.NewInt(1),
logpoller.Log{BlockNumber: 1, TxHash: common.HexToHash("0x1"), LogIndex: 0},
logpoller.Log{BlockNumber: 1, TxHash: common.HexToHash("0x1"), LogIndex: 1},
)`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/logprovider/buffer_test.go: `buf.lock.Lock()`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/logprovider/buffer_test.go: `buf.lock.Unlock()`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/logprovider/buffer_test.go: `t.Run("enqueue logs overflow", func(t *testing.T) {
buf := newLogEventBuffer(logger.TestLogger(t), 2, 2, 2)
require.Equal(t, 2, buf.enqueue(big.NewInt(1),
logpoller.Log{BlockNumber: 1, TxHash: common.HexToHash("0x1"), LogIndex: 0},
logpoller.Log{BlockNumber: 1, TxHash: common.HexToHash("0x1"), LogIndex: 1},
logpoller.Log{BlockNumber: 1, TxHash: common.HexToHash("0x1"), LogIndex: 2},
))
buf.lock.Lock()
require.Equal(t, 2, len(buf.blocks[0].logs))
buf.lock.Unlock()
})`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/logprovider/buffer_test.go: `buf.lock.Lock()`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/logprovider/buffer_test.go: `buf.lock.Unlock()`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/logprovider/buffer_test.go: `t.Run("enqueue logs overflow with dynamic limits", func(t *testing.T) {
buf := newLogEventBuffer(logger.TestLogger(t), 2, 10, 2)
require.Equal(t, 2, buf.enqueue(big.NewInt(1),
logpoller.Log{BlockNumber: 1, TxHash: common.HexToHash("0x1"), LogIndex: 0},
logpoller.Log{BlockNumber: 1, TxHash: common.HexToHash("0x1"), LogIndex: 1},
logpoller.Log{BlockNumber: 1, TxHash: common.HexToHash("0x1"), LogIndex: 2},
))
buf.SetLimits(10, 3)
require.Equal(t, 3, buf.enqueue(big.NewInt(1),
logpoller.Log{BlockNumber: 2, TxHash: common.HexToHash("0x21"), LogIndex: 0},
logpoller.Log{BlockNumber: 2, TxHash: common.HexToHash("0x21"), LogIndex: 1},
logpoller.Log{BlockNumber: 2, TxHash: common.HexToHash("0x21"), LogIndex: 2},
logpoller.Log{BlockNumber: 2, TxHash: common.HexToHash("0x21"), LogIndex: 3},
))
buf.lock.Lock()
defer buf.lock.Unlock()
require.Equal(t, 2, len(buf.blocks[0].logs))
require.Equal(t, 3, len(buf.blocks[1].logs))
})`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/logprovider/buffer_test.go: `buf.SetLimits(10, 3)`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/logprovider/buffer_test.go: `buf.lock.Lock()`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/logprovider/buffer_test.go: `t.Run("enqueue logs overflow with dynamic limits", func(t *testing.T) {
buf := newLogEventBuffer(logger.TestLogger(t), 2, 10, 2)
require.Equal(t, 2, buf.enqueue(big.NewInt(1),
logpoller.Log{BlockNumber: 1, TxHash: common.HexToHash("0x1"), LogIndex: 0},
logpoller.Log{BlockNumber: 1, TxHash: common.HexToHash("0x1"), LogIndex: 1},
logpoller.Log{BlockNumber: 1, TxHash: common.HexToHash("0x1"), LogIndex: 2},
logpoller.Log{BlockNumber: 1, TxHash: common.HexToHash("0x1"), LogIndex: 3},
))
buf.SetLimits(10, 3)
require.Equal(t, 3, buf.enqueue(big.NewInt(1),
logpoller.Log{BlockNumber: 2, TxHash: common.HexToHash("0x21"), LogIndex: 0},
logpoller.Log{BlockNumber: 2, TxHash: common.HexToHash("0x21"), LogIndex: 1},
logpoller.Log{BlockNumber: 2, TxHash: common.HexToHash("0x21"), LogIndex: 2},
logpoller.Log{BlockNumber: 2, TxHash: common.HexToHash("0x21"), LogIndex: 3},
))
buf.lock.Lock()
defer buf.lock.Unlock()
require.Equal(t, 2, len(buf.blocks[0].logs))
})`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/logprovider/buffer_test.go: `buf.SetLimits(10, 3)`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/logprovider/buffer_test.go: `buf.lock.Lock()`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/logprovider/buffer_test.go: `t.Run("enqueue block overflow", func(t *testing.T) {
buf := newLogEventBuffer(logger.TestLogger(t), 3, 2, 10)
require.Equal(t, 5, buf.enqueue(big.NewInt(1),
logpoller.Log{BlockNumber: 1, TxHash: common.HexToHash("0x1"), LogIndex: 0},
logpoller.Log{BlockNumber: 2, TxHash: common.HexToHash("0x2"), LogIndex: 0},
logpoller.Log{BlockNumber: 3, TxHash: common.HexToHash("0x3"), LogIndex: 0},
logpoller.Log{BlockNumber: 4, TxHash: common.HexToHash("0x4"), LogIndex: 0},
logpoller.Log{BlockNumber: 4, TxHash: common.HexToHash("0x4"), LogIndex: 1},
))
buf.lock.Lock()
require.Equal(t, 2, len(buf.blocks[0].logs))
buf.lock.Unlock()
})`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/logprovider/buffer_test.go: `buf.lock.Lock()`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/logprovider/buffer_test.go: `buf.lock.Unlock()`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/logprovider/buffer_test.go: `t.Run("enqueue upkeep block overflow", func(t *testing.T) {
buf := newLogEventBuffer(logger.TestLogger(t), 10, 10, 2)
require.Equal(t, 2, buf.enqueue(big.NewInt(1),
logpoller.Log{BlockNumber: 1, TxHash: common.HexToHash("0x1"), LogIndex: 0},
logpoller.Log{BlockNumber: 1, TxHash: common.HexToHash("0x1"), LogIndex: 1},
logpoller.Log{BlockNumber: 1, TxHash: common.HexToHash("0x1"), LogIndex: 2},
logpoller.Log{BlockNumber: 1, TxHash: common.HexToHash("0x1"), LogIndex: 3},
))
buf.lock.Lock()
require.Equal(t, 2, len(buf.blocks[0].logs))
buf.lock.Unlock()
})`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/logprovider/buffer_test.go: `buf.lock.Lock()`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/logprovider/buffer_test.go: `buf.lock.Unlock()`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/logprovider/buffer_test.go: `t.Run("peek range after dequeue", func(t *testing.T) {
buf := newLogEventBuffer(logger.TestLogger(t), 3, 10, 10)
require.Equal(t, buf.enqueue(big.NewInt(10),
logpoller.Log{BlockNumber: 1, TxHash: common.HexToHash("0x1"), LogIndex: 10},
logpoller.Log{BlockNumber: 3, TxHash: common.HexToHash("0x1"), LogIndex: 11},
), 2)
require.Equal(t, buf.enqueue(big.NewInt(1),
logpoller.Log{BlockNumber: 2, TxHash: common.HexToHash("0x1"), LogIndex: 0},
logpoller.Log{BlockNumber: 3, TxHash: common.HexToHash("0x1"), LogIndex: 1},
), 2)
results := buf.peekRange(int64(1), int64(2))
require.Equal(t, 2, len(results))
verifyBlockNumbers(t, results, 1, 2)
removed := buf.dequeueRange(int64(1), int64(2), 2, 10)
require.Equal(t, 2, len(removed))
results = buf.peekRange(int64(1), int64(2))
require.Equal(t, 0, len(results))
})`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/logprovider/buffer_test.go: `verifyBlockNumbers(t, results, 1, 2)`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/logprovider/buffer_test.go: `results = buf.peekRange(int64(1), int64(2))`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/logprovider/buffer_test.go: `t.Run("enqueue peek and dequeue", func(t *testing.T) {
buf := newLogEventBuffer(logger.TestLogger(t), 4, 10, 10)
require.Equal(t, buf.enqueue(big.NewInt(10),
logpoller.Log{BlockNumber: 1, TxHash: common.HexToHash("0x1"), LogIndex: 10},
logpoller.Log{BlockNumber: 3, TxHash: common.HexToHash("0x1"), LogIndex: 11},
), 2)
require.Equal(t, buf.enqueue(big.NewInt(1),
logpoller.Log{BlockNumber: 2, TxHash: common.HexToHash("0x1"), LogIndex: 0},
logpoller.Log{BlockNumber: 3, TxHash: common.HexToHash("0x1"), LogIndex: 1},
), 2)
results := buf.peek(8)
require.Equal(t, 4, len(results))
verifyBlockNumbers(t, results, 1, 2, 3, 3)
removed := buf.dequeueRange(1, 3, 5, 5)
require.Equal(t, 4, len(removed))
buf.lock.Lock()
require.Equal(t, 0, len(buf.blocks[0].logs))
require.Equal(t, int64(2), buf.blocks[1].blockNumber)
require.Equal(t, 1, len(buf.blocks[1].visited))
buf.lock.Unlock()
})`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/logprovider/buffer_test.go: `verifyBlockNumbers(t, results, 1, 2, 3, 3)`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/logprovider/buffer_test.go: `buf.lock.Lock()`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/logprovider/buffer_test.go: `buf.lock.Unlock()`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/logprovider/buffer_test.go: `t.Run("enqueue and peek range circular", func(t *testing.T) {
buf := newLogEventBuffer(logger.TestLogger(t), 3, 10, 10)
require.Equal(t, buf.enqueue(big.NewInt(1),
logpoller.Log{BlockNumber: 1, TxHash: common.HexToHash("0x1"), LogIndex: 0},
logpoller.Log{BlockNumber: 2, TxHash: common.HexToHash("0x2"), LogIndex: 0},
logpoller.Log{BlockNumber: 3, TxHash: common.HexToHash("0x3"), LogIndex: 0},
), 3)
require.Equal(t, buf.enqueue(big.NewInt(10),
logpoller.Log{BlockNumber: 4, TxHash: common.HexToHash("0x1"), LogIndex: 10},
logpoller.Log{BlockNumber: 4, TxHash: common.HexToHash("0x1"), LogIndex: 11},
), 2)
results := buf.peekRange(int64(1), int64(1))
require.Equal(t, 0, len(results))
results = buf.peekRange(int64(3), int64(5))
require.Equal(t, 3, len(results))
verifyBlockNumbers(t, results, 3, 4, 4)
})`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/logprovider/buffer_test.go: `results = buf.peekRange(int64(3), int64(5))`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/logprovider/buffer_test.go: `verifyBlockNumbers(t, results, 3, 4, 4)`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/logprovider/buffer_test.go: `t.Run("doesnt enqueue old blocks", func(t *testing.T) {
buf := newLogEventBuffer(logger.TestLogger(t), 3, 5, 10)
require.Equal(t, buf.enqueue(big.NewInt(10),
logpoller.Log{BlockNumber: 4, TxHash: common.HexToHash("0x1"), LogIndex: 10},
logpoller.Log{BlockNumber: 4, TxHash: common.HexToHash("0x1"), LogIndex: 11},
), 2)
require.Equal(t, buf.enqueue(big.NewInt(1),
logpoller.Log{BlockNumber: 1, TxHash: common.HexToHash("0x1"), LogIndex: 0},
logpoller.Log{BlockNumber: 2, TxHash: common.HexToHash("0x2"), LogIndex: 0},
logpoller.Log{BlockNumber: 3, TxHash: common.HexToHash("0x3"), LogIndex: 0},
), 2)
results := buf.peekRange(int64(1), int64(5))
fmt.Println(results)
verifyBlockNumbers(t, results, 2, 3, 4, 4)
})`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/logprovider/buffer_test.go: `fmt.Println(results)`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/logprovider/buffer_test.go: `verifyBlockNumbers(t, results, 2, 3, 4, 4)`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/logprovider/buffer_test.go: `t.Run("dequeue with limits returns latest block logs", func(t *testing.T) {
buf := newLogEventBuffer(logger.TestLogger(t), 3, 5, 10)
require.Equal(t, buf.enqueue(big.NewInt(1),
logpoller.Log{BlockNumber: 1, TxHash: common.HexToHash("0x1"), LogIndex: 0},
logpoller.Log{BlockNumber: 2, TxHash: common.HexToHash("0x2"), LogIndex: 0},
logpoller.Log{BlockNumber: 3, TxHash: common.HexToHash("0x3"), LogIndex: 0},
logpoller.Log{BlockNumber: 4, TxHash: common.HexToHash("0x4"), LogIndex: 0},
logpoller.Log{BlockNumber: 5, TxHash: common.HexToHash("0x5"), LogIndex: 0},
), 5)
logs := buf.dequeueRange(1, 5, 2, 10)
require.Equal(t, 2, len(logs))
require.Equal(t, int64(5), logs[0].log.BlockNumber)
require.Equal(t, int64(4), logs[1].log.BlockNumber)
require.Equal(t, buf.enqueue(big.NewInt(1),
logpoller.Log{BlockNumber: 4, TxHash: common.HexToHash("0x4"), LogIndex: 1},
logpoller.Log{BlockNumber: 5, TxHash: common.HexToHash("0x5"), LogIndex: 1},
), 2)
logs = buf.dequeueRange(1, 5, 3, 2)
require.Equal(t, 2, len(logs))
})`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/logprovider/buffer_test.go: `logs = buf.dequeueRange(1, 5, 3, 2)`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/logprovider/buffer_test.go: `fmt.Println(logs)`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/logprovider/buffer_test.go: `logs = buf.dequeueRange(3, 3, 2, 10)`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/logprovider/buffer_test.go: `fmt.Println(logs)`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/logprovider/buffer_test.go: `t.Run(tc.name, func(t *testing.T) {
lggr := logger.TestLogger(t)
b := fetchedBlock{
blockNumber: tc.blockNumber,
logs: make([]fetchedLog, len(tc.logs)),
visited: make([]fetchedLog, len(tc.visited)),
}
copy(b.logs, tc.logs)
copy(b.visited, tc.visited)
for _, args := range tc.toAdd {
dropped, added := b.Append(lggr, args.fl, args.maxBlockLogs, args.maxUpkeepLogs)
require.Equal(t, args.added, added)
if args.dropped {
require.NotNil(t, dropped.upkeepID)
} else {
require.Nil(t, dropped.upkeepID)
}
}
// clear cached logIDs
for i := range b.logs {
b.logs[i].cachedLogID = ""
}
require.Equal(t, tc.expected, b.logs)
})`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/logprovider/buffer_test.go: `copy(b.logs, tc.logs)`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/logprovider/buffer_test.go: `copy(b.visited, tc.visited)`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/logprovider/buffer_test.go: `b.logs[i].cachedLogID = ""`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/logprovider/buffer_test.go: `t.Run(tc.name, func(t *testing.T) {
b := fetchedBlock{
blockNumber: tc.blockNumber,
logs: make([]fetchedLog, len(tc.logs)),
}
if tc.iterations == 0 {
tc.iterations = 1
}
// performing the same multiple times should yield the same result
// default is one iteration
for i := 0; i < tc.iterations; i++ {
copy(b.logs, tc.logs)
logIDs := getLogIds(b)
require.Equal(t, len(tc.beforeSort), len(logIDs))
require.Equal(t, tc.beforeSort, logIDs)
b.Sort()
logIDsAfterSort := getLogIds(b)
require.Equal(t, len(tc.afterSort), len(logIDsAfterSort))
require.Equal(t, tc.afterSort, logIDsAfterSort)
}
})`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/logprovider/buffer_test.go: `tc.iterations = 1`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/logprovider/buffer_test.go: `copy(b.logs, tc.logs)`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/logprovider/buffer_test.go: `b.Sort()`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/logprovider/buffer_test.go: `b1.blockNumber = 2`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/logprovider/buffer_test.go: `b1.logs[0].log.BlockNumber = 2`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/logprovider/buffer_test.go: `.TestLogger(t)`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/logprovider/buffer_test.go: `.enqueue(big.NewInt(1),
logpoller.Log{BlockNumber: 2, TxHash: common.HexToHash("0x2"), LogIndex: 0},
logpoller.Log{BlockNumber: 3, TxHash: common.HexToHash("0x3"), LogIndex: 0},
)`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/logprovider/buffer_test.go: `.NewInt(1)`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/logprovider/buffer_test.go: `.HexToHash("0x2")`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/logprovider/buffer_test.go: `.HexToHash("0x3")`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/logprovider/buffer_test.go: `.enqueue(big.NewInt(2),
logpoller.Log{BlockNumber: 2, TxHash: common.HexToHash("0x2"), LogIndex: 2},
logpoller.Log{BlockNumber: 3, TxHash: common.HexToHash("0x3"), LogIndex: 2},
logpoller.Log{BlockNumber: 4, TxHash: common.HexToHash("0x1"), LogIndex: 0},
logpoller.Log{BlockNumber: 4, TxHash: common.HexToHash("0x1"), LogIndex: 1},
)`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/logprovider/buffer_test.go: `.NewInt(2)`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/logprovider/buffer_test.go: `.HexToHash("0x2")`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/logprovider/buffer_test.go: `.HexToHash("0x3")`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/logprovider/buffer_test.go: `.HexToHash("0x1")`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/logprovider/buffer_test.go: `.HexToHash("0x1")`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/logprovider/buffer_test.go: `.Run(tc.name, func(t *testing.T) {
blocks := buf.getBlocksInRange(int(tc.from), int(tc.to))
require.Equal(t, tc.want, len(blocks))
if tc.want > 0 {
from := tc.from
require.Equal(t, from, blocks[0].blockNumber)
to := tc.to
if to >= maxSeenBlock {
to = maxSeenBlock
}
require.Equal(t, to, blocks[len(blocks)-1].blockNumber)
}
})`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/logprovider/buffer_test.go: `.getBlocksInRange(int(tc.from), int(tc.to))`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/logprovider/buffer_test.go: `.TestLogger(t)`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/logprovider/buffer_test.go: `.Run(tc.name, func(t *testing.T) {
blocks := buf.getBlocksInRange(int(tc.from), int(tc.to))
require.Equal(t, len(tc.expectedBlocks), len(blocks))
expectedBlockNumbers := map[int64]bool{}
for _, b := range tc.expectedBlocks {
expectedBlockNumbers[b] = false
}
for _, b := range blocks {
expectedBlockNumbers[b.blockNumber] = true
}
for k, v := range expectedBlockNumbers {
require.True(t, v, "missing block %d", k)
}
})`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/logprovider/buffer_test.go: `.getBlocksInRange(int(tc.from), int(tc.to))`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/logprovider/buffer_test.go: `.Run("dequeue empty", func(t *testing.T) {
buf := newLogEventBuffer(logger.TestLogger(t), 3, 10, 10)
results := buf.peekRange(int64(1), int64(2))
require.Equal(t, 0, len(results))
results = buf.peek(2)
require.Equal(t, 0, len(results))
})`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/logprovider/buffer_test.go: `.TestLogger(t)`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/logprovider/buffer_test.go: `.peekRange(int64(1), int64(2))`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/logprovider/buffer_test.go: `.peek(2)`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/logprovider/buffer_test.go: `.Run("enqueue", func(t *testing.T) {
buf := newLogEventBuffer(logger.TestLogger(t), 3, 10, 10)
buf.enqueue(big.NewInt(1),
logpoller.Log{BlockNumber: 1, TxHash: common.HexToHash("0x1"), LogIndex: 0},
logpoller.Log{BlockNumber: 1, TxHash: common.HexToHash("0x1"), LogIndex: 1},
)
buf.lock.Lock()
require.Equal(t, 2, len(buf.blocks[0].logs))
buf.lock.Unlock()
})`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/logprovider/buffer_test.go: `.TestLogger(t)`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/logprovider/buffer_test.go: `.enqueue(big.NewInt(1),
logpoller.Log{BlockNumber: 1, TxHash: common.HexToHash("0x1"), LogIndex: 0},
logpoller.Log{BlockNumber: 1, TxHash: common.HexToHash("0x1"), LogIndex: 1},
)`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/logprovider/buffer_test.go: `.NewInt(1)`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/logprovider/buffer_test.go: `.HexToHash("0x1")`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/logprovider/buffer_test.go: `.HexToHash("0x1")`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/logprovider/buffer_test.go: `.lock.Lock()`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/logprovider/buffer_test.go: `.lock.Unlock()`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/logprovider/buffer_test.go: `.Run("enqueue logs overflow", func(t *testing.T) {
buf := newLogEventBuffer(logger.TestLogger(t), 2, 2, 2)
require.Equal(t, 2, buf.enqueue(big.NewInt(1),
logpoller.Log{BlockNumber: 1, TxHash: common.HexToHash("0x1"), LogIndex: 0},
logpoller.Log{BlockNumber: 1, TxHash: common.HexToHash("0x1"), LogIndex: 1},
logpoller.Log{BlockNumber: 1, TxHash: common.HexToHash("0x1"), LogIndex: 2},
))
buf.lock.Lock()
require.Equal(t, 2, len(buf.blocks[0].logs))
buf.lock.Unlock()
})`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/logprovider/buffer_test.go: `.TestLogger(t)`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/logprovider/buffer_test.go: `.lock.Lock()`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/logprovider/buffer_test.go: `.lock.Unlock()`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/logprovider/buffer_test.go: `.Run("enqueue logs overflow with dynamic limits", func(t *testing.T) {
buf := newLogEventBuffer(logger.TestLogger(t), 2, 10, 2)
require.Equal(t, 2, buf.enqueue(big.NewInt(1),
logpoller.Log{BlockNumber: 1, TxHash: common.HexToHash("0x1"), LogIndex: 0},
logpoller.Log{BlockNumber: 1, TxHash: common.HexToHash("0x1"), LogIndex: 1},
logpoller.Log{BlockNumber: 1, TxHash: common.HexToHash("0x1"), LogIndex: 2},
))
buf.SetLimits(10, 3)
require.Equal(t, 3, buf.enqueue(big.NewInt(1),
logpoller.Log{BlockNumber: 2, TxHash: common.HexToHash("0x21"), LogIndex: 0},
logpoller.Log{BlockNumber: 2, TxHash: common.HexToHash("0x21"), LogIndex: 1},
logpoller.Log{BlockNumber: 2, TxHash: common.HexToHash("0x21"), LogIndex: 2},
logpoller.Log{BlockNumber: 2, TxHash: common.HexToHash("0x21"), LogIndex: 3},
))
buf.lock.Lock()
defer buf.lock.Unlock()
require.Equal(t, 2, len(buf.blocks[0].logs))
require.Equal(t, 3, len(buf.blocks[1].logs))
})`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/logprovider/buffer_test.go: `.TestLogger(t)`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/logprovider/buffer_test.go: `.SetLimits(10, 3)`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/logprovider/buffer_test.go: `.lock.Lock()`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/logprovider/buffer_test.go: `.lock.Unlock()`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/logprovider/buffer_test.go: `.Run("enqueue logs overflow with dynamic limits", func(t *testing.T) {
buf := newLogEventBuffer(logger.TestLogger(t), 2, 10, 2)
require.Equal(t, 2, buf.enqueue(big.NewInt(1),
logpoller.Log{BlockNumber: 1, TxHash: common.HexToHash("0x1"), LogIndex: 0},
logpoller.Log{BlockNumber: 1, TxHash: common.HexToHash("0x1"), LogIndex: 1},
logpoller.Log{BlockNumber: 1, TxHash: common.HexToHash("0x1"), LogIndex: 2},
logpoller.Log{BlockNumber: 1, TxHash: common.HexToHash("0x1"), LogIndex: 3},
))
buf.SetLimits(10, 3)
require.Equal(t, 3, buf.enqueue(big.NewInt(1),
logpoller.Log{BlockNumber: 2, TxHash: common.HexToHash("0x21"), LogIndex: 0},
logpoller.Log{BlockNumber: 2, TxHash: common.HexToHash("0x21"), LogIndex: 1},
logpoller.Log{BlockNumber: 2, TxHash: common.HexToHash("0x21"), LogIndex: 2},
logpoller.Log{BlockNumber: 2, TxHash: common.HexToHash("0x21"), LogIndex: 3},
))
buf.lock.Lock()
defer buf.lock.Unlock()
require.Equal(t, 2, len(buf.blocks[0].logs))
})`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/logprovider/buffer_test.go: `.TestLogger(t)`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/logprovider/buffer_test.go: `.SetLimits(10, 3)`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/logprovider/buffer_test.go: `.lock.Lock()`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/logprovider/buffer_test.go: `.lock.Unlock()`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/logprovider/buffer_test.go: `.Run("enqueue block overflow", func(t *testing.T) {
buf := newLogEventBuffer(logger.TestLogger(t), 3, 2, 10)
require.Equal(t, 5, buf.enqueue(big.NewInt(1),
logpoller.Log{BlockNumber: 1, TxHash: common.HexToHash("0x1"), LogIndex: 0},
logpoller.Log{BlockNumber: 2, TxHash: common.HexToHash("0x2"), LogIndex: 0},
logpoller.Log{BlockNumber: 3, TxHash: common.HexToHash("0x3"), LogIndex: 0},
logpoller.Log{BlockNumber: 4, TxHash: common.HexToHash("0x4"), LogIndex: 0},
logpoller.Log{BlockNumber: 4, TxHash: common.HexToHash("0x4"), LogIndex: 1},
))
buf.lock.Lock()
require.Equal(t, 2, len(buf.blocks[0].logs))
buf.lock.Unlock()
})`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/logprovider/buffer_test.go: `.TestLogger(t)`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/logprovider/buffer_test.go: `.lock.Lock()`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/logprovider/buffer_test.go: `.lock.Unlock()`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/logprovider/buffer_test.go: `.Run("enqueue upkeep block overflow", func(t *testing.T) {
buf := newLogEventBuffer(logger.TestLogger(t), 10, 10, 2)
require.Equal(t, 2, buf.enqueue(big.NewInt(1),
logpoller.Log{BlockNumber: 1, TxHash: common.HexToHash("0x1"), LogIndex: 0},
logpoller.Log{BlockNumber: 1, TxHash: common.HexToHash("0x1"), LogIndex: 1},
logpoller.Log{BlockNumber: 1, TxHash: common.HexToHash("0x1"), LogIndex: 2},
logpoller.Log{BlockNumber: 1, TxHash: common.HexToHash("0x1"), LogIndex: 3},
))
buf.lock.Lock()
require.Equal(t, 2, len(buf.blocks[0].logs))
buf.lock.Unlock()
})`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/logprovider/buffer_test.go: `.TestLogger(t)`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/logprovider/buffer_test.go: `.lock.Lock()`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/logprovider/buffer_test.go: `.lock.Unlock()`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/logprovider/buffer_test.go: `.Run("peek range after dequeue", func(t *testing.T) {
buf := newLogEventBuffer(logger.TestLogger(t), 3, 10, 10)
require.Equal(t, buf.enqueue(big.NewInt(10),
logpoller.Log{BlockNumber: 1, TxHash: common.HexToHash("0x1"), LogIndex: 10},
logpoller.Log{BlockNumber: 3, TxHash: common.HexToHash("0x1"), LogIndex: 11},
), 2)
require.Equal(t, buf.enqueue(big.NewInt(1),
logpoller.Log{BlockNumber: 2, TxHash: common.HexToHash("0x1"), LogIndex: 0},
logpoller.Log{BlockNumber: 3, TxHash: common.HexToHash("0x1"), LogIndex: 1},
), 2)
results := buf.peekRange(int64(1), int64(2))
require.Equal(t, 2, len(results))
verifyBlockNumbers(t, results, 1, 2)
removed := buf.dequeueRange(int64(1), int64(2), 2, 10)
require.Equal(t, 2, len(removed))
results = buf.peekRange(int64(1), int64(2))
require.Equal(t, 0, len(results))
})`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/logprovider/buffer_test.go: `.TestLogger(t)`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/logprovider/buffer_test.go: `.peekRange(int64(1), int64(2))`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/logprovider/buffer_test.go: `.dequeueRange(int64(1), int64(2), 2, 10)`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/logprovider/buffer_test.go: `.peekRange(int64(1), int64(2))`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/logprovider/buffer_test.go: `.Run("enqueue peek and dequeue", func(t *testing.T) {
buf := newLogEventBuffer(logger.TestLogger(t), 4, 10, 10)
require.Equal(t, buf.enqueue(big.NewInt(10),
logpoller.Log{BlockNumber: 1, TxHash: common.HexToHash("0x1"), LogIndex: 10},
logpoller.Log{BlockNumber: 3, TxHash: common.HexToHash("0x1"), LogIndex: 11},
), 2)
require.Equal(t, buf.enqueue(big.NewInt(1),
logpoller.Log{BlockNumber: 2, TxHash: common.HexToHash("0x1"), LogIndex: 0},
logpoller.Log{BlockNumber: 3, TxHash: common.HexToHash("0x1"), LogIndex: 1},
), 2)
results := buf.peek(8)
require.Equal(t, 4, len(results))
verifyBlockNumbers(t, results, 1, 2, 3, 3)
removed := buf.dequeueRange(1, 3, 5, 5)
require.Equal(t, 4, len(removed))
buf.lock.Lock()
require.Equal(t, 0, len(buf.blocks[0].logs))
require.Equal(t, int64(2), buf.blocks[1].blockNumber)
require.Equal(t, 1, len(buf.blocks[1].visited))
buf.lock.Unlock()
})`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/logprovider/buffer_test.go: `.TestLogger(t)`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/logprovider/buffer_test.go: `.peek(8)`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/logprovider/buffer_test.go: `.dequeueRange(1, 3, 5, 5)`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/logprovider/buffer_test.go: `.lock.Lock()`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/logprovider/buffer_test.go: `.lock.Unlock()`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/logprovider/buffer_test.go: `.Run("enqueue and peek range circular", func(t *testing.T) {
buf := newLogEventBuffer(logger.TestLogger(t), 3, 10, 10)
require.Equal(t, buf.enqueue(big.NewInt(1),
logpoller.Log{BlockNumber: 1, TxHash: common.HexToHash("0x1"), LogIndex: 0},
logpoller.Log{BlockNumber: 2, TxHash: common.HexToHash("0x2"), LogIndex: 0},
logpoller.Log{BlockNumber: 3, TxHash: common.HexToHash("0x3"), LogIndex: 0},
), 3)
require.Equal(t, buf.enqueue(big.NewInt(10),
logpoller.Log{BlockNumber: 4, TxHash: common.HexToHash("0x1"), LogIndex: 10},
logpoller.Log{BlockNumber: 4, TxHash: common.HexToHash("0x1"), LogIndex: 11},
), 2)
results := buf.peekRange(int64(1), int64(1))
require.Equal(t, 0, len(results))
results = buf.peekRange(int64(3), int64(5))
require.Equal(t, 3, len(results))
verifyBlockNumbers(t, results, 3, 4, 4)
})`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/logprovider/buffer_test.go: `.TestLogger(t)`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/logprovider/buffer_test.go: `.peekRange(int64(1), int64(1))`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/logprovider/buffer_test.go: `.peekRange(int64(3), int64(5))`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/logprovider/buffer_test.go: `.Run("doesnt enqueue old blocks", func(t *testing.T) {
buf := newLogEventBuffer(logger.TestLogger(t), 3, 5, 10)
require.Equal(t, buf.enqueue(big.NewInt(10),
logpoller.Log{BlockNumber: 4, TxHash: common.HexToHash("0x1"), LogIndex: 10},
logpoller.Log{BlockNumber: 4, TxHash: common.HexToHash("0x1"), LogIndex: 11},
), 2)
require.Equal(t, buf.enqueue(big.NewInt(1),
logpoller.Log{BlockNumber: 1, TxHash: common.HexToHash("0x1"), LogIndex: 0},
logpoller.Log{BlockNumber: 2, TxHash: common.HexToHash("0x2"), LogIndex: 0},
logpoller.Log{BlockNumber: 3, TxHash: common.HexToHash("0x3"), LogIndex: 0},
), 2)
results := buf.peekRange(int64(1), int64(5))
fmt.Println(results)
verifyBlockNumbers(t, results, 2, 3, 4, 4)
})`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/logprovider/buffer_test.go: `.TestLogger(t)`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/logprovider/buffer_test.go: `.peekRange(int64(1), int64(5))`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/logprovider/buffer_test.go: `.Println(results)`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/logprovider/buffer_test.go: `.Run("dequeue with limits returns latest block logs", func(t *testing.T) {
buf := newLogEventBuffer(logger.TestLogger(t), 3, 5, 10)
require.Equal(t, buf.enqueue(big.NewInt(1),
logpoller.Log{BlockNumber: 1, TxHash: common.HexToHash("0x1"), LogIndex: 0},
logpoller.Log{BlockNumber: 2, TxHash: common.HexToHash("0x2"), LogIndex: 0},
logpoller.Log{BlockNumber: 3, TxHash: common.HexToHash("0x3"), LogIndex: 0},
logpoller.Log{BlockNumber: 4, TxHash: common.HexToHash("0x4"), LogIndex: 0},
logpoller.Log{BlockNumber: 5, TxHash: common.HexToHash("0x5"), LogIndex: 0},
), 5)
logs := buf.dequeueRange(1, 5, 2, 10)
require.Equal(t, 2, len(logs))
require.Equal(t, int64(5), logs[0].log.BlockNumber)
require.Equal(t, int64(4), logs[1].log.BlockNumber)
require.Equal(t, buf.enqueue(big.NewInt(1),
logpoller.Log{BlockNumber: 4, TxHash: common.HexToHash("0x4"), LogIndex: 1},
logpoller.Log{BlockNumber: 5, TxHash: common.HexToHash("0x5"), LogIndex: 1},
), 2)
logs = buf.dequeueRange(1, 5, 3, 2)
require.Equal(t, 2, len(logs))
})`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/logprovider/buffer_test.go: `.TestLogger(t)`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/logprovider/buffer_test.go: `.dequeueRange(1, 5, 2, 10)`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/logprovider/buffer_test.go: `.dequeueRange(1, 5, 3, 2)`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/logprovider/buffer_test.go: `.TestLogger(t)`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/logprovider/buffer_test.go: `.dequeueRange(3, 3, 2, 10)`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/logprovider/buffer_test.go: `.Println(logs)`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/logprovider/buffer_test.go: `.dequeueRange(3, 3, 2, 10)`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/logprovider/buffer_test.go: `.Println(logs)`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/logprovider/buffer_test.go: `.HexToHash("0x1")`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/logprovider/buffer_test.go: `.GenUpkeepID(types.LogTrigger, "111")`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/logprovider/buffer_test.go: `.BigInt()`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/logprovider/buffer_test.go: `.HexToHash("0x1")`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/logprovider/buffer_test.go: `.GenUpkeepID(types.LogTrigger, "111")`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/logprovider/buffer_test.go: `.BigInt()`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/logprovider/buffer_test.go: `.HexToHash("0x1")`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/logprovider/buffer_test.go: `.GenUpkeepID(types.LogTrigger, "111")`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/logprovider/buffer_test.go: `.BigInt()`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/logprovider/buffer_test.go: `.HexToHash("0x1")`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/logprovider/buffer_test.go: `.GenUpkeepID(types.LogTrigger, "111")`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/logprovider/buffer_test.go: `.BigInt()`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/logprovider/buffer_test.go: `.HexToHash("0x1")`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/logprovider/buffer_test.go: `.GenUpkeepID(types.LogTrigger, "111")`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/logprovider/buffer_test.go: `.BigInt()`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/logprovider/buffer_test.go: `.HexToHash("0x1")`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/logprovider/buffer_test.go: `.GenUpkeepID(types.LogTrigger, "111")`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/logprovider/buffer_test.go: `.BigInt()`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/logprovider/buffer_test.go: `.HexToHash("0x1")`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/logprovider/buffer_test.go: `.GenUpkeepID(types.LogTrigger, "111")`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/logprovider/buffer_test.go: `.BigInt()`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/logprovider/buffer_test.go: `.HexToHash("0x1")`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/logprovider/buffer_test.go: `.GenUpkeepID(types.LogTrigger, "111")`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/logprovider/buffer_test.go: `.BigInt()`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/logprovider/buffer_test.go: `.HexToHash("0x1")`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/logprovider/buffer_test.go: `.GenUpkeepID(types.LogTrigger, "111")`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/logprovider/buffer_test.go: `.BigInt()`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/logprovider/buffer_test.go: `.HexToHash("0x1")`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/logprovider/buffer_test.go: `.GenUpkeepID(types.LogTrigger, "111")`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/logprovider/buffer_test.go: `.BigInt()`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/logprovider/buffer_test.go: `.HexToHash("0x1")`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/logprovider/buffer_test.go: `.GenUpkeepID(types.LogTrigger, "111")`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/logprovider/buffer_test.go: `.BigInt()`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/logprovider/buffer_test.go: `.HexToHash("0x1")`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/logprovider/buffer_test.go: `.GenUpkeepID(types.LogTrigger, "111")`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/logprovider/buffer_test.go: `.BigInt()`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/logprovider/buffer_test.go: `.HexToHash("0x1")`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/logprovider/buffer_test.go: `.GenUpkeepID(types.LogTrigger, "111")`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/logprovider/buffer_test.go: `.BigInt()`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/logprovider/buffer_test.go: `.HexToHash("0x1")`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/logprovider/buffer_test.go: `.GenUpkeepID(types.LogTrigger, "111")`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/logprovider/buffer_test.go: `.BigInt()`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/logprovider/buffer_test.go: `.HexToHash("0x1")`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/logprovider/buffer_test.go: `.GenUpkeepID(types.LogTrigger, "111")`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/logprovider/buffer_test.go: `.BigInt()`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/logprovider/buffer_test.go: `.HexToHash("0x1")`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/logprovider/buffer_test.go: `.GenUpkeepID(types.LogTrigger, "111")`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/logprovider/buffer_test.go: `.BigInt()`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/logprovider/buffer_test.go: `.HexToHash("0x1")`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/logprovider/buffer_test.go: `.GenUpkeepID(types.LogTrigger, "111")`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/logprovider/buffer_test.go: `.BigInt()`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/logprovider/buffer_test.go: `.Run(tc.name, func(t *testing.T) {
lggr := logger.TestLogger(t)
b := fetchedBlock{
blockNumber: tc.blockNumber,
logs: make([]fetchedLog, len(tc.logs)),
visited: make([]fetchedLog, len(tc.visited)),
}
copy(b.logs, tc.logs)
copy(b.visited, tc.visited)
for _, args := range tc.toAdd {
dropped, added := b.Append(lggr, args.fl, args.maxBlockLogs, args.maxUpkeepLogs)
require.Equal(t, args.added, added)
if args.dropped {
require.NotNil(t, dropped.upkeepID)
} else {
require.Nil(t, dropped.upkeepID)
}
}
// clear cached logIDs
for i := range b.logs {
b.logs[i].cachedLogID = ""
}
require.Equal(t, tc.expected, b.logs)
})`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/logprovider/buffer_test.go: `.TestLogger(t)`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/logprovider/buffer_test.go: `.Append(lggr, args.fl, args.maxBlockLogs, args.maxUpkeepLogs)`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/logprovider/buffer_test.go: `.HexToHash("0x111")`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/logprovider/buffer_test.go: `.HexToHash("0x1")`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/logprovider/buffer_test.go: `.HexToHash("0xa25ebae1099f3fbae2525ebae279f3ae25e")`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/logprovider/buffer_test.go: `.HexToHash("0xb711bd1103927611ee41152aa8ae27f3330")`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/logprovider/buffer_test.go: `.GenUpkeepID(types.LogTrigger, "111")`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/logprovider/buffer_test.go: `.BigInt()`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/logprovider/buffer_test.go: `.HexToHash("0xa25ebae1099f3fbae2525ebae279f3ae25e")`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/logprovider/buffer_test.go: `.HexToHash("0xa651bd1109922111ee411525ebae27f3fb6")`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/logprovider/buffer_test.go: `.GenUpkeepID(types.LogTrigger, "222")`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/logprovider/buffer_test.go: `.BigInt()`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/logprovider/buffer_test.go: `.HexToHash("0xa25ebae1099f3fbae2525ebae279f3ae25e")`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/logprovider/buffer_test.go: `.HexToHash("0xa651bd1109922111ee411525ebae27f3fb6")`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/logprovider/buffer_test.go: `.GenUpkeepID(types.LogTrigger, "111")`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/logprovider/buffer_test.go: `.BigInt()`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/logprovider/buffer_test.go: `.HexToHash("0xa25ebae1099f3fbae2525ebae279f3ae25e")`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/logprovider/buffer_test.go: `.HexToHash("0xa651bd1109922111ee411525ebae27f3fb6")`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/logprovider/buffer_test.go: `.GenUpkeepID(types.LogTrigger, "222")`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/logprovider/buffer_test.go: `.BigInt()`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/logprovider/buffer_test.go: `.HexToHash("0xa25ebae1099f3fbae2525ebae279f3ae25e")`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/logprovider/buffer_test.go: `.HexToHash("0xa651bd1109922111ee411525ebae27f3fb6")`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/logprovider/buffer_test.go: `.GenUpkeepID(types.LogTrigger, "111")`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/logprovider/buffer_test.go: `.BigInt()`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/logprovider/buffer_test.go: `.HexToHash("0xa25ebae1099f3fbae2525ebae279f3ae25e")`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/logprovider/buffer_test.go: `.HexToHash("0xa651bd1109922111ee411525ebae27f3fb6")`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/logprovider/buffer_test.go: `.GenUpkeepID(types.LogTrigger, "111")`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/logprovider/buffer_test.go: `.BigInt()`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/logprovider/buffer_test.go: `.HexToHash("0xa25ebae1099f3fbae2525ebae279f3ae25e")`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/logprovider/buffer_test.go: `.HexToHash("0xa651bd1109922111ee411525ebae27f3fb6")`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/logprovider/buffer_test.go: `.GenUpkeepID(types.LogTrigger, "111")`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/logprovider/buffer_test.go: `.BigInt()`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/logprovider/buffer_test.go: `.HexToHash("0xa25ebae1099f3fbae2525ebae279f3ae25e")`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/logprovider/buffer_test.go: `.HexToHash("0xa651bd1109922111ee411525ebae27f3fb6")`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/logprovider/buffer_test.go: `.GenUpkeepID(types.LogTrigger, "111")`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/logprovider/buffer_test.go: `.BigInt()`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/logprovider/buffer_test.go: `.Run(tc.name, func(t *testing.T) {
b := fetchedBlock{
blockNumber: tc.blockNumber,
logs: make([]fetchedLog, len(tc.logs)),
}
if tc.iterations == 0 {
tc.iterations = 1
}
// performing the same multiple times should yield the same result
// default is one iteration
for i := 0; i < tc.iterations; i++ {
copy(b.logs, tc.logs)
logIDs := getLogIds(b)
require.Equal(t, len(tc.beforeSort), len(logIDs))
require.Equal(t, tc.beforeSort, logIDs)
b.Sort()
logIDsAfterSort := getLogIds(b)
require.Equal(t, len(tc.afterSort), len(logIDsAfterSort))
require.Equal(t, tc.afterSort, logIDsAfterSort)
}
})`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/logprovider/buffer_test.go: `.Sort()`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/logprovider/buffer_test.go: `.HexToHash("0x1")`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/logprovider/buffer_test.go: `.GenUpkeepID(types.LogTrigger, "111")`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/logprovider/buffer_test.go: `.BigInt()`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/logprovider/buffer_test.go: `.HexToHash("0x1")`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/logprovider/buffer_test.go: `.GenUpkeepID(types.LogTrigger, "111")`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/logprovider/buffer_test.go: `.BigInt()`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/logprovider/buffer_test.go: `.Clone()`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/logprovider/buffer_v1_test.go: `buf.Enqueue(big.NewInt(1),
logpoller.Log{BlockNumber: 2, TxHash: common.HexToHash("0x1"), LogIndex: 0},
logpoller.Log{BlockNumber: 2, TxHash: common.HexToHash("0x1"), LogIndex: 1},
)`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/logprovider/buffer_v1_test.go: `buf.Enqueue(big.NewInt(2),
logpoller.Log{BlockNumber: 2, TxHash: common.HexToHash("0x2"), LogIndex: 0},
logpoller.Log{BlockNumber: 2, TxHash: common.HexToHash("0x1"), LogIndex: 2},
)`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/logprovider/buffer_v1_test.go: `results, remaining = buf.Dequeue(int64(1), 10, 1, 2, DefaultUpkeepSelector)`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/logprovider/buffer_v1_test.go: `buf.Enqueue(big.NewInt(1),
logpoller.Log{BlockNumber: 2, TxHash: common.HexToHash("0x1"), LogIndex: 0},
logpoller.Log{BlockNumber: 2, TxHash: common.HexToHash("0x1"), LogIndex: 1},
)`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/logprovider/buffer_v1_test.go: `buf.Enqueue(big.NewInt(2),
logpoller.Log{BlockNumber: 2, TxHash: common.HexToHash("0x2"), LogIndex: 0},
logpoller.Log{BlockNumber: 2, TxHash: common.HexToHash("0x1"), LogIndex: 2},
)`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/logprovider/buffer_v1_test.go: `filterStore.AddActiveUpkeeps(upkeepFilter{upkeepID: big.NewInt(1)})`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/logprovider/buffer_v1_test.go: `t.Run("enqueuing logs for a block older than latest seen logs a message", func(t *testing.T) {
logReceived := false
readableLogger := &readableLogger{
DebugwFn: func(msg string, keysAndValues ...interface{}) {
if msg == "enqueuing logs from a block older than latest seen block" {
logReceived = true
assert.Equal(t, "logBlock", keysAndValues[0])
assert.Equal(t, int64(1), keysAndValues[1])
assert.Equal(t, "lastBlockSeen", keysAndValues[2])
assert.Equal(t, int64(2), keysAndValues[3])
}
},
}
logBufferV1 := NewLogBuffer(readableLogger, 10, 20, 1)
buf := logBufferV1.(*logBuffer)
buf.Enqueue(big.NewInt(1),
logpoller.Log{BlockNumber: 2, TxHash: common.HexToHash("0x1"), LogIndex: 0},
logpoller.Log{BlockNumber: 2, TxHash: common.HexToHash("0x1"), LogIndex: 1},
)
buf.Enqueue(big.NewInt(2),
logpoller.Log{BlockNumber: 1, TxHash: common.HexToHash("0x2"), LogIndex: 0},
)
assert.Equal(t, 1, buf.enqueuedBlocks[2]["1"])
assert.Equal(t, 1, buf.enqueuedBlocks[1]["2"])
assert.True(t, true, logReceived)
})`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/logprovider/buffer_v1_test.go: `logReceived = true`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/logprovider/buffer_v1_test.go: `buf.Enqueue(big.NewInt(1),
logpoller.Log{BlockNumber: 2, TxHash: common.HexToHash("0x1"), LogIndex: 0},
logpoller.Log{BlockNumber: 2, TxHash: common.HexToHash("0x1"), LogIndex: 1},
)`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/logprovider/buffer_v1_test.go: `buf.Enqueue(big.NewInt(2),
logpoller.Log{BlockNumber: 1, TxHash: common.HexToHash("0x2"), LogIndex: 0},
)`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/logprovider/buffer_v1_test.go: `logReceived = true`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/logprovider/buffer_v1_test.go: `buf.Enqueue(big.NewInt(1),
logpoller.Log{BlockNumber: 1, TxHash: common.HexToHash("0x1"), LogIndex: 0},
logpoller.Log{BlockNumber: 1, TxHash: common.HexToHash("0x1"), LogIndex: 1},
)`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/logprovider/buffer_v1_test.go: `buf.Enqueue(big.NewInt(2),
logpoller.Log{BlockNumber: 2, TxHash: common.HexToHash("0x2"), LogIndex: 0},
)`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/logprovider/buffer_v1_test.go: `buf.Enqueue(big.NewInt(3),
logpoller.Log{BlockNumber: 3, TxHash: common.HexToHash("0x3a"), LogIndex: 0},
)`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/logprovider/buffer_v1_test.go: `buf.Enqueue(big.NewInt(3),
logpoller.Log{BlockNumber: 3, TxHash: common.HexToHash("0x3b"), LogIndex: 0},
)`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/logprovider/buffer_v1_test.go: `t.Run(tc.name, func(t *testing.T) {
buf := NewLogBuffer(logger.TestLogger(t), uint32(tc.lookback), uint32(tc.args.blockRate), uint32(tc.args.upkeepLimit))
for id, logs := range tc.logsInBuffer {
added, dropped := buf.Enqueue(id, logs...)
require.Equal(t, len(logs), added+dropped)
}
results, remaining := buf.Dequeue(tc.args.block, tc.args.blockRate, tc.args.upkeepLimit, tc.args.maxResults, tc.args.upkeepSelector)
require.Equal(t, len(tc.results), len(results))
require.Equal(t, tc.remaining, remaining)
})`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/logprovider/buffer_v1_test.go: `t.Run(tc.name, func(t *testing.T) {
buf := NewLogBuffer(logger.TestLogger(t), tc.lookback, tc.blockRate, tc.upkeepLimit)
for id, logs := range tc.logsToAdd {
added, dropped := buf.Enqueue(id, logs...)
sid := id.String()
if _, ok := tc.added[sid]; !ok {
tc.added[sid] = 0
}
if _, ok := tc.dropped[sid]; !ok {
tc.dropped[sid] = 0
}
require.Equal(t, tc.added[sid], added)
require.Equal(t, tc.dropped[sid], dropped)
}
for id, size := range tc.sizeOfRange {
q, ok := buf.(*logBuffer).getUpkeepQueue(id)
require.True(t, ok)
require.Equal(t, size, q.sizeOfRange(tc.rangeStart, tc.rangeEnd))
}
})`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/logprovider/buffer_v1_test.go: `tc.added[sid] = 0`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/logprovider/buffer_v1_test.go: `tc.dropped[sid] = 0`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/logprovider/buffer_v1_test.go: `t.Run("enqueue dequeue", func(t *testing.T) {
q := newUpkeepLogQueue(logger.TestLogger(t), big.NewInt(1), newLogBufferOptions(10, 1, 1))
added, dropped := q.enqueue(10, logpoller.Log{BlockNumber: 20, TxHash: common.HexToHash("0x1"), LogIndex: 0})
require.Equal(t, 0, dropped)
require.Equal(t, 1, added)
require.Equal(t, 1, q.sizeOfRange(1, 20))
logs, remaining := q.dequeue(19, 21, 10)
require.Equal(t, 1, len(logs))
require.Equal(t, 0, remaining)
})`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/logprovider/buffer_v1_test.go: `t.Run("enqueue with limits", func(t *testing.T) {
q := newUpkeepLogQueue(logger.TestLogger(t), big.NewInt(1), newLogBufferOptions(10, 1, 1))
added, dropped := q.enqueue(10,
createDummyLogSequence(15, 0, 20, common.HexToHash("0x20"))...,
)
require.Equal(t, 5, dropped)
require.Equal(t, 15, added)
})`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/logprovider/buffer_v1_test.go: `t.Run("empty", func(t *testing.T) {
q := newUpkeepLogQueue(logger.TestLogger(t), big.NewInt(1), newLogBufferOptions(10, 1, 1))
require.Equal(t, 0, q.sizeOfRange(1, 10))
})`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/logprovider/buffer_v1_test.go: `t.Run("empty", func(t *testing.T) {
q := newUpkeepLogQueue(logger.TestLogger(t), big.NewInt(1), newLogBufferOptions(10, 1, 1))
q.clean(10)
})`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/logprovider/buffer_v1_test.go: `q.clean(10)`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/logprovider/buffer_v1_test.go: `buf.Enqueue(big.NewInt(1),
logpoller.Log{BlockNumber: 2, TxHash: common.HexToHash("0x1"), LogIndex: 0},
logpoller.Log{BlockNumber: 2, TxHash: common.HexToHash("0x1"), LogIndex: 1},
)`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/logprovider/buffer_v1_test.go: `buf.Enqueue(big.NewInt(1),
logpoller.Log{BlockNumber: 11, TxHash: common.HexToHash("0x111"), LogIndex: 0},
logpoller.Log{BlockNumber: 11, TxHash: common.HexToHash("0x111"), LogIndex: 1},
)`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/logprovider/buffer_v1_test.go: `buf.Enqueue(big.NewInt(1),
logpoller.Log{BlockNumber: 17, TxHash: common.HexToHash("0x171"), LogIndex: 0},
logpoller.Log{BlockNumber: 17, TxHash: common.HexToHash("0x171"), LogIndex: 1},
)`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/logprovider/buffer_v1_test.go: `q.lock.Lock()`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/logprovider/buffer_v1_test.go: `t.Run(tc.name, func(t *testing.T) {
start, end := getBlockWindow(tc.block, tc.blockRate)
require.Equal(t, tc.wantStart, start)
require.Equal(t, tc.wantEnd, end)
})`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/logprovider/buffer_v1_test.go: `logBuffer.trackBlockNumbersForUpkeep(tc.uid, tc.uniqueBlocks)`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/logprovider/buffer_v1_test.go: `.TestLogger(t)`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/logprovider/buffer_v1_test.go: `.Enqueue(big.NewInt(1),
logpoller.Log{BlockNumber: 2, TxHash: common.HexToHash("0x1"), LogIndex: 0},
logpoller.Log{BlockNumber: 2, TxHash: common.HexToHash("0x1"), LogIndex: 1},
)`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/logprovider/buffer_v1_test.go: `.NewInt(1)`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/logprovider/buffer_v1_test.go: `.HexToHash("0x1")`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/logprovider/buffer_v1_test.go: `.HexToHash("0x1")`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/logprovider/buffer_v1_test.go: `.Enqueue(big.NewInt(2),
logpoller.Log{BlockNumber: 2, TxHash: common.HexToHash("0x2"), LogIndex: 0},
logpoller.Log{BlockNumber: 2, TxHash: common.HexToHash("0x1"), LogIndex: 2},
)`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/logprovider/buffer_v1_test.go: `.NewInt(2)`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/logprovider/buffer_v1_test.go: `.HexToHash("0x2")`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/logprovider/buffer_v1_test.go: `.HexToHash("0x1")`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/logprovider/buffer_v1_test.go: `.Dequeue(int64(1), 10, 1, 2, DefaultUpkeepSelector)`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/logprovider/buffer_v1_test.go: `.Dequeue(int64(1), 10, 1, 2, DefaultUpkeepSelector)`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/logprovider/buffer_v1_test.go: `.TestLogger(t)`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/logprovider/buffer_v1_test.go: `.Enqueue(big.NewInt(1),
logpoller.Log{BlockNumber: 2, TxHash: common.HexToHash("0x1"), LogIndex: 0},
logpoller.Log{BlockNumber: 2, TxHash: common.HexToHash("0x1"), LogIndex: 1},
)`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/logprovider/buffer_v1_test.go: `.NewInt(1)`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/logprovider/buffer_v1_test.go: `.HexToHash("0x1")`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/logprovider/buffer_v1_test.go: `.HexToHash("0x1")`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/logprovider/buffer_v1_test.go: `.Enqueue(big.NewInt(2),
logpoller.Log{BlockNumber: 2, TxHash: common.HexToHash("0x2"), LogIndex: 0},
logpoller.Log{BlockNumber: 2, TxHash: common.HexToHash("0x1"), LogIndex: 2},
)`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/logprovider/buffer_v1_test.go: `.NewInt(2)`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/logprovider/buffer_v1_test.go: `.HexToHash("0x2")`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/logprovider/buffer_v1_test.go: `.HexToHash("0x1")`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/logprovider/buffer_v1_test.go: `.AddActiveUpkeeps(upkeepFilter{upkeepID: big.NewInt(1)})`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/logprovider/buffer_v1_test.go: `.NewInt(1)`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/logprovider/buffer_v1_test.go: `.NumOfUpkeeps()`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/logprovider/buffer_v1_test.go: `.Run("enqueuing logs for a block older than latest seen logs a message", func(t *testing.T) {
logReceived := false
readableLogger := &readableLogger{
DebugwFn: func(msg string, keysAndValues ...interface{}) {
if msg == "enqueuing logs from a block older than latest seen block" {
logReceived = true
assert.Equal(t, "logBlock", keysAndValues[0])
assert.Equal(t, int64(1), keysAndValues[1])
assert.Equal(t, "lastBlockSeen", keysAndValues[2])
assert.Equal(t, int64(2), keysAndValues[3])
}
},
}
logBufferV1 := NewLogBuffer(readableLogger, 10, 20, 1)
buf := logBufferV1.(*logBuffer)
buf.Enqueue(big.NewInt(1),
logpoller.Log{BlockNumber: 2, TxHash: common.HexToHash("0x1"), LogIndex: 0},
logpoller.Log{BlockNumber: 2, TxHash: common.HexToHash("0x1"), LogIndex: 1},
)
buf.Enqueue(big.NewInt(2),
logpoller.Log{BlockNumber: 1, TxHash: common.HexToHash("0x2"), LogIndex: 0},
)
assert.Equal(t, 1, buf.enqueuedBlocks[2]["1"])
assert.Equal(t, 1, buf.enqueuedBlocks[1]["2"])
assert.True(t, true, logReceived)
})`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/logprovider/buffer_v1_test.go: `.Enqueue(big.NewInt(1),
logpoller.Log{BlockNumber: 2, TxHash: common.HexToHash("0x1"), LogIndex: 0},
logpoller.Log{BlockNumber: 2, TxHash: common.HexToHash("0x1"), LogIndex: 1},
)`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/logprovider/buffer_v1_test.go: `.NewInt(1)`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/logprovider/buffer_v1_test.go: `.HexToHash("0x1")`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/logprovider/buffer_v1_test.go: `.HexToHash("0x1")`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/logprovider/buffer_v1_test.go: `.Enqueue(big.NewInt(2),
logpoller.Log{BlockNumber: 1, TxHash: common.HexToHash("0x2"), LogIndex: 0},
)`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/logprovider/buffer_v1_test.go: `.NewInt(2)`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/logprovider/buffer_v1_test.go: `.HexToHash("0x2")`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/logprovider/buffer_v1_test.go: `.Enqueue(big.NewInt(1),
logpoller.Log{BlockNumber: 1, TxHash: common.HexToHash("0x1"), LogIndex: 0},
logpoller.Log{BlockNumber: 1, TxHash: common.HexToHash("0x1"), LogIndex: 1},
)`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/logprovider/buffer_v1_test.go: `.NewInt(1)`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/logprovider/buffer_v1_test.go: `.HexToHash("0x1")`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/logprovider/buffer_v1_test.go: `.HexToHash("0x1")`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/logprovider/buffer_v1_test.go: `.Enqueue(big.NewInt(2),
logpoller.Log{BlockNumber: 2, TxHash: common.HexToHash("0x2"), LogIndex: 0},
)`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/logprovider/buffer_v1_test.go: `.NewInt(2)`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/logprovider/buffer_v1_test.go: `.HexToHash("0x2")`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/logprovider/buffer_v1_test.go: `.Enqueue(big.NewInt(3),
logpoller.Log{BlockNumber: 3, TxHash: common.HexToHash("0x3a"), LogIndex: 0},
)`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/logprovider/buffer_v1_test.go: `.NewInt(3)`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/logprovider/buffer_v1_test.go: `.HexToHash("0x3a")`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/logprovider/buffer_v1_test.go: `.Enqueue(big.NewInt(3),
logpoller.Log{BlockNumber: 3, TxHash: common.HexToHash("0x3b"), LogIndex: 0},
)`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/logprovider/buffer_v1_test.go: `.NewInt(3)`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/logprovider/buffer_v1_test.go: `.HexToHash("0x3b")`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/logprovider/buffer_v1_test.go: `.NewInt(1)`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/logprovider/buffer_v1_test.go: `.HexToHash("0x12")`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/logprovider/buffer_v1_test.go: `.HexToHash("0x15")`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/logprovider/buffer_v1_test.go: `.NewInt(1)`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/logprovider/buffer_v1_test.go: `.HexToHash("0x12")`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/logprovider/buffer_v1_test.go: `.HexToHash("0x12")`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/logprovider/buffer_v1_test.go: `.HexToHash("0x13")`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/logprovider/buffer_v1_test.go: `.HexToHash("0x13")`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/logprovider/buffer_v1_test.go: `.HexToHash("0x14")`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/logprovider/buffer_v1_test.go: `.HexToHash("0x14")`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/logprovider/buffer_v1_test.go: `.NewInt(2)`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/logprovider/buffer_v1_test.go: `.HexToHash("0x12")`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/logprovider/buffer_v1_test.go: `.HexToHash("0x12")`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/logprovider/buffer_v1_test.go: `.HexToHash("0x13")`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/logprovider/buffer_v1_test.go: `.HexToHash("0x13")`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/logprovider/buffer_v1_test.go: `.HexToHash("0x14")`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/logprovider/buffer_v1_test.go: `.HexToHash("0x14")`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/logprovider/buffer_v1_test.go: `.NewInt(1)`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/logprovider/buffer_v1_test.go: `.HexToHash("0x12")`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/logprovider/buffer_v1_test.go: `.HexToHash("0x13")`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/logprovider/buffer_v1_test.go: `.NewInt(2)`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/logprovider/buffer_v1_test.go: `.HexToHash("0x12")`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/logprovider/buffer_v1_test.go: `.HexToHash("0x13")`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/logprovider/buffer_v1_test.go: `.NewInt(1)`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/logprovider/buffer_v1_test.go: `.HexToHash("0x12")`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/logprovider/buffer_v1_test.go: `.HexToHash("0x15")`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/logprovider/buffer_v1_test.go: `.Run(tc.name, func(t *testing.T) {
buf := NewLogBuffer(logger.TestLogger(t), uint32(tc.lookback), uint32(tc.args.blockRate), uint32(tc.args.upkeepLimit))
for id, logs := range tc.logsInBuffer {
added, dropped := buf.Enqueue(id, logs...)
require.Equal(t, len(logs), added+dropped)
}
results, remaining := buf.Dequeue(tc.args.block, tc.args.blockRate, tc.args.upkeepLimit, tc.args.maxResults, tc.args.upkeepSelector)
require.Equal(t, len(tc.results), len(results))
require.Equal(t, tc.remaining, remaining)
})`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/logprovider/buffer_v1_test.go: `.TestLogger(t)`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/logprovider/buffer_v1_test.go: `.Enqueue(id, logs...)`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/logprovider/buffer_v1_test.go: `.Dequeue(tc.args.block, tc.args.blockRate, tc.args.upkeepLimit, tc.args.maxResults, tc.args.upkeepSelector)`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/logprovider/buffer_v1_test.go: `.NewInt(1)`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/logprovider/buffer_v1_test.go: `.HexToHash("0x12")`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/logprovider/buffer_v1_test.go: `.HexToHash("0x15")`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/logprovider/buffer_v1_test.go: `.NewInt(2)`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/logprovider/buffer_v1_test.go: `.HexToHash("0x12")`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/logprovider/buffer_v1_test.go: `.NewInt(1)`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/logprovider/buffer_v1_test.go: `.String()`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/logprovider/buffer_v1_test.go: `.NewInt(2)`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/logprovider/buffer_v1_test.go: `.String()`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/logprovider/buffer_v1_test.go: `.NewInt(1)`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/logprovider/buffer_v1_test.go: `.String()`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/logprovider/buffer_v1_test.go: `.NewInt(2)`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/logprovider/buffer_v1_test.go: `.String()`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/logprovider/buffer_v1_test.go: `.NewInt(1)`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/logprovider/buffer_v1_test.go: `.NewInt(2)`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/logprovider/buffer_v1_test.go: `.NewInt(1)`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/logprovider/buffer_v1_test.go: `.HexToHash("0x12")`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/logprovider/buffer_v1_test.go: `.NewInt(2)`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/logprovider/buffer_v1_test.go: `.HexToHash("0x12")`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/logprovider/buffer_v1_test.go: `.NewInt(1)`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/logprovider/buffer_v1_test.go: `.String()`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/logprovider/buffer_v1_test.go: `.NewInt(2)`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/logprovider/buffer_v1_test.go: `.String()`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/logprovider/buffer_v1_test.go: `.NewInt(1)`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/logprovider/buffer_v1_test.go: `.String()`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/logprovider/buffer_v1_test.go: `.NewInt(2)`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/logprovider/buffer_v1_test.go: `.String()`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/logprovider/buffer_v1_test.go: `.NewInt(1)`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/logprovider/buffer_v1_test.go: `.NewInt(2)`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/logprovider/buffer_v1_test.go: `.NewInt(1)`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/logprovider/buffer_v1_test.go: `.HexToHash("0x1")`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/logprovider/buffer_v1_test.go: `.HexToHash("0x1")`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/logprovider/buffer_v1_test.go: `.NewInt(1)`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/logprovider/buffer_v1_test.go: `.String()`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/logprovider/buffer_v1_test.go: `.NewInt(1)`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/logprovider/buffer_v1_test.go: `.String()`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/logprovider/buffer_v1_test.go: `.NewInt(1)`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/logprovider/buffer_v1_test.go: `.Run(tc.name, func(t *testing.T) {
buf := NewLogBuffer(logger.TestLogger(t), tc.lookback, tc.blockRate, tc.upkeepLimit)
for id, logs := range tc.logsToAdd {
added, dropped := buf.Enqueue(id, logs...)
sid := id.String()
if _, ok := tc.added[sid]; !ok {
tc.added[sid] = 0
}
if _, ok := tc.dropped[sid]; !ok {
tc.dropped[sid] = 0
}
require.Equal(t, tc.added[sid], added)
require.Equal(t, tc.dropped[sid], dropped)
}
for id, size := range tc.sizeOfRange {
q, ok := buf.(*logBuffer).getUpkeepQueue(id)
require.True(t, ok)
require.Equal(t, size, q.sizeOfRange(tc.rangeStart, tc.rangeEnd))
}
})`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/logprovider/buffer_v1_test.go: `.TestLogger(t)`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/logprovider/buffer_v1_test.go: `.Enqueue(id, logs...)`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/logprovider/buffer_v1_test.go: `.String()`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/logprovider/buffer_v1_test.go: `.getUpkeepQueue(id)`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/logprovider/buffer_v1_test.go: `.Run("enqueue dequeue", func(t *testing.T) {
q := newUpkeepLogQueue(logger.TestLogger(t), big.NewInt(1), newLogBufferOptions(10, 1, 1))
added, dropped := q.enqueue(10, logpoller.Log{BlockNumber: 20, TxHash: common.HexToHash("0x1"), LogIndex: 0})
require.Equal(t, 0, dropped)
require.Equal(t, 1, added)
require.Equal(t, 1, q.sizeOfRange(1, 20))
logs, remaining := q.dequeue(19, 21, 10)
require.Equal(t, 1, len(logs))
require.Equal(t, 0, remaining)
})`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/logprovider/buffer_v1_test.go: `.TestLogger(t)`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/logprovider/buffer_v1_test.go: `.NewInt(1)`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/logprovider/buffer_v1_test.go: `.enqueue(10, logpoller.Log{BlockNumber: 20, TxHash: common.HexToHash("0x1"), LogIndex: 0})`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/logprovider/buffer_v1_test.go: `.HexToHash("0x1")`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/logprovider/buffer_v1_test.go: `.dequeue(19, 21, 10)`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/logprovider/buffer_v1_test.go: `.Run("enqueue with limits", func(t *testing.T) {
q := newUpkeepLogQueue(logger.TestLogger(t), big.NewInt(1), newLogBufferOptions(10, 1, 1))
added, dropped := q.enqueue(10,
createDummyLogSequence(15, 0, 20, common.HexToHash("0x20"))...,
)
require.Equal(t, 5, dropped)
require.Equal(t, 15, added)
})`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/logprovider/buffer_v1_test.go: `.TestLogger(t)`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/logprovider/buffer_v1_test.go: `.NewInt(1)`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/logprovider/buffer_v1_test.go: `.enqueue(10,
createDummyLogSequence(15, 0, 20, common.HexToHash("0x20"))...,
)`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/logprovider/buffer_v1_test.go: `.HexToHash("0x20")`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/logprovider/buffer_v1_test.go: `.TestLogger(t)`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/logprovider/buffer_v1_test.go: `.NewInt(1)`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/logprovider/buffer_v1_test.go: `.enqueue(10,
logpoller.Log{BlockNumber: 20, TxHash: common.HexToHash("0x1"), LogIndex: 0},
logpoller.Log{BlockNumber: 20, TxHash: common.HexToHash("0x1"), LogIndex: 1},
logpoller.Log{BlockNumber: 20, TxHash: common.HexToHash("0x1"), LogIndex: 10},
)`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/logprovider/buffer_v1_test.go: `.HexToHash("0x1")`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/logprovider/buffer_v1_test.go: `.HexToHash("0x1")`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/logprovider/buffer_v1_test.go: `.HexToHash("0x1")`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/logprovider/buffer_v1_test.go: `.dequeue(19, 21, 2)`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/logprovider/buffer_v1_test.go: `.Run("empty", func(t *testing.T) {
q := newUpkeepLogQueue(logger.TestLogger(t), big.NewInt(1), newLogBufferOptions(10, 1, 1))
require.Equal(t, 0, q.sizeOfRange(1, 10))
})`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/logprovider/buffer_v1_test.go: `.TestLogger(t)`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/logprovider/buffer_v1_test.go: `.NewInt(1)`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/logprovider/buffer_v1_test.go: `.TestLogger(t)`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/logprovider/buffer_v1_test.go: `.NewInt(1)`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/logprovider/buffer_v1_test.go: `.enqueue(10, logpoller.Log{BlockNumber: 20, TxHash: common.HexToHash("0x1"), LogIndex: 0})`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/logprovider/buffer_v1_test.go: `.HexToHash("0x1")`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/logprovider/buffer_v1_test.go: `.Run("empty", func(t *testing.T) {
q := newUpkeepLogQueue(logger.TestLogger(t), big.NewInt(1), newLogBufferOptions(10, 1, 1))
q.clean(10)
})`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/logprovider/buffer_v1_test.go: `.TestLogger(t)`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/logprovider/buffer_v1_test.go: `.NewInt(1)`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/logprovider/buffer_v1_test.go: `.clean(10)`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/logprovider/buffer_v1_test.go: `.TestLogger(t)`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/logprovider/buffer_v1_test.go: `.Enqueue(big.NewInt(1),
logpoller.Log{BlockNumber: 2, TxHash: common.HexToHash("0x1"), LogIndex: 0},
logpoller.Log{BlockNumber: 2, TxHash: common.HexToHash("0x1"), LogIndex: 1},
)`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/logprovider/buffer_v1_test.go: `.NewInt(1)`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/logprovider/buffer_v1_test.go: `.HexToHash("0x1")`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/logprovider/buffer_v1_test.go: `.HexToHash("0x1")`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/logprovider/buffer_v1_test.go: `.Enqueue(big.NewInt(1),
logpoller.Log{BlockNumber: 11, TxHash: common.HexToHash("0x111"), LogIndex: 0},
logpoller.Log{BlockNumber: 11, TxHash: common.HexToHash("0x111"), LogIndex: 1},
)`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/logprovider/buffer_v1_test.go: `.NewInt(1)`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/logprovider/buffer_v1_test.go: `.HexToHash("0x111")`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/logprovider/buffer_v1_test.go: `.HexToHash("0x111")`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/logprovider/buffer_v1_test.go: `.getUpkeepQueue(big.NewInt(1))`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/logprovider/buffer_v1_test.go: `.NewInt(1)`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/logprovider/buffer_v1_test.go: `.Enqueue(big.NewInt(1),
logpoller.Log{BlockNumber: 17, TxHash: common.HexToHash("0x171"), LogIndex: 0},
logpoller.Log{BlockNumber: 17, TxHash: common.HexToHash("0x171"), LogIndex: 1},
)`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/logprovider/buffer_v1_test.go: `.NewInt(1)`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/logprovider/buffer_v1_test.go: `.HexToHash("0x171")`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/logprovider/buffer_v1_test.go: `.HexToHash("0x171")`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/logprovider/buffer_v1_test.go: `.lock.Lock()`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/logprovider/buffer_v1_test.go: `.lock.Unlock()`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/logprovider/buffer_v1_test.go: `.Run(tc.name, func(t *testing.T) {
start, end := getBlockWindow(tc.block, tc.blockRate)
require.Equal(t, tc.wantStart, start)
require.Equal(t, tc.wantEnd, end)
})`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/logprovider/buffer_v1_test.go: `.TestLogger(t)`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/logprovider/buffer_v1_test.go: `.NewInt(1)`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/logprovider/buffer_v1_test.go: `.NewInt(2)`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/logprovider/buffer_v1_test.go: `.NewInt(2)`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/logprovider/buffer_v1_test.go: `.trackBlockNumbersForUpkeep(tc.uid, tc.uniqueBlocks)`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/logprovider/filter_store_test.go: `t.Run(tc.name, func(t *testing.T) {
s := NewUpkeepFilterStore()
s.AddActiveUpkeeps(tc.initial...)
require.Equal(t, len(tc.initial), len(s.GetIDs(nil)))
s.AddActiveUpkeeps(tc.toAdd...)
require.Equal(t, len(tc.expectedPostAdd), s.Size())
filters := s.GetFilters(func(f upkeepFilter) bool { return true })
require.Equal(t, len(tc.expectedPostAdd), len(filters))
if len(filters) > 0 {
sort.Slice(filters, func(i, j int) bool {
return filters[i].upkeepID.Cmp(filters[j].upkeepID) < 0
})
for i, f := range filters {
require.Equal(t, tc.expectedPostAdd[i].upkeepID, f.upkeepID)
}
}
s.RemoveActiveUpkeeps(tc.toRemove...)
require.Equal(t, len(tc.expectedPostRemove), len(s.GetIDs(func(upkeepFilter) bool { return true })))
})`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/logprovider/filter_store_test.go: `s.AddActiveUpkeeps(tc.initial...)`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/logprovider/filter_store_test.go: `s.AddActiveUpkeeps(tc.toAdd...)`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/logprovider/filter_store_test.go: `sort.Slice(filters, func(i, j int) bool {
return filters[i].upkeepID.Cmp(filters[j].upkeepID) < 0
})`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/logprovider/filter_store_test.go: `s.RemoveActiveUpkeeps(tc.toRemove...)`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/logprovider/filter_store_test.go: `wg.Add(1)`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/logprovider/filter_store_test.go: `s.AddActiveUpkeeps(upkeepFilter{upkeepID: big.NewInt(1)})`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/logprovider/filter_store_test.go: `s.AddActiveUpkeeps(upkeepFilter{upkeepID: big.NewInt(2)})`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/logprovider/filter_store_test.go: `wg.Add(1)`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/logprovider/filter_store_test.go: `s.AddActiveUpkeeps(upkeepFilter{upkeepID: big.NewInt(2)})`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/logprovider/filter_store_test.go: `_ = s.GetIDs(nil)`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/logprovider/filter_store_test.go: `wg.Wait()`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/logprovider/filter_store_test.go: `.NewInt(1)`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/logprovider/filter_store_test.go: `.NewInt(1)`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/logprovider/filter_store_test.go: `.NewInt(1)`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/logprovider/filter_store_test.go: `.NewInt(1)`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/logprovider/filter_store_test.go: `.NewInt(2)`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/logprovider/filter_store_test.go: `.NewInt(1)`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/logprovider/filter_store_test.go: `.NewInt(2)`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/logprovider/filter_store_test.go: `.NewInt(1)`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/logprovider/filter_store_test.go: `.NewInt(2)`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/logprovider/filter_store_test.go: `.Run(tc.name, func(t *testing.T) {
s := NewUpkeepFilterStore()
s.AddActiveUpkeeps(tc.initial...)
require.Equal(t, len(tc.initial), len(s.GetIDs(nil)))
s.AddActiveUpkeeps(tc.toAdd...)
require.Equal(t, len(tc.expectedPostAdd), s.Size())
filters := s.GetFilters(func(f upkeepFilter) bool { return true })
require.Equal(t, len(tc.expectedPostAdd), len(filters))
if len(filters) > 0 {
sort.Slice(filters, func(i, j int) bool {
return filters[i].upkeepID.Cmp(filters[j].upkeepID) < 0
})
for i, f := range filters {
require.Equal(t, tc.expectedPostAdd[i].upkeepID, f.upkeepID)
}
}
s.RemoveActiveUpkeeps(tc.toRemove...)
require.Equal(t, len(tc.expectedPostRemove), len(s.GetIDs(func(upkeepFilter) bool { return true })))
})`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/logprovider/filter_store_test.go: `.AddActiveUpkeeps(tc.initial...)`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/logprovider/filter_store_test.go: `.AddActiveUpkeeps(tc.toAdd...)`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/logprovider/filter_store_test.go: `.GetFilters(func(f upkeepFilter) bool { return true })`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/logprovider/filter_store_test.go: `.Slice(filters, func(i, j int) bool {
return filters[i].upkeepID.Cmp(filters[j].upkeepID) < 0
})`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/logprovider/filter_store_test.go: `.upkeepID.Cmp(filters[j].upkeepID)`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/logprovider/filter_store_test.go: `.RemoveActiveUpkeeps(tc.toRemove...)`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/logprovider/filter_store_test.go: `.Add(1)`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/logprovider/filter_store_test.go: `.Done()`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/logprovider/filter_store_test.go: `.AddActiveUpkeeps(upkeepFilter{upkeepID: big.NewInt(1)})`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/logprovider/filter_store_test.go: `.NewInt(1)`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/logprovider/filter_store_test.go: `.AddActiveUpkeeps(upkeepFilter{upkeepID: big.NewInt(2)})`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/logprovider/filter_store_test.go: `.NewInt(2)`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/logprovider/filter_store_test.go: `.Add(1)`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/logprovider/filter_store_test.go: `.Done()`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/logprovider/filter_store_test.go: `.AddActiveUpkeeps(upkeepFilter{upkeepID: big.NewInt(2)})`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/logprovider/filter_store_test.go: `.NewInt(2)`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/logprovider/filter_store_test.go: `.GetIDs(nil)`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/logprovider/filter_store_test.go: `.Wait()`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/logprovider/filter_store_test.go: `.Size()`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/logprovider/filter_test.go: `t.Run(tc.name, func(t *testing.T) {
filteredLogs := tc.filter.Select(tc.logs...)
assert.Equal(t, tc.expectedLogs, filteredLogs)
})`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/logprovider/filter_test.go: `.BytesToHash(zeroBytes[:])`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/logprovider/filter_test.go: `.HexToAddress("0xB9F3af0c2CbfE108efd0E23F7b0a151Ea42f764E")`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/logprovider/filter_test.go: `.NewInt(123456)`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/logprovider/filter_test.go: `.Bytes()`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/logprovider/filter_test.go: `.MustDecode(topic10)`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/logprovider/filter_test.go: `.MustDecode(topic20)`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/logprovider/filter_test.go: `.MustDecode(topic30)`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/logprovider/filter_test.go: `.Bytes()`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/logprovider/filter_test.go: `.MustDecode(topic11)`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/logprovider/filter_test.go: `.MustDecode(topic21)`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/logprovider/filter_test.go: `.MustDecode(topic31)`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/logprovider/filter_test.go: `.Bytes()`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/logprovider/filter_test.go: `.MustDecode(topic11)`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/logprovider/filter_test.go: `.MustDecode(topic20)`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/logprovider/filter_test.go: `.MustDecode(topic31)`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/logprovider/filter_test.go: `.Bytes()`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/logprovider/filter_test.go: `.MustDecode(topic10)`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/logprovider/filter_test.go: `.MustDecode(topic21)`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/logprovider/filter_test.go: `.MustDecode(topic31)`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/logprovider/filter_test.go: `.Bytes()`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/logprovider/filter_test.go: `.MustDecode(topic10)`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/logprovider/filter_test.go: `.MustDecode(topic20)`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/logprovider/filter_test.go: `.MustDecode(topic30)`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/logprovider/filter_test.go: `.BytesToHash(contractAddress.Bytes())`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/logprovider/filter_test.go: `.Bytes()`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/logprovider/filter_test.go: `.BytesToHash(contractAddress.Bytes())`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/logprovider/filter_test.go: `.Bytes()`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/logprovider/filter_test.go: `.HexToHash(topic10)`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/logprovider/filter_test.go: `.BytesToHash(contractAddress.Bytes())`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/logprovider/filter_test.go: `.Bytes()`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/logprovider/filter_test.go: `.HexToHash(topic21)`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/logprovider/filter_test.go: `.BytesToHash(contractAddress.Bytes())`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/logprovider/filter_test.go: `.Bytes()`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/logprovider/filter_test.go: `.HexToHash(topic10)`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/logprovider/filter_test.go: `.HexToHash(topic21)`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/logprovider/filter_test.go: `.BytesToHash(contractAddress.Bytes())`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/logprovider/filter_test.go: `.Bytes()`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/logprovider/filter_test.go: `.HexToHash(topic31)`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/logprovider/filter_test.go: `.BytesToHash(contractAddress.Bytes())`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/logprovider/filter_test.go: `.Bytes()`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/logprovider/filter_test.go: `.HexToHash(topic11)`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/logprovider/filter_test.go: `.HexToHash(topic31)`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/logprovider/filter_test.go: `.BytesToHash(contractAddress.Bytes())`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/logprovider/filter_test.go: `.Bytes()`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/logprovider/filter_test.go: `.HexToHash(topic10)`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/logprovider/filter_test.go: `.HexToHash(topic20)`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/logprovider/filter_test.go: `.HexToHash(topic30)`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/logprovider/filter_test.go: `.Run(tc.name, func(t *testing.T) {
filteredLogs := tc.filter.Select(tc.logs...)
assert.Equal(t, tc.expectedLogs, filteredLogs)
})`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/logprovider/filter_test.go: `.filter.Select(tc.logs...)`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/logprovider/integration_test.go: `t.Run(tc.name, func(t *testing.T) {
ctx, cancel := context.WithCancel(testutils.Context(t))
defer cancel()
backend, stopMining, accounts := setupBackend(t)
defer stopMining()
carrol := accounts[2]
db := setupDB(t)
defer db.Close()
opts := logprovider.NewOptions(200, big.NewInt(1))
opts.ReadInterval = time.Second / 2
opts.BufferVersion = bufferVersion
opts.LogLimit = logLimit
lp, ethClient := setupDependencies(t, db, backend)
filterStore := logprovider.NewUpkeepFilterStore()
provider, _ := setup(logger.TestLogger(t), lp, nil, nil, filterStore, &opts)
logProvider := provider.(logprovider.LogEventProviderTest)
n := 10
backend.Commit()
lp.PollAndSaveLogs(ctx, 1) // Ensure log poller has a latest block
ids, addrs, contracts := deployUpkeepCounter(ctx, t, n, ethClient, backend, carrol, logProvider)
lp.PollAndSaveLogs(ctx, int64(n))
go func() {
if err := logProvider.Start(ctx); err != nil {
t.Logf("error starting log provider: %s", err)
t.Fail()
}
}()
defer logProvider.Close()
logsRounds := 10
poll := pollFn(ctx, t, lp, ethClient)
triggerEvents(ctx, t, backend, carrol, logsRounds, poll, contracts...)
poll(backend.Commit())
waitLogPoller(ctx, t, backend, lp, ethClient)
waitLogProvider(ctx, t, logProvider, 3)
allPayloads := collectPayloads(ctx, t, logProvider, n, logsRounds/2)
require.GreaterOrEqual(t, len(allPayloads), n,
"failed to get logs after restart")
t.Run("Restart", func(t *testing.T) {
t.Log("restarting log provider")
// assuming that our service was closed and restarted,
// we should be able to backfill old logs and fetch new ones
filterStore := logprovider.NewUpkeepFilterStore()
logProvider2 := logprovider.NewLogProvider(logger.TestLogger(t), lp, big.NewInt(1), logprovider.NewLogEventsPacker(), filterStore, opts)
poll(backend.Commit())
go func() {
if err2 := logProvider2.Start(ctx); err2 != nil {
t.Logf("error starting log provider: %s", err2)
t.Fail()
}
}()
defer logProvider2.Close()
// re-register filters
for i, id := range ids {
err := logProvider2.RegisterFilter(ctx, logprovider.FilterOptions{
UpkeepID: id,
TriggerConfig: newPlainLogTriggerConfig(addrs[i]),
// using block number at which the upkeep was registered,
// before we emitted any logs
UpdateBlock: uint64(n),
})
require.NoError(t, err)
}
waitLogProvider(ctx, t, logProvider2, 2)
t.Log("getting logs after restart")
logsAfterRestart := collectPayloads(ctx, t, logProvider2, n, 5)
require.GreaterOrEqual(t, len(logsAfterRestart), n,
"failed to get logs after restart")
})
})`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/logprovider/integration_test.go: `opts.ReadInterval = time.Second / 2`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/logprovider/integration_test.go: `opts.BufferVersion = bufferVersion`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/logprovider/integration_test.go: `opts.LogLimit = logLimit`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/logprovider/integration_test.go: `backend.Commit()`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/logprovider/integration_test.go: `lp.PollAndSaveLogs(ctx, 1)`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/logprovider/integration_test.go: `lp.PollAndSaveLogs(ctx, int64(n))`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/logprovider/integration_test.go: `triggerEvents(ctx, t, backend, carrol, logsRounds, poll, contracts...)`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/logprovider/integration_test.go: `poll(backend.Commit())`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/logprovider/integration_test.go: `waitLogPoller(ctx, t, backend, lp, ethClient)`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/logprovider/integration_test.go: `waitLogProvider(ctx, t, logProvider, 3)`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/logprovider/integration_test.go: `t.Run("Restart", func(t *testing.T) {
t.Log("restarting log provider")
// assuming that our service was closed and restarted,
// we should be able to backfill old logs and fetch new ones
filterStore := logprovider.NewUpkeepFilterStore()
logProvider2 := logprovider.NewLogProvider(logger.TestLogger(t), lp, big.NewInt(1), logprovider.NewLogEventsPacker(), filterStore, opts)
poll(backend.Commit())
go func() {
if err2 := logProvider2.Start(ctx); err2 != nil {
t.Logf("error starting log provider: %s", err2)
t.Fail()
}
}()
defer logProvider2.Close()
// re-register filters
for i, id := range ids {
err := logProvider2.RegisterFilter(ctx, logprovider.FilterOptions{
UpkeepID: id,
TriggerConfig: newPlainLogTriggerConfig(addrs[i]),
// using block number at which the upkeep was registered,
// before we emitted any logs
UpdateBlock: uint64(n),
})
require.NoError(t, err)
}
waitLogProvider(ctx, t, logProvider2, 2)
t.Log("getting logs after restart")
logsAfterRestart := collectPayloads(ctx, t, logProvider2, n, 5)
require.GreaterOrEqual(t, len(logsAfterRestart), n,
"failed to get logs after restart")
})`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/logprovider/integration_test.go: `poll(backend.Commit())`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/logprovider/integration_test.go: `waitLogProvider(ctx, t, logProvider2, 2)`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/logprovider/integration_test.go: `backend.Commit()`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/logprovider/integration_test.go: `lp.PollAndSaveLogs(ctx, 1)`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/logprovider/integration_test.go: `lp.PollAndSaveLogs(ctx, int64(5))`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/logprovider/integration_test.go: `t.Run("update filter config", func(t *testing.T) {
upkeepID := evmregistry21.GenUpkeepID(types.LogTrigger, "111")
id := upkeepID.BigInt()
cfg := newPlainLogTriggerConfig(addrs[0])
b, err := ethClient.BlockByHash(ctx, backend.Commit())
require.NoError(t, err)
bn := b.Number()
err = logProvider.RegisterFilter(ctx, logprovider.FilterOptions{
UpkeepID: id,
TriggerConfig: cfg,
UpdateBlock: bn.Uint64(),
})
require.NoError(t, err)
// old block
err = logProvider.RegisterFilter(ctx, logprovider.FilterOptions{
UpkeepID: id,
TriggerConfig: cfg,
UpdateBlock: bn.Uint64() - 1,
})
require.Error(t, err)
// new block
b, err = ethClient.BlockByHash(ctx, backend.Commit())
require.NoError(t, err)
bn = b.Number()
err = logProvider.RegisterFilter(ctx, logprovider.FilterOptions{
UpkeepID: id,
TriggerConfig: cfg,
UpdateBlock: bn.Uint64(),
})
require.NoError(t, err)
})`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/logprovider/integration_test.go: `err = logProvider.RegisterFilter(ctx, logprovider.FilterOptions{
UpkeepID: id,
TriggerConfig: cfg,
UpdateBlock: bn.Uint64(),
})`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/logprovider/integration_test.go: `err = logProvider.RegisterFilter(ctx, logprovider.FilterOptions{
UpkeepID: id,
TriggerConfig: cfg,
UpdateBlock: bn.Uint64() - 1,
})`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/logprovider/integration_test.go: `b, err = ethClient.BlockByHash(ctx, backend.Commit())`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/logprovider/integration_test.go: `bn = b.Number()`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/logprovider/integration_test.go: `err = logProvider.RegisterFilter(ctx, logprovider.FilterOptions{
UpkeepID: id,
TriggerConfig: cfg,
UpdateBlock: bn.Uint64(),
})`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/logprovider/integration_test.go: `err = logProvider.RegisterFilter(ctx, logprovider.FilterOptions{
UpkeepID: id,
TriggerConfig: cfg,
UpdateBlock: bn.Uint64(),
})`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/logprovider/integration_test.go: `t.Run(tc.name, func(t *testing.T) {
ctx, cancel := context.WithTimeout(testutils.Context(t), time.Second*60)
defer cancel()
backend, stopMining, accounts := setupBackend(t)
defer stopMining()
carrol := accounts[2]
db := setupDB(t)
defer db.Close()
opts := logprovider.NewOptions(200, big.NewInt(1))
opts.ReadInterval = time.Second / 4
opts.BufferVersion = bufferVersion
opts.LogLimit = limitLow
lp, ethClient := setupDependencies(t, db, backend)
filterStore := logprovider.NewUpkeepFilterStore()
provider, _ := setup(logger.TestLogger(t), lp, nil, nil, filterStore, &opts)
logProvider := provider.(logprovider.LogEventProviderTest)
n := 10
backend.Commit()
lp.PollAndSaveLogs(ctx, 1) // Ensure log poller has a latest block
_, _, contracts := deployUpkeepCounter(ctx, t, n, ethClient, backend, carrol, logProvider)
poll := pollFn(ctx, t, lp, ethClient)
rounds := 8
for i := 0; i < rounds; i++ {
poll(backend.Commit())
triggerEvents(ctx, t, backend, carrol, n, poll, contracts...)
poll(backend.Commit())
}
waitLogPoller(ctx, t, backend, lp, ethClient)
// starting the log provider should backfill logs
go func() {
if startErr := logProvider.Start(ctx); startErr != nil {
t.Logf("error starting log provider: %s", startErr)
t.Fail()
}
}()
defer logProvider.Close()
waitLogProvider(ctx, t, logProvider, 3)
allPayloads := collectPayloads(ctx, t, logProvider, n*rounds, 5)
require.GreaterOrEqual(t, len(allPayloads), len(contracts), "failed to backfill logs")
})`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/logprovider/integration_test.go: `opts.ReadInterval = time.Second / 4`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/logprovider/integration_test.go: `opts.BufferVersion = bufferVersion`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/logprovider/integration_test.go: `opts.LogLimit = limitLow`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/logprovider/integration_test.go: `backend.Commit()`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/logprovider/integration_test.go: `lp.PollAndSaveLogs(ctx, 1)`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/logprovider/integration_test.go: `poll(backend.Commit())`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/logprovider/integration_test.go: `triggerEvents(ctx, t, backend, carrol, n, poll, contracts...)`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/logprovider/integration_test.go: `poll(backend.Commit())`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/logprovider/integration_test.go: `waitLogPoller(ctx, t, backend, lp, ethClient)`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/logprovider/integration_test.go: `waitLogProvider(ctx, t, logProvider, 3)`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/logprovider/integration_test.go: `logprovider.RecoveryInterval = time.Millisecond * 200`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/logprovider/integration_test.go: `logprovider.RecoveryInterval = origDefaultRecoveryInterval`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/logprovider/integration_test.go: `backend.Commit()`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/logprovider/integration_test.go: `lp.PollAndSaveLogs(ctx, 1)`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/logprovider/integration_test.go: `triggerEvents(ctx, t, backend, carrol, n, poll, contracts...)`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/logprovider/integration_test.go: `poll(backend.Commit())`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/logprovider/integration_test.go: `poll(backend.Commit())`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/logprovider/integration_test.go: `waitLogPoller(ctx, t, backend, lp, ethClient)`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/logprovider/integration_test.go: `blockNumber = bn.Int64()`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/logprovider/integration_test.go: `poll(backend.Commit())`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/logprovider/integration_test.go: `allProposals = append(allProposals, proposals...)`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/logprovider/integration_test.go: `.Run(tc.name, func(t *testing.T) {
ctx, cancel := context.WithCancel(testutils.Context(t))
defer cancel()
backend, stopMining, accounts := setupBackend(t)
defer stopMining()
carrol := accounts[2]
db := setupDB(t)
defer db.Close()
opts := logprovider.NewOptions(200, big.NewInt(1))
opts.ReadInterval = time.Second / 2
opts.BufferVersion = bufferVersion
opts.LogLimit = logLimit
lp, ethClient := setupDependencies(t, db, backend)
filterStore := logprovider.NewUpkeepFilterStore()
provider, _ := setup(logger.TestLogger(t), lp, nil, nil, filterStore, &opts)
logProvider := provider.(logprovider.LogEventProviderTest)
n := 10
backend.Commit()
lp.PollAndSaveLogs(ctx, 1) // Ensure log poller has a latest block
ids, addrs, contracts := deployUpkeepCounter(ctx, t, n, ethClient, backend, carrol, logProvider)
lp.PollAndSaveLogs(ctx, int64(n))
go func() {
if err := logProvider.Start(ctx); err != nil {
t.Logf("error starting log provider: %s", err)
t.Fail()
}
}()
defer logProvider.Close()
logsRounds := 10
poll := pollFn(ctx, t, lp, ethClient)
triggerEvents(ctx, t, backend, carrol, logsRounds, poll, contracts...)
poll(backend.Commit())
waitLogPoller(ctx, t, backend, lp, ethClient)
waitLogProvider(ctx, t, logProvider, 3)
allPayloads := collectPayloads(ctx, t, logProvider, n, logsRounds/2)
require.GreaterOrEqual(t, len(allPayloads), n,
"failed to get logs after restart")
t.Run("Restart", func(t *testing.T) {
t.Log("restarting log provider")
// assuming that our service was closed and restarted,
// we should be able to backfill old logs and fetch new ones
filterStore := logprovider.NewUpkeepFilterStore()
logProvider2 := logprovider.NewLogProvider(logger.TestLogger(t), lp, big.NewInt(1), logprovider.NewLogEventsPacker(), filterStore, opts)
poll(backend.Commit())
go func() {
if err2 := logProvider2.Start(ctx); err2 != nil {
t.Logf("error starting log provider: %s", err2)
t.Fail()
}
}()
defer logProvider2.Close()
// re-register filters
for i, id := range ids {
err := logProvider2.RegisterFilter(ctx, logprovider.FilterOptions{
UpkeepID: id,
TriggerConfig: newPlainLogTriggerConfig(addrs[i]),
// using block number at which the upkeep was registered,
// before we emitted any logs
UpdateBlock: uint64(n),
})
require.NoError(t, err)
}
waitLogProvider(ctx, t, logProvider2, 2)
t.Log("getting logs after restart")
logsAfterRestart := collectPayloads(ctx, t, logProvider2, n, 5)
require.GreaterOrEqual(t, len(logsAfterRestart), n,
"failed to get logs after restart")
})
})`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/logprovider/integration_test.go: `.WithCancel(testutils.Context(t))`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/logprovider/integration_test.go: `.Context(t)`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/logprovider/integration_test.go: `.NewOptions(200, big.NewInt(1))`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/logprovider/integration_test.go: `.NewInt(1)`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/logprovider/integration_test.go: `.NewUpkeepFilterStore()`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/logprovider/integration_test.go: `.TestLogger(t)`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/logprovider/integration_test.go: `.Commit()`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/logprovider/integration_test.go: `.PollAndSaveLogs(ctx, 1)`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/logprovider/integration_test.go: `.PollAndSaveLogs(ctx, int64(n))`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/logprovider/integration_test.go: `.Start(ctx)`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/logprovider/integration_test.go: `.Commit()`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/logprovider/integration_test.go: `.Run("Restart", func(t *testing.T) {
t.Log("restarting log provider")
// assuming that our service was closed and restarted,
// we should be able to backfill old logs and fetch new ones
filterStore := logprovider.NewUpkeepFilterStore()
logProvider2 := logprovider.NewLogProvider(logger.TestLogger(t), lp, big.NewInt(1), logprovider.NewLogEventsPacker(), filterStore, opts)
poll(backend.Commit())
go func() {
if err2 := logProvider2.Start(ctx); err2 != nil {
t.Logf("error starting log provider: %s", err2)
t.Fail()
}
}()
defer logProvider2.Close()
// re-register filters
for i, id := range ids {
err := logProvider2.RegisterFilter(ctx, logprovider.FilterOptions{
UpkeepID: id,
TriggerConfig: newPlainLogTriggerConfig(addrs[i]),
// using block number at which the upkeep was registered,
// before we emitted any logs
UpdateBlock: uint64(n),
})
require.NoError(t, err)
}
waitLogProvider(ctx, t, logProvider2, 2)
t.Log("getting logs after restart")
logsAfterRestart := collectPayloads(ctx, t, logProvider2, n, 5)
require.GreaterOrEqual(t, len(logsAfterRestart), n,
"failed to get logs after restart")
})`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/logprovider/integration_test.go: `.NewUpkeepFilterStore()`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/logprovider/integration_test.go: `.NewLogProvider(logger.TestLogger(t), lp, big.NewInt(1), logprovider.NewLogEventsPacker(), filterStore, opts)`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/logprovider/integration_test.go: `.TestLogger(t)`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/logprovider/integration_test.go: `.NewInt(1)`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/logprovider/integration_test.go: `.NewLogEventsPacker()`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/logprovider/integration_test.go: `.Commit()`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/logprovider/integration_test.go: `.Start(ctx)`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/logprovider/integration_test.go: `.RegisterFilter(ctx, logprovider.FilterOptions{
UpkeepID: id,
TriggerConfig: newPlainLogTriggerConfig(addrs[i]),
// using block number at which the upkeep was registered,
// before we emitted any logs
UpdateBlock: uint64(n),
})`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/logprovider/integration_test.go: `.WithCancel(testutils.Context(t))`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/logprovider/integration_test.go: `.Context(t)`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/logprovider/integration_test.go: `.NewUpkeepFilterStore()`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/logprovider/integration_test.go: `.TestLogger(t)`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/logprovider/integration_test.go: `.Commit()`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/logprovider/integration_test.go: `.PollAndSaveLogs(ctx, 1)`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/logprovider/integration_test.go: `.PollAndSaveLogs(ctx, int64(5))`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/logprovider/integration_test.go: `.Run("update filter config", func(t *testing.T) {
upkeepID := evmregistry21.GenUpkeepID(types.LogTrigger, "111")
id := upkeepID.BigInt()
cfg := newPlainLogTriggerConfig(addrs[0])
b, err := ethClient.BlockByHash(ctx, backend.Commit())
require.NoError(t, err)
bn := b.Number()
err = logProvider.RegisterFilter(ctx, logprovider.FilterOptions{
UpkeepID: id,
TriggerConfig: cfg,
UpdateBlock: bn.Uint64(),
})
require.NoError(t, err)
// old block
err = logProvider.RegisterFilter(ctx, logprovider.FilterOptions{
UpkeepID: id,
TriggerConfig: cfg,
UpdateBlock: bn.Uint64() - 1,
})
require.Error(t, err)
// new block
b, err = ethClient.BlockByHash(ctx, backend.Commit())
require.NoError(t, err)
bn = b.Number()
err = logProvider.RegisterFilter(ctx, logprovider.FilterOptions{
UpkeepID: id,
TriggerConfig: cfg,
UpdateBlock: bn.Uint64(),
})
require.NoError(t, err)
})`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/logprovider/integration_test.go: `.GenUpkeepID(types.LogTrigger, "111")`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/logprovider/integration_test.go: `.BigInt()`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/logprovider/integration_test.go: `.BlockByHash(ctx, backend.Commit())`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/logprovider/integration_test.go: `.Commit()`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/logprovider/integration_test.go: `.Number()`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/logprovider/integration_test.go: `.RegisterFilter(ctx, logprovider.FilterOptions{
UpkeepID: id,
TriggerConfig: cfg,
UpdateBlock: bn.Uint64(),
})`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/logprovider/integration_test.go: `.Uint64()`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/logprovider/integration_test.go: `.RegisterFilter(ctx, logprovider.FilterOptions{
UpkeepID: id,
TriggerConfig: cfg,
UpdateBlock: bn.Uint64() - 1,
})`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/logprovider/integration_test.go: `.Uint64()`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/logprovider/integration_test.go: `.BlockByHash(ctx, backend.Commit())`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/logprovider/integration_test.go: `.Commit()`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/logprovider/integration_test.go: `.Number()`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/logprovider/integration_test.go: `.RegisterFilter(ctx, logprovider.FilterOptions{
UpkeepID: id,
TriggerConfig: cfg,
UpdateBlock: bn.Uint64(),
})`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/logprovider/integration_test.go: `.Uint64()`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/logprovider/integration_test.go: `.GenUpkeepID(types.LogTrigger, "222")`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/logprovider/integration_test.go: `.BigInt()`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/logprovider/integration_test.go: `.BlockByHash(ctx, backend.Commit())`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/logprovider/integration_test.go: `.Commit()`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/logprovider/integration_test.go: `.Number()`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/logprovider/integration_test.go: `.RegisterFilter(ctx, logprovider.FilterOptions{
UpkeepID: id,
TriggerConfig: cfg,
UpdateBlock: bn.Uint64(),
})`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/logprovider/integration_test.go: `.Uint64()`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/logprovider/integration_test.go: `.Run(tc.name, func(t *testing.T) {
ctx, cancel := context.WithTimeout(testutils.Context(t), time.Second*60)
defer cancel()
backend, stopMining, accounts := setupBackend(t)
defer stopMining()
carrol := accounts[2]
db := setupDB(t)
defer db.Close()
opts := logprovider.NewOptions(200, big.NewInt(1))
opts.ReadInterval = time.Second / 4
opts.BufferVersion = bufferVersion
opts.LogLimit = limitLow
lp, ethClient := setupDependencies(t, db, backend)
filterStore := logprovider.NewUpkeepFilterStore()
provider, _ := setup(logger.TestLogger(t), lp, nil, nil, filterStore, &opts)
logProvider := provider.(logprovider.LogEventProviderTest)
n := 10
backend.Commit()
lp.PollAndSaveLogs(ctx, 1) // Ensure log poller has a latest block
_, _, contracts := deployUpkeepCounter(ctx, t, n, ethClient, backend, carrol, logProvider)
poll := pollFn(ctx, t, lp, ethClient)
rounds := 8
for i := 0; i < rounds; i++ {
poll(backend.Commit())
triggerEvents(ctx, t, backend, carrol, n, poll, contracts...)
poll(backend.Commit())
}
waitLogPoller(ctx, t, backend, lp, ethClient)
// starting the log provider should backfill logs
go func() {
if startErr := logProvider.Start(ctx); startErr != nil {
t.Logf("error starting log provider: %s", startErr)
t.Fail()
}
}()
defer logProvider.Close()
waitLogProvider(ctx, t, logProvider, 3)
allPayloads := collectPayloads(ctx, t, logProvider, n*rounds, 5)
require.GreaterOrEqual(t, len(allPayloads), len(contracts), "failed to backfill logs")
})`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/logprovider/integration_test.go: `.WithTimeout(testutils.Context(t), time.Second*60)`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/logprovider/integration_test.go: `.Context(t)`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/logprovider/integration_test.go: `.NewOptions(200, big.NewInt(1))`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/logprovider/integration_test.go: `.NewInt(1)`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/logprovider/integration_test.go: `.NewUpkeepFilterStore()`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/logprovider/integration_test.go: `.TestLogger(t)`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/logprovider/integration_test.go: `.Commit()`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/logprovider/integration_test.go: `.PollAndSaveLogs(ctx, 1)`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/logprovider/integration_test.go: `.Commit()`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/logprovider/integration_test.go: `.Commit()`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/logprovider/integration_test.go: `.Start(ctx)`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/logprovider/integration_test.go: `.Context(t)`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/logprovider/integration_test.go: `.NewUpkeepFilterStore()`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/logprovider/integration_test.go: `.TestLogger(t)`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/logprovider/integration_test.go: `.Commit()`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/logprovider/integration_test.go: `.PollAndSaveLogs(ctx, 1)`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/logprovider/integration_test.go: `.Commit()`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/logprovider/integration_test.go: `.Commit()`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/logprovider/integration_test.go: `.BlockByHash(ctx, backend.Commit())`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/logprovider/integration_test.go: `.Commit()`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/logprovider/integration_test.go: `.Number()`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/logprovider/integration_test.go: `.Int64()`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/logprovider/integration_test.go: `.Start(ctx)`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/logprovider/integration_test.go: `.Commit()`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/logprovider/integration_test.go: `.GetRecoveryProposals(ctx)`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/logprovider/integration_test.go: `.Done()`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/logprovider/integration_test.go: `.After(100 * time.Millisecond)`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/logprovider/log_test.go: `t.Run(tc.name, func(t *testing.T) {
require.Equal(t, tc.wantCmp, LogComparator(tc.a, tc.b))
require.Equal(t, tc.wantSort, LogSorter(tc.a, tc.b))
})`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/logprovider/log_test.go: `.HexToHash("0x1")`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/logprovider/log_test.go: `.HexToHash("0x1")`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/logprovider/log_test.go: `.HexToHash("0x1")`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/logprovider/log_test.go: `.HexToHash("0x1")`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/logprovider/log_test.go: `.HexToHash("0x1")`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/logprovider/log_test.go: `.HexToHash("0x1")`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/logprovider/log_test.go: `.HexToHash("0x1")`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/logprovider/log_test.go: `.HexToHash("0x1")`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/logprovider/log_test.go: `.HexToHash("0x1")`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/logprovider/log_test.go: `.HexToHash("0x1")`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/logprovider/log_test.go: `.HexToHash("0x21")`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/logprovider/log_test.go: `.HexToHash("0x1")`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/logprovider/log_test.go: `.HexToHash("0x1")`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/logprovider/log_test.go: `.HexToHash("0x4")`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/logprovider/log_test.go: `.Run(tc.name, func(t *testing.T) {
require.Equal(t, tc.wantCmp, LogComparator(tc.a, tc.b))
require.Equal(t, tc.wantSort, LogSorter(tc.a, tc.b))
})`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/logprovider/provider_life_cycle_test.go: `t.Run(tc.name, func(t *testing.T) {
ctx := testutils.Context(t)
if tc.mockPoller {
lp := new(mocks.LogPoller)
lp.On("RegisterFilter", mock.Anything, mock.Anything).Return(nil)
lp.On("UnregisterFilter", mock.Anything, mock.Anything).Return(nil)
lp.On("LatestBlock", mock.Anything).Return(logpoller.LogPollerBlock{}, nil)
hasFitlerTimes := 1
if tc.unregister {
hasFitlerTimes = 2
}
lp.On("HasFilter", p.filterName(tc.upkeepID)).Return(tc.hasFilter).Times(hasFitlerTimes)
if tc.replyed {
lp.On("ReplayAsync", mock.Anything).Return(nil).Times(1)
} else {
lp.On("ReplayAsync", mock.Anything).Return(nil).Times(0)
}
p.lock.Lock()
p.poller = lp
p.lock.Unlock()
}
err := p.RegisterFilter(ctx, FilterOptions{
UpkeepID: tc.upkeepID,
TriggerConfig: tc.upkeepCfg,
UpdateBlock: tc.cfgUpdateBlock,
})
if tc.errored {
require.Error(t, err)
} else {
require.NoError(t, err)
if tc.unregister {
require.NoError(t, p.UnregisterFilter(ctx, tc.upkeepID))
}
}
})`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/logprovider/provider_life_cycle_test.go: `lp.On("RegisterFilter", mock.Anything, mock.Anything).Return(nil)`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/logprovider/provider_life_cycle_test.go: `lp.On("UnregisterFilter", mock.Anything, mock.Anything).Return(nil)`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/logprovider/provider_life_cycle_test.go: `lp.On("LatestBlock", mock.Anything).Return(logpoller.LogPollerBlock{}, nil)`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/logprovider/provider_life_cycle_test.go: `hasFitlerTimes = 2`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/logprovider/provider_life_cycle_test.go: `lp.On("HasFilter", p.filterName(tc.upkeepID)).Return(tc.hasFilter).Times(hasFitlerTimes)`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/logprovider/provider_life_cycle_test.go: `lp.On("ReplayAsync", mock.Anything).Return(nil).Times(1)`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/logprovider/provider_life_cycle_test.go: `lp.On("ReplayAsync", mock.Anything).Return(nil).Times(0)`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/logprovider/provider_life_cycle_test.go: `p.lock.Lock()`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/logprovider/provider_life_cycle_test.go: `p.poller = lp`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/logprovider/provider_life_cycle_test.go: `p.lock.Unlock()`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/logprovider/provider_life_cycle_test.go: `mp.On("RegisterFilter", mock.Anything, mock.Anything).Return(nil)`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/logprovider/provider_life_cycle_test.go: `mp.On("UnregisterFilter", mock.Anything, mock.Anything).Return(nil)`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/logprovider/provider_life_cycle_test.go: `mp.On("HasFilter", mock.Anything).Return(false)`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/logprovider/provider_life_cycle_test.go: `mp.On("LatestBlock", mock.Anything).Return(logpoller.LogPollerBlock{}, nil)`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/logprovider/provider_life_cycle_test.go: `mp.On("ReplayAsync", mock.Anything).Return(nil)`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/logprovider/provider_life_cycle_test.go: `mp.On("HasFilter", p.filterName(core.GenUpkeepID(types.LogTrigger, "2222").BigInt())).Return(true)`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/logprovider/provider_life_cycle_test.go: `newIds, err = p.RefreshActiveUpkeeps(
ctx,
core.GenUpkeepID(types.LogTrigger, "2222").BigInt(),
core.GenUpkeepID(types.LogTrigger, "1234").BigInt(),
core.GenUpkeepID(types.LogTrigger, "123").BigInt())`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/logprovider/provider_life_cycle_test.go: `t.Run(tc.name, func(t *testing.T) {
err := p.validateLogTriggerConfig(tc.cfg)
assert.Equal(t, tc.expectedErr, err)
})`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/logprovider/provider_life_cycle_test.go: `.NewInt(111)`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/logprovider/provider_life_cycle_test.go: `.BytesToAddress(common.LeftPadBytes([]byte{1, 2, 3, 4}, 20))`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/logprovider/provider_life_cycle_test.go: `.LeftPadBytes([]byte{1, 2, 3, 4}, 20)`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/logprovider/provider_life_cycle_test.go: `.BytesToHash(common.LeftPadBytes([]byte{1, 2, 3, 4}, 32))`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/logprovider/provider_life_cycle_test.go: `.LeftPadBytes([]byte{1, 2, 3, 4}, 32)`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/logprovider/provider_life_cycle_test.go: `.NewInt(111)`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/logprovider/provider_life_cycle_test.go: `.NewInt(111)`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/logprovider/provider_life_cycle_test.go: `.BytesToAddress(common.LeftPadBytes([]byte{}, 20))`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/logprovider/provider_life_cycle_test.go: `.LeftPadBytes([]byte{}, 20)`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/logprovider/provider_life_cycle_test.go: `.BytesToHash(common.LeftPadBytes([]byte{}, 32))`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/logprovider/provider_life_cycle_test.go: `.LeftPadBytes([]byte{}, 32)`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/logprovider/provider_life_cycle_test.go: `.NewInt(111)`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/logprovider/provider_life_cycle_test.go: `.BytesToAddress(common.LeftPadBytes([]byte{1, 2, 3, 4}, 20))`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/logprovider/provider_life_cycle_test.go: `.LeftPadBytes([]byte{1, 2, 3, 4}, 20)`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/logprovider/provider_life_cycle_test.go: `.BytesToHash(common.LeftPadBytes([]byte{1, 2, 3, 4}, 32))`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/logprovider/provider_life_cycle_test.go: `.LeftPadBytes([]byte{1, 2, 3, 4}, 32)`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/logprovider/provider_life_cycle_test.go: `.NewInt(111)`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/logprovider/provider_life_cycle_test.go: `.BytesToAddress(common.LeftPadBytes([]byte{1, 2, 3, 4}, 20))`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/logprovider/provider_life_cycle_test.go: `.LeftPadBytes([]byte{1, 2, 3, 4}, 20)`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/logprovider/provider_life_cycle_test.go: `.BytesToHash(common.LeftPadBytes([]byte{1, 2, 3, 4}, 32))`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/logprovider/provider_life_cycle_test.go: `.LeftPadBytes([]byte{1, 2, 3, 4}, 32)`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/logprovider/provider_life_cycle_test.go: `.TestLogger(t)`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/logprovider/provider_life_cycle_test.go: `.NewInt(1)`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/logprovider/provider_life_cycle_test.go: `.NewInt(1)`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/logprovider/provider_life_cycle_test.go: `.Run(tc.name, func(t *testing.T) {
ctx := testutils.Context(t)
if tc.mockPoller {
lp := new(mocks.LogPoller)
lp.On("RegisterFilter", mock.Anything, mock.Anything).Return(nil)
lp.On("UnregisterFilter", mock.Anything, mock.Anything).Return(nil)
lp.On("LatestBlock", mock.Anything).Return(logpoller.LogPollerBlock{}, nil)
hasFitlerTimes := 1
if tc.unregister {
hasFitlerTimes = 2
}
lp.On("HasFilter", p.filterName(tc.upkeepID)).Return(tc.hasFilter).Times(hasFitlerTimes)
if tc.replyed {
lp.On("ReplayAsync", mock.Anything).Return(nil).Times(1)
} else {
lp.On("ReplayAsync", mock.Anything).Return(nil).Times(0)
}
p.lock.Lock()
p.poller = lp
p.lock.Unlock()
}
err := p.RegisterFilter(ctx, FilterOptions{
UpkeepID: tc.upkeepID,
TriggerConfig: tc.upkeepCfg,
UpdateBlock: tc.cfgUpdateBlock,
})
if tc.errored {
require.Error(t, err)
} else {
require.NoError(t, err)
if tc.unregister {
require.NoError(t, p.UnregisterFilter(ctx, tc.upkeepID))
}
}
})`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/logprovider/provider_life_cycle_test.go: `.Context(t)`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/logprovider/provider_life_cycle_test.go: `.On("RegisterFilter", mock.Anything, mock.Anything)`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/logprovider/provider_life_cycle_test.go: `.Return(nil)`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/logprovider/provider_life_cycle_test.go: `.On("UnregisterFilter", mock.Anything, mock.Anything)`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/logprovider/provider_life_cycle_test.go: `.Return(nil)`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/logprovider/provider_life_cycle_test.go: `.On("LatestBlock", mock.Anything)`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/logprovider/provider_life_cycle_test.go: `.Return(logpoller.LogPollerBlock{}, nil)`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/logprovider/provider_life_cycle_test.go: `.On("HasFilter", p.filterName(tc.upkeepID))`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/logprovider/provider_life_cycle_test.go: `.filterName(tc.upkeepID)`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/logprovider/provider_life_cycle_test.go: `.Return(tc.hasFilter)`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/logprovider/provider_life_cycle_test.go: `.Times(hasFitlerTimes)`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/logprovider/provider_life_cycle_test.go: `.On("ReplayAsync", mock.Anything)`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/logprovider/provider_life_cycle_test.go: `.Return(nil)`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/logprovider/provider_life_cycle_test.go: `.Times(1)`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/logprovider/provider_life_cycle_test.go: `.On("ReplayAsync", mock.Anything)`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/logprovider/provider_life_cycle_test.go: `.Return(nil)`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/logprovider/provider_life_cycle_test.go: `.Times(0)`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/logprovider/provider_life_cycle_test.go: `.lock.Lock()`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/logprovider/provider_life_cycle_test.go: `.lock.Unlock()`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/logprovider/provider_life_cycle_test.go: `.RegisterFilter(ctx, FilterOptions{
UpkeepID: tc.upkeepID,
TriggerConfig: tc.upkeepCfg,
UpdateBlock: tc.cfgUpdateBlock,
})`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/logprovider/provider_life_cycle_test.go: `.Context(t)`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/logprovider/provider_life_cycle_test.go: `.On("RegisterFilter", mock.Anything, mock.Anything)`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/logprovider/provider_life_cycle_test.go: `.Return(nil)`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/logprovider/provider_life_cycle_test.go: `.On("UnregisterFilter", mock.Anything, mock.Anything)`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/logprovider/provider_life_cycle_test.go: `.Return(nil)`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/logprovider/provider_life_cycle_test.go: `.On("HasFilter", mock.Anything)`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/logprovider/provider_life_cycle_test.go: `.Return(false)`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/logprovider/provider_life_cycle_test.go: `.On("LatestBlock", mock.Anything)`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/logprovider/provider_life_cycle_test.go: `.Return(logpoller.LogPollerBlock{}, nil)`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/logprovider/provider_life_cycle_test.go: `.On("ReplayAsync", mock.Anything)`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/logprovider/provider_life_cycle_test.go: `.Return(nil)`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/logprovider/provider_life_cycle_test.go: `.TestLogger(t)`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/logprovider/provider_life_cycle_test.go: `.NewInt(1)`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/logprovider/provider_life_cycle_test.go: `.NewInt(1)`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/logprovider/provider_life_cycle_test.go: `.RefreshActiveUpkeeps(ctx)`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/logprovider/provider_life_cycle_test.go: `.On("HasFilter", p.filterName(core.GenUpkeepID(types.LogTrigger, "2222").BigInt()))`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/logprovider/provider_life_cycle_test.go: `.filterName(core.GenUpkeepID(types.LogTrigger, "2222").BigInt())`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/logprovider/provider_life_cycle_test.go: `.GenUpkeepID(types.LogTrigger, "2222")`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/logprovider/provider_life_cycle_test.go: `.BigInt()`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/logprovider/provider_life_cycle_test.go: `.Return(true)`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/logprovider/provider_life_cycle_test.go: `.RefreshActiveUpkeeps(
ctx,
core.GenUpkeepID(types.LogTrigger, "2222").BigInt(),
core.GenUpkeepID(types.LogTrigger, "1234").BigInt(),
core.GenUpkeepID(types.LogTrigger, "123").BigInt())`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/logprovider/provider_life_cycle_test.go: `.GenUpkeepID(types.LogTrigger, "2222")`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/logprovider/provider_life_cycle_test.go: `.BigInt()`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/logprovider/provider_life_cycle_test.go: `.GenUpkeepID(types.LogTrigger, "1234")`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/logprovider/provider_life_cycle_test.go: `.BigInt()`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/logprovider/provider_life_cycle_test.go: `.GenUpkeepID(types.LogTrigger, "123")`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/logprovider/provider_life_cycle_test.go: `.BigInt()`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/logprovider/provider_life_cycle_test.go: `.filterStore.Size()`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/logprovider/provider_life_cycle_test.go: `.HexToAddress("0xB9F3af0c2CbfE108efd0E23F7b0a151Ea42f764E")`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/logprovider/provider_life_cycle_test.go: `.HexToHash("0x3bdab8bffae631cfee411525ebae27f3fb61b10c662c09ec2a7dbb5854c87e8c")`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/logprovider/provider_life_cycle_test.go: `.TestLogger(t)`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/logprovider/provider_life_cycle_test.go: `.NewInt(1)`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/logprovider/provider_life_cycle_test.go: `.NewInt(1)`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/logprovider/provider_life_cycle_test.go: `.Run(tc.name, func(t *testing.T) {
err := p.validateLogTriggerConfig(tc.cfg)
assert.Equal(t, tc.expectedErr, err)
})`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/logprovider/provider_life_cycle_test.go: `.validateLogTriggerConfig(tc.cfg)`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/logprovider/provider_test.go: `p.filterStore.AddActiveUpkeeps(f)`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/logprovider/provider_test.go: `t.Run("no filters", func(t *testing.T) {
filters := p.getFilters(0, big.NewInt(0))
require.Len(t, filters, 1)
require.Equal(t, len(filters[0].addr), 0)
})`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/logprovider/provider_test.go: `t.Run("has filter with lower lastPollBlock", func(t *testing.T) {
filters := p.getFilters(0, f.upkeepID)
require.Len(t, filters, 1)
require.Greater(t, len(filters[0].addr), 0)
filters = p.getFilters(10, f.upkeepID)
require.Len(t, filters, 1)
require.Greater(t, len(filters[0].addr), 0)
})`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/logprovider/provider_test.go: `filters = p.getFilters(10, f.upkeepID)`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/logprovider/provider_test.go: `t.Run("has filter with higher lastPollBlock", func(t *testing.T) {
_, f := newEntry(p, 2)
f.lastPollBlock = 3
p.filterStore.AddActiveUpkeeps(f)
filters := p.getFilters(1, f.upkeepID)
require.Len(t, filters, 1)
require.Equal(t, len(filters[0].addr), 0)
})`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/logprovider/provider_test.go: `f.lastPollBlock = 3`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/logprovider/provider_test.go: `p.filterStore.AddActiveUpkeeps(f)`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/logprovider/provider_test.go: `f.configUpdateBlock = 3`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/logprovider/provider_test.go: `p.filterStore.AddActiveUpkeeps(f)`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/logprovider/provider_test.go: `p.filterStore.AddActiveUpkeeps(f)`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/logprovider/provider_test.go: `t.Run("no entries", func(t *testing.T) {
_, f := newEntry(p, n*2)
f.lastPollBlock = 10
p.updateFiltersLastPoll([]upkeepFilter{f})
filters := p.filterStore.GetFilters(nil)
for _, f := range filters {
require.Equal(t, int64(0), f.lastPollBlock)
}
})`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/logprovider/provider_test.go: `f.lastPollBlock = 10`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/logprovider/provider_test.go: `p.updateFiltersLastPoll([]upkeepFilter{f})`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/logprovider/provider_test.go: `f2.lastPollBlock = 10`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/logprovider/provider_test.go: `f1.lastPollBlock = 10`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/logprovider/provider_test.go: `p.updateFiltersLastPoll([]upkeepFilter{f1, f2})`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/logprovider/provider_test.go: `p.filterStore.RangeFiltersByIDs(func(_ int, f upkeepFilter) {
require.Equal(t, int64(10), f.lastPollBlock)
}, f1.upkeepID, f2.upkeepID)`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/logprovider/provider_test.go: `p.updateFiltersLastPoll([]upkeepFilter{f1})`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/logprovider/provider_test.go: `p.filterStore.RangeFiltersByIDs(func(_ int, f upkeepFilter) {
require.Equal(t, int64(0), f.lastPollBlock)
}, f.upkeepID)`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/logprovider/provider_test.go: `t.Run(tc.name, func(t *testing.T) {
ctx := testutils.Context(t)
readInterval := 10 * time.Millisecond
opts := NewOptions(200, big.NewInt(1))
opts.ReadInterval = readInterval
p := NewLogProvider(logger.TestLogger(t), mp, big.NewInt(1), &mockedPacker{}, NewUpkeepFilterStore(), opts)
var ids []*big.Int
for i, id := range tc.ids {
_, f := newEntry(p, id, tc.addrs[i])
p.filterStore.AddActiveUpkeeps(f)
ids = append(ids, f.upkeepID)
}
reads := make(chan []*big.Int, 100)
go func(ctx context.Context) {
p.scheduleReadJobs(ctx, func(ids []*big.Int) {
select {
case reads <- ids:
default:
t.Log("dropped ids")
}
})
}(ctx)
batches := (len(tc.ids) / tc.maxBatchSize) + 1
timeoutTicker := time.NewTicker(readInterval * time.Duration(batches*10))
defer timeoutTicker.Stop()
got := map[string]int{}
readLoop:
for {
select {
case <-timeoutTicker.C:
break readLoop
case batch := <-reads:
for _, id := range batch {
got[id.String()]++
}
case <-ctx.Done():
break readLoop
default:
if p.CurrentPartitionIdx() > uint64(batches+1) {
break readLoop
}
}
runtime.Gosched()
}
require.Equal(t, len(ids), len(got))
for _, id := range ids {
_, ok := got[id.String()]
require.True(t, ok, "id not found %s", id.String())
require.GreaterOrEqual(t, got[id.String()], 1, "id don't have schdueled job %s", id.String())
}
})`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/logprovider/provider_test.go: `opts.ReadInterval = readInterval`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/logprovider/provider_test.go: `p.filterStore.AddActiveUpkeeps(f)`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/logprovider/provider_test.go: `ids = append(ids, f.upkeepID)`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/logprovider/provider_test.go: `p.scheduleReadJobs(ctx, func(ids []*big.Int) {
select {
case reads <- ids:
default:
t.Log("dropped ids")
}
})`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/logprovider/provider_test.go: `got[id.String()]++`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/logprovider/provider_test.go: `runtime.Gosched()`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/logprovider/provider_test.go: `mp.On("RegisterFilter", mock.Anything, mock.Anything).Return(nil)`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/logprovider/provider_test.go: `mp.On("ReplayAsync", mock.Anything).Return()`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/logprovider/provider_test.go: `mp.On("HasFilter", mock.Anything).Return(false)`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/logprovider/provider_test.go: `mp.On("UnregisterFilter", mock.Anything, mock.Anything).Return(nil)`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/logprovider/provider_test.go: `mp.On("LatestBlock", mock.Anything).Return(logpoller.LogPollerBlock{BlockNumber: int64(1)}, nil)`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/logprovider/provider_test.go: `mp.On("LogsWithSigs", mock.Anything, mock.Anything, mock.Anything, mock.Anything, mock.Anything).Return([]logpoller.Log{
{
BlockNumber: 1,
TxHash: common.HexToHash("0x1"),
},
}, nil)`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/logprovider/provider_test.go: `ids = append(ids, f.upkeepID)`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/logprovider/provider_test.go: `t.Run("no entries", func(t *testing.T) {
require.NoError(t, p.ReadLogs(ctx, big.NewInt(999999)))
logs := p.buffer.peek(10)
require.Len(t, logs, 0)
})`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/logprovider/provider_test.go: `filterStore.RangeFiltersByIDs(func(i int, f upkeepFilter) {
updatedFilters = append(updatedFilters, f.Clone())
}, ids[:2]...)`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/logprovider/provider_test.go: `updatedFilters = append(updatedFilters, f.Clone())`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/logprovider/provider_test.go: `.TestLogger(t)`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/logprovider/provider_test.go: `.NewInt(1)`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/logprovider/provider_test.go: `.NewInt(1)`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/logprovider/provider_test.go: `.filterStore.AddActiveUpkeeps(f)`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/logprovider/provider_test.go: `.Run("no filters", func(t *testing.T) {
filters := p.getFilters(0, big.NewInt(0))
require.Len(t, filters, 1)
require.Equal(t, len(filters[0].addr), 0)
})`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/logprovider/provider_test.go: `.getFilters(0, big.NewInt(0))`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/logprovider/provider_test.go: `.NewInt(0)`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/logprovider/provider_test.go: `.Run("has filter with lower lastPollBlock", func(t *testing.T) {
filters := p.getFilters(0, f.upkeepID)
require.Len(t, filters, 1)
require.Greater(t, len(filters[0].addr), 0)
filters = p.getFilters(10, f.upkeepID)
require.Len(t, filters, 1)
require.Greater(t, len(filters[0].addr), 0)
})`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/logprovider/provider_test.go: `.getFilters(0, f.upkeepID)`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/logprovider/provider_test.go: `.getFilters(10, f.upkeepID)`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/logprovider/provider_test.go: `.Run("has filter with higher lastPollBlock", func(t *testing.T) {
_, f := newEntry(p, 2)
f.lastPollBlock = 3
p.filterStore.AddActiveUpkeeps(f)
filters := p.getFilters(1, f.upkeepID)
require.Len(t, filters, 1)
require.Equal(t, len(filters[0].addr), 0)
})`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/logprovider/provider_test.go: `.filterStore.AddActiveUpkeeps(f)`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/logprovider/provider_test.go: `.getFilters(1, f.upkeepID)`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/logprovider/provider_test.go: `.filterStore.AddActiveUpkeeps(f)`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/logprovider/provider_test.go: `.getFilters(1, f.upkeepID)`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/logprovider/provider_test.go: `.TestLogger(t)`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/logprovider/provider_test.go: `.NewInt(1)`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/logprovider/provider_test.go: `.NewInt(1)`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/logprovider/provider_test.go: `.filterStore.AddActiveUpkeeps(f)`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/logprovider/provider_test.go: `.Run("no entries", func(t *testing.T) {
_, f := newEntry(p, n*2)
f.lastPollBlock = 10
p.updateFiltersLastPoll([]upkeepFilter{f})
filters := p.filterStore.GetFilters(nil)
for _, f := range filters {
require.Equal(t, int64(0), f.lastPollBlock)
}
})`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/logprovider/provider_test.go: `.updateFiltersLastPoll([]upkeepFilter{f})`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/logprovider/provider_test.go: `.filterStore.GetFilters(nil)`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/logprovider/provider_test.go: `.updateFiltersLastPoll([]upkeepFilter{f1, f2})`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/logprovider/provider_test.go: `.filterStore.RangeFiltersByIDs(func(_ int, f upkeepFilter) {
require.Equal(t, int64(10), f.lastPollBlock)
}, f1.upkeepID, f2.upkeepID)`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/logprovider/provider_test.go: `.updateFiltersLastPoll([]upkeepFilter{f1})`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/logprovider/provider_test.go: `.filterStore.RangeFiltersByIDs(func(_ int, f upkeepFilter) {
require.Equal(t, int64(0), f.lastPollBlock)
}, f.upkeepID)`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/logprovider/provider_test.go: `.Run(tc.name, func(t *testing.T) {
ctx := testutils.Context(t)
readInterval := 10 * time.Millisecond
opts := NewOptions(200, big.NewInt(1))
opts.ReadInterval = readInterval
p := NewLogProvider(logger.TestLogger(t), mp, big.NewInt(1), &mockedPacker{}, NewUpkeepFilterStore(), opts)
var ids []*big.Int
for i, id := range tc.ids {
_, f := newEntry(p, id, tc.addrs[i])
p.filterStore.AddActiveUpkeeps(f)
ids = append(ids, f.upkeepID)
}
reads := make(chan []*big.Int, 100)
go func(ctx context.Context) {
p.scheduleReadJobs(ctx, func(ids []*big.Int) {
select {
case reads <- ids:
default:
t.Log("dropped ids")
}
})
}(ctx)
batches := (len(tc.ids) / tc.maxBatchSize) + 1
timeoutTicker := time.NewTicker(readInterval * time.Duration(batches*10))
defer timeoutTicker.Stop()
got := map[string]int{}
readLoop:
for {
select {
case <-timeoutTicker.C:
break readLoop
case batch := <-reads:
for _, id := range batch {
got[id.String()]++
}
case <-ctx.Done():
break readLoop
default:
if p.CurrentPartitionIdx() > uint64(batches+1) {
break readLoop
}
}
runtime.Gosched()
}
require.Equal(t, len(ids), len(got))
for _, id := range ids {
_, ok := got[id.String()]
require.True(t, ok, "id not found %s", id.String())
require.GreaterOrEqual(t, got[id.String()], 1, "id don't have schdueled job %s", id.String())
}
})`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/logprovider/provider_test.go: `.Context(t)`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/logprovider/provider_test.go: `.NewInt(1)`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/logprovider/provider_test.go: `.TestLogger(t)`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/logprovider/provider_test.go: `.NewInt(1)`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/logprovider/provider_test.go: `.filterStore.AddActiveUpkeeps(f)`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/logprovider/provider_test.go: `.scheduleReadJobs(ctx, func(ids []*big.Int) {
select {
case reads <- ids:
default:
t.Log("dropped ids")
}
})`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/logprovider/provider_test.go: `.NewTicker(readInterval * time.Duration(batches*10))`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/logprovider/provider_test.go: `.Duration(batches*10)`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/logprovider/provider_test.go: `.Stop()`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/logprovider/provider_test.go: `.String()`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/logprovider/provider_test.go: `.Done()`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/logprovider/provider_test.go: `.CurrentPartitionIdx()`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/logprovider/provider_test.go: `.Gosched()`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/logprovider/provider_test.go: `.String()`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/logprovider/provider_test.go: `.Context(t)`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/logprovider/provider_test.go: `.On("RegisterFilter", mock.Anything, mock.Anything)`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/logprovider/provider_test.go: `.Return(nil)`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/logprovider/provider_test.go: `.On("ReplayAsync", mock.Anything)`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/logprovider/provider_test.go: `.Return()`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/logprovider/provider_test.go: `.On("HasFilter", mock.Anything)`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/logprovider/provider_test.go: `.Return(false)`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/logprovider/provider_test.go: `.On("UnregisterFilter", mock.Anything, mock.Anything)`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/logprovider/provider_test.go: `.Return(nil)`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/logprovider/provider_test.go: `.On("LatestBlock", mock.Anything)`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/logprovider/provider_test.go: `.Return(logpoller.LogPollerBlock{BlockNumber: int64(1)}, nil)`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/logprovider/provider_test.go: `.On("LogsWithSigs", mock.Anything, mock.Anything, mock.Anything, mock.Anything, mock.Anything)`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/logprovider/provider_test.go: `.Return([]logpoller.Log{
{
BlockNumber: 1,
TxHash: common.HexToHash("0x1"),
},
}, nil)`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/logprovider/provider_test.go: `.HexToHash("0x1")`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/logprovider/provider_test.go: `.TestLogger(t)`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/logprovider/provider_test.go: `.NewInt(1)`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/logprovider/provider_test.go: `.NewInt(1)`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/logprovider/provider_test.go: `.Run("no entries", func(t *testing.T) {
require.NoError(t, p.ReadLogs(ctx, big.NewInt(999999)))
logs := p.buffer.peek(10)
require.Len(t, logs, 0)
})`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/logprovider/provider_test.go: `.buffer.peek(10)`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/logprovider/provider_test.go: `.buffer.peek(10)`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/logprovider/provider_test.go: `.RangeFiltersByIDs(func(i int, f upkeepFilter) {
updatedFilters = append(updatedFilters, f.Clone())
}, ids[:2]...)`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/logprovider/provider_test.go: `.Clone()`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/logprovider/recoverer_test.go: `lp.On("LatestBlock", mock.Anything).Return(logpoller.LogPollerBlock{BlockNumber: 100}, nil)`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/logprovider/recoverer_test.go: `t.Run(tc.name, func(t *testing.T) {
r.lock.Lock()
r.pending = tc.pending
r.lock.Unlock()
got, err := r.GetRecoveryProposals(ctx)
if tc.wantErr {
require.Error(t, err)
} else {
require.NoError(t, err)
}
require.Len(t, got, len(tc.want))
})`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/logprovider/recoverer_test.go: `r.lock.Lock()`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/logprovider/recoverer_test.go: `r.pending = tc.pending`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/logprovider/recoverer_test.go: `r.lock.Unlock()`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/logprovider/recoverer_test.go: `t.Run(tc.name, func(t *testing.T) {
ctx, cancel := context.WithCancel(testutils.Context(t))
defer cancel()
lookbackBlocks := int64(100)
r, _, lp, statesReader := setupTestRecoverer(t, time.Millisecond*50, lookbackBlocks)
start, _ := r.getRecoveryWindow(0)
block24h := int64(math.Abs(float64(start)))
lp.On("LatestBlock", mock.Anything).Return(logpoller.LogPollerBlock{BlockNumber: block24h + oldLogsOffset}, nil)
statesReader.On("SelectByWorkIDs", mock.Anything, mock.Anything, mock.Anything, mock.Anything, mock.Anything).Return(tc.states, nil)
r.lock.Lock()
r.pending = tc.pending
r.visited = tc.visited
r.lock.Unlock()
r.clean(ctx)
r.lock.RLock()
defer r.lock.RUnlock()
pending := r.pending
require.Equal(t, len(tc.wantPending), len(pending))
sort.Slice(pending, func(i, j int) bool {
return pending[i].WorkID < pending[j].WorkID
})
for i := range pending {
require.Equal(t, tc.wantPending[i].WorkID, pending[i].WorkID)
}
require.Equal(t, len(tc.wantVisited), len(r.visited))
for _, id := range tc.wantVisited {
_, ok := r.visited[id]
require.True(t, ok)
}
})`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/logprovider/recoverer_test.go: `lp.On("LatestBlock", mock.Anything).Return(logpoller.LogPollerBlock{BlockNumber: block24h + oldLogsOffset}, nil)`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/logprovider/recoverer_test.go: `statesReader.On("SelectByWorkIDs", mock.Anything, mock.Anything, mock.Anything, mock.Anything, mock.Anything).Return(tc.states, nil)`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/logprovider/recoverer_test.go: `r.lock.Lock()`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/logprovider/recoverer_test.go: `r.pending = tc.pending`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/logprovider/recoverer_test.go: `r.visited = tc.visited`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/logprovider/recoverer_test.go: `r.lock.Unlock()`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/logprovider/recoverer_test.go: `r.clean(ctx)`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/logprovider/recoverer_test.go: `r.lock.RLock()`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/logprovider/recoverer_test.go: `sort.Slice(pending, func(i, j int) bool {
return pending[i].WorkID < pending[j].WorkID
})`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/logprovider/recoverer_test.go: `t.Run(tc.name, func(t *testing.T) {
lookbackBlocks := int64(100)
recoverer, filterStore, lp, statesReader := setupTestRecoverer(t, time.Millisecond*50, lookbackBlocks)
filterStore.AddActiveUpkeeps(tc.active...)
lp.On("LatestBlock", mock.Anything).Return(logpoller.LogPollerBlock{BlockNumber: tc.latestBlock}, tc.latestBlockErr)
lp.On("LogsWithSigs", mock.Anything, mock.Anything, mock.Anything, mock.Anything, mock.Anything).Return(tc.logs, tc.logsErr)
statesReader.On("SelectByWorkIDs", mock.Anything, mock.Anything, mock.Anything, mock.Anything).Return(tc.states, tc.statesErr)
err := recoverer.recover(ctx)
if tc.recoverErr != nil {
require.Error(t, err)
return
}
require.NoError(t, err)
for i, active := range tc.active {
filters := filterStore.GetFilters(func(f upkeepFilter) bool {
return f.upkeepID.String() == active.upkeepID.String()
})
require.Equal(t, 1, len(filters))
require.Equal(t, tc.lastRePollBlocks[i], filters[0].lastRePollBlock)
}
proposals, err := recoverer.GetRecoveryProposals(ctx)
require.NoError(t, err)
require.Equal(t, len(tc.proposalsWorkIDs), len(proposals))
if len(proposals) > 0 {
sort.Slice(proposals, func(i, j int) bool {
return proposals[i].WorkID < proposals[j].WorkID
})
}
for i := range proposals {
require.Equal(t, tc.proposalsWorkIDs[i], proposals[i].WorkID)
}
})`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/logprovider/recoverer_test.go: `filterStore.AddActiveUpkeeps(tc.active...)`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/logprovider/recoverer_test.go: `lp.On("LatestBlock", mock.Anything).Return(logpoller.LogPollerBlock{BlockNumber: tc.latestBlock}, tc.latestBlockErr)`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/logprovider/recoverer_test.go: `lp.On("LogsWithSigs", mock.Anything, mock.Anything, mock.Anything, mock.Anything, mock.Anything).Return(tc.logs, tc.logsErr)`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/logprovider/recoverer_test.go: `statesReader.On("SelectByWorkIDs", mock.Anything, mock.Anything, mock.Anything, mock.Anything).Return(tc.states, tc.statesErr)`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/logprovider/recoverer_test.go: `sort.Slice(proposals, func(i, j int) bool {
return proposals[i].WorkID < proposals[j].WorkID
})`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/logprovider/recoverer_test.go: `filters = append(filters, upkeepFilter{
upkeepID: big.NewInt(int64(i)),
})`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/logprovider/recoverer_test.go: `batch = recoverer.selectFilterBatch(filters[:recoveryBatchSize/2])`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/logprovider/recoverer_test.go: `t.Run(tc.name, func(t *testing.T) {
recoverer, filterStore, _, _ := setupTestRecoverer(t, time.Millisecond*50, int64(100))
filterStore.AddActiveUpkeeps(tc.filters...)
batch := recoverer.getFilterBatch(tc.offsetBlock)
require.Equal(t, tc.want, len(batch))
})`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/logprovider/recoverer_test.go: `filterStore.AddActiveUpkeeps(tc.filters...)`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/logprovider/recoverer_test.go: `t.Run(tc.name, func(t *testing.T) {
recoverer, _, _, _ := setupTestRecoverer(t, time.Millisecond*50, int64(100))
state := recoverer.filterFinalizedStates(upkeepFilter{}, tc.logs, tc.states)
require.Equal(t, len(tc.want), len(state))
for i := range state {
require.Equal(t, tc.want[i].LogIndex, state[i].LogIndex)
}
})`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/logprovider/recoverer_test.go: `receipt.Status = 1`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/logprovider/recoverer_test.go: `receipt.BlockNumber = big.NewInt(200)`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/logprovider/recoverer_test.go: `receipt.Status = 1`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/logprovider/recoverer_test.go: `receipt.BlockNumber = big.NewInt(200)`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/logprovider/recoverer_test.go: `receipt.Status = 1`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/logprovider/recoverer_test.go: `receipt.BlockNumber = big.NewInt(200)`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/logprovider/recoverer_test.go: `receipt.BlockHash = common.HexToHash("0x1")`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/logprovider/recoverer_test.go: `receipt.Status = 1`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/logprovider/recoverer_test.go: `receipt.BlockNumber = big.NewInt(80)`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/logprovider/recoverer_test.go: `receipt.Status = 1`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/logprovider/recoverer_test.go: `receipt.BlockNumber = big.NewInt(80)`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/logprovider/recoverer_test.go: `receipt.Status = 1`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/logprovider/recoverer_test.go: `receipt.BlockNumber = big.NewInt(80)`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/logprovider/recoverer_test.go: `receipt.Status = 1`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/logprovider/recoverer_test.go: `receipt.BlockNumber = big.NewInt(80)`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/logprovider/recoverer_test.go: `receipt.Status = 1`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/logprovider/recoverer_test.go: `receipt.BlockNumber = big.NewInt(80)`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/logprovider/recoverer_test.go: `t.LogTriggerExtension = &ocr2keepers.LogTriggerExtension{
TxHash: [32]byte{2},
Index: uint32(3),
BlockHash: [32]byte{1},
BlockNumber: ocr2keepers.BlockNumber(80),
}`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/logprovider/recoverer_test.go: `receipt.Status = 1`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/logprovider/recoverer_test.go: `receipt.BlockNumber = big.NewInt(80)`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/logprovider/recoverer_test.go: `receipt.BlockHash = [32]byte{1}`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/logprovider/recoverer_test.go: `t.LogTriggerExtension = &ocr2keepers.LogTriggerExtension{
TxHash: [32]byte{2},
Index: uint32(3),
BlockHash: [32]byte{1},
BlockNumber: ocr2keepers.BlockNumber(80),
}`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/logprovider/recoverer_test.go: `receipt.Status = 1`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/logprovider/recoverer_test.go: `receipt.BlockNumber = big.NewInt(80)`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/logprovider/recoverer_test.go: `receipt.BlockHash = [32]byte{1}`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/logprovider/recoverer_test.go: `t.Run(tc.name, func(t *testing.T) {
recoverer, filterStore, _, _ := setupTestRecoverer(t, time.Second, 10)
if !tc.skipFilter {
filterStore.AddActiveUpkeeps(upkeepFilter{
addr: []byte("test"),
topics: []common.Hash{common.HexToHash("0x1"), common.HexToHash("0x2"), common.HexToHash("0x3"), common.HexToHash("0x4")},
upkeepID: core.GenUpkeepID(types2.LogTrigger, "123").BigInt(),
})
}
if tc.filterStore != nil {
recoverer.filterStore = tc.filterStore
}
if tc.logPoller != nil {
recoverer.poller = tc.logPoller
}
if tc.client != nil {
recoverer.client = tc.client
}
if tc.stateReader != nil {
recoverer.states = tc.stateReader
}
b, err := recoverer.GetProposalData(testutils.Context(t), tc.proposal)
if tc.expectErr {
assert.Error(t, err)
assert.Equal(t, tc.wantErr.Error(), err.Error())
} else {
assert.NoError(t, err)
assert.Equal(t, tc.wantBytes, b)
}
})`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/logprovider/recoverer_test.go: `filterStore.AddActiveUpkeeps(upkeepFilter{
addr: []byte("test"),
topics: []common.Hash{common.HexToHash("0x1"), common.HexToHash("0x2"), common.HexToHash("0x3"), common.HexToHash("0x4")},
upkeepID: core.GenUpkeepID(types2.LogTrigger, "123").BigInt(),
})`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/logprovider/recoverer_test.go: `recoverer.filterStore = tc.filterStore`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/logprovider/recoverer_test.go: `recoverer.poller = tc.logPoller`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/logprovider/recoverer_test.go: `recoverer.client = tc.client`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/logprovider/recoverer_test.go: `recoverer.states = tc.stateReader`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/logprovider/recoverer_test.go: `t.Run(tc.name, func(t *testing.T) {
origMaxPendingPayloadsPerUpkeep := maxPendingPayloadsPerUpkeep
maxPendingPayloadsPerUpkeep = tc.maxPerUpkeep
defer func() {
maxPendingPayloadsPerUpkeep = origMaxPendingPayloadsPerUpkeep
}()
r := NewLogRecoverer(logger.TestLogger(t), nil, nil, nil, nil, nil, NewOptions(200, big.NewInt(1)))
r.lock.Lock()
r.pending = tc.exist
for i, p := range tc.new {
err := r.addPending(p)
if tc.errored[i] {
require.Error(t, err)
continue
}
require.NoError(t, err)
}
pending := r.pending
require.GreaterOrEqual(t, len(pending), len(tc.new))
require.Equal(t, len(tc.want), len(pending))
sort.Slice(pending, func(i, j int) bool {
return pending[i].WorkID < pending[j].WorkID
})
for i := range pending {
require.Equal(t, tc.want[i].WorkID, pending[i].WorkID)
}
r.lock.Unlock()
for _, p := range tc.want {
r.removePending(p.WorkID)
}
r.lock.Lock()
defer r.lock.Unlock()
require.Equal(t, 0, len(r.pending))
})`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/logprovider/recoverer_test.go: `maxPendingPayloadsPerUpkeep = tc.maxPerUpkeep`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/logprovider/recoverer_test.go: `maxPendingPayloadsPerUpkeep = origMaxPendingPayloadsPerUpkeep`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/logprovider/recoverer_test.go: `r.lock.Lock()`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/logprovider/recoverer_test.go: `r.pending = tc.exist`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/logprovider/recoverer_test.go: `sort.Slice(pending, func(i, j int) bool {
return pending[i].WorkID < pending[j].WorkID
})`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/logprovider/recoverer_test.go: `r.lock.Unlock()`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/logprovider/recoverer_test.go: `r.removePending(p.WorkID)`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/logprovider/recoverer_test.go: `r.lock.Lock()`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/logprovider/recoverer_test.go: `.Context(t)`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/logprovider/recoverer_test.go: `.On("LatestBlock", mock.Anything)`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/logprovider/recoverer_test.go: `.Return(logpoller.LogPollerBlock{BlockNumber: 100}, nil)`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/logprovider/recoverer_test.go: `.TestLogger(t)`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/logprovider/recoverer_test.go: `.NewInt(1)`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/logprovider/recoverer_test.go: `.GenUpkeepID(types2.LogTrigger, "1")`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/logprovider/recoverer_test.go: `.GenUpkeepID(types2.LogTrigger, "2")`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/logprovider/recoverer_test.go: `.GenUpkeepID(types2.LogTrigger, "1")`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/logprovider/recoverer_test.go: `.GenUpkeepID(types2.LogTrigger, "2")`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/logprovider/recoverer_test.go: `.GenUpkeepID(types2.LogTrigger, "1")`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/logprovider/recoverer_test.go: `.GenUpkeepID(types2.LogTrigger, "1")`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/logprovider/recoverer_test.go: `.GenUpkeepID(types2.LogTrigger, "1")`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/logprovider/recoverer_test.go: `.GenUpkeepID(types2.LogTrigger, "1")`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/logprovider/recoverer_test.go: `.GenUpkeepID(types2.LogTrigger, "1")`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/logprovider/recoverer_test.go: `.GenUpkeepID(types2.LogTrigger, "1")`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/logprovider/recoverer_test.go: `.GenUpkeepID(types2.LogTrigger, "2")`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/logprovider/recoverer_test.go: `.GenUpkeepID(types2.LogTrigger, "1")`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/logprovider/recoverer_test.go: `.GenUpkeepID(types2.LogTrigger, "1")`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/logprovider/recoverer_test.go: `.GenUpkeepID(types2.LogTrigger, "1")`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/logprovider/recoverer_test.go: `.GenUpkeepID(types2.LogTrigger, "1")`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/logprovider/recoverer_test.go: `.GenUpkeepID(types2.LogTrigger, "1")`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/logprovider/recoverer_test.go: `.GenUpkeepID(types2.LogTrigger, "2")`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/logprovider/recoverer_test.go: `.Run(tc.name, func(t *testing.T) {
r.lock.Lock()
r.pending = tc.pending
r.lock.Unlock()
got, err := r.GetRecoveryProposals(ctx)
if tc.wantErr {
require.Error(t, err)
} else {
require.NoError(t, err)
}
require.Len(t, got, len(tc.want))
})`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/logprovider/recoverer_test.go: `.lock.Lock()`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/logprovider/recoverer_test.go: `.lock.Unlock()`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/logprovider/recoverer_test.go: `.GetRecoveryProposals(ctx)`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/logprovider/recoverer_test.go: `.GenUpkeepID(types2.LogTrigger, "1")`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/logprovider/recoverer_test.go: `.GenUpkeepID(types2.LogTrigger, "2")`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/logprovider/recoverer_test.go: `.GenUpkeepID(types2.LogTrigger, "3")`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/logprovider/recoverer_test.go: `.Now()`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/logprovider/recoverer_test.go: `.BlockNumber(oldLogsOffset * 2)`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/logprovider/recoverer_test.go: `.Now()`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/logprovider/recoverer_test.go: `.BlockNumber(oldLogsOffset * 2)`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/logprovider/recoverer_test.go: `.Now()`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/logprovider/recoverer_test.go: `.Add(-time.Hour)`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/logprovider/recoverer_test.go: `.BlockNumber(oldLogsOffset - 10)`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/logprovider/recoverer_test.go: `.Now()`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/logprovider/recoverer_test.go: `.Add(-time.Hour)`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/logprovider/recoverer_test.go: `.BlockNumber(oldLogsOffset + 10)`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/logprovider/recoverer_test.go: `.GenUpkeepID(types2.LogTrigger, "1")`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/logprovider/recoverer_test.go: `.GenUpkeepID(types2.LogTrigger, "2")`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/logprovider/recoverer_test.go: `.GenUpkeepID(types2.LogTrigger, "4")`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/logprovider/recoverer_test.go: `.Run(tc.name, func(t *testing.T) {
ctx, cancel := context.WithCancel(testutils.Context(t))
defer cancel()
lookbackBlocks := int64(100)
r, _, lp, statesReader := setupTestRecoverer(t, time.Millisecond*50, lookbackBlocks)
start, _ := r.getRecoveryWindow(0)
block24h := int64(math.Abs(float64(start)))
lp.On("LatestBlock", mock.Anything).Return(logpoller.LogPollerBlock{BlockNumber: block24h + oldLogsOffset}, nil)
statesReader.On("SelectByWorkIDs", mock.Anything, mock.Anything, mock.Anything, mock.Anything, mock.Anything).Return(tc.states, nil)
r.lock.Lock()
r.pending = tc.pending
r.visited = tc.visited
r.lock.Unlock()
r.clean(ctx)
r.lock.RLock()
defer r.lock.RUnlock()
pending := r.pending
require.Equal(t, len(tc.wantPending), len(pending))
sort.Slice(pending, func(i, j int) bool {
return pending[i].WorkID < pending[j].WorkID
})
for i := range pending {
require.Equal(t, tc.wantPending[i].WorkID, pending[i].WorkID)
}
require.Equal(t, len(tc.wantVisited), len(r.visited))
for _, id := range tc.wantVisited {
_, ok := r.visited[id]
require.True(t, ok)
}
})`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/logprovider/recoverer_test.go: `.WithCancel(testutils.Context(t))`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/logprovider/recoverer_test.go: `.Context(t)`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/logprovider/recoverer_test.go: `.getRecoveryWindow(0)`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/logprovider/recoverer_test.go: `.Abs(float64(start))`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/logprovider/recoverer_test.go: `.On("LatestBlock", mock.Anything)`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/logprovider/recoverer_test.go: `.Return(logpoller.LogPollerBlock{BlockNumber: block24h + oldLogsOffset}, nil)`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/logprovider/recoverer_test.go: `.On("SelectByWorkIDs", mock.Anything, mock.Anything, mock.Anything, mock.Anything, mock.Anything)`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/logprovider/recoverer_test.go: `.Return(tc.states, nil)`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/logprovider/recoverer_test.go: `.lock.Lock()`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/logprovider/recoverer_test.go: `.lock.Unlock()`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/logprovider/recoverer_test.go: `.clean(ctx)`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/logprovider/recoverer_test.go: `.lock.RLock()`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/logprovider/recoverer_test.go: `.lock.RUnlock()`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/logprovider/recoverer_test.go: `.Slice(pending, func(i, j int) bool {
return pending[i].WorkID < pending[j].WorkID
})`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/logprovider/recoverer_test.go: `.Context(t)`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/logprovider/recoverer_test.go: `.NewInt(1)`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/logprovider/recoverer_test.go: `.HexToAddress("0x1")`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/logprovider/recoverer_test.go: `.Bytes()`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/logprovider/recoverer_test.go: `.HexToHash("0x1")`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/logprovider/recoverer_test.go: `.HexToHash("0x111")`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/logprovider/recoverer_test.go: `.HexToHash("0x2")`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/logprovider/recoverer_test.go: `.NewInt(1)`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/logprovider/recoverer_test.go: `.HexToAddress("0x1")`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/logprovider/recoverer_test.go: `.Bytes()`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/logprovider/recoverer_test.go: `.HexToHash("0x1")`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/logprovider/recoverer_test.go: `.NewInt(1)`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/logprovider/recoverer_test.go: `.HexToAddress("0x1")`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/logprovider/recoverer_test.go: `.Bytes()`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/logprovider/recoverer_test.go: `.HexToHash("0x1")`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/logprovider/recoverer_test.go: `.NewInt(2)`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/logprovider/recoverer_test.go: `.HexToAddress("0x2")`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/logprovider/recoverer_test.go: `.Bytes()`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/logprovider/recoverer_test.go: `.HexToHash("0x2")`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/logprovider/recoverer_test.go: `.NewInt(3)`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/logprovider/recoverer_test.go: `.HexToAddress("0x2")`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/logprovider/recoverer_test.go: `.Bytes()`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/logprovider/recoverer_test.go: `.HexToHash("0x2")`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/logprovider/recoverer_test.go: `.HexToHash("0x111")`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/logprovider/recoverer_test.go: `.HexToHash("0x2")`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/logprovider/recoverer_test.go: `.NewInt(1)`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/logprovider/recoverer_test.go: `.HexToAddress("0x1")`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/logprovider/recoverer_test.go: `.Bytes()`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/logprovider/recoverer_test.go: `.HexToHash("0x1")`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/logprovider/recoverer_test.go: `.HexToHash("0x111")`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/logprovider/recoverer_test.go: `.HexToHash("0x2")`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/logprovider/recoverer_test.go: `.NewInt(1)`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/logprovider/recoverer_test.go: `.HexToAddress("0x1")`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/logprovider/recoverer_test.go: `.Bytes()`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/logprovider/recoverer_test.go: `.HexToHash("0x1")`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/logprovider/recoverer_test.go: `.HexToHash("0x111")`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/logprovider/recoverer_test.go: `.HexToHash("0x2")`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/logprovider/recoverer_test.go: `.Run(tc.name, func(t *testing.T) {
lookbackBlocks := int64(100)
recoverer, filterStore, lp, statesReader := setupTestRecoverer(t, time.Millisecond*50, lookbackBlocks)
filterStore.AddActiveUpkeeps(tc.active...)
lp.On("LatestBlock", mock.Anything).Return(logpoller.LogPollerBlock{BlockNumber: tc.latestBlock}, tc.latestBlockErr)
lp.On("LogsWithSigs", mock.Anything, mock.Anything, mock.Anything, mock.Anything, mock.Anything).Return(tc.logs, tc.logsErr)
statesReader.On("SelectByWorkIDs", mock.Anything, mock.Anything, mock.Anything, mock.Anything).Return(tc.states, tc.statesErr)
err := recoverer.recover(ctx)
if tc.recoverErr != nil {
require.Error(t, err)
return
}
require.NoError(t, err)
for i, active := range tc.active {
filters := filterStore.GetFilters(func(f upkeepFilter) bool {
return f.upkeepID.String() == active.upkeepID.String()
})
require.Equal(t, 1, len(filters))
require.Equal(t, tc.lastRePollBlocks[i], filters[0].lastRePollBlock)
}
proposals, err := recoverer.GetRecoveryProposals(ctx)
require.NoError(t, err)
require.Equal(t, len(tc.proposalsWorkIDs), len(proposals))
if len(proposals) > 0 {
sort.Slice(proposals, func(i, j int) bool {
return proposals[i].WorkID < proposals[j].WorkID
})
}
for i := range proposals {
require.Equal(t, tc.proposalsWorkIDs[i], proposals[i].WorkID)
}
})`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/logprovider/recoverer_test.go: `.AddActiveUpkeeps(tc.active...)`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/logprovider/recoverer_test.go: `.On("LatestBlock", mock.Anything)`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/logprovider/recoverer_test.go: `.Return(logpoller.LogPollerBlock{BlockNumber: tc.latestBlock}, tc.latestBlockErr)`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/logprovider/recoverer_test.go: `.On("LogsWithSigs", mock.Anything, mock.Anything, mock.Anything, mock.Anything, mock.Anything)`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/logprovider/recoverer_test.go: `.Return(tc.logs, tc.logsErr)`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/logprovider/recoverer_test.go: `.On("SelectByWorkIDs", mock.Anything, mock.Anything, mock.Anything, mock.Anything)`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/logprovider/recoverer_test.go: `.Return(tc.states, tc.statesErr)`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/logprovider/recoverer_test.go: `.recover(ctx)`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/logprovider/recoverer_test.go: `.GetFilters(func(f upkeepFilter) bool {
return f.upkeepID.String() == active.upkeepID.String()
})`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/logprovider/recoverer_test.go: `.upkeepID.String()`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/logprovider/recoverer_test.go: `.upkeepID.String()`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/logprovider/recoverer_test.go: `.GetRecoveryProposals(ctx)`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/logprovider/recoverer_test.go: `.Slice(proposals, func(i, j int) bool {
return proposals[i].WorkID < proposals[j].WorkID
})`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/logprovider/recoverer_test.go: `.NewInt(int64(i))`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/logprovider/recoverer_test.go: `.selectFilterBatch(filters)`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/logprovider/recoverer_test.go: `.selectFilterBatch(filters[:recoveryBatchSize/2])`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/logprovider/recoverer_test.go: `.NewInt(1)`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/logprovider/recoverer_test.go: `.HexToAddress("0x1")`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/logprovider/recoverer_test.go: `.Bytes()`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/logprovider/recoverer_test.go: `.NewInt(2)`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/logprovider/recoverer_test.go: `.HexToAddress("0x2")`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/logprovider/recoverer_test.go: `.Bytes()`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/logprovider/recoverer_test.go: `.NewInt(3)`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/logprovider/recoverer_test.go: `.HexToAddress("0x3")`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/logprovider/recoverer_test.go: `.Bytes()`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/logprovider/recoverer_test.go: `.Run(tc.name, func(t *testing.T) {
recoverer, filterStore, _, _ := setupTestRecoverer(t, time.Millisecond*50, int64(100))
filterStore.AddActiveUpkeeps(tc.filters...)
batch := recoverer.getFilterBatch(tc.offsetBlock)
require.Equal(t, tc.want, len(batch))
})`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/logprovider/recoverer_test.go: `.AddActiveUpkeeps(tc.filters...)`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/logprovider/recoverer_test.go: `.getFilterBatch(tc.offsetBlock)`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/logprovider/recoverer_test.go: `.Run(tc.name, func(t *testing.T) {
recoverer, _, _, _ := setupTestRecoverer(t, time.Millisecond*50, int64(100))
state := recoverer.filterFinalizedStates(upkeepFilter{}, tc.logs, tc.states)
require.Equal(t, len(tc.want), len(state))
for i := range state {
require.Equal(t, tc.want[i].LogIndex, state[i].LogIndex)
}
})`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/logprovider/recoverer_test.go: `.filterFinalizedStates(upkeepFilter{}, tc.logs, tc.states)`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/logprovider/recoverer_test.go: `.New("not a log trigger upkeep ID")`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/logprovider/recoverer_test.go: `.GenUpkeepID(types2.LogTrigger, "123")`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/logprovider/recoverer_test.go: `.New("filter not found for upkeep 452312848583266388373324160190187140457511065560374322131410487042692349952")`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/logprovider/recoverer_test.go: `.GenUpkeepID(types2.LogTrigger, "123")`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/logprovider/recoverer_test.go: `.New("latest block boom")`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/logprovider/recoverer_test.go: `.New("latest block boom")`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/logprovider/recoverer_test.go: `.GenUpkeepID(types2.LogTrigger, "123")`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/logprovider/recoverer_test.go: `.New("tx receipt boom")`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/logprovider/recoverer_test.go: `.New("tx receipt boom")`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/logprovider/recoverer_test.go: `.GenUpkeepID(types2.LogTrigger, "123")`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/logprovider/recoverer_test.go: `.New("failed to get tx block")`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/logprovider/recoverer_test.go: `.GenUpkeepID(types2.LogTrigger, "123")`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/logprovider/recoverer_test.go: `.NewInt(200)`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/logprovider/recoverer_test.go: `.New("log block is not recoverable")`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/logprovider/recoverer_test.go: `.GenUpkeepID(types2.LogTrigger, "123")`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/logprovider/recoverer_test.go: `.NewInt(200)`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/logprovider/recoverer_test.go: `.New("log block is not recoverable")`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/logprovider/recoverer_test.go: `.GenUpkeepID(types2.LogTrigger, "123")`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/logprovider/recoverer_test.go: `.HexToHash("0x2")`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/logprovider/recoverer_test.go: `.NewInt(200)`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/logprovider/recoverer_test.go: `.HexToHash("0x1")`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/logprovider/recoverer_test.go: `.New("log tx reorged")`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/logprovider/recoverer_test.go: `.GenUpkeepID(types2.LogTrigger, "123")`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/logprovider/recoverer_test.go: `.New("upkeep state boom")`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/logprovider/recoverer_test.go: `.NewInt(80)`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/logprovider/recoverer_test.go: `.New("upkeep state boom")`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/logprovider/recoverer_test.go: `.GenUpkeepID(types2.LogTrigger, "123")`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/logprovider/recoverer_test.go: `.NewInt(80)`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/logprovider/recoverer_test.go: `.New("upkeep state is not recoverable")`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/logprovider/recoverer_test.go: `.GenUpkeepID(types2.LogTrigger, "123")`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/logprovider/recoverer_test.go: `.NewInt(80)`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/logprovider/recoverer_test.go: `.New("invalid filter found for upkeepID 452312848583266388373324160190187140457511065560374322131410487042692349952")`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/logprovider/recoverer_test.go: `.GenUpkeepID(types2.LogTrigger, "123")`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/logprovider/recoverer_test.go: `.New("logs with sigs boom")`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/logprovider/recoverer_test.go: `.NewInt(80)`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/logprovider/recoverer_test.go: `.New("could not read logs: logs with sigs boom")`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/logprovider/recoverer_test.go: `.GenUpkeepID(types2.LogTrigger, "123")`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/logprovider/recoverer_test.go: `.NewInt(80)`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/logprovider/recoverer_test.go: `.New(`no log found for upkeepID 452312848583266388373324160190187140457511065560374322131410487042692349952 and trigger {"BlockNumber":0,"BlockHash":"0000000000000000000000000000000000000000000000000000000000000000","LogTriggerExtension":{"BlockHash":"0000000000000000000000000000000000000000000000000000000000000000","BlockNumber":80,"Index":0,"TxHash":"0000000000000000000000000000000000000000000000000000000000000000"}}`)`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/logprovider/recoverer_test.go: `.GenUpkeepID(types2.LogTrigger, "123")`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/logprovider/recoverer_test.go: `.NewTrigger(
ocr2keepers.BlockNumber(80),
[32]byte{1},
)`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/logprovider/recoverer_test.go: `.BlockNumber(80)`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/logprovider/recoverer_test.go: `.BlockNumber(80)`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/logprovider/recoverer_test.go: `.NewInt(80)`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/logprovider/recoverer_test.go: `.GenUpkeepID(types2.LogTrigger, "123")`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/logprovider/recoverer_test.go: `.NewTrigger(
ocr2keepers.BlockNumber(80),
[32]byte{1},
)`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/logprovider/recoverer_test.go: `.BlockNumber(80)`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/logprovider/recoverer_test.go: `.BlockNumber(80)`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/logprovider/recoverer_test.go: `.New(big.NewInt(1))`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/logprovider/recoverer_test.go: `.NewInt(1)`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/logprovider/recoverer_test.go: `.Date(2022, 1, 1, 1, 1, 1, 1, time.UTC)`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/logprovider/recoverer_test.go: `.HexToHash("abc")`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/logprovider/recoverer_test.go: `.Date(2022, 1, 1, 1, 1, 1, 1, time.UTC)`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/logprovider/recoverer_test.go: `.NewInt(80)`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/logprovider/recoverer_test.go: `.Run(tc.name, func(t *testing.T) {
recoverer, filterStore, _, _ := setupTestRecoverer(t, time.Second, 10)
if !tc.skipFilter {
filterStore.AddActiveUpkeeps(upkeepFilter{
addr: []byte("test"),
topics: []common.Hash{common.HexToHash("0x1"), common.HexToHash("0x2"), common.HexToHash("0x3"), common.HexToHash("0x4")},
upkeepID: core.GenUpkeepID(types2.LogTrigger, "123").BigInt(),
})
}
if tc.filterStore != nil {
recoverer.filterStore = tc.filterStore
}
if tc.logPoller != nil {
recoverer.poller = tc.logPoller
}
if tc.client != nil {
recoverer.client = tc.client
}
if tc.stateReader != nil {
recoverer.states = tc.stateReader
}
b, err := recoverer.GetProposalData(testutils.Context(t), tc.proposal)
if tc.expectErr {
assert.Error(t, err)
assert.Equal(t, tc.wantErr.Error(), err.Error())
} else {
assert.NoError(t, err)
assert.Equal(t, tc.wantBytes, b)
}
})`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/logprovider/recoverer_test.go: `.AddActiveUpkeeps(upkeepFilter{
addr: []byte("test"),
topics: []common.Hash{common.HexToHash("0x1"), common.HexToHash("0x2"), common.HexToHash("0x3"), common.HexToHash("0x4")},
upkeepID: core.GenUpkeepID(types2.LogTrigger, "123").BigInt(),
})`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/logprovider/recoverer_test.go: `.HexToHash("0x1")`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/logprovider/recoverer_test.go: `.HexToHash("0x2")`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/logprovider/recoverer_test.go: `.HexToHash("0x3")`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/logprovider/recoverer_test.go: `.HexToHash("0x4")`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/logprovider/recoverer_test.go: `.GenUpkeepID(types2.LogTrigger, "123")`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/logprovider/recoverer_test.go: `.BigInt()`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/logprovider/recoverer_test.go: `.GetProposalData(testutils.Context(t), tc.proposal)`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/logprovider/recoverer_test.go: `.Context(t)`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/logprovider/recoverer_test.go: `.GenUpkeepID(types2.LogTrigger, "1")`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/logprovider/recoverer_test.go: `.GenUpkeepID(types2.LogTrigger, "1")`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/logprovider/recoverer_test.go: `.GenUpkeepID(types2.LogTrigger, "2")`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/logprovider/recoverer_test.go: `.GenUpkeepID(types2.LogTrigger, "1")`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/logprovider/recoverer_test.go: `.GenUpkeepID(types2.LogTrigger, "2")`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/logprovider/recoverer_test.go: `.GenUpkeepID(types2.LogTrigger, "1")`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/logprovider/recoverer_test.go: `.GenUpkeepID(types2.LogTrigger, "1")`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/logprovider/recoverer_test.go: `.GenUpkeepID(types2.LogTrigger, "1")`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/logprovider/recoverer_test.go: `.GenUpkeepID(types2.LogTrigger, "1")`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/logprovider/recoverer_test.go: `.GenUpkeepID(types2.LogTrigger, "1")`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/logprovider/recoverer_test.go: `.GenUpkeepID(types2.LogTrigger, "1")`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/logprovider/recoverer_test.go: `.GenUpkeepID(types2.LogTrigger, "1")`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/logprovider/recoverer_test.go: `.Run(tc.name, func(t *testing.T) {
origMaxPendingPayloadsPerUpkeep := maxPendingPayloadsPerUpkeep
maxPendingPayloadsPerUpkeep = tc.maxPerUpkeep
defer func() {
maxPendingPayloadsPerUpkeep = origMaxPendingPayloadsPerUpkeep
}()
r := NewLogRecoverer(logger.TestLogger(t), nil, nil, nil, nil, nil, NewOptions(200, big.NewInt(1)))
r.lock.Lock()
r.pending = tc.exist
for i, p := range tc.new {
err := r.addPending(p)
if tc.errored[i] {
require.Error(t, err)
continue
}
require.NoError(t, err)
}
pending := r.pending
require.GreaterOrEqual(t, len(pending), len(tc.new))
require.Equal(t, len(tc.want), len(pending))
sort.Slice(pending, func(i, j int) bool {
return pending[i].WorkID < pending[j].WorkID
})
for i := range pending {
require.Equal(t, tc.want[i].WorkID, pending[i].WorkID)
}
r.lock.Unlock()
for _, p := range tc.want {
r.removePending(p.WorkID)
}
r.lock.Lock()
defer r.lock.Unlock()
require.Equal(t, 0, len(r.pending))
})`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/logprovider/recoverer_test.go: `.TestLogger(t)`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/logprovider/recoverer_test.go: `.NewInt(1)`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/logprovider/recoverer_test.go: `.lock.Lock()`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/logprovider/recoverer_test.go: `.addPending(p)`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/logprovider/recoverer_test.go: `.Slice(pending, func(i, j int) bool {
return pending[i].WorkID < pending[j].WorkID
})`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/logprovider/recoverer_test.go: `.lock.Unlock()`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/logprovider/recoverer_test.go: `.removePending(p.WorkID)`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/logprovider/recoverer_test.go: `.lock.Lock()`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/logprovider/recoverer_test.go: `.lock.Unlock()`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/mercury/mercury_test.go: `t.Run(tc.name, func(t *testing.T) {
result := GenerateHMACFn(tc.method, tc.path, tc.body, tc.clientId, tc.secret, tc.ts)
if result != tc.expected {
t.Errorf("Expected: %s, Got: %s", tc.expected, result)
}
})`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/mercury/mercury_test.go: `t.Run(tt.name, func(t *testing.T) {
packer := NewAbiPacker()
fl, err := packer.DecodeStreamsLookupRequest(tt.data)
assert.Equal(t, tt.expected, fl)
if tt.err != nil {
assert.Equal(t, tt.err.Error(), err.Error())
}
})`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/mercury/mercury_test.go: `t.Run(test.name, func(t *testing.T) {
packer := NewAbiPacker()
b, err := packer.UnpackGetUpkeepPrivilegeConfig(test.raw)
if !test.errored {
require.NoError(t, err, "should unpack bytes from abi encoded value")
// the actual struct to unmarshal into is not available to this
// package so basic json encoding is the limit of the following test
var data map[string]interface{}
err = json.Unmarshal(b, &data)
assert.NoError(t, err, "packed data should unmarshal using json encoding")
assert.Equal(t, []byte(`{"mercuryEnabled":true}`), b)
} else {
assert.NotNil(t, err, "error expected from unpack function")
}
})`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/mercury/mercury_test.go: `err = json.Unmarshal(b, &data)`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/mercury/mercury_test.go: `t.Run(test.name, func(t *testing.T) {
packer := NewAbiPacker()
b, err := packer.PackGetUpkeepPrivilegeConfig(test.upkeepId)
if !test.errored {
require.NoError(t, err, "no error expected from packing")
assert.Equal(t, test.raw, b, "raw bytes for output should match expected")
} else {
assert.NotNil(t, err, "error expected from packing function")
}
})`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/mercury/mercury_test.go: `t.Run(test.Name, func(t *testing.T) {
packer := NewAbiPacker()
state, needed, pd, failureReason, gasUsed, err := packer.UnpackCheckCallbackResult(test.CallbackResp)
if test.ErrorString != "" {
assert.EqualError(t, err, test.ErrorString+hexutil.Encode(test.CallbackResp))
} else {
assert.Nil(t, err)
}
assert.Equal(t, test.UpkeepNeeded, needed)
assert.Equal(t, test.PerformData, pd)
assert.Equal(t, test.FailureReason, failureReason)
assert.Equal(t, test.GasUsed, gasUsed)
assert.Equal(t, test.State, state)
})`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/mercury/mercury_test.go: `t.Run(test.name, func(t *testing.T) {
packer := NewAbiPacker()
b, err := packer.PackUserCheckErrorHandler(test.errCode, test.extraData)
if !test.errored {
require.NoError(t, err, "no error expected from packing")
assert.Equal(t, test.rawOutput, b, "raw bytes for output should match expected")
} else {
assert.NotNil(t, err, "error expected from packing function")
}
})`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/mercury/mercury_test.go: `t.Run(tc.name, func(t *testing.T) {
cfg := newMercuryConfigMock()
var result time.Duration
for i := 0; i < tc.times; i++ {
result = CalculateStreamsRetryConfigFn(tc.upkeepType, "prk", cfg)
}
assert.Equal(t, tc.expected, result)
})`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/mercury/mercury_test.go: `result = CalculateStreamsRetryConfigFn(tc.upkeepType, "prk", cfg)`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/mercury/mercury_test.go: `.Run(tc.name, func(t *testing.T) {
result := GenerateHMACFn(tc.method, tc.path, tc.body, tc.clientId, tc.secret, tc.ts)
if result != tc.expected {
t.Errorf("Expected: %s, Got: %s", tc.expected, result)
}
})`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/mercury/mercury_test.go: `.MustDecode("0xf055e4a200000000000000000000000000000000000000000000000000000000000000a000000000000000000000000000000000000000000000000000000000000000e000000000000000000000000000000000000000000000000000000000000002400000000000000000000000000000000000000000000000000000000002435eb50000000000000000000000000000000000000000000000000000000000000280000000000000000000000000000000000000000000000000000000000000000966656564496448657800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000004000000000000000000000000000000000000000000000000000000000000000c000000000000000000000000000000000000000000000000000000000000000423078343535343438326435353533343432643431353234323439353435323535346432643534343535333534346534353534303030303030303030303030303030300000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000042307834323534343332643535353334343264343135323432343935343532353534643264353434353533353434653435353430303030303030303030303030303030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000b626c6f636b4e756d62657200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000140000000000000000000000000000000000000064000000000000000000000000")`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/mercury/mercury_test.go: `.NewInt(37969589)`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/mercury/mercury_test.go: `.New("unpack error: invalid identifier, have 0x01020304 want 0xf055e4a2")`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/mercury/mercury_test.go: `.Run(tt.name, func(t *testing.T) {
packer := NewAbiPacker()
fl, err := packer.DecodeStreamsLookupRequest(tt.data)
assert.Equal(t, tt.expected, fl)
if tt.err != nil {
assert.Equal(t, tt.err.Error(), err.Error())
}
})`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/mercury/mercury_test.go: `.DecodeStreamsLookupRequest(tt.data)`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/mercury/mercury_test.go: `.Decode("0x000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000177b226d657263757279456e61626c6564223a747275657d000000000000000000")`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/mercury/mercury_test.go: `.Decode("0x")`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/mercury/mercury_test.go: `.Run(test.name, func(t *testing.T) {
packer := NewAbiPacker()
b, err := packer.UnpackGetUpkeepPrivilegeConfig(test.raw)
if !test.errored {
require.NoError(t, err, "should unpack bytes from abi encoded value")
// the actual struct to unmarshal into is not available to this
// package so basic json encoding is the limit of the following test
var data map[string]interface{}
err = json.Unmarshal(b, &data)
assert.NoError(t, err, "packed data should unmarshal using json encoding")
assert.Equal(t, []byte(`{"mercuryEnabled":true}`), b)
} else {
assert.NotNil(t, err, "error expected from unpack function")
}
})`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/mercury/mercury_test.go: `.UnpackGetUpkeepPrivilegeConfig(test.raw)`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/mercury/mercury_test.go: `.Unmarshal(b, &data)`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/mercury/mercury_test.go: `.SetString("52236098515066839510538748191966098678939830769967377496848891145101407612976", 10)`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/mercury/mercury_test.go: `.Decode("0x19d97a94737c9583000000000000000000000001ea8ed6d0617dd5b3b87374020efaf030")`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/mercury/mercury_test.go: `.Run(test.name, func(t *testing.T) {
packer := NewAbiPacker()
b, err := packer.PackGetUpkeepPrivilegeConfig(test.upkeepId)
if !test.errored {
require.NoError(t, err, "no error expected from packing")
assert.Equal(t, test.raw, b, "raw bytes for output should match expected")
} else {
assert.NotNil(t, err, "error expected from packing function")
}
})`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/mercury/mercury_test.go: `.PackGetUpkeepPrivilegeConfig(test.upkeepId)`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/mercury/mercury_test.go: `.NewInt(11796)`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/mercury/mercury_test.go: `.NewInt(13008)`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/mercury/mercury_test.go: `.Run(test.Name, func(t *testing.T) {
packer := NewAbiPacker()
state, needed, pd, failureReason, gasUsed, err := packer.UnpackCheckCallbackResult(test.CallbackResp)
if test.ErrorString != "" {
assert.EqualError(t, err, test.ErrorString+hexutil.Encode(test.CallbackResp))
} else {
assert.Nil(t, err)
}
assert.Equal(t, test.UpkeepNeeded, needed)
assert.Equal(t, test.PerformData, pd)
assert.Equal(t, test.FailureReason, failureReason)
assert.Equal(t, test.GasUsed, gasUsed)
assert.Equal(t, test.State, state)
})`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/mercury/mercury_test.go: `.UnpackCheckCallbackResult(test.CallbackResp)`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/mercury/mercury_test.go: `.Decode("0x19d97a94737c9583000000000000000000000001ea8ed6d0617dd5b3b87374020efaf030")`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/mercury/mercury_test.go: `.Run(test.name, func(t *testing.T) {
packer := NewAbiPacker()
b, err := packer.PackUserCheckErrorHandler(test.errCode, test.extraData)
if !test.errored {
require.NoError(t, err, "no error expected from packing")
assert.Equal(t, test.rawOutput, b, "raw bytes for output should match expected")
} else {
assert.NotNil(t, err, "error expected from packing function")
}
})`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/mercury/mercury_test.go: `.PackUserCheckErrorHandler(test.errCode, test.extraData)`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/mercury/mercury_test.go: `.Run(tc.name, func(t *testing.T) {
cfg := newMercuryConfigMock()
var result time.Duration
for i := 0; i < tc.times; i++ {
result = CalculateStreamsRetryConfigFn(tc.upkeepType, "prk", cfg)
}
assert.Equal(t, tc.expected, result)
})`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/mercury/streams/streams_test.go: `t.Run(tt.name, func(t *testing.T) {
client := new(evmClientMocks.Client)
s := setupStreams(t)
defer s.Close()
userPayload, err := s.packer.PackUserCheckErrorHandler(tt.errCode, tt.lookup.ExtraData)
require.Nil(t, err)
payload, err := s.abi.Pack("executeCallback", tt.lookup.UpkeepId, userPayload)
require.Nil(t, err)
args := map[string]interface{}{
"from": zeroAddress,
"to": s.registry.Address().Hex(),
"data": hexutil.Bytes(payload),
}
client.On("CallContext", mock.Anything, mock.AnythingOfType("*hexutil.Bytes"), "eth_call", args, hexutil.EncodeUint64(tt.lookup.Block)).Return(tt.callbackErr).
Run(func(args mock.Arguments) {
by := args.Get(1).(*hexutil.Bytes)
*by = tt.callbackResp
}).Once()
s.client = client
err = s.CheckErrorHandler(testutils.Context(t), tt.errCode, tt.lookup, tt.checkResults, 0)
tt.wantErr(t, err, fmt.Sprintf("Error assertion failed: %v", tt.name))
assert.Equal(t, uint8(tt.state), tt.checkResults[0].PipelineExecutionState)
assert.Equal(t, tt.retryable, tt.checkResults[0].Retryable)
assert.Equal(t, tt.upkeepNeeded, tt.checkResults[0].Eligible)
assert.Equal(t, tt.performData, tt.checkResults[0].PerformData)
})`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/mercury/streams/streams_test.go: `client.On("CallContext", mock.Anything, mock.AnythingOfType("*hexutil.Bytes"), "eth_call", args, hexutil.EncodeUint64(tt.lookup.Block)).Return(tt.callbackErr).
Run(func(args mock.Arguments) {
by := args.Get(1).(*hexutil.Bytes)
*by = tt.callbackResp
}).Once()`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/mercury/streams/streams_test.go: `*by = tt.callbackResp`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/mercury/streams/streams_test.go: `s.client = client`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/mercury/streams/streams_test.go: `err = s.CheckErrorHandler(testutils.Context(t), tt.errCode, tt.lookup, tt.checkResults, 0)`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/mercury/streams/streams_test.go: `tt.wantErr(t, err, fmt.Sprintf("Error assertion failed: %v", tt.name))`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/mercury/streams/streams_test.go: `t.Run(tt.name, func(t *testing.T) {
client := new(evmClientMocks.Client)
s := setupStreams(t)
defer s.Close()
payload, err := s.abi.Pack("checkCallback", tt.lookup.UpkeepId, values, tt.lookup.ExtraData)
require.Nil(t, err)
args := map[string]interface{}{
"from": zeroAddress,
"to": s.registry.Address().Hex(),
"data": hexutil.Bytes(payload),
}
client.On("CallContext", mock.Anything, mock.AnythingOfType("*hexutil.Bytes"), "eth_call", args, hexutil.EncodeUint64(tt.lookup.Block)).Return(tt.callbackErr).
Run(func(args mock.Arguments) {
by := args.Get(1).(*hexutil.Bytes)
*by = tt.callbackResp
}).Once()
s.client = client
err = s.CheckCallback(testutils.Context(t), tt.values, tt.lookup, tt.input, 0)
tt.wantErr(t, err, fmt.Sprintf("Error assertion failed: %v", tt.name))
assert.Equal(t, uint8(tt.state), tt.input[0].PipelineExecutionState)
assert.Equal(t, tt.retryable, tt.input[0].Retryable)
assert.Equal(t, tt.upkeepNeeded, tt.input[0].Eligible)
})`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/mercury/streams/streams_test.go: `client.On("CallContext", mock.Anything, mock.AnythingOfType("*hexutil.Bytes"), "eth_call", args, hexutil.EncodeUint64(tt.lookup.Block)).Return(tt.callbackErr).
Run(func(args mock.Arguments) {
by := args.Get(1).(*hexutil.Bytes)
*by = tt.callbackResp
}).Once()`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/mercury/streams/streams_test.go: `*by = tt.callbackResp`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/mercury/streams/streams_test.go: `s.client = client`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/mercury/streams/streams_test.go: `err = s.CheckCallback(testutils.Context(t), tt.values, tt.lookup, tt.input, 0)`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/mercury/streams/streams_test.go: `tt.wantErr(t, err, fmt.Sprintf("Error assertion failed: %v", tt.name))`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/mercury/streams/streams_test.go: `t.Run(tt.name, func(t *testing.T) {
s := setupStreams(t)
defer s.Close()
s.registry = tt.registry
client := new(evmClientMocks.Client)
s.client = client
mc := new(MockMercuryConfigProvider)
mc.On("IsUpkeepAllowed", mock.Anything).Return(tt.allowed, tt.cached).Once()
mc.On("SetUpkeepAllowed", mock.Anything, mock.Anything, mock.Anything).Return().Once()
s.mercuryConfig = mc
if !tt.cached {
if tt.err != nil {
bContractCfg, err := s.abi.Methods["getUpkeepPrivilegeConfig"].Outputs.PackValues([]interface{}{tt.config})
require.Nil(t, err)
payload, err := s.abi.Pack("getUpkeepPrivilegeConfig", upkeepId)
require.Nil(t, err)
args := map[string]interface{}{
"to": s.registry.Address().Hex(),
"data": hexutil.Bytes(payload),
}
client.On("CallContext", mock.Anything, mock.AnythingOfType("*hexutil.Bytes"), "eth_call", args, mock.AnythingOfType("string")).
Return(tt.ethCallErr).
Run(func(args mock.Arguments) {
b := args.Get(1).(*hexutil.Bytes)
*b = bContractCfg
}).Once()
} else {
cfg := UpkeepPrivilegeConfig{MercuryEnabled: tt.allowed}
bCfg, err := json.Marshal(cfg)
require.Nil(t, err)
bContractCfg, err := s.abi.Methods["getUpkeepPrivilegeConfig"].Outputs.PackValues([]interface{}{bCfg})
require.Nil(t, err)
payload, err := s.abi.Pack("getUpkeepPrivilegeConfig", upkeepId)
require.Nil(t, err)
args := map[string]interface{}{
"to": s.registry.Address().Hex(),
"data": hexutil.Bytes(payload),
}
client.On("CallContext", mock.Anything, mock.AnythingOfType("*hexutil.Bytes"), "eth_call", args, mock.AnythingOfType("string")).Return(nil).
Run(func(args mock.Arguments) {
b := args.Get(1).(*hexutil.Bytes)
*b = bContractCfg
}).Once()
}
}
opts := &bind.CallOpts{
BlockNumber: big.NewInt(10),
}
state, reason, retryable, allowed, err := s.AllowedToUseMercury(opts, upkeepId)
assert.Equal(t, tt.err, err)
assert.Equal(t, tt.allowed, allowed)
assert.Equal(t, tt.state, state)
assert.Equal(t, tt.reason, reason)
assert.Equal(t, tt.retryable, retryable)
})`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/mercury/streams/streams_test.go: `s.registry = tt.registry`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/mercury/streams/streams_test.go: `s.client = client`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/mercury/streams/streams_test.go: `mc.On("IsUpkeepAllowed", mock.Anything).Return(tt.allowed, tt.cached).Once()`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/mercury/streams/streams_test.go: `mc.On("SetUpkeepAllowed", mock.Anything, mock.Anything, mock.Anything).Return().Once()`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/mercury/streams/streams_test.go: `s.mercuryConfig = mc`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/mercury/streams/streams_test.go: `client.On("CallContext", mock.Anything, mock.AnythingOfType("*hexutil.Bytes"), "eth_call", args, mock.AnythingOfType("string")).
Return(tt.ethCallErr).
Run(func(args mock.Arguments) {
b := args.Get(1).(*hexutil.Bytes)
*b = bContractCfg
}).Once()`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/mercury/streams/streams_test.go: `*b = bContractCfg`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/mercury/streams/streams_test.go: `client.On("CallContext", mock.Anything, mock.AnythingOfType("*hexutil.Bytes"), "eth_call", args, mock.AnythingOfType("string")).Return(nil).
Run(func(args mock.Arguments) {
b := args.Get(1).(*hexutil.Bytes)
*b = bContractCfg
}).Once()`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/mercury/streams/streams_test.go: `*b = bContractCfg`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/mercury/streams/streams_test.go: `copy(upkeepIdentifier[:], upkeepId.Bytes())`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/mercury/streams/streams_test.go: `t.Run(tt.name, func(t *testing.T) {
s := setupStreams(t)
defer s.Close()
s.registry = tt.registry
client := new(evmClientMocks.Client)
s.client = client
mc := new(MockMercuryConfigProvider)
mc.On("IsUpkeepAllowed", mock.Anything).Return(tt.hasPermission, tt.cachedAdminCfg).Once()
mc.On("SetUpkeepAllowed", mock.Anything, mock.Anything, mock.Anything).Return().Once()
s.mercuryConfig = mc
if !tt.cachedAdminCfg && !tt.hasError {
cfg := UpkeepPrivilegeConfig{MercuryEnabled: tt.hasPermission}
bCfg, err := json.Marshal(cfg)
require.Nil(t, err)
bContractCfg, err := s.abi.Methods["getUpkeepPrivilegeConfig"].Outputs.PackValues([]interface{}{bCfg})
require.Nil(t, err)
payload, err := s.abi.Pack("getUpkeepPrivilegeConfig", upkeepId)
require.Nil(t, err)
args := map[string]interface{}{
"to": s.registry.Address().Hex(),
"data": hexutil.Bytes(payload),
}
client.On("CallContext", mock.Anything, mock.AnythingOfType("*hexutil.Bytes"), "eth_call", args, mock.AnythingOfType("string")).Return(nil).
Run(func(args mock.Arguments) {
b := args.Get(1).(*hexutil.Bytes)
*b = bContractCfg
}).Once()
}
if len(tt.blobs) > 0 {
if tt.v3 {
hc03 := new(MockHttpClient)
v03HttpClient := v03.NewClient(s.mercuryConfig, hc03, s.threadCtrl, s.lggr)
s.v03Client = v03HttpClient
mr1 := v03.MercuryV03Response{
Reports: []v03.MercuryV03Report{{FullReport: tt.blobs["0x4554482d5553442d415242495452554d2d544553544e45540000000000000000"]}, {FullReport: tt.blobs["0x4254432d5553442d415242495452554d2d544553544e45540000000000000000"]}}}
b1, err := json.Marshal(mr1)
assert.Nil(t, err)
resp1 := &http.Response{
StatusCode: http.StatusOK,
Body: io.NopCloser(bytes.NewReader(b1)),
}
hc03.On("Do", mock.Anything).Return(resp1, nil).Once()
} else {
hc02 := new(MockHttpClient)
v02HttpClient := v02.NewClient(s.mercuryConfig, hc02, s.threadCtrl, s.lggr)
s.v02Client = v02HttpClient
mr1 := v02.MercuryV02Response{ChainlinkBlob: tt.blobs["0x4554482d5553442d415242495452554d2d544553544e45540000000000000000"]}
b1, err := json.Marshal(mr1)
assert.Nil(t, err)
resp1 := &http.Response{
StatusCode: http.StatusOK,
Body: io.NopCloser(bytes.NewReader(b1)),
}
mr2 := v02.MercuryV02Response{ChainlinkBlob: tt.blobs["0x4254432d5553442d415242495452554d2d544553544e45540000000000000000"]}
b2, err := json.Marshal(mr2)
assert.Nil(t, err)
resp2 := &http.Response{
StatusCode: http.StatusOK,
Body: io.NopCloser(bytes.NewReader(b2)),
}
hc02.On("Do", mock.MatchedBy(func(req *http.Request) bool {
return strings.Contains(req.URL.String(), "0x4254432d5553442d415242495452554d2d544553544e45540000000000000000")
})).Return(resp2, nil).Once()
hc02.On("Do", mock.MatchedBy(func(req *http.Request) bool {
return strings.Contains(req.URL.String(), "0x4554482d5553442d415242495452554d2d544553544e45540000000000000000")
})).Return(resp1, nil).Once()
}
}
if tt.callbackNeeded {
payload, err := s.abi.Pack("checkCallback", upkeepId, tt.values, tt.extraData)
require.Nil(t, err)
args := map[string]interface{}{
"from": zeroAddress,
"to": s.registry.Address().Hex(),
"data": hexutil.Bytes(payload),
}
client.On("CallContext", mock.Anything, mock.AnythingOfType("*hexutil.Bytes"), "eth_call", args, hexutil.EncodeUint64(uint64(blockNum))).Return(nil).
Run(func(args mock.Arguments) {
b := args.Get(1).(*hexutil.Bytes)
*b = tt.checkCallbackResp
}).Once()
}
got := s.Lookup(testutils.Context(t), tt.input)
assert.Equal(t, tt.expectedResults, got, tt.name)
})`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/mercury/streams/streams_test.go: `s.registry = tt.registry`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/mercury/streams/streams_test.go: `s.client = client`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/mercury/streams/streams_test.go: `mc.On("IsUpkeepAllowed", mock.Anything).Return(tt.hasPermission, tt.cachedAdminCfg).Once()`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/mercury/streams/streams_test.go: `mc.On("SetUpkeepAllowed", mock.Anything, mock.Anything, mock.Anything).Return().Once()`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/mercury/streams/streams_test.go: `s.mercuryConfig = mc`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/mercury/streams/streams_test.go: `client.On("CallContext", mock.Anything, mock.AnythingOfType("*hexutil.Bytes"), "eth_call", args, mock.AnythingOfType("string")).Return(nil).
Run(func(args mock.Arguments) {
b := args.Get(1).(*hexutil.Bytes)
*b = bContractCfg
}).Once()`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/mercury/streams/streams_test.go: `*b = bContractCfg`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/mercury/streams/streams_test.go: `s.v03Client = v03HttpClient`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/mercury/streams/streams_test.go: `hc03.On("Do", mock.Anything).Return(resp1, nil).Once()`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/mercury/streams/streams_test.go: `s.v02Client = v02HttpClient`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/mercury/streams/streams_test.go: `hc02.On("Do", mock.MatchedBy(func(req *http.Request) bool {
return strings.Contains(req.URL.String(), "0x4254432d5553442d415242495452554d2d544553544e45540000000000000000")
})).Return(resp2, nil).Once()`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/mercury/streams/streams_test.go: `hc02.On("Do", mock.MatchedBy(func(req *http.Request) bool {
return strings.Contains(req.URL.String(), "0x4554482d5553442d415242495452554d2d544553544e45540000000000000000")
})).Return(resp1, nil).Once()`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/mercury/streams/streams_test.go: `client.On("CallContext", mock.Anything, mock.AnythingOfType("*hexutil.Bytes"), "eth_call", args, hexutil.EncodeUint64(uint64(blockNum))).Return(nil).
Run(func(args mock.Arguments) {
b := args.Get(1).(*hexutil.Bytes)
*b = tt.checkCallbackResp
}).Once()`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/mercury/streams/streams_test.go: `*b = tt.checkCallbackResp`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/mercury/streams/streams_test.go: `.NewInt(123456789)`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/mercury/streams/streams_test.go: `.NewInt(100)`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/mercury/streams/streams_test.go: `.NewInt(18952430)`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/mercury/streams/streams_test.go: `.NewInt(100)`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/mercury/streams/streams_test.go: `.New("bad response")`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/mercury/streams/streams_test.go: `.NewInt(100)`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/mercury/streams/streams_test.go: `.Run(tt.name, func(t *testing.T) {
client := new(evmClientMocks.Client)
s := setupStreams(t)
defer s.Close()
userPayload, err := s.packer.PackUserCheckErrorHandler(tt.errCode, tt.lookup.ExtraData)
require.Nil(t, err)
payload, err := s.abi.Pack("executeCallback", tt.lookup.UpkeepId, userPayload)
require.Nil(t, err)
args := map[string]interface{}{
"from": zeroAddress,
"to": s.registry.Address().Hex(),
"data": hexutil.Bytes(payload),
}
client.On("CallContext", mock.Anything, mock.AnythingOfType("*hexutil.Bytes"), "eth_call", args, hexutil.EncodeUint64(tt.lookup.Block)).Return(tt.callbackErr).
Run(func(args mock.Arguments) {
by := args.Get(1).(*hexutil.Bytes)
*by = tt.callbackResp
}).Once()
s.client = client
err = s.CheckErrorHandler(testutils.Context(t), tt.errCode, tt.lookup, tt.checkResults, 0)
tt.wantErr(t, err, fmt.Sprintf("Error assertion failed: %v", tt.name))
assert.Equal(t, uint8(tt.state), tt.checkResults[0].PipelineExecutionState)
assert.Equal(t, tt.retryable, tt.checkResults[0].Retryable)
assert.Equal(t, tt.upkeepNeeded, tt.checkResults[0].Eligible)
assert.Equal(t, tt.performData, tt.checkResults[0].PerformData)
})`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/mercury/streams/streams_test.go: `.packer.PackUserCheckErrorHandler(tt.errCode, tt.lookup.ExtraData)`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/mercury/streams/streams_test.go: `.abi.Pack("executeCallback", tt.lookup.UpkeepId, userPayload)`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/mercury/streams/streams_test.go: `.registry.Address()`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/mercury/streams/streams_test.go: `.Hex()`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/mercury/streams/streams_test.go: `.Bytes(payload)`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/mercury/streams/streams_test.go: `.On("CallContext", mock.Anything, mock.AnythingOfType("*hexutil.Bytes"), "eth_call", args, hexutil.EncodeUint64(tt.lookup.Block))`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/mercury/streams/streams_test.go: `.AnythingOfType("*hexutil.Bytes")`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/mercury/streams/streams_test.go: `.EncodeUint64(tt.lookup.Block)`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/mercury/streams/streams_test.go: `.Return(tt.callbackErr)`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/mercury/streams/streams_test.go: `.
Run(func(args mock.Arguments) {
by := args.Get(1).(*hexutil.Bytes)
*by = tt.callbackResp
})`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/mercury/streams/streams_test.go: `.Get(1)`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/mercury/streams/streams_test.go: `.Once()`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/mercury/streams/streams_test.go: `.CheckErrorHandler(testutils.Context(t), tt.errCode, tt.lookup, tt.checkResults, 0)`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/mercury/streams/streams_test.go: `.Context(t)`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/mercury/streams/streams_test.go: `.wantErr(t, err, fmt.Sprintf("Error assertion failed: %v", tt.name))`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/mercury/streams/streams_test.go: `.Sprintf("Error assertion failed: %v", tt.name)`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/mercury/streams/streams_test.go: `.NewInt(123456789)`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/mercury/streams/streams_test.go: `.NewInt(100)`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/mercury/streams/streams_test.go: `.NewInt(18952430)`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/mercury/streams/streams_test.go: `.NewInt(100)`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/mercury/streams/streams_test.go: `.New("bad response")`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/mercury/streams/streams_test.go: `.New("bad response")`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/mercury/streams/streams_test.go: `.Run(tt.name, func(t *testing.T) {
client := new(evmClientMocks.Client)
s := setupStreams(t)
defer s.Close()
payload, err := s.abi.Pack("checkCallback", tt.lookup.UpkeepId, values, tt.lookup.ExtraData)
require.Nil(t, err)
args := map[string]interface{}{
"from": zeroAddress,
"to": s.registry.Address().Hex(),
"data": hexutil.Bytes(payload),
}
client.On("CallContext", mock.Anything, mock.AnythingOfType("*hexutil.Bytes"), "eth_call", args, hexutil.EncodeUint64(tt.lookup.Block)).Return(tt.callbackErr).
Run(func(args mock.Arguments) {
by := args.Get(1).(*hexutil.Bytes)
*by = tt.callbackResp
}).Once()
s.client = client
err = s.CheckCallback(testutils.Context(t), tt.values, tt.lookup, tt.input, 0)
tt.wantErr(t, err, fmt.Sprintf("Error assertion failed: %v", tt.name))
assert.Equal(t, uint8(tt.state), tt.input[0].PipelineExecutionState)
assert.Equal(t, tt.retryable, tt.input[0].Retryable)
assert.Equal(t, tt.upkeepNeeded, tt.input[0].Eligible)
})`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/mercury/streams/streams_test.go: `.abi.Pack("checkCallback", tt.lookup.UpkeepId, values, tt.lookup.ExtraData)`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/mercury/streams/streams_test.go: `.registry.Address()`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/mercury/streams/streams_test.go: `.Hex()`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/mercury/streams/streams_test.go: `.Bytes(payload)`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/mercury/streams/streams_test.go: `.On("CallContext", mock.Anything, mock.AnythingOfType("*hexutil.Bytes"), "eth_call", args, hexutil.EncodeUint64(tt.lookup.Block))`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/mercury/streams/streams_test.go: `.AnythingOfType("*hexutil.Bytes")`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/mercury/streams/streams_test.go: `.EncodeUint64(tt.lookup.Block)`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/mercury/streams/streams_test.go: `.Return(tt.callbackErr)`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/mercury/streams/streams_test.go: `.
Run(func(args mock.Arguments) {
by := args.Get(1).(*hexutil.Bytes)
*by = tt.callbackResp
})`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/mercury/streams/streams_test.go: `.Get(1)`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/mercury/streams/streams_test.go: `.Once()`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/mercury/streams/streams_test.go: `.CheckCallback(testutils.Context(t), tt.values, tt.lookup, tt.input, 0)`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/mercury/streams/streams_test.go: `.Context(t)`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/mercury/streams/streams_test.go: `.wantErr(t, err, fmt.Sprintf("Error assertion failed: %v", tt.name))`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/mercury/streams/streams_test.go: `.Sprintf("Error assertion failed: %v", tt.name)`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/mercury/streams/streams_test.go: `.SetString("71022726777042968814359024671382968091267501884371696415772139504780367423725", 10)`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/mercury/streams/streams_test.go: `.New("flaky RPC")`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/mercury/streams/streams_test.go: `.Run(tt.name, func(t *testing.T) {
s := setupStreams(t)
defer s.Close()
s.registry = tt.registry
client := new(evmClientMocks.Client)
s.client = client
mc := new(MockMercuryConfigProvider)
mc.On("IsUpkeepAllowed", mock.Anything).Return(tt.allowed, tt.cached).Once()
mc.On("SetUpkeepAllowed", mock.Anything, mock.Anything, mock.Anything).Return().Once()
s.mercuryConfig = mc
if !tt.cached {
if tt.err != nil {
bContractCfg, err := s.abi.Methods["getUpkeepPrivilegeConfig"].Outputs.PackValues([]interface{}{tt.config})
require.Nil(t, err)
payload, err := s.abi.Pack("getUpkeepPrivilegeConfig", upkeepId)
require.Nil(t, err)
args := map[string]interface{}{
"to": s.registry.Address().Hex(),
"data": hexutil.Bytes(payload),
}
client.On("CallContext", mock.Anything, mock.AnythingOfType("*hexutil.Bytes"), "eth_call", args, mock.AnythingOfType("string")).
Return(tt.ethCallErr).
Run(func(args mock.Arguments) {
b := args.Get(1).(*hexutil.Bytes)
*b = bContractCfg
}).Once()
} else {
cfg := UpkeepPrivilegeConfig{MercuryEnabled: tt.allowed}
bCfg, err := json.Marshal(cfg)
require.Nil(t, err)
bContractCfg, err := s.abi.Methods["getUpkeepPrivilegeConfig"].Outputs.PackValues([]interface{}{bCfg})
require.Nil(t, err)
payload, err := s.abi.Pack("getUpkeepPrivilegeConfig", upkeepId)
require.Nil(t, err)
args := map[string]interface{}{
"to": s.registry.Address().Hex(),
"data": hexutil.Bytes(payload),
}
client.On("CallContext", mock.Anything, mock.AnythingOfType("*hexutil.Bytes"), "eth_call", args, mock.AnythingOfType("string")).Return(nil).
Run(func(args mock.Arguments) {
b := args.Get(1).(*hexutil.Bytes)
*b = bContractCfg
}).Once()
}
}
opts := &bind.CallOpts{
BlockNumber: big.NewInt(10),
}
state, reason, retryable, allowed, err := s.AllowedToUseMercury(opts, upkeepId)
assert.Equal(t, tt.err, err)
assert.Equal(t, tt.allowed, allowed)
assert.Equal(t, tt.state, state)
assert.Equal(t, tt.reason, reason)
assert.Equal(t, tt.retryable, retryable)
})`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/mercury/streams/streams_test.go: `.On("IsUpkeepAllowed", mock.Anything)`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/mercury/streams/streams_test.go: `.Return(tt.allowed, tt.cached)`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/mercury/streams/streams_test.go: `.Once()`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/mercury/streams/streams_test.go: `.On("SetUpkeepAllowed", mock.Anything, mock.Anything, mock.Anything)`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/mercury/streams/streams_test.go: `.Return()`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/mercury/streams/streams_test.go: `.Once()`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/mercury/streams/streams_test.go: `.Outputs.PackValues([]interface{}{tt.config})`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/mercury/streams/streams_test.go: `.abi.Pack("getUpkeepPrivilegeConfig", upkeepId)`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/mercury/streams/streams_test.go: `.registry.Address()`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/mercury/streams/streams_test.go: `.Hex()`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/mercury/streams/streams_test.go: `.Bytes(payload)`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/mercury/streams/streams_test.go: `.On("CallContext", mock.Anything, mock.AnythingOfType("*hexutil.Bytes"), "eth_call", args, mock.AnythingOfType("string"))`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/mercury/streams/streams_test.go: `.AnythingOfType("*hexutil.Bytes")`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/mercury/streams/streams_test.go: `.AnythingOfType("string")`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/mercury/streams/streams_test.go: `.
Return(tt.ethCallErr)`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/mercury/streams/streams_test.go: `.
Run(func(args mock.Arguments) {
b := args.Get(1).(*hexutil.Bytes)
*b = bContractCfg
})`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/mercury/streams/streams_test.go: `.Get(1)`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/mercury/streams/streams_test.go: `.Once()`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/mercury/streams/streams_test.go: `.Marshal(cfg)`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/mercury/streams/streams_test.go: `.Outputs.PackValues([]interface{}{bCfg})`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/mercury/streams/streams_test.go: `.abi.Pack("getUpkeepPrivilegeConfig", upkeepId)`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/mercury/streams/streams_test.go: `.registry.Address()`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/mercury/streams/streams_test.go: `.Hex()`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/mercury/streams/streams_test.go: `.Bytes(payload)`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/mercury/streams/streams_test.go: `.On("CallContext", mock.Anything, mock.AnythingOfType("*hexutil.Bytes"), "eth_call", args, mock.AnythingOfType("string"))`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/mercury/streams/streams_test.go: `.AnythingOfType("*hexutil.Bytes")`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/mercury/streams/streams_test.go: `.AnythingOfType("string")`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/mercury/streams/streams_test.go: `.Return(nil)`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/mercury/streams/streams_test.go: `.
Run(func(args mock.Arguments) {
b := args.Get(1).(*hexutil.Bytes)
*b = bContractCfg
})`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/mercury/streams/streams_test.go: `.Get(1)`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/mercury/streams/streams_test.go: `.Once()`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/mercury/streams/streams_test.go: `.NewInt(10)`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/mercury/streams/streams_test.go: `.AllowedToUseMercury(opts, upkeepId)`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/mercury/streams/streams_test.go: `.SetString("71022726777042968814359024671382968091267501884371696415772139504780367423725", 10)`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/mercury/streams/streams_test.go: `.Bytes()`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/mercury/streams/streams_test.go: `.BlockNumber(37974374)`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/mercury/streams/streams_test.go: `.MustDecode("0xf055e4a200000000000000000000000000000000000000000000000000000000000000a000000000000000000000000000000000000000000000000000000000000000e0000000000000000000000000000000000000000000000000000000000000024000000000000000000000000000000000000000000000000000000000024371660000000000000000000000000000000000000000000000000000000000000280000000000000000000000000000000000000000000000000000000000000000966656564496448657800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000004000000000000000000000000000000000000000000000000000000000000000c000000000000000000000000000000000000000000000000000000000000000423078343535343438326435353533343432643431353234323439353435323535346432643534343535333534346534353534303030303030303030303030303030300000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000042307834323534343332643535353334343264343135323432343935343532353534643264353434353533353434653435353430303030303030303030303030303030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000b626c6f636b4e756d62657200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000140000000000000000000000000000000000000064000000000000000000000000")`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/mercury/streams/streams_test.go: `.MustDecode("0x0000000000000000000000000000000000000064")`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/mercury/streams/streams_test.go: `.MustDecode("0x00000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000080000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000063a400000000000000000000000000000000000000000000000000000000000006e0000000000000000000000000000000000000000000000000000000000000004000000000000000000000000000000000000000000000000000000000000006a000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000040000000000000000000000000000000000000000000000000000000000000034000000000000000000000000000000000000000000000000000000000000002e000066dfcd1ed2d95b18c948dbc5bd64c687afe93e4ca7d663ddec14c20090ad80000000000000000000000000000000000000000000000000000000004555638000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e000000000000000000000000000000000000000000000000000000000000002200000000000000000000000000000000000000000000000000000000000000280010100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001204554482d5553442d415242495452554d2d544553544e455400000000000000000000000000000000000000000000000000000000000000000000000064f0d4a0000000000000000000000000000000000000000000000000000000269ecbb83b000000000000000000000000000000000000000000000000000000269e4a4e14000000000000000000000000000000000000000000000000000000269f4d0edb000000000000000000000000000000000000000000000000000000000243716664b42d20423a47fb13ad3098b49b37f667548e6745fff958b663afe25a845f6100000000000000000000000000000000000000000000000000000000024371660000000000000000000000000000000000000000000000000000000064f0d4a00000000000000000000000000000000000000000000000000000000000000002381e91cffa9502c20de1ddcee350db3f715a5ab449448e3184a5b03c682356c6e2115f20663b3731e373cf33465a96da26f2876debb548f281e62e48f64c374200000000000000000000000000000000000000000000000000000000000000027db99e34135098d4e0bb9ae143ec9cd72fd63150c6d0cc5b38f4aa1aa42408377e8fe8e5ac489c9b7f62ff5aa7b05d2e892e7dee4cac631097247969b3b03fa300000000000000000000000000000000000000000000000000000000000002e00006da4a86c4933dd4a87b21dd2871aea29f706bcde43c70039355ac5b664fb5000000000000000000000000000000000000000000000000000000000454d118000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e000000000000000000000000000000000000000000000000000000000000002200000000000000000000000000000000000000000000000000000000000000280000100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001204254432d5553442d415242495452554d2d544553544e455400000000000000000000000000000000000000000000000000000000000000000000000064f0d4a0000000000000000000000000000000000000000000000000000002645f00877a000000000000000000000000000000000000000000000000000002645e1e1010000000000000000000000000000000000000000000000000000002645fe2fee4000000000000000000000000000000000000000000000000000000000243716664b42d20423a47fb13ad3098b49b37f667548e6745fff958b663afe25a845f6100000000000000000000000000000000000000000000000000000000024371660000000000000000000000000000000000000000000000000000000064f0d4a00000000000000000000000000000000000000000000000000000000000000002a0373c0bce7393673f819eb9681cac2773c2d718ce933eb858252195b17a9c832d7b0bee173c02c3c25fb65912b8b13b9302ede8423bab3544cb7a8928d5eb3600000000000000000000000000000000000000000000000000000000000000027d7b79d7646383a5dbf51edf14d53bd3ad0a9f3ca8affab3165e89d3ddce9cb17b58e892fafe4ecb24d2fde07c6a756029e752a5114c33c173df4e7d309adb4d00000000000000000000000000000000000000000000000000000000000000140000000000000000000000000000000000000064000000000000000000000000")`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/mercury/streams/streams_test.go: `.MustDecode("0x00066dfcd1ed2d95b18c948dbc5bd64c687afe93e4ca7d663ddec14c20090ad80000000000000000000000000000000000000000000000000000000004555638000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e000000000000000000000000000000000000000000000000000000000000002200000000000000000000000000000000000000000000000000000000000000280010100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001204554482d5553442d415242495452554d2d544553544e455400000000000000000000000000000000000000000000000000000000000000000000000064f0d4a0000000000000000000000000000000000000000000000000000000269ecbb83b000000000000000000000000000000000000000000000000000000269e4a4e14000000000000000000000000000000000000000000000000000000269f4d0edb000000000000000000000000000000000000000000000000000000000243716664b42d20423a47fb13ad3098b49b37f667548e6745fff958b663afe25a845f6100000000000000000000000000000000000000000000000000000000024371660000000000000000000000000000000000000000000000000000000064f0d4a00000000000000000000000000000000000000000000000000000000000000002381e91cffa9502c20de1ddcee350db3f715a5ab449448e3184a5b03c682356c6e2115f20663b3731e373cf33465a96da26f2876debb548f281e62e48f64c374200000000000000000000000000000000000000000000000000000000000000027db99e34135098d4e0bb9ae143ec9cd72fd63150c6d0cc5b38f4aa1aa42408377e8fe8e5ac489c9b7f62ff5aa7b05d2e892e7dee4cac631097247969b3b03fa3")`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/mercury/streams/streams_test.go: `.MustDecode("0x0006da4a86c4933dd4a87b21dd2871aea29f706bcde43c70039355ac5b664fb5000000000000000000000000000000000000000000000000000000000454d118000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e000000000000000000000000000000000000000000000000000000000000002200000000000000000000000000000000000000000000000000000000000000280000100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001204254432d5553442d415242495452554d2d544553544e455400000000000000000000000000000000000000000000000000000000000000000000000064f0d4a0000000000000000000000000000000000000000000000000000002645f00877a000000000000000000000000000000000000000000000000000002645e1e1010000000000000000000000000000000000000000000000000000002645fe2fee4000000000000000000000000000000000000000000000000000000000243716664b42d20423a47fb13ad3098b49b37f667548e6745fff958b663afe25a845f6100000000000000000000000000000000000000000000000000000000024371660000000000000000000000000000000000000000000000000000000064f0d4a00000000000000000000000000000000000000000000000000000000000000002a0373c0bce7393673f819eb9681cac2773c2d718ce933eb858252195b17a9c832d7b0bee173c02c3c25fb65912b8b13b9302ede8423bab3544cb7a8928d5eb3600000000000000000000000000000000000000000000000000000000000000027d7b79d7646383a5dbf51edf14d53bd3ad0a9f3ca8affab3165e89d3ddce9cb17b58e892fafe4ecb24d2fde07c6a756029e752a5114c33c173df4e7d309adb4d")`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/mercury/streams/streams_test.go: `.MustDecode("0x000000000000000000000000000000000000000000000000000000000000004000000000000000000000000000000000000000000000000000000000000006a000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000040000000000000000000000000000000000000000000000000000000000000034000000000000000000000000000000000000000000000000000000000000002e000066dfcd1ed2d95b18c948dbc5bd64c687afe93e4ca7d663ddec14c20090ad80000000000000000000000000000000000000000000000000000000004555638000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e000000000000000000000000000000000000000000000000000000000000002200000000000000000000000000000000000000000000000000000000000000280010100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001204554482d5553442d415242495452554d2d544553544e455400000000000000000000000000000000000000000000000000000000000000000000000064f0d4a0000000000000000000000000000000000000000000000000000000269ecbb83b000000000000000000000000000000000000000000000000000000269e4a4e14000000000000000000000000000000000000000000000000000000269f4d0edb000000000000000000000000000000000000000000000000000000000243716664b42d20423a47fb13ad3098b49b37f667548e6745fff958b663afe25a845f6100000000000000000000000000000000000000000000000000000000024371660000000000000000000000000000000000000000000000000000000064f0d4a00000000000000000000000000000000000000000000000000000000000000002381e91cffa9502c20de1ddcee350db3f715a5ab449448e3184a5b03c682356c6e2115f20663b3731e373cf33465a96da26f2876debb548f281e62e48f64c374200000000000000000000000000000000000000000000000000000000000000027db99e34135098d4e0bb9ae143ec9cd72fd63150c6d0cc5b38f4aa1aa42408377e8fe8e5ac489c9b7f62ff5aa7b05d2e892e7dee4cac631097247969b3b03fa300000000000000000000000000000000000000000000000000000000000002e00006da4a86c4933dd4a87b21dd2871aea29f706bcde43c70039355ac5b664fb5000000000000000000000000000000000000000000000000000000000454d118000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e000000000000000000000000000000000000000000000000000000000000002200000000000000000000000000000000000000000000000000000000000000280000100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001204254432d5553442d415242495452554d2d544553544e455400000000000000000000000000000000000000000000000000000000000000000000000064f0d4a0000000000000000000000000000000000000000000000000000002645f00877a000000000000000000000000000000000000000000000000000002645e1e1010000000000000000000000000000000000000000000000000000002645fe2fee4000000000000000000000000000000000000000000000000000000000243716664b42d20423a47fb13ad3098b49b37f667548e6745fff958b663afe25a845f6100000000000000000000000000000000000000000000000000000000024371660000000000000000000000000000000000000000000000000000000064f0d4a00000000000000000000000000000000000000000000000000000000000000002a0373c0bce7393673f819eb9681cac2773c2d718ce933eb858252195b17a9c832d7b0bee173c02c3c25fb65912b8b13b9302ede8423bab3544cb7a8928d5eb3600000000000000000000000000000000000000000000000000000000000000027d7b79d7646383a5dbf51edf14d53bd3ad0a9f3ca8affab3165e89d3ddce9cb17b58e892fafe4ecb24d2fde07c6a756029e752a5114c33c173df4e7d309adb4d00000000000000000000000000000000000000000000000000000000000000140000000000000000000000000000000000000064000000000000000000000000")`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/mercury/streams/streams_test.go: `.MustDecode("0x000000000000000000000000000000000000000000000000000000000000004000000000000000000000000000000000000000000000000000000000000006a000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000040000000000000000000000000000000000000000000000000000000000000034000000000000000000000000000000000000000000000000000000000000002e000066dfcd1ed2d95b18c948dbc5bd64c687afe93e4ca7d663ddec14c20090ad80000000000000000000000000000000000000000000000000000000004555638000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e000000000000000000000000000000000000000000000000000000000000002200000000000000000000000000000000000000000000000000000000000000280010100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001204554482d5553442d415242495452554d2d544553544e455400000000000000000000000000000000000000000000000000000000000000000000000064f0d4a0000000000000000000000000000000000000000000000000000000269ecbb83b000000000000000000000000000000000000000000000000000000269e4a4e14000000000000000000000000000000000000000000000000000000269f4d0edb000000000000000000000000000000000000000000000000000000000243716664b42d20423a47fb13ad3098b49b37f667548e6745fff958b663afe25a845f6100000000000000000000000000000000000000000000000000000000024371660000000000000000000000000000000000000000000000000000000064f0d4a00000000000000000000000000000000000000000000000000000000000000002381e91cffa9502c20de1ddcee350db3f715a5ab449448e3184a5b03c682356c6e2115f20663b3731e373cf33465a96da26f2876debb548f281e62e48f64c374200000000000000000000000000000000000000000000000000000000000000027db99e34135098d4e0bb9ae143ec9cd72fd63150c6d0cc5b38f4aa1aa42408377e8fe8e5ac489c9b7f62ff5aa7b05d2e892e7dee4cac631097247969b3b03fa300000000000000000000000000000000000000000000000000000000000002e00006da4a86c4933dd4a87b21dd2871aea29f706bcde43c70039355ac5b664fb5000000000000000000000000000000000000000000000000000000000454d118000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e000000000000000000000000000000000000000000000000000000000000002200000000000000000000000000000000000000000000000000000000000000280000100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001204254432d5553442d415242495452554d2d544553544e455400000000000000000000000000000000000000000000000000000000000000000000000064f0d4a0000000000000000000000000000000000000000000000000000002645f00877a000000000000000000000000000000000000000000000000000002645e1e1010000000000000000000000000000000000000000000000000000002645fe2fee4000000000000000000000000000000000000000000000000000000000243716664b42d20423a47fb13ad3098b49b37f667548e6745fff958b663afe25a845f6100000000000000000000000000000000000000000000000000000000024371660000000000000000000000000000000000000000000000000000000064f0d4a00000000000000000000000000000000000000000000000000000000000000002a0373c0bce7393673f819eb9681cac2773c2d718ce933eb858252195b17a9c832d7b0bee173c02c3c25fb65912b8b13b9302ede8423bab3544cb7a8928d5eb3600000000000000000000000000000000000000000000000000000000000000027d7b79d7646383a5dbf51edf14d53bd3ad0a9f3ca8affab3165e89d3ddce9cb17b58e892fafe4ecb24d2fde07c6a756029e752a5114c33c173df4e7d309adb4d00000000000000000000000000000000000000000000000000000000000000140000000000000000000000000000000000000064000000000000000000000000")`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/mercury/streams/streams_test.go: `.MustDecode("0xf055e4a200000000000000000000000000000000000000000000000000000000000000a000000000000000000000000000000000000000000000000000000000000000e0000000000000000000000000000000000000000000000000000000000000024000000000000000000000000000000000000000000000000000000000024371660000000000000000000000000000000000000000000000000000000000000280000000000000000000000000000000000000000000000000000000000000000966656564496448657800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000004000000000000000000000000000000000000000000000000000000000000000c000000000000000000000000000000000000000000000000000000000000000423078343535343438326435353533343432643431353234323439353435323535346432643534343535333534346534353534303030303030303030303030303030300000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000042307834323534343332643535353334343264343135323432343935343532353534643264353434353533353434653435353430303030303030303030303030303030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000b626c6f636b4e756d62657200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000140000000000000000000000000000000000000064000000000000000000000000")`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/mercury/streams/streams_test.go: `.MustDecode("0x0000000000000000000000000000000000000064")`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/mercury/streams/streams_test.go: `.MustDecode("0x00000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000080000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000063a400000000000000000000000000000000000000000000000000000000000006e0000000000000000000000000000000000000000000000000000000000000004000000000000000000000000000000000000000000000000000000000000006a000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000040000000000000000000000000000000000000000000000000000000000000034000000000000000000000000000000000000000000000000000000000000002e000066dfcd1ed2d95b18c948dbc5bd64c687afe93e4ca7d663ddec14c20090ad80000000000000000000000000000000000000000000000000000000004555638000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e000000000000000000000000000000000000000000000000000000000000002200000000000000000000000000000000000000000000000000000000000000280010100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001204554482d5553442d415242495452554d2d544553544e455400000000000000000000000000000000000000000000000000000000000000000000000064f0d4a0000000000000000000000000000000000000000000000000000000269ecbb83b000000000000000000000000000000000000000000000000000000269e4a4e14000000000000000000000000000000000000000000000000000000269f4d0edb000000000000000000000000000000000000000000000000000000000243716664b42d20423a47fb13ad3098b49b37f667548e6745fff958b663afe25a845f6100000000000000000000000000000000000000000000000000000000024371660000000000000000000000000000000000000000000000000000000064f0d4a00000000000000000000000000000000000000000000000000000000000000002381e91cffa9502c20de1ddcee350db3f715a5ab449448e3184a5b03c682356c6e2115f20663b3731e373cf33465a96da26f2876debb548f281e62e48f64c374200000000000000000000000000000000000000000000000000000000000000027db99e34135098d4e0bb9ae143ec9cd72fd63150c6d0cc5b38f4aa1aa42408377e8fe8e5ac489c9b7f62ff5aa7b05d2e892e7dee4cac631097247969b3b03fa300000000000000000000000000000000000000000000000000000000000002e00006da4a86c4933dd4a87b21dd2871aea29f706bcde43c70039355ac5b664fb5000000000000000000000000000000000000000000000000000000000454d118000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e000000000000000000000000000000000000000000000000000000000000002200000000000000000000000000000000000000000000000000000000000000280000100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001204254432d5553442d415242495452554d2d544553544e455400000000000000000000000000000000000000000000000000000000000000000000000064f0d4a0000000000000000000000000000000000000000000000000000002645f00877a000000000000000000000000000000000000000000000000000002645e1e1010000000000000000000000000000000000000000000000000000002645fe2fee4000000000000000000000000000000000000000000000000000000000243716664b42d20423a47fb13ad3098b49b37f667548e6745fff958b663afe25a845f6100000000000000000000000000000000000000000000000000000000024371660000000000000000000000000000000000000000000000000000000064f0d4a00000000000000000000000000000000000000000000000000000000000000002a0373c0bce7393673f819eb9681cac2773c2d718ce933eb858252195b17a9c832d7b0bee173c02c3c25fb65912b8b13b9302ede8423bab3544cb7a8928d5eb3600000000000000000000000000000000000000000000000000000000000000027d7b79d7646383a5dbf51edf14d53bd3ad0a9f3ca8affab3165e89d3ddce9cb17b58e892fafe4ecb24d2fde07c6a756029e752a5114c33c173df4e7d309adb4d00000000000000000000000000000000000000000000000000000000000000140000000000000000000000000000000000000064000000000000000000000000")`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/mercury/streams/streams_test.go: `.MustDecode("0x00066dfcd1ed2d95b18c948dbc5bd64c687afe93e4ca7d663ddec14c20090ad80000000000000000000000000000000000000000000000000000000004555638000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e000000000000000000000000000000000000000000000000000000000000002200000000000000000000000000000000000000000000000000000000000000280010100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001204554482d5553442d415242495452554d2d544553544e455400000000000000000000000000000000000000000000000000000000000000000000000064f0d4a0000000000000000000000000000000000000000000000000000000269ecbb83b000000000000000000000000000000000000000000000000000000269e4a4e14000000000000000000000000000000000000000000000000000000269f4d0edb000000000000000000000000000000000000000000000000000000000243716664b42d20423a47fb13ad3098b49b37f667548e6745fff958b663afe25a845f6100000000000000000000000000000000000000000000000000000000024371660000000000000000000000000000000000000000000000000000000064f0d4a00000000000000000000000000000000000000000000000000000000000000002381e91cffa9502c20de1ddcee350db3f715a5ab449448e3184a5b03c682356c6e2115f20663b3731e373cf33465a96da26f2876debb548f281e62e48f64c374200000000000000000000000000000000000000000000000000000000000000027db99e34135098d4e0bb9ae143ec9cd72fd63150c6d0cc5b38f4aa1aa42408377e8fe8e5ac489c9b7f62ff5aa7b05d2e892e7dee4cac631097247969b3b03fa3")`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/mercury/streams/streams_test.go: `.MustDecode("0x0006da4a86c4933dd4a87b21dd2871aea29f706bcde43c70039355ac5b664fb5000000000000000000000000000000000000000000000000000000000454d118000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e000000000000000000000000000000000000000000000000000000000000002200000000000000000000000000000000000000000000000000000000000000280000100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001204254432d5553442d415242495452554d2d544553544e455400000000000000000000000000000000000000000000000000000000000000000000000064f0d4a0000000000000000000000000000000000000000000000000000002645f00877a000000000000000000000000000000000000000000000000000002645e1e1010000000000000000000000000000000000000000000000000000002645fe2fee4000000000000000000000000000000000000000000000000000000000243716664b42d20423a47fb13ad3098b49b37f667548e6745fff958b663afe25a845f6100000000000000000000000000000000000000000000000000000000024371660000000000000000000000000000000000000000000000000000000064f0d4a00000000000000000000000000000000000000000000000000000000000000002a0373c0bce7393673f819eb9681cac2773c2d718ce933eb858252195b17a9c832d7b0bee173c02c3c25fb65912b8b13b9302ede8423bab3544cb7a8928d5eb3600000000000000000000000000000000000000000000000000000000000000027d7b79d7646383a5dbf51edf14d53bd3ad0a9f3ca8affab3165e89d3ddce9cb17b58e892fafe4ecb24d2fde07c6a756029e752a5114c33c173df4e7d309adb4d")`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/mercury/streams/streams_test.go: `.MustDecode("0x000000000000000000000000000000000000000000000000000000000000004000000000000000000000000000000000000000000000000000000000000006a000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000040000000000000000000000000000000000000000000000000000000000000034000000000000000000000000000000000000000000000000000000000000002e000066dfcd1ed2d95b18c948dbc5bd64c687afe93e4ca7d663ddec14c20090ad80000000000000000000000000000000000000000000000000000000004555638000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e000000000000000000000000000000000000000000000000000000000000002200000000000000000000000000000000000000000000000000000000000000280010100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001204554482d5553442d415242495452554d2d544553544e455400000000000000000000000000000000000000000000000000000000000000000000000064f0d4a0000000000000000000000000000000000000000000000000000000269ecbb83b000000000000000000000000000000000000000000000000000000269e4a4e14000000000000000000000000000000000000000000000000000000269f4d0edb000000000000000000000000000000000000000000000000000000000243716664b42d20423a47fb13ad3098b49b37f667548e6745fff958b663afe25a845f6100000000000000000000000000000000000000000000000000000000024371660000000000000000000000000000000000000000000000000000000064f0d4a00000000000000000000000000000000000000000000000000000000000000002381e91cffa9502c20de1ddcee350db3f715a5ab449448e3184a5b03c682356c6e2115f20663b3731e373cf33465a96da26f2876debb548f281e62e48f64c374200000000000000000000000000000000000000000000000000000000000000027db99e34135098d4e0bb9ae143ec9cd72fd63150c6d0cc5b38f4aa1aa42408377e8fe8e5ac489c9b7f62ff5aa7b05d2e892e7dee4cac631097247969b3b03fa300000000000000000000000000000000000000000000000000000000000002e00006da4a86c4933dd4a87b21dd2871aea29f706bcde43c70039355ac5b664fb5000000000000000000000000000000000000000000000000000000000454d118000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e000000000000000000000000000000000000000000000000000000000000002200000000000000000000000000000000000000000000000000000000000000280000100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001204254432d5553442d415242495452554d2d544553544e455400000000000000000000000000000000000000000000000000000000000000000000000064f0d4a0000000000000000000000000000000000000000000000000000002645f00877a000000000000000000000000000000000000000000000000000002645e1e1010000000000000000000000000000000000000000000000000000002645fe2fee4000000000000000000000000000000000000000000000000000000000243716664b42d20423a47fb13ad3098b49b37f667548e6745fff958b663afe25a845f6100000000000000000000000000000000000000000000000000000000024371660000000000000000000000000000000000000000000000000000000064f0d4a00000000000000000000000000000000000000000000000000000000000000002a0373c0bce7393673f819eb9681cac2773c2d718ce933eb858252195b17a9c832d7b0bee173c02c3c25fb65912b8b13b9302ede8423bab3544cb7a8928d5eb3600000000000000000000000000000000000000000000000000000000000000027d7b79d7646383a5dbf51edf14d53bd3ad0a9f3ca8affab3165e89d3ddce9cb17b58e892fafe4ecb24d2fde07c6a756029e752a5114c33c173df4e7d309adb4d00000000000000000000000000000000000000000000000000000000000000140000000000000000000000000000000000000064000000000000000000000000")`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/mercury/streams/streams_test.go: `.MustDecode("0x000000000000000000000000000000000000000000000000000000000000004000000000000000000000000000000000000000000000000000000000000006a000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000040000000000000000000000000000000000000000000000000000000000000034000000000000000000000000000000000000000000000000000000000000002e000066dfcd1ed2d95b18c948dbc5bd64c687afe93e4ca7d663ddec14c20090ad80000000000000000000000000000000000000000000000000000000004555638000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e000000000000000000000000000000000000000000000000000000000000002200000000000000000000000000000000000000000000000000000000000000280010100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001204554482d5553442d415242495452554d2d544553544e455400000000000000000000000000000000000000000000000000000000000000000000000064f0d4a0000000000000000000000000000000000000000000000000000000269ecbb83b000000000000000000000000000000000000000000000000000000269e4a4e14000000000000000000000000000000000000000000000000000000269f4d0edb000000000000000000000000000000000000000000000000000000000243716664b42d20423a47fb13ad3098b49b37f667548e6745fff958b663afe25a845f6100000000000000000000000000000000000000000000000000000000024371660000000000000000000000000000000000000000000000000000000064f0d4a00000000000000000000000000000000000000000000000000000000000000002381e91cffa9502c20de1ddcee350db3f715a5ab449448e3184a5b03c682356c6e2115f20663b3731e373cf33465a96da26f2876debb548f281e62e48f64c374200000000000000000000000000000000000000000000000000000000000000027db99e34135098d4e0bb9ae143ec9cd72fd63150c6d0cc5b38f4aa1aa42408377e8fe8e5ac489c9b7f62ff5aa7b05d2e892e7dee4cac631097247969b3b03fa300000000000000000000000000000000000000000000000000000000000002e00006da4a86c4933dd4a87b21dd2871aea29f706bcde43c70039355ac5b664fb5000000000000000000000000000000000000000000000000000000000454d118000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e000000000000000000000000000000000000000000000000000000000000002200000000000000000000000000000000000000000000000000000000000000280000100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001204254432d5553442d415242495452554d2d544553544e455400000000000000000000000000000000000000000000000000000000000000000000000064f0d4a0000000000000000000000000000000000000000000000000000002645f00877a000000000000000000000000000000000000000000000000000002645e1e1010000000000000000000000000000000000000000000000000000002645fe2fee4000000000000000000000000000000000000000000000000000000000243716664b42d20423a47fb13ad3098b49b37f667548e6745fff958b663afe25a845f6100000000000000000000000000000000000000000000000000000000024371660000000000000000000000000000000000000000000000000000000064f0d4a00000000000000000000000000000000000000000000000000000000000000002a0373c0bce7393673f819eb9681cac2773c2d718ce933eb858252195b17a9c832d7b0bee173c02c3c25fb65912b8b13b9302ede8423bab3544cb7a8928d5eb3600000000000000000000000000000000000000000000000000000000000000027d7b79d7646383a5dbf51edf14d53bd3ad0a9f3ca8affab3165e89d3ddce9cb17b58e892fafe4ecb24d2fde07c6a756029e752a5114c33c173df4e7d309adb4d00000000000000000000000000000000000000000000000000000000000000140000000000000000000000000000000000000064000000000000000000000000")`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/mercury/streams/streams_test.go: `.MustDecode("0xf055e4a200000000000000000000000000000000000000000000000000000000000000a000000000000000000000000000000000000000000000000000000000000000e0000000000000000000000000000000000000000000000000000000000000024000000000000000000000000000000000000000000000000000000000024371660000000000000000000000000000000000000000000000000000000000000280000000000000000000000000000000000000000000000000000000000000000766656564494473000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000004000000000000000000000000000000000000000000000000000000000000000c000000000000000000000000000000000000000000000000000000000000000423078343535343438326435353533343432643431353234323439353435323535346432643534343535333534346534353534303030303030303030303030303030300000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000042307834323534343332643535353334343264343135323432343935343532353534643264353434353533353434653435353430303030303030303030303030303030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000b626c6f636b4e756d62657200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000140000000000000000000000000000000000000064000000000000000000000000")`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/mercury/streams/streams_test.go: `.MustDecode("0x0000000000000000000000000000000000000064")`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/mercury/streams/streams_test.go: `.MustDecode("0x00000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000080000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000063a400000000000000000000000000000000000000000000000000000000000006e0000000000000000000000000000000000000000000000000000000000000004000000000000000000000000000000000000000000000000000000000000006a000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000040000000000000000000000000000000000000000000000000000000000000034000000000000000000000000000000000000000000000000000000000000002e000066dfcd1ed2d95b18c948dbc5bd64c687afe93e4ca7d663ddec14c20090ad80000000000000000000000000000000000000000000000000000000004555638000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e000000000000000000000000000000000000000000000000000000000000002200000000000000000000000000000000000000000000000000000000000000280010100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001204554482d5553442d415242495452554d2d544553544e455400000000000000000000000000000000000000000000000000000000000000000000000064f0d4a0000000000000000000000000000000000000000000000000000000269ecbb83b000000000000000000000000000000000000000000000000000000269e4a4e14000000000000000000000000000000000000000000000000000000269f4d0edb000000000000000000000000000000000000000000000000000000000243716664b42d20423a47fb13ad3098b49b37f667548e6745fff958b663afe25a845f6100000000000000000000000000000000000000000000000000000000024371660000000000000000000000000000000000000000000000000000000064f0d4a00000000000000000000000000000000000000000000000000000000000000002381e91cffa9502c20de1ddcee350db3f715a5ab449448e3184a5b03c682356c6e2115f20663b3731e373cf33465a96da26f2876debb548f281e62e48f64c374200000000000000000000000000000000000000000000000000000000000000027db99e34135098d4e0bb9ae143ec9cd72fd63150c6d0cc5b38f4aa1aa42408377e8fe8e5ac489c9b7f62ff5aa7b05d2e892e7dee4cac631097247969b3b03fa300000000000000000000000000000000000000000000000000000000000002e00006da4a86c4933dd4a87b21dd2871aea29f706bcde43c70039355ac5b664fb5000000000000000000000000000000000000000000000000000000000454d118000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e000000000000000000000000000000000000000000000000000000000000002200000000000000000000000000000000000000000000000000000000000000280000100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001204254432d5553442d415242495452554d2d544553544e455400000000000000000000000000000000000000000000000000000000000000000000000064f0d4a0000000000000000000000000000000000000000000000000000002645f00877a000000000000000000000000000000000000000000000000000002645e1e1010000000000000000000000000000000000000000000000000000002645fe2fee4000000000000000000000000000000000000000000000000000000000243716664b42d20423a47fb13ad3098b49b37f667548e6745fff958b663afe25a845f6100000000000000000000000000000000000000000000000000000000024371660000000000000000000000000000000000000000000000000000000064f0d4a00000000000000000000000000000000000000000000000000000000000000002a0373c0bce7393673f819eb9681cac2773c2d718ce933eb858252195b17a9c832d7b0bee173c02c3c25fb65912b8b13b9302ede8423bab3544cb7a8928d5eb3600000000000000000000000000000000000000000000000000000000000000027d7b79d7646383a5dbf51edf14d53bd3ad0a9f3ca8affab3165e89d3ddce9cb17b58e892fafe4ecb24d2fde07c6a756029e752a5114c33c173df4e7d309adb4d00000000000000000000000000000000000000000000000000000000000000140000000000000000000000000000000000000064000000000000000000000000")`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/mercury/streams/streams_test.go: `.MustDecode("0x00066dfcd1ed2d95b18c948dbc5bd64c687afe93e4ca7d663ddec14c20090ad80000000000000000000000000000000000000000000000000000000004555638000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e000000000000000000000000000000000000000000000000000000000000002200000000000000000000000000000000000000000000000000000000000000280010100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001204554482d5553442d415242495452554d2d544553544e455400000000000000000000000000000000000000000000000000000000000000000000000064f0d4a0000000000000000000000000000000000000000000000000000000269ecbb83b000000000000000000000000000000000000000000000000000000269e4a4e14000000000000000000000000000000000000000000000000000000269f4d0edb000000000000000000000000000000000000000000000000000000000243716664b42d20423a47fb13ad3098b49b37f667548e6745fff958b663afe25a845f6100000000000000000000000000000000000000000000000000000000024371660000000000000000000000000000000000000000000000000000000064f0d4a00000000000000000000000000000000000000000000000000000000000000002381e91cffa9502c20de1ddcee350db3f715a5ab449448e3184a5b03c682356c6e2115f20663b3731e373cf33465a96da26f2876debb548f281e62e48f64c374200000000000000000000000000000000000000000000000000000000000000027db99e34135098d4e0bb9ae143ec9cd72fd63150c6d0cc5b38f4aa1aa42408377e8fe8e5ac489c9b7f62ff5aa7b05d2e892e7dee4cac631097247969b3b03fa3")`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/mercury/streams/streams_test.go: `.MustDecode("0x0006da4a86c4933dd4a87b21dd2871aea29f706bcde43c70039355ac5b664fb5000000000000000000000000000000000000000000000000000000000454d118000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e000000000000000000000000000000000000000000000000000000000000002200000000000000000000000000000000000000000000000000000000000000280000100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001204254432d5553442d415242495452554d2d544553544e455400000000000000000000000000000000000000000000000000000000000000000000000064f0d4a0000000000000000000000000000000000000000000000000000002645f00877a000000000000000000000000000000000000000000000000000002645e1e1010000000000000000000000000000000000000000000000000000002645fe2fee4000000000000000000000000000000000000000000000000000000000243716664b42d20423a47fb13ad3098b49b37f667548e6745fff958b663afe25a845f6100000000000000000000000000000000000000000000000000000000024371660000000000000000000000000000000000000000000000000000000064f0d4a00000000000000000000000000000000000000000000000000000000000000002a0373c0bce7393673f819eb9681cac2773c2d718ce933eb858252195b17a9c832d7b0bee173c02c3c25fb65912b8b13b9302ede8423bab3544cb7a8928d5eb3600000000000000000000000000000000000000000000000000000000000000027d7b79d7646383a5dbf51edf14d53bd3ad0a9f3ca8affab3165e89d3ddce9cb17b58e892fafe4ecb24d2fde07c6a756029e752a5114c33c173df4e7d309adb4d")`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/mercury/streams/streams_test.go: `.MustDecode("0x000000000000000000000000000000000000000000000000000000000000004000000000000000000000000000000000000000000000000000000000000006a000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000040000000000000000000000000000000000000000000000000000000000000034000000000000000000000000000000000000000000000000000000000000002e000066dfcd1ed2d95b18c948dbc5bd64c687afe93e4ca7d663ddec14c20090ad80000000000000000000000000000000000000000000000000000000004555638000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e000000000000000000000000000000000000000000000000000000000000002200000000000000000000000000000000000000000000000000000000000000280010100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001204554482d5553442d415242495452554d2d544553544e455400000000000000000000000000000000000000000000000000000000000000000000000064f0d4a0000000000000000000000000000000000000000000000000000000269ecbb83b000000000000000000000000000000000000000000000000000000269e4a4e14000000000000000000000000000000000000000000000000000000269f4d0edb000000000000000000000000000000000000000000000000000000000243716664b42d20423a47fb13ad3098b49b37f667548e6745fff958b663afe25a845f6100000000000000000000000000000000000000000000000000000000024371660000000000000000000000000000000000000000000000000000000064f0d4a00000000000000000000000000000000000000000000000000000000000000002381e91cffa9502c20de1ddcee350db3f715a5ab449448e3184a5b03c682356c6e2115f20663b3731e373cf33465a96da26f2876debb548f281e62e48f64c374200000000000000000000000000000000000000000000000000000000000000027db99e34135098d4e0bb9ae143ec9cd72fd63150c6d0cc5b38f4aa1aa42408377e8fe8e5ac489c9b7f62ff5aa7b05d2e892e7dee4cac631097247969b3b03fa300000000000000000000000000000000000000000000000000000000000002e00006da4a86c4933dd4a87b21dd2871aea29f706bcde43c70039355ac5b664fb5000000000000000000000000000000000000000000000000000000000454d118000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e000000000000000000000000000000000000000000000000000000000000002200000000000000000000000000000000000000000000000000000000000000280000100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001204254432d5553442d415242495452554d2d544553544e455400000000000000000000000000000000000000000000000000000000000000000000000064f0d4a0000000000000000000000000000000000000000000000000000002645f00877a000000000000000000000000000000000000000000000000000002645e1e1010000000000000000000000000000000000000000000000000000002645fe2fee4000000000000000000000000000000000000000000000000000000000243716664b42d20423a47fb13ad3098b49b37f667548e6745fff958b663afe25a845f6100000000000000000000000000000000000000000000000000000000024371660000000000000000000000000000000000000000000000000000000064f0d4a00000000000000000000000000000000000000000000000000000000000000002a0373c0bce7393673f819eb9681cac2773c2d718ce933eb858252195b17a9c832d7b0bee173c02c3c25fb65912b8b13b9302ede8423bab3544cb7a8928d5eb3600000000000000000000000000000000000000000000000000000000000000027d7b79d7646383a5dbf51edf14d53bd3ad0a9f3ca8affab3165e89d3ddce9cb17b58e892fafe4ecb24d2fde07c6a756029e752a5114c33c173df4e7d309adb4d00000000000000000000000000000000000000000000000000000000000000140000000000000000000000000000000000000064000000000000000000000000")`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/mercury/streams/streams_test.go: `.MustDecode("0x000000000000000000000000000000000000000000000000000000000000004000000000000000000000000000000000000000000000000000000000000006a000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000040000000000000000000000000000000000000000000000000000000000000034000000000000000000000000000000000000000000000000000000000000002e000066dfcd1ed2d95b18c948dbc5bd64c687afe93e4ca7d663ddec14c20090ad80000000000000000000000000000000000000000000000000000000004555638000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e000000000000000000000000000000000000000000000000000000000000002200000000000000000000000000000000000000000000000000000000000000280010100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001204554482d5553442d415242495452554d2d544553544e455400000000000000000000000000000000000000000000000000000000000000000000000064f0d4a0000000000000000000000000000000000000000000000000000000269ecbb83b000000000000000000000000000000000000000000000000000000269e4a4e14000000000000000000000000000000000000000000000000000000269f4d0edb000000000000000000000000000000000000000000000000000000000243716664b42d20423a47fb13ad3098b49b37f667548e6745fff958b663afe25a845f6100000000000000000000000000000000000000000000000000000000024371660000000000000000000000000000000000000000000000000000000064f0d4a00000000000000000000000000000000000000000000000000000000000000002381e91cffa9502c20de1ddcee350db3f715a5ab449448e3184a5b03c682356c6e2115f20663b3731e373cf33465a96da26f2876debb548f281e62e48f64c374200000000000000000000000000000000000000000000000000000000000000027db99e34135098d4e0bb9ae143ec9cd72fd63150c6d0cc5b38f4aa1aa42408377e8fe8e5ac489c9b7f62ff5aa7b05d2e892e7dee4cac631097247969b3b03fa300000000000000000000000000000000000000000000000000000000000002e00006da4a86c4933dd4a87b21dd2871aea29f706bcde43c70039355ac5b664fb5000000000000000000000000000000000000000000000000000000000454d118000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e000000000000000000000000000000000000000000000000000000000000002200000000000000000000000000000000000000000000000000000000000000280000100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001204254432d5553442d415242495452554d2d544553544e455400000000000000000000000000000000000000000000000000000000000000000000000064f0d4a0000000000000000000000000000000000000000000000000000002645f00877a000000000000000000000000000000000000000000000000000002645e1e1010000000000000000000000000000000000000000000000000000002645fe2fee4000000000000000000000000000000000000000000000000000000000243716664b42d20423a47fb13ad3098b49b37f667548e6745fff958b663afe25a845f6100000000000000000000000000000000000000000000000000000000024371660000000000000000000000000000000000000000000000000000000064f0d4a00000000000000000000000000000000000000000000000000000000000000002a0373c0bce7393673f819eb9681cac2773c2d718ce933eb858252195b17a9c832d7b0bee173c02c3c25fb65912b8b13b9302ede8423bab3544cb7a8928d5eb3600000000000000000000000000000000000000000000000000000000000000027d7b79d7646383a5dbf51edf14d53bd3ad0a9f3ca8affab3165e89d3ddce9cb17b58e892fafe4ecb24d2fde07c6a756029e752a5114c33c173df4e7d309adb4d00000000000000000000000000000000000000000000000000000000000000140000000000000000000000000000000000000064000000000000000000000000")`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/mercury/streams/streams_test.go: `.MustDecode("0xf055e4a200000000000000000000000000000000000000000000000000000000000000a000000000000000000000000000000000000000000000000000000000000000e000000000000000000000000000000000000000000000000000000000000001c00000000000000000000000000000000000000000000000000000000000000064000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000000166665656449644865783a52616e646f6d537472696e670000000000000000000000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000040000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000074554442d5553440000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000074254432d45544800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000b626c6f636b4e756d62657200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000043078303000000000000000000000000000000000000000000000000000000000")`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/mercury/streams/streams_test.go: `.MustDecode("0xf055e4a200000000000000000000000000000000000000000000000000000000000000a000000000000000000000000000000000000000000000000000000000000000e000000000000000000000000000000000000000000000000000000000000001c00000000000000000000000000000000000000000000000000000000000000064000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000000166665656449644865783a52616e646f6d537472696e670000000000000000000000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000040000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000074554442d5553440000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000074254432d45544800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000b626c6f636b4e756d62657200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000043078303000000000000000000000000000000000000000000000000000000000")`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/mercury/streams/streams_test.go: `.Run(tt.name, func(t *testing.T) {
s := setupStreams(t)
defer s.Close()
s.registry = tt.registry
client := new(evmClientMocks.Client)
s.client = client
mc := new(MockMercuryConfigProvider)
mc.On("IsUpkeepAllowed", mock.Anything).Return(tt.hasPermission, tt.cachedAdminCfg).Once()
mc.On("SetUpkeepAllowed", mock.Anything, mock.Anything, mock.Anything).Return().Once()
s.mercuryConfig = mc
if !tt.cachedAdminCfg && !tt.hasError {
cfg := UpkeepPrivilegeConfig{MercuryEnabled: tt.hasPermission}
bCfg, err := json.Marshal(cfg)
require.Nil(t, err)
bContractCfg, err := s.abi.Methods["getUpkeepPrivilegeConfig"].Outputs.PackValues([]interface{}{bCfg})
require.Nil(t, err)
payload, err := s.abi.Pack("getUpkeepPrivilegeConfig", upkeepId)
require.Nil(t, err)
args := map[string]interface{}{
"to": s.registry.Address().Hex(),
"data": hexutil.Bytes(payload),
}
client.On("CallContext", mock.Anything, mock.AnythingOfType("*hexutil.Bytes"), "eth_call", args, mock.AnythingOfType("string")).Return(nil).
Run(func(args mock.Arguments) {
b := args.Get(1).(*hexutil.Bytes)
*b = bContractCfg
}).Once()
}
if len(tt.blobs) > 0 {
if tt.v3 {
hc03 := new(MockHttpClient)
v03HttpClient := v03.NewClient(s.mercuryConfig, hc03, s.threadCtrl, s.lggr)
s.v03Client = v03HttpClient
mr1 := v03.MercuryV03Response{
Reports: []v03.MercuryV03Report{{FullReport: tt.blobs["0x4554482d5553442d415242495452554d2d544553544e45540000000000000000"]}, {FullReport: tt.blobs["0x4254432d5553442d415242495452554d2d544553544e45540000000000000000"]}}}
b1, err := json.Marshal(mr1)
assert.Nil(t, err)
resp1 := &http.Response{
StatusCode: http.StatusOK,
Body: io.NopCloser(bytes.NewReader(b1)),
}
hc03.On("Do", mock.Anything).Return(resp1, nil).Once()
} else {
hc02 := new(MockHttpClient)
v02HttpClient := v02.NewClient(s.mercuryConfig, hc02, s.threadCtrl, s.lggr)
s.v02Client = v02HttpClient
mr1 := v02.MercuryV02Response{ChainlinkBlob: tt.blobs["0x4554482d5553442d415242495452554d2d544553544e45540000000000000000"]}
b1, err := json.Marshal(mr1)
assert.Nil(t, err)
resp1 := &http.Response{
StatusCode: http.StatusOK,
Body: io.NopCloser(bytes.NewReader(b1)),
}
mr2 := v02.MercuryV02Response{ChainlinkBlob: tt.blobs["0x4254432d5553442d415242495452554d2d544553544e45540000000000000000"]}
b2, err := json.Marshal(mr2)
assert.Nil(t, err)
resp2 := &http.Response{
StatusCode: http.StatusOK,
Body: io.NopCloser(bytes.NewReader(b2)),
}
hc02.On("Do", mock.MatchedBy(func(req *http.Request) bool {
return strings.Contains(req.URL.String(), "0x4254432d5553442d415242495452554d2d544553544e45540000000000000000")
})).Return(resp2, nil).Once()
hc02.On("Do", mock.MatchedBy(func(req *http.Request) bool {
return strings.Contains(req.URL.String(), "0x4554482d5553442d415242495452554d2d544553544e45540000000000000000")
})).Return(resp1, nil).Once()
}
}
if tt.callbackNeeded {
payload, err := s.abi.Pack("checkCallback", upkeepId, tt.values, tt.extraData)
require.Nil(t, err)
args := map[string]interface{}{
"from": zeroAddress,
"to": s.registry.Address().Hex(),
"data": hexutil.Bytes(payload),
}
client.On("CallContext", mock.Anything, mock.AnythingOfType("*hexutil.Bytes"), "eth_call", args, hexutil.EncodeUint64(uint64(blockNum))).Return(nil).
Run(func(args mock.Arguments) {
b := args.Get(1).(*hexutil.Bytes)
*b = tt.checkCallbackResp
}).Once()
}
got := s.Lookup(testutils.Context(t), tt.input)
assert.Equal(t, tt.expectedResults, got, tt.name)
})`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/mercury/streams/streams_test.go: `.On("IsUpkeepAllowed", mock.Anything)`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/mercury/streams/streams_test.go: `.Return(tt.hasPermission, tt.cachedAdminCfg)`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/mercury/streams/streams_test.go: `.Once()`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/mercury/streams/streams_test.go: `.On("SetUpkeepAllowed", mock.Anything, mock.Anything, mock.Anything)`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/mercury/streams/streams_test.go: `.Return()`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/mercury/streams/streams_test.go: `.Once()`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/mercury/streams/streams_test.go: `.Marshal(cfg)`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/mercury/streams/streams_test.go: `.Outputs.PackValues([]interface{}{bCfg})`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/mercury/streams/streams_test.go: `.abi.Pack("getUpkeepPrivilegeConfig", upkeepId)`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/mercury/streams/streams_test.go: `.registry.Address()`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/mercury/streams/streams_test.go: `.Hex()`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/mercury/streams/streams_test.go: `.Bytes(payload)`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/mercury/streams/streams_test.go: `.On("CallContext", mock.Anything, mock.AnythingOfType("*hexutil.Bytes"), "eth_call", args, mock.AnythingOfType("string"))`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/mercury/streams/streams_test.go: `.AnythingOfType("*hexutil.Bytes")`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/mercury/streams/streams_test.go: `.AnythingOfType("string")`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/mercury/streams/streams_test.go: `.Return(nil)`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/mercury/streams/streams_test.go: `.
Run(func(args mock.Arguments) {
b := args.Get(1).(*hexutil.Bytes)
*b = bContractCfg
})`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/mercury/streams/streams_test.go: `.Get(1)`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/mercury/streams/streams_test.go: `.Once()`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/mercury/streams/streams_test.go: `.NewClient(s.mercuryConfig, hc03, s.threadCtrl, s.lggr)`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/mercury/streams/streams_test.go: `.Marshal(mr1)`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/mercury/streams/streams_test.go: `.NopCloser(bytes.NewReader(b1))`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/mercury/streams/streams_test.go: `.NewReader(b1)`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/mercury/streams/streams_test.go: `.On("Do", mock.Anything)`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/mercury/streams/streams_test.go: `.Return(resp1, nil)`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/mercury/streams/streams_test.go: `.Once()`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/mercury/streams/streams_test.go: `.NewClient(s.mercuryConfig, hc02, s.threadCtrl, s.lggr)`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/mercury/streams/streams_test.go: `.Marshal(mr1)`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/mercury/streams/streams_test.go: `.NopCloser(bytes.NewReader(b1))`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/mercury/streams/streams_test.go: `.NewReader(b1)`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/mercury/streams/streams_test.go: `.Marshal(mr2)`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/mercury/streams/streams_test.go: `.NopCloser(bytes.NewReader(b2))`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/mercury/streams/streams_test.go: `.NewReader(b2)`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/mercury/streams/streams_test.go: `.On("Do", mock.MatchedBy(func(req *http.Request) bool {
return strings.Contains(req.URL.String(), "0x4254432d5553442d415242495452554d2d544553544e45540000000000000000")
}))`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/mercury/streams/streams_test.go: `.MatchedBy(func(req *http.Request) bool {
return strings.Contains(req.URL.String(), "0x4254432d5553442d415242495452554d2d544553544e45540000000000000000")
})`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/mercury/streams/streams_test.go: `.Contains(req.URL.String(), "0x4254432d5553442d415242495452554d2d544553544e45540000000000000000")`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/mercury/streams/streams_test.go: `.URL.String()`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/mercury/streams/streams_test.go: `.Return(resp2, nil)`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/mercury/streams/streams_test.go: `.Once()`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/mercury/streams/streams_test.go: `.On("Do", mock.MatchedBy(func(req *http.Request) bool {
return strings.Contains(req.URL.String(), "0x4554482d5553442d415242495452554d2d544553544e45540000000000000000")
}))`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/mercury/streams/streams_test.go: `.MatchedBy(func(req *http.Request) bool {
return strings.Contains(req.URL.String(), "0x4554482d5553442d415242495452554d2d544553544e45540000000000000000")
})`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/mercury/streams/streams_test.go: `.Contains(req.URL.String(), "0x4554482d5553442d415242495452554d2d544553544e45540000000000000000")`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/mercury/streams/streams_test.go: `.URL.String()`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/mercury/streams/streams_test.go: `.Return(resp1, nil)`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/mercury/streams/streams_test.go: `.Once()`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/mercury/streams/streams_test.go: `.abi.Pack("checkCallback", upkeepId, tt.values, tt.extraData)`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/mercury/streams/streams_test.go: `.registry.Address()`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/mercury/streams/streams_test.go: `.Hex()`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/mercury/streams/streams_test.go: `.Bytes(payload)`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/mercury/streams/streams_test.go: `.On("CallContext", mock.Anything, mock.AnythingOfType("*hexutil.Bytes"), "eth_call", args, hexutil.EncodeUint64(uint64(blockNum)))`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/mercury/streams/streams_test.go: `.AnythingOfType("*hexutil.Bytes")`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/mercury/streams/streams_test.go: `.EncodeUint64(uint64(blockNum))`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/mercury/streams/streams_test.go: `.Return(nil)`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/mercury/streams/streams_test.go: `.
Run(func(args mock.Arguments) {
b := args.Get(1).(*hexutil.Bytes)
*b = tt.checkCallbackResp
})`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/mercury/streams/streams_test.go: `.Get(1)`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/mercury/streams/streams_test.go: `.Once()`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/mercury/streams/streams_test.go: `.Lookup(testutils.Context(t), tt.input)`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/mercury/streams/streams_test.go: `.Context(t)`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/mercury/v02/v02_request_test.go: `t.Run(tt.name, func(t *testing.T) {
c := setupClient(t)
defer c.Close()
hc := new(MockHttpClient)
mr := MercuryV02Response{ChainlinkBlob: tt.blob}
b, err := json.Marshal(mr)
assert.Nil(t, err)
if tt.responseBytes != "" {
b = []byte(tt.responseBytes)
}
if tt.retryNumber == 0 {
if tt.errorMessage != "" {
resp := &http.Response{
StatusCode: tt.statusCode,
Body: io.NopCloser(bytes.NewReader(b)),
}
hc.On("Do", mock.Anything).Return(resp, nil).Once()
} else {
resp := &http.Response{
StatusCode: http.StatusOK,
Body: io.NopCloser(bytes.NewReader(b)),
}
hc.On("Do", mock.Anything).Return(resp, nil).Once()
}
} else if tt.retryNumber > 0 && tt.retryNumber < totalAttempt {
retryResp := &http.Response{
StatusCode: tt.statusCode,
Body: io.NopCloser(bytes.NewReader(b)),
}
hc.On("Do", mock.Anything).Return(retryResp, nil).Times(tt.retryNumber)
resp := &http.Response{
StatusCode: tt.lastStatusCode,
Body: io.NopCloser(bytes.NewReader(b)),
}
hc.On("Do", mock.Anything).Return(resp, nil).Once()
} else {
resp := &http.Response{
StatusCode: tt.statusCode,
Body: io.NopCloser(bytes.NewReader(b)),
}
hc.On("Do", mock.Anything).Return(resp, nil).Times(tt.retryNumber)
}
c.httpClient = hc
ch := make(chan mercury.MercuryData, 1)
c.singleFeedRequest(testutils.Context(t), ch, tt.index, tt.lookup)
m := <-ch
assert.Equal(t, tt.index, m.Index)
assert.Equal(t, tt.retryable, m.Retryable)
assert.Equal(t, tt.state, m.State)
if tt.streamsErrCode != encoding.ErrCodeNil {
assert.Equal(t, tt.streamsErrCode, m.ErrCode)
assert.Equal(t, [][]byte(nil), m.Bytes)
} else if tt.retryNumber >= totalAttempt || tt.errorMessage != "" {
assert.Equal(t, tt.errorMessage, m.Error.Error())
assert.Equal(t, [][]byte(nil), m.Bytes)
} else {
blobBytes, err := hexutil.Decode(tt.blob)
assert.Nil(t, err)
assert.Nil(t, m.Error)
assert.Equal(t, [][]byte{blobBytes}, m.Bytes)
}
})`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/mercury/v02/v02_request_test.go: `b = []byte(tt.responseBytes)`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/mercury/v02/v02_request_test.go: `hc.On("Do", mock.Anything).Return(resp, nil).Once()`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/mercury/v02/v02_request_test.go: `hc.On("Do", mock.Anything).Return(resp, nil).Once()`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/mercury/v02/v02_request_test.go: `hc.On("Do", mock.Anything).Return(retryResp, nil).Times(tt.retryNumber)`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/mercury/v02/v02_request_test.go: `hc.On("Do", mock.Anything).Return(resp, nil).Once()`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/mercury/v02/v02_request_test.go: `hc.On("Do", mock.Anything).Return(resp, nil).Times(tt.retryNumber)`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/mercury/v02/v02_request_test.go: `c.httpClient = hc`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/mercury/v02/v02_request_test.go: `c.singleFeedRequest(testutils.Context(t), ch, tt.index, tt.lookup)`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/mercury/v02/v02_request_test.go: `t.Run(tt.name, func(t *testing.T) {
c := setupClient(t)
defer c.Close()
if tt.pluginRetries != 0 {
c.mercuryConfig.SetPluginRetry(pluginRetryKey, tt.pluginRetries, cache.DefaultExpiration)
}
hc := new(MockHttpClient)
for _, blob := range tt.mockChainlinkBlobs {
mr := MercuryV02Response{ChainlinkBlob: blob}
b, err := json.Marshal(mr)
assert.Nil(t, err)
resp := &http.Response{
StatusCode: tt.mockHttpStatusCode,
Body: io.NopCloser(bytes.NewReader(b)),
}
if tt.expectedErrCode != encoding.ErrCodeNil {
hc.On("Do", mock.Anything).Return(resp, nil).Times(totalAttempt)
} else {
hc.On("Do", mock.Anything).Return(resp, nil).Once()
}
}
c.httpClient = hc
state, values, errCode, retryable, retryInterval, reqErr := c.DoRequest(testutils.Context(t), tt.lookup, tt.upkeepType, pluginRetryKey)
assert.Equal(t, tt.expectedValues, values)
assert.Equal(t, tt.expectedRetryable, retryable)
if retryable {
newRetries, _ := c.mercuryConfig.GetPluginRetry(pluginRetryKey)
assert.Equal(t, tt.pluginRetries+1, newRetries.(int))
}
assert.Equal(t, tt.expectedRetryInterval, retryInterval)
assert.Equal(t, tt.expectedErrCode, errCode)
assert.Equal(t, tt.expectedState, state)
if tt.expectedError != nil {
assert.True(t, strings.HasPrefix(reqErr.Error(), "failed to request feed for 0x4554482d5553442d415242495452554d2d544553544e45540000000000000000"))
}
})`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/mercury/v02/v02_request_test.go: `c.mercuryConfig.SetPluginRetry(pluginRetryKey, tt.pluginRetries, cache.DefaultExpiration)`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/mercury/v02/v02_request_test.go: `hc.On("Do", mock.Anything).Return(resp, nil).Times(totalAttempt)`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/mercury/v02/v02_request_test.go: `hc.On("Do", mock.Anything).Return(resp, nil).Once()`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/mercury/v02/v02_request_test.go: `c.httpClient = hc`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/mercury/v02/v02_request_test.go: `c.mercuryConfig.SetPluginRetry(pluginRetryKey, 0, cache.DefaultExpiration)`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/mercury/v02/v02_request_test.go: `hc.On("Do", mock.Anything).Return(resp, nil).Once()`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/mercury/v02/v02_request_test.go: `c.httpClient = hc`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/mercury/v02/v02_request_test.go: `c.mercuryConfig.SetPluginRetry(pluginRetryKey, 0, cache.DefaultExpiration)`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/mercury/v02/v02_request_test.go: `hc.On("Do", mock.Anything).Return(resp, nil).Once()`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/mercury/v02/v02_request_test.go: `hc.On("Do", mock.Anything).Run(func(args mock.Arguments) {
time.Sleep(serverTimeout)
}).Return(resp2, nil).Once()`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/mercury/v02/v02_request_test.go: `time.Sleep(serverTimeout)`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/mercury/v02/v02_request_test.go: `c.httpClient = hc`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/mercury/v02/v02_request_test.go: `c.mercuryConfig.SetPluginRetry(pluginRetryKey, 0, cache.DefaultExpiration)`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/mercury/v02/v02_request_test.go: `hc.On("Do", mock.Anything).Return(resp, nil).Once()`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/mercury/v02/v02_request_test.go: `resp = &http.Response{
StatusCode: http.StatusServiceUnavailable,
Body: io.NopCloser(bytes.NewReader(b)),
}`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/mercury/v02/v02_request_test.go: `hc.On("Do", mock.Anything).Return(resp, nil).Times(totalAttempt)`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/mercury/v02/v02_request_test.go: `c.httpClient = hc`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/mercury/v02/v02_request_test.go: `c.mercuryConfig.SetPluginRetry(pluginRetryKey, 0, cache.DefaultExpiration)`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/mercury/v02/v02_request_test.go: `hc.On("Do", mock.Anything).Return(resp, nil).Once()`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/mercury/v02/v02_request_test.go: `resp = &http.Response{
StatusCode: http.StatusOK,
Body: io.NopCloser(bytes.NewReader([]byte{})),
}`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/mercury/v02/v02_request_test.go: `hc.On("Do", mock.Anything).Return(resp, nil).Once()`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/mercury/v02/v02_request_test.go: `c.httpClient = hc`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/mercury/v02/v02_request_test.go: `c.mercuryConfig.SetPluginRetry(pluginRetryKey, 0, cache.DefaultExpiration)`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/mercury/v02/v02_request_test.go: `hc.On("Do", mock.Anything).Return(resp, nil).Once()`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/mercury/v02/v02_request_test.go: `resp = &http.Response{
StatusCode: http.StatusGatewayTimeout,
Body: io.NopCloser(bytes.NewReader(b)),
}`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/mercury/v02/v02_request_test.go: `hc.On("Do", mock.Anything).Return(resp, nil).Times(totalAttempt)`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/mercury/v02/v02_request_test.go: `c.httpClient = hc`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/mercury/v02/v02_request_test.go: `.NewInt(123456789)`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/mercury/v02/v02_request_test.go: `.NewInt(123456)`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/mercury/v02/v02_request_test.go: `.NewInt(123456)`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/mercury/v02/v02_request_test.go: `.NewInt(123456)`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/mercury/v02/v02_request_test.go: `.NewInt(123456)`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/mercury/v02/v02_request_test.go: `.NewInt(123456)`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/mercury/v02/v02_request_test.go: `.NewInt(123456)`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/mercury/v02/v02_request_test.go: `.NewInt(123456)`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/mercury/v02/v02_request_test.go: `.NewInt(123456)`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/mercury/v02/v02_request_test.go: `.NewInt(123456)`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/mercury/v02/v02_request_test.go: `.NewInt(123456)`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/mercury/v02/v02_request_test.go: `.NewInt(123456)`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/mercury/v02/v02_request_test.go: `.Run(tt.name, func(t *testing.T) {
c := setupClient(t)
defer c.Close()
hc := new(MockHttpClient)
mr := MercuryV02Response{ChainlinkBlob: tt.blob}
b, err := json.Marshal(mr)
assert.Nil(t, err)
if tt.responseBytes != "" {
b = []byte(tt.responseBytes)
}
if tt.retryNumber == 0 {
if tt.errorMessage != "" {
resp := &http.Response{
StatusCode: tt.statusCode,
Body: io.NopCloser(bytes.NewReader(b)),
}
hc.On("Do", mock.Anything).Return(resp, nil).Once()
} else {
resp := &http.Response{
StatusCode: http.StatusOK,
Body: io.NopCloser(bytes.NewReader(b)),
}
hc.On("Do", mock.Anything).Return(resp, nil).Once()
}
} else if tt.retryNumber > 0 && tt.retryNumber < totalAttempt {
retryResp := &http.Response{
StatusCode: tt.statusCode,
Body: io.NopCloser(bytes.NewReader(b)),
}
hc.On("Do", mock.Anything).Return(retryResp, nil).Times(tt.retryNumber)
resp := &http.Response{
StatusCode: tt.lastStatusCode,
Body: io.NopCloser(bytes.NewReader(b)),
}
hc.On("Do", mock.Anything).Return(resp, nil).Once()
} else {
resp := &http.Response{
StatusCode: tt.statusCode,
Body: io.NopCloser(bytes.NewReader(b)),
}
hc.On("Do", mock.Anything).Return(resp, nil).Times(tt.retryNumber)
}
c.httpClient = hc
ch := make(chan mercury.MercuryData, 1)
c.singleFeedRequest(testutils.Context(t), ch, tt.index, tt.lookup)
m := <-ch
assert.Equal(t, tt.index, m.Index)
assert.Equal(t, tt.retryable, m.Retryable)
assert.Equal(t, tt.state, m.State)
if tt.streamsErrCode != encoding.ErrCodeNil {
assert.Equal(t, tt.streamsErrCode, m.ErrCode)
assert.Equal(t, [][]byte(nil), m.Bytes)
} else if tt.retryNumber >= totalAttempt || tt.errorMessage != "" {
assert.Equal(t, tt.errorMessage, m.Error.Error())
assert.Equal(t, [][]byte(nil), m.Bytes)
} else {
blobBytes, err := hexutil.Decode(tt.blob)
assert.Nil(t, err)
assert.Nil(t, m.Error)
assert.Equal(t, [][]byte{blobBytes}, m.Bytes)
}
})`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/mercury/v02/v02_request_test.go: `.Marshal(mr)`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/mercury/v02/v02_request_test.go: `.NopCloser(bytes.NewReader(b))`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/mercury/v02/v02_request_test.go: `.NewReader(b)`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/mercury/v02/v02_request_test.go: `.On("Do", mock.Anything)`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/mercury/v02/v02_request_test.go: `.Return(resp, nil)`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/mercury/v02/v02_request_test.go: `.Once()`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/mercury/v02/v02_request_test.go: `.NopCloser(bytes.NewReader(b))`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/mercury/v02/v02_request_test.go: `.NewReader(b)`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/mercury/v02/v02_request_test.go: `.On("Do", mock.Anything)`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/mercury/v02/v02_request_test.go: `.Return(resp, nil)`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/mercury/v02/v02_request_test.go: `.Once()`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/mercury/v02/v02_request_test.go: `.NopCloser(bytes.NewReader(b))`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/mercury/v02/v02_request_test.go: `.NewReader(b)`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/mercury/v02/v02_request_test.go: `.On("Do", mock.Anything)`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/mercury/v02/v02_request_test.go: `.Return(retryResp, nil)`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/mercury/v02/v02_request_test.go: `.Times(tt.retryNumber)`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/mercury/v02/v02_request_test.go: `.NopCloser(bytes.NewReader(b))`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/mercury/v02/v02_request_test.go: `.NewReader(b)`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/mercury/v02/v02_request_test.go: `.On("Do", mock.Anything)`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/mercury/v02/v02_request_test.go: `.Return(resp, nil)`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/mercury/v02/v02_request_test.go: `.Once()`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/mercury/v02/v02_request_test.go: `.NopCloser(bytes.NewReader(b))`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/mercury/v02/v02_request_test.go: `.NewReader(b)`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/mercury/v02/v02_request_test.go: `.On("Do", mock.Anything)`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/mercury/v02/v02_request_test.go: `.Return(resp, nil)`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/mercury/v02/v02_request_test.go: `.Times(tt.retryNumber)`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/mercury/v02/v02_request_test.go: `.singleFeedRequest(testutils.Context(t), ch, tt.index, tt.lookup)`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/mercury/v02/v02_request_test.go: `.Context(t)`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/mercury/v02/v02_request_test.go: `.Decode(tt.blob)`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/mercury/v02/v02_request_test.go: `.SetString("88786950015966611018675766524283132478093844178961698330929478019253453382042", 10)`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/mercury/v02/v02_request_test.go: `.NewInt(25880526)`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/mercury/v02/v02_request_test.go: `.NewInt(25880526)`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/mercury/v02/v02_request_test.go: `.NewInt(25880526)`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/mercury/v02/v02_request_test.go: `.NewInt(25880526)`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/mercury/v02/v02_request_test.go: `.New("failed to request feed for 0x4554482d5553442d415242495452554d2d544553544e45540000000000000000: All attempts fail:\n#1: 500\n#2: 500\n#3: 500")`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/mercury/v02/v02_request_test.go: `.NewInt(25880526)`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/mercury/v02/v02_request_test.go: `.New("failed to request feed for 0x4554482d5553442d415242495452554d2d544553544e45540000000000000000: All attempts fail:\n#1: 500\n#2: 500\n#3: 500")`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/mercury/v02/v02_request_test.go: `.NewInt(25880526)`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/mercury/v02/v02_request_test.go: `.NewInt(25880526)`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/mercury/v02/v02_request_test.go: `.NewInt(25880526)`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/mercury/v02/v02_request_test.go: `.NewInt(25880526)`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/mercury/v02/v02_request_test.go: `.Run(tt.name, func(t *testing.T) {
c := setupClient(t)
defer c.Close()
if tt.pluginRetries != 0 {
c.mercuryConfig.SetPluginRetry(pluginRetryKey, tt.pluginRetries, cache.DefaultExpiration)
}
hc := new(MockHttpClient)
for _, blob := range tt.mockChainlinkBlobs {
mr := MercuryV02Response{ChainlinkBlob: blob}
b, err := json.Marshal(mr)
assert.Nil(t, err)
resp := &http.Response{
StatusCode: tt.mockHttpStatusCode,
Body: io.NopCloser(bytes.NewReader(b)),
}
if tt.expectedErrCode != encoding.ErrCodeNil {
hc.On("Do", mock.Anything).Return(resp, nil).Times(totalAttempt)
} else {
hc.On("Do", mock.Anything).Return(resp, nil).Once()
}
}
c.httpClient = hc
state, values, errCode, retryable, retryInterval, reqErr := c.DoRequest(testutils.Context(t), tt.lookup, tt.upkeepType, pluginRetryKey)
assert.Equal(t, tt.expectedValues, values)
assert.Equal(t, tt.expectedRetryable, retryable)
if retryable {
newRetries, _ := c.mercuryConfig.GetPluginRetry(pluginRetryKey)
assert.Equal(t, tt.pluginRetries+1, newRetries.(int))
}
assert.Equal(t, tt.expectedRetryInterval, retryInterval)
assert.Equal(t, tt.expectedErrCode, errCode)
assert.Equal(t, tt.expectedState, state)
if tt.expectedError != nil {
assert.True(t, strings.HasPrefix(reqErr.Error(), "failed to request feed for 0x4554482d5553442d415242495452554d2d544553544e45540000000000000000"))
}
})`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/mercury/v02/v02_request_test.go: `.mercuryConfig.SetPluginRetry(pluginRetryKey, tt.pluginRetries, cache.DefaultExpiration)`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/mercury/v02/v02_request_test.go: `.Marshal(mr)`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/mercury/v02/v02_request_test.go: `.NopCloser(bytes.NewReader(b))`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/mercury/v02/v02_request_test.go: `.NewReader(b)`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/mercury/v02/v02_request_test.go: `.On("Do", mock.Anything)`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/mercury/v02/v02_request_test.go: `.Return(resp, nil)`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/mercury/v02/v02_request_test.go: `.Times(totalAttempt)`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/mercury/v02/v02_request_test.go: `.On("Do", mock.Anything)`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/mercury/v02/v02_request_test.go: `.Return(resp, nil)`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/mercury/v02/v02_request_test.go: `.Once()`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/mercury/v02/v02_request_test.go: `.DoRequest(testutils.Context(t), tt.lookup, tt.upkeepType, pluginRetryKey)`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/mercury/v02/v02_request_test.go: `.Context(t)`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/mercury/v02/v02_request_test.go: `.mercuryConfig.GetPluginRetry(pluginRetryKey)`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/mercury/v02/v02_request_test.go: `.SetString("88786950015966611018675766524283132478093844178961698330929478019253453382042", 10)`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/mercury/v02/v02_request_test.go: `.mercuryConfig.SetPluginRetry(pluginRetryKey, 0, cache.DefaultExpiration)`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/mercury/v02/v02_request_test.go: `.Marshal(mr)`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/mercury/v02/v02_request_test.go: `.NopCloser(bytes.NewReader(b))`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/mercury/v02/v02_request_test.go: `.NewReader(b)`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/mercury/v02/v02_request_test.go: `.On("Do", mock.Anything)`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/mercury/v02/v02_request_test.go: `.Return(resp, nil)`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/mercury/v02/v02_request_test.go: `.Once()`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/mercury/v02/v02_request_test.go: `.NewInt(25880526)`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/mercury/v02/v02_request_test.go: `.DoRequest(testutils.Context(t), lookup, automationTypes.ConditionTrigger, pluginRetryKey)`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/mercury/v02/v02_request_test.go: `.Context(t)`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/mercury/v02/v02_request_test.go: `.SetString("88786950015966611018675766524283132478093844178961698330929478019253453382042", 10)`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/mercury/v02/v02_request_test.go: `.mercuryConfig.SetPluginRetry(pluginRetryKey, 0, cache.DefaultExpiration)`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/mercury/v02/v02_request_test.go: `.Marshal(mr)`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/mercury/v02/v02_request_test.go: `.NopCloser(bytes.NewReader(b))`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/mercury/v02/v02_request_test.go: `.NewReader(b)`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/mercury/v02/v02_request_test.go: `.On("Do", mock.Anything)`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/mercury/v02/v02_request_test.go: `.Return(resp, nil)`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/mercury/v02/v02_request_test.go: `.Once()`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/mercury/v02/v02_request_test.go: `.NopCloser(bytes.NewReader([]byte{}))`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/mercury/v02/v02_request_test.go: `.NewReader([]byte{})`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/mercury/v02/v02_request_test.go: `.On("Do", mock.Anything)`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/mercury/v02/v02_request_test.go: `.Run(func(args mock.Arguments) {
time.Sleep(serverTimeout)
})`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/mercury/v02/v02_request_test.go: `.Sleep(serverTimeout)`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/mercury/v02/v02_request_test.go: `.Return(resp2, nil)`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/mercury/v02/v02_request_test.go: `.Once()`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/mercury/v02/v02_request_test.go: `.NewInt(25880526)`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/mercury/v02/v02_request_test.go: `.Now()`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/mercury/v02/v02_request_test.go: `.DoRequest(testutils.Context(t), lookup, automationTypes.ConditionTrigger, pluginRetryKey)`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/mercury/v02/v02_request_test.go: `.Context(t)`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/mercury/v02/v02_request_test.go: `.Since(start)`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/mercury/v02/v02_request_test.go: `.SetString("88786950015966611018675766524283132478093844178961698330929478019253453382042", 10)`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/mercury/v02/v02_request_test.go: `.mercuryConfig.SetPluginRetry(pluginRetryKey, 0, cache.DefaultExpiration)`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/mercury/v02/v02_request_test.go: `.Marshal(mr)`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/mercury/v02/v02_request_test.go: `.NopCloser(bytes.NewReader(b))`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/mercury/v02/v02_request_test.go: `.NewReader(b)`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/mercury/v02/v02_request_test.go: `.On("Do", mock.Anything)`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/mercury/v02/v02_request_test.go: `.Return(resp, nil)`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/mercury/v02/v02_request_test.go: `.Once()`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/mercury/v02/v02_request_test.go: `.NopCloser(bytes.NewReader(b))`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/mercury/v02/v02_request_test.go: `.NewReader(b)`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/mercury/v02/v02_request_test.go: `.On("Do", mock.Anything)`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/mercury/v02/v02_request_test.go: `.Return(resp, nil)`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/mercury/v02/v02_request_test.go: `.Times(totalAttempt)`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/mercury/v02/v02_request_test.go: `.NewInt(25880526)`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/mercury/v02/v02_request_test.go: `.DoRequest(testutils.Context(t), lookup, automationTypes.LogTrigger, pluginRetryKey)`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/mercury/v02/v02_request_test.go: `.Context(t)`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/mercury/v02/v02_request_test.go: `.SetString("88786950015966611018675766524283132478093844178961698330929478019253453382042", 10)`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/mercury/v02/v02_request_test.go: `.mercuryConfig.SetPluginRetry(pluginRetryKey, 0, cache.DefaultExpiration)`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/mercury/v02/v02_request_test.go: `.Marshal(mr)`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/mercury/v02/v02_request_test.go: `.NopCloser(bytes.NewReader(b))`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/mercury/v02/v02_request_test.go: `.NewReader(b)`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/mercury/v02/v02_request_test.go: `.On("Do", mock.Anything)`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/mercury/v02/v02_request_test.go: `.Return(resp, nil)`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/mercury/v02/v02_request_test.go: `.Once()`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/mercury/v02/v02_request_test.go: `.NopCloser(bytes.NewReader([]byte{}))`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/mercury/v02/v02_request_test.go: `.NewReader([]byte{})`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/mercury/v02/v02_request_test.go: `.On("Do", mock.Anything)`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/mercury/v02/v02_request_test.go: `.Return(resp, nil)`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/mercury/v02/v02_request_test.go: `.Once()`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/mercury/v02/v02_request_test.go: `.NewInt(25880526)`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/mercury/v02/v02_request_test.go: `.DoRequest(testutils.Context(t), lookup, automationTypes.LogTrigger, pluginRetryKey)`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/mercury/v02/v02_request_test.go: `.Context(t)`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/mercury/v02/v02_request_test.go: `.SetString("88786950015966611018675766524283132478093844178961698330929478019253453382042", 10)`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/mercury/v02/v02_request_test.go: `.mercuryConfig.SetPluginRetry(pluginRetryKey, 0, cache.DefaultExpiration)`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/mercury/v02/v02_request_test.go: `.Marshal(mr)`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/mercury/v02/v02_request_test.go: `.NopCloser(bytes.NewReader(b))`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/mercury/v02/v02_request_test.go: `.NewReader(b)`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/mercury/v02/v02_request_test.go: `.On("Do", mock.Anything)`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/mercury/v02/v02_request_test.go: `.Return(resp, nil)`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/mercury/v02/v02_request_test.go: `.Once()`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/mercury/v02/v02_request_test.go: `.NopCloser(bytes.NewReader(b))`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/mercury/v02/v02_request_test.go: `.NewReader(b)`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/mercury/v02/v02_request_test.go: `.On("Do", mock.Anything)`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/mercury/v02/v02_request_test.go: `.Return(resp, nil)`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/mercury/v02/v02_request_test.go: `.Times(totalAttempt)`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/mercury/v02/v02_request_test.go: `.NewInt(25880526)`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/mercury/v02/v02_request_test.go: `.DoRequest(testutils.Context(t), lookup, automationTypes.ConditionTrigger, pluginRetryKey)`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/mercury/v02/v02_request_test.go: `.Context(t)`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/mercury/v03/v03_request_test.go: `t.Run(tt.name, func(t *testing.T) {
c := setupClient(t)
defer c.Close()
hc := mocks.NewHttpClient(t)
mr := MercuryV03Response{}
for i, blob := range tt.mockChainlinkBlobs {
r := MercuryV03Report{
FeedID: tt.lookup.Feeds[i],
ValidFromTimestamp: 0,
ObservationsTimestamp: 0,
FullReport: blob,
}
mr.Reports = append(mr.Reports, r)
}
b, err := json.Marshal(mr)
assert.Nil(t, err)
resp := &http.Response{
StatusCode: tt.mockHttpStatusCode,
Body: io.NopCloser(bytes.NewReader(b)),
}
if tt.expectedError != nil && tt.expectedRetryable {
hc.On("Do", mock.Anything).Return(resp, nil).Times(totalAttempt)
} else {
hc.On("Do", mock.Anything).Return(resp, nil).Once()
}
c.httpClient = hc
state, values, errCode, retryable, retryInterval, reqErr := c.DoRequest(testutils.Context(t), tt.lookup, automationTypes.ConditionTrigger, tt.pluginRetryKey)
assert.Equal(t, tt.expectedValues, values)
assert.Equal(t, tt.expectedRetryable, retryable)
assert.Equal(t, tt.expectedRetryInterval, retryInterval)
assert.Equal(t, tt.state, state)
assert.Equal(t, tt.expectedErrCode, errCode)
if tt.expectedError != nil {
assert.Equal(t, tt.expectedError.Error(), reqErr.Error())
}
})`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/mercury/v03/v03_request_test.go: `mr.Reports = append(mr.Reports, r)`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/mercury/v03/v03_request_test.go: `hc.On("Do", mock.Anything).Return(resp, nil).Times(totalAttempt)`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/mercury/v03/v03_request_test.go: `hc.On("Do", mock.Anything).Return(resp, nil).Once()`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/mercury/v03/v03_request_test.go: `c.httpClient = hc`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/mercury/v03/v03_request_test.go: `c.mercuryConfig.SetPluginRetry(pluginRetryKey, 0, cache.DefaultExpiration)`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/mercury/v03/v03_request_test.go: `hc.On("Do", mock.Anything).Return(resp, nil).Once()`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/mercury/v03/v03_request_test.go: `c.httpClient = hc`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/mercury/v03/v03_request_test.go: `c.mercuryConfig.SetPluginRetry(pluginRetryKey, 0, cache.DefaultExpiration)`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/mercury/v03/v03_request_test.go: `hc.On("Do", mock.Anything).Run(func(args mock.Arguments) {
time.Sleep(serverTimeout)
}).Return(resp, nil).Once()`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/mercury/v03/v03_request_test.go: `time.Sleep(serverTimeout)`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/mercury/v03/v03_request_test.go: `c.httpClient = hc`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/mercury/v03/v03_request_test.go: `c.mercuryConfig.SetPluginRetry(pluginRetryKey, 0, cache.DefaultExpiration)`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/mercury/v03/v03_request_test.go: `hc.On("Do", mock.Anything).Return(resp, nil).Once()`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/mercury/v03/v03_request_test.go: `resp = &http.Response{
StatusCode: http.StatusBadGateway,
Body: io.NopCloser(bytes.NewReader(b)),
}`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/mercury/v03/v03_request_test.go: `hc.On("Do", mock.Anything).Return(resp, nil).Times(totalAttempt)`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/mercury/v03/v03_request_test.go: `c.httpClient = hc`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/mercury/v03/v03_request_test.go: `c.mercuryConfig.SetPluginRetry(pluginRetryKey, 0, cache.DefaultExpiration)`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/mercury/v03/v03_request_test.go: `hc.On("Do", mock.Anything).Return(resp, nil).Once()`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/mercury/v03/v03_request_test.go: `b, err = json.Marshal(invalidResponse)`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/mercury/v03/v03_request_test.go: `resp = &http.Response{
StatusCode: http.StatusOK,
Body: io.NopCloser(bytes.NewReader(b)),
}`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/mercury/v03/v03_request_test.go: `hc.On("Do", mock.Anything).Return(resp, nil).Times(totalAttempt)`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/mercury/v03/v03_request_test.go: `c.httpClient = hc`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/mercury/v03/v03_request_test.go: `t.Run(tt.name, func(t *testing.T) {
c := setupClient(t)
defer c.Close()
if tt.pluginRetries != 0 {
c.mercuryConfig.SetPluginRetry(tt.pluginRetryKey, tt.pluginRetries, cache.DefaultExpiration)
}
hc := new(MockHttpClient)
b, err := json.Marshal(tt.response)
assert.Nil(t, err)
if tt.retryNumber == 0 {
resp := &http.Response{
StatusCode: tt.statusCode,
Body: io.NopCloser(bytes.NewReader(b)),
}
hc.On("Do", mock.Anything).Return(resp, nil).Once()
} else if tt.retryNumber < totalAttempt {
if tt.firstResponse != nil && tt.response != nil {
b0, err := json.Marshal(tt.firstResponse)
assert.Nil(t, err)
resp0 := &http.Response{
StatusCode: tt.statusCode,
Body: io.NopCloser(bytes.NewReader(b0)),
}
b1, err := json.Marshal(tt.response)
assert.Nil(t, err)
resp1 := &http.Response{
StatusCode: tt.lastStatusCode,
Body: io.NopCloser(bytes.NewReader(b1)),
}
hc.On("Do", mock.Anything).Return(resp0, nil).Once().On("Do", mock.Anything).Return(resp1, nil).Once()
} else {
retryResp := &http.Response{
StatusCode: tt.statusCode,
Body: io.NopCloser(bytes.NewReader(b)),
}
hc.On("Do", mock.Anything).Return(retryResp, nil).Times(tt.retryNumber)
resp := &http.Response{
StatusCode: tt.lastStatusCode,
Body: io.NopCloser(bytes.NewReader(b)),
}
hc.On("Do", mock.Anything).Return(resp, nil).Once()
}
} else {
for i := 1; i <= tt.retryNumber; i++ {
resp := &http.Response{
StatusCode: tt.statusCode,
Body: io.NopCloser(bytes.NewReader(b)),
}
hc.On("Do", mock.Anything).Return(resp, nil).Once()
}
}
c.httpClient = hc
ch := make(chan mercury.MercuryData, 1)
c.multiFeedsRequest(testutils.Context(t), ch, tt.lookup)
m := <-ch
assert.Equal(t, 0, m.Index)
assert.Equal(t, tt.retryable, m.Retryable)
if tt.streamsErrCode != encoding.ErrCodeNil {
assert.Equal(t, tt.streamsErrCode, m.ErrCode)
assert.Equal(t, tt.state, m.State)
assert.Equal(t, [][]byte(nil), m.Bytes)
} else if tt.retryNumber >= totalAttempt || tt.errorMessage != "" {
assert.Equal(t, tt.errorMessage, m.Error.Error())
assert.Equal(t, [][]byte(nil), m.Bytes)
} else {
assert.Nil(t, m.Error)
var reports [][]byte
for _, rsp := range tt.response.Reports {
b, _ := hexutil.Decode(rsp.FullReport)
reports = append(reports, b)
}
assert.Equal(t, reports, m.Bytes)
}
})`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/mercury/v03/v03_request_test.go: `c.mercuryConfig.SetPluginRetry(tt.pluginRetryKey, tt.pluginRetries, cache.DefaultExpiration)`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/mercury/v03/v03_request_test.go: `hc.On("Do", mock.Anything).Return(resp, nil).Once()`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/mercury/v03/v03_request_test.go: `hc.On("Do", mock.Anything).Return(resp0, nil).Once().On("Do", mock.Anything).Return(resp1, nil).Once()`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/mercury/v03/v03_request_test.go: `hc.On("Do", mock.Anything).Return(retryResp, nil).Times(tt.retryNumber)`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/mercury/v03/v03_request_test.go: `hc.On("Do", mock.Anything).Return(resp, nil).Once()`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/mercury/v03/v03_request_test.go: `hc.On("Do", mock.Anything).Return(resp, nil).Once()`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/mercury/v03/v03_request_test.go: `c.httpClient = hc`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/mercury/v03/v03_request_test.go: `c.multiFeedsRequest(testutils.Context(t), ch, tt.lookup)`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/mercury/v03/v03_request_test.go: `reports = append(reports, b)`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/mercury/v03/v03_request_test.go: `.SetString("88786950015966611018675766524283132478093844178961698330929478019253453382042", 10)`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/mercury/v03/v03_request_test.go: `.NewInt(25880526)`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/mercury/v03/v03_request_test.go: `.Run(tt.name, func(t *testing.T) {
c := setupClient(t)
defer c.Close()
hc := mocks.NewHttpClient(t)
mr := MercuryV03Response{}
for i, blob := range tt.mockChainlinkBlobs {
r := MercuryV03Report{
FeedID: tt.lookup.Feeds[i],
ValidFromTimestamp: 0,
ObservationsTimestamp: 0,
FullReport: blob,
}
mr.Reports = append(mr.Reports, r)
}
b, err := json.Marshal(mr)
assert.Nil(t, err)
resp := &http.Response{
StatusCode: tt.mockHttpStatusCode,
Body: io.NopCloser(bytes.NewReader(b)),
}
if tt.expectedError != nil && tt.expectedRetryable {
hc.On("Do", mock.Anything).Return(resp, nil).Times(totalAttempt)
} else {
hc.On("Do", mock.Anything).Return(resp, nil).Once()
}
c.httpClient = hc
state, values, errCode, retryable, retryInterval, reqErr := c.DoRequest(testutils.Context(t), tt.lookup, automationTypes.ConditionTrigger, tt.pluginRetryKey)
assert.Equal(t, tt.expectedValues, values)
assert.Equal(t, tt.expectedRetryable, retryable)
assert.Equal(t, tt.expectedRetryInterval, retryInterval)
assert.Equal(t, tt.state, state)
assert.Equal(t, tt.expectedErrCode, errCode)
if tt.expectedError != nil {
assert.Equal(t, tt.expectedError.Error(), reqErr.Error())
}
})`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/mercury/v03/v03_request_test.go: `.NewHttpClient(t)`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/mercury/v03/v03_request_test.go: `.Marshal(mr)`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/mercury/v03/v03_request_test.go: `.NopCloser(bytes.NewReader(b))`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/mercury/v03/v03_request_test.go: `.NewReader(b)`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/mercury/v03/v03_request_test.go: `.On("Do", mock.Anything)`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/mercury/v03/v03_request_test.go: `.Return(resp, nil)`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/mercury/v03/v03_request_test.go: `.Times(totalAttempt)`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/mercury/v03/v03_request_test.go: `.On("Do", mock.Anything)`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/mercury/v03/v03_request_test.go: `.Return(resp, nil)`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/mercury/v03/v03_request_test.go: `.Once()`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/mercury/v03/v03_request_test.go: `.DoRequest(testutils.Context(t), tt.lookup, automationTypes.ConditionTrigger, tt.pluginRetryKey)`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/mercury/v03/v03_request_test.go: `.Context(t)`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/mercury/v03/v03_request_test.go: `.SetString("88786950015966611018675766524283132478093844178961698330929478019253453382042", 10)`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/mercury/v03/v03_request_test.go: `.mercuryConfig.SetPluginRetry(pluginRetryKey, 0, cache.DefaultExpiration)`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/mercury/v03/v03_request_test.go: `.Marshal(mr)`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/mercury/v03/v03_request_test.go: `.NopCloser(bytes.NewReader(b))`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/mercury/v03/v03_request_test.go: `.NewReader(b)`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/mercury/v03/v03_request_test.go: `.On("Do", mock.Anything)`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/mercury/v03/v03_request_test.go: `.Return(resp, nil)`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/mercury/v03/v03_request_test.go: `.Once()`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/mercury/v03/v03_request_test.go: `.NewInt(25880526)`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/mercury/v03/v03_request_test.go: `.DoRequest(testutils.Context(t), lookup, automationTypes.ConditionTrigger, pluginRetryKey)`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/mercury/v03/v03_request_test.go: `.Context(t)`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/mercury/v03/v03_request_test.go: `.SetString("88786950015966611018675766524283132478093844178961698330929478019253453382042", 10)`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/mercury/v03/v03_request_test.go: `.mercuryConfig.SetPluginRetry(pluginRetryKey, 0, cache.DefaultExpiration)`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/mercury/v03/v03_request_test.go: `.Marshal(mr)`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/mercury/v03/v03_request_test.go: `.NopCloser(bytes.NewReader(b))`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/mercury/v03/v03_request_test.go: `.NewReader(b)`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/mercury/v03/v03_request_test.go: `.On("Do", mock.Anything)`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/mercury/v03/v03_request_test.go: `.Run(func(args mock.Arguments) {
time.Sleep(serverTimeout)
})`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/mercury/v03/v03_request_test.go: `.Sleep(serverTimeout)`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/mercury/v03/v03_request_test.go: `.Return(resp, nil)`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/mercury/v03/v03_request_test.go: `.Once()`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/mercury/v03/v03_request_test.go: `.NewInt(25880526)`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/mercury/v03/v03_request_test.go: `.Now()`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/mercury/v03/v03_request_test.go: `.DoRequest(testutils.Context(t), lookup, automationTypes.ConditionTrigger, pluginRetryKey)`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/mercury/v03/v03_request_test.go: `.Context(t)`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/mercury/v03/v03_request_test.go: `.Since(start)`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/mercury/v03/v03_request_test.go: `.SetString("88786950015966611018675766524283132478093844178961698330929478019253453382042", 10)`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/mercury/v03/v03_request_test.go: `.mercuryConfig.SetPluginRetry(pluginRetryKey, 0, cache.DefaultExpiration)`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/mercury/v03/v03_request_test.go: `.Marshal(mr)`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/mercury/v03/v03_request_test.go: `.NopCloser(bytes.NewReader(b))`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/mercury/v03/v03_request_test.go: `.NewReader(b)`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/mercury/v03/v03_request_test.go: `.On("Do", mock.Anything)`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/mercury/v03/v03_request_test.go: `.Return(resp, nil)`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/mercury/v03/v03_request_test.go: `.Once()`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/mercury/v03/v03_request_test.go: `.NopCloser(bytes.NewReader(b))`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/mercury/v03/v03_request_test.go: `.NewReader(b)`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/mercury/v03/v03_request_test.go: `.On("Do", mock.Anything)`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/mercury/v03/v03_request_test.go: `.Return(resp, nil)`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/mercury/v03/v03_request_test.go: `.Times(totalAttempt)`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/mercury/v03/v03_request_test.go: `.NewInt(25880526)`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/mercury/v03/v03_request_test.go: `.DoRequest(testutils.Context(t), lookup, automationTypes.LogTrigger, pluginRetryKey)`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/mercury/v03/v03_request_test.go: `.Context(t)`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/mercury/v03/v03_request_test.go: `.SetString("88786950015966611018675766524283132478093844178961698330929478019253453382042", 10)`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/mercury/v03/v03_request_test.go: `.mercuryConfig.SetPluginRetry(pluginRetryKey, 0, cache.DefaultExpiration)`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/mercury/v03/v03_request_test.go: `.Marshal(mr)`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/mercury/v03/v03_request_test.go: `.NopCloser(bytes.NewReader(b))`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/mercury/v03/v03_request_test.go: `.NewReader(b)`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/mercury/v03/v03_request_test.go: `.On("Do", mock.Anything)`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/mercury/v03/v03_request_test.go: `.Return(resp, nil)`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/mercury/v03/v03_request_test.go: `.Once()`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/mercury/v03/v03_request_test.go: `.Marshal(invalidResponse)`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/mercury/v03/v03_request_test.go: `.NopCloser(bytes.NewReader(b))`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/mercury/v03/v03_request_test.go: `.NewReader(b)`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/mercury/v03/v03_request_test.go: `.On("Do", mock.Anything)`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/mercury/v03/v03_request_test.go: `.Return(resp, nil)`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/mercury/v03/v03_request_test.go: `.Times(totalAttempt)`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/mercury/v03/v03_request_test.go: `.NewInt(25880526)`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/mercury/v03/v03_request_test.go: `.DoRequest(testutils.Context(t), lookup, automationTypes.LogTrigger, pluginRetryKey)`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/mercury/v03/v03_request_test.go: `.Context(t)`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/mercury/v03/v03_request_test.go: `.NewInt(123456789)`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/mercury/v03/v03_request_test.go: `.NewInt(123456)`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/mercury/v03/v03_request_test.go: `.NewInt(123456)`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/mercury/v03/v03_request_test.go: `.NewInt(123456)`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/mercury/v03/v03_request_test.go: `.NewInt(123456)`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/mercury/v03/v03_request_test.go: `.NewInt(123456)`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/mercury/v03/v03_request_test.go: `.NewInt(123456)`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/mercury/v03/v03_request_test.go: `.NewInt(123456)`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/mercury/v03/v03_request_test.go: `.NewInt(123456)`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/mercury/v03/v03_request_test.go: `.NewInt(123456)`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/mercury/v03/v03_request_test.go: `.NewInt(123456)`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/mercury/v03/v03_request_test.go: `.NewInt(123456)`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/mercury/v03/v03_request_test.go: `.NewInt(123456)`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/mercury/v03/v03_request_test.go: `.NewInt(123456)`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/mercury/v03/v03_request_test.go: `.NewInt(123456)`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/mercury/v03/v03_request_test.go: `.NewInt(123456)`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/mercury/v03/v03_request_test.go: `.Run(tt.name, func(t *testing.T) {
c := setupClient(t)
defer c.Close()
if tt.pluginRetries != 0 {
c.mercuryConfig.SetPluginRetry(tt.pluginRetryKey, tt.pluginRetries, cache.DefaultExpiration)
}
hc := new(MockHttpClient)
b, err := json.Marshal(tt.response)
assert.Nil(t, err)
if tt.retryNumber == 0 {
resp := &http.Response{
StatusCode: tt.statusCode,
Body: io.NopCloser(bytes.NewReader(b)),
}
hc.On("Do", mock.Anything).Return(resp, nil).Once()
} else if tt.retryNumber < totalAttempt {
if tt.firstResponse != nil && tt.response != nil {
b0, err := json.Marshal(tt.firstResponse)
assert.Nil(t, err)
resp0 := &http.Response{
StatusCode: tt.statusCode,
Body: io.NopCloser(bytes.NewReader(b0)),
}
b1, err := json.Marshal(tt.response)
assert.Nil(t, err)
resp1 := &http.Response{
StatusCode: tt.lastStatusCode,
Body: io.NopCloser(bytes.NewReader(b1)),
}
hc.On("Do", mock.Anything).Return(resp0, nil).Once().On("Do", mock.Anything).Return(resp1, nil).Once()
} else {
retryResp := &http.Response{
StatusCode: tt.statusCode,
Body: io.NopCloser(bytes.NewReader(b)),
}
hc.On("Do", mock.Anything).Return(retryResp, nil).Times(tt.retryNumber)
resp := &http.Response{
StatusCode: tt.lastStatusCode,
Body: io.NopCloser(bytes.NewReader(b)),
}
hc.On("Do", mock.Anything).Return(resp, nil).Once()
}
} else {
for i := 1; i <= tt.retryNumber; i++ {
resp := &http.Response{
StatusCode: tt.statusCode,
Body: io.NopCloser(bytes.NewReader(b)),
}
hc.On("Do", mock.Anything).Return(resp, nil).Once()
}
}
c.httpClient = hc
ch := make(chan mercury.MercuryData, 1)
c.multiFeedsRequest(testutils.Context(t), ch, tt.lookup)
m := <-ch
assert.Equal(t, 0, m.Index)
assert.Equal(t, tt.retryable, m.Retryable)
if tt.streamsErrCode != encoding.ErrCodeNil {
assert.Equal(t, tt.streamsErrCode, m.ErrCode)
assert.Equal(t, tt.state, m.State)
assert.Equal(t, [][]byte(nil), m.Bytes)
} else if tt.retryNumber >= totalAttempt || tt.errorMessage != "" {
assert.Equal(t, tt.errorMessage, m.Error.Error())
assert.Equal(t, [][]byte(nil), m.Bytes)
} else {
assert.Nil(t, m.Error)
var reports [][]byte
for _, rsp := range tt.response.Reports {
b, _ := hexutil.Decode(rsp.FullReport)
reports = append(reports, b)
}
assert.Equal(t, reports, m.Bytes)
}
})`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/mercury/v03/v03_request_test.go: `.mercuryConfig.SetPluginRetry(tt.pluginRetryKey, tt.pluginRetries, cache.DefaultExpiration)`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/mercury/v03/v03_request_test.go: `.Marshal(tt.response)`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/mercury/v03/v03_request_test.go: `.NopCloser(bytes.NewReader(b))`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/mercury/v03/v03_request_test.go: `.NewReader(b)`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/mercury/v03/v03_request_test.go: `.On("Do", mock.Anything)`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/mercury/v03/v03_request_test.go: `.Return(resp, nil)`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/mercury/v03/v03_request_test.go: `.Once()`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/mercury/v03/v03_request_test.go: `.Marshal(tt.firstResponse)`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/mercury/v03/v03_request_test.go: `.NopCloser(bytes.NewReader(b0))`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/mercury/v03/v03_request_test.go: `.NewReader(b0)`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/mercury/v03/v03_request_test.go: `.Marshal(tt.response)`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/mercury/v03/v03_request_test.go: `.NopCloser(bytes.NewReader(b1))`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/mercury/v03/v03_request_test.go: `.NewReader(b1)`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/mercury/v03/v03_request_test.go: `.On("Do", mock.Anything)`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/mercury/v03/v03_request_test.go: `.Return(resp0, nil)`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/mercury/v03/v03_request_test.go: `.Once()`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/mercury/v03/v03_request_test.go: `.On("Do", mock.Anything)`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/mercury/v03/v03_request_test.go: `.Return(resp1, nil)`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/mercury/v03/v03_request_test.go: `.Once()`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/mercury/v03/v03_request_test.go: `.NopCloser(bytes.NewReader(b))`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/mercury/v03/v03_request_test.go: `.NewReader(b)`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/mercury/v03/v03_request_test.go: `.On("Do", mock.Anything)`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/mercury/v03/v03_request_test.go: `.Return(retryResp, nil)`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/mercury/v03/v03_request_test.go: `.Times(tt.retryNumber)`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/mercury/v03/v03_request_test.go: `.NopCloser(bytes.NewReader(b))`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/mercury/v03/v03_request_test.go: `.NewReader(b)`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/mercury/v03/v03_request_test.go: `.On("Do", mock.Anything)`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/mercury/v03/v03_request_test.go: `.Return(resp, nil)`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/mercury/v03/v03_request_test.go: `.Once()`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/mercury/v03/v03_request_test.go: `.NopCloser(bytes.NewReader(b))`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/mercury/v03/v03_request_test.go: `.NewReader(b)`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/mercury/v03/v03_request_test.go: `.On("Do", mock.Anything)`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/mercury/v03/v03_request_test.go: `.Return(resp, nil)`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/mercury/v03/v03_request_test.go: `.Once()`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/mercury/v03/v03_request_test.go: `.multiFeedsRequest(testutils.Context(t), ch, tt.lookup)`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/mercury/v03/v03_request_test.go: `.Context(t)`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/mercury/v03/v03_request_test.go: `.Decode(rsp.FullReport)`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/payload_builder_test.go: `t.Run(tc.name, func(t *testing.T) {
lggr, _ := logger.NewLogger()
builder := NewPayloadBuilder(tc.activeList, tc.recoverer, lggr)
payloads, err := builder.BuildPayloads(testutils.Context(t), tc.proposals...)
assert.NoError(t, err)
assert.Equal(t, tc.wantPayloads, payloads)
})`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/payload_builder_test.go: `.GenUpkeepID(types2.LogTrigger, "abc")`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/payload_builder_test.go: `.GenUpkeepID(types2.LogTrigger, "def")`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/payload_builder_test.go: `.GenUpkeepID(types2.LogTrigger, "abc")`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/payload_builder_test.go: `.GenUpkeepID(types2.LogTrigger, "def")`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/payload_builder_test.go: `.GenUpkeepID(types2.LogTrigger, "ghi")`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/payload_builder_test.go: `.BigInt()`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/payload_builder_test.go: `.Cmp(id)`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/payload_builder_test.go: `.GenUpkeepID(types2.LogTrigger, "abc")`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/payload_builder_test.go: `.GenUpkeepID(types2.LogTrigger, "def")`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/payload_builder_test.go: `.GenUpkeepID(types2.LogTrigger, "ghi")`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/payload_builder_test.go: `.GenUpkeepID(types2.LogTrigger, "abc")`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/payload_builder_test.go: `.GenUpkeepID(types2.LogTrigger, "def")`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/payload_builder_test.go: `.GenUpkeepID(types2.LogTrigger, "abc")`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/payload_builder_test.go: `.New("recoverer boom")`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/payload_builder_test.go: `.GenUpkeepID(types2.ConditionTrigger, "def")`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/payload_builder_test.go: `.GenUpkeepID(types2.ConditionTrigger, "def")`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/payload_builder_test.go: `.Run(tc.name, func(t *testing.T) {
lggr, _ := logger.NewLogger()
builder := NewPayloadBuilder(tc.activeList, tc.recoverer, lggr)
payloads, err := builder.BuildPayloads(testutils.Context(t), tc.proposals...)
assert.NoError(t, err)
assert.Equal(t, tc.wantPayloads, payloads)
})`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/payload_builder_test.go: `.NewLogger()`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/payload_builder_test.go: `.BuildPayloads(testutils.Context(t), tc.proposals...)`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/payload_builder_test.go: `.Context(t)`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/registry_check_pipeline_test.go: `t.Run(tc.name, func(t *testing.T) {
block, _, upkeep := r.getBlockAndUpkeepId(tc.input.UpkeepID, tc.input.Trigger)
assert.Equal(t, tc.wantBlock, block)
assert.Equal(t, tc.wantUpkeep.String(), upkeep.String())
})`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/registry_check_pipeline_test.go: `upkeepId.FromBigInt(big.NewInt(12345))`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/registry_check_pipeline_test.go: `t.Run(tc.name, func(t *testing.T) {
bs := &BlockSubscriber{
latestBlock: atomic.Pointer[ocr2keepers.BlockKey]{},
blocks: tc.blocks,
}
bs.latestBlock.Store(tc.latestBlock)
e := &EvmRegistry{
lggr: lggr,
bs: bs,
poller: tc.poller,
}
if tc.makeEthCall {
client := new(evmClientMocks.Client)
client.On("BlockByNumber", mock.Anything, tc.checkBlock).Return(nil, fmt.Errorf("error"))
e.client = client
}
state, retryable := e.verifyCheckBlock(testutils.Context(t), tc.checkBlock, tc.upkeepId, tc.checkHash)
assert.Equal(t, tc.state, state)
assert.Equal(t, tc.retryable, retryable)
})`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/registry_check_pipeline_test.go: `bs.latestBlock.Store(tc.latestBlock)`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/registry_check_pipeline_test.go: `client.On("BlockByNumber", mock.Anything, tc.checkBlock).Return(nil, fmt.Errorf("error"))`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/registry_check_pipeline_test.go: `e.client = client`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/registry_check_pipeline_test.go: `upkeepId.FromBigInt(big.NewInt(12345))`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/registry_check_pipeline_test.go: `t.Run(tc.name, func(t *testing.T) {
ctx := testutils.Context(t)
bs := &BlockSubscriber{
blocks: tc.blocks,
}
e := &EvmRegistry{
lggr: lggr,
bs: bs,
}
if tc.makeEthCall {
client := new(evmClientMocks.Client)
client.On("CallContext", mock.Anything, mock.Anything, "eth_getTransactionReceipt", common.BytesToHash(tc.payload.Trigger.LogTriggerExtension.TxHash[:])).
Return(tc.ethCallErr).Run(func(args mock.Arguments) {
if tc.receipt != nil {
res := args.Get(1).(*types.Receipt)
res.Status = tc.receipt.Status
res.TxHash = tc.receipt.TxHash
res.BlockNumber = tc.receipt.BlockNumber
res.BlockHash = tc.receipt.BlockHash
}
})
e.client = client
}
reason, state, retryable := e.verifyLogExists(ctx, tc.upkeepId, tc.payload)
assert.Equal(t, tc.reason, reason)
assert.Equal(t, tc.state, state)
assert.Equal(t, tc.retryable, retryable)
})`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/registry_check_pipeline_test.go: `client.On("CallContext", mock.Anything, mock.Anything, "eth_getTransactionReceipt", common.BytesToHash(tc.payload.Trigger.LogTriggerExtension.TxHash[:])).
Return(tc.ethCallErr).Run(func(args mock.Arguments) {
if tc.receipt != nil {
res := args.Get(1).(*types.Receipt)
res.Status = tc.receipt.Status
res.TxHash = tc.receipt.TxHash
res.BlockNumber = tc.receipt.BlockNumber
res.BlockHash = tc.receipt.BlockHash
}
})`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/registry_check_pipeline_test.go: `res.Status = tc.receipt.Status`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/registry_check_pipeline_test.go: `res.TxHash = tc.receipt.TxHash`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/registry_check_pipeline_test.go: `res.BlockNumber = tc.receipt.BlockNumber`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/registry_check_pipeline_test.go: `res.BlockHash = tc.receipt.BlockHash`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/registry_check_pipeline_test.go: `e.client = client`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/registry_check_pipeline_test.go: `t.Run(tc.name, func(t *testing.T) {
bs := &BlockSubscriber{
latestBlock: atomic.Pointer[ocr2keepers.BlockKey]{},
blocks: tc.blocks,
}
bs.latestBlock.Store(tc.latestBlock)
e := &EvmRegistry{
lggr: lggr,
bs: bs,
poller: tc.poller,
}
client := new(evmClientMocks.Client)
for _, i := range tc.inputs {
uid := i.UpkeepID.String()
if tc.ethCalls[uid] {
client.On("CallContext", mock.Anything, mock.Anything, "eth_getTransactionReceipt", common.HexToHash("0xc8def8abdcf3a4eaaf6cc13bff3e4e2a7168d86ea41dbbf97451235aa76c3651")).
Return(tc.ethCallErrors[uid]).Run(func(args mock.Arguments) {
receipt := tc.receipts[uid]
if receipt != nil {
res := args.Get(1).(*types.Receipt)
res.Status = receipt.Status
res.TxHash = receipt.TxHash
res.BlockNumber = receipt.BlockNumber
res.BlockHash = receipt.BlockHash
}
})
}
}
e.client = client
results, err := e.checkUpkeeps(testutils.Context(t), tc.inputs)
assert.Equal(t, tc.results, results)
assert.Equal(t, tc.err, err)
})`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/registry_check_pipeline_test.go: `bs.latestBlock.Store(tc.latestBlock)`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/registry_check_pipeline_test.go: `client.On("CallContext", mock.Anything, mock.Anything, "eth_getTransactionReceipt", common.HexToHash("0xc8def8abdcf3a4eaaf6cc13bff3e4e2a7168d86ea41dbbf97451235aa76c3651")).
Return(tc.ethCallErrors[uid]).Run(func(args mock.Arguments) {
receipt := tc.receipts[uid]
if receipt != nil {
res := args.Get(1).(*types.Receipt)
res.Status = receipt.Status
res.TxHash = receipt.TxHash
res.BlockNumber = receipt.BlockNumber
res.BlockHash = receipt.BlockHash
}
})`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/registry_check_pipeline_test.go: `res.Status = receipt.Status`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/registry_check_pipeline_test.go: `res.TxHash = receipt.TxHash`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/registry_check_pipeline_test.go: `res.BlockNumber = receipt.BlockNumber`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/registry_check_pipeline_test.go: `res.BlockHash = receipt.BlockHash`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/registry_check_pipeline_test.go: `e.client = client`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/registry_check_pipeline_test.go: `t.Run(tc.name, func(t *testing.T) {
e := setupEVMRegistry(t)
client := new(evmClientMocks.Client)
client.On("BatchCallContext", mock.Anything, mock.MatchedBy(func(b []rpc.BatchElem) bool {
return len(b) == 2 && b[0].Method == "eth_call" && b[1].Method == "eth_call"
})).Return(nil).
Run(func(args mock.Arguments) {
be := args.Get(1).([]rpc.BatchElem)
be[0].Error = fmt.Errorf("error")
res := "0x0001"
be[1].Result = res
}).Once()
e.client = client
mockReg := mocks.NewRegistry(t)
mockReg.On("GetUpkeep", mock.Anything, mock.Anything).Return(
encoding.UpkeepInfo{OffchainConfig: make([]byte, 0)},
nil,
).Times(2)
e.registry = mockReg
results, err := e.simulatePerformUpkeeps(testutils.Context(t), tc.inputs)
assert.Equal(t, tc.results, results)
assert.Equal(t, tc.err, err)
})`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/registry_check_pipeline_test.go: `client.On("BatchCallContext", mock.Anything, mock.MatchedBy(func(b []rpc.BatchElem) bool {
return len(b) == 2 && b[0].Method == "eth_call" && b[1].Method == "eth_call"
})).Return(nil).
Run(func(args mock.Arguments) {
be := args.Get(1).([]rpc.BatchElem)
be[0].Error = fmt.Errorf("error")
res := "0x0001"
be[1].Result = res
}).Once()`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/registry_check_pipeline_test.go: `be[0].Error = fmt.Errorf("error")`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/registry_check_pipeline_test.go: `be[1].Result = res`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/registry_check_pipeline_test.go: `e.client = client`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/registry_check_pipeline_test.go: `mockReg.On("GetUpkeep", mock.Anything, mock.Anything).Return(
encoding.UpkeepInfo{OffchainConfig: make([]byte, 0)},
nil,
).Times(2)`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/registry_check_pipeline_test.go: `e.registry = mockReg`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/registry_check_pipeline_test.go: `.UpkeepIDFromInt("10")`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/registry_check_pipeline_test.go: `.HexToHash("0x1")`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/registry_check_pipeline_test.go: `.NewInt(1)`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/registry_check_pipeline_test.go: `.NewInt(10)`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/registry_check_pipeline_test.go: `.UpkeepIDFromInt("10")`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/registry_check_pipeline_test.go: `.NewInt(0)`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/registry_check_pipeline_test.go: `.NewInt(10)`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/registry_check_pipeline_test.go: `.NewInt(0)`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/registry_check_pipeline_test.go: `.NewInt(0)`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/registry_check_pipeline_test.go: `.Run(tc.name, func(t *testing.T) {
block, _, upkeep := r.getBlockAndUpkeepId(tc.input.UpkeepID, tc.input.Trigger)
assert.Equal(t, tc.wantBlock, block)
assert.Equal(t, tc.wantUpkeep.String(), upkeep.String())
})`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/registry_check_pipeline_test.go: `.getBlockAndUpkeepId(tc.input.UpkeepID, tc.input.Trigger)`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/registry_check_pipeline_test.go: `.TestLogger(t)`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/registry_check_pipeline_test.go: `.FromBigInt(big.NewInt(12345))`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/registry_check_pipeline_test.go: `.NewInt(12345)`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/registry_check_pipeline_test.go: `.NewInt(500)`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/registry_check_pipeline_test.go: `.NewInt(12345)`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/registry_check_pipeline_test.go: `.HexToHash("0x5bff03de234fe771ac0d685f9ee0fb0b757ea02ec9e6f10e8e2ee806db1b6b83")`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/registry_check_pipeline_test.go: `.NewTrigger(500, common.HexToHash("0x5bff03de234fe771ac0d685f9ee0fb0b757ea02ec9e6f10e8e2ee806db1b6b83"))`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/registry_check_pipeline_test.go: `.HexToHash("0x5bff03de234fe771ac0d685f9ee0fb0b757ea02ec9e6f10e8e2ee806db1b6b83")`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/registry_check_pipeline_test.go: `.HexToHash("abcdef")`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/registry_check_pipeline_test.go: `.NewInt(500)`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/registry_check_pipeline_test.go: `.NewInt(12345)`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/registry_check_pipeline_test.go: `.HexToHash("0x5bff03de234fe771ac0d685f9ee0fb0b757ea02ec9e6f10e8e2ee806db1b6b83")`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/registry_check_pipeline_test.go: `.NewTrigger(500, common.HexToHash("0x5bff03de234fe771ac0d685f9ee0fb0b757ea02ec9e6f10e8e2ee806db1b6b83"))`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/registry_check_pipeline_test.go: `.HexToHash("0x5bff03de234fe771ac0d685f9ee0fb0b757ea02ec9e6f10e8e2ee806db1b6b83")`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/registry_check_pipeline_test.go: `.HexToHash("0x5bff03de234fe771ac0d685f9ee0fb0b757ea02ec9e6f10e8e2ee806db1b6b83")`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/registry_check_pipeline_test.go: `.NewInt(500)`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/registry_check_pipeline_test.go: `.NewInt(12345)`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/registry_check_pipeline_test.go: `.HexToHash("0x5bff03de234fe771ac0d685f9ee0fb0b757ea02ec9e6f10e8e2ee806db1b6b83")`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/registry_check_pipeline_test.go: `.NewTrigger(500, common.HexToHash("0x5bff03de234fe771ac0d685f9ee0fb0b757ea02ec9e6f10e8e2ee806db1b6b83"))`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/registry_check_pipeline_test.go: `.HexToHash("0x5bff03de234fe771ac0d685f9ee0fb0b757ea02ec9e6f10e8e2ee806db1b6b83")`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/registry_check_pipeline_test.go: `.HexToHash("0xcba5cf9e2bb32373c76015384e1098912d9510a72481c78057fcb088209167de")`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/registry_check_pipeline_test.go: `.NewInt(500)`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/registry_check_pipeline_test.go: `.NewInt(12345)`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/registry_check_pipeline_test.go: `.HexToHash("0x5bff03de234fe771ac0d685f9ee0fb0b757ea02ec9e6f10e8e2ee806db1b6b83")`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/registry_check_pipeline_test.go: `.NewTrigger(500, common.HexToHash("0x5bff03de234fe771ac0d685f9ee0fb0b757ea02ec9e6f10e8e2ee806db1b6b83"))`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/registry_check_pipeline_test.go: `.HexToHash("0x5bff03de234fe771ac0d685f9ee0fb0b757ea02ec9e6f10e8e2ee806db1b6b83")`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/registry_check_pipeline_test.go: `.Run(tc.name, func(t *testing.T) {
bs := &BlockSubscriber{
latestBlock: atomic.Pointer[ocr2keepers.BlockKey]{},
blocks: tc.blocks,
}
bs.latestBlock.Store(tc.latestBlock)
e := &EvmRegistry{
lggr: lggr,
bs: bs,
poller: tc.poller,
}
if tc.makeEthCall {
client := new(evmClientMocks.Client)
client.On("BlockByNumber", mock.Anything, tc.checkBlock).Return(nil, fmt.Errorf("error"))
e.client = client
}
state, retryable := e.verifyCheckBlock(testutils.Context(t), tc.checkBlock, tc.upkeepId, tc.checkHash)
assert.Equal(t, tc.state, state)
assert.Equal(t, tc.retryable, retryable)
})`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/registry_check_pipeline_test.go: `.latestBlock.Store(tc.latestBlock)`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/registry_check_pipeline_test.go: `.On("BlockByNumber", mock.Anything, tc.checkBlock)`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/registry_check_pipeline_test.go: `.Return(nil, fmt.Errorf("error"))`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/registry_check_pipeline_test.go: `.verifyCheckBlock(testutils.Context(t), tc.checkBlock, tc.upkeepId, tc.checkHash)`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/registry_check_pipeline_test.go: `.Context(t)`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/registry_check_pipeline_test.go: `.TestLogger(t)`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/registry_check_pipeline_test.go: `.FromBigInt(big.NewInt(12345))`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/registry_check_pipeline_test.go: `.NewInt(12345)`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/registry_check_pipeline_test.go: `.HexToHash("0xc8def8abdcf3a4eaaf6cc13bff3e4e2a7168d86ea41dbbf97451235aa76c3651")`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/registry_check_pipeline_test.go: `.HexToHash("0x3df0e926f3e21ec1195ffe007a2899214905eb02e768aa89ce0b94accd7f3d71")`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/registry_check_pipeline_test.go: `.HexToHash("0xc8def8abdcf3a4eaaf6cc13bff3e4e2a7168d86ea41dbbf97451235aa76c3651")`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/registry_check_pipeline_test.go: `.HexToHash("0x3df0e926f3e21ec1195ffe007a2899214905eb02e768aa89ce0b94accd7f3d71")`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/registry_check_pipeline_test.go: `.NewInt(12345)`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/registry_check_pipeline_test.go: `.NewLogTrigger(550, common.HexToHash("0x5bff03de234fe771ac0d685f9ee0fb0b757ea02ec9e6f10e8e2ee806db1b6b83"), extension)`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/registry_check_pipeline_test.go: `.HexToHash("0x5bff03de234fe771ac0d685f9ee0fb0b757ea02ec9e6f10e8e2ee806db1b6b83")`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/registry_check_pipeline_test.go: `.NewInt(12345)`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/registry_check_pipeline_test.go: `.NewLogTrigger(550, common.HexToHash("0x5bff03de234fe771ac0d685f9ee0fb0b757ea02ec9e6f10e8e2ee806db1b6b83"), extension)`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/registry_check_pipeline_test.go: `.HexToHash("0x5bff03de234fe771ac0d685f9ee0fb0b757ea02ec9e6f10e8e2ee806db1b6b83")`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/registry_check_pipeline_test.go: `.NewInt(12345)`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/registry_check_pipeline_test.go: `.NewLogTrigger(550, common.HexToHash("0x5bff03de234fe771ac0d685f9ee0fb0b757ea02ec9e6f10e8e2ee806db1b6b83"), extension1)`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/registry_check_pipeline_test.go: `.HexToHash("0x5bff03de234fe771ac0d685f9ee0fb0b757ea02ec9e6f10e8e2ee806db1b6b83")`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/registry_check_pipeline_test.go: `.NewInt(550)`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/registry_check_pipeline_test.go: `.HexToHash("0x5bff03de234fe771ac0d685f9ee0fb0b757ea02ec9e6f10e8e2ee806db1b6b83")`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/registry_check_pipeline_test.go: `.NewInt(12345)`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/registry_check_pipeline_test.go: `.NewLogTrigger(550, common.HexToHash("0x5bff03de234fe771ac0d685f9ee0fb0b757ea02ec9e6f10e8e2ee806db1b6b83"), extension1)`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/registry_check_pipeline_test.go: `.HexToHash("0x5bff03de234fe771ac0d685f9ee0fb0b757ea02ec9e6f10e8e2ee806db1b6b83")`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/registry_check_pipeline_test.go: `.NewInt(550)`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/registry_check_pipeline_test.go: `.HexToHash("0x3df0e926f3e21ec1195ffe007a2899214905eb02e768aa89ce0b94accd7f3d71")`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/registry_check_pipeline_test.go: `.NewInt(12345)`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/registry_check_pipeline_test.go: `.NewLogTrigger(550, common.HexToHash("0x5bff03de234fe771ac0d685f9ee0fb0b757ea02ec9e6f10e8e2ee806db1b6b83"), extension)`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/registry_check_pipeline_test.go: `.HexToHash("0x5bff03de234fe771ac0d685f9ee0fb0b757ea02ec9e6f10e8e2ee806db1b6b83")`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/registry_check_pipeline_test.go: `.Run(tc.name, func(t *testing.T) {
ctx := testutils.Context(t)
bs := &BlockSubscriber{
blocks: tc.blocks,
}
e := &EvmRegistry{
lggr: lggr,
bs: bs,
}
if tc.makeEthCall {
client := new(evmClientMocks.Client)
client.On("CallContext", mock.Anything, mock.Anything, "eth_getTransactionReceipt", common.BytesToHash(tc.payload.Trigger.LogTriggerExtension.TxHash[:])).
Return(tc.ethCallErr).Run(func(args mock.Arguments) {
if tc.receipt != nil {
res := args.Get(1).(*types.Receipt)
res.Status = tc.receipt.Status
res.TxHash = tc.receipt.TxHash
res.BlockNumber = tc.receipt.BlockNumber
res.BlockHash = tc.receipt.BlockHash
}
})
e.client = client
}
reason, state, retryable := e.verifyLogExists(ctx, tc.upkeepId, tc.payload)
assert.Equal(t, tc.reason, reason)
assert.Equal(t, tc.state, state)
assert.Equal(t, tc.retryable, retryable)
})`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/registry_check_pipeline_test.go: `.Context(t)`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/registry_check_pipeline_test.go: `.On("CallContext", mock.Anything, mock.Anything, "eth_getTransactionReceipt", common.BytesToHash(tc.payload.Trigger.LogTriggerExtension.TxHash[:]))`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/registry_check_pipeline_test.go: `.BytesToHash(tc.payload.Trigger.LogTriggerExtension.TxHash[:])`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/registry_check_pipeline_test.go: `.
Return(tc.ethCallErr)`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/registry_check_pipeline_test.go: `.Run(func(args mock.Arguments) {
if tc.receipt != nil {
res := args.Get(1).(*types.Receipt)
res.Status = tc.receipt.Status
res.TxHash = tc.receipt.TxHash
res.BlockNumber = tc.receipt.BlockNumber
res.BlockHash = tc.receipt.BlockHash
}
})`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/registry_check_pipeline_test.go: `.Get(1)`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/registry_check_pipeline_test.go: `.verifyLogExists(ctx, tc.upkeepId, tc.payload)`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/registry_check_pipeline_test.go: `.TestLogger(t)`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/registry_check_pipeline_test.go: `.GenUpkeepID(types3.UpkeepType(0), "p0")`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/registry_check_pipeline_test.go: `.UpkeepType(0)`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/registry_check_pipeline_test.go: `.GenUpkeepID(types3.UpkeepType(1), "p1")`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/registry_check_pipeline_test.go: `.UpkeepType(1)`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/registry_check_pipeline_test.go: `.GenUpkeepID(types3.UpkeepType(1), "p2")`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/registry_check_pipeline_test.go: `.UpkeepType(1)`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/registry_check_pipeline_test.go: `.HexToHash("0xc8def8abdcf3a4eaaf6cc13bff3e4e2a7168d86ea41dbbf97451235aa76c3651")`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/registry_check_pipeline_test.go: `.HexToHash("0x0919c83363b439ea634ce2b576cf3e30db26b340fb7a12058c2fcc401bd04ba0")`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/registry_check_pipeline_test.go: `.HexToHash("0xc8def8abdcf3a4eaaf6cc13bff3e4e2a7168d86ea41dbbf97451235aa76c3651")`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/registry_check_pipeline_test.go: `.HexToHash("0x9840e5b709bfccf6a1b44f34c884bc39403f57923f3f5ead6243cc090546b857")`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/registry_check_pipeline_test.go: `.NewTrigger(575, common.HexToHash("0x1c77db0abe32327cf3ea9de2aadf79876f9e6b6dfcee9d4719a8a2dc8ca289d0"))`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/registry_check_pipeline_test.go: `.HexToHash("0x1c77db0abe32327cf3ea9de2aadf79876f9e6b6dfcee9d4719a8a2dc8ca289d0")`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/registry_check_pipeline_test.go: `.NewLogTrigger(560, common.HexToHash("0x9840e5b709bfccf6a1b44f34c884bc39403f57923f3f5ead6243cc090546b857"), extension1)`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/registry_check_pipeline_test.go: `.HexToHash("0x9840e5b709bfccf6a1b44f34c884bc39403f57923f3f5ead6243cc090546b857")`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/registry_check_pipeline_test.go: `.NewLogTrigger(570, common.HexToHash("0x1222d75217e2dd461cc77e4091c37abe76277430d97f1963a822b4e94ebb83fc"), extension2)`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/registry_check_pipeline_test.go: `.HexToHash("0x1222d75217e2dd461cc77e4091c37abe76277430d97f1963a822b4e94ebb83fc")`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/registry_check_pipeline_test.go: `.NewInt(0)`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/registry_check_pipeline_test.go: `.NewInt(0)`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/registry_check_pipeline_test.go: `.NewInt(0)`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/registry_check_pipeline_test.go: `.NewInt(0)`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/registry_check_pipeline_test.go: `.NewInt(0)`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/registry_check_pipeline_test.go: `.NewInt(0)`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/registry_check_pipeline_test.go: `.String()`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/registry_check_pipeline_test.go: `.HexToHash("0xcba5cf9e2bb32373c76015384e1098912d9510a72481c78057fcb088209167de")`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/registry_check_pipeline_test.go: `.String()`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/registry_check_pipeline_test.go: `.Run(tc.name, func(t *testing.T) {
bs := &BlockSubscriber{
latestBlock: atomic.Pointer[ocr2keepers.BlockKey]{},
blocks: tc.blocks,
}
bs.latestBlock.Store(tc.latestBlock)
e := &EvmRegistry{
lggr: lggr,
bs: bs,
poller: tc.poller,
}
client := new(evmClientMocks.Client)
for _, i := range tc.inputs {
uid := i.UpkeepID.String()
if tc.ethCalls[uid] {
client.On("CallContext", mock.Anything, mock.Anything, "eth_getTransactionReceipt", common.HexToHash("0xc8def8abdcf3a4eaaf6cc13bff3e4e2a7168d86ea41dbbf97451235aa76c3651")).
Return(tc.ethCallErrors[uid]).Run(func(args mock.Arguments) {
receipt := tc.receipts[uid]
if receipt != nil {
res := args.Get(1).(*types.Receipt)
res.Status = receipt.Status
res.TxHash = receipt.TxHash
res.BlockNumber = receipt.BlockNumber
res.BlockHash = receipt.BlockHash
}
})
}
}
e.client = client
results, err := e.checkUpkeeps(testutils.Context(t), tc.inputs)
assert.Equal(t, tc.results, results)
assert.Equal(t, tc.err, err)
})`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/registry_check_pipeline_test.go: `.latestBlock.Store(tc.latestBlock)`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/registry_check_pipeline_test.go: `.UpkeepID.String()`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/registry_check_pipeline_test.go: `.On("CallContext", mock.Anything, mock.Anything, "eth_getTransactionReceipt", common.HexToHash("0xc8def8abdcf3a4eaaf6cc13bff3e4e2a7168d86ea41dbbf97451235aa76c3651"))`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/registry_check_pipeline_test.go: `.HexToHash("0xc8def8abdcf3a4eaaf6cc13bff3e4e2a7168d86ea41dbbf97451235aa76c3651")`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/registry_check_pipeline_test.go: `.
Return(tc.ethCallErrors[uid])`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/registry_check_pipeline_test.go: `.Run(func(args mock.Arguments) {
receipt := tc.receipts[uid]
if receipt != nil {
res := args.Get(1).(*types.Receipt)
res.Status = receipt.Status
res.TxHash = receipt.TxHash
res.BlockNumber = receipt.BlockNumber
res.BlockHash = receipt.BlockHash
}
})`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/registry_check_pipeline_test.go: `.Get(1)`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/registry_check_pipeline_test.go: `.checkUpkeeps(testutils.Context(t), tc.inputs)`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/registry_check_pipeline_test.go: `.Context(t)`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/registry_check_pipeline_test.go: `.GenUpkeepID(types3.UpkeepType(0), "p0")`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/registry_check_pipeline_test.go: `.UpkeepType(0)`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/registry_check_pipeline_test.go: `.GenUpkeepID(types3.UpkeepType(1), "p1")`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/registry_check_pipeline_test.go: `.UpkeepType(1)`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/registry_check_pipeline_test.go: `.GenUpkeepID(types3.UpkeepType(1), "p2")`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/registry_check_pipeline_test.go: `.UpkeepType(1)`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/registry_check_pipeline_test.go: `.HexToHash("0xc8def8abdcf3a4eaaf6cc13bff3e4e2a7168d86ea41dbbf97451235aa76c3651")`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/registry_check_pipeline_test.go: `.HexToHash("0x9840e5b709bfccf6a1b44f34c884bc39403f57923f3f5ead6243cc090546b857")`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/registry_check_pipeline_test.go: `.NewTrigger(150, common.HexToHash("0x1c77db0abe32327cf3ea9de2aadf79876f9e6b6dfcee9d4719a8a2dc8ca289d0"))`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/registry_check_pipeline_test.go: `.HexToHash("0x1c77db0abe32327cf3ea9de2aadf79876f9e6b6dfcee9d4719a8a2dc8ca289d0")`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/registry_check_pipeline_test.go: `.NewLogTrigger(570, common.HexToHash("0x1222d75217e2dd461cc77e4091c37abe76277430d97f1963a822b4e94ebb83fc"), extension1)`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/registry_check_pipeline_test.go: `.HexToHash("0x1222d75217e2dd461cc77e4091c37abe76277430d97f1963a822b4e94ebb83fc")`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/registry_check_pipeline_test.go: `.NewLogTrigger(570, common.HexToHash("0x1222d75217e2dd461cc77e4091c37abe76277430d97f1963a822b4e94ebb83fc"), extension1)`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/registry_check_pipeline_test.go: `.HexToHash("0x1222d75217e2dd461cc77e4091c37abe76277430d97f1963a822b4e94ebb83fc")`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/registry_check_pipeline_test.go: `.NewInt(0)`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/registry_check_pipeline_test.go: `.NewInt(0)`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/registry_check_pipeline_test.go: `.NewInt(20000)`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/registry_check_pipeline_test.go: `.NewInt(20000)`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/registry_check_pipeline_test.go: `.NewInt(20000)`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/registry_check_pipeline_test.go: `.NewInt(20000)`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/registry_check_pipeline_test.go: `.NewInt(20000)`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/registry_check_pipeline_test.go: `.NewInt(20000)`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/registry_check_pipeline_test.go: `.NewInt(20000)`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/registry_check_pipeline_test.go: `.NewInt(20000)`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/registry_check_pipeline_test.go: `.Run(tc.name, func(t *testing.T) {
e := setupEVMRegistry(t)
client := new(evmClientMocks.Client)
client.On("BatchCallContext", mock.Anything, mock.MatchedBy(func(b []rpc.BatchElem) bool {
return len(b) == 2 && b[0].Method == "eth_call" && b[1].Method == "eth_call"
})).Return(nil).
Run(func(args mock.Arguments) {
be := args.Get(1).([]rpc.BatchElem)
be[0].Error = fmt.Errorf("error")
res := "0x0001"
be[1].Result = res
}).Once()
e.client = client
mockReg := mocks.NewRegistry(t)
mockReg.On("GetUpkeep", mock.Anything, mock.Anything).Return(
encoding.UpkeepInfo{OffchainConfig: make([]byte, 0)},
nil,
).Times(2)
e.registry = mockReg
results, err := e.simulatePerformUpkeeps(testutils.Context(t), tc.inputs)
assert.Equal(t, tc.results, results)
assert.Equal(t, tc.err, err)
})`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/registry_check_pipeline_test.go: `.On("BatchCallContext", mock.Anything, mock.MatchedBy(func(b []rpc.BatchElem) bool {
return len(b) == 2 && b[0].Method == "eth_call" && b[1].Method == "eth_call"
}))`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/registry_check_pipeline_test.go: `.MatchedBy(func(b []rpc.BatchElem) bool {
return len(b) == 2 && b[0].Method == "eth_call" && b[1].Method == "eth_call"
})`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/registry_check_pipeline_test.go: `.Return(nil)`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/registry_check_pipeline_test.go: `.
Run(func(args mock.Arguments) {
be := args.Get(1).([]rpc.BatchElem)
be[0].Error = fmt.Errorf("error")
res := "0x0001"
be[1].Result = res
})`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/registry_check_pipeline_test.go: `.Get(1)`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/registry_check_pipeline_test.go: `.Once()`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/registry_check_pipeline_test.go: `.NewRegistry(t)`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/registry_check_pipeline_test.go: `.On("GetUpkeep", mock.Anything, mock.Anything)`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/registry_check_pipeline_test.go: `.Return(
encoding.UpkeepInfo{OffchainConfig: make([]byte, 0)},
nil,
)`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/registry_check_pipeline_test.go: `.Times(2)`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/registry_check_pipeline_test.go: `.simulatePerformUpkeeps(testutils.Context(t), tc.inputs)`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/registry_check_pipeline_test.go: `.Context(t)`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/registry_test.go: `t.Run(test.Name, func(t *testing.T) {
mockConfig := NewMercuryConfig(&types.MercuryCredentials{
URL: test.URL,
LegacyURL: test.LegacyURL,
Username: "user",
Password: "pass",
}, core.StreamsCompatibleABI)
result := mockConfig.Credentials()
// Assert that trailing slashes are removed
assert.Equal(t, "http://example.com", result.URL)
assert.Equal(t, "http://legacy.example.com", result.LegacyURL)
assert.Equal(t, "user", result.Username)
assert.Equal(t, "pass", result.Password)
})`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/registry_test.go: `t.Run(test.Name, func(t *testing.T) {
ctx := testutils.Context(t)
mp := new(mocks.LogPoller)
if test.LatestBlock != nil {
mp.On("LatestBlock", mock.Anything).
Return(logpoller.LogPollerBlock{BlockNumber: test.LatestBlock.OutputBlock}, test.LatestBlock.OutputErr)
}
if test.LogsWithSigs != nil {
fc := test.LogsWithSigs
mp.On("LogsWithSigs", mock.Anything, fc.InputStart, fc.InputEnd, upkeepStateEvents, test.Address).Return(fc.OutputLogs, fc.OutputErr)
}
rg := &EvmRegistry{
addr: test.Address,
lastPollBlock: test.LastPoll,
poller: mp,
chLog: make(chan logpoller.Log, 10),
}
err := rg.pollUpkeepStateLogs(ctx)
assert.Equal(t, test.ExpectedLastPoll, rg.lastPollBlock)
if test.ExpectedErr != nil {
assert.ErrorIs(t, err, test.ExpectedErr)
} else {
assert.Nil(t, err)
}
var outputLogCount int
CheckLoop:
for {
chT := time.NewTimer(20 * time.Millisecond)
select {
case l := <-rg.chLog:
chT.Stop()
if test.LogsWithSigs == nil {
assert.FailNow(t, "logs detected but no logs were expected")
}
outputLogCount++
assert.Contains(t, test.LogsWithSigs.OutputLogs, l)
case <-chT.C:
break CheckLoop
}
}
if test.LogsWithSigs != nil {
assert.Equal(t, len(test.LogsWithSigs.OutputLogs), outputLogCount)
}
mp.AssertExpectations(t)
})`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/registry_test.go: `mp.On("LatestBlock", mock.Anything).
Return(logpoller.LogPollerBlock{BlockNumber: test.LatestBlock.OutputBlock}, test.LatestBlock.OutputErr)`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/registry_test.go: `mp.On("LogsWithSigs", mock.Anything, fc.InputStart, fc.InputEnd, upkeepStateEvents, test.Address).Return(fc.OutputLogs, fc.OutputErr)`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/registry_test.go: `chT.Stop()`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/registry_test.go: `outputLogCount++`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/registry_test.go: `mp.AssertExpectations(t)`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/registry_test.go: `res = append(res, core.GenUpkeepID(types2.LogTrigger, fmt.Sprintf("%d", i)).BigInt())`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/registry_test.go: `res = append(res, core.GenUpkeepID(types2.LogTrigger, fmt.Sprintf("%d", i)).BigInt())`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/registry_test.go: `t.Run(tc.name, func(t *testing.T) {
ctx := tests.Context(t)
lggr := logger.TestLogger(t)
var hb types3.HeadBroadcaster
var lp logpoller.LogPoller
bs := NewBlockSubscriber(hb, lp, 1000, lggr)
registry := &EvmRegistry{
addr: common.BigToAddress(big.NewInt(1)),
poller: tc.poller,
logEventProvider: tc.logEventProvider,
chLog: make(chan logpoller.Log, 10),
bs: bs,
registry: tc.registry,
packer: tc.packer,
lggr: lggr,
}
err := registry.refreshLogTriggerUpkeeps(ctx, tc.ids)
if tc.expectsErr {
assert.Error(t, err)
assert.Equal(t, err.Error(), tc.wantErr.Error())
} else {
assert.NoError(t, err)
}
})`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/registry_test.go: `.Run(test.Name, func(t *testing.T) {
mockConfig := NewMercuryConfig(&types.MercuryCredentials{
URL: test.URL,
LegacyURL: test.LegacyURL,
Username: "user",
Password: "pass",
}, core.StreamsCompatibleABI)
result := mockConfig.Credentials()
// Assert that trailing slashes are removed
assert.Equal(t, "http://example.com", result.URL)
assert.Equal(t, "http://legacy.example.com", result.LegacyURL)
assert.Equal(t, "user", result.Username)
assert.Equal(t, "pass", result.Password)
})`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/registry_test.go: `.Credentials()`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/registry_test.go: `.BigToAddress(big.NewInt(1))`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/registry_test.go: `.NewInt(1)`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/registry_test.go: `.BigToAddress(big.NewInt(1))`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/registry_test.go: `.NewInt(1)`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/registry_test.go: `.New(big.NewInt(5))`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/registry_test.go: `.NewInt(5)`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/registry_test.go: `.New(big.NewInt(6))`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/registry_test.go: `.NewInt(6)`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/registry_test.go: `.Run(test.Name, func(t *testing.T) {
ctx := testutils.Context(t)
mp := new(mocks.LogPoller)
if test.LatestBlock != nil {
mp.On("LatestBlock", mock.Anything).
Return(logpoller.LogPollerBlock{BlockNumber: test.LatestBlock.OutputBlock}, test.LatestBlock.OutputErr)
}
if test.LogsWithSigs != nil {
fc := test.LogsWithSigs
mp.On("LogsWithSigs", mock.Anything, fc.InputStart, fc.InputEnd, upkeepStateEvents, test.Address).Return(fc.OutputLogs, fc.OutputErr)
}
rg := &EvmRegistry{
addr: test.Address,
lastPollBlock: test.LastPoll,
poller: mp,
chLog: make(chan logpoller.Log, 10),
}
err := rg.pollUpkeepStateLogs(ctx)
assert.Equal(t, test.ExpectedLastPoll, rg.lastPollBlock)
if test.ExpectedErr != nil {
assert.ErrorIs(t, err, test.ExpectedErr)
} else {
assert.Nil(t, err)
}
var outputLogCount int
CheckLoop:
for {
chT := time.NewTimer(20 * time.Millisecond)
select {
case l := <-rg.chLog:
chT.Stop()
if test.LogsWithSigs == nil {
assert.FailNow(t, "logs detected but no logs were expected")
}
outputLogCount++
assert.Contains(t, test.LogsWithSigs.OutputLogs, l)
case <-chT.C:
break CheckLoop
}
}
if test.LogsWithSigs != nil {
assert.Equal(t, len(test.LogsWithSigs.OutputLogs), outputLogCount)
}
mp.AssertExpectations(t)
})`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/registry_test.go: `.Context(t)`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/registry_test.go: `.On("LatestBlock", mock.Anything)`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/registry_test.go: `.
Return(logpoller.LogPollerBlock{BlockNumber: test.LatestBlock.OutputBlock}, test.LatestBlock.OutputErr)`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/registry_test.go: `.On("LogsWithSigs", mock.Anything, fc.InputStart, fc.InputEnd, upkeepStateEvents, test.Address)`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/registry_test.go: `.Return(fc.OutputLogs, fc.OutputErr)`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/registry_test.go: `.pollUpkeepStateLogs(ctx)`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/registry_test.go: `.NewTimer(20 * time.Millisecond)`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/registry_test.go: `.Stop()`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/registry_test.go: `.AssertExpectations(t)`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/registry_test.go: `.GenUpkeepID(types2.LogTrigger, "abc")`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/registry_test.go: `.BigInt()`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/registry_test.go: `.Topic()`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/registry_test.go: `.New("indexed logs boom")`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/registry_test.go: `.New("indexed logs boom")`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/registry_test.go: `.GenUpkeepID(types2.LogTrigger, "abc")`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/registry_test.go: `.BigInt()`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/registry_test.go: `.GenUpkeepID(types2.ConditionTrigger, "abc")`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/registry_test.go: `.BigInt()`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/registry_test.go: `.NewInt(-1)`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/registry_test.go: `.Topic()`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/registry_test.go: `.New("indexed logs boom")`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/registry_test.go: `.New("indexed logs boom")`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/registry_test.go: `.GenUpkeepID(types2.LogTrigger, "abc")`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/registry_test.go: `.BigInt()`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/registry_test.go: `.GenUpkeepID(types2.ConditionTrigger, "abc")`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/registry_test.go: `.BigInt()`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/registry_test.go: `.NewInt(-1)`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/registry_test.go: `.New("parse log boom")`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/registry_test.go: `.New("parse log boom")`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/registry_test.go: `.GenUpkeepID(types2.LogTrigger, "abc")`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/registry_test.go: `.BigInt()`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/registry_test.go: `.GenUpkeepID(types2.ConditionTrigger, "abc")`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/registry_test.go: `.BigInt()`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/registry_test.go: `.NewInt(-1)`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/registry_test.go: `.New("register filter boom")`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/registry_test.go: `.GenUpkeepID(types2.LogTrigger, "abc")`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/registry_test.go: `.BigInt()`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/registry_test.go: `.GenUpkeepID(types2.LogTrigger, "abc")`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/registry_test.go: `.BigInt()`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/registry_test.go: `.New("failed to update trigger config for upkeep id 452312848583266388373324160190187140521564213162920931037143039228013182976: failed to register log filter: register filter boom")`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/registry_test.go: `.GenUpkeepID(types2.LogTrigger, "abc")`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/registry_test.go: `.BigInt()`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/registry_test.go: `.GenUpkeepID(types2.LogTrigger, "def")`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/registry_test.go: `.BigInt()`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/registry_test.go: `.GenUpkeepID(types2.ConditionTrigger, "abc")`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/registry_test.go: `.BigInt()`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/registry_test.go: `.NewInt(-1)`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/registry_test.go: `.GenUpkeepID(types2.LogTrigger, "abc")`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/registry_test.go: `.BigInt()`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/registry_test.go: `.GenUpkeepID(types2.LogTrigger, "def")`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/registry_test.go: `.BigInt()`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/registry_test.go: `.GenUpkeepID(types2.LogTrigger, fmt.Sprintf("%d", i))`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/registry_test.go: `.Sprintf("%d", i)`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/registry_test.go: `.BigInt()`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/registry_test.go: `.GenUpkeepID(types2.LogTrigger, "abc")`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/registry_test.go: `.BigInt()`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/registry_test.go: `.GenUpkeepID(types2.LogTrigger, "def")`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/registry_test.go: `.BigInt()`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/registry_test.go: `.GenUpkeepID(types2.LogTrigger, fmt.Sprintf("%d", i))`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/registry_test.go: `.Sprintf("%d", i)`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/registry_test.go: `.BigInt()`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/registry_test.go: `.GenUpkeepID(types2.LogTrigger, "abc")`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/registry_test.go: `.BigInt()`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/registry_test.go: `.GenUpkeepID(types2.LogTrigger, "def")`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/registry_test.go: `.BigInt()`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/registry_test.go: `.Run(tc.name, func(t *testing.T) {
ctx := tests.Context(t)
lggr := logger.TestLogger(t)
var hb types3.HeadBroadcaster
var lp logpoller.LogPoller
bs := NewBlockSubscriber(hb, lp, 1000, lggr)
registry := &EvmRegistry{
addr: common.BigToAddress(big.NewInt(1)),
poller: tc.poller,
logEventProvider: tc.logEventProvider,
chLog: make(chan logpoller.Log, 10),
bs: bs,
registry: tc.registry,
packer: tc.packer,
lggr: lggr,
}
err := registry.refreshLogTriggerUpkeeps(ctx, tc.ids)
if tc.expectsErr {
assert.Error(t, err)
assert.Equal(t, err.Error(), tc.wantErr.Error())
} else {
assert.NoError(t, err)
}
})`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/registry_test.go: `.Context(t)`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/registry_test.go: `.TestLogger(t)`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/registry_test.go: `.BigToAddress(big.NewInt(1))`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/registry_test.go: `.NewInt(1)`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/registry_test.go: `.refreshLogTriggerUpkeeps(ctx, tc.ids)`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/transmit/cache_test.go: `t.Run(tc.name, func(t *testing.T) {
c := newTransmitEventCache(tc.cap)
require.Equal(t, len(tc.eventsToAdd), len(tc.logIDsToAdd))
for i, e := range tc.eventsToAdd {
c.add(tc.logIDsToAdd[i], e)
}
require.Equal(t, len(tc.toGet), len(tc.blocksToGet))
for i, logID := range tc.toGet {
e, exist := c.get(ocr2keepers.BlockNumber(tc.blocksToGet[i]), logID)
expected, ok := tc.expected[logID]
if !ok {
require.False(t, exist, "expected not to find logID %s", logID)
continue
}
require.True(t, exist, "expected to find logID %s", logID)
require.Equal(t, expected.WorkID, e.WorkID)
}
})`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/transmit/cache_test.go: `c.add(tc.logIDsToAdd[i], e)`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/transmit/cache_test.go: `.Run(tc.name, func(t *testing.T) {
c := newTransmitEventCache(tc.cap)
require.Equal(t, len(tc.eventsToAdd), len(tc.logIDsToAdd))
for i, e := range tc.eventsToAdd {
c.add(tc.logIDsToAdd[i], e)
}
require.Equal(t, len(tc.toGet), len(tc.blocksToGet))
for i, logID := range tc.toGet {
e, exist := c.get(ocr2keepers.BlockNumber(tc.blocksToGet[i]), logID)
expected, ok := tc.expected[logID]
if !ok {
require.False(t, exist, "expected not to find logID %s", logID)
continue
}
require.True(t, exist, "expected to find logID %s", logID)
require.Equal(t, expected.WorkID, e.WorkID)
}
})`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/transmit/cache_test.go: `.add(tc.logIDsToAdd[i], e)`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/transmit/cache_test.go: `.get(ocr2keepers.BlockNumber(tc.blocksToGet[i]), logID)`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/transmit/cache_test.go: `.BlockNumber(tc.blocksToGet[i])`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/transmit/encoding_test.go: `t.Run(tc.name, func(t *testing.T) {
if tc.log.Id() != nil {
require.Equal(t, uid.BigInt().Int64(), tc.log.Id().Int64())
require.Equal(t, []byte{0x1, 0x2, 0x3, 0x4, 0x5, 0x6, 0x7, 0x8}, tc.log.Trigger())
}
require.Equal(t, tc.etype, tc.log.TransmitEventType())
})`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/transmit/encoding_test.go: `.GenUpkeepID(types.ConditionTrigger, "111")`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/transmit/encoding_test.go: `.HexToHash("0x010203040")`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/transmit/encoding_test.go: `.BigInt()`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/transmit/encoding_test.go: `.HexToHash("0x010203040")`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/transmit/encoding_test.go: `.BigInt()`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/transmit/encoding_test.go: `.HexToHash("0x010203040")`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/transmit/encoding_test.go: `.BigInt()`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/transmit/encoding_test.go: `.HexToHash("0x010203040")`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/transmit/encoding_test.go: `.BigInt()`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/transmit/encoding_test.go: `.HexToHash("0x010203040")`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/transmit/encoding_test.go: `.Run(tc.name, func(t *testing.T) {
if tc.log.Id() != nil {
require.Equal(t, uid.BigInt().Int64(), tc.log.Id().Int64())
require.Equal(t, []byte{0x1, 0x2, 0x3, 0x4, 0x5, 0x6, 0x7, 0x8}, tc.log.Trigger())
}
require.Equal(t, tc.etype, tc.log.TransmitEventType())
})`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/transmit/encoding_test.go: `.log.Id()`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/transmit/event_provider_test.go: `lp.On("RegisterFilter", mock.Anything, mock.Anything).Return(nil)`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/transmit/event_provider_test.go: `runtime.Gosched()`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/transmit/event_provider_test.go: `t.Run(tc.name, func(t *testing.T) {
lp.On("LatestBlock", mock.Anything).Return(logpoller.LogPollerBlock{BlockNumber: tc.latestBlock}, nil)
lp.On("LogsWithSigs", mock.Anything, mock.Anything, mock.Anything, mock.Anything, mock.Anything).Return(tc.logs, nil)
res, err := provider.GetLatestEvents(ctx)
require.Equal(t, tc.errored, err != nil)
require.Len(t, res, tc.resultsLen)
})`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/transmit/event_provider_test.go: `lp.On("LatestBlock", mock.Anything).Return(logpoller.LogPollerBlock{BlockNumber: tc.latestBlock}, nil)`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/transmit/event_provider_test.go: `lp.On("LogsWithSigs", mock.Anything, mock.Anything, mock.Anything, mock.Anything, mock.Anything).Return(tc.logs, nil)`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/transmit/event_provider_test.go: `lp.On("RegisterFilter", mock.Anything, mock.Anything).Return(nil)`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/transmit/event_provider_test.go: `t.Run(tc.name, func(t *testing.T) {
parseResults := make(map[string]transmitEventLog, len(tc.parsedPerformed))
performedLogs := make([]logpoller.Log, len(tc.parsedPerformed))
for i, l := range tc.parsedPerformed {
performedLogs[i] = l.Log
if _, ok := parseResults[provider.logKey(l.Log)]; ok {
continue
}
parseResults[provider.logKey(l.Log)] = l
}
provider.mu.Lock()
provider.cache = newTransmitEventCache(provider.cache.cap)
provider.parseLog = func(registry *ac.IAutomationV21PlusCommon, log logpoller.Log) (transmitEventLog, error) {
return parseResults[provider.logKey(log)], nil
}
provider.mu.Unlock()
results, err := provider.processLogs(tc.latestBlock, performedLogs...)
require.Equal(t, tc.errored, err != nil)
require.Len(t, results, len(tc.want))
for i, res := range results {
require.Equal(t, tc.want[i].Type, res.Type)
require.Equal(t, tc.want[i].UpkeepID, res.UpkeepID)
require.Equal(t, tc.want[i].CheckBlock, res.CheckBlock)
}
})`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/transmit/event_provider_test.go: `performedLogs[i] = l.Log`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/transmit/event_provider_test.go: `parseResults[provider.logKey(l.Log)] = l`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/transmit/event_provider_test.go: `provider.mu.Lock()`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/transmit/event_provider_test.go: `provider.cache = newTransmitEventCache(provider.cache.cap)`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/transmit/event_provider_test.go: `provider.mu.Unlock()`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/transmit/event_provider_test.go: `.Context(t)`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/transmit/event_provider_test.go: `.On("RegisterFilter", mock.Anything, mock.Anything)`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/transmit/event_provider_test.go: `.Return(nil)`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/transmit/event_provider_test.go: `.TestLogger(t)`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/transmit/event_provider_test.go: `.HexToAddress("0x")`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/transmit/event_provider_test.go: `.NewNullClient(big.NewInt(1), logger.TestLogger(t))`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/transmit/event_provider_test.go: `.NewInt(1)`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/transmit/event_provider_test.go: `.TestLogger(t)`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/transmit/event_provider_test.go: `.HealthReport()`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/transmit/event_provider_test.go: `.Start(ctx)`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/transmit/event_provider_test.go: `.Err()`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/transmit/event_provider_test.go: `.Ready()`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/transmit/event_provider_test.go: `.Gosched()`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/transmit/event_provider_test.go: `.HealthReport()`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/transmit/event_provider_test.go: `.HexToHash("0x1")`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/transmit/event_provider_test.go: `.HexToHash("0x1")`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/transmit/event_provider_test.go: `.HexToAddress("0x1")`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/transmit/event_provider_test.go: `.Topic()`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/transmit/event_provider_test.go: `.Bytes()`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/transmit/event_provider_test.go: `.Topic()`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/transmit/event_provider_test.go: `.Run(tc.name, func(t *testing.T) {
lp.On("LatestBlock", mock.Anything).Return(logpoller.LogPollerBlock{BlockNumber: tc.latestBlock}, nil)
lp.On("LogsWithSigs", mock.Anything, mock.Anything, mock.Anything, mock.Anything, mock.Anything).Return(tc.logs, nil)
res, err := provider.GetLatestEvents(ctx)
require.Equal(t, tc.errored, err != nil)
require.Len(t, res, tc.resultsLen)
})`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/transmit/event_provider_test.go: `.On("LatestBlock", mock.Anything)`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/transmit/event_provider_test.go: `.Return(logpoller.LogPollerBlock{BlockNumber: tc.latestBlock}, nil)`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/transmit/event_provider_test.go: `.On("LogsWithSigs", mock.Anything, mock.Anything, mock.Anything, mock.Anything, mock.Anything)`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/transmit/event_provider_test.go: `.Return(tc.logs, nil)`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/transmit/event_provider_test.go: `.GetLatestEvents(ctx)`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/transmit/event_provider_test.go: `.On("RegisterFilter", mock.Anything, mock.Anything)`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/transmit/event_provider_test.go: `.Return(nil)`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/transmit/event_provider_test.go: `.NewClient(t)`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/transmit/event_provider_test.go: `.Context(t)`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/transmit/event_provider_test.go: `.TestLogger(t)`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/transmit/event_provider_test.go: `.HexToAddress("0x")`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/transmit/event_provider_test.go: `.GenUpkeepID(types.LogTrigger, "1111111111111111")`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/transmit/event_provider_test.go: `.HexToHash("0x0102030405060708010203040506070801020304050607080102030405060708")`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/transmit/event_provider_test.go: `.BigInt()`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/transmit/event_provider_test.go: `.Decode("0x0000000000000000000000000000000000000000000000000000000001111abc0000000000000000000000000000000000000000000000000000000001111111000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000001111111")`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/transmit/event_provider_test.go: `.BlockNumber(1)`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/transmit/event_provider_test.go: `.HexToHash("0x0102030405060708010203040506070801020304050607080102030405060708")`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/transmit/event_provider_test.go: `.BigInt()`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/transmit/event_provider_test.go: `.Decode("0x0000000000000000000000000000000000000000000000000000000001111abc0000000000000000000000000000000000000000000000000000000001111111000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000001111111")`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/transmit/event_provider_test.go: `.HexToHash("0x0102030405060708010203040506070801020304050607080102030405060708")`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/transmit/event_provider_test.go: `.BigInt()`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/transmit/event_provider_test.go: `.Decode("0x0000000000000000000000000000000000000000000000000000000001111abc0000000000000000000000000000000000000000000000000000000001111111000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000001111111")`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/transmit/event_provider_test.go: `.BlockNumber(1)`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/transmit/event_provider_test.go: `.BlockNumber(1)`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/transmit/event_provider_test.go: `.Run(tc.name, func(t *testing.T) {
parseResults := make(map[string]transmitEventLog, len(tc.parsedPerformed))
performedLogs := make([]logpoller.Log, len(tc.parsedPerformed))
for i, l := range tc.parsedPerformed {
performedLogs[i] = l.Log
if _, ok := parseResults[provider.logKey(l.Log)]; ok {
continue
}
parseResults[provider.logKey(l.Log)] = l
}
provider.mu.Lock()
provider.cache = newTransmitEventCache(provider.cache.cap)
provider.parseLog = func(registry *ac.IAutomationV21PlusCommon, log logpoller.Log) (transmitEventLog, error) {
return parseResults[provider.logKey(log)], nil
}
provider.mu.Unlock()
results, err := provider.processLogs(tc.latestBlock, performedLogs...)
require.Equal(t, tc.errored, err != nil)
require.Len(t, results, len(tc.want))
for i, res := range results {
require.Equal(t, tc.want[i].Type, res.Type)
require.Equal(t, tc.want[i].UpkeepID, res.UpkeepID)
require.Equal(t, tc.want[i].CheckBlock, res.CheckBlock)
}
})`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/transmit/event_provider_test.go: `.logKey(l.Log)`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/transmit/event_provider_test.go: `.logKey(l.Log)`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/transmit/event_provider_test.go: `.mu.Lock()`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/transmit/event_provider_test.go: `.logKey(log)`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/transmit/event_provider_test.go: `.mu.Unlock()`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/transmit/event_provider_test.go: `.processLogs(tc.latestBlock, performedLogs...)`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/upkeep_provider_test.go: `t.Run(tc.name, func(t *testing.T) {
bs := &BlockSubscriber{
latestBlock: atomic.Pointer[ocr2keepers.BlockKey]{},
}
bs.latestBlock.Store(tc.latestBlock)
p := NewUpkeepProvider(tc.active, bs, lp)
got, err := p.GetActiveUpkeeps(ctx)
if tc.wantErr {
require.Error(t, err)
return
}
require.NoError(t, err)
require.Len(t, got, len(tc.want))
require.Equal(t, tc.want, got)
})`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/upkeep_provider_test.go: `bs.latestBlock.Store(tc.latestBlock)`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/upkeep_provider_test.go: `.Context(t)`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/upkeep_provider_test.go: `.NewInt(1)`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/upkeep_provider_test.go: `.NewInt(2)`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/upkeep_provider_test.go: `.UpkeepIDFromInt("1")`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/upkeep_provider_test.go: `.NewTrigger(ocr2keepers.BlockNumber(1), [32]byte{})`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/upkeep_provider_test.go: `.BlockNumber(1)`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/upkeep_provider_test.go: `.UpkeepIDFromInt("2")`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/upkeep_provider_test.go: `.NewTrigger(ocr2keepers.BlockNumber(1), [32]byte{})`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/upkeep_provider_test.go: `.BlockNumber(1)`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/upkeep_provider_test.go: `.NewInt(1)`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/upkeep_provider_test.go: `.NewInt(2)`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/upkeep_provider_test.go: `.Run(tc.name, func(t *testing.T) {
bs := &BlockSubscriber{
latestBlock: atomic.Pointer[ocr2keepers.BlockKey]{},
}
bs.latestBlock.Store(tc.latestBlock)
p := NewUpkeepProvider(tc.active, bs, lp)
got, err := p.GetActiveUpkeeps(ctx)
if tc.wantErr {
require.Error(t, err)
return
}
require.NoError(t, err)
require.Len(t, got, len(tc.want))
require.Equal(t, tc.want, got)
})`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/upkeep_provider_test.go: `.latestBlock.Store(tc.latestBlock)`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/upkeep_provider_test.go: `.GetActiveUpkeeps(ctx)`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/upkeepstate/orm_test.go: `err = orm.DeleteExpired(ctx, time.Now())`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/upkeepstate/orm_test.go: `states, err = orm.SelectStatesByWorkIDs(ctx, []string{"0x1"})`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/upkeepstate/orm_test.go: `.Context(t)`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/upkeepstate/orm_test.go: `.NewSqlxDB(t)`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/upkeepstate/orm_test.go: `.New(big.NewInt(2))`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/upkeepstate/orm_test.go: `.NewInt(2)`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/upkeepstate/orm_test.go: `.Now()`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/upkeepstate/orm_test.go: `.BatchInsertRecords(ctx, inserted)`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/upkeepstate/orm_test.go: `.SelectStatesByWorkIDs(ctx, []string{"0x1"})`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/upkeepstate/orm_test.go: `.DeleteExpired(ctx, time.Now())`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/upkeepstate/orm_test.go: `.Now()`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/upkeepstate/orm_test.go: `.SelectStatesByWorkIDs(ctx, []string{"0x1"})`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/upkeepstate/scanner_test.go: `t.Run(tc.name, func(t *testing.T) {
mp := new(mocks.LogPoller)
mp.On("RegisterFilter", mock.Anything, mock.Anything).Return(nil)
mp.On("UnregisterFilter", mock.Anything, mock.Anything).Return(nil)
scanner := NewPerformedEventsScanner(lggr, mp, registryAddr, 100)
go func() {
_ = scanner.Start(ctx)
}()
defer func() {
_ = scanner.Close()
}()
mp.On("IndexedLogs", mock.Anything, mock.Anything, mock.Anything, mock.Anything, mock.Anything, mock.Anything).Return(tc.pollerResults, tc.pollerErr)
results, err := scanner.ScanWorkIDs(ctx, tc.workIDs...)
if tc.errored {
require.Error(t, err)
return
}
require.NoError(t, err)
require.Equal(t, len(tc.scannerResults), len(results))
for _, result := range results {
require.Contains(t, tc.scannerResults, result)
}
})`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/upkeepstate/scanner_test.go: `mp.On("RegisterFilter", mock.Anything, mock.Anything).Return(nil)`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/upkeepstate/scanner_test.go: `mp.On("UnregisterFilter", mock.Anything, mock.Anything).Return(nil)`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/upkeepstate/scanner_test.go: `_ = scanner.Start(ctx)`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/upkeepstate/scanner_test.go: `_ = scanner.Close()`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/upkeepstate/scanner_test.go: `mp.On("IndexedLogs", mock.Anything, mock.Anything, mock.Anything, mock.Anything, mock.Anything, mock.Anything).Return(tc.pollerResults, tc.pollerErr)`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/upkeepstate/scanner_test.go: `lp.On("IndexedLogs", mock.Anything, mock.Anything, mock.Anything, mock.Anything, mock.Anything, mock.Anything).Return([]logpoller.Log{
{
BlockNumber: 1,
Address: registryAddr,
Topics: convertTopics([]common.Hash{
ac.IAutomationV21PlusCommonDedupKeyAdded{}.Topic(),
common.HexToHash("0x290decd9548b62a8d60345a988386fc84ba6bc95484008f6362f93160ef3e563"),
}),
},
}, nil).Times(1)`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/upkeepstate/scanner_test.go: `lp.On("IndexedLogs", mock.Anything, mock.Anything, mock.Anything, mock.Anything, mock.Anything, mock.Anything).Return([]logpoller.Log{
{
BlockNumber: 3,
Address: registryAddr,
Topics: convertTopics([]common.Hash{
ac.IAutomationV21PlusCommonDedupKeyAdded{}.Topic(),
common.HexToHash("0x331decd9548b62a8d603457658386fc84ba6bc95888008f6362f93160ef3b663"),
}),
},
}, nil).Times(1)`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/upkeepstate/scanner_test.go: `workIDsBatchSize = 8`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/upkeepstate/scanner_test.go: `workIDsBatchSize = origWorkIDsBatchSize`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/upkeepstate/scanner_test.go: `sort.Slice(ids, func(i, j int) bool {
return ids[i] < ids[j]
})`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/upkeepstate/scanner_test.go: `.Context(t)`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/upkeepstate/scanner_test.go: `.HexToAddress("0x12345")`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/upkeepstate/scanner_test.go: `.TestLogger(t)`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/upkeepstate/scanner_test.go: `.Topic()`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/upkeepstate/scanner_test.go: `.HexToHash("0x290decd9548b62a8d60345a988386fc84ba6bc95484008f6362f93160ef3e563")`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/upkeepstate/scanner_test.go: `.Topic()`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/upkeepstate/scanner_test.go: `.Run(tc.name, func(t *testing.T) {
mp := new(mocks.LogPoller)
mp.On("RegisterFilter", mock.Anything, mock.Anything).Return(nil)
mp.On("UnregisterFilter", mock.Anything, mock.Anything).Return(nil)
scanner := NewPerformedEventsScanner(lggr, mp, registryAddr, 100)
go func() {
_ = scanner.Start(ctx)
}()
defer func() {
_ = scanner.Close()
}()
mp.On("IndexedLogs", mock.Anything, mock.Anything, mock.Anything, mock.Anything, mock.Anything, mock.Anything).Return(tc.pollerResults, tc.pollerErr)
results, err := scanner.ScanWorkIDs(ctx, tc.workIDs...)
if tc.errored {
require.Error(t, err)
return
}
require.NoError(t, err)
require.Equal(t, len(tc.scannerResults), len(results))
for _, result := range results {
require.Contains(t, tc.scannerResults, result)
}
})`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/upkeepstate/scanner_test.go: `.On("RegisterFilter", mock.Anything, mock.Anything)`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/upkeepstate/scanner_test.go: `.Return(nil)`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/upkeepstate/scanner_test.go: `.On("UnregisterFilter", mock.Anything, mock.Anything)`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/upkeepstate/scanner_test.go: `.Return(nil)`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/upkeepstate/scanner_test.go: `.Start(ctx)`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/upkeepstate/scanner_test.go: `.On("IndexedLogs", mock.Anything, mock.Anything, mock.Anything, mock.Anything, mock.Anything, mock.Anything)`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/upkeepstate/scanner_test.go: `.Return(tc.pollerResults, tc.pollerErr)`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/upkeepstate/scanner_test.go: `.ScanWorkIDs(ctx, tc.workIDs...)`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/upkeepstate/scanner_test.go: `.Context(t)`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/upkeepstate/scanner_test.go: `.HexToAddress("0x12345")`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/upkeepstate/scanner_test.go: `.TestLogger(t)`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/upkeepstate/scanner_test.go: `.On("IndexedLogs", mock.Anything, mock.Anything, mock.Anything, mock.Anything, mock.Anything, mock.Anything)`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/upkeepstate/scanner_test.go: `.Return([]logpoller.Log{
{
BlockNumber: 1,
Address: registryAddr,
Topics: convertTopics([]common.Hash{
ac.IAutomationV21PlusCommonDedupKeyAdded{}.Topic(),
common.HexToHash("0x290decd9548b62a8d60345a988386fc84ba6bc95484008f6362f93160ef3e563"),
}),
},
}, nil)`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/upkeepstate/scanner_test.go: `.Topic()`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/upkeepstate/scanner_test.go: `.HexToHash("0x290decd9548b62a8d60345a988386fc84ba6bc95484008f6362f93160ef3e563")`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/upkeepstate/scanner_test.go: `.Times(1)`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/upkeepstate/scanner_test.go: `.On("IndexedLogs", mock.Anything, mock.Anything, mock.Anything, mock.Anything, mock.Anything, mock.Anything)`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/upkeepstate/scanner_test.go: `.Return([]logpoller.Log{
{
BlockNumber: 3,
Address: registryAddr,
Topics: convertTopics([]common.Hash{
ac.IAutomationV21PlusCommonDedupKeyAdded{}.Topic(),
common.HexToHash("0x331decd9548b62a8d603457658386fc84ba6bc95888008f6362f93160ef3b663"),
}),
},
}, nil)`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/upkeepstate/scanner_test.go: `.Topic()`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/upkeepstate/scanner_test.go: `.HexToHash("0x331decd9548b62a8d603457658386fc84ba6bc95888008f6362f93160ef3b663")`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/upkeepstate/scanner_test.go: `.Times(1)`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/upkeepstate/scanner_test.go: `.ScanWorkIDs(ctx,
"290decd9548b62a8d60345a988386fc84ba6bc95484008f6362f93160ef3e563",
"1111", "2222", "3333", "4444", "5555", "6666", "7777", "8888", "9999",
"331decd9548b62a8d603457658386fc84ba6bc95888008f6362f93160ef3b663",
)`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/upkeepstate/scanner_test.go: `.Slice(ids, func(i, j int) bool {
return ids[i] < ids[j]
})`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/upkeepstate/store_test.go: `t.Run(tc.name, func(t *testing.T) {
ctx := testutils.Context(t)
lggr := logger.TestLogger(t)
scanner := &mockScanner{}
scanner.addWorkID(tc.workIDsFromScanner...)
scanner.setErr(tc.errScanner)
orm := &mockORM{}
orm.addRecords(tc.recordsFromDB...)
orm.setErr(tc.errDB)
store := NewUpkeepStateStore(orm, lggr, scanner)
for _, insert := range tc.inserts {
assert.NoError(t, store.SetUpkeepState(ctx, insert, ocr2keepers.Performed))
}
states, err := store.SelectByWorkIDs(ctx, tc.workIDsSelect...)
if tc.errored {
assert.Error(t, err)
return
}
assert.NoError(t, err)
assert.Equal(t, len(tc.expected), len(states))
for i, state := range states {
assert.Equal(t, tc.expected[i], state)
}
})`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/upkeepstate/store_test.go: `scanner.addWorkID(tc.workIDsFromScanner...)`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/upkeepstate/store_test.go: `scanner.setErr(tc.errScanner)`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/upkeepstate/store_test.go: `orm.addRecords(tc.recordsFromDB...)`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/upkeepstate/store_test.go: `orm.setErr(tc.errDB)`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/upkeepstate/store_test.go: `_ = uid.FromBigInt(big.NewInt(id))`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/upkeepstate/store_test.go: `t.Run(test.name, func(t *testing.T) {
ctx := testutils.Context(t)
tickerCh := make(chan time.Time)
oldNewTickerFn := newTickerFn
oldFlushSize := batchSize
newTickerFn = func(d time.Duration) *time.Ticker {
t := time.NewTicker(d)
t.C = tickerCh
return t
}
batchSize = test.flushSize
defer func() {
newTickerFn = oldNewTickerFn
batchSize = oldFlushSize
}()
lggr, observedLogs := logger.TestLoggerObserved(t, zapcore.ErrorLevel)
chainID := testutils.FixtureChainID
db := pgtest.NewSqlxDB(t)
realORM := NewORM(chainID, db)
insertFinished := make(chan struct{}, 1)
orm := &wrappedORM{
BatchInsertRecordsFn: func(ctx context.Context, records []persistedStateRecord) error {
err := realORM.BatchInsertRecords(ctx, records)
insertFinished <- struct{}{}
return err
},
SelectStatesByWorkIDsFn: realORM.SelectStatesByWorkIDs,
DeleteExpiredFn: realORM.DeleteExpired,
}
scanner := &mockScanner{}
store := NewUpkeepStateStore(orm, lggr, scanner)
servicetest.Run(t, store)
t.Cleanup(func() {
t.Log("cleaning up database")
if _, err := db.Exec(`DELETE FROM evm.upkeep_states`); err != nil {
t.Logf("error in cleanup: %s", err)
}
})
for _, insert := range test.storedValues {
require.NoError(t, store.SetUpkeepState(ctx, insert.result, insert.state), "storing states should not produce an error")
}
tickerCh <- time.Now()
// if this test inserts data, wait for the insert to complete before proceeding
for i := 0; i < test.expectedWrites; i++ {
<-insertFinished
}
// empty the cache before doing selects to force a db lookup
store.cache = make(map[string]*upkeepStateRecord)
states, err := store.SelectByWorkIDs(ctx, test.queryIDs...)
require.NoError(t, err, "no error expected from selecting states")
assert.Equal(t, test.expected, states, "upkeep state values should match expected")
observedLogs.TakeAll()
require.Equal(t, 0, observedLogs.Len())
})`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/upkeepstate/store_test.go: `t.C = tickerCh`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/upkeepstate/store_test.go: `batchSize = test.flushSize`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/upkeepstate/store_test.go: `newTickerFn = oldNewTickerFn`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/upkeepstate/store_test.go: `batchSize = oldFlushSize`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/upkeepstate/store_test.go: `insertFinished <- struct{}{}`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/upkeepstate/store_test.go: `servicetest.Run(t, store)`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/upkeepstate/store_test.go: `t.Cleanup(func() {
t.Log("cleaning up database")
if _, err := db.Exec(`DELETE FROM evm.upkeep_states`); err != nil {
t.Logf("error in cleanup: %s", err)
}
})`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/upkeepstate/store_test.go: `tickerCh <- time.Now()`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/upkeepstate/store_test.go: `<-insertFinished`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/upkeepstate/store_test.go: `store.cache = make(map[string]*upkeepStateRecord)`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/upkeepstate/store_test.go: `observedLogs.TakeAll()`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/upkeepstate/store_test.go: `insertFinished <- struct{}{}`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/upkeepstate/store_test.go: `observedLogs.TakeAll()`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/upkeepstate/store_test.go: `<-time.After(10 * time.Millisecond)`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/upkeepstate/store_test.go: `res.Trigger.BlockNumber = ocr2keepers.BlockNumber(2)`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/upkeepstate/store_test.go: `store.mu.Lock()`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/upkeepstate/store_test.go: `store.mu.Unlock()`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/upkeepstate/store_test.go: `store.retention = 500 * time.Millisecond`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/upkeepstate/store_test.go: `store.cleanCadence = 100 * time.Millisecond`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/upkeepstate/store_test.go: `servicetest.Run(t, store)`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/upkeepstate/store_test.go: `time.Sleep(110 * time.Millisecond)`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/upkeepstate/store_test.go: `time.Sleep(700 * time.Millisecond)`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/upkeepstate/store_test.go: `values, err = store.SelectByWorkIDs(ctx, "0x2")`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/upkeepstate/store_test.go: `.BlockNumber(1)`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/upkeepstate/store_test.go: `.BlockNumber(2)`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/upkeepstate/store_test.go: `.BlockNumber(1)`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/upkeepstate/store_test.go: `.BlockNumber(1)`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/upkeepstate/store_test.go: `.Now()`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/upkeepstate/store_test.go: `.BlockNumber(1)`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/upkeepstate/store_test.go: `.BlockNumber(1)`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/upkeepstate/store_test.go: `.BlockNumber(1)`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/upkeepstate/store_test.go: `.Run(tc.name, func(t *testing.T) {
ctx := testutils.Context(t)
lggr := logger.TestLogger(t)
scanner := &mockScanner{}
scanner.addWorkID(tc.workIDsFromScanner...)
scanner.setErr(tc.errScanner)
orm := &mockORM{}
orm.addRecords(tc.recordsFromDB...)
orm.setErr(tc.errDB)
store := NewUpkeepStateStore(orm, lggr, scanner)
for _, insert := range tc.inserts {
assert.NoError(t, store.SetUpkeepState(ctx, insert, ocr2keepers.Performed))
}
states, err := store.SelectByWorkIDs(ctx, tc.workIDsSelect...)
if tc.errored {
assert.Error(t, err)
return
}
assert.NoError(t, err)
assert.Equal(t, len(tc.expected), len(states))
for i, state := range states {
assert.Equal(t, tc.expected[i], state)
}
})`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/upkeepstate/store_test.go: `.Context(t)`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/upkeepstate/store_test.go: `.TestLogger(t)`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/upkeepstate/store_test.go: `.addWorkID(tc.workIDsFromScanner...)`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/upkeepstate/store_test.go: `.setErr(tc.errScanner)`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/upkeepstate/store_test.go: `.addRecords(tc.recordsFromDB...)`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/upkeepstate/store_test.go: `.setErr(tc.errDB)`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/upkeepstate/store_test.go: `.SelectByWorkIDs(ctx, tc.workIDsSelect...)`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/upkeepstate/store_test.go: `.Short()`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/upkeepstate/store_test.go: `.FromBigInt(big.NewInt(id))`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/upkeepstate/store_test.go: `.NewInt(id)`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/upkeepstate/store_test.go: `.BlockNumber(block)`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/upkeepstate/store_test.go: `.Run(test.name, func(t *testing.T) {
ctx := testutils.Context(t)
tickerCh := make(chan time.Time)
oldNewTickerFn := newTickerFn
oldFlushSize := batchSize
newTickerFn = func(d time.Duration) *time.Ticker {
t := time.NewTicker(d)
t.C = tickerCh
return t
}
batchSize = test.flushSize
defer func() {
newTickerFn = oldNewTickerFn
batchSize = oldFlushSize
}()
lggr, observedLogs := logger.TestLoggerObserved(t, zapcore.ErrorLevel)
chainID := testutils.FixtureChainID
db := pgtest.NewSqlxDB(t)
realORM := NewORM(chainID, db)
insertFinished := make(chan struct{}, 1)
orm := &wrappedORM{
BatchInsertRecordsFn: func(ctx context.Context, records []persistedStateRecord) error {
err := realORM.BatchInsertRecords(ctx, records)
insertFinished <- struct{}{}
return err
},
SelectStatesByWorkIDsFn: realORM.SelectStatesByWorkIDs,
DeleteExpiredFn: realORM.DeleteExpired,
}
scanner := &mockScanner{}
store := NewUpkeepStateStore(orm, lggr, scanner)
servicetest.Run(t, store)
t.Cleanup(func() {
t.Log("cleaning up database")
if _, err := db.Exec(`DELETE FROM evm.upkeep_states`); err != nil {
t.Logf("error in cleanup: %s", err)
}
})
for _, insert := range test.storedValues {
require.NoError(t, store.SetUpkeepState(ctx, insert.result, insert.state), "storing states should not produce an error")
}
tickerCh <- time.Now()
// if this test inserts data, wait for the insert to complete before proceeding
for i := 0; i < test.expectedWrites; i++ {
<-insertFinished
}
// empty the cache before doing selects to force a db lookup
store.cache = make(map[string]*upkeepStateRecord)
states, err := store.SelectByWorkIDs(ctx, test.queryIDs...)
require.NoError(t, err, "no error expected from selecting states")
assert.Equal(t, test.expected, states, "upkeep state values should match expected")
observedLogs.TakeAll()
require.Equal(t, 0, observedLogs.Len())
})`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/upkeepstate/store_test.go: `.Context(t)`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/upkeepstate/store_test.go: `.NewTicker(d)`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/upkeepstate/store_test.go: `.TestLoggerObserved(t, zapcore.ErrorLevel)`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/upkeepstate/store_test.go: `.NewSqlxDB(t)`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/upkeepstate/store_test.go: `.BatchInsertRecords(ctx, records)`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/upkeepstate/store_test.go: `.Run(t, store)`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/upkeepstate/store_test.go: `.Cleanup(func() {
t.Log("cleaning up database")
if _, err := db.Exec(`DELETE FROM evm.upkeep_states`); err != nil {
t.Logf("error in cleanup: %s", err)
}
})`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/upkeepstate/store_test.go: `.Exec(`DELETE FROM evm.upkeep_states`)`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/upkeepstate/store_test.go: `.Now()`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/upkeepstate/store_test.go: `.SelectByWorkIDs(ctx, test.queryIDs...)`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/upkeepstate/store_test.go: `.TakeAll()`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/upkeepstate/store_test.go: `.TestLoggerObserved(t, zapcore.ErrorLevel)`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/upkeepstate/store_test.go: `.NewSqlxDB(t)`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/upkeepstate/store_test.go: `.BatchInsertRecords(ctx, records)`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/upkeepstate/store_test.go: `.SelectByWorkIDs(testutils.Context(t), []string{"0x1", "0x2", "0x3", "0x4"}...)`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/upkeepstate/store_test.go: `.Context(t)`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/upkeepstate/store_test.go: `.TakeAll()`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/upkeepstate/store_test.go: `.NewSqlxDB(t)`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/upkeepstate/store_test.go: `.Context(t)`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/upkeepstate/store_test.go: `.TestLogger(t)`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/upkeepstate/store_test.go: `.BlockNumber(1)`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/upkeepstate/store_test.go: `.After(10 * time.Millisecond)`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/upkeepstate/store_test.go: `.BlockNumber(2)`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/upkeepstate/store_test.go: `.Now()`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/upkeepstate/store_test.go: `.mu.Lock()`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/upkeepstate/store_test.go: `.mu.Unlock()`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/upkeepstate/store_test.go: `.After(addedAt)`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/upkeepstate/store_test.go: `.Context(t)`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/upkeepstate/store_test.go: `.TestLogger(t)`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/upkeepstate/store_test.go: `.Run(t, store)`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/upkeepstate/store_test.go: `.Sleep(110 * time.Millisecond)`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/upkeepstate/store_test.go: `.SelectByWorkIDs(ctx, "0x2")`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/upkeepstate/store_test.go: `.Sleep(700 * time.Millisecond)`
$DIR/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/upkeepstate/store_test.go: `.SelectByWorkIDs(ctx, "0x2")`
$DIR/core/services/ocr2/plugins/ocr2keeper/integration_21_test.go: `spec = &job.OCR2OracleSpec{
PluginType: types.OCR2Keeper,
ContractID: "0x5431", // invalid contract addr
}`
$DIR/core/services/ocr2/plugins/ocr2keeper/integration_21_test.go: `_, err = ocr2keeper.FilterNamesFromSpec21(spec)`
$DIR/core/services/ocr2/plugins/ocr2keeper/integration_21_test.go: `nodeKeys[i] = cltest.MustGenerateRandomKey(t)`
$DIR/core/services/ocr2/plugins/ocr2keeper/integration_21_test.go: `genesisData[nodeKeys[i].Address] = core.GenesisAccount{Balance: assets.Ether(1000).ToInt()}`
$DIR/core/services/ocr2/plugins/ocr2keeper/integration_21_test.go: `setupNodes(t, nodeKeys, registry, backend, steve, false)`
$DIR/core/services/ocr2/plugins/ocr2keeper/integration_21_test.go: `<-time.After(time.Second * 5)`
$DIR/core/services/ocr2/plugins/ocr2keeper/integration_21_test.go: `_, err = linkToken.Transfer(sergey, carrol.From, big.NewInt(0).Mul(oneHunEth, big.NewInt(int64(upkeeps+1))))`
$DIR/core/services/ocr2/plugins/ocr2keeper/integration_21_test.go: `backend.Commit()`
$DIR/core/services/ocr2/plugins/ocr2keeper/integration_21_test.go: `_, err = linkToken.Transfer(sergey, carrol.From, oneHunEth)`
$DIR/core/services/ocr2/plugins/ocr2keeper/integration_21_test.go: `_, err = linkToken.Approve(carrol, registry.Address(), oneHunEth)`
$DIR/core/services/ocr2/plugins/ocr2keeper/integration_21_test.go: `_, err = registry.AddFunds(carrol, upkeepID, oneHunEth)`
$DIR/core/services/ocr2/plugins/ocr2keeper/integration_21_test.go: `backend.Commit()`
$DIR/core/services/ocr2/plugins/ocr2keeper/integration_21_test.go: `_, err = upkeepContract.SetBytesToSend(carrol, payload1)`
$DIR/core/services/ocr2/plugins/ocr2keeper/integration_21_test.go: `_, err = upkeepContract.SetShouldPerformUpkeep(carrol, true)`
$DIR/core/services/ocr2/plugins/ocr2keeper/integration_21_test.go: `backend.Commit()`
$DIR/core/services/ocr2/plugins/ocr2keeper/integration_21_test.go: `lggr.Infow("Upkeep registered and funded", "upkeepID", upkeepID.String())`
$DIR/core/services/ocr2/plugins/ocr2keeper/integration_21_test.go: `g.Eventually(receivedBytes, testutils.WaitTimeout(t), cltest.DBPollingInterval).Should(gomega.Equal(payload1))`
$DIR/core/services/ocr2/plugins/ocr2keeper/integration_21_test.go: `_, err = upkeepContract.SetBytesToSend(carrol, payload2)`
$DIR/core/services/ocr2/plugins/ocr2keeper/integration_21_test.go: `_, err = upkeepContract.SetShouldPerformUpkeep(carrol, true)`
$DIR/core/services/ocr2/plugins/ocr2keeper/integration_21_test.go: `t.Run(tc.name, func(t *testing.T) {
g := gomega.NewWithT(t)
// setup blockchain
sergey := testutils.MustNewSimTransactor(t) // owns all the link
steve := testutils.MustNewSimTransactor(t) // registry owner
carrol := testutils.MustNewSimTransactor(t) // upkeep owner
genesisData := core.GenesisAlloc{
sergey.From: {Balance: assets.Ether(10000).ToInt()},
steve.From: {Balance: assets.Ether(10000).ToInt()},
carrol.From: {Balance: assets.Ether(10000).ToInt()},
}
// Generate 5 keys for nodes (1 bootstrap + 4 ocr nodes) and fund them with ether
var nodeKeys [5]ethkey.KeyV2
for i := int64(0); i < 5; i++ {
nodeKeys[i] = cltest.MustGenerateRandomKey(t)
genesisData[nodeKeys[i].Address] = core.GenesisAccount{Balance: assets.Ether(1000).ToInt()}
}
backend := cltest.NewSimulatedBackend(t, genesisData, uint32(ethconfig.Defaults.Miner.GasCeil))
stopMining := cltest.Mine(backend, 3*time.Second) // Should be greater than deltaRound since we cannot access old blocks on simulated blockchain
defer stopMining()
// Deploy registry
linkAddr, _, linkToken, err := link_token_interface.DeployLinkToken(sergey, backend)
require.NoError(t, err)
gasFeedAddr, _, _, err := mock_v3_aggregator_contract.DeployMockV3AggregatorContract(steve, backend, 18, big.NewInt(60000000000))
require.NoError(t, err)
linkFeedAddr, _, _, err := mock_v3_aggregator_contract.DeployMockV3AggregatorContract(steve, backend, 18, big.NewInt(2000000000000000000))
require.NoError(t, err)
registry := deployKeeper21Registry(t, steve, backend, linkAddr, linkFeedAddr, gasFeedAddr)
setupNodes(t, nodeKeys, registry, backend, steve, tc.logBufferVersion == logprovider.BufferVersionV1)
upkeeps := 1
_, err = linkToken.Transfer(sergey, carrol.From, big.NewInt(0).Mul(oneHunEth, big.NewInt(int64(upkeeps+1))))
require.NoError(t, err)
backend.Commit()
ids, addrs, contracts := deployUpkeeps(t, backend, carrol, steve, linkToken, registry, upkeeps)
require.Equal(t, upkeeps, len(ids))
require.Equal(t, len(ids), len(contracts))
require.Equal(t, len(ids), len(addrs))
backend.Commit()
emits := 1
go emitEvents(testutils.Context(t), t, emits, contracts, carrol, func() {
backend.Commit()
})
listener, done := listenPerformed(t, backend, registry, ids, int64(1))
g.Eventually(listener, testutils.WaitTimeout(t), cltest.DBPollingInterval).Should(gomega.BeTrue())
done()
t.Run("recover logs", func(t *testing.T) {
addr, contract := addrs[0], contracts[0]
upkeepID := registerUpkeep(t, registry, addr, carrol, steve, backend)
backend.Commit()
t.Logf("Registered new upkeep %s for address %s", upkeepID.String(), addr.String())
// Emit 100 logs in a burst
recoverEmits := 100
i := 0
emitEvents(testutils.Context(t), t, 100, []*log_upkeep_counter_wrapper.LogUpkeepCounter{contract}, carrol, func() {
i++
if i%(recoverEmits/4) == 0 {
backend.Commit()
time.Sleep(time.Millisecond * 250) // otherwise we get "invalid transaction nonce" errors
}
})
beforeDummyBlocks := backend.Blockchain().CurrentBlock().Number.Uint64()
// Mine enough blocks to ensure these logs don't fall into log provider range
dummyBlocks := 500
for i := 0; i < dummyBlocks; i++ {
backend.Commit()
time.Sleep(time.Millisecond * 10)
}
t.Logf("Mined %d blocks, waiting for logs to be recovered", dummyBlocks)
listener, done := listenPerformedN(t, backend, registry, ids, int64(beforeDummyBlocks), recoverEmits)
defer done()
g.Eventually(listener, testutils.WaitTimeout(t), cltest.DBPollingInterval).Should(gomega.BeTrue())
})
})`
$DIR/core/services/ocr2/plugins/ocr2keeper/integration_21_test.go: `nodeKeys[i] = cltest.MustGenerateRandomKey(t)`
$DIR/core/services/ocr2/plugins/ocr2keeper/integration_21_test.go: `genesisData[nodeKeys[i].Address] = core.GenesisAccount{Balance: assets.Ether(1000).ToInt()}`
$DIR/core/services/ocr2/plugins/ocr2keeper/integration_21_test.go: `setupNodes(t, nodeKeys, registry, backend, steve, tc.logBufferVersion == logprovider.BufferVersionV1)`
$DIR/core/services/ocr2/plugins/ocr2keeper/integration_21_test.go: `_, err = linkToken.Transfer(sergey, carrol.From, big.NewInt(0).Mul(oneHunEth, big.NewInt(int64(upkeeps+1))))`
$DIR/core/services/ocr2/plugins/ocr2keeper/integration_21_test.go: `backend.Commit()`
$DIR/core/services/ocr2/plugins/ocr2keeper/integration_21_test.go: `backend.Commit()`
$DIR/core/services/ocr2/plugins/ocr2keeper/integration_21_test.go: `backend.Commit()`
$DIR/core/services/ocr2/plugins/ocr2keeper/integration_21_test.go: `g.Eventually(listener, testutils.WaitTimeout(t), cltest.DBPollingInterval).Should(gomega.BeTrue())`
$DIR/core/services/ocr2/plugins/ocr2keeper/integration_21_test.go: `done()`
$DIR/core/services/ocr2/plugins/ocr2keeper/integration_21_test.go: `t.Run("recover logs", func(t *testing.T) {
addr, contract := addrs[0], contracts[0]
upkeepID := registerUpkeep(t, registry, addr, carrol, steve, backend)
backend.Commit()
t.Logf("Registered new upkeep %s for address %s", upkeepID.String(), addr.String())
// Emit 100 logs in a burst
recoverEmits := 100
i := 0
emitEvents(testutils.Context(t), t, 100, []*log_upkeep_counter_wrapper.LogUpkeepCounter{contract}, carrol, func() {
i++
if i%(recoverEmits/4) == 0 {
backend.Commit()
time.Sleep(time.Millisecond * 250) // otherwise we get "invalid transaction nonce" errors
}
})
beforeDummyBlocks := backend.Blockchain().CurrentBlock().Number.Uint64()
// Mine enough blocks to ensure these logs don't fall into log provider range
dummyBlocks := 500
for i := 0; i < dummyBlocks; i++ {
backend.Commit()
time.Sleep(time.Millisecond * 10)
}
t.Logf("Mined %d blocks, waiting for logs to be recovered", dummyBlocks)
listener, done := listenPerformedN(t, backend, registry, ids, int64(beforeDummyBlocks), recoverEmits)
defer done()
g.Eventually(listener, testutils.WaitTimeout(t), cltest.DBPollingInterval).Should(gomega.BeTrue())
})`
$DIR/core/services/ocr2/plugins/ocr2keeper/integration_21_test.go: `backend.Commit()`
$DIR/core/services/ocr2/plugins/ocr2keeper/integration_21_test.go: `emitEvents(testutils.Context(t), t, 100, []*log_upkeep_counter_wrapper.LogUpkeepCounter{contract}, carrol, func() {
i++
if i%(recoverEmits/4) == 0 {
backend.Commit()
time.Sleep(time.Millisecond * 250) // otherwise we get "invalid transaction nonce" errors
}
})`
$DIR/core/services/ocr2/plugins/ocr2keeper/integration_21_test.go: `i++`
$DIR/core/services/ocr2/plugins/ocr2keeper/integration_21_test.go: `backend.Commit()`
$DIR/core/services/ocr2/plugins/ocr2keeper/integration_21_test.go: `time.Sleep(time.Millisecond * 250)`
$DIR/core/services/ocr2/plugins/ocr2keeper/integration_21_test.go: `backend.Commit()`
$DIR/core/services/ocr2/plugins/ocr2keeper/integration_21_test.go: `time.Sleep(time.Millisecond * 10)`
$DIR/core/services/ocr2/plugins/ocr2keeper/integration_21_test.go: `g.Eventually(listener, testutils.WaitTimeout(t), cltest.DBPollingInterval).Should(gomega.BeTrue())`
$DIR/core/services/ocr2/plugins/ocr2keeper/integration_21_test.go: `t.Run(tc.name, func(t *testing.T) {
g := gomega.NewWithT(t)
// setup blockchain
linkOwner := testutils.MustNewSimTransactor(t) // owns all the link
registryOwner := testutils.MustNewSimTransactor(t) // registry owner
upkeepOwner := testutils.MustNewSimTransactor(t) // upkeep owner
genesisData := core.GenesisAlloc{
linkOwner.From: {Balance: assets.Ether(10000).ToInt()},
registryOwner.From: {Balance: assets.Ether(10000).ToInt()},
upkeepOwner.From: {Balance: assets.Ether(10000).ToInt()},
}
// Generate 5 keys for nodes (1 bootstrap + 4 ocr nodes) and fund them with ether
var nodeKeys [5]ethkey.KeyV2
for i := int64(0); i < 5; i++ {
nodeKeys[i] = cltest.MustGenerateRandomKey(t)
genesisData[nodeKeys[i].Address] = core.GenesisAccount{Balance: assets.Ether(1000).ToInt()}
}
backend := cltest.NewSimulatedBackend(t, genesisData, uint32(ethconfig.Defaults.Miner.GasCeil))
stopMining := cltest.Mine(backend, 3*time.Second) // Should be greater than deltaRound since we cannot access old blocks on simulated blockchain
defer stopMining()
// Deploy registry
linkAddr, _, linkToken, err := link_token_interface.DeployLinkToken(linkOwner, backend)
require.NoError(t, err)
gasFeedAddr, _, _, err := mock_v3_aggregator_contract.DeployMockV3AggregatorContract(registryOwner, backend, 18, big.NewInt(60000000000))
require.NoError(t, err)
linkFeedAddr, _, _, err := mock_v3_aggregator_contract.DeployMockV3AggregatorContract(registryOwner, backend, 18, big.NewInt(2000000000000000000))
require.NoError(t, err)
registry := deployKeeper21Registry(t, registryOwner, backend, linkAddr, linkFeedAddr, gasFeedAddr)
_, mercuryServer := setupNodes(t, nodeKeys, registry, backend, registryOwner, tc.logBufferVersion == logprovider.BufferVersionV1)
const upkeepCount = 10
const mercuryFailCount = upkeepCount * 3 * 2
// testing with the mercury server involves mocking responses. currently,
// there is not a way to connect a mercury call to an upkeep id (though we
// could add custom headers) so the test must be fairly basic and just
// count calls before switching to successes
var (
mu sync.Mutex
count int
)
mercuryServer.RegisterHandler(func(w http.ResponseWriter, r *http.Request) {
mu.Lock()
defer mu.Unlock()
count++
_ = r.ParseForm()
t.Logf("MercuryHTTPServe:RequestURI: %s", r.RequestURI)
for key, value := range r.Form {
t.Logf("MercuryHTTPServe:FormValue: key: %s; value: %s;", key, value)
}
// the streams lookup retries against the remote server 3 times before
// returning a result as retryable.
// the simulation here should force the streams lookup process to return
// retryable 2 times.
// the total count of failures should be (upkeepCount * 3 * tryCount)
if count <= mercuryFailCount {
w.WriteHeader(http.StatusNotFound)
return
}
// start sending success messages
output := `{"chainlinkBlob":"0x0001c38d71fed6c320b90e84b6f559459814d068e2a1700adc931ca9717d4fe70000000000000000000000000000000000000000000000000000000001a80b52b4bf1233f9cb71144a253a1791b202113c4ab4a92fa1b176d684b4959666ff8200000000000000000000000000000000000000000000000000000000000000e000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000260000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001004254432d5553442d415242495452554d2d544553544e4554000000000000000000000000000000000000000000000000000000000000000000000000645570be000000000000000000000000000000000000000000000000000002af2b818dc5000000000000000000000000000000000000000000000000000002af2426faf3000000000000000000000000000000000000000000000000000002af32dc209700000000000000000000000000000000000000000000000000000000012130f8df0a9745bb6ad5e2df605e158ba8ad8a33ef8a0acf9851f0f01668a3a3f2b68600000000000000000000000000000000000000000000000000000000012130f60000000000000000000000000000000000000000000000000000000000000002c4a7958dce105089cf5edb68dad7dcfe8618d7784eb397f97d5a5fade78c11a58275aebda478968e545f7e3657aba9dcbe8d44605e4c6fde3e24edd5e22c94270000000000000000000000000000000000000000000000000000000000000002459c12d33986018a8959566d145225f0c4a4e61a9a3f50361ccff397899314f0018162cf10cd89897635a0bb62a822355bd199d09f4abe76e4d05261bb44733d"}`
w.WriteHeader(http.StatusOK)
_, _ = w.Write([]byte(output))
})
defer mercuryServer.Stop()
_, err = linkToken.Transfer(linkOwner, upkeepOwner.From, big.NewInt(0).Mul(oneHunEth, big.NewInt(int64(upkeepCount+1))))
require.NoError(t, err)
backend.Commit()
feeds, err := newFeedLookupUpkeepController(backend, registryOwner)
require.NoError(t, err, "no error expected from creating a feed lookup controller")
// deploy multiple upkeeps that listen to a log emitter and need to be
// performed for each log event
_ = feeds.DeployUpkeeps(t, backend, upkeepOwner, upkeepCount, func(int) bool {
return false
})
_ = feeds.RegisterAndFund(t, registry, registryOwner, backend, linkToken)
_ = feeds.EnableMercury(t, backend, registry, registryOwner)
_ = feeds.VerifyEnv(t, backend, registry, registryOwner)
// start emitting events in a separate go-routine
// feed lookup relies on a single contract event log to perform multiple
// listener contracts
go func() {
// only 1 event is necessary to make all 10 upkeeps eligible
_ = feeds.EmitEvents(t, backend, 1, func() {
// pause per emit for expected block production time
time.Sleep(3 * time.Second)
})
}()
listener, done := listenPerformed(t, backend, registry, feeds.UpkeepsIds(), int64(1))
defer done()
g.Eventually(listener, testutils.WaitTimeout(t)-(5*time.Second), cltest.DBPollingInterval).Should(gomega.BeTrue())
})`
$DIR/core/services/ocr2/plugins/ocr2keeper/integration_21_test.go: `nodeKeys[i] = cltest.MustGenerateRandomKey(t)`
$DIR/core/services/ocr2/plugins/ocr2keeper/integration_21_test.go: `genesisData[nodeKeys[i].Address] = core.GenesisAccount{Balance: assets.Ether(1000).ToInt()}`
$DIR/core/services/ocr2/plugins/ocr2keeper/integration_21_test.go: `mercuryServer.RegisterHandler(func(w http.ResponseWriter, r *http.Request) {
mu.Lock()
defer mu.Unlock()
count++
_ = r.ParseForm()
t.Logf("MercuryHTTPServe:RequestURI: %s", r.RequestURI)
for key, value := range r.Form {
t.Logf("MercuryHTTPServe:FormValue: key: %s; value: %s;", key, value)
}
// the streams lookup retries against the remote server 3 times before
// returning a result as retryable.
// the simulation here should force the streams lookup process to return
// retryable 2 times.
// the total count of failures should be (upkeepCount * 3 * tryCount)
if count <= mercuryFailCount {
w.WriteHeader(http.StatusNotFound)
return
}
// start sending success messages
output := `{"chainlinkBlob":"0x0001c38d71fed6c320b90e84b6f559459814d068e2a1700adc931ca9717d4fe70000000000000000000000000000000000000000000000000000000001a80b52b4bf1233f9cb71144a253a1791b202113c4ab4a92fa1b176d684b4959666ff8200000000000000000000000000000000000000000000000000000000000000e000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000260000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001004254432d5553442d415242495452554d2d544553544e4554000000000000000000000000000000000000000000000000000000000000000000000000645570be000000000000000000000000000000000000000000000000000002af2b818dc5000000000000000000000000000000000000000000000000000002af2426faf3000000000000000000000000000000000000000000000000000002af32dc209700000000000000000000000000000000000000000000000000000000012130f8df0a9745bb6ad5e2df605e158ba8ad8a33ef8a0acf9851f0f01668a3a3f2b68600000000000000000000000000000000000000000000000000000000012130f60000000000000000000000000000000000000000000000000000000000000002c4a7958dce105089cf5edb68dad7dcfe8618d7784eb397f97d5a5fade78c11a58275aebda478968e545f7e3657aba9dcbe8d44605e4c6fde3e24edd5e22c94270000000000000000000000000000000000000000000000000000000000000002459c12d33986018a8959566d145225f0c4a4e61a9a3f50361ccff397899314f0018162cf10cd89897635a0bb62a822355bd199d09f4abe76e4d05261bb44733d"}`
w.WriteHeader(http.StatusOK)
_, _ = w.Write([]byte(output))
})`
$DIR/core/services/ocr2/plugins/ocr2keeper/integration_21_test.go: `mu.Lock()`
$DIR/core/services/ocr2/plugins/ocr2keeper/integration_21_test.go: `count++`
$DIR/core/services/ocr2/plugins/ocr2keeper/integration_21_test.go: `_ = r.ParseForm()`
$DIR/core/services/ocr2/plugins/ocr2keeper/integration_21_test.go: `w.WriteHeader(http.StatusNotFound)`
$DIR/core/services/ocr2/plugins/ocr2keeper/integration_21_test.go: `w.WriteHeader(http.StatusOK)`
$DIR/core/services/ocr2/plugins/ocr2keeper/integration_21_test.go: `_, _ = w.Write([]byte(output))`
$DIR/core/services/ocr2/plugins/ocr2keeper/integration_21_test.go: `_, err = linkToken.Transfer(linkOwner, upkeepOwner.From, big.NewInt(0).Mul(oneHunEth, big.NewInt(int64(upkeepCount+1))))`
$DIR/core/services/ocr2/plugins/ocr2keeper/integration_21_test.go: `backend.Commit()`
$DIR/core/services/ocr2/plugins/ocr2keeper/integration_21_test.go: `_ = feeds.RegisterAndFund(t, registry, registryOwner, backend, linkToken)`
$DIR/core/services/ocr2/plugins/ocr2keeper/integration_21_test.go: `_ = feeds.EnableMercury(t, backend, registry, registryOwner)`
$DIR/core/services/ocr2/plugins/ocr2keeper/integration_21_test.go: `_ = feeds.VerifyEnv(t, backend, registry, registryOwner)`
$DIR/core/services/ocr2/plugins/ocr2keeper/integration_21_test.go: `time.Sleep(3 * time.Second)`
$DIR/core/services/ocr2/plugins/ocr2keeper/integration_21_test.go: `g.Eventually(listener, testutils.WaitTimeout(t)-(5*time.Second), cltest.DBPollingInterval).Should(gomega.BeTrue())`
$DIR/core/services/ocr2/plugins/ocr2keeper/integration_21_test.go: `t.Run(tc.name, func(t *testing.T) {
g := gomega.NewWithT(t)
// setup blockchain
linkOwner := testutils.MustNewSimTransactor(t) // owns all the link
registryOwner := testutils.MustNewSimTransactor(t) // registry owner
upkeepOwner := testutils.MustNewSimTransactor(t) // upkeep owner
genesisData := core.GenesisAlloc{
linkOwner.From: {Balance: assets.Ether(10000).ToInt()},
registryOwner.From: {Balance: assets.Ether(10000).ToInt()},
upkeepOwner.From: {Balance: assets.Ether(10000).ToInt()},
}
// Generate 5 keys for nodes (1 bootstrap + 4 ocr nodes) and fund them with ether
var nodeKeys [5]ethkey.KeyV2
for i := int64(0); i < 5; i++ {
nodeKeys[i] = cltest.MustGenerateRandomKey(t)
genesisData[nodeKeys[i].Address] = core.GenesisAccount{Balance: assets.Ether(1000).ToInt()}
}
backend := cltest.NewSimulatedBackend(t, genesisData, uint32(ethconfig.Defaults.Miner.GasCeil))
stopMining := cltest.Mine(backend, 3*time.Second) // Should be greater than deltaRound since we cannot access old blocks on simulated blockchain
defer stopMining()
// Deploy registry
linkAddr, _, linkToken, err := link_token_interface.DeployLinkToken(linkOwner, backend)
require.NoError(t, err)
gasFeedAddr, _, _, err := mock_v3_aggregator_contract.DeployMockV3AggregatorContract(registryOwner, backend, 18, big.NewInt(60000000000))
require.NoError(t, err)
linkFeedAddr, _, _, err := mock_v3_aggregator_contract.DeployMockV3AggregatorContract(registryOwner, backend, 18, big.NewInt(2000000000000000000))
require.NoError(t, err)
registry := deployKeeper21Registry(t, registryOwner, backend, linkAddr, linkFeedAddr, gasFeedAddr)
_, mercuryServer := setupNodes(t, nodeKeys, registry, backend, registryOwner, tc.logBufferVersion == logprovider.BufferVersionV1)
upkeepCount := 10
errResponses := []int{
http.StatusUnauthorized,
http.StatusBadRequest,
http.StatusInternalServerError,
http.StatusNotFound,
http.StatusNotFound,
http.StatusNotFound,
http.StatusUnauthorized,
}
startMercuryServer(t, mercuryServer, func(i int) (int, []byte) {
var resp int
if i < len(errResponses) {
resp = errResponses[i]
}
if resp == 0 {
resp = http.StatusNotFound
}
return resp, nil
})
defer mercuryServer.Stop()
_, err = linkToken.Transfer(linkOwner, upkeepOwner.From, big.NewInt(0).Mul(oneHunEth, big.NewInt(int64(upkeepCount+1))))
require.NoError(t, err)
backend.Commit()
feeds, err := newFeedLookupUpkeepController(backend, registryOwner)
require.NoError(t, err, "no error expected from creating a feed lookup controller")
// deploy multiple upkeeps that listen to a log emitter and need to be
// performed for each log event
checkResultsProvider := func(i int) bool {
return i%2 == 1
}
require.NoError(t, feeds.DeployUpkeeps(t, backend, upkeepOwner, upkeepCount, checkResultsProvider))
require.NoError(t, feeds.RegisterAndFund(t, registry, registryOwner, backend, linkToken))
require.NoError(t, feeds.EnableMercury(t, backend, registry, registryOwner))
require.NoError(t, feeds.VerifyEnv(t, backend, registry, registryOwner))
startBlock := backend.Blockchain().CurrentBlock().Number.Int64()
// start emitting events in a separate go-routine
// feed lookup relies on a single contract event log to perform multiple
// listener contracts
go func() {
// only 1 event is necessary to make all 10 upkeeps eligible
_ = feeds.EmitEvents(t, backend, 1, func() {
// pause per emit for expected block production time
time.Sleep(3 * time.Second)
})
}()
go makeDummyBlocks(t, backend, 3*time.Second, 1000)
idsToCheck := make([]*big.Int, 0)
for i, uid := range feeds.UpkeepsIds() {
if checkResultsProvider(i) {
idsToCheck = append(idsToCheck, uid)
}
}
listener, done := listenPerformed(t, backend, registry, idsToCheck, startBlock)
defer done()
g.Eventually(listener, testutils.WaitTimeout(t)-(5*time.Second), cltest.DBPollingInterval).Should(gomega.BeTrue())
})`
$DIR/core/services/ocr2/plugins/ocr2keeper/integration_21_test.go: `nodeKeys[i] = cltest.MustGenerateRandomKey(t)`
$DIR/core/services/ocr2/plugins/ocr2keeper/integration_21_test.go: `genesisData[nodeKeys[i].Address] = core.GenesisAccount{Balance: assets.Ether(1000).ToInt()}`
$DIR/core/services/ocr2/plugins/ocr2keeper/integration_21_test.go: `startMercuryServer(t, mercuryServer, func(i int) (int, []byte) {
var resp int
if i < len(errResponses) {
resp = errResponses[i]
}
if resp == 0 {
resp = http.StatusNotFound
}
return resp, nil
})`
$DIR/core/services/ocr2/plugins/ocr2keeper/integration_21_test.go: `resp = errResponses[i]`
$DIR/core/services/ocr2/plugins/ocr2keeper/integration_21_test.go: `resp = http.StatusNotFound`
$DIR/core/services/ocr2/plugins/ocr2keeper/integration_21_test.go: `_, err = linkToken.Transfer(linkOwner, upkeepOwner.From, big.NewInt(0).Mul(oneHunEth, big.NewInt(int64(upkeepCount+1))))`
$DIR/core/services/ocr2/plugins/ocr2keeper/integration_21_test.go: `backend.Commit()`
$DIR/core/services/ocr2/plugins/ocr2keeper/integration_21_test.go: `time.Sleep(3 * time.Second)`
$DIR/core/services/ocr2/plugins/ocr2keeper/integration_21_test.go: `go makeDummyBlocks(t, backend, 3*time.Second, 1000)`
$DIR/core/services/ocr2/plugins/ocr2keeper/integration_21_test.go: `idsToCheck = append(idsToCheck, uid)`
$DIR/core/services/ocr2/plugins/ocr2keeper/integration_21_test.go: `g.Eventually(listener, testutils.WaitTimeout(t)-(5*time.Second), cltest.DBPollingInterval).Should(gomega.BeTrue())`
$DIR/core/services/ocr2/plugins/ocr2keeper/integration_21_test.go: `.Read(b)`
$DIR/core/services/ocr2/plugins/ocr2keeper/integration_21_test.go: `.HexToAddress(hexutil.Encode(b))`
$DIR/core/services/ocr2/plugins/ocr2keeper/integration_21_test.go: `.Encode(b)`
$DIR/core/services/ocr2/plugins/ocr2keeper/integration_21_test.go: `.String()`
$DIR/core/services/ocr2/plugins/ocr2keeper/integration_21_test.go: `.FilterNamesFromSpec21(spec)`
$DIR/core/services/ocr2/plugins/ocr2keeper/integration_21_test.go: `.FilterNamesFromSpec21(spec)`
$DIR/core/services/ocr2/plugins/ocr2keeper/integration_21_test.go: `.NewWithT(t)`
$DIR/core/services/ocr2/plugins/ocr2keeper/integration_21_test.go: `.TestLogger(t)`
$DIR/core/services/ocr2/plugins/ocr2keeper/integration_21_test.go: `.MustNewSimTransactor(t)`
$DIR/core/services/ocr2/plugins/ocr2keeper/integration_21_test.go: `.MustNewSimTransactor(t)`
$DIR/core/services/ocr2/plugins/ocr2keeper/integration_21_test.go: `.MustNewSimTransactor(t)`
$DIR/core/services/ocr2/plugins/ocr2keeper/integration_21_test.go: `.Ether(10000)`
$DIR/core/services/ocr2/plugins/ocr2keeper/integration_21_test.go: `.ToInt()`
$DIR/core/services/ocr2/plugins/ocr2keeper/integration_21_test.go: `.Ether(10000)`
$DIR/core/services/ocr2/plugins/ocr2keeper/integration_21_test.go: `.ToInt()`
$DIR/core/services/ocr2/plugins/ocr2keeper/integration_21_test.go: `.Ether(10000)`
$DIR/core/services/ocr2/plugins/ocr2keeper/integration_21_test.go: `.ToInt()`
$DIR/core/services/ocr2/plugins/ocr2keeper/integration_21_test.go: `.MustGenerateRandomKey(t)`
$DIR/core/services/ocr2/plugins/ocr2keeper/integration_21_test.go: `.Ether(1000)`
$DIR/core/services/ocr2/plugins/ocr2keeper/integration_21_test.go: `.ToInt()`
$DIR/core/services/ocr2/plugins/ocr2keeper/integration_21_test.go: `.NewSimulatedBackend(t, genesisData, uint32(ethconfig.Defaults.Miner.GasCeil))`
$DIR/core/services/ocr2/plugins/ocr2keeper/integration_21_test.go: `.Mine(backend, 3*time.Second)`
$DIR/core/services/ocr2/plugins/ocr2keeper/integration_21_test.go: `.DeployLinkToken(sergey, backend)`
$DIR/core/services/ocr2/plugins/ocr2keeper/integration_21_test.go: `.DeployMockV3AggregatorContract(steve, backend, 18, big.NewInt(60000000000))`
$DIR/core/services/ocr2/plugins/ocr2keeper/integration_21_test.go: `.NewInt(60000000000)`
$DIR/core/services/ocr2/plugins/ocr2keeper/integration_21_test.go: `.DeployMockV3AggregatorContract(steve, backend, 18, big.NewInt(2000000000000000000))`
$DIR/core/services/ocr2/plugins/ocr2keeper/integration_21_test.go: `.NewInt(2000000000000000000)`
$DIR/core/services/ocr2/plugins/ocr2keeper/integration_21_test.go: `.After(time.Second * 5)`
$DIR/core/services/ocr2/plugins/ocr2keeper/integration_21_test.go: `.Transfer(sergey, carrol.From, big.NewInt(0).Mul(oneHunEth, big.NewInt(int64(upkeeps+1))))`
$DIR/core/services/ocr2/plugins/ocr2keeper/integration_21_test.go: `.NewInt(0)`
$DIR/core/services/ocr2/plugins/ocr2keeper/integration_21_test.go: `.Mul(oneHunEth, big.NewInt(int64(upkeeps+1)))`
$DIR/core/services/ocr2/plugins/ocr2keeper/integration_21_test.go: `.NewInt(int64(upkeeps+1))`
$DIR/core/services/ocr2/plugins/ocr2keeper/integration_21_test.go: `.DeployBasicUpkeepContract(carrol, backend)`
$DIR/core/services/ocr2/plugins/ocr2keeper/integration_21_test.go: `.RegisterUpkeep(steve, upkeepAddr, 2_500_000, carrol.From, 0, []byte{}, []byte{}, []byte{})`
$DIR/core/services/ocr2/plugins/ocr2keeper/integration_21_test.go: `.Commit()`
$DIR/core/services/ocr2/plugins/ocr2keeper/integration_21_test.go: `.Transfer(sergey, carrol.From, oneHunEth)`
$DIR/core/services/ocr2/plugins/ocr2keeper/integration_21_test.go: `.Approve(carrol, registry.Address(), oneHunEth)`
$DIR/core/services/ocr2/plugins/ocr2keeper/integration_21_test.go: `.Address()`
$DIR/core/services/ocr2/plugins/ocr2keeper/integration_21_test.go: `.AddFunds(carrol, upkeepID, oneHunEth)`
$DIR/core/services/ocr2/plugins/ocr2keeper/integration_21_test.go: `.Commit()`
$DIR/core/services/ocr2/plugins/ocr2keeper/integration_21_test.go: `.SetBytesToSend(carrol, payload1)`
$DIR/core/services/ocr2/plugins/ocr2keeper/integration_21_test.go: `.SetShouldPerformUpkeep(carrol, true)`
$DIR/core/services/ocr2/plugins/ocr2keeper/integration_21_test.go: `.Commit()`
$DIR/core/services/ocr2/plugins/ocr2keeper/integration_21_test.go: `.Infow("Upkeep registered and funded", "upkeepID", upkeepID.String())`
$DIR/core/services/ocr2/plugins/ocr2keeper/integration_21_test.go: `.String()`
$DIR/core/services/ocr2/plugins/ocr2keeper/integration_21_test.go: `.ReceivedBytes(nil)`
$DIR/core/services/ocr2/plugins/ocr2keeper/integration_21_test.go: `.Eventually(receivedBytes, testutils.WaitTimeout(t), cltest.DBPollingInterval)`
$DIR/core/services/ocr2/plugins/ocr2keeper/integration_21_test.go: `.WaitTimeout(t)`
$DIR/core/services/ocr2/plugins/ocr2keeper/integration_21_test.go: `.Should(gomega.Equal(payload1))`
$DIR/core/services/ocr2/plugins/ocr2keeper/integration_21_test.go: `.Equal(payload1)`
$DIR/core/services/ocr2/plugins/ocr2keeper/integration_21_test.go: `.SetBytesToSend(carrol, payload2)`
$DIR/core/services/ocr2/plugins/ocr2keeper/integration_21_test.go: `.SetShouldPerformUpkeep(carrol, true)`
$DIR/core/services/ocr2/plugins/ocr2keeper/integration_21_test.go: `.Eventually(receivedBytes, testutils.WaitTimeout(t), cltest.DBPollingInterval)`
$DIR/core/services/ocr2/plugins/ocr2keeper/integration_21_test.go: `.WaitTimeout(t)`
$DIR/core/services/ocr2/plugins/ocr2keeper/integration_21_test.go: `.Equal(payload2)`
$DIR/core/services/ocr2/plugins/ocr2keeper/integration_21_test.go: `.Run(tc.name, func(t *testing.T) {
g := gomega.NewWithT(t)
// setup blockchain
sergey := testutils.MustNewSimTransactor(t) // owns all the link
steve := testutils.MustNewSimTransactor(t) // registry owner
carrol := testutils.MustNewSimTransactor(t) // upkeep owner
genesisData := core.GenesisAlloc{
sergey.From: {Balance: assets.Ether(10000).ToInt()},
steve.From: {Balance: assets.Ether(10000).ToInt()},
carrol.From: {Balance: assets.Ether(10000).ToInt()},
}
// Generate 5 keys for nodes (1 bootstrap + 4 ocr nodes) and fund them with ether
var nodeKeys [5]ethkey.KeyV2
for i := int64(0); i < 5; i++ {
nodeKeys[i] = cltest.MustGenerateRandomKey(t)
genesisData[nodeKeys[i].Address] = core.GenesisAccount{Balance: assets.Ether(1000).ToInt()}
}
backend := cltest.NewSimulatedBackend(t, genesisData, uint32(ethconfig.Defaults.Miner.GasCeil))
stopMining := cltest.Mine(backend, 3*time.Second) // Should be greater than deltaRound since we cannot access old blocks on simulated blockchain
defer stopMining()
// Deploy registry
linkAddr, _, linkToken, err := link_token_interface.DeployLinkToken(sergey, backend)
require.NoError(t, err)
gasFeedAddr, _, _, err := mock_v3_aggregator_contract.DeployMockV3AggregatorContract(steve, backend, 18, big.NewInt(60000000000))
require.NoError(t, err)
linkFeedAddr, _, _, err := mock_v3_aggregator_contract.DeployMockV3AggregatorContract(steve, backend, 18, big.NewInt(2000000000000000000))
require.NoError(t, err)
registry := deployKeeper21Registry(t, steve, backend, linkAddr, linkFeedAddr, gasFeedAddr)
setupNodes(t, nodeKeys, registry, backend, steve, tc.logBufferVersion == logprovider.BufferVersionV1)
upkeeps := 1
_, err = linkToken.Transfer(sergey, carrol.From, big.NewInt(0).Mul(oneHunEth, big.NewInt(int64(upkeeps+1))))
require.NoError(t, err)
backend.Commit()
ids, addrs, contracts := deployUpkeeps(t, backend, carrol, steve, linkToken, registry, upkeeps)
require.Equal(t, upkeeps, len(ids))
require.Equal(t, len(ids), len(contracts))
require.Equal(t, len(ids), len(addrs))
backend.Commit()
emits := 1
go emitEvents(testutils.Context(t), t, emits, contracts, carrol, func() {
backend.Commit()
})
listener, done := listenPerformed(t, backend, registry, ids, int64(1))
g.Eventually(listener, testutils.WaitTimeout(t), cltest.DBPollingInterval).Should(gomega.BeTrue())
done()
t.Run("recover logs", func(t *testing.T) {
addr, contract := addrs[0], contracts[0]
upkeepID := registerUpkeep(t, registry, addr, carrol, steve, backend)
backend.Commit()
t.Logf("Registered new upkeep %s for address %s", upkeepID.String(), addr.String())
// Emit 100 logs in a burst
recoverEmits := 100
i := 0
emitEvents(testutils.Context(t), t, 100, []*log_upkeep_counter_wrapper.LogUpkeepCounter{contract}, carrol, func() {
i++
if i%(recoverEmits/4) == 0 {
backend.Commit()
time.Sleep(time.Millisecond * 250) // otherwise we get "invalid transaction nonce" errors
}
})
beforeDummyBlocks := backend.Blockchain().CurrentBlock().Number.Uint64()
// Mine enough blocks to ensure these logs don't fall into log provider range
dummyBlocks := 500
for i := 0; i < dummyBlocks; i++ {
backend.Commit()
time.Sleep(time.Millisecond * 10)
}
t.Logf("Mined %d blocks, waiting for logs to be recovered", dummyBlocks)
listener, done := listenPerformedN(t, backend, registry, ids, int64(beforeDummyBlocks), recoverEmits)
defer done()
g.Eventually(listener, testutils.WaitTimeout(t), cltest.DBPollingInterval).Should(gomega.BeTrue())
})
})`
$DIR/core/services/ocr2/plugins/ocr2keeper/integration_21_test.go: `.NewWithT(t)`
$DIR/core/services/ocr2/plugins/ocr2keeper/integration_21_test.go: `.MustNewSimTransactor(t)`
$DIR/core/services/ocr2/plugins/ocr2keeper/integration_21_test.go: `.MustNewSimTransactor(t)`
$DIR/core/services/ocr2/plugins/ocr2keeper/integration_21_test.go: `.MustNewSimTransactor(t)`
$DIR/core/services/ocr2/plugins/ocr2keeper/integration_21_test.go: `.Ether(10000)`
$DIR/core/services/ocr2/plugins/ocr2keeper/integration_21_test.go: `.ToInt()`
$DIR/core/services/ocr2/plugins/ocr2keeper/integration_21_test.go: `.Ether(10000)`
$DIR/core/services/ocr2/plugins/ocr2keeper/integration_21_test.go: `.ToInt()`
$DIR/core/services/ocr2/plugins/ocr2keeper/integration_21_test.go: `.Ether(10000)`
$DIR/core/services/ocr2/plugins/ocr2keeper/integration_21_test.go: `.ToInt()`
$DIR/core/services/ocr2/plugins/ocr2keeper/integration_21_test.go: `.MustGenerateRandomKey(t)`
$DIR/core/services/ocr2/plugins/ocr2keeper/integration_21_test.go: `.Ether(1000)`
$DIR/core/services/ocr2/plugins/ocr2keeper/integration_21_test.go: `.ToInt()`
$DIR/core/services/ocr2/plugins/ocr2keeper/integration_21_test.go: `.NewSimulatedBackend(t, genesisData, uint32(ethconfig.Defaults.Miner.GasCeil))`
$DIR/core/services/ocr2/plugins/ocr2keeper/integration_21_test.go: `.Mine(backend, 3*time.Second)`
$DIR/core/services/ocr2/plugins/ocr2keeper/integration_21_test.go: `.DeployLinkToken(sergey, backend)`
$DIR/core/services/ocr2/plugins/ocr2keeper/integration_21_test.go: `.DeployMockV3AggregatorContract(steve, backend, 18, big.NewInt(60000000000))`
$DIR/core/services/ocr2/plugins/ocr2keeper/integration_21_test.go: `.NewInt(60000000000)`
$DIR/core/services/ocr2/plugins/ocr2keeper/integration_21_test.go: `.DeployMockV3AggregatorContract(steve, backend, 18, big.NewInt(2000000000000000000))`
$DIR/core/services/ocr2/plugins/ocr2keeper/integration_21_test.go: `.NewInt(2000000000000000000)`
$DIR/core/services/ocr2/plugins/ocr2keeper/integration_21_test.go: `.Transfer(sergey, carrol.From, big.NewInt(0).Mul(oneHunEth, big.NewInt(int64(upkeeps+1))))`
$DIR/core/services/ocr2/plugins/ocr2keeper/integration_21_test.go: `.NewInt(0)`
$DIR/core/services/ocr2/plugins/ocr2keeper/integration_21_test.go: `.Mul(oneHunEth, big.NewInt(int64(upkeeps+1)))`
$DIR/core/services/ocr2/plugins/ocr2keeper/integration_21_test.go: `.NewInt(int64(upkeeps+1))`
$DIR/core/services/ocr2/plugins/ocr2keeper/integration_21_test.go: `.Commit()`
$DIR/core/services/ocr2/plugins/ocr2keeper/integration_21_test.go: `.Commit()`
$DIR/core/services/ocr2/plugins/ocr2keeper/integration_21_test.go: `.Context(t)`
$DIR/core/services/ocr2/plugins/ocr2keeper/integration_21_test.go: `.Commit()`
$DIR/core/services/ocr2/plugins/ocr2keeper/integration_21_test.go: `.Eventually(listener, testutils.WaitTimeout(t), cltest.DBPollingInterval)`
$DIR/core/services/ocr2/plugins/ocr2keeper/integration_21_test.go: `.WaitTimeout(t)`
$DIR/core/services/ocr2/plugins/ocr2keeper/integration_21_test.go: `.Should(gomega.BeTrue())`
$DIR/core/services/ocr2/plugins/ocr2keeper/integration_21_test.go: `.BeTrue()`
$DIR/core/services/ocr2/plugins/ocr2keeper/integration_21_test.go: `.Run("recover logs", func(t *testing.T) {
addr, contract := addrs[0], contracts[0]
upkeepID := registerUpkeep(t, registry, addr, carrol, steve, backend)
backend.Commit()
t.Logf("Registered new upkeep %s for address %s", upkeepID.String(), addr.String())
// Emit 100 logs in a burst
recoverEmits := 100
i := 0
emitEvents(testutils.Context(t), t, 100, []*log_upkeep_counter_wrapper.LogUpkeepCounter{contract}, carrol, func() {
i++
if i%(recoverEmits/4) == 0 {
backend.Commit()
time.Sleep(time.Millisecond * 250) // otherwise we get "invalid transaction nonce" errors
}
})
beforeDummyBlocks := backend.Blockchain().CurrentBlock().Number.Uint64()
// Mine enough blocks to ensure these logs don't fall into log provider range
dummyBlocks := 500
for i := 0; i < dummyBlocks; i++ {
backend.Commit()
time.Sleep(time.Millisecond * 10)
}
t.Logf("Mined %d blocks, waiting for logs to be recovered", dummyBlocks)
listener, done := listenPerformedN(t, backend, registry, ids, int64(beforeDummyBlocks), recoverEmits)
defer done()
g.Eventually(listener, testutils.WaitTimeout(t), cltest.DBPollingInterval).Should(gomega.BeTrue())
})`
$DIR/core/services/ocr2/plugins/ocr2keeper/integration_21_test.go: `.Commit()`
$DIR/core/services/ocr2/plugins/ocr2keeper/integration_21_test.go: `.Context(t)`
$DIR/core/services/ocr2/plugins/ocr2keeper/integration_21_test.go: `.Commit()`
$DIR/core/services/ocr2/plugins/ocr2keeper/integration_21_test.go: `.Sleep(time.Millisecond * 250)`
$DIR/core/services/ocr2/plugins/ocr2keeper/integration_21_test.go: `.Blockchain()`
$DIR/core/services/ocr2/plugins/ocr2keeper/integration_21_test.go: `.CurrentBlock()`
$DIR/core/services/ocr2/plugins/ocr2keeper/integration_21_test.go: `.Number.Uint64()`
$DIR/core/services/ocr2/plugins/ocr2keeper/integration_21_test.go: `.Commit()`
$DIR/core/services/ocr2/plugins/ocr2keeper/integration_21_test.go: `.Sleep(time.Millisecond * 10)`
$DIR/core/services/ocr2/plugins/ocr2keeper/integration_21_test.go: `.Eventually(listener, testutils.WaitTimeout(t), cltest.DBPollingInterval)`
$DIR/core/services/ocr2/plugins/ocr2keeper/integration_21_test.go: `.WaitTimeout(t)`
$DIR/core/services/ocr2/plugins/ocr2keeper/integration_21_test.go: `.Should(gomega.BeTrue())`
$DIR/core/services/ocr2/plugins/ocr2keeper/integration_21_test.go: `.BeTrue()`
$DIR/core/services/ocr2/plugins/ocr2keeper/integration_21_test.go: `.Run(tc.name, func(t *testing.T) {
g := gomega.NewWithT(t)
// setup blockchain
linkOwner := testutils.MustNewSimTransactor(t) // owns all the link
registryOwner := testutils.MustNewSimTransactor(t) // registry owner
upkeepOwner := testutils.MustNewSimTransactor(t) // upkeep owner
genesisData := core.GenesisAlloc{
linkOwner.From: {Balance: assets.Ether(10000).ToInt()},
registryOwner.From: {Balance: assets.Ether(10000).ToInt()},
upkeepOwner.From: {Balance: assets.Ether(10000).ToInt()},
}
// Generate 5 keys for nodes (1 bootstrap + 4 ocr nodes) and fund them with ether
var nodeKeys [5]ethkey.KeyV2
for i := int64(0); i < 5; i++ {
nodeKeys[i] = cltest.MustGenerateRandomKey(t)
genesisData[nodeKeys[i].Address] = core.GenesisAccount{Balance: assets.Ether(1000).ToInt()}
}
backend := cltest.NewSimulatedBackend(t, genesisData, uint32(ethconfig.Defaults.Miner.GasCeil))
stopMining := cltest.Mine(backend, 3*time.Second) // Should be greater than deltaRound since we cannot access old blocks on simulated blockchain
defer stopMining()
// Deploy registry
linkAddr, _, linkToken, err := link_token_interface.DeployLinkToken(linkOwner, backend)
require.NoError(t, err)
gasFeedAddr, _, _, err := mock_v3_aggregator_contract.DeployMockV3AggregatorContract(registryOwner, backend, 18, big.NewInt(60000000000))
require.NoError(t, err)
linkFeedAddr, _, _, err := mock_v3_aggregator_contract.DeployMockV3AggregatorContract(registryOwner, backend, 18, big.NewInt(2000000000000000000))
require.NoError(t, err)
registry := deployKeeper21Registry(t, registryOwner, backend, linkAddr, linkFeedAddr, gasFeedAddr)
_, mercuryServer := setupNodes(t, nodeKeys, registry, backend, registryOwner, tc.logBufferVersion == logprovider.BufferVersionV1)
const upkeepCount = 10
const mercuryFailCount = upkeepCount * 3 * 2
// testing with the mercury server involves mocking responses. currently,
// there is not a way to connect a mercury call to an upkeep id (though we
// could add custom headers) so the test must be fairly basic and just
// count calls before switching to successes
var (
mu sync.Mutex
count int
)
mercuryServer.RegisterHandler(func(w http.ResponseWriter, r *http.Request) {
mu.Lock()
defer mu.Unlock()
count++
_ = r.ParseForm()
t.Logf("MercuryHTTPServe:RequestURI: %s", r.RequestURI)
for key, value := range r.Form {
t.Logf("MercuryHTTPServe:FormValue: key: %s; value: %s;", key, value)
}
// the streams lookup retries against the remote server 3 times before
// returning a result as retryable.
// the simulation here should force the streams lookup process to return
// retryable 2 times.
// the total count of failures should be (upkeepCount * 3 * tryCount)
if count <= mercuryFailCount {
w.WriteHeader(http.StatusNotFound)
return
}
// start sending success messages
output := `{"chainlinkBlob":"0x0001c38d71fed6c320b90e84b6f559459814d068e2a1700adc931ca9717d4fe70000000000000000000000000000000000000000000000000000000001a80b52b4bf1233f9cb71144a253a1791b202113c4ab4a92fa1b176d684b4959666ff8200000000000000000000000000000000000000000000000000000000000000e000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000260000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001004254432d5553442d415242495452554d2d544553544e4554000000000000000000000000000000000000000000000000000000000000000000000000645570be000000000000000000000000000000000000000000000000000002af2b818dc5000000000000000000000000000000000000000000000000000002af2426faf3000000000000000000000000000000000000000000000000000002af32dc209700000000000000000000000000000000000000000000000000000000012130f8df0a9745bb6ad5e2df605e158ba8ad8a33ef8a0acf9851f0f01668a3a3f2b68600000000000000000000000000000000000000000000000000000000012130f60000000000000000000000000000000000000000000000000000000000000002c4a7958dce105089cf5edb68dad7dcfe8618d7784eb397f97d5a5fade78c11a58275aebda478968e545f7e3657aba9dcbe8d44605e4c6fde3e24edd5e22c94270000000000000000000000000000000000000000000000000000000000000002459c12d33986018a8959566d145225f0c4a4e61a9a3f50361ccff397899314f0018162cf10cd89897635a0bb62a822355bd199d09f4abe76e4d05261bb44733d"}`
w.WriteHeader(http.StatusOK)
_, _ = w.Write([]byte(output))
})
defer mercuryServer.Stop()
_, err = linkToken.Transfer(linkOwner, upkeepOwner.From, big.NewInt(0).Mul(oneHunEth, big.NewInt(int64(upkeepCount+1))))
require.NoError(t, err)
backend.Commit()
feeds, err := newFeedLookupUpkeepController(backend, registryOwner)
require.NoError(t, err, "no error expected from creating a feed lookup controller")
// deploy multiple upkeeps that listen to a log emitter and need to be
// performed for each log event
_ = feeds.DeployUpkeeps(t, backend, upkeepOwner, upkeepCount, func(int) bool {
return false
})
_ = feeds.RegisterAndFund(t, registry, registryOwner, backend, linkToken)
_ = feeds.EnableMercury(t, backend, registry, registryOwner)
_ = feeds.VerifyEnv(t, backend, registry, registryOwner)
// start emitting events in a separate go-routine
// feed lookup relies on a single contract event log to perform multiple
// listener contracts
go func() {
// only 1 event is necessary to make all 10 upkeeps eligible
_ = feeds.EmitEvents(t, backend, 1, func() {
// pause per emit for expected block production time
time.Sleep(3 * time.Second)
})
}()
listener, done := listenPerformed(t, backend, registry, feeds.UpkeepsIds(), int64(1))
defer done()
g.Eventually(listener, testutils.WaitTimeout(t)-(5*time.Second), cltest.DBPollingInterval).Should(gomega.BeTrue())
})`
$DIR/core/services/ocr2/plugins/ocr2keeper/integration_21_test.go: `.NewWithT(t)`
$DIR/core/services/ocr2/plugins/ocr2keeper/integration_21_test.go: `.MustNewSimTransactor(t)`
$DIR/core/services/ocr2/plugins/ocr2keeper/integration_21_test.go: `.MustNewSimTransactor(t)`
$DIR/core/services/ocr2/plugins/ocr2keeper/integration_21_test.go: `.MustNewSimTransactor(t)`
$DIR/core/services/ocr2/plugins/ocr2keeper/integration_21_test.go: `.Ether(10000)`
$DIR/core/services/ocr2/plugins/ocr2keeper/integration_21_test.go: `.ToInt()`
$DIR/core/services/ocr2/plugins/ocr2keeper/integration_21_test.go: `.Ether(10000)`
$DIR/core/services/ocr2/plugins/ocr2keeper/integration_21_test.go: `.ToInt()`
$DIR/core/services/ocr2/plugins/ocr2keeper/integration_21_test.go: `.Ether(10000)`
$DIR/core/services/ocr2/plugins/ocr2keeper/integration_21_test.go: `.ToInt()`
$DIR/core/services/ocr2/plugins/ocr2keeper/integration_21_test.go: `.MustGenerateRandomKey(t)`
$DIR/core/services/ocr2/plugins/ocr2keeper/integration_21_test.go: `.Ether(1000)`
$DIR/core/services/ocr2/plugins/ocr2keeper/integration_21_test.go: `.ToInt()`
$DIR/core/services/ocr2/plugins/ocr2keeper/integration_21_test.go: `.NewSimulatedBackend(t, genesisData, uint32(ethconfig.Defaults.Miner.GasCeil))`
$DIR/core/services/ocr2/plugins/ocr2keeper/integration_21_test.go: `.Mine(backend, 3*time.Second)`
$DIR/core/services/ocr2/plugins/ocr2keeper/integration_21_test.go: `.DeployLinkToken(linkOwner, backend)`
$DIR/core/services/ocr2/plugins/ocr2keeper/integration_21_test.go: `.DeployMockV3AggregatorContract(registryOwner, backend, 18, big.NewInt(60000000000))`
$DIR/core/services/ocr2/plugins/ocr2keeper/integration_21_test.go: `.NewInt(60000000000)`
$DIR/core/services/ocr2/plugins/ocr2keeper/integration_21_test.go: `.DeployMockV3AggregatorContract(registryOwner, backend, 18, big.NewInt(2000000000000000000))`
$DIR/core/services/ocr2/plugins/ocr2keeper/integration_21_test.go: `.NewInt(2000000000000000000)`
$DIR/core/services/ocr2/plugins/ocr2keeper/integration_21_test.go: `.RegisterHandler(func(w http.ResponseWriter, r *http.Request) {
mu.Lock()
defer mu.Unlock()
count++
_ = r.ParseForm()
t.Logf("MercuryHTTPServe:RequestURI: %s", r.RequestURI)
for key, value := range r.Form {
t.Logf("MercuryHTTPServe:FormValue: key: %s; value: %s;", key, value)
}
// the streams lookup retries against the remote server 3 times before
// returning a result as retryable.
// the simulation here should force the streams lookup process to return
// retryable 2 times.
// the total count of failures should be (upkeepCount * 3 * tryCount)
if count <= mercuryFailCount {
w.WriteHeader(http.StatusNotFound)
return
}
// start sending success messages
output := `{"chainlinkBlob":"0x0001c38d71fed6c320b90e84b6f559459814d068e2a1700adc931ca9717d4fe70000000000000000000000000000000000000000000000000000000001a80b52b4bf1233f9cb71144a253a1791b202113c4ab4a92fa1b176d684b4959666ff8200000000000000000000000000000000000000000000000000000000000000e000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000260000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001004254432d5553442d415242495452554d2d544553544e4554000000000000000000000000000000000000000000000000000000000000000000000000645570be000000000000000000000000000000000000000000000000000002af2b818dc5000000000000000000000000000000000000000000000000000002af2426faf3000000000000000000000000000000000000000000000000000002af32dc209700000000000000000000000000000000000000000000000000000000012130f8df0a9745bb6ad5e2df605e158ba8ad8a33ef8a0acf9851f0f01668a3a3f2b68600000000000000000000000000000000000000000000000000000000012130f60000000000000000000000000000000000000000000000000000000000000002c4a7958dce105089cf5edb68dad7dcfe8618d7784eb397f97d5a5fade78c11a58275aebda478968e545f7e3657aba9dcbe8d44605e4c6fde3e24edd5e22c94270000000000000000000000000000000000000000000000000000000000000002459c12d33986018a8959566d145225f0c4a4e61a9a3f50361ccff397899314f0018162cf10cd89897635a0bb62a822355bd199d09f4abe76e4d05261bb44733d"}`
w.WriteHeader(http.StatusOK)
_, _ = w.Write([]byte(output))
})`
$DIR/core/services/ocr2/plugins/ocr2keeper/integration_21_test.go: `.Lock()`
$DIR/core/services/ocr2/plugins/ocr2keeper/integration_21_test.go: `.Unlock()`
$DIR/core/services/ocr2/plugins/ocr2keeper/integration_21_test.go: `.ParseForm()`
$DIR/core/services/ocr2/plugins/ocr2keeper/integration_21_test.go: `.WriteHeader(http.StatusNotFound)`
$DIR/core/services/ocr2/plugins/ocr2keeper/integration_21_test.go: `.WriteHeader(http.StatusOK)`
$DIR/core/services/ocr2/plugins/ocr2keeper/integration_21_test.go: `.Write([]byte(output))`
$DIR/core/services/ocr2/plugins/ocr2keeper/integration_21_test.go: `.Stop()`
$DIR/core/services/ocr2/plugins/ocr2keeper/integration_21_test.go: `.Transfer(linkOwner, upkeepOwner.From, big.NewInt(0).Mul(oneHunEth, big.NewInt(int64(upkeepCount+1))))`
$DIR/core/services/ocr2/plugins/ocr2keeper/integration_21_test.go: `.NewInt(0)`
$DIR/core/services/ocr2/plugins/ocr2keeper/integration_21_test.go: `.Mul(oneHunEth, big.NewInt(int64(upkeepCount+1)))`
$DIR/core/services/ocr2/plugins/ocr2keeper/integration_21_test.go: `.NewInt(int64(upkeepCount+1))`
$DIR/core/services/ocr2/plugins/ocr2keeper/integration_21_test.go: `.Commit()`
$DIR/core/services/ocr2/plugins/ocr2keeper/integration_21_test.go: `.DeployUpkeeps(t, backend, upkeepOwner, upkeepCount, func(int) bool {
return false
})`
$DIR/core/services/ocr2/plugins/ocr2keeper/integration_21_test.go: `.RegisterAndFund(t, registry, registryOwner, backend, linkToken)`
$DIR/core/services/ocr2/plugins/ocr2keeper/integration_21_test.go: `.EnableMercury(t, backend, registry, registryOwner)`
$DIR/core/services/ocr2/plugins/ocr2keeper/integration_21_test.go: `.VerifyEnv(t, backend, registry, registryOwner)`
$DIR/core/services/ocr2/plugins/ocr2keeper/integration_21_test.go: `.EmitEvents(t, backend, 1, func() {
// pause per emit for expected block production time
time.Sleep(3 * time.Second)
})`
$DIR/core/services/ocr2/plugins/ocr2keeper/integration_21_test.go: `.Sleep(3 * time.Second)`
$DIR/core/services/ocr2/plugins/ocr2keeper/integration_21_test.go: `.UpkeepsIds()`
$DIR/core/services/ocr2/plugins/ocr2keeper/integration_21_test.go: `.Eventually(listener, testutils.WaitTimeout(t)-(5*time.Second), cltest.DBPollingInterval)`
$DIR/core/services/ocr2/plugins/ocr2keeper/integration_21_test.go: `.WaitTimeout(t)`
$DIR/core/services/ocr2/plugins/ocr2keeper/integration_21_test.go: `.Should(gomega.BeTrue())`
$DIR/core/services/ocr2/plugins/ocr2keeper/integration_21_test.go: `.BeTrue()`
$DIR/core/services/ocr2/plugins/ocr2keeper/integration_21_test.go: `.Run(tc.name, func(t *testing.T) {
g := gomega.NewWithT(t)
// setup blockchain
linkOwner := testutils.MustNewSimTransactor(t) // owns all the link
registryOwner := testutils.MustNewSimTransactor(t) // registry owner
upkeepOwner := testutils.MustNewSimTransactor(t) // upkeep owner
genesisData := core.GenesisAlloc{
linkOwner.From: {Balance: assets.Ether(10000).ToInt()},
registryOwner.From: {Balance: assets.Ether(10000).ToInt()},
upkeepOwner.From: {Balance: assets.Ether(10000).ToInt()},
}
// Generate 5 keys for nodes (1 bootstrap + 4 ocr nodes) and fund them with ether
var nodeKeys [5]ethkey.KeyV2
for i := int64(0); i < 5; i++ {
nodeKeys[i] = cltest.MustGenerateRandomKey(t)
genesisData[nodeKeys[i].Address] = core.GenesisAccount{Balance: assets.Ether(1000).ToInt()}
}
backend := cltest.NewSimulatedBackend(t, genesisData, uint32(ethconfig.Defaults.Miner.GasCeil))
stopMining := cltest.Mine(backend, 3*time.Second) // Should be greater than deltaRound since we cannot access old blocks on simulated blockchain
defer stopMining()
// Deploy registry
linkAddr, _, linkToken, err := link_token_interface.DeployLinkToken(linkOwner, backend)
require.NoError(t, err)
gasFeedAddr, _, _, err := mock_v3_aggregator_contract.DeployMockV3AggregatorContract(registryOwner, backend, 18, big.NewInt(60000000000))
require.NoError(t, err)
linkFeedAddr, _, _, err := mock_v3_aggregator_contract.DeployMockV3AggregatorContract(registryOwner, backend, 18, big.NewInt(2000000000000000000))
require.NoError(t, err)
registry := deployKeeper21Registry(t, registryOwner, backend, linkAddr, linkFeedAddr, gasFeedAddr)
_, mercuryServer := setupNodes(t, nodeKeys, registry, backend, registryOwner, tc.logBufferVersion == logprovider.BufferVersionV1)
upkeepCount := 10
errResponses := []int{
http.StatusUnauthorized,
http.StatusBadRequest,
http.StatusInternalServerError,
http.StatusNotFound,
http.StatusNotFound,
http.StatusNotFound,
http.StatusUnauthorized,
}
startMercuryServer(t, mercuryServer, func(i int) (int, []byte) {
var resp int
if i < len(errResponses) {
resp = errResponses[i]
}
if resp == 0 {
resp = http.StatusNotFound
}
return resp, nil
})
defer mercuryServer.Stop()
_, err = linkToken.Transfer(linkOwner, upkeepOwner.From, big.NewInt(0).Mul(oneHunEth, big.NewInt(int64(upkeepCount+1))))
require.NoError(t, err)
backend.Commit()
feeds, err := newFeedLookupUpkeepController(backend, registryOwner)
require.NoError(t, err, "no error expected from creating a feed lookup controller")
// deploy multiple upkeeps that listen to a log emitter and need to be
// performed for each log event
checkResultsProvider := func(i int) bool {
return i%2 == 1
}
require.NoError(t, feeds.DeployUpkeeps(t, backend, upkeepOwner, upkeepCount, checkResultsProvider))
require.NoError(t, feeds.RegisterAndFund(t, registry, registryOwner, backend, linkToken))
require.NoError(t, feeds.EnableMercury(t, backend, registry, registryOwner))
require.NoError(t, feeds.VerifyEnv(t, backend, registry, registryOwner))
startBlock := backend.Blockchain().CurrentBlock().Number.Int64()
// start emitting events in a separate go-routine
// feed lookup relies on a single contract event log to perform multiple
// listener contracts
go func() {
// only 1 event is necessary to make all 10 upkeeps eligible
_ = feeds.EmitEvents(t, backend, 1, func() {
// pause per emit for expected block production time
time.Sleep(3 * time.Second)
})
}()
go makeDummyBlocks(t, backend, 3*time.Second, 1000)
idsToCheck := make([]*big.Int, 0)
for i, uid := range feeds.UpkeepsIds() {
if checkResultsProvider(i) {
idsToCheck = append(idsToCheck, uid)
}
}
listener, done := listenPerformed(t, backend, registry, idsToCheck, startBlock)
defer done()
g.Eventually(listener, testutils.WaitTimeout(t)-(5*time.Second), cltest.DBPollingInterval).Should(gomega.BeTrue())
})`
$DIR/core/services/ocr2/plugins/ocr2keeper/integration_21_test.go: `.NewWithT(t)`
$DIR/core/services/ocr2/plugins/ocr2keeper/integration_21_test.go: `.MustNewSimTransactor(t)`
$DIR/core/services/ocr2/plugins/ocr2keeper/integration_21_test.go: `.MustNewSimTransactor(t)`
$DIR/core/services/ocr2/plugins/ocr2keeper/integration_21_test.go: `.MustNewSimTransactor(t)`
$DIR/core/services/ocr2/plugins/ocr2keeper/integration_21_test.go: `.Ether(10000)`
$DIR/core/services/ocr2/plugins/ocr2keeper/integration_21_test.go: `.ToInt()`
$DIR/core/services/ocr2/plugins/ocr2keeper/integration_21_test.go: `.Ether(10000)`
$DIR/core/services/ocr2/plugins/ocr2keeper/integration_21_test.go: `.ToInt()`
$DIR/core/services/ocr2/plugins/ocr2keeper/integration_21_test.go: `.Ether(10000)`
$DIR/core/services/ocr2/plugins/ocr2keeper/integration_21_test.go: `.ToInt()`
$DIR/core/services/ocr2/plugins/ocr2keeper/integration_21_test.go: `.MustGenerateRandomKey(t)`
$DIR/core/services/ocr2/plugins/ocr2keeper/integration_21_test.go: `.Ether(1000)`
$DIR/core/services/ocr2/plugins/ocr2keeper/integration_21_test.go: `.ToInt()`
$DIR/core/services/ocr2/plugins/ocr2keeper/integration_21_test.go: `.NewSimulatedBackend(t, genesisData, uint32(ethconfig.Defaults.Miner.GasCeil))`
$DIR/core/services/ocr2/plugins/ocr2keeper/integration_21_test.go: `.Mine(backend, 3*time.Second)`
$DIR/core/services/ocr2/plugins/ocr2keeper/integration_21_test.go: `.DeployLinkToken(linkOwner, backend)`
$DIR/core/services/ocr2/plugins/ocr2keeper/integration_21_test.go: `.DeployMockV3AggregatorContract(registryOwner, backend, 18, big.NewInt(60000000000))`
$DIR/core/services/ocr2/plugins/ocr2keeper/integration_21_test.go: `.NewInt(60000000000)`
$DIR/core/services/ocr2/plugins/ocr2keeper/integration_21_test.go: `.DeployMockV3AggregatorContract(registryOwner, backend, 18, big.NewInt(2000000000000000000))`
$DIR/core/services/ocr2/plugins/ocr2keeper/integration_21_test.go: `.NewInt(2000000000000000000)`
$DIR/core/services/ocr2/plugins/ocr2keeper/integration_21_test.go: `.Stop()`
$DIR/core/services/ocr2/plugins/ocr2keeper/integration_21_test.go: `.Transfer(linkOwner, upkeepOwner.From, big.NewInt(0).Mul(oneHunEth, big.NewInt(int64(upkeepCount+1))))`
$DIR/core/services/ocr2/plugins/ocr2keeper/integration_21_test.go: `.NewInt(0)`
$DIR/core/services/ocr2/plugins/ocr2keeper/integration_21_test.go: `.Mul(oneHunEth, big.NewInt(int64(upkeepCount+1)))`
$DIR/core/services/ocr2/plugins/ocr2keeper/integration_21_test.go: `.NewInt(int64(upkeepCount+1))`
$DIR/core/services/ocr2/plugins/ocr2keeper/integration_21_test.go: `.Commit()`
$DIR/core/services/ocr2/plugins/ocr2keeper/integration_21_test.go: `.Blockchain()`
$DIR/core/services/ocr2/plugins/ocr2keeper/integration_21_test.go: `.CurrentBlock()`
$DIR/core/services/ocr2/plugins/ocr2keeper/integration_21_test.go: `.Number.Int64()`
$DIR/core/services/ocr2/plugins/ocr2keeper/integration_21_test.go: `.EmitEvents(t, backend, 1, func() {
// pause per emit for expected block production time
time.Sleep(3 * time.Second)
})`
$DIR/core/services/ocr2/plugins/ocr2keeper/integration_21_test.go: `.Sleep(3 * time.Second)`
$DIR/core/services/ocr2/plugins/ocr2keeper/integration_21_test.go: `.UpkeepsIds()`
$DIR/core/services/ocr2/plugins/ocr2keeper/integration_21_test.go: `.Eventually(listener, testutils.WaitTimeout(t)-(5*time.Second), cltest.DBPollingInterval)`
$DIR/core/services/ocr2/plugins/ocr2keeper/integration_21_test.go: `.WaitTimeout(t)`
$DIR/core/services/ocr2/plugins/ocr2keeper/integration_21_test.go: `.Should(gomega.BeTrue())`
$DIR/core/services/ocr2/plugins/ocr2keeper/integration_21_test.go: `.BeTrue()`
$DIR/core/services/ocr2/plugins/ocr2keeper/integration_test.go: `nodeKeys[i] = cltest.MustGenerateRandomKey(t)`
$DIR/core/services/ocr2/plugins/ocr2keeper/integration_test.go: `genesisData[nodeKeys[i].Address] = core.GenesisAccount{Balance: assets.Ether(1000).ToInt()}`
$DIR/core/services/ocr2/plugins/ocr2keeper/integration_test.go: `nodes = append(nodes, Node{
app, transmitter, kb,
})`
$DIR/core/services/ocr2/plugins/ocr2keeper/integration_test.go: `oracles = append(oracles, confighelper.OracleIdentityExtra{
OracleIdentity: confighelper.OracleIdentity{
OnchainPublicKey: offchainPublicKey,
TransmitAccount: ocrTypes.Account(transmitter.String()),
OffchainPublicKey: kb.OffchainPublicKey(),
PeerID: peerID,
},
ConfigEncryptionPublicKey: kb.ConfigEncryptionPublicKey(),
})`
$DIR/core/services/ocr2/plugins/ocr2keeper/integration_test.go: `bootstrapNode.AddBootstrapJob(t, fmt.Sprintf(`
type = "bootstrap"
relay = "evm"
schemaVersion = 1
name = "boot"
contractID = "%s"
contractConfigTrackerPollInterval = "15s"
[relayConfig]
chainID = 1337
`, registry.Address()))`
$DIR/core/services/ocr2/plugins/ocr2keeper/integration_test.go: `node.AddJob(t, fmt.Sprintf(`
type = "offchainreporting2"
pluginType = "ocr2automation"
relay = "evm"
name = "ocr2keepers-%d"
schemaVersion = 1
contractID = "%s"
contractConfigTrackerPollInterval = "15s"
ocrKeyBundleID = "%s"
transmitterID = "%s"
p2pv2Bootstrappers = [
"%s"
]
[relayConfig]
chainID = 1337
[pluginConfig]
maxServiceWorkers = 100
cacheEvictionInterval = "1s"
mercuryCredentialName = "%s"
`, i, registry.Address(), node.KeyBundle.ID(), node.Transmitter, fmt.Sprintf("%s@127.0.0.1:%d", bootstrapPeerID, bootstrapNodePort), MercuryCredName))`
$DIR/core/services/ocr2/plugins/ocr2keeper/integration_test.go: `lggr.Infow("Setting Config on Oracle Contract",
"signerAddresses", signerAddresses,
"transmitterAddresses", transmitterAddresses,
"threshold", threshold,
"onchainConfig", onchainConfig,
"encodedConfigVersion", offchainConfigVersion,
"offchainConfig", offchainConfig,
)`
$DIR/core/services/ocr2/plugins/ocr2keeper/integration_test.go: `_, err = registry.SetConfig(
steve,
signerAddresses,
transmitterAddresses,
threshold,
onchainConfig,
offchainConfigVersion,
offchainConfig,
)`
$DIR/core/services/ocr2/plugins/ocr2keeper/integration_test.go: `backend.Commit()`
$DIR/core/services/ocr2/plugins/ocr2keeper/integration_test.go: `backend.Commit()`
$DIR/core/services/ocr2/plugins/ocr2keeper/integration_test.go: `_, err = linkToken.Transfer(sergey, carrol.From, oneHunEth)`
$DIR/core/services/ocr2/plugins/ocr2keeper/integration_test.go: `_, err = linkToken.Approve(carrol, registry.Address(), oneHunEth)`
$DIR/core/services/ocr2/plugins/ocr2keeper/integration_test.go: `_, err = registry.AddFunds(carrol, upkeepID, oneHunEth)`
$DIR/core/services/ocr2/plugins/ocr2keeper/integration_test.go: `backend.Commit()`
$DIR/core/services/ocr2/plugins/ocr2keeper/integration_test.go: `_, err = upkeepContract.SetBytesToSend(carrol, payload1)`
$DIR/core/services/ocr2/plugins/ocr2keeper/integration_test.go: `_, err = upkeepContract.SetShouldPerformUpkeep(carrol, true)`
$DIR/core/services/ocr2/plugins/ocr2keeper/integration_test.go: `backend.Commit()`
$DIR/core/services/ocr2/plugins/ocr2keeper/integration_test.go: `lggr.Infow("Upkeep registered and funded", "upkeepID", upkeepID.String())`
$DIR/core/services/ocr2/plugins/ocr2keeper/integration_test.go: `g.Eventually(receivedBytes, testutils.WaitTimeout(t), cltest.DBPollingInterval).Should(gomega.Equal(payload1))`
$DIR/core/services/ocr2/plugins/ocr2keeper/integration_test.go: `_, err = upkeepContract.SetBytesToSend(carrol, payload2)`
$DIR/core/services/ocr2/plugins/ocr2keeper/integration_test.go: `_, err = upkeepContract.SetShouldPerformUpkeep(carrol, true)`
$DIR/core/services/ocr2/plugins/ocr2keeper/integration_test.go: `nodeKeys[i] = cltest.MustGenerateRandomKey(t)`
$DIR/core/services/ocr2/plugins/ocr2keeper/integration_test.go: `genesisData[nodeKeys[i].Address] = core.GenesisAccount{Balance: assets.Ether(1000).ToInt()}`
$DIR/core/services/ocr2/plugins/ocr2keeper/integration_test.go: `effectiveTransmitters = append(effectiveTransmitters, nodeForwarder)`
$DIR/core/services/ocr2/plugins/ocr2keeper/integration_test.go: `nodes = append(nodes, Node{
app, transmitter, kb,
})`
$DIR/core/services/ocr2/plugins/ocr2keeper/integration_test.go: `oracles = append(oracles, confighelper.OracleIdentityExtra{
OracleIdentity: confighelper.OracleIdentity{
OnchainPublicKey: offchainPublicKey,
TransmitAccount: ocrTypes.Account(nodeForwarder.String()),
OffchainPublicKey: kb.OffchainPublicKey(),
PeerID: peerID,
},
ConfigEncryptionPublicKey: kb.ConfigEncryptionPublicKey(),
})`
$DIR/core/services/ocr2/plugins/ocr2keeper/integration_test.go: `bootstrapNode.AddBootstrapJob(t, fmt.Sprintf(`
type = "bootstrap"
relay = "evm"
schemaVersion = 1
name = "boot"
contractID = "%s"
contractConfigTrackerPollInterval = "15s"
[relayConfig]
chainID = 1337
`, registry.Address()))`
$DIR/core/services/ocr2/plugins/ocr2keeper/integration_test.go: `node.AddJob(t, fmt.Sprintf(`
type = "offchainreporting2"
pluginType = "ocr2automation"
relay = "evm"
name = "ocr2keepers-%d"
schemaVersion = 1
contractID = "%s"
contractConfigTrackerPollInterval = "15s"
ocrKeyBundleID = "%s"
transmitterID = "%s"
p2pv2Bootstrappers = [
"%s"
]
forwardingAllowed = true
[relayConfig]
chainID = 1337
[pluginConfig]
cacheEvictionInterval = "1s"
maxServiceWorkers = 100
mercuryCredentialName = "%s"
`, i, registry.Address(), node.KeyBundle.ID(), node.Transmitter, fmt.Sprintf("%s@127.0.0.1:%d", bootstrapPeerID, bootstrapNodePort), MercuryCredName))`
$DIR/core/services/ocr2/plugins/ocr2keeper/integration_test.go: `eoaList = append(eoaList, n.Transmitter)`
$DIR/core/services/ocr2/plugins/ocr2keeper/integration_test.go: `lggr.Infow("Setting Config on Oracle Contract",
"signerAddresses", signerAddresses,
"transmitterAddresses", transmitterAddresses,
"threshold", threshold,
"onchainConfig", onchainConfig,
"encodedConfigVersion", offchainConfigVersion,
"offchainConfig", offchainConfig,
)`
$DIR/core/services/ocr2/plugins/ocr2keeper/integration_test.go: `_, err = registry.SetConfig(
steve,
signerAddresses,
transmitterAddresses,
threshold,
onchainConfig,
offchainConfigVersion,
offchainConfig,
)`
$DIR/core/services/ocr2/plugins/ocr2keeper/integration_test.go: `backend.Commit()`
$DIR/core/services/ocr2/plugins/ocr2keeper/integration_test.go: `backend.Commit()`
$DIR/core/services/ocr2/plugins/ocr2keeper/integration_test.go: `_, err = linkToken.Transfer(sergey, carrol.From, oneHunEth)`
$DIR/core/services/ocr2/plugins/ocr2keeper/integration_test.go: `_, err = linkToken.Approve(carrol, registry.Address(), oneHunEth)`
$DIR/core/services/ocr2/plugins/ocr2keeper/integration_test.go: `_, err = registry.AddFunds(carrol, upkeepID, oneHunEth)`
$DIR/core/services/ocr2/plugins/ocr2keeper/integration_test.go: `backend.Commit()`
$DIR/core/services/ocr2/plugins/ocr2keeper/integration_test.go: `_, err = upkeepContract.SetBytesToSend(carrol, payload1)`
$DIR/core/services/ocr2/plugins/ocr2keeper/integration_test.go: `_, err = upkeepContract.SetShouldPerformUpkeep(carrol, true)`
$DIR/core/services/ocr2/plugins/ocr2keeper/integration_test.go: `backend.Commit()`
$DIR/core/services/ocr2/plugins/ocr2keeper/integration_test.go: `lggr.Infow("Upkeep registered and funded")`
$DIR/core/services/ocr2/plugins/ocr2keeper/integration_test.go: `g.Eventually(receivedBytes, testutils.WaitTimeout(t), cltest.DBPollingInterval).Should(gomega.Equal(payload1))`
$DIR/core/services/ocr2/plugins/ocr2keeper/integration_test.go: `_, err = upkeepContract.SetBytesToSend(carrol, payload2)`
$DIR/core/services/ocr2/plugins/ocr2keeper/integration_test.go: `_, err = upkeepContract.SetShouldPerformUpkeep(carrol, true)`
$DIR/core/services/ocr2/plugins/ocr2keeper/integration_test.go: `spec = &job.OCR2OracleSpec{
PluginType: types.OCR2Keeper,
ContractID: "0x5431", // invalid contract addr
}`
$DIR/core/services/ocr2/plugins/ocr2keeper/integration_test.go: `_, err = ocr2keeper.FilterNamesFromSpec20(spec)`
$DIR/core/services/ocr2/plugins/ocr2keeper/integration_test.go: `.NewWithT(t)`
$DIR/core/services/ocr2/plugins/ocr2keeper/integration_test.go: `.TestLogger(t)`
$DIR/core/services/ocr2/plugins/ocr2keeper/integration_test.go: `.MustNewSimTransactor(t)`
$DIR/core/services/ocr2/plugins/ocr2keeper/integration_test.go: `.MustNewSimTransactor(t)`
$DIR/core/services/ocr2/plugins/ocr2keeper/integration_test.go: `.MustNewSimTransactor(t)`
$DIR/core/services/ocr2/plugins/ocr2keeper/integration_test.go: `.Ether(1000)`
$DIR/core/services/ocr2/plugins/ocr2keeper/integration_test.go: `.ToInt()`
$DIR/core/services/ocr2/plugins/ocr2keeper/integration_test.go: `.Ether(1000)`
$DIR/core/services/ocr2/plugins/ocr2keeper/integration_test.go: `.ToInt()`
$DIR/core/services/ocr2/plugins/ocr2keeper/integration_test.go: `.Ether(1000)`
$DIR/core/services/ocr2/plugins/ocr2keeper/integration_test.go: `.ToInt()`
$DIR/core/services/ocr2/plugins/ocr2keeper/integration_test.go: `.MustGenerateRandomKey(t)`
$DIR/core/services/ocr2/plugins/ocr2keeper/integration_test.go: `.Ether(1000)`
$DIR/core/services/ocr2/plugins/ocr2keeper/integration_test.go: `.ToInt()`
$DIR/core/services/ocr2/plugins/ocr2keeper/integration_test.go: `.NewSimulatedBackend(t, genesisData, uint32(ethconfig.Defaults.Miner.GasCeil))`
$DIR/core/services/ocr2/plugins/ocr2keeper/integration_test.go: `.Mine(backend, 3*time.Second)`
$DIR/core/services/ocr2/plugins/ocr2keeper/integration_test.go: `.DeployLinkToken(sergey, backend)`
$DIR/core/services/ocr2/plugins/ocr2keeper/integration_test.go: `.DeployMockV3AggregatorContract(steve, backend, 18, big.NewInt(60000000000))`
$DIR/core/services/ocr2/plugins/ocr2keeper/integration_test.go: `.NewInt(60000000000)`
$DIR/core/services/ocr2/plugins/ocr2keeper/integration_test.go: `.DeployMockV3AggregatorContract(steve, backend, 18, big.NewInt(2000000000000000000))`
$DIR/core/services/ocr2/plugins/ocr2keeper/integration_test.go: `.NewInt(2000000000000000000)`
$DIR/core/services/ocr2/plugins/ocr2keeper/integration_test.go: `.GetOne(t)`
$DIR/core/services/ocr2/plugins/ocr2keeper/integration_test.go: `.NewSimulatedMercuryServer()`
$DIR/core/services/ocr2/plugins/ocr2keeper/integration_test.go: `.GetN(t, 4)`
$DIR/core/services/ocr2/plugins/ocr2keeper/integration_test.go: `.Sprintf("127.0.0.1:%d", bootstrapNodePort)`
$DIR/core/services/ocr2/plugins/ocr2keeper/integration_test.go: `.NewSimulatedMercuryServer()`
$DIR/core/services/ocr2/plugins/ocr2keeper/integration_test.go: `.DecodeString(strings.TrimPrefix(kb.OnChainPublicKey(), "0x"))`
$DIR/core/services/ocr2/plugins/ocr2keeper/integration_test.go: `.TrimPrefix(kb.OnChainPublicKey(), "0x")`
$DIR/core/services/ocr2/plugins/ocr2keeper/integration_test.go: `.OnChainPublicKey()`
$DIR/core/services/ocr2/plugins/ocr2keeper/integration_test.go: `.Account(transmitter.String())`
$DIR/core/services/ocr2/plugins/ocr2keeper/integration_test.go: `.String()`
$DIR/core/services/ocr2/plugins/ocr2keeper/integration_test.go: `.OffchainPublicKey()`
$DIR/core/services/ocr2/plugins/ocr2keeper/integration_test.go: `.ConfigEncryptionPublicKey()`
$DIR/core/services/ocr2/plugins/ocr2keeper/integration_test.go: `.AddBootstrapJob(t, fmt.Sprintf(`
type = "bootstrap"
relay = "evm"
schemaVersion = 1
name = "boot"
contractID = "%s"
contractConfigTrackerPollInterval = "15s"
[relayConfig]
chainID = 1337
`, registry.Address()))`
$DIR/core/services/ocr2/plugins/ocr2keeper/integration_test.go: `.Sprintf(`
type = "bootstrap"
relay = "evm"
schemaVersion = 1
name = "boot"
contractID = "%s"
contractConfigTrackerPollInterval = "15s"
[relayConfig]
chainID = 1337
`, registry.Address())`
$DIR/core/services/ocr2/plugins/ocr2keeper/integration_test.go: `.Address()`
$DIR/core/services/ocr2/plugins/ocr2keeper/integration_test.go: `.AddJob(t, fmt.Sprintf(`
type = "offchainreporting2"
pluginType = "ocr2automation"
relay = "evm"
name = "ocr2keepers-%d"
schemaVersion = 1
contractID = "%s"
contractConfigTrackerPollInterval = "15s"
ocrKeyBundleID = "%s"
transmitterID = "%s"
p2pv2Bootstrappers = [
"%s"
]
[relayConfig]
chainID = 1337
[pluginConfig]
maxServiceWorkers = 100
cacheEvictionInterval = "1s"
mercuryCredentialName = "%s"
`, i, registry.Address(), node.KeyBundle.ID(), node.Transmitter, fmt.Sprintf("%s@127.0.0.1:%d", bootstrapPeerID, bootstrapNodePort), MercuryCredName))`
$DIR/core/services/ocr2/plugins/ocr2keeper/integration_test.go: `.Sprintf(`
type = "offchainreporting2"
pluginType = "ocr2automation"
relay = "evm"
name = "ocr2keepers-%d"
schemaVersion = 1
contractID = "%s"
contractConfigTrackerPollInterval = "15s"
ocrKeyBundleID = "%s"
transmitterID = "%s"
p2pv2Bootstrappers = [
"%s"
]
[relayConfig]
chainID = 1337
[pluginConfig]
maxServiceWorkers = 100
cacheEvictionInterval = "1s"
mercuryCredentialName = "%s"
`, i, registry.Address(), node.KeyBundle.ID(), node.Transmitter, fmt.Sprintf("%s@127.0.0.1:%d", bootstrapPeerID, bootstrapNodePort), MercuryCredName)`
$DIR/core/services/ocr2/plugins/ocr2keeper/integration_test.go: `.Address()`
$DIR/core/services/ocr2/plugins/ocr2keeper/integration_test.go: `.KeyBundle.ID()`
$DIR/core/services/ocr2/plugins/ocr2keeper/integration_test.go: `.Sprintf("%s@127.0.0.1:%d", bootstrapPeerID, bootstrapNodePort)`
$DIR/core/services/ocr2/plugins/ocr2keeper/integration_test.go: `.MustNewType("tuple(uint32 paymentPremiumPPB,uint32 flatFeeMicroLink,uint32 checkGasLimit,uint24 stalenessSeconds,uint16 gasCeilingMultiplier,uint96 minUpkeepSpend,uint32 maxPerformGas,uint32 maxCheckDataSize,uint32 maxPerformDataSize,uint256 fallbackGasPrice,uint256 fallbackLinkPrice,address transcoder,address registrar)")`
$DIR/core/services/ocr2/plugins/ocr2keeper/integration_test.go: `.Encode(map[string]interface{}{
"paymentPremiumPPB": uint32(0),
"flatFeeMicroLink": uint32(0),
"checkGasLimit": uint32(6500000),
"stalenessSeconds": uint32(90000),
"gasCeilingMultiplier": uint16(2),
"minUpkeepSpend": uint32(0),
"maxPerformGas": uint32(5000000),
"maxCheckDataSize": uint32(5000),
"maxPerformDataSize": uint32(5000),
"fallbackGasPrice": big.NewInt(60000000000),
"fallbackLinkPrice": big.NewInt(2000000000000000000),
"transcoder": testutils.NewAddress(),
"registrar": testutils.NewAddress(),
}, configType)`
$DIR/core/services/ocr2/plugins/ocr2keeper/integration_test.go: `.NewInt(60000000000)`
$DIR/core/services/ocr2/plugins/ocr2keeper/integration_test.go: `.NewInt(2000000000000000000)`
$DIR/core/services/ocr2/plugins/ocr2keeper/integration_test.go: `.NewAddress()`
$DIR/core/services/ocr2/plugins/ocr2keeper/integration_test.go: `.NewAddress()`
$DIR/core/services/ocr2/plugins/ocr2keeper/integration_test.go: `.Marshal(config.OffchainConfig{
PerformLockoutWindow: 100 * 3 * 1000, // ~100 block lockout (on goerli)
MinConfirmations: 1,
})`
$DIR/core/services/ocr2/plugins/ocr2keeper/integration_test.go: `.ContractSetConfigArgsForTests(
10*time.Second, // deltaProgress time.Duration,
10*time.Second, // deltaResend time.Duration,
2500*time.Millisecond, // deltaRound time.Duration,
40*time.Millisecond, // deltaGrace time.Duration,
15*time.Second, // deltaStage time.Duration,
3, // rMax uint8,
[]int{1, 1, 1, 1},
oracles,
offC, // reportingPluginConfig []byte,
20*time.Millisecond, // Max duration query
1600*time.Millisecond, // Max duration observation
800*time.Millisecond,
20*time.Millisecond,
20*time.Millisecond,
1, // f
onchainConfig,
)`
$DIR/core/services/ocr2/plugins/ocr2keeper/integration_test.go: `.OnchainPublicKeyToAddress(signers)`
$DIR/core/services/ocr2/plugins/ocr2keeper/integration_test.go: `.Infow("Setting Config on Oracle Contract",
"signerAddresses", signerAddresses,
"transmitterAddresses", transmitterAddresses,
"threshold", threshold,
"onchainConfig", onchainConfig,
"encodedConfigVersion", offchainConfigVersion,
"offchainConfig", offchainConfig,
)`
$DIR/core/services/ocr2/plugins/ocr2keeper/integration_test.go: `.SetConfig(
steve,
signerAddresses,
transmitterAddresses,
threshold,
onchainConfig,
offchainConfigVersion,
offchainConfig,
)`
$DIR/core/services/ocr2/plugins/ocr2keeper/integration_test.go: `.Commit()`
$DIR/core/services/ocr2/plugins/ocr2keeper/integration_test.go: `.DeployBasicUpkeepContract(carrol, backend)`
$DIR/core/services/ocr2/plugins/ocr2keeper/integration_test.go: `.RegisterUpkeep(steve, upkeepAddr, 2_500_000, carrol.From, []byte{}, []byte{})`
$DIR/core/services/ocr2/plugins/ocr2keeper/integration_test.go: `.Commit()`
$DIR/core/services/ocr2/plugins/ocr2keeper/integration_test.go: `.Transfer(sergey, carrol.From, oneHunEth)`
$DIR/core/services/ocr2/plugins/ocr2keeper/integration_test.go: `.Approve(carrol, registry.Address(), oneHunEth)`
$DIR/core/services/ocr2/plugins/ocr2keeper/integration_test.go: `.Address()`
$DIR/core/services/ocr2/plugins/ocr2keeper/integration_test.go: `.AddFunds(carrol, upkeepID, oneHunEth)`
$DIR/core/services/ocr2/plugins/ocr2keeper/integration_test.go: `.Commit()`
$DIR/core/services/ocr2/plugins/ocr2keeper/integration_test.go: `.SetBytesToSend(carrol, payload1)`
$DIR/core/services/ocr2/plugins/ocr2keeper/integration_test.go: `.SetShouldPerformUpkeep(carrol, true)`
$DIR/core/services/ocr2/plugins/ocr2keeper/integration_test.go: `.Commit()`
$DIR/core/services/ocr2/plugins/ocr2keeper/integration_test.go: `.Infow("Upkeep registered and funded", "upkeepID", upkeepID.String())`
$DIR/core/services/ocr2/plugins/ocr2keeper/integration_test.go: `.String()`
$DIR/core/services/ocr2/plugins/ocr2keeper/integration_test.go: `.ReceivedBytes(nil)`
$DIR/core/services/ocr2/plugins/ocr2keeper/integration_test.go: `.Eventually(receivedBytes, testutils.WaitTimeout(t), cltest.DBPollingInterval)`
$DIR/core/services/ocr2/plugins/ocr2keeper/integration_test.go: `.WaitTimeout(t)`
$DIR/core/services/ocr2/plugins/ocr2keeper/integration_test.go: `.Should(gomega.Equal(payload1))`
$DIR/core/services/ocr2/plugins/ocr2keeper/integration_test.go: `.Equal(payload1)`
$DIR/core/services/ocr2/plugins/ocr2keeper/integration_test.go: `.SetBytesToSend(carrol, payload2)`
$DIR/core/services/ocr2/plugins/ocr2keeper/integration_test.go: `.SetShouldPerformUpkeep(carrol, true)`
$DIR/core/services/ocr2/plugins/ocr2keeper/integration_test.go: `.Eventually(receivedBytes, testutils.WaitTimeout(t), cltest.DBPollingInterval)`
$DIR/core/services/ocr2/plugins/ocr2keeper/integration_test.go: `.WaitTimeout(t)`
$DIR/core/services/ocr2/plugins/ocr2keeper/integration_test.go: `.Equal(payload2)`
$DIR/core/services/ocr2/plugins/ocr2keeper/integration_test.go: `.NewWithT(t)`
$DIR/core/services/ocr2/plugins/ocr2keeper/integration_test.go: `.TestLogger(t)`
$DIR/core/services/ocr2/plugins/ocr2keeper/integration_test.go: `.MustNewSimTransactor(t)`
$DIR/core/services/ocr2/plugins/ocr2keeper/integration_test.go: `.MustNewSimTransactor(t)`
$DIR/core/services/ocr2/plugins/ocr2keeper/integration_test.go: `.MustNewSimTransactor(t)`
$DIR/core/services/ocr2/plugins/ocr2keeper/integration_test.go: `.Ether(1000)`
$DIR/core/services/ocr2/plugins/ocr2keeper/integration_test.go: `.ToInt()`
$DIR/core/services/ocr2/plugins/ocr2keeper/integration_test.go: `.Ether(1000)`
$DIR/core/services/ocr2/plugins/ocr2keeper/integration_test.go: `.ToInt()`
$DIR/core/services/ocr2/plugins/ocr2keeper/integration_test.go: `.Ether(1000)`
$DIR/core/services/ocr2/plugins/ocr2keeper/integration_test.go: `.ToInt()`
$DIR/core/services/ocr2/plugins/ocr2keeper/integration_test.go: `.MustGenerateRandomKey(t)`
$DIR/core/services/ocr2/plugins/ocr2keeper/integration_test.go: `.Ether(1000)`
$DIR/core/services/ocr2/plugins/ocr2keeper/integration_test.go: `.ToInt()`
$DIR/core/services/ocr2/plugins/ocr2keeper/integration_test.go: `.NewSimulatedBackend(t, genesisData, uint32(ethconfig.Defaults.Miner.GasCeil))`
$DIR/core/services/ocr2/plugins/ocr2keeper/integration_test.go: `.Mine(backend, 6*time.Second)`
$DIR/core/services/ocr2/plugins/ocr2keeper/integration_test.go: `.DeployLinkToken(sergey, backend)`
$DIR/core/services/ocr2/plugins/ocr2keeper/integration_test.go: `.DeployMockV3AggregatorContract(steve, backend, 18, big.NewInt(60000000000))`
$DIR/core/services/ocr2/plugins/ocr2keeper/integration_test.go: `.NewInt(60000000000)`
$DIR/core/services/ocr2/plugins/ocr2keeper/integration_test.go: `.DeployMockV3AggregatorContract(steve, backend, 18, big.NewInt(2000000000000000000))`
$DIR/core/services/ocr2/plugins/ocr2keeper/integration_test.go: `.NewInt(2000000000000000000)`
$DIR/core/services/ocr2/plugins/ocr2keeper/integration_test.go: `.GetOne(t)`
$DIR/core/services/ocr2/plugins/ocr2keeper/integration_test.go: `.NewSimulatedMercuryServer()`
$DIR/core/services/ocr2/plugins/ocr2keeper/integration_test.go: `.GetN(t, 4)`
$DIR/core/services/ocr2/plugins/ocr2keeper/integration_test.go: `.Sprintf("127.0.0.1:%d", bootstrapNodePort)`
$DIR/core/services/ocr2/plugins/ocr2keeper/integration_test.go: `.NewSimulatedMercuryServer()`
$DIR/core/services/ocr2/plugins/ocr2keeper/integration_test.go: `.DecodeString(strings.TrimPrefix(kb.OnChainPublicKey(), "0x"))`
$DIR/core/services/ocr2/plugins/ocr2keeper/integration_test.go: `.TrimPrefix(kb.OnChainPublicKey(), "0x")`
$DIR/core/services/ocr2/plugins/ocr2keeper/integration_test.go: `.OnChainPublicKey()`
$DIR/core/services/ocr2/plugins/ocr2keeper/integration_test.go: `.Account(nodeForwarder.String())`
$DIR/core/services/ocr2/plugins/ocr2keeper/integration_test.go: `.String()`
$DIR/core/services/ocr2/plugins/ocr2keeper/integration_test.go: `.OffchainPublicKey()`
$DIR/core/services/ocr2/plugins/ocr2keeper/integration_test.go: `.ConfigEncryptionPublicKey()`
$DIR/core/services/ocr2/plugins/ocr2keeper/integration_test.go: `.AddBootstrapJob(t, fmt.Sprintf(`
type = "bootstrap"
relay = "evm"
schemaVersion = 1
name = "boot"
contractID = "%s"
contractConfigTrackerPollInterval = "15s"
[relayConfig]
chainID = 1337
`, registry.Address()))`
$DIR/core/services/ocr2/plugins/ocr2keeper/integration_test.go: `.Sprintf(`
type = "bootstrap"
relay = "evm"
schemaVersion = 1
name = "boot"
contractID = "%s"
contractConfigTrackerPollInterval = "15s"
[relayConfig]
chainID = 1337
`, registry.Address())`
$DIR/core/services/ocr2/plugins/ocr2keeper/integration_test.go: `.Address()`
$DIR/core/services/ocr2/plugins/ocr2keeper/integration_test.go: `.AddJob(t, fmt.Sprintf(`
type = "offchainreporting2"
pluginType = "ocr2automation"
relay = "evm"
name = "ocr2keepers-%d"
schemaVersion = 1
contractID = "%s"
contractConfigTrackerPollInterval = "15s"
ocrKeyBundleID = "%s"
transmitterID = "%s"
p2pv2Bootstrappers = [
"%s"
]
forwardingAllowed = true
[relayConfig]
chainID = 1337
[pluginConfig]
cacheEvictionInterval = "1s"
maxServiceWorkers = 100
mercuryCredentialName = "%s"
`, i, registry.Address(), node.KeyBundle.ID(), node.Transmitter, fmt.Sprintf("%s@127.0.0.1:%d", bootstrapPeerID, bootstrapNodePort), MercuryCredName))`
$DIR/core/services/ocr2/plugins/ocr2keeper/integration_test.go: `.Sprintf(`
type = "offchainreporting2"
pluginType = "ocr2automation"
relay = "evm"
name = "ocr2keepers-%d"
schemaVersion = 1
contractID = "%s"
contractConfigTrackerPollInterval = "15s"
ocrKeyBundleID = "%s"
transmitterID = "%s"
p2pv2Bootstrappers = [
"%s"
]
forwardingAllowed = true
[relayConfig]
chainID = 1337
[pluginConfig]
cacheEvictionInterval = "1s"
maxServiceWorkers = 100
mercuryCredentialName = "%s"
`, i, registry.Address(), node.KeyBundle.ID(), node.Transmitter, fmt.Sprintf("%s@127.0.0.1:%d", bootstrapPeerID, bootstrapNodePort), MercuryCredName)`
$DIR/core/services/ocr2/plugins/ocr2keeper/integration_test.go: `.Address()`
$DIR/core/services/ocr2/plugins/ocr2keeper/integration_test.go: `.KeyBundle.ID()`
$DIR/core/services/ocr2/plugins/ocr2keeper/integration_test.go: `.Sprintf("%s@127.0.0.1:%d", bootstrapPeerID, bootstrapNodePort)`
$DIR/core/services/ocr2/plugins/ocr2keeper/integration_test.go: `.MustNewType("tuple(uint32 paymentPremiumPPB,uint32 flatFeeMicroLink,uint32 checkGasLimit,uint24 stalenessSeconds,uint16 gasCeilingMultiplier,uint96 minUpkeepSpend,uint32 maxPerformGas,uint32 maxCheckDataSize,uint32 maxPerformDataSize,uint256 fallbackGasPrice,uint256 fallbackLinkPrice,address transcoder,address registrar)")`
$DIR/core/services/ocr2/plugins/ocr2keeper/integration_test.go: `.Encode(map[string]interface{}{
"paymentPremiumPPB": uint32(0),
"flatFeeMicroLink": uint32(0),
"checkGasLimit": uint32(6500000),
"stalenessSeconds": uint32(90000),
"gasCeilingMultiplier": uint16(2),
"minUpkeepSpend": uint32(0),
"maxPerformGas": uint32(5000000),
"maxCheckDataSize": uint32(5000),
"maxPerformDataSize": uint32(5000),
"fallbackGasPrice": big.NewInt(60000000000),
"fallbackLinkPrice": big.NewInt(2000000000000000000),
"transcoder": testutils.NewAddress(),
"registrar": testutils.NewAddress(),
}, configType)`
$DIR/core/services/ocr2/plugins/ocr2keeper/integration_test.go: `.NewInt(60000000000)`
$DIR/core/services/ocr2/plugins/ocr2keeper/integration_test.go: `.NewInt(2000000000000000000)`
$DIR/core/services/ocr2/plugins/ocr2keeper/integration_test.go: `.NewAddress()`
$DIR/core/services/ocr2/plugins/ocr2keeper/integration_test.go: `.NewAddress()`
$DIR/core/services/ocr2/plugins/ocr2keeper/integration_test.go: `.Marshal(config.OffchainConfig{
PerformLockoutWindow: 100 * 12 * 1000, // ~100 block lockout (on goerli)
})`
$DIR/core/services/ocr2/plugins/ocr2keeper/integration_test.go: `.ContractSetConfigArgsForTests(
10*time.Second, // deltaProgress time.Duration,
10*time.Second, // deltaResend time.Duration,
5*time.Second, // deltaRound time.Duration,
500*time.Millisecond, // deltaGrace time.Duration,
2*time.Second, // deltaStage time.Duration,
3, // rMax uint8,
[]int{1, 1, 1, 1},
oracles,
offC, // reportingPluginConfig []byte,
50*time.Millisecond, // Max duration query
1*time.Second, // Max duration observation
1*time.Second,
1*time.Second,
1*time.Second,
1, // f
onchainConfig,
)`
$DIR/core/services/ocr2/plugins/ocr2keeper/integration_test.go: `.OnchainPublicKeyToAddress(signers)`
$DIR/core/services/ocr2/plugins/ocr2keeper/integration_test.go: `.Infow("Setting Config on Oracle Contract",
"signerAddresses", signerAddresses,
"transmitterAddresses", transmitterAddresses,
"threshold", threshold,
"onchainConfig", onchainConfig,
"encodedConfigVersion", offchainConfigVersion,
"offchainConfig", offchainConfig,
)`
$DIR/core/services/ocr2/plugins/ocr2keeper/integration_test.go: `.SetConfig(
steve,
signerAddresses,
transmitterAddresses,
threshold,
onchainConfig,
offchainConfigVersion,
offchainConfig,
)`
$DIR/core/services/ocr2/plugins/ocr2keeper/integration_test.go: `.Commit()`
$DIR/core/services/ocr2/plugins/ocr2keeper/integration_test.go: `.DeployBasicUpkeepContract(carrol, backend)`
$DIR/core/services/ocr2/plugins/ocr2keeper/integration_test.go: `.RegisterUpkeep(steve, upkeepAddr, 2_500_000, carrol.From, []byte{}, []byte{})`
$DIR/core/services/ocr2/plugins/ocr2keeper/integration_test.go: `.Commit()`
$DIR/core/services/ocr2/plugins/ocr2keeper/integration_test.go: `.Transfer(sergey, carrol.From, oneHunEth)`
$DIR/core/services/ocr2/plugins/ocr2keeper/integration_test.go: `.Approve(carrol, registry.Address(), oneHunEth)`
$DIR/core/services/ocr2/plugins/ocr2keeper/integration_test.go: `.Address()`
$DIR/core/services/ocr2/plugins/ocr2keeper/integration_test.go: `.AddFunds(carrol, upkeepID, oneHunEth)`
$DIR/core/services/ocr2/plugins/ocr2keeper/integration_test.go: `.Commit()`
$DIR/core/services/ocr2/plugins/ocr2keeper/integration_test.go: `.SetBytesToSend(carrol, payload1)`
$DIR/core/services/ocr2/plugins/ocr2keeper/integration_test.go: `.SetShouldPerformUpkeep(carrol, true)`
$DIR/core/services/ocr2/plugins/ocr2keeper/integration_test.go: `.Commit()`
$DIR/core/services/ocr2/plugins/ocr2keeper/integration_test.go: `.Infow("Upkeep registered and funded")`
$DIR/core/services/ocr2/plugins/ocr2keeper/integration_test.go: `.ReceivedBytes(nil)`
$DIR/core/services/ocr2/plugins/ocr2keeper/integration_test.go: `.Eventually(receivedBytes, testutils.WaitTimeout(t), cltest.DBPollingInterval)`
$DIR/core/services/ocr2/plugins/ocr2keeper/integration_test.go: `.WaitTimeout(t)`
$DIR/core/services/ocr2/plugins/ocr2keeper/integration_test.go: `.Should(gomega.Equal(payload1))`
$DIR/core/services/ocr2/plugins/ocr2keeper/integration_test.go: `.Equal(payload1)`
$DIR/core/services/ocr2/plugins/ocr2keeper/integration_test.go: `.SetBytesToSend(carrol, payload2)`
$DIR/core/services/ocr2/plugins/ocr2keeper/integration_test.go: `.SetShouldPerformUpkeep(carrol, true)`
$DIR/core/services/ocr2/plugins/ocr2keeper/integration_test.go: `.Eventually(receivedBytes, testutils.WaitTimeout(t), cltest.DBPollingInterval)`
$DIR/core/services/ocr2/plugins/ocr2keeper/integration_test.go: `.WaitTimeout(t)`
$DIR/core/services/ocr2/plugins/ocr2keeper/integration_test.go: `.Equal(payload2)`
$DIR/core/services/ocr2/plugins/ocr2keeper/integration_test.go: `.Read(b)`
$DIR/core/services/ocr2/plugins/ocr2keeper/integration_test.go: `.HexToAddress(hexutil.Encode(b))`
$DIR/core/services/ocr2/plugins/ocr2keeper/integration_test.go: `.Encode(b)`
$DIR/core/services/ocr2/plugins/ocr2keeper/integration_test.go: `.String()`
$DIR/core/services/ocr2/plugins/ocr2keeper/integration_test.go: `.FilterNamesFromSpec20(spec)`
$DIR/core/services/ocr2/plugins/ocr2keeper/integration_test.go: `.FilterNamesFromSpec20(spec)`
$DIR/core/services/ocr2/plugins/ocr2vrf/coordinator/coordinator_test.go: `t.Run("valid output", func(t *testing.T) {
onchainRouter := mocks.NewVRFBeaconCoordinator(t)
onchainRouter.
On("IBeaconPeriodBlocks", mock.Anything).
Return(big.NewInt(10), nil)
c := &coordinator{
onchainRouter: onchainRouter,
}
period, err := c.BeaconPeriod(testutils.Context(t))
assert.NoError(t, err)
assert.Equal(t, uint16(10), period)
})`
$DIR/core/services/ocr2/plugins/ocr2vrf/coordinator/coordinator_test.go: `onchainRouter.
On("IBeaconPeriodBlocks", mock.Anything).
Return(big.NewInt(10), nil)`
$DIR/core/services/ocr2/plugins/ocr2vrf/coordinator/coordinator_test.go: `onchainRouter.
On("IBeaconPeriodBlocks", mock.Anything).
Return(nil, errors.New("rpc error"))`
$DIR/core/services/ocr2/plugins/ocr2vrf/coordinator/coordinator_test.go: `evmClient.On("ConfiguredChainID").Return(big.NewInt(1))`
$DIR/core/services/ocr2/plugins/ocr2vrf/coordinator/coordinator_test.go: `t.Run("happy path", func(t *testing.T) {
// In this test the DKG and VRF committees have the same signers and
// transmitters. This may (?) be different in practice.
lp := lp_mocks.NewLogPoller(t)
tp := newTopics()
coordinatorAddress := newAddress(t)
beaconAddress := newAddress(t)
dkgAddress := newAddress(t)
lp.On("LatestLogByEventSigWithConfs", mock.Anything, tp.configSetTopic, beaconAddress, evmtypes.Confirmations(10)).
Return(&logpoller.Log{
Data: hexutil.MustDecode("0x0000000000000000000000000000000000000000000000000000000000a6fca200010576e704b4a519484d6239ef17f1f5b4a82e330b0daf827ed4dc2789971b0000000000000000000000000000000000000000000000000000000000000032000000000000000000000000000000000000000000000000000000000000012000000000000000000000000000000000000000000000000000000000000001e0000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000002a0000000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000002e000000000000000000000000000000000000000000000000000000000000000050000000000000000000000000a8cbea12a06869d3ec432ab9682dab6c761d591000000000000000000000000f4f9db7bb1d16b7cdfb18ec68994c26964f5985300000000000000000000000022fb3f90c539457f00d8484438869135e604a65500000000000000000000000033cbcedccb11c9773ad78e214ba342e979255ab30000000000000000000000006ffaa96256fbc1012325cca88c79f725c33eed80000000000000000000000000000000000000000000000000000000000000000500000000000000000000000074103cf8b436465870b26aa9fa2f62ad62b22e3500000000000000000000000038a6cb196f805cc3041f6645a5a6cec27b64430d00000000000000000000000047d7095cfebf8285bdaa421bc8268d0db87d933c000000000000000000000000a8842be973800ff61d80d2d53fa62c3a685380eb0000000000000000000000003750e31321aee8c024751877070e8d5f704ce98700000000000000000000000000000000000000000000000000000000000000206f3b82406688b8ddb944c6f2e6d808f014c8fa8d568d639c25019568c715fbf000000000000000000000000000000000000000000000000000000000000004220880d88ee16f1080c8afa0251880c8afa025208090dfc04a288090dfc04a30033a05010101010142206c5ca6f74b532222ac927dd3de235d46a943e372c0563393a33b01dcfd3f371c4220855114d25c2ef5e85fffe4f20a365672d8f2dba3b2ec82333f494168a2039c0442200266e835634db00977cbc1caa4db10e1676c1a4c0fcbc6ba7f09300f0d1831824220980cd91f7a73f20f4b0d51d00cd4e00373dc2beafbb299ca3c609757ab98c8304220eb6d36e2af8922085ff510bbe1eb8932a0e3295ca9f047fef25d90e69c52948f4a34313244334b6f6f574463364b7232644542684b59326b336e685057694676544565325331703978544532544b74344d7572716f684a34313244334b6f6f574b436e4367724b637743324a3577576a626e355435335068646b6b6f57454e534a39546537544b7836366f4a4a34313244334b6f6f575239616f675948786b357a38636b624c4c56346e426f7a777a747871664a7050586671336d4a7232796452474a34313244334b6f6f5744695444635565675637776b313133473366476a69616259756f54436f3157726f6f53656741343263556f544a34313244334b6f6f574e64687072586b5472665370354d5071736270467a70364167394a53787358694341434442676454424c656652820300050e416c74424e2d3132382047e282810e86e8cf899ae9a1b43e023bbe8825b103659bb8d6d4e54f6a3cfae7b106069c216a812d7616e47f0bd38fa4863f48fbcda6a38af4c58d2233dfa7cf79620947042d09f923e0a2f7a2270391e8b058d8bdb8f79fe082b7b627f025651c7290382fdff97c3181d15d162c146ce87ff752499d2acc2b26011439a12e29571a6f1e1defb1751c3be4258c493984fd9f0f6b4a26c539870b5f15bfed3d8ffac92499eb62dbd2beb7c1524275a8019022f6ce6a7e86c9e65e3099452a2b96fc2432b127a112970e1adf615f823b2b2180754c2f0ee01f1b389e56df55ca09702cd0401b66ff71779d2dd67222503a85ab921b28c329cc1832800b192d0b0247c0776e1b9653dc00df48daa6364287c84c0382f5165e7269fef06d10bc67c1bba252305d1af0dc7bb0fe92558eb4c5f38c23163dee1cfb34a72020669dbdfe337c16f3307472616e736c61746f722066726f6d20416c74424e2d3132382047e2828120746f20416c74424e2d3132382047e282825880ade2046080c8afa0256880c8afa0257080ade204788094ebdc0382019e010a205034214e0bd4373f38e162cf9fc9133e2f3b71441faa4c3d1ac01c1877f1cd2712200e03e975b996f911abba2b79d2596c2150bc94510963c40a1137a03df6edacdb1a107dee1cdb894163813bb3da604c9c133c1a10bb33302eeafbd55d352e35dcc5d2b3311a10d2c658b6b93d74a02d467849b6fe75251a10fea5308cc1fea69e7246eafe7ca8a3a51a1048efe1ad873b6f025ac0243bdef715f8000000000000000000000000000000000000000000000000000000000000"),
}, nil)
lp.On("LatestLogByEventSigWithConfs", mock.Anything, tp.configSetTopic, dkgAddress, evmtypes.Confirmations(10)).
Return(&logpoller.Log{
Data: hexutil.MustDecode("0x0000000000000000000000000000000000000000000000000000000000a6fca200010576e704b4a519484d6239ef17f1f5b4a82e330b0daf827ed4dc2789971b0000000000000000000000000000000000000000000000000000000000000032000000000000000000000000000000000000000000000000000000000000012000000000000000000000000000000000000000000000000000000000000001e0000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000002a0000000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000002e000000000000000000000000000000000000000000000000000000000000000050000000000000000000000000a8cbea12a06869d3ec432ab9682dab6c761d591000000000000000000000000f4f9db7bb1d16b7cdfb18ec68994c26964f5985300000000000000000000000022fb3f90c539457f00d8484438869135e604a65500000000000000000000000033cbcedccb11c9773ad78e214ba342e979255ab30000000000000000000000006ffaa96256fbc1012325cca88c79f725c33eed80000000000000000000000000000000000000000000000000000000000000000500000000000000000000000074103cf8b436465870b26aa9fa2f62ad62b22e3500000000000000000000000038a6cb196f805cc3041f6645a5a6cec27b64430d00000000000000000000000047d7095cfebf8285bdaa421bc8268d0db87d933c000000000000000000000000a8842be973800ff61d80d2d53fa62c3a685380eb0000000000000000000000003750e31321aee8c024751877070e8d5f704ce98700000000000000000000000000000000000000000000000000000000000000206f3b82406688b8ddb944c6f2e6d808f014c8fa8d568d639c25019568c715fbf000000000000000000000000000000000000000000000000000000000000004220880d88ee16f1080c8afa0251880c8afa025208090dfc04a288090dfc04a30033a05010101010142206c5ca6f74b532222ac927dd3de235d46a943e372c0563393a33b01dcfd3f371c4220855114d25c2ef5e85fffe4f20a365672d8f2dba3b2ec82333f494168a2039c0442200266e835634db00977cbc1caa4db10e1676c1a4c0fcbc6ba7f09300f0d1831824220980cd91f7a73f20f4b0d51d00cd4e00373dc2beafbb299ca3c609757ab98c8304220eb6d36e2af8922085ff510bbe1eb8932a0e3295ca9f047fef25d90e69c52948f4a34313244334b6f6f574463364b7232644542684b59326b336e685057694676544565325331703978544532544b74344d7572716f684a34313244334b6f6f574b436e4367724b637743324a3577576a626e355435335068646b6b6f57454e534a39546537544b7836366f4a4a34313244334b6f6f575239616f675948786b357a38636b624c4c56346e426f7a777a747871664a7050586671336d4a7232796452474a34313244334b6f6f5744695444635565675637776b313133473366476a69616259756f54436f3157726f6f53656741343263556f544a34313244334b6f6f574e64687072586b5472665370354d5071736270467a70364167394a53787358694341434442676454424c656652820300050e416c74424e2d3132382047e282810e86e8cf899ae9a1b43e023bbe8825b103659bb8d6d4e54f6a3cfae7b106069c216a812d7616e47f0bd38fa4863f48fbcda6a38af4c58d2233dfa7cf79620947042d09f923e0a2f7a2270391e8b058d8bdb8f79fe082b7b627f025651c7290382fdff97c3181d15d162c146ce87ff752499d2acc2b26011439a12e29571a6f1e1defb1751c3be4258c493984fd9f0f6b4a26c539870b5f15bfed3d8ffac92499eb62dbd2beb7c1524275a8019022f6ce6a7e86c9e65e3099452a2b96fc2432b127a112970e1adf615f823b2b2180754c2f0ee01f1b389e56df55ca09702cd0401b66ff71779d2dd67222503a85ab921b28c329cc1832800b192d0b0247c0776e1b9653dc00df48daa6364287c84c0382f5165e7269fef06d10bc67c1bba252305d1af0dc7bb0fe92558eb4c5f38c23163dee1cfb34a72020669dbdfe337c16f3307472616e736c61746f722066726f6d20416c74424e2d3132382047e2828120746f20416c74424e2d3132382047e282825880ade2046080c8afa0256880c8afa0257080ade204788094ebdc0382019e010a205034214e0bd4373f38e162cf9fc9133e2f3b71441faa4c3d1ac01c1877f1cd2712200e03e975b996f911abba2b79d2596c2150bc94510963c40a1137a03df6edacdb1a107dee1cdb894163813bb3da604c9c133c1a10bb33302eeafbd55d352e35dcc5d2b3311a10d2c658b6b93d74a02d467849b6fe75251a10fea5308cc1fea69e7246eafe7ca8a3a51a1048efe1ad873b6f025ac0243bdef715f8000000000000000000000000000000000000000000000000000000000000"),
}, nil)
expectedDKGVRF := ocr2vrftypes.OCRCommittee{
Signers: []common.Address{
common.HexToAddress("0x0A8cbEA12a06869d3EC432aB9682DAb6C761D591"),
common.HexToAddress("0xF4f9db7BB1d16b7CDfb18Ec68994c26964F59853"),
common.HexToAddress("0x22fB3F90C539457f00d8484438869135E604a655"),
common.HexToAddress("0x33CbCedccb11c9773AD78e214Ba342E979255ab3"),
common.HexToAddress("0x6ffaA96256fbC1012325cca88C79F725c33eED80"),
},
Transmitters: []common.Address{
common.HexToAddress("0x74103Cf8b436465870b26aa9Fa2F62AD62b22E35"),
common.HexToAddress("0x38A6Cb196f805cC3041F6645a5A6CEC27B64430D"),
common.HexToAddress("0x47d7095CFEBF8285BdAa421Bc8268D0DB87D933C"),
common.HexToAddress("0xa8842BE973800fF61D80d2d53fa62C3a685380eB"),
common.HexToAddress("0x3750e31321aEE8c024751877070E8d5F704cE987"),
},
}
c := &coordinator{
lp: lp,
lggr: logger.TestLogger(t),
topics: tp,
beaconAddress: beaconAddress,
coordinatorAddress: coordinatorAddress,
dkgAddress: dkgAddress,
finalityDepth: 10,
evmClient: evmClient,
}
actualDKG, actualVRF, err := c.DKGVRFCommittees(testutils.Context(t))
assert.NoError(t, err)
assert.ElementsMatch(t, expectedDKGVRF.Signers, actualDKG.Signers)
assert.ElementsMatch(t, expectedDKGVRF.Transmitters, actualDKG.Transmitters)
assert.ElementsMatch(t, expectedDKGVRF.Signers, actualVRF.Signers)
assert.ElementsMatch(t, expectedDKGVRF.Transmitters, actualVRF.Transmitters)
})`
$DIR/core/services/ocr2/plugins/ocr2vrf/coordinator/coordinator_test.go: `lp.On("LatestLogByEventSigWithConfs", mock.Anything, tp.configSetTopic, beaconAddress, evmtypes.Confirmations(10)).
Return(&logpoller.Log{
Data: hexutil.MustDecode("0x0000000000000000000000000000000000000000000000000000000000a6fca200010576e704b4a519484d6239ef17f1f5b4a82e330b0daf827ed4dc2789971b0000000000000000000000000000000000000000000000000000000000000032000000000000000000000000000000000000000000000000000000000000012000000000000000000000000000000000000000000000000000000000000001e0000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000002a0000000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000002e000000000000000000000000000000000000000000000000000000000000000050000000000000000000000000a8cbea12a06869d3ec432ab9682dab6c761d591000000000000000000000000f4f9db7bb1d16b7cdfb18ec68994c26964f5985300000000000000000000000022fb3f90c539457f00d8484438869135e604a65500000000000000000000000033cbcedccb11c9773ad78e214ba342e979255ab30000000000000000000000006ffaa96256fbc1012325cca88c79f725c33eed80000000000000000000000000000000000000000000000000000000000000000500000000000000000000000074103cf8b436465870b26aa9fa2f62ad62b22e3500000000000000000000000038a6cb196f805cc3041f6645a5a6cec27b64430d00000000000000000000000047d7095cfebf8285bdaa421bc8268d0db87d933c000000000000000000000000a8842be973800ff61d80d2d53fa62c3a685380eb0000000000000000000000003750e31321aee8c024751877070e8d5f704ce98700000000000000000000000000000000000000000000000000000000000000206f3b82406688b8ddb944c6f2e6d808f014c8fa8d568d639c25019568c715fbf000000000000000000000000000000000000000000000000000000000000004220880d88ee16f1080c8afa0251880c8afa025208090dfc04a288090dfc04a30033a05010101010142206c5ca6f74b532222ac927dd3de235d46a943e372c0563393a33b01dcfd3f371c4220855114d25c2ef5e85fffe4f20a365672d8f2dba3b2ec82333f494168a2039c0442200266e835634db00977cbc1caa4db10e1676c1a4c0fcbc6ba7f09300f0d1831824220980cd91f7a73f20f4b0d51d00cd4e00373dc2beafbb299ca3c609757ab98c8304220eb6d36e2af8922085ff510bbe1eb8932a0e3295ca9f047fef25d90e69c52948f4a34313244334b6f6f574463364b7232644542684b59326b336e685057694676544565325331703978544532544b74344d7572716f684a34313244334b6f6f574b436e4367724b637743324a3577576a626e355435335068646b6b6f57454e534a39546537544b7836366f4a4a34313244334b6f6f575239616f675948786b357a38636b624c4c56346e426f7a777a747871664a7050586671336d4a7232796452474a34313244334b6f6f5744695444635565675637776b313133473366476a69616259756f54436f3157726f6f53656741343263556f544a34313244334b6f6f574e64687072586b5472665370354d5071736270467a70364167394a53787358694341434442676454424c656652820300050e416c74424e2d3132382047e282810e86e8cf899ae9a1b43e023bbe8825b103659bb8d6d4e54f6a3cfae7b106069c216a812d7616e47f0bd38fa4863f48fbcda6a38af4c58d2233dfa7cf79620947042d09f923e0a2f7a2270391e8b058d8bdb8f79fe082b7b627f025651c7290382fdff97c3181d15d162c146ce87ff752499d2acc2b26011439a12e29571a6f1e1defb1751c3be4258c493984fd9f0f6b4a26c539870b5f15bfed3d8ffac92499eb62dbd2beb7c1524275a8019022f6ce6a7e86c9e65e3099452a2b96fc2432b127a112970e1adf615f823b2b2180754c2f0ee01f1b389e56df55ca09702cd0401b66ff71779d2dd67222503a85ab921b28c329cc1832800b192d0b0247c0776e1b9653dc00df48daa6364287c84c0382f5165e7269fef06d10bc67c1bba252305d1af0dc7bb0fe92558eb4c5f38c23163dee1cfb34a72020669dbdfe337c16f3307472616e736c61746f722066726f6d20416c74424e2d3132382047e2828120746f20416c74424e2d3132382047e282825880ade2046080c8afa0256880c8afa0257080ade204788094ebdc0382019e010a205034214e0bd4373f38e162cf9fc9133e2f3b71441faa4c3d1ac01c1877f1cd2712200e03e975b996f911abba2b79d2596c2150bc94510963c40a1137a03df6edacdb1a107dee1cdb894163813bb3da604c9c133c1a10bb33302eeafbd55d352e35dcc5d2b3311a10d2c658b6b93d74a02d467849b6fe75251a10fea5308cc1fea69e7246eafe7ca8a3a51a1048efe1ad873b6f025ac0243bdef715f8000000000000000000000000000000000000000000000000000000000000"),
}, nil)`
$DIR/core/services/ocr2/plugins/ocr2vrf/coordinator/coordinator_test.go: `lp.On("LatestLogByEventSigWithConfs", mock.Anything, tp.configSetTopic, dkgAddress, evmtypes.Confirmations(10)).
Return(&logpoller.Log{
Data: hexutil.MustDecode("0x0000000000000000000000000000000000000000000000000000000000a6fca200010576e704b4a519484d6239ef17f1f5b4a82e330b0daf827ed4dc2789971b0000000000000000000000000000000000000000000000000000000000000032000000000000000000000000000000000000000000000000000000000000012000000000000000000000000000000000000000000000000000000000000001e0000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000002a0000000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000002e000000000000000000000000000000000000000000000000000000000000000050000000000000000000000000a8cbea12a06869d3ec432ab9682dab6c761d591000000000000000000000000f4f9db7bb1d16b7cdfb18ec68994c26964f5985300000000000000000000000022fb3f90c539457f00d8484438869135e604a65500000000000000000000000033cbcedccb11c9773ad78e214ba342e979255ab30000000000000000000000006ffaa96256fbc1012325cca88c79f725c33eed80000000000000000000000000000000000000000000000000000000000000000500000000000000000000000074103cf8b436465870b26aa9fa2f62ad62b22e3500000000000000000000000038a6cb196f805cc3041f6645a5a6cec27b64430d00000000000000000000000047d7095cfebf8285bdaa421bc8268d0db87d933c000000000000000000000000a8842be973800ff61d80d2d53fa62c3a685380eb0000000000000000000000003750e31321aee8c024751877070e8d5f704ce98700000000000000000000000000000000000000000000000000000000000000206f3b82406688b8ddb944c6f2e6d808f014c8fa8d568d639c25019568c715fbf000000000000000000000000000000000000000000000000000000000000004220880d88ee16f1080c8afa0251880c8afa025208090dfc04a288090dfc04a30033a05010101010142206c5ca6f74b532222ac927dd3de235d46a943e372c0563393a33b01dcfd3f371c4220855114d25c2ef5e85fffe4f20a365672d8f2dba3b2ec82333f494168a2039c0442200266e835634db00977cbc1caa4db10e1676c1a4c0fcbc6ba7f09300f0d1831824220980cd91f7a73f20f4b0d51d00cd4e00373dc2beafbb299ca3c609757ab98c8304220eb6d36e2af8922085ff510bbe1eb8932a0e3295ca9f047fef25d90e69c52948f4a34313244334b6f6f574463364b7232644542684b59326b336e685057694676544565325331703978544532544b74344d7572716f684a34313244334b6f6f574b436e4367724b637743324a3577576a626e355435335068646b6b6f57454e534a39546537544b7836366f4a4a34313244334b6f6f575239616f675948786b357a38636b624c4c56346e426f7a777a747871664a7050586671336d4a7232796452474a34313244334b6f6f5744695444635565675637776b313133473366476a69616259756f54436f3157726f6f53656741343263556f544a34313244334b6f6f574e64687072586b5472665370354d5071736270467a70364167394a53787358694341434442676454424c656652820300050e416c74424e2d3132382047e282810e86e8cf899ae9a1b43e023bbe8825b103659bb8d6d4e54f6a3cfae7b106069c216a812d7616e47f0bd38fa4863f48fbcda6a38af4c58d2233dfa7cf79620947042d09f923e0a2f7a2270391e8b058d8bdb8f79fe082b7b627f025651c7290382fdff97c3181d15d162c146ce87ff752499d2acc2b26011439a12e29571a6f1e1defb1751c3be4258c493984fd9f0f6b4a26c539870b5f15bfed3d8ffac92499eb62dbd2beb7c1524275a8019022f6ce6a7e86c9e65e3099452a2b96fc2432b127a112970e1adf615f823b2b2180754c2f0ee01f1b389e56df55ca09702cd0401b66ff71779d2dd67222503a85ab921b28c329cc1832800b192d0b0247c0776e1b9653dc00df48daa6364287c84c0382f5165e7269fef06d10bc67c1bba252305d1af0dc7bb0fe92558eb4c5f38c23163dee1cfb34a72020669dbdfe337c16f3307472616e736c61746f722066726f6d20416c74424e2d3132382047e2828120746f20416c74424e2d3132382047e282825880ade2046080c8afa0256880c8afa0257080ade204788094ebdc0382019e010a205034214e0bd4373f38e162cf9fc9133e2f3b71441faa4c3d1ac01c1877f1cd2712200e03e975b996f911abba2b79d2596c2150bc94510963c40a1137a03df6edacdb1a107dee1cdb894163813bb3da604c9c133c1a10bb33302eeafbd55d352e35dcc5d2b3311a10d2c658b6b93d74a02d467849b6fe75251a10fea5308cc1fea69e7246eafe7ca8a3a51a1048efe1ad873b6f025ac0243bdef715f8000000000000000000000000000000000000000000000000000000000000"),
}, nil)`
$DIR/core/services/ocr2/plugins/ocr2vrf/coordinator/coordinator_test.go: `t.Run("vrf log poll fails", func(t *testing.T) {
lp := lp_mocks.NewLogPoller(t)
tp := newTopics()
beaconAddress := newAddress(t)
lp.On("LatestLogByEventSigWithConfs", mock.Anything, tp.configSetTopic, beaconAddress, evmtypes.Confirmations(10)).
Return(nil, errors.New("rpc error"))
c := &coordinator{
lp: lp,
lggr: logger.TestLogger(t),
topics: tp,
beaconAddress: beaconAddress,
finalityDepth: 10,
evmClient: evmClient,
}
_, _, err := c.DKGVRFCommittees(testutils.Context(t))
assert.Error(t, err)
})`
$DIR/core/services/ocr2/plugins/ocr2vrf/coordinator/coordinator_test.go: `lp.On("LatestLogByEventSigWithConfs", mock.Anything, tp.configSetTopic, beaconAddress, evmtypes.Confirmations(10)).
Return(nil, errors.New("rpc error"))`
$DIR/core/services/ocr2/plugins/ocr2vrf/coordinator/coordinator_test.go: `lp.On("LatestLogByEventSigWithConfs", mock.Anything, tp.configSetTopic, beaconAddress, evmtypes.Confirmations(10)).
Return(&logpoller.Log{
Data: hexutil.MustDecode("0x0000000000000000000000000000000000000000000000000000000000a6fca200010576e704b4a519484d6239ef17f1f5b4a82e330b0daf827ed4dc2789971b0000000000000000000000000000000000000000000000000000000000000032000000000000000000000000000000000000000000000000000000000000012000000000000000000000000000000000000000000000000000000000000001e0000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000002a0000000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000002e000000000000000000000000000000000000000000000000000000000000000050000000000000000000000000a8cbea12a06869d3ec432ab9682dab6c761d591000000000000000000000000f4f9db7bb1d16b7cdfb18ec68994c26964f5985300000000000000000000000022fb3f90c539457f00d8484438869135e604a65500000000000000000000000033cbcedccb11c9773ad78e214ba342e979255ab30000000000000000000000006ffaa96256fbc1012325cca88c79f725c33eed80000000000000000000000000000000000000000000000000000000000000000500000000000000000000000074103cf8b436465870b26aa9fa2f62ad62b22e3500000000000000000000000038a6cb196f805cc3041f6645a5a6cec27b64430d00000000000000000000000047d7095cfebf8285bdaa421bc8268d0db87d933c000000000000000000000000a8842be973800ff61d80d2d53fa62c3a685380eb0000000000000000000000003750e31321aee8c024751877070e8d5f704ce98700000000000000000000000000000000000000000000000000000000000000206f3b82406688b8ddb944c6f2e6d808f014c8fa8d568d639c25019568c715fbf000000000000000000000000000000000000000000000000000000000000004220880d88ee16f1080c8afa0251880c8afa025208090dfc04a288090dfc04a30033a05010101010142206c5ca6f74b532222ac927dd3de235d46a943e372c0563393a33b01dcfd3f371c4220855114d25c2ef5e85fffe4f20a365672d8f2dba3b2ec82333f494168a2039c0442200266e835634db00977cbc1caa4db10e1676c1a4c0fcbc6ba7f09300f0d1831824220980cd91f7a73f20f4b0d51d00cd4e00373dc2beafbb299ca3c609757ab98c8304220eb6d36e2af8922085ff510bbe1eb8932a0e3295ca9f047fef25d90e69c52948f4a34313244334b6f6f574463364b7232644542684b59326b336e685057694676544565325331703978544532544b74344d7572716f684a34313244334b6f6f574b436e4367724b637743324a3577576a626e355435335068646b6b6f57454e534a39546537544b7836366f4a4a34313244334b6f6f575239616f675948786b357a38636b624c4c56346e426f7a777a747871664a7050586671336d4a7232796452474a34313244334b6f6f5744695444635565675637776b313133473366476a69616259756f54436f3157726f6f53656741343263556f544a34313244334b6f6f574e64687072586b5472665370354d5071736270467a70364167394a53787358694341434442676454424c656652820300050e416c74424e2d3132382047e282810e86e8cf899ae9a1b43e023bbe8825b103659bb8d6d4e54f6a3cfae7b106069c216a812d7616e47f0bd38fa4863f48fbcda6a38af4c58d2233dfa7cf79620947042d09f923e0a2f7a2270391e8b058d8bdb8f79fe082b7b627f025651c7290382fdff97c3181d15d162c146ce87ff752499d2acc2b26011439a12e29571a6f1e1defb1751c3be4258c493984fd9f0f6b4a26c539870b5f15bfed3d8ffac92499eb62dbd2beb7c1524275a8019022f6ce6a7e86c9e65e3099452a2b96fc2432b127a112970e1adf615f823b2b2180754c2f0ee01f1b389e56df55ca09702cd0401b66ff71779d2dd67222503a85ab921b28c329cc1832800b192d0b0247c0776e1b9653dc00df48daa6364287c84c0382f5165e7269fef06d10bc67c1bba252305d1af0dc7bb0fe92558eb4c5f38c23163dee1cfb34a72020669dbdfe337c16f3307472616e736c61746f722066726f6d20416c74424e2d3132382047e2828120746f20416c74424e2d3132382047e282825880ade2046080c8afa0256880c8afa0257080ade204788094ebdc0382019e010a205034214e0bd4373f38e162cf9fc9133e2f3b71441faa4c3d1ac01c1877f1cd2712200e03e975b996f911abba2b79d2596c2150bc94510963c40a1137a03df6edacdb1a107dee1cdb894163813bb3da604c9c133c1a10bb33302eeafbd55d352e35dcc5d2b3311a10d2c658b6b93d74a02d467849b6fe75251a10fea5308cc1fea69e7246eafe7ca8a3a51a1048efe1ad873b6f025ac0243bdef715f8000000000000000000000000000000000000000000000000000000000000"),
}, nil)`
$DIR/core/services/ocr2/plugins/ocr2vrf/coordinator/coordinator_test.go: `lp.On("LatestLogByEventSigWithConfs", mock.Anything, tp.configSetTopic, dkgAddress, evmtypes.Confirmations(10)).
Return(nil, errors.New("rpc error"))`
$DIR/core/services/ocr2/plugins/ocr2vrf/coordinator/coordinator_test.go: `t.Run("valid output", func(t *testing.T) {
h := crypto.Keccak256Hash([]byte("hello world"))
var expected [32]byte
copy(expected[:], h.Bytes())
onchainRouter := mocks.NewVRFBeaconCoordinator(t)
onchainRouter.
On("SProvingKeyHash", mock.Anything).
Return(expected, nil)
c := &coordinator{
onchainRouter: onchainRouter,
}
provingKeyHash, err := c.ProvingKeyHash(testutils.Context(t))
assert.NoError(t, err)
assert.ElementsMatch(t, expected[:], provingKeyHash[:])
})`
$DIR/core/services/ocr2/plugins/ocr2vrf/coordinator/coordinator_test.go: `copy(expected[:], h.Bytes())`
$DIR/core/services/ocr2/plugins/ocr2vrf/coordinator/coordinator_test.go: `onchainRouter.
On("SProvingKeyHash", mock.Anything).
Return(expected, nil)`
$DIR/core/services/ocr2/plugins/ocr2vrf/coordinator/coordinator_test.go: `onchainRouter.
On("SProvingKeyHash", mock.Anything).
Return([32]byte{}, errors.New("rpc error"))`
$DIR/core/services/ocr2/plugins/ocr2vrf/coordinator/coordinator_test.go: `evmClient.On("ConfiguredChainID").Return(big.NewInt(1))`
$DIR/core/services/ocr2/plugins/ocr2vrf/coordinator/coordinator_test.go: `t.Run("happy path, beacon requests", func(t *testing.T) {
beaconAddress := newAddress(t)
coordinatorAddress := newAddress(t)
latestHeadNumber := uint64(200)
onchainRouter, err := newRouter(lggr, beaconAddress, coordinatorAddress, evmClient)
require.NoError(t, err)
tp := newTopics()
lookbackBlocks := uint64(5)
lp := getLogPoller(t, []uint64{195}, latestHeadNumber, true, true, lookbackBlocks)
lp.On(
"LogsWithSigs",
mock.Anything,
int64(latestHeadNumber-lookbackBlocks),
int64(latestHeadNumber),
[]common.Hash{
tp.randomnessRequestedTopic,
tp.randomnessFulfillmentRequestedTopic,
tp.randomWordsFulfilledTopic,
tp.outputsServedTopic,
},
coordinatorAddress,
).Return([]logpoller.Log{
newRandomnessRequestedLog(t, 3, 195, 191, 0, coordinatorAddress),
newRandomnessRequestedLog(t, 3, 195, 192, 1, coordinatorAddress),
newRandomnessRequestedLog(t, 3, 195, 193, 2, coordinatorAddress),
}, nil).Once()
c := &coordinator{
onchainRouter: onchainRouter,
beaconAddress: beaconAddress,
coordinatorAddress: coordinatorAddress,
lp: lp,
lggr: logger.TestLogger(t),
topics: tp,
evmClient: evmClient,
toBeTransmittedBlocks: NewBlockCache[blockInReport](time.Duration(int64(lookbackBlocks) * int64(time.Second))),
toBeTransmittedCallbacks: NewBlockCache[callbackInReport](time.Duration(int64(lookbackBlocks) * int64(time.Second))),
coordinatorConfig: newCoordinatorConfig(lookbackBlocks),
blockhashLookback: lookbackBlocks,
}
blocks, callbacks, recentHeightStart, recentBlocks, err := c.ReportBlocks(
testutils.Context(t),
0, // slotInterval: unused
map[uint32]struct{}{3: {}},
time.Duration(0),
100, // maxBlocks: unused
100, // maxCallbacks: unused
)
assert.NoError(t, err)
assert.Len(t, blocks, 1)
assert.Len(t, callbacks, 0)
assert.Equal(t, latestHeadNumber-lookbackBlocks+1, recentHeightStart)
assert.Len(t, recentBlocks, int(lookbackBlocks))
})`
$DIR/core/services/ocr2/plugins/ocr2vrf/coordinator/coordinator_test.go: `lp.On(
"LogsWithSigs",
mock.Anything,
int64(latestHeadNumber-lookbackBlocks),
int64(latestHeadNumber),
[]common.Hash{
tp.randomnessRequestedTopic,
tp.randomnessFulfillmentRequestedTopic,
tp.randomWordsFulfilledTopic,
tp.outputsServedTopic,
},
coordinatorAddress,
).Return([]logpoller.Log{
newRandomnessRequestedLog(t, 3, 195, 191, 0, coordinatorAddress),
newRandomnessRequestedLog(t, 3, 195, 192, 1, coordinatorAddress),
newRandomnessRequestedLog(t, 3, 195, 193, 2, coordinatorAddress),
}, nil).Once()`
$DIR/core/services/ocr2/plugins/ocr2vrf/coordinator/coordinator_test.go: `t.Run("happy path, callback requests", func(t *testing.T) {
beaconAddress := newAddress(t)
coordinatorAddress := newAddress(t)
latestHeadNumber := uint64(200)
onchainRouter, err := newRouter(lggr, beaconAddress, coordinatorAddress, evmClient)
require.NoError(t, err)
tp := newTopics()
lookbackBlocks := uint64(5)
lp := getLogPoller(t, []uint64{195}, latestHeadNumber, true, true, lookbackBlocks)
lp.On(
"LogsWithSigs",
mock.Anything,
int64(latestHeadNumber-lookbackBlocks),
int64(latestHeadNumber),
[]common.Hash{
tp.randomnessRequestedTopic,
tp.randomnessFulfillmentRequestedTopic,
tp.randomWordsFulfilledTopic,
tp.outputsServedTopic,
},
coordinatorAddress,
).Return([]logpoller.Log{
newRandomnessFulfillmentRequestedLog(t, 3, 195, 191, 1, 1000, coordinatorAddress),
newRandomnessFulfillmentRequestedLog(t, 3, 195, 192, 2, 1000, coordinatorAddress),
newRandomnessFulfillmentRequestedLog(t, 3, 195, 193, 3, 1000, coordinatorAddress),
}, nil).Once()
c := &coordinator{
onchainRouter: onchainRouter,
beaconAddress: beaconAddress,
coordinatorAddress: coordinatorAddress,
lp: lp,
lggr: logger.TestLogger(t),
topics: tp,
evmClient: evmClient,
toBeTransmittedBlocks: NewBlockCache[blockInReport](time.Duration(int64(lookbackBlocks) * int64(time.Second))),
toBeTransmittedCallbacks: NewBlockCache[callbackInReport](time.Duration(int64(lookbackBlocks) * int64(time.Second))),
coordinatorConfig: newCoordinatorConfig(lookbackBlocks),
blockhashLookback: lookbackBlocks,
}
blocks, callbacks, recentHeightStart, recentBlocks, err := c.ReportBlocks(
testutils.Context(t),
0, // slotInterval: unused
map[uint32]struct{}{3: {}},
time.Duration(0),
100, // maxBlocks: unused
100, // maxCallbacks: unused
)
assert.NoError(t, err)
assert.Len(t, blocks, 1)
for _, b := range blocks {
assert.False(t, b.ShouldStore)
}
assert.Len(t, callbacks, 3)
assert.Equal(t, latestHeadNumber-lookbackBlocks+1, recentHeightStart)
assert.Len(t, recentBlocks, int(lookbackBlocks))
})`
$DIR/core/services/ocr2/plugins/ocr2vrf/coordinator/coordinator_test.go: `lp.On(
"LogsWithSigs",
mock.Anything,
int64(latestHeadNumber-lookbackBlocks),
int64(latestHeadNumber),
[]common.Hash{
tp.randomnessRequestedTopic,
tp.randomnessFulfillmentRequestedTopic,
tp.randomWordsFulfilledTopic,
tp.outputsServedTopic,
},
coordinatorAddress,
).Return([]logpoller.Log{
newRandomnessFulfillmentRequestedLog(t, 3, 195, 191, 1, 1000, coordinatorAddress),
newRandomnessFulfillmentRequestedLog(t, 3, 195, 192, 2, 1000, coordinatorAddress),
newRandomnessFulfillmentRequestedLog(t, 3, 195, 193, 3, 1000, coordinatorAddress),
}, nil).Once()`
$DIR/core/services/ocr2/plugins/ocr2vrf/coordinator/coordinator_test.go: `t.Run("happy path, beacon requests, beacon fulfillments", func(t *testing.T) {
beaconAddress := newAddress(t)
coordinatorAddress := newAddress(t)
latestHeadNumber := uint64(200)
onchainRouter, err := newRouter(lggr, beaconAddress, coordinatorAddress, evmClient)
require.NoError(t, err)
tp := newTopics()
lookbackBlocks := uint64(5)
lp := getLogPoller(t, []uint64{195}, latestHeadNumber, true, true, lookbackBlocks)
lp.On(
"LogsWithSigs",
mock.Anything,
int64(latestHeadNumber-lookbackBlocks),
int64(latestHeadNumber),
[]common.Hash{
tp.randomnessRequestedTopic,
tp.randomnessFulfillmentRequestedTopic,
tp.randomWordsFulfilledTopic,
tp.outputsServedTopic,
},
coordinatorAddress,
).Return([]logpoller.Log{
newRandomnessRequestedLog(t, 3, 195, 191, 0, coordinatorAddress),
newRandomnessRequestedLog(t, 3, 195, 192, 1, coordinatorAddress),
newRandomnessRequestedLog(t, 3, 195, 193, 2, coordinatorAddress),
newOutputsServedLog(t, []vrf_coordinator.VRFBeaconTypesOutputServed{
{
Height: 195,
ConfirmationDelay: big.NewInt(3),
ProofG1X: proofG1X,
ProofG1Y: proofG1Y,
},
}, coordinatorAddress),
}, nil).Once()
c := &coordinator{
onchainRouter: onchainRouter,
beaconAddress: beaconAddress,
coordinatorAddress: coordinatorAddress,
lp: lp,
lggr: logger.TestLogger(t),
topics: tp,
evmClient: evmClient,
toBeTransmittedBlocks: NewBlockCache[blockInReport](time.Duration(int64(lookbackBlocks) * int64(time.Second))),
toBeTransmittedCallbacks: NewBlockCache[callbackInReport](time.Duration(int64(lookbackBlocks) * int64(time.Second))),
coordinatorConfig: newCoordinatorConfig(lookbackBlocks),
blockhashLookback: lookbackBlocks,
}
blocks, callbacks, recentHeightStart, recentBlocks, err := c.ReportBlocks(
testutils.Context(t),
0, // slotInterval: unused
map[uint32]struct{}{3: {}},
time.Duration(0),
100, // maxBlocks: unused
100, // maxCallbacks: unused
)
assert.NoError(t, err)
assert.Len(t, blocks, 0)
assert.Len(t, callbacks, 0)
assert.Equal(t, latestHeadNumber-lookbackBlocks+1, recentHeightStart)
assert.Len(t, recentBlocks, int(lookbackBlocks))
})`
$DIR/core/services/ocr2/plugins/ocr2vrf/coordinator/coordinator_test.go: `lp.On(
"LogsWithSigs",
mock.Anything,
int64(latestHeadNumber-lookbackBlocks),
int64(latestHeadNumber),
[]common.Hash{
tp.randomnessRequestedTopic,
tp.randomnessFulfillmentRequestedTopic,
tp.randomWordsFulfilledTopic,
tp.outputsServedTopic,
},
coordinatorAddress,
).Return([]logpoller.Log{
newRandomnessRequestedLog(t, 3, 195, 191, 0, coordinatorAddress),
newRandomnessRequestedLog(t, 3, 195, 192, 1, coordinatorAddress),
newRandomnessRequestedLog(t, 3, 195, 193, 2, coordinatorAddress),
newOutputsServedLog(t, []vrf_coordinator.VRFBeaconTypesOutputServed{
{
Height: 195,
ConfirmationDelay: big.NewInt(3),
ProofG1X: proofG1X,
ProofG1Y: proofG1Y,
},
}, coordinatorAddress),
}, nil).Once()`
$DIR/core/services/ocr2/plugins/ocr2vrf/coordinator/coordinator_test.go: `t.Run("happy path, callback requests, callback fulfillments", func(t *testing.T) {
beaconAddress := newAddress(t)
coordinatorAddress := newAddress(t)
latestHeadNumber := uint64(200)
onchainRouter, err := newRouter(lggr, beaconAddress, coordinatorAddress, evmClient)
require.NoError(t, err)
tp := newTopics()
lookbackBlocks := uint64(5)
lp := getLogPoller(t, []uint64{195}, latestHeadNumber, true, true, lookbackBlocks)
// Both RandomWordsFulfilled and NewTransmission events are emitted
// when a VRF fulfillment happens on chain.
lp.On(
"LogsWithSigs",
mock.Anything,
int64(latestHeadNumber-lookbackBlocks),
int64(latestHeadNumber),
[]common.Hash{
tp.randomnessRequestedTopic,
tp.randomnessFulfillmentRequestedTopic,
tp.randomWordsFulfilledTopic,
tp.outputsServedTopic,
},
coordinatorAddress,
).Return([]logpoller.Log{
newRandomnessFulfillmentRequestedLog(t, 3, 195, 191, 1, 1000, coordinatorAddress),
newRandomnessFulfillmentRequestedLog(t, 3, 195, 192, 2, 1000, coordinatorAddress),
newRandomnessFulfillmentRequestedLog(t, 3, 195, 193, 3, 1000, coordinatorAddress),
// Regardless of success or failure, if the fulfillment has been tried once do not report again.
newRandomWordsFulfilledLog(t, []*big.Int{big.NewInt(1), big.NewInt(2), big.NewInt(3)}, []byte{1, 0, 0}, coordinatorAddress),
newOutputsServedLog(t, []vrf_coordinator.VRFBeaconTypesOutputServed{
{
Height: 195,
ConfirmationDelay: big.NewInt(3),
ProofG1X: proofG1X,
ProofG1Y: proofG1Y,
},
}, coordinatorAddress),
}, nil).Once()
c := &coordinator{
onchainRouter: onchainRouter,
beaconAddress: beaconAddress,
coordinatorAddress: coordinatorAddress,
lp: lp,
lggr: logger.TestLogger(t),
topics: tp,
evmClient: evmClient,
toBeTransmittedBlocks: NewBlockCache[blockInReport](time.Duration(int64(lookbackBlocks) * int64(time.Second))),
toBeTransmittedCallbacks: NewBlockCache[callbackInReport](time.Duration(int64(lookbackBlocks) * int64(time.Second))),
coordinatorConfig: newCoordinatorConfig(lookbackBlocks),
blockhashLookback: lookbackBlocks,
}
blocks, callbacks, recentHeightStart, recentBlocks, err := c.ReportBlocks(
testutils.Context(t),
0, // slotInterval: unused
map[uint32]struct{}{3: {}},
time.Duration(0),
100, // maxBlocks: unused
100, // maxCallbacks: unused
)
assert.NoError(t, err)
assert.Len(t, blocks, 0)
assert.Len(t, callbacks, 0)
assert.Equal(t, latestHeadNumber-lookbackBlocks+1, recentHeightStart)
assert.Len(t, recentBlocks, int(lookbackBlocks))
})`
$DIR/core/services/ocr2/plugins/ocr2vrf/coordinator/coordinator_test.go: `lp.On(
"LogsWithSigs",
mock.Anything,
int64(latestHeadNumber-lookbackBlocks),
int64(latestHeadNumber),
[]common.Hash{
tp.randomnessRequestedTopic,
tp.randomnessFulfillmentRequestedTopic,
tp.randomWordsFulfilledTopic,
tp.outputsServedTopic,
},
coordinatorAddress,
).Return([]logpoller.Log{
newRandomnessFulfillmentRequestedLog(t, 3, 195, 191, 1, 1000, coordinatorAddress),
newRandomnessFulfillmentRequestedLog(t, 3, 195, 192, 2, 1000, coordinatorAddress),
newRandomnessFulfillmentRequestedLog(t, 3, 195, 193, 3, 1000, coordinatorAddress),
// Regardless of success or failure, if the fulfillment has been tried once do not report again.
newRandomWordsFulfilledLog(t, []*big.Int{big.NewInt(1), big.NewInt(2), big.NewInt(3)}, []byte{1, 0, 0}, coordinatorAddress),
newOutputsServedLog(t, []vrf_coordinator.VRFBeaconTypesOutputServed{
{
Height: 195,
ConfirmationDelay: big.NewInt(3),
ProofG1X: proofG1X,
ProofG1Y: proofG1Y,
},
}, coordinatorAddress),
}, nil).Once()`
$DIR/core/services/ocr2/plugins/ocr2vrf/coordinator/coordinator_test.go: `t.Run("happy path, only beacon fulfillment", func(t *testing.T) {
beaconAddress := newAddress(t)
coordinatorAddress := newAddress(t)
latestHeadNumber := uint64(200)
onchainRouter, err := newRouter(lggr, beaconAddress, coordinatorAddress, evmClient)
require.NoError(t, err)
tp := newTopics()
lookbackBlocks := uint64(5)
lp := getLogPoller(t, []uint64{}, latestHeadNumber, true, true, lookbackBlocks)
lp.On(
"LogsWithSigs",
mock.Anything,
int64(latestHeadNumber-lookbackBlocks),
int64(latestHeadNumber),
[]common.Hash{
tp.randomnessRequestedTopic,
tp.randomnessFulfillmentRequestedTopic,
tp.randomWordsFulfilledTopic,
tp.outputsServedTopic,
},
coordinatorAddress,
).Return([]logpoller.Log{newOutputsServedLog(t, []vrf_coordinator.VRFBeaconTypesOutputServed{
{
Height: 195,
ConfirmationDelay: big.NewInt(3),
ProofG1X: proofG1X,
ProofG1Y: proofG1Y,
},
}, coordinatorAddress)}, nil).Once()
c := &coordinator{
onchainRouter: onchainRouter,
beaconAddress: beaconAddress,
coordinatorAddress: coordinatorAddress,
lp: lp,
lggr: logger.TestLogger(t),
topics: tp,
evmClient: evmClient,
toBeTransmittedBlocks: NewBlockCache[blockInReport](time.Duration(int64(lookbackBlocks) * int64(time.Second))),
toBeTransmittedCallbacks: NewBlockCache[callbackInReport](time.Duration(int64(lookbackBlocks) * int64(time.Second))),
coordinatorConfig: newCoordinatorConfig(lookbackBlocks),
blockhashLookback: lookbackBlocks,
}
blocks, callbacks, recentHeightStart, recentBlocks, err := c.ReportBlocks(
testutils.Context(t),
0, // slotInterval: unused
map[uint32]struct{}{3: {}},
time.Duration(0),
100, // maxBlocks: unused
100, // maxCallbacks: unused
)
assert.NoError(t, err)
assert.Len(t, blocks, 0)
assert.Len(t, callbacks, 0)
assert.Equal(t, latestHeadNumber-lookbackBlocks+1, recentHeightStart)
assert.Len(t, recentBlocks, int(lookbackBlocks))
})`
$DIR/core/services/ocr2/plugins/ocr2vrf/coordinator/coordinator_test.go: `lp.On(
"LogsWithSigs",
mock.Anything,
int64(latestHeadNumber-lookbackBlocks),
int64(latestHeadNumber),
[]common.Hash{
tp.randomnessRequestedTopic,
tp.randomnessFulfillmentRequestedTopic,
tp.randomWordsFulfilledTopic,
tp.outputsServedTopic,
},
coordinatorAddress,
).Return([]logpoller.Log{newOutputsServedLog(t, []vrf_coordinator.VRFBeaconTypesOutputServed{
{
Height: 195,
ConfirmationDelay: big.NewInt(3),
ProofG1X: proofG1X,
ProofG1Y: proofG1Y,
},
}, coordinatorAddress)}, nil).Once()`
$DIR/core/services/ocr2/plugins/ocr2vrf/coordinator/coordinator_test.go: `t.Run("happy path, callback requests & callback fulfillments in-flight", func(t *testing.T) {
beaconAddress := newAddress(t)
coordinatorAddress := newAddress(t)
latestHeadNumber := uint64(200)
onchainRouter, err := newRouter(lggr, beaconAddress, coordinatorAddress, evmClient)
require.NoError(t, err)
tp := newTopics()
lookbackBlocks := uint64(5)
// Do not include latestHeadNumber in "GetBlocksRange" call for initial "ReportWillBeTransmitted."
// Do not include recent blockhashes in range either.
lp := getLogPoller(t, []uint64{195}, latestHeadNumber, false, false /* includeLatestHeadInRange */, 0)
c := &coordinator{
onchainRouter: onchainRouter,
beaconAddress: beaconAddress,
coordinatorAddress: coordinatorAddress,
lp: lp,
lggr: logger.TestLogger(t),
topics: tp,
evmClient: evmClient,
toBeTransmittedBlocks: NewBlockCache[blockInReport](time.Duration(int64(lookbackBlocks) * int64(time.Second))),
toBeTransmittedCallbacks: NewBlockCache[callbackInReport](time.Duration(int64(lookbackBlocks) * int64(time.Second))),
coordinatorConfig: newCoordinatorConfig(lookbackBlocks),
blockhashLookback: lookbackBlocks,
}
report := ocr2vrftypes.AbstractReport{
RecentBlockHeight: 195,
RecentBlockHash: common.HexToHash("0x001"),
Outputs: []ocr2vrftypes.AbstractVRFOutput{
{
BlockHeight: 195,
ConfirmationDelay: 195,
Callbacks: []ocr2vrftypes.AbstractCostedCallbackRequest{
{
RequestID: big.NewInt(1),
BeaconHeight: 195,
},
{
RequestID: big.NewInt(2),
BeaconHeight: 195,
},
{
RequestID: big.NewInt(3),
BeaconHeight: 195,
},
},
},
},
}
err = c.ReportWillBeTransmitted(testutils.Context(t), report)
require.NoError(t, err)
// Include latestHeadNumber in "GetBlocksRange" call for "ReportBlocks" call.
// Include recent blockhashes in range.
lp = getLogPoller(t, []uint64{195}, latestHeadNumber, true, true /* includeLatestHeadInRange */, lookbackBlocks)
c.lp = lp
lp.On(
"LogsWithSigs",
mock.Anything,
int64(latestHeadNumber-lookbackBlocks),
int64(latestHeadNumber),
[]common.Hash{
tp.randomnessRequestedTopic,
tp.randomnessFulfillmentRequestedTopic,
tp.randomWordsFulfilledTopic,
tp.outputsServedTopic,
},
coordinatorAddress,
).Return([]logpoller.Log{
newRandomnessFulfillmentRequestedLog(t, 3, 195, 191, 1, 1000, coordinatorAddress),
newRandomnessFulfillmentRequestedLog(t, 3, 195, 192, 2, 1000, coordinatorAddress),
newRandomnessFulfillmentRequestedLog(t, 3, 195, 193, 3, 1000, coordinatorAddress),
newOutputsServedLog(t, []vrf_coordinator.VRFBeaconTypesOutputServed{
{
Height: 195,
ConfirmationDelay: big.NewInt(3),
ProofG1X: proofG1X,
ProofG1Y: proofG1Y,
},
}, coordinatorAddress),
}, nil).Once()
blocks, callbacks, recentHeightStart, recentBlocks, err := c.ReportBlocks(
testutils.Context(t),
0, // slotInterval: unused
map[uint32]struct{}{3: {}},
time.Duration(0),
100, // maxBlocks: unused
100, // maxCallbacks: unused
)
assert.NoError(t, err)
assert.Len(t, blocks, 0)
assert.Len(t, callbacks, 0)
assert.Equal(t, latestHeadNumber-lookbackBlocks+1, recentHeightStart)
assert.Len(t, recentBlocks, int(lookbackBlocks))
})`
$DIR/core/services/ocr2/plugins/ocr2vrf/coordinator/coordinator_test.go: `err = c.ReportWillBeTransmitted(testutils.Context(t), report)`
$DIR/core/services/ocr2/plugins/ocr2vrf/coordinator/coordinator_test.go: `lp = getLogPoller(t, []uint64{195}, latestHeadNumber, true, true /* includeLatestHeadInRange */, lookbackBlocks)`
$DIR/core/services/ocr2/plugins/ocr2vrf/coordinator/coordinator_test.go: `c.lp = lp`
$DIR/core/services/ocr2/plugins/ocr2vrf/coordinator/coordinator_test.go: `lp.On(
"LogsWithSigs",
mock.Anything,
int64(latestHeadNumber-lookbackBlocks),
int64(latestHeadNumber),
[]common.Hash{
tp.randomnessRequestedTopic,
tp.randomnessFulfillmentRequestedTopic,
tp.randomWordsFulfilledTopic,
tp.outputsServedTopic,
},
coordinatorAddress,
).Return([]logpoller.Log{
newRandomnessFulfillmentRequestedLog(t, 3, 195, 191, 1, 1000, coordinatorAddress),
newRandomnessFulfillmentRequestedLog(t, 3, 195, 192, 2, 1000, coordinatorAddress),
newRandomnessFulfillmentRequestedLog(t, 3, 195, 193, 3, 1000, coordinatorAddress),
newOutputsServedLog(t, []vrf_coordinator.VRFBeaconTypesOutputServed{
{
Height: 195,
ConfirmationDelay: big.NewInt(3),
ProofG1X: proofG1X,
ProofG1Y: proofG1Y,
},
}, coordinatorAddress),
}, nil).Once()`
$DIR/core/services/ocr2/plugins/ocr2vrf/coordinator/coordinator_test.go: `t.Run("happy path, blocks requested hits batch gas limit", func(t *testing.T) {
coordinatorAddress := newAddress(t)
beaconAddress := newAddress(t)
onchainRouter, err := newRouter(lggr, beaconAddress, coordinatorAddress, evmClient)
require.NoError(t, err)
latestHeadNumber := uint64(400)
lookbackBlocks := uint64(400)
blockhashLookback := uint64(256)
tp := newTopics()
logs := []logpoller.Log{}
requestedBlocks := []uint64{}
// Populate 200 request blocks.
for i := 0; i < 400; i += 2 {
logs = append(logs, newRandomnessRequestedLog(t, 1, uint64(i), 0, int64(i), coordinatorAddress))
requestedBlocks = append(requestedBlocks, uint64(i))
}
lp := getLogPoller(t, requestedBlocks, latestHeadNumber, true, true, blockhashLookback)
lp.On(
"LogsWithSigs",
mock.Anything,
int64(latestHeadNumber-lookbackBlocks),
int64(latestHeadNumber),
[]common.Hash{
tp.randomnessRequestedTopic,
tp.randomnessFulfillmentRequestedTopic,
tp.randomWordsFulfilledTopic,
tp.outputsServedTopic,
},
coordinatorAddress,
).Return(logs, nil)
c := &coordinator{
onchainRouter: onchainRouter,
beaconAddress: beaconAddress,
coordinatorAddress: coordinatorAddress,
lp: lp,
lggr: logger.TestLogger(t),
topics: tp,
evmClient: evmClient,
toBeTransmittedBlocks: NewBlockCache[blockInReport](time.Duration(int64(lookbackBlocks) * int64(time.Second))),
toBeTransmittedCallbacks: NewBlockCache[callbackInReport](time.Duration(int64(lookbackBlocks) * int64(time.Second))),
coordinatorConfig: newCoordinatorConfig(lookbackBlocks),
blockhashLookback: blockhashLookback,
}
blocks, callbacks, recentHeightStart, recentBlocks, err := c.ReportBlocks(
testutils.Context(t),
0, // slotInterval: unused
map[uint32]struct{}{1: {}},
time.Duration(0),
100, // maxBlocks: unused
100, // maxCallbacks: unused
)
// Coordinator should allow 99 blocks, i.e 100 blocks - 1 block's worth of gas
// for the coordinator overhead.
assert.NoError(t, err)
assert.Len(t, blocks, 99)
for _, b := range blocks {
assert.True(t, b.ShouldStore)
}
assert.Len(t, callbacks, 0)
assert.Equal(t, latestHeadNumber-blockhashLookback+1, recentHeightStart)
assert.Len(t, recentBlocks, int(blockhashLookback))
})`
$DIR/core/services/ocr2/plugins/ocr2vrf/coordinator/coordinator_test.go: `logs = append(logs, newRandomnessRequestedLog(t, 1, uint64(i), 0, int64(i), coordinatorAddress))`
$DIR/core/services/ocr2/plugins/ocr2vrf/coordinator/coordinator_test.go: `requestedBlocks = append(requestedBlocks, uint64(i))`
$DIR/core/services/ocr2/plugins/ocr2vrf/coordinator/coordinator_test.go: `lp.On(
"LogsWithSigs",
mock.Anything,
int64(latestHeadNumber-lookbackBlocks),
int64(latestHeadNumber),
[]common.Hash{
tp.randomnessRequestedTopic,
tp.randomnessFulfillmentRequestedTopic,
tp.randomWordsFulfilledTopic,
tp.outputsServedTopic,
},
coordinatorAddress,
).Return(logs, nil)`
$DIR/core/services/ocr2/plugins/ocr2vrf/coordinator/coordinator_test.go: `t.Run("happy path, last callback hits batch gas limit", func(t *testing.T) {
coordinatorAddress := newAddress(t)
beaconAddress := newAddress(t)
onchainRouter, err := newRouter(lggr, beaconAddress, coordinatorAddress, evmClient)
require.NoError(t, err)
latestHeadNumber := uint64(200)
lookbackBlocks := uint64(5)
tp := newTopics()
requestedBlocks := []uint64{195}
lp := getLogPoller(t, requestedBlocks, latestHeadNumber, true, true, lookbackBlocks)
lp.On(
"LogsWithSigs",
mock.Anything,
int64(latestHeadNumber-lookbackBlocks),
int64(latestHeadNumber),
[]common.Hash{
tp.randomnessRequestedTopic,
tp.randomnessFulfillmentRequestedTopic,
tp.randomWordsFulfilledTopic,
tp.outputsServedTopic,
},
coordinatorAddress,
).Return([]logpoller.Log{
newRandomnessRequestedLog(t, 3, 195, 191, 0, coordinatorAddress),
newRandomnessFulfillmentRequestedLog(t, 3, 195, 191, 1, 2_000_000, coordinatorAddress),
newRandomnessFulfillmentRequestedLog(t, 3, 195, 192, 2, 2_900_000, coordinatorAddress),
newRandomnessFulfillmentRequestedLog(t, 3, 195, 193, 3, 1, coordinatorAddress),
}, nil)
c := &coordinator{
onchainRouter: onchainRouter,
beaconAddress: beaconAddress,
coordinatorAddress: coordinatorAddress,
lp: lp,
lggr: logger.TestLogger(t),
topics: tp,
evmClient: evmClient,
toBeTransmittedBlocks: NewBlockCache[blockInReport](time.Duration(int64(lookbackBlocks) * int64(time.Second))),
toBeTransmittedCallbacks: NewBlockCache[callbackInReport](time.Duration(int64(lookbackBlocks) * int64(time.Second))),
coordinatorConfig: newCoordinatorConfig(lookbackBlocks),
blockhashLookback: lookbackBlocks,
}
blocks, callbacks, recentHeightStart, recentBlocks, err := c.ReportBlocks(
testutils.Context(t),
0, // slotInterval: unused
map[uint32]struct{}{3: {}},
time.Duration(0),
100, // maxBlocks: unused
100, // maxCallbacks: unused
)
// Should allow the first two callbacks, which add up to 4_950_000 + 50_000 (1 block) = 5_000_000,
// then reject the last callback for being out of gas.
assert.NoError(t, err)
assert.Len(t, blocks, 1)
for _, b := range blocks {
assert.True(t, b.ShouldStore)
}
assert.Len(t, callbacks, 2)
assert.Equal(t, latestHeadNumber-lookbackBlocks+1, recentHeightStart)
assert.Len(t, recentBlocks, int(lookbackBlocks))
})`
$DIR/core/services/ocr2/plugins/ocr2vrf/coordinator/coordinator_test.go: `lp.On(
"LogsWithSigs",
mock.Anything,
int64(latestHeadNumber-lookbackBlocks),
int64(latestHeadNumber),
[]common.Hash{
tp.randomnessRequestedTopic,
tp.randomnessFulfillmentRequestedTopic,
tp.randomWordsFulfilledTopic,
tp.outputsServedTopic,
},
coordinatorAddress,
).Return([]logpoller.Log{
newRandomnessRequestedLog(t, 3, 195, 191, 0, coordinatorAddress),
newRandomnessFulfillmentRequestedLog(t, 3, 195, 191, 1, 2_000_000, coordinatorAddress),
newRandomnessFulfillmentRequestedLog(t, 3, 195, 192, 2, 2_900_000, coordinatorAddress),
newRandomnessFulfillmentRequestedLog(t, 3, 195, 193, 3, 1, coordinatorAddress),
}, nil)`
$DIR/core/services/ocr2/plugins/ocr2vrf/coordinator/coordinator_test.go: `t.Run("happy path, sandwiched callbacks hit batch gas limit", func(t *testing.T) {
coordinatorAddress := newAddress(t)
beaconAddress := newAddress(t)
onchainRouter, err := newRouter(lggr, beaconAddress, coordinatorAddress, evmClient)
require.NoError(t, err)
latestHeadNumber := uint64(200)
lookbackBlocks := uint64(5)
tp := newTopics()
requestedBlocks := []uint64{195}
lp := getLogPoller(t, requestedBlocks, latestHeadNumber, true, true, lookbackBlocks)
lp.On(
"LogsWithSigs",
mock.Anything,
int64(latestHeadNumber-lookbackBlocks),
int64(latestHeadNumber),
[]common.Hash{
tp.randomnessRequestedTopic,
tp.randomnessFulfillmentRequestedTopic,
tp.randomWordsFulfilledTopic,
tp.outputsServedTopic,
},
coordinatorAddress,
).Return([]logpoller.Log{
newRandomnessRequestedLog(t, 3, 195, 191, 0, coordinatorAddress),
newRandomnessFulfillmentRequestedLog(t, 3, 195, 191, 1, 10_000_000, coordinatorAddress),
newRandomnessFulfillmentRequestedLog(t, 3, 195, 192, 2, 1000, coordinatorAddress),
newRandomnessFulfillmentRequestedLog(t, 3, 195, 193, 3, 10_000_000, coordinatorAddress),
}, nil)
c := &coordinator{
onchainRouter: onchainRouter,
beaconAddress: beaconAddress,
coordinatorAddress: coordinatorAddress,
lp: lp,
lggr: logger.TestLogger(t),
topics: tp,
evmClient: evmClient,
toBeTransmittedBlocks: NewBlockCache[blockInReport](time.Duration(int64(lookbackBlocks) * int64(time.Second))),
toBeTransmittedCallbacks: NewBlockCache[callbackInReport](time.Duration(int64(lookbackBlocks) * int64(time.Second))),
coordinatorConfig: newCoordinatorConfig(lookbackBlocks),
blockhashLookback: lookbackBlocks,
}
blocks, callbacks, recentHeightStart, recentBlocks, err := c.ReportBlocks(
testutils.Context(t),
0, // slotInterval: unused
map[uint32]struct{}{3: {}},
time.Duration(0),
100, // maxBlocks: unused
100, // maxCallbacks: unused
)
// Should allow the middle callback, with an acceptable gas allowance, to be processed.
assert.NoError(t, err)
assert.Len(t, blocks, 1)
assert.Len(t, callbacks, 1)
assert.Equal(t, latestHeadNumber-lookbackBlocks+1, recentHeightStart)
assert.Len(t, recentBlocks, int(lookbackBlocks))
})`
$DIR/core/services/ocr2/plugins/ocr2vrf/coordinator/coordinator_test.go: `lp.On(
"LogsWithSigs",
mock.Anything,
int64(latestHeadNumber-lookbackBlocks),
int64(latestHeadNumber),
[]common.Hash{
tp.randomnessRequestedTopic,
tp.randomnessFulfillmentRequestedTopic,
tp.randomWordsFulfilledTopic,
tp.outputsServedTopic,
},
coordinatorAddress,
).Return([]logpoller.Log{
newRandomnessRequestedLog(t, 3, 195, 191, 0, coordinatorAddress),
newRandomnessFulfillmentRequestedLog(t, 3, 195, 191, 1, 10_000_000, coordinatorAddress),
newRandomnessFulfillmentRequestedLog(t, 3, 195, 192, 2, 1000, coordinatorAddress),
newRandomnessFulfillmentRequestedLog(t, 3, 195, 193, 3, 10_000_000, coordinatorAddress),
}, nil)`
$DIR/core/services/ocr2/plugins/ocr2vrf/coordinator/coordinator_test.go: `t.Run("happy path, sandwiched callbacks with valid callback in next block hit batch gas limit", func(t *testing.T) {
coordinatorAddress := newAddress(t)
beaconAddress := newAddress(t)
onchainRouter, err := newRouter(lggr, beaconAddress, coordinatorAddress, evmClient)
require.NoError(t, err)
latestHeadNumber := uint64(200)
lookbackBlocks := uint64(5)
tp := newTopics()
requestedBlocks := []uint64{195, 196}
lp := getLogPoller(t, requestedBlocks, latestHeadNumber, true, true, lookbackBlocks)
lp.On(
"LogsWithSigs",
mock.Anything,
int64(latestHeadNumber-lookbackBlocks),
int64(latestHeadNumber),
[]common.Hash{
tp.randomnessRequestedTopic,
tp.randomnessFulfillmentRequestedTopic,
tp.randomWordsFulfilledTopic,
tp.outputsServedTopic,
},
coordinatorAddress,
).Return([]logpoller.Log{
newRandomnessRequestedLog(t, 3, 195, 191, 0, coordinatorAddress),
newRandomnessFulfillmentRequestedLog(t, 3, 195, 191, 1, 10_000_000, coordinatorAddress),
newRandomnessFulfillmentRequestedLog(t, 3, 195, 192, 2, 1000, coordinatorAddress),
newRandomnessFulfillmentRequestedLog(t, 3, 195, 193, 3, 10_000_000, coordinatorAddress),
newRandomnessFulfillmentRequestedLog(t, 3, 196, 194, 4, 1000, coordinatorAddress),
}, nil)
c := &coordinator{
onchainRouter: onchainRouter,
beaconAddress: beaconAddress,
coordinatorAddress: coordinatorAddress,
lp: lp,
lggr: logger.TestLogger(t),
topics: tp,
evmClient: evmClient,
toBeTransmittedBlocks: NewBlockCache[blockInReport](time.Duration(int64(lookbackBlocks) * int64(time.Second))),
toBeTransmittedCallbacks: NewBlockCache[callbackInReport](time.Duration(int64(lookbackBlocks) * int64(time.Second))),
coordinatorConfig: newCoordinatorConfig(lookbackBlocks),
blockhashLookback: lookbackBlocks,
}
blocks, callbacks, recentHeightStart, recentBlocks, err := c.ReportBlocks(
testutils.Context(t),
0, // slotInterval: unused
map[uint32]struct{}{3: {}},
time.Duration(0),
100, // maxBlocks: unused
100, // maxCallbacks: unused
)
// Should allow the middle callback, with an acceptable gas allowance, to be processed,
// then move to the next block and find a suitable callback. Also adds the block 196 for
// that callback.
assert.NoError(t, err)
assert.Len(t, blocks, 2)
assert.Len(t, callbacks, 2)
assert.Equal(t, latestHeadNumber-lookbackBlocks+1, recentHeightStart)
assert.Len(t, recentBlocks, int(lookbackBlocks))
})`
$DIR/core/services/ocr2/plugins/ocr2vrf/coordinator/coordinator_test.go: `lp.On(
"LogsWithSigs",
mock.Anything,
int64(latestHeadNumber-lookbackBlocks),
int64(latestHeadNumber),
[]common.Hash{
tp.randomnessRequestedTopic,
tp.randomnessFulfillmentRequestedTopic,
tp.randomWordsFulfilledTopic,
tp.outputsServedTopic,
},
coordinatorAddress,
).Return([]logpoller.Log{
newRandomnessRequestedLog(t, 3, 195, 191, 0, coordinatorAddress),
newRandomnessFulfillmentRequestedLog(t, 3, 195, 191, 1, 10_000_000, coordinatorAddress),
newRandomnessFulfillmentRequestedLog(t, 3, 195, 192, 2, 1000, coordinatorAddress),
newRandomnessFulfillmentRequestedLog(t, 3, 195, 193, 3, 10_000_000, coordinatorAddress),
newRandomnessFulfillmentRequestedLog(t, 3, 196, 194, 4, 1000, coordinatorAddress),
}, nil)`
$DIR/core/services/ocr2/plugins/ocr2vrf/coordinator/coordinator_test.go: `t.Run("correct blockhashes are retrieved with the maximum lookback", func(t *testing.T) {
coordinatorAddress := newAddress(t)
beaconAddress := newAddress(t)
onchainRouter, err := newRouter(lggr, beaconAddress, coordinatorAddress, evmClient)
require.NoError(t, err)
latestHeadNumber := uint64(1000)
lookbackBlocks := uint64(256)
tp := newTopics()
requestedBlocks := []uint64{}
lp := getLogPoller(t, requestedBlocks, latestHeadNumber, true, true, lookbackBlocks)
lp.On(
"LogsWithSigs",
mock.Anything,
int64(latestHeadNumber-lookbackBlocks),
int64(latestHeadNumber),
[]common.Hash{
tp.randomnessRequestedTopic,
tp.randomnessFulfillmentRequestedTopic,
tp.randomWordsFulfilledTopic,
tp.outputsServedTopic,
},
coordinatorAddress,
).Return([]logpoller.Log{}, nil)
c := &coordinator{
onchainRouter: onchainRouter,
beaconAddress: beaconAddress,
coordinatorAddress: coordinatorAddress,
lp: lp,
lggr: logger.TestLogger(t),
topics: tp,
evmClient: evmClient,
toBeTransmittedBlocks: NewBlockCache[blockInReport](time.Duration(int64(lookbackBlocks) * int64(time.Second))),
toBeTransmittedCallbacks: NewBlockCache[callbackInReport](time.Duration(int64(lookbackBlocks) * int64(time.Second))),
coordinatorConfig: newCoordinatorConfig(lookbackBlocks),
blockhashLookback: lookbackBlocks,
}
_, _, recentHeightStart, recentBlocks, err := c.ReportBlocks(
testutils.Context(t),
0, // slotInterval: unused
map[uint32]struct{}{3: {}},
time.Duration(0),
100, // maxBlocks: unused
100, // maxCallbacks: unused
)
assert.NoError(t, err)
assert.Equal(t, latestHeadNumber-lookbackBlocks+1, recentHeightStart)
assert.Equal(t, common.HexToHash(fmt.Sprintf("0x00%d", 1)), recentBlocks[0])
assert.Equal(t, common.HexToHash(fmt.Sprintf("0x00%d", lookbackBlocks)), recentBlocks[len(recentBlocks)-1])
assert.Len(t, recentBlocks, int(lookbackBlocks))
})`
$DIR/core/services/ocr2/plugins/ocr2vrf/coordinator/coordinator_test.go: `lp.On(
"LogsWithSigs",
mock.Anything,
int64(latestHeadNumber-lookbackBlocks),
int64(latestHeadNumber),
[]common.Hash{
tp.randomnessRequestedTopic,
tp.randomnessFulfillmentRequestedTopic,
tp.randomWordsFulfilledTopic,
tp.outputsServedTopic,
},
coordinatorAddress,
).Return([]logpoller.Log{}, nil)`
$DIR/core/services/ocr2/plugins/ocr2vrf/coordinator/coordinator_test.go: `t.Run("correct blockhashes are retrieved with a capped lookback (close to genesis block)", func(t *testing.T) {
coordinatorAddress := newAddress(t)
beaconAddress := newAddress(t)
onchainRouter, err := newRouter(lggr, beaconAddress, coordinatorAddress, evmClient)
require.NoError(t, err)
latestHeadNumber := uint64(100)
lookbackBlocks := uint64(100)
tp := newTopics()
requestedBlocks := []uint64{}
lp := getLogPoller(t, requestedBlocks, latestHeadNumber, true, true, lookbackBlocks)
lp.On(
"LogsWithSigs",
mock.Anything,
int64(latestHeadNumber-lookbackBlocks),
int64(latestHeadNumber),
[]common.Hash{
tp.randomnessRequestedTopic,
tp.randomnessFulfillmentRequestedTopic,
tp.randomWordsFulfilledTopic,
tp.outputsServedTopic,
},
coordinatorAddress,
).Return([]logpoller.Log{}, nil)
c := &coordinator{
onchainRouter: onchainRouter,
beaconAddress: beaconAddress,
coordinatorAddress: coordinatorAddress,
lp: lp,
lggr: logger.TestLogger(t),
topics: tp,
evmClient: evmClient,
toBeTransmittedBlocks: NewBlockCache[blockInReport](time.Duration(int64(lookbackBlocks) * int64(time.Second))),
toBeTransmittedCallbacks: NewBlockCache[callbackInReport](time.Duration(int64(lookbackBlocks) * int64(time.Second))),
coordinatorConfig: newCoordinatorConfig(lookbackBlocks),
blockhashLookback: lookbackBlocks,
}
_, _, recentHeightStart, recentBlocks, err := c.ReportBlocks(
testutils.Context(t),
0, // slotInterval: unused
map[uint32]struct{}{3: {}},
time.Duration(0),
100, // maxBlocks: unused
100, // maxCallbacks: unused
)
assert.NoError(t, err)
assert.Equal(t, latestHeadNumber-lookbackBlocks+1, recentHeightStart)
assert.Equal(t, common.HexToHash(fmt.Sprintf("0x00%d", 1)), recentBlocks[0])
assert.Equal(t, common.HexToHash(fmt.Sprintf("0x00%d", lookbackBlocks)), recentBlocks[len(recentBlocks)-1])
assert.Len(t, recentBlocks, int(lookbackBlocks))
})`
$DIR/core/services/ocr2/plugins/ocr2vrf/coordinator/coordinator_test.go: `lp.On(
"LogsWithSigs",
mock.Anything,
int64(latestHeadNumber-lookbackBlocks),
int64(latestHeadNumber),
[]common.Hash{
tp.randomnessRequestedTopic,
tp.randomnessFulfillmentRequestedTopic,
tp.randomWordsFulfilledTopic,
tp.outputsServedTopic,
},
coordinatorAddress,
).Return([]logpoller.Log{}, nil)`
$DIR/core/services/ocr2/plugins/ocr2vrf/coordinator/coordinator_test.go: `lp.On("LatestBlock", mock.Anything).
Return(logpoller.LogPollerBlock{BlockNumber: int64(latestHeadNumber)}, nil)`
$DIR/core/services/ocr2/plugins/ocr2vrf/coordinator/coordinator_test.go: `lp.On("GetBlocksRange", mock.Anything, append(requestedBlocks, latestHeadNumber-lookbackBlocks+1, latestHeadNumber)).
Return(nil, errors.New("GetBlocks error"))`
$DIR/core/services/ocr2/plugins/ocr2vrf/coordinator/coordinator_test.go: `lp.On(
"LogsWithSigs",
mock.Anything,
int64(latestHeadNumber-lookbackBlocks),
int64(latestHeadNumber),
[]common.Hash{
tp.randomnessRequestedTopic,
tp.randomnessFulfillmentRequestedTopic,
tp.randomWordsFulfilledTopic,
tp.outputsServedTopic,
},
coordinatorAddress,
).Return([]logpoller.Log{
newRandomnessRequestedLog(t, 3, 195, 191, 0, coordinatorAddress),
newRandomnessFulfillmentRequestedLog(t, 3, 195, 191, 1, 10_000_000, coordinatorAddress),
newRandomnessFulfillmentRequestedLog(t, 3, 195, 192, 2, 1000, coordinatorAddress),
newRandomnessFulfillmentRequestedLog(t, 3, 195, 193, 3, 10_000_000, coordinatorAddress),
newRandomnessFulfillmentRequestedLog(t, 3, 196, 194, 4, 1000, coordinatorAddress),
}, nil)`
$DIR/core/services/ocr2/plugins/ocr2vrf/coordinator/coordinator_test.go: `evmClient.On("ConfiguredChainID").Return(big.NewInt(1))`
$DIR/core/services/ocr2/plugins/ocr2vrf/coordinator/coordinator_test.go: `t.Run("happy path", func(t *testing.T) {
lookbackBlocks := uint64(0)
lp := getLogPoller(t, []uint64{199}, 200, false, false, 0)
c := &coordinator{
lp: lp,
lggr: logger.TestLogger(t),
toBeTransmittedBlocks: NewBlockCache[blockInReport](time.Duration(int64(lookbackBlocks) * int64(time.Second))),
toBeTransmittedCallbacks: NewBlockCache[callbackInReport](time.Duration(int64(lookbackBlocks) * int64(time.Second))),
coordinatorConfig: newCoordinatorConfig(lookbackBlocks),
evmClient: evmClient,
}
assert.NoError(t, c.ReportWillBeTransmitted(testutils.Context(t), ocr2vrftypes.AbstractReport{
RecentBlockHeight: 199,
RecentBlockHash: common.HexToHash("0x001"),
}))
})`
$DIR/core/services/ocr2/plugins/ocr2vrf/coordinator/coordinator_test.go: `lg = newRandomnessFulfillmentRequestedLog(t, 3, 1500, 1450, 1, 1000, coordinatorAddress)`
$DIR/core/services/ocr2/plugins/ocr2vrf/coordinator/coordinator_test.go: `lg = newNewTransmissionLog(t, beaconAddress, configDigest)`
$DIR/core/services/ocr2/plugins/ocr2vrf/coordinator/coordinator_test.go: `lg = newRandomWordsFulfilledLog(t, []*big.Int{big.NewInt(1), big.NewInt(2), big.NewInt(3)}, []byte{1, 1, 1}, coordinatorAddress)`
$DIR/core/services/ocr2/plugins/ocr2vrf/coordinator/coordinator_test.go: `lg = newOutputsServedLog(t, []vrf_coordinator.VRFBeaconTypesOutputServed{
{
Height: 1500,
ConfirmationDelay: big.NewInt(3),
ProofG1X: proofG1X,
ProofG1Y: proofG1Y,
},
{
Height: 1505,
ConfirmationDelay: big.NewInt(4),
ProofG1X: proofG1X,
ProofG1Y: proofG1Y,
},
}, coordinatorAddress)`
$DIR/core/services/ocr2/plugins/ocr2vrf/coordinator/coordinator_test.go: `evmClient.On("ConfiguredChainID").Return(big.NewInt(1))`
$DIR/core/services/ocr2/plugins/ocr2vrf/coordinator/coordinator_test.go: `t.Run("report is on-chain", func(t *testing.T) {
tp := newTopics()
beaconAddress := newAddress(t)
coordinatorAddress := newAddress(t)
lggr := logger.TestLogger(t)
onchainRouter, err := newRouter(lggr, beaconAddress, coordinatorAddress, evmClient)
assert.NoError(t, err)
epoch := uint32(20)
round := uint8(3)
epochAndRound := toEpochAndRoundUint40(epoch, round)
enrTopic := common.BytesToHash(common.LeftPadBytes(epochAndRound.Bytes(), 32))
lp := lp_mocks.NewLogPoller(t)
configDigest := common.BigToHash(big.NewInt(1337))
log := newNewTransmissionLog(t, beaconAddress, configDigest)
log.BlockNumber = 195
lp.On("IndexedLogs", mock.Anything, tp.newTransmissionTopic, beaconAddress, 2, []common.Hash{
enrTopic,
}, evmtypes.Confirmations(1)).Return([]logpoller.Log{log}, nil)
c := &coordinator{
lp: lp,
onchainRouter: onchainRouter,
lggr: logger.TestLogger(t),
beaconAddress: beaconAddress,
topics: tp,
evmClient: evmClient,
}
present, err := c.ReportIsOnchain(testutils.Context(t), epoch, round, configDigest)
assert.NoError(t, err)
assert.True(t, present)
})`
$DIR/core/services/ocr2/plugins/ocr2vrf/coordinator/coordinator_test.go: `log.BlockNumber = 195`
$DIR/core/services/ocr2/plugins/ocr2vrf/coordinator/coordinator_test.go: `lp.On("IndexedLogs", mock.Anything, tp.newTransmissionTopic, beaconAddress, 2, []common.Hash{
enrTopic,
}, evmtypes.Confirmations(1)).Return([]logpoller.Log{log}, nil)`
$DIR/core/services/ocr2/plugins/ocr2vrf/coordinator/coordinator_test.go: `t.Run("report is on-chain for old config digest", func(t *testing.T) {
tp := newTopics()
beaconAddress := newAddress(t)
coordinatorAddress := newAddress(t)
lggr := logger.TestLogger(t)
onchainRouter, err := newRouter(lggr, beaconAddress, coordinatorAddress, evmClient)
assert.NoError(t, err)
epoch := uint32(20)
round := uint8(3)
epochAndRound := toEpochAndRoundUint40(epoch, round)
enrTopic := common.BytesToHash(common.LeftPadBytes(epochAndRound.Bytes(), 32))
lp := lp_mocks.NewLogPoller(t)
oldConfigDigest := common.BigToHash(big.NewInt(1337))
newConfigDigest := common.BigToHash(big.NewInt(8888))
log := newNewTransmissionLog(t, beaconAddress, oldConfigDigest)
log.BlockNumber = 195
lp.On("IndexedLogs", mock.Anything, tp.newTransmissionTopic, beaconAddress, 2, []common.Hash{
enrTopic,
}, evmtypes.Confirmations(1)).Return([]logpoller.Log{log}, nil)
c := &coordinator{
lp: lp,
onchainRouter: onchainRouter,
lggr: logger.TestLogger(t),
beaconAddress: beaconAddress,
topics: tp,
evmClient: evmClient,
}
present, err := c.ReportIsOnchain(testutils.Context(t), epoch, round, newConfigDigest)
assert.NoError(t, err)
assert.False(t, present)
})`
$DIR/core/services/ocr2/plugins/ocr2vrf/coordinator/coordinator_test.go: `log.BlockNumber = 195`
$DIR/core/services/ocr2/plugins/ocr2vrf/coordinator/coordinator_test.go: `lp.On("IndexedLogs", mock.Anything, tp.newTransmissionTopic, beaconAddress, 2, []common.Hash{
enrTopic,
}, evmtypes.Confirmations(1)).Return([]logpoller.Log{log}, nil)`
$DIR/core/services/ocr2/plugins/ocr2vrf/coordinator/coordinator_test.go: `lp.On("IndexedLogs", mock.Anything, tp.newTransmissionTopic, beaconAddress, 2, []common.Hash{
enrTopic,
}, evmtypes.Confirmations(1)).Return([]logpoller.Log{}, nil)`
$DIR/core/services/ocr2/plugins/ocr2vrf/coordinator/coordinator_test.go: `t.Run("valid output", func(t *testing.T) {
expected := [8]uint32{1, 2, 3, 4, 5, 6, 7, 8}
ret := [8]*big.Int{}
for i, delay := range expected {
ret[i] = big.NewInt(int64(delay))
}
onchainRouter := mocks.NewVRFBeaconCoordinator(t)
onchainRouter.
On("GetConfirmationDelays", mock.Anything).
Return(ret, nil)
c := &coordinator{
onchainRouter: onchainRouter,
}
confDelays, err := c.ConfirmationDelays(testutils.Context(t))
assert.NoError(t, err)
assert.Equal(t, expected[:], confDelays[:])
})`
$DIR/core/services/ocr2/plugins/ocr2vrf/coordinator/coordinator_test.go: `ret[i] = big.NewInt(int64(delay))`
$DIR/core/services/ocr2/plugins/ocr2vrf/coordinator/coordinator_test.go: `onchainRouter.
On("GetConfirmationDelays", mock.Anything).
Return(ret, nil)`
$DIR/core/services/ocr2/plugins/ocr2vrf/coordinator/coordinator_test.go: `onchainRouter.
On("GetConfirmationDelays", mock.Anything).
Return([8]*big.Int{}, errors.New("rpc error"))`
$DIR/core/services/ocr2/plugins/ocr2vrf/coordinator/coordinator_test.go: `t.Run("valid output", func(t *testing.T) {
var keyIDBytes [32]byte
keyIDBytes[0] = 1
expected := dkg.KeyID(keyIDBytes)
onchainRouter := mocks.NewVRFBeaconCoordinator(t)
onchainRouter.
On("SKeyID", mock.Anything).
Return(keyIDBytes, nil)
c := &coordinator{
onchainRouter: onchainRouter,
}
keyID, err := c.KeyID(testutils.Context(t))
assert.NoError(t, err)
assert.Equal(t, expected[:], keyID[:])
})`
$DIR/core/services/ocr2/plugins/ocr2vrf/coordinator/coordinator_test.go: `keyIDBytes[0] = 1`
$DIR/core/services/ocr2/plugins/ocr2vrf/coordinator/coordinator_test.go: `onchainRouter.
On("SKeyID", mock.Anything).
Return(keyIDBytes, nil)`
$DIR/core/services/ocr2/plugins/ocr2vrf/coordinator/coordinator_test.go: `onchainRouter.
On("SKeyID", mock.Anything).
Return(emptyBytes, errors.New("rpc error"))`
$DIR/core/services/ocr2/plugins/ocr2vrf/coordinator/coordinator_test.go: `t.Run("valid binary", func(t *testing.T) {
c := &coordinator{coordinatorConfig: newCoordinatorConfig(10), lggr: logger.TestLogger(t)}
cacheEvictionWindowSeconds := int64(60)
cacheEvictionWindow := time.Duration(cacheEvictionWindowSeconds * int64(time.Second))
c.toBeTransmittedBlocks = NewBlockCache[blockInReport](cacheEvictionWindow)
c.toBeTransmittedCallbacks = NewBlockCache[callbackInReport](cacheEvictionWindow)
newCoordinatorConfig := &ocr2vrftypes.CoordinatorConfig{
CacheEvictionWindowSeconds: 30,
BatchGasLimit: 1_000_000,
CoordinatorOverhead: 10_000,
CallbackOverhead: 10_000,
BlockGasOverhead: 10_000,
LookbackBlocks: 1_000,
}
require.Equal(t, cacheEvictionWindow, c.toBeTransmittedBlocks.evictionWindow)
require.Equal(t, cacheEvictionWindow, c.toBeTransmittedCallbacks.evictionWindow)
expectedConfigDigest := ocr2Types.ConfigDigest(common.HexToHash("asd"))
expectedOracleID := commontypes.OracleID(3)
err := c.UpdateConfiguration(ocr2vrf.OffchainConfig(newCoordinatorConfig), expectedConfigDigest, expectedOracleID)
newCacheEvictionWindow := time.Duration(newCoordinatorConfig.CacheEvictionWindowSeconds * int64(time.Second))
require.NoError(t, err)
require.Equal(t, newCoordinatorConfig.CacheEvictionWindowSeconds, c.coordinatorConfig.CacheEvictionWindowSeconds)
require.Equal(t, newCoordinatorConfig.BatchGasLimit, c.coordinatorConfig.BatchGasLimit)
require.Equal(t, newCoordinatorConfig.CoordinatorOverhead, c.coordinatorConfig.CoordinatorOverhead)
require.Equal(t, newCoordinatorConfig.CallbackOverhead, c.coordinatorConfig.CallbackOverhead)
require.Equal(t, newCoordinatorConfig.BlockGasOverhead, c.coordinatorConfig.BlockGasOverhead)
require.Equal(t, newCoordinatorConfig.LookbackBlocks, c.coordinatorConfig.LookbackBlocks)
require.Equal(t, newCacheEvictionWindow, c.toBeTransmittedBlocks.evictionWindow)
require.Equal(t, newCacheEvictionWindow, c.toBeTransmittedCallbacks.evictionWindow)
require.Equal(t, expectedConfigDigest, c.configDigest)
require.Equal(t, expectedOracleID, c.oracleID)
})`
$DIR/core/services/ocr2/plugins/ocr2vrf/coordinator/coordinator_test.go: `c.toBeTransmittedBlocks = NewBlockCache[blockInReport](cacheEvictionWindow)`
$DIR/core/services/ocr2/plugins/ocr2vrf/coordinator/coordinator_test.go: `c.toBeTransmittedCallbacks = NewBlockCache[callbackInReport](cacheEvictionWindow)`
$DIR/core/services/ocr2/plugins/ocr2vrf/coordinator/coordinator_test.go: `spec = &job.OCR2OracleSpec{
PluginType: types.OCR2VRF,
ContractID: beaconAddress.String(),
PluginConfig: nil, // missing coordinator & dkg addresses
}`
$DIR/core/services/ocr2/plugins/ocr2vrf/coordinator/coordinator_test.go: `_, err = FilterNamesFromSpec(spec)`
$DIR/core/services/ocr2/plugins/ocr2vrf/coordinator/coordinator_test.go: `.Run("valid output", func(t *testing.T) {
onchainRouter := mocks.NewVRFBeaconCoordinator(t)
onchainRouter.
On("IBeaconPeriodBlocks", mock.Anything).
Return(big.NewInt(10), nil)
c := &coordinator{
onchainRouter: onchainRouter,
}
period, err := c.BeaconPeriod(testutils.Context(t))
assert.NoError(t, err)
assert.Equal(t, uint16(10), period)
})`
$DIR/core/services/ocr2/plugins/ocr2vrf/coordinator/coordinator_test.go: `.NewVRFBeaconCoordinator(t)`
$DIR/core/services/ocr2/plugins/ocr2vrf/coordinator/coordinator_test.go: `.
On("IBeaconPeriodBlocks", mock.Anything)`
$DIR/core/services/ocr2/plugins/ocr2vrf/coordinator/coordinator_test.go: `.
Return(big.NewInt(10), nil)`
$DIR/core/services/ocr2/plugins/ocr2vrf/coordinator/coordinator_test.go: `.NewInt(10)`
$DIR/core/services/ocr2/plugins/ocr2vrf/coordinator/coordinator_test.go: `.BeaconPeriod(testutils.Context(t))`
$DIR/core/services/ocr2/plugins/ocr2vrf/coordinator/coordinator_test.go: `.Context(t)`
$DIR/core/services/ocr2/plugins/ocr2vrf/coordinator/coordinator_test.go: `.NewVRFBeaconCoordinator(t)`
$DIR/core/services/ocr2/plugins/ocr2vrf/coordinator/coordinator_test.go: `.
On("IBeaconPeriodBlocks", mock.Anything)`
$DIR/core/services/ocr2/plugins/ocr2vrf/coordinator/coordinator_test.go: `.
Return(nil, errors.New("rpc error"))`
$DIR/core/services/ocr2/plugins/ocr2vrf/coordinator/coordinator_test.go: `.New("rpc error")`
$DIR/core/services/ocr2/plugins/ocr2vrf/coordinator/coordinator_test.go: `.BeaconPeriod(testutils.Context(t))`
$DIR/core/services/ocr2/plugins/ocr2vrf/coordinator/coordinator_test.go: `.Context(t)`
$DIR/core/services/ocr2/plugins/ocr2vrf/coordinator/coordinator_test.go: `.NewClient(t)`
$DIR/core/services/ocr2/plugins/ocr2vrf/coordinator/coordinator_test.go: `.On("ConfiguredChainID")`
$DIR/core/services/ocr2/plugins/ocr2vrf/coordinator/coordinator_test.go: `.Return(big.NewInt(1))`
$DIR/core/services/ocr2/plugins/ocr2vrf/coordinator/coordinator_test.go: `.NewInt(1)`
$DIR/core/services/ocr2/plugins/ocr2vrf/coordinator/coordinator_test.go: `.Run("happy path", func(t *testing.T) {
// In this test the DKG and VRF committees have the same signers and
// transmitters. This may (?) be different in practice.
lp := lp_mocks.NewLogPoller(t)
tp := newTopics()
coordinatorAddress := newAddress(t)
beaconAddress := newAddress(t)
dkgAddress := newAddress(t)
lp.On("LatestLogByEventSigWithConfs", mock.Anything, tp.configSetTopic, beaconAddress, evmtypes.Confirmations(10)).
Return(&logpoller.Log{
Data: hexutil.MustDecode("0x0000000000000000000000000000000000000000000000000000000000a6fca200010576e704b4a519484d6239ef17f1f5b4a82e330b0daf827ed4dc2789971b0000000000000000000000000000000000000000000000000000000000000032000000000000000000000000000000000000000000000000000000000000012000000000000000000000000000000000000000000000000000000000000001e0000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000002a0000000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000002e000000000000000000000000000000000000000000000000000000000000000050000000000000000000000000a8cbea12a06869d3ec432ab9682dab6c761d591000000000000000000000000f4f9db7bb1d16b7cdfb18ec68994c26964f5985300000000000000000000000022fb3f90c539457f00d8484438869135e604a65500000000000000000000000033cbcedccb11c9773ad78e214ba342e979255ab30000000000000000000000006ffaa96256fbc1012325cca88c79f725c33eed80000000000000000000000000000000000000000000000000000000000000000500000000000000000000000074103cf8b436465870b26aa9fa2f62ad62b22e3500000000000000000000000038a6cb196f805cc3041f6645a5a6cec27b64430d00000000000000000000000047d7095cfebf8285bdaa421bc8268d0db87d933c000000000000000000000000a8842be973800ff61d80d2d53fa62c3a685380eb0000000000000000000000003750e31321aee8c024751877070e8d5f704ce98700000000000000000000000000000000000000000000000000000000000000206f3b82406688b8ddb944c6f2e6d808f014c8fa8d568d639c25019568c715fbf000000000000000000000000000000000000000000000000000000000000004220880d88ee16f1080c8afa0251880c8afa025208090dfc04a288090dfc04a30033a05010101010142206c5ca6f74b532222ac927dd3de235d46a943e372c0563393a33b01dcfd3f371c4220855114d25c2ef5e85fffe4f20a365672d8f2dba3b2ec82333f494168a2039c0442200266e835634db00977cbc1caa4db10e1676c1a4c0fcbc6ba7f09300f0d1831824220980cd91f7a73f20f4b0d51d00cd4e00373dc2beafbb299ca3c609757ab98c8304220eb6d36e2af8922085ff510bbe1eb8932a0e3295ca9f047fef25d90e69c52948f4a34313244334b6f6f574463364b7232644542684b59326b336e685057694676544565325331703978544532544b74344d7572716f684a34313244334b6f6f574b436e4367724b637743324a3577576a626e355435335068646b6b6f57454e534a39546537544b7836366f4a4a34313244334b6f6f575239616f675948786b357a38636b624c4c56346e426f7a777a747871664a7050586671336d4a7232796452474a34313244334b6f6f5744695444635565675637776b313133473366476a69616259756f54436f3157726f6f53656741343263556f544a34313244334b6f6f574e64687072586b5472665370354d5071736270467a70364167394a53787358694341434442676454424c656652820300050e416c74424e2d3132382047e282810e86e8cf899ae9a1b43e023bbe8825b103659bb8d6d4e54f6a3cfae7b106069c216a812d7616e47f0bd38fa4863f48fbcda6a38af4c58d2233dfa7cf79620947042d09f923e0a2f7a2270391e8b058d8bdb8f79fe082b7b627f025651c7290382fdff97c3181d15d162c146ce87ff752499d2acc2b26011439a12e29571a6f1e1defb1751c3be4258c493984fd9f0f6b4a26c539870b5f15bfed3d8ffac92499eb62dbd2beb7c1524275a8019022f6ce6a7e86c9e65e3099452a2b96fc2432b127a112970e1adf615f823b2b2180754c2f0ee01f1b389e56df55ca09702cd0401b66ff71779d2dd67222503a85ab921b28c329cc1832800b192d0b0247c0776e1b9653dc00df48daa6364287c84c0382f5165e7269fef06d10bc67c1bba252305d1af0dc7bb0fe92558eb4c5f38c23163dee1cfb34a72020669dbdfe337c16f3307472616e736c61746f722066726f6d20416c74424e2d3132382047e2828120746f20416c74424e2d3132382047e282825880ade2046080c8afa0256880c8afa0257080ade204788094ebdc0382019e010a205034214e0bd4373f38e162cf9fc9133e2f3b71441faa4c3d1ac01c1877f1cd2712200e03e975b996f911abba2b79d2596c2150bc94510963c40a1137a03df6edacdb1a107dee1cdb894163813bb3da604c9c133c1a10bb33302eeafbd55d352e35dcc5d2b3311a10d2c658b6b93d74a02d467849b6fe75251a10fea5308cc1fea69e7246eafe7ca8a3a51a1048efe1ad873b6f025ac0243bdef715f8000000000000000000000000000000000000000000000000000000000000"),
}, nil)
lp.On("LatestLogByEventSigWithConfs", mock.Anything, tp.configSetTopic, dkgAddress, evmtypes.Confirmations(10)).
Return(&logpoller.Log{
Data: hexutil.MustDecode("0x0000000000000000000000000000000000000000000000000000000000a6fca200010576e704b4a519484d6239ef17f1f5b4a82e330b0daf827ed4dc2789971b0000000000000000000000000000000000000000000000000000000000000032000000000000000000000000000000000000000000000000000000000000012000000000000000000000000000000000000000000000000000000000000001e0000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000002a0000000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000002e000000000000000000000000000000000000000000000000000000000000000050000000000000000000000000a8cbea12a06869d3ec432ab9682dab6c761d591000000000000000000000000f4f9db7bb1d16b7cdfb18ec68994c26964f5985300000000000000000000000022fb3f90c539457f00d8484438869135e604a65500000000000000000000000033cbcedccb11c9773ad78e214ba342e979255ab30000000000000000000000006ffaa96256fbc1012325cca88c79f725c33eed80000000000000000000000000000000000000000000000000000000000000000500000000000000000000000074103cf8b436465870b26aa9fa2f62ad62b22e3500000000000000000000000038a6cb196f805cc3041f6645a5a6cec27b64430d00000000000000000000000047d7095cfebf8285bdaa421bc8268d0db87d933c000000000000000000000000a8842be973800ff61d80d2d53fa62c3a685380eb0000000000000000000000003750e31321aee8c024751877070e8d5f704ce98700000000000000000000000000000000000000000000000000000000000000206f3b82406688b8ddb944c6f2e6d808f014c8fa8d568d639c25019568c715fbf000000000000000000000000000000000000000000000000000000000000004220880d88ee16f1080c8afa0251880c8afa025208090dfc04a288090dfc04a30033a05010101010142206c5ca6f74b532222ac927dd3de235d46a943e372c0563393a33b01dcfd3f371c4220855114d25c2ef5e85fffe4f20a365672d8f2dba3b2ec82333f494168a2039c0442200266e835634db00977cbc1caa4db10e1676c1a4c0fcbc6ba7f09300f0d1831824220980cd91f7a73f20f4b0d51d00cd4e00373dc2beafbb299ca3c609757ab98c8304220eb6d36e2af8922085ff510bbe1eb8932a0e3295ca9f047fef25d90e69c52948f4a34313244334b6f6f574463364b7232644542684b59326b336e685057694676544565325331703978544532544b74344d7572716f684a34313244334b6f6f574b436e4367724b637743324a3577576a626e355435335068646b6b6f57454e534a39546537544b7836366f4a4a34313244334b6f6f575239616f675948786b357a38636b624c4c56346e426f7a777a747871664a7050586671336d4a7232796452474a34313244334b6f6f5744695444635565675637776b313133473366476a69616259756f54436f3157726f6f53656741343263556f544a34313244334b6f6f574e64687072586b5472665370354d5071736270467a70364167394a53787358694341434442676454424c656652820300050e416c74424e2d3132382047e282810e86e8cf899ae9a1b43e023bbe8825b103659bb8d6d4e54f6a3cfae7b106069c216a812d7616e47f0bd38fa4863f48fbcda6a38af4c58d2233dfa7cf79620947042d09f923e0a2f7a2270391e8b058d8bdb8f79fe082b7b627f025651c7290382fdff97c3181d15d162c146ce87ff752499d2acc2b26011439a12e29571a6f1e1defb1751c3be4258c493984fd9f0f6b4a26c539870b5f15bfed3d8ffac92499eb62dbd2beb7c1524275a8019022f6ce6a7e86c9e65e3099452a2b96fc2432b127a112970e1adf615f823b2b2180754c2f0ee01f1b389e56df55ca09702cd0401b66ff71779d2dd67222503a85ab921b28c329cc1832800b192d0b0247c0776e1b9653dc00df48daa6364287c84c0382f5165e7269fef06d10bc67c1bba252305d1af0dc7bb0fe92558eb4c5f38c23163dee1cfb34a72020669dbdfe337c16f3307472616e736c61746f722066726f6d20416c74424e2d3132382047e2828120746f20416c74424e2d3132382047e282825880ade2046080c8afa0256880c8afa0257080ade204788094ebdc0382019e010a205034214e0bd4373f38e162cf9fc9133e2f3b71441faa4c3d1ac01c1877f1cd2712200e03e975b996f911abba2b79d2596c2150bc94510963c40a1137a03df6edacdb1a107dee1cdb894163813bb3da604c9c133c1a10bb33302eeafbd55d352e35dcc5d2b3311a10d2c658b6b93d74a02d467849b6fe75251a10fea5308cc1fea69e7246eafe7ca8a3a51a1048efe1ad873b6f025ac0243bdef715f8000000000000000000000000000000000000000000000000000000000000"),
}, nil)
expectedDKGVRF := ocr2vrftypes.OCRCommittee{
Signers: []common.Address{
common.HexToAddress("0x0A8cbEA12a06869d3EC432aB9682DAb6C761D591"),
common.HexToAddress("0xF4f9db7BB1d16b7CDfb18Ec68994c26964F59853"),
common.HexToAddress("0x22fB3F90C539457f00d8484438869135E604a655"),
common.HexToAddress("0x33CbCedccb11c9773AD78e214Ba342E979255ab3"),
common.HexToAddress("0x6ffaA96256fbC1012325cca88C79F725c33eED80"),
},
Transmitters: []common.Address{
common.HexToAddress("0x74103Cf8b436465870b26aa9Fa2F62AD62b22E35"),
common.HexToAddress("0x38A6Cb196f805cC3041F6645a5A6CEC27B64430D"),
common.HexToAddress("0x47d7095CFEBF8285BdAa421Bc8268D0DB87D933C"),
common.HexToAddress("0xa8842BE973800fF61D80d2d53fa62C3a685380eB"),
common.HexToAddress("0x3750e31321aEE8c024751877070E8d5F704cE987"),
},
}
c := &coordinator{
lp: lp,
lggr: logger.TestLogger(t),
topics: tp,
beaconAddress: beaconAddress,
coordinatorAddress: coordinatorAddress,
dkgAddress: dkgAddress,
finalityDepth: 10,
evmClient: evmClient,
}
actualDKG, actualVRF, err := c.DKGVRFCommittees(testutils.Context(t))
assert.NoError(t, err)
assert.ElementsMatch(t, expectedDKGVRF.Signers, actualDKG.Signers)
assert.ElementsMatch(t, expectedDKGVRF.Transmitters, actualDKG.Transmitters)
assert.ElementsMatch(t, expectedDKGVRF.Signers, actualVRF.Signers)
assert.ElementsMatch(t, expectedDKGVRF.Transmitters, actualVRF.Transmitters)
})`
$DIR/core/services/ocr2/plugins/ocr2vrf/coordinator/coordinator_test.go: `.NewLogPoller(t)`
$DIR/core/services/ocr2/plugins/ocr2vrf/coordinator/coordinator_test.go: `.On("LatestLogByEventSigWithConfs", mock.Anything, tp.configSetTopic, beaconAddress, evmtypes.Confirmations(10))`
$DIR/core/services/ocr2/plugins/ocr2vrf/coordinator/coordinator_test.go: `.Confirmations(10)`
$DIR/core/services/ocr2/plugins/ocr2vrf/coordinator/coordinator_test.go: `.
Return(&logpoller.Log{
Data: hexutil.MustDecode("0x0000000000000000000000000000000000000000000000000000000000a6fca200010576e704b4a519484d6239ef17f1f5b4a82e330b0daf827ed4dc2789971b0000000000000000000000000000000000000000000000000000000000000032000000000000000000000000000000000000000000000000000000000000012000000000000000000000000000000000000000000000000000000000000001e0000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000002a0000000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000002e000000000000000000000000000000000000000000000000000000000000000050000000000000000000000000a8cbea12a06869d3ec432ab9682dab6c761d591000000000000000000000000f4f9db7bb1d16b7cdfb18ec68994c26964f5985300000000000000000000000022fb3f90c539457f00d8484438869135e604a65500000000000000000000000033cbcedccb11c9773ad78e214ba342e979255ab30000000000000000000000006ffaa96256fbc1012325cca88c79f725c33eed80000000000000000000000000000000000000000000000000000000000000000500000000000000000000000074103cf8b436465870b26aa9fa2f62ad62b22e3500000000000000000000000038a6cb196f805cc3041f6645a5a6cec27b64430d00000000000000000000000047d7095cfebf8285bdaa421bc8268d0db87d933c000000000000000000000000a8842be973800ff61d80d2d53fa62c3a685380eb0000000000000000000000003750e31321aee8c024751877070e8d5f704ce98700000000000000000000000000000000000000000000000000000000000000206f3b82406688b8ddb944c6f2e6d808f014c8fa8d568d639c25019568c715fbf000000000000000000000000000000000000000000000000000000000000004220880d88ee16f1080c8afa0251880c8afa025208090dfc04a288090dfc04a30033a05010101010142206c5ca6f74b532222ac927dd3de235d46a943e372c0563393a33b01dcfd3f371c4220855114d25c2ef5e85fffe4f20a365672d8f2dba3b2ec82333f494168a2039c0442200266e835634db00977cbc1caa4db10e1676c1a4c0fcbc6ba7f09300f0d1831824220980cd91f7a73f20f4b0d51d00cd4e00373dc2beafbb299ca3c609757ab98c8304220eb6d36e2af8922085ff510bbe1eb8932a0e3295ca9f047fef25d90e69c52948f4a34313244334b6f6f574463364b7232644542684b59326b336e685057694676544565325331703978544532544b74344d7572716f684a34313244334b6f6f574b436e4367724b637743324a3577576a626e355435335068646b6b6f57454e534a39546537544b7836366f4a4a34313244334b6f6f575239616f675948786b357a38636b624c4c56346e426f7a777a747871664a7050586671336d4a7232796452474a34313244334b6f6f5744695444635565675637776b313133473366476a69616259756f54436f3157726f6f53656741343263556f544a34313244334b6f6f574e64687072586b5472665370354d5071736270467a70364167394a53787358694341434442676454424c656652820300050e416c74424e2d3132382047e282810e86e8cf899ae9a1b43e023bbe8825b103659bb8d6d4e54f6a3cfae7b106069c216a812d7616e47f0bd38fa4863f48fbcda6a38af4c58d2233dfa7cf79620947042d09f923e0a2f7a2270391e8b058d8bdb8f79fe082b7b627f025651c7290382fdff97c3181d15d162c146ce87ff752499d2acc2b26011439a12e29571a6f1e1defb1751c3be4258c493984fd9f0f6b4a26c539870b5f15bfed3d8ffac92499eb62dbd2beb7c1524275a8019022f6ce6a7e86c9e65e3099452a2b96fc2432b127a112970e1adf615f823b2b2180754c2f0ee01f1b389e56df55ca09702cd0401b66ff71779d2dd67222503a85ab921b28c329cc1832800b192d0b0247c0776e1b9653dc00df48daa6364287c84c0382f5165e7269fef06d10bc67c1bba252305d1af0dc7bb0fe92558eb4c5f38c23163dee1cfb34a72020669dbdfe337c16f3307472616e736c61746f722066726f6d20416c74424e2d3132382047e2828120746f20416c74424e2d3132382047e282825880ade2046080c8afa0256880c8afa0257080ade204788094ebdc0382019e010a205034214e0bd4373f38e162cf9fc9133e2f3b71441faa4c3d1ac01c1877f1cd2712200e03e975b996f911abba2b79d2596c2150bc94510963c40a1137a03df6edacdb1a107dee1cdb894163813bb3da604c9c133c1a10bb33302eeafbd55d352e35dcc5d2b3311a10d2c658b6b93d74a02d467849b6fe75251a10fea5308cc1fea69e7246eafe7ca8a3a51a1048efe1ad873b6f025ac0243bdef715f8000000000000000000000000000000000000000000000000000000000000"),
}, nil)`
$DIR/core/services/ocr2/plugins/ocr2vrf/coordinator/coordinator_test.go: `.MustDecode("0x0000000000000000000000000000000000000000000000000000000000a6fca200010576e704b4a519484d6239ef17f1f5b4a82e330b0daf827ed4dc2789971b0000000000000000000000000000000000000000000000000000000000000032000000000000000000000000000000000000000000000000000000000000012000000000000000000000000000000000000000000000000000000000000001e0000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000002a0000000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000002e000000000000000000000000000000000000000000000000000000000000000050000000000000000000000000a8cbea12a06869d3ec432ab9682dab6c761d591000000000000000000000000f4f9db7bb1d16b7cdfb18ec68994c26964f5985300000000000000000000000022fb3f90c539457f00d8484438869135e604a65500000000000000000000000033cbcedccb11c9773ad78e214ba342e979255ab30000000000000000000000006ffaa96256fbc1012325cca88c79f725c33eed80000000000000000000000000000000000000000000000000000000000000000500000000000000000000000074103cf8b436465870b26aa9fa2f62ad62b22e3500000000000000000000000038a6cb196f805cc3041f6645a5a6cec27b64430d00000000000000000000000047d7095cfebf8285bdaa421bc8268d0db87d933c000000000000000000000000a8842be973800ff61d80d2d53fa62c3a685380eb0000000000000000000000003750e31321aee8c024751877070e8d5f704ce98700000000000000000000000000000000000000000000000000000000000000206f3b82406688b8ddb944c6f2e6d808f014c8fa8d568d639c25019568c715fbf000000000000000000000000000000000000000000000000000000000000004220880d88ee16f1080c8afa0251880c8afa025208090dfc04a288090dfc04a30033a05010101010142206c5ca6f74b532222ac927dd3de235d46a943e372c0563393a33b01dcfd3f371c4220855114d25c2ef5e85fffe4f20a365672d8f2dba3b2ec82333f494168a2039c0442200266e835634db00977cbc1caa4db10e1676c1a4c0fcbc6ba7f09300f0d1831824220980cd91f7a73f20f4b0d51d00cd4e00373dc2beafbb299ca3c609757ab98c8304220eb6d36e2af8922085ff510bbe1eb8932a0e3295ca9f047fef25d90e69c52948f4a34313244334b6f6f574463364b7232644542684b59326b336e685057694676544565325331703978544532544b74344d7572716f684a34313244334b6f6f574b436e4367724b637743324a3577576a626e355435335068646b6b6f57454e534a39546537544b7836366f4a4a34313244334b6f6f575239616f675948786b357a38636b624c4c56346e426f7a777a747871664a7050586671336d4a7232796452474a34313244334b6f6f5744695444635565675637776b313133473366476a69616259756f54436f3157726f6f53656741343263556f544a34313244334b6f6f574e64687072586b5472665370354d5071736270467a70364167394a53787358694341434442676454424c656652820300050e416c74424e2d3132382047e282810e86e8cf899ae9a1b43e023bbe8825b103659bb8d6d4e54f6a3cfae7b106069c216a812d7616e47f0bd38fa4863f48fbcda6a38af4c58d2233dfa7cf79620947042d09f923e0a2f7a2270391e8b058d8bdb8f79fe082b7b627f025651c7290382fdff97c3181d15d162c146ce87ff752499d2acc2b26011439a12e29571a6f1e1defb1751c3be4258c493984fd9f0f6b4a26c539870b5f15bfed3d8ffac92499eb62dbd2beb7c1524275a8019022f6ce6a7e86c9e65e3099452a2b96fc2432b127a112970e1adf615f823b2b2180754c2f0ee01f1b389e56df55ca09702cd0401b66ff71779d2dd67222503a85ab921b28c329cc1832800b192d0b0247c0776e1b9653dc00df48daa6364287c84c0382f5165e7269fef06d10bc67c1bba252305d1af0dc7bb0fe92558eb4c5f38c23163dee1cfb34a72020669dbdfe337c16f3307472616e736c61746f722066726f6d20416c74424e2d3132382047e2828120746f20416c74424e2d3132382047e282825880ade2046080c8afa0256880c8afa0257080ade204788094ebdc0382019e010a205034214e0bd4373f38e162cf9fc9133e2f3b71441faa4c3d1ac01c1877f1cd2712200e03e975b996f911abba2b79d2596c2150bc94510963c40a1137a03df6edacdb1a107dee1cdb894163813bb3da604c9c133c1a10bb33302eeafbd55d352e35dcc5d2b3311a10d2c658b6b93d74a02d467849b6fe75251a10fea5308cc1fea69e7246eafe7ca8a3a51a1048efe1ad873b6f025ac0243bdef715f8000000000000000000000000000000000000000000000000000000000000")`
$DIR/core/services/ocr2/plugins/ocr2vrf/coordinator/coordinator_test.go: `.On("LatestLogByEventSigWithConfs", mock.Anything, tp.configSetTopic, dkgAddress, evmtypes.Confirmations(10))`
$DIR/core/services/ocr2/plugins/ocr2vrf/coordinator/coordinator_test.go: `.Confirmations(10)`
$DIR/core/services/ocr2/plugins/ocr2vrf/coordinator/coordinator_test.go: `.
Return(&logpoller.Log{
Data: hexutil.MustDecode("0x0000000000000000000000000000000000000000000000000000000000a6fca200010576e704b4a519484d6239ef17f1f5b4a82e330b0daf827ed4dc2789971b0000000000000000000000000000000000000000000000000000000000000032000000000000000000000000000000000000000000000000000000000000012000000000000000000000000000000000000000000000000000000000000001e0000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000002a0000000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000002e000000000000000000000000000000000000000000000000000000000000000050000000000000000000000000a8cbea12a06869d3ec432ab9682dab6c761d591000000000000000000000000f4f9db7bb1d16b7cdfb18ec68994c26964f5985300000000000000000000000022fb3f90c539457f00d8484438869135e604a65500000000000000000000000033cbcedccb11c9773ad78e214ba342e979255ab30000000000000000000000006ffaa96256fbc1012325cca88c79f725c33eed80000000000000000000000000000000000000000000000000000000000000000500000000000000000000000074103cf8b436465870b26aa9fa2f62ad62b22e3500000000000000000000000038a6cb196f805cc3041f6645a5a6cec27b64430d00000000000000000000000047d7095cfebf8285bdaa421bc8268d0db87d933c000000000000000000000000a8842be973800ff61d80d2d53fa62c3a685380eb0000000000000000000000003750e31321aee8c024751877070e8d5f704ce98700000000000000000000000000000000000000000000000000000000000000206f3b82406688b8ddb944c6f2e6d808f014c8fa8d568d639c25019568c715fbf000000000000000000000000000000000000000000000000000000000000004220880d88ee16f1080c8afa0251880c8afa025208090dfc04a288090dfc04a30033a05010101010142206c5ca6f74b532222ac927dd3de235d46a943e372c0563393a33b01dcfd3f371c4220855114d25c2ef5e85fffe4f20a365672d8f2dba3b2ec82333f494168a2039c0442200266e835634db00977cbc1caa4db10e1676c1a4c0fcbc6ba7f09300f0d1831824220980cd91f7a73f20f4b0d51d00cd4e00373dc2beafbb299ca3c609757ab98c8304220eb6d36e2af8922085ff510bbe1eb8932a0e3295ca9f047fef25d90e69c52948f4a34313244334b6f6f574463364b7232644542684b59326b336e685057694676544565325331703978544532544b74344d7572716f684a34313244334b6f6f574b436e4367724b637743324a3577576a626e355435335068646b6b6f57454e534a39546537544b7836366f4a4a34313244334b6f6f575239616f675948786b357a38636b624c4c56346e426f7a777a747871664a7050586671336d4a7232796452474a34313244334b6f6f5744695444635565675637776b313133473366476a69616259756f54436f3157726f6f53656741343263556f544a34313244334b6f6f574e64687072586b5472665370354d5071736270467a70364167394a53787358694341434442676454424c656652820300050e416c74424e2d3132382047e282810e86e8cf899ae9a1b43e023bbe8825b103659bb8d6d4e54f6a3cfae7b106069c216a812d7616e47f0bd38fa4863f48fbcda6a38af4c58d2233dfa7cf79620947042d09f923e0a2f7a2270391e8b058d8bdb8f79fe082b7b627f025651c7290382fdff97c3181d15d162c146ce87ff752499d2acc2b26011439a12e29571a6f1e1defb1751c3be4258c493984fd9f0f6b4a26c539870b5f15bfed3d8ffac92499eb62dbd2beb7c1524275a8019022f6ce6a7e86c9e65e3099452a2b96fc2432b127a112970e1adf615f823b2b2180754c2f0ee01f1b389e56df55ca09702cd0401b66ff71779d2dd67222503a85ab921b28c329cc1832800b192d0b0247c0776e1b9653dc00df48daa6364287c84c0382f5165e7269fef06d10bc67c1bba252305d1af0dc7bb0fe92558eb4c5f38c23163dee1cfb34a72020669dbdfe337c16f3307472616e736c61746f722066726f6d20416c74424e2d3132382047e2828120746f20416c74424e2d3132382047e282825880ade2046080c8afa0256880c8afa0257080ade204788094ebdc0382019e010a205034214e0bd4373f38e162cf9fc9133e2f3b71441faa4c3d1ac01c1877f1cd2712200e03e975b996f911abba2b79d2596c2150bc94510963c40a1137a03df6edacdb1a107dee1cdb894163813bb3da604c9c133c1a10bb33302eeafbd55d352e35dcc5d2b3311a10d2c658b6b93d74a02d467849b6fe75251a10fea5308cc1fea69e7246eafe7ca8a3a51a1048efe1ad873b6f025ac0243bdef715f8000000000000000000000000000000000000000000000000000000000000"),
}, nil)`
$DIR/core/services/ocr2/plugins/ocr2vrf/coordinator/coordinator_test.go: `.MustDecode("0x0000000000000000000000000000000000000000000000000000000000a6fca200010576e704b4a519484d6239ef17f1f5b4a82e330b0daf827ed4dc2789971b0000000000000000000000000000000000000000000000000000000000000032000000000000000000000000000000000000000000000000000000000000012000000000000000000000000000000000000000000000000000000000000001e0000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000002a0000000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000002e000000000000000000000000000000000000000000000000000000000000000050000000000000000000000000a8cbea12a06869d3ec432ab9682dab6c761d591000000000000000000000000f4f9db7bb1d16b7cdfb18ec68994c26964f5985300000000000000000000000022fb3f90c539457f00d8484438869135e604a65500000000000000000000000033cbcedccb11c9773ad78e214ba342e979255ab30000000000000000000000006ffaa96256fbc1012325cca88c79f725c33eed80000000000000000000000000000000000000000000000000000000000000000500000000000000000000000074103cf8b436465870b26aa9fa2f62ad62b22e3500000000000000000000000038a6cb196f805cc3041f6645a5a6cec27b64430d00000000000000000000000047d7095cfebf8285bdaa421bc8268d0db87d933c000000000000000000000000a8842be973800ff61d80d2d53fa62c3a685380eb0000000000000000000000003750e31321aee8c024751877070e8d5f704ce98700000000000000000000000000000000000000000000000000000000000000206f3b82406688b8ddb944c6f2e6d808f014c8fa8d568d639c25019568c715fbf000000000000000000000000000000000000000000000000000000000000004220880d88ee16f1080c8afa0251880c8afa025208090dfc04a288090dfc04a30033a05010101010142206c5ca6f74b532222ac927dd3de235d46a943e372c0563393a33b01dcfd3f371c4220855114d25c2ef5e85fffe4f20a365672d8f2dba3b2ec82333f494168a2039c0442200266e835634db00977cbc1caa4db10e1676c1a4c0fcbc6ba7f09300f0d1831824220980cd91f7a73f20f4b0d51d00cd4e00373dc2beafbb299ca3c609757ab98c8304220eb6d36e2af8922085ff510bbe1eb8932a0e3295ca9f047fef25d90e69c52948f4a34313244334b6f6f574463364b7232644542684b59326b336e685057694676544565325331703978544532544b74344d7572716f684a34313244334b6f6f574b436e4367724b637743324a3577576a626e355435335068646b6b6f57454e534a39546537544b7836366f4a4a34313244334b6f6f575239616f675948786b357a38636b624c4c56346e426f7a777a747871664a7050586671336d4a7232796452474a34313244334b6f6f5744695444635565675637776b313133473366476a69616259756f54436f3157726f6f53656741343263556f544a34313244334b6f6f574e64687072586b5472665370354d5071736270467a70364167394a53787358694341434442676454424c656652820300050e416c74424e2d3132382047e282810e86e8cf899ae9a1b43e023bbe8825b103659bb8d6d4e54f6a3cfae7b106069c216a812d7616e47f0bd38fa4863f48fbcda6a38af4c58d2233dfa7cf79620947042d09f923e0a2f7a2270391e8b058d8bdb8f79fe082b7b627f025651c7290382fdff97c3181d15d162c146ce87ff752499d2acc2b26011439a12e29571a6f1e1defb1751c3be4258c493984fd9f0f6b4a26c539870b5f15bfed3d8ffac92499eb62dbd2beb7c1524275a8019022f6ce6a7e86c9e65e3099452a2b96fc2432b127a112970e1adf615f823b2b2180754c2f0ee01f1b389e56df55ca09702cd0401b66ff71779d2dd67222503a85ab921b28c329cc1832800b192d0b0247c0776e1b9653dc00df48daa6364287c84c0382f5165e7269fef06d10bc67c1bba252305d1af0dc7bb0fe92558eb4c5f38c23163dee1cfb34a72020669dbdfe337c16f3307472616e736c61746f722066726f6d20416c74424e2d3132382047e2828120746f20416c74424e2d3132382047e282825880ade2046080c8afa0256880c8afa0257080ade204788094ebdc0382019e010a205034214e0bd4373f38e162cf9fc9133e2f3b71441faa4c3d1ac01c1877f1cd2712200e03e975b996f911abba2b79d2596c2150bc94510963c40a1137a03df6edacdb1a107dee1cdb894163813bb3da604c9c133c1a10bb33302eeafbd55d352e35dcc5d2b3311a10d2c658b6b93d74a02d467849b6fe75251a10fea5308cc1fea69e7246eafe7ca8a3a51a1048efe1ad873b6f025ac0243bdef715f8000000000000000000000000000000000000000000000000000000000000")`
$DIR/core/services/ocr2/plugins/ocr2vrf/coordinator/coordinator_test.go: `.HexToAddress("0x0A8cbEA12a06869d3EC432aB9682DAb6C761D591")`
$DIR/core/services/ocr2/plugins/ocr2vrf/coordinator/coordinator_test.go: `.HexToAddress("0xF4f9db7BB1d16b7CDfb18Ec68994c26964F59853")`
$DIR/core/services/ocr2/plugins/ocr2vrf/coordinator/coordinator_test.go: `.HexToAddress("0x22fB3F90C539457f00d8484438869135E604a655")`
$DIR/core/services/ocr2/plugins/ocr2vrf/coordinator/coordinator_test.go: `.HexToAddress("0x33CbCedccb11c9773AD78e214Ba342E979255ab3")`
$DIR/core/services/ocr2/plugins/ocr2vrf/coordinator/coordinator_test.go: `.HexToAddress("0x6ffaA96256fbC1012325cca88C79F725c33eED80")`
$DIR/core/services/ocr2/plugins/ocr2vrf/coordinator/coordinator_test.go: `.HexToAddress("0x74103Cf8b436465870b26aa9Fa2F62AD62b22E35")`
$DIR/core/services/ocr2/plugins/ocr2vrf/coordinator/coordinator_test.go: `.HexToAddress("0x38A6Cb196f805cC3041F6645a5A6CEC27B64430D")`
$DIR/core/services/ocr2/plugins/ocr2vrf/coordinator/coordinator_test.go: `.HexToAddress("0x47d7095CFEBF8285BdAa421Bc8268D0DB87D933C")`
$DIR/core/services/ocr2/plugins/ocr2vrf/coordinator/coordinator_test.go: `.HexToAddress("0xa8842BE973800fF61D80d2d53fa62C3a685380eB")`
$DIR/core/services/ocr2/plugins/ocr2vrf/coordinator/coordinator_test.go: `.HexToAddress("0x3750e31321aEE8c024751877070E8d5F704cE987")`
$DIR/core/services/ocr2/plugins/ocr2vrf/coordinator/coordinator_test.go: `.TestLogger(t)`
$DIR/core/services/ocr2/plugins/ocr2vrf/coordinator/coordinator_test.go: `.DKGVRFCommittees(testutils.Context(t))`
$DIR/core/services/ocr2/plugins/ocr2vrf/coordinator/coordinator_test.go: `.Context(t)`
$DIR/core/services/ocr2/plugins/ocr2vrf/coordinator/coordinator_test.go: `.Run("vrf log poll fails", func(t *testing.T) {
lp := lp_mocks.NewLogPoller(t)
tp := newTopics()
beaconAddress := newAddress(t)
lp.On("LatestLogByEventSigWithConfs", mock.Anything, tp.configSetTopic, beaconAddress, evmtypes.Confirmations(10)).
Return(nil, errors.New("rpc error"))
c := &coordinator{
lp: lp,
lggr: logger.TestLogger(t),
topics: tp,
beaconAddress: beaconAddress,
finalityDepth: 10,
evmClient: evmClient,
}
_, _, err := c.DKGVRFCommittees(testutils.Context(t))
assert.Error(t, err)
})`
$DIR/core/services/ocr2/plugins/ocr2vrf/coordinator/coordinator_test.go: `.NewLogPoller(t)`
$DIR/core/services/ocr2/plugins/ocr2vrf/coordinator/coordinator_test.go: `.On("LatestLogByEventSigWithConfs", mock.Anything, tp.configSetTopic, beaconAddress, evmtypes.Confirmations(10))`
$DIR/core/services/ocr2/plugins/ocr2vrf/coordinator/coordinator_test.go: `.Confirmations(10)`
$DIR/core/services/ocr2/plugins/ocr2vrf/coordinator/coordinator_test.go: `.
Return(nil, errors.New("rpc error"))`
$DIR/core/services/ocr2/plugins/ocr2vrf/coordinator/coordinator_test.go: `.New("rpc error")`
$DIR/core/services/ocr2/plugins/ocr2vrf/coordinator/coordinator_test.go: `.TestLogger(t)`
$DIR/core/services/ocr2/plugins/ocr2vrf/coordinator/coordinator_test.go: `.DKGVRFCommittees(testutils.Context(t))`
$DIR/core/services/ocr2/plugins/ocr2vrf/coordinator/coordinator_test.go: `.Context(t)`
$DIR/core/services/ocr2/plugins/ocr2vrf/coordinator/coordinator_test.go: `.NewLogPoller(t)`
$DIR/core/services/ocr2/plugins/ocr2vrf/coordinator/coordinator_test.go: `.On("LatestLogByEventSigWithConfs", mock.Anything, tp.configSetTopic, beaconAddress, evmtypes.Confirmations(10))`
$DIR/core/services/ocr2/plugins/ocr2vrf/coordinator/coordinator_test.go: `.Confirmations(10)`
$DIR/core/services/ocr2/plugins/ocr2vrf/coordinator/coordinator_test.go: `.
Return(&logpoller.Log{
Data: hexutil.MustDecode("0x0000000000000000000000000000000000000000000000000000000000a6fca200010576e704b4a519484d6239ef17f1f5b4a82e330b0daf827ed4dc2789971b0000000000000000000000000000000000000000000000000000000000000032000000000000000000000000000000000000000000000000000000000000012000000000000000000000000000000000000000000000000000000000000001e0000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000002a0000000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000002e000000000000000000000000000000000000000000000000000000000000000050000000000000000000000000a8cbea12a06869d3ec432ab9682dab6c761d591000000000000000000000000f4f9db7bb1d16b7cdfb18ec68994c26964f5985300000000000000000000000022fb3f90c539457f00d8484438869135e604a65500000000000000000000000033cbcedccb11c9773ad78e214ba342e979255ab30000000000000000000000006ffaa96256fbc1012325cca88c79f725c33eed80000000000000000000000000000000000000000000000000000000000000000500000000000000000000000074103cf8b436465870b26aa9fa2f62ad62b22e3500000000000000000000000038a6cb196f805cc3041f6645a5a6cec27b64430d00000000000000000000000047d7095cfebf8285bdaa421bc8268d0db87d933c000000000000000000000000a8842be973800ff61d80d2d53fa62c3a685380eb0000000000000000000000003750e31321aee8c024751877070e8d5f704ce98700000000000000000000000000000000000000000000000000000000000000206f3b82406688b8ddb944c6f2e6d808f014c8fa8d568d639c25019568c715fbf000000000000000000000000000000000000000000000000000000000000004220880d88ee16f1080c8afa0251880c8afa025208090dfc04a288090dfc04a30033a05010101010142206c5ca6f74b532222ac927dd3de235d46a943e372c0563393a33b01dcfd3f371c4220855114d25c2ef5e85fffe4f20a365672d8f2dba3b2ec82333f494168a2039c0442200266e835634db00977cbc1caa4db10e1676c1a4c0fcbc6ba7f09300f0d1831824220980cd91f7a73f20f4b0d51d00cd4e00373dc2beafbb299ca3c609757ab98c8304220eb6d36e2af8922085ff510bbe1eb8932a0e3295ca9f047fef25d90e69c52948f4a34313244334b6f6f574463364b7232644542684b59326b336e685057694676544565325331703978544532544b74344d7572716f684a34313244334b6f6f574b436e4367724b637743324a3577576a626e355435335068646b6b6f57454e534a39546537544b7836366f4a4a34313244334b6f6f575239616f675948786b357a38636b624c4c56346e426f7a777a747871664a7050586671336d4a7232796452474a34313244334b6f6f5744695444635565675637776b313133473366476a69616259756f54436f3157726f6f53656741343263556f544a34313244334b6f6f574e64687072586b5472665370354d5071736270467a70364167394a53787358694341434442676454424c656652820300050e416c74424e2d3132382047e282810e86e8cf899ae9a1b43e023bbe8825b103659bb8d6d4e54f6a3cfae7b106069c216a812d7616e47f0bd38fa4863f48fbcda6a38af4c58d2233dfa7cf79620947042d09f923e0a2f7a2270391e8b058d8bdb8f79fe082b7b627f025651c7290382fdff97c3181d15d162c146ce87ff752499d2acc2b26011439a12e29571a6f1e1defb1751c3be4258c493984fd9f0f6b4a26c539870b5f15bfed3d8ffac92499eb62dbd2beb7c1524275a8019022f6ce6a7e86c9e65e3099452a2b96fc2432b127a112970e1adf615f823b2b2180754c2f0ee01f1b389e56df55ca09702cd0401b66ff71779d2dd67222503a85ab921b28c329cc1832800b192d0b0247c0776e1b9653dc00df48daa6364287c84c0382f5165e7269fef06d10bc67c1bba252305d1af0dc7bb0fe92558eb4c5f38c23163dee1cfb34a72020669dbdfe337c16f3307472616e736c61746f722066726f6d20416c74424e2d3132382047e2828120746f20416c74424e2d3132382047e282825880ade2046080c8afa0256880c8afa0257080ade204788094ebdc0382019e010a205034214e0bd4373f38e162cf9fc9133e2f3b71441faa4c3d1ac01c1877f1cd2712200e03e975b996f911abba2b79d2596c2150bc94510963c40a1137a03df6edacdb1a107dee1cdb894163813bb3da604c9c133c1a10bb33302eeafbd55d352e35dcc5d2b3311a10d2c658b6b93d74a02d467849b6fe75251a10fea5308cc1fea69e7246eafe7ca8a3a51a1048efe1ad873b6f025ac0243bdef715f8000000000000000000000000000000000000000000000000000000000000"),
}, nil)`
$DIR/core/services/ocr2/plugins/ocr2vrf/coordinator/coordinator_test.go: `.MustDecode("0x0000000000000000000000000000000000000000000000000000000000a6fca200010576e704b4a519484d6239ef17f1f5b4a82e330b0daf827ed4dc2789971b0000000000000000000000000000000000000000000000000000000000000032000000000000000000000000000000000000000000000000000000000000012000000000000000000000000000000000000000000000000000000000000001e0000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000002a0000000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000002e000000000000000000000000000000000000000000000000000000000000000050000000000000000000000000a8cbea12a06869d3ec432ab9682dab6c761d591000000000000000000000000f4f9db7bb1d16b7cdfb18ec68994c26964f5985300000000000000000000000022fb3f90c539457f00d8484438869135e604a65500000000000000000000000033cbcedccb11c9773ad78e214ba342e979255ab30000000000000000000000006ffaa96256fbc1012325cca88c79f725c33eed80000000000000000000000000000000000000000000000000000000000000000500000000000000000000000074103cf8b436465870b26aa9fa2f62ad62b22e3500000000000000000000000038a6cb196f805cc3041f6645a5a6cec27b64430d00000000000000000000000047d7095cfebf8285bdaa421bc8268d0db87d933c000000000000000000000000a8842be973800ff61d80d2d53fa62c3a685380eb0000000000000000000000003750e31321aee8c024751877070e8d5f704ce98700000000000000000000000000000000000000000000000000000000000000206f3b82406688b8ddb944c6f2e6d808f014c8fa8d568d639c25019568c715fbf000000000000000000000000000000000000000000000000000000000000004220880d88ee16f1080c8afa0251880c8afa025208090dfc04a288090dfc04a30033a05010101010142206c5ca6f74b532222ac927dd3de235d46a943e372c0563393a33b01dcfd3f371c4220855114d25c2ef5e85fffe4f20a365672d8f2dba3b2ec82333f494168a2039c0442200266e835634db00977cbc1caa4db10e1676c1a4c0fcbc6ba7f09300f0d1831824220980cd91f7a73f20f4b0d51d00cd4e00373dc2beafbb299ca3c609757ab98c8304220eb6d36e2af8922085ff510bbe1eb8932a0e3295ca9f047fef25d90e69c52948f4a34313244334b6f6f574463364b7232644542684b59326b336e685057694676544565325331703978544532544b74344d7572716f684a34313244334b6f6f574b436e4367724b637743324a3577576a626e355435335068646b6b6f57454e534a39546537544b7836366f4a4a34313244334b6f6f575239616f675948786b357a38636b624c4c56346e426f7a777a747871664a7050586671336d4a7232796452474a34313244334b6f6f5744695444635565675637776b313133473366476a69616259756f54436f3157726f6f53656741343263556f544a34313244334b6f6f574e64687072586b5472665370354d5071736270467a70364167394a53787358694341434442676454424c656652820300050e416c74424e2d3132382047e282810e86e8cf899ae9a1b43e023bbe8825b103659bb8d6d4e54f6a3cfae7b106069c216a812d7616e47f0bd38fa4863f48fbcda6a38af4c58d2233dfa7cf79620947042d09f923e0a2f7a2270391e8b058d8bdb8f79fe082b7b627f025651c7290382fdff97c3181d15d162c146ce87ff752499d2acc2b26011439a12e29571a6f1e1defb1751c3be4258c493984fd9f0f6b4a26c539870b5f15bfed3d8ffac92499eb62dbd2beb7c1524275a8019022f6ce6a7e86c9e65e3099452a2b96fc2432b127a112970e1adf615f823b2b2180754c2f0ee01f1b389e56df55ca09702cd0401b66ff71779d2dd67222503a85ab921b28c329cc1832800b192d0b0247c0776e1b9653dc00df48daa6364287c84c0382f5165e7269fef06d10bc67c1bba252305d1af0dc7bb0fe92558eb4c5f38c23163dee1cfb34a72020669dbdfe337c16f3307472616e736c61746f722066726f6d20416c74424e2d3132382047e2828120746f20416c74424e2d3132382047e282825880ade2046080c8afa0256880c8afa0257080ade204788094ebdc0382019e010a205034214e0bd4373f38e162cf9fc9133e2f3b71441faa4c3d1ac01c1877f1cd2712200e03e975b996f911abba2b79d2596c2150bc94510963c40a1137a03df6edacdb1a107dee1cdb894163813bb3da604c9c133c1a10bb33302eeafbd55d352e35dcc5d2b3311a10d2c658b6b93d74a02d467849b6fe75251a10fea5308cc1fea69e7246eafe7ca8a3a51a1048efe1ad873b6f025ac0243bdef715f8000000000000000000000000000000000000000000000000000000000000")`
$DIR/core/services/ocr2/plugins/ocr2vrf/coordinator/coordinator_test.go: `.On("LatestLogByEventSigWithConfs", mock.Anything, tp.configSetTopic, dkgAddress, evmtypes.Confirmations(10))`
$DIR/core/services/ocr2/plugins/ocr2vrf/coordinator/coordinator_test.go: `.Confirmations(10)`
$DIR/core/services/ocr2/plugins/ocr2vrf/coordinator/coordinator_test.go: `.
Return(nil, errors.New("rpc error"))`
$DIR/core/services/ocr2/plugins/ocr2vrf/coordinator/coordinator_test.go: `.New("rpc error")`
$DIR/core/services/ocr2/plugins/ocr2vrf/coordinator/coordinator_test.go: `.TestLogger(t)`
$DIR/core/services/ocr2/plugins/ocr2vrf/coordinator/coordinator_test.go: `.DKGVRFCommittees(testutils.Context(t))`
$DIR/core/services/ocr2/plugins/ocr2vrf/coordinator/coordinator_test.go: `.Context(t)`
$DIR/core/services/ocr2/plugins/ocr2vrf/coordinator/coordinator_test.go: `.Run("valid output", func(t *testing.T) {
h := crypto.Keccak256Hash([]byte("hello world"))
var expected [32]byte
copy(expected[:], h.Bytes())
onchainRouter := mocks.NewVRFBeaconCoordinator(t)
onchainRouter.
On("SProvingKeyHash", mock.Anything).
Return(expected, nil)
c := &coordinator{
onchainRouter: onchainRouter,
}
provingKeyHash, err := c.ProvingKeyHash(testutils.Context(t))
assert.NoError(t, err)
assert.ElementsMatch(t, expected[:], provingKeyHash[:])
})`
$DIR/core/services/ocr2/plugins/ocr2vrf/coordinator/coordinator_test.go: `.Keccak256Hash([]byte("hello world"))`
$DIR/core/services/ocr2/plugins/ocr2vrf/coordinator/coordinator_test.go: `.Bytes()`
$DIR/core/services/ocr2/plugins/ocr2vrf/coordinator/coordinator_test.go: `.NewVRFBeaconCoordinator(t)`
$DIR/core/services/ocr2/plugins/ocr2vrf/coordinator/coordinator_test.go: `.
On("SProvingKeyHash", mock.Anything)`
$DIR/core/services/ocr2/plugins/ocr2vrf/coordinator/coordinator_test.go: `.
Return(expected, nil)`
$DIR/core/services/ocr2/plugins/ocr2vrf/coordinator/coordinator_test.go: `.ProvingKeyHash(testutils.Context(t))`
$DIR/core/services/ocr2/plugins/ocr2vrf/coordinator/coordinator_test.go: `.Context(t)`
$DIR/core/services/ocr2/plugins/ocr2vrf/coordinator/coordinator_test.go: `.NewVRFBeaconCoordinator(t)`
$DIR/core/services/ocr2/plugins/ocr2vrf/coordinator/coordinator_test.go: `.
On("SProvingKeyHash", mock.Anything)`
$DIR/core/services/ocr2/plugins/ocr2vrf/coordinator/coordinator_test.go: `.
Return([32]byte{}, errors.New("rpc error"))`
$DIR/core/services/ocr2/plugins/ocr2vrf/coordinator/coordinator_test.go: `.New("rpc error")`
$DIR/core/services/ocr2/plugins/ocr2vrf/coordinator/coordinator_test.go: `.ProvingKeyHash(testutils.Context(t))`
$DIR/core/services/ocr2/plugins/ocr2vrf/coordinator/coordinator_test.go: `.Context(t)`
$DIR/core/services/ocr2/plugins/ocr2vrf/coordinator/coordinator_test.go: `.TestLogger(t)`
$DIR/core/services/ocr2/plugins/ocr2vrf/coordinator/coordinator_test.go: `.NewInt(1)`
$DIR/core/services/ocr2/plugins/ocr2vrf/coordinator/coordinator_test.go: `.NewInt(2)`
$DIR/core/services/ocr2/plugins/ocr2vrf/coordinator/coordinator_test.go: `.NewClient(t)`
$DIR/core/services/ocr2/plugins/ocr2vrf/coordinator/coordinator_test.go: `.On("ConfiguredChainID")`
$DIR/core/services/ocr2/plugins/ocr2vrf/coordinator/coordinator_test.go: `.Return(big.NewInt(1))`
$DIR/core/services/ocr2/plugins/ocr2vrf/coordinator/coordinator_test.go: `.NewInt(1)`
$DIR/core/services/ocr2/plugins/ocr2vrf/coordinator/coordinator_test.go: `.Run("happy path, beacon requests", func(t *testing.T) {
beaconAddress := newAddress(t)
coordinatorAddress := newAddress(t)
latestHeadNumber := uint64(200)
onchainRouter, err := newRouter(lggr, beaconAddress, coordinatorAddress, evmClient)
require.NoError(t, err)
tp := newTopics()
lookbackBlocks := uint64(5)
lp := getLogPoller(t, []uint64{195}, latestHeadNumber, true, true, lookbackBlocks)
lp.On(
"LogsWithSigs",
mock.Anything,
int64(latestHeadNumber-lookbackBlocks),
int64(latestHeadNumber),
[]common.Hash{
tp.randomnessRequestedTopic,
tp.randomnessFulfillmentRequestedTopic,
tp.randomWordsFulfilledTopic,
tp.outputsServedTopic,
},
coordinatorAddress,
).Return([]logpoller.Log{
newRandomnessRequestedLog(t, 3, 195, 191, 0, coordinatorAddress),
newRandomnessRequestedLog(t, 3, 195, 192, 1, coordinatorAddress),
newRandomnessRequestedLog(t, 3, 195, 193, 2, coordinatorAddress),
}, nil).Once()
c := &coordinator{
onchainRouter: onchainRouter,
beaconAddress: beaconAddress,
coordinatorAddress: coordinatorAddress,
lp: lp,
lggr: logger.TestLogger(t),
topics: tp,
evmClient: evmClient,
toBeTransmittedBlocks: NewBlockCache[blockInReport](time.Duration(int64(lookbackBlocks) * int64(time.Second))),
toBeTransmittedCallbacks: NewBlockCache[callbackInReport](time.Duration(int64(lookbackBlocks) * int64(time.Second))),
coordinatorConfig: newCoordinatorConfig(lookbackBlocks),
blockhashLookback: lookbackBlocks,
}
blocks, callbacks, recentHeightStart, recentBlocks, err := c.ReportBlocks(
testutils.Context(t),
0, // slotInterval: unused
map[uint32]struct{}{3: {}},
time.Duration(0),
100, // maxBlocks: unused
100, // maxCallbacks: unused
)
assert.NoError(t, err)
assert.Len(t, blocks, 1)
assert.Len(t, callbacks, 0)
assert.Equal(t, latestHeadNumber-lookbackBlocks+1, recentHeightStart)
assert.Len(t, recentBlocks, int(lookbackBlocks))
})`
$DIR/core/services/ocr2/plugins/ocr2vrf/coordinator/coordinator_test.go: `.On(
"LogsWithSigs",
mock.Anything,
int64(latestHeadNumber-lookbackBlocks),
int64(latestHeadNumber),
[]common.Hash{
tp.randomnessRequestedTopic,
tp.randomnessFulfillmentRequestedTopic,
tp.randomWordsFulfilledTopic,
tp.outputsServedTopic,
},
coordinatorAddress,
)`
$DIR/core/services/ocr2/plugins/ocr2vrf/coordinator/coordinator_test.go: `.Return([]logpoller.Log{
newRandomnessRequestedLog(t, 3, 195, 191, 0, coordinatorAddress),
newRandomnessRequestedLog(t, 3, 195, 192, 1, coordinatorAddress),
newRandomnessRequestedLog(t, 3, 195, 193, 2, coordinatorAddress),
}, nil)`
$DIR/core/services/ocr2/plugins/ocr2vrf/coordinator/coordinator_test.go: `.Once()`
$DIR/core/services/ocr2/plugins/ocr2vrf/coordinator/coordinator_test.go: `.TestLogger(t)`
$DIR/core/services/ocr2/plugins/ocr2vrf/coordinator/coordinator_test.go: `.Duration(int64(lookbackBlocks) * int64(time.Second))`
$DIR/core/services/ocr2/plugins/ocr2vrf/coordinator/coordinator_test.go: `.Duration(int64(lookbackBlocks) * int64(time.Second))`
$DIR/core/services/ocr2/plugins/ocr2vrf/coordinator/coordinator_test.go: `.ReportBlocks(
testutils.Context(t),
0, // slotInterval: unused
map[uint32]struct{}{3: {}},
time.Duration(0),
100, // maxBlocks: unused
100, // maxCallbacks: unused
)`
$DIR/core/services/ocr2/plugins/ocr2vrf/coordinator/coordinator_test.go: `.Context(t)`
$DIR/core/services/ocr2/plugins/ocr2vrf/coordinator/coordinator_test.go: `.Duration(0)`
$DIR/core/services/ocr2/plugins/ocr2vrf/coordinator/coordinator_test.go: `.Run("happy path, callback requests", func(t *testing.T) {
beaconAddress := newAddress(t)
coordinatorAddress := newAddress(t)
latestHeadNumber := uint64(200)
onchainRouter, err := newRouter(lggr, beaconAddress, coordinatorAddress, evmClient)
require.NoError(t, err)
tp := newTopics()
lookbackBlocks := uint64(5)
lp := getLogPoller(t, []uint64{195}, latestHeadNumber, true, true, lookbackBlocks)
lp.On(
"LogsWithSigs",
mock.Anything,
int64(latestHeadNumber-lookbackBlocks),
int64(latestHeadNumber),
[]common.Hash{
tp.randomnessRequestedTopic,
tp.randomnessFulfillmentRequestedTopic,
tp.randomWordsFulfilledTopic,
tp.outputsServedTopic,
},
coordinatorAddress,
).Return([]logpoller.Log{
newRandomnessFulfillmentRequestedLog(t, 3, 195, 191, 1, 1000, coordinatorAddress),
newRandomnessFulfillmentRequestedLog(t, 3, 195, 192, 2, 1000, coordinatorAddress),
newRandomnessFulfillmentRequestedLog(t, 3, 195, 193, 3, 1000, coordinatorAddress),
}, nil).Once()
c := &coordinator{
onchainRouter: onchainRouter,
beaconAddress: beaconAddress,
coordinatorAddress: coordinatorAddress,
lp: lp,
lggr: logger.TestLogger(t),
topics: tp,
evmClient: evmClient,
toBeTransmittedBlocks: NewBlockCache[blockInReport](time.Duration(int64(lookbackBlocks) * int64(time.Second))),
toBeTransmittedCallbacks: NewBlockCache[callbackInReport](time.Duration(int64(lookbackBlocks) * int64(time.Second))),
coordinatorConfig: newCoordinatorConfig(lookbackBlocks),
blockhashLookback: lookbackBlocks,
}
blocks, callbacks, recentHeightStart, recentBlocks, err := c.ReportBlocks(
testutils.Context(t),
0, // slotInterval: unused
map[uint32]struct{}{3: {}},
time.Duration(0),
100, // maxBlocks: unused
100, // maxCallbacks: unused
)
assert.NoError(t, err)
assert.Len(t, blocks, 1)
for _, b := range blocks {
assert.False(t, b.ShouldStore)
}
assert.Len(t, callbacks, 3)
assert.Equal(t, latestHeadNumber-lookbackBlocks+1, recentHeightStart)
assert.Len(t, recentBlocks, int(lookbackBlocks))
})`
$DIR/core/services/ocr2/plugins/ocr2vrf/coordinator/coordinator_test.go: `.On(
"LogsWithSigs",
mock.Anything,
int64(latestHeadNumber-lookbackBlocks),
int64(latestHeadNumber),
[]common.Hash{
tp.randomnessRequestedTopic,
tp.randomnessFulfillmentRequestedTopic,
tp.randomWordsFulfilledTopic,
tp.outputsServedTopic,
},
coordinatorAddress,
)`
$DIR/core/services/ocr2/plugins/ocr2vrf/coordinator/coordinator_test.go: `.Return([]logpoller.Log{
newRandomnessFulfillmentRequestedLog(t, 3, 195, 191, 1, 1000, coordinatorAddress),
newRandomnessFulfillmentRequestedLog(t, 3, 195, 192, 2, 1000, coordinatorAddress),
newRandomnessFulfillmentRequestedLog(t, 3, 195, 193, 3, 1000, coordinatorAddress),
}, nil)`
$DIR/core/services/ocr2/plugins/ocr2vrf/coordinator/coordinator_test.go: `.Once()`
$DIR/core/services/ocr2/plugins/ocr2vrf/coordinator/coordinator_test.go: `.TestLogger(t)`
$DIR/core/services/ocr2/plugins/ocr2vrf/coordinator/coordinator_test.go: `.Duration(int64(lookbackBlocks) * int64(time.Second))`
$DIR/core/services/ocr2/plugins/ocr2vrf/coordinator/coordinator_test.go: `.Duration(int64(lookbackBlocks) * int64(time.Second))`
$DIR/core/services/ocr2/plugins/ocr2vrf/coordinator/coordinator_test.go: `.ReportBlocks(
testutils.Context(t),
0, // slotInterval: unused
map[uint32]struct{}{3: {}},
time.Duration(0),
100, // maxBlocks: unused
100, // maxCallbacks: unused
)`
$DIR/core/services/ocr2/plugins/ocr2vrf/coordinator/coordinator_test.go: `.Context(t)`
$DIR/core/services/ocr2/plugins/ocr2vrf/coordinator/coordinator_test.go: `.Duration(0)`
$DIR/core/services/ocr2/plugins/ocr2vrf/coordinator/coordinator_test.go: `.Run("happy path, beacon requests, beacon fulfillments", func(t *testing.T) {
beaconAddress := newAddress(t)
coordinatorAddress := newAddress(t)
latestHeadNumber := uint64(200)
onchainRouter, err := newRouter(lggr, beaconAddress, coordinatorAddress, evmClient)
require.NoError(t, err)
tp := newTopics()
lookbackBlocks := uint64(5)
lp := getLogPoller(t, []uint64{195}, latestHeadNumber, true, true, lookbackBlocks)
lp.On(
"LogsWithSigs",
mock.Anything,
int64(latestHeadNumber-lookbackBlocks),
int64(latestHeadNumber),
[]common.Hash{
tp.randomnessRequestedTopic,
tp.randomnessFulfillmentRequestedTopic,
tp.randomWordsFulfilledTopic,
tp.outputsServedTopic,
},
coordinatorAddress,
).Return([]logpoller.Log{
newRandomnessRequestedLog(t, 3, 195, 191, 0, coordinatorAddress),
newRandomnessRequestedLog(t, 3, 195, 192, 1, coordinatorAddress),
newRandomnessRequestedLog(t, 3, 195, 193, 2, coordinatorAddress),
newOutputsServedLog(t, []vrf_coordinator.VRFBeaconTypesOutputServed{
{
Height: 195,
ConfirmationDelay: big.NewInt(3),
ProofG1X: proofG1X,
ProofG1Y: proofG1Y,
},
}, coordinatorAddress),
}, nil).Once()
c := &coordinator{
onchainRouter: onchainRouter,
beaconAddress: beaconAddress,
coordinatorAddress: coordinatorAddress,
lp: lp,
lggr: logger.TestLogger(t),
topics: tp,
evmClient: evmClient,
toBeTransmittedBlocks: NewBlockCache[blockInReport](time.Duration(int64(lookbackBlocks) * int64(time.Second))),
toBeTransmittedCallbacks: NewBlockCache[callbackInReport](time.Duration(int64(lookbackBlocks) * int64(time.Second))),
coordinatorConfig: newCoordinatorConfig(lookbackBlocks),
blockhashLookback: lookbackBlocks,
}
blocks, callbacks, recentHeightStart, recentBlocks, err := c.ReportBlocks(
testutils.Context(t),
0, // slotInterval: unused
map[uint32]struct{}{3: {}},
time.Duration(0),
100, // maxBlocks: unused
100, // maxCallbacks: unused
)
assert.NoError(t, err)
assert.Len(t, blocks, 0)
assert.Len(t, callbacks, 0)
assert.Equal(t, latestHeadNumber-lookbackBlocks+1, recentHeightStart)
assert.Len(t, recentBlocks, int(lookbackBlocks))
})`
$DIR/core/services/ocr2/plugins/ocr2vrf/coordinator/coordinator_test.go: `.On(
"LogsWithSigs",
mock.Anything,
int64(latestHeadNumber-lookbackBlocks),
int64(latestHeadNumber),
[]common.Hash{
tp.randomnessRequestedTopic,
tp.randomnessFulfillmentRequestedTopic,
tp.randomWordsFulfilledTopic,
tp.outputsServedTopic,
},
coordinatorAddress,
)`
$DIR/core/services/ocr2/plugins/ocr2vrf/coordinator/coordinator_test.go: `.Return([]logpoller.Log{
newRandomnessRequestedLog(t, 3, 195, 191, 0, coordinatorAddress),
newRandomnessRequestedLog(t, 3, 195, 192, 1, coordinatorAddress),
newRandomnessRequestedLog(t, 3, 195, 193, 2, coordinatorAddress),
newOutputsServedLog(t, []vrf_coordinator.VRFBeaconTypesOutputServed{
{
Height: 195,
ConfirmationDelay: big.NewInt(3),
ProofG1X: proofG1X,
ProofG1Y: proofG1Y,
},
}, coordinatorAddress),
}, nil)`
$DIR/core/services/ocr2/plugins/ocr2vrf/coordinator/coordinator_test.go: `.NewInt(3)`
$DIR/core/services/ocr2/plugins/ocr2vrf/coordinator/coordinator_test.go: `.Once()`
$DIR/core/services/ocr2/plugins/ocr2vrf/coordinator/coordinator_test.go: `.TestLogger(t)`
$DIR/core/services/ocr2/plugins/ocr2vrf/coordinator/coordinator_test.go: `.Duration(int64(lookbackBlocks) * int64(time.Second))`
$DIR/core/services/ocr2/plugins/ocr2vrf/coordinator/coordinator_test.go: `.Duration(int64(lookbackBlocks) * int64(time.Second))`
$DIR/core/services/ocr2/plugins/ocr2vrf/coordinator/coordinator_test.go: `.ReportBlocks(
testutils.Context(t),
0, // slotInterval: unused
map[uint32]struct{}{3: {}},
time.Duration(0),
100, // maxBlocks: unused
100, // maxCallbacks: unused
)`
$DIR/core/services/ocr2/plugins/ocr2vrf/coordinator/coordinator_test.go: `.Context(t)`
$DIR/core/services/ocr2/plugins/ocr2vrf/coordinator/coordinator_test.go: `.Duration(0)`
$DIR/core/services/ocr2/plugins/ocr2vrf/coordinator/coordinator_test.go: `.Run("happy path, callback requests, callback fulfillments", func(t *testing.T) {
beaconAddress := newAddress(t)
coordinatorAddress := newAddress(t)
latestHeadNumber := uint64(200)
onchainRouter, err := newRouter(lggr, beaconAddress, coordinatorAddress, evmClient)
require.NoError(t, err)
tp := newTopics()
lookbackBlocks := uint64(5)
lp := getLogPoller(t, []uint64{195}, latestHeadNumber, true, true, lookbackBlocks)
// Both RandomWordsFulfilled and NewTransmission events are emitted
// when a VRF fulfillment happens on chain.
lp.On(
"LogsWithSigs",
mock.Anything,
int64(latestHeadNumber-lookbackBlocks),
int64(latestHeadNumber),
[]common.Hash{
tp.randomnessRequestedTopic,
tp.randomnessFulfillmentRequestedTopic,
tp.randomWordsFulfilledTopic,
tp.outputsServedTopic,
},
coordinatorAddress,
).Return([]logpoller.Log{
newRandomnessFulfillmentRequestedLog(t, 3, 195, 191, 1, 1000, coordinatorAddress),
newRandomnessFulfillmentRequestedLog(t, 3, 195, 192, 2, 1000, coordinatorAddress),
newRandomnessFulfillmentRequestedLog(t, 3, 195, 193, 3, 1000, coordinatorAddress),
// Regardless of success or failure, if the fulfillment has been tried once do not report again.
newRandomWordsFulfilledLog(t, []*big.Int{big.NewInt(1), big.NewInt(2), big.NewInt(3)}, []byte{1, 0, 0}, coordinatorAddress),
newOutputsServedLog(t, []vrf_coordinator.VRFBeaconTypesOutputServed{
{
Height: 195,
ConfirmationDelay: big.NewInt(3),
ProofG1X: proofG1X,
ProofG1Y: proofG1Y,
},
}, coordinatorAddress),
}, nil).Once()
c := &coordinator{
onchainRouter: onchainRouter,
beaconAddress: beaconAddress,
coordinatorAddress: coordinatorAddress,
lp: lp,
lggr: logger.TestLogger(t),
topics: tp,
evmClient: evmClient,
toBeTransmittedBlocks: NewBlockCache[blockInReport](time.Duration(int64(lookbackBlocks) * int64(time.Second))),
toBeTransmittedCallbacks: NewBlockCache[callbackInReport](time.Duration(int64(lookbackBlocks) * int64(time.Second))),
coordinatorConfig: newCoordinatorConfig(lookbackBlocks),
blockhashLookback: lookbackBlocks,
}
blocks, callbacks, recentHeightStart, recentBlocks, err := c.ReportBlocks(
testutils.Context(t),
0, // slotInterval: unused
map[uint32]struct{}{3: {}},
time.Duration(0),
100, // maxBlocks: unused
100, // maxCallbacks: unused
)
assert.NoError(t, err)
assert.Len(t, blocks, 0)
assert.Len(t, callbacks, 0)
assert.Equal(t, latestHeadNumber-lookbackBlocks+1, recentHeightStart)
assert.Len(t, recentBlocks, int(lookbackBlocks))
})`
$DIR/core/services/ocr2/plugins/ocr2vrf/coordinator/coordinator_test.go: `.On(
"LogsWithSigs",
mock.Anything,
int64(latestHeadNumber-lookbackBlocks),
int64(latestHeadNumber),
[]common.Hash{
tp.randomnessRequestedTopic,
tp.randomnessFulfillmentRequestedTopic,
tp.randomWordsFulfilledTopic,
tp.outputsServedTopic,
},
coordinatorAddress,
)`
$DIR/core/services/ocr2/plugins/ocr2vrf/coordinator/coordinator_test.go: `.Return([]logpoller.Log{
newRandomnessFulfillmentRequestedLog(t, 3, 195, 191, 1, 1000, coordinatorAddress),
newRandomnessFulfillmentRequestedLog(t, 3, 195, 192, 2, 1000, coordinatorAddress),
newRandomnessFulfillmentRequestedLog(t, 3, 195, 193, 3, 1000, coordinatorAddress),
// Regardless of success or failure, if the fulfillment has been tried once do not report again.
newRandomWordsFulfilledLog(t, []*big.Int{big.NewInt(1), big.NewInt(2), big.NewInt(3)}, []byte{1, 0, 0}, coordinatorAddress),
newOutputsServedLog(t, []vrf_coordinator.VRFBeaconTypesOutputServed{
{
Height: 195,
ConfirmationDelay: big.NewInt(3),
ProofG1X: proofG1X,
ProofG1Y: proofG1Y,
},
}, coordinatorAddress),
}, nil)`
$DIR/core/services/ocr2/plugins/ocr2vrf/coordinator/coordinator_test.go: `.NewInt(1)`
$DIR/core/services/ocr2/plugins/ocr2vrf/coordinator/coordinator_test.go: `.NewInt(2)`
$DIR/core/services/ocr2/plugins/ocr2vrf/coordinator/coordinator_test.go: `.NewInt(3)`
$DIR/core/services/ocr2/plugins/ocr2vrf/coordinator/coordinator_test.go: `.NewInt(3)`
$DIR/core/services/ocr2/plugins/ocr2vrf/coordinator/coordinator_test.go: `.Once()`
$DIR/core/services/ocr2/plugins/ocr2vrf/coordinator/coordinator_test.go: `.TestLogger(t)`
$DIR/core/services/ocr2/plugins/ocr2vrf/coordinator/coordinator_test.go: `.Duration(int64(lookbackBlocks) * int64(time.Second))`
$DIR/core/services/ocr2/plugins/ocr2vrf/coordinator/coordinator_test.go: `.Duration(int64(lookbackBlocks) * int64(time.Second))`
$DIR/core/services/ocr2/plugins/ocr2vrf/coordinator/coordinator_test.go: `.ReportBlocks(
testutils.Context(t),
0, // slotInterval: unused
map[uint32]struct{}{3: {}},
time.Duration(0),
100, // maxBlocks: unused
100, // maxCallbacks: unused
)`
$DIR/core/services/ocr2/plugins/ocr2vrf/coordinator/coordinator_test.go: `.Context(t)`
$DIR/core/services/ocr2/plugins/ocr2vrf/coordinator/coordinator_test.go: `.Duration(0)`
$DIR/core/services/ocr2/plugins/ocr2vrf/coordinator/coordinator_test.go: `.Run("happy path, only beacon fulfillment", func(t *testing.T) {
beaconAddress := newAddress(t)
coordinatorAddress := newAddress(t)
latestHeadNumber := uint64(200)
onchainRouter, err := newRouter(lggr, beaconAddress, coordinatorAddress, evmClient)
require.NoError(t, err)
tp := newTopics()
lookbackBlocks := uint64(5)
lp := getLogPoller(t, []uint64{}, latestHeadNumber, true, true, lookbackBlocks)
lp.On(
"LogsWithSigs",
mock.Anything,
int64(latestHeadNumber-lookbackBlocks),
int64(latestHeadNumber),
[]common.Hash{
tp.randomnessRequestedTopic,
tp.randomnessFulfillmentRequestedTopic,
tp.randomWordsFulfilledTopic,
tp.outputsServedTopic,
},
coordinatorAddress,
).Return([]logpoller.Log{newOutputsServedLog(t, []vrf_coordinator.VRFBeaconTypesOutputServed{
{
Height: 195,
ConfirmationDelay: big.NewInt(3),
ProofG1X: proofG1X,
ProofG1Y: proofG1Y,
},
}, coordinatorAddress)}, nil).Once()
c := &coordinator{
onchainRouter: onchainRouter,
beaconAddress: beaconAddress,
coordinatorAddress: coordinatorAddress,
lp: lp,
lggr: logger.TestLogger(t),
topics: tp,
evmClient: evmClient,
toBeTransmittedBlocks: NewBlockCache[blockInReport](time.Duration(int64(lookbackBlocks) * int64(time.Second))),
toBeTransmittedCallbacks: NewBlockCache[callbackInReport](time.Duration(int64(lookbackBlocks) * int64(time.Second))),
coordinatorConfig: newCoordinatorConfig(lookbackBlocks),
blockhashLookback: lookbackBlocks,
}
blocks, callbacks, recentHeightStart, recentBlocks, err := c.ReportBlocks(
testutils.Context(t),
0, // slotInterval: unused
map[uint32]struct{}{3: {}},
time.Duration(0),
100, // maxBlocks: unused
100, // maxCallbacks: unused
)
assert.NoError(t, err)
assert.Len(t, blocks, 0)
assert.Len(t, callbacks, 0)
assert.Equal(t, latestHeadNumber-lookbackBlocks+1, recentHeightStart)
assert.Len(t, recentBlocks, int(lookbackBlocks))
})`
$DIR/core/services/ocr2/plugins/ocr2vrf/coordinator/coordinator_test.go: `.On(
"LogsWithSigs",
mock.Anything,
int64(latestHeadNumber-lookbackBlocks),
int64(latestHeadNumber),
[]common.Hash{
tp.randomnessRequestedTopic,
tp.randomnessFulfillmentRequestedTopic,
tp.randomWordsFulfilledTopic,
tp.outputsServedTopic,
},
coordinatorAddress,
)`
$DIR/core/services/ocr2/plugins/ocr2vrf/coordinator/coordinator_test.go: `.Return([]logpoller.Log{newOutputsServedLog(t, []vrf_coordinator.VRFBeaconTypesOutputServed{
{
Height: 195,
ConfirmationDelay: big.NewInt(3),
ProofG1X: proofG1X,
ProofG1Y: proofG1Y,
},
}, coordinatorAddress)}, nil)`
$DIR/core/services/ocr2/plugins/ocr2vrf/coordinator/coordinator_test.go: `.NewInt(3)`
$DIR/core/services/ocr2/plugins/ocr2vrf/coordinator/coordinator_test.go: `.Once()`
$DIR/core/services/ocr2/plugins/ocr2vrf/coordinator/coordinator_test.go: `.TestLogger(t)`
$DIR/core/services/ocr2/plugins/ocr2vrf/coordinator/coordinator_test.go: `.Duration(int64(lookbackBlocks) * int64(time.Second))`
$DIR/core/services/ocr2/plugins/ocr2vrf/coordinator/coordinator_test.go: `.Duration(int64(lookbackBlocks) * int64(time.Second))`
$DIR/core/services/ocr2/plugins/ocr2vrf/coordinator/coordinator_test.go: `.ReportBlocks(
testutils.Context(t),
0, // slotInterval: unused
map[uint32]struct{}{3: {}},
time.Duration(0),
100, // maxBlocks: unused
100, // maxCallbacks: unused
)`
$DIR/core/services/ocr2/plugins/ocr2vrf/coordinator/coordinator_test.go: `.Context(t)`
$DIR/core/services/ocr2/plugins/ocr2vrf/coordinator/coordinator_test.go: `.Duration(0)`
$DIR/core/services/ocr2/plugins/ocr2vrf/coordinator/coordinator_test.go: `.Run("happy path, callback requests & callback fulfillments in-flight", func(t *testing.T) {
beaconAddress := newAddress(t)
coordinatorAddress := newAddress(t)
latestHeadNumber := uint64(200)
onchainRouter, err := newRouter(lggr, beaconAddress, coordinatorAddress, evmClient)
require.NoError(t, err)
tp := newTopics()
lookbackBlocks := uint64(5)
// Do not include latestHeadNumber in "GetBlocksRange" call for initial "ReportWillBeTransmitted."
// Do not include recent blockhashes in range either.
lp := getLogPoller(t, []uint64{195}, latestHeadNumber, false, false /* includeLatestHeadInRange */, 0)
c := &coordinator{
onchainRouter: onchainRouter,
beaconAddress: beaconAddress,
coordinatorAddress: coordinatorAddress,
lp: lp,
lggr: logger.TestLogger(t),
topics: tp,
evmClient: evmClient,
toBeTransmittedBlocks: NewBlockCache[blockInReport](time.Duration(int64(lookbackBlocks) * int64(time.Second))),
toBeTransmittedCallbacks: NewBlockCache[callbackInReport](time.Duration(int64(lookbackBlocks) * int64(time.Second))),
coordinatorConfig: newCoordinatorConfig(lookbackBlocks),
blockhashLookback: lookbackBlocks,
}
report := ocr2vrftypes.AbstractReport{
RecentBlockHeight: 195,
RecentBlockHash: common.HexToHash("0x001"),
Outputs: []ocr2vrftypes.AbstractVRFOutput{
{
BlockHeight: 195,
ConfirmationDelay: 195,
Callbacks: []ocr2vrftypes.AbstractCostedCallbackRequest{
{
RequestID: big.NewInt(1),
BeaconHeight: 195,
},
{
RequestID: big.NewInt(2),
BeaconHeight: 195,
},
{
RequestID: big.NewInt(3),
BeaconHeight: 195,
},
},
},
},
}
err = c.ReportWillBeTransmitted(testutils.Context(t), report)
require.NoError(t, err)
// Include latestHeadNumber in "GetBlocksRange" call for "ReportBlocks" call.
// Include recent blockhashes in range.
lp = getLogPoller(t, []uint64{195}, latestHeadNumber, true, true /* includeLatestHeadInRange */, lookbackBlocks)
c.lp = lp
lp.On(
"LogsWithSigs",
mock.Anything,
int64(latestHeadNumber-lookbackBlocks),
int64(latestHeadNumber),
[]common.Hash{
tp.randomnessRequestedTopic,
tp.randomnessFulfillmentRequestedTopic,
tp.randomWordsFulfilledTopic,
tp.outputsServedTopic,
},
coordinatorAddress,
).Return([]logpoller.Log{
newRandomnessFulfillmentRequestedLog(t, 3, 195, 191, 1, 1000, coordinatorAddress),
newRandomnessFulfillmentRequestedLog(t, 3, 195, 192, 2, 1000, coordinatorAddress),
newRandomnessFulfillmentRequestedLog(t, 3, 195, 193, 3, 1000, coordinatorAddress),
newOutputsServedLog(t, []vrf_coordinator.VRFBeaconTypesOutputServed{
{
Height: 195,
ConfirmationDelay: big.NewInt(3),
ProofG1X: proofG1X,
ProofG1Y: proofG1Y,
},
}, coordinatorAddress),
}, nil).Once()
blocks, callbacks, recentHeightStart, recentBlocks, err := c.ReportBlocks(
testutils.Context(t),
0, // slotInterval: unused
map[uint32]struct{}{3: {}},
time.Duration(0),
100, // maxBlocks: unused
100, // maxCallbacks: unused
)
assert.NoError(t, err)
assert.Len(t, blocks, 0)
assert.Len(t, callbacks, 0)
assert.Equal(t, latestHeadNumber-lookbackBlocks+1, recentHeightStart)
assert.Len(t, recentBlocks, int(lookbackBlocks))
})`
$DIR/core/services/ocr2/plugins/ocr2vrf/coordinator/coordinator_test.go: `.TestLogger(t)`
$DIR/core/services/ocr2/plugins/ocr2vrf/coordinator/coordinator_test.go: `.Duration(int64(lookbackBlocks) * int64(time.Second))`
$DIR/core/services/ocr2/plugins/ocr2vrf/coordinator/coordinator_test.go: `.Duration(int64(lookbackBlocks) * int64(time.Second))`
$DIR/core/services/ocr2/plugins/ocr2vrf/coordinator/coordinator_test.go: `.HexToHash("0x001")`
$DIR/core/services/ocr2/plugins/ocr2vrf/coordinator/coordinator_test.go: `.NewInt(1)`
$DIR/core/services/ocr2/plugins/ocr2vrf/coordinator/coordinator_test.go: `.NewInt(2)`
$DIR/core/services/ocr2/plugins/ocr2vrf/coordinator/coordinator_test.go: `.NewInt(3)`
$DIR/core/services/ocr2/plugins/ocr2vrf/coordinator/coordinator_test.go: `.ReportWillBeTransmitted(testutils.Context(t), report)`
$DIR/core/services/ocr2/plugins/ocr2vrf/coordinator/coordinator_test.go: `.Context(t)`
$DIR/core/services/ocr2/plugins/ocr2vrf/coordinator/coordinator_test.go: `.On(
"LogsWithSigs",
mock.Anything,
int64(latestHeadNumber-lookbackBlocks),
int64(latestHeadNumber),
[]common.Hash{
tp.randomnessRequestedTopic,
tp.randomnessFulfillmentRequestedTopic,
tp.randomWordsFulfilledTopic,
tp.outputsServedTopic,
},
coordinatorAddress,
)`
$DIR/core/services/ocr2/plugins/ocr2vrf/coordinator/coordinator_test.go: `.Return([]logpoller.Log{
newRandomnessFulfillmentRequestedLog(t, 3, 195, 191, 1, 1000, coordinatorAddress),
newRandomnessFulfillmentRequestedLog(t, 3, 195, 192, 2, 1000, coordinatorAddress),
newRandomnessFulfillmentRequestedLog(t, 3, 195, 193, 3, 1000, coordinatorAddress),
newOutputsServedLog(t, []vrf_coordinator.VRFBeaconTypesOutputServed{
{
Height: 195,
ConfirmationDelay: big.NewInt(3),
ProofG1X: proofG1X,
ProofG1Y: proofG1Y,
},
}, coordinatorAddress),
}, nil)`
$DIR/core/services/ocr2/plugins/ocr2vrf/coordinator/coordinator_test.go: `.NewInt(3)`
$DIR/core/services/ocr2/plugins/ocr2vrf/coordinator/coordinator_test.go: `.Once()`
$DIR/core/services/ocr2/plugins/ocr2vrf/coordinator/coordinator_test.go: `.ReportBlocks(
testutils.Context(t),
0, // slotInterval: unused
map[uint32]struct{}{3: {}},
time.Duration(0),
100, // maxBlocks: unused
100, // maxCallbacks: unused
)`
$DIR/core/services/ocr2/plugins/ocr2vrf/coordinator/coordinator_test.go: `.Context(t)`
$DIR/core/services/ocr2/plugins/ocr2vrf/coordinator/coordinator_test.go: `.Duration(0)`
$DIR/core/services/ocr2/plugins/ocr2vrf/coordinator/coordinator_test.go: `.Run("happy path, blocks requested hits batch gas limit", func(t *testing.T) {
coordinatorAddress := newAddress(t)
beaconAddress := newAddress(t)
onchainRouter, err := newRouter(lggr, beaconAddress, coordinatorAddress, evmClient)
require.NoError(t, err)
latestHeadNumber := uint64(400)
lookbackBlocks := uint64(400)
blockhashLookback := uint64(256)
tp := newTopics()
logs := []logpoller.Log{}
requestedBlocks := []uint64{}
// Populate 200 request blocks.
for i := 0; i < 400; i += 2 {
logs = append(logs, newRandomnessRequestedLog(t, 1, uint64(i), 0, int64(i), coordinatorAddress))
requestedBlocks = append(requestedBlocks, uint64(i))
}
lp := getLogPoller(t, requestedBlocks, latestHeadNumber, true, true, blockhashLookback)
lp.On(
"LogsWithSigs",
mock.Anything,
int64(latestHeadNumber-lookbackBlocks),
int64(latestHeadNumber),
[]common.Hash{
tp.randomnessRequestedTopic,
tp.randomnessFulfillmentRequestedTopic,
tp.randomWordsFulfilledTopic,
tp.outputsServedTopic,
},
coordinatorAddress,
).Return(logs, nil)
c := &coordinator{
onchainRouter: onchainRouter,
beaconAddress: beaconAddress,
coordinatorAddress: coordinatorAddress,
lp: lp,
lggr: logger.TestLogger(t),
topics: tp,
evmClient: evmClient,
toBeTransmittedBlocks: NewBlockCache[blockInReport](time.Duration(int64(lookbackBlocks) * int64(time.Second))),
toBeTransmittedCallbacks: NewBlockCache[callbackInReport](time.Duration(int64(lookbackBlocks) * int64(time.Second))),
coordinatorConfig: newCoordinatorConfig(lookbackBlocks),
blockhashLookback: blockhashLookback,
}
blocks, callbacks, recentHeightStart, recentBlocks, err := c.ReportBlocks(
testutils.Context(t),
0, // slotInterval: unused
map[uint32]struct{}{1: {}},
time.Duration(0),
100, // maxBlocks: unused
100, // maxCallbacks: unused
)
// Coordinator should allow 99 blocks, i.e 100 blocks - 1 block's worth of gas
// for the coordinator overhead.
assert.NoError(t, err)
assert.Len(t, blocks, 99)
for _, b := range blocks {
assert.True(t, b.ShouldStore)
}
assert.Len(t, callbacks, 0)
assert.Equal(t, latestHeadNumber-blockhashLookback+1, recentHeightStart)
assert.Len(t, recentBlocks, int(blockhashLookback))
})`
$DIR/core/services/ocr2/plugins/ocr2vrf/coordinator/coordinator_test.go: `.On(
"LogsWithSigs",
mock.Anything,
int64(latestHeadNumber-lookbackBlocks),
int64(latestHeadNumber),
[]common.Hash{
tp.randomnessRequestedTopic,
tp.randomnessFulfillmentRequestedTopic,
tp.randomWordsFulfilledTopic,
tp.outputsServedTopic,
},
coordinatorAddress,
)`
$DIR/core/services/ocr2/plugins/ocr2vrf/coordinator/coordinator_test.go: `.Return(logs, nil)`
$DIR/core/services/ocr2/plugins/ocr2vrf/coordinator/coordinator_test.go: `.TestLogger(t)`
$DIR/core/services/ocr2/plugins/ocr2vrf/coordinator/coordinator_test.go: `.Duration(int64(lookbackBlocks) * int64(time.Second))`
$DIR/core/services/ocr2/plugins/ocr2vrf/coordinator/coordinator_test.go: `.Duration(int64(lookbackBlocks) * int64(time.Second))`
$DIR/core/services/ocr2/plugins/ocr2vrf/coordinator/coordinator_test.go: `.ReportBlocks(
testutils.Context(t),
0, // slotInterval: unused
map[uint32]struct{}{1: {}},
time.Duration(0),
100, // maxBlocks: unused
100, // maxCallbacks: unused
)`
$DIR/core/services/ocr2/plugins/ocr2vrf/coordinator/coordinator_test.go: `.Context(t)`
$DIR/core/services/ocr2/plugins/ocr2vrf/coordinator/coordinator_test.go: `.Duration(0)`
$DIR/core/services/ocr2/plugins/ocr2vrf/coordinator/coordinator_test.go: `.Run("happy path, last callback hits batch gas limit", func(t *testing.T) {
coordinatorAddress := newAddress(t)
beaconAddress := newAddress(t)
onchainRouter, err := newRouter(lggr, beaconAddress, coordinatorAddress, evmClient)
require.NoError(t, err)
latestHeadNumber := uint64(200)
lookbackBlocks := uint64(5)
tp := newTopics()
requestedBlocks := []uint64{195}
lp := getLogPoller(t, requestedBlocks, latestHeadNumber, true, true, lookbackBlocks)
lp.On(
"LogsWithSigs",
mock.Anything,
int64(latestHeadNumber-lookbackBlocks),
int64(latestHeadNumber),
[]common.Hash{
tp.randomnessRequestedTopic,
tp.randomnessFulfillmentRequestedTopic,
tp.randomWordsFulfilledTopic,
tp.outputsServedTopic,
},
coordinatorAddress,
).Return([]logpoller.Log{
newRandomnessRequestedLog(t, 3, 195, 191, 0, coordinatorAddress),
newRandomnessFulfillmentRequestedLog(t, 3, 195, 191, 1, 2_000_000, coordinatorAddress),
newRandomnessFulfillmentRequestedLog(t, 3, 195, 192, 2, 2_900_000, coordinatorAddress),
newRandomnessFulfillmentRequestedLog(t, 3, 195, 193, 3, 1, coordinatorAddress),
}, nil)
c := &coordinator{
onchainRouter: onchainRouter,
beaconAddress: beaconAddress,
coordinatorAddress: coordinatorAddress,
lp: lp,
lggr: logger.TestLogger(t),
topics: tp,
evmClient: evmClient,
toBeTransmittedBlocks: NewBlockCache[blockInReport](time.Duration(int64(lookbackBlocks) * int64(time.Second))),
toBeTransmittedCallbacks: NewBlockCache[callbackInReport](time.Duration(int64(lookbackBlocks) * int64(time.Second))),
coordinatorConfig: newCoordinatorConfig(lookbackBlocks),
blockhashLookback: lookbackBlocks,
}
blocks, callbacks, recentHeightStart, recentBlocks, err := c.ReportBlocks(
testutils.Context(t),
0, // slotInterval: unused
map[uint32]struct{}{3: {}},
time.Duration(0),
100, // maxBlocks: unused
100, // maxCallbacks: unused
)
// Should allow the first two callbacks, which add up to 4_950_000 + 50_000 (1 block) = 5_000_000,
// then reject the last callback for being out of gas.
assert.NoError(t, err)
assert.Len(t, blocks, 1)
for _, b := range blocks {
assert.True(t, b.ShouldStore)
}
assert.Len(t, callbacks, 2)
assert.Equal(t, latestHeadNumber-lookbackBlocks+1, recentHeightStart)
assert.Len(t, recentBlocks, int(lookbackBlocks))
})`
$DIR/core/services/ocr2/plugins/ocr2vrf/coordinator/coordinator_test.go: `.On(
"LogsWithSigs",
mock.Anything,
int64(latestHeadNumber-lookbackBlocks),
int64(latestHeadNumber),
[]common.Hash{
tp.randomnessRequestedTopic,
tp.randomnessFulfillmentRequestedTopic,
tp.randomWordsFulfilledTopic,
tp.outputsServedTopic,
},
coordinatorAddress,
)`
$DIR/core/services/ocr2/plugins/ocr2vrf/coordinator/coordinator_test.go: `.Return([]logpoller.Log{
newRandomnessRequestedLog(t, 3, 195, 191, 0, coordinatorAddress),
newRandomnessFulfillmentRequestedLog(t, 3, 195, 191, 1, 2_000_000, coordinatorAddress),
newRandomnessFulfillmentRequestedLog(t, 3, 195, 192, 2, 2_900_000, coordinatorAddress),
newRandomnessFulfillmentRequestedLog(t, 3, 195, 193, 3, 1, coordinatorAddress),
}, nil)`
$DIR/core/services/ocr2/plugins/ocr2vrf/coordinator/coordinator_test.go: `.TestLogger(t)`
$DIR/core/services/ocr2/plugins/ocr2vrf/coordinator/coordinator_test.go: `.Duration(int64(lookbackBlocks) * int64(time.Second))`
$DIR/core/services/ocr2/plugins/ocr2vrf/coordinator/coordinator_test.go: `.Duration(int64(lookbackBlocks) * int64(time.Second))`
$DIR/core/services/ocr2/plugins/ocr2vrf/coordinator/coordinator_test.go: `.ReportBlocks(
testutils.Context(t),
0, // slotInterval: unused
map[uint32]struct{}{3: {}},
time.Duration(0),
100, // maxBlocks: unused
100, // maxCallbacks: unused
)`
$DIR/core/services/ocr2/plugins/ocr2vrf/coordinator/coordinator_test.go: `.Context(t)`
$DIR/core/services/ocr2/plugins/ocr2vrf/coordinator/coordinator_test.go: `.Duration(0)`
$DIR/core/services/ocr2/plugins/ocr2vrf/coordinator/coordinator_test.go: `.Run("happy path, sandwiched callbacks hit batch gas limit", func(t *testing.T) {
coordinatorAddress := newAddress(t)
beaconAddress := newAddress(t)
onchainRouter, err := newRouter(lggr, beaconAddress, coordinatorAddress, evmClient)
require.NoError(t, err)
latestHeadNumber := uint64(200)
lookbackBlocks := uint64(5)
tp := newTopics()
requestedBlocks := []uint64{195}
lp := getLogPoller(t, requestedBlocks, latestHeadNumber, true, true, lookbackBlocks)
lp.On(
"LogsWithSigs",
mock.Anything,
int64(latestHeadNumber-lookbackBlocks),
int64(latestHeadNumber),
[]common.Hash{
tp.randomnessRequestedTopic,
tp.randomnessFulfillmentRequestedTopic,
tp.randomWordsFulfilledTopic,
tp.outputsServedTopic,
},
coordinatorAddress,
).Return([]logpoller.Log{
newRandomnessRequestedLog(t, 3, 195, 191, 0, coordinatorAddress),
newRandomnessFulfillmentRequestedLog(t, 3, 195, 191, 1, 10_000_000, coordinatorAddress),
newRandomnessFulfillmentRequestedLog(t, 3, 195, 192, 2, 1000, coordinatorAddress),
newRandomnessFulfillmentRequestedLog(t, 3, 195, 193, 3, 10_000_000, coordinatorAddress),
}, nil)
c := &coordinator{
onchainRouter: onchainRouter,
beaconAddress: beaconAddress,
coordinatorAddress: coordinatorAddress,
lp: lp,
lggr: logger.TestLogger(t),
topics: tp,
evmClient: evmClient,
toBeTransmittedBlocks: NewBlockCache[blockInReport](time.Duration(int64(lookbackBlocks) * int64(time.Second))),
toBeTransmittedCallbacks: NewBlockCache[callbackInReport](time.Duration(int64(lookbackBlocks) * int64(time.Second))),
coordinatorConfig: newCoordinatorConfig(lookbackBlocks),
blockhashLookback: lookbackBlocks,
}
blocks, callbacks, recentHeightStart, recentBlocks, err := c.ReportBlocks(
testutils.Context(t),
0, // slotInterval: unused
map[uint32]struct{}{3: {}},
time.Duration(0),
100, // maxBlocks: unused
100, // maxCallbacks: unused
)
// Should allow the middle callback, with an acceptable gas allowance, to be processed.
assert.NoError(t, err)
assert.Len(t, blocks, 1)
assert.Len(t, callbacks, 1)
assert.Equal(t, latestHeadNumber-lookbackBlocks+1, recentHeightStart)
assert.Len(t, recentBlocks, int(lookbackBlocks))
})`
$DIR/core/services/ocr2/plugins/ocr2vrf/coordinator/coordinator_test.go: `.On(
"LogsWithSigs",
mock.Anything,
int64(latestHeadNumber-lookbackBlocks),
int64(latestHeadNumber),
[]common.Hash{
tp.randomnessRequestedTopic,
tp.randomnessFulfillmentRequestedTopic,
tp.randomWordsFulfilledTopic,
tp.outputsServedTopic,
},
coordinatorAddress,
)`
$DIR/core/services/ocr2/plugins/ocr2vrf/coordinator/coordinator_test.go: `.Return([]logpoller.Log{
newRandomnessRequestedLog(t, 3, 195, 191, 0, coordinatorAddress),
newRandomnessFulfillmentRequestedLog(t, 3, 195, 191, 1, 10_000_000, coordinatorAddress),
newRandomnessFulfillmentRequestedLog(t, 3, 195, 192, 2, 1000, coordinatorAddress),
newRandomnessFulfillmentRequestedLog(t, 3, 195, 193, 3, 10_000_000, coordinatorAddress),
}, nil)`
$DIR/core/services/ocr2/plugins/ocr2vrf/coordinator/coordinator_test.go: `.TestLogger(t)`
$DIR/core/services/ocr2/plugins/ocr2vrf/coordinator/coordinator_test.go: `.Duration(int64(lookbackBlocks) * int64(time.Second))`
$DIR/core/services/ocr2/plugins/ocr2vrf/coordinator/coordinator_test.go: `.Duration(int64(lookbackBlocks) * int64(time.Second))`
$DIR/core/services/ocr2/plugins/ocr2vrf/coordinator/coordinator_test.go: `.ReportBlocks(
testutils.Context(t),
0, // slotInterval: unused
map[uint32]struct{}{3: {}},
time.Duration(0),
100, // maxBlocks: unused
100, // maxCallbacks: unused
)`
$DIR/core/services/ocr2/plugins/ocr2vrf/coordinator/coordinator_test.go: `.Context(t)`
$DIR/core/services/ocr2/plugins/ocr2vrf/coordinator/coordinator_test.go: `.Duration(0)`
$DIR/core/services/ocr2/plugins/ocr2vrf/coordinator/coordinator_test.go: `.Run("happy path, sandwiched callbacks with valid callback in next block hit batch gas limit", func(t *testing.T) {
coordinatorAddress := newAddress(t)
beaconAddress := newAddress(t)
onchainRouter, err := newRouter(lggr, beaconAddress, coordinatorAddress, evmClient)
require.NoError(t, err)
latestHeadNumber := uint64(200)
lookbackBlocks := uint64(5)
tp := newTopics()
requestedBlocks := []uint64{195, 196}
lp := getLogPoller(t, requestedBlocks, latestHeadNumber, true, true, lookbackBlocks)
lp.On(
"LogsWithSigs",
mock.Anything,
int64(latestHeadNumber-lookbackBlocks),
int64(latestHeadNumber),
[]common.Hash{
tp.randomnessRequestedTopic,
tp.randomnessFulfillmentRequestedTopic,
tp.randomWordsFulfilledTopic,
tp.outputsServedTopic,
},
coordinatorAddress,
).Return([]logpoller.Log{
newRandomnessRequestedLog(t, 3, 195, 191, 0, coordinatorAddress),
newRandomnessFulfillmentRequestedLog(t, 3, 195, 191, 1, 10_000_000, coordinatorAddress),
newRandomnessFulfillmentRequestedLog(t, 3, 195, 192, 2, 1000, coordinatorAddress),
newRandomnessFulfillmentRequestedLog(t, 3, 195, 193, 3, 10_000_000, coordinatorAddress),
newRandomnessFulfillmentRequestedLog(t, 3, 196, 194, 4, 1000, coordinatorAddress),
}, nil)
c := &coordinator{
onchainRouter: onchainRouter,
beaconAddress: beaconAddress,
coordinatorAddress: coordinatorAddress,
lp: lp,
lggr: logger.TestLogger(t),
topics: tp,
evmClient: evmClient,
toBeTransmittedBlocks: NewBlockCache[blockInReport](time.Duration(int64(lookbackBlocks) * int64(time.Second))),
toBeTransmittedCallbacks: NewBlockCache[callbackInReport](time.Duration(int64(lookbackBlocks) * int64(time.Second))),
coordinatorConfig: newCoordinatorConfig(lookbackBlocks),
blockhashLookback: lookbackBlocks,
}
blocks, callbacks, recentHeightStart, recentBlocks, err := c.ReportBlocks(
testutils.Context(t),
0, // slotInterval: unused
map[uint32]struct{}{3: {}},
time.Duration(0),
100, // maxBlocks: unused
100, // maxCallbacks: unused
)
// Should allow the middle callback, with an acceptable gas allowance, to be processed,
// then move to the next block and find a suitable callback. Also adds the block 196 for
// that callback.
assert.NoError(t, err)
assert.Len(t, blocks, 2)
assert.Len(t, callbacks, 2)
assert.Equal(t, latestHeadNumber-lookbackBlocks+1, recentHeightStart)
assert.Len(t, recentBlocks, int(lookbackBlocks))
})`
$DIR/core/services/ocr2/plugins/ocr2vrf/coordinator/coordinator_test.go: `.On(
"LogsWithSigs",
mock.Anything,
int64(latestHeadNumber-lookbackBlocks),
int64(latestHeadNumber),
[]common.Hash{
tp.randomnessRequestedTopic,
tp.randomnessFulfillmentRequestedTopic,
tp.randomWordsFulfilledTopic,
tp.outputsServedTopic,
},
coordinatorAddress,
)`
$DIR/core/services/ocr2/plugins/ocr2vrf/coordinator/coordinator_test.go: `.Return([]logpoller.Log{
newRandomnessRequestedLog(t, 3, 195, 191, 0, coordinatorAddress),
newRandomnessFulfillmentRequestedLog(t, 3, 195, 191, 1, 10_000_000, coordinatorAddress),
newRandomnessFulfillmentRequestedLog(t, 3, 195, 192, 2, 1000, coordinatorAddress),
newRandomnessFulfillmentRequestedLog(t, 3, 195, 193, 3, 10_000_000, coordinatorAddress),
newRandomnessFulfillmentRequestedLog(t, 3, 196, 194, 4, 1000, coordinatorAddress),
}, nil)`
$DIR/core/services/ocr2/plugins/ocr2vrf/coordinator/coordinator_test.go: `.TestLogger(t)`
$DIR/core/services/ocr2/plugins/ocr2vrf/coordinator/coordinator_test.go: `.Duration(int64(lookbackBlocks) * int64(time.Second))`
$DIR/core/services/ocr2/plugins/ocr2vrf/coordinator/coordinator_test.go: `.Duration(int64(lookbackBlocks) * int64(time.Second))`
$DIR/core/services/ocr2/plugins/ocr2vrf/coordinator/coordinator_test.go: `.ReportBlocks(
testutils.Context(t),
0, // slotInterval: unused
map[uint32]struct{}{3: {}},
time.Duration(0),
100, // maxBlocks: unused
100, // maxCallbacks: unused
)`
$DIR/core/services/ocr2/plugins/ocr2vrf/coordinator/coordinator_test.go: `.Context(t)`
$DIR/core/services/ocr2/plugins/ocr2vrf/coordinator/coordinator_test.go: `.Duration(0)`
$DIR/core/services/ocr2/plugins/ocr2vrf/coordinator/coordinator_test.go: `.Run("correct blockhashes are retrieved with the maximum lookback", func(t *testing.T) {
coordinatorAddress := newAddress(t)
beaconAddress := newAddress(t)
onchainRouter, err := newRouter(lggr, beaconAddress, coordinatorAddress, evmClient)
require.NoError(t, err)
latestHeadNumber := uint64(1000)
lookbackBlocks := uint64(256)
tp := newTopics()
requestedBlocks := []uint64{}
lp := getLogPoller(t, requestedBlocks, latestHeadNumber, true, true, lookbackBlocks)
lp.On(
"LogsWithSigs",
mock.Anything,
int64(latestHeadNumber-lookbackBlocks),
int64(latestHeadNumber),
[]common.Hash{
tp.randomnessRequestedTopic,
tp.randomnessFulfillmentRequestedTopic,
tp.randomWordsFulfilledTopic,
tp.outputsServedTopic,
},
coordinatorAddress,
).Return([]logpoller.Log{}, nil)
c := &coordinator{
onchainRouter: onchainRouter,
beaconAddress: beaconAddress,
coordinatorAddress: coordinatorAddress,
lp: lp,
lggr: logger.TestLogger(t),
topics: tp,
evmClient: evmClient,
toBeTransmittedBlocks: NewBlockCache[blockInReport](time.Duration(int64(lookbackBlocks) * int64(time.Second))),
toBeTransmittedCallbacks: NewBlockCache[callbackInReport](time.Duration(int64(lookbackBlocks) * int64(time.Second))),
coordinatorConfig: newCoordinatorConfig(lookbackBlocks),
blockhashLookback: lookbackBlocks,
}
_, _, recentHeightStart, recentBlocks, err := c.ReportBlocks(
testutils.Context(t),
0, // slotInterval: unused
map[uint32]struct{}{3: {}},
time.Duration(0),
100, // maxBlocks: unused
100, // maxCallbacks: unused
)
assert.NoError(t, err)
assert.Equal(t, latestHeadNumber-lookbackBlocks+1, recentHeightStart)
assert.Equal(t, common.HexToHash(fmt.Sprintf("0x00%d", 1)), recentBlocks[0])
assert.Equal(t, common.HexToHash(fmt.Sprintf("0x00%d", lookbackBlocks)), recentBlocks[len(recentBlocks)-1])
assert.Len(t, recentBlocks, int(lookbackBlocks))
})`
$DIR/core/services/ocr2/plugins/ocr2vrf/coordinator/coordinator_test.go: `.On(
"LogsWithSigs",
mock.Anything,
int64(latestHeadNumber-lookbackBlocks),
int64(latestHeadNumber),
[]common.Hash{
tp.randomnessRequestedTopic,
tp.randomnessFulfillmentRequestedTopic,
tp.randomWordsFulfilledTopic,
tp.outputsServedTopic,
},
coordinatorAddress,
)`
$DIR/core/services/ocr2/plugins/ocr2vrf/coordinator/coordinator_test.go: `.Return([]logpoller.Log{}, nil)`
$DIR/core/services/ocr2/plugins/ocr2vrf/coordinator/coordinator_test.go: `.TestLogger(t)`
$DIR/core/services/ocr2/plugins/ocr2vrf/coordinator/coordinator_test.go: `.Duration(int64(lookbackBlocks) * int64(time.Second))`
$DIR/core/services/ocr2/plugins/ocr2vrf/coordinator/coordinator_test.go: `.Duration(int64(lookbackBlocks) * int64(time.Second))`
$DIR/core/services/ocr2/plugins/ocr2vrf/coordinator/coordinator_test.go: `.ReportBlocks(
testutils.Context(t),
0, // slotInterval: unused
map[uint32]struct{}{3: {}},
time.Duration(0),
100, // maxBlocks: unused
100, // maxCallbacks: unused
)`
$DIR/core/services/ocr2/plugins/ocr2vrf/coordinator/coordinator_test.go: `.Context(t)`
$DIR/core/services/ocr2/plugins/ocr2vrf/coordinator/coordinator_test.go: `.Duration(0)`
$DIR/core/services/ocr2/plugins/ocr2vrf/coordinator/coordinator_test.go: `.Run("correct blockhashes are retrieved with a capped lookback (close to genesis block)", func(t *testing.T) {
coordinatorAddress := newAddress(t)
beaconAddress := newAddress(t)
onchainRouter, err := newRouter(lggr, beaconAddress, coordinatorAddress, evmClient)
require.NoError(t, err)
latestHeadNumber := uint64(100)
lookbackBlocks := uint64(100)
tp := newTopics()
requestedBlocks := []uint64{}
lp := getLogPoller(t, requestedBlocks, latestHeadNumber, true, true, lookbackBlocks)
lp.On(
"LogsWithSigs",
mock.Anything,
int64(latestHeadNumber-lookbackBlocks),
int64(latestHeadNumber),
[]common.Hash{
tp.randomnessRequestedTopic,
tp.randomnessFulfillmentRequestedTopic,
tp.randomWordsFulfilledTopic,
tp.outputsServedTopic,
},
coordinatorAddress,
).Return([]logpoller.Log{}, nil)
c := &coordinator{
onchainRouter: onchainRouter,
beaconAddress: beaconAddress,
coordinatorAddress: coordinatorAddress,
lp: lp,
lggr: logger.TestLogger(t),
topics: tp,
evmClient: evmClient,
toBeTransmittedBlocks: NewBlockCache[blockInReport](time.Duration(int64(lookbackBlocks) * int64(time.Second))),
toBeTransmittedCallbacks: NewBlockCache[callbackInReport](time.Duration(int64(lookbackBlocks) * int64(time.Second))),
coordinatorConfig: newCoordinatorConfig(lookbackBlocks),
blockhashLookback: lookbackBlocks,
}
_, _, recentHeightStart, recentBlocks, err := c.ReportBlocks(
testutils.Context(t),
0, // slotInterval: unused
map[uint32]struct{}{3: {}},
time.Duration(0),
100, // maxBlocks: unused
100, // maxCallbacks: unused
)
assert.NoError(t, err)
assert.Equal(t, latestHeadNumber-lookbackBlocks+1, recentHeightStart)
assert.Equal(t, common.HexToHash(fmt.Sprintf("0x00%d", 1)), recentBlocks[0])
assert.Equal(t, common.HexToHash(fmt.Sprintf("0x00%d", lookbackBlocks)), recentBlocks[len(recentBlocks)-1])
assert.Len(t, recentBlocks, int(lookbackBlocks))
})`
$DIR/core/services/ocr2/plugins/ocr2vrf/coordinator/coordinator_test.go: `.On(
"LogsWithSigs",
mock.Anything,
int64(latestHeadNumber-lookbackBlocks),
int64(latestHeadNumber),
[]common.Hash{
tp.randomnessRequestedTopic,
tp.randomnessFulfillmentRequestedTopic,
tp.randomWordsFulfilledTopic,
tp.outputsServedTopic,
},
coordinatorAddress,
)`
$DIR/core/services/ocr2/plugins/ocr2vrf/coordinator/coordinator_test.go: `.Return([]logpoller.Log{}, nil)`
$DIR/core/services/ocr2/plugins/ocr2vrf/coordinator/coordinator_test.go: `.TestLogger(t)`
$DIR/core/services/ocr2/plugins/ocr2vrf/coordinator/coordinator_test.go: `.Duration(int64(lookbackBlocks) * int64(time.Second))`
$DIR/core/services/ocr2/plugins/ocr2vrf/coordinator/coordinator_test.go: `.Duration(int64(lookbackBlocks) * int64(time.Second))`
$DIR/core/services/ocr2/plugins/ocr2vrf/coordinator/coordinator_test.go: `.ReportBlocks(
testutils.Context(t),
0, // slotInterval: unused
map[uint32]struct{}{3: {}},
time.Duration(0),
100, // maxBlocks: unused
100, // maxCallbacks: unused
)`
$DIR/core/services/ocr2/plugins/ocr2vrf/coordinator/coordinator_test.go: `.Context(t)`
$DIR/core/services/ocr2/plugins/ocr2vrf/coordinator/coordinator_test.go: `.Duration(0)`
$DIR/core/services/ocr2/plugins/ocr2vrf/coordinator/coordinator_test.go: `.NewLogPoller(t)`
$DIR/core/services/ocr2/plugins/ocr2vrf/coordinator/coordinator_test.go: `.On("LatestBlock", mock.Anything)`
$DIR/core/services/ocr2/plugins/ocr2vrf/coordinator/coordinator_test.go: `.
Return(logpoller.LogPollerBlock{BlockNumber: int64(latestHeadNumber)}, nil)`
$DIR/core/services/ocr2/plugins/ocr2vrf/coordinator/coordinator_test.go: `.On("GetBlocksRange", mock.Anything, append(requestedBlocks, latestHeadNumber-lookbackBlocks+1, latestHeadNumber))`
$DIR/core/services/ocr2/plugins/ocr2vrf/coordinator/coordinator_test.go: `.
Return(nil, errors.New("GetBlocks error"))`
$DIR/core/services/ocr2/plugins/ocr2vrf/coordinator/coordinator_test.go: `.New("GetBlocks error")`
$DIR/core/services/ocr2/plugins/ocr2vrf/coordinator/coordinator_test.go: `.On(
"LogsWithSigs",
mock.Anything,
int64(latestHeadNumber-lookbackBlocks),
int64(latestHeadNumber),
[]common.Hash{
tp.randomnessRequestedTopic,
tp.randomnessFulfillmentRequestedTopic,
tp.randomWordsFulfilledTopic,
tp.outputsServedTopic,
},
coordinatorAddress,
)`
$DIR/core/services/ocr2/plugins/ocr2vrf/coordinator/coordinator_test.go: `.Return([]logpoller.Log{
newRandomnessRequestedLog(t, 3, 195, 191, 0, coordinatorAddress),
newRandomnessFulfillmentRequestedLog(t, 3, 195, 191, 1, 10_000_000, coordinatorAddress),
newRandomnessFulfillmentRequestedLog(t, 3, 195, 192, 2, 1000, coordinatorAddress),
newRandomnessFulfillmentRequestedLog(t, 3, 195, 193, 3, 10_000_000, coordinatorAddress),
newRandomnessFulfillmentRequestedLog(t, 3, 196, 194, 4, 1000, coordinatorAddress),
}, nil)`
$DIR/core/services/ocr2/plugins/ocr2vrf/coordinator/coordinator_test.go: `.TestLogger(t)`
$DIR/core/services/ocr2/plugins/ocr2vrf/coordinator/coordinator_test.go: `.Duration(int64(lookbackBlocks) * int64(time.Second))`
$DIR/core/services/ocr2/plugins/ocr2vrf/coordinator/coordinator_test.go: `.Duration(int64(lookbackBlocks) * int64(time.Second))`
$DIR/core/services/ocr2/plugins/ocr2vrf/coordinator/coordinator_test.go: `.ReportBlocks(
testutils.Context(t),
0, // slotInterval: unused
map[uint32]struct{}{3: {}},
time.Duration(0),
100, // maxBlocks: unused
100, // maxCallbacks: unused
)`
$DIR/core/services/ocr2/plugins/ocr2vrf/coordinator/coordinator_test.go: `.Context(t)`
$DIR/core/services/ocr2/plugins/ocr2vrf/coordinator/coordinator_test.go: `.Duration(0)`
$DIR/core/services/ocr2/plugins/ocr2vrf/coordinator/coordinator_test.go: `.NewClient(t)`
$DIR/core/services/ocr2/plugins/ocr2vrf/coordinator/coordinator_test.go: `.On("ConfiguredChainID")`
$DIR/core/services/ocr2/plugins/ocr2vrf/coordinator/coordinator_test.go: `.Return(big.NewInt(1))`
$DIR/core/services/ocr2/plugins/ocr2vrf/coordinator/coordinator_test.go: `.NewInt(1)`
$DIR/core/services/ocr2/plugins/ocr2vrf/coordinator/coordinator_test.go: `.Run("happy path", func(t *testing.T) {
lookbackBlocks := uint64(0)
lp := getLogPoller(t, []uint64{199}, 200, false, false, 0)
c := &coordinator{
lp: lp,
lggr: logger.TestLogger(t),
toBeTransmittedBlocks: NewBlockCache[blockInReport](time.Duration(int64(lookbackBlocks) * int64(time.Second))),
toBeTransmittedCallbacks: NewBlockCache[callbackInReport](time.Duration(int64(lookbackBlocks) * int64(time.Second))),
coordinatorConfig: newCoordinatorConfig(lookbackBlocks),
evmClient: evmClient,
}
assert.NoError(t, c.ReportWillBeTransmitted(testutils.Context(t), ocr2vrftypes.AbstractReport{
RecentBlockHeight: 199,
RecentBlockHash: common.HexToHash("0x001"),
}))
})`
$DIR/core/services/ocr2/plugins/ocr2vrf/coordinator/coordinator_test.go: `.TestLogger(t)`
$DIR/core/services/ocr2/plugins/ocr2vrf/coordinator/coordinator_test.go: `.Duration(int64(lookbackBlocks) * int64(time.Second))`
$DIR/core/services/ocr2/plugins/ocr2vrf/coordinator/coordinator_test.go: `.Duration(int64(lookbackBlocks) * int64(time.Second))`
$DIR/core/services/ocr2/plugins/ocr2vrf/coordinator/coordinator_test.go: `.TestLogger(t)`
$DIR/core/services/ocr2/plugins/ocr2vrf/coordinator/coordinator_test.go: `.Duration(int64(lookbackBlocks) * int64(time.Second))`
$DIR/core/services/ocr2/plugins/ocr2vrf/coordinator/coordinator_test.go: `.Duration(int64(lookbackBlocks) * int64(time.Second))`
$DIR/core/services/ocr2/plugins/ocr2vrf/coordinator/coordinator_test.go: `.NewInt(1)`
$DIR/core/services/ocr2/plugins/ocr2vrf/coordinator/coordinator_test.go: `.NewInt(2)`
$DIR/core/services/ocr2/plugins/ocr2vrf/coordinator/coordinator_test.go: `.TestLogger(t)`
$DIR/core/services/ocr2/plugins/ocr2vrf/coordinator/coordinator_test.go: `.NewClient(t)`
$DIR/core/services/ocr2/plugins/ocr2vrf/coordinator/coordinator_test.go: `.ParseLog(toGethLog(lg))`
$DIR/core/services/ocr2/plugins/ocr2vrf/coordinator/coordinator_test.go: `.ParseLog(toGethLog(lg))`
$DIR/core/services/ocr2/plugins/ocr2vrf/coordinator/coordinator_test.go: `.BigToHash(big.NewInt(10))`
$DIR/core/services/ocr2/plugins/ocr2vrf/coordinator/coordinator_test.go: `.NewInt(10)`
$DIR/core/services/ocr2/plugins/ocr2vrf/coordinator/coordinator_test.go: `.ParseLog(toGethLog(lg))`
$DIR/core/services/ocr2/plugins/ocr2vrf/coordinator/coordinator_test.go: `.NewInt(1)`
$DIR/core/services/ocr2/plugins/ocr2vrf/coordinator/coordinator_test.go: `.NewInt(2)`
$DIR/core/services/ocr2/plugins/ocr2vrf/coordinator/coordinator_test.go: `.NewInt(3)`
$DIR/core/services/ocr2/plugins/ocr2vrf/coordinator/coordinator_test.go: `.ParseLog(toGethLog(lg))`
$DIR/core/services/ocr2/plugins/ocr2vrf/coordinator/coordinator_test.go: `.NewInt(3)`
$DIR/core/services/ocr2/plugins/ocr2vrf/coordinator/coordinator_test.go: `.NewInt(4)`
$DIR/core/services/ocr2/plugins/ocr2vrf/coordinator/coordinator_test.go: `.ParseLog(toGethLog(lg))`
$DIR/core/services/ocr2/plugins/ocr2vrf/coordinator/coordinator_test.go: `.ConfirmationDelay.Int64()`
$DIR/core/services/ocr2/plugins/ocr2vrf/coordinator/coordinator_test.go: `.NewClient(t)`
$DIR/core/services/ocr2/plugins/ocr2vrf/coordinator/coordinator_test.go: `.On("ConfiguredChainID")`
$DIR/core/services/ocr2/plugins/ocr2vrf/coordinator/coordinator_test.go: `.Return(big.NewInt(1))`
$DIR/core/services/ocr2/plugins/ocr2vrf/coordinator/coordinator_test.go: `.NewInt(1)`
$DIR/core/services/ocr2/plugins/ocr2vrf/coordinator/coordinator_test.go: `.Run("report is on-chain", func(t *testing.T) {
tp := newTopics()
beaconAddress := newAddress(t)
coordinatorAddress := newAddress(t)
lggr := logger.TestLogger(t)
onchainRouter, err := newRouter(lggr, beaconAddress, coordinatorAddress, evmClient)
assert.NoError(t, err)
epoch := uint32(20)
round := uint8(3)
epochAndRound := toEpochAndRoundUint40(epoch, round)
enrTopic := common.BytesToHash(common.LeftPadBytes(epochAndRound.Bytes(), 32))
lp := lp_mocks.NewLogPoller(t)
configDigest := common.BigToHash(big.NewInt(1337))
log := newNewTransmissionLog(t, beaconAddress, configDigest)
log.BlockNumber = 195
lp.On("IndexedLogs", mock.Anything, tp.newTransmissionTopic, beaconAddress, 2, []common.Hash{
enrTopic,
}, evmtypes.Confirmations(1)).Return([]logpoller.Log{log}, nil)
c := &coordinator{
lp: lp,
onchainRouter: onchainRouter,
lggr: logger.TestLogger(t),
beaconAddress: beaconAddress,
topics: tp,
evmClient: evmClient,
}
present, err := c.ReportIsOnchain(testutils.Context(t), epoch, round, configDigest)
assert.NoError(t, err)
assert.True(t, present)
})`
$DIR/core/services/ocr2/plugins/ocr2vrf/coordinator/coordinator_test.go: `.TestLogger(t)`
$DIR/core/services/ocr2/plugins/ocr2vrf/coordinator/coordinator_test.go: `.BytesToHash(common.LeftPadBytes(epochAndRound.Bytes(), 32))`
$DIR/core/services/ocr2/plugins/ocr2vrf/coordinator/coordinator_test.go: `.LeftPadBytes(epochAndRound.Bytes(), 32)`
$DIR/core/services/ocr2/plugins/ocr2vrf/coordinator/coordinator_test.go: `.Bytes()`
$DIR/core/services/ocr2/plugins/ocr2vrf/coordinator/coordinator_test.go: `.NewLogPoller(t)`
$DIR/core/services/ocr2/plugins/ocr2vrf/coordinator/coordinator_test.go: `.BigToHash(big.NewInt(1337))`
$DIR/core/services/ocr2/plugins/ocr2vrf/coordinator/coordinator_test.go: `.NewInt(1337)`
$DIR/core/services/ocr2/plugins/ocr2vrf/coordinator/coordinator_test.go: `.On("IndexedLogs", mock.Anything, tp.newTransmissionTopic, beaconAddress, 2, []common.Hash{
enrTopic,
}, evmtypes.Confirmations(1))`
$DIR/core/services/ocr2/plugins/ocr2vrf/coordinator/coordinator_test.go: `.Confirmations(1)`
$DIR/core/services/ocr2/plugins/ocr2vrf/coordinator/coordinator_test.go: `.Return([]logpoller.Log{log}, nil)`
$DIR/core/services/ocr2/plugins/ocr2vrf/coordinator/coordinator_test.go: `.TestLogger(t)`
$DIR/core/services/ocr2/plugins/ocr2vrf/coordinator/coordinator_test.go: `.ReportIsOnchain(testutils.Context(t), epoch, round, configDigest)`
$DIR/core/services/ocr2/plugins/ocr2vrf/coordinator/coordinator_test.go: `.Context(t)`
$DIR/core/services/ocr2/plugins/ocr2vrf/coordinator/coordinator_test.go: `.Run("report is on-chain for old config digest", func(t *testing.T) {
tp := newTopics()
beaconAddress := newAddress(t)
coordinatorAddress := newAddress(t)
lggr := logger.TestLogger(t)
onchainRouter, err := newRouter(lggr, beaconAddress, coordinatorAddress, evmClient)
assert.NoError(t, err)
epoch := uint32(20)
round := uint8(3)
epochAndRound := toEpochAndRoundUint40(epoch, round)
enrTopic := common.BytesToHash(common.LeftPadBytes(epochAndRound.Bytes(), 32))
lp := lp_mocks.NewLogPoller(t)
oldConfigDigest := common.BigToHash(big.NewInt(1337))
newConfigDigest := common.BigToHash(big.NewInt(8888))
log := newNewTransmissionLog(t, beaconAddress, oldConfigDigest)
log.BlockNumber = 195
lp.On("IndexedLogs", mock.Anything, tp.newTransmissionTopic, beaconAddress, 2, []common.Hash{
enrTopic,
}, evmtypes.Confirmations(1)).Return([]logpoller.Log{log}, nil)
c := &coordinator{
lp: lp,
onchainRouter: onchainRouter,
lggr: logger.TestLogger(t),
beaconAddress: beaconAddress,
topics: tp,
evmClient: evmClient,
}
present, err := c.ReportIsOnchain(testutils.Context(t), epoch, round, newConfigDigest)
assert.NoError(t, err)
assert.False(t, present)
})`
$DIR/core/services/ocr2/plugins/ocr2vrf/coordinator/coordinator_test.go: `.TestLogger(t)`
$DIR/core/services/ocr2/plugins/ocr2vrf/coordinator/coordinator_test.go: `.BytesToHash(common.LeftPadBytes(epochAndRound.Bytes(), 32))`
$DIR/core/services/ocr2/plugins/ocr2vrf/coordinator/coordinator_test.go: `.LeftPadBytes(epochAndRound.Bytes(), 32)`
$DIR/core/services/ocr2/plugins/ocr2vrf/coordinator/coordinator_test.go: `.Bytes()`
$DIR/core/services/ocr2/plugins/ocr2vrf/coordinator/coordinator_test.go: `.NewLogPoller(t)`
$DIR/core/services/ocr2/plugins/ocr2vrf/coordinator/coordinator_test.go: `.BigToHash(big.NewInt(1337))`
$DIR/core/services/ocr2/plugins/ocr2vrf/coordinator/coordinator_test.go: `.NewInt(1337)`
$DIR/core/services/ocr2/plugins/ocr2vrf/coordinator/coordinator_test.go: `.BigToHash(big.NewInt(8888))`
$DIR/core/services/ocr2/plugins/ocr2vrf/coordinator/coordinator_test.go: `.NewInt(8888)`
$DIR/core/services/ocr2/plugins/ocr2vrf/coordinator/coordinator_test.go: `.On("IndexedLogs", mock.Anything, tp.newTransmissionTopic, beaconAddress, 2, []common.Hash{
enrTopic,
}, evmtypes.Confirmations(1))`
$DIR/core/services/ocr2/plugins/ocr2vrf/coordinator/coordinator_test.go: `.Confirmations(1)`
$DIR/core/services/ocr2/plugins/ocr2vrf/coordinator/coordinator_test.go: `.Return([]logpoller.Log{log}, nil)`
$DIR/core/services/ocr2/plugins/ocr2vrf/coordinator/coordinator_test.go: `.TestLogger(t)`
$DIR/core/services/ocr2/plugins/ocr2vrf/coordinator/coordinator_test.go: `.ReportIsOnchain(testutils.Context(t), epoch, round, newConfigDigest)`
$DIR/core/services/ocr2/plugins/ocr2vrf/coordinator/coordinator_test.go: `.Context(t)`
$DIR/core/services/ocr2/plugins/ocr2vrf/coordinator/coordinator_test.go: `.BytesToHash(common.LeftPadBytes(epochAndRound.Bytes(), 32))`
$DIR/core/services/ocr2/plugins/ocr2vrf/coordinator/coordinator_test.go: `.LeftPadBytes(epochAndRound.Bytes(), 32)`
$DIR/core/services/ocr2/plugins/ocr2vrf/coordinator/coordinator_test.go: `.Bytes()`
$DIR/core/services/ocr2/plugins/ocr2vrf/coordinator/coordinator_test.go: `.NewLogPoller(t)`
$DIR/core/services/ocr2/plugins/ocr2vrf/coordinator/coordinator_test.go: `.On("IndexedLogs", mock.Anything, tp.newTransmissionTopic, beaconAddress, 2, []common.Hash{
enrTopic,
}, evmtypes.Confirmations(1))`
$DIR/core/services/ocr2/plugins/ocr2vrf/coordinator/coordinator_test.go: `.Confirmations(1)`
$DIR/core/services/ocr2/plugins/ocr2vrf/coordinator/coordinator_test.go: `.Return([]logpoller.Log{}, nil)`
$DIR/core/services/ocr2/plugins/ocr2vrf/coordinator/coordinator_test.go: `.TestLogger(t)`
$DIR/core/services/ocr2/plugins/ocr2vrf/coordinator/coordinator_test.go: `.BigToHash(big.NewInt(0))`
$DIR/core/services/ocr2/plugins/ocr2vrf/coordinator/coordinator_test.go: `.NewInt(0)`
$DIR/core/services/ocr2/plugins/ocr2vrf/coordinator/coordinator_test.go: `.ReportIsOnchain(testutils.Context(t), epoch, round, configDigest)`
$DIR/core/services/ocr2/plugins/ocr2vrf/coordinator/coordinator_test.go: `.Context(t)`
$DIR/core/services/ocr2/plugins/ocr2vrf/coordinator/coordinator_test.go: `.Run("valid output", func(t *testing.T) {
expected := [8]uint32{1, 2, 3, 4, 5, 6, 7, 8}
ret := [8]*big.Int{}
for i, delay := range expected {
ret[i] = big.NewInt(int64(delay))
}
onchainRouter := mocks.NewVRFBeaconCoordinator(t)
onchainRouter.
On("GetConfirmationDelays", mock.Anything).
Return(ret, nil)
c := &coordinator{
onchainRouter: onchainRouter,
}
confDelays, err := c.ConfirmationDelays(testutils.Context(t))
assert.NoError(t, err)
assert.Equal(t, expected[:], confDelays[:])
})`
$DIR/core/services/ocr2/plugins/ocr2vrf/coordinator/coordinator_test.go: `.NewInt(int64(delay))`
$DIR/core/services/ocr2/plugins/ocr2vrf/coordinator/coordinator_test.go: `.NewVRFBeaconCoordinator(t)`
$DIR/core/services/ocr2/plugins/ocr2vrf/coordinator/coordinator_test.go: `.
On("GetConfirmationDelays", mock.Anything)`
$DIR/core/services/ocr2/plugins/ocr2vrf/coordinator/coordinator_test.go: `.
Return(ret, nil)`
$DIR/core/services/ocr2/plugins/ocr2vrf/coordinator/coordinator_test.go: `.ConfirmationDelays(testutils.Context(t))`
$DIR/core/services/ocr2/plugins/ocr2vrf/coordinator/coordinator_test.go: `.Context(t)`
$DIR/core/services/ocr2/plugins/ocr2vrf/coordinator/coordinator_test.go: `.NewVRFBeaconCoordinator(t)`
$DIR/core/services/ocr2/plugins/ocr2vrf/coordinator/coordinator_test.go: `.
On("GetConfirmationDelays", mock.Anything)`
$DIR/core/services/ocr2/plugins/ocr2vrf/coordinator/coordinator_test.go: `.
Return([8]*big.Int{}, errors.New("rpc error"))`
$DIR/core/services/ocr2/plugins/ocr2vrf/coordinator/coordinator_test.go: `.New("rpc error")`
$DIR/core/services/ocr2/plugins/ocr2vrf/coordinator/coordinator_test.go: `.ConfirmationDelays(testutils.Context(t))`
$DIR/core/services/ocr2/plugins/ocr2vrf/coordinator/coordinator_test.go: `.Context(t)`
$DIR/core/services/ocr2/plugins/ocr2vrf/coordinator/coordinator_test.go: `.Run("valid output", func(t *testing.T) {
var keyIDBytes [32]byte
keyIDBytes[0] = 1
expected := dkg.KeyID(keyIDBytes)
onchainRouter := mocks.NewVRFBeaconCoordinator(t)
onchainRouter.
On("SKeyID", mock.Anything).
Return(keyIDBytes, nil)
c := &coordinator{
onchainRouter: onchainRouter,
}
keyID, err := c.KeyID(testutils.Context(t))
assert.NoError(t, err)
assert.Equal(t, expected[:], keyID[:])
})`
$DIR/core/services/ocr2/plugins/ocr2vrf/coordinator/coordinator_test.go: `.KeyID(keyIDBytes)`
$DIR/core/services/ocr2/plugins/ocr2vrf/coordinator/coordinator_test.go: `.NewVRFBeaconCoordinator(t)`
$DIR/core/services/ocr2/plugins/ocr2vrf/coordinator/coordinator_test.go: `.
On("SKeyID", mock.Anything)`
$DIR/core/services/ocr2/plugins/ocr2vrf/coordinator/coordinator_test.go: `.
Return(keyIDBytes, nil)`
$DIR/core/services/ocr2/plugins/ocr2vrf/coordinator/coordinator_test.go: `.KeyID(testutils.Context(t))`
$DIR/core/services/ocr2/plugins/ocr2vrf/coordinator/coordinator_test.go: `.Context(t)`
$DIR/core/services/ocr2/plugins/ocr2vrf/coordinator/coordinator_test.go: `.NewVRFBeaconCoordinator(t)`
$DIR/core/services/ocr2/plugins/ocr2vrf/coordinator/coordinator_test.go: `.
On("SKeyID", mock.Anything)`
$DIR/core/services/ocr2/plugins/ocr2vrf/coordinator/coordinator_test.go: `.
Return(emptyBytes, errors.New("rpc error"))`
$DIR/core/services/ocr2/plugins/ocr2vrf/coordinator/coordinator_test.go: `.New("rpc error")`
$DIR/core/services/ocr2/plugins/ocr2vrf/coordinator/coordinator_test.go: `.KeyID(testutils.Context(t))`
$DIR/core/services/ocr2/plugins/ocr2vrf/coordinator/coordinator_test.go: `.Context(t)`
$DIR/core/services/ocr2/plugins/ocr2vrf/coordinator/coordinator_test.go: `.Topic()`
$DIR/core/services/ocr2/plugins/ocr2vrf/coordinator/coordinator_test.go: `.Topic()`
$DIR/core/services/ocr2/plugins/ocr2vrf/coordinator/coordinator_test.go: `.Run("valid binary", func(t *testing.T) {
c := &coordinator{coordinatorConfig: newCoordinatorConfig(10), lggr: logger.TestLogger(t)}
cacheEvictionWindowSeconds := int64(60)
cacheEvictionWindow := time.Duration(cacheEvictionWindowSeconds * int64(time.Second))
c.toBeTransmittedBlocks = NewBlockCache[blockInReport](cacheEvictionWindow)
c.toBeTransmittedCallbacks = NewBlockCache[callbackInReport](cacheEvictionWindow)
newCoordinatorConfig := &ocr2vrftypes.CoordinatorConfig{
CacheEvictionWindowSeconds: 30,
BatchGasLimit: 1_000_000,
CoordinatorOverhead: 10_000,
CallbackOverhead: 10_000,
BlockGasOverhead: 10_000,
LookbackBlocks: 1_000,
}
require.Equal(t, cacheEvictionWindow, c.toBeTransmittedBlocks.evictionWindow)
require.Equal(t, cacheEvictionWindow, c.toBeTransmittedCallbacks.evictionWindow)
expectedConfigDigest := ocr2Types.ConfigDigest(common.HexToHash("asd"))
expectedOracleID := commontypes.OracleID(3)
err := c.UpdateConfiguration(ocr2vrf.OffchainConfig(newCoordinatorConfig), expectedConfigDigest, expectedOracleID)
newCacheEvictionWindow := time.Duration(newCoordinatorConfig.CacheEvictionWindowSeconds * int64(time.Second))
require.NoError(t, err)
require.Equal(t, newCoordinatorConfig.CacheEvictionWindowSeconds, c.coordinatorConfig.CacheEvictionWindowSeconds)
require.Equal(t, newCoordinatorConfig.BatchGasLimit, c.coordinatorConfig.BatchGasLimit)
require.Equal(t, newCoordinatorConfig.CoordinatorOverhead, c.coordinatorConfig.CoordinatorOverhead)
require.Equal(t, newCoordinatorConfig.CallbackOverhead, c.coordinatorConfig.CallbackOverhead)
require.Equal(t, newCoordinatorConfig.BlockGasOverhead, c.coordinatorConfig.BlockGasOverhead)
require.Equal(t, newCoordinatorConfig.LookbackBlocks, c.coordinatorConfig.LookbackBlocks)
require.Equal(t, newCacheEvictionWindow, c.toBeTransmittedBlocks.evictionWindow)
require.Equal(t, newCacheEvictionWindow, c.toBeTransmittedCallbacks.evictionWindow)
require.Equal(t, expectedConfigDigest, c.configDigest)
require.Equal(t, expectedOracleID, c.oracleID)
})`
$DIR/core/services/ocr2/plugins/ocr2vrf/coordinator/coordinator_test.go: `.TestLogger(t)`
$DIR/core/services/ocr2/plugins/ocr2vrf/coordinator/coordinator_test.go: `.Duration(cacheEvictionWindowSeconds * int64(time.Second))`
$DIR/core/services/ocr2/plugins/ocr2vrf/coordinator/coordinator_test.go: `.ConfigDigest(common.HexToHash("asd"))`
$DIR/core/services/ocr2/plugins/ocr2vrf/coordinator/coordinator_test.go: `.HexToHash("asd")`
$DIR/core/services/ocr2/plugins/ocr2vrf/coordinator/coordinator_test.go: `.OracleID(3)`
$DIR/core/services/ocr2/plugins/ocr2vrf/coordinator/coordinator_test.go: `.UpdateConfiguration(ocr2vrf.OffchainConfig(newCoordinatorConfig), expectedConfigDigest, expectedOracleID)`
$DIR/core/services/ocr2/plugins/ocr2vrf/coordinator/coordinator_test.go: `.OffchainConfig(newCoordinatorConfig)`
$DIR/core/services/ocr2/plugins/ocr2vrf/coordinator/coordinator_test.go: `.Duration(newCoordinatorConfig.CacheEvictionWindowSeconds * int64(time.Second))`
$DIR/core/services/ocr2/plugins/ocr2vrf/coordinator/coordinator_test.go: `.TestLogger(t)`
$DIR/core/services/ocr2/plugins/ocr2vrf/coordinator/coordinator_test.go: `.UpdateConfiguration([]byte{123}, ocr2Types.ConfigDigest{}, commontypes.OracleID(0))`
$DIR/core/services/ocr2/plugins/ocr2vrf/coordinator/coordinator_test.go: `.OracleID(0)`
$DIR/core/services/ocr2/plugins/ocr2vrf/coordinator/coordinator_test.go: `.String()`
$DIR/core/services/ocr2/plugins/ocr2vrf/coordinator/coordinator_test.go: `.String()`
$DIR/core/services/ocr2/plugins/ocr2vrf/coordinator/coordinator_test.go: `.String()`
$DIR/core/services/ocr2/plugins/ocr2vrf/coordinator/coordinator_test.go: `.String()`
$DIR/core/services/ocr2/plugins/ocr2vrf/coordinator/ocr_cache_test.go: `t.Run("Happy path, no overwrites.", func(t *testing.T) {
now := time.Now().UTC()
tests := []struct {
Key common.Hash
Value int
}{
{Key: common.HexToHash("0x0"), Value: 1},
{Key: common.HexToHash("0x1"), Value: 2},
{Key: common.HexToHash("0x2"), Value: 3},
{Key: common.HexToHash("0x3"), Value: 4},
{Key: common.HexToHash("0x4"), Value: 5},
}
c := NewBlockCache[int](100 * time.Second)
// Populate cache with ordered items.
for i, test := range tests {
c.CacheItem(test.Value, test.Key, getSecondsAfterNow(now, i))
item := c.GetItem(test.Key)
assert.Equal(t, test.Value, *item)
}
// Ensure cache has 5 items, with the newest and oldest pointers correct.
assert.Equal(t, 5, len(c.cache), "cache should contain 5 keys")
// Evict all items.
evictionTime := getSecondsAfterNow(now, 105)
c.EvictExpiredItems(evictionTime)
assert.Equal(t, 0, len(c.cache), "cache should contain 0 keys")
// Cache a new item.
c.CacheItem(tests[0].Value, tests[0].Key, getSecondsAfterNow(now, 10))
item := c.GetItem(tests[0].Key)
assert.Equal(t, tests[0].Value, *item)
// Attempting a new eviction should have no effect.
c.EvictExpiredItems(evictionTime)
assert.Equal(t, 1, len(c.cache), "cache should contain 1 key")
// Reduce eviction window.
c.SetEvictonWindow(time.Second * 50)
// Attempting a new eviction will remove the added item.
c.EvictExpiredItems(evictionTime)
assert.Equal(t, 0, len(c.cache), "cache should contain 0 keys")
})`
$DIR/core/services/ocr2/plugins/ocr2vrf/coordinator/ocr_cache_test.go: `c.CacheItem(test.Value, test.Key, getSecondsAfterNow(now, i))`
$DIR/core/services/ocr2/plugins/ocr2vrf/coordinator/ocr_cache_test.go: `c.EvictExpiredItems(evictionTime)`
$DIR/core/services/ocr2/plugins/ocr2vrf/coordinator/ocr_cache_test.go: `c.CacheItem(tests[0].Value, tests[0].Key, getSecondsAfterNow(now, 10))`
$DIR/core/services/ocr2/plugins/ocr2vrf/coordinator/ocr_cache_test.go: `c.EvictExpiredItems(evictionTime)`
$DIR/core/services/ocr2/plugins/ocr2vrf/coordinator/ocr_cache_test.go: `c.SetEvictonWindow(time.Second * 50)`
$DIR/core/services/ocr2/plugins/ocr2vrf/coordinator/ocr_cache_test.go: `c.EvictExpiredItems(evictionTime)`
$DIR/core/services/ocr2/plugins/ocr2vrf/coordinator/ocr_cache_test.go: `t.Run("Happy path, override middle item.", func(t *testing.T) {
now := time.Now().UTC()
tests := []struct {
Key common.Hash
Value int
}{
{Key: common.HexToHash("0x0"), Value: 1},
{Key: common.HexToHash("0x1"), Value: 2},
{Key: common.HexToHash("0x2"), Value: 3},
{Key: common.HexToHash("0x3"), Value: 4},
{Key: common.HexToHash("0x1"), Value: 5},
}
c := NewBlockCache[int](100 * time.Second)
// Populate cache with items.
for i, test := range tests {
c.CacheItem(test.Value, test.Key, getSecondsAfterNow(now, i))
item := c.GetItem(test.Key)
assert.Equal(t, test.Value, *item)
}
// Ensure cache has 4 items, with the newest and oldest pointers correct.
assert.Equal(t, 4, len(c.cache), "cache should contain 4 keys")
// Evict all but two items.
c.EvictExpiredItems(getSecondsAfterNow(now, 103))
assert.Equal(t, 2, len(c.cache), "cache should contain 2 keys")
// Evict all but one items.
c.EvictExpiredItems(getSecondsAfterNow(now, 104))
assert.Equal(t, 1, len(c.cache), "cache should contain 1 keys")
// Evict remaining item.
c.EvictExpiredItems(getSecondsAfterNow(now, 105))
assert.Equal(t, 0, len(c.cache), "cache should contain 0 keys")
})`
$DIR/core/services/ocr2/plugins/ocr2vrf/coordinator/ocr_cache_test.go: `c.CacheItem(test.Value, test.Key, getSecondsAfterNow(now, i))`
$DIR/core/services/ocr2/plugins/ocr2vrf/coordinator/ocr_cache_test.go: `c.EvictExpiredItems(getSecondsAfterNow(now, 103))`
$DIR/core/services/ocr2/plugins/ocr2vrf/coordinator/ocr_cache_test.go: `c.EvictExpiredItems(getSecondsAfterNow(now, 104))`
$DIR/core/services/ocr2/plugins/ocr2vrf/coordinator/ocr_cache_test.go: `c.EvictExpiredItems(getSecondsAfterNow(now, 105))`
$DIR/core/services/ocr2/plugins/ocr2vrf/coordinator/ocr_cache_test.go: `c.CacheItem(test.Value, test.Key, getSecondsAfterNow(now, i))`
$DIR/core/services/ocr2/plugins/ocr2vrf/coordinator/ocr_cache_test.go: `c.EvictExpiredItems(getSecondsAfterNow(now, 104))`
$DIR/core/services/ocr2/plugins/ocr2vrf/coordinator/ocr_cache_test.go: `c.CacheItem(tests[1].Value, tests[1].Key, getSecondsAfterNow(now, 110))`
$DIR/core/services/ocr2/plugins/ocr2vrf/coordinator/ocr_cache_test.go: `c.CacheItem(tests[0].Value, tests[0].Key, getSecondsAfterNow(now, 111))`
$DIR/core/services/ocr2/plugins/ocr2vrf/coordinator/ocr_cache_test.go: `item = c.GetItem(tests[0].Key)`
$DIR/core/services/ocr2/plugins/ocr2vrf/coordinator/ocr_cache_test.go: `c.CacheItem(tests[0].Value, tests[0].Key, getSecondsAfterNow(now, 112))`
$DIR/core/services/ocr2/plugins/ocr2vrf/coordinator/ocr_cache_test.go: `item = c.GetItem(tests[0].Key)`
$DIR/core/services/ocr2/plugins/ocr2vrf/coordinator/ocr_cache_test.go: `.Run("Happy path, no overwrites.", func(t *testing.T) {
now := time.Now().UTC()
tests := []struct {
Key common.Hash
Value int
}{
{Key: common.HexToHash("0x0"), Value: 1},
{Key: common.HexToHash("0x1"), Value: 2},
{Key: common.HexToHash("0x2"), Value: 3},
{Key: common.HexToHash("0x3"), Value: 4},
{Key: common.HexToHash("0x4"), Value: 5},
}
c := NewBlockCache[int](100 * time.Second)
// Populate cache with ordered items.
for i, test := range tests {
c.CacheItem(test.Value, test.Key, getSecondsAfterNow(now, i))
item := c.GetItem(test.Key)
assert.Equal(t, test.Value, *item)
}
// Ensure cache has 5 items, with the newest and oldest pointers correct.
assert.Equal(t, 5, len(c.cache), "cache should contain 5 keys")
// Evict all items.
evictionTime := getSecondsAfterNow(now, 105)
c.EvictExpiredItems(evictionTime)
assert.Equal(t, 0, len(c.cache), "cache should contain 0 keys")
// Cache a new item.
c.CacheItem(tests[0].Value, tests[0].Key, getSecondsAfterNow(now, 10))
item := c.GetItem(tests[0].Key)
assert.Equal(t, tests[0].Value, *item)
// Attempting a new eviction should have no effect.
c.EvictExpiredItems(evictionTime)
assert.Equal(t, 1, len(c.cache), "cache should contain 1 key")
// Reduce eviction window.
c.SetEvictonWindow(time.Second * 50)
// Attempting a new eviction will remove the added item.
c.EvictExpiredItems(evictionTime)
assert.Equal(t, 0, len(c.cache), "cache should contain 0 keys")
})`
$DIR/core/services/ocr2/plugins/ocr2vrf/coordinator/ocr_cache_test.go: `.Now()`
$DIR/core/services/ocr2/plugins/ocr2vrf/coordinator/ocr_cache_test.go: `.UTC()`
$DIR/core/services/ocr2/plugins/ocr2vrf/coordinator/ocr_cache_test.go: `.HexToHash("0x0")`
$DIR/core/services/ocr2/plugins/ocr2vrf/coordinator/ocr_cache_test.go: `.HexToHash("0x1")`
$DIR/core/services/ocr2/plugins/ocr2vrf/coordinator/ocr_cache_test.go: `.HexToHash("0x2")`
$DIR/core/services/ocr2/plugins/ocr2vrf/coordinator/ocr_cache_test.go: `.HexToHash("0x3")`
$DIR/core/services/ocr2/plugins/ocr2vrf/coordinator/ocr_cache_test.go: `.HexToHash("0x4")`
$DIR/core/services/ocr2/plugins/ocr2vrf/coordinator/ocr_cache_test.go: `.CacheItem(test.Value, test.Key, getSecondsAfterNow(now, i))`
$DIR/core/services/ocr2/plugins/ocr2vrf/coordinator/ocr_cache_test.go: `.GetItem(test.Key)`
$DIR/core/services/ocr2/plugins/ocr2vrf/coordinator/ocr_cache_test.go: `.EvictExpiredItems(evictionTime)`
$DIR/core/services/ocr2/plugins/ocr2vrf/coordinator/ocr_cache_test.go: `.CacheItem(tests[0].Value, tests[0].Key, getSecondsAfterNow(now, 10))`
$DIR/core/services/ocr2/plugins/ocr2vrf/coordinator/ocr_cache_test.go: `.GetItem(tests[0].Key)`
$DIR/core/services/ocr2/plugins/ocr2vrf/coordinator/ocr_cache_test.go: `.EvictExpiredItems(evictionTime)`
$DIR/core/services/ocr2/plugins/ocr2vrf/coordinator/ocr_cache_test.go: `.SetEvictonWindow(time.Second * 50)`
$DIR/core/services/ocr2/plugins/ocr2vrf/coordinator/ocr_cache_test.go: `.EvictExpiredItems(evictionTime)`
$DIR/core/services/ocr2/plugins/ocr2vrf/coordinator/ocr_cache_test.go: `.Run("Happy path, override middle item.", func(t *testing.T) {
now := time.Now().UTC()
tests := []struct {
Key common.Hash
Value int
}{
{Key: common.HexToHash("0x0"), Value: 1},
{Key: common.HexToHash("0x1"), Value: 2},
{Key: common.HexToHash("0x2"), Value: 3},
{Key: common.HexToHash("0x3"), Value: 4},
{Key: common.HexToHash("0x1"), Value: 5},
}
c := NewBlockCache[int](100 * time.Second)
// Populate cache with items.
for i, test := range tests {
c.CacheItem(test.Value, test.Key, getSecondsAfterNow(now, i))
item := c.GetItem(test.Key)
assert.Equal(t, test.Value, *item)
}
// Ensure cache has 4 items, with the newest and oldest pointers correct.
assert.Equal(t, 4, len(c.cache), "cache should contain 4 keys")
// Evict all but two items.
c.EvictExpiredItems(getSecondsAfterNow(now, 103))
assert.Equal(t, 2, len(c.cache), "cache should contain 2 keys")
// Evict all but one items.
c.EvictExpiredItems(getSecondsAfterNow(now, 104))
assert.Equal(t, 1, len(c.cache), "cache should contain 1 keys")
// Evict remaining item.
c.EvictExpiredItems(getSecondsAfterNow(now, 105))
assert.Equal(t, 0, len(c.cache), "cache should contain 0 keys")
})`
$DIR/core/services/ocr2/plugins/ocr2vrf/coordinator/ocr_cache_test.go: `.Now()`
$DIR/core/services/ocr2/plugins/ocr2vrf/coordinator/ocr_cache_test.go: `.UTC()`
$DIR/core/services/ocr2/plugins/ocr2vrf/coordinator/ocr_cache_test.go: `.HexToHash("0x0")`
$DIR/core/services/ocr2/plugins/ocr2vrf/coordinator/ocr_cache_test.go: `.HexToHash("0x1")`
$DIR/core/services/ocr2/plugins/ocr2vrf/coordinator/ocr_cache_test.go: `.HexToHash("0x2")`
$DIR/core/services/ocr2/plugins/ocr2vrf/coordinator/ocr_cache_test.go: `.HexToHash("0x3")`
$DIR/core/services/ocr2/plugins/ocr2vrf/coordinator/ocr_cache_test.go: `.HexToHash("0x1")`
$DIR/core/services/ocr2/plugins/ocr2vrf/coordinator/ocr_cache_test.go: `.CacheItem(test.Value, test.Key, getSecondsAfterNow(now, i))`
$DIR/core/services/ocr2/plugins/ocr2vrf/coordinator/ocr_cache_test.go: `.GetItem(test.Key)`
$DIR/core/services/ocr2/plugins/ocr2vrf/coordinator/ocr_cache_test.go: `.EvictExpiredItems(getSecondsAfterNow(now, 103))`
$DIR/core/services/ocr2/plugins/ocr2vrf/coordinator/ocr_cache_test.go: `.EvictExpiredItems(getSecondsAfterNow(now, 104))`
$DIR/core/services/ocr2/plugins/ocr2vrf/coordinator/ocr_cache_test.go: `.EvictExpiredItems(getSecondsAfterNow(now, 105))`
$DIR/core/services/ocr2/plugins/ocr2vrf/coordinator/ocr_cache_test.go: `.Now()`
$DIR/core/services/ocr2/plugins/ocr2vrf/coordinator/ocr_cache_test.go: `.UTC()`
$DIR/core/services/ocr2/plugins/ocr2vrf/coordinator/ocr_cache_test.go: `.HexToHash("0x0")`
$DIR/core/services/ocr2/plugins/ocr2vrf/coordinator/ocr_cache_test.go: `.HexToHash("0x1")`
$DIR/core/services/ocr2/plugins/ocr2vrf/coordinator/ocr_cache_test.go: `.HexToHash("0x2")`
$DIR/core/services/ocr2/plugins/ocr2vrf/coordinator/ocr_cache_test.go: `.HexToHash("0x3")`
$DIR/core/services/ocr2/plugins/ocr2vrf/coordinator/ocr_cache_test.go: `.HexToHash("0x0")`
$DIR/core/services/ocr2/plugins/ocr2vrf/coordinator/ocr_cache_test.go: `.CacheItem(test.Value, test.Key, getSecondsAfterNow(now, i))`
$DIR/core/services/ocr2/plugins/ocr2vrf/coordinator/ocr_cache_test.go: `.GetItem(test.Key)`
$DIR/core/services/ocr2/plugins/ocr2vrf/coordinator/ocr_cache_test.go: `.EvictExpiredItems(getSecondsAfterNow(now, 104))`
$DIR/core/services/ocr2/plugins/ocr2vrf/coordinator/ocr_cache_test.go: `.CacheItem(tests[1].Value, tests[1].Key, getSecondsAfterNow(now, 110))`
$DIR/core/services/ocr2/plugins/ocr2vrf/coordinator/ocr_cache_test.go: `.GetItem(tests[1].Key)`
$DIR/core/services/ocr2/plugins/ocr2vrf/coordinator/ocr_cache_test.go: `.CacheItem(tests[0].Value, tests[0].Key, getSecondsAfterNow(now, 111))`
$DIR/core/services/ocr2/plugins/ocr2vrf/coordinator/ocr_cache_test.go: `.GetItem(tests[0].Key)`
$DIR/core/services/ocr2/plugins/ocr2vrf/coordinator/ocr_cache_test.go: `.CacheItem(tests[0].Value, tests[0].Key, getSecondsAfterNow(now, 112))`
$DIR/core/services/ocr2/plugins/ocr2vrf/coordinator/ocr_cache_test.go: `.GetItem(tests[0].Key)`
$DIR/core/services/ocr2/plugins/ocr2vrf/coordinator/router_test.go: `beacon.On("SProvingKeyHash", mock.Anything).Return(keyHash, nil).Once()`
$DIR/core/services/ocr2/plugins/ocr2vrf/coordinator/router_test.go: `beacon.On("SKeyID", mock.Anything).Return(keyID, nil).Once()`
$DIR/core/services/ocr2/plugins/ocr2vrf/coordinator/router_test.go: `coordinator.On("IBeaconPeriodBlocks", mock.Anything).Return(periodBlocks, nil).Once()`
$DIR/core/services/ocr2/plugins/ocr2vrf/coordinator/router_test.go: `coordinator.On("GetConfirmationDelays", mock.Anything).Return(confDelays, nil).Once()`
$DIR/core/services/ocr2/plugins/ocr2vrf/coordinator/router_test.go: `t.Run("parse beacon log", func(t *testing.T) {
addr := newAddress(t)
log := types.Log{
Address: addr,
}
parsedLog := vrf_beacon.VRFBeaconNewTransmission{}
beacon := mocks.NewVRFBeaconInterface(t)
router := vrfRouter{
beacon: beacon,
}
beacon.On("Address").Return(addr).Once()
beacon.On("ParseLog", log).Return(parsedLog, nil).Once()
result, err := router.ParseLog(log)
assert.NoError(t, err)
assert.Equal(t, result, parsedLog)
})`
$DIR/core/services/ocr2/plugins/ocr2vrf/coordinator/router_test.go: `beacon.On("Address").Return(addr).Once()`
$DIR/core/services/ocr2/plugins/ocr2vrf/coordinator/router_test.go: `beacon.On("ParseLog", log).Return(parsedLog, nil).Once()`
$DIR/core/services/ocr2/plugins/ocr2vrf/coordinator/router_test.go: `t.Run("parse coordinator log", func(t *testing.T) {
addr := newAddress(t)
log := types.Log{
Address: addr,
}
parsedLog := vrf_coordinator.VRFCoordinatorRandomnessRequested{}
beacon := mocks.NewVRFBeaconInterface(t)
coordinator := mocks.NewVRFCoordinatorInterface(t)
router := vrfRouter{
beacon: beacon,
coordinator: coordinator,
}
beacon.On("Address").Return(newAddress(t)).Once()
coordinator.On("Address").Return(addr).Once()
coordinator.On("ParseLog", log).Return(parsedLog, nil).Once()
result, err := router.ParseLog(log)
assert.NoError(t, err)
assert.Equal(t, result, parsedLog)
})`
$DIR/core/services/ocr2/plugins/ocr2vrf/coordinator/router_test.go: `beacon.On("Address").Return(newAddress(t)).Once()`
$DIR/core/services/ocr2/plugins/ocr2vrf/coordinator/router_test.go: `coordinator.On("Address").Return(addr).Once()`
$DIR/core/services/ocr2/plugins/ocr2vrf/coordinator/router_test.go: `coordinator.On("ParseLog", log).Return(parsedLog, nil).Once()`
$DIR/core/services/ocr2/plugins/ocr2vrf/coordinator/router_test.go: `beacon.On("Address").Return(newAddress(t)).Once()`
$DIR/core/services/ocr2/plugins/ocr2vrf/coordinator/router_test.go: `coordinator.On("Address").Return(newAddress(t)).Once()`
$DIR/core/services/ocr2/plugins/ocr2vrf/coordinator/router_test.go: `.NewVRFBeaconInterface(t)`
$DIR/core/services/ocr2/plugins/ocr2vrf/coordinator/router_test.go: `.On("SProvingKeyHash", mock.Anything)`
$DIR/core/services/ocr2/plugins/ocr2vrf/coordinator/router_test.go: `.Return(keyHash, nil)`
$DIR/core/services/ocr2/plugins/ocr2vrf/coordinator/router_test.go: `.Once()`
$DIR/core/services/ocr2/plugins/ocr2vrf/coordinator/router_test.go: `.SProvingKeyHash(nilOpts)`
$DIR/core/services/ocr2/plugins/ocr2vrf/coordinator/router_test.go: `.NewVRFBeaconInterface(t)`
$DIR/core/services/ocr2/plugins/ocr2vrf/coordinator/router_test.go: `.On("SKeyID", mock.Anything)`
$DIR/core/services/ocr2/plugins/ocr2vrf/coordinator/router_test.go: `.Return(keyID, nil)`
$DIR/core/services/ocr2/plugins/ocr2vrf/coordinator/router_test.go: `.Once()`
$DIR/core/services/ocr2/plugins/ocr2vrf/coordinator/router_test.go: `.SKeyID(nilOpts)`
$DIR/core/services/ocr2/plugins/ocr2vrf/coordinator/router_test.go: `.NewVRFCoordinatorInterface(t)`
$DIR/core/services/ocr2/plugins/ocr2vrf/coordinator/router_test.go: `.NewInt(3)`
$DIR/core/services/ocr2/plugins/ocr2vrf/coordinator/router_test.go: `.On("IBeaconPeriodBlocks", mock.Anything)`
$DIR/core/services/ocr2/plugins/ocr2vrf/coordinator/router_test.go: `.Return(periodBlocks, nil)`
$DIR/core/services/ocr2/plugins/ocr2vrf/coordinator/router_test.go: `.Once()`
$DIR/core/services/ocr2/plugins/ocr2vrf/coordinator/router_test.go: `.IBeaconPeriodBlocks(nilOpts)`
$DIR/core/services/ocr2/plugins/ocr2vrf/coordinator/router_test.go: `.NewVRFCoordinatorInterface(t)`
$DIR/core/services/ocr2/plugins/ocr2vrf/coordinator/router_test.go: `.NewInt(4)`
$DIR/core/services/ocr2/plugins/ocr2vrf/coordinator/router_test.go: `.On("GetConfirmationDelays", mock.Anything)`
$DIR/core/services/ocr2/plugins/ocr2vrf/coordinator/router_test.go: `.Return(confDelays, nil)`
$DIR/core/services/ocr2/plugins/ocr2vrf/coordinator/router_test.go: `.Once()`
$DIR/core/services/ocr2/plugins/ocr2vrf/coordinator/router_test.go: `.GetConfirmationDelays(nilOpts)`
$DIR/core/services/ocr2/plugins/ocr2vrf/coordinator/router_test.go: `.Run("parse beacon log", func(t *testing.T) {
addr := newAddress(t)
log := types.Log{
Address: addr,
}
parsedLog := vrf_beacon.VRFBeaconNewTransmission{}
beacon := mocks.NewVRFBeaconInterface(t)
router := vrfRouter{
beacon: beacon,
}
beacon.On("Address").Return(addr).Once()
beacon.On("ParseLog", log).Return(parsedLog, nil).Once()
result, err := router.ParseLog(log)
assert.NoError(t, err)
assert.Equal(t, result, parsedLog)
})`
$DIR/core/services/ocr2/plugins/ocr2vrf/coordinator/router_test.go: `.NewVRFBeaconInterface(t)`
$DIR/core/services/ocr2/plugins/ocr2vrf/coordinator/router_test.go: `.On("Address")`
$DIR/core/services/ocr2/plugins/ocr2vrf/coordinator/router_test.go: `.Return(addr)`
$DIR/core/services/ocr2/plugins/ocr2vrf/coordinator/router_test.go: `.Once()`
$DIR/core/services/ocr2/plugins/ocr2vrf/coordinator/router_test.go: `.On("ParseLog", log)`
$DIR/core/services/ocr2/plugins/ocr2vrf/coordinator/router_test.go: `.Return(parsedLog, nil)`
$DIR/core/services/ocr2/plugins/ocr2vrf/coordinator/router_test.go: `.Once()`
$DIR/core/services/ocr2/plugins/ocr2vrf/coordinator/router_test.go: `.ParseLog(log)`
$DIR/core/services/ocr2/plugins/ocr2vrf/coordinator/router_test.go: `.Run("parse coordinator log", func(t *testing.T) {
addr := newAddress(t)
log := types.Log{
Address: addr,
}
parsedLog := vrf_coordinator.VRFCoordinatorRandomnessRequested{}
beacon := mocks.NewVRFBeaconInterface(t)
coordinator := mocks.NewVRFCoordinatorInterface(t)
router := vrfRouter{
beacon: beacon,
coordinator: coordinator,
}
beacon.On("Address").Return(newAddress(t)).Once()
coordinator.On("Address").Return(addr).Once()
coordinator.On("ParseLog", log).Return(parsedLog, nil).Once()
result, err := router.ParseLog(log)
assert.NoError(t, err)
assert.Equal(t, result, parsedLog)
})`
$DIR/core/services/ocr2/plugins/ocr2vrf/coordinator/router_test.go: `.NewVRFBeaconInterface(t)`
$DIR/core/services/ocr2/plugins/ocr2vrf/coordinator/router_test.go: `.NewVRFCoordinatorInterface(t)`
$DIR/core/services/ocr2/plugins/ocr2vrf/coordinator/router_test.go: `.On("Address")`
$DIR/core/services/ocr2/plugins/ocr2vrf/coordinator/router_test.go: `.Return(newAddress(t))`
$DIR/core/services/ocr2/plugins/ocr2vrf/coordinator/router_test.go: `.Once()`
$DIR/core/services/ocr2/plugins/ocr2vrf/coordinator/router_test.go: `.On("Address")`
$DIR/core/services/ocr2/plugins/ocr2vrf/coordinator/router_test.go: `.Return(addr)`
$DIR/core/services/ocr2/plugins/ocr2vrf/coordinator/router_test.go: `.Once()`
$DIR/core/services/ocr2/plugins/ocr2vrf/coordinator/router_test.go: `.On("ParseLog", log)`
$DIR/core/services/ocr2/plugins/ocr2vrf/coordinator/router_test.go: `.Return(parsedLog, nil)`
$DIR/core/services/ocr2/plugins/ocr2vrf/coordinator/router_test.go: `.Once()`
$DIR/core/services/ocr2/plugins/ocr2vrf/coordinator/router_test.go: `.ParseLog(log)`
$DIR/core/services/ocr2/plugins/ocr2vrf/coordinator/router_test.go: `.NewVRFBeaconInterface(t)`
$DIR/core/services/ocr2/plugins/ocr2vrf/coordinator/router_test.go: `.NewVRFCoordinatorInterface(t)`
$DIR/core/services/ocr2/plugins/ocr2vrf/coordinator/router_test.go: `.On("Address")`
$DIR/core/services/ocr2/plugins/ocr2vrf/coordinator/router_test.go: `.Return(newAddress(t))`
$DIR/core/services/ocr2/plugins/ocr2vrf/coordinator/router_test.go: `.Once()`
$DIR/core/services/ocr2/plugins/ocr2vrf/coordinator/router_test.go: `.On("Address")`
$DIR/core/services/ocr2/plugins/ocr2vrf/coordinator/router_test.go: `.Return(newAddress(t))`
$DIR/core/services/ocr2/plugins/ocr2vrf/coordinator/router_test.go: `.Once()`
$DIR/core/services/ocr2/plugins/ocr2vrf/coordinator/router_test.go: `.ParseLog(log)`
$DIR/core/services/ocr2/plugins/ocr2vrf/internal/ocr2vrf_integration_test.go: `testutils.SkipFlakey(t, "https://smartcontract-it.atlassian.net/browse/VRF-688")`
$DIR/core/services/ocr2/plugins/ocr2vrf/internal/ocr2vrf_integration_test.go: `testutils.SkipFlakey(t, "https://smartcontract-it.atlassian.net/browse/VRF-688")`
$DIR/core/services/ocr2/plugins/ocr2vrf/internal/ocr2vrf_integration_test.go: `.SkipFlakey(t, "https://smartcontract-it.atlassian.net/browse/VRF-688")`
$DIR/core/services/ocr2/plugins/ocr2vrf/internal/ocr2vrf_integration_test.go: `.SkipFlakey(t, "https://smartcontract-it.atlassian.net/browse/VRF-688")`
$DIR/core/services/ocr2/plugins/ocr2vrf/juelsfeecoin/link_eth_price_provider_test.go: `t.Run("returns juels per fee coin", func(t *testing.T) {
mockAggregator := mocks.NewAggregatorV3Interface(t)
latestRoundData := aggregator_v3_interface.LatestRoundData{Answer: big.NewInt(10000)}
mockAggregator.On("LatestRoundData", mock.Anything).Return(latestRoundData, nil)
// Start linkEthPriceProvider.
provider := &linkEthPriceProvider{
aggregator: mockAggregator,
timeout: time.Second / 2,
interval: time.Second,
stop: make(chan struct{}),
currentJuelsPerFeeCoin: big.NewInt(0),
lggr: logger.TestLogger(t),
}
go provider.run()
t.Cleanup(func() { close(provider.stop) })
// Assert correct initial price.
price, err := provider.JuelsPerFeeCoin()
require.NoError(t, err)
assert.Equal(t, int64(0), price.Int64())
// Wait until the price is updated.
time.Sleep(2 * time.Second)
// Ensure the correct price is returned.
price, err = provider.JuelsPerFeeCoin()
require.NoError(t, err)
assert.Equal(t, int64(10000), price.Int64())
})`
$DIR/core/services/ocr2/plugins/ocr2vrf/juelsfeecoin/link_eth_price_provider_test.go: `mockAggregator.On("LatestRoundData", mock.Anything).Return(latestRoundData, nil)`
$DIR/core/services/ocr2/plugins/ocr2vrf/juelsfeecoin/link_eth_price_provider_test.go: `go provider.run()`
$DIR/core/services/ocr2/plugins/ocr2vrf/juelsfeecoin/link_eth_price_provider_test.go: `t.Cleanup(func() { close(provider.stop) })`
$DIR/core/services/ocr2/plugins/ocr2vrf/juelsfeecoin/link_eth_price_provider_test.go: `close(provider.stop)`
$DIR/core/services/ocr2/plugins/ocr2vrf/juelsfeecoin/link_eth_price_provider_test.go: `time.Sleep(2 * time.Second)`
$DIR/core/services/ocr2/plugins/ocr2vrf/juelsfeecoin/link_eth_price_provider_test.go: `price, err = provider.JuelsPerFeeCoin()`
$DIR/core/services/ocr2/plugins/ocr2vrf/juelsfeecoin/link_eth_price_provider_test.go: `t.Run("returns juels per fee coin (error updating)", func(t *testing.T) {
mockAggregator := mocks.NewAggregatorV3Interface(t)
mockAggregator.On("LatestRoundData", mock.Anything).Return(aggregator_v3_interface.LatestRoundData{},
errors.New("could not fetch"))
// Start linkEthPriceProvider.
provider := &linkEthPriceProvider{
aggregator: mockAggregator,
timeout: time.Second / 2,
interval: time.Second,
stop: make(chan struct{}),
currentJuelsPerFeeCoin: big.NewInt(0),
lggr: logger.TestLogger(t),
}
go provider.run()
t.Cleanup(func() { close(provider.stop) })
// Assert correct initial price.
price, err := provider.JuelsPerFeeCoin()
require.NoError(t, err)
assert.Equal(t, int64(0), price.Int64())
// Wait until the price is updated.
time.Sleep(2 * time.Second)
// Ensure the correct price is returned.
price, err = provider.JuelsPerFeeCoin()
require.NoError(t, err)
assert.Equal(t, int64(0), price.Int64())
})`
$DIR/core/services/ocr2/plugins/ocr2vrf/juelsfeecoin/link_eth_price_provider_test.go: `mockAggregator.On("LatestRoundData", mock.Anything).Return(aggregator_v3_interface.LatestRoundData{},
errors.New("could not fetch"))`
$DIR/core/services/ocr2/plugins/ocr2vrf/juelsfeecoin/link_eth_price_provider_test.go: `go provider.run()`
$DIR/core/services/ocr2/plugins/ocr2vrf/juelsfeecoin/link_eth_price_provider_test.go: `t.Cleanup(func() { close(provider.stop) })`
$DIR/core/services/ocr2/plugins/ocr2vrf/juelsfeecoin/link_eth_price_provider_test.go: `close(provider.stop)`
$DIR/core/services/ocr2/plugins/ocr2vrf/juelsfeecoin/link_eth_price_provider_test.go: `time.Sleep(2 * time.Second)`
$DIR/core/services/ocr2/plugins/ocr2vrf/juelsfeecoin/link_eth_price_provider_test.go: `price, err = provider.JuelsPerFeeCoin()`
$DIR/core/services/ocr2/plugins/ocr2vrf/juelsfeecoin/link_eth_price_provider_test.go: `.Run("returns juels per fee coin", func(t *testing.T) {
mockAggregator := mocks.NewAggregatorV3Interface(t)
latestRoundData := aggregator_v3_interface.LatestRoundData{Answer: big.NewInt(10000)}
mockAggregator.On("LatestRoundData", mock.Anything).Return(latestRoundData, nil)
// Start linkEthPriceProvider.
provider := &linkEthPriceProvider{
aggregator: mockAggregator,
timeout: time.Second / 2,
interval: time.Second,
stop: make(chan struct{}),
currentJuelsPerFeeCoin: big.NewInt(0),
lggr: logger.TestLogger(t),
}
go provider.run()
t.Cleanup(func() { close(provider.stop) })
// Assert correct initial price.
price, err := provider.JuelsPerFeeCoin()
require.NoError(t, err)
assert.Equal(t, int64(0), price.Int64())
// Wait until the price is updated.
time.Sleep(2 * time.Second)
// Ensure the correct price is returned.
price, err = provider.JuelsPerFeeCoin()
require.NoError(t, err)
assert.Equal(t, int64(10000), price.Int64())
})`
$DIR/core/services/ocr2/plugins/ocr2vrf/juelsfeecoin/link_eth_price_provider_test.go: `.NewAggregatorV3Interface(t)`
$DIR/core/services/ocr2/plugins/ocr2vrf/juelsfeecoin/link_eth_price_provider_test.go: `.NewInt(10000)`
$DIR/core/services/ocr2/plugins/ocr2vrf/juelsfeecoin/link_eth_price_provider_test.go: `.On("LatestRoundData", mock.Anything)`
$DIR/core/services/ocr2/plugins/ocr2vrf/juelsfeecoin/link_eth_price_provider_test.go: `.Return(latestRoundData, nil)`
$DIR/core/services/ocr2/plugins/ocr2vrf/juelsfeecoin/link_eth_price_provider_test.go: `.NewInt(0)`
$DIR/core/services/ocr2/plugins/ocr2vrf/juelsfeecoin/link_eth_price_provider_test.go: `.TestLogger(t)`
$DIR/core/services/ocr2/plugins/ocr2vrf/juelsfeecoin/link_eth_price_provider_test.go: `.run()`
$DIR/core/services/ocr2/plugins/ocr2vrf/juelsfeecoin/link_eth_price_provider_test.go: `.Cleanup(func() { close(provider.stop) })`
$DIR/core/services/ocr2/plugins/ocr2vrf/juelsfeecoin/link_eth_price_provider_test.go: `.JuelsPerFeeCoin()`
$DIR/core/services/ocr2/plugins/ocr2vrf/juelsfeecoin/link_eth_price_provider_test.go: `.Sleep(2 * time.Second)`
$DIR/core/services/ocr2/plugins/ocr2vrf/juelsfeecoin/link_eth_price_provider_test.go: `.JuelsPerFeeCoin()`
$DIR/core/services/ocr2/plugins/ocr2vrf/juelsfeecoin/link_eth_price_provider_test.go: `.Run("returns juels per fee coin (error updating)", func(t *testing.T) {
mockAggregator := mocks.NewAggregatorV3Interface(t)
mockAggregator.On("LatestRoundData", mock.Anything).Return(aggregator_v3_interface.LatestRoundData{},
errors.New("could not fetch"))
// Start linkEthPriceProvider.
provider := &linkEthPriceProvider{
aggregator: mockAggregator,
timeout: time.Second / 2,
interval: time.Second,
stop: make(chan struct{}),
currentJuelsPerFeeCoin: big.NewInt(0),
lggr: logger.TestLogger(t),
}
go provider.run()
t.Cleanup(func() { close(provider.stop) })
// Assert correct initial price.
price, err := provider.JuelsPerFeeCoin()
require.NoError(t, err)
assert.Equal(t, int64(0), price.Int64())
// Wait until the price is updated.
time.Sleep(2 * time.Second)
// Ensure the correct price is returned.
price, err = provider.JuelsPerFeeCoin()
require.NoError(t, err)
assert.Equal(t, int64(0), price.Int64())
})`
$DIR/core/services/ocr2/plugins/ocr2vrf/juelsfeecoin/link_eth_price_provider_test.go: `.NewAggregatorV3Interface(t)`
$DIR/core/services/ocr2/plugins/ocr2vrf/juelsfeecoin/link_eth_price_provider_test.go: `.On("LatestRoundData", mock.Anything)`
$DIR/core/services/ocr2/plugins/ocr2vrf/juelsfeecoin/link_eth_price_provider_test.go: `.Return(aggregator_v3_interface.LatestRoundData{},
errors.New("could not fetch"))`
$DIR/core/services/ocr2/plugins/ocr2vrf/juelsfeecoin/link_eth_price_provider_test.go: `.New("could not fetch")`
$DIR/core/services/ocr2/plugins/ocr2vrf/juelsfeecoin/link_eth_price_provider_test.go: `.NewInt(0)`
$DIR/core/services/ocr2/plugins/ocr2vrf/juelsfeecoin/link_eth_price_provider_test.go: `.TestLogger(t)`
$DIR/core/services/ocr2/plugins/ocr2vrf/juelsfeecoin/link_eth_price_provider_test.go: `.run()`
$DIR/core/services/ocr2/plugins/ocr2vrf/juelsfeecoin/link_eth_price_provider_test.go: `.Cleanup(func() { close(provider.stop) })`
$DIR/core/services/ocr2/plugins/ocr2vrf/juelsfeecoin/link_eth_price_provider_test.go: `.JuelsPerFeeCoin()`
$DIR/core/services/ocr2/plugins/ocr2vrf/juelsfeecoin/link_eth_price_provider_test.go: `.Sleep(2 * time.Second)`
$DIR/core/services/ocr2/plugins/ocr2vrf/juelsfeecoin/link_eth_price_provider_test.go: `.JuelsPerFeeCoin()`
$DIR/core/services/ocr2/plugins/ocr2vrf/juelsfeecoin/link_eth_price_provider_test.go: `.NewClient(t)`
$DIR/core/services/ocr2/plugins/ocr2vrf/juelsfeecoin/link_eth_price_provider_test.go: `.TestLogger(t)`
$DIR/core/services/ocr2/plugins/ocr2vrf/reasonablegasprice/reasonable_gas_price_test.go: `.GWei(100)`
$DIR/core/services/ocr2/plugins/ocr2vrf/reasonablegasprice/reasonable_gas_price_test.go: `.ReasonableGasPrice()`
$DIR/core/services/ocr2/plugins/ocr2vrf/reportserializer/report_serializer_test.go: `.NewReportSerializer(altbn128Suite.G1())`
$DIR/core/services/ocr2/plugins/ocr2vrf/reportserializer/report_serializer_test.go: `.G1()`
$DIR/core/services/ocr2/plugins/ocr2vrf/reportserializer/report_serializer_test.go: `.NewInt(10)`
$DIR/core/services/ocr2/plugins/ocr2vrf/reportserializer/report_serializer_test.go: `.HexToHash("0x002")`
$DIR/core/services/ocr2/plugins/ocr2vrf/reportserializer/report_serializer_test.go: `.NewInt(1)`
$DIR/core/services/ocr2/plugins/ocr2vrf/reportserializer/report_serializer_test.go: `.HexToAddress("0x03")`
$DIR/core/services/ocr2/plugins/ocr2vrf/reportserializer/report_serializer_test.go: `.NewInt(5)`
$DIR/core/services/ocr2/plugins/ocr2vrf/reportserializer/report_serializer_test.go: `.NewInt(6)`
$DIR/core/services/ocr2/plugins/ocr2vrf/reportserializer/report_serializer_test.go: `.NewInt(7)`
$DIR/core/services/ocr2/plugins/ocr2vrf/reportserializer/report_serializer_test.go: `.NewInt(0)`
$DIR/core/services/ocr2/plugins/ocr2vrf/reportserializer/report_serializer_test.go: `.NewInt(0)`
$DIR/core/services/ocr2/plugins/ocr2vrf/reportserializer/report_serializer_test.go: `.SerializeReport(unserializedReport)`
$DIR/core/services/ocr2/plugins/ocr2vrf/reportserializer/report_serializer_test.go: `.ReportLength(unserializedReport)`
$DIR/core/services/ocr2/plugins/promwrapper/plugin_test.go: `promPlugin = New(reportingPlugin, "test-2", "EVM", big.NewInt(1), types.ReportingPluginConfig{}, backend)`
$DIR/core/services/ocr2/plugins/promwrapper/plugin_test.go: `backend.On("SetQueryDuration", mock.Anything, mock.Anything).Run(func(args mock.Arguments) {
labelValues := args[0].([]string)
duration := time.Duration(args[1].(float64))
assertCorrectLabelValues(labelValues)
require.Greater(t, duration, qDuration)
require.Less(t, duration, oDuration)
}).Return()`
$DIR/core/services/ocr2/plugins/promwrapper/plugin_test.go: `assertCorrectLabelValues(labelValues)`
$DIR/core/services/ocr2/plugins/promwrapper/plugin_test.go: `backend.On("SetObservationDuration", mock.Anything, mock.Anything).Run(func(args mock.Arguments) {
labelValues := args[0].([]string)
duration := time.Duration(args[1].(float64))
assertCorrectLabelValues(labelValues)
require.Greater(t, duration, oDuration)
require.Less(t, duration, rDuration)
}).Return()`
$DIR/core/services/ocr2/plugins/promwrapper/plugin_test.go: `assertCorrectLabelValues(labelValues)`
$DIR/core/services/ocr2/plugins/promwrapper/plugin_test.go: `backend.On("SetReportDuration", mock.Anything, mock.Anything).Run(func(args mock.Arguments) {
labelValues := args[0].([]string)
duration := time.Duration(args[1].(float64))
assertCorrectLabelValues(labelValues)
require.Greater(t, duration, rDuration)
require.Less(t, duration, aDuration)
}).Return()`
$DIR/core/services/ocr2/plugins/promwrapper/plugin_test.go: `assertCorrectLabelValues(labelValues)`
$DIR/core/services/ocr2/plugins/promwrapper/plugin_test.go: `backend.On("SetShouldAcceptFinalizedReportDuration", mock.Anything, mock.Anything).Run(func(args mock.Arguments) {
labelValues := args[0].([]string)
duration := time.Duration(args[1].(float64))
assertCorrectLabelValues(labelValues)
require.Greater(t, duration, aDuration)
require.Less(t, duration, tDuration)
}).Return()`
$DIR/core/services/ocr2/plugins/promwrapper/plugin_test.go: `assertCorrectLabelValues(labelValues)`
$DIR/core/services/ocr2/plugins/promwrapper/plugin_test.go: `backend.On("SetShouldTransmitAcceptedReportDuration", mock.Anything, mock.Anything).Run(func(args mock.Arguments) {
labelValues := args[0].([]string)
duration := time.Duration(args[1].(float64))
assertCorrectLabelValues(labelValues)
require.Greater(t, duration, tDuration)
require.Less(t, duration, cDuration)
}).Return()`
$DIR/core/services/ocr2/plugins/promwrapper/plugin_test.go: `assertCorrectLabelValues(labelValues)`
$DIR/core/services/ocr2/plugins/promwrapper/plugin_test.go: `backend.On("SetQueryToObservationLatency", mock.Anything, mock.Anything).Run(func(args mock.Arguments) {
labelValues := args[0].([]string)
latency := time.Duration(args[1].(float64))
assertCorrectLabelValues(labelValues)
require.Greater(t, latency, qToOLatency)
require.Less(t, latency, oToRLatency)
}).Return()`
$DIR/core/services/ocr2/plugins/promwrapper/plugin_test.go: `assertCorrectLabelValues(labelValues)`
$DIR/core/services/ocr2/plugins/promwrapper/plugin_test.go: `backend.On("SetObservationToReportLatency", mock.Anything, mock.Anything).Run(func(args mock.Arguments) {
labelValues := args[0].([]string)
latency := time.Duration(args[1].(float64))
assertCorrectLabelValues(labelValues)
require.Greater(t, latency, oToRLatency)
require.Less(t, latency, rToALatency)
}).Return()`
$DIR/core/services/ocr2/plugins/promwrapper/plugin_test.go: `assertCorrectLabelValues(labelValues)`
$DIR/core/services/ocr2/plugins/promwrapper/plugin_test.go: `backend.On("SetReportToAcceptFinalizedReportLatency", mock.Anything, mock.Anything).Run(func(args mock.Arguments) {
labelValues := args[0].([]string)
latency := time.Duration(args[1].(float64))
assertCorrectLabelValues(labelValues)
require.Greater(t, latency, rToALatency)
require.Less(t, latency, aToTLatency)
}).Return()`
$DIR/core/services/ocr2/plugins/promwrapper/plugin_test.go: `assertCorrectLabelValues(labelValues)`
$DIR/core/services/ocr2/plugins/promwrapper/plugin_test.go: `backend.On("SetAcceptFinalizedReportToTransmitAcceptedReportLatency", mock.Anything, mock.Anything).Run(func(args mock.Arguments) {
labelValues := args[0].([]string)
latency := time.Duration(args[1].(float64))
assertCorrectLabelValues(labelValues)
require.Greater(t, latency, aToTLatency)
require.Less(t, latency, cDuration)
}).Return()`
$DIR/core/services/ocr2/plugins/promwrapper/plugin_test.go: `assertCorrectLabelValues(labelValues)`
$DIR/core/services/ocr2/plugins/promwrapper/plugin_test.go: `backend.On("SetCloseDuration", mock.Anything, mock.Anything).Run(func(args mock.Arguments) {
labelValues := args[0].([]string)
latency := time.Duration(args[1].(float64))
require.Equal(
t,
[]string{
"EVM",
"1",
"test-plugin",
"0",
common.Bytes2Hex(configDigest[:]),
}, labelValues)
require.Greater(t, latency, cDuration)
require.Less(t, latency, ceiling)
}).Return()`
$DIR/core/services/ocr2/plugins/promwrapper/plugin_test.go: `time.Sleep(qToOLatency)`
$DIR/core/services/ocr2/plugins/promwrapper/plugin_test.go: `_, err = promPlugin.Observation(ctx, reportTimestamp, nil)`
$DIR/core/services/ocr2/plugins/promwrapper/plugin_test.go: `_, ok = promPlugin.queryEndTimes.Load(reportTimestamp)`
$DIR/core/services/ocr2/plugins/promwrapper/plugin_test.go: `_, ok = promPlugin.observationEndTimes.Load(reportTimestamp)`
$DIR/core/services/ocr2/plugins/promwrapper/plugin_test.go: `time.Sleep(oToRLatency)`
$DIR/core/services/ocr2/plugins/promwrapper/plugin_test.go: `_, _, err = promPlugin.Report(ctx, reportTimestamp, nil, nil)`
$DIR/core/services/ocr2/plugins/promwrapper/plugin_test.go: `_, ok = promPlugin.observationEndTimes.Load(reportTimestamp)`
$DIR/core/services/ocr2/plugins/promwrapper/plugin_test.go: `_, ok = promPlugin.reportEndTimes.Load(reportTimestamp)`
$DIR/core/services/ocr2/plugins/promwrapper/plugin_test.go: `time.Sleep(rToALatency)`
$DIR/core/services/ocr2/plugins/promwrapper/plugin_test.go: `_, err = promPlugin.ShouldAcceptFinalizedReport(ctx, reportTimestamp, nil)`
$DIR/core/services/ocr2/plugins/promwrapper/plugin_test.go: `_, ok = promPlugin.reportEndTimes.Load(reportTimestamp)`
$DIR/core/services/ocr2/plugins/promwrapper/plugin_test.go: `_, ok = promPlugin.acceptFinalizedReportEndTimes.Load(reportTimestamp)`
$DIR/core/services/ocr2/plugins/promwrapper/plugin_test.go: `time.Sleep(aToTLatency)`
$DIR/core/services/ocr2/plugins/promwrapper/plugin_test.go: `_, err = promPlugin.ShouldTransmitAcceptedReport(ctx, reportTimestamp, nil)`
$DIR/core/services/ocr2/plugins/promwrapper/plugin_test.go: `_, ok = promPlugin.acceptFinalizedReportEndTimes.Load(reportTimestamp)`
$DIR/core/services/ocr2/plugins/promwrapper/plugin_test.go: `err = promPlugin.Close()`
$DIR/core/services/ocr2/plugins/promwrapper/plugin_test.go: `.NewInt(1)`
$DIR/core/services/ocr2/plugins/promwrapper/plugin_test.go: `.NewPrometheusBackend(t)`
$DIR/core/services/ocr2/plugins/promwrapper/plugin_test.go: `.NewInt(1)`
$DIR/core/services/ocr2/plugins/promwrapper/plugin_test.go: `.BytesToHash(crypto.Keccak256([]byte("foobar")))`
$DIR/core/services/ocr2/plugins/promwrapper/plugin_test.go: `.Keccak256([]byte("foobar"))`
$DIR/core/services/ocr2/plugins/promwrapper/plugin_test.go: `.ConfigDigest(configDigest)`
$DIR/core/services/ocr2/plugins/promwrapper/plugin_test.go: `.NewPrometheusBackend(t)`
$DIR/core/services/ocr2/plugins/promwrapper/plugin_test.go: `.On("SetQueryDuration", mock.Anything, mock.Anything)`
$DIR/core/services/ocr2/plugins/promwrapper/plugin_test.go: `.Run(func(args mock.Arguments) {
labelValues := args[0].([]string)
duration := time.Duration(args[1].(float64))
assertCorrectLabelValues(labelValues)
require.Greater(t, duration, qDuration)
require.Less(t, duration, oDuration)
})`
$DIR/core/services/ocr2/plugins/promwrapper/plugin_test.go: `.Duration(args[1].(float64))`
$DIR/core/services/ocr2/plugins/promwrapper/plugin_test.go: `.Return()`
$DIR/core/services/ocr2/plugins/promwrapper/plugin_test.go: `.On("SetObservationDuration", mock.Anything, mock.Anything)`
$DIR/core/services/ocr2/plugins/promwrapper/plugin_test.go: `.Run(func(args mock.Arguments) {
labelValues := args[0].([]string)
duration := time.Duration(args[1].(float64))
assertCorrectLabelValues(labelValues)
require.Greater(t, duration, oDuration)
require.Less(t, duration, rDuration)
})`
$DIR/core/services/ocr2/plugins/promwrapper/plugin_test.go: `.Duration(args[1].(float64))`
$DIR/core/services/ocr2/plugins/promwrapper/plugin_test.go: `.Return()`
$DIR/core/services/ocr2/plugins/promwrapper/plugin_test.go: `.On("SetReportDuration", mock.Anything, mock.Anything)`
$DIR/core/services/ocr2/plugins/promwrapper/plugin_test.go: `.Run(func(args mock.Arguments) {
labelValues := args[0].([]string)
duration := time.Duration(args[1].(float64))
assertCorrectLabelValues(labelValues)
require.Greater(t, duration, rDuration)
require.Less(t, duration, aDuration)
})`
$DIR/core/services/ocr2/plugins/promwrapper/plugin_test.go: `.Duration(args[1].(float64))`
$DIR/core/services/ocr2/plugins/promwrapper/plugin_test.go: `.Return()`
$DIR/core/services/ocr2/plugins/promwrapper/plugin_test.go: `.On("SetShouldAcceptFinalizedReportDuration", mock.Anything, mock.Anything)`
$DIR/core/services/ocr2/plugins/promwrapper/plugin_test.go: `.Run(func(args mock.Arguments) {
labelValues := args[0].([]string)
duration := time.Duration(args[1].(float64))
assertCorrectLabelValues(labelValues)
require.Greater(t, duration, aDuration)
require.Less(t, duration, tDuration)
})`
$DIR/core/services/ocr2/plugins/promwrapper/plugin_test.go: `.Duration(args[1].(float64))`
$DIR/core/services/ocr2/plugins/promwrapper/plugin_test.go: `.Return()`
$DIR/core/services/ocr2/plugins/promwrapper/plugin_test.go: `.On("SetShouldTransmitAcceptedReportDuration", mock.Anything, mock.Anything)`
$DIR/core/services/ocr2/plugins/promwrapper/plugin_test.go: `.Run(func(args mock.Arguments) {
labelValues := args[0].([]string)
duration := time.Duration(args[1].(float64))
assertCorrectLabelValues(labelValues)
require.Greater(t, duration, tDuration)
require.Less(t, duration, cDuration)
})`
$DIR/core/services/ocr2/plugins/promwrapper/plugin_test.go: `.Duration(args[1].(float64))`
$DIR/core/services/ocr2/plugins/promwrapper/plugin_test.go: `.Return()`
$DIR/core/services/ocr2/plugins/promwrapper/plugin_test.go: `.On("SetQueryToObservationLatency", mock.Anything, mock.Anything)`
$DIR/core/services/ocr2/plugins/promwrapper/plugin_test.go: `.Run(func(args mock.Arguments) {
labelValues := args[0].([]string)
latency := time.Duration(args[1].(float64))
assertCorrectLabelValues(labelValues)
require.Greater(t, latency, qToOLatency)
require.Less(t, latency, oToRLatency)
})`
$DIR/core/services/ocr2/plugins/promwrapper/plugin_test.go: `.Duration(args[1].(float64))`
$DIR/core/services/ocr2/plugins/promwrapper/plugin_test.go: `.Return()`
$DIR/core/services/ocr2/plugins/promwrapper/plugin_test.go: `.On("SetObservationToReportLatency", mock.Anything, mock.Anything)`
$DIR/core/services/ocr2/plugins/promwrapper/plugin_test.go: `.Run(func(args mock.Arguments) {
labelValues := args[0].([]string)
latency := time.Duration(args[1].(float64))
assertCorrectLabelValues(labelValues)
require.Greater(t, latency, oToRLatency)
require.Less(t, latency, rToALatency)
})`
$DIR/core/services/ocr2/plugins/promwrapper/plugin_test.go: `.Duration(args[1].(float64))`
$DIR/core/services/ocr2/plugins/promwrapper/plugin_test.go: `.Return()`
$DIR/core/services/ocr2/plugins/promwrapper/plugin_test.go: `.On("SetReportToAcceptFinalizedReportLatency", mock.Anything, mock.Anything)`
$DIR/core/services/ocr2/plugins/promwrapper/plugin_test.go: `.Run(func(args mock.Arguments) {
labelValues := args[0].([]string)
latency := time.Duration(args[1].(float64))
assertCorrectLabelValues(labelValues)
require.Greater(t, latency, rToALatency)
require.Less(t, latency, aToTLatency)
})`
$DIR/core/services/ocr2/plugins/promwrapper/plugin_test.go: `.Duration(args[1].(float64))`
$DIR/core/services/ocr2/plugins/promwrapper/plugin_test.go: `.Return()`
$DIR/core/services/ocr2/plugins/promwrapper/plugin_test.go: `.On("SetAcceptFinalizedReportToTransmitAcceptedReportLatency", mock.Anything, mock.Anything)`
$DIR/core/services/ocr2/plugins/promwrapper/plugin_test.go: `.Run(func(args mock.Arguments) {
labelValues := args[0].([]string)
latency := time.Duration(args[1].(float64))
assertCorrectLabelValues(labelValues)
require.Greater(t, latency, aToTLatency)
require.Less(t, latency, cDuration)
})`
$DIR/core/services/ocr2/plugins/promwrapper/plugin_test.go: `.Duration(args[1].(float64))`
$DIR/core/services/ocr2/plugins/promwrapper/plugin_test.go: `.Return()`
$DIR/core/services/ocr2/plugins/promwrapper/plugin_test.go: `.On("SetCloseDuration", mock.Anything, mock.Anything)`
$DIR/core/services/ocr2/plugins/promwrapper/plugin_test.go: `.Run(func(args mock.Arguments) {
labelValues := args[0].([]string)
latency := time.Duration(args[1].(float64))
require.Equal(
t,
[]string{
"EVM",
"1",
"test-plugin",
"0",
common.Bytes2Hex(configDigest[:]),
}, labelValues)
require.Greater(t, latency, cDuration)
require.Less(t, latency, ceiling)
})`
$DIR/core/services/ocr2/plugins/promwrapper/plugin_test.go: `.Duration(args[1].(float64))`
$DIR/core/services/ocr2/plugins/promwrapper/plugin_test.go: `.Return()`
$DIR/core/services/ocr2/plugins/promwrapper/plugin_test.go: `.NewInt(1)`
$DIR/core/services/ocr2/plugins/promwrapper/plugin_test.go: `.Context(t)`
$DIR/core/services/ocr2/plugins/promwrapper/plugin_test.go: `.Query(ctx, reportTimestamp)`
$DIR/core/services/ocr2/plugins/promwrapper/plugin_test.go: `.queryEndTimes.Load(reportTimestamp)`
$DIR/core/services/ocr2/plugins/promwrapper/plugin_test.go: `.Sleep(qToOLatency)`
$DIR/core/services/ocr2/plugins/promwrapper/plugin_test.go: `.Observation(ctx, reportTimestamp, nil)`
$DIR/core/services/ocr2/plugins/promwrapper/plugin_test.go: `.queryEndTimes.Load(reportTimestamp)`
$DIR/core/services/ocr2/plugins/promwrapper/plugin_test.go: `.observationEndTimes.Load(reportTimestamp)`
$DIR/core/services/ocr2/plugins/promwrapper/plugin_test.go: `.Sleep(oToRLatency)`
$DIR/core/services/ocr2/plugins/promwrapper/plugin_test.go: `.Report(ctx, reportTimestamp, nil, nil)`
$DIR/core/services/ocr2/plugins/promwrapper/plugin_test.go: `.observationEndTimes.Load(reportTimestamp)`
$DIR/core/services/ocr2/plugins/promwrapper/plugin_test.go: `.reportEndTimes.Load(reportTimestamp)`
$DIR/core/services/ocr2/plugins/promwrapper/plugin_test.go: `.Sleep(rToALatency)`
$DIR/core/services/ocr2/plugins/promwrapper/plugin_test.go: `.ShouldAcceptFinalizedReport(ctx, reportTimestamp, nil)`
$DIR/core/services/ocr2/plugins/promwrapper/plugin_test.go: `.reportEndTimes.Load(reportTimestamp)`
$DIR/core/services/ocr2/plugins/promwrapper/plugin_test.go: `.acceptFinalizedReportEndTimes.Load(reportTimestamp)`
$DIR/core/services/ocr2/plugins/promwrapper/plugin_test.go: `.Sleep(aToTLatency)`
$DIR/core/services/ocr2/plugins/promwrapper/plugin_test.go: `.ShouldTransmitAcceptedReport(ctx, reportTimestamp, nil)`
$DIR/core/services/ocr2/plugins/promwrapper/plugin_test.go: `.acceptFinalizedReportEndTimes.Load(reportTimestamp)`
$DIR/core/services/ocr2/plugins/s4/factory_test.go: `.NewOCRWrapper(logger.TestLogger(t), true, func(msg string) {})`
$DIR/core/services/ocr2/plugins/s4/factory_test.go: `.TestLogger(t)`
$DIR/core/services/ocr2/plugins/s4/factory_test.go: `.NewORM(t)`
$DIR/core/services/ocr2/plugins/s4/factory_test.go: `.NewReportingPlugin(rpConfig)`
$DIR/core/services/ocr2/plugins/s4/factory_test.go: `.New("some error")`
$DIR/core/services/ocr2/plugins/s4/factory_test.go: `.NewReportingPlugin(rpConfig)`
$DIR/core/services/ocr2/plugins/s4/integration_test.go: `checkNoErrors(t, errors)`
$DIR/core/services/ocr2/plugins/s4/integration_test.go: `checkNoUnconfirmedRows(ctx, t, don.orms[i], 10)`
$DIR/core/services/ocr2/plugins/s4/integration_test.go: `checkNoErrors(t, errors)`
$DIR/core/services/ocr2/plugins/s4/integration_test.go: `checkNoUnconfirmedRows(ctx, t, don.orms[i], 10)`
$DIR/core/services/ocr2/plugins/s4/integration_test.go: `rows[0].Signature = rows[1].Signature`
$DIR/core/services/ocr2/plugins/s4/integration_test.go: `checkNoErrors(t, errors)`
$DIR/core/services/ocr2/plugins/s4/integration_test.go: `config.MaxObservationEntries = 5`
$DIR/core/services/ocr2/plugins/s4/integration_test.go: `checkNoErrors(t, errors)`
$DIR/core/services/ocr2/plugins/s4/integration_test.go: `config.MaxObservationEntries = 5`
$DIR/core/services/ocr2/plugins/s4/integration_test.go: `time.Sleep(testutils.TestInterval)`
$DIR/core/services/ocr2/plugins/s4/integration_test.go: `checkNoErrors(t, errors)`
$DIR/core/services/ocr2/plugins/s4/integration_test.go: `config.NSnapshotShards = 4`
$DIR/core/services/ocr2/plugins/s4/integration_test.go: `checkNoErrors(t, errors)`
$DIR/core/services/ocr2/plugins/s4/integration_test.go: `checkNoUnconfirmedRows(ctx, t, don.orms[i], 1000)`
$DIR/core/services/ocr2/plugins/s4/integration_test.go: `checkNoErrors(t, errors)`
$DIR/core/services/ocr2/plugins/s4/integration_test.go: `users[i] = user{pk, big.New(addr.Big())}`
$DIR/core/services/ocr2/plugins/s4/integration_test.go: `row.Signature = sig`
$DIR/core/services/ocr2/plugins/s4/integration_test.go: `err = don.orms[o].Update(ctx, row)`
$DIR/core/services/ocr2/plugins/s4/integration_test.go: `checkNoErrors(t, errors)`
$DIR/core/services/ocr2/plugins/s4/integration_test.go: `checkNoUnconfirmedRows(ctx, t, don.orms[0], 1000)`
$DIR/core/services/ocr2/plugins/s4/integration_test.go: `checkNoUnconfirmedRows(ctx, t, don.orms[i], 1000)`
$DIR/core/services/ocr2/plugins/s4/integration_test.go: `.Context(t)`
$DIR/core/services/ocr2/plugins/s4/integration_test.go: `.Update(ctx, row)`
$DIR/core/services/ocr2/plugins/s4/integration_test.go: `.GetSnapshot(ctx, s4_svc.NewFullAddressRange())`
$DIR/core/services/ocr2/plugins/s4/integration_test.go: `.NewFullAddressRange()`
$DIR/core/services/ocr2/plugins/s4/integration_test.go: `.simulateOCR(ctx, 1)`
$DIR/core/services/ocr2/plugins/s4/integration_test.go: `.GetSnapshot(ctx, s4_svc.NewFullAddressRange())`
$DIR/core/services/ocr2/plugins/s4/integration_test.go: `.NewFullAddressRange()`
$DIR/core/services/ocr2/plugins/s4/integration_test.go: `.Context(t)`
$DIR/core/services/ocr2/plugins/s4/integration_test.go: `.Update(ctx, row)`
$DIR/core/services/ocr2/plugins/s4/integration_test.go: `.simulateOCR(ctx, 1)`
$DIR/core/services/ocr2/plugins/s4/integration_test.go: `.GetSnapshot(ctx, s4_svc.NewFullAddressRange())`
$DIR/core/services/ocr2/plugins/s4/integration_test.go: `.NewFullAddressRange()`
$DIR/core/services/ocr2/plugins/s4/integration_test.go: `.GetSnapshot(ctx, s4_svc.NewFullAddressRange())`
$DIR/core/services/ocr2/plugins/s4/integration_test.go: `.NewFullAddressRange()`
$DIR/core/services/ocr2/plugins/s4/integration_test.go: `.Context(t)`
$DIR/core/services/ocr2/plugins/s4/integration_test.go: `.Update(ctx, row)`
$DIR/core/services/ocr2/plugins/s4/integration_test.go: `.GetSnapshot(ctx, s4_svc.NewFullAddressRange())`
$DIR/core/services/ocr2/plugins/s4/integration_test.go: `.NewFullAddressRange()`
$DIR/core/services/ocr2/plugins/s4/integration_test.go: `.Address.Cmp(rows[0].Address)`
$DIR/core/services/ocr2/plugins/s4/integration_test.go: `.simulateOCR(ctx, 1)`
$DIR/core/services/ocr2/plugins/s4/integration_test.go: `.GetSnapshot(ctx, s4_svc.NewFullAddressRange())`
$DIR/core/services/ocr2/plugins/s4/integration_test.go: `.NewFullAddressRange()`
$DIR/core/services/ocr2/plugins/s4/integration_test.go: `.GetUnconfirmedRows(ctx, 10)`
$DIR/core/services/ocr2/plugins/s4/integration_test.go: `.Context(t)`
$DIR/core/services/ocr2/plugins/s4/integration_test.go: `.Update(ctx, row)`
$DIR/core/services/ocr2/plugins/s4/integration_test.go: `.GetSnapshot(ctx, s4_svc.NewFullAddressRange())`
$DIR/core/services/ocr2/plugins/s4/integration_test.go: `.NewFullAddressRange()`
$DIR/core/services/ocr2/plugins/s4/integration_test.go: `.simulateOCR(ctx, 2)`
$DIR/core/services/ocr2/plugins/s4/integration_test.go: `.GetSnapshot(ctx, s4_svc.NewFullAddressRange())`
$DIR/core/services/ocr2/plugins/s4/integration_test.go: `.NewFullAddressRange()`
$DIR/core/services/ocr2/plugins/s4/integration_test.go: `.Context(t)`
$DIR/core/services/ocr2/plugins/s4/integration_test.go: `.Update(ctx, row)`
$DIR/core/services/ocr2/plugins/s4/integration_test.go: `.Sleep(testutils.TestInterval)`
$DIR/core/services/ocr2/plugins/s4/integration_test.go: `.simulateOCR(ctx, 1)`
$DIR/core/services/ocr2/plugins/s4/integration_test.go: `.GetSnapshot(ctx, s4_svc.NewFullAddressRange())`
$DIR/core/services/ocr2/plugins/s4/integration_test.go: `.NewFullAddressRange()`
$DIR/core/services/ocr2/plugins/s4/integration_test.go: `.Context(t)`
$DIR/core/services/ocr2/plugins/s4/integration_test.go: `.Update(ctx, row)`
$DIR/core/services/ocr2/plugins/s4/integration_test.go: `.GetSnapshot(ctx, s4_svc.NewFullAddressRange())`
$DIR/core/services/ocr2/plugins/s4/integration_test.go: `.NewFullAddressRange()`
$DIR/core/services/ocr2/plugins/s4/integration_test.go: `.simulateOCR(ctx, 1)`
$DIR/core/services/ocr2/plugins/s4/integration_test.go: `.GetSnapshot(ctx, s4_svc.NewFullAddressRange())`
$DIR/core/services/ocr2/plugins/s4/integration_test.go: `.NewFullAddressRange()`
$DIR/core/services/ocr2/plugins/s4/integration_test.go: `.Context(t)`
$DIR/core/services/ocr2/plugins/s4/integration_test.go: `.Update(ctx, row)`
$DIR/core/services/ocr2/plugins/s4/integration_test.go: `.simulateOCR(ctx, 4)`
$DIR/core/services/ocr2/plugins/s4/integration_test.go: `.GetSnapshot(ctx, s4_svc.NewFullAddressRange())`
$DIR/core/services/ocr2/plugins/s4/integration_test.go: `.NewFullAddressRange()`
$DIR/core/services/ocr2/plugins/s4/integration_test.go: `.GetSnapshot(ctx, s4_svc.NewFullAddressRange())`
$DIR/core/services/ocr2/plugins/s4/integration_test.go: `.NewFullAddressRange()`
$DIR/core/services/ocr2/plugins/s4/integration_test.go: `.Context(t)`
$DIR/core/services/ocr2/plugins/s4/integration_test.go: `.NewPrivateKeyAndAddress(t)`
$DIR/core/services/ocr2/plugins/s4/integration_test.go: `.New(addr.Big())`
$DIR/core/services/ocr2/plugins/s4/integration_test.go: `.Big()`
$DIR/core/services/ocr2/plugins/s4/integration_test.go: `.Intn(don.size)`
$DIR/core/services/ocr2/plugins/s4/integration_test.go: `.Intn(2)`
$DIR/core/services/ocr2/plugins/s4/integration_test.go: `.Now()`
$DIR/core/services/ocr2/plugins/s4/integration_test.go: `.UTC()`
$DIR/core/services/ocr2/plugins/s4/integration_test.go: `.Add(time.Minute)`
$DIR/core/services/ocr2/plugins/s4/integration_test.go: `.UnixMilli()`
$DIR/core/services/ocr2/plugins/s4/integration_test.go: `.MustRandomBytes(t, 64)`
$DIR/core/services/ocr2/plugins/s4/integration_test.go: `.BytesToAddress(user.address.Bytes())`
$DIR/core/services/ocr2/plugins/s4/integration_test.go: `.address.Bytes()`
$DIR/core/services/ocr2/plugins/s4/integration_test.go: `.Bytes()`
$DIR/core/services/ocr2/plugins/s4/integration_test.go: `.Sign(user.privateKey)`
$DIR/core/services/ocr2/plugins/s4/integration_test.go: `.Update(ctx, row)`
$DIR/core/services/ocr2/plugins/s4/integration_test.go: `.simulateOCR(ctx, 4)`
$DIR/core/services/ocr2/plugins/s4/integration_test.go: `.GetSnapshot(ctx, s4_svc.NewFullAddressRange())`
$DIR/core/services/ocr2/plugins/s4/integration_test.go: `.NewFullAddressRange()`
$DIR/core/services/ocr2/plugins/s4/integration_test.go: `.GetSnapshot(ctx, s4_svc.NewFullAddressRange())`
$DIR/core/services/ocr2/plugins/s4/integration_test.go: `.NewFullAddressRange()`
$DIR/core/services/ocr2/plugins/s4/messages_test.go: `snapshot[i] = &s4.SnapshotRow{
Address: v.Address.Bytes(),
Slotid: uint32(v.SlotId),
Version: v.Version,
}`
$DIR/core/services/ocr2/plugins/s4/messages_test.go: `rows[1].Signature[0] = ^rows[1].Signature[0]`
$DIR/core/services/ocr2/plugins/s4/messages_test.go: `err = rows[1].VerifySignature()`
$DIR/core/services/ocr2/plugins/s4/messages_test.go: `t.Run("address with leading zeros", func(t *testing.T) {
pk, addr := testutils.NewPrivateKeyAndAddress(t)
for addr[0] != 0 {
pk, addr = testutils.NewPrivateKeyAndAddress(t)
}
row := generateTestRows(t, 1, time.Minute)[0]
row.Address = addr.Big().Bytes()
signRow(t, row, addr, pk)
require.NoError(t, row.VerifySignature())
sameRow := marshalUnmarshal(t, row)
require.NoError(t, sameRow.VerifySignature())
})`
$DIR/core/services/ocr2/plugins/s4/messages_test.go: `pk, addr = testutils.NewPrivateKeyAndAddress(t)`
$DIR/core/services/ocr2/plugins/s4/messages_test.go: `row.Address = addr.Big().Bytes()`
$DIR/core/services/ocr2/plugins/s4/messages_test.go: `signRow(t, row, addr, pk)`
$DIR/core/services/ocr2/plugins/s4/messages_test.go: `row.Payload = []byte{}`
$DIR/core/services/ocr2/plugins/s4/messages_test.go: `row.Address = addr.Big().Bytes()`
$DIR/core/services/ocr2/plugins/s4/messages_test.go: `signRow(t, row, addr, pk)`
$DIR/core/services/ocr2/plugins/s4/messages_test.go: `.MarshalRows(rows)`
$DIR/core/services/ocr2/plugins/s4/messages_test.go: `.UnmarshalRows(data)`
$DIR/core/services/ocr2/plugins/s4/messages_test.go: `.MarshalRows(rr)`
$DIR/core/services/ocr2/plugins/s4/messages_test.go: `.Address.Bytes()`
$DIR/core/services/ocr2/plugins/s4/messages_test.go: `.NewFullAddressRange()`
$DIR/core/services/ocr2/plugins/s4/messages_test.go: `.MarshalQuery(snapshot, addressRange)`
$DIR/core/services/ocr2/plugins/s4/messages_test.go: `.UnmarshalQuery(data)`
$DIR/core/services/ocr2/plugins/s4/messages_test.go: `.VerifySignature()`
$DIR/core/services/ocr2/plugins/s4/messages_test.go: `.VerifySignature()`
$DIR/core/services/ocr2/plugins/s4/messages_test.go: `.Run("address with leading zeros", func(t *testing.T) {
pk, addr := testutils.NewPrivateKeyAndAddress(t)
for addr[0] != 0 {
pk, addr = testutils.NewPrivateKeyAndAddress(t)
}
row := generateTestRows(t, 1, time.Minute)[0]
row.Address = addr.Big().Bytes()
signRow(t, row, addr, pk)
require.NoError(t, row.VerifySignature())
sameRow := marshalUnmarshal(t, row)
require.NoError(t, sameRow.VerifySignature())
})`
$DIR/core/services/ocr2/plugins/s4/messages_test.go: `.NewPrivateKeyAndAddress(t)`
$DIR/core/services/ocr2/plugins/s4/messages_test.go: `.NewPrivateKeyAndAddress(t)`
$DIR/core/services/ocr2/plugins/s4/messages_test.go: `.Big()`
$DIR/core/services/ocr2/plugins/s4/messages_test.go: `.Bytes()`
$DIR/core/services/ocr2/plugins/s4/messages_test.go: `.NewPrivateKeyAndAddress(t)`
$DIR/core/services/ocr2/plugins/s4/messages_test.go: `.Big()`
$DIR/core/services/ocr2/plugins/s4/messages_test.go: `.Bytes()`
$DIR/core/services/ocr2/plugins/s4/plugin_test.go: `t.Run("ErrInvalidIntervals", func(t *testing.T) {
config := createPluginConfig(1)
config.NSnapshotShards = 0
_, err := s4.NewReportingPlugin(logger, config, orm)
assert.ErrorIs(t, err, s4_svc.ErrInvalidIntervals)
})`
$DIR/core/services/ocr2/plugins/s4/plugin_test.go: `config.NSnapshotShards = 0`
$DIR/core/services/ocr2/plugins/s4/plugin_test.go: `t.Run("MaxObservationEntries is zero", func(t *testing.T) {
config := createPluginConfig(1)
config.MaxObservationEntries = 0
_, err := s4.NewReportingPlugin(logger, config, orm)
assert.ErrorContains(t, err, "max number of observation entries cannot be zero")
})`
$DIR/core/services/ocr2/plugins/s4/plugin_test.go: `config.MaxObservationEntries = 0`
$DIR/core/services/ocr2/plugins/s4/plugin_test.go: `t.Run("MaxReportEntries is zero", func(t *testing.T) {
config := createPluginConfig(1)
config.MaxReportEntries = 0
_, err := s4.NewReportingPlugin(logger, config, orm)
assert.ErrorContains(t, err, "max number of report entries cannot be zero")
})`
$DIR/core/services/ocr2/plugins/s4/plugin_test.go: `config.MaxReportEntries = 0`
$DIR/core/services/ocr2/plugins/s4/plugin_test.go: `t.Run("MaxDeleteExpiredEntries is zero", func(t *testing.T) {
config := createPluginConfig(1)
config.MaxDeleteExpiredEntries = 0
_, err := s4.NewReportingPlugin(logger, config, orm)
assert.ErrorContains(t, err, "max number of delete expired entries cannot be zero")
})`
$DIR/core/services/ocr2/plugins/s4/plugin_test.go: `config.MaxDeleteExpiredEntries = 0`
$DIR/core/services/ocr2/plugins/s4/plugin_test.go: `err = plugin.Close()`
$DIR/core/services/ocr2/plugins/s4/plugin_test.go: `t.Run("happy", func(t *testing.T) {
ormRows := make([]*s4_svc.Row, 0)
rows := generateTestRows(t, 10, time.Minute)
orm.On("Update", mock.Anything, mock.Anything).Run(func(args mock.Arguments) {
updateRow := args.Get(1).(*s4_svc.Row)
ormRows = append(ormRows, updateRow)
}).Return(nil).Times(10)
report, err := proto.Marshal(&s4.Rows{
Rows: rows,
})
assert.NoError(t, err)
should, err := plugin.ShouldAcceptFinalizedReport(testutils.Context(t), types.ReportTimestamp{}, report)
assert.NoError(t, err)
assert.False(t, should)
assert.Equal(t, 10, len(ormRows))
compareRows(t, rows, ormRows)
})`
$DIR/core/services/ocr2/plugins/s4/plugin_test.go: `orm.On("Update", mock.Anything, mock.Anything).Run(func(args mock.Arguments) {
updateRow := args.Get(1).(*s4_svc.Row)
ormRows = append(ormRows, updateRow)
}).Return(nil).Times(10)`
$DIR/core/services/ocr2/plugins/s4/plugin_test.go: `ormRows = append(ormRows, updateRow)`
$DIR/core/services/ocr2/plugins/s4/plugin_test.go: `compareRows(t, rows, ormRows)`
$DIR/core/services/ocr2/plugins/s4/plugin_test.go: `t.Run("error", func(t *testing.T) {
testErr := errors.New("some error")
rows := generateTestRows(t, 1, time.Minute)
orm.On("Update", mock.Anything, mock.Anything).Return(testErr).Once()
report, err := proto.Marshal(&s4.Rows{
Rows: rows,
})
assert.NoError(t, err)
should, err := plugin.ShouldAcceptFinalizedReport(testutils.Context(t), types.ReportTimestamp{}, report)
assert.NoError(t, err) // errors just logged
assert.False(t, should)
})`
$DIR/core/services/ocr2/plugins/s4/plugin_test.go: `orm.On("Update", mock.Anything, mock.Anything).Return(testErr).Once()`
$DIR/core/services/ocr2/plugins/s4/plugin_test.go: `t.Run("happy", func(t *testing.T) {
ormRows := generateTestOrmRows(t, 10, time.Minute)
rows := rowsToShapshotRows(ormRows)
orm.On("GetSnapshot", mock.Anything, mock.Anything).Return(rows, nil).Once()
queryBytes, err := plugin.Query(testutils.Context(t), types.ReportTimestamp{})
assert.NoError(t, err)
query := &s4.Query{}
err = proto.Unmarshal(queryBytes, query)
assert.NoError(t, err)
assert.Equal(t, s4_svc.MinAddress, s4.UnmarshalAddress(query.AddressRange.MinAddress))
assert.Equal(t, s4_svc.MaxAddress, s4.UnmarshalAddress(query.AddressRange.MaxAddress))
compareSnapshotRows(t, query.Rows, rows)
})`
$DIR/core/services/ocr2/plugins/s4/plugin_test.go: `orm.On("GetSnapshot", mock.Anything, mock.Anything).Return(rows, nil).Once()`
$DIR/core/services/ocr2/plugins/s4/plugin_test.go: `err = proto.Unmarshal(queryBytes, query)`
$DIR/core/services/ocr2/plugins/s4/plugin_test.go: `compareSnapshotRows(t, query.Rows, rows)`
$DIR/core/services/ocr2/plugins/s4/plugin_test.go: `t.Run("empty", func(t *testing.T) {
empty := make([]*s4_svc.SnapshotRow, 0)
orm.On("GetSnapshot", mock.Anything, mock.Anything).Return(empty, nil).Once()
query, err := plugin.Query(testutils.Context(t), types.ReportTimestamp{})
assert.NoError(t, err)
assert.NotNil(t, query)
})`
$DIR/core/services/ocr2/plugins/s4/plugin_test.go: `orm.On("GetSnapshot", mock.Anything, mock.Anything).Return(empty, nil).Once()`
$DIR/core/services/ocr2/plugins/s4/plugin_test.go: `config.NSnapshotShards = 16`
$DIR/core/services/ocr2/plugins/s4/plugin_test.go: `thisAddress[0] = byte(i)`
$DIR/core/services/ocr2/plugins/s4/plugin_test.go: `ormRows[i].Address = big.New(thisAddress.Big())`
$DIR/core/services/ocr2/plugins/s4/plugin_test.go: `from = 0`
$DIR/core/services/ocr2/plugins/s4/plugin_test.go: `to = 16`
$DIR/core/services/ocr2/plugins/s4/plugin_test.go: `orm.On("GetSnapshot", mock.Anything, mock.Anything).Return(versions[from:to], nil).Once()`
$DIR/core/services/ocr2/plugins/s4/plugin_test.go: `err = proto.Unmarshal(query, qq)`
$DIR/core/services/ocr2/plugins/s4/plugin_test.go: `ar.Advance()`
$DIR/core/services/ocr2/plugins/s4/plugin_test.go: `t.Run("all unconfirmed", func(t *testing.T) {
ormRows := generateTestOrmRows(t, int(config.MaxObservationEntries), time.Minute)
for _, or := range ormRows {
or.Confirmed = false
}
orm.On("DeleteExpired", mock.Anything, uint(10), mock.Anything, mock.Anything).Return(int64(10), nil).Once()
orm.On("GetUnconfirmedRows", mock.Anything, config.MaxObservationEntries).Return(ormRows, nil).Once()
observation, err := plugin.Observation(testutils.Context(t), types.ReportTimestamp{}, []byte{})
assert.NoError(t, err)
rows := &s4.Rows{}
err = proto.Unmarshal(observation, rows)
assert.NoError(t, err)
assert.Len(t, rows.Rows, int(config.MaxObservationEntries))
})`
$DIR/core/services/ocr2/plugins/s4/plugin_test.go: `or.Confirmed = false`
$DIR/core/services/ocr2/plugins/s4/plugin_test.go: `orm.On("DeleteExpired", mock.Anything, uint(10), mock.Anything, mock.Anything).Return(int64(10), nil).Once()`
$DIR/core/services/ocr2/plugins/s4/plugin_test.go: `orm.On("GetUnconfirmedRows", mock.Anything, config.MaxObservationEntries).Return(ormRows, nil).Once()`
$DIR/core/services/ocr2/plugins/s4/plugin_test.go: `err = proto.Unmarshal(observation, rows)`
$DIR/core/services/ocr2/plugins/s4/plugin_test.go: `t.Run("unconfirmed with query", func(t *testing.T) {
numUnconfirmed := int(config.MaxObservationEntries / 2)
ormRows := generateTestOrmRows(t, int(config.MaxObservationEntries), time.Minute)
snapshot := make([]*s4_svc.SnapshotRow, len(ormRows))
for i, or := range ormRows {
or.Confirmed = i < numUnconfirmed // First half are confirmed
or.Version = uint64(i)
snapshot[i] = &s4_svc.SnapshotRow{
Address: or.Address,
SlotId: or.SlotId,
Version: or.Version,
Confirmed: or.Confirmed,
}
}
orm.On("DeleteExpired", mock.Anything, uint(10), mock.Anything, mock.Anything).Return(int64(10), nil).Once()
orm.On("GetUnconfirmedRows", mock.Anything, config.MaxObservationEntries).Return(ormRows[numUnconfirmed:], nil).Once()
orm.On("GetSnapshot", mock.Anything, mock.Anything).Return(snapshot, nil).Once()
snapshotRows := rowsToShapshotRows(ormRows)
query := &s4.Query{
Rows: make([]*s4.SnapshotRow, len(snapshotRows)),
}
numHigherVersion := 2
for i, v := range snapshotRows {
query.Rows[i] = &s4.SnapshotRow{
Address: v.Address.Bytes(),
Slotid: uint32(v.SlotId),
Version: v.Version,
}
if i < numHigherVersion {
ormRows[i].Version++
snapshot[i].Version++
orm.On("Get", mock.Anything, v.Address, v.SlotId).Return(ormRows[i], nil).Once()
}
}
queryBytes, err := proto.Marshal(query)
assert.NoError(t, err)
observation, err := plugin.Observation(testutils.Context(t), types.ReportTimestamp{}, queryBytes)
assert.NoError(t, err)
rows := &s4.Rows{}
err = proto.Unmarshal(observation, rows)
assert.NoError(t, err)
assert.Len(t, rows.Rows, numUnconfirmed+numHigherVersion)
for i := 0; i < numUnconfirmed; i++ {
assert.Equal(t, ormRows[numUnconfirmed+i].Version, rows.Rows[i].Version)
}
for i := 0; i < numHigherVersion; i++ {
assert.Equal(t, ormRows[i].Version, rows.Rows[numUnconfirmed+i].Version)
}
})`
$DIR/core/services/ocr2/plugins/s4/plugin_test.go: `or.Confirmed = i < numUnconfirmed`
$DIR/core/services/ocr2/plugins/s4/plugin_test.go: `or.Version = uint64(i)`
$DIR/core/services/ocr2/plugins/s4/plugin_test.go: `snapshot[i] = &s4_svc.SnapshotRow{
Address: or.Address,
SlotId: or.SlotId,
Version: or.Version,
Confirmed: or.Confirmed,
}`
$DIR/core/services/ocr2/plugins/s4/plugin_test.go: `orm.On("DeleteExpired", mock.Anything, uint(10), mock.Anything, mock.Anything).Return(int64(10), nil).Once()`
$DIR/core/services/ocr2/plugins/s4/plugin_test.go: `orm.On("GetUnconfirmedRows", mock.Anything, config.MaxObservationEntries).Return(ormRows[numUnconfirmed:], nil).Once()`
$DIR/core/services/ocr2/plugins/s4/plugin_test.go: `orm.On("GetSnapshot", mock.Anything, mock.Anything).Return(snapshot, nil).Once()`
$DIR/core/services/ocr2/plugins/s4/plugin_test.go: `query.Rows[i] = &s4.SnapshotRow{
Address: v.Address.Bytes(),
Slotid: uint32(v.SlotId),
Version: v.Version,
}`
$DIR/core/services/ocr2/plugins/s4/plugin_test.go: `ormRows[i].Version++`
$DIR/core/services/ocr2/plugins/s4/plugin_test.go: `snapshot[i].Version++`
$DIR/core/services/ocr2/plugins/s4/plugin_test.go: `orm.On("Get", mock.Anything, v.Address, v.SlotId).Return(ormRows[i], nil).Once()`
$DIR/core/services/ocr2/plugins/s4/plugin_test.go: `err = proto.Unmarshal(observation, rows)`
$DIR/core/services/ocr2/plugins/s4/plugin_test.go: `or.Confirmed = true`
$DIR/core/services/ocr2/plugins/s4/plugin_test.go: `or.Version = vHigh`
$DIR/core/services/ocr2/plugins/s4/plugin_test.go: `snapshot[i] = &s4_svc.SnapshotRow{
Address: or.Address,
SlotId: or.SlotId,
Version: or.Version,
Confirmed: or.Confirmed,
}`
$DIR/core/services/ocr2/plugins/s4/plugin_test.go: `orm.On("DeleteExpired", mock.Anything, uint(10), mock.Anything, mock.Anything).Return(int64(10), nil).Once()`
$DIR/core/services/ocr2/plugins/s4/plugin_test.go: `orm.On("GetUnconfirmedRows", mock.Anything, config.MaxObservationEntries).Return([]*s4_svc.Row{}, nil).Once()`
$DIR/core/services/ocr2/plugins/s4/plugin_test.go: `orm.On("GetSnapshot", mock.Anything, mock.Anything).Return(snapshot, nil).Once()`
$DIR/core/services/ocr2/plugins/s4/plugin_test.go: `orm.On("Get", mock.Anything, snapshot[1].Address, snapshot[1].SlotId).Return(ormRows[1], nil).Once()`
$DIR/core/services/ocr2/plugins/s4/plugin_test.go: `orm.On("Get", mock.Anything, snapshot[2].Address, snapshot[2].SlotId).Return(ormRows[2], nil).Once()`
$DIR/core/services/ocr2/plugins/s4/plugin_test.go: `err = proto.Unmarshal(observation, rows)`
$DIR/core/services/ocr2/plugins/s4/plugin_test.go: `err = proto.Unmarshal(report, reportRows)`
$DIR/core/services/ocr2/plugins/s4/plugin_test.go: `err = proto.Unmarshal(report2, reportRows2)`
$DIR/core/services/ocr2/plugins/s4/plugin_test.go: `.NewOCRWrapper(logger.TestLogger(t), true, func(msg string) {})`
$DIR/core/services/ocr2/plugins/s4/plugin_test.go: `.TestLogger(t)`
$DIR/core/services/ocr2/plugins/s4/plugin_test.go: `.NewORM(t)`
$DIR/core/services/ocr2/plugins/s4/plugin_test.go: `.Run("ErrInvalidIntervals", func(t *testing.T) {
config := createPluginConfig(1)
config.NSnapshotShards = 0
_, err := s4.NewReportingPlugin(logger, config, orm)
assert.ErrorIs(t, err, s4_svc.ErrInvalidIntervals)
})`
$DIR/core/services/ocr2/plugins/s4/plugin_test.go: `.NewReportingPlugin(logger, config, orm)`
$DIR/core/services/ocr2/plugins/s4/plugin_test.go: `.Run("MaxObservationEntries is zero", func(t *testing.T) {
config := createPluginConfig(1)
config.MaxObservationEntries = 0
_, err := s4.NewReportingPlugin(logger, config, orm)
assert.ErrorContains(t, err, "max number of observation entries cannot be zero")
})`
$DIR/core/services/ocr2/plugins/s4/plugin_test.go: `.NewReportingPlugin(logger, config, orm)`
$DIR/core/services/ocr2/plugins/s4/plugin_test.go: `.Run("MaxReportEntries is zero", func(t *testing.T) {
config := createPluginConfig(1)
config.MaxReportEntries = 0
_, err := s4.NewReportingPlugin(logger, config, orm)
assert.ErrorContains(t, err, "max number of report entries cannot be zero")
})`
$DIR/core/services/ocr2/plugins/s4/plugin_test.go: `.NewReportingPlugin(logger, config, orm)`
$DIR/core/services/ocr2/plugins/s4/plugin_test.go: `.Run("MaxDeleteExpiredEntries is zero", func(t *testing.T) {
config := createPluginConfig(1)
config.MaxDeleteExpiredEntries = 0
_, err := s4.NewReportingPlugin(logger, config, orm)
assert.ErrorContains(t, err, "max number of delete expired entries cannot be zero")
})`
$DIR/core/services/ocr2/plugins/s4/plugin_test.go: `.NewReportingPlugin(logger, config, orm)`
$DIR/core/services/ocr2/plugins/s4/plugin_test.go: `.NewReportingPlugin(logger, config, orm)`
$DIR/core/services/ocr2/plugins/s4/plugin_test.go: `.NewOCRWrapper(logger.TestLogger(t), true, func(msg string) {})`
$DIR/core/services/ocr2/plugins/s4/plugin_test.go: `.TestLogger(t)`
$DIR/core/services/ocr2/plugins/s4/plugin_test.go: `.NewORM(t)`
$DIR/core/services/ocr2/plugins/s4/plugin_test.go: `.NewReportingPlugin(logger, config, orm)`
$DIR/core/services/ocr2/plugins/s4/plugin_test.go: `.NewOCRWrapper(logger.TestLogger(t), true, func(msg string) {})`
$DIR/core/services/ocr2/plugins/s4/plugin_test.go: `.TestLogger(t)`
$DIR/core/services/ocr2/plugins/s4/plugin_test.go: `.NewORM(t)`
$DIR/core/services/ocr2/plugins/s4/plugin_test.go: `.NewReportingPlugin(logger, config, orm)`
$DIR/core/services/ocr2/plugins/s4/plugin_test.go: `.ShouldTransmitAcceptedReport(testutils.Context(t), types.ReportTimestamp{}, nil)`
$DIR/core/services/ocr2/plugins/s4/plugin_test.go: `.Context(t)`
$DIR/core/services/ocr2/plugins/s4/plugin_test.go: `.NewOCRWrapper(logger.TestLogger(t), true, func(msg string) {})`
$DIR/core/services/ocr2/plugins/s4/plugin_test.go: `.TestLogger(t)`
$DIR/core/services/ocr2/plugins/s4/plugin_test.go: `.NewORM(t)`
$DIR/core/services/ocr2/plugins/s4/plugin_test.go: `.NewReportingPlugin(logger, config, orm)`
$DIR/core/services/ocr2/plugins/s4/plugin_test.go: `.Run("happy", func(t *testing.T) {
ormRows := make([]*s4_svc.Row, 0)
rows := generateTestRows(t, 10, time.Minute)
orm.On("Update", mock.Anything, mock.Anything).Run(func(args mock.Arguments) {
updateRow := args.Get(1).(*s4_svc.Row)
ormRows = append(ormRows, updateRow)
}).Return(nil).Times(10)
report, err := proto.Marshal(&s4.Rows{
Rows: rows,
})
assert.NoError(t, err)
should, err := plugin.ShouldAcceptFinalizedReport(testutils.Context(t), types.ReportTimestamp{}, report)
assert.NoError(t, err)
assert.False(t, should)
assert.Equal(t, 10, len(ormRows))
compareRows(t, rows, ormRows)
})`
$DIR/core/services/ocr2/plugins/s4/plugin_test.go: `.On("Update", mock.Anything, mock.Anything)`
$DIR/core/services/ocr2/plugins/s4/plugin_test.go: `.Run(func(args mock.Arguments) {
updateRow := args.Get(1).(*s4_svc.Row)
ormRows = append(ormRows, updateRow)
})`
$DIR/core/services/ocr2/plugins/s4/plugin_test.go: `.Get(1)`
$DIR/core/services/ocr2/plugins/s4/plugin_test.go: `.Return(nil)`
$DIR/core/services/ocr2/plugins/s4/plugin_test.go: `.Times(10)`
$DIR/core/services/ocr2/plugins/s4/plugin_test.go: `.Marshal(&s4.Rows{
Rows: rows,
})`
$DIR/core/services/ocr2/plugins/s4/plugin_test.go: `.ShouldAcceptFinalizedReport(testutils.Context(t), types.ReportTimestamp{}, report)`
$DIR/core/services/ocr2/plugins/s4/plugin_test.go: `.Context(t)`
$DIR/core/services/ocr2/plugins/s4/plugin_test.go: `.Run("error", func(t *testing.T) {
testErr := errors.New("some error")
rows := generateTestRows(t, 1, time.Minute)
orm.On("Update", mock.Anything, mock.Anything).Return(testErr).Once()
report, err := proto.Marshal(&s4.Rows{
Rows: rows,
})
assert.NoError(t, err)
should, err := plugin.ShouldAcceptFinalizedReport(testutils.Context(t), types.ReportTimestamp{}, report)
assert.NoError(t, err) // errors just logged
assert.False(t, should)
})`
$DIR/core/services/ocr2/plugins/s4/plugin_test.go: `.New("some error")`
$DIR/core/services/ocr2/plugins/s4/plugin_test.go: `.On("Update", mock.Anything, mock.Anything)`
$DIR/core/services/ocr2/plugins/s4/plugin_test.go: `.Return(testErr)`
$DIR/core/services/ocr2/plugins/s4/plugin_test.go: `.Once()`
$DIR/core/services/ocr2/plugins/s4/plugin_test.go: `.Marshal(&s4.Rows{
Rows: rows,
})`
$DIR/core/services/ocr2/plugins/s4/plugin_test.go: `.ShouldAcceptFinalizedReport(testutils.Context(t), types.ReportTimestamp{}, report)`
$DIR/core/services/ocr2/plugins/s4/plugin_test.go: `.Context(t)`
$DIR/core/services/ocr2/plugins/s4/plugin_test.go: `.Marshal(&s4.Rows{
Rows: rows,
})`
$DIR/core/services/ocr2/plugins/s4/plugin_test.go: `.ShouldAcceptFinalizedReport(testutils.Context(t), types.ReportTimestamp{}, report)`
$DIR/core/services/ocr2/plugins/s4/plugin_test.go: `.Context(t)`
$DIR/core/services/ocr2/plugins/s4/plugin_test.go: `.NewOCRWrapper(logger.TestLogger(t), true, func(msg string) {})`
$DIR/core/services/ocr2/plugins/s4/plugin_test.go: `.TestLogger(t)`
$DIR/core/services/ocr2/plugins/s4/plugin_test.go: `.NewORM(t)`
$DIR/core/services/ocr2/plugins/s4/plugin_test.go: `.NewReportingPlugin(logger, config, orm)`
$DIR/core/services/ocr2/plugins/s4/plugin_test.go: `.Run("happy", func(t *testing.T) {
ormRows := generateTestOrmRows(t, 10, time.Minute)
rows := rowsToShapshotRows(ormRows)
orm.On("GetSnapshot", mock.Anything, mock.Anything).Return(rows, nil).Once()
queryBytes, err := plugin.Query(testutils.Context(t), types.ReportTimestamp{})
assert.NoError(t, err)
query := &s4.Query{}
err = proto.Unmarshal(queryBytes, query)
assert.NoError(t, err)
assert.Equal(t, s4_svc.MinAddress, s4.UnmarshalAddress(query.AddressRange.MinAddress))
assert.Equal(t, s4_svc.MaxAddress, s4.UnmarshalAddress(query.AddressRange.MaxAddress))
compareSnapshotRows(t, query.Rows, rows)
})`
$DIR/core/services/ocr2/plugins/s4/plugin_test.go: `.On("GetSnapshot", mock.Anything, mock.Anything)`
$DIR/core/services/ocr2/plugins/s4/plugin_test.go: `.Return(rows, nil)`
$DIR/core/services/ocr2/plugins/s4/plugin_test.go: `.Once()`
$DIR/core/services/ocr2/plugins/s4/plugin_test.go: `.Query(testutils.Context(t), types.ReportTimestamp{})`
$DIR/core/services/ocr2/plugins/s4/plugin_test.go: `.Context(t)`
$DIR/core/services/ocr2/plugins/s4/plugin_test.go: `.Unmarshal(queryBytes, query)`
$DIR/core/services/ocr2/plugins/s4/plugin_test.go: `.Run("empty", func(t *testing.T) {
empty := make([]*s4_svc.SnapshotRow, 0)
orm.On("GetSnapshot", mock.Anything, mock.Anything).Return(empty, nil).Once()
query, err := plugin.Query(testutils.Context(t), types.ReportTimestamp{})
assert.NoError(t, err)
assert.NotNil(t, query)
})`
$DIR/core/services/ocr2/plugins/s4/plugin_test.go: `.On("GetSnapshot", mock.Anything, mock.Anything)`
$DIR/core/services/ocr2/plugins/s4/plugin_test.go: `.Return(empty, nil)`
$DIR/core/services/ocr2/plugins/s4/plugin_test.go: `.Once()`
$DIR/core/services/ocr2/plugins/s4/plugin_test.go: `.Query(testutils.Context(t), types.ReportTimestamp{})`
$DIR/core/services/ocr2/plugins/s4/plugin_test.go: `.Context(t)`
$DIR/core/services/ocr2/plugins/s4/plugin_test.go: `.New(thisAddress.Big())`
$DIR/core/services/ocr2/plugins/s4/plugin_test.go: `.Big()`
$DIR/core/services/ocr2/plugins/s4/plugin_test.go: `.NewInitialAddressRangeForIntervals(config.NSnapshotShards)`
$DIR/core/services/ocr2/plugins/s4/plugin_test.go: `.On("GetSnapshot", mock.Anything, mock.Anything)`
$DIR/core/services/ocr2/plugins/s4/plugin_test.go: `.Return(versions[from:to], nil)`
$DIR/core/services/ocr2/plugins/s4/plugin_test.go: `.Once()`
$DIR/core/services/ocr2/plugins/s4/plugin_test.go: `.Query(testutils.Context(t), types.ReportTimestamp{})`
$DIR/core/services/ocr2/plugins/s4/plugin_test.go: `.Context(t)`
$DIR/core/services/ocr2/plugins/s4/plugin_test.go: `.Unmarshal(query, qq)`
$DIR/core/services/ocr2/plugins/s4/plugin_test.go: `.UnmarshalAddress(r.Address)`
$DIR/core/services/ocr2/plugins/s4/plugin_test.go: `.Advance()`
$DIR/core/services/ocr2/plugins/s4/plugin_test.go: `.NewOCRWrapper(logger.TestLogger(t), true, func(msg string) {})`
$DIR/core/services/ocr2/plugins/s4/plugin_test.go: `.TestLogger(t)`
$DIR/core/services/ocr2/plugins/s4/plugin_test.go: `.NewORM(t)`
$DIR/core/services/ocr2/plugins/s4/plugin_test.go: `.NewReportingPlugin(logger, config, orm)`
$DIR/core/services/ocr2/plugins/s4/plugin_test.go: `.Run("all unconfirmed", func(t *testing.T) {
ormRows := generateTestOrmRows(t, int(config.MaxObservationEntries), time.Minute)
for _, or := range ormRows {
or.Confirmed = false
}
orm.On("DeleteExpired", mock.Anything, uint(10), mock.Anything, mock.Anything).Return(int64(10), nil).Once()
orm.On("GetUnconfirmedRows", mock.Anything, config.MaxObservationEntries).Return(ormRows, nil).Once()
observation, err := plugin.Observation(testutils.Context(t), types.ReportTimestamp{}, []byte{})
assert.NoError(t, err)
rows := &s4.Rows{}
err = proto.Unmarshal(observation, rows)
assert.NoError(t, err)
assert.Len(t, rows.Rows, int(config.MaxObservationEntries))
})`
$DIR/core/services/ocr2/plugins/s4/plugin_test.go: `.On("DeleteExpired", mock.Anything, uint(10), mock.Anything, mock.Anything)`
$DIR/core/services/ocr2/plugins/s4/plugin_test.go: `.Return(int64(10), nil)`
$DIR/core/services/ocr2/plugins/s4/plugin_test.go: `.Once()`
$DIR/core/services/ocr2/plugins/s4/plugin_test.go: `.On("GetUnconfirmedRows", mock.Anything, config.MaxObservationEntries)`
$DIR/core/services/ocr2/plugins/s4/plugin_test.go: `.Return(ormRows, nil)`
$DIR/core/services/ocr2/plugins/s4/plugin_test.go: `.Once()`
$DIR/core/services/ocr2/plugins/s4/plugin_test.go: `.Observation(testutils.Context(t), types.ReportTimestamp{}, []byte{})`
$DIR/core/services/ocr2/plugins/s4/plugin_test.go: `.Context(t)`
$DIR/core/services/ocr2/plugins/s4/plugin_test.go: `.Unmarshal(observation, rows)`
$DIR/core/services/ocr2/plugins/s4/plugin_test.go: `.Run("unconfirmed with query", func(t *testing.T) {
numUnconfirmed := int(config.MaxObservationEntries / 2)
ormRows := generateTestOrmRows(t, int(config.MaxObservationEntries), time.Minute)
snapshot := make([]*s4_svc.SnapshotRow, len(ormRows))
for i, or := range ormRows {
or.Confirmed = i < numUnconfirmed // First half are confirmed
or.Version = uint64(i)
snapshot[i] = &s4_svc.SnapshotRow{
Address: or.Address,
SlotId: or.SlotId,
Version: or.Version,
Confirmed: or.Confirmed,
}
}
orm.On("DeleteExpired", mock.Anything, uint(10), mock.Anything, mock.Anything).Return(int64(10), nil).Once()
orm.On("GetUnconfirmedRows", mock.Anything, config.MaxObservationEntries).Return(ormRows[numUnconfirmed:], nil).Once()
orm.On("GetSnapshot", mock.Anything, mock.Anything).Return(snapshot, nil).Once()
snapshotRows := rowsToShapshotRows(ormRows)
query := &s4.Query{
Rows: make([]*s4.SnapshotRow, len(snapshotRows)),
}
numHigherVersion := 2
for i, v := range snapshotRows {
query.Rows[i] = &s4.SnapshotRow{
Address: v.Address.Bytes(),
Slotid: uint32(v.SlotId),
Version: v.Version,
}
if i < numHigherVersion {
ormRows[i].Version++
snapshot[i].Version++
orm.On("Get", mock.Anything, v.Address, v.SlotId).Return(ormRows[i], nil).Once()
}
}
queryBytes, err := proto.Marshal(query)
assert.NoError(t, err)
observation, err := plugin.Observation(testutils.Context(t), types.ReportTimestamp{}, queryBytes)
assert.NoError(t, err)
rows := &s4.Rows{}
err = proto.Unmarshal(observation, rows)
assert.NoError(t, err)
assert.Len(t, rows.Rows, numUnconfirmed+numHigherVersion)
for i := 0; i < numUnconfirmed; i++ {
assert.Equal(t, ormRows[numUnconfirmed+i].Version, rows.Rows[i].Version)
}
for i := 0; i < numHigherVersion; i++ {
assert.Equal(t, ormRows[i].Version, rows.Rows[numUnconfirmed+i].Version)
}
})`
$DIR/core/services/ocr2/plugins/s4/plugin_test.go: `.On("DeleteExpired", mock.Anything, uint(10), mock.Anything, mock.Anything)`
$DIR/core/services/ocr2/plugins/s4/plugin_test.go: `.Return(int64(10), nil)`
$DIR/core/services/ocr2/plugins/s4/plugin_test.go: `.Once()`
$DIR/core/services/ocr2/plugins/s4/plugin_test.go: `.On("GetUnconfirmedRows", mock.Anything, config.MaxObservationEntries)`
$DIR/core/services/ocr2/plugins/s4/plugin_test.go: `.Return(ormRows[numUnconfirmed:], nil)`
$DIR/core/services/ocr2/plugins/s4/plugin_test.go: `.Once()`
$DIR/core/services/ocr2/plugins/s4/plugin_test.go: `.On("GetSnapshot", mock.Anything, mock.Anything)`
$DIR/core/services/ocr2/plugins/s4/plugin_test.go: `.Return(snapshot, nil)`
$DIR/core/services/ocr2/plugins/s4/plugin_test.go: `.Once()`
$DIR/core/services/ocr2/plugins/s4/plugin_test.go: `.Address.Bytes()`
$DIR/core/services/ocr2/plugins/s4/plugin_test.go: `.On("Get", mock.Anything, v.Address, v.SlotId)`
$DIR/core/services/ocr2/plugins/s4/plugin_test.go: `.Return(ormRows[i], nil)`
$DIR/core/services/ocr2/plugins/s4/plugin_test.go: `.Once()`
$DIR/core/services/ocr2/plugins/s4/plugin_test.go: `.Marshal(query)`
$DIR/core/services/ocr2/plugins/s4/plugin_test.go: `.Observation(testutils.Context(t), types.ReportTimestamp{}, queryBytes)`
$DIR/core/services/ocr2/plugins/s4/plugin_test.go: `.Context(t)`
$DIR/core/services/ocr2/plugins/s4/plugin_test.go: `.Unmarshal(observation, rows)`
$DIR/core/services/ocr2/plugins/s4/plugin_test.go: `.Address.Bytes()`
$DIR/core/services/ocr2/plugins/s4/plugin_test.go: `.Address.Bytes()`
$DIR/core/services/ocr2/plugins/s4/plugin_test.go: `.Marshal(query)`
$DIR/core/services/ocr2/plugins/s4/plugin_test.go: `.On("DeleteExpired", mock.Anything, uint(10), mock.Anything, mock.Anything)`
$DIR/core/services/ocr2/plugins/s4/plugin_test.go: `.Return(int64(10), nil)`
$DIR/core/services/ocr2/plugins/s4/plugin_test.go: `.Once()`
$DIR/core/services/ocr2/plugins/s4/plugin_test.go: `.On("GetUnconfirmedRows", mock.Anything, config.MaxObservationEntries)`
$DIR/core/services/ocr2/plugins/s4/plugin_test.go: `.Return([]*s4_svc.Row{}, nil)`
$DIR/core/services/ocr2/plugins/s4/plugin_test.go: `.Once()`
$DIR/core/services/ocr2/plugins/s4/plugin_test.go: `.On("GetSnapshot", mock.Anything, mock.Anything)`
$DIR/core/services/ocr2/plugins/s4/plugin_test.go: `.Return(snapshot, nil)`
$DIR/core/services/ocr2/plugins/s4/plugin_test.go: `.Once()`
$DIR/core/services/ocr2/plugins/s4/plugin_test.go: `.On("Get", mock.Anything, snapshot[1].Address, snapshot[1].SlotId)`
$DIR/core/services/ocr2/plugins/s4/plugin_test.go: `.Return(ormRows[1], nil)`
$DIR/core/services/ocr2/plugins/s4/plugin_test.go: `.Once()`
$DIR/core/services/ocr2/plugins/s4/plugin_test.go: `.On("Get", mock.Anything, snapshot[2].Address, snapshot[2].SlotId)`
$DIR/core/services/ocr2/plugins/s4/plugin_test.go: `.Return(ormRows[2], nil)`
$DIR/core/services/ocr2/plugins/s4/plugin_test.go: `.Once()`
$DIR/core/services/ocr2/plugins/s4/plugin_test.go: `.Observation(testutils.Context(t), types.ReportTimestamp{}, queryBytes)`
$DIR/core/services/ocr2/plugins/s4/plugin_test.go: `.Context(t)`
$DIR/core/services/ocr2/plugins/s4/plugin_test.go: `.Unmarshal(observation, rows)`
$DIR/core/services/ocr2/plugins/s4/plugin_test.go: `.NewOCRWrapper(logger.TestLogger(t), true, func(msg string) {})`
$DIR/core/services/ocr2/plugins/s4/plugin_test.go: `.TestLogger(t)`
$DIR/core/services/ocr2/plugins/s4/plugin_test.go: `.NewORM(t)`
$DIR/core/services/ocr2/plugins/s4/plugin_test.go: `.NewReportingPlugin(logger, config, orm)`
$DIR/core/services/ocr2/plugins/s4/plugin_test.go: `.Marshal(&s4.Rows{Rows: rows})`
$DIR/core/services/ocr2/plugins/s4/plugin_test.go: `.Report(testutils.Context(t), types.ReportTimestamp{}, nil, aos)`
$DIR/core/services/ocr2/plugins/s4/plugin_test.go: `.Context(t)`
$DIR/core/services/ocr2/plugins/s4/plugin_test.go: `.Unmarshal(report, reportRows)`
$DIR/core/services/ocr2/plugins/s4/plugin_test.go: `.Report(testutils.Context(t), types.ReportTimestamp{}, nil, aos)`
$DIR/core/services/ocr2/plugins/s4/plugin_test.go: `.Context(t)`
$DIR/core/services/ocr2/plugins/s4/plugin_test.go: `.Unmarshal(report2, reportRows2)`
$DIR/core/services/ocr2/plugins/threshold/decryption_queue_test.go: `waitForPendingRequestToBeAdded(t, dq, []byte("1"))`
$DIR/core/services/ocr2/plugins/threshold/decryption_queue_test.go: `dq.SetResult([]byte("1"), []byte("decrypted"), nil)`
$DIR/core/services/ocr2/plugins/threshold/decryption_queue_test.go: `waitForPendingRequestToBeAdded(t, dq, []byte("1"))`
$DIR/core/services/ocr2/plugins/threshold/decryption_queue_test.go: `waitForPendingRequestToBeAdded(t, dq, []byte("4"))`
$DIR/core/services/ocr2/plugins/threshold/decryption_queue_test.go: `waitForPendingRequestToBeAdded(t, dq, []byte("5"))`
$DIR/core/services/ocr2/plugins/threshold/decryption_queue_test.go: `waitForPendingRequestToBeAdded(t, dq, []byte("6"))`
$DIR/core/services/ocr2/plugins/threshold/decryption_queue_test.go: `waitForPendingRequestToBeAdded(t, dq, []byte("7"))`
$DIR/core/services/ocr2/plugins/threshold/decryption_queue_test.go: `dq.SetResult([]byte("9"), []byte("decrypted"), nil)`
$DIR/core/services/ocr2/plugins/threshold/decryption_queue_test.go: `dq.SetResult([]byte("9"), []byte("decrypted"), nil)`
$DIR/core/services/ocr2/plugins/threshold/decryption_queue_test.go: `waitForCompletedRequestToBeAdded(t, dq, []byte("9"))`
$DIR/core/services/ocr2/plugins/threshold/decryption_queue_test.go: `dq.SetResult([]byte("10"), []byte("decrypted"), nil)`
$DIR/core/services/ocr2/plugins/threshold/decryption_queue_test.go: `waitForPendingRequestToBeAdded(t, dq, ciphertextId)`
$DIR/core/services/ocr2/plugins/threshold/decryption_queue_test.go: `dq.SetResult(ciphertextId, nil, decryptionPlugin.ErrAggregation)`
$DIR/core/services/ocr2/plugins/threshold/decryption_queue_test.go: `waitForPendingRequestToBeAdded(t, dq, ciphertextId)`
$DIR/core/services/ocr2/plugins/threshold/decryption_queue_test.go: `close(dq.pendingRequests[string(ciphertextId)].chPlaintext)`
$DIR/core/services/ocr2/plugins/threshold/decryption_queue_test.go: `waitForPendingRequestToBeAdded(t, dq, []byte("11"))`
$DIR/core/services/ocr2/plugins/threshold/decryption_queue_test.go: `waitForPendingRequestToBeAdded(t, dq, []byte("12"))`
$DIR/core/services/ocr2/plugins/threshold/decryption_queue_test.go: `waitForPendingRequestToBeAdded(t, dq, []byte("13"))`
$DIR/core/services/ocr2/plugins/threshold/decryption_queue_test.go: `waitForPendingRequestToBeAdded(t, dq, []byte("11"))`
$DIR/core/services/ocr2/plugins/threshold/decryption_queue_test.go: `waitForPendingRequestToBeAdded(t, dq, []byte("12"))`
$DIR/core/services/ocr2/plugins/threshold/decryption_queue_test.go: `waitForPendingRequestToBeAdded(t, dq, []byte("13"))`
$DIR/core/services/ocr2/plugins/threshold/decryption_queue_test.go: `waitForPendingRequestToBeAdded(t, dq, []byte("11"))`
$DIR/core/services/ocr2/plugins/threshold/decryption_queue_test.go: `waitForPendingRequestToBeAdded(t, dq, []byte("11"))`
$DIR/core/services/ocr2/plugins/threshold/decryption_queue_test.go: `cancel()`
$DIR/core/services/ocr2/plugins/threshold/decryption_queue_test.go: `waitForPendingRequestToBeRemoved(t, dq, []byte("11"))`
$DIR/core/services/ocr2/plugins/threshold/decryption_queue_test.go: `dq.SetResult([]byte("14"), []byte("decrypted"), nil)`
$DIR/core/services/ocr2/plugins/threshold/decryption_queue_test.go: `.TestLogger(t)`
$DIR/core/services/ocr2/plugins/threshold/decryption_queue_test.go: `.Duration(1002)`
$DIR/core/services/ocr2/plugins/threshold/decryption_queue_test.go: `.TestLogger(t)`
$DIR/core/services/ocr2/plugins/threshold/decryption_queue_test.go: `.WaitTimeout(t)`
$DIR/core/services/ocr2/plugins/threshold/decryption_queue_test.go: `.SetResult([]byte("1"), []byte("decrypted"), nil)`
$DIR/core/services/ocr2/plugins/threshold/decryption_queue_test.go: `.WithCancel(testutils.Context(t))`
$DIR/core/services/ocr2/plugins/threshold/decryption_queue_test.go: `.Context(t)`
$DIR/core/services/ocr2/plugins/threshold/decryption_queue_test.go: `.Decrypt(ctx, []byte("1"), []byte("encrypted"))`
$DIR/core/services/ocr2/plugins/threshold/decryption_queue_test.go: `.DeepEqual(pt, []byte("decrypted"))`
$DIR/core/services/ocr2/plugins/threshold/decryption_queue_test.go: `.TestLogger(t)`
$DIR/core/services/ocr2/plugins/threshold/decryption_queue_test.go: `.WaitTimeout(t)`
$DIR/core/services/ocr2/plugins/threshold/decryption_queue_test.go: `.WithCancel(testutils.Context(t))`
$DIR/core/services/ocr2/plugins/threshold/decryption_queue_test.go: `.Context(t)`
$DIR/core/services/ocr2/plugins/threshold/decryption_queue_test.go: `.Decrypt(ctx, []byte("largeCiphertextId"), []byte("ciphertext"))`
$DIR/core/services/ocr2/plugins/threshold/decryption_queue_test.go: `.TestLogger(t)`
$DIR/core/services/ocr2/plugins/threshold/decryption_queue_test.go: `.WaitTimeout(t)`
$DIR/core/services/ocr2/plugins/threshold/decryption_queue_test.go: `.WithCancel(testutils.Context(t))`
$DIR/core/services/ocr2/plugins/threshold/decryption_queue_test.go: `.Context(t)`
$DIR/core/services/ocr2/plugins/threshold/decryption_queue_test.go: `.Decrypt(ctx, []byte(""), []byte("ciphertext"))`
$DIR/core/services/ocr2/plugins/threshold/decryption_queue_test.go: `.TestLogger(t)`
$DIR/core/services/ocr2/plugins/threshold/decryption_queue_test.go: `.WaitTimeout(t)`
$DIR/core/services/ocr2/plugins/threshold/decryption_queue_test.go: `.WithCancel(testutils.Context(t))`
$DIR/core/services/ocr2/plugins/threshold/decryption_queue_test.go: `.Context(t)`
$DIR/core/services/ocr2/plugins/threshold/decryption_queue_test.go: `.Decrypt(ctx, []byte("1"), []byte("largeciphertext"))`
$DIR/core/services/ocr2/plugins/threshold/decryption_queue_test.go: `.TestLogger(t)`
$DIR/core/services/ocr2/plugins/threshold/decryption_queue_test.go: `.WaitTimeout(t)`
$DIR/core/services/ocr2/plugins/threshold/decryption_queue_test.go: `.WithCancel(testutils.Context(t))`
$DIR/core/services/ocr2/plugins/threshold/decryption_queue_test.go: `.Context(t)`
$DIR/core/services/ocr2/plugins/threshold/decryption_queue_test.go: `.Decrypt(ctx, []byte("1"), []byte(""))`
$DIR/core/services/ocr2/plugins/threshold/decryption_queue_test.go: `.TestLogger(t)`
$DIR/core/services/ocr2/plugins/threshold/decryption_queue_test.go: `.WaitTimeout(t)`
$DIR/core/services/ocr2/plugins/threshold/decryption_queue_test.go: `.WithCancel(testutils.Context(t))`
$DIR/core/services/ocr2/plugins/threshold/decryption_queue_test.go: `.Context(t)`
$DIR/core/services/ocr2/plugins/threshold/decryption_queue_test.go: `.Decrypt(ctx, []byte("1"), []byte("encrypted"))`
$DIR/core/services/ocr2/plugins/threshold/decryption_queue_test.go: `.Decrypt(ctx, []byte("1"), []byte("encrypted"))`
$DIR/core/services/ocr2/plugins/threshold/decryption_queue_test.go: `.TestLogger(t)`
$DIR/core/services/ocr2/plugins/threshold/decryption_queue_test.go: `.WithTimeout(testutils.Context(t), time.Duration(100)*time.Millisecond)`
$DIR/core/services/ocr2/plugins/threshold/decryption_queue_test.go: `.Context(t)`
$DIR/core/services/ocr2/plugins/threshold/decryption_queue_test.go: `.Duration(100)`
$DIR/core/services/ocr2/plugins/threshold/decryption_queue_test.go: `.Decrypt(ctx, []byte("2"), []byte("encrypted"))`
$DIR/core/services/ocr2/plugins/threshold/decryption_queue_test.go: `.TestLogger(t)`
$DIR/core/services/ocr2/plugins/threshold/decryption_queue_test.go: `.WaitTimeout(t)`
$DIR/core/services/ocr2/plugins/threshold/decryption_queue_test.go: `.WithCancel(testutils.Context(t))`
$DIR/core/services/ocr2/plugins/threshold/decryption_queue_test.go: `.Context(t)`
$DIR/core/services/ocr2/plugins/threshold/decryption_queue_test.go: `.Decrypt(ctx1, []byte("4"), []byte("encrypted"))`
$DIR/core/services/ocr2/plugins/threshold/decryption_queue_test.go: `.WithCancel(testutils.Context(t))`
$DIR/core/services/ocr2/plugins/threshold/decryption_queue_test.go: `.Context(t)`
$DIR/core/services/ocr2/plugins/threshold/decryption_queue_test.go: `.Decrypt(ctx2, []byte("3"), []byte("encrypted"))`
$DIR/core/services/ocr2/plugins/threshold/decryption_queue_test.go: `.TestLogger(t)`
$DIR/core/services/ocr2/plugins/threshold/decryption_queue_test.go: `.WaitTimeout(t)`
$DIR/core/services/ocr2/plugins/threshold/decryption_queue_test.go: `.WithCancel(testutils.Context(t))`
$DIR/core/services/ocr2/plugins/threshold/decryption_queue_test.go: `.Context(t)`
$DIR/core/services/ocr2/plugins/threshold/decryption_queue_test.go: `.Decrypt(ctx1, []byte("5"), []byte("encrypted"))`
$DIR/core/services/ocr2/plugins/threshold/decryption_queue_test.go: `.WithCancel(testutils.Context(t))`
$DIR/core/services/ocr2/plugins/threshold/decryption_queue_test.go: `.Context(t)`
$DIR/core/services/ocr2/plugins/threshold/decryption_queue_test.go: `.Decrypt(ctx2, []byte("6"), []byte("encrypted"))`
$DIR/core/services/ocr2/plugins/threshold/decryption_queue_test.go: `.GetRequests(2, 1000)`
$DIR/core/services/ocr2/plugins/threshold/decryption_queue_test.go: `.DeepEqual(requests, expected)`
$DIR/core/services/ocr2/plugins/threshold/decryption_queue_test.go: `.TestLogger(t)`
$DIR/core/services/ocr2/plugins/threshold/decryption_queue_test.go: `.WaitTimeout(t)`
$DIR/core/services/ocr2/plugins/threshold/decryption_queue_test.go: `.WithCancel(testutils.Context(t))`
$DIR/core/services/ocr2/plugins/threshold/decryption_queue_test.go: `.Context(t)`
$DIR/core/services/ocr2/plugins/threshold/decryption_queue_test.go: `.Decrypt(ctx, []byte("7"), []byte("encrypted"))`
$DIR/core/services/ocr2/plugins/threshold/decryption_queue_test.go: `.GetCiphertext([]byte("7"))`
$DIR/core/services/ocr2/plugins/threshold/decryption_queue_test.go: `.DeepEqual(ct, []byte("encrypted"))`
$DIR/core/services/ocr2/plugins/threshold/decryption_queue_test.go: `.TestLogger(t)`
$DIR/core/services/ocr2/plugins/threshold/decryption_queue_test.go: `.WaitTimeout(t)`
$DIR/core/services/ocr2/plugins/threshold/decryption_queue_test.go: `.GetCiphertext([]byte{0xa5})`
$DIR/core/services/ocr2/plugins/threshold/decryption_queue_test.go: `.Is(err, decryptionPlugin.ErrNotFound)`
$DIR/core/services/ocr2/plugins/threshold/decryption_queue_test.go: `.TestLogger(t)`
$DIR/core/services/ocr2/plugins/threshold/decryption_queue_test.go: `.WaitTimeout(t)`
$DIR/core/services/ocr2/plugins/threshold/decryption_queue_test.go: `.SetResult([]byte("9"), []byte("decrypted"), nil)`
$DIR/core/services/ocr2/plugins/threshold/decryption_queue_test.go: `.WithCancel(testutils.Context(t))`
$DIR/core/services/ocr2/plugins/threshold/decryption_queue_test.go: `.Context(t)`
$DIR/core/services/ocr2/plugins/threshold/decryption_queue_test.go: `.Decrypt(ctx, []byte("9"), []byte("encrypted"))`
$DIR/core/services/ocr2/plugins/threshold/decryption_queue_test.go: `.DeepEqual(pt, []byte("decrypted"))`
$DIR/core/services/ocr2/plugins/threshold/decryption_queue_test.go: `.TestLogger(t)`
$DIR/core/services/ocr2/plugins/threshold/decryption_queue_test.go: `.SetResult([]byte("9"), []byte("decrypted"), nil)`
$DIR/core/services/ocr2/plugins/threshold/decryption_queue_test.go: `.WithTimeout(testutils.Context(t), time.Duration(100)*time.Millisecond)`
$DIR/core/services/ocr2/plugins/threshold/decryption_queue_test.go: `.Context(t)`
$DIR/core/services/ocr2/plugins/threshold/decryption_queue_test.go: `.Duration(100)`
$DIR/core/services/ocr2/plugins/threshold/decryption_queue_test.go: `.Decrypt(ctx, []byte("9"), []byte("encrypted"))`
$DIR/core/services/ocr2/plugins/threshold/decryption_queue_test.go: `.TestLogger(t)`
$DIR/core/services/ocr2/plugins/threshold/decryption_queue_test.go: `.WaitTimeout(t)`
$DIR/core/services/ocr2/plugins/threshold/decryption_queue_test.go: `.SetResult([]byte("10"), []byte("decrypted"), nil)`
$DIR/core/services/ocr2/plugins/threshold/decryption_queue_test.go: `.WithCancel(testutils.Context(t))`
$DIR/core/services/ocr2/plugins/threshold/decryption_queue_test.go: `.Context(t)`
$DIR/core/services/ocr2/plugins/threshold/decryption_queue_test.go: `.Decrypt(ctx1, []byte("10"), []byte("encrypted"))`
$DIR/core/services/ocr2/plugins/threshold/decryption_queue_test.go: `.WithTimeout(testutils.Context(t), time.Duration(100)*time.Millisecond)`
$DIR/core/services/ocr2/plugins/threshold/decryption_queue_test.go: `.Context(t)`
$DIR/core/services/ocr2/plugins/threshold/decryption_queue_test.go: `.Duration(100)`
$DIR/core/services/ocr2/plugins/threshold/decryption_queue_test.go: `.Decrypt(ctx2, []byte("10"), []byte("encrypted"))`
$DIR/core/services/ocr2/plugins/threshold/decryption_queue_test.go: `.TestLogger(t)`
$DIR/core/services/ocr2/plugins/threshold/decryption_queue_test.go: `.WaitTimeout(t)`
$DIR/core/services/ocr2/plugins/threshold/decryption_queue_test.go: `.SetResult(ciphertextId, nil, decryptionPlugin.ErrAggregation)`
$DIR/core/services/ocr2/plugins/threshold/decryption_queue_test.go: `.WithCancel(testutils.Context(t))`
$DIR/core/services/ocr2/plugins/threshold/decryption_queue_test.go: `.Context(t)`
$DIR/core/services/ocr2/plugins/threshold/decryption_queue_test.go: `.Decrypt(ctx, ciphertextId, []byte("encrypted"))`
$DIR/core/services/ocr2/plugins/threshold/decryption_queue_test.go: `.TestLogger(t)`
$DIR/core/services/ocr2/plugins/threshold/decryption_queue_test.go: `.WaitTimeout(t)`
$DIR/core/services/ocr2/plugins/threshold/decryption_queue_test.go: `.WithCancel(testutils.Context(t))`
$DIR/core/services/ocr2/plugins/threshold/decryption_queue_test.go: `.Context(t)`
$DIR/core/services/ocr2/plugins/threshold/decryption_queue_test.go: `.Decrypt(ctx, ciphertextId, []byte("encrypted"))`
$DIR/core/services/ocr2/plugins/threshold/decryption_queue_test.go: `.TestLogger(t)`
$DIR/core/services/ocr2/plugins/threshold/decryption_queue_test.go: `.WaitTimeout(t)`
$DIR/core/services/ocr2/plugins/threshold/decryption_queue_test.go: `.WithCancel(testutils.Context(t))`
$DIR/core/services/ocr2/plugins/threshold/decryption_queue_test.go: `.Context(t)`
$DIR/core/services/ocr2/plugins/threshold/decryption_queue_test.go: `.Decrypt(ctx1, []byte("11"), []byte("encrypted"))`
$DIR/core/services/ocr2/plugins/threshold/decryption_queue_test.go: `.WithCancel(testutils.Context(t))`
$DIR/core/services/ocr2/plugins/threshold/decryption_queue_test.go: `.Context(t)`
$DIR/core/services/ocr2/plugins/threshold/decryption_queue_test.go: `.Decrypt(ctx2, []byte("12"), []byte("encrypted"))`
$DIR/core/services/ocr2/plugins/threshold/decryption_queue_test.go: `.WithCancel(testutils.Context(t))`
$DIR/core/services/ocr2/plugins/threshold/decryption_queue_test.go: `.Context(t)`
$DIR/core/services/ocr2/plugins/threshold/decryption_queue_test.go: `.Decrypt(ctx3, []byte("13"), []byte("encrypted"))`
$DIR/core/services/ocr2/plugins/threshold/decryption_queue_test.go: `.GetRequests(2, 1000)`
$DIR/core/services/ocr2/plugins/threshold/decryption_queue_test.go: `.DeepEqual(requests, expected)`
$DIR/core/services/ocr2/plugins/threshold/decryption_queue_test.go: `.TestLogger(t)`
$DIR/core/services/ocr2/plugins/threshold/decryption_queue_test.go: `.WaitTimeout(t)`
$DIR/core/services/ocr2/plugins/threshold/decryption_queue_test.go: `.WithCancel(testutils.Context(t))`
$DIR/core/services/ocr2/plugins/threshold/decryption_queue_test.go: `.Context(t)`
$DIR/core/services/ocr2/plugins/threshold/decryption_queue_test.go: `.Decrypt(ctx1, []byte("11"), []byte("encrypted"))`
$DIR/core/services/ocr2/plugins/threshold/decryption_queue_test.go: `.WithCancel(testutils.Context(t))`
$DIR/core/services/ocr2/plugins/threshold/decryption_queue_test.go: `.Context(t)`
$DIR/core/services/ocr2/plugins/threshold/decryption_queue_test.go: `.Decrypt(ctx2, []byte("12"), []byte("encrypted"))`
$DIR/core/services/ocr2/plugins/threshold/decryption_queue_test.go: `.WithCancel(testutils.Context(t))`
$DIR/core/services/ocr2/plugins/threshold/decryption_queue_test.go: `.Context(t)`
$DIR/core/services/ocr2/plugins/threshold/decryption_queue_test.go: `.Decrypt(ctx3, []byte("13"), []byte("encrypted"))`
$DIR/core/services/ocr2/plugins/threshold/decryption_queue_test.go: `.GetRequests(4, 30)`
$DIR/core/services/ocr2/plugins/threshold/decryption_queue_test.go: `.DeepEqual(requests, expected)`
$DIR/core/services/ocr2/plugins/threshold/decryption_queue_test.go: `.TestLogger(t)`
$DIR/core/services/ocr2/plugins/threshold/decryption_queue_test.go: `.WaitTimeout(t)`
$DIR/core/services/ocr2/plugins/threshold/decryption_queue_test.go: `.WithCancel(testutils.Context(t))`
$DIR/core/services/ocr2/plugins/threshold/decryption_queue_test.go: `.Context(t)`
$DIR/core/services/ocr2/plugins/threshold/decryption_queue_test.go: `.Decrypt(ctx, []byte("11"), []byte("encrypted"))`
$DIR/core/services/ocr2/plugins/threshold/decryption_queue_test.go: `.GetRequests(2, 1000)`
$DIR/core/services/ocr2/plugins/threshold/decryption_queue_test.go: `.DeepEqual(requests, expected)`
$DIR/core/services/ocr2/plugins/threshold/decryption_queue_test.go: `.TestLogger(t)`
$DIR/core/services/ocr2/plugins/threshold/decryption_queue_test.go: `.WaitTimeout(t)`
$DIR/core/services/ocr2/plugins/threshold/decryption_queue_test.go: `.WithCancel(testutils.Context(t))`
$DIR/core/services/ocr2/plugins/threshold/decryption_queue_test.go: `.Context(t)`
$DIR/core/services/ocr2/plugins/threshold/decryption_queue_test.go: `.Decrypt(ctx, []byte("11"), []byte("encrypted"))`
$DIR/core/services/ocr2/plugins/threshold/decryption_queue_test.go: `.GetRequests(2, 1000)`
$DIR/core/services/ocr2/plugins/threshold/decryption_queue_test.go: `.DeepEqual(requests, expected)`
$DIR/core/services/ocr2/plugins/threshold/decryption_queue_test.go: `.TestLogger(t)`
$DIR/core/services/ocr2/plugins/threshold/decryption_queue_test.go: `.WaitTimeout(t)`
$DIR/core/services/ocr2/plugins/threshold/decryption_queue_test.go: `.WithCancel(testutils.Context(t))`
$DIR/core/services/ocr2/plugins/threshold/decryption_queue_test.go: `.Context(t)`
$DIR/core/services/ocr2/plugins/threshold/decryption_queue_test.go: `.Start(ctx)`
$DIR/core/services/ocr2/plugins/threshold/decryption_queue_test.go: `.TestLogger(t)`
$DIR/core/services/ocr2/plugins/threshold/decryption_queue_test.go: `.WaitTimeout(t)`
$DIR/core/services/ocr2/plugins/threshold/decryption_queue_test.go: `.SetResult([]byte("14"), []byte("decrypted"), nil)`
$DIR/core/services/ocr2/validate/validate_test.go: `err = jsonapi.Unmarshal(b, &r)`
$DIR/core/services/ocr2/validate/validate_test.go: `c.OCR2.DatabaseTimeout = commonconfig.MustNewDuration(20 * time.Minute)`
$DIR/core/services/ocr2/validate/validate_test.go: `err = jsonapi.Unmarshal(b, &r)`
$DIR/core/services/ocr2/validate/validate_test.go: `t.Run(tc.name, func(t *testing.T) {
c := configtest.NewGeneralConfig(t, func(c *chainlink.Config, s *chainlink.Secrets) {
c.Insecure.OCRDevelopmentMode = testutils.Ptr(false) // tests run with OCRDevelopmentMode by default.
if tc.overrides != nil {
tc.overrides(c, s)
}
})
s, err := validate.ValidatedOracleSpecToml(testutils.Context(t), c.OCR2(), c.Insecure(), tc.toml, nil)
tc.assertion(t, s, err)
})`
$DIR/core/services/ocr2/validate/validate_test.go: `c.Insecure.OCRDevelopmentMode = testutils.Ptr(false)`
$DIR/core/services/ocr2/validate/validate_test.go: `tc.overrides(c, s)`
$DIR/core/services/ocr2/validate/validate_test.go: `tc.assertion(t, s, err)`
$DIR/core/services/ocr2/validate/validate_test.go: `err = tree.Unmarshal(&o)`
$DIR/core/services/ocr2/validate/validate_test.go: `err = json.Unmarshal(b, e)`
$DIR/core/services/ocr2/validate/validate_test.go: `err = tree.Unmarshal(&o)`
$DIR/core/services/ocr2/validate/validate_test.go: `err = json.Unmarshal(b, oss)`
$DIR/core/services/ocr2/validate/validate_test.go: `.Marshal(os.OCR2OracleSpec)`
$DIR/core/services/ocr2/validate/validate_test.go: `.Unmarshal(b, &r)`
$DIR/core/services/ocr2/validate/validate_test.go: `.MustDecode("0x2222220d5c22223b22225c0d21222222")`
$DIR/core/services/ocr2/validate/validate_test.go: `.MustNewDuration(20 * time.Minute)`
$DIR/core/services/ocr2/validate/validate_test.go: `.Marshal(os.OCR2OracleSpec)`
$DIR/core/services/ocr2/validate/validate_test.go: `.Unmarshal(b, &r)`
$DIR/core/services/ocr2/validate/validate_test.go: `.Run(tc.name, func(t *testing.T) {
c := configtest.NewGeneralConfig(t, func(c *chainlink.Config, s *chainlink.Secrets) {
c.Insecure.OCRDevelopmentMode = testutils.Ptr(false) // tests run with OCRDevelopmentMode by default.
if tc.overrides != nil {
tc.overrides(c, s)
}
})
s, err := validate.ValidatedOracleSpecToml(testutils.Context(t), c.OCR2(), c.Insecure(), tc.toml, nil)
tc.assertion(t, s, err)
})`
$DIR/core/services/ocr2/validate/validate_test.go: `.NewGeneralConfig(t, func(c *chainlink.Config, s *chainlink.Secrets) {
c.Insecure.OCRDevelopmentMode = testutils.Ptr(false) // tests run with OCRDevelopmentMode by default.
if tc.overrides != nil {
tc.overrides(c, s)
}
})`
$DIR/core/services/ocr2/validate/validate_test.go: `.Ptr(false)`
$DIR/core/services/ocr2/validate/validate_test.go: `.overrides(c, s)`
$DIR/core/services/ocr2/validate/validate_test.go: `.ValidatedOracleSpecToml(testutils.Context(t), c.OCR2(), c.Insecure(), tc.toml, nil)`
$DIR/core/services/ocr2/validate/validate_test.go: `.Context(t)`
$DIR/core/services/ocr2/validate/validate_test.go: `.OCR2()`
$DIR/core/services/ocr2/validate/validate_test.go: `.Insecure()`
$DIR/core/services/ocr2/validate/validate_test.go: `.assertion(t, s, err)`
$DIR/core/services/ocr2/validate/validate_test.go: `.Load(payload)`
$DIR/core/services/ocr2/validate/validate_test.go: `.Unmarshal(&o)`
$DIR/core/services/ocr2/validate/validate_test.go: `.Marshal(o)`
$DIR/core/services/ocr2/validate/validate_test.go: `.Unmarshal(b, e)`
$DIR/core/services/ocr2/validate/validate_test.go: `.Load(payload)`
$DIR/core/services/ocr2/validate/validate_test.go: `.Unmarshal(&o)`
$DIR/core/services/ocr2/validate/validate_test.go: `.Marshal(o)`
$DIR/core/services/ocr2/validate/validate_test.go: `.Unmarshal(b, oss)`
$DIR/core/services/ocr2/validate/validate_test.go: `.OnchainSigningStrategy.PublicKey()`
$DIR/core/services/ocr2/validate/validate_test.go: `.OnchainSigningStrategy.KeyBundleID("evm")`
$DIR/core/services/ocrbootstrap/database_test.go: `t.Run("reads and writes config", func(t *testing.T) {
db := ocrbootstrap.NewDB(sqlDB, spec.ID, lggr)
err := db.WriteConfig(testutils.Context(t), config)
require.NoError(t, err)
readConfig, err := db.ReadConfig(testutils.Context(t))
require.NoError(t, err)
require.Equal(t, &config, readConfig)
})`
$DIR/core/services/ocrbootstrap/database_test.go: `t.Run("updates config", func(t *testing.T) {
db := ocrbootstrap.NewDB(sqlDB, spec.ID, lggr)
newConfig := ocrtypes.ContractConfig{
ConfigDigest: testhelpers.MakeConfigDigest(t),
Signers: []ocrtypes.OnchainPublicKey{{0x03}},
Transmitters: []ocrtypes.Account{"test"},
}
err := db.WriteConfig(testutils.Context(t), newConfig)
require.NoError(t, err)
readConfig, err := db.ReadConfig(testutils.Context(t))
require.NoError(t, err)
require.Equal(t, &newConfig, readConfig)
})`
$DIR/core/services/ocrbootstrap/database_test.go: `db = ocrbootstrap.NewDB(sqlDB, -1, lggr)`
$DIR/core/services/ocrbootstrap/database_test.go: `.MakeConfigDigest(t)`
$DIR/core/services/ocrbootstrap/database_test.go: `.TestLogger(t)`
$DIR/core/services/ocrbootstrap/database_test.go: `.Run("reads and writes config", func(t *testing.T) {
db := ocrbootstrap.NewDB(sqlDB, spec.ID, lggr)
err := db.WriteConfig(testutils.Context(t), config)
require.NoError(t, err)
readConfig, err := db.ReadConfig(testutils.Context(t))
require.NoError(t, err)
require.Equal(t, &config, readConfig)
})`
$DIR/core/services/ocrbootstrap/database_test.go: `.NewDB(sqlDB, spec.ID, lggr)`
$DIR/core/services/ocrbootstrap/database_test.go: `.WriteConfig(testutils.Context(t), config)`
$DIR/core/services/ocrbootstrap/database_test.go: `.Context(t)`
$DIR/core/services/ocrbootstrap/database_test.go: `.ReadConfig(testutils.Context(t))`
$DIR/core/services/ocrbootstrap/database_test.go: `.Context(t)`
$DIR/core/services/ocrbootstrap/database_test.go: `.Run("updates config", func(t *testing.T) {
db := ocrbootstrap.NewDB(sqlDB, spec.ID, lggr)
newConfig := ocrtypes.ContractConfig{
ConfigDigest: testhelpers.MakeConfigDigest(t),
Signers: []ocrtypes.OnchainPublicKey{{0x03}},
Transmitters: []ocrtypes.Account{"test"},
}
err := db.WriteConfig(testutils.Context(t), newConfig)
require.NoError(t, err)
readConfig, err := db.ReadConfig(testutils.Context(t))
require.NoError(t, err)
require.Equal(t, &newConfig, readConfig)
})`
$DIR/core/services/ocrbootstrap/database_test.go: `.NewDB(sqlDB, spec.ID, lggr)`
$DIR/core/services/ocrbootstrap/database_test.go: `.MakeConfigDigest(t)`
$DIR/core/services/ocrbootstrap/database_test.go: `.WriteConfig(testutils.Context(t), newConfig)`
$DIR/core/services/ocrbootstrap/database_test.go: `.Context(t)`
$DIR/core/services/ocrbootstrap/database_test.go: `.ReadConfig(testutils.Context(t))`
$DIR/core/services/ocrbootstrap/database_test.go: `.Context(t)`
$DIR/core/services/ocrbootstrap/database_test.go: `.NewDB(sqlDB, spec.ID, lggr)`
$DIR/core/services/ocrbootstrap/database_test.go: `.WriteConfig(testutils.Context(t), config)`
$DIR/core/services/ocrbootstrap/database_test.go: `.Context(t)`
$DIR/core/services/ocrbootstrap/database_test.go: `.NewDB(sqlDB, -1, lggr)`
$DIR/core/services/ocrbootstrap/database_test.go: `.ReadConfig(testutils.Context(t))`
$DIR/core/services/ocrbootstrap/database_test.go: `.Context(t)`
$DIR/core/services/ocrbootstrap/validate_test.go: `t.Run(tc.name, func(t *testing.T) {
s, err := ValidatedBootstrapSpecToml(tc.toml)
tc.assertion(t, s, err)
})`
$DIR/core/services/ocrbootstrap/validate_test.go: `tc.assertion(t, s, err)`
$DIR/core/services/ocrbootstrap/validate_test.go: `.Run(tc.name, func(t *testing.T) {
s, err := ValidatedBootstrapSpecToml(tc.toml)
tc.assertion(t, s, err)
})`
$DIR/core/services/ocrbootstrap/validate_test.go: `.assertion(t, s, err)`
$DIR/core/services/ocrcommon/adapters_test.go: `err = tree.Unmarshal(&o)`
$DIR/core/services/ocrcommon/adapters_test.go: `err = json.Unmarshal(b, oss)`
$DIR/core/services/ocrcommon/adapters_test.go: `reportInfo.Info = infoB`
$DIR/core/services/ocrcommon/adapters_test.go: `ks.On("Get", "pub-key").Return(fakeKey, nil)`
$DIR/core/services/ocrcommon/adapters_test.go: `ks.On("Get", "08d14c6eed757414d72055d28de6caf06535806c6a14e450f3a2f1c854420e17").Return(fakeKey, nil)`
$DIR/core/services/ocrcommon/adapters_test.go: `keyBundles[name] = os`
$DIR/core/services/ocrcommon/adapters_test.go: `_, err = ocrcommon.NewOCR3OnchainKeyringMultiChainAdapter(map[string]ocr2key.KeyBundle{}, logger.TestLogger(t))`
$DIR/core/services/ocrcommon/adapters_test.go: `.NewOCR3OnchainKeyringAdapter(fakeOnchainKeyring{})`
$DIR/core/services/ocrcommon/adapters_test.go: `.Sign(configDigest, seqNr, rwi)`
$DIR/core/services/ocrcommon/adapters_test.go: `.MaxSignatureLength()`
$DIR/core/services/ocrcommon/adapters_test.go: `.Load(payload)`
$DIR/core/services/ocrcommon/adapters_test.go: `.Unmarshal(&o)`
$DIR/core/services/ocrcommon/adapters_test.go: `.Marshal(o)`
$DIR/core/services/ocrcommon/adapters_test.go: `.Unmarshal(b, oss)`
$DIR/core/services/ocrcommon/adapters_test.go: `.NewStruct(map[string]interface{}{
"keyBundleName": "evm",
})`
$DIR/core/services/ocrcommon/adapters_test.go: `.Marshal(info)`
$DIR/core/services/ocrcommon/adapters_test.go: `.NewOCR2(t)`
$DIR/core/services/ocrcommon/adapters_test.go: `.MustNewInsecure(keystest.NewRandReaderFromSeed(1), "evm")`
$DIR/core/services/ocrcommon/adapters_test.go: `.NewRandReaderFromSeed(1)`
$DIR/core/services/ocrcommon/adapters_test.go: `.PublicKey()`
$DIR/core/services/ocrcommon/adapters_test.go: `.On("Get", "pub-key")`
$DIR/core/services/ocrcommon/adapters_test.go: `.Return(fakeKey, nil)`
$DIR/core/services/ocrcommon/adapters_test.go: `.On("Get", "08d14c6eed757414d72055d28de6caf06535806c6a14e450f3a2f1c854420e17")`
$DIR/core/services/ocrcommon/adapters_test.go: `.Return(fakeKey, nil)`
$DIR/core/services/ocrcommon/adapters_test.go: `.OnchainSigningStrategy.ConfigCopy()`
$DIR/core/services/ocrcommon/adapters_test.go: `.OnchainSigningStrategy.KeyBundleID(name)`
$DIR/core/services/ocrcommon/adapters_test.go: `.Get(kbID)`
$DIR/core/services/ocrcommon/adapters_test.go: `.NewOCR3OnchainKeyringMultiChainAdapter(keyBundles, logger.TestLogger(t))`
$DIR/core/services/ocrcommon/adapters_test.go: `.TestLogger(t)`
$DIR/core/services/ocrcommon/adapters_test.go: `.NewOCR3OnchainKeyringMultiChainAdapter(map[string]ocr2key.KeyBundle{}, logger.TestLogger(t))`
$DIR/core/services/ocrcommon/adapters_test.go: `.TestLogger(t)`
$DIR/core/services/ocrcommon/adapters_test.go: `.Sign(configDigest, seqNr, reportInfo)`
$DIR/core/services/ocrcommon/adapters_test.go: `.MaxSignatureLength()`
$DIR/core/services/ocrcommon/adapters_test.go: `.MaxSignatureLength()`
$DIR/core/services/ocrcommon/adapters_test.go: `.NewOCR3ContractTransmitterAdapter(fakeContractTransmitter{})`
$DIR/core/services/ocrcommon/adapters_test.go: `.FromAccount()`
$DIR/core/services/ocrcommon/arbitrum_block_translator_test.go: `t.Run("returns range of current to nil if target is above current block number", func(t *testing.T) {
client := evmtest.NewEthClientMock(t)
abt := ocrcommon.NewArbitrumBlockTranslator(client, lggr)
ctx := testutils.Context(t)
var changedInL1Block int64 = 5541
latestBlock := blocks[1000]
client.On("HeadByNumber", ctx, (*big.Int)(nil)).Return(&latestBlock, nil).Once()
from, to, err := abt.BinarySearch(ctx, changedInL1Block)
require.NoError(t, err)
assert.Equal(t, big.NewInt(1000), from)
assert.Equal(t, (*big.Int)(nil), to)
})`
$DIR/core/services/ocrcommon/arbitrum_block_translator_test.go: `client.On("HeadByNumber", ctx, (*big.Int)(nil)).Return(&latestBlock, nil).Once()`
$DIR/core/services/ocrcommon/arbitrum_block_translator_test.go: `t.Run("returns error if changedInL1Block is less than the lowest possible L1 block on the L2 chain", func(t *testing.T) {
client := evmtest.NewEthClientMock(t)
abt := ocrcommon.NewArbitrumBlockTranslator(client, lggr)
ctx := testutils.Context(t)
var changedInL1Block int64 = 42
latestBlock := blocks[1000]
client.On("HeadByNumber", ctx, (*big.Int)(nil)).Return(&latestBlock, nil).Once()
tmp := new(evmtypes.Head)
client.On("HeadByNumber", ctx, mock.AnythingOfType("*big.Int")).Return(tmp, nil).Run(func(args mock.Arguments) {
*tmp = blocks[args[1].(*big.Int).Int64()]
})
_, _, err := abt.BinarySearch(ctx, changedInL1Block)
assert.EqualError(t, err, "target L1 block number 42 is not represented by any L2 block")
})`
$DIR/core/services/ocrcommon/arbitrum_block_translator_test.go: `client.On("HeadByNumber", ctx, (*big.Int)(nil)).Return(&latestBlock, nil).Once()`
$DIR/core/services/ocrcommon/arbitrum_block_translator_test.go: `client.On("HeadByNumber", ctx, mock.AnythingOfType("*big.Int")).Return(tmp, nil).Run(func(args mock.Arguments) {
*tmp = blocks[args[1].(*big.Int).Int64()]
})`
$DIR/core/services/ocrcommon/arbitrum_block_translator_test.go: `*tmp = blocks[args[1].(*big.Int).Int64()]`
$DIR/core/services/ocrcommon/arbitrum_block_translator_test.go: `t.Run("returns error if L1 block number does not exist for any range of L2 blocks", func(t *testing.T) {
client := evmtest.NewEthClientMock(t)
abt := ocrcommon.NewArbitrumBlockTranslator(client, lggr)
ctx := testutils.Context(t)
var changedInL1Block int64 = 5043
latestBlock := blocks[1000]
client.On("HeadByNumber", ctx, (*big.Int)(nil)).Return(&latestBlock, nil).Once()
tmp := new(evmtypes.Head)
client.On("HeadByNumber", ctx, mock.AnythingOfType("*big.Int")).Return(tmp, nil).Run(func(args mock.Arguments) {
*tmp = blocks[args[1].(*big.Int).Int64()]
})
_, _, err := abt.BinarySearch(ctx, changedInL1Block)
assert.EqualError(t, err, "target L1 block number 5043 is not represented by any L2 block")
})`
$DIR/core/services/ocrcommon/arbitrum_block_translator_test.go: `client.On("HeadByNumber", ctx, (*big.Int)(nil)).Return(&latestBlock, nil).Once()`
$DIR/core/services/ocrcommon/arbitrum_block_translator_test.go: `client.On("HeadByNumber", ctx, mock.AnythingOfType("*big.Int")).Return(tmp, nil).Run(func(args mock.Arguments) {
*tmp = blocks[args[1].(*big.Int).Int64()]
})`
$DIR/core/services/ocrcommon/arbitrum_block_translator_test.go: `*tmp = blocks[args[1].(*big.Int).Int64()]`
$DIR/core/services/ocrcommon/arbitrum_block_translator_test.go: `t.Run("returns correct range of L2 blocks that encompasses all possible blocks that might contain the given L1 block number", func(t *testing.T) {
client := evmtest.NewEthClientMock(t)
abt := ocrcommon.NewArbitrumBlockTranslator(client, lggr)
ctx := testutils.Context(t)
var changedInL1Block int64 = 5042
latestBlock := blocks[1000]
client.On("HeadByNumber", ctx, (*big.Int)(nil)).Return(&latestBlock, nil).Once()
tmp := new(evmtypes.Head)
client.On("HeadByNumber", ctx, mock.AnythingOfType("*big.Int")).Return(tmp, nil).Run(func(args mock.Arguments) {
h := blocks[args[1].(*big.Int).Int64()]
*tmp = h
})
from, to, err := abt.BinarySearch(ctx, changedInL1Block)
require.NoError(t, err)
assert.Equal(t, big.NewInt(98), from)
assert.Equal(t, big.NewInt(137), to)
})`
$DIR/core/services/ocrcommon/arbitrum_block_translator_test.go: `client.On("HeadByNumber", ctx, (*big.Int)(nil)).Return(&latestBlock, nil).Once()`
$DIR/core/services/ocrcommon/arbitrum_block_translator_test.go: `client.On("HeadByNumber", ctx, mock.AnythingOfType("*big.Int")).Return(tmp, nil).Run(func(args mock.Arguments) {
h := blocks[args[1].(*big.Int).Int64()]
*tmp = h
})`
$DIR/core/services/ocrcommon/arbitrum_block_translator_test.go: `*tmp = h`
$DIR/core/services/ocrcommon/arbitrum_block_translator_test.go: `t.Run("handles edge case where L1 is the smallest possible value", func(t *testing.T) {
client := evmtest.NewEthClientMock(t)
abt := ocrcommon.NewArbitrumBlockTranslator(client, lggr)
ctx := testutils.Context(t)
var changedInL1Block int64 = 5000
latestBlock := blocks[1000]
client.On("HeadByNumber", ctx, (*big.Int)(nil)).Return(&latestBlock, nil).Once()
tmp := new(evmtypes.Head)
client.On("HeadByNumber", ctx, mock.AnythingOfType("*big.Int")).Return(tmp, nil).Run(func(args mock.Arguments) {
h := blocks[args[1].(*big.Int).Int64()]
*tmp = h
})
from, to, err := abt.BinarySearch(ctx, changedInL1Block)
require.NoError(t, err)
assert.Equal(t, big.NewInt(0), from)
assert.Equal(t, big.NewInt(16), to)
})`
$DIR/core/services/ocrcommon/arbitrum_block_translator_test.go: `client.On("HeadByNumber", ctx, (*big.Int)(nil)).Return(&latestBlock, nil).Once()`
$DIR/core/services/ocrcommon/arbitrum_block_translator_test.go: `client.On("HeadByNumber", ctx, mock.AnythingOfType("*big.Int")).Return(tmp, nil).Run(func(args mock.Arguments) {
h := blocks[args[1].(*big.Int).Int64()]
*tmp = h
})`
$DIR/core/services/ocrcommon/arbitrum_block_translator_test.go: `*tmp = h`
$DIR/core/services/ocrcommon/arbitrum_block_translator_test.go: `t.Run("leaves upper bound unbounded where L1 is the largest possible value", func(t *testing.T) {
client := evmtest.NewEthClientMock(t)
abt := ocrcommon.NewArbitrumBlockTranslator(client, lggr)
ctx := testutils.Context(t)
var changedInL1Block int64 = 5540
latestBlock := blocks[1000]
client.On("HeadByNumber", ctx, (*big.Int)(nil)).Return(&latestBlock, nil).Once()
tmp := new(evmtypes.Head)
client.On("HeadByNumber", ctx, mock.AnythingOfType("*big.Int")).Return(tmp, nil).Run(func(args mock.Arguments) {
h := blocks[args[1].(*big.Int).Int64()]
*tmp = h
})
from, to, err := abt.BinarySearch(ctx, changedInL1Block)
require.NoError(t, err)
assert.Equal(t, big.NewInt(986), from)
assert.Equal(t, (*big.Int)(nil), to)
})`
$DIR/core/services/ocrcommon/arbitrum_block_translator_test.go: `client.On("HeadByNumber", ctx, (*big.Int)(nil)).Return(&latestBlock, nil).Once()`
$DIR/core/services/ocrcommon/arbitrum_block_translator_test.go: `client.On("HeadByNumber", ctx, mock.AnythingOfType("*big.Int")).Return(tmp, nil).Run(func(args mock.Arguments) {
h := blocks[args[1].(*big.Int).Int64()]
*tmp = h
})`
$DIR/core/services/ocrcommon/arbitrum_block_translator_test.go: `*tmp = h`
$DIR/core/services/ocrcommon/arbitrum_block_translator_test.go: `client.On("HeadByNumber", ctx, (*big.Int)(nil)).Return(&latestBlock, nil).Once()`
$DIR/core/services/ocrcommon/arbitrum_block_translator_test.go: `client.On("HeadByNumber", ctx, mock.AnythingOfType("*big.Int")).Times(20+18+14).Return(tmp, nil).Run(func(args mock.Arguments) {
h := blocks[args[1].(*big.Int).Int64()]
*tmp = h
})`
$DIR/core/services/ocrcommon/arbitrum_block_translator_test.go: `*tmp = h`
$DIR/core/services/ocrcommon/arbitrum_block_translator_test.go: `from, to, err = abt.BinarySearch(ctx, changedInL1Block2)`
$DIR/core/services/ocrcommon/arbitrum_block_translator_test.go: `from, to, err = abt.BinarySearch(ctx, changedInL1Block3)`
$DIR/core/services/ocrcommon/arbitrum_block_translator_test.go: `t.Run("falls back to whole range on error", func(t *testing.T) {
client := evmtest.NewEthClientMock(t)
abt := ocrcommon.NewArbitrumBlockTranslator(client, lggr)
ctx := testutils.Context(t)
var changedInL1Block uint64 = 5042
client.On("HeadByNumber", ctx, (*big.Int)(nil)).Return(nil, errors.New("something exploded")).Once()
from, to := abt.NumberToQueryRange(ctx, changedInL1Block)
assert.Equal(t, big.NewInt(0), from)
assert.Equal(t, (*big.Int)(nil), to)
})`
$DIR/core/services/ocrcommon/arbitrum_block_translator_test.go: `client.On("HeadByNumber", ctx, (*big.Int)(nil)).Return(nil, errors.New("something exploded")).Once()`
$DIR/core/services/ocrcommon/arbitrum_block_translator_test.go: `client.On("HeadByNumber", ctx, (*big.Int)(nil)).Return(nil, nil).Once()`
$DIR/core/services/ocrcommon/arbitrum_block_translator_test.go: `.TestLogger(t)`
$DIR/core/services/ocrcommon/arbitrum_block_translator_test.go: `.Run("returns range of current to nil if target is above current block number", func(t *testing.T) {
client := evmtest.NewEthClientMock(t)
abt := ocrcommon.NewArbitrumBlockTranslator(client, lggr)
ctx := testutils.Context(t)
var changedInL1Block int64 = 5541
latestBlock := blocks[1000]
client.On("HeadByNumber", ctx, (*big.Int)(nil)).Return(&latestBlock, nil).Once()
from, to, err := abt.BinarySearch(ctx, changedInL1Block)
require.NoError(t, err)
assert.Equal(t, big.NewInt(1000), from)
assert.Equal(t, (*big.Int)(nil), to)
})`
$DIR/core/services/ocrcommon/arbitrum_block_translator_test.go: `.NewEthClientMock(t)`
$DIR/core/services/ocrcommon/arbitrum_block_translator_test.go: `.NewArbitrumBlockTranslator(client, lggr)`
$DIR/core/services/ocrcommon/arbitrum_block_translator_test.go: `.Context(t)`
$DIR/core/services/ocrcommon/arbitrum_block_translator_test.go: `.On("HeadByNumber", ctx, (*big.Int)(nil))`
$DIR/core/services/ocrcommon/arbitrum_block_translator_test.go: `.Return(&latestBlock, nil)`
$DIR/core/services/ocrcommon/arbitrum_block_translator_test.go: `.Once()`
$DIR/core/services/ocrcommon/arbitrum_block_translator_test.go: `.BinarySearch(ctx, changedInL1Block)`
$DIR/core/services/ocrcommon/arbitrum_block_translator_test.go: `.Run("returns error if changedInL1Block is less than the lowest possible L1 block on the L2 chain", func(t *testing.T) {
client := evmtest.NewEthClientMock(t)
abt := ocrcommon.NewArbitrumBlockTranslator(client, lggr)
ctx := testutils.Context(t)
var changedInL1Block int64 = 42
latestBlock := blocks[1000]
client.On("HeadByNumber", ctx, (*big.Int)(nil)).Return(&latestBlock, nil).Once()
tmp := new(evmtypes.Head)
client.On("HeadByNumber", ctx, mock.AnythingOfType("*big.Int")).Return(tmp, nil).Run(func(args mock.Arguments) {
*tmp = blocks[args[1].(*big.Int).Int64()]
})
_, _, err := abt.BinarySearch(ctx, changedInL1Block)
assert.EqualError(t, err, "target L1 block number 42 is not represented by any L2 block")
})`
$DIR/core/services/ocrcommon/arbitrum_block_translator_test.go: `.NewEthClientMock(t)`
$DIR/core/services/ocrcommon/arbitrum_block_translator_test.go: `.NewArbitrumBlockTranslator(client, lggr)`
$DIR/core/services/ocrcommon/arbitrum_block_translator_test.go: `.Context(t)`
$DIR/core/services/ocrcommon/arbitrum_block_translator_test.go: `.On("HeadByNumber", ctx, (*big.Int)(nil))`
$DIR/core/services/ocrcommon/arbitrum_block_translator_test.go: `.Return(&latestBlock, nil)`
$DIR/core/services/ocrcommon/arbitrum_block_translator_test.go: `.Once()`
$DIR/core/services/ocrcommon/arbitrum_block_translator_test.go: `.On("HeadByNumber", ctx, mock.AnythingOfType("*big.Int"))`
$DIR/core/services/ocrcommon/arbitrum_block_translator_test.go: `.AnythingOfType("*big.Int")`
$DIR/core/services/ocrcommon/arbitrum_block_translator_test.go: `.Return(tmp, nil)`
$DIR/core/services/ocrcommon/arbitrum_block_translator_test.go: `.Run(func(args mock.Arguments) {
*tmp = blocks[args[1].(*big.Int).Int64()]
})`
$DIR/core/services/ocrcommon/arbitrum_block_translator_test.go: `.Int64()`
$DIR/core/services/ocrcommon/arbitrum_block_translator_test.go: `.BinarySearch(ctx, changedInL1Block)`
$DIR/core/services/ocrcommon/arbitrum_block_translator_test.go: `.Run("returns error if L1 block number does not exist for any range of L2 blocks", func(t *testing.T) {
client := evmtest.NewEthClientMock(t)
abt := ocrcommon.NewArbitrumBlockTranslator(client, lggr)
ctx := testutils.Context(t)
var changedInL1Block int64 = 5043
latestBlock := blocks[1000]
client.On("HeadByNumber", ctx, (*big.Int)(nil)).Return(&latestBlock, nil).Once()
tmp := new(evmtypes.Head)
client.On("HeadByNumber", ctx, mock.AnythingOfType("*big.Int")).Return(tmp, nil).Run(func(args mock.Arguments) {
*tmp = blocks[args[1].(*big.Int).Int64()]
})
_, _, err := abt.BinarySearch(ctx, changedInL1Block)
assert.EqualError(t, err, "target L1 block number 5043 is not represented by any L2 block")
})`
$DIR/core/services/ocrcommon/arbitrum_block_translator_test.go: `.NewEthClientMock(t)`
$DIR/core/services/ocrcommon/arbitrum_block_translator_test.go: `.NewArbitrumBlockTranslator(client, lggr)`
$DIR/core/services/ocrcommon/arbitrum_block_translator_test.go: `.Context(t)`
$DIR/core/services/ocrcommon/arbitrum_block_translator_test.go: `.On("HeadByNumber", ctx, (*big.Int)(nil))`
$DIR/core/services/ocrcommon/arbitrum_block_translator_test.go: `.Return(&latestBlock, nil)`
$DIR/core/services/ocrcommon/arbitrum_block_translator_test.go: `.Once()`
$DIR/core/services/ocrcommon/arbitrum_block_translator_test.go: `.On("HeadByNumber", ctx, mock.AnythingOfType("*big.Int"))`
$DIR/core/services/ocrcommon/arbitrum_block_translator_test.go: `.AnythingOfType("*big.Int")`
$DIR/core/services/ocrcommon/arbitrum_block_translator_test.go: `.Return(tmp, nil)`
$DIR/core/services/ocrcommon/arbitrum_block_translator_test.go: `.Run(func(args mock.Arguments) {
*tmp = blocks[args[1].(*big.Int).Int64()]
})`
$DIR/core/services/ocrcommon/arbitrum_block_translator_test.go: `.Int64()`
$DIR/core/services/ocrcommon/arbitrum_block_translator_test.go: `.BinarySearch(ctx, changedInL1Block)`
$DIR/core/services/ocrcommon/arbitrum_block_translator_test.go: `.Run("returns correct range of L2 blocks that encompasses all possible blocks that might contain the given L1 block number", func(t *testing.T) {
client := evmtest.NewEthClientMock(t)
abt := ocrcommon.NewArbitrumBlockTranslator(client, lggr)
ctx := testutils.Context(t)
var changedInL1Block int64 = 5042
latestBlock := blocks[1000]
client.On("HeadByNumber", ctx, (*big.Int)(nil)).Return(&latestBlock, nil).Once()
tmp := new(evmtypes.Head)
client.On("HeadByNumber", ctx, mock.AnythingOfType("*big.Int")).Return(tmp, nil).Run(func(args mock.Arguments) {
h := blocks[args[1].(*big.Int).Int64()]
*tmp = h
})
from, to, err := abt.BinarySearch(ctx, changedInL1Block)
require.NoError(t, err)
assert.Equal(t, big.NewInt(98), from)
assert.Equal(t, big.NewInt(137), to)
})`
$DIR/core/services/ocrcommon/arbitrum_block_translator_test.go: `.NewEthClientMock(t)`
$DIR/core/services/ocrcommon/arbitrum_block_translator_test.go: `.NewArbitrumBlockTranslator(client, lggr)`
$DIR/core/services/ocrcommon/arbitrum_block_translator_test.go: `.Context(t)`
$DIR/core/services/ocrcommon/arbitrum_block_translator_test.go: `.On("HeadByNumber", ctx, (*big.Int)(nil))`
$DIR/core/services/ocrcommon/arbitrum_block_translator_test.go: `.Return(&latestBlock, nil)`
$DIR/core/services/ocrcommon/arbitrum_block_translator_test.go: `.Once()`
$DIR/core/services/ocrcommon/arbitrum_block_translator_test.go: `.On("HeadByNumber", ctx, mock.AnythingOfType("*big.Int"))`
$DIR/core/services/ocrcommon/arbitrum_block_translator_test.go: `.AnythingOfType("*big.Int")`
$DIR/core/services/ocrcommon/arbitrum_block_translator_test.go: `.Return(tmp, nil)`
$DIR/core/services/ocrcommon/arbitrum_block_translator_test.go: `.Run(func(args mock.Arguments) {
h := blocks[args[1].(*big.Int).Int64()]
*tmp = h
})`
$DIR/core/services/ocrcommon/arbitrum_block_translator_test.go: `.Int64()`
$DIR/core/services/ocrcommon/arbitrum_block_translator_test.go: `.BinarySearch(ctx, changedInL1Block)`
$DIR/core/services/ocrcommon/arbitrum_block_translator_test.go: `.Run("handles edge case where L1 is the smallest possible value", func(t *testing.T) {
client := evmtest.NewEthClientMock(t)
abt := ocrcommon.NewArbitrumBlockTranslator(client, lggr)
ctx := testutils.Context(t)
var changedInL1Block int64 = 5000
latestBlock := blocks[1000]
client.On("HeadByNumber", ctx, (*big.Int)(nil)).Return(&latestBlock, nil).Once()
tmp := new(evmtypes.Head)
client.On("HeadByNumber", ctx, mock.AnythingOfType("*big.Int")).Return(tmp, nil).Run(func(args mock.Arguments) {
h := blocks[args[1].(*big.Int).Int64()]
*tmp = h
})
from, to, err := abt.BinarySearch(ctx, changedInL1Block)
require.NoError(t, err)
assert.Equal(t, big.NewInt(0), from)
assert.Equal(t, big.NewInt(16), to)
})`
$DIR/core/services/ocrcommon/arbitrum_block_translator_test.go: `.NewEthClientMock(t)`
$DIR/core/services/ocrcommon/arbitrum_block_translator_test.go: `.NewArbitrumBlockTranslator(client, lggr)`
$DIR/core/services/ocrcommon/arbitrum_block_translator_test.go: `.Context(t)`
$DIR/core/services/ocrcommon/arbitrum_block_translator_test.go: `.On("HeadByNumber", ctx, (*big.Int)(nil))`
$DIR/core/services/ocrcommon/arbitrum_block_translator_test.go: `.Return(&latestBlock, nil)`
$DIR/core/services/ocrcommon/arbitrum_block_translator_test.go: `.Once()`
$DIR/core/services/ocrcommon/arbitrum_block_translator_test.go: `.On("HeadByNumber", ctx, mock.AnythingOfType("*big.Int"))`
$DIR/core/services/ocrcommon/arbitrum_block_translator_test.go: `.AnythingOfType("*big.Int")`
$DIR/core/services/ocrcommon/arbitrum_block_translator_test.go: `.Return(tmp, nil)`
$DIR/core/services/ocrcommon/arbitrum_block_translator_test.go: `.Run(func(args mock.Arguments) {
h := blocks[args[1].(*big.Int).Int64()]
*tmp = h
})`
$DIR/core/services/ocrcommon/arbitrum_block_translator_test.go: `.Int64()`
$DIR/core/services/ocrcommon/arbitrum_block_translator_test.go: `.BinarySearch(ctx, changedInL1Block)`
$DIR/core/services/ocrcommon/arbitrum_block_translator_test.go: `.Run("leaves upper bound unbounded where L1 is the largest possible value", func(t *testing.T) {
client := evmtest.NewEthClientMock(t)
abt := ocrcommon.NewArbitrumBlockTranslator(client, lggr)
ctx := testutils.Context(t)
var changedInL1Block int64 = 5540
latestBlock := blocks[1000]
client.On("HeadByNumber", ctx, (*big.Int)(nil)).Return(&latestBlock, nil).Once()
tmp := new(evmtypes.Head)
client.On("HeadByNumber", ctx, mock.AnythingOfType("*big.Int")).Return(tmp, nil).Run(func(args mock.Arguments) {
h := blocks[args[1].(*big.Int).Int64()]
*tmp = h
})
from, to, err := abt.BinarySearch(ctx, changedInL1Block)
require.NoError(t, err)
assert.Equal(t, big.NewInt(986), from)
assert.Equal(t, (*big.Int)(nil), to)
})`
$DIR/core/services/ocrcommon/arbitrum_block_translator_test.go: `.NewEthClientMock(t)`
$DIR/core/services/ocrcommon/arbitrum_block_translator_test.go: `.NewArbitrumBlockTranslator(client, lggr)`
$DIR/core/services/ocrcommon/arbitrum_block_translator_test.go: `.Context(t)`
$DIR/core/services/ocrcommon/arbitrum_block_translator_test.go: `.On("HeadByNumber", ctx, (*big.Int)(nil))`
$DIR/core/services/ocrcommon/arbitrum_block_translator_test.go: `.Return(&latestBlock, nil)`
$DIR/core/services/ocrcommon/arbitrum_block_translator_test.go: `.Once()`
$DIR/core/services/ocrcommon/arbitrum_block_translator_test.go: `.On("HeadByNumber", ctx, mock.AnythingOfType("*big.Int"))`
$DIR/core/services/ocrcommon/arbitrum_block_translator_test.go: `.AnythingOfType("*big.Int")`
$DIR/core/services/ocrcommon/arbitrum_block_translator_test.go: `.Return(tmp, nil)`
$DIR/core/services/ocrcommon/arbitrum_block_translator_test.go: `.Run(func(args mock.Arguments) {
h := blocks[args[1].(*big.Int).Int64()]
*tmp = h
})`
$DIR/core/services/ocrcommon/arbitrum_block_translator_test.go: `.Int64()`
$DIR/core/services/ocrcommon/arbitrum_block_translator_test.go: `.BinarySearch(ctx, changedInL1Block)`
$DIR/core/services/ocrcommon/arbitrum_block_translator_test.go: `.NewEthClientMock(t)`
$DIR/core/services/ocrcommon/arbitrum_block_translator_test.go: `.NewArbitrumBlockTranslator(client, lggr)`
$DIR/core/services/ocrcommon/arbitrum_block_translator_test.go: `.Context(t)`
$DIR/core/services/ocrcommon/arbitrum_block_translator_test.go: `.On("HeadByNumber", ctx, (*big.Int)(nil))`
$DIR/core/services/ocrcommon/arbitrum_block_translator_test.go: `.Return(&latestBlock, nil)`
$DIR/core/services/ocrcommon/arbitrum_block_translator_test.go: `.Once()`
$DIR/core/services/ocrcommon/arbitrum_block_translator_test.go: `.On("HeadByNumber", ctx, mock.AnythingOfType("*big.Int"))`
$DIR/core/services/ocrcommon/arbitrum_block_translator_test.go: `.AnythingOfType("*big.Int")`
$DIR/core/services/ocrcommon/arbitrum_block_translator_test.go: `.Times(20+18+14)`
$DIR/core/services/ocrcommon/arbitrum_block_translator_test.go: `.Return(tmp, nil)`
$DIR/core/services/ocrcommon/arbitrum_block_translator_test.go: `.Run(func(args mock.Arguments) {
h := blocks[args[1].(*big.Int).Int64()]
*tmp = h
})`
$DIR/core/services/ocrcommon/arbitrum_block_translator_test.go: `.Int64()`
$DIR/core/services/ocrcommon/arbitrum_block_translator_test.go: `.BinarySearch(ctx, changedInL1Block)`
$DIR/core/services/ocrcommon/arbitrum_block_translator_test.go: `.BinarySearch(ctx, changedInL1Block2)`
$DIR/core/services/ocrcommon/arbitrum_block_translator_test.go: `.BinarySearch(ctx, changedInL1Block3)`
$DIR/core/services/ocrcommon/arbitrum_block_translator_test.go: `.TestLogger(t)`
$DIR/core/services/ocrcommon/arbitrum_block_translator_test.go: `.Run("falls back to whole range on error", func(t *testing.T) {
client := evmtest.NewEthClientMock(t)
abt := ocrcommon.NewArbitrumBlockTranslator(client, lggr)
ctx := testutils.Context(t)
var changedInL1Block uint64 = 5042
client.On("HeadByNumber", ctx, (*big.Int)(nil)).Return(nil, errors.New("something exploded")).Once()
from, to := abt.NumberToQueryRange(ctx, changedInL1Block)
assert.Equal(t, big.NewInt(0), from)
assert.Equal(t, (*big.Int)(nil), to)
})`
$DIR/core/services/ocrcommon/arbitrum_block_translator_test.go: `.NewEthClientMock(t)`
$DIR/core/services/ocrcommon/arbitrum_block_translator_test.go: `.NewArbitrumBlockTranslator(client, lggr)`
$DIR/core/services/ocrcommon/arbitrum_block_translator_test.go: `.Context(t)`
$DIR/core/services/ocrcommon/arbitrum_block_translator_test.go: `.On("HeadByNumber", ctx, (*big.Int)(nil))`
$DIR/core/services/ocrcommon/arbitrum_block_translator_test.go: `.Return(nil, errors.New("something exploded"))`
$DIR/core/services/ocrcommon/arbitrum_block_translator_test.go: `.New("something exploded")`
$DIR/core/services/ocrcommon/arbitrum_block_translator_test.go: `.Once()`
$DIR/core/services/ocrcommon/arbitrum_block_translator_test.go: `.NumberToQueryRange(ctx, changedInL1Block)`
$DIR/core/services/ocrcommon/arbitrum_block_translator_test.go: `.NewEthClientMock(t)`
$DIR/core/services/ocrcommon/arbitrum_block_translator_test.go: `.NewArbitrumBlockTranslator(client, lggr)`
$DIR/core/services/ocrcommon/arbitrum_block_translator_test.go: `.Context(t)`
$DIR/core/services/ocrcommon/arbitrum_block_translator_test.go: `.On("HeadByNumber", ctx, (*big.Int)(nil))`
$DIR/core/services/ocrcommon/arbitrum_block_translator_test.go: `.Return(nil, nil)`
$DIR/core/services/ocrcommon/arbitrum_block_translator_test.go: `.Once()`
$DIR/core/services/ocrcommon/arbitrum_block_translator_test.go: `.NumberToQueryRange(ctx, changedInL1Block)`
$DIR/core/services/ocrcommon/block_translator_test.go: `t.Run("for L1 chains, returns the block changed argument", func(t *testing.T) {
bt := ocrcommon.NewBlockTranslator(v2.ChainEthMainnet(t).EVM(), ethClient, lggr)
from, to := bt.NumberToQueryRange(ctx, 42)
assert.Equal(t, big.NewInt(42), from)
assert.Equal(t, big.NewInt(42), to)
})`
$DIR/core/services/ocrcommon/block_translator_test.go: `t.Run("for optimism, uses the default translator", func(t *testing.T) {
bt := ocrcommon.NewBlockTranslator(v2.ChainOptimismMainnet(t).EVM(), ethClient, lggr)
from, to := bt.NumberToQueryRange(ctx, 42)
assert.Equal(t, big.NewInt(42), from)
assert.Equal(t, big.NewInt(42), to)
})`
$DIR/core/services/ocrcommon/block_translator_test.go: `bt = ocrcommon.NewBlockTranslator(v2.ChainArbitrumRinkeby(t).EVM(), ethClient, lggr)`
$DIR/core/services/ocrcommon/block_translator_test.go: `.NewEthClientMock(t)`
$DIR/core/services/ocrcommon/block_translator_test.go: `.Context(t)`
$DIR/core/services/ocrcommon/block_translator_test.go: `.TestLogger(t)`
$DIR/core/services/ocrcommon/block_translator_test.go: `.Run("for L1 chains, returns the block changed argument", func(t *testing.T) {
bt := ocrcommon.NewBlockTranslator(v2.ChainEthMainnet(t).EVM(), ethClient, lggr)
from, to := bt.NumberToQueryRange(ctx, 42)
assert.Equal(t, big.NewInt(42), from)
assert.Equal(t, big.NewInt(42), to)
})`
$DIR/core/services/ocrcommon/block_translator_test.go: `.NewBlockTranslator(v2.ChainEthMainnet(t).EVM(), ethClient, lggr)`
$DIR/core/services/ocrcommon/block_translator_test.go: `.ChainEthMainnet(t)`
$DIR/core/services/ocrcommon/block_translator_test.go: `.EVM()`
$DIR/core/services/ocrcommon/block_translator_test.go: `.NumberToQueryRange(ctx, 42)`
$DIR/core/services/ocrcommon/block_translator_test.go: `.Run("for optimism, uses the default translator", func(t *testing.T) {
bt := ocrcommon.NewBlockTranslator(v2.ChainOptimismMainnet(t).EVM(), ethClient, lggr)
from, to := bt.NumberToQueryRange(ctx, 42)
assert.Equal(t, big.NewInt(42), from)
assert.Equal(t, big.NewInt(42), to)
})`
$DIR/core/services/ocrcommon/block_translator_test.go: `.NewBlockTranslator(v2.ChainOptimismMainnet(t).EVM(), ethClient, lggr)`
$DIR/core/services/ocrcommon/block_translator_test.go: `.ChainOptimismMainnet(t)`
$DIR/core/services/ocrcommon/block_translator_test.go: `.EVM()`
$DIR/core/services/ocrcommon/block_translator_test.go: `.NumberToQueryRange(ctx, 42)`
$DIR/core/services/ocrcommon/block_translator_test.go: `.NewBlockTranslator(v2.ChainArbitrumMainnet(t).EVM(), ethClient, lggr)`
$DIR/core/services/ocrcommon/block_translator_test.go: `.ChainArbitrumMainnet(t)`
$DIR/core/services/ocrcommon/block_translator_test.go: `.EVM()`
$DIR/core/services/ocrcommon/block_translator_test.go: `.NewBlockTranslator(v2.ChainArbitrumRinkeby(t).EVM(), ethClient, lggr)`
$DIR/core/services/ocrcommon/block_translator_test.go: `.ChainArbitrumRinkeby(t)`
$DIR/core/services/ocrcommon/block_translator_test.go: `.EVM()`
$DIR/core/services/ocrcommon/data_source_test.go: `runner.On("ExecuteRun", mock.Anything, mock.AnythingOfType("pipeline.Spec"), mock.Anything, mock.Anything).
Return(&pipeline.Run{}, pipeline.TaskRunResults{
{
Result: pipeline.Result{
Value: mockValue,
Error: nil,
},
Task: &pipeline.HTTPTask{},
},
}, nil)`
$DIR/core/services/ocrcommon/data_source_test.go: `result.Error = assert.AnError`
$DIR/core/services/ocrcommon/data_source_test.go: `call.Once()`
$DIR/core/services/ocrcommon/data_source_test.go: `t.Run("test normal cache updater fail recovery", func(t *testing.T) {
runner := pipelinemocks.NewRunner(t)
ds := ocrcommon.NewInMemoryDataSource(runner, job.Job{}, pipeline.Spec{}, logger.TestLogger(t))
mockKVStore := mocks.KVStore{}
mockKVStore.On("Store", mock.Anything, mock.Anything, mock.Anything).Return(nil)
mockKVStore.On("Get", mock.Anything, mock.Anything).Return(nil, nil)
dsCache, err := ocrcommon.NewInMemoryDataSourceCache(ds, &mockKVStore, &config.JuelsPerFeeCoinCache{UpdateInterval: models.Interval(time.Second * 2)})
require.NoError(t, err)
servicetest.Run(t, dsCache)
mockVal := int64(1)
// Test if Observe notices that cache updater failed and can refresh the cache on its own
// 1. Set initial value
changeResultValue(runner, fmt.Sprint(mockVal), false, true)
time.Sleep(time.Millisecond * 100)
val, err := dsCache.Observe(testutils.Context(t), types.ReportTimestamp{})
require.NoError(t, err)
assert.Equal(t, mockVal, val.Int64())
// 2. Set values again, but make it error in updater
changeResultValue(runner, fmt.Sprint(mockVal+1), true, true)
time.Sleep(time.Second*2 + time.Millisecond*100)
// 3. Set value in between updates and call Observe (shouldn't flake because of huge wait time)
changeResultValue(runner, fmt.Sprint(mockVal+2), false, false)
val, err = dsCache.Observe(testutils.Context(t), types.ReportTimestamp{})
require.NoError(t, err)
assert.Equal(t, mockVal+2, val.Int64())
})`
$DIR/core/services/ocrcommon/data_source_test.go: `mockKVStore.On("Store", mock.Anything, mock.Anything, mock.Anything).Return(nil)`
$DIR/core/services/ocrcommon/data_source_test.go: `mockKVStore.On("Get", mock.Anything, mock.Anything).Return(nil, nil)`
$DIR/core/services/ocrcommon/data_source_test.go: `servicetest.Run(t, dsCache)`
$DIR/core/services/ocrcommon/data_source_test.go: `changeResultValue(runner, fmt.Sprint(mockVal), false, true)`
$DIR/core/services/ocrcommon/data_source_test.go: `time.Sleep(time.Millisecond * 100)`
$DIR/core/services/ocrcommon/data_source_test.go: `changeResultValue(runner, fmt.Sprint(mockVal+1), true, true)`
$DIR/core/services/ocrcommon/data_source_test.go: `time.Sleep(time.Second*2 + time.Millisecond*100)`
$DIR/core/services/ocrcommon/data_source_test.go: `changeResultValue(runner, fmt.Sprint(mockVal+2), false, false)`
$DIR/core/services/ocrcommon/data_source_test.go: `val, err = dsCache.Observe(testutils.Context(t), types.ReportTimestamp{})`
$DIR/core/services/ocrcommon/data_source_test.go: `t.Run("test total updater fail with persisted value recovery", func(t *testing.T) {
runner := pipelinemocks.NewRunner(t)
ds := ocrcommon.NewInMemoryDataSource(runner, job.Job{}, pipeline.Spec{}, logger.TestLogger(t))
mockKVStore := mocks.KVStore{}
persistedVal := serializablebig.NewI(1337)
result, err := json.Marshal(&ocrcommon.ResultTimePair{Result: *persistedVal, Time: time.Now()})
assert.NoError(t, err)
mockKVStore.On("Get", mock.Anything, mock.Anything).Return(result, nil)
// set updater to a long time so that it doesn't log errors after the test is done
dsCache, err := ocrcommon.NewInMemoryDataSourceCache(ds, &mockKVStore, &config.JuelsPerFeeCoinCache{UpdateInterval: models.Interval(time.Hour * 100)})
require.NoError(t, err)
changeResultValue(runner, "-1", true, false)
servicetest.Run(t, dsCache)
time.Sleep(time.Millisecond * 100)
val, err := dsCache.Observe(testutils.Context(t), types.ReportTimestamp{})
require.NoError(t, err)
assert.Equal(t, persistedVal.String(), val.String())
})`
$DIR/core/services/ocrcommon/data_source_test.go: `mockKVStore.On("Get", mock.Anything, mock.Anything).Return(result, nil)`
$DIR/core/services/ocrcommon/data_source_test.go: `changeResultValue(runner, "-1", true, false)`
$DIR/core/services/ocrcommon/data_source_test.go: `servicetest.Run(t, dsCache)`
$DIR/core/services/ocrcommon/data_source_test.go: `time.Sleep(time.Millisecond * 100)`
$DIR/core/services/ocrcommon/data_source_test.go: `mockKVStore.On("Get", mock.Anything, mock.Anything).Return(nil, assert.AnError)`
$DIR/core/services/ocrcommon/data_source_test.go: `changeResultValue(runner, "-1", true, false)`
$DIR/core/services/ocrcommon/data_source_test.go: `servicetest.Run(t, dsCache)`
$DIR/core/services/ocrcommon/data_source_test.go: `time.Sleep(time.Millisecond * 100)`
$DIR/core/services/ocrcommon/data_source_test.go: `_, err = dsCache.Observe(testutils.Context(t), types.ReportTimestamp{})`
$DIR/core/services/ocrcommon/data_source_test.go: `bridgeTask.BaseTask = pipeline.NewBaseTask(1, "ds1", []pipeline.TaskDependency{{
PropagateResult: true,
InputTask: nil,
}}, []pipeline.Task{&jsonParseTask}, 1)`
$DIR/core/services/ocrcommon/data_source_test.go: `jsonParseTask.BaseTask = pipeline.NewBaseTask(2, "ds1_parse", []pipeline.TaskDependency{{
PropagateResult: false,
InputTask: &bridgeTask,
}}, []pipeline.Task{}, 2)`
$DIR/core/services/ocrcommon/data_source_test.go: `runner.On("ExecuteRun", mock.Anything, mock.AnythingOfType("pipeline.Spec"), mock.Anything, mock.Anything).
Return(&pipeline.Run{}, pipeline.TaskRunResults([]pipeline.TaskRunResult{
{
Task: &bridgeTask,
Result: pipeline.Result{},
},
{
Result: pipeline.Result{Value: jsonParseTaskValue},
Task: &jsonParseTask,
},
}), nil)`
$DIR/core/services/ocrcommon/data_source_test.go: `runner.On("ExecuteRun", mock.Anything, mock.AnythingOfType("pipeline.Spec"), mock.Anything, mock.Anything).
Return(&pipeline.Run{}, pipeline.TaskRunResults{
{
Result: pipeline.Result{
Value: mockValue,
Error: nil,
},
Task: &pipeline.HTTPTask{},
},
}, nil)`
$DIR/core/services/ocrcommon/data_source_test.go: `runner.On("ExecuteRun", mock.Anything, mock.AnythingOfType("pipeline.Spec"), mock.Anything, mock.Anything).
Return(&pipeline.Run{}, pipeline.TaskRunResults{
{
Result: pipeline.Result{
Value: mockValue,
Error: nil,
},
Task: &pipeline.HTTPTask{},
},
}, nil)`
$DIR/core/services/ocrcommon/data_source_test.go: `.NewRunner(t)`
$DIR/core/services/ocrcommon/data_source_test.go: `.On("ExecuteRun", mock.Anything, mock.AnythingOfType("pipeline.Spec"), mock.Anything, mock.Anything)`
$DIR/core/services/ocrcommon/data_source_test.go: `.AnythingOfType("pipeline.Spec")`
$DIR/core/services/ocrcommon/data_source_test.go: `.
Return(&pipeline.Run{}, pipeline.TaskRunResults{
{
Result: pipeline.Result{
Value: mockValue,
Error: nil,
},
Task: &pipeline.HTTPTask{},
},
}, nil)`
$DIR/core/services/ocrcommon/data_source_test.go: `.NewInMemoryDataSource(runner, job.Job{}, pipeline.Spec{}, logger.TestLogger(t))`
$DIR/core/services/ocrcommon/data_source_test.go: `.TestLogger(t)`
$DIR/core/services/ocrcommon/data_source_test.go: `.Observe(testutils.Context(t), types.ReportTimestamp{})`
$DIR/core/services/ocrcommon/data_source_test.go: `.Context(t)`
$DIR/core/services/ocrcommon/data_source_test.go: `.String()`
$DIR/core/services/ocrcommon/data_source_test.go: `.On("ExecuteRun", mock.Anything, mock.AnythingOfType("pipeline.Spec"), mock.Anything, mock.Anything)`
$DIR/core/services/ocrcommon/data_source_test.go: `.AnythingOfType("pipeline.Spec")`
$DIR/core/services/ocrcommon/data_source_test.go: `.
Return(&pipeline.Run{}, pipeline.TaskRunResults{
{
Result: result,
Task: &pipeline.HTTPTask{},
},
}, nil)`
$DIR/core/services/ocrcommon/data_source_test.go: `.Once()`
$DIR/core/services/ocrcommon/data_source_test.go: `.Run("test normal cache updater fail recovery", func(t *testing.T) {
runner := pipelinemocks.NewRunner(t)
ds := ocrcommon.NewInMemoryDataSource(runner, job.Job{}, pipeline.Spec{}, logger.TestLogger(t))
mockKVStore := mocks.KVStore{}
mockKVStore.On("Store", mock.Anything, mock.Anything, mock.Anything).Return(nil)
mockKVStore.On("Get", mock.Anything, mock.Anything).Return(nil, nil)
dsCache, err := ocrcommon.NewInMemoryDataSourceCache(ds, &mockKVStore, &config.JuelsPerFeeCoinCache{UpdateInterval: models.Interval(time.Second * 2)})
require.NoError(t, err)
servicetest.Run(t, dsCache)
mockVal := int64(1)
// Test if Observe notices that cache updater failed and can refresh the cache on its own
// 1. Set initial value
changeResultValue(runner, fmt.Sprint(mockVal), false, true)
time.Sleep(time.Millisecond * 100)
val, err := dsCache.Observe(testutils.Context(t), types.ReportTimestamp{})
require.NoError(t, err)
assert.Equal(t, mockVal, val.Int64())
// 2. Set values again, but make it error in updater
changeResultValue(runner, fmt.Sprint(mockVal+1), true, true)
time.Sleep(time.Second*2 + time.Millisecond*100)
// 3. Set value in between updates and call Observe (shouldn't flake because of huge wait time)
changeResultValue(runner, fmt.Sprint(mockVal+2), false, false)
val, err = dsCache.Observe(testutils.Context(t), types.ReportTimestamp{})
require.NoError(t, err)
assert.Equal(t, mockVal+2, val.Int64())
})`
$DIR/core/services/ocrcommon/data_source_test.go: `.NewRunner(t)`
$DIR/core/services/ocrcommon/data_source_test.go: `.NewInMemoryDataSource(runner, job.Job{}, pipeline.Spec{}, logger.TestLogger(t))`
$DIR/core/services/ocrcommon/data_source_test.go: `.TestLogger(t)`
$DIR/core/services/ocrcommon/data_source_test.go: `.On("Store", mock.Anything, mock.Anything, mock.Anything)`
$DIR/core/services/ocrcommon/data_source_test.go: `.Return(nil)`
$DIR/core/services/ocrcommon/data_source_test.go: `.On("Get", mock.Anything, mock.Anything)`
$DIR/core/services/ocrcommon/data_source_test.go: `.Return(nil, nil)`
$DIR/core/services/ocrcommon/data_source_test.go: `.NewInMemoryDataSourceCache(ds, &mockKVStore, &config.JuelsPerFeeCoinCache{UpdateInterval: models.Interval(time.Second * 2)})`
$DIR/core/services/ocrcommon/data_source_test.go: `.Interval(time.Second * 2)`
$DIR/core/services/ocrcommon/data_source_test.go: `.Run(t, dsCache)`
$DIR/core/services/ocrcommon/data_source_test.go: `.Sprint(mockVal)`
$DIR/core/services/ocrcommon/data_source_test.go: `.Sleep(time.Millisecond * 100)`
$DIR/core/services/ocrcommon/data_source_test.go: `.Observe(testutils.Context(t), types.ReportTimestamp{})`
$DIR/core/services/ocrcommon/data_source_test.go: `.Context(t)`
$DIR/core/services/ocrcommon/data_source_test.go: `.Sprint(mockVal+1)`
$DIR/core/services/ocrcommon/data_source_test.go: `.Sleep(time.Second*2 + time.Millisecond*100)`
$DIR/core/services/ocrcommon/data_source_test.go: `.Sprint(mockVal+2)`
$DIR/core/services/ocrcommon/data_source_test.go: `.Observe(testutils.Context(t), types.ReportTimestamp{})`
$DIR/core/services/ocrcommon/data_source_test.go: `.Context(t)`
$DIR/core/services/ocrcommon/data_source_test.go: `.Run("test total updater fail with persisted value recovery", func(t *testing.T) {
runner := pipelinemocks.NewRunner(t)
ds := ocrcommon.NewInMemoryDataSource(runner, job.Job{}, pipeline.Spec{}, logger.TestLogger(t))
mockKVStore := mocks.KVStore{}
persistedVal := serializablebig.NewI(1337)
result, err := json.Marshal(&ocrcommon.ResultTimePair{Result: *persistedVal, Time: time.Now()})
assert.NoError(t, err)
mockKVStore.On("Get", mock.Anything, mock.Anything).Return(result, nil)
// set updater to a long time so that it doesn't log errors after the test is done
dsCache, err := ocrcommon.NewInMemoryDataSourceCache(ds, &mockKVStore, &config.JuelsPerFeeCoinCache{UpdateInterval: models.Interval(time.Hour * 100)})
require.NoError(t, err)
changeResultValue(runner, "-1", true, false)
servicetest.Run(t, dsCache)
time.Sleep(time.Millisecond * 100)
val, err := dsCache.Observe(testutils.Context(t), types.ReportTimestamp{})
require.NoError(t, err)
assert.Equal(t, persistedVal.String(), val.String())
})`
$DIR/core/services/ocrcommon/data_source_test.go: `.NewRunner(t)`
$DIR/core/services/ocrcommon/data_source_test.go: `.NewInMemoryDataSource(runner, job.Job{}, pipeline.Spec{}, logger.TestLogger(t))`
$DIR/core/services/ocrcommon/data_source_test.go: `.TestLogger(t)`
$DIR/core/services/ocrcommon/data_source_test.go: `.NewI(1337)`
$DIR/core/services/ocrcommon/data_source_test.go: `.Marshal(&ocrcommon.ResultTimePair{Result: *persistedVal, Time: time.Now()})`
$DIR/core/services/ocrcommon/data_source_test.go: `.Now()`
$DIR/core/services/ocrcommon/data_source_test.go: `.On("Get", mock.Anything, mock.Anything)`
$DIR/core/services/ocrcommon/data_source_test.go: `.Return(result, nil)`
$DIR/core/services/ocrcommon/data_source_test.go: `.NewInMemoryDataSourceCache(ds, &mockKVStore, &config.JuelsPerFeeCoinCache{UpdateInterval: models.Interval(time.Hour * 100)})`
$DIR/core/services/ocrcommon/data_source_test.go: `.Interval(time.Hour * 100)`
$DIR/core/services/ocrcommon/data_source_test.go: `.Run(t, dsCache)`
$DIR/core/services/ocrcommon/data_source_test.go: `.Sleep(time.Millisecond * 100)`
$DIR/core/services/ocrcommon/data_source_test.go: `.Observe(testutils.Context(t), types.ReportTimestamp{})`
$DIR/core/services/ocrcommon/data_source_test.go: `.Context(t)`
$DIR/core/services/ocrcommon/data_source_test.go: `.NewRunner(t)`
$DIR/core/services/ocrcommon/data_source_test.go: `.NewInMemoryDataSource(runner, job.Job{}, pipeline.Spec{}, logger.TestLogger(t))`
$DIR/core/services/ocrcommon/data_source_test.go: `.TestLogger(t)`
$DIR/core/services/ocrcommon/data_source_test.go: `.On("Get", mock.Anything, mock.Anything)`
$DIR/core/services/ocrcommon/data_source_test.go: `.Return(nil, assert.AnError)`
$DIR/core/services/ocrcommon/data_source_test.go: `.NewInMemoryDataSourceCache(ds, &mockKVStore, &config.JuelsPerFeeCoinCache{UpdateInterval: models.Interval(time.Hour * 100)})`
$DIR/core/services/ocrcommon/data_source_test.go: `.Interval(time.Hour * 100)`
$DIR/core/services/ocrcommon/data_source_test.go: `.Run(t, dsCache)`
$DIR/core/services/ocrcommon/data_source_test.go: `.Sleep(time.Millisecond * 100)`
$DIR/core/services/ocrcommon/data_source_test.go: `.Observe(testutils.Context(t), types.ReportTimestamp{})`
$DIR/core/services/ocrcommon/data_source_test.go: `.Context(t)`
$DIR/core/services/ocrcommon/data_source_test.go: `.NewRunner(t)`
$DIR/core/services/ocrcommon/data_source_test.go: `.NewBaseTask(1, "ds1", []pipeline.TaskDependency{{
PropagateResult: true,
InputTask: nil,
}}, []pipeline.Task{&jsonParseTask}, 1)`
$DIR/core/services/ocrcommon/data_source_test.go: `.NewBaseTask(2, "ds1_parse", []pipeline.TaskDependency{{
PropagateResult: false,
InputTask: &bridgeTask,
}}, []pipeline.Task{}, 2)`
$DIR/core/services/ocrcommon/data_source_test.go: `.On("ExecuteRun", mock.Anything, mock.AnythingOfType("pipeline.Spec"), mock.Anything, mock.Anything)`
$DIR/core/services/ocrcommon/data_source_test.go: `.AnythingOfType("pipeline.Spec")`
$DIR/core/services/ocrcommon/data_source_test.go: `.
Return(&pipeline.Run{}, pipeline.TaskRunResults([]pipeline.TaskRunResult{
{
Task: &bridgeTask,
Result: pipeline.Result{},
},
{
Result: pipeline.Result{Value: jsonParseTaskValue},
Task: &jsonParseTask,
},
}), nil)`
$DIR/core/services/ocrcommon/data_source_test.go: `.TaskRunResults([]pipeline.TaskRunResult{
{
Task: &bridgeTask,
Result: pipeline.Result{},
},
{
Result: pipeline.Result{Value: jsonParseTaskValue},
Task: &jsonParseTask,
},
})`
$DIR/core/services/ocrcommon/data_source_test.go: `.NewInMemoryDataSource(
runner,
job.Job{
Type: "offchainreporting",
},
pipeline.Spec{},
logger.TestLogger(t),
)`
$DIR/core/services/ocrcommon/data_source_test.go: `.TestLogger(t)`
$DIR/core/services/ocrcommon/data_source_test.go: `.Observe(testutils.Context(t), types.ReportTimestamp{})`
$DIR/core/services/ocrcommon/data_source_test.go: `.Context(t)`
$DIR/core/services/ocrcommon/data_source_test.go: `.ToFloat64(jsonParseTaskValue)`
$DIR/core/services/ocrcommon/data_source_test.go: `.ToFloat64(ocrcommon.PromBridgeJsonParseValues)`
$DIR/core/services/ocrcommon/data_source_test.go: `.NewRunner(t)`
$DIR/core/services/ocrcommon/data_source_test.go: `.On("ExecuteRun", mock.Anything, mock.AnythingOfType("pipeline.Spec"), mock.Anything, mock.Anything)`
$DIR/core/services/ocrcommon/data_source_test.go: `.AnythingOfType("pipeline.Spec")`
$DIR/core/services/ocrcommon/data_source_test.go: `.
Return(&pipeline.Run{}, pipeline.TaskRunResults{
{
Result: pipeline.Result{
Value: mockValue,
Error: nil,
},
Task: &pipeline.HTTPTask{},
},
}, nil)`
$DIR/core/services/ocrcommon/data_source_test.go: `.NewDataSourceV2(runner, job.Job{}, pipeline.Spec{}, logger.TestLogger(t), ms, nil)`
$DIR/core/services/ocrcommon/data_source_test.go: `.TestLogger(t)`
$DIR/core/services/ocrcommon/data_source_test.go: `.Observe(testutils.Context(t), types.ReportTimestamp{})`
$DIR/core/services/ocrcommon/data_source_test.go: `.Context(t)`
$DIR/core/services/ocrcommon/data_source_test.go: `.NewRunner(t)`
$DIR/core/services/ocrcommon/data_source_test.go: `.On("ExecuteRun", mock.Anything, mock.AnythingOfType("pipeline.Spec"), mock.Anything, mock.Anything)`
$DIR/core/services/ocrcommon/data_source_test.go: `.AnythingOfType("pipeline.Spec")`
$DIR/core/services/ocrcommon/data_source_test.go: `.
Return(&pipeline.Run{}, pipeline.TaskRunResults{
{
Result: pipeline.Result{
Value: mockValue,
Error: nil,
},
Task: &pipeline.HTTPTask{},
},
}, nil)`
$DIR/core/services/ocrcommon/data_source_test.go: `.NewDataSourceV1(runner, job.Job{}, pipeline.Spec{}, logger.TestLogger(t), ms, nil)`
$DIR/core/services/ocrcommon/data_source_test.go: `.TestLogger(t)`
$DIR/core/services/ocrcommon/data_source_test.go: `.Observe(testutils.Context(t), ocrtypes.ReportTimestamp{})`
$DIR/core/services/ocrcommon/data_source_test.go: `.Context(t)`
$DIR/core/services/ocrcommon/discoverer_database_test.go: `t.Run(fmt.Sprintf("%s StoreAnnouncement writes a value", tt.name), func(t *testing.T) {
ann := []byte{1, 2, 3}
err := dd1.StoreAnnouncement(ctx, "remote1", ann)
assert.NoError(t, err)
// test upsert
ann = []byte{4, 5, 6}
err = dd1.StoreAnnouncement(ctx, "remote1", ann)
assert.NoError(t, err)
// write a different value
ann = []byte{7, 8, 9}
err = dd1.StoreAnnouncement(ctx, "remote2", ann)
assert.NoError(t, err)
})`
$DIR/core/services/ocrcommon/discoverer_database_test.go: `ann = []byte{4, 5, 6}`
$DIR/core/services/ocrcommon/discoverer_database_test.go: `err = dd1.StoreAnnouncement(ctx, "remote1", ann)`
$DIR/core/services/ocrcommon/discoverer_database_test.go: `ann = []byte{7, 8, 9}`
$DIR/core/services/ocrcommon/discoverer_database_test.go: `err = dd1.StoreAnnouncement(ctx, "remote2", ann)`
$DIR/core/services/ocrcommon/discoverer_database_test.go: `t.Run(fmt.Sprintf("%s ReadAnnouncements reads values filtered by given peerIDs", tt.name), func(t *testing.T) {
announcements, err := dd1.ReadAnnouncements(ctx, []string{"remote1", "remote2"})
require.NoError(t, err)
assert.Len(t, announcements, 2)
assert.Equal(t, []byte{4, 5, 6}, announcements["remote1"])
assert.Equal(t, []byte{7, 8, 9}, announcements["remote2"])
announcements, err = dd1.ReadAnnouncements(ctx, []string{"remote1"})
require.NoError(t, err)
assert.Len(t, announcements, 1)
assert.Equal(t, []byte{4, 5, 6}, announcements["remote1"])
})`
$DIR/core/services/ocrcommon/discoverer_database_test.go: `announcements, err = dd1.ReadAnnouncements(ctx, []string{"remote1"})`
$DIR/core/services/ocrcommon/discoverer_database_test.go: `t.Run(fmt.Sprintf("%s is scoped to local peer ID", tt.name), func(t *testing.T) {
ann := []byte{10, 11, 12}
err := dd2.StoreAnnouncement(ctx, "remote1", ann)
assert.NoError(t, err)
announcements, err := dd2.ReadAnnouncements(ctx, []string{"remote1"})
require.NoError(t, err)
assert.Len(t, announcements, 1)
assert.Equal(t, []byte{10, 11, 12}, announcements["remote1"])
announcements, err = dd1.ReadAnnouncements(ctx, []string{"remote1"})
require.NoError(t, err)
assert.Len(t, announcements, 1)
assert.Equal(t, []byte{4, 5, 6}, announcements["remote1"])
})`
$DIR/core/services/ocrcommon/discoverer_database_test.go: `announcements, err = dd1.ReadAnnouncements(ctx, []string{"remote1"})`
$DIR/core/services/ocrcommon/discoverer_database_test.go: `t.Run(fmt.Sprintf("%s persists data across restarts", tt.name), func(t *testing.T) {
dd3 := ocrcommon.NewOCRDiscovererDatabase(db, localPeerID1.Raw())
announcements, err := dd3.ReadAnnouncements(ctx, []string{"remote1"})
require.NoError(t, err)
assert.Len(t, announcements, 1)
assert.Equal(t, []byte{4, 5, 6}, announcements["remote1"])
})`
$DIR/core/services/ocrcommon/discoverer_database_test.go: `.NewSqlxDB(t)`
$DIR/core/services/ocrcommon/discoverer_database_test.go: `.NewOCRDiscovererDatabase(db, localPeerID1.Raw())`
$DIR/core/services/ocrcommon/discoverer_database_test.go: `.Raw()`
$DIR/core/services/ocrcommon/discoverer_database_test.go: `.NewOCRDiscovererDatabase(db, localPeerID2.Raw())`
$DIR/core/services/ocrcommon/discoverer_database_test.go: `.Raw()`
$DIR/core/services/ocrcommon/discoverer_database_test.go: `.NewDON2DONDiscovererDatabase(db, localPeerID1.Raw())`
$DIR/core/services/ocrcommon/discoverer_database_test.go: `.Raw()`
$DIR/core/services/ocrcommon/discoverer_database_test.go: `.NewDON2DONDiscovererDatabase(db, localPeerID2.Raw())`
$DIR/core/services/ocrcommon/discoverer_database_test.go: `.Raw()`
$DIR/core/services/ocrcommon/discoverer_database_test.go: `.Context(t)`
$DIR/core/services/ocrcommon/discoverer_database_test.go: `.Run(fmt.Sprintf("%s StoreAnnouncement writes a value", tt.name), func(t *testing.T) {
ann := []byte{1, 2, 3}
err := dd1.StoreAnnouncement(ctx, "remote1", ann)
assert.NoError(t, err)
// test upsert
ann = []byte{4, 5, 6}
err = dd1.StoreAnnouncement(ctx, "remote1", ann)
assert.NoError(t, err)
// write a different value
ann = []byte{7, 8, 9}
err = dd1.StoreAnnouncement(ctx, "remote2", ann)
assert.NoError(t, err)
})`
$DIR/core/services/ocrcommon/discoverer_database_test.go: `.Sprintf("%s StoreAnnouncement writes a value", tt.name)`
$DIR/core/services/ocrcommon/discoverer_database_test.go: `.StoreAnnouncement(ctx, "remote1", ann)`
$DIR/core/services/ocrcommon/discoverer_database_test.go: `.StoreAnnouncement(ctx, "remote1", ann)`
$DIR/core/services/ocrcommon/discoverer_database_test.go: `.StoreAnnouncement(ctx, "remote2", ann)`
$DIR/core/services/ocrcommon/discoverer_database_test.go: `.Run(fmt.Sprintf("%s ReadAnnouncements reads values filtered by given peerIDs", tt.name), func(t *testing.T) {
announcements, err := dd1.ReadAnnouncements(ctx, []string{"remote1", "remote2"})
require.NoError(t, err)
assert.Len(t, announcements, 2)
assert.Equal(t, []byte{4, 5, 6}, announcements["remote1"])
assert.Equal(t, []byte{7, 8, 9}, announcements["remote2"])
announcements, err = dd1.ReadAnnouncements(ctx, []string{"remote1"})
require.NoError(t, err)
assert.Len(t, announcements, 1)
assert.Equal(t, []byte{4, 5, 6}, announcements["remote1"])
})`
$DIR/core/services/ocrcommon/discoverer_database_test.go: `.Sprintf("%s ReadAnnouncements reads values filtered by given peerIDs", tt.name)`
$DIR/core/services/ocrcommon/discoverer_database_test.go: `.ReadAnnouncements(ctx, []string{"remote1", "remote2"})`
$DIR/core/services/ocrcommon/discoverer_database_test.go: `.ReadAnnouncements(ctx, []string{"remote1"})`
$DIR/core/services/ocrcommon/discoverer_database_test.go: `.Run(fmt.Sprintf("%s is scoped to local peer ID", tt.name), func(t *testing.T) {
ann := []byte{10, 11, 12}
err := dd2.StoreAnnouncement(ctx, "remote1", ann)
assert.NoError(t, err)
announcements, err := dd2.ReadAnnouncements(ctx, []string{"remote1"})
require.NoError(t, err)
assert.Len(t, announcements, 1)
assert.Equal(t, []byte{10, 11, 12}, announcements["remote1"])
announcements, err = dd1.ReadAnnouncements(ctx, []string{"remote1"})
require.NoError(t, err)
assert.Len(t, announcements, 1)
assert.Equal(t, []byte{4, 5, 6}, announcements["remote1"])
})`
$DIR/core/services/ocrcommon/discoverer_database_test.go: `.Sprintf("%s is scoped to local peer ID", tt.name)`
$DIR/core/services/ocrcommon/discoverer_database_test.go: `.StoreAnnouncement(ctx, "remote1", ann)`
$DIR/core/services/ocrcommon/discoverer_database_test.go: `.ReadAnnouncements(ctx, []string{"remote1"})`
$DIR/core/services/ocrcommon/discoverer_database_test.go: `.ReadAnnouncements(ctx, []string{"remote1"})`
$DIR/core/services/ocrcommon/discoverer_database_test.go: `.Run(fmt.Sprintf("%s persists data across restarts", tt.name), func(t *testing.T) {
dd3 := ocrcommon.NewOCRDiscovererDatabase(db, localPeerID1.Raw())
announcements, err := dd3.ReadAnnouncements(ctx, []string{"remote1"})
require.NoError(t, err)
assert.Len(t, announcements, 1)
assert.Equal(t, []byte{4, 5, 6}, announcements["remote1"])
})`
$DIR/core/services/ocrcommon/discoverer_database_test.go: `.Sprintf("%s persists data across restarts", tt.name)`
$DIR/core/services/ocrcommon/discoverer_database_test.go: `.NewOCRDiscovererDatabase(db, localPeerID1.Raw())`
$DIR/core/services/ocrcommon/discoverer_database_test.go: `.Raw()`
$DIR/core/services/ocrcommon/discoverer_database_test.go: `.ReadAnnouncements(ctx, []string{"remote1"})`
$DIR/core/services/ocrcommon/peer_wrapper_test.go: `t.Run("with no p2p keys returns error", func(t *testing.T) {
cfg := configtest.NewGeneralConfig(t, func(c *chainlink.Config, s *chainlink.Secrets) {
c.P2P.V2.Enabled = ptr(true)
})
keyStore := cltest.NewKeyStore(t, db)
pw := ocrcommon.NewSingletonPeerWrapper(keyStore, cfg.P2P(), cfg.OCR(), db, logger.TestLogger(t))
require.Contains(t, pw.Start(testutils.Context(t)).Error(), "No P2P keys found in keystore. Peer wrapper will not be fully initialized")
})`
$DIR/core/services/ocrcommon/peer_wrapper_test.go: `c.P2P.V2.Enabled = ptr(true)`
$DIR/core/services/ocrcommon/peer_wrapper_test.go: `t.Run("with one p2p key and matching P2P.PeerID returns nil", func(t *testing.T) {
ctx := testutils.Context(t)
keyStore := cltest.NewKeyStore(t, db)
k, err := keyStore.P2P().Create(ctx)
require.NoError(t, err)
cfg := configtest.NewGeneralConfig(t, func(c *chainlink.Config, s *chainlink.Secrets) {
c.P2P.V2.Enabled = ptr(true)
c.P2P.V2.ListenAddresses = &[]string{fmt.Sprintf("127.0.0.1:%d", freeport.GetOne(t))}
c.P2P.PeerID = ptr(k.PeerID())
})
pw := ocrcommon.NewSingletonPeerWrapper(keyStore, cfg.P2P(), cfg.OCR(), db, logger.TestLogger(t))
servicetest.Run(t, pw)
require.Equal(t, k.PeerID(), pw.PeerID)
})`
$DIR/core/services/ocrcommon/peer_wrapper_test.go: `c.P2P.V2.Enabled = ptr(true)`
$DIR/core/services/ocrcommon/peer_wrapper_test.go: `c.P2P.V2.ListenAddresses = &[]string{fmt.Sprintf("127.0.0.1:%d", freeport.GetOne(t))}`
$DIR/core/services/ocrcommon/peer_wrapper_test.go: `c.P2P.PeerID = ptr(k.PeerID())`
$DIR/core/services/ocrcommon/peer_wrapper_test.go: `servicetest.Run(t, pw)`
$DIR/core/services/ocrcommon/peer_wrapper_test.go: `t.Run("with one p2p key and mismatching P2P.PeerID returns error", func(t *testing.T) {
ctx := testutils.Context(t)
cfg := configtest.NewGeneralConfig(t, func(c *chainlink.Config, s *chainlink.Secrets) {
c.P2P.V2.Enabled = ptr(true)
c.P2P.PeerID = ptr(p2pkey.PeerID(peerID))
})
keyStore := cltest.NewKeyStore(t, db)
_, err := keyStore.P2P().Create(ctx)
require.NoError(t, err)
pw := ocrcommon.NewSingletonPeerWrapper(keyStore, cfg.P2P(), cfg.OCR(), db, logger.TestLogger(t))
require.Contains(t, pw.Start(testutils.Context(t)).Error(), "unable to find P2P key with id")
})`
$DIR/core/services/ocrcommon/peer_wrapper_test.go: `c.P2P.V2.Enabled = ptr(true)`
$DIR/core/services/ocrcommon/peer_wrapper_test.go: `c.P2P.PeerID = ptr(p2pkey.PeerID(peerID))`
$DIR/core/services/ocrcommon/peer_wrapper_test.go: `t.Run("with multiple p2p keys and valid P2P.PeerID returns nil", func(t *testing.T) {
ctx := testutils.Context(t)
keyStore := cltest.NewKeyStore(t, db)
k2, err := keyStore.P2P().Create(ctx)
require.NoError(t, err)
cfg := configtest.NewGeneralConfig(t, func(c *chainlink.Config, s *chainlink.Secrets) {
c.P2P.V2.Enabled = ptr(true)
c.P2P.V2.ListenAddresses = &[]string{fmt.Sprintf("127.0.0.1:%d", freeport.GetOne(t))}
c.P2P.PeerID = ptr(k2.PeerID())
})
pw := ocrcommon.NewSingletonPeerWrapper(keyStore, cfg.P2P(), cfg.OCR(), db, logger.TestLogger(t))
servicetest.Run(t, pw)
require.Equal(t, k2.PeerID(), pw.PeerID)
})`
$DIR/core/services/ocrcommon/peer_wrapper_test.go: `c.P2P.V2.Enabled = ptr(true)`
$DIR/core/services/ocrcommon/peer_wrapper_test.go: `c.P2P.V2.ListenAddresses = &[]string{fmt.Sprintf("127.0.0.1:%d", freeport.GetOne(t))}`
$DIR/core/services/ocrcommon/peer_wrapper_test.go: `c.P2P.PeerID = ptr(k2.PeerID())`
$DIR/core/services/ocrcommon/peer_wrapper_test.go: `servicetest.Run(t, pw)`
$DIR/core/services/ocrcommon/peer_wrapper_test.go: `c.P2P.V2.Enabled = ptr(true)`
$DIR/core/services/ocrcommon/peer_wrapper_test.go: `c.P2P.V2.ListenAddresses = &[]string{fmt.Sprintf("127.0.0.1:%d", freeport.GetOne(t))}`
$DIR/core/services/ocrcommon/peer_wrapper_test.go: `c.P2P.PeerID = ptr(p2pkey.PeerID(peerID))`
$DIR/core/services/ocrcommon/peer_wrapper_test.go: `c.P2P.V2.Enabled = ptr(true)`
$DIR/core/services/ocrcommon/peer_wrapper_test.go: `c.P2P.PeerID = ptr(k.PeerID())`
$DIR/core/services/ocrcommon/peer_wrapper_test.go: `c.P2P.V2.DeltaDial = commonconfig.MustNewDuration(100 * time.Millisecond)`
$DIR/core/services/ocrcommon/peer_wrapper_test.go: `c.P2P.V2.DeltaReconcile = commonconfig.MustNewDuration(1 * time.Second)`
$DIR/core/services/ocrcommon/peer_wrapper_test.go: `c.P2P.V2.ListenAddresses = ptr(p2paddresses)`
$DIR/core/services/ocrcommon/peer_wrapper_test.go: `c.P2P.V2.AnnounceAddresses = ptr(p2paddresses)`
$DIR/core/services/ocrcommon/peer_wrapper_test.go: `pw = ocrcommon.NewSingletonPeerWrapper(keyStore, cfg.P2P(), cfg.OCR(), db, logger.TestLogger(t))`
$DIR/core/services/ocrcommon/peer_wrapper_test.go: `.NewSqlxDB(t)`
$DIR/core/services/ocrcommon/peer_wrapper_test.go: `.Run("with no p2p keys returns error", func(t *testing.T) {
cfg := configtest.NewGeneralConfig(t, func(c *chainlink.Config, s *chainlink.Secrets) {
c.P2P.V2.Enabled = ptr(true)
})
keyStore := cltest.NewKeyStore(t, db)
pw := ocrcommon.NewSingletonPeerWrapper(keyStore, cfg.P2P(), cfg.OCR(), db, logger.TestLogger(t))
require.Contains(t, pw.Start(testutils.Context(t)).Error(), "No P2P keys found in keystore. Peer wrapper will not be fully initialized")
})`
$DIR/core/services/ocrcommon/peer_wrapper_test.go: `.NewGeneralConfig(t, func(c *chainlink.Config, s *chainlink.Secrets) {
c.P2P.V2.Enabled = ptr(true)
})`
$DIR/core/services/ocrcommon/peer_wrapper_test.go: `.NewKeyStore(t, db)`
$DIR/core/services/ocrcommon/peer_wrapper_test.go: `.NewSingletonPeerWrapper(keyStore, cfg.P2P(), cfg.OCR(), db, logger.TestLogger(t))`
$DIR/core/services/ocrcommon/peer_wrapper_test.go: `.P2P()`
$DIR/core/services/ocrcommon/peer_wrapper_test.go: `.OCR()`
$DIR/core/services/ocrcommon/peer_wrapper_test.go: `.TestLogger(t)`
$DIR/core/services/ocrcommon/peer_wrapper_test.go: `.Run("with one p2p key and matching P2P.PeerID returns nil", func(t *testing.T) {
ctx := testutils.Context(t)
keyStore := cltest.NewKeyStore(t, db)
k, err := keyStore.P2P().Create(ctx)
require.NoError(t, err)
cfg := configtest.NewGeneralConfig(t, func(c *chainlink.Config, s *chainlink.Secrets) {
c.P2P.V2.Enabled = ptr(true)
c.P2P.V2.ListenAddresses = &[]string{fmt.Sprintf("127.0.0.1:%d", freeport.GetOne(t))}
c.P2P.PeerID = ptr(k.PeerID())
})
pw := ocrcommon.NewSingletonPeerWrapper(keyStore, cfg.P2P(), cfg.OCR(), db, logger.TestLogger(t))
servicetest.Run(t, pw)
require.Equal(t, k.PeerID(), pw.PeerID)
})`
$DIR/core/services/ocrcommon/peer_wrapper_test.go: `.Context(t)`
$DIR/core/services/ocrcommon/peer_wrapper_test.go: `.NewKeyStore(t, db)`
$DIR/core/services/ocrcommon/peer_wrapper_test.go: `.P2P()`
$DIR/core/services/ocrcommon/peer_wrapper_test.go: `.Create(ctx)`
$DIR/core/services/ocrcommon/peer_wrapper_test.go: `.NewGeneralConfig(t, func(c *chainlink.Config, s *chainlink.Secrets) {
c.P2P.V2.Enabled = ptr(true)
c.P2P.V2.ListenAddresses = &[]string{fmt.Sprintf("127.0.0.1:%d", freeport.GetOne(t))}
c.P2P.PeerID = ptr(k.PeerID())
})`
$DIR/core/services/ocrcommon/peer_wrapper_test.go: `.Sprintf("127.0.0.1:%d", freeport.GetOne(t))`
$DIR/core/services/ocrcommon/peer_wrapper_test.go: `.GetOne(t)`
$DIR/core/services/ocrcommon/peer_wrapper_test.go: `.PeerID()`
$DIR/core/services/ocrcommon/peer_wrapper_test.go: `.NewSingletonPeerWrapper(keyStore, cfg.P2P(), cfg.OCR(), db, logger.TestLogger(t))`
$DIR/core/services/ocrcommon/peer_wrapper_test.go: `.P2P()`
$DIR/core/services/ocrcommon/peer_wrapper_test.go: `.OCR()`
$DIR/core/services/ocrcommon/peer_wrapper_test.go: `.TestLogger(t)`
$DIR/core/services/ocrcommon/peer_wrapper_test.go: `.Run(t, pw)`
$DIR/core/services/ocrcommon/peer_wrapper_test.go: `.Run("with one p2p key and mismatching P2P.PeerID returns error", func(t *testing.T) {
ctx := testutils.Context(t)
cfg := configtest.NewGeneralConfig(t, func(c *chainlink.Config, s *chainlink.Secrets) {
c.P2P.V2.Enabled = ptr(true)
c.P2P.PeerID = ptr(p2pkey.PeerID(peerID))
})
keyStore := cltest.NewKeyStore(t, db)
_, err := keyStore.P2P().Create(ctx)
require.NoError(t, err)
pw := ocrcommon.NewSingletonPeerWrapper(keyStore, cfg.P2P(), cfg.OCR(), db, logger.TestLogger(t))
require.Contains(t, pw.Start(testutils.Context(t)).Error(), "unable to find P2P key with id")
})`
$DIR/core/services/ocrcommon/peer_wrapper_test.go: `.Context(t)`
$DIR/core/services/ocrcommon/peer_wrapper_test.go: `.NewGeneralConfig(t, func(c *chainlink.Config, s *chainlink.Secrets) {
c.P2P.V2.Enabled = ptr(true)
c.P2P.PeerID = ptr(p2pkey.PeerID(peerID))
})`
$DIR/core/services/ocrcommon/peer_wrapper_test.go: `.PeerID(peerID)`
$DIR/core/services/ocrcommon/peer_wrapper_test.go: `.NewKeyStore(t, db)`
$DIR/core/services/ocrcommon/peer_wrapper_test.go: `.P2P()`
$DIR/core/services/ocrcommon/peer_wrapper_test.go: `.Create(ctx)`
$DIR/core/services/ocrcommon/peer_wrapper_test.go: `.NewSingletonPeerWrapper(keyStore, cfg.P2P(), cfg.OCR(), db, logger.TestLogger(t))`
$DIR/core/services/ocrcommon/peer_wrapper_test.go: `.P2P()`
$DIR/core/services/ocrcommon/peer_wrapper_test.go: `.OCR()`
$DIR/core/services/ocrcommon/peer_wrapper_test.go: `.TestLogger(t)`
$DIR/core/services/ocrcommon/peer_wrapper_test.go: `.Run("with multiple p2p keys and valid P2P.PeerID returns nil", func(t *testing.T) {
ctx := testutils.Context(t)
keyStore := cltest.NewKeyStore(t, db)
k2, err := keyStore.P2P().Create(ctx)
require.NoError(t, err)
cfg := configtest.NewGeneralConfig(t, func(c *chainlink.Config, s *chainlink.Secrets) {
c.P2P.V2.Enabled = ptr(true)
c.P2P.V2.ListenAddresses = &[]string{fmt.Sprintf("127.0.0.1:%d", freeport.GetOne(t))}
c.P2P.PeerID = ptr(k2.PeerID())
})
pw := ocrcommon.NewSingletonPeerWrapper(keyStore, cfg.P2P(), cfg.OCR(), db, logger.TestLogger(t))
servicetest.Run(t, pw)
require.Equal(t, k2.PeerID(), pw.PeerID)
})`
$DIR/core/services/ocrcommon/peer_wrapper_test.go: `.Context(t)`
$DIR/core/services/ocrcommon/peer_wrapper_test.go: `.NewKeyStore(t, db)`
$DIR/core/services/ocrcommon/peer_wrapper_test.go: `.P2P()`
$DIR/core/services/ocrcommon/peer_wrapper_test.go: `.Create(ctx)`
$DIR/core/services/ocrcommon/peer_wrapper_test.go: `.NewGeneralConfig(t, func(c *chainlink.Config, s *chainlink.Secrets) {
c.P2P.V2.Enabled = ptr(true)
c.P2P.V2.ListenAddresses = &[]string{fmt.Sprintf("127.0.0.1:%d", freeport.GetOne(t))}
c.P2P.PeerID = ptr(k2.PeerID())
})`
$DIR/core/services/ocrcommon/peer_wrapper_test.go: `.Sprintf("127.0.0.1:%d", freeport.GetOne(t))`
$DIR/core/services/ocrcommon/peer_wrapper_test.go: `.GetOne(t)`
$DIR/core/services/ocrcommon/peer_wrapper_test.go: `.PeerID()`
$DIR/core/services/ocrcommon/peer_wrapper_test.go: `.NewSingletonPeerWrapper(keyStore, cfg.P2P(), cfg.OCR(), db, logger.TestLogger(t))`
$DIR/core/services/ocrcommon/peer_wrapper_test.go: `.P2P()`
$DIR/core/services/ocrcommon/peer_wrapper_test.go: `.OCR()`
$DIR/core/services/ocrcommon/peer_wrapper_test.go: `.TestLogger(t)`
$DIR/core/services/ocrcommon/peer_wrapper_test.go: `.Run(t, pw)`
$DIR/core/services/ocrcommon/peer_wrapper_test.go: `.Context(t)`
$DIR/core/services/ocrcommon/peer_wrapper_test.go: `.NewGeneralConfig(t, func(c *chainlink.Config, s *chainlink.Secrets) {
c.P2P.V2.Enabled = ptr(true)
c.P2P.V2.ListenAddresses = &[]string{fmt.Sprintf("127.0.0.1:%d", freeport.GetOne(t))}
c.P2P.PeerID = ptr(p2pkey.PeerID(peerID))
})`
$DIR/core/services/ocrcommon/peer_wrapper_test.go: `.Sprintf("127.0.0.1:%d", freeport.GetOne(t))`
$DIR/core/services/ocrcommon/peer_wrapper_test.go: `.GetOne(t)`
$DIR/core/services/ocrcommon/peer_wrapper_test.go: `.PeerID(peerID)`
$DIR/core/services/ocrcommon/peer_wrapper_test.go: `.NewKeyStore(t, db)`
$DIR/core/services/ocrcommon/peer_wrapper_test.go: `.P2P()`
$DIR/core/services/ocrcommon/peer_wrapper_test.go: `.Create(ctx)`
$DIR/core/services/ocrcommon/peer_wrapper_test.go: `.NewSingletonPeerWrapper(keyStore, cfg.P2P(), cfg.OCR(), db, logger.TestLogger(t))`
$DIR/core/services/ocrcommon/peer_wrapper_test.go: `.P2P()`
$DIR/core/services/ocrcommon/peer_wrapper_test.go: `.OCR()`
$DIR/core/services/ocrcommon/peer_wrapper_test.go: `.TestLogger(t)`
$DIR/core/services/ocrcommon/peer_wrapper_test.go: `.Context(t)`
$DIR/core/services/ocrcommon/peer_wrapper_test.go: `.NewSqlxDB(t)`
$DIR/core/services/ocrcommon/peer_wrapper_test.go: `.NewKeyStore(t, db)`
$DIR/core/services/ocrcommon/peer_wrapper_test.go: `.P2P()`
$DIR/core/services/ocrcommon/peer_wrapper_test.go: `.Create(ctx)`
$DIR/core/services/ocrcommon/peer_wrapper_test.go: `.NewGeneralConfig(t, func(c *chainlink.Config, s *chainlink.Secrets) {
c.P2P.V2.Enabled = ptr(true)
c.P2P.PeerID = ptr(k.PeerID())
c.P2P.V2.DeltaDial = commonconfig.MustNewDuration(100 * time.Millisecond)
c.P2P.V2.DeltaReconcile = commonconfig.MustNewDuration(1 * time.Second)
p2paddresses := []string{
"127.0.0.1:17193",
}
c.P2P.V2.ListenAddresses = ptr(p2paddresses)
c.P2P.V2.AnnounceAddresses = ptr(p2paddresses)
})`
$DIR/core/services/ocrcommon/peer_wrapper_test.go: `.PeerID()`
$DIR/core/services/ocrcommon/peer_wrapper_test.go: `.MustNewDuration(100 * time.Millisecond)`
$DIR/core/services/ocrcommon/peer_wrapper_test.go: `.MustNewDuration(1 * time.Second)`
$DIR/core/services/ocrcommon/peer_wrapper_test.go: `.NewSingletonPeerWrapper(keyStore, cfg.P2P(), cfg.OCR(), db, logger.TestLogger(t))`
$DIR/core/services/ocrcommon/peer_wrapper_test.go: `.P2P()`
$DIR/core/services/ocrcommon/peer_wrapper_test.go: `.OCR()`
$DIR/core/services/ocrcommon/peer_wrapper_test.go: `.TestLogger(t)`
$DIR/core/services/ocrcommon/peer_wrapper_test.go: `.NewSingletonPeerWrapper(keyStore, cfg.P2P(), cfg.OCR(), db, logger.TestLogger(t))`
$DIR/core/services/ocrcommon/peer_wrapper_test.go: `.P2P()`
$DIR/core/services/ocrcommon/peer_wrapper_test.go: `.OCR()`
$DIR/core/services/ocrcommon/peer_wrapper_test.go: `.TestLogger(t)`
$DIR/core/services/ocrcommon/run_saver_test.go: `servicetest.Run(t, rs)`
$DIR/core/services/ocrcommon/run_saver_test.go: `pipelineRunner.On("InsertFinishedRun", mock.Anything, mock.Anything, mock.Anything, mock.Anything).
Return(nil).
Run(func(args mock.Arguments) {
args.Get(2).(*pipeline.Run).ID = int64(d)
}).
Once()`
$DIR/core/services/ocrcommon/run_saver_test.go: `args.Get(2).(*pipeline.Run).ID = int64(d)`
$DIR/core/services/ocrcommon/run_saver_test.go: `rs.Save(&pipeline.Run{ID: int64(i)})`
$DIR/core/services/ocrcommon/run_saver_test.go: `.NewRunner(t)`
$DIR/core/services/ocrcommon/run_saver_test.go: `.TestLogger(t)`
$DIR/core/services/ocrcommon/run_saver_test.go: `.Run(t, rs)`
$DIR/core/services/ocrcommon/run_saver_test.go: `.On("InsertFinishedRun", mock.Anything, mock.Anything, mock.Anything, mock.Anything)`
$DIR/core/services/ocrcommon/run_saver_test.go: `.
Return(nil)`
$DIR/core/services/ocrcommon/run_saver_test.go: `.
Run(func(args mock.Arguments) {
args.Get(2).(*pipeline.Run).ID = int64(d)
})`
$DIR/core/services/ocrcommon/run_saver_test.go: `.Get(2)`
$DIR/core/services/ocrcommon/run_saver_test.go: `.
Once()`
$DIR/core/services/ocrcommon/run_saver_test.go: `.Save(&pipeline.Run{ID: int64(i)})`
$DIR/core/services/ocrcommon/telemetry_test.go: `j.Type = job.Type(pipeline.OffchainReportingJobType)`
$DIR/core/services/ocrcommon/telemetry_test.go: `j.OCROracleSpec.CaptureEATelemetry = false`
$DIR/core/services/ocrcommon/telemetry_test.go: `j.Type = job.Type(pipeline.OffchainReporting2JobType)`
$DIR/core/services/ocrcommon/telemetry_test.go: `j.OCR2OracleSpec.CaptureEATelemetry = false`
$DIR/core/services/ocrcommon/telemetry_test.go: `j.Type = job.Type(pipeline.VRFJobType)`
$DIR/core/services/ocrcommon/telemetry_test.go: `j.Type = job.Type(pipeline.OffchainReportingJobType)`
$DIR/core/services/ocrcommon/telemetry_test.go: `j.OCROracleSpec.ContractAddress = contractAddress`
$DIR/core/services/ocrcommon/telemetry_test.go: `j.Type = job.Type(pipeline.OffchainReporting2JobType)`
$DIR/core/services/ocrcommon/telemetry_test.go: `j.OCR2OracleSpec.ContractID = contractAddress.String()`
$DIR/core/services/ocrcommon/telemetry_test.go: `j.Type = job.Type(pipeline.VRFJobType)`
$DIR/core/services/ocrcommon/telemetry_test.go: `j.Type = job.Type(pipeline.OffchainReportingJobType)`
$DIR/core/services/ocrcommon/telemetry_test.go: `j.OCROracleSpec.EVMChainID = (*ubig.Big)(big.NewInt(1234567890))`
$DIR/core/services/ocrcommon/telemetry_test.go: `j.Type = job.Type(pipeline.OffchainReporting2JobType)`
$DIR/core/services/ocrcommon/telemetry_test.go: `j.OCR2OracleSpec.RelayConfig = make(map[string]interface{})`
$DIR/core/services/ocrcommon/telemetry_test.go: `j.OCR2OracleSpec.RelayConfig["chainID"] = "foo"`
$DIR/core/services/ocrcommon/telemetry_test.go: `j.Type = job.Type(pipeline.VRFJobType)`
$DIR/core/services/ocrcommon/telemetry_test.go: `_, err = parseEATelemetry(nil)`
$DIR/core/services/ocrcommon/telemetry_test.go: `trrs[1].Result.Value = nil`
$DIR/core/services/ocrcommon/telemetry_test.go: `resp = getJsonParsedValue(trrs[0], &trrs)`
$DIR/core/services/ocrcommon/telemetry_test.go: `resp = getJsonParsedValue(trrs[1], &trrs)`
$DIR/core/services/ocrcommon/telemetry_test.go: `ingressClient.On("Send", mock.Anything, mock.AnythingOfType("[]uint8"), mock.AnythingOfType("string"), mock.AnythingOfType("TelemetryType")).Return().Run(func(args mock.Arguments) {
sentMessage = args[1].([]byte)
wg.Done()
})`
$DIR/core/services/ocrcommon/telemetry_test.go: `sentMessage = args[1].([]byte)`
$DIR/core/services/ocrcommon/telemetry_test.go: `wg.Done()`
$DIR/core/services/ocrcommon/telemetry_test.go: `servicetest.Run(t, enhancedTelemService)`
$DIR/core/services/ocrcommon/telemetry_test.go: `wg.Add(1)`
$DIR/core/services/ocrcommon/telemetry_test.go: `enhancedTelemChan <- EnhancedTelemetryData{
TaskRunResults: trrs,
FinalResults: fr,
RepTimestamp: observationTimestamp,
}`
$DIR/core/services/ocrcommon/telemetry_test.go: `wg.Wait()`
$DIR/core/services/ocrcommon/telemetry_test.go: `obs = e.getObservation(finalResult)`
$DIR/core/services/ocrcommon/telemetry_test.go: `ingressClient.On("Send", mock.Anything, mock.AnythingOfType("[]uint8"), mock.AnythingOfType("string"), mock.AnythingOfType("TelemetryType")).Return().Run(func(args mock.Arguments) {
wg.Done()
})`
$DIR/core/services/ocrcommon/telemetry_test.go: `wg.Done()`
$DIR/core/services/ocrcommon/telemetry_test.go: `servicetest.Run(t, enhancedTelemService)`
$DIR/core/services/ocrcommon/telemetry_test.go: `wg.Add(1)`
$DIR/core/services/ocrcommon/telemetry_test.go: `enhancedTelemChan <- EnhancedTelemetryData{
TaskRunResults: *badTrrs,
FinalResults: *finalResult,
RepTimestamp: observationTimestamp,
}`
$DIR/core/services/ocrcommon/telemetry_test.go: `wg.Wait()`
$DIR/core/services/ocrcommon/telemetry_test.go: `badTrrs = &pipeline.TaskRunResults{
pipeline.TaskRunResult{
Task: &pipeline.BridgeTask{
BaseTask: pipeline.NewBaseTask(0, "ds1", nil, nil, 0),
},
Result: pipeline.Result{
Value: "[]",
},
}}`
$DIR/core/services/ocrcommon/telemetry_test.go: `enhancedTelemChan <- EnhancedTelemetryData{
TaskRunResults: *badTrrs,
FinalResults: *finalResult,
RepTimestamp: observationTimestamp,
}`
$DIR/core/services/ocrcommon/telemetry_test.go: `wg.Wait()`
$DIR/core/services/ocrcommon/telemetry_test.go: `benchmarkPrice, bid, ask = e.getPricesFromResults(trrsMercuryV1[0], pipeline.TaskRunResults{}, 1)`
$DIR/core/services/ocrcommon/telemetry_test.go: `e.getPricesFromResults(trrsMercuryV1[0], tt, 1)`
$DIR/core/services/ocrcommon/telemetry_test.go: `tt = trrsMercuryV1[:3]`
$DIR/core/services/ocrcommon/telemetry_test.go: `e.getPricesFromResults(trrsMercuryV1[0], tt, 1)`
$DIR/core/services/ocrcommon/telemetry_test.go: `benchmarkPrice, bid, ask = e.getPricesFromResults(trrsMercuryV1[0], trrs2, 3)`
$DIR/core/services/ocrcommon/telemetry_test.go: `benchmarkPrice, bid, ask = e.getPricesFromResults(trrsMercuryV1[0], trrsMercuryV2, 2)`
$DIR/core/services/ocrcommon/telemetry_test.go: `j.OCR2OracleSpec.CaptureEATelemetry = false`
$DIR/core/services/ocrcommon/telemetry_test.go: `j.OCR2OracleSpec.CaptureEATelemetry = true`
$DIR/core/services/ocrcommon/telemetry_test.go: `j.Type = job.Type(pipeline.CronJobType)`
$DIR/core/services/ocrcommon/telemetry_test.go: `ingressClient.On("Send", mock.Anything, mock.AnythingOfType("[]uint8"), mock.AnythingOfType("string"), mock.AnythingOfType("TelemetryType")).Return().Run(func(args mock.Arguments) {
sentMessage = args[1].([]byte)
wg.Done()
})`
$DIR/core/services/ocrcommon/telemetry_test.go: `sentMessage = args[1].([]byte)`
$DIR/core/services/ocrcommon/telemetry_test.go: `wg.Done()`
$DIR/core/services/ocrcommon/telemetry_test.go: `servicetest.Run(t, &e)`
$DIR/core/services/ocrcommon/telemetry_test.go: `wg.Add(1)`
$DIR/core/services/ocrcommon/telemetry_test.go: `chTelem <- EnhancedTelemetryMercuryData{
TaskRunResults: trrsMercuryV1,
V1Observation: &mercuryv1.Observation{
BenchmarkPrice: mercury.ObsResult[*big.Int]{Val: big.NewInt(111111)},
Bid: mercury.ObsResult[*big.Int]{Val: big.NewInt(222222)},
Ask: mercury.ObsResult[*big.Int]{Val: big.NewInt(333333)},
CurrentBlockNum: mercury.ObsResult[int64]{Val: 123456789},
CurrentBlockHash: mercury.ObsResult[[]byte]{Val: common.HexToHash("0x123321").Bytes()},
CurrentBlockTimestamp: mercury.ObsResult[uint64]{Val: 987654321},
},
RepTimestamp: types.ReportTimestamp{
ConfigDigest: types.ConfigDigest{2},
Epoch: 11,
Round: 22,
},
}`
$DIR/core/services/ocrcommon/telemetry_test.go: `wg.Wait()`
$DIR/core/services/ocrcommon/telemetry_test.go: `chTelem <- EnhancedTelemetryMercuryData{
TaskRunResults: pipeline.TaskRunResults{
pipeline.TaskRunResult{Task: &pipeline.BridgeTask{
Name: "test-mercury-bridge-1",
BaseTask: pipeline.NewBaseTask(0, "ds1", nil, nil, 0),
},
Result: pipeline.Result{
Value: nil,
}},
},
V1Observation: &mercuryv1.Observation{},
RepTimestamp: types.ReportTimestamp{
ConfigDigest: types.ConfigDigest{2},
Epoch: 11,
Round: 22,
},
}`
$DIR/core/services/ocrcommon/telemetry_test.go: `wg.Add(1)`
$DIR/core/services/ocrcommon/telemetry_test.go: `trrsMercuryV1[0].Result.Value = ""`
$DIR/core/services/ocrcommon/telemetry_test.go: `chTelem <- EnhancedTelemetryMercuryData{
TaskRunResults: trrsMercuryV1,
V1Observation: &mercuryv1.Observation{},
RepTimestamp: types.ReportTimestamp{
ConfigDigest: types.ConfigDigest{2},
Epoch: 11,
Round: 22,
},
}`
$DIR/core/services/ocrcommon/telemetry_test.go: `wg.Wait()`
$DIR/core/services/ocrcommon/telemetry_test.go: `ingressClient.On("Send", mock.Anything, mock.AnythingOfType("[]uint8"), mock.AnythingOfType("string"), mock.AnythingOfType("TelemetryType")).Return().Run(func(args mock.Arguments) {
sentMessage = args[1].([]byte)
wg.Done()
})`
$DIR/core/services/ocrcommon/telemetry_test.go: `sentMessage = args[1].([]byte)`
$DIR/core/services/ocrcommon/telemetry_test.go: `wg.Done()`
$DIR/core/services/ocrcommon/telemetry_test.go: `servicetest.Run(t, &e)`
$DIR/core/services/ocrcommon/telemetry_test.go: `wg.Add(1)`
$DIR/core/services/ocrcommon/telemetry_test.go: `chTelem <- EnhancedTelemetryMercuryData{
TaskRunResults: trrsMercuryV2,
V2Observation: &mercuryv2.Observation{
BenchmarkPrice: mercury.ObsResult[*big.Int]{Val: big.NewInt(111111)},
MaxFinalizedTimestamp: mercury.ObsResult[int64]{Val: 321},
LinkPrice: mercury.ObsResult[*big.Int]{Val: big.NewInt(4321)},
NativePrice: mercury.ObsResult[*big.Int]{Val: big.NewInt(54321)},
},
RepTimestamp: types.ReportTimestamp{
ConfigDigest: types.ConfigDigest{2},
Epoch: 11,
Round: 22,
},
}`
$DIR/core/services/ocrcommon/telemetry_test.go: `wg.Wait()`
$DIR/core/services/ocrcommon/telemetry_test.go: `chTelem <- EnhancedTelemetryMercuryData{
TaskRunResults: pipeline.TaskRunResults{
pipeline.TaskRunResult{Task: &pipeline.BridgeTask{
Name: "test-mercury-bridge-2",
BaseTask: pipeline.NewBaseTask(0, "ds1", nil, nil, 0),
},
Result: pipeline.Result{
Value: nil,
}},
},
V2Observation: &mercuryv2.Observation{},
RepTimestamp: types.ReportTimestamp{
ConfigDigest: types.ConfigDigest{2},
Epoch: 11,
Round: 22,
},
}`
$DIR/core/services/ocrcommon/telemetry_test.go: `wg.Add(1)`
$DIR/core/services/ocrcommon/telemetry_test.go: `trrsMercuryV2[0].Result.Value = ""`
$DIR/core/services/ocrcommon/telemetry_test.go: `chTelem <- EnhancedTelemetryMercuryData{
TaskRunResults: trrsMercuryV2,
V2Observation: &mercuryv2.Observation{},
RepTimestamp: types.ReportTimestamp{
ConfigDigest: types.ConfigDigest{2},
Epoch: 11,
Round: 22,
},
}`
$DIR/core/services/ocrcommon/telemetry_test.go: `wg.Wait()`
$DIR/core/services/ocrcommon/telemetry_test.go: `.Type(pipeline.OffchainReportingJobType)`
$DIR/core/services/ocrcommon/telemetry_test.go: `.Type(pipeline.OffchainReporting2JobType)`
$DIR/core/services/ocrcommon/telemetry_test.go: `.Type(pipeline.VRFJobType)`
$DIR/core/services/ocrcommon/telemetry_test.go: `.EIP55Address(utils.RandomAddress().String())`
$DIR/core/services/ocrcommon/telemetry_test.go: `.RandomAddress()`
$DIR/core/services/ocrcommon/telemetry_test.go: `.String()`
$DIR/core/services/ocrcommon/telemetry_test.go: `.Type(pipeline.OffchainReportingJobType)`
$DIR/core/services/ocrcommon/telemetry_test.go: `.Type(pipeline.OffchainReporting2JobType)`
$DIR/core/services/ocrcommon/telemetry_test.go: `.String()`
$DIR/core/services/ocrcommon/telemetry_test.go: `.Type(pipeline.VRFJobType)`
$DIR/core/services/ocrcommon/telemetry_test.go: `.getContract()`
$DIR/core/services/ocrcommon/telemetry_test.go: `.Type(pipeline.OffchainReportingJobType)`
$DIR/core/services/ocrcommon/telemetry_test.go: `.NewInt(1234567890)`
$DIR/core/services/ocrcommon/telemetry_test.go: `.Type(pipeline.OffchainReporting2JobType)`
$DIR/core/services/ocrcommon/telemetry_test.go: `.Type(pipeline.VRFJobType)`
$DIR/core/services/ocrcommon/telemetry_test.go: `.getChainID()`
$DIR/core/services/ocrcommon/telemetry_test.go: `.NewTelemetryService(t)`
$DIR/core/services/ocrcommon/telemetry_test.go: `.NewIngressAgentWrapper(ingressClient)`
$DIR/core/services/ocrcommon/telemetry_test.go: `.GenMonitoringEndpoint("test-network", "test-chainID", "0xa", synchronization.EnhancedEA)`
$DIR/core/services/ocrcommon/telemetry_test.go: `.On("Send", mock.Anything, mock.AnythingOfType("[]uint8"), mock.AnythingOfType("string"), mock.AnythingOfType("TelemetryType"))`
$DIR/core/services/ocrcommon/telemetry_test.go: `.AnythingOfType("[]uint8")`
$DIR/core/services/ocrcommon/telemetry_test.go: `.AnythingOfType("string")`
$DIR/core/services/ocrcommon/telemetry_test.go: `.AnythingOfType("TelemetryType")`
$DIR/core/services/ocrcommon/telemetry_test.go: `.Return()`
$DIR/core/services/ocrcommon/telemetry_test.go: `.Run(func(args mock.Arguments) {
sentMessage = args[1].([]byte)
wg.Done()
})`
$DIR/core/services/ocrcommon/telemetry_test.go: `.Done()`
$DIR/core/services/ocrcommon/telemetry_test.go: `.RandomAddress()`
$DIR/core/services/ocrcommon/telemetry_test.go: `.Type(pipeline.OffchainReportingJobType)`
$DIR/core/services/ocrcommon/telemetry_test.go: `.EIP55AddressFromAddress(feedAddress)`
$DIR/core/services/ocrcommon/telemetry_test.go: `.NewInt(9)`
$DIR/core/services/ocrcommon/telemetry_test.go: `.TestLoggerObserved(t, zap.WarnLevel)`
$DIR/core/services/ocrcommon/telemetry_test.go: `.Named("Enhanced Telemetry Mercury")`
$DIR/core/services/ocrcommon/telemetry_test.go: `.Run(t, enhancedTelemService)`
$DIR/core/services/ocrcommon/telemetry_test.go: `.NewBaseTask(0, "ds1", nil, nil, 0)`
$DIR/core/services/ocrcommon/telemetry_test.go: `.NewBaseTask(1, "ds1", nil, nil, 1)`
$DIR/core/services/ocrcommon/telemetry_test.go: `.Add(1)`
$DIR/core/services/ocrcommon/telemetry_test.go: `.CreatedAt.UnixMilli()`
$DIR/core/services/ocrcommon/telemetry_test.go: `.FinishedAt.Time.UnixMilli()`
$DIR/core/services/ocrcommon/telemetry_test.go: `.String()`
$DIR/core/services/ocrcommon/telemetry_test.go: `.Marshal(&expectedTelemetry)`
$DIR/core/services/ocrcommon/telemetry_test.go: `.Wait()`
$DIR/core/services/ocrcommon/telemetry_test.go: `.TestLoggerObserved(t, zap.WarnLevel)`
$DIR/core/services/ocrcommon/telemetry_test.go: `.getObservation(&pipeline.FinalResult{})`
$DIR/core/services/ocrcommon/telemetry_test.go: `.getObservation(finalResult)`
$DIR/core/services/ocrcommon/telemetry_test.go: `.NewTelemetryService(t)`
$DIR/core/services/ocrcommon/telemetry_test.go: `.NewIngressAgentWrapper(ingressClient)`
$DIR/core/services/ocrcommon/telemetry_test.go: `.GenMonitoringEndpoint("test-network", "test-chainID", "0xa", synchronization.EnhancedEA)`
$DIR/core/services/ocrcommon/telemetry_test.go: `.On("Send", mock.Anything, mock.AnythingOfType("[]uint8"), mock.AnythingOfType("string"), mock.AnythingOfType("TelemetryType"))`
$DIR/core/services/ocrcommon/telemetry_test.go: `.AnythingOfType("[]uint8")`
$DIR/core/services/ocrcommon/telemetry_test.go: `.AnythingOfType("string")`
$DIR/core/services/ocrcommon/telemetry_test.go: `.AnythingOfType("TelemetryType")`
$DIR/core/services/ocrcommon/telemetry_test.go: `.Return()`
$DIR/core/services/ocrcommon/telemetry_test.go: `.Run(func(args mock.Arguments) {
wg.Done()
})`
$DIR/core/services/ocrcommon/telemetry_test.go: `.Done()`
$DIR/core/services/ocrcommon/telemetry_test.go: `.TestLoggerObserved(t, zap.WarnLevel)`
$DIR/core/services/ocrcommon/telemetry_test.go: `.Type(pipeline.OffchainReportingJobType)`
$DIR/core/services/ocrcommon/telemetry_test.go: `.Named("Enhanced Telemetry")`
$DIR/core/services/ocrcommon/telemetry_test.go: `.Run(t, enhancedTelemService)`
$DIR/core/services/ocrcommon/telemetry_test.go: `.NewBaseTask(0, "ds1", nil, nil, 0)`
$DIR/core/services/ocrcommon/telemetry_test.go: `.NewBaseTask(0, "ds2", nil, nil, 0)`
$DIR/core/services/ocrcommon/telemetry_test.go: `.Add(1)`
$DIR/core/services/ocrcommon/telemetry_test.go: `.Wait()`
$DIR/core/services/ocrcommon/telemetry_test.go: `.NewBaseTask(0, "ds1", nil, nil, 0)`
$DIR/core/services/ocrcommon/telemetry_test.go: `.Wait()`
$DIR/core/services/ocrcommon/telemetry_test.go: `.TestLoggerObserved(t, zap.WarnLevel)`
$DIR/core/services/ocrcommon/telemetry_test.go: `.getPricesFromResults(trrsMercuryV1[0], trrsMercuryV1, 1)`
$DIR/core/services/ocrcommon/telemetry_test.go: `.getPricesFromResults(trrsMercuryV1[0], pipeline.TaskRunResults{}, 1)`
$DIR/core/services/ocrcommon/telemetry_test.go: `.getPricesFromResults(trrsMercuryV1[0], tt, 1)`
$DIR/core/services/ocrcommon/telemetry_test.go: `.getPricesFromResults(trrsMercuryV1[0], tt, 1)`
$DIR/core/services/ocrcommon/telemetry_test.go: `.NewBaseTask(0, "ds1", nil, nil, 0)`
$DIR/core/services/ocrcommon/telemetry_test.go: `.NewBaseTask(1, "ds1_benchmark", nil, nil, 1)`
$DIR/core/services/ocrcommon/telemetry_test.go: `.NewBaseTask(2, "ds2_bid", nil, nil, 2)`
$DIR/core/services/ocrcommon/telemetry_test.go: `.NewBaseTask(3, "ds3_ask", nil, nil, 3)`
$DIR/core/services/ocrcommon/telemetry_test.go: `.getPricesFromResults(trrsMercuryV1[0], trrs2, 3)`
$DIR/core/services/ocrcommon/telemetry_test.go: `.getPricesFromResults(trrsMercuryV1[0], trrsMercuryV2, 2)`
$DIR/core/services/ocrcommon/telemetry_test.go: `.Type(pipeline.OffchainReporting2JobType)`
$DIR/core/services/ocrcommon/telemetry_test.go: `.Type(pipeline.CronJobType)`
$DIR/core/services/ocrcommon/telemetry_test.go: `.getAssetSymbolFromRequestData(reqData)`
$DIR/core/services/ocrcommon/telemetry_test.go: `.NewTelemetryService(t)`
$DIR/core/services/ocrcommon/telemetry_test.go: `.NewIngressAgentWrapper(ingressClient)`
$DIR/core/services/ocrcommon/telemetry_test.go: `.GenMonitoringEndpoint("test-network", "test-chainID", "0xa", synchronization.EnhancedEAMercury)`
$DIR/core/services/ocrcommon/telemetry_test.go: `.On("Send", mock.Anything, mock.AnythingOfType("[]uint8"), mock.AnythingOfType("string"), mock.AnythingOfType("TelemetryType"))`
$DIR/core/services/ocrcommon/telemetry_test.go: `.AnythingOfType("[]uint8")`
$DIR/core/services/ocrcommon/telemetry_test.go: `.AnythingOfType("string")`
$DIR/core/services/ocrcommon/telemetry_test.go: `.AnythingOfType("TelemetryType")`
$DIR/core/services/ocrcommon/telemetry_test.go: `.Return()`
$DIR/core/services/ocrcommon/telemetry_test.go: `.Run(func(args mock.Arguments) {
sentMessage = args[1].([]byte)
wg.Done()
})`
$DIR/core/services/ocrcommon/telemetry_test.go: `.Done()`
$DIR/core/services/ocrcommon/telemetry_test.go: `.TestLoggerObserved(t, zap.WarnLevel)`
$DIR/core/services/ocrcommon/telemetry_test.go: `.HexToHash("0x111")`
$DIR/core/services/ocrcommon/telemetry_test.go: `.Type(pipeline.OffchainReporting2JobType)`
$DIR/core/services/ocrcommon/telemetry_test.go: `.Run(t, &e)`
$DIR/core/services/ocrcommon/telemetry_test.go: `.Add(1)`
$DIR/core/services/ocrcommon/telemetry_test.go: `.NewInt(111111)`
$DIR/core/services/ocrcommon/telemetry_test.go: `.NewInt(222222)`
$DIR/core/services/ocrcommon/telemetry_test.go: `.NewInt(333333)`
$DIR/core/services/ocrcommon/telemetry_test.go: `.HexToHash("0x123321")`
$DIR/core/services/ocrcommon/telemetry_test.go: `.Bytes()`
$DIR/core/services/ocrcommon/telemetry_test.go: `.HexToHash("0x123321")`
$DIR/core/services/ocrcommon/telemetry_test.go: `.String()`
$DIR/core/services/ocrcommon/telemetry_test.go: `.CreatedAt.UnixMilli()`
$DIR/core/services/ocrcommon/telemetry_test.go: `.FinishedAt.Time.UnixMilli()`
$DIR/core/services/ocrcommon/telemetry_test.go: `.HexToHash("0x111")`
$DIR/core/services/ocrcommon/telemetry_test.go: `.String()`
$DIR/core/services/ocrcommon/telemetry_test.go: `.Marshal(&expectedTelemetry)`
$DIR/core/services/ocrcommon/telemetry_test.go: `.Wait()`
$DIR/core/services/ocrcommon/telemetry_test.go: `.NewBaseTask(0, "ds1", nil, nil, 0)`
$DIR/core/services/ocrcommon/telemetry_test.go: `.Add(1)`
$DIR/core/services/ocrcommon/telemetry_test.go: `.Wait()`
$DIR/core/services/ocrcommon/telemetry_test.go: `.NewTelemetryService(t)`
$DIR/core/services/ocrcommon/telemetry_test.go: `.NewIngressAgentWrapper(ingressClient)`
$DIR/core/services/ocrcommon/telemetry_test.go: `.GenMonitoringEndpoint("test-network", "test-chainID", "0xa", synchronization.EnhancedEAMercury)`
$DIR/core/services/ocrcommon/telemetry_test.go: `.On("Send", mock.Anything, mock.AnythingOfType("[]uint8"), mock.AnythingOfType("string"), mock.AnythingOfType("TelemetryType"))`
$DIR/core/services/ocrcommon/telemetry_test.go: `.AnythingOfType("[]uint8")`
$DIR/core/services/ocrcommon/telemetry_test.go: `.AnythingOfType("string")`
$DIR/core/services/ocrcommon/telemetry_test.go: `.AnythingOfType("TelemetryType")`
$DIR/core/services/ocrcommon/telemetry_test.go: `.Return()`
$DIR/core/services/ocrcommon/telemetry_test.go: `.Run(func(args mock.Arguments) {
sentMessage = args[1].([]byte)
wg.Done()
})`
$DIR/core/services/ocrcommon/telemetry_test.go: `.Done()`
$DIR/core/services/ocrcommon/telemetry_test.go: `.TestLoggerObserved(t, zap.WarnLevel)`
$DIR/core/services/ocrcommon/telemetry_test.go: `.HexToHash("0x111")`
$DIR/core/services/ocrcommon/telemetry_test.go: `.Type(pipeline.OffchainReporting2JobType)`
$DIR/core/services/ocrcommon/telemetry_test.go: `.Run(t, &e)`
$DIR/core/services/ocrcommon/telemetry_test.go: `.Add(1)`
$DIR/core/services/ocrcommon/telemetry_test.go: `.NewInt(111111)`
$DIR/core/services/ocrcommon/telemetry_test.go: `.NewInt(4321)`
$DIR/core/services/ocrcommon/telemetry_test.go: `.NewInt(54321)`
$DIR/core/services/ocrcommon/telemetry_test.go: `.CreatedAt.UnixMilli()`
$DIR/core/services/ocrcommon/telemetry_test.go: `.FinishedAt.Time.UnixMilli()`
$DIR/core/services/ocrcommon/telemetry_test.go: `.HexToHash("0x111")`
$DIR/core/services/ocrcommon/telemetry_test.go: `.String()`
$DIR/core/services/ocrcommon/telemetry_test.go: `.Marshal(&expectedTelemetry)`
$DIR/core/services/ocrcommon/telemetry_test.go: `.Wait()`
$DIR/core/services/ocrcommon/telemetry_test.go: `.NewBaseTask(0, "ds1", nil, nil, 0)`
$DIR/core/services/ocrcommon/telemetry_test.go: `.Add(1)`
$DIR/core/services/ocrcommon/telemetry_test.go: `.Wait()`
$DIR/core/services/ocrcommon/transmitter_test.go: `txm.On("CreateTransaction", mock.Anything, txmgr.TxRequest{
FromAddress: fromAddress,
ToAddress: toAddress,
EncodedPayload: payload,
FeeLimit: gasLimit,
ForwarderAddress: common.Address{},
Meta: nil,
Strategy: strategy,
}).Return(txmgr.Tx{}, nil).Once()`
$DIR/core/services/ocrcommon/transmitter_test.go: `txm.On("CreateTransaction", mock.Anything, txmgr.TxRequest{
FromAddress: fromAddress,
ToAddress: toAddress,
EncodedPayload: payload,
FeeLimit: gasLimit,
ForwarderAddress: common.Address{},
Meta: nil,
Strategy: strategy,
}).Return(txmgr.Tx{}, nil).Once()`
$DIR/core/services/ocrcommon/transmitter_test.go: `txm.On("CreateTransaction", mock.Anything, txmgr.TxRequest{
FromAddress: fromAddress2,
ToAddress: toAddress,
EncodedPayload: payload,
FeeLimit: gasLimit,
ForwarderAddress: common.Address{},
Meta: nil,
Strategy: strategy,
}).Return(txmgr.Tx{}, nil).Once()`
$DIR/core/services/ocrcommon/transmitter_test.go: `.NewSqlxDB(t)`
$DIR/core/services/ocrcommon/transmitter_test.go: `.NewKeyStore(t, db)`
$DIR/core/services/ocrcommon/transmitter_test.go: `.Eth()`
$DIR/core/services/ocrcommon/transmitter_test.go: `.MustInsertRandomKey(t, ethKeyStore)`
$DIR/core/services/ocrcommon/transmitter_test.go: `.NewInt(0)`
$DIR/core/services/ocrcommon/transmitter_test.go: `.NewAddress()`
$DIR/core/services/ocrcommon/transmitter_test.go: `.NewMockEvmTxManager(t)`
$DIR/core/services/ocrcommon/transmitter_test.go: `.NewTransmitter(
txm,
[]common.Address{fromAddress},
gasLimit,
effectiveTransmitterAddress,
strategy,
txmgr.TransmitCheckerSpec{},
chainID,
ethKeyStore,
)`
$DIR/core/services/ocrcommon/transmitter_test.go: `.On("CreateTransaction", mock.Anything, txmgr.TxRequest{
FromAddress: fromAddress,
ToAddress: toAddress,
EncodedPayload: payload,
FeeLimit: gasLimit,
ForwarderAddress: common.Address{},
Meta: nil,
Strategy: strategy,
})`
$DIR/core/services/ocrcommon/transmitter_test.go: `.Return(txmgr.Tx{}, nil)`
$DIR/core/services/ocrcommon/transmitter_test.go: `.Once()`
$DIR/core/services/ocrcommon/transmitter_test.go: `.CreateEthTransaction(testutils.Context(t), toAddress, payload, nil)`
$DIR/core/services/ocrcommon/transmitter_test.go: `.Context(t)`
$DIR/core/services/ocrcommon/transmitter_test.go: `.NewSqlxDB(t)`
$DIR/core/services/ocrcommon/transmitter_test.go: `.NewKeyStore(t, db)`
$DIR/core/services/ocrcommon/transmitter_test.go: `.Eth()`
$DIR/core/services/ocrcommon/transmitter_test.go: `.MustInsertRandomKey(t, ethKeyStore)`
$DIR/core/services/ocrcommon/transmitter_test.go: `.MustInsertRandomKey(t, ethKeyStore)`
$DIR/core/services/ocrcommon/transmitter_test.go: `.NewInt(0)`
$DIR/core/services/ocrcommon/transmitter_test.go: `.NewAddress()`
$DIR/core/services/ocrcommon/transmitter_test.go: `.NewMockEvmTxManager(t)`
$DIR/core/services/ocrcommon/transmitter_test.go: `.NewTransmitter(
txm,
[]common.Address{fromAddress, fromAddress2},
gasLimit,
effectiveTransmitterAddress,
strategy,
txmgr.TransmitCheckerSpec{},
chainID,
ethKeyStore,
)`
$DIR/core/services/ocrcommon/transmitter_test.go: `.On("CreateTransaction", mock.Anything, txmgr.TxRequest{
FromAddress: fromAddress,
ToAddress: toAddress,
EncodedPayload: payload,
FeeLimit: gasLimit,
ForwarderAddress: common.Address{},
Meta: nil,
Strategy: strategy,
})`
$DIR/core/services/ocrcommon/transmitter_test.go: `.Return(txmgr.Tx{}, nil)`
$DIR/core/services/ocrcommon/transmitter_test.go: `.Once()`
$DIR/core/services/ocrcommon/transmitter_test.go: `.On("CreateTransaction", mock.Anything, txmgr.TxRequest{
FromAddress: fromAddress2,
ToAddress: toAddress,
EncodedPayload: payload,
FeeLimit: gasLimit,
ForwarderAddress: common.Address{},
Meta: nil,
Strategy: strategy,
})`
$DIR/core/services/ocrcommon/transmitter_test.go: `.Return(txmgr.Tx{}, nil)`
$DIR/core/services/ocrcommon/transmitter_test.go: `.Once()`
$DIR/core/services/ocrcommon/transmitter_test.go: `.CreateEthTransaction(testutils.Context(t), toAddress, payload, nil)`
$DIR/core/services/ocrcommon/transmitter_test.go: `.Context(t)`
$DIR/core/services/ocrcommon/transmitter_test.go: `.NewSqlxDB(t)`
$DIR/core/services/ocrcommon/transmitter_test.go: `.NewKeyStore(t, db)`
$DIR/core/services/ocrcommon/transmitter_test.go: `.Eth()`
$DIR/core/services/ocrcommon/transmitter_test.go: `.NewInt(0)`
$DIR/core/services/ocrcommon/transmitter_test.go: `.NewAddress()`
$DIR/core/services/ocrcommon/transmitter_test.go: `.NewMockEvmTxManager(t)`
$DIR/core/services/ocrcommon/transmitter_test.go: `.NewTransmitter(
txm,
[]common.Address{fromAddress},
gasLimit,
effectiveTransmitterAddress,
strategy,
txmgr.TransmitCheckerSpec{},
chainID,
ethKeyStore,
)`
$DIR/core/services/ocrcommon/transmitter_test.go: `.CreateEthTransaction(testutils.Context(t), toAddress, payload, nil)`
$DIR/core/services/ocrcommon/transmitter_test.go: `.Context(t)`
$DIR/core/services/ocrcommon/transmitter_test.go: `.NewSqlxDB(t)`
$DIR/core/services/ocrcommon/transmitter_test.go: `.NewKeyStore(t, db)`
$DIR/core/services/ocrcommon/transmitter_test.go: `.Eth()`
$DIR/core/services/ocrcommon/transmitter_test.go: `.MustInsertRandomKey(t, ethKeyStore)`
$DIR/core/services/ocrcommon/transmitter_test.go: `.MustInsertRandomKey(t, ethKeyStore)`
$DIR/core/services/ocrcommon/transmitter_test.go: `.NewInt(0)`
$DIR/core/services/ocrcommon/transmitter_test.go: `.NewMockEvmTxManager(t)`
$DIR/core/services/ocrcommon/transmitter_test.go: `.NewTransmitter(
txm,
[]common.Address{fromAddress, fromAddress2},
gasLimit,
effectiveTransmitterAddress,
strategy,
txmgr.TransmitCheckerSpec{},
chainID,
nil,
)`
$DIR/core/services/p2p/counter_test.go: `g.Inc()`
$DIR/core/services/p2p/counter_test.go: `g.Inc()`
$DIR/core/services/p2p/counter_test.go: `.Inc()`
$DIR/core/services/p2p/counter_test.go: `.Inc()`
$DIR/core/services/p2p/counter_test.go: `.Bytes()`
$DIR/core/services/p2p/peer_test.go: `err = peer.Start(testutils.Context(t))`
$DIR/core/services/p2p/peer_test.go: `err = peer.Close()`
$DIR/core/services/p2p/peer_test.go: `.TestLogger(t)`
$DIR/core/services/p2p/peer_test.go: `.GetOne(t)`
$DIR/core/services/p2p/peer_test.go: `.NewRegistry()`
$DIR/core/services/p2p/peer_test.go: `.Sprintf("127.0.0.1:%d", port)`
$DIR/core/services/p2p/peer_test.go: `.NewInMemoryDiscovererDatabase()`
$DIR/core/services/p2p/peer_test.go: `.NewPeer(peerConfig, lggr)`
$DIR/core/services/p2p/peer_test.go: `.Start(testutils.Context(t))`
$DIR/core/services/p2p/peer_test.go: `.Context(t)`
$DIR/core/services/p2p/utils_test.go: `state, err = db.ReadAnnouncements(testutils.Context(t), []string{peerID2})`
$DIR/core/services/p2p/utils_test.go: `.NewInMemoryDiscovererDatabase()`
$DIR/core/services/p2p/utils_test.go: `.ReadAnnouncements(testutils.Context(t), []string{peerID1, peerID2})`
$DIR/core/services/p2p/utils_test.go: `.Context(t)`
$DIR/core/services/p2p/utils_test.go: `.ReadAnnouncements(testutils.Context(t), []string{peerID2})`
$DIR/core/services/p2p/utils_test.go: `.Context(t)`
$DIR/core/services/p2p/wrapper/wrapper_test.go: `c.Capabilities.Peering.V2.Enabled = &enabled`
$DIR/core/services/p2p/wrapper/wrapper_test.go: `c.Capabilities.Peering.V2.ListenAddresses = &[]string{fmt.Sprintf("127.0.0.1:%d", port)}`
$DIR/core/services/p2p/wrapper/wrapper_test.go: `keystoreP2P.On("GetOrFirst", mock.Anything).Return(key, nil)`
$DIR/core/services/p2p/wrapper/wrapper_test.go: `.NewSqlxDB(t)`
$DIR/core/services/p2p/wrapper/wrapper_test.go: `.TestLogger(t)`
$DIR/core/services/p2p/wrapper/wrapper_test.go: `.GetOne(t)`
$DIR/core/services/p2p/wrapper/wrapper_test.go: `.NewGeneralConfig(t, func(c *chainlink.Config, s *chainlink.Secrets) {
enabled := true
c.Capabilities.Peering.V2.Enabled = &enabled
c.Capabilities.Peering.V2.ListenAddresses = &[]string{fmt.Sprintf("127.0.0.1:%d", port)}
})`
$DIR/core/services/p2p/wrapper/wrapper_test.go: `.Sprintf("127.0.0.1:%d", port)`
$DIR/core/services/p2p/wrapper/wrapper_test.go: `.NewP2P(t)`
$DIR/core/services/p2p/wrapper/wrapper_test.go: `.NewV2()`
$DIR/core/services/p2p/wrapper/wrapper_test.go: `.On("GetOrFirst", mock.Anything)`
$DIR/core/services/p2p/wrapper/wrapper_test.go: `.Return(key, nil)`
$DIR/core/services/p2p/wrapper/wrapper_test.go: `.NewExternalPeerWrapper(keystoreP2P, cfg.Capabilities().Peering(), db, lggr)`
$DIR/core/services/p2p/wrapper/wrapper_test.go: `.Capabilities()`
$DIR/core/services/p2p/wrapper/wrapper_test.go: `.Peering()`
$DIR/core/services/periodicbackup/backup_test.go: `.DatabaseURL.Get()`
$DIR/core/services/periodicbackup/backup_test.go: `.TempDir()`
$DIR/core/services/periodicbackup/backup_test.go: `.runBackup("0.9.9")`
$DIR/core/services/periodicbackup/backup_test.go: `.Remove(result.path)`
$DIR/core/services/periodicbackup/backup_test.go: `.Stat(result.path)`
$DIR/core/services/periodicbackup/backup_test.go: `.DatabaseURL.Get()`
$DIR/core/services/periodicbackup/backup_test.go: `.TempDir()`
$DIR/core/services/periodicbackup/backup_test.go: `.runBackup("0.9.9")`
$DIR/core/services/periodicbackup/backup_test.go: `.Remove(result.path)`
$DIR/core/services/periodicbackup/backup_test.go: `.Stat(result.path)`
$DIR/core/services/periodicbackup/backup_test.go: `.DatabaseURL.Get()`
$DIR/core/services/periodicbackup/backup_test.go: `.TempDir()`
$DIR/core/services/periodicbackup/backup_test.go: `.runBackup(static.Unset)`
$DIR/core/services/periodicbackup/backup_test.go: `.Remove(result.path)`
$DIR/core/services/periodicbackup/backup_test.go: `.Stat(result.path)`
$DIR/core/services/periodicbackup/backup_test.go: `.Parse("postgresql://invalid:some-pass@invalid")`
$DIR/core/services/periodicbackup/backup_test.go: `.DatabaseURL.Get()`
$DIR/core/services/periodicbackup/backup_test.go: `.TempDir()`
$DIR/core/services/periodicbackup/backup_test.go: `.runBackup("")`
$DIR/core/services/periodicbackup/backup_test.go: `.DatabaseURL.Get()`
$DIR/core/services/periodicbackup/backup_test.go: `.TempDir()`
$DIR/core/services/periodicbackup/backup_test.go: `.frequencyIsTooSmall()`
$DIR/core/services/periodicbackup/backup_test.go: `.Join(os.TempDir(), "alternative")`
$DIR/core/services/periodicbackup/backup_test.go: `.TempDir()`
$DIR/core/services/periodicbackup/backup_test.go: `.DatabaseURL.Get()`
$DIR/core/services/periodicbackup/backup_test.go: `.TempDir()`
$DIR/core/services/periodicbackup/backup_test.go: `.runBackup("0.9.9")`
$DIR/core/services/periodicbackup/backup_test.go: `.Remove(result.path)`
$DIR/core/services/periodicbackup/backup_test.go: `.Stat(result.path)`
$DIR/core/services/pg/connection_test.go: `t.Run("when the version is too low", func(t *testing.T) {
m := &mockGetter{version: 100000}
err := checkVersion(m, 110000)
require.Error(t, err)
assert.Contains(t, err.Error(), "The minimum required Postgres server version is 11, you are running: 10")
})`
$DIR/core/services/pg/connection_test.go: `t.Run("when the version is at minimum", func(t *testing.T) {
m := &mockGetter{version: 110000}
err := checkVersion(m, 110000)
require.NoError(t, err)
})`
$DIR/core/services/pg/connection_test.go: `t.Run("when the version is above minimum", func(t *testing.T) {
m := &mockGetter{version: 110001}
err := checkVersion(m, 110000)
require.NoError(t, err)
m = &mockGetter{version: 120000}
err = checkVersion(m, 110001)
require.NoError(t, err)
})`
$DIR/core/services/pg/connection_test.go: `m = &mockGetter{version: 120000}`
$DIR/core/services/pg/connection_test.go: `err = checkVersion(m, 110001)`
$DIR/core/services/pg/connection_test.go: `t.Run("ignores wildly small versions, 0 etc", func(t *testing.T) {
m := &mockGetter{version: 9000}
err := checkVersion(m, 110001)
require.NoError(t, err)
})`
$DIR/core/services/pg/connection_test.go: `testutils.SkipShortDB(t)`
$DIR/core/services/pg/connection_test.go: `t.Cleanup(func() { require.NoError(t, db.Close()) })`
$DIR/core/services/pg/connection_test.go: `_, err = db.Exec("SET session_replication_role= 'origin'")`
$DIR/core/services/pg/connection_test.go: `err = disallowReplica(db)`
$DIR/core/services/pg/connection_test.go: `_, err = db.Exec("SET session_replication_role= 'replica'")`
$DIR/core/services/pg/connection_test.go: `err = disallowReplica(db)`
$DIR/core/services/pg/connection_test.go: `_, err = db.Exec("SET session_replication_role= 'not_valid_role'")`
$DIR/core/services/pg/connection_test.go: `.Now()`
$DIR/core/services/pg/connection_test.go: `.Year()`
$DIR/core/services/pg/connection_test.go: `.Run("when the version is too low", func(t *testing.T) {
m := &mockGetter{version: 100000}
err := checkVersion(m, 110000)
require.Error(t, err)
assert.Contains(t, err.Error(), "The minimum required Postgres server version is 11, you are running: 10")
})`
$DIR/core/services/pg/connection_test.go: `.Run("when the version is at minimum", func(t *testing.T) {
m := &mockGetter{version: 110000}
err := checkVersion(m, 110000)
require.NoError(t, err)
})`
$DIR/core/services/pg/connection_test.go: `.Run("when the version is above minimum", func(t *testing.T) {
m := &mockGetter{version: 110001}
err := checkVersion(m, 110000)
require.NoError(t, err)
m = &mockGetter{version: 120000}
err = checkVersion(m, 110001)
require.NoError(t, err)
})`
$DIR/core/services/pg/connection_test.go: `.Run("ignores wildly small versions, 0 etc", func(t *testing.T) {
m := &mockGetter{version: 9000}
err := checkVersion(m, 110001)
require.NoError(t, err)
})`
$DIR/core/services/pg/connection_test.go: `.New("some error")`
$DIR/core/services/pg/connection_test.go: `.SkipShortDB(t)`
$DIR/core/services/pg/connection_test.go: `.Open(string(dialects.TransactionWrappedPostgres), uuid.New().String())`
$DIR/core/services/pg/connection_test.go: `.New()`
$DIR/core/services/pg/connection_test.go: `.String()`
$DIR/core/services/pg/connection_test.go: `.Cleanup(func() { require.NoError(t, db.Close()) })`
$DIR/core/services/pg/connection_test.go: `.Exec("SET session_replication_role= 'origin'")`
$DIR/core/services/pg/connection_test.go: `.Exec("SET session_replication_role= 'replica'")`
$DIR/core/services/pg/connection_test.go: `.Exec("SET session_replication_role= 'not_valid_role'")`
$DIR/core/services/pg/lease_lock_test.go: `c.Database.Lock.Enabled = &t`
$DIR/core/services/pg/lease_lock_test.go: `t.Run("on migrated database", func(t *testing.T) {
cfg := pg.LeaseLockConfig{
DefaultQueryTimeout: cfg.Database().DefaultQueryTimeout(),
LeaseDuration: 15 * time.Second,
LeaseRefreshInterval: 100 * time.Millisecond,
}
leaseLock1 := newLeaseLock(t, db, cfg)
err := leaseLock1.TakeAndHold(testutils.Context(t))
require.NoError(t, err)
var clientID uuid.UUID
err = db.Get(&clientID, `SELECT client_id FROM lease_lock`)
require.NoError(t, err)
assert.Equal(t, leaseLock1.ClientID(), clientID)
started2 := make(chan struct{})
leaseLock2 := newLeaseLock(t, db, cfg)
go func() {
defer leaseLock2.Release()
require.NoError(t, leaseLock2.TakeAndHold(testutils.Context(t)))
close(started2)
}()
// Give it plenty of time to have a few tries at getting the lease
time.Sleep(cfg.LeaseRefreshInterval * 5)
leaseLock1.Release()
select {
case <-started2:
case <-time.After(testutils.WaitTimeout(t)):
t.Fatal("timed out waiting for leaseLock2 to start")
}
err = db.Get(&clientID, `SELECT client_id FROM lease_lock`)
require.NoError(t, err)
assert.Equal(t, leaseLock2.ClientID(), clientID)
})`
$DIR/core/services/pg/lease_lock_test.go: `err = db.Get(&clientID, `SELECT client_id FROM lease_lock`)`
$DIR/core/services/pg/lease_lock_test.go: `close(started2)`
$DIR/core/services/pg/lease_lock_test.go: `time.Sleep(cfg.LeaseRefreshInterval * 5)`
$DIR/core/services/pg/lease_lock_test.go: `leaseLock1.Release()`
$DIR/core/services/pg/lease_lock_test.go: `err = db.Get(&clientID, `SELECT client_id FROM lease_lock`)`
$DIR/core/services/pg/lease_lock_test.go: `t.Run("recovers and re-opens connection if it's closed externally on initial take wait", func(t *testing.T) {
cfg := pg.LeaseLockConfig{
DefaultQueryTimeout: cfg.Database().DefaultQueryTimeout(),
LeaseDuration: 15 * time.Second,
LeaseRefreshInterval: 100 * time.Millisecond,
}
leaseLock := newLeaseLock(t, db, cfg)
otherAppID := uuid.New()
// simulate another application holding lease to force it to retry
res, err := db.Exec(`UPDATE lease_lock SET client_id=$1,expires_at=NOW()+'1 day'::interval`, otherAppID)
require.NoError(t, err)
rowsAffected, err := res.RowsAffected()
require.NoError(t, err)
require.EqualValues(t, 1, rowsAffected)
conn, err := db.Connx(testutils.Context(t))
require.NoError(t, err)
pg.SetConn(leaseLock, conn)
// Simulate the connection being closed (leaseLock should automatically check out a new one)
require.NoError(t, conn.Close())
gotLease := make(chan struct{})
go func() {
errInternal := leaseLock.TakeAndHold(testutils.Context(t))
require.NoError(t, errInternal)
close(gotLease)
}()
// Give it plenty of time to have a few tries at getting the lease
time.Sleep(cfg.LeaseRefreshInterval * 5)
// Release the dummy lease lock to allow the lease locker to take it now
_, err = db.Exec(`DELETE FROM lease_lock WHERE client_id=$1`, otherAppID)
require.NoError(t, err)
select {
case <-gotLease:
case <-time.After(testutils.WaitTimeout(t)):
t.Fatal("timed out waiting for lease lock to start")
}
// check that the lease lock was actually taken
var exists bool
err = db.Get(&exists, `SELECT EXISTS(SELECT 1 FROM lease_lock)`)
require.NoError(t, err)
assert.True(t, exists)
leaseLock.Release()
})`
$DIR/core/services/pg/lease_lock_test.go: `pg.SetConn(leaseLock, conn)`
$DIR/core/services/pg/lease_lock_test.go: `close(gotLease)`
$DIR/core/services/pg/lease_lock_test.go: `time.Sleep(cfg.LeaseRefreshInterval * 5)`
$DIR/core/services/pg/lease_lock_test.go: `_, err = db.Exec(`DELETE FROM lease_lock WHERE client_id=$1`, otherAppID)`
$DIR/core/services/pg/lease_lock_test.go: `err = db.Get(&exists, `SELECT EXISTS(SELECT 1 FROM lease_lock)`)`
$DIR/core/services/pg/lease_lock_test.go: `leaseLock.Release()`
$DIR/core/services/pg/lease_lock_test.go: `t.Run("recovers and re-opens connection if it's closed externally while holding", func(t *testing.T) {
cfg := pg.LeaseLockConfig{
DefaultQueryTimeout: cfg.Database().DefaultQueryTimeout(),
LeaseDuration: 15 * time.Second,
LeaseRefreshInterval: 100 * time.Millisecond,
}
leaseLock := newLeaseLock(t, db, cfg)
err := leaseLock.TakeAndHold(testutils.Context(t))
require.NoError(t, err)
defer leaseLock.Release()
conn := pg.GetConn(leaseLock)
var prevExpiresAt time.Time
err = conn.Close()
require.NoError(t, err)
err = db.Get(&prevExpiresAt, `SELECT expires_at FROM lease_lock`)
require.NoError(t, err)
time.Sleep(cfg.LeaseRefreshInterval + 1*time.Second)
var expiresAt time.Time
err = db.Get(&expiresAt, `SELECT expires_at FROM lease_lock`)
require.NoError(t, err)
// The lease lock must have recovered and re-opened the connection if the second expires_at is later
assert.Greater(t, expiresAt.Unix(), prevExpiresAt.Unix())
})`
$DIR/core/services/pg/lease_lock_test.go: `err = conn.Close()`
$DIR/core/services/pg/lease_lock_test.go: `err = db.Get(&prevExpiresAt, `SELECT expires_at FROM lease_lock`)`
$DIR/core/services/pg/lease_lock_test.go: `time.Sleep(cfg.LeaseRefreshInterval + 1*time.Second)`
$DIR/core/services/pg/lease_lock_test.go: `err = db.Get(&expiresAt, `SELECT expires_at FROM lease_lock`)`
$DIR/core/services/pg/lease_lock_test.go: `t.Run("release lock with Release() func", func(t *testing.T) {
cfg := pg.LeaseLockConfig{
DefaultQueryTimeout: cfg.Database().DefaultQueryTimeout(),
LeaseDuration: 15 * time.Second,
LeaseRefreshInterval: 100 * time.Millisecond,
}
leaseLock := newLeaseLock(t, db, cfg)
err := leaseLock.TakeAndHold(testutils.Context(t))
require.NoError(t, err)
leaseLock.Release()
leaseLock2 := newLeaseLock(t, db, cfg)
err = leaseLock2.TakeAndHold(testutils.Context(t))
defer leaseLock2.Release()
require.NoError(t, err)
})`
$DIR/core/services/pg/lease_lock_test.go: `leaseLock.Release()`
$DIR/core/services/pg/lease_lock_test.go: `err = leaseLock2.TakeAndHold(testutils.Context(t))`
$DIR/core/services/pg/lease_lock_test.go: `t.Run("cancel TakeAndHold with ctx", func(t *testing.T) {
cfg := pg.LeaseLockConfig{
DefaultQueryTimeout: cfg.Database().DefaultQueryTimeout(),
LeaseDuration: 15 * time.Second,
LeaseRefreshInterval: 100 * time.Millisecond,
}
leaseLock1 := newLeaseLock(t, db, cfg)
leaseLock2 := newLeaseLock(t, db, cfg)
err := leaseLock1.TakeAndHold(testutils.Context(t))
require.NoError(t, err)
awaiter := cltest.NewAwaiter()
go func() {
ctx, cancel := context.WithCancel(testutils.Context(t))
go func() {
<-time.After(3 * time.Second)
cancel()
}()
err := leaseLock2.TakeAndHold(ctx)
require.Error(t, err)
awaiter.ItHappened()
}()
awaiter.AwaitOrFail(t)
leaseLock1.Release()
})`
$DIR/core/services/pg/lease_lock_test.go: `<-time.After(3 * time.Second)`
$DIR/core/services/pg/lease_lock_test.go: `cancel()`
$DIR/core/services/pg/lease_lock_test.go: `awaiter.ItHappened()`
$DIR/core/services/pg/lease_lock_test.go: `awaiter.AwaitOrFail(t)`
$DIR/core/services/pg/lease_lock_test.go: `leaseLock1.Release()`
$DIR/core/services/pg/lease_lock_test.go: `.FullTestDBNoFixturesV2(t, func(c *chainlink.Config, s *chainlink.Secrets) {
t := true
c.Database.Lock.Enabled = &t
})`
$DIR/core/services/pg/lease_lock_test.go: `.Run("on migrated database", func(t *testing.T) {
cfg := pg.LeaseLockConfig{
DefaultQueryTimeout: cfg.Database().DefaultQueryTimeout(),
LeaseDuration: 15 * time.Second,
LeaseRefreshInterval: 100 * time.Millisecond,
}
leaseLock1 := newLeaseLock(t, db, cfg)
err := leaseLock1.TakeAndHold(testutils.Context(t))
require.NoError(t, err)
var clientID uuid.UUID
err = db.Get(&clientID, `SELECT client_id FROM lease_lock`)
require.NoError(t, err)
assert.Equal(t, leaseLock1.ClientID(), clientID)
started2 := make(chan struct{})
leaseLock2 := newLeaseLock(t, db, cfg)
go func() {
defer leaseLock2.Release()
require.NoError(t, leaseLock2.TakeAndHold(testutils.Context(t)))
close(started2)
}()
// Give it plenty of time to have a few tries at getting the lease
time.Sleep(cfg.LeaseRefreshInterval * 5)
leaseLock1.Release()
select {
case <-started2:
case <-time.After(testutils.WaitTimeout(t)):
t.Fatal("timed out waiting for leaseLock2 to start")
}
err = db.Get(&clientID, `SELECT client_id FROM lease_lock`)
require.NoError(t, err)
assert.Equal(t, leaseLock2.ClientID(), clientID)
})`
$DIR/core/services/pg/lease_lock_test.go: `.Database()`
$DIR/core/services/pg/lease_lock_test.go: `.DefaultQueryTimeout()`
$DIR/core/services/pg/lease_lock_test.go: `.TakeAndHold(testutils.Context(t))`
$DIR/core/services/pg/lease_lock_test.go: `.Context(t)`
$DIR/core/services/pg/lease_lock_test.go: `.Get(&clientID, `SELECT client_id FROM lease_lock`)`
$DIR/core/services/pg/lease_lock_test.go: `.Release()`
$DIR/core/services/pg/lease_lock_test.go: `.Sleep(cfg.LeaseRefreshInterval * 5)`
$DIR/core/services/pg/lease_lock_test.go: `.Release()`
$DIR/core/services/pg/lease_lock_test.go: `.After(testutils.WaitTimeout(t))`
$DIR/core/services/pg/lease_lock_test.go: `.WaitTimeout(t)`
$DIR/core/services/pg/lease_lock_test.go: `.Get(&clientID, `SELECT client_id FROM lease_lock`)`
$DIR/core/services/pg/lease_lock_test.go: `.Run("recovers and re-opens connection if it's closed externally on initial take wait", func(t *testing.T) {
cfg := pg.LeaseLockConfig{
DefaultQueryTimeout: cfg.Database().DefaultQueryTimeout(),
LeaseDuration: 15 * time.Second,
LeaseRefreshInterval: 100 * time.Millisecond,
}
leaseLock := newLeaseLock(t, db, cfg)
otherAppID := uuid.New()
// simulate another application holding lease to force it to retry
res, err := db.Exec(`UPDATE lease_lock SET client_id=$1,expires_at=NOW()+'1 day'::interval`, otherAppID)
require.NoError(t, err)
rowsAffected, err := res.RowsAffected()
require.NoError(t, err)
require.EqualValues(t, 1, rowsAffected)
conn, err := db.Connx(testutils.Context(t))
require.NoError(t, err)
pg.SetConn(leaseLock, conn)
// Simulate the connection being closed (leaseLock should automatically check out a new one)
require.NoError(t, conn.Close())
gotLease := make(chan struct{})
go func() {
errInternal := leaseLock.TakeAndHold(testutils.Context(t))
require.NoError(t, errInternal)
close(gotLease)
}()
// Give it plenty of time to have a few tries at getting the lease
time.Sleep(cfg.LeaseRefreshInterval * 5)
// Release the dummy lease lock to allow the lease locker to take it now
_, err = db.Exec(`DELETE FROM lease_lock WHERE client_id=$1`, otherAppID)
require.NoError(t, err)
select {
case <-gotLease:
case <-time.After(testutils.WaitTimeout(t)):
t.Fatal("timed out waiting for lease lock to start")
}
// check that the lease lock was actually taken
var exists bool
err = db.Get(&exists, `SELECT EXISTS(SELECT 1 FROM lease_lock)`)
require.NoError(t, err)
assert.True(t, exists)
leaseLock.Release()
})`
$DIR/core/services/pg/lease_lock_test.go: `.Database()`
$DIR/core/services/pg/lease_lock_test.go: `.DefaultQueryTimeout()`
$DIR/core/services/pg/lease_lock_test.go: `.New()`
$DIR/core/services/pg/lease_lock_test.go: `.Exec(`UPDATE lease_lock SET client_id=$1,expires_at=NOW()+'1 day'::interval`, otherAppID)`
$DIR/core/services/pg/lease_lock_test.go: `.RowsAffected()`
$DIR/core/services/pg/lease_lock_test.go: `.Connx(testutils.Context(t))`
$DIR/core/services/pg/lease_lock_test.go: `.Context(t)`
$DIR/core/services/pg/lease_lock_test.go: `.SetConn(leaseLock, conn)`
$DIR/core/services/pg/lease_lock_test.go: `.TakeAndHold(testutils.Context(t))`
$DIR/core/services/pg/lease_lock_test.go: `.Context(t)`
$DIR/core/services/pg/lease_lock_test.go: `.Sleep(cfg.LeaseRefreshInterval * 5)`
$DIR/core/services/pg/lease_lock_test.go: `.Exec(`DELETE FROM lease_lock WHERE client_id=$1`, otherAppID)`
$DIR/core/services/pg/lease_lock_test.go: `.After(testutils.WaitTimeout(t))`
$DIR/core/services/pg/lease_lock_test.go: `.WaitTimeout(t)`
$DIR/core/services/pg/lease_lock_test.go: `.Get(&exists, `SELECT EXISTS(SELECT 1 FROM lease_lock)`)`
$DIR/core/services/pg/lease_lock_test.go: `.Release()`
$DIR/core/services/pg/lease_lock_test.go: `.Run("recovers and re-opens connection if it's closed externally while holding", func(t *testing.T) {
cfg := pg.LeaseLockConfig{
DefaultQueryTimeout: cfg.Database().DefaultQueryTimeout(),
LeaseDuration: 15 * time.Second,
LeaseRefreshInterval: 100 * time.Millisecond,
}
leaseLock := newLeaseLock(t, db, cfg)
err := leaseLock.TakeAndHold(testutils.Context(t))
require.NoError(t, err)
defer leaseLock.Release()
conn := pg.GetConn(leaseLock)
var prevExpiresAt time.Time
err = conn.Close()
require.NoError(t, err)
err = db.Get(&prevExpiresAt, `SELECT expires_at FROM lease_lock`)
require.NoError(t, err)
time.Sleep(cfg.LeaseRefreshInterval + 1*time.Second)
var expiresAt time.Time
err = db.Get(&expiresAt, `SELECT expires_at FROM lease_lock`)
require.NoError(t, err)
// The lease lock must have recovered and re-opened the connection if the second expires_at is later
assert.Greater(t, expiresAt.Unix(), prevExpiresAt.Unix())
})`
$DIR/core/services/pg/lease_lock_test.go: `.Database()`
$DIR/core/services/pg/lease_lock_test.go: `.DefaultQueryTimeout()`
$DIR/core/services/pg/lease_lock_test.go: `.TakeAndHold(testutils.Context(t))`
$DIR/core/services/pg/lease_lock_test.go: `.Context(t)`
$DIR/core/services/pg/lease_lock_test.go: `.Release()`
$DIR/core/services/pg/lease_lock_test.go: `.GetConn(leaseLock)`
$DIR/core/services/pg/lease_lock_test.go: `.Get(&prevExpiresAt, `SELECT expires_at FROM lease_lock`)`
$DIR/core/services/pg/lease_lock_test.go: `.Sleep(cfg.LeaseRefreshInterval + 1*time.Second)`
$DIR/core/services/pg/lease_lock_test.go: `.Get(&expiresAt, `SELECT expires_at FROM lease_lock`)`
$DIR/core/services/pg/lease_lock_test.go: `.Run("release lock with Release() func", func(t *testing.T) {
cfg := pg.LeaseLockConfig{
DefaultQueryTimeout: cfg.Database().DefaultQueryTimeout(),
LeaseDuration: 15 * time.Second,
LeaseRefreshInterval: 100 * time.Millisecond,
}
leaseLock := newLeaseLock(t, db, cfg)
err := leaseLock.TakeAndHold(testutils.Context(t))
require.NoError(t, err)
leaseLock.Release()
leaseLock2 := newLeaseLock(t, db, cfg)
err = leaseLock2.TakeAndHold(testutils.Context(t))
defer leaseLock2.Release()
require.NoError(t, err)
})`
$DIR/core/services/pg/lease_lock_test.go: `.Database()`
$DIR/core/services/pg/lease_lock_test.go: `.DefaultQueryTimeout()`
$DIR/core/services/pg/lease_lock_test.go: `.TakeAndHold(testutils.Context(t))`
$DIR/core/services/pg/lease_lock_test.go: `.Context(t)`
$DIR/core/services/pg/lease_lock_test.go: `.Release()`
$DIR/core/services/pg/lease_lock_test.go: `.TakeAndHold(testutils.Context(t))`
$DIR/core/services/pg/lease_lock_test.go: `.Context(t)`
$DIR/core/services/pg/lease_lock_test.go: `.Release()`
$DIR/core/services/pg/lease_lock_test.go: `.Run("cancel TakeAndHold with ctx", func(t *testing.T) {
cfg := pg.LeaseLockConfig{
DefaultQueryTimeout: cfg.Database().DefaultQueryTimeout(),
LeaseDuration: 15 * time.Second,
LeaseRefreshInterval: 100 * time.Millisecond,
}
leaseLock1 := newLeaseLock(t, db, cfg)
leaseLock2 := newLeaseLock(t, db, cfg)
err := leaseLock1.TakeAndHold(testutils.Context(t))
require.NoError(t, err)
awaiter := cltest.NewAwaiter()
go func() {
ctx, cancel := context.WithCancel(testutils.Context(t))
go func() {
<-time.After(3 * time.Second)
cancel()
}()
err := leaseLock2.TakeAndHold(ctx)
require.Error(t, err)
awaiter.ItHappened()
}()
awaiter.AwaitOrFail(t)
leaseLock1.Release()
})`
$DIR/core/services/pg/lease_lock_test.go: `.Database()`
$DIR/core/services/pg/lease_lock_test.go: `.DefaultQueryTimeout()`
$DIR/core/services/pg/lease_lock_test.go: `.TakeAndHold(testutils.Context(t))`
$DIR/core/services/pg/lease_lock_test.go: `.Context(t)`
$DIR/core/services/pg/lease_lock_test.go: `.NewAwaiter()`
$DIR/core/services/pg/lease_lock_test.go: `.WithCancel(testutils.Context(t))`
$DIR/core/services/pg/lease_lock_test.go: `.Context(t)`
$DIR/core/services/pg/lease_lock_test.go: `.After(3 * time.Second)`
$DIR/core/services/pg/lease_lock_test.go: `.TakeAndHold(ctx)`
$DIR/core/services/pg/lease_lock_test.go: `.ItHappened()`
$DIR/core/services/pg/lease_lock_test.go: `.AwaitOrFail(t)`
$DIR/core/services/pg/lease_lock_test.go: `.Release()`
$DIR/core/services/pg/lease_lock_test.go: `.FullTestDBEmptyV2(t, nil)`
$DIR/core/services/pg/lease_lock_test.go: `.Database()`
$DIR/core/services/pg/lease_lock_test.go: `.DefaultQueryTimeout()`
$DIR/core/services/pg/lease_lock_test.go: `.TakeAndHold(testutils.Context(t))`
$DIR/core/services/pg/lease_lock_test.go: `.Context(t)`
$DIR/core/services/pg/lease_lock_test.go: `.Release()`
$DIR/core/services/pg/locked_db_test.go: `testutils.SkipShortDB(t)`
$DIR/core/services/pg/locked_db_test.go: `err = ldb.Close()`
$DIR/core/services/pg/locked_db_test.go: `testutils.SkipShortDB(t)`
$DIR/core/services/pg/locked_db_test.go: `cancel()`
$DIR/core/services/pg/locked_db_test.go: `testutils.SkipShortDB(t)`
$DIR/core/services/pg/locked_db_test.go: `testutils.SkipShortDB(t)`
$DIR/core/services/pg/locked_db_test.go: `err = ldb2.Open(ctx)`
$DIR/core/services/pg/locked_db_test.go: `testutils.SkipShortDB(t)`
$DIR/core/services/pg/locked_db_test.go: `.SkipShortDB(t)`
$DIR/core/services/pg/locked_db_test.go: `.NewGeneralConfig(t, lease)`
$DIR/core/services/pg/locked_db_test.go: `.TestLogger(t)`
$DIR/core/services/pg/locked_db_test.go: `.NewLockedDB(config.AppID(), config.Database(), config.Database().Lock(), lggr)`
$DIR/core/services/pg/locked_db_test.go: `.AppID()`
$DIR/core/services/pg/locked_db_test.go: `.Database()`
$DIR/core/services/pg/locked_db_test.go: `.Database()`
$DIR/core/services/pg/locked_db_test.go: `.Lock()`
$DIR/core/services/pg/locked_db_test.go: `.Open(testutils.Context(t))`
$DIR/core/services/pg/locked_db_test.go: `.Context(t)`
$DIR/core/services/pg/locked_db_test.go: `.DB()`
$DIR/core/services/pg/locked_db_test.go: `.SkipShortDB(t)`
$DIR/core/services/pg/locked_db_test.go: `.NewGeneralConfig(t, lease)`
$DIR/core/services/pg/locked_db_test.go: `.TestLogger(t)`
$DIR/core/services/pg/locked_db_test.go: `.NewLockedDB(config.AppID(), config.Database(), config.Database().Lock(), lggr)`
$DIR/core/services/pg/locked_db_test.go: `.AppID()`
$DIR/core/services/pg/locked_db_test.go: `.Database()`
$DIR/core/services/pg/locked_db_test.go: `.Database()`
$DIR/core/services/pg/locked_db_test.go: `.Lock()`
$DIR/core/services/pg/locked_db_test.go: `.WithCancel(testutils.Context(t))`
$DIR/core/services/pg/locked_db_test.go: `.Context(t)`
$DIR/core/services/pg/locked_db_test.go: `.Open(ctx)`
$DIR/core/services/pg/locked_db_test.go: `.DB()`
$DIR/core/services/pg/locked_db_test.go: `.SkipShortDB(t)`
$DIR/core/services/pg/locked_db_test.go: `.NewGeneralConfig(t, lease)`
$DIR/core/services/pg/locked_db_test.go: `.TestLogger(t)`
$DIR/core/services/pg/locked_db_test.go: `.NewLockedDB(config.AppID(), config.Database(), config.Database().Lock(), lggr)`
$DIR/core/services/pg/locked_db_test.go: `.AppID()`
$DIR/core/services/pg/locked_db_test.go: `.Database()`
$DIR/core/services/pg/locked_db_test.go: `.Database()`
$DIR/core/services/pg/locked_db_test.go: `.Lock()`
$DIR/core/services/pg/locked_db_test.go: `.Open(testutils.Context(t))`
$DIR/core/services/pg/locked_db_test.go: `.Context(t)`
$DIR/core/services/pg/locked_db_test.go: `.SkipShortDB(t)`
$DIR/core/services/pg/locked_db_test.go: `.NewGeneralConfig(t, lease)`
$DIR/core/services/pg/locked_db_test.go: `.TestLogger(t)`
$DIR/core/services/pg/locked_db_test.go: `.NewLockedDB(config.AppID(), config.Database(), config.Database().Lock(), lggr)`
$DIR/core/services/pg/locked_db_test.go: `.AppID()`
$DIR/core/services/pg/locked_db_test.go: `.Database()`
$DIR/core/services/pg/locked_db_test.go: `.Database()`
$DIR/core/services/pg/locked_db_test.go: `.Lock()`
$DIR/core/services/pg/locked_db_test.go: `.Open(testutils.Context(t))`
$DIR/core/services/pg/locked_db_test.go: `.Context(t)`
$DIR/core/services/pg/locked_db_test.go: `.WithTimeout(testutils.Context(t), config.Database().Lock().LeaseDuration())`
$DIR/core/services/pg/locked_db_test.go: `.Context(t)`
$DIR/core/services/pg/locked_db_test.go: `.Database()`
$DIR/core/services/pg/locked_db_test.go: `.Lock()`
$DIR/core/services/pg/locked_db_test.go: `.LeaseDuration()`
$DIR/core/services/pg/locked_db_test.go: `.NewLockedDB(config.AppID(), config.Database(), config.Database().Lock(), lggr)`
$DIR/core/services/pg/locked_db_test.go: `.AppID()`
$DIR/core/services/pg/locked_db_test.go: `.Database()`
$DIR/core/services/pg/locked_db_test.go: `.Database()`
$DIR/core/services/pg/locked_db_test.go: `.Lock()`
$DIR/core/services/pg/locked_db_test.go: `.Open(ctx)`
$DIR/core/services/pg/locked_db_test.go: `.SkipShortDB(t)`
$DIR/core/services/pg/locked_db_test.go: `.NewGeneralConfig(t, nil)`
$DIR/core/services/pg/locked_db_test.go: `.OpenUnlockedDB(config.AppID(), config.Database())`
$DIR/core/services/pg/locked_db_test.go: `.AppID()`
$DIR/core/services/pg/locked_db_test.go: `.Database()`
$DIR/core/services/pg/locked_db_test.go: `.OpenUnlockedDB(config.AppID(), config.Database())`
$DIR/core/services/pg/locked_db_test.go: `.AppID()`
$DIR/core/services/pg/locked_db_test.go: `.Database()`
$DIR/core/services/pg/stats_test.go: `t.Run(scenario.name, func(t *testing.T) {
d := newtestDbStater(t, scenario.name)
d.Mock.On("Stats").Return(sql.DBStats{})
d.Mock.On("Report").Return()
reporter := NewStatsReporter(d.Stats,
lggr,
StatsInterval(interval),
StatsCustomReporterFn(d.Report),
)
scenario.testFn(
t,
reporter,
interval,
expectedIntervals,
)
d.AssertCalled(t, "Stats")
d.AssertCalled(t, "Report")
})`
$DIR/core/services/pg/stats_test.go: `d.Mock.On("Stats").Return(sql.DBStats{})`
$DIR/core/services/pg/stats_test.go: `d.Mock.On("Report").Return()`
$DIR/core/services/pg/stats_test.go: `scenario.testFn(
t,
reporter,
interval,
expectedIntervals,
)`
$DIR/core/services/pg/stats_test.go: `d.AssertCalled(t, "Stats")`
$DIR/core/services/pg/stats_test.go: `d.AssertCalled(t, "Report")`
$DIR/core/services/pg/stats_test.go: `.TestLogger(t)`
$DIR/core/services/pg/stats_test.go: `.Run(scenario.name, func(t *testing.T) {
d := newtestDbStater(t, scenario.name)
d.Mock.On("Stats").Return(sql.DBStats{})
d.Mock.On("Report").Return()
reporter := NewStatsReporter(d.Stats,
lggr,
StatsInterval(interval),
StatsCustomReporterFn(d.Report),
)
scenario.testFn(
t,
reporter,
interval,
expectedIntervals,
)
d.AssertCalled(t, "Stats")
d.AssertCalled(t, "Report")
})`
$DIR/core/services/pg/stats_test.go: `.Mock.On("Stats")`
$DIR/core/services/pg/stats_test.go: `.Return(sql.DBStats{})`
$DIR/core/services/pg/stats_test.go: `.Mock.On("Report")`
$DIR/core/services/pg/stats_test.go: `.Return()`
$DIR/core/services/pg/stats_test.go: `.testFn(
t,
reporter,
interval,
expectedIntervals,
)`
$DIR/core/services/pg/stats_test.go: `.AssertCalled(t, "Stats")`
$DIR/core/services/pg/stats_test.go: `.AssertCalled(t, "Report")`
$DIR/core/services/pipeline/common_eth_test.go: `t.Run(fmt.Sprintf("%s:%T", tc.abiType, tc.exp), func(t *testing.T) {
for _, val := range tt.vals {
val := val
t.Run(fmt.Sprintf("%T", val), func(t *testing.T) {
got, err := convertToETHABIType(val, abiType)
require.NoError(t, err)
require.NotNil(t, got)
require.Equal(t, tc.exp, got)
})
}
})`
$DIR/core/services/pipeline/common_eth_test.go: `t.Run(fmt.Sprintf("%T", val), func(t *testing.T) {
got, err := convertToETHABIType(val, abiType)
require.NoError(t, err)
require.NotNil(t, got)
require.Equal(t, tc.exp, got)
})`
$DIR/core/services/pipeline/common_eth_test.go: `t.Run(fmt.Sprintf("%T,%s", tt.val, tt.errStr), func(t *testing.T) {
_, err := convertToETHABIType(tt.val, mustABIType(t, "bytes20"))
require.Error(t, err)
assert.Contains(t, err.Error(), tt.errStr)
})`
$DIR/core/services/pipeline/common_eth_test.go: `t.Run(fmt.Sprintf("%T,%s", tt.val, tt.errStr), func(t *testing.T) {
a := reflect.TypeOf([20]byte{})
b := reflect.ValueOf(tt.val)
_, err := convertToETHABIBytes(a, b, 20)
require.Error(t, err)
assert.Contains(t, err.Error(), tt.errStr)
})`
$DIR/core/services/pipeline/common_eth_test.go: `.HexToHash(strings.Repeat("FF", 32))`
$DIR/core/services/pipeline/common_eth_test.go: `.Repeat("FF", 32)`
$DIR/core/services/pipeline/common_eth_test.go: `.HexToAddress(strings.Repeat("FF", 20))`
$DIR/core/services/pipeline/common_eth_test.go: `.Repeat("FF", 20)`
$DIR/core/services/pipeline/common_eth_test.go: `.Hex()`
$DIR/core/services/pipeline/common_eth_test.go: `.Hex()`
$DIR/core/services/pipeline/common_eth_test.go: `.Encode(emptyFunc[:])`
$DIR/core/services/pipeline/common_eth_test.go: `.Hex()`
$DIR/core/services/pipeline/common_eth_test.go: `.Hex()`
$DIR/core/services/pipeline/common_eth_test.go: `.Encode(fullFunc[:])`
$DIR/core/services/pipeline/common_eth_test.go: `.Hex()`
$DIR/core/services/pipeline/common_eth_test.go: `.Hex()`
$DIR/core/services/pipeline/common_eth_test.go: `.Encode(oneFunc[:])`
$DIR/core/services/pipeline/common_eth_test.go: `.Run(fmt.Sprintf("%s:%T", tc.abiType, tc.exp), func(t *testing.T) {
for _, val := range tt.vals {
val := val
t.Run(fmt.Sprintf("%T", val), func(t *testing.T) {
got, err := convertToETHABIType(val, abiType)
require.NoError(t, err)
require.NotNil(t, got)
require.Equal(t, tc.exp, got)
})
}
})`
$DIR/core/services/pipeline/common_eth_test.go: `.Sprintf("%s:%T", tc.abiType, tc.exp)`
$DIR/core/services/pipeline/common_eth_test.go: `.Run(fmt.Sprintf("%T", val), func(t *testing.T) {
got, err := convertToETHABIType(val, abiType)
require.NoError(t, err)
require.NotNil(t, got)
require.Equal(t, tc.exp, got)
})`
$DIR/core/services/pipeline/common_eth_test.go: `.Sprintf("%T", val)`
$DIR/core/services/pipeline/common_eth_test.go: `.Run(fmt.Sprintf("%T,%s", tt.val, tt.errStr), func(t *testing.T) {
_, err := convertToETHABIType(tt.val, mustABIType(t, "bytes20"))
require.Error(t, err)
assert.Contains(t, err.Error(), tt.errStr)
})`
$DIR/core/services/pipeline/common_eth_test.go: `.Sprintf("%T,%s", tt.val, tt.errStr)`
$DIR/core/services/pipeline/common_eth_test.go: `.Run(fmt.Sprintf("%T,%s", tt.val, tt.errStr), func(t *testing.T) {
a := reflect.TypeOf([20]byte{})
b := reflect.ValueOf(tt.val)
_, err := convertToETHABIBytes(a, b, 20)
require.Error(t, err)
assert.Contains(t, err.Error(), tt.errStr)
})`
$DIR/core/services/pipeline/common_eth_test.go: `.Sprintf("%T,%s", tt.val, tt.errStr)`
$DIR/core/services/pipeline/common_eth_test.go: `.TypeOf([20]byte{})`
$DIR/core/services/pipeline/common_eth_test.go: `.ValueOf(tt.val)`
$DIR/core/services/pipeline/common_test.go: `a = `ds1 [type=http method=GET url="https://chain.link/voter_turnout/USA-2020" requestData=<{"hi": "hello"}>];``
$DIR/core/services/pipeline/common_test.go: `p, err = pipeline.Parse(a)`
$DIR/core/services/pipeline/common_test.go: `timeout, set = p.Tasks[0].TaskTimeout()`
$DIR/core/services/pipeline/common_test.go: `t.Run(test.name, func(t *testing.T) {
p, err := pipeline.Parse(test.spec)
require.NoError(t, err)
require.Len(t, p.Tasks, 1)
require.Equal(t, test.retries, p.Tasks[0].TaskRetries())
require.Equal(t, test.min, p.Tasks[0].TaskMinBackoff())
require.Equal(t, test.max, p.Tasks[0].TaskMaxBackoff())
})`
$DIR/core/services/pipeline/common_test.go: `t.Run("returns error if task is not the right type", func(t *testing.T) {
taskMap := interface{}(nil)
_, err := pipeline.UnmarshalTaskFromMap(pipeline.TaskType("http"), taskMap, 0, "foo-dot-id")
require.EqualError(t, err, "UnmarshalTaskFromMap: UnmarshalTaskFromMap only accepts a map[string]interface{} or a map[string]string. Got () of type ")
taskMap = struct {
foo time.Time
bar int
}{time.Unix(42, 42), 42}
_, err = pipeline.UnmarshalTaskFromMap(pipeline.TaskType("http"), taskMap, 0, "foo-dot-id")
require.Error(t, err)
require.Contains(t, err.Error(), "UnmarshalTaskFromMap: UnmarshalTaskFromMap only accepts a map[string]interface{} or a map[string]string")
})`
$DIR/core/services/pipeline/common_test.go: `taskMap = struct {
foo time.Time
bar int
}{time.Unix(42, 42), 42}`
$DIR/core/services/pipeline/common_test.go: `_, err = pipeline.UnmarshalTaskFromMap(pipeline.TaskType("http"), taskMap, 0, "foo-dot-id")`
$DIR/core/services/pipeline/common_test.go: `t.Run("unknown task type", func(t *testing.T) {
taskMap := map[string]string{}
_, err := pipeline.UnmarshalTaskFromMap(pipeline.TaskType("xxx"), taskMap, 0, "foo-dot-id")
require.EqualError(t, err, `UnmarshalTaskFromMap: unknown task type: "xxx"`)
})`
$DIR/core/services/pipeline/common_test.go: `t.Run(string(test.taskType), func(t *testing.T) {
taskMap := map[string]string{}
task, err := pipeline.UnmarshalTaskFromMap(test.taskType, taskMap, 0, "foo-dot-id")
require.NoError(t, err)
require.IsType(t, test.expectedTaskType, task)
})`
$DIR/core/services/pipeline/common_test.go: `t.Run(test.name, func(t *testing.T) {
outputs, err := pipeline.CheckInputs(test.pr, test.minLen, test.maxLen, test.maxErrors)
if test.err == nil {
assert.NoError(t, err)
assert.Equal(t, test.outputsLen, len(outputs))
} else {
assert.Equal(t, test.err, errors.Cause(err))
}
})`
$DIR/core/services/pipeline/common_test.go: `c.EVM[0].GasEstimator.LimitDefault = ptr(uint64(999))`
$DIR/core/services/pipeline/common_test.go: `c.EVM[0].GasEstimator.LimitJobType = toml.GasLimitJobType{
DR: ptr(uint32(100)),
VRF: ptr(uint32(101)),
FM: ptr(uint32(102)),
OCR: ptr(uint32(103)),
Keeper: ptr(uint32(104)),
OCR2: ptr(uint32(105)),
}`
$DIR/core/services/pipeline/common_test.go: `t.Run("spec defined gas limit", func(t *testing.T) {
var specGasLimit uint32 = 1
gasLimit := pipeline.SelectGasLimit(cfg.EVM().GasEstimator(), pipeline.DirectRequestJobType, &specGasLimit)
assert.Equal(t, uint64(1), gasLimit)
})`
$DIR/core/services/pipeline/common_test.go: `t.Run("direct request specific gas limit", func(t *testing.T) {
gasLimit := pipeline.SelectGasLimit(cfg.EVM().GasEstimator(), pipeline.DirectRequestJobType, nil)
assert.Equal(t, uint64(100), gasLimit)
})`
$DIR/core/services/pipeline/common_test.go: `t.Run("OCR specific gas limit", func(t *testing.T) {
gasLimit := pipeline.SelectGasLimit(cfg.EVM().GasEstimator(), pipeline.OffchainReportingJobType, nil)
assert.Equal(t, uint64(103), gasLimit)
})`
$DIR/core/services/pipeline/common_test.go: `t.Run("OCR2 specific gas limit", func(t *testing.T) {
gasLimit := pipeline.SelectGasLimit(cfg.EVM().GasEstimator(), pipeline.OffchainReporting2JobType, nil)
assert.Equal(t, uint64(105), gasLimit)
})`
$DIR/core/services/pipeline/common_test.go: `t.Run("VRF specific gas limit", func(t *testing.T) {
gasLimit := pipeline.SelectGasLimit(cfg.EVM().GasEstimator(), pipeline.VRFJobType, nil)
assert.Equal(t, uint64(101), gasLimit)
})`
$DIR/core/services/pipeline/common_test.go: `t.Run("flux monitor specific gas limit", func(t *testing.T) {
gasLimit := pipeline.SelectGasLimit(cfg.EVM().GasEstimator(), pipeline.FluxMonitorJobType, nil)
assert.Equal(t, uint64(102), gasLimit)
})`
$DIR/core/services/pipeline/common_test.go: `t.Run("keeper specific gas limit", func(t *testing.T) {
gasLimit := pipeline.SelectGasLimit(cfg.EVM().GasEstimator(), pipeline.KeeperJobType, nil)
assert.Equal(t, uint64(104), gasLimit)
})`
$DIR/core/services/pipeline/common_test.go: `nextTask = trrs.GetNextTaskOf(*nextTask)`
$DIR/core/services/pipeline/common_test.go: `nextTask = trrs.GetNextTaskOf(*nextTask)`
$DIR/core/services/pipeline/common_test.go: `nextTask = trrs.GetNextTaskOf(*nextTask)`
$DIR/core/services/pipeline/common_test.go: `.Parse(a)`
$DIR/core/services/pipeline/common_test.go: `.TaskTimeout()`
$DIR/core/services/pipeline/common_test.go: `.Parse(a)`
$DIR/core/services/pipeline/common_test.go: `.TaskTimeout()`
$DIR/core/services/pipeline/common_test.go: `.Parse(a)`
$DIR/core/services/pipeline/common_test.go: `.Parse(a)`
$DIR/core/services/pipeline/common_test.go: `.Base()`
$DIR/core/services/pipeline/common_test.go: `.Run(test.name, func(t *testing.T) {
p, err := pipeline.Parse(test.spec)
require.NoError(t, err)
require.Len(t, p.Tasks, 1)
require.Equal(t, test.retries, p.Tasks[0].TaskRetries())
require.Equal(t, test.min, p.Tasks[0].TaskMinBackoff())
require.Equal(t, test.max, p.Tasks[0].TaskMaxBackoff())
})`
$DIR/core/services/pipeline/common_test.go: `.Parse(test.spec)`
$DIR/core/services/pipeline/common_test.go: `.Run("returns error if task is not the right type", func(t *testing.T) {
taskMap := interface{}(nil)
_, err := pipeline.UnmarshalTaskFromMap(pipeline.TaskType("http"), taskMap, 0, "foo-dot-id")
require.EqualError(t, err, "UnmarshalTaskFromMap: UnmarshalTaskFromMap only accepts a map[string]interface{} or a map[string]string. Got () of type ")
taskMap = struct {
foo time.Time
bar int
}{time.Unix(42, 42), 42}
_, err = pipeline.UnmarshalTaskFromMap(pipeline.TaskType("http"), taskMap, 0, "foo-dot-id")
require.Error(t, err)
require.Contains(t, err.Error(), "UnmarshalTaskFromMap: UnmarshalTaskFromMap only accepts a map[string]interface{} or a map[string]string")
})`
$DIR/core/services/pipeline/common_test.go: `.UnmarshalTaskFromMap(pipeline.TaskType("http"), taskMap, 0, "foo-dot-id")`
$DIR/core/services/pipeline/common_test.go: `.TaskType("http")`
$DIR/core/services/pipeline/common_test.go: `.Unix(42, 42)`
$DIR/core/services/pipeline/common_test.go: `.UnmarshalTaskFromMap(pipeline.TaskType("http"), taskMap, 0, "foo-dot-id")`
$DIR/core/services/pipeline/common_test.go: `.TaskType("http")`
$DIR/core/services/pipeline/common_test.go: `.Run("unknown task type", func(t *testing.T) {
taskMap := map[string]string{}
_, err := pipeline.UnmarshalTaskFromMap(pipeline.TaskType("xxx"), taskMap, 0, "foo-dot-id")
require.EqualError(t, err, `UnmarshalTaskFromMap: unknown task type: "xxx"`)
})`
$DIR/core/services/pipeline/common_test.go: `.UnmarshalTaskFromMap(pipeline.TaskType("xxx"), taskMap, 0, "foo-dot-id")`
$DIR/core/services/pipeline/common_test.go: `.TaskType("xxx")`
$DIR/core/services/pipeline/common_test.go: `.Run(string(test.taskType), func(t *testing.T) {
taskMap := map[string]string{}
task, err := pipeline.UnmarshalTaskFromMap(test.taskType, taskMap, 0, "foo-dot-id")
require.NoError(t, err)
require.IsType(t, test.expectedTaskType, task)
})`
$DIR/core/services/pipeline/common_test.go: `.UnmarshalTaskFromMap(test.taskType, taskMap, 0, "foo-dot-id")`
$DIR/core/services/pipeline/common_test.go: `.New("bar")`
$DIR/core/services/pipeline/common_test.go: `.Run(test.name, func(t *testing.T) {
outputs, err := pipeline.CheckInputs(test.pr, test.minLen, test.maxLen, test.maxErrors)
if test.err == nil {
assert.NoError(t, err)
assert.Equal(t, test.outputsLen, len(outputs))
} else {
assert.Equal(t, test.err, errors.Cause(err))
}
})`
$DIR/core/services/pipeline/common_test.go: `.CheckInputs(test.pr, test.minLen, test.maxLen, test.maxErrors)`
$DIR/core/services/pipeline/common_test.go: `.NewTime(time.Now(), true)`
$DIR/core/services/pipeline/common_test.go: `.Now()`
$DIR/core/services/pipeline/common_test.go: `.IsPending()`
$DIR/core/services/pipeline/common_test.go: `.NewGeneralConfig(t, func(c *chainlink.Config, s *chainlink.Secrets) {
c.EVM[0].GasEstimator.LimitDefault = ptr(uint64(999))
c.EVM[0].GasEstimator.LimitJobType = toml.GasLimitJobType{
DR: ptr(uint32(100)),
VRF: ptr(uint32(101)),
FM: ptr(uint32(102)),
OCR: ptr(uint32(103)),
Keeper: ptr(uint32(104)),
OCR2: ptr(uint32(105)),
}
})`
$DIR/core/services/pipeline/common_test.go: `.NewChainScopedConfig(t, gcfg)`
$DIR/core/services/pipeline/common_test.go: `.Run("spec defined gas limit", func(t *testing.T) {
var specGasLimit uint32 = 1
gasLimit := pipeline.SelectGasLimit(cfg.EVM().GasEstimator(), pipeline.DirectRequestJobType, &specGasLimit)
assert.Equal(t, uint64(1), gasLimit)
})`
$DIR/core/services/pipeline/common_test.go: `.SelectGasLimit(cfg.EVM().GasEstimator(), pipeline.DirectRequestJobType, &specGasLimit)`
$DIR/core/services/pipeline/common_test.go: `.EVM()`
$DIR/core/services/pipeline/common_test.go: `.GasEstimator()`
$DIR/core/services/pipeline/common_test.go: `.Run("direct request specific gas limit", func(t *testing.T) {
gasLimit := pipeline.SelectGasLimit(cfg.EVM().GasEstimator(), pipeline.DirectRequestJobType, nil)
assert.Equal(t, uint64(100), gasLimit)
})`
$DIR/core/services/pipeline/common_test.go: `.SelectGasLimit(cfg.EVM().GasEstimator(), pipeline.DirectRequestJobType, nil)`
$DIR/core/services/pipeline/common_test.go: `.EVM()`
$DIR/core/services/pipeline/common_test.go: `.GasEstimator()`
$DIR/core/services/pipeline/common_test.go: `.Run("OCR specific gas limit", func(t *testing.T) {
gasLimit := pipeline.SelectGasLimit(cfg.EVM().GasEstimator(), pipeline.OffchainReportingJobType, nil)
assert.Equal(t, uint64(103), gasLimit)
})`
$DIR/core/services/pipeline/common_test.go: `.SelectGasLimit(cfg.EVM().GasEstimator(), pipeline.OffchainReportingJobType, nil)`
$DIR/core/services/pipeline/common_test.go: `.EVM()`
$DIR/core/services/pipeline/common_test.go: `.GasEstimator()`
$DIR/core/services/pipeline/common_test.go: `.Run("OCR2 specific gas limit", func(t *testing.T) {
gasLimit := pipeline.SelectGasLimit(cfg.EVM().GasEstimator(), pipeline.OffchainReporting2JobType, nil)
assert.Equal(t, uint64(105), gasLimit)
})`
$DIR/core/services/pipeline/common_test.go: `.SelectGasLimit(cfg.EVM().GasEstimator(), pipeline.OffchainReporting2JobType, nil)`
$DIR/core/services/pipeline/common_test.go: `.EVM()`
$DIR/core/services/pipeline/common_test.go: `.GasEstimator()`
$DIR/core/services/pipeline/common_test.go: `.Run("VRF specific gas limit", func(t *testing.T) {
gasLimit := pipeline.SelectGasLimit(cfg.EVM().GasEstimator(), pipeline.VRFJobType, nil)
assert.Equal(t, uint64(101), gasLimit)
})`
$DIR/core/services/pipeline/common_test.go: `.SelectGasLimit(cfg.EVM().GasEstimator(), pipeline.VRFJobType, nil)`
$DIR/core/services/pipeline/common_test.go: `.EVM()`
$DIR/core/services/pipeline/common_test.go: `.GasEstimator()`
$DIR/core/services/pipeline/common_test.go: `.Run("flux monitor specific gas limit", func(t *testing.T) {
gasLimit := pipeline.SelectGasLimit(cfg.EVM().GasEstimator(), pipeline.FluxMonitorJobType, nil)
assert.Equal(t, uint64(102), gasLimit)
})`
$DIR/core/services/pipeline/common_test.go: `.SelectGasLimit(cfg.EVM().GasEstimator(), pipeline.FluxMonitorJobType, nil)`
$DIR/core/services/pipeline/common_test.go: `.EVM()`
$DIR/core/services/pipeline/common_test.go: `.GasEstimator()`
$DIR/core/services/pipeline/common_test.go: `.Run("keeper specific gas limit", func(t *testing.T) {
gasLimit := pipeline.SelectGasLimit(cfg.EVM().GasEstimator(), pipeline.KeeperJobType, nil)
assert.Equal(t, uint64(104), gasLimit)
})`
$DIR/core/services/pipeline/common_test.go: `.SelectGasLimit(cfg.EVM().GasEstimator(), pipeline.KeeperJobType, nil)`
$DIR/core/services/pipeline/common_test.go: `.EVM()`
$DIR/core/services/pipeline/common_test.go: `.GasEstimator()`
$DIR/core/services/pipeline/common_test.go: `.SelectGasLimit(cfg.EVM().GasEstimator(), pipeline.WebhookJobType, nil)`
$DIR/core/services/pipeline/common_test.go: `.EVM()`
$DIR/core/services/pipeline/common_test.go: `.GasEstimator()`
$DIR/core/services/pipeline/common_test.go: `.NewBaseTask(1, "t1", nil, nil, 0)`
$DIR/core/services/pipeline/common_test.go: `.NewBaseTask(2, "t2", nil, nil, 0)`
$DIR/core/services/pipeline/common_test.go: `.NewBaseTask(3, "t3", nil, nil, 0)`
$DIR/core/services/pipeline/common_test.go: `.NewBaseTask(4, "t4", nil, nil, 0)`
$DIR/core/services/pipeline/common_test.go: `.GetNextTaskOf(firstTask)`
$DIR/core/services/pipeline/common_test.go: `.GetNextTaskOf(*nextTask)`
$DIR/core/services/pipeline/common_test.go: `.GetNextTaskOf(*nextTask)`
$DIR/core/services/pipeline/common_test.go: `.GetNextTaskOf(*nextTask)`
$DIR/core/services/pipeline/getters_test.go: `t.Run(test.expr, func(t *testing.T) {
getter := pipeline.VarExpr(test.expr, vars)
v, err := getter()
if test.err == nil {
assert.NoError(t, err)
assert.Equal(t, test.result, v)
} else {
assert.Equal(t, test.err, errors.Cause(err))
}
})`
$DIR/core/services/pipeline/getters_test.go: `t.Run(test.json, func(t *testing.T) {
getter := pipeline.JSONWithVarExprs(test.json, vars, test.allowErrors)
v, err := getter()
if test.err != nil {
assert.Equal(t, test.err, errors.Cause(err))
} else {
m, is := v.(map[string]interface{})
if is && test.field != "" {
assert.Equal(t, test.result, m[test.field])
} else {
assert.Equal(t, test.result, v)
}
}
})`
$DIR/core/services/pipeline/getters_test.go: `t.Run("returns the requested input's Value and Error if they exist", func(t *testing.T) {
expectedVal := "bar"
expectedErr := errors.New("some err")
val, err := pipeline.Input([]pipeline.Result{{Value: "foo"}, {Value: expectedVal, Error: expectedErr}, {Value: "baz"}}, 1)()
assert.Equal(t, expectedVal, val)
assert.Equal(t, expectedErr, err)
})`
$DIR/core/services/pipeline/getters_test.go: `_, err = pipeline.Input([]pipeline.Result{{Value: "foo"}}, -1)()`
$DIR/core/services/pipeline/getters_test.go: `t.Run(test.name, func(t *testing.T) {
val, err := pipeline.Inputs(test.inputs)()
assert.Equal(t, test.expectedErr, errors.Cause(err))
assert.Equal(t, test.expected, val)
})`
$DIR/core/services/pipeline/getters_test.go: `t.Run("returns any non-empty string", func(t *testing.T) {
val, err := pipeline.NonemptyString("foo bar")()
assert.NoError(t, err)
assert.Equal(t, "foo bar", val)
})`
$DIR/core/services/pipeline/getters_test.go: `_, err = pipeline.NonemptyString(" ")()`
$DIR/core/services/pipeline/getters_test.go: `t.Run("returns duration in seconds", func(t *testing.T) {
val, err := pipeline.ValidDurationInSeconds("10s")()
assert.NoError(t, err)
assert.Equal(t, 10, val)
val, err = pipeline.ValidDurationInSeconds("1m")()
assert.NoError(t, err)
assert.Equal(t, 60, val)
val, err = pipeline.ValidDurationInSeconds("1h")()
assert.NoError(t, err)
assert.Equal(t, 3600, val)
})`
$DIR/core/services/pipeline/getters_test.go: `val, err = pipeline.ValidDurationInSeconds("1m")()`
$DIR/core/services/pipeline/getters_test.go: `val, err = pipeline.ValidDurationInSeconds("1h")()`
$DIR/core/services/pipeline/getters_test.go: `t.Run("returns ErrParameterEmpty when given an empty string (including only spaces)", func(t *testing.T) {
_, err := pipeline.ValidDurationInSeconds("")()
assert.Equal(t, pipeline.ErrParameterEmpty, errors.Cause(err))
_, err = pipeline.ValidDurationInSeconds(" ")()
assert.Equal(t, pipeline.ErrParameterEmpty, errors.Cause(err))
})`
$DIR/core/services/pipeline/getters_test.go: `_, err = pipeline.ValidDurationInSeconds(" ")()`
$DIR/core/services/pipeline/getters_test.go: `_, err = pipeline.ValidDurationInSeconds("5")()`
$DIR/core/services/pipeline/getters_test.go: `_, err = pipeline.ValidDurationInSeconds("!m")()`
$DIR/core/services/pipeline/getters_test.go: `t.Run("no inputs", func(t *testing.T) {
getters := pipeline.From()
assert.Empty(t, getters)
})`
$DIR/core/services/pipeline/getters_test.go: `t.Run(test.name, func(t *testing.T) {
getters := pipeline.From(test.input...)
assert.Len(t, getters, 2)
for _, getter := range getters {
val, err := getter()
assert.NoError(t, err)
assert.Equal(t, test.expected, val)
}
})`
$DIR/core/services/pipeline/getters_test.go: `.Run(test.expr, func(t *testing.T) {
getter := pipeline.VarExpr(test.expr, vars)
v, err := getter()
if test.err == nil {
assert.NoError(t, err)
assert.Equal(t, test.result, v)
} else {
assert.Equal(t, test.err, errors.Cause(err))
}
})`
$DIR/core/services/pipeline/getters_test.go: `.VarExpr(test.expr, vars)`
$DIR/core/services/pipeline/getters_test.go: `.Get("err")`
$DIR/core/services/pipeline/getters_test.go: `.SetString("314159265358979323846264338327950288419716939937510582097494459", 10)`
$DIR/core/services/pipeline/getters_test.go: `.Run(test.json, func(t *testing.T) {
getter := pipeline.JSONWithVarExprs(test.json, vars, test.allowErrors)
v, err := getter()
if test.err != nil {
assert.Equal(t, test.err, errors.Cause(err))
} else {
m, is := v.(map[string]interface{})
if is && test.field != "" {
assert.Equal(t, test.result, m[test.field])
} else {
assert.Equal(t, test.result, v)
}
}
})`
$DIR/core/services/pipeline/getters_test.go: `.JSONWithVarExprs(test.json, vars, test.allowErrors)`
$DIR/core/services/pipeline/getters_test.go: `.Run("returns the requested input's Value and Error if they exist", func(t *testing.T) {
expectedVal := "bar"
expectedErr := errors.New("some err")
val, err := pipeline.Input([]pipeline.Result{{Value: "foo"}, {Value: expectedVal, Error: expectedErr}, {Value: "baz"}}, 1)()
assert.Equal(t, expectedVal, val)
assert.Equal(t, expectedErr, err)
})`
$DIR/core/services/pipeline/getters_test.go: `.New("some err")`
$DIR/core/services/pipeline/getters_test.go: `.Input([]pipeline.Result{{Value: "foo"}, {Value: expectedVal, Error: expectedErr}, {Value: "baz"}}, 1)`
$DIR/core/services/pipeline/getters_test.go: `.Input([]pipeline.Result{{Value: "foo"}}, 1)`
$DIR/core/services/pipeline/getters_test.go: `.Input([]pipeline.Result{{Value: "foo"}}, -1)`
$DIR/core/services/pipeline/getters_test.go: `.New("some issue")`
$DIR/core/services/pipeline/getters_test.go: `.Run(test.name, func(t *testing.T) {
val, err := pipeline.Inputs(test.inputs)()
assert.Equal(t, test.expectedErr, errors.Cause(err))
assert.Equal(t, test.expected, val)
})`
$DIR/core/services/pipeline/getters_test.go: `.Inputs(test.inputs)`
$DIR/core/services/pipeline/getters_test.go: `.Run("returns any non-empty string", func(t *testing.T) {
val, err := pipeline.NonemptyString("foo bar")()
assert.NoError(t, err)
assert.Equal(t, "foo bar", val)
})`
$DIR/core/services/pipeline/getters_test.go: `.NonemptyString("foo bar")`
$DIR/core/services/pipeline/getters_test.go: `.NonemptyString("")`
$DIR/core/services/pipeline/getters_test.go: `.NonemptyString(" ")`
$DIR/core/services/pipeline/getters_test.go: `.Run("returns duration in seconds", func(t *testing.T) {
val, err := pipeline.ValidDurationInSeconds("10s")()
assert.NoError(t, err)
assert.Equal(t, 10, val)
val, err = pipeline.ValidDurationInSeconds("1m")()
assert.NoError(t, err)
assert.Equal(t, 60, val)
val, err = pipeline.ValidDurationInSeconds("1h")()
assert.NoError(t, err)
assert.Equal(t, 3600, val)
})`
$DIR/core/services/pipeline/getters_test.go: `.ValidDurationInSeconds("10s")`
$DIR/core/services/pipeline/getters_test.go: `.ValidDurationInSeconds("1m")`
$DIR/core/services/pipeline/getters_test.go: `.ValidDurationInSeconds("1h")`
$DIR/core/services/pipeline/getters_test.go: `.Run("returns ErrParameterEmpty when given an empty string (including only spaces)", func(t *testing.T) {
_, err := pipeline.ValidDurationInSeconds("")()
assert.Equal(t, pipeline.ErrParameterEmpty, errors.Cause(err))
_, err = pipeline.ValidDurationInSeconds(" ")()
assert.Equal(t, pipeline.ErrParameterEmpty, errors.Cause(err))
})`
$DIR/core/services/pipeline/getters_test.go: `.ValidDurationInSeconds("")`
$DIR/core/services/pipeline/getters_test.go: `.ValidDurationInSeconds(" ")`
$DIR/core/services/pipeline/getters_test.go: `.ValidDurationInSeconds("1b")`
$DIR/core/services/pipeline/getters_test.go: `.ValidDurationInSeconds("5")`
$DIR/core/services/pipeline/getters_test.go: `.ValidDurationInSeconds("!m")`
$DIR/core/services/pipeline/getters_test.go: `.Run("no inputs", func(t *testing.T) {
getters := pipeline.From()
assert.Empty(t, getters)
})`
$DIR/core/services/pipeline/getters_test.go: `.From()`
$DIR/core/services/pipeline/getters_test.go: `.Run(test.name, func(t *testing.T) {
getters := pipeline.From(test.input...)
assert.Len(t, getters, 2)
for _, getter := range getters {
val, err := getter()
assert.NoError(t, err)
assert.Equal(t, test.expected, val)
}
})`
$DIR/core/services/pipeline/getters_test.go: `.From(test.input...)`
$DIR/core/services/pipeline/graph_test.go: `nodes[n.DOTID()] = n.ID()`
$DIR/core/services/pipeline/graph_test.go: `answer1.BaseTask = pipeline.NewBaseTask(
6,
"answer1",
[]pipeline.TaskDependency{
{
PropagateResult: false, // propagateResult is false because this dependency is implicit
InputTask: pipeline.Task(ds1_multiply),
},
{
PropagateResult: true, // propagateResult is true because this dependency is explicit in spec
InputTask: pipeline.Task(ds2_multiply),
},
},
nil,
0)`
$DIR/core/services/pipeline/graph_test.go: `answer2.BaseTask = pipeline.NewBaseTask(7, "answer2", nil, nil, 1)`
$DIR/core/services/pipeline/graph_test.go: `ds1_multiply.BaseTask = pipeline.NewBaseTask(
2,
"ds1_multiply",
[]pipeline.TaskDependency{{PropagateResult: true, InputTask: pipeline.Task(ds1_parse)}},
[]pipeline.Task{answer1},
-1)`
$DIR/core/services/pipeline/graph_test.go: `ds2_multiply.BaseTask = pipeline.NewBaseTask(
5,
"ds2_multiply",
[]pipeline.TaskDependency{{PropagateResult: true, InputTask: pipeline.Task(ds2_parse)}},
[]pipeline.Task{answer1},
-1)`
$DIR/core/services/pipeline/graph_test.go: `ds1_parse.BaseTask = pipeline.NewBaseTask(
1,
"ds1_parse",
[]pipeline.TaskDependency{{PropagateResult: true, InputTask: pipeline.Task(ds1)}},
[]pipeline.Task{ds1_multiply},
-1)`
$DIR/core/services/pipeline/graph_test.go: `ds2_parse.BaseTask = pipeline.NewBaseTask(
4,
"ds2_parse",
[]pipeline.TaskDependency{{PropagateResult: true, InputTask: pipeline.Task(ds2)}},
[]pipeline.Task{ds2_multiply},
-1)`
$DIR/core/services/pipeline/graph_test.go: `ds1.BaseTask = pipeline.NewBaseTask(0, "ds1", nil, []pipeline.Task{ds1_parse}, -1)`
$DIR/core/services/pipeline/graph_test.go: `ds2.BaseTask = pipeline.NewBaseTask(3, "ds2", nil, []pipeline.Task{ds2_parse}, -1)`
$DIR/core/services/pipeline/graph_test.go: `_, err = pipeline.Parse(`
a [type=bridge];
b [type=multiply times=1.23];
a -> b -> a;
`)`
$DIR/core/services/pipeline/graph_test.go: `nodes[n.DOTID()] = n.ID()`
$DIR/core/services/pipeline/graph_test.go: `t.Run(s.name, func(t *testing.T) {
_, err := pipeline.Parse(s.pipeline)
assert.Error(t, err)
})`
$DIR/core/services/pipeline/graph_test.go: `.NewGraph()`
$DIR/core/services/pipeline/graph_test.go: `.UnmarshalText([]byte(pipeline.DotStr))`
$DIR/core/services/pipeline/graph_test.go: `.Nodes()`
$DIR/core/services/pipeline/graph_test.go: `.Next()`
$DIR/core/services/pipeline/graph_test.go: `.Node()`
$DIR/core/services/pipeline/graph_test.go: `.DOTID()`
$DIR/core/services/pipeline/graph_test.go: `.ID()`
$DIR/core/services/pipeline/graph_test.go: `.Parse(pipeline.DotStr)`
$DIR/core/services/pipeline/graph_test.go: `.NewBaseTask(
6,
"answer1",
[]pipeline.TaskDependency{
{
PropagateResult: false, // propagateResult is false because this dependency is implicit
InputTask: pipeline.Task(ds1_multiply),
},
{
PropagateResult: true, // propagateResult is true because this dependency is explicit in spec
InputTask: pipeline.Task(ds2_multiply),
},
},
nil,
0)`
$DIR/core/services/pipeline/graph_test.go: `.Task(ds1_multiply)`
$DIR/core/services/pipeline/graph_test.go: `.Task(ds2_multiply)`
$DIR/core/services/pipeline/graph_test.go: `.NewBaseTask(7, "answer2", nil, nil, 1)`
$DIR/core/services/pipeline/graph_test.go: `.NewBaseTask(
2,
"ds1_multiply",
[]pipeline.TaskDependency{{PropagateResult: true, InputTask: pipeline.Task(ds1_parse)}},
[]pipeline.Task{answer1},
-1)`
$DIR/core/services/pipeline/graph_test.go: `.Task(ds1_parse)`
$DIR/core/services/pipeline/graph_test.go: `.NewBaseTask(
5,
"ds2_multiply",
[]pipeline.TaskDependency{{PropagateResult: true, InputTask: pipeline.Task(ds2_parse)}},
[]pipeline.Task{answer1},
-1)`
$DIR/core/services/pipeline/graph_test.go: `.Task(ds2_parse)`
$DIR/core/services/pipeline/graph_test.go: `.NewBaseTask(
1,
"ds1_parse",
[]pipeline.TaskDependency{{PropagateResult: true, InputTask: pipeline.Task(ds1)}},
[]pipeline.Task{ds1_multiply},
-1)`
$DIR/core/services/pipeline/graph_test.go: `.Task(ds1)`
$DIR/core/services/pipeline/graph_test.go: `.NewBaseTask(
4,
"ds2_parse",
[]pipeline.TaskDependency{{PropagateResult: true, InputTask: pipeline.Task(ds2)}},
[]pipeline.Task{ds2_multiply},
-1)`
$DIR/core/services/pipeline/graph_test.go: `.Task(ds2)`
$DIR/core/services/pipeline/graph_test.go: `.NewBaseTask(0, "ds1", nil, []pipeline.Task{ds1_parse}, -1)`
$DIR/core/services/pipeline/graph_test.go: `.NewBaseTask(3, "ds2", nil, []pipeline.Task{ds2_parse}, -1)`
$DIR/core/services/pipeline/graph_test.go: `.Inputs()`
$DIR/core/services/pipeline/graph_test.go: `.Outputs()`
$DIR/core/services/pipeline/graph_test.go: `.Parse(pipeline.DotStr)`
$DIR/core/services/pipeline/graph_test.go: `.Parse(`
a [type=bridge];
b [type=multiply times=1.23];
a -> b -> a;
`)`
$DIR/core/services/pipeline/graph_test.go: `.NewGraph()`
$DIR/core/services/pipeline/graph_test.go: `.UnmarshalText([]byte(`
a [type=bridge];
b [type=multiply times=1.23 data="$(a.a1)" self="$(b)"];
c [type=xyz times=1.23 input="$(b)"];
d [type=xyz times=1.23 check="{\"a\": $(jobSpec.id),\"b\":$(c.p)}"];
`))`
$DIR/core/services/pipeline/graph_test.go: `.Nodes()`
$DIR/core/services/pipeline/graph_test.go: `.Next()`
$DIR/core/services/pipeline/graph_test.go: `.Node()`
$DIR/core/services/pipeline/graph_test.go: `.DOTID()`
$DIR/core/services/pipeline/graph_test.go: `.ID()`
$DIR/core/services/pipeline/graph_test.go: `.HasEdgeFromTo(nodes["c"], nodes["d"])`
$DIR/core/services/pipeline/graph_test.go: `.Run(s.name, func(t *testing.T) {
_, err := pipeline.Parse(s.pipeline)
assert.Error(t, err)
})`
$DIR/core/services/pipeline/graph_test.go: `.Parse(s.pipeline)`
$DIR/core/services/pipeline/internal/eautils/eautils_test.go: `t.Run(tt.name, func(t *testing.T) {
code, ok := BestEffortExtractEAStatus(tt.arg)
assert.Equal(t, tt.expectCode, code)
assert.Equal(t, tt.expectOk, ok)
})`
$DIR/core/services/pipeline/internal/eautils/eautils_test.go: `.Run(tt.name, func(t *testing.T) {
code, ok := BestEffortExtractEAStatus(tt.arg)
assert.Equal(t, tt.expectCode, code)
assert.Equal(t, tt.expectOk, ok)
})`
$DIR/core/services/pipeline/keypath_test.go: `t.Run("can be constructed from a period-delimited string", func(t *testing.T) {
kp, err := pipeline.NewKeypathFromString("")
assert.NoError(t, err)
assert.Equal(t, pipeline.Keypath{}, kp)
kp, err = pipeline.NewKeypathFromString("foo")
assert.NoError(t, err)
assert.Equal(t, pipeline.Keypath{[]string{"foo"}}, kp)
kp, err = pipeline.NewKeypathFromString("foo.bar")
assert.NoError(t, err)
assert.Equal(t, pipeline.Keypath{[]string{"foo", "bar"}}, kp)
kp, err = pipeline.NewKeypathFromString("a.b.c.d.e")
assert.NoError(t, err)
assert.Equal(t, pipeline.Keypath{[]string{"a", "b", "c", "d", "e"}}, kp)
})`
$DIR/core/services/pipeline/keypath_test.go: `kp, err = pipeline.NewKeypathFromString("foo")`
$DIR/core/services/pipeline/keypath_test.go: `kp, err = pipeline.NewKeypathFromString("foo.bar")`
$DIR/core/services/pipeline/keypath_test.go: `kp, err = pipeline.NewKeypathFromString("a.b.c.d.e")`
$DIR/core/services/pipeline/keypath_test.go: `t.Run(keypath, func(t *testing.T) {
_, err := pipeline.NewKeypathFromString(keypath)
assert.ErrorIs(t, err, pipeline.ErrWrongKeypath)
})`
$DIR/core/services/pipeline/keypath_test.go: `.Run("can be constructed from a period-delimited string", func(t *testing.T) {
kp, err := pipeline.NewKeypathFromString("")
assert.NoError(t, err)
assert.Equal(t, pipeline.Keypath{}, kp)
kp, err = pipeline.NewKeypathFromString("foo")
assert.NoError(t, err)
assert.Equal(t, pipeline.Keypath{[]string{"foo"}}, kp)
kp, err = pipeline.NewKeypathFromString("foo.bar")
assert.NoError(t, err)
assert.Equal(t, pipeline.Keypath{[]string{"foo", "bar"}}, kp)
kp, err = pipeline.NewKeypathFromString("a.b.c.d.e")
assert.NoError(t, err)
assert.Equal(t, pipeline.Keypath{[]string{"a", "b", "c", "d", "e"}}, kp)
})`
$DIR/core/services/pipeline/keypath_test.go: `.NewKeypathFromString("")`
$DIR/core/services/pipeline/keypath_test.go: `.NewKeypathFromString("foo")`
$DIR/core/services/pipeline/keypath_test.go: `.NewKeypathFromString("foo.bar")`
$DIR/core/services/pipeline/keypath_test.go: `.NewKeypathFromString("a.b.c.d.e")`
$DIR/core/services/pipeline/keypath_test.go: `.Run(keypath, func(t *testing.T) {
_, err := pipeline.NewKeypathFromString(keypath)
assert.ErrorIs(t, err, pipeline.ErrWrongKeypath)
})`
$DIR/core/services/pipeline/keypath_test.go: `.NewKeypathFromString(keypath)`
$DIR/core/services/pipeline/models_test.go: `t.Run(tc.name, func(t *testing.T) {
assert.Equal(t, tc.want, tc.run.Status())
})`
$DIR/core/services/pipeline/models_test.go: `runErrors = append(runErrors, null.NewString("bad thing happened", true))`
$DIR/core/services/pipeline/models_test.go: `runErrors = append(runErrors, null.NewString("pretty bad thing happened", true))`
$DIR/core/services/pipeline/models_test.go: `runErrors = append(runErrors, null.NewString("", false))`
$DIR/core/services/pipeline/models_test.go: `t.Run("invalid outputs", func(t *testing.T) {
run := &pipeline.Run{
Outputs: jsonserializable.JSONSerializable{
Valid: false,
},
}
outputs, err := run.StringOutputs()
assert.NoError(t, err)
assert.Empty(t, outputs)
})`
$DIR/core/services/pipeline/models_test.go: `t.Run(tc.name, func(t *testing.T) {
run := &pipeline.Run{
Outputs: jsonserializable.JSONSerializable{
Valid: true,
Val: []interface{}{tc.val},
},
}
t.Log(tc.val)
outputs, err := run.StringOutputs()
assert.NoError(t, err)
assert.NotNil(t, outputs)
assert.Len(t, outputs, 1)
assert.Equal(t, tc.want, *outputs[0])
})`
$DIR/core/services/pipeline/models_test.go: `.TimeFrom(time.Now())`
$DIR/core/services/pipeline/models_test.go: `.Now()`
$DIR/core/services/pipeline/models_test.go: `.StringFrom(errors.New("fail").Error())`
$DIR/core/services/pipeline/models_test.go: `.StringFrom(errors.New("fail").Error())`
$DIR/core/services/pipeline/models_test.go: `.Run(tc.name, func(t *testing.T) {
assert.Equal(t, tc.want, tc.run.Status())
})`
$DIR/core/services/pipeline/models_test.go: `.NewString("bad thing happened", true)`
$DIR/core/services/pipeline/models_test.go: `.NewString("pretty bad thing happened", true)`
$DIR/core/services/pipeline/models_test.go: `.NewString("", false)`
$DIR/core/services/pipeline/models_test.go: `.New("bad thing happened; pretty bad thing happened")`
$DIR/core/services/pipeline/models_test.go: `.Run("invalid outputs", func(t *testing.T) {
run := &pipeline.Run{
Outputs: jsonserializable.JSONSerializable{
Valid: false,
},
}
outputs, err := run.StringOutputs()
assert.NoError(t, err)
assert.Empty(t, outputs)
})`
$DIR/core/services/pipeline/models_test.go: `.StringOutputs()`
$DIR/core/services/pipeline/models_test.go: `.NewInt(123)`
$DIR/core/services/pipeline/models_test.go: `.Run(tc.name, func(t *testing.T) {
run := &pipeline.Run{
Outputs: jsonserializable.JSONSerializable{
Valid: true,
Val: []interface{}{tc.val},
},
}
t.Log(tc.val)
outputs, err := run.StringOutputs()
assert.NoError(t, err)
assert.NotNil(t, outputs)
assert.Len(t, outputs, 1)
assert.Equal(t, tc.want, *outputs[0])
})`
$DIR/core/services/pipeline/models_test.go: `.StringOutputs()`
$DIR/core/services/pipeline/orm_test.go: `err = db.Get(&actual, "SELECT * FROM pipeline_specs WHERE pipeline_specs.id = $1", id)`
$DIR/core/services/pipeline/orm_test.go: `_, err = db.Exec(`SET CONSTRAINTS pipeline_runs_pipeline_spec_id_fkey DEFERRED`)`
$DIR/core/services/pipeline/orm_test.go: `_, err = db.Exec(`SET CONSTRAINTS pipeline_runs_pipeline_spec_id_fkey DEFERRED`)`
$DIR/core/services/pipeline/orm_test.go: `r.PipelineTaskRuns = []pipeline.TaskRun{
{
ID: uuid.New(),
PipelineRunID: r.ID,
Type: "bridge",
DotID: "ds1",
CreatedAt: now,
FinishedAt: null.TimeFrom(now.Add(100 * time.Millisecond)),
},
{
ID: uuid.New(),
PipelineRunID: r.ID,
Type: "median",
DotID: "answer2",
Output: jsonserializable.JSONSerializable{Val: 1, Valid: true},
CreatedAt: now,
FinishedAt: null.TimeFrom(now.Add(200 * time.Millisecond)),
},
}`
$DIR/core/services/pipeline/orm_test.go: `r.FinishedAt = null.TimeFrom(now.Add(300 * time.Millisecond))`
$DIR/core/services/pipeline/orm_test.go: `r.Outputs = jsonserializable.JSONSerializable{
Val: "stuff",
Valid: true,
}`
$DIR/core/services/pipeline/orm_test.go: `r.AllErrors = append(r.AllErrors, null.NewString("", false))`
$DIR/core/services/pipeline/orm_test.go: `r.State = pipeline.RunStatusCompleted`
$DIR/core/services/pipeline/orm_test.go: `runs = append(runs, &r)`
$DIR/core/services/pipeline/orm_test.go: `err = orm.InsertFinishedRuns(ctx, runs, true)`
$DIR/core/services/pipeline/orm_test.go: `run.PipelineTaskRuns = []pipeline.TaskRun{
{
ID: uuid.New(),
PipelineRunID: run.ID,
Type: "bridge",
DotID: "ds1",
CreatedAt: now,
FinishedAt: null.TimeFrom(now.Add(100 * time.Millisecond)),
},
{
ID: uuid.New(),
PipelineRunID: run.ID,
Type: "median",
DotID: "answer2",
Output: jsonserializable.JSONSerializable{Val: 1, Valid: true},
CreatedAt: now,
FinishedAt: null.TimeFrom(now.Add(200 * time.Millisecond)),
},
}`
$DIR/core/services/pipeline/orm_test.go: `run.FinishedAt = null.TimeFrom(now.Add(300 * time.Millisecond))`
$DIR/core/services/pipeline/orm_test.go: `run.Outputs = jsonserializable.JSONSerializable{
Val: "stuff",
Valid: true,
}`
$DIR/core/services/pipeline/orm_test.go: `run.AllErrors = append(run.AllErrors, null.NewString("", false))`
$DIR/core/services/pipeline/orm_test.go: `run.State = pipeline.RunStatusCompleted`
$DIR/core/services/pipeline/orm_test.go: `err = orm.InsertFinishedRunWithSpec(ctx, run, true)`
$DIR/core/services/pipeline/orm_test.go: `err = db.Get(&pipelineSpec, "SELECT pipeline_specs.* FROM pipeline_specs JOIN job_pipeline_specs ON (pipeline_specs.id = job_pipeline_specs.pipeline_spec_id) WHERE job_pipeline_specs.job_id = $1 AND pipeline_specs.id = $2", jb.ID, run.PipelineSpecID)`
$DIR/core/services/pipeline/orm_test.go: `err = db.Get(&jobPipelineSpec, "SELECT * FROM job_pipeline_specs WHERE job_id = $1 AND pipeline_spec_id = $2", jb.ID, pipelineSpec.ID)`
$DIR/core/services/pipeline/orm_test.go: `run.PipelineTaskRuns = []pipeline.TaskRun{
// pending task
{
ID: uuid.New(),
PipelineRunID: run.ID,
Type: "bridge",
DotID: "ds1",
CreatedAt: now,
FinishedAt: null.Time{},
},
// finished task
{
ID: uuid.New(),
PipelineRunID: run.ID,
Type: "median",
DotID: "answer2",
Output: jsonserializable.JSONSerializable{Val: 1, Valid: true},
CreatedAt: now,
FinishedAt: null.TimeFrom(now),
},
}`
$DIR/core/services/pipeline/orm_test.go: `run = &r`
$DIR/core/services/pipeline/orm_test.go: `run.PipelineTaskRuns = []pipeline.TaskRun{
// pending task
{
ID: uuid.New(),
PipelineRunID: run.ID,
Type: "bridge",
DotID: "ds1",
Output: jsonserializable.JSONSerializable{Val: 2, Valid: true},
CreatedAt: now,
FinishedAt: null.TimeFrom(now),
},
}`
$DIR/core/services/pipeline/orm_test.go: `restart, err = orm.StoreRun(ctx, run)`
$DIR/core/services/pipeline/orm_test.go: `r, err = orm.FindRun(ctx, run.ID)`
$DIR/core/services/pipeline/orm_test.go: `run = &r`
$DIR/core/services/pipeline/orm_test.go: `task = run.ByDotID("ds1")`
$DIR/core/services/pipeline/orm_test.go: `t.Cleanup(func() { assert.NoError(t, rows.Close()) })`
$DIR/core/services/pipeline/orm_test.go: `run.PipelineTaskRuns = []pipeline.TaskRun{
// pending task
{
ID: ds1_id,
PipelineRunID: run.ID,
Type: "bridge",
DotID: "ds1",
CreatedAt: now,
FinishedAt: null.Time{},
},
// finished task
{
ID: uuid.New(),
PipelineRunID: run.ID,
Type: "median",
DotID: "answer2",
Output: jsonserializable.JSONSerializable{Val: 1, Valid: true},
CreatedAt: now,
FinishedAt: null.TimeFrom(now),
},
}`
$DIR/core/services/pipeline/orm_test.go: `run.PipelineTaskRuns = []pipeline.TaskRun{
// pending task
{
ID: ds1_id,
PipelineRunID: run.ID,
Type: "bridge",
DotID: "ds1",
CreatedAt: now,
FinishedAt: null.Time{},
},
// finished task with json output
{
ID: uuid.New(),
PipelineRunID: run.ID,
Type: "cbor_parse",
DotID: "ds2",
Output: jsonserializable.JSONSerializable{Val: cborOutput, Valid: true},
CreatedAt: now,
FinishedAt: null.TimeFrom(now),
},
// finished task
{
ID: uuid.New(),
PipelineRunID: run.ID,
Type: "median",
DotID: "answer2",
Output: jsonserializable.JSONSerializable{Val: 1, Valid: true},
CreatedAt: now,
FinishedAt: null.TimeFrom(now),
},
}`
$DIR/core/services/pipeline/orm_test.go: `run = &r`
$DIR/core/services/pipeline/orm_test.go: `cborOutput["contractAddress"] = "0x8bd112d3f8f92e41c861939545ad387307af9703"`
$DIR/core/services/pipeline/orm_test.go: `run.PipelineTaskRuns = []pipeline.TaskRun{
// pending task
{
ID: uuid.New(),
PipelineRunID: run.ID,
Type: "bridge",
DotID: "ds1",
CreatedAt: now,
FinishedAt: null.Time{},
},
// finished task
{
ID: uuid.New(),
PipelineRunID: run.ID,
Type: "median",
DotID: "answer2",
Output: jsonserializable.JSONSerializable{Val: 1, Valid: true},
CreatedAt: now,
FinishedAt: null.TimeFrom(now),
},
}`
$DIR/core/services/pipeline/orm_test.go: `err = orm.DeleteRun(ctx, run.ID)`
$DIR/core/services/pipeline/orm_test.go: `_, err = orm.FindRun(ctx, run.ID)`
$DIR/core/services/pipeline/orm_test.go: `run.PipelineTaskRuns = []pipeline.TaskRun{
// finished task
{
ID: uuid.New(),
PipelineRunID: run.ID,
Type: "median",
DotID: "answer2",
Output: jsonserializable.JSONSerializable{Val: 1, Valid: true},
CreatedAt: now,
FinishedAt: null.TimeFrom(now.Add(-1 * time.Second)),
},
}`
$DIR/core/services/pipeline/orm_test.go: `run.State = pipeline.RunStatusCompleted`
$DIR/core/services/pipeline/orm_test.go: `run.FinishedAt = null.TimeFrom(now.Add(-1 * time.Second))`
$DIR/core/services/pipeline/orm_test.go: `run.Outputs = jsonserializable.JSONSerializable{Val: 1, Valid: true}`
$DIR/core/services/pipeline/orm_test.go: `run.AllErrors = pipeline.RunErrors{null.StringFrom("SOMETHING")}`
$DIR/core/services/pipeline/orm_test.go: `runsIds = append(runsIds, run.ID)`
$DIR/core/services/pipeline/orm_test.go: `err = porm.CreateRun(ctx, &pipeline.Run{
PipelineSpecID: keeperJob.PipelineSpecID,
PruningKey: keeperJob.ID,
State: pipeline.RunStatusRunning,
Outputs: jsonserializable.JSONSerializable{},
CreatedAt: time.Now(),
PipelineTaskRuns: []pipeline.TaskRun{{
ID: runID1,
Type: pipeline.TaskTypeETHTx,
Index: 0,
Output: jsonserializable.JSONSerializable{},
CreatedAt: time.Now(),
DotID: "perform_upkeep_tx",
}},
})`
$DIR/core/services/pipeline/orm_test.go: `err = porm.CreateRun(ctx, &pipeline.Run{
PipelineSpecID: keeperJob.PipelineSpecID,
PruningKey: keeperJob.ID,
State: pipeline.RunStatusRunning,
Outputs: jsonserializable.JSONSerializable{},
CreatedAt: time.Now(),
PipelineTaskRuns: []pipeline.TaskRun{{
ID: runID2,
Type: pipeline.TaskTypeETHCall,
Index: 1,
Output: jsonserializable.JSONSerializable{},
CreatedAt: time.Now(),
DotID: "check_upkeep_tx",
}},
})`
$DIR/core/services/pipeline/orm_test.go: `counter++`
$DIR/core/services/pipeline/orm_test.go: `err = porm.CreateRun(ctx, &pipeline.Run{
PipelineSpecID: drJob.PipelineSpecID,
PruningKey: drJob.ID,
State: pipeline.RunStatusRunning,
Outputs: jsonserializable.JSONSerializable{},
CreatedAt: time.Now(),
PipelineTaskRuns: []pipeline.TaskRun{{
ID: runningID,
Type: pipeline.TaskTypeHTTP,
Index: 0,
Output: jsonserializable.JSONSerializable{},
CreatedAt: time.Now(),
DotID: "ds1",
}},
})`
$DIR/core/services/pipeline/orm_test.go: `err = porm.CreateRun(ctx, &pipeline.Run{
PipelineSpecID: drJob.PipelineSpecID,
PruningKey: drJob.ID,
State: pipeline.RunStatusSuspended,
Outputs: jsonserializable.JSONSerializable{},
CreatedAt: time.Now(),
PipelineTaskRuns: []pipeline.TaskRun{{
ID: uuid.New(),
Type: pipeline.TaskTypeHTTP,
Index: 1,
Output: jsonserializable.JSONSerializable{},
CreatedAt: time.Now(),
DotID: "ds1",
}},
})`
$DIR/core/services/pipeline/orm_test.go: `counter++`
$DIR/core/services/pipeline/orm_test.go: `c.JobPipeline.MaxSuccessfulRuns = &n`
$DIR/core/services/pipeline/orm_test.go: `t.Run("when there are no runs to prune, does nothing", func(t *testing.T) {
ctx := tests.Context(t)
porm.Prune(ctx, jobID)
// no error logs; it did nothing
assert.Empty(t, observed.All())
})`
$DIR/core/services/pipeline/orm_test.go: `porm.Prune(ctx, jobID)`
$DIR/core/services/pipeline/orm_test.go: `_, err = db.Exec(`SET CONSTRAINTS fk_pipeline_runs_pruning_key DEFERRED`)`
$DIR/core/services/pipeline/orm_test.go: `cltest.MustInsertPipelineRunWithStatus(t, db, ps1.ID, pipeline.RunStatusCompleted, jobID)`
$DIR/core/services/pipeline/orm_test.go: `cltest.MustInsertPipelineRunWithStatus(t, db, ps2.ID, pipeline.RunStatusCompleted, jobID2)`
$DIR/core/services/pipeline/orm_test.go: `cltest.MustInsertPipelineRunWithStatus(t, db, ps2.ID, pipeline.RunStatusErrored, jobID2)`
$DIR/core/services/pipeline/orm_test.go: `cltest.MustInsertPipelineRunWithStatus(t, db, ps2.ID, pipeline.RunStatusRunning, jobID2)`
$DIR/core/services/pipeline/orm_test.go: `cltest.MustInsertPipelineRunWithStatus(t, db, ps2.ID, pipeline.RunStatusSuspended, jobID2)`
$DIR/core/services/pipeline/orm_test.go: `porm.Prune(tests.Context(t), jobID2)`
$DIR/core/services/pipeline/orm_test.go: `cnt = pgtest.MustCount(t, db, "SELECT count(*) FROM pipeline_runs WHERE pipeline_spec_id = $1 AND state = $2", ps2.ID, pipeline.RunStatusCompleted)`
$DIR/core/services/pipeline/orm_test.go: `cnt = pgtest.MustCount(t, db, "SELECT count(*) FROM pipeline_runs WHERE pipeline_spec_id = $1 AND state = $2", ps2.ID, pipeline.RunStatusErrored)`
$DIR/core/services/pipeline/orm_test.go: `cnt = pgtest.MustCount(t, db, "SELECT count(*) FROM pipeline_runs WHERE pipeline_spec_id = $1 AND state = $2", ps2.ID, pipeline.RunStatusRunning)`
$DIR/core/services/pipeline/orm_test.go: `cnt = pgtest.MustCount(t, db, "SELECT count(*) FROM pipeline_runs WHERE pipeline_spec_id = $1 AND state = $2", ps2.ID, pipeline.RunStatusSuspended)`
$DIR/core/services/pipeline/orm_test.go: `.Context(t)`
$DIR/core/services/pipeline/orm_test.go: `.Interval(1 * time.Minute)`
$DIR/core/services/pipeline/orm_test.go: `.CreateSpec(ctx, p, maxTaskDuration)`
$DIR/core/services/pipeline/orm_test.go: `.Get(&actual, "SELECT * FROM pipeline_specs WHERE pipeline_specs.id = $1", id)`
$DIR/core/services/pipeline/orm_test.go: `.Exec(`SET CONSTRAINTS fk_pipeline_runs_pruning_key DEFERRED`)`
$DIR/core/services/pipeline/orm_test.go: `.Exec(`SET CONSTRAINTS pipeline_runs_pipeline_spec_id_fkey DEFERRED`)`
$DIR/core/services/pipeline/orm_test.go: `.Context(t)`
$DIR/core/services/pipeline/orm_test.go: `.FindRun(ctx, expected.ID)`
$DIR/core/services/pipeline/orm_test.go: `.Context(t)`
$DIR/core/services/pipeline/orm_test.go: `.Exec(`SET CONSTRAINTS fk_pipeline_runs_pruning_key DEFERRED`)`
$DIR/core/services/pipeline/orm_test.go: `.Exec(`SET CONSTRAINTS pipeline_runs_pipeline_spec_id_fkey DEFERRED`)`
$DIR/core/services/pipeline/orm_test.go: `.MustInsertPipelineSpec(t, db)`
$DIR/core/services/pipeline/orm_test.go: `.Now()`
$DIR/core/services/pipeline/orm_test.go: `.New()`
$DIR/core/services/pipeline/orm_test.go: `.TimeFrom(now.Add(100 * time.Millisecond))`
$DIR/core/services/pipeline/orm_test.go: `.Add(100 * time.Millisecond)`
$DIR/core/services/pipeline/orm_test.go: `.New()`
$DIR/core/services/pipeline/orm_test.go: `.TimeFrom(now.Add(200 * time.Millisecond))`
$DIR/core/services/pipeline/orm_test.go: `.Add(200 * time.Millisecond)`
$DIR/core/services/pipeline/orm_test.go: `.TimeFrom(now.Add(300 * time.Millisecond))`
$DIR/core/services/pipeline/orm_test.go: `.Add(300 * time.Millisecond)`
$DIR/core/services/pipeline/orm_test.go: `.NewString("", false)`
$DIR/core/services/pipeline/orm_test.go: `.InsertFinishedRuns(ctx, runs, true)`
$DIR/core/services/pipeline/orm_test.go: `.Context(t)`
$DIR/core/services/pipeline/orm_test.go: `.Interval(1 * time.Minute)`
$DIR/core/services/pipeline/orm_test.go: `.NewEIP55Address()`
$DIR/core/services/pipeline/orm_test.go: `.CreateJob(ctx, &jb)`
$DIR/core/services/pipeline/orm_test.go: `.Now()`
$DIR/core/services/pipeline/orm_test.go: `.Interval(1 * time.Minute)`
$DIR/core/services/pipeline/orm_test.go: `.Name.ValueOrZero()`
$DIR/core/services/pipeline/orm_test.go: `.Name.ValueOrZero()`
$DIR/core/services/pipeline/orm_test.go: `.Now()`
$DIR/core/services/pipeline/orm_test.go: `.NewRun(spec, pipeline.NewVarsFrom(defaultVars))`
$DIR/core/services/pipeline/orm_test.go: `.NewVarsFrom(defaultVars)`
$DIR/core/services/pipeline/orm_test.go: `.New()`
$DIR/core/services/pipeline/orm_test.go: `.TimeFrom(now.Add(100 * time.Millisecond))`
$DIR/core/services/pipeline/orm_test.go: `.Add(100 * time.Millisecond)`
$DIR/core/services/pipeline/orm_test.go: `.New()`
$DIR/core/services/pipeline/orm_test.go: `.TimeFrom(now.Add(200 * time.Millisecond))`
$DIR/core/services/pipeline/orm_test.go: `.Add(200 * time.Millisecond)`
$DIR/core/services/pipeline/orm_test.go: `.TimeFrom(now.Add(300 * time.Millisecond))`
$DIR/core/services/pipeline/orm_test.go: `.Add(300 * time.Millisecond)`
$DIR/core/services/pipeline/orm_test.go: `.NewString("", false)`
$DIR/core/services/pipeline/orm_test.go: `.InsertFinishedRunWithSpec(ctx, run, true)`
$DIR/core/services/pipeline/orm_test.go: `.Get(&pipelineSpec, "SELECT pipeline_specs.* FROM pipeline_specs JOIN job_pipeline_specs ON (pipeline_specs.id = job_pipeline_specs.pipeline_spec_id) WHERE job_pipeline_specs.job_id = $1 AND pipeline_specs.id = $2", jb.ID, run.PipelineSpecID)`
$DIR/core/services/pipeline/orm_test.go: `.Get(&jobPipelineSpec, "SELECT * FROM job_pipeline_specs WHERE job_id = $1 AND pipeline_spec_id = $2", jb.ID, pipelineSpec.ID)`
$DIR/core/services/pipeline/orm_test.go: `.Context(t)`
$DIR/core/services/pipeline/orm_test.go: `.Now()`
$DIR/core/services/pipeline/orm_test.go: `.New()`
$DIR/core/services/pipeline/orm_test.go: `.New()`
$DIR/core/services/pipeline/orm_test.go: `.TimeFrom(now)`
$DIR/core/services/pipeline/orm_test.go: `.StoreRun(ctx, run)`
$DIR/core/services/pipeline/orm_test.go: `.FindRun(ctx, run.ID)`
$DIR/core/services/pipeline/orm_test.go: `.ByDotID("ds1")`
$DIR/core/services/pipeline/orm_test.go: `.New()`
$DIR/core/services/pipeline/orm_test.go: `.TimeFrom(now)`
$DIR/core/services/pipeline/orm_test.go: `.StoreRun(ctx, run)`
$DIR/core/services/pipeline/orm_test.go: `.FindRun(ctx, run.ID)`
$DIR/core/services/pipeline/orm_test.go: `.ByDotID("ds1")`
$DIR/core/services/pipeline/orm_test.go: `.Context(t)`
$DIR/core/services/pipeline/orm_test.go: `.FindRun(ctx, run.ID)`
$DIR/core/services/pipeline/orm_test.go: `.Now()`
$DIR/core/services/pipeline/orm_test.go: `.New()`
$DIR/core/services/pipeline/orm_test.go: `.NamedQuery(`
INSERT INTO pipeline_task_runs (pipeline_run_id, id, type, index, output, error, dot_id, created_at, finished_at)
VALUES (:pipeline_run_id, :id, :type, :index, :output, :error, :dot_id, :created_at, :finished_at)
`, pipeline.TaskRun{
ID: ds1_id,
PipelineRunID: run.ID,
Type: "bridge",
DotID: "ds1",
Output: jsonserializable.JSONSerializable{Val: 2, Valid: true},
CreatedAt: now,
FinishedAt: null.TimeFrom(now),
})`
$DIR/core/services/pipeline/orm_test.go: `.TimeFrom(now)`
$DIR/core/services/pipeline/orm_test.go: `.Cleanup(func() { assert.NoError(t, rows.Close()) })`
$DIR/core/services/pipeline/orm_test.go: `.New()`
$DIR/core/services/pipeline/orm_test.go: `.TimeFrom(now)`
$DIR/core/services/pipeline/orm_test.go: `.StoreRun(ctx, run)`
$DIR/core/services/pipeline/orm_test.go: `.ByDotID("ds1")`
$DIR/core/services/pipeline/orm_test.go: `.Context(t)`
$DIR/core/services/pipeline/orm_test.go: `.New()`
$DIR/core/services/pipeline/orm_test.go: `.Now()`
$DIR/core/services/pipeline/orm_test.go: `.DecodeString("0x8bd112d3f8f92e41c861939545ad387307af9703")`
$DIR/core/services/pipeline/orm_test.go: `.New()`
$DIR/core/services/pipeline/orm_test.go: `.TimeFrom(now)`
$DIR/core/services/pipeline/orm_test.go: `.New()`
$DIR/core/services/pipeline/orm_test.go: `.TimeFrom(now)`
$DIR/core/services/pipeline/orm_test.go: `.StoreRun(ctx, run)`
$DIR/core/services/pipeline/orm_test.go: `.UpdateTaskRunResult(ctx, ds1_id, pipeline.Result{Value: "foo"})`
$DIR/core/services/pipeline/orm_test.go: `.ByDotID("ds1")`
$DIR/core/services/pipeline/orm_test.go: `.ByDotID("ds2")`
$DIR/core/services/pipeline/orm_test.go: `.Context(t)`
$DIR/core/services/pipeline/orm_test.go: `.Now()`
$DIR/core/services/pipeline/orm_test.go: `.New()`
$DIR/core/services/pipeline/orm_test.go: `.New()`
$DIR/core/services/pipeline/orm_test.go: `.TimeFrom(now)`
$DIR/core/services/pipeline/orm_test.go: `.StoreRun(ctx, run)`
$DIR/core/services/pipeline/orm_test.go: `.DeleteRun(ctx, run.ID)`
$DIR/core/services/pipeline/orm_test.go: `.FindRun(ctx, run.ID)`
$DIR/core/services/pipeline/orm_test.go: `.Context(t)`
$DIR/core/services/pipeline/orm_test.go: `.Now()`
$DIR/core/services/pipeline/orm_test.go: `.New()`
$DIR/core/services/pipeline/orm_test.go: `.TimeFrom(now.Add(-1 * time.Second))`
$DIR/core/services/pipeline/orm_test.go: `.Add(-1 * time.Second)`
$DIR/core/services/pipeline/orm_test.go: `.TimeFrom(now.Add(-1 * time.Second))`
$DIR/core/services/pipeline/orm_test.go: `.Add(-1 * time.Second)`
$DIR/core/services/pipeline/orm_test.go: `.StringFrom("SOMETHING")`
$DIR/core/services/pipeline/orm_test.go: `.StoreRun(ctx, run)`
$DIR/core/services/pipeline/orm_test.go: `.DeleteRunsOlderThan(testutils.Context(t), 1*time.Second)`
$DIR/core/services/pipeline/orm_test.go: `.Context(t)`
$DIR/core/services/pipeline/orm_test.go: `.FindRun(ctx, runId)`
$DIR/core/services/pipeline/orm_test.go: `.Context(t)`
$DIR/core/services/pipeline/orm_test.go: `.NewTestGeneralConfig(t)`
$DIR/core/services/pipeline/orm_test.go: `.TestLogger(t)`
$DIR/core/services/pipeline/orm_test.go: `.NewSqlxDB(t)`
$DIR/core/services/pipeline/orm_test.go: `.NewKeyStore(t, db)`
$DIR/core/services/pipeline/orm_test.go: `.NewORM(db, lggr, config.JobPipeline().MaxSuccessfulRuns())`
$DIR/core/services/pipeline/orm_test.go: `.JobPipeline()`
$DIR/core/services/pipeline/orm_test.go: `.MaxSuccessfulRuns()`
$DIR/core/services/pipeline/orm_test.go: `.NewORM(db)`
$DIR/core/services/pipeline/orm_test.go: `.NewORM(db, porm, bridgeORM, keyStore, lggr)`
$DIR/core/services/pipeline/orm_test.go: `.Now()`
$DIR/core/services/pipeline/orm_test.go: `.NewEIP55Address()`
$DIR/core/services/pipeline/orm_test.go: `.NewEIP55Address()`
$DIR/core/services/pipeline/orm_test.go: `.MustParse("0EEC7E1D-D0D2-476C-A1A8-72DFB6633F46")`
$DIR/core/services/pipeline/orm_test.go: `.StringFrom("test")`
$DIR/core/services/pipeline/orm_test.go: `.Interval(1 * time.Minute)`
$DIR/core/services/pipeline/orm_test.go: `.CreateJob(ctx, &keeperJob)`
$DIR/core/services/pipeline/orm_test.go: `.New()`
$DIR/core/services/pipeline/orm_test.go: `.New()`
$DIR/core/services/pipeline/orm_test.go: `.CreateRun(ctx, &pipeline.Run{
PipelineSpecID: keeperJob.PipelineSpecID,
PruningKey: keeperJob.ID,
State: pipeline.RunStatusRunning,
Outputs: jsonserializable.JSONSerializable{},
CreatedAt: time.Now(),
PipelineTaskRuns: []pipeline.TaskRun{{
ID: runID1,
Type: pipeline.TaskTypeETHTx,
Index: 0,
Output: jsonserializable.JSONSerializable{},
CreatedAt: time.Now(),
DotID: "perform_upkeep_tx",
}},
})`
$DIR/core/services/pipeline/orm_test.go: `.Now()`
$DIR/core/services/pipeline/orm_test.go: `.Now()`
$DIR/core/services/pipeline/orm_test.go: `.CreateRun(ctx, &pipeline.Run{
PipelineSpecID: keeperJob.PipelineSpecID,
PruningKey: keeperJob.ID,
State: pipeline.RunStatusRunning,
Outputs: jsonserializable.JSONSerializable{},
CreatedAt: time.Now(),
PipelineTaskRuns: []pipeline.TaskRun{{
ID: runID2,
Type: pipeline.TaskTypeETHCall,
Index: 1,
Output: jsonserializable.JSONSerializable{},
CreatedAt: time.Now(),
DotID: "check_upkeep_tx",
}},
})`
$DIR/core/services/pipeline/orm_test.go: `.Now()`
$DIR/core/services/pipeline/orm_test.go: `.Now()`
$DIR/core/services/pipeline/orm_test.go: `.GetUnfinishedRuns(testutils.Context(t), time.Now(), func(run pipeline.Run) error {
counter++
require.Equal(t, job.Keeper.String(), run.PipelineSpec.JobType)
require.Equal(t, pipeline.KeepersObservationSource, run.PipelineSpec.DotDagSource)
require.NotEmpty(t, run.PipelineTaskRuns)
switch run.PipelineTaskRuns[0].ID {
case runID1:
trun := run.ByDotID("perform_upkeep_tx")
require.NotNil(t, trun)
case runID2:
trun := run.ByDotID("check_upkeep_tx")
require.NotNil(t, trun)
}
return nil
})`
$DIR/core/services/pipeline/orm_test.go: `.Context(t)`
$DIR/core/services/pipeline/orm_test.go: `.Now()`
$DIR/core/services/pipeline/orm_test.go: `.ByDotID("perform_upkeep_tx")`
$DIR/core/services/pipeline/orm_test.go: `.ByDotID("check_upkeep_tx")`
$DIR/core/services/pipeline/orm_test.go: `.Context(t)`
$DIR/core/services/pipeline/orm_test.go: `.NewTestGeneralConfig(t)`
$DIR/core/services/pipeline/orm_test.go: `.TestLogger(t)`
$DIR/core/services/pipeline/orm_test.go: `.NewSqlxDB(t)`
$DIR/core/services/pipeline/orm_test.go: `.NewKeyStore(t, db)`
$DIR/core/services/pipeline/orm_test.go: `.NewORM(db, lggr, config.JobPipeline().MaxSuccessfulRuns())`
$DIR/core/services/pipeline/orm_test.go: `.JobPipeline()`
$DIR/core/services/pipeline/orm_test.go: `.MaxSuccessfulRuns()`
$DIR/core/services/pipeline/orm_test.go: `.NewORM(db)`
$DIR/core/services/pipeline/orm_test.go: `.NewORM(db, porm, bridgeORM, keyStore, lggr)`
$DIR/core/services/pipeline/orm_test.go: `.Now()`
$DIR/core/services/pipeline/orm_test.go: `.NewEIP55Address()`
$DIR/core/services/pipeline/orm_test.go: `.MustParse("0EEC7E1D-D0D2-476C-A1A8-72DFB6633F46")`
$DIR/core/services/pipeline/orm_test.go: `.StringFrom("test")`
$DIR/core/services/pipeline/orm_test.go: `.Interval(1 * time.Minute)`
$DIR/core/services/pipeline/orm_test.go: `.CreateJob(ctx, &drJob)`
$DIR/core/services/pipeline/orm_test.go: `.New()`
$DIR/core/services/pipeline/orm_test.go: `.CreateRun(ctx, &pipeline.Run{
PipelineSpecID: drJob.PipelineSpecID,
PruningKey: drJob.ID,
State: pipeline.RunStatusRunning,
Outputs: jsonserializable.JSONSerializable{},
CreatedAt: time.Now(),
PipelineTaskRuns: []pipeline.TaskRun{{
ID: runningID,
Type: pipeline.TaskTypeHTTP,
Index: 0,
Output: jsonserializable.JSONSerializable{},
CreatedAt: time.Now(),
DotID: "ds1",
}},
})`
$DIR/core/services/pipeline/orm_test.go: `.Now()`
$DIR/core/services/pipeline/orm_test.go: `.Now()`
$DIR/core/services/pipeline/orm_test.go: `.CreateRun(ctx, &pipeline.Run{
PipelineSpecID: drJob.PipelineSpecID,
PruningKey: drJob.ID,
State: pipeline.RunStatusSuspended,
Outputs: jsonserializable.JSONSerializable{},
CreatedAt: time.Now(),
PipelineTaskRuns: []pipeline.TaskRun{{
ID: uuid.New(),
Type: pipeline.TaskTypeHTTP,
Index: 1,
Output: jsonserializable.JSONSerializable{},
CreatedAt: time.Now(),
DotID: "ds1",
}},
})`
$DIR/core/services/pipeline/orm_test.go: `.Now()`
$DIR/core/services/pipeline/orm_test.go: `.New()`
$DIR/core/services/pipeline/orm_test.go: `.Now()`
$DIR/core/services/pipeline/orm_test.go: `.GetUnfinishedRuns(testutils.Context(t), time.Now(), func(run pipeline.Run) error {
counter++
require.Equal(t, job.DirectRequest.String(), run.PipelineSpec.JobType)
require.NotEmpty(t, run.PipelineTaskRuns)
require.Equal(t, runningID, run.PipelineTaskRuns[0].ID)
trun := run.ByDotID("ds1")
require.NotNil(t, trun)
return nil
})`
$DIR/core/services/pipeline/orm_test.go: `.Context(t)`
$DIR/core/services/pipeline/orm_test.go: `.Now()`
$DIR/core/services/pipeline/orm_test.go: `.ByDotID("ds1")`
$DIR/core/services/pipeline/orm_test.go: `.NewGeneralConfig(t, func(c *chainlink.Config, s *chainlink.Secrets) {
c.JobPipeline.MaxSuccessfulRuns = &n
})`
$DIR/core/services/pipeline/orm_test.go: `.TestLoggerObserved(t, zapcore.DebugLevel)`
$DIR/core/services/pipeline/orm_test.go: `.NewSqlxDB(t)`
$DIR/core/services/pipeline/orm_test.go: `.NewORM(db, lggr, cfg.JobPipeline().MaxSuccessfulRuns())`
$DIR/core/services/pipeline/orm_test.go: `.JobPipeline()`
$DIR/core/services/pipeline/orm_test.go: `.MaxSuccessfulRuns()`
$DIR/core/services/pipeline/orm_test.go: `.MustInsertPipelineSpec(t, db)`
$DIR/core/services/pipeline/orm_test.go: `.AddJobPipelineSpecWithoutConstraints(testutils.Context(t), ps1.ID, ps1.ID)`
$DIR/core/services/pipeline/orm_test.go: `.Context(t)`
$DIR/core/services/pipeline/orm_test.go: `.Run("when there are no runs to prune, does nothing", func(t *testing.T) {
ctx := tests.Context(t)
porm.Prune(ctx, jobID)
// no error logs; it did nothing
assert.Empty(t, observed.All())
})`
$DIR/core/services/pipeline/orm_test.go: `.Context(t)`
$DIR/core/services/pipeline/orm_test.go: `.Prune(ctx, jobID)`
$DIR/core/services/pipeline/orm_test.go: `.Exec(`SET CONSTRAINTS fk_pipeline_runs_pruning_key DEFERRED`)`
$DIR/core/services/pipeline/orm_test.go: `.MustInsertPipelineRunWithStatus(t, db, ps1.ID, pipeline.RunStatusCompleted, jobID)`
$DIR/core/services/pipeline/orm_test.go: `.MustInsertPipelineSpec(t, db)`
$DIR/core/services/pipeline/orm_test.go: `.MustInsertPipelineRunWithStatus(t, db, ps2.ID, pipeline.RunStatusCompleted, jobID2)`
$DIR/core/services/pipeline/orm_test.go: `.MustInsertPipelineRunWithStatus(t, db, ps2.ID, pipeline.RunStatusErrored, jobID2)`
$DIR/core/services/pipeline/orm_test.go: `.MustInsertPipelineRunWithStatus(t, db, ps2.ID, pipeline.RunStatusRunning, jobID2)`
$DIR/core/services/pipeline/orm_test.go: `.MustInsertPipelineRunWithStatus(t, db, ps2.ID, pipeline.RunStatusSuspended, jobID2)`
$DIR/core/services/pipeline/orm_test.go: `.Prune(tests.Context(t), jobID2)`
$DIR/core/services/pipeline/orm_test.go: `.Context(t)`
$DIR/core/services/pipeline/orm_test.go: `.MustCount(t, db, "SELECT count(*) FROM pipeline_runs WHERE pipeline_spec_id = $1 AND state = $2", ps1.ID, pipeline.RunStatusCompleted)`
$DIR/core/services/pipeline/orm_test.go: `.MustCount(t, db, "SELECT count(*) FROM pipeline_runs WHERE pipeline_spec_id = $1 AND state = $2", ps2.ID, pipeline.RunStatusCompleted)`
$DIR/core/services/pipeline/orm_test.go: `.MustCount(t, db, "SELECT count(*) FROM pipeline_runs WHERE pipeline_spec_id = $1 AND state = $2", ps2.ID, pipeline.RunStatusErrored)`
$DIR/core/services/pipeline/orm_test.go: `.MustCount(t, db, "SELECT count(*) FROM pipeline_runs WHERE pipeline_spec_id = $1 AND state = $2", ps2.ID, pipeline.RunStatusRunning)`
$DIR/core/services/pipeline/orm_test.go: `.MustCount(t, db, "SELECT count(*) FROM pipeline_runs WHERE pipeline_spec_id = $1 AND state = $2", ps2.ID, pipeline.RunStatusSuspended)`
$DIR/core/services/pipeline/runner_test.go: `btORM.On("FindBridge", mock.Anything, bt.Name).Return(*bt, nil).Once()`
$DIR/core/services/pipeline/runner_test.go: `errorResults = append(errorResults, trr)`
$DIR/core/services/pipeline/runner_test.go: `t.Run(test.name, func(t *testing.T) {
t.Parallel()
db := pgtest.NewSqlxDB(t)
cfg := configtest.NewTestGeneralConfig(t)
expectedRequestDS1 := map[string]interface{}{"data": test.vars["foo"]}
expectedRequestDS2 := map[string]interface{}{"data": []interface{}{test.vars["bar"], test.vars["baz"]}}
expectedRequestSubmit := map[string]interface{}{
"median": "9650000000000000000000",
"fetchedValues": []interface{}{"9700", "9600"},
"someString": "some random string",
}
if test.meta != nil {
expectedRequestDS1["meta"] = test.meta
expectedRequestSubmit["meta"] = test.meta
test.vars["jobRun"] = map[string]interface{}{"meta": test.meta}
}
if test.includeInputAtKey != "" {
expectedRequestSubmit[test.includeInputAtKey] = "9650000000000000000000"
}
btORM := bridgesMocks.NewORM(t)
// 1. Setup bridge
ds1, bridge := makeBridge(t, db, expectedRequestDS1, map[string]interface{}{
"data": map[string]interface{}{
"result": map[string]interface{}{
"result": decimal.NewFromInt(9700),
"times": "1000000000000000000",
},
},
})
defer ds1.Close()
btORM.On("FindBridge", mock.Anything, bridge.Name).Return(bridge, nil).Once()
// 2. Setup success HTTP
ds2 := httptest.NewServer(fakeExternalAdapter(t, expectedRequestDS2, map[string]interface{}{
"data": map[string]interface{}{
"result": decimal.NewFromInt(9600),
"times": "1000000000000000000",
},
}))
defer ds2.Close()
ds4 := httptest.NewServer(fakeStringResponder(t, "some random string"))
defer ds4.Close()
// 3. Setup final bridge task
submit, submitBt := makeBridge(t, db, expectedRequestSubmit, map[string]interface{}{"ok": true})
defer submit.Close()
btORM.On("FindBridge", mock.Anything, submitBt.Name).Return(submitBt, nil).Once()
runner, _ := newRunner(t, db, btORM, cfg)
specStr := taskRunWithVars{
bridgeName: bridge.Name.String(),
ds2URL: ds2.URL,
ds4URL: ds4.URL,
submitBridgeName: submitBt.Name.String(),
includeInputAtKey: test.includeInputAtKey,
}.String()
p, err := pipeline.Parse(specStr)
require.NoError(t, err)
spec := pipeline.Spec{
DotDagSource: specStr,
}
_, taskRunResults, err := runner.ExecuteRun(testutils.Context(t), spec, pipeline.NewVarsFrom(test.vars), logger.TestLogger(t))
require.NoError(t, err)
require.Len(t, taskRunResults, len(p.Tasks))
expectedResults := map[string]pipeline.Result{
"ds1": {Value: `{"data":{"result":{"result":"9700","times":"1000000000000000000"}}}` + "\n"},
"ds1_parse": {Value: map[string]interface{}{"result": "9700", "times": "1000000000000000000"}},
"ds1_multiply": {Value: *mustDecimal(t, "9700000000000000000000")},
"ds2": {Value: `{"data":{"result":"9600","times":"1000000000000000000"}}` + "\n"},
"ds2_parse": {Value: map[string]interface{}{"result": "9600", "times": "1000000000000000000"}},
"ds2_multiply": {Value: *mustDecimal(t, "9600000000000000000000")},
"ds3": {Error: errors.New(`error making http request: Post "blah://test.invalid": unsupported protocol scheme "blah"`)},
"ds3_parse": {Error: pipeline.ErrTooManyErrors},
"ds3_multiply": {Error: pipeline.ErrTooManyErrors},
"ds4": {Value: "some random string"},
"median": {Value: *mustDecimal(t, "9650000000000000000000")},
"submit": {Value: `{"ok":true}` + "\n"},
}
for _, r := range taskRunResults {
expected := expectedResults[r.Task.DotID()]
if expected.Error != nil {
require.Error(t, r.Result.Error)
require.Contains(t, r.Result.Error.Error(), expected.Error.Error())
} else {
if d, is := expected.Value.(decimal.Decimal); is {
require.Equal(t, d.String(), r.Result.Value.(decimal.Decimal).String())
} else {
require.Equal(t, expected.Value, r.Result.Value)
}
}
}
})`
$DIR/core/services/pipeline/runner_test.go: `expectedRequestDS1["meta"] = test.meta`
$DIR/core/services/pipeline/runner_test.go: `expectedRequestSubmit["meta"] = test.meta`
$DIR/core/services/pipeline/runner_test.go: `test.vars["jobRun"] = map[string]interface{}{"meta": test.meta}`
$DIR/core/services/pipeline/runner_test.go: `expectedRequestSubmit[test.includeInputAtKey] = "9650000000000000000000"`
$DIR/core/services/pipeline/runner_test.go: `btORM.On("FindBridge", mock.Anything, bridge.Name).Return(bridge, nil).Once()`
$DIR/core/services/pipeline/runner_test.go: `btORM.On("FindBridge", mock.Anything, submitBt.Name).Return(submitBt, nil).Once()`
$DIR/core/services/pipeline/runner_test.go: `t.Run("diet mode, empty CBOR", func(t *testing.T) {
s := CBORDietEmpty
d, err := pipeline.Parse(s)
require.NoError(t, err)
spec := pipeline.Spec{DotDagSource: s}
global := make(map[string]interface{})
jobRun := make(map[string]interface{})
global["jobRun"] = jobRun
jobRun["logData"] = hexutil.MustDecode("0x0000000000000000000000009c26cc46f57667cba75556014c8e0d5ed7c5b83d17a526ff5d8f916fa2f4a218f6ce0a6e410a0d7823f8238979f8579c2145fd6f0000000000000000000000000000000000000000000000000de0b6b3a76400000000000000000000000000009c26cc46f57667cba75556014c8e0d5ed7c5b83d64ef935700000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000006148ef28000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000000")
jobRun["logTopics"] = []common.Hash{
common.HexToHash("0xd8d7ecc4800d25fa53ce0372f13a416d98907a7ef3d8d3bdd79cf4fe75529c65"),
common.HexToHash("0x3963386131316165393962363463373161663333376235643831633737353230"),
}
vars := pipeline.NewVarsFrom(global)
lggr := logger.TestLogger(t)
_, trrs, err := r.ExecuteRun(testutils.Context(t), spec, vars, lggr)
require.NoError(t, err)
require.Len(t, trrs, len(d.Tasks))
finalResults := trrs.FinalResult(lggr)
require.Len(t, finalResults.Values, 1)
assert.Equal(t, make(map[string]interface{}), finalResults.Values[0])
require.Len(t, finalResults.FatalErrors, 1)
assert.Nil(t, finalResults.FatalErrors[0])
})`
$DIR/core/services/pipeline/runner_test.go: `global["jobRun"] = jobRun`
$DIR/core/services/pipeline/runner_test.go: `jobRun["logData"] = hexutil.MustDecode("0x0000000000000000000000009c26cc46f57667cba75556014c8e0d5ed7c5b83d17a526ff5d8f916fa2f4a218f6ce0a6e410a0d7823f8238979f8579c2145fd6f0000000000000000000000000000000000000000000000000de0b6b3a76400000000000000000000000000009c26cc46f57667cba75556014c8e0d5ed7c5b83d64ef935700000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000006148ef28000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000000")`
$DIR/core/services/pipeline/runner_test.go: `jobRun["logTopics"] = []common.Hash{
common.HexToHash("0xd8d7ecc4800d25fa53ce0372f13a416d98907a7ef3d8d3bdd79cf4fe75529c65"),
common.HexToHash("0x3963386131316165393962363463373161663333376235643831633737353230"),
}`
$DIR/core/services/pipeline/runner_test.go: `global["jobRun"] = jobRun`
$DIR/core/services/pipeline/runner_test.go: `jobRun["logData"] = hexutil.MustDecode("0x0000000000000000000000009c26cc46f57667cba75556014c8e0d5ed7c5b83d17a526ff5d8f916fa2f4a218f6ce0a6e410a0d7823f8238979f8579c2145fd6f0000000000000000000000000000000000000000000000000de0b6b3a76400000000000000000000000000009c26cc46f57667cba75556014c8e0d5ed7c5b83d64ef935700000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000006148ef2800000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000000463666F6F00000000000000000000000000000000000000000000000000000000")`
$DIR/core/services/pipeline/runner_test.go: `jobRun["logTopics"] = []common.Hash{
common.HexToHash("0xd8d7ecc4800d25fa53ce0372f13a416d98907a7ef3d8d3bdd79cf4fe75529c65"),
common.HexToHash("0x3963386131316165393962363463373161663333376235643831633737353230"),
}`
$DIR/core/services/pipeline/runner_test.go: `time.Sleep(100 * time.Millisecond)`
$DIR/core/services/pipeline/runner_test.go: `res.WriteHeader(http.StatusOK)`
$DIR/core/services/pipeline/runner_test.go: `res.WriteHeader(http.StatusOK)`
$DIR/core/services/pipeline/runner_test.go: `orm.On("InsertFinishedRun", mock.Anything, mock.Anything, mock.Anything).
Run(func(args mock.Arguments) {
args.Get(1).(*pipeline.Run).ID = 1
}).
Return(nil)`
$DIR/core/services/pipeline/runner_test.go: `args.Get(1).(*pipeline.Run).ID = 1`
$DIR/core/services/pipeline/runner_test.go: `orm.On("InsertFinishedRunWithSpec", mock.Anything, mock.Anything, mock.Anything).
Run(func(args mock.Arguments) {
args.Get(1).(*pipeline.Run).ID = 1
}).
Return(nil)`
$DIR/core/services/pipeline/runner_test.go: `args.Get(1).(*pipeline.Run).ID = 1`
$DIR/core/services/pipeline/runner_test.go: `err = json.Unmarshal(payload, &reqBody)`
$DIR/core/services/pipeline/runner_test.go: `w.Header().Set("Content-Type", "application/json")`
$DIR/core/services/pipeline/runner_test.go: `w.Header().Set("X-Chainlink-Pending", "true")`
$DIR/core/services/pipeline/runner_test.go: `btORM.On("FindBridge", mock.Anything, bt.Name).Return(*bt, nil)`
$DIR/core/services/pipeline/runner_test.go: `transactCall.Run(func(args mock.Arguments) {
fn := args[1].(func(orm pipeline.ORM) error)
transactCall.ReturnArguments = mock.Arguments{fn(orm)}
})`
$DIR/core/services/pipeline/runner_test.go: `transactCall.ReturnArguments = mock.Arguments{fn(orm)}`
$DIR/core/services/pipeline/runner_test.go: `_, err = pipeline.Parse(s)`
$DIR/core/services/pipeline/runner_test.go: `orm.On("CreateRun", mock.Anything, mock.AnythingOfType("*pipeline.Run")).Return(nil).Run(func(args mock.Arguments) {
run := args.Get(1).(*pipeline.Run)
run.ID = 1 // give it a valid "id"
}).Once()`
$DIR/core/services/pipeline/runner_test.go: `run.ID = 1`
$DIR/core/services/pipeline/runner_test.go: `orm.On("StoreRun", mock.Anything, mock.AnythingOfType("*pipeline.Run")).Return(false, nil).Once()`
$DIR/core/services/pipeline/runner_test.go: `orm.On("StoreRun", mock.Anything, mock.AnythingOfType("*pipeline.Run")).Return(false, nil).Once()`
$DIR/core/services/pipeline/runner_test.go: `incomplete, err = r.Run(testutils.Context(t), run, lggr, false, nil)`
$DIR/core/services/pipeline/runner_test.go: `task.Error = null.NewString("", false)`
$DIR/core/services/pipeline/runner_test.go: `task.Output = jsonserializable.JSONSerializable{
Val: `{"data":{"result":"9700"}}` + "\n",
Valid: true,
}`
$DIR/core/services/pipeline/runner_test.go: `orm.On("StoreRun", mock.Anything, mock.AnythingOfType("*pipeline.Run")).Return(false, nil).Once()`
$DIR/core/services/pipeline/runner_test.go: `incomplete, err = r.Run(testutils.Context(t), run, lggr, false, nil)`
$DIR/core/services/pipeline/runner_test.go: `errorResults = append(errorResults, trr)`
$DIR/core/services/pipeline/runner_test.go: `err = json.Unmarshal(payload, &reqBody)`
$DIR/core/services/pipeline/runner_test.go: `w.Header().Set("Content-Type", "application/json")`
$DIR/core/services/pipeline/runner_test.go: `w.Header().Set("X-Chainlink-Pending", "true")`
$DIR/core/services/pipeline/runner_test.go: `btORM.On("FindBridge", mock.Anything, bt.Name).Return(*bt, nil)`
$DIR/core/services/pipeline/runner_test.go: `transactCall.Run(func(args mock.Arguments) {
fn := args[1].(func(orm pipeline.ORM) error)
transactCall.ReturnArguments = mock.Arguments{fn(orm)}
})`
$DIR/core/services/pipeline/runner_test.go: `transactCall.ReturnArguments = mock.Arguments{fn(orm)}`
$DIR/core/services/pipeline/runner_test.go: `_, err = pipeline.Parse(s)`
$DIR/core/services/pipeline/runner_test.go: `orm.On("CreateRun", mock.Anything, mock.AnythingOfType("*pipeline.Run")).Return(nil).Run(func(args mock.Arguments) {
run := args.Get(1).(*pipeline.Run)
run.ID = 1 // give it a valid "id"
}).Once()`
$DIR/core/services/pipeline/runner_test.go: `run.ID = 1`
$DIR/core/services/pipeline/runner_test.go: `orm.On("StoreRun", mock.Anything, mock.AnythingOfType("*pipeline.Run")).Return(true, nil).Run(func(args mock.Arguments) {
run := args.Get(1).(*pipeline.Run)
// Now simulate a new result coming in while we were running
task := run.ByDotID("ds1")
task.Error = null.NewString("", false)
task.Output = jsonserializable.JSONSerializable{
Val: `{"data":{"result":"9700"}}` + "\n",
Valid: true,
}
}).Once()`
$DIR/core/services/pipeline/runner_test.go: `task.Error = null.NewString("", false)`
$DIR/core/services/pipeline/runner_test.go: `task.Output = jsonserializable.JSONSerializable{
Val: `{"data":{"result":"9700"}}` + "\n",
Valid: true,
}`
$DIR/core/services/pipeline/runner_test.go: `orm.On("StoreRun", mock.Anything, mock.AnythingOfType("*pipeline.Run")).Return(false, nil).Once()`
$DIR/core/services/pipeline/runner_test.go: `errorResults = append(errorResults, trr)`
$DIR/core/services/pipeline/runner_test.go: `spec.Pipeline, err = spec.ParsePipeline()`
$DIR/core/services/pipeline/runner_test.go: `spec.DotDagSource = fmt.Sprintf(template, 2)`
$DIR/core/services/pipeline/runner_test.go: `_, trrs, err = r.ExecuteRun(testutils.Context(t), spec, vars, lggr)`
$DIR/core/services/pipeline/runner_test.go: `.NewSqlxDB(t)`
$DIR/core/services/pipeline/runner_test.go: `.NewTestGeneralConfig(t)`
$DIR/core/services/pipeline/runner_test.go: `.MustUnmarshalToMap(`{"data":{"coin":"BTC","market":"USD"}}`)`
$DIR/core/services/pipeline/runner_test.go: `.NewServer(fakePriceResponder(t, btcUSDPairing, decimal.NewFromInt(9700), "", nil))`
$DIR/core/services/pipeline/runner_test.go: `.NewFromInt(9700)`
$DIR/core/services/pipeline/runner_test.go: `.ParseRequestURI(s1.URL)`
$DIR/core/services/pipeline/runner_test.go: `.MustCreateBridge(t, db, cltest.BridgeOpts{URL: bridgeFeedURL.String()})`
$DIR/core/services/pipeline/runner_test.go: `.String()`
$DIR/core/services/pipeline/runner_test.go: `.NewORM(t)`
$DIR/core/services/pipeline/runner_test.go: `.On("FindBridge", mock.Anything, bt.Name)`
$DIR/core/services/pipeline/runner_test.go: `.Return(*bt, nil)`
$DIR/core/services/pipeline/runner_test.go: `.Once()`
$DIR/core/services/pipeline/runner_test.go: `.NewServer(fakePriceResponder(t, btcUSDPairing, decimal.NewFromInt(9600), "", nil))`
$DIR/core/services/pipeline/runner_test.go: `.NewFromInt(9600)`
$DIR/core/services/pipeline/runner_test.go: `.NewServer(fakeStringResponder(t, "foo-index-1"))`
$DIR/core/services/pipeline/runner_test.go: `.NewServer(fakeStringResponder(t, "bar-index-2"))`
$DIR/core/services/pipeline/runner_test.go: `.Sprintf(`
ds1 [type=bridge name="%s" timeout=0 requestData=<{"data": {"coin": "BTC", "market": "USD"}}>]
ds1_parse [type=jsonparse lax=false path="data,result"]
ds1_multiply [type=multiply times=1000000000000000000]
ds2 [type=http method="GET" url="%s" requestData=<{"data": {"coin": "BTC", "market": "USD"}}>]
ds2_parse [type=jsonparse lax=false path="data,result"]
ds2_multiply [type=multiply times=1000000000000000000]
ds3 [type=http method="GET" url="blah://test.invalid" requestData=<{"data": {"coin": "BTC", "market": "USD"}}>]
ds3_parse [type=jsonparse lax=false path="data,result"]
ds3_multiply [type=multiply times=1000000000000000000]
ds1->ds1_parse->ds1_multiply->median;
ds2->ds2_parse->ds2_multiply->median;
ds3->ds3_parse->ds3_multiply->median;
median [type=median index=0]
ds4 [type=http method="GET" url="%s" index=1]
ds5 [type=http method="GET" url="%s" index=2]
`, bt.Name.String(), s2.URL, s4.URL, s5.URL)`
$DIR/core/services/pipeline/runner_test.go: `.Name.String()`
$DIR/core/services/pipeline/runner_test.go: `.Parse(s)`
$DIR/core/services/pipeline/runner_test.go: `.NewVarsFrom(nil)`
$DIR/core/services/pipeline/runner_test.go: `.TestLogger(t)`
$DIR/core/services/pipeline/runner_test.go: `.ExecuteRun(testutils.Context(t), spec, vars, lggr)`
$DIR/core/services/pipeline/runner_test.go: `.Context(t)`
$DIR/core/services/pipeline/runner_test.go: `.FinalResult(lggr)`
$DIR/core/services/pipeline/runner_test.go: `.IsTerminal()`
$DIR/core/services/pipeline/runner_test.go: `.Run(test.name, func(t *testing.T) {
t.Parallel()
db := pgtest.NewSqlxDB(t)
cfg := configtest.NewTestGeneralConfig(t)
expectedRequestDS1 := map[string]interface{}{"data": test.vars["foo"]}
expectedRequestDS2 := map[string]interface{}{"data": []interface{}{test.vars["bar"], test.vars["baz"]}}
expectedRequestSubmit := map[string]interface{}{
"median": "9650000000000000000000",
"fetchedValues": []interface{}{"9700", "9600"},
"someString": "some random string",
}
if test.meta != nil {
expectedRequestDS1["meta"] = test.meta
expectedRequestSubmit["meta"] = test.meta
test.vars["jobRun"] = map[string]interface{}{"meta": test.meta}
}
if test.includeInputAtKey != "" {
expectedRequestSubmit[test.includeInputAtKey] = "9650000000000000000000"
}
btORM := bridgesMocks.NewORM(t)
// 1. Setup bridge
ds1, bridge := makeBridge(t, db, expectedRequestDS1, map[string]interface{}{
"data": map[string]interface{}{
"result": map[string]interface{}{
"result": decimal.NewFromInt(9700),
"times": "1000000000000000000",
},
},
})
defer ds1.Close()
btORM.On("FindBridge", mock.Anything, bridge.Name).Return(bridge, nil).Once()
// 2. Setup success HTTP
ds2 := httptest.NewServer(fakeExternalAdapter(t, expectedRequestDS2, map[string]interface{}{
"data": map[string]interface{}{
"result": decimal.NewFromInt(9600),
"times": "1000000000000000000",
},
}))
defer ds2.Close()
ds4 := httptest.NewServer(fakeStringResponder(t, "some random string"))
defer ds4.Close()
// 3. Setup final bridge task
submit, submitBt := makeBridge(t, db, expectedRequestSubmit, map[string]interface{}{"ok": true})
defer submit.Close()
btORM.On("FindBridge", mock.Anything, submitBt.Name).Return(submitBt, nil).Once()
runner, _ := newRunner(t, db, btORM, cfg)
specStr := taskRunWithVars{
bridgeName: bridge.Name.String(),
ds2URL: ds2.URL,
ds4URL: ds4.URL,
submitBridgeName: submitBt.Name.String(),
includeInputAtKey: test.includeInputAtKey,
}.String()
p, err := pipeline.Parse(specStr)
require.NoError(t, err)
spec := pipeline.Spec{
DotDagSource: specStr,
}
_, taskRunResults, err := runner.ExecuteRun(testutils.Context(t), spec, pipeline.NewVarsFrom(test.vars), logger.TestLogger(t))
require.NoError(t, err)
require.Len(t, taskRunResults, len(p.Tasks))
expectedResults := map[string]pipeline.Result{
"ds1": {Value: `{"data":{"result":{"result":"9700","times":"1000000000000000000"}}}` + "\n"},
"ds1_parse": {Value: map[string]interface{}{"result": "9700", "times": "1000000000000000000"}},
"ds1_multiply": {Value: *mustDecimal(t, "9700000000000000000000")},
"ds2": {Value: `{"data":{"result":"9600","times":"1000000000000000000"}}` + "\n"},
"ds2_parse": {Value: map[string]interface{}{"result": "9600", "times": "1000000000000000000"}},
"ds2_multiply": {Value: *mustDecimal(t, "9600000000000000000000")},
"ds3": {Error: errors.New(`error making http request: Post "blah://test.invalid": unsupported protocol scheme "blah"`)},
"ds3_parse": {Error: pipeline.ErrTooManyErrors},
"ds3_multiply": {Error: pipeline.ErrTooManyErrors},
"ds4": {Value: "some random string"},
"median": {Value: *mustDecimal(t, "9650000000000000000000")},
"submit": {Value: `{"ok":true}` + "\n"},
}
for _, r := range taskRunResults {
expected := expectedResults[r.Task.DotID()]
if expected.Error != nil {
require.Error(t, r.Result.Error)
require.Contains(t, r.Result.Error.Error(), expected.Error.Error())
} else {
if d, is := expected.Value.(decimal.Decimal); is {
require.Equal(t, d.String(), r.Result.Value.(decimal.Decimal).String())
} else {
require.Equal(t, expected.Value, r.Result.Value)
}
}
}
})`
$DIR/core/services/pipeline/runner_test.go: `.NewSqlxDB(t)`
$DIR/core/services/pipeline/runner_test.go: `.NewTestGeneralConfig(t)`
$DIR/core/services/pipeline/runner_test.go: `.NewORM(t)`
$DIR/core/services/pipeline/runner_test.go: `.NewFromInt(9700)`
$DIR/core/services/pipeline/runner_test.go: `.On("FindBridge", mock.Anything, bridge.Name)`
$DIR/core/services/pipeline/runner_test.go: `.Return(bridge, nil)`
$DIR/core/services/pipeline/runner_test.go: `.Once()`
$DIR/core/services/pipeline/runner_test.go: `.NewServer(fakeExternalAdapter(t, expectedRequestDS2, map[string]interface{}{
"data": map[string]interface{}{
"result": decimal.NewFromInt(9600),
"times": "1000000000000000000",
},
}))`
$DIR/core/services/pipeline/runner_test.go: `.NewFromInt(9600)`
$DIR/core/services/pipeline/runner_test.go: `.NewServer(fakeStringResponder(t, "some random string"))`
$DIR/core/services/pipeline/runner_test.go: `.On("FindBridge", mock.Anything, submitBt.Name)`
$DIR/core/services/pipeline/runner_test.go: `.Return(submitBt, nil)`
$DIR/core/services/pipeline/runner_test.go: `.Once()`
$DIR/core/services/pipeline/runner_test.go: `.Name.String()`
$DIR/core/services/pipeline/runner_test.go: `.Name.String()`
$DIR/core/services/pipeline/runner_test.go: `.String()`
$DIR/core/services/pipeline/runner_test.go: `.Parse(specStr)`
$DIR/core/services/pipeline/runner_test.go: `.ExecuteRun(testutils.Context(t), spec, pipeline.NewVarsFrom(test.vars), logger.TestLogger(t))`
$DIR/core/services/pipeline/runner_test.go: `.Context(t)`
$DIR/core/services/pipeline/runner_test.go: `.NewVarsFrom(test.vars)`
$DIR/core/services/pipeline/runner_test.go: `.TestLogger(t)`
$DIR/core/services/pipeline/runner_test.go: `.New(`error making http request: Post "blah://test.invalid": unsupported protocol scheme "blah"`)`
$DIR/core/services/pipeline/runner_test.go: `.Task.DotID()`
$DIR/core/services/pipeline/runner_test.go: `.NewSqlxDB(t)`
$DIR/core/services/pipeline/runner_test.go: `.NewTestGeneralConfig(t)`
$DIR/core/services/pipeline/runner_test.go: `.NewORM(t)`
$DIR/core/services/pipeline/runner_test.go: `.Run("diet mode, empty CBOR", func(t *testing.T) {
s := CBORDietEmpty
d, err := pipeline.Parse(s)
require.NoError(t, err)
spec := pipeline.Spec{DotDagSource: s}
global := make(map[string]interface{})
jobRun := make(map[string]interface{})
global["jobRun"] = jobRun
jobRun["logData"] = hexutil.MustDecode("0x0000000000000000000000009c26cc46f57667cba75556014c8e0d5ed7c5b83d17a526ff5d8f916fa2f4a218f6ce0a6e410a0d7823f8238979f8579c2145fd6f0000000000000000000000000000000000000000000000000de0b6b3a76400000000000000000000000000009c26cc46f57667cba75556014c8e0d5ed7c5b83d64ef935700000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000006148ef28000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000000")
jobRun["logTopics"] = []common.Hash{
common.HexToHash("0xd8d7ecc4800d25fa53ce0372f13a416d98907a7ef3d8d3bdd79cf4fe75529c65"),
common.HexToHash("0x3963386131316165393962363463373161663333376235643831633737353230"),
}
vars := pipeline.NewVarsFrom(global)
lggr := logger.TestLogger(t)
_, trrs, err := r.ExecuteRun(testutils.Context(t), spec, vars, lggr)
require.NoError(t, err)
require.Len(t, trrs, len(d.Tasks))
finalResults := trrs.FinalResult(lggr)
require.Len(t, finalResults.Values, 1)
assert.Equal(t, make(map[string]interface{}), finalResults.Values[0])
require.Len(t, finalResults.FatalErrors, 1)
assert.Nil(t, finalResults.FatalErrors[0])
})`
$DIR/core/services/pipeline/runner_test.go: `.Parse(s)`
$DIR/core/services/pipeline/runner_test.go: `.MustDecode("0x0000000000000000000000009c26cc46f57667cba75556014c8e0d5ed7c5b83d17a526ff5d8f916fa2f4a218f6ce0a6e410a0d7823f8238979f8579c2145fd6f0000000000000000000000000000000000000000000000000de0b6b3a76400000000000000000000000000009c26cc46f57667cba75556014c8e0d5ed7c5b83d64ef935700000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000006148ef28000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000000")`
$DIR/core/services/pipeline/runner_test.go: `.HexToHash("0xd8d7ecc4800d25fa53ce0372f13a416d98907a7ef3d8d3bdd79cf4fe75529c65")`
$DIR/core/services/pipeline/runner_test.go: `.HexToHash("0x3963386131316165393962363463373161663333376235643831633737353230")`
$DIR/core/services/pipeline/runner_test.go: `.NewVarsFrom(global)`
$DIR/core/services/pipeline/runner_test.go: `.TestLogger(t)`
$DIR/core/services/pipeline/runner_test.go: `.ExecuteRun(testutils.Context(t), spec, vars, lggr)`
$DIR/core/services/pipeline/runner_test.go: `.Context(t)`
$DIR/core/services/pipeline/runner_test.go: `.FinalResult(lggr)`
$DIR/core/services/pipeline/runner_test.go: `.Parse(s)`
$DIR/core/services/pipeline/runner_test.go: `.MustDecode("0x0000000000000000000000009c26cc46f57667cba75556014c8e0d5ed7c5b83d17a526ff5d8f916fa2f4a218f6ce0a6e410a0d7823f8238979f8579c2145fd6f0000000000000000000000000000000000000000000000000de0b6b3a76400000000000000000000000000009c26cc46f57667cba75556014c8e0d5ed7c5b83d64ef935700000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000006148ef2800000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000000463666F6F00000000000000000000000000000000000000000000000000000000")`
$DIR/core/services/pipeline/runner_test.go: `.HexToHash("0xd8d7ecc4800d25fa53ce0372f13a416d98907a7ef3d8d3bdd79cf4fe75529c65")`
$DIR/core/services/pipeline/runner_test.go: `.HexToHash("0x3963386131316165393962363463373161663333376235643831633737353230")`
$DIR/core/services/pipeline/runner_test.go: `.NewVarsFrom(global)`
$DIR/core/services/pipeline/runner_test.go: `.TestLogger(t)`
$DIR/core/services/pipeline/runner_test.go: `.ExecuteRun(testutils.Context(t), spec, vars, lggr)`
$DIR/core/services/pipeline/runner_test.go: `.Context(t)`
$DIR/core/services/pipeline/runner_test.go: `.FinalResult(lggr)`
$DIR/core/services/pipeline/runner_test.go: `.NewSqlxDB(t)`
$DIR/core/services/pipeline/runner_test.go: `.NewServer(http.HandlerFunc(func(res http.ResponseWriter, req *http.Request) {
time.Sleep(100 * time.Millisecond)
res.WriteHeader(http.StatusOK)
_, err := res.Write([]byte(`{"result":10}`))
assert.NoError(t, err)
}))`
$DIR/core/services/pipeline/runner_test.go: `.HandlerFunc(func(res http.ResponseWriter, req *http.Request) {
time.Sleep(100 * time.Millisecond)
res.WriteHeader(http.StatusOK)
_, err := res.Write([]byte(`{"result":10}`))
assert.NoError(t, err)
})`
$DIR/core/services/pipeline/runner_test.go: `.Sleep(100 * time.Millisecond)`
$DIR/core/services/pipeline/runner_test.go: `.WriteHeader(http.StatusOK)`
$DIR/core/services/pipeline/runner_test.go: `.Write([]byte(`{"result":10}`))`
$DIR/core/services/pipeline/runner_test.go: `.NewServer(http.HandlerFunc(func(res http.ResponseWriter, req *http.Request) {
res.WriteHeader(http.StatusOK)
_, err := res.Write([]byte(`{"result":11}`))
assert.NoError(t, err)
}))`
$DIR/core/services/pipeline/runner_test.go: `.HandlerFunc(func(res http.ResponseWriter, req *http.Request) {
res.WriteHeader(http.StatusOK)
_, err := res.Write([]byte(`{"result":11}`))
assert.NoError(t, err)
})`
$DIR/core/services/pipeline/runner_test.go: `.WriteHeader(http.StatusOK)`
$DIR/core/services/pipeline/runner_test.go: `.Write([]byte(`{"result":11}`))`
$DIR/core/services/pipeline/runner_test.go: `.Sprintf(`
ds1 [type=http url="%s"];
ds1_parse [type=jsonparse path="result"];
ds1_multiply [type=multiply times=100];
ds2 [type=http url="%s"];
ds2_parse [type=jsonparse path="result"];
ds2_multiply [type=multiply times=100];
ds1 -> ds1_parse -> ds1_multiply -> answer1;
ds2 -> ds2_parse -> ds2_multiply -> answer1;
answer1 [type=median index=0];
`, m1.URL, m2.URL)`
$DIR/core/services/pipeline/runner_test.go: `.NewTestGeneralConfig(t)`
$DIR/core/services/pipeline/runner_test.go: `.NewORM(t)`
$DIR/core/services/pipeline/runner_test.go: `.WithTimeout(testutils.Context(t), 50*time.Millisecond)`
$DIR/core/services/pipeline/runner_test.go: `.Context(t)`
$DIR/core/services/pipeline/runner_test.go: `.NewVarsFrom(nil)`
$DIR/core/services/pipeline/runner_test.go: `.ExecuteRun(ctx, spec, vars, logger.TestLogger(t))`
$DIR/core/services/pipeline/runner_test.go: `.TestLogger(t)`
$DIR/core/services/pipeline/runner_test.go: `.IsTerminal()`
$DIR/core/services/pipeline/runner_test.go: `.NewSqlxDB(t)`
$DIR/core/services/pipeline/runner_test.go: `.NewORM(t)`
$DIR/core/services/pipeline/runner_test.go: `.NewORM(t)`
$DIR/core/services/pipeline/runner_test.go: `.On("InsertFinishedRun", mock.Anything, mock.Anything, mock.Anything)`
$DIR/core/services/pipeline/runner_test.go: `.
Run(func(args mock.Arguments) {
args.Get(1).(*pipeline.Run).ID = 1
})`
$DIR/core/services/pipeline/runner_test.go: `.Get(1)`
$DIR/core/services/pipeline/runner_test.go: `.
Return(nil)`
$DIR/core/services/pipeline/runner_test.go: `.NewTestGeneralConfig(t)`
$DIR/core/services/pipeline/runner_test.go: `.NewKeyStore(t, db)`
$DIR/core/services/pipeline/runner_test.go: `.Eth()`
$DIR/core/services/pipeline/runner_test.go: `.NewChainRelayExtenders(t, evmtest.TestChainOpts{DB: db, GeneralConfig: cfg, KeyStore: ethKeyStore})`
$DIR/core/services/pipeline/runner_test.go: `.NewLegacyChainsFromRelayerExtenders(relayExtenders)`
$DIR/core/services/pipeline/runner_test.go: `.TestLogger(t)`
$DIR/core/services/pipeline/runner_test.go: `.NewRunner(orm, btORM, cfg.JobPipeline(), cfg.WebServer(), legacyChains, ethKeyStore, nil, lggr, nil, nil)`
$DIR/core/services/pipeline/runner_test.go: `.JobPipeline()`
$DIR/core/services/pipeline/runner_test.go: `.WebServer()`
$DIR/core/services/pipeline/runner_test.go: `.NewVarsFrom(nil)`
$DIR/core/services/pipeline/runner_test.go: `.ExecuteAndInsertFinishedRun(testutils.Context(t), spec, vars, lggr, false)`
$DIR/core/services/pipeline/runner_test.go: `.Context(t)`
$DIR/core/services/pipeline/runner_test.go: `.FinalResult(lggr)`
$DIR/core/services/pipeline/runner_test.go: `.String()`
$DIR/core/services/pipeline/runner_test.go: `.NewSqlxDB(t)`
$DIR/core/services/pipeline/runner_test.go: `.NewORM(t)`
$DIR/core/services/pipeline/runner_test.go: `.NewORM(t)`
$DIR/core/services/pipeline/runner_test.go: `.On("InsertFinishedRunWithSpec", mock.Anything, mock.Anything, mock.Anything)`
$DIR/core/services/pipeline/runner_test.go: `.
Run(func(args mock.Arguments) {
args.Get(1).(*pipeline.Run).ID = 1
})`
$DIR/core/services/pipeline/runner_test.go: `.Get(1)`
$DIR/core/services/pipeline/runner_test.go: `.
Return(nil)`
$DIR/core/services/pipeline/runner_test.go: `.NewTestGeneralConfig(t)`
$DIR/core/services/pipeline/runner_test.go: `.NewKeyStore(t, db)`
$DIR/core/services/pipeline/runner_test.go: `.Eth()`
$DIR/core/services/pipeline/runner_test.go: `.NewChainRelayExtenders(t, evmtest.TestChainOpts{DB: db, GeneralConfig: cfg, KeyStore: ethKeyStore})`
$DIR/core/services/pipeline/runner_test.go: `.NewLegacyChainsFromRelayerExtenders(relayExtenders)`
$DIR/core/services/pipeline/runner_test.go: `.TestLogger(t)`
$DIR/core/services/pipeline/runner_test.go: `.NewRunner(orm, btORM, cfg.JobPipeline(), cfg.WebServer(), legacyChains, ethKeyStore, nil, lggr, nil, nil)`
$DIR/core/services/pipeline/runner_test.go: `.JobPipeline()`
$DIR/core/services/pipeline/runner_test.go: `.WebServer()`
$DIR/core/services/pipeline/runner_test.go: `.NewVarsFrom(nil)`
$DIR/core/services/pipeline/runner_test.go: `.ExecuteAndInsertFinishedRun(testutils.Context(t), spec, vars, lggr, false)`
$DIR/core/services/pipeline/runner_test.go: `.Context(t)`
$DIR/core/services/pipeline/runner_test.go: `.FinalResult(lggr)`
$DIR/core/services/pipeline/runner_test.go: `.String()`
$DIR/core/services/pipeline/runner_test.go: `.NewSqlxDB(t)`
$DIR/core/services/pipeline/runner_test.go: `.NewTestGeneralConfig(t)`
$DIR/core/services/pipeline/runner_test.go: `.NewORM(t)`
$DIR/core/services/pipeline/runner_test.go: `.TestLogger(t)`
$DIR/core/services/pipeline/runner_test.go: `.ExecuteRun(testutils.Context(t), pipeline.Spec{
DotDagSource: `
a [type=multiply input="$(val)" times=2]
b1 [type=multiply input="$(a)" times=2]
b2 [type=multiply input="$(a)" times=3]
c [type=median values=<[ $(b1), $(b2) ]> index=0]
a->b1->c;
a->b2->c;`,
}, pipeline.NewVarsFrom(input), lggr)`
$DIR/core/services/pipeline/runner_test.go: `.Context(t)`
$DIR/core/services/pipeline/runner_test.go: `.NewVarsFrom(input)`
$DIR/core/services/pipeline/runner_test.go: `.FinalResult(lggr)`
$DIR/core/services/pipeline/runner_test.go: `.SingularResult()`
$DIR/core/services/pipeline/runner_test.go: `.String()`
$DIR/core/services/pipeline/runner_test.go: `.String()`
$DIR/core/services/pipeline/runner_test.go: `.NewTestGeneralConfig(t)`
$DIR/core/services/pipeline/runner_test.go: `.NewORM(t)`
$DIR/core/services/pipeline/runner_test.go: `.NewSqlxDB(t)`
$DIR/core/services/pipeline/runner_test.go: `.TestLogger(t)`
$DIR/core/services/pipeline/runner_test.go: `.ExecuteRun(testutils.Context(t), pipeline.Spec{
DotDagSource: `
a [type=multiply input="$(val)" times=2]
b1 [type=multiply input="$(a)" times=2 index=0]
b2 [type=multiply input="$(a)" times=3 index=1]
a->b1;
a->b2;`,
}, pipeline.NewVarsFrom(input), lggr)`
$DIR/core/services/pipeline/runner_test.go: `.Context(t)`
$DIR/core/services/pipeline/runner_test.go: `.NewVarsFrom(input)`
$DIR/core/services/pipeline/runner_test.go: `.FinalResult(lggr)`
$DIR/core/services/pipeline/runner_test.go: `.String()`
$DIR/core/services/pipeline/runner_test.go: `.String()`
$DIR/core/services/pipeline/runner_test.go: `.NewSqlxDB(t)`
$DIR/core/services/pipeline/runner_test.go: `.MustUnmarshalToMap(`{"data":{"coin":"BTC","market":"USD"}}`)`
$DIR/core/services/pipeline/runner_test.go: `.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {
var reqBody adapterRequest
payload, err := io.ReadAll(r.Body)
require.NoError(t, err)
defer r.Body.Close()
err = json.Unmarshal(payload, &reqBody)
require.NoError(t, err)
// TODO: assert finding the id
w.Header().Set("Content-Type", "application/json")
w.Header().Set("X-Chainlink-Pending", "true")
response := map[string]interface{}{}
require.NoError(t, json.NewEncoder(w).Encode(response))
})`
$DIR/core/services/pipeline/runner_test.go: `.ReadAll(r.Body)`
$DIR/core/services/pipeline/runner_test.go: `.Unmarshal(payload, &reqBody)`
$DIR/core/services/pipeline/runner_test.go: `.Header()`
$DIR/core/services/pipeline/runner_test.go: `.Set("Content-Type", "application/json")`
$DIR/core/services/pipeline/runner_test.go: `.Header()`
$DIR/core/services/pipeline/runner_test.go: `.Set("X-Chainlink-Pending", "true")`
$DIR/core/services/pipeline/runner_test.go: `.NewServer(handler)`
$DIR/core/services/pipeline/runner_test.go: `.ParseRequestURI(s1.URL)`
$DIR/core/services/pipeline/runner_test.go: `.NewTestGeneralConfig(t)`
$DIR/core/services/pipeline/runner_test.go: `.MustCreateBridge(t, db, cltest.BridgeOpts{URL: bridgeFeedURL.String()})`
$DIR/core/services/pipeline/runner_test.go: `.String()`
$DIR/core/services/pipeline/runner_test.go: `.NewServer(fakePriceResponder(t, btcUSDPairing, decimal.NewFromInt(9600), "", nil))`
$DIR/core/services/pipeline/runner_test.go: `.NewFromInt(9600)`
$DIR/core/services/pipeline/runner_test.go: `.NewServer(fakeStringResponder(t, "foo-index-1"))`
$DIR/core/services/pipeline/runner_test.go: `.NewServer(fakeStringResponder(t, "bar-index-2"))`
$DIR/core/services/pipeline/runner_test.go: `.NewORM(t)`
$DIR/core/services/pipeline/runner_test.go: `.On("FindBridge", mock.Anything, bt.Name)`
$DIR/core/services/pipeline/runner_test.go: `.Return(*bt, nil)`
$DIR/core/services/pipeline/runner_test.go: `.On("Transact", mock.Anything, mock.Anything)`
$DIR/core/services/pipeline/runner_test.go: `.Run(func(args mock.Arguments) {
fn := args[1].(func(orm pipeline.ORM) error)
transactCall.ReturnArguments = mock.Arguments{fn(orm)}
})`
$DIR/core/services/pipeline/runner_test.go: `.Sprintf(`
ds1 [type=bridge async=true name="%s" timeout=0 requestData=<{"data": {"coin": "BTC", "market": "USD"}}>]
ds1_parse [type=jsonparse lax=false path="data,result"]
ds1_multiply [type=multiply times=1000000000000000000]
ds2 [type=http method="GET" url="%s" requestData=<{"data": {"coin": "BTC", "market": "USD"}}>]
ds2_parse [type=jsonparse lax=false path="data,result"]
ds2_multiply [type=multiply times=1000000000000000000]
ds3 [type=http method="GET" url="blah://test.invalid" requestData=<{"data": {"coin": "BTC", "market": "USD"}}>]
ds3_parse [type=jsonparse lax=false path="data,result"]
ds3_multiply [type=multiply times=1000000000000000000]
ds1->ds1_parse->ds1_multiply->median;
ds2->ds2_parse->ds2_multiply->median;
ds3->ds3_parse->ds3_multiply->median;
median [type=median index=0]
ds4 [type=http method="GET" url="%s" index=1]
ds5 [type=http method="GET" url="%s" index=2]
`, bt.Name.String(), s2.URL, s4.URL, s5.URL)`
$DIR/core/services/pipeline/runner_test.go: `.Name.String()`
$DIR/core/services/pipeline/runner_test.go: `.Parse(s)`
$DIR/core/services/pipeline/runner_test.go: `.NewRun(spec, pipeline.NewVarsFrom(nil))`
$DIR/core/services/pipeline/runner_test.go: `.NewVarsFrom(nil)`
$DIR/core/services/pipeline/runner_test.go: `.On("CreateRun", mock.Anything, mock.AnythingOfType("*pipeline.Run"))`
$DIR/core/services/pipeline/runner_test.go: `.AnythingOfType("*pipeline.Run")`
$DIR/core/services/pipeline/runner_test.go: `.Return(nil)`
$DIR/core/services/pipeline/runner_test.go: `.Run(func(args mock.Arguments) {
run := args.Get(1).(*pipeline.Run)
run.ID = 1 // give it a valid "id"
})`
$DIR/core/services/pipeline/runner_test.go: `.Get(1)`
$DIR/core/services/pipeline/runner_test.go: `.Once()`
$DIR/core/services/pipeline/runner_test.go: `.On("StoreRun", mock.Anything, mock.AnythingOfType("*pipeline.Run"))`
$DIR/core/services/pipeline/runner_test.go: `.AnythingOfType("*pipeline.Run")`
$DIR/core/services/pipeline/runner_test.go: `.Return(false, nil)`
$DIR/core/services/pipeline/runner_test.go: `.Once()`
$DIR/core/services/pipeline/runner_test.go: `.TestLogger(t)`
$DIR/core/services/pipeline/runner_test.go: `.Run(testutils.Context(t), run, lggr, false, nil)`
$DIR/core/services/pipeline/runner_test.go: `.Context(t)`
$DIR/core/services/pipeline/runner_test.go: `.On("StoreRun", mock.Anything, mock.AnythingOfType("*pipeline.Run"))`
$DIR/core/services/pipeline/runner_test.go: `.AnythingOfType("*pipeline.Run")`
$DIR/core/services/pipeline/runner_test.go: `.Return(false, nil)`
$DIR/core/services/pipeline/runner_test.go: `.Once()`
$DIR/core/services/pipeline/runner_test.go: `.Run(testutils.Context(t), run, lggr, false, nil)`
$DIR/core/services/pipeline/runner_test.go: `.Context(t)`
$DIR/core/services/pipeline/runner_test.go: `.ByDotID("ds1")`
$DIR/core/services/pipeline/runner_test.go: `.NewString("", false)`
$DIR/core/services/pipeline/runner_test.go: `.On("StoreRun", mock.Anything, mock.AnythingOfType("*pipeline.Run"))`
$DIR/core/services/pipeline/runner_test.go: `.AnythingOfType("*pipeline.Run")`
$DIR/core/services/pipeline/runner_test.go: `.Return(false, nil)`
$DIR/core/services/pipeline/runner_test.go: `.Once()`
$DIR/core/services/pipeline/runner_test.go: `.Run(testutils.Context(t), run, lggr, false, nil)`
$DIR/core/services/pipeline/runner_test.go: `.Context(t)`
$DIR/core/services/pipeline/runner_test.go: `.Result()`
$DIR/core/services/pipeline/runner_test.go: `.NewSqlxDB(t)`
$DIR/core/services/pipeline/runner_test.go: `.MustUnmarshalToMap(`{"data":{"coin":"BTC","market":"USD"}}`)`
$DIR/core/services/pipeline/runner_test.go: `.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {
var reqBody adapterRequest
payload, err := io.ReadAll(r.Body)
require.NoError(t, err)
defer r.Body.Close()
err = json.Unmarshal(payload, &reqBody)
require.NoError(t, err)
require.Contains(t, reqBody.ResponseURL, "http://localhost:6688/v2/resume/")
w.Header().Set("Content-Type", "application/json")
w.Header().Set("X-Chainlink-Pending", "true")
response := map[string]interface{}{}
require.NoError(t, json.NewEncoder(w).Encode(response))
})`
$DIR/core/services/pipeline/runner_test.go: `.ReadAll(r.Body)`
$DIR/core/services/pipeline/runner_test.go: `.Unmarshal(payload, &reqBody)`
$DIR/core/services/pipeline/runner_test.go: `.Header()`
$DIR/core/services/pipeline/runner_test.go: `.Set("Content-Type", "application/json")`
$DIR/core/services/pipeline/runner_test.go: `.Header()`
$DIR/core/services/pipeline/runner_test.go: `.Set("X-Chainlink-Pending", "true")`
$DIR/core/services/pipeline/runner_test.go: `.NewServer(handler)`
$DIR/core/services/pipeline/runner_test.go: `.ParseRequestURI(s1.URL)`
$DIR/core/services/pipeline/runner_test.go: `.NewTestGeneralConfig(t)`
$DIR/core/services/pipeline/runner_test.go: `.MustCreateBridge(t, db, cltest.BridgeOpts{URL: bridgeFeedURL.String()})`
$DIR/core/services/pipeline/runner_test.go: `.String()`
$DIR/core/services/pipeline/runner_test.go: `.NewServer(fakePriceResponder(t, btcUSDPairing, decimal.NewFromInt(9600), "", nil))`
$DIR/core/services/pipeline/runner_test.go: `.NewFromInt(9600)`
$DIR/core/services/pipeline/runner_test.go: `.NewServer(fakeStringResponder(t, "foo-index-1"))`
$DIR/core/services/pipeline/runner_test.go: `.NewServer(fakeStringResponder(t, "bar-index-2"))`
$DIR/core/services/pipeline/runner_test.go: `.NewORM(t)`
$DIR/core/services/pipeline/runner_test.go: `.On("FindBridge", mock.Anything, bt.Name)`
$DIR/core/services/pipeline/runner_test.go: `.Return(*bt, nil)`
$DIR/core/services/pipeline/runner_test.go: `.On("Transact", mock.Anything, mock.Anything)`
$DIR/core/services/pipeline/runner_test.go: `.Run(func(args mock.Arguments) {
fn := args[1].(func(orm pipeline.ORM) error)
transactCall.ReturnArguments = mock.Arguments{fn(orm)}
})`
$DIR/core/services/pipeline/runner_test.go: `.Sprintf(`
ds1 [type=bridge async=true name="%s" timeout=0 requestData=<{"data": {"coin": "BTC", "market": "USD"}}>]
ds1_parse [type=jsonparse lax=false path="data,result"]
ds1_multiply [type=multiply times=1000000000000000000]
ds2 [type=http method="GET" url="%s" requestData=<{"data": {"coin": "BTC", "market": "USD"}}>]
ds2_parse [type=jsonparse lax=false path="data,result"]
ds2_multiply [type=multiply times=1000000000000000000]
ds3 [type=http method="GET" url="blah://test.invalid" requestData=<{"data": {"coin": "BTC", "market": "USD"}}>]
ds3_parse [type=jsonparse lax=false path="data,result"]
ds3_multiply [type=multiply times=1000000000000000000]
ds1->ds1_parse->ds1_multiply->median;
ds2->ds2_parse->ds2_multiply->median;
ds3->ds3_parse->ds3_multiply->median;
median [type=median index=0]
ds4 [type=http method="GET" url="%s" index=1]
ds5 [type=http method="GET" url="%s" index=2]
`, bt.Name.String(), s2.URL, s4.URL, s5.URL)`
$DIR/core/services/pipeline/runner_test.go: `.Name.String()`
$DIR/core/services/pipeline/runner_test.go: `.Parse(s)`
$DIR/core/services/pipeline/runner_test.go: `.NewRun(spec, pipeline.NewVarsFrom(nil))`
$DIR/core/services/pipeline/runner_test.go: `.NewVarsFrom(nil)`
$DIR/core/services/pipeline/runner_test.go: `.On("CreateRun", mock.Anything, mock.AnythingOfType("*pipeline.Run"))`
$DIR/core/services/pipeline/runner_test.go: `.AnythingOfType("*pipeline.Run")`
$DIR/core/services/pipeline/runner_test.go: `.Return(nil)`
$DIR/core/services/pipeline/runner_test.go: `.Run(func(args mock.Arguments) {
run := args.Get(1).(*pipeline.Run)
run.ID = 1 // give it a valid "id"
})`
$DIR/core/services/pipeline/runner_test.go: `.Get(1)`
$DIR/core/services/pipeline/runner_test.go: `.Once()`
$DIR/core/services/pipeline/runner_test.go: `.On("StoreRun", mock.Anything, mock.AnythingOfType("*pipeline.Run"))`
$DIR/core/services/pipeline/runner_test.go: `.AnythingOfType("*pipeline.Run")`
$DIR/core/services/pipeline/runner_test.go: `.Return(true, nil)`
$DIR/core/services/pipeline/runner_test.go: `.Run(func(args mock.Arguments) {
run := args.Get(1).(*pipeline.Run)
// Now simulate a new result coming in while we were running
task := run.ByDotID("ds1")
task.Error = null.NewString("", false)
task.Output = jsonserializable.JSONSerializable{
Val: `{"data":{"result":"9700"}}` + "\n",
Valid: true,
}
})`
$DIR/core/services/pipeline/runner_test.go: `.Get(1)`
$DIR/core/services/pipeline/runner_test.go: `.ByDotID("ds1")`
$DIR/core/services/pipeline/runner_test.go: `.NewString("", false)`
$DIR/core/services/pipeline/runner_test.go: `.Once()`
$DIR/core/services/pipeline/runner_test.go: `.On("StoreRun", mock.Anything, mock.AnythingOfType("*pipeline.Run"))`
$DIR/core/services/pipeline/runner_test.go: `.AnythingOfType("*pipeline.Run")`
$DIR/core/services/pipeline/runner_test.go: `.Return(false, nil)`
$DIR/core/services/pipeline/runner_test.go: `.Once()`
$DIR/core/services/pipeline/runner_test.go: `.Run(testutils.Context(t), run, logger.TestLogger(t), false, nil)`
$DIR/core/services/pipeline/runner_test.go: `.Context(t)`
$DIR/core/services/pipeline/runner_test.go: `.TestLogger(t)`
$DIR/core/services/pipeline/runner_test.go: `.Result()`
$DIR/core/services/pipeline/runner_test.go: `.NewSqlxDB(t)`
$DIR/core/services/pipeline/runner_test.go: `.NewTestGeneralConfig(t)`
$DIR/core/services/pipeline/runner_test.go: `.NewORM(t)`
$DIR/core/services/pipeline/runner_test.go: `.TestLogger(t)`
$DIR/core/services/pipeline/runner_test.go: `.ExecuteRun(testutils.Context(t), pipeline.Spec{
DotDagSource: `
a [type=lowercase input="$(first)"]
`,
}, pipeline.NewVarsFrom(input), lggr)`
$DIR/core/services/pipeline/runner_test.go: `.Context(t)`
$DIR/core/services/pipeline/runner_test.go: `.NewVarsFrom(input)`
$DIR/core/services/pipeline/runner_test.go: `.FinalResult(lggr)`
$DIR/core/services/pipeline/runner_test.go: `.SingularResult()`
$DIR/core/services/pipeline/runner_test.go: `.NewSqlxDB(t)`
$DIR/core/services/pipeline/runner_test.go: `.NewTestGeneralConfig(t)`
$DIR/core/services/pipeline/runner_test.go: `.NewORM(t)`
$DIR/core/services/pipeline/runner_test.go: `.TestLogger(t)`
$DIR/core/services/pipeline/runner_test.go: `.ExecuteRun(testutils.Context(t), pipeline.Spec{
DotDagSource: `
a [type=uppercase input="$(first)"]
`,
}, pipeline.NewVarsFrom(input), lggr)`
$DIR/core/services/pipeline/runner_test.go: `.Context(t)`
$DIR/core/services/pipeline/runner_test.go: `.NewVarsFrom(input)`
$DIR/core/services/pipeline/runner_test.go: `.FinalResult(lggr)`
$DIR/core/services/pipeline/runner_test.go: `.SingularResult()`
$DIR/core/services/pipeline/runner_test.go: `.NewSqlxDB(t)`
$DIR/core/services/pipeline/runner_test.go: `.NewTestGeneralConfig(t)`
$DIR/core/services/pipeline/runner_test.go: `.NewORM(t)`
$DIR/core/services/pipeline/runner_test.go: `.TestLogger(t)`
$DIR/core/services/pipeline/runner_test.go: `.ExecuteRun(testutils.Context(t), pipeline.Spec{
DotDagSource: `
a [type=hexdecode input="$(astring)"]
`,
}, pipeline.NewVarsFrom(input), lggr)`
$DIR/core/services/pipeline/runner_test.go: `.Context(t)`
$DIR/core/services/pipeline/runner_test.go: `.NewVarsFrom(input)`
$DIR/core/services/pipeline/runner_test.go: `.FinalResult(lggr)`
$DIR/core/services/pipeline/runner_test.go: `.SingularResult()`
$DIR/core/services/pipeline/runner_test.go: `.NewSqlxDB(t)`
$DIR/core/services/pipeline/runner_test.go: `.NewTestGeneralConfig(t)`
$DIR/core/services/pipeline/runner_test.go: `.NewORM(t)`
$DIR/core/services/pipeline/runner_test.go: `.TestLogger(t)`
$DIR/core/services/pipeline/runner_test.go: `.ExecuteRun(testutils.Context(t), pipeline.Spec{
DotDagSource: `
en [type=hexencode input="$(input_val)"]
de [type=hexdecode]
en->de
`,
}, pipeline.NewVarsFrom(input), lggr)`
$DIR/core/services/pipeline/runner_test.go: `.Context(t)`
$DIR/core/services/pipeline/runner_test.go: `.NewVarsFrom(input)`
$DIR/core/services/pipeline/runner_test.go: `.FinalResult(lggr)`
$DIR/core/services/pipeline/runner_test.go: `.SingularResult()`
$DIR/core/services/pipeline/runner_test.go: `.NewSqlxDB(t)`
$DIR/core/services/pipeline/runner_test.go: `.NewTestGeneralConfig(t)`
$DIR/core/services/pipeline/runner_test.go: `.NewORM(t)`
$DIR/core/services/pipeline/runner_test.go: `.TestLogger(t)`
$DIR/core/services/pipeline/runner_test.go: `.ExecuteRun(testutils.Context(t), pipeline.Spec{
DotDagSource: `
a [type=base64decode input="$(astring)"]
`,
}, pipeline.NewVarsFrom(input), lggr)`
$DIR/core/services/pipeline/runner_test.go: `.Context(t)`
$DIR/core/services/pipeline/runner_test.go: `.NewVarsFrom(input)`
$DIR/core/services/pipeline/runner_test.go: `.FinalResult(lggr)`
$DIR/core/services/pipeline/runner_test.go: `.SingularResult()`
$DIR/core/services/pipeline/runner_test.go: `.NewSqlxDB(t)`
$DIR/core/services/pipeline/runner_test.go: `.NewTestGeneralConfig(t)`
$DIR/core/services/pipeline/runner_test.go: `.NewORM(t)`
$DIR/core/services/pipeline/runner_test.go: `.TestLogger(t)`
$DIR/core/services/pipeline/runner_test.go: `.ExecuteRun(testutils.Context(t), pipeline.Spec{
DotDagSource: `
en [type=base64encode input="$(input_val)"]
de [type=base64decode]
en->de
`,
}, pipeline.NewVarsFrom(input), lggr)`
$DIR/core/services/pipeline/runner_test.go: `.Context(t)`
$DIR/core/services/pipeline/runner_test.go: `.NewVarsFrom(input)`
$DIR/core/services/pipeline/runner_test.go: `.FinalResult(lggr)`
$DIR/core/services/pipeline/runner_test.go: `.SingularResult()`
$DIR/core/services/pipeline/runner_test.go: `.NewSqlxDB(t)`
$DIR/core/services/pipeline/runner_test.go: `.NewTestGeneralConfig(t)`
$DIR/core/services/pipeline/runner_test.go: `.NewKeyStore(t, db)`
$DIR/core/services/pipeline/runner_test.go: `.Eth()`
$DIR/core/services/pipeline/runner_test.go: `.NewChainRelayExtenders(t, evmtest.TestChainOpts{DB: db, GeneralConfig: cfg, KeyStore: ethKeyStore})`
$DIR/core/services/pipeline/runner_test.go: `.NewLegacyChainsFromRelayerExtenders(relayExtenders)`
$DIR/core/services/pipeline/runner_test.go: `.TestLogger(t)`
$DIR/core/services/pipeline/runner_test.go: `.NewRunner(nil, nil, cfg.JobPipeline(), cfg.WebServer(), legacyChains, ethKeyStore, nil, lggr, nil, nil)`
$DIR/core/services/pipeline/runner_test.go: `.JobPipeline()`
$DIR/core/services/pipeline/runner_test.go: `.WebServer()`
$DIR/core/services/pipeline/runner_test.go: `.Sprintf(template, 1)`
$DIR/core/services/pipeline/runner_test.go: `.NewVarsFrom(nil)`
$DIR/core/services/pipeline/runner_test.go: `.ExecuteRun(testutils.Context(t), spec, vars, lggr)`
$DIR/core/services/pipeline/runner_test.go: `.Context(t)`
$DIR/core/services/pipeline/runner_test.go: `.ParsePipeline()`
$DIR/core/services/pipeline/runner_test.go: `.Sprintf(template, 2)`
$DIR/core/services/pipeline/runner_test.go: `.ExecuteRun(testutils.Context(t), spec, vars, lggr)`
$DIR/core/services/pipeline/runner_test.go: `.Context(t)`
$DIR/core/services/pipeline/scheduler_test.go: `go s.Run()`
$DIR/core/services/pipeline/scheduler_test.go: `s.report(testutils.Context(t), TaskRunResult{
ID: uuid.New(),
Task: taskRun.task,
Result: event.result,
FinishedAt: null.TimeFrom(now),
CreatedAt: now,
})`
$DIR/core/services/pipeline/scheduler_test.go: `test.assertion(t, *p, s.results)`
$DIR/core/services/pipeline/scheduler_test.go: `.ByDotID("b")`
$DIR/core/services/pipeline/scheduler_test.go: `.ID()`
$DIR/core/services/pipeline/scheduler_test.go: `.ByDotID("a")`
$DIR/core/services/pipeline/scheduler_test.go: `.ID()`
$DIR/core/services/pipeline/scheduler_test.go: `.ByDotID("a")`
$DIR/core/services/pipeline/scheduler_test.go: `.ID()`
$DIR/core/services/pipeline/scheduler_test.go: `.ByDotID("a")`
$DIR/core/services/pipeline/scheduler_test.go: `.ID()`
$DIR/core/services/pipeline/scheduler_test.go: `.TestLogger(t)`
$DIR/core/services/pipeline/scheduler_test.go: `.Run()`
$DIR/core/services/pipeline/scheduler_test.go: `.Now()`
$DIR/core/services/pipeline/scheduler_test.go: `.report(testutils.Context(t), TaskRunResult{
ID: uuid.New(),
Task: taskRun.task,
Result: event.result,
FinishedAt: null.TimeFrom(now),
CreatedAt: now,
})`
$DIR/core/services/pipeline/scheduler_test.go: `.Context(t)`
$DIR/core/services/pipeline/scheduler_test.go: `.New()`
$DIR/core/services/pipeline/scheduler_test.go: `.TimeFrom(now)`
$DIR/core/services/pipeline/scheduler_test.go: `.After(time.Second)`
$DIR/core/services/pipeline/scheduler_test.go: `.After(time.Second)`
$DIR/core/services/pipeline/scheduler_test.go: `.assertion(t, *p, s.results)`
$DIR/core/services/pipeline/task.any_test.go: `t.Run(test.name, func(t *testing.T) {
task := pipeline.AnyTask{}
output, runInfo := task.Run(testutils.Context(t), logger.TestLogger(t), pipeline.NewVarsFrom(nil), test.inputs)
assert.False(t, runInfo.IsPending)
assert.False(t, runInfo.IsRetryable)
if output.Error != nil {
require.Equal(t, test.want.Error, errors.Cause(output.Error))
require.Nil(t, output.Value)
} else {
switch test.want.Value.(type) {
case *decimal.Decimal:
require.Equal(t, test.want.Value.(*decimal.Decimal).String(), output.Value.(*decimal.Decimal).String())
default:
require.Equal(t, test.want.Value, output.Value)
}
require.NoError(t, output.Error)
}
})`
$DIR/core/services/pipeline/task.any_test.go: `.New("foo")`
$DIR/core/services/pipeline/task.any_test.go: `.New("foo")`
$DIR/core/services/pipeline/task.any_test.go: `.New("bar")`
$DIR/core/services/pipeline/task.any_test.go: `.New("foo")`
$DIR/core/services/pipeline/task.any_test.go: `.New("foo")`
$DIR/core/services/pipeline/task.any_test.go: `.Run(test.name, func(t *testing.T) {
task := pipeline.AnyTask{}
output, runInfo := task.Run(testutils.Context(t), logger.TestLogger(t), pipeline.NewVarsFrom(nil), test.inputs)
assert.False(t, runInfo.IsPending)
assert.False(t, runInfo.IsRetryable)
if output.Error != nil {
require.Equal(t, test.want.Error, errors.Cause(output.Error))
require.Nil(t, output.Value)
} else {
switch test.want.Value.(type) {
case *decimal.Decimal:
require.Equal(t, test.want.Value.(*decimal.Decimal).String(), output.Value.(*decimal.Decimal).String())
default:
require.Equal(t, test.want.Value, output.Value)
}
require.NoError(t, output.Error)
}
})`
$DIR/core/services/pipeline/task.any_test.go: `.Run(testutils.Context(t), logger.TestLogger(t), pipeline.NewVarsFrom(nil), test.inputs)`
$DIR/core/services/pipeline/task.any_test.go: `.Context(t)`
$DIR/core/services/pipeline/task.any_test.go: `.TestLogger(t)`
$DIR/core/services/pipeline/task.any_test.go: `.NewVarsFrom(nil)`
$DIR/core/services/pipeline/task.base64decode_test.go: `t.Run(test.name, func(t *testing.T) {
t.Run("without vars through job DAG", func(t *testing.T) {
vars := pipeline.NewVarsFrom(nil)
task := pipeline.Base64DecodeTask{BaseTask: pipeline.NewBaseTask(0, "task", nil, nil, 0)}
assertOK(task.Run(testutils.Context(t), logger.TestLogger(t), vars, []pipeline.Result{{Value: test.input}}))
})
t.Run("without vars through input param", func(t *testing.T) {
inputStr := fmt.Sprintf("%v", test.input)
if inputStr == "" {
// empty input parameter is indistinguishable from not providing it at all
// in that case the task will use an input defined by the job DAG
return
}
vars := pipeline.NewVarsFrom(nil)
task := pipeline.Base64DecodeTask{
BaseTask: pipeline.NewBaseTask(0, "task", nil, nil, 0),
Input: inputStr,
}
assertOK(task.Run(testutils.Context(t), logger.TestLogger(t), vars, []pipeline.Result{}))
})
t.Run("with vars", func(t *testing.T) {
vars := pipeline.NewVarsFrom(map[string]interface{}{
"foo": map[string]interface{}{"bar": test.input},
})
task := pipeline.Base64DecodeTask{
BaseTask: pipeline.NewBaseTask(0, "task", nil, nil, 0),
Input: "$(foo.bar)",
}
assertOK(task.Run(testutils.Context(t), logger.TestLogger(t), vars, []pipeline.Result{}))
})
})`
$DIR/core/services/pipeline/task.base64decode_test.go: `t.Run("without vars through job DAG", func(t *testing.T) {
vars := pipeline.NewVarsFrom(nil)
task := pipeline.Base64DecodeTask{BaseTask: pipeline.NewBaseTask(0, "task", nil, nil, 0)}
assertOK(task.Run(testutils.Context(t), logger.TestLogger(t), vars, []pipeline.Result{{Value: test.input}}))
})`
$DIR/core/services/pipeline/task.base64decode_test.go: `assertOK(task.Run(testutils.Context(t), logger.TestLogger(t), vars, []pipeline.Result{{Value: test.input}}))`
$DIR/core/services/pipeline/task.base64decode_test.go: `t.Run("without vars through input param", func(t *testing.T) {
inputStr := fmt.Sprintf("%v", test.input)
if inputStr == "" {
// empty input parameter is indistinguishable from not providing it at all
// in that case the task will use an input defined by the job DAG
return
}
vars := pipeline.NewVarsFrom(nil)
task := pipeline.Base64DecodeTask{
BaseTask: pipeline.NewBaseTask(0, "task", nil, nil, 0),
Input: inputStr,
}
assertOK(task.Run(testutils.Context(t), logger.TestLogger(t), vars, []pipeline.Result{}))
})`
$DIR/core/services/pipeline/task.base64decode_test.go: `assertOK(task.Run(testutils.Context(t), logger.TestLogger(t), vars, []pipeline.Result{}))`
$DIR/core/services/pipeline/task.base64decode_test.go: `t.Run("with vars", func(t *testing.T) {
vars := pipeline.NewVarsFrom(map[string]interface{}{
"foo": map[string]interface{}{"bar": test.input},
})
task := pipeline.Base64DecodeTask{
BaseTask: pipeline.NewBaseTask(0, "task", nil, nil, 0),
Input: "$(foo.bar)",
}
assertOK(task.Run(testutils.Context(t), logger.TestLogger(t), vars, []pipeline.Result{}))
})`
$DIR/core/services/pipeline/task.base64decode_test.go: `assertOK(task.Run(testutils.Context(t), logger.TestLogger(t), vars, []pipeline.Result{}))`
$DIR/core/services/pipeline/task.base64decode_test.go: `.Run(test.name, func(t *testing.T) {
t.Run("without vars through job DAG", func(t *testing.T) {
vars := pipeline.NewVarsFrom(nil)
task := pipeline.Base64DecodeTask{BaseTask: pipeline.NewBaseTask(0, "task", nil, nil, 0)}
assertOK(task.Run(testutils.Context(t), logger.TestLogger(t), vars, []pipeline.Result{{Value: test.input}}))
})
t.Run("without vars through input param", func(t *testing.T) {
inputStr := fmt.Sprintf("%v", test.input)
if inputStr == "" {
// empty input parameter is indistinguishable from not providing it at all
// in that case the task will use an input defined by the job DAG
return
}
vars := pipeline.NewVarsFrom(nil)
task := pipeline.Base64DecodeTask{
BaseTask: pipeline.NewBaseTask(0, "task", nil, nil, 0),
Input: inputStr,
}
assertOK(task.Run(testutils.Context(t), logger.TestLogger(t), vars, []pipeline.Result{}))
})
t.Run("with vars", func(t *testing.T) {
vars := pipeline.NewVarsFrom(map[string]interface{}{
"foo": map[string]interface{}{"bar": test.input},
})
task := pipeline.Base64DecodeTask{
BaseTask: pipeline.NewBaseTask(0, "task", nil, nil, 0),
Input: "$(foo.bar)",
}
assertOK(task.Run(testutils.Context(t), logger.TestLogger(t), vars, []pipeline.Result{}))
})
})`
$DIR/core/services/pipeline/task.base64decode_test.go: `.Run("without vars through job DAG", func(t *testing.T) {
vars := pipeline.NewVarsFrom(nil)
task := pipeline.Base64DecodeTask{BaseTask: pipeline.NewBaseTask(0, "task", nil, nil, 0)}
assertOK(task.Run(testutils.Context(t), logger.TestLogger(t), vars, []pipeline.Result{{Value: test.input}}))
})`
$DIR/core/services/pipeline/task.base64decode_test.go: `.NewVarsFrom(nil)`
$DIR/core/services/pipeline/task.base64decode_test.go: `.NewBaseTask(0, "task", nil, nil, 0)`
$DIR/core/services/pipeline/task.base64decode_test.go: `.Run(testutils.Context(t), logger.TestLogger(t), vars, []pipeline.Result{{Value: test.input}})`
$DIR/core/services/pipeline/task.base64decode_test.go: `.Context(t)`
$DIR/core/services/pipeline/task.base64decode_test.go: `.TestLogger(t)`
$DIR/core/services/pipeline/task.base64decode_test.go: `.Run("without vars through input param", func(t *testing.T) {
inputStr := fmt.Sprintf("%v", test.input)
if inputStr == "" {
// empty input parameter is indistinguishable from not providing it at all
// in that case the task will use an input defined by the job DAG
return
}
vars := pipeline.NewVarsFrom(nil)
task := pipeline.Base64DecodeTask{
BaseTask: pipeline.NewBaseTask(0, "task", nil, nil, 0),
Input: inputStr,
}
assertOK(task.Run(testutils.Context(t), logger.TestLogger(t), vars, []pipeline.Result{}))
})`
$DIR/core/services/pipeline/task.base64decode_test.go: `.Sprintf("%v", test.input)`
$DIR/core/services/pipeline/task.base64decode_test.go: `.NewVarsFrom(nil)`
$DIR/core/services/pipeline/task.base64decode_test.go: `.NewBaseTask(0, "task", nil, nil, 0)`
$DIR/core/services/pipeline/task.base64decode_test.go: `.Run(testutils.Context(t), logger.TestLogger(t), vars, []pipeline.Result{})`
$DIR/core/services/pipeline/task.base64decode_test.go: `.Context(t)`
$DIR/core/services/pipeline/task.base64decode_test.go: `.TestLogger(t)`
$DIR/core/services/pipeline/task.base64decode_test.go: `.Run("with vars", func(t *testing.T) {
vars := pipeline.NewVarsFrom(map[string]interface{}{
"foo": map[string]interface{}{"bar": test.input},
})
task := pipeline.Base64DecodeTask{
BaseTask: pipeline.NewBaseTask(0, "task", nil, nil, 0),
Input: "$(foo.bar)",
}
assertOK(task.Run(testutils.Context(t), logger.TestLogger(t), vars, []pipeline.Result{}))
})`
$DIR/core/services/pipeline/task.base64decode_test.go: `.NewVarsFrom(map[string]interface{}{
"foo": map[string]interface{}{"bar": test.input},
})`
$DIR/core/services/pipeline/task.base64decode_test.go: `.NewBaseTask(0, "task", nil, nil, 0)`
$DIR/core/services/pipeline/task.base64decode_test.go: `.Run(testutils.Context(t), logger.TestLogger(t), vars, []pipeline.Result{})`
$DIR/core/services/pipeline/task.base64decode_test.go: `.Context(t)`
$DIR/core/services/pipeline/task.base64decode_test.go: `.TestLogger(t)`
$DIR/core/services/pipeline/task.base64encode_test.go: `t.Run(test.name, func(t *testing.T) {
t.Run("without vars through job DAG", func(t *testing.T) {
vars := pipeline.NewVarsFrom(nil)
task := pipeline.Base64EncodeTask{BaseTask: pipeline.NewBaseTask(0, "task", nil, nil, 0)}
assertOK(task.Run(testutils.Context(t), logger.TestLogger(t), vars, []pipeline.Result{{Value: test.input}}))
})
t.Run("with vars", func(t *testing.T) {
vars := pipeline.NewVarsFrom(map[string]interface{}{
"foo": map[string]interface{}{"bar": test.input},
})
task := pipeline.Base64EncodeTask{
BaseTask: pipeline.NewBaseTask(0, "task", nil, nil, 0),
Input: "$(foo.bar)",
}
assertOK(task.Run(testutils.Context(t), logger.TestLogger(t), vars, []pipeline.Result{}))
})
})`
$DIR/core/services/pipeline/task.base64encode_test.go: `t.Run("without vars through job DAG", func(t *testing.T) {
vars := pipeline.NewVarsFrom(nil)
task := pipeline.Base64EncodeTask{BaseTask: pipeline.NewBaseTask(0, "task", nil, nil, 0)}
assertOK(task.Run(testutils.Context(t), logger.TestLogger(t), vars, []pipeline.Result{{Value: test.input}}))
})`
$DIR/core/services/pipeline/task.base64encode_test.go: `assertOK(task.Run(testutils.Context(t), logger.TestLogger(t), vars, []pipeline.Result{{Value: test.input}}))`
$DIR/core/services/pipeline/task.base64encode_test.go: `t.Run("with vars", func(t *testing.T) {
vars := pipeline.NewVarsFrom(map[string]interface{}{
"foo": map[string]interface{}{"bar": test.input},
})
task := pipeline.Base64EncodeTask{
BaseTask: pipeline.NewBaseTask(0, "task", nil, nil, 0),
Input: "$(foo.bar)",
}
assertOK(task.Run(testutils.Context(t), logger.TestLogger(t), vars, []pipeline.Result{}))
})`
$DIR/core/services/pipeline/task.base64encode_test.go: `assertOK(task.Run(testutils.Context(t), logger.TestLogger(t), vars, []pipeline.Result{}))`
$DIR/core/services/pipeline/task.base64encode_test.go: `t.Run(test.name, func(t *testing.T) {
vars := pipeline.NewVarsFrom(nil)
task := pipeline.Base64EncodeTask{
BaseTask: pipeline.NewBaseTask(0, "task", nil, nil, 0),
Input: fmt.Sprintf("%v", test.input),
}
result, runInfo := task.Run(testutils.Context(t), logger.TestLogger(t), vars, []pipeline.Result{})
assert.False(t, runInfo.IsPending)
assert.False(t, runInfo.IsRetryable)
require.NoError(t, result.Error)
require.Equal(t, test.result, result.Value)
})`
$DIR/core/services/pipeline/task.base64encode_test.go: `.Run(test.name, func(t *testing.T) {
t.Run("without vars through job DAG", func(t *testing.T) {
vars := pipeline.NewVarsFrom(nil)
task := pipeline.Base64EncodeTask{BaseTask: pipeline.NewBaseTask(0, "task", nil, nil, 0)}
assertOK(task.Run(testutils.Context(t), logger.TestLogger(t), vars, []pipeline.Result{{Value: test.input}}))
})
t.Run("with vars", func(t *testing.T) {
vars := pipeline.NewVarsFrom(map[string]interface{}{
"foo": map[string]interface{}{"bar": test.input},
})
task := pipeline.Base64EncodeTask{
BaseTask: pipeline.NewBaseTask(0, "task", nil, nil, 0),
Input: "$(foo.bar)",
}
assertOK(task.Run(testutils.Context(t), logger.TestLogger(t), vars, []pipeline.Result{}))
})
})`
$DIR/core/services/pipeline/task.base64encode_test.go: `.Run("without vars through job DAG", func(t *testing.T) {
vars := pipeline.NewVarsFrom(nil)
task := pipeline.Base64EncodeTask{BaseTask: pipeline.NewBaseTask(0, "task", nil, nil, 0)}
assertOK(task.Run(testutils.Context(t), logger.TestLogger(t), vars, []pipeline.Result{{Value: test.input}}))
})`
$DIR/core/services/pipeline/task.base64encode_test.go: `.NewVarsFrom(nil)`
$DIR/core/services/pipeline/task.base64encode_test.go: `.NewBaseTask(0, "task", nil, nil, 0)`
$DIR/core/services/pipeline/task.base64encode_test.go: `.Run(testutils.Context(t), logger.TestLogger(t), vars, []pipeline.Result{{Value: test.input}})`
$DIR/core/services/pipeline/task.base64encode_test.go: `.Context(t)`
$DIR/core/services/pipeline/task.base64encode_test.go: `.TestLogger(t)`
$DIR/core/services/pipeline/task.base64encode_test.go: `.Run("with vars", func(t *testing.T) {
vars := pipeline.NewVarsFrom(map[string]interface{}{
"foo": map[string]interface{}{"bar": test.input},
})
task := pipeline.Base64EncodeTask{
BaseTask: pipeline.NewBaseTask(0, "task", nil, nil, 0),
Input: "$(foo.bar)",
}
assertOK(task.Run(testutils.Context(t), logger.TestLogger(t), vars, []pipeline.Result{}))
})`
$DIR/core/services/pipeline/task.base64encode_test.go: `.NewVarsFrom(map[string]interface{}{
"foo": map[string]interface{}{"bar": test.input},
})`
$DIR/core/services/pipeline/task.base64encode_test.go: `.NewBaseTask(0, "task", nil, nil, 0)`
$DIR/core/services/pipeline/task.base64encode_test.go: `.Run(testutils.Context(t), logger.TestLogger(t), vars, []pipeline.Result{})`
$DIR/core/services/pipeline/task.base64encode_test.go: `.Context(t)`
$DIR/core/services/pipeline/task.base64encode_test.go: `.TestLogger(t)`
$DIR/core/services/pipeline/task.base64encode_test.go: `.Run(test.name, func(t *testing.T) {
vars := pipeline.NewVarsFrom(nil)
task := pipeline.Base64EncodeTask{
BaseTask: pipeline.NewBaseTask(0, "task", nil, nil, 0),
Input: fmt.Sprintf("%v", test.input),
}
result, runInfo := task.Run(testutils.Context(t), logger.TestLogger(t), vars, []pipeline.Result{})
assert.False(t, runInfo.IsPending)
assert.False(t, runInfo.IsRetryable)
require.NoError(t, result.Error)
require.Equal(t, test.result, result.Value)
})`
$DIR/core/services/pipeline/task.base64encode_test.go: `.NewVarsFrom(nil)`
$DIR/core/services/pipeline/task.base64encode_test.go: `.NewBaseTask(0, "task", nil, nil, 0)`
$DIR/core/services/pipeline/task.base64encode_test.go: `.Sprintf("%v", test.input)`
$DIR/core/services/pipeline/task.base64encode_test.go: `.Run(testutils.Context(t), logger.TestLogger(t), vars, []pipeline.Result{})`
$DIR/core/services/pipeline/task.base64encode_test.go: `.Context(t)`
$DIR/core/services/pipeline/task.base64encode_test.go: `.TestLogger(t)`
$DIR/core/services/pipeline/task.bridge_test.go: `task.HelperSetDependencies(cfg.JobPipeline(), cfg.WebServer(), orm, specID, uuid.UUID{}, c)`
$DIR/core/services/pipeline/task.bridge_test.go: `err = json.Unmarshal([]byte(result.Value.(string)), &x)`
$DIR/core/services/pipeline/task.bridge_test.go: `task.HelperSetDependencies(cfg.JobPipeline(), cfg.WebServer(), orm, specID, uuid.UUID{}, c)`
$DIR/core/services/pipeline/task.bridge_test.go: `c.WebServer.BridgeCacheTTL = commonconfig.MustNewDuration(30 * time.Second)`
$DIR/core/services/pipeline/task.bridge_test.go: `task.HelperSetDependencies(cfg.JobPipeline(), cfg.WebServer(), orm, specID, uuid.UUID{}, c)`
$DIR/core/services/pipeline/task.bridge_test.go: `_, err = db.ExecContext(ctx, `INSERT INTO bridge_last_value(dot_id, spec_id, value, finished_at)
VALUES($1, $2, $3, $4) ON CONFLICT ON CONSTRAINT bridge_last_value_pkey
DO UPDATE SET value = $3, finished_at = $4;`, task.DotID(), specID, big.NewInt(9700).Bytes(), time.Now().Add(-1*time.Minute))`
$DIR/core/services/pipeline/task.bridge_test.go: `_, err = db.ExecContext(ctx, `INSERT INTO bridge_last_value(dot_id, spec_id, value, finished_at)
VALUES($1, $2, $3, $4) ON CONFLICT ON CONSTRAINT bridge_last_value_pkey
DO UPDATE SET value = $3, finished_at = $4;`, task.DotID(), specID, big.NewInt(9700).Bytes(), time.Now().Add(-10*time.Second))`
$DIR/core/services/pipeline/task.bridge_test.go: `result2, _ = task.Run(testutils.Context(t), logger.TestLogger(t),
pipeline.NewVarsFrom(
map[string]interface{}{
"jobRun": map[string]interface{}{
"meta": map[string]interface{}{
"shouldFail": true,
},
},
},
),
nil)`
$DIR/core/services/pipeline/task.bridge_test.go: `c.WebServer.BridgeCacheTTL = commonconfig.MustNewDuration(0 * time.Second)`
$DIR/core/services/pipeline/task.bridge_test.go: `task.HelperSetDependencies(cfg2.JobPipeline(), cfg2.WebServer(), orm, specID, uuid.UUID{}, c)`
$DIR/core/services/pipeline/task.bridge_test.go: `result2, _ = task.Run(testutils.Context(t), logger.TestLogger(t),
pipeline.NewVarsFrom(
map[string]interface{}{
"jobRun": map[string]interface{}{
"meta": map[string]interface{}{
"shouldFail": true,
},
},
},
),
nil)`
$DIR/core/services/pipeline/task.bridge_test.go: `task2.HelperSetDependencies(cfg2.JobPipeline(), cfg2.WebServer(), orm, specID, uuid.UUID{}, c)`
$DIR/core/services/pipeline/task.bridge_test.go: `_, err = db.ExecContext(ctx, `INSERT INTO bridge_last_value(dot_id, spec_id, value, finished_at)
VALUES($1, $2, $3, $4) ON CONFLICT ON CONSTRAINT bridge_last_value_pkey
DO UPDATE SET value = $3, finished_at = $4;`, task2.DotID(), specID, big.NewInt(9700).Bytes(), time.Now().Add(-32*time.Minute))`
$DIR/core/services/pipeline/task.bridge_test.go: `result2, _ = task2.Run(testutils.Context(t), logger.TestLogger(t),
pipeline.NewVarsFrom(
map[string]interface{}{
"jobRun": map[string]interface{}{
"meta": map[string]interface{}{
"shouldFail": true,
},
},
},
),
nil)`
$DIR/core/services/pipeline/task.bridge_test.go: `_, err = db.ExecContext(ctx, `INSERT INTO bridge_last_value(dot_id, spec_id, value, finished_at)
VALUES($1, $2, $3, $4) ON CONFLICT ON CONSTRAINT bridge_last_value_pkey
DO UPDATE SET value = $3, finished_at = $4;`, task2.DotID(), specID, big.NewInt(9700).Bytes(), time.Now().Add(-25*time.Minute))`
$DIR/core/services/pipeline/task.bridge_test.go: `result2, _ = task2.Run(testutils.Context(t), logger.TestLogger(t),
pipeline.NewVarsFrom(
map[string]interface{}{
"jobRun": map[string]interface{}{
"meta": map[string]interface{}{
"shouldFail": true,
},
},
},
),
nil)`
$DIR/core/services/pipeline/task.bridge_test.go: `err = json.Unmarshal(payload, &reqBody)`
$DIR/core/services/pipeline/task.bridge_test.go: `w.Header().Set("Content-Type", "application/json")`
$DIR/core/services/pipeline/task.bridge_test.go: `task.HelperSetDependencies(cfg.JobPipeline(), cfg.WebServer(), orm, specID, id, c)`
$DIR/core/services/pipeline/task.bridge_test.go: `t.Run(test.name, func(t *testing.T) {
t.Parallel()
db := pgtest.NewSqlxDB(t)
cfg := configtest.NewTestGeneralConfig(t)
s1 := httptest.NewServer(fakePriceResponder(t, test.expectedRequestData, decimal.NewFromInt(9700), "", nil))
defer s1.Close()
feedURL, err := url.ParseRequestURI(s1.URL)
require.NoError(t, err)
orm := bridges.NewORM(db)
_, bridge := cltest.MustCreateBridge(t, db, cltest.BridgeOpts{URL: feedURL.String()})
task := pipeline.BridgeTask{
BaseTask: pipeline.NewBaseTask(0, "bridge", nil, nil, 0),
Name: bridge.Name.String(),
RequestData: test.requestData,
IncludeInputAtKey: test.includeInputAtKey,
}
c := clhttptest.NewTestLocalOnlyHTTPClient()
trORM := pipeline.NewORM(db, logger.TestLogger(t), cfg.JobPipeline().MaxSuccessfulRuns())
specID, err := trORM.CreateSpec(testutils.Context(t), pipeline.Pipeline{}, *models.NewInterval(5 * time.Minute))
require.NoError(t, err)
task.HelperSetDependencies(cfg.JobPipeline(), cfg.WebServer(), orm, specID, uuid.UUID{}, c)
result, runInfo := task.Run(testutils.Context(t), logger.TestLogger(t), test.vars, test.inputs)
assert.False(t, runInfo.IsPending)
assert.False(t, runInfo.IsRetryable)
if test.expectedErrorCause != nil {
require.Equal(t, test.expectedErrorCause, errors.Cause(result.Error))
if test.expectedErrorContains != "" {
require.Contains(t, result.Error.Error(), test.expectedErrorContains)
}
} else {
require.NoError(t, result.Error)
require.NotNil(t, result.Value)
var x struct {
Data struct {
Result decimal.Decimal `json:"result"`
} `json:"data"`
}
err = json.Unmarshal([]byte(result.Value.(string)), &x)
require.NoError(t, err)
require.Equal(t, decimal.NewFromInt(9700), x.Data.Result)
}
})`
$DIR/core/services/pipeline/task.bridge_test.go: `task.HelperSetDependencies(cfg.JobPipeline(), cfg.WebServer(), orm, specID, uuid.UUID{}, c)`
$DIR/core/services/pipeline/task.bridge_test.go: `err = json.Unmarshal([]byte(result.Value.(string)), &x)`
$DIR/core/services/pipeline/task.bridge_test.go: `w.Header().Set("Content-Type", "application/json")`
$DIR/core/services/pipeline/task.bridge_test.go: `httpCalled.Store(true)`
$DIR/core/services/pipeline/task.bridge_test.go: `task.HelperSetDependencies(cfg.JobPipeline(), cfg.WebServer(), orm, specID, uuid.UUID{}, c)`
$DIR/core/services/pipeline/task.bridge_test.go: `t.Run(test.name, func(t *testing.T) {
db := pgtest.NewSqlxDB(t)
cfg := configtest.NewTestGeneralConfig(t)
s1 := httptest.NewServer(fakePriceResponder(t, utils.MustUnmarshalToMap(btcUSDPairing), decimal.NewFromInt(9700), test.includeInputAtKey, test.expectedInput))
defer s1.Close()
feedURL, err := url.ParseRequestURI(s1.URL)
require.NoError(t, err)
orm := bridges.NewORM(db)
_, bridge := cltest.MustCreateBridge(t, db, cltest.BridgeOpts{URL: feedURL.String()})
task := pipeline.BridgeTask{
BaseTask: pipeline.NewBaseTask(0, "bridge", nil, nil, 0),
Name: bridge.Name.String(),
RequestData: btcUSDPairing,
IncludeInputAtKey: test.includeInputAtKey,
}
c := clhttptest.NewTestLocalOnlyHTTPClient()
trORM := pipeline.NewORM(db, logger.TestLogger(t), cfg.JobPipeline().MaxSuccessfulRuns())
specID, err := trORM.CreateSpec(testutils.Context(t), pipeline.Pipeline{}, *models.NewInterval(5 * time.Minute))
require.NoError(t, err)
task.HelperSetDependencies(cfg.JobPipeline(), cfg.WebServer(), orm, specID, uuid.UUID{}, c)
result, runInfo := task.Run(testutils.Context(t), logger.TestLogger(t), pipeline.NewVarsFrom(nil), test.inputs)
assert.False(t, runInfo.IsPending)
assert.False(t, runInfo.IsRetryable)
if test.expectedErrorCause != nil {
require.Equal(t, test.expectedErrorCause, errors.Cause(result.Error))
require.Nil(t, result.Value)
} else {
require.NoError(t, result.Error)
require.NotNil(t, result.Value)
var x struct {
Data struct {
Result decimal.Decimal `json:"result"`
} `json:"data"`
}
err = json.Unmarshal([]byte(result.Value.(string)), &x)
require.NoError(t, err)
require.Equal(t, decimal.NewFromInt(9700), x.Data.Result)
}
})`
$DIR/core/services/pipeline/task.bridge_test.go: `task.HelperSetDependencies(cfg.JobPipeline(), cfg.WebServer(), orm, specID, uuid.UUID{}, c)`
$DIR/core/services/pipeline/task.bridge_test.go: `err = json.Unmarshal([]byte(result.Value.(string)), &x)`
$DIR/core/services/pipeline/task.bridge_test.go: `w.Header().Set("Content-Type", "application/json")`
$DIR/core/services/pipeline/task.bridge_test.go: `w.WriteHeader(http.StatusTooManyRequests)`
$DIR/core/services/pipeline/task.bridge_test.go: `resp.SetErrorMessage("could not hit data fetcher")`
$DIR/core/services/pipeline/task.bridge_test.go: `task.HelperSetDependencies(cfg.JobPipeline(), cfg.WebServer(), orm, specID, uuid.UUID{}, c)`
$DIR/core/services/pipeline/task.bridge_test.go: `w.Header().Set("Content-Type", "application/json")`
$DIR/core/services/pipeline/task.bridge_test.go: `w.WriteHeader(http.StatusBadGateway)`
$DIR/core/services/pipeline/task.bridge_test.go: `task.HelperSetDependencies(cfg.JobPipeline(), cfg.WebServer(), orm, specID, uuid.UUID{}, c)`
$DIR/core/services/pipeline/task.bridge_test.go: `task.HelperSetDependencies(cfg.JobPipeline(), cfg.WebServer(), orm, specID, uuid.UUID{}, c)`
$DIR/core/services/pipeline/task.bridge_test.go: `t.Run(test.name, func(t *testing.T) {
var response adapterResponse
err := json.Unmarshal([]byte(test.content), &response)
require.NoError(t, err)
result := response.Result()
require.Equal(t, test.expect.String(), result.String())
})`
$DIR/core/services/pipeline/task.bridge_test.go: `headers = r.Header`
$DIR/core/services/pipeline/task.bridge_test.go: `w.Header().Set("Content-Type", "application/json")`
$DIR/core/services/pipeline/task.bridge_test.go: `w.WriteHeader(http.StatusOK)`
$DIR/core/services/pipeline/task.bridge_test.go: `keys = append(keys, k)`
$DIR/core/services/pipeline/task.bridge_test.go: `sort.Strings(keys)`
$DIR/core/services/pipeline/task.bridge_test.go: `s = append(s, k, v)`
$DIR/core/services/pipeline/task.bridge_test.go: `fmt.Println(k, v)`
$DIR/core/services/pipeline/task.bridge_test.go: `t.Run("sends headers", func(t *testing.T) {
task := pipeline.BridgeTask{
BaseTask: pipeline.NewBaseTask(0, "bridge", nil, nil, 0),
Name: bridge.Name.String(),
RequestData: btcUSDPairing,
Headers: `["X-Header-1", "foo", "X-Header-2", "bar"]`,
}
c := clhttptest.NewTestLocalOnlyHTTPClient()
trORM := pipeline.NewORM(db, logger.TestLogger(t), cfg.JobPipeline().MaxSuccessfulRuns())
specID, err := trORM.CreateSpec(testutils.Context(t), pipeline.Pipeline{}, *models.NewInterval(5 * time.Minute))
require.NoError(t, err)
task.HelperSetDependencies(cfg.JobPipeline(), cfg.WebServer(), orm, specID, uuid.UUID{}, c)
result, runInfo := task.Run(testutils.Context(t), logger.TestLogger(t), pipeline.NewVarsFrom(nil), nil)
assert.False(t, runInfo.IsPending)
assert.Equal(t, `{"fooresponse": 1}`, result.Value)
assert.Nil(t, result.Error)
assert.Equal(t, append(standardHeaders, "X-Header-1", "foo", "X-Header-2", "bar"), allHeaders(headers))
})`
$DIR/core/services/pipeline/task.bridge_test.go: `task.HelperSetDependencies(cfg.JobPipeline(), cfg.WebServer(), orm, specID, uuid.UUID{}, c)`
$DIR/core/services/pipeline/task.bridge_test.go: `t.Run("errors with odd number of headers", func(t *testing.T) {
task := pipeline.BridgeTask{
BaseTask: pipeline.NewBaseTask(0, "bridge", nil, nil, 0),
Name: bridge.Name.String(),
RequestData: btcUSDPairing,
Headers: `["X-Header-1", "foo", "X-Header-2", "bar", "odd one out"]`,
}
c := clhttptest.NewTestLocalOnlyHTTPClient()
trORM := pipeline.NewORM(db, logger.TestLogger(t), cfg.JobPipeline().MaxSuccessfulRuns())
specID, err := trORM.CreateSpec(testutils.Context(t), pipeline.Pipeline{}, *models.NewInterval(5 * time.Minute))
require.NoError(t, err)
task.HelperSetDependencies(cfg.JobPipeline(), cfg.WebServer(), orm, specID, uuid.UUID{}, c)
result, runInfo := task.Run(testutils.Context(t), logger.TestLogger(t), pipeline.NewVarsFrom(nil), nil)
assert.False(t, runInfo.IsPending)
assert.NotNil(t, result.Error)
assert.Equal(t, `headers must have an even number of elements`, result.Error.Error())
assert.Nil(t, result.Value)
})`
$DIR/core/services/pipeline/task.bridge_test.go: `task.HelperSetDependencies(cfg.JobPipeline(), cfg.WebServer(), orm, specID, uuid.UUID{}, c)`
$DIR/core/services/pipeline/task.bridge_test.go: `task.HelperSetDependencies(cfg.JobPipeline(), cfg.WebServer(), orm, specID, uuid.UUID{}, c)`
$DIR/core/services/pipeline/task.bridge_test.go: `c.WebServer.BridgeCacheTTL = commonconfig.MustNewDuration(1 * time.Minute)`
$DIR/core/services/pipeline/task.bridge_test.go: `task.HelperSetDependencies(cfg.JobPipeline(), cfg.WebServer(), orm, specID, uuid.UUID{}, c)`
$DIR/core/services/pipeline/task.bridge_test.go: `_, err = db.ExecContext(ctx, `INSERT INTO bridge_last_value(dot_id, spec_id, value, finished_at)
VALUES($1, $2, $3, $4) ON CONFLICT ON CONSTRAINT bridge_last_value_pkey
DO UPDATE SET value = $3, finished_at = $4;`, task.DotID(), specID, big.NewInt(9700).Bytes(), time.Now())`
$DIR/core/services/pipeline/task.bridge_test.go: `testAdapterResponse.SetStatusCode(http.StatusBadRequest)`
$DIR/core/services/pipeline/task.bridge_test.go: `testAdapterResponse.SetStatusCode(http.StatusOK)`
$DIR/core/services/pipeline/task.bridge_test.go: `testAdapterResponse.SetProviderStatusCode(http.StatusBadRequest)`
$DIR/core/services/pipeline/task.bridge_test.go: `result, runInfo = task.Run(ctx, logger.TestLogger(t), vars, nil)`
$DIR/core/services/pipeline/task.bridge_test.go: `testAdapterResponse.SetStatusCode(http.StatusOK)`
$DIR/core/services/pipeline/task.bridge_test.go: `testAdapterResponse.SetProviderStatusCode(http.StatusOK)`
$DIR/core/services/pipeline/task.bridge_test.go: `testAdapterResponse.SetError("some error")`
$DIR/core/services/pipeline/task.bridge_test.go: `result, runInfo = task.Run(ctx, logger.TestLogger(t), vars, nil)`
$DIR/core/services/pipeline/task.bridge_test.go: `testAdapterResponse.SetStatusCode(http.StatusInternalServerError)`
$DIR/core/services/pipeline/task.bridge_test.go: `result, runInfo = task.Run(ctx, logger.TestLogger(t), vars, nil)`
$DIR/core/services/pipeline/task.bridge_test.go: `c.WebServer.BridgeCacheTTL = commonconfig.MustNewDuration(1 * time.Minute)`
$DIR/core/services/pipeline/task.bridge_test.go: `time.Sleep(time.Second)`
$DIR/core/services/pipeline/task.bridge_test.go: `task.HelperSetDependencies(cfg.JobPipeline(), cfg.WebServer(), orm, specID, uuid.UUID{}, c)`
$DIR/core/services/pipeline/task.bridge_test.go: `_, err = db.ExecContext(ctx, `INSERT INTO bridge_last_value(dot_id, spec_id, value, finished_at)
VALUES($1, $2, $3, $4) ON CONFLICT ON CONSTRAINT bridge_last_value_pkey
DO UPDATE SET value = $3, finished_at = $4;`, task.DotID(), specID, big.NewInt(9700).Bytes(), time.Now())`
$DIR/core/services/pipeline/task.bridge_test.go: `t.Run("pre-cancelled", func(t *testing.T) {
ctx, cancel := context.WithCancel(testutils.Context(t))
cancel() // pre-cancelled
result, runInfo := task.Run(ctx, logger.TestLogger(t), vars, nil)
require.NoError(t, result.Error)
require.NotNil(t, result.Value)
require.False(t, runInfo.IsRetryable)
require.False(t, runInfo.IsPending)
})`
$DIR/core/services/pipeline/task.bridge_test.go: `cancel()`
$DIR/core/services/pipeline/task.bridge_test.go: `t.Cleanup(cancel)`
$DIR/core/services/pipeline/task.bridge_test.go: `.NewSqlxDB(t)`
$DIR/core/services/pipeline/task.bridge_test.go: `.NewTestGeneralConfig(t)`
$DIR/core/services/pipeline/task.bridge_test.go: `.NewServer(fakePriceResponder(t, utils.MustUnmarshalToMap(btcUSDPairing), decimal.NewFromInt(9700), "", nil))`
$DIR/core/services/pipeline/task.bridge_test.go: `.MustUnmarshalToMap(btcUSDPairing)`
$DIR/core/services/pipeline/task.bridge_test.go: `.NewFromInt(9700)`
$DIR/core/services/pipeline/task.bridge_test.go: `.ParseRequestURI(s1.URL)`
$DIR/core/services/pipeline/task.bridge_test.go: `.NewORM(db)`
$DIR/core/services/pipeline/task.bridge_test.go: `.MustCreateBridge(t, db, cltest.BridgeOpts{URL: feedURL.String()})`
$DIR/core/services/pipeline/task.bridge_test.go: `.String()`
$DIR/core/services/pipeline/task.bridge_test.go: `.NewBaseTask(0, "bridge", nil, nil, 0)`
$DIR/core/services/pipeline/task.bridge_test.go: `.Name.String()`
$DIR/core/services/pipeline/task.bridge_test.go: `.NewTestLocalOnlyHTTPClient()`
$DIR/core/services/pipeline/task.bridge_test.go: `.NewORM(db, logger.TestLogger(t), cfg.JobPipeline().MaxSuccessfulRuns())`
$DIR/core/services/pipeline/task.bridge_test.go: `.TestLogger(t)`
$DIR/core/services/pipeline/task.bridge_test.go: `.JobPipeline()`
$DIR/core/services/pipeline/task.bridge_test.go: `.MaxSuccessfulRuns()`
$DIR/core/services/pipeline/task.bridge_test.go: `.CreateSpec(testutils.Context(t), pipeline.Pipeline{}, *models.NewInterval(5 * time.Minute))`
$DIR/core/services/pipeline/task.bridge_test.go: `.Context(t)`
$DIR/core/services/pipeline/task.bridge_test.go: `.NewInterval(5 * time.Minute)`
$DIR/core/services/pipeline/task.bridge_test.go: `.HelperSetDependencies(cfg.JobPipeline(), cfg.WebServer(), orm, specID, uuid.UUID{}, c)`
$DIR/core/services/pipeline/task.bridge_test.go: `.JobPipeline()`
$DIR/core/services/pipeline/task.bridge_test.go: `.WebServer()`
$DIR/core/services/pipeline/task.bridge_test.go: `.Run(testutils.Context(t), logger.TestLogger(t), pipeline.NewVarsFrom(nil), nil)`
$DIR/core/services/pipeline/task.bridge_test.go: `.Context(t)`
$DIR/core/services/pipeline/task.bridge_test.go: `.TestLogger(t)`
$DIR/core/services/pipeline/task.bridge_test.go: `.NewVarsFrom(nil)`
$DIR/core/services/pipeline/task.bridge_test.go: `.Unmarshal([]byte(result.Value.(string)), &x)`
$DIR/core/services/pipeline/task.bridge_test.go: `.NewFromInt(9700)`
$DIR/core/services/pipeline/task.bridge_test.go: `.NewSqlxDB(t)`
$DIR/core/services/pipeline/task.bridge_test.go: `.NewGeneralConfig(t, func(c *chainlink.Config, s *chainlink.Secrets) {})`
$DIR/core/services/pipeline/task.bridge_test.go: `.NewServer(fakeIntermittentlyFailingPriceResponder(t, utils.MustUnmarshalToMap(btcUSDPairing), decimal.NewFromInt(9700), "", nil))`
$DIR/core/services/pipeline/task.bridge_test.go: `.MustUnmarshalToMap(btcUSDPairing)`
$DIR/core/services/pipeline/task.bridge_test.go: `.NewFromInt(9700)`
$DIR/core/services/pipeline/task.bridge_test.go: `.ParseRequestURI(s1.URL)`
$DIR/core/services/pipeline/task.bridge_test.go: `.NewORM(db)`
$DIR/core/services/pipeline/task.bridge_test.go: `.MustCreateBridge(t, db, cltest.BridgeOpts{URL: feedURL.String()})`
$DIR/core/services/pipeline/task.bridge_test.go: `.String()`
$DIR/core/services/pipeline/task.bridge_test.go: `.NewBaseTask(0, "bridge", nil, nil, 0)`
$DIR/core/services/pipeline/task.bridge_test.go: `.Name.String()`
$DIR/core/services/pipeline/task.bridge_test.go: `.NewTestLocalOnlyHTTPClient()`
$DIR/core/services/pipeline/task.bridge_test.go: `.NewORM(db, logger.TestLogger(t), cfg.JobPipeline().MaxSuccessfulRuns())`
$DIR/core/services/pipeline/task.bridge_test.go: `.TestLogger(t)`
$DIR/core/services/pipeline/task.bridge_test.go: `.JobPipeline()`
$DIR/core/services/pipeline/task.bridge_test.go: `.MaxSuccessfulRuns()`
$DIR/core/services/pipeline/task.bridge_test.go: `.CreateSpec(testutils.Context(t), pipeline.Pipeline{}, *models.NewInterval(5 * time.Minute))`
$DIR/core/services/pipeline/task.bridge_test.go: `.Context(t)`
$DIR/core/services/pipeline/task.bridge_test.go: `.NewInterval(5 * time.Minute)`
$DIR/core/services/pipeline/task.bridge_test.go: `.HelperSetDependencies(cfg.JobPipeline(), cfg.WebServer(), orm, specID, uuid.UUID{}, c)`
$DIR/core/services/pipeline/task.bridge_test.go: `.JobPipeline()`
$DIR/core/services/pipeline/task.bridge_test.go: `.WebServer()`
$DIR/core/services/pipeline/task.bridge_test.go: `.Run(testutils.Context(t), logger.TestLogger(t),
pipeline.NewVarsFrom(
map[string]interface{}{
"jobRun": map[string]interface{}{
"meta": map[string]interface{}{
"shouldFail": false,
},
},
},
),
nil)`
$DIR/core/services/pipeline/task.bridge_test.go: `.Context(t)`
$DIR/core/services/pipeline/task.bridge_test.go: `.TestLogger(t)`
$DIR/core/services/pipeline/task.bridge_test.go: `.NewVarsFrom(
map[string]interface{}{
"jobRun": map[string]interface{}{
"meta": map[string]interface{}{
"shouldFail": false,
},
},
},
)`
$DIR/core/services/pipeline/task.bridge_test.go: `.Run(testutils.Context(t), logger.TestLogger(t),
pipeline.NewVarsFrom(
map[string]interface{}{
"jobRun": map[string]interface{}{
"meta": map[string]interface{}{
"shouldFail": true,
},
},
},
),
nil)`
$DIR/core/services/pipeline/task.bridge_test.go: `.Context(t)`
$DIR/core/services/pipeline/task.bridge_test.go: `.TestLogger(t)`
$DIR/core/services/pipeline/task.bridge_test.go: `.NewVarsFrom(
map[string]interface{}{
"jobRun": map[string]interface{}{
"meta": map[string]interface{}{
"shouldFail": true,
},
},
},
)`
$DIR/core/services/pipeline/task.bridge_test.go: `.Context(t)`
$DIR/core/services/pipeline/task.bridge_test.go: `.NewGeneralConfig(t, func(c *chainlink.Config, s *chainlink.Secrets) {
c.WebServer.BridgeCacheTTL = commonconfig.MustNewDuration(30 * time.Second)
})`
$DIR/core/services/pipeline/task.bridge_test.go: `.MustNewDuration(30 * time.Second)`
$DIR/core/services/pipeline/task.bridge_test.go: `.NewServer(fakeIntermittentlyFailingPriceResponder(t, utils.MustUnmarshalToMap(btcUSDPairing), decimal.NewFromInt(9700), "", nil))`
$DIR/core/services/pipeline/task.bridge_test.go: `.MustUnmarshalToMap(btcUSDPairing)`
$DIR/core/services/pipeline/task.bridge_test.go: `.NewFromInt(9700)`
$DIR/core/services/pipeline/task.bridge_test.go: `.ParseRequestURI(s1.URL)`
$DIR/core/services/pipeline/task.bridge_test.go: `.NewSqlxDB(t)`
$DIR/core/services/pipeline/task.bridge_test.go: `.NewORM(db)`
$DIR/core/services/pipeline/task.bridge_test.go: `.MustCreateBridge(t, db, cltest.BridgeOpts{URL: feedURL.String()})`
$DIR/core/services/pipeline/task.bridge_test.go: `.String()`
$DIR/core/services/pipeline/task.bridge_test.go: `.NewBaseTask(0, "bridge", nil, nil, 0)`
$DIR/core/services/pipeline/task.bridge_test.go: `.Name.String()`
$DIR/core/services/pipeline/task.bridge_test.go: `.NewTestLocalOnlyHTTPClient()`
$DIR/core/services/pipeline/task.bridge_test.go: `.NewORM(db, logger.TestLogger(t), cfg.JobPipeline().MaxSuccessfulRuns())`
$DIR/core/services/pipeline/task.bridge_test.go: `.TestLogger(t)`
$DIR/core/services/pipeline/task.bridge_test.go: `.JobPipeline()`
$DIR/core/services/pipeline/task.bridge_test.go: `.MaxSuccessfulRuns()`
$DIR/core/services/pipeline/task.bridge_test.go: `.CreateSpec(testutils.Context(t), pipeline.Pipeline{}, *models.NewInterval(5 * time.Minute))`
$DIR/core/services/pipeline/task.bridge_test.go: `.Context(t)`
$DIR/core/services/pipeline/task.bridge_test.go: `.NewInterval(5 * time.Minute)`
$DIR/core/services/pipeline/task.bridge_test.go: `.HelperSetDependencies(cfg.JobPipeline(), cfg.WebServer(), orm, specID, uuid.UUID{}, c)`
$DIR/core/services/pipeline/task.bridge_test.go: `.JobPipeline()`
$DIR/core/services/pipeline/task.bridge_test.go: `.WebServer()`
$DIR/core/services/pipeline/task.bridge_test.go: `.ExecContext(ctx, `INSERT INTO bridge_last_value(dot_id, spec_id, value, finished_at)
VALUES($1, $2, $3, $4) ON CONFLICT ON CONSTRAINT bridge_last_value_pkey
DO UPDATE SET value = $3, finished_at = $4;`, task.DotID(), specID, big.NewInt(9700).Bytes(), time.Now().Add(-1*time.Minute))`
$DIR/core/services/pipeline/task.bridge_test.go: `.DotID()`
$DIR/core/services/pipeline/task.bridge_test.go: `.NewInt(9700)`
$DIR/core/services/pipeline/task.bridge_test.go: `.Bytes()`
$DIR/core/services/pipeline/task.bridge_test.go: `.Now()`
$DIR/core/services/pipeline/task.bridge_test.go: `.Add(-1*time.Minute)`
$DIR/core/services/pipeline/task.bridge_test.go: `.Run(testutils.Context(t), logger.TestLogger(t),
pipeline.NewVarsFrom(
map[string]interface{}{
"jobRun": map[string]interface{}{
"meta": map[string]interface{}{
"shouldFail": true,
},
},
},
),
nil)`
$DIR/core/services/pipeline/task.bridge_test.go: `.Context(t)`
$DIR/core/services/pipeline/task.bridge_test.go: `.TestLogger(t)`
$DIR/core/services/pipeline/task.bridge_test.go: `.NewVarsFrom(
map[string]interface{}{
"jobRun": map[string]interface{}{
"meta": map[string]interface{}{
"shouldFail": true,
},
},
},
)`
$DIR/core/services/pipeline/task.bridge_test.go: `.ExecContext(ctx, `INSERT INTO bridge_last_value(dot_id, spec_id, value, finished_at)
VALUES($1, $2, $3, $4) ON CONFLICT ON CONSTRAINT bridge_last_value_pkey
DO UPDATE SET value = $3, finished_at = $4;`, task.DotID(), specID, big.NewInt(9700).Bytes(), time.Now().Add(-10*time.Second))`
$DIR/core/services/pipeline/task.bridge_test.go: `.DotID()`
$DIR/core/services/pipeline/task.bridge_test.go: `.NewInt(9700)`
$DIR/core/services/pipeline/task.bridge_test.go: `.Bytes()`
$DIR/core/services/pipeline/task.bridge_test.go: `.Now()`
$DIR/core/services/pipeline/task.bridge_test.go: `.Add(-10*time.Second)`
$DIR/core/services/pipeline/task.bridge_test.go: `.Run(testutils.Context(t), logger.TestLogger(t),
pipeline.NewVarsFrom(
map[string]interface{}{
"jobRun": map[string]interface{}{
"meta": map[string]interface{}{
"shouldFail": true,
},
},
},
),
nil)`
$DIR/core/services/pipeline/task.bridge_test.go: `.Context(t)`
$DIR/core/services/pipeline/task.bridge_test.go: `.TestLogger(t)`
$DIR/core/services/pipeline/task.bridge_test.go: `.NewVarsFrom(
map[string]interface{}{
"jobRun": map[string]interface{}{
"meta": map[string]interface{}{
"shouldFail": true,
},
},
},
)`
$DIR/core/services/pipeline/task.bridge_test.go: `.NewGeneralConfig(t, func(c *chainlink.Config, s *chainlink.Secrets) {
c.WebServer.BridgeCacheTTL = commonconfig.MustNewDuration(0 * time.Second)
})`
$DIR/core/services/pipeline/task.bridge_test.go: `.MustNewDuration(0 * time.Second)`
$DIR/core/services/pipeline/task.bridge_test.go: `.HelperSetDependencies(cfg2.JobPipeline(), cfg2.WebServer(), orm, specID, uuid.UUID{}, c)`
$DIR/core/services/pipeline/task.bridge_test.go: `.JobPipeline()`
$DIR/core/services/pipeline/task.bridge_test.go: `.WebServer()`
$DIR/core/services/pipeline/task.bridge_test.go: `.Run(testutils.Context(t), logger.TestLogger(t),
pipeline.NewVarsFrom(
map[string]interface{}{
"jobRun": map[string]interface{}{
"meta": map[string]interface{}{
"shouldFail": true,
},
},
},
),
nil)`
$DIR/core/services/pipeline/task.bridge_test.go: `.Context(t)`
$DIR/core/services/pipeline/task.bridge_test.go: `.TestLogger(t)`
$DIR/core/services/pipeline/task.bridge_test.go: `.NewVarsFrom(
map[string]interface{}{
"jobRun": map[string]interface{}{
"meta": map[string]interface{}{
"shouldFail": true,
},
},
},
)`
$DIR/core/services/pipeline/task.bridge_test.go: `.NewBaseTask(0, "bridge2", nil, nil, 0)`
$DIR/core/services/pipeline/task.bridge_test.go: `.Name.String()`
$DIR/core/services/pipeline/task.bridge_test.go: `.HelperSetDependencies(cfg2.JobPipeline(), cfg2.WebServer(), orm, specID, uuid.UUID{}, c)`
$DIR/core/services/pipeline/task.bridge_test.go: `.JobPipeline()`
$DIR/core/services/pipeline/task.bridge_test.go: `.WebServer()`
$DIR/core/services/pipeline/task.bridge_test.go: `.ExecContext(ctx, `INSERT INTO bridge_last_value(dot_id, spec_id, value, finished_at)
VALUES($1, $2, $3, $4) ON CONFLICT ON CONSTRAINT bridge_last_value_pkey
DO UPDATE SET value = $3, finished_at = $4;`, task2.DotID(), specID, big.NewInt(9700).Bytes(), time.Now().Add(-32*time.Minute))`
$DIR/core/services/pipeline/task.bridge_test.go: `.DotID()`
$DIR/core/services/pipeline/task.bridge_test.go: `.NewInt(9700)`
$DIR/core/services/pipeline/task.bridge_test.go: `.Bytes()`
$DIR/core/services/pipeline/task.bridge_test.go: `.Now()`
$DIR/core/services/pipeline/task.bridge_test.go: `.Add(-32*time.Minute)`
$DIR/core/services/pipeline/task.bridge_test.go: `.Run(testutils.Context(t), logger.TestLogger(t),
pipeline.NewVarsFrom(
map[string]interface{}{
"jobRun": map[string]interface{}{
"meta": map[string]interface{}{
"shouldFail": true,
},
},
},
),
nil)`
$DIR/core/services/pipeline/task.bridge_test.go: `.Context(t)`
$DIR/core/services/pipeline/task.bridge_test.go: `.TestLogger(t)`
$DIR/core/services/pipeline/task.bridge_test.go: `.NewVarsFrom(
map[string]interface{}{
"jobRun": map[string]interface{}{
"meta": map[string]interface{}{
"shouldFail": true,
},
},
},
)`
$DIR/core/services/pipeline/task.bridge_test.go: `.ExecContext(ctx, `INSERT INTO bridge_last_value(dot_id, spec_id, value, finished_at)
VALUES($1, $2, $3, $4) ON CONFLICT ON CONSTRAINT bridge_last_value_pkey
DO UPDATE SET value = $3, finished_at = $4;`, task2.DotID(), specID, big.NewInt(9700).Bytes(), time.Now().Add(-25*time.Minute))`
$DIR/core/services/pipeline/task.bridge_test.go: `.DotID()`
$DIR/core/services/pipeline/task.bridge_test.go: `.NewInt(9700)`
$DIR/core/services/pipeline/task.bridge_test.go: `.Bytes()`
$DIR/core/services/pipeline/task.bridge_test.go: `.Now()`
$DIR/core/services/pipeline/task.bridge_test.go: `.Add(-25*time.Minute)`
$DIR/core/services/pipeline/task.bridge_test.go: `.Run(testutils.Context(t), logger.TestLogger(t),
pipeline.NewVarsFrom(
map[string]interface{}{
"jobRun": map[string]interface{}{
"meta": map[string]interface{}{
"shouldFail": true,
},
},
},
),
nil)`
$DIR/core/services/pipeline/task.bridge_test.go: `.Context(t)`
$DIR/core/services/pipeline/task.bridge_test.go: `.TestLogger(t)`
$DIR/core/services/pipeline/task.bridge_test.go: `.NewVarsFrom(
map[string]interface{}{
"jobRun": map[string]interface{}{
"meta": map[string]interface{}{
"shouldFail": true,
},
},
},
)`
$DIR/core/services/pipeline/task.bridge_test.go: `.NewInt(9700)`
$DIR/core/services/pipeline/task.bridge_test.go: `.Bytes()`
$DIR/core/services/pipeline/task.bridge_test.go: `.NewSqlxDB(t)`
$DIR/core/services/pipeline/task.bridge_test.go: `.NewTestGeneralConfig(t)`
$DIR/core/services/pipeline/task.bridge_test.go: `.New()`
$DIR/core/services/pipeline/task.bridge_test.go: `.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {
var reqBody adapterRequest
payload, err := io.ReadAll(r.Body)
require.NoError(t, err)
defer r.Body.Close()
err = json.Unmarshal(payload, &reqBody)
require.NoError(t, err)
require.Equal(t, fmt.Sprintf("%s/v2/resume/%v", cfg.WebServer().BridgeResponseURL(), id.String()), reqBody.ResponseURL)
w.Header().Set("Content-Type", "application/json")
// w.Header().Set("X-Chainlink-Pending", "true")
response := map[string]interface{}{"pending": true}
require.NoError(t, json.NewEncoder(w).Encode(response))
})`
$DIR/core/services/pipeline/task.bridge_test.go: `.ReadAll(r.Body)`
$DIR/core/services/pipeline/task.bridge_test.go: `.Unmarshal(payload, &reqBody)`
$DIR/core/services/pipeline/task.bridge_test.go: `.Header()`
$DIR/core/services/pipeline/task.bridge_test.go: `.Set("Content-Type", "application/json")`
$DIR/core/services/pipeline/task.bridge_test.go: `.NewServer(handler)`
$DIR/core/services/pipeline/task.bridge_test.go: `.ParseRequestURI(server.URL)`
$DIR/core/services/pipeline/task.bridge_test.go: `.NewORM(db)`
$DIR/core/services/pipeline/task.bridge_test.go: `.MustCreateBridge(t, db, cltest.BridgeOpts{URL: feedURL.String()})`
$DIR/core/services/pipeline/task.bridge_test.go: `.String()`
$DIR/core/services/pipeline/task.bridge_test.go: `.Name.String()`
$DIR/core/services/pipeline/task.bridge_test.go: `.NewTestLocalOnlyHTTPClient()`
$DIR/core/services/pipeline/task.bridge_test.go: `.NewORM(db, logger.TestLogger(t), cfg.JobPipeline().MaxSuccessfulRuns())`
$DIR/core/services/pipeline/task.bridge_test.go: `.TestLogger(t)`
$DIR/core/services/pipeline/task.bridge_test.go: `.JobPipeline()`
$DIR/core/services/pipeline/task.bridge_test.go: `.MaxSuccessfulRuns()`
$DIR/core/services/pipeline/task.bridge_test.go: `.CreateSpec(testutils.Context(t), pipeline.Pipeline{}, *models.NewInterval(5 * time.Minute))`
$DIR/core/services/pipeline/task.bridge_test.go: `.Context(t)`
$DIR/core/services/pipeline/task.bridge_test.go: `.NewInterval(5 * time.Minute)`
$DIR/core/services/pipeline/task.bridge_test.go: `.HelperSetDependencies(cfg.JobPipeline(), cfg.WebServer(), orm, specID, id, c)`
$DIR/core/services/pipeline/task.bridge_test.go: `.JobPipeline()`
$DIR/core/services/pipeline/task.bridge_test.go: `.WebServer()`
$DIR/core/services/pipeline/task.bridge_test.go: `.Run(testutils.Context(t), logger.TestLogger(t), pipeline.NewVarsFrom(nil), nil)`
$DIR/core/services/pipeline/task.bridge_test.go: `.Context(t)`
$DIR/core/services/pipeline/task.bridge_test.go: `.TestLogger(t)`
$DIR/core/services/pipeline/task.bridge_test.go: `.NewVarsFrom(nil)`
$DIR/core/services/pipeline/task.bridge_test.go: `.NewVarsFrom(map[string]interface{}{"some_data": map[string]interface{}{"foo": 543.21}})`
$DIR/core/services/pipeline/task.bridge_test.go: `.NewVarsFrom(map[string]interface{}{"some_data": map[string]interface{}{"foo": 543.21}})`
$DIR/core/services/pipeline/task.bridge_test.go: `.NewVarsFrom(map[string]interface{}{"some_data": map[string]interface{}{"foo": 543.21}})`
$DIR/core/services/pipeline/task.bridge_test.go: `.NewVarsFrom(map[string]interface{}{"some_data": map[string]interface{}{"foo": 543.21}})`
$DIR/core/services/pipeline/task.bridge_test.go: `.NewVarsFrom(map[string]interface{}{"not_some_data": map[string]interface{}{"foo": 543.21}})`
$DIR/core/services/pipeline/task.bridge_test.go: `.NewVarsFrom(map[string]interface{}{"some_data": 543.21})`
$DIR/core/services/pipeline/task.bridge_test.go: `.NewVarsFrom(map[string]interface{}{"medianize": 543.21})`
$DIR/core/services/pipeline/task.bridge_test.go: `.NewVarsFrom(map[string]interface{}{"medianize": 543.21})`
$DIR/core/services/pipeline/task.bridge_test.go: `.NewVarsFrom(map[string]interface{}{"medianize": 543.21})`
$DIR/core/services/pipeline/task.bridge_test.go: `.NewVarsFrom(map[string]interface{}{"nope": "foo bar"})`
$DIR/core/services/pipeline/task.bridge_test.go: `.Run(test.name, func(t *testing.T) {
t.Parallel()
db := pgtest.NewSqlxDB(t)
cfg := configtest.NewTestGeneralConfig(t)
s1 := httptest.NewServer(fakePriceResponder(t, test.expectedRequestData, decimal.NewFromInt(9700), "", nil))
defer s1.Close()
feedURL, err := url.ParseRequestURI(s1.URL)
require.NoError(t, err)
orm := bridges.NewORM(db)
_, bridge := cltest.MustCreateBridge(t, db, cltest.BridgeOpts{URL: feedURL.String()})
task := pipeline.BridgeTask{
BaseTask: pipeline.NewBaseTask(0, "bridge", nil, nil, 0),
Name: bridge.Name.String(),
RequestData: test.requestData,
IncludeInputAtKey: test.includeInputAtKey,
}
c := clhttptest.NewTestLocalOnlyHTTPClient()
trORM := pipeline.NewORM(db, logger.TestLogger(t), cfg.JobPipeline().MaxSuccessfulRuns())
specID, err := trORM.CreateSpec(testutils.Context(t), pipeline.Pipeline{}, *models.NewInterval(5 * time.Minute))
require.NoError(t, err)
task.HelperSetDependencies(cfg.JobPipeline(), cfg.WebServer(), orm, specID, uuid.UUID{}, c)
result, runInfo := task.Run(testutils.Context(t), logger.TestLogger(t), test.vars, test.inputs)
assert.False(t, runInfo.IsPending)
assert.False(t, runInfo.IsRetryable)
if test.expectedErrorCause != nil {
require.Equal(t, test.expectedErrorCause, errors.Cause(result.Error))
if test.expectedErrorContains != "" {
require.Contains(t, result.Error.Error(), test.expectedErrorContains)
}
} else {
require.NoError(t, result.Error)
require.NotNil(t, result.Value)
var x struct {
Data struct {
Result decimal.Decimal `json:"result"`
} `json:"data"`
}
err = json.Unmarshal([]byte(result.Value.(string)), &x)
require.NoError(t, err)
require.Equal(t, decimal.NewFromInt(9700), x.Data.Result)
}
})`
$DIR/core/services/pipeline/task.bridge_test.go: `.NewSqlxDB(t)`
$DIR/core/services/pipeline/task.bridge_test.go: `.NewTestGeneralConfig(t)`
$DIR/core/services/pipeline/task.bridge_test.go: `.NewServer(fakePriceResponder(t, test.expectedRequestData, decimal.NewFromInt(9700), "", nil))`
$DIR/core/services/pipeline/task.bridge_test.go: `.NewFromInt(9700)`
$DIR/core/services/pipeline/task.bridge_test.go: `.ParseRequestURI(s1.URL)`
$DIR/core/services/pipeline/task.bridge_test.go: `.NewORM(db)`
$DIR/core/services/pipeline/task.bridge_test.go: `.MustCreateBridge(t, db, cltest.BridgeOpts{URL: feedURL.String()})`
$DIR/core/services/pipeline/task.bridge_test.go: `.String()`
$DIR/core/services/pipeline/task.bridge_test.go: `.NewBaseTask(0, "bridge", nil, nil, 0)`
$DIR/core/services/pipeline/task.bridge_test.go: `.Name.String()`
$DIR/core/services/pipeline/task.bridge_test.go: `.NewTestLocalOnlyHTTPClient()`
$DIR/core/services/pipeline/task.bridge_test.go: `.NewORM(db, logger.TestLogger(t), cfg.JobPipeline().MaxSuccessfulRuns())`
$DIR/core/services/pipeline/task.bridge_test.go: `.TestLogger(t)`
$DIR/core/services/pipeline/task.bridge_test.go: `.JobPipeline()`
$DIR/core/services/pipeline/task.bridge_test.go: `.MaxSuccessfulRuns()`
$DIR/core/services/pipeline/task.bridge_test.go: `.CreateSpec(testutils.Context(t), pipeline.Pipeline{}, *models.NewInterval(5 * time.Minute))`
$DIR/core/services/pipeline/task.bridge_test.go: `.Context(t)`
$DIR/core/services/pipeline/task.bridge_test.go: `.NewInterval(5 * time.Minute)`
$DIR/core/services/pipeline/task.bridge_test.go: `.HelperSetDependencies(cfg.JobPipeline(), cfg.WebServer(), orm, specID, uuid.UUID{}, c)`
$DIR/core/services/pipeline/task.bridge_test.go: `.JobPipeline()`
$DIR/core/services/pipeline/task.bridge_test.go: `.WebServer()`
$DIR/core/services/pipeline/task.bridge_test.go: `.Run(testutils.Context(t), logger.TestLogger(t), test.vars, test.inputs)`
$DIR/core/services/pipeline/task.bridge_test.go: `.Context(t)`
$DIR/core/services/pipeline/task.bridge_test.go: `.TestLogger(t)`
$DIR/core/services/pipeline/task.bridge_test.go: `.Unmarshal([]byte(result.Value.(string)), &x)`
$DIR/core/services/pipeline/task.bridge_test.go: `.NewSqlxDB(t)`
$DIR/core/services/pipeline/task.bridge_test.go: `.NewTestGeneralConfig(t)`
$DIR/core/services/pipeline/task.bridge_test.go: `.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {
var req adapterRequest
body, _ := io.ReadAll(r.Body)
err := json.Unmarshal(body, &req)
require.NoError(t, err)
require.Equal(t, float64(10), req.Meta["latestAnswer"])
require.Equal(t, float64(1616447984), req.Meta["updatedAt"])
w.Header().Set("Content-Type", "application/json")
require.NoError(t, json.NewEncoder(w).Encode(empty))
httpCalled.Store(true)
})`
$DIR/core/services/pipeline/task.bridge_test.go: `.ReadAll(r.Body)`
$DIR/core/services/pipeline/task.bridge_test.go: `.Unmarshal(body, &req)`
$DIR/core/services/pipeline/task.bridge_test.go: `.Header()`
$DIR/core/services/pipeline/task.bridge_test.go: `.Set("Content-Type", "application/json")`
$DIR/core/services/pipeline/task.bridge_test.go: `.Store(true)`
$DIR/core/services/pipeline/task.bridge_test.go: `.MarshalBridgeMetaData(big.NewInt(10), big.NewInt(1616447984))`
$DIR/core/services/pipeline/task.bridge_test.go: `.NewInt(10)`
$DIR/core/services/pipeline/task.bridge_test.go: `.NewInt(1616447984)`
$DIR/core/services/pipeline/task.bridge_test.go: `.NewServer(handler)`
$DIR/core/services/pipeline/task.bridge_test.go: `.ParseRequestURI(s1.URL)`
$DIR/core/services/pipeline/task.bridge_test.go: `.NewORM(db)`
$DIR/core/services/pipeline/task.bridge_test.go: `.MustCreateBridge(t, db, cltest.BridgeOpts{URL: feedURL.String()})`
$DIR/core/services/pipeline/task.bridge_test.go: `.String()`
$DIR/core/services/pipeline/task.bridge_test.go: `.NewBaseTask(0, "bridge", nil, nil, 0)`
$DIR/core/services/pipeline/task.bridge_test.go: `.Name.String()`
$DIR/core/services/pipeline/task.bridge_test.go: `.NewTestLocalOnlyHTTPClient()`
$DIR/core/services/pipeline/task.bridge_test.go: `.NewORM(db, logger.TestLogger(t), cfg.JobPipeline().MaxSuccessfulRuns())`
$DIR/core/services/pipeline/task.bridge_test.go: `.TestLogger(t)`
$DIR/core/services/pipeline/task.bridge_test.go: `.JobPipeline()`
$DIR/core/services/pipeline/task.bridge_test.go: `.MaxSuccessfulRuns()`
$DIR/core/services/pipeline/task.bridge_test.go: `.CreateSpec(testutils.Context(t), pipeline.Pipeline{}, *models.NewInterval(5 * time.Minute))`
$DIR/core/services/pipeline/task.bridge_test.go: `.Context(t)`
$DIR/core/services/pipeline/task.bridge_test.go: `.NewInterval(5 * time.Minute)`
$DIR/core/services/pipeline/task.bridge_test.go: `.HelperSetDependencies(cfg.JobPipeline(), cfg.WebServer(), orm, specID, uuid.UUID{}, c)`
$DIR/core/services/pipeline/task.bridge_test.go: `.JobPipeline()`
$DIR/core/services/pipeline/task.bridge_test.go: `.WebServer()`
$DIR/core/services/pipeline/task.bridge_test.go: `.Run(testutils.Context(t), logger.TestLogger(t), pipeline.NewVarsFrom(map[string]interface{}{"jobRun": mp}), nil)`
$DIR/core/services/pipeline/task.bridge_test.go: `.Context(t)`
$DIR/core/services/pipeline/task.bridge_test.go: `.TestLogger(t)`
$DIR/core/services/pipeline/task.bridge_test.go: `.NewVarsFrom(map[string]interface{}{"jobRun": mp})`
$DIR/core/services/pipeline/task.bridge_test.go: `.Load()`
$DIR/core/services/pipeline/task.bridge_test.go: `.New("foo")`
$DIR/core/services/pipeline/task.bridge_test.go: `.NewFromFloat(123.45)`
$DIR/core/services/pipeline/task.bridge_test.go: `.NewFromFloat(123.45)`
$DIR/core/services/pipeline/task.bridge_test.go: `.Run(test.name, func(t *testing.T) {
db := pgtest.NewSqlxDB(t)
cfg := configtest.NewTestGeneralConfig(t)
s1 := httptest.NewServer(fakePriceResponder(t, utils.MustUnmarshalToMap(btcUSDPairing), decimal.NewFromInt(9700), test.includeInputAtKey, test.expectedInput))
defer s1.Close()
feedURL, err := url.ParseRequestURI(s1.URL)
require.NoError(t, err)
orm := bridges.NewORM(db)
_, bridge := cltest.MustCreateBridge(t, db, cltest.BridgeOpts{URL: feedURL.String()})
task := pipeline.BridgeTask{
BaseTask: pipeline.NewBaseTask(0, "bridge", nil, nil, 0),
Name: bridge.Name.String(),
RequestData: btcUSDPairing,
IncludeInputAtKey: test.includeInputAtKey,
}
c := clhttptest.NewTestLocalOnlyHTTPClient()
trORM := pipeline.NewORM(db, logger.TestLogger(t), cfg.JobPipeline().MaxSuccessfulRuns())
specID, err := trORM.CreateSpec(testutils.Context(t), pipeline.Pipeline{}, *models.NewInterval(5 * time.Minute))
require.NoError(t, err)
task.HelperSetDependencies(cfg.JobPipeline(), cfg.WebServer(), orm, specID, uuid.UUID{}, c)
result, runInfo := task.Run(testutils.Context(t), logger.TestLogger(t), pipeline.NewVarsFrom(nil), test.inputs)
assert.False(t, runInfo.IsPending)
assert.False(t, runInfo.IsRetryable)
if test.expectedErrorCause != nil {
require.Equal(t, test.expectedErrorCause, errors.Cause(result.Error))
require.Nil(t, result.Value)
} else {
require.NoError(t, result.Error)
require.NotNil(t, result.Value)
var x struct {
Data struct {
Result decimal.Decimal `json:"result"`
} `json:"data"`
}
err = json.Unmarshal([]byte(result.Value.(string)), &x)
require.NoError(t, err)
require.Equal(t, decimal.NewFromInt(9700), x.Data.Result)
}
})`
$DIR/core/services/pipeline/task.bridge_test.go: `.NewSqlxDB(t)`
$DIR/core/services/pipeline/task.bridge_test.go: `.NewTestGeneralConfig(t)`
$DIR/core/services/pipeline/task.bridge_test.go: `.NewServer(fakePriceResponder(t, utils.MustUnmarshalToMap(btcUSDPairing), decimal.NewFromInt(9700), test.includeInputAtKey, test.expectedInput))`
$DIR/core/services/pipeline/task.bridge_test.go: `.MustUnmarshalToMap(btcUSDPairing)`
$DIR/core/services/pipeline/task.bridge_test.go: `.NewFromInt(9700)`
$DIR/core/services/pipeline/task.bridge_test.go: `.ParseRequestURI(s1.URL)`
$DIR/core/services/pipeline/task.bridge_test.go: `.NewORM(db)`
$DIR/core/services/pipeline/task.bridge_test.go: `.MustCreateBridge(t, db, cltest.BridgeOpts{URL: feedURL.String()})`
$DIR/core/services/pipeline/task.bridge_test.go: `.String()`
$DIR/core/services/pipeline/task.bridge_test.go: `.NewBaseTask(0, "bridge", nil, nil, 0)`
$DIR/core/services/pipeline/task.bridge_test.go: `.Name.String()`
$DIR/core/services/pipeline/task.bridge_test.go: `.NewTestLocalOnlyHTTPClient()`
$DIR/core/services/pipeline/task.bridge_test.go: `.NewORM(db, logger.TestLogger(t), cfg.JobPipeline().MaxSuccessfulRuns())`
$DIR/core/services/pipeline/task.bridge_test.go: `.TestLogger(t)`
$DIR/core/services/pipeline/task.bridge_test.go: `.JobPipeline()`
$DIR/core/services/pipeline/task.bridge_test.go: `.MaxSuccessfulRuns()`
$DIR/core/services/pipeline/task.bridge_test.go: `.CreateSpec(testutils.Context(t), pipeline.Pipeline{}, *models.NewInterval(5 * time.Minute))`
$DIR/core/services/pipeline/task.bridge_test.go: `.Context(t)`
$DIR/core/services/pipeline/task.bridge_test.go: `.NewInterval(5 * time.Minute)`
$DIR/core/services/pipeline/task.bridge_test.go: `.HelperSetDependencies(cfg.JobPipeline(), cfg.WebServer(), orm, specID, uuid.UUID{}, c)`
$DIR/core/services/pipeline/task.bridge_test.go: `.JobPipeline()`
$DIR/core/services/pipeline/task.bridge_test.go: `.WebServer()`
$DIR/core/services/pipeline/task.bridge_test.go: `.Run(testutils.Context(t), logger.TestLogger(t), pipeline.NewVarsFrom(nil), test.inputs)`
$DIR/core/services/pipeline/task.bridge_test.go: `.Context(t)`
$DIR/core/services/pipeline/task.bridge_test.go: `.TestLogger(t)`
$DIR/core/services/pipeline/task.bridge_test.go: `.NewVarsFrom(nil)`
$DIR/core/services/pipeline/task.bridge_test.go: `.Unmarshal([]byte(result.Value.(string)), &x)`
$DIR/core/services/pipeline/task.bridge_test.go: `.NewSqlxDB(t)`
$DIR/core/services/pipeline/task.bridge_test.go: `.NewTestGeneralConfig(t)`
$DIR/core/services/pipeline/task.bridge_test.go: `.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {
w.Header().Set("Content-Type", "application/json")
w.WriteHeader(http.StatusTooManyRequests)
resp := &adapterResponse{}
resp.SetErrorMessage("could not hit data fetcher")
err := json.NewEncoder(w).Encode(resp)
require.NoError(t, err)
})`
$DIR/core/services/pipeline/task.bridge_test.go: `.Header()`
$DIR/core/services/pipeline/task.bridge_test.go: `.Set("Content-Type", "application/json")`
$DIR/core/services/pipeline/task.bridge_test.go: `.WriteHeader(http.StatusTooManyRequests)`
$DIR/core/services/pipeline/task.bridge_test.go: `.SetErrorMessage("could not hit data fetcher")`
$DIR/core/services/pipeline/task.bridge_test.go: `.NewEncoder(w)`
$DIR/core/services/pipeline/task.bridge_test.go: `.Encode(resp)`
$DIR/core/services/pipeline/task.bridge_test.go: `.NewServer(handler)`
$DIR/core/services/pipeline/task.bridge_test.go: `.ParseRequestURI(server.URL)`
$DIR/core/services/pipeline/task.bridge_test.go: `.NewORM(db)`
$DIR/core/services/pipeline/task.bridge_test.go: `.MustCreateBridge(t, db, cltest.BridgeOpts{URL: feedURL.String()})`
$DIR/core/services/pipeline/task.bridge_test.go: `.String()`
$DIR/core/services/pipeline/task.bridge_test.go: `.Name.String()`
$DIR/core/services/pipeline/task.bridge_test.go: `.NewTestLocalOnlyHTTPClient()`
$DIR/core/services/pipeline/task.bridge_test.go: `.NewORM(db, logger.TestLogger(t), cfg.JobPipeline().MaxSuccessfulRuns())`
$DIR/core/services/pipeline/task.bridge_test.go: `.TestLogger(t)`
$DIR/core/services/pipeline/task.bridge_test.go: `.JobPipeline()`
$DIR/core/services/pipeline/task.bridge_test.go: `.MaxSuccessfulRuns()`
$DIR/core/services/pipeline/task.bridge_test.go: `.CreateSpec(testutils.Context(t), pipeline.Pipeline{}, *models.NewInterval(5 * time.Minute))`
$DIR/core/services/pipeline/task.bridge_test.go: `.Context(t)`
$DIR/core/services/pipeline/task.bridge_test.go: `.NewInterval(5 * time.Minute)`
$DIR/core/services/pipeline/task.bridge_test.go: `.HelperSetDependencies(cfg.JobPipeline(), cfg.WebServer(), orm, specID, uuid.UUID{}, c)`
$DIR/core/services/pipeline/task.bridge_test.go: `.JobPipeline()`
$DIR/core/services/pipeline/task.bridge_test.go: `.WebServer()`
$DIR/core/services/pipeline/task.bridge_test.go: `.Run(testutils.Context(t), logger.TestLogger(t), pipeline.NewVarsFrom(nil), nil)`
$DIR/core/services/pipeline/task.bridge_test.go: `.Context(t)`
$DIR/core/services/pipeline/task.bridge_test.go: `.TestLogger(t)`
$DIR/core/services/pipeline/task.bridge_test.go: `.NewVarsFrom(nil)`
$DIR/core/services/pipeline/task.bridge_test.go: `.NewSqlxDB(t)`
$DIR/core/services/pipeline/task.bridge_test.go: `.NewTestGeneralConfig(t)`
$DIR/core/services/pipeline/task.bridge_test.go: `.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {
w.Header().Set("Content-Type", "application/json")
w.WriteHeader(http.StatusBadGateway)
_, err := w.Write([]byte(mustReadFile(t, "../../testdata/apiresponses/coinmarketcap.error.json")))
require.NoError(t, err)
})`
$DIR/core/services/pipeline/task.bridge_test.go: `.Header()`
$DIR/core/services/pipeline/task.bridge_test.go: `.Set("Content-Type", "application/json")`
$DIR/core/services/pipeline/task.bridge_test.go: `.WriteHeader(http.StatusBadGateway)`
$DIR/core/services/pipeline/task.bridge_test.go: `.Write([]byte(mustReadFile(t, "../../testdata/apiresponses/coinmarketcap.error.json")))`
$DIR/core/services/pipeline/task.bridge_test.go: `.NewServer(handler)`
$DIR/core/services/pipeline/task.bridge_test.go: `.ParseRequestURI(server.URL)`
$DIR/core/services/pipeline/task.bridge_test.go: `.NewORM(db)`
$DIR/core/services/pipeline/task.bridge_test.go: `.MustCreateBridge(t, db, cltest.BridgeOpts{URL: feedURL.String()})`
$DIR/core/services/pipeline/task.bridge_test.go: `.String()`
$DIR/core/services/pipeline/task.bridge_test.go: `.Name.String()`
$DIR/core/services/pipeline/task.bridge_test.go: `.NewTestLocalOnlyHTTPClient()`
$DIR/core/services/pipeline/task.bridge_test.go: `.NewORM(db, logger.TestLogger(t), cfg.JobPipeline().MaxSuccessfulRuns())`
$DIR/core/services/pipeline/task.bridge_test.go: `.TestLogger(t)`
$DIR/core/services/pipeline/task.bridge_test.go: `.JobPipeline()`
$DIR/core/services/pipeline/task.bridge_test.go: `.MaxSuccessfulRuns()`
$DIR/core/services/pipeline/task.bridge_test.go: `.CreateSpec(testutils.Context(t), pipeline.Pipeline{}, *models.NewInterval(5 * time.Minute))`
$DIR/core/services/pipeline/task.bridge_test.go: `.Context(t)`
$DIR/core/services/pipeline/task.bridge_test.go: `.NewInterval(5 * time.Minute)`
$DIR/core/services/pipeline/task.bridge_test.go: `.HelperSetDependencies(cfg.JobPipeline(), cfg.WebServer(), orm, specID, uuid.UUID{}, c)`
$DIR/core/services/pipeline/task.bridge_test.go: `.JobPipeline()`
$DIR/core/services/pipeline/task.bridge_test.go: `.WebServer()`
$DIR/core/services/pipeline/task.bridge_test.go: `.Run(testutils.Context(t), logger.TestLogger(t), pipeline.NewVarsFrom(nil), nil)`
$DIR/core/services/pipeline/task.bridge_test.go: `.Context(t)`
$DIR/core/services/pipeline/task.bridge_test.go: `.TestLogger(t)`
$DIR/core/services/pipeline/task.bridge_test.go: `.NewVarsFrom(nil)`
$DIR/core/services/pipeline/task.bridge_test.go: `.NewSqlxDB(t)`
$DIR/core/services/pipeline/task.bridge_test.go: `.NewTestGeneralConfig(t)`
$DIR/core/services/pipeline/task.bridge_test.go: `.NewTestLocalOnlyHTTPClient()`
$DIR/core/services/pipeline/task.bridge_test.go: `.NewORM(db)`
$DIR/core/services/pipeline/task.bridge_test.go: `.NewORM(db, logger.TestLogger(t), cfg.JobPipeline().MaxSuccessfulRuns())`
$DIR/core/services/pipeline/task.bridge_test.go: `.TestLogger(t)`
$DIR/core/services/pipeline/task.bridge_test.go: `.JobPipeline()`
$DIR/core/services/pipeline/task.bridge_test.go: `.MaxSuccessfulRuns()`
$DIR/core/services/pipeline/task.bridge_test.go: `.CreateSpec(testutils.Context(t), pipeline.Pipeline{}, *models.NewInterval(5 * time.Minute))`
$DIR/core/services/pipeline/task.bridge_test.go: `.Context(t)`
$DIR/core/services/pipeline/task.bridge_test.go: `.NewInterval(5 * time.Minute)`
$DIR/core/services/pipeline/task.bridge_test.go: `.HelperSetDependencies(cfg.JobPipeline(), cfg.WebServer(), orm, specID, uuid.UUID{}, c)`
$DIR/core/services/pipeline/task.bridge_test.go: `.JobPipeline()`
$DIR/core/services/pipeline/task.bridge_test.go: `.WebServer()`
$DIR/core/services/pipeline/task.bridge_test.go: `.Run(testutils.Context(t), logger.TestLogger(t), pipeline.NewVarsFrom(nil), nil)`
$DIR/core/services/pipeline/task.bridge_test.go: `.Context(t)`
$DIR/core/services/pipeline/task.bridge_test.go: `.TestLogger(t)`
$DIR/core/services/pipeline/task.bridge_test.go: `.NewVarsFrom(nil)`
$DIR/core/services/pipeline/task.bridge_test.go: `.NewFromFloat(123.456789)`
$DIR/core/services/pipeline/task.bridge_test.go: `.NewFromFloat(306.52036004)`
$DIR/core/services/pipeline/task.bridge_test.go: `.NewFromFloat(305.5574615)`
$DIR/core/services/pipeline/task.bridge_test.go: `.NewFromFloat(305.76)`
$DIR/core/services/pipeline/task.bridge_test.go: `.Run(test.name, func(t *testing.T) {
var response adapterResponse
err := json.Unmarshal([]byte(test.content), &response)
require.NoError(t, err)
result := response.Result()
require.Equal(t, test.expect.String(), result.String())
})`
$DIR/core/services/pipeline/task.bridge_test.go: `.Unmarshal([]byte(test.content), &response)`
$DIR/core/services/pipeline/task.bridge_test.go: `.Result()`
$DIR/core/services/pipeline/task.bridge_test.go: `.NewSqlxDB(t)`
$DIR/core/services/pipeline/task.bridge_test.go: `.NewTestGeneralConfig(t)`
$DIR/core/services/pipeline/task.bridge_test.go: `.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {
headers = r.Header
w.Header().Set("Content-Type", "application/json")
w.WriteHeader(http.StatusOK)
_, err := w.Write([]byte(`{"fooresponse": 1}`))
require.NoError(t, err)
})`
$DIR/core/services/pipeline/task.bridge_test.go: `.Header()`
$DIR/core/services/pipeline/task.bridge_test.go: `.Set("Content-Type", "application/json")`
$DIR/core/services/pipeline/task.bridge_test.go: `.WriteHeader(http.StatusOK)`
$DIR/core/services/pipeline/task.bridge_test.go: `.Write([]byte(`{"fooresponse": 1}`))`
$DIR/core/services/pipeline/task.bridge_test.go: `.NewServer(handler)`
$DIR/core/services/pipeline/task.bridge_test.go: `.ParseRequestURI(server.URL)`
$DIR/core/services/pipeline/task.bridge_test.go: `.NewORM(db)`
$DIR/core/services/pipeline/task.bridge_test.go: `.MustCreateBridge(t, db, cltest.BridgeOpts{URL: bridgeURL.String()})`
$DIR/core/services/pipeline/task.bridge_test.go: `.String()`
$DIR/core/services/pipeline/task.bridge_test.go: `.Strings(keys)`
$DIR/core/services/pipeline/task.bridge_test.go: `.Get(k)`
$DIR/core/services/pipeline/task.bridge_test.go: `.Println(k, v)`
$DIR/core/services/pipeline/task.bridge_test.go: `.Run("sends headers", func(t *testing.T) {
task := pipeline.BridgeTask{
BaseTask: pipeline.NewBaseTask(0, "bridge", nil, nil, 0),
Name: bridge.Name.String(),
RequestData: btcUSDPairing,
Headers: `["X-Header-1", "foo", "X-Header-2", "bar"]`,
}
c := clhttptest.NewTestLocalOnlyHTTPClient()
trORM := pipeline.NewORM(db, logger.TestLogger(t), cfg.JobPipeline().MaxSuccessfulRuns())
specID, err := trORM.CreateSpec(testutils.Context(t), pipeline.Pipeline{}, *models.NewInterval(5 * time.Minute))
require.NoError(t, err)
task.HelperSetDependencies(cfg.JobPipeline(), cfg.WebServer(), orm, specID, uuid.UUID{}, c)
result, runInfo := task.Run(testutils.Context(t), logger.TestLogger(t), pipeline.NewVarsFrom(nil), nil)
assert.False(t, runInfo.IsPending)
assert.Equal(t, `{"fooresponse": 1}`, result.Value)
assert.Nil(t, result.Error)
assert.Equal(t, append(standardHeaders, "X-Header-1", "foo", "X-Header-2", "bar"), allHeaders(headers))
})`
$DIR/core/services/pipeline/task.bridge_test.go: `.NewBaseTask(0, "bridge", nil, nil, 0)`
$DIR/core/services/pipeline/task.bridge_test.go: `.Name.String()`
$DIR/core/services/pipeline/task.bridge_test.go: `.NewTestLocalOnlyHTTPClient()`
$DIR/core/services/pipeline/task.bridge_test.go: `.NewORM(db, logger.TestLogger(t), cfg.JobPipeline().MaxSuccessfulRuns())`
$DIR/core/services/pipeline/task.bridge_test.go: `.TestLogger(t)`
$DIR/core/services/pipeline/task.bridge_test.go: `.JobPipeline()`
$DIR/core/services/pipeline/task.bridge_test.go: `.MaxSuccessfulRuns()`
$DIR/core/services/pipeline/task.bridge_test.go: `.CreateSpec(testutils.Context(t), pipeline.Pipeline{}, *models.NewInterval(5 * time.Minute))`
$DIR/core/services/pipeline/task.bridge_test.go: `.Context(t)`
$DIR/core/services/pipeline/task.bridge_test.go: `.NewInterval(5 * time.Minute)`
$DIR/core/services/pipeline/task.bridge_test.go: `.HelperSetDependencies(cfg.JobPipeline(), cfg.WebServer(), orm, specID, uuid.UUID{}, c)`
$DIR/core/services/pipeline/task.bridge_test.go: `.JobPipeline()`
$DIR/core/services/pipeline/task.bridge_test.go: `.WebServer()`
$DIR/core/services/pipeline/task.bridge_test.go: `.Run(testutils.Context(t), logger.TestLogger(t), pipeline.NewVarsFrom(nil), nil)`
$DIR/core/services/pipeline/task.bridge_test.go: `.Context(t)`
$DIR/core/services/pipeline/task.bridge_test.go: `.TestLogger(t)`
$DIR/core/services/pipeline/task.bridge_test.go: `.NewVarsFrom(nil)`
$DIR/core/services/pipeline/task.bridge_test.go: `.Run("errors with odd number of headers", func(t *testing.T) {
task := pipeline.BridgeTask{
BaseTask: pipeline.NewBaseTask(0, "bridge", nil, nil, 0),
Name: bridge.Name.String(),
RequestData: btcUSDPairing,
Headers: `["X-Header-1", "foo", "X-Header-2", "bar", "odd one out"]`,
}
c := clhttptest.NewTestLocalOnlyHTTPClient()
trORM := pipeline.NewORM(db, logger.TestLogger(t), cfg.JobPipeline().MaxSuccessfulRuns())
specID, err := trORM.CreateSpec(testutils.Context(t), pipeline.Pipeline{}, *models.NewInterval(5 * time.Minute))
require.NoError(t, err)
task.HelperSetDependencies(cfg.JobPipeline(), cfg.WebServer(), orm, specID, uuid.UUID{}, c)
result, runInfo := task.Run(testutils.Context(t), logger.TestLogger(t), pipeline.NewVarsFrom(nil), nil)
assert.False(t, runInfo.IsPending)
assert.NotNil(t, result.Error)
assert.Equal(t, `headers must have an even number of elements`, result.Error.Error())
assert.Nil(t, result.Value)
})`
$DIR/core/services/pipeline/task.bridge_test.go: `.NewBaseTask(0, "bridge", nil, nil, 0)`
$DIR/core/services/pipeline/task.bridge_test.go: `.Name.String()`
$DIR/core/services/pipeline/task.bridge_test.go: `.NewTestLocalOnlyHTTPClient()`
$DIR/core/services/pipeline/task.bridge_test.go: `.NewORM(db, logger.TestLogger(t), cfg.JobPipeline().MaxSuccessfulRuns())`
$DIR/core/services/pipeline/task.bridge_test.go: `.TestLogger(t)`
$DIR/core/services/pipeline/task.bridge_test.go: `.JobPipeline()`
$DIR/core/services/pipeline/task.bridge_test.go: `.MaxSuccessfulRuns()`
$DIR/core/services/pipeline/task.bridge_test.go: `.CreateSpec(testutils.Context(t), pipeline.Pipeline{}, *models.NewInterval(5 * time.Minute))`
$DIR/core/services/pipeline/task.bridge_test.go: `.Context(t)`
$DIR/core/services/pipeline/task.bridge_test.go: `.NewInterval(5 * time.Minute)`
$DIR/core/services/pipeline/task.bridge_test.go: `.HelperSetDependencies(cfg.JobPipeline(), cfg.WebServer(), orm, specID, uuid.UUID{}, c)`
$DIR/core/services/pipeline/task.bridge_test.go: `.JobPipeline()`
$DIR/core/services/pipeline/task.bridge_test.go: `.WebServer()`
$DIR/core/services/pipeline/task.bridge_test.go: `.Run(testutils.Context(t), logger.TestLogger(t), pipeline.NewVarsFrom(nil), nil)`
$DIR/core/services/pipeline/task.bridge_test.go: `.Context(t)`
$DIR/core/services/pipeline/task.bridge_test.go: `.TestLogger(t)`
$DIR/core/services/pipeline/task.bridge_test.go: `.NewVarsFrom(nil)`
$DIR/core/services/pipeline/task.bridge_test.go: `.NewBaseTask(0, "bridge", nil, nil, 0)`
$DIR/core/services/pipeline/task.bridge_test.go: `.Name.String()`
$DIR/core/services/pipeline/task.bridge_test.go: `.NewTestLocalOnlyHTTPClient()`
$DIR/core/services/pipeline/task.bridge_test.go: `.NewORM(db, logger.TestLogger(t), cfg.JobPipeline().MaxSuccessfulRuns())`
$DIR/core/services/pipeline/task.bridge_test.go: `.TestLogger(t)`
$DIR/core/services/pipeline/task.bridge_test.go: `.JobPipeline()`
$DIR/core/services/pipeline/task.bridge_test.go: `.MaxSuccessfulRuns()`
$DIR/core/services/pipeline/task.bridge_test.go: `.CreateSpec(testutils.Context(t), pipeline.Pipeline{}, *models.NewInterval(5 * time.Minute))`
$DIR/core/services/pipeline/task.bridge_test.go: `.Context(t)`
$DIR/core/services/pipeline/task.bridge_test.go: `.NewInterval(5 * time.Minute)`
$DIR/core/services/pipeline/task.bridge_test.go: `.HelperSetDependencies(cfg.JobPipeline(), cfg.WebServer(), orm, specID, uuid.UUID{}, c)`
$DIR/core/services/pipeline/task.bridge_test.go: `.JobPipeline()`
$DIR/core/services/pipeline/task.bridge_test.go: `.WebServer()`
$DIR/core/services/pipeline/task.bridge_test.go: `.Run(testutils.Context(t), logger.TestLogger(t), pipeline.NewVarsFrom(nil), nil)`
$DIR/core/services/pipeline/task.bridge_test.go: `.Context(t)`
$DIR/core/services/pipeline/task.bridge_test.go: `.TestLogger(t)`
$DIR/core/services/pipeline/task.bridge_test.go: `.NewVarsFrom(nil)`
$DIR/core/services/pipeline/task.bridge_test.go: `.Context(t)`
$DIR/core/services/pipeline/task.bridge_test.go: `.NewSqlxDB(t)`
$DIR/core/services/pipeline/task.bridge_test.go: `.NewGeneralConfig(t, func(c *chainlink.Config, s *chainlink.Secrets) {
c.WebServer.BridgeCacheTTL = commonconfig.MustNewDuration(1 * time.Minute)
})`
$DIR/core/services/pipeline/task.bridge_test.go: `.MustNewDuration(1 * time.Minute)`
$DIR/core/services/pipeline/task.bridge_test.go: `.NewServer(
http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {
err := json.NewEncoder(w).Encode(testAdapterResponse)
require.NoError(t, err)
}))`
$DIR/core/services/pipeline/task.bridge_test.go: `.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {
err := json.NewEncoder(w).Encode(testAdapterResponse)
require.NoError(t, err)
})`
$DIR/core/services/pipeline/task.bridge_test.go: `.NewEncoder(w)`
$DIR/core/services/pipeline/task.bridge_test.go: `.Encode(testAdapterResponse)`
$DIR/core/services/pipeline/task.bridge_test.go: `.ParseRequestURI(s1.URL)`
$DIR/core/services/pipeline/task.bridge_test.go: `.NewORM(db)`
$DIR/core/services/pipeline/task.bridge_test.go: `.MustCreateBridge(t, db, cltest.BridgeOpts{URL: feedURL.String()})`
$DIR/core/services/pipeline/task.bridge_test.go: `.String()`
$DIR/core/services/pipeline/task.bridge_test.go: `.NewBaseTask(0, "bridge", nil, nil, 0)`
$DIR/core/services/pipeline/task.bridge_test.go: `.Name.String()`
$DIR/core/services/pipeline/task.bridge_test.go: `.NewTestLocalOnlyHTTPClient()`
$DIR/core/services/pipeline/task.bridge_test.go: `.NewORM(db, logger.TestLogger(t), cfg.JobPipeline().MaxSuccessfulRuns())`
$DIR/core/services/pipeline/task.bridge_test.go: `.TestLogger(t)`
$DIR/core/services/pipeline/task.bridge_test.go: `.JobPipeline()`
$DIR/core/services/pipeline/task.bridge_test.go: `.MaxSuccessfulRuns()`
$DIR/core/services/pipeline/task.bridge_test.go: `.CreateSpec(ctx, pipeline.Pipeline{}, *models.NewInterval(5 * time.Minute))`
$DIR/core/services/pipeline/task.bridge_test.go: `.NewInterval(5 * time.Minute)`
$DIR/core/services/pipeline/task.bridge_test.go: `.HelperSetDependencies(cfg.JobPipeline(), cfg.WebServer(), orm, specID, uuid.UUID{}, c)`
$DIR/core/services/pipeline/task.bridge_test.go: `.JobPipeline()`
$DIR/core/services/pipeline/task.bridge_test.go: `.WebServer()`
$DIR/core/services/pipeline/task.bridge_test.go: `.ExecContext(ctx, `INSERT INTO bridge_last_value(dot_id, spec_id, value, finished_at)
VALUES($1, $2, $3, $4) ON CONFLICT ON CONSTRAINT bridge_last_value_pkey
DO UPDATE SET value = $3, finished_at = $4;`, task.DotID(), specID, big.NewInt(9700).Bytes(), time.Now())`
$DIR/core/services/pipeline/task.bridge_test.go: `.DotID()`
$DIR/core/services/pipeline/task.bridge_test.go: `.NewInt(9700)`
$DIR/core/services/pipeline/task.bridge_test.go: `.Bytes()`
$DIR/core/services/pipeline/task.bridge_test.go: `.Now()`
$DIR/core/services/pipeline/task.bridge_test.go: `.NewVarsFrom(
map[string]interface{}{
"jobRun": map[string]interface{}{
"meta": map[string]interface{}{
"shouldFail": true,
},
},
},
)`
$DIR/core/services/pipeline/task.bridge_test.go: `.SetStatusCode(http.StatusBadRequest)`
$DIR/core/services/pipeline/task.bridge_test.go: `.Run(ctx, logger.TestLogger(t), vars, nil)`
$DIR/core/services/pipeline/task.bridge_test.go: `.TestLogger(t)`
$DIR/core/services/pipeline/task.bridge_test.go: `.SetStatusCode(http.StatusOK)`
$DIR/core/services/pipeline/task.bridge_test.go: `.SetProviderStatusCode(http.StatusBadRequest)`
$DIR/core/services/pipeline/task.bridge_test.go: `.Run(ctx, logger.TestLogger(t), vars, nil)`
$DIR/core/services/pipeline/task.bridge_test.go: `.TestLogger(t)`
$DIR/core/services/pipeline/task.bridge_test.go: `.SetStatusCode(http.StatusOK)`
$DIR/core/services/pipeline/task.bridge_test.go: `.SetProviderStatusCode(http.StatusOK)`
$DIR/core/services/pipeline/task.bridge_test.go: `.SetError("some error")`
$DIR/core/services/pipeline/task.bridge_test.go: `.Run(ctx, logger.TestLogger(t), vars, nil)`
$DIR/core/services/pipeline/task.bridge_test.go: `.TestLogger(t)`
$DIR/core/services/pipeline/task.bridge_test.go: `.SetStatusCode(http.StatusInternalServerError)`
$DIR/core/services/pipeline/task.bridge_test.go: `.Run(ctx, logger.TestLogger(t), vars, nil)`
$DIR/core/services/pipeline/task.bridge_test.go: `.TestLogger(t)`
$DIR/core/services/pipeline/task.bridge_test.go: `.Context(t)`
$DIR/core/services/pipeline/task.bridge_test.go: `.NewSqlxDB(t)`
$DIR/core/services/pipeline/task.bridge_test.go: `.NewGeneralConfig(t, func(c *chainlink.Config, s *chainlink.Secrets) {
c.WebServer.BridgeCacheTTL = commonconfig.MustNewDuration(1 * time.Minute)
})`
$DIR/core/services/pipeline/task.bridge_test.go: `.MustNewDuration(1 * time.Minute)`
$DIR/core/services/pipeline/task.bridge_test.go: `.NewServer(
http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {
time.Sleep(time.Second) // delay enough to time-out
}))`
$DIR/core/services/pipeline/task.bridge_test.go: `.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {
time.Sleep(time.Second) // delay enough to time-out
})`
$DIR/core/services/pipeline/task.bridge_test.go: `.Sleep(time.Second)`
$DIR/core/services/pipeline/task.bridge_test.go: `.ParseRequestURI(s1.URL)`
$DIR/core/services/pipeline/task.bridge_test.go: `.NewORM(db)`
$DIR/core/services/pipeline/task.bridge_test.go: `.MustCreateBridge(t, db, cltest.BridgeOpts{URL: feedURL.String()})`
$DIR/core/services/pipeline/task.bridge_test.go: `.String()`
$DIR/core/services/pipeline/task.bridge_test.go: `.NewBaseTask(0, "bridge", nil, nil, 0)`
$DIR/core/services/pipeline/task.bridge_test.go: `.Name.String()`
$DIR/core/services/pipeline/task.bridge_test.go: `.NewTestLocalOnlyHTTPClient()`
$DIR/core/services/pipeline/task.bridge_test.go: `.NewORM(db, logger.TestLogger(t), cfg.JobPipeline().MaxSuccessfulRuns())`
$DIR/core/services/pipeline/task.bridge_test.go: `.TestLogger(t)`
$DIR/core/services/pipeline/task.bridge_test.go: `.JobPipeline()`
$DIR/core/services/pipeline/task.bridge_test.go: `.MaxSuccessfulRuns()`
$DIR/core/services/pipeline/task.bridge_test.go: `.CreateSpec(ctx, pipeline.Pipeline{}, *models.NewInterval(5 * time.Minute))`
$DIR/core/services/pipeline/task.bridge_test.go: `.NewInterval(5 * time.Minute)`
$DIR/core/services/pipeline/task.bridge_test.go: `.HelperSetDependencies(cfg.JobPipeline(), cfg.WebServer(), orm, specID, uuid.UUID{}, c)`
$DIR/core/services/pipeline/task.bridge_test.go: `.JobPipeline()`
$DIR/core/services/pipeline/task.bridge_test.go: `.WebServer()`
$DIR/core/services/pipeline/task.bridge_test.go: `.ExecContext(ctx, `INSERT INTO bridge_last_value(dot_id, spec_id, value, finished_at)
VALUES($1, $2, $3, $4) ON CONFLICT ON CONSTRAINT bridge_last_value_pkey
DO UPDATE SET value = $3, finished_at = $4;`, task.DotID(), specID, big.NewInt(9700).Bytes(), time.Now())`
$DIR/core/services/pipeline/task.bridge_test.go: `.DotID()`
$DIR/core/services/pipeline/task.bridge_test.go: `.NewInt(9700)`
$DIR/core/services/pipeline/task.bridge_test.go: `.Bytes()`
$DIR/core/services/pipeline/task.bridge_test.go: `.Now()`
$DIR/core/services/pipeline/task.bridge_test.go: `.NewVarsFrom(
map[string]interface{}{
"jobRun": map[string]interface{}{
"meta": map[string]interface{}{
"shouldFail": true,
},
},
},
)`
$DIR/core/services/pipeline/task.bridge_test.go: `.Run("pre-cancelled", func(t *testing.T) {
ctx, cancel := context.WithCancel(testutils.Context(t))
cancel() // pre-cancelled
result, runInfo := task.Run(ctx, logger.TestLogger(t), vars, nil)
require.NoError(t, result.Error)
require.NotNil(t, result.Value)
require.False(t, runInfo.IsRetryable)
require.False(t, runInfo.IsPending)
})`
$DIR/core/services/pipeline/task.bridge_test.go: `.WithCancel(testutils.Context(t))`
$DIR/core/services/pipeline/task.bridge_test.go: `.Context(t)`
$DIR/core/services/pipeline/task.bridge_test.go: `.Run(ctx, logger.TestLogger(t), vars, nil)`
$DIR/core/services/pipeline/task.bridge_test.go: `.TestLogger(t)`
$DIR/core/services/pipeline/task.bridge_test.go: `.WithTimeout(testutils.Context(t), time.Millisecond)`
$DIR/core/services/pipeline/task.bridge_test.go: `.Context(t)`
$DIR/core/services/pipeline/task.bridge_test.go: `.Cleanup(cancel)`
$DIR/core/services/pipeline/task.bridge_test.go: `.Run(ctx, logger.TestLogger(t), vars, nil)`
$DIR/core/services/pipeline/task.bridge_test.go: `.TestLogger(t)`
$DIR/core/services/pipeline/task.cborparse_test.go: `t.Run(test.name, func(t *testing.T) {
task := pipeline.CBORParseTask{
BaseTask: pipeline.NewBaseTask(0, "cbor", nil, nil, 0),
Data: test.data,
}
result, runInfo := task.Run(testutils.Context(t), logger.TestLogger(t), test.vars, test.inputs)
assert.False(t, runInfo.IsPending)
assert.False(t, runInfo.IsRetryable)
if test.expectedErrorCause != nil {
assert.Equal(t, test.expectedErrorCause, errors.Cause(result.Error))
assert.Nil(t, result.Value)
if test.expectedErrorContains != "" {
assert.Contains(t, result.Error.Error(), test.expectedErrorContains)
}
} else {
assert.NoError(t, result.Error)
assert.Equal(t, test.expected, result.Value)
}
})`
$DIR/core/services/pipeline/task.cborparse_test.go: `.NewVarsFrom(map[string]interface{}{
"foo": "0xbf6375726c781a68747470733a2f2f657468657270726963652e636f6d2f61706964706174689f66726563656e7463757364ffff",
})`
$DIR/core/services/pipeline/task.cborparse_test.go: `.NewVarsFrom(map[string]interface{}{
"foo": "0xbf6375726c781a68747470733a2f2f657468657270726963652e636f6d2f61706964706174689f66726563656e7463757364ffff000000",
})`
$DIR/core/services/pipeline/task.cborparse_test.go: `.NewVarsFrom(map[string]interface{}{
"foo": "0xbf657461736b739f6868747470706f7374ff66706172616d73bf636d73676f68656c6c6f5f636861696e6c696e6b6375726c75687474703a2f2f6c6f63616c686f73743a36363930ffff",
})`
$DIR/core/services/pipeline/task.cborparse_test.go: `.NewVarsFrom(map[string]interface{}{
"foo": "0x" +
"bf" + // map(*)
"67" + // text(7)
"6269676e756d73" + // "bignums"
"9f" + // array(*)
"c2" + // tag(2) == unsigned bignum
"5820" + // bytes(32)
"0000000000000000000000000000000000000000000000010000000000000000" +
// int(18446744073709551616)
"c2" + // tag(2) == unsigned bignum
"5820" + // bytes(32)
"4000000000000000000000000000000000000000000000000000000000000000" +
// int(28948022309329048855892746252171976963317496166410141009864396001978282409984)
"c3" + // tag(3) == signed bignum
"5820" + // bytes(32)
"0000000000000000000000000000000000000000000000010000000000000000" +
// int(18446744073709551616)
"c3" + // tag(3) == signed bignum
"5820" + // bytes(32)
"3fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff" +
// int(28948022309329048855892746252171976963317496166410141009864396001978282409983)
"ff" + // primitive(*)
"ff", // primitive(*)
})`
$DIR/core/services/pipeline/task.cborparse_test.go: `.MustParseBigInt(t, "18446744073709551616")`
$DIR/core/services/pipeline/task.cborparse_test.go: `.MustParseBigInt(t, "28948022309329048855892746252171976963317496166410141009864396001978282409984")`
$DIR/core/services/pipeline/task.cborparse_test.go: `.MustParseBigInt(t, "-18446744073709551617")`
$DIR/core/services/pipeline/task.cborparse_test.go: `.MustParseBigInt(t, "-28948022309329048855892746252171976963317496166410141009864396001978282409984")`
$DIR/core/services/pipeline/task.cborparse_test.go: `.NewVarsFrom(map[string]interface{}{
"foo": nil,
})`
$DIR/core/services/pipeline/task.cborparse_test.go: `.NewVarsFrom(nil)`
$DIR/core/services/pipeline/task.cborparse_test.go: `.New("foo")`
$DIR/core/services/pipeline/task.cborparse_test.go: `.Run(test.name, func(t *testing.T) {
task := pipeline.CBORParseTask{
BaseTask: pipeline.NewBaseTask(0, "cbor", nil, nil, 0),
Data: test.data,
}
result, runInfo := task.Run(testutils.Context(t), logger.TestLogger(t), test.vars, test.inputs)
assert.False(t, runInfo.IsPending)
assert.False(t, runInfo.IsRetryable)
if test.expectedErrorCause != nil {
assert.Equal(t, test.expectedErrorCause, errors.Cause(result.Error))
assert.Nil(t, result.Value)
if test.expectedErrorContains != "" {
assert.Contains(t, result.Error.Error(), test.expectedErrorContains)
}
} else {
assert.NoError(t, result.Error)
assert.Equal(t, test.expected, result.Value)
}
})`
$DIR/core/services/pipeline/task.cborparse_test.go: `.NewBaseTask(0, "cbor", nil, nil, 0)`
$DIR/core/services/pipeline/task.cborparse_test.go: `.Run(testutils.Context(t), logger.TestLogger(t), test.vars, test.inputs)`
$DIR/core/services/pipeline/task.cborparse_test.go: `.Context(t)`
$DIR/core/services/pipeline/task.cborparse_test.go: `.TestLogger(t)`
$DIR/core/services/pipeline/task.conditional_test.go: `t.Run(test.name, func(t *testing.T) {
t.Run("without vars", func(t *testing.T) {
vars := pipeline.NewVarsFrom(nil)
task := pipeline.ConditionalTask{
BaseTask: pipeline.NewBaseTask(0, "task", nil, nil, 0),
Data: test.input.(string)}
result, runInfo := task.Run(testutils.Context(t), logger.TestLogger(t), vars, []pipeline.Result{{Value: test.input}})
assert.False(t, runInfo.IsPending)
assert.False(t, runInfo.IsRetryable)
if test.expectErr {
require.Error(t, result.Error)
require.Equal(t, nil, result.Value)
} else {
require.NoError(t, result.Error)
require.Equal(t, true, result.Value.(bool))
}
})
t.Run("with vars", func(t *testing.T) {
vars := pipeline.NewVarsFrom(map[string]interface{}{
"foo": map[string]interface{}{"bar": test.input},
})
task := pipeline.ConditionalTask{
BaseTask: pipeline.NewBaseTask(0, "task", nil, nil, 0),
Data: "$(foo.bar)",
}
result, runInfo := task.Run(testutils.Context(t), logger.TestLogger(t), vars, []pipeline.Result{})
assert.False(t, runInfo.IsPending)
assert.False(t, runInfo.IsRetryable)
if test.expectErr {
require.Error(t, result.Error)
require.Equal(t, nil, result.Value)
} else {
require.NoError(t, result.Error)
require.Equal(t, true, result.Value.(bool))
}
})
})`
$DIR/core/services/pipeline/task.conditional_test.go: `t.Run("without vars", func(t *testing.T) {
vars := pipeline.NewVarsFrom(nil)
task := pipeline.ConditionalTask{
BaseTask: pipeline.NewBaseTask(0, "task", nil, nil, 0),
Data: test.input.(string)}
result, runInfo := task.Run(testutils.Context(t), logger.TestLogger(t), vars, []pipeline.Result{{Value: test.input}})
assert.False(t, runInfo.IsPending)
assert.False(t, runInfo.IsRetryable)
if test.expectErr {
require.Error(t, result.Error)
require.Equal(t, nil, result.Value)
} else {
require.NoError(t, result.Error)
require.Equal(t, true, result.Value.(bool))
}
})`
$DIR/core/services/pipeline/task.conditional_test.go: `t.Run("with vars", func(t *testing.T) {
vars := pipeline.NewVarsFrom(map[string]interface{}{
"foo": map[string]interface{}{"bar": test.input},
})
task := pipeline.ConditionalTask{
BaseTask: pipeline.NewBaseTask(0, "task", nil, nil, 0),
Data: "$(foo.bar)",
}
result, runInfo := task.Run(testutils.Context(t), logger.TestLogger(t), vars, []pipeline.Result{})
assert.False(t, runInfo.IsPending)
assert.False(t, runInfo.IsRetryable)
if test.expectErr {
require.Error(t, result.Error)
require.Equal(t, nil, result.Value)
} else {
require.NoError(t, result.Error)
require.Equal(t, true, result.Value.(bool))
}
})`
$DIR/core/services/pipeline/task.conditional_test.go: `.Run(test.name, func(t *testing.T) {
t.Run("without vars", func(t *testing.T) {
vars := pipeline.NewVarsFrom(nil)
task := pipeline.ConditionalTask{
BaseTask: pipeline.NewBaseTask(0, "task", nil, nil, 0),
Data: test.input.(string)}
result, runInfo := task.Run(testutils.Context(t), logger.TestLogger(t), vars, []pipeline.Result{{Value: test.input}})
assert.False(t, runInfo.IsPending)
assert.False(t, runInfo.IsRetryable)
if test.expectErr {
require.Error(t, result.Error)
require.Equal(t, nil, result.Value)
} else {
require.NoError(t, result.Error)
require.Equal(t, true, result.Value.(bool))
}
})
t.Run("with vars", func(t *testing.T) {
vars := pipeline.NewVarsFrom(map[string]interface{}{
"foo": map[string]interface{}{"bar": test.input},
})
task := pipeline.ConditionalTask{
BaseTask: pipeline.NewBaseTask(0, "task", nil, nil, 0),
Data: "$(foo.bar)",
}
result, runInfo := task.Run(testutils.Context(t), logger.TestLogger(t), vars, []pipeline.Result{})
assert.False(t, runInfo.IsPending)
assert.False(t, runInfo.IsRetryable)
if test.expectErr {
require.Error(t, result.Error)
require.Equal(t, nil, result.Value)
} else {
require.NoError(t, result.Error)
require.Equal(t, true, result.Value.(bool))
}
})
})`
$DIR/core/services/pipeline/task.conditional_test.go: `.Run("without vars", func(t *testing.T) {
vars := pipeline.NewVarsFrom(nil)
task := pipeline.ConditionalTask{
BaseTask: pipeline.NewBaseTask(0, "task", nil, nil, 0),
Data: test.input.(string)}
result, runInfo := task.Run(testutils.Context(t), logger.TestLogger(t), vars, []pipeline.Result{{Value: test.input}})
assert.False(t, runInfo.IsPending)
assert.False(t, runInfo.IsRetryable)
if test.expectErr {
require.Error(t, result.Error)
require.Equal(t, nil, result.Value)
} else {
require.NoError(t, result.Error)
require.Equal(t, true, result.Value.(bool))
}
})`
$DIR/core/services/pipeline/task.conditional_test.go: `.NewVarsFrom(nil)`
$DIR/core/services/pipeline/task.conditional_test.go: `.NewBaseTask(0, "task", nil, nil, 0)`
$DIR/core/services/pipeline/task.conditional_test.go: `.Run(testutils.Context(t), logger.TestLogger(t), vars, []pipeline.Result{{Value: test.input}})`
$DIR/core/services/pipeline/task.conditional_test.go: `.Context(t)`
$DIR/core/services/pipeline/task.conditional_test.go: `.TestLogger(t)`
$DIR/core/services/pipeline/task.conditional_test.go: `.Run("with vars", func(t *testing.T) {
vars := pipeline.NewVarsFrom(map[string]interface{}{
"foo": map[string]interface{}{"bar": test.input},
})
task := pipeline.ConditionalTask{
BaseTask: pipeline.NewBaseTask(0, "task", nil, nil, 0),
Data: "$(foo.bar)",
}
result, runInfo := task.Run(testutils.Context(t), logger.TestLogger(t), vars, []pipeline.Result{})
assert.False(t, runInfo.IsPending)
assert.False(t, runInfo.IsRetryable)
if test.expectErr {
require.Error(t, result.Error)
require.Equal(t, nil, result.Value)
} else {
require.NoError(t, result.Error)
require.Equal(t, true, result.Value.(bool))
}
})`
$DIR/core/services/pipeline/task.conditional_test.go: `.NewVarsFrom(map[string]interface{}{
"foo": map[string]interface{}{"bar": test.input},
})`
$DIR/core/services/pipeline/task.conditional_test.go: `.NewBaseTask(0, "task", nil, nil, 0)`
$DIR/core/services/pipeline/task.conditional_test.go: `.Run(testutils.Context(t), logger.TestLogger(t), vars, []pipeline.Result{})`
$DIR/core/services/pipeline/task.conditional_test.go: `.Context(t)`
$DIR/core/services/pipeline/task.conditional_test.go: `.TestLogger(t)`
$DIR/core/services/pipeline/task.divide_test.go: `t.Run(test.name, func(t *testing.T) {
t.Run("without vars through job DAG", func(t *testing.T) {
vars := pipeline.NewVarsFrom(nil)
task := pipeline.DivideTask{
BaseTask: pipeline.NewBaseTask(0, "task", nil, nil, 0),
Divisor: test.divisor,
Precision: test.precision,
}
assertOK(task.Run(testutils.Context(t), logger.TestLogger(t), vars, []pipeline.Result{{Value: test.input}}))
})
t.Run("without vars through input param", func(t *testing.T) {
vars := pipeline.NewVarsFrom(nil)
task := pipeline.DivideTask{
BaseTask: pipeline.NewBaseTask(0, "task", nil, nil, 0),
Input: fmt.Sprintf("%v", test.input),
Divisor: test.divisor,
Precision: test.precision,
}
assertOK(task.Run(testutils.Context(t), logger.TestLogger(t), vars, []pipeline.Result{}))
})
t.Run("with vars", func(t *testing.T) {
vars := pipeline.NewVarsFrom(map[string]interface{}{
"foo": map[string]interface{}{"bar": test.input},
"chain": map[string]interface{}{"link": test.divisor},
"sergey": map[string]interface{}{"steve": test.precision},
})
task := pipeline.DivideTask{
BaseTask: pipeline.NewBaseTask(0, "task", nil, nil, 0),
Input: "$(foo.bar)",
Divisor: "$(chain.link)",
Precision: "$(sergey.steve)",
}
assertOK(task.Run(testutils.Context(t), logger.TestLogger(t), vars, []pipeline.Result{}))
})
})`
$DIR/core/services/pipeline/task.divide_test.go: `t.Run("without vars through job DAG", func(t *testing.T) {
vars := pipeline.NewVarsFrom(nil)
task := pipeline.DivideTask{
BaseTask: pipeline.NewBaseTask(0, "task", nil, nil, 0),
Divisor: test.divisor,
Precision: test.precision,
}
assertOK(task.Run(testutils.Context(t), logger.TestLogger(t), vars, []pipeline.Result{{Value: test.input}}))
})`
$DIR/core/services/pipeline/task.divide_test.go: `assertOK(task.Run(testutils.Context(t), logger.TestLogger(t), vars, []pipeline.Result{{Value: test.input}}))`
$DIR/core/services/pipeline/task.divide_test.go: `t.Run("without vars through input param", func(t *testing.T) {
vars := pipeline.NewVarsFrom(nil)
task := pipeline.DivideTask{
BaseTask: pipeline.NewBaseTask(0, "task", nil, nil, 0),
Input: fmt.Sprintf("%v", test.input),
Divisor: test.divisor,
Precision: test.precision,
}
assertOK(task.Run(testutils.Context(t), logger.TestLogger(t), vars, []pipeline.Result{}))
})`
$DIR/core/services/pipeline/task.divide_test.go: `assertOK(task.Run(testutils.Context(t), logger.TestLogger(t), vars, []pipeline.Result{}))`
$DIR/core/services/pipeline/task.divide_test.go: `t.Run("with vars", func(t *testing.T) {
vars := pipeline.NewVarsFrom(map[string]interface{}{
"foo": map[string]interface{}{"bar": test.input},
"chain": map[string]interface{}{"link": test.divisor},
"sergey": map[string]interface{}{"steve": test.precision},
})
task := pipeline.DivideTask{
BaseTask: pipeline.NewBaseTask(0, "task", nil, nil, 0),
Input: "$(foo.bar)",
Divisor: "$(chain.link)",
Precision: "$(sergey.steve)",
}
assertOK(task.Run(testutils.Context(t), logger.TestLogger(t), vars, []pipeline.Result{}))
})`
$DIR/core/services/pipeline/task.divide_test.go: `assertOK(task.Run(testutils.Context(t), logger.TestLogger(t), vars, []pipeline.Result{}))`
$DIR/core/services/pipeline/task.divide_test.go: `t.Run(test.name, func(t *testing.T) {
task := pipeline.DivideTask{
BaseTask: pipeline.NewBaseTask(0, "task", nil, nil, 0),
Input: test.input,
Divisor: test.divisor,
}
result, runInfo := task.Run(testutils.Context(t), logger.TestLogger(t), test.vars, test.inputs)
assert.False(t, runInfo.IsPending)
assert.False(t, runInfo.IsRetryable)
require.Equal(t, test.wantErrorCause, errors.Cause(result.Error))
if test.wantErrorContains != "" {
require.Contains(t, result.Error.Error(), test.wantErrorContains)
}
})`
$DIR/core/services/pipeline/task.divide_test.go: `.Run(test.name, func(t *testing.T) {
t.Run("without vars through job DAG", func(t *testing.T) {
vars := pipeline.NewVarsFrom(nil)
task := pipeline.DivideTask{
BaseTask: pipeline.NewBaseTask(0, "task", nil, nil, 0),
Divisor: test.divisor,
Precision: test.precision,
}
assertOK(task.Run(testutils.Context(t), logger.TestLogger(t), vars, []pipeline.Result{{Value: test.input}}))
})
t.Run("without vars through input param", func(t *testing.T) {
vars := pipeline.NewVarsFrom(nil)
task := pipeline.DivideTask{
BaseTask: pipeline.NewBaseTask(0, "task", nil, nil, 0),
Input: fmt.Sprintf("%v", test.input),
Divisor: test.divisor,
Precision: test.precision,
}
assertOK(task.Run(testutils.Context(t), logger.TestLogger(t), vars, []pipeline.Result{}))
})
t.Run("with vars", func(t *testing.T) {
vars := pipeline.NewVarsFrom(map[string]interface{}{
"foo": map[string]interface{}{"bar": test.input},
"chain": map[string]interface{}{"link": test.divisor},
"sergey": map[string]interface{}{"steve": test.precision},
})
task := pipeline.DivideTask{
BaseTask: pipeline.NewBaseTask(0, "task", nil, nil, 0),
Input: "$(foo.bar)",
Divisor: "$(chain.link)",
Precision: "$(sergey.steve)",
}
assertOK(task.Run(testutils.Context(t), logger.TestLogger(t), vars, []pipeline.Result{}))
})
})`
$DIR/core/services/pipeline/task.divide_test.go: `.Run("without vars through job DAG", func(t *testing.T) {
vars := pipeline.NewVarsFrom(nil)
task := pipeline.DivideTask{
BaseTask: pipeline.NewBaseTask(0, "task", nil, nil, 0),
Divisor: test.divisor,
Precision: test.precision,
}
assertOK(task.Run(testutils.Context(t), logger.TestLogger(t), vars, []pipeline.Result{{Value: test.input}}))
})`
$DIR/core/services/pipeline/task.divide_test.go: `.NewVarsFrom(nil)`
$DIR/core/services/pipeline/task.divide_test.go: `.NewBaseTask(0, "task", nil, nil, 0)`
$DIR/core/services/pipeline/task.divide_test.go: `.Run(testutils.Context(t), logger.TestLogger(t), vars, []pipeline.Result{{Value: test.input}})`
$DIR/core/services/pipeline/task.divide_test.go: `.Context(t)`
$DIR/core/services/pipeline/task.divide_test.go: `.TestLogger(t)`
$DIR/core/services/pipeline/task.divide_test.go: `.Run("without vars through input param", func(t *testing.T) {
vars := pipeline.NewVarsFrom(nil)
task := pipeline.DivideTask{
BaseTask: pipeline.NewBaseTask(0, "task", nil, nil, 0),
Input: fmt.Sprintf("%v", test.input),
Divisor: test.divisor,
Precision: test.precision,
}
assertOK(task.Run(testutils.Context(t), logger.TestLogger(t), vars, []pipeline.Result{}))
})`
$DIR/core/services/pipeline/task.divide_test.go: `.NewVarsFrom(nil)`
$DIR/core/services/pipeline/task.divide_test.go: `.NewBaseTask(0, "task", nil, nil, 0)`
$DIR/core/services/pipeline/task.divide_test.go: `.Sprintf("%v", test.input)`
$DIR/core/services/pipeline/task.divide_test.go: `.Run(testutils.Context(t), logger.TestLogger(t), vars, []pipeline.Result{})`
$DIR/core/services/pipeline/task.divide_test.go: `.Context(t)`
$DIR/core/services/pipeline/task.divide_test.go: `.TestLogger(t)`
$DIR/core/services/pipeline/task.divide_test.go: `.Run("with vars", func(t *testing.T) {
vars := pipeline.NewVarsFrom(map[string]interface{}{
"foo": map[string]interface{}{"bar": test.input},
"chain": map[string]interface{}{"link": test.divisor},
"sergey": map[string]interface{}{"steve": test.precision},
})
task := pipeline.DivideTask{
BaseTask: pipeline.NewBaseTask(0, "task", nil, nil, 0),
Input: "$(foo.bar)",
Divisor: "$(chain.link)",
Precision: "$(sergey.steve)",
}
assertOK(task.Run(testutils.Context(t), logger.TestLogger(t), vars, []pipeline.Result{}))
})`
$DIR/core/services/pipeline/task.divide_test.go: `.NewVarsFrom(map[string]interface{}{
"foo": map[string]interface{}{"bar": test.input},
"chain": map[string]interface{}{"link": test.divisor},
"sergey": map[string]interface{}{"steve": test.precision},
})`
$DIR/core/services/pipeline/task.divide_test.go: `.NewBaseTask(0, "task", nil, nil, 0)`
$DIR/core/services/pipeline/task.divide_test.go: `.Run(testutils.Context(t), logger.TestLogger(t), vars, []pipeline.Result{})`
$DIR/core/services/pipeline/task.divide_test.go: `.Context(t)`
$DIR/core/services/pipeline/task.divide_test.go: `.TestLogger(t)`
$DIR/core/services/pipeline/task.divide_test.go: `.NewVarsFrom(nil)`
$DIR/core/services/pipeline/task.divide_test.go: `.NewVarsFrom(map[string]interface{}{"foo": map[string]interface{}{"chain": "link"}})`
$DIR/core/services/pipeline/task.divide_test.go: `.NewVarsFrom(nil)`
$DIR/core/services/pipeline/task.divide_test.go: `.NewVarsFrom(map[string]interface{}{"foo": []interface{}{"chain", "link"}})`
$DIR/core/services/pipeline/task.divide_test.go: `.NewVarsFrom(nil)`
$DIR/core/services/pipeline/task.divide_test.go: `.NewVarsFrom(nil)`
$DIR/core/services/pipeline/task.divide_test.go: `.New("uh oh")`
$DIR/core/services/pipeline/task.divide_test.go: `.NewVarsFrom(nil)`
$DIR/core/services/pipeline/task.divide_test.go: `.NewVarsFrom(nil)`
$DIR/core/services/pipeline/task.divide_test.go: `.Run(test.name, func(t *testing.T) {
task := pipeline.DivideTask{
BaseTask: pipeline.NewBaseTask(0, "task", nil, nil, 0),
Input: test.input,
Divisor: test.divisor,
}
result, runInfo := task.Run(testutils.Context(t), logger.TestLogger(t), test.vars, test.inputs)
assert.False(t, runInfo.IsPending)
assert.False(t, runInfo.IsRetryable)
require.Equal(t, test.wantErrorCause, errors.Cause(result.Error))
if test.wantErrorContains != "" {
require.Contains(t, result.Error.Error(), test.wantErrorContains)
}
})`
$DIR/core/services/pipeline/task.divide_test.go: `.NewBaseTask(0, "task", nil, nil, 0)`
$DIR/core/services/pipeline/task.divide_test.go: `.Run(testutils.Context(t), logger.TestLogger(t), test.vars, test.inputs)`
$DIR/core/services/pipeline/task.divide_test.go: `.Context(t)`
$DIR/core/services/pipeline/task.divide_test.go: `.TestLogger(t)`
$DIR/core/services/pipeline/task.divide_test.go: `.NewFromString("6.34e-01")`
$DIR/core/services/pipeline/task.divide_test.go: `.NewFromString("6.34e-10")`
$DIR/core/services/pipeline/task.divide_test.go: `.NewBaseTask(0, "task", nil, nil, 0)`
$DIR/core/services/pipeline/task.divide_test.go: `.Sprintf("%d", math.MaxInt32)`
$DIR/core/services/pipeline/task.divide_test.go: `.NewVarsFrom(map[string]interface{}{
"a": d1,
"b": d2,
})`
$DIR/core/services/pipeline/task.divide_test.go: `.Run(testutils.Context(t), logger.TestLogger(t), vars, []pipeline.Result{{Value: "123"}})`
$DIR/core/services/pipeline/task.divide_test.go: `.Context(t)`
$DIR/core/services/pipeline/task.divide_test.go: `.TestLogger(t)`
$DIR/core/services/pipeline/task.divide_test.go: `.Cause(result.Error)`
$DIR/core/services/pipeline/task.divide_test.go: `.NewSqlxDB(t)`
$DIR/core/services/pipeline/task.divide_test.go: `.NewTestGeneralConfig(t)`
$DIR/core/services/pipeline/task.divide_test.go: `.NewORM(t)`
$DIR/core/services/pipeline/task.divide_test.go: `.NewVarsFrom(nil)`
$DIR/core/services/pipeline/task.divide_test.go: `.TestLogger(t)`
$DIR/core/services/pipeline/task.divide_test.go: `.ExecuteRun(testutils.Context(t), spec, vars, lggr)`
$DIR/core/services/pipeline/task.divide_test.go: `.Context(t)`
$DIR/core/services/pipeline/task.divide_test.go: `.String()`
$DIR/core/services/pipeline/task.eth_abi_decode_log_test.go: `t.Run(test.name, func(t *testing.T) {
task := pipeline.ETHABIDecodeLogTask{
BaseTask: pipeline.NewBaseTask(0, "decodelog", nil, nil, 0),
ABI: test.abi,
Data: test.data,
Topics: test.topics,
}
result, runInfo := task.Run(testutils.Context(t), logger.TestLogger(t), test.vars, test.inputs)
assert.False(t, runInfo.IsPending)
assert.False(t, runInfo.IsRetryable)
if test.expectedErrorCause != nil {
require.Equal(t, test.expectedErrorCause, errors.Cause(result.Error))
require.Nil(t, result.Value)
if test.expectedErrorContains != "" {
require.Contains(t, result.Error.Error(), test.expectedErrorContains)
}
} else {
require.NoError(t, result.Error)
require.Equal(t, test.expected, result.Value)
}
})`
$DIR/core/services/pipeline/task.eth_abi_decode_log_test.go: `.NewVarsFrom(map[string]interface{}{
"foo": map[string]interface{}{
"address": common.HexToAddress("0x2fCeA879fDC9FE5e90394faf0CA644a1749d0ad6"),
"data": hexutil.MustDecode("0x000000000000000000000000000000000000000000000000000000000000000f"),
"topics": []common.Hash{
common.HexToHash("0x0109fc6f55cf40689f02fbaad7af7fe7bbac8a3d2186600afc7d3e10cac60271"),
common.HexToHash("0x0000000000000000000000000000000000000000000000000000000000000009"),
common.HexToHash("0x000000000000000000000000f17f52151ebef6c7334fad080c5704d77216b732"),
},
},
})`
$DIR/core/services/pipeline/task.eth_abi_decode_log_test.go: `.HexToAddress("0x2fCeA879fDC9FE5e90394faf0CA644a1749d0ad6")`
$DIR/core/services/pipeline/task.eth_abi_decode_log_test.go: `.MustDecode("0x000000000000000000000000000000000000000000000000000000000000000f")`
$DIR/core/services/pipeline/task.eth_abi_decode_log_test.go: `.HexToHash("0x0109fc6f55cf40689f02fbaad7af7fe7bbac8a3d2186600afc7d3e10cac60271")`
$DIR/core/services/pipeline/task.eth_abi_decode_log_test.go: `.HexToHash("0x0000000000000000000000000000000000000000000000000000000000000009")`
$DIR/core/services/pipeline/task.eth_abi_decode_log_test.go: `.HexToHash("0x000000000000000000000000f17f52151ebef6c7334fad080c5704d77216b732")`
$DIR/core/services/pipeline/task.eth_abi_decode_log_test.go: `.NewInt(9)`
$DIR/core/services/pipeline/task.eth_abi_decode_log_test.go: `.HexToAddress("0xf17f52151ebef6c7334fad080c5704d77216b732")`
$DIR/core/services/pipeline/task.eth_abi_decode_log_test.go: `.NewInt(15)`
$DIR/core/services/pipeline/task.eth_abi_decode_log_test.go: `.NewVarsFrom(map[string]interface{}{
"foo": map[string]interface{}{
"address": common.HexToAddress("0x2fCeA879fDC9FE5e90394faf0CA644a1749d0ad6"),
"data": hexutil.MustDecode("0x000000000000000000000000deadbeefdeadbeefdeadbeefdeadbeefdeadbeef74686520726571756573742069640000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000020a6e000000000000000000000000cafebabecafebabecafebabecafebabecafebabe61736466000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003039000000000000000000000000000000000000000000000000000000000000d431000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000147374657665746f7368692073657267616d6f746f000000000000000000000000"),
"topics": []common.Hash{
common.HexToHash("0xd8d7ecc4800d25fa53ce0372f13a416d98907a7ef3d8d3bdd79cf4fe75529c65"),
common.HexToHash("0x746865206a6f6220696400000000000000000000000000000000000000000000"),
},
},
})`
$DIR/core/services/pipeline/task.eth_abi_decode_log_test.go: `.HexToAddress("0x2fCeA879fDC9FE5e90394faf0CA644a1749d0ad6")`
$DIR/core/services/pipeline/task.eth_abi_decode_log_test.go: `.MustDecode("0x000000000000000000000000deadbeefdeadbeefdeadbeefdeadbeefdeadbeef74686520726571756573742069640000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000020a6e000000000000000000000000cafebabecafebabecafebabecafebabecafebabe61736466000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003039000000000000000000000000000000000000000000000000000000000000d431000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000147374657665746f7368692073657267616d6f746f000000000000000000000000")`
$DIR/core/services/pipeline/task.eth_abi_decode_log_test.go: `.HexToHash("0xd8d7ecc4800d25fa53ce0372f13a416d98907a7ef3d8d3bdd79cf4fe75529c65")`
$DIR/core/services/pipeline/task.eth_abi_decode_log_test.go: `.HexToHash("0x746865206a6f6220696400000000000000000000000000000000000000000000")`
$DIR/core/services/pipeline/task.eth_abi_decode_log_test.go: `.Bytes32FromString("the job id")`
$DIR/core/services/pipeline/task.eth_abi_decode_log_test.go: `.HexToAddress("0xDeaDbeefdEAdbeefdEadbEEFdeadbeEFdEaDbeeF")`
$DIR/core/services/pipeline/task.eth_abi_decode_log_test.go: `.Bytes32FromString("the request id")`
$DIR/core/services/pipeline/task.eth_abi_decode_log_test.go: `.NewInt(133742)`
$DIR/core/services/pipeline/task.eth_abi_decode_log_test.go: `.HexToAddress("0xCafEBAbECAFEbAbEcaFEbabECAfebAbEcAFEBaBe")`
$DIR/core/services/pipeline/task.eth_abi_decode_log_test.go: `.Bytes4FromString("asdf")`
$DIR/core/services/pipeline/task.eth_abi_decode_log_test.go: `.NewInt(12345)`
$DIR/core/services/pipeline/task.eth_abi_decode_log_test.go: `.NewInt(54321)`
$DIR/core/services/pipeline/task.eth_abi_decode_log_test.go: `.NewVarsFrom(map[string]interface{}{
"foo": map[string]interface{}{
"address": common.HexToAddress("0x2fCeA879fDC9FE5e90394faf0CA644a1749d0ad6"),
"data": hexutil.MustDecode("0x00000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000deadbeefdeadbeefdeadbeefdeadbeefdeadbeef000000000000000000000000cafebabecafebabecafebabecafebabecafebabe"),
"topics": []common.Hash{
common.HexToHash("0xe720bc96024900ba647b8faa27766eb59f72cadf3c7ec34a7365c999f78320db"),
},
},
})`
$DIR/core/services/pipeline/task.eth_abi_decode_log_test.go: `.HexToAddress("0x2fCeA879fDC9FE5e90394faf0CA644a1749d0ad6")`
$DIR/core/services/pipeline/task.eth_abi_decode_log_test.go: `.MustDecode("0x00000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000deadbeefdeadbeefdeadbeefdeadbeefdeadbeef000000000000000000000000cafebabecafebabecafebabecafebabecafebabe")`
$DIR/core/services/pipeline/task.eth_abi_decode_log_test.go: `.HexToHash("0xe720bc96024900ba647b8faa27766eb59f72cadf3c7ec34a7365c999f78320db")`
$DIR/core/services/pipeline/task.eth_abi_decode_log_test.go: `.HexToAddress("0xDeaDbeefdEAdbeefdEadbEEFdeadbeEFdEaDbeeF")`
$DIR/core/services/pipeline/task.eth_abi_decode_log_test.go: `.HexToAddress("0xCafEBAbECAFEbAbEcaFEbabECAfebAbEcAFEBaBe")`
$DIR/core/services/pipeline/task.eth_abi_decode_log_test.go: `.NewVarsFrom(map[string]interface{}{
"foo": map[string]interface{}{
"address": common.HexToAddress("0x2fCeA879fDC9FE5e90394faf0CA644a1749d0ad6"),
"data": hexutil.MustDecode("0x000000000000000000000000deadbeefdeadbeefdeadbeefdeadbeefdeadbeef74686520726571756573742069640000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000020a6e000000000000000000000000cafebabecafebabecafebabecafebabecafebabe61736466000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003039000000000000000000000000000000000000000000000000000000000000d431000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000147374657665746f7368692073657267616d6f746f000000000000000000000000"),
"topics": []common.Hash{
common.HexToHash("0xd8d7ecc4800d25fa53ce0372f13a416d98907a7ef3d8d3bdd79cf4fe75529c65"),
},
},
})`
$DIR/core/services/pipeline/task.eth_abi_decode_log_test.go: `.HexToAddress("0x2fCeA879fDC9FE5e90394faf0CA644a1749d0ad6")`
$DIR/core/services/pipeline/task.eth_abi_decode_log_test.go: `.MustDecode("0x000000000000000000000000deadbeefdeadbeefdeadbeefdeadbeefdeadbeef74686520726571756573742069640000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000020a6e000000000000000000000000cafebabecafebabecafebabecafebabecafebabe61736466000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003039000000000000000000000000000000000000000000000000000000000000d431000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000147374657665746f7368692073657267616d6f746f000000000000000000000000")`
$DIR/core/services/pipeline/task.eth_abi_decode_log_test.go: `.HexToHash("0xd8d7ecc4800d25fa53ce0372f13a416d98907a7ef3d8d3bdd79cf4fe75529c65")`
$DIR/core/services/pipeline/task.eth_abi_decode_log_test.go: `.NewVarsFrom(map[string]interface{}{
"foo": map[string]interface{}{
"address": common.HexToAddress("0x2fCeA879fDC9FE5e90394faf0CA644a1749d0ad6"),
"data": hexutil.MustDecode("0x000000000000000000000000deadbeefdeadbeefdeadbeefdeadbeefdeadbeef74686520726571756573742069640000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000020a6e000000000000000000000000cafebabecafebabecafebabecafebabecafebabe61736466000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003039000000000000000000000000000000000000000000000000000000000000d431000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000147374657665746f7368692073657267616d6f746f000000000000000000000000"),
"topics": []common.Hash{
common.HexToHash("0xd8d7ecc4800d25fa53ce0372f13a416d98907a7ef3d8d3bdd79cf4fe75529c65"),
},
},
})`
$DIR/core/services/pipeline/task.eth_abi_decode_log_test.go: `.HexToAddress("0x2fCeA879fDC9FE5e90394faf0CA644a1749d0ad6")`
$DIR/core/services/pipeline/task.eth_abi_decode_log_test.go: `.MustDecode("0x000000000000000000000000deadbeefdeadbeefdeadbeefdeadbeefdeadbeef74686520726571756573742069640000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000020a6e000000000000000000000000cafebabecafebabecafebabecafebabecafebabe61736466000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003039000000000000000000000000000000000000000000000000000000000000d431000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000147374657665746f7368692073657267616d6f746f000000000000000000000000")`
$DIR/core/services/pipeline/task.eth_abi_decode_log_test.go: `.HexToHash("0xd8d7ecc4800d25fa53ce0372f13a416d98907a7ef3d8d3bdd79cf4fe75529c65")`
$DIR/core/services/pipeline/task.eth_abi_decode_log_test.go: `.NewVarsFrom(map[string]interface{}{
"foo": map[string]interface{}{
"address": common.HexToAddress("0x2fCeA879fDC9FE5e90394faf0CA644a1749d0ad6"),
"data": hexutil.MustDecode("0x000000000000000000000000deadbeefdeadbeefdeadbeefdeadbeefdeadbeef74686520726571756573742069640000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000020a6e000000000000000000000000cafebabecafebabecafebabecafebabecafebabe61736466000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003039000000000000000000000000000000000000000000000000000000000000d431000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000147374657665746f7368692073657267616d6f746f000000000000000000000000"),
"topics": []common.Hash{
common.HexToHash("0xd8d7ecc4800d25fa53ce0372f13a416d98907a7ef3d8d3bdd79cf4fe75529c65"),
},
},
})`
$DIR/core/services/pipeline/task.eth_abi_decode_log_test.go: `.HexToAddress("0x2fCeA879fDC9FE5e90394faf0CA644a1749d0ad6")`
$DIR/core/services/pipeline/task.eth_abi_decode_log_test.go: `.MustDecode("0x000000000000000000000000deadbeefdeadbeefdeadbeefdeadbeefdeadbeef74686520726571756573742069640000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000020a6e000000000000000000000000cafebabecafebabecafebabecafebabecafebabe61736466000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003039000000000000000000000000000000000000000000000000000000000000d431000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000147374657665746f7368692073657267616d6f746f000000000000000000000000")`
$DIR/core/services/pipeline/task.eth_abi_decode_log_test.go: `.HexToHash("0xd8d7ecc4800d25fa53ce0372f13a416d98907a7ef3d8d3bdd79cf4fe75529c65")`
$DIR/core/services/pipeline/task.eth_abi_decode_log_test.go: `.NewVarsFrom(map[string]interface{}{
"foo": map[string]interface{}{
"address": common.HexToAddress("0x2fCeA879fDC9FE5e90394faf0CA644a1749d0ad6"),
"data": hexutil.MustDecode("0x000000000000000000000000deadbeefdeadbeefdeadbeefdeadbeefdeadbeef74686520726571756573742069640000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000020a6e000000000000000000000000cafebabecafebabecafebabecafebabecafebabe61736466000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003039000000000000000000000000000000000000000000000000000000000000d4310000000000000000000000000000000000000000000000000000"),
"topics": []common.Hash{
common.HexToHash("0xd8d7ecc4800d25fa53ce0372f13a416d98907a7ef3d8d3bdd79cf4fe75529c65"),
common.HexToHash("0x746865206a6f6220696400000000000000000000000000000000000000000000"),
},
},
})`
$DIR/core/services/pipeline/task.eth_abi_decode_log_test.go: `.HexToAddress("0x2fCeA879fDC9FE5e90394faf0CA644a1749d0ad6")`
$DIR/core/services/pipeline/task.eth_abi_decode_log_test.go: `.MustDecode("0x000000000000000000000000deadbeefdeadbeefdeadbeefdeadbeefdeadbeef74686520726571756573742069640000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000020a6e000000000000000000000000cafebabecafebabecafebabecafebabecafebabe61736466000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003039000000000000000000000000000000000000000000000000000000000000d4310000000000000000000000000000000000000000000000000000")`
$DIR/core/services/pipeline/task.eth_abi_decode_log_test.go: `.HexToHash("0xd8d7ecc4800d25fa53ce0372f13a416d98907a7ef3d8d3bdd79cf4fe75529c65")`
$DIR/core/services/pipeline/task.eth_abi_decode_log_test.go: `.HexToHash("0x746865206a6f6220696400000000000000000000000000000000000000000000")`
$DIR/core/services/pipeline/task.eth_abi_decode_log_test.go: `.NewVarsFrom(map[string]interface{}{
"foo": map[string]interface{}{
"address": common.HexToAddress("0x2fCeA879fDC9FE5e90394faf0CA644a1749d0ad6"),
"data": hexutil.MustDecode("0x000000000000000000000000deadbeefdeadbeefdeadbeefdeadbeefdeadbeef7468652072657175657374206964000000000000000000000000000000000000"),
"topics": []common.Hash{
common.HexToHash("0xd8d7ecc4800d25fa53ce0372f13a416d98907a7ef3d8d3bdd79cf4fe75529c65"),
common.HexToHash("0x746865206a6f6220696400000000000000000000000000000000000000000000"),
},
},
})`
$DIR/core/services/pipeline/task.eth_abi_decode_log_test.go: `.HexToAddress("0x2fCeA879fDC9FE5e90394faf0CA644a1749d0ad6")`
$DIR/core/services/pipeline/task.eth_abi_decode_log_test.go: `.MustDecode("0x000000000000000000000000deadbeefdeadbeefdeadbeefdeadbeefdeadbeef7468652072657175657374206964000000000000000000000000000000000000")`
$DIR/core/services/pipeline/task.eth_abi_decode_log_test.go: `.HexToHash("0xd8d7ecc4800d25fa53ce0372f13a416d98907a7ef3d8d3bdd79cf4fe75529c65")`
$DIR/core/services/pipeline/task.eth_abi_decode_log_test.go: `.HexToHash("0x746865206a6f6220696400000000000000000000000000000000000000000000")`
$DIR/core/services/pipeline/task.eth_abi_decode_log_test.go: `.NewVarsFrom(map[string]interface{}{
"foo": map[string]interface{}{
"address": common.HexToAddress("0x2fCeA879fDC9FE5e90394faf0CA644a1749d0ad6"),
"data": hexutil.MustDecode("0x000000000000000000000000000000000000000000000000000000000000000f"),
"topics": []common.Hash{
common.HexToHash("0x0109fc6f55cf40689f02fbaad7af7fe7bbac8a3d2186600afc7d3e10cac60271"),
common.HexToHash("0x0000000000000000000000000000000000000000000000000000000000000009"),
common.HexToHash("0x000000000000000000000000f17f52151ebef6c7334fad080c5704d77216b732"),
},
},
})`
$DIR/core/services/pipeline/task.eth_abi_decode_log_test.go: `.HexToAddress("0x2fCeA879fDC9FE5e90394faf0CA644a1749d0ad6")`
$DIR/core/services/pipeline/task.eth_abi_decode_log_test.go: `.MustDecode("0x000000000000000000000000000000000000000000000000000000000000000f")`
$DIR/core/services/pipeline/task.eth_abi_decode_log_test.go: `.HexToHash("0x0109fc6f55cf40689f02fbaad7af7fe7bbac8a3d2186600afc7d3e10cac60271")`
$DIR/core/services/pipeline/task.eth_abi_decode_log_test.go: `.HexToHash("0x0000000000000000000000000000000000000000000000000000000000000009")`
$DIR/core/services/pipeline/task.eth_abi_decode_log_test.go: `.HexToHash("0x000000000000000000000000f17f52151ebef6c7334fad080c5704d77216b732")`
$DIR/core/services/pipeline/task.eth_abi_decode_log_test.go: `.New("uh oh")`
$DIR/core/services/pipeline/task.eth_abi_decode_log_test.go: `.Run(test.name, func(t *testing.T) {
task := pipeline.ETHABIDecodeLogTask{
BaseTask: pipeline.NewBaseTask(0, "decodelog", nil, nil, 0),
ABI: test.abi,
Data: test.data,
Topics: test.topics,
}
result, runInfo := task.Run(testutils.Context(t), logger.TestLogger(t), test.vars, test.inputs)
assert.False(t, runInfo.IsPending)
assert.False(t, runInfo.IsRetryable)
if test.expectedErrorCause != nil {
require.Equal(t, test.expectedErrorCause, errors.Cause(result.Error))
require.Nil(t, result.Value)
if test.expectedErrorContains != "" {
require.Contains(t, result.Error.Error(), test.expectedErrorContains)
}
} else {
require.NoError(t, result.Error)
require.Equal(t, test.expected, result.Value)
}
})`
$DIR/core/services/pipeline/task.eth_abi_decode_log_test.go: `.NewBaseTask(0, "decodelog", nil, nil, 0)`
$DIR/core/services/pipeline/task.eth_abi_decode_log_test.go: `.Run(testutils.Context(t), logger.TestLogger(t), test.vars, test.inputs)`
$DIR/core/services/pipeline/task.eth_abi_decode_log_test.go: `.Context(t)`
$DIR/core/services/pipeline/task.eth_abi_decode_log_test.go: `.TestLogger(t)`
$DIR/core/services/pipeline/task.eth_abi_decode_test.go: `t.Run(test.name, func(t *testing.T) {
task := ETHABIDecodeTask{
BaseTask: NewBaseTask(0, "decode", nil, nil, 0),
ABI: test.abi,
Data: test.data,
}
result, runInfo := task.Run(testutils.Context(t), logger.TestLogger(t), test.vars, test.inputs)
assert.False(t, runInfo.IsPending)
assert.False(t, runInfo.IsRetryable)
if test.expectedErrorCause != nil {
require.Equal(t, test.expectedErrorCause, errors.Cause(result.Error))
require.Nil(t, result.Value)
if test.expectedErrorContains != "" {
require.Contains(t, result.Error.Error(), test.expectedErrorContains)
}
} else {
require.NoError(t, result.Error)
require.Equal(t, test.expected, result.Value)
}
})`
$DIR/core/services/pipeline/task.eth_abi_decode_test.go: `.Run(test.name, func(t *testing.T) {
task := ETHABIDecodeTask{
BaseTask: NewBaseTask(0, "decode", nil, nil, 0),
ABI: test.abi,
Data: test.data,
}
result, runInfo := task.Run(testutils.Context(t), logger.TestLogger(t), test.vars, test.inputs)
assert.False(t, runInfo.IsPending)
assert.False(t, runInfo.IsRetryable)
if test.expectedErrorCause != nil {
require.Equal(t, test.expectedErrorCause, errors.Cause(result.Error))
require.Nil(t, result.Value)
if test.expectedErrorContains != "" {
require.Contains(t, result.Error.Error(), test.expectedErrorContains)
}
} else {
require.NoError(t, result.Error)
require.Equal(t, test.expected, result.Value)
}
})`
$DIR/core/services/pipeline/task.eth_abi_decode_test.go: `.Run(testutils.Context(t), logger.TestLogger(t), test.vars, test.inputs)`
$DIR/core/services/pipeline/task.eth_abi_decode_test.go: `.Context(t)`
$DIR/core/services/pipeline/task.eth_abi_decode_test.go: `.TestLogger(t)`
$DIR/core/services/pipeline/task.eth_abi_encode_2_test.go: `copy(bytes32[:], []byte("chainlink chainlink chainlink"))`
$DIR/core/services/pipeline/task.eth_abi_encode_2_test.go: `t.Run(test.name, func(t *testing.T) {
task := pipeline.ETHABIEncodeTask2{
BaseTask: pipeline.NewBaseTask(0, "encode", nil, nil, 0),
ABI: test.abi,
Data: test.data,
}
result, _ := task.Run(testutils.Context(t), logger.TestLogger(t), test.vars, test.inputs)
if test.expectedErrorCause != nil {
require.Equal(t, test.expectedErrorCause, errors.Cause(result.Error))
require.Nil(t, result.Value)
if test.expectedErrorContains != "" {
require.Contains(t, result.Error.Error(), test.expectedErrorContains)
}
} else {
require.NoError(t, result.Error)
require.Equal(t, test.expected, result.Value)
}
})`
$DIR/core/services/pipeline/task.eth_abi_encode_2_test.go: `.NewVarsFrom(map[string]interface{}{
"foo": big.NewInt(123),
"bar": true,
"baz": big.NewInt(-321),
"quux": "foo bar baz",
})`
$DIR/core/services/pipeline/task.eth_abi_encode_2_test.go: `.NewInt(123)`
$DIR/core/services/pipeline/task.eth_abi_encode_2_test.go: `.NewInt(-321)`
$DIR/core/services/pipeline/task.eth_abi_encode_2_test.go: `.NewVarsFrom(map[string]interface{}{
"foo": bytes32,
"bar": []byte("stevetoshi sergeymoto"),
"baz": common.HexToAddress("0xdeadbeefdeadbeefdeadbeefdeadbeefdeadbeef"),
})`
$DIR/core/services/pipeline/task.eth_abi_encode_2_test.go: `.HexToAddress("0xdeadbeefdeadbeefdeadbeefdeadbeefdeadbeef")`
$DIR/core/services/pipeline/task.eth_abi_encode_2_test.go: `.NewVarsFrom(map[string]interface{}{
"foo": []common.Address{
common.HexToAddress("0x6c91b062a774cbe8b9bf52f224c37badf98fc40b"),
common.HexToAddress("0xc4f27ead9083c756cc2c02aaa39b223fe8d0a0e5"),
common.HexToAddress("0x749e4598819b2b0e915a02120696c7b8fe16c09c"),
},
"bar": big.NewInt(8293),
"baz": []*big.Int{big.NewInt(192), big.NewInt(4182)},
})`
$DIR/core/services/pipeline/task.eth_abi_encode_2_test.go: `.HexToAddress("0x6c91b062a774cbe8b9bf52f224c37badf98fc40b")`
$DIR/core/services/pipeline/task.eth_abi_encode_2_test.go: `.HexToAddress("0xc4f27ead9083c756cc2c02aaa39b223fe8d0a0e5")`
$DIR/core/services/pipeline/task.eth_abi_encode_2_test.go: `.HexToAddress("0x749e4598819b2b0e915a02120696c7b8fe16c09c")`
$DIR/core/services/pipeline/task.eth_abi_encode_2_test.go: `.NewInt(8293)`
$DIR/core/services/pipeline/task.eth_abi_encode_2_test.go: `.NewInt(192)`
$DIR/core/services/pipeline/task.eth_abi_encode_2_test.go: `.NewInt(4182)`
$DIR/core/services/pipeline/task.eth_abi_encode_2_test.go: `.NewVarsFrom(map[string]interface{}{
"foo": [][]bool{{true, false}, {false, true}, {false, false}, {true, true}},
"bar": [][]*big.Int{{big.NewInt(123), big.NewInt(456)}, {big.NewInt(22), big.NewInt(19842)}},
})`
$DIR/core/services/pipeline/task.eth_abi_encode_2_test.go: `.NewInt(123)`
$DIR/core/services/pipeline/task.eth_abi_encode_2_test.go: `.NewInt(456)`
$DIR/core/services/pipeline/task.eth_abi_encode_2_test.go: `.NewInt(22)`
$DIR/core/services/pipeline/task.eth_abi_encode_2_test.go: `.NewInt(19842)`
$DIR/core/services/pipeline/task.eth_abi_encode_2_test.go: `.NewVarsFrom(nil)`
$DIR/core/services/pipeline/task.eth_abi_encode_2_test.go: `.NewVarsFrom(map[string]interface{}{
"foo": big.NewInt(math.MaxInt64),
})`
$DIR/core/services/pipeline/task.eth_abi_encode_2_test.go: `.NewInt(math.MaxInt64)`
$DIR/core/services/pipeline/task.eth_abi_encode_2_test.go: `.NewVarsFrom(map[string]interface{}{
"foo": "0xdeadbeefdeadbeefdeadbeefdeadbeefdeadbeefdeadbeef",
})`
$DIR/core/services/pipeline/task.eth_abi_encode_2_test.go: `.NewVarsFrom(nil)`
$DIR/core/services/pipeline/task.eth_abi_encode_2_test.go: `.NewVarsFrom(map[string]interface{}{
"foo": bytes32,
"bar": []byte("stevetoshi sergeymoto"),
"baz": common.HexToAddress("0xdeadbeefdeadbeefdeadbeefdeadbeefdeadbeef"),
})`
$DIR/core/services/pipeline/task.eth_abi_encode_2_test.go: `.HexToAddress("0xdeadbeefdeadbeefdeadbeefdeadbeefdeadbeef")`
$DIR/core/services/pipeline/task.eth_abi_encode_2_test.go: `.New("uh oh")`
$DIR/core/services/pipeline/task.eth_abi_encode_2_test.go: `.NewVarsFrom(map[string]interface{}{
"foo": "0x0000000000000000000000000000000000000000000000000000000000000001",
})`
$DIR/core/services/pipeline/task.eth_abi_encode_2_test.go: `.NewVarsFrom(map[string]interface{}{
"value": map[string]interface{}{
"first": "0x0000000000000000000000000000000000000000000000000000000000000001",
"last": true,
},
})`
$DIR/core/services/pipeline/task.eth_abi_encode_2_test.go: `.NewVarsFrom(map[string]interface{}{
"value": []interface{}{
"0x0000000000000000000000000000000000000000000000000000000000000001",
true,
},
})`
$DIR/core/services/pipeline/task.eth_abi_encode_2_test.go: `.Run(test.name, func(t *testing.T) {
task := pipeline.ETHABIEncodeTask2{
BaseTask: pipeline.NewBaseTask(0, "encode", nil, nil, 0),
ABI: test.abi,
Data: test.data,
}
result, _ := task.Run(testutils.Context(t), logger.TestLogger(t), test.vars, test.inputs)
if test.expectedErrorCause != nil {
require.Equal(t, test.expectedErrorCause, errors.Cause(result.Error))
require.Nil(t, result.Value)
if test.expectedErrorContains != "" {
require.Contains(t, result.Error.Error(), test.expectedErrorContains)
}
} else {
require.NoError(t, result.Error)
require.Equal(t, test.expected, result.Value)
}
})`
$DIR/core/services/pipeline/task.eth_abi_encode_2_test.go: `.NewBaseTask(0, "encode", nil, nil, 0)`
$DIR/core/services/pipeline/task.eth_abi_encode_2_test.go: `.Run(testutils.Context(t), logger.TestLogger(t), test.vars, test.inputs)`
$DIR/core/services/pipeline/task.eth_abi_encode_2_test.go: `.Context(t)`
$DIR/core/services/pipeline/task.eth_abi_encode_2_test.go: `.TestLogger(t)`
$DIR/core/services/pipeline/task.eth_abi_encode_test.go: `copy(bytes32[:], []byte("chainlink chainlink chainlink"))`
$DIR/core/services/pipeline/task.eth_abi_encode_test.go: `t.Run(test.name, func(t *testing.T) {
task := pipeline.ETHABIEncodeTask{
BaseTask: pipeline.NewBaseTask(0, "encode", nil, nil, 0),
ABI: test.abi,
Data: test.data,
}
result, runInfo := task.Run(testutils.Context(t), logger.TestLogger(t), test.vars, test.inputs)
assert.False(t, runInfo.IsPending)
assert.False(t, runInfo.IsRetryable)
if test.expectedErrorCause != nil {
require.Equal(t, test.expectedErrorCause, errors.Cause(result.Error))
require.Nil(t, result.Value)
if test.expectedErrorContains != "" {
require.Contains(t, result.Error.Error(), test.expectedErrorContains)
}
} else {
require.NoError(t, result.Error)
require.Equal(t, test.expected, result.Value)
}
})`
$DIR/core/services/pipeline/task.eth_abi_encode_test.go: `t.Run(test.name, func(t *testing.T) {
task := pipeline.ETHABIEncodeTask{
BaseTask: pipeline.NewBaseTask(0, "encode", nil, nil, 0),
ABI: test.abi,
Data: test.data,
}
result, runInfo := task.Run(testutils.Context(t), logger.TestLogger(t), test.vars, test.inputs)
assert.False(t, runInfo.IsPending)
assert.False(t, runInfo.IsRetryable)
if test.expectedErrorCause != nil {
require.Equal(t, test.expectedErrorCause, errors.Cause(result.Error))
require.Nil(t, result.Value)
if test.expectedErrorContains != "" {
require.Contains(t, result.Error.Error(), test.expectedErrorContains)
}
} else {
require.NoError(t, result.Error)
assert.Equal(t, test.expected, result.Value, fmt.Sprintf("test: %s", test.name))
}
})`
$DIR/core/services/pipeline/task.eth_abi_encode_test.go: `t.Run(test.name, func(t *testing.T) {
task := pipeline.ETHABIEncodeTask{
BaseTask: pipeline.NewBaseTask(0, "encode", nil, nil, 0),
ABI: test.abi,
Data: test.data,
}
result, runInfo := task.Run(testutils.Context(t), logger.TestLogger(t), test.vars, test.inputs)
assert.False(t, runInfo.IsPending)
assert.False(t, runInfo.IsRetryable)
if test.expectedErrorCause != nil {
require.Equal(t, test.expectedErrorCause, errors.Cause(result.Error))
require.Nil(t, result.Value)
if test.expectedErrorContains != "" {
require.Contains(t, result.Error.Error(), test.expectedErrorContains)
}
} else {
require.NoError(t, result.Error)
assert.Equal(t, test.expected, result.Value, fmt.Sprintf("test: %s", test.name))
}
})`
$DIR/core/services/pipeline/task.eth_abi_encode_test.go: `.StringToHex(string(bytes32[:]))`
$DIR/core/services/pipeline/task.eth_abi_encode_test.go: `.NewVarsFrom(map[string]interface{}{
"foo": big.NewInt(123),
"bar": true,
"baz": big.NewInt(-321),
"quux": "foo bar baz",
})`
$DIR/core/services/pipeline/task.eth_abi_encode_test.go: `.NewInt(123)`
$DIR/core/services/pipeline/task.eth_abi_encode_test.go: `.NewInt(-321)`
$DIR/core/services/pipeline/task.eth_abi_encode_test.go: `.NewVarsFrom(map[string]interface{}{
"foo": bytes32,
"bar": []byte("stevetoshi sergeymoto"),
"baz": common.HexToAddress("0xdeadbeefdeadbeefdeadbeefdeadbeefdeadbeef"),
})`
$DIR/core/services/pipeline/task.eth_abi_encode_test.go: `.HexToAddress("0xdeadbeefdeadbeefdeadbeefdeadbeefdeadbeef")`
$DIR/core/services/pipeline/task.eth_abi_encode_test.go: `.NewVarsFrom(map[string]interface{}{
"foo": bytes32hex,
"bar": []byte("stevetoshi sergeymoto"),
"baz": common.HexToAddress("0xdeadbeefdeadbeefdeadbeefdeadbeefdeadbeef"),
})`
$DIR/core/services/pipeline/task.eth_abi_encode_test.go: `.HexToAddress("0xdeadbeefdeadbeefdeadbeefdeadbeefdeadbeef")`
$DIR/core/services/pipeline/task.eth_abi_encode_test.go: `.NewVarsFrom(map[string]interface{}{
"foo": []common.Address{
common.HexToAddress("0x6c91b062a774cbe8b9bf52f224c37badf98fc40b"),
common.HexToAddress("0xc4f27ead9083c756cc2c02aaa39b223fe8d0a0e5"),
common.HexToAddress("0x749e4598819b2b0e915a02120696c7b8fe16c09c"),
},
"bar": big.NewInt(8293),
"baz": []*big.Int{big.NewInt(192), big.NewInt(4182)},
})`
$DIR/core/services/pipeline/task.eth_abi_encode_test.go: `.HexToAddress("0x6c91b062a774cbe8b9bf52f224c37badf98fc40b")`
$DIR/core/services/pipeline/task.eth_abi_encode_test.go: `.HexToAddress("0xc4f27ead9083c756cc2c02aaa39b223fe8d0a0e5")`
$DIR/core/services/pipeline/task.eth_abi_encode_test.go: `.HexToAddress("0x749e4598819b2b0e915a02120696c7b8fe16c09c")`
$DIR/core/services/pipeline/task.eth_abi_encode_test.go: `.NewInt(8293)`
$DIR/core/services/pipeline/task.eth_abi_encode_test.go: `.NewInt(192)`
$DIR/core/services/pipeline/task.eth_abi_encode_test.go: `.NewInt(4182)`
$DIR/core/services/pipeline/task.eth_abi_encode_test.go: `.NewVarsFrom(map[string]interface{}{
"foo": [][]bool{{true, false}, {false, true}, {false, false}, {true, true}},
"bar": [][]*big.Int{{big.NewInt(123), big.NewInt(456)}, {big.NewInt(22), big.NewInt(19842)}},
})`
$DIR/core/services/pipeline/task.eth_abi_encode_test.go: `.NewInt(123)`
$DIR/core/services/pipeline/task.eth_abi_encode_test.go: `.NewInt(456)`
$DIR/core/services/pipeline/task.eth_abi_encode_test.go: `.NewInt(22)`
$DIR/core/services/pipeline/task.eth_abi_encode_test.go: `.NewInt(19842)`
$DIR/core/services/pipeline/task.eth_abi_encode_test.go: `.NewVarsFrom(nil)`
$DIR/core/services/pipeline/task.eth_abi_encode_test.go: `.NewVarsFrom(map[string]interface{}{
"foo": big.NewInt(math.MaxInt64),
})`
$DIR/core/services/pipeline/task.eth_abi_encode_test.go: `.NewInt(math.MaxInt64)`
$DIR/core/services/pipeline/task.eth_abi_encode_test.go: `.NewVarsFrom(map[string]interface{}{
"foo": "0xdeadbeefdeadbeefdeadbeefdeadbeefdeadbeefdeadbeef",
})`
$DIR/core/services/pipeline/task.eth_abi_encode_test.go: `.NewVarsFrom(map[string]interface{}{
"foo": []interface{}{123, 456, 789},
})`
$DIR/core/services/pipeline/task.eth_abi_encode_test.go: `.NewVarsFrom(map[string]interface{}{
"foo": []interface{}{
[]interface{}{123, 456, 789},
},
})`
$DIR/core/services/pipeline/task.eth_abi_encode_test.go: `.NewVarsFrom(nil)`
$DIR/core/services/pipeline/task.eth_abi_encode_test.go: `.NewVarsFrom(nil)`
$DIR/core/services/pipeline/task.eth_abi_encode_test.go: `.NewVarsFrom(map[string]interface{}{
"foo": bytes32,
"bar": []byte("stevetoshi sergeymoto"),
"baz": common.HexToAddress("0xdeadbeefdeadbeefdeadbeefdeadbeefdeadbeef"),
})`
$DIR/core/services/pipeline/task.eth_abi_encode_test.go: `.HexToAddress("0xdeadbeefdeadbeefdeadbeefdeadbeefdeadbeef")`
$DIR/core/services/pipeline/task.eth_abi_encode_test.go: `.New("uh oh")`
$DIR/core/services/pipeline/task.eth_abi_encode_test.go: `.NewVarsFrom(map[string]interface{}{
"foo": "0x0000000000000000000000000000000000000000000000000000000000000001",
})`
$DIR/core/services/pipeline/task.eth_abi_encode_test.go: `.Run(test.name, func(t *testing.T) {
task := pipeline.ETHABIEncodeTask{
BaseTask: pipeline.NewBaseTask(0, "encode", nil, nil, 0),
ABI: test.abi,
Data: test.data,
}
result, runInfo := task.Run(testutils.Context(t), logger.TestLogger(t), test.vars, test.inputs)
assert.False(t, runInfo.IsPending)
assert.False(t, runInfo.IsRetryable)
if test.expectedErrorCause != nil {
require.Equal(t, test.expectedErrorCause, errors.Cause(result.Error))
require.Nil(t, result.Value)
if test.expectedErrorContains != "" {
require.Contains(t, result.Error.Error(), test.expectedErrorContains)
}
} else {
require.NoError(t, result.Error)
require.Equal(t, test.expected, result.Value)
}
})`
$DIR/core/services/pipeline/task.eth_abi_encode_test.go: `.NewBaseTask(0, "encode", nil, nil, 0)`
$DIR/core/services/pipeline/task.eth_abi_encode_test.go: `.Run(testutils.Context(t), logger.TestLogger(t), test.vars, test.inputs)`
$DIR/core/services/pipeline/task.eth_abi_encode_test.go: `.Context(t)`
$DIR/core/services/pipeline/task.eth_abi_encode_test.go: `.TestLogger(t)`
$DIR/core/services/pipeline/task.eth_abi_encode_test.go: `.NewVarsFrom(map[string]interface{}{
"foo": int8(1),
})`
$DIR/core/services/pipeline/task.eth_abi_encode_test.go: `.NewVarsFrom(map[string]interface{}{
"foo": uint8(1),
})`
$DIR/core/services/pipeline/task.eth_abi_encode_test.go: `.NewVarsFrom(map[string]interface{}{
"foo": int16(1),
})`
$DIR/core/services/pipeline/task.eth_abi_encode_test.go: `.NewVarsFrom(map[string]interface{}{
"foo": uint16(1),
})`
$DIR/core/services/pipeline/task.eth_abi_encode_test.go: `.NewVarsFrom(map[string]interface{}{
"foo": int32(1),
})`
$DIR/core/services/pipeline/task.eth_abi_encode_test.go: `.NewVarsFrom(map[string]interface{}{
"foo": uint32(1),
})`
$DIR/core/services/pipeline/task.eth_abi_encode_test.go: `.NewVarsFrom(map[string]interface{}{
"foo": int32(1),
})`
$DIR/core/services/pipeline/task.eth_abi_encode_test.go: `.NewVarsFrom(map[string]interface{}{
"foo": uint32(1),
})`
$DIR/core/services/pipeline/task.eth_abi_encode_test.go: `.NewVarsFrom(map[string]interface{}{
"foo": int64(1),
})`
$DIR/core/services/pipeline/task.eth_abi_encode_test.go: `.NewVarsFrom(map[string]interface{}{
"foo": uint64(1),
})`
$DIR/core/services/pipeline/task.eth_abi_encode_test.go: `.NewVarsFrom(map[string]interface{}{
"foo": int64(1),
})`
$DIR/core/services/pipeline/task.eth_abi_encode_test.go: `.NewVarsFrom(map[string]interface{}{
"foo": uint64(1),
})`
$DIR/core/services/pipeline/task.eth_abi_encode_test.go: `.NewVarsFrom(map[string]interface{}{
"foo": int64(1),
})`
$DIR/core/services/pipeline/task.eth_abi_encode_test.go: `.NewVarsFrom(map[string]interface{}{
"foo": uint64(1),
})`
$DIR/core/services/pipeline/task.eth_abi_encode_test.go: `.NewVarsFrom(map[string]interface{}{
"foo": int64(1),
})`
$DIR/core/services/pipeline/task.eth_abi_encode_test.go: `.NewVarsFrom(map[string]interface{}{
"foo": uint64(1),
})`
$DIR/core/services/pipeline/task.eth_abi_encode_test.go: `.NewVarsFrom(map[string]interface{}{
"foo": big.NewInt(1),
})`
$DIR/core/services/pipeline/task.eth_abi_encode_test.go: `.NewInt(1)`
$DIR/core/services/pipeline/task.eth_abi_encode_test.go: `.NewVarsFrom(map[string]interface{}{
"foo": big.NewInt(1),
})`
$DIR/core/services/pipeline/task.eth_abi_encode_test.go: `.NewInt(1)`
$DIR/core/services/pipeline/task.eth_abi_encode_test.go: `.NewVarsFrom(map[string]interface{}{
"foo": big.NewInt(1),
})`
$DIR/core/services/pipeline/task.eth_abi_encode_test.go: `.NewInt(1)`
$DIR/core/services/pipeline/task.eth_abi_encode_test.go: `.NewVarsFrom(map[string]interface{}{
"foo": big.NewInt(1),
})`
$DIR/core/services/pipeline/task.eth_abi_encode_test.go: `.NewInt(1)`
$DIR/core/services/pipeline/task.eth_abi_encode_test.go: `.Run(test.name, func(t *testing.T) {
task := pipeline.ETHABIEncodeTask{
BaseTask: pipeline.NewBaseTask(0, "encode", nil, nil, 0),
ABI: test.abi,
Data: test.data,
}
result, runInfo := task.Run(testutils.Context(t), logger.TestLogger(t), test.vars, test.inputs)
assert.False(t, runInfo.IsPending)
assert.False(t, runInfo.IsRetryable)
if test.expectedErrorCause != nil {
require.Equal(t, test.expectedErrorCause, errors.Cause(result.Error))
require.Nil(t, result.Value)
if test.expectedErrorContains != "" {
require.Contains(t, result.Error.Error(), test.expectedErrorContains)
}
} else {
require.NoError(t, result.Error)
assert.Equal(t, test.expected, result.Value, fmt.Sprintf("test: %s", test.name))
}
})`
$DIR/core/services/pipeline/task.eth_abi_encode_test.go: `.NewBaseTask(0, "encode", nil, nil, 0)`
$DIR/core/services/pipeline/task.eth_abi_encode_test.go: `.Run(testutils.Context(t), logger.TestLogger(t), test.vars, test.inputs)`
$DIR/core/services/pipeline/task.eth_abi_encode_test.go: `.Context(t)`
$DIR/core/services/pipeline/task.eth_abi_encode_test.go: `.TestLogger(t)`
$DIR/core/services/pipeline/task.eth_abi_encode_test.go: `.NewVarsFrom(map[string]interface{}{
"foo": int16(129),
})`
$DIR/core/services/pipeline/task.eth_abi_encode_test.go: `.NewVarsFrom(map[string]interface{}{
"foo": uint16(257),
})`
$DIR/core/services/pipeline/task.eth_abi_encode_test.go: `.Run(test.name, func(t *testing.T) {
task := pipeline.ETHABIEncodeTask{
BaseTask: pipeline.NewBaseTask(0, "encode", nil, nil, 0),
ABI: test.abi,
Data: test.data,
}
result, runInfo := task.Run(testutils.Context(t), logger.TestLogger(t), test.vars, test.inputs)
assert.False(t, runInfo.IsPending)
assert.False(t, runInfo.IsRetryable)
if test.expectedErrorCause != nil {
require.Equal(t, test.expectedErrorCause, errors.Cause(result.Error))
require.Nil(t, result.Value)
if test.expectedErrorContains != "" {
require.Contains(t, result.Error.Error(), test.expectedErrorContains)
}
} else {
require.NoError(t, result.Error)
assert.Equal(t, test.expected, result.Value, fmt.Sprintf("test: %s", test.name))
}
})`
$DIR/core/services/pipeline/task.eth_abi_encode_test.go: `.NewBaseTask(0, "encode", nil, nil, 0)`
$DIR/core/services/pipeline/task.eth_abi_encode_test.go: `.Run(testutils.Context(t), logger.TestLogger(t), test.vars, test.inputs)`
$DIR/core/services/pipeline/task.eth_abi_encode_test.go: `.Context(t)`
$DIR/core/services/pipeline/task.eth_abi_encode_test.go: `.TestLogger(t)`
$DIR/core/services/pipeline/task.eth_call_test.go: `testutils.SkipShortDB(t)`
$DIR/core/services/pipeline/task.eth_call_test.go: `ethClient.
On("CallContract", mock.Anything, ethereum.CallMsg{To: &contractAddr, Gas: uint64(drJobTypeGasLimit), Data: []byte("foo bar")}, (*big.Int)(nil)).
Return([]byte("baz quux"), nil)`
$DIR/core/services/pipeline/task.eth_call_test.go: `ethClient.
On("CallContract", mock.Anything, ethereum.CallMsg{To: &contractAddr, Gas: 100_000, Data: []byte("foo bar")}, (*big.Int)(nil)).
Return([]byte("baz quux"), nil)`
$DIR/core/services/pipeline/task.eth_call_test.go: `ethClient.
On("CallContract", mock.Anything, ethereum.CallMsg{To: &contractAddr, Gas: uint64(specGasLimit), Data: []byte("foo bar")}, (*big.Int)(nil)).
Return([]byte("baz quux"), nil)`
$DIR/core/services/pipeline/task.eth_call_test.go: `ethClient.
On("CallContract", mock.Anything, ethereum.CallMsg{To: &contractAddr, Gas: uint64(drJobTypeGasLimit), From: fromAddr, Data: []byte("foo bar")}, (*big.Int)(nil)).
Return([]byte("baz quux"), nil)`
$DIR/core/services/pipeline/task.eth_call_test.go: `ethClient.
On("CallContract", mock.Anything, ethereum.CallMsg{To: &contractAddr, Data: []byte("foo bar")}, (*big.Int)(nil)).
Return([]byte("baz quux"), nil).Maybe()`
$DIR/core/services/pipeline/task.eth_call_test.go: `ethClient.
On("CallContract", mock.Anything, ethereum.CallMsg{To: &contractAddr, Gas: uint64(drJobTypeGasLimit), Data: []byte("foo bar")}, (*big.Int)(nil)).
Return([]byte("baz quux"), nil)`
$DIR/core/services/pipeline/task.eth_call_test.go: `ethClient.
On("PendingCallContract", mock.Anything, ethereum.CallMsg{To: &contractAddr, Gas: uint64(drJobTypeGasLimit), Data: []byte("foo bar")}).
Return([]byte("baz quux"), nil)`
$DIR/core/services/pipeline/task.eth_call_test.go: `t.Run(test.name, func(t *testing.T) {
task := pipeline.ETHCallTask{
BaseTask: pipeline.NewBaseTask(0, "ethcall", nil, nil, 0),
Contract: test.contract,
From: test.from,
Data: test.data,
EVMChainID: test.evmChainID,
Gas: test.gas,
Block: test.block,
}
ethClient := evmclimocks.NewClient(t)
config := pipelinemocks.NewConfig(t)
test.setupClientMocks(ethClient, config)
cfg := configtest.NewGeneralConfig(t, func(c *chainlink.Config, s *chainlink.Secrets) {
c.EVM[0].GasEstimator.LimitDefault = ptr(gasLimit)
c.EVM[0].GasEstimator.LimitJobType.DR = ptr(drJobTypeGasLimit)
})
lggr := logger.TestLogger(t)
keyStore := keystoremocks.NewEth(t)
txManager := txmmocks.NewMockEvmTxManager(t)
db := pgtest.NewSqlxDB(t)
var legacyChains legacyevm.LegacyChainContainer
if test.expectedErrorCause != nil || test.expectedErrorContains != "" {
exts := evmtest.NewChainRelayExtenders(t, evmtest.TestChainOpts{DB: db, GeneralConfig: cfg, TxManager: txManager, KeyStore: keyStore})
legacyChains = evmrelay.NewLegacyChainsFromRelayerExtenders(exts)
} else {
legacyChains = cltest.NewLegacyChainsWithMockChain(t, ethClient, cfg)
}
task.HelperSetDependencies(legacyChains, cfg.JobPipeline(), test.specGasLimit, pipeline.DirectRequestJobType)
result, runInfo := task.Run(testutils.Context(t), lggr, test.vars, test.inputs)
assert.False(t, runInfo.IsPending)
assert.False(t, runInfo.IsRetryable)
if test.expectedErrorCause != nil || test.expectedErrorContains != "" {
require.Nil(t, result.Value)
if test.expectedErrorCause != nil {
require.Equal(t, test.expectedErrorCause, errors.Cause(result.Error))
}
if test.expectedErrorContains != "" {
require.Contains(t, result.Error.Error(), test.expectedErrorContains)
}
} else {
require.NoError(t, result.Error)
require.Equal(t, test.expected, result.Value)
}
})`
$DIR/core/services/pipeline/task.eth_call_test.go: `test.setupClientMocks(ethClient, config)`
$DIR/core/services/pipeline/task.eth_call_test.go: `c.EVM[0].GasEstimator.LimitDefault = ptr(gasLimit)`
$DIR/core/services/pipeline/task.eth_call_test.go: `c.EVM[0].GasEstimator.LimitJobType.DR = ptr(drJobTypeGasLimit)`
$DIR/core/services/pipeline/task.eth_call_test.go: `legacyChains = evmrelay.NewLegacyChainsFromRelayerExtenders(exts)`
$DIR/core/services/pipeline/task.eth_call_test.go: `legacyChains = cltest.NewLegacyChainsWithMockChain(t, ethClient, cfg)`
$DIR/core/services/pipeline/task.eth_call_test.go: `task.HelperSetDependencies(legacyChains, cfg.JobPipeline(), test.specGasLimit, pipeline.DirectRequestJobType)`
$DIR/core/services/pipeline/task.eth_call_test.go: `.SkipShortDB(t)`
$DIR/core/services/pipeline/task.eth_call_test.go: `.NewVarsFrom(map[string]interface{}{
"foo": []byte("foo bar"),
})`
$DIR/core/services/pipeline/task.eth_call_test.go: `.HexToAddress("0xDeaDbeefdEAdbeefdEadbEEFdeadbeEFdEaDbeeF")`
$DIR/core/services/pipeline/task.eth_call_test.go: `.
On("CallContract", mock.Anything, ethereum.CallMsg{To: &contractAddr, Gas: uint64(drJobTypeGasLimit), Data: []byte("foo bar")}, (*big.Int)(nil))`
$DIR/core/services/pipeline/task.eth_call_test.go: `.
Return([]byte("baz quux"), nil)`
$DIR/core/services/pipeline/task.eth_call_test.go: `.NewVarsFrom(map[string]interface{}{
"foo": []byte("foo bar"),
"gasLimit": 100_000,
})`
$DIR/core/services/pipeline/task.eth_call_test.go: `.HexToAddress("0xDeaDbeefdEAdbeefdEadbEEFdeadbeEFdEaDbeeF")`
$DIR/core/services/pipeline/task.eth_call_test.go: `.
On("CallContract", mock.Anything, ethereum.CallMsg{To: &contractAddr, Gas: 100_000, Data: []byte("foo bar")}, (*big.Int)(nil))`
$DIR/core/services/pipeline/task.eth_call_test.go: `.
Return([]byte("baz quux"), nil)`
$DIR/core/services/pipeline/task.eth_call_test.go: `.NewVarsFrom(map[string]interface{}{
"foo": []byte("foo bar"),
})`
$DIR/core/services/pipeline/task.eth_call_test.go: `.HexToAddress("0xDeaDbeefdEAdbeefdEadbEEFdeadbeEFdEaDbeeF")`
$DIR/core/services/pipeline/task.eth_call_test.go: `.
On("CallContract", mock.Anything, ethereum.CallMsg{To: &contractAddr, Gas: uint64(specGasLimit), Data: []byte("foo bar")}, (*big.Int)(nil))`
$DIR/core/services/pipeline/task.eth_call_test.go: `.
Return([]byte("baz quux"), nil)`
$DIR/core/services/pipeline/task.eth_call_test.go: `.NewVarsFrom(map[string]interface{}{
"foo": []byte("foo bar"),
})`
$DIR/core/services/pipeline/task.eth_call_test.go: `.HexToAddress("0xDeaDbeefdEAdbeefdEadbEEFdeadbeEFdEaDbeeF")`
$DIR/core/services/pipeline/task.eth_call_test.go: `.HexToAddress("0xDeaDbeefdEAdbeefdEadbEEFdeadbeEFdEaDbeeF")`
$DIR/core/services/pipeline/task.eth_call_test.go: `.
On("CallContract", mock.Anything, ethereum.CallMsg{To: &contractAddr, Gas: uint64(drJobTypeGasLimit), From: fromAddr, Data: []byte("foo bar")}, (*big.Int)(nil))`
$DIR/core/services/pipeline/task.eth_call_test.go: `.
Return([]byte("baz quux"), nil)`
$DIR/core/services/pipeline/task.eth_call_test.go: `.NewVarsFrom(map[string]interface{}{
"foo": []byte("foo bar"),
})`
$DIR/core/services/pipeline/task.eth_call_test.go: `.NewVarsFrom(map[string]interface{}{
"foo": []byte("foo bar"),
})`
$DIR/core/services/pipeline/task.eth_call_test.go: `.NewVarsFrom(map[string]interface{}{
"zork": []byte("foo bar"),
})`
$DIR/core/services/pipeline/task.eth_call_test.go: `.NewVarsFrom(map[string]interface{}{
"foo": []byte(nil),
})`
$DIR/core/services/pipeline/task.eth_call_test.go: `.NewVarsFrom(map[string]interface{}{
"foo": []byte("foo bar"),
})`
$DIR/core/services/pipeline/task.eth_call_test.go: `.New("uh oh")`
$DIR/core/services/pipeline/task.eth_call_test.go: `.NewVarsFrom(map[string]interface{}{
"foo": []byte("foo bar"),
"evmChainID": "123",
})`
$DIR/core/services/pipeline/task.eth_call_test.go: `.HexToAddress("0xDeaDbeefdEAdbeefdEadbEEFdeadbeEFdEaDbeeF")`
$DIR/core/services/pipeline/task.eth_call_test.go: `.
On("CallContract", mock.Anything, ethereum.CallMsg{To: &contractAddr, Data: []byte("foo bar")}, (*big.Int)(nil))`
$DIR/core/services/pipeline/task.eth_call_test.go: `.
Return([]byte("baz quux"), nil)`
$DIR/core/services/pipeline/task.eth_call_test.go: `.Maybe()`
$DIR/core/services/pipeline/task.eth_call_test.go: `.NewVarsFrom(map[string]interface{}{
"foo": []byte("foo bar"),
})`
$DIR/core/services/pipeline/task.eth_call_test.go: `.HexToAddress("0xDeaDbeefdEAdbeefdEadbEEFdeadbeEFdEaDbeeF")`
$DIR/core/services/pipeline/task.eth_call_test.go: `.
On("CallContract", mock.Anything, ethereum.CallMsg{To: &contractAddr, Gas: uint64(drJobTypeGasLimit), Data: []byte("foo bar")}, (*big.Int)(nil))`
$DIR/core/services/pipeline/task.eth_call_test.go: `.
Return([]byte("baz quux"), nil)`
$DIR/core/services/pipeline/task.eth_call_test.go: `.NewVarsFrom(map[string]interface{}{
"foo": []byte("foo bar"),
})`
$DIR/core/services/pipeline/task.eth_call_test.go: `.HexToAddress("0xDeaDbeefdEAdbeefdEadbEEFdeadbeEFdEaDbeeF")`
$DIR/core/services/pipeline/task.eth_call_test.go: `.
On("PendingCallContract", mock.Anything, ethereum.CallMsg{To: &contractAddr, Gas: uint64(drJobTypeGasLimit), Data: []byte("foo bar")})`
$DIR/core/services/pipeline/task.eth_call_test.go: `.
Return([]byte("baz quux"), nil)`
$DIR/core/services/pipeline/task.eth_call_test.go: `.Run(test.name, func(t *testing.T) {
task := pipeline.ETHCallTask{
BaseTask: pipeline.NewBaseTask(0, "ethcall", nil, nil, 0),
Contract: test.contract,
From: test.from,
Data: test.data,
EVMChainID: test.evmChainID,
Gas: test.gas,
Block: test.block,
}
ethClient := evmclimocks.NewClient(t)
config := pipelinemocks.NewConfig(t)
test.setupClientMocks(ethClient, config)
cfg := configtest.NewGeneralConfig(t, func(c *chainlink.Config, s *chainlink.Secrets) {
c.EVM[0].GasEstimator.LimitDefault = ptr(gasLimit)
c.EVM[0].GasEstimator.LimitJobType.DR = ptr(drJobTypeGasLimit)
})
lggr := logger.TestLogger(t)
keyStore := keystoremocks.NewEth(t)
txManager := txmmocks.NewMockEvmTxManager(t)
db := pgtest.NewSqlxDB(t)
var legacyChains legacyevm.LegacyChainContainer
if test.expectedErrorCause != nil || test.expectedErrorContains != "" {
exts := evmtest.NewChainRelayExtenders(t, evmtest.TestChainOpts{DB: db, GeneralConfig: cfg, TxManager: txManager, KeyStore: keyStore})
legacyChains = evmrelay.NewLegacyChainsFromRelayerExtenders(exts)
} else {
legacyChains = cltest.NewLegacyChainsWithMockChain(t, ethClient, cfg)
}
task.HelperSetDependencies(legacyChains, cfg.JobPipeline(), test.specGasLimit, pipeline.DirectRequestJobType)
result, runInfo := task.Run(testutils.Context(t), lggr, test.vars, test.inputs)
assert.False(t, runInfo.IsPending)
assert.False(t, runInfo.IsRetryable)
if test.expectedErrorCause != nil || test.expectedErrorContains != "" {
require.Nil(t, result.Value)
if test.expectedErrorCause != nil {
require.Equal(t, test.expectedErrorCause, errors.Cause(result.Error))
}
if test.expectedErrorContains != "" {
require.Contains(t, result.Error.Error(), test.expectedErrorContains)
}
} else {
require.NoError(t, result.Error)
require.Equal(t, test.expected, result.Value)
}
})`
$DIR/core/services/pipeline/task.eth_call_test.go: `.NewBaseTask(0, "ethcall", nil, nil, 0)`
$DIR/core/services/pipeline/task.eth_call_test.go: `.NewClient(t)`
$DIR/core/services/pipeline/task.eth_call_test.go: `.NewConfig(t)`
$DIR/core/services/pipeline/task.eth_call_test.go: `.setupClientMocks(ethClient, config)`
$DIR/core/services/pipeline/task.eth_call_test.go: `.NewGeneralConfig(t, func(c *chainlink.Config, s *chainlink.Secrets) {
c.EVM[0].GasEstimator.LimitDefault = ptr(gasLimit)
c.EVM[0].GasEstimator.LimitJobType.DR = ptr(drJobTypeGasLimit)
})`
$DIR/core/services/pipeline/task.eth_call_test.go: `.TestLogger(t)`
$DIR/core/services/pipeline/task.eth_call_test.go: `.NewEth(t)`
$DIR/core/services/pipeline/task.eth_call_test.go: `.NewMockEvmTxManager(t)`
$DIR/core/services/pipeline/task.eth_call_test.go: `.NewSqlxDB(t)`
$DIR/core/services/pipeline/task.eth_call_test.go: `.NewChainRelayExtenders(t, evmtest.TestChainOpts{DB: db, GeneralConfig: cfg, TxManager: txManager, KeyStore: keyStore})`
$DIR/core/services/pipeline/task.eth_call_test.go: `.NewLegacyChainsFromRelayerExtenders(exts)`
$DIR/core/services/pipeline/task.eth_call_test.go: `.NewLegacyChainsWithMockChain(t, ethClient, cfg)`
$DIR/core/services/pipeline/task.eth_call_test.go: `.HelperSetDependencies(legacyChains, cfg.JobPipeline(), test.specGasLimit, pipeline.DirectRequestJobType)`
$DIR/core/services/pipeline/task.eth_call_test.go: `.JobPipeline()`
$DIR/core/services/pipeline/task.eth_call_test.go: `.Run(testutils.Context(t), lggr, test.vars, test.inputs)`
$DIR/core/services/pipeline/task.eth_call_test.go: `.Context(t)`
$DIR/core/services/pipeline/task.eth_tx_test.go: `keyStore.On("GetRoundRobinAddress", mock.Anything, testutils.FixtureChainID, from).Return(from, nil)`
$DIR/core/services/pipeline/task.eth_tx_test.go: `txManager.On("CreateTransaction", mock.Anything, txmgr.TxRequest{
FromAddress: from,
ToAddress: to,
EncodedPayload: data,
FeeLimit: gasLimit,
Meta: txMeta,
Strategy: txmgrcommon.NewSendEveryStrategy(),
Checker: txmgr.TransmitCheckerSpec{
CheckerType: txmgr.TransmitCheckerTypeVRFV2,
VRFCoordinatorAddress: &addr,
},
SignalCallback: true,
}).Return(txmgr.Tx{}, nil)`
$DIR/core/services/pipeline/task.eth_tx_test.go: `keyStore.On("GetRoundRobinAddress", mock.Anything, testutils.FixtureChainID, from).Return(from, nil)`
$DIR/core/services/pipeline/task.eth_tx_test.go: `txManager.On("CreateTransaction", mock.Anything, txmgr.TxRequest{
FromAddress: from,
ToAddress: to,
EncodedPayload: data,
FeeLimit: gasLimit,
Meta: txMeta,
Strategy: txmgrcommon.NewSendEveryStrategy(),
SignalCallback: true,
}).Return(txmgr.Tx{}, nil)`
$DIR/core/services/pipeline/task.eth_tx_test.go: `keyStore.On("GetRoundRobinAddress", mock.Anything, testutils.FixtureChainID, addr).Return(addr, nil)`
$DIR/core/services/pipeline/task.eth_tx_test.go: `txManager.On("CreateTransaction", mock.Anything, mock.MatchedBy(func(tx txmgr.TxRequest) bool {
return tx.MinConfirmations == clnull.Uint32From(2)
})).Return(txmgr.Tx{}, nil)`
$DIR/core/services/pipeline/task.eth_tx_test.go: `keyStore.On("GetRoundRobinAddress", mock.Anything, testutils.FixtureChainID, from).Return(from, nil)`
$DIR/core/services/pipeline/task.eth_tx_test.go: `txManager.On("CreateTransaction", mock.Anything, txmgr.TxRequest{
FromAddress: from,
ToAddress: to,
EncodedPayload: data,
FeeLimit: gasLimit,
Meta: txMeta,
Strategy: txmgrcommon.NewSendEveryStrategy(),
SignalCallback: true,
}).Return(txmgr.Tx{}, nil)`
$DIR/core/services/pipeline/task.eth_tx_test.go: `keyStore.On("GetRoundRobinAddress", mock.Anything, testutils.FixtureChainID).Return(from, nil)`
$DIR/core/services/pipeline/task.eth_tx_test.go: `txManager.On("CreateTransaction", mock.Anything, txmgr.TxRequest{
FromAddress: from,
ToAddress: to,
EncodedPayload: data,
FeeLimit: gasLimit,
Meta: txMeta,
Strategy: txmgrcommon.NewSendEveryStrategy(),
SignalCallback: true,
}).Return(txmgr.Tx{}, nil)`
$DIR/core/services/pipeline/task.eth_tx_test.go: `keyStore.On("GetRoundRobinAddress", mock.Anything, testutils.FixtureChainID, from).Return(from, nil)`
$DIR/core/services/pipeline/task.eth_tx_test.go: `txManager.On("CreateTransaction", mock.Anything, txmgr.TxRequest{
FromAddress: from,
ToAddress: to,
EncodedPayload: data,
FeeLimit: gasLimit,
Meta: txMeta,
Strategy: txmgrcommon.NewSendEveryStrategy(),
SignalCallback: true,
}).Return(txmgr.Tx{}, nil)`
$DIR/core/services/pipeline/task.eth_tx_test.go: `keyStore.On("GetRoundRobinAddress", mock.Anything, testutils.FixtureChainID, from).Return(from, nil)`
$DIR/core/services/pipeline/task.eth_tx_test.go: `txManager.On("CreateTransaction", mock.Anything, txmgr.TxRequest{
FromAddress: from,
ToAddress: to,
EncodedPayload: data,
FeeLimit: uint64(drJobTypeGasLimit),
Meta: txMeta,
Strategy: txmgrcommon.NewSendEveryStrategy(),
SignalCallback: true,
}).Return(txmgr.Tx{}, nil)`
$DIR/core/services/pipeline/task.eth_tx_test.go: `keyStore.On("GetRoundRobinAddress", mock.Anything, testutils.FixtureChainID, from).Return(from, nil)`
$DIR/core/services/pipeline/task.eth_tx_test.go: `txManager.On("CreateTransaction", mock.Anything, txmgr.TxRequest{
FromAddress: from,
ToAddress: to,
EncodedPayload: data,
FeeLimit: uint64(specGasLimit),
Meta: txMeta,
Strategy: txmgrcommon.NewSendEveryStrategy(),
SignalCallback: true,
}).Return(txmgr.Tx{}, nil)`
$DIR/core/services/pipeline/task.eth_tx_test.go: `keyStore.On("GetRoundRobinAddress", mock.Anything, testutils.FixtureChainID).Return(nil, errors.New("uh oh"))`
$DIR/core/services/pipeline/task.eth_tx_test.go: `keyStore.On("GetRoundRobinAddress", mock.Anything, testutils.FixtureChainID, from).Return(from, nil)`
$DIR/core/services/pipeline/task.eth_tx_test.go: `txManager.On("CreateTransaction", mock.Anything, txmgr.TxRequest{
FromAddress: from,
ToAddress: to,
EncodedPayload: data,
FeeLimit: gasLimit,
Meta: txMeta,
Strategy: txmgrcommon.NewSendEveryStrategy(),
SignalCallback: true,
}).Return(txmgr.Tx{}, errors.New("uh oh"))`
$DIR/core/services/pipeline/task.eth_tx_test.go: `keyStore.On("GetRoundRobinAddress", mock.Anything, testutils.FixtureChainID, from).Return(from, nil)`
$DIR/core/services/pipeline/task.eth_tx_test.go: `txManager.On("CreateTransaction", mock.Anything, mock.MatchedBy(func(tx txmgr.TxRequest) bool {
return tx.MinConfirmations == clnull.Uint32From(3) && tx.PipelineTaskRunID != nil
})).Return(txmgr.Tx{}, nil)`
$DIR/core/services/pipeline/task.eth_tx_test.go: `t.Run(test.name, func(t *testing.T) {
t.Parallel()
task := pipeline.ETHTxTask{
BaseTask: pipeline.NewBaseTask(0, "ethtx", nil, nil, 0),
From: test.from,
To: test.to,
Data: test.data,
GasLimit: test.gasLimit,
TxMeta: test.txMeta,
MinConfirmations: test.minConfirmations,
EVMChainID: test.evmChainID,
TransmitChecker: test.transmitChecker,
}
keyStore := keystoremocks.NewEth(t)
txManager := txmmocks.NewMockEvmTxManager(t)
db := pgtest.NewSqlxDB(t)
cfg := configtest.NewGeneralConfig(t, func(c *chainlink.Config, s *chainlink.Secrets) {
c.EVM[0].GasEstimator.LimitDefault = ptr(defaultGasLimit)
c.EVM[0].GasEstimator.LimitJobType.DR = ptr(drJobTypeGasLimit)
})
lggr := logger.TestLogger(t)
relayExtenders := evmtest.NewChainRelayExtenders(t, evmtest.TestChainOpts{DB: db, GeneralConfig: cfg,
TxManager: txManager, KeyStore: keyStore})
legacyChains := evmrelay.NewLegacyChainsFromRelayerExtenders(relayExtenders)
test.setupClientMocks(keyStore, txManager)
task.HelperSetDependencies(legacyChains, keyStore, test.specGasLimit, pipeline.DirectRequestJobType)
result, runInfo := task.Run(testutils.Context(t), lggr, test.vars, test.inputs)
assert.Equal(t, test.expectedRunInfo, runInfo)
if test.expectedErrorCause != nil || test.expectedErrorContains != "" {
require.Nil(t, result.Value)
if test.expectedErrorCause != nil {
require.Equal(t, test.expectedErrorCause, errors.Cause(result.Error))
}
if test.expectedErrorContains != "" {
require.Contains(t, result.Error.Error(), test.expectedErrorContains)
}
} else {
require.NoError(t, result.Error)
require.Equal(t, test.expected, result.Value)
}
})`
$DIR/core/services/pipeline/task.eth_tx_test.go: `c.EVM[0].GasEstimator.LimitDefault = ptr(defaultGasLimit)`
$DIR/core/services/pipeline/task.eth_tx_test.go: `c.EVM[0].GasEstimator.LimitJobType.DR = ptr(drJobTypeGasLimit)`
$DIR/core/services/pipeline/task.eth_tx_test.go: `test.setupClientMocks(keyStore, txManager)`
$DIR/core/services/pipeline/task.eth_tx_test.go: `task.HelperSetDependencies(legacyChains, keyStore, test.specGasLimit, pipeline.DirectRequestJobType)`
$DIR/core/services/pipeline/task.eth_tx_test.go: `.HexToHash("0x5198616554d738d9485d1a7cf53b2f33e09c3bbc8fe9ac0020bd672cd2bc15d2")`
$DIR/core/services/pipeline/task.eth_tx_test.go: `.HexToHash("0xc524fafafcaec40652b1f84fca09c231185437d008d195fccf2f51e64b7062f8")`
$DIR/core/services/pipeline/task.eth_tx_test.go: `.HexToAddress("0x882969652440ccf14a5dbb9bd53eb21cb1e11e5c")`
$DIR/core/services/pipeline/task.eth_tx_test.go: `.HexToAddress("0xDeaDbeefdEAdbeefdEadbEEFdeadbeEFdEaDbeeF")`
$DIR/core/services/pipeline/task.eth_tx_test.go: `.NewVarsFrom(nil)`
$DIR/core/services/pipeline/task.eth_tx_test.go: `.HexToAddress("0x2E396ecbc8223Ebc16EC45136228AE5EDB649943")`
$DIR/core/services/pipeline/task.eth_tx_test.go: `.BoolFrom(false)`
$DIR/core/services/pipeline/task.eth_tx_test.go: `.On("GetRoundRobinAddress", mock.Anything, testutils.FixtureChainID, from)`
$DIR/core/services/pipeline/task.eth_tx_test.go: `.Return(from, nil)`
$DIR/core/services/pipeline/task.eth_tx_test.go: `.On("CreateTransaction", mock.Anything, txmgr.TxRequest{
FromAddress: from,
ToAddress: to,
EncodedPayload: data,
FeeLimit: gasLimit,
Meta: txMeta,
Strategy: txmgrcommon.NewSendEveryStrategy(),
Checker: txmgr.TransmitCheckerSpec{
CheckerType: txmgr.TransmitCheckerTypeVRFV2,
VRFCoordinatorAddress: &addr,
},
SignalCallback: true,
})`
$DIR/core/services/pipeline/task.eth_tx_test.go: `.NewSendEveryStrategy()`
$DIR/core/services/pipeline/task.eth_tx_test.go: `.Return(txmgr.Tx{}, nil)`
$DIR/core/services/pipeline/task.eth_tx_test.go: `.NewVarsFrom(map[string]interface{}{
"fromAddr": common.HexToAddress("0x882969652440ccf14a5dbb9bd53eb21cb1e11e5c"),
"toAddr": common.HexToAddress("0xDeaDbeefdEAdbeefdEadbEEFdeadbeEFdEaDbeeF"),
"data": []byte("foobar"),
"gasLimit": uint64(12345),
"jobID": int32(321),
"requestID": common.HexToHash("0x5198616554d738d9485d1a7cf53b2f33e09c3bbc8fe9ac0020bd672cd2bc15d2"),
"requestTxHash": common.HexToHash("0xc524fafafcaec40652b1f84fca09c231185437d008d195fccf2f51e64b7062f8"),
})`
$DIR/core/services/pipeline/task.eth_tx_test.go: `.HexToAddress("0x882969652440ccf14a5dbb9bd53eb21cb1e11e5c")`
$DIR/core/services/pipeline/task.eth_tx_test.go: `.HexToAddress("0xDeaDbeefdEAdbeefdEadbEEFdeadbeEFdEaDbeeF")`
$DIR/core/services/pipeline/task.eth_tx_test.go: `.HexToHash("0x5198616554d738d9485d1a7cf53b2f33e09c3bbc8fe9ac0020bd672cd2bc15d2")`
$DIR/core/services/pipeline/task.eth_tx_test.go: `.HexToHash("0xc524fafafcaec40652b1f84fca09c231185437d008d195fccf2f51e64b7062f8")`
$DIR/core/services/pipeline/task.eth_tx_test.go: `.BoolFrom(false)`
$DIR/core/services/pipeline/task.eth_tx_test.go: `.On("GetRoundRobinAddress", mock.Anything, testutils.FixtureChainID, from)`
$DIR/core/services/pipeline/task.eth_tx_test.go: `.Return(from, nil)`
$DIR/core/services/pipeline/task.eth_tx_test.go: `.On("CreateTransaction", mock.Anything, txmgr.TxRequest{
FromAddress: from,
ToAddress: to,
EncodedPayload: data,
FeeLimit: gasLimit,
Meta: txMeta,
Strategy: txmgrcommon.NewSendEveryStrategy(),
SignalCallback: true,
})`
$DIR/core/services/pipeline/task.eth_tx_test.go: `.NewSendEveryStrategy()`
$DIR/core/services/pipeline/task.eth_tx_test.go: `.Return(txmgr.Tx{}, nil)`
$DIR/core/services/pipeline/task.eth_tx_test.go: `.NewVarsFrom(map[string]interface{}{
"fromAddr": common.HexToAddress("0x882969652440ccf14a5dbb9bd53eb21cb1e11e5c"),
"toAddr": common.HexToAddress("0xDeaDbeefdEAdbeefdEadbEEFdeadbeEFdEaDbeeF"),
"data": []byte("foobar"),
"gasLimit": uint64(12345),
"minConfirmations": uint64(2),
"jobID": int32(321),
"requestID": common.HexToHash("0x5198616554d738d9485d1a7cf53b2f33e09c3bbc8fe9ac0020bd672cd2bc15d2"),
"requestTxHash": common.HexToHash("0xc524fafafcaec40652b1f84fca09c231185437d008d195fccf2f51e64b7062f8"),
})`
$DIR/core/services/pipeline/task.eth_tx_test.go: `.HexToAddress("0x882969652440ccf14a5dbb9bd53eb21cb1e11e5c")`
$DIR/core/services/pipeline/task.eth_tx_test.go: `.HexToAddress("0xDeaDbeefdEAdbeefdEadbEEFdeadbeEFdEaDbeeF")`
$DIR/core/services/pipeline/task.eth_tx_test.go: `.HexToHash("0x5198616554d738d9485d1a7cf53b2f33e09c3bbc8fe9ac0020bd672cd2bc15d2")`
$DIR/core/services/pipeline/task.eth_tx_test.go: `.HexToHash("0xc524fafafcaec40652b1f84fca09c231185437d008d195fccf2f51e64b7062f8")`
$DIR/core/services/pipeline/task.eth_tx_test.go: `.HexToAddress("0x882969652440ccf14a5dbb9bd53eb21cb1e11e5c")`
$DIR/core/services/pipeline/task.eth_tx_test.go: `.On("GetRoundRobinAddress", mock.Anything, testutils.FixtureChainID, addr)`
$DIR/core/services/pipeline/task.eth_tx_test.go: `.Return(addr, nil)`
$DIR/core/services/pipeline/task.eth_tx_test.go: `.On("CreateTransaction", mock.Anything, mock.MatchedBy(func(tx txmgr.TxRequest) bool {
return tx.MinConfirmations == clnull.Uint32From(2)
}))`
$DIR/core/services/pipeline/task.eth_tx_test.go: `.MatchedBy(func(tx txmgr.TxRequest) bool {
return tx.MinConfirmations == clnull.Uint32From(2)
})`
$DIR/core/services/pipeline/task.eth_tx_test.go: `.Uint32From(2)`
$DIR/core/services/pipeline/task.eth_tx_test.go: `.Return(txmgr.Tx{}, nil)`
$DIR/core/services/pipeline/task.eth_tx_test.go: `.NewVarsFrom(map[string]interface{}{
"fromAddrs": []common.Address{common.HexToAddress("0x882969652440ccf14a5dbb9bd53eb21cb1e11e5c")},
"toAddr": "0xDeaDbeefdEAdbeefdEadbEEFdeadbeEFdEaDbeeF",
"data": []byte("foobar"),
"gasLimit": uint32(12345),
"requestData": map[string]interface{}{
"jobID": int32(321),
"requestID": common.HexToHash("0x5198616554d738d9485d1a7cf53b2f33e09c3bbc8fe9ac0020bd672cd2bc15d2"),
"requestTxHash": common.HexToHash("0xc524fafafcaec40652b1f84fca09c231185437d008d195fccf2f51e64b7062f8"),
},
})`
$DIR/core/services/pipeline/task.eth_tx_test.go: `.HexToAddress("0x882969652440ccf14a5dbb9bd53eb21cb1e11e5c")`
$DIR/core/services/pipeline/task.eth_tx_test.go: `.HexToHash("0x5198616554d738d9485d1a7cf53b2f33e09c3bbc8fe9ac0020bd672cd2bc15d2")`
$DIR/core/services/pipeline/task.eth_tx_test.go: `.HexToHash("0xc524fafafcaec40652b1f84fca09c231185437d008d195fccf2f51e64b7062f8")`
$DIR/core/services/pipeline/task.eth_tx_test.go: `.BoolFrom(false)`
$DIR/core/services/pipeline/task.eth_tx_test.go: `.On("GetRoundRobinAddress", mock.Anything, testutils.FixtureChainID, from)`
$DIR/core/services/pipeline/task.eth_tx_test.go: `.Return(from, nil)`
$DIR/core/services/pipeline/task.eth_tx_test.go: `.On("CreateTransaction", mock.Anything, txmgr.TxRequest{
FromAddress: from,
ToAddress: to,
EncodedPayload: data,
FeeLimit: gasLimit,
Meta: txMeta,
Strategy: txmgrcommon.NewSendEveryStrategy(),
SignalCallback: true,
})`
$DIR/core/services/pipeline/task.eth_tx_test.go: `.NewSendEveryStrategy()`
$DIR/core/services/pipeline/task.eth_tx_test.go: `.Return(txmgr.Tx{}, nil)`
$DIR/core/services/pipeline/task.eth_tx_test.go: `.NewVarsFrom(map[string]interface{}{
"fromAddrs": []common.Address{common.HexToAddress("0x882969652440ccf14a5dbb9bd53eb21cb1e11e5c")},
"toAddr": common.HexToAddress("0xDeaDbeefdEAdbeefdEadbEEFdeadbeEFdEaDbeeF"),
"data": []byte("foobar"),
"gasLimit": uint32(12345),
"requestData": map[string]interface{}{
"jobID": int32(321),
"requestID": common.HexToHash("0x5198616554d738d9485d1a7cf53b2f33e09c3bbc8fe9ac0020bd672cd2bc15d2"),
"requestTxHash": common.HexToHash("0xc524fafafcaec40652b1f84fca09c231185437d008d195fccf2f51e64b7062f8"),
},
})`
$DIR/core/services/pipeline/task.eth_tx_test.go: `.HexToAddress("0x882969652440ccf14a5dbb9bd53eb21cb1e11e5c")`
$DIR/core/services/pipeline/task.eth_tx_test.go: `.HexToAddress("0xDeaDbeefdEAdbeefdEadbEEFdeadbeEFdEaDbeeF")`
$DIR/core/services/pipeline/task.eth_tx_test.go: `.HexToHash("0x5198616554d738d9485d1a7cf53b2f33e09c3bbc8fe9ac0020bd672cd2bc15d2")`
$DIR/core/services/pipeline/task.eth_tx_test.go: `.HexToHash("0xc524fafafcaec40652b1f84fca09c231185437d008d195fccf2f51e64b7062f8")`
$DIR/core/services/pipeline/task.eth_tx_test.go: `.BoolFrom(false)`
$DIR/core/services/pipeline/task.eth_tx_test.go: `.On("GetRoundRobinAddress", mock.Anything, testutils.FixtureChainID)`
$DIR/core/services/pipeline/task.eth_tx_test.go: `.Return(from, nil)`
$DIR/core/services/pipeline/task.eth_tx_test.go: `.On("CreateTransaction", mock.Anything, txmgr.TxRequest{
FromAddress: from,
ToAddress: to,
EncodedPayload: data,
FeeLimit: gasLimit,
Meta: txMeta,
Strategy: txmgrcommon.NewSendEveryStrategy(),
SignalCallback: true,
})`
$DIR/core/services/pipeline/task.eth_tx_test.go: `.NewSendEveryStrategy()`
$DIR/core/services/pipeline/task.eth_tx_test.go: `.Return(txmgr.Tx{}, nil)`
$DIR/core/services/pipeline/task.eth_tx_test.go: `.NewVarsFrom(nil)`
$DIR/core/services/pipeline/task.eth_tx_test.go: `.BoolFrom(false)`
$DIR/core/services/pipeline/task.eth_tx_test.go: `.On("GetRoundRobinAddress", mock.Anything, testutils.FixtureChainID, from)`
$DIR/core/services/pipeline/task.eth_tx_test.go: `.Return(from, nil)`
$DIR/core/services/pipeline/task.eth_tx_test.go: `.On("CreateTransaction", mock.Anything, txmgr.TxRequest{
FromAddress: from,
ToAddress: to,
EncodedPayload: data,
FeeLimit: gasLimit,
Meta: txMeta,
Strategy: txmgrcommon.NewSendEveryStrategy(),
SignalCallback: true,
})`
$DIR/core/services/pipeline/task.eth_tx_test.go: `.NewSendEveryStrategy()`
$DIR/core/services/pipeline/task.eth_tx_test.go: `.Return(txmgr.Tx{}, nil)`
$DIR/core/services/pipeline/task.eth_tx_test.go: `.NewVarsFrom(nil)`
$DIR/core/services/pipeline/task.eth_tx_test.go: `.BoolFrom(false)`
$DIR/core/services/pipeline/task.eth_tx_test.go: `.On("GetRoundRobinAddress", mock.Anything, testutils.FixtureChainID, from)`
$DIR/core/services/pipeline/task.eth_tx_test.go: `.Return(from, nil)`
$DIR/core/services/pipeline/task.eth_tx_test.go: `.On("CreateTransaction", mock.Anything, txmgr.TxRequest{
FromAddress: from,
ToAddress: to,
EncodedPayload: data,
FeeLimit: uint64(drJobTypeGasLimit),
Meta: txMeta,
Strategy: txmgrcommon.NewSendEveryStrategy(),
SignalCallback: true,
})`
$DIR/core/services/pipeline/task.eth_tx_test.go: `.NewSendEveryStrategy()`
$DIR/core/services/pipeline/task.eth_tx_test.go: `.Return(txmgr.Tx{}, nil)`
$DIR/core/services/pipeline/task.eth_tx_test.go: `.NewVarsFrom(nil)`
$DIR/core/services/pipeline/task.eth_tx_test.go: `.BoolFrom(false)`
$DIR/core/services/pipeline/task.eth_tx_test.go: `.On("GetRoundRobinAddress", mock.Anything, testutils.FixtureChainID, from)`
$DIR/core/services/pipeline/task.eth_tx_test.go: `.Return(from, nil)`
$DIR/core/services/pipeline/task.eth_tx_test.go: `.On("CreateTransaction", mock.Anything, txmgr.TxRequest{
FromAddress: from,
ToAddress: to,
EncodedPayload: data,
FeeLimit: uint64(specGasLimit),
Meta: txMeta,
Strategy: txmgrcommon.NewSendEveryStrategy(),
SignalCallback: true,
})`
$DIR/core/services/pipeline/task.eth_tx_test.go: `.NewSendEveryStrategy()`
$DIR/core/services/pipeline/task.eth_tx_test.go: `.Return(txmgr.Tx{}, nil)`
$DIR/core/services/pipeline/task.eth_tx_test.go: `.NewVarsFrom(map[string]interface{}{
"fromAddrs": []common.Address{common.HexToAddress("0x882969652440ccf14a5dbb9bd53eb21cb1e11e5c")},
"toAddr": common.HexToAddress("0xDeaDbeefdEAdbeefdEadbEEFdeadbeEFdEaDbeeF"),
"data": []byte("foobar"),
"gasLimit": uint32(12345),
"requestData": map[string]interface{}{
"jobID": int32(321),
"requestID": common.HexToHash("0x5198616554d738d9485d1a7cf53b2f33e09c3bbc8fe9ac0020bd672cd2bc15d2"),
"requestTxHash": common.HexToHash("0xc524fafafcaec40652b1f84fca09c231185437d008d195fccf2f51e64b7062f8"),
},
})`
$DIR/core/services/pipeline/task.eth_tx_test.go: `.HexToAddress("0x882969652440ccf14a5dbb9bd53eb21cb1e11e5c")`
$DIR/core/services/pipeline/task.eth_tx_test.go: `.HexToAddress("0xDeaDbeefdEAdbeefdEadbEEFdeadbeEFdEaDbeeF")`
$DIR/core/services/pipeline/task.eth_tx_test.go: `.HexToHash("0x5198616554d738d9485d1a7cf53b2f33e09c3bbc8fe9ac0020bd672cd2bc15d2")`
$DIR/core/services/pipeline/task.eth_tx_test.go: `.HexToHash("0xc524fafafcaec40652b1f84fca09c231185437d008d195fccf2f51e64b7062f8")`
$DIR/core/services/pipeline/task.eth_tx_test.go: `.On("GetRoundRobinAddress", mock.Anything, testutils.FixtureChainID)`
$DIR/core/services/pipeline/task.eth_tx_test.go: `.Return(nil, errors.New("uh oh"))`
$DIR/core/services/pipeline/task.eth_tx_test.go: `.New("uh oh")`
$DIR/core/services/pipeline/task.eth_tx_test.go: `.NewVarsFrom(nil)`
$DIR/core/services/pipeline/task.eth_tx_test.go: `.BoolFrom(false)`
$DIR/core/services/pipeline/task.eth_tx_test.go: `.On("GetRoundRobinAddress", mock.Anything, testutils.FixtureChainID, from)`
$DIR/core/services/pipeline/task.eth_tx_test.go: `.Return(from, nil)`
$DIR/core/services/pipeline/task.eth_tx_test.go: `.On("CreateTransaction", mock.Anything, txmgr.TxRequest{
FromAddress: from,
ToAddress: to,
EncodedPayload: data,
FeeLimit: gasLimit,
Meta: txMeta,
Strategy: txmgrcommon.NewSendEveryStrategy(),
SignalCallback: true,
})`
$DIR/core/services/pipeline/task.eth_tx_test.go: `.NewSendEveryStrategy()`
$DIR/core/services/pipeline/task.eth_tx_test.go: `.Return(txmgr.Tx{}, errors.New("uh oh"))`
$DIR/core/services/pipeline/task.eth_tx_test.go: `.New("uh oh")`
$DIR/core/services/pipeline/task.eth_tx_test.go: `.NewVarsFrom(nil)`
$DIR/core/services/pipeline/task.eth_tx_test.go: `.NewVarsFrom(nil)`
$DIR/core/services/pipeline/task.eth_tx_test.go: `.NewVarsFrom(nil)`
$DIR/core/services/pipeline/task.eth_tx_test.go: `.NewVarsFrom(nil)`
$DIR/core/services/pipeline/task.eth_tx_test.go: `.New("uh oh")`
$DIR/core/services/pipeline/task.eth_tx_test.go: `.NewVarsFrom(nil)`
$DIR/core/services/pipeline/task.eth_tx_test.go: `.HexToAddress("0x882969652440ccf14a5dbb9bd53eb21cb1e11e5c")`
$DIR/core/services/pipeline/task.eth_tx_test.go: `.On("GetRoundRobinAddress", mock.Anything, testutils.FixtureChainID, from)`
$DIR/core/services/pipeline/task.eth_tx_test.go: `.Return(from, nil)`
$DIR/core/services/pipeline/task.eth_tx_test.go: `.On("CreateTransaction", mock.Anything, mock.MatchedBy(func(tx txmgr.TxRequest) bool {
return tx.MinConfirmations == clnull.Uint32From(3) && tx.PipelineTaskRunID != nil
}))`
$DIR/core/services/pipeline/task.eth_tx_test.go: `.MatchedBy(func(tx txmgr.TxRequest) bool {
return tx.MinConfirmations == clnull.Uint32From(3) && tx.PipelineTaskRunID != nil
})`
$DIR/core/services/pipeline/task.eth_tx_test.go: `.Uint32From(3)`
$DIR/core/services/pipeline/task.eth_tx_test.go: `.Return(txmgr.Tx{}, nil)`
$DIR/core/services/pipeline/task.eth_tx_test.go: `.NewVarsFrom(map[string]interface{}{
"fromAddr": common.HexToAddress("0x882969652440ccf14a5dbb9bd53eb21cb1e11e5c"),
"toAddr": common.HexToAddress("0xDeaDbeefdEAdbeefdEadbEEFdeadbeEFdEaDbeeF"),
"data": []byte("foobar"),
"gasLimit": uint32(12345),
"jobID": int32(321),
"requestID": common.HexToHash("0x5198616554d738d9485d1a7cf53b2f33e09c3bbc8fe9ac0020bd672cd2bc15d2"),
"requestTxHash": common.HexToHash("0xc524fafafcaec40652b1f84fca09c231185437d008d195fccf2f51e64b7062f8"),
"evmChainID": "123",
})`
$DIR/core/services/pipeline/task.eth_tx_test.go: `.HexToAddress("0x882969652440ccf14a5dbb9bd53eb21cb1e11e5c")`
$DIR/core/services/pipeline/task.eth_tx_test.go: `.HexToAddress("0xDeaDbeefdEAdbeefdEadbEEFdeadbeEFdEaDbeeF")`
$DIR/core/services/pipeline/task.eth_tx_test.go: `.HexToHash("0x5198616554d738d9485d1a7cf53b2f33e09c3bbc8fe9ac0020bd672cd2bc15d2")`
$DIR/core/services/pipeline/task.eth_tx_test.go: `.HexToHash("0xc524fafafcaec40652b1f84fca09c231185437d008d195fccf2f51e64b7062f8")`
$DIR/core/services/pipeline/task.eth_tx_test.go: `.Run(test.name, func(t *testing.T) {
t.Parallel()
task := pipeline.ETHTxTask{
BaseTask: pipeline.NewBaseTask(0, "ethtx", nil, nil, 0),
From: test.from,
To: test.to,
Data: test.data,
GasLimit: test.gasLimit,
TxMeta: test.txMeta,
MinConfirmations: test.minConfirmations,
EVMChainID: test.evmChainID,
TransmitChecker: test.transmitChecker,
}
keyStore := keystoremocks.NewEth(t)
txManager := txmmocks.NewMockEvmTxManager(t)
db := pgtest.NewSqlxDB(t)
cfg := configtest.NewGeneralConfig(t, func(c *chainlink.Config, s *chainlink.Secrets) {
c.EVM[0].GasEstimator.LimitDefault = ptr(defaultGasLimit)
c.EVM[0].GasEstimator.LimitJobType.DR = ptr(drJobTypeGasLimit)
})
lggr := logger.TestLogger(t)
relayExtenders := evmtest.NewChainRelayExtenders(t, evmtest.TestChainOpts{DB: db, GeneralConfig: cfg,
TxManager: txManager, KeyStore: keyStore})
legacyChains := evmrelay.NewLegacyChainsFromRelayerExtenders(relayExtenders)
test.setupClientMocks(keyStore, txManager)
task.HelperSetDependencies(legacyChains, keyStore, test.specGasLimit, pipeline.DirectRequestJobType)
result, runInfo := task.Run(testutils.Context(t), lggr, test.vars, test.inputs)
assert.Equal(t, test.expectedRunInfo, runInfo)
if test.expectedErrorCause != nil || test.expectedErrorContains != "" {
require.Nil(t, result.Value)
if test.expectedErrorCause != nil {
require.Equal(t, test.expectedErrorCause, errors.Cause(result.Error))
}
if test.expectedErrorContains != "" {
require.Contains(t, result.Error.Error(), test.expectedErrorContains)
}
} else {
require.NoError(t, result.Error)
require.Equal(t, test.expected, result.Value)
}
})`
$DIR/core/services/pipeline/task.eth_tx_test.go: `.NewBaseTask(0, "ethtx", nil, nil, 0)`
$DIR/core/services/pipeline/task.eth_tx_test.go: `.NewEth(t)`
$DIR/core/services/pipeline/task.eth_tx_test.go: `.NewMockEvmTxManager(t)`
$DIR/core/services/pipeline/task.eth_tx_test.go: `.NewSqlxDB(t)`
$DIR/core/services/pipeline/task.eth_tx_test.go: `.NewGeneralConfig(t, func(c *chainlink.Config, s *chainlink.Secrets) {
c.EVM[0].GasEstimator.LimitDefault = ptr(defaultGasLimit)
c.EVM[0].GasEstimator.LimitJobType.DR = ptr(drJobTypeGasLimit)
})`
$DIR/core/services/pipeline/task.eth_tx_test.go: `.TestLogger(t)`
$DIR/core/services/pipeline/task.eth_tx_test.go: `.NewChainRelayExtenders(t, evmtest.TestChainOpts{DB: db, GeneralConfig: cfg,
TxManager: txManager, KeyStore: keyStore})`
$DIR/core/services/pipeline/task.eth_tx_test.go: `.NewLegacyChainsFromRelayerExtenders(relayExtenders)`
$DIR/core/services/pipeline/task.eth_tx_test.go: `.setupClientMocks(keyStore, txManager)`
$DIR/core/services/pipeline/task.eth_tx_test.go: `.HelperSetDependencies(legacyChains, keyStore, test.specGasLimit, pipeline.DirectRequestJobType)`
$DIR/core/services/pipeline/task.eth_tx_test.go: `.Run(testutils.Context(t), lggr, test.vars, test.inputs)`
$DIR/core/services/pipeline/task.eth_tx_test.go: `.Context(t)`
$DIR/core/services/pipeline/task.hexdecode_test.go: `t.Run(test.name, func(t *testing.T) {
t.Run("without vars through job DAG", func(t *testing.T) {
vars := pipeline.NewVarsFrom(nil)
task := pipeline.HexDecodeTask{BaseTask: pipeline.NewBaseTask(0, "task", nil, nil, 0)}
assertOK(task.Run(testutils.Context(t), logger.TestLogger(t), vars, []pipeline.Result{{Value: test.input}}))
})
t.Run("without vars through input param", func(t *testing.T) {
inputStr := fmt.Sprintf("%v", test.input)
if inputStr == "" {
// empty input parameter is indistinguishable from not providing it at all
// in that case the task will use an input defined by the job DAG
return
}
vars := pipeline.NewVarsFrom(nil)
task := pipeline.HexDecodeTask{
BaseTask: pipeline.NewBaseTask(0, "task", nil, nil, 0),
Input: inputStr,
}
assertOK(task.Run(testutils.Context(t), logger.TestLogger(t), vars, []pipeline.Result{}))
})
t.Run("with vars", func(t *testing.T) {
vars := pipeline.NewVarsFrom(map[string]interface{}{
"foo": map[string]interface{}{"bar": test.input},
})
task := pipeline.HexDecodeTask{
BaseTask: pipeline.NewBaseTask(0, "task", nil, nil, 0),
Input: "$(foo.bar)",
}
assertOK(task.Run(testutils.Context(t), logger.TestLogger(t), vars, []pipeline.Result{}))
})
})`
$DIR/core/services/pipeline/task.hexdecode_test.go: `t.Run("without vars through job DAG", func(t *testing.T) {
vars := pipeline.NewVarsFrom(nil)
task := pipeline.HexDecodeTask{BaseTask: pipeline.NewBaseTask(0, "task", nil, nil, 0)}
assertOK(task.Run(testutils.Context(t), logger.TestLogger(t), vars, []pipeline.Result{{Value: test.input}}))
})`
$DIR/core/services/pipeline/task.hexdecode_test.go: `assertOK(task.Run(testutils.Context(t), logger.TestLogger(t), vars, []pipeline.Result{{Value: test.input}}))`
$DIR/core/services/pipeline/task.hexdecode_test.go: `t.Run("without vars through input param", func(t *testing.T) {
inputStr := fmt.Sprintf("%v", test.input)
if inputStr == "" {
// empty input parameter is indistinguishable from not providing it at all
// in that case the task will use an input defined by the job DAG
return
}
vars := pipeline.NewVarsFrom(nil)
task := pipeline.HexDecodeTask{
BaseTask: pipeline.NewBaseTask(0, "task", nil, nil, 0),
Input: inputStr,
}
assertOK(task.Run(testutils.Context(t), logger.TestLogger(t), vars, []pipeline.Result{}))
})`
$DIR/core/services/pipeline/task.hexdecode_test.go: `assertOK(task.Run(testutils.Context(t), logger.TestLogger(t), vars, []pipeline.Result{}))`
$DIR/core/services/pipeline/task.hexdecode_test.go: `t.Run("with vars", func(t *testing.T) {
vars := pipeline.NewVarsFrom(map[string]interface{}{
"foo": map[string]interface{}{"bar": test.input},
})
task := pipeline.HexDecodeTask{
BaseTask: pipeline.NewBaseTask(0, "task", nil, nil, 0),
Input: "$(foo.bar)",
}
assertOK(task.Run(testutils.Context(t), logger.TestLogger(t), vars, []pipeline.Result{}))
})`
$DIR/core/services/pipeline/task.hexdecode_test.go: `assertOK(task.Run(testutils.Context(t), logger.TestLogger(t), vars, []pipeline.Result{}))`
$DIR/core/services/pipeline/task.hexdecode_test.go: `.Run(test.name, func(t *testing.T) {
t.Run("without vars through job DAG", func(t *testing.T) {
vars := pipeline.NewVarsFrom(nil)
task := pipeline.HexDecodeTask{BaseTask: pipeline.NewBaseTask(0, "task", nil, nil, 0)}
assertOK(task.Run(testutils.Context(t), logger.TestLogger(t), vars, []pipeline.Result{{Value: test.input}}))
})
t.Run("without vars through input param", func(t *testing.T) {
inputStr := fmt.Sprintf("%v", test.input)
if inputStr == "" {
// empty input parameter is indistinguishable from not providing it at all
// in that case the task will use an input defined by the job DAG
return
}
vars := pipeline.NewVarsFrom(nil)
task := pipeline.HexDecodeTask{
BaseTask: pipeline.NewBaseTask(0, "task", nil, nil, 0),
Input: inputStr,
}
assertOK(task.Run(testutils.Context(t), logger.TestLogger(t), vars, []pipeline.Result{}))
})
t.Run("with vars", func(t *testing.T) {
vars := pipeline.NewVarsFrom(map[string]interface{}{
"foo": map[string]interface{}{"bar": test.input},
})
task := pipeline.HexDecodeTask{
BaseTask: pipeline.NewBaseTask(0, "task", nil, nil, 0),
Input: "$(foo.bar)",
}
assertOK(task.Run(testutils.Context(t), logger.TestLogger(t), vars, []pipeline.Result{}))
})
})`
$DIR/core/services/pipeline/task.hexdecode_test.go: `.Run("without vars through job DAG", func(t *testing.T) {
vars := pipeline.NewVarsFrom(nil)
task := pipeline.HexDecodeTask{BaseTask: pipeline.NewBaseTask(0, "task", nil, nil, 0)}
assertOK(task.Run(testutils.Context(t), logger.TestLogger(t), vars, []pipeline.Result{{Value: test.input}}))
})`
$DIR/core/services/pipeline/task.hexdecode_test.go: `.NewVarsFrom(nil)`
$DIR/core/services/pipeline/task.hexdecode_test.go: `.NewBaseTask(0, "task", nil, nil, 0)`
$DIR/core/services/pipeline/task.hexdecode_test.go: `.Run(testutils.Context(t), logger.TestLogger(t), vars, []pipeline.Result{{Value: test.input}})`
$DIR/core/services/pipeline/task.hexdecode_test.go: `.Context(t)`
$DIR/core/services/pipeline/task.hexdecode_test.go: `.TestLogger(t)`
$DIR/core/services/pipeline/task.hexdecode_test.go: `.Run("without vars through input param", func(t *testing.T) {
inputStr := fmt.Sprintf("%v", test.input)
if inputStr == "" {
// empty input parameter is indistinguishable from not providing it at all
// in that case the task will use an input defined by the job DAG
return
}
vars := pipeline.NewVarsFrom(nil)
task := pipeline.HexDecodeTask{
BaseTask: pipeline.NewBaseTask(0, "task", nil, nil, 0),
Input: inputStr,
}
assertOK(task.Run(testutils.Context(t), logger.TestLogger(t), vars, []pipeline.Result{}))
})`
$DIR/core/services/pipeline/task.hexdecode_test.go: `.Sprintf("%v", test.input)`
$DIR/core/services/pipeline/task.hexdecode_test.go: `.NewVarsFrom(nil)`
$DIR/core/services/pipeline/task.hexdecode_test.go: `.NewBaseTask(0, "task", nil, nil, 0)`
$DIR/core/services/pipeline/task.hexdecode_test.go: `.Run(testutils.Context(t), logger.TestLogger(t), vars, []pipeline.Result{})`
$DIR/core/services/pipeline/task.hexdecode_test.go: `.Context(t)`
$DIR/core/services/pipeline/task.hexdecode_test.go: `.TestLogger(t)`
$DIR/core/services/pipeline/task.hexdecode_test.go: `.Run("with vars", func(t *testing.T) {
vars := pipeline.NewVarsFrom(map[string]interface{}{
"foo": map[string]interface{}{"bar": test.input},
})
task := pipeline.HexDecodeTask{
BaseTask: pipeline.NewBaseTask(0, "task", nil, nil, 0),
Input: "$(foo.bar)",
}
assertOK(task.Run(testutils.Context(t), logger.TestLogger(t), vars, []pipeline.Result{}))
})`
$DIR/core/services/pipeline/task.hexdecode_test.go: `.NewVarsFrom(map[string]interface{}{
"foo": map[string]interface{}{"bar": test.input},
})`
$DIR/core/services/pipeline/task.hexdecode_test.go: `.NewBaseTask(0, "task", nil, nil, 0)`
$DIR/core/services/pipeline/task.hexdecode_test.go: `.Run(testutils.Context(t), logger.TestLogger(t), vars, []pipeline.Result{})`
$DIR/core/services/pipeline/task.hexdecode_test.go: `.Context(t)`
$DIR/core/services/pipeline/task.hexdecode_test.go: `.TestLogger(t)`
$DIR/core/services/pipeline/task.hexencode_test.go: `t.Run(test.name, func(t *testing.T) {
t.Run("without vars", func(t *testing.T) {
vars := pipeline.NewVarsFrom(nil)
task := pipeline.HexEncodeTask{BaseTask: pipeline.NewBaseTask(0, "task", nil, nil, 0)}
assertOK(task.Run(testutils.Context(t), logger.TestLogger(t), vars, []pipeline.Result{{Value: test.input}}))
})
t.Run("with vars", func(t *testing.T) {
vars := pipeline.NewVarsFrom(map[string]interface{}{
"foo": map[string]interface{}{"bar": test.input},
})
task := pipeline.HexEncodeTask{
BaseTask: pipeline.NewBaseTask(0, "task", nil, nil, 0),
Input: "$(foo.bar)",
}
assertOK(task.Run(testutils.Context(t), logger.TestLogger(t), vars, []pipeline.Result{}))
})
})`
$DIR/core/services/pipeline/task.hexencode_test.go: `t.Run("without vars", func(t *testing.T) {
vars := pipeline.NewVarsFrom(nil)
task := pipeline.HexEncodeTask{BaseTask: pipeline.NewBaseTask(0, "task", nil, nil, 0)}
assertOK(task.Run(testutils.Context(t), logger.TestLogger(t), vars, []pipeline.Result{{Value: test.input}}))
})`
$DIR/core/services/pipeline/task.hexencode_test.go: `assertOK(task.Run(testutils.Context(t), logger.TestLogger(t), vars, []pipeline.Result{{Value: test.input}}))`
$DIR/core/services/pipeline/task.hexencode_test.go: `t.Run("with vars", func(t *testing.T) {
vars := pipeline.NewVarsFrom(map[string]interface{}{
"foo": map[string]interface{}{"bar": test.input},
})
task := pipeline.HexEncodeTask{
BaseTask: pipeline.NewBaseTask(0, "task", nil, nil, 0),
Input: "$(foo.bar)",
}
assertOK(task.Run(testutils.Context(t), logger.TestLogger(t), vars, []pipeline.Result{}))
})`
$DIR/core/services/pipeline/task.hexencode_test.go: `assertOK(task.Run(testutils.Context(t), logger.TestLogger(t), vars, []pipeline.Result{}))`
$DIR/core/services/pipeline/task.hexencode_test.go: `t.Run(test.name, func(t *testing.T) {
vars := pipeline.NewVarsFrom(nil)
task := pipeline.HexEncodeTask{
BaseTask: pipeline.NewBaseTask(0, "task", nil, nil, 0),
Input: fmt.Sprintf("%v", test.input),
}
result, runInfo := task.Run(testutils.Context(t), logger.TestLogger(t), vars, []pipeline.Result{})
assert.False(t, runInfo.IsPending)
assert.False(t, runInfo.IsRetryable)
require.NoError(t, result.Error)
require.Equal(t, test.result, result.Value)
})`
$DIR/core/services/pipeline/task.hexencode_test.go: `.NewInt(2)`
$DIR/core/services/pipeline/task.hexencode_test.go: `.NewInt(3)`
$DIR/core/services/pipeline/task.hexencode_test.go: `.Exp(bigTwo, big.NewInt(100), nil)`
$DIR/core/services/pipeline/task.hexencode_test.go: `.NewInt(100)`
$DIR/core/services/pipeline/task.hexencode_test.go: `.Exp(bigThree, big.NewInt(100), nil)`
$DIR/core/services/pipeline/task.hexencode_test.go: `.NewInt(100)`
$DIR/core/services/pipeline/task.hexencode_test.go: `.NewInt(-100)`
$DIR/core/services/pipeline/task.hexencode_test.go: `.Run(test.name, func(t *testing.T) {
t.Run("without vars", func(t *testing.T) {
vars := pipeline.NewVarsFrom(nil)
task := pipeline.HexEncodeTask{BaseTask: pipeline.NewBaseTask(0, "task", nil, nil, 0)}
assertOK(task.Run(testutils.Context(t), logger.TestLogger(t), vars, []pipeline.Result{{Value: test.input}}))
})
t.Run("with vars", func(t *testing.T) {
vars := pipeline.NewVarsFrom(map[string]interface{}{
"foo": map[string]interface{}{"bar": test.input},
})
task := pipeline.HexEncodeTask{
BaseTask: pipeline.NewBaseTask(0, "task", nil, nil, 0),
Input: "$(foo.bar)",
}
assertOK(task.Run(testutils.Context(t), logger.TestLogger(t), vars, []pipeline.Result{}))
})
})`
$DIR/core/services/pipeline/task.hexencode_test.go: `.Run("without vars", func(t *testing.T) {
vars := pipeline.NewVarsFrom(nil)
task := pipeline.HexEncodeTask{BaseTask: pipeline.NewBaseTask(0, "task", nil, nil, 0)}
assertOK(task.Run(testutils.Context(t), logger.TestLogger(t), vars, []pipeline.Result{{Value: test.input}}))
})`
$DIR/core/services/pipeline/task.hexencode_test.go: `.NewVarsFrom(nil)`
$DIR/core/services/pipeline/task.hexencode_test.go: `.NewBaseTask(0, "task", nil, nil, 0)`
$DIR/core/services/pipeline/task.hexencode_test.go: `.Run(testutils.Context(t), logger.TestLogger(t), vars, []pipeline.Result{{Value: test.input}})`
$DIR/core/services/pipeline/task.hexencode_test.go: `.Context(t)`
$DIR/core/services/pipeline/task.hexencode_test.go: `.TestLogger(t)`
$DIR/core/services/pipeline/task.hexencode_test.go: `.Run("with vars", func(t *testing.T) {
vars := pipeline.NewVarsFrom(map[string]interface{}{
"foo": map[string]interface{}{"bar": test.input},
})
task := pipeline.HexEncodeTask{
BaseTask: pipeline.NewBaseTask(0, "task", nil, nil, 0),
Input: "$(foo.bar)",
}
assertOK(task.Run(testutils.Context(t), logger.TestLogger(t), vars, []pipeline.Result{}))
})`
$DIR/core/services/pipeline/task.hexencode_test.go: `.NewVarsFrom(map[string]interface{}{
"foo": map[string]interface{}{"bar": test.input},
})`
$DIR/core/services/pipeline/task.hexencode_test.go: `.NewBaseTask(0, "task", nil, nil, 0)`
$DIR/core/services/pipeline/task.hexencode_test.go: `.Run(testutils.Context(t), logger.TestLogger(t), vars, []pipeline.Result{})`
$DIR/core/services/pipeline/task.hexencode_test.go: `.Context(t)`
$DIR/core/services/pipeline/task.hexencode_test.go: `.TestLogger(t)`
$DIR/core/services/pipeline/task.hexencode_test.go: `.Run(test.name, func(t *testing.T) {
vars := pipeline.NewVarsFrom(nil)
task := pipeline.HexEncodeTask{
BaseTask: pipeline.NewBaseTask(0, "task", nil, nil, 0),
Input: fmt.Sprintf("%v", test.input),
}
result, runInfo := task.Run(testutils.Context(t), logger.TestLogger(t), vars, []pipeline.Result{})
assert.False(t, runInfo.IsPending)
assert.False(t, runInfo.IsRetryable)
require.NoError(t, result.Error)
require.Equal(t, test.result, result.Value)
})`
$DIR/core/services/pipeline/task.hexencode_test.go: `.NewVarsFrom(nil)`
$DIR/core/services/pipeline/task.hexencode_test.go: `.NewBaseTask(0, "task", nil, nil, 0)`
$DIR/core/services/pipeline/task.hexencode_test.go: `.Sprintf("%v", test.input)`
$DIR/core/services/pipeline/task.hexencode_test.go: `.Run(testutils.Context(t), logger.TestLogger(t), vars, []pipeline.Result{})`
$DIR/core/services/pipeline/task.hexencode_test.go: `.Context(t)`
$DIR/core/services/pipeline/task.hexencode_test.go: `.TestLogger(t)`
$DIR/core/services/pipeline/task.http_test.go: `task.HelperSetDependencies(config.JobPipeline(), c, c)`
$DIR/core/services/pipeline/task.http_test.go: `t.Run(test.name, func(t *testing.T) {
t.Parallel()
db := pgtest.NewSqlxDB(t)
cfg := configtest.NewTestGeneralConfig(t)
s1 := httptest.NewServer(fakePriceResponder(t, test.expectedRequestData, decimal.NewFromInt(9700), "", nil))
defer s1.Close()
feedURL, err := url.ParseRequestURI(s1.URL)
require.NoError(t, err)
orm := bridges.NewORM(db)
_, bridge := cltest.MustCreateBridge(t, db, cltest.BridgeOpts{URL: feedURL.String()})
task := pipeline.BridgeTask{
BaseTask: pipeline.NewBaseTask(0, "bridge", nil, nil, 0),
Name: bridge.Name.String(),
RequestData: test.requestData,
}
c := clhttptest.NewTestLocalOnlyHTTPClient()
trORM := pipeline.NewORM(db, logger.TestLogger(t), cfg.JobPipeline().MaxSuccessfulRuns())
specID, err := trORM.CreateSpec(testutils.Context(t), pipeline.Pipeline{}, *models.NewInterval(5 * time.Minute))
require.NoError(t, err)
task.HelperSetDependencies(cfg.JobPipeline(), cfg.WebServer(), orm, specID, uuid.UUID{}, c)
err = test.vars.Set("meta", test.meta)
require.NoError(t, err)
result, runInfo := task.Run(testutils.Context(t), logger.TestLogger(t), test.vars, test.inputs)
assert.False(t, runInfo.IsPending)
assert.False(t, runInfo.IsRetryable)
if test.expectedErrorCause != nil {
require.Equal(t, test.expectedErrorCause, errors.Cause(result.Error))
if test.expectedErrorContains != "" {
require.Contains(t, result.Error.Error(), test.expectedErrorContains)
}
} else {
require.NoError(t, result.Error)
require.NotNil(t, result.Value)
var x struct {
Data struct {
Result decimal.Decimal `json:"result"`
} `json:"data"`
}
err := json.Unmarshal([]byte(result.Value.(string)), &x)
require.NoError(t, err)
require.Equal(t, decimal.NewFromInt(9700), x.Data.Result)
}
})`
$DIR/core/services/pipeline/task.http_test.go: `task.HelperSetDependencies(cfg.JobPipeline(), cfg.WebServer(), orm, specID, uuid.UUID{}, c)`
$DIR/core/services/pipeline/task.http_test.go: `err = test.vars.Set("meta", test.meta)`
$DIR/core/services/pipeline/task.http_test.go: `w.Header().Set("Content-Type", "application/json")`
$DIR/core/services/pipeline/task.http_test.go: `w.WriteHeader(http.StatusOK)`
$DIR/core/services/pipeline/task.http_test.go: `task.HelperSetDependencies(config.JobPipeline(), r, u)`
$DIR/core/services/pipeline/task.http_test.go: `task.URL = "$(url)"`
$DIR/core/services/pipeline/task.http_test.go: `result, runInfo = task.Run(testutils.Context(t), logger.TestLogger(t), vars, nil)`
$DIR/core/services/pipeline/task.http_test.go: `task.AllowUnrestrictedNetworkAccess = "true"`
$DIR/core/services/pipeline/task.http_test.go: `result, runInfo = task.Run(testutils.Context(t), logger.TestLogger(t), vars, nil)`
$DIR/core/services/pipeline/task.http_test.go: `w.Header().Set("Content-Type", "application/json")`
$DIR/core/services/pipeline/task.http_test.go: `w.WriteHeader(http.StatusTooManyRequests)`
$DIR/core/services/pipeline/task.http_test.go: `resp.SetErrorMessage("could not hit data fetcher")`
$DIR/core/services/pipeline/task.http_test.go: `task.HelperSetDependencies(config.JobPipeline(), c, c)`
$DIR/core/services/pipeline/task.http_test.go: `w.Header().Set("Content-Type", "application/json")`
$DIR/core/services/pipeline/task.http_test.go: `w.WriteHeader(http.StatusBadGateway)`
$DIR/core/services/pipeline/task.http_test.go: `task.HelperSetDependencies(config.JobPipeline(), c, c)`
$DIR/core/services/pipeline/task.http_test.go: `keys = append(keys, k)`
$DIR/core/services/pipeline/task.http_test.go: `sort.Strings(keys)`
$DIR/core/services/pipeline/task.http_test.go: `s = append(s, k, v)`
$DIR/core/services/pipeline/task.http_test.go: `t.Run("sends headers", func(t *testing.T) {
config := configtest.NewTestGeneralConfig(t)
var headers http.Header
handler := http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {
headers = r.Header
w.Header().Set("Content-Type", "application/json")
w.WriteHeader(http.StatusOK)
_, err := w.Write([]byte(`{"fooresponse": 1}`))
require.NoError(t, err)
})
server := httptest.NewServer(handler)
defer server.Close()
task := pipeline.HTTPTask{
Method: "POST",
URL: server.URL,
RequestData: ethUSDPairing,
Headers: `["X-Header-1", "foo", "X-Header-2", "bar"]`,
}
c := clhttptest.NewTestLocalOnlyHTTPClient()
task.HelperSetDependencies(config.JobPipeline(), c, c)
result, runInfo := task.Run(testutils.Context(t), logger.TestLogger(t), pipeline.NewVarsFrom(nil), nil)
assert.False(t, runInfo.IsPending)
assert.Equal(t, `{"fooresponse": 1}`, result.Value)
assert.Nil(t, result.Error)
assert.Equal(t, append(standardHeaders, "X-Header-1", "foo", "X-Header-2", "bar"), allHeaders(headers))
})`
$DIR/core/services/pipeline/task.http_test.go: `headers = r.Header`
$DIR/core/services/pipeline/task.http_test.go: `w.Header().Set("Content-Type", "application/json")`
$DIR/core/services/pipeline/task.http_test.go: `w.WriteHeader(http.StatusOK)`
$DIR/core/services/pipeline/task.http_test.go: `task.HelperSetDependencies(config.JobPipeline(), c, c)`
$DIR/core/services/pipeline/task.http_test.go: `t.Run("errors with odd number of headers", func(t *testing.T) {
task := pipeline.HTTPTask{
Method: "POST",
URL: "http://example.com",
RequestData: ethUSDPairing,
Headers: `["X-Header-1", "foo", "X-Header-2", "bar", "odd one out"]`,
}
result, runInfo := task.Run(testutils.Context(t), logger.TestLogger(t), pipeline.NewVarsFrom(nil), nil)
assert.False(t, runInfo.IsPending)
assert.NotNil(t, result.Error)
assert.Equal(t, `headers must have an even number of elements`, result.Error.Error())
assert.Nil(t, result.Value)
})`
$DIR/core/services/pipeline/task.http_test.go: `headers = r.Header`
$DIR/core/services/pipeline/task.http_test.go: `w.Header().Set("Content-Type", "application/json")`
$DIR/core/services/pipeline/task.http_test.go: `w.WriteHeader(http.StatusOK)`
$DIR/core/services/pipeline/task.http_test.go: `task.HelperSetDependencies(config.JobPipeline(), c, c)`
$DIR/core/services/pipeline/task.http_test.go: `.NewTestGeneralConfig(t)`
$DIR/core/services/pipeline/task.http_test.go: `.NewServer(fakePriceResponder(t, utils.MustUnmarshalToMap(btcUSDPairing), decimal.NewFromInt(9700), "", nil))`
$DIR/core/services/pipeline/task.http_test.go: `.MustUnmarshalToMap(btcUSDPairing)`
$DIR/core/services/pipeline/task.http_test.go: `.NewFromInt(9700)`
$DIR/core/services/pipeline/task.http_test.go: `.NewBaseTask(0, "http", nil, nil, 0)`
$DIR/core/services/pipeline/task.http_test.go: `.NewTestLocalOnlyHTTPClient()`
$DIR/core/services/pipeline/task.http_test.go: `.HelperSetDependencies(config.JobPipeline(), c, c)`
$DIR/core/services/pipeline/task.http_test.go: `.JobPipeline()`
$DIR/core/services/pipeline/task.http_test.go: `.Run(testutils.Context(t), logger.TestLogger(t), pipeline.NewVarsFrom(nil), nil)`
$DIR/core/services/pipeline/task.http_test.go: `.Context(t)`
$DIR/core/services/pipeline/task.http_test.go: `.TestLogger(t)`
$DIR/core/services/pipeline/task.http_test.go: `.NewVarsFrom(nil)`
$DIR/core/services/pipeline/task.http_test.go: `.Unmarshal([]byte(result.Value.(string)), &x)`
$DIR/core/services/pipeline/task.http_test.go: `.NewFromInt(9700)`
$DIR/core/services/pipeline/task.http_test.go: `.NewVarsFrom(map[string]interface{}{"some_data": map[string]interface{}{"foo": 543.21}})`
$DIR/core/services/pipeline/task.http_test.go: `.NewVarsFrom(map[string]interface{}{"some_data": map[string]interface{}{"foo": 543.21}})`
$DIR/core/services/pipeline/task.http_test.go: `.NewVarsFrom(map[string]interface{}{"some_data": map[string]interface{}{"foo": 543.21}})`
$DIR/core/services/pipeline/task.http_test.go: `.NewVarsFrom(map[string]interface{}{"not_some_data": map[string]interface{}{"foo": 543.21}})`
$DIR/core/services/pipeline/task.http_test.go: `.NewVarsFrom(map[string]interface{}{"some_data": 543.21})`
$DIR/core/services/pipeline/task.http_test.go: `.NewVarsFrom(map[string]interface{}{"medianize": 543.21})`
$DIR/core/services/pipeline/task.http_test.go: `.NewVarsFrom(map[string]interface{}{"nope": "foo bar"})`
$DIR/core/services/pipeline/task.http_test.go: `.Run(test.name, func(t *testing.T) {
t.Parallel()
db := pgtest.NewSqlxDB(t)
cfg := configtest.NewTestGeneralConfig(t)
s1 := httptest.NewServer(fakePriceResponder(t, test.expectedRequestData, decimal.NewFromInt(9700), "", nil))
defer s1.Close()
feedURL, err := url.ParseRequestURI(s1.URL)
require.NoError(t, err)
orm := bridges.NewORM(db)
_, bridge := cltest.MustCreateBridge(t, db, cltest.BridgeOpts{URL: feedURL.String()})
task := pipeline.BridgeTask{
BaseTask: pipeline.NewBaseTask(0, "bridge", nil, nil, 0),
Name: bridge.Name.String(),
RequestData: test.requestData,
}
c := clhttptest.NewTestLocalOnlyHTTPClient()
trORM := pipeline.NewORM(db, logger.TestLogger(t), cfg.JobPipeline().MaxSuccessfulRuns())
specID, err := trORM.CreateSpec(testutils.Context(t), pipeline.Pipeline{}, *models.NewInterval(5 * time.Minute))
require.NoError(t, err)
task.HelperSetDependencies(cfg.JobPipeline(), cfg.WebServer(), orm, specID, uuid.UUID{}, c)
err = test.vars.Set("meta", test.meta)
require.NoError(t, err)
result, runInfo := task.Run(testutils.Context(t), logger.TestLogger(t), test.vars, test.inputs)
assert.False(t, runInfo.IsPending)
assert.False(t, runInfo.IsRetryable)
if test.expectedErrorCause != nil {
require.Equal(t, test.expectedErrorCause, errors.Cause(result.Error))
if test.expectedErrorContains != "" {
require.Contains(t, result.Error.Error(), test.expectedErrorContains)
}
} else {
require.NoError(t, result.Error)
require.NotNil(t, result.Value)
var x struct {
Data struct {
Result decimal.Decimal `json:"result"`
} `json:"data"`
}
err := json.Unmarshal([]byte(result.Value.(string)), &x)
require.NoError(t, err)
require.Equal(t, decimal.NewFromInt(9700), x.Data.Result)
}
})`
$DIR/core/services/pipeline/task.http_test.go: `.NewSqlxDB(t)`
$DIR/core/services/pipeline/task.http_test.go: `.NewTestGeneralConfig(t)`
$DIR/core/services/pipeline/task.http_test.go: `.NewServer(fakePriceResponder(t, test.expectedRequestData, decimal.NewFromInt(9700), "", nil))`
$DIR/core/services/pipeline/task.http_test.go: `.NewFromInt(9700)`
$DIR/core/services/pipeline/task.http_test.go: `.ParseRequestURI(s1.URL)`
$DIR/core/services/pipeline/task.http_test.go: `.NewORM(db)`
$DIR/core/services/pipeline/task.http_test.go: `.MustCreateBridge(t, db, cltest.BridgeOpts{URL: feedURL.String()})`
$DIR/core/services/pipeline/task.http_test.go: `.String()`
$DIR/core/services/pipeline/task.http_test.go: `.NewBaseTask(0, "bridge", nil, nil, 0)`
$DIR/core/services/pipeline/task.http_test.go: `.Name.String()`
$DIR/core/services/pipeline/task.http_test.go: `.NewTestLocalOnlyHTTPClient()`
$DIR/core/services/pipeline/task.http_test.go: `.NewORM(db, logger.TestLogger(t), cfg.JobPipeline().MaxSuccessfulRuns())`
$DIR/core/services/pipeline/task.http_test.go: `.TestLogger(t)`
$DIR/core/services/pipeline/task.http_test.go: `.JobPipeline()`
$DIR/core/services/pipeline/task.http_test.go: `.MaxSuccessfulRuns()`
$DIR/core/services/pipeline/task.http_test.go: `.CreateSpec(testutils.Context(t), pipeline.Pipeline{}, *models.NewInterval(5 * time.Minute))`
$DIR/core/services/pipeline/task.http_test.go: `.Context(t)`
$DIR/core/services/pipeline/task.http_test.go: `.NewInterval(5 * time.Minute)`
$DIR/core/services/pipeline/task.http_test.go: `.HelperSetDependencies(cfg.JobPipeline(), cfg.WebServer(), orm, specID, uuid.UUID{}, c)`
$DIR/core/services/pipeline/task.http_test.go: `.JobPipeline()`
$DIR/core/services/pipeline/task.http_test.go: `.WebServer()`
$DIR/core/services/pipeline/task.http_test.go: `.vars.Set("meta", test.meta)`
$DIR/core/services/pipeline/task.http_test.go: `.Run(testutils.Context(t), logger.TestLogger(t), test.vars, test.inputs)`
$DIR/core/services/pipeline/task.http_test.go: `.Context(t)`
$DIR/core/services/pipeline/task.http_test.go: `.TestLogger(t)`
$DIR/core/services/pipeline/task.http_test.go: `.Unmarshal([]byte(result.Value.(string)), &x)`
$DIR/core/services/pipeline/task.http_test.go: `.NewTestGeneralConfig(t)`
$DIR/core/services/pipeline/task.http_test.go: `.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {
w.Header().Set("Content-Type", "application/json")
w.WriteHeader(http.StatusOK)
_, err := w.Write([]byte("{}"))
require.NoError(t, err)
})`
$DIR/core/services/pipeline/task.http_test.go: `.Header()`
$DIR/core/services/pipeline/task.http_test.go: `.Set("Content-Type", "application/json")`
$DIR/core/services/pipeline/task.http_test.go: `.WriteHeader(http.StatusOK)`
$DIR/core/services/pipeline/task.http_test.go: `.Write([]byte("{}"))`
$DIR/core/services/pipeline/task.http_test.go: `.NewServer(handler)`
$DIR/core/services/pipeline/task.http_test.go: `.NewRestrictedHTTPClient(config.Database(), logger.TestLogger(t))`
$DIR/core/services/pipeline/task.http_test.go: `.Database()`
$DIR/core/services/pipeline/task.http_test.go: `.TestLogger(t)`
$DIR/core/services/pipeline/task.http_test.go: `.NewUnrestrictedHTTPClient()`
$DIR/core/services/pipeline/task.http_test.go: `.HelperSetDependencies(config.JobPipeline(), r, u)`
$DIR/core/services/pipeline/task.http_test.go: `.JobPipeline()`
$DIR/core/services/pipeline/task.http_test.go: `.Run(testutils.Context(t), logger.TestLogger(t), pipeline.NewVarsFrom(nil), nil)`
$DIR/core/services/pipeline/task.http_test.go: `.Context(t)`
$DIR/core/services/pipeline/task.http_test.go: `.TestLogger(t)`
$DIR/core/services/pipeline/task.http_test.go: `.NewVarsFrom(nil)`
$DIR/core/services/pipeline/task.http_test.go: `.NewVarsFrom(map[string]interface{}{"url": server.URL})`
$DIR/core/services/pipeline/task.http_test.go: `.Run(testutils.Context(t), logger.TestLogger(t), vars, nil)`
$DIR/core/services/pipeline/task.http_test.go: `.Context(t)`
$DIR/core/services/pipeline/task.http_test.go: `.TestLogger(t)`
$DIR/core/services/pipeline/task.http_test.go: `.Run(testutils.Context(t), logger.TestLogger(t), vars, nil)`
$DIR/core/services/pipeline/task.http_test.go: `.Context(t)`
$DIR/core/services/pipeline/task.http_test.go: `.TestLogger(t)`
$DIR/core/services/pipeline/task.http_test.go: `.NewTestGeneralConfig(t)`
$DIR/core/services/pipeline/task.http_test.go: `.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {
w.Header().Set("Content-Type", "application/json")
w.WriteHeader(http.StatusTooManyRequests)
resp := &adapterResponse{}
resp.SetErrorMessage("could not hit data fetcher")
err := json.NewEncoder(w).Encode(resp)
require.NoError(t, err)
})`
$DIR/core/services/pipeline/task.http_test.go: `.Header()`
$DIR/core/services/pipeline/task.http_test.go: `.Set("Content-Type", "application/json")`
$DIR/core/services/pipeline/task.http_test.go: `.WriteHeader(http.StatusTooManyRequests)`
$DIR/core/services/pipeline/task.http_test.go: `.SetErrorMessage("could not hit data fetcher")`
$DIR/core/services/pipeline/task.http_test.go: `.NewEncoder(w)`
$DIR/core/services/pipeline/task.http_test.go: `.Encode(resp)`
$DIR/core/services/pipeline/task.http_test.go: `.NewServer(handler)`
$DIR/core/services/pipeline/task.http_test.go: `.NewTestLocalOnlyHTTPClient()`
$DIR/core/services/pipeline/task.http_test.go: `.HelperSetDependencies(config.JobPipeline(), c, c)`
$DIR/core/services/pipeline/task.http_test.go: `.JobPipeline()`
$DIR/core/services/pipeline/task.http_test.go: `.Run(testutils.Context(t), logger.TestLogger(t), pipeline.NewVarsFrom(nil), nil)`
$DIR/core/services/pipeline/task.http_test.go: `.Context(t)`
$DIR/core/services/pipeline/task.http_test.go: `.TestLogger(t)`
$DIR/core/services/pipeline/task.http_test.go: `.NewVarsFrom(nil)`
$DIR/core/services/pipeline/task.http_test.go: `.NewTestGeneralConfig(t)`
$DIR/core/services/pipeline/task.http_test.go: `.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {
w.Header().Set("Content-Type", "application/json")
w.WriteHeader(http.StatusBadGateway)
_, err := w.Write([]byte(mustReadFile(t, "../../testdata/apiresponses/coinmarketcap.error.json")))
require.NoError(t, err)
})`
$DIR/core/services/pipeline/task.http_test.go: `.Header()`
$DIR/core/services/pipeline/task.http_test.go: `.Set("Content-Type", "application/json")`
$DIR/core/services/pipeline/task.http_test.go: `.WriteHeader(http.StatusBadGateway)`
$DIR/core/services/pipeline/task.http_test.go: `.Write([]byte(mustReadFile(t, "../../testdata/apiresponses/coinmarketcap.error.json")))`
$DIR/core/services/pipeline/task.http_test.go: `.NewServer(handler)`
$DIR/core/services/pipeline/task.http_test.go: `.NewTestLocalOnlyHTTPClient()`
$DIR/core/services/pipeline/task.http_test.go: `.HelperSetDependencies(config.JobPipeline(), c, c)`
$DIR/core/services/pipeline/task.http_test.go: `.JobPipeline()`
$DIR/core/services/pipeline/task.http_test.go: `.Run(testutils.Context(t), logger.TestLogger(t), pipeline.NewVarsFrom(nil), nil)`
$DIR/core/services/pipeline/task.http_test.go: `.Context(t)`
$DIR/core/services/pipeline/task.http_test.go: `.TestLogger(t)`
$DIR/core/services/pipeline/task.http_test.go: `.NewVarsFrom(nil)`
$DIR/core/services/pipeline/task.http_test.go: `.Strings(keys)`
$DIR/core/services/pipeline/task.http_test.go: `.Get(k)`
$DIR/core/services/pipeline/task.http_test.go: `.Run("sends headers", func(t *testing.T) {
config := configtest.NewTestGeneralConfig(t)
var headers http.Header
handler := http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {
headers = r.Header
w.Header().Set("Content-Type", "application/json")
w.WriteHeader(http.StatusOK)
_, err := w.Write([]byte(`{"fooresponse": 1}`))
require.NoError(t, err)
})
server := httptest.NewServer(handler)
defer server.Close()
task := pipeline.HTTPTask{
Method: "POST",
URL: server.URL,
RequestData: ethUSDPairing,
Headers: `["X-Header-1", "foo", "X-Header-2", "bar"]`,
}
c := clhttptest.NewTestLocalOnlyHTTPClient()
task.HelperSetDependencies(config.JobPipeline(), c, c)
result, runInfo := task.Run(testutils.Context(t), logger.TestLogger(t), pipeline.NewVarsFrom(nil), nil)
assert.False(t, runInfo.IsPending)
assert.Equal(t, `{"fooresponse": 1}`, result.Value)
assert.Nil(t, result.Error)
assert.Equal(t, append(standardHeaders, "X-Header-1", "foo", "X-Header-2", "bar"), allHeaders(headers))
})`
$DIR/core/services/pipeline/task.http_test.go: `.NewTestGeneralConfig(t)`
$DIR/core/services/pipeline/task.http_test.go: `.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {
headers = r.Header
w.Header().Set("Content-Type", "application/json")
w.WriteHeader(http.StatusOK)
_, err := w.Write([]byte(`{"fooresponse": 1}`))
require.NoError(t, err)
})`
$DIR/core/services/pipeline/task.http_test.go: `.Header()`
$DIR/core/services/pipeline/task.http_test.go: `.Set("Content-Type", "application/json")`
$DIR/core/services/pipeline/task.http_test.go: `.WriteHeader(http.StatusOK)`
$DIR/core/services/pipeline/task.http_test.go: `.Write([]byte(`{"fooresponse": 1}`))`
$DIR/core/services/pipeline/task.http_test.go: `.NewServer(handler)`
$DIR/core/services/pipeline/task.http_test.go: `.NewTestLocalOnlyHTTPClient()`
$DIR/core/services/pipeline/task.http_test.go: `.HelperSetDependencies(config.JobPipeline(), c, c)`
$DIR/core/services/pipeline/task.http_test.go: `.JobPipeline()`
$DIR/core/services/pipeline/task.http_test.go: `.Run(testutils.Context(t), logger.TestLogger(t), pipeline.NewVarsFrom(nil), nil)`
$DIR/core/services/pipeline/task.http_test.go: `.Context(t)`
$DIR/core/services/pipeline/task.http_test.go: `.TestLogger(t)`
$DIR/core/services/pipeline/task.http_test.go: `.NewVarsFrom(nil)`
$DIR/core/services/pipeline/task.http_test.go: `.Run("errors with odd number of headers", func(t *testing.T) {
task := pipeline.HTTPTask{
Method: "POST",
URL: "http://example.com",
RequestData: ethUSDPairing,
Headers: `["X-Header-1", "foo", "X-Header-2", "bar", "odd one out"]`,
}
result, runInfo := task.Run(testutils.Context(t), logger.TestLogger(t), pipeline.NewVarsFrom(nil), nil)
assert.False(t, runInfo.IsPending)
assert.NotNil(t, result.Error)
assert.Equal(t, `headers must have an even number of elements`, result.Error.Error())
assert.Nil(t, result.Value)
})`
$DIR/core/services/pipeline/task.http_test.go: `.Run(testutils.Context(t), logger.TestLogger(t), pipeline.NewVarsFrom(nil), nil)`
$DIR/core/services/pipeline/task.http_test.go: `.Context(t)`
$DIR/core/services/pipeline/task.http_test.go: `.TestLogger(t)`
$DIR/core/services/pipeline/task.http_test.go: `.NewVarsFrom(nil)`
$DIR/core/services/pipeline/task.http_test.go: `.NewTestGeneralConfig(t)`
$DIR/core/services/pipeline/task.http_test.go: `.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {
headers = r.Header
w.Header().Set("Content-Type", "application/json")
w.WriteHeader(http.StatusOK)
_, err := w.Write([]byte(`{"fooresponse": 3}`))
require.NoError(t, err)
})`
$DIR/core/services/pipeline/task.http_test.go: `.Header()`
$DIR/core/services/pipeline/task.http_test.go: `.Set("Content-Type", "application/json")`
$DIR/core/services/pipeline/task.http_test.go: `.WriteHeader(http.StatusOK)`
$DIR/core/services/pipeline/task.http_test.go: `.Write([]byte(`{"fooresponse": 3}`))`
$DIR/core/services/pipeline/task.http_test.go: `.NewServer(handler)`
$DIR/core/services/pipeline/task.http_test.go: `.NewTestLocalOnlyHTTPClient()`
$DIR/core/services/pipeline/task.http_test.go: `.HelperSetDependencies(config.JobPipeline(), c, c)`
$DIR/core/services/pipeline/task.http_test.go: `.JobPipeline()`
$DIR/core/services/pipeline/task.http_test.go: `.Run(testutils.Context(t), logger.TestLogger(t), pipeline.NewVarsFrom(nil), nil)`
$DIR/core/services/pipeline/task.http_test.go: `.Context(t)`
$DIR/core/services/pipeline/task.http_test.go: `.TestLogger(t)`
$DIR/core/services/pipeline/task.http_test.go: `.NewVarsFrom(nil)`
$DIR/core/services/pipeline/task.jsonparse_test.go: `t.Run(test.name, func(t *testing.T) {
task := pipeline.JSONParseTask{
BaseTask: pipeline.NewBaseTask(0, "json", nil, nil, 0),
Path: test.path,
Separator: test.separator,
Data: test.data,
Lax: test.lax,
}
result, runInfo := task.Run(testutils.Context(t), logger.TestLogger(t), test.vars, test.inputs)
assert.False(t, runInfo.IsPending)
assert.False(t, runInfo.IsRetryable)
if test.wantErrorCause != nil {
require.Equal(t, test.wantErrorCause, errors.Cause(result.Error))
if test.wantErrorContains != "" {
require.Contains(t, result.Error.Error(), test.wantErrorContains)
}
require.Nil(t, result.Value)
val, err := test.vars.Get("json")
require.Equal(t, pipeline.ErrKeypathNotFound, errors.Cause(err))
require.Nil(t, val)
} else {
require.NoError(t, result.Error)
require.Equal(t, test.wantData, result.Value)
}
})`
$DIR/core/services/pipeline/task.jsonparse_test.go: `.NewVarsFrom(nil)`
$DIR/core/services/pipeline/task.jsonparse_test.go: `.NewVarsFrom(nil)`
$DIR/core/services/pipeline/task.jsonparse_test.go: `.NewVarsFrom(nil)`
$DIR/core/services/pipeline/task.jsonparse_test.go: `.NewVarsFrom(nil)`
$DIR/core/services/pipeline/task.jsonparse_test.go: `.NewVarsFrom(nil)`
$DIR/core/services/pipeline/task.jsonparse_test.go: `.NewVarsFrom(nil)`
$DIR/core/services/pipeline/task.jsonparse_test.go: `.NewVarsFrom(nil)`
$DIR/core/services/pipeline/task.jsonparse_test.go: `.NewVarsFrom(nil)`
$DIR/core/services/pipeline/task.jsonparse_test.go: `.NewVarsFrom(nil)`
$DIR/core/services/pipeline/task.jsonparse_test.go: `.NewVarsFrom(nil)`
$DIR/core/services/pipeline/task.jsonparse_test.go: `.NewVarsFrom(nil)`
$DIR/core/services/pipeline/task.jsonparse_test.go: `.NewVarsFrom(nil)`
$DIR/core/services/pipeline/task.jsonparse_test.go: `.NewVarsFrom(nil)`
$DIR/core/services/pipeline/task.jsonparse_test.go: `.NewVarsFrom(nil)`
$DIR/core/services/pipeline/task.jsonparse_test.go: `.NewVarsFrom(nil)`
$DIR/core/services/pipeline/task.jsonparse_test.go: `.NewVarsFrom(nil)`
$DIR/core/services/pipeline/task.jsonparse_test.go: `.NewVarsFrom(nil)`
$DIR/core/services/pipeline/task.jsonparse_test.go: `.NewVarsFrom(nil)`
$DIR/core/services/pipeline/task.jsonparse_test.go: `.NewVarsFrom(nil)`
$DIR/core/services/pipeline/task.jsonparse_test.go: `.NewVarsFrom(nil)`
$DIR/core/services/pipeline/task.jsonparse_test.go: `.NewVarsFrom(nil)`
$DIR/core/services/pipeline/task.jsonparse_test.go: `.NewVarsFrom(nil)`
$DIR/core/services/pipeline/task.jsonparse_test.go: `.NewVarsFrom(nil)`
$DIR/core/services/pipeline/task.jsonparse_test.go: `.NewVarsFrom(map[string]interface{}{
"foo": map[string]interface{}{"bar": `{"data":[{"availability":"0.99991"}]}`},
})`
$DIR/core/services/pipeline/task.jsonparse_test.go: `.NewVarsFrom(map[string]interface{}{
"foo": map[string]interface{}{"bar": `{"data":["stevetoshi sergeymoto"]}`},
})`
$DIR/core/services/pipeline/task.jsonparse_test.go: `.NewVarsFrom(map[string]interface{}{
"foo": map[string]interface{}{"bar": `{"data":[{"availability":"0.99991"}]}`},
"chain": map[string]interface{}{"link": "data,0,availability"},
})`
$DIR/core/services/pipeline/task.jsonparse_test.go: `.NewVarsFrom(map[string]interface{}{
"foo": map[string]interface{}{"bar": `{"data":[{"availability":"0.99991"}]}`},
"chain": map[string]interface{}{"link": "data,0,availability"},
})`
$DIR/core/services/pipeline/task.jsonparse_test.go: `.Run(test.name, func(t *testing.T) {
task := pipeline.JSONParseTask{
BaseTask: pipeline.NewBaseTask(0, "json", nil, nil, 0),
Path: test.path,
Separator: test.separator,
Data: test.data,
Lax: test.lax,
}
result, runInfo := task.Run(testutils.Context(t), logger.TestLogger(t), test.vars, test.inputs)
assert.False(t, runInfo.IsPending)
assert.False(t, runInfo.IsRetryable)
if test.wantErrorCause != nil {
require.Equal(t, test.wantErrorCause, errors.Cause(result.Error))
if test.wantErrorContains != "" {
require.Contains(t, result.Error.Error(), test.wantErrorContains)
}
require.Nil(t, result.Value)
val, err := test.vars.Get("json")
require.Equal(t, pipeline.ErrKeypathNotFound, errors.Cause(err))
require.Nil(t, val)
} else {
require.NoError(t, result.Error)
require.Equal(t, test.wantData, result.Value)
}
})`
$DIR/core/services/pipeline/task.jsonparse_test.go: `.NewBaseTask(0, "json", nil, nil, 0)`
$DIR/core/services/pipeline/task.jsonparse_test.go: `.Run(testutils.Context(t), logger.TestLogger(t), test.vars, test.inputs)`
$DIR/core/services/pipeline/task.jsonparse_test.go: `.Context(t)`
$DIR/core/services/pipeline/task.jsonparse_test.go: `.TestLogger(t)`
$DIR/core/services/pipeline/task.jsonparse_test.go: `.vars.Get("json")`
$DIR/core/services/pipeline/task.length_test.go: `t.Run(test.name, func(t *testing.T) {
t.Run("without vars through job DAG", func(t *testing.T) {
vars := pipeline.NewVarsFrom(nil)
task := pipeline.LengthTask{BaseTask: pipeline.NewBaseTask(0, "task", nil, nil, 0)}
assertOK(task.Run(testutils.Context(t), logger.TestLogger(t), vars, []pipeline.Result{{Value: test.input}}))
})
t.Run("without vars through input param", func(t *testing.T) {
var inputStr string
if _, ok := test.input.([]byte); ok {
inputStr = string(test.input.([]byte))
} else {
inputStr = test.input.(string)
}
if inputStr == "" {
// empty input parameter is indistinguishable from not providing it at all
// in that case the task will use an input defined by the job DAG
return
}
vars := pipeline.NewVarsFrom(nil)
task := pipeline.LengthTask{
BaseTask: pipeline.NewBaseTask(0, "task", nil, nil, 0),
Input: inputStr,
}
assertOK(task.Run(testutils.Context(t), logger.TestLogger(t), vars, []pipeline.Result{}))
})
t.Run("with vars", func(t *testing.T) {
vars := pipeline.NewVarsFrom(map[string]interface{}{
"foo": map[string]interface{}{"bar": test.input},
})
task := pipeline.LengthTask{
BaseTask: pipeline.NewBaseTask(0, "task", nil, nil, 0),
Input: "$(foo.bar)",
}
assertOK(task.Run(testutils.Context(t), logger.TestLogger(t), vars, []pipeline.Result{}))
})
})`
$DIR/core/services/pipeline/task.length_test.go: `t.Run("without vars through job DAG", func(t *testing.T) {
vars := pipeline.NewVarsFrom(nil)
task := pipeline.LengthTask{BaseTask: pipeline.NewBaseTask(0, "task", nil, nil, 0)}
assertOK(task.Run(testutils.Context(t), logger.TestLogger(t), vars, []pipeline.Result{{Value: test.input}}))
})`
$DIR/core/services/pipeline/task.length_test.go: `assertOK(task.Run(testutils.Context(t), logger.TestLogger(t), vars, []pipeline.Result{{Value: test.input}}))`
$DIR/core/services/pipeline/task.length_test.go: `t.Run("without vars through input param", func(t *testing.T) {
var inputStr string
if _, ok := test.input.([]byte); ok {
inputStr = string(test.input.([]byte))
} else {
inputStr = test.input.(string)
}
if inputStr == "" {
// empty input parameter is indistinguishable from not providing it at all
// in that case the task will use an input defined by the job DAG
return
}
vars := pipeline.NewVarsFrom(nil)
task := pipeline.LengthTask{
BaseTask: pipeline.NewBaseTask(0, "task", nil, nil, 0),
Input: inputStr,
}
assertOK(task.Run(testutils.Context(t), logger.TestLogger(t), vars, []pipeline.Result{}))
})`
$DIR/core/services/pipeline/task.length_test.go: `inputStr = string(test.input.([]byte))`
$DIR/core/services/pipeline/task.length_test.go: `inputStr = test.input.(string)`
$DIR/core/services/pipeline/task.length_test.go: `assertOK(task.Run(testutils.Context(t), logger.TestLogger(t), vars, []pipeline.Result{}))`
$DIR/core/services/pipeline/task.length_test.go: `t.Run("with vars", func(t *testing.T) {
vars := pipeline.NewVarsFrom(map[string]interface{}{
"foo": map[string]interface{}{"bar": test.input},
})
task := pipeline.LengthTask{
BaseTask: pipeline.NewBaseTask(0, "task", nil, nil, 0),
Input: "$(foo.bar)",
}
assertOK(task.Run(testutils.Context(t), logger.TestLogger(t), vars, []pipeline.Result{}))
})`
$DIR/core/services/pipeline/task.length_test.go: `assertOK(task.Run(testutils.Context(t), logger.TestLogger(t), vars, []pipeline.Result{}))`
$DIR/core/services/pipeline/task.length_test.go: `.NewFromInt(4)`
$DIR/core/services/pipeline/task.length_test.go: `.NewFromInt(0)`
$DIR/core/services/pipeline/task.length_test.go: `.NewFromInt(21)`
$DIR/core/services/pipeline/task.length_test.go: `.NewFromInt(21)`
$DIR/core/services/pipeline/task.length_test.go: `.NewFromInt(0)`
$DIR/core/services/pipeline/task.length_test.go: `.Run(test.name, func(t *testing.T) {
t.Run("without vars through job DAG", func(t *testing.T) {
vars := pipeline.NewVarsFrom(nil)
task := pipeline.LengthTask{BaseTask: pipeline.NewBaseTask(0, "task", nil, nil, 0)}
assertOK(task.Run(testutils.Context(t), logger.TestLogger(t), vars, []pipeline.Result{{Value: test.input}}))
})
t.Run("without vars through input param", func(t *testing.T) {
var inputStr string
if _, ok := test.input.([]byte); ok {
inputStr = string(test.input.([]byte))
} else {
inputStr = test.input.(string)
}
if inputStr == "" {
// empty input parameter is indistinguishable from not providing it at all
// in that case the task will use an input defined by the job DAG
return
}
vars := pipeline.NewVarsFrom(nil)
task := pipeline.LengthTask{
BaseTask: pipeline.NewBaseTask(0, "task", nil, nil, 0),
Input: inputStr,
}
assertOK(task.Run(testutils.Context(t), logger.TestLogger(t), vars, []pipeline.Result{}))
})
t.Run("with vars", func(t *testing.T) {
vars := pipeline.NewVarsFrom(map[string]interface{}{
"foo": map[string]interface{}{"bar": test.input},
})
task := pipeline.LengthTask{
BaseTask: pipeline.NewBaseTask(0, "task", nil, nil, 0),
Input: "$(foo.bar)",
}
assertOK(task.Run(testutils.Context(t), logger.TestLogger(t), vars, []pipeline.Result{}))
})
})`
$DIR/core/services/pipeline/task.length_test.go: `.Run("without vars through job DAG", func(t *testing.T) {
vars := pipeline.NewVarsFrom(nil)
task := pipeline.LengthTask{BaseTask: pipeline.NewBaseTask(0, "task", nil, nil, 0)}
assertOK(task.Run(testutils.Context(t), logger.TestLogger(t), vars, []pipeline.Result{{Value: test.input}}))
})`
$DIR/core/services/pipeline/task.length_test.go: `.NewVarsFrom(nil)`
$DIR/core/services/pipeline/task.length_test.go: `.NewBaseTask(0, "task", nil, nil, 0)`
$DIR/core/services/pipeline/task.length_test.go: `.Run(testutils.Context(t), logger.TestLogger(t), vars, []pipeline.Result{{Value: test.input}})`
$DIR/core/services/pipeline/task.length_test.go: `.Context(t)`
$DIR/core/services/pipeline/task.length_test.go: `.TestLogger(t)`
$DIR/core/services/pipeline/task.length_test.go: `.Run("without vars through input param", func(t *testing.T) {
var inputStr string
if _, ok := test.input.([]byte); ok {
inputStr = string(test.input.([]byte))
} else {
inputStr = test.input.(string)
}
if inputStr == "" {
// empty input parameter is indistinguishable from not providing it at all
// in that case the task will use an input defined by the job DAG
return
}
vars := pipeline.NewVarsFrom(nil)
task := pipeline.LengthTask{
BaseTask: pipeline.NewBaseTask(0, "task", nil, nil, 0),
Input: inputStr,
}
assertOK(task.Run(testutils.Context(t), logger.TestLogger(t), vars, []pipeline.Result{}))
})`
$DIR/core/services/pipeline/task.length_test.go: `.NewVarsFrom(nil)`
$DIR/core/services/pipeline/task.length_test.go: `.NewBaseTask(0, "task", nil, nil, 0)`
$DIR/core/services/pipeline/task.length_test.go: `.Run(testutils.Context(t), logger.TestLogger(t), vars, []pipeline.Result{})`
$DIR/core/services/pipeline/task.length_test.go: `.Context(t)`
$DIR/core/services/pipeline/task.length_test.go: `.TestLogger(t)`
$DIR/core/services/pipeline/task.length_test.go: `.Run("with vars", func(t *testing.T) {
vars := pipeline.NewVarsFrom(map[string]interface{}{
"foo": map[string]interface{}{"bar": test.input},
})
task := pipeline.LengthTask{
BaseTask: pipeline.NewBaseTask(0, "task", nil, nil, 0),
Input: "$(foo.bar)",
}
assertOK(task.Run(testutils.Context(t), logger.TestLogger(t), vars, []pipeline.Result{}))
})`
$DIR/core/services/pipeline/task.length_test.go: `.NewVarsFrom(map[string]interface{}{
"foo": map[string]interface{}{"bar": test.input},
})`
$DIR/core/services/pipeline/task.length_test.go: `.NewBaseTask(0, "task", nil, nil, 0)`
$DIR/core/services/pipeline/task.length_test.go: `.Run(testutils.Context(t), logger.TestLogger(t), vars, []pipeline.Result{})`
$DIR/core/services/pipeline/task.length_test.go: `.Context(t)`
$DIR/core/services/pipeline/task.length_test.go: `.TestLogger(t)`
$DIR/core/services/pipeline/task.lessthan_test.go: `t.Run(test.name, func(t *testing.T) {
t.Run("without vars through job DAG", func(t *testing.T) {
vars := pipeline.NewVarsFrom(nil)
task := pipeline.LessThanTask{BaseTask: pipeline.NewBaseTask(0, "task", nil, nil, 0), Right: test.right}
assertOK(task.Run(testutils.Context(t), logger.TestLogger(t), vars, []pipeline.Result{{Value: test.left}}))
})
t.Run("without vars through input param", func(t *testing.T) {
vars := pipeline.NewVarsFrom(nil)
task := pipeline.LessThanTask{
BaseTask: pipeline.NewBaseTask(0, "task", nil, nil, 0),
Left: fmt.Sprintf("%v", test.left),
Right: test.right,
}
assertOK(task.Run(testutils.Context(t), logger.TestLogger(t), vars, []pipeline.Result{}))
})
t.Run("with vars", func(t *testing.T) {
vars := pipeline.NewVarsFrom(map[string]interface{}{
"foo": map[string]interface{}{"bar": test.left},
"chain": map[string]interface{}{"link": test.right},
})
task := pipeline.LessThanTask{
BaseTask: pipeline.NewBaseTask(0, "task", nil, nil, 0),
Left: "$(foo.bar)",
Right: "$(chain.link)",
}
assertOK(task.Run(testutils.Context(t), logger.TestLogger(t), vars, []pipeline.Result{}))
})
})`
$DIR/core/services/pipeline/task.lessthan_test.go: `t.Run("without vars through job DAG", func(t *testing.T) {
vars := pipeline.NewVarsFrom(nil)
task := pipeline.LessThanTask{BaseTask: pipeline.NewBaseTask(0, "task", nil, nil, 0), Right: test.right}
assertOK(task.Run(testutils.Context(t), logger.TestLogger(t), vars, []pipeline.Result{{Value: test.left}}))
})`
$DIR/core/services/pipeline/task.lessthan_test.go: `assertOK(task.Run(testutils.Context(t), logger.TestLogger(t), vars, []pipeline.Result{{Value: test.left}}))`
$DIR/core/services/pipeline/task.lessthan_test.go: `t.Run("without vars through input param", func(t *testing.T) {
vars := pipeline.NewVarsFrom(nil)
task := pipeline.LessThanTask{
BaseTask: pipeline.NewBaseTask(0, "task", nil, nil, 0),
Left: fmt.Sprintf("%v", test.left),
Right: test.right,
}
assertOK(task.Run(testutils.Context(t), logger.TestLogger(t), vars, []pipeline.Result{}))
})`
$DIR/core/services/pipeline/task.lessthan_test.go: `assertOK(task.Run(testutils.Context(t), logger.TestLogger(t), vars, []pipeline.Result{}))`
$DIR/core/services/pipeline/task.lessthan_test.go: `t.Run("with vars", func(t *testing.T) {
vars := pipeline.NewVarsFrom(map[string]interface{}{
"foo": map[string]interface{}{"bar": test.left},
"chain": map[string]interface{}{"link": test.right},
})
task := pipeline.LessThanTask{
BaseTask: pipeline.NewBaseTask(0, "task", nil, nil, 0),
Left: "$(foo.bar)",
Right: "$(chain.link)",
}
assertOK(task.Run(testutils.Context(t), logger.TestLogger(t), vars, []pipeline.Result{}))
})`
$DIR/core/services/pipeline/task.lessthan_test.go: `assertOK(task.Run(testutils.Context(t), logger.TestLogger(t), vars, []pipeline.Result{}))`
$DIR/core/services/pipeline/task.lessthan_test.go: `t.Run(test.name, func(t *testing.T) {
task := pipeline.LessThanTask{
BaseTask: pipeline.NewBaseTask(0, "task", nil, nil, 0),
Left: test.left,
Right: test.right,
}
result, runInfo := task.Run(testutils.Context(t), logger.TestLogger(t), test.vars, test.inputs)
assert.False(t, runInfo.IsPending)
assert.False(t, runInfo.IsRetryable)
require.Equal(t, test.wantErrorCause, errors.Cause(result.Error))
if test.wantErrorContains != "" {
require.Contains(t, result.Error.Error(), test.wantErrorContains)
}
})`
$DIR/core/services/pipeline/task.lessthan_test.go: `.Run(test.name, func(t *testing.T) {
t.Run("without vars through job DAG", func(t *testing.T) {
vars := pipeline.NewVarsFrom(nil)
task := pipeline.LessThanTask{BaseTask: pipeline.NewBaseTask(0, "task", nil, nil, 0), Right: test.right}
assertOK(task.Run(testutils.Context(t), logger.TestLogger(t), vars, []pipeline.Result{{Value: test.left}}))
})
t.Run("without vars through input param", func(t *testing.T) {
vars := pipeline.NewVarsFrom(nil)
task := pipeline.LessThanTask{
BaseTask: pipeline.NewBaseTask(0, "task", nil, nil, 0),
Left: fmt.Sprintf("%v", test.left),
Right: test.right,
}
assertOK(task.Run(testutils.Context(t), logger.TestLogger(t), vars, []pipeline.Result{}))
})
t.Run("with vars", func(t *testing.T) {
vars := pipeline.NewVarsFrom(map[string]interface{}{
"foo": map[string]interface{}{"bar": test.left},
"chain": map[string]interface{}{"link": test.right},
})
task := pipeline.LessThanTask{
BaseTask: pipeline.NewBaseTask(0, "task", nil, nil, 0),
Left: "$(foo.bar)",
Right: "$(chain.link)",
}
assertOK(task.Run(testutils.Context(t), logger.TestLogger(t), vars, []pipeline.Result{}))
})
})`
$DIR/core/services/pipeline/task.lessthan_test.go: `.Run("without vars through job DAG", func(t *testing.T) {
vars := pipeline.NewVarsFrom(nil)
task := pipeline.LessThanTask{BaseTask: pipeline.NewBaseTask(0, "task", nil, nil, 0), Right: test.right}
assertOK(task.Run(testutils.Context(t), logger.TestLogger(t), vars, []pipeline.Result{{Value: test.left}}))
})`
$DIR/core/services/pipeline/task.lessthan_test.go: `.NewVarsFrom(nil)`
$DIR/core/services/pipeline/task.lessthan_test.go: `.NewBaseTask(0, "task", nil, nil, 0)`
$DIR/core/services/pipeline/task.lessthan_test.go: `.Run(testutils.Context(t), logger.TestLogger(t), vars, []pipeline.Result{{Value: test.left}})`
$DIR/core/services/pipeline/task.lessthan_test.go: `.Context(t)`
$DIR/core/services/pipeline/task.lessthan_test.go: `.TestLogger(t)`
$DIR/core/services/pipeline/task.lessthan_test.go: `.Run("without vars through input param", func(t *testing.T) {
vars := pipeline.NewVarsFrom(nil)
task := pipeline.LessThanTask{
BaseTask: pipeline.NewBaseTask(0, "task", nil, nil, 0),
Left: fmt.Sprintf("%v", test.left),
Right: test.right,
}
assertOK(task.Run(testutils.Context(t), logger.TestLogger(t), vars, []pipeline.Result{}))
})`
$DIR/core/services/pipeline/task.lessthan_test.go: `.NewVarsFrom(nil)`
$DIR/core/services/pipeline/task.lessthan_test.go: `.NewBaseTask(0, "task", nil, nil, 0)`
$DIR/core/services/pipeline/task.lessthan_test.go: `.Sprintf("%v", test.left)`
$DIR/core/services/pipeline/task.lessthan_test.go: `.Run(testutils.Context(t), logger.TestLogger(t), vars, []pipeline.Result{})`
$DIR/core/services/pipeline/task.lessthan_test.go: `.Context(t)`
$DIR/core/services/pipeline/task.lessthan_test.go: `.TestLogger(t)`
$DIR/core/services/pipeline/task.lessthan_test.go: `.Run("with vars", func(t *testing.T) {
vars := pipeline.NewVarsFrom(map[string]interface{}{
"foo": map[string]interface{}{"bar": test.left},
"chain": map[string]interface{}{"link": test.right},
})
task := pipeline.LessThanTask{
BaseTask: pipeline.NewBaseTask(0, "task", nil, nil, 0),
Left: "$(foo.bar)",
Right: "$(chain.link)",
}
assertOK(task.Run(testutils.Context(t), logger.TestLogger(t), vars, []pipeline.Result{}))
})`
$DIR/core/services/pipeline/task.lessthan_test.go: `.NewVarsFrom(map[string]interface{}{
"foo": map[string]interface{}{"bar": test.left},
"chain": map[string]interface{}{"link": test.right},
})`
$DIR/core/services/pipeline/task.lessthan_test.go: `.NewBaseTask(0, "task", nil, nil, 0)`
$DIR/core/services/pipeline/task.lessthan_test.go: `.Run(testutils.Context(t), logger.TestLogger(t), vars, []pipeline.Result{})`
$DIR/core/services/pipeline/task.lessthan_test.go: `.Context(t)`
$DIR/core/services/pipeline/task.lessthan_test.go: `.TestLogger(t)`
$DIR/core/services/pipeline/task.lessthan_test.go: `.NewVarsFrom(nil)`
$DIR/core/services/pipeline/task.lessthan_test.go: `.NewVarsFrom(map[string]interface{}{"foo": map[string]interface{}{"chain": "link"}})`
$DIR/core/services/pipeline/task.lessthan_test.go: `.NewVarsFrom(nil)`
$DIR/core/services/pipeline/task.lessthan_test.go: `.NewVarsFrom(map[string]interface{}{"foo": []interface{}{"chain", "link"}})`
$DIR/core/services/pipeline/task.lessthan_test.go: `.NewVarsFrom(nil)`
$DIR/core/services/pipeline/task.lessthan_test.go: `.NewVarsFrom(nil)`
$DIR/core/services/pipeline/task.lessthan_test.go: `.Run(test.name, func(t *testing.T) {
task := pipeline.LessThanTask{
BaseTask: pipeline.NewBaseTask(0, "task", nil, nil, 0),
Left: test.left,
Right: test.right,
}
result, runInfo := task.Run(testutils.Context(t), logger.TestLogger(t), test.vars, test.inputs)
assert.False(t, runInfo.IsPending)
assert.False(t, runInfo.IsRetryable)
require.Equal(t, test.wantErrorCause, errors.Cause(result.Error))
if test.wantErrorContains != "" {
require.Contains(t, result.Error.Error(), test.wantErrorContains)
}
})`
$DIR/core/services/pipeline/task.lessthan_test.go: `.NewBaseTask(0, "task", nil, nil, 0)`
$DIR/core/services/pipeline/task.lessthan_test.go: `.Run(testutils.Context(t), logger.TestLogger(t), test.vars, test.inputs)`
$DIR/core/services/pipeline/task.lessthan_test.go: `.Context(t)`
$DIR/core/services/pipeline/task.lessthan_test.go: `.TestLogger(t)`
$DIR/core/services/pipeline/task.lookup_test.go: `t.Run("with valid key for map", func(t *testing.T) {
task.Key = "foo"
inputs = []pipeline.Result{{Value: m, Error: nil}}
res, _ := task.Run(testutils.Context(t), logger.TestLogger(t), vars, inputs)
assert.Equal(t, 42, res.Value)
assert.Nil(t, res.Error)
})`
$DIR/core/services/pipeline/task.lookup_test.go: `task.Key = "foo"`
$DIR/core/services/pipeline/task.lookup_test.go: `inputs = []pipeline.Result{{Value: m, Error: nil}}`
$DIR/core/services/pipeline/task.lookup_test.go: `t.Run("returns nil if key is missing", func(t *testing.T) {
task.Key = "qux"
inputs = []pipeline.Result{{Value: m, Error: nil}}
res, _ := task.Run(testutils.Context(t), logger.TestLogger(t), vars, inputs)
assert.Nil(t, res.Error)
assert.Nil(t, res.Value)
})`
$DIR/core/services/pipeline/task.lookup_test.go: `task.Key = "qux"`
$DIR/core/services/pipeline/task.lookup_test.go: `inputs = []pipeline.Result{{Value: m, Error: nil}}`
$DIR/core/services/pipeline/task.lookup_test.go: `t.Run("errors when input is not a map", func(t *testing.T) {
task.Key = "qux"
inputs = []pipeline.Result{{Value: "something", Error: nil}}
res, _ := task.Run(testutils.Context(t), logger.TestLogger(t), vars, inputs)
assert.EqualError(t, res.Error, "unexpected input type: string")
assert.Nil(t, res.Value)
})`
$DIR/core/services/pipeline/task.lookup_test.go: `task.Key = "qux"`
$DIR/core/services/pipeline/task.lookup_test.go: `inputs = []pipeline.Result{{Value: "something", Error: nil}}`
$DIR/core/services/pipeline/task.lookup_test.go: `t.Run("errors when input is error", func(t *testing.T) {
task.Key = "qux"
inputs = []pipeline.Result{{Value: nil, Error: errors.New("something blew up")}}
res, _ := task.Run(testutils.Context(t), logger.TestLogger(t), vars, inputs)
assert.EqualError(t, res.Error, "task inputs: too many errors")
assert.Nil(t, res.Value)
})`
$DIR/core/services/pipeline/task.lookup_test.go: `task.Key = "qux"`
$DIR/core/services/pipeline/task.lookup_test.go: `inputs = []pipeline.Result{{Value: nil, Error: errors.New("something blew up")}}`
$DIR/core/services/pipeline/task.lookup_test.go: `task.Key = "qux"`
$DIR/core/services/pipeline/task.lookup_test.go: `inputs = []pipeline.Result{{Value: m, Error: nil}, {Value: nil, Error: errors.New("something blew up")}}`
$DIR/core/services/pipeline/task.lookup_test.go: `.Run("with valid key for map", func(t *testing.T) {
task.Key = "foo"
inputs = []pipeline.Result{{Value: m, Error: nil}}
res, _ := task.Run(testutils.Context(t), logger.TestLogger(t), vars, inputs)
assert.Equal(t, 42, res.Value)
assert.Nil(t, res.Error)
})`
$DIR/core/services/pipeline/task.lookup_test.go: `.Run(testutils.Context(t), logger.TestLogger(t), vars, inputs)`
$DIR/core/services/pipeline/task.lookup_test.go: `.Context(t)`
$DIR/core/services/pipeline/task.lookup_test.go: `.TestLogger(t)`
$DIR/core/services/pipeline/task.lookup_test.go: `.Run("returns nil if key is missing", func(t *testing.T) {
task.Key = "qux"
inputs = []pipeline.Result{{Value: m, Error: nil}}
res, _ := task.Run(testutils.Context(t), logger.TestLogger(t), vars, inputs)
assert.Nil(t, res.Error)
assert.Nil(t, res.Value)
})`
$DIR/core/services/pipeline/task.lookup_test.go: `.Run(testutils.Context(t), logger.TestLogger(t), vars, inputs)`
$DIR/core/services/pipeline/task.lookup_test.go: `.Context(t)`
$DIR/core/services/pipeline/task.lookup_test.go: `.TestLogger(t)`
$DIR/core/services/pipeline/task.lookup_test.go: `.Run("errors when input is not a map", func(t *testing.T) {
task.Key = "qux"
inputs = []pipeline.Result{{Value: "something", Error: nil}}
res, _ := task.Run(testutils.Context(t), logger.TestLogger(t), vars, inputs)
assert.EqualError(t, res.Error, "unexpected input type: string")
assert.Nil(t, res.Value)
})`
$DIR/core/services/pipeline/task.lookup_test.go: `.Run(testutils.Context(t), logger.TestLogger(t), vars, inputs)`
$DIR/core/services/pipeline/task.lookup_test.go: `.Context(t)`
$DIR/core/services/pipeline/task.lookup_test.go: `.TestLogger(t)`
$DIR/core/services/pipeline/task.lookup_test.go: `.Run("errors when input is error", func(t *testing.T) {
task.Key = "qux"
inputs = []pipeline.Result{{Value: nil, Error: errors.New("something blew up")}}
res, _ := task.Run(testutils.Context(t), logger.TestLogger(t), vars, inputs)
assert.EqualError(t, res.Error, "task inputs: too many errors")
assert.Nil(t, res.Value)
})`
$DIR/core/services/pipeline/task.lookup_test.go: `.New("something blew up")`
$DIR/core/services/pipeline/task.lookup_test.go: `.Run(testutils.Context(t), logger.TestLogger(t), vars, inputs)`
$DIR/core/services/pipeline/task.lookup_test.go: `.Context(t)`
$DIR/core/services/pipeline/task.lookup_test.go: `.TestLogger(t)`
$DIR/core/services/pipeline/task.lookup_test.go: `.New("something blew up")`
$DIR/core/services/pipeline/task.lookup_test.go: `.Run(testutils.Context(t), logger.TestLogger(t), vars, inputs)`
$DIR/core/services/pipeline/task.lookup_test.go: `.Context(t)`
$DIR/core/services/pipeline/task.lookup_test.go: `.TestLogger(t)`
$DIR/core/services/pipeline/task.lowercase_test.go: `t.Run(test.name, func(t *testing.T) {
t.Run("without vars through job DAG", func(t *testing.T) {
vars := pipeline.NewVarsFrom(nil)
task := pipeline.LowercaseTask{BaseTask: pipeline.NewBaseTask(0, "task", nil, nil, 0)}
assertOK(task.Run(testutils.Context(t), logger.TestLogger(t), vars, []pipeline.Result{{Value: test.input}}))
})
t.Run("without vars through input param", func(t *testing.T) {
inputStr := fmt.Sprintf("%v", test.input)
if inputStr == "" {
// empty input parameter is indistinguishable from not providing it at all
// in that case the task will use an input defined by the job DAG
return
}
vars := pipeline.NewVarsFrom(nil)
task := pipeline.LowercaseTask{
BaseTask: pipeline.NewBaseTask(0, "task", nil, nil, 0),
Input: inputStr,
}
assertOK(task.Run(testutils.Context(t), logger.TestLogger(t), vars, []pipeline.Result{}))
})
t.Run("with vars", func(t *testing.T) {
vars := pipeline.NewVarsFrom(map[string]interface{}{
"foo": map[string]interface{}{"bar": test.input},
})
task := pipeline.LowercaseTask{
BaseTask: pipeline.NewBaseTask(0, "task", nil, nil, 0),
Input: "$(foo.bar)",
}
assertOK(task.Run(testutils.Context(t), logger.TestLogger(t), vars, []pipeline.Result{}))
})
})`
$DIR/core/services/pipeline/task.lowercase_test.go: `t.Run("without vars through job DAG", func(t *testing.T) {
vars := pipeline.NewVarsFrom(nil)
task := pipeline.LowercaseTask{BaseTask: pipeline.NewBaseTask(0, "task", nil, nil, 0)}
assertOK(task.Run(testutils.Context(t), logger.TestLogger(t), vars, []pipeline.Result{{Value: test.input}}))
})`
$DIR/core/services/pipeline/task.lowercase_test.go: `assertOK(task.Run(testutils.Context(t), logger.TestLogger(t), vars, []pipeline.Result{{Value: test.input}}))`
$DIR/core/services/pipeline/task.lowercase_test.go: `t.Run("without vars through input param", func(t *testing.T) {
inputStr := fmt.Sprintf("%v", test.input)
if inputStr == "" {
// empty input parameter is indistinguishable from not providing it at all
// in that case the task will use an input defined by the job DAG
return
}
vars := pipeline.NewVarsFrom(nil)
task := pipeline.LowercaseTask{
BaseTask: pipeline.NewBaseTask(0, "task", nil, nil, 0),
Input: inputStr,
}
assertOK(task.Run(testutils.Context(t), logger.TestLogger(t), vars, []pipeline.Result{}))
})`
$DIR/core/services/pipeline/task.lowercase_test.go: `assertOK(task.Run(testutils.Context(t), logger.TestLogger(t), vars, []pipeline.Result{}))`
$DIR/core/services/pipeline/task.lowercase_test.go: `t.Run("with vars", func(t *testing.T) {
vars := pipeline.NewVarsFrom(map[string]interface{}{
"foo": map[string]interface{}{"bar": test.input},
})
task := pipeline.LowercaseTask{
BaseTask: pipeline.NewBaseTask(0, "task", nil, nil, 0),
Input: "$(foo.bar)",
}
assertOK(task.Run(testutils.Context(t), logger.TestLogger(t), vars, []pipeline.Result{}))
})`
$DIR/core/services/pipeline/task.lowercase_test.go: `assertOK(task.Run(testutils.Context(t), logger.TestLogger(t), vars, []pipeline.Result{}))`
$DIR/core/services/pipeline/task.lowercase_test.go: `.Run(test.name, func(t *testing.T) {
t.Run("without vars through job DAG", func(t *testing.T) {
vars := pipeline.NewVarsFrom(nil)
task := pipeline.LowercaseTask{BaseTask: pipeline.NewBaseTask(0, "task", nil, nil, 0)}
assertOK(task.Run(testutils.Context(t), logger.TestLogger(t), vars, []pipeline.Result{{Value: test.input}}))
})
t.Run("without vars through input param", func(t *testing.T) {
inputStr := fmt.Sprintf("%v", test.input)
if inputStr == "" {
// empty input parameter is indistinguishable from not providing it at all
// in that case the task will use an input defined by the job DAG
return
}
vars := pipeline.NewVarsFrom(nil)
task := pipeline.LowercaseTask{
BaseTask: pipeline.NewBaseTask(0, "task", nil, nil, 0),
Input: inputStr,
}
assertOK(task.Run(testutils.Context(t), logger.TestLogger(t), vars, []pipeline.Result{}))
})
t.Run("with vars", func(t *testing.T) {
vars := pipeline.NewVarsFrom(map[string]interface{}{
"foo": map[string]interface{}{"bar": test.input},
})
task := pipeline.LowercaseTask{
BaseTask: pipeline.NewBaseTask(0, "task", nil, nil, 0),
Input: "$(foo.bar)",
}
assertOK(task.Run(testutils.Context(t), logger.TestLogger(t), vars, []pipeline.Result{}))
})
})`
$DIR/core/services/pipeline/task.lowercase_test.go: `.Run("without vars through job DAG", func(t *testing.T) {
vars := pipeline.NewVarsFrom(nil)
task := pipeline.LowercaseTask{BaseTask: pipeline.NewBaseTask(0, "task", nil, nil, 0)}
assertOK(task.Run(testutils.Context(t), logger.TestLogger(t), vars, []pipeline.Result{{Value: test.input}}))
})`
$DIR/core/services/pipeline/task.lowercase_test.go: `.NewVarsFrom(nil)`
$DIR/core/services/pipeline/task.lowercase_test.go: `.NewBaseTask(0, "task", nil, nil, 0)`
$DIR/core/services/pipeline/task.lowercase_test.go: `.Run(testutils.Context(t), logger.TestLogger(t), vars, []pipeline.Result{{Value: test.input}})`
$DIR/core/services/pipeline/task.lowercase_test.go: `.Context(t)`
$DIR/core/services/pipeline/task.lowercase_test.go: `.TestLogger(t)`
$DIR/core/services/pipeline/task.lowercase_test.go: `.Run("without vars through input param", func(t *testing.T) {
inputStr := fmt.Sprintf("%v", test.input)
if inputStr == "" {
// empty input parameter is indistinguishable from not providing it at all
// in that case the task will use an input defined by the job DAG
return
}
vars := pipeline.NewVarsFrom(nil)
task := pipeline.LowercaseTask{
BaseTask: pipeline.NewBaseTask(0, "task", nil, nil, 0),
Input: inputStr,
}
assertOK(task.Run(testutils.Context(t), logger.TestLogger(t), vars, []pipeline.Result{}))
})`
$DIR/core/services/pipeline/task.lowercase_test.go: `.Sprintf("%v", test.input)`
$DIR/core/services/pipeline/task.lowercase_test.go: `.NewVarsFrom(nil)`
$DIR/core/services/pipeline/task.lowercase_test.go: `.NewBaseTask(0, "task", nil, nil, 0)`
$DIR/core/services/pipeline/task.lowercase_test.go: `.Run(testutils.Context(t), logger.TestLogger(t), vars, []pipeline.Result{})`
$DIR/core/services/pipeline/task.lowercase_test.go: `.Context(t)`
$DIR/core/services/pipeline/task.lowercase_test.go: `.TestLogger(t)`
$DIR/core/services/pipeline/task.lowercase_test.go: `.Run("with vars", func(t *testing.T) {
vars := pipeline.NewVarsFrom(map[string]interface{}{
"foo": map[string]interface{}{"bar": test.input},
})
task := pipeline.LowercaseTask{
BaseTask: pipeline.NewBaseTask(0, "task", nil, nil, 0),
Input: "$(foo.bar)",
}
assertOK(task.Run(testutils.Context(t), logger.TestLogger(t), vars, []pipeline.Result{}))
})`
$DIR/core/services/pipeline/task.lowercase_test.go: `.NewVarsFrom(map[string]interface{}{
"foo": map[string]interface{}{"bar": test.input},
})`
$DIR/core/services/pipeline/task.lowercase_test.go: `.NewBaseTask(0, "task", nil, nil, 0)`
$DIR/core/services/pipeline/task.lowercase_test.go: `.Run(testutils.Context(t), logger.TestLogger(t), vars, []pipeline.Result{})`
$DIR/core/services/pipeline/task.lowercase_test.go: `.Context(t)`
$DIR/core/services/pipeline/task.lowercase_test.go: `.TestLogger(t)`
$DIR/core/services/pipeline/task.mean_test.go: `t.Run(test.name, func(t *testing.T) {
t.Run("without vars", func(t *testing.T) {
task := pipeline.MeanTask{
BaseTask: pipeline.NewBaseTask(0, "task", nil, nil, 0),
AllowedFaults: test.allowedFaults,
Precision: test.precision,
}
output, runInfo := task.Run(testutils.Context(t), logger.TestLogger(t), pipeline.NewVarsFrom(nil), test.inputs)
assert.False(t, runInfo.IsPending)
assert.False(t, runInfo.IsRetryable)
if output.Error != nil {
require.Equal(t, test.want.Error, errors.Cause(output.Error))
require.Nil(t, output.Value)
} else {
require.Equal(t, test.want.Value.(*decimal.Decimal).String(), output.Value.(decimal.Decimal).String())
require.NoError(t, output.Error)
}
})
t.Run("with vars", func(t *testing.T) {
var inputs []interface{}
for _, input := range test.inputs {
if input.Error != nil {
inputs = append(inputs, input.Error)
} else {
inputs = append(inputs, input.Value)
}
}
vars := pipeline.NewVarsFrom(map[string]interface{}{
"foo": map[string]interface{}{"bar": inputs},
})
task := pipeline.MeanTask{
BaseTask: pipeline.NewBaseTask(0, "task", nil, nil, 0),
Values: "$(foo.bar)",
AllowedFaults: test.allowedFaults,
Precision: test.precision,
}
output, runInfo := task.Run(testutils.Context(t), logger.TestLogger(t), vars, nil)
assert.False(t, runInfo.IsPending)
assert.False(t, runInfo.IsRetryable)
if output.Error != nil {
require.Equal(t, test.want.Error, errors.Cause(output.Error))
require.Nil(t, output.Value)
} else {
require.Equal(t, test.want.Value.(*decimal.Decimal).String(), output.Value.(decimal.Decimal).String())
require.NoError(t, output.Error)
}
})
t.Run("with json vars", func(t *testing.T) {
var inputs []interface{}
for _, input := range test.inputs {
if input.Error != nil {
inputs = append(inputs, input.Error)
} else {
inputs = append(inputs, input.Value)
}
}
var valuesParam string
var vars pipeline.Vars
switch len(inputs) {
case 0:
valuesParam = "[]"
vars = pipeline.NewVarsFrom(nil)
case 1:
valuesParam = "[ $(foo) ]"
vars = pipeline.NewVarsFrom(map[string]interface{}{"foo": inputs[0]})
case 2:
valuesParam = "[ $(foo), $(bar) ]"
vars = pipeline.NewVarsFrom(map[string]interface{}{"foo": inputs[0], "bar": inputs[1]})
case 3:
valuesParam = "[ $(foo), $(bar), $(chain) ]"
vars = pipeline.NewVarsFrom(map[string]interface{}{"foo": inputs[0], "bar": inputs[1], "chain": inputs[2]})
case 4:
valuesParam = "[ $(foo), $(bar), $(chain), $(link) ]"
vars = pipeline.NewVarsFrom(map[string]interface{}{"foo": inputs[0], "bar": inputs[1], "chain": inputs[2], "link": inputs[3]})
}
task := pipeline.MeanTask{
BaseTask: pipeline.NewBaseTask(0, "task", nil, nil, 0),
Values: valuesParam,
AllowedFaults: test.allowedFaults,
Precision: test.precision,
}
output, runInfo := task.Run(testutils.Context(t), logger.TestLogger(t), vars, nil)
assert.False(t, runInfo.IsPending)
assert.False(t, runInfo.IsRetryable)
if output.Error != nil {
require.Equal(t, test.want.Error, errors.Cause(output.Error))
require.Nil(t, output.Value)
} else {
require.Equal(t, test.want.Value.(*decimal.Decimal).String(), output.Value.(decimal.Decimal).String())
require.NoError(t, output.Error)
}
})
})`
$DIR/core/services/pipeline/task.mean_test.go: `t.Run("without vars", func(t *testing.T) {
task := pipeline.MeanTask{
BaseTask: pipeline.NewBaseTask(0, "task", nil, nil, 0),
AllowedFaults: test.allowedFaults,
Precision: test.precision,
}
output, runInfo := task.Run(testutils.Context(t), logger.TestLogger(t), pipeline.NewVarsFrom(nil), test.inputs)
assert.False(t, runInfo.IsPending)
assert.False(t, runInfo.IsRetryable)
if output.Error != nil {
require.Equal(t, test.want.Error, errors.Cause(output.Error))
require.Nil(t, output.Value)
} else {
require.Equal(t, test.want.Value.(*decimal.Decimal).String(), output.Value.(decimal.Decimal).String())
require.NoError(t, output.Error)
}
})`
$DIR/core/services/pipeline/task.mean_test.go: `t.Run("with vars", func(t *testing.T) {
var inputs []interface{}
for _, input := range test.inputs {
if input.Error != nil {
inputs = append(inputs, input.Error)
} else {
inputs = append(inputs, input.Value)
}
}
vars := pipeline.NewVarsFrom(map[string]interface{}{
"foo": map[string]interface{}{"bar": inputs},
})
task := pipeline.MeanTask{
BaseTask: pipeline.NewBaseTask(0, "task", nil, nil, 0),
Values: "$(foo.bar)",
AllowedFaults: test.allowedFaults,
Precision: test.precision,
}
output, runInfo := task.Run(testutils.Context(t), logger.TestLogger(t), vars, nil)
assert.False(t, runInfo.IsPending)
assert.False(t, runInfo.IsRetryable)
if output.Error != nil {
require.Equal(t, test.want.Error, errors.Cause(output.Error))
require.Nil(t, output.Value)
} else {
require.Equal(t, test.want.Value.(*decimal.Decimal).String(), output.Value.(decimal.Decimal).String())
require.NoError(t, output.Error)
}
})`
$DIR/core/services/pipeline/task.mean_test.go: `inputs = append(inputs, input.Error)`
$DIR/core/services/pipeline/task.mean_test.go: `inputs = append(inputs, input.Value)`
$DIR/core/services/pipeline/task.mean_test.go: `t.Run("with json vars", func(t *testing.T) {
var inputs []interface{}
for _, input := range test.inputs {
if input.Error != nil {
inputs = append(inputs, input.Error)
} else {
inputs = append(inputs, input.Value)
}
}
var valuesParam string
var vars pipeline.Vars
switch len(inputs) {
case 0:
valuesParam = "[]"
vars = pipeline.NewVarsFrom(nil)
case 1:
valuesParam = "[ $(foo) ]"
vars = pipeline.NewVarsFrom(map[string]interface{}{"foo": inputs[0]})
case 2:
valuesParam = "[ $(foo), $(bar) ]"
vars = pipeline.NewVarsFrom(map[string]interface{}{"foo": inputs[0], "bar": inputs[1]})
case 3:
valuesParam = "[ $(foo), $(bar), $(chain) ]"
vars = pipeline.NewVarsFrom(map[string]interface{}{"foo": inputs[0], "bar": inputs[1], "chain": inputs[2]})
case 4:
valuesParam = "[ $(foo), $(bar), $(chain), $(link) ]"
vars = pipeline.NewVarsFrom(map[string]interface{}{"foo": inputs[0], "bar": inputs[1], "chain": inputs[2], "link": inputs[3]})
}
task := pipeline.MeanTask{
BaseTask: pipeline.NewBaseTask(0, "task", nil, nil, 0),
Values: valuesParam,
AllowedFaults: test.allowedFaults,
Precision: test.precision,
}
output, runInfo := task.Run(testutils.Context(t), logger.TestLogger(t), vars, nil)
assert.False(t, runInfo.IsPending)
assert.False(t, runInfo.IsRetryable)
if output.Error != nil {
require.Equal(t, test.want.Error, errors.Cause(output.Error))
require.Nil(t, output.Value)
} else {
require.Equal(t, test.want.Value.(*decimal.Decimal).String(), output.Value.(decimal.Decimal).String())
require.NoError(t, output.Error)
}
})`
$DIR/core/services/pipeline/task.mean_test.go: `inputs = append(inputs, input.Error)`
$DIR/core/services/pipeline/task.mean_test.go: `inputs = append(inputs, input.Value)`
$DIR/core/services/pipeline/task.mean_test.go: `valuesParam = "[]"`
$DIR/core/services/pipeline/task.mean_test.go: `vars = pipeline.NewVarsFrom(nil)`
$DIR/core/services/pipeline/task.mean_test.go: `valuesParam = "[ $(foo) ]"`
$DIR/core/services/pipeline/task.mean_test.go: `vars = pipeline.NewVarsFrom(map[string]interface{}{"foo": inputs[0]})`
$DIR/core/services/pipeline/task.mean_test.go: `valuesParam = "[ $(foo), $(bar) ]"`
$DIR/core/services/pipeline/task.mean_test.go: `vars = pipeline.NewVarsFrom(map[string]interface{}{"foo": inputs[0], "bar": inputs[1]})`
$DIR/core/services/pipeline/task.mean_test.go: `valuesParam = "[ $(foo), $(bar), $(chain) ]"`
$DIR/core/services/pipeline/task.mean_test.go: `vars = pipeline.NewVarsFrom(map[string]interface{}{"foo": inputs[0], "bar": inputs[1], "chain": inputs[2]})`
$DIR/core/services/pipeline/task.mean_test.go: `valuesParam = "[ $(foo), $(bar), $(chain), $(link) ]"`
$DIR/core/services/pipeline/task.mean_test.go: `vars = pipeline.NewVarsFrom(map[string]interface{}{"foo": inputs[0], "bar": inputs[1], "chain": inputs[2], "link": inputs[3]})`
$DIR/core/services/pipeline/task.mean_test.go: `.New("")`
$DIR/core/services/pipeline/task.mean_test.go: `.New("")`
$DIR/core/services/pipeline/task.mean_test.go: `.New("")`
$DIR/core/services/pipeline/task.mean_test.go: `.New("")`
$DIR/core/services/pipeline/task.mean_test.go: `.New("")`
$DIR/core/services/pipeline/task.mean_test.go: `.New("")`
$DIR/core/services/pipeline/task.mean_test.go: `.New("")`
$DIR/core/services/pipeline/task.mean_test.go: `.New("")`
$DIR/core/services/pipeline/task.mean_test.go: `.New("")`
$DIR/core/services/pipeline/task.mean_test.go: `.New("")`
$DIR/core/services/pipeline/task.mean_test.go: `.New("")`
$DIR/core/services/pipeline/task.mean_test.go: `.New("")`
$DIR/core/services/pipeline/task.mean_test.go: `.New("")`
$DIR/core/services/pipeline/task.mean_test.go: `.New("")`
$DIR/core/services/pipeline/task.mean_test.go: `.Run(test.name, func(t *testing.T) {
t.Run("without vars", func(t *testing.T) {
task := pipeline.MeanTask{
BaseTask: pipeline.NewBaseTask(0, "task", nil, nil, 0),
AllowedFaults: test.allowedFaults,
Precision: test.precision,
}
output, runInfo := task.Run(testutils.Context(t), logger.TestLogger(t), pipeline.NewVarsFrom(nil), test.inputs)
assert.False(t, runInfo.IsPending)
assert.False(t, runInfo.IsRetryable)
if output.Error != nil {
require.Equal(t, test.want.Error, errors.Cause(output.Error))
require.Nil(t, output.Value)
} else {
require.Equal(t, test.want.Value.(*decimal.Decimal).String(), output.Value.(decimal.Decimal).String())
require.NoError(t, output.Error)
}
})
t.Run("with vars", func(t *testing.T) {
var inputs []interface{}
for _, input := range test.inputs {
if input.Error != nil {
inputs = append(inputs, input.Error)
} else {
inputs = append(inputs, input.Value)
}
}
vars := pipeline.NewVarsFrom(map[string]interface{}{
"foo": map[string]interface{}{"bar": inputs},
})
task := pipeline.MeanTask{
BaseTask: pipeline.NewBaseTask(0, "task", nil, nil, 0),
Values: "$(foo.bar)",
AllowedFaults: test.allowedFaults,
Precision: test.precision,
}
output, runInfo := task.Run(testutils.Context(t), logger.TestLogger(t), vars, nil)
assert.False(t, runInfo.IsPending)
assert.False(t, runInfo.IsRetryable)
if output.Error != nil {
require.Equal(t, test.want.Error, errors.Cause(output.Error))
require.Nil(t, output.Value)
} else {
require.Equal(t, test.want.Value.(*decimal.Decimal).String(), output.Value.(decimal.Decimal).String())
require.NoError(t, output.Error)
}
})
t.Run("with json vars", func(t *testing.T) {
var inputs []interface{}
for _, input := range test.inputs {
if input.Error != nil {
inputs = append(inputs, input.Error)
} else {
inputs = append(inputs, input.Value)
}
}
var valuesParam string
var vars pipeline.Vars
switch len(inputs) {
case 0:
valuesParam = "[]"
vars = pipeline.NewVarsFrom(nil)
case 1:
valuesParam = "[ $(foo) ]"
vars = pipeline.NewVarsFrom(map[string]interface{}{"foo": inputs[0]})
case 2:
valuesParam = "[ $(foo), $(bar) ]"
vars = pipeline.NewVarsFrom(map[string]interface{}{"foo": inputs[0], "bar": inputs[1]})
case 3:
valuesParam = "[ $(foo), $(bar), $(chain) ]"
vars = pipeline.NewVarsFrom(map[string]interface{}{"foo": inputs[0], "bar": inputs[1], "chain": inputs[2]})
case 4:
valuesParam = "[ $(foo), $(bar), $(chain), $(link) ]"
vars = pipeline.NewVarsFrom(map[string]interface{}{"foo": inputs[0], "bar": inputs[1], "chain": inputs[2], "link": inputs[3]})
}
task := pipeline.MeanTask{
BaseTask: pipeline.NewBaseTask(0, "task", nil, nil, 0),
Values: valuesParam,
AllowedFaults: test.allowedFaults,
Precision: test.precision,
}
output, runInfo := task.Run(testutils.Context(t), logger.TestLogger(t), vars, nil)
assert.False(t, runInfo.IsPending)
assert.False(t, runInfo.IsRetryable)
if output.Error != nil {
require.Equal(t, test.want.Error, errors.Cause(output.Error))
require.Nil(t, output.Value)
} else {
require.Equal(t, test.want.Value.(*decimal.Decimal).String(), output.Value.(decimal.Decimal).String())
require.NoError(t, output.Error)
}
})
})`
$DIR/core/services/pipeline/task.mean_test.go: `.Run("without vars", func(t *testing.T) {
task := pipeline.MeanTask{
BaseTask: pipeline.NewBaseTask(0, "task", nil, nil, 0),
AllowedFaults: test.allowedFaults,
Precision: test.precision,
}
output, runInfo := task.Run(testutils.Context(t), logger.TestLogger(t), pipeline.NewVarsFrom(nil), test.inputs)
assert.False(t, runInfo.IsPending)
assert.False(t, runInfo.IsRetryable)
if output.Error != nil {
require.Equal(t, test.want.Error, errors.Cause(output.Error))
require.Nil(t, output.Value)
} else {
require.Equal(t, test.want.Value.(*decimal.Decimal).String(), output.Value.(decimal.Decimal).String())
require.NoError(t, output.Error)
}
})`
$DIR/core/services/pipeline/task.mean_test.go: `.NewBaseTask(0, "task", nil, nil, 0)`
$DIR/core/services/pipeline/task.mean_test.go: `.Run(testutils.Context(t), logger.TestLogger(t), pipeline.NewVarsFrom(nil), test.inputs)`
$DIR/core/services/pipeline/task.mean_test.go: `.Context(t)`
$DIR/core/services/pipeline/task.mean_test.go: `.TestLogger(t)`
$DIR/core/services/pipeline/task.mean_test.go: `.NewVarsFrom(nil)`
$DIR/core/services/pipeline/task.mean_test.go: `.Run("with vars", func(t *testing.T) {
var inputs []interface{}
for _, input := range test.inputs {
if input.Error != nil {
inputs = append(inputs, input.Error)
} else {
inputs = append(inputs, input.Value)
}
}
vars := pipeline.NewVarsFrom(map[string]interface{}{
"foo": map[string]interface{}{"bar": inputs},
})
task := pipeline.MeanTask{
BaseTask: pipeline.NewBaseTask(0, "task", nil, nil, 0),
Values: "$(foo.bar)",
AllowedFaults: test.allowedFaults,
Precision: test.precision,
}
output, runInfo := task.Run(testutils.Context(t), logger.TestLogger(t), vars, nil)
assert.False(t, runInfo.IsPending)
assert.False(t, runInfo.IsRetryable)
if output.Error != nil {
require.Equal(t, test.want.Error, errors.Cause(output.Error))
require.Nil(t, output.Value)
} else {
require.Equal(t, test.want.Value.(*decimal.Decimal).String(), output.Value.(decimal.Decimal).String())
require.NoError(t, output.Error)
}
})`
$DIR/core/services/pipeline/task.mean_test.go: `.NewVarsFrom(map[string]interface{}{
"foo": map[string]interface{}{"bar": inputs},
})`
$DIR/core/services/pipeline/task.mean_test.go: `.NewBaseTask(0, "task", nil, nil, 0)`
$DIR/core/services/pipeline/task.mean_test.go: `.Run(testutils.Context(t), logger.TestLogger(t), vars, nil)`
$DIR/core/services/pipeline/task.mean_test.go: `.Context(t)`
$DIR/core/services/pipeline/task.mean_test.go: `.TestLogger(t)`
$DIR/core/services/pipeline/task.mean_test.go: `.Run("with json vars", func(t *testing.T) {
var inputs []interface{}
for _, input := range test.inputs {
if input.Error != nil {
inputs = append(inputs, input.Error)
} else {
inputs = append(inputs, input.Value)
}
}
var valuesParam string
var vars pipeline.Vars
switch len(inputs) {
case 0:
valuesParam = "[]"
vars = pipeline.NewVarsFrom(nil)
case 1:
valuesParam = "[ $(foo) ]"
vars = pipeline.NewVarsFrom(map[string]interface{}{"foo": inputs[0]})
case 2:
valuesParam = "[ $(foo), $(bar) ]"
vars = pipeline.NewVarsFrom(map[string]interface{}{"foo": inputs[0], "bar": inputs[1]})
case 3:
valuesParam = "[ $(foo), $(bar), $(chain) ]"
vars = pipeline.NewVarsFrom(map[string]interface{}{"foo": inputs[0], "bar": inputs[1], "chain": inputs[2]})
case 4:
valuesParam = "[ $(foo), $(bar), $(chain), $(link) ]"
vars = pipeline.NewVarsFrom(map[string]interface{}{"foo": inputs[0], "bar": inputs[1], "chain": inputs[2], "link": inputs[3]})
}
task := pipeline.MeanTask{
BaseTask: pipeline.NewBaseTask(0, "task", nil, nil, 0),
Values: valuesParam,
AllowedFaults: test.allowedFaults,
Precision: test.precision,
}
output, runInfo := task.Run(testutils.Context(t), logger.TestLogger(t), vars, nil)
assert.False(t, runInfo.IsPending)
assert.False(t, runInfo.IsRetryable)
if output.Error != nil {
require.Equal(t, test.want.Error, errors.Cause(output.Error))
require.Nil(t, output.Value)
} else {
require.Equal(t, test.want.Value.(*decimal.Decimal).String(), output.Value.(decimal.Decimal).String())
require.NoError(t, output.Error)
}
})`
$DIR/core/services/pipeline/task.mean_test.go: `.NewVarsFrom(nil)`
$DIR/core/services/pipeline/task.mean_test.go: `.NewVarsFrom(map[string]interface{}{"foo": inputs[0]})`
$DIR/core/services/pipeline/task.mean_test.go: `.NewVarsFrom(map[string]interface{}{"foo": inputs[0], "bar": inputs[1]})`
$DIR/core/services/pipeline/task.mean_test.go: `.NewVarsFrom(map[string]interface{}{"foo": inputs[0], "bar": inputs[1], "chain": inputs[2]})`
$DIR/core/services/pipeline/task.mean_test.go: `.NewVarsFrom(map[string]interface{}{"foo": inputs[0], "bar": inputs[1], "chain": inputs[2], "link": inputs[3]})`
$DIR/core/services/pipeline/task.mean_test.go: `.NewBaseTask(0, "task", nil, nil, 0)`
$DIR/core/services/pipeline/task.mean_test.go: `.Run(testutils.Context(t), logger.TestLogger(t), vars, nil)`
$DIR/core/services/pipeline/task.mean_test.go: `.Context(t)`
$DIR/core/services/pipeline/task.mean_test.go: `.TestLogger(t)`
$DIR/core/services/pipeline/task.median_test.go: `t.Run(test.name, func(t *testing.T) {
t.Run("without vars", func(t *testing.T) {
task := pipeline.MedianTask{
BaseTask: pipeline.NewBaseTask(0, "task", nil, nil, 0),
AllowedFaults: test.allowedFaults,
}
output, runInfo := task.Run(testutils.Context(t), logger.TestLogger(t), pipeline.NewVarsFrom(nil), test.inputs)
assert.False(t, runInfo.IsPending)
assert.False(t, runInfo.IsRetryable)
if output.Error != nil {
require.Equal(t, test.want.Error, errors.Cause(output.Error))
require.Nil(t, output.Value)
} else {
require.Equal(t, test.want.Value.(*decimal.Decimal).String(), output.Value.(decimal.Decimal).String())
require.NoError(t, output.Error)
}
})
t.Run("with vars", func(t *testing.T) {
var inputs []interface{}
for _, input := range test.inputs {
if input.Error != nil {
inputs = append(inputs, input.Error)
} else {
inputs = append(inputs, input.Value)
}
}
vars := pipeline.NewVarsFrom(map[string]interface{}{
"foo": map[string]interface{}{"bar": inputs},
})
task := pipeline.MedianTask{
BaseTask: pipeline.NewBaseTask(0, "task", nil, nil, 0),
Values: "$(foo.bar)",
AllowedFaults: test.allowedFaults,
}
output, runInfo := task.Run(testutils.Context(t), logger.TestLogger(t), vars, nil)
assert.False(t, runInfo.IsPending)
assert.False(t, runInfo.IsRetryable)
if output.Error != nil {
require.Equal(t, test.want.Error, errors.Cause(output.Error))
require.Nil(t, output.Value)
} else {
require.Equal(t, test.want.Value.(*decimal.Decimal).String(), output.Value.(decimal.Decimal).String())
require.NoError(t, output.Error)
}
})
t.Run("with json vars", func(t *testing.T) {
var inputs []interface{}
for _, input := range test.inputs {
if input.Error != nil {
inputs = append(inputs, input.Error)
} else {
inputs = append(inputs, input.Value)
}
}
var valuesParam string
var vars pipeline.Vars
switch len(inputs) {
case 0:
valuesParam = "[]"
vars = pipeline.NewVarsFrom(nil)
case 1:
valuesParam = "[ $(foo) ]"
vars = pipeline.NewVarsFrom(map[string]interface{}{"foo": inputs[0]})
case 3:
valuesParam = "[ $(foo), $(bar), $(chain) ]"
vars = pipeline.NewVarsFrom(map[string]interface{}{"foo": inputs[0], "bar": inputs[1], "chain": inputs[2]})
case 4:
valuesParam = "[ $(foo), $(bar), $(chain), $(link) ]"
vars = pipeline.NewVarsFrom(map[string]interface{}{"foo": inputs[0], "bar": inputs[1], "chain": inputs[2], "link": inputs[3]})
}
task := pipeline.MedianTask{
BaseTask: pipeline.NewBaseTask(0, "task", nil, nil, 0),
Values: valuesParam,
AllowedFaults: test.allowedFaults,
}
output, runInfo := task.Run(testutils.Context(t), logger.TestLogger(t), vars, nil)
assert.False(t, runInfo.IsPending)
assert.False(t, runInfo.IsRetryable)
if output.Error != nil {
require.Equal(t, test.want.Error, errors.Cause(output.Error))
require.Nil(t, output.Value)
} else {
require.Equal(t, test.want.Value.(*decimal.Decimal).String(), output.Value.(decimal.Decimal).String())
require.NoError(t, output.Error)
}
})
})`
$DIR/core/services/pipeline/task.median_test.go: `t.Run("without vars", func(t *testing.T) {
task := pipeline.MedianTask{
BaseTask: pipeline.NewBaseTask(0, "task", nil, nil, 0),
AllowedFaults: test.allowedFaults,
}
output, runInfo := task.Run(testutils.Context(t), logger.TestLogger(t), pipeline.NewVarsFrom(nil), test.inputs)
assert.False(t, runInfo.IsPending)
assert.False(t, runInfo.IsRetryable)
if output.Error != nil {
require.Equal(t, test.want.Error, errors.Cause(output.Error))
require.Nil(t, output.Value)
} else {
require.Equal(t, test.want.Value.(*decimal.Decimal).String(), output.Value.(decimal.Decimal).String())
require.NoError(t, output.Error)
}
})`
$DIR/core/services/pipeline/task.median_test.go: `t.Run("with vars", func(t *testing.T) {
var inputs []interface{}
for _, input := range test.inputs {
if input.Error != nil {
inputs = append(inputs, input.Error)
} else {
inputs = append(inputs, input.Value)
}
}
vars := pipeline.NewVarsFrom(map[string]interface{}{
"foo": map[string]interface{}{"bar": inputs},
})
task := pipeline.MedianTask{
BaseTask: pipeline.NewBaseTask(0, "task", nil, nil, 0),
Values: "$(foo.bar)",
AllowedFaults: test.allowedFaults,
}
output, runInfo := task.Run(testutils.Context(t), logger.TestLogger(t), vars, nil)
assert.False(t, runInfo.IsPending)
assert.False(t, runInfo.IsRetryable)
if output.Error != nil {
require.Equal(t, test.want.Error, errors.Cause(output.Error))
require.Nil(t, output.Value)
} else {
require.Equal(t, test.want.Value.(*decimal.Decimal).String(), output.Value.(decimal.Decimal).String())
require.NoError(t, output.Error)
}
})`
$DIR/core/services/pipeline/task.median_test.go: `inputs = append(inputs, input.Error)`
$DIR/core/services/pipeline/task.median_test.go: `inputs = append(inputs, input.Value)`
$DIR/core/services/pipeline/task.median_test.go: `t.Run("with json vars", func(t *testing.T) {
var inputs []interface{}
for _, input := range test.inputs {
if input.Error != nil {
inputs = append(inputs, input.Error)
} else {
inputs = append(inputs, input.Value)
}
}
var valuesParam string
var vars pipeline.Vars
switch len(inputs) {
case 0:
valuesParam = "[]"
vars = pipeline.NewVarsFrom(nil)
case 1:
valuesParam = "[ $(foo) ]"
vars = pipeline.NewVarsFrom(map[string]interface{}{"foo": inputs[0]})
case 3:
valuesParam = "[ $(foo), $(bar), $(chain) ]"
vars = pipeline.NewVarsFrom(map[string]interface{}{"foo": inputs[0], "bar": inputs[1], "chain": inputs[2]})
case 4:
valuesParam = "[ $(foo), $(bar), $(chain), $(link) ]"
vars = pipeline.NewVarsFrom(map[string]interface{}{"foo": inputs[0], "bar": inputs[1], "chain": inputs[2], "link": inputs[3]})
}
task := pipeline.MedianTask{
BaseTask: pipeline.NewBaseTask(0, "task", nil, nil, 0),
Values: valuesParam,
AllowedFaults: test.allowedFaults,
}
output, runInfo := task.Run(testutils.Context(t), logger.TestLogger(t), vars, nil)
assert.False(t, runInfo.IsPending)
assert.False(t, runInfo.IsRetryable)
if output.Error != nil {
require.Equal(t, test.want.Error, errors.Cause(output.Error))
require.Nil(t, output.Value)
} else {
require.Equal(t, test.want.Value.(*decimal.Decimal).String(), output.Value.(decimal.Decimal).String())
require.NoError(t, output.Error)
}
})`
$DIR/core/services/pipeline/task.median_test.go: `inputs = append(inputs, input.Error)`
$DIR/core/services/pipeline/task.median_test.go: `inputs = append(inputs, input.Value)`
$DIR/core/services/pipeline/task.median_test.go: `valuesParam = "[]"`
$DIR/core/services/pipeline/task.median_test.go: `vars = pipeline.NewVarsFrom(nil)`
$DIR/core/services/pipeline/task.median_test.go: `valuesParam = "[ $(foo) ]"`
$DIR/core/services/pipeline/task.median_test.go: `vars = pipeline.NewVarsFrom(map[string]interface{}{"foo": inputs[0]})`
$DIR/core/services/pipeline/task.median_test.go: `valuesParam = "[ $(foo), $(bar), $(chain) ]"`
$DIR/core/services/pipeline/task.median_test.go: `vars = pipeline.NewVarsFrom(map[string]interface{}{"foo": inputs[0], "bar": inputs[1], "chain": inputs[2]})`
$DIR/core/services/pipeline/task.median_test.go: `valuesParam = "[ $(foo), $(bar), $(chain), $(link) ]"`
$DIR/core/services/pipeline/task.median_test.go: `vars = pipeline.NewVarsFrom(map[string]interface{}{"foo": inputs[0], "bar": inputs[1], "chain": inputs[2], "link": inputs[3]})`
$DIR/core/services/pipeline/task.median_test.go: `.New("")`
$DIR/core/services/pipeline/task.median_test.go: `.New("")`
$DIR/core/services/pipeline/task.median_test.go: `.New("")`
$DIR/core/services/pipeline/task.median_test.go: `.New("")`
$DIR/core/services/pipeline/task.median_test.go: `.New("")`
$DIR/core/services/pipeline/task.median_test.go: `.New("")`
$DIR/core/services/pipeline/task.median_test.go: `.New("")`
$DIR/core/services/pipeline/task.median_test.go: `.New("")`
$DIR/core/services/pipeline/task.median_test.go: `.New("")`
$DIR/core/services/pipeline/task.median_test.go: `.New("")`
$DIR/core/services/pipeline/task.median_test.go: `.New("")`
$DIR/core/services/pipeline/task.median_test.go: `.New("")`
$DIR/core/services/pipeline/task.median_test.go: `.New("")`
$DIR/core/services/pipeline/task.median_test.go: `.New("")`
$DIR/core/services/pipeline/task.median_test.go: `.Run(test.name, func(t *testing.T) {
t.Run("without vars", func(t *testing.T) {
task := pipeline.MedianTask{
BaseTask: pipeline.NewBaseTask(0, "task", nil, nil, 0),
AllowedFaults: test.allowedFaults,
}
output, runInfo := task.Run(testutils.Context(t), logger.TestLogger(t), pipeline.NewVarsFrom(nil), test.inputs)
assert.False(t, runInfo.IsPending)
assert.False(t, runInfo.IsRetryable)
if output.Error != nil {
require.Equal(t, test.want.Error, errors.Cause(output.Error))
require.Nil(t, output.Value)
} else {
require.Equal(t, test.want.Value.(*decimal.Decimal).String(), output.Value.(decimal.Decimal).String())
require.NoError(t, output.Error)
}
})
t.Run("with vars", func(t *testing.T) {
var inputs []interface{}
for _, input := range test.inputs {
if input.Error != nil {
inputs = append(inputs, input.Error)
} else {
inputs = append(inputs, input.Value)
}
}
vars := pipeline.NewVarsFrom(map[string]interface{}{
"foo": map[string]interface{}{"bar": inputs},
})
task := pipeline.MedianTask{
BaseTask: pipeline.NewBaseTask(0, "task", nil, nil, 0),
Values: "$(foo.bar)",
AllowedFaults: test.allowedFaults,
}
output, runInfo := task.Run(testutils.Context(t), logger.TestLogger(t), vars, nil)
assert.False(t, runInfo.IsPending)
assert.False(t, runInfo.IsRetryable)
if output.Error != nil {
require.Equal(t, test.want.Error, errors.Cause(output.Error))
require.Nil(t, output.Value)
} else {
require.Equal(t, test.want.Value.(*decimal.Decimal).String(), output.Value.(decimal.Decimal).String())
require.NoError(t, output.Error)
}
})
t.Run("with json vars", func(t *testing.T) {
var inputs []interface{}
for _, input := range test.inputs {
if input.Error != nil {
inputs = append(inputs, input.Error)
} else {
inputs = append(inputs, input.Value)
}
}
var valuesParam string
var vars pipeline.Vars
switch len(inputs) {
case 0:
valuesParam = "[]"
vars = pipeline.NewVarsFrom(nil)
case 1:
valuesParam = "[ $(foo) ]"
vars = pipeline.NewVarsFrom(map[string]interface{}{"foo": inputs[0]})
case 3:
valuesParam = "[ $(foo), $(bar), $(chain) ]"
vars = pipeline.NewVarsFrom(map[string]interface{}{"foo": inputs[0], "bar": inputs[1], "chain": inputs[2]})
case 4:
valuesParam = "[ $(foo), $(bar), $(chain), $(link) ]"
vars = pipeline.NewVarsFrom(map[string]interface{}{"foo": inputs[0], "bar": inputs[1], "chain": inputs[2], "link": inputs[3]})
}
task := pipeline.MedianTask{
BaseTask: pipeline.NewBaseTask(0, "task", nil, nil, 0),
Values: valuesParam,
AllowedFaults: test.allowedFaults,
}
output, runInfo := task.Run(testutils.Context(t), logger.TestLogger(t), vars, nil)
assert.False(t, runInfo.IsPending)
assert.False(t, runInfo.IsRetryable)
if output.Error != nil {
require.Equal(t, test.want.Error, errors.Cause(output.Error))
require.Nil(t, output.Value)
} else {
require.Equal(t, test.want.Value.(*decimal.Decimal).String(), output.Value.(decimal.Decimal).String())
require.NoError(t, output.Error)
}
})
})`
$DIR/core/services/pipeline/task.median_test.go: `.Run("without vars", func(t *testing.T) {
task := pipeline.MedianTask{
BaseTask: pipeline.NewBaseTask(0, "task", nil, nil, 0),
AllowedFaults: test.allowedFaults,
}
output, runInfo := task.Run(testutils.Context(t), logger.TestLogger(t), pipeline.NewVarsFrom(nil), test.inputs)
assert.False(t, runInfo.IsPending)
assert.False(t, runInfo.IsRetryable)
if output.Error != nil {
require.Equal(t, test.want.Error, errors.Cause(output.Error))
require.Nil(t, output.Value)
} else {
require.Equal(t, test.want.Value.(*decimal.Decimal).String(), output.Value.(decimal.Decimal).String())
require.NoError(t, output.Error)
}
})`
$DIR/core/services/pipeline/task.median_test.go: `.NewBaseTask(0, "task", nil, nil, 0)`
$DIR/core/services/pipeline/task.median_test.go: `.Run(testutils.Context(t), logger.TestLogger(t), pipeline.NewVarsFrom(nil), test.inputs)`
$DIR/core/services/pipeline/task.median_test.go: `.Context(t)`
$DIR/core/services/pipeline/task.median_test.go: `.TestLogger(t)`
$DIR/core/services/pipeline/task.median_test.go: `.NewVarsFrom(nil)`
$DIR/core/services/pipeline/task.median_test.go: `.Run("with vars", func(t *testing.T) {
var inputs []interface{}
for _, input := range test.inputs {
if input.Error != nil {
inputs = append(inputs, input.Error)
} else {
inputs = append(inputs, input.Value)
}
}
vars := pipeline.NewVarsFrom(map[string]interface{}{
"foo": map[string]interface{}{"bar": inputs},
})
task := pipeline.MedianTask{
BaseTask: pipeline.NewBaseTask(0, "task", nil, nil, 0),
Values: "$(foo.bar)",
AllowedFaults: test.allowedFaults,
}
output, runInfo := task.Run(testutils.Context(t), logger.TestLogger(t), vars, nil)
assert.False(t, runInfo.IsPending)
assert.False(t, runInfo.IsRetryable)
if output.Error != nil {
require.Equal(t, test.want.Error, errors.Cause(output.Error))
require.Nil(t, output.Value)
} else {
require.Equal(t, test.want.Value.(*decimal.Decimal).String(), output.Value.(decimal.Decimal).String())
require.NoError(t, output.Error)
}
})`
$DIR/core/services/pipeline/task.median_test.go: `.NewVarsFrom(map[string]interface{}{
"foo": map[string]interface{}{"bar": inputs},
})`
$DIR/core/services/pipeline/task.median_test.go: `.NewBaseTask(0, "task", nil, nil, 0)`
$DIR/core/services/pipeline/task.median_test.go: `.Run(testutils.Context(t), logger.TestLogger(t), vars, nil)`
$DIR/core/services/pipeline/task.median_test.go: `.Context(t)`
$DIR/core/services/pipeline/task.median_test.go: `.TestLogger(t)`
$DIR/core/services/pipeline/task.median_test.go: `.Run("with json vars", func(t *testing.T) {
var inputs []interface{}
for _, input := range test.inputs {
if input.Error != nil {
inputs = append(inputs, input.Error)
} else {
inputs = append(inputs, input.Value)
}
}
var valuesParam string
var vars pipeline.Vars
switch len(inputs) {
case 0:
valuesParam = "[]"
vars = pipeline.NewVarsFrom(nil)
case 1:
valuesParam = "[ $(foo) ]"
vars = pipeline.NewVarsFrom(map[string]interface{}{"foo": inputs[0]})
case 3:
valuesParam = "[ $(foo), $(bar), $(chain) ]"
vars = pipeline.NewVarsFrom(map[string]interface{}{"foo": inputs[0], "bar": inputs[1], "chain": inputs[2]})
case 4:
valuesParam = "[ $(foo), $(bar), $(chain), $(link) ]"
vars = pipeline.NewVarsFrom(map[string]interface{}{"foo": inputs[0], "bar": inputs[1], "chain": inputs[2], "link": inputs[3]})
}
task := pipeline.MedianTask{
BaseTask: pipeline.NewBaseTask(0, "task", nil, nil, 0),
Values: valuesParam,
AllowedFaults: test.allowedFaults,
}
output, runInfo := task.Run(testutils.Context(t), logger.TestLogger(t), vars, nil)
assert.False(t, runInfo.IsPending)
assert.False(t, runInfo.IsRetryable)
if output.Error != nil {
require.Equal(t, test.want.Error, errors.Cause(output.Error))
require.Nil(t, output.Value)
} else {
require.Equal(t, test.want.Value.(*decimal.Decimal).String(), output.Value.(decimal.Decimal).String())
require.NoError(t, output.Error)
}
})`
$DIR/core/services/pipeline/task.median_test.go: `.NewVarsFrom(nil)`
$DIR/core/services/pipeline/task.median_test.go: `.NewVarsFrom(map[string]interface{}{"foo": inputs[0]})`
$DIR/core/services/pipeline/task.median_test.go: `.NewVarsFrom(map[string]interface{}{"foo": inputs[0], "bar": inputs[1], "chain": inputs[2]})`
$DIR/core/services/pipeline/task.median_test.go: `.NewVarsFrom(map[string]interface{}{"foo": inputs[0], "bar": inputs[1], "chain": inputs[2], "link": inputs[3]})`
$DIR/core/services/pipeline/task.median_test.go: `.NewBaseTask(0, "task", nil, nil, 0)`
$DIR/core/services/pipeline/task.median_test.go: `.Run(testutils.Context(t), logger.TestLogger(t), vars, nil)`
$DIR/core/services/pipeline/task.median_test.go: `.Context(t)`
$DIR/core/services/pipeline/task.median_test.go: `.TestLogger(t)`
$DIR/core/services/pipeline/task.median_test.go: `.Parse(`
// data source 1
ds1 [type=bridge name=voter_turnout];
ds1_parse [type=jsonparse path="one,two"];
ds1_multiply [type=multiply times=1.23];
// data source 2
ds2 [type=http method=GET url="https://chain.link/voter_turnout/USA-2020" requestData=<{"hi": "hello"}>];
ds2_parse [type=jsonparse path="three,four"];
ds2_multiply [type=multiply times=4.56];
ds1 -> ds1_parse -> ds1_multiply -> answer1;
ds2 -> ds2_parse -> ds2_multiply -> answer1;
answer1 [type=median index=0 allowedFaults=10];
answer2 [type=bridge name=election_winner index=1];
`)`
$DIR/core/services/pipeline/task.median_test.go: `.Type()`
$DIR/core/services/pipeline/task.memo_test.go: `t.Run(test.name, func(t *testing.T) {
vars := pipeline.NewVarsFrom(nil)
var value pipeline.ObjectParam
err := value.UnmarshalPipelineParam(test.input)
require.NoError(t, err)
task := pipeline.MemoTask{BaseTask: pipeline.NewBaseTask(0, "task", nil, nil, 0)}
result, _ := task.Run(testutils.Context(t), logger.TestLogger(t), vars, []pipeline.Result{{Value: test.input}})
require.NoError(t, result.Error)
marshalledValue, err := result.Value.(pipeline.ObjectParam).Marshal()
require.NoError(t, err)
assert.Equal(t, test.output, marshalledValue)
})`
$DIR/core/services/pipeline/task.memo_test.go: `.Run(test.name, func(t *testing.T) {
vars := pipeline.NewVarsFrom(nil)
var value pipeline.ObjectParam
err := value.UnmarshalPipelineParam(test.input)
require.NoError(t, err)
task := pipeline.MemoTask{BaseTask: pipeline.NewBaseTask(0, "task", nil, nil, 0)}
result, _ := task.Run(testutils.Context(t), logger.TestLogger(t), vars, []pipeline.Result{{Value: test.input}})
require.NoError(t, result.Error)
marshalledValue, err := result.Value.(pipeline.ObjectParam).Marshal()
require.NoError(t, err)
assert.Equal(t, test.output, marshalledValue)
})`
$DIR/core/services/pipeline/task.memo_test.go: `.NewVarsFrom(nil)`
$DIR/core/services/pipeline/task.memo_test.go: `.UnmarshalPipelineParam(test.input)`
$DIR/core/services/pipeline/task.memo_test.go: `.NewBaseTask(0, "task", nil, nil, 0)`
$DIR/core/services/pipeline/task.memo_test.go: `.Run(testutils.Context(t), logger.TestLogger(t), vars, []pipeline.Result{{Value: test.input}})`
$DIR/core/services/pipeline/task.memo_test.go: `.Context(t)`
$DIR/core/services/pipeline/task.memo_test.go: `.TestLogger(t)`
$DIR/core/services/pipeline/task.memo_test.go: `.Marshal()`
$DIR/core/services/pipeline/task.merge_test.go: `t.Run(test.name, func(t *testing.T) {
task := pipeline.MergeTask{
BaseTask: pipeline.NewBaseTask(0, "merge", nil, nil, 0),
Left: test.left,
Right: test.right,
}
result, runInfo := task.Run(testutils.Context(t), logger.TestLogger(t), test.vars, test.inputs)
assert.False(t, runInfo.IsPending)
assert.False(t, runInfo.IsRetryable)
if test.wantError {
if test.wantErrorContains != "" {
require.Contains(t, result.Error.Error(), test.wantErrorContains)
}
require.Nil(t, result.Value)
val, err := test.vars.Get("merge")
require.Equal(t, pipeline.ErrKeypathNotFound, errors.Cause(err))
require.Nil(t, val)
} else {
assert.NoError(t, result.Error)
assert.Equal(t, test.wantData, result.Value)
}
})`
$DIR/core/services/pipeline/task.merge_test.go: `.NewVarsFrom(nil)`
$DIR/core/services/pipeline/task.merge_test.go: `.NewVarsFrom(nil)`
$DIR/core/services/pipeline/task.merge_test.go: `.NewVarsFrom(nil)`
$DIR/core/services/pipeline/task.merge_test.go: `.NewVarsFrom(nil)`
$DIR/core/services/pipeline/task.merge_test.go: `.NewVarsFrom(nil)`
$DIR/core/services/pipeline/task.merge_test.go: `.NewVarsFrom(map[string]interface{}{
"someInput": map[string]interface{}{
"foo": "baz",
"qux": 99,
"flibber": nil,
},
})`
$DIR/core/services/pipeline/task.merge_test.go: `.NewVarsFrom(map[string]interface{}{
"someInput": "this is a string",
})`
$DIR/core/services/pipeline/task.merge_test.go: `.NewVarsFrom(map[string]interface{}{
"someInput": "this is a string",
})`
$DIR/core/services/pipeline/task.merge_test.go: `.NewVarsFrom(map[string]interface{}{
"someInput": "this is a string",
})`
$DIR/core/services/pipeline/task.merge_test.go: `.Run(test.name, func(t *testing.T) {
task := pipeline.MergeTask{
BaseTask: pipeline.NewBaseTask(0, "merge", nil, nil, 0),
Left: test.left,
Right: test.right,
}
result, runInfo := task.Run(testutils.Context(t), logger.TestLogger(t), test.vars, test.inputs)
assert.False(t, runInfo.IsPending)
assert.False(t, runInfo.IsRetryable)
if test.wantError {
if test.wantErrorContains != "" {
require.Contains(t, result.Error.Error(), test.wantErrorContains)
}
require.Nil(t, result.Value)
val, err := test.vars.Get("merge")
require.Equal(t, pipeline.ErrKeypathNotFound, errors.Cause(err))
require.Nil(t, val)
} else {
assert.NoError(t, result.Error)
assert.Equal(t, test.wantData, result.Value)
}
})`
$DIR/core/services/pipeline/task.merge_test.go: `.NewBaseTask(0, "merge", nil, nil, 0)`
$DIR/core/services/pipeline/task.merge_test.go: `.Run(testutils.Context(t), logger.TestLogger(t), test.vars, test.inputs)`
$DIR/core/services/pipeline/task.merge_test.go: `.Context(t)`
$DIR/core/services/pipeline/task.merge_test.go: `.TestLogger(t)`
$DIR/core/services/pipeline/task.merge_test.go: `.vars.Get("merge")`
$DIR/core/services/pipeline/task.mode_test.go: `t.Run(test.name, func(t *testing.T) {
t.Run("without vars", func(t *testing.T) {
task := pipeline.ModeTask{
BaseTask: pipeline.NewBaseTask(0, "mode", nil, nil, 0),
AllowedFaults: test.allowedFaults,
}
output, runInfo := task.Run(testutils.Context(t), logger.TestLogger(t), pipeline.NewVarsFrom(nil), test.inputs)
assert.False(t, runInfo.IsPending)
assert.False(t, runInfo.IsRetryable)
if output.Error != nil {
require.Equal(t, test.wantErrorCause, errors.Cause(output.Error))
require.Nil(t, output.Value)
} else {
require.Equal(t, map[string]interface{}{
"results": test.wantResults,
"occurrences": test.wantOccurrences,
}, output.Value)
require.NoError(t, output.Error)
}
})
t.Run("with vars", func(t *testing.T) {
var inputs []interface{}
for _, input := range test.inputs {
if input.Error != nil {
inputs = append(inputs, input.Error)
} else {
inputs = append(inputs, input.Value)
}
}
vars := pipeline.NewVarsFrom(map[string]interface{}{
"foo": map[string]interface{}{"bar": inputs},
})
task := pipeline.ModeTask{
BaseTask: pipeline.NewBaseTask(0, "task", nil, nil, 0),
Values: "$(foo.bar)",
AllowedFaults: test.allowedFaults,
}
output, runInfo := task.Run(testutils.Context(t), logger.TestLogger(t), vars, nil)
assert.False(t, runInfo.IsPending)
assert.False(t, runInfo.IsRetryable)
if output.Error != nil {
require.Equal(t, test.wantErrorCause, errors.Cause(output.Error))
require.Nil(t, output.Value)
} else {
require.Equal(t, map[string]interface{}{
"results": test.wantResults,
"occurrences": test.wantOccurrences,
}, output.Value)
require.NoError(t, output.Error)
}
})
t.Run("with json vars", func(t *testing.T) {
var inputs []interface{}
for _, input := range test.inputs {
if input.Error != nil {
inputs = append(inputs, input.Error)
} else {
inputs = append(inputs, input.Value)
}
}
var valuesParam string
var vars pipeline.Vars
switch len(inputs) {
case 0:
valuesParam = "[]"
vars = pipeline.NewVarsFrom(nil)
case 1:
valuesParam = "[ $(foo) ]"
vars = pipeline.NewVarsFrom(map[string]interface{}{"foo": inputs[0]})
case 3:
valuesParam = "[ $(foo), $(bar), $(chain) ]"
vars = pipeline.NewVarsFrom(map[string]interface{}{"foo": inputs[0], "bar": inputs[1], "chain": inputs[2]})
case 4:
valuesParam = "[ $(foo), $(bar), $(chain), $(link) ]"
vars = pipeline.NewVarsFrom(map[string]interface{}{"foo": inputs[0], "bar": inputs[1], "chain": inputs[2], "link": inputs[3]})
}
task := pipeline.ModeTask{
BaseTask: pipeline.NewBaseTask(0, "task", nil, nil, 0),
Values: valuesParam,
AllowedFaults: test.allowedFaults,
}
output, runInfo := task.Run(testutils.Context(t), logger.TestLogger(t), vars, nil)
assert.False(t, runInfo.IsPending)
assert.False(t, runInfo.IsRetryable)
if output.Error != nil {
require.Equal(t, test.wantErrorCause, errors.Cause(output.Error))
require.Nil(t, output.Value)
} else {
require.Equal(t, map[string]interface{}{
"results": test.wantResults,
"occurrences": test.wantOccurrences,
}, output.Value)
require.NoError(t, output.Error)
}
})
})`
$DIR/core/services/pipeline/task.mode_test.go: `t.Run("without vars", func(t *testing.T) {
task := pipeline.ModeTask{
BaseTask: pipeline.NewBaseTask(0, "mode", nil, nil, 0),
AllowedFaults: test.allowedFaults,
}
output, runInfo := task.Run(testutils.Context(t), logger.TestLogger(t), pipeline.NewVarsFrom(nil), test.inputs)
assert.False(t, runInfo.IsPending)
assert.False(t, runInfo.IsRetryable)
if output.Error != nil {
require.Equal(t, test.wantErrorCause, errors.Cause(output.Error))
require.Nil(t, output.Value)
} else {
require.Equal(t, map[string]interface{}{
"results": test.wantResults,
"occurrences": test.wantOccurrences,
}, output.Value)
require.NoError(t, output.Error)
}
})`
$DIR/core/services/pipeline/task.mode_test.go: `t.Run("with vars", func(t *testing.T) {
var inputs []interface{}
for _, input := range test.inputs {
if input.Error != nil {
inputs = append(inputs, input.Error)
} else {
inputs = append(inputs, input.Value)
}
}
vars := pipeline.NewVarsFrom(map[string]interface{}{
"foo": map[string]interface{}{"bar": inputs},
})
task := pipeline.ModeTask{
BaseTask: pipeline.NewBaseTask(0, "task", nil, nil, 0),
Values: "$(foo.bar)",
AllowedFaults: test.allowedFaults,
}
output, runInfo := task.Run(testutils.Context(t), logger.TestLogger(t), vars, nil)
assert.False(t, runInfo.IsPending)
assert.False(t, runInfo.IsRetryable)
if output.Error != nil {
require.Equal(t, test.wantErrorCause, errors.Cause(output.Error))
require.Nil(t, output.Value)
} else {
require.Equal(t, map[string]interface{}{
"results": test.wantResults,
"occurrences": test.wantOccurrences,
}, output.Value)
require.NoError(t, output.Error)
}
})`
$DIR/core/services/pipeline/task.mode_test.go: `inputs = append(inputs, input.Error)`
$DIR/core/services/pipeline/task.mode_test.go: `inputs = append(inputs, input.Value)`
$DIR/core/services/pipeline/task.mode_test.go: `t.Run("with json vars", func(t *testing.T) {
var inputs []interface{}
for _, input := range test.inputs {
if input.Error != nil {
inputs = append(inputs, input.Error)
} else {
inputs = append(inputs, input.Value)
}
}
var valuesParam string
var vars pipeline.Vars
switch len(inputs) {
case 0:
valuesParam = "[]"
vars = pipeline.NewVarsFrom(nil)
case 1:
valuesParam = "[ $(foo) ]"
vars = pipeline.NewVarsFrom(map[string]interface{}{"foo": inputs[0]})
case 3:
valuesParam = "[ $(foo), $(bar), $(chain) ]"
vars = pipeline.NewVarsFrom(map[string]interface{}{"foo": inputs[0], "bar": inputs[1], "chain": inputs[2]})
case 4:
valuesParam = "[ $(foo), $(bar), $(chain), $(link) ]"
vars = pipeline.NewVarsFrom(map[string]interface{}{"foo": inputs[0], "bar": inputs[1], "chain": inputs[2], "link": inputs[3]})
}
task := pipeline.ModeTask{
BaseTask: pipeline.NewBaseTask(0, "task", nil, nil, 0),
Values: valuesParam,
AllowedFaults: test.allowedFaults,
}
output, runInfo := task.Run(testutils.Context(t), logger.TestLogger(t), vars, nil)
assert.False(t, runInfo.IsPending)
assert.False(t, runInfo.IsRetryable)
if output.Error != nil {
require.Equal(t, test.wantErrorCause, errors.Cause(output.Error))
require.Nil(t, output.Value)
} else {
require.Equal(t, map[string]interface{}{
"results": test.wantResults,
"occurrences": test.wantOccurrences,
}, output.Value)
require.NoError(t, output.Error)
}
})`
$DIR/core/services/pipeline/task.mode_test.go: `inputs = append(inputs, input.Error)`
$DIR/core/services/pipeline/task.mode_test.go: `inputs = append(inputs, input.Value)`
$DIR/core/services/pipeline/task.mode_test.go: `valuesParam = "[]"`
$DIR/core/services/pipeline/task.mode_test.go: `vars = pipeline.NewVarsFrom(nil)`
$DIR/core/services/pipeline/task.mode_test.go: `valuesParam = "[ $(foo) ]"`
$DIR/core/services/pipeline/task.mode_test.go: `vars = pipeline.NewVarsFrom(map[string]interface{}{"foo": inputs[0]})`
$DIR/core/services/pipeline/task.mode_test.go: `valuesParam = "[ $(foo), $(bar), $(chain) ]"`
$DIR/core/services/pipeline/task.mode_test.go: `vars = pipeline.NewVarsFrom(map[string]interface{}{"foo": inputs[0], "bar": inputs[1], "chain": inputs[2]})`
$DIR/core/services/pipeline/task.mode_test.go: `valuesParam = "[ $(foo), $(bar), $(chain), $(link) ]"`
$DIR/core/services/pipeline/task.mode_test.go: `vars = pipeline.NewVarsFrom(map[string]interface{}{"foo": inputs[0], "bar": inputs[1], "chain": inputs[2], "link": inputs[3]})`
$DIR/core/services/pipeline/task.mode_test.go: `.New("")`
$DIR/core/services/pipeline/task.mode_test.go: `.New("")`
$DIR/core/services/pipeline/task.mode_test.go: `.New("")`
$DIR/core/services/pipeline/task.mode_test.go: `.New("")`
$DIR/core/services/pipeline/task.mode_test.go: `.New("")`
$DIR/core/services/pipeline/task.mode_test.go: `.New("")`
$DIR/core/services/pipeline/task.mode_test.go: `.New("")`
$DIR/core/services/pipeline/task.mode_test.go: `.New("")`
$DIR/core/services/pipeline/task.mode_test.go: `.NewInt(123)`
$DIR/core/services/pipeline/task.mode_test.go: `.NewInt(123)`
$DIR/core/services/pipeline/task.mode_test.go: `.NewInt(123)`
$DIR/core/services/pipeline/task.mode_test.go: `.New("")`
$DIR/core/services/pipeline/task.mode_test.go: `.New("")`
$DIR/core/services/pipeline/task.mode_test.go: `.New("")`
$DIR/core/services/pipeline/task.mode_test.go: `.New("")`
$DIR/core/services/pipeline/task.mode_test.go: `.New("")`
$DIR/core/services/pipeline/task.mode_test.go: `.New("")`
$DIR/core/services/pipeline/task.mode_test.go: `.Run(test.name, func(t *testing.T) {
t.Run("without vars", func(t *testing.T) {
task := pipeline.ModeTask{
BaseTask: pipeline.NewBaseTask(0, "mode", nil, nil, 0),
AllowedFaults: test.allowedFaults,
}
output, runInfo := task.Run(testutils.Context(t), logger.TestLogger(t), pipeline.NewVarsFrom(nil), test.inputs)
assert.False(t, runInfo.IsPending)
assert.False(t, runInfo.IsRetryable)
if output.Error != nil {
require.Equal(t, test.wantErrorCause, errors.Cause(output.Error))
require.Nil(t, output.Value)
} else {
require.Equal(t, map[string]interface{}{
"results": test.wantResults,
"occurrences": test.wantOccurrences,
}, output.Value)
require.NoError(t, output.Error)
}
})
t.Run("with vars", func(t *testing.T) {
var inputs []interface{}
for _, input := range test.inputs {
if input.Error != nil {
inputs = append(inputs, input.Error)
} else {
inputs = append(inputs, input.Value)
}
}
vars := pipeline.NewVarsFrom(map[string]interface{}{
"foo": map[string]interface{}{"bar": inputs},
})
task := pipeline.ModeTask{
BaseTask: pipeline.NewBaseTask(0, "task", nil, nil, 0),
Values: "$(foo.bar)",
AllowedFaults: test.allowedFaults,
}
output, runInfo := task.Run(testutils.Context(t), logger.TestLogger(t), vars, nil)
assert.False(t, runInfo.IsPending)
assert.False(t, runInfo.IsRetryable)
if output.Error != nil {
require.Equal(t, test.wantErrorCause, errors.Cause(output.Error))
require.Nil(t, output.Value)
} else {
require.Equal(t, map[string]interface{}{
"results": test.wantResults,
"occurrences": test.wantOccurrences,
}, output.Value)
require.NoError(t, output.Error)
}
})
t.Run("with json vars", func(t *testing.T) {
var inputs []interface{}
for _, input := range test.inputs {
if input.Error != nil {
inputs = append(inputs, input.Error)
} else {
inputs = append(inputs, input.Value)
}
}
var valuesParam string
var vars pipeline.Vars
switch len(inputs) {
case 0:
valuesParam = "[]"
vars = pipeline.NewVarsFrom(nil)
case 1:
valuesParam = "[ $(foo) ]"
vars = pipeline.NewVarsFrom(map[string]interface{}{"foo": inputs[0]})
case 3:
valuesParam = "[ $(foo), $(bar), $(chain) ]"
vars = pipeline.NewVarsFrom(map[string]interface{}{"foo": inputs[0], "bar": inputs[1], "chain": inputs[2]})
case 4:
valuesParam = "[ $(foo), $(bar), $(chain), $(link) ]"
vars = pipeline.NewVarsFrom(map[string]interface{}{"foo": inputs[0], "bar": inputs[1], "chain": inputs[2], "link": inputs[3]})
}
task := pipeline.ModeTask{
BaseTask: pipeline.NewBaseTask(0, "task", nil, nil, 0),
Values: valuesParam,
AllowedFaults: test.allowedFaults,
}
output, runInfo := task.Run(testutils.Context(t), logger.TestLogger(t), vars, nil)
assert.False(t, runInfo.IsPending)
assert.False(t, runInfo.IsRetryable)
if output.Error != nil {
require.Equal(t, test.wantErrorCause, errors.Cause(output.Error))
require.Nil(t, output.Value)
} else {
require.Equal(t, map[string]interface{}{
"results": test.wantResults,
"occurrences": test.wantOccurrences,
}, output.Value)
require.NoError(t, output.Error)
}
})
})`
$DIR/core/services/pipeline/task.mode_test.go: `.Run("without vars", func(t *testing.T) {
task := pipeline.ModeTask{
BaseTask: pipeline.NewBaseTask(0, "mode", nil, nil, 0),
AllowedFaults: test.allowedFaults,
}
output, runInfo := task.Run(testutils.Context(t), logger.TestLogger(t), pipeline.NewVarsFrom(nil), test.inputs)
assert.False(t, runInfo.IsPending)
assert.False(t, runInfo.IsRetryable)
if output.Error != nil {
require.Equal(t, test.wantErrorCause, errors.Cause(output.Error))
require.Nil(t, output.Value)
} else {
require.Equal(t, map[string]interface{}{
"results": test.wantResults,
"occurrences": test.wantOccurrences,
}, output.Value)
require.NoError(t, output.Error)
}
})`
$DIR/core/services/pipeline/task.mode_test.go: `.NewBaseTask(0, "mode", nil, nil, 0)`
$DIR/core/services/pipeline/task.mode_test.go: `.Run(testutils.Context(t), logger.TestLogger(t), pipeline.NewVarsFrom(nil), test.inputs)`
$DIR/core/services/pipeline/task.mode_test.go: `.Context(t)`
$DIR/core/services/pipeline/task.mode_test.go: `.TestLogger(t)`
$DIR/core/services/pipeline/task.mode_test.go: `.NewVarsFrom(nil)`
$DIR/core/services/pipeline/task.mode_test.go: `.Run("with vars", func(t *testing.T) {
var inputs []interface{}
for _, input := range test.inputs {
if input.Error != nil {
inputs = append(inputs, input.Error)
} else {
inputs = append(inputs, input.Value)
}
}
vars := pipeline.NewVarsFrom(map[string]interface{}{
"foo": map[string]interface{}{"bar": inputs},
})
task := pipeline.ModeTask{
BaseTask: pipeline.NewBaseTask(0, "task", nil, nil, 0),
Values: "$(foo.bar)",
AllowedFaults: test.allowedFaults,
}
output, runInfo := task.Run(testutils.Context(t), logger.TestLogger(t), vars, nil)
assert.False(t, runInfo.IsPending)
assert.False(t, runInfo.IsRetryable)
if output.Error != nil {
require.Equal(t, test.wantErrorCause, errors.Cause(output.Error))
require.Nil(t, output.Value)
} else {
require.Equal(t, map[string]interface{}{
"results": test.wantResults,
"occurrences": test.wantOccurrences,
}, output.Value)
require.NoError(t, output.Error)
}
})`
$DIR/core/services/pipeline/task.mode_test.go: `.NewVarsFrom(map[string]interface{}{
"foo": map[string]interface{}{"bar": inputs},
})`
$DIR/core/services/pipeline/task.mode_test.go: `.NewBaseTask(0, "task", nil, nil, 0)`
$DIR/core/services/pipeline/task.mode_test.go: `.Run(testutils.Context(t), logger.TestLogger(t), vars, nil)`
$DIR/core/services/pipeline/task.mode_test.go: `.Context(t)`
$DIR/core/services/pipeline/task.mode_test.go: `.TestLogger(t)`
$DIR/core/services/pipeline/task.mode_test.go: `.Run("with json vars", func(t *testing.T) {
var inputs []interface{}
for _, input := range test.inputs {
if input.Error != nil {
inputs = append(inputs, input.Error)
} else {
inputs = append(inputs, input.Value)
}
}
var valuesParam string
var vars pipeline.Vars
switch len(inputs) {
case 0:
valuesParam = "[]"
vars = pipeline.NewVarsFrom(nil)
case 1:
valuesParam = "[ $(foo) ]"
vars = pipeline.NewVarsFrom(map[string]interface{}{"foo": inputs[0]})
case 3:
valuesParam = "[ $(foo), $(bar), $(chain) ]"
vars = pipeline.NewVarsFrom(map[string]interface{}{"foo": inputs[0], "bar": inputs[1], "chain": inputs[2]})
case 4:
valuesParam = "[ $(foo), $(bar), $(chain), $(link) ]"
vars = pipeline.NewVarsFrom(map[string]interface{}{"foo": inputs[0], "bar": inputs[1], "chain": inputs[2], "link": inputs[3]})
}
task := pipeline.ModeTask{
BaseTask: pipeline.NewBaseTask(0, "task", nil, nil, 0),
Values: valuesParam,
AllowedFaults: test.allowedFaults,
}
output, runInfo := task.Run(testutils.Context(t), logger.TestLogger(t), vars, nil)
assert.False(t, runInfo.IsPending)
assert.False(t, runInfo.IsRetryable)
if output.Error != nil {
require.Equal(t, test.wantErrorCause, errors.Cause(output.Error))
require.Nil(t, output.Value)
} else {
require.Equal(t, map[string]interface{}{
"results": test.wantResults,
"occurrences": test.wantOccurrences,
}, output.Value)
require.NoError(t, output.Error)
}
})`
$DIR/core/services/pipeline/task.mode_test.go: `.NewVarsFrom(nil)`
$DIR/core/services/pipeline/task.mode_test.go: `.NewVarsFrom(map[string]interface{}{"foo": inputs[0]})`
$DIR/core/services/pipeline/task.mode_test.go: `.NewVarsFrom(map[string]interface{}{"foo": inputs[0], "bar": inputs[1], "chain": inputs[2]})`
$DIR/core/services/pipeline/task.mode_test.go: `.NewVarsFrom(map[string]interface{}{"foo": inputs[0], "bar": inputs[1], "chain": inputs[2], "link": inputs[3]})`
$DIR/core/services/pipeline/task.mode_test.go: `.NewBaseTask(0, "task", nil, nil, 0)`
$DIR/core/services/pipeline/task.mode_test.go: `.Run(testutils.Context(t), logger.TestLogger(t), vars, nil)`
$DIR/core/services/pipeline/task.mode_test.go: `.Context(t)`
$DIR/core/services/pipeline/task.mode_test.go: `.TestLogger(t)`
$DIR/core/services/pipeline/task.multiply_test.go: `t.Run(test.name, func(t *testing.T) {
t.Run("without vars through job DAG", func(t *testing.T) {
vars := pipeline.NewVarsFrom(nil)
task := pipeline.MultiplyTask{BaseTask: pipeline.NewBaseTask(0, "task", nil, nil, 0), Times: test.times}
assertOK(task.Run(testutils.Context(t), logger.TestLogger(t), vars, []pipeline.Result{{Value: test.input}}))
})
t.Run("without vars through input param", func(t *testing.T) {
vars := pipeline.NewVarsFrom(nil)
task := pipeline.MultiplyTask{
BaseTask: pipeline.NewBaseTask(0, "task", nil, nil, 0),
Input: fmt.Sprintf("%v", test.input),
Times: test.times,
}
assertOK(task.Run(testutils.Context(t), logger.TestLogger(t), vars, []pipeline.Result{}))
})
t.Run("with vars", func(t *testing.T) {
vars := pipeline.NewVarsFrom(map[string]interface{}{
"foo": map[string]interface{}{"bar": test.input},
"chain": map[string]interface{}{"link": test.times},
})
task := pipeline.MultiplyTask{
BaseTask: pipeline.NewBaseTask(0, "task", nil, nil, 0),
Input: "$(foo.bar)",
Times: "$(chain.link)",
}
assertOK(task.Run(testutils.Context(t), logger.TestLogger(t), vars, []pipeline.Result{}))
})
})`
$DIR/core/services/pipeline/task.multiply_test.go: `t.Run("without vars through job DAG", func(t *testing.T) {
vars := pipeline.NewVarsFrom(nil)
task := pipeline.MultiplyTask{BaseTask: pipeline.NewBaseTask(0, "task", nil, nil, 0), Times: test.times}
assertOK(task.Run(testutils.Context(t), logger.TestLogger(t), vars, []pipeline.Result{{Value: test.input}}))
})`
$DIR/core/services/pipeline/task.multiply_test.go: `assertOK(task.Run(testutils.Context(t), logger.TestLogger(t), vars, []pipeline.Result{{Value: test.input}}))`
$DIR/core/services/pipeline/task.multiply_test.go: `t.Run("without vars through input param", func(t *testing.T) {
vars := pipeline.NewVarsFrom(nil)
task := pipeline.MultiplyTask{
BaseTask: pipeline.NewBaseTask(0, "task", nil, nil, 0),
Input: fmt.Sprintf("%v", test.input),
Times: test.times,
}
assertOK(task.Run(testutils.Context(t), logger.TestLogger(t), vars, []pipeline.Result{}))
})`
$DIR/core/services/pipeline/task.multiply_test.go: `assertOK(task.Run(testutils.Context(t), logger.TestLogger(t), vars, []pipeline.Result{}))`
$DIR/core/services/pipeline/task.multiply_test.go: `t.Run("with vars", func(t *testing.T) {
vars := pipeline.NewVarsFrom(map[string]interface{}{
"foo": map[string]interface{}{"bar": test.input},
"chain": map[string]interface{}{"link": test.times},
})
task := pipeline.MultiplyTask{
BaseTask: pipeline.NewBaseTask(0, "task", nil, nil, 0),
Input: "$(foo.bar)",
Times: "$(chain.link)",
}
assertOK(task.Run(testutils.Context(t), logger.TestLogger(t), vars, []pipeline.Result{}))
})`
$DIR/core/services/pipeline/task.multiply_test.go: `assertOK(task.Run(testutils.Context(t), logger.TestLogger(t), vars, []pipeline.Result{}))`
$DIR/core/services/pipeline/task.multiply_test.go: `t.Run(test.name, func(t *testing.T) {
task := pipeline.MultiplyTask{
BaseTask: pipeline.NewBaseTask(0, "task", nil, nil, 0),
Input: test.input,
Times: test.times,
}
result, runInfo := task.Run(testutils.Context(t), logger.TestLogger(t), test.vars, test.inputs)
assert.False(t, runInfo.IsPending)
assert.False(t, runInfo.IsRetryable)
require.Equal(t, test.wantErrorCause, errors.Cause(result.Error))
if test.wantErrorContains != "" {
require.Contains(t, result.Error.Error(), test.wantErrorContains)
}
})`
$DIR/core/services/pipeline/task.multiply_test.go: `.Run(test.name, func(t *testing.T) {
t.Run("without vars through job DAG", func(t *testing.T) {
vars := pipeline.NewVarsFrom(nil)
task := pipeline.MultiplyTask{BaseTask: pipeline.NewBaseTask(0, "task", nil, nil, 0), Times: test.times}
assertOK(task.Run(testutils.Context(t), logger.TestLogger(t), vars, []pipeline.Result{{Value: test.input}}))
})
t.Run("without vars through input param", func(t *testing.T) {
vars := pipeline.NewVarsFrom(nil)
task := pipeline.MultiplyTask{
BaseTask: pipeline.NewBaseTask(0, "task", nil, nil, 0),
Input: fmt.Sprintf("%v", test.input),
Times: test.times,
}
assertOK(task.Run(testutils.Context(t), logger.TestLogger(t), vars, []pipeline.Result{}))
})
t.Run("with vars", func(t *testing.T) {
vars := pipeline.NewVarsFrom(map[string]interface{}{
"foo": map[string]interface{}{"bar": test.input},
"chain": map[string]interface{}{"link": test.times},
})
task := pipeline.MultiplyTask{
BaseTask: pipeline.NewBaseTask(0, "task", nil, nil, 0),
Input: "$(foo.bar)",
Times: "$(chain.link)",
}
assertOK(task.Run(testutils.Context(t), logger.TestLogger(t), vars, []pipeline.Result{}))
})
})`
$DIR/core/services/pipeline/task.multiply_test.go: `.Run("without vars through job DAG", func(t *testing.T) {
vars := pipeline.NewVarsFrom(nil)
task := pipeline.MultiplyTask{BaseTask: pipeline.NewBaseTask(0, "task", nil, nil, 0), Times: test.times}
assertOK(task.Run(testutils.Context(t), logger.TestLogger(t), vars, []pipeline.Result{{Value: test.input}}))
})`
$DIR/core/services/pipeline/task.multiply_test.go: `.NewVarsFrom(nil)`
$DIR/core/services/pipeline/task.multiply_test.go: `.NewBaseTask(0, "task", nil, nil, 0)`
$DIR/core/services/pipeline/task.multiply_test.go: `.Run(testutils.Context(t), logger.TestLogger(t), vars, []pipeline.Result{{Value: test.input}})`
$DIR/core/services/pipeline/task.multiply_test.go: `.Context(t)`
$DIR/core/services/pipeline/task.multiply_test.go: `.TestLogger(t)`
$DIR/core/services/pipeline/task.multiply_test.go: `.Run("without vars through input param", func(t *testing.T) {
vars := pipeline.NewVarsFrom(nil)
task := pipeline.MultiplyTask{
BaseTask: pipeline.NewBaseTask(0, "task", nil, nil, 0),
Input: fmt.Sprintf("%v", test.input),
Times: test.times,
}
assertOK(task.Run(testutils.Context(t), logger.TestLogger(t), vars, []pipeline.Result{}))
})`
$DIR/core/services/pipeline/task.multiply_test.go: `.NewVarsFrom(nil)`
$DIR/core/services/pipeline/task.multiply_test.go: `.NewBaseTask(0, "task", nil, nil, 0)`
$DIR/core/services/pipeline/task.multiply_test.go: `.Sprintf("%v", test.input)`
$DIR/core/services/pipeline/task.multiply_test.go: `.Run(testutils.Context(t), logger.TestLogger(t), vars, []pipeline.Result{})`
$DIR/core/services/pipeline/task.multiply_test.go: `.Context(t)`
$DIR/core/services/pipeline/task.multiply_test.go: `.TestLogger(t)`
$DIR/core/services/pipeline/task.multiply_test.go: `.Run("with vars", func(t *testing.T) {
vars := pipeline.NewVarsFrom(map[string]interface{}{
"foo": map[string]interface{}{"bar": test.input},
"chain": map[string]interface{}{"link": test.times},
})
task := pipeline.MultiplyTask{
BaseTask: pipeline.NewBaseTask(0, "task", nil, nil, 0),
Input: "$(foo.bar)",
Times: "$(chain.link)",
}
assertOK(task.Run(testutils.Context(t), logger.TestLogger(t), vars, []pipeline.Result{}))
})`
$DIR/core/services/pipeline/task.multiply_test.go: `.NewVarsFrom(map[string]interface{}{
"foo": map[string]interface{}{"bar": test.input},
"chain": map[string]interface{}{"link": test.times},
})`
$DIR/core/services/pipeline/task.multiply_test.go: `.NewBaseTask(0, "task", nil, nil, 0)`
$DIR/core/services/pipeline/task.multiply_test.go: `.Run(testutils.Context(t), logger.TestLogger(t), vars, []pipeline.Result{})`
$DIR/core/services/pipeline/task.multiply_test.go: `.Context(t)`
$DIR/core/services/pipeline/task.multiply_test.go: `.TestLogger(t)`
$DIR/core/services/pipeline/task.multiply_test.go: `.NewVarsFrom(nil)`
$DIR/core/services/pipeline/task.multiply_test.go: `.NewVarsFrom(map[string]interface{}{"foo": map[string]interface{}{"chain": "link"}})`
$DIR/core/services/pipeline/task.multiply_test.go: `.NewVarsFrom(nil)`
$DIR/core/services/pipeline/task.multiply_test.go: `.NewVarsFrom(map[string]interface{}{"foo": []interface{}{"chain", "link"}})`
$DIR/core/services/pipeline/task.multiply_test.go: `.NewVarsFrom(nil)`
$DIR/core/services/pipeline/task.multiply_test.go: `.NewVarsFrom(nil)`
$DIR/core/services/pipeline/task.multiply_test.go: `.Run(test.name, func(t *testing.T) {
task := pipeline.MultiplyTask{
BaseTask: pipeline.NewBaseTask(0, "task", nil, nil, 0),
Input: test.input,
Times: test.times,
}
result, runInfo := task.Run(testutils.Context(t), logger.TestLogger(t), test.vars, test.inputs)
assert.False(t, runInfo.IsPending)
assert.False(t, runInfo.IsRetryable)
require.Equal(t, test.wantErrorCause, errors.Cause(result.Error))
if test.wantErrorContains != "" {
require.Contains(t, result.Error.Error(), test.wantErrorContains)
}
})`
$DIR/core/services/pipeline/task.multiply_test.go: `.NewBaseTask(0, "task", nil, nil, 0)`
$DIR/core/services/pipeline/task.multiply_test.go: `.Run(testutils.Context(t), logger.TestLogger(t), test.vars, test.inputs)`
$DIR/core/services/pipeline/task.multiply_test.go: `.Context(t)`
$DIR/core/services/pipeline/task.multiply_test.go: `.TestLogger(t)`
$DIR/core/services/pipeline/task.multiply_test.go: `.NewFromString("6.34e-1147483647")`
$DIR/core/services/pipeline/task.multiply_test.go: `.NewFromString("6.34e-1147483647")`
$DIR/core/services/pipeline/task.multiply_test.go: `.NewBaseTask(0, "task", nil, nil, 0)`
$DIR/core/services/pipeline/task.multiply_test.go: `.NewVarsFrom(map[string]interface{}{
"a": d1,
"b": d2,
})`
$DIR/core/services/pipeline/task.multiply_test.go: `.Run(testutils.Context(t), logger.TestLogger(t), vars, []pipeline.Result{{Value: "123"}})`
$DIR/core/services/pipeline/task.multiply_test.go: `.Context(t)`
$DIR/core/services/pipeline/task.multiply_test.go: `.TestLogger(t)`
$DIR/core/services/pipeline/task.multiply_test.go: `.Cause(result.Error)`
$DIR/core/services/pipeline/task.sum_test.go: `t.Run(test.name, func(t *testing.T) {
t.Run("without vars", func(t *testing.T) {
task := pipeline.SumTask{
BaseTask: pipeline.NewBaseTask(0, "task", nil, nil, 0),
AllowedFaults: test.allowedFaults,
}
output, runInfo := task.Run(testutils.Context(t), logger.TestLogger(t), pipeline.NewVarsFrom(nil), test.inputs)
assert.False(t, runInfo.IsPending)
assert.False(t, runInfo.IsRetryable)
if output.Error != nil {
require.Equal(t, test.want.Error, errors.Cause(output.Error))
require.Nil(t, output.Value)
} else {
require.Equal(t, test.want.Value.(*decimal.Decimal).String(), output.Value.(decimal.Decimal).String())
require.NoError(t, output.Error)
}
})
t.Run("with vars", func(t *testing.T) {
var inputs []interface{}
for _, input := range test.inputs {
if input.Error != nil {
inputs = append(inputs, input.Error)
} else {
inputs = append(inputs, input.Value)
}
}
vars := pipeline.NewVarsFrom(map[string]interface{}{
"foo": map[string]interface{}{"bar": inputs},
})
task := pipeline.SumTask{
BaseTask: pipeline.NewBaseTask(0, "task", nil, nil, 0),
Values: "$(foo.bar)",
AllowedFaults: test.allowedFaults,
}
output, runInfo := task.Run(testutils.Context(t), logger.TestLogger(t), vars, nil)
assert.False(t, runInfo.IsPending)
assert.False(t, runInfo.IsRetryable)
if output.Error != nil {
require.Equal(t, test.want.Error, errors.Cause(output.Error))
require.Nil(t, output.Value)
} else {
require.Equal(t, test.want.Value.(*decimal.Decimal).String(), output.Value.(decimal.Decimal).String())
require.NoError(t, output.Error)
}
})
t.Run("with json vars", func(t *testing.T) {
var inputs []interface{}
for _, input := range test.inputs {
if input.Error != nil {
inputs = append(inputs, input.Error)
} else {
inputs = append(inputs, input.Value)
}
}
var valuesParam string
var vars pipeline.Vars
switch len(inputs) {
case 0:
valuesParam = "[]"
vars = pipeline.NewVarsFrom(nil)
case 1:
valuesParam = "[ $(foo) ]"
vars = pipeline.NewVarsFrom(map[string]interface{}{"foo": inputs[0]})
case 3:
valuesParam = "[ $(foo), $(bar), $(chain) ]"
vars = pipeline.NewVarsFrom(map[string]interface{}{"foo": inputs[0], "bar": inputs[1], "chain": inputs[2]})
case 4:
valuesParam = "[ $(foo), $(bar), $(chain), $(link) ]"
vars = pipeline.NewVarsFrom(map[string]interface{}{"foo": inputs[0], "bar": inputs[1], "chain": inputs[2], "link": inputs[3]})
}
task := pipeline.SumTask{
BaseTask: pipeline.NewBaseTask(0, "task", nil, nil, 0),
Values: valuesParam,
AllowedFaults: test.allowedFaults,
}
output, runInfo := task.Run(testutils.Context(t), logger.TestLogger(t), vars, nil)
assert.False(t, runInfo.IsPending)
assert.False(t, runInfo.IsRetryable)
if output.Error != nil {
require.Equal(t, test.want.Error, errors.Cause(output.Error))
require.Nil(t, output.Value)
} else {
require.Equal(t, test.want.Value.(*decimal.Decimal).String(), output.Value.(decimal.Decimal).String())
require.NoError(t, output.Error)
}
})
})`
$DIR/core/services/pipeline/task.sum_test.go: `t.Run("without vars", func(t *testing.T) {
task := pipeline.SumTask{
BaseTask: pipeline.NewBaseTask(0, "task", nil, nil, 0),
AllowedFaults: test.allowedFaults,
}
output, runInfo := task.Run(testutils.Context(t), logger.TestLogger(t), pipeline.NewVarsFrom(nil), test.inputs)
assert.False(t, runInfo.IsPending)
assert.False(t, runInfo.IsRetryable)
if output.Error != nil {
require.Equal(t, test.want.Error, errors.Cause(output.Error))
require.Nil(t, output.Value)
} else {
require.Equal(t, test.want.Value.(*decimal.Decimal).String(), output.Value.(decimal.Decimal).String())
require.NoError(t, output.Error)
}
})`
$DIR/core/services/pipeline/task.sum_test.go: `t.Run("with vars", func(t *testing.T) {
var inputs []interface{}
for _, input := range test.inputs {
if input.Error != nil {
inputs = append(inputs, input.Error)
} else {
inputs = append(inputs, input.Value)
}
}
vars := pipeline.NewVarsFrom(map[string]interface{}{
"foo": map[string]interface{}{"bar": inputs},
})
task := pipeline.SumTask{
BaseTask: pipeline.NewBaseTask(0, "task", nil, nil, 0),
Values: "$(foo.bar)",
AllowedFaults: test.allowedFaults,
}
output, runInfo := task.Run(testutils.Context(t), logger.TestLogger(t), vars, nil)
assert.False(t, runInfo.IsPending)
assert.False(t, runInfo.IsRetryable)
if output.Error != nil {
require.Equal(t, test.want.Error, errors.Cause(output.Error))
require.Nil(t, output.Value)
} else {
require.Equal(t, test.want.Value.(*decimal.Decimal).String(), output.Value.(decimal.Decimal).String())
require.NoError(t, output.Error)
}
})`
$DIR/core/services/pipeline/task.sum_test.go: `inputs = append(inputs, input.Error)`
$DIR/core/services/pipeline/task.sum_test.go: `inputs = append(inputs, input.Value)`
$DIR/core/services/pipeline/task.sum_test.go: `t.Run("with json vars", func(t *testing.T) {
var inputs []interface{}
for _, input := range test.inputs {
if input.Error != nil {
inputs = append(inputs, input.Error)
} else {
inputs = append(inputs, input.Value)
}
}
var valuesParam string
var vars pipeline.Vars
switch len(inputs) {
case 0:
valuesParam = "[]"
vars = pipeline.NewVarsFrom(nil)
case 1:
valuesParam = "[ $(foo) ]"
vars = pipeline.NewVarsFrom(map[string]interface{}{"foo": inputs[0]})
case 3:
valuesParam = "[ $(foo), $(bar), $(chain) ]"
vars = pipeline.NewVarsFrom(map[string]interface{}{"foo": inputs[0], "bar": inputs[1], "chain": inputs[2]})
case 4:
valuesParam = "[ $(foo), $(bar), $(chain), $(link) ]"
vars = pipeline.NewVarsFrom(map[string]interface{}{"foo": inputs[0], "bar": inputs[1], "chain": inputs[2], "link": inputs[3]})
}
task := pipeline.SumTask{
BaseTask: pipeline.NewBaseTask(0, "task", nil, nil, 0),
Values: valuesParam,
AllowedFaults: test.allowedFaults,
}
output, runInfo := task.Run(testutils.Context(t), logger.TestLogger(t), vars, nil)
assert.False(t, runInfo.IsPending)
assert.False(t, runInfo.IsRetryable)
if output.Error != nil {
require.Equal(t, test.want.Error, errors.Cause(output.Error))
require.Nil(t, output.Value)
} else {
require.Equal(t, test.want.Value.(*decimal.Decimal).String(), output.Value.(decimal.Decimal).String())
require.NoError(t, output.Error)
}
})`
$DIR/core/services/pipeline/task.sum_test.go: `inputs = append(inputs, input.Error)`
$DIR/core/services/pipeline/task.sum_test.go: `inputs = append(inputs, input.Value)`
$DIR/core/services/pipeline/task.sum_test.go: `valuesParam = "[]"`
$DIR/core/services/pipeline/task.sum_test.go: `vars = pipeline.NewVarsFrom(nil)`
$DIR/core/services/pipeline/task.sum_test.go: `valuesParam = "[ $(foo) ]"`
$DIR/core/services/pipeline/task.sum_test.go: `vars = pipeline.NewVarsFrom(map[string]interface{}{"foo": inputs[0]})`
$DIR/core/services/pipeline/task.sum_test.go: `valuesParam = "[ $(foo), $(bar), $(chain) ]"`
$DIR/core/services/pipeline/task.sum_test.go: `vars = pipeline.NewVarsFrom(map[string]interface{}{"foo": inputs[0], "bar": inputs[1], "chain": inputs[2]})`
$DIR/core/services/pipeline/task.sum_test.go: `valuesParam = "[ $(foo), $(bar), $(chain), $(link) ]"`
$DIR/core/services/pipeline/task.sum_test.go: `vars = pipeline.NewVarsFrom(map[string]interface{}{"foo": inputs[0], "bar": inputs[1], "chain": inputs[2], "link": inputs[3]})`
$DIR/core/services/pipeline/task.sum_test.go: `.New("")`
$DIR/core/services/pipeline/task.sum_test.go: `.New("")`
$DIR/core/services/pipeline/task.sum_test.go: `.New("")`
$DIR/core/services/pipeline/task.sum_test.go: `.New("")`
$DIR/core/services/pipeline/task.sum_test.go: `.New("")`
$DIR/core/services/pipeline/task.sum_test.go: `.New("")`
$DIR/core/services/pipeline/task.sum_test.go: `.New("")`
$DIR/core/services/pipeline/task.sum_test.go: `.New("")`
$DIR/core/services/pipeline/task.sum_test.go: `.New("")`
$DIR/core/services/pipeline/task.sum_test.go: `.New("")`
$DIR/core/services/pipeline/task.sum_test.go: `.New("")`
$DIR/core/services/pipeline/task.sum_test.go: `.New("")`
$DIR/core/services/pipeline/task.sum_test.go: `.New("")`
$DIR/core/services/pipeline/task.sum_test.go: `.New("")`
$DIR/core/services/pipeline/task.sum_test.go: `.Run(test.name, func(t *testing.T) {
t.Run("without vars", func(t *testing.T) {
task := pipeline.SumTask{
BaseTask: pipeline.NewBaseTask(0, "task", nil, nil, 0),
AllowedFaults: test.allowedFaults,
}
output, runInfo := task.Run(testutils.Context(t), logger.TestLogger(t), pipeline.NewVarsFrom(nil), test.inputs)
assert.False(t, runInfo.IsPending)
assert.False(t, runInfo.IsRetryable)
if output.Error != nil {
require.Equal(t, test.want.Error, errors.Cause(output.Error))
require.Nil(t, output.Value)
} else {
require.Equal(t, test.want.Value.(*decimal.Decimal).String(), output.Value.(decimal.Decimal).String())
require.NoError(t, output.Error)
}
})
t.Run("with vars", func(t *testing.T) {
var inputs []interface{}
for _, input := range test.inputs {
if input.Error != nil {
inputs = append(inputs, input.Error)
} else {
inputs = append(inputs, input.Value)
}
}
vars := pipeline.NewVarsFrom(map[string]interface{}{
"foo": map[string]interface{}{"bar": inputs},
})
task := pipeline.SumTask{
BaseTask: pipeline.NewBaseTask(0, "task", nil, nil, 0),
Values: "$(foo.bar)",
AllowedFaults: test.allowedFaults,
}
output, runInfo := task.Run(testutils.Context(t), logger.TestLogger(t), vars, nil)
assert.False(t, runInfo.IsPending)
assert.False(t, runInfo.IsRetryable)
if output.Error != nil {
require.Equal(t, test.want.Error, errors.Cause(output.Error))
require.Nil(t, output.Value)
} else {
require.Equal(t, test.want.Value.(*decimal.Decimal).String(), output.Value.(decimal.Decimal).String())
require.NoError(t, output.Error)
}
})
t.Run("with json vars", func(t *testing.T) {
var inputs []interface{}
for _, input := range test.inputs {
if input.Error != nil {
inputs = append(inputs, input.Error)
} else {
inputs = append(inputs, input.Value)
}
}
var valuesParam string
var vars pipeline.Vars
switch len(inputs) {
case 0:
valuesParam = "[]"
vars = pipeline.NewVarsFrom(nil)
case 1:
valuesParam = "[ $(foo) ]"
vars = pipeline.NewVarsFrom(map[string]interface{}{"foo": inputs[0]})
case 3:
valuesParam = "[ $(foo), $(bar), $(chain) ]"
vars = pipeline.NewVarsFrom(map[string]interface{}{"foo": inputs[0], "bar": inputs[1], "chain": inputs[2]})
case 4:
valuesParam = "[ $(foo), $(bar), $(chain), $(link) ]"
vars = pipeline.NewVarsFrom(map[string]interface{}{"foo": inputs[0], "bar": inputs[1], "chain": inputs[2], "link": inputs[3]})
}
task := pipeline.SumTask{
BaseTask: pipeline.NewBaseTask(0, "task", nil, nil, 0),
Values: valuesParam,
AllowedFaults: test.allowedFaults,
}
output, runInfo := task.Run(testutils.Context(t), logger.TestLogger(t), vars, nil)
assert.False(t, runInfo.IsPending)
assert.False(t, runInfo.IsRetryable)
if output.Error != nil {
require.Equal(t, test.want.Error, errors.Cause(output.Error))
require.Nil(t, output.Value)
} else {
require.Equal(t, test.want.Value.(*decimal.Decimal).String(), output.Value.(decimal.Decimal).String())
require.NoError(t, output.Error)
}
})
})`
$DIR/core/services/pipeline/task.sum_test.go: `.Run("without vars", func(t *testing.T) {
task := pipeline.SumTask{
BaseTask: pipeline.NewBaseTask(0, "task", nil, nil, 0),
AllowedFaults: test.allowedFaults,
}
output, runInfo := task.Run(testutils.Context(t), logger.TestLogger(t), pipeline.NewVarsFrom(nil), test.inputs)
assert.False(t, runInfo.IsPending)
assert.False(t, runInfo.IsRetryable)
if output.Error != nil {
require.Equal(t, test.want.Error, errors.Cause(output.Error))
require.Nil(t, output.Value)
} else {
require.Equal(t, test.want.Value.(*decimal.Decimal).String(), output.Value.(decimal.Decimal).String())
require.NoError(t, output.Error)
}
})`
$DIR/core/services/pipeline/task.sum_test.go: `.NewBaseTask(0, "task", nil, nil, 0)`
$DIR/core/services/pipeline/task.sum_test.go: `.Run(testutils.Context(t), logger.TestLogger(t), pipeline.NewVarsFrom(nil), test.inputs)`
$DIR/core/services/pipeline/task.sum_test.go: `.Context(t)`
$DIR/core/services/pipeline/task.sum_test.go: `.TestLogger(t)`
$DIR/core/services/pipeline/task.sum_test.go: `.NewVarsFrom(nil)`
$DIR/core/services/pipeline/task.sum_test.go: `.Run("with vars", func(t *testing.T) {
var inputs []interface{}
for _, input := range test.inputs {
if input.Error != nil {
inputs = append(inputs, input.Error)
} else {
inputs = append(inputs, input.Value)
}
}
vars := pipeline.NewVarsFrom(map[string]interface{}{
"foo": map[string]interface{}{"bar": inputs},
})
task := pipeline.SumTask{
BaseTask: pipeline.NewBaseTask(0, "task", nil, nil, 0),
Values: "$(foo.bar)",
AllowedFaults: test.allowedFaults,
}
output, runInfo := task.Run(testutils.Context(t), logger.TestLogger(t), vars, nil)
assert.False(t, runInfo.IsPending)
assert.False(t, runInfo.IsRetryable)
if output.Error != nil {
require.Equal(t, test.want.Error, errors.Cause(output.Error))
require.Nil(t, output.Value)
} else {
require.Equal(t, test.want.Value.(*decimal.Decimal).String(), output.Value.(decimal.Decimal).String())
require.NoError(t, output.Error)
}
})`
$DIR/core/services/pipeline/task.sum_test.go: `.NewVarsFrom(map[string]interface{}{
"foo": map[string]interface{}{"bar": inputs},
})`
$DIR/core/services/pipeline/task.sum_test.go: `.NewBaseTask(0, "task", nil, nil, 0)`
$DIR/core/services/pipeline/task.sum_test.go: `.Run(testutils.Context(t), logger.TestLogger(t), vars, nil)`
$DIR/core/services/pipeline/task.sum_test.go: `.Context(t)`
$DIR/core/services/pipeline/task.sum_test.go: `.TestLogger(t)`
$DIR/core/services/pipeline/task.sum_test.go: `.Run("with json vars", func(t *testing.T) {
var inputs []interface{}
for _, input := range test.inputs {
if input.Error != nil {
inputs = append(inputs, input.Error)
} else {
inputs = append(inputs, input.Value)
}
}
var valuesParam string
var vars pipeline.Vars
switch len(inputs) {
case 0:
valuesParam = "[]"
vars = pipeline.NewVarsFrom(nil)
case 1:
valuesParam = "[ $(foo) ]"
vars = pipeline.NewVarsFrom(map[string]interface{}{"foo": inputs[0]})
case 3:
valuesParam = "[ $(foo), $(bar), $(chain) ]"
vars = pipeline.NewVarsFrom(map[string]interface{}{"foo": inputs[0], "bar": inputs[1], "chain": inputs[2]})
case 4:
valuesParam = "[ $(foo), $(bar), $(chain), $(link) ]"
vars = pipeline.NewVarsFrom(map[string]interface{}{"foo": inputs[0], "bar": inputs[1], "chain": inputs[2], "link": inputs[3]})
}
task := pipeline.SumTask{
BaseTask: pipeline.NewBaseTask(0, "task", nil, nil, 0),
Values: valuesParam,
AllowedFaults: test.allowedFaults,
}
output, runInfo := task.Run(testutils.Context(t), logger.TestLogger(t), vars, nil)
assert.False(t, runInfo.IsPending)
assert.False(t, runInfo.IsRetryable)
if output.Error != nil {
require.Equal(t, test.want.Error, errors.Cause(output.Error))
require.Nil(t, output.Value)
} else {
require.Equal(t, test.want.Value.(*decimal.Decimal).String(), output.Value.(decimal.Decimal).String())
require.NoError(t, output.Error)
}
})`
$DIR/core/services/pipeline/task.sum_test.go: `.NewVarsFrom(nil)`
$DIR/core/services/pipeline/task.sum_test.go: `.NewVarsFrom(map[string]interface{}{"foo": inputs[0]})`
$DIR/core/services/pipeline/task.sum_test.go: `.NewVarsFrom(map[string]interface{}{"foo": inputs[0], "bar": inputs[1], "chain": inputs[2]})`
$DIR/core/services/pipeline/task.sum_test.go: `.NewVarsFrom(map[string]interface{}{"foo": inputs[0], "bar": inputs[1], "chain": inputs[2], "link": inputs[3]})`
$DIR/core/services/pipeline/task.sum_test.go: `.NewBaseTask(0, "task", nil, nil, 0)`
$DIR/core/services/pipeline/task.sum_test.go: `.Run(testutils.Context(t), logger.TestLogger(t), vars, nil)`
$DIR/core/services/pipeline/task.sum_test.go: `.Context(t)`
$DIR/core/services/pipeline/task.sum_test.go: `.TestLogger(t)`
$DIR/core/services/pipeline/task.uppercase_test.go: `t.Run(test.name, func(t *testing.T) {
t.Run("without vars through job DAG", func(t *testing.T) {
vars := pipeline.NewVarsFrom(nil)
task := pipeline.UppercaseTask{BaseTask: pipeline.NewBaseTask(0, "task", nil, nil, 0)}
assertOK(task.Run(testutils.Context(t), logger.TestLogger(t), vars, []pipeline.Result{{Value: test.input}}))
})
t.Run("without vars through input param", func(t *testing.T) {
inputStr := fmt.Sprintf("%v", test.input)
if inputStr == "" {
// empty input parameter is indistinguishable from not providing it at all
// in that case the task will use an input defined by the job DAG
return
}
vars := pipeline.NewVarsFrom(nil)
task := pipeline.UppercaseTask{
BaseTask: pipeline.NewBaseTask(0, "task", nil, nil, 0),
Input: inputStr,
}
assertOK(task.Run(testutils.Context(t), logger.TestLogger(t), vars, []pipeline.Result{}))
})
t.Run("with vars", func(t *testing.T) {
vars := pipeline.NewVarsFrom(map[string]interface{}{
"foo": map[string]interface{}{"bar": test.input},
})
task := pipeline.UppercaseTask{
BaseTask: pipeline.NewBaseTask(0, "task", nil, nil, 0),
Input: "$(foo.bar)",
}
assertOK(task.Run(testutils.Context(t), logger.TestLogger(t), vars, []pipeline.Result{}))
})
})`
$DIR/core/services/pipeline/task.uppercase_test.go: `t.Run("without vars through job DAG", func(t *testing.T) {
vars := pipeline.NewVarsFrom(nil)
task := pipeline.UppercaseTask{BaseTask: pipeline.NewBaseTask(0, "task", nil, nil, 0)}
assertOK(task.Run(testutils.Context(t), logger.TestLogger(t), vars, []pipeline.Result{{Value: test.input}}))
})`
$DIR/core/services/pipeline/task.uppercase_test.go: `assertOK(task.Run(testutils.Context(t), logger.TestLogger(t), vars, []pipeline.Result{{Value: test.input}}))`
$DIR/core/services/pipeline/task.uppercase_test.go: `t.Run("without vars through input param", func(t *testing.T) {
inputStr := fmt.Sprintf("%v", test.input)
if inputStr == "" {
// empty input parameter is indistinguishable from not providing it at all
// in that case the task will use an input defined by the job DAG
return
}
vars := pipeline.NewVarsFrom(nil)
task := pipeline.UppercaseTask{
BaseTask: pipeline.NewBaseTask(0, "task", nil, nil, 0),
Input: inputStr,
}
assertOK(task.Run(testutils.Context(t), logger.TestLogger(t), vars, []pipeline.Result{}))
})`
$DIR/core/services/pipeline/task.uppercase_test.go: `assertOK(task.Run(testutils.Context(t), logger.TestLogger(t), vars, []pipeline.Result{}))`
$DIR/core/services/pipeline/task.uppercase_test.go: `t.Run("with vars", func(t *testing.T) {
vars := pipeline.NewVarsFrom(map[string]interface{}{
"foo": map[string]interface{}{"bar": test.input},
})
task := pipeline.UppercaseTask{
BaseTask: pipeline.NewBaseTask(0, "task", nil, nil, 0),
Input: "$(foo.bar)",
}
assertOK(task.Run(testutils.Context(t), logger.TestLogger(t), vars, []pipeline.Result{}))
})`
$DIR/core/services/pipeline/task.uppercase_test.go: `assertOK(task.Run(testutils.Context(t), logger.TestLogger(t), vars, []pipeline.Result{}))`
$DIR/core/services/pipeline/task.uppercase_test.go: `.Run(test.name, func(t *testing.T) {
t.Run("without vars through job DAG", func(t *testing.T) {
vars := pipeline.NewVarsFrom(nil)
task := pipeline.UppercaseTask{BaseTask: pipeline.NewBaseTask(0, "task", nil, nil, 0)}
assertOK(task.Run(testutils.Context(t), logger.TestLogger(t), vars, []pipeline.Result{{Value: test.input}}))
})
t.Run("without vars through input param", func(t *testing.T) {
inputStr := fmt.Sprintf("%v", test.input)
if inputStr == "" {
// empty input parameter is indistinguishable from not providing it at all
// in that case the task will use an input defined by the job DAG
return
}
vars := pipeline.NewVarsFrom(nil)
task := pipeline.UppercaseTask{
BaseTask: pipeline.NewBaseTask(0, "task", nil, nil, 0),
Input: inputStr,
}
assertOK(task.Run(testutils.Context(t), logger.TestLogger(t), vars, []pipeline.Result{}))
})
t.Run("with vars", func(t *testing.T) {
vars := pipeline.NewVarsFrom(map[string]interface{}{
"foo": map[string]interface{}{"bar": test.input},
})
task := pipeline.UppercaseTask{
BaseTask: pipeline.NewBaseTask(0, "task", nil, nil, 0),
Input: "$(foo.bar)",
}
assertOK(task.Run(testutils.Context(t), logger.TestLogger(t), vars, []pipeline.Result{}))
})
})`
$DIR/core/services/pipeline/task.uppercase_test.go: `.Run("without vars through job DAG", func(t *testing.T) {
vars := pipeline.NewVarsFrom(nil)
task := pipeline.UppercaseTask{BaseTask: pipeline.NewBaseTask(0, "task", nil, nil, 0)}
assertOK(task.Run(testutils.Context(t), logger.TestLogger(t), vars, []pipeline.Result{{Value: test.input}}))
})`
$DIR/core/services/pipeline/task.uppercase_test.go: `.NewVarsFrom(nil)`
$DIR/core/services/pipeline/task.uppercase_test.go: `.NewBaseTask(0, "task", nil, nil, 0)`
$DIR/core/services/pipeline/task.uppercase_test.go: `.Run(testutils.Context(t), logger.TestLogger(t), vars, []pipeline.Result{{Value: test.input}})`
$DIR/core/services/pipeline/task.uppercase_test.go: `.Context(t)`
$DIR/core/services/pipeline/task.uppercase_test.go: `.TestLogger(t)`
$DIR/core/services/pipeline/task.uppercase_test.go: `.Run("without vars through input param", func(t *testing.T) {
inputStr := fmt.Sprintf("%v", test.input)
if inputStr == "" {
// empty input parameter is indistinguishable from not providing it at all
// in that case the task will use an input defined by the job DAG
return
}
vars := pipeline.NewVarsFrom(nil)
task := pipeline.UppercaseTask{
BaseTask: pipeline.NewBaseTask(0, "task", nil, nil, 0),
Input: inputStr,
}
assertOK(task.Run(testutils.Context(t), logger.TestLogger(t), vars, []pipeline.Result{}))
})`
$DIR/core/services/pipeline/task.uppercase_test.go: `.Sprintf("%v", test.input)`
$DIR/core/services/pipeline/task.uppercase_test.go: `.NewVarsFrom(nil)`
$DIR/core/services/pipeline/task.uppercase_test.go: `.NewBaseTask(0, "task", nil, nil, 0)`
$DIR/core/services/pipeline/task.uppercase_test.go: `.Run(testutils.Context(t), logger.TestLogger(t), vars, []pipeline.Result{})`
$DIR/core/services/pipeline/task.uppercase_test.go: `.Context(t)`
$DIR/core/services/pipeline/task.uppercase_test.go: `.TestLogger(t)`
$DIR/core/services/pipeline/task.uppercase_test.go: `.Run("with vars", func(t *testing.T) {
vars := pipeline.NewVarsFrom(map[string]interface{}{
"foo": map[string]interface{}{"bar": test.input},
})
task := pipeline.UppercaseTask{
BaseTask: pipeline.NewBaseTask(0, "task", nil, nil, 0),
Input: "$(foo.bar)",
}
assertOK(task.Run(testutils.Context(t), logger.TestLogger(t), vars, []pipeline.Result{}))
})`
$DIR/core/services/pipeline/task.uppercase_test.go: `.NewVarsFrom(map[string]interface{}{
"foo": map[string]interface{}{"bar": test.input},
})`
$DIR/core/services/pipeline/task.uppercase_test.go: `.NewBaseTask(0, "task", nil, nil, 0)`
$DIR/core/services/pipeline/task.uppercase_test.go: `.Run(testutils.Context(t), logger.TestLogger(t), vars, []pipeline.Result{})`
$DIR/core/services/pipeline/task.uppercase_test.go: `.Context(t)`
$DIR/core/services/pipeline/task.uppercase_test.go: `.TestLogger(t)`
$DIR/core/services/pipeline/task_object_params_test.go: `t.Run(test.name, func(t *testing.T) {
var value pipeline.ObjectParam
err := value.UnmarshalPipelineParam(test.input)
require.NoError(t, err)
marshalledValue, err := value.Marshal()
require.NoError(t, err)
assert.Equal(t, test.output, marshalledValue)
})`
$DIR/core/services/pipeline/task_object_params_test.go: `t.Run(test.name, func(t *testing.T) {
marshalledValue, err := test.input.Marshal()
require.NoError(t, err)
assert.Equal(t, test.output, marshalledValue)
})`
$DIR/core/services/pipeline/task_object_params_test.go: `.New(173, -1)`
$DIR/core/services/pipeline/task_object_params_test.go: `.NewInt(-17)`
$DIR/core/services/pipeline/task_object_params_test.go: `.NewInt(29)`
$DIR/core/services/pipeline/task_object_params_test.go: `.Run(test.name, func(t *testing.T) {
var value pipeline.ObjectParam
err := value.UnmarshalPipelineParam(test.input)
require.NoError(t, err)
marshalledValue, err := value.Marshal()
require.NoError(t, err)
assert.Equal(t, test.output, marshalledValue)
})`
$DIR/core/services/pipeline/task_object_params_test.go: `.UnmarshalPipelineParam(test.input)`
$DIR/core/services/pipeline/task_object_params_test.go: `.Marshal()`
$DIR/core/services/pipeline/task_object_params_test.go: `.Run(test.name, func(t *testing.T) {
marshalledValue, err := test.input.Marshal()
require.NoError(t, err)
assert.Equal(t, test.output, marshalledValue)
})`
$DIR/core/services/pipeline/task_object_params_test.go: `.input.Marshal()`
$DIR/core/services/pipeline/task_params_test.go: `t.Run(test.name, func(t *testing.T) {
var p pipeline.StringParam
err := p.UnmarshalPipelineParam(test.input)
require.Equal(t, test.err, errors.Cause(err))
require.Equal(t, test.expected, p)
})`
$DIR/core/services/pipeline/task_params_test.go: `t.Run(test.name, func(t *testing.T) {
var p pipeline.StringSliceParam
err := p.UnmarshalPipelineParam(test.input)
require.Equal(t, test.err, errors.Cause(err))
if test.expected != nil {
require.Equal(t, test.expected, p)
}
})`
$DIR/core/services/pipeline/task_params_test.go: `t.Run(test.name, func(t *testing.T) {
var p pipeline.BytesParam
err := p.UnmarshalPipelineParam(test.input)
require.Equal(t, test.err, errors.Cause(err))
require.Equal(t, test.expected, p)
})`
$DIR/core/services/pipeline/task_params_test.go: `copy(addr[:], []byte("deadbeefdeadbeefdead"))`
$DIR/core/services/pipeline/task_params_test.go: `t.Run(test.name, func(t *testing.T) {
var p pipeline.AddressParam
err := p.UnmarshalPipelineParam(test.input)
require.Equal(t, test.err, errors.Cause(err))
if test.expected != nil {
require.Equal(t, test.expected, p)
}
})`
$DIR/core/services/pipeline/task_params_test.go: `t.Run(test.name, func(t *testing.T) {
var p pipeline.AddressSliceParam
err := p.UnmarshalPipelineParam(test.input)
require.Equal(t, test.err, errors.Cause(err))
if test.expected != nil {
require.Equal(t, test.expected, p)
}
})`
$DIR/core/services/pipeline/task_params_test.go: `t.Run(test.name, func(t *testing.T) {
var p pipeline.Uint64Param
err := p.UnmarshalPipelineParam(test.input)
require.Equal(t, test.err, errors.Cause(err))
if test.err == nil {
require.Equal(t, test.expected, p)
}
})`
$DIR/core/services/pipeline/task_params_test.go: `t.Run(test.name, func(t *testing.T) {
var p pipeline.MaybeUint64Param
err := p.UnmarshalPipelineParam(test.input)
require.Equal(t, test.err, errors.Cause(err))
if err == nil {
require.Equal(t, test.expected, p)
}
})`
$DIR/core/services/pipeline/task_params_test.go: `t.Run(test.name, func(t *testing.T) {
var p pipeline.MaybeBigIntParam
err := p.UnmarshalPipelineParam(test.input)
require.Equal(t, test.err, errors.Cause(err))
if test.err == nil {
require.Equal(t, test.expected, p)
}
})`
$DIR/core/services/pipeline/task_params_test.go: `t.Run(test.name, func(t *testing.T) {
var p pipeline.MaybeInt32Param
err := p.UnmarshalPipelineParam(test.input)
require.Equal(t, test.err, errors.Cause(err))
require.Equal(t, test.expected, p)
})`
$DIR/core/services/pipeline/task_params_test.go: `t.Run(test.name, func(t *testing.T) {
var p pipeline.BoolParam
err := p.UnmarshalPipelineParam(test.input)
require.Equal(t, test.err, errors.Cause(err))
require.Equal(t, test.expected, p)
})`
$DIR/core/services/pipeline/task_params_test.go: `t.Run(test.name, func(t *testing.T) {
var p pipeline.DecimalParam
err := p.UnmarshalPipelineParam(test.input)
require.Equal(t, test.err, errors.Cause(err))
require.Equal(t, test.expected, p)
})`
$DIR/core/services/pipeline/task_params_test.go: `t.Run(test.name, func(t *testing.T) {
var p pipeline.URLParam
err := p.UnmarshalPipelineParam(test.input)
require.Equal(t, test.err, errors.Cause(err))
require.Equal(t, test.expected, p)
})`
$DIR/core/services/pipeline/task_params_test.go: `t.Run(test.name, func(t *testing.T) {
var p pipeline.MapParam
err := p.UnmarshalPipelineParam(test.input)
require.Equal(t, test.err, errors.Cause(err))
require.Equal(t, test.expected, p)
})`
$DIR/core/services/pipeline/task_params_test.go: `t.Run(test.name, func(t *testing.T) {
var p pipeline.SliceParam
err := p.UnmarshalPipelineParam(test.input)
require.Equal(t, test.err, errors.Cause(err))
require.Equal(t, test.expected, p)
})`
$DIR/core/services/pipeline/task_params_test.go: `t.Run(test.name, func(t *testing.T) {
var p pipeline.HashSliceParam
err := p.UnmarshalPipelineParam(test.input)
require.Equal(t, test.err, errors.Cause(err))
if test.expected != nil {
require.Equal(t, test.expected, p)
}
})`
$DIR/core/services/pipeline/task_params_test.go: `t.Run(test.name, func(t *testing.T) {
var p pipeline.DecimalSliceParam
err := p.UnmarshalPipelineParam(test.input)
require.Equal(t, test.err, errors.Cause(err))
require.Equal(t, test.expected, p)
})`
$DIR/core/services/pipeline/task_params_test.go: `t.Run(test.name, func(t *testing.T) {
var p pipeline.JSONPathParam
err := p.UnmarshalPipelineParam(test.input)
require.Equal(t, test.err, errors.Cause(err))
require.Equal(t, test.expected, p)
})`
$DIR/core/services/pipeline/task_params_test.go: `t.Run("calls getters in order until the first one that returns without ErrParameterEmpty", func(t *testing.T) {
param := mocks.NewPipelineParamUnmarshaler(t)
param.On("UnmarshalPipelineParam", mock.Anything).Return(nil)
called := []int{}
getters := []pipeline.GetterFunc{
func() (interface{}, error) {
called = append(called, 0)
return nil, errors.Wrap(pipeline.ErrParameterEmpty, "make sure it still notices when wrapped")
},
func() (interface{}, error) {
called = append(called, 1)
return 123, nil
},
func() (interface{}, error) {
called = append(called, 2)
return 123, nil
},
}
err := pipeline.ResolveParam(param, getters)
require.NoError(t, err)
require.Equal(t, []int{0, 1}, called)
})`
$DIR/core/services/pipeline/task_params_test.go: `param.On("UnmarshalPipelineParam", mock.Anything).Return(nil)`
$DIR/core/services/pipeline/task_params_test.go: `called = append(called, 0)`
$DIR/core/services/pipeline/task_params_test.go: `called = append(called, 1)`
$DIR/core/services/pipeline/task_params_test.go: `called = append(called, 2)`
$DIR/core/services/pipeline/task_params_test.go: `t.Run("returns any GetterFunc error that isn't ErrParameterEmpty", func(t *testing.T) {
param := mocks.NewPipelineParamUnmarshaler(t)
called := []int{}
expectedErr := errors.New("some other issue")
getters := []pipeline.GetterFunc{
func() (interface{}, error) {
called = append(called, 0)
return nil, expectedErr
},
func() (interface{}, error) {
called = append(called, 1)
return 123, nil
},
func() (interface{}, error) {
called = append(called, 2)
return 123, nil
},
}
err := pipeline.ResolveParam(param, getters)
require.Equal(t, expectedErr, err)
require.Equal(t, []int{0}, called)
})`
$DIR/core/services/pipeline/task_params_test.go: `called = append(called, 0)`
$DIR/core/services/pipeline/task_params_test.go: `called = append(called, 1)`
$DIR/core/services/pipeline/task_params_test.go: `called = append(called, 2)`
$DIR/core/services/pipeline/task_params_test.go: `t.Run("calls UnmarshalPipelineParam with the value obtained from the GetterFuncs", func(t *testing.T) {
expectedValue := 123
param := mocks.NewPipelineParamUnmarshaler(t)
param.On("UnmarshalPipelineParam", expectedValue).Return(nil)
getters := []pipeline.GetterFunc{
func() (interface{}, error) {
return expectedValue, nil
},
}
err := pipeline.ResolveParam(param, getters)
require.NoError(t, err)
})`
$DIR/core/services/pipeline/task_params_test.go: `param.On("UnmarshalPipelineParam", expectedValue).Return(nil)`
$DIR/core/services/pipeline/task_params_test.go: `param.On("UnmarshalPipelineParam", expectedValue).Return(expectedErr)`
$DIR/core/services/pipeline/task_params_test.go: `.StringParam("foo bar baz")`
$DIR/core/services/pipeline/task_params_test.go: `.StringParam("foo bar baz")`
$DIR/core/services/pipeline/task_params_test.go: `.StringParam("boz bar bap")`
$DIR/core/services/pipeline/task_params_test.go: `.StringParam("boz bar bap")`
$DIR/core/services/pipeline/task_params_test.go: `.StringParam("")`
$DIR/core/services/pipeline/task_params_test.go: `.StringParam("")`
$DIR/core/services/pipeline/task_params_test.go: `.StringParam("")`
$DIR/core/services/pipeline/task_params_test.go: `.Run(test.name, func(t *testing.T) {
var p pipeline.StringParam
err := p.UnmarshalPipelineParam(test.input)
require.Equal(t, test.err, errors.Cause(err))
require.Equal(t, test.expected, p)
})`
$DIR/core/services/pipeline/task_params_test.go: `.UnmarshalPipelineParam(test.input)`
$DIR/core/services/pipeline/task_params_test.go: `.SliceParam([]interface{}{"foo", "bar", "baz"})`
$DIR/core/services/pipeline/task_params_test.go: `.StringSliceParam(nil)`
$DIR/core/services/pipeline/task_params_test.go: `.Run(test.name, func(t *testing.T) {
var p pipeline.StringSliceParam
err := p.UnmarshalPipelineParam(test.input)
require.Equal(t, test.err, errors.Cause(err))
if test.expected != nil {
require.Equal(t, test.expected, p)
}
})`
$DIR/core/services/pipeline/task_params_test.go: `.UnmarshalPipelineParam(test.input)`
$DIR/core/services/pipeline/task_params_test.go: `.BytesParam("foo bar baz")`
$DIR/core/services/pipeline/task_params_test.go: `.BytesParam("foo bar baz")`
$DIR/core/services/pipeline/task_params_test.go: `.BytesParam(nil)`
$DIR/core/services/pipeline/task_params_test.go: `.BytesParam("0xh")`
$DIR/core/services/pipeline/task_params_test.go: `.MustDecode("0xd3184d")`
$DIR/core/services/pipeline/task_params_test.go: `.BytesParam(hexutil.MustDecode("0xd3184d"))`
$DIR/core/services/pipeline/task_params_test.go: `.MustDecode("0xd3184d")`
$DIR/core/services/pipeline/task_params_test.go: `.BytesParam("boz bar bap")`
$DIR/core/services/pipeline/task_params_test.go: `.BytesParam("boz bar bap")`
$DIR/core/services/pipeline/task_params_test.go: `.Run(test.name, func(t *testing.T) {
var p pipeline.BytesParam
err := p.UnmarshalPipelineParam(test.input)
require.Equal(t, test.err, errors.Cause(err))
require.Equal(t, test.expected, p)
})`
$DIR/core/services/pipeline/task_params_test.go: `.UnmarshalPipelineParam(test.input)`
$DIR/core/services/pipeline/task_params_test.go: `.AddressParam(common.HexToAddress("0xdeadbeefdeadbeefdeadbeefdeadbeefdeadbeef"))`
$DIR/core/services/pipeline/task_params_test.go: `.HexToAddress("0xdeadbeefdeadbeefdeadbeefdeadbeefdeadbeef")`
$DIR/core/services/pipeline/task_params_test.go: `.AddressParam(common.HexToAddress("0xdeadbeefdeadbeefdeadbeefdeadbeefdeadbeef"))`
$DIR/core/services/pipeline/task_params_test.go: `.HexToAddress("0xdeadbeefdeadbeefdeadbeefdeadbeefdeadbeef")`
$DIR/core/services/pipeline/task_params_test.go: `.Run(test.name, func(t *testing.T) {
var p pipeline.AddressParam
err := p.UnmarshalPipelineParam(test.input)
require.Equal(t, test.err, errors.Cause(err))
if test.expected != nil {
require.Equal(t, test.expected, p)
}
})`
$DIR/core/services/pipeline/task_params_test.go: `.UnmarshalPipelineParam(test.input)`
$DIR/core/services/pipeline/task_params_test.go: `.HexToAddress("0xdeadbeefdeadbeefdeadbeefdeadbeefdeadbeef")`
$DIR/core/services/pipeline/task_params_test.go: `.HexToAddress("0xcafebabecafebabecafebabecafebabecafebabe")`
$DIR/core/services/pipeline/task_params_test.go: `.String()`
$DIR/core/services/pipeline/task_params_test.go: `.String()`
$DIR/core/services/pipeline/task_params_test.go: `.String()`
$DIR/core/services/pipeline/task_params_test.go: `.String()`
$DIR/core/services/pipeline/task_params_test.go: `.AddressSliceParam(nil)`
$DIR/core/services/pipeline/task_params_test.go: `.Run(test.name, func(t *testing.T) {
var p pipeline.AddressSliceParam
err := p.UnmarshalPipelineParam(test.input)
require.Equal(t, test.err, errors.Cause(err))
if test.expected != nil {
require.Equal(t, test.expected, p)
}
})`
$DIR/core/services/pipeline/task_params_test.go: `.UnmarshalPipelineParam(test.input)`
$DIR/core/services/pipeline/task_params_test.go: `.Uint64Param(123)`
$DIR/core/services/pipeline/task_params_test.go: `.Uint64Param(123)`
$DIR/core/services/pipeline/task_params_test.go: `.Uint64Param(123)`
$DIR/core/services/pipeline/task_params_test.go: `.Uint64Param(123)`
$DIR/core/services/pipeline/task_params_test.go: `.Uint64Param(123)`
$DIR/core/services/pipeline/task_params_test.go: `.Uint64Param(123)`
$DIR/core/services/pipeline/task_params_test.go: `.Uint64Param(123)`
$DIR/core/services/pipeline/task_params_test.go: `.Uint64Param(123)`
$DIR/core/services/pipeline/task_params_test.go: `.Uint64Param(123)`
$DIR/core/services/pipeline/task_params_test.go: `.Uint64Param(123)`
$DIR/core/services/pipeline/task_params_test.go: `.Uint64Param(123)`
$DIR/core/services/pipeline/task_params_test.go: `.Uint64Param(123)`
$DIR/core/services/pipeline/task_params_test.go: `.Uint64Param(0)`
$DIR/core/services/pipeline/task_params_test.go: `.Uint64Param(0)`
$DIR/core/services/pipeline/task_params_test.go: `.Uint64Param(0)`
$DIR/core/services/pipeline/task_params_test.go: `.Uint64Param(0)`
$DIR/core/services/pipeline/task_params_test.go: `.Uint64Param(0)`
$DIR/core/services/pipeline/task_params_test.go: `.Uint64Param(0)`
$DIR/core/services/pipeline/task_params_test.go: `.Uint64Param(0)`
$DIR/core/services/pipeline/task_params_test.go: `.Uint64Param(0)`
$DIR/core/services/pipeline/task_params_test.go: `.Run(test.name, func(t *testing.T) {
var p pipeline.Uint64Param
err := p.UnmarshalPipelineParam(test.input)
require.Equal(t, test.err, errors.Cause(err))
if test.err == nil {
require.Equal(t, test.expected, p)
}
})`
$DIR/core/services/pipeline/task_params_test.go: `.UnmarshalPipelineParam(test.input)`
$DIR/core/services/pipeline/task_params_test.go: `.NewMaybeUint64Param(123, true)`
$DIR/core/services/pipeline/task_params_test.go: `.NewMaybeUint64Param(123, true)`
$DIR/core/services/pipeline/task_params_test.go: `.NewMaybeUint64Param(123, true)`
$DIR/core/services/pipeline/task_params_test.go: `.NewMaybeUint64Param(123, true)`
$DIR/core/services/pipeline/task_params_test.go: `.NewMaybeUint64Param(123, true)`
$DIR/core/services/pipeline/task_params_test.go: `.NewMaybeUint64Param(123, true)`
$DIR/core/services/pipeline/task_params_test.go: `.NewMaybeUint64Param(123, true)`
$DIR/core/services/pipeline/task_params_test.go: `.NewMaybeUint64Param(123, true)`
$DIR/core/services/pipeline/task_params_test.go: `.NewMaybeUint64Param(123, true)`
$DIR/core/services/pipeline/task_params_test.go: `.NewMaybeUint64Param(123, true)`
$DIR/core/services/pipeline/task_params_test.go: `.NewMaybeUint64Param(123, true)`
$DIR/core/services/pipeline/task_params_test.go: `.NewMaybeUint64Param(123, true)`
$DIR/core/services/pipeline/task_params_test.go: `.NewMaybeUint64Param(0, false)`
$DIR/core/services/pipeline/task_params_test.go: `.NewMaybeUint64Param(0, false)`
$DIR/core/services/pipeline/task_params_test.go: `.NewMaybeUint64Param(0, false)`
$DIR/core/services/pipeline/task_params_test.go: `.NewMaybeUint64Param(0, false)`
$DIR/core/services/pipeline/task_params_test.go: `.NewMaybeUint64Param(0, false)`
$DIR/core/services/pipeline/task_params_test.go: `.NewMaybeUint64Param(0, false)`
$DIR/core/services/pipeline/task_params_test.go: `.NewMaybeUint64Param(0, false)`
$DIR/core/services/pipeline/task_params_test.go: `.NewMaybeUint64Param(0, false)`
$DIR/core/services/pipeline/task_params_test.go: `.NewMaybeUint64Param(0, false)`
$DIR/core/services/pipeline/task_params_test.go: `.Run(test.name, func(t *testing.T) {
var p pipeline.MaybeUint64Param
err := p.UnmarshalPipelineParam(test.input)
require.Equal(t, test.err, errors.Cause(err))
if err == nil {
require.Equal(t, test.expected, p)
}
})`
$DIR/core/services/pipeline/task_params_test.go: `.UnmarshalPipelineParam(test.input)`
$DIR/core/services/pipeline/task_params_test.go: `.NewMaybeBigIntParam(big.NewInt(n))`
$DIR/core/services/pipeline/task_params_test.go: `.NewInt(n)`
$DIR/core/services/pipeline/task_params_test.go: `.NewMaybeBigIntParam(nil)`
$DIR/core/services/pipeline/task_params_test.go: `.NewMaybeBigIntParam(nil)`
$DIR/core/services/pipeline/task_params_test.go: `.NewInt(123)`
$DIR/core/services/pipeline/task_params_test.go: `.NewMaybeBigIntParam(nil)`
$DIR/core/services/pipeline/task_params_test.go: `.NewMaybeBigIntParam(nil)`
$DIR/core/services/pipeline/task_params_test.go: `.NewMaybeBigIntParam(nil)`
$DIR/core/services/pipeline/task_params_test.go: `.NewMaybeBigIntParam(nil)`
$DIR/core/services/pipeline/task_params_test.go: `.NewMaybeBigIntParam(nil)`
$DIR/core/services/pipeline/task_params_test.go: `.Run(test.name, func(t *testing.T) {
var p pipeline.MaybeBigIntParam
err := p.UnmarshalPipelineParam(test.input)
require.Equal(t, test.err, errors.Cause(err))
if test.err == nil {
require.Equal(t, test.expected, p)
}
})`
$DIR/core/services/pipeline/task_params_test.go: `.UnmarshalPipelineParam(test.input)`
$DIR/core/services/pipeline/task_params_test.go: `.NewMaybeInt32Param(123, true)`
$DIR/core/services/pipeline/task_params_test.go: `.NewMaybeInt32Param(123, true)`
$DIR/core/services/pipeline/task_params_test.go: `.NewMaybeInt32Param(123, true)`
$DIR/core/services/pipeline/task_params_test.go: `.NewMaybeInt32Param(123, true)`
$DIR/core/services/pipeline/task_params_test.go: `.NewMaybeInt32Param(123, true)`
$DIR/core/services/pipeline/task_params_test.go: `.NewMaybeInt32Param(123, true)`
$DIR/core/services/pipeline/task_params_test.go: `.NewMaybeInt32Param(123, true)`
$DIR/core/services/pipeline/task_params_test.go: `.NewMaybeInt32Param(123, true)`
$DIR/core/services/pipeline/task_params_test.go: `.NewMaybeInt32Param(123, true)`
$DIR/core/services/pipeline/task_params_test.go: `.NewMaybeInt32Param(123, true)`
$DIR/core/services/pipeline/task_params_test.go: `.NewMaybeInt32Param(123, true)`
$DIR/core/services/pipeline/task_params_test.go: `.NewMaybeInt32Param(123, true)`
$DIR/core/services/pipeline/task_params_test.go: `.NewMaybeInt32Param(0, false)`
$DIR/core/services/pipeline/task_params_test.go: `.NewMaybeInt32Param(0, false)`
$DIR/core/services/pipeline/task_params_test.go: `.NewMaybeInt32Param(0, false)`
$DIR/core/services/pipeline/task_params_test.go: `.NewMaybeInt32Param(0, false)`
$DIR/core/services/pipeline/task_params_test.go: `.NewMaybeInt32Param(0, false)`
$DIR/core/services/pipeline/task_params_test.go: `.NewMaybeInt32Param(0, false)`
$DIR/core/services/pipeline/task_params_test.go: `.NewMaybeInt32Param(0, false)`
$DIR/core/services/pipeline/task_params_test.go: `.Run(test.name, func(t *testing.T) {
var p pipeline.MaybeInt32Param
err := p.UnmarshalPipelineParam(test.input)
require.Equal(t, test.err, errors.Cause(err))
require.Equal(t, test.expected, p)
})`
$DIR/core/services/pipeline/task_params_test.go: `.UnmarshalPipelineParam(test.input)`
$DIR/core/services/pipeline/task_params_test.go: `.BoolParam(true)`
$DIR/core/services/pipeline/task_params_test.go: `.BoolParam(false)`
$DIR/core/services/pipeline/task_params_test.go: `.BoolParam(true)`
$DIR/core/services/pipeline/task_params_test.go: `.BoolParam(false)`
$DIR/core/services/pipeline/task_params_test.go: `.BoolParam(false)`
$DIR/core/services/pipeline/task_params_test.go: `.BoolParam(true)`
$DIR/core/services/pipeline/task_params_test.go: `.BoolParam(true)`
$DIR/core/services/pipeline/task_params_test.go: `.Run(test.name, func(t *testing.T) {
var p pipeline.BoolParam
err := p.UnmarshalPipelineParam(test.input)
require.Equal(t, test.err, errors.Cause(err))
require.Equal(t, test.expected, p)
})`
$DIR/core/services/pipeline/task_params_test.go: `.UnmarshalPipelineParam(test.input)`
$DIR/core/services/pipeline/task_params_test.go: `.NewFromFloat(123.45)`
$DIR/core/services/pipeline/task_params_test.go: `.DecimalParam(d)`
$DIR/core/services/pipeline/task_params_test.go: `.DecimalParam(d)`
$DIR/core/services/pipeline/task_params_test.go: `.DecimalParam(d)`
$DIR/core/services/pipeline/task_params_test.go: `.DecimalParam(d)`
$DIR/core/services/pipeline/task_params_test.go: `.DecimalParam(dNull)`
$DIR/core/services/pipeline/task_params_test.go: `.DecimalParam(dNull)`
$DIR/core/services/pipeline/task_params_test.go: `.DecimalParam(dNull)`
$DIR/core/services/pipeline/task_params_test.go: `.Run(test.name, func(t *testing.T) {
var p pipeline.DecimalParam
err := p.UnmarshalPipelineParam(test.input)
require.Equal(t, test.err, errors.Cause(err))
require.Equal(t, test.expected, p)
})`
$DIR/core/services/pipeline/task_params_test.go: `.UnmarshalPipelineParam(test.input)`
$DIR/core/services/pipeline/task_params_test.go: `.ParseRequestURI("https://chain.link/foo?bar=sergey")`
$DIR/core/services/pipeline/task_params_test.go: `.URLParam(*good)`
$DIR/core/services/pipeline/task_params_test.go: `.URLParam(url.URL{})`
$DIR/core/services/pipeline/task_params_test.go: `.URLParam(url.URL{})`
$DIR/core/services/pipeline/task_params_test.go: `.Run(test.name, func(t *testing.T) {
var p pipeline.URLParam
err := p.UnmarshalPipelineParam(test.input)
require.Equal(t, test.err, errors.Cause(err))
require.Equal(t, test.expected, p)
})`
$DIR/core/services/pipeline/task_params_test.go: `.UnmarshalPipelineParam(test.input)`
$DIR/core/services/pipeline/task_params_test.go: `.MapParam(nil)`
$DIR/core/services/pipeline/task_params_test.go: `.MapParam(nil)`
$DIR/core/services/pipeline/task_params_test.go: `.MapParam(nil)`
$DIR/core/services/pipeline/task_params_test.go: `.Run(test.name, func(t *testing.T) {
var p pipeline.MapParam
err := p.UnmarshalPipelineParam(test.input)
require.Equal(t, test.err, errors.Cause(err))
require.Equal(t, test.expected, p)
})`
$DIR/core/services/pipeline/task_params_test.go: `.UnmarshalPipelineParam(test.input)`
$DIR/core/services/pipeline/task_params_test.go: `.SliceParam([]interface{}{1, 2, 3})`
$DIR/core/services/pipeline/task_params_test.go: `.SliceParam([]interface{}{float64(1), float64(2), float64(3)})`
$DIR/core/services/pipeline/task_params_test.go: `.SliceParam([]interface{}{float64(1), float64(2), float64(3)})`
$DIR/core/services/pipeline/task_params_test.go: `.SliceParam(nil)`
$DIR/core/services/pipeline/task_params_test.go: `.SliceParam(nil)`
$DIR/core/services/pipeline/task_params_test.go: `.Run(test.name, func(t *testing.T) {
var p pipeline.SliceParam
err := p.UnmarshalPipelineParam(test.input)
require.Equal(t, test.err, errors.Cause(err))
require.Equal(t, test.expected, p)
})`
$DIR/core/services/pipeline/task_params_test.go: `.UnmarshalPipelineParam(test.input)`
$DIR/core/services/pipeline/task_params_test.go: `.HexToHash("0xdeadbeefdeadbeefdeadbeefdeadbeefdeadbeefdeadbeefdeadbeefdeadbeef")`
$DIR/core/services/pipeline/task_params_test.go: `.HexToHash("0xcafebabecafebabecafebabecafebabecafebabedeadbeefdeadbeefdeadbeef")`
$DIR/core/services/pipeline/task_params_test.go: `.String()`
$DIR/core/services/pipeline/task_params_test.go: `.String()`
$DIR/core/services/pipeline/task_params_test.go: `.String()`
$DIR/core/services/pipeline/task_params_test.go: `.String()`
$DIR/core/services/pipeline/task_params_test.go: `.HashSliceParam(nil)`
$DIR/core/services/pipeline/task_params_test.go: `.Run(test.name, func(t *testing.T) {
var p pipeline.HashSliceParam
err := p.UnmarshalPipelineParam(test.input)
require.Equal(t, test.err, errors.Cause(err))
if test.expected != nil {
require.Equal(t, test.expected, p)
}
})`
$DIR/core/services/pipeline/task_params_test.go: `.UnmarshalPipelineParam(test.input)`
$DIR/core/services/pipeline/task_params_test.go: `.New("bar")`
$DIR/core/services/pipeline/task_params_test.go: `.FilterErrors()`
$DIR/core/services/pipeline/task_params_test.go: `.DecimalSliceParam(nil)`
$DIR/core/services/pipeline/task_params_test.go: `.DecimalSliceParam(nil)`
$DIR/core/services/pipeline/task_params_test.go: `.DecimalSliceParam(nil)`
$DIR/core/services/pipeline/task_params_test.go: `.Run(test.name, func(t *testing.T) {
var p pipeline.DecimalSliceParam
err := p.UnmarshalPipelineParam(test.input)
require.Equal(t, test.err, errors.Cause(err))
require.Equal(t, test.expected, p)
})`
$DIR/core/services/pipeline/task_params_test.go: `.UnmarshalPipelineParam(test.input)`
$DIR/core/services/pipeline/task_params_test.go: `.JSONPathParam(nil)`
$DIR/core/services/pipeline/task_params_test.go: `.JSONPathParam(nil)`
$DIR/core/services/pipeline/task_params_test.go: `.Run(test.name, func(t *testing.T) {
var p pipeline.JSONPathParam
err := p.UnmarshalPipelineParam(test.input)
require.Equal(t, test.err, errors.Cause(err))
require.Equal(t, test.expected, p)
})`
$DIR/core/services/pipeline/task_params_test.go: `.UnmarshalPipelineParam(test.input)`
$DIR/core/services/pipeline/task_params_test.go: `.Run("calls getters in order until the first one that returns without ErrParameterEmpty", func(t *testing.T) {
param := mocks.NewPipelineParamUnmarshaler(t)
param.On("UnmarshalPipelineParam", mock.Anything).Return(nil)
called := []int{}
getters := []pipeline.GetterFunc{
func() (interface{}, error) {
called = append(called, 0)
return nil, errors.Wrap(pipeline.ErrParameterEmpty, "make sure it still notices when wrapped")
},
func() (interface{}, error) {
called = append(called, 1)
return 123, nil
},
func() (interface{}, error) {
called = append(called, 2)
return 123, nil
},
}
err := pipeline.ResolveParam(param, getters)
require.NoError(t, err)
require.Equal(t, []int{0, 1}, called)
})`
$DIR/core/services/pipeline/task_params_test.go: `.NewPipelineParamUnmarshaler(t)`
$DIR/core/services/pipeline/task_params_test.go: `.On("UnmarshalPipelineParam", mock.Anything)`
$DIR/core/services/pipeline/task_params_test.go: `.Return(nil)`
$DIR/core/services/pipeline/task_params_test.go: `.Wrap(pipeline.ErrParameterEmpty, "make sure it still notices when wrapped")`
$DIR/core/services/pipeline/task_params_test.go: `.ResolveParam(param, getters)`
$DIR/core/services/pipeline/task_params_test.go: `.Run("returns any GetterFunc error that isn't ErrParameterEmpty", func(t *testing.T) {
param := mocks.NewPipelineParamUnmarshaler(t)
called := []int{}
expectedErr := errors.New("some other issue")
getters := []pipeline.GetterFunc{
func() (interface{}, error) {
called = append(called, 0)
return nil, expectedErr
},
func() (interface{}, error) {
called = append(called, 1)
return 123, nil
},
func() (interface{}, error) {
called = append(called, 2)
return 123, nil
},
}
err := pipeline.ResolveParam(param, getters)
require.Equal(t, expectedErr, err)
require.Equal(t, []int{0}, called)
})`
$DIR/core/services/pipeline/task_params_test.go: `.NewPipelineParamUnmarshaler(t)`
$DIR/core/services/pipeline/task_params_test.go: `.New("some other issue")`
$DIR/core/services/pipeline/task_params_test.go: `.ResolveParam(param, getters)`
$DIR/core/services/pipeline/task_params_test.go: `.Run("calls UnmarshalPipelineParam with the value obtained from the GetterFuncs", func(t *testing.T) {
expectedValue := 123
param := mocks.NewPipelineParamUnmarshaler(t)
param.On("UnmarshalPipelineParam", expectedValue).Return(nil)
getters := []pipeline.GetterFunc{
func() (interface{}, error) {
return expectedValue, nil
},
}
err := pipeline.ResolveParam(param, getters)
require.NoError(t, err)
})`
$DIR/core/services/pipeline/task_params_test.go: `.NewPipelineParamUnmarshaler(t)`
$DIR/core/services/pipeline/task_params_test.go: `.On("UnmarshalPipelineParam", expectedValue)`
$DIR/core/services/pipeline/task_params_test.go: `.Return(nil)`
$DIR/core/services/pipeline/task_params_test.go: `.ResolveParam(param, getters)`
$DIR/core/services/pipeline/task_params_test.go: `.New("some issue")`
$DIR/core/services/pipeline/task_params_test.go: `.NewPipelineParamUnmarshaler(t)`
$DIR/core/services/pipeline/task_params_test.go: `.On("UnmarshalPipelineParam", expectedValue)`
$DIR/core/services/pipeline/task_params_test.go: `.Return(expectedErr)`
$DIR/core/services/pipeline/task_params_test.go: `.ResolveParam(param, getters)`
$DIR/core/services/pipeline/variables_test.go: `err = vars.Set(" ", "foo")`
$DIR/core/services/pipeline/variables_test.go: `err = vars.Set("x.y", "foo")`
$DIR/core/services/pipeline/variables_test.go: `t.Run("gets the values at keypaths that exist", func(t *testing.T) {
vars := pipeline.NewVarsFrom(map[string]interface{}{
"foo": []interface{}{1, "bar", false},
"bar": 321,
})
got, err := vars.Get("foo.1")
require.NoError(t, err)
require.Equal(t, "bar", got)
got, err = vars.Get("bar")
require.NoError(t, err)
require.Equal(t, 321, got)
})`
$DIR/core/services/pipeline/variables_test.go: `got, err = vars.Get("bar")`
$DIR/core/services/pipeline/variables_test.go: `t.Run("gets the value for a keypath with more than 2 parts", func(t *testing.T) {
vars := pipeline.NewVarsFrom(map[string]interface{}{
"foo": map[string]interface{}{
"bar": map[string]interface{}{
"chainlink": 123,
},
},
})
got, err := vars.Get("foo.bar.chainlink")
require.NoError(t, err)
require.Equal(t, 123, got)
})`
$DIR/core/services/pipeline/variables_test.go: `t.Run("gets the value with indices in the keypath", func(t *testing.T) {
vars := pipeline.NewVarsFrom(map[string]interface{}{
"foo": []interface{}{
nil,
map[string]interface{}{
"chainlink": 456,
},
},
})
got, err := vars.Get("foo.1.chainlink")
require.NoError(t, err)
require.Equal(t, 456, got)
})`
$DIR/core/services/pipeline/variables_test.go: `t.Run("errors when getting the values at keypaths that don't exist", func(t *testing.T) {
vars := pipeline.NewVarsFrom(map[string]interface{}{
"foo": []interface{}{1, "bar", false},
"bar": 321,
})
_, err := vars.Get("foo.blah")
require.Equal(t, pipeline.ErrKeypathNotFound, errors.Cause(err))
})`
$DIR/core/services/pipeline/variables_test.go: `t.Run("errors when getting a value at a keypath where the first part is not a map/slice", func(t *testing.T) {
vars := pipeline.NewVarsFrom(map[string]interface{}{
"foo": 123,
})
_, err := vars.Get("foo.bar")
require.Equal(t, pipeline.ErrKeypathNotFound, errors.Cause(err))
})`
$DIR/core/services/pipeline/variables_test.go: `t.Run("errors when getting a value at a keypath where the second part is not a map/slice", func(t *testing.T) {
vars := pipeline.NewVarsFrom(map[string]interface{}{
"foo": map[string]interface{}{
"bar": 123,
},
})
_, err := vars.Get("foo.bar.baz")
require.Equal(t, pipeline.ErrKeypathNotFound, errors.Cause(err))
})`
$DIR/core/services/pipeline/variables_test.go: `t.Run("errors when using a keypath with empty segments", func(t *testing.T) {
vars := pipeline.NewVarsFrom(map[string]interface{}{
"foo": map[string]interface{}{
"bar": 123,
},
})
_, err := vars.Get("foo..bar")
require.Equal(t, pipeline.ErrWrongKeypath, errors.Cause(err))
})`
$DIR/core/services/pipeline/variables_test.go: `_, err = vars.Get("foo.-1")`
$DIR/core/services/pipeline/variables_test.go: `.NewVarsFrom(nil)`
$DIR/core/services/pipeline/variables_test.go: `.Set("xyz", "foo")`
$DIR/core/services/pipeline/variables_test.go: `.Get("xyz")`
$DIR/core/services/pipeline/variables_test.go: `.Set(" ", "foo")`
$DIR/core/services/pipeline/variables_test.go: `.Set("x.y", "foo")`
$DIR/core/services/pipeline/variables_test.go: `.Run("gets the values at keypaths that exist", func(t *testing.T) {
vars := pipeline.NewVarsFrom(map[string]interface{}{
"foo": []interface{}{1, "bar", false},
"bar": 321,
})
got, err := vars.Get("foo.1")
require.NoError(t, err)
require.Equal(t, "bar", got)
got, err = vars.Get("bar")
require.NoError(t, err)
require.Equal(t, 321, got)
})`
$DIR/core/services/pipeline/variables_test.go: `.NewVarsFrom(map[string]interface{}{
"foo": []interface{}{1, "bar", false},
"bar": 321,
})`
$DIR/core/services/pipeline/variables_test.go: `.Get("foo.1")`
$DIR/core/services/pipeline/variables_test.go: `.Get("bar")`
$DIR/core/services/pipeline/variables_test.go: `.Run("gets the value for a keypath with more than 2 parts", func(t *testing.T) {
vars := pipeline.NewVarsFrom(map[string]interface{}{
"foo": map[string]interface{}{
"bar": map[string]interface{}{
"chainlink": 123,
},
},
})
got, err := vars.Get("foo.bar.chainlink")
require.NoError(t, err)
require.Equal(t, 123, got)
})`
$DIR/core/services/pipeline/variables_test.go: `.NewVarsFrom(map[string]interface{}{
"foo": map[string]interface{}{
"bar": map[string]interface{}{
"chainlink": 123,
},
},
})`
$DIR/core/services/pipeline/variables_test.go: `.Get("foo.bar.chainlink")`
$DIR/core/services/pipeline/variables_test.go: `.Run("gets the value with indices in the keypath", func(t *testing.T) {
vars := pipeline.NewVarsFrom(map[string]interface{}{
"foo": []interface{}{
nil,
map[string]interface{}{
"chainlink": 456,
},
},
})
got, err := vars.Get("foo.1.chainlink")
require.NoError(t, err)
require.Equal(t, 456, got)
})`
$DIR/core/services/pipeline/variables_test.go: `.NewVarsFrom(map[string]interface{}{
"foo": []interface{}{
nil,
map[string]interface{}{
"chainlink": 456,
},
},
})`
$DIR/core/services/pipeline/variables_test.go: `.Get("foo.1.chainlink")`
$DIR/core/services/pipeline/variables_test.go: `.Run("errors when getting the values at keypaths that don't exist", func(t *testing.T) {
vars := pipeline.NewVarsFrom(map[string]interface{}{
"foo": []interface{}{1, "bar", false},
"bar": 321,
})
_, err := vars.Get("foo.blah")
require.Equal(t, pipeline.ErrKeypathNotFound, errors.Cause(err))
})`
$DIR/core/services/pipeline/variables_test.go: `.NewVarsFrom(map[string]interface{}{
"foo": []interface{}{1, "bar", false},
"bar": 321,
})`
$DIR/core/services/pipeline/variables_test.go: `.Get("foo.blah")`
$DIR/core/services/pipeline/variables_test.go: `.Run("errors when getting a value at a keypath where the first part is not a map/slice", func(t *testing.T) {
vars := pipeline.NewVarsFrom(map[string]interface{}{
"foo": 123,
})
_, err := vars.Get("foo.bar")
require.Equal(t, pipeline.ErrKeypathNotFound, errors.Cause(err))
})`
$DIR/core/services/pipeline/variables_test.go: `.NewVarsFrom(map[string]interface{}{
"foo": 123,
})`
$DIR/core/services/pipeline/variables_test.go: `.Get("foo.bar")`
$DIR/core/services/pipeline/variables_test.go: `.Run("errors when getting a value at a keypath where the second part is not a map/slice", func(t *testing.T) {
vars := pipeline.NewVarsFrom(map[string]interface{}{
"foo": map[string]interface{}{
"bar": 123,
},
})
_, err := vars.Get("foo.bar.baz")
require.Equal(t, pipeline.ErrKeypathNotFound, errors.Cause(err))
})`
$DIR/core/services/pipeline/variables_test.go: `.NewVarsFrom(map[string]interface{}{
"foo": map[string]interface{}{
"bar": 123,
},
})`
$DIR/core/services/pipeline/variables_test.go: `.Get("foo.bar.baz")`
$DIR/core/services/pipeline/variables_test.go: `.Run("errors when using a keypath with empty segments", func(t *testing.T) {
vars := pipeline.NewVarsFrom(map[string]interface{}{
"foo": map[string]interface{}{
"bar": 123,
},
})
_, err := vars.Get("foo..bar")
require.Equal(t, pipeline.ErrWrongKeypath, errors.Cause(err))
})`
$DIR/core/services/pipeline/variables_test.go: `.NewVarsFrom(map[string]interface{}{
"foo": map[string]interface{}{
"bar": 123,
},
})`
$DIR/core/services/pipeline/variables_test.go: `.Get("foo..bar")`
$DIR/core/services/pipeline/variables_test.go: `.NewVarsFrom(map[string]interface{}{
"foo": []interface{}{1, "bar", false},
})`
$DIR/core/services/pipeline/variables_test.go: `.Get("foo.4")`
$DIR/core/services/pipeline/variables_test.go: `.Get("foo.-1")`
$DIR/core/services/pipeline/variables_test.go: `.NewVarsFrom(map[string]interface{}{
"nested": map[string]interface{}{
"foo": "zet",
},
"bar": 321,
})`
$DIR/core/services/pipeline/variables_test.go: `.Copy()`
$DIR/core/services/promreporter/prom_reporter_test.go: `t.Run("with nothing in the database", func(t *testing.T) {
db := pgtest.NewSqlxDB(t)
backend := mocks.NewPrometheusBackend(t)
reporter := promreporter.NewPromReporter(db, newLegacyChainContainer(t, db), logger.TestLogger(t), backend, 10*time.Millisecond)
var subscribeCalls atomic.Int32
backend.On("SetUnconfirmedTransactions", big.NewInt(0), int64(0)).Return()
backend.On("SetMaxUnconfirmedAge", big.NewInt(0), float64(0)).Return()
backend.On("SetMaxUnconfirmedBlocks", big.NewInt(0), int64(0)).Return()
backend.On("SetPipelineTaskRunsQueued", 0).Return()
backend.On("SetPipelineRunsQueued", 0).
Run(func(args mock.Arguments) {
subscribeCalls.Add(1)
}).
Return()
servicetest.Run(t, reporter)
head := newHead()
reporter.OnNewLongestChain(testutils.Context(t), &head)
require.Eventually(t, func() bool { return subscribeCalls.Load() >= 1 }, 12*time.Second, 100*time.Millisecond)
})`
$DIR/core/services/promreporter/prom_reporter_test.go: `backend.On("SetUnconfirmedTransactions", big.NewInt(0), int64(0)).Return()`
$DIR/core/services/promreporter/prom_reporter_test.go: `backend.On("SetMaxUnconfirmedAge", big.NewInt(0), float64(0)).Return()`
$DIR/core/services/promreporter/prom_reporter_test.go: `backend.On("SetMaxUnconfirmedBlocks", big.NewInt(0), int64(0)).Return()`
$DIR/core/services/promreporter/prom_reporter_test.go: `backend.On("SetPipelineTaskRunsQueued", 0).Return()`
$DIR/core/services/promreporter/prom_reporter_test.go: `backend.On("SetPipelineRunsQueued", 0).
Run(func(args mock.Arguments) {
subscribeCalls.Add(1)
}).
Return()`
$DIR/core/services/promreporter/prom_reporter_test.go: `subscribeCalls.Add(1)`
$DIR/core/services/promreporter/prom_reporter_test.go: `servicetest.Run(t, reporter)`
$DIR/core/services/promreporter/prom_reporter_test.go: `reporter.OnNewLongestChain(testutils.Context(t), &head)`
$DIR/core/services/promreporter/prom_reporter_test.go: `t.Run("with unconfirmed evm.txes", func(t *testing.T) {
db := pgtest.NewSqlxDB(t)
txStore := cltest.NewTestTxStore(t, db)
ethKeyStore := cltest.NewKeyStore(t, db).Eth()
_, fromAddress := cltest.MustInsertRandomKey(t, ethKeyStore)
var subscribeCalls atomic.Int32
backend := mocks.NewPrometheusBackend(t)
backend.On("SetUnconfirmedTransactions", big.NewInt(0), int64(3)).Return()
backend.On("SetMaxUnconfirmedAge", big.NewInt(0), mock.MatchedBy(func(s float64) bool {
return s > 0
})).Return()
backend.On("SetMaxUnconfirmedBlocks", big.NewInt(0), int64(35)).Return()
backend.On("SetPipelineTaskRunsQueued", 0).Return()
backend.On("SetPipelineRunsQueued", 0).
Run(func(args mock.Arguments) {
subscribeCalls.Add(1)
}).
Return()
reporter := promreporter.NewPromReporter(db, newLegacyChainContainer(t, db), logger.TestLogger(t), backend, 10*time.Millisecond)
servicetest.Run(t, reporter)
etx := cltest.MustInsertUnconfirmedEthTxWithBroadcastLegacyAttempt(t, txStore, 0, fromAddress)
cltest.MustInsertUnconfirmedEthTxWithBroadcastLegacyAttempt(t, txStore, 1, fromAddress)
cltest.MustInsertUnconfirmedEthTxWithBroadcastLegacyAttempt(t, txStore, 2, fromAddress)
require.NoError(t, txStore.UpdateTxAttemptBroadcastBeforeBlockNum(testutils.Context(t), etx.ID, 7))
head := newHead()
reporter.OnNewLongestChain(testutils.Context(t), &head)
require.Eventually(t, func() bool { return subscribeCalls.Load() >= 1 }, 12*time.Second, 100*time.Millisecond)
})`
$DIR/core/services/promreporter/prom_reporter_test.go: `backend.On("SetUnconfirmedTransactions", big.NewInt(0), int64(3)).Return()`
$DIR/core/services/promreporter/prom_reporter_test.go: `backend.On("SetMaxUnconfirmedAge", big.NewInt(0), mock.MatchedBy(func(s float64) bool {
return s > 0
})).Return()`
$DIR/core/services/promreporter/prom_reporter_test.go: `backend.On("SetMaxUnconfirmedBlocks", big.NewInt(0), int64(35)).Return()`
$DIR/core/services/promreporter/prom_reporter_test.go: `backend.On("SetPipelineTaskRunsQueued", 0).Return()`
$DIR/core/services/promreporter/prom_reporter_test.go: `backend.On("SetPipelineRunsQueued", 0).
Run(func(args mock.Arguments) {
subscribeCalls.Add(1)
}).
Return()`
$DIR/core/services/promreporter/prom_reporter_test.go: `subscribeCalls.Add(1)`
$DIR/core/services/promreporter/prom_reporter_test.go: `servicetest.Run(t, reporter)`
$DIR/core/services/promreporter/prom_reporter_test.go: `cltest.MustInsertUnconfirmedEthTxWithBroadcastLegacyAttempt(t, txStore, 1, fromAddress)`
$DIR/core/services/promreporter/prom_reporter_test.go: `cltest.MustInsertUnconfirmedEthTxWithBroadcastLegacyAttempt(t, txStore, 2, fromAddress)`
$DIR/core/services/promreporter/prom_reporter_test.go: `reporter.OnNewLongestChain(testutils.Context(t), &head)`
$DIR/core/services/promreporter/prom_reporter_test.go: `pgtest.MustExec(t, db, `SET CONSTRAINTS pipeline_task_runs_pipeline_run_id_fkey DEFERRED`)`
$DIR/core/services/promreporter/prom_reporter_test.go: `cltest.MustInsertUnfinishedPipelineTaskRun(t, db, 1)`
$DIR/core/services/promreporter/prom_reporter_test.go: `cltest.MustInsertUnfinishedPipelineTaskRun(t, db, 1)`
$DIR/core/services/promreporter/prom_reporter_test.go: `cltest.MustInsertUnfinishedPipelineTaskRun(t, db, 2)`
$DIR/core/services/promreporter/prom_reporter_test.go: `backend.On("SetUnconfirmedTransactions", big.NewInt(0), int64(0)).Return()`
$DIR/core/services/promreporter/prom_reporter_test.go: `backend.On("SetMaxUnconfirmedAge", big.NewInt(0), float64(0)).Return()`
$DIR/core/services/promreporter/prom_reporter_test.go: `backend.On("SetMaxUnconfirmedBlocks", big.NewInt(0), int64(0)).Return()`
$DIR/core/services/promreporter/prom_reporter_test.go: `backend.On("SetPipelineTaskRunsQueued", 3).Return()`
$DIR/core/services/promreporter/prom_reporter_test.go: `backend.On("SetPipelineRunsQueued", 2).
Run(func(args mock.Arguments) {
subscribeCalls.Add(1)
}).
Return()`
$DIR/core/services/promreporter/prom_reporter_test.go: `subscribeCalls.Add(1)`
$DIR/core/services/promreporter/prom_reporter_test.go: `servicetest.Run(t, reporter)`
$DIR/core/services/promreporter/prom_reporter_test.go: `reporter.OnNewLongestChain(testutils.Context(t), &head)`
$DIR/core/services/promreporter/prom_reporter_test.go: `.Run("with nothing in the database", func(t *testing.T) {
db := pgtest.NewSqlxDB(t)
backend := mocks.NewPrometheusBackend(t)
reporter := promreporter.NewPromReporter(db, newLegacyChainContainer(t, db), logger.TestLogger(t), backend, 10*time.Millisecond)
var subscribeCalls atomic.Int32
backend.On("SetUnconfirmedTransactions", big.NewInt(0), int64(0)).Return()
backend.On("SetMaxUnconfirmedAge", big.NewInt(0), float64(0)).Return()
backend.On("SetMaxUnconfirmedBlocks", big.NewInt(0), int64(0)).Return()
backend.On("SetPipelineTaskRunsQueued", 0).Return()
backend.On("SetPipelineRunsQueued", 0).
Run(func(args mock.Arguments) {
subscribeCalls.Add(1)
}).
Return()
servicetest.Run(t, reporter)
head := newHead()
reporter.OnNewLongestChain(testutils.Context(t), &head)
require.Eventually(t, func() bool { return subscribeCalls.Load() >= 1 }, 12*time.Second, 100*time.Millisecond)
})`
$DIR/core/services/promreporter/prom_reporter_test.go: `.NewSqlxDB(t)`
$DIR/core/services/promreporter/prom_reporter_test.go: `.NewPrometheusBackend(t)`
$DIR/core/services/promreporter/prom_reporter_test.go: `.NewPromReporter(db, newLegacyChainContainer(t, db), logger.TestLogger(t), backend, 10*time.Millisecond)`
$DIR/core/services/promreporter/prom_reporter_test.go: `.TestLogger(t)`
$DIR/core/services/promreporter/prom_reporter_test.go: `.On("SetUnconfirmedTransactions", big.NewInt(0), int64(0))`
$DIR/core/services/promreporter/prom_reporter_test.go: `.NewInt(0)`
$DIR/core/services/promreporter/prom_reporter_test.go: `.Return()`
$DIR/core/services/promreporter/prom_reporter_test.go: `.On("SetMaxUnconfirmedAge", big.NewInt(0), float64(0))`
$DIR/core/services/promreporter/prom_reporter_test.go: `.NewInt(0)`
$DIR/core/services/promreporter/prom_reporter_test.go: `.Return()`
$DIR/core/services/promreporter/prom_reporter_test.go: `.On("SetMaxUnconfirmedBlocks", big.NewInt(0), int64(0))`
$DIR/core/services/promreporter/prom_reporter_test.go: `.NewInt(0)`
$DIR/core/services/promreporter/prom_reporter_test.go: `.Return()`
$DIR/core/services/promreporter/prom_reporter_test.go: `.On("SetPipelineTaskRunsQueued", 0)`
$DIR/core/services/promreporter/prom_reporter_test.go: `.Return()`
$DIR/core/services/promreporter/prom_reporter_test.go: `.On("SetPipelineRunsQueued", 0)`
$DIR/core/services/promreporter/prom_reporter_test.go: `.
Run(func(args mock.Arguments) {
subscribeCalls.Add(1)
})`
$DIR/core/services/promreporter/prom_reporter_test.go: `.Add(1)`
$DIR/core/services/promreporter/prom_reporter_test.go: `.
Return()`
$DIR/core/services/promreporter/prom_reporter_test.go: `.Run(t, reporter)`
$DIR/core/services/promreporter/prom_reporter_test.go: `.OnNewLongestChain(testutils.Context(t), &head)`
$DIR/core/services/promreporter/prom_reporter_test.go: `.Context(t)`
$DIR/core/services/promreporter/prom_reporter_test.go: `.Run("with unconfirmed evm.txes", func(t *testing.T) {
db := pgtest.NewSqlxDB(t)
txStore := cltest.NewTestTxStore(t, db)
ethKeyStore := cltest.NewKeyStore(t, db).Eth()
_, fromAddress := cltest.MustInsertRandomKey(t, ethKeyStore)
var subscribeCalls atomic.Int32
backend := mocks.NewPrometheusBackend(t)
backend.On("SetUnconfirmedTransactions", big.NewInt(0), int64(3)).Return()
backend.On("SetMaxUnconfirmedAge", big.NewInt(0), mock.MatchedBy(func(s float64) bool {
return s > 0
})).Return()
backend.On("SetMaxUnconfirmedBlocks", big.NewInt(0), int64(35)).Return()
backend.On("SetPipelineTaskRunsQueued", 0).Return()
backend.On("SetPipelineRunsQueued", 0).
Run(func(args mock.Arguments) {
subscribeCalls.Add(1)
}).
Return()
reporter := promreporter.NewPromReporter(db, newLegacyChainContainer(t, db), logger.TestLogger(t), backend, 10*time.Millisecond)
servicetest.Run(t, reporter)
etx := cltest.MustInsertUnconfirmedEthTxWithBroadcastLegacyAttempt(t, txStore, 0, fromAddress)
cltest.MustInsertUnconfirmedEthTxWithBroadcastLegacyAttempt(t, txStore, 1, fromAddress)
cltest.MustInsertUnconfirmedEthTxWithBroadcastLegacyAttempt(t, txStore, 2, fromAddress)
require.NoError(t, txStore.UpdateTxAttemptBroadcastBeforeBlockNum(testutils.Context(t), etx.ID, 7))
head := newHead()
reporter.OnNewLongestChain(testutils.Context(t), &head)
require.Eventually(t, func() bool { return subscribeCalls.Load() >= 1 }, 12*time.Second, 100*time.Millisecond)
})`
$DIR/core/services/promreporter/prom_reporter_test.go: `.NewSqlxDB(t)`
$DIR/core/services/promreporter/prom_reporter_test.go: `.NewTestTxStore(t, db)`
$DIR/core/services/promreporter/prom_reporter_test.go: `.NewKeyStore(t, db)`
$DIR/core/services/promreporter/prom_reporter_test.go: `.Eth()`
$DIR/core/services/promreporter/prom_reporter_test.go: `.MustInsertRandomKey(t, ethKeyStore)`
$DIR/core/services/promreporter/prom_reporter_test.go: `.NewPrometheusBackend(t)`
$DIR/core/services/promreporter/prom_reporter_test.go: `.On("SetUnconfirmedTransactions", big.NewInt(0), int64(3))`
$DIR/core/services/promreporter/prom_reporter_test.go: `.NewInt(0)`
$DIR/core/services/promreporter/prom_reporter_test.go: `.Return()`
$DIR/core/services/promreporter/prom_reporter_test.go: `.On("SetMaxUnconfirmedAge", big.NewInt(0), mock.MatchedBy(func(s float64) bool {
return s > 0
}))`
$DIR/core/services/promreporter/prom_reporter_test.go: `.NewInt(0)`
$DIR/core/services/promreporter/prom_reporter_test.go: `.MatchedBy(func(s float64) bool {
return s > 0
})`
$DIR/core/services/promreporter/prom_reporter_test.go: `.Return()`
$DIR/core/services/promreporter/prom_reporter_test.go: `.On("SetMaxUnconfirmedBlocks", big.NewInt(0), int64(35))`
$DIR/core/services/promreporter/prom_reporter_test.go: `.NewInt(0)`
$DIR/core/services/promreporter/prom_reporter_test.go: `.Return()`
$DIR/core/services/promreporter/prom_reporter_test.go: `.On("SetPipelineTaskRunsQueued", 0)`
$DIR/core/services/promreporter/prom_reporter_test.go: `.Return()`
$DIR/core/services/promreporter/prom_reporter_test.go: `.On("SetPipelineRunsQueued", 0)`
$DIR/core/services/promreporter/prom_reporter_test.go: `.
Run(func(args mock.Arguments) {
subscribeCalls.Add(1)
})`
$DIR/core/services/promreporter/prom_reporter_test.go: `.Add(1)`
$DIR/core/services/promreporter/prom_reporter_test.go: `.
Return()`
$DIR/core/services/promreporter/prom_reporter_test.go: `.NewPromReporter(db, newLegacyChainContainer(t, db), logger.TestLogger(t), backend, 10*time.Millisecond)`
$DIR/core/services/promreporter/prom_reporter_test.go: `.TestLogger(t)`
$DIR/core/services/promreporter/prom_reporter_test.go: `.Run(t, reporter)`
$DIR/core/services/promreporter/prom_reporter_test.go: `.MustInsertUnconfirmedEthTxWithBroadcastLegacyAttempt(t, txStore, 0, fromAddress)`
$DIR/core/services/promreporter/prom_reporter_test.go: `.MustInsertUnconfirmedEthTxWithBroadcastLegacyAttempt(t, txStore, 1, fromAddress)`
$DIR/core/services/promreporter/prom_reporter_test.go: `.MustInsertUnconfirmedEthTxWithBroadcastLegacyAttempt(t, txStore, 2, fromAddress)`
$DIR/core/services/promreporter/prom_reporter_test.go: `.OnNewLongestChain(testutils.Context(t), &head)`
$DIR/core/services/promreporter/prom_reporter_test.go: `.Context(t)`
$DIR/core/services/promreporter/prom_reporter_test.go: `.NewSqlxDB(t)`
$DIR/core/services/promreporter/prom_reporter_test.go: `.MustExec(t, db, `SET CONSTRAINTS pipeline_task_runs_pipeline_run_id_fkey DEFERRED`)`
$DIR/core/services/promreporter/prom_reporter_test.go: `.NewPrometheusBackend(t)`
$DIR/core/services/promreporter/prom_reporter_test.go: `.NewPromReporter(db, newLegacyChainContainer(t, db), logger.TestLogger(t), backend, 10*time.Millisecond)`
$DIR/core/services/promreporter/prom_reporter_test.go: `.TestLogger(t)`
$DIR/core/services/promreporter/prom_reporter_test.go: `.MustInsertUnfinishedPipelineTaskRun(t, db, 1)`
$DIR/core/services/promreporter/prom_reporter_test.go: `.MustInsertUnfinishedPipelineTaskRun(t, db, 1)`
$DIR/core/services/promreporter/prom_reporter_test.go: `.MustInsertUnfinishedPipelineTaskRun(t, db, 2)`
$DIR/core/services/promreporter/prom_reporter_test.go: `.On("SetUnconfirmedTransactions", big.NewInt(0), int64(0))`
$DIR/core/services/promreporter/prom_reporter_test.go: `.NewInt(0)`
$DIR/core/services/promreporter/prom_reporter_test.go: `.Return()`
$DIR/core/services/promreporter/prom_reporter_test.go: `.On("SetMaxUnconfirmedAge", big.NewInt(0), float64(0))`
$DIR/core/services/promreporter/prom_reporter_test.go: `.NewInt(0)`
$DIR/core/services/promreporter/prom_reporter_test.go: `.Return()`
$DIR/core/services/promreporter/prom_reporter_test.go: `.On("SetMaxUnconfirmedBlocks", big.NewInt(0), int64(0))`
$DIR/core/services/promreporter/prom_reporter_test.go: `.NewInt(0)`
$DIR/core/services/promreporter/prom_reporter_test.go: `.Return()`
$DIR/core/services/promreporter/prom_reporter_test.go: `.On("SetPipelineTaskRunsQueued", 3)`
$DIR/core/services/promreporter/prom_reporter_test.go: `.Return()`
$DIR/core/services/promreporter/prom_reporter_test.go: `.On("SetPipelineRunsQueued", 2)`
$DIR/core/services/promreporter/prom_reporter_test.go: `.
Run(func(args mock.Arguments) {
subscribeCalls.Add(1)
})`
$DIR/core/services/promreporter/prom_reporter_test.go: `.Add(1)`
$DIR/core/services/promreporter/prom_reporter_test.go: `.
Return()`
$DIR/core/services/promreporter/prom_reporter_test.go: `.Run(t, reporter)`
$DIR/core/services/promreporter/prom_reporter_test.go: `.OnNewLongestChain(testutils.Context(t), &head)`
$DIR/core/services/promreporter/prom_reporter_test.go: `.Context(t)`
$DIR/core/services/relay/evm/cap_encoder_test.go: `wrapped, err = values.NewMap(input)`
$DIR/core/services/relay/evm/cap_encoder_test.go: `wrapped, err = values.NewMap(input)`
$DIR/core/services/relay/evm/cap_encoder_test.go: `wrapped, err = values.NewMap(input)`
$DIR/core/services/relay/evm/cap_encoder_test.go: `wrapped, err = values.NewMap(input)`
$DIR/core/services/relay/evm/cap_encoder_test.go: `wrapped, err = values.NewMap(input)`
$DIR/core/services/relay/evm/cap_encoder_test.go: `_, err = enc.Encode(testutils.Context(t), *wrapped)`
$DIR/core/services/relay/evm/cap_encoder_test.go: `input = map[string]any{
"Full_reports": []any{reportA, reportB},
consensustypes.MetadataFieldName: getMetadata(wrongLength),
}`
$DIR/core/services/relay/evm/cap_encoder_test.go: `wrapped, err = values.NewMap(input)`
$DIR/core/services/relay/evm/cap_encoder_test.go: `_, err = enc.Encode(testutils.Context(t), *wrapped)`
$DIR/core/services/relay/evm/cap_encoder_test.go: `.NewMap(config)`
$DIR/core/services/relay/evm/cap_encoder_test.go: `.NewEVMEncoder(wrapped)`
$DIR/core/services/relay/evm/cap_encoder_test.go: `.NewMap(input)`
$DIR/core/services/relay/evm/cap_encoder_test.go: `.Encode(testutils.Context(t), *wrapped)`
$DIR/core/services/relay/evm/cap_encoder_test.go: `.Context(t)`
$DIR/core/services/relay/evm/cap_encoder_test.go: `.EncodeToString(encoded)`
$DIR/core/services/relay/evm/cap_encoder_test.go: `.NewMap(config)`
$DIR/core/services/relay/evm/cap_encoder_test.go: `.NewEVMEncoder(wrapped)`
$DIR/core/services/relay/evm/cap_encoder_test.go: `.NewInt(234)`
$DIR/core/services/relay/evm/cap_encoder_test.go: `.NewInt(456)`
$DIR/core/services/relay/evm/cap_encoder_test.go: `.NewMap(input)`
$DIR/core/services/relay/evm/cap_encoder_test.go: `.Encode(testutils.Context(t), *wrapped)`
$DIR/core/services/relay/evm/cap_encoder_test.go: `.Context(t)`
$DIR/core/services/relay/evm/cap_encoder_test.go: `.EncodeToString(encoded)`
$DIR/core/services/relay/evm/cap_encoder_test.go: `.NewMap(config)`
$DIR/core/services/relay/evm/cap_encoder_test.go: `.NewEVMEncoder(wrapped)`
$DIR/core/services/relay/evm/cap_encoder_test.go: `.NewInt(234)`
$DIR/core/services/relay/evm/cap_encoder_test.go: `.NewInt(456)`
$DIR/core/services/relay/evm/cap_encoder_test.go: `.NewMap(input)`
$DIR/core/services/relay/evm/cap_encoder_test.go: `.Encode(testutils.Context(t), *wrapped)`
$DIR/core/services/relay/evm/cap_encoder_test.go: `.Context(t)`
$DIR/core/services/relay/evm/cap_encoder_test.go: `.EncodeToString(encoded)`
$DIR/core/services/relay/evm/cap_encoder_test.go: `.NewMap(config)`
$DIR/core/services/relay/evm/cap_encoder_test.go: `.NewEVMEncoder(wrapped)`
$DIR/core/services/relay/evm/cap_encoder_test.go: `.NewInt(234)`
$DIR/core/services/relay/evm/cap_encoder_test.go: `.NewInt(456)`
$DIR/core/services/relay/evm/cap_encoder_test.go: `.NewMap(input)`
$DIR/core/services/relay/evm/cap_encoder_test.go: `.Encode(testutils.Context(t), *wrapped)`
$DIR/core/services/relay/evm/cap_encoder_test.go: `.Context(t)`
$DIR/core/services/relay/evm/cap_encoder_test.go: `.EncodeToString(encoded)`
$DIR/core/services/relay/evm/cap_encoder_test.go: `.NewMap(config)`
$DIR/core/services/relay/evm/cap_encoder_test.go: `.NewEVMEncoder(wrapped)`
$DIR/core/services/relay/evm/cap_encoder_test.go: `.NewMap(input)`
$DIR/core/services/relay/evm/cap_encoder_test.go: `.Encode(testutils.Context(t), *wrapped)`
$DIR/core/services/relay/evm/cap_encoder_test.go: `.Context(t)`
$DIR/core/services/relay/evm/cap_encoder_test.go: `.NewMap(input)`
$DIR/core/services/relay/evm/cap_encoder_test.go: `.Encode(testutils.Context(t), *wrapped)`
$DIR/core/services/relay/evm/cap_encoder_test.go: `.Context(t)`
$DIR/core/services/relay/evm/chain_reader_test.go: `RunChainReaderInterfaceTests(t, it)`
$DIR/core/services/relay/evm/chain_reader_test.go: `RunChainReaderInterfaceTests(t, commontestutils.WrapChainReaderTesterForLoop(it))`
$DIR/core/services/relay/evm/chain_reader_test.go: `t.Run("Dynamically typed topics can be used to filter and have type correct in return", func(t *testing.T) {
it.Setup(t)
// bind event before firing it to avoid log poller race
ctx := testutils.Context(t)
cr := it.GetChainReader(t)
require.NoError(t, cr.Bind(ctx, it.GetBindings(t)))
anyString := "foo"
tx, err := it.evmTest.TriggerEventWithDynamicTopic(it.auth, anyString)
require.NoError(t, err)
it.sim.Commit()
it.incNonce()
it.awaitTx(t, tx)
input := struct{ Field string }{Field: anyString}
tp := cr.(clcommontypes.ContractTypeProvider)
output, err := tp.CreateContractType(AnyContractName, triggerWithDynamicTopic, false)
require.NoError(t, err)
rOutput := reflect.Indirect(reflect.ValueOf(output))
require.Eventually(t, func() bool {
return cr.GetLatestValue(ctx, AnyContractName, triggerWithDynamicTopic, input, output) == nil
}, it.MaxWaitTimeForEvents(), time.Millisecond*10)
assert.Equal(t, &anyString, rOutput.FieldByName("Field").Interface())
topic, err := abi.MakeTopics([]any{anyString})
require.NoError(t, err)
assert.Equal(t, &topic[0][0], rOutput.FieldByName("FieldHash").Interface())
})`
$DIR/core/services/relay/evm/chain_reader_test.go: `it.Setup(t)`
$DIR/core/services/relay/evm/chain_reader_test.go: `it.sim.Commit()`
$DIR/core/services/relay/evm/chain_reader_test.go: `it.incNonce()`
$DIR/core/services/relay/evm/chain_reader_test.go: `it.awaitTx(t, tx)`
$DIR/core/services/relay/evm/chain_reader_test.go: `it.Setup(t)`
$DIR/core/services/relay/evm/chain_reader_test.go: `triggerFourTopics(t, it, int32(1), int32(2), int32(3))`
$DIR/core/services/relay/evm/chain_reader_test.go: `triggerFourTopics(t, it, int32(2), int32(2), int32(3))`
$DIR/core/services/relay/evm/chain_reader_test.go: `triggerFourTopics(t, it, int32(1), int32(3), int32(3))`
$DIR/core/services/relay/evm/chain_reader_test.go: `triggerFourTopics(t, it, int32(1), int32(2), int32(4))`
$DIR/core/services/relay/evm/chain_reader_test.go: `.WrapChainReaderTesterForLoop(it)`
$DIR/core/services/relay/evm/chain_reader_test.go: `.Run("Dynamically typed topics can be used to filter and have type correct in return", func(t *testing.T) {
it.Setup(t)
// bind event before firing it to avoid log poller race
ctx := testutils.Context(t)
cr := it.GetChainReader(t)
require.NoError(t, cr.Bind(ctx, it.GetBindings(t)))
anyString := "foo"
tx, err := it.evmTest.TriggerEventWithDynamicTopic(it.auth, anyString)
require.NoError(t, err)
it.sim.Commit()
it.incNonce()
it.awaitTx(t, tx)
input := struct{ Field string }{Field: anyString}
tp := cr.(clcommontypes.ContractTypeProvider)
output, err := tp.CreateContractType(AnyContractName, triggerWithDynamicTopic, false)
require.NoError(t, err)
rOutput := reflect.Indirect(reflect.ValueOf(output))
require.Eventually(t, func() bool {
return cr.GetLatestValue(ctx, AnyContractName, triggerWithDynamicTopic, input, output) == nil
}, it.MaxWaitTimeForEvents(), time.Millisecond*10)
assert.Equal(t, &anyString, rOutput.FieldByName("Field").Interface())
topic, err := abi.MakeTopics([]any{anyString})
require.NoError(t, err)
assert.Equal(t, &topic[0][0], rOutput.FieldByName("FieldHash").Interface())
})`
$DIR/core/services/relay/evm/chain_reader_test.go: `.Setup(t)`
$DIR/core/services/relay/evm/chain_reader_test.go: `.Context(t)`
$DIR/core/services/relay/evm/chain_reader_test.go: `.GetChainReader(t)`
$DIR/core/services/relay/evm/chain_reader_test.go: `.evmTest.TriggerEventWithDynamicTopic(it.auth, anyString)`
$DIR/core/services/relay/evm/chain_reader_test.go: `.sim.Commit()`
$DIR/core/services/relay/evm/chain_reader_test.go: `.incNonce()`
$DIR/core/services/relay/evm/chain_reader_test.go: `.awaitTx(t, tx)`
$DIR/core/services/relay/evm/chain_reader_test.go: `.CreateContractType(AnyContractName, triggerWithDynamicTopic, false)`
$DIR/core/services/relay/evm/chain_reader_test.go: `.Indirect(reflect.ValueOf(output))`
$DIR/core/services/relay/evm/chain_reader_test.go: `.ValueOf(output)`
$DIR/core/services/relay/evm/chain_reader_test.go: `.MakeTopics([]any{anyString})`
$DIR/core/services/relay/evm/chain_reader_test.go: `.Setup(t)`
$DIR/core/services/relay/evm/chain_reader_test.go: `.Context(t)`
$DIR/core/services/relay/evm/chain_reader_test.go: `.GetChainReader(t)`
$DIR/core/services/relay/evm/codec_test.go: `RunCodecInterfaceTests(t, tester)`
$DIR/core/services/relay/evm/codec_test.go: `RunCodecInterfaceTests(t, looptestutils.WrapCodecTesterForLoop(tester))`
$DIR/core/services/relay/evm/codec_test.go: `t.Run("GetMaxEncodingSize delegates to GetMaxSize", func(t *testing.T) {
actual, err := c.GetMaxEncodingSize(testutils.Context(t), anyN, sizeItemType)
assert.NoError(t, err)
expected, err := types.GetMaxSize(anyN, parseDefs(t)[sizeItemType])
require.NoError(t, err)
assert.Equal(t, expected, actual)
})`
$DIR/core/services/relay/evm/codec_test.go: `.WrapCodecTesterForLoop(tester)`
$DIR/core/services/relay/evm/codec_test.go: `.GetCodec(t)`
$DIR/core/services/relay/evm/codec_test.go: `.Run("GetMaxEncodingSize delegates to GetMaxSize", func(t *testing.T) {
actual, err := c.GetMaxEncodingSize(testutils.Context(t), anyN, sizeItemType)
assert.NoError(t, err)
expected, err := types.GetMaxSize(anyN, parseDefs(t)[sizeItemType])
require.NoError(t, err)
assert.Equal(t, expected, actual)
})`
$DIR/core/services/relay/evm/codec_test.go: `.GetMaxEncodingSize(testutils.Context(t), anyN, sizeItemType)`
$DIR/core/services/relay/evm/codec_test.go: `.Context(t)`
$DIR/core/services/relay/evm/codec_test.go: `.GetMaxSize(anyN, parseDefs(t)[sizeItemType])`
$DIR/core/services/relay/evm/codec_test.go: `.GetMaxDecodingSize(testutils.Context(t), anyN, sizeItemType)`
$DIR/core/services/relay/evm/codec_test.go: `.Context(t)`
$DIR/core/services/relay/evm/codec_test.go: `.GetMaxSize(anyN, parseDefs(t)[sizeItemType])`
$DIR/core/services/relay/evm/codec_test.go: `.NewCodec(codecConfig)`
$DIR/core/services/relay/evm/codec_test.go: `.Encode(testutils.Context(t), input, codecName)`
$DIR/core/services/relay/evm/codec_test.go: `.Context(t)`
$DIR/core/services/relay/evm/codec_test.go: `.Encode(result)`
$DIR/core/services/relay/evm/codec_test.go: `.NewCodec(codecConfig)`
$DIR/core/services/relay/evm/codec_test.go: `.Encode(testutils.Context(t), input, codecName)`
$DIR/core/services/relay/evm/codec_test.go: `.Context(t)`
$DIR/core/services/relay/evm/codec_test.go: `.Encode(result)`
$DIR/core/services/relay/evm/codec_test.go: `.NewInt(234)`
$DIR/core/services/relay/evm/codec_test.go: `.NewInt(456)`
$DIR/core/services/relay/evm/codec_test.go: `.NewCodec(codecConfig)`
$DIR/core/services/relay/evm/codec_test.go: `.Encode(testutils.Context(t), input, codecName)`
$DIR/core/services/relay/evm/codec_test.go: `.Context(t)`
$DIR/core/services/relay/evm/codec_test.go: `.Encode(result)`
$DIR/core/services/relay/evm/config_poller_test.go: `user, err = bind.NewKeyedTransactorWithChainID(key, big.NewInt(1337))`
$DIR/core/services/relay/evm/config_poller_test.go: `b = backends.NewSimulatedBackend(core.GenesisAlloc{
user.From: {Balance: big.NewInt(1000000000000000000)}},
5*ethconfig.Defaults.Miner.GasCeil)`
$DIR/core/services/relay/evm/config_poller_test.go: `linkTokenAddress, _, _, err = link_token_interface.DeployLinkToken(user, b)`
$DIR/core/services/relay/evm/config_poller_test.go: `accessAddress, _, _, err = testoffchainaggregator2.DeploySimpleWriteAccessController(user, b)`
$DIR/core/services/relay/evm/config_poller_test.go: `ocrAddress, _, ocrContract, err = ocr2aggregator.DeployOCR2Aggregator(
user,
b,
linkTokenAddress,
big.NewInt(0),
big.NewInt(10),
accessAddress,
accessAddress,
9,
"TEST",
)`
$DIR/core/services/relay/evm/config_poller_test.go: `configStoreContractAddr, _, configStoreContract, err = ocrconfigurationstoreevmsimple.DeployOCRConfigurationStoreEVMSimple(user, b)`
$DIR/core/services/relay/evm/config_poller_test.go: `b.Commit()`
$DIR/core/services/relay/evm/config_poller_test.go: `ethClient = evmclient.NewSimulatedBackendClient(t, b, testutils.SimulatedChainID)`
$DIR/core/services/relay/evm/config_poller_test.go: `lp = logpoller.NewLogPoller(lorm, ethClient, lggr, lpOpts)`
$DIR/core/services/relay/evm/config_poller_test.go: `servicetest.Run(t, lp)`
$DIR/core/services/relay/evm/config_poller_test.go: `t.Run("LatestConfig errors if there is no config in logs and config store is unconfigured", func(t *testing.T) {
cp, err := NewConfigPoller(ctx, lggr, CPConfig{ethClient, lp, ocrAddress, nil, ld})
require.NoError(t, err)
_, err = cp.LatestConfig(testutils.Context(t), 0)
require.Error(t, err)
assert.Contains(t, err.Error(), "no logs found for config on contract")
})`
$DIR/core/services/relay/evm/config_poller_test.go: `_, err = cp.LatestConfig(testutils.Context(t), 0)`
$DIR/core/services/relay/evm/config_poller_test.go: `t.Run("happy path (with config store)", func(t *testing.T) {
cp, err := NewConfigPoller(ctx, lggr, CPConfig{ethClient, lp, ocrAddress, &configStoreContractAddr, ld})
require.NoError(t, err)
// Should have no config to begin with.
_, configDigest, err := cp.LatestConfigDetails(testutils.Context(t))
require.NoError(t, err)
require.Equal(t, ocrtypes2.ConfigDigest{}, configDigest)
// Should error because there are no logs for config at block 0
_, err = cp.LatestConfig(testutils.Context(t), 0)
require.Error(t, err)
assert.Contains(t, err.Error(), "config details missing while trying to lookup config in store")
// Set the config
contractConfig := setConfig(t, median.OffchainConfig{
AlphaReportInfinite: false,
AlphaReportPPB: 0,
AlphaAcceptInfinite: true,
AlphaAcceptPPB: 0,
DeltaC: 10,
}, ocrContract, user)
b.Commit()
latest, err := b.BlockByNumber(testutils.Context(t), nil)
require.NoError(t, err)
// Ensure we capture this config set log.
require.NoError(t, lp.Replay(testutils.Context(t), latest.Number().Int64()-1))
// Send blocks until we see the config updated.
var configBlock uint64
var digest [32]byte
gomega.NewGomegaWithT(t).Eventually(func() bool {
b.Commit()
configBlock, digest, err = cp.LatestConfigDetails(testutils.Context(t))
require.NoError(t, err)
return ocrtypes2.ConfigDigest{} != digest
}, testutils.WaitTimeout(t), 100*time.Millisecond).Should(gomega.BeTrue())
// Assert the config returned is the one we configured.
newConfig, err := cp.LatestConfig(testutils.Context(t), configBlock)
require.NoError(t, err)
// Note we don't check onchainConfig, as that is populated in the contract itself.
assert.Equal(t, digest, [32]byte(newConfig.ConfigDigest))
assert.Equal(t, contractConfig.Signers, newConfig.Signers)
assert.Equal(t, contractConfig.Transmitters, newConfig.Transmitters)
assert.Equal(t, contractConfig.F, newConfig.F)
assert.Equal(t, contractConfig.OffchainConfigVersion, newConfig.OffchainConfigVersion)
assert.Equal(t, contractConfig.OffchainConfig, newConfig.OffchainConfig)
})`
$DIR/core/services/relay/evm/config_poller_test.go: `_, err = cp.LatestConfig(testutils.Context(t), 0)`
$DIR/core/services/relay/evm/config_poller_test.go: `b.Commit()`
$DIR/core/services/relay/evm/config_poller_test.go: `gomega.NewGomegaWithT(t).Eventually(func() bool {
b.Commit()
configBlock, digest, err = cp.LatestConfigDetails(testutils.Context(t))
require.NoError(t, err)
return ocrtypes2.ConfigDigest{} != digest
}, testutils.WaitTimeout(t), 100*time.Millisecond).Should(gomega.BeTrue())`
$DIR/core/services/relay/evm/config_poller_test.go: `b.Commit()`
$DIR/core/services/relay/evm/config_poller_test.go: `configBlock, digest, err = cp.LatestConfigDetails(testutils.Context(t))`
$DIR/core/services/relay/evm/config_poller_test.go: `ocrAddress, _, ocrContract, err = ocr2aggregator.DeployOCR2Aggregator(
user,
b,
linkTokenAddress,
big.NewInt(0),
big.NewInt(10),
accessAddress,
accessAddress,
9,
"TEST",
)`
$DIR/core/services/relay/evm/config_poller_test.go: `b.Commit()`
$DIR/core/services/relay/evm/config_poller_test.go: `t.Run("LatestConfigDetails, when logs have been pruned and config store contract is configured", func(t *testing.T) {
// Give it a log poller that will never return logs
mp := new(mocks.LogPoller)
mp.On("RegisterFilter", mock.Anything, mock.Anything).Return(nil)
mp.On("LatestLogByEventSigWithConfs", mock.Anything, mock.Anything, mock.Anything, mock.Anything).Return(nil, sql.ErrNoRows)
t.Run("if callLatestConfigDetails succeeds", func(t *testing.T) {
cp, err := newConfigPoller(ctx, lggr, ethClient, mp, ocrAddress, &configStoreContractAddr, ld)
require.NoError(t, err)
t.Run("when config has not been set, returns zero values", func(t *testing.T) {
changedInBlock, configDigest, err := cp.LatestConfigDetails(testutils.Context(t))
require.NoError(t, err)
assert.Equal(t, 0, int(changedInBlock))
assert.Equal(t, ocrtypes.ConfigDigest{}, configDigest)
})
t.Run("when config has been set, returns config details", func(t *testing.T) {
setConfig(t, median.OffchainConfig{
AlphaReportInfinite: false,
AlphaReportPPB: 0,
AlphaAcceptInfinite: true,
AlphaAcceptPPB: 0,
DeltaC: 10,
}, ocrContract, user)
b.Commit()
changedInBlock, configDigest, err := cp.LatestConfigDetails(testutils.Context(t))
require.NoError(t, err)
latest, err := b.BlockByNumber(testutils.Context(t), nil)
require.NoError(t, err)
onchainDetails, err := ocrContract.LatestConfigDetails(nil)
require.NoError(t, err)
assert.Equal(t, latest.Number().Int64(), int64(changedInBlock))
assert.Equal(t, onchainDetails.ConfigDigest, [32]byte(configDigest))
})
})
t.Run("returns error if callLatestConfigDetails fails", func(t *testing.T) {
failingClient := new(evmClientMocks.Client)
failingClient.On("ConfiguredChainID").Return(big.NewInt(42))
failingClient.On("CallContract", mock.Anything, mock.Anything, mock.Anything).Return(nil, errors.New("something exploded"))
cp, err := newConfigPoller(ctx, lggr, failingClient, mp, ocrAddress, &configStoreContractAddr, ld)
require.NoError(t, err)
cp.configStoreContractAddr = &configStoreContractAddr
cp.configStoreContract = configStoreContract
_, _, err = cp.LatestConfigDetails(testutils.Context(t))
assert.EqualError(t, err, "something exploded")
failingClient.AssertExpectations(t)
})
})`
$DIR/core/services/relay/evm/config_poller_test.go: `mp.On("RegisterFilter", mock.Anything, mock.Anything).Return(nil)`
$DIR/core/services/relay/evm/config_poller_test.go: `mp.On("LatestLogByEventSigWithConfs", mock.Anything, mock.Anything, mock.Anything, mock.Anything).Return(nil, sql.ErrNoRows)`
$DIR/core/services/relay/evm/config_poller_test.go: `t.Run("if callLatestConfigDetails succeeds", func(t *testing.T) {
cp, err := newConfigPoller(ctx, lggr, ethClient, mp, ocrAddress, &configStoreContractAddr, ld)
require.NoError(t, err)
t.Run("when config has not been set, returns zero values", func(t *testing.T) {
changedInBlock, configDigest, err := cp.LatestConfigDetails(testutils.Context(t))
require.NoError(t, err)
assert.Equal(t, 0, int(changedInBlock))
assert.Equal(t, ocrtypes.ConfigDigest{}, configDigest)
})
t.Run("when config has been set, returns config details", func(t *testing.T) {
setConfig(t, median.OffchainConfig{
AlphaReportInfinite: false,
AlphaReportPPB: 0,
AlphaAcceptInfinite: true,
AlphaAcceptPPB: 0,
DeltaC: 10,
}, ocrContract, user)
b.Commit()
changedInBlock, configDigest, err := cp.LatestConfigDetails(testutils.Context(t))
require.NoError(t, err)
latest, err := b.BlockByNumber(testutils.Context(t), nil)
require.NoError(t, err)
onchainDetails, err := ocrContract.LatestConfigDetails(nil)
require.NoError(t, err)
assert.Equal(t, latest.Number().Int64(), int64(changedInBlock))
assert.Equal(t, onchainDetails.ConfigDigest, [32]byte(configDigest))
})
})`
$DIR/core/services/relay/evm/config_poller_test.go: `t.Run("when config has not been set, returns zero values", func(t *testing.T) {
changedInBlock, configDigest, err := cp.LatestConfigDetails(testutils.Context(t))
require.NoError(t, err)
assert.Equal(t, 0, int(changedInBlock))
assert.Equal(t, ocrtypes.ConfigDigest{}, configDigest)
})`
$DIR/core/services/relay/evm/config_poller_test.go: `t.Run("when config has been set, returns config details", func(t *testing.T) {
setConfig(t, median.OffchainConfig{
AlphaReportInfinite: false,
AlphaReportPPB: 0,
AlphaAcceptInfinite: true,
AlphaAcceptPPB: 0,
DeltaC: 10,
}, ocrContract, user)
b.Commit()
changedInBlock, configDigest, err := cp.LatestConfigDetails(testutils.Context(t))
require.NoError(t, err)
latest, err := b.BlockByNumber(testutils.Context(t), nil)
require.NoError(t, err)
onchainDetails, err := ocrContract.LatestConfigDetails(nil)
require.NoError(t, err)
assert.Equal(t, latest.Number().Int64(), int64(changedInBlock))
assert.Equal(t, onchainDetails.ConfigDigest, [32]byte(configDigest))
})`
$DIR/core/services/relay/evm/config_poller_test.go: `setConfig(t, median.OffchainConfig{
AlphaReportInfinite: false,
AlphaReportPPB: 0,
AlphaAcceptInfinite: true,
AlphaAcceptPPB: 0,
DeltaC: 10,
}, ocrContract, user)`
$DIR/core/services/relay/evm/config_poller_test.go: `b.Commit()`
$DIR/core/services/relay/evm/config_poller_test.go: `t.Run("returns error if callLatestConfigDetails fails", func(t *testing.T) {
failingClient := new(evmClientMocks.Client)
failingClient.On("ConfiguredChainID").Return(big.NewInt(42))
failingClient.On("CallContract", mock.Anything, mock.Anything, mock.Anything).Return(nil, errors.New("something exploded"))
cp, err := newConfigPoller(ctx, lggr, failingClient, mp, ocrAddress, &configStoreContractAddr, ld)
require.NoError(t, err)
cp.configStoreContractAddr = &configStoreContractAddr
cp.configStoreContract = configStoreContract
_, _, err = cp.LatestConfigDetails(testutils.Context(t))
assert.EqualError(t, err, "something exploded")
failingClient.AssertExpectations(t)
})`
$DIR/core/services/relay/evm/config_poller_test.go: `failingClient.On("ConfiguredChainID").Return(big.NewInt(42))`
$DIR/core/services/relay/evm/config_poller_test.go: `failingClient.On("CallContract", mock.Anything, mock.Anything, mock.Anything).Return(nil, errors.New("something exploded"))`
$DIR/core/services/relay/evm/config_poller_test.go: `cp.configStoreContractAddr = &configStoreContractAddr`
$DIR/core/services/relay/evm/config_poller_test.go: `cp.configStoreContract = configStoreContract`
$DIR/core/services/relay/evm/config_poller_test.go: `_, _, err = cp.LatestConfigDetails(testutils.Context(t))`
$DIR/core/services/relay/evm/config_poller_test.go: `failingClient.AssertExpectations(t)`
$DIR/core/services/relay/evm/config_poller_test.go: `ocrAddress, _, ocrContract, err = ocr2aggregator.DeployOCR2Aggregator(
user,
b,
linkTokenAddress,
big.NewInt(0),
big.NewInt(10),
accessAddress,
accessAddress,
9,
"TEST",
)`
$DIR/core/services/relay/evm/config_poller_test.go: `b.Commit()`
$DIR/core/services/relay/evm/config_poller_test.go: `mp.On("RegisterFilter", mock.Anything, mock.Anything).Return(nil)`
$DIR/core/services/relay/evm/config_poller_test.go: `mp.On("Logs", mock.Anything, mock.Anything, mock.Anything, mock.Anything, mock.Anything).Return(nil, nil)`
$DIR/core/services/relay/evm/config_poller_test.go: `mp.On("LatestLogByEventSigWithConfs", mock.Anything, mock.Anything, mock.Anything, mock.Anything).Return(nil, sql.ErrNoRows)`
$DIR/core/services/relay/evm/config_poller_test.go: `t.Run("if callReadConfig succeeds", func(t *testing.T) {
cp, err := newConfigPoller(ctx, lggr, ethClient, mp, ocrAddress, &configStoreContractAddr, ld)
require.NoError(t, err)
t.Run("when config has not been set, returns error", func(t *testing.T) {
_, err := cp.LatestConfig(testutils.Context(t), 0)
require.Error(t, err)
assert.Contains(t, err.Error(), "config details missing while trying to lookup config in store")
})
t.Run("when config has been set, returns config", func(t *testing.T) {
b.Commit()
onchainDetails, err := ocrContract.LatestConfigDetails(nil)
require.NoError(t, err)
contractConfig := setConfig(t, median.OffchainConfig{
AlphaReportInfinite: false,
AlphaReportPPB: 0,
AlphaAcceptInfinite: true,
AlphaAcceptPPB: 0,
DeltaC: 10,
}, ocrContract, user)
signerAddresses, err := OnchainPublicKeyToAddress(contractConfig.Signers)
require.NoError(t, err)
transmitterAddresses, err := AccountToAddress(contractConfig.Transmitters)
require.NoError(t, err)
configuration := ocrconfigurationstoreevmsimple.OCRConfigurationStoreEVMSimpleConfigurationEVMSimple{
Signers: signerAddresses,
Transmitters: transmitterAddresses,
OnchainConfig: contractConfig.OnchainConfig,
OffchainConfig: contractConfig.OffchainConfig,
ContractAddress: ocrAddress,
OffchainConfigVersion: contractConfig.OffchainConfigVersion,
ConfigCount: 1,
F: contractConfig.F,
}
addConfig(t, user, configStoreContract, configuration)
b.Commit()
onchainDetails, err = ocrContract.LatestConfigDetails(nil)
require.NoError(t, err)
newConfig, err := cp.LatestConfig(testutils.Context(t), 0)
require.NoError(t, err)
assert.Equal(t, onchainDetails.ConfigDigest, [32]byte(newConfig.ConfigDigest))
assert.Equal(t, contractConfig.Signers, newConfig.Signers)
assert.Equal(t, contractConfig.Transmitters, newConfig.Transmitters)
assert.Equal(t, contractConfig.F, newConfig.F)
assert.Equal(t, contractConfig.OffchainConfigVersion, newConfig.OffchainConfigVersion)
assert.Equal(t, contractConfig.OffchainConfig, newConfig.OffchainConfig)
})
})`
$DIR/core/services/relay/evm/config_poller_test.go: `t.Run("when config has not been set, returns error", func(t *testing.T) {
_, err := cp.LatestConfig(testutils.Context(t), 0)
require.Error(t, err)
assert.Contains(t, err.Error(), "config details missing while trying to lookup config in store")
})`
$DIR/core/services/relay/evm/config_poller_test.go: `t.Run("when config has been set, returns config", func(t *testing.T) {
b.Commit()
onchainDetails, err := ocrContract.LatestConfigDetails(nil)
require.NoError(t, err)
contractConfig := setConfig(t, median.OffchainConfig{
AlphaReportInfinite: false,
AlphaReportPPB: 0,
AlphaAcceptInfinite: true,
AlphaAcceptPPB: 0,
DeltaC: 10,
}, ocrContract, user)
signerAddresses, err := OnchainPublicKeyToAddress(contractConfig.Signers)
require.NoError(t, err)
transmitterAddresses, err := AccountToAddress(contractConfig.Transmitters)
require.NoError(t, err)
configuration := ocrconfigurationstoreevmsimple.OCRConfigurationStoreEVMSimpleConfigurationEVMSimple{
Signers: signerAddresses,
Transmitters: transmitterAddresses,
OnchainConfig: contractConfig.OnchainConfig,
OffchainConfig: contractConfig.OffchainConfig,
ContractAddress: ocrAddress,
OffchainConfigVersion: contractConfig.OffchainConfigVersion,
ConfigCount: 1,
F: contractConfig.F,
}
addConfig(t, user, configStoreContract, configuration)
b.Commit()
onchainDetails, err = ocrContract.LatestConfigDetails(nil)
require.NoError(t, err)
newConfig, err := cp.LatestConfig(testutils.Context(t), 0)
require.NoError(t, err)
assert.Equal(t, onchainDetails.ConfigDigest, [32]byte(newConfig.ConfigDigest))
assert.Equal(t, contractConfig.Signers, newConfig.Signers)
assert.Equal(t, contractConfig.Transmitters, newConfig.Transmitters)
assert.Equal(t, contractConfig.F, newConfig.F)
assert.Equal(t, contractConfig.OffchainConfigVersion, newConfig.OffchainConfigVersion)
assert.Equal(t, contractConfig.OffchainConfig, newConfig.OffchainConfig)
})`
$DIR/core/services/relay/evm/config_poller_test.go: `b.Commit()`
$DIR/core/services/relay/evm/config_poller_test.go: `addConfig(t, user, configStoreContract, configuration)`
$DIR/core/services/relay/evm/config_poller_test.go: `b.Commit()`
$DIR/core/services/relay/evm/config_poller_test.go: `onchainDetails, err = ocrContract.LatestConfigDetails(nil)`
$DIR/core/services/relay/evm/config_poller_test.go: `t.Run("returns error if callReadConfig fails", func(t *testing.T) {
failingClient := new(evmClientMocks.Client)
failingClient.On("ConfiguredChainID").Return(big.NewInt(42))
failingClient.On("CallContract", mock.Anything, mock.MatchedBy(func(callArgs ethereum.CallMsg) bool {
// initial call to retrieve config store address from aggregator
return *callArgs.To == ocrAddress
}), mock.Anything).Return(nil, errors.New("something exploded")).Once()
cp, err := newConfigPoller(ctx, lggr, failingClient, mp, ocrAddress, &configStoreContractAddr, ld)
require.NoError(t, err)
_, err = cp.LatestConfig(testutils.Context(t), 0)
assert.EqualError(t, err, "failed to get latest config details: something exploded")
failingClient.AssertExpectations(t)
})`
$DIR/core/services/relay/evm/config_poller_test.go: `failingClient.On("ConfiguredChainID").Return(big.NewInt(42))`
$DIR/core/services/relay/evm/config_poller_test.go: `failingClient.On("CallContract", mock.Anything, mock.MatchedBy(func(callArgs ethereum.CallMsg) bool {
// initial call to retrieve config store address from aggregator
return *callArgs.To == ocrAddress
}), mock.Anything).Return(nil, errors.New("something exploded")).Once()`
$DIR/core/services/relay/evm/config_poller_test.go: `_, err = cp.LatestConfig(testutils.Context(t), 0)`
$DIR/core/services/relay/evm/config_poller_test.go: `failingClient.AssertExpectations(t)`
$DIR/core/services/relay/evm/config_poller_test.go: `.TestLogger(t)`
$DIR/core/services/relay/evm/config_poller_test.go: `.Context(t)`
$DIR/core/services/relay/evm/config_poller_test.go: `.GenerateKey()`
$DIR/core/services/relay/evm/config_poller_test.go: `.NewKeyedTransactorWithChainID(key, big.NewInt(1337))`
$DIR/core/services/relay/evm/config_poller_test.go: `.NewInt(1337)`
$DIR/core/services/relay/evm/config_poller_test.go: `.NewSimulatedBackend(core.GenesisAlloc{
user.From: {Balance: big.NewInt(1000000000000000000)}},
5*ethconfig.Defaults.Miner.GasCeil)`
$DIR/core/services/relay/evm/config_poller_test.go: `.NewInt(1000000000000000000)`
$DIR/core/services/relay/evm/config_poller_test.go: `.DeployLinkToken(user, b)`
$DIR/core/services/relay/evm/config_poller_test.go: `.DeploySimpleWriteAccessController(user, b)`
$DIR/core/services/relay/evm/config_poller_test.go: `.DeployOCR2Aggregator(
user,
b,
linkTokenAddress,
big.NewInt(0),
big.NewInt(10),
accessAddress,
accessAddress,
9,
"TEST",
)`
$DIR/core/services/relay/evm/config_poller_test.go: `.NewInt(0)`
$DIR/core/services/relay/evm/config_poller_test.go: `.NewInt(10)`
$DIR/core/services/relay/evm/config_poller_test.go: `.DeployOCRConfigurationStoreEVMSimple(user, b)`
$DIR/core/services/relay/evm/config_poller_test.go: `.Commit()`
$DIR/core/services/relay/evm/config_poller_test.go: `.NewSqlxDB(t)`
$DIR/core/services/relay/evm/config_poller_test.go: `.NewSimulatedBackendClient(t, b, testutils.SimulatedChainID)`
$DIR/core/services/relay/evm/config_poller_test.go: `.NewORM(testutils.SimulatedChainID, db, lggr)`
$DIR/core/services/relay/evm/config_poller_test.go: `.NewLogPoller(lorm, ethClient, lggr, lpOpts)`
$DIR/core/services/relay/evm/config_poller_test.go: `.Run(t, lp)`
$DIR/core/services/relay/evm/config_poller_test.go: `.Run("LatestConfig errors if there is no config in logs and config store is unconfigured", func(t *testing.T) {
cp, err := NewConfigPoller(ctx, lggr, CPConfig{ethClient, lp, ocrAddress, nil, ld})
require.NoError(t, err)
_, err = cp.LatestConfig(testutils.Context(t), 0)
require.Error(t, err)
assert.Contains(t, err.Error(), "no logs found for config on contract")
})`
$DIR/core/services/relay/evm/config_poller_test.go: `.LatestConfig(testutils.Context(t), 0)`
$DIR/core/services/relay/evm/config_poller_test.go: `.Context(t)`
$DIR/core/services/relay/evm/config_poller_test.go: `.Run("happy path (with config store)", func(t *testing.T) {
cp, err := NewConfigPoller(ctx, lggr, CPConfig{ethClient, lp, ocrAddress, &configStoreContractAddr, ld})
require.NoError(t, err)
// Should have no config to begin with.
_, configDigest, err := cp.LatestConfigDetails(testutils.Context(t))
require.NoError(t, err)
require.Equal(t, ocrtypes2.ConfigDigest{}, configDigest)
// Should error because there are no logs for config at block 0
_, err = cp.LatestConfig(testutils.Context(t), 0)
require.Error(t, err)
assert.Contains(t, err.Error(), "config details missing while trying to lookup config in store")
// Set the config
contractConfig := setConfig(t, median.OffchainConfig{
AlphaReportInfinite: false,
AlphaReportPPB: 0,
AlphaAcceptInfinite: true,
AlphaAcceptPPB: 0,
DeltaC: 10,
}, ocrContract, user)
b.Commit()
latest, err := b.BlockByNumber(testutils.Context(t), nil)
require.NoError(t, err)
// Ensure we capture this config set log.
require.NoError(t, lp.Replay(testutils.Context(t), latest.Number().Int64()-1))
// Send blocks until we see the config updated.
var configBlock uint64
var digest [32]byte
gomega.NewGomegaWithT(t).Eventually(func() bool {
b.Commit()
configBlock, digest, err = cp.LatestConfigDetails(testutils.Context(t))
require.NoError(t, err)
return ocrtypes2.ConfigDigest{} != digest
}, testutils.WaitTimeout(t), 100*time.Millisecond).Should(gomega.BeTrue())
// Assert the config returned is the one we configured.
newConfig, err := cp.LatestConfig(testutils.Context(t), configBlock)
require.NoError(t, err)
// Note we don't check onchainConfig, as that is populated in the contract itself.
assert.Equal(t, digest, [32]byte(newConfig.ConfigDigest))
assert.Equal(t, contractConfig.Signers, newConfig.Signers)
assert.Equal(t, contractConfig.Transmitters, newConfig.Transmitters)
assert.Equal(t, contractConfig.F, newConfig.F)
assert.Equal(t, contractConfig.OffchainConfigVersion, newConfig.OffchainConfigVersion)
assert.Equal(t, contractConfig.OffchainConfig, newConfig.OffchainConfig)
})`
$DIR/core/services/relay/evm/config_poller_test.go: `.LatestConfigDetails(testutils.Context(t))`
$DIR/core/services/relay/evm/config_poller_test.go: `.Context(t)`
$DIR/core/services/relay/evm/config_poller_test.go: `.LatestConfig(testutils.Context(t), 0)`
$DIR/core/services/relay/evm/config_poller_test.go: `.Context(t)`
$DIR/core/services/relay/evm/config_poller_test.go: `.Commit()`
$DIR/core/services/relay/evm/config_poller_test.go: `.BlockByNumber(testutils.Context(t), nil)`
$DIR/core/services/relay/evm/config_poller_test.go: `.Context(t)`
$DIR/core/services/relay/evm/config_poller_test.go: `.NewGomegaWithT(t)`
$DIR/core/services/relay/evm/config_poller_test.go: `.Eventually(func() bool {
b.Commit()
configBlock, digest, err = cp.LatestConfigDetails(testutils.Context(t))
require.NoError(t, err)
return ocrtypes2.ConfigDigest{} != digest
}, testutils.WaitTimeout(t), 100*time.Millisecond)`
$DIR/core/services/relay/evm/config_poller_test.go: `.Commit()`
$DIR/core/services/relay/evm/config_poller_test.go: `.LatestConfigDetails(testutils.Context(t))`
$DIR/core/services/relay/evm/config_poller_test.go: `.Context(t)`
$DIR/core/services/relay/evm/config_poller_test.go: `.WaitTimeout(t)`
$DIR/core/services/relay/evm/config_poller_test.go: `.Should(gomega.BeTrue())`
$DIR/core/services/relay/evm/config_poller_test.go: `.BeTrue()`
$DIR/core/services/relay/evm/config_poller_test.go: `.LatestConfig(testutils.Context(t), configBlock)`
$DIR/core/services/relay/evm/config_poller_test.go: `.Context(t)`
$DIR/core/services/relay/evm/config_poller_test.go: `.DeployOCR2Aggregator(
user,
b,
linkTokenAddress,
big.NewInt(0),
big.NewInt(10),
accessAddress,
accessAddress,
9,
"TEST",
)`
$DIR/core/services/relay/evm/config_poller_test.go: `.NewInt(0)`
$DIR/core/services/relay/evm/config_poller_test.go: `.NewInt(10)`
$DIR/core/services/relay/evm/config_poller_test.go: `.Commit()`
$DIR/core/services/relay/evm/config_poller_test.go: `.Run("LatestConfigDetails, when logs have been pruned and config store contract is configured", func(t *testing.T) {
// Give it a log poller that will never return logs
mp := new(mocks.LogPoller)
mp.On("RegisterFilter", mock.Anything, mock.Anything).Return(nil)
mp.On("LatestLogByEventSigWithConfs", mock.Anything, mock.Anything, mock.Anything, mock.Anything).Return(nil, sql.ErrNoRows)
t.Run("if callLatestConfigDetails succeeds", func(t *testing.T) {
cp, err := newConfigPoller(ctx, lggr, ethClient, mp, ocrAddress, &configStoreContractAddr, ld)
require.NoError(t, err)
t.Run("when config has not been set, returns zero values", func(t *testing.T) {
changedInBlock, configDigest, err := cp.LatestConfigDetails(testutils.Context(t))
require.NoError(t, err)
assert.Equal(t, 0, int(changedInBlock))
assert.Equal(t, ocrtypes.ConfigDigest{}, configDigest)
})
t.Run("when config has been set, returns config details", func(t *testing.T) {
setConfig(t, median.OffchainConfig{
AlphaReportInfinite: false,
AlphaReportPPB: 0,
AlphaAcceptInfinite: true,
AlphaAcceptPPB: 0,
DeltaC: 10,
}, ocrContract, user)
b.Commit()
changedInBlock, configDigest, err := cp.LatestConfigDetails(testutils.Context(t))
require.NoError(t, err)
latest, err := b.BlockByNumber(testutils.Context(t), nil)
require.NoError(t, err)
onchainDetails, err := ocrContract.LatestConfigDetails(nil)
require.NoError(t, err)
assert.Equal(t, latest.Number().Int64(), int64(changedInBlock))
assert.Equal(t, onchainDetails.ConfigDigest, [32]byte(configDigest))
})
})
t.Run("returns error if callLatestConfigDetails fails", func(t *testing.T) {
failingClient := new(evmClientMocks.Client)
failingClient.On("ConfiguredChainID").Return(big.NewInt(42))
failingClient.On("CallContract", mock.Anything, mock.Anything, mock.Anything).Return(nil, errors.New("something exploded"))
cp, err := newConfigPoller(ctx, lggr, failingClient, mp, ocrAddress, &configStoreContractAddr, ld)
require.NoError(t, err)
cp.configStoreContractAddr = &configStoreContractAddr
cp.configStoreContract = configStoreContract
_, _, err = cp.LatestConfigDetails(testutils.Context(t))
assert.EqualError(t, err, "something exploded")
failingClient.AssertExpectations(t)
})
})`
$DIR/core/services/relay/evm/config_poller_test.go: `.On("RegisterFilter", mock.Anything, mock.Anything)`
$DIR/core/services/relay/evm/config_poller_test.go: `.Return(nil)`
$DIR/core/services/relay/evm/config_poller_test.go: `.On("LatestLogByEventSigWithConfs", mock.Anything, mock.Anything, mock.Anything, mock.Anything)`
$DIR/core/services/relay/evm/config_poller_test.go: `.Return(nil, sql.ErrNoRows)`
$DIR/core/services/relay/evm/config_poller_test.go: `.Run("if callLatestConfigDetails succeeds", func(t *testing.T) {
cp, err := newConfigPoller(ctx, lggr, ethClient, mp, ocrAddress, &configStoreContractAddr, ld)
require.NoError(t, err)
t.Run("when config has not been set, returns zero values", func(t *testing.T) {
changedInBlock, configDigest, err := cp.LatestConfigDetails(testutils.Context(t))
require.NoError(t, err)
assert.Equal(t, 0, int(changedInBlock))
assert.Equal(t, ocrtypes.ConfigDigest{}, configDigest)
})
t.Run("when config has been set, returns config details", func(t *testing.T) {
setConfig(t, median.OffchainConfig{
AlphaReportInfinite: false,
AlphaReportPPB: 0,
AlphaAcceptInfinite: true,
AlphaAcceptPPB: 0,
DeltaC: 10,
}, ocrContract, user)
b.Commit()
changedInBlock, configDigest, err := cp.LatestConfigDetails(testutils.Context(t))
require.NoError(t, err)
latest, err := b.BlockByNumber(testutils.Context(t), nil)
require.NoError(t, err)
onchainDetails, err := ocrContract.LatestConfigDetails(nil)
require.NoError(t, err)
assert.Equal(t, latest.Number().Int64(), int64(changedInBlock))
assert.Equal(t, onchainDetails.ConfigDigest, [32]byte(configDigest))
})
})`
$DIR/core/services/relay/evm/config_poller_test.go: `.Run("when config has not been set, returns zero values", func(t *testing.T) {
changedInBlock, configDigest, err := cp.LatestConfigDetails(testutils.Context(t))
require.NoError(t, err)
assert.Equal(t, 0, int(changedInBlock))
assert.Equal(t, ocrtypes.ConfigDigest{}, configDigest)
})`
$DIR/core/services/relay/evm/config_poller_test.go: `.LatestConfigDetails(testutils.Context(t))`
$DIR/core/services/relay/evm/config_poller_test.go: `.Context(t)`
$DIR/core/services/relay/evm/config_poller_test.go: `.Run("when config has been set, returns config details", func(t *testing.T) {
setConfig(t, median.OffchainConfig{
AlphaReportInfinite: false,
AlphaReportPPB: 0,
AlphaAcceptInfinite: true,
AlphaAcceptPPB: 0,
DeltaC: 10,
}, ocrContract, user)
b.Commit()
changedInBlock, configDigest, err := cp.LatestConfigDetails(testutils.Context(t))
require.NoError(t, err)
latest, err := b.BlockByNumber(testutils.Context(t), nil)
require.NoError(t, err)
onchainDetails, err := ocrContract.LatestConfigDetails(nil)
require.NoError(t, err)
assert.Equal(t, latest.Number().Int64(), int64(changedInBlock))
assert.Equal(t, onchainDetails.ConfigDigest, [32]byte(configDigest))
})`
$DIR/core/services/relay/evm/config_poller_test.go: `.Commit()`
$DIR/core/services/relay/evm/config_poller_test.go: `.LatestConfigDetails(testutils.Context(t))`
$DIR/core/services/relay/evm/config_poller_test.go: `.Context(t)`
$DIR/core/services/relay/evm/config_poller_test.go: `.BlockByNumber(testutils.Context(t), nil)`
$DIR/core/services/relay/evm/config_poller_test.go: `.Context(t)`
$DIR/core/services/relay/evm/config_poller_test.go: `.LatestConfigDetails(nil)`
$DIR/core/services/relay/evm/config_poller_test.go: `.Run("returns error if callLatestConfigDetails fails", func(t *testing.T) {
failingClient := new(evmClientMocks.Client)
failingClient.On("ConfiguredChainID").Return(big.NewInt(42))
failingClient.On("CallContract", mock.Anything, mock.Anything, mock.Anything).Return(nil, errors.New("something exploded"))
cp, err := newConfigPoller(ctx, lggr, failingClient, mp, ocrAddress, &configStoreContractAddr, ld)
require.NoError(t, err)
cp.configStoreContractAddr = &configStoreContractAddr
cp.configStoreContract = configStoreContract
_, _, err = cp.LatestConfigDetails(testutils.Context(t))
assert.EqualError(t, err, "something exploded")
failingClient.AssertExpectations(t)
})`
$DIR/core/services/relay/evm/config_poller_test.go: `.On("ConfiguredChainID")`
$DIR/core/services/relay/evm/config_poller_test.go: `.Return(big.NewInt(42))`
$DIR/core/services/relay/evm/config_poller_test.go: `.NewInt(42)`
$DIR/core/services/relay/evm/config_poller_test.go: `.On("CallContract", mock.Anything, mock.Anything, mock.Anything)`
$DIR/core/services/relay/evm/config_poller_test.go: `.Return(nil, errors.New("something exploded"))`
$DIR/core/services/relay/evm/config_poller_test.go: `.New("something exploded")`
$DIR/core/services/relay/evm/config_poller_test.go: `.LatestConfigDetails(testutils.Context(t))`
$DIR/core/services/relay/evm/config_poller_test.go: `.Context(t)`
$DIR/core/services/relay/evm/config_poller_test.go: `.AssertExpectations(t)`
$DIR/core/services/relay/evm/config_poller_test.go: `.DeployOCR2Aggregator(
user,
b,
linkTokenAddress,
big.NewInt(0),
big.NewInt(10),
accessAddress,
accessAddress,
9,
"TEST",
)`
$DIR/core/services/relay/evm/config_poller_test.go: `.NewInt(0)`
$DIR/core/services/relay/evm/config_poller_test.go: `.NewInt(10)`
$DIR/core/services/relay/evm/config_poller_test.go: `.Commit()`
$DIR/core/services/relay/evm/config_poller_test.go: `.NewLogPoller(t)`
$DIR/core/services/relay/evm/config_poller_test.go: `.On("RegisterFilter", mock.Anything, mock.Anything)`
$DIR/core/services/relay/evm/config_poller_test.go: `.Return(nil)`
$DIR/core/services/relay/evm/config_poller_test.go: `.On("Logs", mock.Anything, mock.Anything, mock.Anything, mock.Anything, mock.Anything)`
$DIR/core/services/relay/evm/config_poller_test.go: `.Return(nil, nil)`
$DIR/core/services/relay/evm/config_poller_test.go: `.On("LatestLogByEventSigWithConfs", mock.Anything, mock.Anything, mock.Anything, mock.Anything)`
$DIR/core/services/relay/evm/config_poller_test.go: `.Return(nil, sql.ErrNoRows)`
$DIR/core/services/relay/evm/config_poller_test.go: `.Run("if callReadConfig succeeds", func(t *testing.T) {
cp, err := newConfigPoller(ctx, lggr, ethClient, mp, ocrAddress, &configStoreContractAddr, ld)
require.NoError(t, err)
t.Run("when config has not been set, returns error", func(t *testing.T) {
_, err := cp.LatestConfig(testutils.Context(t), 0)
require.Error(t, err)
assert.Contains(t, err.Error(), "config details missing while trying to lookup config in store")
})
t.Run("when config has been set, returns config", func(t *testing.T) {
b.Commit()
onchainDetails, err := ocrContract.LatestConfigDetails(nil)
require.NoError(t, err)
contractConfig := setConfig(t, median.OffchainConfig{
AlphaReportInfinite: false,
AlphaReportPPB: 0,
AlphaAcceptInfinite: true,
AlphaAcceptPPB: 0,
DeltaC: 10,
}, ocrContract, user)
signerAddresses, err := OnchainPublicKeyToAddress(contractConfig.Signers)
require.NoError(t, err)
transmitterAddresses, err := AccountToAddress(contractConfig.Transmitters)
require.NoError(t, err)
configuration := ocrconfigurationstoreevmsimple.OCRConfigurationStoreEVMSimpleConfigurationEVMSimple{
Signers: signerAddresses,
Transmitters: transmitterAddresses,
OnchainConfig: contractConfig.OnchainConfig,
OffchainConfig: contractConfig.OffchainConfig,
ContractAddress: ocrAddress,
OffchainConfigVersion: contractConfig.OffchainConfigVersion,
ConfigCount: 1,
F: contractConfig.F,
}
addConfig(t, user, configStoreContract, configuration)
b.Commit()
onchainDetails, err = ocrContract.LatestConfigDetails(nil)
require.NoError(t, err)
newConfig, err := cp.LatestConfig(testutils.Context(t), 0)
require.NoError(t, err)
assert.Equal(t, onchainDetails.ConfigDigest, [32]byte(newConfig.ConfigDigest))
assert.Equal(t, contractConfig.Signers, newConfig.Signers)
assert.Equal(t, contractConfig.Transmitters, newConfig.Transmitters)
assert.Equal(t, contractConfig.F, newConfig.F)
assert.Equal(t, contractConfig.OffchainConfigVersion, newConfig.OffchainConfigVersion)
assert.Equal(t, contractConfig.OffchainConfig, newConfig.OffchainConfig)
})
})`
$DIR/core/services/relay/evm/config_poller_test.go: `.Run("when config has not been set, returns error", func(t *testing.T) {
_, err := cp.LatestConfig(testutils.Context(t), 0)
require.Error(t, err)
assert.Contains(t, err.Error(), "config details missing while trying to lookup config in store")
})`
$DIR/core/services/relay/evm/config_poller_test.go: `.LatestConfig(testutils.Context(t), 0)`
$DIR/core/services/relay/evm/config_poller_test.go: `.Context(t)`
$DIR/core/services/relay/evm/config_poller_test.go: `.Run("when config has been set, returns config", func(t *testing.T) {
b.Commit()
onchainDetails, err := ocrContract.LatestConfigDetails(nil)
require.NoError(t, err)
contractConfig := setConfig(t, median.OffchainConfig{
AlphaReportInfinite: false,
AlphaReportPPB: 0,
AlphaAcceptInfinite: true,
AlphaAcceptPPB: 0,
DeltaC: 10,
}, ocrContract, user)
signerAddresses, err := OnchainPublicKeyToAddress(contractConfig.Signers)
require.NoError(t, err)
transmitterAddresses, err := AccountToAddress(contractConfig.Transmitters)
require.NoError(t, err)
configuration := ocrconfigurationstoreevmsimple.OCRConfigurationStoreEVMSimpleConfigurationEVMSimple{
Signers: signerAddresses,
Transmitters: transmitterAddresses,
OnchainConfig: contractConfig.OnchainConfig,
OffchainConfig: contractConfig.OffchainConfig,
ContractAddress: ocrAddress,
OffchainConfigVersion: contractConfig.OffchainConfigVersion,
ConfigCount: 1,
F: contractConfig.F,
}
addConfig(t, user, configStoreContract, configuration)
b.Commit()
onchainDetails, err = ocrContract.LatestConfigDetails(nil)
require.NoError(t, err)
newConfig, err := cp.LatestConfig(testutils.Context(t), 0)
require.NoError(t, err)
assert.Equal(t, onchainDetails.ConfigDigest, [32]byte(newConfig.ConfigDigest))
assert.Equal(t, contractConfig.Signers, newConfig.Signers)
assert.Equal(t, contractConfig.Transmitters, newConfig.Transmitters)
assert.Equal(t, contractConfig.F, newConfig.F)
assert.Equal(t, contractConfig.OffchainConfigVersion, newConfig.OffchainConfigVersion)
assert.Equal(t, contractConfig.OffchainConfig, newConfig.OffchainConfig)
})`
$DIR/core/services/relay/evm/config_poller_test.go: `.Commit()`
$DIR/core/services/relay/evm/config_poller_test.go: `.LatestConfigDetails(nil)`
$DIR/core/services/relay/evm/config_poller_test.go: `.Commit()`
$DIR/core/services/relay/evm/config_poller_test.go: `.LatestConfigDetails(nil)`
$DIR/core/services/relay/evm/config_poller_test.go: `.LatestConfig(testutils.Context(t), 0)`
$DIR/core/services/relay/evm/config_poller_test.go: `.Context(t)`
$DIR/core/services/relay/evm/config_poller_test.go: `.Run("returns error if callReadConfig fails", func(t *testing.T) {
failingClient := new(evmClientMocks.Client)
failingClient.On("ConfiguredChainID").Return(big.NewInt(42))
failingClient.On("CallContract", mock.Anything, mock.MatchedBy(func(callArgs ethereum.CallMsg) bool {
// initial call to retrieve config store address from aggregator
return *callArgs.To == ocrAddress
}), mock.Anything).Return(nil, errors.New("something exploded")).Once()
cp, err := newConfigPoller(ctx, lggr, failingClient, mp, ocrAddress, &configStoreContractAddr, ld)
require.NoError(t, err)
_, err = cp.LatestConfig(testutils.Context(t), 0)
assert.EqualError(t, err, "failed to get latest config details: something exploded")
failingClient.AssertExpectations(t)
})`
$DIR/core/services/relay/evm/config_poller_test.go: `.On("ConfiguredChainID")`
$DIR/core/services/relay/evm/config_poller_test.go: `.Return(big.NewInt(42))`
$DIR/core/services/relay/evm/config_poller_test.go: `.NewInt(42)`
$DIR/core/services/relay/evm/config_poller_test.go: `.On("CallContract", mock.Anything, mock.MatchedBy(func(callArgs ethereum.CallMsg) bool {
// initial call to retrieve config store address from aggregator
return *callArgs.To == ocrAddress
}), mock.Anything)`
$DIR/core/services/relay/evm/config_poller_test.go: `.MatchedBy(func(callArgs ethereum.CallMsg) bool {
// initial call to retrieve config store address from aggregator
return *callArgs.To == ocrAddress
})`
$DIR/core/services/relay/evm/config_poller_test.go: `.Return(nil, errors.New("something exploded"))`
$DIR/core/services/relay/evm/config_poller_test.go: `.New("something exploded")`
$DIR/core/services/relay/evm/config_poller_test.go: `.Once()`
$DIR/core/services/relay/evm/config_poller_test.go: `.LatestConfig(testutils.Context(t), 0)`
$DIR/core/services/relay/evm/config_poller_test.go: `.Context(t)`
$DIR/core/services/relay/evm/config_poller_test.go: `.AssertExpectations(t)`
$DIR/core/services/relay/evm/contract_transmitter_test.go: `c.On("CallContract", mock.Anything, mock.Anything, mock.Anything).Return(digestAndEpochDontScanLogs, nil).Once()`
$DIR/core/services/relay/evm/contract_transmitter_test.go: `lp.On("RegisterFilter", mock.Anything, mock.Anything).Return(nil)`
$DIR/core/services/relay/evm/contract_transmitter_test.go: `c.On("CallContract", mock.Anything, mock.Anything, mock.Anything).Return(digestAndEpochScanLogs, nil).Once()`
$DIR/core/services/relay/evm/contract_transmitter_test.go: `lp.On("LatestLogByEventSigWithConfs",
mock.Anything, mock.Anything, mock.Anything, mock.Anything).Return(&logpoller.Log{
Data: transmitted2,
}, nil)`
$DIR/core/services/relay/evm/contract_transmitter_test.go: `digest, epoch, err = ot.LatestConfigDigestAndEpoch(testutils.Context(t))`
$DIR/core/services/relay/evm/contract_transmitter_test.go: `.TestLogger(t)`
$DIR/core/services/relay/evm/contract_transmitter_test.go: `.NewClient(t)`
$DIR/core/services/relay/evm/contract_transmitter_test.go: `.NewLogPoller(t)`
$DIR/core/services/relay/evm/contract_transmitter_test.go: `.Context(t)`
$DIR/core/services/relay/evm/contract_transmitter_test.go: `.DecodeString(
"0000000000000000000000000000000000000000000000000000000000000000" + // false
"000130da6b9315bd59af6b0a3f5463c0d0a39e92eaa34cbcbdbace7b3bfcc776" + // config digest
"0000000000000000000000000000000000000000000000000000000000000002")`
$DIR/core/services/relay/evm/contract_transmitter_test.go: `.On("CallContract", mock.Anything, mock.Anything, mock.Anything)`
$DIR/core/services/relay/evm/contract_transmitter_test.go: `.Return(digestAndEpochDontScanLogs, nil)`
$DIR/core/services/relay/evm/contract_transmitter_test.go: `.Once()`
$DIR/core/services/relay/evm/contract_transmitter_test.go: `.JSON(strings.NewReader(ocr2aggregator.OCR2AggregatorABI))`
$DIR/core/services/relay/evm/contract_transmitter_test.go: `.NewReader(ocr2aggregator.OCR2AggregatorABI)`
$DIR/core/services/relay/evm/contract_transmitter_test.go: `.On("RegisterFilter", mock.Anything, mock.Anything)`
$DIR/core/services/relay/evm/contract_transmitter_test.go: `.Return(nil)`
$DIR/core/services/relay/evm/contract_transmitter_test.go: `.LatestConfigDigestAndEpoch(testutils.Context(t))`
$DIR/core/services/relay/evm/contract_transmitter_test.go: `.Context(t)`
$DIR/core/services/relay/evm/contract_transmitter_test.go: `.DecodeString(
"0000000000000000000000000000000000000000000000000000000000000001" + // true
"000130da6b9315bd59af6b0a3f5463c0d0a39e92eaa34cbcbdbace7b3bfcc776" + // config digest
"0000000000000000000000000000000000000000000000000000000000000002")`
$DIR/core/services/relay/evm/contract_transmitter_test.go: `.On("CallContract", mock.Anything, mock.Anything, mock.Anything)`
$DIR/core/services/relay/evm/contract_transmitter_test.go: `.Return(digestAndEpochScanLogs, nil)`
$DIR/core/services/relay/evm/contract_transmitter_test.go: `.Once()`
$DIR/core/services/relay/evm/contract_transmitter_test.go: `.DecodeString(
"000130da6b9315bd59af6b0a3f5463c0d0a39e92eaa34cbcbdbace7b3bfcc777" + // config digest
"0000000000000000000000000000000000000000000000000000000000000002")`
$DIR/core/services/relay/evm/contract_transmitter_test.go: `.On("LatestLogByEventSigWithConfs",
mock.Anything, mock.Anything, mock.Anything, mock.Anything)`
$DIR/core/services/relay/evm/contract_transmitter_test.go: `.Return(&logpoller.Log{
Data: transmitted2,
}, nil)`
$DIR/core/services/relay/evm/contract_transmitter_test.go: `.LatestConfigDigestAndEpoch(testutils.Context(t))`
$DIR/core/services/relay/evm/contract_transmitter_test.go: `.Context(t)`
$DIR/core/services/relay/evm/contract_transmitter_test.go: `.FromAccount()`
$DIR/core/services/relay/evm/contract_transmitter_test.go: `.String()`
$DIR/core/services/relay/evm/evm_test.go: `t.Run(tt.name, func(t *testing.T) {
c := evm.RelayerOpts{
DS: tt.fields.DS,
CSAETHKeystore: tt.fields.CSAETHKeystore,
CapabilitiesRegistry: tt.fields.CapabilitiesRegistry,
}
err := c.Validate()
if tt.wantErrContains != "" {
assert.Contains(t, err.Error(), tt.wantErrContains)
} else {
assert.NoError(t, err)
}
})`
$DIR/core/services/relay/evm/evm_test.go: `.Run(tt.name, func(t *testing.T) {
c := evm.RelayerOpts{
DS: tt.fields.DS,
CSAETHKeystore: tt.fields.CSAETHKeystore,
CapabilitiesRegistry: tt.fields.CapabilitiesRegistry,
}
err := c.Validate()
if tt.wantErrContains != "" {
assert.Contains(t, err.Error(), tt.wantErrContains)
} else {
assert.NoError(t, err)
}
})`
$DIR/core/services/relay/evm/evm_test.go: `.Validate()`
$DIR/core/services/relay/evm/functions/config_poller_test.go: `t.Run("FunctionsPlugin", func(t *testing.T) {
runTest(t, functions.FunctionsPlugin, functions.FunctionsDigestPrefix)
})`
$DIR/core/services/relay/evm/functions/config_poller_test.go: `runTest(t, functions.FunctionsPlugin, functions.FunctionsDigestPrefix)`
$DIR/core/services/relay/evm/functions/config_poller_test.go: `t.Run("ThresholdPlugin", func(t *testing.T) {
runTest(t, functions.ThresholdPlugin, functions.ThresholdDigestPrefix)
})`
$DIR/core/services/relay/evm/functions/config_poller_test.go: `runTest(t, functions.ThresholdPlugin, functions.ThresholdDigestPrefix)`
$DIR/core/services/relay/evm/functions/config_poller_test.go: `runTest(t, functions.S4Plugin, functions.S4DigestPrefix)`
$DIR/core/services/relay/evm/functions/config_poller_test.go: `.Run("FunctionsPlugin", func(t *testing.T) {
runTest(t, functions.FunctionsPlugin, functions.FunctionsDigestPrefix)
})`
$DIR/core/services/relay/evm/functions/config_poller_test.go: `.Run("ThresholdPlugin", func(t *testing.T) {
runTest(t, functions.ThresholdPlugin, functions.ThresholdDigestPrefix)
})`
$DIR/core/services/relay/evm/functions/contract_transmitter_test.go: `c.On("CallContract", mock.Anything, mock.Anything, mock.Anything).Return(digestAndEpochDontScanLogs, nil).Once()`
$DIR/core/services/relay/evm/functions/contract_transmitter_test.go: `lp.On("RegisterFilter", mock.Anything, mock.Anything).Return(nil)`
$DIR/core/services/relay/evm/functions/contract_transmitter_test.go: `lp.On("RegisterFilter", mock.Anything, mock.Anything).Return(nil)`
$DIR/core/services/relay/evm/functions/contract_transmitter_test.go: `txm.On("CreateTransaction", mock.Anything, txmgr.TxRequest{
FromAddress: fromAddress,
ToAddress: coordinatorAddress,
EncodedPayload: payload,
FeeLimit: gasLimit,
ForwarderAddress: gethcommon.Address{},
Meta: nil,
Strategy: strategy,
}).Return(txmgr.Tx{}, nil).Once()`
$DIR/core/services/relay/evm/functions/contract_transmitter_test.go: `signatures = append(signatures, ocrtypes.AttributedOnchainSignature{})`
$DIR/core/services/relay/evm/functions/contract_transmitter_test.go: `lp.On("RegisterFilter", mock.Anything, mock.Anything).Return(nil)`
$DIR/core/services/relay/evm/functions/contract_transmitter_test.go: `txm.On("CreateTransaction", mock.Anything, txmgr.TxRequest{
FromAddress: fromAddress,
ToAddress: coordinatorAddress1,
EncodedPayload: payload,
FeeLimit: gasLimit,
ForwarderAddress: gethcommon.Address{},
Meta: nil,
Strategy: strategy,
}).Return(txmgr.Tx{}, nil).Once()`
$DIR/core/services/relay/evm/functions/contract_transmitter_test.go: `.Context(t)`
$DIR/core/services/relay/evm/functions/contract_transmitter_test.go: `.NewSqlxDB(t)`
$DIR/core/services/relay/evm/functions/contract_transmitter_test.go: `.NewKeyStore(t, db)`
$DIR/core/services/relay/evm/functions/contract_transmitter_test.go: `.Eth()`
$DIR/core/services/relay/evm/functions/contract_transmitter_test.go: `.TestLogger(t)`
$DIR/core/services/relay/evm/functions/contract_transmitter_test.go: `.NewClient(t)`
$DIR/core/services/relay/evm/functions/contract_transmitter_test.go: `.NewLogPoller(t)`
$DIR/core/services/relay/evm/functions/contract_transmitter_test.go: `.DecodeString(
"0000000000000000000000000000000000000000000000000000000000000000" + // scan logs = false
digestStr +
"0000000000000000000000000000000000000000000000000000000000000002")`
$DIR/core/services/relay/evm/functions/contract_transmitter_test.go: `.On("CallContract", mock.Anything, mock.Anything, mock.Anything)`
$DIR/core/services/relay/evm/functions/contract_transmitter_test.go: `.Return(digestAndEpochDontScanLogs, nil)`
$DIR/core/services/relay/evm/functions/contract_transmitter_test.go: `.Once()`
$DIR/core/services/relay/evm/functions/contract_transmitter_test.go: `.JSON(strings.NewReader(ocr2aggregator.OCR2AggregatorABI))`
$DIR/core/services/relay/evm/functions/contract_transmitter_test.go: `.NewReader(ocr2aggregator.OCR2AggregatorABI)`
$DIR/core/services/relay/evm/functions/contract_transmitter_test.go: `.NewMockEvmTxManager(t)`
$DIR/core/services/relay/evm/functions/contract_transmitter_test.go: `.MustInsertRandomKey(t, ethKeyStore)`
$DIR/core/services/relay/evm/functions/contract_transmitter_test.go: `.NewInt(0)`
$DIR/core/services/relay/evm/functions/contract_transmitter_test.go: `.On("RegisterFilter", mock.Anything, mock.Anything)`
$DIR/core/services/relay/evm/functions/contract_transmitter_test.go: `.Return(nil)`
$DIR/core/services/relay/evm/functions/contract_transmitter_test.go: `.NewFunctionsContractTransmitter(
c,
contractABI,
lp,
lggr,
1,
txm,
[]gethcommon.Address{fromAddress},
gasLimit,
effectiveTransmitterAddress,
strategy,
txmgr.TransmitCheckerSpec{},
chainID,
ethKeyStore,
)`
$DIR/core/services/relay/evm/functions/contract_transmitter_test.go: `.LatestConfigDigestAndEpoch(testutils.Context(t))`
$DIR/core/services/relay/evm/functions/contract_transmitter_test.go: `.Context(t)`
$DIR/core/services/relay/evm/functions/contract_transmitter_test.go: `.Context(t)`
$DIR/core/services/relay/evm/functions/contract_transmitter_test.go: `.NewSqlxDB(t)`
$DIR/core/services/relay/evm/functions/contract_transmitter_test.go: `.NewKeyStore(t, db)`
$DIR/core/services/relay/evm/functions/contract_transmitter_test.go: `.Eth()`
$DIR/core/services/relay/evm/functions/contract_transmitter_test.go: `.NewAddress()`
$DIR/core/services/relay/evm/functions/contract_transmitter_test.go: `.NewAddress()`
$DIR/core/services/relay/evm/functions/contract_transmitter_test.go: `.TestLogger(t)`
$DIR/core/services/relay/evm/functions/contract_transmitter_test.go: `.NewClient(t)`
$DIR/core/services/relay/evm/functions/contract_transmitter_test.go: `.NewLogPoller(t)`
$DIR/core/services/relay/evm/functions/contract_transmitter_test.go: `.JSON(strings.NewReader(ocr2aggregator.OCR2AggregatorABI))`
$DIR/core/services/relay/evm/functions/contract_transmitter_test.go: `.NewReader(ocr2aggregator.OCR2AggregatorABI)`
$DIR/core/services/relay/evm/functions/contract_transmitter_test.go: `.NewMockEvmTxManager(t)`
$DIR/core/services/relay/evm/functions/contract_transmitter_test.go: `.MustInsertRandomKey(t, ethKeyStore)`
$DIR/core/services/relay/evm/functions/contract_transmitter_test.go: `.NewInt(0)`
$DIR/core/services/relay/evm/functions/contract_transmitter_test.go: `.On("RegisterFilter", mock.Anything, mock.Anything)`
$DIR/core/services/relay/evm/functions/contract_transmitter_test.go: `.Return(nil)`
$DIR/core/services/relay/evm/functions/contract_transmitter_test.go: `.NewFunctionsContractTransmitter(
c,
contractABI,
lp,
lggr,
contractVersion,
txm,
[]gethcommon.Address{fromAddress},
gasLimit,
effectiveTransmitterAddress,
strategy,
txmgr.TransmitCheckerSpec{},
chainID,
ethKeyStore,
)`
$DIR/core/services/relay/evm/functions/contract_transmitter_test.go: `.DecodeString("000102030405060708090a0b0c0d0e0f000102030405060708090a0b0c0d0e0f")`
$DIR/core/services/relay/evm/functions/contract_transmitter_test.go: `.Bytes()`
$DIR/core/services/relay/evm/functions/contract_transmitter_test.go: `.NewReportCodec(contractVersion)`
$DIR/core/services/relay/evm/functions/contract_transmitter_test.go: `.EncodeReport(processedRequests)`
$DIR/core/services/relay/evm/functions/contract_transmitter_test.go: `.RawReportContext(ocrtypes.ReportContext{})`
$DIR/core/services/relay/evm/functions/contract_transmitter_test.go: `.Pack("transmit", rawReportCtx, reportBytes, rs, ss, vs)`
$DIR/core/services/relay/evm/functions/contract_transmitter_test.go: `.On("CreateTransaction", mock.Anything, txmgr.TxRequest{
FromAddress: fromAddress,
ToAddress: coordinatorAddress,
EncodedPayload: payload,
FeeLimit: gasLimit,
ForwarderAddress: gethcommon.Address{},
Meta: nil,
Strategy: strategy,
})`
$DIR/core/services/relay/evm/functions/contract_transmitter_test.go: `.Return(txmgr.Tx{}, nil)`
$DIR/core/services/relay/evm/functions/contract_transmitter_test.go: `.Once()`
$DIR/core/services/relay/evm/functions/contract_transmitter_test.go: `.Transmit(testutils.Context(t), ocrtypes.ReportContext{}, reportBytes, signatures)`
$DIR/core/services/relay/evm/functions/contract_transmitter_test.go: `.Context(t)`
$DIR/core/services/relay/evm/functions/contract_transmitter_test.go: `.Context(t)`
$DIR/core/services/relay/evm/functions/contract_transmitter_test.go: `.NewSqlxDB(t)`
$DIR/core/services/relay/evm/functions/contract_transmitter_test.go: `.NewKeyStore(t, db)`
$DIR/core/services/relay/evm/functions/contract_transmitter_test.go: `.Eth()`
$DIR/core/services/relay/evm/functions/contract_transmitter_test.go: `.NewAddress()`
$DIR/core/services/relay/evm/functions/contract_transmitter_test.go: `.NewAddress()`
$DIR/core/services/relay/evm/functions/contract_transmitter_test.go: `.NewAddress()`
$DIR/core/services/relay/evm/functions/contract_transmitter_test.go: `.TestLogger(t)`
$DIR/core/services/relay/evm/functions/contract_transmitter_test.go: `.NewClient(t)`
$DIR/core/services/relay/evm/functions/contract_transmitter_test.go: `.NewLogPoller(t)`
$DIR/core/services/relay/evm/functions/contract_transmitter_test.go: `.JSON(strings.NewReader(ocr2aggregator.OCR2AggregatorABI))`
$DIR/core/services/relay/evm/functions/contract_transmitter_test.go: `.NewReader(ocr2aggregator.OCR2AggregatorABI)`
$DIR/core/services/relay/evm/functions/contract_transmitter_test.go: `.NewMockEvmTxManager(t)`
$DIR/core/services/relay/evm/functions/contract_transmitter_test.go: `.MustInsertRandomKey(t, ethKeyStore)`
$DIR/core/services/relay/evm/functions/contract_transmitter_test.go: `.NewInt(0)`
$DIR/core/services/relay/evm/functions/contract_transmitter_test.go: `.On("RegisterFilter", mock.Anything, mock.Anything)`
$DIR/core/services/relay/evm/functions/contract_transmitter_test.go: `.Return(nil)`
$DIR/core/services/relay/evm/functions/contract_transmitter_test.go: `.NewFunctionsContractTransmitter(
c,
contractABI,
lp,
lggr,
contractVersion,
txm,
[]gethcommon.Address{fromAddress},
gasLimit,
effectiveTransmitterAddress,
strategy,
txmgr.TransmitCheckerSpec{},
chainID,
ethKeyStore,
)`
$DIR/core/services/relay/evm/functions/contract_transmitter_test.go: `.DecodeString("110102030405060708090a0b0c0d0e0f000102030405060708090a0b0c0d0e0f")`
$DIR/core/services/relay/evm/functions/contract_transmitter_test.go: `.DecodeString("220102030405060708090a0b0c0d0e0f000102030405060708090a0b0c0d0e0f")`
$DIR/core/services/relay/evm/functions/contract_transmitter_test.go: `.Bytes()`
$DIR/core/services/relay/evm/functions/contract_transmitter_test.go: `.Bytes()`
$DIR/core/services/relay/evm/functions/contract_transmitter_test.go: `.NewReportCodec(contractVersion)`
$DIR/core/services/relay/evm/functions/contract_transmitter_test.go: `.EncodeReport(processedRequests)`
$DIR/core/services/relay/evm/functions/contract_transmitter_test.go: `.RawReportContext(ocrtypes.ReportContext{})`
$DIR/core/services/relay/evm/functions/contract_transmitter_test.go: `.Pack("transmit", rawReportCtx, reportBytes, rs, ss, vs)`
$DIR/core/services/relay/evm/functions/contract_transmitter_test.go: `.On("CreateTransaction", mock.Anything, txmgr.TxRequest{
FromAddress: fromAddress,
ToAddress: coordinatorAddress1,
EncodedPayload: payload,
FeeLimit: gasLimit,
ForwarderAddress: gethcommon.Address{},
Meta: nil,
Strategy: strategy,
})`
$DIR/core/services/relay/evm/functions/contract_transmitter_test.go: `.Return(txmgr.Tx{}, nil)`
$DIR/core/services/relay/evm/functions/contract_transmitter_test.go: `.Once()`
$DIR/core/services/relay/evm/functions/contract_transmitter_test.go: `.Transmit(testutils.Context(t), ocrtypes.ReportContext{}, reportBytes, []ocrtypes.AttributedOnchainSignature{})`
$DIR/core/services/relay/evm/functions/contract_transmitter_test.go: `.Context(t)`
$DIR/core/services/relay/evm/functions/logpoller_wrapper_test.go: `lp.On("LatestBlock", mock.Anything).Return(logpoller.LogPollerBlock{BlockNumber: int64(100)}, nil)`
$DIR/core/services/relay/evm/functions/logpoller_wrapper_test.go: `lp.On("Logs", mock.Anything, mock.Anything, mock.Anything, mock.Anything, mock.Anything).Return([]logpoller.Log{}, nil)`
$DIR/core/services/relay/evm/functions/logpoller_wrapper_test.go: `client.On("CallContract", mock.Anything, mock.Anything, mock.Anything).Return(addr(t, "01"), nil)`
$DIR/core/services/relay/evm/functions/logpoller_wrapper_test.go: `lp.On("RegisterFilter", mock.Anything, mock.Anything).Return(nil)`
$DIR/core/services/relay/evm/functions/logpoller_wrapper_test.go: `lp.On("GetFilters").Return(map[string]logpoller.Filter{}, nil)`
$DIR/core/services/relay/evm/functions/logpoller_wrapper_test.go: `lpWrapper.SubscribeToUpdates(ctx, "mock_subscriber", subscriber)`
$DIR/core/services/relay/evm/functions/logpoller_wrapper_test.go: `servicetest.Run(t, lpWrapper)`
$DIR/core/services/relay/evm/functions/logpoller_wrapper_test.go: `subscriber.updates.Wait()`
$DIR/core/services/relay/evm/functions/logpoller_wrapper_test.go: `lp.On("LatestBlock", mock.Anything).Return(logpoller.LogPollerBlock{BlockNumber: int64(100)}, nil)`
$DIR/core/services/relay/evm/functions/logpoller_wrapper_test.go: `client.On("CallContract", mock.Anything, mock.Anything, mock.Anything).Return(addr(t, "00"), nil)`
$DIR/core/services/relay/evm/functions/logpoller_wrapper_test.go: `servicetest.Run(t, lpWrapper)`
$DIR/core/services/relay/evm/functions/logpoller_wrapper_test.go: `lp.On("LatestBlock", mock.Anything).Return(logpoller.LogPollerBlock{BlockNumber: int64(100)}, nil)`
$DIR/core/services/relay/evm/functions/logpoller_wrapper_test.go: `client.On("CallContract", mock.Anything, mock.Anything, mock.Anything).Return(addr(t, "01"), nil)`
$DIR/core/services/relay/evm/functions/logpoller_wrapper_test.go: `lp.On("RegisterFilter", mock.Anything, mock.Anything).Return(nil)`
$DIR/core/services/relay/evm/functions/logpoller_wrapper_test.go: `lp.On("GetFilters").Return(map[string]logpoller.Filter{}, nil)`
$DIR/core/services/relay/evm/functions/logpoller_wrapper_test.go: `lpWrapper.SubscribeToUpdates(ctx, "mock_subscriber", subscriber)`
$DIR/core/services/relay/evm/functions/logpoller_wrapper_test.go: `lp.On("Logs", mock.Anything, mock.Anything, mock.Anything, functions_coordinator.FunctionsCoordinatorOracleResponse{}.Topic(), mock.Anything).Return([]logpoller.Log{}, nil)`
$DIR/core/services/relay/evm/functions/logpoller_wrapper_test.go: `lp.On("Logs", mock.Anything, mock.Anything, mock.Anything, mock.Anything, mock.Anything).Return([]logpoller.Log{mockedLog}, nil).Once()`
$DIR/core/services/relay/evm/functions/logpoller_wrapper_test.go: `lp.On("Logs", mock.Anything, mock.Anything, mock.Anything, functions_coordinator.FunctionsCoordinatorOracleRequest{}.Topic(), mock.Anything).Return([]logpoller.Log{}, nil).Once()`
$DIR/core/services/relay/evm/functions/logpoller_wrapper_test.go: `lp.On("Logs", mock.Anything, mock.Anything, mock.Anything, mock.Anything, mock.Anything).Return([]logpoller.Log{mockedLog}, nil).Once()`
$DIR/core/services/relay/evm/functions/logpoller_wrapper_test.go: `servicetest.Run(t, lpWrapper)`
$DIR/core/services/relay/evm/functions/logpoller_wrapper_test.go: `subscriber.updates.Wait()`
$DIR/core/services/relay/evm/functions/logpoller_wrapper_test.go: `oracleRequests, _, err = lpWrapper.LatestEvents(ctx)`
$DIR/core/services/relay/evm/functions/logpoller_wrapper_test.go: `oracleRequests, _, err = lpWrapper.LatestEvents(ctx)`
$DIR/core/services/relay/evm/functions/logpoller_wrapper_test.go: `inputLogs[i] = getMockedRequestLog(t)`
$DIR/core/services/relay/evm/functions/logpoller_wrapper_test.go: `inputLogs[0].Topics = [][]byte{[]byte("invalid topic")}`
$DIR/core/services/relay/evm/functions/logpoller_wrapper_test.go: `copy(mockedRequestId[:], mockedRequestLog.Topics[1])`
$DIR/core/services/relay/evm/functions/logpoller_wrapper_test.go: `mockedDetectedEvents.isPreviouslyDetected[mockedRequestId] = struct{}{}`
$DIR/core/services/relay/evm/functions/logpoller_wrapper_test.go: `mockedDetectedEvents.detectedEventsOrdered[0] = detectedEvent{
requestId: mockedRequestId,
timeDetected: time.Now().Add(-time.Second * time.Duration(logPollerCacheDurationSecDefault+1)),
}`
$DIR/core/services/relay/evm/functions/logpoller_wrapper_test.go: `wrapper.activeCoordinator = activeCoord`
$DIR/core/services/relay/evm/functions/logpoller_wrapper_test.go: `wrapper.proposedCoordinator = proposedCoord`
$DIR/core/services/relay/evm/functions/logpoller_wrapper_test.go: `lp.On("RegisterFilter", ctx, mock.Anything).Return(nil)`
$DIR/core/services/relay/evm/functions/logpoller_wrapper_test.go: `lp.On("GetFilters").Return(existingFilters, nil)`
$DIR/core/services/relay/evm/functions/logpoller_wrapper_test.go: `lp.On("UnregisterFilter", ctx, activeCoordFilterName).Return(nil)`
$DIR/core/services/relay/evm/functions/logpoller_wrapper_test.go: `wrapper.handleRouteUpdate(ctx, newActiveCoord, newProposedCoord)`
$DIR/core/services/relay/evm/functions/logpoller_wrapper_test.go: `.Context(t)`
$DIR/core/services/relay/evm/functions/logpoller_wrapper_test.go: `.On("LatestBlock", mock.Anything)`
$DIR/core/services/relay/evm/functions/logpoller_wrapper_test.go: `.Return(logpoller.LogPollerBlock{BlockNumber: int64(100)}, nil)`
$DIR/core/services/relay/evm/functions/logpoller_wrapper_test.go: `.On("Logs", mock.Anything, mock.Anything, mock.Anything, mock.Anything, mock.Anything)`
$DIR/core/services/relay/evm/functions/logpoller_wrapper_test.go: `.Return([]logpoller.Log{}, nil)`
$DIR/core/services/relay/evm/functions/logpoller_wrapper_test.go: `.On("CallContract", mock.Anything, mock.Anything, mock.Anything)`
$DIR/core/services/relay/evm/functions/logpoller_wrapper_test.go: `.Return(addr(t, "01"), nil)`
$DIR/core/services/relay/evm/functions/logpoller_wrapper_test.go: `.On("RegisterFilter", mock.Anything, mock.Anything)`
$DIR/core/services/relay/evm/functions/logpoller_wrapper_test.go: `.Return(nil)`
$DIR/core/services/relay/evm/functions/logpoller_wrapper_test.go: `.On("GetFilters")`
$DIR/core/services/relay/evm/functions/logpoller_wrapper_test.go: `.Return(map[string]logpoller.Filter{}, nil)`
$DIR/core/services/relay/evm/functions/logpoller_wrapper_test.go: `.SubscribeToUpdates(ctx, "mock_subscriber", subscriber)`
$DIR/core/services/relay/evm/functions/logpoller_wrapper_test.go: `.Run(t, lpWrapper)`
$DIR/core/services/relay/evm/functions/logpoller_wrapper_test.go: `.updates.Wait()`
$DIR/core/services/relay/evm/functions/logpoller_wrapper_test.go: `.LatestEvents(ctx)`
$DIR/core/services/relay/evm/functions/logpoller_wrapper_test.go: `.Context(t)`
$DIR/core/services/relay/evm/functions/logpoller_wrapper_test.go: `.On("LatestBlock", mock.Anything)`
$DIR/core/services/relay/evm/functions/logpoller_wrapper_test.go: `.Return(logpoller.LogPollerBlock{BlockNumber: int64(100)}, nil)`
$DIR/core/services/relay/evm/functions/logpoller_wrapper_test.go: `.On("CallContract", mock.Anything, mock.Anything, mock.Anything)`
$DIR/core/services/relay/evm/functions/logpoller_wrapper_test.go: `.Return(addr(t, "00"), nil)`
$DIR/core/services/relay/evm/functions/logpoller_wrapper_test.go: `.Run(t, lpWrapper)`
$DIR/core/services/relay/evm/functions/logpoller_wrapper_test.go: `.LatestEvents(ctx)`
$DIR/core/services/relay/evm/functions/logpoller_wrapper_test.go: `.Context(t)`
$DIR/core/services/relay/evm/functions/logpoller_wrapper_test.go: `.On("LatestBlock", mock.Anything)`
$DIR/core/services/relay/evm/functions/logpoller_wrapper_test.go: `.Return(logpoller.LogPollerBlock{BlockNumber: int64(100)}, nil)`
$DIR/core/services/relay/evm/functions/logpoller_wrapper_test.go: `.On("CallContract", mock.Anything, mock.Anything, mock.Anything)`
$DIR/core/services/relay/evm/functions/logpoller_wrapper_test.go: `.Return(addr(t, "01"), nil)`
$DIR/core/services/relay/evm/functions/logpoller_wrapper_test.go: `.On("RegisterFilter", mock.Anything, mock.Anything)`
$DIR/core/services/relay/evm/functions/logpoller_wrapper_test.go: `.Return(nil)`
$DIR/core/services/relay/evm/functions/logpoller_wrapper_test.go: `.On("GetFilters")`
$DIR/core/services/relay/evm/functions/logpoller_wrapper_test.go: `.Return(map[string]logpoller.Filter{}, nil)`
$DIR/core/services/relay/evm/functions/logpoller_wrapper_test.go: `.SubscribeToUpdates(ctx, "mock_subscriber", subscriber)`
$DIR/core/services/relay/evm/functions/logpoller_wrapper_test.go: `.On("Logs", mock.Anything, mock.Anything, mock.Anything, functions_coordinator.FunctionsCoordinatorOracleResponse{}.Topic(), mock.Anything)`
$DIR/core/services/relay/evm/functions/logpoller_wrapper_test.go: `.Topic()`
$DIR/core/services/relay/evm/functions/logpoller_wrapper_test.go: `.Return([]logpoller.Log{}, nil)`
$DIR/core/services/relay/evm/functions/logpoller_wrapper_test.go: `.On("Logs", mock.Anything, mock.Anything, mock.Anything, mock.Anything, mock.Anything)`
$DIR/core/services/relay/evm/functions/logpoller_wrapper_test.go: `.Return([]logpoller.Log{mockedLog}, nil)`
$DIR/core/services/relay/evm/functions/logpoller_wrapper_test.go: `.Once()`
$DIR/core/services/relay/evm/functions/logpoller_wrapper_test.go: `.On("Logs", mock.Anything, mock.Anything, mock.Anything, functions_coordinator.FunctionsCoordinatorOracleRequest{}.Topic(), mock.Anything)`
$DIR/core/services/relay/evm/functions/logpoller_wrapper_test.go: `.Topic()`
$DIR/core/services/relay/evm/functions/logpoller_wrapper_test.go: `.Return([]logpoller.Log{}, nil)`
$DIR/core/services/relay/evm/functions/logpoller_wrapper_test.go: `.Once()`
$DIR/core/services/relay/evm/functions/logpoller_wrapper_test.go: `.On("Logs", mock.Anything, mock.Anything, mock.Anything, mock.Anything, mock.Anything)`
$DIR/core/services/relay/evm/functions/logpoller_wrapper_test.go: `.Return([]logpoller.Log{mockedLog}, nil)`
$DIR/core/services/relay/evm/functions/logpoller_wrapper_test.go: `.Once()`
$DIR/core/services/relay/evm/functions/logpoller_wrapper_test.go: `.Run(t, lpWrapper)`
$DIR/core/services/relay/evm/functions/logpoller_wrapper_test.go: `.updates.Wait()`
$DIR/core/services/relay/evm/functions/logpoller_wrapper_test.go: `.LatestEvents(ctx)`
$DIR/core/services/relay/evm/functions/logpoller_wrapper_test.go: `.LatestEvents(ctx)`
$DIR/core/services/relay/evm/functions/logpoller_wrapper_test.go: `.LatestEvents(ctx)`
$DIR/core/services/relay/evm/functions/logpoller_wrapper_test.go: `.filterPreviouslyDetectedEvents(inputLogs, &mockedDetectedEvents, "request")`
$DIR/core/services/relay/evm/functions/logpoller_wrapper_test.go: `.filterPreviouslyDetectedEvents(inputLogs, &mockedDetectedEvents, "request")`
$DIR/core/services/relay/evm/functions/logpoller_wrapper_test.go: `.Now()`
$DIR/core/services/relay/evm/functions/logpoller_wrapper_test.go: `.Add(-time.Second * time.Duration(logPollerCacheDurationSecDefault+1))`
$DIR/core/services/relay/evm/functions/logpoller_wrapper_test.go: `.Duration(logPollerCacheDurationSecDefault+1)`
$DIR/core/services/relay/evm/functions/logpoller_wrapper_test.go: `.filterPreviouslyDetectedEvents(inputLogs, &mockedDetectedEvents, "request")`
$DIR/core/services/relay/evm/functions/logpoller_wrapper_test.go: `.Context(t)`
$DIR/core/services/relay/evm/functions/logpoller_wrapper_test.go: `.HexToAddress("0x1")`
$DIR/core/services/relay/evm/functions/logpoller_wrapper_test.go: `.HexToAddress("0x2")`
$DIR/core/services/relay/evm/functions/logpoller_wrapper_test.go: `.HexToAddress("0x3")`
$DIR/core/services/relay/evm/functions/logpoller_wrapper_test.go: `.filterName(activeCoord)`
$DIR/core/services/relay/evm/functions/logpoller_wrapper_test.go: `.filterName(proposedCoord)`
$DIR/core/services/relay/evm/functions/logpoller_wrapper_test.go: `.filterName(newProposedCoord)`
$DIR/core/services/relay/evm/functions/logpoller_wrapper_test.go: `.On("RegisterFilter", ctx, mock.Anything)`
$DIR/core/services/relay/evm/functions/logpoller_wrapper_test.go: `.Return(nil)`
$DIR/core/services/relay/evm/functions/logpoller_wrapper_test.go: `.On("GetFilters")`
$DIR/core/services/relay/evm/functions/logpoller_wrapper_test.go: `.Return(existingFilters, nil)`
$DIR/core/services/relay/evm/functions/logpoller_wrapper_test.go: `.On("UnregisterFilter", ctx, activeCoordFilterName)`
$DIR/core/services/relay/evm/functions/logpoller_wrapper_test.go: `.Return(nil)`
$DIR/core/services/relay/evm/functions/logpoller_wrapper_test.go: `.handleRouteUpdate(ctx, newActiveCoord, newProposedCoord)`
$DIR/core/services/relay/evm/median_test.go: `chain.On("ID").Return(chainID)`
$DIR/core/services/relay/evm/median_test.go: `t.Run("wrong chainID", func(t *testing.T) {
relayConfigBadChainID := evmtypes.RelayConfig{}
rc, err2 := json.Marshal(&relayConfigBadChainID)
rargs2 := commontypes.RelayArgs{ContractID: contractID.String(), RelayConfig: rc}
require.NoError(t, err2)
_, err2 = relayer.NewMedianProvider(rargs2, pargs)
assert.ErrorContains(t, err2, "chain id in spec does not match")
})`
$DIR/core/services/relay/evm/median_test.go: `_, err2 = relayer.NewMedianProvider(rargs2, pargs)`
$DIR/core/services/relay/evm/median_test.go: `_, err2 = relayer.NewMedianProvider(rargsBadContractID, pargs)`
$DIR/core/services/relay/evm/median_test.go: `.TestLogger(t)`
$DIR/core/services/relay/evm/median_test.go: `.NewChain(t)`
$DIR/core/services/relay/evm/median_test.go: `.NewRandomEVMChainID()`
$DIR/core/services/relay/evm/median_test.go: `.On("ID")`
$DIR/core/services/relay/evm/median_test.go: `.Return(chainID)`
$DIR/core/services/relay/evm/median_test.go: `.NewAddress()`
$DIR/core/services/relay/evm/median_test.go: `.Run("wrong chainID", func(t *testing.T) {
relayConfigBadChainID := evmtypes.RelayConfig{}
rc, err2 := json.Marshal(&relayConfigBadChainID)
rargs2 := commontypes.RelayArgs{ContractID: contractID.String(), RelayConfig: rc}
require.NoError(t, err2)
_, err2 = relayer.NewMedianProvider(rargs2, pargs)
assert.ErrorContains(t, err2, "chain id in spec does not match")
})`
$DIR/core/services/relay/evm/median_test.go: `.Marshal(&relayConfigBadChainID)`
$DIR/core/services/relay/evm/median_test.go: `.String()`
$DIR/core/services/relay/evm/median_test.go: `.NewMedianProvider(rargs2, pargs)`
$DIR/core/services/relay/evm/median_test.go: `.New(chainID)`
$DIR/core/services/relay/evm/median_test.go: `.Marshal(&relayConfig)`
$DIR/core/services/relay/evm/median_test.go: `.NewMedianProvider(rargsBadContractID, pargs)`
$DIR/core/services/relay/evm/mercury/config_digest_test.go: `backend.Commit()`
$DIR/core/services/relay/evm/mercury/config_digest_test.go: `p.Property("onchain/offchain config digests match", prop.ForAll(
func(
feedID [32]byte,
chainID uint64,
contractAddress common.Address,
configCount uint64,
oracles []common.Address,
transmitters [][32]byte,
f uint8,
onchainConfig []byte,
offchainConfigVersion uint64,
offchainConfig []byte,
) bool {
chainIDBig := new(big.Int).SetUint64(chainID)
golangDigest := configDigest(
feedID,
chainIDBig,
contractAddress,
configCount,
oracles,
*(*[]credentials.StaticSizedPublicKey)(unsafe.Pointer(&transmitters)),
f,
onchainConfig,
offchainConfigVersion,
offchainConfig,
)
bigChainID := new(big.Int)
bigChainID.SetUint64(chainID)
solidityDigest, err := eoa.ExposedConfigDigestFromConfigData(nil,
feedID,
bigChainID,
contractAddress,
configCount,
oracles,
transmitters,
f,
onchainConfig,
offchainConfigVersion,
offchainConfig,
)
require.NoError(t, err, "could not compute solidity version of config digest")
return golangDigest == solidityDigest
},
GenHash(t),
gen.UInt64(),
GenAddress(t),
gen.UInt64(),
GenAddressArray(t),
GenClientPubKeyArray(t),
gen.UInt8(),
GenBytes(t),
gen.UInt64(),
GenBytes(t),
))`
$DIR/core/services/relay/evm/mercury/config_digest_test.go: `bigChainID.SetUint64(chainID)`
$DIR/core/services/relay/evm/mercury/config_digest_test.go: `.GenerateKey()`
$DIR/core/services/relay/evm/mercury/config_digest_test.go: `.NewKeyedTransactorWithChainID(key, big.NewInt(1337))`
$DIR/core/services/relay/evm/mercury/config_digest_test.go: `.NewInt(1337)`
$DIR/core/services/relay/evm/mercury/config_digest_test.go: `.NewSimulatedBackend(
core.GenesisAlloc{owner.From: {Balance: new(big.Int).Lsh(big.NewInt(1), 60)}},
ethconfig.Defaults.Miner.GasCeil,
)`
$DIR/core/services/relay/evm/mercury/config_digest_test.go: `.Lsh(big.NewInt(1), 60)`
$DIR/core/services/relay/evm/mercury/config_digest_test.go: `.NewInt(1)`
$DIR/core/services/relay/evm/mercury/config_digest_test.go: `.DeployExposedVerifier(
owner, backend,
)`
$DIR/core/services/relay/evm/mercury/config_digest_test.go: `.Commit()`
$DIR/core/services/relay/evm/mercury/config_digest_test.go: `.NewProperties(nil)`
$DIR/core/services/relay/evm/mercury/config_digest_test.go: `.Property("onchain/offchain config digests match", prop.ForAll(
func(
feedID [32]byte,
chainID uint64,
contractAddress common.Address,
configCount uint64,
oracles []common.Address,
transmitters [][32]byte,
f uint8,
onchainConfig []byte,
offchainConfigVersion uint64,
offchainConfig []byte,
) bool {
chainIDBig := new(big.Int).SetUint64(chainID)
golangDigest := configDigest(
feedID,
chainIDBig,
contractAddress,
configCount,
oracles,
*(*[]credentials.StaticSizedPublicKey)(unsafe.Pointer(&transmitters)),
f,
onchainConfig,
offchainConfigVersion,
offchainConfig,
)
bigChainID := new(big.Int)
bigChainID.SetUint64(chainID)
solidityDigest, err := eoa.ExposedConfigDigestFromConfigData(nil,
feedID,
bigChainID,
contractAddress,
configCount,
oracles,
transmitters,
f,
onchainConfig,
offchainConfigVersion,
offchainConfig,
)
require.NoError(t, err, "could not compute solidity version of config digest")
return golangDigest == solidityDigest
},
GenHash(t),
gen.UInt64(),
GenAddress(t),
gen.UInt64(),
GenAddressArray(t),
GenClientPubKeyArray(t),
gen.UInt8(),
GenBytes(t),
gen.UInt64(),
GenBytes(t),
))`
$DIR/core/services/relay/evm/mercury/config_digest_test.go: `.ForAll(
func(
feedID [32]byte,
chainID uint64,
contractAddress common.Address,
configCount uint64,
oracles []common.Address,
transmitters [][32]byte,
f uint8,
onchainConfig []byte,
offchainConfigVersion uint64,
offchainConfig []byte,
) bool {
chainIDBig := new(big.Int).SetUint64(chainID)
golangDigest := configDigest(
feedID,
chainIDBig,
contractAddress,
configCount,
oracles,
*(*[]credentials.StaticSizedPublicKey)(unsafe.Pointer(&transmitters)),
f,
onchainConfig,
offchainConfigVersion,
offchainConfig,
)
bigChainID := new(big.Int)
bigChainID.SetUint64(chainID)
solidityDigest, err := eoa.ExposedConfigDigestFromConfigData(nil,
feedID,
bigChainID,
contractAddress,
configCount,
oracles,
transmitters,
f,
onchainConfig,
offchainConfigVersion,
offchainConfig,
)
require.NoError(t, err, "could not compute solidity version of config digest")
return golangDigest == solidityDigest
},
GenHash(t),
gen.UInt64(),
GenAddress(t),
gen.UInt64(),
GenAddressArray(t),
GenClientPubKeyArray(t),
gen.UInt8(),
GenBytes(t),
gen.UInt64(),
GenBytes(t),
)`
$DIR/core/services/relay/evm/mercury/config_digest_test.go: `.SetUint64(chainID)`
$DIR/core/services/relay/evm/mercury/config_digest_test.go: `.Pointer(&transmitters)`
$DIR/core/services/relay/evm/mercury/config_digest_test.go: `.SetUint64(chainID)`
$DIR/core/services/relay/evm/mercury/config_digest_test.go: `.ExposedConfigDigestFromConfigData(nil,
feedID,
bigChainID,
contractAddress,
configCount,
oracles,
transmitters,
f,
onchainConfig,
offchainConfigVersion,
offchainConfig,
)`
$DIR/core/services/relay/evm/mercury/config_digest_test.go: `.UInt64()`
$DIR/core/services/relay/evm/mercury/config_digest_test.go: `.UInt64()`
$DIR/core/services/relay/evm/mercury/config_digest_test.go: `.UInt8()`
$DIR/core/services/relay/evm/mercury/config_digest_test.go: `.UInt64()`
$DIR/core/services/relay/evm/mercury/config_poller_test.go: `oracles = append(oracles, confighelper2.OracleIdentityExtra{
OracleIdentity: confighelper2.OracleIdentity{
OnchainPublicKey: evmutils.RandomAddress().Bytes(),
TransmitAccount: ocrtypes2.Account(evmutils.RandomAddress().String()),
OffchainPublicKey: evmutils.RandomBytes32(),
PeerID: utils.MustNewPeerID(),
},
ConfigEncryptionPublicKey: evmutils.RandomBytes32(),
})`
$DIR/core/services/relay/evm/mercury/config_poller_test.go: `offchainTransmitters[i] = oracles[i].OffchainPublicKey`
$DIR/core/services/relay/evm/mercury/config_poller_test.go: `encodedTransmitter[i] = ocrtypes2.Account(fmt.Sprintf("%x", oracles[i].OffchainPublicKey[:]))`
$DIR/core/services/relay/evm/mercury/config_poller_test.go: `_, err = th.verifierContract.SetConfig(th.user, feedIDBytes, signerAddresses, offchainTransmitters, f, onchainConfig, offchainConfigVersion, offchainConfig, nil)`
$DIR/core/services/relay/evm/mercury/config_poller_test.go: `th.backend.Commit()`
$DIR/core/services/relay/evm/mercury/config_poller_test.go: `gomega.NewGomegaWithT(t).Eventually(func() bool {
th.backend.Commit()
configBlock, digest, err = th.configPoller.LatestConfigDetails(testutils.Context(t))
require.NoError(t, err)
return ocrtypes2.ConfigDigest{} != digest
}, testutils.WaitTimeout(t), 100*time.Millisecond).Should(gomega.BeTrue())`
$DIR/core/services/relay/evm/mercury/config_poller_test.go: `th.backend.Commit()`
$DIR/core/services/relay/evm/mercury/config_poller_test.go: `configBlock, digest, err = th.configPoller.LatestConfigDetails(testutils.Context(t))`
$DIR/core/services/relay/evm/mercury/config_poller_test.go: `.NewHash()`
$DIR/core/services/relay/evm/mercury/config_poller_test.go: `.configPoller.Notify()`
$DIR/core/services/relay/evm/mercury/config_poller_test.go: `.configPoller.LatestConfigDetails(testutils.Context(t))`
$DIR/core/services/relay/evm/mercury/config_poller_test.go: `.Context(t)`
$DIR/core/services/relay/evm/mercury/config_poller_test.go: `.RandomAddress()`
$DIR/core/services/relay/evm/mercury/config_poller_test.go: `.Bytes()`
$DIR/core/services/relay/evm/mercury/config_poller_test.go: `.Account(evmutils.RandomAddress().String())`
$DIR/core/services/relay/evm/mercury/config_poller_test.go: `.RandomAddress()`
$DIR/core/services/relay/evm/mercury/config_poller_test.go: `.String()`
$DIR/core/services/relay/evm/mercury/config_poller_test.go: `.RandomBytes32()`
$DIR/core/services/relay/evm/mercury/config_poller_test.go: `.MustNewPeerID()`
$DIR/core/services/relay/evm/mercury/config_poller_test.go: `.RandomBytes32()`
$DIR/core/services/relay/evm/mercury/config_poller_test.go: `.MustNewType("tuple()")`
$DIR/core/services/relay/evm/mercury/config_poller_test.go: `.Encode(map[string]interface{}{}, configType)`
$DIR/core/services/relay/evm/mercury/config_poller_test.go: `.ContractSetConfigArgsForTests(
2*time.Second, // DeltaProgress
20*time.Second, // DeltaResend
100*time.Millisecond, // DeltaRound
0, // DeltaGrace
1*time.Minute, // DeltaStage
100, // rMax
[]int{len(oracles)}, // S
oracles,
[]byte{}, // reportingPluginConfig []byte,
0, // Max duration query
250*time.Millisecond, // Max duration observation
250*time.Millisecond, // MaxDurationReport
250*time.Millisecond, // MaxDurationShouldAcceptFinalizedReport
250*time.Millisecond, // MaxDurationShouldTransmitAcceptedReport
int(f), // f
onchainConfigVal,
)`
$DIR/core/services/relay/evm/mercury/config_poller_test.go: `.Account(fmt.Sprintf("%x", oracles[i].OffchainPublicKey[:]))`
$DIR/core/services/relay/evm/mercury/config_poller_test.go: `.Sprintf("%x", oracles[i].OffchainPublicKey[:])`
$DIR/core/services/relay/evm/mercury/config_poller_test.go: `.verifierContract.SetConfig(th.user, feedIDBytes, signerAddresses, offchainTransmitters, f, onchainConfig, offchainConfigVersion, offchainConfig, nil)`
$DIR/core/services/relay/evm/mercury/config_poller_test.go: `.backend.Commit()`
$DIR/core/services/relay/evm/mercury/config_poller_test.go: `.backend.BlockByNumber(testutils.Context(t), nil)`
$DIR/core/services/relay/evm/mercury/config_poller_test.go: `.Context(t)`
$DIR/core/services/relay/evm/mercury/config_poller_test.go: `.NewGomegaWithT(t)`
$DIR/core/services/relay/evm/mercury/config_poller_test.go: `.Eventually(func() bool {
th.backend.Commit()
configBlock, digest, err = th.configPoller.LatestConfigDetails(testutils.Context(t))
require.NoError(t, err)
return ocrtypes2.ConfigDigest{} != digest
}, testutils.WaitTimeout(t), 100*time.Millisecond)`
$DIR/core/services/relay/evm/mercury/config_poller_test.go: `.backend.Commit()`
$DIR/core/services/relay/evm/mercury/config_poller_test.go: `.configPoller.LatestConfigDetails(testutils.Context(t))`
$DIR/core/services/relay/evm/mercury/config_poller_test.go: `.Context(t)`
$DIR/core/services/relay/evm/mercury/config_poller_test.go: `.WaitTimeout(t)`
$DIR/core/services/relay/evm/mercury/config_poller_test.go: `.Should(gomega.BeTrue())`
$DIR/core/services/relay/evm/mercury/config_poller_test.go: `.BeTrue()`
$DIR/core/services/relay/evm/mercury/config_poller_test.go: `.configPoller.LatestConfig(testutils.Context(t), configBlock)`
$DIR/core/services/relay/evm/mercury/config_poller_test.go: `.Context(t)`
$DIR/core/services/relay/evm/mercury/offchain_config_digester_test.go: `_, err = OffchainConfigDigester{}.ConfigDigest(types.ContractConfig{
Signers: []types.OnchainPublicKey{{1, 2}},
})`
$DIR/core/services/relay/evm/mercury/offchain_config_digester_test.go: `_, err = OffchainConfigDigester{}.ConfigDigest(types.ContractConfig{
Transmitters: []types.Account{"0x"},
})`
$DIR/core/services/relay/evm/mercury/offchain_config_digester_test.go: `_, err = OffchainConfigDigester{}.ConfigDigest(types.ContractConfig{
Transmitters: []types.Account{"7343581f55146951b0f678dc6cfa8fd360e2f353"},
})`
$DIR/core/services/relay/evm/mercury/offchain_config_digester_test.go: `_, err = OffchainConfigDigester{}.ConfigDigest(types.ContractConfig{
Transmitters: []types.Account{"7343581f55146951b0f678dc6cfa8fd360e2f353aabbccddeeffaaccddeeffaz"},
})`
$DIR/core/services/relay/evm/mercury/offchain_config_digester_test.go: `_, err = OffchainConfigDigester{ChainID: big.NewInt(0)}.ConfigDigest(types.ContractConfig{
Transmitters: []types.Account{"7343581f55146951b0f678dc6cfa8fd360e2f353aabbccddeeffaaccddeeffaa"},
})`
$DIR/core/services/relay/evm/mercury/offchain_config_digester_test.go: `.NewInt(0)`
$DIR/core/services/relay/evm/mercury/offchain_config_digester_test.go: `.ConfigDigest(types.ContractConfig{})`
$DIR/core/services/relay/evm/mercury/offchain_config_digester_test.go: `.NewInt(0)`
$DIR/core/services/relay/evm/mercury/offchain_config_digester_test.go: `.ConfigDigest(types.ContractConfig{})`
$DIR/core/services/relay/evm/mercury/offchain_config_digester_test.go: `.NewInt(1)`
$DIR/core/services/relay/evm/mercury/offchain_config_digester_test.go: `.ConfigDigest(types.ContractConfig{})`
$DIR/core/services/relay/evm/mercury/offchain_config_digester_test.go: `.NewInt(1)`
$DIR/core/services/relay/evm/mercury/offchain_config_digester_test.go: `.ConfigDigest(types.ContractConfig{})`
$DIR/core/services/relay/evm/mercury/offchain_config_digester_test.go: `.ConfigDigest(types.ContractConfig{
Signers: []types.OnchainPublicKey{{1, 2}},
})`
$DIR/core/services/relay/evm/mercury/offchain_config_digester_test.go: `.ConfigDigest(types.ContractConfig{
Transmitters: []types.Account{"0x"},
})`
$DIR/core/services/relay/evm/mercury/offchain_config_digester_test.go: `.ConfigDigest(types.ContractConfig{
Transmitters: []types.Account{"7343581f55146951b0f678dc6cfa8fd360e2f353"},
})`
$DIR/core/services/relay/evm/mercury/offchain_config_digester_test.go: `.ConfigDigest(types.ContractConfig{
Transmitters: []types.Account{"7343581f55146951b0f678dc6cfa8fd360e2f353aabbccddeeffaaccddeeffaz"},
})`
$DIR/core/services/relay/evm/mercury/offchain_config_digester_test.go: `.NewInt(0)`
$DIR/core/services/relay/evm/mercury/offchain_config_digester_test.go: `.ConfigDigest(types.ContractConfig{
Transmitters: []types.Account{"7343581f55146951b0f678dc6cfa8fd360e2f353aabbccddeeffaaccddeeffaa"},
})`
$DIR/core/services/relay/evm/mercury/orm_test.go: `pgtest.MustExec(t, db, `SET CONSTRAINTS mercury_transmit_requests_job_id_fkey DEFERRED`)`
$DIR/core/services/relay/evm/mercury/orm_test.go: `pgtest.MustExec(t, db, `SET CONSTRAINTS feed_latest_reports_job_id_fkey DEFERRED`)`
$DIR/core/services/relay/evm/mercury/orm_test.go: `reportContexts[i] = ocrtypes.ReportContext{
ReportTimestamp: ocrtypes.ReportTimestamp{
ConfigDigest: ocrtypes.ConfigDigest{'1'},
Epoch: 10,
Round: uint8(i),
},
ExtraHash: [32]byte{'2'},
}`
$DIR/core/services/relay/evm/mercury/orm_test.go: `err = orm.InsertTransmitRequest(ctx, []string{sURL}, &pb.TransmitRequest{Payload: reports[0]}, jobID, reportContexts[0])`
$DIR/core/services/relay/evm/mercury/orm_test.go: `err = orm.InsertTransmitRequest(ctx, []string{sURL}, &pb.TransmitRequest{Payload: reports[1]}, jobID, reportContexts[1])`
$DIR/core/services/relay/evm/mercury/orm_test.go: `err = orm.InsertTransmitRequest(ctx, []string{sURL}, &pb.TransmitRequest{Payload: reports[2]}, jobID, reportContexts[2])`
$DIR/core/services/relay/evm/mercury/orm_test.go: `err = orm.InsertTransmitRequest(ctx, []string{sURL2}, &pb.TransmitRequest{Payload: reports[3]}, jobID, reportContexts[0])`
$DIR/core/services/relay/evm/mercury/orm_test.go: `transmissions, err = orm.GetTransmitRequests(ctx, sURL2, jobID)`
$DIR/core/services/relay/evm/mercury/orm_test.go: `l, err = orm.LatestReport(testutils.Context(t), feedID)`
$DIR/core/services/relay/evm/mercury/orm_test.go: `err = orm.DeleteTransmitRequests(ctx, sURL, []*pb.TransmitRequest{{Payload: reports[1]}})`
$DIR/core/services/relay/evm/mercury/orm_test.go: `transmissions, err = orm.GetTransmitRequests(ctx, sURL, jobID)`
$DIR/core/services/relay/evm/mercury/orm_test.go: `l, err = orm.LatestReport(testutils.Context(t), feedID)`
$DIR/core/services/relay/evm/mercury/orm_test.go: `err = orm.DeleteTransmitRequests(ctx, sURL, []*pb.TransmitRequest{{Payload: []byte("does-not-exist")}})`
$DIR/core/services/relay/evm/mercury/orm_test.go: `transmissions, err = orm.GetTransmitRequests(ctx, sURL, jobID)`
$DIR/core/services/relay/evm/mercury/orm_test.go: `err = orm.DeleteTransmitRequests(ctx, sURL, []*pb.TransmitRequest{
{Payload: reports[0]},
{Payload: reports[2]},
})`
$DIR/core/services/relay/evm/mercury/orm_test.go: `l, err = orm.LatestReport(testutils.Context(t), feedID)`
$DIR/core/services/relay/evm/mercury/orm_test.go: `transmissions, err = orm.GetTransmitRequests(ctx, sURL, jobID)`
$DIR/core/services/relay/evm/mercury/orm_test.go: `err = orm.InsertTransmitRequest(ctx, []string{sURL}, &pb.TransmitRequest{Payload: reports[3]}, jobID, reportContexts[3])`
$DIR/core/services/relay/evm/mercury/orm_test.go: `transmissions, err = orm.GetTransmitRequests(ctx, sURL, jobID)`
$DIR/core/services/relay/evm/mercury/orm_test.go: `err = orm.InsertTransmitRequest(ctx, []string{sURL}, &pb.TransmitRequest{Payload: reports[3]}, jobID, reportContexts[3])`
$DIR/core/services/relay/evm/mercury/orm_test.go: `err = orm.InsertTransmitRequest(ctx, []string{sURL}, &pb.TransmitRequest{Payload: reports[3]}, jobID, reportContexts[3])`
$DIR/core/services/relay/evm/mercury/orm_test.go: `transmissions, err = orm.GetTransmitRequests(ctx, sURL, jobID)`
$DIR/core/services/relay/evm/mercury/orm_test.go: `l, err = orm.LatestReport(testutils.Context(t), feedID)`
$DIR/core/services/relay/evm/mercury/orm_test.go: `transmissions, err = orm.GetTransmitRequests(ctx, sURL2, jobID)`
$DIR/core/services/relay/evm/mercury/orm_test.go: `pgtest.MustExec(t, db, `SET CONSTRAINTS mercury_transmit_requests_job_id_fkey DEFERRED`)`
$DIR/core/services/relay/evm/mercury/orm_test.go: `pgtest.MustExec(t, db, `SET CONSTRAINTS feed_latest_reports_job_id_fkey DEFERRED`)`
$DIR/core/services/relay/evm/mercury/orm_test.go: `reportContexts[i] = ocrtypes.ReportContext{
ReportTimestamp: ocrtypes.ReportTimestamp{
ConfigDigest: ocrtypes.ConfigDigest{'1'},
Epoch: 10,
Round: uint8(i),
},
ExtraHash: [32]byte{'2'},
}`
$DIR/core/services/relay/evm/mercury/orm_test.go: `transmissions, err = orm.GetTransmitRequests(ctx, sURL2, jobID)`
$DIR/core/services/relay/evm/mercury/orm_test.go: `transmissions, err = orm.GetTransmitRequests(ctx, sURL3, jobID)`
$DIR/core/services/relay/evm/mercury/orm_test.go: `pgtest.MustExec(t, db, `SET CONSTRAINTS mercury_transmit_requests_job_id_fkey DEFERRED`)`
$DIR/core/services/relay/evm/mercury/orm_test.go: `pgtest.MustExec(t, db, `SET CONSTRAINTS feed_latest_reports_job_id_fkey DEFERRED`)`
$DIR/core/services/relay/evm/mercury/orm_test.go: `err = orm.InsertTransmitRequest(ctx, []string{sURL}, &pb.TransmitRequest{Payload: reports[1]}, jobID, makeReportContext(1, 2))`
$DIR/core/services/relay/evm/mercury/orm_test.go: `err = orm.InsertTransmitRequest(ctx, []string{sURL2}, &pb.TransmitRequest{Payload: reports[0]}, jobID, makeReportContext(1, 0))`
$DIR/core/services/relay/evm/mercury/orm_test.go: `err = orm.InsertTransmitRequest(ctx, []string{sURL2}, &pb.TransmitRequest{Payload: reports[0]}, jobID, makeReportContext(1, 1))`
$DIR/core/services/relay/evm/mercury/orm_test.go: `err = orm.InsertTransmitRequest(ctx, []string{sURL2}, &pb.TransmitRequest{Payload: reports[1]}, jobID, makeReportContext(1, 2))`
$DIR/core/services/relay/evm/mercury/orm_test.go: `err = orm.InsertTransmitRequest(ctx, []string{sURL2}, &pb.TransmitRequest{Payload: reports[2]}, jobID, makeReportContext(1, 3))`
$DIR/core/services/relay/evm/mercury/orm_test.go: `err = orm.PruneTransmitRequests(ctx, sURL, jobID, 5)`
$DIR/core/services/relay/evm/mercury/orm_test.go: `err = orm.PruneTransmitRequests(ctx, sURL, jobID, 2)`
$DIR/core/services/relay/evm/mercury/orm_test.go: `transmissions, err = orm.GetTransmitRequests(ctx, sURL, jobID)`
$DIR/core/services/relay/evm/mercury/orm_test.go: `err = orm.PruneTransmitRequests(ctx, sURL, -1, 2)`
$DIR/core/services/relay/evm/mercury/orm_test.go: `transmissions, err = orm.GetTransmitRequests(ctx, sURL, jobID)`
$DIR/core/services/relay/evm/mercury/orm_test.go: `err = orm.InsertTransmitRequest(ctx, []string{sURL}, &pb.TransmitRequest{Payload: reports[2]}, jobID, makeReportContext(2, 1))`
$DIR/core/services/relay/evm/mercury/orm_test.go: `err = orm.InsertTransmitRequest(ctx, []string{sURL}, &pb.TransmitRequest{Payload: reports[3]}, jobID, makeReportContext(2, 2))`
$DIR/core/services/relay/evm/mercury/orm_test.go: `err = orm.PruneTransmitRequests(ctx, sURL, jobID, 3)`
$DIR/core/services/relay/evm/mercury/orm_test.go: `transmissions, err = orm.GetTransmitRequests(ctx, sURL, jobID)`
$DIR/core/services/relay/evm/mercury/orm_test.go: `transmissions, err = orm.GetTransmitRequests(ctx, sURL2, jobID)`
$DIR/core/services/relay/evm/mercury/orm_test.go: `pgtest.MustExec(t, db, `SET CONSTRAINTS mercury_transmit_requests_job_id_fkey DEFERRED`)`
$DIR/core/services/relay/evm/mercury/orm_test.go: `pgtest.MustExec(t, db, `SET CONSTRAINTS feed_latest_reports_job_id_fkey DEFERRED`)`
$DIR/core/services/relay/evm/mercury/orm_test.go: `err = orm.InsertTransmitRequest(ctx, []string{sURL2}, &pb.TransmitRequest{Payload: reports[1]}, jobID, makeReportContext(
0, 0,
))`
$DIR/core/services/relay/evm/mercury/orm_test.go: `t.Run("replaces if epoch and round are larger", func(t *testing.T) {
err = orm.InsertTransmitRequest(ctx, []string{"foo"}, &pb.TransmitRequest{Payload: reports[1]}, jobID, makeReportContext(1, 1))
require.NoError(t, err)
l, err = orm.LatestReport(testutils.Context(t), feedID)
require.NoError(t, err)
assert.Equal(t, reports[1], l)
})`
$DIR/core/services/relay/evm/mercury/orm_test.go: `err = orm.InsertTransmitRequest(ctx, []string{"foo"}, &pb.TransmitRequest{Payload: reports[1]}, jobID, makeReportContext(1, 1))`
$DIR/core/services/relay/evm/mercury/orm_test.go: `l, err = orm.LatestReport(testutils.Context(t), feedID)`
$DIR/core/services/relay/evm/mercury/orm_test.go: `t.Run("replaces if epoch is the same but round is greater", func(t *testing.T) {
err = orm.InsertTransmitRequest(ctx, []string{sURL}, &pb.TransmitRequest{Payload: reports[2]}, jobID, makeReportContext(1, 2))
require.NoError(t, err)
l, err = orm.LatestReport(testutils.Context(t), feedID)
require.NoError(t, err)
assert.Equal(t, reports[2], l)
})`
$DIR/core/services/relay/evm/mercury/orm_test.go: `err = orm.InsertTransmitRequest(ctx, []string{sURL}, &pb.TransmitRequest{Payload: reports[2]}, jobID, makeReportContext(1, 2))`
$DIR/core/services/relay/evm/mercury/orm_test.go: `l, err = orm.LatestReport(testutils.Context(t), feedID)`
$DIR/core/services/relay/evm/mercury/orm_test.go: `t.Run("replaces if epoch is larger but round is smaller", func(t *testing.T) {
err = orm.InsertTransmitRequest(ctx, []string{"bar"}, &pb.TransmitRequest{Payload: reports[3]}, jobID, makeReportContext(2, 1))
require.NoError(t, err)
l, err = orm.LatestReport(testutils.Context(t), feedID)
require.NoError(t, err)
assert.Equal(t, reports[3], l)
})`
$DIR/core/services/relay/evm/mercury/orm_test.go: `err = orm.InsertTransmitRequest(ctx, []string{"bar"}, &pb.TransmitRequest{Payload: reports[3]}, jobID, makeReportContext(2, 1))`
$DIR/core/services/relay/evm/mercury/orm_test.go: `l, err = orm.LatestReport(testutils.Context(t), feedID)`
$DIR/core/services/relay/evm/mercury/orm_test.go: `err = orm.InsertTransmitRequest(ctx, []string{sURL}, &pb.TransmitRequest{Payload: reports[0]}, jobID, makeReportContext(2, 1))`
$DIR/core/services/relay/evm/mercury/orm_test.go: `l, err = orm.LatestReport(testutils.Context(t), feedID)`
$DIR/core/services/relay/evm/mercury/orm_test.go: `t.Run("FeedIDFromReport extracts the current block number from a valid report", func(t *testing.T) {
report := buildSampleV1Report(42)
f, err := FeedIDFromReport(report)
require.NoError(t, err)
assert.Equal(t, sampleFeedID[:], f[:])
})`
$DIR/core/services/relay/evm/mercury/orm_test.go: `.Context(t)`
$DIR/core/services/relay/evm/mercury/orm_test.go: `.NewSqlxDB(t)`
$DIR/core/services/relay/evm/mercury/orm_test.go: `.Int32()`
$DIR/core/services/relay/evm/mercury/orm_test.go: `.MustExec(t, db, `SET CONSTRAINTS mercury_transmit_requests_job_id_fkey DEFERRED`)`
$DIR/core/services/relay/evm/mercury/orm_test.go: `.MustExec(t, db, `SET CONSTRAINTS feed_latest_reports_job_id_fkey DEFERRED`)`
$DIR/core/services/relay/evm/mercury/orm_test.go: `.LatestReport(testutils.Context(t), feedID)`
$DIR/core/services/relay/evm/mercury/orm_test.go: `.Context(t)`
$DIR/core/services/relay/evm/mercury/orm_test.go: `.InsertTransmitRequest(ctx, []string{sURL}, &pb.TransmitRequest{Payload: reports[0]}, jobID, reportContexts[0])`
$DIR/core/services/relay/evm/mercury/orm_test.go: `.InsertTransmitRequest(ctx, []string{sURL}, &pb.TransmitRequest{Payload: reports[1]}, jobID, reportContexts[1])`
$DIR/core/services/relay/evm/mercury/orm_test.go: `.InsertTransmitRequest(ctx, []string{sURL}, &pb.TransmitRequest{Payload: reports[2]}, jobID, reportContexts[2])`
$DIR/core/services/relay/evm/mercury/orm_test.go: `.InsertTransmitRequest(ctx, []string{sURL2}, &pb.TransmitRequest{Payload: reports[3]}, jobID, reportContexts[0])`
$DIR/core/services/relay/evm/mercury/orm_test.go: `.GetTransmitRequests(ctx, sURL, jobID)`
$DIR/core/services/relay/evm/mercury/orm_test.go: `.GetTransmitRequests(ctx, sURL2, jobID)`
$DIR/core/services/relay/evm/mercury/orm_test.go: `.LatestReport(testutils.Context(t), feedID)`
$DIR/core/services/relay/evm/mercury/orm_test.go: `.Context(t)`
$DIR/core/services/relay/evm/mercury/orm_test.go: `.DeleteTransmitRequests(ctx, sURL, []*pb.TransmitRequest{{Payload: reports[1]}})`
$DIR/core/services/relay/evm/mercury/orm_test.go: `.GetTransmitRequests(ctx, sURL, jobID)`
$DIR/core/services/relay/evm/mercury/orm_test.go: `.LatestReport(testutils.Context(t), feedID)`
$DIR/core/services/relay/evm/mercury/orm_test.go: `.Context(t)`
$DIR/core/services/relay/evm/mercury/orm_test.go: `.DeleteTransmitRequests(ctx, sURL, []*pb.TransmitRequest{{Payload: []byte("does-not-exist")}})`
$DIR/core/services/relay/evm/mercury/orm_test.go: `.GetTransmitRequests(ctx, sURL, jobID)`
$DIR/core/services/relay/evm/mercury/orm_test.go: `.DeleteTransmitRequests(ctx, sURL, []*pb.TransmitRequest{
{Payload: reports[0]},
{Payload: reports[2]},
})`
$DIR/core/services/relay/evm/mercury/orm_test.go: `.LatestReport(testutils.Context(t), feedID)`
$DIR/core/services/relay/evm/mercury/orm_test.go: `.Context(t)`
$DIR/core/services/relay/evm/mercury/orm_test.go: `.GetTransmitRequests(ctx, sURL, jobID)`
$DIR/core/services/relay/evm/mercury/orm_test.go: `.InsertTransmitRequest(ctx, []string{sURL}, &pb.TransmitRequest{Payload: reports[3]}, jobID, reportContexts[3])`
$DIR/core/services/relay/evm/mercury/orm_test.go: `.GetTransmitRequests(ctx, sURL, jobID)`
$DIR/core/services/relay/evm/mercury/orm_test.go: `.InsertTransmitRequest(ctx, []string{sURL}, &pb.TransmitRequest{Payload: reports[3]}, jobID, reportContexts[3])`
$DIR/core/services/relay/evm/mercury/orm_test.go: `.InsertTransmitRequest(ctx, []string{sURL}, &pb.TransmitRequest{Payload: reports[3]}, jobID, reportContexts[3])`
$DIR/core/services/relay/evm/mercury/orm_test.go: `.GetTransmitRequests(ctx, sURL, jobID)`
$DIR/core/services/relay/evm/mercury/orm_test.go: `.LatestReport(testutils.Context(t), feedID)`
$DIR/core/services/relay/evm/mercury/orm_test.go: `.Context(t)`
$DIR/core/services/relay/evm/mercury/orm_test.go: `.GetTransmitRequests(ctx, sURL2, jobID)`
$DIR/core/services/relay/evm/mercury/orm_test.go: `.Context(t)`
$DIR/core/services/relay/evm/mercury/orm_test.go: `.NewSqlxDB(t)`
$DIR/core/services/relay/evm/mercury/orm_test.go: `.Int32()`
$DIR/core/services/relay/evm/mercury/orm_test.go: `.MustExec(t, db, `SET CONSTRAINTS mercury_transmit_requests_job_id_fkey DEFERRED`)`
$DIR/core/services/relay/evm/mercury/orm_test.go: `.MustExec(t, db, `SET CONSTRAINTS feed_latest_reports_job_id_fkey DEFERRED`)`
$DIR/core/services/relay/evm/mercury/orm_test.go: `.InsertTransmitRequest(ctx, []string{sURL, sURL2, sURL3}, &pb.TransmitRequest{Payload: reports[0]}, jobID, reportContexts[0])`
$DIR/core/services/relay/evm/mercury/orm_test.go: `.GetTransmitRequests(ctx, sURL, jobID)`
$DIR/core/services/relay/evm/mercury/orm_test.go: `.GetTransmitRequests(ctx, sURL2, jobID)`
$DIR/core/services/relay/evm/mercury/orm_test.go: `.GetTransmitRequests(ctx, sURL3, jobID)`
$DIR/core/services/relay/evm/mercury/orm_test.go: `.LatestReport(testutils.Context(t), feedID)`
$DIR/core/services/relay/evm/mercury/orm_test.go: `.Context(t)`
$DIR/core/services/relay/evm/mercury/orm_test.go: `.Context(t)`
$DIR/core/services/relay/evm/mercury/orm_test.go: `.NewSqlxDB(t)`
$DIR/core/services/relay/evm/mercury/orm_test.go: `.Int32()`
$DIR/core/services/relay/evm/mercury/orm_test.go: `.MustExec(t, db, `SET CONSTRAINTS mercury_transmit_requests_job_id_fkey DEFERRED`)`
$DIR/core/services/relay/evm/mercury/orm_test.go: `.MustExec(t, db, `SET CONSTRAINTS feed_latest_reports_job_id_fkey DEFERRED`)`
$DIR/core/services/relay/evm/mercury/orm_test.go: `.InsertTransmitRequest(ctx, []string{sURL}, &pb.TransmitRequest{Payload: reports[0]}, jobID, makeReportContext(1, 1))`
$DIR/core/services/relay/evm/mercury/orm_test.go: `.InsertTransmitRequest(ctx, []string{sURL}, &pb.TransmitRequest{Payload: reports[1]}, jobID, makeReportContext(1, 2))`
$DIR/core/services/relay/evm/mercury/orm_test.go: `.InsertTransmitRequest(ctx, []string{sURL2}, &pb.TransmitRequest{Payload: reports[0]}, jobID, makeReportContext(1, 0))`
$DIR/core/services/relay/evm/mercury/orm_test.go: `.InsertTransmitRequest(ctx, []string{sURL2}, &pb.TransmitRequest{Payload: reports[0]}, jobID, makeReportContext(1, 1))`
$DIR/core/services/relay/evm/mercury/orm_test.go: `.InsertTransmitRequest(ctx, []string{sURL2}, &pb.TransmitRequest{Payload: reports[1]}, jobID, makeReportContext(1, 2))`
$DIR/core/services/relay/evm/mercury/orm_test.go: `.InsertTransmitRequest(ctx, []string{sURL2}, &pb.TransmitRequest{Payload: reports[2]}, jobID, makeReportContext(1, 3))`
$DIR/core/services/relay/evm/mercury/orm_test.go: `.PruneTransmitRequests(ctx, sURL, jobID, 5)`
$DIR/core/services/relay/evm/mercury/orm_test.go: `.GetTransmitRequests(ctx, sURL, jobID)`
$DIR/core/services/relay/evm/mercury/orm_test.go: `.PruneTransmitRequests(ctx, sURL, jobID, 2)`
$DIR/core/services/relay/evm/mercury/orm_test.go: `.GetTransmitRequests(ctx, sURL, jobID)`
$DIR/core/services/relay/evm/mercury/orm_test.go: `.PruneTransmitRequests(ctx, sURL, -1, 2)`
$DIR/core/services/relay/evm/mercury/orm_test.go: `.GetTransmitRequests(ctx, sURL, jobID)`
$DIR/core/services/relay/evm/mercury/orm_test.go: `.InsertTransmitRequest(ctx, []string{sURL}, &pb.TransmitRequest{Payload: reports[2]}, jobID, makeReportContext(2, 1))`
$DIR/core/services/relay/evm/mercury/orm_test.go: `.InsertTransmitRequest(ctx, []string{sURL}, &pb.TransmitRequest{Payload: reports[3]}, jobID, makeReportContext(2, 2))`
$DIR/core/services/relay/evm/mercury/orm_test.go: `.PruneTransmitRequests(ctx, sURL, jobID, 3)`
$DIR/core/services/relay/evm/mercury/orm_test.go: `.GetTransmitRequests(ctx, sURL, jobID)`
$DIR/core/services/relay/evm/mercury/orm_test.go: `.GetTransmitRequests(ctx, sURL2, jobID)`
$DIR/core/services/relay/evm/mercury/orm_test.go: `.Context(t)`
$DIR/core/services/relay/evm/mercury/orm_test.go: `.NewSqlxDB(t)`
$DIR/core/services/relay/evm/mercury/orm_test.go: `.Int32()`
$DIR/core/services/relay/evm/mercury/orm_test.go: `.MustExec(t, db, `SET CONSTRAINTS mercury_transmit_requests_job_id_fkey DEFERRED`)`
$DIR/core/services/relay/evm/mercury/orm_test.go: `.MustExec(t, db, `SET CONSTRAINTS feed_latest_reports_job_id_fkey DEFERRED`)`
$DIR/core/services/relay/evm/mercury/orm_test.go: `.InsertTransmitRequest(ctx, []string{sURL}, &pb.TransmitRequest{Payload: reports[0]}, jobID, makeReportContext(
0, 0,
))`
$DIR/core/services/relay/evm/mercury/orm_test.go: `.InsertTransmitRequest(ctx, []string{sURL2}, &pb.TransmitRequest{Payload: reports[1]}, jobID, makeReportContext(
0, 0,
))`
$DIR/core/services/relay/evm/mercury/orm_test.go: `.LatestReport(testutils.Context(t), feedID)`
$DIR/core/services/relay/evm/mercury/orm_test.go: `.Context(t)`
$DIR/core/services/relay/evm/mercury/orm_test.go: `.Run("replaces if epoch and round are larger", func(t *testing.T) {
err = orm.InsertTransmitRequest(ctx, []string{"foo"}, &pb.TransmitRequest{Payload: reports[1]}, jobID, makeReportContext(1, 1))
require.NoError(t, err)
l, err = orm.LatestReport(testutils.Context(t), feedID)
require.NoError(t, err)
assert.Equal(t, reports[1], l)
})`
$DIR/core/services/relay/evm/mercury/orm_test.go: `.InsertTransmitRequest(ctx, []string{"foo"}, &pb.TransmitRequest{Payload: reports[1]}, jobID, makeReportContext(1, 1))`
$DIR/core/services/relay/evm/mercury/orm_test.go: `.LatestReport(testutils.Context(t), feedID)`
$DIR/core/services/relay/evm/mercury/orm_test.go: `.Context(t)`
$DIR/core/services/relay/evm/mercury/orm_test.go: `.Run("replaces if epoch is the same but round is greater", func(t *testing.T) {
err = orm.InsertTransmitRequest(ctx, []string{sURL}, &pb.TransmitRequest{Payload: reports[2]}, jobID, makeReportContext(1, 2))
require.NoError(t, err)
l, err = orm.LatestReport(testutils.Context(t), feedID)
require.NoError(t, err)
assert.Equal(t, reports[2], l)
})`
$DIR/core/services/relay/evm/mercury/orm_test.go: `.InsertTransmitRequest(ctx, []string{sURL}, &pb.TransmitRequest{Payload: reports[2]}, jobID, makeReportContext(1, 2))`
$DIR/core/services/relay/evm/mercury/orm_test.go: `.LatestReport(testutils.Context(t), feedID)`
$DIR/core/services/relay/evm/mercury/orm_test.go: `.Context(t)`
$DIR/core/services/relay/evm/mercury/orm_test.go: `.Run("replaces if epoch is larger but round is smaller", func(t *testing.T) {
err = orm.InsertTransmitRequest(ctx, []string{"bar"}, &pb.TransmitRequest{Payload: reports[3]}, jobID, makeReportContext(2, 1))
require.NoError(t, err)
l, err = orm.LatestReport(testutils.Context(t), feedID)
require.NoError(t, err)
assert.Equal(t, reports[3], l)
})`
$DIR/core/services/relay/evm/mercury/orm_test.go: `.InsertTransmitRequest(ctx, []string{"bar"}, &pb.TransmitRequest{Payload: reports[3]}, jobID, makeReportContext(2, 1))`
$DIR/core/services/relay/evm/mercury/orm_test.go: `.LatestReport(testutils.Context(t), feedID)`
$DIR/core/services/relay/evm/mercury/orm_test.go: `.Context(t)`
$DIR/core/services/relay/evm/mercury/orm_test.go: `.InsertTransmitRequest(ctx, []string{sURL}, &pb.TransmitRequest{Payload: reports[0]}, jobID, makeReportContext(2, 1))`
$DIR/core/services/relay/evm/mercury/orm_test.go: `.LatestReport(testutils.Context(t), feedID)`
$DIR/core/services/relay/evm/mercury/orm_test.go: `.Context(t)`
$DIR/core/services/relay/evm/mercury/orm_test.go: `.Run("FeedIDFromReport extracts the current block number from a valid report", func(t *testing.T) {
report := buildSampleV1Report(42)
f, err := FeedIDFromReport(report)
require.NoError(t, err)
assert.Equal(t, sampleFeedID[:], f[:])
})`
$DIR/core/services/relay/evm/mercury/persistence_manager_test.go: `pgtest.MustExec(t, db, `SET CONSTRAINTS mercury_transmit_requests_job_id_fkey DEFERRED`)`
$DIR/core/services/relay/evm/mercury/persistence_manager_test.go: `pgtest.MustExec(t, db, `SET CONSTRAINTS feed_latest_reports_job_id_fkey DEFERRED`)`
$DIR/core/services/relay/evm/mercury/persistence_manager_test.go: `err = pm.Insert(ctx, &pb.TransmitRequest{Payload: reports[1]}, ocrtypes.ReportContext{})`
$DIR/core/services/relay/evm/mercury/persistence_manager_test.go: `err = pm.Delete(ctx, &pb.TransmitRequest{Payload: reports[0]})`
$DIR/core/services/relay/evm/mercury/persistence_manager_test.go: `transmissions, err = pm.Load(ctx)`
$DIR/core/services/relay/evm/mercury/persistence_manager_test.go: `transmissions, err = pm2.Load(ctx)`
$DIR/core/services/relay/evm/mercury/persistence_manager_test.go: `pgtest.MustExec(t, db, `SET CONSTRAINTS mercury_transmit_requests_job_id_fkey DEFERRED`)`
$DIR/core/services/relay/evm/mercury/persistence_manager_test.go: `pgtest.MustExec(t, db, `SET CONSTRAINTS feed_latest_reports_job_id_fkey DEFERRED`)`
$DIR/core/services/relay/evm/mercury/persistence_manager_test.go: `err = pm.Insert(ctx, &pb.TransmitRequest{Payload: reports[1]}, ocrtypes.ReportContext{})`
$DIR/core/services/relay/evm/mercury/persistence_manager_test.go: `err = pm.Start(ctx)`
$DIR/core/services/relay/evm/mercury/persistence_manager_test.go: `pm.AsyncDelete(&pb.TransmitRequest{Payload: reports[0]})`
$DIR/core/services/relay/evm/mercury/persistence_manager_test.go: `observedLogs.TakeAll()`
$DIR/core/services/relay/evm/mercury/persistence_manager_test.go: `testutils.WaitForLogMessage(t, observedLogs, "Deleted queued transmit requests")`
$DIR/core/services/relay/evm/mercury/persistence_manager_test.go: `err = pm.Close()`
$DIR/core/services/relay/evm/mercury/persistence_manager_test.go: `pm.AsyncDelete(&pb.TransmitRequest{Payload: reports[1]})`
$DIR/core/services/relay/evm/mercury/persistence_manager_test.go: `time.Sleep(15 * time.Millisecond)`
$DIR/core/services/relay/evm/mercury/persistence_manager_test.go: `transmissions, err = pm.Load(ctx)`
$DIR/core/services/relay/evm/mercury/persistence_manager_test.go: `pgtest.MustExec(t, db, `SET CONSTRAINTS mercury_transmit_requests_job_id_fkey DEFERRED`)`
$DIR/core/services/relay/evm/mercury/persistence_manager_test.go: `pgtest.MustExec(t, db, `SET CONSTRAINTS feed_latest_reports_job_id_fkey DEFERRED`)`
$DIR/core/services/relay/evm/mercury/persistence_manager_test.go: `reports[i] = buildSampleV1Report(int64(i))`
$DIR/core/services/relay/evm/mercury/persistence_manager_test.go: `err = pm.Insert(ctx, &pb.TransmitRequest{Payload: reports[22]}, ocrtypes.ReportContext{ReportTimestamp: ocrtypes.ReportTimestamp{Epoch: 22}})`
$DIR/core/services/relay/evm/mercury/persistence_manager_test.go: `err = pm.Insert(ctx, &pb.TransmitRequest{Payload: reports[23]}, ocrtypes.ReportContext{ReportTimestamp: ocrtypes.ReportTimestamp{Epoch: 23}})`
$DIR/core/services/relay/evm/mercury/persistence_manager_test.go: `err = pm.Start(ctx)`
$DIR/core/services/relay/evm/mercury/persistence_manager_test.go: `observedLogs.TakeAll()`
$DIR/core/services/relay/evm/mercury/persistence_manager_test.go: `testutils.WaitForLogMessage(t, observedLogs, "Pruned transmit requests table")`
$DIR/core/services/relay/evm/mercury/persistence_manager_test.go: `err = pm.Close()`
$DIR/core/services/relay/evm/mercury/persistence_manager_test.go: `err = pm.Insert(ctx, &pb.TransmitRequest{Payload: reports[24]}, ocrtypes.ReportContext{ReportTimestamp: ocrtypes.ReportTimestamp{Epoch: 24}})`
$DIR/core/services/relay/evm/mercury/persistence_manager_test.go: `transmissions, err = pm.Load(ctx)`
$DIR/core/services/relay/evm/mercury/persistence_manager_test.go: `transmissions, err = pm2.Load(ctx)`
$DIR/core/services/relay/evm/mercury/persistence_manager_test.go: `.Int32()`
$DIR/core/services/relay/evm/mercury/persistence_manager_test.go: `.Context(t)`
$DIR/core/services/relay/evm/mercury/persistence_manager_test.go: `.NewSqlxDB(t)`
$DIR/core/services/relay/evm/mercury/persistence_manager_test.go: `.MustExec(t, db, `SET CONSTRAINTS mercury_transmit_requests_job_id_fkey DEFERRED`)`
$DIR/core/services/relay/evm/mercury/persistence_manager_test.go: `.MustExec(t, db, `SET CONSTRAINTS feed_latest_reports_job_id_fkey DEFERRED`)`
$DIR/core/services/relay/evm/mercury/persistence_manager_test.go: `.Insert(ctx, &pb.TransmitRequest{Payload: reports[0]}, ocrtypes.ReportContext{})`
$DIR/core/services/relay/evm/mercury/persistence_manager_test.go: `.Insert(ctx, &pb.TransmitRequest{Payload: reports[1]}, ocrtypes.ReportContext{})`
$DIR/core/services/relay/evm/mercury/persistence_manager_test.go: `.Load(ctx)`
$DIR/core/services/relay/evm/mercury/persistence_manager_test.go: `.Delete(ctx, &pb.TransmitRequest{Payload: reports[0]})`
$DIR/core/services/relay/evm/mercury/persistence_manager_test.go: `.Load(ctx)`
$DIR/core/services/relay/evm/mercury/persistence_manager_test.go: `.Load(ctx)`
$DIR/core/services/relay/evm/mercury/persistence_manager_test.go: `.Context(t)`
$DIR/core/services/relay/evm/mercury/persistence_manager_test.go: `.Int32()`
$DIR/core/services/relay/evm/mercury/persistence_manager_test.go: `.NewSqlxDB(t)`
$DIR/core/services/relay/evm/mercury/persistence_manager_test.go: `.MustExec(t, db, `SET CONSTRAINTS mercury_transmit_requests_job_id_fkey DEFERRED`)`
$DIR/core/services/relay/evm/mercury/persistence_manager_test.go: `.MustExec(t, db, `SET CONSTRAINTS feed_latest_reports_job_id_fkey DEFERRED`)`
$DIR/core/services/relay/evm/mercury/persistence_manager_test.go: `.Insert(ctx, &pb.TransmitRequest{Payload: reports[0]}, ocrtypes.ReportContext{})`
$DIR/core/services/relay/evm/mercury/persistence_manager_test.go: `.Insert(ctx, &pb.TransmitRequest{Payload: reports[1]}, ocrtypes.ReportContext{})`
$DIR/core/services/relay/evm/mercury/persistence_manager_test.go: `.Start(ctx)`
$DIR/core/services/relay/evm/mercury/persistence_manager_test.go: `.AsyncDelete(&pb.TransmitRequest{Payload: reports[0]})`
$DIR/core/services/relay/evm/mercury/persistence_manager_test.go: `.TakeAll()`
$DIR/core/services/relay/evm/mercury/persistence_manager_test.go: `.WaitForLogMessage(t, observedLogs, "Deleted queued transmit requests")`
$DIR/core/services/relay/evm/mercury/persistence_manager_test.go: `.Load(ctx)`
$DIR/core/services/relay/evm/mercury/persistence_manager_test.go: `.AsyncDelete(&pb.TransmitRequest{Payload: reports[1]})`
$DIR/core/services/relay/evm/mercury/persistence_manager_test.go: `.Sleep(15 * time.Millisecond)`
$DIR/core/services/relay/evm/mercury/persistence_manager_test.go: `.Load(ctx)`
$DIR/core/services/relay/evm/mercury/persistence_manager_test.go: `.Int32()`
$DIR/core/services/relay/evm/mercury/persistence_manager_test.go: `.NewSqlxDB(t)`
$DIR/core/services/relay/evm/mercury/persistence_manager_test.go: `.MustExec(t, db, `SET CONSTRAINTS mercury_transmit_requests_job_id_fkey DEFERRED`)`
$DIR/core/services/relay/evm/mercury/persistence_manager_test.go: `.MustExec(t, db, `SET CONSTRAINTS feed_latest_reports_job_id_fkey DEFERRED`)`
$DIR/core/services/relay/evm/mercury/persistence_manager_test.go: `.Context(t)`
$DIR/core/services/relay/evm/mercury/persistence_manager_test.go: `.Insert(ctx, &pb.TransmitRequest{Payload: reports[i]}, ocrtypes.ReportContext{ReportTimestamp: ocrtypes.ReportTimestamp{Epoch: uint32(i)}})`
$DIR/core/services/relay/evm/mercury/persistence_manager_test.go: `.Insert(ctx, &pb.TransmitRequest{Payload: reports[21]}, ocrtypes.ReportContext{ReportTimestamp: ocrtypes.ReportTimestamp{Epoch: 21}})`
$DIR/core/services/relay/evm/mercury/persistence_manager_test.go: `.Insert(ctx, &pb.TransmitRequest{Payload: reports[22]}, ocrtypes.ReportContext{ReportTimestamp: ocrtypes.ReportTimestamp{Epoch: 22}})`
$DIR/core/services/relay/evm/mercury/persistence_manager_test.go: `.Insert(ctx, &pb.TransmitRequest{Payload: reports[23]}, ocrtypes.ReportContext{ReportTimestamp: ocrtypes.ReportTimestamp{Epoch: 23}})`
$DIR/core/services/relay/evm/mercury/persistence_manager_test.go: `.Start(ctx)`
$DIR/core/services/relay/evm/mercury/persistence_manager_test.go: `.TakeAll()`
$DIR/core/services/relay/evm/mercury/persistence_manager_test.go: `.WaitForLogMessage(t, observedLogs, "Pruned transmit requests table")`
$DIR/core/services/relay/evm/mercury/persistence_manager_test.go: `.Load(ctx)`
$DIR/core/services/relay/evm/mercury/persistence_manager_test.go: `.Insert(ctx, &pb.TransmitRequest{Payload: reports[24]}, ocrtypes.ReportContext{ReportTimestamp: ocrtypes.ReportTimestamp{Epoch: 24}})`
$DIR/core/services/relay/evm/mercury/persistence_manager_test.go: `.Load(ctx)`
$DIR/core/services/relay/evm/mercury/persistence_manager_test.go: `.Load(ctx)`
$DIR/core/services/relay/evm/mercury/queue_test.go: `transmitQueue.Init([]*Transmission{})`
$DIR/core/services/relay/evm/mercury/queue_test.go: `t.Run("successfully add transmissions to transmit queue", func(t *testing.T) {
for _, tt := range testTransmissions {
ok := transmitQueue.Push(tt.tr, tt.ctx)
require.True(t, ok)
}
report := transmitQueue.HealthReport()
assert.Nil(t, report[transmitQueue.Name()])
})`
$DIR/core/services/relay/evm/mercury/queue_test.go: `t.Run("transmit queue is more than 50% full", func(t *testing.T) {
transmitQueue.Push(testTransmissions[2].tr, testTransmissions[2].ctx)
report := transmitQueue.HealthReport()
assert.Equal(t, report[transmitQueue.Name()].Error(), "transmit priority queue is greater than 50% full (4/7)")
})`
$DIR/core/services/relay/evm/mercury/queue_test.go: `transmitQueue.Push(testTransmissions[2].tr, testTransmissions[2].ctx)`
$DIR/core/services/relay/evm/mercury/queue_test.go: `t.Run("transmit queue pops the highest priority transmission", func(t *testing.T) {
tr := transmitQueue.BlockingPop()
assert.Equal(t, testTransmissions[2].tr, tr.Req)
})`
$DIR/core/services/relay/evm/mercury/queue_test.go: `t.Run("transmit queue is full and evicts the oldest transmission", func(t *testing.T) {
deleter.On("AsyncDelete", testTransmissions[0].tr).Once()
// add 5 more transmissions to overflow the queue by 1
for i := 0; i < 5; i++ {
transmitQueue.Push(testTransmissions[1].tr, testTransmissions[1].ctx)
}
// expecting testTransmissions[0] to get evicted and not present in the queue anymore
testutils.WaitForLogMessage(t, observedLogs, "Transmit queue is full; dropping oldest transmission (reached max length of 7)")
for i := 0; i < 7; i++ {
tr := transmitQueue.BlockingPop()
assert.NotEqual(t, tr.Req, testTransmissions[0].tr)
}
})`
$DIR/core/services/relay/evm/mercury/queue_test.go: `deleter.On("AsyncDelete", testTransmissions[0].tr).Once()`
$DIR/core/services/relay/evm/mercury/queue_test.go: `transmitQueue.Push(testTransmissions[1].tr, testTransmissions[1].ctx)`
$DIR/core/services/relay/evm/mercury/queue_test.go: `testutils.WaitForLogMessage(t, observedLogs, "Transmit queue is full; dropping oldest transmission (reached max length of 7)")`
$DIR/core/services/relay/evm/mercury/queue_test.go: `t.Run("transmit queue blocks when empty and resumes when tranmission available", func(t *testing.T) {
assert.True(t, transmitQueue.IsEmpty())
var wg sync.WaitGroup
wg.Add(2)
go func() {
defer wg.Done()
tr := transmitQueue.BlockingPop()
assert.Equal(t, tr.Req, testTransmissions[0].tr)
}()
go func() {
defer wg.Done()
transmitQueue.Push(testTransmissions[0].tr, testTransmissions[0].ctx)
}()
wg.Wait()
})`
$DIR/core/services/relay/evm/mercury/queue_test.go: `wg.Add(2)`
$DIR/core/services/relay/evm/mercury/queue_test.go: `transmitQueue.Push(testTransmissions[0].tr, testTransmissions[0].ctx)`
$DIR/core/services/relay/evm/mercury/queue_test.go: `wg.Wait()`
$DIR/core/services/relay/evm/mercury/queue_test.go: `transmitQueue.Init(transmissions)`
$DIR/core/services/relay/evm/mercury/queue_test.go: `.TestLoggerObserved(t, zapcore.ErrorLevel)`
$DIR/core/services/relay/evm/mercury/queue_test.go: `.NewAsyncDeleter(t)`
$DIR/core/services/relay/evm/mercury/queue_test.go: `.Init([]*Transmission{})`
$DIR/core/services/relay/evm/mercury/queue_test.go: `.Run("successfully add transmissions to transmit queue", func(t *testing.T) {
for _, tt := range testTransmissions {
ok := transmitQueue.Push(tt.tr, tt.ctx)
require.True(t, ok)
}
report := transmitQueue.HealthReport()
assert.Nil(t, report[transmitQueue.Name()])
})`
$DIR/core/services/relay/evm/mercury/queue_test.go: `.Push(tt.tr, tt.ctx)`
$DIR/core/services/relay/evm/mercury/queue_test.go: `.HealthReport()`
$DIR/core/services/relay/evm/mercury/queue_test.go: `.Run("transmit queue is more than 50% full", func(t *testing.T) {
transmitQueue.Push(testTransmissions[2].tr, testTransmissions[2].ctx)
report := transmitQueue.HealthReport()
assert.Equal(t, report[transmitQueue.Name()].Error(), "transmit priority queue is greater than 50% full (4/7)")
})`
$DIR/core/services/relay/evm/mercury/queue_test.go: `.Push(testTransmissions[2].tr, testTransmissions[2].ctx)`
$DIR/core/services/relay/evm/mercury/queue_test.go: `.HealthReport()`
$DIR/core/services/relay/evm/mercury/queue_test.go: `.Run("transmit queue pops the highest priority transmission", func(t *testing.T) {
tr := transmitQueue.BlockingPop()
assert.Equal(t, testTransmissions[2].tr, tr.Req)
})`
$DIR/core/services/relay/evm/mercury/queue_test.go: `.BlockingPop()`
$DIR/core/services/relay/evm/mercury/queue_test.go: `.Run("transmit queue is full and evicts the oldest transmission", func(t *testing.T) {
deleter.On("AsyncDelete", testTransmissions[0].tr).Once()
// add 5 more transmissions to overflow the queue by 1
for i := 0; i < 5; i++ {
transmitQueue.Push(testTransmissions[1].tr, testTransmissions[1].ctx)
}
// expecting testTransmissions[0] to get evicted and not present in the queue anymore
testutils.WaitForLogMessage(t, observedLogs, "Transmit queue is full; dropping oldest transmission (reached max length of 7)")
for i := 0; i < 7; i++ {
tr := transmitQueue.BlockingPop()
assert.NotEqual(t, tr.Req, testTransmissions[0].tr)
}
})`
$DIR/core/services/relay/evm/mercury/queue_test.go: `.On("AsyncDelete", testTransmissions[0].tr)`
$DIR/core/services/relay/evm/mercury/queue_test.go: `.Once()`
$DIR/core/services/relay/evm/mercury/queue_test.go: `.Push(testTransmissions[1].tr, testTransmissions[1].ctx)`
$DIR/core/services/relay/evm/mercury/queue_test.go: `.WaitForLogMessage(t, observedLogs, "Transmit queue is full; dropping oldest transmission (reached max length of 7)")`
$DIR/core/services/relay/evm/mercury/queue_test.go: `.BlockingPop()`
$DIR/core/services/relay/evm/mercury/queue_test.go: `.Run("transmit queue blocks when empty and resumes when tranmission available", func(t *testing.T) {
assert.True(t, transmitQueue.IsEmpty())
var wg sync.WaitGroup
wg.Add(2)
go func() {
defer wg.Done()
tr := transmitQueue.BlockingPop()
assert.Equal(t, tr.Req, testTransmissions[0].tr)
}()
go func() {
defer wg.Done()
transmitQueue.Push(testTransmissions[0].tr, testTransmissions[0].ctx)
}()
wg.Wait()
})`
$DIR/core/services/relay/evm/mercury/queue_test.go: `.Add(2)`
$DIR/core/services/relay/evm/mercury/queue_test.go: `.Done()`
$DIR/core/services/relay/evm/mercury/queue_test.go: `.BlockingPop()`
$DIR/core/services/relay/evm/mercury/queue_test.go: `.Done()`
$DIR/core/services/relay/evm/mercury/queue_test.go: `.Push(testTransmissions[0].tr, testTransmissions[0].ctx)`
$DIR/core/services/relay/evm/mercury/queue_test.go: `.Wait()`
$DIR/core/services/relay/evm/mercury/queue_test.go: `.Init(transmissions)`
$DIR/core/services/relay/evm/mercury/queue_test.go: `.BlockingPop()`
$DIR/core/services/relay/evm/mercury/transmitter_test.go: `pgtest.MustExec(t, db, `SET CONSTRAINTS mercury_transmit_requests_job_id_fkey DEFERRED`)`
$DIR/core/services/relay/evm/mercury/transmitter_test.go: `pgtest.MustExec(t, db, `SET CONSTRAINTS feed_latest_reports_job_id_fkey DEFERRED`)`
$DIR/core/services/relay/evm/mercury/transmitter_test.go: `t.Run("with one mercury server", func(t *testing.T) {
t.Run("v1 report transmission successfully enqueued", func(t *testing.T) {
report := sampleV1Report
c := &mocks.MockWSRPCClient{}
clients[sURL] = c
mt := NewTransmitter(lggr, mockCfg{}, clients, sampleClientPubKey, jobID, sampleFeedID, orm, codec, nil)
// init the queue since we skipped starting transmitter
mt.servers[sURL].q.Init([]*Transmission{})
err := mt.Transmit(testutils.Context(t), sampleReportContext, report, sampleSigs)
require.NoError(t, err)
// ensure it was added to the queue
require.Equal(t, mt.servers[sURL].q.(*transmitQueue).pq.Len(), 1)
assert.Subset(t, mt.servers[sURL].q.(*transmitQueue).pq.Pop().(*Transmission).Req.Payload, report)
})
t.Run("v2 report transmission successfully enqueued", func(t *testing.T) {
report := sampleV2Report
c := &mocks.MockWSRPCClient{}
clients[sURL] = c
mt := NewTransmitter(lggr, mockCfg{}, clients, sampleClientPubKey, jobID, sampleFeedID, orm, codec, nil)
// init the queue since we skipped starting transmitter
mt.servers[sURL].q.Init([]*Transmission{})
err := mt.Transmit(testutils.Context(t), sampleReportContext, report, sampleSigs)
require.NoError(t, err)
// ensure it was added to the queue
require.Equal(t, mt.servers[sURL].q.(*transmitQueue).pq.Len(), 1)
assert.Subset(t, mt.servers[sURL].q.(*transmitQueue).pq.Pop().(*Transmission).Req.Payload, report)
})
t.Run("v3 report transmission successfully enqueued", func(t *testing.T) {
report := sampleV3Report
c := &mocks.MockWSRPCClient{}
clients[sURL] = c
mt := NewTransmitter(lggr, mockCfg{}, clients, sampleClientPubKey, jobID, sampleFeedID, orm, codec, nil)
// init the queue since we skipped starting transmitter
mt.servers[sURL].q.Init([]*Transmission{})
err := mt.Transmit(testutils.Context(t), sampleReportContext, report, sampleSigs)
require.NoError(t, err)
// ensure it was added to the queue
require.Equal(t, mt.servers[sURL].q.(*transmitQueue).pq.Len(), 1)
assert.Subset(t, mt.servers[sURL].q.(*transmitQueue).pq.Pop().(*Transmission).Req.Payload, report)
})
t.Run("v3 report transmission sent only to trigger service", func(t *testing.T) {
report := sampleV3Report
c := &mocks.MockWSRPCClient{}
clients[sURL] = c
triggerService := triggers.NewMercuryTriggerService(0, lggr)
mt := NewTransmitter(lggr, mockCfg{}, clients, sampleClientPubKey, jobID, sampleFeedID, orm, codec, triggerService)
// init the queue since we skipped starting transmitter
mt.servers[sURL].q.Init([]*Transmission{})
err := mt.Transmit(testutils.Context(t), sampleReportContext, report, sampleSigs)
require.NoError(t, err)
// queue is empty
require.Equal(t, mt.servers[sURL].q.(*transmitQueue).pq.Len(), 0)
})
})`
$DIR/core/services/relay/evm/mercury/transmitter_test.go: `t.Run("v1 report transmission successfully enqueued", func(t *testing.T) {
report := sampleV1Report
c := &mocks.MockWSRPCClient{}
clients[sURL] = c
mt := NewTransmitter(lggr, mockCfg{}, clients, sampleClientPubKey, jobID, sampleFeedID, orm, codec, nil)
// init the queue since we skipped starting transmitter
mt.servers[sURL].q.Init([]*Transmission{})
err := mt.Transmit(testutils.Context(t), sampleReportContext, report, sampleSigs)
require.NoError(t, err)
// ensure it was added to the queue
require.Equal(t, mt.servers[sURL].q.(*transmitQueue).pq.Len(), 1)
assert.Subset(t, mt.servers[sURL].q.(*transmitQueue).pq.Pop().(*Transmission).Req.Payload, report)
})`
$DIR/core/services/relay/evm/mercury/transmitter_test.go: `clients[sURL] = c`
$DIR/core/services/relay/evm/mercury/transmitter_test.go: `mt.servers[sURL].q.Init([]*Transmission{})`
$DIR/core/services/relay/evm/mercury/transmitter_test.go: `t.Run("v2 report transmission successfully enqueued", func(t *testing.T) {
report := sampleV2Report
c := &mocks.MockWSRPCClient{}
clients[sURL] = c
mt := NewTransmitter(lggr, mockCfg{}, clients, sampleClientPubKey, jobID, sampleFeedID, orm, codec, nil)
// init the queue since we skipped starting transmitter
mt.servers[sURL].q.Init([]*Transmission{})
err := mt.Transmit(testutils.Context(t), sampleReportContext, report, sampleSigs)
require.NoError(t, err)
// ensure it was added to the queue
require.Equal(t, mt.servers[sURL].q.(*transmitQueue).pq.Len(), 1)
assert.Subset(t, mt.servers[sURL].q.(*transmitQueue).pq.Pop().(*Transmission).Req.Payload, report)
})`
$DIR/core/services/relay/evm/mercury/transmitter_test.go: `clients[sURL] = c`
$DIR/core/services/relay/evm/mercury/transmitter_test.go: `mt.servers[sURL].q.Init([]*Transmission{})`
$DIR/core/services/relay/evm/mercury/transmitter_test.go: `t.Run("v3 report transmission successfully enqueued", func(t *testing.T) {
report := sampleV3Report
c := &mocks.MockWSRPCClient{}
clients[sURL] = c
mt := NewTransmitter(lggr, mockCfg{}, clients, sampleClientPubKey, jobID, sampleFeedID, orm, codec, nil)
// init the queue since we skipped starting transmitter
mt.servers[sURL].q.Init([]*Transmission{})
err := mt.Transmit(testutils.Context(t), sampleReportContext, report, sampleSigs)
require.NoError(t, err)
// ensure it was added to the queue
require.Equal(t, mt.servers[sURL].q.(*transmitQueue).pq.Len(), 1)
assert.Subset(t, mt.servers[sURL].q.(*transmitQueue).pq.Pop().(*Transmission).Req.Payload, report)
})`
$DIR/core/services/relay/evm/mercury/transmitter_test.go: `clients[sURL] = c`
$DIR/core/services/relay/evm/mercury/transmitter_test.go: `mt.servers[sURL].q.Init([]*Transmission{})`
$DIR/core/services/relay/evm/mercury/transmitter_test.go: `t.Run("v3 report transmission sent only to trigger service", func(t *testing.T) {
report := sampleV3Report
c := &mocks.MockWSRPCClient{}
clients[sURL] = c
triggerService := triggers.NewMercuryTriggerService(0, lggr)
mt := NewTransmitter(lggr, mockCfg{}, clients, sampleClientPubKey, jobID, sampleFeedID, orm, codec, triggerService)
// init the queue since we skipped starting transmitter
mt.servers[sURL].q.Init([]*Transmission{})
err := mt.Transmit(testutils.Context(t), sampleReportContext, report, sampleSigs)
require.NoError(t, err)
// queue is empty
require.Equal(t, mt.servers[sURL].q.(*transmitQueue).pq.Len(), 0)
})`
$DIR/core/services/relay/evm/mercury/transmitter_test.go: `clients[sURL] = c`
$DIR/core/services/relay/evm/mercury/transmitter_test.go: `mt.servers[sURL].q.Init([]*Transmission{})`
$DIR/core/services/relay/evm/mercury/transmitter_test.go: `clients[sURL] = c`
$DIR/core/services/relay/evm/mercury/transmitter_test.go: `clients[sURL2] = c`
$DIR/core/services/relay/evm/mercury/transmitter_test.go: `clients[sURL3] = c`
$DIR/core/services/relay/evm/mercury/transmitter_test.go: `mt.servers[sURL].q.Init([]*Transmission{})`
$DIR/core/services/relay/evm/mercury/transmitter_test.go: `mt.servers[sURL2].q.Init([]*Transmission{})`
$DIR/core/services/relay/evm/mercury/transmitter_test.go: `mt.servers[sURL3].q.Init([]*Transmission{})`
$DIR/core/services/relay/evm/mercury/transmitter_test.go: `t.Run("successful query", func(t *testing.T) {
c := &mocks.MockWSRPCClient{
LatestReportF: func(ctx context.Context, in *pb.LatestReportRequest) (out *pb.LatestReportResponse, err error) {
require.NotNil(t, in)
assert.Equal(t, hexutil.Encode(sampleFeedID[:]), hexutil.Encode(in.FeedId))
out = new(pb.LatestReportResponse)
out.Report = new(pb.Report)
out.Report.FeedId = sampleFeedID[:]
out.Report.ObservationsTimestamp = 42
return out, nil
},
}
clients[sURL] = c
mt := NewTransmitter(lggr, mockCfg{}, clients, sampleClientPubKey, jobID, sampleFeedID, orm, codec, nil)
ts, err := mt.LatestTimestamp(testutils.Context(t))
require.NoError(t, err)
assert.Equal(t, int64(42), ts)
})`
$DIR/core/services/relay/evm/mercury/transmitter_test.go: `out = new(pb.LatestReportResponse)`
$DIR/core/services/relay/evm/mercury/transmitter_test.go: `out.Report = new(pb.Report)`
$DIR/core/services/relay/evm/mercury/transmitter_test.go: `out.Report.FeedId = sampleFeedID[:]`
$DIR/core/services/relay/evm/mercury/transmitter_test.go: `out.Report.ObservationsTimestamp = 42`
$DIR/core/services/relay/evm/mercury/transmitter_test.go: `clients[sURL] = c`
$DIR/core/services/relay/evm/mercury/transmitter_test.go: `t.Run("successful query returning nil report (new feed) gives latest timestamp = -1", func(t *testing.T) {
c := &mocks.MockWSRPCClient{
LatestReportF: func(ctx context.Context, in *pb.LatestReportRequest) (out *pb.LatestReportResponse, err error) {
out = new(pb.LatestReportResponse)
out.Report = nil
return out, nil
},
}
clients[sURL] = c
mt := NewTransmitter(lggr, mockCfg{}, clients, sampleClientPubKey, jobID, sampleFeedID, orm, codec, nil)
ts, err := mt.LatestTimestamp(testutils.Context(t))
require.NoError(t, err)
assert.Equal(t, int64(-1), ts)
})`
$DIR/core/services/relay/evm/mercury/transmitter_test.go: `out = new(pb.LatestReportResponse)`
$DIR/core/services/relay/evm/mercury/transmitter_test.go: `out.Report = nil`
$DIR/core/services/relay/evm/mercury/transmitter_test.go: `clients[sURL] = c`
$DIR/core/services/relay/evm/mercury/transmitter_test.go: `t.Run("failing query", func(t *testing.T) {
c := &mocks.MockWSRPCClient{
LatestReportF: func(ctx context.Context, in *pb.LatestReportRequest) (out *pb.LatestReportResponse, err error) {
return nil, errors.New("something exploded")
},
}
clients[sURL] = c
mt := NewTransmitter(lggr, mockCfg{}, clients, sampleClientPubKey, jobID, sampleFeedID, orm, codec, nil)
_, err := mt.LatestTimestamp(testutils.Context(t))
require.Error(t, err)
assert.Contains(t, err.Error(), "something exploded")
})`
$DIR/core/services/relay/evm/mercury/transmitter_test.go: `clients[sURL] = c`
$DIR/core/services/relay/evm/mercury/transmitter_test.go: `out = new(pb.LatestReportResponse)`
$DIR/core/services/relay/evm/mercury/transmitter_test.go: `out.Report = new(pb.Report)`
$DIR/core/services/relay/evm/mercury/transmitter_test.go: `out.Report.FeedId = sampleFeedID[:]`
$DIR/core/services/relay/evm/mercury/transmitter_test.go: `out.Report.ObservationsTimestamp = 42`
$DIR/core/services/relay/evm/mercury/transmitter_test.go: `out = new(pb.LatestReportResponse)`
$DIR/core/services/relay/evm/mercury/transmitter_test.go: `out.Report = new(pb.Report)`
$DIR/core/services/relay/evm/mercury/transmitter_test.go: `out.Report.FeedId = sampleFeedID[:]`
$DIR/core/services/relay/evm/mercury/transmitter_test.go: `out.Report.ObservationsTimestamp = 41`
$DIR/core/services/relay/evm/mercury/transmitter_test.go: `t.Run("successful query", func(t *testing.T) {
originalPrice := big.NewInt(123456789)
c := &mocks.MockWSRPCClient{
LatestReportF: func(ctx context.Context, in *pb.LatestReportRequest) (out *pb.LatestReportResponse, err error) {
require.NotNil(t, in)
assert.Equal(t, hexutil.Encode(sampleFeedID[:]), hexutil.Encode(in.FeedId))
out = new(pb.LatestReportResponse)
out.Report = new(pb.Report)
out.Report.FeedId = sampleFeedID[:]
out.Report.Payload = buildSamplePayload([]byte("doesn't matter"))
return out, nil
},
}
clients[sURL] = c
mt := NewTransmitter(lggr, mockCfg{}, clients, sampleClientPubKey, jobID, sampleFeedID, orm, codec, nil)
t.Run("BenchmarkPriceFromReport succeeds", func(t *testing.T) {
codec.val = originalPrice
codec.err = nil
price, err := mt.LatestPrice(testutils.Context(t), sampleFeedID)
require.NoError(t, err)
assert.Equal(t, originalPrice, price)
})
t.Run("BenchmarkPriceFromReport fails", func(t *testing.T) {
codec.val = nil
codec.err = errors.New("something exploded")
_, err := mt.LatestPrice(testutils.Context(t), sampleFeedID)
require.Error(t, err)
assert.EqualError(t, err, "something exploded")
})
})`
$DIR/core/services/relay/evm/mercury/transmitter_test.go: `out = new(pb.LatestReportResponse)`
$DIR/core/services/relay/evm/mercury/transmitter_test.go: `out.Report = new(pb.Report)`
$DIR/core/services/relay/evm/mercury/transmitter_test.go: `out.Report.FeedId = sampleFeedID[:]`
$DIR/core/services/relay/evm/mercury/transmitter_test.go: `out.Report.Payload = buildSamplePayload([]byte("doesn't matter"))`
$DIR/core/services/relay/evm/mercury/transmitter_test.go: `clients[sURL] = c`
$DIR/core/services/relay/evm/mercury/transmitter_test.go: `t.Run("BenchmarkPriceFromReport succeeds", func(t *testing.T) {
codec.val = originalPrice
codec.err = nil
price, err := mt.LatestPrice(testutils.Context(t), sampleFeedID)
require.NoError(t, err)
assert.Equal(t, originalPrice, price)
})`
$DIR/core/services/relay/evm/mercury/transmitter_test.go: `codec.val = originalPrice`
$DIR/core/services/relay/evm/mercury/transmitter_test.go: `codec.err = nil`
$DIR/core/services/relay/evm/mercury/transmitter_test.go: `t.Run("BenchmarkPriceFromReport fails", func(t *testing.T) {
codec.val = nil
codec.err = errors.New("something exploded")
_, err := mt.LatestPrice(testutils.Context(t), sampleFeedID)
require.Error(t, err)
assert.EqualError(t, err, "something exploded")
})`
$DIR/core/services/relay/evm/mercury/transmitter_test.go: `codec.val = nil`
$DIR/core/services/relay/evm/mercury/transmitter_test.go: `codec.err = errors.New("something exploded")`
$DIR/core/services/relay/evm/mercury/transmitter_test.go: `t.Run("successful query returning nil report (new feed)", func(t *testing.T) {
c := &mocks.MockWSRPCClient{
LatestReportF: func(ctx context.Context, in *pb.LatestReportRequest) (out *pb.LatestReportResponse, err error) {
out = new(pb.LatestReportResponse)
out.Report = nil
return out, nil
},
}
clients[sURL] = c
mt := NewTransmitter(lggr, mockCfg{}, clients, sampleClientPubKey, jobID, sampleFeedID, orm, codec, nil)
price, err := mt.LatestPrice(testutils.Context(t), sampleFeedID)
require.NoError(t, err)
assert.Nil(t, price)
})`
$DIR/core/services/relay/evm/mercury/transmitter_test.go: `out = new(pb.LatestReportResponse)`
$DIR/core/services/relay/evm/mercury/transmitter_test.go: `out.Report = nil`
$DIR/core/services/relay/evm/mercury/transmitter_test.go: `clients[sURL] = c`
$DIR/core/services/relay/evm/mercury/transmitter_test.go: `clients[sURL] = c`
$DIR/core/services/relay/evm/mercury/transmitter_test.go: `t.Run("successful query", func(t *testing.T) {
c := &mocks.MockWSRPCClient{
LatestReportF: func(ctx context.Context, in *pb.LatestReportRequest) (out *pb.LatestReportResponse, err error) {
require.NotNil(t, in)
assert.Equal(t, hexutil.Encode(sampleFeedID[:]), hexutil.Encode(in.FeedId))
out = new(pb.LatestReportResponse)
out.Report = new(pb.Report)
out.Report.FeedId = sampleFeedID[:]
out.Report.CurrentBlockNumber = 42
return out, nil
},
}
clients[sURL] = c
mt := NewTransmitter(lggr, mockCfg{}, clients, sampleClientPubKey, jobID, sampleFeedID, orm, codec, nil)
bn, err := mt.FetchInitialMaxFinalizedBlockNumber(testutils.Context(t))
require.NoError(t, err)
require.NotNil(t, bn)
assert.Equal(t, 42, int(*bn))
})`
$DIR/core/services/relay/evm/mercury/transmitter_test.go: `out = new(pb.LatestReportResponse)`
$DIR/core/services/relay/evm/mercury/transmitter_test.go: `out.Report = new(pb.Report)`
$DIR/core/services/relay/evm/mercury/transmitter_test.go: `out.Report.FeedId = sampleFeedID[:]`
$DIR/core/services/relay/evm/mercury/transmitter_test.go: `out.Report.CurrentBlockNumber = 42`
$DIR/core/services/relay/evm/mercury/transmitter_test.go: `clients[sURL] = c`
$DIR/core/services/relay/evm/mercury/transmitter_test.go: `t.Run("successful query returning nil report (new feed)", func(t *testing.T) {
c := &mocks.MockWSRPCClient{
LatestReportF: func(ctx context.Context, in *pb.LatestReportRequest) (out *pb.LatestReportResponse, err error) {
out = new(pb.LatestReportResponse)
out.Report = nil
return out, nil
},
}
clients[sURL] = c
mt := NewTransmitter(lggr, mockCfg{}, clients, sampleClientPubKey, jobID, sampleFeedID, orm, codec, nil)
bn, err := mt.FetchInitialMaxFinalizedBlockNumber(testutils.Context(t))
require.NoError(t, err)
assert.Nil(t, bn)
})`
$DIR/core/services/relay/evm/mercury/transmitter_test.go: `out = new(pb.LatestReportResponse)`
$DIR/core/services/relay/evm/mercury/transmitter_test.go: `out.Report = nil`
$DIR/core/services/relay/evm/mercury/transmitter_test.go: `clients[sURL] = c`
$DIR/core/services/relay/evm/mercury/transmitter_test.go: `t.Run("failing query", func(t *testing.T) {
c := &mocks.MockWSRPCClient{
LatestReportF: func(ctx context.Context, in *pb.LatestReportRequest) (out *pb.LatestReportResponse, err error) {
return nil, errors.New("something exploded")
},
}
clients[sURL] = c
mt := NewTransmitter(lggr, mockCfg{}, clients, sampleClientPubKey, jobID, sampleFeedID, orm, codec, nil)
_, err := mt.FetchInitialMaxFinalizedBlockNumber(testutils.Context(t))
require.Error(t, err)
assert.Contains(t, err.Error(), "something exploded")
})`
$DIR/core/services/relay/evm/mercury/transmitter_test.go: `clients[sURL] = c`
$DIR/core/services/relay/evm/mercury/transmitter_test.go: `out = new(pb.LatestReportResponse)`
$DIR/core/services/relay/evm/mercury/transmitter_test.go: `out.Report = new(pb.Report)`
$DIR/core/services/relay/evm/mercury/transmitter_test.go: `out.Report.CurrentBlockNumber = 42`
$DIR/core/services/relay/evm/mercury/transmitter_test.go: `out.Report.FeedId = []byte{1, 2}`
$DIR/core/services/relay/evm/mercury/transmitter_test.go: `clients[sURL] = c`
$DIR/core/services/relay/evm/mercury/transmitter_test.go: `sortReportsLatestFirst(reports)`
$DIR/core/services/relay/evm/mercury/transmitter_test.go: `t.Run("pulls from queue and transmits successfully", func(t *testing.T) {
transmit := make(chan *pb.TransmitRequest, 1)
c.TransmitF = func(ctx context.Context, in *pb.TransmitRequest) (*pb.TransmitResponse, error) {
transmit <- in
return &pb.TransmitResponse{Code: 0, Error: ""}, nil
}
q := newMockQ()
s.q = q
wg := &sync.WaitGroup{}
wg.Add(1)
go s.runQueueLoop(nil, wg, feedIDHex)
q.Push(req, sampleReportContext)
select {
case tr := <-transmit:
assert.Equal(t, []byte{1, 2, 3}, tr.Payload)
assert.Equal(t, 32, int(tr.ReportFormat))
// case <-time.After(testutils.WaitTimeout(t)):
case <-time.After(1 * time.Second):
t.Fatal("expected a transmit request to be sent")
}
q.Close()
wg.Wait()
})`
$DIR/core/services/relay/evm/mercury/transmitter_test.go: `transmit <- in`
$DIR/core/services/relay/evm/mercury/transmitter_test.go: `s.q = q`
$DIR/core/services/relay/evm/mercury/transmitter_test.go: `wg.Add(1)`
$DIR/core/services/relay/evm/mercury/transmitter_test.go: `go s.runQueueLoop(nil, wg, feedIDHex)`
$DIR/core/services/relay/evm/mercury/transmitter_test.go: `q.Push(req, sampleReportContext)`
$DIR/core/services/relay/evm/mercury/transmitter_test.go: `wg.Wait()`
$DIR/core/services/relay/evm/mercury/transmitter_test.go: `t.Run("on duplicate, success", func(t *testing.T) {
transmit := make(chan *pb.TransmitRequest, 1)
c.TransmitF = func(ctx context.Context, in *pb.TransmitRequest) (*pb.TransmitResponse, error) {
transmit <- in
return &pb.TransmitResponse{Code: DuplicateReport, Error: ""}, nil
}
q := newMockQ()
s.q = q
wg := &sync.WaitGroup{}
wg.Add(1)
go s.runQueueLoop(nil, wg, feedIDHex)
q.Push(req, sampleReportContext)
select {
case tr := <-transmit:
assert.Equal(t, []byte{1, 2, 3}, tr.Payload)
assert.Equal(t, 32, int(tr.ReportFormat))
// case <-time.After(testutils.WaitTimeout(t)):
case <-time.After(1 * time.Second):
t.Fatal("expected a transmit request to be sent")
}
q.Close()
wg.Wait()
})`
$DIR/core/services/relay/evm/mercury/transmitter_test.go: `transmit <- in`
$DIR/core/services/relay/evm/mercury/transmitter_test.go: `s.q = q`
$DIR/core/services/relay/evm/mercury/transmitter_test.go: `wg.Add(1)`
$DIR/core/services/relay/evm/mercury/transmitter_test.go: `go s.runQueueLoop(nil, wg, feedIDHex)`
$DIR/core/services/relay/evm/mercury/transmitter_test.go: `q.Push(req, sampleReportContext)`
$DIR/core/services/relay/evm/mercury/transmitter_test.go: `wg.Wait()`
$DIR/core/services/relay/evm/mercury/transmitter_test.go: `t.Run("on server-side error, does not retry", func(t *testing.T) {
transmit := make(chan *pb.TransmitRequest, 1)
c.TransmitF = func(ctx context.Context, in *pb.TransmitRequest) (*pb.TransmitResponse, error) {
transmit <- in
return &pb.TransmitResponse{Code: DuplicateReport, Error: ""}, nil
}
q := newMockQ()
s.q = q
wg := &sync.WaitGroup{}
wg.Add(1)
go s.runQueueLoop(nil, wg, feedIDHex)
q.Push(req, sampleReportContext)
select {
case tr := <-transmit:
assert.Equal(t, []byte{1, 2, 3}, tr.Payload)
assert.Equal(t, 32, int(tr.ReportFormat))
// case <-time.After(testutils.WaitTimeout(t)):
case <-time.After(1 * time.Second):
t.Fatal("expected a transmit request to be sent")
}
q.Close()
wg.Wait()
})`
$DIR/core/services/relay/evm/mercury/transmitter_test.go: `transmit <- in`
$DIR/core/services/relay/evm/mercury/transmitter_test.go: `s.q = q`
$DIR/core/services/relay/evm/mercury/transmitter_test.go: `wg.Add(1)`
$DIR/core/services/relay/evm/mercury/transmitter_test.go: `go s.runQueueLoop(nil, wg, feedIDHex)`
$DIR/core/services/relay/evm/mercury/transmitter_test.go: `q.Push(req, sampleReportContext)`
$DIR/core/services/relay/evm/mercury/transmitter_test.go: `wg.Wait()`
$DIR/core/services/relay/evm/mercury/transmitter_test.go: `transmit <- in`
$DIR/core/services/relay/evm/mercury/transmitter_test.go: `s.q = q`
$DIR/core/services/relay/evm/mercury/transmitter_test.go: `wg.Add(1)`
$DIR/core/services/relay/evm/mercury/transmitter_test.go: `go s.runQueueLoop(stopCh, wg, feedIDHex)`
$DIR/core/services/relay/evm/mercury/transmitter_test.go: `q.Push(req, sampleReportContext)`
$DIR/core/services/relay/evm/mercury/transmitter_test.go: `cnt++`
$DIR/core/services/relay/evm/mercury/transmitter_test.go: `close(stopCh)`
$DIR/core/services/relay/evm/mercury/transmitter_test.go: `wg.Wait()`
$DIR/core/services/relay/evm/mercury/transmitter_test.go: `.TestLogger(t)`
$DIR/core/services/relay/evm/mercury/transmitter_test.go: `.NewSqlxDB(t)`
$DIR/core/services/relay/evm/mercury/transmitter_test.go: `.MustExec(t, db, `SET CONSTRAINTS mercury_transmit_requests_job_id_fkey DEFERRED`)`
$DIR/core/services/relay/evm/mercury/transmitter_test.go: `.MustExec(t, db, `SET CONSTRAINTS feed_latest_reports_job_id_fkey DEFERRED`)`
$DIR/core/services/relay/evm/mercury/transmitter_test.go: `.Run("with one mercury server", func(t *testing.T) {
t.Run("v1 report transmission successfully enqueued", func(t *testing.T) {
report := sampleV1Report
c := &mocks.MockWSRPCClient{}
clients[sURL] = c
mt := NewTransmitter(lggr, mockCfg{}, clients, sampleClientPubKey, jobID, sampleFeedID, orm, codec, nil)
// init the queue since we skipped starting transmitter
mt.servers[sURL].q.Init([]*Transmission{})
err := mt.Transmit(testutils.Context(t), sampleReportContext, report, sampleSigs)
require.NoError(t, err)
// ensure it was added to the queue
require.Equal(t, mt.servers[sURL].q.(*transmitQueue).pq.Len(), 1)
assert.Subset(t, mt.servers[sURL].q.(*transmitQueue).pq.Pop().(*Transmission).Req.Payload, report)
})
t.Run("v2 report transmission successfully enqueued", func(t *testing.T) {
report := sampleV2Report
c := &mocks.MockWSRPCClient{}
clients[sURL] = c
mt := NewTransmitter(lggr, mockCfg{}, clients, sampleClientPubKey, jobID, sampleFeedID, orm, codec, nil)
// init the queue since we skipped starting transmitter
mt.servers[sURL].q.Init([]*Transmission{})
err := mt.Transmit(testutils.Context(t), sampleReportContext, report, sampleSigs)
require.NoError(t, err)
// ensure it was added to the queue
require.Equal(t, mt.servers[sURL].q.(*transmitQueue).pq.Len(), 1)
assert.Subset(t, mt.servers[sURL].q.(*transmitQueue).pq.Pop().(*Transmission).Req.Payload, report)
})
t.Run("v3 report transmission successfully enqueued", func(t *testing.T) {
report := sampleV3Report
c := &mocks.MockWSRPCClient{}
clients[sURL] = c
mt := NewTransmitter(lggr, mockCfg{}, clients, sampleClientPubKey, jobID, sampleFeedID, orm, codec, nil)
// init the queue since we skipped starting transmitter
mt.servers[sURL].q.Init([]*Transmission{})
err := mt.Transmit(testutils.Context(t), sampleReportContext, report, sampleSigs)
require.NoError(t, err)
// ensure it was added to the queue
require.Equal(t, mt.servers[sURL].q.(*transmitQueue).pq.Len(), 1)
assert.Subset(t, mt.servers[sURL].q.(*transmitQueue).pq.Pop().(*Transmission).Req.Payload, report)
})
t.Run("v3 report transmission sent only to trigger service", func(t *testing.T) {
report := sampleV3Report
c := &mocks.MockWSRPCClient{}
clients[sURL] = c
triggerService := triggers.NewMercuryTriggerService(0, lggr)
mt := NewTransmitter(lggr, mockCfg{}, clients, sampleClientPubKey, jobID, sampleFeedID, orm, codec, triggerService)
// init the queue since we skipped starting transmitter
mt.servers[sURL].q.Init([]*Transmission{})
err := mt.Transmit(testutils.Context(t), sampleReportContext, report, sampleSigs)
require.NoError(t, err)
// queue is empty
require.Equal(t, mt.servers[sURL].q.(*transmitQueue).pq.Len(), 0)
})
})`
$DIR/core/services/relay/evm/mercury/transmitter_test.go: `.Run("v1 report transmission successfully enqueued", func(t *testing.T) {
report := sampleV1Report
c := &mocks.MockWSRPCClient{}
clients[sURL] = c
mt := NewTransmitter(lggr, mockCfg{}, clients, sampleClientPubKey, jobID, sampleFeedID, orm, codec, nil)
// init the queue since we skipped starting transmitter
mt.servers[sURL].q.Init([]*Transmission{})
err := mt.Transmit(testutils.Context(t), sampleReportContext, report, sampleSigs)
require.NoError(t, err)
// ensure it was added to the queue
require.Equal(t, mt.servers[sURL].q.(*transmitQueue).pq.Len(), 1)
assert.Subset(t, mt.servers[sURL].q.(*transmitQueue).pq.Pop().(*Transmission).Req.Payload, report)
})`
$DIR/core/services/relay/evm/mercury/transmitter_test.go: `.q.Init([]*Transmission{})`
$DIR/core/services/relay/evm/mercury/transmitter_test.go: `.Transmit(testutils.Context(t), sampleReportContext, report, sampleSigs)`
$DIR/core/services/relay/evm/mercury/transmitter_test.go: `.Context(t)`
$DIR/core/services/relay/evm/mercury/transmitter_test.go: `.Run("v2 report transmission successfully enqueued", func(t *testing.T) {
report := sampleV2Report
c := &mocks.MockWSRPCClient{}
clients[sURL] = c
mt := NewTransmitter(lggr, mockCfg{}, clients, sampleClientPubKey, jobID, sampleFeedID, orm, codec, nil)
// init the queue since we skipped starting transmitter
mt.servers[sURL].q.Init([]*Transmission{})
err := mt.Transmit(testutils.Context(t), sampleReportContext, report, sampleSigs)
require.NoError(t, err)
// ensure it was added to the queue
require.Equal(t, mt.servers[sURL].q.(*transmitQueue).pq.Len(), 1)
assert.Subset(t, mt.servers[sURL].q.(*transmitQueue).pq.Pop().(*Transmission).Req.Payload, report)
})`
$DIR/core/services/relay/evm/mercury/transmitter_test.go: `.q.Init([]*Transmission{})`
$DIR/core/services/relay/evm/mercury/transmitter_test.go: `.Transmit(testutils.Context(t), sampleReportContext, report, sampleSigs)`
$DIR/core/services/relay/evm/mercury/transmitter_test.go: `.Context(t)`
$DIR/core/services/relay/evm/mercury/transmitter_test.go: `.Run("v3 report transmission successfully enqueued", func(t *testing.T) {
report := sampleV3Report
c := &mocks.MockWSRPCClient{}
clients[sURL] = c
mt := NewTransmitter(lggr, mockCfg{}, clients, sampleClientPubKey, jobID, sampleFeedID, orm, codec, nil)
// init the queue since we skipped starting transmitter
mt.servers[sURL].q.Init([]*Transmission{})
err := mt.Transmit(testutils.Context(t), sampleReportContext, report, sampleSigs)
require.NoError(t, err)
// ensure it was added to the queue
require.Equal(t, mt.servers[sURL].q.(*transmitQueue).pq.Len(), 1)
assert.Subset(t, mt.servers[sURL].q.(*transmitQueue).pq.Pop().(*Transmission).Req.Payload, report)
})`
$DIR/core/services/relay/evm/mercury/transmitter_test.go: `.q.Init([]*Transmission{})`
$DIR/core/services/relay/evm/mercury/transmitter_test.go: `.Transmit(testutils.Context(t), sampleReportContext, report, sampleSigs)`
$DIR/core/services/relay/evm/mercury/transmitter_test.go: `.Context(t)`
$DIR/core/services/relay/evm/mercury/transmitter_test.go: `.Run("v3 report transmission sent only to trigger service", func(t *testing.T) {
report := sampleV3Report
c := &mocks.MockWSRPCClient{}
clients[sURL] = c
triggerService := triggers.NewMercuryTriggerService(0, lggr)
mt := NewTransmitter(lggr, mockCfg{}, clients, sampleClientPubKey, jobID, sampleFeedID, orm, codec, triggerService)
// init the queue since we skipped starting transmitter
mt.servers[sURL].q.Init([]*Transmission{})
err := mt.Transmit(testutils.Context(t), sampleReportContext, report, sampleSigs)
require.NoError(t, err)
// queue is empty
require.Equal(t, mt.servers[sURL].q.(*transmitQueue).pq.Len(), 0)
})`
$DIR/core/services/relay/evm/mercury/transmitter_test.go: `.NewMercuryTriggerService(0, lggr)`
$DIR/core/services/relay/evm/mercury/transmitter_test.go: `.q.Init([]*Transmission{})`
$DIR/core/services/relay/evm/mercury/transmitter_test.go: `.Transmit(testutils.Context(t), sampleReportContext, report, sampleSigs)`
$DIR/core/services/relay/evm/mercury/transmitter_test.go: `.Context(t)`
$DIR/core/services/relay/evm/mercury/transmitter_test.go: `.q.Init([]*Transmission{})`
$DIR/core/services/relay/evm/mercury/transmitter_test.go: `.q.Init([]*Transmission{})`
$DIR/core/services/relay/evm/mercury/transmitter_test.go: `.q.Init([]*Transmission{})`
$DIR/core/services/relay/evm/mercury/transmitter_test.go: `.Transmit(testutils.Context(t), sampleReportContext, report, sampleSigs)`
$DIR/core/services/relay/evm/mercury/transmitter_test.go: `.Context(t)`
$DIR/core/services/relay/evm/mercury/transmitter_test.go: `.TestLogger(t)`
$DIR/core/services/relay/evm/mercury/transmitter_test.go: `.NewSqlxDB(t)`
$DIR/core/services/relay/evm/mercury/transmitter_test.go: `.Run("successful query", func(t *testing.T) {
c := &mocks.MockWSRPCClient{
LatestReportF: func(ctx context.Context, in *pb.LatestReportRequest) (out *pb.LatestReportResponse, err error) {
require.NotNil(t, in)
assert.Equal(t, hexutil.Encode(sampleFeedID[:]), hexutil.Encode(in.FeedId))
out = new(pb.LatestReportResponse)
out.Report = new(pb.Report)
out.Report.FeedId = sampleFeedID[:]
out.Report.ObservationsTimestamp = 42
return out, nil
},
}
clients[sURL] = c
mt := NewTransmitter(lggr, mockCfg{}, clients, sampleClientPubKey, jobID, sampleFeedID, orm, codec, nil)
ts, err := mt.LatestTimestamp(testutils.Context(t))
require.NoError(t, err)
assert.Equal(t, int64(42), ts)
})`
$DIR/core/services/relay/evm/mercury/transmitter_test.go: `.LatestTimestamp(testutils.Context(t))`
$DIR/core/services/relay/evm/mercury/transmitter_test.go: `.Context(t)`
$DIR/core/services/relay/evm/mercury/transmitter_test.go: `.Run("successful query returning nil report (new feed) gives latest timestamp = -1", func(t *testing.T) {
c := &mocks.MockWSRPCClient{
LatestReportF: func(ctx context.Context, in *pb.LatestReportRequest) (out *pb.LatestReportResponse, err error) {
out = new(pb.LatestReportResponse)
out.Report = nil
return out, nil
},
}
clients[sURL] = c
mt := NewTransmitter(lggr, mockCfg{}, clients, sampleClientPubKey, jobID, sampleFeedID, orm, codec, nil)
ts, err := mt.LatestTimestamp(testutils.Context(t))
require.NoError(t, err)
assert.Equal(t, int64(-1), ts)
})`
$DIR/core/services/relay/evm/mercury/transmitter_test.go: `.LatestTimestamp(testutils.Context(t))`
$DIR/core/services/relay/evm/mercury/transmitter_test.go: `.Context(t)`
$DIR/core/services/relay/evm/mercury/transmitter_test.go: `.Run("failing query", func(t *testing.T) {
c := &mocks.MockWSRPCClient{
LatestReportF: func(ctx context.Context, in *pb.LatestReportRequest) (out *pb.LatestReportResponse, err error) {
return nil, errors.New("something exploded")
},
}
clients[sURL] = c
mt := NewTransmitter(lggr, mockCfg{}, clients, sampleClientPubKey, jobID, sampleFeedID, orm, codec, nil)
_, err := mt.LatestTimestamp(testutils.Context(t))
require.Error(t, err)
assert.Contains(t, err.Error(), "something exploded")
})`
$DIR/core/services/relay/evm/mercury/transmitter_test.go: `.New("something exploded")`
$DIR/core/services/relay/evm/mercury/transmitter_test.go: `.LatestTimestamp(testutils.Context(t))`
$DIR/core/services/relay/evm/mercury/transmitter_test.go: `.Context(t)`
$DIR/core/services/relay/evm/mercury/transmitter_test.go: `.New("something exploded")`
$DIR/core/services/relay/evm/mercury/transmitter_test.go: `.LatestTimestamp(testutils.Context(t))`
$DIR/core/services/relay/evm/mercury/transmitter_test.go: `.Context(t)`
$DIR/core/services/relay/evm/mercury/transmitter_test.go: `.TestLogger(t)`
$DIR/core/services/relay/evm/mercury/transmitter_test.go: `.NewSqlxDB(t)`
$DIR/core/services/relay/evm/mercury/transmitter_test.go: `.Run("successful query", func(t *testing.T) {
originalPrice := big.NewInt(123456789)
c := &mocks.MockWSRPCClient{
LatestReportF: func(ctx context.Context, in *pb.LatestReportRequest) (out *pb.LatestReportResponse, err error) {
require.NotNil(t, in)
assert.Equal(t, hexutil.Encode(sampleFeedID[:]), hexutil.Encode(in.FeedId))
out = new(pb.LatestReportResponse)
out.Report = new(pb.Report)
out.Report.FeedId = sampleFeedID[:]
out.Report.Payload = buildSamplePayload([]byte("doesn't matter"))
return out, nil
},
}
clients[sURL] = c
mt := NewTransmitter(lggr, mockCfg{}, clients, sampleClientPubKey, jobID, sampleFeedID, orm, codec, nil)
t.Run("BenchmarkPriceFromReport succeeds", func(t *testing.T) {
codec.val = originalPrice
codec.err = nil
price, err := mt.LatestPrice(testutils.Context(t), sampleFeedID)
require.NoError(t, err)
assert.Equal(t, originalPrice, price)
})
t.Run("BenchmarkPriceFromReport fails", func(t *testing.T) {
codec.val = nil
codec.err = errors.New("something exploded")
_, err := mt.LatestPrice(testutils.Context(t), sampleFeedID)
require.Error(t, err)
assert.EqualError(t, err, "something exploded")
})
})`
$DIR/core/services/relay/evm/mercury/transmitter_test.go: `.NewInt(123456789)`
$DIR/core/services/relay/evm/mercury/transmitter_test.go: `.Run("BenchmarkPriceFromReport succeeds", func(t *testing.T) {
codec.val = originalPrice
codec.err = nil
price, err := mt.LatestPrice(testutils.Context(t), sampleFeedID)
require.NoError(t, err)
assert.Equal(t, originalPrice, price)
})`
$DIR/core/services/relay/evm/mercury/transmitter_test.go: `.LatestPrice(testutils.Context(t), sampleFeedID)`
$DIR/core/services/relay/evm/mercury/transmitter_test.go: `.Context(t)`
$DIR/core/services/relay/evm/mercury/transmitter_test.go: `.Run("BenchmarkPriceFromReport fails", func(t *testing.T) {
codec.val = nil
codec.err = errors.New("something exploded")
_, err := mt.LatestPrice(testutils.Context(t), sampleFeedID)
require.Error(t, err)
assert.EqualError(t, err, "something exploded")
})`
$DIR/core/services/relay/evm/mercury/transmitter_test.go: `.New("something exploded")`
$DIR/core/services/relay/evm/mercury/transmitter_test.go: `.LatestPrice(testutils.Context(t), sampleFeedID)`
$DIR/core/services/relay/evm/mercury/transmitter_test.go: `.Context(t)`
$DIR/core/services/relay/evm/mercury/transmitter_test.go: `.Run("successful query returning nil report (new feed)", func(t *testing.T) {
c := &mocks.MockWSRPCClient{
LatestReportF: func(ctx context.Context, in *pb.LatestReportRequest) (out *pb.LatestReportResponse, err error) {
out = new(pb.LatestReportResponse)
out.Report = nil
return out, nil
},
}
clients[sURL] = c
mt := NewTransmitter(lggr, mockCfg{}, clients, sampleClientPubKey, jobID, sampleFeedID, orm, codec, nil)
price, err := mt.LatestPrice(testutils.Context(t), sampleFeedID)
require.NoError(t, err)
assert.Nil(t, price)
})`
$DIR/core/services/relay/evm/mercury/transmitter_test.go: `.LatestPrice(testutils.Context(t), sampleFeedID)`
$DIR/core/services/relay/evm/mercury/transmitter_test.go: `.Context(t)`
$DIR/core/services/relay/evm/mercury/transmitter_test.go: `.New("something exploded")`
$DIR/core/services/relay/evm/mercury/transmitter_test.go: `.LatestPrice(testutils.Context(t), sampleFeedID)`
$DIR/core/services/relay/evm/mercury/transmitter_test.go: `.Context(t)`
$DIR/core/services/relay/evm/mercury/transmitter_test.go: `.TestLogger(t)`
$DIR/core/services/relay/evm/mercury/transmitter_test.go: `.NewSqlxDB(t)`
$DIR/core/services/relay/evm/mercury/transmitter_test.go: `.Run("successful query", func(t *testing.T) {
c := &mocks.MockWSRPCClient{
LatestReportF: func(ctx context.Context, in *pb.LatestReportRequest) (out *pb.LatestReportResponse, err error) {
require.NotNil(t, in)
assert.Equal(t, hexutil.Encode(sampleFeedID[:]), hexutil.Encode(in.FeedId))
out = new(pb.LatestReportResponse)
out.Report = new(pb.Report)
out.Report.FeedId = sampleFeedID[:]
out.Report.CurrentBlockNumber = 42
return out, nil
},
}
clients[sURL] = c
mt := NewTransmitter(lggr, mockCfg{}, clients, sampleClientPubKey, jobID, sampleFeedID, orm, codec, nil)
bn, err := mt.FetchInitialMaxFinalizedBlockNumber(testutils.Context(t))
require.NoError(t, err)
require.NotNil(t, bn)
assert.Equal(t, 42, int(*bn))
})`
$DIR/core/services/relay/evm/mercury/transmitter_test.go: `.FetchInitialMaxFinalizedBlockNumber(testutils.Context(t))`
$DIR/core/services/relay/evm/mercury/transmitter_test.go: `.Context(t)`
$DIR/core/services/relay/evm/mercury/transmitter_test.go: `.Run("successful query returning nil report (new feed)", func(t *testing.T) {
c := &mocks.MockWSRPCClient{
LatestReportF: func(ctx context.Context, in *pb.LatestReportRequest) (out *pb.LatestReportResponse, err error) {
out = new(pb.LatestReportResponse)
out.Report = nil
return out, nil
},
}
clients[sURL] = c
mt := NewTransmitter(lggr, mockCfg{}, clients, sampleClientPubKey, jobID, sampleFeedID, orm, codec, nil)
bn, err := mt.FetchInitialMaxFinalizedBlockNumber(testutils.Context(t))
require.NoError(t, err)
assert.Nil(t, bn)
})`
$DIR/core/services/relay/evm/mercury/transmitter_test.go: `.FetchInitialMaxFinalizedBlockNumber(testutils.Context(t))`
$DIR/core/services/relay/evm/mercury/transmitter_test.go: `.Context(t)`
$DIR/core/services/relay/evm/mercury/transmitter_test.go: `.Run("failing query", func(t *testing.T) {
c := &mocks.MockWSRPCClient{
LatestReportF: func(ctx context.Context, in *pb.LatestReportRequest) (out *pb.LatestReportResponse, err error) {
return nil, errors.New("something exploded")
},
}
clients[sURL] = c
mt := NewTransmitter(lggr, mockCfg{}, clients, sampleClientPubKey, jobID, sampleFeedID, orm, codec, nil)
_, err := mt.FetchInitialMaxFinalizedBlockNumber(testutils.Context(t))
require.Error(t, err)
assert.Contains(t, err.Error(), "something exploded")
})`
$DIR/core/services/relay/evm/mercury/transmitter_test.go: `.New("something exploded")`
$DIR/core/services/relay/evm/mercury/transmitter_test.go: `.FetchInitialMaxFinalizedBlockNumber(testutils.Context(t))`
$DIR/core/services/relay/evm/mercury/transmitter_test.go: `.Context(t)`
$DIR/core/services/relay/evm/mercury/transmitter_test.go: `.FetchInitialMaxFinalizedBlockNumber(testutils.Context(t))`
$DIR/core/services/relay/evm/mercury/transmitter_test.go: `.Context(t)`
$DIR/core/services/relay/evm/mercury/transmitter_test.go: `.NewHash()`
$DIR/core/services/relay/evm/mercury/transmitter_test.go: `.Hex()`
$DIR/core/services/relay/evm/mercury/transmitter_test.go: `.TestLogger(t)`
$DIR/core/services/relay/evm/mercury/transmitter_test.go: `.NewSqlxDB(t)`
$DIR/core/services/relay/evm/mercury/transmitter_test.go: `.Run("pulls from queue and transmits successfully", func(t *testing.T) {
transmit := make(chan *pb.TransmitRequest, 1)
c.TransmitF = func(ctx context.Context, in *pb.TransmitRequest) (*pb.TransmitResponse, error) {
transmit <- in
return &pb.TransmitResponse{Code: 0, Error: ""}, nil
}
q := newMockQ()
s.q = q
wg := &sync.WaitGroup{}
wg.Add(1)
go s.runQueueLoop(nil, wg, feedIDHex)
q.Push(req, sampleReportContext)
select {
case tr := <-transmit:
assert.Equal(t, []byte{1, 2, 3}, tr.Payload)
assert.Equal(t, 32, int(tr.ReportFormat))
// case <-time.After(testutils.WaitTimeout(t)):
case <-time.After(1 * time.Second):
t.Fatal("expected a transmit request to be sent")
}
q.Close()
wg.Wait()
})`
$DIR/core/services/relay/evm/mercury/transmitter_test.go: `.Add(1)`
$DIR/core/services/relay/evm/mercury/transmitter_test.go: `.runQueueLoop(nil, wg, feedIDHex)`
$DIR/core/services/relay/evm/mercury/transmitter_test.go: `.Push(req, sampleReportContext)`
$DIR/core/services/relay/evm/mercury/transmitter_test.go: `.After(1 * time.Second)`
$DIR/core/services/relay/evm/mercury/transmitter_test.go: `.Wait()`
$DIR/core/services/relay/evm/mercury/transmitter_test.go: `.Run("on duplicate, success", func(t *testing.T) {
transmit := make(chan *pb.TransmitRequest, 1)
c.TransmitF = func(ctx context.Context, in *pb.TransmitRequest) (*pb.TransmitResponse, error) {
transmit <- in
return &pb.TransmitResponse{Code: DuplicateReport, Error: ""}, nil
}
q := newMockQ()
s.q = q
wg := &sync.WaitGroup{}
wg.Add(1)
go s.runQueueLoop(nil, wg, feedIDHex)
q.Push(req, sampleReportContext)
select {
case tr := <-transmit:
assert.Equal(t, []byte{1, 2, 3}, tr.Payload)
assert.Equal(t, 32, int(tr.ReportFormat))
// case <-time.After(testutils.WaitTimeout(t)):
case <-time.After(1 * time.Second):
t.Fatal("expected a transmit request to be sent")
}
q.Close()
wg.Wait()
})`
$DIR/core/services/relay/evm/mercury/transmitter_test.go: `.Add(1)`
$DIR/core/services/relay/evm/mercury/transmitter_test.go: `.runQueueLoop(nil, wg, feedIDHex)`
$DIR/core/services/relay/evm/mercury/transmitter_test.go: `.Push(req, sampleReportContext)`
$DIR/core/services/relay/evm/mercury/transmitter_test.go: `.After(1 * time.Second)`
$DIR/core/services/relay/evm/mercury/transmitter_test.go: `.Wait()`
$DIR/core/services/relay/evm/mercury/transmitter_test.go: `.Run("on server-side error, does not retry", func(t *testing.T) {
transmit := make(chan *pb.TransmitRequest, 1)
c.TransmitF = func(ctx context.Context, in *pb.TransmitRequest) (*pb.TransmitResponse, error) {
transmit <- in
return &pb.TransmitResponse{Code: DuplicateReport, Error: ""}, nil
}
q := newMockQ()
s.q = q
wg := &sync.WaitGroup{}
wg.Add(1)
go s.runQueueLoop(nil, wg, feedIDHex)
q.Push(req, sampleReportContext)
select {
case tr := <-transmit:
assert.Equal(t, []byte{1, 2, 3}, tr.Payload)
assert.Equal(t, 32, int(tr.ReportFormat))
// case <-time.After(testutils.WaitTimeout(t)):
case <-time.After(1 * time.Second):
t.Fatal("expected a transmit request to be sent")
}
q.Close()
wg.Wait()
})`
$DIR/core/services/relay/evm/mercury/transmitter_test.go: `.Add(1)`
$DIR/core/services/relay/evm/mercury/transmitter_test.go: `.runQueueLoop(nil, wg, feedIDHex)`
$DIR/core/services/relay/evm/mercury/transmitter_test.go: `.Push(req, sampleReportContext)`
$DIR/core/services/relay/evm/mercury/transmitter_test.go: `.After(1 * time.Second)`
$DIR/core/services/relay/evm/mercury/transmitter_test.go: `.Wait()`
$DIR/core/services/relay/evm/mercury/transmitter_test.go: `.New("transmission error")`
$DIR/core/services/relay/evm/mercury/transmitter_test.go: `.Add(1)`
$DIR/core/services/relay/evm/mercury/transmitter_test.go: `.runQueueLoop(stopCh, wg, feedIDHex)`
$DIR/core/services/relay/evm/mercury/transmitter_test.go: `.Push(req, sampleReportContext)`
$DIR/core/services/relay/evm/mercury/transmitter_test.go: `.After(1 * time.Second)`
$DIR/core/services/relay/evm/mercury/transmitter_test.go: `.Wait()`
$DIR/core/services/relay/evm/mercury/utils/feeds_test.go: `t.Run("versioned feed ID", func(t *testing.T) {
assert.Equal(t, REPORT_V1, v1FeedId.Version())
assert.True(t, v1FeedId.IsV1())
assert.False(t, v1FeedId.IsV2())
assert.False(t, v1FeedId.IsV3())
assert.Equal(t, REPORT_V2, v2FeedId.Version())
assert.False(t, v2FeedId.IsV1())
assert.True(t, v2FeedId.IsV2())
assert.False(t, v2FeedId.IsV3())
assert.Equal(t, REPORT_V3, v3FeedId.Version())
assert.False(t, v3FeedId.IsV1())
assert.False(t, v3FeedId.IsV2())
assert.True(t, v3FeedId.IsV3())
})`
$DIR/core/services/relay/evm/mercury/utils/feeds_test.go: `.Run("versioned feed ID", func(t *testing.T) {
assert.Equal(t, REPORT_V1, v1FeedId.Version())
assert.True(t, v1FeedId.IsV1())
assert.False(t, v1FeedId.IsV2())
assert.False(t, v1FeedId.IsV3())
assert.Equal(t, REPORT_V2, v2FeedId.Version())
assert.False(t, v2FeedId.IsV1())
assert.True(t, v2FeedId.IsV2())
assert.False(t, v2FeedId.IsV3())
assert.Equal(t, REPORT_V3, v3FeedId.Version())
assert.False(t, v3FeedId.IsV1())
assert.False(t, v3FeedId.IsV2())
assert.True(t, v3FeedId.IsV3())
})`
$DIR/core/services/relay/evm/mercury/v1/data_source_test.go: `ds.fetcher = fetcher`
$DIR/core/services/relay/evm/mercury/v1/data_source_test.go: `ds.saver = saver`
$DIR/core/services/relay/evm/mercury/v1/data_source_test.go: `ds.pipelineRunner = runner`
$DIR/core/services/relay/evm/mercury/v1/data_source_test.go: `ds.spec = spec`
$DIR/core/services/relay/evm/mercury/v1/data_source_test.go: `ds.mercuryChainReader = evm.NewMercuryChainReader(h)`
$DIR/core/services/relay/evm/mercury/v1/data_source_test.go: `h.On("LatestChain").Return(head)`
$DIR/core/services/relay/evm/mercury/v1/data_source_test.go: `t.Run("when fetchMaxFinalizedBlockNum=true", func(t *testing.T) {
t.Run("with latest report in database", func(t *testing.T) {
orm.report = buildSampleV1Report()
orm.err = nil
obs, err := ds.Observe(ctx, repts, true)
assert.NoError(t, err)
assert.NoError(t, obs.MaxFinalizedBlockNumber.Err)
assert.Equal(t, int64(143), obs.MaxFinalizedBlockNumber.Val)
})
t.Run("if querying latest report fails", func(t *testing.T) {
orm.report = nil
orm.err = errors.New("something exploded")
obs, err := ds.Observe(ctx, repts, true)
assert.NoError(t, err)
assert.EqualError(t, obs.MaxFinalizedBlockNumber.Err, "something exploded")
assert.Zero(t, obs.MaxFinalizedBlockNumber.Val)
})
t.Run("if decoding latest report fails", func(t *testing.T) {
orm.report = []byte{1, 2, 3}
orm.err = nil
obs, err := ds.Observe(ctx, repts, true)
assert.NoError(t, err)
assert.EqualError(t, obs.MaxFinalizedBlockNumber.Err, "failed to decode report: abi: cannot marshal in to go type: length insufficient 3 require 32")
assert.Zero(t, obs.MaxFinalizedBlockNumber.Val)
})
orm.report = nil
orm.err = nil
t.Run("without latest report in database", func(t *testing.T) {
t.Run("if FetchInitialMaxFinalizedBlockNumber returns error", func(t *testing.T) {
fetcher.err = errors.New("mock fetcher error")
obs, err := ds.Observe(ctx, repts, true)
assert.NoError(t, err)
assert.EqualError(t, obs.MaxFinalizedBlockNumber.Err, "mock fetcher error")
assert.Zero(t, obs.MaxFinalizedBlockNumber.Val)
})
t.Run("if FetchInitialMaxFinalizedBlockNumber succeeds", func(t *testing.T) {
fetcher.err = nil
var num int64 = 32
fetcher.num = &num
obs, err := ds.Observe(ctx, repts, true)
assert.NoError(t, err)
assert.NoError(t, obs.MaxFinalizedBlockNumber.Err)
assert.Equal(t, int64(32), obs.MaxFinalizedBlockNumber.Val)
})
t.Run("if FetchInitialMaxFinalizedBlockNumber returns nil (new feed) and initialBlockNumber is set", func(t *testing.T) {
var initialBlockNumber int64 = 50
ds.initialBlockNumber = &initialBlockNumber
fetcher.err = nil
fetcher.num = nil
obs, err := ds.Observe(ctx, repts, true)
assert.NoError(t, err)
assert.NoError(t, obs.MaxFinalizedBlockNumber.Err)
assert.Equal(t, int64(49), obs.MaxFinalizedBlockNumber.Val)
})
t.Run("if FetchInitialMaxFinalizedBlockNumber returns nil (new feed) and initialBlockNumber is not set", func(t *testing.T) {
ds.initialBlockNumber = nil
t.Run("if current block num is valid", func(t *testing.T) {
fetcher.err = nil
fetcher.num = nil
obs, err := ds.Observe(ctx, repts, true)
assert.NoError(t, err)
assert.NoError(t, obs.MaxFinalizedBlockNumber.Err)
assert.Equal(t, head.Number-1, obs.MaxFinalizedBlockNumber.Val)
})
t.Run("if no current block available", func(t *testing.T) {
h2 := htmocks.NewHeadTracker[*evmtypes.Head, common.Hash](t)
h2.On("LatestChain").Return((*evmtypes.Head)(nil))
ds.mercuryChainReader = evm.NewMercuryChainReader(h2)
obs, err := ds.Observe(ctx, repts, true)
assert.NoError(t, err)
assert.EqualError(t, obs.MaxFinalizedBlockNumber.Err, "FetchInitialMaxFinalizedBlockNumber returned empty LatestReport; this is a new feed. No initialBlockNumber was set, tried to use current block number to determine maxFinalizedBlockNumber but got error: no blocks available")
})
})
})
})`
$DIR/core/services/relay/evm/mercury/v1/data_source_test.go: `t.Run("with latest report in database", func(t *testing.T) {
orm.report = buildSampleV1Report()
orm.err = nil
obs, err := ds.Observe(ctx, repts, true)
assert.NoError(t, err)
assert.NoError(t, obs.MaxFinalizedBlockNumber.Err)
assert.Equal(t, int64(143), obs.MaxFinalizedBlockNumber.Val)
})`
$DIR/core/services/relay/evm/mercury/v1/data_source_test.go: `orm.report = buildSampleV1Report()`
$DIR/core/services/relay/evm/mercury/v1/data_source_test.go: `orm.err = nil`
$DIR/core/services/relay/evm/mercury/v1/data_source_test.go: `t.Run("if querying latest report fails", func(t *testing.T) {
orm.report = nil
orm.err = errors.New("something exploded")
obs, err := ds.Observe(ctx, repts, true)
assert.NoError(t, err)
assert.EqualError(t, obs.MaxFinalizedBlockNumber.Err, "something exploded")
assert.Zero(t, obs.MaxFinalizedBlockNumber.Val)
})`
$DIR/core/services/relay/evm/mercury/v1/data_source_test.go: `orm.report = nil`
$DIR/core/services/relay/evm/mercury/v1/data_source_test.go: `orm.err = errors.New("something exploded")`
$DIR/core/services/relay/evm/mercury/v1/data_source_test.go: `t.Run("if decoding latest report fails", func(t *testing.T) {
orm.report = []byte{1, 2, 3}
orm.err = nil
obs, err := ds.Observe(ctx, repts, true)
assert.NoError(t, err)
assert.EqualError(t, obs.MaxFinalizedBlockNumber.Err, "failed to decode report: abi: cannot marshal in to go type: length insufficient 3 require 32")
assert.Zero(t, obs.MaxFinalizedBlockNumber.Val)
})`
$DIR/core/services/relay/evm/mercury/v1/data_source_test.go: `orm.report = []byte{1, 2, 3}`
$DIR/core/services/relay/evm/mercury/v1/data_source_test.go: `orm.err = nil`
$DIR/core/services/relay/evm/mercury/v1/data_source_test.go: `orm.report = nil`
$DIR/core/services/relay/evm/mercury/v1/data_source_test.go: `orm.err = nil`
$DIR/core/services/relay/evm/mercury/v1/data_source_test.go: `t.Run("without latest report in database", func(t *testing.T) {
t.Run("if FetchInitialMaxFinalizedBlockNumber returns error", func(t *testing.T) {
fetcher.err = errors.New("mock fetcher error")
obs, err := ds.Observe(ctx, repts, true)
assert.NoError(t, err)
assert.EqualError(t, obs.MaxFinalizedBlockNumber.Err, "mock fetcher error")
assert.Zero(t, obs.MaxFinalizedBlockNumber.Val)
})
t.Run("if FetchInitialMaxFinalizedBlockNumber succeeds", func(t *testing.T) {
fetcher.err = nil
var num int64 = 32
fetcher.num = &num
obs, err := ds.Observe(ctx, repts, true)
assert.NoError(t, err)
assert.NoError(t, obs.MaxFinalizedBlockNumber.Err)
assert.Equal(t, int64(32), obs.MaxFinalizedBlockNumber.Val)
})
t.Run("if FetchInitialMaxFinalizedBlockNumber returns nil (new feed) and initialBlockNumber is set", func(t *testing.T) {
var initialBlockNumber int64 = 50
ds.initialBlockNumber = &initialBlockNumber
fetcher.err = nil
fetcher.num = nil
obs, err := ds.Observe(ctx, repts, true)
assert.NoError(t, err)
assert.NoError(t, obs.MaxFinalizedBlockNumber.Err)
assert.Equal(t, int64(49), obs.MaxFinalizedBlockNumber.Val)
})
t.Run("if FetchInitialMaxFinalizedBlockNumber returns nil (new feed) and initialBlockNumber is not set", func(t *testing.T) {
ds.initialBlockNumber = nil
t.Run("if current block num is valid", func(t *testing.T) {
fetcher.err = nil
fetcher.num = nil
obs, err := ds.Observe(ctx, repts, true)
assert.NoError(t, err)
assert.NoError(t, obs.MaxFinalizedBlockNumber.Err)
assert.Equal(t, head.Number-1, obs.MaxFinalizedBlockNumber.Val)
})
t.Run("if no current block available", func(t *testing.T) {
h2 := htmocks.NewHeadTracker[*evmtypes.Head, common.Hash](t)
h2.On("LatestChain").Return((*evmtypes.Head)(nil))
ds.mercuryChainReader = evm.NewMercuryChainReader(h2)
obs, err := ds.Observe(ctx, repts, true)
assert.NoError(t, err)
assert.EqualError(t, obs.MaxFinalizedBlockNumber.Err, "FetchInitialMaxFinalizedBlockNumber returned empty LatestReport; this is a new feed. No initialBlockNumber was set, tried to use current block number to determine maxFinalizedBlockNumber but got error: no blocks available")
})
})
})`
$DIR/core/services/relay/evm/mercury/v1/data_source_test.go: `t.Run("if FetchInitialMaxFinalizedBlockNumber returns error", func(t *testing.T) {
fetcher.err = errors.New("mock fetcher error")
obs, err := ds.Observe(ctx, repts, true)
assert.NoError(t, err)
assert.EqualError(t, obs.MaxFinalizedBlockNumber.Err, "mock fetcher error")
assert.Zero(t, obs.MaxFinalizedBlockNumber.Val)
})`
$DIR/core/services/relay/evm/mercury/v1/data_source_test.go: `fetcher.err = errors.New("mock fetcher error")`
$DIR/core/services/relay/evm/mercury/v1/data_source_test.go: `t.Run("if FetchInitialMaxFinalizedBlockNumber succeeds", func(t *testing.T) {
fetcher.err = nil
var num int64 = 32
fetcher.num = &num
obs, err := ds.Observe(ctx, repts, true)
assert.NoError(t, err)
assert.NoError(t, obs.MaxFinalizedBlockNumber.Err)
assert.Equal(t, int64(32), obs.MaxFinalizedBlockNumber.Val)
})`
$DIR/core/services/relay/evm/mercury/v1/data_source_test.go: `fetcher.err = nil`
$DIR/core/services/relay/evm/mercury/v1/data_source_test.go: `fetcher.num = &num`
$DIR/core/services/relay/evm/mercury/v1/data_source_test.go: `t.Run("if FetchInitialMaxFinalizedBlockNumber returns nil (new feed) and initialBlockNumber is set", func(t *testing.T) {
var initialBlockNumber int64 = 50
ds.initialBlockNumber = &initialBlockNumber
fetcher.err = nil
fetcher.num = nil
obs, err := ds.Observe(ctx, repts, true)
assert.NoError(t, err)
assert.NoError(t, obs.MaxFinalizedBlockNumber.Err)
assert.Equal(t, int64(49), obs.MaxFinalizedBlockNumber.Val)
})`
$DIR/core/services/relay/evm/mercury/v1/data_source_test.go: `ds.initialBlockNumber = &initialBlockNumber`
$DIR/core/services/relay/evm/mercury/v1/data_source_test.go: `fetcher.err = nil`
$DIR/core/services/relay/evm/mercury/v1/data_source_test.go: `fetcher.num = nil`
$DIR/core/services/relay/evm/mercury/v1/data_source_test.go: `t.Run("if FetchInitialMaxFinalizedBlockNumber returns nil (new feed) and initialBlockNumber is not set", func(t *testing.T) {
ds.initialBlockNumber = nil
t.Run("if current block num is valid", func(t *testing.T) {
fetcher.err = nil
fetcher.num = nil
obs, err := ds.Observe(ctx, repts, true)
assert.NoError(t, err)
assert.NoError(t, obs.MaxFinalizedBlockNumber.Err)
assert.Equal(t, head.Number-1, obs.MaxFinalizedBlockNumber.Val)
})
t.Run("if no current block available", func(t *testing.T) {
h2 := htmocks.NewHeadTracker[*evmtypes.Head, common.Hash](t)
h2.On("LatestChain").Return((*evmtypes.Head)(nil))
ds.mercuryChainReader = evm.NewMercuryChainReader(h2)
obs, err := ds.Observe(ctx, repts, true)
assert.NoError(t, err)
assert.EqualError(t, obs.MaxFinalizedBlockNumber.Err, "FetchInitialMaxFinalizedBlockNumber returned empty LatestReport; this is a new feed. No initialBlockNumber was set, tried to use current block number to determine maxFinalizedBlockNumber but got error: no blocks available")
})
})`
$DIR/core/services/relay/evm/mercury/v1/data_source_test.go: `ds.initialBlockNumber = nil`
$DIR/core/services/relay/evm/mercury/v1/data_source_test.go: `t.Run("if current block num is valid", func(t *testing.T) {
fetcher.err = nil
fetcher.num = nil
obs, err := ds.Observe(ctx, repts, true)
assert.NoError(t, err)
assert.NoError(t, obs.MaxFinalizedBlockNumber.Err)
assert.Equal(t, head.Number-1, obs.MaxFinalizedBlockNumber.Val)
})`
$DIR/core/services/relay/evm/mercury/v1/data_source_test.go: `fetcher.err = nil`
$DIR/core/services/relay/evm/mercury/v1/data_source_test.go: `fetcher.num = nil`
$DIR/core/services/relay/evm/mercury/v1/data_source_test.go: `t.Run("if no current block available", func(t *testing.T) {
h2 := htmocks.NewHeadTracker[*evmtypes.Head, common.Hash](t)
h2.On("LatestChain").Return((*evmtypes.Head)(nil))
ds.mercuryChainReader = evm.NewMercuryChainReader(h2)
obs, err := ds.Observe(ctx, repts, true)
assert.NoError(t, err)
assert.EqualError(t, obs.MaxFinalizedBlockNumber.Err, "FetchInitialMaxFinalizedBlockNumber returned empty LatestReport; this is a new feed. No initialBlockNumber was set, tried to use current block number to determine maxFinalizedBlockNumber but got error: no blocks available")
})`
$DIR/core/services/relay/evm/mercury/v1/data_source_test.go: `h2.On("LatestChain").Return((*evmtypes.Head)(nil))`
$DIR/core/services/relay/evm/mercury/v1/data_source_test.go: `ds.mercuryChainReader = evm.NewMercuryChainReader(h2)`
$DIR/core/services/relay/evm/mercury/v1/data_source_test.go: `ds.mercuryChainReader = evm.NewMercuryChainReader(h)`
$DIR/core/services/relay/evm/mercury/v1/data_source_test.go: `t.Run("when fetchMaxFinalizedBlockNum=false", func(t *testing.T) {
t.Run("when run execution fails, returns error", func(t *testing.T) {
t.Cleanup(func() {
runner.Err = nil
})
runner.Err = errors.New("run execution failed")
_, err := ds.Observe(ctx, repts, false)
assert.EqualError(t, err, "Observe failed while executing run: error executing run for spec ID 0: run execution failed")
})
t.Run("makes observation using pipeline, when all tasks succeed", func(t *testing.T) {
obs, err := ds.Observe(ctx, repts, false)
assert.NoError(t, err)
assert.Equal(t, big.NewInt(122), obs.BenchmarkPrice.Val)
assert.NoError(t, obs.BenchmarkPrice.Err)
assert.Equal(t, big.NewInt(121), obs.Bid.Val)
assert.NoError(t, obs.Bid.Err)
assert.Equal(t, big.NewInt(123), obs.Ask.Val)
assert.NoError(t, obs.Ask.Err)
assert.Equal(t, head.Number, obs.CurrentBlockNum.Val)
assert.NoError(t, obs.CurrentBlockNum.Err)
assert.Equal(t, fmt.Sprintf("%x", head.Hash), fmt.Sprintf("%x", obs.CurrentBlockHash.Val))
assert.NoError(t, obs.CurrentBlockHash.Err)
assert.Equal(t, uint64(head.Timestamp.Unix()), obs.CurrentBlockTimestamp.Val)
assert.NoError(t, obs.CurrentBlockTimestamp.Err)
assert.Zero(t, obs.MaxFinalizedBlockNumber.Val)
assert.EqualError(t, obs.MaxFinalizedBlockNumber.Err, "fetchMaxFinalizedBlockNum=false")
})
t.Run("makes observation using pipeline, with erroring tasks", func(t *testing.T) {
for i := range trrs {
trrs[i].Result.Error = fmt.Errorf("task error %d", i)
}
obs, err := ds.Observe(ctx, repts, false)
assert.NoError(t, err)
assert.Zero(t, obs.BenchmarkPrice.Val)
assert.EqualError(t, obs.BenchmarkPrice.Err, "task error 0")
assert.Zero(t, obs.Bid.Val)
assert.EqualError(t, obs.Bid.Err, "task error 1")
assert.Zero(t, obs.Ask.Val)
assert.EqualError(t, obs.Ask.Err, "task error 2")
assert.Equal(t, head.Number, obs.CurrentBlockNum.Val)
assert.NoError(t, obs.CurrentBlockNum.Err)
assert.Equal(t, fmt.Sprintf("%x", head.Hash), fmt.Sprintf("%x", obs.CurrentBlockHash.Val))
assert.NoError(t, obs.CurrentBlockHash.Err)
assert.Equal(t, uint64(head.Timestamp.Unix()), obs.CurrentBlockTimestamp.Val)
assert.NoError(t, obs.CurrentBlockTimestamp.Err)
assert.Zero(t, obs.MaxFinalizedBlockNumber.Val)
assert.EqualError(t, obs.MaxFinalizedBlockNumber.Err, "fetchMaxFinalizedBlockNum=false")
})
t.Run("makes partial observation using pipeline, if only some results have errored", func(t *testing.T) {
trrs[0].Result.Error = fmt.Errorf("task failed")
trrs[1].Result.Value = "33"
trrs[1].Result.Error = nil
trrs[2].Result.Value = nil
trrs[2].Result.Error = fmt.Errorf("task failed")
obs, err := ds.Observe(ctx, repts, false)
assert.NoError(t, err)
assert.Zero(t, obs.BenchmarkPrice.Val)
assert.EqualError(t, obs.BenchmarkPrice.Err, "task failed")
assert.Equal(t, big.NewInt(33), obs.Bid.Val)
assert.NoError(t, obs.Bid.Err)
assert.Zero(t, obs.Ask.Val)
assert.EqualError(t, obs.Ask.Err, "task failed")
})
t.Run("returns error if at least one result is unparseable", func(t *testing.T) {
trrs[0].Result.Error = fmt.Errorf("task failed")
trrs[1].Result.Value = "foo"
trrs[1].Result.Error = nil
trrs[2].Result.Value = "123456"
trrs[2].Result.Error = nil
_, err := ds.Observe(ctx, repts, false)
assert.EqualError(t, err, "Observe failed while parsing run results: failed to parse Bid: can't convert foo to decimal")
})
t.Run("saves run", func(t *testing.T) {
for i := range trrs {
trrs[i].Result.Value = "123"
trrs[i].Result.Error = nil
}
_, err := ds.Observe(ctx, repts, false)
assert.NoError(t, err)
assert.Equal(t, int64(42), saver.r.ID)
})
})`
$DIR/core/services/relay/evm/mercury/v1/data_source_test.go: `t.Run("when run execution fails, returns error", func(t *testing.T) {
t.Cleanup(func() {
runner.Err = nil
})
runner.Err = errors.New("run execution failed")
_, err := ds.Observe(ctx, repts, false)
assert.EqualError(t, err, "Observe failed while executing run: error executing run for spec ID 0: run execution failed")
})`
$DIR/core/services/relay/evm/mercury/v1/data_source_test.go: `t.Cleanup(func() {
runner.Err = nil
})`
$DIR/core/services/relay/evm/mercury/v1/data_source_test.go: `runner.Err = nil`
$DIR/core/services/relay/evm/mercury/v1/data_source_test.go: `runner.Err = errors.New("run execution failed")`
$DIR/core/services/relay/evm/mercury/v1/data_source_test.go: `t.Run("makes observation using pipeline, when all tasks succeed", func(t *testing.T) {
obs, err := ds.Observe(ctx, repts, false)
assert.NoError(t, err)
assert.Equal(t, big.NewInt(122), obs.BenchmarkPrice.Val)
assert.NoError(t, obs.BenchmarkPrice.Err)
assert.Equal(t, big.NewInt(121), obs.Bid.Val)
assert.NoError(t, obs.Bid.Err)
assert.Equal(t, big.NewInt(123), obs.Ask.Val)
assert.NoError(t, obs.Ask.Err)
assert.Equal(t, head.Number, obs.CurrentBlockNum.Val)
assert.NoError(t, obs.CurrentBlockNum.Err)
assert.Equal(t, fmt.Sprintf("%x", head.Hash), fmt.Sprintf("%x", obs.CurrentBlockHash.Val))
assert.NoError(t, obs.CurrentBlockHash.Err)
assert.Equal(t, uint64(head.Timestamp.Unix()), obs.CurrentBlockTimestamp.Val)
assert.NoError(t, obs.CurrentBlockTimestamp.Err)
assert.Zero(t, obs.MaxFinalizedBlockNumber.Val)
assert.EqualError(t, obs.MaxFinalizedBlockNumber.Err, "fetchMaxFinalizedBlockNum=false")
})`
$DIR/core/services/relay/evm/mercury/v1/data_source_test.go: `t.Run("makes observation using pipeline, with erroring tasks", func(t *testing.T) {
for i := range trrs {
trrs[i].Result.Error = fmt.Errorf("task error %d", i)
}
obs, err := ds.Observe(ctx, repts, false)
assert.NoError(t, err)
assert.Zero(t, obs.BenchmarkPrice.Val)
assert.EqualError(t, obs.BenchmarkPrice.Err, "task error 0")
assert.Zero(t, obs.Bid.Val)
assert.EqualError(t, obs.Bid.Err, "task error 1")
assert.Zero(t, obs.Ask.Val)
assert.EqualError(t, obs.Ask.Err, "task error 2")
assert.Equal(t, head.Number, obs.CurrentBlockNum.Val)
assert.NoError(t, obs.CurrentBlockNum.Err)
assert.Equal(t, fmt.Sprintf("%x", head.Hash), fmt.Sprintf("%x", obs.CurrentBlockHash.Val))
assert.NoError(t, obs.CurrentBlockHash.Err)
assert.Equal(t, uint64(head.Timestamp.Unix()), obs.CurrentBlockTimestamp.Val)
assert.NoError(t, obs.CurrentBlockTimestamp.Err)
assert.Zero(t, obs.MaxFinalizedBlockNumber.Val)
assert.EqualError(t, obs.MaxFinalizedBlockNumber.Err, "fetchMaxFinalizedBlockNum=false")
})`
$DIR/core/services/relay/evm/mercury/v1/data_source_test.go: `trrs[i].Result.Error = fmt.Errorf("task error %d", i)`
$DIR/core/services/relay/evm/mercury/v1/data_source_test.go: `t.Run("makes partial observation using pipeline, if only some results have errored", func(t *testing.T) {
trrs[0].Result.Error = fmt.Errorf("task failed")
trrs[1].Result.Value = "33"
trrs[1].Result.Error = nil
trrs[2].Result.Value = nil
trrs[2].Result.Error = fmt.Errorf("task failed")
obs, err := ds.Observe(ctx, repts, false)
assert.NoError(t, err)
assert.Zero(t, obs.BenchmarkPrice.Val)
assert.EqualError(t, obs.BenchmarkPrice.Err, "task failed")
assert.Equal(t, big.NewInt(33), obs.Bid.Val)
assert.NoError(t, obs.Bid.Err)
assert.Zero(t, obs.Ask.Val)
assert.EqualError(t, obs.Ask.Err, "task failed")
})`
$DIR/core/services/relay/evm/mercury/v1/data_source_test.go: `trrs[0].Result.Error = fmt.Errorf("task failed")`
$DIR/core/services/relay/evm/mercury/v1/data_source_test.go: `trrs[1].Result.Value = "33"`
$DIR/core/services/relay/evm/mercury/v1/data_source_test.go: `trrs[1].Result.Error = nil`
$DIR/core/services/relay/evm/mercury/v1/data_source_test.go: `trrs[2].Result.Value = nil`
$DIR/core/services/relay/evm/mercury/v1/data_source_test.go: `trrs[2].Result.Error = fmt.Errorf("task failed")`
$DIR/core/services/relay/evm/mercury/v1/data_source_test.go: `t.Run("returns error if at least one result is unparseable", func(t *testing.T) {
trrs[0].Result.Error = fmt.Errorf("task failed")
trrs[1].Result.Value = "foo"
trrs[1].Result.Error = nil
trrs[2].Result.Value = "123456"
trrs[2].Result.Error = nil
_, err := ds.Observe(ctx, repts, false)
assert.EqualError(t, err, "Observe failed while parsing run results: failed to parse Bid: can't convert foo to decimal")
})`
$DIR/core/services/relay/evm/mercury/v1/data_source_test.go: `trrs[0].Result.Error = fmt.Errorf("task failed")`
$DIR/core/services/relay/evm/mercury/v1/data_source_test.go: `trrs[1].Result.Value = "foo"`
$DIR/core/services/relay/evm/mercury/v1/data_source_test.go: `trrs[1].Result.Error = nil`
$DIR/core/services/relay/evm/mercury/v1/data_source_test.go: `trrs[2].Result.Value = "123456"`
$DIR/core/services/relay/evm/mercury/v1/data_source_test.go: `trrs[2].Result.Error = nil`
$DIR/core/services/relay/evm/mercury/v1/data_source_test.go: `t.Run("saves run", func(t *testing.T) {
for i := range trrs {
trrs[i].Result.Value = "123"
trrs[i].Result.Error = nil
}
_, err := ds.Observe(ctx, repts, false)
assert.NoError(t, err)
assert.Equal(t, int64(42), saver.r.ID)
})`
$DIR/core/services/relay/evm/mercury/v1/data_source_test.go: `trrs[i].Result.Value = "123"`
$DIR/core/services/relay/evm/mercury/v1/data_source_test.go: `trrs[i].Result.Error = nil`
$DIR/core/services/relay/evm/mercury/v1/data_source_test.go: `t.Run("when chain length is zero", func(t *testing.T) {
ht2 := htmocks.NewHeadTracker[*evmtypes.Head, common.Hash](t)
ht2.On("LatestChain").Return((*evmtypes.Head)(nil))
ds.mercuryChainReader = evm.NewMercuryChainReader(ht2)
obs, err := ds.Observe(ctx, repts, true)
assert.NoError(t, err)
assert.Len(t, obs.LatestBlocks, 0)
ht2.AssertExpectations(t)
})`
$DIR/core/services/relay/evm/mercury/v1/data_source_test.go: `ht2.On("LatestChain").Return((*evmtypes.Head)(nil))`
$DIR/core/services/relay/evm/mercury/v1/data_source_test.go: `ds.mercuryChainReader = evm.NewMercuryChainReader(ht2)`
$DIR/core/services/relay/evm/mercury/v1/data_source_test.go: `ht2.AssertExpectations(t)`
$DIR/core/services/relay/evm/mercury/v1/data_source_test.go: `t.Run("when chain is too short", func(t *testing.T) {
h4 := &evmtypes.Head{
Number: 4,
Parent: nil,
}
h5 := &evmtypes.Head{
Number: 5,
Parent: h4,
}
h6 := &evmtypes.Head{
Number: 6,
Parent: h5,
}
ht2 := htmocks.NewHeadTracker[*evmtypes.Head, common.Hash](t)
ht2.On("LatestChain").Return(h6)
ds.mercuryChainReader = evm.NewMercuryChainReader(ht2)
obs, err := ds.Observe(ctx, repts, true)
assert.NoError(t, err)
assert.Len(t, obs.LatestBlocks, 3)
assert.Equal(t, 6, int(obs.LatestBlocks[0].Num))
assert.Equal(t, 5, int(obs.LatestBlocks[1].Num))
assert.Equal(t, 4, int(obs.LatestBlocks[2].Num))
ht2.AssertExpectations(t)
})`
$DIR/core/services/relay/evm/mercury/v1/data_source_test.go: `ht2.On("LatestChain").Return(h6)`
$DIR/core/services/relay/evm/mercury/v1/data_source_test.go: `ds.mercuryChainReader = evm.NewMercuryChainReader(ht2)`
$DIR/core/services/relay/evm/mercury/v1/data_source_test.go: `ht2.AssertExpectations(t)`
$DIR/core/services/relay/evm/mercury/v1/data_source_test.go: `t.Run("when chain is long enough", func(t *testing.T) {
heads := make([]*evmtypes.Head, nBlocksObservation+5)
for i := range heads {
heads[i] = &evmtypes.Head{Number: int64(i)}
if i > 0 {
heads[i].Parent = heads[i-1]
}
}
ht2 := htmocks.NewHeadTracker[*evmtypes.Head, common.Hash](t)
ht2.On("LatestChain").Return(heads[len(heads)-1])
ds.mercuryChainReader = evm.NewMercuryChainReader(ht2)
obs, err := ds.Observe(ctx, repts, true)
assert.NoError(t, err)
assert.Len(t, obs.LatestBlocks, nBlocksObservation)
highestBlockNum := heads[len(heads)-1].Number
for i := range obs.LatestBlocks {
assert.Equal(t, int(highestBlockNum)-i, int(obs.LatestBlocks[i].Num))
}
ht2.AssertExpectations(t)
})`
$DIR/core/services/relay/evm/mercury/v1/data_source_test.go: `heads[i] = &evmtypes.Head{Number: int64(i)}`
$DIR/core/services/relay/evm/mercury/v1/data_source_test.go: `heads[i].Parent = heads[i-1]`
$DIR/core/services/relay/evm/mercury/v1/data_source_test.go: `ht2.On("LatestChain").Return(heads[len(heads)-1])`
$DIR/core/services/relay/evm/mercury/v1/data_source_test.go: `ds.mercuryChainReader = evm.NewMercuryChainReader(ht2)`
$DIR/core/services/relay/evm/mercury/v1/data_source_test.go: `ht2.AssertExpectations(t)`
$DIR/core/services/relay/evm/mercury/v1/data_source_test.go: `t.Run("when chain reader returns an error", func(t *testing.T) {
ds.mercuryChainReader = &mockChainReader{
err: io.EOF,
obs: nil,
}
obs, err := ds.Observe(ctx, repts, true)
assert.Error(t, err)
assert.Equal(t, obs, v1.Observation{})
})`
$DIR/core/services/relay/evm/mercury/v1/data_source_test.go: `ds.mercuryChainReader = &mockChainReader{
err: io.EOF,
obs: nil,
}`
$DIR/core/services/relay/evm/mercury/v1/data_source_test.go: `t.Run("returns head from headtracker if present", func(t *testing.T) {
headTracker := htmocks.NewHeadTracker[*evmtypes.Head, common.Hash](t)
headTracker.On("LatestChain").Return(&h, nil)
ds.mercuryChainReader = evm.NewMercuryChainReader(headTracker)
obs := v1.Observation{}
err := ds.setLatestBlocks(testutils.Context(t), &obs)
assert.NoError(t, err)
assert.Equal(t, h.Number, obs.CurrentBlockNum.Val)
assert.Equal(t, h.Hash.Bytes(), obs.CurrentBlockHash.Val)
assert.Equal(t, uint64(h.Timestamp.Unix()), obs.CurrentBlockTimestamp.Val)
assert.Len(t, obs.LatestBlocks, 1)
headTracker.AssertExpectations(t)
})`
$DIR/core/services/relay/evm/mercury/v1/data_source_test.go: `headTracker.On("LatestChain").Return(&h, nil)`
$DIR/core/services/relay/evm/mercury/v1/data_source_test.go: `ds.mercuryChainReader = evm.NewMercuryChainReader(headTracker)`
$DIR/core/services/relay/evm/mercury/v1/data_source_test.go: `headTracker.AssertExpectations(t)`
$DIR/core/services/relay/evm/mercury/v1/data_source_test.go: `headTracker.On("LatestChain").Return((*evmtypes.Head)(nil))`
$DIR/core/services/relay/evm/mercury/v1/data_source_test.go: `ds.mercuryChainReader = evm.NewChainReader(headTracker)`
$DIR/core/services/relay/evm/mercury/v1/data_source_test.go: `headTracker.AssertExpectations(t)`
$DIR/core/services/relay/evm/mercury/v1/data_source_test.go: `.TestLogger(t)`
$DIR/core/services/relay/evm/mercury/v1/data_source_test.go: `.Context(t)`
$DIR/core/services/relay/evm/mercury/v1/data_source_test.go: `.NewMercuryChainReader(h)`
$DIR/core/services/relay/evm/mercury/v1/data_source_test.go: `.Int31()`
$DIR/core/services/relay/evm/mercury/v1/data_source_test.go: `.NewHash()`
$DIR/core/services/relay/evm/mercury/v1/data_source_test.go: `.Now()`
$DIR/core/services/relay/evm/mercury/v1/data_source_test.go: `.On("LatestChain")`
$DIR/core/services/relay/evm/mercury/v1/data_source_test.go: `.Return(head)`
$DIR/core/services/relay/evm/mercury/v1/data_source_test.go: `.Run("when fetchMaxFinalizedBlockNum=true", func(t *testing.T) {
t.Run("with latest report in database", func(t *testing.T) {
orm.report = buildSampleV1Report()
orm.err = nil
obs, err := ds.Observe(ctx, repts, true)
assert.NoError(t, err)
assert.NoError(t, obs.MaxFinalizedBlockNumber.Err)
assert.Equal(t, int64(143), obs.MaxFinalizedBlockNumber.Val)
})
t.Run("if querying latest report fails", func(t *testing.T) {
orm.report = nil
orm.err = errors.New("something exploded")
obs, err := ds.Observe(ctx, repts, true)
assert.NoError(t, err)
assert.EqualError(t, obs.MaxFinalizedBlockNumber.Err, "something exploded")
assert.Zero(t, obs.MaxFinalizedBlockNumber.Val)
})
t.Run("if decoding latest report fails", func(t *testing.T) {
orm.report = []byte{1, 2, 3}
orm.err = nil
obs, err := ds.Observe(ctx, repts, true)
assert.NoError(t, err)
assert.EqualError(t, obs.MaxFinalizedBlockNumber.Err, "failed to decode report: abi: cannot marshal in to go type: length insufficient 3 require 32")
assert.Zero(t, obs.MaxFinalizedBlockNumber.Val)
})
orm.report = nil
orm.err = nil
t.Run("without latest report in database", func(t *testing.T) {
t.Run("if FetchInitialMaxFinalizedBlockNumber returns error", func(t *testing.T) {
fetcher.err = errors.New("mock fetcher error")
obs, err := ds.Observe(ctx, repts, true)
assert.NoError(t, err)
assert.EqualError(t, obs.MaxFinalizedBlockNumber.Err, "mock fetcher error")
assert.Zero(t, obs.MaxFinalizedBlockNumber.Val)
})
t.Run("if FetchInitialMaxFinalizedBlockNumber succeeds", func(t *testing.T) {
fetcher.err = nil
var num int64 = 32
fetcher.num = &num
obs, err := ds.Observe(ctx, repts, true)
assert.NoError(t, err)
assert.NoError(t, obs.MaxFinalizedBlockNumber.Err)
assert.Equal(t, int64(32), obs.MaxFinalizedBlockNumber.Val)
})
t.Run("if FetchInitialMaxFinalizedBlockNumber returns nil (new feed) and initialBlockNumber is set", func(t *testing.T) {
var initialBlockNumber int64 = 50
ds.initialBlockNumber = &initialBlockNumber
fetcher.err = nil
fetcher.num = nil
obs, err := ds.Observe(ctx, repts, true)
assert.NoError(t, err)
assert.NoError(t, obs.MaxFinalizedBlockNumber.Err)
assert.Equal(t, int64(49), obs.MaxFinalizedBlockNumber.Val)
})
t.Run("if FetchInitialMaxFinalizedBlockNumber returns nil (new feed) and initialBlockNumber is not set", func(t *testing.T) {
ds.initialBlockNumber = nil
t.Run("if current block num is valid", func(t *testing.T) {
fetcher.err = nil
fetcher.num = nil
obs, err := ds.Observe(ctx, repts, true)
assert.NoError(t, err)
assert.NoError(t, obs.MaxFinalizedBlockNumber.Err)
assert.Equal(t, head.Number-1, obs.MaxFinalizedBlockNumber.Val)
})
t.Run("if no current block available", func(t *testing.T) {
h2 := htmocks.NewHeadTracker[*evmtypes.Head, common.Hash](t)
h2.On("LatestChain").Return((*evmtypes.Head)(nil))
ds.mercuryChainReader = evm.NewMercuryChainReader(h2)
obs, err := ds.Observe(ctx, repts, true)
assert.NoError(t, err)
assert.EqualError(t, obs.MaxFinalizedBlockNumber.Err, "FetchInitialMaxFinalizedBlockNumber returned empty LatestReport; this is a new feed. No initialBlockNumber was set, tried to use current block number to determine maxFinalizedBlockNumber but got error: no blocks available")
})
})
})
})`
$DIR/core/services/relay/evm/mercury/v1/data_source_test.go: `.Run("with latest report in database", func(t *testing.T) {
orm.report = buildSampleV1Report()
orm.err = nil
obs, err := ds.Observe(ctx, repts, true)
assert.NoError(t, err)
assert.NoError(t, obs.MaxFinalizedBlockNumber.Err)
assert.Equal(t, int64(143), obs.MaxFinalizedBlockNumber.Val)
})`
$DIR/core/services/relay/evm/mercury/v1/data_source_test.go: `.Observe(ctx, repts, true)`
$DIR/core/services/relay/evm/mercury/v1/data_source_test.go: `.Run("if querying latest report fails", func(t *testing.T) {
orm.report = nil
orm.err = errors.New("something exploded")
obs, err := ds.Observe(ctx, repts, true)
assert.NoError(t, err)
assert.EqualError(t, obs.MaxFinalizedBlockNumber.Err, "something exploded")
assert.Zero(t, obs.MaxFinalizedBlockNumber.Val)
})`
$DIR/core/services/relay/evm/mercury/v1/data_source_test.go: `.New("something exploded")`
$DIR/core/services/relay/evm/mercury/v1/data_source_test.go: `.Observe(ctx, repts, true)`
$DIR/core/services/relay/evm/mercury/v1/data_source_test.go: `.Run("if decoding latest report fails", func(t *testing.T) {
orm.report = []byte{1, 2, 3}
orm.err = nil
obs, err := ds.Observe(ctx, repts, true)
assert.NoError(t, err)
assert.EqualError(t, obs.MaxFinalizedBlockNumber.Err, "failed to decode report: abi: cannot marshal in to go type: length insufficient 3 require 32")
assert.Zero(t, obs.MaxFinalizedBlockNumber.Val)
})`
$DIR/core/services/relay/evm/mercury/v1/data_source_test.go: `.Observe(ctx, repts, true)`
$DIR/core/services/relay/evm/mercury/v1/data_source_test.go: `.Run("without latest report in database", func(t *testing.T) {
t.Run("if FetchInitialMaxFinalizedBlockNumber returns error", func(t *testing.T) {
fetcher.err = errors.New("mock fetcher error")
obs, err := ds.Observe(ctx, repts, true)
assert.NoError(t, err)
assert.EqualError(t, obs.MaxFinalizedBlockNumber.Err, "mock fetcher error")
assert.Zero(t, obs.MaxFinalizedBlockNumber.Val)
})
t.Run("if FetchInitialMaxFinalizedBlockNumber succeeds", func(t *testing.T) {
fetcher.err = nil
var num int64 = 32
fetcher.num = &num
obs, err := ds.Observe(ctx, repts, true)
assert.NoError(t, err)
assert.NoError(t, obs.MaxFinalizedBlockNumber.Err)
assert.Equal(t, int64(32), obs.MaxFinalizedBlockNumber.Val)
})
t.Run("if FetchInitialMaxFinalizedBlockNumber returns nil (new feed) and initialBlockNumber is set", func(t *testing.T) {
var initialBlockNumber int64 = 50
ds.initialBlockNumber = &initialBlockNumber
fetcher.err = nil
fetcher.num = nil
obs, err := ds.Observe(ctx, repts, true)
assert.NoError(t, err)
assert.NoError(t, obs.MaxFinalizedBlockNumber.Err)
assert.Equal(t, int64(49), obs.MaxFinalizedBlockNumber.Val)
})
t.Run("if FetchInitialMaxFinalizedBlockNumber returns nil (new feed) and initialBlockNumber is not set", func(t *testing.T) {
ds.initialBlockNumber = nil
t.Run("if current block num is valid", func(t *testing.T) {
fetcher.err = nil
fetcher.num = nil
obs, err := ds.Observe(ctx, repts, true)
assert.NoError(t, err)
assert.NoError(t, obs.MaxFinalizedBlockNumber.Err)
assert.Equal(t, head.Number-1, obs.MaxFinalizedBlockNumber.Val)
})
t.Run("if no current block available", func(t *testing.T) {
h2 := htmocks.NewHeadTracker[*evmtypes.Head, common.Hash](t)
h2.On("LatestChain").Return((*evmtypes.Head)(nil))
ds.mercuryChainReader = evm.NewMercuryChainReader(h2)
obs, err := ds.Observe(ctx, repts, true)
assert.NoError(t, err)
assert.EqualError(t, obs.MaxFinalizedBlockNumber.Err, "FetchInitialMaxFinalizedBlockNumber returned empty LatestReport; this is a new feed. No initialBlockNumber was set, tried to use current block number to determine maxFinalizedBlockNumber but got error: no blocks available")
})
})
})`
$DIR/core/services/relay/evm/mercury/v1/data_source_test.go: `.Run("if FetchInitialMaxFinalizedBlockNumber returns error", func(t *testing.T) {
fetcher.err = errors.New("mock fetcher error")
obs, err := ds.Observe(ctx, repts, true)
assert.NoError(t, err)
assert.EqualError(t, obs.MaxFinalizedBlockNumber.Err, "mock fetcher error")
assert.Zero(t, obs.MaxFinalizedBlockNumber.Val)
})`
$DIR/core/services/relay/evm/mercury/v1/data_source_test.go: `.New("mock fetcher error")`
$DIR/core/services/relay/evm/mercury/v1/data_source_test.go: `.Observe(ctx, repts, true)`
$DIR/core/services/relay/evm/mercury/v1/data_source_test.go: `.Run("if FetchInitialMaxFinalizedBlockNumber succeeds", func(t *testing.T) {
fetcher.err = nil
var num int64 = 32
fetcher.num = &num
obs, err := ds.Observe(ctx, repts, true)
assert.NoError(t, err)
assert.NoError(t, obs.MaxFinalizedBlockNumber.Err)
assert.Equal(t, int64(32), obs.MaxFinalizedBlockNumber.Val)
})`
$DIR/core/services/relay/evm/mercury/v1/data_source_test.go: `.Observe(ctx, repts, true)`
$DIR/core/services/relay/evm/mercury/v1/data_source_test.go: `.Run("if FetchInitialMaxFinalizedBlockNumber returns nil (new feed) and initialBlockNumber is set", func(t *testing.T) {
var initialBlockNumber int64 = 50
ds.initialBlockNumber = &initialBlockNumber
fetcher.err = nil
fetcher.num = nil
obs, err := ds.Observe(ctx, repts, true)
assert.NoError(t, err)
assert.NoError(t, obs.MaxFinalizedBlockNumber.Err)
assert.Equal(t, int64(49), obs.MaxFinalizedBlockNumber.Val)
})`
$DIR/core/services/relay/evm/mercury/v1/data_source_test.go: `.Observe(ctx, repts, true)`
$DIR/core/services/relay/evm/mercury/v1/data_source_test.go: `.Run("if FetchInitialMaxFinalizedBlockNumber returns nil (new feed) and initialBlockNumber is not set", func(t *testing.T) {
ds.initialBlockNumber = nil
t.Run("if current block num is valid", func(t *testing.T) {
fetcher.err = nil
fetcher.num = nil
obs, err := ds.Observe(ctx, repts, true)
assert.NoError(t, err)
assert.NoError(t, obs.MaxFinalizedBlockNumber.Err)
assert.Equal(t, head.Number-1, obs.MaxFinalizedBlockNumber.Val)
})
t.Run("if no current block available", func(t *testing.T) {
h2 := htmocks.NewHeadTracker[*evmtypes.Head, common.Hash](t)
h2.On("LatestChain").Return((*evmtypes.Head)(nil))
ds.mercuryChainReader = evm.NewMercuryChainReader(h2)
obs, err := ds.Observe(ctx, repts, true)
assert.NoError(t, err)
assert.EqualError(t, obs.MaxFinalizedBlockNumber.Err, "FetchInitialMaxFinalizedBlockNumber returned empty LatestReport; this is a new feed. No initialBlockNumber was set, tried to use current block number to determine maxFinalizedBlockNumber but got error: no blocks available")
})
})`
$DIR/core/services/relay/evm/mercury/v1/data_source_test.go: `.Run("if current block num is valid", func(t *testing.T) {
fetcher.err = nil
fetcher.num = nil
obs, err := ds.Observe(ctx, repts, true)
assert.NoError(t, err)
assert.NoError(t, obs.MaxFinalizedBlockNumber.Err)
assert.Equal(t, head.Number-1, obs.MaxFinalizedBlockNumber.Val)
})`
$DIR/core/services/relay/evm/mercury/v1/data_source_test.go: `.Observe(ctx, repts, true)`
$DIR/core/services/relay/evm/mercury/v1/data_source_test.go: `.Run("if no current block available", func(t *testing.T) {
h2 := htmocks.NewHeadTracker[*evmtypes.Head, common.Hash](t)
h2.On("LatestChain").Return((*evmtypes.Head)(nil))
ds.mercuryChainReader = evm.NewMercuryChainReader(h2)
obs, err := ds.Observe(ctx, repts, true)
assert.NoError(t, err)
assert.EqualError(t, obs.MaxFinalizedBlockNumber.Err, "FetchInitialMaxFinalizedBlockNumber returned empty LatestReport; this is a new feed. No initialBlockNumber was set, tried to use current block number to determine maxFinalizedBlockNumber but got error: no blocks available")
})`
$DIR/core/services/relay/evm/mercury/v1/data_source_test.go: `.On("LatestChain")`
$DIR/core/services/relay/evm/mercury/v1/data_source_test.go: `.Return((*evmtypes.Head)(nil))`
$DIR/core/services/relay/evm/mercury/v1/data_source_test.go: `.NewMercuryChainReader(h2)`
$DIR/core/services/relay/evm/mercury/v1/data_source_test.go: `.Observe(ctx, repts, true)`
$DIR/core/services/relay/evm/mercury/v1/data_source_test.go: `.NewMercuryChainReader(h)`
$DIR/core/services/relay/evm/mercury/v1/data_source_test.go: `.Run("when fetchMaxFinalizedBlockNum=false", func(t *testing.T) {
t.Run("when run execution fails, returns error", func(t *testing.T) {
t.Cleanup(func() {
runner.Err = nil
})
runner.Err = errors.New("run execution failed")
_, err := ds.Observe(ctx, repts, false)
assert.EqualError(t, err, "Observe failed while executing run: error executing run for spec ID 0: run execution failed")
})
t.Run("makes observation using pipeline, when all tasks succeed", func(t *testing.T) {
obs, err := ds.Observe(ctx, repts, false)
assert.NoError(t, err)
assert.Equal(t, big.NewInt(122), obs.BenchmarkPrice.Val)
assert.NoError(t, obs.BenchmarkPrice.Err)
assert.Equal(t, big.NewInt(121), obs.Bid.Val)
assert.NoError(t, obs.Bid.Err)
assert.Equal(t, big.NewInt(123), obs.Ask.Val)
assert.NoError(t, obs.Ask.Err)
assert.Equal(t, head.Number, obs.CurrentBlockNum.Val)
assert.NoError(t, obs.CurrentBlockNum.Err)
assert.Equal(t, fmt.Sprintf("%x", head.Hash), fmt.Sprintf("%x", obs.CurrentBlockHash.Val))
assert.NoError(t, obs.CurrentBlockHash.Err)
assert.Equal(t, uint64(head.Timestamp.Unix()), obs.CurrentBlockTimestamp.Val)
assert.NoError(t, obs.CurrentBlockTimestamp.Err)
assert.Zero(t, obs.MaxFinalizedBlockNumber.Val)
assert.EqualError(t, obs.MaxFinalizedBlockNumber.Err, "fetchMaxFinalizedBlockNum=false")
})
t.Run("makes observation using pipeline, with erroring tasks", func(t *testing.T) {
for i := range trrs {
trrs[i].Result.Error = fmt.Errorf("task error %d", i)
}
obs, err := ds.Observe(ctx, repts, false)
assert.NoError(t, err)
assert.Zero(t, obs.BenchmarkPrice.Val)
assert.EqualError(t, obs.BenchmarkPrice.Err, "task error 0")
assert.Zero(t, obs.Bid.Val)
assert.EqualError(t, obs.Bid.Err, "task error 1")
assert.Zero(t, obs.Ask.Val)
assert.EqualError(t, obs.Ask.Err, "task error 2")
assert.Equal(t, head.Number, obs.CurrentBlockNum.Val)
assert.NoError(t, obs.CurrentBlockNum.Err)
assert.Equal(t, fmt.Sprintf("%x", head.Hash), fmt.Sprintf("%x", obs.CurrentBlockHash.Val))
assert.NoError(t, obs.CurrentBlockHash.Err)
assert.Equal(t, uint64(head.Timestamp.Unix()), obs.CurrentBlockTimestamp.Val)
assert.NoError(t, obs.CurrentBlockTimestamp.Err)
assert.Zero(t, obs.MaxFinalizedBlockNumber.Val)
assert.EqualError(t, obs.MaxFinalizedBlockNumber.Err, "fetchMaxFinalizedBlockNum=false")
})
t.Run("makes partial observation using pipeline, if only some results have errored", func(t *testing.T) {
trrs[0].Result.Error = fmt.Errorf("task failed")
trrs[1].Result.Value = "33"
trrs[1].Result.Error = nil
trrs[2].Result.Value = nil
trrs[2].Result.Error = fmt.Errorf("task failed")
obs, err := ds.Observe(ctx, repts, false)
assert.NoError(t, err)
assert.Zero(t, obs.BenchmarkPrice.Val)
assert.EqualError(t, obs.BenchmarkPrice.Err, "task failed")
assert.Equal(t, big.NewInt(33), obs.Bid.Val)
assert.NoError(t, obs.Bid.Err)
assert.Zero(t, obs.Ask.Val)
assert.EqualError(t, obs.Ask.Err, "task failed")
})
t.Run("returns error if at least one result is unparseable", func(t *testing.T) {
trrs[0].Result.Error = fmt.Errorf("task failed")
trrs[1].Result.Value = "foo"
trrs[1].Result.Error = nil
trrs[2].Result.Value = "123456"
trrs[2].Result.Error = nil
_, err := ds.Observe(ctx, repts, false)
assert.EqualError(t, err, "Observe failed while parsing run results: failed to parse Bid: can't convert foo to decimal")
})
t.Run("saves run", func(t *testing.T) {
for i := range trrs {
trrs[i].Result.Value = "123"
trrs[i].Result.Error = nil
}
_, err := ds.Observe(ctx, repts, false)
assert.NoError(t, err)
assert.Equal(t, int64(42), saver.r.ID)
})
})`
$DIR/core/services/relay/evm/mercury/v1/data_source_test.go: `.Run("when run execution fails, returns error", func(t *testing.T) {
t.Cleanup(func() {
runner.Err = nil
})
runner.Err = errors.New("run execution failed")
_, err := ds.Observe(ctx, repts, false)
assert.EqualError(t, err, "Observe failed while executing run: error executing run for spec ID 0: run execution failed")
})`
$DIR/core/services/relay/evm/mercury/v1/data_source_test.go: `.Cleanup(func() {
runner.Err = nil
})`
$DIR/core/services/relay/evm/mercury/v1/data_source_test.go: `.New("run execution failed")`
$DIR/core/services/relay/evm/mercury/v1/data_source_test.go: `.Observe(ctx, repts, false)`
$DIR/core/services/relay/evm/mercury/v1/data_source_test.go: `.Run("makes observation using pipeline, when all tasks succeed", func(t *testing.T) {
obs, err := ds.Observe(ctx, repts, false)
assert.NoError(t, err)
assert.Equal(t, big.NewInt(122), obs.BenchmarkPrice.Val)
assert.NoError(t, obs.BenchmarkPrice.Err)
assert.Equal(t, big.NewInt(121), obs.Bid.Val)
assert.NoError(t, obs.Bid.Err)
assert.Equal(t, big.NewInt(123), obs.Ask.Val)
assert.NoError(t, obs.Ask.Err)
assert.Equal(t, head.Number, obs.CurrentBlockNum.Val)
assert.NoError(t, obs.CurrentBlockNum.Err)
assert.Equal(t, fmt.Sprintf("%x", head.Hash), fmt.Sprintf("%x", obs.CurrentBlockHash.Val))
assert.NoError(t, obs.CurrentBlockHash.Err)
assert.Equal(t, uint64(head.Timestamp.Unix()), obs.CurrentBlockTimestamp.Val)
assert.NoError(t, obs.CurrentBlockTimestamp.Err)
assert.Zero(t, obs.MaxFinalizedBlockNumber.Val)
assert.EqualError(t, obs.MaxFinalizedBlockNumber.Err, "fetchMaxFinalizedBlockNum=false")
})`
$DIR/core/services/relay/evm/mercury/v1/data_source_test.go: `.Observe(ctx, repts, false)`
$DIR/core/services/relay/evm/mercury/v1/data_source_test.go: `.Run("makes observation using pipeline, with erroring tasks", func(t *testing.T) {
for i := range trrs {
trrs[i].Result.Error = fmt.Errorf("task error %d", i)
}
obs, err := ds.Observe(ctx, repts, false)
assert.NoError(t, err)
assert.Zero(t, obs.BenchmarkPrice.Val)
assert.EqualError(t, obs.BenchmarkPrice.Err, "task error 0")
assert.Zero(t, obs.Bid.Val)
assert.EqualError(t, obs.Bid.Err, "task error 1")
assert.Zero(t, obs.Ask.Val)
assert.EqualError(t, obs.Ask.Err, "task error 2")
assert.Equal(t, head.Number, obs.CurrentBlockNum.Val)
assert.NoError(t, obs.CurrentBlockNum.Err)
assert.Equal(t, fmt.Sprintf("%x", head.Hash), fmt.Sprintf("%x", obs.CurrentBlockHash.Val))
assert.NoError(t, obs.CurrentBlockHash.Err)
assert.Equal(t, uint64(head.Timestamp.Unix()), obs.CurrentBlockTimestamp.Val)
assert.NoError(t, obs.CurrentBlockTimestamp.Err)
assert.Zero(t, obs.MaxFinalizedBlockNumber.Val)
assert.EqualError(t, obs.MaxFinalizedBlockNumber.Err, "fetchMaxFinalizedBlockNum=false")
})`
$DIR/core/services/relay/evm/mercury/v1/data_source_test.go: `.Observe(ctx, repts, false)`
$DIR/core/services/relay/evm/mercury/v1/data_source_test.go: `.Run("makes partial observation using pipeline, if only some results have errored", func(t *testing.T) {
trrs[0].Result.Error = fmt.Errorf("task failed")
trrs[1].Result.Value = "33"
trrs[1].Result.Error = nil
trrs[2].Result.Value = nil
trrs[2].Result.Error = fmt.Errorf("task failed")
obs, err := ds.Observe(ctx, repts, false)
assert.NoError(t, err)
assert.Zero(t, obs.BenchmarkPrice.Val)
assert.EqualError(t, obs.BenchmarkPrice.Err, "task failed")
assert.Equal(t, big.NewInt(33), obs.Bid.Val)
assert.NoError(t, obs.Bid.Err)
assert.Zero(t, obs.Ask.Val)
assert.EqualError(t, obs.Ask.Err, "task failed")
})`
$DIR/core/services/relay/evm/mercury/v1/data_source_test.go: `.Observe(ctx, repts, false)`
$DIR/core/services/relay/evm/mercury/v1/data_source_test.go: `.Run("returns error if at least one result is unparseable", func(t *testing.T) {
trrs[0].Result.Error = fmt.Errorf("task failed")
trrs[1].Result.Value = "foo"
trrs[1].Result.Error = nil
trrs[2].Result.Value = "123456"
trrs[2].Result.Error = nil
_, err := ds.Observe(ctx, repts, false)
assert.EqualError(t, err, "Observe failed while parsing run results: failed to parse Bid: can't convert foo to decimal")
})`
$DIR/core/services/relay/evm/mercury/v1/data_source_test.go: `.Observe(ctx, repts, false)`
$DIR/core/services/relay/evm/mercury/v1/data_source_test.go: `.Run("saves run", func(t *testing.T) {
for i := range trrs {
trrs[i].Result.Value = "123"
trrs[i].Result.Error = nil
}
_, err := ds.Observe(ctx, repts, false)
assert.NoError(t, err)
assert.Equal(t, int64(42), saver.r.ID)
})`
$DIR/core/services/relay/evm/mercury/v1/data_source_test.go: `.Observe(ctx, repts, false)`
$DIR/core/services/relay/evm/mercury/v1/data_source_test.go: `.Run("when chain length is zero", func(t *testing.T) {
ht2 := htmocks.NewHeadTracker[*evmtypes.Head, common.Hash](t)
ht2.On("LatestChain").Return((*evmtypes.Head)(nil))
ds.mercuryChainReader = evm.NewMercuryChainReader(ht2)
obs, err := ds.Observe(ctx, repts, true)
assert.NoError(t, err)
assert.Len(t, obs.LatestBlocks, 0)
ht2.AssertExpectations(t)
})`
$DIR/core/services/relay/evm/mercury/v1/data_source_test.go: `.On("LatestChain")`
$DIR/core/services/relay/evm/mercury/v1/data_source_test.go: `.Return((*evmtypes.Head)(nil))`
$DIR/core/services/relay/evm/mercury/v1/data_source_test.go: `.NewMercuryChainReader(ht2)`
$DIR/core/services/relay/evm/mercury/v1/data_source_test.go: `.Observe(ctx, repts, true)`
$DIR/core/services/relay/evm/mercury/v1/data_source_test.go: `.AssertExpectations(t)`
$DIR/core/services/relay/evm/mercury/v1/data_source_test.go: `.Run("when chain is too short", func(t *testing.T) {
h4 := &evmtypes.Head{
Number: 4,
Parent: nil,
}
h5 := &evmtypes.Head{
Number: 5,
Parent: h4,
}
h6 := &evmtypes.Head{
Number: 6,
Parent: h5,
}
ht2 := htmocks.NewHeadTracker[*evmtypes.Head, common.Hash](t)
ht2.On("LatestChain").Return(h6)
ds.mercuryChainReader = evm.NewMercuryChainReader(ht2)
obs, err := ds.Observe(ctx, repts, true)
assert.NoError(t, err)
assert.Len(t, obs.LatestBlocks, 3)
assert.Equal(t, 6, int(obs.LatestBlocks[0].Num))
assert.Equal(t, 5, int(obs.LatestBlocks[1].Num))
assert.Equal(t, 4, int(obs.LatestBlocks[2].Num))
ht2.AssertExpectations(t)
})`
$DIR/core/services/relay/evm/mercury/v1/data_source_test.go: `.On("LatestChain")`
$DIR/core/services/relay/evm/mercury/v1/data_source_test.go: `.Return(h6)`
$DIR/core/services/relay/evm/mercury/v1/data_source_test.go: `.NewMercuryChainReader(ht2)`
$DIR/core/services/relay/evm/mercury/v1/data_source_test.go: `.Observe(ctx, repts, true)`
$DIR/core/services/relay/evm/mercury/v1/data_source_test.go: `.AssertExpectations(t)`
$DIR/core/services/relay/evm/mercury/v1/data_source_test.go: `.Run("when chain is long enough", func(t *testing.T) {
heads := make([]*evmtypes.Head, nBlocksObservation+5)
for i := range heads {
heads[i] = &evmtypes.Head{Number: int64(i)}
if i > 0 {
heads[i].Parent = heads[i-1]
}
}
ht2 := htmocks.NewHeadTracker[*evmtypes.Head, common.Hash](t)
ht2.On("LatestChain").Return(heads[len(heads)-1])
ds.mercuryChainReader = evm.NewMercuryChainReader(ht2)
obs, err := ds.Observe(ctx, repts, true)
assert.NoError(t, err)
assert.Len(t, obs.LatestBlocks, nBlocksObservation)
highestBlockNum := heads[len(heads)-1].Number
for i := range obs.LatestBlocks {
assert.Equal(t, int(highestBlockNum)-i, int(obs.LatestBlocks[i].Num))
}
ht2.AssertExpectations(t)
})`
$DIR/core/services/relay/evm/mercury/v1/data_source_test.go: `.On("LatestChain")`
$DIR/core/services/relay/evm/mercury/v1/data_source_test.go: `.Return(heads[len(heads)-1])`
$DIR/core/services/relay/evm/mercury/v1/data_source_test.go: `.NewMercuryChainReader(ht2)`
$DIR/core/services/relay/evm/mercury/v1/data_source_test.go: `.Observe(ctx, repts, true)`
$DIR/core/services/relay/evm/mercury/v1/data_source_test.go: `.AssertExpectations(t)`
$DIR/core/services/relay/evm/mercury/v1/data_source_test.go: `.Run("when chain reader returns an error", func(t *testing.T) {
ds.mercuryChainReader = &mockChainReader{
err: io.EOF,
obs: nil,
}
obs, err := ds.Observe(ctx, repts, true)
assert.Error(t, err)
assert.Equal(t, obs, v1.Observation{})
})`
$DIR/core/services/relay/evm/mercury/v1/data_source_test.go: `.Observe(ctx, repts, true)`
$DIR/core/services/relay/evm/mercury/v1/data_source_test.go: `.TestLogger(t)`
$DIR/core/services/relay/evm/mercury/v1/data_source_test.go: `.NewRandomPositiveInt64()`
$DIR/core/services/relay/evm/mercury/v1/data_source_test.go: `.NewHash()`
$DIR/core/services/relay/evm/mercury/v1/data_source_test.go: `.NewHash()`
$DIR/core/services/relay/evm/mercury/v1/data_source_test.go: `.Now()`
$DIR/core/services/relay/evm/mercury/v1/data_source_test.go: `.NewWeiI(testutils.NewRandomPositiveInt64())`
$DIR/core/services/relay/evm/mercury/v1/data_source_test.go: `.NewRandomPositiveInt64()`
$DIR/core/services/relay/evm/mercury/v1/data_source_test.go: `.NewHash()`
$DIR/core/services/relay/evm/mercury/v1/data_source_test.go: `.NewHash()`
$DIR/core/services/relay/evm/mercury/v1/data_source_test.go: `.NewHash()`
$DIR/core/services/relay/evm/mercury/v1/data_source_test.go: `.Run("returns head from headtracker if present", func(t *testing.T) {
headTracker := htmocks.NewHeadTracker[*evmtypes.Head, common.Hash](t)
headTracker.On("LatestChain").Return(&h, nil)
ds.mercuryChainReader = evm.NewMercuryChainReader(headTracker)
obs := v1.Observation{}
err := ds.setLatestBlocks(testutils.Context(t), &obs)
assert.NoError(t, err)
assert.Equal(t, h.Number, obs.CurrentBlockNum.Val)
assert.Equal(t, h.Hash.Bytes(), obs.CurrentBlockHash.Val)
assert.Equal(t, uint64(h.Timestamp.Unix()), obs.CurrentBlockTimestamp.Val)
assert.Len(t, obs.LatestBlocks, 1)
headTracker.AssertExpectations(t)
})`
$DIR/core/services/relay/evm/mercury/v1/data_source_test.go: `.On("LatestChain")`
$DIR/core/services/relay/evm/mercury/v1/data_source_test.go: `.Return(&h, nil)`
$DIR/core/services/relay/evm/mercury/v1/data_source_test.go: `.NewMercuryChainReader(headTracker)`
$DIR/core/services/relay/evm/mercury/v1/data_source_test.go: `.setLatestBlocks(testutils.Context(t), &obs)`
$DIR/core/services/relay/evm/mercury/v1/data_source_test.go: `.Context(t)`
$DIR/core/services/relay/evm/mercury/v1/data_source_test.go: `.AssertExpectations(t)`
$DIR/core/services/relay/evm/mercury/v1/data_source_test.go: `.On("LatestChain")`
$DIR/core/services/relay/evm/mercury/v1/data_source_test.go: `.Return((*evmtypes.Head)(nil))`
$DIR/core/services/relay/evm/mercury/v1/data_source_test.go: `.NewChainReader(headTracker)`
$DIR/core/services/relay/evm/mercury/v1/data_source_test.go: `.setLatestBlocks(testutils.Context(t), &obs)`
$DIR/core/services/relay/evm/mercury/v1/data_source_test.go: `.Context(t)`
$DIR/core/services/relay/evm/mercury/v1/data_source_test.go: `.AssertExpectations(t)`
$DIR/core/services/relay/evm/mercury/v1/reportcodec/report_codec_test.go: `t.Run("BuildReport errors on zero fields", func(t *testing.T) {
_, err := r.BuildReport(v1.ReportFields{})
require.Error(t, err)
assert.Contains(t, err.Error(), "benchmarkPrice may not be nil")
assert.Contains(t, err.Error(), "bid may not be nil")
assert.Contains(t, err.Error(), "ask may not be nil")
assert.Contains(t, err.Error(), "invalid length for currentBlockHash, expected: 32, got: 0")
})`
$DIR/core/services/relay/evm/mercury/v1/reportcodec/report_codec_test.go: `t.Run("BuildReport constructs a report from observations", func(t *testing.T) {
rf := newValidReportFields()
// only need to test happy path since validations are done in relaymercury
report, err := r.BuildReport(rf)
require.NoError(t, err)
reportElems := make(map[string]interface{})
err = ReportTypes.UnpackIntoMap(reportElems, report)
require.NoError(t, err)
assert.Equal(t, int(reportElems["observationsTimestamp"].(uint32)), 242)
assert.Equal(t, reportElems["benchmarkPrice"].(*big.Int).Int64(), int64(243))
assert.Equal(t, reportElems["bid"].(*big.Int).Int64(), int64(244))
assert.Equal(t, reportElems["ask"].(*big.Int).Int64(), int64(245))
assert.Equal(t, reportElems["currentBlockNum"].(uint64), uint64(248))
assert.Equal(t, common.Hash(reportElems["currentBlockHash"].([32]byte)), common.BytesToHash(hash))
assert.Equal(t, reportElems["currentBlockTimestamp"].(uint64), uint64(123))
assert.Equal(t, reportElems["validFromBlockNum"].(uint64), uint64(46))
assert.Equal(t, types.Report{0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0xf2, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0xf3, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0xf4, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0xf5, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0xf8, 0x55, 0x2c, 0x2c, 0xea, 0x3a, 0xb4, 0x3b, 0xae, 0x13, 0x7d, 0x89, 0xee, 0x61, 0x42, 0xa0, 0x1d, 0xb3, 0xae, 0x2b, 0x56, 0x78, 0xbc, 0x3c, 0x9b, 0xd5, 0xf5, 0x9, 0xf5, 0x37, 0xbe, 0xa5, 0x7b, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x2e, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x7b}, report)
max, err := r.MaxReportLength(4)
require.NoError(t, err)
assert.LessOrEqual(t, len(report), max)
t.Run("Decode decodes the report", func(t *testing.T) {
decoded, err := r.Decode(report)
require.NoError(t, err)
require.NotNil(t, decoded)
assert.Equal(t, uint32(242), decoded.ObservationsTimestamp)
assert.Equal(t, big.NewInt(243), decoded.BenchmarkPrice)
assert.Equal(t, big.NewInt(244), decoded.Bid)
assert.Equal(t, big.NewInt(245), decoded.Ask)
assert.Equal(t, uint64(248), decoded.CurrentBlockNum)
assert.Equal(t, [32]byte(common.BytesToHash(hash)), decoded.CurrentBlockHash)
assert.Equal(t, uint64(123), decoded.CurrentBlockTimestamp)
assert.Equal(t, uint64(46), decoded.ValidFromBlockNum)
})
})`
$DIR/core/services/relay/evm/mercury/v1/reportcodec/report_codec_test.go: `err = ReportTypes.UnpackIntoMap(reportElems, report)`
$DIR/core/services/relay/evm/mercury/v1/reportcodec/report_codec_test.go: `t.Run("Decode decodes the report", func(t *testing.T) {
decoded, err := r.Decode(report)
require.NoError(t, err)
require.NotNil(t, decoded)
assert.Equal(t, uint32(242), decoded.ObservationsTimestamp)
assert.Equal(t, big.NewInt(243), decoded.BenchmarkPrice)
assert.Equal(t, big.NewInt(244), decoded.Bid)
assert.Equal(t, big.NewInt(245), decoded.Ask)
assert.Equal(t, uint64(248), decoded.CurrentBlockNum)
assert.Equal(t, [32]byte(common.BytesToHash(hash)), decoded.CurrentBlockHash)
assert.Equal(t, uint64(123), decoded.CurrentBlockTimestamp)
assert.Equal(t, uint64(46), decoded.ValidFromBlockNum)
})`
$DIR/core/services/relay/evm/mercury/v1/reportcodec/report_codec_test.go: `longBad[i] = byte(i)`
$DIR/core/services/relay/evm/mercury/v1/reportcodec/report_codec_test.go: `_, err = r.Decode(longBad)`
$DIR/core/services/relay/evm/mercury/v1/reportcodec/report_codec_test.go: `t.Run("CurrentBlockNumFromReport extracts the current block number from a valid report", func(t *testing.T) {
report := buildSampleReport(validBn, 143, feedID)
bn, err := r.CurrentBlockNumFromReport(report)
require.NoError(t, err)
assert.Equal(t, validBn, bn)
})`
$DIR/core/services/relay/evm/mercury/v1/reportcodec/report_codec_test.go: `t.Run("ValidFromBlockNumFromReport extracts the valid from block number from a valid report", func(t *testing.T) {
report := buildSampleReport(42, 999, feedID)
bn, err := r.ValidFromBlockNumFromReport(report)
require.NoError(t, err)
assert.Equal(t, int64(999), bn)
})`
$DIR/core/services/relay/evm/mercury/v1/reportcodec/report_codec_test.go: `t.Run("BenchmarkPriceFromReport extracts the benchmark price from valid report", func(t *testing.T) {
report := buildSampleReport(42, 999, feedID)
bp, err := r.BenchmarkPriceFromReport(report)
require.NoError(t, err)
assert.Equal(t, big.NewInt(242), bp)
})`
$DIR/core/services/relay/evm/mercury/v1/reportcodec/report_codec_test.go: `.Run("BuildReport errors on zero fields", func(t *testing.T) {
_, err := r.BuildReport(v1.ReportFields{})
require.Error(t, err)
assert.Contains(t, err.Error(), "benchmarkPrice may not be nil")
assert.Contains(t, err.Error(), "bid may not be nil")
assert.Contains(t, err.Error(), "ask may not be nil")
assert.Contains(t, err.Error(), "invalid length for currentBlockHash, expected: 32, got: 0")
})`
$DIR/core/services/relay/evm/mercury/v1/reportcodec/report_codec_test.go: `.BuildReport(v1.ReportFields{})`
$DIR/core/services/relay/evm/mercury/v1/reportcodec/report_codec_test.go: `.Run("BuildReport constructs a report from observations", func(t *testing.T) {
rf := newValidReportFields()
// only need to test happy path since validations are done in relaymercury
report, err := r.BuildReport(rf)
require.NoError(t, err)
reportElems := make(map[string]interface{})
err = ReportTypes.UnpackIntoMap(reportElems, report)
require.NoError(t, err)
assert.Equal(t, int(reportElems["observationsTimestamp"].(uint32)), 242)
assert.Equal(t, reportElems["benchmarkPrice"].(*big.Int).Int64(), int64(243))
assert.Equal(t, reportElems["bid"].(*big.Int).Int64(), int64(244))
assert.Equal(t, reportElems["ask"].(*big.Int).Int64(), int64(245))
assert.Equal(t, reportElems["currentBlockNum"].(uint64), uint64(248))
assert.Equal(t, common.Hash(reportElems["currentBlockHash"].([32]byte)), common.BytesToHash(hash))
assert.Equal(t, reportElems["currentBlockTimestamp"].(uint64), uint64(123))
assert.Equal(t, reportElems["validFromBlockNum"].(uint64), uint64(46))
assert.Equal(t, types.Report{0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0xf2, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0xf3, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0xf4, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0xf5, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0xf8, 0x55, 0x2c, 0x2c, 0xea, 0x3a, 0xb4, 0x3b, 0xae, 0x13, 0x7d, 0x89, 0xee, 0x61, 0x42, 0xa0, 0x1d, 0xb3, 0xae, 0x2b, 0x56, 0x78, 0xbc, 0x3c, 0x9b, 0xd5, 0xf5, 0x9, 0xf5, 0x37, 0xbe, 0xa5, 0x7b, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x2e, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x7b}, report)
max, err := r.MaxReportLength(4)
require.NoError(t, err)
assert.LessOrEqual(t, len(report), max)
t.Run("Decode decodes the report", func(t *testing.T) {
decoded, err := r.Decode(report)
require.NoError(t, err)
require.NotNil(t, decoded)
assert.Equal(t, uint32(242), decoded.ObservationsTimestamp)
assert.Equal(t, big.NewInt(243), decoded.BenchmarkPrice)
assert.Equal(t, big.NewInt(244), decoded.Bid)
assert.Equal(t, big.NewInt(245), decoded.Ask)
assert.Equal(t, uint64(248), decoded.CurrentBlockNum)
assert.Equal(t, [32]byte(common.BytesToHash(hash)), decoded.CurrentBlockHash)
assert.Equal(t, uint64(123), decoded.CurrentBlockTimestamp)
assert.Equal(t, uint64(46), decoded.ValidFromBlockNum)
})
})`
$DIR/core/services/relay/evm/mercury/v1/reportcodec/report_codec_test.go: `.BuildReport(rf)`
$DIR/core/services/relay/evm/mercury/v1/reportcodec/report_codec_test.go: `.UnpackIntoMap(reportElems, report)`
$DIR/core/services/relay/evm/mercury/v1/reportcodec/report_codec_test.go: `.MaxReportLength(4)`
$DIR/core/services/relay/evm/mercury/v1/reportcodec/report_codec_test.go: `.Run("Decode decodes the report", func(t *testing.T) {
decoded, err := r.Decode(report)
require.NoError(t, err)
require.NotNil(t, decoded)
assert.Equal(t, uint32(242), decoded.ObservationsTimestamp)
assert.Equal(t, big.NewInt(243), decoded.BenchmarkPrice)
assert.Equal(t, big.NewInt(244), decoded.Bid)
assert.Equal(t, big.NewInt(245), decoded.Ask)
assert.Equal(t, uint64(248), decoded.CurrentBlockNum)
assert.Equal(t, [32]byte(common.BytesToHash(hash)), decoded.CurrentBlockHash)
assert.Equal(t, uint64(123), decoded.CurrentBlockTimestamp)
assert.Equal(t, uint64(46), decoded.ValidFromBlockNum)
})`
$DIR/core/services/relay/evm/mercury/v1/reportcodec/report_codec_test.go: `.Decode(report)`
$DIR/core/services/relay/evm/mercury/v1/reportcodec/report_codec_test.go: `.Decode([]byte{1, 2, 3})`
$DIR/core/services/relay/evm/mercury/v1/reportcodec/report_codec_test.go: `.Decode(longBad)`
$DIR/core/services/relay/evm/mercury/v1/reportcodec/report_codec_test.go: `.NewHash()`
$DIR/core/services/relay/evm/mercury/v1/reportcodec/report_codec_test.go: `.Run("CurrentBlockNumFromReport extracts the current block number from a valid report", func(t *testing.T) {
report := buildSampleReport(validBn, 143, feedID)
bn, err := r.CurrentBlockNumFromReport(report)
require.NoError(t, err)
assert.Equal(t, validBn, bn)
})`
$DIR/core/services/relay/evm/mercury/v1/reportcodec/report_codec_test.go: `.CurrentBlockNumFromReport(report)`
$DIR/core/services/relay/evm/mercury/v1/reportcodec/report_codec_test.go: `.CurrentBlockNumFromReport(report)`
$DIR/core/services/relay/evm/mercury/v1/reportcodec/report_codec_test.go: `.NewHash()`
$DIR/core/services/relay/evm/mercury/v1/reportcodec/report_codec_test.go: `.Run("ValidFromBlockNumFromReport extracts the valid from block number from a valid report", func(t *testing.T) {
report := buildSampleReport(42, 999, feedID)
bn, err := r.ValidFromBlockNumFromReport(report)
require.NoError(t, err)
assert.Equal(t, int64(999), bn)
})`
$DIR/core/services/relay/evm/mercury/v1/reportcodec/report_codec_test.go: `.ValidFromBlockNumFromReport(report)`
$DIR/core/services/relay/evm/mercury/v1/reportcodec/report_codec_test.go: `.ValidFromBlockNumFromReport(report)`
$DIR/core/services/relay/evm/mercury/v1/reportcodec/report_codec_test.go: `.NewHash()`
$DIR/core/services/relay/evm/mercury/v1/reportcodec/report_codec_test.go: `.Run("BenchmarkPriceFromReport extracts the benchmark price from valid report", func(t *testing.T) {
report := buildSampleReport(42, 999, feedID)
bp, err := r.BenchmarkPriceFromReport(report)
require.NoError(t, err)
assert.Equal(t, big.NewInt(242), bp)
})`
$DIR/core/services/relay/evm/mercury/v1/reportcodec/report_codec_test.go: `.BenchmarkPriceFromReport(report)`
$DIR/core/services/relay/evm/mercury/v1/reportcodec/report_codec_test.go: `.BenchmarkPriceFromReport([]byte{1, 2, 3})`
$DIR/core/services/relay/evm/mercury/v2/data_source_test.go: `ds.fetcher = fetcher`
$DIR/core/services/relay/evm/mercury/v2/data_source_test.go: `ds.saver = saver`
$DIR/core/services/relay/evm/mercury/v2/data_source_test.go: `ds.pipelineRunner = &mercurymocks.MockRunner{
Trrs: goodTrrs,
}`
$DIR/core/services/relay/evm/mercury/v2/data_source_test.go: `ds.spec = spec`
$DIR/core/services/relay/evm/mercury/v2/data_source_test.go: `t.Run("when fetchMaxFinalizedTimestamp=true", func(t *testing.T) {
t.Run("with latest report in database", func(t *testing.T) {
orm.report = buildSampleV2Report()
orm.err = nil
obs, err := ds.Observe(ctx, repts, true)
assert.NoError(t, err)
assert.NoError(t, obs.MaxFinalizedTimestamp.Err)
assert.Equal(t, int64(124), obs.MaxFinalizedTimestamp.Val)
})
t.Run("if querying latest report fails", func(t *testing.T) {
orm.report = nil
orm.err = errors.New("something exploded")
obs, err := ds.Observe(ctx, repts, true)
assert.NoError(t, err)
assert.EqualError(t, obs.MaxFinalizedTimestamp.Err, "something exploded")
assert.Zero(t, obs.MaxFinalizedTimestamp.Val)
})
t.Run("if codec fails to decode", func(t *testing.T) {
orm.report = []byte{1, 2, 3}
orm.err = nil
obs, err := ds.Observe(ctx, repts, true)
assert.NoError(t, err)
assert.EqualError(t, obs.MaxFinalizedTimestamp.Err, "failed to decode report: abi: cannot marshal in to go type: length insufficient 3 require 32")
assert.Zero(t, obs.MaxFinalizedTimestamp.Val)
})
orm.report = nil
orm.err = nil
t.Run("if LatestTimestamp returns error", func(t *testing.T) {
fetcher.tsErr = errors.New("some error")
obs, err := ds.Observe(ctx, repts, true)
assert.NoError(t, err)
assert.EqualError(t, obs.MaxFinalizedTimestamp.Err, "some error")
assert.Zero(t, obs.MaxFinalizedTimestamp.Val)
})
t.Run("if LatestTimestamp succeeds", func(t *testing.T) {
fetcher.tsErr = nil
fetcher.ts = 123
obs, err := ds.Observe(ctx, repts, true)
assert.NoError(t, err)
assert.Equal(t, int64(123), obs.MaxFinalizedTimestamp.Val)
assert.NoError(t, obs.MaxFinalizedTimestamp.Err)
})
t.Run("if LatestTimestamp succeeds but ts=0 (new feed)", func(t *testing.T) {
fetcher.tsErr = nil
fetcher.ts = 0
obs, err := ds.Observe(ctx, repts, true)
assert.NoError(t, err)
assert.NoError(t, obs.MaxFinalizedTimestamp.Err)
assert.Zero(t, obs.MaxFinalizedTimestamp.Val)
})
t.Run("when run execution succeeded", func(t *testing.T) {
t.Run("when feedId=linkFeedID=nativeFeedId", func(t *testing.T) {
t.Cleanup(func() {
ds.feedID, ds.linkFeedID, ds.nativeFeedID = feedId, linkFeedId, nativeFeedId
})
ds.feedID, ds.linkFeedID, ds.nativeFeedID = feedId, feedId, feedId
fetcher.ts = 123123
fetcher.tsErr = nil
obs, err := ds.Observe(ctx, repts, true)
assert.NoError(t, err)
assert.Equal(t, big.NewInt(122), obs.BenchmarkPrice.Val)
assert.NoError(t, obs.BenchmarkPrice.Err)
assert.Equal(t, int64(123123), obs.MaxFinalizedTimestamp.Val)
assert.NoError(t, obs.MaxFinalizedTimestamp.Err)
assert.Equal(t, big.NewInt(122), obs.LinkPrice.Val)
assert.NoError(t, obs.LinkPrice.Err)
assert.Equal(t, big.NewInt(122), obs.NativePrice.Val)
assert.NoError(t, obs.NativePrice.Err)
})
})
})`
$DIR/core/services/relay/evm/mercury/v2/data_source_test.go: `t.Run("with latest report in database", func(t *testing.T) {
orm.report = buildSampleV2Report()
orm.err = nil
obs, err := ds.Observe(ctx, repts, true)
assert.NoError(t, err)
assert.NoError(t, obs.MaxFinalizedTimestamp.Err)
assert.Equal(t, int64(124), obs.MaxFinalizedTimestamp.Val)
})`
$DIR/core/services/relay/evm/mercury/v2/data_source_test.go: `orm.report = buildSampleV2Report()`
$DIR/core/services/relay/evm/mercury/v2/data_source_test.go: `orm.err = nil`
$DIR/core/services/relay/evm/mercury/v2/data_source_test.go: `t.Run("if querying latest report fails", func(t *testing.T) {
orm.report = nil
orm.err = errors.New("something exploded")
obs, err := ds.Observe(ctx, repts, true)
assert.NoError(t, err)
assert.EqualError(t, obs.MaxFinalizedTimestamp.Err, "something exploded")
assert.Zero(t, obs.MaxFinalizedTimestamp.Val)
})`
$DIR/core/services/relay/evm/mercury/v2/data_source_test.go: `orm.report = nil`
$DIR/core/services/relay/evm/mercury/v2/data_source_test.go: `orm.err = errors.New("something exploded")`
$DIR/core/services/relay/evm/mercury/v2/data_source_test.go: `t.Run("if codec fails to decode", func(t *testing.T) {
orm.report = []byte{1, 2, 3}
orm.err = nil
obs, err := ds.Observe(ctx, repts, true)
assert.NoError(t, err)
assert.EqualError(t, obs.MaxFinalizedTimestamp.Err, "failed to decode report: abi: cannot marshal in to go type: length insufficient 3 require 32")
assert.Zero(t, obs.MaxFinalizedTimestamp.Val)
})`
$DIR/core/services/relay/evm/mercury/v2/data_source_test.go: `orm.report = []byte{1, 2, 3}`
$DIR/core/services/relay/evm/mercury/v2/data_source_test.go: `orm.err = nil`
$DIR/core/services/relay/evm/mercury/v2/data_source_test.go: `orm.report = nil`
$DIR/core/services/relay/evm/mercury/v2/data_source_test.go: `orm.err = nil`
$DIR/core/services/relay/evm/mercury/v2/data_source_test.go: `t.Run("if LatestTimestamp returns error", func(t *testing.T) {
fetcher.tsErr = errors.New("some error")
obs, err := ds.Observe(ctx, repts, true)
assert.NoError(t, err)
assert.EqualError(t, obs.MaxFinalizedTimestamp.Err, "some error")
assert.Zero(t, obs.MaxFinalizedTimestamp.Val)
})`
$DIR/core/services/relay/evm/mercury/v2/data_source_test.go: `fetcher.tsErr = errors.New("some error")`
$DIR/core/services/relay/evm/mercury/v2/data_source_test.go: `t.Run("if LatestTimestamp succeeds", func(t *testing.T) {
fetcher.tsErr = nil
fetcher.ts = 123
obs, err := ds.Observe(ctx, repts, true)
assert.NoError(t, err)
assert.Equal(t, int64(123), obs.MaxFinalizedTimestamp.Val)
assert.NoError(t, obs.MaxFinalizedTimestamp.Err)
})`
$DIR/core/services/relay/evm/mercury/v2/data_source_test.go: `fetcher.tsErr = nil`
$DIR/core/services/relay/evm/mercury/v2/data_source_test.go: `fetcher.ts = 123`
$DIR/core/services/relay/evm/mercury/v2/data_source_test.go: `t.Run("if LatestTimestamp succeeds but ts=0 (new feed)", func(t *testing.T) {
fetcher.tsErr = nil
fetcher.ts = 0
obs, err := ds.Observe(ctx, repts, true)
assert.NoError(t, err)
assert.NoError(t, obs.MaxFinalizedTimestamp.Err)
assert.Zero(t, obs.MaxFinalizedTimestamp.Val)
})`
$DIR/core/services/relay/evm/mercury/v2/data_source_test.go: `fetcher.tsErr = nil`
$DIR/core/services/relay/evm/mercury/v2/data_source_test.go: `fetcher.ts = 0`
$DIR/core/services/relay/evm/mercury/v2/data_source_test.go: `t.Run("when run execution succeeded", func(t *testing.T) {
t.Run("when feedId=linkFeedID=nativeFeedId", func(t *testing.T) {
t.Cleanup(func() {
ds.feedID, ds.linkFeedID, ds.nativeFeedID = feedId, linkFeedId, nativeFeedId
})
ds.feedID, ds.linkFeedID, ds.nativeFeedID = feedId, feedId, feedId
fetcher.ts = 123123
fetcher.tsErr = nil
obs, err := ds.Observe(ctx, repts, true)
assert.NoError(t, err)
assert.Equal(t, big.NewInt(122), obs.BenchmarkPrice.Val)
assert.NoError(t, obs.BenchmarkPrice.Err)
assert.Equal(t, int64(123123), obs.MaxFinalizedTimestamp.Val)
assert.NoError(t, obs.MaxFinalizedTimestamp.Err)
assert.Equal(t, big.NewInt(122), obs.LinkPrice.Val)
assert.NoError(t, obs.LinkPrice.Err)
assert.Equal(t, big.NewInt(122), obs.NativePrice.Val)
assert.NoError(t, obs.NativePrice.Err)
})
})`
$DIR/core/services/relay/evm/mercury/v2/data_source_test.go: `t.Run("when feedId=linkFeedID=nativeFeedId", func(t *testing.T) {
t.Cleanup(func() {
ds.feedID, ds.linkFeedID, ds.nativeFeedID = feedId, linkFeedId, nativeFeedId
})
ds.feedID, ds.linkFeedID, ds.nativeFeedID = feedId, feedId, feedId
fetcher.ts = 123123
fetcher.tsErr = nil
obs, err := ds.Observe(ctx, repts, true)
assert.NoError(t, err)
assert.Equal(t, big.NewInt(122), obs.BenchmarkPrice.Val)
assert.NoError(t, obs.BenchmarkPrice.Err)
assert.Equal(t, int64(123123), obs.MaxFinalizedTimestamp.Val)
assert.NoError(t, obs.MaxFinalizedTimestamp.Err)
assert.Equal(t, big.NewInt(122), obs.LinkPrice.Val)
assert.NoError(t, obs.LinkPrice.Err)
assert.Equal(t, big.NewInt(122), obs.NativePrice.Val)
assert.NoError(t, obs.NativePrice.Err)
})`
$DIR/core/services/relay/evm/mercury/v2/data_source_test.go: `t.Cleanup(func() {
ds.feedID, ds.linkFeedID, ds.nativeFeedID = feedId, linkFeedId, nativeFeedId
})`
$DIR/core/services/relay/evm/mercury/v2/data_source_test.go: `ds.feedID, ds.linkFeedID, ds.nativeFeedID = feedId, linkFeedId, nativeFeedId`
$DIR/core/services/relay/evm/mercury/v2/data_source_test.go: `ds.feedID, ds.linkFeedID, ds.nativeFeedID = feedId, feedId, feedId`
$DIR/core/services/relay/evm/mercury/v2/data_source_test.go: `fetcher.ts = 123123`
$DIR/core/services/relay/evm/mercury/v2/data_source_test.go: `fetcher.tsErr = nil`
$DIR/core/services/relay/evm/mercury/v2/data_source_test.go: `t.Run("when run execution fails, returns error", func(t *testing.T) {
t.Cleanup(func() {
ds.pipelineRunner = &mercurymocks.MockRunner{
Trrs: goodTrrs,
Err: nil,
}
})
ds.pipelineRunner = &mercurymocks.MockRunner{
Trrs: goodTrrs,
Err: errors.New("run execution failed"),
}
_, err := ds.Observe(ctx, repts, false)
assert.EqualError(t, err, "Observe failed while executing run: error executing run for spec ID 0: run execution failed")
})`
$DIR/core/services/relay/evm/mercury/v2/data_source_test.go: `t.Cleanup(func() {
ds.pipelineRunner = &mercurymocks.MockRunner{
Trrs: goodTrrs,
Err: nil,
}
})`
$DIR/core/services/relay/evm/mercury/v2/data_source_test.go: `ds.pipelineRunner = &mercurymocks.MockRunner{
Trrs: goodTrrs,
Err: nil,
}`
$DIR/core/services/relay/evm/mercury/v2/data_source_test.go: `ds.pipelineRunner = &mercurymocks.MockRunner{
Trrs: goodTrrs,
Err: errors.New("run execution failed"),
}`
$DIR/core/services/relay/evm/mercury/v2/data_source_test.go: `t.Run("when parsing run results fails, return error", func(t *testing.T) {
t.Cleanup(func() {
runner := &mercurymocks.MockRunner{
Trrs: goodTrrs,
Err: nil,
}
ds.pipelineRunner = runner
})
badTrrs := []pipeline.TaskRunResult{
{
// benchmark price
Result: pipeline.Result{Error: errors.New("some error with bp")},
Task: &mercurymocks.MockTask{},
},
}
ds.pipelineRunner = &mercurymocks.MockRunner{
Trrs: badTrrs,
Err: nil,
}
_, err := ds.Observe(ctx, repts, false)
assert.EqualError(t, err, "Observe failed while parsing run results: some error with bp")
})`
$DIR/core/services/relay/evm/mercury/v2/data_source_test.go: `t.Cleanup(func() {
runner := &mercurymocks.MockRunner{
Trrs: goodTrrs,
Err: nil,
}
ds.pipelineRunner = runner
})`
$DIR/core/services/relay/evm/mercury/v2/data_source_test.go: `ds.pipelineRunner = runner`
$DIR/core/services/relay/evm/mercury/v2/data_source_test.go: `ds.pipelineRunner = &mercurymocks.MockRunner{
Trrs: badTrrs,
Err: nil,
}`
$DIR/core/services/relay/evm/mercury/v2/data_source_test.go: `t.Run("when run execution succeeded", func(t *testing.T) {
t.Run("when feedId=linkFeedID=nativeFeedId", func(t *testing.T) {
t.Cleanup(func() {
ds.feedID, ds.linkFeedID, ds.nativeFeedID = feedId, linkFeedId, nativeFeedId
})
var feedId utils.FeedID = [32]byte{1}
ds.feedID, ds.linkFeedID, ds.nativeFeedID = feedId, feedId, feedId
obs, err := ds.Observe(ctx, repts, false)
assert.NoError(t, err)
assert.Equal(t, big.NewInt(122), obs.BenchmarkPrice.Val)
assert.NoError(t, obs.BenchmarkPrice.Err)
assert.Equal(t, int64(0), obs.MaxFinalizedTimestamp.Val)
assert.NoError(t, obs.MaxFinalizedTimestamp.Err)
assert.Equal(t, big.NewInt(122), obs.LinkPrice.Val)
assert.NoError(t, obs.LinkPrice.Err)
assert.Equal(t, big.NewInt(122), obs.NativePrice.Val)
assert.NoError(t, obs.NativePrice.Err)
})
t.Run("when fails to fetch linkPrice or nativePrice", func(t *testing.T) {
t.Cleanup(func() {
fetcher.linkPriceErr = nil
fetcher.nativePriceErr = nil
})
fetcher.linkPriceErr = errors.New("some error fetching link price")
fetcher.nativePriceErr = errors.New("some error fetching native price")
obs, err := ds.Observe(ctx, repts, false)
assert.NoError(t, err)
assert.Nil(t, obs.LinkPrice.Val)
assert.EqualError(t, obs.LinkPrice.Err, "some error fetching link price")
assert.Nil(t, obs.NativePrice.Val)
assert.EqualError(t, obs.NativePrice.Err, "some error fetching native price")
})
t.Run("when succeeds to fetch linkPrice or nativePrice but got nil (new feed)", func(t *testing.T) {
obs, err := ds.Observe(ctx, repts, false)
assert.NoError(t, err)
assert.Equal(t, obs.LinkPrice.Val, v2.MissingPrice)
assert.Nil(t, obs.LinkPrice.Err)
assert.Equal(t, obs.NativePrice.Val, v2.MissingPrice)
assert.Nil(t, obs.NativePrice.Err)
})
})`
$DIR/core/services/relay/evm/mercury/v2/data_source_test.go: `t.Run("when feedId=linkFeedID=nativeFeedId", func(t *testing.T) {
t.Cleanup(func() {
ds.feedID, ds.linkFeedID, ds.nativeFeedID = feedId, linkFeedId, nativeFeedId
})
var feedId utils.FeedID = [32]byte{1}
ds.feedID, ds.linkFeedID, ds.nativeFeedID = feedId, feedId, feedId
obs, err := ds.Observe(ctx, repts, false)
assert.NoError(t, err)
assert.Equal(t, big.NewInt(122), obs.BenchmarkPrice.Val)
assert.NoError(t, obs.BenchmarkPrice.Err)
assert.Equal(t, int64(0), obs.MaxFinalizedTimestamp.Val)
assert.NoError(t, obs.MaxFinalizedTimestamp.Err)
assert.Equal(t, big.NewInt(122), obs.LinkPrice.Val)
assert.NoError(t, obs.LinkPrice.Err)
assert.Equal(t, big.NewInt(122), obs.NativePrice.Val)
assert.NoError(t, obs.NativePrice.Err)
})`
$DIR/core/services/relay/evm/mercury/v2/data_source_test.go: `t.Cleanup(func() {
ds.feedID, ds.linkFeedID, ds.nativeFeedID = feedId, linkFeedId, nativeFeedId
})`
$DIR/core/services/relay/evm/mercury/v2/data_source_test.go: `ds.feedID, ds.linkFeedID, ds.nativeFeedID = feedId, linkFeedId, nativeFeedId`
$DIR/core/services/relay/evm/mercury/v2/data_source_test.go: `ds.feedID, ds.linkFeedID, ds.nativeFeedID = feedId, feedId, feedId`
$DIR/core/services/relay/evm/mercury/v2/data_source_test.go: `t.Run("when fails to fetch linkPrice or nativePrice", func(t *testing.T) {
t.Cleanup(func() {
fetcher.linkPriceErr = nil
fetcher.nativePriceErr = nil
})
fetcher.linkPriceErr = errors.New("some error fetching link price")
fetcher.nativePriceErr = errors.New("some error fetching native price")
obs, err := ds.Observe(ctx, repts, false)
assert.NoError(t, err)
assert.Nil(t, obs.LinkPrice.Val)
assert.EqualError(t, obs.LinkPrice.Err, "some error fetching link price")
assert.Nil(t, obs.NativePrice.Val)
assert.EqualError(t, obs.NativePrice.Err, "some error fetching native price")
})`
$DIR/core/services/relay/evm/mercury/v2/data_source_test.go: `t.Cleanup(func() {
fetcher.linkPriceErr = nil
fetcher.nativePriceErr = nil
})`
$DIR/core/services/relay/evm/mercury/v2/data_source_test.go: `fetcher.linkPriceErr = nil`
$DIR/core/services/relay/evm/mercury/v2/data_source_test.go: `fetcher.nativePriceErr = nil`
$DIR/core/services/relay/evm/mercury/v2/data_source_test.go: `fetcher.linkPriceErr = errors.New("some error fetching link price")`
$DIR/core/services/relay/evm/mercury/v2/data_source_test.go: `fetcher.nativePriceErr = errors.New("some error fetching native price")`
$DIR/core/services/relay/evm/mercury/v2/data_source_test.go: `t.Run("when succeeds to fetch linkPrice or nativePrice but got nil (new feed)", func(t *testing.T) {
obs, err := ds.Observe(ctx, repts, false)
assert.NoError(t, err)
assert.Equal(t, obs.LinkPrice.Val, v2.MissingPrice)
assert.Nil(t, obs.LinkPrice.Err)
assert.Equal(t, obs.NativePrice.Val, v2.MissingPrice)
assert.Nil(t, obs.NativePrice.Err)
})`
$DIR/core/services/relay/evm/mercury/v2/data_source_test.go: `.TestLogger(t)`
$DIR/core/services/relay/evm/mercury/v2/data_source_test.go: `.Context(t)`
$DIR/core/services/relay/evm/mercury/v2/data_source_test.go: `.Run("when fetchMaxFinalizedTimestamp=true", func(t *testing.T) {
t.Run("with latest report in database", func(t *testing.T) {
orm.report = buildSampleV2Report()
orm.err = nil
obs, err := ds.Observe(ctx, repts, true)
assert.NoError(t, err)
assert.NoError(t, obs.MaxFinalizedTimestamp.Err)
assert.Equal(t, int64(124), obs.MaxFinalizedTimestamp.Val)
})
t.Run("if querying latest report fails", func(t *testing.T) {
orm.report = nil
orm.err = errors.New("something exploded")
obs, err := ds.Observe(ctx, repts, true)
assert.NoError(t, err)
assert.EqualError(t, obs.MaxFinalizedTimestamp.Err, "something exploded")
assert.Zero(t, obs.MaxFinalizedTimestamp.Val)
})
t.Run("if codec fails to decode", func(t *testing.T) {
orm.report = []byte{1, 2, 3}
orm.err = nil
obs, err := ds.Observe(ctx, repts, true)
assert.NoError(t, err)
assert.EqualError(t, obs.MaxFinalizedTimestamp.Err, "failed to decode report: abi: cannot marshal in to go type: length insufficient 3 require 32")
assert.Zero(t, obs.MaxFinalizedTimestamp.Val)
})
orm.report = nil
orm.err = nil
t.Run("if LatestTimestamp returns error", func(t *testing.T) {
fetcher.tsErr = errors.New("some error")
obs, err := ds.Observe(ctx, repts, true)
assert.NoError(t, err)
assert.EqualError(t, obs.MaxFinalizedTimestamp.Err, "some error")
assert.Zero(t, obs.MaxFinalizedTimestamp.Val)
})
t.Run("if LatestTimestamp succeeds", func(t *testing.T) {
fetcher.tsErr = nil
fetcher.ts = 123
obs, err := ds.Observe(ctx, repts, true)
assert.NoError(t, err)
assert.Equal(t, int64(123), obs.MaxFinalizedTimestamp.Val)
assert.NoError(t, obs.MaxFinalizedTimestamp.Err)
})
t.Run("if LatestTimestamp succeeds but ts=0 (new feed)", func(t *testing.T) {
fetcher.tsErr = nil
fetcher.ts = 0
obs, err := ds.Observe(ctx, repts, true)
assert.NoError(t, err)
assert.NoError(t, obs.MaxFinalizedTimestamp.Err)
assert.Zero(t, obs.MaxFinalizedTimestamp.Val)
})
t.Run("when run execution succeeded", func(t *testing.T) {
t.Run("when feedId=linkFeedID=nativeFeedId", func(t *testing.T) {
t.Cleanup(func() {
ds.feedID, ds.linkFeedID, ds.nativeFeedID = feedId, linkFeedId, nativeFeedId
})
ds.feedID, ds.linkFeedID, ds.nativeFeedID = feedId, feedId, feedId
fetcher.ts = 123123
fetcher.tsErr = nil
obs, err := ds.Observe(ctx, repts, true)
assert.NoError(t, err)
assert.Equal(t, big.NewInt(122), obs.BenchmarkPrice.Val)
assert.NoError(t, obs.BenchmarkPrice.Err)
assert.Equal(t, int64(123123), obs.MaxFinalizedTimestamp.Val)
assert.NoError(t, obs.MaxFinalizedTimestamp.Err)
assert.Equal(t, big.NewInt(122), obs.LinkPrice.Val)
assert.NoError(t, obs.LinkPrice.Err)
assert.Equal(t, big.NewInt(122), obs.NativePrice.Val)
assert.NoError(t, obs.NativePrice.Err)
})
})
})`
$DIR/core/services/relay/evm/mercury/v2/data_source_test.go: `.Run("with latest report in database", func(t *testing.T) {
orm.report = buildSampleV2Report()
orm.err = nil
obs, err := ds.Observe(ctx, repts, true)
assert.NoError(t, err)
assert.NoError(t, obs.MaxFinalizedTimestamp.Err)
assert.Equal(t, int64(124), obs.MaxFinalizedTimestamp.Val)
})`
$DIR/core/services/relay/evm/mercury/v2/data_source_test.go: `.Observe(ctx, repts, true)`
$DIR/core/services/relay/evm/mercury/v2/data_source_test.go: `.Run("if querying latest report fails", func(t *testing.T) {
orm.report = nil
orm.err = errors.New("something exploded")
obs, err := ds.Observe(ctx, repts, true)
assert.NoError(t, err)
assert.EqualError(t, obs.MaxFinalizedTimestamp.Err, "something exploded")
assert.Zero(t, obs.MaxFinalizedTimestamp.Val)
})`
$DIR/core/services/relay/evm/mercury/v2/data_source_test.go: `.New("something exploded")`
$DIR/core/services/relay/evm/mercury/v2/data_source_test.go: `.Observe(ctx, repts, true)`
$DIR/core/services/relay/evm/mercury/v2/data_source_test.go: `.Run("if codec fails to decode", func(t *testing.T) {
orm.report = []byte{1, 2, 3}
orm.err = nil
obs, err := ds.Observe(ctx, repts, true)
assert.NoError(t, err)
assert.EqualError(t, obs.MaxFinalizedTimestamp.Err, "failed to decode report: abi: cannot marshal in to go type: length insufficient 3 require 32")
assert.Zero(t, obs.MaxFinalizedTimestamp.Val)
})`
$DIR/core/services/relay/evm/mercury/v2/data_source_test.go: `.Observe(ctx, repts, true)`
$DIR/core/services/relay/evm/mercury/v2/data_source_test.go: `.Run("if LatestTimestamp returns error", func(t *testing.T) {
fetcher.tsErr = errors.New("some error")
obs, err := ds.Observe(ctx, repts, true)
assert.NoError(t, err)
assert.EqualError(t, obs.MaxFinalizedTimestamp.Err, "some error")
assert.Zero(t, obs.MaxFinalizedTimestamp.Val)
})`
$DIR/core/services/relay/evm/mercury/v2/data_source_test.go: `.New("some error")`
$DIR/core/services/relay/evm/mercury/v2/data_source_test.go: `.Observe(ctx, repts, true)`
$DIR/core/services/relay/evm/mercury/v2/data_source_test.go: `.Run("if LatestTimestamp succeeds", func(t *testing.T) {
fetcher.tsErr = nil
fetcher.ts = 123
obs, err := ds.Observe(ctx, repts, true)
assert.NoError(t, err)
assert.Equal(t, int64(123), obs.MaxFinalizedTimestamp.Val)
assert.NoError(t, obs.MaxFinalizedTimestamp.Err)
})`
$DIR/core/services/relay/evm/mercury/v2/data_source_test.go: `.Observe(ctx, repts, true)`
$DIR/core/services/relay/evm/mercury/v2/data_source_test.go: `.Run("if LatestTimestamp succeeds but ts=0 (new feed)", func(t *testing.T) {
fetcher.tsErr = nil
fetcher.ts = 0
obs, err := ds.Observe(ctx, repts, true)
assert.NoError(t, err)
assert.NoError(t, obs.MaxFinalizedTimestamp.Err)
assert.Zero(t, obs.MaxFinalizedTimestamp.Val)
})`
$DIR/core/services/relay/evm/mercury/v2/data_source_test.go: `.Observe(ctx, repts, true)`
$DIR/core/services/relay/evm/mercury/v2/data_source_test.go: `.Run("when run execution succeeded", func(t *testing.T) {
t.Run("when feedId=linkFeedID=nativeFeedId", func(t *testing.T) {
t.Cleanup(func() {
ds.feedID, ds.linkFeedID, ds.nativeFeedID = feedId, linkFeedId, nativeFeedId
})
ds.feedID, ds.linkFeedID, ds.nativeFeedID = feedId, feedId, feedId
fetcher.ts = 123123
fetcher.tsErr = nil
obs, err := ds.Observe(ctx, repts, true)
assert.NoError(t, err)
assert.Equal(t, big.NewInt(122), obs.BenchmarkPrice.Val)
assert.NoError(t, obs.BenchmarkPrice.Err)
assert.Equal(t, int64(123123), obs.MaxFinalizedTimestamp.Val)
assert.NoError(t, obs.MaxFinalizedTimestamp.Err)
assert.Equal(t, big.NewInt(122), obs.LinkPrice.Val)
assert.NoError(t, obs.LinkPrice.Err)
assert.Equal(t, big.NewInt(122), obs.NativePrice.Val)
assert.NoError(t, obs.NativePrice.Err)
})
})`
$DIR/core/services/relay/evm/mercury/v2/data_source_test.go: `.Run("when feedId=linkFeedID=nativeFeedId", func(t *testing.T) {
t.Cleanup(func() {
ds.feedID, ds.linkFeedID, ds.nativeFeedID = feedId, linkFeedId, nativeFeedId
})
ds.feedID, ds.linkFeedID, ds.nativeFeedID = feedId, feedId, feedId
fetcher.ts = 123123
fetcher.tsErr = nil
obs, err := ds.Observe(ctx, repts, true)
assert.NoError(t, err)
assert.Equal(t, big.NewInt(122), obs.BenchmarkPrice.Val)
assert.NoError(t, obs.BenchmarkPrice.Err)
assert.Equal(t, int64(123123), obs.MaxFinalizedTimestamp.Val)
assert.NoError(t, obs.MaxFinalizedTimestamp.Err)
assert.Equal(t, big.NewInt(122), obs.LinkPrice.Val)
assert.NoError(t, obs.LinkPrice.Err)
assert.Equal(t, big.NewInt(122), obs.NativePrice.Val)
assert.NoError(t, obs.NativePrice.Err)
})`
$DIR/core/services/relay/evm/mercury/v2/data_source_test.go: `.Cleanup(func() {
ds.feedID, ds.linkFeedID, ds.nativeFeedID = feedId, linkFeedId, nativeFeedId
})`
$DIR/core/services/relay/evm/mercury/v2/data_source_test.go: `.Observe(ctx, repts, true)`
$DIR/core/services/relay/evm/mercury/v2/data_source_test.go: `.Run("when run execution fails, returns error", func(t *testing.T) {
t.Cleanup(func() {
ds.pipelineRunner = &mercurymocks.MockRunner{
Trrs: goodTrrs,
Err: nil,
}
})
ds.pipelineRunner = &mercurymocks.MockRunner{
Trrs: goodTrrs,
Err: errors.New("run execution failed"),
}
_, err := ds.Observe(ctx, repts, false)
assert.EqualError(t, err, "Observe failed while executing run: error executing run for spec ID 0: run execution failed")
})`
$DIR/core/services/relay/evm/mercury/v2/data_source_test.go: `.Cleanup(func() {
ds.pipelineRunner = &mercurymocks.MockRunner{
Trrs: goodTrrs,
Err: nil,
}
})`
$DIR/core/services/relay/evm/mercury/v2/data_source_test.go: `.New("run execution failed")`
$DIR/core/services/relay/evm/mercury/v2/data_source_test.go: `.Observe(ctx, repts, false)`
$DIR/core/services/relay/evm/mercury/v2/data_source_test.go: `.Run("when parsing run results fails, return error", func(t *testing.T) {
t.Cleanup(func() {
runner := &mercurymocks.MockRunner{
Trrs: goodTrrs,
Err: nil,
}
ds.pipelineRunner = runner
})
badTrrs := []pipeline.TaskRunResult{
{
// benchmark price
Result: pipeline.Result{Error: errors.New("some error with bp")},
Task: &mercurymocks.MockTask{},
},
}
ds.pipelineRunner = &mercurymocks.MockRunner{
Trrs: badTrrs,
Err: nil,
}
_, err := ds.Observe(ctx, repts, false)
assert.EqualError(t, err, "Observe failed while parsing run results: some error with bp")
})`
$DIR/core/services/relay/evm/mercury/v2/data_source_test.go: `.Cleanup(func() {
runner := &mercurymocks.MockRunner{
Trrs: goodTrrs,
Err: nil,
}
ds.pipelineRunner = runner
})`
$DIR/core/services/relay/evm/mercury/v2/data_source_test.go: `.New("some error with bp")`
$DIR/core/services/relay/evm/mercury/v2/data_source_test.go: `.Observe(ctx, repts, false)`
$DIR/core/services/relay/evm/mercury/v2/data_source_test.go: `.Run("when run execution succeeded", func(t *testing.T) {
t.Run("when feedId=linkFeedID=nativeFeedId", func(t *testing.T) {
t.Cleanup(func() {
ds.feedID, ds.linkFeedID, ds.nativeFeedID = feedId, linkFeedId, nativeFeedId
})
var feedId utils.FeedID = [32]byte{1}
ds.feedID, ds.linkFeedID, ds.nativeFeedID = feedId, feedId, feedId
obs, err := ds.Observe(ctx, repts, false)
assert.NoError(t, err)
assert.Equal(t, big.NewInt(122), obs.BenchmarkPrice.Val)
assert.NoError(t, obs.BenchmarkPrice.Err)
assert.Equal(t, int64(0), obs.MaxFinalizedTimestamp.Val)
assert.NoError(t, obs.MaxFinalizedTimestamp.Err)
assert.Equal(t, big.NewInt(122), obs.LinkPrice.Val)
assert.NoError(t, obs.LinkPrice.Err)
assert.Equal(t, big.NewInt(122), obs.NativePrice.Val)
assert.NoError(t, obs.NativePrice.Err)
})
t.Run("when fails to fetch linkPrice or nativePrice", func(t *testing.T) {
t.Cleanup(func() {
fetcher.linkPriceErr = nil
fetcher.nativePriceErr = nil
})
fetcher.linkPriceErr = errors.New("some error fetching link price")
fetcher.nativePriceErr = errors.New("some error fetching native price")
obs, err := ds.Observe(ctx, repts, false)
assert.NoError(t, err)
assert.Nil(t, obs.LinkPrice.Val)
assert.EqualError(t, obs.LinkPrice.Err, "some error fetching link price")
assert.Nil(t, obs.NativePrice.Val)
assert.EqualError(t, obs.NativePrice.Err, "some error fetching native price")
})
t.Run("when succeeds to fetch linkPrice or nativePrice but got nil (new feed)", func(t *testing.T) {
obs, err := ds.Observe(ctx, repts, false)
assert.NoError(t, err)
assert.Equal(t, obs.LinkPrice.Val, v2.MissingPrice)
assert.Nil(t, obs.LinkPrice.Err)
assert.Equal(t, obs.NativePrice.Val, v2.MissingPrice)
assert.Nil(t, obs.NativePrice.Err)
})
})`
$DIR/core/services/relay/evm/mercury/v2/data_source_test.go: `.Run("when feedId=linkFeedID=nativeFeedId", func(t *testing.T) {
t.Cleanup(func() {
ds.feedID, ds.linkFeedID, ds.nativeFeedID = feedId, linkFeedId, nativeFeedId
})
var feedId utils.FeedID = [32]byte{1}
ds.feedID, ds.linkFeedID, ds.nativeFeedID = feedId, feedId, feedId
obs, err := ds.Observe(ctx, repts, false)
assert.NoError(t, err)
assert.Equal(t, big.NewInt(122), obs.BenchmarkPrice.Val)
assert.NoError(t, obs.BenchmarkPrice.Err)
assert.Equal(t, int64(0), obs.MaxFinalizedTimestamp.Val)
assert.NoError(t, obs.MaxFinalizedTimestamp.Err)
assert.Equal(t, big.NewInt(122), obs.LinkPrice.Val)
assert.NoError(t, obs.LinkPrice.Err)
assert.Equal(t, big.NewInt(122), obs.NativePrice.Val)
assert.NoError(t, obs.NativePrice.Err)
})`
$DIR/core/services/relay/evm/mercury/v2/data_source_test.go: `.Cleanup(func() {
ds.feedID, ds.linkFeedID, ds.nativeFeedID = feedId, linkFeedId, nativeFeedId
})`
$DIR/core/services/relay/evm/mercury/v2/data_source_test.go: `.Observe(ctx, repts, false)`
$DIR/core/services/relay/evm/mercury/v2/data_source_test.go: `.Run("when fails to fetch linkPrice or nativePrice", func(t *testing.T) {
t.Cleanup(func() {
fetcher.linkPriceErr = nil
fetcher.nativePriceErr = nil
})
fetcher.linkPriceErr = errors.New("some error fetching link price")
fetcher.nativePriceErr = errors.New("some error fetching native price")
obs, err := ds.Observe(ctx, repts, false)
assert.NoError(t, err)
assert.Nil(t, obs.LinkPrice.Val)
assert.EqualError(t, obs.LinkPrice.Err, "some error fetching link price")
assert.Nil(t, obs.NativePrice.Val)
assert.EqualError(t, obs.NativePrice.Err, "some error fetching native price")
})`
$DIR/core/services/relay/evm/mercury/v2/data_source_test.go: `.Cleanup(func() {
fetcher.linkPriceErr = nil
fetcher.nativePriceErr = nil
})`
$DIR/core/services/relay/evm/mercury/v2/data_source_test.go: `.New("some error fetching link price")`
$DIR/core/services/relay/evm/mercury/v2/data_source_test.go: `.New("some error fetching native price")`
$DIR/core/services/relay/evm/mercury/v2/data_source_test.go: `.Observe(ctx, repts, false)`
$DIR/core/services/relay/evm/mercury/v2/data_source_test.go: `.Run("when succeeds to fetch linkPrice or nativePrice but got nil (new feed)", func(t *testing.T) {
obs, err := ds.Observe(ctx, repts, false)
assert.NoError(t, err)
assert.Equal(t, obs.LinkPrice.Val, v2.MissingPrice)
assert.Nil(t, obs.LinkPrice.Err)
assert.Equal(t, obs.NativePrice.Val, v2.MissingPrice)
assert.Nil(t, obs.NativePrice.Err)
})`
$DIR/core/services/relay/evm/mercury/v2/data_source_test.go: `.Observe(ctx, repts, false)`
$DIR/core/services/relay/evm/mercury/v2/reportcodec/report_codec_test.go: `t.Run("BuildReport errors on zero values", func(t *testing.T) {
_, err := r.BuildReport(v2.ReportFields{})
require.Error(t, err)
assert.Contains(t, err.Error(), "benchmarkPrice may not be nil")
assert.Contains(t, err.Error(), "linkFee may not be nil")
assert.Contains(t, err.Error(), "nativeFee may not be nil")
})`
$DIR/core/services/relay/evm/mercury/v2/reportcodec/report_codec_test.go: `t.Run("BuildReport constructs a report from observations", func(t *testing.T) {
rf := newValidReportFields()
// only need to test happy path since validations are done in relaymercury
report, err := r.BuildReport(rf)
require.NoError(t, err)
reportElems := make(map[string]interface{})
err = ReportTypes.UnpackIntoMap(reportElems, report)
require.NoError(t, err)
assert.Equal(t, int(reportElems["observationsTimestamp"].(uint32)), 242)
assert.Equal(t, reportElems["benchmarkPrice"].(*big.Int).Int64(), int64(243))
assert.Equal(t, reportElems["validFromTimestamp"].(uint32), uint32(123))
assert.Equal(t, reportElems["expiresAt"].(uint32), uint32(20))
assert.Equal(t, reportElems["linkFee"].(*big.Int).Int64(), int64(456))
assert.Equal(t, reportElems["nativeFee"].(*big.Int).Int64(), int64(457))
assert.Equal(t, types.Report{0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x7b, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0xf2, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x1, 0xc9, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x1, 0xc8, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x14, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0xf3}, report)
max, err := r.MaxReportLength(4)
require.NoError(t, err)
assert.LessOrEqual(t, len(report), max)
t.Run("Decode decodes the report", func(t *testing.T) {
decoded, err := r.Decode(report)
require.NoError(t, err)
require.NotNil(t, decoded)
assert.Equal(t, uint32(242), decoded.ObservationsTimestamp)
assert.Equal(t, big.NewInt(243), decoded.BenchmarkPrice)
assert.Equal(t, uint32(123), decoded.ValidFromTimestamp)
assert.Equal(t, uint32(20), decoded.ExpiresAt)
assert.Equal(t, big.NewInt(456), decoded.LinkFee)
assert.Equal(t, big.NewInt(457), decoded.NativeFee)
})
})`
$DIR/core/services/relay/evm/mercury/v2/reportcodec/report_codec_test.go: `err = ReportTypes.UnpackIntoMap(reportElems, report)`
$DIR/core/services/relay/evm/mercury/v2/reportcodec/report_codec_test.go: `t.Run("Decode decodes the report", func(t *testing.T) {
decoded, err := r.Decode(report)
require.NoError(t, err)
require.NotNil(t, decoded)
assert.Equal(t, uint32(242), decoded.ObservationsTimestamp)
assert.Equal(t, big.NewInt(243), decoded.BenchmarkPrice)
assert.Equal(t, uint32(123), decoded.ValidFromTimestamp)
assert.Equal(t, uint32(20), decoded.ExpiresAt)
assert.Equal(t, big.NewInt(456), decoded.LinkFee)
assert.Equal(t, big.NewInt(457), decoded.NativeFee)
})`
$DIR/core/services/relay/evm/mercury/v2/reportcodec/report_codec_test.go: `t.Run("errors on negative fee", func(t *testing.T) {
rf := newValidReportFields()
rf.LinkFee = big.NewInt(-1)
rf.NativeFee = big.NewInt(-1)
_, err := r.BuildReport(rf)
require.Error(t, err)
assert.Contains(t, err.Error(), "linkFee may not be negative (got: -1)")
assert.Contains(t, err.Error(), "nativeFee may not be negative (got: -1)")
})`
$DIR/core/services/relay/evm/mercury/v2/reportcodec/report_codec_test.go: `rf.LinkFee = big.NewInt(-1)`
$DIR/core/services/relay/evm/mercury/v2/reportcodec/report_codec_test.go: `rf.NativeFee = big.NewInt(-1)`
$DIR/core/services/relay/evm/mercury/v2/reportcodec/report_codec_test.go: `longBad[i] = byte(i)`
$DIR/core/services/relay/evm/mercury/v2/reportcodec/report_codec_test.go: `_, err = r.Decode(longBad)`
$DIR/core/services/relay/evm/mercury/v2/reportcodec/report_codec_test.go: `t.Run("ObservationTimestampFromReport extracts observation timestamp from a valid report", func(t *testing.T) {
report := buildSampleReport(123)
ts, err := r.ObservationTimestampFromReport(report)
require.NoError(t, err)
assert.Equal(t, ts, uint32(123))
})`
$DIR/core/services/relay/evm/mercury/v2/reportcodec/report_codec_test.go: `t.Run("BenchmarkPriceFromReport extracts the benchmark price from valid report", func(t *testing.T) {
report := buildSampleReport(123)
bp, err := r.BenchmarkPriceFromReport(report)
require.NoError(t, err)
assert.Equal(t, big.NewInt(242), bp)
})`
$DIR/core/services/relay/evm/mercury/v2/reportcodec/report_codec_test.go: `.Run("BuildReport errors on zero values", func(t *testing.T) {
_, err := r.BuildReport(v2.ReportFields{})
require.Error(t, err)
assert.Contains(t, err.Error(), "benchmarkPrice may not be nil")
assert.Contains(t, err.Error(), "linkFee may not be nil")
assert.Contains(t, err.Error(), "nativeFee may not be nil")
})`
$DIR/core/services/relay/evm/mercury/v2/reportcodec/report_codec_test.go: `.BuildReport(v2.ReportFields{})`
$DIR/core/services/relay/evm/mercury/v2/reportcodec/report_codec_test.go: `.Run("BuildReport constructs a report from observations", func(t *testing.T) {
rf := newValidReportFields()
// only need to test happy path since validations are done in relaymercury
report, err := r.BuildReport(rf)
require.NoError(t, err)
reportElems := make(map[string]interface{})
err = ReportTypes.UnpackIntoMap(reportElems, report)
require.NoError(t, err)
assert.Equal(t, int(reportElems["observationsTimestamp"].(uint32)), 242)
assert.Equal(t, reportElems["benchmarkPrice"].(*big.Int).Int64(), int64(243))
assert.Equal(t, reportElems["validFromTimestamp"].(uint32), uint32(123))
assert.Equal(t, reportElems["expiresAt"].(uint32), uint32(20))
assert.Equal(t, reportElems["linkFee"].(*big.Int).Int64(), int64(456))
assert.Equal(t, reportElems["nativeFee"].(*big.Int).Int64(), int64(457))
assert.Equal(t, types.Report{0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x7b, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0xf2, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x1, 0xc9, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x1, 0xc8, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x14, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0xf3}, report)
max, err := r.MaxReportLength(4)
require.NoError(t, err)
assert.LessOrEqual(t, len(report), max)
t.Run("Decode decodes the report", func(t *testing.T) {
decoded, err := r.Decode(report)
require.NoError(t, err)
require.NotNil(t, decoded)
assert.Equal(t, uint32(242), decoded.ObservationsTimestamp)
assert.Equal(t, big.NewInt(243), decoded.BenchmarkPrice)
assert.Equal(t, uint32(123), decoded.ValidFromTimestamp)
assert.Equal(t, uint32(20), decoded.ExpiresAt)
assert.Equal(t, big.NewInt(456), decoded.LinkFee)
assert.Equal(t, big.NewInt(457), decoded.NativeFee)
})
})`
$DIR/core/services/relay/evm/mercury/v2/reportcodec/report_codec_test.go: `.BuildReport(rf)`
$DIR/core/services/relay/evm/mercury/v2/reportcodec/report_codec_test.go: `.UnpackIntoMap(reportElems, report)`
$DIR/core/services/relay/evm/mercury/v2/reportcodec/report_codec_test.go: `.MaxReportLength(4)`
$DIR/core/services/relay/evm/mercury/v2/reportcodec/report_codec_test.go: `.Run("Decode decodes the report", func(t *testing.T) {
decoded, err := r.Decode(report)
require.NoError(t, err)
require.NotNil(t, decoded)
assert.Equal(t, uint32(242), decoded.ObservationsTimestamp)
assert.Equal(t, big.NewInt(243), decoded.BenchmarkPrice)
assert.Equal(t, uint32(123), decoded.ValidFromTimestamp)
assert.Equal(t, uint32(20), decoded.ExpiresAt)
assert.Equal(t, big.NewInt(456), decoded.LinkFee)
assert.Equal(t, big.NewInt(457), decoded.NativeFee)
})`
$DIR/core/services/relay/evm/mercury/v2/reportcodec/report_codec_test.go: `.Decode(report)`
$DIR/core/services/relay/evm/mercury/v2/reportcodec/report_codec_test.go: `.Run("errors on negative fee", func(t *testing.T) {
rf := newValidReportFields()
rf.LinkFee = big.NewInt(-1)
rf.NativeFee = big.NewInt(-1)
_, err := r.BuildReport(rf)
require.Error(t, err)
assert.Contains(t, err.Error(), "linkFee may not be negative (got: -1)")
assert.Contains(t, err.Error(), "nativeFee may not be negative (got: -1)")
})`
$DIR/core/services/relay/evm/mercury/v2/reportcodec/report_codec_test.go: `.NewInt(-1)`
$DIR/core/services/relay/evm/mercury/v2/reportcodec/report_codec_test.go: `.NewInt(-1)`
$DIR/core/services/relay/evm/mercury/v2/reportcodec/report_codec_test.go: `.BuildReport(rf)`
$DIR/core/services/relay/evm/mercury/v2/reportcodec/report_codec_test.go: `.Decode([]byte{1, 2, 3})`
$DIR/core/services/relay/evm/mercury/v2/reportcodec/report_codec_test.go: `.Decode(longBad)`
$DIR/core/services/relay/evm/mercury/v2/reportcodec/report_codec_test.go: `.Run("ObservationTimestampFromReport extracts observation timestamp from a valid report", func(t *testing.T) {
report := buildSampleReport(123)
ts, err := r.ObservationTimestampFromReport(report)
require.NoError(t, err)
assert.Equal(t, ts, uint32(123))
})`
$DIR/core/services/relay/evm/mercury/v2/reportcodec/report_codec_test.go: `.ObservationTimestampFromReport(report)`
$DIR/core/services/relay/evm/mercury/v2/reportcodec/report_codec_test.go: `.ObservationTimestampFromReport(report)`
$DIR/core/services/relay/evm/mercury/v2/reportcodec/report_codec_test.go: `.Run("BenchmarkPriceFromReport extracts the benchmark price from valid report", func(t *testing.T) {
report := buildSampleReport(123)
bp, err := r.BenchmarkPriceFromReport(report)
require.NoError(t, err)
assert.Equal(t, big.NewInt(242), bp)
})`
$DIR/core/services/relay/evm/mercury/v2/reportcodec/report_codec_test.go: `.BenchmarkPriceFromReport(report)`
$DIR/core/services/relay/evm/mercury/v2/reportcodec/report_codec_test.go: `.BenchmarkPriceFromReport([]byte{1, 2, 3})`
$DIR/core/services/relay/evm/mercury/v3/data_source_test.go: `ds.fetcher = fetcher`
$DIR/core/services/relay/evm/mercury/v3/data_source_test.go: `ds.saver = saver`
$DIR/core/services/relay/evm/mercury/v3/data_source_test.go: `ds.pipelineRunner = &mercurymocks.MockRunner{
Trrs: goodTrrs,
}`
$DIR/core/services/relay/evm/mercury/v3/data_source_test.go: `ds.spec = spec`
$DIR/core/services/relay/evm/mercury/v3/data_source_test.go: `t.Run("when fetchMaxFinalizedTimestamp=true", func(t *testing.T) {
t.Run("with latest report in database", func(t *testing.T) {
orm.report = buildSampleV3Report()
orm.err = nil
obs, err := ds.Observe(ctx, repts, true)
assert.NoError(t, err)
assert.NoError(t, obs.MaxFinalizedTimestamp.Err)
assert.Equal(t, int64(124), obs.MaxFinalizedTimestamp.Val)
})
t.Run("if querying latest report fails", func(t *testing.T) {
orm.report = nil
orm.err = errors.New("something exploded")
obs, err := ds.Observe(ctx, repts, true)
assert.NoError(t, err)
assert.EqualError(t, obs.MaxFinalizedTimestamp.Err, "something exploded")
assert.Zero(t, obs.MaxFinalizedTimestamp.Val)
})
t.Run("if codec fails to decode", func(t *testing.T) {
orm.report = []byte{1, 2, 3}
orm.err = nil
obs, err := ds.Observe(ctx, repts, true)
assert.NoError(t, err)
assert.EqualError(t, obs.MaxFinalizedTimestamp.Err, "failed to decode report: abi: cannot marshal in to go type: length insufficient 3 require 32")
assert.Zero(t, obs.MaxFinalizedTimestamp.Val)
})
orm.report = nil
orm.err = nil
t.Run("if LatestTimestamp returns error", func(t *testing.T) {
fetcher.tsErr = errors.New("some error")
obs, err := ds.Observe(ctx, repts, true)
assert.NoError(t, err)
assert.EqualError(t, obs.MaxFinalizedTimestamp.Err, "some error")
assert.Zero(t, obs.MaxFinalizedTimestamp.Val)
})
t.Run("if LatestTimestamp succeeds", func(t *testing.T) {
fetcher.tsErr = nil
fetcher.ts = 123
obs, err := ds.Observe(ctx, repts, true)
assert.NoError(t, err)
assert.Equal(t, int64(123), obs.MaxFinalizedTimestamp.Val)
assert.NoError(t, obs.MaxFinalizedTimestamp.Err)
})
t.Run("if LatestTimestamp succeeds but ts=0 (new feed)", func(t *testing.T) {
fetcher.tsErr = nil
fetcher.ts = 0
obs, err := ds.Observe(ctx, repts, true)
assert.NoError(t, err)
assert.NoError(t, obs.MaxFinalizedTimestamp.Err)
assert.Zero(t, obs.MaxFinalizedTimestamp.Val)
})
t.Run("when run execution succeeded", func(t *testing.T) {
t.Run("when feedId=linkFeedID=nativeFeedId", func(t *testing.T) {
t.Cleanup(func() {
ds.feedID, ds.linkFeedID, ds.nativeFeedID = feedId, linkFeedId, nativeFeedId
})
ds.feedID, ds.linkFeedID, ds.nativeFeedID = feedId, feedId, feedId
fetcher.ts = 123123
fetcher.tsErr = nil
obs, err := ds.Observe(ctx, repts, true)
assert.NoError(t, err)
assert.Equal(t, big.NewInt(122), obs.BenchmarkPrice.Val)
assert.NoError(t, obs.BenchmarkPrice.Err)
assert.Equal(t, big.NewInt(121), obs.Bid.Val)
assert.NoError(t, obs.Bid.Err)
assert.Equal(t, big.NewInt(123), obs.Ask.Val)
assert.NoError(t, obs.Ask.Err)
assert.Equal(t, int64(123123), obs.MaxFinalizedTimestamp.Val)
assert.NoError(t, obs.MaxFinalizedTimestamp.Err)
assert.Equal(t, big.NewInt(122), obs.LinkPrice.Val)
assert.NoError(t, obs.LinkPrice.Err)
assert.Equal(t, big.NewInt(122), obs.NativePrice.Val)
assert.NoError(t, obs.NativePrice.Err)
})
})
})`
$DIR/core/services/relay/evm/mercury/v3/data_source_test.go: `t.Run("with latest report in database", func(t *testing.T) {
orm.report = buildSampleV3Report()
orm.err = nil
obs, err := ds.Observe(ctx, repts, true)
assert.NoError(t, err)
assert.NoError(t, obs.MaxFinalizedTimestamp.Err)
assert.Equal(t, int64(124), obs.MaxFinalizedTimestamp.Val)
})`
$DIR/core/services/relay/evm/mercury/v3/data_source_test.go: `orm.report = buildSampleV3Report()`
$DIR/core/services/relay/evm/mercury/v3/data_source_test.go: `orm.err = nil`
$DIR/core/services/relay/evm/mercury/v3/data_source_test.go: `t.Run("if querying latest report fails", func(t *testing.T) {
orm.report = nil
orm.err = errors.New("something exploded")
obs, err := ds.Observe(ctx, repts, true)
assert.NoError(t, err)
assert.EqualError(t, obs.MaxFinalizedTimestamp.Err, "something exploded")
assert.Zero(t, obs.MaxFinalizedTimestamp.Val)
})`
$DIR/core/services/relay/evm/mercury/v3/data_source_test.go: `orm.report = nil`
$DIR/core/services/relay/evm/mercury/v3/data_source_test.go: `orm.err = errors.New("something exploded")`
$DIR/core/services/relay/evm/mercury/v3/data_source_test.go: `t.Run("if codec fails to decode", func(t *testing.T) {
orm.report = []byte{1, 2, 3}
orm.err = nil
obs, err := ds.Observe(ctx, repts, true)
assert.NoError(t, err)
assert.EqualError(t, obs.MaxFinalizedTimestamp.Err, "failed to decode report: abi: cannot marshal in to go type: length insufficient 3 require 32")
assert.Zero(t, obs.MaxFinalizedTimestamp.Val)
})`
$DIR/core/services/relay/evm/mercury/v3/data_source_test.go: `orm.report = []byte{1, 2, 3}`
$DIR/core/services/relay/evm/mercury/v3/data_source_test.go: `orm.err = nil`
$DIR/core/services/relay/evm/mercury/v3/data_source_test.go: `orm.report = nil`
$DIR/core/services/relay/evm/mercury/v3/data_source_test.go: `orm.err = nil`
$DIR/core/services/relay/evm/mercury/v3/data_source_test.go: `t.Run("if LatestTimestamp returns error", func(t *testing.T) {
fetcher.tsErr = errors.New("some error")
obs, err := ds.Observe(ctx, repts, true)
assert.NoError(t, err)
assert.EqualError(t, obs.MaxFinalizedTimestamp.Err, "some error")
assert.Zero(t, obs.MaxFinalizedTimestamp.Val)
})`
$DIR/core/services/relay/evm/mercury/v3/data_source_test.go: `fetcher.tsErr = errors.New("some error")`
$DIR/core/services/relay/evm/mercury/v3/data_source_test.go: `t.Run("if LatestTimestamp succeeds", func(t *testing.T) {
fetcher.tsErr = nil
fetcher.ts = 123
obs, err := ds.Observe(ctx, repts, true)
assert.NoError(t, err)
assert.Equal(t, int64(123), obs.MaxFinalizedTimestamp.Val)
assert.NoError(t, obs.MaxFinalizedTimestamp.Err)
})`
$DIR/core/services/relay/evm/mercury/v3/data_source_test.go: `fetcher.tsErr = nil`
$DIR/core/services/relay/evm/mercury/v3/data_source_test.go: `fetcher.ts = 123`
$DIR/core/services/relay/evm/mercury/v3/data_source_test.go: `t.Run("if LatestTimestamp succeeds but ts=0 (new feed)", func(t *testing.T) {
fetcher.tsErr = nil
fetcher.ts = 0
obs, err := ds.Observe(ctx, repts, true)
assert.NoError(t, err)
assert.NoError(t, obs.MaxFinalizedTimestamp.Err)
assert.Zero(t, obs.MaxFinalizedTimestamp.Val)
})`
$DIR/core/services/relay/evm/mercury/v3/data_source_test.go: `fetcher.tsErr = nil`
$DIR/core/services/relay/evm/mercury/v3/data_source_test.go: `fetcher.ts = 0`
$DIR/core/services/relay/evm/mercury/v3/data_source_test.go: `t.Run("when run execution succeeded", func(t *testing.T) {
t.Run("when feedId=linkFeedID=nativeFeedId", func(t *testing.T) {
t.Cleanup(func() {
ds.feedID, ds.linkFeedID, ds.nativeFeedID = feedId, linkFeedId, nativeFeedId
})
ds.feedID, ds.linkFeedID, ds.nativeFeedID = feedId, feedId, feedId
fetcher.ts = 123123
fetcher.tsErr = nil
obs, err := ds.Observe(ctx, repts, true)
assert.NoError(t, err)
assert.Equal(t, big.NewInt(122), obs.BenchmarkPrice.Val)
assert.NoError(t, obs.BenchmarkPrice.Err)
assert.Equal(t, big.NewInt(121), obs.Bid.Val)
assert.NoError(t, obs.Bid.Err)
assert.Equal(t, big.NewInt(123), obs.Ask.Val)
assert.NoError(t, obs.Ask.Err)
assert.Equal(t, int64(123123), obs.MaxFinalizedTimestamp.Val)
assert.NoError(t, obs.MaxFinalizedTimestamp.Err)
assert.Equal(t, big.NewInt(122), obs.LinkPrice.Val)
assert.NoError(t, obs.LinkPrice.Err)
assert.Equal(t, big.NewInt(122), obs.NativePrice.Val)
assert.NoError(t, obs.NativePrice.Err)
})
})`
$DIR/core/services/relay/evm/mercury/v3/data_source_test.go: `t.Run("when feedId=linkFeedID=nativeFeedId", func(t *testing.T) {
t.Cleanup(func() {
ds.feedID, ds.linkFeedID, ds.nativeFeedID = feedId, linkFeedId, nativeFeedId
})
ds.feedID, ds.linkFeedID, ds.nativeFeedID = feedId, feedId, feedId
fetcher.ts = 123123
fetcher.tsErr = nil
obs, err := ds.Observe(ctx, repts, true)
assert.NoError(t, err)
assert.Equal(t, big.NewInt(122), obs.BenchmarkPrice.Val)
assert.NoError(t, obs.BenchmarkPrice.Err)
assert.Equal(t, big.NewInt(121), obs.Bid.Val)
assert.NoError(t, obs.Bid.Err)
assert.Equal(t, big.NewInt(123), obs.Ask.Val)
assert.NoError(t, obs.Ask.Err)
assert.Equal(t, int64(123123), obs.MaxFinalizedTimestamp.Val)
assert.NoError(t, obs.MaxFinalizedTimestamp.Err)
assert.Equal(t, big.NewInt(122), obs.LinkPrice.Val)
assert.NoError(t, obs.LinkPrice.Err)
assert.Equal(t, big.NewInt(122), obs.NativePrice.Val)
assert.NoError(t, obs.NativePrice.Err)
})`
$DIR/core/services/relay/evm/mercury/v3/data_source_test.go: `t.Cleanup(func() {
ds.feedID, ds.linkFeedID, ds.nativeFeedID = feedId, linkFeedId, nativeFeedId
})`
$DIR/core/services/relay/evm/mercury/v3/data_source_test.go: `ds.feedID, ds.linkFeedID, ds.nativeFeedID = feedId, linkFeedId, nativeFeedId`
$DIR/core/services/relay/evm/mercury/v3/data_source_test.go: `ds.feedID, ds.linkFeedID, ds.nativeFeedID = feedId, feedId, feedId`
$DIR/core/services/relay/evm/mercury/v3/data_source_test.go: `fetcher.ts = 123123`
$DIR/core/services/relay/evm/mercury/v3/data_source_test.go: `fetcher.tsErr = nil`
$DIR/core/services/relay/evm/mercury/v3/data_source_test.go: `t.Run("when run execution fails, returns error", func(t *testing.T) {
t.Cleanup(func() {
ds.pipelineRunner = &mercurymocks.MockRunner{
Trrs: goodTrrs,
Err: nil,
}
})
ds.pipelineRunner = &mercurymocks.MockRunner{
Trrs: goodTrrs,
Err: errors.New("run execution failed"),
}
_, err := ds.Observe(ctx, repts, false)
assert.EqualError(t, err, "Observe failed while executing run: error executing run for spec ID 0: run execution failed")
})`
$DIR/core/services/relay/evm/mercury/v3/data_source_test.go: `t.Cleanup(func() {
ds.pipelineRunner = &mercurymocks.MockRunner{
Trrs: goodTrrs,
Err: nil,
}
})`
$DIR/core/services/relay/evm/mercury/v3/data_source_test.go: `ds.pipelineRunner = &mercurymocks.MockRunner{
Trrs: goodTrrs,
Err: nil,
}`
$DIR/core/services/relay/evm/mercury/v3/data_source_test.go: `ds.pipelineRunner = &mercurymocks.MockRunner{
Trrs: goodTrrs,
Err: errors.New("run execution failed"),
}`
$DIR/core/services/relay/evm/mercury/v3/data_source_test.go: `t.Run("when parsing run results fails, return error", func(t *testing.T) {
t.Cleanup(func() {
runner := &mercurymocks.MockRunner{
Trrs: goodTrrs,
Err: nil,
}
ds.pipelineRunner = runner
})
badTrrs := []pipeline.TaskRunResult{
{
// benchmark price
Result: pipeline.Result{Value: "122.345"},
Task: &mercurymocks.MockTask{},
},
{
// bid
Result: pipeline.Result{Value: "121.993"},
Task: &mercurymocks.MockTask{},
},
{
// ask
Result: pipeline.Result{Error: errors.New("some error with ask")},
Task: &mercurymocks.MockTask{},
},
}
ds.pipelineRunner = &mercurymocks.MockRunner{
Trrs: badTrrs,
Err: nil,
}
_, err := ds.Observe(ctx, repts, false)
assert.EqualError(t, err, "Observe failed while parsing run results: some error with ask")
})`
$DIR/core/services/relay/evm/mercury/v3/data_source_test.go: `t.Cleanup(func() {
runner := &mercurymocks.MockRunner{
Trrs: goodTrrs,
Err: nil,
}
ds.pipelineRunner = runner
})`
$DIR/core/services/relay/evm/mercury/v3/data_source_test.go: `ds.pipelineRunner = runner`
$DIR/core/services/relay/evm/mercury/v3/data_source_test.go: `ds.pipelineRunner = &mercurymocks.MockRunner{
Trrs: badTrrs,
Err: nil,
}`
$DIR/core/services/relay/evm/mercury/v3/data_source_test.go: `t.Run("when run execution succeeded", func(t *testing.T) {
t.Run("when feedId=linkFeedID=nativeFeedId", func(t *testing.T) {
t.Cleanup(func() {
ds.feedID, ds.linkFeedID, ds.nativeFeedID = feedId, linkFeedId, nativeFeedId
})
var feedId utils.FeedID = [32]byte{1}
ds.feedID, ds.linkFeedID, ds.nativeFeedID = feedId, feedId, feedId
obs, err := ds.Observe(ctx, repts, false)
assert.NoError(t, err)
assert.Equal(t, big.NewInt(122), obs.BenchmarkPrice.Val)
assert.NoError(t, obs.BenchmarkPrice.Err)
assert.Equal(t, big.NewInt(121), obs.Bid.Val)
assert.NoError(t, obs.Bid.Err)
assert.Equal(t, big.NewInt(123), obs.Ask.Val)
assert.NoError(t, obs.Ask.Err)
assert.Equal(t, int64(0), obs.MaxFinalizedTimestamp.Val)
assert.NoError(t, obs.MaxFinalizedTimestamp.Err)
assert.Equal(t, big.NewInt(122), obs.LinkPrice.Val)
assert.NoError(t, obs.LinkPrice.Err)
assert.Equal(t, big.NewInt(122), obs.NativePrice.Val)
assert.NoError(t, obs.NativePrice.Err)
})
t.Run("when fails to fetch linkPrice or nativePrice", func(t *testing.T) {
t.Cleanup(func() {
fetcher.linkPriceErr = nil
fetcher.nativePriceErr = nil
})
fetcher.linkPriceErr = errors.New("some error fetching link price")
fetcher.nativePriceErr = errors.New("some error fetching native price")
obs, err := ds.Observe(ctx, repts, false)
assert.NoError(t, err)
assert.Nil(t, obs.LinkPrice.Val)
assert.EqualError(t, obs.LinkPrice.Err, "some error fetching link price")
assert.Nil(t, obs.NativePrice.Val)
assert.EqualError(t, obs.NativePrice.Err, "some error fetching native price")
})
t.Run("when succeeds to fetch linkPrice or nativePrice but got nil (new feed)", func(t *testing.T) {
obs, err := ds.Observe(ctx, repts, false)
assert.NoError(t, err)
assert.Equal(t, obs.LinkPrice.Val, relaymercuryv3.MissingPrice)
assert.Nil(t, obs.LinkPrice.Err)
assert.Equal(t, obs.NativePrice.Val, relaymercuryv3.MissingPrice)
assert.Nil(t, obs.NativePrice.Err)
})
})`
$DIR/core/services/relay/evm/mercury/v3/data_source_test.go: `t.Run("when feedId=linkFeedID=nativeFeedId", func(t *testing.T) {
t.Cleanup(func() {
ds.feedID, ds.linkFeedID, ds.nativeFeedID = feedId, linkFeedId, nativeFeedId
})
var feedId utils.FeedID = [32]byte{1}
ds.feedID, ds.linkFeedID, ds.nativeFeedID = feedId, feedId, feedId
obs, err := ds.Observe(ctx, repts, false)
assert.NoError(t, err)
assert.Equal(t, big.NewInt(122), obs.BenchmarkPrice.Val)
assert.NoError(t, obs.BenchmarkPrice.Err)
assert.Equal(t, big.NewInt(121), obs.Bid.Val)
assert.NoError(t, obs.Bid.Err)
assert.Equal(t, big.NewInt(123), obs.Ask.Val)
assert.NoError(t, obs.Ask.Err)
assert.Equal(t, int64(0), obs.MaxFinalizedTimestamp.Val)
assert.NoError(t, obs.MaxFinalizedTimestamp.Err)
assert.Equal(t, big.NewInt(122), obs.LinkPrice.Val)
assert.NoError(t, obs.LinkPrice.Err)
assert.Equal(t, big.NewInt(122), obs.NativePrice.Val)
assert.NoError(t, obs.NativePrice.Err)
})`
$DIR/core/services/relay/evm/mercury/v3/data_source_test.go: `t.Cleanup(func() {
ds.feedID, ds.linkFeedID, ds.nativeFeedID = feedId, linkFeedId, nativeFeedId
})`
$DIR/core/services/relay/evm/mercury/v3/data_source_test.go: `ds.feedID, ds.linkFeedID, ds.nativeFeedID = feedId, linkFeedId, nativeFeedId`
$DIR/core/services/relay/evm/mercury/v3/data_source_test.go: `ds.feedID, ds.linkFeedID, ds.nativeFeedID = feedId, feedId, feedId`
$DIR/core/services/relay/evm/mercury/v3/data_source_test.go: `t.Run("when fails to fetch linkPrice or nativePrice", func(t *testing.T) {
t.Cleanup(func() {
fetcher.linkPriceErr = nil
fetcher.nativePriceErr = nil
})
fetcher.linkPriceErr = errors.New("some error fetching link price")
fetcher.nativePriceErr = errors.New("some error fetching native price")
obs, err := ds.Observe(ctx, repts, false)
assert.NoError(t, err)
assert.Nil(t, obs.LinkPrice.Val)
assert.EqualError(t, obs.LinkPrice.Err, "some error fetching link price")
assert.Nil(t, obs.NativePrice.Val)
assert.EqualError(t, obs.NativePrice.Err, "some error fetching native price")
})`
$DIR/core/services/relay/evm/mercury/v3/data_source_test.go: `t.Cleanup(func() {
fetcher.linkPriceErr = nil
fetcher.nativePriceErr = nil
})`
$DIR/core/services/relay/evm/mercury/v3/data_source_test.go: `fetcher.linkPriceErr = nil`
$DIR/core/services/relay/evm/mercury/v3/data_source_test.go: `fetcher.nativePriceErr = nil`
$DIR/core/services/relay/evm/mercury/v3/data_source_test.go: `fetcher.linkPriceErr = errors.New("some error fetching link price")`
$DIR/core/services/relay/evm/mercury/v3/data_source_test.go: `fetcher.nativePriceErr = errors.New("some error fetching native price")`
$DIR/core/services/relay/evm/mercury/v3/data_source_test.go: `t.Run("when succeeds to fetch linkPrice or nativePrice but got nil (new feed)", func(t *testing.T) {
obs, err := ds.Observe(ctx, repts, false)
assert.NoError(t, err)
assert.Equal(t, obs.LinkPrice.Val, relaymercuryv3.MissingPrice)
assert.Nil(t, obs.LinkPrice.Err)
assert.Equal(t, obs.NativePrice.Val, relaymercuryv3.MissingPrice)
assert.Nil(t, obs.NativePrice.Err)
})`
$DIR/core/services/relay/evm/mercury/v3/data_source_test.go: `.TestLogger(t)`
$DIR/core/services/relay/evm/mercury/v3/data_source_test.go: `.Context(t)`
$DIR/core/services/relay/evm/mercury/v3/data_source_test.go: `.Run("when fetchMaxFinalizedTimestamp=true", func(t *testing.T) {
t.Run("with latest report in database", func(t *testing.T) {
orm.report = buildSampleV3Report()
orm.err = nil
obs, err := ds.Observe(ctx, repts, true)
assert.NoError(t, err)
assert.NoError(t, obs.MaxFinalizedTimestamp.Err)
assert.Equal(t, int64(124), obs.MaxFinalizedTimestamp.Val)
})
t.Run("if querying latest report fails", func(t *testing.T) {
orm.report = nil
orm.err = errors.New("something exploded")
obs, err := ds.Observe(ctx, repts, true)
assert.NoError(t, err)
assert.EqualError(t, obs.MaxFinalizedTimestamp.Err, "something exploded")
assert.Zero(t, obs.MaxFinalizedTimestamp.Val)
})
t.Run("if codec fails to decode", func(t *testing.T) {
orm.report = []byte{1, 2, 3}
orm.err = nil
obs, err := ds.Observe(ctx, repts, true)
assert.NoError(t, err)
assert.EqualError(t, obs.MaxFinalizedTimestamp.Err, "failed to decode report: abi: cannot marshal in to go type: length insufficient 3 require 32")
assert.Zero(t, obs.MaxFinalizedTimestamp.Val)
})
orm.report = nil
orm.err = nil
t.Run("if LatestTimestamp returns error", func(t *testing.T) {
fetcher.tsErr = errors.New("some error")
obs, err := ds.Observe(ctx, repts, true)
assert.NoError(t, err)
assert.EqualError(t, obs.MaxFinalizedTimestamp.Err, "some error")
assert.Zero(t, obs.MaxFinalizedTimestamp.Val)
})
t.Run("if LatestTimestamp succeeds", func(t *testing.T) {
fetcher.tsErr = nil
fetcher.ts = 123
obs, err := ds.Observe(ctx, repts, true)
assert.NoError(t, err)
assert.Equal(t, int64(123), obs.MaxFinalizedTimestamp.Val)
assert.NoError(t, obs.MaxFinalizedTimestamp.Err)
})
t.Run("if LatestTimestamp succeeds but ts=0 (new feed)", func(t *testing.T) {
fetcher.tsErr = nil
fetcher.ts = 0
obs, err := ds.Observe(ctx, repts, true)
assert.NoError(t, err)
assert.NoError(t, obs.MaxFinalizedTimestamp.Err)
assert.Zero(t, obs.MaxFinalizedTimestamp.Val)
})
t.Run("when run execution succeeded", func(t *testing.T) {
t.Run("when feedId=linkFeedID=nativeFeedId", func(t *testing.T) {
t.Cleanup(func() {
ds.feedID, ds.linkFeedID, ds.nativeFeedID = feedId, linkFeedId, nativeFeedId
})
ds.feedID, ds.linkFeedID, ds.nativeFeedID = feedId, feedId, feedId
fetcher.ts = 123123
fetcher.tsErr = nil
obs, err := ds.Observe(ctx, repts, true)
assert.NoError(t, err)
assert.Equal(t, big.NewInt(122), obs.BenchmarkPrice.Val)
assert.NoError(t, obs.BenchmarkPrice.Err)
assert.Equal(t, big.NewInt(121), obs.Bid.Val)
assert.NoError(t, obs.Bid.Err)
assert.Equal(t, big.NewInt(123), obs.Ask.Val)
assert.NoError(t, obs.Ask.Err)
assert.Equal(t, int64(123123), obs.MaxFinalizedTimestamp.Val)
assert.NoError(t, obs.MaxFinalizedTimestamp.Err)
assert.Equal(t, big.NewInt(122), obs.LinkPrice.Val)
assert.NoError(t, obs.LinkPrice.Err)
assert.Equal(t, big.NewInt(122), obs.NativePrice.Val)
assert.NoError(t, obs.NativePrice.Err)
})
})
})`
$DIR/core/services/relay/evm/mercury/v3/data_source_test.go: `.Run("with latest report in database", func(t *testing.T) {
orm.report = buildSampleV3Report()
orm.err = nil
obs, err := ds.Observe(ctx, repts, true)
assert.NoError(t, err)
assert.NoError(t, obs.MaxFinalizedTimestamp.Err)
assert.Equal(t, int64(124), obs.MaxFinalizedTimestamp.Val)
})`
$DIR/core/services/relay/evm/mercury/v3/data_source_test.go: `.Observe(ctx, repts, true)`
$DIR/core/services/relay/evm/mercury/v3/data_source_test.go: `.Run("if querying latest report fails", func(t *testing.T) {
orm.report = nil
orm.err = errors.New("something exploded")
obs, err := ds.Observe(ctx, repts, true)
assert.NoError(t, err)
assert.EqualError(t, obs.MaxFinalizedTimestamp.Err, "something exploded")
assert.Zero(t, obs.MaxFinalizedTimestamp.Val)
})`
$DIR/core/services/relay/evm/mercury/v3/data_source_test.go: `.New("something exploded")`
$DIR/core/services/relay/evm/mercury/v3/data_source_test.go: `.Observe(ctx, repts, true)`
$DIR/core/services/relay/evm/mercury/v3/data_source_test.go: `.Run("if codec fails to decode", func(t *testing.T) {
orm.report = []byte{1, 2, 3}
orm.err = nil
obs, err := ds.Observe(ctx, repts, true)
assert.NoError(t, err)
assert.EqualError(t, obs.MaxFinalizedTimestamp.Err, "failed to decode report: abi: cannot marshal in to go type: length insufficient 3 require 32")
assert.Zero(t, obs.MaxFinalizedTimestamp.Val)
})`
$DIR/core/services/relay/evm/mercury/v3/data_source_test.go: `.Observe(ctx, repts, true)`
$DIR/core/services/relay/evm/mercury/v3/data_source_test.go: `.Run("if LatestTimestamp returns error", func(t *testing.T) {
fetcher.tsErr = errors.New("some error")
obs, err := ds.Observe(ctx, repts, true)
assert.NoError(t, err)
assert.EqualError(t, obs.MaxFinalizedTimestamp.Err, "some error")
assert.Zero(t, obs.MaxFinalizedTimestamp.Val)
})`
$DIR/core/services/relay/evm/mercury/v3/data_source_test.go: `.New("some error")`
$DIR/core/services/relay/evm/mercury/v3/data_source_test.go: `.Observe(ctx, repts, true)`
$DIR/core/services/relay/evm/mercury/v3/data_source_test.go: `.Run("if LatestTimestamp succeeds", func(t *testing.T) {
fetcher.tsErr = nil
fetcher.ts = 123
obs, err := ds.Observe(ctx, repts, true)
assert.NoError(t, err)
assert.Equal(t, int64(123), obs.MaxFinalizedTimestamp.Val)
assert.NoError(t, obs.MaxFinalizedTimestamp.Err)
})`
$DIR/core/services/relay/evm/mercury/v3/data_source_test.go: `.Observe(ctx, repts, true)`
$DIR/core/services/relay/evm/mercury/v3/data_source_test.go: `.Run("if LatestTimestamp succeeds but ts=0 (new feed)", func(t *testing.T) {
fetcher.tsErr = nil
fetcher.ts = 0
obs, err := ds.Observe(ctx, repts, true)
assert.NoError(t, err)
assert.NoError(t, obs.MaxFinalizedTimestamp.Err)
assert.Zero(t, obs.MaxFinalizedTimestamp.Val)
})`
$DIR/core/services/relay/evm/mercury/v3/data_source_test.go: `.Observe(ctx, repts, true)`
$DIR/core/services/relay/evm/mercury/v3/data_source_test.go: `.Run("when run execution succeeded", func(t *testing.T) {
t.Run("when feedId=linkFeedID=nativeFeedId", func(t *testing.T) {
t.Cleanup(func() {
ds.feedID, ds.linkFeedID, ds.nativeFeedID = feedId, linkFeedId, nativeFeedId
})
ds.feedID, ds.linkFeedID, ds.nativeFeedID = feedId, feedId, feedId
fetcher.ts = 123123
fetcher.tsErr = nil
obs, err := ds.Observe(ctx, repts, true)
assert.NoError(t, err)
assert.Equal(t, big.NewInt(122), obs.BenchmarkPrice.Val)
assert.NoError(t, obs.BenchmarkPrice.Err)
assert.Equal(t, big.NewInt(121), obs.Bid.Val)
assert.NoError(t, obs.Bid.Err)
assert.Equal(t, big.NewInt(123), obs.Ask.Val)
assert.NoError(t, obs.Ask.Err)
assert.Equal(t, int64(123123), obs.MaxFinalizedTimestamp.Val)
assert.NoError(t, obs.MaxFinalizedTimestamp.Err)
assert.Equal(t, big.NewInt(122), obs.LinkPrice.Val)
assert.NoError(t, obs.LinkPrice.Err)
assert.Equal(t, big.NewInt(122), obs.NativePrice.Val)
assert.NoError(t, obs.NativePrice.Err)
})
})`
$DIR/core/services/relay/evm/mercury/v3/data_source_test.go: `.Run("when feedId=linkFeedID=nativeFeedId", func(t *testing.T) {
t.Cleanup(func() {
ds.feedID, ds.linkFeedID, ds.nativeFeedID = feedId, linkFeedId, nativeFeedId
})
ds.feedID, ds.linkFeedID, ds.nativeFeedID = feedId, feedId, feedId
fetcher.ts = 123123
fetcher.tsErr = nil
obs, err := ds.Observe(ctx, repts, true)
assert.NoError(t, err)
assert.Equal(t, big.NewInt(122), obs.BenchmarkPrice.Val)
assert.NoError(t, obs.BenchmarkPrice.Err)
assert.Equal(t, big.NewInt(121), obs.Bid.Val)
assert.NoError(t, obs.Bid.Err)
assert.Equal(t, big.NewInt(123), obs.Ask.Val)
assert.NoError(t, obs.Ask.Err)
assert.Equal(t, int64(123123), obs.MaxFinalizedTimestamp.Val)
assert.NoError(t, obs.MaxFinalizedTimestamp.Err)
assert.Equal(t, big.NewInt(122), obs.LinkPrice.Val)
assert.NoError(t, obs.LinkPrice.Err)
assert.Equal(t, big.NewInt(122), obs.NativePrice.Val)
assert.NoError(t, obs.NativePrice.Err)
})`
$DIR/core/services/relay/evm/mercury/v3/data_source_test.go: `.Cleanup(func() {
ds.feedID, ds.linkFeedID, ds.nativeFeedID = feedId, linkFeedId, nativeFeedId
})`
$DIR/core/services/relay/evm/mercury/v3/data_source_test.go: `.Observe(ctx, repts, true)`
$DIR/core/services/relay/evm/mercury/v3/data_source_test.go: `.Run("when run execution fails, returns error", func(t *testing.T) {
t.Cleanup(func() {
ds.pipelineRunner = &mercurymocks.MockRunner{
Trrs: goodTrrs,
Err: nil,
}
})
ds.pipelineRunner = &mercurymocks.MockRunner{
Trrs: goodTrrs,
Err: errors.New("run execution failed"),
}
_, err := ds.Observe(ctx, repts, false)
assert.EqualError(t, err, "Observe failed while executing run: error executing run for spec ID 0: run execution failed")
})`
$DIR/core/services/relay/evm/mercury/v3/data_source_test.go: `.Cleanup(func() {
ds.pipelineRunner = &mercurymocks.MockRunner{
Trrs: goodTrrs,
Err: nil,
}
})`
$DIR/core/services/relay/evm/mercury/v3/data_source_test.go: `.New("run execution failed")`
$DIR/core/services/relay/evm/mercury/v3/data_source_test.go: `.Observe(ctx, repts, false)`
$DIR/core/services/relay/evm/mercury/v3/data_source_test.go: `.Run("when parsing run results fails, return error", func(t *testing.T) {
t.Cleanup(func() {
runner := &mercurymocks.MockRunner{
Trrs: goodTrrs,
Err: nil,
}
ds.pipelineRunner = runner
})
badTrrs := []pipeline.TaskRunResult{
{
// benchmark price
Result: pipeline.Result{Value: "122.345"},
Task: &mercurymocks.MockTask{},
},
{
// bid
Result: pipeline.Result{Value: "121.993"},
Task: &mercurymocks.MockTask{},
},
{
// ask
Result: pipeline.Result{Error: errors.New("some error with ask")},
Task: &mercurymocks.MockTask{},
},
}
ds.pipelineRunner = &mercurymocks.MockRunner{
Trrs: badTrrs,
Err: nil,
}
_, err := ds.Observe(ctx, repts, false)
assert.EqualError(t, err, "Observe failed while parsing run results: some error with ask")
})`
$DIR/core/services/relay/evm/mercury/v3/data_source_test.go: `.Cleanup(func() {
runner := &mercurymocks.MockRunner{
Trrs: goodTrrs,
Err: nil,
}
ds.pipelineRunner = runner
})`
$DIR/core/services/relay/evm/mercury/v3/data_source_test.go: `.New("some error with ask")`
$DIR/core/services/relay/evm/mercury/v3/data_source_test.go: `.Observe(ctx, repts, false)`
$DIR/core/services/relay/evm/mercury/v3/data_source_test.go: `.Run("when run execution succeeded", func(t *testing.T) {
t.Run("when feedId=linkFeedID=nativeFeedId", func(t *testing.T) {
t.Cleanup(func() {
ds.feedID, ds.linkFeedID, ds.nativeFeedID = feedId, linkFeedId, nativeFeedId
})
var feedId utils.FeedID = [32]byte{1}
ds.feedID, ds.linkFeedID, ds.nativeFeedID = feedId, feedId, feedId
obs, err := ds.Observe(ctx, repts, false)
assert.NoError(t, err)
assert.Equal(t, big.NewInt(122), obs.BenchmarkPrice.Val)
assert.NoError(t, obs.BenchmarkPrice.Err)
assert.Equal(t, big.NewInt(121), obs.Bid.Val)
assert.NoError(t, obs.Bid.Err)
assert.Equal(t, big.NewInt(123), obs.Ask.Val)
assert.NoError(t, obs.Ask.Err)
assert.Equal(t, int64(0), obs.MaxFinalizedTimestamp.Val)
assert.NoError(t, obs.MaxFinalizedTimestamp.Err)
assert.Equal(t, big.NewInt(122), obs.LinkPrice.Val)
assert.NoError(t, obs.LinkPrice.Err)
assert.Equal(t, big.NewInt(122), obs.NativePrice.Val)
assert.NoError(t, obs.NativePrice.Err)
})
t.Run("when fails to fetch linkPrice or nativePrice", func(t *testing.T) {
t.Cleanup(func() {
fetcher.linkPriceErr = nil
fetcher.nativePriceErr = nil
})
fetcher.linkPriceErr = errors.New("some error fetching link price")
fetcher.nativePriceErr = errors.New("some error fetching native price")
obs, err := ds.Observe(ctx, repts, false)
assert.NoError(t, err)
assert.Nil(t, obs.LinkPrice.Val)
assert.EqualError(t, obs.LinkPrice.Err, "some error fetching link price")
assert.Nil(t, obs.NativePrice.Val)
assert.EqualError(t, obs.NativePrice.Err, "some error fetching native price")
})
t.Run("when succeeds to fetch linkPrice or nativePrice but got nil (new feed)", func(t *testing.T) {
obs, err := ds.Observe(ctx, repts, false)
assert.NoError(t, err)
assert.Equal(t, obs.LinkPrice.Val, relaymercuryv3.MissingPrice)
assert.Nil(t, obs.LinkPrice.Err)
assert.Equal(t, obs.NativePrice.Val, relaymercuryv3.MissingPrice)
assert.Nil(t, obs.NativePrice.Err)
})
})`
$DIR/core/services/relay/evm/mercury/v3/data_source_test.go: `.Run("when feedId=linkFeedID=nativeFeedId", func(t *testing.T) {
t.Cleanup(func() {
ds.feedID, ds.linkFeedID, ds.nativeFeedID = feedId, linkFeedId, nativeFeedId
})
var feedId utils.FeedID = [32]byte{1}
ds.feedID, ds.linkFeedID, ds.nativeFeedID = feedId, feedId, feedId
obs, err := ds.Observe(ctx, repts, false)
assert.NoError(t, err)
assert.Equal(t, big.NewInt(122), obs.BenchmarkPrice.Val)
assert.NoError(t, obs.BenchmarkPrice.Err)
assert.Equal(t, big.NewInt(121), obs.Bid.Val)
assert.NoError(t, obs.Bid.Err)
assert.Equal(t, big.NewInt(123), obs.Ask.Val)
assert.NoError(t, obs.Ask.Err)
assert.Equal(t, int64(0), obs.MaxFinalizedTimestamp.Val)
assert.NoError(t, obs.MaxFinalizedTimestamp.Err)
assert.Equal(t, big.NewInt(122), obs.LinkPrice.Val)
assert.NoError(t, obs.LinkPrice.Err)
assert.Equal(t, big.NewInt(122), obs.NativePrice.Val)
assert.NoError(t, obs.NativePrice.Err)
})`
$DIR/core/services/relay/evm/mercury/v3/data_source_test.go: `.Cleanup(func() {
ds.feedID, ds.linkFeedID, ds.nativeFeedID = feedId, linkFeedId, nativeFeedId
})`
$DIR/core/services/relay/evm/mercury/v3/data_source_test.go: `.Observe(ctx, repts, false)`
$DIR/core/services/relay/evm/mercury/v3/data_source_test.go: `.Run("when fails to fetch linkPrice or nativePrice", func(t *testing.T) {
t.Cleanup(func() {
fetcher.linkPriceErr = nil
fetcher.nativePriceErr = nil
})
fetcher.linkPriceErr = errors.New("some error fetching link price")
fetcher.nativePriceErr = errors.New("some error fetching native price")
obs, err := ds.Observe(ctx, repts, false)
assert.NoError(t, err)
assert.Nil(t, obs.LinkPrice.Val)
assert.EqualError(t, obs.LinkPrice.Err, "some error fetching link price")
assert.Nil(t, obs.NativePrice.Val)
assert.EqualError(t, obs.NativePrice.Err, "some error fetching native price")
})`
$DIR/core/services/relay/evm/mercury/v3/data_source_test.go: `.Cleanup(func() {
fetcher.linkPriceErr = nil
fetcher.nativePriceErr = nil
})`
$DIR/core/services/relay/evm/mercury/v3/data_source_test.go: `.New("some error fetching link price")`
$DIR/core/services/relay/evm/mercury/v3/data_source_test.go: `.New("some error fetching native price")`
$DIR/core/services/relay/evm/mercury/v3/data_source_test.go: `.Observe(ctx, repts, false)`
$DIR/core/services/relay/evm/mercury/v3/data_source_test.go: `.Run("when succeeds to fetch linkPrice or nativePrice but got nil (new feed)", func(t *testing.T) {
obs, err := ds.Observe(ctx, repts, false)
assert.NoError(t, err)
assert.Equal(t, obs.LinkPrice.Val, relaymercuryv3.MissingPrice)
assert.Nil(t, obs.LinkPrice.Err)
assert.Equal(t, obs.NativePrice.Val, relaymercuryv3.MissingPrice)
assert.Nil(t, obs.NativePrice.Err)
})`
$DIR/core/services/relay/evm/mercury/v3/data_source_test.go: `.Observe(ctx, repts, false)`
$DIR/core/services/relay/evm/mercury/v3/reportcodec/report_codec_test.go: `t.Run("BuildReport errors on zero values", func(t *testing.T) {
_, err := r.BuildReport(v3.ReportFields{})
require.Error(t, err)
assert.Contains(t, err.Error(), "benchmarkPrice may not be nil")
assert.Contains(t, err.Error(), "linkFee may not be nil")
assert.Contains(t, err.Error(), "nativeFee may not be nil")
})`
$DIR/core/services/relay/evm/mercury/v3/reportcodec/report_codec_test.go: `t.Run("BuildReport constructs a report from observations", func(t *testing.T) {
rf := newValidReportFields()
// only need to test happy path since validations are done in relaymercury
report, err := r.BuildReport(rf)
require.NoError(t, err)
reportElems := make(map[string]interface{})
err = ReportTypes.UnpackIntoMap(reportElems, report)
require.NoError(t, err)
assert.Equal(t, int(reportElems["observationsTimestamp"].(uint32)), 242)
assert.Equal(t, reportElems["benchmarkPrice"].(*big.Int).Int64(), int64(243))
assert.Equal(t, reportElems["bid"].(*big.Int).Int64(), int64(244))
assert.Equal(t, reportElems["ask"].(*big.Int).Int64(), int64(245))
assert.Equal(t, reportElems["validFromTimestamp"].(uint32), uint32(123))
assert.Equal(t, reportElems["expiresAt"].(uint32), uint32(20))
assert.Equal(t, reportElems["linkFee"].(*big.Int).Int64(), int64(456))
assert.Equal(t, reportElems["nativeFee"].(*big.Int).Int64(), int64(457))
assert.Equal(t, types.Report{0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x7b, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0xf2, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x1, 0xc9, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x1, 0xc8, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x14, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0xf3, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0xf4, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0xf5}, report)
max, err := r.MaxReportLength(4)
require.NoError(t, err)
assert.LessOrEqual(t, len(report), max)
t.Run("Decode decodes the report", func(t *testing.T) {
decoded, err := r.Decode(report)
require.NoError(t, err)
require.NotNil(t, decoded)
assert.Equal(t, uint32(242), decoded.ObservationsTimestamp)
assert.Equal(t, big.NewInt(243), decoded.BenchmarkPrice)
assert.Equal(t, big.NewInt(244), decoded.Bid)
assert.Equal(t, big.NewInt(245), decoded.Ask)
assert.Equal(t, uint32(123), decoded.ValidFromTimestamp)
assert.Equal(t, uint32(20), decoded.ExpiresAt)
assert.Equal(t, big.NewInt(456), decoded.LinkFee)
assert.Equal(t, big.NewInt(457), decoded.NativeFee)
})
})`
$DIR/core/services/relay/evm/mercury/v3/reportcodec/report_codec_test.go: `err = ReportTypes.UnpackIntoMap(reportElems, report)`
$DIR/core/services/relay/evm/mercury/v3/reportcodec/report_codec_test.go: `t.Run("Decode decodes the report", func(t *testing.T) {
decoded, err := r.Decode(report)
require.NoError(t, err)
require.NotNil(t, decoded)
assert.Equal(t, uint32(242), decoded.ObservationsTimestamp)
assert.Equal(t, big.NewInt(243), decoded.BenchmarkPrice)
assert.Equal(t, big.NewInt(244), decoded.Bid)
assert.Equal(t, big.NewInt(245), decoded.Ask)
assert.Equal(t, uint32(123), decoded.ValidFromTimestamp)
assert.Equal(t, uint32(20), decoded.ExpiresAt)
assert.Equal(t, big.NewInt(456), decoded.LinkFee)
assert.Equal(t, big.NewInt(457), decoded.NativeFee)
})`
$DIR/core/services/relay/evm/mercury/v3/reportcodec/report_codec_test.go: `t.Run("errors on negative fee", func(t *testing.T) {
rf := newValidReportFields()
rf.LinkFee = big.NewInt(-1)
rf.NativeFee = big.NewInt(-1)
_, err := r.BuildReport(rf)
require.Error(t, err)
assert.Contains(t, err.Error(), "linkFee may not be negative (got: -1)")
assert.Contains(t, err.Error(), "nativeFee may not be negative (got: -1)")
})`
$DIR/core/services/relay/evm/mercury/v3/reportcodec/report_codec_test.go: `rf.LinkFee = big.NewInt(-1)`
$DIR/core/services/relay/evm/mercury/v3/reportcodec/report_codec_test.go: `rf.NativeFee = big.NewInt(-1)`
$DIR/core/services/relay/evm/mercury/v3/reportcodec/report_codec_test.go: `longBad[i] = byte(i)`
$DIR/core/services/relay/evm/mercury/v3/reportcodec/report_codec_test.go: `_, err = r.Decode(longBad)`
$DIR/core/services/relay/evm/mercury/v3/reportcodec/report_codec_test.go: `t.Run("ObservationTimestampFromReport extracts observation timestamp from a valid report", func(t *testing.T) {
report := buildSampleReport(123)
ts, err := r.ObservationTimestampFromReport(report)
require.NoError(t, err)
assert.Equal(t, ts, uint32(123))
})`
$DIR/core/services/relay/evm/mercury/v3/reportcodec/report_codec_test.go: `t.Run("BenchmarkPriceFromReport extracts the benchmark price from valid report", func(t *testing.T) {
report := buildSampleReport(123)
bp, err := r.BenchmarkPriceFromReport(report)
require.NoError(t, err)
assert.Equal(t, big.NewInt(242), bp)
})`
$DIR/core/services/relay/evm/mercury/v3/reportcodec/report_codec_test.go: `.Run("BuildReport errors on zero values", func(t *testing.T) {
_, err := r.BuildReport(v3.ReportFields{})
require.Error(t, err)
assert.Contains(t, err.Error(), "benchmarkPrice may not be nil")
assert.Contains(t, err.Error(), "linkFee may not be nil")
assert.Contains(t, err.Error(), "nativeFee may not be nil")
})`
$DIR/core/services/relay/evm/mercury/v3/reportcodec/report_codec_test.go: `.BuildReport(v3.ReportFields{})`
$DIR/core/services/relay/evm/mercury/v3/reportcodec/report_codec_test.go: `.Run("BuildReport constructs a report from observations", func(t *testing.T) {
rf := newValidReportFields()
// only need to test happy path since validations are done in relaymercury
report, err := r.BuildReport(rf)
require.NoError(t, err)
reportElems := make(map[string]interface{})
err = ReportTypes.UnpackIntoMap(reportElems, report)
require.NoError(t, err)
assert.Equal(t, int(reportElems["observationsTimestamp"].(uint32)), 242)
assert.Equal(t, reportElems["benchmarkPrice"].(*big.Int).Int64(), int64(243))
assert.Equal(t, reportElems["bid"].(*big.Int).Int64(), int64(244))
assert.Equal(t, reportElems["ask"].(*big.Int).Int64(), int64(245))
assert.Equal(t, reportElems["validFromTimestamp"].(uint32), uint32(123))
assert.Equal(t, reportElems["expiresAt"].(uint32), uint32(20))
assert.Equal(t, reportElems["linkFee"].(*big.Int).Int64(), int64(456))
assert.Equal(t, reportElems["nativeFee"].(*big.Int).Int64(), int64(457))
assert.Equal(t, types.Report{0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x7b, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0xf2, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x1, 0xc9, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x1, 0xc8, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x14, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0xf3, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0xf4, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0xf5}, report)
max, err := r.MaxReportLength(4)
require.NoError(t, err)
assert.LessOrEqual(t, len(report), max)
t.Run("Decode decodes the report", func(t *testing.T) {
decoded, err := r.Decode(report)
require.NoError(t, err)
require.NotNil(t, decoded)
assert.Equal(t, uint32(242), decoded.ObservationsTimestamp)
assert.Equal(t, big.NewInt(243), decoded.BenchmarkPrice)
assert.Equal(t, big.NewInt(244), decoded.Bid)
assert.Equal(t, big.NewInt(245), decoded.Ask)
assert.Equal(t, uint32(123), decoded.ValidFromTimestamp)
assert.Equal(t, uint32(20), decoded.ExpiresAt)
assert.Equal(t, big.NewInt(456), decoded.LinkFee)
assert.Equal(t, big.NewInt(457), decoded.NativeFee)
})
})`
$DIR/core/services/relay/evm/mercury/v3/reportcodec/report_codec_test.go: `.BuildReport(rf)`
$DIR/core/services/relay/evm/mercury/v3/reportcodec/report_codec_test.go: `.UnpackIntoMap(reportElems, report)`
$DIR/core/services/relay/evm/mercury/v3/reportcodec/report_codec_test.go: `.MaxReportLength(4)`
$DIR/core/services/relay/evm/mercury/v3/reportcodec/report_codec_test.go: `.Run("Decode decodes the report", func(t *testing.T) {
decoded, err := r.Decode(report)
require.NoError(t, err)
require.NotNil(t, decoded)
assert.Equal(t, uint32(242), decoded.ObservationsTimestamp)
assert.Equal(t, big.NewInt(243), decoded.BenchmarkPrice)
assert.Equal(t, big.NewInt(244), decoded.Bid)
assert.Equal(t, big.NewInt(245), decoded.Ask)
assert.Equal(t, uint32(123), decoded.ValidFromTimestamp)
assert.Equal(t, uint32(20), decoded.ExpiresAt)
assert.Equal(t, big.NewInt(456), decoded.LinkFee)
assert.Equal(t, big.NewInt(457), decoded.NativeFee)
})`
$DIR/core/services/relay/evm/mercury/v3/reportcodec/report_codec_test.go: `.Decode(report)`
$DIR/core/services/relay/evm/mercury/v3/reportcodec/report_codec_test.go: `.Run("errors on negative fee", func(t *testing.T) {
rf := newValidReportFields()
rf.LinkFee = big.NewInt(-1)
rf.NativeFee = big.NewInt(-1)
_, err := r.BuildReport(rf)
require.Error(t, err)
assert.Contains(t, err.Error(), "linkFee may not be negative (got: -1)")
assert.Contains(t, err.Error(), "nativeFee may not be negative (got: -1)")
})`
$DIR/core/services/relay/evm/mercury/v3/reportcodec/report_codec_test.go: `.NewInt(-1)`
$DIR/core/services/relay/evm/mercury/v3/reportcodec/report_codec_test.go: `.NewInt(-1)`
$DIR/core/services/relay/evm/mercury/v3/reportcodec/report_codec_test.go: `.BuildReport(rf)`
$DIR/core/services/relay/evm/mercury/v3/reportcodec/report_codec_test.go: `.Decode([]byte{1, 2, 3})`
$DIR/core/services/relay/evm/mercury/v3/reportcodec/report_codec_test.go: `.Decode(longBad)`
$DIR/core/services/relay/evm/mercury/v3/reportcodec/report_codec_test.go: `.Run("ObservationTimestampFromReport extracts observation timestamp from a valid report", func(t *testing.T) {
report := buildSampleReport(123)
ts, err := r.ObservationTimestampFromReport(report)
require.NoError(t, err)
assert.Equal(t, ts, uint32(123))
})`
$DIR/core/services/relay/evm/mercury/v3/reportcodec/report_codec_test.go: `.ObservationTimestampFromReport(report)`
$DIR/core/services/relay/evm/mercury/v3/reportcodec/report_codec_test.go: `.ObservationTimestampFromReport(report)`
$DIR/core/services/relay/evm/mercury/v3/reportcodec/report_codec_test.go: `.Run("BenchmarkPriceFromReport extracts the benchmark price from valid report", func(t *testing.T) {
report := buildSampleReport(123)
bp, err := r.BenchmarkPriceFromReport(report)
require.NoError(t, err)
assert.Equal(t, big.NewInt(242), bp)
})`
$DIR/core/services/relay/evm/mercury/v3/reportcodec/report_codec_test.go: `.BenchmarkPriceFromReport(report)`
$DIR/core/services/relay/evm/mercury/v3/reportcodec/report_codec_test.go: `.BenchmarkPriceFromReport([]byte{1, 2, 3})`
$DIR/core/services/relay/evm/mercury/wsrpc/cache/cache_set_test.go: `servicetest.Run(t, cs)`
$DIR/core/services/relay/evm/mercury/wsrpc/cache/cache_set_test.go: `t.Run("with caching disabled, returns nil, nil", func(t *testing.T) {
assert.Len(t, disabledCs.caches, 0)
f, err = disabledCs.Get(ctx, c)
require.NoError(t, err)
assert.Nil(t, f)
assert.Len(t, disabledCs.caches, 0)
})`
$DIR/core/services/relay/evm/mercury/wsrpc/cache/cache_set_test.go: `f, err = disabledCs.Get(ctx, c)`
$DIR/core/services/relay/evm/mercury/wsrpc/cache/cache_set_test.go: `t.Run("with virgin cacheset, makes new entry and returns it", func(t *testing.T) {
assert.Len(t, cs.caches, 0)
f, err = cs.Get(ctx, c)
require.NoError(t, err)
assert.IsType(t, f, &memCache{})
assert.Len(t, cs.caches, 1)
})`
$DIR/core/services/relay/evm/mercury/wsrpc/cache/cache_set_test.go: `f, err = cs.Get(ctx, c)`
$DIR/core/services/relay/evm/mercury/wsrpc/cache/cache_set_test.go: `t.Run("with existing cache for value, returns that", func(t *testing.T) {
var f2 Fetcher
assert.Len(t, cs.caches, 1)
f2, err = cs.Get(ctx, c)
require.NoError(t, err)
assert.IsType(t, f, &memCache{})
assert.Equal(t, f, f2)
assert.Len(t, cs.caches, 1)
})`
$DIR/core/services/relay/evm/mercury/wsrpc/cache/cache_set_test.go: `f2, err = cs.Get(ctx, c)`
$DIR/core/services/relay/evm/mercury/wsrpc/cache/cache_set_test.go: `.TestLogger(t)`
$DIR/core/services/relay/evm/mercury/wsrpc/cache/cache_set_test.go: `.Context(t)`
$DIR/core/services/relay/evm/mercury/wsrpc/cache/cache_set_test.go: `.Run(t, cs)`
$DIR/core/services/relay/evm/mercury/wsrpc/cache/cache_set_test.go: `.Run("with caching disabled, returns nil, nil", func(t *testing.T) {
assert.Len(t, disabledCs.caches, 0)
f, err = disabledCs.Get(ctx, c)
require.NoError(t, err)
assert.Nil(t, f)
assert.Len(t, disabledCs.caches, 0)
})`
$DIR/core/services/relay/evm/mercury/wsrpc/cache/cache_set_test.go: `.Get(ctx, c)`
$DIR/core/services/relay/evm/mercury/wsrpc/cache/cache_set_test.go: `.Run("with virgin cacheset, makes new entry and returns it", func(t *testing.T) {
assert.Len(t, cs.caches, 0)
f, err = cs.Get(ctx, c)
require.NoError(t, err)
assert.IsType(t, f, &memCache{})
assert.Len(t, cs.caches, 1)
})`
$DIR/core/services/relay/evm/mercury/wsrpc/cache/cache_set_test.go: `.Get(ctx, c)`
$DIR/core/services/relay/evm/mercury/wsrpc/cache/cache_set_test.go: `.Run("with existing cache for value, returns that", func(t *testing.T) {
var f2 Fetcher
assert.Len(t, cs.caches, 1)
f2, err = cs.Get(ctx, c)
require.NoError(t, err)
assert.IsType(t, f, &memCache{})
assert.Equal(t, f, f2)
assert.Len(t, cs.caches, 1)
})`
$DIR/core/services/relay/evm/mercury/wsrpc/cache/cache_set_test.go: `.Get(ctx, c)`
$DIR/core/services/relay/evm/mercury/wsrpc/cache/cache_test.go: `t.Run("errors with nil req", func(t *testing.T) {
c := newMemCache(lggr, client, cfg)
_, err := c.LatestReport(ctx, nil)
assert.EqualError(t, err, "req must not be nil")
})`
$DIR/core/services/relay/evm/mercury/wsrpc/cache/cache_test.go: `t.Run("with LatestReportTTL=0 does no caching", func(t *testing.T) {
c := newMemCache(lggr, client, cfg)
req := &pb.LatestReportRequest{}
for i := 0; i < 5; i++ {
client.resp = &pb.LatestReportResponse{Report: &pb.Report{Price: []byte(strconv.Itoa(i))}}
resp, err := c.LatestReport(ctx, req)
require.NoError(t, err)
assert.Equal(t, client.resp, resp)
}
client.resp = nil
client.err = errors.New("something exploded")
resp, err := c.LatestReport(ctx, req)
assert.EqualError(t, err, "something exploded")
assert.Nil(t, resp)
})`
$DIR/core/services/relay/evm/mercury/wsrpc/cache/cache_test.go: `client.resp = &pb.LatestReportResponse{Report: &pb.Report{Price: []byte(strconv.Itoa(i))}}`
$DIR/core/services/relay/evm/mercury/wsrpc/cache/cache_test.go: `client.resp = nil`
$DIR/core/services/relay/evm/mercury/wsrpc/cache/cache_test.go: `client.err = errors.New("something exploded")`
$DIR/core/services/relay/evm/mercury/wsrpc/cache/cache_test.go: `t.Run("caches repeated calls to LatestReport, keyed by request", func(t *testing.T) {
cfg.LatestReportTTL = neverExpireTTL
client.err = nil
c := newMemCache(lggr, client, cfg)
t.Run("if cache is unstarted, returns error", func(t *testing.T) {
// starting the cache is required for state management if we
// actually cache results, since fetches are initiated async and
// need to be cleaned up properly on close
_, err := c.LatestReport(ctx, &pb.LatestReportRequest{})
assert.EqualError(t, err, "memCache must be started, but is: Unstarted")
})
err := c.StartOnce("test start", func() error { return nil })
require.NoError(t, err)
t.Run("returns cached value for key", func(t *testing.T) {
var firstResp *pb.LatestReportResponse
for i := 0; i < 5; i++ {
client.resp = &pb.LatestReportResponse{Report: &pb.Report{Price: []byte(strconv.Itoa(i))}}
if firstResp == nil {
firstResp = client.resp
}
resp, err := c.LatestReport(ctx, req1)
require.NoError(t, err)
assert.Equal(t, firstResp, resp)
}
})
t.Run("cache keys do not conflict", func(t *testing.T) {
var firstResp1 *pb.LatestReportResponse
for i := 5; i < 10; i++ {
client.resp = &pb.LatestReportResponse{Report: &pb.Report{Price: []byte(strconv.Itoa(i))}}
if firstResp1 == nil {
firstResp1 = client.resp
}
resp, err := c.LatestReport(ctx, req2)
require.NoError(t, err)
assert.Equal(t, firstResp1, resp)
}
var firstResp2 *pb.LatestReportResponse
for i := 10; i < 15; i++ {
client.resp = &pb.LatestReportResponse{Report: &pb.Report{Price: []byte(strconv.Itoa(i))}}
if firstResp2 == nil {
firstResp2 = client.resp
}
resp, err := c.LatestReport(ctx, req3)
require.NoError(t, err)
assert.Equal(t, firstResp2, resp)
}
// req1 key still has same value
resp, err := c.LatestReport(ctx, req1)
require.NoError(t, err)
assert.Equal(t, []byte(strconv.Itoa(0)), resp.Report.Price)
// req2 key still has same value
resp, err = c.LatestReport(ctx, req2)
require.NoError(t, err)
assert.Equal(t, []byte(strconv.Itoa(5)), resp.Report.Price)
})
t.Run("re-queries when a cache item has expired", func(t *testing.T) {
vi, exists := c.cache.Load(feedID1Hex)
require.True(t, exists)
v := vi.(*cacheVal)
v.expiresAt = time.Now().Add(-1 * time.Second)
client.resp = &pb.LatestReportResponse{Report: &pb.Report{Price: []byte(strconv.Itoa(15))}}
resp, err := c.LatestReport(ctx, req1)
require.NoError(t, err)
assert.Equal(t, client.resp, resp)
// querying again yields the same cached item
resp, err = c.LatestReport(ctx, req1)
require.NoError(t, err)
assert.Equal(t, client.resp, resp)
})
})`
$DIR/core/services/relay/evm/mercury/wsrpc/cache/cache_test.go: `cfg.LatestReportTTL = neverExpireTTL`
$DIR/core/services/relay/evm/mercury/wsrpc/cache/cache_test.go: `client.err = nil`
$DIR/core/services/relay/evm/mercury/wsrpc/cache/cache_test.go: `t.Run("if cache is unstarted, returns error", func(t *testing.T) {
// starting the cache is required for state management if we
// actually cache results, since fetches are initiated async and
// need to be cleaned up properly on close
_, err := c.LatestReport(ctx, &pb.LatestReportRequest{})
assert.EqualError(t, err, "memCache must be started, but is: Unstarted")
})`
$DIR/core/services/relay/evm/mercury/wsrpc/cache/cache_test.go: `t.Run("returns cached value for key", func(t *testing.T) {
var firstResp *pb.LatestReportResponse
for i := 0; i < 5; i++ {
client.resp = &pb.LatestReportResponse{Report: &pb.Report{Price: []byte(strconv.Itoa(i))}}
if firstResp == nil {
firstResp = client.resp
}
resp, err := c.LatestReport(ctx, req1)
require.NoError(t, err)
assert.Equal(t, firstResp, resp)
}
})`
$DIR/core/services/relay/evm/mercury/wsrpc/cache/cache_test.go: `client.resp = &pb.LatestReportResponse{Report: &pb.Report{Price: []byte(strconv.Itoa(i))}}`
$DIR/core/services/relay/evm/mercury/wsrpc/cache/cache_test.go: `firstResp = client.resp`
$DIR/core/services/relay/evm/mercury/wsrpc/cache/cache_test.go: `t.Run("cache keys do not conflict", func(t *testing.T) {
var firstResp1 *pb.LatestReportResponse
for i := 5; i < 10; i++ {
client.resp = &pb.LatestReportResponse{Report: &pb.Report{Price: []byte(strconv.Itoa(i))}}
if firstResp1 == nil {
firstResp1 = client.resp
}
resp, err := c.LatestReport(ctx, req2)
require.NoError(t, err)
assert.Equal(t, firstResp1, resp)
}
var firstResp2 *pb.LatestReportResponse
for i := 10; i < 15; i++ {
client.resp = &pb.LatestReportResponse{Report: &pb.Report{Price: []byte(strconv.Itoa(i))}}
if firstResp2 == nil {
firstResp2 = client.resp
}
resp, err := c.LatestReport(ctx, req3)
require.NoError(t, err)
assert.Equal(t, firstResp2, resp)
}
// req1 key still has same value
resp, err := c.LatestReport(ctx, req1)
require.NoError(t, err)
assert.Equal(t, []byte(strconv.Itoa(0)), resp.Report.Price)
// req2 key still has same value
resp, err = c.LatestReport(ctx, req2)
require.NoError(t, err)
assert.Equal(t, []byte(strconv.Itoa(5)), resp.Report.Price)
})`
$DIR/core/services/relay/evm/mercury/wsrpc/cache/cache_test.go: `client.resp = &pb.LatestReportResponse{Report: &pb.Report{Price: []byte(strconv.Itoa(i))}}`
$DIR/core/services/relay/evm/mercury/wsrpc/cache/cache_test.go: `firstResp1 = client.resp`
$DIR/core/services/relay/evm/mercury/wsrpc/cache/cache_test.go: `client.resp = &pb.LatestReportResponse{Report: &pb.Report{Price: []byte(strconv.Itoa(i))}}`
$DIR/core/services/relay/evm/mercury/wsrpc/cache/cache_test.go: `firstResp2 = client.resp`
$DIR/core/services/relay/evm/mercury/wsrpc/cache/cache_test.go: `resp, err = c.LatestReport(ctx, req2)`
$DIR/core/services/relay/evm/mercury/wsrpc/cache/cache_test.go: `t.Run("re-queries when a cache item has expired", func(t *testing.T) {
vi, exists := c.cache.Load(feedID1Hex)
require.True(t, exists)
v := vi.(*cacheVal)
v.expiresAt = time.Now().Add(-1 * time.Second)
client.resp = &pb.LatestReportResponse{Report: &pb.Report{Price: []byte(strconv.Itoa(15))}}
resp, err := c.LatestReport(ctx, req1)
require.NoError(t, err)
assert.Equal(t, client.resp, resp)
// querying again yields the same cached item
resp, err = c.LatestReport(ctx, req1)
require.NoError(t, err)
assert.Equal(t, client.resp, resp)
})`
$DIR/core/services/relay/evm/mercury/wsrpc/cache/cache_test.go: `v.expiresAt = time.Now().Add(-1 * time.Second)`
$DIR/core/services/relay/evm/mercury/wsrpc/cache/cache_test.go: `client.resp = &pb.LatestReportResponse{Report: &pb.Report{Price: []byte(strconv.Itoa(15))}}`
$DIR/core/services/relay/evm/mercury/wsrpc/cache/cache_test.go: `resp, err = c.LatestReport(ctx, req1)`
$DIR/core/services/relay/evm/mercury/wsrpc/cache/cache_test.go: `t.Run("complete fetch", func(t *testing.T) {
t.Run("does not change expiry if fetch returns error", func(t *testing.T) {
expires := time.Now().Add(-1 * time.Second)
v := &cacheVal{
fetching: true,
fetchCh: make(chan (struct{})),
val: nil,
err: nil,
expiresAt: expires,
}
v.completeFetch(nil, errors.New("foo"), time.Now().Add(neverExpireTTL))
assert.Equal(t, expires, v.expiresAt)
v = &cacheVal{
fetching: true,
fetchCh: make(chan (struct{})),
val: nil,
err: nil,
expiresAt: expires,
}
expires = time.Now().Add(neverExpireTTL)
v.completeFetch(nil, nil, expires)
assert.Equal(t, expires, v.expiresAt)
})
})`
$DIR/core/services/relay/evm/mercury/wsrpc/cache/cache_test.go: `t.Run("does not change expiry if fetch returns error", func(t *testing.T) {
expires := time.Now().Add(-1 * time.Second)
v := &cacheVal{
fetching: true,
fetchCh: make(chan (struct{})),
val: nil,
err: nil,
expiresAt: expires,
}
v.completeFetch(nil, errors.New("foo"), time.Now().Add(neverExpireTTL))
assert.Equal(t, expires, v.expiresAt)
v = &cacheVal{
fetching: true,
fetchCh: make(chan (struct{})),
val: nil,
err: nil,
expiresAt: expires,
}
expires = time.Now().Add(neverExpireTTL)
v.completeFetch(nil, nil, expires)
assert.Equal(t, expires, v.expiresAt)
})`
$DIR/core/services/relay/evm/mercury/wsrpc/cache/cache_test.go: `v.completeFetch(nil, errors.New("foo"), time.Now().Add(neverExpireTTL))`
$DIR/core/services/relay/evm/mercury/wsrpc/cache/cache_test.go: `v = &cacheVal{
fetching: true,
fetchCh: make(chan (struct{})),
val: nil,
err: nil,
expiresAt: expires,
}`
$DIR/core/services/relay/evm/mercury/wsrpc/cache/cache_test.go: `expires = time.Now().Add(neverExpireTTL)`
$DIR/core/services/relay/evm/mercury/wsrpc/cache/cache_test.go: `v.completeFetch(nil, nil, expires)`
$DIR/core/services/relay/evm/mercury/wsrpc/cache/cache_test.go: `c.cache.Store(feedID1Hex, v)`
$DIR/core/services/relay/evm/mercury/wsrpc/cache/cache_test.go: `cancel()`
$DIR/core/services/relay/evm/mercury/wsrpc/cache/cache_test.go: `t.Run("returns context deadline exceeded error if fetch takes too long", func(t *testing.T) {
_, err := c.LatestReport(canceledCtx, req1)
require.Error(t, err)
assert.True(t, errors.Is(err, context.Canceled))
assert.EqualError(t, err, "context canceled")
})`
$DIR/core/services/relay/evm/mercury/wsrpc/cache/cache_test.go: `t.Run("returns wrapped context deadline exceeded error if fetch has errored and is in the retry loop", func(t *testing.T) {
v.err = errors.New("some background fetch error")
_, err := c.LatestReport(canceledCtx, req1)
require.Error(t, err)
assert.True(t, errors.Is(err, context.Canceled))
assert.EqualError(t, err, "some background fetch error\ncontext canceled")
})`
$DIR/core/services/relay/evm/mercury/wsrpc/cache/cache_test.go: `v.err = errors.New("some background fetch error")`
$DIR/core/services/relay/evm/mercury/wsrpc/cache/cache_test.go: `.TestLogger(t)`
$DIR/core/services/relay/evm/mercury/wsrpc/cache/cache_test.go: `.Context(t)`
$DIR/core/services/relay/evm/mercury/wsrpc/cache/cache_test.go: `.BytesToFeedID(req1.FeedId)`
$DIR/core/services/relay/evm/mercury/wsrpc/cache/cache_test.go: `.String()`
$DIR/core/services/relay/evm/mercury/wsrpc/cache/cache_test.go: `.Run("errors with nil req", func(t *testing.T) {
c := newMemCache(lggr, client, cfg)
_, err := c.LatestReport(ctx, nil)
assert.EqualError(t, err, "req must not be nil")
})`
$DIR/core/services/relay/evm/mercury/wsrpc/cache/cache_test.go: `.LatestReport(ctx, nil)`
$DIR/core/services/relay/evm/mercury/wsrpc/cache/cache_test.go: `.Run("with LatestReportTTL=0 does no caching", func(t *testing.T) {
c := newMemCache(lggr, client, cfg)
req := &pb.LatestReportRequest{}
for i := 0; i < 5; i++ {
client.resp = &pb.LatestReportResponse{Report: &pb.Report{Price: []byte(strconv.Itoa(i))}}
resp, err := c.LatestReport(ctx, req)
require.NoError(t, err)
assert.Equal(t, client.resp, resp)
}
client.resp = nil
client.err = errors.New("something exploded")
resp, err := c.LatestReport(ctx, req)
assert.EqualError(t, err, "something exploded")
assert.Nil(t, resp)
})`
$DIR/core/services/relay/evm/mercury/wsrpc/cache/cache_test.go: `.Itoa(i)`
$DIR/core/services/relay/evm/mercury/wsrpc/cache/cache_test.go: `.LatestReport(ctx, req)`
$DIR/core/services/relay/evm/mercury/wsrpc/cache/cache_test.go: `.New("something exploded")`
$DIR/core/services/relay/evm/mercury/wsrpc/cache/cache_test.go: `.LatestReport(ctx, req)`
$DIR/core/services/relay/evm/mercury/wsrpc/cache/cache_test.go: `.Run("caches repeated calls to LatestReport, keyed by request", func(t *testing.T) {
cfg.LatestReportTTL = neverExpireTTL
client.err = nil
c := newMemCache(lggr, client, cfg)
t.Run("if cache is unstarted, returns error", func(t *testing.T) {
// starting the cache is required for state management if we
// actually cache results, since fetches are initiated async and
// need to be cleaned up properly on close
_, err := c.LatestReport(ctx, &pb.LatestReportRequest{})
assert.EqualError(t, err, "memCache must be started, but is: Unstarted")
})
err := c.StartOnce("test start", func() error { return nil })
require.NoError(t, err)
t.Run("returns cached value for key", func(t *testing.T) {
var firstResp *pb.LatestReportResponse
for i := 0; i < 5; i++ {
client.resp = &pb.LatestReportResponse{Report: &pb.Report{Price: []byte(strconv.Itoa(i))}}
if firstResp == nil {
firstResp = client.resp
}
resp, err := c.LatestReport(ctx, req1)
require.NoError(t, err)
assert.Equal(t, firstResp, resp)
}
})
t.Run("cache keys do not conflict", func(t *testing.T) {
var firstResp1 *pb.LatestReportResponse
for i := 5; i < 10; i++ {
client.resp = &pb.LatestReportResponse{Report: &pb.Report{Price: []byte(strconv.Itoa(i))}}
if firstResp1 == nil {
firstResp1 = client.resp
}
resp, err := c.LatestReport(ctx, req2)
require.NoError(t, err)
assert.Equal(t, firstResp1, resp)
}
var firstResp2 *pb.LatestReportResponse
for i := 10; i < 15; i++ {
client.resp = &pb.LatestReportResponse{Report: &pb.Report{Price: []byte(strconv.Itoa(i))}}
if firstResp2 == nil {
firstResp2 = client.resp
}
resp, err := c.LatestReport(ctx, req3)
require.NoError(t, err)
assert.Equal(t, firstResp2, resp)
}
// req1 key still has same value
resp, err := c.LatestReport(ctx, req1)
require.NoError(t, err)
assert.Equal(t, []byte(strconv.Itoa(0)), resp.Report.Price)
// req2 key still has same value
resp, err = c.LatestReport(ctx, req2)
require.NoError(t, err)
assert.Equal(t, []byte(strconv.Itoa(5)), resp.Report.Price)
})
t.Run("re-queries when a cache item has expired", func(t *testing.T) {
vi, exists := c.cache.Load(feedID1Hex)
require.True(t, exists)
v := vi.(*cacheVal)
v.expiresAt = time.Now().Add(-1 * time.Second)
client.resp = &pb.LatestReportResponse{Report: &pb.Report{Price: []byte(strconv.Itoa(15))}}
resp, err := c.LatestReport(ctx, req1)
require.NoError(t, err)
assert.Equal(t, client.resp, resp)
// querying again yields the same cached item
resp, err = c.LatestReport(ctx, req1)
require.NoError(t, err)
assert.Equal(t, client.resp, resp)
})
})`
$DIR/core/services/relay/evm/mercury/wsrpc/cache/cache_test.go: `.Run("if cache is unstarted, returns error", func(t *testing.T) {
// starting the cache is required for state management if we
// actually cache results, since fetches are initiated async and
// need to be cleaned up properly on close
_, err := c.LatestReport(ctx, &pb.LatestReportRequest{})
assert.EqualError(t, err, "memCache must be started, but is: Unstarted")
})`
$DIR/core/services/relay/evm/mercury/wsrpc/cache/cache_test.go: `.LatestReport(ctx, &pb.LatestReportRequest{})`
$DIR/core/services/relay/evm/mercury/wsrpc/cache/cache_test.go: `.StartOnce("test start", func() error { return nil })`
$DIR/core/services/relay/evm/mercury/wsrpc/cache/cache_test.go: `.Run("returns cached value for key", func(t *testing.T) {
var firstResp *pb.LatestReportResponse
for i := 0; i < 5; i++ {
client.resp = &pb.LatestReportResponse{Report: &pb.Report{Price: []byte(strconv.Itoa(i))}}
if firstResp == nil {
firstResp = client.resp
}
resp, err := c.LatestReport(ctx, req1)
require.NoError(t, err)
assert.Equal(t, firstResp, resp)
}
})`
$DIR/core/services/relay/evm/mercury/wsrpc/cache/cache_test.go: `.Itoa(i)`
$DIR/core/services/relay/evm/mercury/wsrpc/cache/cache_test.go: `.LatestReport(ctx, req1)`
$DIR/core/services/relay/evm/mercury/wsrpc/cache/cache_test.go: `.Run("cache keys do not conflict", func(t *testing.T) {
var firstResp1 *pb.LatestReportResponse
for i := 5; i < 10; i++ {
client.resp = &pb.LatestReportResponse{Report: &pb.Report{Price: []byte(strconv.Itoa(i))}}
if firstResp1 == nil {
firstResp1 = client.resp
}
resp, err := c.LatestReport(ctx, req2)
require.NoError(t, err)
assert.Equal(t, firstResp1, resp)
}
var firstResp2 *pb.LatestReportResponse
for i := 10; i < 15; i++ {
client.resp = &pb.LatestReportResponse{Report: &pb.Report{Price: []byte(strconv.Itoa(i))}}
if firstResp2 == nil {
firstResp2 = client.resp
}
resp, err := c.LatestReport(ctx, req3)
require.NoError(t, err)
assert.Equal(t, firstResp2, resp)
}
// req1 key still has same value
resp, err := c.LatestReport(ctx, req1)
require.NoError(t, err)
assert.Equal(t, []byte(strconv.Itoa(0)), resp.Report.Price)
// req2 key still has same value
resp, err = c.LatestReport(ctx, req2)
require.NoError(t, err)
assert.Equal(t, []byte(strconv.Itoa(5)), resp.Report.Price)
})`
$DIR/core/services/relay/evm/mercury/wsrpc/cache/cache_test.go: `.Itoa(i)`
$DIR/core/services/relay/evm/mercury/wsrpc/cache/cache_test.go: `.LatestReport(ctx, req2)`
$DIR/core/services/relay/evm/mercury/wsrpc/cache/cache_test.go: `.Itoa(i)`
$DIR/core/services/relay/evm/mercury/wsrpc/cache/cache_test.go: `.LatestReport(ctx, req3)`
$DIR/core/services/relay/evm/mercury/wsrpc/cache/cache_test.go: `.LatestReport(ctx, req1)`
$DIR/core/services/relay/evm/mercury/wsrpc/cache/cache_test.go: `.LatestReport(ctx, req2)`
$DIR/core/services/relay/evm/mercury/wsrpc/cache/cache_test.go: `.Run("re-queries when a cache item has expired", func(t *testing.T) {
vi, exists := c.cache.Load(feedID1Hex)
require.True(t, exists)
v := vi.(*cacheVal)
v.expiresAt = time.Now().Add(-1 * time.Second)
client.resp = &pb.LatestReportResponse{Report: &pb.Report{Price: []byte(strconv.Itoa(15))}}
resp, err := c.LatestReport(ctx, req1)
require.NoError(t, err)
assert.Equal(t, client.resp, resp)
// querying again yields the same cached item
resp, err = c.LatestReport(ctx, req1)
require.NoError(t, err)
assert.Equal(t, client.resp, resp)
})`
$DIR/core/services/relay/evm/mercury/wsrpc/cache/cache_test.go: `.cache.Load(feedID1Hex)`
$DIR/core/services/relay/evm/mercury/wsrpc/cache/cache_test.go: `.Now()`
$DIR/core/services/relay/evm/mercury/wsrpc/cache/cache_test.go: `.Add(-1 * time.Second)`
$DIR/core/services/relay/evm/mercury/wsrpc/cache/cache_test.go: `.Itoa(15)`
$DIR/core/services/relay/evm/mercury/wsrpc/cache/cache_test.go: `.LatestReport(ctx, req1)`
$DIR/core/services/relay/evm/mercury/wsrpc/cache/cache_test.go: `.LatestReport(ctx, req1)`
$DIR/core/services/relay/evm/mercury/wsrpc/cache/cache_test.go: `.Run("complete fetch", func(t *testing.T) {
t.Run("does not change expiry if fetch returns error", func(t *testing.T) {
expires := time.Now().Add(-1 * time.Second)
v := &cacheVal{
fetching: true,
fetchCh: make(chan (struct{})),
val: nil,
err: nil,
expiresAt: expires,
}
v.completeFetch(nil, errors.New("foo"), time.Now().Add(neverExpireTTL))
assert.Equal(t, expires, v.expiresAt)
v = &cacheVal{
fetching: true,
fetchCh: make(chan (struct{})),
val: nil,
err: nil,
expiresAt: expires,
}
expires = time.Now().Add(neverExpireTTL)
v.completeFetch(nil, nil, expires)
assert.Equal(t, expires, v.expiresAt)
})
})`
$DIR/core/services/relay/evm/mercury/wsrpc/cache/cache_test.go: `.Run("does not change expiry if fetch returns error", func(t *testing.T) {
expires := time.Now().Add(-1 * time.Second)
v := &cacheVal{
fetching: true,
fetchCh: make(chan (struct{})),
val: nil,
err: nil,
expiresAt: expires,
}
v.completeFetch(nil, errors.New("foo"), time.Now().Add(neverExpireTTL))
assert.Equal(t, expires, v.expiresAt)
v = &cacheVal{
fetching: true,
fetchCh: make(chan (struct{})),
val: nil,
err: nil,
expiresAt: expires,
}
expires = time.Now().Add(neverExpireTTL)
v.completeFetch(nil, nil, expires)
assert.Equal(t, expires, v.expiresAt)
})`
$DIR/core/services/relay/evm/mercury/wsrpc/cache/cache_test.go: `.Now()`
$DIR/core/services/relay/evm/mercury/wsrpc/cache/cache_test.go: `.Add(-1 * time.Second)`
$DIR/core/services/relay/evm/mercury/wsrpc/cache/cache_test.go: `.completeFetch(nil, errors.New("foo"), time.Now().Add(neverExpireTTL))`
$DIR/core/services/relay/evm/mercury/wsrpc/cache/cache_test.go: `.New("foo")`
$DIR/core/services/relay/evm/mercury/wsrpc/cache/cache_test.go: `.Now()`
$DIR/core/services/relay/evm/mercury/wsrpc/cache/cache_test.go: `.Add(neverExpireTTL)`
$DIR/core/services/relay/evm/mercury/wsrpc/cache/cache_test.go: `.Now()`
$DIR/core/services/relay/evm/mercury/wsrpc/cache/cache_test.go: `.Add(neverExpireTTL)`
$DIR/core/services/relay/evm/mercury/wsrpc/cache/cache_test.go: `.completeFetch(nil, nil, expires)`
$DIR/core/services/relay/evm/mercury/wsrpc/cache/cache_test.go: `.Now()`
$DIR/core/services/relay/evm/mercury/wsrpc/cache/cache_test.go: `.Add(-1 * time.Second)`
$DIR/core/services/relay/evm/mercury/wsrpc/cache/cache_test.go: `.cache.Store(feedID1Hex, v)`
$DIR/core/services/relay/evm/mercury/wsrpc/cache/cache_test.go: `.WithCancel(testutils.Context(t))`
$DIR/core/services/relay/evm/mercury/wsrpc/cache/cache_test.go: `.Context(t)`
$DIR/core/services/relay/evm/mercury/wsrpc/cache/cache_test.go: `.Run("returns context deadline exceeded error if fetch takes too long", func(t *testing.T) {
_, err := c.LatestReport(canceledCtx, req1)
require.Error(t, err)
assert.True(t, errors.Is(err, context.Canceled))
assert.EqualError(t, err, "context canceled")
})`
$DIR/core/services/relay/evm/mercury/wsrpc/cache/cache_test.go: `.LatestReport(canceledCtx, req1)`
$DIR/core/services/relay/evm/mercury/wsrpc/cache/cache_test.go: `.Run("returns wrapped context deadline exceeded error if fetch has errored and is in the retry loop", func(t *testing.T) {
v.err = errors.New("some background fetch error")
_, err := c.LatestReport(canceledCtx, req1)
require.Error(t, err)
assert.True(t, errors.Is(err, context.Canceled))
assert.EqualError(t, err, "some background fetch error\ncontext canceled")
})`
$DIR/core/services/relay/evm/mercury/wsrpc/cache/cache_test.go: `.New("some background fetch error")`
$DIR/core/services/relay/evm/mercury/wsrpc/cache/cache_test.go: `.LatestReport(canceledCtx, req1)`
$DIR/core/services/relay/evm/mercury/wsrpc/client_test.go: `calls++`
$DIR/core/services/relay/evm/mercury/wsrpc/client_test.go: `c.conn = conn`
$DIR/core/services/relay/evm/mercury/wsrpc/client_test.go: `c.rawClient = wsrpcClient`
$DIR/core/services/relay/evm/mercury/wsrpc/client_test.go: `t.Run("successful transmit resets the counter", func(t *testing.T) {
transmitErr = nil
// working transmit to reset counter
_, err = c.Transmit(ctx, req)
require.NoError(t, err)
assert.Equal(t, MaxConsecutiveRequestFailures+1, calls)
assert.Equal(t, 0, int(c.consecutiveTimeoutCnt.Load()))
})`
$DIR/core/services/relay/evm/mercury/wsrpc/client_test.go: `transmitErr = nil`
$DIR/core/services/relay/evm/mercury/wsrpc/client_test.go: `_, err = c.Transmit(ctx, req)`
$DIR/core/services/relay/evm/mercury/wsrpc/client_test.go: `t.Run("doesn't block in case channel is full", func(t *testing.T) {
transmitErr = context.DeadlineExceeded
c.chResetTransport = nil // simulate full channel
for i := 0; i < MaxConsecutiveRequestFailures; i++ {
_, err := c.Transmit(ctx, req)
require.EqualError(t, err, "context deadline exceeded")
}
})`
$DIR/core/services/relay/evm/mercury/wsrpc/client_test.go: `transmitErr = context.DeadlineExceeded`
$DIR/core/services/relay/evm/mercury/wsrpc/client_test.go: `c.chResetTransport = nil`
$DIR/core/services/relay/evm/mercury/wsrpc/client_test.go: `t.Run(tt.name, func(t *testing.T) {
req := &pb.LatestReportRequest{}
cacheSet := cache.NewCacheSet(lggr, cache.Config{LatestReportTTL: tt.ttl})
resp := &pb.LatestReportResponse{}
var calls int
wsrpcClient := &mocks.MockWSRPCClient{
LatestReportF: func(ctx context.Context, in *pb.LatestReportRequest) (*pb.LatestReportResponse, error) {
calls++
assert.Equal(t, req, in)
return resp, nil
},
}
conn := &mocks.MockConn{
Ready: true,
}
c := newClient(lggr, csakey.KeyV2{}, nil, "", cacheSet)
c.conn = conn
c.rawClient = wsrpcClient
servicetest.Run(t, cacheSet)
simulateStart(ctx, t, c)
for i := 0; i < cacheReads; i++ {
r, err := c.LatestReport(ctx, req)
require.NoError(t, err)
assert.Equal(t, resp, r)
}
assert.Equal(t, tt.expectedCalls, calls, "expected %d calls to LatestReport but it was called %d times", tt.expectedCalls, calls)
})`
$DIR/core/services/relay/evm/mercury/wsrpc/client_test.go: `calls++`
$DIR/core/services/relay/evm/mercury/wsrpc/client_test.go: `c.conn = conn`
$DIR/core/services/relay/evm/mercury/wsrpc/client_test.go: `c.rawClient = wsrpcClient`
$DIR/core/services/relay/evm/mercury/wsrpc/client_test.go: `servicetest.Run(t, cacheSet)`
$DIR/core/services/relay/evm/mercury/wsrpc/client_test.go: `simulateStart(ctx, t, c)`
$DIR/core/services/relay/evm/mercury/wsrpc/client_test.go: `.TestLogger(t)`
$DIR/core/services/relay/evm/mercury/wsrpc/client_test.go: `.Context(t)`
$DIR/core/services/relay/evm/mercury/wsrpc/client_test.go: `.Transmit(ctx, req)`
$DIR/core/services/relay/evm/mercury/wsrpc/client_test.go: `.Transmit(ctx, req)`
$DIR/core/services/relay/evm/mercury/wsrpc/client_test.go: `.Run("successful transmit resets the counter", func(t *testing.T) {
transmitErr = nil
// working transmit to reset counter
_, err = c.Transmit(ctx, req)
require.NoError(t, err)
assert.Equal(t, MaxConsecutiveRequestFailures+1, calls)
assert.Equal(t, 0, int(c.consecutiveTimeoutCnt.Load()))
})`
$DIR/core/services/relay/evm/mercury/wsrpc/client_test.go: `.Transmit(ctx, req)`
$DIR/core/services/relay/evm/mercury/wsrpc/client_test.go: `.Run("doesn't block in case channel is full", func(t *testing.T) {
transmitErr = context.DeadlineExceeded
c.chResetTransport = nil // simulate full channel
for i := 0; i < MaxConsecutiveRequestFailures; i++ {
_, err := c.Transmit(ctx, req)
require.EqualError(t, err, "context deadline exceeded")
}
})`
$DIR/core/services/relay/evm/mercury/wsrpc/client_test.go: `.Transmit(ctx, req)`
$DIR/core/services/relay/evm/mercury/wsrpc/client_test.go: `.TestLogger(t)`
$DIR/core/services/relay/evm/mercury/wsrpc/client_test.go: `.Context(t)`
$DIR/core/services/relay/evm/mercury/wsrpc/client_test.go: `.Run(tt.name, func(t *testing.T) {
req := &pb.LatestReportRequest{}
cacheSet := cache.NewCacheSet(lggr, cache.Config{LatestReportTTL: tt.ttl})
resp := &pb.LatestReportResponse{}
var calls int
wsrpcClient := &mocks.MockWSRPCClient{
LatestReportF: func(ctx context.Context, in *pb.LatestReportRequest) (*pb.LatestReportResponse, error) {
calls++
assert.Equal(t, req, in)
return resp, nil
},
}
conn := &mocks.MockConn{
Ready: true,
}
c := newClient(lggr, csakey.KeyV2{}, nil, "", cacheSet)
c.conn = conn
c.rawClient = wsrpcClient
servicetest.Run(t, cacheSet)
simulateStart(ctx, t, c)
for i := 0; i < cacheReads; i++ {
r, err := c.LatestReport(ctx, req)
require.NoError(t, err)
assert.Equal(t, resp, r)
}
assert.Equal(t, tt.expectedCalls, calls, "expected %d calls to LatestReport but it was called %d times", tt.expectedCalls, calls)
})`
$DIR/core/services/relay/evm/mercury/wsrpc/client_test.go: `.NewCacheSet(lggr, cache.Config{LatestReportTTL: tt.ttl})`
$DIR/core/services/relay/evm/mercury/wsrpc/client_test.go: `.Run(t, cacheSet)`
$DIR/core/services/relay/evm/mercury/wsrpc/client_test.go: `.LatestReport(ctx, req)`
$DIR/core/services/relay/evm/mercury/wsrpc/pool_test.go: `t.Run("Checkout", func(t *testing.T) {
p := newPool(lggr)
p.cacheSet = &mockCacheSet{}
t.Run("checks out one started client", func(t *testing.T) {
clientPrivKey := csakey.MustNewV2XXXTestingOnly(big.NewInt(rand.Int63()))
serverPubKey := utils.NewHash().Bytes()
serverURL := "example.com:443/ws"
client := newMockClient(lggr)
p.newClient = func(lggr logger.Logger, cprivk csakey.KeyV2, spubk []byte, surl string, cs cache.CacheSet) Client {
assert.Equal(t, clientPrivKey, cprivk)
assert.Equal(t, serverPubKey, spubk)
assert.Equal(t, serverURL, surl)
return client
}
c, err := p.Checkout(ctx, clientPrivKey, serverPubKey, serverURL)
require.NoError(t, err)
assert.True(t, client.started)
require.IsType(t, &clientCheckout{}, c)
conn := c.(*clientCheckout).connection
require.Equal(t, conn.Client, client)
assert.Len(t, conn.checkouts, 1)
assert.Same(t, lggr, conn.lggr)
assert.Equal(t, clientPrivKey, conn.clientPrivKey)
assert.Equal(t, serverPubKey, conn.serverPubKey)
assert.Equal(t, serverURL, conn.serverURL)
assert.Same(t, p, conn.pool)
t.Run("checks in the clientCheckout when Close is called", func(t *testing.T) {
err := c.Close()
require.NoError(t, err)
assert.Len(t, conn.checkouts, 0)
require.IsType(t, nil, conn.Client)
assert.Nil(t, conn.Client)
assert.True(t, client.closed)
})
})
t.Run("checks out multiple started clients and only closes if all of the clients for a given pk/server pair are checked back in", func(t *testing.T) {
clientPrivKeys := []csakey.KeyV2{
csakey.MustNewV2XXXTestingOnly(big.NewInt(rand.Int63())),
csakey.MustNewV2XXXTestingOnly(big.NewInt(rand.Int63())),
}
serverPubKey := utils.NewHash().Bytes()
serverURLs := []string{
"example.com:443/ws",
"example.invalid:8000/ws",
}
p.newClient = func(lggr logger.Logger, cprivk csakey.KeyV2, spubk []byte, surl string, cs cache.CacheSet) Client {
return newMockClient(lggr)
}
// conn 1
c1 := mustCheckout(t, p, clientPrivKeys[0], serverPubKey, serverURLs[0])
c2 := mustCheckout(t, p, clientPrivKeys[0], serverPubKey, serverURLs[0])
c3 := mustCheckout(t, p, clientPrivKeys[0], serverPubKey, serverURLs[0])
assert.Len(t, p.connections, 1)
assert.Len(t, p.connections[serverURLs[0]], 1)
assert.Len(t, p.connections[serverURLs[1]], 0)
// conn 2
c4 := mustCheckout(t, p, clientPrivKeys[1], serverPubKey, serverURLs[0])
assert.Len(t, p.connections, 1)
assert.Len(t, p.connections[serverURLs[0]], 2)
assert.Len(t, p.connections[serverURLs[1]], 0)
// conn 3
c5 := mustCheckout(t, p, clientPrivKeys[0], serverPubKey, serverURLs[1])
c6 := mustCheckout(t, p, clientPrivKeys[0], serverPubKey, serverURLs[1])
assert.Len(t, p.connections, 2)
assert.Len(t, p.connections[serverURLs[0]], 2)
assert.Len(t, p.connections[serverURLs[1]], 1)
conn1 := c1.(*clientCheckout).connection
assert.Same(t, conn1, c2.(*clientCheckout).connection)
assert.Same(t, conn1, c3.(*clientCheckout).connection)
assert.Len(t, conn1.checkouts, 3)
assert.True(t, conn1.Client.(*mockClient).started)
conn2 := c4.(*clientCheckout).connection
assert.NotEqual(t, conn1, conn2)
assert.Len(t, conn2.checkouts, 1)
assert.True(t, conn2.Client.(*mockClient).started)
conn3 := c5.(*clientCheckout).connection
assert.NotEqual(t, conn1, conn3)
assert.NotEqual(t, conn2, conn3)
assert.Same(t, conn3, c6.(*clientCheckout).connection)
assert.Len(t, conn3.checkouts, 2)
assert.True(t, conn3.Client.(*mockClient).started)
require.NoError(t, c1.Close())
assert.Len(t, conn1.checkouts, 2)
assert.NotNil(t, conn1.Client)
assert.Len(t, p.connections, 2)
assert.Len(t, p.connections[serverURLs[0]], 2)
assert.Len(t, p.connections[serverURLs[1]], 1)
require.NoError(t, c2.Close())
assert.Len(t, conn1.checkouts, 1)
assert.NotNil(t, conn1.Client)
assert.Len(t, p.connections, 2)
assert.Len(t, p.connections[serverURLs[0]], 2)
assert.Len(t, p.connections[serverURLs[1]], 1)
require.NoError(t, c3.Close())
assert.Len(t, conn1.checkouts, 0)
assert.Nil(t, conn1.Client)
assert.Len(t, p.connections, 2)
assert.Len(t, p.connections[serverURLs[0]], 1)
assert.Len(t, p.connections[serverURLs[1]], 1)
c7 := mustCheckout(t, p, clientPrivKeys[0], serverPubKey, serverURLs[0])
// Not the same one, since previously all checkouts were checked in, the original connection was deleted from the map and a new one created
assert.NotSame(t, conn1, c7.(*clientCheckout).connection)
assert.Len(t, conn1.checkouts, 0) // actually, conn1 has already been removed from the map and will be garbage collected
conn4 := c7.(*clientCheckout).connection
assert.Len(t, conn4.checkouts, 1)
assert.NotNil(t, conn4.Client)
assert.Len(t, p.connections, 2)
assert.Len(t, p.connections[serverURLs[0]], 2)
assert.Len(t, p.connections[serverURLs[1]], 1)
require.NoError(t, c7.Close())
assert.Len(t, p.connections, 2)
assert.Len(t, p.connections[serverURLs[0]], 1)
assert.Len(t, p.connections[serverURLs[1]], 1)
require.NoError(t, c4.Close())
assert.Len(t, p.connections, 1)
assert.Len(t, p.connections[serverURLs[0]], 0)
assert.Len(t, p.connections[serverURLs[1]], 1)
require.NoError(t, c5.Close())
require.NoError(t, c6.Close())
assert.Len(t, p.connections, 0)
require.NoError(t, p.Close())
})
})`
$DIR/core/services/relay/evm/mercury/wsrpc/pool_test.go: `p.cacheSet = &mockCacheSet{}`
$DIR/core/services/relay/evm/mercury/wsrpc/pool_test.go: `t.Run("checks out one started client", func(t *testing.T) {
clientPrivKey := csakey.MustNewV2XXXTestingOnly(big.NewInt(rand.Int63()))
serverPubKey := utils.NewHash().Bytes()
serverURL := "example.com:443/ws"
client := newMockClient(lggr)
p.newClient = func(lggr logger.Logger, cprivk csakey.KeyV2, spubk []byte, surl string, cs cache.CacheSet) Client {
assert.Equal(t, clientPrivKey, cprivk)
assert.Equal(t, serverPubKey, spubk)
assert.Equal(t, serverURL, surl)
return client
}
c, err := p.Checkout(ctx, clientPrivKey, serverPubKey, serverURL)
require.NoError(t, err)
assert.True(t, client.started)
require.IsType(t, &clientCheckout{}, c)
conn := c.(*clientCheckout).connection
require.Equal(t, conn.Client, client)
assert.Len(t, conn.checkouts, 1)
assert.Same(t, lggr, conn.lggr)
assert.Equal(t, clientPrivKey, conn.clientPrivKey)
assert.Equal(t, serverPubKey, conn.serverPubKey)
assert.Equal(t, serverURL, conn.serverURL)
assert.Same(t, p, conn.pool)
t.Run("checks in the clientCheckout when Close is called", func(t *testing.T) {
err := c.Close()
require.NoError(t, err)
assert.Len(t, conn.checkouts, 0)
require.IsType(t, nil, conn.Client)
assert.Nil(t, conn.Client)
assert.True(t, client.closed)
})
})`
$DIR/core/services/relay/evm/mercury/wsrpc/pool_test.go: `t.Run("checks in the clientCheckout when Close is called", func(t *testing.T) {
err := c.Close()
require.NoError(t, err)
assert.Len(t, conn.checkouts, 0)
require.IsType(t, nil, conn.Client)
assert.Nil(t, conn.Client)
assert.True(t, client.closed)
})`
$DIR/core/services/relay/evm/mercury/wsrpc/pool_test.go: `t.Run("checks out multiple started clients and only closes if all of the clients for a given pk/server pair are checked back in", func(t *testing.T) {
clientPrivKeys := []csakey.KeyV2{
csakey.MustNewV2XXXTestingOnly(big.NewInt(rand.Int63())),
csakey.MustNewV2XXXTestingOnly(big.NewInt(rand.Int63())),
}
serverPubKey := utils.NewHash().Bytes()
serverURLs := []string{
"example.com:443/ws",
"example.invalid:8000/ws",
}
p.newClient = func(lggr logger.Logger, cprivk csakey.KeyV2, spubk []byte, surl string, cs cache.CacheSet) Client {
return newMockClient(lggr)
}
// conn 1
c1 := mustCheckout(t, p, clientPrivKeys[0], serverPubKey, serverURLs[0])
c2 := mustCheckout(t, p, clientPrivKeys[0], serverPubKey, serverURLs[0])
c3 := mustCheckout(t, p, clientPrivKeys[0], serverPubKey, serverURLs[0])
assert.Len(t, p.connections, 1)
assert.Len(t, p.connections[serverURLs[0]], 1)
assert.Len(t, p.connections[serverURLs[1]], 0)
// conn 2
c4 := mustCheckout(t, p, clientPrivKeys[1], serverPubKey, serverURLs[0])
assert.Len(t, p.connections, 1)
assert.Len(t, p.connections[serverURLs[0]], 2)
assert.Len(t, p.connections[serverURLs[1]], 0)
// conn 3
c5 := mustCheckout(t, p, clientPrivKeys[0], serverPubKey, serverURLs[1])
c6 := mustCheckout(t, p, clientPrivKeys[0], serverPubKey, serverURLs[1])
assert.Len(t, p.connections, 2)
assert.Len(t, p.connections[serverURLs[0]], 2)
assert.Len(t, p.connections[serverURLs[1]], 1)
conn1 := c1.(*clientCheckout).connection
assert.Same(t, conn1, c2.(*clientCheckout).connection)
assert.Same(t, conn1, c3.(*clientCheckout).connection)
assert.Len(t, conn1.checkouts, 3)
assert.True(t, conn1.Client.(*mockClient).started)
conn2 := c4.(*clientCheckout).connection
assert.NotEqual(t, conn1, conn2)
assert.Len(t, conn2.checkouts, 1)
assert.True(t, conn2.Client.(*mockClient).started)
conn3 := c5.(*clientCheckout).connection
assert.NotEqual(t, conn1, conn3)
assert.NotEqual(t, conn2, conn3)
assert.Same(t, conn3, c6.(*clientCheckout).connection)
assert.Len(t, conn3.checkouts, 2)
assert.True(t, conn3.Client.(*mockClient).started)
require.NoError(t, c1.Close())
assert.Len(t, conn1.checkouts, 2)
assert.NotNil(t, conn1.Client)
assert.Len(t, p.connections, 2)
assert.Len(t, p.connections[serverURLs[0]], 2)
assert.Len(t, p.connections[serverURLs[1]], 1)
require.NoError(t, c2.Close())
assert.Len(t, conn1.checkouts, 1)
assert.NotNil(t, conn1.Client)
assert.Len(t, p.connections, 2)
assert.Len(t, p.connections[serverURLs[0]], 2)
assert.Len(t, p.connections[serverURLs[1]], 1)
require.NoError(t, c3.Close())
assert.Len(t, conn1.checkouts, 0)
assert.Nil(t, conn1.Client)
assert.Len(t, p.connections, 2)
assert.Len(t, p.connections[serverURLs[0]], 1)
assert.Len(t, p.connections[serverURLs[1]], 1)
c7 := mustCheckout(t, p, clientPrivKeys[0], serverPubKey, serverURLs[0])
// Not the same one, since previously all checkouts were checked in, the original connection was deleted from the map and a new one created
assert.NotSame(t, conn1, c7.(*clientCheckout).connection)
assert.Len(t, conn1.checkouts, 0) // actually, conn1 has already been removed from the map and will be garbage collected
conn4 := c7.(*clientCheckout).connection
assert.Len(t, conn4.checkouts, 1)
assert.NotNil(t, conn4.Client)
assert.Len(t, p.connections, 2)
assert.Len(t, p.connections[serverURLs[0]], 2)
assert.Len(t, p.connections[serverURLs[1]], 1)
require.NoError(t, c7.Close())
assert.Len(t, p.connections, 2)
assert.Len(t, p.connections[serverURLs[0]], 1)
assert.Len(t, p.connections[serverURLs[1]], 1)
require.NoError(t, c4.Close())
assert.Len(t, p.connections, 1)
assert.Len(t, p.connections[serverURLs[0]], 0)
assert.Len(t, p.connections[serverURLs[1]], 1)
require.NoError(t, c5.Close())
require.NoError(t, c6.Close())
assert.Len(t, p.connections, 0)
require.NoError(t, p.Close())
})`
$DIR/core/services/relay/evm/mercury/wsrpc/pool_test.go: `p.cacheSet = &mockCacheSet{}`
$DIR/core/services/relay/evm/mercury/wsrpc/pool_test.go: `t.Run("Name", func(t *testing.T) {
assert.Equal(t, "PoolTestLogger", p.Name())
})`
$DIR/core/services/relay/evm/mercury/wsrpc/pool_test.go: `t.Run("Start", func(t *testing.T) {
require.NoError(t, p.Start(ctx))
assert.Nil(t, p.Ready())
assert.Nil(t, p.HealthReport()["PoolTestLogger"])
})`
$DIR/core/services/relay/evm/mercury/wsrpc/pool_test.go: `clients = append(clients, c)`
$DIR/core/services/relay/evm/mercury/wsrpc/pool_test.go: `mustCheckout(t, p, clientPrivKeys[0], serverPubKey, serverURLs[0])`
$DIR/core/services/relay/evm/mercury/wsrpc/pool_test.go: `mustCheckout(t, p, clientPrivKeys[0], serverPubKey, serverURLs[0])`
$DIR/core/services/relay/evm/mercury/wsrpc/pool_test.go: `mustCheckout(t, p, clientPrivKeys[0], serverPubKey, serverURLs[0])`
$DIR/core/services/relay/evm/mercury/wsrpc/pool_test.go: `mustCheckout(t, p, clientPrivKeys[1], serverPubKey, serverURLs[0])`
$DIR/core/services/relay/evm/mercury/wsrpc/pool_test.go: `mustCheckout(t, p, clientPrivKeys[0], serverPubKey, serverURLs[1])`
$DIR/core/services/relay/evm/mercury/wsrpc/pool_test.go: `mustCheckout(t, p, clientPrivKeys[0], serverPubKey, serverURLs[1])`
$DIR/core/services/relay/evm/mercury/wsrpc/pool_test.go: `.TestLogger(t)`
$DIR/core/services/relay/evm/mercury/wsrpc/pool_test.go: `.Named("PoolTestLogger")`
$DIR/core/services/relay/evm/mercury/wsrpc/pool_test.go: `.Context(t)`
$DIR/core/services/relay/evm/mercury/wsrpc/pool_test.go: `.Run("Checkout", func(t *testing.T) {
p := newPool(lggr)
p.cacheSet = &mockCacheSet{}
t.Run("checks out one started client", func(t *testing.T) {
clientPrivKey := csakey.MustNewV2XXXTestingOnly(big.NewInt(rand.Int63()))
serverPubKey := utils.NewHash().Bytes()
serverURL := "example.com:443/ws"
client := newMockClient(lggr)
p.newClient = func(lggr logger.Logger, cprivk csakey.KeyV2, spubk []byte, surl string, cs cache.CacheSet) Client {
assert.Equal(t, clientPrivKey, cprivk)
assert.Equal(t, serverPubKey, spubk)
assert.Equal(t, serverURL, surl)
return client
}
c, err := p.Checkout(ctx, clientPrivKey, serverPubKey, serverURL)
require.NoError(t, err)
assert.True(t, client.started)
require.IsType(t, &clientCheckout{}, c)
conn := c.(*clientCheckout).connection
require.Equal(t, conn.Client, client)
assert.Len(t, conn.checkouts, 1)
assert.Same(t, lggr, conn.lggr)
assert.Equal(t, clientPrivKey, conn.clientPrivKey)
assert.Equal(t, serverPubKey, conn.serverPubKey)
assert.Equal(t, serverURL, conn.serverURL)
assert.Same(t, p, conn.pool)
t.Run("checks in the clientCheckout when Close is called", func(t *testing.T) {
err := c.Close()
require.NoError(t, err)
assert.Len(t, conn.checkouts, 0)
require.IsType(t, nil, conn.Client)
assert.Nil(t, conn.Client)
assert.True(t, client.closed)
})
})
t.Run("checks out multiple started clients and only closes if all of the clients for a given pk/server pair are checked back in", func(t *testing.T) {
clientPrivKeys := []csakey.KeyV2{
csakey.MustNewV2XXXTestingOnly(big.NewInt(rand.Int63())),
csakey.MustNewV2XXXTestingOnly(big.NewInt(rand.Int63())),
}
serverPubKey := utils.NewHash().Bytes()
serverURLs := []string{
"example.com:443/ws",
"example.invalid:8000/ws",
}
p.newClient = func(lggr logger.Logger, cprivk csakey.KeyV2, spubk []byte, surl string, cs cache.CacheSet) Client {
return newMockClient(lggr)
}
// conn 1
c1 := mustCheckout(t, p, clientPrivKeys[0], serverPubKey, serverURLs[0])
c2 := mustCheckout(t, p, clientPrivKeys[0], serverPubKey, serverURLs[0])
c3 := mustCheckout(t, p, clientPrivKeys[0], serverPubKey, serverURLs[0])
assert.Len(t, p.connections, 1)
assert.Len(t, p.connections[serverURLs[0]], 1)
assert.Len(t, p.connections[serverURLs[1]], 0)
// conn 2
c4 := mustCheckout(t, p, clientPrivKeys[1], serverPubKey, serverURLs[0])
assert.Len(t, p.connections, 1)
assert.Len(t, p.connections[serverURLs[0]], 2)
assert.Len(t, p.connections[serverURLs[1]], 0)
// conn 3
c5 := mustCheckout(t, p, clientPrivKeys[0], serverPubKey, serverURLs[1])
c6 := mustCheckout(t, p, clientPrivKeys[0], serverPubKey, serverURLs[1])
assert.Len(t, p.connections, 2)
assert.Len(t, p.connections[serverURLs[0]], 2)
assert.Len(t, p.connections[serverURLs[1]], 1)
conn1 := c1.(*clientCheckout).connection
assert.Same(t, conn1, c2.(*clientCheckout).connection)
assert.Same(t, conn1, c3.(*clientCheckout).connection)
assert.Len(t, conn1.checkouts, 3)
assert.True(t, conn1.Client.(*mockClient).started)
conn2 := c4.(*clientCheckout).connection
assert.NotEqual(t, conn1, conn2)
assert.Len(t, conn2.checkouts, 1)
assert.True(t, conn2.Client.(*mockClient).started)
conn3 := c5.(*clientCheckout).connection
assert.NotEqual(t, conn1, conn3)
assert.NotEqual(t, conn2, conn3)
assert.Same(t, conn3, c6.(*clientCheckout).connection)
assert.Len(t, conn3.checkouts, 2)
assert.True(t, conn3.Client.(*mockClient).started)
require.NoError(t, c1.Close())
assert.Len(t, conn1.checkouts, 2)
assert.NotNil(t, conn1.Client)
assert.Len(t, p.connections, 2)
assert.Len(t, p.connections[serverURLs[0]], 2)
assert.Len(t, p.connections[serverURLs[1]], 1)
require.NoError(t, c2.Close())
assert.Len(t, conn1.checkouts, 1)
assert.NotNil(t, conn1.Client)
assert.Len(t, p.connections, 2)
assert.Len(t, p.connections[serverURLs[0]], 2)
assert.Len(t, p.connections[serverURLs[1]], 1)
require.NoError(t, c3.Close())
assert.Len(t, conn1.checkouts, 0)
assert.Nil(t, conn1.Client)
assert.Len(t, p.connections, 2)
assert.Len(t, p.connections[serverURLs[0]], 1)
assert.Len(t, p.connections[serverURLs[1]], 1)
c7 := mustCheckout(t, p, clientPrivKeys[0], serverPubKey, serverURLs[0])
// Not the same one, since previously all checkouts were checked in, the original connection was deleted from the map and a new one created
assert.NotSame(t, conn1, c7.(*clientCheckout).connection)
assert.Len(t, conn1.checkouts, 0) // actually, conn1 has already been removed from the map and will be garbage collected
conn4 := c7.(*clientCheckout).connection
assert.Len(t, conn4.checkouts, 1)
assert.NotNil(t, conn4.Client)
assert.Len(t, p.connections, 2)
assert.Len(t, p.connections[serverURLs[0]], 2)
assert.Len(t, p.connections[serverURLs[1]], 1)
require.NoError(t, c7.Close())
assert.Len(t, p.connections, 2)
assert.Len(t, p.connections[serverURLs[0]], 1)
assert.Len(t, p.connections[serverURLs[1]], 1)
require.NoError(t, c4.Close())
assert.Len(t, p.connections, 1)
assert.Len(t, p.connections[serverURLs[0]], 0)
assert.Len(t, p.connections[serverURLs[1]], 1)
require.NoError(t, c5.Close())
require.NoError(t, c6.Close())
assert.Len(t, p.connections, 0)
require.NoError(t, p.Close())
})
})`
$DIR/core/services/relay/evm/mercury/wsrpc/pool_test.go: `.Run("checks out one started client", func(t *testing.T) {
clientPrivKey := csakey.MustNewV2XXXTestingOnly(big.NewInt(rand.Int63()))
serverPubKey := utils.NewHash().Bytes()
serverURL := "example.com:443/ws"
client := newMockClient(lggr)
p.newClient = func(lggr logger.Logger, cprivk csakey.KeyV2, spubk []byte, surl string, cs cache.CacheSet) Client {
assert.Equal(t, clientPrivKey, cprivk)
assert.Equal(t, serverPubKey, spubk)
assert.Equal(t, serverURL, surl)
return client
}
c, err := p.Checkout(ctx, clientPrivKey, serverPubKey, serverURL)
require.NoError(t, err)
assert.True(t, client.started)
require.IsType(t, &clientCheckout{}, c)
conn := c.(*clientCheckout).connection
require.Equal(t, conn.Client, client)
assert.Len(t, conn.checkouts, 1)
assert.Same(t, lggr, conn.lggr)
assert.Equal(t, clientPrivKey, conn.clientPrivKey)
assert.Equal(t, serverPubKey, conn.serverPubKey)
assert.Equal(t, serverURL, conn.serverURL)
assert.Same(t, p, conn.pool)
t.Run("checks in the clientCheckout when Close is called", func(t *testing.T) {
err := c.Close()
require.NoError(t, err)
assert.Len(t, conn.checkouts, 0)
require.IsType(t, nil, conn.Client)
assert.Nil(t, conn.Client)
assert.True(t, client.closed)
})
})`
$DIR/core/services/relay/evm/mercury/wsrpc/pool_test.go: `.MustNewV2XXXTestingOnly(big.NewInt(rand.Int63()))`
$DIR/core/services/relay/evm/mercury/wsrpc/pool_test.go: `.NewInt(rand.Int63())`
$DIR/core/services/relay/evm/mercury/wsrpc/pool_test.go: `.Int63()`
$DIR/core/services/relay/evm/mercury/wsrpc/pool_test.go: `.NewHash()`
$DIR/core/services/relay/evm/mercury/wsrpc/pool_test.go: `.Bytes()`
$DIR/core/services/relay/evm/mercury/wsrpc/pool_test.go: `.Checkout(ctx, clientPrivKey, serverPubKey, serverURL)`
$DIR/core/services/relay/evm/mercury/wsrpc/pool_test.go: `.Run("checks in the clientCheckout when Close is called", func(t *testing.T) {
err := c.Close()
require.NoError(t, err)
assert.Len(t, conn.checkouts, 0)
require.IsType(t, nil, conn.Client)
assert.Nil(t, conn.Client)
assert.True(t, client.closed)
})`
$DIR/core/services/relay/evm/mercury/wsrpc/pool_test.go: `.Run("checks out multiple started clients and only closes if all of the clients for a given pk/server pair are checked back in", func(t *testing.T) {
clientPrivKeys := []csakey.KeyV2{
csakey.MustNewV2XXXTestingOnly(big.NewInt(rand.Int63())),
csakey.MustNewV2XXXTestingOnly(big.NewInt(rand.Int63())),
}
serverPubKey := utils.NewHash().Bytes()
serverURLs := []string{
"example.com:443/ws",
"example.invalid:8000/ws",
}
p.newClient = func(lggr logger.Logger, cprivk csakey.KeyV2, spubk []byte, surl string, cs cache.CacheSet) Client {
return newMockClient(lggr)
}
// conn 1
c1 := mustCheckout(t, p, clientPrivKeys[0], serverPubKey, serverURLs[0])
c2 := mustCheckout(t, p, clientPrivKeys[0], serverPubKey, serverURLs[0])
c3 := mustCheckout(t, p, clientPrivKeys[0], serverPubKey, serverURLs[0])
assert.Len(t, p.connections, 1)
assert.Len(t, p.connections[serverURLs[0]], 1)
assert.Len(t, p.connections[serverURLs[1]], 0)
// conn 2
c4 := mustCheckout(t, p, clientPrivKeys[1], serverPubKey, serverURLs[0])
assert.Len(t, p.connections, 1)
assert.Len(t, p.connections[serverURLs[0]], 2)
assert.Len(t, p.connections[serverURLs[1]], 0)
// conn 3
c5 := mustCheckout(t, p, clientPrivKeys[0], serverPubKey, serverURLs[1])
c6 := mustCheckout(t, p, clientPrivKeys[0], serverPubKey, serverURLs[1])
assert.Len(t, p.connections, 2)
assert.Len(t, p.connections[serverURLs[0]], 2)
assert.Len(t, p.connections[serverURLs[1]], 1)
conn1 := c1.(*clientCheckout).connection
assert.Same(t, conn1, c2.(*clientCheckout).connection)
assert.Same(t, conn1, c3.(*clientCheckout).connection)
assert.Len(t, conn1.checkouts, 3)
assert.True(t, conn1.Client.(*mockClient).started)
conn2 := c4.(*clientCheckout).connection
assert.NotEqual(t, conn1, conn2)
assert.Len(t, conn2.checkouts, 1)
assert.True(t, conn2.Client.(*mockClient).started)
conn3 := c5.(*clientCheckout).connection
assert.NotEqual(t, conn1, conn3)
assert.NotEqual(t, conn2, conn3)
assert.Same(t, conn3, c6.(*clientCheckout).connection)
assert.Len(t, conn3.checkouts, 2)
assert.True(t, conn3.Client.(*mockClient).started)
require.NoError(t, c1.Close())
assert.Len(t, conn1.checkouts, 2)
assert.NotNil(t, conn1.Client)
assert.Len(t, p.connections, 2)
assert.Len(t, p.connections[serverURLs[0]], 2)
assert.Len(t, p.connections[serverURLs[1]], 1)
require.NoError(t, c2.Close())
assert.Len(t, conn1.checkouts, 1)
assert.NotNil(t, conn1.Client)
assert.Len(t, p.connections, 2)
assert.Len(t, p.connections[serverURLs[0]], 2)
assert.Len(t, p.connections[serverURLs[1]], 1)
require.NoError(t, c3.Close())
assert.Len(t, conn1.checkouts, 0)
assert.Nil(t, conn1.Client)
assert.Len(t, p.connections, 2)
assert.Len(t, p.connections[serverURLs[0]], 1)
assert.Len(t, p.connections[serverURLs[1]], 1)
c7 := mustCheckout(t, p, clientPrivKeys[0], serverPubKey, serverURLs[0])
// Not the same one, since previously all checkouts were checked in, the original connection was deleted from the map and a new one created
assert.NotSame(t, conn1, c7.(*clientCheckout).connection)
assert.Len(t, conn1.checkouts, 0) // actually, conn1 has already been removed from the map and will be garbage collected
conn4 := c7.(*clientCheckout).connection
assert.Len(t, conn4.checkouts, 1)
assert.NotNil(t, conn4.Client)
assert.Len(t, p.connections, 2)
assert.Len(t, p.connections[serverURLs[0]], 2)
assert.Len(t, p.connections[serverURLs[1]], 1)
require.NoError(t, c7.Close())
assert.Len(t, p.connections, 2)
assert.Len(t, p.connections[serverURLs[0]], 1)
assert.Len(t, p.connections[serverURLs[1]], 1)
require.NoError(t, c4.Close())
assert.Len(t, p.connections, 1)
assert.Len(t, p.connections[serverURLs[0]], 0)
assert.Len(t, p.connections[serverURLs[1]], 1)
require.NoError(t, c5.Close())
require.NoError(t, c6.Close())
assert.Len(t, p.connections, 0)
require.NoError(t, p.Close())
})`
$DIR/core/services/relay/evm/mercury/wsrpc/pool_test.go: `.MustNewV2XXXTestingOnly(big.NewInt(rand.Int63()))`
$DIR/core/services/relay/evm/mercury/wsrpc/pool_test.go: `.NewInt(rand.Int63())`
$DIR/core/services/relay/evm/mercury/wsrpc/pool_test.go: `.Int63()`
$DIR/core/services/relay/evm/mercury/wsrpc/pool_test.go: `.MustNewV2XXXTestingOnly(big.NewInt(rand.Int63()))`
$DIR/core/services/relay/evm/mercury/wsrpc/pool_test.go: `.NewInt(rand.Int63())`
$DIR/core/services/relay/evm/mercury/wsrpc/pool_test.go: `.Int63()`
$DIR/core/services/relay/evm/mercury/wsrpc/pool_test.go: `.NewHash()`
$DIR/core/services/relay/evm/mercury/wsrpc/pool_test.go: `.Bytes()`
$DIR/core/services/relay/evm/mercury/wsrpc/pool_test.go: `.Run("Name", func(t *testing.T) {
assert.Equal(t, "PoolTestLogger", p.Name())
})`
$DIR/core/services/relay/evm/mercury/wsrpc/pool_test.go: `.Run("Start", func(t *testing.T) {
require.NoError(t, p.Start(ctx))
assert.Nil(t, p.Ready())
assert.Nil(t, p.HealthReport()["PoolTestLogger"])
})`
$DIR/core/services/relay/evm/mercury/wsrpc/pool_test.go: `.MustNewV2XXXTestingOnly(big.NewInt(rand.Int63()))`
$DIR/core/services/relay/evm/mercury/wsrpc/pool_test.go: `.NewInt(rand.Int63())`
$DIR/core/services/relay/evm/mercury/wsrpc/pool_test.go: `.Int63()`
$DIR/core/services/relay/evm/mercury/wsrpc/pool_test.go: `.MustNewV2XXXTestingOnly(big.NewInt(rand.Int63()))`
$DIR/core/services/relay/evm/mercury/wsrpc/pool_test.go: `.NewInt(rand.Int63())`
$DIR/core/services/relay/evm/mercury/wsrpc/pool_test.go: `.Int63()`
$DIR/core/services/relay/evm/mercury/wsrpc/pool_test.go: `.NewHash()`
$DIR/core/services/relay/evm/mercury/wsrpc/pool_test.go: `.Bytes()`
$DIR/core/services/relay/evm/relayer_extender_test.go: `c.EVM[0].MinIncomingConfirmations = &one`
$DIR/core/services/relay/evm/relayer_extender_test.go: `c.EVM = append(c.EVM, &toml.EVMConfig{ChainID: ubig.New(newId), Enabled: &t, Chain: toml.Defaults(nil)})`
$DIR/core/services/relay/evm/relayer_extender_test.go: `relayExtendersInstances[0].Chain().Client().(*evmclimocks.Client).AssertCalled(t, "Close")`
$DIR/core/services/relay/evm/relayer_extender_test.go: `relayExtendersInstances[1].Chain().Client().(*evmclimocks.Client).AssertCalled(t, "Close")`
$DIR/core/services/relay/evm/relayer_extender_test.go: `.Context(t)`
$DIR/core/services/relay/evm/relayer_extender_test.go: `.NewRandomEVMChainID()`
$DIR/core/services/relay/evm/relayer_extender_test.go: `.NewGeneralConfig(t, func(c *chainlink.Config, s *chainlink.Secrets) {
one := uint32(1)
c.EVM[0].MinIncomingConfirmations = &one
t := true
c.EVM = append(c.EVM, &toml.EVMConfig{ChainID: ubig.New(newId), Enabled: &t, Chain: toml.Defaults(nil)})
})`
$DIR/core/services/relay/evm/relayer_extender_test.go: `.New(newId)`
$DIR/core/services/relay/evm/relayer_extender_test.go: `.Defaults(nil)`
$DIR/core/services/relay/evm/relayer_extender_test.go: `.NewSqlxDB(t)`
$DIR/core/services/relay/evm/relayer_extender_test.go: `.NewKeyStore(t, db)`
$DIR/core/services/relay/evm/relayer_extender_test.go: `.NewChainRelayExtOpts(t, evmtest.TestChainOpts{DB: db, KeyStore: kst.Eth(), GeneralConfig: cfg})`
$DIR/core/services/relay/evm/relayer_extender_test.go: `.Eth()`
$DIR/core/services/relay/evm/relayer_extender_test.go: `.NewEthMocksWithStartupAssertions(t)`
$DIR/core/services/relay/evm/relayer_extender_test.go: `.NewChainRelayerExtenders(testutils.Context(t), opts)`
$DIR/core/services/relay/evm/relayer_extender_test.go: `.Context(t)`
$DIR/core/services/relay/evm/relayer_extender_test.go: `.Slice()`
$DIR/core/services/relay/evm/relayer_extender_test.go: `.Chain()`
$DIR/core/services/relay/evm/relayer_extender_test.go: `.Client()`
$DIR/core/services/relay/evm/relayer_extender_test.go: `.AssertCalled(t, "Close")`
$DIR/core/services/relay/evm/relayer_extender_test.go: `.Chain()`
$DIR/core/services/relay/evm/relayer_extender_test.go: `.Client()`
$DIR/core/services/relay/evm/relayer_extender_test.go: `.AssertCalled(t, "Close")`
$DIR/core/services/relay/evm/relayer_extender_test.go: `.GetChainStatus(testutils.Context(t))`
$DIR/core/services/relay/evm/relayer_extender_test.go: `.Context(t)`
$DIR/core/services/relay/evm/request_round_db_test.go: `t.Run("saves latest round requested", func(t *testing.T) {
ctx := testutils.Context(t)
err := db.SaveLatestRoundRequested(ctx, rr)
require.NoError(t, err)
rawLog.Index = 42
// Now overwrite to prove that updating works
rr = ocr2aggregator.OCR2AggregatorRoundRequested{
Requester: testutils.NewAddress(),
ConfigDigest: testhelpers.MakeConfigDigest(t),
Epoch: 43,
Round: 8,
Raw: rawLog,
}
err = db.SaveLatestRoundRequested(ctx, rr)
require.NoError(t, err)
})`
$DIR/core/services/relay/evm/request_round_db_test.go: `rawLog.Index = 42`
$DIR/core/services/relay/evm/request_round_db_test.go: `rr = ocr2aggregator.OCR2AggregatorRoundRequested{
Requester: testutils.NewAddress(),
ConfigDigest: testhelpers.MakeConfigDigest(t),
Epoch: 43,
Round: 8,
Raw: rawLog,
}`
$DIR/core/services/relay/evm/request_round_db_test.go: `err = db.SaveLatestRoundRequested(ctx, rr)`
$DIR/core/services/relay/evm/request_round_db_test.go: `t.Run("loads latest round requested", func(t *testing.T) {
ctx := testutils.Context(t)
// There is no round for db2
lrr, err := db2.LoadLatestRoundRequested(ctx)
require.NoError(t, err)
require.Equal(t, 0, int(lrr.Epoch))
lrr, err = db.LoadLatestRoundRequested(ctx)
require.NoError(t, err)
assert.Equal(t, rr, lrr)
})`
$DIR/core/services/relay/evm/request_round_db_test.go: `lrr, err = db.LoadLatestRoundRequested(ctx)`
$DIR/core/services/relay/evm/request_round_db_test.go: `.NewSqlxDB(t)`
$DIR/core/services/relay/evm/request_round_db_test.go: `.Exec(`SET CONSTRAINTS offchainreporting2_latest_round_oracle_spec_fkey DEFERRED`)`
$DIR/core/services/relay/evm/request_round_db_test.go: `.TestLogger(t)`
$DIR/core/services/relay/evm/request_round_db_test.go: `.NewRoundRequestedDB(sqlDB, 1, lggr)`
$DIR/core/services/relay/evm/request_round_db_test.go: `.NewRoundRequestedDB(sqlDB, 2, lggr)`
$DIR/core/services/relay/evm/request_round_db_test.go: `.LogFromFixture(t, "../../../testdata/jsonrpc/round_requested_log_1_1.json")`
$DIR/core/services/relay/evm/request_round_db_test.go: `.NewAddress()`
$DIR/core/services/relay/evm/request_round_db_test.go: `.MakeConfigDigest(t)`
$DIR/core/services/relay/evm/request_round_db_test.go: `.Run("saves latest round requested", func(t *testing.T) {
ctx := testutils.Context(t)
err := db.SaveLatestRoundRequested(ctx, rr)
require.NoError(t, err)
rawLog.Index = 42
// Now overwrite to prove that updating works
rr = ocr2aggregator.OCR2AggregatorRoundRequested{
Requester: testutils.NewAddress(),
ConfigDigest: testhelpers.MakeConfigDigest(t),
Epoch: 43,
Round: 8,
Raw: rawLog,
}
err = db.SaveLatestRoundRequested(ctx, rr)
require.NoError(t, err)
})`
$DIR/core/services/relay/evm/request_round_db_test.go: `.Context(t)`
$DIR/core/services/relay/evm/request_round_db_test.go: `.SaveLatestRoundRequested(ctx, rr)`
$DIR/core/services/relay/evm/request_round_db_test.go: `.NewAddress()`
$DIR/core/services/relay/evm/request_round_db_test.go: `.MakeConfigDigest(t)`
$DIR/core/services/relay/evm/request_round_db_test.go: `.SaveLatestRoundRequested(ctx, rr)`
$DIR/core/services/relay/evm/request_round_db_test.go: `.Run("loads latest round requested", func(t *testing.T) {
ctx := testutils.Context(t)
// There is no round for db2
lrr, err := db2.LoadLatestRoundRequested(ctx)
require.NoError(t, err)
require.Equal(t, 0, int(lrr.Epoch))
lrr, err = db.LoadLatestRoundRequested(ctx)
require.NoError(t, err)
assert.Equal(t, rr, lrr)
})`
$DIR/core/services/relay/evm/request_round_db_test.go: `.Context(t)`
$DIR/core/services/relay/evm/request_round_db_test.go: `.LoadLatestRoundRequested(ctx)`
$DIR/core/services/relay/evm/request_round_db_test.go: `.LoadLatestRoundRequested(ctx)`
$DIR/core/services/relay/evm/request_round_db_test.go: `.Exec(`DELETE FROM ocr2_oracle_specs`)`
$DIR/core/services/relay/evm/request_round_tracker_test.go: `t.Run("does not update if contract address doesn't match", func(t *testing.T) {
uni := newContractTrackerUni(t)
logBroadcast := logmocks.NewBroadcast(t)
rawLog := cltest.LogFromFixture(t, "../../../testdata/jsonrpc/ocr2_round_requested_log_1_1.json")
logBroadcast.On("RawLog").Return(rawLog).Maybe()
logBroadcast.On("String").Return("").Maybe()
uni.lb.On("MarkConsumed", mock.Anything, mock.Anything, mock.Anything).Return(nil)
uni.lb.On("WasAlreadyConsumed", mock.Anything, mock.Anything).Return(false, nil)
configDigest, epoch, round, err := uni.requestRoundTracker.LatestRoundRequested(testutils.Context(t), 0)
require.NoError(t, err)
require.Equal(t, ocrtypes.ConfigDigest{}, configDigest)
require.Equal(t, 0, int(round))
require.Equal(t, 0, int(epoch))
uni.requestRoundTracker.HandleLog(tests.Context(t), logBroadcast)
configDigest, epoch, round, err = uni.requestRoundTracker.LatestRoundRequested(testutils.Context(t), 0)
require.NoError(t, err)
require.Equal(t, ocrtypes.ConfigDigest{}, configDigest)
require.Equal(t, 0, int(round))
require.Equal(t, 0, int(epoch))
})`
$DIR/core/services/relay/evm/request_round_tracker_test.go: `logBroadcast.On("RawLog").Return(rawLog).Maybe()`
$DIR/core/services/relay/evm/request_round_tracker_test.go: `logBroadcast.On("String").Return("").Maybe()`
$DIR/core/services/relay/evm/request_round_tracker_test.go: `uni.lb.On("MarkConsumed", mock.Anything, mock.Anything, mock.Anything).Return(nil)`
$DIR/core/services/relay/evm/request_round_tracker_test.go: `uni.lb.On("WasAlreadyConsumed", mock.Anything, mock.Anything).Return(false, nil)`
$DIR/core/services/relay/evm/request_round_tracker_test.go: `uni.requestRoundTracker.HandleLog(tests.Context(t), logBroadcast)`
$DIR/core/services/relay/evm/request_round_tracker_test.go: `configDigest, epoch, round, err = uni.requestRoundTracker.LatestRoundRequested(testutils.Context(t), 0)`
$DIR/core/services/relay/evm/request_round_tracker_test.go: `t.Run("does nothing if log has already been consumed", func(t *testing.T) {
uni := newContractTrackerUni(t, fixtureFilterer, fixtureContract)
logBroadcast := logmocks.NewBroadcast(t)
logBroadcast.On("String").Return("").Maybe()
uni.lb.On("WasAlreadyConsumed", mock.Anything, mock.Anything).Return(true, nil)
configDigest, epoch, round, err := uni.requestRoundTracker.LatestRoundRequested(testutils.Context(t), 0)
require.NoError(t, err)
require.Equal(t, ocrtypes.ConfigDigest{}, configDigest)
require.Equal(t, 0, int(round))
require.Equal(t, 0, int(epoch))
uni.requestRoundTracker.HandleLog(tests.Context(t), logBroadcast)
configDigest, epoch, round, err = uni.requestRoundTracker.LatestRoundRequested(testutils.Context(t), 0)
require.NoError(t, err)
require.Equal(t, ocrtypes.ConfigDigest{}, configDigest)
require.Equal(t, 0, int(round))
require.Equal(t, 0, int(epoch))
})`
$DIR/core/services/relay/evm/request_round_tracker_test.go: `logBroadcast.On("String").Return("").Maybe()`
$DIR/core/services/relay/evm/request_round_tracker_test.go: `uni.lb.On("WasAlreadyConsumed", mock.Anything, mock.Anything).Return(true, nil)`
$DIR/core/services/relay/evm/request_round_tracker_test.go: `uni.requestRoundTracker.HandleLog(tests.Context(t), logBroadcast)`
$DIR/core/services/relay/evm/request_round_tracker_test.go: `configDigest, epoch, round, err = uni.requestRoundTracker.LatestRoundRequested(testutils.Context(t), 0)`
$DIR/core/services/relay/evm/request_round_tracker_test.go: `t.Run("for new round requested log", func(t *testing.T) {
uni := newContractTrackerUni(t, fixtureFilterer, fixtureContract)
configDigest, epoch, round, err := uni.requestRoundTracker.LatestRoundRequested(testutils.Context(t), 0)
require.NoError(t, err)
require.Equal(t, ocrtypes.ConfigDigest{}, configDigest)
require.Equal(t, 0, int(round))
require.Equal(t, 0, int(epoch))
// Any round supercedes the 0 round
rawLog := cltest.LogFromFixture(t, "../../../testdata/jsonrpc/ocr2_round_requested_log_1_1.json")
logBroadcast := logmocks.NewBroadcast(t)
logBroadcast.On("RawLog").Return(rawLog).Maybe()
logBroadcast.On("String").Return("").Maybe()
uni.lb.On("WasAlreadyConsumed", mock.Anything, mock.Anything).Return(false, nil)
uni.lb.On("MarkConsumed", mock.Anything, mock.Anything, mock.Anything).Return(nil)
uni.db.On("SaveLatestRoundRequested", mock.Anything, mock.MatchedBy(func(rr ocr2aggregator.OCR2AggregatorRoundRequested) bool {
return rr.Epoch == 1 && rr.Round == 1
})).Return(nil)
uni.db.On("WithDataSource", mock.Anything).Return(uni.db)
uni.requestRoundTracker.HandleLog(tests.Context(t), logBroadcast)
configDigest, epoch, round, err = uni.requestRoundTracker.LatestRoundRequested(testutils.Context(t), 0)
require.NoError(t, err)
assert.Equal(t, "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa", configDigest.Hex())
assert.Equal(t, 1, int(epoch))
assert.Equal(t, 1, int(round))
// Same round with higher epoch supercedes
rawLog2 := cltest.LogFromFixture(t, "../../../testdata/jsonrpc/ocr2_round_requested_log_1_9.json")
logBroadcast2 := logmocks.NewBroadcast(t)
logBroadcast2.On("RawLog").Return(rawLog2).Maybe()
logBroadcast2.On("String").Return("").Maybe()
uni.lb.On("WasAlreadyConsumed", mock.Anything, mock.Anything).Return(false, nil)
uni.lb.On("MarkConsumed", mock.Anything, mock.Anything, mock.Anything).Return(nil)
uni.db.On("SaveLatestRoundRequested", mock.Anything, mock.MatchedBy(func(rr ocr2aggregator.OCR2AggregatorRoundRequested) bool {
return rr.Epoch == 1 && rr.Round == 9
})).Return(nil)
uni.requestRoundTracker.HandleLog(tests.Context(t), logBroadcast2)
configDigest, epoch, round, err = uni.requestRoundTracker.LatestRoundRequested(testutils.Context(t), 0)
require.NoError(t, err)
assert.Equal(t, "bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb", configDigest.Hex())
assert.Equal(t, 1, int(epoch))
assert.Equal(t, 9, int(round))
// Same round with lower epoch is ignored
uni.requestRoundTracker.HandleLog(tests.Context(t), logBroadcast)
configDigest, epoch, round, err = uni.requestRoundTracker.LatestRoundRequested(testutils.Context(t), 0)
require.NoError(t, err)
assert.Equal(t, "bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb", configDigest.Hex())
assert.Equal(t, 1, int(epoch))
assert.Equal(t, 9, int(round))
// Higher epoch with lower round supercedes
rawLog3 := cltest.LogFromFixture(t, "../../../testdata/jsonrpc/ocr2_round_requested_log_2_1.json")
rawLog3.Address = fixtureContract.Address()
logBroadcast3 := logmocks.NewBroadcast(t)
logBroadcast3.On("RawLog").Return(rawLog3).Maybe()
logBroadcast3.On("String").Return("").Maybe()
uni.lb.On("WasAlreadyConsumed", mock.Anything, mock.Anything).Return(false, nil)
uni.lb.On("MarkConsumed", mock.Anything, mock.Anything, mock.Anything).Return(nil)
uni.db.On("SaveLatestRoundRequested", mock.Anything, mock.MatchedBy(func(rr ocr2aggregator.OCR2AggregatorRoundRequested) bool {
return rr.Epoch == 2 && rr.Round == 1
})).Return(nil)
uni.requestRoundTracker.HandleLog(tests.Context(t), logBroadcast3)
configDigest, epoch, round, err = uni.requestRoundTracker.LatestRoundRequested(testutils.Context(t), 0)
require.NoError(t, err)
assert.Equal(t, "cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc", configDigest.Hex())
assert.Equal(t, 2, int(epoch))
assert.Equal(t, 1, int(round))
})`
$DIR/core/services/relay/evm/request_round_tracker_test.go: `logBroadcast.On("RawLog").Return(rawLog).Maybe()`
$DIR/core/services/relay/evm/request_round_tracker_test.go: `logBroadcast.On("String").Return("").Maybe()`
$DIR/core/services/relay/evm/request_round_tracker_test.go: `uni.lb.On("WasAlreadyConsumed", mock.Anything, mock.Anything).Return(false, nil)`
$DIR/core/services/relay/evm/request_round_tracker_test.go: `uni.lb.On("MarkConsumed", mock.Anything, mock.Anything, mock.Anything).Return(nil)`
$DIR/core/services/relay/evm/request_round_tracker_test.go: `uni.db.On("SaveLatestRoundRequested", mock.Anything, mock.MatchedBy(func(rr ocr2aggregator.OCR2AggregatorRoundRequested) bool {
return rr.Epoch == 1 && rr.Round == 1
})).Return(nil)`
$DIR/core/services/relay/evm/request_round_tracker_test.go: `uni.db.On("WithDataSource", mock.Anything).Return(uni.db)`
$DIR/core/services/relay/evm/request_round_tracker_test.go: `uni.requestRoundTracker.HandleLog(tests.Context(t), logBroadcast)`
$DIR/core/services/relay/evm/request_round_tracker_test.go: `configDigest, epoch, round, err = uni.requestRoundTracker.LatestRoundRequested(testutils.Context(t), 0)`
$DIR/core/services/relay/evm/request_round_tracker_test.go: `logBroadcast2.On("RawLog").Return(rawLog2).Maybe()`
$DIR/core/services/relay/evm/request_round_tracker_test.go: `logBroadcast2.On("String").Return("").Maybe()`
$DIR/core/services/relay/evm/request_round_tracker_test.go: `uni.lb.On("WasAlreadyConsumed", mock.Anything, mock.Anything).Return(false, nil)`
$DIR/core/services/relay/evm/request_round_tracker_test.go: `uni.lb.On("MarkConsumed", mock.Anything, mock.Anything, mock.Anything).Return(nil)`
$DIR/core/services/relay/evm/request_round_tracker_test.go: `uni.db.On("SaveLatestRoundRequested", mock.Anything, mock.MatchedBy(func(rr ocr2aggregator.OCR2AggregatorRoundRequested) bool {
return rr.Epoch == 1 && rr.Round == 9
})).Return(nil)`
$DIR/core/services/relay/evm/request_round_tracker_test.go: `uni.requestRoundTracker.HandleLog(tests.Context(t), logBroadcast2)`
$DIR/core/services/relay/evm/request_round_tracker_test.go: `configDigest, epoch, round, err = uni.requestRoundTracker.LatestRoundRequested(testutils.Context(t), 0)`
$DIR/core/services/relay/evm/request_round_tracker_test.go: `uni.requestRoundTracker.HandleLog(tests.Context(t), logBroadcast)`
$DIR/core/services/relay/evm/request_round_tracker_test.go: `configDigest, epoch, round, err = uni.requestRoundTracker.LatestRoundRequested(testutils.Context(t), 0)`
$DIR/core/services/relay/evm/request_round_tracker_test.go: `rawLog3.Address = fixtureContract.Address()`
$DIR/core/services/relay/evm/request_round_tracker_test.go: `logBroadcast3.On("RawLog").Return(rawLog3).Maybe()`
$DIR/core/services/relay/evm/request_round_tracker_test.go: `logBroadcast3.On("String").Return("").Maybe()`
$DIR/core/services/relay/evm/request_round_tracker_test.go: `uni.lb.On("WasAlreadyConsumed", mock.Anything, mock.Anything).Return(false, nil)`
$DIR/core/services/relay/evm/request_round_tracker_test.go: `uni.lb.On("MarkConsumed", mock.Anything, mock.Anything, mock.Anything).Return(nil)`
$DIR/core/services/relay/evm/request_round_tracker_test.go: `uni.db.On("SaveLatestRoundRequested", mock.Anything, mock.MatchedBy(func(rr ocr2aggregator.OCR2AggregatorRoundRequested) bool {
return rr.Epoch == 2 && rr.Round == 1
})).Return(nil)`
$DIR/core/services/relay/evm/request_round_tracker_test.go: `uni.requestRoundTracker.HandleLog(tests.Context(t), logBroadcast3)`
$DIR/core/services/relay/evm/request_round_tracker_test.go: `configDigest, epoch, round, err = uni.requestRoundTracker.LatestRoundRequested(testutils.Context(t), 0)`
$DIR/core/services/relay/evm/request_round_tracker_test.go: `t.Run("does not mark consumed or update state if latest round fails to save", func(t *testing.T) {
uni := newContractTrackerUni(t, fixtureFilterer, fixtureContract)
rawLog := cltest.LogFromFixture(t, "../../../testdata/jsonrpc/ocr2_round_requested_log_1_1.json")
rawLog.Address = fixtureContract.Address()
logBroadcast := logmocks.NewBroadcast(t)
logBroadcast.On("RawLog").Return(rawLog).Maybe()
logBroadcast.On("String").Return("").Maybe()
uni.lb.On("WasAlreadyConsumed", mock.Anything, mock.Anything).Return(false, nil)
uni.db.On("SaveLatestRoundRequested", mock.Anything, mock.Anything).Return(errors.New("something exploded"))
uni.db.On("WithDataSource", mock.Anything).Return(uni.db)
uni.requestRoundTracker.HandleLog(tests.Context(t), logBroadcast)
configDigest, epoch, round, err := uni.requestRoundTracker.LatestRoundRequested(testutils.Context(t), 0)
require.NoError(t, err)
require.Equal(t, ocrtypes.ConfigDigest{}, configDigest)
require.Equal(t, 0, int(round))
require.Equal(t, 0, int(epoch))
})`
$DIR/core/services/relay/evm/request_round_tracker_test.go: `rawLog.Address = fixtureContract.Address()`
$DIR/core/services/relay/evm/request_round_tracker_test.go: `logBroadcast.On("RawLog").Return(rawLog).Maybe()`
$DIR/core/services/relay/evm/request_round_tracker_test.go: `logBroadcast.On("String").Return("").Maybe()`
$DIR/core/services/relay/evm/request_round_tracker_test.go: `uni.lb.On("WasAlreadyConsumed", mock.Anything, mock.Anything).Return(false, nil)`
$DIR/core/services/relay/evm/request_round_tracker_test.go: `uni.db.On("SaveLatestRoundRequested", mock.Anything, mock.Anything).Return(errors.New("something exploded"))`
$DIR/core/services/relay/evm/request_round_tracker_test.go: `uni.db.On("WithDataSource", mock.Anything).Return(uni.db)`
$DIR/core/services/relay/evm/request_round_tracker_test.go: `uni.requestRoundTracker.HandleLog(tests.Context(t), logBroadcast)`
$DIR/core/services/relay/evm/request_round_tracker_test.go: `uni.lb.On("Register", uni.requestRoundTracker, mock.Anything).Return(func() { eventuallyCloseLogBroadcaster.ItHappened() })`
$DIR/core/services/relay/evm/request_round_tracker_test.go: `eventuallyCloseLogBroadcaster.ItHappened()`
$DIR/core/services/relay/evm/request_round_tracker_test.go: `uni.lb.On("IsConnected").Return(true).Maybe()`
$DIR/core/services/relay/evm/request_round_tracker_test.go: `uni.db.On("LoadLatestRoundRequested", mock.Anything).Return(rr, nil)`
$DIR/core/services/relay/evm/request_round_tracker_test.go: `eventuallyCloseLogBroadcaster.AssertHappened(t, true)`
$DIR/core/services/relay/evm/request_round_tracker_test.go: `t.Run(test.name, func(t *testing.T) {
res := evm.IsLaterThan(test.incoming, test.existing)
assert.Equal(t, test.expected, res)
})`
$DIR/core/services/relay/evm/request_round_tracker_test.go: `.HexToAddress("0x03bd0d5d39629423979f8a0e53dbce78c1791ebf")`
$DIR/core/services/relay/evm/request_round_tracker_test.go: `.Run("does not update if contract address doesn't match", func(t *testing.T) {
uni := newContractTrackerUni(t)
logBroadcast := logmocks.NewBroadcast(t)
rawLog := cltest.LogFromFixture(t, "../../../testdata/jsonrpc/ocr2_round_requested_log_1_1.json")
logBroadcast.On("RawLog").Return(rawLog).Maybe()
logBroadcast.On("String").Return("").Maybe()
uni.lb.On("MarkConsumed", mock.Anything, mock.Anything, mock.Anything).Return(nil)
uni.lb.On("WasAlreadyConsumed", mock.Anything, mock.Anything).Return(false, nil)
configDigest, epoch, round, err := uni.requestRoundTracker.LatestRoundRequested(testutils.Context(t), 0)
require.NoError(t, err)
require.Equal(t, ocrtypes.ConfigDigest{}, configDigest)
require.Equal(t, 0, int(round))
require.Equal(t, 0, int(epoch))
uni.requestRoundTracker.HandleLog(tests.Context(t), logBroadcast)
configDigest, epoch, round, err = uni.requestRoundTracker.LatestRoundRequested(testutils.Context(t), 0)
require.NoError(t, err)
require.Equal(t, ocrtypes.ConfigDigest{}, configDigest)
require.Equal(t, 0, int(round))
require.Equal(t, 0, int(epoch))
})`
$DIR/core/services/relay/evm/request_round_tracker_test.go: `.NewBroadcast(t)`
$DIR/core/services/relay/evm/request_round_tracker_test.go: `.LogFromFixture(t, "../../../testdata/jsonrpc/ocr2_round_requested_log_1_1.json")`
$DIR/core/services/relay/evm/request_round_tracker_test.go: `.On("RawLog")`
$DIR/core/services/relay/evm/request_round_tracker_test.go: `.Return(rawLog)`
$DIR/core/services/relay/evm/request_round_tracker_test.go: `.Maybe()`
$DIR/core/services/relay/evm/request_round_tracker_test.go: `.On("String")`
$DIR/core/services/relay/evm/request_round_tracker_test.go: `.Return("")`
$DIR/core/services/relay/evm/request_round_tracker_test.go: `.Maybe()`
$DIR/core/services/relay/evm/request_round_tracker_test.go: `.lb.On("MarkConsumed", mock.Anything, mock.Anything, mock.Anything)`
$DIR/core/services/relay/evm/request_round_tracker_test.go: `.Return(nil)`
$DIR/core/services/relay/evm/request_round_tracker_test.go: `.lb.On("WasAlreadyConsumed", mock.Anything, mock.Anything)`
$DIR/core/services/relay/evm/request_round_tracker_test.go: `.Return(false, nil)`
$DIR/core/services/relay/evm/request_round_tracker_test.go: `.requestRoundTracker.LatestRoundRequested(testutils.Context(t), 0)`
$DIR/core/services/relay/evm/request_round_tracker_test.go: `.Context(t)`
$DIR/core/services/relay/evm/request_round_tracker_test.go: `.requestRoundTracker.HandleLog(tests.Context(t), logBroadcast)`
$DIR/core/services/relay/evm/request_round_tracker_test.go: `.Context(t)`
$DIR/core/services/relay/evm/request_round_tracker_test.go: `.requestRoundTracker.LatestRoundRequested(testutils.Context(t), 0)`
$DIR/core/services/relay/evm/request_round_tracker_test.go: `.Context(t)`
$DIR/core/services/relay/evm/request_round_tracker_test.go: `.Run("does nothing if log has already been consumed", func(t *testing.T) {
uni := newContractTrackerUni(t, fixtureFilterer, fixtureContract)
logBroadcast := logmocks.NewBroadcast(t)
logBroadcast.On("String").Return("").Maybe()
uni.lb.On("WasAlreadyConsumed", mock.Anything, mock.Anything).Return(true, nil)
configDigest, epoch, round, err := uni.requestRoundTracker.LatestRoundRequested(testutils.Context(t), 0)
require.NoError(t, err)
require.Equal(t, ocrtypes.ConfigDigest{}, configDigest)
require.Equal(t, 0, int(round))
require.Equal(t, 0, int(epoch))
uni.requestRoundTracker.HandleLog(tests.Context(t), logBroadcast)
configDigest, epoch, round, err = uni.requestRoundTracker.LatestRoundRequested(testutils.Context(t), 0)
require.NoError(t, err)
require.Equal(t, ocrtypes.ConfigDigest{}, configDigest)
require.Equal(t, 0, int(round))
require.Equal(t, 0, int(epoch))
})`
$DIR/core/services/relay/evm/request_round_tracker_test.go: `.NewBroadcast(t)`
$DIR/core/services/relay/evm/request_round_tracker_test.go: `.On("String")`
$DIR/core/services/relay/evm/request_round_tracker_test.go: `.Return("")`
$DIR/core/services/relay/evm/request_round_tracker_test.go: `.Maybe()`
$DIR/core/services/relay/evm/request_round_tracker_test.go: `.lb.On("WasAlreadyConsumed", mock.Anything, mock.Anything)`
$DIR/core/services/relay/evm/request_round_tracker_test.go: `.Return(true, nil)`
$DIR/core/services/relay/evm/request_round_tracker_test.go: `.requestRoundTracker.LatestRoundRequested(testutils.Context(t), 0)`
$DIR/core/services/relay/evm/request_round_tracker_test.go: `.Context(t)`
$DIR/core/services/relay/evm/request_round_tracker_test.go: `.requestRoundTracker.HandleLog(tests.Context(t), logBroadcast)`
$DIR/core/services/relay/evm/request_round_tracker_test.go: `.Context(t)`
$DIR/core/services/relay/evm/request_round_tracker_test.go: `.requestRoundTracker.LatestRoundRequested(testutils.Context(t), 0)`
$DIR/core/services/relay/evm/request_round_tracker_test.go: `.Context(t)`
$DIR/core/services/relay/evm/request_round_tracker_test.go: `.Run("for new round requested log", func(t *testing.T) {
uni := newContractTrackerUni(t, fixtureFilterer, fixtureContract)
configDigest, epoch, round, err := uni.requestRoundTracker.LatestRoundRequested(testutils.Context(t), 0)
require.NoError(t, err)
require.Equal(t, ocrtypes.ConfigDigest{}, configDigest)
require.Equal(t, 0, int(round))
require.Equal(t, 0, int(epoch))
// Any round supercedes the 0 round
rawLog := cltest.LogFromFixture(t, "../../../testdata/jsonrpc/ocr2_round_requested_log_1_1.json")
logBroadcast := logmocks.NewBroadcast(t)
logBroadcast.On("RawLog").Return(rawLog).Maybe()
logBroadcast.On("String").Return("").Maybe()
uni.lb.On("WasAlreadyConsumed", mock.Anything, mock.Anything).Return(false, nil)
uni.lb.On("MarkConsumed", mock.Anything, mock.Anything, mock.Anything).Return(nil)
uni.db.On("SaveLatestRoundRequested", mock.Anything, mock.MatchedBy(func(rr ocr2aggregator.OCR2AggregatorRoundRequested) bool {
return rr.Epoch == 1 && rr.Round == 1
})).Return(nil)
uni.db.On("WithDataSource", mock.Anything).Return(uni.db)
uni.requestRoundTracker.HandleLog(tests.Context(t), logBroadcast)
configDigest, epoch, round, err = uni.requestRoundTracker.LatestRoundRequested(testutils.Context(t), 0)
require.NoError(t, err)
assert.Equal(t, "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa", configDigest.Hex())
assert.Equal(t, 1, int(epoch))
assert.Equal(t, 1, int(round))
// Same round with higher epoch supercedes
rawLog2 := cltest.LogFromFixture(t, "../../../testdata/jsonrpc/ocr2_round_requested_log_1_9.json")
logBroadcast2 := logmocks.NewBroadcast(t)
logBroadcast2.On("RawLog").Return(rawLog2).Maybe()
logBroadcast2.On("String").Return("").Maybe()
uni.lb.On("WasAlreadyConsumed", mock.Anything, mock.Anything).Return(false, nil)
uni.lb.On("MarkConsumed", mock.Anything, mock.Anything, mock.Anything).Return(nil)
uni.db.On("SaveLatestRoundRequested", mock.Anything, mock.MatchedBy(func(rr ocr2aggregator.OCR2AggregatorRoundRequested) bool {
return rr.Epoch == 1 && rr.Round == 9
})).Return(nil)
uni.requestRoundTracker.HandleLog(tests.Context(t), logBroadcast2)
configDigest, epoch, round, err = uni.requestRoundTracker.LatestRoundRequested(testutils.Context(t), 0)
require.NoError(t, err)
assert.Equal(t, "bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb", configDigest.Hex())
assert.Equal(t, 1, int(epoch))
assert.Equal(t, 9, int(round))
// Same round with lower epoch is ignored
uni.requestRoundTracker.HandleLog(tests.Context(t), logBroadcast)
configDigest, epoch, round, err = uni.requestRoundTracker.LatestRoundRequested(testutils.Context(t), 0)
require.NoError(t, err)
assert.Equal(t, "bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb", configDigest.Hex())
assert.Equal(t, 1, int(epoch))
assert.Equal(t, 9, int(round))
// Higher epoch with lower round supercedes
rawLog3 := cltest.LogFromFixture(t, "../../../testdata/jsonrpc/ocr2_round_requested_log_2_1.json")
rawLog3.Address = fixtureContract.Address()
logBroadcast3 := logmocks.NewBroadcast(t)
logBroadcast3.On("RawLog").Return(rawLog3).Maybe()
logBroadcast3.On("String").Return("").Maybe()
uni.lb.On("WasAlreadyConsumed", mock.Anything, mock.Anything).Return(false, nil)
uni.lb.On("MarkConsumed", mock.Anything, mock.Anything, mock.Anything).Return(nil)
uni.db.On("SaveLatestRoundRequested", mock.Anything, mock.MatchedBy(func(rr ocr2aggregator.OCR2AggregatorRoundRequested) bool {
return rr.Epoch == 2 && rr.Round == 1
})).Return(nil)
uni.requestRoundTracker.HandleLog(tests.Context(t), logBroadcast3)
configDigest, epoch, round, err = uni.requestRoundTracker.LatestRoundRequested(testutils.Context(t), 0)
require.NoError(t, err)
assert.Equal(t, "cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc", configDigest.Hex())
assert.Equal(t, 2, int(epoch))
assert.Equal(t, 1, int(round))
})`
$DIR/core/services/relay/evm/request_round_tracker_test.go: `.requestRoundTracker.LatestRoundRequested(testutils.Context(t), 0)`
$DIR/core/services/relay/evm/request_round_tracker_test.go: `.Context(t)`
$DIR/core/services/relay/evm/request_round_tracker_test.go: `.LogFromFixture(t, "../../../testdata/jsonrpc/ocr2_round_requested_log_1_1.json")`
$DIR/core/services/relay/evm/request_round_tracker_test.go: `.NewBroadcast(t)`
$DIR/core/services/relay/evm/request_round_tracker_test.go: `.On("RawLog")`
$DIR/core/services/relay/evm/request_round_tracker_test.go: `.Return(rawLog)`
$DIR/core/services/relay/evm/request_round_tracker_test.go: `.Maybe()`
$DIR/core/services/relay/evm/request_round_tracker_test.go: `.On("String")`
$DIR/core/services/relay/evm/request_round_tracker_test.go: `.Return("")`
$DIR/core/services/relay/evm/request_round_tracker_test.go: `.Maybe()`
$DIR/core/services/relay/evm/request_round_tracker_test.go: `.lb.On("WasAlreadyConsumed", mock.Anything, mock.Anything)`
$DIR/core/services/relay/evm/request_round_tracker_test.go: `.Return(false, nil)`
$DIR/core/services/relay/evm/request_round_tracker_test.go: `.lb.On("MarkConsumed", mock.Anything, mock.Anything, mock.Anything)`
$DIR/core/services/relay/evm/request_round_tracker_test.go: `.Return(nil)`
$DIR/core/services/relay/evm/request_round_tracker_test.go: `.db.On("SaveLatestRoundRequested", mock.Anything, mock.MatchedBy(func(rr ocr2aggregator.OCR2AggregatorRoundRequested) bool {
return rr.Epoch == 1 && rr.Round == 1
}))`
$DIR/core/services/relay/evm/request_round_tracker_test.go: `.MatchedBy(func(rr ocr2aggregator.OCR2AggregatorRoundRequested) bool {
return rr.Epoch == 1 && rr.Round == 1
})`
$DIR/core/services/relay/evm/request_round_tracker_test.go: `.Return(nil)`
$DIR/core/services/relay/evm/request_round_tracker_test.go: `.db.On("WithDataSource", mock.Anything)`
$DIR/core/services/relay/evm/request_round_tracker_test.go: `.Return(uni.db)`
$DIR/core/services/relay/evm/request_round_tracker_test.go: `.requestRoundTracker.HandleLog(tests.Context(t), logBroadcast)`
$DIR/core/services/relay/evm/request_round_tracker_test.go: `.Context(t)`
$DIR/core/services/relay/evm/request_round_tracker_test.go: `.requestRoundTracker.LatestRoundRequested(testutils.Context(t), 0)`
$DIR/core/services/relay/evm/request_round_tracker_test.go: `.Context(t)`
$DIR/core/services/relay/evm/request_round_tracker_test.go: `.LogFromFixture(t, "../../../testdata/jsonrpc/ocr2_round_requested_log_1_9.json")`
$DIR/core/services/relay/evm/request_round_tracker_test.go: `.NewBroadcast(t)`
$DIR/core/services/relay/evm/request_round_tracker_test.go: `.On("RawLog")`
$DIR/core/services/relay/evm/request_round_tracker_test.go: `.Return(rawLog2)`
$DIR/core/services/relay/evm/request_round_tracker_test.go: `.Maybe()`
$DIR/core/services/relay/evm/request_round_tracker_test.go: `.On("String")`
$DIR/core/services/relay/evm/request_round_tracker_test.go: `.Return("")`
$DIR/core/services/relay/evm/request_round_tracker_test.go: `.Maybe()`
$DIR/core/services/relay/evm/request_round_tracker_test.go: `.lb.On("WasAlreadyConsumed", mock.Anything, mock.Anything)`
$DIR/core/services/relay/evm/request_round_tracker_test.go: `.Return(false, nil)`
$DIR/core/services/relay/evm/request_round_tracker_test.go: `.lb.On("MarkConsumed", mock.Anything, mock.Anything, mock.Anything)`
$DIR/core/services/relay/evm/request_round_tracker_test.go: `.Return(nil)`
$DIR/core/services/relay/evm/request_round_tracker_test.go: `.db.On("SaveLatestRoundRequested", mock.Anything, mock.MatchedBy(func(rr ocr2aggregator.OCR2AggregatorRoundRequested) bool {
return rr.Epoch == 1 && rr.Round == 9
}))`
$DIR/core/services/relay/evm/request_round_tracker_test.go: `.MatchedBy(func(rr ocr2aggregator.OCR2AggregatorRoundRequested) bool {
return rr.Epoch == 1 && rr.Round == 9
})`
$DIR/core/services/relay/evm/request_round_tracker_test.go: `.Return(nil)`
$DIR/core/services/relay/evm/request_round_tracker_test.go: `.requestRoundTracker.HandleLog(tests.Context(t), logBroadcast2)`
$DIR/core/services/relay/evm/request_round_tracker_test.go: `.Context(t)`
$DIR/core/services/relay/evm/request_round_tracker_test.go: `.requestRoundTracker.LatestRoundRequested(testutils.Context(t), 0)`
$DIR/core/services/relay/evm/request_round_tracker_test.go: `.Context(t)`
$DIR/core/services/relay/evm/request_round_tracker_test.go: `.requestRoundTracker.HandleLog(tests.Context(t), logBroadcast)`
$DIR/core/services/relay/evm/request_round_tracker_test.go: `.Context(t)`
$DIR/core/services/relay/evm/request_round_tracker_test.go: `.requestRoundTracker.LatestRoundRequested(testutils.Context(t), 0)`
$DIR/core/services/relay/evm/request_round_tracker_test.go: `.Context(t)`
$DIR/core/services/relay/evm/request_round_tracker_test.go: `.LogFromFixture(t, "../../../testdata/jsonrpc/ocr2_round_requested_log_2_1.json")`
$DIR/core/services/relay/evm/request_round_tracker_test.go: `.Address()`
$DIR/core/services/relay/evm/request_round_tracker_test.go: `.NewBroadcast(t)`
$DIR/core/services/relay/evm/request_round_tracker_test.go: `.On("RawLog")`
$DIR/core/services/relay/evm/request_round_tracker_test.go: `.Return(rawLog3)`
$DIR/core/services/relay/evm/request_round_tracker_test.go: `.Maybe()`
$DIR/core/services/relay/evm/request_round_tracker_test.go: `.On("String")`
$DIR/core/services/relay/evm/request_round_tracker_test.go: `.Return("")`
$DIR/core/services/relay/evm/request_round_tracker_test.go: `.Maybe()`
$DIR/core/services/relay/evm/request_round_tracker_test.go: `.lb.On("WasAlreadyConsumed", mock.Anything, mock.Anything)`
$DIR/core/services/relay/evm/request_round_tracker_test.go: `.Return(false, nil)`
$DIR/core/services/relay/evm/request_round_tracker_test.go: `.lb.On("MarkConsumed", mock.Anything, mock.Anything, mock.Anything)`
$DIR/core/services/relay/evm/request_round_tracker_test.go: `.Return(nil)`
$DIR/core/services/relay/evm/request_round_tracker_test.go: `.db.On("SaveLatestRoundRequested", mock.Anything, mock.MatchedBy(func(rr ocr2aggregator.OCR2AggregatorRoundRequested) bool {
return rr.Epoch == 2 && rr.Round == 1
}))`
$DIR/core/services/relay/evm/request_round_tracker_test.go: `.MatchedBy(func(rr ocr2aggregator.OCR2AggregatorRoundRequested) bool {
return rr.Epoch == 2 && rr.Round == 1
})`
$DIR/core/services/relay/evm/request_round_tracker_test.go: `.Return(nil)`
$DIR/core/services/relay/evm/request_round_tracker_test.go: `.requestRoundTracker.HandleLog(tests.Context(t), logBroadcast3)`
$DIR/core/services/relay/evm/request_round_tracker_test.go: `.Context(t)`
$DIR/core/services/relay/evm/request_round_tracker_test.go: `.requestRoundTracker.LatestRoundRequested(testutils.Context(t), 0)`
$DIR/core/services/relay/evm/request_round_tracker_test.go: `.Context(t)`
$DIR/core/services/relay/evm/request_round_tracker_test.go: `.Run("does not mark consumed or update state if latest round fails to save", func(t *testing.T) {
uni := newContractTrackerUni(t, fixtureFilterer, fixtureContract)
rawLog := cltest.LogFromFixture(t, "../../../testdata/jsonrpc/ocr2_round_requested_log_1_1.json")
rawLog.Address = fixtureContract.Address()
logBroadcast := logmocks.NewBroadcast(t)
logBroadcast.On("RawLog").Return(rawLog).Maybe()
logBroadcast.On("String").Return("").Maybe()
uni.lb.On("WasAlreadyConsumed", mock.Anything, mock.Anything).Return(false, nil)
uni.db.On("SaveLatestRoundRequested", mock.Anything, mock.Anything).Return(errors.New("something exploded"))
uni.db.On("WithDataSource", mock.Anything).Return(uni.db)
uni.requestRoundTracker.HandleLog(tests.Context(t), logBroadcast)
configDigest, epoch, round, err := uni.requestRoundTracker.LatestRoundRequested(testutils.Context(t), 0)
require.NoError(t, err)
require.Equal(t, ocrtypes.ConfigDigest{}, configDigest)
require.Equal(t, 0, int(round))
require.Equal(t, 0, int(epoch))
})`
$DIR/core/services/relay/evm/request_round_tracker_test.go: `.LogFromFixture(t, "../../../testdata/jsonrpc/ocr2_round_requested_log_1_1.json")`
$DIR/core/services/relay/evm/request_round_tracker_test.go: `.Address()`
$DIR/core/services/relay/evm/request_round_tracker_test.go: `.NewBroadcast(t)`
$DIR/core/services/relay/evm/request_round_tracker_test.go: `.On("RawLog")`
$DIR/core/services/relay/evm/request_round_tracker_test.go: `.Return(rawLog)`
$DIR/core/services/relay/evm/request_round_tracker_test.go: `.Maybe()`
$DIR/core/services/relay/evm/request_round_tracker_test.go: `.On("String")`
$DIR/core/services/relay/evm/request_round_tracker_test.go: `.Return("")`
$DIR/core/services/relay/evm/request_round_tracker_test.go: `.Maybe()`
$DIR/core/services/relay/evm/request_round_tracker_test.go: `.lb.On("WasAlreadyConsumed", mock.Anything, mock.Anything)`
$DIR/core/services/relay/evm/request_round_tracker_test.go: `.Return(false, nil)`
$DIR/core/services/relay/evm/request_round_tracker_test.go: `.db.On("SaveLatestRoundRequested", mock.Anything, mock.Anything)`
$DIR/core/services/relay/evm/request_round_tracker_test.go: `.Return(errors.New("something exploded"))`
$DIR/core/services/relay/evm/request_round_tracker_test.go: `.New("something exploded")`
$DIR/core/services/relay/evm/request_round_tracker_test.go: `.db.On("WithDataSource", mock.Anything)`
$DIR/core/services/relay/evm/request_round_tracker_test.go: `.Return(uni.db)`
$DIR/core/services/relay/evm/request_round_tracker_test.go: `.requestRoundTracker.HandleLog(tests.Context(t), logBroadcast)`
$DIR/core/services/relay/evm/request_round_tracker_test.go: `.Context(t)`
$DIR/core/services/relay/evm/request_round_tracker_test.go: `.requestRoundTracker.LatestRoundRequested(testutils.Context(t), 0)`
$DIR/core/services/relay/evm/request_round_tracker_test.go: `.Context(t)`
$DIR/core/services/relay/evm/request_round_tracker_test.go: `.LogFromFixture(t, "../../../testdata/jsonrpc/ocr2_round_requested_log_1_1.json")`
$DIR/core/services/relay/evm/request_round_tracker_test.go: `.NewAddress()`
$DIR/core/services/relay/evm/request_round_tracker_test.go: `.MakeConfigDigest(t)`
$DIR/core/services/relay/evm/request_round_tracker_test.go: `.NewAwaiter()`
$DIR/core/services/relay/evm/request_round_tracker_test.go: `.lb.On("Register", uni.requestRoundTracker, mock.Anything)`
$DIR/core/services/relay/evm/request_round_tracker_test.go: `.Return(func() { eventuallyCloseLogBroadcaster.ItHappened() })`
$DIR/core/services/relay/evm/request_round_tracker_test.go: `.ItHappened()`
$DIR/core/services/relay/evm/request_round_tracker_test.go: `.lb.On("IsConnected")`
$DIR/core/services/relay/evm/request_round_tracker_test.go: `.Return(true)`
$DIR/core/services/relay/evm/request_round_tracker_test.go: `.Maybe()`
$DIR/core/services/relay/evm/request_round_tracker_test.go: `.db.On("LoadLatestRoundRequested", mock.Anything)`
$DIR/core/services/relay/evm/request_round_tracker_test.go: `.Return(rr, nil)`
$DIR/core/services/relay/evm/request_round_tracker_test.go: `.Context(t)`
$DIR/core/services/relay/evm/request_round_tracker_test.go: `.requestRoundTracker.LatestRoundRequested(testutils.Context(t), 0)`
$DIR/core/services/relay/evm/request_round_tracker_test.go: `.Context(t)`
$DIR/core/services/relay/evm/request_round_tracker_test.go: `.AssertHappened(t, true)`
$DIR/core/services/relay/evm/request_round_tracker_test.go: `.Run(test.name, func(t *testing.T) {
res := evm.IsLaterThan(test.incoming, test.existing)
assert.Equal(t, test.expected, res)
})`
$DIR/core/services/relay/evm/request_round_tracker_test.go: `.IsLaterThan(test.incoming, test.existing)`
$DIR/core/services/relay/evm/types/codec_entry_test.go: `t.Run("basic types", func(t *testing.T) {
type1, err := abi.NewType("uint16", "", []abi.ArgumentMarshaling{})
require.NoError(t, err)
type2, err := abi.NewType("string", "", []abi.ArgumentMarshaling{})
require.NoError(t, err)
type3, err := abi.NewType("uint24", "", []abi.ArgumentMarshaling{})
require.NoError(t, err)
type4, err := abi.NewType("int24", "", []abi.ArgumentMarshaling{})
require.NoError(t, err)
args := abi.Arguments{
{Name: "Field1", Type: type1},
{Name: "Field2", Type: type2},
{Name: "Field3", Type: type3},
{Name: "Field4", Type: type4},
}
entry := NewCodecEntry(args, nil, nil)
require.NoError(t, entry.Init())
checked := reflect.New(entry.CheckedType())
iChecked := reflect.Indirect(checked)
f1 := uint16(2)
iChecked.FieldByName("Field1").Set(reflect.ValueOf(&f1))
f2 := "any string"
iChecked.FieldByName("Field2").Set(reflect.ValueOf(&f2))
f3 := big.NewInt( /*2^24 - 1*/ 16777215)
setAndVerifyLimit(t, (*uint24)(f3), f3, iChecked.FieldByName("Field3"))
f4 := big.NewInt( /*2^23 - 1*/ 8388607)
setAndVerifyLimit(t, (*int24)(f4), f4, iChecked.FieldByName("Field4"))
rNative, err := entry.ToNative(checked)
require.NoError(t, err)
iNative := reflect.Indirect(rNative)
assert.Equal(t, iNative.Field(0).Interface(), iChecked.Field(0).Interface())
assert.Equal(t, iNative.Field(1).Interface(), iChecked.Field(1).Interface())
assert.Equal(t, iNative.Field(2).Interface(), f3)
assert.Equal(t, iNative.Field(3).Interface(), f4)
assertHaveSameStructureAndNames(t, iNative.Type(), entry.CheckedType())
})`
$DIR/core/services/relay/evm/types/codec_entry_test.go: `iChecked.FieldByName("Field1").Set(reflect.ValueOf(&f1))`
$DIR/core/services/relay/evm/types/codec_entry_test.go: `iChecked.FieldByName("Field2").Set(reflect.ValueOf(&f2))`
$DIR/core/services/relay/evm/types/codec_entry_test.go: `setAndVerifyLimit(t, (*uint24)(f3), f3, iChecked.FieldByName("Field3"))`
$DIR/core/services/relay/evm/types/codec_entry_test.go: `setAndVerifyLimit(t, (*int24)(f4), f4, iChecked.FieldByName("Field4"))`
$DIR/core/services/relay/evm/types/codec_entry_test.go: `assertHaveSameStructureAndNames(t, iNative.Type(), entry.CheckedType())`
$DIR/core/services/relay/evm/types/codec_entry_test.go: `t.Run("tuples", func(t *testing.T) {
type1, err := abi.NewType("uint16", "", []abi.ArgumentMarshaling{})
require.NoError(t, err)
tupleType, err := abi.NewType("tuple", "", []abi.ArgumentMarshaling{
{Name: "Field3", Type: "uint24"},
{Name: "Field4", Type: "int24"},
})
require.NoError(t, err)
args := abi.Arguments{
{Name: "Field1", Type: type1},
{Name: "Field2", Type: tupleType},
}
entry := NewCodecEntry(args, nil, nil)
require.NoError(t, entry.Init())
checked := reflect.New(entry.CheckedType())
iChecked := reflect.Indirect(checked)
f1 := uint16(2)
iChecked.FieldByName("Field1").Set(reflect.ValueOf(&f1))
f2 := iChecked.FieldByName("Field2")
f2.Set(reflect.New(f2.Type().Elem()))
f2 = reflect.Indirect(f2)
f3 := big.NewInt( /*2^24 - 1*/ 16777215)
setAndVerifyLimit(t, (*uint24)(f3), f3, f2.FieldByName("Field3"))
f4 := big.NewInt( /*2^23 - 1*/ 8388607)
setAndVerifyLimit(t, (*int24)(f4), f4, f2.FieldByName("Field4"))
native, err := entry.ToNative(checked)
require.NoError(t, err)
iNative := reflect.Indirect(native)
require.Equal(t, iNative.Field(0).Interface(), iChecked.Field(0).Interface())
nF2 := reflect.Indirect(iNative.Field(1))
assert.Equal(t, nF2.Field(0).Interface(), f3)
assert.Equal(t, nF2.Field(1).Interface(), f4)
assertHaveSameStructureAndNames(t, iNative.Type(), entry.CheckedType())
})`
$DIR/core/services/relay/evm/types/codec_entry_test.go: `iChecked.FieldByName("Field1").Set(reflect.ValueOf(&f1))`
$DIR/core/services/relay/evm/types/codec_entry_test.go: `f2.Set(reflect.New(f2.Type().Elem()))`
$DIR/core/services/relay/evm/types/codec_entry_test.go: `f2 = reflect.Indirect(f2)`
$DIR/core/services/relay/evm/types/codec_entry_test.go: `setAndVerifyLimit(t, (*uint24)(f3), f3, f2.FieldByName("Field3"))`
$DIR/core/services/relay/evm/types/codec_entry_test.go: `setAndVerifyLimit(t, (*int24)(f4), f4, f2.FieldByName("Field4"))`
$DIR/core/services/relay/evm/types/codec_entry_test.go: `assertHaveSameStructureAndNames(t, iNative.Type(), entry.CheckedType())`
$DIR/core/services/relay/evm/types/codec_entry_test.go: `t.Run("nested tuple member names are capitalized", func(t *testing.T) {
type1, err := abi.NewType("uint16", "", []abi.ArgumentMarshaling{})
require.NoError(t, err)
tupleType, err := abi.NewType("tuple", "", []abi.ArgumentMarshaling{
{Name: "field3", Type: "uint24"},
{Name: "field4", Type: "int24"},
})
require.NoError(t, err)
args := abi.Arguments{
{Name: "field1", Type: type1},
{Name: "field2", Type: tupleType},
}
entry := NewCodecEntry(args, nil, nil)
require.NoError(t, entry.Init())
checked := reflect.New(entry.CheckedType())
iChecked := reflect.Indirect(checked)
f1 := uint16(2)
iChecked.FieldByName("Field1").Set(reflect.ValueOf(&f1))
f2 := iChecked.FieldByName("Field2")
f2.Set(reflect.New(f2.Type().Elem()))
f2 = reflect.Indirect(f2)
f3 := big.NewInt( /*2^24 - 1*/ 16777215)
setAndVerifyLimit(t, (*uint24)(f3), f3, f2.FieldByName("Field3"))
f4 := big.NewInt( /*2^23 - 1*/ 8388607)
setAndVerifyLimit(t, (*int24)(f4), f4, f2.FieldByName("Field4"))
native, err := entry.ToNative(checked)
require.NoError(t, err)
iNative := reflect.Indirect(native)
require.Equal(t, iNative.Field(0).Interface(), iChecked.Field(0).Interface())
nF2 := reflect.Indirect(iNative.Field(1))
assert.Equal(t, nF2.Field(0).Interface(), f3)
assert.Equal(t, nF2.Field(1).Interface(), f4)
assertHaveSameStructureAndNames(t, iNative.Type(), entry.CheckedType())
})`
$DIR/core/services/relay/evm/types/codec_entry_test.go: `iChecked.FieldByName("Field1").Set(reflect.ValueOf(&f1))`
$DIR/core/services/relay/evm/types/codec_entry_test.go: `f2.Set(reflect.New(f2.Type().Elem()))`
$DIR/core/services/relay/evm/types/codec_entry_test.go: `f2 = reflect.Indirect(f2)`
$DIR/core/services/relay/evm/types/codec_entry_test.go: `setAndVerifyLimit(t, (*uint24)(f3), f3, f2.FieldByName("Field3"))`
$DIR/core/services/relay/evm/types/codec_entry_test.go: `setAndVerifyLimit(t, (*int24)(f4), f4, f2.FieldByName("Field4"))`
$DIR/core/services/relay/evm/types/codec_entry_test.go: `assertHaveSameStructureAndNames(t, iNative.Type(), entry.CheckedType())`
$DIR/core/services/relay/evm/types/codec_entry_test.go: `t.Run("unwrapped types", func(t *testing.T) {
// This exists to allow you to decode single returned values without naming the parameter
wrappedTuple, err := abi.NewType("tuple", "", []abi.ArgumentMarshaling{
{Name: "Field1", Type: "int16"},
})
require.NoError(t, err)
entry := NewCodecEntry(abi.Arguments{{Name: "", Type: wrappedTuple}}, nil, nil)
require.NoError(t, entry.Init())
checked := reflect.New(entry.CheckedType())
iChecked := reflect.Indirect(checked)
anyValue := int16(2)
iChecked.FieldByName("Field1").Set(reflect.ValueOf(&anyValue))
native, err := entry.ToNative(checked)
require.NoError(t, err)
iNative := reflect.Indirect(native)
assert.Equal(t, &anyValue, iNative.FieldByName("Field1").Interface())
assertHaveSameStructureAndNames(t, iNative.Type(), entry.CheckedType())
})`
$DIR/core/services/relay/evm/types/codec_entry_test.go: `iChecked.FieldByName("Field1").Set(reflect.ValueOf(&anyValue))`
$DIR/core/services/relay/evm/types/codec_entry_test.go: `assertHaveSameStructureAndNames(t, iNative.Type(), entry.CheckedType())`
$DIR/core/services/relay/evm/types/codec_entry_test.go: `t.Run("slice types", func(t *testing.T) {
type1, err := abi.NewType("int16[]", "", []abi.ArgumentMarshaling{})
require.NoError(t, err)
entry := NewCodecEntry(abi.Arguments{{Name: "Field1", Type: type1}}, nil, nil)
require.NoError(t, entry.Init())
checked := reflect.New(entry.CheckedType())
iChecked := reflect.Indirect(checked)
anySliceValue := &[]int16{2, 3}
iChecked.FieldByName("Field1").Set(reflect.ValueOf(anySliceValue))
native, err := entry.ToNative(checked)
require.NoError(t, err)
iNative := reflect.Indirect(native)
assert.Equal(t, anySliceValue, iNative.FieldByName("Field1").Interface())
assertHaveSameStructureAndNames(t, iNative.Type(), entry.CheckedType())
})`
$DIR/core/services/relay/evm/types/codec_entry_test.go: `iChecked.FieldByName("Field1").Set(reflect.ValueOf(anySliceValue))`
$DIR/core/services/relay/evm/types/codec_entry_test.go: `assertHaveSameStructureAndNames(t, iNative.Type(), entry.CheckedType())`
$DIR/core/services/relay/evm/types/codec_entry_test.go: `t.Run("array types", func(t *testing.T) {
type1, err := abi.NewType("int16[3]", "", []abi.ArgumentMarshaling{})
require.NoError(t, err)
entry := NewCodecEntry(abi.Arguments{{Name: "Field1", Type: type1}}, nil, nil)
require.NoError(t, entry.Init())
checked := reflect.New(entry.CheckedType())
iChecked := reflect.Indirect(checked)
anySliceValue := &[3]int16{2, 3, 30}
iChecked.FieldByName("Field1").Set(reflect.ValueOf(anySliceValue))
native, err := entry.ToNative(checked)
require.NoError(t, err)
iNative := reflect.Indirect(native)
assert.Equal(t, anySliceValue, iNative.FieldByName("Field1").Interface())
})`
$DIR/core/services/relay/evm/types/codec_entry_test.go: `iChecked.FieldByName("Field1").Set(reflect.ValueOf(anySliceValue))`
$DIR/core/services/relay/evm/types/codec_entry_test.go: `t.Run("Not return values makes struct{}", func(t *testing.T) {
entry := NewCodecEntry(abi.Arguments{}, nil, nil)
require.NoError(t, entry.Init())
assert.Equal(t, reflect.TypeOf(struct{}{}), entry.CheckedType())
native, err := entry.ToNative(reflect.ValueOf(&struct{}{}))
require.NoError(t, err)
assert.Equal(t, &struct{}{}, native.Interface())
})`
$DIR/core/services/relay/evm/types/codec_entry_test.go: `t.Run("Address works", func(t *testing.T) {
address, err := abi.NewType("address", "", []abi.ArgumentMarshaling{})
require.NoError(t, err)
entry := NewCodecEntry(abi.Arguments{{Name: "foo", Type: address}}, nil, nil)
require.NoError(t, entry.Init())
checked := reflect.New(entry.CheckedType())
iChecked := reflect.Indirect(checked)
anyAddr := &common.Address{1, 2, 3}
iChecked.FieldByName("Foo").Set(reflect.ValueOf(anyAddr))
native, err := entry.ToNative(checked)
require.NoError(t, err)
iNative := reflect.Indirect(native)
assert.Equal(t, anyAddr, iNative.FieldByName("Foo").Interface())
assertHaveSameStructureAndNames(t, iNative.Type(), entry.CheckedType())
})`
$DIR/core/services/relay/evm/types/codec_entry_test.go: `iChecked.FieldByName("Foo").Set(reflect.ValueOf(anyAddr))`
$DIR/core/services/relay/evm/types/codec_entry_test.go: `assertHaveSameStructureAndNames(t, iNative.Type(), entry.CheckedType())`
$DIR/core/services/relay/evm/types/codec_entry_test.go: `t.Run("Unnamed parameters are named after their locations", func(t *testing.T) {
// use different types to make sure that the right fields have the right types.
anyType1, err := abi.NewType("int64", "", []abi.ArgumentMarshaling{})
require.NoError(t, err)
anyType2, err := abi.NewType("int32", "", []abi.ArgumentMarshaling{})
require.NoError(t, err)
entry := NewCodecEntry(abi.Arguments{{Name: "", Type: anyType1}, {Name: "", Type: anyType2}}, nil, nil)
assert.NoError(t, entry.Init())
ct := entry.CheckedType()
require.Equal(t, 2, ct.NumField())
f0 := ct.Field(0)
assert.Equal(t, "F0", f0.Name)
assert.Equal(t, reflect.TypeOf((*int64)(nil)), f0.Type)
f1 := ct.Field(1)
assert.Equal(t, "F1", f1.Name)
assert.Equal(t, reflect.TypeOf((*int32)(nil)), f1.Type)
})`
$DIR/core/services/relay/evm/types/codec_entry_test.go: `t.Run("Unnamed parameters adds _Xes at the end if their location name is taken", func(t *testing.T) {
// use different types to make sure that the right fields have the right types.
anyType1, err := abi.NewType("int64", "", []abi.ArgumentMarshaling{})
require.NoError(t, err)
anyType2, err := abi.NewType("int32", "", []abi.ArgumentMarshaling{})
require.NoError(t, err)
entry := NewCodecEntry(abi.Arguments{{Name: "F1", Type: anyType1}, {Name: "", Type: anyType2}}, nil, nil)
assert.NoError(t, entry.Init())
ct := entry.CheckedType()
require.Equal(t, 2, ct.NumField())
f0 := ct.Field(0)
assert.Equal(t, "F1", f0.Name)
assert.Equal(t, reflect.TypeOf((*int64)(nil)), f0.Type)
f1 := ct.Field(1)
assert.Equal(t, "F1_X", f1.Name)
assert.Equal(t, reflect.TypeOf((*int32)(nil)), f1.Type)
})`
$DIR/core/services/relay/evm/types/codec_entry_test.go: `t.Run("Multiple abi arguments with the same name returns an error", func(t *testing.T) {
anyType, err := abi.NewType("int16[3]", "", []abi.ArgumentMarshaling{})
require.NoError(t, err)
entry := NewCodecEntry(abi.Arguments{{Name: "Name", Type: anyType}, {Name: "Name", Type: anyType}}, nil, nil)
assert.True(t, errors.Is(entry.Init(), commontypes.ErrInvalidConfig))
})`
$DIR/core/services/relay/evm/types/codec_entry_test.go: `t.Run("Indexed basic types leave their native and checked types as-is", func(t *testing.T) {
anyType, err := abi.NewType("int16", "", []abi.ArgumentMarshaling{})
require.NoError(t, err)
entry := NewCodecEntry(abi.Arguments{{Name: "Name", Type: anyType, Indexed: true}}, nil, nil)
require.NoError(t, entry.Init())
checkedField, ok := entry.CheckedType().FieldByName("Name")
require.True(t, ok)
assert.Equal(t, reflect.TypeOf((*int16)(nil)), checkedField.Type)
native, err := entry.ToNative(reflect.New(entry.CheckedType()))
require.NoError(t, err)
iNative := reflect.Indirect(native)
assertHaveSameStructureAndNames(t, iNative.Type(), entry.CheckedType())
})`
$DIR/core/services/relay/evm/types/codec_entry_test.go: `assertHaveSameStructureAndNames(t, iNative.Type(), entry.CheckedType())`
$DIR/core/services/relay/evm/types/codec_entry_test.go: `t.Run("Indexed non basic types change to hash", func(t *testing.T) {
anyType, err := abi.NewType("string", "", []abi.ArgumentMarshaling{})
require.NoError(t, err)
entry := NewCodecEntry(abi.Arguments{{Name: "Name", Type: anyType, Indexed: true}}, nil, nil)
require.NoError(t, entry.Init())
nativeField, ok := entry.CheckedType().FieldByName("Name")
require.True(t, ok)
assert.Equal(t, reflect.TypeOf(&common.Hash{}), nativeField.Type)
native, err := entry.ToNative(reflect.New(entry.CheckedType()))
require.NoError(t, err)
assertHaveSameStructureAndNames(t, native.Type().Elem(), entry.CheckedType())
})`
$DIR/core/services/relay/evm/types/codec_entry_test.go: `assertHaveSameStructureAndNames(t, native.Type().Elem(), entry.CheckedType())`
$DIR/core/services/relay/evm/types/codec_entry_test.go: `t.Run("Too many indexed items returns an error", func(t *testing.T) {
anyType, err := abi.NewType("int16", "", []abi.ArgumentMarshaling{})
require.NoError(t, err)
entry := NewCodecEntry(
abi.Arguments{
{Name: "Name1", Type: anyType, Indexed: true},
{Name: "Name2", Type: anyType, Indexed: true},
{Name: "Name3", Type: anyType, Indexed: true},
{Name: "Name4", Type: anyType, Indexed: true},
}, nil, nil)
require.True(t, errors.Is(entry.Init(), commontypes.ErrInvalidConfig))
})`
$DIR/core/services/relay/evm/types/codec_entry_test.go: `t.Run("Using unsupported types by go-ethereum returns an error", func(t *testing.T) {
anyType, err := abi.NewType("int256[2]", "", []abi.ArgumentMarshaling{})
require.NoError(t, err)
entry := NewCodecEntry(abi.Arguments{{Name: "Name", Type: anyType, Indexed: true}}, nil, nil)
assert.True(t, errors.Is(entry.Init(), commontypes.ErrInvalidConfig))
})`
$DIR/core/services/relay/evm/types/codec_entry_test.go: `t.Run("Modifier returns provided modifier", func(t *testing.T) {
anyType, err := abi.NewType("int16", "", []abi.ArgumentMarshaling{})
require.NoError(t, err)
mod := codec.NewRenamer(map[string]string{"Name": "RenamedName"})
entry := NewCodecEntry(abi.Arguments{{Name: "Name", Type: anyType, Indexed: true}}, nil, mod)
assert.Equal(t, mod, entry.Modifier())
})`
$DIR/core/services/relay/evm/types/codec_entry_test.go: `.Run("basic types", func(t *testing.T) {
type1, err := abi.NewType("uint16", "", []abi.ArgumentMarshaling{})
require.NoError(t, err)
type2, err := abi.NewType("string", "", []abi.ArgumentMarshaling{})
require.NoError(t, err)
type3, err := abi.NewType("uint24", "", []abi.ArgumentMarshaling{})
require.NoError(t, err)
type4, err := abi.NewType("int24", "", []abi.ArgumentMarshaling{})
require.NoError(t, err)
args := abi.Arguments{
{Name: "Field1", Type: type1},
{Name: "Field2", Type: type2},
{Name: "Field3", Type: type3},
{Name: "Field4", Type: type4},
}
entry := NewCodecEntry(args, nil, nil)
require.NoError(t, entry.Init())
checked := reflect.New(entry.CheckedType())
iChecked := reflect.Indirect(checked)
f1 := uint16(2)
iChecked.FieldByName("Field1").Set(reflect.ValueOf(&f1))
f2 := "any string"
iChecked.FieldByName("Field2").Set(reflect.ValueOf(&f2))
f3 := big.NewInt( /*2^24 - 1*/ 16777215)
setAndVerifyLimit(t, (*uint24)(f3), f3, iChecked.FieldByName("Field3"))
f4 := big.NewInt( /*2^23 - 1*/ 8388607)
setAndVerifyLimit(t, (*int24)(f4), f4, iChecked.FieldByName("Field4"))
rNative, err := entry.ToNative(checked)
require.NoError(t, err)
iNative := reflect.Indirect(rNative)
assert.Equal(t, iNative.Field(0).Interface(), iChecked.Field(0).Interface())
assert.Equal(t, iNative.Field(1).Interface(), iChecked.Field(1).Interface())
assert.Equal(t, iNative.Field(2).Interface(), f3)
assert.Equal(t, iNative.Field(3).Interface(), f4)
assertHaveSameStructureAndNames(t, iNative.Type(), entry.CheckedType())
})`
$DIR/core/services/relay/evm/types/codec_entry_test.go: `.NewType("uint16", "", []abi.ArgumentMarshaling{})`
$DIR/core/services/relay/evm/types/codec_entry_test.go: `.NewType("string", "", []abi.ArgumentMarshaling{})`
$DIR/core/services/relay/evm/types/codec_entry_test.go: `.NewType("uint24", "", []abi.ArgumentMarshaling{})`
$DIR/core/services/relay/evm/types/codec_entry_test.go: `.NewType("int24", "", []abi.ArgumentMarshaling{})`
$DIR/core/services/relay/evm/types/codec_entry_test.go: `.New(entry.CheckedType())`
$DIR/core/services/relay/evm/types/codec_entry_test.go: `.CheckedType()`
$DIR/core/services/relay/evm/types/codec_entry_test.go: `.Indirect(checked)`
$DIR/core/services/relay/evm/types/codec_entry_test.go: `.FieldByName("Field1")`
$DIR/core/services/relay/evm/types/codec_entry_test.go: `.Set(reflect.ValueOf(&f1))`
$DIR/core/services/relay/evm/types/codec_entry_test.go: `.ValueOf(&f1)`
$DIR/core/services/relay/evm/types/codec_entry_test.go: `.FieldByName("Field2")`
$DIR/core/services/relay/evm/types/codec_entry_test.go: `.Set(reflect.ValueOf(&f2))`
$DIR/core/services/relay/evm/types/codec_entry_test.go: `.ValueOf(&f2)`
$DIR/core/services/relay/evm/types/codec_entry_test.go: `.NewInt( /*2^24 - 1*/ 16777215)`
$DIR/core/services/relay/evm/types/codec_entry_test.go: `.FieldByName("Field3")`
$DIR/core/services/relay/evm/types/codec_entry_test.go: `.NewInt( /*2^23 - 1*/ 8388607)`
$DIR/core/services/relay/evm/types/codec_entry_test.go: `.FieldByName("Field4")`
$DIR/core/services/relay/evm/types/codec_entry_test.go: `.ToNative(checked)`
$DIR/core/services/relay/evm/types/codec_entry_test.go: `.Indirect(rNative)`
$DIR/core/services/relay/evm/types/codec_entry_test.go: `.Type()`
$DIR/core/services/relay/evm/types/codec_entry_test.go: `.CheckedType()`
$DIR/core/services/relay/evm/types/codec_entry_test.go: `.Run("tuples", func(t *testing.T) {
type1, err := abi.NewType("uint16", "", []abi.ArgumentMarshaling{})
require.NoError(t, err)
tupleType, err := abi.NewType("tuple", "", []abi.ArgumentMarshaling{
{Name: "Field3", Type: "uint24"},
{Name: "Field4", Type: "int24"},
})
require.NoError(t, err)
args := abi.Arguments{
{Name: "Field1", Type: type1},
{Name: "Field2", Type: tupleType},
}
entry := NewCodecEntry(args, nil, nil)
require.NoError(t, entry.Init())
checked := reflect.New(entry.CheckedType())
iChecked := reflect.Indirect(checked)
f1 := uint16(2)
iChecked.FieldByName("Field1").Set(reflect.ValueOf(&f1))
f2 := iChecked.FieldByName("Field2")
f2.Set(reflect.New(f2.Type().Elem()))
f2 = reflect.Indirect(f2)
f3 := big.NewInt( /*2^24 - 1*/ 16777215)
setAndVerifyLimit(t, (*uint24)(f3), f3, f2.FieldByName("Field3"))
f4 := big.NewInt( /*2^23 - 1*/ 8388607)
setAndVerifyLimit(t, (*int24)(f4), f4, f2.FieldByName("Field4"))
native, err := entry.ToNative(checked)
require.NoError(t, err)
iNative := reflect.Indirect(native)
require.Equal(t, iNative.Field(0).Interface(), iChecked.Field(0).Interface())
nF2 := reflect.Indirect(iNative.Field(1))
assert.Equal(t, nF2.Field(0).Interface(), f3)
assert.Equal(t, nF2.Field(1).Interface(), f4)
assertHaveSameStructureAndNames(t, iNative.Type(), entry.CheckedType())
})`
$DIR/core/services/relay/evm/types/codec_entry_test.go: `.NewType("uint16", "", []abi.ArgumentMarshaling{})`
$DIR/core/services/relay/evm/types/codec_entry_test.go: `.NewType("tuple", "", []abi.ArgumentMarshaling{
{Name: "Field3", Type: "uint24"},
{Name: "Field4", Type: "int24"},
})`
$DIR/core/services/relay/evm/types/codec_entry_test.go: `.New(entry.CheckedType())`
$DIR/core/services/relay/evm/types/codec_entry_test.go: `.CheckedType()`
$DIR/core/services/relay/evm/types/codec_entry_test.go: `.Indirect(checked)`
$DIR/core/services/relay/evm/types/codec_entry_test.go: `.FieldByName("Field1")`
$DIR/core/services/relay/evm/types/codec_entry_test.go: `.Set(reflect.ValueOf(&f1))`
$DIR/core/services/relay/evm/types/codec_entry_test.go: `.ValueOf(&f1)`
$DIR/core/services/relay/evm/types/codec_entry_test.go: `.FieldByName("Field2")`
$DIR/core/services/relay/evm/types/codec_entry_test.go: `.Set(reflect.New(f2.Type().Elem()))`
$DIR/core/services/relay/evm/types/codec_entry_test.go: `.New(f2.Type().Elem())`
$DIR/core/services/relay/evm/types/codec_entry_test.go: `.Type()`
$DIR/core/services/relay/evm/types/codec_entry_test.go: `.Elem()`
$DIR/core/services/relay/evm/types/codec_entry_test.go: `.Indirect(f2)`
$DIR/core/services/relay/evm/types/codec_entry_test.go: `.NewInt( /*2^24 - 1*/ 16777215)`
$DIR/core/services/relay/evm/types/codec_entry_test.go: `.FieldByName("Field3")`
$DIR/core/services/relay/evm/types/codec_entry_test.go: `.NewInt( /*2^23 - 1*/ 8388607)`
$DIR/core/services/relay/evm/types/codec_entry_test.go: `.FieldByName("Field4")`
$DIR/core/services/relay/evm/types/codec_entry_test.go: `.ToNative(checked)`
$DIR/core/services/relay/evm/types/codec_entry_test.go: `.Indirect(native)`
$DIR/core/services/relay/evm/types/codec_entry_test.go: `.Indirect(iNative.Field(1))`
$DIR/core/services/relay/evm/types/codec_entry_test.go: `.Field(1)`
$DIR/core/services/relay/evm/types/codec_entry_test.go: `.Type()`
$DIR/core/services/relay/evm/types/codec_entry_test.go: `.CheckedType()`
$DIR/core/services/relay/evm/types/codec_entry_test.go: `.Run("nested tuple member names are capitalized", func(t *testing.T) {
type1, err := abi.NewType("uint16", "", []abi.ArgumentMarshaling{})
require.NoError(t, err)
tupleType, err := abi.NewType("tuple", "", []abi.ArgumentMarshaling{
{Name: "field3", Type: "uint24"},
{Name: "field4", Type: "int24"},
})
require.NoError(t, err)
args := abi.Arguments{
{Name: "field1", Type: type1},
{Name: "field2", Type: tupleType},
}
entry := NewCodecEntry(args, nil, nil)
require.NoError(t, entry.Init())
checked := reflect.New(entry.CheckedType())
iChecked := reflect.Indirect(checked)
f1 := uint16(2)
iChecked.FieldByName("Field1").Set(reflect.ValueOf(&f1))
f2 := iChecked.FieldByName("Field2")
f2.Set(reflect.New(f2.Type().Elem()))
f2 = reflect.Indirect(f2)
f3 := big.NewInt( /*2^24 - 1*/ 16777215)
setAndVerifyLimit(t, (*uint24)(f3), f3, f2.FieldByName("Field3"))
f4 := big.NewInt( /*2^23 - 1*/ 8388607)
setAndVerifyLimit(t, (*int24)(f4), f4, f2.FieldByName("Field4"))
native, err := entry.ToNative(checked)
require.NoError(t, err)
iNative := reflect.Indirect(native)
require.Equal(t, iNative.Field(0).Interface(), iChecked.Field(0).Interface())
nF2 := reflect.Indirect(iNative.Field(1))
assert.Equal(t, nF2.Field(0).Interface(), f3)
assert.Equal(t, nF2.Field(1).Interface(), f4)
assertHaveSameStructureAndNames(t, iNative.Type(), entry.CheckedType())
})`
$DIR/core/services/relay/evm/types/codec_entry_test.go: `.NewType("uint16", "", []abi.ArgumentMarshaling{})`
$DIR/core/services/relay/evm/types/codec_entry_test.go: `.NewType("tuple", "", []abi.ArgumentMarshaling{
{Name: "field3", Type: "uint24"},
{Name: "field4", Type: "int24"},
})`
$DIR/core/services/relay/evm/types/codec_entry_test.go: `.New(entry.CheckedType())`
$DIR/core/services/relay/evm/types/codec_entry_test.go: `.CheckedType()`
$DIR/core/services/relay/evm/types/codec_entry_test.go: `.Indirect(checked)`
$DIR/core/services/relay/evm/types/codec_entry_test.go: `.FieldByName("Field1")`
$DIR/core/services/relay/evm/types/codec_entry_test.go: `.Set(reflect.ValueOf(&f1))`
$DIR/core/services/relay/evm/types/codec_entry_test.go: `.ValueOf(&f1)`
$DIR/core/services/relay/evm/types/codec_entry_test.go: `.FieldByName("Field2")`
$DIR/core/services/relay/evm/types/codec_entry_test.go: `.Set(reflect.New(f2.Type().Elem()))`
$DIR/core/services/relay/evm/types/codec_entry_test.go: `.New(f2.Type().Elem())`
$DIR/core/services/relay/evm/types/codec_entry_test.go: `.Type()`
$DIR/core/services/relay/evm/types/codec_entry_test.go: `.Elem()`
$DIR/core/services/relay/evm/types/codec_entry_test.go: `.Indirect(f2)`
$DIR/core/services/relay/evm/types/codec_entry_test.go: `.NewInt( /*2^24 - 1*/ 16777215)`
$DIR/core/services/relay/evm/types/codec_entry_test.go: `.FieldByName("Field3")`
$DIR/core/services/relay/evm/types/codec_entry_test.go: `.NewInt( /*2^23 - 1*/ 8388607)`
$DIR/core/services/relay/evm/types/codec_entry_test.go: `.FieldByName("Field4")`
$DIR/core/services/relay/evm/types/codec_entry_test.go: `.ToNative(checked)`
$DIR/core/services/relay/evm/types/codec_entry_test.go: `.Indirect(native)`
$DIR/core/services/relay/evm/types/codec_entry_test.go: `.Indirect(iNative.Field(1))`
$DIR/core/services/relay/evm/types/codec_entry_test.go: `.Field(1)`
$DIR/core/services/relay/evm/types/codec_entry_test.go: `.Type()`
$DIR/core/services/relay/evm/types/codec_entry_test.go: `.CheckedType()`
$DIR/core/services/relay/evm/types/codec_entry_test.go: `.Run("unwrapped types", func(t *testing.T) {
// This exists to allow you to decode single returned values without naming the parameter
wrappedTuple, err := abi.NewType("tuple", "", []abi.ArgumentMarshaling{
{Name: "Field1", Type: "int16"},
})
require.NoError(t, err)
entry := NewCodecEntry(abi.Arguments{{Name: "", Type: wrappedTuple}}, nil, nil)
require.NoError(t, entry.Init())
checked := reflect.New(entry.CheckedType())
iChecked := reflect.Indirect(checked)
anyValue := int16(2)
iChecked.FieldByName("Field1").Set(reflect.ValueOf(&anyValue))
native, err := entry.ToNative(checked)
require.NoError(t, err)
iNative := reflect.Indirect(native)
assert.Equal(t, &anyValue, iNative.FieldByName("Field1").Interface())
assertHaveSameStructureAndNames(t, iNative.Type(), entry.CheckedType())
})`
$DIR/core/services/relay/evm/types/codec_entry_test.go: `.NewType("tuple", "", []abi.ArgumentMarshaling{
{Name: "Field1", Type: "int16"},
})`
$DIR/core/services/relay/evm/types/codec_entry_test.go: `.New(entry.CheckedType())`
$DIR/core/services/relay/evm/types/codec_entry_test.go: `.CheckedType()`
$DIR/core/services/relay/evm/types/codec_entry_test.go: `.Indirect(checked)`
$DIR/core/services/relay/evm/types/codec_entry_test.go: `.FieldByName("Field1")`
$DIR/core/services/relay/evm/types/codec_entry_test.go: `.Set(reflect.ValueOf(&anyValue))`
$DIR/core/services/relay/evm/types/codec_entry_test.go: `.ValueOf(&anyValue)`
$DIR/core/services/relay/evm/types/codec_entry_test.go: `.ToNative(checked)`
$DIR/core/services/relay/evm/types/codec_entry_test.go: `.Indirect(native)`
$DIR/core/services/relay/evm/types/codec_entry_test.go: `.Type()`
$DIR/core/services/relay/evm/types/codec_entry_test.go: `.CheckedType()`
$DIR/core/services/relay/evm/types/codec_entry_test.go: `.Run("slice types", func(t *testing.T) {
type1, err := abi.NewType("int16[]", "", []abi.ArgumentMarshaling{})
require.NoError(t, err)
entry := NewCodecEntry(abi.Arguments{{Name: "Field1", Type: type1}}, nil, nil)
require.NoError(t, entry.Init())
checked := reflect.New(entry.CheckedType())
iChecked := reflect.Indirect(checked)
anySliceValue := &[]int16{2, 3}
iChecked.FieldByName("Field1").Set(reflect.ValueOf(anySliceValue))
native, err := entry.ToNative(checked)
require.NoError(t, err)
iNative := reflect.Indirect(native)
assert.Equal(t, anySliceValue, iNative.FieldByName("Field1").Interface())
assertHaveSameStructureAndNames(t, iNative.Type(), entry.CheckedType())
})`
$DIR/core/services/relay/evm/types/codec_entry_test.go: `.NewType("int16[]", "", []abi.ArgumentMarshaling{})`
$DIR/core/services/relay/evm/types/codec_entry_test.go: `.New(entry.CheckedType())`
$DIR/core/services/relay/evm/types/codec_entry_test.go: `.CheckedType()`
$DIR/core/services/relay/evm/types/codec_entry_test.go: `.Indirect(checked)`
$DIR/core/services/relay/evm/types/codec_entry_test.go: `.FieldByName("Field1")`
$DIR/core/services/relay/evm/types/codec_entry_test.go: `.Set(reflect.ValueOf(anySliceValue))`
$DIR/core/services/relay/evm/types/codec_entry_test.go: `.ValueOf(anySliceValue)`
$DIR/core/services/relay/evm/types/codec_entry_test.go: `.ToNative(checked)`
$DIR/core/services/relay/evm/types/codec_entry_test.go: `.Indirect(native)`
$DIR/core/services/relay/evm/types/codec_entry_test.go: `.Type()`
$DIR/core/services/relay/evm/types/codec_entry_test.go: `.CheckedType()`
$DIR/core/services/relay/evm/types/codec_entry_test.go: `.Run("array types", func(t *testing.T) {
type1, err := abi.NewType("int16[3]", "", []abi.ArgumentMarshaling{})
require.NoError(t, err)
entry := NewCodecEntry(abi.Arguments{{Name: "Field1", Type: type1}}, nil, nil)
require.NoError(t, entry.Init())
checked := reflect.New(entry.CheckedType())
iChecked := reflect.Indirect(checked)
anySliceValue := &[3]int16{2, 3, 30}
iChecked.FieldByName("Field1").Set(reflect.ValueOf(anySliceValue))
native, err := entry.ToNative(checked)
require.NoError(t, err)
iNative := reflect.Indirect(native)
assert.Equal(t, anySliceValue, iNative.FieldByName("Field1").Interface())
})`
$DIR/core/services/relay/evm/types/codec_entry_test.go: `.NewType("int16[3]", "", []abi.ArgumentMarshaling{})`
$DIR/core/services/relay/evm/types/codec_entry_test.go: `.New(entry.CheckedType())`
$DIR/core/services/relay/evm/types/codec_entry_test.go: `.CheckedType()`
$DIR/core/services/relay/evm/types/codec_entry_test.go: `.Indirect(checked)`
$DIR/core/services/relay/evm/types/codec_entry_test.go: `.FieldByName("Field1")`
$DIR/core/services/relay/evm/types/codec_entry_test.go: `.Set(reflect.ValueOf(anySliceValue))`
$DIR/core/services/relay/evm/types/codec_entry_test.go: `.ValueOf(anySliceValue)`
$DIR/core/services/relay/evm/types/codec_entry_test.go: `.ToNative(checked)`
$DIR/core/services/relay/evm/types/codec_entry_test.go: `.Indirect(native)`
$DIR/core/services/relay/evm/types/codec_entry_test.go: `.Run("Not return values makes struct{}", func(t *testing.T) {
entry := NewCodecEntry(abi.Arguments{}, nil, nil)
require.NoError(t, entry.Init())
assert.Equal(t, reflect.TypeOf(struct{}{}), entry.CheckedType())
native, err := entry.ToNative(reflect.ValueOf(&struct{}{}))
require.NoError(t, err)
assert.Equal(t, &struct{}{}, native.Interface())
})`
$DIR/core/services/relay/evm/types/codec_entry_test.go: `.ToNative(reflect.ValueOf(&struct{}{}))`
$DIR/core/services/relay/evm/types/codec_entry_test.go: `.ValueOf(&struct{}{})`
$DIR/core/services/relay/evm/types/codec_entry_test.go: `.Run("Address works", func(t *testing.T) {
address, err := abi.NewType("address", "", []abi.ArgumentMarshaling{})
require.NoError(t, err)
entry := NewCodecEntry(abi.Arguments{{Name: "foo", Type: address}}, nil, nil)
require.NoError(t, entry.Init())
checked := reflect.New(entry.CheckedType())
iChecked := reflect.Indirect(checked)
anyAddr := &common.Address{1, 2, 3}
iChecked.FieldByName("Foo").Set(reflect.ValueOf(anyAddr))
native, err := entry.ToNative(checked)
require.NoError(t, err)
iNative := reflect.Indirect(native)
assert.Equal(t, anyAddr, iNative.FieldByName("Foo").Interface())
assertHaveSameStructureAndNames(t, iNative.Type(), entry.CheckedType())
})`
$DIR/core/services/relay/evm/types/codec_entry_test.go: `.NewType("address", "", []abi.ArgumentMarshaling{})`
$DIR/core/services/relay/evm/types/codec_entry_test.go: `.New(entry.CheckedType())`
$DIR/core/services/relay/evm/types/codec_entry_test.go: `.CheckedType()`
$DIR/core/services/relay/evm/types/codec_entry_test.go: `.Indirect(checked)`
$DIR/core/services/relay/evm/types/codec_entry_test.go: `.FieldByName("Foo")`
$DIR/core/services/relay/evm/types/codec_entry_test.go: `.Set(reflect.ValueOf(anyAddr))`
$DIR/core/services/relay/evm/types/codec_entry_test.go: `.ValueOf(anyAddr)`
$DIR/core/services/relay/evm/types/codec_entry_test.go: `.ToNative(checked)`
$DIR/core/services/relay/evm/types/codec_entry_test.go: `.Indirect(native)`
$DIR/core/services/relay/evm/types/codec_entry_test.go: `.Type()`
$DIR/core/services/relay/evm/types/codec_entry_test.go: `.CheckedType()`
$DIR/core/services/relay/evm/types/codec_entry_test.go: `.Run("Unnamed parameters are named after their locations", func(t *testing.T) {
// use different types to make sure that the right fields have the right types.
anyType1, err := abi.NewType("int64", "", []abi.ArgumentMarshaling{})
require.NoError(t, err)
anyType2, err := abi.NewType("int32", "", []abi.ArgumentMarshaling{})
require.NoError(t, err)
entry := NewCodecEntry(abi.Arguments{{Name: "", Type: anyType1}, {Name: "", Type: anyType2}}, nil, nil)
assert.NoError(t, entry.Init())
ct := entry.CheckedType()
require.Equal(t, 2, ct.NumField())
f0 := ct.Field(0)
assert.Equal(t, "F0", f0.Name)
assert.Equal(t, reflect.TypeOf((*int64)(nil)), f0.Type)
f1 := ct.Field(1)
assert.Equal(t, "F1", f1.Name)
assert.Equal(t, reflect.TypeOf((*int32)(nil)), f1.Type)
})`
$DIR/core/services/relay/evm/types/codec_entry_test.go: `.NewType("int64", "", []abi.ArgumentMarshaling{})`
$DIR/core/services/relay/evm/types/codec_entry_test.go: `.NewType("int32", "", []abi.ArgumentMarshaling{})`
$DIR/core/services/relay/evm/types/codec_entry_test.go: `.CheckedType()`
$DIR/core/services/relay/evm/types/codec_entry_test.go: `.Field(0)`
$DIR/core/services/relay/evm/types/codec_entry_test.go: `.Field(1)`
$DIR/core/services/relay/evm/types/codec_entry_test.go: `.Run("Unnamed parameters adds _Xes at the end if their location name is taken", func(t *testing.T) {
// use different types to make sure that the right fields have the right types.
anyType1, err := abi.NewType("int64", "", []abi.ArgumentMarshaling{})
require.NoError(t, err)
anyType2, err := abi.NewType("int32", "", []abi.ArgumentMarshaling{})
require.NoError(t, err)
entry := NewCodecEntry(abi.Arguments{{Name: "F1", Type: anyType1}, {Name: "", Type: anyType2}}, nil, nil)
assert.NoError(t, entry.Init())
ct := entry.CheckedType()
require.Equal(t, 2, ct.NumField())
f0 := ct.Field(0)
assert.Equal(t, "F1", f0.Name)
assert.Equal(t, reflect.TypeOf((*int64)(nil)), f0.Type)
f1 := ct.Field(1)
assert.Equal(t, "F1_X", f1.Name)
assert.Equal(t, reflect.TypeOf((*int32)(nil)), f1.Type)
})`
$DIR/core/services/relay/evm/types/codec_entry_test.go: `.NewType("int64", "", []abi.ArgumentMarshaling{})`
$DIR/core/services/relay/evm/types/codec_entry_test.go: `.NewType("int32", "", []abi.ArgumentMarshaling{})`
$DIR/core/services/relay/evm/types/codec_entry_test.go: `.CheckedType()`
$DIR/core/services/relay/evm/types/codec_entry_test.go: `.Field(0)`
$DIR/core/services/relay/evm/types/codec_entry_test.go: `.Field(1)`
$DIR/core/services/relay/evm/types/codec_entry_test.go: `.Run("Multiple abi arguments with the same name returns an error", func(t *testing.T) {
anyType, err := abi.NewType("int16[3]", "", []abi.ArgumentMarshaling{})
require.NoError(t, err)
entry := NewCodecEntry(abi.Arguments{{Name: "Name", Type: anyType}, {Name: "Name", Type: anyType}}, nil, nil)
assert.True(t, errors.Is(entry.Init(), commontypes.ErrInvalidConfig))
})`
$DIR/core/services/relay/evm/types/codec_entry_test.go: `.NewType("int16[3]", "", []abi.ArgumentMarshaling{})`
$DIR/core/services/relay/evm/types/codec_entry_test.go: `.Run("Indexed basic types leave their native and checked types as-is", func(t *testing.T) {
anyType, err := abi.NewType("int16", "", []abi.ArgumentMarshaling{})
require.NoError(t, err)
entry := NewCodecEntry(abi.Arguments{{Name: "Name", Type: anyType, Indexed: true}}, nil, nil)
require.NoError(t, entry.Init())
checkedField, ok := entry.CheckedType().FieldByName("Name")
require.True(t, ok)
assert.Equal(t, reflect.TypeOf((*int16)(nil)), checkedField.Type)
native, err := entry.ToNative(reflect.New(entry.CheckedType()))
require.NoError(t, err)
iNative := reflect.Indirect(native)
assertHaveSameStructureAndNames(t, iNative.Type(), entry.CheckedType())
})`
$DIR/core/services/relay/evm/types/codec_entry_test.go: `.NewType("int16", "", []abi.ArgumentMarshaling{})`
$DIR/core/services/relay/evm/types/codec_entry_test.go: `.CheckedType()`
$DIR/core/services/relay/evm/types/codec_entry_test.go: `.FieldByName("Name")`
$DIR/core/services/relay/evm/types/codec_entry_test.go: `.ToNative(reflect.New(entry.CheckedType()))`
$DIR/core/services/relay/evm/types/codec_entry_test.go: `.New(entry.CheckedType())`
$DIR/core/services/relay/evm/types/codec_entry_test.go: `.CheckedType()`
$DIR/core/services/relay/evm/types/codec_entry_test.go: `.Indirect(native)`
$DIR/core/services/relay/evm/types/codec_entry_test.go: `.Type()`
$DIR/core/services/relay/evm/types/codec_entry_test.go: `.CheckedType()`
$DIR/core/services/relay/evm/types/codec_entry_test.go: `.Run("Indexed non basic types change to hash", func(t *testing.T) {
anyType, err := abi.NewType("string", "", []abi.ArgumentMarshaling{})
require.NoError(t, err)
entry := NewCodecEntry(abi.Arguments{{Name: "Name", Type: anyType, Indexed: true}}, nil, nil)
require.NoError(t, entry.Init())
nativeField, ok := entry.CheckedType().FieldByName("Name")
require.True(t, ok)
assert.Equal(t, reflect.TypeOf(&common.Hash{}), nativeField.Type)
native, err := entry.ToNative(reflect.New(entry.CheckedType()))
require.NoError(t, err)
assertHaveSameStructureAndNames(t, native.Type().Elem(), entry.CheckedType())
})`
$DIR/core/services/relay/evm/types/codec_entry_test.go: `.NewType("string", "", []abi.ArgumentMarshaling{})`
$DIR/core/services/relay/evm/types/codec_entry_test.go: `.CheckedType()`
$DIR/core/services/relay/evm/types/codec_entry_test.go: `.FieldByName("Name")`
$DIR/core/services/relay/evm/types/codec_entry_test.go: `.ToNative(reflect.New(entry.CheckedType()))`
$DIR/core/services/relay/evm/types/codec_entry_test.go: `.New(entry.CheckedType())`
$DIR/core/services/relay/evm/types/codec_entry_test.go: `.CheckedType()`
$DIR/core/services/relay/evm/types/codec_entry_test.go: `.Type()`
$DIR/core/services/relay/evm/types/codec_entry_test.go: `.Elem()`
$DIR/core/services/relay/evm/types/codec_entry_test.go: `.CheckedType()`
$DIR/core/services/relay/evm/types/codec_entry_test.go: `.Run("Too many indexed items returns an error", func(t *testing.T) {
anyType, err := abi.NewType("int16", "", []abi.ArgumentMarshaling{})
require.NoError(t, err)
entry := NewCodecEntry(
abi.Arguments{
{Name: "Name1", Type: anyType, Indexed: true},
{Name: "Name2", Type: anyType, Indexed: true},
{Name: "Name3", Type: anyType, Indexed: true},
{Name: "Name4", Type: anyType, Indexed: true},
}, nil, nil)
require.True(t, errors.Is(entry.Init(), commontypes.ErrInvalidConfig))
})`
$DIR/core/services/relay/evm/types/codec_entry_test.go: `.NewType("int16", "", []abi.ArgumentMarshaling{})`
$DIR/core/services/relay/evm/types/codec_entry_test.go: `.Run("Using unsupported types by go-ethereum returns an error", func(t *testing.T) {
anyType, err := abi.NewType("int256[2]", "", []abi.ArgumentMarshaling{})
require.NoError(t, err)
entry := NewCodecEntry(abi.Arguments{{Name: "Name", Type: anyType, Indexed: true}}, nil, nil)
assert.True(t, errors.Is(entry.Init(), commontypes.ErrInvalidConfig))
})`
$DIR/core/services/relay/evm/types/codec_entry_test.go: `.NewType("int256[2]", "", []abi.ArgumentMarshaling{})`
$DIR/core/services/relay/evm/types/codec_entry_test.go: `.Run("Modifier returns provided modifier", func(t *testing.T) {
anyType, err := abi.NewType("int16", "", []abi.ArgumentMarshaling{})
require.NoError(t, err)
mod := codec.NewRenamer(map[string]string{"Name": "RenamedName"})
entry := NewCodecEntry(abi.Arguments{{Name: "Name", Type: anyType, Indexed: true}}, nil, mod)
assert.Equal(t, mod, entry.Modifier())
})`
$DIR/core/services/relay/evm/types/codec_entry_test.go: `.NewType("int16", "", []abi.ArgumentMarshaling{})`
$DIR/core/services/relay/evm/types/codec_entry_test.go: `.NewRenamer(map[string]string{"Name": "RenamedName"})`
$DIR/core/services/relay/evm/types/codec_entry_test.go: `.NewType("int16", "", []abi.ArgumentMarshaling{})`
$DIR/core/services/relay/evm/types/int_types_test.go: `t.Run(fmt.Sprintf("int%v", i), func(t *testing.T) {
tpe, ok := GetAbiEncodingType(fmt.Sprintf("int%v", i))
require.True(t, ok)
minVal := new(big.Int).Neg(new(big.Int).Exp(big.NewInt(2), big.NewInt(int64(i-1)), nil))
maxVal := new(big.Int).Sub(new(big.Int).Exp(big.NewInt(2), big.NewInt(int64(i-1)), nil), big.NewInt(1))
assertBigIntBounds(t, tpe, minVal, maxVal)
})`
$DIR/core/services/relay/evm/types/int_types_test.go: `assertBigIntBounds(t, tpe, minVal, maxVal)`
$DIR/core/services/relay/evm/types/int_types_test.go: `t.Run(fmt.Sprintf("uint%v", i), func(t *testing.T) {
tep, ok := GetAbiEncodingType(fmt.Sprintf("uint%v", i))
require.True(t, ok)
minVal := big.NewInt(0)
maxVal := new(big.Int).Sub(new(big.Int).Exp(big.NewInt(2), big.NewInt(int64(i)), nil), big.NewInt(1))
assertBigIntBounds(t, tep, minVal, maxVal)
})`
$DIR/core/services/relay/evm/types/int_types_test.go: `assertBigIntBounds(t, tep, minVal, maxVal)`
$DIR/core/services/relay/evm/types/int_types_test.go: `.Run(fmt.Sprintf("int%v", i), func(t *testing.T) {
tpe, ok := GetAbiEncodingType(fmt.Sprintf("int%v", i))
require.True(t, ok)
minVal := new(big.Int).Neg(new(big.Int).Exp(big.NewInt(2), big.NewInt(int64(i-1)), nil))
maxVal := new(big.Int).Sub(new(big.Int).Exp(big.NewInt(2), big.NewInt(int64(i-1)), nil), big.NewInt(1))
assertBigIntBounds(t, tpe, minVal, maxVal)
})`
$DIR/core/services/relay/evm/types/int_types_test.go: `.Sprintf("int%v", i)`
$DIR/core/services/relay/evm/types/int_types_test.go: `.Sprintf("int%v", i)`
$DIR/core/services/relay/evm/types/int_types_test.go: `.Neg(new(big.Int).Exp(big.NewInt(2), big.NewInt(int64(i-1)), nil))`
$DIR/core/services/relay/evm/types/int_types_test.go: `.Exp(big.NewInt(2), big.NewInt(int64(i-1)), nil)`
$DIR/core/services/relay/evm/types/int_types_test.go: `.NewInt(2)`
$DIR/core/services/relay/evm/types/int_types_test.go: `.NewInt(int64(i-1))`
$DIR/core/services/relay/evm/types/int_types_test.go: `.Sub(new(big.Int).Exp(big.NewInt(2), big.NewInt(int64(i-1)), nil), big.NewInt(1))`
$DIR/core/services/relay/evm/types/int_types_test.go: `.Exp(big.NewInt(2), big.NewInt(int64(i-1)), nil)`
$DIR/core/services/relay/evm/types/int_types_test.go: `.NewInt(2)`
$DIR/core/services/relay/evm/types/int_types_test.go: `.NewInt(int64(i-1))`
$DIR/core/services/relay/evm/types/int_types_test.go: `.NewInt(1)`
$DIR/core/services/relay/evm/types/int_types_test.go: `.Run(fmt.Sprintf("uint%v", i), func(t *testing.T) {
tep, ok := GetAbiEncodingType(fmt.Sprintf("uint%v", i))
require.True(t, ok)
minVal := big.NewInt(0)
maxVal := new(big.Int).Sub(new(big.Int).Exp(big.NewInt(2), big.NewInt(int64(i)), nil), big.NewInt(1))
assertBigIntBounds(t, tep, minVal, maxVal)
})`
$DIR/core/services/relay/evm/types/int_types_test.go: `.Sprintf("uint%v", i)`
$DIR/core/services/relay/evm/types/int_types_test.go: `.Sprintf("uint%v", i)`
$DIR/core/services/relay/evm/types/int_types_test.go: `.NewInt(0)`
$DIR/core/services/relay/evm/types/int_types_test.go: `.Sub(new(big.Int).Exp(big.NewInt(2), big.NewInt(int64(i)), nil), big.NewInt(1))`
$DIR/core/services/relay/evm/types/int_types_test.go: `.Exp(big.NewInt(2), big.NewInt(int64(i)), nil)`
$DIR/core/services/relay/evm/types/int_types_test.go: `.NewInt(2)`
$DIR/core/services/relay/evm/types/int_types_test.go: `.NewInt(int64(i))`
$DIR/core/services/relay/evm/types/int_types_test.go: `.NewInt(1)`
$DIR/core/services/relay/evm/types/size_helper_test.go: `t.Run("Basic types all encode to 32 bytes", func(t *testing.T) {
args := abi.Arguments{
{Name: "I8", Type: mustType(t, "int8")},
{Name: "I80", Type: mustType(t, "int80")},
{Name: "I256", Type: mustType(t, "int256")},
{Name: "B3", Type: mustType(t, "bytes3")},
{Name: "B32", Type: mustType(t, "bytes32")},
{Name: "TF", Type: mustType(t, "bool")},
}
runSizeTest(t, anyNumElements, args, int8(9), big.NewInt(3), big.NewInt(200), [3]byte{1, 3, 4}, make32Bytes(1), true)
})`
$DIR/core/services/relay/evm/types/size_helper_test.go: `runSizeTest(t, anyNumElements, args, int8(9), big.NewInt(3), big.NewInt(200), [3]byte{1, 3, 4}, make32Bytes(1), true)`
$DIR/core/services/relay/evm/types/size_helper_test.go: `t.Run("Slices of basic types all encode to 32 bytes each + header and footer", func(t *testing.T) {
args := abi.Arguments{
{Name: "I8", Type: mustType(t, "int8[]")},
{Name: "I80", Type: mustType(t, "int80[]")},
{Name: "I256", Type: mustType(t, "int256[]")},
{Name: "B3", Type: mustType(t, "bytes3[]")},
{Name: "B32", Type: mustType(t, "bytes32[]")},
{Name: "TF", Type: mustType(t, "bool[]")},
}
i8 := []int8{9, 2, 1, 3, 5, 6, 2, 1, 2, 3}
i80 := []*big.Int{big.NewInt(9), big.NewInt(2), big.NewInt(1), big.NewInt(3), big.NewInt(5), big.NewInt(6), big.NewInt(2), big.NewInt(1), big.NewInt(2), big.NewInt(3)}
i256 := []*big.Int{big.NewInt(119), big.NewInt(112), big.NewInt(1), big.NewInt(3), big.NewInt(5), big.NewInt(6), big.NewInt(2), big.NewInt(1), big.NewInt(2), big.NewInt(3)}
b3 := [][3]byte{{1, 2, 3}, {1, 2, 3}, {1, 2, 3}, {1, 2, 3}, {1, 2, 3}, {1, 2, 3}, {1, 2, 3}, {1, 2, 3}, {1, 2, 3}, {1, 2, 3}}
b32 := [][32]byte{make32Bytes(1), make32Bytes(2), make32Bytes(3), make32Bytes(4), make32Bytes(5), make32Bytes(6), make32Bytes(7), make32Bytes(8), make32Bytes(9), make32Bytes(10)}
tf := []bool{true, false, true, false, true, false, true, false, true, false}
runSizeTest(t, anyNumElements, args, i8, i80, i256, b3, b32, tf)
})`
$DIR/core/services/relay/evm/types/size_helper_test.go: `runSizeTest(t, anyNumElements, args, i8, i80, i256, b3, b32, tf)`
$DIR/core/services/relay/evm/types/size_helper_test.go: `t.Run("Arrays of basic types all encode to 32 bytes each", func(t *testing.T) {
args := abi.Arguments{
{Name: "I8", Type: mustType(t, "int8[3]")},
{Name: "I80", Type: mustType(t, "int80[3]")},
{Name: "I256", Type: mustType(t, "int256[3]")},
{Name: "B3", Type: mustType(t, "bytes3[3]")},
{Name: "B32", Type: mustType(t, "bytes32[3]")},
{Name: "TF", Type: mustType(t, "bool[3]")},
}
i8 := [3]int8{9, 2, 1}
i80 := [3]*big.Int{big.NewInt(9), big.NewInt(2), big.NewInt(1)}
i256 := [3]*big.Int{big.NewInt(119), big.NewInt(112), big.NewInt(1)}
b3 := [3][3]byte{{1, 2, 3}, {1, 2, 3}, {1, 2, 3}}
b32 := [3][32]byte{make32Bytes(1), make32Bytes(2), make32Bytes(3)}
tf := [3]bool{true, false, true}
runSizeTest(t, anyNumElements, args, i8, i80, i256, b3, b32, tf)
})`
$DIR/core/services/relay/evm/types/size_helper_test.go: `runSizeTest(t, anyNumElements, args, i8, i80, i256, b3, b32, tf)`
$DIR/core/services/relay/evm/types/size_helper_test.go: `t.Run("Tuples are a sum of their elements", func(t *testing.T) {
tuple1 := []abi.ArgumentMarshaling{
{Name: "I8", Type: "int8"},
{Name: "I80", Type: "int80"},
{Name: "I256", Type: "int256"},
{Name: "B3", Type: "bytes3"},
{Name: "B32", Type: "bytes32"},
{Name: "TF", Type: "bool"},
}
t1, err := abi.NewType("tuple", "", tuple1)
require.NoError(t, err)
tuple2 := []abi.ArgumentMarshaling{
{Name: "I80", Type: "int80"},
{Name: "TF", Type: "bool"},
}
t2, err := abi.NewType("tuple", "", tuple2)
require.NoError(t, err)
args := abi.Arguments{
{Name: "t1", Type: t1},
{Name: "t2", Type: t2},
}
arg1 := struct {
I8 int8
I80 *big.Int
I256 *big.Int
B3 [3]byte
B32 [32]byte
TF bool
}{
int8(9), big.NewInt(3), big.NewInt(200), [3]byte{1, 3, 4}, make32Bytes(1), true,
}
arg2 := struct {
I80 *big.Int
TF bool
}{
big.NewInt(3), true,
}
runSizeTest(t, anyNumElements, args, arg1, arg2)
})`
$DIR/core/services/relay/evm/types/size_helper_test.go: `runSizeTest(t, anyNumElements, args, arg1, arg2)`
$DIR/core/services/relay/evm/types/size_helper_test.go: `t.Run("Slices of tuples are a sum of their elements with header and footer", func(t *testing.T) {
tuple1 := []abi.ArgumentMarshaling{
{Name: "I80", Type: "int80"},
{Name: "TF", Type: "bool"},
}
t1, err := abi.NewType("tuple[]", "", tuple1)
require.NoError(t, err)
args := abi.Arguments{
{Name: "t1", Type: t1},
}
arg1 := []struct {
I80 *big.Int
TF bool
}{
{big.NewInt(1), true},
{big.NewInt(2), true},
{big.NewInt(3), true},
{big.NewInt(4), false},
{big.NewInt(5), true},
{big.NewInt(6), true},
{big.NewInt(7), true},
{big.NewInt(8), false},
{big.NewInt(9), true},
{big.NewInt(10), true},
}
runSizeTest(t, anyNumElements, args, arg1)
})`
$DIR/core/services/relay/evm/types/size_helper_test.go: `runSizeTest(t, anyNumElements, args, arg1)`
$DIR/core/services/relay/evm/types/size_helper_test.go: `t.Run("Arrays of tuples are a sum of their elements", func(t *testing.T) {
tuple1 := []abi.ArgumentMarshaling{
{Name: "I80", Type: "int80"},
{Name: "TF", Type: "bool"},
}
t1, err := abi.NewType("tuple[3]", "", tuple1)
require.NoError(t, err)
args := abi.Arguments{
{Name: "t1", Type: t1},
}
arg1 := []struct {
I80 *big.Int
TF bool
}{
{big.NewInt(1), true},
{big.NewInt(2), true},
{big.NewInt(3), true},
}
runSizeTest(t, anyNumElements, args, arg1)
})`
$DIR/core/services/relay/evm/types/size_helper_test.go: `runSizeTest(t, anyNumElements, args, arg1)`
$DIR/core/services/relay/evm/types/size_helper_test.go: `t.Run("Bytes pack themselves", func(t *testing.T) {
args := abi.Arguments{{Name: "B", Type: mustType(t, "bytes")}}
t.Run("No padding needed", func(t *testing.T) {
padded := []byte("12345789022345678903234567890412345678905123456789061234")
runSizeTest(t, 64, args, padded)
})
t.Run("Padding needed", func(t *testing.T) {
needsPadding := []byte("12345789022345678903234567890412345678905123456")
runSizeTest(t, 56, args, needsPadding)
})
})`
$DIR/core/services/relay/evm/types/size_helper_test.go: `t.Run("No padding needed", func(t *testing.T) {
padded := []byte("12345789022345678903234567890412345678905123456789061234")
runSizeTest(t, 64, args, padded)
})`
$DIR/core/services/relay/evm/types/size_helper_test.go: `runSizeTest(t, 64, args, padded)`
$DIR/core/services/relay/evm/types/size_helper_test.go: `t.Run("Padding needed", func(t *testing.T) {
needsPadding := []byte("12345789022345678903234567890412345678905123456")
runSizeTest(t, 56, args, needsPadding)
})`
$DIR/core/services/relay/evm/types/size_helper_test.go: `runSizeTest(t, 56, args, needsPadding)`
$DIR/core/services/relay/evm/types/size_helper_test.go: `t.Run("Strings pack themselves", func(t *testing.T) {
args := abi.Arguments{{Name: "B", Type: mustType(t, "string")}}
t.Run("No padding needed", func(t *testing.T) {
padded := "12345789022345678903234567890412345678905123456789061234"
runSizeTest(t, 64, args, padded)
})
t.Run("Padding needed", func(t *testing.T) {
needsPadding := "12345789022345678903234567890412345678905123456"
runSizeTest(t, 56, args, needsPadding)
})
})`
$DIR/core/services/relay/evm/types/size_helper_test.go: `t.Run("No padding needed", func(t *testing.T) {
padded := "12345789022345678903234567890412345678905123456789061234"
runSizeTest(t, 64, args, padded)
})`
$DIR/core/services/relay/evm/types/size_helper_test.go: `runSizeTest(t, 64, args, padded)`
$DIR/core/services/relay/evm/types/size_helper_test.go: `t.Run("Padding needed", func(t *testing.T) {
needsPadding := "12345789022345678903234567890412345678905123456"
runSizeTest(t, 56, args, needsPadding)
})`
$DIR/core/services/relay/evm/types/size_helper_test.go: `runSizeTest(t, 56, args, needsPadding)`
$DIR/core/services/relay/evm/types/size_helper_test.go: `t.Run("Nested dynamic types return errors", func(t *testing.T) {
t.Run("Slice in slice", func(t *testing.T) {
args := abi.Arguments{{Name: "B", Type: mustType(t, "int32[][]")}}
_, err := types.GetMaxSize(anyNumElements, args)
assert.IsType(t, commontypes.ErrInvalidType, err)
})
t.Run("Slice in array", func(t *testing.T) {
args := abi.Arguments{{Name: "B", Type: mustType(t, "int32[][2]")}}
_, err := types.GetMaxSize(anyNumElements, args)
assert.IsType(t, commontypes.ErrInvalidType, err)
})
})`
$DIR/core/services/relay/evm/types/size_helper_test.go: `t.Run("Slice in slice", func(t *testing.T) {
args := abi.Arguments{{Name: "B", Type: mustType(t, "int32[][]")}}
_, err := types.GetMaxSize(anyNumElements, args)
assert.IsType(t, commontypes.ErrInvalidType, err)
})`
$DIR/core/services/relay/evm/types/size_helper_test.go: `t.Run("Slice in array", func(t *testing.T) {
args := abi.Arguments{{Name: "B", Type: mustType(t, "int32[][2]")}}
_, err := types.GetMaxSize(anyNumElements, args)
assert.IsType(t, commontypes.ErrInvalidType, err)
})`
$DIR/core/services/relay/evm/types/size_helper_test.go: `t.Run("Slices in a top level tuple works as-if they are the sized element", func(t *testing.T) {
tuple1 := []abi.ArgumentMarshaling{
{Name: "I80", Type: "int80[]"},
{Name: "TF", Type: "bool[]"},
}
t1, err := abi.NewType("tuple", "", tuple1)
require.NoError(t, err)
args := abi.Arguments{{Name: "tuple", Type: t1}}
arg1 := struct {
I80 []*big.Int
TF []bool
}{
I80: []*big.Int{big.NewInt(1), big.NewInt(2), big.NewInt(3), big.NewInt(4), big.NewInt(5), big.NewInt(6), big.NewInt(7), big.NewInt(8), big.NewInt(9), big.NewInt(10)},
TF: []bool{true, true, true, false, true, true, true, false, true, true},
}
runSizeTest(t, anyNumElements, args, arg1)
})`
$DIR/core/services/relay/evm/types/size_helper_test.go: `runSizeTest(t, anyNumElements, args, arg1)`
$DIR/core/services/relay/evm/types/size_helper_test.go: `_, err = types.GetMaxSize(anyNumElements, args)`
$DIR/core/services/relay/evm/types/size_helper_test.go: `.Run("Basic types all encode to 32 bytes", func(t *testing.T) {
args := abi.Arguments{
{Name: "I8", Type: mustType(t, "int8")},
{Name: "I80", Type: mustType(t, "int80")},
{Name: "I256", Type: mustType(t, "int256")},
{Name: "B3", Type: mustType(t, "bytes3")},
{Name: "B32", Type: mustType(t, "bytes32")},
{Name: "TF", Type: mustType(t, "bool")},
}
runSizeTest(t, anyNumElements, args, int8(9), big.NewInt(3), big.NewInt(200), [3]byte{1, 3, 4}, make32Bytes(1), true)
})`
$DIR/core/services/relay/evm/types/size_helper_test.go: `.NewInt(3)`
$DIR/core/services/relay/evm/types/size_helper_test.go: `.NewInt(200)`
$DIR/core/services/relay/evm/types/size_helper_test.go: `.Run("Slices of basic types all encode to 32 bytes each + header and footer", func(t *testing.T) {
args := abi.Arguments{
{Name: "I8", Type: mustType(t, "int8[]")},
{Name: "I80", Type: mustType(t, "int80[]")},
{Name: "I256", Type: mustType(t, "int256[]")},
{Name: "B3", Type: mustType(t, "bytes3[]")},
{Name: "B32", Type: mustType(t, "bytes32[]")},
{Name: "TF", Type: mustType(t, "bool[]")},
}
i8 := []int8{9, 2, 1, 3, 5, 6, 2, 1, 2, 3}
i80 := []*big.Int{big.NewInt(9), big.NewInt(2), big.NewInt(1), big.NewInt(3), big.NewInt(5), big.NewInt(6), big.NewInt(2), big.NewInt(1), big.NewInt(2), big.NewInt(3)}
i256 := []*big.Int{big.NewInt(119), big.NewInt(112), big.NewInt(1), big.NewInt(3), big.NewInt(5), big.NewInt(6), big.NewInt(2), big.NewInt(1), big.NewInt(2), big.NewInt(3)}
b3 := [][3]byte{{1, 2, 3}, {1, 2, 3}, {1, 2, 3}, {1, 2, 3}, {1, 2, 3}, {1, 2, 3}, {1, 2, 3}, {1, 2, 3}, {1, 2, 3}, {1, 2, 3}}
b32 := [][32]byte{make32Bytes(1), make32Bytes(2), make32Bytes(3), make32Bytes(4), make32Bytes(5), make32Bytes(6), make32Bytes(7), make32Bytes(8), make32Bytes(9), make32Bytes(10)}
tf := []bool{true, false, true, false, true, false, true, false, true, false}
runSizeTest(t, anyNumElements, args, i8, i80, i256, b3, b32, tf)
})`
$DIR/core/services/relay/evm/types/size_helper_test.go: `.NewInt(9)`
$DIR/core/services/relay/evm/types/size_helper_test.go: `.NewInt(2)`
$DIR/core/services/relay/evm/types/size_helper_test.go: `.NewInt(1)`
$DIR/core/services/relay/evm/types/size_helper_test.go: `.NewInt(3)`
$DIR/core/services/relay/evm/types/size_helper_test.go: `.NewInt(5)`
$DIR/core/services/relay/evm/types/size_helper_test.go: `.NewInt(6)`
$DIR/core/services/relay/evm/types/size_helper_test.go: `.NewInt(2)`
$DIR/core/services/relay/evm/types/size_helper_test.go: `.NewInt(1)`
$DIR/core/services/relay/evm/types/size_helper_test.go: `.NewInt(2)`
$DIR/core/services/relay/evm/types/size_helper_test.go: `.NewInt(3)`
$DIR/core/services/relay/evm/types/size_helper_test.go: `.NewInt(119)`
$DIR/core/services/relay/evm/types/size_helper_test.go: `.NewInt(112)`
$DIR/core/services/relay/evm/types/size_helper_test.go: `.NewInt(1)`
$DIR/core/services/relay/evm/types/size_helper_test.go: `.NewInt(3)`
$DIR/core/services/relay/evm/types/size_helper_test.go: `.NewInt(5)`
$DIR/core/services/relay/evm/types/size_helper_test.go: `.NewInt(6)`
$DIR/core/services/relay/evm/types/size_helper_test.go: `.NewInt(2)`
$DIR/core/services/relay/evm/types/size_helper_test.go: `.NewInt(1)`
$DIR/core/services/relay/evm/types/size_helper_test.go: `.NewInt(2)`
$DIR/core/services/relay/evm/types/size_helper_test.go: `.NewInt(3)`
$DIR/core/services/relay/evm/types/size_helper_test.go: `.Run("Arrays of basic types all encode to 32 bytes each", func(t *testing.T) {
args := abi.Arguments{
{Name: "I8", Type: mustType(t, "int8[3]")},
{Name: "I80", Type: mustType(t, "int80[3]")},
{Name: "I256", Type: mustType(t, "int256[3]")},
{Name: "B3", Type: mustType(t, "bytes3[3]")},
{Name: "B32", Type: mustType(t, "bytes32[3]")},
{Name: "TF", Type: mustType(t, "bool[3]")},
}
i8 := [3]int8{9, 2, 1}
i80 := [3]*big.Int{big.NewInt(9), big.NewInt(2), big.NewInt(1)}
i256 := [3]*big.Int{big.NewInt(119), big.NewInt(112), big.NewInt(1)}
b3 := [3][3]byte{{1, 2, 3}, {1, 2, 3}, {1, 2, 3}}
b32 := [3][32]byte{make32Bytes(1), make32Bytes(2), make32Bytes(3)}
tf := [3]bool{true, false, true}
runSizeTest(t, anyNumElements, args, i8, i80, i256, b3, b32, tf)
})`
$DIR/core/services/relay/evm/types/size_helper_test.go: `.NewInt(9)`
$DIR/core/services/relay/evm/types/size_helper_test.go: `.NewInt(2)`
$DIR/core/services/relay/evm/types/size_helper_test.go: `.NewInt(1)`
$DIR/core/services/relay/evm/types/size_helper_test.go: `.NewInt(119)`
$DIR/core/services/relay/evm/types/size_helper_test.go: `.NewInt(112)`
$DIR/core/services/relay/evm/types/size_helper_test.go: `.NewInt(1)`
$DIR/core/services/relay/evm/types/size_helper_test.go: `.Run("Tuples are a sum of their elements", func(t *testing.T) {
tuple1 := []abi.ArgumentMarshaling{
{Name: "I8", Type: "int8"},
{Name: "I80", Type: "int80"},
{Name: "I256", Type: "int256"},
{Name: "B3", Type: "bytes3"},
{Name: "B32", Type: "bytes32"},
{Name: "TF", Type: "bool"},
}
t1, err := abi.NewType("tuple", "", tuple1)
require.NoError(t, err)
tuple2 := []abi.ArgumentMarshaling{
{Name: "I80", Type: "int80"},
{Name: "TF", Type: "bool"},
}
t2, err := abi.NewType("tuple", "", tuple2)
require.NoError(t, err)
args := abi.Arguments{
{Name: "t1", Type: t1},
{Name: "t2", Type: t2},
}
arg1 := struct {
I8 int8
I80 *big.Int
I256 *big.Int
B3 [3]byte
B32 [32]byte
TF bool
}{
int8(9), big.NewInt(3), big.NewInt(200), [3]byte{1, 3, 4}, make32Bytes(1), true,
}
arg2 := struct {
I80 *big.Int
TF bool
}{
big.NewInt(3), true,
}
runSizeTest(t, anyNumElements, args, arg1, arg2)
})`
$DIR/core/services/relay/evm/types/size_helper_test.go: `.NewType("tuple", "", tuple1)`
$DIR/core/services/relay/evm/types/size_helper_test.go: `.NewType("tuple", "", tuple2)`
$DIR/core/services/relay/evm/types/size_helper_test.go: `.NewInt(3)`
$DIR/core/services/relay/evm/types/size_helper_test.go: `.NewInt(200)`
$DIR/core/services/relay/evm/types/size_helper_test.go: `.NewInt(3)`
$DIR/core/services/relay/evm/types/size_helper_test.go: `.Run("Slices of tuples are a sum of their elements with header and footer", func(t *testing.T) {
tuple1 := []abi.ArgumentMarshaling{
{Name: "I80", Type: "int80"},
{Name: "TF", Type: "bool"},
}
t1, err := abi.NewType("tuple[]", "", tuple1)
require.NoError(t, err)
args := abi.Arguments{
{Name: "t1", Type: t1},
}
arg1 := []struct {
I80 *big.Int
TF bool
}{
{big.NewInt(1), true},
{big.NewInt(2), true},
{big.NewInt(3), true},
{big.NewInt(4), false},
{big.NewInt(5), true},
{big.NewInt(6), true},
{big.NewInt(7), true},
{big.NewInt(8), false},
{big.NewInt(9), true},
{big.NewInt(10), true},
}
runSizeTest(t, anyNumElements, args, arg1)
})`
$DIR/core/services/relay/evm/types/size_helper_test.go: `.NewType("tuple[]", "", tuple1)`
$DIR/core/services/relay/evm/types/size_helper_test.go: `.NewInt(1)`
$DIR/core/services/relay/evm/types/size_helper_test.go: `.NewInt(2)`
$DIR/core/services/relay/evm/types/size_helper_test.go: `.NewInt(3)`
$DIR/core/services/relay/evm/types/size_helper_test.go: `.NewInt(4)`
$DIR/core/services/relay/evm/types/size_helper_test.go: `.NewInt(5)`
$DIR/core/services/relay/evm/types/size_helper_test.go: `.NewInt(6)`
$DIR/core/services/relay/evm/types/size_helper_test.go: `.NewInt(7)`
$DIR/core/services/relay/evm/types/size_helper_test.go: `.NewInt(8)`
$DIR/core/services/relay/evm/types/size_helper_test.go: `.NewInt(9)`
$DIR/core/services/relay/evm/types/size_helper_test.go: `.NewInt(10)`
$DIR/core/services/relay/evm/types/size_helper_test.go: `.Run("Arrays of tuples are a sum of their elements", func(t *testing.T) {
tuple1 := []abi.ArgumentMarshaling{
{Name: "I80", Type: "int80"},
{Name: "TF", Type: "bool"},
}
t1, err := abi.NewType("tuple[3]", "", tuple1)
require.NoError(t, err)
args := abi.Arguments{
{Name: "t1", Type: t1},
}
arg1 := []struct {
I80 *big.Int
TF bool
}{
{big.NewInt(1), true},
{big.NewInt(2), true},
{big.NewInt(3), true},
}
runSizeTest(t, anyNumElements, args, arg1)
})`
$DIR/core/services/relay/evm/types/size_helper_test.go: `.NewType("tuple[3]", "", tuple1)`
$DIR/core/services/relay/evm/types/size_helper_test.go: `.NewInt(1)`
$DIR/core/services/relay/evm/types/size_helper_test.go: `.NewInt(2)`
$DIR/core/services/relay/evm/types/size_helper_test.go: `.NewInt(3)`
$DIR/core/services/relay/evm/types/size_helper_test.go: `.Run("Bytes pack themselves", func(t *testing.T) {
args := abi.Arguments{{Name: "B", Type: mustType(t, "bytes")}}
t.Run("No padding needed", func(t *testing.T) {
padded := []byte("12345789022345678903234567890412345678905123456789061234")
runSizeTest(t, 64, args, padded)
})
t.Run("Padding needed", func(t *testing.T) {
needsPadding := []byte("12345789022345678903234567890412345678905123456")
runSizeTest(t, 56, args, needsPadding)
})
})`
$DIR/core/services/relay/evm/types/size_helper_test.go: `.Run("No padding needed", func(t *testing.T) {
padded := []byte("12345789022345678903234567890412345678905123456789061234")
runSizeTest(t, 64, args, padded)
})`
$DIR/core/services/relay/evm/types/size_helper_test.go: `.Run("Padding needed", func(t *testing.T) {
needsPadding := []byte("12345789022345678903234567890412345678905123456")
runSizeTest(t, 56, args, needsPadding)
})`
$DIR/core/services/relay/evm/types/size_helper_test.go: `.Run("Strings pack themselves", func(t *testing.T) {
args := abi.Arguments{{Name: "B", Type: mustType(t, "string")}}
t.Run("No padding needed", func(t *testing.T) {
padded := "12345789022345678903234567890412345678905123456789061234"
runSizeTest(t, 64, args, padded)
})
t.Run("Padding needed", func(t *testing.T) {
needsPadding := "12345789022345678903234567890412345678905123456"
runSizeTest(t, 56, args, needsPadding)
})
})`
$DIR/core/services/relay/evm/types/size_helper_test.go: `.Run("No padding needed", func(t *testing.T) {
padded := "12345789022345678903234567890412345678905123456789061234"
runSizeTest(t, 64, args, padded)
})`
$DIR/core/services/relay/evm/types/size_helper_test.go: `.Run("Padding needed", func(t *testing.T) {
needsPadding := "12345789022345678903234567890412345678905123456"
runSizeTest(t, 56, args, needsPadding)
})`
$DIR/core/services/relay/evm/types/size_helper_test.go: `.Run("Nested dynamic types return errors", func(t *testing.T) {
t.Run("Slice in slice", func(t *testing.T) {
args := abi.Arguments{{Name: "B", Type: mustType(t, "int32[][]")}}
_, err := types.GetMaxSize(anyNumElements, args)
assert.IsType(t, commontypes.ErrInvalidType, err)
})
t.Run("Slice in array", func(t *testing.T) {
args := abi.Arguments{{Name: "B", Type: mustType(t, "int32[][2]")}}
_, err := types.GetMaxSize(anyNumElements, args)
assert.IsType(t, commontypes.ErrInvalidType, err)
})
})`
$DIR/core/services/relay/evm/types/size_helper_test.go: `.Run("Slice in slice", func(t *testing.T) {
args := abi.Arguments{{Name: "B", Type: mustType(t, "int32[][]")}}
_, err := types.GetMaxSize(anyNumElements, args)
assert.IsType(t, commontypes.ErrInvalidType, err)
})`
$DIR/core/services/relay/evm/types/size_helper_test.go: `.GetMaxSize(anyNumElements, args)`
$DIR/core/services/relay/evm/types/size_helper_test.go: `.Run("Slice in array", func(t *testing.T) {
args := abi.Arguments{{Name: "B", Type: mustType(t, "int32[][2]")}}
_, err := types.GetMaxSize(anyNumElements, args)
assert.IsType(t, commontypes.ErrInvalidType, err)
})`
$DIR/core/services/relay/evm/types/size_helper_test.go: `.GetMaxSize(anyNumElements, args)`
$DIR/core/services/relay/evm/types/size_helper_test.go: `.Run("Slices in a top level tuple works as-if they are the sized element", func(t *testing.T) {
tuple1 := []abi.ArgumentMarshaling{
{Name: "I80", Type: "int80[]"},
{Name: "TF", Type: "bool[]"},
}
t1, err := abi.NewType("tuple", "", tuple1)
require.NoError(t, err)
args := abi.Arguments{{Name: "tuple", Type: t1}}
arg1 := struct {
I80 []*big.Int
TF []bool
}{
I80: []*big.Int{big.NewInt(1), big.NewInt(2), big.NewInt(3), big.NewInt(4), big.NewInt(5), big.NewInt(6), big.NewInt(7), big.NewInt(8), big.NewInt(9), big.NewInt(10)},
TF: []bool{true, true, true, false, true, true, true, false, true, true},
}
runSizeTest(t, anyNumElements, args, arg1)
})`
$DIR/core/services/relay/evm/types/size_helper_test.go: `.NewType("tuple", "", tuple1)`
$DIR/core/services/relay/evm/types/size_helper_test.go: `.NewInt(1)`
$DIR/core/services/relay/evm/types/size_helper_test.go: `.NewInt(2)`
$DIR/core/services/relay/evm/types/size_helper_test.go: `.NewInt(3)`
$DIR/core/services/relay/evm/types/size_helper_test.go: `.NewInt(4)`
$DIR/core/services/relay/evm/types/size_helper_test.go: `.NewInt(5)`
$DIR/core/services/relay/evm/types/size_helper_test.go: `.NewInt(6)`
$DIR/core/services/relay/evm/types/size_helper_test.go: `.NewInt(7)`
$DIR/core/services/relay/evm/types/size_helper_test.go: `.NewInt(8)`
$DIR/core/services/relay/evm/types/size_helper_test.go: `.NewInt(9)`
$DIR/core/services/relay/evm/types/size_helper_test.go: `.NewInt(10)`
$DIR/core/services/relay/evm/types/size_helper_test.go: `.NewType("tuple", "", tuple2)`
$DIR/core/services/relay/evm/types/size_helper_test.go: `.GetMaxSize(anyNumElements, args)`
$DIR/core/services/relay/evm/types/types_test.go: `.NewRandomEVMChainID()`
$DIR/core/services/relay/evm/types/types_test.go: `.NewHash()`
$DIR/core/services/relay/evm/types/types_test.go: `.Sprintf(`
ChainID = "%s"
FromBlock = %d
FeedID = "0x%x"
`, cid, fromBlock, feedID[:])`
$DIR/core/services/relay/evm/types/types_test.go: `.Unmarshal([]byte(rawToml), &rc)`
$DIR/core/services/relay/evm/types/types_test.go: `.Hex()`
$DIR/core/services/relay/evm/types/types_test.go: `.FeedID.Hex()`
$DIR/core/services/relay/evm/write_target_test.go: `mockCall = append(mockCall, byte(0))`
$DIR/core/services/relay/evm/write_target_test.go: `evmClient.On("CallContract", mock.Anything, mock.Anything, mock.Anything).Return(mockCall, nil).Maybe()`
$DIR/core/services/relay/evm/write_target_test.go: `chain.On("ID").Return(big.NewInt(11155111))`
$DIR/core/services/relay/evm/write_target_test.go: `chain.On("TxManager").Return(txManager)`
$DIR/core/services/relay/evm/write_target_test.go: `chain.On("LogPoller").Return(nil)`
$DIR/core/services/relay/evm/write_target_test.go: `chain.On("Client").Return(evmClient)`
$DIR/core/services/relay/evm/write_target_test.go: `c.EVM[0].Workflow.FromAddress = &addr`
$DIR/core/services/relay/evm/write_target_test.go: `c.EVM[0].Workflow.ForwarderAddress = &forwarderAddr`
$DIR/core/services/relay/evm/write_target_test.go: `chain.On("Config").Return(evmCfg)`
$DIR/core/services/relay/evm/write_target_test.go: `txManager.On("CreateTransaction", mock.Anything, mock.Anything).Return(txmgr.Tx{}, nil).Run(func(args mock.Arguments) {
req := args.Get(1).(txmgr.TxRequest)
payload := make(map[string]any)
method := forwardABI.Methods["report"]
err = method.Inputs.UnpackIntoMap(payload, req.EncodedPayload[4:])
require.NoError(t, err)
require.Equal(t, []byte{0x1, 0x2, 0x3}, payload["rawReport"])
require.Equal(t, [][]byte{}, payload["signatures"])
}).Once()`
$DIR/core/services/relay/evm/write_target_test.go: `err = method.Inputs.UnpackIntoMap(payload, req.EncodedPayload[4:])`
$DIR/core/services/relay/evm/write_target_test.go: `t.Run("succeeds with valid report", func(t *testing.T) {
ctx := testutils.Context(t)
capability, err := evm.NewWriteTarget(ctx, relayer, chain, lggr)
require.NoError(t, err)
config, err := values.NewMap(map[string]any{
"Address": evmCfg.EVM().Workflow().ForwarderAddress().String(),
})
require.NoError(t, err)
inputs, err := values.NewMap(map[string]any{
"signed_report": map[string]any{
"report": []byte{1, 2, 3},
"signatures": [][]byte{},
"context": []byte{4, 5},
"id": []byte{9, 9},
},
})
require.NoError(t, err)
req := capabilities.CapabilityRequest{
Metadata: capabilities.RequestMetadata{
WorkflowID: "test-id",
},
Config: config,
Inputs: inputs,
}
ch, err := capability.Execute(ctx, req)
require.NoError(t, err)
response := <-ch
require.Nil(t, response.Err)
})`
$DIR/core/services/relay/evm/write_target_test.go: `t.Run("succeeds with empty report", func(t *testing.T) {
ctx := testutils.Context(t)
capability, err := evm.NewWriteTarget(ctx, relayer, chain, logger.TestLogger(t))
require.NoError(t, err)
config, err := values.NewMap(map[string]any{
"Address": evmCfg.EVM().Workflow().ForwarderAddress().String(),
})
require.NoError(t, err)
inputs, err := values.NewMap(map[string]any{
"signed_report": map[string]any{
"report": nil,
},
})
require.NoError(t, err)
req := capabilities.CapabilityRequest{
Metadata: capabilities.RequestMetadata{
WorkflowID: "test-id",
},
Config: config,
Inputs: inputs,
}
ch, err := capability.Execute(ctx, req)
require.NoError(t, err)
response := <-ch
require.Nil(t, response.Err)
})`
$DIR/core/services/relay/evm/write_target_test.go: `t.Run("fails with invalid config", func(t *testing.T) {
ctx := testutils.Context(t)
capability, err := evm.NewWriteTarget(ctx, relayer, chain, logger.TestLogger(t))
require.NoError(t, err)
invalidConfig, err := values.NewMap(map[string]any{
"Address": "invalid-address",
})
require.NoError(t, err)
inputs, err := values.NewMap(map[string]any{
"signed_report": map[string]any{
"report": nil,
},
})
require.NoError(t, err)
req := capabilities.CapabilityRequest{
Metadata: capabilities.RequestMetadata{
WorkflowID: "test-id",
},
Config: invalidConfig,
Inputs: inputs,
}
_, err = capability.Execute(ctx, req)
require.Error(t, err)
})`
$DIR/core/services/relay/evm/write_target_test.go: `_, err = capability.Execute(ctx, req)`
$DIR/core/services/relay/evm/write_target_test.go: `txManager.On("CreateTransaction", mock.Anything, mock.Anything).Return(txmgr.Tx{}, errors.New("TXM error"))`
$DIR/core/services/relay/evm/write_target_test.go: `_, err = capability.Execute(ctx, req)`
$DIR/core/services/relay/evm/write_target_test.go: `.NewChain(t)`
$DIR/core/services/relay/evm/write_target_test.go: `.NewMockEvmTxManager(t)`
$DIR/core/services/relay/evm/write_target_test.go: `.NewClient(t)`
$DIR/core/services/relay/evm/write_target_test.go: `.On("CallContract", mock.Anything, mock.Anything, mock.Anything)`
$DIR/core/services/relay/evm/write_target_test.go: `.Return(mockCall, nil)`
$DIR/core/services/relay/evm/write_target_test.go: `.Maybe()`
$DIR/core/services/relay/evm/write_target_test.go: `.On("ID")`
$DIR/core/services/relay/evm/write_target_test.go: `.Return(big.NewInt(11155111))`
$DIR/core/services/relay/evm/write_target_test.go: `.NewInt(11155111)`
$DIR/core/services/relay/evm/write_target_test.go: `.On("TxManager")`
$DIR/core/services/relay/evm/write_target_test.go: `.Return(txManager)`
$DIR/core/services/relay/evm/write_target_test.go: `.On("LogPoller")`
$DIR/core/services/relay/evm/write_target_test.go: `.Return(nil)`
$DIR/core/services/relay/evm/write_target_test.go: `.On("Client")`
$DIR/core/services/relay/evm/write_target_test.go: `.Return(evmClient)`
$DIR/core/services/relay/evm/write_target_test.go: `.NewGeneralConfig(t, func(c *chainlink.Config, s *chainlink.Secrets) {
a := testutils.NewAddress()
addr, err2 := types.NewEIP55Address(a.Hex())
require.NoError(t, err2)
c.EVM[0].Workflow.FromAddress = &addr
forwarderA := testutils.NewAddress()
forwarderAddr, err2 := types.NewEIP55Address(forwarderA.Hex())
require.NoError(t, err2)
c.EVM[0].Workflow.ForwarderAddress = &forwarderAddr
})`
$DIR/core/services/relay/evm/write_target_test.go: `.NewAddress()`
$DIR/core/services/relay/evm/write_target_test.go: `.NewEIP55Address(a.Hex())`
$DIR/core/services/relay/evm/write_target_test.go: `.Hex()`
$DIR/core/services/relay/evm/write_target_test.go: `.NewAddress()`
$DIR/core/services/relay/evm/write_target_test.go: `.NewEIP55Address(forwarderA.Hex())`
$DIR/core/services/relay/evm/write_target_test.go: `.Hex()`
$DIR/core/services/relay/evm/write_target_test.go: `.NewChainScopedConfig(t, cfg)`
$DIR/core/services/relay/evm/write_target_test.go: `.On("Config")`
$DIR/core/services/relay/evm/write_target_test.go: `.Return(evmCfg)`
$DIR/core/services/relay/evm/write_target_test.go: `.NewSqlxDB(t)`
$DIR/core/services/relay/evm/write_target_test.go: `.NewKeyStore(t, db)`
$DIR/core/services/relay/evm/write_target_test.go: `.TestLogger(t)`
$DIR/core/services/relay/evm/write_target_test.go: `.NewRelayer(lggr, chain, relayevm.RelayerOpts{
DS: db,
CSAETHKeystore: keyStore,
CapabilitiesRegistry: evmcapabilities.NewRegistry(lggr),
})`
$DIR/core/services/relay/evm/write_target_test.go: `.NewRegistry(lggr)`
$DIR/core/services/relay/evm/write_target_test.go: `.On("CreateTransaction", mock.Anything, mock.Anything)`
$DIR/core/services/relay/evm/write_target_test.go: `.Return(txmgr.Tx{}, nil)`
$DIR/core/services/relay/evm/write_target_test.go: `.Run(func(args mock.Arguments) {
req := args.Get(1).(txmgr.TxRequest)
payload := make(map[string]any)
method := forwardABI.Methods["report"]
err = method.Inputs.UnpackIntoMap(payload, req.EncodedPayload[4:])
require.NoError(t, err)
require.Equal(t, []byte{0x1, 0x2, 0x3}, payload["rawReport"])
require.Equal(t, [][]byte{}, payload["signatures"])
})`
$DIR/core/services/relay/evm/write_target_test.go: `.Get(1)`
$DIR/core/services/relay/evm/write_target_test.go: `.Inputs.UnpackIntoMap(payload, req.EncodedPayload[4:])`
$DIR/core/services/relay/evm/write_target_test.go: `.Once()`
$DIR/core/services/relay/evm/write_target_test.go: `.Run("succeeds with valid report", func(t *testing.T) {
ctx := testutils.Context(t)
capability, err := evm.NewWriteTarget(ctx, relayer, chain, lggr)
require.NoError(t, err)
config, err := values.NewMap(map[string]any{
"Address": evmCfg.EVM().Workflow().ForwarderAddress().String(),
})
require.NoError(t, err)
inputs, err := values.NewMap(map[string]any{
"signed_report": map[string]any{
"report": []byte{1, 2, 3},
"signatures": [][]byte{},
"context": []byte{4, 5},
"id": []byte{9, 9},
},
})
require.NoError(t, err)
req := capabilities.CapabilityRequest{
Metadata: capabilities.RequestMetadata{
WorkflowID: "test-id",
},
Config: config,
Inputs: inputs,
}
ch, err := capability.Execute(ctx, req)
require.NoError(t, err)
response := <-ch
require.Nil(t, response.Err)
})`
$DIR/core/services/relay/evm/write_target_test.go: `.Context(t)`
$DIR/core/services/relay/evm/write_target_test.go: `.NewWriteTarget(ctx, relayer, chain, lggr)`
$DIR/core/services/relay/evm/write_target_test.go: `.NewMap(map[string]any{
"Address": evmCfg.EVM().Workflow().ForwarderAddress().String(),
})`
$DIR/core/services/relay/evm/write_target_test.go: `.EVM()`
$DIR/core/services/relay/evm/write_target_test.go: `.Workflow()`
$DIR/core/services/relay/evm/write_target_test.go: `.ForwarderAddress()`
$DIR/core/services/relay/evm/write_target_test.go: `.String()`
$DIR/core/services/relay/evm/write_target_test.go: `.NewMap(map[string]any{
"signed_report": map[string]any{
"report": []byte{1, 2, 3},
"signatures": [][]byte{},
"context": []byte{4, 5},
"id": []byte{9, 9},
},
})`
$DIR/core/services/relay/evm/write_target_test.go: `.Execute(ctx, req)`
$DIR/core/services/relay/evm/write_target_test.go: `.Run("succeeds with empty report", func(t *testing.T) {
ctx := testutils.Context(t)
capability, err := evm.NewWriteTarget(ctx, relayer, chain, logger.TestLogger(t))
require.NoError(t, err)
config, err := values.NewMap(map[string]any{
"Address": evmCfg.EVM().Workflow().ForwarderAddress().String(),
})
require.NoError(t, err)
inputs, err := values.NewMap(map[string]any{
"signed_report": map[string]any{
"report": nil,
},
})
require.NoError(t, err)
req := capabilities.CapabilityRequest{
Metadata: capabilities.RequestMetadata{
WorkflowID: "test-id",
},
Config: config,
Inputs: inputs,
}
ch, err := capability.Execute(ctx, req)
require.NoError(t, err)
response := <-ch
require.Nil(t, response.Err)
})`
$DIR/core/services/relay/evm/write_target_test.go: `.Context(t)`
$DIR/core/services/relay/evm/write_target_test.go: `.NewWriteTarget(ctx, relayer, chain, logger.TestLogger(t))`
$DIR/core/services/relay/evm/write_target_test.go: `.TestLogger(t)`
$DIR/core/services/relay/evm/write_target_test.go: `.NewMap(map[string]any{
"Address": evmCfg.EVM().Workflow().ForwarderAddress().String(),
})`
$DIR/core/services/relay/evm/write_target_test.go: `.EVM()`
$DIR/core/services/relay/evm/write_target_test.go: `.Workflow()`
$DIR/core/services/relay/evm/write_target_test.go: `.ForwarderAddress()`
$DIR/core/services/relay/evm/write_target_test.go: `.String()`
$DIR/core/services/relay/evm/write_target_test.go: `.NewMap(map[string]any{
"signed_report": map[string]any{
"report": nil,
},
})`
$DIR/core/services/relay/evm/write_target_test.go: `.Execute(ctx, req)`
$DIR/core/services/relay/evm/write_target_test.go: `.Run("fails with invalid config", func(t *testing.T) {
ctx := testutils.Context(t)
capability, err := evm.NewWriteTarget(ctx, relayer, chain, logger.TestLogger(t))
require.NoError(t, err)
invalidConfig, err := values.NewMap(map[string]any{
"Address": "invalid-address",
})
require.NoError(t, err)
inputs, err := values.NewMap(map[string]any{
"signed_report": map[string]any{
"report": nil,
},
})
require.NoError(t, err)
req := capabilities.CapabilityRequest{
Metadata: capabilities.RequestMetadata{
WorkflowID: "test-id",
},
Config: invalidConfig,
Inputs: inputs,
}
_, err = capability.Execute(ctx, req)
require.Error(t, err)
})`
$DIR/core/services/relay/evm/write_target_test.go: `.Context(t)`
$DIR/core/services/relay/evm/write_target_test.go: `.NewWriteTarget(ctx, relayer, chain, logger.TestLogger(t))`
$DIR/core/services/relay/evm/write_target_test.go: `.TestLogger(t)`
$DIR/core/services/relay/evm/write_target_test.go: `.NewMap(map[string]any{
"Address": "invalid-address",
})`
$DIR/core/services/relay/evm/write_target_test.go: `.NewMap(map[string]any{
"signed_report": map[string]any{
"report": nil,
},
})`
$DIR/core/services/relay/evm/write_target_test.go: `.Execute(ctx, req)`
$DIR/core/services/relay/evm/write_target_test.go: `.Context(t)`
$DIR/core/services/relay/evm/write_target_test.go: `.NewWriteTarget(ctx, relayer, chain, logger.TestLogger(t))`
$DIR/core/services/relay/evm/write_target_test.go: `.TestLogger(t)`
$DIR/core/services/relay/evm/write_target_test.go: `.NewMap(map[string]any{
"Address": evmCfg.EVM().Workflow().ForwarderAddress().String(),
})`
$DIR/core/services/relay/evm/write_target_test.go: `.EVM()`
$DIR/core/services/relay/evm/write_target_test.go: `.Workflow()`
$DIR/core/services/relay/evm/write_target_test.go: `.ForwarderAddress()`
$DIR/core/services/relay/evm/write_target_test.go: `.String()`
$DIR/core/services/relay/evm/write_target_test.go: `.NewMap(map[string]any{
"signed_report": map[string]any{
"report": []byte{1, 2, 3},
"signatures": [][]byte{},
"context": []byte{4, 5},
"id": []byte{9, 9},
},
})`
$DIR/core/services/relay/evm/write_target_test.go: `.On("CreateTransaction", mock.Anything, mock.Anything)`
$DIR/core/services/relay/evm/write_target_test.go: `.Return(txmgr.Tx{}, errors.New("TXM error"))`
$DIR/core/services/relay/evm/write_target_test.go: `.New("TXM error")`
$DIR/core/services/relay/evm/write_target_test.go: `.Execute(ctx, req)`
$DIR/core/services/s4/address_range_test.go: `full.Advance()`
$DIR/core/services/s4/address_range_test.go: `sar.Advance()`
$DIR/core/services/s4/address_range_test.go: `t.Run("invalid intervals", func(t *testing.T) {
_, err := s4.NewInitialAddressRangeForIntervals(0)
assert.ErrorIs(t, err, s4.ErrInvalidIntervals)
_, err = s4.NewInitialAddressRangeForIntervals(3)
assert.ErrorIs(t, err, s4.ErrInvalidIntervals)
})`
$DIR/core/services/s4/address_range_test.go: `_, err = s4.NewInitialAddressRangeForIntervals(3)`
$DIR/core/services/s4/address_range_test.go: `t.Run("full range for one interval", func(t *testing.T) {
r, err := s4.NewInitialAddressRangeForIntervals(1)
assert.NoError(t, err)
assert.Equal(t, s4.NewFullAddressRange(), r)
})`
$DIR/core/services/s4/address_range_test.go: `t.Run("initial range for 256 intervals", func(t *testing.T) {
r, err := s4.NewInitialAddressRangeForIntervals(256)
assert.NoError(t, err)
assert.Equal(t, "0x0", r.MinAddress.Hex())
assert.Equal(t, "0xffffffffffffffffffffffffffffffffffffff", r.MaxAddress.Hex())
})`
$DIR/core/services/s4/address_range_test.go: `r.Advance()`
$DIR/core/services/s4/address_range_test.go: `r.Advance()`
$DIR/core/services/s4/address_range_test.go: `r.Advance()`
$DIR/core/services/s4/address_range_test.go: `r.Advance()`
$DIR/core/services/s4/address_range_test.go: `r.Advance()`
$DIR/core/services/s4/address_range_test.go: `.NewFullAddressRange()`
$DIR/core/services/s4/address_range_test.go: `.Advance()`
$DIR/core/services/s4/address_range_test.go: `.NewI(0x123)`
$DIR/core/services/s4/address_range_test.go: `.NewSingleAddressRange(addr)`
$DIR/core/services/s4/address_range_test.go: `.Advance()`
$DIR/core/services/s4/address_range_test.go: `.Contains(addr)`
$DIR/core/services/s4/address_range_test.go: `.Run("invalid intervals", func(t *testing.T) {
_, err := s4.NewInitialAddressRangeForIntervals(0)
assert.ErrorIs(t, err, s4.ErrInvalidIntervals)
_, err = s4.NewInitialAddressRangeForIntervals(3)
assert.ErrorIs(t, err, s4.ErrInvalidIntervals)
})`
$DIR/core/services/s4/address_range_test.go: `.NewInitialAddressRangeForIntervals(0)`
$DIR/core/services/s4/address_range_test.go: `.NewInitialAddressRangeForIntervals(3)`
$DIR/core/services/s4/address_range_test.go: `.Run("full range for one interval", func(t *testing.T) {
r, err := s4.NewInitialAddressRangeForIntervals(1)
assert.NoError(t, err)
assert.Equal(t, s4.NewFullAddressRange(), r)
})`
$DIR/core/services/s4/address_range_test.go: `.NewInitialAddressRangeForIntervals(1)`
$DIR/core/services/s4/address_range_test.go: `.Run("initial range for 256 intervals", func(t *testing.T) {
r, err := s4.NewInitialAddressRangeForIntervals(256)
assert.NoError(t, err)
assert.Equal(t, "0x0", r.MinAddress.Hex())
assert.Equal(t, "0xffffffffffffffffffffffffffffffffffffff", r.MaxAddress.Hex())
})`
$DIR/core/services/s4/address_range_test.go: `.NewInitialAddressRangeForIntervals(256)`
$DIR/core/services/s4/address_range_test.go: `.NewInitialAddressRangeForIntervals(256)`
$DIR/core/services/s4/address_range_test.go: `.Advance()`
$DIR/core/services/s4/address_range_test.go: `.Advance()`
$DIR/core/services/s4/address_range_test.go: `.Advance()`
$DIR/core/services/s4/address_range_test.go: `.Advance()`
$DIR/core/services/s4/address_range_test.go: `.NewInitialAddressRangeForIntervals(256)`
$DIR/core/services/s4/address_range_test.go: `.Advance()`
$DIR/core/services/s4/address_range_test.go: `.Contains(r.MinAddress.Sub(big.NewI(1)))`
$DIR/core/services/s4/address_range_test.go: `.MinAddress.Sub(big.NewI(1))`
$DIR/core/services/s4/address_range_test.go: `.NewI(1)`
$DIR/core/services/s4/cached_orm_wrapper_test.go: `underlayingORM.On("GetSnapshot", mock.Anything, fullAddressRange).Return(rows, nil).Once()`
$DIR/core/services/s4/cached_orm_wrapper_test.go: `snapshotRowMap[sr.Address.String()] = cache_snapshot[i]`
$DIR/core/services/s4/cached_orm_wrapper_test.go: `t.Run("OK-GetSnapshot_cache_invalidated_after_update", func(t *testing.T) {
ctx := testutils.Context(t)
rows := generateTestSnapshotRows(t, 100)
fullAddressRange := s4.NewFullAddressRange()
lggr := logger.TestLogger(t)
underlayingORM := mocks.NewORM(t)
underlayingORM.On("GetSnapshot", mock.Anything, fullAddressRange).Return(rows, nil).Once()
orm := s4.NewCachedORMWrapper(underlayingORM, lggr)
// first call will go to the underlaying orm implementation to fill the cache
first_snapshot, err := orm.GetSnapshot(ctx, fullAddressRange)
assert.NoError(t, err)
assert.Equal(t, len(rows), len(first_snapshot))
// on the second call, the results will come from the cache, if not the mock will return an error because of .Once()
cache_snapshot, err := orm.GetSnapshot(ctx, fullAddressRange)
assert.NoError(t, err)
assert.Equal(t, len(rows), len(cache_snapshot))
// this update call will invalidate the cache
row := &s4.Row{
Address: big.New(common.HexToAddress("0x0000000000000000000000000000000000000000000000000000000000000005").Big()),
SlotId: 1,
Payload: cltest.MustRandomBytes(t, 32),
Version: 1,
Expiration: time.Now().Add(time.Hour).UnixMilli(),
Confirmed: true,
Signature: cltest.MustRandomBytes(t, 32),
}
underlayingORM.On("Update", mock.Anything, row).Return(nil).Once()
err = orm.Update(ctx, row)
assert.NoError(t, err)
// given the cache was invalidated this request will reach the underlaying orm implementation
underlayingORM.On("GetSnapshot", mock.Anything, fullAddressRange).Return(rows, nil).Once()
third_snapshot, err := orm.GetSnapshot(ctx, fullAddressRange)
assert.NoError(t, err)
assert.Equal(t, len(rows), len(third_snapshot))
})`
$DIR/core/services/s4/cached_orm_wrapper_test.go: `underlayingORM.On("GetSnapshot", mock.Anything, fullAddressRange).Return(rows, nil).Once()`
$DIR/core/services/s4/cached_orm_wrapper_test.go: `underlayingORM.On("Update", mock.Anything, row).Return(nil).Once()`
$DIR/core/services/s4/cached_orm_wrapper_test.go: `err = orm.Update(ctx, row)`
$DIR/core/services/s4/cached_orm_wrapper_test.go: `underlayingORM.On("GetSnapshot", mock.Anything, fullAddressRange).Return(rows, nil).Once()`
$DIR/core/services/s4/cached_orm_wrapper_test.go: `underlayingORM.On("GetSnapshot", mock.Anything, addressRange).Return(rows, nil).Once()`
$DIR/core/services/s4/cached_orm_wrapper_test.go: `underlayingORM.On("Update", mock.Anything, row).Return(nil).Once()`
$DIR/core/services/s4/cached_orm_wrapper_test.go: `err = orm.Update(ctx, row)`
$DIR/core/services/s4/cached_orm_wrapper_test.go: `t.Run("OK-Get_underlaying_ORM_returns_a_row", func(t *testing.T) {
ctx := testutils.Context(t)
underlayingORM := mocks.NewORM(t)
expectedRow := &s4.Row{
Address: address,
SlotId: slotID,
}
underlayingORM.On("Get", mock.Anything, address, slotID).Return(expectedRow, nil).Once()
orm := s4.NewCachedORMWrapper(underlayingORM, lggr)
row, err := orm.Get(ctx, address, slotID)
require.NoError(t, err)
require.Equal(t, expectedRow, row)
})`
$DIR/core/services/s4/cached_orm_wrapper_test.go: `underlayingORM.On("Get", mock.Anything, address, slotID).Return(expectedRow, nil).Once()`
$DIR/core/services/s4/cached_orm_wrapper_test.go: `underlayingORM.On("Get", mock.Anything, address, slotID).Return(nil, fmt.Errorf("some_error")).Once()`
$DIR/core/services/s4/cached_orm_wrapper_test.go: `t.Run("OK-DeletedExpired_underlaying_ORM_returns_a_row", func(t *testing.T) {
ctx := testutils.Context(t)
var expectedDeleted int64 = 10
underlayingORM := mocks.NewORM(t)
underlayingORM.On("DeleteExpired", mock.Anything, limit, now).Return(expectedDeleted, nil).Once()
orm := s4.NewCachedORMWrapper(underlayingORM, lggr)
actualDeleted, err := orm.DeleteExpired(ctx, limit, now)
require.NoError(t, err)
require.Equal(t, expectedDeleted, actualDeleted)
})`
$DIR/core/services/s4/cached_orm_wrapper_test.go: `underlayingORM.On("DeleteExpired", mock.Anything, limit, now).Return(expectedDeleted, nil).Once()`
$DIR/core/services/s4/cached_orm_wrapper_test.go: `underlayingORM.On("DeleteExpired", mock.Anything, limit, now).Return(expectedDeleted, fmt.Errorf("some_error")).Once()`
$DIR/core/services/s4/cached_orm_wrapper_test.go: `t.Run("OK-GetUnconfirmedRows_underlaying_ORM_returns_a_row", func(t *testing.T) {
ctx := testutils.Context(t)
address := big.New(testutils.NewAddress().Big())
var slotID uint = 1
expectedRow := []*s4.Row{{
Address: address,
SlotId: slotID,
}}
underlayingORM := mocks.NewORM(t)
underlayingORM.On("GetUnconfirmedRows", mock.Anything, limit).Return(expectedRow, nil).Once()
orm := s4.NewCachedORMWrapper(underlayingORM, lggr)
actualRow, err := orm.GetUnconfirmedRows(ctx, limit)
require.NoError(t, err)
require.Equal(t, expectedRow, actualRow)
})`
$DIR/core/services/s4/cached_orm_wrapper_test.go: `underlayingORM.On("GetUnconfirmedRows", mock.Anything, limit).Return(expectedRow, nil).Once()`
$DIR/core/services/s4/cached_orm_wrapper_test.go: `underlayingORM.On("GetUnconfirmedRows", mock.Anything, limit).Return(nil, fmt.Errorf("some_error")).Once()`
$DIR/core/services/s4/cached_orm_wrapper_test.go: `.Context(t)`
$DIR/core/services/s4/cached_orm_wrapper_test.go: `.TestLogger(t)`
$DIR/core/services/s4/cached_orm_wrapper_test.go: `.NewCachedORMWrapper(psqlORM, lggr)`
$DIR/core/services/s4/cached_orm_wrapper_test.go: `.GetSnapshot(ctx, s4.NewFullAddressRange())`
$DIR/core/services/s4/cached_orm_wrapper_test.go: `.NewFullAddressRange()`
$DIR/core/services/s4/cached_orm_wrapper_test.go: `.Context(t)`
$DIR/core/services/s4/cached_orm_wrapper_test.go: `.NewFullAddressRange()`
$DIR/core/services/s4/cached_orm_wrapper_test.go: `.TestLogger(t)`
$DIR/core/services/s4/cached_orm_wrapper_test.go: `.NewORM(t)`
$DIR/core/services/s4/cached_orm_wrapper_test.go: `.On("GetSnapshot", mock.Anything, fullAddressRange)`
$DIR/core/services/s4/cached_orm_wrapper_test.go: `.Return(rows, nil)`
$DIR/core/services/s4/cached_orm_wrapper_test.go: `.Once()`
$DIR/core/services/s4/cached_orm_wrapper_test.go: `.NewCachedORMWrapper(underlayingORM, lggr)`
$DIR/core/services/s4/cached_orm_wrapper_test.go: `.GetSnapshot(ctx, fullAddressRange)`
$DIR/core/services/s4/cached_orm_wrapper_test.go: `.GetSnapshot(ctx, fullAddressRange)`
$DIR/core/services/s4/cached_orm_wrapper_test.go: `.Address.String()`
$DIR/core/services/s4/cached_orm_wrapper_test.go: `.Address.String()`
$DIR/core/services/s4/cached_orm_wrapper_test.go: `.Run("OK-GetSnapshot_cache_invalidated_after_update", func(t *testing.T) {
ctx := testutils.Context(t)
rows := generateTestSnapshotRows(t, 100)
fullAddressRange := s4.NewFullAddressRange()
lggr := logger.TestLogger(t)
underlayingORM := mocks.NewORM(t)
underlayingORM.On("GetSnapshot", mock.Anything, fullAddressRange).Return(rows, nil).Once()
orm := s4.NewCachedORMWrapper(underlayingORM, lggr)
// first call will go to the underlaying orm implementation to fill the cache
first_snapshot, err := orm.GetSnapshot(ctx, fullAddressRange)
assert.NoError(t, err)
assert.Equal(t, len(rows), len(first_snapshot))
// on the second call, the results will come from the cache, if not the mock will return an error because of .Once()
cache_snapshot, err := orm.GetSnapshot(ctx, fullAddressRange)
assert.NoError(t, err)
assert.Equal(t, len(rows), len(cache_snapshot))
// this update call will invalidate the cache
row := &s4.Row{
Address: big.New(common.HexToAddress("0x0000000000000000000000000000000000000000000000000000000000000005").Big()),
SlotId: 1,
Payload: cltest.MustRandomBytes(t, 32),
Version: 1,
Expiration: time.Now().Add(time.Hour).UnixMilli(),
Confirmed: true,
Signature: cltest.MustRandomBytes(t, 32),
}
underlayingORM.On("Update", mock.Anything, row).Return(nil).Once()
err = orm.Update(ctx, row)
assert.NoError(t, err)
// given the cache was invalidated this request will reach the underlaying orm implementation
underlayingORM.On("GetSnapshot", mock.Anything, fullAddressRange).Return(rows, nil).Once()
third_snapshot, err := orm.GetSnapshot(ctx, fullAddressRange)
assert.NoError(t, err)
assert.Equal(t, len(rows), len(third_snapshot))
})`
$DIR/core/services/s4/cached_orm_wrapper_test.go: `.Context(t)`
$DIR/core/services/s4/cached_orm_wrapper_test.go: `.NewFullAddressRange()`
$DIR/core/services/s4/cached_orm_wrapper_test.go: `.TestLogger(t)`
$DIR/core/services/s4/cached_orm_wrapper_test.go: `.NewORM(t)`
$DIR/core/services/s4/cached_orm_wrapper_test.go: `.On("GetSnapshot", mock.Anything, fullAddressRange)`
$DIR/core/services/s4/cached_orm_wrapper_test.go: `.Return(rows, nil)`
$DIR/core/services/s4/cached_orm_wrapper_test.go: `.Once()`
$DIR/core/services/s4/cached_orm_wrapper_test.go: `.NewCachedORMWrapper(underlayingORM, lggr)`
$DIR/core/services/s4/cached_orm_wrapper_test.go: `.GetSnapshot(ctx, fullAddressRange)`
$DIR/core/services/s4/cached_orm_wrapper_test.go: `.GetSnapshot(ctx, fullAddressRange)`
$DIR/core/services/s4/cached_orm_wrapper_test.go: `.New(common.HexToAddress("0x0000000000000000000000000000000000000000000000000000000000000005").Big())`
$DIR/core/services/s4/cached_orm_wrapper_test.go: `.HexToAddress("0x0000000000000000000000000000000000000000000000000000000000000005")`
$DIR/core/services/s4/cached_orm_wrapper_test.go: `.Big()`
$DIR/core/services/s4/cached_orm_wrapper_test.go: `.MustRandomBytes(t, 32)`
$DIR/core/services/s4/cached_orm_wrapper_test.go: `.Now()`
$DIR/core/services/s4/cached_orm_wrapper_test.go: `.Add(time.Hour)`
$DIR/core/services/s4/cached_orm_wrapper_test.go: `.UnixMilli()`
$DIR/core/services/s4/cached_orm_wrapper_test.go: `.MustRandomBytes(t, 32)`
$DIR/core/services/s4/cached_orm_wrapper_test.go: `.On("Update", mock.Anything, row)`
$DIR/core/services/s4/cached_orm_wrapper_test.go: `.Return(nil)`
$DIR/core/services/s4/cached_orm_wrapper_test.go: `.Once()`
$DIR/core/services/s4/cached_orm_wrapper_test.go: `.Update(ctx, row)`
$DIR/core/services/s4/cached_orm_wrapper_test.go: `.On("GetSnapshot", mock.Anything, fullAddressRange)`
$DIR/core/services/s4/cached_orm_wrapper_test.go: `.Return(rows, nil)`
$DIR/core/services/s4/cached_orm_wrapper_test.go: `.Once()`
$DIR/core/services/s4/cached_orm_wrapper_test.go: `.GetSnapshot(ctx, fullAddressRange)`
$DIR/core/services/s4/cached_orm_wrapper_test.go: `.Context(t)`
$DIR/core/services/s4/cached_orm_wrapper_test.go: `.New(common.BytesToAddress(bytes.Repeat([]byte{0x00}, common.AddressLength)).Big())`
$DIR/core/services/s4/cached_orm_wrapper_test.go: `.BytesToAddress(bytes.Repeat([]byte{0x00}, common.AddressLength))`
$DIR/core/services/s4/cached_orm_wrapper_test.go: `.Repeat([]byte{0x00}, common.AddressLength)`
$DIR/core/services/s4/cached_orm_wrapper_test.go: `.Big()`
$DIR/core/services/s4/cached_orm_wrapper_test.go: `.New(common.BytesToAddress(append(bytes.Repeat([]byte{0x00}, common.AddressLength-1), 3)).Big())`
$DIR/core/services/s4/cached_orm_wrapper_test.go: `.BytesToAddress(append(bytes.Repeat([]byte{0x00}, common.AddressLength-1), 3))`
$DIR/core/services/s4/cached_orm_wrapper_test.go: `.Repeat([]byte{0x00}, common.AddressLength-1)`
$DIR/core/services/s4/cached_orm_wrapper_test.go: `.Big()`
$DIR/core/services/s4/cached_orm_wrapper_test.go: `.TestLogger(t)`
$DIR/core/services/s4/cached_orm_wrapper_test.go: `.NewORM(t)`
$DIR/core/services/s4/cached_orm_wrapper_test.go: `.On("GetSnapshot", mock.Anything, addressRange)`
$DIR/core/services/s4/cached_orm_wrapper_test.go: `.Return(rows, nil)`
$DIR/core/services/s4/cached_orm_wrapper_test.go: `.Once()`
$DIR/core/services/s4/cached_orm_wrapper_test.go: `.NewCachedORMWrapper(underlayingORM, lggr)`
$DIR/core/services/s4/cached_orm_wrapper_test.go: `.GetSnapshot(ctx, addressRange)`
$DIR/core/services/s4/cached_orm_wrapper_test.go: `.GetSnapshot(ctx, addressRange)`
$DIR/core/services/s4/cached_orm_wrapper_test.go: `.New(common.BytesToAddress(append(bytes.Repeat([]byte{0x00}, common.AddressLength-1), 5)).Big())`
$DIR/core/services/s4/cached_orm_wrapper_test.go: `.BytesToAddress(append(bytes.Repeat([]byte{0x00}, common.AddressLength-1), 5))`
$DIR/core/services/s4/cached_orm_wrapper_test.go: `.Repeat([]byte{0x00}, common.AddressLength-1)`
$DIR/core/services/s4/cached_orm_wrapper_test.go: `.Big()`
$DIR/core/services/s4/cached_orm_wrapper_test.go: `.MustRandomBytes(t, 32)`
$DIR/core/services/s4/cached_orm_wrapper_test.go: `.Now()`
$DIR/core/services/s4/cached_orm_wrapper_test.go: `.Add(time.Hour)`
$DIR/core/services/s4/cached_orm_wrapper_test.go: `.UnixMilli()`
$DIR/core/services/s4/cached_orm_wrapper_test.go: `.MustRandomBytes(t, 32)`
$DIR/core/services/s4/cached_orm_wrapper_test.go: `.On("Update", mock.Anything, row)`
$DIR/core/services/s4/cached_orm_wrapper_test.go: `.Return(nil)`
$DIR/core/services/s4/cached_orm_wrapper_test.go: `.Once()`
$DIR/core/services/s4/cached_orm_wrapper_test.go: `.Update(ctx, row)`
$DIR/core/services/s4/cached_orm_wrapper_test.go: `.GetSnapshot(ctx, addressRange)`
$DIR/core/services/s4/cached_orm_wrapper_test.go: `.New(testutils.NewAddress().Big())`
$DIR/core/services/s4/cached_orm_wrapper_test.go: `.NewAddress()`
$DIR/core/services/s4/cached_orm_wrapper_test.go: `.Big()`
$DIR/core/services/s4/cached_orm_wrapper_test.go: `.TestLogger(t)`
$DIR/core/services/s4/cached_orm_wrapper_test.go: `.Run("OK-Get_underlaying_ORM_returns_a_row", func(t *testing.T) {
ctx := testutils.Context(t)
underlayingORM := mocks.NewORM(t)
expectedRow := &s4.Row{
Address: address,
SlotId: slotID,
}
underlayingORM.On("Get", mock.Anything, address, slotID).Return(expectedRow, nil).Once()
orm := s4.NewCachedORMWrapper(underlayingORM, lggr)
row, err := orm.Get(ctx, address, slotID)
require.NoError(t, err)
require.Equal(t, expectedRow, row)
})`
$DIR/core/services/s4/cached_orm_wrapper_test.go: `.Context(t)`
$DIR/core/services/s4/cached_orm_wrapper_test.go: `.NewORM(t)`
$DIR/core/services/s4/cached_orm_wrapper_test.go: `.On("Get", mock.Anything, address, slotID)`
$DIR/core/services/s4/cached_orm_wrapper_test.go: `.Return(expectedRow, nil)`
$DIR/core/services/s4/cached_orm_wrapper_test.go: `.Once()`
$DIR/core/services/s4/cached_orm_wrapper_test.go: `.NewCachedORMWrapper(underlayingORM, lggr)`
$DIR/core/services/s4/cached_orm_wrapper_test.go: `.Get(ctx, address, slotID)`
$DIR/core/services/s4/cached_orm_wrapper_test.go: `.Context(t)`
$DIR/core/services/s4/cached_orm_wrapper_test.go: `.NewORM(t)`
$DIR/core/services/s4/cached_orm_wrapper_test.go: `.On("Get", mock.Anything, address, slotID)`
$DIR/core/services/s4/cached_orm_wrapper_test.go: `.Return(nil, fmt.Errorf("some_error"))`
$DIR/core/services/s4/cached_orm_wrapper_test.go: `.Once()`
$DIR/core/services/s4/cached_orm_wrapper_test.go: `.NewCachedORMWrapper(underlayingORM, lggr)`
$DIR/core/services/s4/cached_orm_wrapper_test.go: `.Get(ctx, address, slotID)`
$DIR/core/services/s4/cached_orm_wrapper_test.go: `.Now()`
$DIR/core/services/s4/cached_orm_wrapper_test.go: `.TestLogger(t)`
$DIR/core/services/s4/cached_orm_wrapper_test.go: `.Run("OK-DeletedExpired_underlaying_ORM_returns_a_row", func(t *testing.T) {
ctx := testutils.Context(t)
var expectedDeleted int64 = 10
underlayingORM := mocks.NewORM(t)
underlayingORM.On("DeleteExpired", mock.Anything, limit, now).Return(expectedDeleted, nil).Once()
orm := s4.NewCachedORMWrapper(underlayingORM, lggr)
actualDeleted, err := orm.DeleteExpired(ctx, limit, now)
require.NoError(t, err)
require.Equal(t, expectedDeleted, actualDeleted)
})`
$DIR/core/services/s4/cached_orm_wrapper_test.go: `.Context(t)`
$DIR/core/services/s4/cached_orm_wrapper_test.go: `.NewORM(t)`
$DIR/core/services/s4/cached_orm_wrapper_test.go: `.On("DeleteExpired", mock.Anything, limit, now)`
$DIR/core/services/s4/cached_orm_wrapper_test.go: `.Return(expectedDeleted, nil)`
$DIR/core/services/s4/cached_orm_wrapper_test.go: `.Once()`
$DIR/core/services/s4/cached_orm_wrapper_test.go: `.NewCachedORMWrapper(underlayingORM, lggr)`
$DIR/core/services/s4/cached_orm_wrapper_test.go: `.DeleteExpired(ctx, limit, now)`
$DIR/core/services/s4/cached_orm_wrapper_test.go: `.Context(t)`
$DIR/core/services/s4/cached_orm_wrapper_test.go: `.NewORM(t)`
$DIR/core/services/s4/cached_orm_wrapper_test.go: `.On("DeleteExpired", mock.Anything, limit, now)`
$DIR/core/services/s4/cached_orm_wrapper_test.go: `.Return(expectedDeleted, fmt.Errorf("some_error"))`
$DIR/core/services/s4/cached_orm_wrapper_test.go: `.Once()`
$DIR/core/services/s4/cached_orm_wrapper_test.go: `.NewCachedORMWrapper(underlayingORM, lggr)`
$DIR/core/services/s4/cached_orm_wrapper_test.go: `.DeleteExpired(ctx, limit, now)`
$DIR/core/services/s4/cached_orm_wrapper_test.go: `.TestLogger(t)`
$DIR/core/services/s4/cached_orm_wrapper_test.go: `.Run("OK-GetUnconfirmedRows_underlaying_ORM_returns_a_row", func(t *testing.T) {
ctx := testutils.Context(t)
address := big.New(testutils.NewAddress().Big())
var slotID uint = 1
expectedRow := []*s4.Row{{
Address: address,
SlotId: slotID,
}}
underlayingORM := mocks.NewORM(t)
underlayingORM.On("GetUnconfirmedRows", mock.Anything, limit).Return(expectedRow, nil).Once()
orm := s4.NewCachedORMWrapper(underlayingORM, lggr)
actualRow, err := orm.GetUnconfirmedRows(ctx, limit)
require.NoError(t, err)
require.Equal(t, expectedRow, actualRow)
})`
$DIR/core/services/s4/cached_orm_wrapper_test.go: `.Context(t)`
$DIR/core/services/s4/cached_orm_wrapper_test.go: `.New(testutils.NewAddress().Big())`
$DIR/core/services/s4/cached_orm_wrapper_test.go: `.NewAddress()`
$DIR/core/services/s4/cached_orm_wrapper_test.go: `.Big()`
$DIR/core/services/s4/cached_orm_wrapper_test.go: `.NewORM(t)`
$DIR/core/services/s4/cached_orm_wrapper_test.go: `.On("GetUnconfirmedRows", mock.Anything, limit)`
$DIR/core/services/s4/cached_orm_wrapper_test.go: `.Return(expectedRow, nil)`
$DIR/core/services/s4/cached_orm_wrapper_test.go: `.Once()`
$DIR/core/services/s4/cached_orm_wrapper_test.go: `.NewCachedORMWrapper(underlayingORM, lggr)`
$DIR/core/services/s4/cached_orm_wrapper_test.go: `.GetUnconfirmedRows(ctx, limit)`
$DIR/core/services/s4/cached_orm_wrapper_test.go: `.Context(t)`
$DIR/core/services/s4/cached_orm_wrapper_test.go: `.NewORM(t)`
$DIR/core/services/s4/cached_orm_wrapper_test.go: `.On("GetUnconfirmedRows", mock.Anything, limit)`
$DIR/core/services/s4/cached_orm_wrapper_test.go: `.Return(nil, fmt.Errorf("some_error"))`
$DIR/core/services/s4/cached_orm_wrapper_test.go: `.Once()`
$DIR/core/services/s4/cached_orm_wrapper_test.go: `.NewCachedORMWrapper(underlayingORM, lggr)`
$DIR/core/services/s4/cached_orm_wrapper_test.go: `.GetUnconfirmedRows(ctx, limit)`
$DIR/core/services/s4/envelope_test.go: `t.Run("signing", func(t *testing.T) {
privateKey, err := crypto.GenerateKey()
assert.NoError(t, err)
sig, err := env.Sign(privateKey)
assert.NoError(t, err)
addr, err := env.GetSignerAddress(sig)
assert.NoError(t, err)
publicKey := privateKey.Public()
publicKeyECDSA, ok := publicKey.(*ecdsa.PublicKey)
assert.True(t, ok)
assert.Equal(t, crypto.PubkeyToAddress(*publicKeyECDSA), addr)
})`
$DIR/core/services/s4/envelope_test.go: `err = json.Unmarshal(js, &decoded)`
$DIR/core/services/s4/envelope_test.go: `.Random32Byte()`
$DIR/core/services/s4/envelope_test.go: `.Now()`
$DIR/core/services/s4/envelope_test.go: `.Add(time.Hour)`
$DIR/core/services/s4/envelope_test.go: `.UnixMilli()`
$DIR/core/services/s4/envelope_test.go: `.NewAddress()`
$DIR/core/services/s4/envelope_test.go: `.NewEnvelopeFromRecord(key, &s4.Record{
Payload: payload[:],
Expiration: expiration,
})`
$DIR/core/services/s4/envelope_test.go: `.Run("signing", func(t *testing.T) {
privateKey, err := crypto.GenerateKey()
assert.NoError(t, err)
sig, err := env.Sign(privateKey)
assert.NoError(t, err)
addr, err := env.GetSignerAddress(sig)
assert.NoError(t, err)
publicKey := privateKey.Public()
publicKeyECDSA, ok := publicKey.(*ecdsa.PublicKey)
assert.True(t, ok)
assert.Equal(t, crypto.PubkeyToAddress(*publicKeyECDSA), addr)
})`
$DIR/core/services/s4/envelope_test.go: `.GenerateKey()`
$DIR/core/services/s4/envelope_test.go: `.Sign(privateKey)`
$DIR/core/services/s4/envelope_test.go: `.GetSignerAddress(sig)`
$DIR/core/services/s4/envelope_test.go: `.Public()`
$DIR/core/services/s4/envelope_test.go: `.ToJson()`
$DIR/core/services/s4/envelope_test.go: `.Unmarshal(js, &decoded)`
$DIR/core/services/s4/envelope_test.go: `.ToJson()`
$DIR/core/services/s4/in_memory_orm_test.go: `t.Run("row not found", func(t *testing.T) {
ctx := testutils.Context(t)
_, err := orm.Get(ctx, big.New(address.Big()), slotId)
assert.ErrorIs(t, err, s4.ErrNotFound)
})`
$DIR/core/services/s4/in_memory_orm_test.go: `t.Run("insert and get", func(t *testing.T) {
ctx := testutils.Context(t)
err := orm.Update(ctx, row)
assert.NoError(t, err)
e, err := orm.Get(ctx, big.New(address.Big()), slotId)
assert.NoError(t, err)
assert.Equal(t, row, e)
})`
$DIR/core/services/s4/in_memory_orm_test.go: `row.Version = 5`
$DIR/core/services/s4/in_memory_orm_test.go: `err = orm.Update(ctx, row)`
$DIR/core/services/s4/in_memory_orm_test.go: `row.Confirmed = true`
$DIR/core/services/s4/in_memory_orm_test.go: `err = orm.Update(ctx, row)`
$DIR/core/services/s4/in_memory_orm_test.go: `thisAddress[0] = byte(i)`
$DIR/core/services/s4/in_memory_orm_test.go: `thisAddress[0] = byte(i)`
$DIR/core/services/s4/in_memory_orm_test.go: `time.Sleep(time.Millisecond)`
$DIR/core/services/s4/in_memory_orm_test.go: `thisAddress[0] = byte(i)`
$DIR/core/services/s4/in_memory_orm_test.go: `testMap[rows[i].Version]++`
$DIR/core/services/s4/in_memory_orm_test.go: `.NewAddress()`
$DIR/core/services/s4/in_memory_orm_test.go: `.Random32Byte()`
$DIR/core/services/s4/in_memory_orm_test.go: `.Random32Byte()`
$DIR/core/services/s4/in_memory_orm_test.go: `.Now()`
$DIR/core/services/s4/in_memory_orm_test.go: `.Add(time.Minute)`
$DIR/core/services/s4/in_memory_orm_test.go: `.UnixMilli()`
$DIR/core/services/s4/in_memory_orm_test.go: `.New(address.Big())`
$DIR/core/services/s4/in_memory_orm_test.go: `.Big()`
$DIR/core/services/s4/in_memory_orm_test.go: `.NewInMemoryORM()`
$DIR/core/services/s4/in_memory_orm_test.go: `.Run("row not found", func(t *testing.T) {
ctx := testutils.Context(t)
_, err := orm.Get(ctx, big.New(address.Big()), slotId)
assert.ErrorIs(t, err, s4.ErrNotFound)
})`
$DIR/core/services/s4/in_memory_orm_test.go: `.Context(t)`
$DIR/core/services/s4/in_memory_orm_test.go: `.Get(ctx, big.New(address.Big()), slotId)`
$DIR/core/services/s4/in_memory_orm_test.go: `.New(address.Big())`
$DIR/core/services/s4/in_memory_orm_test.go: `.Big()`
$DIR/core/services/s4/in_memory_orm_test.go: `.Run("insert and get", func(t *testing.T) {
ctx := testutils.Context(t)
err := orm.Update(ctx, row)
assert.NoError(t, err)
e, err := orm.Get(ctx, big.New(address.Big()), slotId)
assert.NoError(t, err)
assert.Equal(t, row, e)
})`
$DIR/core/services/s4/in_memory_orm_test.go: `.Context(t)`
$DIR/core/services/s4/in_memory_orm_test.go: `.Update(ctx, row)`
$DIR/core/services/s4/in_memory_orm_test.go: `.Get(ctx, big.New(address.Big()), slotId)`
$DIR/core/services/s4/in_memory_orm_test.go: `.New(address.Big())`
$DIR/core/services/s4/in_memory_orm_test.go: `.Big()`
$DIR/core/services/s4/in_memory_orm_test.go: `.Context(t)`
$DIR/core/services/s4/in_memory_orm_test.go: `.Update(ctx, row)`
$DIR/core/services/s4/in_memory_orm_test.go: `.Update(ctx, row)`
$DIR/core/services/s4/in_memory_orm_test.go: `.Update(ctx, row)`
$DIR/core/services/s4/in_memory_orm_test.go: `.Get(ctx, big.New(address.Big()), slotId)`
$DIR/core/services/s4/in_memory_orm_test.go: `.New(address.Big())`
$DIR/core/services/s4/in_memory_orm_test.go: `.Big()`
$DIR/core/services/s4/in_memory_orm_test.go: `.Context(t)`
$DIR/core/services/s4/in_memory_orm_test.go: `.NewInMemoryORM()`
$DIR/core/services/s4/in_memory_orm_test.go: `.Now()`
$DIR/core/services/s4/in_memory_orm_test.go: `.Add(time.Minute)`
$DIR/core/services/s4/in_memory_orm_test.go: `.UTC()`
$DIR/core/services/s4/in_memory_orm_test.go: `.New(thisAddress.Big())`
$DIR/core/services/s4/in_memory_orm_test.go: `.Big()`
$DIR/core/services/s4/in_memory_orm_test.go: `.Add(time.Duration(i) * time.Second)`
$DIR/core/services/s4/in_memory_orm_test.go: `.Duration(i)`
$DIR/core/services/s4/in_memory_orm_test.go: `.UnixMilli()`
$DIR/core/services/s4/in_memory_orm_test.go: `.Update(ctx, row)`
$DIR/core/services/s4/in_memory_orm_test.go: `.Add(100 * time.Second)`
$DIR/core/services/s4/in_memory_orm_test.go: `.DeleteExpired(ctx, 200, deadline)`
$DIR/core/services/s4/in_memory_orm_test.go: `.GetUnconfirmedRows(ctx, 200)`
$DIR/core/services/s4/in_memory_orm_test.go: `.Context(t)`
$DIR/core/services/s4/in_memory_orm_test.go: `.NewInMemoryORM()`
$DIR/core/services/s4/in_memory_orm_test.go: `.Now()`
$DIR/core/services/s4/in_memory_orm_test.go: `.Add(100 * time.Second)`
$DIR/core/services/s4/in_memory_orm_test.go: `.UnixMilli()`
$DIR/core/services/s4/in_memory_orm_test.go: `.New(thisAddress.Big())`
$DIR/core/services/s4/in_memory_orm_test.go: `.Big()`
$DIR/core/services/s4/in_memory_orm_test.go: `.Update(ctx, row)`
$DIR/core/services/s4/in_memory_orm_test.go: `.Sleep(time.Millisecond)`
$DIR/core/services/s4/in_memory_orm_test.go: `.GetUnconfirmedRows(ctx, 100)`
$DIR/core/services/s4/in_memory_orm_test.go: `.Context(t)`
$DIR/core/services/s4/in_memory_orm_test.go: `.NewInMemoryORM()`
$DIR/core/services/s4/in_memory_orm_test.go: `.Now()`
$DIR/core/services/s4/in_memory_orm_test.go: `.Add(100 * time.Second)`
$DIR/core/services/s4/in_memory_orm_test.go: `.UnixMilli()`
$DIR/core/services/s4/in_memory_orm_test.go: `.New(thisAddress.Big())`
$DIR/core/services/s4/in_memory_orm_test.go: `.Big()`
$DIR/core/services/s4/in_memory_orm_test.go: `.Update(ctx, row)`
$DIR/core/services/s4/in_memory_orm_test.go: `.GetSnapshot(ctx, s4.NewFullAddressRange())`
$DIR/core/services/s4/in_memory_orm_test.go: `.NewFullAddressRange()`
$DIR/core/services/s4/postgres_orm_test.go: `row.Version++`
$DIR/core/services/s4/postgres_orm_test.go: `err = orm.Update(ctx, row)`
$DIR/core/services/s4/postgres_orm_test.go: `err = orm.Update(ctx, row)`
$DIR/core/services/s4/postgres_orm_test.go: `rows = generateTestRows(t, 1)`
$DIR/core/services/s4/postgres_orm_test.go: `row.Confirmed = true`
$DIR/core/services/s4/postgres_orm_test.go: `row.Version++`
$DIR/core/services/s4/postgres_orm_test.go: `row.Confirmed = false`
$DIR/core/services/s4/postgres_orm_test.go: `row.Version++`
$DIR/core/services/s4/postgres_orm_test.go: `row.Version--`
$DIR/core/services/s4/postgres_orm_test.go: `count++`
$DIR/core/services/s4/postgres_orm_test.go: `t.Run("no rows", func(t *testing.T) {
ctx := testutils.Context(t)
rows, err := orm.GetSnapshot(ctx, s4.NewFullAddressRange())
assert.NoError(t, err)
assert.Empty(t, rows)
})`
$DIR/core/services/s4/postgres_orm_test.go: `t.Run("full range", func(t *testing.T) {
snapshot, err := orm.GetSnapshot(testutils.Context(t), s4.NewFullAddressRange())
assert.NoError(t, err)
assert.Equal(t, len(rows), len(snapshot))
snapshotRowMap := make(map[string]*s4.SnapshotRow)
for i, sr := range snapshot {
// assuming unique addresses
snapshotRowMap[sr.Address.String()] = snapshot[i]
}
for _, sr := range rows {
snapshotRow, ok := snapshotRowMap[sr.Address.String()]
assert.True(t, ok)
assert.Equal(t, snapshotRow.Address, sr.Address)
assert.Equal(t, snapshotRow.SlotId, sr.SlotId)
assert.Equal(t, snapshotRow.Version, sr.Version)
assert.Equal(t, snapshotRow.Expiration, sr.Expiration)
assert.Equal(t, snapshotRow.Confirmed, sr.Confirmed)
assert.Equal(t, snapshotRow.PayloadSize, uint64(len(sr.Payload)))
}
})`
$DIR/core/services/s4/postgres_orm_test.go: `snapshotRowMap[sr.Address.String()] = snapshot[i]`
$DIR/core/services/s4/postgres_orm_test.go: `t.Run("half range", func(t *testing.T) {
ar, err := s4.NewInitialAddressRangeForIntervals(2)
assert.NoError(t, err)
snapshot, err := orm.GetSnapshot(testutils.Context(t), ar)
assert.NoError(t, err)
for _, sr := range snapshot {
assert.True(t, ar.Contains(sr.Address))
}
})`
$DIR/core/services/s4/postgres_orm_test.go: `t.Run("no rows", func(t *testing.T) {
ctx := testutils.Context(t)
rows, err := orm.GetUnconfirmedRows(ctx, 5)
assert.NoError(t, err)
assert.Empty(t, rows)
})`
$DIR/core/services/s4/postgres_orm_test.go: `time.Sleep(testutils.TestInterval / 10)`
$DIR/core/services/s4/postgres_orm_test.go: `err = ormB.Update(ctx, rowsB[i])`
$DIR/core/services/s4/postgres_orm_test.go: `_, err = ormB.DeleteExpired(ctx, n, time.Now().UTC())`
$DIR/core/services/s4/postgres_orm_test.go: `row.Version = math.MaxUint64 - 10`
$DIR/core/services/s4/postgres_orm_test.go: `row.Version++`
$DIR/core/services/s4/postgres_orm_test.go: `err = orm.Update(ctx, row)`
$DIR/core/services/s4/postgres_orm_test.go: `.Context(t)`
$DIR/core/services/s4/postgres_orm_test.go: `.Update(ctx, row)`
$DIR/core/services/s4/postgres_orm_test.go: `.Update(ctx, row)`
$DIR/core/services/s4/postgres_orm_test.go: `.Update(ctx, row)`
$DIR/core/services/s4/postgres_orm_test.go: `.Get(ctx, row.Address, row.SlotId)`
$DIR/core/services/s4/postgres_orm_test.go: `.Get(ctx, rows[0].Address, rows[0].SlotId)`
$DIR/core/services/s4/postgres_orm_test.go: `.Context(t)`
$DIR/core/services/s4/postgres_orm_test.go: `.Update(ctx, row)`
$DIR/core/services/s4/postgres_orm_test.go: `.Context(t)`
$DIR/core/services/s4/postgres_orm_test.go: `.Update(ctx, row)`
$DIR/core/services/s4/postgres_orm_test.go: `.DeleteExpired(ctx, expired, time.Now().Add(2*time.Hour).UTC())`
$DIR/core/services/s4/postgres_orm_test.go: `.Now()`
$DIR/core/services/s4/postgres_orm_test.go: `.Add(2*time.Hour)`
$DIR/core/services/s4/postgres_orm_test.go: `.UTC()`
$DIR/core/services/s4/postgres_orm_test.go: `.Get(ctx, row.Address, row.SlotId)`
$DIR/core/services/s4/postgres_orm_test.go: `.Is(err, s4.ErrNotFound)`
$DIR/core/services/s4/postgres_orm_test.go: `.Run("no rows", func(t *testing.T) {
ctx := testutils.Context(t)
rows, err := orm.GetSnapshot(ctx, s4.NewFullAddressRange())
assert.NoError(t, err)
assert.Empty(t, rows)
})`
$DIR/core/services/s4/postgres_orm_test.go: `.Context(t)`
$DIR/core/services/s4/postgres_orm_test.go: `.GetSnapshot(ctx, s4.NewFullAddressRange())`
$DIR/core/services/s4/postgres_orm_test.go: `.NewFullAddressRange()`
$DIR/core/services/s4/postgres_orm_test.go: `.Context(t)`
$DIR/core/services/s4/postgres_orm_test.go: `.Update(ctx, row)`
$DIR/core/services/s4/postgres_orm_test.go: `.Run("full range", func(t *testing.T) {
snapshot, err := orm.GetSnapshot(testutils.Context(t), s4.NewFullAddressRange())
assert.NoError(t, err)
assert.Equal(t, len(rows), len(snapshot))
snapshotRowMap := make(map[string]*s4.SnapshotRow)
for i, sr := range snapshot {
// assuming unique addresses
snapshotRowMap[sr.Address.String()] = snapshot[i]
}
for _, sr := range rows {
snapshotRow, ok := snapshotRowMap[sr.Address.String()]
assert.True(t, ok)
assert.Equal(t, snapshotRow.Address, sr.Address)
assert.Equal(t, snapshotRow.SlotId, sr.SlotId)
assert.Equal(t, snapshotRow.Version, sr.Version)
assert.Equal(t, snapshotRow.Expiration, sr.Expiration)
assert.Equal(t, snapshotRow.Confirmed, sr.Confirmed)
assert.Equal(t, snapshotRow.PayloadSize, uint64(len(sr.Payload)))
}
})`
$DIR/core/services/s4/postgres_orm_test.go: `.GetSnapshot(testutils.Context(t), s4.NewFullAddressRange())`
$DIR/core/services/s4/postgres_orm_test.go: `.Context(t)`
$DIR/core/services/s4/postgres_orm_test.go: `.NewFullAddressRange()`
$DIR/core/services/s4/postgres_orm_test.go: `.Address.String()`
$DIR/core/services/s4/postgres_orm_test.go: `.Address.String()`
$DIR/core/services/s4/postgres_orm_test.go: `.Run("half range", func(t *testing.T) {
ar, err := s4.NewInitialAddressRangeForIntervals(2)
assert.NoError(t, err)
snapshot, err := orm.GetSnapshot(testutils.Context(t), ar)
assert.NoError(t, err)
for _, sr := range snapshot {
assert.True(t, ar.Contains(sr.Address))
}
})`
$DIR/core/services/s4/postgres_orm_test.go: `.NewInitialAddressRangeForIntervals(2)`
$DIR/core/services/s4/postgres_orm_test.go: `.GetSnapshot(testutils.Context(t), ar)`
$DIR/core/services/s4/postgres_orm_test.go: `.Context(t)`
$DIR/core/services/s4/postgres_orm_test.go: `.Run("no rows", func(t *testing.T) {
ctx := testutils.Context(t)
rows, err := orm.GetUnconfirmedRows(ctx, 5)
assert.NoError(t, err)
assert.Empty(t, rows)
})`
$DIR/core/services/s4/postgres_orm_test.go: `.Context(t)`
$DIR/core/services/s4/postgres_orm_test.go: `.GetUnconfirmedRows(ctx, 5)`
$DIR/core/services/s4/postgres_orm_test.go: `.Context(t)`
$DIR/core/services/s4/postgres_orm_test.go: `.Update(ctx, row)`
$DIR/core/services/s4/postgres_orm_test.go: `.Sleep(testutils.TestInterval / 10)`
$DIR/core/services/s4/postgres_orm_test.go: `.GetUnconfirmedRows(ctx, 5)`
$DIR/core/services/s4/postgres_orm_test.go: `.Context(t)`
$DIR/core/services/s4/postgres_orm_test.go: `.Update(ctx, rowsA[i])`
$DIR/core/services/s4/postgres_orm_test.go: `.Update(ctx, rowsB[i])`
$DIR/core/services/s4/postgres_orm_test.go: `.GetUnconfirmedRows(ctx, n)`
$DIR/core/services/s4/postgres_orm_test.go: `.GetUnconfirmedRows(ctx, n)`
$DIR/core/services/s4/postgres_orm_test.go: `.DeleteExpired(ctx, n, time.Now().UTC())`
$DIR/core/services/s4/postgres_orm_test.go: `.Now()`
$DIR/core/services/s4/postgres_orm_test.go: `.UTC()`
$DIR/core/services/s4/postgres_orm_test.go: `.GetSnapshot(ctx, s4.NewFullAddressRange())`
$DIR/core/services/s4/postgres_orm_test.go: `.NewFullAddressRange()`
$DIR/core/services/s4/postgres_orm_test.go: `.Context(t)`
$DIR/core/services/s4/postgres_orm_test.go: `.Update(ctx, row)`
$DIR/core/services/s4/postgres_orm_test.go: `.Update(ctx, row)`
$DIR/core/services/s4/postgres_orm_test.go: `.Get(ctx, row.Address, row.SlotId)`
$DIR/core/services/s4/storage_test.go: `t.Run("ErrNotFound", func(t *testing.T) {
key := &s4.Key{
Address: testutils.NewAddress(),
SlotId: 1,
Version: 0,
}
ormMock.On("Get", mock.Anything, big.New(key.Address.Big()), key.SlotId).Return(nil, s4.ErrNotFound)
_, _, err := storage.Get(testutils.Context(t), key)
assert.ErrorIs(t, err, s4.ErrNotFound)
})`
$DIR/core/services/s4/storage_test.go: `ormMock.On("Get", mock.Anything, big.New(key.Address.Big()), key.SlotId).Return(nil, s4.ErrNotFound)`
$DIR/core/services/s4/storage_test.go: `t.Run("ErrSlotIdTooBig", func(t *testing.T) {
key := &s4.Key{
Address: testutils.NewAddress(),
SlotId: constraints.MaxSlotsPerUser + 1,
Version: 0,
}
_, _, err := storage.Get(testutils.Context(t), key)
assert.ErrorIs(t, err, s4.ErrSlotIdTooBig)
record := &s4.Record{
Payload: make([]byte, 10),
Expiration: now.Add(time.Minute).UnixMilli(),
}
err = storage.Put(testutils.Context(t), key, record, []byte{})
assert.ErrorIs(t, err, s4.ErrSlotIdTooBig)
})`
$DIR/core/services/s4/storage_test.go: `err = storage.Put(testutils.Context(t), key, record, []byte{})`
$DIR/core/services/s4/storage_test.go: `t.Run("ErrPayloadTooBig", func(t *testing.T) {
key := &s4.Key{
Address: testutils.NewAddress(),
SlotId: 1,
Version: 0,
}
record := &s4.Record{
Payload: make([]byte, constraints.MaxPayloadSizeBytes+1),
Expiration: now.Add(time.Minute).UnixMilli(),
}
err := storage.Put(testutils.Context(t), key, record, []byte{})
assert.ErrorIs(t, err, s4.ErrPayloadTooBig)
})`
$DIR/core/services/s4/storage_test.go: `t.Run("ErrPastExpiration", func(t *testing.T) {
key := &s4.Key{
Address: testutils.NewAddress(),
SlotId: 1,
Version: 0,
}
record := &s4.Record{
Payload: make([]byte, 10),
Expiration: now.UnixMilli() - 1,
}
err := storage.Put(testutils.Context(t), key, record, []byte{})
assert.ErrorIs(t, err, s4.ErrPastExpiration)
})`
$DIR/core/services/s4/storage_test.go: `t.Run("ErrExpirationTooLong", func(t *testing.T) {
key := &s4.Key{
Address: testutils.NewAddress(),
SlotId: 1,
Version: 0,
}
record := &s4.Record{
Payload: make([]byte, 10),
Expiration: now.UnixMilli() + 10000000,
}
err := storage.Put(testutils.Context(t), key, record, []byte{})
assert.ErrorIs(t, err, s4.ErrExpirationTooLong)
})`
$DIR/core/services/s4/storage_test.go: `t.Run("ErrWrongSignature", func(t *testing.T) {
privateKey, address := testutils.NewPrivateKeyAndAddress(t)
key := &s4.Key{
Address: address,
SlotId: 2,
Version: 0,
}
record := &s4.Record{
Payload: []byte("foobar"),
Expiration: now.Add(time.Minute).UnixMilli(),
}
env := s4.NewEnvelopeFromRecord(key, record)
signature, err := env.Sign(privateKey)
assert.NoError(t, err)
signature[0]++
err = storage.Put(testutils.Context(t), key, record, signature)
assert.ErrorIs(t, err, s4.ErrWrongSignature)
})`
$DIR/core/services/s4/storage_test.go: `signature[0]++`
$DIR/core/services/s4/storage_test.go: `err = storage.Put(testutils.Context(t), key, record, signature)`
$DIR/core/services/s4/storage_test.go: `ormMock.ExpectedCalls = make([]*mock.Call, 0)`
$DIR/core/services/s4/storage_test.go: `ormMock.On("Update", mock.Anything, mock.Anything).Return(s4.ErrVersionTooLow).Once()`
$DIR/core/services/s4/storage_test.go: `err = storage.Put(testutils.Context(t), key, record, signature)`
$DIR/core/services/s4/storage_test.go: `ormMock.On("Update", mock.Anything, mock.Anything).Return(nil)`
$DIR/core/services/s4/storage_test.go: `ormMock.On("Get", mock.Anything, big.New(key.Address.Big()), uint(2)).Return(&s4.Row{
Address: big.New(key.Address.Big()),
SlotId: key.SlotId,
Version: key.Version,
Payload: record.Payload,
Expiration: record.Expiration,
Signature: signature,
}, nil)`
$DIR/core/services/s4/storage_test.go: `err = storage.Put(testutils.Context(t), key, record, signature)`
$DIR/core/services/s4/storage_test.go: `ormMock.On("GetSnapshot", mock.Anything, addressRange).Return(ormRows, nil)`
$DIR/core/services/s4/storage_test.go: `.Now()`
$DIR/core/services/s4/storage_test.go: `.Constraints()`
$DIR/core/services/s4/storage_test.go: `.Now()`
$DIR/core/services/s4/storage_test.go: `.Run("ErrNotFound", func(t *testing.T) {
key := &s4.Key{
Address: testutils.NewAddress(),
SlotId: 1,
Version: 0,
}
ormMock.On("Get", mock.Anything, big.New(key.Address.Big()), key.SlotId).Return(nil, s4.ErrNotFound)
_, _, err := storage.Get(testutils.Context(t), key)
assert.ErrorIs(t, err, s4.ErrNotFound)
})`
$DIR/core/services/s4/storage_test.go: `.NewAddress()`
$DIR/core/services/s4/storage_test.go: `.On("Get", mock.Anything, big.New(key.Address.Big()), key.SlotId)`
$DIR/core/services/s4/storage_test.go: `.New(key.Address.Big())`
$DIR/core/services/s4/storage_test.go: `.Address.Big()`
$DIR/core/services/s4/storage_test.go: `.Return(nil, s4.ErrNotFound)`
$DIR/core/services/s4/storage_test.go: `.Get(testutils.Context(t), key)`
$DIR/core/services/s4/storage_test.go: `.Context(t)`
$DIR/core/services/s4/storage_test.go: `.Run("ErrSlotIdTooBig", func(t *testing.T) {
key := &s4.Key{
Address: testutils.NewAddress(),
SlotId: constraints.MaxSlotsPerUser + 1,
Version: 0,
}
_, _, err := storage.Get(testutils.Context(t), key)
assert.ErrorIs(t, err, s4.ErrSlotIdTooBig)
record := &s4.Record{
Payload: make([]byte, 10),
Expiration: now.Add(time.Minute).UnixMilli(),
}
err = storage.Put(testutils.Context(t), key, record, []byte{})
assert.ErrorIs(t, err, s4.ErrSlotIdTooBig)
})`
$DIR/core/services/s4/storage_test.go: `.NewAddress()`
$DIR/core/services/s4/storage_test.go: `.Get(testutils.Context(t), key)`
$DIR/core/services/s4/storage_test.go: `.Context(t)`
$DIR/core/services/s4/storage_test.go: `.Add(time.Minute)`
$DIR/core/services/s4/storage_test.go: `.UnixMilli()`
$DIR/core/services/s4/storage_test.go: `.Put(testutils.Context(t), key, record, []byte{})`
$DIR/core/services/s4/storage_test.go: `.Context(t)`
$DIR/core/services/s4/storage_test.go: `.Run("ErrPayloadTooBig", func(t *testing.T) {
key := &s4.Key{
Address: testutils.NewAddress(),
SlotId: 1,
Version: 0,
}
record := &s4.Record{
Payload: make([]byte, constraints.MaxPayloadSizeBytes+1),
Expiration: now.Add(time.Minute).UnixMilli(),
}
err := storage.Put(testutils.Context(t), key, record, []byte{})
assert.ErrorIs(t, err, s4.ErrPayloadTooBig)
})`
$DIR/core/services/s4/storage_test.go: `.NewAddress()`
$DIR/core/services/s4/storage_test.go: `.Add(time.Minute)`
$DIR/core/services/s4/storage_test.go: `.UnixMilli()`
$DIR/core/services/s4/storage_test.go: `.Put(testutils.Context(t), key, record, []byte{})`
$DIR/core/services/s4/storage_test.go: `.Context(t)`
$DIR/core/services/s4/storage_test.go: `.Run("ErrPastExpiration", func(t *testing.T) {
key := &s4.Key{
Address: testutils.NewAddress(),
SlotId: 1,
Version: 0,
}
record := &s4.Record{
Payload: make([]byte, 10),
Expiration: now.UnixMilli() - 1,
}
err := storage.Put(testutils.Context(t), key, record, []byte{})
assert.ErrorIs(t, err, s4.ErrPastExpiration)
})`
$DIR/core/services/s4/storage_test.go: `.NewAddress()`
$DIR/core/services/s4/storage_test.go: `.UnixMilli()`
$DIR/core/services/s4/storage_test.go: `.Put(testutils.Context(t), key, record, []byte{})`
$DIR/core/services/s4/storage_test.go: `.Context(t)`
$DIR/core/services/s4/storage_test.go: `.Run("ErrExpirationTooLong", func(t *testing.T) {
key := &s4.Key{
Address: testutils.NewAddress(),
SlotId: 1,
Version: 0,
}
record := &s4.Record{
Payload: make([]byte, 10),
Expiration: now.UnixMilli() + 10000000,
}
err := storage.Put(testutils.Context(t), key, record, []byte{})
assert.ErrorIs(t, err, s4.ErrExpirationTooLong)
})`
$DIR/core/services/s4/storage_test.go: `.NewAddress()`
$DIR/core/services/s4/storage_test.go: `.UnixMilli()`
$DIR/core/services/s4/storage_test.go: `.Put(testutils.Context(t), key, record, []byte{})`
$DIR/core/services/s4/storage_test.go: `.Context(t)`
$DIR/core/services/s4/storage_test.go: `.Run("ErrWrongSignature", func(t *testing.T) {
privateKey, address := testutils.NewPrivateKeyAndAddress(t)
key := &s4.Key{
Address: address,
SlotId: 2,
Version: 0,
}
record := &s4.Record{
Payload: []byte("foobar"),
Expiration: now.Add(time.Minute).UnixMilli(),
}
env := s4.NewEnvelopeFromRecord(key, record)
signature, err := env.Sign(privateKey)
assert.NoError(t, err)
signature[0]++
err = storage.Put(testutils.Context(t), key, record, signature)
assert.ErrorIs(t, err, s4.ErrWrongSignature)
})`
$DIR/core/services/s4/storage_test.go: `.NewPrivateKeyAndAddress(t)`
$DIR/core/services/s4/storage_test.go: `.Add(time.Minute)`
$DIR/core/services/s4/storage_test.go: `.UnixMilli()`
$DIR/core/services/s4/storage_test.go: `.NewEnvelopeFromRecord(key, record)`
$DIR/core/services/s4/storage_test.go: `.Sign(privateKey)`
$DIR/core/services/s4/storage_test.go: `.Put(testutils.Context(t), key, record, signature)`
$DIR/core/services/s4/storage_test.go: `.Context(t)`
$DIR/core/services/s4/storage_test.go: `.NewPrivateKeyAndAddress(t)`
$DIR/core/services/s4/storage_test.go: `.Add(time.Hour)`
$DIR/core/services/s4/storage_test.go: `.UnixMilli()`
$DIR/core/services/s4/storage_test.go: `.NewEnvelopeFromRecord(key, record)`
$DIR/core/services/s4/storage_test.go: `.Sign(privateKey)`
$DIR/core/services/s4/storage_test.go: `.On("Update", mock.Anything, mock.Anything)`
$DIR/core/services/s4/storage_test.go: `.Return(s4.ErrVersionTooLow)`
$DIR/core/services/s4/storage_test.go: `.Once()`
$DIR/core/services/s4/storage_test.go: `.Put(testutils.Context(t), key, record, signature)`
$DIR/core/services/s4/storage_test.go: `.Context(t)`
$DIR/core/services/s4/storage_test.go: `.Now()`
$DIR/core/services/s4/storage_test.go: `.NewPrivateKeyAndAddress(t)`
$DIR/core/services/s4/storage_test.go: `.Add(time.Hour)`
$DIR/core/services/s4/storage_test.go: `.UnixMilli()`
$DIR/core/services/s4/storage_test.go: `.NewEnvelopeFromRecord(key, record)`
$DIR/core/services/s4/storage_test.go: `.Sign(privateKey)`
$DIR/core/services/s4/storage_test.go: `.On("Update", mock.Anything, mock.Anything)`
$DIR/core/services/s4/storage_test.go: `.Return(nil)`
$DIR/core/services/s4/storage_test.go: `.On("Get", mock.Anything, big.New(key.Address.Big()), uint(2))`
$DIR/core/services/s4/storage_test.go: `.New(key.Address.Big())`
$DIR/core/services/s4/storage_test.go: `.Address.Big()`
$DIR/core/services/s4/storage_test.go: `.Return(&s4.Row{
Address: big.New(key.Address.Big()),
SlotId: key.SlotId,
Version: key.Version,
Payload: record.Payload,
Expiration: record.Expiration,
Signature: signature,
}, nil)`
$DIR/core/services/s4/storage_test.go: `.New(key.Address.Big())`
$DIR/core/services/s4/storage_test.go: `.Address.Big()`
$DIR/core/services/s4/storage_test.go: `.Put(testutils.Context(t), key, record, signature)`
$DIR/core/services/s4/storage_test.go: `.Context(t)`
$DIR/core/services/s4/storage_test.go: `.Get(testutils.Context(t), key)`
$DIR/core/services/s4/storage_test.go: `.Context(t)`
$DIR/core/services/s4/storage_test.go: `.Now()`
$DIR/core/services/s4/storage_test.go: `.NewAddress()`
$DIR/core/services/s4/storage_test.go: `.NewSingleAddressRange(big.New(address.Big()))`
$DIR/core/services/s4/storage_test.go: `.New(address.Big())`
$DIR/core/services/s4/storage_test.go: `.Big()`
$DIR/core/services/s4/storage_test.go: `.On("GetSnapshot", mock.Anything, addressRange)`
$DIR/core/services/s4/storage_test.go: `.Return(ormRows, nil)`
$DIR/core/services/s4/storage_test.go: `.List(testutils.Context(t), address)`
$DIR/core/services/s4/storage_test.go: `.Context(t)`
$DIR/core/services/signatures/ethdss/ethdss_test.go: `dssArgs.secret = suite.Scalar().Zero()`
$DIR/core/services/signatures/ethdss/ethdss_test.go: `dss, err = NewDSS(dssArgs)`
$DIR/core/services/signatures/ethdss/ethdss_test.go: `ps0, err = dss0.PartialSig()`
$DIR/core/services/signatures/ethdss/ethdss_test.go: `ps0.Partial.I = 100`
$DIR/core/services/signatures/ethdss/ethdss_test.go: `err = dss1.ProcessPartialSig(ps0)`
$DIR/core/services/signatures/ethdss/ethdss_test.go: `ps0.Partial.I = goodI`
$DIR/core/services/signatures/ethdss/ethdss_test.go: `ps0.SessionID = []byte("ahhhhhhhhhhhhhhhhhhhhhhhhhhhhhhh")`
$DIR/core/services/signatures/ethdss/ethdss_test.go: `err = dss1.ProcessPartialSig(ps0)`
$DIR/core/services/signatures/ethdss/ethdss_test.go: `ps0.SessionID = goodSessionID`
$DIR/core/services/signatures/ethdss/ethdss_test.go: `ps0.Signature = ethschnorr.NewSignature()`
$DIR/core/services/signatures/ethdss/ethdss_test.go: `copy(ps0.Signature.CommitmentPublicAddress[:], randomBytes(20))`
$DIR/core/services/signatures/ethdss/ethdss_test.go: `ps0.Signature.Signature.Set(badSig)`
$DIR/core/services/signatures/ethdss/ethdss_test.go: `ps0.Signature = goodSig`
$DIR/core/services/signatures/ethdss/ethdss_test.go: `ps0.Partial.V = suite.Scalar().Zero()`
$DIR/core/services/signatures/ethdss/ethdss_test.go: `ps0.Signature, err = ethschnorr.Sign(dss0.secret, ps0.Hash())`
$DIR/core/services/signatures/ethdss/ethdss_test.go: `err = dss1.ProcessPartialSig(ps0)`
$DIR/core/services/signatures/ethdss/ethdss_test.go: `ps0.Partial.V = goodV`
$DIR/core/services/signatures/ethdss/ethdss_test.go: `ps0.Signature = goodSig`
$DIR/core/services/signatures/ethdss/ethdss_test.go: `err = dss1.ProcessPartialSig(ps0)`
$DIR/core/services/signatures/ethdss/ethdss_test.go: `sig, err = dss1.Signature()`
$DIR/core/services/signatures/ethdss/ethdss_test.go: `dsss[i] = getDSS(i)`
$DIR/core/services/signatures/ethdss/ethdss_test.go: `pss[i] = ps`
$DIR/core/services/signatures/ethdss/ethdss_test.go: `printTest(t, dss0.msg, dss0.long.Commitments()[0], sig)`
$DIR/core/services/signatures/ethdss/ethdss_test.go: `observedHashes[hash] = true`
$DIR/core/services/signatures/ethdss/ethdss_test.go: `.Scalar()`
$DIR/core/services/signatures/ethdss/ethdss_test.go: `.Zero()`
$DIR/core/services/signatures/ethdss/ethdss_test.go: `.PartialSig()`
$DIR/core/services/signatures/ethdss/ethdss_test.go: `.PartialSig()`
$DIR/core/services/signatures/ethdss/ethdss_test.go: `.ProcessPartialSig(ps0)`
$DIR/core/services/signatures/ethdss/ethdss_test.go: `.ProcessPartialSig(ps0)`
$DIR/core/services/signatures/ethdss/ethdss_test.go: `.NewSignature()`
$DIR/core/services/signatures/ethdss/ethdss_test.go: `.ToInt(suite.Scalar().Pick(randomStream))`
$DIR/core/services/signatures/ethdss/ethdss_test.go: `.Scalar()`
$DIR/core/services/signatures/ethdss/ethdss_test.go: `.Pick(randomStream)`
$DIR/core/services/signatures/ethdss/ethdss_test.go: `.Signature.Signature.Set(badSig)`
$DIR/core/services/signatures/ethdss/ethdss_test.go: `.Scalar()`
$DIR/core/services/signatures/ethdss/ethdss_test.go: `.Zero()`
$DIR/core/services/signatures/ethdss/ethdss_test.go: `.Sign(dss0.secret, ps0.Hash())`
$DIR/core/services/signatures/ethdss/ethdss_test.go: `.Hash()`
$DIR/core/services/signatures/ethdss/ethdss_test.go: `.ProcessPartialSig(ps0)`
$DIR/core/services/signatures/ethdss/ethdss_test.go: `.ProcessPartialSig(ps0)`
$DIR/core/services/signatures/ethdss/ethdss_test.go: `.Signature()`
$DIR/core/services/signatures/ethdss/ethdss_test.go: `.PartialSig()`
$DIR/core/services/signatures/ethdss/ethdss_test.go: `.Signature()`
$DIR/core/services/signatures/ethdss/ethdss_test.go: `.long.Commitments()`
$DIR/core/services/signatures/ethdss/ethdss_test.go: `.PartialSig()`
$DIR/core/services/signatures/ethdss/ethdss_test.go: `.Signature()`
$DIR/core/services/signatures/ethdss/ethdss_test.go: `.long.Commitments()`
$DIR/core/services/signatures/ethdss/ethdss_test.go: `.PartialSig()`
$DIR/core/services/signatures/ethdss/ethdss_test.go: `.Hash()`
$DIR/core/services/signatures/ethschnorr/ethschnorr_test.go: `printTest(t, msg, kp.Private, kp.Public, sig)`
$DIR/core/services/signatures/ethschnorr/ethschnorr_test.go: `copy(badPublicCommitmentAddress.CommitmentPublicAddress[:],
sig.CommitmentPublicAddress[:])`
$DIR/core/services/signatures/ethschnorr/ethschnorr_test.go: `badPublicCommitmentAddress.CommitmentPublicAddress[0] ^= 1`
$DIR/core/services/signatures/ethschnorr/ethschnorr_test.go: `err = Verify(edSuite.Point(), i(), NewSignature())`
$DIR/core/services/signatures/ethschnorr/ethschnorr_test.go: `err = Verify(secp256k1Suite.Point(), i(), &signature{Signature: big.NewInt(-1)})`
$DIR/core/services/signatures/ethschnorr/ethschnorr_test.go: `err = Verify(secp256k1Suite.Point(), i(), &signature{Signature: u256Cardinality})`
$DIR/core/services/signatures/ethschnorr/ethschnorr_test.go: `h, err = ChallengeHash(point, hash, u256Cardinality)`
$DIR/core/services/signatures/ethschnorr/ethschnorr_test.go: `.New(mrand.NewSource(0))`
$DIR/core/services/signatures/ethschnorr/ethschnorr_test.go: `.NewSource(0)`
$DIR/core/services/signatures/ethschnorr/ethschnorr_test.go: `.Int(rand, maxUint256)`
$DIR/core/services/signatures/ethschnorr/ethschnorr_test.go: `.Generate(randomStream)`
$DIR/core/services/signatures/ethschnorr/ethschnorr_test.go: `.NewInt(0)`
$DIR/core/services/signatures/ethschnorr/ethschnorr_test.go: `.Add(msg, big.NewInt(1))`
$DIR/core/services/signatures/ethschnorr/ethschnorr_test.go: `.NewInt(1)`
$DIR/core/services/signatures/ethschnorr/ethschnorr_test.go: `.Point()`
$DIR/core/services/signatures/ethschnorr/ethschnorr_test.go: `.Add(kp.Public, kp.Public)`
$DIR/core/services/signatures/ethschnorr/ethschnorr_test.go: `.NewInt(0)`
$DIR/core/services/signatures/ethschnorr/ethschnorr_test.go: `.Add(sig.Signature, one)`
$DIR/core/services/signatures/ethschnorr/ethschnorr_test.go: `.NewBlakeSHA256Curve25519(false)`
$DIR/core/services/signatures/ethschnorr/ethschnorr_test.go: `.Scalar()`
$DIR/core/services/signatures/ethschnorr/ethschnorr_test.go: `.Point()`
$DIR/core/services/signatures/ethschnorr/ethschnorr_test.go: `.Point()`
$DIR/core/services/signatures/ethschnorr/ethschnorr_test.go: `.NewInt(-1)`
$DIR/core/services/signatures/ethschnorr/ethschnorr_test.go: `.Point()`
$DIR/core/services/signatures/ethschnorr/ethschnorr_test.go: `.NewInt(0)`
$DIR/core/services/signatures/ethschnorr/ethschnorr_test.go: `.Point()`
$DIR/core/services/signatures/ethschnorr/ethschnorr_test.go: `.NewInt(-1)`
$DIR/core/services/signatures/secp256k1/curve_test.go: `.String()`
$DIR/core/services/signatures/secp256k1/curve_test.go: `.Point()`
$DIR/core/services/signatures/secp256k1/field_test.go: `g.SetInt(i)`
$DIR/core/services/signatures/secp256k1/field_test.go: `i.Add(i, big.NewInt(1))`
$DIR/core/services/signatures/secp256k1/field_test.go: `g.Set(f)`
$DIR/core/services/signatures/secp256k1/field_test.go: `g.Add(g, fieldEltFromInt(1))`
$DIR/core/services/signatures/secp256k1/field_test.go: `f.Pick(randomStream)`
$DIR/core/services/signatures/secp256k1/field_test.go: `observedFieldElt(t, f)`
$DIR/core/services/signatures/secp256k1/field_test.go: `f.Pick(randomStream)`
$DIR/core/services/signatures/secp256k1/field_test.go: `observedFieldElt(t, f)`
$DIR/core/services/signatures/secp256k1/field_test.go: `g.Neg(g)`
$DIR/core/services/signatures/secp256k1/field_test.go: `f.Pick(randomStream)`
$DIR/core/services/signatures/secp256k1/field_test.go: `observedFieldElt(t, f)`
$DIR/core/services/signatures/secp256k1/field_test.go: `g.Add(f, f)`
$DIR/core/services/signatures/secp256k1/field_test.go: `f.Pick(randomStream)`
$DIR/core/services/signatures/secp256k1/field_test.go: `observedFieldElt(t, f)`
$DIR/core/services/signatures/secp256k1/field_test.go: `g.SetBytes(f.Bytes())`
$DIR/core/services/signatures/secp256k1/field_test.go: `f.Pick(randomStream)`
$DIR/core/services/signatures/secp256k1/field_test.go: `observedFieldElt(t, f)`
$DIR/core/services/signatures/secp256k1/field_test.go: `rv = bigIntSqrt.int().ModSqrt(nonSquare.int(), q)`
$DIR/core/services/signatures/secp256k1/field_test.go: `.NewInt(test)`
$DIR/core/services/signatures/secp256k1/field_test.go: `.SetInt(i)`
$DIR/core/services/signatures/secp256k1/field_test.go: `.Add(i, big.NewInt(1))`
$DIR/core/services/signatures/secp256k1/field_test.go: `.NewInt(1)`
$DIR/core/services/signatures/secp256k1/field_test.go: `.String()`
$DIR/core/services/signatures/secp256k1/field_test.go: `.Equal((*fieldElt)(nil))`
$DIR/core/services/signatures/secp256k1/field_test.go: `.Set(f)`
$DIR/core/services/signatures/secp256k1/field_test.go: `.Add(g, fieldEltFromInt(1))`
$DIR/core/services/signatures/secp256k1/field_test.go: `.Add(q, big.NewInt(1))`
$DIR/core/services/signatures/secp256k1/field_test.go: `.NewInt(1)`
$DIR/core/services/signatures/secp256k1/field_test.go: `.Pick(randomStream)`
$DIR/core/services/signatures/secp256k1/field_test.go: `.int()`
$DIR/core/services/signatures/secp256k1/field_test.go: `.Cmp(big.NewInt(1000000000))`
$DIR/core/services/signatures/secp256k1/field_test.go: `.NewInt(1000000000)`
$DIR/core/services/signatures/secp256k1/field_test.go: `.Pick(randomStream)`
$DIR/core/services/signatures/secp256k1/field_test.go: `.Clone()`
$DIR/core/services/signatures/secp256k1/field_test.go: `.Neg(g)`
$DIR/core/services/signatures/secp256k1/field_test.go: `.Pick(randomStream)`
$DIR/core/services/signatures/secp256k1/field_test.go: `.Clone()`
$DIR/core/services/signatures/secp256k1/field_test.go: `.Clone()`
$DIR/core/services/signatures/secp256k1/field_test.go: `.Add(f, f)`
$DIR/core/services/signatures/secp256k1/field_test.go: `.Pick(randomStream)`
$DIR/core/services/signatures/secp256k1/field_test.go: `.SetBytes(f.Bytes())`
$DIR/core/services/signatures/secp256k1/field_test.go: `.Bytes()`
$DIR/core/services/signatures/secp256k1/field_test.go: `.Pick(randomStream)`
$DIR/core/services/signatures/secp256k1/field_test.go: `.Neg(g)`
$DIR/core/services/signatures/secp256k1/field_test.go: `.int()`
$DIR/core/services/signatures/secp256k1/field_test.go: `.ModSqrt(s.int(), q)`
$DIR/core/services/signatures/secp256k1/field_test.go: `.int()`
$DIR/core/services/signatures/secp256k1/field_test.go: `.Neg(s)`
$DIR/core/services/signatures/secp256k1/field_test.go: `.int()`
$DIR/core/services/signatures/secp256k1/field_test.go: `.ModSqrt(nonSquare.int(), q)`
$DIR/core/services/signatures/secp256k1/field_test.go: `.int()`
$DIR/core/services/signatures/secp256k1/point_test.go: `f.Pick(randomStreamPoint)`
$DIR/core/services/signatures/secp256k1/point_test.go: `g.Add(g, f)`
$DIR/core/services/signatures/secp256k1/point_test.go: `g.Null()`
$DIR/core/services/signatures/secp256k1/point_test.go: `f.Pick(randomStreamPoint)`
$DIR/core/services/signatures/secp256k1/point_test.go: `g.Add(f, g)`
$DIR/core/services/signatures/secp256k1/point_test.go: `p.Set(base)`
$DIR/core/services/signatures/secp256k1/point_test.go: `p.Embed(data, randomStreamPoint)`
$DIR/core/services/signatures/secp256k1/point_test.go: `uint256Bytes[0] = 30`
$DIR/core/services/signatures/secp256k1/point_test.go: `p.X.SetBytes(uint256Bytes)`
$DIR/core/services/signatures/secp256k1/point_test.go: `p.Pick(randomStreamPoint)`
$DIR/core/services/signatures/secp256k1/point_test.go: `_, err = p.MarshalTo(&b)`
$DIR/core/services/signatures/secp256k1/point_test.go: `_, err = p.UnmarshalFrom(&b)`
$DIR/core/services/signatures/secp256k1/point_test.go: `p.Pick(randomStreamPoint)`
$DIR/core/services/signatures/secp256k1/point_test.go: `p.Sub(p, q)`
$DIR/core/services/signatures/secp256k1/point_test.go: `p.Neg(q)`
$DIR/core/services/signatures/secp256k1/point_test.go: `r.Neg(q)`
$DIR/core/services/signatures/secp256k1/point_test.go: `p.Sub(q, r)`
$DIR/core/services/signatures/secp256k1/point_test.go: `p = nil`
$DIR/core/services/signatures/secp256k1/point_test.go: `p = newPoint()`
$DIR/core/services/signatures/secp256k1/point_test.go: `p.Pick(randomStreamPoint)`
$DIR/core/services/signatures/secp256k1/point_test.go: `multiplier.Pick(randomStreamPoint)`
$DIR/core/services/signatures/secp256k1/point_test.go: `comparee.Base()`
$DIR/core/services/signatures/secp256k1/point_test.go: `comparee = p.Clone().(*secp256k1Point)`
$DIR/core/services/signatures/secp256k1/point_test.go: `q.Mul(multiplier, p)`
$DIR/core/services/signatures/secp256k1/point_test.go: `p.Pick(randomStreamPoint)`
$DIR/core/services/signatures/secp256k1/point_test.go: `err = q.UnmarshalBinary(serialized)`
$DIR/core/services/signatures/secp256k1/point_test.go: `p.X.SetInt(big.NewInt(0))`
$DIR/core/services/signatures/secp256k1/point_test.go: `p.X.SetInt(big.NewInt(1))`
$DIR/core/services/signatures/secp256k1/point_test.go: `_, err = p.MarshalBinary()`
$DIR/core/services/signatures/secp256k1/point_test.go: `err = p.UnmarshalBinary(data)`
$DIR/core/services/signatures/secp256k1/point_test.go: `data[32] = 2`
$DIR/core/services/signatures/secp256k1/point_test.go: `data[32] = 0`
$DIR/core/services/signatures/secp256k1/point_test.go: `data[31] = 5`
$DIR/core/services/signatures/secp256k1/point_test.go: `p.Add(p, p)`
$DIR/core/services/signatures/secp256k1/point_test.go: `.String()`
$DIR/core/services/signatures/secp256k1/point_test.go: `.Clone()`
$DIR/core/services/signatures/secp256k1/point_test.go: `.Pick(randomStreamPoint)`
$DIR/core/services/signatures/secp256k1/point_test.go: `.Clone()`
$DIR/core/services/signatures/secp256k1/point_test.go: `.Clone()`
$DIR/core/services/signatures/secp256k1/point_test.go: `.Add(g, f)`
$DIR/core/services/signatures/secp256k1/point_test.go: `.Null()`
$DIR/core/services/signatures/secp256k1/point_test.go: `.Pick(randomStreamPoint)`
$DIR/core/services/signatures/secp256k1/point_test.go: `.Add(f, g)`
$DIR/core/services/signatures/secp256k1/point_test.go: `.Base()`
$DIR/core/services/signatures/secp256k1/point_test.go: `.Set(base)`
$DIR/core/services/signatures/secp256k1/point_test.go: `.EmbedLen()`
$DIR/core/services/signatures/secp256k1/point_test.go: `.Read(data)`
$DIR/core/services/signatures/secp256k1/point_test.go: `.Embed(data, randomStreamPoint)`
$DIR/core/services/signatures/secp256k1/point_test.go: `.Data()`
$DIR/core/services/signatures/secp256k1/point_test.go: `.X.SetBytes(uint256Bytes)`
$DIR/core/services/signatures/secp256k1/point_test.go: `.Data()`
$DIR/core/services/signatures/secp256k1/point_test.go: `.Pick(randomStreamPoint)`
$DIR/core/services/signatures/secp256k1/point_test.go: `.MarshalTo(&b)`
$DIR/core/services/signatures/secp256k1/point_test.go: `.UnmarshalFrom(&b)`
$DIR/core/services/signatures/secp256k1/point_test.go: `.EmbedLen()`
$DIR/core/services/signatures/secp256k1/point_test.go: `.Null()`
$DIR/core/services/signatures/secp256k1/point_test.go: `.Pick(randomStreamPoint)`
$DIR/core/services/signatures/secp256k1/point_test.go: `.Clone()`
$DIR/core/services/signatures/secp256k1/point_test.go: `.Sub(p, q)`
$DIR/core/services/signatures/secp256k1/point_test.go: `.Neg(q)`
$DIR/core/services/signatures/secp256k1/point_test.go: `.Add(p, q)`
$DIR/core/services/signatures/secp256k1/point_test.go: `.Neg(q)`
$DIR/core/services/signatures/secp256k1/point_test.go: `.Sub(q, r)`
$DIR/core/services/signatures/secp256k1/point_test.go: `.Add(q, q)`
$DIR/core/services/signatures/secp256k1/point_test.go: `.Null()`
$DIR/core/services/signatures/secp256k1/point_test.go: `.NewInt(int64(1))`
$DIR/core/services/signatures/secp256k1/point_test.go: `.Pick(randomStreamPoint)`
$DIR/core/services/signatures/secp256k1/point_test.go: `.Pick(randomStreamPoint)`
$DIR/core/services/signatures/secp256k1/point_test.go: `.Mul(one, p)`
$DIR/core/services/signatures/secp256k1/point_test.go: `.Base()`
$DIR/core/services/signatures/secp256k1/point_test.go: `.Clone()`
$DIR/core/services/signatures/secp256k1/point_test.go: `.Mul(multiplier, p)`
$DIR/core/services/signatures/secp256k1/point_test.go: `.Neg(multiplier)`
$DIR/core/services/signatures/secp256k1/point_test.go: `.Mul(negMultiplier, p)`
$DIR/core/services/signatures/secp256k1/point_test.go: `.Add(q, r)`
$DIR/core/services/signatures/secp256k1/point_test.go: `.Pick(randomStreamPoint)`
$DIR/core/services/signatures/secp256k1/point_test.go: `.MarshalBinary()`
$DIR/core/services/signatures/secp256k1/point_test.go: `.UnmarshalBinary(serialized)`
$DIR/core/services/signatures/secp256k1/point_test.go: `.X.SetInt(big.NewInt(0))`
$DIR/core/services/signatures/secp256k1/point_test.go: `.NewInt(0)`
$DIR/core/services/signatures/secp256k1/point_test.go: `.MarshalBinary()`
$DIR/core/services/signatures/secp256k1/point_test.go: `.X.SetInt(big.NewInt(1))`
$DIR/core/services/signatures/secp256k1/point_test.go: `.NewInt(1)`
$DIR/core/services/signatures/secp256k1/point_test.go: `.MarshalBinary()`
$DIR/core/services/signatures/secp256k1/point_test.go: `.MarshalID()`
$DIR/core/services/signatures/secp256k1/point_test.go: `.UnmarshalBinary(data)`
$DIR/core/services/signatures/secp256k1/point_test.go: `.Base()`
$DIR/core/services/signatures/secp256k1/point_test.go: `.Add(p, p)`
$DIR/core/services/signatures/secp256k1/point_test.go: `.Base()`
$DIR/core/services/signatures/secp256k1/point_test.go: `.Equal(q)`
$DIR/core/services/signatures/secp256k1/point_test.go: `.NewInt(0)`
$DIR/core/services/signatures/secp256k1/point_test.go: `.SetString(pString, 16)`
$DIR/core/services/signatures/secp256k1/point_test.go: `.Mul(private, nil)`
$DIR/core/services/signatures/secp256k1/point_test.go: `.Sprintf("%x", address)`
$DIR/core/services/signatures/secp256k1/point_test.go: `.NewBlakeSHA256Curve25519(false)`
$DIR/core/services/signatures/secp256k1/point_test.go: `.Point()`
$DIR/core/services/signatures/secp256k1/point_test.go: `.Base()`
$DIR/core/services/signatures/secp256k1/scalar_test.go: `g.Set(f)`
$DIR/core/services/signatures/secp256k1/scalar_test.go: `f.Add(f, newScalar(big.NewInt(1)))`
$DIR/core/services/signatures/secp256k1/scalar_test.go: `f.Pick(randomStreamScalar)`
$DIR/core/services/signatures/secp256k1/scalar_test.go: `observedScalar(t, f)`
$DIR/core/services/signatures/secp256k1/scalar_test.go: `f.Pick(randomStreamScalar)`
$DIR/core/services/signatures/secp256k1/scalar_test.go: `observedScalar(t, f)`
$DIR/core/services/signatures/secp256k1/scalar_test.go: `g.Neg(g)`
$DIR/core/services/signatures/secp256k1/scalar_test.go: `f.Pick(randomStreamScalar)`
$DIR/core/services/signatures/secp256k1/scalar_test.go: `observedScalar(t, f)`
$DIR/core/services/signatures/secp256k1/scalar_test.go: `g.Add(f, f)`
$DIR/core/services/signatures/secp256k1/scalar_test.go: `f.Pick(randomStreamScalar)`
$DIR/core/services/signatures/secp256k1/scalar_test.go: `observedScalar(t, f)`
$DIR/core/services/signatures/secp256k1/scalar_test.go: `err = g.UnmarshalBinary(data)`
$DIR/core/services/signatures/secp256k1/scalar_test.go: `_, err = f.UnmarshalFrom(&buf)`
$DIR/core/services/signatures/secp256k1/scalar_test.go: `f.Pick(randomStreamScalar)`
$DIR/core/services/signatures/secp256k1/scalar_test.go: `observedScalar(t, f)`
$DIR/core/services/signatures/secp256k1/scalar_test.go: `g.Inv(f)`
$DIR/core/services/signatures/secp256k1/scalar_test.go: `h.Mul(f, g)`
$DIR/core/services/signatures/secp256k1/scalar_test.go: `h.Div(f, f)`
$DIR/core/services/signatures/secp256k1/scalar_test.go: `h.Div(newScalar(big.NewInt(1)), f)`
$DIR/core/services/signatures/secp256k1/scalar_test.go: `h.Pick(randomStreamScalar)`
$DIR/core/services/signatures/secp256k1/scalar_test.go: `observedScalar(t, h)`
$DIR/core/services/signatures/secp256k1/scalar_test.go: `j.Neg(j.Mul(h, f))`
$DIR/core/services/signatures/secp256k1/scalar_test.go: `k.Mul(h, k.Neg(f))`
$DIR/core/services/signatures/secp256k1/scalar_test.go: `IntToScalar(u256Cardinality)`
$DIR/core/services/signatures/secp256k1/scalar_test.go: `.NewInt(test)`
$DIR/core/services/signatures/secp256k1/scalar_test.go: `.Set(f)`
$DIR/core/services/signatures/secp256k1/scalar_test.go: `.Add(f, newScalar(big.NewInt(1)))`
$DIR/core/services/signatures/secp256k1/scalar_test.go: `.NewInt(1)`
$DIR/core/services/signatures/secp256k1/scalar_test.go: `.NewInt(1)`
$DIR/core/services/signatures/secp256k1/scalar_test.go: `.NewInt(0)`
$DIR/core/services/signatures/secp256k1/scalar_test.go: `.Add(ToInt(one), GroupOrder)`
$DIR/core/services/signatures/secp256k1/scalar_test.go: `.Clone()`
$DIR/core/services/signatures/secp256k1/scalar_test.go: `.Pick(randomStreamScalar)`
$DIR/core/services/signatures/secp256k1/scalar_test.go: `.Clone()`
$DIR/core/services/signatures/secp256k1/scalar_test.go: `.Pick(randomStreamScalar)`
$DIR/core/services/signatures/secp256k1/scalar_test.go: `.Clone()`
$DIR/core/services/signatures/secp256k1/scalar_test.go: `.Neg(g)`
$DIR/core/services/signatures/secp256k1/scalar_test.go: `.Clone()`
$DIR/core/services/signatures/secp256k1/scalar_test.go: `.Pick(randomStreamScalar)`
$DIR/core/services/signatures/secp256k1/scalar_test.go: `.NewInt(1)`
$DIR/core/services/signatures/secp256k1/scalar_test.go: `.Clone()`
$DIR/core/services/signatures/secp256k1/scalar_test.go: `.Clone()`
$DIR/core/services/signatures/secp256k1/scalar_test.go: `.Add(f, f)`
$DIR/core/services/signatures/secp256k1/scalar_test.go: `.Pick(randomStreamScalar)`
$DIR/core/services/signatures/secp256k1/scalar_test.go: `.MarshalBinary()`
$DIR/core/services/signatures/secp256k1/scalar_test.go: `.UnmarshalBinary(data)`
$DIR/core/services/signatures/secp256k1/scalar_test.go: `.MarshalID()`
$DIR/core/services/signatures/secp256k1/scalar_test.go: `.MarshalTo(&buf)`
$DIR/core/services/signatures/secp256k1/scalar_test.go: `.UnmarshalFrom(&buf)`
$DIR/core/services/signatures/secp256k1/scalar_test.go: `.Pick(randomStreamScalar)`
$DIR/core/services/signatures/secp256k1/scalar_test.go: `.Inv(f)`
$DIR/core/services/signatures/secp256k1/scalar_test.go: `.Mul(f, g)`
$DIR/core/services/signatures/secp256k1/scalar_test.go: `.Div(f, f)`
$DIR/core/services/signatures/secp256k1/scalar_test.go: `.Div(newScalar(big.NewInt(1)), f)`
$DIR/core/services/signatures/secp256k1/scalar_test.go: `.NewInt(1)`
$DIR/core/services/signatures/secp256k1/scalar_test.go: `.Pick(randomStreamScalar)`
$DIR/core/services/signatures/secp256k1/scalar_test.go: `.Neg(j.Mul(h, f))`
$DIR/core/services/signatures/secp256k1/scalar_test.go: `.Mul(h, f)`
$DIR/core/services/signatures/secp256k1/scalar_test.go: `.Mul(h, k.Neg(f))`
$DIR/core/services/signatures/secp256k1/scalar_test.go: `.Neg(f)`
$DIR/core/services/signatures/secp256k1/scalar_test.go: `.String()`
$DIR/core/services/signatures/secp256k1/scalar_test.go: `.One()`
$DIR/core/services/signatures/secp256k1/scalar_test.go: `.NewInt(1)`
$DIR/core/services/signatures/secp256k1/scalar_test.go: `.One()`
$DIR/core/services/signatures/secp256k1/scalar_test.go: `.Lsh(big.NewInt(1), 256)`
$DIR/core/services/signatures/secp256k1/scalar_test.go: `.NewInt(1)`
$DIR/core/services/signatures/secp256k1/scalar_test.go: `.int()`
$DIR/core/services/signatures/secp256k1/scalar_test.go: `.Sub(u256Cardinality, GroupOrder)`
$DIR/core/services/signatures/secp256k1/scalar_test.go: `.NewBlakeSHA256Curve25519(true)`
$DIR/core/services/signatures/secp256k1/scalar_test.go: `.Lsh(big.NewInt(1), 256)`
$DIR/core/services/signatures/secp256k1/scalar_test.go: `.NewInt(1)`
$DIR/core/services/signatures/secp256k1/scalar_test.go: `.Sub(zero().Lsh(big.NewInt(1), 256),
GroupOrder)`
$DIR/core/services/signatures/secp256k1/scalar_test.go: `.Lsh(big.NewInt(1), 256)`
$DIR/core/services/signatures/secp256k1/scalar_test.go: `.NewInt(1)`
$DIR/core/services/signatures/secp256k1/suite_test.go: `.EncodeToString(s.Hash().Sum(nil))`
$DIR/core/services/signatures/secp256k1/suite_test.go: `.Hash()`
$DIR/core/services/signatures/secp256k1/suite_test.go: `.Sum(nil)`
$DIR/core/services/signatures/secp256k1/suite_test.go: `.RandomStream()`
$DIR/core/services/streams/delegate_test.go: `t.Run("errors if job is missing streamID", func(t *testing.T) {
_, err := d.ServicesForSpec(testutils.Context(t), jb)
assert.EqualError(t, err, "streamID is required to be present for stream specs")
})`
$DIR/core/services/streams/delegate_test.go: `jb.StreamID = ptr(uint32(42))`
$DIR/core/services/streams/delegate_test.go: `t.Run("returns services", func(t *testing.T) {
srvs, err := d.ServicesForSpec(testutils.Context(t), jb)
require.NoError(t, err)
assert.Len(t, srvs, 2)
assert.IsType(t, &ocrcommon.RunResultSaver{}, srvs[0])
strmSrv := srvs[1].(*StreamService)
assert.Equal(t, registry, strmSrv.registry)
assert.Equal(t, StreamID(42), strmSrv.id)
assert.Equal(t, jb.PipelineSpec, strmSrv.spec)
assert.NotNil(t, strmSrv.lggr)
assert.Equal(t, srvs[0], strmSrv.rrs)
})`
$DIR/core/services/streams/delegate_test.go: `t.Run(tc.name, func(t *testing.T) {
s, err := ValidatedStreamSpec(tc.toml)
tc.assertion(t, s, err)
})`
$DIR/core/services/streams/delegate_test.go: `tc.assertion(t, s, err)`
$DIR/core/services/streams/delegate_test.go: `.TestLogger(t)`
$DIR/core/services/streams/delegate_test.go: `.Run("errors if job is missing streamID", func(t *testing.T) {
_, err := d.ServicesForSpec(testutils.Context(t), jb)
assert.EqualError(t, err, "streamID is required to be present for stream specs")
})`
$DIR/core/services/streams/delegate_test.go: `.ServicesForSpec(testutils.Context(t), jb)`
$DIR/core/services/streams/delegate_test.go: `.Context(t)`
$DIR/core/services/streams/delegate_test.go: `.Run("returns services", func(t *testing.T) {
srvs, err := d.ServicesForSpec(testutils.Context(t), jb)
require.NoError(t, err)
assert.Len(t, srvs, 2)
assert.IsType(t, &ocrcommon.RunResultSaver{}, srvs[0])
strmSrv := srvs[1].(*StreamService)
assert.Equal(t, registry, strmSrv.registry)
assert.Equal(t, StreamID(42), strmSrv.id)
assert.Equal(t, jb.PipelineSpec, strmSrv.spec)
assert.NotNil(t, strmSrv.lggr)
assert.Equal(t, srvs[0], strmSrv.rrs)
})`
$DIR/core/services/streams/delegate_test.go: `.ServicesForSpec(testutils.Context(t), jb)`
$DIR/core/services/streams/delegate_test.go: `.Context(t)`
$DIR/core/services/streams/delegate_test.go: `.Run(tc.name, func(t *testing.T) {
s, err := ValidatedStreamSpec(tc.toml)
tc.assertion(t, s, err)
})`
$DIR/core/services/streams/delegate_test.go: `.assertion(t, s, err)`
$DIR/core/services/streams/stream_registry_test.go: `t.Run("Get", func(t *testing.T) {
sr := newRegistry(lggr, runner)
sr.streams[1] = &mockStream{run: &pipeline.Run{ID: 1}}
sr.streams[2] = &mockStream{run: &pipeline.Run{ID: 2}}
sr.streams[3] = &mockStream{run: &pipeline.Run{ID: 3}}
v, exists := sr.Get(1)
assert.True(t, exists)
assert.Equal(t, sr.streams[1], v)
v, exists = sr.Get(2)
assert.True(t, exists)
assert.Equal(t, sr.streams[2], v)
v, exists = sr.Get(3)
assert.True(t, exists)
assert.Equal(t, sr.streams[3], v)
v, exists = sr.Get(4)
assert.Nil(t, v)
assert.False(t, exists)
})`
$DIR/core/services/streams/stream_registry_test.go: `sr.streams[1] = &mockStream{run: &pipeline.Run{ID: 1}}`
$DIR/core/services/streams/stream_registry_test.go: `sr.streams[2] = &mockStream{run: &pipeline.Run{ID: 2}}`
$DIR/core/services/streams/stream_registry_test.go: `sr.streams[3] = &mockStream{run: &pipeline.Run{ID: 3}}`
$DIR/core/services/streams/stream_registry_test.go: `v, exists = sr.Get(2)`
$DIR/core/services/streams/stream_registry_test.go: `v, exists = sr.Get(3)`
$DIR/core/services/streams/stream_registry_test.go: `v, exists = sr.Get(4)`
$DIR/core/services/streams/stream_registry_test.go: `t.Run("Register", func(t *testing.T) {
sr := newRegistry(lggr, runner)
t.Run("registers new stream", func(t *testing.T) {
assert.Len(t, sr.streams, 0)
err := sr.Register(1, pipeline.Spec{ID: 32, DotDagSource: "source"}, nil)
require.NoError(t, err)
assert.Len(t, sr.streams, 1)
v, exists := sr.Get(1)
require.True(t, exists)
strm := v.(*stream)
assert.Equal(t, StreamID(1), strm.id)
assert.Equal(t, int32(32), strm.spec.ID)
})
t.Run("errors when attempt to re-register a stream with an existing ID", func(t *testing.T) {
assert.Len(t, sr.streams, 1)
err := sr.Register(1, pipeline.Spec{ID: 33, DotDagSource: "source"}, nil)
require.Error(t, err)
assert.Len(t, sr.streams, 1)
assert.EqualError(t, err, "stream already registered for id: 1")
v, exists := sr.Get(1)
require.True(t, exists)
strm := v.(*stream)
assert.Equal(t, StreamID(1), strm.id)
assert.Equal(t, int32(32), strm.spec.ID)
})
})`
$DIR/core/services/streams/stream_registry_test.go: `t.Run("registers new stream", func(t *testing.T) {
assert.Len(t, sr.streams, 0)
err := sr.Register(1, pipeline.Spec{ID: 32, DotDagSource: "source"}, nil)
require.NoError(t, err)
assert.Len(t, sr.streams, 1)
v, exists := sr.Get(1)
require.True(t, exists)
strm := v.(*stream)
assert.Equal(t, StreamID(1), strm.id)
assert.Equal(t, int32(32), strm.spec.ID)
})`
$DIR/core/services/streams/stream_registry_test.go: `t.Run("errors when attempt to re-register a stream with an existing ID", func(t *testing.T) {
assert.Len(t, sr.streams, 1)
err := sr.Register(1, pipeline.Spec{ID: 33, DotDagSource: "source"}, nil)
require.Error(t, err)
assert.Len(t, sr.streams, 1)
assert.EqualError(t, err, "stream already registered for id: 1")
v, exists := sr.Get(1)
require.True(t, exists)
strm := v.(*stream)
assert.Equal(t, StreamID(1), strm.id)
assert.Equal(t, int32(32), strm.spec.ID)
})`
$DIR/core/services/streams/stream_registry_test.go: `sr.streams[1] = &mockStream{run: &pipeline.Run{ID: 1}}`
$DIR/core/services/streams/stream_registry_test.go: `sr.streams[2] = &mockStream{run: &pipeline.Run{ID: 2}}`
$DIR/core/services/streams/stream_registry_test.go: `sr.streams[3] = &mockStream{run: &pipeline.Run{ID: 3}}`
$DIR/core/services/streams/stream_registry_test.go: `t.Run("unregisters a stream", func(t *testing.T) {
assert.Len(t, sr.streams, 3)
sr.Unregister(1)
assert.Len(t, sr.streams, 2)
_, exists := sr.streams[1]
assert.False(t, exists)
})`
$DIR/core/services/streams/stream_registry_test.go: `sr.Unregister(1)`
$DIR/core/services/streams/stream_registry_test.go: `t.Run("no effect when unregistering a non-existent stream", func(t *testing.T) {
assert.Len(t, sr.streams, 2)
sr.Unregister(1)
assert.Len(t, sr.streams, 2)
_, exists := sr.streams[1]
assert.False(t, exists)
})`
$DIR/core/services/streams/stream_registry_test.go: `sr.Unregister(1)`
$DIR/core/services/streams/stream_registry_test.go: `.TestLogger(t)`
$DIR/core/services/streams/stream_registry_test.go: `.Run("Get", func(t *testing.T) {
sr := newRegistry(lggr, runner)
sr.streams[1] = &mockStream{run: &pipeline.Run{ID: 1}}
sr.streams[2] = &mockStream{run: &pipeline.Run{ID: 2}}
sr.streams[3] = &mockStream{run: &pipeline.Run{ID: 3}}
v, exists := sr.Get(1)
assert.True(t, exists)
assert.Equal(t, sr.streams[1], v)
v, exists = sr.Get(2)
assert.True(t, exists)
assert.Equal(t, sr.streams[2], v)
v, exists = sr.Get(3)
assert.True(t, exists)
assert.Equal(t, sr.streams[3], v)
v, exists = sr.Get(4)
assert.Nil(t, v)
assert.False(t, exists)
})`
$DIR/core/services/streams/stream_registry_test.go: `.Get(1)`
$DIR/core/services/streams/stream_registry_test.go: `.Get(2)`
$DIR/core/services/streams/stream_registry_test.go: `.Get(3)`
$DIR/core/services/streams/stream_registry_test.go: `.Get(4)`
$DIR/core/services/streams/stream_registry_test.go: `.Run("Register", func(t *testing.T) {
sr := newRegistry(lggr, runner)
t.Run("registers new stream", func(t *testing.T) {
assert.Len(t, sr.streams, 0)
err := sr.Register(1, pipeline.Spec{ID: 32, DotDagSource: "source"}, nil)
require.NoError(t, err)
assert.Len(t, sr.streams, 1)
v, exists := sr.Get(1)
require.True(t, exists)
strm := v.(*stream)
assert.Equal(t, StreamID(1), strm.id)
assert.Equal(t, int32(32), strm.spec.ID)
})
t.Run("errors when attempt to re-register a stream with an existing ID", func(t *testing.T) {
assert.Len(t, sr.streams, 1)
err := sr.Register(1, pipeline.Spec{ID: 33, DotDagSource: "source"}, nil)
require.Error(t, err)
assert.Len(t, sr.streams, 1)
assert.EqualError(t, err, "stream already registered for id: 1")
v, exists := sr.Get(1)
require.True(t, exists)
strm := v.(*stream)
assert.Equal(t, StreamID(1), strm.id)
assert.Equal(t, int32(32), strm.spec.ID)
})
})`
$DIR/core/services/streams/stream_registry_test.go: `.Run("registers new stream", func(t *testing.T) {
assert.Len(t, sr.streams, 0)
err := sr.Register(1, pipeline.Spec{ID: 32, DotDagSource: "source"}, nil)
require.NoError(t, err)
assert.Len(t, sr.streams, 1)
v, exists := sr.Get(1)
require.True(t, exists)
strm := v.(*stream)
assert.Equal(t, StreamID(1), strm.id)
assert.Equal(t, int32(32), strm.spec.ID)
})`
$DIR/core/services/streams/stream_registry_test.go: `.Register(1, pipeline.Spec{ID: 32, DotDagSource: "source"}, nil)`
$DIR/core/services/streams/stream_registry_test.go: `.Get(1)`
$DIR/core/services/streams/stream_registry_test.go: `.Run("errors when attempt to re-register a stream with an existing ID", func(t *testing.T) {
assert.Len(t, sr.streams, 1)
err := sr.Register(1, pipeline.Spec{ID: 33, DotDagSource: "source"}, nil)
require.Error(t, err)
assert.Len(t, sr.streams, 1)
assert.EqualError(t, err, "stream already registered for id: 1")
v, exists := sr.Get(1)
require.True(t, exists)
strm := v.(*stream)
assert.Equal(t, StreamID(1), strm.id)
assert.Equal(t, int32(32), strm.spec.ID)
})`
$DIR/core/services/streams/stream_registry_test.go: `.Register(1, pipeline.Spec{ID: 33, DotDagSource: "source"}, nil)`
$DIR/core/services/streams/stream_registry_test.go: `.Get(1)`
$DIR/core/services/streams/stream_registry_test.go: `.Run("unregisters a stream", func(t *testing.T) {
assert.Len(t, sr.streams, 3)
sr.Unregister(1)
assert.Len(t, sr.streams, 2)
_, exists := sr.streams[1]
assert.False(t, exists)
})`
$DIR/core/services/streams/stream_registry_test.go: `.Unregister(1)`
$DIR/core/services/streams/stream_registry_test.go: `.Run("no effect when unregistering a non-existent stream", func(t *testing.T) {
assert.Len(t, sr.streams, 2)
sr.Unregister(1)
assert.Len(t, sr.streams, 2)
_, exists := sr.streams[1]
assert.False(t, exists)
})`
$DIR/core/services/streams/stream_registry_test.go: `.Unregister(1)`
$DIR/core/services/streams/stream_test.go: `t.Run("errors with empty pipeline", func(t *testing.T) {
_, _, err := strm.Run(ctx)
assert.EqualError(t, err, "Run failed: Run failed due to unparseable pipeline: empty pipeline")
})`
$DIR/core/services/streams/stream_test.go: `spec.DotDagSource = `
succeed [type=memo value=42]
succeed;
``
$DIR/core/services/streams/stream_test.go: `strm = newStream(lggr, id, spec, runner, nil)`
$DIR/core/services/streams/stream_test.go: `t.Run("executes the pipeline (success)", func(t *testing.T) {
runner.run = &pipeline.Run{ID: 42}
runner.trrs = []pipeline.TaskRunResult{pipeline.TaskRunResult{ID: UUID}}
runner.err = nil
run, trrs, err := strm.Run(ctx)
assert.NoError(t, err)
assert.Equal(t, int64(42), run.ID)
require.Len(t, trrs, 1)
assert.Equal(t, UUID, trrs[0].ID)
})`
$DIR/core/services/streams/stream_test.go: `runner.run = &pipeline.Run{ID: 42}`
$DIR/core/services/streams/stream_test.go: `runner.trrs = []pipeline.TaskRunResult{pipeline.TaskRunResult{ID: UUID}}`
$DIR/core/services/streams/stream_test.go: `runner.err = nil`
$DIR/core/services/streams/stream_test.go: `t.Run("executes the pipeline (failure)", func(t *testing.T) {
runner.err = errors.New("something exploded")
_, _, err := strm.Run(ctx)
require.Error(t, err)
assert.EqualError(t, err, "Run failed: error executing run for spec ID 0: something exploded")
})`
$DIR/core/services/streams/stream_test.go: `runner.err = errors.New("something exploded")`
$DIR/core/services/streams/stream_test.go: `t.Run("wrong number of inputs", func(t *testing.T) {
trrs := []pipeline.TaskRunResult{}
_, err := ExtractBigInt(trrs)
assert.EqualError(t, err, "invalid number of results, expected: 1, got: 0")
})`
$DIR/core/services/streams/stream_test.go: `t.Run("wrong type", func(t *testing.T) {
trrs := []pipeline.TaskRunResult{
{
Result: pipeline.Result{Value: []byte{1, 2, 3}},
Task: &MockTask{},
},
}
_, err := ExtractBigInt(trrs)
assert.EqualError(t, err, "failed to parse BenchmarkPrice: type []uint8 cannot be converted to decimal.Decimal ([1 2 3])")
})`
$DIR/core/services/streams/stream_test.go: `.TestLogger(t)`
$DIR/core/services/streams/stream_test.go: `.Context(t)`
$DIR/core/services/streams/stream_test.go: `.Run("errors with empty pipeline", func(t *testing.T) {
_, _, err := strm.Run(ctx)
assert.EqualError(t, err, "Run failed: Run failed due to unparseable pipeline: empty pipeline")
})`
$DIR/core/services/streams/stream_test.go: `.Run(ctx)`
$DIR/core/services/streams/stream_test.go: `.Run("executes the pipeline (success)", func(t *testing.T) {
runner.run = &pipeline.Run{ID: 42}
runner.trrs = []pipeline.TaskRunResult{pipeline.TaskRunResult{ID: UUID}}
runner.err = nil
run, trrs, err := strm.Run(ctx)
assert.NoError(t, err)
assert.Equal(t, int64(42), run.ID)
require.Len(t, trrs, 1)
assert.Equal(t, UUID, trrs[0].ID)
})`
$DIR/core/services/streams/stream_test.go: `.Run(ctx)`
$DIR/core/services/streams/stream_test.go: `.Run("executes the pipeline (failure)", func(t *testing.T) {
runner.err = errors.New("something exploded")
_, _, err := strm.Run(ctx)
require.Error(t, err)
assert.EqualError(t, err, "Run failed: error executing run for spec ID 0: something exploded")
})`
$DIR/core/services/streams/stream_test.go: `.New("something exploded")`
$DIR/core/services/streams/stream_test.go: `.Run(ctx)`
$DIR/core/services/streams/stream_test.go: `.Run("wrong number of inputs", func(t *testing.T) {
trrs := []pipeline.TaskRunResult{}
_, err := ExtractBigInt(trrs)
assert.EqualError(t, err, "invalid number of results, expected: 1, got: 0")
})`
$DIR/core/services/streams/stream_test.go: `.Run("wrong type", func(t *testing.T) {
trrs := []pipeline.TaskRunResult{
{
Result: pipeline.Result{Value: []byte{1, 2, 3}},
Task: &MockTask{},
},
}
_, err := ExtractBigInt(trrs)
assert.EqualError(t, err, "failed to parse BenchmarkPrice: type []uint8 cannot be converted to decimal.Decimal ([1 2 3])")
})`
$DIR/core/services/synchronization/telemetry_ingress_batch_client_test.go: `csaKeystore.On("GetAll").Return(keyList, nil)`
$DIR/core/services/synchronization/telemetry_ingress_batch_client_test.go: `servicetest.Run(t, telemIngressClient)`
$DIR/core/services/synchronization/telemetry_ingress_batch_client_test.go: `telemClient.On("TelemBatch", mock.Anything, mock.Anything).Return(nil, nil).Run(func(args mock.Arguments) {
telemBatchReq := args.Get(1).(*telemPb.TelemBatchRequest)
if telemBatchReq.ContractId == "0x1" {
for _, telem := range telemBatchReq.Telemetry {
contractCounter1.Add(1)
assert.Equal(t, telemPayload1.Telemetry, telem)
assert.Equal(t, synchronization.OCR, telemPayload1.TelemType)
}
}
if telemBatchReq.ContractId == "0x2" {
for _, telem := range telemBatchReq.Telemetry {
contractCounter2.Add(1)
assert.Equal(t, telemPayload2.Telemetry, telem)
assert.Equal(t, synchronization.OCR2VRF, telemPayload2.TelemType)
}
}
if telemBatchReq.ContractId == "0x3" {
for _, telem := range telemBatchReq.Telemetry {
contractCounter3.Add(1)
assert.Equal(t, telemPayload3.Telemetry, telem)
assert.Equal(t, synchronization.OCR2Functions, telemPayload3.TelemType)
}
}
})`
$DIR/core/services/synchronization/telemetry_ingress_batch_client_test.go: `contractCounter1.Add(1)`
$DIR/core/services/synchronization/telemetry_ingress_batch_client_test.go: `contractCounter2.Add(1)`
$DIR/core/services/synchronization/telemetry_ingress_batch_client_test.go: `contractCounter3.Add(1)`
$DIR/core/services/synchronization/telemetry_ingress_batch_client_test.go: `telemIngressClient.Send(testCtx, telemPayload1.Telemetry, telemPayload1.ContractID, telemPayload1.TelemType)`
$DIR/core/services/synchronization/telemetry_ingress_batch_client_test.go: `telemIngressClient.Send(testCtx, telemPayload2.Telemetry, telemPayload2.ContractID, telemPayload2.TelemType)`
$DIR/core/services/synchronization/telemetry_ingress_batch_client_test.go: `telemIngressClient.Send(testCtx, telemPayload3.Telemetry, telemPayload3.ContractID, telemPayload3.TelemType)`
$DIR/core/services/synchronization/telemetry_ingress_batch_client_test.go: `time.Sleep(sendInterval * 2)`
$DIR/core/services/synchronization/telemetry_ingress_batch_client_test.go: `telemIngressClient.Send(testCtx, telemPayload1.Telemetry, telemPayload1.ContractID, telemPayload1.TelemType)`
$DIR/core/services/synchronization/telemetry_ingress_batch_client_test.go: `telemIngressClient.Send(testCtx, telemPayload1.Telemetry, telemPayload1.ContractID, telemPayload1.TelemType)`
$DIR/core/services/synchronization/telemetry_ingress_batch_client_test.go: `telemIngressClient.Send(testCtx, telemPayload2.Telemetry, telemPayload2.ContractID, telemPayload2.TelemType)`
$DIR/core/services/synchronization/telemetry_ingress_batch_client_test.go: `.NewWithT(t)`
$DIR/core/services/synchronization/telemetry_ingress_batch_client_test.go: `.NewTelemClient(t)`
$DIR/core/services/synchronization/telemetry_ingress_batch_client_test.go: `.On("GetAll")`
$DIR/core/services/synchronization/telemetry_ingress_batch_client_test.go: `.Return(keyList, nil)`
$DIR/core/services/synchronization/telemetry_ingress_batch_client_test.go: `.NewTestTelemetryIngressBatchClient(t, url, serverPubKeyHex, csaKeystore, false, telemClient, sendInterval, false)`
$DIR/core/services/synchronization/telemetry_ingress_batch_client_test.go: `.Run(t, telemIngressClient)`
$DIR/core/services/synchronization/telemetry_ingress_batch_client_test.go: `.On("TelemBatch", mock.Anything, mock.Anything)`
$DIR/core/services/synchronization/telemetry_ingress_batch_client_test.go: `.Return(nil, nil)`
$DIR/core/services/synchronization/telemetry_ingress_batch_client_test.go: `.Run(func(args mock.Arguments) {
telemBatchReq := args.Get(1).(*telemPb.TelemBatchRequest)
if telemBatchReq.ContractId == "0x1" {
for _, telem := range telemBatchReq.Telemetry {
contractCounter1.Add(1)
assert.Equal(t, telemPayload1.Telemetry, telem)
assert.Equal(t, synchronization.OCR, telemPayload1.TelemType)
}
}
if telemBatchReq.ContractId == "0x2" {
for _, telem := range telemBatchReq.Telemetry {
contractCounter2.Add(1)
assert.Equal(t, telemPayload2.Telemetry, telem)
assert.Equal(t, synchronization.OCR2VRF, telemPayload2.TelemType)
}
}
if telemBatchReq.ContractId == "0x3" {
for _, telem := range telemBatchReq.Telemetry {
contractCounter3.Add(1)
assert.Equal(t, telemPayload3.Telemetry, telem)
assert.Equal(t, synchronization.OCR2Functions, telemPayload3.TelemType)
}
}
})`
$DIR/core/services/synchronization/telemetry_ingress_batch_client_test.go: `.Get(1)`
$DIR/core/services/synchronization/telemetry_ingress_batch_client_test.go: `.Add(1)`
$DIR/core/services/synchronization/telemetry_ingress_batch_client_test.go: `.Add(1)`
$DIR/core/services/synchronization/telemetry_ingress_batch_client_test.go: `.Add(1)`
$DIR/core/services/synchronization/telemetry_ingress_batch_client_test.go: `.Context(t)`
$DIR/core/services/synchronization/telemetry_ingress_batch_client_test.go: `.Send(testCtx, telemPayload1.Telemetry, telemPayload1.ContractID, telemPayload1.TelemType)`
$DIR/core/services/synchronization/telemetry_ingress_batch_client_test.go: `.Send(testCtx, telemPayload2.Telemetry, telemPayload2.ContractID, telemPayload2.TelemType)`
$DIR/core/services/synchronization/telemetry_ingress_batch_client_test.go: `.Send(testCtx, telemPayload3.Telemetry, telemPayload3.ContractID, telemPayload3.TelemType)`
$DIR/core/services/synchronization/telemetry_ingress_batch_client_test.go: `.Sleep(sendInterval * 2)`
$DIR/core/services/synchronization/telemetry_ingress_batch_client_test.go: `.Send(testCtx, telemPayload1.Telemetry, telemPayload1.ContractID, telemPayload1.TelemType)`
$DIR/core/services/synchronization/telemetry_ingress_batch_client_test.go: `.Send(testCtx, telemPayload1.Telemetry, telemPayload1.ContractID, telemPayload1.TelemType)`
$DIR/core/services/synchronization/telemetry_ingress_batch_client_test.go: `.Send(testCtx, telemPayload2.Telemetry, telemPayload2.ContractID, telemPayload2.TelemType)`
$DIR/core/services/synchronization/telemetry_ingress_batch_client_test.go: `.Eventually(func() []uint32 {
return []uint32{contractCounter1.Load(), contractCounter2.Load(), contractCounter3.Load()}
})`
$DIR/core/services/synchronization/telemetry_ingress_batch_client_test.go: `.Load()`
$DIR/core/services/synchronization/telemetry_ingress_batch_client_test.go: `.Load()`
$DIR/core/services/synchronization/telemetry_ingress_batch_client_test.go: `.Load()`
$DIR/core/services/synchronization/telemetry_ingress_batch_client_test.go: `.Equal([]uint32{3, 2, 1})`
$DIR/core/services/synchronization/telemetry_ingress_batch_worker_test.go: `chTelemetry <- telemPayload`
$DIR/core/services/synchronization/telemetry_ingress_batch_worker_test.go: `chTelemetry <- telemPayload`
$DIR/core/services/synchronization/telemetry_ingress_batch_worker_test.go: `chTelemetry <- telemPayload`
$DIR/core/services/synchronization/telemetry_ingress_batch_worker_test.go: `chTelemetry <- telemPayload`
$DIR/core/services/synchronization/telemetry_ingress_batch_worker_test.go: `chTelemetry <- telemPayload`
$DIR/core/services/synchronization/telemetry_ingress_batch_worker_test.go: `.NewTelemetryIngressBatchWorker(
uint(maxTelemBatchSize),
time.Millisecond*1,
time.Second,
mocks.NewTelemClient(t),
&sync.WaitGroup{},
make(chan struct{}),
chTelemetry,
"0xa",
synchronization.OCR,
logger.TestLogger(t),
false,
)`
$DIR/core/services/synchronization/telemetry_ingress_batch_worker_test.go: `.NewTelemClient(t)`
$DIR/core/services/synchronization/telemetry_ingress_batch_worker_test.go: `.TestLogger(t)`
$DIR/core/services/synchronization/telemetry_ingress_batch_worker_test.go: `.BuildTelemBatchReq()`
$DIR/core/services/synchronization/telemetry_ingress_batch_worker_test.go: `.BuildTelemBatchReq()`
$DIR/core/services/synchronization/telemetry_ingress_client_test.go: `csaKeystore.On("GetAll").Return(keyList, nil)`
$DIR/core/services/synchronization/telemetry_ingress_client_test.go: `servicetest.Run(t, telemIngressClient)`
$DIR/core/services/synchronization/telemetry_ingress_client_test.go: `telemClient.On("Telem", mock.Anything, mock.Anything).Return(nil, nil).Run(func(args mock.Arguments) {
called.Store(true)
telemReq := args.Get(1).(*telemPb.TelemRequest)
assert.Equal(t, telemPayload.ContractID, telemReq.Address)
assert.Equal(t, telemPayload.Telemetry, telemReq.Telemetry)
assert.Equal(t, string(synchronization.OCR), telemReq.TelemetryType)
assert.Greater(t, telemReq.SentAt, int64(0))
})`
$DIR/core/services/synchronization/telemetry_ingress_client_test.go: `called.Store(true)`
$DIR/core/services/synchronization/telemetry_ingress_client_test.go: `telemIngressClient.Send(testutils.Context(t), telemPayload.Telemetry, telemPayload.ContractID, telemPayload.TelemType)`
$DIR/core/services/synchronization/telemetry_ingress_client_test.go: `.NewTelemClient(t)`
$DIR/core/services/synchronization/telemetry_ingress_client_test.go: `.On("GetAll")`
$DIR/core/services/synchronization/telemetry_ingress_client_test.go: `.Return(keyList, nil)`
$DIR/core/services/synchronization/telemetry_ingress_client_test.go: `.GetDummyKeyString()`
$DIR/core/services/synchronization/telemetry_ingress_client_test.go: `.NewTestTelemetryIngressClient(t, url, serverPubKeyHex, csaKeystore, false, telemClient)`
$DIR/core/services/synchronization/telemetry_ingress_client_test.go: `.Run(t, telemIngressClient)`
$DIR/core/services/synchronization/telemetry_ingress_client_test.go: `.HexToAddress("0xa")`
$DIR/core/services/synchronization/telemetry_ingress_client_test.go: `.String()`
$DIR/core/services/synchronization/telemetry_ingress_client_test.go: `.On("Telem", mock.Anything, mock.Anything)`
$DIR/core/services/synchronization/telemetry_ingress_client_test.go: `.Return(nil, nil)`
$DIR/core/services/synchronization/telemetry_ingress_client_test.go: `.Run(func(args mock.Arguments) {
called.Store(true)
telemReq := args.Get(1).(*telemPb.TelemRequest)
assert.Equal(t, telemPayload.ContractID, telemReq.Address)
assert.Equal(t, telemPayload.Telemetry, telemReq.Telemetry)
assert.Equal(t, string(synchronization.OCR), telemReq.TelemetryType)
assert.Greater(t, telemReq.SentAt, int64(0))
})`
$DIR/core/services/synchronization/telemetry_ingress_client_test.go: `.Store(true)`
$DIR/core/services/synchronization/telemetry_ingress_client_test.go: `.Get(1)`
$DIR/core/services/synchronization/telemetry_ingress_client_test.go: `.Send(testutils.Context(t), telemPayload.Telemetry, telemPayload.ContractID, telemPayload.TelemType)`
$DIR/core/services/synchronization/telemetry_ingress_client_test.go: `.Context(t)`
$DIR/core/services/synchronization/telemetry_ingress_client_test.go: `.NewWithT(t)`
$DIR/core/services/synchronization/telemetry_ingress_client_test.go: `.Eventually(called.Load)`
$DIR/core/services/synchronization/telemetry_ingress_client_test.go: `.BeTrue()`
$DIR/core/services/telemetry/ingress_batch_test.go: `telemetryBatchClient.On("Send", mock.Anything, mock.AnythingOfType("[]uint8"), mock.AnythingOfType("string"), mock.AnythingOfType("TelemetryType")).Return().Run(func(args mock.Arguments) {
telemPayload = synchronization.TelemPayload{
Telemetry: args[1].([]byte),
ContractID: args[2].(string),
TelemType: args[3].(synchronization.TelemetryType),
}
})`
$DIR/core/services/telemetry/ingress_batch_test.go: `telemPayload = synchronization.TelemPayload{
Telemetry: args[1].([]byte),
ContractID: args[2].(string),
TelemType: args[3].(synchronization.TelemetryType),
}`
$DIR/core/services/telemetry/ingress_batch_test.go: `monitoringEndpoint.SendLog(log)`
$DIR/core/services/telemetry/ingress_batch_test.go: `.NewTelemetryService(t)`
$DIR/core/services/telemetry/ingress_batch_test.go: `.NewIngressAgentWrapper(telemetryBatchClient)`
$DIR/core/services/telemetry/ingress_batch_test.go: `.GenMonitoringEndpoint("test-network", "test-chainID", "0xa", synchronization.OCR)`
$DIR/core/services/telemetry/ingress_batch_test.go: `.On("Send", mock.Anything, mock.AnythingOfType("[]uint8"), mock.AnythingOfType("string"), mock.AnythingOfType("TelemetryType"))`
$DIR/core/services/telemetry/ingress_batch_test.go: `.AnythingOfType("[]uint8")`
$DIR/core/services/telemetry/ingress_batch_test.go: `.AnythingOfType("string")`
$DIR/core/services/telemetry/ingress_batch_test.go: `.AnythingOfType("TelemetryType")`
$DIR/core/services/telemetry/ingress_batch_test.go: `.Return()`
$DIR/core/services/telemetry/ingress_batch_test.go: `.Run(func(args mock.Arguments) {
telemPayload = synchronization.TelemPayload{
Telemetry: args[1].([]byte),
ContractID: args[2].(string),
TelemType: args[3].(synchronization.TelemetryType),
}
})`
$DIR/core/services/telemetry/ingress_batch_test.go: `.SendLog(log)`
$DIR/core/services/telemetry/ingress_test.go: `telemetryClient.On("Send", mock.Anything, mock.AnythingOfType("[]uint8"), mock.AnythingOfType("string"), mock.AnythingOfType("TelemetryType")).Return().Run(func(args mock.Arguments) {
telemPayload = synchronization.TelemPayload{
Telemetry: args[1].([]byte),
ContractID: args[2].(string),
TelemType: args[3].(synchronization.TelemetryType),
}
})`
$DIR/core/services/telemetry/ingress_test.go: `telemPayload = synchronization.TelemPayload{
Telemetry: args[1].([]byte),
ContractID: args[2].(string),
TelemType: args[3].(synchronization.TelemetryType),
}`
$DIR/core/services/telemetry/ingress_test.go: `monitoringEndpoint.SendLog(log)`
$DIR/core/services/telemetry/ingress_test.go: `.NewTelemetryService(t)`
$DIR/core/services/telemetry/ingress_test.go: `.NewIngressAgentWrapper(telemetryClient)`
$DIR/core/services/telemetry/ingress_test.go: `.GenMonitoringEndpoint("test-network", "test-chainID", "0xa", synchronization.OCR)`
$DIR/core/services/telemetry/ingress_test.go: `.On("Send", mock.Anything, mock.AnythingOfType("[]uint8"), mock.AnythingOfType("string"), mock.AnythingOfType("TelemetryType"))`
$DIR/core/services/telemetry/ingress_test.go: `.AnythingOfType("[]uint8")`
$DIR/core/services/telemetry/ingress_test.go: `.AnythingOfType("string")`
$DIR/core/services/telemetry/ingress_test.go: `.AnythingOfType("TelemetryType")`
$DIR/core/services/telemetry/ingress_test.go: `.Return()`
$DIR/core/services/telemetry/ingress_test.go: `.Run(func(args mock.Arguments) {
telemPayload = synchronization.TelemPayload{
Telemetry: args[1].([]byte),
ContractID: args[2].(string),
TelemType: args[3].(synchronization.TelemetryType),
}
})`
$DIR/core/services/telemetry/ingress_test.go: `.SendLog(log)`
$DIR/core/services/telemetry/manager_test.go: `te.On("Network").Return("network-1")`
$DIR/core/services/telemetry/manager_test.go: `te.On("ChainID").Return("network-1-chainID-1")`
$DIR/core/services/telemetry/manager_test.go: `te.On("ServerPubKey").Return("some-pubkey")`
$DIR/core/services/telemetry/manager_test.go: `te.On("URL").Return(u)`
$DIR/core/services/telemetry/manager_test.go: `tic.On("Endpoints").Return([]config.TelemetryIngressEndpoint{te})`
$DIR/core/services/telemetry/manager_test.go: `tic = setupMockConfig(t, false)`
$DIR/core/services/telemetry/manager_test.go: `tic.On("Endpoints").Return([]config.TelemetryIngressEndpoint{te})`
$DIR/core/services/telemetry/manager_test.go: `tm = NewManager(tic, ks, lggr)`
$DIR/core/services/telemetry/manager_test.go: `me = tm.GenMonitoringEndpoint("network-1", "network-1-chainID-1", "", "")`
$DIR/core/services/telemetry/manager_test.go: `te.On("Network").Maybe().Return(e.network)`
$DIR/core/services/telemetry/manager_test.go: `te.On("ChainID").Maybe().Return(e.chainID)`
$DIR/core/services/telemetry/manager_test.go: `te.On("ServerPubKey").Maybe().Return(e.pubKey)`
$DIR/core/services/telemetry/manager_test.go: `u = nil`
$DIR/core/services/telemetry/manager_test.go: `te.On("URL").Maybe().Return(u)`
$DIR/core/services/telemetry/manager_test.go: `mockEndpoints = append(mockEndpoints, te)`
$DIR/core/services/telemetry/manager_test.go: `tic.On("Endpoints").Return(mockEndpoints)`
$DIR/core/services/telemetry/manager_test.go: `ks.On("GetAll").Return([]csakey.KeyV2{csakey.MustNewV2XXXTestingOnly(big.NewInt(0))}, nil)`
$DIR/core/services/telemetry/manager_test.go: `found = true`
$DIR/core/services/telemetry/manager_test.go: `t.Cleanup(func() {
require.NoError(t, m.Close())
})`
$DIR/core/services/telemetry/manager_test.go: `testutils.WaitForLogMessageCount(t, logObs, "error connecting error while dialing dial tcp", 3)`
$DIR/core/services/telemetry/manager_test.go: `tic.On("Endpoints").Return(nil)`
$DIR/core/services/telemetry/manager_test.go: `tm.endpoints = make([]*telemetryEndpoint, len(testEndpoints))`
$DIR/core/services/telemetry/manager_test.go: `clientMock.On("Send", mock.Anything, mock.AnythingOfType("[]uint8"), mock.AnythingOfType("string"), mock.AnythingOfType("TelemetryType")).Return().Run(func(args mock.Arguments) {
clientSent = append(clientSent, synchronization.TelemPayload{
Telemetry: args[1].([]byte),
ContractID: args[2].(string),
TelemType: args[3].(synchronization.TelemetryType),
})
})`
$DIR/core/services/telemetry/manager_test.go: `clientSent = append(clientSent, synchronization.TelemPayload{
Telemetry: args[1].([]byte),
ContractID: args[2].(string),
TelemType: args[3].(synchronization.TelemetryType),
})`
$DIR/core/services/telemetry/manager_test.go: `tm.endpoints[i] = &telemetryEndpoint{
ChainID: e.chainID,
Network: e.network,
client: clientMock,
}`
$DIR/core/services/telemetry/manager_test.go: `noopEndpoint = tm.GenMonitoringEndpoint("network-1", "unknown-chainID", "some-contractID", "some-type")`
$DIR/core/services/telemetry/manager_test.go: `noopEndpoint = tm.GenMonitoringEndpoint("network-2", "network-1-chainID-1", "some-contractID", "some-type")`
$DIR/core/services/telemetry/manager_test.go: `me.SendLog([]byte(e.chainID))`
$DIR/core/services/telemetry/manager_test.go: `.NewTelemetryIngressEndpoint(t)`
$DIR/core/services/telemetry/manager_test.go: `.On("Network")`
$DIR/core/services/telemetry/manager_test.go: `.Return("network-1")`
$DIR/core/services/telemetry/manager_test.go: `.On("ChainID")`
$DIR/core/services/telemetry/manager_test.go: `.Return("network-1-chainID-1")`
$DIR/core/services/telemetry/manager_test.go: `.On("ServerPubKey")`
$DIR/core/services/telemetry/manager_test.go: `.Return("some-pubkey")`
$DIR/core/services/telemetry/manager_test.go: `.Parse("http://some-url.test")`
$DIR/core/services/telemetry/manager_test.go: `.On("URL")`
$DIR/core/services/telemetry/manager_test.go: `.Return(u)`
$DIR/core/services/telemetry/manager_test.go: `.On("Endpoints")`
$DIR/core/services/telemetry/manager_test.go: `.Return([]config.TelemetryIngressEndpoint{te})`
$DIR/core/services/telemetry/manager_test.go: `.TestLoggerObserved(t, zapcore.InfoLevel)`
$DIR/core/services/telemetry/manager_test.go: `.NewCSA(t)`
$DIR/core/services/telemetry/manager_test.go: `.GenMonitoringEndpoint("network-1", "network-1-chainID-1", "", "")`
$DIR/core/services/telemetry/manager_test.go: `.On("Endpoints")`
$DIR/core/services/telemetry/manager_test.go: `.Return([]config.TelemetryIngressEndpoint{te})`
$DIR/core/services/telemetry/manager_test.go: `.GenMonitoringEndpoint("network-1", "network-1-chainID-1", "", "")`
$DIR/core/services/telemetry/manager_test.go: `.TypeOf(me)`
$DIR/core/services/telemetry/manager_test.go: `.String()`
$DIR/core/services/telemetry/manager_test.go: `.NewTelemetryIngressEndpoint(t)`
$DIR/core/services/telemetry/manager_test.go: `.On("Network")`
$DIR/core/services/telemetry/manager_test.go: `.Maybe()`
$DIR/core/services/telemetry/manager_test.go: `.Return(e.network)`
$DIR/core/services/telemetry/manager_test.go: `.On("ChainID")`
$DIR/core/services/telemetry/manager_test.go: `.Maybe()`
$DIR/core/services/telemetry/manager_test.go: `.Return(e.chainID)`
$DIR/core/services/telemetry/manager_test.go: `.On("ServerPubKey")`
$DIR/core/services/telemetry/manager_test.go: `.Maybe()`
$DIR/core/services/telemetry/manager_test.go: `.Return(e.pubKey)`
$DIR/core/services/telemetry/manager_test.go: `.Parse(e.url)`
$DIR/core/services/telemetry/manager_test.go: `.On("URL")`
$DIR/core/services/telemetry/manager_test.go: `.Maybe()`
$DIR/core/services/telemetry/manager_test.go: `.Return(u)`
$DIR/core/services/telemetry/manager_test.go: `.On("Endpoints")`
$DIR/core/services/telemetry/manager_test.go: `.Return(mockEndpoints)`
$DIR/core/services/telemetry/manager_test.go: `.TestLoggerObserved(t, zapcore.InfoLevel)`
$DIR/core/services/telemetry/manager_test.go: `.NewCSA(t)`
$DIR/core/services/telemetry/manager_test.go: `.On("GetAll")`
$DIR/core/services/telemetry/manager_test.go: `.Return([]csakey.KeyV2{csakey.MustNewV2XXXTestingOnly(big.NewInt(0))}, nil)`
$DIR/core/services/telemetry/manager_test.go: `.MustNewV2XXXTestingOnly(big.NewInt(0))`
$DIR/core/services/telemetry/manager_test.go: `.NewInt(0)`
$DIR/core/services/telemetry/manager_test.go: `.TakeAll()`
$DIR/core/services/telemetry/manager_test.go: `.Contains(l.Message, e.expectedError)`
$DIR/core/services/telemetry/manager_test.go: `.Cleanup(func() {
require.NoError(t, m.Close())
})`
$DIR/core/services/telemetry/manager_test.go: `.WaitForLogMessageCount(t, logObs, "error connecting error while dialing dial tcp", 3)`
$DIR/core/services/telemetry/manager_test.go: `.HealthReport()`
$DIR/core/services/telemetry/manager_test.go: `.On("Endpoints")`
$DIR/core/services/telemetry/manager_test.go: `.Return(nil)`
$DIR/core/services/telemetry/manager_test.go: `.TestLoggerObserved(t, zapcore.InfoLevel)`
$DIR/core/services/telemetry/manager_test.go: `.NewCSA(t)`
$DIR/core/services/telemetry/manager_test.go: `.NewTelemetryService(t)`
$DIR/core/services/telemetry/manager_test.go: `.On("Send", mock.Anything, mock.AnythingOfType("[]uint8"), mock.AnythingOfType("string"), mock.AnythingOfType("TelemetryType"))`
$DIR/core/services/telemetry/manager_test.go: `.AnythingOfType("[]uint8")`
$DIR/core/services/telemetry/manager_test.go: `.AnythingOfType("string")`
$DIR/core/services/telemetry/manager_test.go: `.AnythingOfType("TelemetryType")`
$DIR/core/services/telemetry/manager_test.go: `.Return()`
$DIR/core/services/telemetry/manager_test.go: `.Run(func(args mock.Arguments) {
clientSent = append(clientSent, synchronization.TelemPayload{
Telemetry: args[1].([]byte),
ContractID: args[2].(string),
TelemType: args[3].(synchronization.TelemetryType),
})
})`
$DIR/core/services/telemetry/manager_test.go: `.GenMonitoringEndpoint("unknown-network", "unknown-chainID", "some-contractID", "some-type")`
$DIR/core/services/telemetry/manager_test.go: `.GenMonitoringEndpoint("network-1", "unknown-chainID", "some-contractID", "some-type")`
$DIR/core/services/telemetry/manager_test.go: `.GenMonitoringEndpoint("network-2", "network-1-chainID-1", "some-contractID", "some-type")`
$DIR/core/services/telemetry/manager_test.go: `.Sprintf("TelemType_%s", e.chainID)`
$DIR/core/services/telemetry/manager_test.go: `.Sprintf("contractID_%s", e.chainID)`
$DIR/core/services/telemetry/manager_test.go: `.GenMonitoringEndpoint(
e.network,
e.chainID,
contractID,
synchronization.TelemetryType(telemType),
)`
$DIR/core/services/telemetry/manager_test.go: `.TelemetryType(telemType)`
$DIR/core/services/telemetry/manager_test.go: `.SendLog([]byte(e.chainID))`
$DIR/core/services/transmission/integration_test.go: `userOp.Signature = sig`
$DIR/core/services/transmission/integration_test.go: `holder1.Value = assets.Ether(10).ToInt()`
$DIR/core/services/transmission/integration_test.go: `backend.Commit()`
$DIR/core/services/transmission/integration_test.go: `_, err = bind.WaitMined(testutils.Context(t), backend, tx)`
$DIR/core/services/transmission/integration_test.go: `holder1.Value = assets.Ether(0).ToInt()`
$DIR/core/services/transmission/integration_test.go: `tx, err = universe.entryPoint.HandleOps(holder2, []entry_point.UserOperation{userOp}, holder1.From)`
$DIR/core/services/transmission/integration_test.go: `backend.Commit()`
$DIR/core/services/transmission/integration_test.go: `_, err = bind.WaitMined(testutils.Context(t), backend, tx)`
$DIR/core/services/transmission/integration_test.go: `backend.Commit()`
$DIR/core/services/transmission/integration_test.go: `backend.Commit()`
$DIR/core/services/transmission/integration_test.go: `_, err = bind.WaitMined(testutils.Context(t), backend, tx)`
$DIR/core/services/transmission/integration_test.go: `userOp.Signature = sig`
$DIR/core/services/transmission/integration_test.go: `holder1.Value = assets.Ether(10).ToInt()`
$DIR/core/services/transmission/integration_test.go: `tx, err = universe.entryPoint.DepositTo(holder1, paymasterAddress)`
$DIR/core/services/transmission/integration_test.go: `backend.Commit()`
$DIR/core/services/transmission/integration_test.go: `_, err = bind.WaitMined(testutils.Context(t), backend, tx)`
$DIR/core/services/transmission/integration_test.go: `holder1.Value = assets.Ether(0).ToInt()`
$DIR/core/services/transmission/integration_test.go: `tx, err = universe.entryPoint.HandleOps(holder2, []entry_point.UserOperation{userOp}, holder1.From)`
$DIR/core/services/transmission/integration_test.go: `backend.Commit()`
$DIR/core/services/transmission/integration_test.go: `_, err = bind.WaitMined(testutils.Context(t), backend, tx)`
$DIR/core/services/transmission/integration_test.go: `copy(keyhash[:], common.LeftPadBytes(big.NewInt(123).Bytes(), 32))`
$DIR/core/services/transmission/integration_test.go: `backend.Commit()`
$DIR/core/services/transmission/integration_test.go: `backend.Commit()`
$DIR/core/services/transmission/integration_test.go: `_, err = bind.WaitMined(testutils.Context(t), backend, tx)`
$DIR/core/services/transmission/integration_test.go: `userOp.Signature = sig`
$DIR/core/services/transmission/integration_test.go: `holder1.Value = assets.Ether(10).ToInt()`
$DIR/core/services/transmission/integration_test.go: `tx, err = universe.entryPoint.DepositTo(holder1, paymasterAddress)`
$DIR/core/services/transmission/integration_test.go: `backend.Commit()`
$DIR/core/services/transmission/integration_test.go: `_, err = bind.WaitMined(testutils.Context(t), backend, tx)`
$DIR/core/services/transmission/integration_test.go: `holder1.Value = assets.Ether(0).ToInt()`
$DIR/core/services/transmission/integration_test.go: `err = backend.SendTransaction(testutils.Context(t), signedtx)`
$DIR/core/services/transmission/integration_test.go: `backend.Commit()`
$DIR/core/services/transmission/integration_test.go: `.greeter.GetGreeting(nil)`
$DIR/core/services/transmission/integration_test.go: `.helper.CalculateSmartContractAccountAddress(
nil,
holder1.From,
universe.entryPointAddress,
universe.factoryAddress,
)`
$DIR/core/services/transmission/integration_test.go: `.helper.GetInitCode(nil, universe.factoryAddress, holder1.From, universe.entryPointAddress)`
$DIR/core/services/transmission/integration_test.go: `.Pack("setGreeting", "bye")`
$DIR/core/services/transmission/integration_test.go: `.NewInt(0)`
$DIR/core/services/transmission/integration_test.go: `.NewInt(0)`
$DIR/core/services/transmission/integration_test.go: `.NewInt(1000)`
$DIR/core/services/transmission/integration_test.go: `.helper.GetFullEndTxEncoding(nil, universe.greeterAddress, value, deadline, encodedGreetingCall)`
$DIR/core/services/transmission/integration_test.go: `.NewInt(10_000_000)`
$DIR/core/services/transmission/integration_test.go: `.NewInt(10_000_000)`
$DIR/core/services/transmission/integration_test.go: `.NewInt(10_000_000)`
$DIR/core/services/transmission/integration_test.go: `.NewInt(100)`
$DIR/core/services/transmission/integration_test.go: `.NewInt(200)`
$DIR/core/services/transmission/integration_test.go: `.entryPoint.GetUserOpHash(nil, userOp)`
$DIR/core/services/transmission/integration_test.go: `.helper.GetFullHashForSigning(nil, userOpHash, toDeployAddress)`
$DIR/core/services/transmission/integration_test.go: `.SignMessage(universe.holder1Key.ToEcdsaPrivKey(), fullHash[:])`
$DIR/core/services/transmission/integration_test.go: `.holder1Key.ToEcdsaPrivKey()`
$DIR/core/services/transmission/integration_test.go: `.Ether(10)`
$DIR/core/services/transmission/integration_test.go: `.ToInt()`
$DIR/core/services/transmission/integration_test.go: `.entryPoint.DepositTo(holder1, toDeployAddress)`
$DIR/core/services/transmission/integration_test.go: `.Commit()`
$DIR/core/services/transmission/integration_test.go: `.WaitMined(testutils.Context(t), backend, tx)`
$DIR/core/services/transmission/integration_test.go: `.Context(t)`
$DIR/core/services/transmission/integration_test.go: `.Ether(0)`
$DIR/core/services/transmission/integration_test.go: `.ToInt()`
$DIR/core/services/transmission/integration_test.go: `.entryPoint.BalanceOf(nil, toDeployAddress)`
$DIR/core/services/transmission/integration_test.go: `.entryPoint.HandleOps(holder2, []entry_point.UserOperation{userOp}, holder1.From)`
$DIR/core/services/transmission/integration_test.go: `.Commit()`
$DIR/core/services/transmission/integration_test.go: `.WaitMined(testutils.Context(t), backend, tx)`
$DIR/core/services/transmission/integration_test.go: `.Context(t)`
$DIR/core/services/transmission/integration_test.go: `.greeter.GetGreeting(nil)`
$DIR/core/services/transmission/integration_test.go: `.NewSCA(toDeployAddress, backend)`
$DIR/core/services/transmission/integration_test.go: `.SNonce(nil)`
$DIR/core/services/transmission/integration_test.go: `.NewInt(1)`
$DIR/core/services/transmission/integration_test.go: `.greeter.GetGreeting(nil)`
$DIR/core/services/transmission/integration_test.go: `.helper.CalculateSmartContractAccountAddress(
nil,
holder1.From,
universe.entryPointAddress,
universe.factoryAddress,
)`
$DIR/core/services/transmission/integration_test.go: `.helper.GetInitCode(nil, universe.factoryAddress, holder1.From, universe.entryPointAddress)`
$DIR/core/services/transmission/integration_test.go: `.Pack("setGreeting", "bye")`
$DIR/core/services/transmission/integration_test.go: `.NewInt(0)`
$DIR/core/services/transmission/integration_test.go: `.NewInt(0)`
$DIR/core/services/transmission/integration_test.go: `.NewInt(1000)`
$DIR/core/services/transmission/integration_test.go: `.helper.GetFullEndTxEncoding(nil, universe.greeterAddress, value, deadline, encodedGreetingCall)`
$DIR/core/services/transmission/integration_test.go: `.DeployLinkToken(holder1, backend)`
$DIR/core/services/transmission/integration_test.go: `.DeployMockV3AggregatorContract(
holder1,
backend,
18,
(*big.Int)(assets.GWei(5000000)), // .005 ETH
)`
$DIR/core/services/transmission/integration_test.go: `.GWei(5000000)`
$DIR/core/services/transmission/integration_test.go: `.DeployPaymaster(holder1, backend, linkTokenAddress, linkEthFeedAddress, universe.entryPointAddress)`
$DIR/core/services/transmission/integration_test.go: `.Commit()`
$DIR/core/services/transmission/integration_test.go: `.TransferAndCall(
holder1,
paymasterAddress,
assets.Ether(1000).ToInt(),
common.LeftPadBytes(toDeployAddress.Bytes(), 32),
)`
$DIR/core/services/transmission/integration_test.go: `.Ether(1000)`
$DIR/core/services/transmission/integration_test.go: `.ToInt()`
$DIR/core/services/transmission/integration_test.go: `.LeftPadBytes(toDeployAddress.Bytes(), 32)`
$DIR/core/services/transmission/integration_test.go: `.Bytes()`
$DIR/core/services/transmission/integration_test.go: `.Commit()`
$DIR/core/services/transmission/integration_test.go: `.WaitMined(testutils.Context(t), backend, tx)`
$DIR/core/services/transmission/integration_test.go: `.Context(t)`
$DIR/core/services/transmission/integration_test.go: `.NewInt(10_000_000)`
$DIR/core/services/transmission/integration_test.go: `.NewInt(10_000_000)`
$DIR/core/services/transmission/integration_test.go: `.NewInt(10_000_000)`
$DIR/core/services/transmission/integration_test.go: `.NewInt(100)`
$DIR/core/services/transmission/integration_test.go: `.NewInt(200)`
$DIR/core/services/transmission/integration_test.go: `.Bytes()`
$DIR/core/services/transmission/integration_test.go: `.entryPoint.GetUserOpHash(nil, userOp)`
$DIR/core/services/transmission/integration_test.go: `.helper.GetFullHashForSigning(nil, userOpHash, toDeployAddress)`
$DIR/core/services/transmission/integration_test.go: `.SignMessage(universe.holder1Key.ToEcdsaPrivKey(), fullHash[:])`
$DIR/core/services/transmission/integration_test.go: `.holder1Key.ToEcdsaPrivKey()`
$DIR/core/services/transmission/integration_test.go: `.Ether(10)`
$DIR/core/services/transmission/integration_test.go: `.ToInt()`
$DIR/core/services/transmission/integration_test.go: `.entryPoint.DepositTo(holder1, paymasterAddress)`
$DIR/core/services/transmission/integration_test.go: `.Commit()`
$DIR/core/services/transmission/integration_test.go: `.WaitMined(testutils.Context(t), backend, tx)`
$DIR/core/services/transmission/integration_test.go: `.Context(t)`
$DIR/core/services/transmission/integration_test.go: `.Ether(0)`
$DIR/core/services/transmission/integration_test.go: `.ToInt()`
$DIR/core/services/transmission/integration_test.go: `.entryPoint.BalanceOf(nil, paymasterAddress)`
$DIR/core/services/transmission/integration_test.go: `.entryPoint.HandleOps(holder2, []entry_point.UserOperation{userOp}, holder1.From)`
$DIR/core/services/transmission/integration_test.go: `.Commit()`
$DIR/core/services/transmission/integration_test.go: `.WaitMined(testutils.Context(t), backend, tx)`
$DIR/core/services/transmission/integration_test.go: `.Context(t)`
$DIR/core/services/transmission/integration_test.go: `.greeter.GetGreeting(nil)`
$DIR/core/services/transmission/integration_test.go: `.NewSCA(toDeployAddress, backend)`
$DIR/core/services/transmission/integration_test.go: `.SNonce(nil)`
$DIR/core/services/transmission/integration_test.go: `.NewInt(1)`
$DIR/core/services/transmission/integration_test.go: `.helper.CalculateSmartContractAccountAddress(
nil,
holder1.From,
universe.entryPointAddress,
universe.factoryAddress,
)`
$DIR/core/services/transmission/integration_test.go: `.helper.GetInitCode(nil, universe.factoryAddress, holder1.From, universe.entryPointAddress)`
$DIR/core/services/transmission/integration_test.go: `.LeftPadBytes(big.NewInt(123).Bytes(), 32)`
$DIR/core/services/transmission/integration_test.go: `.NewInt(123)`
$DIR/core/services/transmission/integration_test.go: `.Bytes()`
$DIR/core/services/transmission/integration_test.go: `.Ether(1)`
$DIR/core/services/transmission/integration_test.go: `.ToInt()`
$DIR/core/services/transmission/integration_test.go: `.Pack("doRequestRandomness", keyhash, fee)`
$DIR/core/services/transmission/integration_test.go: `.NewInt(0)`
$DIR/core/services/transmission/integration_test.go: `.NewInt(0)`
$DIR/core/services/transmission/integration_test.go: `.NewInt(1000)`
$DIR/core/services/transmission/integration_test.go: `.helper.GetFullEndTxEncoding(nil, universe.vrfConsumerAddress, value, deadline, encodedVRFRequest)`
$DIR/core/services/transmission/integration_test.go: `.DeployPaymaster(holder1, backend, universe.linkTokenAddress, universe.linkEthFeedAddress, universe.entryPointAddress)`
$DIR/core/services/transmission/integration_test.go: `.Commit()`
$DIR/core/services/transmission/integration_test.go: `.linkToken.TransferAndCall(
holder1,
paymasterAddress,
assets.Ether(1000).ToInt(),
common.LeftPadBytes(toDeployAddress.Bytes(), 32),
)`
$DIR/core/services/transmission/integration_test.go: `.Ether(1000)`
$DIR/core/services/transmission/integration_test.go: `.ToInt()`
$DIR/core/services/transmission/integration_test.go: `.LeftPadBytes(toDeployAddress.Bytes(), 32)`
$DIR/core/services/transmission/integration_test.go: `.Bytes()`
$DIR/core/services/transmission/integration_test.go: `.Commit()`
$DIR/core/services/transmission/integration_test.go: `.WaitMined(testutils.Context(t), backend, tx)`
$DIR/core/services/transmission/integration_test.go: `.Context(t)`
$DIR/core/services/transmission/integration_test.go: `.helper.GetAbiEncodedDirectRequestData(nil, universe.vrfConsumerAddress, fee, fee)`
$DIR/core/services/transmission/integration_test.go: `.NewInt(10_000_000)`
$DIR/core/services/transmission/integration_test.go: `.NewInt(10_000_000)`
$DIR/core/services/transmission/integration_test.go: `.NewInt(10_000_000)`
$DIR/core/services/transmission/integration_test.go: `.NewInt(100)`
$DIR/core/services/transmission/integration_test.go: `.NewInt(200)`
$DIR/core/services/transmission/integration_test.go: `.Bytes()`
$DIR/core/services/transmission/integration_test.go: `.entryPoint.GetUserOpHash(nil, userOp)`
$DIR/core/services/transmission/integration_test.go: `.helper.GetFullHashForSigning(nil, userOpHash, toDeployAddress)`
$DIR/core/services/transmission/integration_test.go: `.SignMessage(universe.holder1Key.ToEcdsaPrivKey(), fullHash[:])`
$DIR/core/services/transmission/integration_test.go: `.holder1Key.ToEcdsaPrivKey()`
$DIR/core/services/transmission/integration_test.go: `.Ether(10)`
$DIR/core/services/transmission/integration_test.go: `.ToInt()`
$DIR/core/services/transmission/integration_test.go: `.entryPoint.DepositTo(holder1, paymasterAddress)`
$DIR/core/services/transmission/integration_test.go: `.Commit()`
$DIR/core/services/transmission/integration_test.go: `.WaitMined(testutils.Context(t), backend, tx)`
$DIR/core/services/transmission/integration_test.go: `.Context(t)`
$DIR/core/services/transmission/integration_test.go: `.Ether(0)`
$DIR/core/services/transmission/integration_test.go: `.ToInt()`
$DIR/core/services/transmission/integration_test.go: `.entryPoint.BalanceOf(nil, paymasterAddress)`
$DIR/core/services/transmission/integration_test.go: `.SuggestGasPrice(testutils.Context(t))`
$DIR/core/services/transmission/integration_test.go: `.Context(t)`
$DIR/core/services/transmission/integration_test.go: `.PendingNonceAt(testutils.Context(t), holder2.From)`
$DIR/core/services/transmission/integration_test.go: `.Context(t)`
$DIR/core/services/transmission/integration_test.go: `.Pack("handleOps", []entry_point.UserOperation{userOp}, holder1.From)`
$DIR/core/services/transmission/integration_test.go: `.EstimateGas(testutils.Context(t), ethereum.CallMsg{
From: holder2.From,
To: &universe.entryPointAddress,
Gas: 0,
Data: payload,
GasPrice: gasPrice,
})`
$DIR/core/services/transmission/integration_test.go: `.Context(t)`
$DIR/core/services/transmission/integration_test.go: `.NewTx(&types.LegacyTx{
Nonce: accountNonce,
Gas: gas,
To: &universe.entryPointAddress,
Value: big.NewInt(0),
Data: payload,
GasPrice: gasPrice,
})`
$DIR/core/services/transmission/integration_test.go: `.NewInt(0)`
$DIR/core/services/transmission/integration_test.go: `.Signer(holder2.From, unsigned)`
$DIR/core/services/transmission/integration_test.go: `.SendTransaction(testutils.Context(t), signedtx)`
$DIR/core/services/transmission/integration_test.go: `.Context(t)`
$DIR/core/services/transmission/integration_test.go: `.Commit()`
$DIR/core/services/transmission/integration_test.go: `.WaitMined(testutils.Context(t), backend, signedtx)`
$DIR/core/services/transmission/integration_test.go: `.Context(t)`
$DIR/core/services/transmission/integration_test.go: `.FilterLogs(testutils.Context(t), ethereum.FilterQuery{
Addresses: []common.Address{universe.vrfCoordinatorAddress},
})`
$DIR/core/services/transmission/integration_test.go: `.Context(t)`
$DIR/core/services/transmission/integration_test.go: `.vrfCoordinator.ParseRandomnessRequest(logs[0])`
$DIR/core/services/transmission/integration_test.go: `.NewSCA(toDeployAddress, backend)`
$DIR/core/services/transmission/integration_test.go: `.SNonce(nil)`
$DIR/core/services/transmission/integration_test.go: `.NewInt(1)`
$DIR/core/services/versioning/orm_test.go: `err = orm.UpsertNodeVersion(ctx, NewNodeVersion("9.9.7"))`
$DIR/core/services/versioning/orm_test.go: `err = db.QueryRowx(`SELECT count(*) FROM node_versions`).Scan(&count)`
$DIR/core/services/versioning/orm_test.go: `ver, err = orm.FindLatestNodeVersion(ctx)`
$DIR/core/services/versioning/orm_test.go: `err = orm.UpsertNodeVersion(ctx, NewNodeVersion("random_12345"))`
$DIR/core/services/versioning/orm_test.go: `ver, err = orm.FindLatestNodeVersion(ctx)`
$DIR/core/services/versioning/orm_test.go: `_, _, err = CheckVersion(ctx, db, lggr, static.Unset)`
$DIR/core/services/versioning/orm_test.go: `_, _, err = CheckVersion(ctx, db, lggr, "some old bollocks")`
$DIR/core/services/versioning/orm_test.go: `_, _, err = CheckVersion(ctx, db, lggr, "9.9.7")`
$DIR/core/services/versioning/orm_test.go: `appv, dbv, err = CheckVersion(ctx, db, lggr, "9.9.8")`
$DIR/core/services/versioning/orm_test.go: `appv, dbv, err = CheckVersion(ctx, db, lggr, "9.9.9")`
$DIR/core/services/versioning/orm_test.go: `err = orm.UpsertNodeVersion(ctx, NewNodeVersion("9.9.8"))`
$DIR/core/services/versioning/orm_test.go: `.Context(t)`
$DIR/core/services/versioning/orm_test.go: `.NewSqlxDB(t)`
$DIR/core/services/versioning/orm_test.go: `.TestLogger(t)`
$DIR/core/services/versioning/orm_test.go: `.UpsertNodeVersion(ctx, NewNodeVersion("9.9.8"))`
$DIR/core/services/versioning/orm_test.go: `.FindLatestNodeVersion(ctx)`
$DIR/core/services/versioning/orm_test.go: `.UpsertNodeVersion(ctx, NewNodeVersion("9.9.7"))`
$DIR/core/services/versioning/orm_test.go: `.QueryRowx(`SELECT count(*) FROM node_versions`)`
$DIR/core/services/versioning/orm_test.go: `.Scan(&count)`
$DIR/core/services/versioning/orm_test.go: `.FindLatestNodeVersion(ctx)`
$DIR/core/services/versioning/orm_test.go: `.UpsertNodeVersion(ctx, NewNodeVersion("random_12345"))`
$DIR/core/services/versioning/orm_test.go: `.FindLatestNodeVersion(ctx)`
$DIR/core/services/versioning/orm_test.go: `.Context(t)`
$DIR/core/services/versioning/orm_test.go: `.NewSqlxDB(t)`
$DIR/core/services/versioning/orm_test.go: `.TestLogger(t)`
$DIR/core/services/versioning/orm_test.go: `.UpsertNodeVersion(ctx, NewNodeVersion("9.9.8"))`
$DIR/core/services/versioning/orm_test.go: `.String()`
$DIR/core/services/versioning/orm_test.go: `.Context(t)`
$DIR/core/services/versioning/orm_test.go: `.NewSqlxDB(t)`
$DIR/core/services/versioning/orm_test.go: `.TestLogger(t)`
$DIR/core/services/versioning/orm_test.go: `.FindLatestNodeVersion(ctx)`
$DIR/core/services/versioning/orm_test.go: `.UpsertNodeVersion(ctx, NewNodeVersion("9.9.8"))`
$DIR/core/services/versioning/orm_test.go: `.FindLatestNodeVersion(ctx)`
$DIR/core/services/vrf/delegate_test.go: `copy(reqIDBytes[:], reqID.Bytes())`
$DIR/core/services/vrf/delegate_test.go: `listener.SetRespCount(reqIDBytes, 2)`
$DIR/core/services/vrf/delegate_test.go: `listener.SetReqAdded(func() {
added <- struct{}{}
})`
$DIR/core/services/vrf/delegate_test.go: `added <- struct{}{}`
$DIR/core/services/vrf/delegate_test.go: `vuni.lb.On("WasAlreadyConsumed", mock.Anything, mock.Anything).Return(false, nil).Maybe()`
$DIR/core/services/vrf/delegate_test.go: `vuni.lb.On("MarkConsumed", mock.Anything, mock.Anything, mock.Anything).Return(nil).Maybe()`
$DIR/core/services/vrf/delegate_test.go: `vuni.ec.On("CallContract", mock.Anything, mock.Anything, mock.Anything).Return(generateCallbackReturnValues(t, false), nil).Maybe()`
$DIR/core/services/vrf/delegate_test.go: `listener.HandleLog(ctx, log.NewLogBroadcast(types.Log{
// Data has all the NON-indexed parameters
Data: bytes.Join([][]byte{pk.MustHash().Bytes(), // key hash
preSeed, // preSeed
evmutils.NewHash().Bytes(), // sender
evmutils.NewHash().Bytes(), // fee
reqID.Bytes()}, []byte{}, // requestID
),
// JobID is indexed, thats why it lives in the Topics.
Topics: []common.Hash{
solidity_cross_tests.VRFRandomnessRequestLogTopic(),
jb.ExternalIDEncodeStringToTopic(), // jobID
},
BlockNumber: 10,
TxHash: txHash,
}, vuni.cid, nil))`
$DIR/core/services/vrf/delegate_test.go: `waitForChannel(t, added, time.Second, "request not added to the queue")`
$DIR/core/services/vrf/delegate_test.go: `listener.SetReqAdded(func() {
added <- struct{}{}
})`
$DIR/core/services/vrf/delegate_test.go: `added <- struct{}{}`
$DIR/core/services/vrf/delegate_test.go: `vuni.pr.OnRunFinished(func(run *pipeline.Run) {
if run.State == pipeline.RunStatusCompleted {
runComplete <- struct{}{}
}
})`
$DIR/core/services/vrf/delegate_test.go: `runComplete <- struct{}{}`
$DIR/core/services/vrf/delegate_test.go: `vuni.lb.On("WasAlreadyConsumed", mock.Anything, mock.Anything).Return(false, nil)`
$DIR/core/services/vrf/delegate_test.go: `vuni.lb.On("MarkConsumed", mock.Anything, mock.Anything, mock.Anything).Run(func(args mock.Arguments) {
consumed <- struct{}{}
}).Return(nil).Once()`
$DIR/core/services/vrf/delegate_test.go: `consumed <- struct{}{}`
$DIR/core/services/vrf/delegate_test.go: `vuni.ec.On("CallContract", mock.Anything, mock.Anything, mock.Anything).Return(generateCallbackReturnValues(t, false), nil)`
$DIR/core/services/vrf/delegate_test.go: `listener.HandleLog(ctx, log.NewLogBroadcast(tc.log, vuni.cid, nil))`
$DIR/core/services/vrf/delegate_test.go: `waitForChannel(t, added, time.Second, "request not added to the queue")`
$DIR/core/services/vrf/delegate_test.go: `listener.OnNewLongestChain(testutils.Context(t), &evmtypes.Head{Number: 16})`
$DIR/core/services/vrf/delegate_test.go: `waitForChannel(t, consumed, 2*time.Second, "did not mark consumed")`
$DIR/core/services/vrf/delegate_test.go: `waitForChannel(t, runComplete, 2*time.Second, "pipeline not complete")`
$DIR/core/services/vrf/delegate_test.go: `vuni.lb.On("WasAlreadyConsumed", mock.Anything, mock.Anything).Return(false, nil)`
$DIR/core/services/vrf/delegate_test.go: `vuni.lb.On("MarkConsumed", mock.Anything, mock.Anything, mock.Anything).Run(func(args mock.Arguments) {
consumed <- struct{}{}
}).Return(nil).Once()`
$DIR/core/services/vrf/delegate_test.go: `consumed <- struct{}{}`
$DIR/core/services/vrf/delegate_test.go: `copy(reqIDBytes[:], tc.reqID[:])`
$DIR/core/services/vrf/delegate_test.go: `listener.HandleLog(ctx, log.NewLogBroadcast(types.Log{
// Data has all the NON-indexed parameters
Data: bytes.Join([][]byte{reqIDBytes, // output
p.Output.Bytes(),
}, []byte{},
),
BlockNumber: 10,
TxHash: txHash,
Index: uint(i),
}, vuni.cid, &solidity_vrf_coordinator_interface.VRFCoordinatorRandomnessRequestFulfilled{RequestId: tc.reqID}))`
$DIR/core/services/vrf/delegate_test.go: `waitForChannel(t, consumed, 2*time.Second, "fulfillment log not marked consumed")`
$DIR/core/services/vrf/delegate_test.go: `vuni.lb.On("WasAlreadyConsumed", mock.Anything, mock.Anything).Return(false, nil)`
$DIR/core/services/vrf/delegate_test.go: `vuni.lb.On("MarkConsumed", mock.Anything, mock.Anything, mock.Anything).Run(func(args mock.Arguments) {
done <- struct{}{}
}).Return(nil).Once()`
$DIR/core/services/vrf/delegate_test.go: `done <- struct{}{}`
$DIR/core/services/vrf/delegate_test.go: `vuni.ec.On("CallContract", mock.Anything, mock.Anything, mock.Anything).Return(generateCallbackReturnValues(t, false), nil)`
$DIR/core/services/vrf/delegate_test.go: `listener.SetReqAdded(func() {
added <- struct{}{}
})`
$DIR/core/services/vrf/delegate_test.go: `added <- struct{}{}`
$DIR/core/services/vrf/delegate_test.go: `listener.HandleLog(ctx, log.NewLogBroadcast(types.Log{
// Data has all the NON-indexed parameters
Data: append(append(append(append(
evmutils.NewHash().Bytes(), // key hash
common.BigToHash(big.NewInt(42)).Bytes()...), // seed
evmutils.NewHash().Bytes()...), // sender
evmutils.NewHash().Bytes()...), // fee
evmutils.NewHash().Bytes()...), // requestID
// JobID is indexed, that's why it lives in the Topics.
Topics: []common.Hash{
solidity_cross_tests.VRFRandomnessRequestLogTopic(),
jb.ExternalIDEncodeBytesToTopic(), // jobID
},
Address: common.Address{},
BlockNumber: 10,
TxHash: common.Hash{},
TxIndex: 0,
BlockHash: common.Hash{},
Index: 0,
Removed: false,
}, vuni.cid, nil))`
$DIR/core/services/vrf/delegate_test.go: `waitForChannel(t, added, time.Second, "request not queued")`
$DIR/core/services/vrf/delegate_test.go: `listener.OnNewLongestChain(testutils.Context(t), &evmtypes.Head{Number: 16})`
$DIR/core/services/vrf/delegate_test.go: `waitForChannel(t, done, time.Second, "log not consumed")`
$DIR/core/services/vrf/delegate_test.go: `vuni.lb.On("WasAlreadyConsumed", mock.Anything, mock.Anything).Return(false, nil)`
$DIR/core/services/vrf/delegate_test.go: `vuni.lb.On("MarkConsumed", mock.Anything, mock.Anything, mock.Anything).Run(func(args mock.Arguments) {
done <- struct{}{}
}).Return(nil).Once()`
$DIR/core/services/vrf/delegate_test.go: `done <- struct{}{}`
$DIR/core/services/vrf/delegate_test.go: `vuni.ec.On("CallContract", mock.Anything, mock.Anything, mock.Anything).Return(generateCallbackReturnValues(t, true), nil)`
$DIR/core/services/vrf/delegate_test.go: `listener.SetReqAdded(func() {
added <- struct{}{}
})`
$DIR/core/services/vrf/delegate_test.go: `added <- struct{}{}`
$DIR/core/services/vrf/delegate_test.go: `listener.HandleLog(ctx, log.NewLogBroadcast(
types.Log{
// Data has all the NON-indexed parameters
Data: bytes.Join([][]byte{
vuni.vrfkey.PublicKey.MustHash().Bytes(), // key hash
common.BigToHash(big.NewInt(42)).Bytes(), // seed
evmutils.NewHash().Bytes(), // sender
evmutils.NewHash().Bytes(), // fee
evmutils.NewHash().Bytes()}, // requestID
[]byte{}),
// JobID is indexed, that's why it lives in the Topics.
Topics: []common.Hash{
solidity_cross_tests.VRFRandomnessRequestLogTopic(),
jb.ExternalIDEncodeBytesToTopic(), // jobID STRING
},
//TxHash: evmutils.NewHash().Bytes(),
BlockNumber: 10,
//BlockHash: evmutils.NewHash().Bytes(),
}, vuni.cid, nil))`
$DIR/core/services/vrf/delegate_test.go: `waitForChannel(t, added, time.Second, "request not queued")`
$DIR/core/services/vrf/delegate_test.go: `listener.OnNewLongestChain(testutils.Context(t), &evmtypes.Head{Number: 16})`
$DIR/core/services/vrf/delegate_test.go: `waitForChannel(t, done, time.Second, "log not consumed")`
$DIR/core/services/vrf/delegate_test.go: `t.Run("returns nil error if gasLanePrice not set in job spec", func(tt *testing.T) {
spec := `
type = "vrf"
schemaVersion = 1
minIncomingConfirmations = 10
publicKey = "0x79BE667EF9DCBBAC55A06295CE870B07029BFCDB2DCE28D959F2815B16F8179800"
coordinatorAddress = "0xB3b7874F13387D44a3398D298B075B7A3505D8d4"
requestTimeout = "168h" # 7 days
chunkSize = 25
backoffInitialDelay = "1m"
backoffMaxDelay = "2h"
observationSource = """
decode_log [type=ethabidecodelog
abi="RandomnessRequest(bytes32 keyHash,uint256 seed,bytes32 indexed jobID,address sender,uint256 fee,bytes32 requestID)"
data="$(jobRun.logData)"
topics="$(jobRun.logTopics)"]
vrf [type=vrf
publicKey="$(jobSpec.publicKey)"
requestBlockHash="$(jobRun.logBlockHash)"
requestBlockNumber="$(jobRun.logBlockNumber)"
topics="$(jobRun.logTopics)"]
encode_tx [type=ethabiencode
abi="fulfillRandomnessRequest(bytes proof)"
data="{\\"proof\\": $(vrf)}"]
submit_tx [type=ethtx to="%s"
data="$(encode_tx)"
txMeta="{\\"requestTxHash\\": $(jobRun.logTxHash),\\"requestID\\": $(decode_log.requestID),\\"jobID\\": $(jobSpec.databaseID)}"]
decode_log->vrf->encode_tx->submit_tx
"""
`
jb, err := vrfcommon.ValidatedVRFSpec(spec)
require.NoError(tt, err)
cfg := vrf_mocks.NewFeeConfig(t)
require.NoError(tt, vrf.CheckFromAddressMaxGasPrices(jb, cfg.PriceMaxKey))
})`
$DIR/core/services/vrf/delegate_test.go: `t.Run("returns nil error on valid gas lane <=> key specific gas price setting", func(tt *testing.T) {
var fromAddresses []string
for i := 0; i < 3; i++ {
fromAddresses = append(fromAddresses, testutils.NewAddress().Hex())
}
cfg := vrf_mocks.NewFeeConfig(t)
for _, a := range fromAddresses {
cfg.On("PriceMaxKey", common.HexToAddress(a)).Return(assets.GWei(100)).Once()
}
defer cfg.AssertExpectations(tt)
jb, err := vrfcommon.ValidatedVRFSpec(testspecs.GenerateVRFSpec(
testspecs.VRFSpecParams{
RequestedConfsDelay: 10,
FromAddresses: fromAddresses,
ChunkSize: 25,
BackoffInitialDelay: time.Minute,
BackoffMaxDelay: time.Hour,
GasLanePrice: assets.GWei(100),
}).
Toml())
require.NoError(t, err)
require.NoError(tt, vrf.CheckFromAddressMaxGasPrices(jb, cfg.PriceMaxKey))
})`
$DIR/core/services/vrf/delegate_test.go: `fromAddresses = append(fromAddresses, testutils.NewAddress().Hex())`
$DIR/core/services/vrf/delegate_test.go: `cfg.On("PriceMaxKey", common.HexToAddress(a)).Return(assets.GWei(100)).Once()`
$DIR/core/services/vrf/delegate_test.go: `fromAddresses = append(fromAddresses, testutils.NewAddress().Hex())`
$DIR/core/services/vrf/delegate_test.go: `cfg.On("PriceMaxKey", common.HexToAddress(fromAddresses[0])).Return(assets.GWei(100)).Once()`
$DIR/core/services/vrf/delegate_test.go: `cfg.On("PriceMaxKey", common.HexToAddress(fromAddresses[1])).Return(assets.GWei(100)).Once()`
$DIR/core/services/vrf/delegate_test.go: `cfg.On("PriceMaxKey", common.HexToAddress(fromAddresses[2])).Return(assets.GWei(50)).Once()`
$DIR/core/services/vrf/delegate_test.go: `t.Run("from addresses exist", func(t *testing.T) {
ctx := testutils.Context(t)
db := pgtest.NewSqlxDB(t)
lggr := logger.TestLogger(t)
ks := keystore.NewInMemory(db, utils.FastScryptParams, lggr)
require.NoError(t, ks.Unlock(ctx, testutils.Password))
var fromAddresses []string
for i := 0; i < 3; i++ {
k, err := ks.Eth().Create(testutils.Context(t), big.NewInt(1337))
assert.NoError(t, err)
fromAddresses = append(fromAddresses, k.Address.Hex())
}
jb, err := vrfcommon.ValidatedVRFSpec(testspecs.GenerateVRFSpec(
testspecs.VRFSpecParams{
RequestedConfsDelay: 10,
FromAddresses: fromAddresses,
ChunkSize: 25,
BackoffInitialDelay: time.Minute,
BackoffMaxDelay: time.Hour,
GasLanePrice: assets.GWei(100),
}).
Toml())
assert.NoError(t, err)
assert.NoError(t, vrf.CheckFromAddressesExist(testutils.Context(t), jb, ks.Eth()))
})`
$DIR/core/services/vrf/delegate_test.go: `fromAddresses = append(fromAddresses, k.Address.Hex())`
$DIR/core/services/vrf/delegate_test.go: `fromAddresses = append(fromAddresses, k.Address.Hex())`
$DIR/core/services/vrf/delegate_test.go: `fromAddresses = append(fromAddresses, testutils.NewAddress().Hex())`
$DIR/core/services/vrf/delegate_test.go: `t.Run("all max gas prices equal", func(tt *testing.T) {
fromAddresses := []string{
"0x498C2Dce1d3aEDE31A8c808c511C38a809e67684",
"0x253b01b9CaAfbB9dC138d7D8c3ACBCDd47144b4B",
"0xD94E6AD557277c6E3e163cefF90F52AB51A95143",
}
jb, err := vrfcommon.ValidatedVRFSpec(testspecs.GenerateVRFSpec(testspecs.VRFSpecParams{
RequestedConfsDelay: 10,
FromAddresses: fromAddresses,
ChunkSize: 25,
BackoffInitialDelay: time.Minute,
BackoffMaxDelay: time.Hour,
GasLanePrice: assets.GWei(100),
}).Toml())
require.NoError(tt, err)
cfg := vrf_mocks.NewFeeConfig(t)
for _, a := range fromAddresses {
cfg.On("PriceMaxKey", common.HexToAddress(a)).Return(assets.GWei(100))
}
defer cfg.AssertExpectations(tt)
assert.True(tt, vrf.FromAddressMaxGasPricesAllEqual(jb, cfg.PriceMaxKey))
})`
$DIR/core/services/vrf/delegate_test.go: `cfg.On("PriceMaxKey", common.HexToAddress(a)).Return(assets.GWei(100))`
$DIR/core/services/vrf/delegate_test.go: `cfg.On("PriceMaxKey", common.HexToAddress(a)).Return(assets.GWei(100))`
$DIR/core/services/vrf/delegate_test.go: `cfg.On("PriceMaxKey", common.HexToAddress(fromAddresses[len(fromAddresses)-1])).
Return(assets.GWei(200))`
$DIR/core/services/vrf/delegate_test.go: `err = vuni.jrm.CreateJob(ctx, &jb)`
$DIR/core/services/vrf/delegate_test.go: `_, err = vd.ServicesForSpec(testutils.Context(t), jb)`
$DIR/core/services/vrf/delegate_test.go: `.NewHash()`
$DIR/core/services/vrf/delegate_test.go: `.Bytes()`
$DIR/core/services/vrf/delegate_test.go: `.SetRespCount(reqIDBytes, 2)`
$DIR/core/services/vrf/delegate_test.go: `.NewPublicKeyFromHex(vuni.vrfkey.PublicKey.String())`
$DIR/core/services/vrf/delegate_test.go: `.vrfkey.PublicKey.String()`
$DIR/core/services/vrf/delegate_test.go: `.SetReqAdded(func() {
added <- struct{}{}
})`
$DIR/core/services/vrf/delegate_test.go: `.BigToHash(big.NewInt(42))`
$DIR/core/services/vrf/delegate_test.go: `.NewInt(42)`
$DIR/core/services/vrf/delegate_test.go: `.Bytes()`
$DIR/core/services/vrf/delegate_test.go: `.NewHash()`
$DIR/core/services/vrf/delegate_test.go: `.lb.On("WasAlreadyConsumed", mock.Anything, mock.Anything)`
$DIR/core/services/vrf/delegate_test.go: `.Return(false, nil)`
$DIR/core/services/vrf/delegate_test.go: `.Maybe()`
$DIR/core/services/vrf/delegate_test.go: `.lb.On("MarkConsumed", mock.Anything, mock.Anything, mock.Anything)`
$DIR/core/services/vrf/delegate_test.go: `.Return(nil)`
$DIR/core/services/vrf/delegate_test.go: `.Maybe()`
$DIR/core/services/vrf/delegate_test.go: `.ec.On("CallContract", mock.Anything, mock.Anything, mock.Anything)`
$DIR/core/services/vrf/delegate_test.go: `.Return(generateCallbackReturnValues(t, false), nil)`
$DIR/core/services/vrf/delegate_test.go: `.Maybe()`
$DIR/core/services/vrf/delegate_test.go: `.Context(t)`
$DIR/core/services/vrf/delegate_test.go: `.HandleLog(ctx, log.NewLogBroadcast(types.Log{
// Data has all the NON-indexed parameters
Data: bytes.Join([][]byte{pk.MustHash().Bytes(), // key hash
preSeed, // preSeed
evmutils.NewHash().Bytes(), // sender
evmutils.NewHash().Bytes(), // fee
reqID.Bytes()}, []byte{}, // requestID
),
// JobID is indexed, thats why it lives in the Topics.
Topics: []common.Hash{
solidity_cross_tests.VRFRandomnessRequestLogTopic(),
jb.ExternalIDEncodeStringToTopic(), // jobID
},
BlockNumber: 10,
TxHash: txHash,
}, vuni.cid, nil))`
$DIR/core/services/vrf/delegate_test.go: `.NewLogBroadcast(types.Log{
// Data has all the NON-indexed parameters
Data: bytes.Join([][]byte{pk.MustHash().Bytes(), // key hash
preSeed, // preSeed
evmutils.NewHash().Bytes(), // sender
evmutils.NewHash().Bytes(), // fee
reqID.Bytes()}, []byte{}, // requestID
),
// JobID is indexed, thats why it lives in the Topics.
Topics: []common.Hash{
solidity_cross_tests.VRFRandomnessRequestLogTopic(),
jb.ExternalIDEncodeStringToTopic(), // jobID
},
BlockNumber: 10,
TxHash: txHash,
}, vuni.cid, nil)`
$DIR/core/services/vrf/delegate_test.go: `.Join([][]byte{pk.MustHash().Bytes(), // key hash
preSeed, // preSeed
evmutils.NewHash().Bytes(), // sender
evmutils.NewHash().Bytes(), // fee
reqID.Bytes()}, []byte{}, // requestID
)`
$DIR/core/services/vrf/delegate_test.go: `.MustHash()`
$DIR/core/services/vrf/delegate_test.go: `.Bytes()`
$DIR/core/services/vrf/delegate_test.go: `.NewHash()`
$DIR/core/services/vrf/delegate_test.go: `.Bytes()`
$DIR/core/services/vrf/delegate_test.go: `.NewHash()`
$DIR/core/services/vrf/delegate_test.go: `.Bytes()`
$DIR/core/services/vrf/delegate_test.go: `.Bytes()`
$DIR/core/services/vrf/delegate_test.go: `.VRFRandomnessRequestLogTopic()`
$DIR/core/services/vrf/delegate_test.go: `.ExternalIDEncodeStringToTopic()`
$DIR/core/services/vrf/delegate_test.go: `.ReqsConfirmedAt()`
$DIR/core/services/vrf/delegate_test.go: `.NewHash()`
$DIR/core/services/vrf/delegate_test.go: `.NewHash()`
$DIR/core/services/vrf/delegate_test.go: `.NewHash()`
$DIR/core/services/vrf/delegate_test.go: `.vrfkey.PublicKey.String()`
$DIR/core/services/vrf/delegate_test.go: `.NewPublicKeyFromHex(keyID)`
$DIR/core/services/vrf/delegate_test.go: `.SetReqAdded(func() {
added <- struct{}{}
})`
$DIR/core/services/vrf/delegate_test.go: `.BigToHash(big.NewInt(42))`
$DIR/core/services/vrf/delegate_test.go: `.NewInt(42)`
$DIR/core/services/vrf/delegate_test.go: `.Bytes()`
$DIR/core/services/vrf/delegate_test.go: `.NewHash()`
$DIR/core/services/vrf/delegate_test.go: `.Join([][]byte{
pk.MustHash().Bytes(), // key hash
common.BigToHash(big.NewInt(42)).Bytes(), // seed
evmutils.NewHash().Bytes(), // sender
evmutils.NewHash().Bytes(), // fee
reqID1.Bytes()}, // requestID
[]byte{})`
$DIR/core/services/vrf/delegate_test.go: `.MustHash()`
$DIR/core/services/vrf/delegate_test.go: `.Bytes()`
$DIR/core/services/vrf/delegate_test.go: `.BigToHash(big.NewInt(42))`
$DIR/core/services/vrf/delegate_test.go: `.NewInt(42)`
$DIR/core/services/vrf/delegate_test.go: `.Bytes()`
$DIR/core/services/vrf/delegate_test.go: `.NewHash()`
$DIR/core/services/vrf/delegate_test.go: `.Bytes()`
$DIR/core/services/vrf/delegate_test.go: `.NewHash()`
$DIR/core/services/vrf/delegate_test.go: `.Bytes()`
$DIR/core/services/vrf/delegate_test.go: `.Bytes()`
$DIR/core/services/vrf/delegate_test.go: `.VRFRandomnessRequestLogTopic()`
$DIR/core/services/vrf/delegate_test.go: `.ExternalIDEncodeStringToTopic()`
$DIR/core/services/vrf/delegate_test.go: `.Join([][]byte{
pk.MustHash().Bytes(), // key hash
common.BigToHash(big.NewInt(42)).Bytes(), // seed
evmutils.NewHash().Bytes(), // sender
evmutils.NewHash().Bytes(), // fee
reqID2.Bytes()}, // requestID
[]byte{})`
$DIR/core/services/vrf/delegate_test.go: `.MustHash()`
$DIR/core/services/vrf/delegate_test.go: `.Bytes()`
$DIR/core/services/vrf/delegate_test.go: `.BigToHash(big.NewInt(42))`
$DIR/core/services/vrf/delegate_test.go: `.NewInt(42)`
$DIR/core/services/vrf/delegate_test.go: `.Bytes()`
$DIR/core/services/vrf/delegate_test.go: `.NewHash()`
$DIR/core/services/vrf/delegate_test.go: `.Bytes()`
$DIR/core/services/vrf/delegate_test.go: `.NewHash()`
$DIR/core/services/vrf/delegate_test.go: `.Bytes()`
$DIR/core/services/vrf/delegate_test.go: `.Bytes()`
$DIR/core/services/vrf/delegate_test.go: `.VRFRandomnessRequestLogTopic()`
$DIR/core/services/vrf/delegate_test.go: `.ExternalIDEncodeBytesToTopic()`
$DIR/core/services/vrf/delegate_test.go: `.pr.OnRunFinished(func(run *pipeline.Run) {
if run.State == pipeline.RunStatusCompleted {
runComplete <- struct{}{}
}
})`
$DIR/core/services/vrf/delegate_test.go: `.Context(t)`
$DIR/core/services/vrf/delegate_test.go: `.lb.On("WasAlreadyConsumed", mock.Anything, mock.Anything)`
$DIR/core/services/vrf/delegate_test.go: `.Return(false, nil)`
$DIR/core/services/vrf/delegate_test.go: `.lb.On("MarkConsumed", mock.Anything, mock.Anything, mock.Anything)`
$DIR/core/services/vrf/delegate_test.go: `.Run(func(args mock.Arguments) {
consumed <- struct{}{}
})`
$DIR/core/services/vrf/delegate_test.go: `.Return(nil)`
$DIR/core/services/vrf/delegate_test.go: `.Once()`
$DIR/core/services/vrf/delegate_test.go: `.ec.On("CallContract", mock.Anything, mock.Anything, mock.Anything)`
$DIR/core/services/vrf/delegate_test.go: `.Return(generateCallbackReturnValues(t, false), nil)`
$DIR/core/services/vrf/delegate_test.go: `.HandleLog(ctx, log.NewLogBroadcast(tc.log, vuni.cid, nil))`
$DIR/core/services/vrf/delegate_test.go: `.NewLogBroadcast(tc.log, vuni.cid, nil)`
$DIR/core/services/vrf/delegate_test.go: `.OnNewLongestChain(testutils.Context(t), &evmtypes.Head{Number: 16})`
$DIR/core/services/vrf/delegate_test.go: `.Context(t)`
$DIR/core/services/vrf/delegate_test.go: `.prm.GetAllRuns(ctx)`
$DIR/core/services/vrf/delegate_test.go: `.ks.VRF()`
$DIR/core/services/vrf/delegate_test.go: `.GenerateProof(keyID, evmutils.MustHash(string(bytes.Join([][]byte{preSeed, bh.Bytes()}, []byte{}))).Big())`
$DIR/core/services/vrf/delegate_test.go: `.MustHash(string(bytes.Join([][]byte{preSeed, bh.Bytes()}, []byte{})))`
$DIR/core/services/vrf/delegate_test.go: `.Join([][]byte{preSeed, bh.Bytes()}, []byte{})`
$DIR/core/services/vrf/delegate_test.go: `.Bytes()`
$DIR/core/services/vrf/delegate_test.go: `.Big()`
$DIR/core/services/vrf/delegate_test.go: `.lb.On("WasAlreadyConsumed", mock.Anything, mock.Anything)`
$DIR/core/services/vrf/delegate_test.go: `.Return(false, nil)`
$DIR/core/services/vrf/delegate_test.go: `.lb.On("MarkConsumed", mock.Anything, mock.Anything, mock.Anything)`
$DIR/core/services/vrf/delegate_test.go: `.Run(func(args mock.Arguments) {
consumed <- struct{}{}
})`
$DIR/core/services/vrf/delegate_test.go: `.Return(nil)`
$DIR/core/services/vrf/delegate_test.go: `.Once()`
$DIR/core/services/vrf/delegate_test.go: `.HandleLog(ctx, log.NewLogBroadcast(types.Log{
// Data has all the NON-indexed parameters
Data: bytes.Join([][]byte{reqIDBytes, // output
p.Output.Bytes(),
}, []byte{},
),
BlockNumber: 10,
TxHash: txHash,
Index: uint(i),
}, vuni.cid, &solidity_vrf_coordinator_interface.VRFCoordinatorRandomnessRequestFulfilled{RequestId: tc.reqID}))`
$DIR/core/services/vrf/delegate_test.go: `.NewLogBroadcast(types.Log{
// Data has all the NON-indexed parameters
Data: bytes.Join([][]byte{reqIDBytes, // output
p.Output.Bytes(),
}, []byte{},
),
BlockNumber: 10,
TxHash: txHash,
Index: uint(i),
}, vuni.cid, &solidity_vrf_coordinator_interface.VRFCoordinatorRandomnessRequestFulfilled{RequestId: tc.reqID})`
$DIR/core/services/vrf/delegate_test.go: `.Join([][]byte{reqIDBytes, // output
p.Output.Bytes(),
}, []byte{},
)`
$DIR/core/services/vrf/delegate_test.go: `.Output.Bytes()`
$DIR/core/services/vrf/delegate_test.go: `.lb.On("WasAlreadyConsumed", mock.Anything, mock.Anything)`
$DIR/core/services/vrf/delegate_test.go: `.Return(false, nil)`
$DIR/core/services/vrf/delegate_test.go: `.lb.On("MarkConsumed", mock.Anything, mock.Anything, mock.Anything)`
$DIR/core/services/vrf/delegate_test.go: `.Run(func(args mock.Arguments) {
done <- struct{}{}
})`
$DIR/core/services/vrf/delegate_test.go: `.Return(nil)`
$DIR/core/services/vrf/delegate_test.go: `.Once()`
$DIR/core/services/vrf/delegate_test.go: `.ec.On("CallContract", mock.Anything, mock.Anything, mock.Anything)`
$DIR/core/services/vrf/delegate_test.go: `.Return(generateCallbackReturnValues(t, false), nil)`
$DIR/core/services/vrf/delegate_test.go: `.SetReqAdded(func() {
added <- struct{}{}
})`
$DIR/core/services/vrf/delegate_test.go: `.Context(t)`
$DIR/core/services/vrf/delegate_test.go: `.HandleLog(ctx, log.NewLogBroadcast(types.Log{
// Data has all the NON-indexed parameters
Data: append(append(append(append(
evmutils.NewHash().Bytes(), // key hash
common.BigToHash(big.NewInt(42)).Bytes()...), // seed
evmutils.NewHash().Bytes()...), // sender
evmutils.NewHash().Bytes()...), // fee
evmutils.NewHash().Bytes()...), // requestID
// JobID is indexed, that's why it lives in the Topics.
Topics: []common.Hash{
solidity_cross_tests.VRFRandomnessRequestLogTopic(),
jb.ExternalIDEncodeBytesToTopic(), // jobID
},
Address: common.Address{},
BlockNumber: 10,
TxHash: common.Hash{},
TxIndex: 0,
BlockHash: common.Hash{},
Index: 0,
Removed: false,
}, vuni.cid, nil))`
$DIR/core/services/vrf/delegate_test.go: `.NewLogBroadcast(types.Log{
// Data has all the NON-indexed parameters
Data: append(append(append(append(
evmutils.NewHash().Bytes(), // key hash
common.BigToHash(big.NewInt(42)).Bytes()...), // seed
evmutils.NewHash().Bytes()...), // sender
evmutils.NewHash().Bytes()...), // fee
evmutils.NewHash().Bytes()...), // requestID
// JobID is indexed, that's why it lives in the Topics.
Topics: []common.Hash{
solidity_cross_tests.VRFRandomnessRequestLogTopic(),
jb.ExternalIDEncodeBytesToTopic(), // jobID
},
Address: common.Address{},
BlockNumber: 10,
TxHash: common.Hash{},
TxIndex: 0,
BlockHash: common.Hash{},
Index: 0,
Removed: false,
}, vuni.cid, nil)`
$DIR/core/services/vrf/delegate_test.go: `.NewHash()`
$DIR/core/services/vrf/delegate_test.go: `.Bytes()`
$DIR/core/services/vrf/delegate_test.go: `.BigToHash(big.NewInt(42))`
$DIR/core/services/vrf/delegate_test.go: `.NewInt(42)`
$DIR/core/services/vrf/delegate_test.go: `.Bytes()`
$DIR/core/services/vrf/delegate_test.go: `.NewHash()`
$DIR/core/services/vrf/delegate_test.go: `.Bytes()`
$DIR/core/services/vrf/delegate_test.go: `.NewHash()`
$DIR/core/services/vrf/delegate_test.go: `.Bytes()`
$DIR/core/services/vrf/delegate_test.go: `.NewHash()`
$DIR/core/services/vrf/delegate_test.go: `.Bytes()`
$DIR/core/services/vrf/delegate_test.go: `.VRFRandomnessRequestLogTopic()`
$DIR/core/services/vrf/delegate_test.go: `.ExternalIDEncodeBytesToTopic()`
$DIR/core/services/vrf/delegate_test.go: `.OnNewLongestChain(testutils.Context(t), &evmtypes.Head{Number: 16})`
$DIR/core/services/vrf/delegate_test.go: `.Context(t)`
$DIR/core/services/vrf/delegate_test.go: `.prm.GetAllRuns(ctx)`
$DIR/core/services/vrf/delegate_test.go: `.NewSqlxDB(t)`
$DIR/core/services/vrf/delegate_test.go: `.NewTxStore(db, logger.TestLogger(t))`
$DIR/core/services/vrf/delegate_test.go: `.TestLogger(t)`
$DIR/core/services/vrf/delegate_test.go: `.GetAllTxes(testutils.Context(t))`
$DIR/core/services/vrf/delegate_test.go: `.Context(t)`
$DIR/core/services/vrf/delegate_test.go: `.lb.On("WasAlreadyConsumed", mock.Anything, mock.Anything)`
$DIR/core/services/vrf/delegate_test.go: `.Return(false, nil)`
$DIR/core/services/vrf/delegate_test.go: `.lb.On("MarkConsumed", mock.Anything, mock.Anything, mock.Anything)`
$DIR/core/services/vrf/delegate_test.go: `.Run(func(args mock.Arguments) {
done <- struct{}{}
})`
$DIR/core/services/vrf/delegate_test.go: `.Return(nil)`
$DIR/core/services/vrf/delegate_test.go: `.Once()`
$DIR/core/services/vrf/delegate_test.go: `.ec.On("CallContract", mock.Anything, mock.Anything, mock.Anything)`
$DIR/core/services/vrf/delegate_test.go: `.Return(generateCallbackReturnValues(t, true), nil)`
$DIR/core/services/vrf/delegate_test.go: `.SetReqAdded(func() {
added <- struct{}{}
})`
$DIR/core/services/vrf/delegate_test.go: `.Context(t)`
$DIR/core/services/vrf/delegate_test.go: `.HandleLog(ctx, log.NewLogBroadcast(
types.Log{
// Data has all the NON-indexed parameters
Data: bytes.Join([][]byte{
vuni.vrfkey.PublicKey.MustHash().Bytes(), // key hash
common.BigToHash(big.NewInt(42)).Bytes(), // seed
evmutils.NewHash().Bytes(), // sender
evmutils.NewHash().Bytes(), // fee
evmutils.NewHash().Bytes()}, // requestID
[]byte{}),
// JobID is indexed, that's why it lives in the Topics.
Topics: []common.Hash{
solidity_cross_tests.VRFRandomnessRequestLogTopic(),
jb.ExternalIDEncodeBytesToTopic(), // jobID STRING
},
//TxHash: evmutils.NewHash().Bytes(),
BlockNumber: 10,
//BlockHash: evmutils.NewHash().Bytes(),
}, vuni.cid, nil))`
$DIR/core/services/vrf/delegate_test.go: `.NewLogBroadcast(
types.Log{
// Data has all the NON-indexed parameters
Data: bytes.Join([][]byte{
vuni.vrfkey.PublicKey.MustHash().Bytes(), // key hash
common.BigToHash(big.NewInt(42)).Bytes(), // seed
evmutils.NewHash().Bytes(), // sender
evmutils.NewHash().Bytes(), // fee
evmutils.NewHash().Bytes()}, // requestID
[]byte{}),
// JobID is indexed, that's why it lives in the Topics.
Topics: []common.Hash{
solidity_cross_tests.VRFRandomnessRequestLogTopic(),
jb.ExternalIDEncodeBytesToTopic(), // jobID STRING
},
//TxHash: evmutils.NewHash().Bytes(),
BlockNumber: 10,
//BlockHash: evmutils.NewHash().Bytes(),
}, vuni.cid, nil)`
$DIR/core/services/vrf/delegate_test.go: `.Join([][]byte{
vuni.vrfkey.PublicKey.MustHash().Bytes(), // key hash
common.BigToHash(big.NewInt(42)).Bytes(), // seed
evmutils.NewHash().Bytes(), // sender
evmutils.NewHash().Bytes(), // fee
evmutils.NewHash().Bytes()}, // requestID
[]byte{})`
$DIR/core/services/vrf/delegate_test.go: `.vrfkey.PublicKey.MustHash()`
$DIR/core/services/vrf/delegate_test.go: `.Bytes()`
$DIR/core/services/vrf/delegate_test.go: `.BigToHash(big.NewInt(42))`
$DIR/core/services/vrf/delegate_test.go: `.NewInt(42)`
$DIR/core/services/vrf/delegate_test.go: `.Bytes()`
$DIR/core/services/vrf/delegate_test.go: `.NewHash()`
$DIR/core/services/vrf/delegate_test.go: `.Bytes()`
$DIR/core/services/vrf/delegate_test.go: `.NewHash()`
$DIR/core/services/vrf/delegate_test.go: `.Bytes()`
$DIR/core/services/vrf/delegate_test.go: `.NewHash()`
$DIR/core/services/vrf/delegate_test.go: `.Bytes()`
$DIR/core/services/vrf/delegate_test.go: `.VRFRandomnessRequestLogTopic()`
$DIR/core/services/vrf/delegate_test.go: `.ExternalIDEncodeBytesToTopic()`
$DIR/core/services/vrf/delegate_test.go: `.OnNewLongestChain(testutils.Context(t), &evmtypes.Head{Number: 16})`
$DIR/core/services/vrf/delegate_test.go: `.Context(t)`
$DIR/core/services/vrf/delegate_test.go: `.prm.GetAllRuns(ctx)`
$DIR/core/services/vrf/delegate_test.go: `.Run("returns nil error if gasLanePrice not set in job spec", func(tt *testing.T) {
spec := `
type = "vrf"
schemaVersion = 1
minIncomingConfirmations = 10
publicKey = "0x79BE667EF9DCBBAC55A06295CE870B07029BFCDB2DCE28D959F2815B16F8179800"
coordinatorAddress = "0xB3b7874F13387D44a3398D298B075B7A3505D8d4"
requestTimeout = "168h" # 7 days
chunkSize = 25
backoffInitialDelay = "1m"
backoffMaxDelay = "2h"
observationSource = """
decode_log [type=ethabidecodelog
abi="RandomnessRequest(bytes32 keyHash,uint256 seed,bytes32 indexed jobID,address sender,uint256 fee,bytes32 requestID)"
data="$(jobRun.logData)"
topics="$(jobRun.logTopics)"]
vrf [type=vrf
publicKey="$(jobSpec.publicKey)"
requestBlockHash="$(jobRun.logBlockHash)"
requestBlockNumber="$(jobRun.logBlockNumber)"
topics="$(jobRun.logTopics)"]
encode_tx [type=ethabiencode
abi="fulfillRandomnessRequest(bytes proof)"
data="{\\"proof\\": $(vrf)}"]
submit_tx [type=ethtx to="%s"
data="$(encode_tx)"
txMeta="{\\"requestTxHash\\": $(jobRun.logTxHash),\\"requestID\\": $(decode_log.requestID),\\"jobID\\": $(jobSpec.databaseID)}"]
decode_log->vrf->encode_tx->submit_tx
"""
`
jb, err := vrfcommon.ValidatedVRFSpec(spec)
require.NoError(tt, err)
cfg := vrf_mocks.NewFeeConfig(t)
require.NoError(tt, vrf.CheckFromAddressMaxGasPrices(jb, cfg.PriceMaxKey))
})`
$DIR/core/services/vrf/delegate_test.go: `.ValidatedVRFSpec(spec)`
$DIR/core/services/vrf/delegate_test.go: `.NewFeeConfig(t)`
$DIR/core/services/vrf/delegate_test.go: `.Run("returns nil error on valid gas lane <=> key specific gas price setting", func(tt *testing.T) {
var fromAddresses []string
for i := 0; i < 3; i++ {
fromAddresses = append(fromAddresses, testutils.NewAddress().Hex())
}
cfg := vrf_mocks.NewFeeConfig(t)
for _, a := range fromAddresses {
cfg.On("PriceMaxKey", common.HexToAddress(a)).Return(assets.GWei(100)).Once()
}
defer cfg.AssertExpectations(tt)
jb, err := vrfcommon.ValidatedVRFSpec(testspecs.GenerateVRFSpec(
testspecs.VRFSpecParams{
RequestedConfsDelay: 10,
FromAddresses: fromAddresses,
ChunkSize: 25,
BackoffInitialDelay: time.Minute,
BackoffMaxDelay: time.Hour,
GasLanePrice: assets.GWei(100),
}).
Toml())
require.NoError(t, err)
require.NoError(tt, vrf.CheckFromAddressMaxGasPrices(jb, cfg.PriceMaxKey))
})`
$DIR/core/services/vrf/delegate_test.go: `.NewAddress()`
$DIR/core/services/vrf/delegate_test.go: `.Hex()`
$DIR/core/services/vrf/delegate_test.go: `.NewFeeConfig(t)`
$DIR/core/services/vrf/delegate_test.go: `.On("PriceMaxKey", common.HexToAddress(a))`
$DIR/core/services/vrf/delegate_test.go: `.HexToAddress(a)`
$DIR/core/services/vrf/delegate_test.go: `.Return(assets.GWei(100))`
$DIR/core/services/vrf/delegate_test.go: `.GWei(100)`
$DIR/core/services/vrf/delegate_test.go: `.Once()`
$DIR/core/services/vrf/delegate_test.go: `.AssertExpectations(tt)`
$DIR/core/services/vrf/delegate_test.go: `.ValidatedVRFSpec(testspecs.GenerateVRFSpec(
testspecs.VRFSpecParams{
RequestedConfsDelay: 10,
FromAddresses: fromAddresses,
ChunkSize: 25,
BackoffInitialDelay: time.Minute,
BackoffMaxDelay: time.Hour,
GasLanePrice: assets.GWei(100),
}).
Toml())`
$DIR/core/services/vrf/delegate_test.go: `.GenerateVRFSpec(
testspecs.VRFSpecParams{
RequestedConfsDelay: 10,
FromAddresses: fromAddresses,
ChunkSize: 25,
BackoffInitialDelay: time.Minute,
BackoffMaxDelay: time.Hour,
GasLanePrice: assets.GWei(100),
})`
$DIR/core/services/vrf/delegate_test.go: `.GWei(100)`
$DIR/core/services/vrf/delegate_test.go: `.
Toml()`
$DIR/core/services/vrf/delegate_test.go: `.NewAddress()`
$DIR/core/services/vrf/delegate_test.go: `.Hex()`
$DIR/core/services/vrf/delegate_test.go: `.NewFeeConfig(t)`
$DIR/core/services/vrf/delegate_test.go: `.On("PriceMaxKey", common.HexToAddress(fromAddresses[0]))`
$DIR/core/services/vrf/delegate_test.go: `.HexToAddress(fromAddresses[0])`
$DIR/core/services/vrf/delegate_test.go: `.Return(assets.GWei(100))`
$DIR/core/services/vrf/delegate_test.go: `.GWei(100)`
$DIR/core/services/vrf/delegate_test.go: `.Once()`
$DIR/core/services/vrf/delegate_test.go: `.On("PriceMaxKey", common.HexToAddress(fromAddresses[1]))`
$DIR/core/services/vrf/delegate_test.go: `.HexToAddress(fromAddresses[1])`
$DIR/core/services/vrf/delegate_test.go: `.Return(assets.GWei(100))`
$DIR/core/services/vrf/delegate_test.go: `.GWei(100)`
$DIR/core/services/vrf/delegate_test.go: `.Once()`
$DIR/core/services/vrf/delegate_test.go: `.On("PriceMaxKey", common.HexToAddress(fromAddresses[2]))`
$DIR/core/services/vrf/delegate_test.go: `.HexToAddress(fromAddresses[2])`
$DIR/core/services/vrf/delegate_test.go: `.Return(assets.GWei(50))`
$DIR/core/services/vrf/delegate_test.go: `.GWei(50)`
$DIR/core/services/vrf/delegate_test.go: `.Once()`
$DIR/core/services/vrf/delegate_test.go: `.AssertExpectations(tt)`
$DIR/core/services/vrf/delegate_test.go: `.ValidatedVRFSpec(testspecs.GenerateVRFSpec(
testspecs.VRFSpecParams{
RequestedConfsDelay: 10,
FromAddresses: fromAddresses,
ChunkSize: 25,
BackoffInitialDelay: time.Minute,
BackoffMaxDelay: time.Hour,
GasLanePrice: assets.GWei(100),
}).
Toml())`
$DIR/core/services/vrf/delegate_test.go: `.GenerateVRFSpec(
testspecs.VRFSpecParams{
RequestedConfsDelay: 10,
FromAddresses: fromAddresses,
ChunkSize: 25,
BackoffInitialDelay: time.Minute,
BackoffMaxDelay: time.Hour,
GasLanePrice: assets.GWei(100),
})`
$DIR/core/services/vrf/delegate_test.go: `.GWei(100)`
$DIR/core/services/vrf/delegate_test.go: `.
Toml()`
$DIR/core/services/vrf/delegate_test.go: `.Run("from addresses exist", func(t *testing.T) {
ctx := testutils.Context(t)
db := pgtest.NewSqlxDB(t)
lggr := logger.TestLogger(t)
ks := keystore.NewInMemory(db, utils.FastScryptParams, lggr)
require.NoError(t, ks.Unlock(ctx, testutils.Password))
var fromAddresses []string
for i := 0; i < 3; i++ {
k, err := ks.Eth().Create(testutils.Context(t), big.NewInt(1337))
assert.NoError(t, err)
fromAddresses = append(fromAddresses, k.Address.Hex())
}
jb, err := vrfcommon.ValidatedVRFSpec(testspecs.GenerateVRFSpec(
testspecs.VRFSpecParams{
RequestedConfsDelay: 10,
FromAddresses: fromAddresses,
ChunkSize: 25,
BackoffInitialDelay: time.Minute,
BackoffMaxDelay: time.Hour,
GasLanePrice: assets.GWei(100),
}).
Toml())
assert.NoError(t, err)
assert.NoError(t, vrf.CheckFromAddressesExist(testutils.Context(t), jb, ks.Eth()))
})`
$DIR/core/services/vrf/delegate_test.go: `.Context(t)`
$DIR/core/services/vrf/delegate_test.go: `.NewSqlxDB(t)`
$DIR/core/services/vrf/delegate_test.go: `.TestLogger(t)`
$DIR/core/services/vrf/delegate_test.go: `.NewInMemory(db, utils.FastScryptParams, lggr)`
$DIR/core/services/vrf/delegate_test.go: `.Eth()`
$DIR/core/services/vrf/delegate_test.go: `.Create(testutils.Context(t), big.NewInt(1337))`
$DIR/core/services/vrf/delegate_test.go: `.Context(t)`
$DIR/core/services/vrf/delegate_test.go: `.NewInt(1337)`
$DIR/core/services/vrf/delegate_test.go: `.Address.Hex()`
$DIR/core/services/vrf/delegate_test.go: `.ValidatedVRFSpec(testspecs.GenerateVRFSpec(
testspecs.VRFSpecParams{
RequestedConfsDelay: 10,
FromAddresses: fromAddresses,
ChunkSize: 25,
BackoffInitialDelay: time.Minute,
BackoffMaxDelay: time.Hour,
GasLanePrice: assets.GWei(100),
}).
Toml())`
$DIR/core/services/vrf/delegate_test.go: `.GenerateVRFSpec(
testspecs.VRFSpecParams{
RequestedConfsDelay: 10,
FromAddresses: fromAddresses,
ChunkSize: 25,
BackoffInitialDelay: time.Minute,
BackoffMaxDelay: time.Hour,
GasLanePrice: assets.GWei(100),
})`
$DIR/core/services/vrf/delegate_test.go: `.GWei(100)`
$DIR/core/services/vrf/delegate_test.go: `.
Toml()`
$DIR/core/services/vrf/delegate_test.go: `.Context(t)`
$DIR/core/services/vrf/delegate_test.go: `.NewSqlxDB(t)`
$DIR/core/services/vrf/delegate_test.go: `.TestLogger(t)`
$DIR/core/services/vrf/delegate_test.go: `.NewInMemory(db, utils.FastScryptParams, lggr)`
$DIR/core/services/vrf/delegate_test.go: `.Eth()`
$DIR/core/services/vrf/delegate_test.go: `.Create(testutils.Context(t), big.NewInt(1337))`
$DIR/core/services/vrf/delegate_test.go: `.Context(t)`
$DIR/core/services/vrf/delegate_test.go: `.NewInt(1337)`
$DIR/core/services/vrf/delegate_test.go: `.Address.Hex()`
$DIR/core/services/vrf/delegate_test.go: `.NewAddress()`
$DIR/core/services/vrf/delegate_test.go: `.Hex()`
$DIR/core/services/vrf/delegate_test.go: `.ValidatedVRFSpec(testspecs.GenerateVRFSpec(
testspecs.VRFSpecParams{
RequestedConfsDelay: 10,
FromAddresses: fromAddresses,
ChunkSize: 25,
BackoffInitialDelay: time.Minute,
BackoffMaxDelay: time.Hour,
GasLanePrice: assets.GWei(100),
}).
Toml())`
$DIR/core/services/vrf/delegate_test.go: `.GenerateVRFSpec(
testspecs.VRFSpecParams{
RequestedConfsDelay: 10,
FromAddresses: fromAddresses,
ChunkSize: 25,
BackoffInitialDelay: time.Minute,
BackoffMaxDelay: time.Hour,
GasLanePrice: assets.GWei(100),
})`
$DIR/core/services/vrf/delegate_test.go: `.GWei(100)`
$DIR/core/services/vrf/delegate_test.go: `.
Toml()`
$DIR/core/services/vrf/delegate_test.go: `.Run("all max gas prices equal", func(tt *testing.T) {
fromAddresses := []string{
"0x498C2Dce1d3aEDE31A8c808c511C38a809e67684",
"0x253b01b9CaAfbB9dC138d7D8c3ACBCDd47144b4B",
"0xD94E6AD557277c6E3e163cefF90F52AB51A95143",
}
jb, err := vrfcommon.ValidatedVRFSpec(testspecs.GenerateVRFSpec(testspecs.VRFSpecParams{
RequestedConfsDelay: 10,
FromAddresses: fromAddresses,
ChunkSize: 25,
BackoffInitialDelay: time.Minute,
BackoffMaxDelay: time.Hour,
GasLanePrice: assets.GWei(100),
}).Toml())
require.NoError(tt, err)
cfg := vrf_mocks.NewFeeConfig(t)
for _, a := range fromAddresses {
cfg.On("PriceMaxKey", common.HexToAddress(a)).Return(assets.GWei(100))
}
defer cfg.AssertExpectations(tt)
assert.True(tt, vrf.FromAddressMaxGasPricesAllEqual(jb, cfg.PriceMaxKey))
})`
$DIR/core/services/vrf/delegate_test.go: `.ValidatedVRFSpec(testspecs.GenerateVRFSpec(testspecs.VRFSpecParams{
RequestedConfsDelay: 10,
FromAddresses: fromAddresses,
ChunkSize: 25,
BackoffInitialDelay: time.Minute,
BackoffMaxDelay: time.Hour,
GasLanePrice: assets.GWei(100),
}).Toml())`
$DIR/core/services/vrf/delegate_test.go: `.GenerateVRFSpec(testspecs.VRFSpecParams{
RequestedConfsDelay: 10,
FromAddresses: fromAddresses,
ChunkSize: 25,
BackoffInitialDelay: time.Minute,
BackoffMaxDelay: time.Hour,
GasLanePrice: assets.GWei(100),
})`
$DIR/core/services/vrf/delegate_test.go: `.GWei(100)`
$DIR/core/services/vrf/delegate_test.go: `.Toml()`
$DIR/core/services/vrf/delegate_test.go: `.NewFeeConfig(t)`
$DIR/core/services/vrf/delegate_test.go: `.On("PriceMaxKey", common.HexToAddress(a))`
$DIR/core/services/vrf/delegate_test.go: `.HexToAddress(a)`
$DIR/core/services/vrf/delegate_test.go: `.Return(assets.GWei(100))`
$DIR/core/services/vrf/delegate_test.go: `.GWei(100)`
$DIR/core/services/vrf/delegate_test.go: `.AssertExpectations(tt)`
$DIR/core/services/vrf/delegate_test.go: `.ValidatedVRFSpec(testspecs.GenerateVRFSpec(testspecs.VRFSpecParams{
RequestedConfsDelay: 10,
FromAddresses: fromAddresses,
ChunkSize: 25,
BackoffInitialDelay: time.Minute,
BackoffMaxDelay: time.Hour,
GasLanePrice: assets.GWei(100),
}).Toml())`
$DIR/core/services/vrf/delegate_test.go: `.GenerateVRFSpec(testspecs.VRFSpecParams{
RequestedConfsDelay: 10,
FromAddresses: fromAddresses,
ChunkSize: 25,
BackoffInitialDelay: time.Minute,
BackoffMaxDelay: time.Hour,
GasLanePrice: assets.GWei(100),
})`
$DIR/core/services/vrf/delegate_test.go: `.GWei(100)`
$DIR/core/services/vrf/delegate_test.go: `.Toml()`
$DIR/core/services/vrf/delegate_test.go: `.NewFeeConfig(t)`
$DIR/core/services/vrf/delegate_test.go: `.On("PriceMaxKey", common.HexToAddress(a))`
$DIR/core/services/vrf/delegate_test.go: `.HexToAddress(a)`
$DIR/core/services/vrf/delegate_test.go: `.Return(assets.GWei(100))`
$DIR/core/services/vrf/delegate_test.go: `.GWei(100)`
$DIR/core/services/vrf/delegate_test.go: `.On("PriceMaxKey", common.HexToAddress(fromAddresses[len(fromAddresses)-1]))`
$DIR/core/services/vrf/delegate_test.go: `.HexToAddress(fromAddresses[len(fromAddresses)-1])`
$DIR/core/services/vrf/delegate_test.go: `.
Return(assets.GWei(200))`
$DIR/core/services/vrf/delegate_test.go: `.GWei(200)`
$DIR/core/services/vrf/delegate_test.go: `.AssertExpectations(tt)`
$DIR/core/services/vrf/delegate_test.go: `.NewSqlxDB(t)`
$DIR/core/services/vrf/delegate_test.go: `.NewTestGeneralConfig(t)`
$DIR/core/services/vrf/delegate_test.go: `.Run(t, mailboxtest.NewMonitor(t))`
$DIR/core/services/vrf/delegate_test.go: `.NewMonitor(t)`
$DIR/core/services/vrf/delegate_test.go: `.NewDelegate(
db,
vuni.ks,
vuni.pr,
vuni.prm,
vuni.legacyChains,
logger.TestLogger(t),
mailMon)`
$DIR/core/services/vrf/delegate_test.go: `.TestLogger(t)`
$DIR/core/services/vrf/delegate_test.go: `.legacyChains.Get(testutils.FixtureChainID.String())`
$DIR/core/services/vrf/delegate_test.go: `.FixtureChainID.String()`
$DIR/core/services/vrf/delegate_test.go: `.GenerateVRFSpec(testspecs.VRFSpecParams{
VRFVersion: vrfcommon.V2Plus,
PublicKey: vuni.vrfkey.PublicKey.String(),
FromAddresses: []string{vuni.submitter.Hex()},
GasLanePrice: chain.Config().EVM().GasEstimator().PriceMax(),
})`
$DIR/core/services/vrf/delegate_test.go: `.vrfkey.PublicKey.String()`
$DIR/core/services/vrf/delegate_test.go: `.submitter.Hex()`
$DIR/core/services/vrf/delegate_test.go: `.Config()`
$DIR/core/services/vrf/delegate_test.go: `.EVM()`
$DIR/core/services/vrf/delegate_test.go: `.GasEstimator()`
$DIR/core/services/vrf/delegate_test.go: `.PriceMax()`
$DIR/core/services/vrf/delegate_test.go: `.Toml()`
$DIR/core/services/vrf/delegate_test.go: `.ValidatedVRFSpec(toml)`
$DIR/core/services/vrf/delegate_test.go: `.Context(t)`
$DIR/core/services/vrf/delegate_test.go: `.jrm.CreateJob(ctx, &jb)`
$DIR/core/services/vrf/delegate_test.go: `.ServicesForSpec(testutils.Context(t), jb)`
$DIR/core/services/vrf/delegate_test.go: `.Context(t)`
$DIR/core/services/vrf/proof/proof_response_test.go: `backend.Commit()`
$DIR/core/services/vrf/proof/proof_response_test.go: `_, err = verifier.RandomValueFromVRFProof(nil, proof[:])`
$DIR/core/services/vrf/proof/proof_response_test.go: `.Context(t)`
$DIR/core/services/vrf/proof/proof_response_test.go: `.NewSqlxDB(t)`
$DIR/core/services/vrf/proof/proof_response_test.go: `.NewKeyStore(t, db)`
$DIR/core/services/vrf/proof/proof_response_test.go: `.NewInt(1)`
$DIR/core/services/vrf/proof/proof_response_test.go: `.TestXXXSeedData(t, preSeed, blockHash, blockNum)`
$DIR/core/services/vrf/proof/proof_response_test.go: `.GenerateProofResponse(keyStore.VRF(), key.ID(), s)`
$DIR/core/services/vrf/proof/proof_response_test.go: `.VRF()`
$DIR/core/services/vrf/proof/proof_response_test.go: `.ID()`
$DIR/core/services/vrf/proof/proof_response_test.go: `.UnmarshalProofResponse(proofResponse)`
$DIR/core/services/vrf/proof/proof_response_test.go: `.CryptoProof(s)`
$DIR/core/services/vrf/proof/proof_response_test.go: `.MarshalForSolidityVerifier(&actualProof)`
$DIR/core/services/vrf/proof/proof_response_test.go: `.GenerateKey()`
$DIR/core/services/vrf/proof/proof_response_test.go: `.NewKeyedTransactorWithChainID(ethereumKey, big.NewInt(1337))`
$DIR/core/services/vrf/proof/proof_response_test.go: `.NewInt(1337)`
$DIR/core/services/vrf/proof/proof_response_test.go: `.Ether(100)`
$DIR/core/services/vrf/proof/proof_response_test.go: `.ToInt()`
$DIR/core/services/vrf/proof/proof_response_test.go: `.NewSimulatedBackend(t, genesisData, gasLimit)`
$DIR/core/services/vrf/proof/proof_response_test.go: `.DeployVRFTestHelper(auth, backend)`
$DIR/core/services/vrf/proof/proof_response_test.go: `.Commit()`
$DIR/core/services/vrf/proof/proof_response_test.go: `.RandomValueFromVRFProof(nil, proof[:])`
$DIR/core/services/vrf/solidity_cross_tests/vrf_consumer_base_test.go: `.MustGenerateRandomKey(t)`
$DIR/core/services/vrf/solidity_cross_tests/vrf_consumer_base_test.go: `.NewVRFCoordinatorUniverse(t, key)`
$DIR/core/services/vrf/solidity_cross_tests/vrf_consumer_base_test.go: `.ConsumerContract.RawFulfillRandomness(coordinator.Neil,
keyHash, big.NewInt(0).SetBytes([]byte("a bad random value")))`
$DIR/core/services/vrf/solidity_cross_tests/vrf_consumer_base_test.go: `.NewInt(0)`
$DIR/core/services/vrf/solidity_cross_tests/vrf_consumer_base_test.go: `.SetBytes([]byte("a bad random value"))`
$DIR/core/services/vrf/solidity_cross_tests/vrf_coordinator_interface_test.go: `.RawRandomnessRequestLogToRandomnessRequestLog(&raw)`
$DIR/core/services/vrf/solidity_cross_tests/vrf_coordinator_interface_test.go: `.RawData()`
$DIR/core/services/vrf/solidity_cross_tests/vrf_coordinator_interface_test.go: `.ParseRandomnessRequestLog(types.Log{
Data: rawLog,
Topics: []common.Hash{solidity_cross_tests.VRFRandomnessRequestLogTopic(), jobID},
})`
$DIR/core/services/vrf/solidity_cross_tests/vrf_coordinator_interface_test.go: `.VRFRandomnessRequestLogTopic()`
$DIR/core/services/vrf/solidity_cross_tests/vrf_coordinator_interface_test.go: `.Equal(*nR)`
$DIR/core/services/vrf/solidity_cross_tests/vrf_coordinator_solidity_crosscheck_test.go: `logCount++`
$DIR/core/services/vrf/solidity_cross_tests/vrf_coordinator_solidity_crosscheck_test.go: `copy(jobID[:], []byte("exactly 32 characters in length."))`
$DIR/core/services/vrf/solidity_cross_tests/vrf_coordinator_solidity_crosscheck_test.go: `fulfillRandomnessRequest(t, coordinator, *log)`
$DIR/core/services/vrf/solidity_cross_tests/vrf_coordinator_solidity_crosscheck_test.go: `coordinator.Backend.Commit()`
$DIR/core/services/vrf/solidity_cross_tests/vrf_coordinator_solidity_crosscheck_test.go: `_, err = coordinator.RootContract.Withdraw(coordinator.Neil, peteThePunter, fee)`
$DIR/core/services/vrf/solidity_cross_tests/vrf_coordinator_solidity_crosscheck_test.go: `.HexToHash("0x01")`
$DIR/core/services/vrf/solidity_cross_tests/vrf_coordinator_solidity_crosscheck_test.go: `.MustGenerateRandomKey(t)`
$DIR/core/services/vrf/solidity_cross_tests/vrf_coordinator_solidity_crosscheck_test.go: `.NewVRFCoordinatorUniverse(t, key)`
$DIR/core/services/vrf/solidity_cross_tests/vrf_coordinator_solidity_crosscheck_test.go: `.NewInt(1)`
$DIR/core/services/vrf/solidity_cross_tests/vrf_coordinator_solidity_crosscheck_test.go: `.MakeRequestId(nil, keyHash, seed)`
$DIR/core/services/vrf/solidity_cross_tests/vrf_coordinator_solidity_crosscheck_test.go: `.Hash(solidityRequestID)`
$DIR/core/services/vrf/solidity_cross_tests/vrf_coordinator_solidity_crosscheck_test.go: `.ComputedRequestID()`
$DIR/core/services/vrf/solidity_cross_tests/vrf_coordinator_solidity_crosscheck_test.go: `.MustGenerateRandomKey(t)`
$DIR/core/services/vrf/solidity_cross_tests/vrf_coordinator_solidity_crosscheck_test.go: `.NewVRFCoordinatorUniverse(t, key)`
$DIR/core/services/vrf/solidity_cross_tests/vrf_coordinator_solidity_crosscheck_test.go: `.RootContract.FilterNewServiceAgreement(nil)`
$DIR/core/services/vrf/solidity_cross_tests/vrf_coordinator_solidity_crosscheck_test.go: `.Next()`
$DIR/core/services/vrf/solidity_cross_tests/vrf_coordinator_solidity_crosscheck_test.go: `.RootContract.ServiceAgreements(nil, keyHash)`
$DIR/core/services/vrf/solidity_cross_tests/vrf_coordinator_solidity_crosscheck_test.go: `.Cmp(serviceAgreement.Fee)`
$DIR/core/services/vrf/solidity_cross_tests/vrf_coordinator_solidity_crosscheck_test.go: `.MustGenerateRandomKey(t)`
$DIR/core/services/vrf/solidity_cross_tests/vrf_coordinator_solidity_crosscheck_test.go: `.NewVRFCoordinatorUniverse(t, key)`
$DIR/core/services/vrf/solidity_cross_tests/vrf_coordinator_solidity_crosscheck_test.go: `.RootContract.RegisterProvingKey(
coordinator.Ned, vrfFee, coordinator.Neil.From, pair(secp256k1.Coordinates(publicKey)), jobID)`
$DIR/core/services/vrf/solidity_cross_tests/vrf_coordinator_solidity_crosscheck_test.go: `.Coordinates(publicKey)`
$DIR/core/services/vrf/solidity_cross_tests/vrf_coordinator_solidity_crosscheck_test.go: `.MustGenerateRandomKey(t)`
$DIR/core/services/vrf/solidity_cross_tests/vrf_coordinator_solidity_crosscheck_test.go: `.NewVRFCoordinatorUniverseWithV08Consumer(t, key)`
$DIR/core/services/vrf/solidity_cross_tests/vrf_coordinator_solidity_crosscheck_test.go: `.BytesToHash(keyHash_[:])`
$DIR/core/services/vrf/solidity_cross_tests/vrf_coordinator_solidity_crosscheck_test.go: `.BytesToHash(jobID_[:])`
$DIR/core/services/vrf/solidity_cross_tests/vrf_coordinator_solidity_crosscheck_test.go: `.RequestIDBase.MakeVRFInputSeed(nil, keyHash, hardcodedSeed, coord.ConsumerContractAddress, big.NewInt(0))`
$DIR/core/services/vrf/solidity_cross_tests/vrf_coordinator_solidity_crosscheck_test.go: `.NewInt(0)`
$DIR/core/services/vrf/solidity_cross_tests/vrf_coordinator_solidity_crosscheck_test.go: `.RequestIDBaseV08.MakeVRFInputSeed(nil, keyHash, hardcodedSeed, coord.ConsumerContractAddressV08, big.NewInt(0))`
$DIR/core/services/vrf/solidity_cross_tests/vrf_coordinator_solidity_crosscheck_test.go: `.NewInt(0)`
$DIR/core/services/vrf/solidity_cross_tests/vrf_coordinator_solidity_crosscheck_test.go: `.rr(t, coord, keyHash, fee)`
$DIR/core/services/vrf/solidity_cross_tests/vrf_coordinator_solidity_crosscheck_test.go: `.NewInt(0)`
$DIR/core/services/vrf/solidity_cross_tests/vrf_coordinator_solidity_crosscheck_test.go: `.ms()`
$DIR/core/services/vrf/solidity_cross_tests/vrf_coordinator_solidity_crosscheck_test.go: `.MustHash(string(append(append(append(
keyHash[:],
common.BigToHash(hardcodedSeed).Bytes()...),
common.BytesToHash(tc.consumerAddress.Bytes()).Bytes()...),
common.BigToHash(nonce).Bytes()...)))`
$DIR/core/services/vrf/solidity_cross_tests/vrf_coordinator_solidity_crosscheck_test.go: `.BigToHash(hardcodedSeed)`
$DIR/core/services/vrf/solidity_cross_tests/vrf_coordinator_solidity_crosscheck_test.go: `.Bytes()`
$DIR/core/services/vrf/solidity_cross_tests/vrf_coordinator_solidity_crosscheck_test.go: `.BytesToHash(tc.consumerAddress.Bytes())`
$DIR/core/services/vrf/solidity_cross_tests/vrf_coordinator_solidity_crosscheck_test.go: `.consumerAddress.Bytes()`
$DIR/core/services/vrf/solidity_cross_tests/vrf_coordinator_solidity_crosscheck_test.go: `.Bytes()`
$DIR/core/services/vrf/solidity_cross_tests/vrf_coordinator_solidity_crosscheck_test.go: `.BigToHash(nonce)`
$DIR/core/services/vrf/solidity_cross_tests/vrf_coordinator_solidity_crosscheck_test.go: `.Bytes()`
$DIR/core/services/vrf/solidity_cross_tests/vrf_coordinator_solidity_crosscheck_test.go: `.ParseRandomnessRequestLog(log.Raw.Raw)`
$DIR/core/services/vrf/solidity_cross_tests/vrf_coordinator_solidity_crosscheck_test.go: `.MustGenerateRandomKey(t)`
$DIR/core/services/vrf/solidity_cross_tests/vrf_coordinator_solidity_crosscheck_test.go: `.NewVRFCoordinatorUniverse(t, key)`
$DIR/core/services/vrf/solidity_cross_tests/vrf_coordinator_solidity_crosscheck_test.go: `.ConsumerContract.RandomnessOutput(nil)`
$DIR/core/services/vrf/solidity_cross_tests/vrf_coordinator_solidity_crosscheck_test.go: `.ConsumerContract.RequestId(nil)`
$DIR/core/services/vrf/solidity_cross_tests/vrf_coordinator_solidity_crosscheck_test.go: `.RootContract.WithdrawableTokens(
nil, coordinator.Neil.From)`
$DIR/core/services/vrf/solidity_cross_tests/vrf_coordinator_solidity_crosscheck_test.go: `.Cmp(fee)`
$DIR/core/services/vrf/solidity_cross_tests/vrf_coordinator_solidity_crosscheck_test.go: `.MustGenerateRandomKey(t)`
$DIR/core/services/vrf/solidity_cross_tests/vrf_coordinator_solidity_crosscheck_test.go: `.NewVRFCoordinatorUniverse(t, key)`
$DIR/core/services/vrf/solidity_cross_tests/vrf_coordinator_solidity_crosscheck_test.go: `.NewInt(4)`
$DIR/core/services/vrf/solidity_cross_tests/vrf_coordinator_solidity_crosscheck_test.go: `.HexToAddress("0xdeadfa11deadfa11deadfa11deadfa11deadfa11")`
$DIR/core/services/vrf/solidity_cross_tests/vrf_coordinator_solidity_crosscheck_test.go: `.RootContract.Withdraw(coordinator.Neil, peteThePunter, payment)`
$DIR/core/services/vrf/solidity_cross_tests/vrf_coordinator_solidity_crosscheck_test.go: `.Backend.Commit()`
$DIR/core/services/vrf/solidity_cross_tests/vrf_coordinator_solidity_crosscheck_test.go: `.LinkContract.BalanceOf(nil, peteThePunter)`
$DIR/core/services/vrf/solidity_cross_tests/vrf_coordinator_solidity_crosscheck_test.go: `.RootContract.WithdrawableTokens(
nil, coordinator.Neil.From)`
$DIR/core/services/vrf/solidity_cross_tests/vrf_coordinator_solidity_crosscheck_test.go: `.RootContract.Withdraw(coordinator.Neil, peteThePunter, fee)`
$DIR/core/services/vrf/solidity_cross_tests/vrf_fulfillment_cost_test.go: `coordinator.Backend.Commit()`
$DIR/core/services/vrf/solidity_cross_tests/vrf_fulfillment_cost_test.go: `.MustGenerateRandomKey(t)`
$DIR/core/services/vrf/solidity_cross_tests/vrf_fulfillment_cost_test.go: `.NewVRFCoordinatorUniverse(t, key)`
$DIR/core/services/vrf/solidity_cross_tests/vrf_fulfillment_cost_test.go: `.BigToSeed(log.Seed)`
$DIR/core/services/vrf/solidity_cross_tests/vrf_fulfillment_cost_test.go: `.FinalSeed(s)`
$DIR/core/services/vrf/solidity_cross_tests/vrf_fulfillment_cost_test.go: `.GenerateProofWithNonce(seed, big.NewInt(1) /* nonce */)`
$DIR/core/services/vrf/solidity_cross_tests/vrf_fulfillment_cost_test.go: `.NewInt(1)`
$DIR/core/services/vrf/solidity_cross_tests/vrf_fulfillment_cost_test.go: `.GenerateProofResponseFromProof(proof, s)`
$DIR/core/services/vrf/solidity_cross_tests/vrf_fulfillment_cost_test.go: `.Backend.Commit()`
$DIR/core/services/vrf/solidity_cross_tests/vrf_randomness_output_cost_test.go: `.New(mrand.NewSource(10))`
$DIR/core/services/vrf/solidity_cross_tests/vrf_randomness_output_cost_test.go: `.NewSource(10)`
$DIR/core/services/vrf/solidity_cross_tests/vrf_randomness_output_cost_test.go: `.ToInt(sk)`
$DIR/core/services/vrf/solidity_cross_tests/vrf_randomness_output_cost_test.go: `.MustNewV2XXXTestingOnly(skNum)`
$DIR/core/services/vrf/solidity_cross_tests/vrf_randomness_output_cost_test.go: `.GenerateProofWithNonce(randomSeed, secp256k1.ToInt(nonce))`
$DIR/core/services/vrf/solidity_cross_tests/vrf_randomness_output_cost_test.go: `.ToInt(nonce)`
$DIR/core/services/vrf/solidity_cross_tests/vrf_randomness_output_cost_test.go: `.MarshalForSolidityVerifier(&proof)`
$DIR/core/services/vrf/solidity_cross_tests/vrf_request_cost_test.go: `.MustGenerateRandomKey(t)`
$DIR/core/services/vrf/solidity_cross_tests/vrf_request_cost_test.go: `.NewVRFCoordinatorUniverse(t, key)`
$DIR/core/services/vrf/solidity_cross_tests/vrf_request_cost_test.go: `.BytesToHash(keyHash_[:])`
$DIR/core/services/vrf/solidity_cross_tests/vrf_solidity_crosscheck_test.go: `_, err = deployVRFTestHelper(t).LinearCombination(nil, big.NewInt(0).Add(
cNum, big.NewInt(1)), p1Pair, cp1Pair, sNum, p2Pair, sp2Pair, zInv)`
$DIR/core/services/vrf/solidity_cross_tests/vrf_solidity_crosscheck_test.go: `_, err = deployVRFTestHelper(t).LinearCombination(nil, cNum, p1Pair,
cp1Pair, big.NewInt(0).Add(sNum, big.NewInt(1)), p2Pair, sp2Pair, zInv)`
$DIR/core/services/vrf/solidity_cross_tests/vrf_solidity_crosscheck_test.go: `mproof[corruptionTargetByte]++`
$DIR/core/services/vrf/solidity_cross_tests/vrf_solidity_crosscheck_test.go: `_, err = deployVRFTestHelper(t).RandomValueFromVRFProof(nil, mproof[:])`
$DIR/core/services/vrf/solidity_cross_tests/vrf_solidity_crosscheck_test.go: `.New(mrand.NewSource(11))`
$DIR/core/services/vrf/solidity_cross_tests/vrf_solidity_crosscheck_test.go: `.NewSource(11)`
$DIR/core/services/vrf/solidity_cross_tests/vrf_solidity_crosscheck_test.go: `.Coordinates(p)`
$DIR/core/services/vrf/solidity_cross_tests/vrf_solidity_crosscheck_test.go: `.Coordinates(q)`
$DIR/core/services/vrf/solidity_cross_tests/vrf_solidity_crosscheck_test.go: `.ProjectiveECAdd(p, q)`
$DIR/core/services/vrf/solidity_cross_tests/vrf_solidity_crosscheck_test.go: `.ProjectiveECAdd(
nil, px, py, qx, qy)`
$DIR/core/services/vrf/solidity_cross_tests/vrf_solidity_crosscheck_test.go: `.New(mrand.NewSource(0))`
$DIR/core/services/vrf/solidity_cross_tests/vrf_solidity_crosscheck_test.go: `.NewSource(0)`
$DIR/core/services/vrf/solidity_cross_tests/vrf_solidity_crosscheck_test.go: `.BigModExp(nil, base, exponent)`
$DIR/core/services/vrf/solidity_cross_tests/vrf_solidity_crosscheck_test.go: `.NewInt(0)`
$DIR/core/services/vrf/solidity_cross_tests/vrf_solidity_crosscheck_test.go: `.Exp(base, exponent, vrfkey.FieldSize)`
$DIR/core/services/vrf/solidity_cross_tests/vrf_solidity_crosscheck_test.go: `.New(mrand.NewSource(1))`
$DIR/core/services/vrf/solidity_cross_tests/vrf_solidity_crosscheck_test.go: `.NewSource(1)`
$DIR/core/services/vrf/solidity_cross_tests/vrf_solidity_crosscheck_test.go: `.SquareRoot(nil, maybeSquare)`
$DIR/core/services/vrf/solidity_cross_tests/vrf_solidity_crosscheck_test.go: `.SquareRoot(maybeSquare)`
$DIR/core/services/vrf/solidity_cross_tests/vrf_solidity_crosscheck_test.go: `.New(mrand.NewSource(2))`
$DIR/core/services/vrf/solidity_cross_tests/vrf_solidity_crosscheck_test.go: `.NewSource(2)`
$DIR/core/services/vrf/solidity_cross_tests/vrf_solidity_crosscheck_test.go: `.YSquared(nil, x)`
$DIR/core/services/vrf/solidity_cross_tests/vrf_solidity_crosscheck_test.go: `.New(mrand.NewSource(3))`
$DIR/core/services/vrf/solidity_cross_tests/vrf_solidity_crosscheck_test.go: `.NewSource(3)`
$DIR/core/services/vrf/solidity_cross_tests/vrf_solidity_crosscheck_test.go: `.Read(msg)`
$DIR/core/services/vrf/solidity_cross_tests/vrf_solidity_crosscheck_test.go: `.FieldHash(nil, msg)`
$DIR/core/services/vrf/solidity_cross_tests/vrf_solidity_crosscheck_test.go: `.FieldHash(msg)`
$DIR/core/services/vrf/solidity_cross_tests/vrf_solidity_crosscheck_test.go: `.New(mrand.NewSource(4))`
$DIR/core/services/vrf/solidity_cross_tests/vrf_solidity_crosscheck_test.go: `.NewSource(4)`
$DIR/core/services/vrf/solidity_cross_tests/vrf_solidity_crosscheck_test.go: `.HashToCurve(nil, pubKeyCoords, input)`
$DIR/core/services/vrf/solidity_cross_tests/vrf_solidity_crosscheck_test.go: `.SetCoordinates(cKey.X, cKey.Y)`
$DIR/core/services/vrf/solidity_cross_tests/vrf_solidity_crosscheck_test.go: `.HashToCurve(pubKeyPoint, input, func(*big.Int) {})`
$DIR/core/services/vrf/solidity_cross_tests/vrf_solidity_crosscheck_test.go: `.New(mrand.NewSource(5))`
$DIR/core/services/vrf/solidity_cross_tests/vrf_solidity_crosscheck_test.go: `.NewSource(5)`
$DIR/core/services/vrf/solidity_cross_tests/vrf_solidity_crosscheck_test.go: `.Coordinates(p1)`
$DIR/core/services/vrf/solidity_cross_tests/vrf_solidity_crosscheck_test.go: `.Coordinates(p2)`
$DIR/core/services/vrf/solidity_cross_tests/vrf_solidity_crosscheck_test.go: `.ProjectiveECAdd(
nil, p1x, p1y, p2x, p2y)`
$DIR/core/services/vrf/solidity_cross_tests/vrf_solidity_crosscheck_test.go: `.ProjectiveECAdd(p1, p2)`
$DIR/core/services/vrf/solidity_cross_tests/vrf_solidity_crosscheck_test.go: `.NewInt(1)`
$DIR/core/services/vrf/solidity_cross_tests/vrf_solidity_crosscheck_test.go: `.ModInverse(psz, vrfkey.FieldSize)`
$DIR/core/services/vrf/solidity_cross_tests/vrf_solidity_crosscheck_test.go: `.AffineECAdd(
nil, pair(p1x, p1y), pair(p2x, p2y), zInv)`
$DIR/core/services/vrf/solidity_cross_tests/vrf_solidity_crosscheck_test.go: `.New(mrand.NewSource(6))`
$DIR/core/services/vrf/solidity_cross_tests/vrf_solidity_crosscheck_test.go: `.NewSource(6)`
$DIR/core/services/vrf/solidity_cross_tests/vrf_solidity_crosscheck_test.go: `.Coordinates(p)`
$DIR/core/services/vrf/solidity_cross_tests/vrf_solidity_crosscheck_test.go: `.Point()`
$DIR/core/services/vrf/solidity_cross_tests/vrf_solidity_crosscheck_test.go: `.Mul(s, p)`
$DIR/core/services/vrf/solidity_cross_tests/vrf_solidity_crosscheck_test.go: `.EcmulVerify(nil, pxy, secp256k1.ToInt(s),
product)`
$DIR/core/services/vrf/solidity_cross_tests/vrf_solidity_crosscheck_test.go: `.ToInt(s)`
$DIR/core/services/vrf/solidity_cross_tests/vrf_solidity_crosscheck_test.go: `.EcmulVerify(nil, pxy,
big.NewInt(0).Add(secp256k1.ToInt(s), big.NewInt(1)), product)`
$DIR/core/services/vrf/solidity_cross_tests/vrf_solidity_crosscheck_test.go: `.NewInt(0)`
$DIR/core/services/vrf/solidity_cross_tests/vrf_solidity_crosscheck_test.go: `.Add(secp256k1.ToInt(s), big.NewInt(1))`
$DIR/core/services/vrf/solidity_cross_tests/vrf_solidity_crosscheck_test.go: `.ToInt(s)`
$DIR/core/services/vrf/solidity_cross_tests/vrf_solidity_crosscheck_test.go: `.NewInt(1)`
$DIR/core/services/vrf/solidity_cross_tests/vrf_solidity_crosscheck_test.go: `.New(mrand.NewSource(7))`
$DIR/core/services/vrf/solidity_cross_tests/vrf_solidity_crosscheck_test.go: `.NewSource(7)`
$DIR/core/services/vrf/solidity_cross_tests/vrf_solidity_crosscheck_test.go: `.Point()`
$DIR/core/services/vrf/solidity_cross_tests/vrf_solidity_crosscheck_test.go: `.Add(
(&secp256k1.Secp256k1{}).Point().Mul(c, p),
(&secp256k1.Secp256k1{}).Point().Mul(s, vrfkey.Generator))`
$DIR/core/services/vrf/solidity_cross_tests/vrf_solidity_crosscheck_test.go: `.Point()`
$DIR/core/services/vrf/solidity_cross_tests/vrf_solidity_crosscheck_test.go: `.Mul(c, p)`
$DIR/core/services/vrf/solidity_cross_tests/vrf_solidity_crosscheck_test.go: `.Point()`
$DIR/core/services/vrf/solidity_cross_tests/vrf_solidity_crosscheck_test.go: `.Mul(s, vrfkey.Generator)`
$DIR/core/services/vrf/solidity_cross_tests/vrf_solidity_crosscheck_test.go: `.EthereumAddress(expectedPoint)`
$DIR/core/services/vrf/solidity_cross_tests/vrf_solidity_crosscheck_test.go: `.VerifyLinearCombinationWithGenerator(nil,
secp256k1.ToInt(c), pPair, secp256k1.ToInt(s), expectedAddress)`
$DIR/core/services/vrf/solidity_cross_tests/vrf_solidity_crosscheck_test.go: `.ToInt(c)`
$DIR/core/services/vrf/solidity_cross_tests/vrf_solidity_crosscheck_test.go: `.ToInt(s)`
$DIR/core/services/vrf/solidity_cross_tests/vrf_solidity_crosscheck_test.go: `.VerifyLinearCombinationWithGenerator(nil,
big.NewInt(0).Add(secp256k1.ToInt(c), big.NewInt(1)), pPair,
secp256k1.ToInt(s), expectedAddress)`
$DIR/core/services/vrf/solidity_cross_tests/vrf_solidity_crosscheck_test.go: `.NewInt(0)`
$DIR/core/services/vrf/solidity_cross_tests/vrf_solidity_crosscheck_test.go: `.Add(secp256k1.ToInt(c), big.NewInt(1))`
$DIR/core/services/vrf/solidity_cross_tests/vrf_solidity_crosscheck_test.go: `.ToInt(c)`
$DIR/core/services/vrf/solidity_cross_tests/vrf_solidity_crosscheck_test.go: `.NewInt(1)`
$DIR/core/services/vrf/solidity_cross_tests/vrf_solidity_crosscheck_test.go: `.ToInt(s)`
$DIR/core/services/vrf/solidity_cross_tests/vrf_solidity_crosscheck_test.go: `.New(mrand.NewSource(8))`
$DIR/core/services/vrf/solidity_cross_tests/vrf_solidity_crosscheck_test.go: `.NewSource(8)`
$DIR/core/services/vrf/solidity_cross_tests/vrf_solidity_crosscheck_test.go: `.ToInt(c)`
$DIR/core/services/vrf/solidity_cross_tests/vrf_solidity_crosscheck_test.go: `.ToInt(s)`
$DIR/core/services/vrf/solidity_cross_tests/vrf_solidity_crosscheck_test.go: `.Point()`
$DIR/core/services/vrf/solidity_cross_tests/vrf_solidity_crosscheck_test.go: `.Mul(c, p1)`
$DIR/core/services/vrf/solidity_cross_tests/vrf_solidity_crosscheck_test.go: `.Point()`
$DIR/core/services/vrf/solidity_cross_tests/vrf_solidity_crosscheck_test.go: `.Mul(s, p2)`
$DIR/core/services/vrf/solidity_cross_tests/vrf_solidity_crosscheck_test.go: `.Point()`
$DIR/core/services/vrf/solidity_cross_tests/vrf_solidity_crosscheck_test.go: `.Add(cp1, sp2)`
$DIR/core/services/vrf/solidity_cross_tests/vrf_solidity_crosscheck_test.go: `.ProjectiveECAdd(cp1, sp2)`
$DIR/core/services/vrf/solidity_cross_tests/vrf_solidity_crosscheck_test.go: `.NewInt(0)`
$DIR/core/services/vrf/solidity_cross_tests/vrf_solidity_crosscheck_test.go: `.ModInverse(z, vrfkey.FieldSize)`
$DIR/core/services/vrf/solidity_cross_tests/vrf_solidity_crosscheck_test.go: `.LinearCombination(nil, cNum, p1Pair,
cp1Pair, sNum, p2Pair, sp2Pair, zInv)`
$DIR/core/services/vrf/solidity_cross_tests/vrf_solidity_crosscheck_test.go: `.LinearCombination(nil, big.NewInt(0).Add(
cNum, big.NewInt(1)), p1Pair, cp1Pair, sNum, p2Pair, sp2Pair, zInv)`
$DIR/core/services/vrf/solidity_cross_tests/vrf_solidity_crosscheck_test.go: `.NewInt(0)`
$DIR/core/services/vrf/solidity_cross_tests/vrf_solidity_crosscheck_test.go: `.Add(
cNum, big.NewInt(1))`
$DIR/core/services/vrf/solidity_cross_tests/vrf_solidity_crosscheck_test.go: `.NewInt(1)`
$DIR/core/services/vrf/solidity_cross_tests/vrf_solidity_crosscheck_test.go: `.LinearCombination(nil, cNum, p1Pair,
cp1Pair, big.NewInt(0).Add(sNum, big.NewInt(1)), p2Pair, sp2Pair, zInv)`
$DIR/core/services/vrf/solidity_cross_tests/vrf_solidity_crosscheck_test.go: `.NewInt(0)`
$DIR/core/services/vrf/solidity_cross_tests/vrf_solidity_crosscheck_test.go: `.Add(sNum, big.NewInt(1))`
$DIR/core/services/vrf/solidity_cross_tests/vrf_solidity_crosscheck_test.go: `.NewInt(1)`
$DIR/core/services/vrf/solidity_cross_tests/vrf_solidity_crosscheck_test.go: `.New(mrand.NewSource(9))`
$DIR/core/services/vrf/solidity_cross_tests/vrf_solidity_crosscheck_test.go: `.NewSource(9)`
$DIR/core/services/vrf/solidity_cross_tests/vrf_solidity_crosscheck_test.go: `.ScalarFromCurvePoints(hash, pk, gamma, uWitness, v)`
$DIR/core/services/vrf/solidity_cross_tests/vrf_solidity_crosscheck_test.go: `.ScalarFromCurvePoints(nil, hashPair, pkPair,
gammaPair, uWitness, vPair)`
$DIR/core/services/vrf/solidity_cross_tests/vrf_solidity_crosscheck_test.go: `.New(mrand.NewSource(10))`
$DIR/core/services/vrf/solidity_cross_tests/vrf_solidity_crosscheck_test.go: `.NewSource(10)`
$DIR/core/services/vrf/solidity_cross_tests/vrf_solidity_crosscheck_test.go: `.ToInt(sk)`
$DIR/core/services/vrf/solidity_cross_tests/vrf_solidity_crosscheck_test.go: `.MustNewV2XXXTestingOnly(skNum)`
$DIR/core/services/vrf/solidity_cross_tests/vrf_solidity_crosscheck_test.go: `.GenerateProofWithNonce(randomSeed, secp256k1.ToInt(nonce))`
$DIR/core/services/vrf/solidity_cross_tests/vrf_solidity_crosscheck_test.go: `.ToInt(nonce)`
$DIR/core/services/vrf/solidity_cross_tests/vrf_solidity_crosscheck_test.go: `.MarshalForSolidityVerifier(&proof)`
$DIR/core/services/vrf/solidity_cross_tests/vrf_solidity_crosscheck_test.go: `.RandomValueFromVRFProof(nil, mproof[:])`
$DIR/core/services/vrf/solidity_cross_tests/vrf_solidity_crosscheck_test.go: `.Int63n(int64(len(mproof)))`
$DIR/core/services/vrf/solidity_cross_tests/vrf_solidity_crosscheck_test.go: `.RandomValueFromVRFProof(nil, mproof[:])`
$DIR/core/services/vrf/solidity_cross_tests/vrf_v08_solidity_crosscheck_test.go: `_, err = verifier.IsOnCurve(nil,
[2]*big.Int{secp256k1.FieldSize, big.NewInt(10)})`
$DIR/core/services/vrf/solidity_cross_tests/vrf_v08_solidity_crosscheck_test.go: `_, err = verifier.IsOnCurve(nil,
[2]*big.Int{big.NewInt(10), big.NewInt(0).Sub(secp256k1.FieldSize, big.NewInt(1))})`
$DIR/core/services/vrf/solidity_cross_tests/vrf_v08_solidity_crosscheck_test.go: `_, err = verifier.IsOnCurve(nil,
[2]*big.Int{big.NewInt(0).Sub(secp256k1.FieldSize, big.NewInt(1)), big.NewInt(10)})`
$DIR/core/services/vrf/solidity_cross_tests/vrf_v08_solidity_crosscheck_test.go: `_, err = deployVRFV08TestHelper(t).LinearCombination(nil, big.NewInt(0).Add(
cNum, big.NewInt(1)), p1Pair, cp1Pair, sNum, p2Pair, sp2Pair, zInv)`
$DIR/core/services/vrf/solidity_cross_tests/vrf_v08_solidity_crosscheck_test.go: `_, err = deployVRFV08TestHelper(t).LinearCombination(nil, cNum, p1Pair,
cp1Pair, big.NewInt(0).Add(sNum, big.NewInt(1)), p2Pair, sp2Pair, zInv)`
$DIR/core/services/vrf/solidity_cross_tests/vrf_v08_solidity_crosscheck_test.go: `.IsOnCurve(nil,
[2]*big.Int{big.NewInt(10), secp256k1.FieldSize})`
$DIR/core/services/vrf/solidity_cross_tests/vrf_v08_solidity_crosscheck_test.go: `.NewInt(10)`
$DIR/core/services/vrf/solidity_cross_tests/vrf_v08_solidity_crosscheck_test.go: `.IsOnCurve(nil,
[2]*big.Int{secp256k1.FieldSize, big.NewInt(10)})`
$DIR/core/services/vrf/solidity_cross_tests/vrf_v08_solidity_crosscheck_test.go: `.NewInt(10)`
$DIR/core/services/vrf/solidity_cross_tests/vrf_v08_solidity_crosscheck_test.go: `.IsOnCurve(nil,
[2]*big.Int{big.NewInt(10), big.NewInt(0).Sub(secp256k1.FieldSize, big.NewInt(1))})`
$DIR/core/services/vrf/solidity_cross_tests/vrf_v08_solidity_crosscheck_test.go: `.NewInt(10)`
$DIR/core/services/vrf/solidity_cross_tests/vrf_v08_solidity_crosscheck_test.go: `.NewInt(0)`
$DIR/core/services/vrf/solidity_cross_tests/vrf_v08_solidity_crosscheck_test.go: `.Sub(secp256k1.FieldSize, big.NewInt(1))`
$DIR/core/services/vrf/solidity_cross_tests/vrf_v08_solidity_crosscheck_test.go: `.NewInt(1)`
$DIR/core/services/vrf/solidity_cross_tests/vrf_v08_solidity_crosscheck_test.go: `.IsOnCurve(nil,
[2]*big.Int{big.NewInt(0).Sub(secp256k1.FieldSize, big.NewInt(1)), big.NewInt(10)})`
$DIR/core/services/vrf/solidity_cross_tests/vrf_v08_solidity_crosscheck_test.go: `.NewInt(0)`
$DIR/core/services/vrf/solidity_cross_tests/vrf_v08_solidity_crosscheck_test.go: `.Sub(secp256k1.FieldSize, big.NewInt(1))`
$DIR/core/services/vrf/solidity_cross_tests/vrf_v08_solidity_crosscheck_test.go: `.NewInt(1)`
$DIR/core/services/vrf/solidity_cross_tests/vrf_v08_solidity_crosscheck_test.go: `.NewInt(10)`
$DIR/core/services/vrf/solidity_cross_tests/vrf_v08_solidity_crosscheck_test.go: `.New(mrand.NewSource(11))`
$DIR/core/services/vrf/solidity_cross_tests/vrf_v08_solidity_crosscheck_test.go: `.NewSource(11)`
$DIR/core/services/vrf/solidity_cross_tests/vrf_v08_solidity_crosscheck_test.go: `.Coordinates(p)`
$DIR/core/services/vrf/solidity_cross_tests/vrf_v08_solidity_crosscheck_test.go: `.Coordinates(q)`
$DIR/core/services/vrf/solidity_cross_tests/vrf_v08_solidity_crosscheck_test.go: `.ProjectiveECAdd(p, q)`
$DIR/core/services/vrf/solidity_cross_tests/vrf_v08_solidity_crosscheck_test.go: `.ProjectiveECAdd(
nil, px, py, qx, qy)`
$DIR/core/services/vrf/solidity_cross_tests/vrf_v08_solidity_crosscheck_test.go: `.New(mrand.NewSource(0))`
$DIR/core/services/vrf/solidity_cross_tests/vrf_v08_solidity_crosscheck_test.go: `.NewSource(0)`
$DIR/core/services/vrf/solidity_cross_tests/vrf_v08_solidity_crosscheck_test.go: `.BigModExp(nil, base, exponent)`
$DIR/core/services/vrf/solidity_cross_tests/vrf_v08_solidity_crosscheck_test.go: `.NewInt(0)`
$DIR/core/services/vrf/solidity_cross_tests/vrf_v08_solidity_crosscheck_test.go: `.Exp(base, exponent, vrfkey.FieldSize)`
$DIR/core/services/vrf/solidity_cross_tests/vrf_v08_solidity_crosscheck_test.go: `.New(mrand.NewSource(1))`
$DIR/core/services/vrf/solidity_cross_tests/vrf_v08_solidity_crosscheck_test.go: `.NewSource(1)`
$DIR/core/services/vrf/solidity_cross_tests/vrf_v08_solidity_crosscheck_test.go: `.SquareRoot(nil, maybeSquare)`
$DIR/core/services/vrf/solidity_cross_tests/vrf_v08_solidity_crosscheck_test.go: `.SquareRoot(maybeSquare)`
$DIR/core/services/vrf/solidity_cross_tests/vrf_v08_solidity_crosscheck_test.go: `.New(mrand.NewSource(2))`
$DIR/core/services/vrf/solidity_cross_tests/vrf_v08_solidity_crosscheck_test.go: `.NewSource(2)`
$DIR/core/services/vrf/solidity_cross_tests/vrf_v08_solidity_crosscheck_test.go: `.YSquared(nil, x)`
$DIR/core/services/vrf/solidity_cross_tests/vrf_v08_solidity_crosscheck_test.go: `.New(mrand.NewSource(3))`
$DIR/core/services/vrf/solidity_cross_tests/vrf_v08_solidity_crosscheck_test.go: `.NewSource(3)`
$DIR/core/services/vrf/solidity_cross_tests/vrf_v08_solidity_crosscheck_test.go: `.Read(msg)`
$DIR/core/services/vrf/solidity_cross_tests/vrf_v08_solidity_crosscheck_test.go: `.FieldHash(nil, msg)`
$DIR/core/services/vrf/solidity_cross_tests/vrf_v08_solidity_crosscheck_test.go: `.FieldHash(msg)`
$DIR/core/services/vrf/solidity_cross_tests/vrf_v08_solidity_crosscheck_test.go: `.New(mrand.NewSource(4))`
$DIR/core/services/vrf/solidity_cross_tests/vrf_v08_solidity_crosscheck_test.go: `.NewSource(4)`
$DIR/core/services/vrf/solidity_cross_tests/vrf_v08_solidity_crosscheck_test.go: `.HashToCurve(nil, pubKeyCoords, input)`
$DIR/core/services/vrf/solidity_cross_tests/vrf_v08_solidity_crosscheck_test.go: `.SetCoordinates(cKey.X, cKey.Y)`
$DIR/core/services/vrf/solidity_cross_tests/vrf_v08_solidity_crosscheck_test.go: `.HashToCurve(pubKeyPoint, input, func(*big.Int) {})`
$DIR/core/services/vrf/solidity_cross_tests/vrf_v08_solidity_crosscheck_test.go: `.New(mrand.NewSource(5))`
$DIR/core/services/vrf/solidity_cross_tests/vrf_v08_solidity_crosscheck_test.go: `.NewSource(5)`
$DIR/core/services/vrf/solidity_cross_tests/vrf_v08_solidity_crosscheck_test.go: `.Coordinates(p1)`
$DIR/core/services/vrf/solidity_cross_tests/vrf_v08_solidity_crosscheck_test.go: `.Coordinates(p2)`
$DIR/core/services/vrf/solidity_cross_tests/vrf_v08_solidity_crosscheck_test.go: `.ProjectiveECAdd(
nil, p1x, p1y, p2x, p2y)`
$DIR/core/services/vrf/solidity_cross_tests/vrf_v08_solidity_crosscheck_test.go: `.ProjectiveECAdd(p1, p2)`
$DIR/core/services/vrf/solidity_cross_tests/vrf_v08_solidity_crosscheck_test.go: `.NewInt(1)`
$DIR/core/services/vrf/solidity_cross_tests/vrf_v08_solidity_crosscheck_test.go: `.ModInverse(psz, vrfkey.FieldSize)`
$DIR/core/services/vrf/solidity_cross_tests/vrf_v08_solidity_crosscheck_test.go: `.AffineECAdd(
nil, pair(p1x, p1y), pair(p2x, p2y), zInv)`
$DIR/core/services/vrf/solidity_cross_tests/vrf_v08_solidity_crosscheck_test.go: `.New(mrand.NewSource(6))`
$DIR/core/services/vrf/solidity_cross_tests/vrf_v08_solidity_crosscheck_test.go: `.NewSource(6)`
$DIR/core/services/vrf/solidity_cross_tests/vrf_v08_solidity_crosscheck_test.go: `.Coordinates(p)`
$DIR/core/services/vrf/solidity_cross_tests/vrf_v08_solidity_crosscheck_test.go: `.Point()`
$DIR/core/services/vrf/solidity_cross_tests/vrf_v08_solidity_crosscheck_test.go: `.Mul(s, p)`
$DIR/core/services/vrf/solidity_cross_tests/vrf_v08_solidity_crosscheck_test.go: `.EcmulVerify(nil, pxy, secp256k1.ToInt(s),
product)`
$DIR/core/services/vrf/solidity_cross_tests/vrf_v08_solidity_crosscheck_test.go: `.ToInt(s)`
$DIR/core/services/vrf/solidity_cross_tests/vrf_v08_solidity_crosscheck_test.go: `.EcmulVerify(nil, pxy,
big.NewInt(0).Add(secp256k1.ToInt(s), big.NewInt(1)), product)`
$DIR/core/services/vrf/solidity_cross_tests/vrf_v08_solidity_crosscheck_test.go: `.NewInt(0)`
$DIR/core/services/vrf/solidity_cross_tests/vrf_v08_solidity_crosscheck_test.go: `.Add(secp256k1.ToInt(s), big.NewInt(1))`
$DIR/core/services/vrf/solidity_cross_tests/vrf_v08_solidity_crosscheck_test.go: `.ToInt(s)`
$DIR/core/services/vrf/solidity_cross_tests/vrf_v08_solidity_crosscheck_test.go: `.NewInt(1)`
$DIR/core/services/vrf/solidity_cross_tests/vrf_v08_solidity_crosscheck_test.go: `.New(mrand.NewSource(7))`
$DIR/core/services/vrf/solidity_cross_tests/vrf_v08_solidity_crosscheck_test.go: `.NewSource(7)`
$DIR/core/services/vrf/solidity_cross_tests/vrf_v08_solidity_crosscheck_test.go: `.Point()`
$DIR/core/services/vrf/solidity_cross_tests/vrf_v08_solidity_crosscheck_test.go: `.Add(
(&secp256k1.Secp256k1{}).Point().Mul(c, p),
(&secp256k1.Secp256k1{}).Point().Mul(s, vrfkey.Generator))`
$DIR/core/services/vrf/solidity_cross_tests/vrf_v08_solidity_crosscheck_test.go: `.Point()`
$DIR/core/services/vrf/solidity_cross_tests/vrf_v08_solidity_crosscheck_test.go: `.Mul(c, p)`
$DIR/core/services/vrf/solidity_cross_tests/vrf_v08_solidity_crosscheck_test.go: `.Point()`
$DIR/core/services/vrf/solidity_cross_tests/vrf_v08_solidity_crosscheck_test.go: `.Mul(s, vrfkey.Generator)`
$DIR/core/services/vrf/solidity_cross_tests/vrf_v08_solidity_crosscheck_test.go: `.EthereumAddress(expectedPoint)`
$DIR/core/services/vrf/solidity_cross_tests/vrf_v08_solidity_crosscheck_test.go: `.VerifyLinearCombinationWithGenerator(nil,
secp256k1.ToInt(c), pPair, secp256k1.ToInt(s), expectedAddress)`
$DIR/core/services/vrf/solidity_cross_tests/vrf_v08_solidity_crosscheck_test.go: `.ToInt(c)`
$DIR/core/services/vrf/solidity_cross_tests/vrf_v08_solidity_crosscheck_test.go: `.ToInt(s)`
$DIR/core/services/vrf/solidity_cross_tests/vrf_v08_solidity_crosscheck_test.go: `.VerifyLinearCombinationWithGenerator(nil,
big.NewInt(0).Add(secp256k1.ToInt(c), big.NewInt(1)), pPair,
secp256k1.ToInt(s), expectedAddress)`
$DIR/core/services/vrf/solidity_cross_tests/vrf_v08_solidity_crosscheck_test.go: `.NewInt(0)`
$DIR/core/services/vrf/solidity_cross_tests/vrf_v08_solidity_crosscheck_test.go: `.Add(secp256k1.ToInt(c), big.NewInt(1))`
$DIR/core/services/vrf/solidity_cross_tests/vrf_v08_solidity_crosscheck_test.go: `.ToInt(c)`
$DIR/core/services/vrf/solidity_cross_tests/vrf_v08_solidity_crosscheck_test.go: `.NewInt(1)`
$DIR/core/services/vrf/solidity_cross_tests/vrf_v08_solidity_crosscheck_test.go: `.ToInt(s)`
$DIR/core/services/vrf/solidity_cross_tests/vrf_v08_solidity_crosscheck_test.go: `.New(mrand.NewSource(8))`
$DIR/core/services/vrf/solidity_cross_tests/vrf_v08_solidity_crosscheck_test.go: `.NewSource(8)`
$DIR/core/services/vrf/solidity_cross_tests/vrf_v08_solidity_crosscheck_test.go: `.ToInt(c)`
$DIR/core/services/vrf/solidity_cross_tests/vrf_v08_solidity_crosscheck_test.go: `.ToInt(s)`
$DIR/core/services/vrf/solidity_cross_tests/vrf_v08_solidity_crosscheck_test.go: `.Point()`
$DIR/core/services/vrf/solidity_cross_tests/vrf_v08_solidity_crosscheck_test.go: `.Mul(c, p1)`
$DIR/core/services/vrf/solidity_cross_tests/vrf_v08_solidity_crosscheck_test.go: `.Point()`
$DIR/core/services/vrf/solidity_cross_tests/vrf_v08_solidity_crosscheck_test.go: `.Mul(s, p2)`
$DIR/core/services/vrf/solidity_cross_tests/vrf_v08_solidity_crosscheck_test.go: `.Point()`
$DIR/core/services/vrf/solidity_cross_tests/vrf_v08_solidity_crosscheck_test.go: `.Add(cp1, sp2)`
$DIR/core/services/vrf/solidity_cross_tests/vrf_v08_solidity_crosscheck_test.go: `.ProjectiveECAdd(cp1, sp2)`
$DIR/core/services/vrf/solidity_cross_tests/vrf_v08_solidity_crosscheck_test.go: `.NewInt(0)`
$DIR/core/services/vrf/solidity_cross_tests/vrf_v08_solidity_crosscheck_test.go: `.ModInverse(z, vrfkey.FieldSize)`
$DIR/core/services/vrf/solidity_cross_tests/vrf_v08_solidity_crosscheck_test.go: `.LinearCombination(nil, cNum, p1Pair,
cp1Pair, sNum, p2Pair, sp2Pair, zInv)`
$DIR/core/services/vrf/solidity_cross_tests/vrf_v08_solidity_crosscheck_test.go: `.LinearCombination(nil, big.NewInt(0).Add(
cNum, big.NewInt(1)), p1Pair, cp1Pair, sNum, p2Pair, sp2Pair, zInv)`
$DIR/core/services/vrf/solidity_cross_tests/vrf_v08_solidity_crosscheck_test.go: `.NewInt(0)`
$DIR/core/services/vrf/solidity_cross_tests/vrf_v08_solidity_crosscheck_test.go: `.Add(
cNum, big.NewInt(1))`
$DIR/core/services/vrf/solidity_cross_tests/vrf_v08_solidity_crosscheck_test.go: `.NewInt(1)`
$DIR/core/services/vrf/solidity_cross_tests/vrf_v08_solidity_crosscheck_test.go: `.LinearCombination(nil, cNum, p1Pair,
cp1Pair, big.NewInt(0).Add(sNum, big.NewInt(1)), p2Pair, sp2Pair, zInv)`
$DIR/core/services/vrf/solidity_cross_tests/vrf_v08_solidity_crosscheck_test.go: `.NewInt(0)`
$DIR/core/services/vrf/solidity_cross_tests/vrf_v08_solidity_crosscheck_test.go: `.Add(sNum, big.NewInt(1))`
$DIR/core/services/vrf/solidity_cross_tests/vrf_v08_solidity_crosscheck_test.go: `.NewInt(1)`
$DIR/core/services/vrf/solidity_cross_tests/vrf_v08_solidity_crosscheck_test.go: `.New(mrand.NewSource(9))`
$DIR/core/services/vrf/solidity_cross_tests/vrf_v08_solidity_crosscheck_test.go: `.NewSource(9)`
$DIR/core/services/vrf/solidity_cross_tests/vrf_v08_solidity_crosscheck_test.go: `.ScalarFromCurvePoints(hash, pk, gamma, uWitness, v)`
$DIR/core/services/vrf/solidity_cross_tests/vrf_v08_solidity_crosscheck_test.go: `.ScalarFromCurvePoints(nil, hashPair, pkPair,
gammaPair, uWitness, vPair)`
$DIR/core/services/vrf/solidity_cross_tests/vrf_v08_solidity_crosscheck_test.go: `.New(mrand.NewSource(10))`
$DIR/core/services/vrf/solidity_cross_tests/vrf_v08_solidity_crosscheck_test.go: `.NewSource(10)`
$DIR/core/services/vrf/solidity_cross_tests/vrf_v08_solidity_crosscheck_test.go: `.ToInt(sk)`
$DIR/core/services/vrf/solidity_cross_tests/vrf_v08_solidity_crosscheck_test.go: `.MustNewV2XXXTestingOnly(skNum)`
$DIR/core/services/vrf/solidity_cross_tests/vrf_v08_solidity_crosscheck_test.go: `.GenerateProofWithNonce(randomSeed, secp256k1.ToInt(nonce))`
$DIR/core/services/vrf/solidity_cross_tests/vrf_v08_solidity_crosscheck_test.go: `.ToInt(nonce)`
$DIR/core/services/vrf/solidity_cross_tests/vrf_v08_solidity_crosscheck_test.go: `.BigToSeed(randomSeed)`
$DIR/core/services/vrf/solidity_cross_tests/vrf_v08_solidity_crosscheck_test.go: `.GenerateProofResponseFromProofV2(proof, proof2.PreSeedDataV2{
PreSeed: seed,
})`
$DIR/core/services/vrf/solidity_cross_tests/vrf_v08_solidity_crosscheck_test.go: `.RandomValueFromVRFProof(nil, solidity_vrf_v08_verifier_wrapper.VRFProof{
Pk: solProof.Pk,
Gamma: solProof.Gamma,
C: solProof.C,
S: solProof.S,
Seed: solProof.Seed,
UWitness: solProof.UWitness,
CGammaWitness: solProof.CGammaWitness,
SHashWitness: solProof.SHashWitness,
ZInv: solProof.ZInv,
}, randomSeed)`
$DIR/core/services/vrf/v1/integration_test.go: `t.Run(test.name, func(t *testing.T) {
ctx := testutils.Context(t)
config, _ := heavyweight.FullTestDBV2(t, func(c *chainlink.Config, s *chainlink.Secrets) {
c.EVM[0].GasEstimator.EIP1559DynamicFees = &test.eip1559
c.EVM[0].ChainID = (*ubig.Big)(testutils.SimulatedChainID)
})
key1 := cltest.MustGenerateRandomKey(t)
key2 := cltest.MustGenerateRandomKey(t)
cu := vrftesthelpers.NewVRFCoordinatorUniverse(t, key1, key2)
incomingConfs := 2
app := cltest.NewApplicationWithConfigV2AndKeyOnSimulatedBlockchain(t, config, cu.Backend, key1, key2)
require.NoError(t, app.Start(ctx))
jb, vrfKey := createVRFJobRegisterKey(t, cu, app, incomingConfs)
require.NoError(t, app.JobSpawner().CreateJob(ctx, nil, &jb))
_, err := cu.ConsumerContract.TestRequestRandomness(cu.Carol,
vrfKey.PublicKey.MustHash(), big.NewInt(100))
require.NoError(t, err)
_, err = cu.ConsumerContract.TestRequestRandomness(cu.Carol,
vrfKey.PublicKey.MustHash(), big.NewInt(100))
require.NoError(t, err)
cu.Backend.Commit()
t.Log("Sent 2 test requests")
// Mine the required number of blocks
// So our request gets confirmed.
for i := 0; i < incomingConfs; i++ {
cu.Backend.Commit()
}
var runs []pipeline.Run
gomega.NewWithT(t).Eventually(func() bool {
runs, err = app.PipelineORM().GetAllRuns(ctx)
require.NoError(t, err)
// It possible that we send the test request
// before the Job spawner has started the vrf services, which is fine
// the lb will backfill the logs. However we need to
// keep blocks coming in for the lb to send the backfilled logs.
cu.Backend.Commit()
return len(runs) == 2 && runs[0].State == pipeline.RunStatusCompleted && runs[1].State == pipeline.RunStatusCompleted
}, testutils.WaitTimeout(t), 1*time.Second).Should(gomega.BeTrue())
assert.Equal(t, pipeline.RunErrors([]null.String{{}}), runs[0].FatalErrors)
assert.Equal(t, 4, len(runs[0].PipelineTaskRuns))
assert.Equal(t, 4, len(runs[1].PipelineTaskRuns))
assert.NotNil(t, 0, runs[0].Outputs.Val)
assert.NotNil(t, 0, runs[1].Outputs.Val)
// stop jobs as to not cause a race condition in geth simulated backend
// between job creating new tx and fulfillment logs polling below
require.NoError(t, app.JobSpawner().DeleteJob(ctx, nil, jb.ID))
// Ensure the eth transaction gets confirmed on chain.
gomega.NewWithT(t).Eventually(func() bool {
orm := txmgr.NewTxStore(app.GetDB(), app.GetLogger())
uc, err2 := orm.CountUnconfirmedTransactions(ctx, key1.Address, testutils.SimulatedChainID)
require.NoError(t, err2)
return uc == 0
}, testutils.WaitTimeout(t), 100*time.Millisecond).Should(gomega.BeTrue())
// Assert the request was fulfilled on-chain.
var rf []*solidity_vrf_coordinator_interface.VRFCoordinatorRandomnessRequestFulfilled
gomega.NewWithT(t).Eventually(func() bool {
rfIterator, err2 := cu.RootContract.FilterRandomnessRequestFulfilled(nil)
require.NoError(t, err2, "failed to subscribe to RandomnessRequest logs")
rf = nil
for rfIterator.Next() {
rf = append(rf, rfIterator.Event)
}
return len(rf) == 2
}, testutils.WaitTimeout(t), 500*time.Millisecond).Should(gomega.BeTrue())
// Check that each sending address sent one transaction
n1, err := cu.Backend.PendingNonceAt(ctx, key1.Address)
require.NoError(t, err)
require.EqualValues(t, 1, n1)
n2, err := cu.Backend.PendingNonceAt(ctx, key2.Address)
require.NoError(t, err)
require.EqualValues(t, 1, n2)
})`
$DIR/core/services/vrf/v1/integration_test.go: `c.EVM[0].GasEstimator.EIP1559DynamicFees = &test.eip1559`
$DIR/core/services/vrf/v1/integration_test.go: `c.EVM[0].ChainID = (*ubig.Big)(testutils.SimulatedChainID)`
$DIR/core/services/vrf/v1/integration_test.go: `_, err = cu.ConsumerContract.TestRequestRandomness(cu.Carol,
vrfKey.PublicKey.MustHash(), big.NewInt(100))`
$DIR/core/services/vrf/v1/integration_test.go: `cu.Backend.Commit()`
$DIR/core/services/vrf/v1/integration_test.go: `cu.Backend.Commit()`
$DIR/core/services/vrf/v1/integration_test.go: `gomega.NewWithT(t).Eventually(func() bool {
runs, err = app.PipelineORM().GetAllRuns(ctx)
require.NoError(t, err)
// It possible that we send the test request
// before the Job spawner has started the vrf services, which is fine
// the lb will backfill the logs. However we need to
// keep blocks coming in for the lb to send the backfilled logs.
cu.Backend.Commit()
return len(runs) == 2 && runs[0].State == pipeline.RunStatusCompleted && runs[1].State == pipeline.RunStatusCompleted
}, testutils.WaitTimeout(t), 1*time.Second).Should(gomega.BeTrue())`
$DIR/core/services/vrf/v1/integration_test.go: `runs, err = app.PipelineORM().GetAllRuns(ctx)`
$DIR/core/services/vrf/v1/integration_test.go: `cu.Backend.Commit()`
$DIR/core/services/vrf/v1/integration_test.go: `gomega.NewWithT(t).Eventually(func() bool {
orm := txmgr.NewTxStore(app.GetDB(), app.GetLogger())
uc, err2 := orm.CountUnconfirmedTransactions(ctx, key1.Address, testutils.SimulatedChainID)
require.NoError(t, err2)
return uc == 0
}, testutils.WaitTimeout(t), 100*time.Millisecond).Should(gomega.BeTrue())`
$DIR/core/services/vrf/v1/integration_test.go: `gomega.NewWithT(t).Eventually(func() bool {
rfIterator, err2 := cu.RootContract.FilterRandomnessRequestFulfilled(nil)
require.NoError(t, err2, "failed to subscribe to RandomnessRequest logs")
rf = nil
for rfIterator.Next() {
rf = append(rf, rfIterator.Event)
}
return len(rf) == 2
}, testutils.WaitTimeout(t), 500*time.Millisecond).Should(gomega.BeTrue())`
$DIR/core/services/vrf/v1/integration_test.go: `rf = nil`
$DIR/core/services/vrf/v1/integration_test.go: `rf = append(rf, rfIterator.Event)`
$DIR/core/services/vrf/v1/integration_test.go: `c.EVM[0].GasEstimator.EIP1559DynamicFees = ptr(true)`
$DIR/core/services/vrf/v1/integration_test.go: `c.EVM[0].BlockBackfillDepth = ptr[uint32](500)`
$DIR/core/services/vrf/v1/integration_test.go: `c.Feature.LogPoller = ptr(true)`
$DIR/core/services/vrf/v1/integration_test.go: `c.EVM[0].FinalityDepth = ptr[uint32](2)`
$DIR/core/services/vrf/v1/integration_test.go: `c.EVM[0].LogPollInterval = commonconfig.MustNewDuration(time.Second)`
$DIR/core/services/vrf/v1/integration_test.go: `c.EVM[0].ChainID = (*ubig.Big)(testutils.SimulatedChainID)`
$DIR/core/services/vrf/v1/integration_test.go: `cu.Backend.Commit()`
$DIR/core/services/vrf/v1/integration_test.go: `cu.Backend.Commit()`
$DIR/core/services/vrf/v1/integration_test.go: `gomega.NewGomegaWithT(t).Eventually(func() bool {
cu.Backend.Commit()
_, err2 := cu.BHSContract.GetBlockhash(&bind.CallOpts{
Pending: false,
From: common.Address{},
BlockNumber: nil,
Context: nil,
}, requestBlock)
if err2 == nil {
return true
} else if strings.Contains(err2.Error(), "execution reverted") {
return false
}
t.Fatal(err2)
return false
}, testutils.WaitTimeout(t), time.Second).Should(gomega.BeTrue())`
$DIR/core/services/vrf/v1/integration_test.go: `cu.Backend.Commit()`
$DIR/core/services/vrf/v1/integration_test.go: `cu.Backend.Commit()`
$DIR/core/services/vrf/v1/integration_test.go: `gomega.NewWithT(t).Eventually(func() bool {
runs, err = app.PipelineORM().GetAllRuns(ctx)
require.NoError(t, err)
cu.Backend.Commit()
return len(runs) == 1 && runs[0].State == pipeline.RunStatusCompleted
}, 10*time.Second, 1*time.Second).Should(gomega.BeTrue())`
$DIR/core/services/vrf/v1/integration_test.go: `runs, err = app.PipelineORM().GetAllRuns(ctx)`
$DIR/core/services/vrf/v1/integration_test.go: `cu.Backend.Commit()`
$DIR/core/services/vrf/v1/integration_test.go: `gomega.NewWithT(t).Eventually(func() bool {
orm := txmgr.NewTxStore(app.GetDB(), app.GetLogger())
uc, err2 := orm.CountUnconfirmedTransactions(ctx, key.Address, testutils.SimulatedChainID)
require.NoError(t, err2)
return uc == 0
}, 5*time.Second, 100*time.Millisecond).Should(gomega.BeTrue())`
$DIR/core/services/vrf/v1/integration_test.go: `rf = append(rf, rfIterator.Event)`
$DIR/core/services/vrf/v1/integration_test.go: `.Run(test.name, func(t *testing.T) {
ctx := testutils.Context(t)
config, _ := heavyweight.FullTestDBV2(t, func(c *chainlink.Config, s *chainlink.Secrets) {
c.EVM[0].GasEstimator.EIP1559DynamicFees = &test.eip1559
c.EVM[0].ChainID = (*ubig.Big)(testutils.SimulatedChainID)
})
key1 := cltest.MustGenerateRandomKey(t)
key2 := cltest.MustGenerateRandomKey(t)
cu := vrftesthelpers.NewVRFCoordinatorUniverse(t, key1, key2)
incomingConfs := 2
app := cltest.NewApplicationWithConfigV2AndKeyOnSimulatedBlockchain(t, config, cu.Backend, key1, key2)
require.NoError(t, app.Start(ctx))
jb, vrfKey := createVRFJobRegisterKey(t, cu, app, incomingConfs)
require.NoError(t, app.JobSpawner().CreateJob(ctx, nil, &jb))
_, err := cu.ConsumerContract.TestRequestRandomness(cu.Carol,
vrfKey.PublicKey.MustHash(), big.NewInt(100))
require.NoError(t, err)
_, err = cu.ConsumerContract.TestRequestRandomness(cu.Carol,
vrfKey.PublicKey.MustHash(), big.NewInt(100))
require.NoError(t, err)
cu.Backend.Commit()
t.Log("Sent 2 test requests")
// Mine the required number of blocks
// So our request gets confirmed.
for i := 0; i < incomingConfs; i++ {
cu.Backend.Commit()
}
var runs []pipeline.Run
gomega.NewWithT(t).Eventually(func() bool {
runs, err = app.PipelineORM().GetAllRuns(ctx)
require.NoError(t, err)
// It possible that we send the test request
// before the Job spawner has started the vrf services, which is fine
// the lb will backfill the logs. However we need to
// keep blocks coming in for the lb to send the backfilled logs.
cu.Backend.Commit()
return len(runs) == 2 && runs[0].State == pipeline.RunStatusCompleted && runs[1].State == pipeline.RunStatusCompleted
}, testutils.WaitTimeout(t), 1*time.Second).Should(gomega.BeTrue())
assert.Equal(t, pipeline.RunErrors([]null.String{{}}), runs[0].FatalErrors)
assert.Equal(t, 4, len(runs[0].PipelineTaskRuns))
assert.Equal(t, 4, len(runs[1].PipelineTaskRuns))
assert.NotNil(t, 0, runs[0].Outputs.Val)
assert.NotNil(t, 0, runs[1].Outputs.Val)
// stop jobs as to not cause a race condition in geth simulated backend
// between job creating new tx and fulfillment logs polling below
require.NoError(t, app.JobSpawner().DeleteJob(ctx, nil, jb.ID))
// Ensure the eth transaction gets confirmed on chain.
gomega.NewWithT(t).Eventually(func() bool {
orm := txmgr.NewTxStore(app.GetDB(), app.GetLogger())
uc, err2 := orm.CountUnconfirmedTransactions(ctx, key1.Address, testutils.SimulatedChainID)
require.NoError(t, err2)
return uc == 0
}, testutils.WaitTimeout(t), 100*time.Millisecond).Should(gomega.BeTrue())
// Assert the request was fulfilled on-chain.
var rf []*solidity_vrf_coordinator_interface.VRFCoordinatorRandomnessRequestFulfilled
gomega.NewWithT(t).Eventually(func() bool {
rfIterator, err2 := cu.RootContract.FilterRandomnessRequestFulfilled(nil)
require.NoError(t, err2, "failed to subscribe to RandomnessRequest logs")
rf = nil
for rfIterator.Next() {
rf = append(rf, rfIterator.Event)
}
return len(rf) == 2
}, testutils.WaitTimeout(t), 500*time.Millisecond).Should(gomega.BeTrue())
// Check that each sending address sent one transaction
n1, err := cu.Backend.PendingNonceAt(ctx, key1.Address)
require.NoError(t, err)
require.EqualValues(t, 1, n1)
n2, err := cu.Backend.PendingNonceAt(ctx, key2.Address)
require.NoError(t, err)
require.EqualValues(t, 1, n2)
})`
$DIR/core/services/vrf/v1/integration_test.go: `.Context(t)`
$DIR/core/services/vrf/v1/integration_test.go: `.FullTestDBV2(t, func(c *chainlink.Config, s *chainlink.Secrets) {
c.EVM[0].GasEstimator.EIP1559DynamicFees = &test.eip1559
c.EVM[0].ChainID = (*ubig.Big)(testutils.SimulatedChainID)
})`
$DIR/core/services/vrf/v1/integration_test.go: `.MustGenerateRandomKey(t)`
$DIR/core/services/vrf/v1/integration_test.go: `.MustGenerateRandomKey(t)`
$DIR/core/services/vrf/v1/integration_test.go: `.NewVRFCoordinatorUniverse(t, key1, key2)`
$DIR/core/services/vrf/v1/integration_test.go: `.NewApplicationWithConfigV2AndKeyOnSimulatedBlockchain(t, config, cu.Backend, key1, key2)`
$DIR/core/services/vrf/v1/integration_test.go: `.ConsumerContract.TestRequestRandomness(cu.Carol,
vrfKey.PublicKey.MustHash(), big.NewInt(100))`
$DIR/core/services/vrf/v1/integration_test.go: `.PublicKey.MustHash()`
$DIR/core/services/vrf/v1/integration_test.go: `.NewInt(100)`
$DIR/core/services/vrf/v1/integration_test.go: `.ConsumerContract.TestRequestRandomness(cu.Carol,
vrfKey.PublicKey.MustHash(), big.NewInt(100))`
$DIR/core/services/vrf/v1/integration_test.go: `.PublicKey.MustHash()`
$DIR/core/services/vrf/v1/integration_test.go: `.NewInt(100)`
$DIR/core/services/vrf/v1/integration_test.go: `.Backend.Commit()`
$DIR/core/services/vrf/v1/integration_test.go: `.Backend.Commit()`
$DIR/core/services/vrf/v1/integration_test.go: `.NewWithT(t)`
$DIR/core/services/vrf/v1/integration_test.go: `.Eventually(func() bool {
runs, err = app.PipelineORM().GetAllRuns(ctx)
require.NoError(t, err)
// It possible that we send the test request
// before the Job spawner has started the vrf services, which is fine
// the lb will backfill the logs. However we need to
// keep blocks coming in for the lb to send the backfilled logs.
cu.Backend.Commit()
return len(runs) == 2 && runs[0].State == pipeline.RunStatusCompleted && runs[1].State == pipeline.RunStatusCompleted
}, testutils.WaitTimeout(t), 1*time.Second)`
$DIR/core/services/vrf/v1/integration_test.go: `.PipelineORM()`
$DIR/core/services/vrf/v1/integration_test.go: `.GetAllRuns(ctx)`
$DIR/core/services/vrf/v1/integration_test.go: `.Backend.Commit()`
$DIR/core/services/vrf/v1/integration_test.go: `.WaitTimeout(t)`
$DIR/core/services/vrf/v1/integration_test.go: `.Should(gomega.BeTrue())`
$DIR/core/services/vrf/v1/integration_test.go: `.BeTrue()`
$DIR/core/services/vrf/v1/integration_test.go: `.NewWithT(t)`
$DIR/core/services/vrf/v1/integration_test.go: `.Eventually(func() bool {
orm := txmgr.NewTxStore(app.GetDB(), app.GetLogger())
uc, err2 := orm.CountUnconfirmedTransactions(ctx, key1.Address, testutils.SimulatedChainID)
require.NoError(t, err2)
return uc == 0
}, testutils.WaitTimeout(t), 100*time.Millisecond)`
$DIR/core/services/vrf/v1/integration_test.go: `.NewTxStore(app.GetDB(), app.GetLogger())`
$DIR/core/services/vrf/v1/integration_test.go: `.GetDB()`
$DIR/core/services/vrf/v1/integration_test.go: `.GetLogger()`
$DIR/core/services/vrf/v1/integration_test.go: `.CountUnconfirmedTransactions(ctx, key1.Address, testutils.SimulatedChainID)`
$DIR/core/services/vrf/v1/integration_test.go: `.WaitTimeout(t)`
$DIR/core/services/vrf/v1/integration_test.go: `.Should(gomega.BeTrue())`
$DIR/core/services/vrf/v1/integration_test.go: `.BeTrue()`
$DIR/core/services/vrf/v1/integration_test.go: `.NewWithT(t)`
$DIR/core/services/vrf/v1/integration_test.go: `.Eventually(func() bool {
rfIterator, err2 := cu.RootContract.FilterRandomnessRequestFulfilled(nil)
require.NoError(t, err2, "failed to subscribe to RandomnessRequest logs")
rf = nil
for rfIterator.Next() {
rf = append(rf, rfIterator.Event)
}
return len(rf) == 2
}, testutils.WaitTimeout(t), 500*time.Millisecond)`
$DIR/core/services/vrf/v1/integration_test.go: `.RootContract.FilterRandomnessRequestFulfilled(nil)`
$DIR/core/services/vrf/v1/integration_test.go: `.Next()`
$DIR/core/services/vrf/v1/integration_test.go: `.WaitTimeout(t)`
$DIR/core/services/vrf/v1/integration_test.go: `.Should(gomega.BeTrue())`
$DIR/core/services/vrf/v1/integration_test.go: `.BeTrue()`
$DIR/core/services/vrf/v1/integration_test.go: `.Backend.PendingNonceAt(ctx, key1.Address)`
$DIR/core/services/vrf/v1/integration_test.go: `.Backend.PendingNonceAt(ctx, key2.Address)`
$DIR/core/services/vrf/v1/integration_test.go: `.Context(t)`
$DIR/core/services/vrf/v1/integration_test.go: `.FullTestDBV2(t, func(c *chainlink.Config, s *chainlink.Secrets) {
c.EVM[0].GasEstimator.EIP1559DynamicFees = ptr(true)
c.EVM[0].BlockBackfillDepth = ptr[uint32](500)
c.Feature.LogPoller = ptr(true)
c.EVM[0].FinalityDepth = ptr[uint32](2)
c.EVM[0].LogPollInterval = commonconfig.MustNewDuration(time.Second)
c.EVM[0].ChainID = (*ubig.Big)(testutils.SimulatedChainID)
})`
$DIR/core/services/vrf/v1/integration_test.go: `.MustNewDuration(time.Second)`
$DIR/core/services/vrf/v1/integration_test.go: `.MustGenerateRandomKey(t)`
$DIR/core/services/vrf/v1/integration_test.go: `.NewVRFCoordinatorUniverse(t, key)`
$DIR/core/services/vrf/v1/integration_test.go: `.NewApplicationWithConfigV2AndKeyOnSimulatedBlockchain(t, config, cu.Backend, key)`
$DIR/core/services/vrf/v1/integration_test.go: `.Address.String()`
$DIR/core/services/vrf/v1/integration_test.go: `.CreateAndStartBHSJob(t, sendingKeys, app, cu.BHSContractAddress.String(),
cu.RootContractAddress.String(), "", "", "", 0, 200, 0, 100)`
$DIR/core/services/vrf/v1/integration_test.go: `.BHSContractAddress.String()`
$DIR/core/services/vrf/v1/integration_test.go: `.RootContractAddress.String()`
$DIR/core/services/vrf/v1/integration_test.go: `.ConsumerContract.TestRequestRandomness(cu.Carol,
vrfKey.PublicKey.MustHash(), big.NewInt(100))`
$DIR/core/services/vrf/v1/integration_test.go: `.PublicKey.MustHash()`
$DIR/core/services/vrf/v1/integration_test.go: `.NewInt(100)`
$DIR/core/services/vrf/v1/integration_test.go: `.Backend.Commit()`
$DIR/core/services/vrf/v1/integration_test.go: `.Backend.Blockchain()`
$DIR/core/services/vrf/v1/integration_test.go: `.CurrentHeader()`
$DIR/core/services/vrf/v1/integration_test.go: `.Backend.Commit()`
$DIR/core/services/vrf/v1/integration_test.go: `.NewGomegaWithT(t)`
$DIR/core/services/vrf/v1/integration_test.go: `.Eventually(func() bool {
cu.Backend.Commit()
_, err2 := cu.BHSContract.GetBlockhash(&bind.CallOpts{
Pending: false,
From: common.Address{},
BlockNumber: nil,
Context: nil,
}, requestBlock)
if err2 == nil {
return true
} else if strings.Contains(err2.Error(), "execution reverted") {
return false
}
t.Fatal(err2)
return false
}, testutils.WaitTimeout(t), time.Second)`
$DIR/core/services/vrf/v1/integration_test.go: `.Backend.Commit()`
$DIR/core/services/vrf/v1/integration_test.go: `.BHSContract.GetBlockhash(&bind.CallOpts{
Pending: false,
From: common.Address{},
BlockNumber: nil,
Context: nil,
}, requestBlock)`
$DIR/core/services/vrf/v1/integration_test.go: `.Contains(err2.Error(), "execution reverted")`
$DIR/core/services/vrf/v1/integration_test.go: `.WaitTimeout(t)`
$DIR/core/services/vrf/v1/integration_test.go: `.Should(gomega.BeTrue())`
$DIR/core/services/vrf/v1/integration_test.go: `.BeTrue()`
$DIR/core/services/vrf/v1/integration_test.go: `.Backend.Commit()`
$DIR/core/services/vrf/v1/integration_test.go: `.NewWithT(t)`
$DIR/core/services/vrf/v1/integration_test.go: `.Eventually(func() bool {
runs, err = app.PipelineORM().GetAllRuns(ctx)
require.NoError(t, err)
cu.Backend.Commit()
return len(runs) == 1 && runs[0].State == pipeline.RunStatusCompleted
}, 10*time.Second, 1*time.Second)`
$DIR/core/services/vrf/v1/integration_test.go: `.PipelineORM()`
$DIR/core/services/vrf/v1/integration_test.go: `.GetAllRuns(ctx)`
$DIR/core/services/vrf/v1/integration_test.go: `.Backend.Commit()`
$DIR/core/services/vrf/v1/integration_test.go: `.Should(gomega.BeTrue())`
$DIR/core/services/vrf/v1/integration_test.go: `.BeTrue()`
$DIR/core/services/vrf/v1/integration_test.go: `.NewWithT(t)`
$DIR/core/services/vrf/v1/integration_test.go: `.Eventually(func() bool {
orm := txmgr.NewTxStore(app.GetDB(), app.GetLogger())
uc, err2 := orm.CountUnconfirmedTransactions(ctx, key.Address, testutils.SimulatedChainID)
require.NoError(t, err2)
return uc == 0
}, 5*time.Second, 100*time.Millisecond)`
$DIR/core/services/vrf/v1/integration_test.go: `.NewTxStore(app.GetDB(), app.GetLogger())`
$DIR/core/services/vrf/v1/integration_test.go: `.GetDB()`
$DIR/core/services/vrf/v1/integration_test.go: `.GetLogger()`
$DIR/core/services/vrf/v1/integration_test.go: `.CountUnconfirmedTransactions(ctx, key.Address, testutils.SimulatedChainID)`
$DIR/core/services/vrf/v1/integration_test.go: `.Should(gomega.BeTrue())`
$DIR/core/services/vrf/v1/integration_test.go: `.BeTrue()`
$DIR/core/services/vrf/v1/integration_test.go: `.NewWithT(t)`
$DIR/core/services/vrf/v1/integration_test.go: `.Eventually(func() bool {
rfIterator, err := cu.RootContract.FilterRandomnessRequestFulfilled(nil)
require.NoError(t, err, "failed to subscribe to RandomnessRequest logs")
var rf []*solidity_vrf_coordinator_interface.VRFCoordinatorRandomnessRequestFulfilled
for rfIterator.Next() {
rf = append(rf, rfIterator.Event)
}
return len(rf) == 1
}, 5*time.Second, 500*time.Millisecond)`
$DIR/core/services/vrf/v1/integration_test.go: `.RootContract.FilterRandomnessRequestFulfilled(nil)`
$DIR/core/services/vrf/v1/integration_test.go: `.Next()`
$DIR/core/services/vrf/v1/integration_test.go: `.BeTrue()`
$DIR/core/services/vrf/v1/listener_v1_test.go: `lsn.Reqs = []request{
{
confirmedAtBlock: 2,
req: &solidity_vrf_coordinator_interface.VRFCoordinatorRandomnessRequest{
RequestID: utils.PadByteToHash(0x02),
},
},
{
confirmedAtBlock: 1,
req: &solidity_vrf_coordinator_interface.VRFCoordinatorRandomnessRequest{
RequestID: utils.PadByteToHash(0x01),
},
},
{
confirmedAtBlock: 3,
req: &solidity_vrf_coordinator_interface.VRFCoordinatorRandomnessRequest{
RequestID: utils.PadByteToHash(0x03),
},
},
}`
$DIR/core/services/vrf/v1/listener_v1_test.go: `lsn.LatestHead = 0`
$DIR/core/services/vrf/v1/listener_v1_test.go: `lsn.LatestHead = 2`
$DIR/core/services/vrf/v1/listener_v1_test.go: `logs = lsn.extractConfirmedLogs()`
$DIR/core/services/vrf/v1/listener_v1_test.go: `lsn.LatestHead = 10`
$DIR/core/services/vrf/v1/listener_v1_test.go: `logs = lsn.extractConfirmedLogs()`
$DIR/core/services/vrf/v1/listener_v1_test.go: `lsn.LatestHead = 10000`
$DIR/core/services/vrf/v1/listener_v1_test.go: `lsn.ResponseCount = map[[32]byte]uint64{
utils.PadByteToHash(0x00): 1,
utils.PadByteToHash(0x01): 1,
}`
$DIR/core/services/vrf/v1/listener_v1_test.go: `lsn.BlockNumberToReqID = pairing.New()`
$DIR/core/services/vrf/v1/listener_v1_test.go: `lsn.BlockNumberToReqID.Insert(fulfilledReq{
blockNumber: 1,
reqID: utils.PadByteToHash(0x00),
})`
$DIR/core/services/vrf/v1/listener_v1_test.go: `lsn.BlockNumberToReqID.Insert(fulfilledReq{
blockNumber: 2,
reqID: utils.PadByteToHash(0x01),
})`
$DIR/core/services/vrf/v1/listener_v1_test.go: `lsn.pruneConfirmedRequestCounts()`
$DIR/core/services/vrf/v1/listener_v1_test.go: `lsn.LatestHead = 10001`
$DIR/core/services/vrf/v1/listener_v1_test.go: `lsn.pruneConfirmedRequestCounts()`
$DIR/core/services/vrf/v1/listener_v1_test.go: `lsn.LatestHead = 10002`
$DIR/core/services/vrf/v1/listener_v1_test.go: `lsn.pruneConfirmedRequestCounts()`
$DIR/core/services/vrf/v1/listener_v1_test.go: `.PadByteToHash(0x02)`
$DIR/core/services/vrf/v1/listener_v1_test.go: `.PadByteToHash(0x01)`
$DIR/core/services/vrf/v1/listener_v1_test.go: `.PadByteToHash(0x03)`
$DIR/core/services/vrf/v1/listener_v1_test.go: `.extractConfirmedLogs()`
$DIR/core/services/vrf/v1/listener_v1_test.go: `.extractConfirmedLogs()`
$DIR/core/services/vrf/v1/listener_v1_test.go: `.extractConfirmedLogs()`
$DIR/core/services/vrf/v1/listener_v1_test.go: `.PadByteToHash(0x00)`
$DIR/core/services/vrf/v1/listener_v1_test.go: `.PadByteToHash(0x01)`
$DIR/core/services/vrf/v1/listener_v1_test.go: `.New()`
$DIR/core/services/vrf/v1/listener_v1_test.go: `.BlockNumberToReqID.Insert(fulfilledReq{
blockNumber: 1,
reqID: utils.PadByteToHash(0x00),
})`
$DIR/core/services/vrf/v1/listener_v1_test.go: `.PadByteToHash(0x00)`
$DIR/core/services/vrf/v1/listener_v1_test.go: `.BlockNumberToReqID.Insert(fulfilledReq{
blockNumber: 2,
reqID: utils.PadByteToHash(0x01),
})`
$DIR/core/services/vrf/v1/listener_v1_test.go: `.PadByteToHash(0x01)`
$DIR/core/services/vrf/v1/listener_v1_test.go: `.pruneConfirmedRequestCounts()`
$DIR/core/services/vrf/v1/listener_v1_test.go: `.pruneConfirmedRequestCounts()`
$DIR/core/services/vrf/v1/listener_v1_test.go: `.pruneConfirmedRequestCounts()`
$DIR/core/services/vrf/v2/bhs_feeder_test.go: `sendEth(t, ownerKey, uni.backend, vrfKey.Address, 10)`
$DIR/core/services/vrf/v2/bhs_feeder_test.go: `bhsKeyAddresses = append(bhsKeyAddresses, bhsKey.Address.String())`
$DIR/core/services/vrf/v2/bhs_feeder_test.go: `keys = append(keys, bhsKey)`
$DIR/core/services/vrf/v2/bhs_feeder_test.go: `keySpecificOverrides = append(keySpecificOverrides, toml.KeySpecific{
Key: ptr[types.EIP55Address](bhsKey.EIP55Address),
GasEstimator: toml.KeySpecificGasEstimator{PriceMax: gasLanePriceWei},
})`
$DIR/core/services/vrf/v2/bhs_feeder_test.go: `sendEth(t, ownerKey, uni.backend, bhsKey.Address, 10)`
$DIR/core/services/vrf/v2/bhs_feeder_test.go: `keySpecificOverrides = append(keySpecificOverrides, toml.KeySpecific{
// Gas lane.
Key: ptr[types.EIP55Address](vrfKey.EIP55Address),
GasEstimator: toml.KeySpecificGasEstimator{PriceMax: gasLanePriceWei},
})`
$DIR/core/services/vrf/v2/bhs_feeder_test.go: `keys = append(keys, ownerKey, vrfKey)`
$DIR/core/services/vrf/v2/bhs_feeder_test.go: `simulatedOverrides(t, gasLanePriceWei, keySpecificOverrides...)(c, s)`
$DIR/core/services/vrf/v2/bhs_feeder_test.go: `c.EVM[0].MinIncomingConfirmations = ptr[uint32](2)`
$DIR/core/services/vrf/v2/bhs_feeder_test.go: `c.Feature.LogPoller = ptr(true)`
$DIR/core/services/vrf/v2/bhs_feeder_test.go: `c.EVM[0].FinalityDepth = ptr[uint32](2)`
$DIR/core/services/vrf/v2/bhs_feeder_test.go: `c.EVM[0].GasEstimator.LimitDefault = ptr(uint64(gasLimit))`
$DIR/core/services/vrf/v2/bhs_feeder_test.go: `c.EVM[0].LogPollInterval = commonconfig.MustNewDuration(time.Second)`
$DIR/core/services/vrf/v2/bhs_feeder_test.go: `_ = vrftesthelpers.CreateAndStartBHSJob(
t, bhsKeyAddresses, app, uni.bhsContractAddress.String(), "",
uni.rootContractAddress.String(), "", "", 0, 200, heartbeatPeriod, 100)`
$DIR/core/services/vrf/v2/bhs_feeder_test.go: `uni.backend.Commit()`
$DIR/core/services/vrf/v2/bhs_feeder_test.go: `time.Sleep(diff)`
$DIR/core/services/vrf/v2/bhs_feeder_test.go: `verifyBlockhashStored(t, uni.coordinatorV2UniverseCommon, blockNumberStored)`
$DIR/core/services/vrf/v2/bhs_feeder_test.go: `.MustGenerateRandomKey(t)`
$DIR/core/services/vrf/v2/bhs_feeder_test.go: `.MustGenerateRandomKey(t)`
$DIR/core/services/vrf/v2/bhs_feeder_test.go: `.GWei(1)`
$DIR/core/services/vrf/v2/bhs_feeder_test.go: `.MustGenerateRandomKey(t)`
$DIR/core/services/vrf/v2/bhs_feeder_test.go: `.Address.String()`
$DIR/core/services/vrf/v2/bhs_feeder_test.go: `.FullTestDBV2(t, func(c *chainlink.Config, s *chainlink.Secrets) {
simulatedOverrides(t, gasLanePriceWei, keySpecificOverrides...)(c, s)
c.EVM[0].MinIncomingConfirmations = ptr[uint32](2)
c.Feature.LogPoller = ptr(true)
c.EVM[0].FinalityDepth = ptr[uint32](2)
c.EVM[0].GasEstimator.LimitDefault = ptr(uint64(gasLimit))
c.EVM[0].LogPollInterval = commonconfig.MustNewDuration(time.Second)
})`
$DIR/core/services/vrf/v2/bhs_feeder_test.go: `.MustNewDuration(time.Second)`
$DIR/core/services/vrf/v2/bhs_feeder_test.go: `.NewApplicationWithConfigV2AndKeyOnSimulatedBlockchain(t, config, uni.backend, keys...)`
$DIR/core/services/vrf/v2/bhs_feeder_test.go: `.CreateAndStartBHSJob(
t, bhsKeyAddresses, app, uni.bhsContractAddress.String(), "",
uni.rootContractAddress.String(), "", "", 0, 200, heartbeatPeriod, 100)`
$DIR/core/services/vrf/v2/bhs_feeder_test.go: `.bhsContractAddress.String()`
$DIR/core/services/vrf/v2/bhs_feeder_test.go: `.rootContractAddress.String()`
$DIR/core/services/vrf/v2/bhs_feeder_test.go: `.backend.Commit()`
$DIR/core/services/vrf/v2/bhs_feeder_test.go: `.Sleep(diff)`
$DIR/core/services/vrf/v2/bhs_feeder_test.go: `.backend.HeaderByNumber(testutils.Context(t), nil)`
$DIR/core/services/vrf/v2/bhs_feeder_test.go: `.Context(t)`
$DIR/core/services/vrf/v2/bhs_feeder_test.go: `.Number.Uint64()`
$DIR/core/services/vrf/v2/integration_v2_plus_test.go: `t.Run("link payment", func(tt *testing.T) {
testSingleConsumerHappyPathBatchFulfillment(
t,
ownerKey,
uni.coordinatorV2UniverseCommon,
uni.vrfConsumers[0],
uni.consumerContracts[0],
uni.consumerContractAddresses[0],
uni.rootContract,
uni.rootContractAddress,
uni.batchCoordinatorContractAddress,
nil,
5, // number of requests to send
false, // don't send big callback
vrfcommon.V2Plus,
false,
func(t *testing.T, coordinator v22.CoordinatorV2_X, rwfe v22.RandomWordsFulfilled, expectedSubID *big.Int) {
_, err := coordinator.GetSubscription(nil, rwfe.SubID())
require.NoError(t, err)
require.Equal(t, expectedSubID, rwfe.SubID())
},
)
})`
$DIR/core/services/vrf/v2/integration_v2_plus_test.go: `testSingleConsumerHappyPathBatchFulfillment(
t,
ownerKey,
uni.coordinatorV2UniverseCommon,
uni.vrfConsumers[0],
uni.consumerContracts[0],
uni.consumerContractAddresses[0],
uni.rootContract,
uni.rootContractAddress,
uni.batchCoordinatorContractAddress,
nil,
5, // number of requests to send
false, // don't send big callback
vrfcommon.V2Plus,
false,
func(t *testing.T, coordinator v22.CoordinatorV2_X, rwfe v22.RandomWordsFulfilled, expectedSubID *big.Int) {
_, err := coordinator.GetSubscription(nil, rwfe.SubID())
require.NoError(t, err)
require.Equal(t, expectedSubID, rwfe.SubID())
},
)`
$DIR/core/services/vrf/v2/integration_v2_plus_test.go: `testSingleConsumerHappyPathBatchFulfillment(
t,
ownerKey,
uni.coordinatorV2UniverseCommon,
uni.vrfConsumers[0],
uni.consumerContracts[0],
uni.consumerContractAddresses[0],
uni.rootContract,
uni.rootContractAddress,
uni.batchCoordinatorContractAddress,
nil,
5, // number of requests to send
false, // don't send big callback
vrfcommon.V2Plus,
true,
func(t *testing.T, coordinator v22.CoordinatorV2_X, rwfe v22.RandomWordsFulfilled, expectedSubID *big.Int) {
_, err := coordinator.GetSubscription(nil, rwfe.SubID())
require.NoError(t, err)
require.Equal(t, expectedSubID, rwfe.SubID())
},
)`
$DIR/core/services/vrf/v2/integration_v2_plus_test.go: `t.Run("link payment", func(tt *testing.T) {
testSingleConsumerHappyPathBatchFulfillment(
t,
ownerKey,
uni.coordinatorV2UniverseCommon,
uni.vrfConsumers[0],
uni.consumerContracts[0],
uni.consumerContractAddresses[0],
uni.rootContract,
uni.rootContractAddress,
uni.batchCoordinatorContractAddress,
nil,
5, // number of requests to send
true, // send big callback
vrfcommon.V2Plus,
false,
func(t *testing.T, coordinator v22.CoordinatorV2_X, rwfe v22.RandomWordsFulfilled, expectedSubID *big.Int) {
_, err := coordinator.GetSubscription(nil, rwfe.SubID())
require.NoError(t, err)
require.Equal(t, expectedSubID, rwfe.SubID())
},
)
})`
$DIR/core/services/vrf/v2/integration_v2_plus_test.go: `testSingleConsumerHappyPathBatchFulfillment(
t,
ownerKey,
uni.coordinatorV2UniverseCommon,
uni.vrfConsumers[0],
uni.consumerContracts[0],
uni.consumerContractAddresses[0],
uni.rootContract,
uni.rootContractAddress,
uni.batchCoordinatorContractAddress,
nil,
5, // number of requests to send
true, // send big callback
vrfcommon.V2Plus,
false,
func(t *testing.T, coordinator v22.CoordinatorV2_X, rwfe v22.RandomWordsFulfilled, expectedSubID *big.Int) {
_, err := coordinator.GetSubscription(nil, rwfe.SubID())
require.NoError(t, err)
require.Equal(t, expectedSubID, rwfe.SubID())
},
)`
$DIR/core/services/vrf/v2/integration_v2_plus_test.go: `testSingleConsumerHappyPathBatchFulfillment(
t,
ownerKey,
uni.coordinatorV2UniverseCommon,
uni.vrfConsumers[0],
uni.consumerContracts[0],
uni.consumerContractAddresses[0],
uni.rootContract,
uni.rootContractAddress,
uni.batchCoordinatorContractAddress,
nil,
5, // number of requests to send
true, // send big callback
vrfcommon.V2Plus,
true,
func(t *testing.T, coordinator v22.CoordinatorV2_X, rwfe v22.RandomWordsFulfilled, expectedSubID *big.Int) {
_, err := coordinator.GetSubscription(nil, rwfe.SubID())
require.NoError(t, err)
require.Equal(t, expectedSubID, rwfe.SubID())
},
)`
$DIR/core/services/vrf/v2/integration_v2_plus_test.go: `t.Run("link payment", func(tt *testing.T) {
testSingleConsumerHappyPath(
t,
ownerKey,
uni.coordinatorV2UniverseCommon,
uni.vrfConsumers[0],
uni.consumerContracts[0],
uni.consumerContractAddresses[0],
uni.rootContract,
uni.rootContractAddress,
uni.batchCoordinatorContractAddress,
nil,
vrfcommon.V2Plus,
false,
func(t *testing.T, coordinator v22.CoordinatorV2_X, rwfe v22.RandomWordsFulfilled, expectedSubID *big.Int) {
_, err := coordinator.GetSubscription(nil, rwfe.SubID())
require.NoError(t, err)
require.Equal(t, expectedSubID, rwfe.SubID())
})
})`
$DIR/core/services/vrf/v2/integration_v2_plus_test.go: `testSingleConsumerHappyPath(
t,
ownerKey,
uni.coordinatorV2UniverseCommon,
uni.vrfConsumers[0],
uni.consumerContracts[0],
uni.consumerContractAddresses[0],
uni.rootContract,
uni.rootContractAddress,
uni.batchCoordinatorContractAddress,
nil,
vrfcommon.V2Plus,
false,
func(t *testing.T, coordinator v22.CoordinatorV2_X, rwfe v22.RandomWordsFulfilled, expectedSubID *big.Int) {
_, err := coordinator.GetSubscription(nil, rwfe.SubID())
require.NoError(t, err)
require.Equal(t, expectedSubID, rwfe.SubID())
})`
$DIR/core/services/vrf/v2/integration_v2_plus_test.go: `testSingleConsumerHappyPath(
t,
ownerKey,
uni.coordinatorV2UniverseCommon,
uni.vrfConsumers[0],
uni.consumerContracts[0],
uni.consumerContractAddresses[0],
uni.rootContract,
uni.rootContractAddress,
uni.batchCoordinatorContractAddress,
nil,
vrfcommon.V2Plus,
true,
func(t *testing.T, coordinator v22.CoordinatorV2_X, rwfe v22.RandomWordsFulfilled, expectedSubID *big.Int) {
_, err := coordinator.GetSubscription(nil, rwfe.SubID())
require.NoError(t, err)
require.Equal(t, expectedSubID, rwfe.SubID())
})`
$DIR/core/services/vrf/v2/integration_v2_plus_test.go: `t.Run("link payment", func(tt *testing.T) {
testMultipleConsumersNeedBHS(
t,
ownerKey,
uni.coordinatorV2UniverseCommon,
uni.vrfConsumers,
uni.consumerContracts,
uni.consumerContractAddresses,
uni.rootContract,
uni.rootContractAddress,
uni.batchCoordinatorContractAddress,
nil,
vrfcommon.V2Plus,
false,
)
})`
$DIR/core/services/vrf/v2/integration_v2_plus_test.go: `testMultipleConsumersNeedBHS(
t,
ownerKey,
uni.coordinatorV2UniverseCommon,
uni.vrfConsumers,
uni.consumerContracts,
uni.consumerContractAddresses,
uni.rootContract,
uni.rootContractAddress,
uni.batchCoordinatorContractAddress,
nil,
vrfcommon.V2Plus,
false,
)`
$DIR/core/services/vrf/v2/integration_v2_plus_test.go: `testMultipleConsumersNeedBHS(
t,
ownerKey,
uni.coordinatorV2UniverseCommon,
uni.vrfConsumers,
uni.consumerContracts,
uni.consumerContractAddresses,
uni.rootContract,
uni.rootContractAddress,
uni.batchCoordinatorContractAddress,
nil,
vrfcommon.V2Plus,
true,
)`
$DIR/core/services/vrf/v2/integration_v2_plus_test.go: `t.Run("link payment", func(tt *testing.T) {
testBlockHeaderFeeder(
t,
ownerKey,
uni.coordinatorV2UniverseCommon,
uni.vrfConsumers,
uni.consumerContracts,
uni.consumerContractAddresses,
uni.rootContract,
uni.rootContractAddress,
uni.batchCoordinatorContractAddress,
nil,
vrfcommon.V2Plus,
false,
)
})`
$DIR/core/services/vrf/v2/integration_v2_plus_test.go: `testBlockHeaderFeeder(
t,
ownerKey,
uni.coordinatorV2UniverseCommon,
uni.vrfConsumers,
uni.consumerContracts,
uni.consumerContractAddresses,
uni.rootContract,
uni.rootContractAddress,
uni.batchCoordinatorContractAddress,
nil,
vrfcommon.V2Plus,
false,
)`
$DIR/core/services/vrf/v2/integration_v2_plus_test.go: `testBlockHeaderFeeder(
t,
ownerKey,
uni.coordinatorV2UniverseCommon,
uni.vrfConsumers,
uni.consumerContracts,
uni.consumerContractAddresses,
uni.rootContract,
uni.rootContractAddress,
uni.batchCoordinatorContractAddress,
nil,
vrfcommon.V2Plus,
true,
)`
$DIR/core/services/vrf/v2/integration_v2_plus_test.go: `t.Run("link payment", func(tt *testing.T) {
testSingleConsumerNeedsTopUp(
t,
ownerKey,
uni.coordinatorV2UniverseCommon,
uni.vrfConsumers[0],
uni.consumerContracts[0],
uni.consumerContractAddresses[0],
uni.rootContract,
uni.rootContractAddress,
uni.batchCoordinatorContractAddress,
nil,
assets.Ether(1).ToInt(), // initial funding of 1 LINK
assets.Ether(100).ToInt(), // top up of 100 LINK
vrfcommon.V2Plus,
false,
)
})`
$DIR/core/services/vrf/v2/integration_v2_plus_test.go: `testSingleConsumerNeedsTopUp(
t,
ownerKey,
uni.coordinatorV2UniverseCommon,
uni.vrfConsumers[0],
uni.consumerContracts[0],
uni.consumerContractAddresses[0],
uni.rootContract,
uni.rootContractAddress,
uni.batchCoordinatorContractAddress,
nil,
assets.Ether(1).ToInt(), // initial funding of 1 LINK
assets.Ether(100).ToInt(), // top up of 100 LINK
vrfcommon.V2Plus,
false,
)`
$DIR/core/services/vrf/v2/integration_v2_plus_test.go: `testSingleConsumerNeedsTopUp(
t,
ownerKey,
uni.coordinatorV2UniverseCommon,
uni.vrfConsumers[0],
uni.consumerContracts[0],
uni.consumerContractAddresses[0],
uni.rootContract,
uni.rootContractAddress,
uni.batchCoordinatorContractAddress,
nil,
big.NewInt(1e17), // initial funding of 0.1 ETH
assets.Ether(100).ToInt(), // top up of 100 ETH
vrfcommon.V2Plus,
true,
)`
$DIR/core/services/vrf/v2/integration_v2_plus_test.go: `backend.Commit()`
$DIR/core/services/vrf/v2/integration_v2_plus_test.go: `backend.Commit()`
$DIR/core/services/vrf/v2/integration_v2_plus_test.go: `_, err = coordinator.SetConfig(owner,
uint16(1), // minimumRequestConfirmations
uint32(10000), // maxGasLimit
1, // stalenessSeconds
1, // gasAfterPaymentCalculation
big.NewInt(10), // fallbackWeiPerUnitLink
0, // fulfillmentFlatFeeNativePPM
0, // fulfillmentFlatFeeLinkDiscountPPM
0, // nativePremiumPercentage
0, // linkPremiumPercentage
)`
$DIR/core/services/vrf/v2/integration_v2_plus_test.go: `backend.Commit()`
$DIR/core/services/vrf/v2/integration_v2_plus_test.go: `_, err = coordinator.SetLINKAndLINKNativeFeed(owner, linkAddress, linkEthFeed)`
$DIR/core/services/vrf/v2/integration_v2_plus_test.go: `backend.Commit()`
$DIR/core/services/vrf/v2/integration_v2_plus_test.go: `backend.Commit()`
$DIR/core/services/vrf/v2/integration_v2_plus_test.go: `_, err = linkContract.Transfer(owner, consumerAddress, assets.Ether(2).ToInt())`
$DIR/core/services/vrf/v2/integration_v2_plus_test.go: `backend.Commit()`
$DIR/core/services/vrf/v2/integration_v2_plus_test.go: `AssertLinkBalances(t, linkContract, []common.Address{owner.From, consumerAddress}, []*big.Int{assets.Ether(999_999_998).ToInt(), assets.Ether(2).ToInt()})`
$DIR/core/services/vrf/v2/integration_v2_plus_test.go: `_, err = coordinator.CreateSubscription(owner)`
$DIR/core/services/vrf/v2/integration_v2_plus_test.go: `backend.Commit()`
$DIR/core/services/vrf/v2/integration_v2_plus_test.go: `_, err = linkContract.TransferAndCall(owner, coordinatorAddress, big.NewInt(0), b)`
$DIR/core/services/vrf/v2/integration_v2_plus_test.go: `_, err = coordinator.AddConsumer(owner, subID, consumerAddress)`
$DIR/core/services/vrf/v2/integration_v2_plus_test.go: `_, err = consumer.RequestRandomWords(random, subID, 1, 1, 1, [32]byte{}, false)`
$DIR/core/services/vrf/v2/integration_v2_plus_test.go: `_, err = consumer.RequestRandomWords(owner, subID, 1, 1, 1, [32]byte{}, false)`
$DIR/core/services/vrf/v2/integration_v2_plus_test.go: `_, err = consumer.TransferOwnership(owner, random.From)`
$DIR/core/services/vrf/v2/integration_v2_plus_test.go: `_, err = consumer.AcceptOwnership(random)`
$DIR/core/services/vrf/v2/integration_v2_plus_test.go: `_, err = consumer.RequestRandomWords(owner, subID, 1, 1, 1, [32]byte{}, false)`
$DIR/core/services/vrf/v2/integration_v2_plus_test.go: `_, err = consumer.RequestRandomWords(random, subID, 1, 1, 1, [32]byte{}, false)`
$DIR/core/services/vrf/v2/integration_v2_plus_test.go: `backend.Commit()`
$DIR/core/services/vrf/v2/integration_v2_plus_test.go: `backend.Commit()`
$DIR/core/services/vrf/v2/integration_v2_plus_test.go: `backend.Commit()`
$DIR/core/services/vrf/v2/integration_v2_plus_test.go: `_, err = coordinator.SetLINKAndLINKNativeFeed(owner, linkAddress, linkEthFeed)`
$DIR/core/services/vrf/v2/integration_v2_plus_test.go: `backend.Commit()`
$DIR/core/services/vrf/v2/integration_v2_plus_test.go: `backend.Commit()`
$DIR/core/services/vrf/v2/integration_v2_plus_test.go: `_, err = linkContract.Transfer(owner, consumerAddress, assets.Ether(2).ToInt())`
$DIR/core/services/vrf/v2/integration_v2_plus_test.go: `backend.Commit()`
$DIR/core/services/vrf/v2/integration_v2_plus_test.go: `AssertLinkBalances(t, linkContract, []common.Address{owner.From, consumerAddress}, []*big.Int{assets.Ether(999_999_998).ToInt(), assets.Ether(2).ToInt()})`
$DIR/core/services/vrf/v2/integration_v2_plus_test.go: `_, err = consumer.TopUpSubscription(owner, assets.Ether(1).ToInt())`
$DIR/core/services/vrf/v2/integration_v2_plus_test.go: `backend.Commit()`
$DIR/core/services/vrf/v2/integration_v2_plus_test.go: `AssertLinkBalances(t, linkContract, []common.Address{owner.From, consumerAddress, coordinatorAddress}, []*big.Int{assets.Ether(999_999_998).ToInt(), assets.Ether(1).ToInt(), assets.Ether(1).ToInt()})`
$DIR/core/services/vrf/v2/integration_v2_plus_test.go: `_, err = consumer.Withdraw(random, assets.Ether(1).ToInt(), owner.From)`
$DIR/core/services/vrf/v2/integration_v2_plus_test.go: `_, err = consumer.Withdraw(owner, assets.Ether(1).ToInt(), owner.From)`
$DIR/core/services/vrf/v2/integration_v2_plus_test.go: `backend.Commit()`
$DIR/core/services/vrf/v2/integration_v2_plus_test.go: `AssertLinkBalances(t, linkContract, []common.Address{owner.From, consumerAddress, coordinatorAddress}, []*big.Int{assets.Ether(999_999_999).ToInt(), assets.Ether(0).ToInt(), assets.Ether(1).ToInt()})`
$DIR/core/services/vrf/v2/integration_v2_plus_test.go: `_, err = consumer.Unsubscribe(owner, owner.From)`
$DIR/core/services/vrf/v2/integration_v2_plus_test.go: `backend.Commit()`
$DIR/core/services/vrf/v2/integration_v2_plus_test.go: `registerProvingKeyHelper(t, uni.coordinatorV2UniverseCommon, uni.rootContract, vrfkey, &defaultMaxGasPrice)`
$DIR/core/services/vrf/v2/integration_v2_plus_test.go: `t.Run("non-proxied consumer", func(tt *testing.T) {
carol := uni.vrfConsumers[0]
carolContract := uni.consumerContracts[0]
carolContractAddress := uni.consumerContractAddresses[0]
_, err = carolContract.CreateSubscriptionAndFund(carol,
big.NewInt(1000000000000000000)) // 0.1 LINK
require.NoError(tt, err)
uni.backend.Commit()
_, err = carolContract.TopUpSubscriptionNative(carol,
big.NewInt(2000000000000000000)) // 0.2 ETH
uni.backend.Commit()
// Ensure even with large number of consumers its still cheap
var addrs []common.Address
for i := 0; i < 99; i++ {
addrs = append(addrs, testutils.NewAddress())
}
_, err = carolContract.UpdateSubscription(carol, addrs)
require.NoError(tt, err)
linkEstimate := estimateGas(tt, uni.backend, common.Address{},
carolContractAddress, uni.consumerABI,
"requestRandomWords", uint32(10000), uint16(2), uint32(1),
vrfkey.PublicKey.MustHash(), false)
tt.Log("gas estimate of non-proxied requestRandomWords with LINK payment:", linkEstimate)
nativeEstimate := estimateGas(tt, uni.backend, common.Address{},
carolContractAddress, uni.consumerABI,
"requestRandomWords", uint32(10000), uint16(2), uint32(1),
vrfkey.PublicKey.MustHash(), false)
tt.Log("gas estimate of non-proxied requestRandomWords with Native payment:", nativeEstimate)
assert.Less(tt, nativeEstimate, uint64(127_000),
"requestRandomWords tx gas cost more than expected")
})`
$DIR/core/services/vrf/v2/integration_v2_plus_test.go: `_, err = carolContract.CreateSubscriptionAndFund(carol,
big.NewInt(1000000000000000000))`
$DIR/core/services/vrf/v2/integration_v2_plus_test.go: `uni.backend.Commit()`
$DIR/core/services/vrf/v2/integration_v2_plus_test.go: `_, err = carolContract.TopUpSubscriptionNative(carol,
big.NewInt(2000000000000000000))`
$DIR/core/services/vrf/v2/integration_v2_plus_test.go: `uni.backend.Commit()`
$DIR/core/services/vrf/v2/integration_v2_plus_test.go: `addrs = append(addrs, testutils.NewAddress())`
$DIR/core/services/vrf/v2/integration_v2_plus_test.go: `_, err = carolContract.UpdateSubscription(carol, addrs)`
$DIR/core/services/vrf/v2/integration_v2_plus_test.go: `uni.backend.Commit()`
$DIR/core/services/vrf/v2/integration_v2_plus_test.go: `_, err = uni.rootContract.GetSubscription(nil, subId)`
$DIR/core/services/vrf/v2/integration_v2_plus_test.go: `uni.backend.Commit()`
$DIR/core/services/vrf/v2/integration_v2_plus_test.go: `addrs = append(addrs, testutils.NewAddress())`
$DIR/core/services/vrf/v2/integration_v2_plus_test.go: `_, err = carolContract.UpdateSubscription(carol, addrs)`
$DIR/core/services/vrf/v2/integration_v2_plus_test.go: `estimate = estimateGas(t, uni.backend, carolContractAddress,
uni.rootContractAddress, uni.coordinatorABI,
"addConsumer", subId, testutils.NewAddress())`
$DIR/core/services/vrf/v2/integration_v2_plus_test.go: `registerProvingKeyHelper(t, uni.coordinatorV2UniverseCommon, uni.rootContract, vrfkey, &defaultMaxGasPrice)`
$DIR/core/services/vrf/v2/integration_v2_plus_test.go: `t.Run("non-proxied consumer", func(tt *testing.T) {
carol := uni.vrfConsumers[0]
carolContract := uni.consumerContracts[0]
carolContractAddress := uni.consumerContractAddresses[0]
_, err = carolContract.CreateSubscriptionAndFund(carol,
big.NewInt(1000000000000000000)) // 0.1 LINK
require.NoError(tt, err)
uni.backend.Commit()
subID, err2 := carolContract.SSubId(nil)
require.NoError(tt, err2)
_, err2 = carolContract.TopUpSubscriptionNative(carol,
big.NewInt(2000000000000000000)) // 0.2 ETH
require.NoError(tt, err2)
gasRequested := 50_000
nw := 1
requestedIncomingConfs := 3
t.Run("native payment", func(tt *testing.T) {
requestAndEstimateFulfillmentCost(
t,
subID,
carol,
vrfkey,
uint16(requestedIncomingConfs),
uint32(gasRequested),
uint32(nw),
carolContract,
carolContractAddress,
uni.coordinatorV2UniverseCommon,
app,
true,
120_000,
500_000,
)
})
t.Run("link payment", func(tt *testing.T) {
requestAndEstimateFulfillmentCost(
t,
subID,
carol,
vrfkey,
uint16(requestedIncomingConfs),
uint32(gasRequested),
uint32(nw),
carolContract,
carolContractAddress,
uni.coordinatorV2UniverseCommon,
app,
false,
120_000,
500_000,
)
})
})`
$DIR/core/services/vrf/v2/integration_v2_plus_test.go: `_, err = carolContract.CreateSubscriptionAndFund(carol,
big.NewInt(1000000000000000000))`
$DIR/core/services/vrf/v2/integration_v2_plus_test.go: `uni.backend.Commit()`
$DIR/core/services/vrf/v2/integration_v2_plus_test.go: `_, err2 = carolContract.TopUpSubscriptionNative(carol,
big.NewInt(2000000000000000000))`
$DIR/core/services/vrf/v2/integration_v2_plus_test.go: `t.Run("native payment", func(tt *testing.T) {
requestAndEstimateFulfillmentCost(
t,
subID,
carol,
vrfkey,
uint16(requestedIncomingConfs),
uint32(gasRequested),
uint32(nw),
carolContract,
carolContractAddress,
uni.coordinatorV2UniverseCommon,
app,
true,
120_000,
500_000,
)
})`
$DIR/core/services/vrf/v2/integration_v2_plus_test.go: `requestAndEstimateFulfillmentCost(
t,
subID,
carol,
vrfkey,
uint16(requestedIncomingConfs),
uint32(gasRequested),
uint32(nw),
carolContract,
carolContractAddress,
uni.coordinatorV2UniverseCommon,
app,
true,
120_000,
500_000,
)`
$DIR/core/services/vrf/v2/integration_v2_plus_test.go: `t.Run("link payment", func(tt *testing.T) {
requestAndEstimateFulfillmentCost(
t,
subID,
carol,
vrfkey,
uint16(requestedIncomingConfs),
uint32(gasRequested),
uint32(nw),
carolContract,
carolContractAddress,
uni.coordinatorV2UniverseCommon,
app,
false,
120_000,
500_000,
)
})`
$DIR/core/services/vrf/v2/integration_v2_plus_test.go: `requestAndEstimateFulfillmentCost(
t,
subID,
carol,
vrfkey,
uint16(requestedIncomingConfs),
uint32(gasRequested),
uint32(nw),
carolContract,
carolContractAddress,
uni.coordinatorV2UniverseCommon,
app,
false,
120_000,
500_000,
)`
$DIR/core/services/vrf/v2/integration_v2_plus_test.go: `uni.backend.Commit()`
$DIR/core/services/vrf/v2/integration_v2_plus_test.go: `requestAndEstimateFulfillmentCost(
t,
subID,
consumerOwner,
vrfkey,
uint16(requestedIncomingConfs),
uint32(gasRequested),
uint32(nw),
consumerContract,
consumerContractAddress,
uni.coordinatorV2UniverseCommon,
app,
false,
120_000,
500_000,
)`
$DIR/core/services/vrf/v2/integration_v2_plus_test.go: `simulatedOverrides(t, assets.GWei(10), toml.KeySpecific{
// Gas lane.
Key: ptr(key1.EIP55Address),
GasEstimator: toml.KeySpecificGasEstimator{PriceMax: gasLanePriceWei},
})(c, s)`
$DIR/core/services/vrf/v2/integration_v2_plus_test.go: `c.EVM[0].GasEstimator.LimitDefault = ptr[uint64](5_000_000)`
$DIR/core/services/vrf/v2/integration_v2_plus_test.go: `c.EVM[0].MinIncomingConfirmations = ptr[uint32](2)`
$DIR/core/services/vrf/v2/integration_v2_plus_test.go: `c.Feature.LogPoller = ptr(true)`
$DIR/core/services/vrf/v2/integration_v2_plus_test.go: `c.EVM[0].LogPollInterval = commonconfig.MustNewDuration(1 * time.Second)`
$DIR/core/services/vrf/v2/integration_v2_plus_test.go: `sendEth(t, ownerKey, uni.backend, key1.Address, 10)`
$DIR/core/services/vrf/v2/integration_v2_plus_test.go: `gomega.NewGomegaWithT(t).Eventually(func() bool {
uni.backend.Commit()
runs, err := app.PipelineORM().GetAllRuns(ctx)
require.NoError(t, err)
t.Log("runs", len(runs))
return len(runs) == 1
}, testutils.WaitTimeout(t), time.Second).Should(gomega.BeTrue())`
$DIR/core/services/vrf/v2/integration_v2_plus_test.go: `uni.backend.Commit()`
$DIR/core/services/vrf/v2/integration_v2_plus_test.go: `mine(t, requestID, subID, uni.backend, db, vrfcommon.V2Plus, testutils.SimulatedChainID)`
$DIR/core/services/vrf/v2/integration_v2_plus_test.go: `assertRandomWordsFulfilled(t, requestID, true, uni.rootContract, false)`
$DIR/core/services/vrf/v2/integration_v2_plus_test.go: `assertNumRandomWords(t, consumerContract, numWords)`
$DIR/core/services/vrf/v2/integration_v2_plus_test.go: `_, err = uni.rootContract.Migrate(consumer, subID, uni.migrationTestCoordinatorAddress)`
$DIR/core/services/vrf/v2/integration_v2_plus_test.go: `uni.backend.Commit()`
$DIR/core/services/vrf/v2/integration_v2_plus_test.go: `_, err = uni.rootContract.CancelSubscription(uni.neil, subID, consumer.From)`
$DIR/core/services/vrf/v2/integration_v2_plus_test.go: `_, err = uni.rootContract.CancelSubscription(consumer, subID, uni.neil.From)`
$DIR/core/services/vrf/v2/integration_v2_plus_test.go: `uni.backend.Commit()`
$DIR/core/services/vrf/v2/integration_v2_plus_test.go: `AssertLinkBalance(t, uni.linkContract, uni.neil.From, linkBalanceBeforeCancel.Add(linkBalanceBeforeCancel, linkAmount))`
$DIR/core/services/vrf/v2/integration_v2_plus_test.go: `.MustGenerateRandomKey(t)`
$DIR/core/services/vrf/v2/integration_v2_plus_test.go: `.Run("link payment", func(tt *testing.T) {
testSingleConsumerHappyPathBatchFulfillment(
t,
ownerKey,
uni.coordinatorV2UniverseCommon,
uni.vrfConsumers[0],
uni.consumerContracts[0],
uni.consumerContractAddresses[0],
uni.rootContract,
uni.rootContractAddress,
uni.batchCoordinatorContractAddress,
nil,
5, // number of requests to send
false, // don't send big callback
vrfcommon.V2Plus,
false,
func(t *testing.T, coordinator v22.CoordinatorV2_X, rwfe v22.RandomWordsFulfilled, expectedSubID *big.Int) {
_, err := coordinator.GetSubscription(nil, rwfe.SubID())
require.NoError(t, err)
require.Equal(t, expectedSubID, rwfe.SubID())
},
)
})`
$DIR/core/services/vrf/v2/integration_v2_plus_test.go: `.GetSubscription(nil, rwfe.SubID())`
$DIR/core/services/vrf/v2/integration_v2_plus_test.go: `.SubID()`
$DIR/core/services/vrf/v2/integration_v2_plus_test.go: `.GetSubscription(nil, rwfe.SubID())`
$DIR/core/services/vrf/v2/integration_v2_plus_test.go: `.SubID()`
$DIR/core/services/vrf/v2/integration_v2_plus_test.go: `.MustGenerateRandomKey(t)`
$DIR/core/services/vrf/v2/integration_v2_plus_test.go: `.Run("link payment", func(tt *testing.T) {
testSingleConsumerHappyPathBatchFulfillment(
t,
ownerKey,
uni.coordinatorV2UniverseCommon,
uni.vrfConsumers[0],
uni.consumerContracts[0],
uni.consumerContractAddresses[0],
uni.rootContract,
uni.rootContractAddress,
uni.batchCoordinatorContractAddress,
nil,
5, // number of requests to send
true, // send big callback
vrfcommon.V2Plus,
false,
func(t *testing.T, coordinator v22.CoordinatorV2_X, rwfe v22.RandomWordsFulfilled, expectedSubID *big.Int) {
_, err := coordinator.GetSubscription(nil, rwfe.SubID())
require.NoError(t, err)
require.Equal(t, expectedSubID, rwfe.SubID())
},
)
})`
$DIR/core/services/vrf/v2/integration_v2_plus_test.go: `.GetSubscription(nil, rwfe.SubID())`
$DIR/core/services/vrf/v2/integration_v2_plus_test.go: `.SubID()`
$DIR/core/services/vrf/v2/integration_v2_plus_test.go: `.GetSubscription(nil, rwfe.SubID())`
$DIR/core/services/vrf/v2/integration_v2_plus_test.go: `.SubID()`
$DIR/core/services/vrf/v2/integration_v2_plus_test.go: `.MustGenerateRandomKey(t)`
$DIR/core/services/vrf/v2/integration_v2_plus_test.go: `.Run("link payment", func(tt *testing.T) {
testSingleConsumerHappyPath(
t,
ownerKey,
uni.coordinatorV2UniverseCommon,
uni.vrfConsumers[0],
uni.consumerContracts[0],
uni.consumerContractAddresses[0],
uni.rootContract,
uni.rootContractAddress,
uni.batchCoordinatorContractAddress,
nil,
vrfcommon.V2Plus,
false,
func(t *testing.T, coordinator v22.CoordinatorV2_X, rwfe v22.RandomWordsFulfilled, expectedSubID *big.Int) {
_, err := coordinator.GetSubscription(nil, rwfe.SubID())
require.NoError(t, err)
require.Equal(t, expectedSubID, rwfe.SubID())
})
})`
$DIR/core/services/vrf/v2/integration_v2_plus_test.go: `.GetSubscription(nil, rwfe.SubID())`
$DIR/core/services/vrf/v2/integration_v2_plus_test.go: `.SubID()`
$DIR/core/services/vrf/v2/integration_v2_plus_test.go: `.GetSubscription(nil, rwfe.SubID())`
$DIR/core/services/vrf/v2/integration_v2_plus_test.go: `.SubID()`
$DIR/core/services/vrf/v2/integration_v2_plus_test.go: `.MustGenerateRandomKey(t)`
$DIR/core/services/vrf/v2/integration_v2_plus_test.go: `.MustGenerateRandomKey(t)`
$DIR/core/services/vrf/v2/integration_v2_plus_test.go: `.MustGenerateRandomKey(t)`
$DIR/core/services/vrf/v2/integration_v2_plus_test.go: `.MustGenerateRandomKey(t)`
$DIR/core/services/vrf/v2/integration_v2_plus_test.go: `.MustGenerateRandomKey(t)`
$DIR/core/services/vrf/v2/integration_v2_plus_test.go: `.Run("link payment", func(tt *testing.T) {
testMultipleConsumersNeedBHS(
t,
ownerKey,
uni.coordinatorV2UniverseCommon,
uni.vrfConsumers,
uni.consumerContracts,
uni.consumerContractAddresses,
uni.rootContract,
uni.rootContractAddress,
uni.batchCoordinatorContractAddress,
nil,
vrfcommon.V2Plus,
false,
)
})`
$DIR/core/services/vrf/v2/integration_v2_plus_test.go: `.MustGenerateRandomKey(t)`
$DIR/core/services/vrf/v2/integration_v2_plus_test.go: `.Run("link payment", func(tt *testing.T) {
testBlockHeaderFeeder(
t,
ownerKey,
uni.coordinatorV2UniverseCommon,
uni.vrfConsumers,
uni.consumerContracts,
uni.consumerContractAddresses,
uni.rootContract,
uni.rootContractAddress,
uni.batchCoordinatorContractAddress,
nil,
vrfcommon.V2Plus,
false,
)
})`
$DIR/core/services/vrf/v2/integration_v2_plus_test.go: `.MustGenerateRandomKey(t)`
$DIR/core/services/vrf/v2/integration_v2_plus_test.go: `.Run("link payment", func(tt *testing.T) {
testSingleConsumerNeedsTopUp(
t,
ownerKey,
uni.coordinatorV2UniverseCommon,
uni.vrfConsumers[0],
uni.consumerContracts[0],
uni.consumerContractAddresses[0],
uni.rootContract,
uni.rootContractAddress,
uni.batchCoordinatorContractAddress,
nil,
assets.Ether(1).ToInt(), // initial funding of 1 LINK
assets.Ether(100).ToInt(), // top up of 100 LINK
vrfcommon.V2Plus,
false,
)
})`
$DIR/core/services/vrf/v2/integration_v2_plus_test.go: `.Ether(1)`
$DIR/core/services/vrf/v2/integration_v2_plus_test.go: `.ToInt()`
$DIR/core/services/vrf/v2/integration_v2_plus_test.go: `.Ether(100)`
$DIR/core/services/vrf/v2/integration_v2_plus_test.go: `.ToInt()`
$DIR/core/services/vrf/v2/integration_v2_plus_test.go: `.NewInt(1e17)`
$DIR/core/services/vrf/v2/integration_v2_plus_test.go: `.Ether(100)`
$DIR/core/services/vrf/v2/integration_v2_plus_test.go: `.ToInt()`
$DIR/core/services/vrf/v2/integration_v2_plus_test.go: `.MustGenerateRandomKey(t)`
$DIR/core/services/vrf/v2/integration_v2_plus_test.go: `.MustGenerateRandomKey(t)`
$DIR/core/services/vrf/v2/integration_v2_plus_test.go: `.MustGenerateRandomKey(t)`
$DIR/core/services/vrf/v2/integration_v2_plus_test.go: `.MustGenerateRandomKey(t)`
$DIR/core/services/vrf/v2/integration_v2_plus_test.go: `.MustGenerateRandomKey(t)`
$DIR/core/services/vrf/v2/integration_v2_plus_test.go: `.MustNewSimTransactor(t)`
$DIR/core/services/vrf/v2/integration_v2_plus_test.go: `.MustNewSimTransactor(t)`
$DIR/core/services/vrf/v2/integration_v2_plus_test.go: `.Ether(10)`
$DIR/core/services/vrf/v2/integration_v2_plus_test.go: `.ToInt()`
$DIR/core/services/vrf/v2/integration_v2_plus_test.go: `.Ether(10)`
$DIR/core/services/vrf/v2/integration_v2_plus_test.go: `.ToInt()`
$DIR/core/services/vrf/v2/integration_v2_plus_test.go: `.NewSimulatedBackend(t, genesisData, uint32(ethconfig.Defaults.Miner.GasCeil))`
$DIR/core/services/vrf/v2/integration_v2_plus_test.go: `.DeployLinkToken(
owner, backend)`
$DIR/core/services/vrf/v2/integration_v2_plus_test.go: `.Commit()`
$DIR/core/services/vrf/v2/integration_v2_plus_test.go: `.DeployMockV3AggregatorContract(
owner, backend, 18, vrftesthelpers.WeiPerUnitLink.BigInt())`
$DIR/core/services/vrf/v2/integration_v2_plus_test.go: `.WeiPerUnitLink.BigInt()`
$DIR/core/services/vrf/v2/integration_v2_plus_test.go: `.Commit()`
$DIR/core/services/vrf/v2/integration_v2_plus_test.go: `.DeployVRFCoordinatorV25(
owner, backend, common.Address{})`
$DIR/core/services/vrf/v2/integration_v2_plus_test.go: `.SetConfig(owner,
uint16(1), // minimumRequestConfirmations
uint32(10000), // maxGasLimit
1, // stalenessSeconds
1, // gasAfterPaymentCalculation
big.NewInt(10), // fallbackWeiPerUnitLink
0, // fulfillmentFlatFeeNativePPM
0, // fulfillmentFlatFeeLinkDiscountPPM
0, // nativePremiumPercentage
0, // linkPremiumPercentage
)`
$DIR/core/services/vrf/v2/integration_v2_plus_test.go: `.NewInt(10)`
$DIR/core/services/vrf/v2/integration_v2_plus_test.go: `.Commit()`
$DIR/core/services/vrf/v2/integration_v2_plus_test.go: `.SetLINKAndLINKNativeFeed(owner, linkAddress, linkEthFeed)`
$DIR/core/services/vrf/v2/integration_v2_plus_test.go: `.Commit()`
$DIR/core/services/vrf/v2/integration_v2_plus_test.go: `.DeployVRFV2PlusExternalSubOwnerExample(owner, backend, coordinatorAddress, linkAddress)`
$DIR/core/services/vrf/v2/integration_v2_plus_test.go: `.Commit()`
$DIR/core/services/vrf/v2/integration_v2_plus_test.go: `.Transfer(owner, consumerAddress, assets.Ether(2).ToInt())`
$DIR/core/services/vrf/v2/integration_v2_plus_test.go: `.Ether(2)`
$DIR/core/services/vrf/v2/integration_v2_plus_test.go: `.ToInt()`
$DIR/core/services/vrf/v2/integration_v2_plus_test.go: `.Commit()`
$DIR/core/services/vrf/v2/integration_v2_plus_test.go: `.Ether(999_999_998)`
$DIR/core/services/vrf/v2/integration_v2_plus_test.go: `.ToInt()`
$DIR/core/services/vrf/v2/integration_v2_plus_test.go: `.Ether(2)`
$DIR/core/services/vrf/v2/integration_v2_plus_test.go: `.ToInt()`
$DIR/core/services/vrf/v2/integration_v2_plus_test.go: `.CreateSubscription(owner)`
$DIR/core/services/vrf/v2/integration_v2_plus_test.go: `.Commit()`
$DIR/core/services/vrf/v2/integration_v2_plus_test.go: `.FilterSubscriptionCreated(nil, nil)`
$DIR/core/services/vrf/v2/integration_v2_plus_test.go: `.ABIEncode(`[{"type":"uint256"}]`, subID)`
$DIR/core/services/vrf/v2/integration_v2_plus_test.go: `.TransferAndCall(owner, coordinatorAddress, big.NewInt(0), b)`
$DIR/core/services/vrf/v2/integration_v2_plus_test.go: `.NewInt(0)`
$DIR/core/services/vrf/v2/integration_v2_plus_test.go: `.AddConsumer(owner, subID, consumerAddress)`
$DIR/core/services/vrf/v2/integration_v2_plus_test.go: `.RequestRandomWords(random, subID, 1, 1, 1, [32]byte{}, false)`
$DIR/core/services/vrf/v2/integration_v2_plus_test.go: `.RequestRandomWords(owner, subID, 1, 1, 1, [32]byte{}, false)`
$DIR/core/services/vrf/v2/integration_v2_plus_test.go: `.TransferOwnership(owner, random.From)`
$DIR/core/services/vrf/v2/integration_v2_plus_test.go: `.AcceptOwnership(random)`
$DIR/core/services/vrf/v2/integration_v2_plus_test.go: `.RequestRandomWords(owner, subID, 1, 1, 1, [32]byte{}, false)`
$DIR/core/services/vrf/v2/integration_v2_plus_test.go: `.RequestRandomWords(random, subID, 1, 1, 1, [32]byte{}, false)`
$DIR/core/services/vrf/v2/integration_v2_plus_test.go: `.MustNewSimTransactor(t)`
$DIR/core/services/vrf/v2/integration_v2_plus_test.go: `.MustNewSimTransactor(t)`
$DIR/core/services/vrf/v2/integration_v2_plus_test.go: `.Ether(10)`
$DIR/core/services/vrf/v2/integration_v2_plus_test.go: `.ToInt()`
$DIR/core/services/vrf/v2/integration_v2_plus_test.go: `.NewSimulatedBackend(t, genesisData, uint32(ethconfig.Defaults.Miner.GasCeil))`
$DIR/core/services/vrf/v2/integration_v2_plus_test.go: `.DeployLinkToken(
owner, backend)`
$DIR/core/services/vrf/v2/integration_v2_plus_test.go: `.Commit()`
$DIR/core/services/vrf/v2/integration_v2_plus_test.go: `.DeployMockV3AggregatorContract(
owner, backend, 18, vrftesthelpers.WeiPerUnitLink.BigInt())`
$DIR/core/services/vrf/v2/integration_v2_plus_test.go: `.WeiPerUnitLink.BigInt()`
$DIR/core/services/vrf/v2/integration_v2_plus_test.go: `.Commit()`
$DIR/core/services/vrf/v2/integration_v2_plus_test.go: `.DeployVRFCoordinatorV25(
owner, backend, common.Address{})`
$DIR/core/services/vrf/v2/integration_v2_plus_test.go: `.Commit()`
$DIR/core/services/vrf/v2/integration_v2_plus_test.go: `.SetLINKAndLINKNativeFeed(owner, linkAddress, linkEthFeed)`
$DIR/core/services/vrf/v2/integration_v2_plus_test.go: `.Commit()`
$DIR/core/services/vrf/v2/integration_v2_plus_test.go: `.DeployVRFV2PlusSingleConsumerExample(owner, backend, coordinatorAddress, linkAddress, 1, 1, 1, [32]byte{}, false)`
$DIR/core/services/vrf/v2/integration_v2_plus_test.go: `.Commit()`
$DIR/core/services/vrf/v2/integration_v2_plus_test.go: `.Transfer(owner, consumerAddress, assets.Ether(2).ToInt())`
$DIR/core/services/vrf/v2/integration_v2_plus_test.go: `.Ether(2)`
$DIR/core/services/vrf/v2/integration_v2_plus_test.go: `.ToInt()`
$DIR/core/services/vrf/v2/integration_v2_plus_test.go: `.Commit()`
$DIR/core/services/vrf/v2/integration_v2_plus_test.go: `.Ether(999_999_998)`
$DIR/core/services/vrf/v2/integration_v2_plus_test.go: `.ToInt()`
$DIR/core/services/vrf/v2/integration_v2_plus_test.go: `.Ether(2)`
$DIR/core/services/vrf/v2/integration_v2_plus_test.go: `.ToInt()`
$DIR/core/services/vrf/v2/integration_v2_plus_test.go: `.TopUpSubscription(owner, assets.Ether(1).ToInt())`
$DIR/core/services/vrf/v2/integration_v2_plus_test.go: `.Ether(1)`
$DIR/core/services/vrf/v2/integration_v2_plus_test.go: `.ToInt()`
$DIR/core/services/vrf/v2/integration_v2_plus_test.go: `.Commit()`
$DIR/core/services/vrf/v2/integration_v2_plus_test.go: `.Ether(999_999_998)`
$DIR/core/services/vrf/v2/integration_v2_plus_test.go: `.ToInt()`
$DIR/core/services/vrf/v2/integration_v2_plus_test.go: `.Ether(1)`
$DIR/core/services/vrf/v2/integration_v2_plus_test.go: `.ToInt()`
$DIR/core/services/vrf/v2/integration_v2_plus_test.go: `.Ether(1)`
$DIR/core/services/vrf/v2/integration_v2_plus_test.go: `.ToInt()`
$DIR/core/services/vrf/v2/integration_v2_plus_test.go: `.Withdraw(random, assets.Ether(1).ToInt(), owner.From)`
$DIR/core/services/vrf/v2/integration_v2_plus_test.go: `.Ether(1)`
$DIR/core/services/vrf/v2/integration_v2_plus_test.go: `.ToInt()`
$DIR/core/services/vrf/v2/integration_v2_plus_test.go: `.Withdraw(owner, assets.Ether(1).ToInt(), owner.From)`
$DIR/core/services/vrf/v2/integration_v2_plus_test.go: `.Ether(1)`
$DIR/core/services/vrf/v2/integration_v2_plus_test.go: `.ToInt()`
$DIR/core/services/vrf/v2/integration_v2_plus_test.go: `.Commit()`
$DIR/core/services/vrf/v2/integration_v2_plus_test.go: `.Ether(999_999_999)`
$DIR/core/services/vrf/v2/integration_v2_plus_test.go: `.ToInt()`
$DIR/core/services/vrf/v2/integration_v2_plus_test.go: `.Ether(0)`
$DIR/core/services/vrf/v2/integration_v2_plus_test.go: `.ToInt()`
$DIR/core/services/vrf/v2/integration_v2_plus_test.go: `.Ether(1)`
$DIR/core/services/vrf/v2/integration_v2_plus_test.go: `.ToInt()`
$DIR/core/services/vrf/v2/integration_v2_plus_test.go: `.Unsubscribe(owner, owner.From)`
$DIR/core/services/vrf/v2/integration_v2_plus_test.go: `.Commit()`
$DIR/core/services/vrf/v2/integration_v2_plus_test.go: `.Ether(1_000_000_000)`
$DIR/core/services/vrf/v2/integration_v2_plus_test.go: `.ToInt()`
$DIR/core/services/vrf/v2/integration_v2_plus_test.go: `.Ether(0)`
$DIR/core/services/vrf/v2/integration_v2_plus_test.go: `.ToInt()`
$DIR/core/services/vrf/v2/integration_v2_plus_test.go: `.Ether(0)`
$DIR/core/services/vrf/v2/integration_v2_plus_test.go: `.ToInt()`
$DIR/core/services/vrf/v2/integration_v2_plus_test.go: `.MustGenerateRandomKey(t)`
$DIR/core/services/vrf/v2/integration_v2_plus_test.go: `.Context(t)`
$DIR/core/services/vrf/v2/integration_v2_plus_test.go: `.MustGenerateRandomKey(t)`
$DIR/core/services/vrf/v2/integration_v2_plus_test.go: `.NewGeneralConfigSimulated(t, nil)`
$DIR/core/services/vrf/v2/integration_v2_plus_test.go: `.NewApplicationWithConfigV2AndKeyOnSimulatedBlockchain(t, cfg, uni.backend, key)`
$DIR/core/services/vrf/v2/integration_v2_plus_test.go: `.GetKeyStore()`
$DIR/core/services/vrf/v2/integration_v2_plus_test.go: `.VRF()`
$DIR/core/services/vrf/v2/integration_v2_plus_test.go: `.Create(ctx)`
$DIR/core/services/vrf/v2/integration_v2_plus_test.go: `.Run("non-proxied consumer", func(tt *testing.T) {
carol := uni.vrfConsumers[0]
carolContract := uni.consumerContracts[0]
carolContractAddress := uni.consumerContractAddresses[0]
_, err = carolContract.CreateSubscriptionAndFund(carol,
big.NewInt(1000000000000000000)) // 0.1 LINK
require.NoError(tt, err)
uni.backend.Commit()
_, err = carolContract.TopUpSubscriptionNative(carol,
big.NewInt(2000000000000000000)) // 0.2 ETH
uni.backend.Commit()
// Ensure even with large number of consumers its still cheap
var addrs []common.Address
for i := 0; i < 99; i++ {
addrs = append(addrs, testutils.NewAddress())
}
_, err = carolContract.UpdateSubscription(carol, addrs)
require.NoError(tt, err)
linkEstimate := estimateGas(tt, uni.backend, common.Address{},
carolContractAddress, uni.consumerABI,
"requestRandomWords", uint32(10000), uint16(2), uint32(1),
vrfkey.PublicKey.MustHash(), false)
tt.Log("gas estimate of non-proxied requestRandomWords with LINK payment:", linkEstimate)
nativeEstimate := estimateGas(tt, uni.backend, common.Address{},
carolContractAddress, uni.consumerABI,
"requestRandomWords", uint32(10000), uint16(2), uint32(1),
vrfkey.PublicKey.MustHash(), false)
tt.Log("gas estimate of non-proxied requestRandomWords with Native payment:", nativeEstimate)
assert.Less(tt, nativeEstimate, uint64(127_000),
"requestRandomWords tx gas cost more than expected")
})`
$DIR/core/services/vrf/v2/integration_v2_plus_test.go: `.CreateSubscriptionAndFund(carol,
big.NewInt(1000000000000000000))`
$DIR/core/services/vrf/v2/integration_v2_plus_test.go: `.NewInt(1000000000000000000)`
$DIR/core/services/vrf/v2/integration_v2_plus_test.go: `.backend.Commit()`
$DIR/core/services/vrf/v2/integration_v2_plus_test.go: `.TopUpSubscriptionNative(carol,
big.NewInt(2000000000000000000))`
$DIR/core/services/vrf/v2/integration_v2_plus_test.go: `.NewInt(2000000000000000000)`
$DIR/core/services/vrf/v2/integration_v2_plus_test.go: `.backend.Commit()`
$DIR/core/services/vrf/v2/integration_v2_plus_test.go: `.NewAddress()`
$DIR/core/services/vrf/v2/integration_v2_plus_test.go: `.UpdateSubscription(carol, addrs)`
$DIR/core/services/vrf/v2/integration_v2_plus_test.go: `.PublicKey.MustHash()`
$DIR/core/services/vrf/v2/integration_v2_plus_test.go: `.PublicKey.MustHash()`
$DIR/core/services/vrf/v2/integration_v2_plus_test.go: `.CreateSubscriptionAndFund(consumerOwner, assets.Ether(5).ToInt())`
$DIR/core/services/vrf/v2/integration_v2_plus_test.go: `.Ether(5)`
$DIR/core/services/vrf/v2/integration_v2_plus_test.go: `.ToInt()`
$DIR/core/services/vrf/v2/integration_v2_plus_test.go: `.backend.Commit()`
$DIR/core/services/vrf/v2/integration_v2_plus_test.go: `.backend.TransactionReceipt(testutils.Context(t), tx.Hash())`
$DIR/core/services/vrf/v2/integration_v2_plus_test.go: `.Context(t)`
$DIR/core/services/vrf/v2/integration_v2_plus_test.go: `.Hash()`
$DIR/core/services/vrf/v2/integration_v2_plus_test.go: `.SSubId(nil)`
$DIR/core/services/vrf/v2/integration_v2_plus_test.go: `.rootContract.GetSubscription(nil, subId)`
$DIR/core/services/vrf/v2/integration_v2_plus_test.go: `.MustGetABI(vrf_consumer_v2_plus_upgradeable_example.VRFConsumerV2PlusUpgradeableExampleMetaData.ABI)`
$DIR/core/services/vrf/v2/integration_v2_plus_test.go: `.PublicKey.MustHash()`
$DIR/core/services/vrf/v2/integration_v2_plus_test.go: `.MustGenerateRandomKey(t)`
$DIR/core/services/vrf/v2/integration_v2_plus_test.go: `.NewGeneralConfigSimulated(t, nil)`
$DIR/core/services/vrf/v2/integration_v2_plus_test.go: `.NewApplicationWithConfigV2AndKeyOnSimulatedBlockchain(t, cfg, uni.backend, key)`
$DIR/core/services/vrf/v2/integration_v2_plus_test.go: `.CreateSubscriptionAndFund(carol,
big.NewInt(1000000000000000000))`
$DIR/core/services/vrf/v2/integration_v2_plus_test.go: `.NewInt(1000000000000000000)`
$DIR/core/services/vrf/v2/integration_v2_plus_test.go: `.backend.Commit()`
$DIR/core/services/vrf/v2/integration_v2_plus_test.go: `.SSubId(nil)`
$DIR/core/services/vrf/v2/integration_v2_plus_test.go: `.NewAddress()`
$DIR/core/services/vrf/v2/integration_v2_plus_test.go: `.UpdateSubscription(carol, addrs)`
$DIR/core/services/vrf/v2/integration_v2_plus_test.go: `.NewAddress()`
$DIR/core/services/vrf/v2/integration_v2_plus_test.go: `.Context(t)`
$DIR/core/services/vrf/v2/integration_v2_plus_test.go: `.MustGenerateRandomKey(t)`
$DIR/core/services/vrf/v2/integration_v2_plus_test.go: `.NewGeneralConfigSimulated(t, nil)`
$DIR/core/services/vrf/v2/integration_v2_plus_test.go: `.NewApplicationWithConfigV2AndKeyOnSimulatedBlockchain(t, cfg, uni.backend, key)`
$DIR/core/services/vrf/v2/integration_v2_plus_test.go: `.GetKeyStore()`
$DIR/core/services/vrf/v2/integration_v2_plus_test.go: `.VRF()`
$DIR/core/services/vrf/v2/integration_v2_plus_test.go: `.Create(ctx)`
$DIR/core/services/vrf/v2/integration_v2_plus_test.go: `.Run("non-proxied consumer", func(tt *testing.T) {
carol := uni.vrfConsumers[0]
carolContract := uni.consumerContracts[0]
carolContractAddress := uni.consumerContractAddresses[0]
_, err = carolContract.CreateSubscriptionAndFund(carol,
big.NewInt(1000000000000000000)) // 0.1 LINK
require.NoError(tt, err)
uni.backend.Commit()
subID, err2 := carolContract.SSubId(nil)
require.NoError(tt, err2)
_, err2 = carolContract.TopUpSubscriptionNative(carol,
big.NewInt(2000000000000000000)) // 0.2 ETH
require.NoError(tt, err2)
gasRequested := 50_000
nw := 1
requestedIncomingConfs := 3
t.Run("native payment", func(tt *testing.T) {
requestAndEstimateFulfillmentCost(
t,
subID,
carol,
vrfkey,
uint16(requestedIncomingConfs),
uint32(gasRequested),
uint32(nw),
carolContract,
carolContractAddress,
uni.coordinatorV2UniverseCommon,
app,
true,
120_000,
500_000,
)
})
t.Run("link payment", func(tt *testing.T) {
requestAndEstimateFulfillmentCost(
t,
subID,
carol,
vrfkey,
uint16(requestedIncomingConfs),
uint32(gasRequested),
uint32(nw),
carolContract,
carolContractAddress,
uni.coordinatorV2UniverseCommon,
app,
false,
120_000,
500_000,
)
})
})`
$DIR/core/services/vrf/v2/integration_v2_plus_test.go: `.CreateSubscriptionAndFund(carol,
big.NewInt(1000000000000000000))`
$DIR/core/services/vrf/v2/integration_v2_plus_test.go: `.NewInt(1000000000000000000)`
$DIR/core/services/vrf/v2/integration_v2_plus_test.go: `.backend.Commit()`
$DIR/core/services/vrf/v2/integration_v2_plus_test.go: `.SSubId(nil)`
$DIR/core/services/vrf/v2/integration_v2_plus_test.go: `.TopUpSubscriptionNative(carol,
big.NewInt(2000000000000000000))`
$DIR/core/services/vrf/v2/integration_v2_plus_test.go: `.NewInt(2000000000000000000)`
$DIR/core/services/vrf/v2/integration_v2_plus_test.go: `.Run("native payment", func(tt *testing.T) {
requestAndEstimateFulfillmentCost(
t,
subID,
carol,
vrfkey,
uint16(requestedIncomingConfs),
uint32(gasRequested),
uint32(nw),
carolContract,
carolContractAddress,
uni.coordinatorV2UniverseCommon,
app,
true,
120_000,
500_000,
)
})`
$DIR/core/services/vrf/v2/integration_v2_plus_test.go: `.Run("link payment", func(tt *testing.T) {
requestAndEstimateFulfillmentCost(
t,
subID,
carol,
vrfkey,
uint16(requestedIncomingConfs),
uint32(gasRequested),
uint32(nw),
carolContract,
carolContractAddress,
uni.coordinatorV2UniverseCommon,
app,
false,
120_000,
500_000,
)
})`
$DIR/core/services/vrf/v2/integration_v2_plus_test.go: `.CreateSubscriptionAndFund(consumerOwner, assets.Ether(5).ToInt())`
$DIR/core/services/vrf/v2/integration_v2_plus_test.go: `.Ether(5)`
$DIR/core/services/vrf/v2/integration_v2_plus_test.go: `.ToInt()`
$DIR/core/services/vrf/v2/integration_v2_plus_test.go: `.backend.Commit()`
$DIR/core/services/vrf/v2/integration_v2_plus_test.go: `.SSubId(nil)`
$DIR/core/services/vrf/v2/integration_v2_plus_test.go: `.Context(t)`
$DIR/core/services/vrf/v2/integration_v2_plus_test.go: `.MustGenerateRandomKey(t)`
$DIR/core/services/vrf/v2/integration_v2_plus_test.go: `.MustGenerateRandomKey(t)`
$DIR/core/services/vrf/v2/integration_v2_plus_test.go: `.GWei(10)`
$DIR/core/services/vrf/v2/integration_v2_plus_test.go: `.FullTestDBV2(t, func(c *chainlink.Config, s *chainlink.Secrets) {
simulatedOverrides(t, assets.GWei(10), toml.KeySpecific{
// Gas lane.
Key: ptr(key1.EIP55Address),
GasEstimator: toml.KeySpecificGasEstimator{PriceMax: gasLanePriceWei},
})(c, s)
c.EVM[0].GasEstimator.LimitDefault = ptr[uint64](5_000_000)
c.EVM[0].MinIncomingConfirmations = ptr[uint32](2)
c.Feature.LogPoller = ptr(true)
c.EVM[0].LogPollInterval = commonconfig.MustNewDuration(1 * time.Second)
})`
$DIR/core/services/vrf/v2/integration_v2_plus_test.go: `.GWei(10)`
$DIR/core/services/vrf/v2/integration_v2_plus_test.go: `.MustNewDuration(1 * time.Second)`
$DIR/core/services/vrf/v2/integration_v2_plus_test.go: `.NewApplicationWithConfigV2AndKeyOnSimulatedBlockchain(t, config, uni.backend, ownerKey, key1)`
$DIR/core/services/vrf/v2/integration_v2_plus_test.go: `.SetUint64(5e18)`
$DIR/core/services/vrf/v2/integration_v2_plus_test.go: `.SetUint64(3e18)`
$DIR/core/services/vrf/v2/integration_v2_plus_test.go: `.VRFSpec.PublicKey.MustHash()`
$DIR/core/services/vrf/v2/integration_v2_plus_test.go: `.NewGomegaWithT(t)`
$DIR/core/services/vrf/v2/integration_v2_plus_test.go: `.Eventually(func() bool {
uni.backend.Commit()
runs, err := app.PipelineORM().GetAllRuns(ctx)
require.NoError(t, err)
t.Log("runs", len(runs))
return len(runs) == 1
}, testutils.WaitTimeout(t), time.Second)`
$DIR/core/services/vrf/v2/integration_v2_plus_test.go: `.backend.Commit()`
$DIR/core/services/vrf/v2/integration_v2_plus_test.go: `.PipelineORM()`
$DIR/core/services/vrf/v2/integration_v2_plus_test.go: `.GetAllRuns(ctx)`
$DIR/core/services/vrf/v2/integration_v2_plus_test.go: `.WaitTimeout(t)`
$DIR/core/services/vrf/v2/integration_v2_plus_test.go: `.Should(gomega.BeTrue())`
$DIR/core/services/vrf/v2/integration_v2_plus_test.go: `.BeTrue()`
$DIR/core/services/vrf/v2/integration_v2_plus_test.go: `.SRandomWords(nil, big.NewInt(0))`
$DIR/core/services/vrf/v2/integration_v2_plus_test.go: `.NewInt(0)`
$DIR/core/services/vrf/v2/integration_v2_plus_test.go: `.rootContract.GetSubscription(nil, subID)`
$DIR/core/services/vrf/v2/integration_v2_plus_test.go: `.rootContract.Migrate(consumer, subID, uni.migrationTestCoordinatorAddress)`
$DIR/core/services/vrf/v2/integration_v2_plus_test.go: `.backend.Commit()`
$DIR/core/services/vrf/v2/integration_v2_plus_test.go: `.migrationTestCoordinator.GetSubscription(nil, subID)`
$DIR/core/services/vrf/v2/integration_v2_plus_test.go: `.migrationTestCoordinator.STotalLinkBalance(nil)`
$DIR/core/services/vrf/v2/integration_v2_plus_test.go: `.migrationTestCoordinator.STotalNativeBalance(nil)`
$DIR/core/services/vrf/v2/integration_v2_plus_test.go: `.linkContract.BalanceOf(nil, uni.migrationTestCoordinatorAddress)`
$DIR/core/services/vrf/v2/integration_v2_plus_test.go: `.backend.BalanceAt(ctx, uni.migrationTestCoordinatorAddress, nil)`
$DIR/core/services/vrf/v2/integration_v2_plus_test.go: `.Consumers()`
$DIR/core/services/vrf/v2/integration_v2_plus_test.go: `.MustGenerateRandomKey(t)`
$DIR/core/services/vrf/v2/integration_v2_plus_test.go: `.SetUint64(5e18)`
$DIR/core/services/vrf/v2/integration_v2_plus_test.go: `.SetUint64(3e18)`
$DIR/core/services/vrf/v2/integration_v2_plus_test.go: `.linkContract.BalanceOf(nil, uni.neil.From)`
$DIR/core/services/vrf/v2/integration_v2_plus_test.go: `.backend.BalanceAt(testutils.Context(t), uni.neil.From, nil)`
$DIR/core/services/vrf/v2/integration_v2_plus_test.go: `.Context(t)`
$DIR/core/services/vrf/v2/integration_v2_plus_test.go: `.rootContract.CancelSubscription(uni.neil, subID, consumer.From)`
$DIR/core/services/vrf/v2/integration_v2_plus_test.go: `.rootContract.CancelSubscription(consumer, subID, uni.neil.From)`
$DIR/core/services/vrf/v2/integration_v2_plus_test.go: `.backend.Commit()`
$DIR/core/services/vrf/v2/integration_v2_plus_test.go: `.Add(linkBalanceBeforeCancel, linkAmount)`
$DIR/core/services/vrf/v2/integration_v2_plus_test.go: `.Add(nativeBalanceBeforeCancel, nativeAmount)`
$DIR/core/services/vrf/v2/integration_v2_plus_test.go: `.MustGenerateRandomKey(t)`
$DIR/core/services/vrf/v2/integration_v2_reverted_txns_test.go: `req = fulfillVRFReq(t, th, req, th.subs[0], false, nil)`
$DIR/core/services/vrf/v2/integration_v2_reverted_txns_test.go: `waitForForceFulfillment(t, th, req, th.subs[0], true, 1)`
$DIR/core/services/vrf/v2/integration_v2_reverted_txns_test.go: `reqs[i] = makeVRFReq(t, th, th.subs[0])`
$DIR/core/services/vrf/v2/integration_v2_reverted_txns_test.go: `fulfilBatchVRFReq(t, th, reqs, th.subs[0])`
$DIR/core/services/vrf/v2/integration_v2_reverted_txns_test.go: `success = true`
$DIR/core/services/vrf/v2/integration_v2_reverted_txns_test.go: `waitForForceFulfillment(t, th, reqs[i], th.subs[0], success, 1)`
$DIR/core/services/vrf/v2/integration_v2_reverted_txns_test.go: `req = fulfillVRFReq(t, th, req, th.subs[0], true, ptr(uint64(7)))`
$DIR/core/services/vrf/v2/integration_v2_reverted_txns_test.go: `waitForForceFulfillment(t, th, req, th.subs[0], true, 2)`
$DIR/core/services/vrf/v2/integration_v2_reverted_txns_test.go: `req = fulfillVRFReq(t, th, req, th.subs[0], true, nil)`
$DIR/core/services/vrf/v2/integration_v2_reverted_txns_test.go: `waitForForceFulfillment(t, th, req, th.subs[0], true, 2)`
$DIR/core/services/vrf/v2/integration_v2_reverted_txns_test.go: `allForceTxns = append(allForceTxns, revertedForceTxns...)`
$DIR/core/services/vrf/v2/integration_v2_reverted_txns_test.go: `allForceTxns = append(allForceTxns, v2.TxnReceiptDB{RequestID: common.BigToHash(big.NewInt(2)).Hex(),
ForceFulfillmentAttempt: 5})`
$DIR/core/services/vrf/v2/integration_v2_reverted_txns_test.go: `.MustGenerateRandomKey(t)`
$DIR/core/services/vrf/v2/integration_v2_reverted_txns_test.go: `.MustGenerateRandomKey(t)`
$DIR/core/services/vrf/v2/integration_v2_reverted_txns_test.go: `.MustGenerateRandomKey(t)`
$DIR/core/services/vrf/v2/integration_v2_reverted_txns_test.go: `.MustGenerateRandomKey(t)`
$DIR/core/services/vrf/v2/integration_v2_reverted_txns_test.go: `.BigToHash(big.NewInt(1))`
$DIR/core/services/vrf/v2/integration_v2_reverted_txns_test.go: `.NewInt(1)`
$DIR/core/services/vrf/v2/integration_v2_reverted_txns_test.go: `.Hex()`
$DIR/core/services/vrf/v2/integration_v2_reverted_txns_test.go: `.BigToHash(big.NewInt(1))`
$DIR/core/services/vrf/v2/integration_v2_reverted_txns_test.go: `.NewInt(1)`
$DIR/core/services/vrf/v2/integration_v2_reverted_txns_test.go: `.Hex()`
$DIR/core/services/vrf/v2/integration_v2_reverted_txns_test.go: `.BigToHash(big.NewInt(2))`
$DIR/core/services/vrf/v2/integration_v2_reverted_txns_test.go: `.NewInt(2)`
$DIR/core/services/vrf/v2/integration_v2_reverted_txns_test.go: `.Hex()`
$DIR/core/services/vrf/v2/integration_v2_reverted_txns_test.go: `.BigToHash(big.NewInt(2))`
$DIR/core/services/vrf/v2/integration_v2_reverted_txns_test.go: `.NewInt(2)`
$DIR/core/services/vrf/v2/integration_v2_reverted_txns_test.go: `.Hex()`
$DIR/core/services/vrf/v2/integration_v2_reverted_txns_test.go: `.BigToHash(big.NewInt(2))`
$DIR/core/services/vrf/v2/integration_v2_reverted_txns_test.go: `.NewInt(2)`
$DIR/core/services/vrf/v2/integration_v2_reverted_txns_test.go: `.Hex()`
$DIR/core/services/vrf/v2/integration_v2_reverted_txns_test.go: `.BigToHash(big.NewInt(2))`
$DIR/core/services/vrf/v2/integration_v2_reverted_txns_test.go: `.NewInt(2)`
$DIR/core/services/vrf/v2/integration_v2_reverted_txns_test.go: `.Hex()`
$DIR/core/services/vrf/v2/integration_v2_reverted_txns_test.go: `.UniqueByReqID(revertedForceTxns, allForceTxns)`
$DIR/core/services/vrf/v2/integration_v2_reverted_txns_test.go: `.BigToHash(big.NewInt(1))`
$DIR/core/services/vrf/v2/integration_v2_reverted_txns_test.go: `.NewInt(1)`
$DIR/core/services/vrf/v2/integration_v2_reverted_txns_test.go: `.Hex()`
$DIR/core/services/vrf/v2/integration_v2_reverted_txns_test.go: `.BigToHash(big.NewInt(1))`
$DIR/core/services/vrf/v2/integration_v2_reverted_txns_test.go: `.NewInt(1)`
$DIR/core/services/vrf/v2/integration_v2_reverted_txns_test.go: `.Hex()`
$DIR/core/services/vrf/v2/integration_v2_reverted_txns_test.go: `.BigToHash(big.NewInt(2))`
$DIR/core/services/vrf/v2/integration_v2_reverted_txns_test.go: `.NewInt(2)`
$DIR/core/services/vrf/v2/integration_v2_reverted_txns_test.go: `.Hex()`
$DIR/core/services/vrf/v2/integration_v2_reverted_txns_test.go: `.BigToHash(big.NewInt(2))`
$DIR/core/services/vrf/v2/integration_v2_reverted_txns_test.go: `.NewInt(2)`
$DIR/core/services/vrf/v2/integration_v2_reverted_txns_test.go: `.Hex()`
$DIR/core/services/vrf/v2/integration_v2_reverted_txns_test.go: `.BigToHash(big.NewInt(2))`
$DIR/core/services/vrf/v2/integration_v2_reverted_txns_test.go: `.NewInt(2)`
$DIR/core/services/vrf/v2/integration_v2_reverted_txns_test.go: `.Hex()`
$DIR/core/services/vrf/v2/integration_v2_reverted_txns_test.go: `.BigToHash(big.NewInt(2))`
$DIR/core/services/vrf/v2/integration_v2_reverted_txns_test.go: `.NewInt(2)`
$DIR/core/services/vrf/v2/integration_v2_reverted_txns_test.go: `.Hex()`
$DIR/core/services/vrf/v2/integration_v2_reverted_txns_test.go: `.BigToHash(big.NewInt(2))`
$DIR/core/services/vrf/v2/integration_v2_reverted_txns_test.go: `.NewInt(2)`
$DIR/core/services/vrf/v2/integration_v2_reverted_txns_test.go: `.Hex()`
$DIR/core/services/vrf/v2/integration_v2_reverted_txns_test.go: `.UniqueByReqID(revertedForceTxns, allForceTxns)`
$DIR/core/services/vrf/v2/integration_v2_test.go: `simulatedOverrides(t, assets.GWei(10), toml.KeySpecific{
// Gas lane.
Key: ptr(key1.EIP55Address),
GasEstimator: toml.KeySpecificGasEstimator{PriceMax: gasLanePriceWei},
})(c, s)`
$DIR/core/services/vrf/v2/integration_v2_test.go: `c.EVM[0].GasEstimator.LimitDefault = ptr[uint64](3_500_000)`
$DIR/core/services/vrf/v2/integration_v2_test.go: `c.EVM[0].MinIncomingConfirmations = ptr[uint32](2)`
$DIR/core/services/vrf/v2/integration_v2_test.go: `sendEth(t, ownerKey, uni.backend, key1.Address, 10)`
$DIR/core/services/vrf/v2/integration_v2_test.go: `_, err = uni.linkContract.TransferAndCall(uni.sergey, uni.rootContractAddress, assets.Ether(100).ToInt(), b)`
$DIR/core/services/vrf/v2/integration_v2_test.go: `uni.backend.Commit()`
$DIR/core/services/vrf/v2/integration_v2_test.go: `_, err = uni.linkContract.Transfer(uni.sergey, consumerAddress, assets.Ether(100).ToInt())`
$DIR/core/services/vrf/v2/integration_v2_test.go: `uni.backend.Commit()`
$DIR/core/services/vrf/v2/integration_v2_test.go: `gomega.NewGomegaWithT(t).Eventually(func() bool {
uni.backend.Commit()
runs, err2 := app.PipelineORM().GetAllRuns(ctx)
require.NoError(t, err2)
t.Log("runs", len(runs))
return len(runs) == 1
}, testutils.WaitTimeout(t), time.Second).Should(gomega.BeTrue())`
$DIR/core/services/vrf/v2/integration_v2_test.go: `uni.backend.Commit()`
$DIR/core/services/vrf/v2/integration_v2_test.go: `mine(t, requestID, new(big.Int).SetUint64(wrapperSubID), uni.backend, db, vrfcommon.V2, testutils.SimulatedChainID)`
$DIR/core/services/vrf/v2/integration_v2_test.go: `assertRandomWordsFulfilled(t, requestID, true, uni.rootContract, false)`
$DIR/core/services/vrf/v2/integration_v2_test.go: `simulatedOverrides(t, assets.GWei(10), toml.KeySpecific{
// Gas lane.
Key: ptr(key1.EIP55Address),
GasEstimator: toml.KeySpecificGasEstimator{PriceMax: gasLanePriceWei},
})(c, s)`
$DIR/core/services/vrf/v2/integration_v2_test.go: `c.EVM[0].GasEstimator.LimitDefault = ptr[uint64](3_500_000)`
$DIR/core/services/vrf/v2/integration_v2_test.go: `c.EVM[0].MinIncomingConfirmations = ptr[uint32](2)`
$DIR/core/services/vrf/v2/integration_v2_test.go: `c.Feature.LogPoller = ptr(true)`
$DIR/core/services/vrf/v2/integration_v2_test.go: `c.EVM[0].LogPollInterval = commonconfig.MustNewDuration(1 * time.Second)`
$DIR/core/services/vrf/v2/integration_v2_test.go: `sendEth(t, ownerKey, uni.backend, key1.Address, 10)`
$DIR/core/services/vrf/v2/integration_v2_test.go: `_, err = uni.linkContract.TransferAndCall(uni.sergey, uni.rootContractAddress, assets.Ether(100).ToInt(), b)`
$DIR/core/services/vrf/v2/integration_v2_test.go: `uni.backend.Commit()`
$DIR/core/services/vrf/v2/integration_v2_test.go: `_, err = uni.linkContract.Transfer(uni.sergey, consumerAddress, assets.Ether(100).ToInt())`
$DIR/core/services/vrf/v2/integration_v2_test.go: `uni.backend.Commit()`
$DIR/core/services/vrf/v2/integration_v2_test.go: `gomega.NewGomegaWithT(t).Eventually(func() bool {
uni.backend.Commit()
runs, err2 := app.PipelineORM().GetAllRuns(ctx)
require.NoError(t, err2)
t.Log("runs", len(runs))
return len(runs) == 1
}, testutils.WaitTimeout(t), time.Second).Should(gomega.BeTrue())`
$DIR/core/services/vrf/v2/integration_v2_test.go: `uni.backend.Commit()`
$DIR/core/services/vrf/v2/integration_v2_test.go: `mine(t, requestID, new(big.Int).SetUint64(wrapperSubID), uni.backend, db, vrfcommon.V2, testutils.SimulatedChainID)`
$DIR/core/services/vrf/v2/integration_v2_test.go: `assertRandomWordsFulfilled(t, requestID, true, uni.rootContract, false)`
$DIR/core/services/vrf/v2/integration_v2_test.go: `backend.Commit()`
$DIR/core/services/vrf/v2/integration_v2_test.go: `_, err = coordinator.SetConfig(owner, uint16(1), uint32(10000), 1, 1, big.NewInt(10), vrf_coordinator_v2.VRFCoordinatorV2FeeConfig{
FulfillmentFlatFeeLinkPPMTier1: 0,
FulfillmentFlatFeeLinkPPMTier2: 0,
FulfillmentFlatFeeLinkPPMTier3: 0,
FulfillmentFlatFeeLinkPPMTier4: 0,
FulfillmentFlatFeeLinkPPMTier5: 0,
ReqsForTier2: big.NewInt(0),
ReqsForTier3: big.NewInt(0),
ReqsForTier4: big.NewInt(0),
ReqsForTier5: big.NewInt(0),
})`
$DIR/core/services/vrf/v2/integration_v2_test.go: `backend.Commit()`
$DIR/core/services/vrf/v2/integration_v2_test.go: `backend.Commit()`
$DIR/core/services/vrf/v2/integration_v2_test.go: `_, err = linkContract.Transfer(owner, consumerAddress, assets.Ether(2).ToInt())`
$DIR/core/services/vrf/v2/integration_v2_test.go: `backend.Commit()`
$DIR/core/services/vrf/v2/integration_v2_test.go: `AssertLinkBalances(t, linkContract, []common.Address{owner.From, consumerAddress}, []*big.Int{assets.Ether(999_999_998).ToInt(), assets.Ether(2).ToInt()})`
$DIR/core/services/vrf/v2/integration_v2_test.go: `_, err = coordinator.CreateSubscription(owner)`
$DIR/core/services/vrf/v2/integration_v2_test.go: `backend.Commit()`
$DIR/core/services/vrf/v2/integration_v2_test.go: `_, err = linkContract.TransferAndCall(owner, coordinatorAddress, big.NewInt(0), b)`
$DIR/core/services/vrf/v2/integration_v2_test.go: `_, err = coordinator.AddConsumer(owner, 1, consumerAddress)`
$DIR/core/services/vrf/v2/integration_v2_test.go: `_, err = consumer.RequestRandomWords(random, 1, 1, 1, 1, [32]byte{})`
$DIR/core/services/vrf/v2/integration_v2_test.go: `_, err = consumer.RequestRandomWords(owner, 1, 1, 1, 1, [32]byte{})`
$DIR/core/services/vrf/v2/integration_v2_test.go: `_, err = consumer.TransferOwnership(owner, random.From)`
$DIR/core/services/vrf/v2/integration_v2_test.go: `_, err = consumer.RequestRandomWords(owner, 1, 1, 1, 1, [32]byte{})`
$DIR/core/services/vrf/v2/integration_v2_test.go: `_, err = consumer.RequestRandomWords(random, 1, 1, 1, 1, [32]byte{})`
$DIR/core/services/vrf/v2/integration_v2_test.go: `backend.Commit()`
$DIR/core/services/vrf/v2/integration_v2_test.go: `backend.Commit()`
$DIR/core/services/vrf/v2/integration_v2_test.go: `backend.Commit()`
$DIR/core/services/vrf/v2/integration_v2_test.go: `_, err = linkContract.Transfer(owner, consumerAddress, assets.Ether(2).ToInt())`
$DIR/core/services/vrf/v2/integration_v2_test.go: `backend.Commit()`
$DIR/core/services/vrf/v2/integration_v2_test.go: `AssertLinkBalances(t, linkContract, []common.Address{owner.From, consumerAddress}, []*big.Int{assets.Ether(999_999_998).ToInt(), assets.Ether(2).ToInt()})`
$DIR/core/services/vrf/v2/integration_v2_test.go: `_, err = consumer.TopUpSubscription(owner, assets.Ether(1).ToInt())`
$DIR/core/services/vrf/v2/integration_v2_test.go: `backend.Commit()`
$DIR/core/services/vrf/v2/integration_v2_test.go: `AssertLinkBalances(t, linkContract, []common.Address{owner.From, consumerAddress, coordinatorAddress}, []*big.Int{assets.Ether(999_999_998).ToInt(), assets.Ether(1).ToInt(), assets.Ether(1).ToInt()})`
$DIR/core/services/vrf/v2/integration_v2_test.go: `_, err = consumer.Withdraw(random, assets.Ether(1).ToInt(), owner.From)`
$DIR/core/services/vrf/v2/integration_v2_test.go: `_, err = consumer.Withdraw(owner, assets.Ether(1).ToInt(), owner.From)`
$DIR/core/services/vrf/v2/integration_v2_test.go: `backend.Commit()`
$DIR/core/services/vrf/v2/integration_v2_test.go: `AssertLinkBalances(t, linkContract, []common.Address{owner.From, consumerAddress, coordinatorAddress}, []*big.Int{assets.Ether(999_999_999).ToInt(), assets.Ether(0).ToInt(), assets.Ether(1).ToInt()})`
$DIR/core/services/vrf/v2/integration_v2_test.go: `_, err = consumer.Unsubscribe(owner, owner.From)`
$DIR/core/services/vrf/v2/integration_v2_test.go: `backend.Commit()`
$DIR/core/services/vrf/v2/integration_v2_test.go: `simulatedOverrides(t, gasPrice, toml.KeySpecific{
Key: &key.EIP55Address,
GasEstimator: toml.KeySpecificGasEstimator{PriceMax: gasLanePriceWei},
})(c, s)`
$DIR/core/services/vrf/v2/integration_v2_test.go: `c.EVM[0].MinIncomingConfirmations = ptr[uint32](2)`
$DIR/core/services/vrf/v2/integration_v2_test.go: `chain, err = app.GetRelayers().LegacyEVMChains().Get(testutils.SimulatedChainID.String())`
$DIR/core/services/vrf/v2/integration_v2_test.go: `AssertLinkBalances(t, uni.linkContract, []common.Address{
carolContractAddress,
uni.rootContractAddress,
}, []*big.Int{
assets.Ether(500).ToInt(), // 500 link
big.NewInt(0), // 0 link
})`
$DIR/core/services/vrf/v2/integration_v2_test.go: `_, err = carolContract.CreateSubscriptionAndFund(carol,
subFunding.BigInt())`
$DIR/core/services/vrf/v2/integration_v2_test.go: `uni.backend.Commit()`
$DIR/core/services/vrf/v2/integration_v2_test.go: `AssertLinkBalances(t, uni.linkContract, []common.Address{
carolContractAddress,
uni.rootContractAddress,
uni.nallory.From, // Oracle's own address should have nothing
}, []*big.Int{
assets.Ether(499).ToInt(),
assets.Ether(1).ToInt(),
big.NewInt(0),
})`
$DIR/core/services/vrf/v2/integration_v2_test.go: `_, err = carolContract.RequestRandomness(carol, keyHash, subId, uint16(requestedIncomingConfs), uint32(gasRequested), uint32(nw), false)`
$DIR/core/services/vrf/v2/integration_v2_test.go: `_, err = uni.rootContract.OracleWithdraw(uni.nallory, uni.nallory.From, big.NewInt(1000))`
$DIR/core/services/vrf/v2/integration_v2_test.go: `uni.backend.Commit()`
$DIR/core/services/vrf/v2/integration_v2_test.go: `gomega.NewWithT(t).Eventually(func() bool {
runs, err = app.PipelineORM().GetAllRuns(ctx)
require.NoError(t, err)
// It is possible that we send the test request
// before the job spawner has started the vrf services, which is fine
// the lb will backfill the logs. However, we need to
// keep blocks coming in for the lb to send the backfilled logs.
uni.backend.Commit()
return len(runs) == 1 && runs[0].State == pipeline.RunStatusCompleted
}, testutils.WaitTimeout(t), 1*time.Second).Should(gomega.BeTrue())`
$DIR/core/services/vrf/v2/integration_v2_test.go: `runs, err = app.PipelineORM().GetAllRuns(ctx)`
$DIR/core/services/vrf/v2/integration_v2_test.go: `uni.backend.Commit()`
$DIR/core/services/vrf/v2/integration_v2_test.go: `gomega.NewWithT(t).Eventually(func() bool {
rfIterator, err2 := uni.rootContract.FilterRandomWordsFulfilled(nil, nil, nil)
require.NoError(t, err2, "failed to logs")
uni.backend.Commit()
for rfIterator.Next() {
rf = append(rf, rfIterator.Event())
}
return len(rf) == 1
}, testutils.WaitTimeout(t), 500*time.Millisecond).Should(gomega.BeTrue())`
$DIR/core/services/vrf/v2/integration_v2_test.go: `uni.backend.Commit()`
$DIR/core/services/vrf/v2/integration_v2_test.go: `rf = append(rf, rfIterator.Event())`
$DIR/core/services/vrf/v2/integration_v2_test.go: `rw, err = carolContract.SRandomWords(nil, big.NewInt(int64(i)))`
$DIR/core/services/vrf/v2/integration_v2_test.go: `seen[rw.String()] = struct{}{}`
$DIR/core/services/vrf/v2/integration_v2_test.go: `_, err = uni.rootContract.OracleWithdraw(uni.nallory, uni.nallory.From, linkWeiCharged.Add(decimal.NewFromInt(1)).BigInt())`
$DIR/core/services/vrf/v2/integration_v2_test.go: `_, err = uni.rootContract.OracleWithdraw(uni.nallory, uni.nallory.From, linkWeiCharged.BigInt())`
$DIR/core/services/vrf/v2/integration_v2_test.go: `uni.backend.Commit()`
$DIR/core/services/vrf/v2/integration_v2_test.go: `AssertLinkBalances(t, uni.linkContract, []common.Address{
carolContractAddress,
uni.rootContractAddress,
uni.nallory.From, // Oracle's own address should have nothing
}, []*big.Int{
assets.Ether(499).ToInt(),
subFunding.Sub(linkWeiCharged).BigInt(),
linkWeiCharged.BigInt(),
})`
$DIR/core/services/vrf/v2/integration_v2_test.go: `counts, err = listenerV2.GetStartingResponseCountsV2(ctx)`
$DIR/core/services/vrf/v2/integration_v2_test.go: `registerProvingKeyHelper(t, uni.coordinatorV2UniverseCommon, uni.rootContract, vrfkey, nil)`
$DIR/core/services/vrf/v2/integration_v2_test.go: `t.Run("non-proxied consumer", func(tt *testing.T) {
carol := uni.vrfConsumers[0]
carolContract := uni.consumerContracts[0]
carolContractAddress := uni.consumerContractAddresses[0]
_, err = carolContract.CreateSubscriptionAndFund(carol,
big.NewInt(1000000000000000000)) // 0.1 LINK
require.NoError(tt, err)
uni.backend.Commit()
subId, err := carolContract.SSubId(nil)
require.NoError(tt, err)
// Ensure even with large number of consumers its still cheap
var addrs []common.Address
for i := 0; i < 99; i++ {
addrs = append(addrs, testutils.NewAddress())
}
_, err = carolContract.UpdateSubscription(carol, addrs)
require.NoError(tt, err)
estimate := estimateGas(tt, uni.backend, common.Address{},
carolContractAddress, uni.consumerABI,
"requestRandomness", vrfkey.PublicKey.MustHash(), subId.Uint64(), uint16(2), uint32(10000), uint32(1))
tt.Log("gas estimate of non-proxied testRequestRandomness:", estimate)
// V2 should be at least (87000-134000)/134000 = 35% cheaper
// Note that a second call drops further to 68998 gas, but would also drop in V1.
assert.Less(tt, estimate, uint64(90_000),
"requestRandomness tx gas cost more than expected")
})`
$DIR/core/services/vrf/v2/integration_v2_test.go: `_, err = carolContract.CreateSubscriptionAndFund(carol,
big.NewInt(1000000000000000000))`
$DIR/core/services/vrf/v2/integration_v2_test.go: `uni.backend.Commit()`
$DIR/core/services/vrf/v2/integration_v2_test.go: `addrs = append(addrs, testutils.NewAddress())`
$DIR/core/services/vrf/v2/integration_v2_test.go: `_, err = carolContract.UpdateSubscription(carol, addrs)`
$DIR/core/services/vrf/v2/integration_v2_test.go: `uni.backend.Commit()`
$DIR/core/services/vrf/v2/integration_v2_test.go: `_, err = uni.rootContract.GetSubscription(nil, subId)`
$DIR/core/services/vrf/v2/integration_v2_test.go: `uni.backend.Commit()`
$DIR/core/services/vrf/v2/integration_v2_test.go: `addrs = append(addrs, testutils.NewAddress())`
$DIR/core/services/vrf/v2/integration_v2_test.go: `_, err = carolContract.UpdateSubscription(carol, addrs)`
$DIR/core/services/vrf/v2/integration_v2_test.go: `estimate = estimateGas(t, uni.backend, carolContractAddress,
uni.rootContractAddress, uni.coordinatorABI,
"addConsumer", subId.Uint64(), testutils.NewAddress())`
$DIR/core/services/vrf/v2/integration_v2_test.go: `registerProvingKeyHelper(t, uni.coordinatorV2UniverseCommon, uni.rootContract, vrfkey, nil)`
$DIR/core/services/vrf/v2/integration_v2_test.go: `t.Run("non-proxied consumer", func(tt *testing.T) {
carol := uni.vrfConsumers[0]
carolContract := uni.consumerContracts[0]
carolContractAddress := uni.consumerContractAddresses[0]
_, err := carolContract.CreateSubscriptionAndFund(carol,
big.NewInt(1000000000000000000)) // 0.1 LINK
require.NoError(tt, err)
uni.backend.Commit()
subId, err := carolContract.SSubId(nil)
require.NoError(tt, err)
gasRequested := 50_000
nw := 1
requestedIncomingConfs := 3
_, err = carolContract.RequestRandomness(carol, vrfkey.PublicKey.MustHash(), subId, uint16(requestedIncomingConfs), uint32(gasRequested), uint32(nw), false)
require.NoError(t, err)
for i := 0; i < requestedIncomingConfs; i++ {
uni.backend.Commit()
}
requestLog := FindLatestRandomnessRequestedLog(tt, uni.rootContract, vrfkey.PublicKey.MustHash(), nil)
s, err := proof.BigToSeed(requestLog.PreSeed())
require.NoError(t, err)
proof, rc, err := proof.GenerateProofResponseV2(app.GetKeyStore().VRF(), vrfkey.ID(), proof.PreSeedDataV2{
PreSeed: s,
BlockHash: requestLog.Raw().BlockHash,
BlockNum: requestLog.Raw().BlockNumber,
SubId: subId.Uint64(),
CallbackGasLimit: uint32(gasRequested),
NumWords: uint32(nw),
Sender: carolContractAddress,
})
require.NoError(tt, err)
nonProxiedConsumerGasEstimate = estimateGas(tt, uni.backend, common.Address{},
uni.rootContractAddress, uni.coordinatorABI,
"fulfillRandomWords", proof, rc)
t.Log("non-proxied consumer fulfillment gas estimate:", nonProxiedConsumerGasEstimate)
// Establish very rough bounds on fulfillment cost
assert.Greater(tt, nonProxiedConsumerGasEstimate, uint64(120_000))
assert.Less(tt, nonProxiedConsumerGasEstimate, uint64(500_000))
})`
$DIR/core/services/vrf/v2/integration_v2_test.go: `uni.backend.Commit()`
$DIR/core/services/vrf/v2/integration_v2_test.go: `_, err = carolContract.RequestRandomness(carol, vrfkey.PublicKey.MustHash(), subId, uint16(requestedIncomingConfs), uint32(gasRequested), uint32(nw), false)`
$DIR/core/services/vrf/v2/integration_v2_test.go: `uni.backend.Commit()`
$DIR/core/services/vrf/v2/integration_v2_test.go: `nonProxiedConsumerGasEstimate = estimateGas(tt, uni.backend, common.Address{},
uni.rootContractAddress, uni.coordinatorABI,
"fulfillRandomWords", proof, rc)`
$DIR/core/services/vrf/v2/integration_v2_test.go: `uni.backend.Commit()`
$DIR/core/services/vrf/v2/integration_v2_test.go: `_, err = consumerContract.RequestRandomness(consumerOwner, vrfkey.PublicKey.MustHash(), subId, uint16(requestedIncomingConfs), uint32(gasRequested), uint32(nw), false)`
$DIR/core/services/vrf/v2/integration_v2_test.go: `uni.backend.Commit()`
$DIR/core/services/vrf/v2/integration_v2_test.go: `proxiedConsumerGasEstimate = estimateGas(t, uni.backend, common.Address{},
uni.rootContractAddress, uni.coordinatorABI,
"fulfillRandomWords", proof, rc)`
$DIR/core/services/vrf/v2/integration_v2_test.go: `ec.On("ConfiguredChainID").Return(testutils.SimulatedChainID)`
$DIR/core/services/vrf/v2/integration_v2_test.go: `ec.On("LatestBlockHeight", mock.Anything).Return(big.NewInt(2), nil).Maybe()`
$DIR/core/services/vrf/v2/integration_v2_test.go: `counts, err = listenerV1.GetStartingResponseCountsV1(testutils.Context(t))`
$DIR/core/services/vrf/v2/integration_v2_test.go: `err = ks.Unlock(ctx, testutils.Password)`
$DIR/core/services/vrf/v2/integration_v2_test.go: `unconfirmedTxes = append(unconfirmedTxes, txmgr.Tx{
Sequence: &newNonce,
FromAddress: k.Address,
Error: null.String{},
CreatedAt: b,
State: txmgrcommon.TxUnconfirmed,
BroadcastAt: &b,
InitialBroadcastAt: &b,
Meta: &mdSQL,
EncodedPayload: []byte{},
ChainID: chainID.ToInt(),
})`
$DIR/core/services/vrf/v2/integration_v2_test.go: `err = txStore.InsertTx(ctx, &txList[i])`
$DIR/core/services/vrf/v2/integration_v2_test.go: `txAttempts = append(txAttempts, txmgr.TxAttempt{
TxID: int64(i + 1),
TxFee: gas.EvmFee{Legacy: assets.NewWeiI(100)},
SignedRawTx: []byte(`blah`),
Hash: evmutils.NewHash(),
BroadcastBeforeBlockNum: &broadcastBlock,
State: txmgrtypes.TxAttemptBroadcast,
CreatedAt: time.Now(),
ChainSpecificFeeLimit: uint64(100),
})`
$DIR/core/services/vrf/v2/integration_v2_test.go: `txAttempts = append(txAttempts, txmgr.TxAttempt{
TxID: int64(i + 1 + len(confirmedTxes)),
TxFee: gas.EvmFee{Legacy: assets.NewWeiI(100)},
SignedRawTx: []byte(`blah`),
Hash: evmutils.NewHash(),
State: txmgrtypes.TxAttemptInProgress,
CreatedAt: time.Now(),
ChainSpecificFeeLimit: uint64(100),
})`
$DIR/core/services/vrf/v2/integration_v2_test.go: `err = txStore.InsertTxAttempt(ctx, &txAttempts[i])`
$DIR/core/services/vrf/v2/integration_v2_test.go: `receipts = append(receipts, evmtypes.Receipt{
BlockHash: evmutils.NewHash(),
TxHash: txAttempts[i].Hash,
BlockNumber: big.NewInt(broadcastBlock),
TransactionIndex: 1,
})`
$DIR/core/services/vrf/v2/integration_v2_test.go: `_, err = txStore.InsertReceipt(ctx, &receipts[i])`
$DIR/core/services/vrf/v2/integration_v2_test.go: `counts, err = listenerV1.GetStartingResponseCountsV1(testutils.Context(t))`
$DIR/core/services/vrf/v2/integration_v2_test.go: `.MustGenerateRandomKey(t)`
$DIR/core/services/vrf/v2/integration_v2_test.go: `.MustGenerateRandomKey(t)`
$DIR/core/services/vrf/v2/integration_v2_test.go: `.MustGenerateRandomKey(t)`
$DIR/core/services/vrf/v2/integration_v2_test.go: `.MustGenerateRandomKey(t)`
$DIR/core/services/vrf/v2/integration_v2_test.go: `.MustGenerateRandomKey(t)`
$DIR/core/services/vrf/v2/integration_v2_test.go: `.MustGenerateRandomKey(t)`
$DIR/core/services/vrf/v2/integration_v2_test.go: `.MustGenerateRandomKey(t)`
$DIR/core/services/vrf/v2/integration_v2_test.go: `.MustGenerateRandomKey(t)`
$DIR/core/services/vrf/v2/integration_v2_test.go: `.MustGenerateRandomKey(t)`
$DIR/core/services/vrf/v2/integration_v2_test.go: `.Context(t)`
$DIR/core/services/vrf/v2/integration_v2_test.go: `.MustGenerateRandomKey(t)`
$DIR/core/services/vrf/v2/integration_v2_test.go: `.GWei(10)`
$DIR/core/services/vrf/v2/integration_v2_test.go: `.FullTestDBV2(t, func(c *chainlink.Config, s *chainlink.Secrets) {
simulatedOverrides(t, assets.GWei(10), toml.KeySpecific{
// Gas lane.
Key: ptr(key1.EIP55Address),
GasEstimator: toml.KeySpecificGasEstimator{PriceMax: gasLanePriceWei},
})(c, s)
c.EVM[0].GasEstimator.LimitDefault = ptr[uint64](3_500_000)
c.EVM[0].MinIncomingConfirmations = ptr[uint32](2)
})`
$DIR/core/services/vrf/v2/integration_v2_test.go: `.GWei(10)`
$DIR/core/services/vrf/v2/integration_v2_test.go: `.MustGenerateRandomKey(t)`
$DIR/core/services/vrf/v2/integration_v2_test.go: `.NewApplicationWithConfigV2AndKeyOnSimulatedBlockchain(t, config, uni.backend, ownerKey, key1)`
$DIR/core/services/vrf/v2/integration_v2_test.go: `.VRFSpec.PublicKey.MustHash()`
$DIR/core/services/vrf/v2/integration_v2_test.go: `.SUBSCRIPTIONID(nil)`
$DIR/core/services/vrf/v2/integration_v2_test.go: `.ABIEncode(`[{"type":"uint64"}]`, wrapperSubID)`
$DIR/core/services/vrf/v2/integration_v2_test.go: `.linkContract.TransferAndCall(uni.sergey, uni.rootContractAddress, assets.Ether(100).ToInt(), b)`
$DIR/core/services/vrf/v2/integration_v2_test.go: `.Ether(100)`
$DIR/core/services/vrf/v2/integration_v2_test.go: `.ToInt()`
$DIR/core/services/vrf/v2/integration_v2_test.go: `.backend.Commit()`
$DIR/core/services/vrf/v2/integration_v2_test.go: `.linkContract.Transfer(uni.sergey, consumerAddress, assets.Ether(100).ToInt())`
$DIR/core/services/vrf/v2/integration_v2_test.go: `.Ether(100)`
$DIR/core/services/vrf/v2/integration_v2_test.go: `.ToInt()`
$DIR/core/services/vrf/v2/integration_v2_test.go: `.backend.Commit()`
$DIR/core/services/vrf/v2/integration_v2_test.go: `.SetUint64(wrapperSubID)`
$DIR/core/services/vrf/v2/integration_v2_test.go: `.NewGomegaWithT(t)`
$DIR/core/services/vrf/v2/integration_v2_test.go: `.Eventually(func() bool {
uni.backend.Commit()
runs, err2 := app.PipelineORM().GetAllRuns(ctx)
require.NoError(t, err2)
t.Log("runs", len(runs))
return len(runs) == 1
}, testutils.WaitTimeout(t), time.Second)`
$DIR/core/services/vrf/v2/integration_v2_test.go: `.backend.Commit()`
$DIR/core/services/vrf/v2/integration_v2_test.go: `.PipelineORM()`
$DIR/core/services/vrf/v2/integration_v2_test.go: `.GetAllRuns(ctx)`
$DIR/core/services/vrf/v2/integration_v2_test.go: `.WaitTimeout(t)`
$DIR/core/services/vrf/v2/integration_v2_test.go: `.Should(gomega.BeTrue())`
$DIR/core/services/vrf/v2/integration_v2_test.go: `.BeTrue()`
$DIR/core/services/vrf/v2/integration_v2_test.go: `.SetUint64(wrapperSubID)`
$DIR/core/services/vrf/v2/integration_v2_test.go: `.Context(t)`
$DIR/core/services/vrf/v2/integration_v2_test.go: `.MustGenerateRandomKey(t)`
$DIR/core/services/vrf/v2/integration_v2_test.go: `.GWei(10)`
$DIR/core/services/vrf/v2/integration_v2_test.go: `.FullTestDBV2(t, func(c *chainlink.Config, s *chainlink.Secrets) {
simulatedOverrides(t, assets.GWei(10), toml.KeySpecific{
// Gas lane.
Key: ptr(key1.EIP55Address),
GasEstimator: toml.KeySpecificGasEstimator{PriceMax: gasLanePriceWei},
})(c, s)
c.EVM[0].GasEstimator.LimitDefault = ptr[uint64](3_500_000)
c.EVM[0].MinIncomingConfirmations = ptr[uint32](2)
c.Feature.LogPoller = ptr(true)
c.EVM[0].LogPollInterval = commonconfig.MustNewDuration(1 * time.Second)
})`
$DIR/core/services/vrf/v2/integration_v2_test.go: `.GWei(10)`
$DIR/core/services/vrf/v2/integration_v2_test.go: `.MustNewDuration(1 * time.Second)`
$DIR/core/services/vrf/v2/integration_v2_test.go: `.MustGenerateRandomKey(t)`
$DIR/core/services/vrf/v2/integration_v2_test.go: `.NewApplicationWithConfigV2AndKeyOnSimulatedBlockchain(t, config, uni.backend, ownerKey, key1)`
$DIR/core/services/vrf/v2/integration_v2_test.go: `.VRFSpec.PublicKey.MustHash()`
$DIR/core/services/vrf/v2/integration_v2_test.go: `.SUBSCRIPTIONID(nil)`
$DIR/core/services/vrf/v2/integration_v2_test.go: `.ABIEncode(`[{"type":"uint64"}]`, wrapperSubID)`
$DIR/core/services/vrf/v2/integration_v2_test.go: `.linkContract.TransferAndCall(uni.sergey, uni.rootContractAddress, assets.Ether(100).ToInt(), b)`
$DIR/core/services/vrf/v2/integration_v2_test.go: `.Ether(100)`
$DIR/core/services/vrf/v2/integration_v2_test.go: `.ToInt()`
$DIR/core/services/vrf/v2/integration_v2_test.go: `.backend.Commit()`
$DIR/core/services/vrf/v2/integration_v2_test.go: `.linkContract.Transfer(uni.sergey, consumerAddress, assets.Ether(100).ToInt())`
$DIR/core/services/vrf/v2/integration_v2_test.go: `.Ether(100)`
$DIR/core/services/vrf/v2/integration_v2_test.go: `.ToInt()`
$DIR/core/services/vrf/v2/integration_v2_test.go: `.backend.Commit()`
$DIR/core/services/vrf/v2/integration_v2_test.go: `.SetUint64(wrapperSubID)`
$DIR/core/services/vrf/v2/integration_v2_test.go: `.NewGomegaWithT(t)`
$DIR/core/services/vrf/v2/integration_v2_test.go: `.Eventually(func() bool {
uni.backend.Commit()
runs, err2 := app.PipelineORM().GetAllRuns(ctx)
require.NoError(t, err2)
t.Log("runs", len(runs))
return len(runs) == 1
}, testutils.WaitTimeout(t), time.Second)`
$DIR/core/services/vrf/v2/integration_v2_test.go: `.backend.Commit()`
$DIR/core/services/vrf/v2/integration_v2_test.go: `.PipelineORM()`
$DIR/core/services/vrf/v2/integration_v2_test.go: `.GetAllRuns(ctx)`
$DIR/core/services/vrf/v2/integration_v2_test.go: `.WaitTimeout(t)`
$DIR/core/services/vrf/v2/integration_v2_test.go: `.Should(gomega.BeTrue())`
$DIR/core/services/vrf/v2/integration_v2_test.go: `.BeTrue()`
$DIR/core/services/vrf/v2/integration_v2_test.go: `.SetUint64(wrapperSubID)`
$DIR/core/services/vrf/v2/integration_v2_test.go: `.MustGenerateRandomKey(t)`
$DIR/core/services/vrf/v2/integration_v2_test.go: `.MustGenerateRandomKey(t)`
$DIR/core/services/vrf/v2/integration_v2_test.go: `.MustGenerateRandomKey(t)`
$DIR/core/services/vrf/v2/integration_v2_test.go: `.MustGenerateRandomKey(t)`
$DIR/core/services/vrf/v2/integration_v2_test.go: `.MustGenerateRandomKey(t)`
$DIR/core/services/vrf/v2/integration_v2_test.go: `.Ether(1)`
$DIR/core/services/vrf/v2/integration_v2_test.go: `.ToInt()`
$DIR/core/services/vrf/v2/integration_v2_test.go: `.Ether(100)`
$DIR/core/services/vrf/v2/integration_v2_test.go: `.ToInt()`
$DIR/core/services/vrf/v2/integration_v2_test.go: `.MustGenerateRandomKey(t)`
$DIR/core/services/vrf/v2/integration_v2_test.go: `.MustGenerateRandomKey(t)`
$DIR/core/services/vrf/v2/integration_v2_test.go: `.MustGenerateRandomKey(t)`
$DIR/core/services/vrf/v2/integration_v2_test.go: `.MustGenerateRandomKey(t)`
$DIR/core/services/vrf/v2/integration_v2_test.go: `.MustGenerateRandomKey(t)`
$DIR/core/services/vrf/v2/integration_v2_test.go: `.MustNewSimTransactor(t)`
$DIR/core/services/vrf/v2/integration_v2_test.go: `.MustNewSimTransactor(t)`
$DIR/core/services/vrf/v2/integration_v2_test.go: `.Ether(10)`
$DIR/core/services/vrf/v2/integration_v2_test.go: `.ToInt()`
$DIR/core/services/vrf/v2/integration_v2_test.go: `.Ether(10)`
$DIR/core/services/vrf/v2/integration_v2_test.go: `.ToInt()`
$DIR/core/services/vrf/v2/integration_v2_test.go: `.NewSimulatedBackend(t, genesisData, uint32(ethconfig.Defaults.Miner.GasCeil))`
$DIR/core/services/vrf/v2/integration_v2_test.go: `.DeployLinkToken(
owner, backend)`
$DIR/core/services/vrf/v2/integration_v2_test.go: `.Commit()`
$DIR/core/services/vrf/v2/integration_v2_test.go: `.DeployVRFCoordinatorV2(
owner, backend, linkAddress, common.Address{}, common.Address{})`
$DIR/core/services/vrf/v2/integration_v2_test.go: `.SetConfig(owner, uint16(1), uint32(10000), 1, 1, big.NewInt(10), vrf_coordinator_v2.VRFCoordinatorV2FeeConfig{
FulfillmentFlatFeeLinkPPMTier1: 0,
FulfillmentFlatFeeLinkPPMTier2: 0,
FulfillmentFlatFeeLinkPPMTier3: 0,
FulfillmentFlatFeeLinkPPMTier4: 0,
FulfillmentFlatFeeLinkPPMTier5: 0,
ReqsForTier2: big.NewInt(0),
ReqsForTier3: big.NewInt(0),
ReqsForTier4: big.NewInt(0),
ReqsForTier5: big.NewInt(0),
})`
$DIR/core/services/vrf/v2/integration_v2_test.go: `.NewInt(10)`
$DIR/core/services/vrf/v2/integration_v2_test.go: `.NewInt(0)`
$DIR/core/services/vrf/v2/integration_v2_test.go: `.NewInt(0)`
$DIR/core/services/vrf/v2/integration_v2_test.go: `.NewInt(0)`
$DIR/core/services/vrf/v2/integration_v2_test.go: `.NewInt(0)`
$DIR/core/services/vrf/v2/integration_v2_test.go: `.Commit()`
$DIR/core/services/vrf/v2/integration_v2_test.go: `.DeployVRFExternalSubOwnerExample(owner, backend, coordinatorAddress, linkAddress)`
$DIR/core/services/vrf/v2/integration_v2_test.go: `.Commit()`
$DIR/core/services/vrf/v2/integration_v2_test.go: `.Transfer(owner, consumerAddress, assets.Ether(2).ToInt())`
$DIR/core/services/vrf/v2/integration_v2_test.go: `.Ether(2)`
$DIR/core/services/vrf/v2/integration_v2_test.go: `.ToInt()`
$DIR/core/services/vrf/v2/integration_v2_test.go: `.Commit()`
$DIR/core/services/vrf/v2/integration_v2_test.go: `.Ether(999_999_998)`
$DIR/core/services/vrf/v2/integration_v2_test.go: `.ToInt()`
$DIR/core/services/vrf/v2/integration_v2_test.go: `.Ether(2)`
$DIR/core/services/vrf/v2/integration_v2_test.go: `.ToInt()`
$DIR/core/services/vrf/v2/integration_v2_test.go: `.CreateSubscription(owner)`
$DIR/core/services/vrf/v2/integration_v2_test.go: `.Commit()`
$DIR/core/services/vrf/v2/integration_v2_test.go: `.ABIEncode(`[{"type":"uint64"}]`, uint64(1))`
$DIR/core/services/vrf/v2/integration_v2_test.go: `.TransferAndCall(owner, coordinatorAddress, big.NewInt(0), b)`
$DIR/core/services/vrf/v2/integration_v2_test.go: `.NewInt(0)`
$DIR/core/services/vrf/v2/integration_v2_test.go: `.AddConsumer(owner, 1, consumerAddress)`
$DIR/core/services/vrf/v2/integration_v2_test.go: `.RequestRandomWords(random, 1, 1, 1, 1, [32]byte{})`
$DIR/core/services/vrf/v2/integration_v2_test.go: `.RequestRandomWords(owner, 1, 1, 1, 1, [32]byte{})`
$DIR/core/services/vrf/v2/integration_v2_test.go: `.TransferOwnership(owner, random.From)`
$DIR/core/services/vrf/v2/integration_v2_test.go: `.RequestRandomWords(owner, 1, 1, 1, 1, [32]byte{})`
$DIR/core/services/vrf/v2/integration_v2_test.go: `.RequestRandomWords(random, 1, 1, 1, 1, [32]byte{})`
$DIR/core/services/vrf/v2/integration_v2_test.go: `.MustNewSimTransactor(t)`
$DIR/core/services/vrf/v2/integration_v2_test.go: `.MustNewSimTransactor(t)`
$DIR/core/services/vrf/v2/integration_v2_test.go: `.Ether(10)`
$DIR/core/services/vrf/v2/integration_v2_test.go: `.ToInt()`
$DIR/core/services/vrf/v2/integration_v2_test.go: `.NewSimulatedBackend(t, genesisData, uint32(ethconfig.Defaults.Miner.GasCeil))`
$DIR/core/services/vrf/v2/integration_v2_test.go: `.DeployLinkToken(
owner, backend)`
$DIR/core/services/vrf/v2/integration_v2_test.go: `.Commit()`
$DIR/core/services/vrf/v2/integration_v2_test.go: `.DeployVRFCoordinatorV2(
owner, backend, linkAddress, common.Address{}, common.Address{})`
$DIR/core/services/vrf/v2/integration_v2_test.go: `.Commit()`
$DIR/core/services/vrf/v2/integration_v2_test.go: `.DeployVRFSingleConsumerExample(owner, backend, coordinatorAddress, linkAddress, 1, 1, 1, [32]byte{})`
$DIR/core/services/vrf/v2/integration_v2_test.go: `.Commit()`
$DIR/core/services/vrf/v2/integration_v2_test.go: `.Transfer(owner, consumerAddress, assets.Ether(2).ToInt())`
$DIR/core/services/vrf/v2/integration_v2_test.go: `.Ether(2)`
$DIR/core/services/vrf/v2/integration_v2_test.go: `.ToInt()`
$DIR/core/services/vrf/v2/integration_v2_test.go: `.Commit()`
$DIR/core/services/vrf/v2/integration_v2_test.go: `.Ether(999_999_998)`
$DIR/core/services/vrf/v2/integration_v2_test.go: `.ToInt()`
$DIR/core/services/vrf/v2/integration_v2_test.go: `.Ether(2)`
$DIR/core/services/vrf/v2/integration_v2_test.go: `.ToInt()`
$DIR/core/services/vrf/v2/integration_v2_test.go: `.TopUpSubscription(owner, assets.Ether(1).ToInt())`
$DIR/core/services/vrf/v2/integration_v2_test.go: `.Ether(1)`
$DIR/core/services/vrf/v2/integration_v2_test.go: `.ToInt()`
$DIR/core/services/vrf/v2/integration_v2_test.go: `.Commit()`
$DIR/core/services/vrf/v2/integration_v2_test.go: `.Ether(999_999_998)`
$DIR/core/services/vrf/v2/integration_v2_test.go: `.ToInt()`
$DIR/core/services/vrf/v2/integration_v2_test.go: `.Ether(1)`
$DIR/core/services/vrf/v2/integration_v2_test.go: `.ToInt()`
$DIR/core/services/vrf/v2/integration_v2_test.go: `.Ether(1)`
$DIR/core/services/vrf/v2/integration_v2_test.go: `.ToInt()`
$DIR/core/services/vrf/v2/integration_v2_test.go: `.Withdraw(random, assets.Ether(1).ToInt(), owner.From)`
$DIR/core/services/vrf/v2/integration_v2_test.go: `.Ether(1)`
$DIR/core/services/vrf/v2/integration_v2_test.go: `.ToInt()`
$DIR/core/services/vrf/v2/integration_v2_test.go: `.Withdraw(owner, assets.Ether(1).ToInt(), owner.From)`
$DIR/core/services/vrf/v2/integration_v2_test.go: `.Ether(1)`
$DIR/core/services/vrf/v2/integration_v2_test.go: `.ToInt()`
$DIR/core/services/vrf/v2/integration_v2_test.go: `.Commit()`
$DIR/core/services/vrf/v2/integration_v2_test.go: `.Ether(999_999_999)`
$DIR/core/services/vrf/v2/integration_v2_test.go: `.ToInt()`
$DIR/core/services/vrf/v2/integration_v2_test.go: `.Ether(0)`
$DIR/core/services/vrf/v2/integration_v2_test.go: `.ToInt()`
$DIR/core/services/vrf/v2/integration_v2_test.go: `.Ether(1)`
$DIR/core/services/vrf/v2/integration_v2_test.go: `.ToInt()`
$DIR/core/services/vrf/v2/integration_v2_test.go: `.Unsubscribe(owner, owner.From)`
$DIR/core/services/vrf/v2/integration_v2_test.go: `.Commit()`
$DIR/core/services/vrf/v2/integration_v2_test.go: `.Ether(1_000_000_000)`
$DIR/core/services/vrf/v2/integration_v2_test.go: `.ToInt()`
$DIR/core/services/vrf/v2/integration_v2_test.go: `.Ether(0)`
$DIR/core/services/vrf/v2/integration_v2_test.go: `.ToInt()`
$DIR/core/services/vrf/v2/integration_v2_test.go: `.Ether(0)`
$DIR/core/services/vrf/v2/integration_v2_test.go: `.ToInt()`
$DIR/core/services/vrf/v2/integration_v2_test.go: `.Context(t)`
$DIR/core/services/vrf/v2/integration_v2_test.go: `.GWei(1)`
$DIR/core/services/vrf/v2/integration_v2_test.go: `.MustGenerateRandomKey(t)`
$DIR/core/services/vrf/v2/integration_v2_test.go: `.GWei(10)`
$DIR/core/services/vrf/v2/integration_v2_test.go: `.FullTestDBV2(t, func(c *chainlink.Config, s *chainlink.Secrets) {
simulatedOverrides(t, gasPrice, toml.KeySpecific{
Key: &key.EIP55Address,
GasEstimator: toml.KeySpecificGasEstimator{PriceMax: gasLanePriceWei},
})(c, s)
c.EVM[0].MinIncomingConfirmations = ptr[uint32](2)
})`
$DIR/core/services/vrf/v2/integration_v2_test.go: `.NewApplicationWithConfigV2AndKeyOnSimulatedBlockchain(t, config, uni.backend, key)`
$DIR/core/services/vrf/v2/integration_v2_test.go: `.KeyStore.Eth()`
$DIR/core/services/vrf/v2/integration_v2_test.go: `.EnabledKeysForChain(ctx, testutils.SimulatedChainID)`
$DIR/core/services/vrf/v2/integration_v2_test.go: `.GetRelayers()`
$DIR/core/services/vrf/v2/integration_v2_test.go: `.LegacyEVMChains()`
$DIR/core/services/vrf/v2/integration_v2_test.go: `.Get(testutils.SimulatedChainID.String())`
$DIR/core/services/vrf/v2/integration_v2_test.go: `.SimulatedChainID.String()`
$DIR/core/services/vrf/v2/integration_v2_test.go: `.MakeTestListenerV2(chain)`
$DIR/core/services/vrf/v2/integration_v2_test.go: `.VRFSpec.PublicKey.MustHash()`
$DIR/core/services/vrf/v2/integration_v2_test.go: `.Ether(500)`
$DIR/core/services/vrf/v2/integration_v2_test.go: `.ToInt()`
$DIR/core/services/vrf/v2/integration_v2_test.go: `.NewInt(0)`
$DIR/core/services/vrf/v2/integration_v2_test.go: `.RequireFromString("1000000000000000000")`
$DIR/core/services/vrf/v2/integration_v2_test.go: `.CreateSubscriptionAndFund(carol,
subFunding.BigInt())`
$DIR/core/services/vrf/v2/integration_v2_test.go: `.BigInt()`
$DIR/core/services/vrf/v2/integration_v2_test.go: `.backend.Commit()`
$DIR/core/services/vrf/v2/integration_v2_test.go: `.Ether(499)`
$DIR/core/services/vrf/v2/integration_v2_test.go: `.ToInt()`
$DIR/core/services/vrf/v2/integration_v2_test.go: `.Ether(1)`
$DIR/core/services/vrf/v2/integration_v2_test.go: `.ToInt()`
$DIR/core/services/vrf/v2/integration_v2_test.go: `.NewInt(0)`
$DIR/core/services/vrf/v2/integration_v2_test.go: `.SSubId(nil)`
$DIR/core/services/vrf/v2/integration_v2_test.go: `.rootContract.GetSubscription(nil, subId)`
$DIR/core/services/vrf/v2/integration_v2_test.go: `.RequestRandomness(carol, keyHash, subId, uint16(requestedIncomingConfs), uint32(gasRequested), uint32(nw), false)`
$DIR/core/services/vrf/v2/integration_v2_test.go: `.rootContract.OracleWithdraw(uni.nallory, uni.nallory.From, big.NewInt(1000))`
$DIR/core/services/vrf/v2/integration_v2_test.go: `.NewInt(1000)`
$DIR/core/services/vrf/v2/integration_v2_test.go: `.backend.Commit()`
$DIR/core/services/vrf/v2/integration_v2_test.go: `.NewWithT(t)`
$DIR/core/services/vrf/v2/integration_v2_test.go: `.Eventually(func() bool {
runs, err = app.PipelineORM().GetAllRuns(ctx)
require.NoError(t, err)
// It is possible that we send the test request
// before the job spawner has started the vrf services, which is fine
// the lb will backfill the logs. However, we need to
// keep blocks coming in for the lb to send the backfilled logs.
uni.backend.Commit()
return len(runs) == 1 && runs[0].State == pipeline.RunStatusCompleted
}, testutils.WaitTimeout(t), 1*time.Second)`
$DIR/core/services/vrf/v2/integration_v2_test.go: `.PipelineORM()`
$DIR/core/services/vrf/v2/integration_v2_test.go: `.GetAllRuns(ctx)`
$DIR/core/services/vrf/v2/integration_v2_test.go: `.backend.Commit()`
$DIR/core/services/vrf/v2/integration_v2_test.go: `.WaitTimeout(t)`
$DIR/core/services/vrf/v2/integration_v2_test.go: `.Should(gomega.BeTrue())`
$DIR/core/services/vrf/v2/integration_v2_test.go: `.BeTrue()`
$DIR/core/services/vrf/v2/integration_v2_test.go: `.NewWithT(t)`
$DIR/core/services/vrf/v2/integration_v2_test.go: `.Eventually(func() bool {
rfIterator, err2 := uni.rootContract.FilterRandomWordsFulfilled(nil, nil, nil)
require.NoError(t, err2, "failed to logs")
uni.backend.Commit()
for rfIterator.Next() {
rf = append(rf, rfIterator.Event())
}
return len(rf) == 1
}, testutils.WaitTimeout(t), 500*time.Millisecond)`
$DIR/core/services/vrf/v2/integration_v2_test.go: `.rootContract.FilterRandomWordsFulfilled(nil, nil, nil)`
$DIR/core/services/vrf/v2/integration_v2_test.go: `.backend.Commit()`
$DIR/core/services/vrf/v2/integration_v2_test.go: `.Next()`
$DIR/core/services/vrf/v2/integration_v2_test.go: `.Event()`
$DIR/core/services/vrf/v2/integration_v2_test.go: `.WaitTimeout(t)`
$DIR/core/services/vrf/v2/integration_v2_test.go: `.Should(gomega.BeTrue())`
$DIR/core/services/vrf/v2/integration_v2_test.go: `.BeTrue()`
$DIR/core/services/vrf/v2/integration_v2_test.go: `.backend.TransactionReceipt(ctx, rf[0].Raw().TxHash)`
$DIR/core/services/vrf/v2/integration_v2_test.go: `.Raw()`
$DIR/core/services/vrf/v2/integration_v2_test.go: `.SRandomWords(nil, big.NewInt(int64(i)))`
$DIR/core/services/vrf/v2/integration_v2_test.go: `.NewInt(int64(i))`
$DIR/core/services/vrf/v2/integration_v2_test.go: `.String()`
$DIR/core/services/vrf/v2/integration_v2_test.go: `.String()`
$DIR/core/services/vrf/v2/integration_v2_test.go: `.SGasAvailable(nil)`
$DIR/core/services/vrf/v2/integration_v2_test.go: `.NewInt(0)`
$DIR/core/services/vrf/v2/integration_v2_test.go: `.Add(ga, big.NewInt(3701))`
$DIR/core/services/vrf/v2/integration_v2_test.go: `.NewInt(3701)`
$DIR/core/services/vrf/v2/integration_v2_test.go: `.rootContract.GetSubscription(nil, subId)`
$DIR/core/services/vrf/v2/integration_v2_test.go: `.RequireFromString(subEnd.Balance().String())`
$DIR/core/services/vrf/v2/integration_v2_test.go: `.Balance()`
$DIR/core/services/vrf/v2/integration_v2_test.go: `.String()`
$DIR/core/services/vrf/v2/integration_v2_test.go: `.RequireFromString(subStart.Balance().String())`
$DIR/core/services/vrf/v2/integration_v2_test.go: `.Balance()`
$DIR/core/services/vrf/v2/integration_v2_test.go: `.String()`
$DIR/core/services/vrf/v2/integration_v2_test.go: `.RequireFromString("1000000000000000000")`
$DIR/core/services/vrf/v2/integration_v2_test.go: `.RequireFromString("1000000000")`
$DIR/core/services/vrf/v2/integration_v2_test.go: `.Sub(end)`
$DIR/core/services/vrf/v2/integration_v2_test.go: `.Sub(decimal.RequireFromString("1000000000000000"))`
$DIR/core/services/vrf/v2/integration_v2_test.go: `.RequireFromString("1000000000000000")`
$DIR/core/services/vrf/v2/integration_v2_test.go: `.Div(wei)`
$DIR/core/services/vrf/v2/integration_v2_test.go: `.NewFromBigInt(gasPrice.ToInt(), 0)`
$DIR/core/services/vrf/v2/integration_v2_test.go: `.ToInt()`
$DIR/core/services/vrf/v2/integration_v2_test.go: `.RequireFromString(strconv.Itoa(int(fulfillReceipt.GasUsed)))`
$DIR/core/services/vrf/v2/integration_v2_test.go: `.Itoa(int(fulfillReceipt.GasUsed))`
$DIR/core/services/vrf/v2/integration_v2_test.go: `.Mul(gasPriceD)`
$DIR/core/services/vrf/v2/integration_v2_test.go: `.Div(vrftesthelpers.WeiPerUnitLink)`
$DIR/core/services/vrf/v2/integration_v2_test.go: `.Sub(expected)`
$DIR/core/services/vrf/v2/integration_v2_test.go: `.Mul(vrftesthelpers.WeiPerUnitLink)`
$DIR/core/services/vrf/v2/integration_v2_test.go: `.Div(gasPriceD)`
$DIR/core/services/vrf/v2/integration_v2_test.go: `.Abs()`
$DIR/core/services/vrf/v2/integration_v2_test.go: `.IntPart()`
$DIR/core/services/vrf/v2/integration_v2_test.go: `.rootContract.OracleWithdraw(uni.nallory, uni.nallory.From, linkWeiCharged.Add(decimal.NewFromInt(1)).BigInt())`
$DIR/core/services/vrf/v2/integration_v2_test.go: `.Add(decimal.NewFromInt(1))`
$DIR/core/services/vrf/v2/integration_v2_test.go: `.NewFromInt(1)`
$DIR/core/services/vrf/v2/integration_v2_test.go: `.BigInt()`
$DIR/core/services/vrf/v2/integration_v2_test.go: `.rootContract.OracleWithdraw(uni.nallory, uni.nallory.From, linkWeiCharged.BigInt())`
$DIR/core/services/vrf/v2/integration_v2_test.go: `.BigInt()`
$DIR/core/services/vrf/v2/integration_v2_test.go: `.backend.Commit()`
$DIR/core/services/vrf/v2/integration_v2_test.go: `.Ether(499)`
$DIR/core/services/vrf/v2/integration_v2_test.go: `.ToInt()`
$DIR/core/services/vrf/v2/integration_v2_test.go: `.Sub(linkWeiCharged)`
$DIR/core/services/vrf/v2/integration_v2_test.go: `.BigInt()`
$DIR/core/services/vrf/v2/integration_v2_test.go: `.BigInt()`
$DIR/core/services/vrf/v2/integration_v2_test.go: `.GetStartingResponseCountsV2(ctx)`
$DIR/core/services/vrf/v2/integration_v2_test.go: `.RequestID()`
$DIR/core/services/vrf/v2/integration_v2_test.go: `.String()`
$DIR/core/services/vrf/v2/integration_v2_test.go: `.MustGenerateRandomKey(t)`
$DIR/core/services/vrf/v2/integration_v2_test.go: `.Context(t)`
$DIR/core/services/vrf/v2/integration_v2_test.go: `.MustGenerateRandomKey(t)`
$DIR/core/services/vrf/v2/integration_v2_test.go: `.NewGeneralConfigSimulated(t, nil)`
$DIR/core/services/vrf/v2/integration_v2_test.go: `.NewApplicationWithConfigV2AndKeyOnSimulatedBlockchain(t, cfg, uni.backend, key)`
$DIR/core/services/vrf/v2/integration_v2_test.go: `.GetKeyStore()`
$DIR/core/services/vrf/v2/integration_v2_test.go: `.VRF()`
$DIR/core/services/vrf/v2/integration_v2_test.go: `.Create(ctx)`
$DIR/core/services/vrf/v2/integration_v2_test.go: `.Run("non-proxied consumer", func(tt *testing.T) {
carol := uni.vrfConsumers[0]
carolContract := uni.consumerContracts[0]
carolContractAddress := uni.consumerContractAddresses[0]
_, err = carolContract.CreateSubscriptionAndFund(carol,
big.NewInt(1000000000000000000)) // 0.1 LINK
require.NoError(tt, err)
uni.backend.Commit()
subId, err := carolContract.SSubId(nil)
require.NoError(tt, err)
// Ensure even with large number of consumers its still cheap
var addrs []common.Address
for i := 0; i < 99; i++ {
addrs = append(addrs, testutils.NewAddress())
}
_, err = carolContract.UpdateSubscription(carol, addrs)
require.NoError(tt, err)
estimate := estimateGas(tt, uni.backend, common.Address{},
carolContractAddress, uni.consumerABI,
"requestRandomness", vrfkey.PublicKey.MustHash(), subId.Uint64(), uint16(2), uint32(10000), uint32(1))
tt.Log("gas estimate of non-proxied testRequestRandomness:", estimate)
// V2 should be at least (87000-134000)/134000 = 35% cheaper
// Note that a second call drops further to 68998 gas, but would also drop in V1.
assert.Less(tt, estimate, uint64(90_000),
"requestRandomness tx gas cost more than expected")
})`
$DIR/core/services/vrf/v2/integration_v2_test.go: `.CreateSubscriptionAndFund(carol,
big.NewInt(1000000000000000000))`
$DIR/core/services/vrf/v2/integration_v2_test.go: `.NewInt(1000000000000000000)`
$DIR/core/services/vrf/v2/integration_v2_test.go: `.backend.Commit()`
$DIR/core/services/vrf/v2/integration_v2_test.go: `.SSubId(nil)`
$DIR/core/services/vrf/v2/integration_v2_test.go: `.NewAddress()`
$DIR/core/services/vrf/v2/integration_v2_test.go: `.UpdateSubscription(carol, addrs)`
$DIR/core/services/vrf/v2/integration_v2_test.go: `.PublicKey.MustHash()`
$DIR/core/services/vrf/v2/integration_v2_test.go: `.Uint64()`
$DIR/core/services/vrf/v2/integration_v2_test.go: `.CreateSubscriptionAndFund(consumerOwner, assets.Ether(5).ToInt())`
$DIR/core/services/vrf/v2/integration_v2_test.go: `.Ether(5)`
$DIR/core/services/vrf/v2/integration_v2_test.go: `.ToInt()`
$DIR/core/services/vrf/v2/integration_v2_test.go: `.backend.Commit()`
$DIR/core/services/vrf/v2/integration_v2_test.go: `.backend.TransactionReceipt(testutils.Context(t), tx.Hash())`
$DIR/core/services/vrf/v2/integration_v2_test.go: `.Context(t)`
$DIR/core/services/vrf/v2/integration_v2_test.go: `.Hash()`
$DIR/core/services/vrf/v2/integration_v2_test.go: `.SSubId(nil)`
$DIR/core/services/vrf/v2/integration_v2_test.go: `.rootContract.GetSubscription(nil, subId)`
$DIR/core/services/vrf/v2/integration_v2_test.go: `.MustGetABI(vrf_consumer_v2_upgradeable_example.VRFConsumerV2UpgradeableExampleMetaData.ABI)`
$DIR/core/services/vrf/v2/integration_v2_test.go: `.PublicKey.MustHash()`
$DIR/core/services/vrf/v2/integration_v2_test.go: `.Uint64()`
$DIR/core/services/vrf/v2/integration_v2_test.go: `.MustGenerateRandomKey(t)`
$DIR/core/services/vrf/v2/integration_v2_test.go: `.NewGeneralConfigSimulated(t, nil)`
$DIR/core/services/vrf/v2/integration_v2_test.go: `.NewApplicationWithConfigV2AndKeyOnSimulatedBlockchain(t, cfg, uni.backend, key)`
$DIR/core/services/vrf/v2/integration_v2_test.go: `.CreateSubscriptionAndFund(carol,
big.NewInt(1000000000000000000))`
$DIR/core/services/vrf/v2/integration_v2_test.go: `.NewInt(1000000000000000000)`
$DIR/core/services/vrf/v2/integration_v2_test.go: `.backend.Commit()`
$DIR/core/services/vrf/v2/integration_v2_test.go: `.SSubId(nil)`
$DIR/core/services/vrf/v2/integration_v2_test.go: `.NewAddress()`
$DIR/core/services/vrf/v2/integration_v2_test.go: `.UpdateSubscription(carol, addrs)`
$DIR/core/services/vrf/v2/integration_v2_test.go: `.Uint64()`
$DIR/core/services/vrf/v2/integration_v2_test.go: `.Uint64()`
$DIR/core/services/vrf/v2/integration_v2_test.go: `.NewAddress()`
$DIR/core/services/vrf/v2/integration_v2_test.go: `.Context(t)`
$DIR/core/services/vrf/v2/integration_v2_test.go: `.MustGenerateRandomKey(t)`
$DIR/core/services/vrf/v2/integration_v2_test.go: `.NewGeneralConfigSimulated(t, nil)`
$DIR/core/services/vrf/v2/integration_v2_test.go: `.NewApplicationWithConfigV2AndKeyOnSimulatedBlockchain(t, cfg, uni.backend, key)`
$DIR/core/services/vrf/v2/integration_v2_test.go: `.GetKeyStore()`
$DIR/core/services/vrf/v2/integration_v2_test.go: `.VRF()`
$DIR/core/services/vrf/v2/integration_v2_test.go: `.Create(ctx)`
$DIR/core/services/vrf/v2/integration_v2_test.go: `.Run("non-proxied consumer", func(tt *testing.T) {
carol := uni.vrfConsumers[0]
carolContract := uni.consumerContracts[0]
carolContractAddress := uni.consumerContractAddresses[0]
_, err := carolContract.CreateSubscriptionAndFund(carol,
big.NewInt(1000000000000000000)) // 0.1 LINK
require.NoError(tt, err)
uni.backend.Commit()
subId, err := carolContract.SSubId(nil)
require.NoError(tt, err)
gasRequested := 50_000
nw := 1
requestedIncomingConfs := 3
_, err = carolContract.RequestRandomness(carol, vrfkey.PublicKey.MustHash(), subId, uint16(requestedIncomingConfs), uint32(gasRequested), uint32(nw), false)
require.NoError(t, err)
for i := 0; i < requestedIncomingConfs; i++ {
uni.backend.Commit()
}
requestLog := FindLatestRandomnessRequestedLog(tt, uni.rootContract, vrfkey.PublicKey.MustHash(), nil)
s, err := proof.BigToSeed(requestLog.PreSeed())
require.NoError(t, err)
proof, rc, err := proof.GenerateProofResponseV2(app.GetKeyStore().VRF(), vrfkey.ID(), proof.PreSeedDataV2{
PreSeed: s,
BlockHash: requestLog.Raw().BlockHash,
BlockNum: requestLog.Raw().BlockNumber,
SubId: subId.Uint64(),
CallbackGasLimit: uint32(gasRequested),
NumWords: uint32(nw),
Sender: carolContractAddress,
})
require.NoError(tt, err)
nonProxiedConsumerGasEstimate = estimateGas(tt, uni.backend, common.Address{},
uni.rootContractAddress, uni.coordinatorABI,
"fulfillRandomWords", proof, rc)
t.Log("non-proxied consumer fulfillment gas estimate:", nonProxiedConsumerGasEstimate)
// Establish very rough bounds on fulfillment cost
assert.Greater(tt, nonProxiedConsumerGasEstimate, uint64(120_000))
assert.Less(tt, nonProxiedConsumerGasEstimate, uint64(500_000))
})`
$DIR/core/services/vrf/v2/integration_v2_test.go: `.CreateSubscriptionAndFund(carol,
big.NewInt(1000000000000000000))`
$DIR/core/services/vrf/v2/integration_v2_test.go: `.NewInt(1000000000000000000)`
$DIR/core/services/vrf/v2/integration_v2_test.go: `.backend.Commit()`
$DIR/core/services/vrf/v2/integration_v2_test.go: `.SSubId(nil)`
$DIR/core/services/vrf/v2/integration_v2_test.go: `.RequestRandomness(carol, vrfkey.PublicKey.MustHash(), subId, uint16(requestedIncomingConfs), uint32(gasRequested), uint32(nw), false)`
$DIR/core/services/vrf/v2/integration_v2_test.go: `.PublicKey.MustHash()`
$DIR/core/services/vrf/v2/integration_v2_test.go: `.backend.Commit()`
$DIR/core/services/vrf/v2/integration_v2_test.go: `.PublicKey.MustHash()`
$DIR/core/services/vrf/v2/integration_v2_test.go: `.BigToSeed(requestLog.PreSeed())`
$DIR/core/services/vrf/v2/integration_v2_test.go: `.PreSeed()`
$DIR/core/services/vrf/v2/integration_v2_test.go: `.GenerateProofResponseV2(app.GetKeyStore().VRF(), vrfkey.ID(), proof.PreSeedDataV2{
PreSeed: s,
BlockHash: requestLog.Raw().BlockHash,
BlockNum: requestLog.Raw().BlockNumber,
SubId: subId.Uint64(),
CallbackGasLimit: uint32(gasRequested),
NumWords: uint32(nw),
Sender: carolContractAddress,
})`
$DIR/core/services/vrf/v2/integration_v2_test.go: `.GetKeyStore()`
$DIR/core/services/vrf/v2/integration_v2_test.go: `.VRF()`
$DIR/core/services/vrf/v2/integration_v2_test.go: `.ID()`
$DIR/core/services/vrf/v2/integration_v2_test.go: `.Raw()`
$DIR/core/services/vrf/v2/integration_v2_test.go: `.Raw()`
$DIR/core/services/vrf/v2/integration_v2_test.go: `.Uint64()`
$DIR/core/services/vrf/v2/integration_v2_test.go: `.CreateSubscriptionAndFund(consumerOwner, assets.Ether(5).ToInt())`
$DIR/core/services/vrf/v2/integration_v2_test.go: `.Ether(5)`
$DIR/core/services/vrf/v2/integration_v2_test.go: `.ToInt()`
$DIR/core/services/vrf/v2/integration_v2_test.go: `.backend.Commit()`
$DIR/core/services/vrf/v2/integration_v2_test.go: `.SSubId(nil)`
$DIR/core/services/vrf/v2/integration_v2_test.go: `.RequestRandomness(consumerOwner, vrfkey.PublicKey.MustHash(), subId, uint16(requestedIncomingConfs), uint32(gasRequested), uint32(nw), false)`
$DIR/core/services/vrf/v2/integration_v2_test.go: `.PublicKey.MustHash()`
$DIR/core/services/vrf/v2/integration_v2_test.go: `.backend.Commit()`
$DIR/core/services/vrf/v2/integration_v2_test.go: `.PublicKey.MustHash()`
$DIR/core/services/vrf/v2/integration_v2_test.go: `.BigToSeed(requestLog.PreSeed())`
$DIR/core/services/vrf/v2/integration_v2_test.go: `.PreSeed()`
$DIR/core/services/vrf/v2/integration_v2_test.go: `.GenerateProofResponseV2(app.GetKeyStore().VRF(), vrfkey.ID(), proof.PreSeedDataV2{
PreSeed: s,
BlockHash: requestLog.Raw().BlockHash,
BlockNum: requestLog.Raw().BlockNumber,
SubId: subId.Uint64(),
CallbackGasLimit: uint32(gasRequested),
NumWords: uint32(nw),
Sender: consumerContractAddress,
})`
$DIR/core/services/vrf/v2/integration_v2_test.go: `.GetKeyStore()`
$DIR/core/services/vrf/v2/integration_v2_test.go: `.VRF()`
$DIR/core/services/vrf/v2/integration_v2_test.go: `.ID()`
$DIR/core/services/vrf/v2/integration_v2_test.go: `.Raw()`
$DIR/core/services/vrf/v2/integration_v2_test.go: `.Raw()`
$DIR/core/services/vrf/v2/integration_v2_test.go: `.Uint64()`
$DIR/core/services/vrf/v2/integration_v2_test.go: `.FullTestDBNoFixturesV2(t, nil)`
$DIR/core/services/vrf/v2/integration_v2_test.go: `.Context(t)`
$DIR/core/services/vrf/v2/integration_v2_test.go: `.TestLogger(t)`
$DIR/core/services/vrf/v2/integration_v2_test.go: `.NewTxStore(db, logger.TestLogger(t))`
$DIR/core/services/vrf/v2/integration_v2_test.go: `.TestLogger(t)`
$DIR/core/services/vrf/v2/integration_v2_test.go: `.NewInMemory(db, utils.FastScryptParams, lggr)`
$DIR/core/services/vrf/v2/integration_v2_test.go: `.NewClient(t)`
$DIR/core/services/vrf/v2/integration_v2_test.go: `.On("ConfiguredChainID")`
$DIR/core/services/vrf/v2/integration_v2_test.go: `.Return(testutils.SimulatedChainID)`
$DIR/core/services/vrf/v2/integration_v2_test.go: `.On("LatestBlockHeight", mock.Anything)`
$DIR/core/services/vrf/v2/integration_v2_test.go: `.Return(big.NewInt(2), nil)`
$DIR/core/services/vrf/v2/integration_v2_test.go: `.NewInt(2)`
$DIR/core/services/vrf/v2/integration_v2_test.go: `.Maybe()`
$DIR/core/services/vrf/v2/integration_v2_test.go: `.NewChainRelayExtenders(t, evmtest.TestChainOpts{KeyStore: ks.Eth(), Client: ec, DB: db, GeneralConfig: cfg, TxManager: txm})`
$DIR/core/services/vrf/v2/integration_v2_test.go: `.Eth()`
$DIR/core/services/vrf/v2/integration_v2_test.go: `.NewLegacyChainsFromRelayerExtenders(relayExtenders)`
$DIR/core/services/vrf/v2/integration_v2_test.go: `.Get(testutils.SimulatedChainID.String())`
$DIR/core/services/vrf/v2/integration_v2_test.go: `.SimulatedChainID.String()`
$DIR/core/services/vrf/v2/integration_v2_test.go: `.MakeTestListenerV2(chain)`
$DIR/core/services/vrf/v2/integration_v2_test.go: `.GetStartingResponseCountsV1(testutils.Context(t))`
$DIR/core/services/vrf/v2/integration_v2_test.go: `.Context(t)`
$DIR/core/services/vrf/v2/integration_v2_test.go: `.Unlock(ctx, testutils.Password)`
$DIR/core/services/vrf/v2/integration_v2_test.go: `.Eth()`
$DIR/core/services/vrf/v2/integration_v2_test.go: `.Create(testutils.Context(t), testutils.SimulatedChainID)`
$DIR/core/services/vrf/v2/integration_v2_test.go: `.Context(t)`
$DIR/core/services/vrf/v2/integration_v2_test.go: `.Now()`
$DIR/core/services/vrf/v2/integration_v2_test.go: `.Nonce(0)`
$DIR/core/services/vrf/v2/integration_v2_test.go: `.Nonce(1)`
$DIR/core/services/vrf/v2/integration_v2_test.go: `.Nonce(2)`
$DIR/core/services/vrf/v2/integration_v2_test.go: `.Nonce(3)`
$DIR/core/services/vrf/v2/integration_v2_test.go: `.PadByteToHash(0x10)`
$DIR/core/services/vrf/v2/integration_v2_test.go: `.Marshal(&m1)`
$DIR/core/services/vrf/v2/integration_v2_test.go: `.JSON(md1)`
$DIR/core/services/vrf/v2/integration_v2_test.go: `.PadByteToHash(0x11)`
$DIR/core/services/vrf/v2/integration_v2_test.go: `.Marshal(&m2)`
$DIR/core/services/vrf/v2/integration_v2_test.go: `.JSON(md2)`
$DIR/core/services/vrf/v2/integration_v2_test.go: `.New(testutils.SimulatedChainID)`
$DIR/core/services/vrf/v2/integration_v2_test.go: `.ToInt()`
$DIR/core/services/vrf/v2/integration_v2_test.go: `.ToInt()`
$DIR/core/services/vrf/v2/integration_v2_test.go: `.ToInt()`
$DIR/core/services/vrf/v2/integration_v2_test.go: `.ToInt()`
$DIR/core/services/vrf/v2/integration_v2_test.go: `.PadByteToHash(0x12)`
$DIR/core/services/vrf/v2/integration_v2_test.go: `.Marshal(&txmgr.TxMeta{
RequestID: &reqID3,
})`
$DIR/core/services/vrf/v2/integration_v2_test.go: `.JSON(md)`
$DIR/core/services/vrf/v2/integration_v2_test.go: `.Nonce(i + 1)`
$DIR/core/services/vrf/v2/integration_v2_test.go: `.ToInt()`
$DIR/core/services/vrf/v2/integration_v2_test.go: `.InsertTx(ctx, &txList[i])`
$DIR/core/services/vrf/v2/integration_v2_test.go: `.NewWeiI(100)`
$DIR/core/services/vrf/v2/integration_v2_test.go: `.NewHash()`
$DIR/core/services/vrf/v2/integration_v2_test.go: `.Now()`
$DIR/core/services/vrf/v2/integration_v2_test.go: `.NewWeiI(100)`
$DIR/core/services/vrf/v2/integration_v2_test.go: `.NewHash()`
$DIR/core/services/vrf/v2/integration_v2_test.go: `.Now()`
$DIR/core/services/vrf/v2/integration_v2_test.go: `.InsertTxAttempt(ctx, &txAttempts[i])`
$DIR/core/services/vrf/v2/integration_v2_test.go: `.NewHash()`
$DIR/core/services/vrf/v2/integration_v2_test.go: `.NewInt(broadcastBlock)`
$DIR/core/services/vrf/v2/integration_v2_test.go: `.InsertReceipt(ctx, &receipts[i])`
$DIR/core/services/vrf/v2/integration_v2_test.go: `.GetStartingResponseCountsV1(testutils.Context(t))`
$DIR/core/services/vrf/v2/integration_v2_test.go: `.Context(t)`
$DIR/core/services/vrf/v2/integration_v2_test.go: `.GetStartingResponseCountsV2(testutils.Context(t))`
$DIR/core/services/vrf/v2/integration_v2_test.go: `.Context(t)`
$DIR/core/services/vrf/v2/integration_v2_test.go: `.NewInt(0x12)`
$DIR/core/services/vrf/v2/integration_v2_test.go: `.String()`
$DIR/core/services/vrf/v2/integration_v2_test.go: `.MustGenerateRandomKey(t)`
$DIR/core/services/vrf/v2/listener_v2_helpers_test.go: `weiPerUnitLink = big.NewInt(5898161234554321)`
$DIR/core/services/vrf/v2/listener_v2_helpers_test.go: `actual, err = v2.EstimateFeeJuels(callbackGasLimit, maxGasPriceGwei, weiPerUnitLink)`
$DIR/core/services/vrf/v2/listener_v2_helpers_test.go: `expected = big.NewInt(1780215830399116719)`
$DIR/core/services/vrf/v2/listener_v2_helpers_test.go: `actual, err = v2.EstimateFeeJuels(callbackGasLimit, maxGasPriceGwei, big.NewInt(0))`
$DIR/core/services/vrf/v2/listener_v2_helpers_test.go: `.GWei(30)`
$DIR/core/services/vrf/v2/listener_v2_helpers_test.go: `.ToInt()`
$DIR/core/services/vrf/v2/listener_v2_helpers_test.go: `.NewInt(5898160000000000)`
$DIR/core/services/vrf/v2/listener_v2_helpers_test.go: `.EstimateFeeJuels(callbackGasLimit, maxGasPriceGwei, weiPerUnitLink)`
$DIR/core/services/vrf/v2/listener_v2_helpers_test.go: `.NewInt(1780216203019246680)`
$DIR/core/services/vrf/v2/listener_v2_helpers_test.go: `.NewInt(5898161234554321)`
$DIR/core/services/vrf/v2/listener_v2_helpers_test.go: `.EstimateFeeJuels(callbackGasLimit, maxGasPriceGwei, weiPerUnitLink)`
$DIR/core/services/vrf/v2/listener_v2_helpers_test.go: `.NewInt(1780215830399116719)`
$DIR/core/services/vrf/v2/listener_v2_helpers_test.go: `.EstimateFeeJuels(callbackGasLimit, maxGasPriceGwei, big.NewInt(0))`
$DIR/core/services/vrf/v2/listener_v2_helpers_test.go: `.NewInt(0)`
$DIR/core/services/vrf/v2/listener_v2_helpers_test.go: `.NewInt(0)`
$DIR/core/services/vrf/v2/listener_v2_helpers_test.go: `.NewInt(0)`
$DIR/core/services/vrf/v2/listener_v2_helpers_test.go: `.NewInt(1)`
$DIR/core/services/vrf/v2/listener_v2_helpers_test.go: `.NewInt(0)`
$DIR/core/services/vrf/v2/listener_v2_helpers_test.go: `.NewInt(1)`
$DIR/core/services/vrf/v2/listener_v2_helpers_test.go: `.NewInt(0)`
$DIR/core/services/vrf/v2/listener_v2_helpers_test.go: `.DedupeTxList([]*txmgr.Tx{tx1, tx2, tx3})`
$DIR/core/services/vrf/v2/listener_v2_log_listener_test.go: `mockChain.On("ID").Return(th.ChainID)`
$DIR/core/services/vrf/v2/listener_v2_log_listener_test.go: `mockChain.On("LogPoller").Return(th.LogPoller)`
$DIR/core/services/vrf/v2/listener_v2_log_listener_test.go: `th.Client.Commit()`
$DIR/core/services/vrf/v2/listener_v2_log_listener_test.go: `_, err1 = th.Emitter.EmitLog2(th.Owner, []*big.Int{big.NewInt(int64(i))})`
$DIR/core/services/vrf/v2/listener_v2_log_listener_test.go: `th.Client.Commit()`
$DIR/core/services/vrf/v2/listener_v2_log_listener_test.go: `mockChain.On("LogPoller").Maybe().Return(th.LogPoller)`
$DIR/core/services/vrf/v2/listener_v2_log_listener_test.go: `go th.Listener.runLogListener(time.Second, 1)`
$DIR/core/services/vrf/v2/listener_v2_log_listener_test.go: `gomega.NewWithT(t).Eventually(func() bool {
return th.Listener.chain.LogPoller().HasFilter(filterName)
}, testutils.WaitTimeout(t), time.Second).Should(gomega.BeTrue())`
$DIR/core/services/vrf/v2/listener_v2_log_listener_test.go: `gomega.NewWithT(t).Consistently(func() bool {
return th.Listener.chain.LogPoller().HasFilter(filterName)
}, 5*time.Second, 1*time.Second).Should(gomega.BeTrue())`
$DIR/core/services/vrf/v2/listener_v2_log_listener_test.go: `close(th.Listener.chStop)`
$DIR/core/services/vrf/v2/listener_v2_log_listener_test.go: `mockChain.On("ID").Return(curTH.ChainID)`
$DIR/core/services/vrf/v2/listener_v2_log_listener_test.go: `mockChain.On("LogPoller").Return(curTH.LogPoller)`
$DIR/core/services/vrf/v2/listener_v2_log_listener_test.go: `th.Client.Commit()`
$DIR/core/services/vrf/v2/listener_v2_log_listener_test.go: `th.Client.Commit()`
$DIR/core/services/vrf/v2/listener_v2_log_listener_test.go: `_, err2 = th.VRFLogEmitter.EmitRandomWordsFulfilled(th.Owner, reqID, preSeed, big.NewInt(10), true)`
$DIR/core/services/vrf/v2/listener_v2_log_listener_test.go: `th.Client.Commit()`
$DIR/core/services/vrf/v2/listener_v2_log_listener_test.go: `_, err1 = th.Emitter.EmitLog2(th.Owner, []*big.Int{big.NewInt(int64(i))})`
$DIR/core/services/vrf/v2/listener_v2_log_listener_test.go: `th.Client.Commit()`
$DIR/core/services/vrf/v2/listener_v2_log_listener_test.go: `mockChain.On("ID").Return(curTH.ChainID)`
$DIR/core/services/vrf/v2/listener_v2_log_listener_test.go: `mockChain.On("LogPoller").Return(curTH.LogPoller)`
$DIR/core/services/vrf/v2/listener_v2_log_listener_test.go: `th.Client.Commit()`
$DIR/core/services/vrf/v2/listener_v2_log_listener_test.go: `th.Client.Commit()`
$DIR/core/services/vrf/v2/listener_v2_log_listener_test.go: `th.Client.Commit()`
$DIR/core/services/vrf/v2/listener_v2_log_listener_test.go: `_, err1 = th.Emitter.EmitLog2(th.Owner, []*big.Int{big.NewInt(int64(i))})`
$DIR/core/services/vrf/v2/listener_v2_log_listener_test.go: `th.Client.Commit()`
$DIR/core/services/vrf/v2/listener_v2_log_listener_test.go: `mockChain.On("ID").Return(curTH.ChainID)`
$DIR/core/services/vrf/v2/listener_v2_log_listener_test.go: `mockChain.On("LogPoller").Return(curTH.LogPoller)`
$DIR/core/services/vrf/v2/listener_v2_log_listener_test.go: `th.Client.Commit()`
$DIR/core/services/vrf/v2/listener_v2_log_listener_test.go: `_, err1 = th.Emitter.EmitLog2(th.Owner, []*big.Int{big.NewInt(int64(i))})`
$DIR/core/services/vrf/v2/listener_v2_log_listener_test.go: `th.Client.Commit()`
$DIR/core/services/vrf/v2/listener_v2_log_listener_test.go: `th.Client.Commit()`
$DIR/core/services/vrf/v2/listener_v2_log_listener_test.go: `_, err2 = th.VRFLogEmitter.EmitRandomWordsRequested(th.Owner,
keyHash, reqID2, preSeed, subID, 10, 10000, 2, th.Owner.From)`
$DIR/core/services/vrf/v2/listener_v2_log_listener_test.go: `th.Client.Commit()`
$DIR/core/services/vrf/v2/listener_v2_log_listener_test.go: `mockChain.On("ID").Return(curTH.ChainID)`
$DIR/core/services/vrf/v2/listener_v2_log_listener_test.go: `mockChain.On("LogPoller").Return(curTH.LogPoller)`
$DIR/core/services/vrf/v2/listener_v2_log_listener_test.go: `th.Client.Commit()`
$DIR/core/services/vrf/v2/listener_v2_log_listener_test.go: `_, err1 = th.Emitter.EmitLog2(th.Owner, []*big.Int{big.NewInt(int64(i))})`
$DIR/core/services/vrf/v2/listener_v2_log_listener_test.go: `th.Client.Commit()`
$DIR/core/services/vrf/v2/listener_v2_log_listener_test.go: `th.Client.Commit()`
$DIR/core/services/vrf/v2/listener_v2_log_listener_test.go: `_, err2 = th.VRFLogEmitter.EmitRandomWordsRequested(th.Owner,
keyHash, reqID2, preSeed, subID, 10, 10000, 2, th.Owner.From)`
$DIR/core/services/vrf/v2/listener_v2_log_listener_test.go: `_, err2 = th.VRFLogEmitter.EmitRandomWordsFulfilled(th.Owner, reqID1, preSeed, big.NewInt(10), true)`
$DIR/core/services/vrf/v2/listener_v2_log_listener_test.go: `th.Client.Commit()`
$DIR/core/services/vrf/v2/listener_v2_log_listener_test.go: `mockChain.On("LogPoller").Return(curTH.LogPoller)`
$DIR/core/services/vrf/v2/listener_v2_log_listener_test.go: `th.Client.Commit()`
$DIR/core/services/vrf/v2/listener_v2_log_listener_test.go: `th.Client.Commit()`
$DIR/core/services/vrf/v2/listener_v2_log_listener_test.go: `_, err2 = th.VRFLogEmitter.EmitRandomWordsRequested(th.Owner,
keyHash, reqID2, preSeed, subID, 10, 10000, 2, th.Owner.From)`
$DIR/core/services/vrf/v2/listener_v2_log_listener_test.go: `th.Client.Commit()`
$DIR/core/services/vrf/v2/listener_v2_log_listener_test.go: `_, err1 = th.Emitter.EmitLog2(th.Owner, []*big.Int{big.NewInt(int64(i))})`
$DIR/core/services/vrf/v2/listener_v2_log_listener_test.go: `th.Client.Commit()`
$DIR/core/services/vrf/v2/listener_v2_log_listener_test.go: `mockChain.On("LogPoller").Return(curTH.LogPoller)`
$DIR/core/services/vrf/v2/listener_v2_log_listener_test.go: `th.Client.Commit()`
$DIR/core/services/vrf/v2/listener_v2_log_listener_test.go: `th.Client.Commit()`
$DIR/core/services/vrf/v2/listener_v2_log_listener_test.go: `_, err2 = th.VRFLogEmitter.EmitRandomWordsFulfilled(th.Owner, reqID1, preSeed, big.NewInt(10), true)`
$DIR/core/services/vrf/v2/listener_v2_log_listener_test.go: `th.Client.Commit()`
$DIR/core/services/vrf/v2/listener_v2_log_listener_test.go: `_, err1 = th.Emitter.EmitLog2(th.Owner, []*big.Int{big.NewInt(int64(i))})`
$DIR/core/services/vrf/v2/listener_v2_log_listener_test.go: `th.Client.Commit()`
$DIR/core/services/vrf/v2/listener_v2_log_listener_test.go: `mockChain.On("LogPoller").Return(curTH.LogPoller)`
$DIR/core/services/vrf/v2/listener_v2_log_listener_test.go: `th.Client.Commit()`
$DIR/core/services/vrf/v2/listener_v2_log_listener_test.go: `th.Client.Commit()`
$DIR/core/services/vrf/v2/listener_v2_log_listener_test.go: `_, err1 = th.Emitter.EmitLog2(th.Owner, []*big.Int{big.NewInt(int64(i))})`
$DIR/core/services/vrf/v2/listener_v2_log_listener_test.go: `th.Client.Commit()`
$DIR/core/services/vrf/v2/listener_v2_log_listener_test.go: `mockChain.On("LogPoller").Return(curTH.LogPoller)`
$DIR/core/services/vrf/v2/listener_v2_log_listener_test.go: `th.Client.Commit()`
$DIR/core/services/vrf/v2/listener_v2_log_listener_test.go: `_, err1 = th.Emitter.EmitLog2(th.Owner, []*big.Int{big.NewInt(int64(i))})`
$DIR/core/services/vrf/v2/listener_v2_log_listener_test.go: `th.Client.Commit()`
$DIR/core/services/vrf/v2/listener_v2_log_listener_test.go: `th.Client.Commit()`
$DIR/core/services/vrf/v2/listener_v2_log_listener_test.go: `_, err2 = th.VRFLogEmitter.EmitRandomWordsRequested(th.Owner,
keyHash, reqID2, preSeed, subID, 10, 10000, 2, th.Owner.From)`
$DIR/core/services/vrf/v2/listener_v2_log_listener_test.go: `th.Client.Commit()`
$DIR/core/services/vrf/v2/listener_v2_log_listener_test.go: `mockChain.On("LogPoller").Return(curTH.LogPoller)`
$DIR/core/services/vrf/v2/listener_v2_log_listener_test.go: `th.Client.Commit()`
$DIR/core/services/vrf/v2/listener_v2_log_listener_test.go: `_, err1 = th.Emitter.EmitLog2(th.Owner, []*big.Int{big.NewInt(int64(i))})`
$DIR/core/services/vrf/v2/listener_v2_log_listener_test.go: `th.Client.Commit()`
$DIR/core/services/vrf/v2/listener_v2_log_listener_test.go: `th.Client.Commit()`
$DIR/core/services/vrf/v2/listener_v2_log_listener_test.go: `_, err2 = th.VRFLogEmitter.EmitRandomWordsRequested(th.Owner,
keyHash, reqID2, preSeed, subID, 10, 10000, 2, th.Owner.From)`
$DIR/core/services/vrf/v2/listener_v2_log_listener_test.go: `_, err2 = th.VRFLogEmitter.EmitRandomWordsFulfilled(th.Owner, reqID1, preSeed, big.NewInt(10), true)`
$DIR/core/services/vrf/v2/listener_v2_log_listener_test.go: `th.Client.Commit()`
$DIR/core/services/vrf/v2/listener_v2_log_listener_test.go: `logs = append(logs, logpoller.Log{
EvmChainId: chainID,
LogIndex: 0,
BlockHash: common.BigToHash(big.NewInt(int64(i))),
BlockNumber: int64(i),
BlockTimestamp: time.Now(),
Topics: [][]byte{
[]byte("0x46692c0e59ca9cd1ad8f984a9d11715ec83424398b7eed4e05c8ce84662415a8"),
},
EventSig: emitterABI.Events["Log1"].ID,
Address: common.Address{},
TxHash: common.BigToHash(big.NewInt(int64(i))),
Data: nil,
CreatedAt: time.Now(),
})`
$DIR/core/services/vrf/v2/listener_v2_log_listener_test.go: `eventSig = vrfEmitterABI.Events["RandomWordsRequested"].ID`
$DIR/core/services/vrf/v2/listener_v2_log_listener_test.go: `topics = [][]byte{
common.FromHex("0x63373d1c4696214b898952999c9aaec57dac1ee2723cec59bea6888f489a9772"),
common.FromHex("0xc0a6c424ac7157ae408398df7e5f4552091a69125d5dfcb7b8c2659029395bdf"),
common.FromHex("0x0000000000000000000000000000000000000000000000000000000000000001"),
common.FromHex("0x0000000000000000000000005ee3b50502b5c4c9184dcb281471a0614d4b2ef9"),
}`
$DIR/core/services/vrf/v2/listener_v2_log_listener_test.go: `logs = append(logs, logpoller.Log{
EvmChainId: chainID,
LogIndex: 0,
BlockHash: common.BigToHash(big.NewInt(int64(2 * i))),
BlockNumber: int64(2 * i),
BlockTimestamp: time.Now(),
Topics: topics,
EventSig: eventSig,
Address: common.Address{},
TxHash: common.BigToHash(big.NewInt(int64(2 * i))),
Data: common.FromHex("0x000000000000000000000000000000000000000000000000000000000000000" + fmt.Sprintf("%d", i) + "000000000000000000000000000000000000000000000000000000000000006a000000000000000000000000000000000000000000000000000000000000000a00000000000000000000000000000000000000000000000000000000000027100000000000000000000000000000000000000000000000000000000000000002"),
CreatedAt: time.Now(),
})`
$DIR/core/services/vrf/v2/listener_v2_log_listener_test.go: `logs = append(logs, logpoller.Log{
EvmChainId: chainID,
LogIndex: 0,
BlockHash: common.BigToHash(big.NewInt(int64(2*i + 1))),
BlockNumber: int64(2*i + 1),
BlockTimestamp: time.Now(),
Topics: [][]byte{
common.FromHex("0x7dffc5ae5ee4e2e4df1651cf6ad329a73cebdb728f37ea0187b9b17e036756e4"),
common.FromHex("0x000000000000000000000000000000000000000000000000000000000000000" + fmt.Sprintf("%d", i)),
},
EventSig: vrfEmitterABI.Events["RandomWordsFulfilled"].ID,
Address: common.Address{},
TxHash: common.BigToHash(big.NewInt(int64(2*i + 1))),
Data: common.FromHex("0x0000000000000000000000000000000000000000000000000000000000000069000000000000000000000000000000000000000000000000000000000000000a0000000000000000000000000000000000000000000000000000000000000001"),
CreatedAt: time.Now(),
})`
$DIR/core/services/vrf/v2/listener_v2_log_listener_test.go: `eventSig = vrfEmitterABI.Events["RandomWordsRequested"].ID`
$DIR/core/services/vrf/v2/listener_v2_log_listener_test.go: `topics = [][]byte{
common.FromHex("0x63373d1c4696214b898952999c9aaec57dac1ee2723cec59bea6888f489a9772"),
common.FromHex("0xc0a6c424ac7157ae408398df7e5f4552091a69125d5dfcb7b8c2659029395bdf"),
common.FromHex("0x0000000000000000000000000000000000000000000000000000000000000001"),
common.FromHex("0x0000000000000000000000005ee3b50502b5c4c9184dcb281471a0614d4b2ef9"),
}`
$DIR/core/services/vrf/v2/listener_v2_log_listener_test.go: `logs = append(logs, logpoller.Log{
EvmChainId: chainID,
LogIndex: 0,
BlockHash: common.BigToHash(big.NewInt(int64(2 * i))),
BlockNumber: int64(2 * i),
BlockTimestamp: time.Now(),
Topics: topics,
EventSig: eventSig,
Address: common.Address{},
TxHash: common.BigToHash(big.NewInt(int64(2 * i))),
Data: common.FromHex("0x000000000000000000000000000000000000000000000000000000000000000" + fmt.Sprintf("%d", i) + "000000000000000000000000000000000000000000000000000000000000006a000000000000000000000000000000000000000000000000000000000000000a00000000000000000000000000000000000000000000000000000000000027100000000000000000000000000000000000000000000000000000000000000002"),
CreatedAt: time.Now(),
})`
$DIR/core/services/vrf/v2/listener_v2_log_listener_test.go: `eventSig = vrfEmitterABI.Events["RandomWordsRequested"].ID`
$DIR/core/services/vrf/v2/listener_v2_log_listener_test.go: `topics = [][]byte{
common.FromHex("0x63373d1c4696214b898952999c9aaec57dac1ee2723cec59bea6888f489a9772"),
common.FromHex("0xc0a6c424ac7157ae408398df7e5f4552091a69125d5dfcb7b8c2659029395bdf"),
common.FromHex("0x0000000000000000000000000000000000000000000000000000000000000001"),
common.FromHex("0x0000000000000000000000005ee3b50502b5c4c9184dcb281471a0614d4b2ef9"),
}`
$DIR/core/services/vrf/v2/listener_v2_log_listener_test.go: `logs = append(logs, logpoller.Log{
EvmChainId: chainID,
LogIndex: 0,
BlockHash: common.BigToHash(big.NewInt(int64(2 * i))),
BlockNumber: int64(2 * i),
BlockTimestamp: time.Now(),
Topics: topics,
EventSig: eventSig,
Address: common.Address{},
TxHash: common.BigToHash(big.NewInt(int64(2 * i))),
Data: common.FromHex("0x000000000000000000000000000000000000000000000000000000000000000" + fmt.Sprintf("%d", i) + "000000000000000000000000000000000000000000000000000000000000006a000000000000000000000000000000000000000000000000000000000000000a00000000000000000000000000000000000000000000000000000000000027100000000000000000000000000000000000000000000000000000000000000002"),
CreatedAt: time.Now(),
})`
$DIR/core/services/vrf/v2/listener_v2_log_listener_test.go: `eventSig = vrfEmitterABI.Events["RandomWordsRequested"].ID`
$DIR/core/services/vrf/v2/listener_v2_log_listener_test.go: `topics = [][]byte{
common.FromHex("0x63373d1c4696214b898952999c9aaec57dac1ee2723cec59bea6888f489a9772"),
common.FromHex("0xc0a6c424ac7157ae408398df7e5f4552091a69125d5dfcb7b8c2659029395bdf"),
common.FromHex("0x0000000000000000000000000000000000000000000000000000000000000001"),
common.FromHex("0x0000000000000000000000005ee3b50502b5c4c9184dcb281471a0614d4b2ef9"),
}`
$DIR/core/services/vrf/v2/listener_v2_log_listener_test.go: `logs = append(logs, logpoller.Log{
EvmChainId: chainID,
LogIndex: 0,
BlockHash: common.BigToHash(big.NewInt(int64(2 * i))),
BlockNumber: int64(2 * i),
BlockTimestamp: time.Now(),
Topics: topics,
EventSig: eventSig,
Address: common.Address{},
TxHash: common.BigToHash(big.NewInt(int64(2 * i))),
Data: common.FromHex("0x000000000000000000000000000000000000000000000000000000000000000" + fmt.Sprintf("%d", i) + "000000000000000000000000000000000000000000000000000000000000006a000000000000000000000000000000000000000000000000000000000000000a00000000000000000000000000000000000000000000000000000000000027100000000000000000000000000000000000000000000000000000000000000002"),
CreatedAt: time.Now(),
})`
$DIR/core/services/vrf/v2/listener_v2_log_listener_test.go: `logs = append(logs, logpoller.Log{
EvmChainId: chainID,
LogIndex: 0,
BlockHash: common.BigToHash(big.NewInt(int64(2*i + 1))),
BlockNumber: int64(2*i + 1),
BlockTimestamp: time.Now(),
Topics: [][]byte{
common.FromHex("0x7dffc5ae5ee4e2e4df1651cf6ad329a73cebdb728f37ea0187b9b17e036756e4"),
common.FromHex("0x000000000000000000000000000000000000000000000000000000000000000" + fmt.Sprintf("%d", i)),
},
EventSig: vrfEmitterABI.Events["RandomWordsFulfilled"].ID,
Address: common.Address{},
TxHash: common.BigToHash(big.NewInt(int64(2*i + 1))),
Data: common.FromHex("0x0000000000000000000000000000000000000000000000000000000000000069000000000000000000000000000000000000000000000000000000000000000a0000000000000000000000000000000000000000000000000000000000000001"),
CreatedAt: time.Now(),
})`
$DIR/core/services/vrf/v2/listener_v2_log_listener_test.go: `.Context(t)`
$DIR/core/services/vrf/v2/listener_v2_log_listener_test.go: `.On("ID")`
$DIR/core/services/vrf/v2/listener_v2_log_listener_test.go: `.Return(th.ChainID)`
$DIR/core/services/vrf/v2/listener_v2_log_listener_test.go: `.On("LogPoller")`
$DIR/core/services/vrf/v2/listener_v2_log_listener_test.go: `.Return(th.LogPoller)`
$DIR/core/services/vrf/v2/listener_v2_log_listener_test.go: `.Client.Commit()`
$DIR/core/services/vrf/v2/listener_v2_log_listener_test.go: `.Emitter.EmitLog1(th.Owner, []*big.Int{big.NewInt(int64(i))})`
$DIR/core/services/vrf/v2/listener_v2_log_listener_test.go: `.NewInt(int64(i))`
$DIR/core/services/vrf/v2/listener_v2_log_listener_test.go: `.Emitter.EmitLog2(th.Owner, []*big.Int{big.NewInt(int64(i))})`
$DIR/core/services/vrf/v2/listener_v2_log_listener_test.go: `.NewInt(int64(i))`
$DIR/core/services/vrf/v2/listener_v2_log_listener_test.go: `.Client.Commit()`
$DIR/core/services/vrf/v2/listener_v2_log_listener_test.go: `.LogPoller.Logs(testutils.Context(t), 4, 7, emitterABI.Events["Log1"].ID, th.EmitterAddress)`
$DIR/core/services/vrf/v2/listener_v2_log_listener_test.go: `.Context(t)`
$DIR/core/services/vrf/v2/listener_v2_log_listener_test.go: `.Listener.initializeLastProcessedBlock(ctx)`
$DIR/core/services/vrf/v2/listener_v2_log_listener_test.go: `.On("LogPoller")`
$DIR/core/services/vrf/v2/listener_v2_log_listener_test.go: `.Maybe()`
$DIR/core/services/vrf/v2/listener_v2_log_listener_test.go: `.Return(th.LogPoller)`
$DIR/core/services/vrf/v2/listener_v2_log_listener_test.go: `.Listener.runLogListener(time.Second, 1)`
$DIR/core/services/vrf/v2/listener_v2_log_listener_test.go: `.Listener.getLogPollerFilterName()`
$DIR/core/services/vrf/v2/listener_v2_log_listener_test.go: `.NewWithT(t)`
$DIR/core/services/vrf/v2/listener_v2_log_listener_test.go: `.Eventually(func() bool {
return th.Listener.chain.LogPoller().HasFilter(filterName)
}, testutils.WaitTimeout(t), time.Second)`
$DIR/core/services/vrf/v2/listener_v2_log_listener_test.go: `.Listener.chain.LogPoller()`
$DIR/core/services/vrf/v2/listener_v2_log_listener_test.go: `.HasFilter(filterName)`
$DIR/core/services/vrf/v2/listener_v2_log_listener_test.go: `.WaitTimeout(t)`
$DIR/core/services/vrf/v2/listener_v2_log_listener_test.go: `.Should(gomega.BeTrue())`
$DIR/core/services/vrf/v2/listener_v2_log_listener_test.go: `.BeTrue()`
$DIR/core/services/vrf/v2/listener_v2_log_listener_test.go: `.NewWithT(t)`
$DIR/core/services/vrf/v2/listener_v2_log_listener_test.go: `.Consistently(func() bool {
return th.Listener.chain.LogPoller().HasFilter(filterName)
}, 5*time.Second, 1*time.Second)`
$DIR/core/services/vrf/v2/listener_v2_log_listener_test.go: `.Listener.chain.LogPoller()`
$DIR/core/services/vrf/v2/listener_v2_log_listener_test.go: `.HasFilter(filterName)`
$DIR/core/services/vrf/v2/listener_v2_log_listener_test.go: `.Should(gomega.BeTrue())`
$DIR/core/services/vrf/v2/listener_v2_log_listener_test.go: `.BeTrue()`
$DIR/core/services/vrf/v2/listener_v2_log_listener_test.go: `.Context(t)`
$DIR/core/services/vrf/v2/listener_v2_log_listener_test.go: `.On("ID")`
$DIR/core/services/vrf/v2/listener_v2_log_listener_test.go: `.Return(curTH.ChainID)`
$DIR/core/services/vrf/v2/listener_v2_log_listener_test.go: `.On("LogPoller")`
$DIR/core/services/vrf/v2/listener_v2_log_listener_test.go: `.Return(curTH.LogPoller)`
$DIR/core/services/vrf/v2/listener_v2_log_listener_test.go: `.Client.Commit()`
$DIR/core/services/vrf/v2/listener_v2_log_listener_test.go: `.Listener.job.VRFSpec.PublicKey.MustHash()`
$DIR/core/services/vrf/v2/listener_v2_log_listener_test.go: `.Bytes()`
$DIR/core/services/vrf/v2/listener_v2_log_listener_test.go: `.NewInt(105)`
$DIR/core/services/vrf/v2/listener_v2_log_listener_test.go: `.NewInt(1)`
$DIR/core/services/vrf/v2/listener_v2_log_listener_test.go: `.VRFLogEmitter.EmitRandomWordsRequested(th.Owner,
keyHash, reqID, preSeed, subID, 10, 10000, 2, th.Owner.From)`
$DIR/core/services/vrf/v2/listener_v2_log_listener_test.go: `.Client.Commit()`
$DIR/core/services/vrf/v2/listener_v2_log_listener_test.go: `.VRFLogEmitter.EmitRandomWordsFulfilled(th.Owner, reqID, preSeed, big.NewInt(10), true)`
$DIR/core/services/vrf/v2/listener_v2_log_listener_test.go: `.NewInt(10)`
$DIR/core/services/vrf/v2/listener_v2_log_listener_test.go: `.Client.Commit()`
$DIR/core/services/vrf/v2/listener_v2_log_listener_test.go: `.Emitter.EmitLog1(th.Owner, []*big.Int{big.NewInt(int64(i))})`
$DIR/core/services/vrf/v2/listener_v2_log_listener_test.go: `.NewInt(int64(i))`
$DIR/core/services/vrf/v2/listener_v2_log_listener_test.go: `.Emitter.EmitLog2(th.Owner, []*big.Int{big.NewInt(int64(i))})`
$DIR/core/services/vrf/v2/listener_v2_log_listener_test.go: `.NewInt(int64(i))`
$DIR/core/services/vrf/v2/listener_v2_log_listener_test.go: `.Client.Commit()`
$DIR/core/services/vrf/v2/listener_v2_log_listener_test.go: `.Listener.initializeLastProcessedBlock(ctx)`
$DIR/core/services/vrf/v2/listener_v2_log_listener_test.go: `.Context(t)`
$DIR/core/services/vrf/v2/listener_v2_log_listener_test.go: `.On("ID")`
$DIR/core/services/vrf/v2/listener_v2_log_listener_test.go: `.Return(curTH.ChainID)`
$DIR/core/services/vrf/v2/listener_v2_log_listener_test.go: `.On("LogPoller")`
$DIR/core/services/vrf/v2/listener_v2_log_listener_test.go: `.Return(curTH.LogPoller)`
$DIR/core/services/vrf/v2/listener_v2_log_listener_test.go: `.Client.Commit()`
$DIR/core/services/vrf/v2/listener_v2_log_listener_test.go: `.Listener.job.VRFSpec.PublicKey.MustHash()`
$DIR/core/services/vrf/v2/listener_v2_log_listener_test.go: `.Bytes()`
$DIR/core/services/vrf/v2/listener_v2_log_listener_test.go: `.NewInt(105)`
$DIR/core/services/vrf/v2/listener_v2_log_listener_test.go: `.NewInt(1)`
$DIR/core/services/vrf/v2/listener_v2_log_listener_test.go: `.VRFLogEmitter.EmitRandomWordsRequested(th.Owner,
keyHash, reqID, preSeed, subID, 10, 10000, 2, th.Owner.From)`
$DIR/core/services/vrf/v2/listener_v2_log_listener_test.go: `.Client.Commit()`
$DIR/core/services/vrf/v2/listener_v2_log_listener_test.go: `.Client.Commit()`
$DIR/core/services/vrf/v2/listener_v2_log_listener_test.go: `.Emitter.EmitLog1(th.Owner, []*big.Int{big.NewInt(int64(i))})`
$DIR/core/services/vrf/v2/listener_v2_log_listener_test.go: `.NewInt(int64(i))`
$DIR/core/services/vrf/v2/listener_v2_log_listener_test.go: `.Emitter.EmitLog2(th.Owner, []*big.Int{big.NewInt(int64(i))})`
$DIR/core/services/vrf/v2/listener_v2_log_listener_test.go: `.NewInt(int64(i))`
$DIR/core/services/vrf/v2/listener_v2_log_listener_test.go: `.Client.Commit()`
$DIR/core/services/vrf/v2/listener_v2_log_listener_test.go: `.Listener.initializeLastProcessedBlock(ctx)`
$DIR/core/services/vrf/v2/listener_v2_log_listener_test.go: `.Context(t)`
$DIR/core/services/vrf/v2/listener_v2_log_listener_test.go: `.On("ID")`
$DIR/core/services/vrf/v2/listener_v2_log_listener_test.go: `.Return(curTH.ChainID)`
$DIR/core/services/vrf/v2/listener_v2_log_listener_test.go: `.On("LogPoller")`
$DIR/core/services/vrf/v2/listener_v2_log_listener_test.go: `.Return(curTH.LogPoller)`
$DIR/core/services/vrf/v2/listener_v2_log_listener_test.go: `.Client.Commit()`
$DIR/core/services/vrf/v2/listener_v2_log_listener_test.go: `.Emitter.EmitLog1(th.Owner, []*big.Int{big.NewInt(int64(i))})`
$DIR/core/services/vrf/v2/listener_v2_log_listener_test.go: `.NewInt(int64(i))`
$DIR/core/services/vrf/v2/listener_v2_log_listener_test.go: `.Emitter.EmitLog2(th.Owner, []*big.Int{big.NewInt(int64(i))})`
$DIR/core/services/vrf/v2/listener_v2_log_listener_test.go: `.NewInt(int64(i))`
$DIR/core/services/vrf/v2/listener_v2_log_listener_test.go: `.Client.Commit()`
$DIR/core/services/vrf/v2/listener_v2_log_listener_test.go: `.Listener.job.VRFSpec.PublicKey.MustHash()`
$DIR/core/services/vrf/v2/listener_v2_log_listener_test.go: `.Bytes()`
$DIR/core/services/vrf/v2/listener_v2_log_listener_test.go: `.NewInt(105)`
$DIR/core/services/vrf/v2/listener_v2_log_listener_test.go: `.NewInt(int64(2 * i))`
$DIR/core/services/vrf/v2/listener_v2_log_listener_test.go: `.VRFLogEmitter.EmitRandomWordsRequested(th.Owner,
keyHash, reqID1, preSeed, subID, 10, 10000, 2, th.Owner.From)`
$DIR/core/services/vrf/v2/listener_v2_log_listener_test.go: `.Client.Commit()`
$DIR/core/services/vrf/v2/listener_v2_log_listener_test.go: `.NewInt(int64(2*i + 1))`
$DIR/core/services/vrf/v2/listener_v2_log_listener_test.go: `.VRFLogEmitter.EmitRandomWordsRequested(th.Owner,
keyHash, reqID2, preSeed, subID, 10, 10000, 2, th.Owner.From)`
$DIR/core/services/vrf/v2/listener_v2_log_listener_test.go: `.Client.Commit()`
$DIR/core/services/vrf/v2/listener_v2_log_listener_test.go: `.Listener.initializeLastProcessedBlock(ctx)`
$DIR/core/services/vrf/v2/listener_v2_log_listener_test.go: `.Context(t)`
$DIR/core/services/vrf/v2/listener_v2_log_listener_test.go: `.On("ID")`
$DIR/core/services/vrf/v2/listener_v2_log_listener_test.go: `.Return(curTH.ChainID)`
$DIR/core/services/vrf/v2/listener_v2_log_listener_test.go: `.On("LogPoller")`
$DIR/core/services/vrf/v2/listener_v2_log_listener_test.go: `.Return(curTH.LogPoller)`
$DIR/core/services/vrf/v2/listener_v2_log_listener_test.go: `.Client.Commit()`
$DIR/core/services/vrf/v2/listener_v2_log_listener_test.go: `.Emitter.EmitLog1(th.Owner, []*big.Int{big.NewInt(int64(i))})`
$DIR/core/services/vrf/v2/listener_v2_log_listener_test.go: `.NewInt(int64(i))`
$DIR/core/services/vrf/v2/listener_v2_log_listener_test.go: `.Emitter.EmitLog2(th.Owner, []*big.Int{big.NewInt(int64(i))})`
$DIR/core/services/vrf/v2/listener_v2_log_listener_test.go: `.NewInt(int64(i))`
$DIR/core/services/vrf/v2/listener_v2_log_listener_test.go: `.Client.Commit()`
$DIR/core/services/vrf/v2/listener_v2_log_listener_test.go: `.Listener.job.VRFSpec.PublicKey.MustHash()`
$DIR/core/services/vrf/v2/listener_v2_log_listener_test.go: `.Bytes()`
$DIR/core/services/vrf/v2/listener_v2_log_listener_test.go: `.NewInt(105)`
$DIR/core/services/vrf/v2/listener_v2_log_listener_test.go: `.NewInt(int64(2 * i))`
$DIR/core/services/vrf/v2/listener_v2_log_listener_test.go: `.VRFLogEmitter.EmitRandomWordsRequested(th.Owner,
keyHash, reqID1, preSeed, subID, 10, 10000, 2, th.Owner.From)`
$DIR/core/services/vrf/v2/listener_v2_log_listener_test.go: `.Client.Commit()`
$DIR/core/services/vrf/v2/listener_v2_log_listener_test.go: `.NewInt(int64(2*i + 1))`
$DIR/core/services/vrf/v2/listener_v2_log_listener_test.go: `.VRFLogEmitter.EmitRandomWordsRequested(th.Owner,
keyHash, reqID2, preSeed, subID, 10, 10000, 2, th.Owner.From)`
$DIR/core/services/vrf/v2/listener_v2_log_listener_test.go: `.VRFLogEmitter.EmitRandomWordsFulfilled(th.Owner, reqID1, preSeed, big.NewInt(10), true)`
$DIR/core/services/vrf/v2/listener_v2_log_listener_test.go: `.NewInt(10)`
$DIR/core/services/vrf/v2/listener_v2_log_listener_test.go: `.Client.Commit()`
$DIR/core/services/vrf/v2/listener_v2_log_listener_test.go: `.Listener.initializeLastProcessedBlock(ctx)`
$DIR/core/services/vrf/v2/listener_v2_log_listener_test.go: `.Context(t)`
$DIR/core/services/vrf/v2/listener_v2_log_listener_test.go: `.On("LogPoller")`
$DIR/core/services/vrf/v2/listener_v2_log_listener_test.go: `.Return(curTH.LogPoller)`
$DIR/core/services/vrf/v2/listener_v2_log_listener_test.go: `.Client.Commit()`
$DIR/core/services/vrf/v2/listener_v2_log_listener_test.go: `.Listener.job.VRFSpec.PublicKey.MustHash()`
$DIR/core/services/vrf/v2/listener_v2_log_listener_test.go: `.Bytes()`
$DIR/core/services/vrf/v2/listener_v2_log_listener_test.go: `.NewInt(105)`
$DIR/core/services/vrf/v2/listener_v2_log_listener_test.go: `.NewInt(int64(1))`
$DIR/core/services/vrf/v2/listener_v2_log_listener_test.go: `.VRFLogEmitter.EmitRandomWordsRequested(th.Owner,
keyHash, reqID1, preSeed, subID, 10, 10000, 2, th.Owner.From)`
$DIR/core/services/vrf/v2/listener_v2_log_listener_test.go: `.Client.Commit()`
$DIR/core/services/vrf/v2/listener_v2_log_listener_test.go: `.NewInt(int64(2))`
$DIR/core/services/vrf/v2/listener_v2_log_listener_test.go: `.VRFLogEmitter.EmitRandomWordsRequested(th.Owner,
keyHash, reqID2, preSeed, subID, 10, 10000, 2, th.Owner.From)`
$DIR/core/services/vrf/v2/listener_v2_log_listener_test.go: `.Client.Commit()`
$DIR/core/services/vrf/v2/listener_v2_log_listener_test.go: `.Emitter.EmitLog1(th.Owner, []*big.Int{big.NewInt(int64(i))})`
$DIR/core/services/vrf/v2/listener_v2_log_listener_test.go: `.NewInt(int64(i))`
$DIR/core/services/vrf/v2/listener_v2_log_listener_test.go: `.Emitter.EmitLog2(th.Owner, []*big.Int{big.NewInt(int64(i))})`
$DIR/core/services/vrf/v2/listener_v2_log_listener_test.go: `.NewInt(int64(i))`
$DIR/core/services/vrf/v2/listener_v2_log_listener_test.go: `.Client.Commit()`
$DIR/core/services/vrf/v2/listener_v2_log_listener_test.go: `.Listener.updateLastProcessedBlock(ctx, 7)`
$DIR/core/services/vrf/v2/listener_v2_log_listener_test.go: `.Context(t)`
$DIR/core/services/vrf/v2/listener_v2_log_listener_test.go: `.On("LogPoller")`
$DIR/core/services/vrf/v2/listener_v2_log_listener_test.go: `.Return(curTH.LogPoller)`
$DIR/core/services/vrf/v2/listener_v2_log_listener_test.go: `.Client.Commit()`
$DIR/core/services/vrf/v2/listener_v2_log_listener_test.go: `.Listener.job.VRFSpec.PublicKey.MustHash()`
$DIR/core/services/vrf/v2/listener_v2_log_listener_test.go: `.Bytes()`
$DIR/core/services/vrf/v2/listener_v2_log_listener_test.go: `.NewInt(105)`
$DIR/core/services/vrf/v2/listener_v2_log_listener_test.go: `.NewInt(int64(1))`
$DIR/core/services/vrf/v2/listener_v2_log_listener_test.go: `.VRFLogEmitter.EmitRandomWordsRequested(th.Owner,
keyHash, reqID1, preSeed, subID, 10, 10000, 2, th.Owner.From)`
$DIR/core/services/vrf/v2/listener_v2_log_listener_test.go: `.Client.Commit()`
$DIR/core/services/vrf/v2/listener_v2_log_listener_test.go: `.VRFLogEmitter.EmitRandomWordsFulfilled(th.Owner, reqID1, preSeed, big.NewInt(10), true)`
$DIR/core/services/vrf/v2/listener_v2_log_listener_test.go: `.NewInt(10)`
$DIR/core/services/vrf/v2/listener_v2_log_listener_test.go: `.Client.Commit()`
$DIR/core/services/vrf/v2/listener_v2_log_listener_test.go: `.Emitter.EmitLog1(th.Owner, []*big.Int{big.NewInt(int64(i))})`
$DIR/core/services/vrf/v2/listener_v2_log_listener_test.go: `.NewInt(int64(i))`
$DIR/core/services/vrf/v2/listener_v2_log_listener_test.go: `.Emitter.EmitLog2(th.Owner, []*big.Int{big.NewInt(int64(i))})`
$DIR/core/services/vrf/v2/listener_v2_log_listener_test.go: `.NewInt(int64(i))`
$DIR/core/services/vrf/v2/listener_v2_log_listener_test.go: `.Client.Commit()`
$DIR/core/services/vrf/v2/listener_v2_log_listener_test.go: `.Listener.updateLastProcessedBlock(ctx, 4)`
$DIR/core/services/vrf/v2/listener_v2_log_listener_test.go: `.Context(t)`
$DIR/core/services/vrf/v2/listener_v2_log_listener_test.go: `.On("LogPoller")`
$DIR/core/services/vrf/v2/listener_v2_log_listener_test.go: `.Return(curTH.LogPoller)`
$DIR/core/services/vrf/v2/listener_v2_log_listener_test.go: `.Client.Commit()`
$DIR/core/services/vrf/v2/listener_v2_log_listener_test.go: `.Listener.job.VRFSpec.PublicKey.MustHash()`
$DIR/core/services/vrf/v2/listener_v2_log_listener_test.go: `.Bytes()`
$DIR/core/services/vrf/v2/listener_v2_log_listener_test.go: `.NewInt(105)`
$DIR/core/services/vrf/v2/listener_v2_log_listener_test.go: `.NewInt(int64(1))`
$DIR/core/services/vrf/v2/listener_v2_log_listener_test.go: `.VRFLogEmitter.EmitRandomWordsRequested(th.Owner,
keyHash, reqID1, preSeed, subID, 10, 10000, 2, th.Owner.From)`
$DIR/core/services/vrf/v2/listener_v2_log_listener_test.go: `.Client.Commit()`
$DIR/core/services/vrf/v2/listener_v2_log_listener_test.go: `.Emitter.EmitLog1(th.Owner, []*big.Int{big.NewInt(int64(i))})`
$DIR/core/services/vrf/v2/listener_v2_log_listener_test.go: `.NewInt(int64(i))`
$DIR/core/services/vrf/v2/listener_v2_log_listener_test.go: `.Emitter.EmitLog2(th.Owner, []*big.Int{big.NewInt(int64(i))})`
$DIR/core/services/vrf/v2/listener_v2_log_listener_test.go: `.NewInt(int64(i))`
$DIR/core/services/vrf/v2/listener_v2_log_listener_test.go: `.Client.Commit()`
$DIR/core/services/vrf/v2/listener_v2_log_listener_test.go: `.Listener.updateLastProcessedBlock(ctx, 4)`
$DIR/core/services/vrf/v2/listener_v2_log_listener_test.go: `.Context(t)`
$DIR/core/services/vrf/v2/listener_v2_log_listener_test.go: `.On("LogPoller")`
$DIR/core/services/vrf/v2/listener_v2_log_listener_test.go: `.Return(curTH.LogPoller)`
$DIR/core/services/vrf/v2/listener_v2_log_listener_test.go: `.Client.Commit()`
$DIR/core/services/vrf/v2/listener_v2_log_listener_test.go: `.Emitter.EmitLog1(th.Owner, []*big.Int{big.NewInt(int64(i))})`
$DIR/core/services/vrf/v2/listener_v2_log_listener_test.go: `.NewInt(int64(i))`
$DIR/core/services/vrf/v2/listener_v2_log_listener_test.go: `.Emitter.EmitLog2(th.Owner, []*big.Int{big.NewInt(int64(i))})`
$DIR/core/services/vrf/v2/listener_v2_log_listener_test.go: `.NewInt(int64(i))`
$DIR/core/services/vrf/v2/listener_v2_log_listener_test.go: `.Client.Commit()`
$DIR/core/services/vrf/v2/listener_v2_log_listener_test.go: `.Listener.job.VRFSpec.PublicKey.MustHash()`
$DIR/core/services/vrf/v2/listener_v2_log_listener_test.go: `.Bytes()`
$DIR/core/services/vrf/v2/listener_v2_log_listener_test.go: `.NewInt(105)`
$DIR/core/services/vrf/v2/listener_v2_log_listener_test.go: `.NewInt(int64(2 * i))`
$DIR/core/services/vrf/v2/listener_v2_log_listener_test.go: `.VRFLogEmitter.EmitRandomWordsRequested(th.Owner,
keyHash, reqID1, preSeed, subID, 10, 10000, 2, th.Owner.From)`
$DIR/core/services/vrf/v2/listener_v2_log_listener_test.go: `.Client.Commit()`
$DIR/core/services/vrf/v2/listener_v2_log_listener_test.go: `.NewInt(int64(2*i + 1))`
$DIR/core/services/vrf/v2/listener_v2_log_listener_test.go: `.VRFLogEmitter.EmitRandomWordsRequested(th.Owner,
keyHash, reqID2, preSeed, subID, 10, 10000, 2, th.Owner.From)`
$DIR/core/services/vrf/v2/listener_v2_log_listener_test.go: `.Client.Commit()`
$DIR/core/services/vrf/v2/listener_v2_log_listener_test.go: `.Listener.updateLastProcessedBlock(ctx, 4)`
$DIR/core/services/vrf/v2/listener_v2_log_listener_test.go: `.Context(t)`
$DIR/core/services/vrf/v2/listener_v2_log_listener_test.go: `.On("LogPoller")`
$DIR/core/services/vrf/v2/listener_v2_log_listener_test.go: `.Return(curTH.LogPoller)`
$DIR/core/services/vrf/v2/listener_v2_log_listener_test.go: `.Client.Commit()`
$DIR/core/services/vrf/v2/listener_v2_log_listener_test.go: `.Emitter.EmitLog1(th.Owner, []*big.Int{big.NewInt(int64(i))})`
$DIR/core/services/vrf/v2/listener_v2_log_listener_test.go: `.NewInt(int64(i))`
$DIR/core/services/vrf/v2/listener_v2_log_listener_test.go: `.Emitter.EmitLog2(th.Owner, []*big.Int{big.NewInt(int64(i))})`
$DIR/core/services/vrf/v2/listener_v2_log_listener_test.go: `.NewInt(int64(i))`
$DIR/core/services/vrf/v2/listener_v2_log_listener_test.go: `.Client.Commit()`
$DIR/core/services/vrf/v2/listener_v2_log_listener_test.go: `.Listener.job.VRFSpec.PublicKey.MustHash()`
$DIR/core/services/vrf/v2/listener_v2_log_listener_test.go: `.Bytes()`
$DIR/core/services/vrf/v2/listener_v2_log_listener_test.go: `.NewInt(105)`
$DIR/core/services/vrf/v2/listener_v2_log_listener_test.go: `.NewInt(int64(2 * i))`
$DIR/core/services/vrf/v2/listener_v2_log_listener_test.go: `.VRFLogEmitter.EmitRandomWordsRequested(th.Owner,
keyHash, reqID1, preSeed, subID, 10, 10000, 2, th.Owner.From)`
$DIR/core/services/vrf/v2/listener_v2_log_listener_test.go: `.Client.Commit()`
$DIR/core/services/vrf/v2/listener_v2_log_listener_test.go: `.NewInt(int64(2*i + 1))`
$DIR/core/services/vrf/v2/listener_v2_log_listener_test.go: `.VRFLogEmitter.EmitRandomWordsRequested(th.Owner,
keyHash, reqID2, preSeed, subID, 10, 10000, 2, th.Owner.From)`
$DIR/core/services/vrf/v2/listener_v2_log_listener_test.go: `.VRFLogEmitter.EmitRandomWordsFulfilled(th.Owner, reqID1, preSeed, big.NewInt(10), true)`
$DIR/core/services/vrf/v2/listener_v2_log_listener_test.go: `.NewInt(10)`
$DIR/core/services/vrf/v2/listener_v2_log_listener_test.go: `.Client.Commit()`
$DIR/core/services/vrf/v2/listener_v2_log_listener_test.go: `.Listener.updateLastProcessedBlock(ctx, 4)`
$DIR/core/services/vrf/v2/listener_v2_log_listener_test.go: `.BigToHash(big.NewInt(int64(i)))`
$DIR/core/services/vrf/v2/listener_v2_log_listener_test.go: `.NewInt(int64(i))`
$DIR/core/services/vrf/v2/listener_v2_log_listener_test.go: `.Now()`
$DIR/core/services/vrf/v2/listener_v2_log_listener_test.go: `.BigToHash(big.NewInt(int64(i)))`
$DIR/core/services/vrf/v2/listener_v2_log_listener_test.go: `.NewInt(int64(i))`
$DIR/core/services/vrf/v2/listener_v2_log_listener_test.go: `.Now()`
$DIR/core/services/vrf/v2/listener_v2_log_listener_test.go: `.getUnfulfilled(logs, listener.l)`
$DIR/core/services/vrf/v2/listener_v2_log_listener_test.go: `.FromHex("0x46692c0e59ca9cd1ad8f984a9d11715ec83424398b7eed4e05c8ce84662415a8")`
$DIR/core/services/vrf/v2/listener_v2_log_listener_test.go: `.FromHex("0x63373d1c4696214b898952999c9aaec57dac1ee2723cec59bea6888f489a9772")`
$DIR/core/services/vrf/v2/listener_v2_log_listener_test.go: `.FromHex("0xc0a6c424ac7157ae408398df7e5f4552091a69125d5dfcb7b8c2659029395bdf")`
$DIR/core/services/vrf/v2/listener_v2_log_listener_test.go: `.FromHex("0x0000000000000000000000000000000000000000000000000000000000000001")`
$DIR/core/services/vrf/v2/listener_v2_log_listener_test.go: `.FromHex("0x0000000000000000000000005ee3b50502b5c4c9184dcb281471a0614d4b2ef9")`
$DIR/core/services/vrf/v2/listener_v2_log_listener_test.go: `.BigToHash(big.NewInt(int64(2 * i)))`
$DIR/core/services/vrf/v2/listener_v2_log_listener_test.go: `.NewInt(int64(2 * i))`
$DIR/core/services/vrf/v2/listener_v2_log_listener_test.go: `.Now()`
$DIR/core/services/vrf/v2/listener_v2_log_listener_test.go: `.BigToHash(big.NewInt(int64(2 * i)))`
$DIR/core/services/vrf/v2/listener_v2_log_listener_test.go: `.NewInt(int64(2 * i))`
$DIR/core/services/vrf/v2/listener_v2_log_listener_test.go: `.FromHex("0x000000000000000000000000000000000000000000000000000000000000000" + fmt.Sprintf("%d", i) + "000000000000000000000000000000000000000000000000000000000000006a000000000000000000000000000000000000000000000000000000000000000a00000000000000000000000000000000000000000000000000000000000027100000000000000000000000000000000000000000000000000000000000000002")`
$DIR/core/services/vrf/v2/listener_v2_log_listener_test.go: `.Sprintf("%d", i)`
$DIR/core/services/vrf/v2/listener_v2_log_listener_test.go: `.Now()`
$DIR/core/services/vrf/v2/listener_v2_log_listener_test.go: `.BigToHash(big.NewInt(int64(2*i + 1)))`
$DIR/core/services/vrf/v2/listener_v2_log_listener_test.go: `.NewInt(int64(2*i + 1))`
$DIR/core/services/vrf/v2/listener_v2_log_listener_test.go: `.Now()`
$DIR/core/services/vrf/v2/listener_v2_log_listener_test.go: `.FromHex("0x7dffc5ae5ee4e2e4df1651cf6ad329a73cebdb728f37ea0187b9b17e036756e4")`
$DIR/core/services/vrf/v2/listener_v2_log_listener_test.go: `.FromHex("0x000000000000000000000000000000000000000000000000000000000000000" + fmt.Sprintf("%d", i))`
$DIR/core/services/vrf/v2/listener_v2_log_listener_test.go: `.Sprintf("%d", i)`
$DIR/core/services/vrf/v2/listener_v2_log_listener_test.go: `.BigToHash(big.NewInt(int64(2*i + 1)))`
$DIR/core/services/vrf/v2/listener_v2_log_listener_test.go: `.NewInt(int64(2*i + 1))`
$DIR/core/services/vrf/v2/listener_v2_log_listener_test.go: `.FromHex("0x0000000000000000000000000000000000000000000000000000000000000069000000000000000000000000000000000000000000000000000000000000000a0000000000000000000000000000000000000000000000000000000000000001")`
$DIR/core/services/vrf/v2/listener_v2_log_listener_test.go: `.Now()`
$DIR/core/services/vrf/v2/listener_v2_log_listener_test.go: `.getUnfulfilled(logs, listener.l)`
$DIR/core/services/vrf/v2/listener_v2_log_listener_test.go: `.FromHex("0x46692c0e59ca9cd1ad8f984a9d11715ec83424398b7eed4e05c8ce84662415a8")`
$DIR/core/services/vrf/v2/listener_v2_log_listener_test.go: `.FromHex("0x63373d1c4696214b898952999c9aaec57dac1ee2723cec59bea6888f489a9772")`
$DIR/core/services/vrf/v2/listener_v2_log_listener_test.go: `.FromHex("0xc0a6c424ac7157ae408398df7e5f4552091a69125d5dfcb7b8c2659029395bdf")`
$DIR/core/services/vrf/v2/listener_v2_log_listener_test.go: `.FromHex("0x0000000000000000000000000000000000000000000000000000000000000001")`
$DIR/core/services/vrf/v2/listener_v2_log_listener_test.go: `.FromHex("0x0000000000000000000000005ee3b50502b5c4c9184dcb281471a0614d4b2ef9")`
$DIR/core/services/vrf/v2/listener_v2_log_listener_test.go: `.BigToHash(big.NewInt(int64(2 * i)))`
$DIR/core/services/vrf/v2/listener_v2_log_listener_test.go: `.NewInt(int64(2 * i))`
$DIR/core/services/vrf/v2/listener_v2_log_listener_test.go: `.Now()`
$DIR/core/services/vrf/v2/listener_v2_log_listener_test.go: `.BigToHash(big.NewInt(int64(2 * i)))`
$DIR/core/services/vrf/v2/listener_v2_log_listener_test.go: `.NewInt(int64(2 * i))`
$DIR/core/services/vrf/v2/listener_v2_log_listener_test.go: `.FromHex("0x000000000000000000000000000000000000000000000000000000000000000" + fmt.Sprintf("%d", i) + "000000000000000000000000000000000000000000000000000000000000006a000000000000000000000000000000000000000000000000000000000000000a00000000000000000000000000000000000000000000000000000000000027100000000000000000000000000000000000000000000000000000000000000002")`
$DIR/core/services/vrf/v2/listener_v2_log_listener_test.go: `.Sprintf("%d", i)`
$DIR/core/services/vrf/v2/listener_v2_log_listener_test.go: `.Now()`
$DIR/core/services/vrf/v2/listener_v2_log_listener_test.go: `.getUnfulfilled(logs, listener.l)`
$DIR/core/services/vrf/v2/listener_v2_log_listener_test.go: `.FromHex("0x46692c0e59ca9cd1ad8f984a9d11715ec83424398b7eed4e05c8ce84662415a8")`
$DIR/core/services/vrf/v2/listener_v2_log_listener_test.go: `.FromHex("0x63373d1c4696214b898952999c9aaec57dac1ee2723cec59bea6888f489a9772")`
$DIR/core/services/vrf/v2/listener_v2_log_listener_test.go: `.FromHex("0xc0a6c424ac7157ae408398df7e5f4552091a69125d5dfcb7b8c2659029395bdf")`
$DIR/core/services/vrf/v2/listener_v2_log_listener_test.go: `.FromHex("0x0000000000000000000000000000000000000000000000000000000000000001")`
$DIR/core/services/vrf/v2/listener_v2_log_listener_test.go: `.FromHex("0x0000000000000000000000005ee3b50502b5c4c9184dcb281471a0614d4b2ef9")`
$DIR/core/services/vrf/v2/listener_v2_log_listener_test.go: `.BigToHash(big.NewInt(int64(2 * i)))`
$DIR/core/services/vrf/v2/listener_v2_log_listener_test.go: `.NewInt(int64(2 * i))`
$DIR/core/services/vrf/v2/listener_v2_log_listener_test.go: `.Now()`
$DIR/core/services/vrf/v2/listener_v2_log_listener_test.go: `.BigToHash(big.NewInt(int64(2 * i)))`
$DIR/core/services/vrf/v2/listener_v2_log_listener_test.go: `.NewInt(int64(2 * i))`
$DIR/core/services/vrf/v2/listener_v2_log_listener_test.go: `.FromHex("0x000000000000000000000000000000000000000000000000000000000000000" + fmt.Sprintf("%d", i) + "000000000000000000000000000000000000000000000000000000000000006a000000000000000000000000000000000000000000000000000000000000000a00000000000000000000000000000000000000000000000000000000000027100000000000000000000000000000000000000000000000000000000000000002")`
$DIR/core/services/vrf/v2/listener_v2_log_listener_test.go: `.Sprintf("%d", i)`
$DIR/core/services/vrf/v2/listener_v2_log_listener_test.go: `.Now()`
$DIR/core/services/vrf/v2/listener_v2_log_listener_test.go: `.getUnfulfilled(logs, listener.l)`
$DIR/core/services/vrf/v2/listener_v2_log_listener_test.go: `.RequestID()`
$DIR/core/services/vrf/v2/listener_v2_log_listener_test.go: `.Int64()`
$DIR/core/services/vrf/v2/listener_v2_log_listener_test.go: `.FromHex("0x46692c0e59ca9cd1ad8f984a9d11715ec83424398b7eed4e05c8ce84662415a8")`
$DIR/core/services/vrf/v2/listener_v2_log_listener_test.go: `.FromHex("0x63373d1c4696214b898952999c9aaec57dac1ee2723cec59bea6888f489a9772")`
$DIR/core/services/vrf/v2/listener_v2_log_listener_test.go: `.FromHex("0xc0a6c424ac7157ae408398df7e5f4552091a69125d5dfcb7b8c2659029395bdf")`
$DIR/core/services/vrf/v2/listener_v2_log_listener_test.go: `.FromHex("0x0000000000000000000000000000000000000000000000000000000000000001")`
$DIR/core/services/vrf/v2/listener_v2_log_listener_test.go: `.FromHex("0x0000000000000000000000005ee3b50502b5c4c9184dcb281471a0614d4b2ef9")`
$DIR/core/services/vrf/v2/listener_v2_log_listener_test.go: `.BigToHash(big.NewInt(int64(2 * i)))`
$DIR/core/services/vrf/v2/listener_v2_log_listener_test.go: `.NewInt(int64(2 * i))`
$DIR/core/services/vrf/v2/listener_v2_log_listener_test.go: `.Now()`
$DIR/core/services/vrf/v2/listener_v2_log_listener_test.go: `.BigToHash(big.NewInt(int64(2 * i)))`
$DIR/core/services/vrf/v2/listener_v2_log_listener_test.go: `.NewInt(int64(2 * i))`
$DIR/core/services/vrf/v2/listener_v2_log_listener_test.go: `.FromHex("0x000000000000000000000000000000000000000000000000000000000000000" + fmt.Sprintf("%d", i) + "000000000000000000000000000000000000000000000000000000000000006a000000000000000000000000000000000000000000000000000000000000000a00000000000000000000000000000000000000000000000000000000000027100000000000000000000000000000000000000000000000000000000000000002")`
$DIR/core/services/vrf/v2/listener_v2_log_listener_test.go: `.Sprintf("%d", i)`
$DIR/core/services/vrf/v2/listener_v2_log_listener_test.go: `.Now()`
$DIR/core/services/vrf/v2/listener_v2_log_listener_test.go: `.BigToHash(big.NewInt(int64(2*i + 1)))`
$DIR/core/services/vrf/v2/listener_v2_log_listener_test.go: `.NewInt(int64(2*i + 1))`
$DIR/core/services/vrf/v2/listener_v2_log_listener_test.go: `.Now()`
$DIR/core/services/vrf/v2/listener_v2_log_listener_test.go: `.FromHex("0x7dffc5ae5ee4e2e4df1651cf6ad329a73cebdb728f37ea0187b9b17e036756e4")`
$DIR/core/services/vrf/v2/listener_v2_log_listener_test.go: `.FromHex("0x000000000000000000000000000000000000000000000000000000000000000" + fmt.Sprintf("%d", i))`
$DIR/core/services/vrf/v2/listener_v2_log_listener_test.go: `.Sprintf("%d", i)`
$DIR/core/services/vrf/v2/listener_v2_log_listener_test.go: `.BigToHash(big.NewInt(int64(2*i + 1)))`
$DIR/core/services/vrf/v2/listener_v2_log_listener_test.go: `.NewInt(int64(2*i + 1))`
$DIR/core/services/vrf/v2/listener_v2_log_listener_test.go: `.FromHex("0x0000000000000000000000000000000000000000000000000000000000000069000000000000000000000000000000000000000000000000000000000000000a0000000000000000000000000000000000000000000000000000000000000001")`
$DIR/core/services/vrf/v2/listener_v2_log_listener_test.go: `.Now()`
$DIR/core/services/vrf/v2/listener_v2_log_listener_test.go: `.getUnfulfilled(logs, listener.l)`
$DIR/core/services/vrf/v2/listener_v2_log_listener_test.go: `.RequestID()`
$DIR/core/services/vrf/v2/listener_v2_log_listener_test.go: `.Int64()`
$DIR/core/services/vrf/v2/listener_v2_test.go: `chain.On("TxManager").Return(txm).Maybe()`
$DIR/core/services/vrf/v2/listener_v2_test.go: `j, err = vrfcommon.ValidatedVRFSpec(testspecs.GenerateVRFSpec(testspecs.VRFSpecParams{
RequestedConfsDelay: 0,
}).Toml())`
$DIR/core/services/vrf/v2/listener_v2_test.go: `listener.job = j`
$DIR/core/services/vrf/v2/listener_v2_test.go: `confirmedAt = listener.getConfirmedAt(NewV2RandomWordsRequested(&vrf_coordinator_v2.VRFCoordinatorV2RandomWordsRequested{
RequestId: big.NewInt(1),
MinimumRequestConfirmations: 100,
Raw: types.Log{
BlockNumber: 100,
},
}), uint32(nodeMinConfs))`
$DIR/core/services/vrf/v2/listener_v2_test.go: `t.Run(test.name, func(t *testing.T) {
lsn := &listenerV2{job: job.Job{
VRFSpec: &job.VRFSpec{
BackoffInitialDelay: test.initial,
BackoffMaxDelay: test.max,
},
}}
req := pendingRequest{
confirmedAtBlock: 5,
attempts: test.retries,
lastTry: time.Now().Add(-test.last),
}
require.Equal(t, test.expected, lsn.ready(req, 10))
})`
$DIR/core/services/vrf/v2/listener_v2_test.go: `.Context(t)`
$DIR/core/services/vrf/v2/listener_v2_test.go: `.NewSqlxDB(t)`
$DIR/core/services/vrf/v2/listener_v2_test.go: `.TestLogger(t)`
$DIR/core/services/vrf/v2/listener_v2_test.go: `.NewInMemory(db, utils.FastScryptParams, lggr)`
$DIR/core/services/vrf/v2/listener_v2_test.go: `.SetUint64(1)`
$DIR/core/services/vrf/v2/listener_v2_test.go: `.ValidatedVRFSpec(testspecs.GenerateVRFSpec(testspecs.VRFSpecParams{
RequestedConfsDelay: 10,
}).Toml())`
$DIR/core/services/vrf/v2/listener_v2_test.go: `.GenerateVRFSpec(testspecs.VRFSpecParams{
RequestedConfsDelay: 10,
})`
$DIR/core/services/vrf/v2/listener_v2_test.go: `.Toml()`
$DIR/core/services/vrf/v2/listener_v2_test.go: `.NewTxStore(db, logger.TestLogger(t))`
$DIR/core/services/vrf/v2/listener_v2_test.go: `.TestLogger(t)`
$DIR/core/services/vrf/v2/listener_v2_test.go: `.NewChain(t)`
$DIR/core/services/vrf/v2/listener_v2_test.go: `.On("TxManager")`
$DIR/core/services/vrf/v2/listener_v2_test.go: `.Return(txm)`
$DIR/core/services/vrf/v2/listener_v2_test.go: `.Maybe()`
$DIR/core/services/vrf/v2/listener_v2_test.go: `.MaybeSubtractReservedEth(testutils.Context(t), big.NewInt(100_000), chainID, subID, vrfcommon.V2)`
$DIR/core/services/vrf/v2/listener_v2_test.go: `.Context(t)`
$DIR/core/services/vrf/v2/listener_v2_test.go: `.NewInt(100_000)`
$DIR/core/services/vrf/v2/listener_v2_test.go: `.NewInt(0)`
$DIR/core/services/vrf/v2/listener_v2_test.go: `.ValidatedVRFSpec(testspecs.GenerateVRFSpec(testspecs.VRFSpecParams{
RequestedConfsDelay: 10,
}).Toml())`
$DIR/core/services/vrf/v2/listener_v2_test.go: `.GenerateVRFSpec(testspecs.VRFSpecParams{
RequestedConfsDelay: 10,
})`
$DIR/core/services/vrf/v2/listener_v2_test.go: `.Toml()`
$DIR/core/services/vrf/v2/listener_v2_test.go: `.getConfirmedAt(NewV2RandomWordsRequested(&vrf_coordinator_v2.VRFCoordinatorV2RandomWordsRequested{
RequestId: big.NewInt(1),
MinimumRequestConfirmations: 100,
Raw: types.Log{
BlockNumber: 100,
},
}), uint32(nodeMinConfs))`
$DIR/core/services/vrf/v2/listener_v2_test.go: `.NewInt(1)`
$DIR/core/services/vrf/v2/listener_v2_test.go: `.ValidatedVRFSpec(testspecs.GenerateVRFSpec(testspecs.VRFSpecParams{
RequestedConfsDelay: 0,
}).Toml())`
$DIR/core/services/vrf/v2/listener_v2_test.go: `.GenerateVRFSpec(testspecs.VRFSpecParams{
RequestedConfsDelay: 0,
})`
$DIR/core/services/vrf/v2/listener_v2_test.go: `.Toml()`
$DIR/core/services/vrf/v2/listener_v2_test.go: `.getConfirmedAt(NewV2RandomWordsRequested(&vrf_coordinator_v2.VRFCoordinatorV2RandomWordsRequested{
RequestId: big.NewInt(1),
MinimumRequestConfirmations: 100,
Raw: types.Log{
BlockNumber: 100,
},
}), uint32(nodeMinConfs))`
$DIR/core/services/vrf/v2/listener_v2_test.go: `.NewInt(1)`
$DIR/core/services/vrf/v2/listener_v2_test.go: `.Run(test.name, func(t *testing.T) {
lsn := &listenerV2{job: job.Job{
VRFSpec: &job.VRFSpec{
BackoffInitialDelay: test.initial,
BackoffMaxDelay: test.max,
},
}}
req := pendingRequest{
confirmedAtBlock: 5,
attempts: test.retries,
lastTry: time.Now().Add(-test.last),
}
require.Equal(t, test.expected, lsn.ready(req, 10))
})`
$DIR/core/services/vrf/v2/listener_v2_test.go: `.Now()`
$DIR/core/services/vrf/v2/listener_v2_test.go: `.Add(-test.last)`
$DIR/core/services/vrf/v2/listener_v2_types_test.go: `bfs.addRun(vrfPipelineResult{
gasLimit: 500,
req: pendingRequest{
req: NewV2RandomWordsRequested(&vrf_coordinator_v2.VRFCoordinatorV2RandomWordsRequested{
RequestId: big.NewInt(1),
Raw: types.Log{
TxHash: common.HexToHash("0xd8d7ecc4800d25fa53ce0372f13a416d98907a7ef3d8d3bdd79cf4fe75529c65"),
},
}),
},
run: pipeline.NewRun(pipeline.Spec{}, pipeline.Vars{}),
}, fromAddress)`
$DIR/core/services/vrf/v2/listener_v2_types_test.go: `bfs.addRun(vrfPipelineResult{
gasLimit: 500,
req: pendingRequest{
req: NewV2RandomWordsRequested(&vrf_coordinator_v2.VRFCoordinatorV2RandomWordsRequested{
RequestId: big.NewInt(1),
Raw: types.Log{
TxHash: common.HexToHash("0xd8d7ecc4800d25fa53ce0372f13a416d98907a7ef3d8d3bdd79cf4fe75529c65"),
},
}),
},
run: pipeline.NewRun(pipeline.Spec{}, pipeline.Vars{}),
}, fromAddress)`
$DIR/core/services/vrf/v2/listener_v2_types_test.go: `bfs.addRun(vrfPipelineResult{
gasLimit: 500,
req: pendingRequest{
req: NewV2_5RandomWordsRequested(&vrf_coordinator_v2_5.VRFCoordinatorV25RandomWordsRequested{
RequestId: big.NewInt(1),
Raw: types.Log{
TxHash: common.HexToHash("0xd8d7ecc4800d25fa53ce0372f13a416d98907a7ef3d8d3bdd79cf4fe75529c65"),
},
}),
},
run: pipeline.NewRun(pipeline.Spec{}, pipeline.Vars{}),
}, fromAddress)`
$DIR/core/services/vrf/v2/listener_v2_types_test.go: `bfs.addRun(vrfPipelineResult{
gasLimit: 500,
req: pendingRequest{
req: NewV2_5RandomWordsRequested(&vrf_coordinator_v2_5.VRFCoordinatorV25RandomWordsRequested{
RequestId: big.NewInt(1),
Raw: types.Log{
TxHash: common.HexToHash("0xd8d7ecc4800d25fa53ce0372f13a416d98907a7ef3d8d3bdd79cf4fe75529c65"),
},
}),
},
run: pipeline.NewRun(pipeline.Spec{}, pipeline.Vars{}),
}, fromAddress)`
$DIR/core/services/vrf/v2/listener_v2_types_test.go: `.NewAddress()`
$DIR/core/services/vrf/v2/listener_v2_types_test.go: `.addRun(vrfPipelineResult{
gasLimit: 500,
req: pendingRequest{
req: NewV2RandomWordsRequested(&vrf_coordinator_v2.VRFCoordinatorV2RandomWordsRequested{
RequestId: big.NewInt(1),
Raw: types.Log{
TxHash: common.HexToHash("0xd8d7ecc4800d25fa53ce0372f13a416d98907a7ef3d8d3bdd79cf4fe75529c65"),
},
}),
},
run: pipeline.NewRun(pipeline.Spec{}, pipeline.Vars{}),
}, fromAddress)`
$DIR/core/services/vrf/v2/listener_v2_types_test.go: `.NewInt(1)`
$DIR/core/services/vrf/v2/listener_v2_types_test.go: `.HexToHash("0xd8d7ecc4800d25fa53ce0372f13a416d98907a7ef3d8d3bdd79cf4fe75529c65")`
$DIR/core/services/vrf/v2/listener_v2_types_test.go: `.NewRun(pipeline.Spec{}, pipeline.Vars{})`
$DIR/core/services/vrf/v2/listener_v2_types_test.go: `.addRun(vrfPipelineResult{
gasLimit: 500,
req: pendingRequest{
req: NewV2RandomWordsRequested(&vrf_coordinator_v2.VRFCoordinatorV2RandomWordsRequested{
RequestId: big.NewInt(1),
Raw: types.Log{
TxHash: common.HexToHash("0xd8d7ecc4800d25fa53ce0372f13a416d98907a7ef3d8d3bdd79cf4fe75529c65"),
},
}),
},
run: pipeline.NewRun(pipeline.Spec{}, pipeline.Vars{}),
}, fromAddress)`
$DIR/core/services/vrf/v2/listener_v2_types_test.go: `.NewInt(1)`
$DIR/core/services/vrf/v2/listener_v2_types_test.go: `.HexToHash("0xd8d7ecc4800d25fa53ce0372f13a416d98907a7ef3d8d3bdd79cf4fe75529c65")`
$DIR/core/services/vrf/v2/listener_v2_types_test.go: `.NewRun(pipeline.Spec{}, pipeline.Vars{})`
$DIR/core/services/vrf/v2/listener_v2_types_test.go: `.NewAddress()`
$DIR/core/services/vrf/v2/listener_v2_types_test.go: `.addRun(vrfPipelineResult{
gasLimit: 500,
req: pendingRequest{
req: NewV2_5RandomWordsRequested(&vrf_coordinator_v2_5.VRFCoordinatorV25RandomWordsRequested{
RequestId: big.NewInt(1),
Raw: types.Log{
TxHash: common.HexToHash("0xd8d7ecc4800d25fa53ce0372f13a416d98907a7ef3d8d3bdd79cf4fe75529c65"),
},
}),
},
run: pipeline.NewRun(pipeline.Spec{}, pipeline.Vars{}),
}, fromAddress)`
$DIR/core/services/vrf/v2/listener_v2_types_test.go: `.NewInt(1)`
$DIR/core/services/vrf/v2/listener_v2_types_test.go: `.HexToHash("0xd8d7ecc4800d25fa53ce0372f13a416d98907a7ef3d8d3bdd79cf4fe75529c65")`
$DIR/core/services/vrf/v2/listener_v2_types_test.go: `.NewRun(pipeline.Spec{}, pipeline.Vars{})`
$DIR/core/services/vrf/v2/listener_v2_types_test.go: `.addRun(vrfPipelineResult{
gasLimit: 500,
req: pendingRequest{
req: NewV2_5RandomWordsRequested(&vrf_coordinator_v2_5.VRFCoordinatorV25RandomWordsRequested{
RequestId: big.NewInt(1),
Raw: types.Log{
TxHash: common.HexToHash("0xd8d7ecc4800d25fa53ce0372f13a416d98907a7ef3d8d3bdd79cf4fe75529c65"),
},
}),
},
run: pipeline.NewRun(pipeline.Spec{}, pipeline.Vars{}),
}, fromAddress)`
$DIR/core/services/vrf/v2/listener_v2_types_test.go: `.NewInt(1)`
$DIR/core/services/vrf/v2/listener_v2_types_test.go: `.HexToHash("0xd8d7ecc4800d25fa53ce0372f13a416d98907a7ef3d8d3bdd79cf4fe75529c65")`
$DIR/core/services/vrf/v2/listener_v2_types_test.go: `.NewRun(pipeline.Spec{}, pipeline.Vars{})`
$DIR/core/services/vrf/vrfcommon/log_dedupe_test.go: `t.Run(test.name, func(t *testing.T) {
deduper := NewLogDeduper(100)
for i := range test.logs {
require.Equal(t, test.results[i], deduper.ShouldDeliver(test.logs[i]),
"expected shouldDeliver for log %d to be %t", i, test.results[i])
}
})`
$DIR/core/services/vrf/vrfcommon/log_dedupe_test.go: `.Run(test.name, func(t *testing.T) {
deduper := NewLogDeduper(100)
for i := range test.logs {
require.Equal(t, test.results[i], deduper.ShouldDeliver(test.logs[i]),
"expected shouldDeliver for log %d to be %t", i, test.results[i])
}
})`
$DIR/core/services/vrf/vrfcommon/validate_test.go: `t.Run(tc.name, func(t *testing.T) {
s, err := ValidatedVRFSpec(tc.toml)
tc.assertion(t, s, err)
})`
$DIR/core/services/vrf/vrfcommon/validate_test.go: `tc.assertion(t, s, err)`
$DIR/core/services/vrf/vrfcommon/validate_test.go: `.Run(tc.name, func(t *testing.T) {
s, err := ValidatedVRFSpec(tc.toml)
tc.assertion(t, s, err)
})`
$DIR/core/services/vrf/vrfcommon/validate_test.go: `.assertion(t, s, err)`
$DIR/core/services/webhook/authorizer_test.go: `_, err = db.Exec(`INSERT INTO external_initiator_webhook_specs (external_initiator_id, webhook_spec_id, spec) VALUES ($1,$2,$3)`, eiBar.ID, webhookSpecWithFooAndBarEI.ID, `{"ei": "bar", "name": "webhookSpecWithFooAndBarEI"}`)`
$DIR/core/services/webhook/authorizer_test.go: `_, err = db.Exec(`INSERT INTO external_initiator_webhook_specs (external_initiator_id, webhook_spec_id, spec) VALUES ($1,$2,$3)`, eiBar.ID, webhookSpecWithBarEI.ID, `{"ei": "bar", "name": "webhookSpecTwoEIs"}`)`
$DIR/core/services/webhook/authorizer_test.go: `t.Run("no user no ei never authorizes", func(t *testing.T) {
a := webhook.NewAuthorizer(db, nil, nil)
can, err := a.CanRun(testutils.Context(t), nil, jobWithFooAndBarEI.ExternalJobID)
require.NoError(t, err)
assert.False(t, can)
can, err = a.CanRun(testutils.Context(t), nil, jobWithNoEI.ExternalJobID)
require.NoError(t, err)
assert.False(t, can)
can, err = a.CanRun(testutils.Context(t), nil, uuid.New())
require.NoError(t, err)
assert.False(t, can)
})`
$DIR/core/services/webhook/authorizer_test.go: `can, err = a.CanRun(testutils.Context(t), nil, jobWithNoEI.ExternalJobID)`
$DIR/core/services/webhook/authorizer_test.go: `can, err = a.CanRun(testutils.Context(t), nil, uuid.New())`
$DIR/core/services/webhook/authorizer_test.go: `t.Run("with user no ei always authorizes", func(t *testing.T) {
a := webhook.NewAuthorizer(db, &sessions.User{}, nil)
can, err := a.CanRun(testutils.Context(t), nil, jobWithFooAndBarEI.ExternalJobID)
require.NoError(t, err)
assert.True(t, can)
can, err = a.CanRun(testutils.Context(t), nil, jobWithNoEI.ExternalJobID)
require.NoError(t, err)
assert.True(t, can)
can, err = a.CanRun(testutils.Context(t), nil, uuid.New())
require.NoError(t, err)
assert.True(t, can)
})`
$DIR/core/services/webhook/authorizer_test.go: `can, err = a.CanRun(testutils.Context(t), nil, jobWithNoEI.ExternalJobID)`
$DIR/core/services/webhook/authorizer_test.go: `can, err = a.CanRun(testutils.Context(t), nil, uuid.New())`
$DIR/core/services/webhook/authorizer_test.go: `can, err = a.CanRun(testutils.Context(t), eiDisabledCfg{}, jobWithFooAndBarEI.ExternalJobID)`
$DIR/core/services/webhook/authorizer_test.go: `can, err = a.CanRun(testutils.Context(t), eiEnabledCfg{}, jobWithBarEI.ExternalJobID)`
$DIR/core/services/webhook/authorizer_test.go: `can, err = a.CanRun(testutils.Context(t), eiEnabledCfg{}, jobWithNoEI.ExternalJobID)`
$DIR/core/services/webhook/authorizer_test.go: `can, err = a.CanRun(testutils.Context(t), eiEnabledCfg{}, uuid.New())`
$DIR/core/services/webhook/authorizer_test.go: `.NewSqlxDB(t)`
$DIR/core/services/webhook/authorizer_test.go: `.NewORM(db)`
$DIR/core/services/webhook/authorizer_test.go: `.MustInsertExternalInitiator(t, borm)`
$DIR/core/services/webhook/authorizer_test.go: `.MustInsertExternalInitiator(t, borm)`
$DIR/core/services/webhook/authorizer_test.go: `.MustInsertWebhookSpec(t, db)`
$DIR/core/services/webhook/authorizer_test.go: `.MustInsertWebhookSpec(t, db)`
$DIR/core/services/webhook/authorizer_test.go: `.MustInsertWebhookSpec(t, db)`
$DIR/core/services/webhook/authorizer_test.go: `.Exec(`INSERT INTO external_initiator_webhook_specs (external_initiator_id, webhook_spec_id, spec) VALUES ($1,$2,$3)`, eiFoo.ID, webhookSpecWithFooAndBarEI.ID, `{"ei": "foo", "name": "webhookSpecWithFooAndBarEI"}`)`
$DIR/core/services/webhook/authorizer_test.go: `.Exec(`INSERT INTO external_initiator_webhook_specs (external_initiator_id, webhook_spec_id, spec) VALUES ($1,$2,$3)`, eiBar.ID, webhookSpecWithFooAndBarEI.ID, `{"ei": "bar", "name": "webhookSpecWithFooAndBarEI"}`)`
$DIR/core/services/webhook/authorizer_test.go: `.Exec(`INSERT INTO external_initiator_webhook_specs (external_initiator_id, webhook_spec_id, spec) VALUES ($1,$2,$3)`, eiBar.ID, webhookSpecWithBarEI.ID, `{"ei": "bar", "name": "webhookSpecTwoEIs"}`)`
$DIR/core/services/webhook/authorizer_test.go: `.Run("no user no ei never authorizes", func(t *testing.T) {
a := webhook.NewAuthorizer(db, nil, nil)
can, err := a.CanRun(testutils.Context(t), nil, jobWithFooAndBarEI.ExternalJobID)
require.NoError(t, err)
assert.False(t, can)
can, err = a.CanRun(testutils.Context(t), nil, jobWithNoEI.ExternalJobID)
require.NoError(t, err)
assert.False(t, can)
can, err = a.CanRun(testutils.Context(t), nil, uuid.New())
require.NoError(t, err)
assert.False(t, can)
})`
$DIR/core/services/webhook/authorizer_test.go: `.NewAuthorizer(db, nil, nil)`
$DIR/core/services/webhook/authorizer_test.go: `.CanRun(testutils.Context(t), nil, jobWithFooAndBarEI.ExternalJobID)`
$DIR/core/services/webhook/authorizer_test.go: `.Context(t)`
$DIR/core/services/webhook/authorizer_test.go: `.CanRun(testutils.Context(t), nil, jobWithNoEI.ExternalJobID)`
$DIR/core/services/webhook/authorizer_test.go: `.Context(t)`
$DIR/core/services/webhook/authorizer_test.go: `.CanRun(testutils.Context(t), nil, uuid.New())`
$DIR/core/services/webhook/authorizer_test.go: `.Context(t)`
$DIR/core/services/webhook/authorizer_test.go: `.New()`
$DIR/core/services/webhook/authorizer_test.go: `.Run("with user no ei always authorizes", func(t *testing.T) {
a := webhook.NewAuthorizer(db, &sessions.User{}, nil)
can, err := a.CanRun(testutils.Context(t), nil, jobWithFooAndBarEI.ExternalJobID)
require.NoError(t, err)
assert.True(t, can)
can, err = a.CanRun(testutils.Context(t), nil, jobWithNoEI.ExternalJobID)
require.NoError(t, err)
assert.True(t, can)
can, err = a.CanRun(testutils.Context(t), nil, uuid.New())
require.NoError(t, err)
assert.True(t, can)
})`
$DIR/core/services/webhook/authorizer_test.go: `.NewAuthorizer(db, &sessions.User{}, nil)`
$DIR/core/services/webhook/authorizer_test.go: `.CanRun(testutils.Context(t), nil, jobWithFooAndBarEI.ExternalJobID)`
$DIR/core/services/webhook/authorizer_test.go: `.Context(t)`
$DIR/core/services/webhook/authorizer_test.go: `.CanRun(testutils.Context(t), nil, jobWithNoEI.ExternalJobID)`
$DIR/core/services/webhook/authorizer_test.go: `.Context(t)`
$DIR/core/services/webhook/authorizer_test.go: `.CanRun(testutils.Context(t), nil, uuid.New())`
$DIR/core/services/webhook/authorizer_test.go: `.Context(t)`
$DIR/core/services/webhook/authorizer_test.go: `.New()`
$DIR/core/services/webhook/authorizer_test.go: `.NewAuthorizer(db, nil, &eiFoo)`
$DIR/core/services/webhook/authorizer_test.go: `.CanRun(testutils.Context(t), eiEnabledCfg{}, jobWithFooAndBarEI.ExternalJobID)`
$DIR/core/services/webhook/authorizer_test.go: `.Context(t)`
$DIR/core/services/webhook/authorizer_test.go: `.CanRun(testutils.Context(t), eiDisabledCfg{}, jobWithFooAndBarEI.ExternalJobID)`
$DIR/core/services/webhook/authorizer_test.go: `.Context(t)`
$DIR/core/services/webhook/authorizer_test.go: `.CanRun(testutils.Context(t), eiEnabledCfg{}, jobWithBarEI.ExternalJobID)`
$DIR/core/services/webhook/authorizer_test.go: `.Context(t)`
$DIR/core/services/webhook/authorizer_test.go: `.CanRun(testutils.Context(t), eiEnabledCfg{}, jobWithNoEI.ExternalJobID)`
$DIR/core/services/webhook/authorizer_test.go: `.Context(t)`
$DIR/core/services/webhook/authorizer_test.go: `.CanRun(testutils.Context(t), eiEnabledCfg{}, uuid.New())`
$DIR/core/services/webhook/authorizer_test.go: `.Context(t)`
$DIR/core/services/webhook/authorizer_test.go: `.New()`
$DIR/core/services/webhook/delegate_test.go: `_, err = delegate.WebhookJobRunner().RunJob(ctx, spec.ExternalJobID, requestBody, meta)`
$DIR/core/services/webhook/delegate_test.go: `err = service.Start(ctx)`
$DIR/core/services/webhook/delegate_test.go: `runner.On("Run", mock.Anything, mock.AnythingOfType("*pipeline.Run"), mock.Anything, mock.Anything, mock.Anything).
Return(false, nil).
Run(func(args mock.Arguments) {
run := args.Get(1).(*pipeline.Run)
run.ID = int64(123)
require.Equal(t, vars, run.Inputs.Val)
}).Once()`
$DIR/core/services/webhook/delegate_test.go: `run.ID = int64(123)`
$DIR/core/services/webhook/delegate_test.go: `runner.On("Run", mock.Anything, mock.AnythingOfType("*pipeline.Run"), mock.Anything, mock.Anything, mock.Anything).
Return(false, expectedErr).Once()`
$DIR/core/services/webhook/delegate_test.go: `_, err = delegate.WebhookJobRunner().RunJob(ctx, spec.ExternalJobID, requestBody, meta)`
$DIR/core/services/webhook/delegate_test.go: `err = service.Close()`
$DIR/core/services/webhook/delegate_test.go: `_, err = delegate.WebhookJobRunner().RunJob(ctx, spec.ExternalJobID, requestBody, meta)`
$DIR/core/services/webhook/delegate_test.go: `.Context(t)`
$DIR/core/services/webhook/delegate_test.go: `.StringFrom("sergtoshi stevemoto")`
$DIR/core/services/webhook/delegate_test.go: `.New()`
$DIR/core/services/webhook/delegate_test.go: `.Name.ValueOrZero()`
$DIR/core/services/webhook/delegate_test.go: `.NewRunner(t)`
$DIR/core/services/webhook/delegate_test.go: `.NewDelegate(runner, eiManager, logger.TestLogger(t))`
$DIR/core/services/webhook/delegate_test.go: `.TestLogger(t)`
$DIR/core/services/webhook/delegate_test.go: `.ServicesForSpec(ctx, *spec)`
$DIR/core/services/webhook/delegate_test.go: `.WebhookJobRunner()`
$DIR/core/services/webhook/delegate_test.go: `.RunJob(ctx, spec.ExternalJobID, requestBody, meta)`
$DIR/core/services/webhook/delegate_test.go: `.Start(ctx)`
$DIR/core/services/webhook/delegate_test.go: `.On("Run", mock.Anything, mock.AnythingOfType("*pipeline.Run"), mock.Anything, mock.Anything, mock.Anything)`
$DIR/core/services/webhook/delegate_test.go: `.AnythingOfType("*pipeline.Run")`
$DIR/core/services/webhook/delegate_test.go: `.
Return(false, nil)`
$DIR/core/services/webhook/delegate_test.go: `.
Run(func(args mock.Arguments) {
run := args.Get(1).(*pipeline.Run)
run.ID = int64(123)
require.Equal(t, vars, run.Inputs.Val)
})`
$DIR/core/services/webhook/delegate_test.go: `.Get(1)`
$DIR/core/services/webhook/delegate_test.go: `.Once()`
$DIR/core/services/webhook/delegate_test.go: `.WebhookJobRunner()`
$DIR/core/services/webhook/delegate_test.go: `.RunJob(ctx, spec.ExternalJobID, requestBody, meta)`
$DIR/core/services/webhook/delegate_test.go: `.New("foo bar")`
$DIR/core/services/webhook/delegate_test.go: `.On("Run", mock.Anything, mock.AnythingOfType("*pipeline.Run"), mock.Anything, mock.Anything, mock.Anything)`
$DIR/core/services/webhook/delegate_test.go: `.AnythingOfType("*pipeline.Run")`
$DIR/core/services/webhook/delegate_test.go: `.
Return(false, expectedErr)`
$DIR/core/services/webhook/delegate_test.go: `.Once()`
$DIR/core/services/webhook/delegate_test.go: `.WebhookJobRunner()`
$DIR/core/services/webhook/delegate_test.go: `.RunJob(ctx, spec.ExternalJobID, requestBody, meta)`
$DIR/core/services/webhook/delegate_test.go: `.WebhookJobRunner()`
$DIR/core/services/webhook/delegate_test.go: `.RunJob(ctx, spec.ExternalJobID, requestBody, meta)`
$DIR/core/services/webhook/delegate_test.go: `.Cause(err)`
$DIR/core/services/webhook/external_initiator_manager_test.go: `pgtest.MustExec(t, db, `INSERT INTO external_initiator_webhook_specs (external_initiator_id, webhook_spec_id, spec) VALUES ($1,$2,$3)`, eiFoo.ID, webhookSpecTwoEIs.ID, `{"ei": "foo", "name": "webhookSpecTwoEIs"}`)`
$DIR/core/services/webhook/external_initiator_manager_test.go: `pgtest.MustExec(t, db, `INSERT INTO external_initiator_webhook_specs (external_initiator_id, webhook_spec_id, spec) VALUES ($1,$2,$3)`, eiBar.ID, webhookSpecTwoEIs.ID, `{"ei": "bar", "name": "webhookSpecTwoEIs"}`)`
$DIR/core/services/webhook/external_initiator_manager_test.go: `pgtest.MustExec(t, db, `INSERT INTO external_initiator_webhook_specs (external_initiator_id, webhook_spec_id, spec) VALUES ($1,$2,$3)`, eiFoo.ID, webhookSpecOneEI.ID, `{"ei": "foo", "name": "webhookSpecOneEI"}`)`
$DIR/core/services/webhook/external_initiator_manager_test.go: `eiWebhookSpecs, jobID, err = eim.Load(ctx, webhookSpecOneEI.ID)`
$DIR/core/services/webhook/external_initiator_manager_test.go: `eiWebhookSpecs, jobID, err = eim.Load(ctx, webhookSpecTwoEIs.ID)`
$DIR/core/services/webhook/external_initiator_manager_test.go: `pgtest.MustExec(t, db, `INSERT INTO external_initiator_webhook_specs (external_initiator_id, webhook_spec_id, spec) VALUES ($1,$2,$3)`, eiWithURL.ID, webhookSpecTwoEIs.ID, `{"ei": "foo", "name": "webhookSpecTwoEIs"}`)`
$DIR/core/services/webhook/external_initiator_manager_test.go: `pgtest.MustExec(t, db, `INSERT INTO external_initiator_webhook_specs (external_initiator_id, webhook_spec_id, spec) VALUES ($1,$2,$3)`, eiNoURL.ID, webhookSpecTwoEIs.ID, `{"ei": "bar", "name": "webhookSpecTwoEIs"}`)`
$DIR/core/services/webhook/external_initiator_manager_test.go: `client.On("Do", mock.MatchedBy(func(r *http.Request) bool {
body, err := r.GetBody()
require.NoError(t, err)
b, err := io.ReadAll(body)
require.NoError(t, err)
assert.Equal(t, jb.ExternalJobID.String(), gjson.GetBytes(b, "jobId").Str)
assert.Equal(t, eiWithURL.Name, gjson.GetBytes(b, "type").Str)
assert.Equal(t, `{"ei":"foo","name":"webhookSpecTwoEIs"}`, gjson.GetBytes(b, "params").Raw)
return r.Method == "POST" && r.URL.String() == eiWithURL.URL.String() && r.Header["Content-Type"][0] == "application/json" && r.Header["X-Chainlink-Ea-Accesskey"][0] == "token" && r.Header["X-Chainlink-Ea-Secret"][0] == "secret"
})).Once().Return(&http.Response{StatusCode: 200, Body: io.NopCloser(strings.NewReader(""))}, nil)`
$DIR/core/services/webhook/external_initiator_manager_test.go: `pgtest.MustExec(t, db, `INSERT INTO external_initiator_webhook_specs (external_initiator_id, webhook_spec_id, spec) VALUES ($1,$2,$3)`, eiWithURL.ID, webhookSpecTwoEIs.ID, `{"ei": "foo", "name": "webhookSpecTwoEIs"}`)`
$DIR/core/services/webhook/external_initiator_manager_test.go: `pgtest.MustExec(t, db, `INSERT INTO external_initiator_webhook_specs (external_initiator_id, webhook_spec_id, spec) VALUES ($1,$2,$3)`, eiNoURL.ID, webhookSpecTwoEIs.ID, `{"ei": "bar", "name": "webhookSpecTwoEIs"}`)`
$DIR/core/services/webhook/external_initiator_manager_test.go: `client.On("Do", mock.MatchedBy(func(r *http.Request) bool {
expectedURL := fmt.Sprintf("%s/%s", eiWithURL.URL.String(), jb.ExternalJobID.String())
return r.Method == "DELETE" && r.URL.String() == expectedURL && r.Header["Content-Type"][0] == "application/json" && r.Header["X-Chainlink-Ea-Accesskey"][0] == "token" && r.Header["X-Chainlink-Ea-Secret"][0] == "secret"
})).Once().Return(&http.Response{StatusCode: 200, Body: io.NopCloser(strings.NewReader(""))}, nil)`
$DIR/core/services/webhook/external_initiator_manager_test.go: `.Context(t)`
$DIR/core/services/webhook/external_initiator_manager_test.go: `.NewSqlxDB(t)`
$DIR/core/services/webhook/external_initiator_manager_test.go: `.NewORM(db)`
$DIR/core/services/webhook/external_initiator_manager_test.go: `.MustInsertExternalInitiator(t, borm)`
$DIR/core/services/webhook/external_initiator_manager_test.go: `.MustInsertExternalInitiator(t, borm)`
$DIR/core/services/webhook/external_initiator_manager_test.go: `.MustInsertWebhookSpec(t, db)`
$DIR/core/services/webhook/external_initiator_manager_test.go: `.MustInsertWebhookSpec(t, db)`
$DIR/core/services/webhook/external_initiator_manager_test.go: `.MustInsertWebhookSpec(t, db)`
$DIR/core/services/webhook/external_initiator_manager_test.go: `.MustExec(t, db, `INSERT INTO external_initiator_webhook_specs (external_initiator_id, webhook_spec_id, spec) VALUES ($1,$2,$3)`, eiFoo.ID, webhookSpecTwoEIs.ID, `{"ei": "foo", "name": "webhookSpecTwoEIs"}`)`
$DIR/core/services/webhook/external_initiator_manager_test.go: `.MustExec(t, db, `INSERT INTO external_initiator_webhook_specs (external_initiator_id, webhook_spec_id, spec) VALUES ($1,$2,$3)`, eiBar.ID, webhookSpecTwoEIs.ID, `{"ei": "bar", "name": "webhookSpecTwoEIs"}`)`
$DIR/core/services/webhook/external_initiator_manager_test.go: `.MustExec(t, db, `INSERT INTO external_initiator_webhook_specs (external_initiator_id, webhook_spec_id, spec) VALUES ($1,$2,$3)`, eiFoo.ID, webhookSpecOneEI.ID, `{"ei": "foo", "name": "webhookSpecOneEI"}`)`
$DIR/core/services/webhook/external_initiator_manager_test.go: `.NewExternalInitiatorManager(db, nil)`
$DIR/core/services/webhook/external_initiator_manager_test.go: `.Load(ctx, webhookSpecNoEIs.ID)`
$DIR/core/services/webhook/external_initiator_manager_test.go: `.Load(ctx, webhookSpecOneEI.ID)`
$DIR/core/services/webhook/external_initiator_manager_test.go: `.Load(ctx, webhookSpecTwoEIs.ID)`
$DIR/core/services/webhook/external_initiator_manager_test.go: `.Context(t)`
$DIR/core/services/webhook/external_initiator_manager_test.go: `.NewSqlxDB(t)`
$DIR/core/services/webhook/external_initiator_manager_test.go: `.NewORM(db)`
$DIR/core/services/webhook/external_initiator_manager_test.go: `.MustInsertExternalInitiatorWithOpts(t, borm, cltest.ExternalInitiatorOpts{
URL: cltest.MustWebURL(t, "http://example.com/foo"),
OutgoingSecret: "secret",
OutgoingToken: "token",
})`
$DIR/core/services/webhook/external_initiator_manager_test.go: `.MustWebURL(t, "http://example.com/foo")`
$DIR/core/services/webhook/external_initiator_manager_test.go: `.MustInsertExternalInitiator(t, borm)`
$DIR/core/services/webhook/external_initiator_manager_test.go: `.MustInsertWebhookSpec(t, db)`
$DIR/core/services/webhook/external_initiator_manager_test.go: `.MustInsertWebhookSpec(t, db)`
$DIR/core/services/webhook/external_initiator_manager_test.go: `.MustExec(t, db, `INSERT INTO external_initiator_webhook_specs (external_initiator_id, webhook_spec_id, spec) VALUES ($1,$2,$3)`, eiWithURL.ID, webhookSpecTwoEIs.ID, `{"ei": "foo", "name": "webhookSpecTwoEIs"}`)`
$DIR/core/services/webhook/external_initiator_manager_test.go: `.MustExec(t, db, `INSERT INTO external_initiator_webhook_specs (external_initiator_id, webhook_spec_id, spec) VALUES ($1,$2,$3)`, eiNoURL.ID, webhookSpecTwoEIs.ID, `{"ei": "bar", "name": "webhookSpecTwoEIs"}`)`
$DIR/core/services/webhook/external_initiator_manager_test.go: `.NewHTTPClient(t)`
$DIR/core/services/webhook/external_initiator_manager_test.go: `.NewExternalInitiatorManager(db, client)`
$DIR/core/services/webhook/external_initiator_manager_test.go: `.On("Do", mock.MatchedBy(func(r *http.Request) bool {
body, err := r.GetBody()
require.NoError(t, err)
b, err := io.ReadAll(body)
require.NoError(t, err)
assert.Equal(t, jb.ExternalJobID.String(), gjson.GetBytes(b, "jobId").Str)
assert.Equal(t, eiWithURL.Name, gjson.GetBytes(b, "type").Str)
assert.Equal(t, `{"ei":"foo","name":"webhookSpecTwoEIs"}`, gjson.GetBytes(b, "params").Raw)
return r.Method == "POST" && r.URL.String() == eiWithURL.URL.String() && r.Header["Content-Type"][0] == "application/json" && r.Header["X-Chainlink-Ea-Accesskey"][0] == "token" && r.Header["X-Chainlink-Ea-Secret"][0] == "secret"
}))`
$DIR/core/services/webhook/external_initiator_manager_test.go: `.MatchedBy(func(r *http.Request) bool {
body, err := r.GetBody()
require.NoError(t, err)
b, err := io.ReadAll(body)
require.NoError(t, err)
assert.Equal(t, jb.ExternalJobID.String(), gjson.GetBytes(b, "jobId").Str)
assert.Equal(t, eiWithURL.Name, gjson.GetBytes(b, "type").Str)
assert.Equal(t, `{"ei":"foo","name":"webhookSpecTwoEIs"}`, gjson.GetBytes(b, "params").Raw)
return r.Method == "POST" && r.URL.String() == eiWithURL.URL.String() && r.Header["Content-Type"][0] == "application/json" && r.Header["X-Chainlink-Ea-Accesskey"][0] == "token" && r.Header["X-Chainlink-Ea-Secret"][0] == "secret"
})`
$DIR/core/services/webhook/external_initiator_manager_test.go: `.GetBody()`
$DIR/core/services/webhook/external_initiator_manager_test.go: `.ReadAll(body)`
$DIR/core/services/webhook/external_initiator_manager_test.go: `.URL.String()`
$DIR/core/services/webhook/external_initiator_manager_test.go: `.URL.String()`
$DIR/core/services/webhook/external_initiator_manager_test.go: `.Once()`
$DIR/core/services/webhook/external_initiator_manager_test.go: `.Return(&http.Response{StatusCode: 200, Body: io.NopCloser(strings.NewReader(""))}, nil)`
$DIR/core/services/webhook/external_initiator_manager_test.go: `.NopCloser(strings.NewReader(""))`
$DIR/core/services/webhook/external_initiator_manager_test.go: `.NewReader("")`
$DIR/core/services/webhook/external_initiator_manager_test.go: `.Notify(ctx, webhookSpecTwoEIs.ID)`
$DIR/core/services/webhook/external_initiator_manager_test.go: `.Context(t)`
$DIR/core/services/webhook/external_initiator_manager_test.go: `.NewSqlxDB(t)`
$DIR/core/services/webhook/external_initiator_manager_test.go: `.NewORM(db)`
$DIR/core/services/webhook/external_initiator_manager_test.go: `.MustInsertExternalInitiatorWithOpts(t, borm, cltest.ExternalInitiatorOpts{
URL: cltest.MustWebURL(t, "http://example.com/foo"),
OutgoingSecret: "secret",
OutgoingToken: "token",
})`
$DIR/core/services/webhook/external_initiator_manager_test.go: `.MustWebURL(t, "http://example.com/foo")`
$DIR/core/services/webhook/external_initiator_manager_test.go: `.MustInsertExternalInitiator(t, borm)`
$DIR/core/services/webhook/external_initiator_manager_test.go: `.MustInsertWebhookSpec(t, db)`
$DIR/core/services/webhook/external_initiator_manager_test.go: `.MustInsertWebhookSpec(t, db)`
$DIR/core/services/webhook/external_initiator_manager_test.go: `.MustExec(t, db, `INSERT INTO external_initiator_webhook_specs (external_initiator_id, webhook_spec_id, spec) VALUES ($1,$2,$3)`, eiWithURL.ID, webhookSpecTwoEIs.ID, `{"ei": "foo", "name": "webhookSpecTwoEIs"}`)`
$DIR/core/services/webhook/external_initiator_manager_test.go: `.MustExec(t, db, `INSERT INTO external_initiator_webhook_specs (external_initiator_id, webhook_spec_id, spec) VALUES ($1,$2,$3)`, eiNoURL.ID, webhookSpecTwoEIs.ID, `{"ei": "bar", "name": "webhookSpecTwoEIs"}`)`
$DIR/core/services/webhook/external_initiator_manager_test.go: `.NewHTTPClient(t)`
$DIR/core/services/webhook/external_initiator_manager_test.go: `.NewExternalInitiatorManager(db, client)`
$DIR/core/services/webhook/external_initiator_manager_test.go: `.On("Do", mock.MatchedBy(func(r *http.Request) bool {
expectedURL := fmt.Sprintf("%s/%s", eiWithURL.URL.String(), jb.ExternalJobID.String())
return r.Method == "DELETE" && r.URL.String() == expectedURL && r.Header["Content-Type"][0] == "application/json" && r.Header["X-Chainlink-Ea-Accesskey"][0] == "token" && r.Header["X-Chainlink-Ea-Secret"][0] == "secret"
}))`
$DIR/core/services/webhook/external_initiator_manager_test.go: `.MatchedBy(func(r *http.Request) bool {
expectedURL := fmt.Sprintf("%s/%s", eiWithURL.URL.String(), jb.ExternalJobID.String())
return r.Method == "DELETE" && r.URL.String() == expectedURL && r.Header["Content-Type"][0] == "application/json" && r.Header["X-Chainlink-Ea-Accesskey"][0] == "token" && r.Header["X-Chainlink-Ea-Secret"][0] == "secret"
})`
$DIR/core/services/webhook/external_initiator_manager_test.go: `.Sprintf("%s/%s", eiWithURL.URL.String(), jb.ExternalJobID.String())`
$DIR/core/services/webhook/external_initiator_manager_test.go: `.URL.String()`
$DIR/core/services/webhook/external_initiator_manager_test.go: `.ExternalJobID.String()`
$DIR/core/services/webhook/external_initiator_manager_test.go: `.URL.String()`
$DIR/core/services/webhook/external_initiator_manager_test.go: `.Once()`
$DIR/core/services/webhook/external_initiator_manager_test.go: `.Return(&http.Response{StatusCode: 200, Body: io.NopCloser(strings.NewReader(""))}, nil)`
$DIR/core/services/webhook/external_initiator_manager_test.go: `.NopCloser(strings.NewReader(""))`
$DIR/core/services/webhook/external_initiator_manager_test.go: `.NewReader("")`
$DIR/core/services/webhook/external_initiator_manager_test.go: `.DeleteJob(ctx, webhookSpecTwoEIs.ID)`
$DIR/core/services/webhook/validate_test.go: `err = jsonapi.Unmarshal(b, &r)`
$DIR/core/services/webhook/validate_test.go: `eim.On("FindExternalInitiatorByName", mock.Anything, "foo").Return(bridges.ExternalInitiator{ID: 42}, nil).Once()`
$DIR/core/services/webhook/validate_test.go: `eim.On("FindExternalInitiatorByName", mock.Anything, "bar").Return(bridges.ExternalInitiator{ID: 43}, nil).Once()`
$DIR/core/services/webhook/validate_test.go: `err = jsonapi.Unmarshal(b, &r)`
$DIR/core/services/webhook/validate_test.go: `eim.On("FindExternalInitiatorByName", mock.Anything, "foo").Return(bridges.ExternalInitiator{ID: 42}, nil).Once()`
$DIR/core/services/webhook/validate_test.go: `eim.On("FindExternalInitiatorByName", mock.Anything, "bar").Return(bridges.ExternalInitiator{}, errors.New("something exploded")).Once()`
$DIR/core/services/webhook/validate_test.go: `eim.On("FindExternalInitiatorByName", mock.Anything, "baz").Return(bridges.ExternalInitiator{}, errors.New("something exploded")).Once()`
$DIR/core/services/webhook/validate_test.go: `t.Run(tc.name, func(t *testing.T) {
t.Parallel()
ctx := testutils.Context(t)
eim := new(webhookmocks.ExternalInitiatorManager)
if tc.mock != nil {
tc.mock(t, eim)
}
s, err := webhook.ValidatedWebhookSpec(ctx, tc.toml, eim)
tc.assertion(t, s, err)
})`
$DIR/core/services/webhook/validate_test.go: `tc.mock(t, eim)`
$DIR/core/services/webhook/validate_test.go: `tc.assertion(t, s, err)`
$DIR/core/services/webhook/validate_test.go: `.Marshal(s.WebhookSpec)`
$DIR/core/services/webhook/validate_test.go: `.Unmarshal(b, &r)`
$DIR/core/services/webhook/validate_test.go: `.On("FindExternalInitiatorByName", mock.Anything, "foo")`
$DIR/core/services/webhook/validate_test.go: `.Return(bridges.ExternalInitiator{ID: 42}, nil)`
$DIR/core/services/webhook/validate_test.go: `.Once()`
$DIR/core/services/webhook/validate_test.go: `.On("FindExternalInitiatorByName", mock.Anything, "bar")`
$DIR/core/services/webhook/validate_test.go: `.Return(bridges.ExternalInitiator{ID: 43}, nil)`
$DIR/core/services/webhook/validate_test.go: `.Once()`
$DIR/core/services/webhook/validate_test.go: `.Marshal(s.WebhookSpec)`
$DIR/core/services/webhook/validate_test.go: `.Unmarshal(b, &r)`
$DIR/core/services/webhook/validate_test.go: `.On("FindExternalInitiatorByName", mock.Anything, "foo")`
$DIR/core/services/webhook/validate_test.go: `.Return(bridges.ExternalInitiator{ID: 42}, nil)`
$DIR/core/services/webhook/validate_test.go: `.Once()`
$DIR/core/services/webhook/validate_test.go: `.On("FindExternalInitiatorByName", mock.Anything, "bar")`
$DIR/core/services/webhook/validate_test.go: `.Return(bridges.ExternalInitiator{}, errors.New("something exploded"))`
$DIR/core/services/webhook/validate_test.go: `.New("something exploded")`
$DIR/core/services/webhook/validate_test.go: `.Once()`
$DIR/core/services/webhook/validate_test.go: `.On("FindExternalInitiatorByName", mock.Anything, "baz")`
$DIR/core/services/webhook/validate_test.go: `.Return(bridges.ExternalInitiator{}, errors.New("something exploded"))`
$DIR/core/services/webhook/validate_test.go: `.New("something exploded")`
$DIR/core/services/webhook/validate_test.go: `.Once()`
$DIR/core/services/webhook/validate_test.go: `.Run(tc.name, func(t *testing.T) {
t.Parallel()
ctx := testutils.Context(t)
eim := new(webhookmocks.ExternalInitiatorManager)
if tc.mock != nil {
tc.mock(t, eim)
}
s, err := webhook.ValidatedWebhookSpec(ctx, tc.toml, eim)
tc.assertion(t, s, err)
})`
$DIR/core/services/webhook/validate_test.go: `.Context(t)`
$DIR/core/services/webhook/validate_test.go: `.mock(t, eim)`
$DIR/core/services/webhook/validate_test.go: `.ValidatedWebhookSpec(ctx, tc.toml, eim)`
$DIR/core/services/webhook/validate_test.go: `.assertion(t, s, err)`
$DIR/core/services/workflows/delegate_test.go: `t.Run(tc.name, func(t *testing.T) {
_, err := workflows.ValidatedWorkflowSpec(tc.workflowTomlFn())
if tc.valid {
require.NoError(t, err)
} else {
require.Error(t, err)
}
})`
$DIR/core/services/workflows/delegate_test.go: `.GenerateWorkflowSpec(workflowId, workflowOwner, "1234567890", "")`
$DIR/core/services/workflows/delegate_test.go: `.Toml()`
$DIR/core/services/workflows/delegate_test.go: `.GenerateWorkflowSpec(id, owner, validName, "")`
$DIR/core/services/workflows/delegate_test.go: `.Toml()`
$DIR/core/services/workflows/delegate_test.go: `.GenerateWorkflowSpec(id, owner, validName, "{}")`
$DIR/core/services/workflows/delegate_test.go: `.Toml()`
$DIR/core/services/workflows/delegate_test.go: `.GenerateWorkflowSpec(id, owner, "", wf)`
$DIR/core/services/workflows/delegate_test.go: `.Toml()`
$DIR/core/services/workflows/delegate_test.go: `.GenerateWorkflowSpec(id, owner, validName, wf)`
$DIR/core/services/workflows/delegate_test.go: `.Toml()`
$DIR/core/services/workflows/delegate_test.go: `.GenerateWorkflowSpec(id, owner, validName+"1", wf)`
$DIR/core/services/workflows/delegate_test.go: `.Toml()`
$DIR/core/services/workflows/delegate_test.go: `.GenerateWorkflowSpec(id, owner, validName, workflow)`
$DIR/core/services/workflows/delegate_test.go: `.Toml()`
$DIR/core/services/workflows/delegate_test.go: `.Run(tc.name, func(t *testing.T) {
_, err := workflows.ValidatedWorkflowSpec(tc.workflowTomlFn())
if tc.valid {
require.NoError(t, err)
} else {
require.Error(t, err)
}
})`
$DIR/core/services/workflows/delegate_test.go: `.ValidatedWorkflowSpec(tc.workflowTomlFn())`
$DIR/core/services/workflows/delegate_test.go: `.workflowTomlFn()`
$DIR/core/services/workflows/engine_test.go: `t.Run(tc.name, func(t *testing.T) {
ctx := testutils.Context(t)
reg := coreCap.NewRegistry(logger.TestLogger(t))
trigger, cr := mockTrigger(t)
require.NoError(t, reg.Add(ctx, trigger))
require.NoError(t, reg.Add(ctx, mockConsensus()))
target1 := mockTarget()
require.NoError(t, reg.Add(ctx, target1))
target2 := newMockCapability(
capabilities.MustNewCapabilityInfo(
"write_ethereum-testnet-sepolia@1.0.0",
capabilities.CapabilityTypeTarget,
"a write capability targeting ethereum sepolia testnet",
),
func(req capabilities.CapabilityRequest) (capabilities.CapabilityResponse, error) {
m := req.Inputs.Underlying["report"].(*values.Map)
return capabilities.CapabilityResponse{
Value: m,
}, nil
},
)
require.NoError(t, reg.Add(ctx, target2))
eng, testHooks := newTestEngine(
t,
reg,
hardcodedWorkflow,
func(c *Config) { c.Store = tc.store },
)
err := eng.Start(ctx)
require.NoError(t, err)
defer eng.Close()
eid := getExecutionId(t, eng, testHooks)
assert.Equal(t, cr, <-target1.response)
assert.Equal(t, cr, <-target2.response)
state, err := eng.executionStates.Get(ctx, eid)
require.NoError(t, err)
assert.Equal(t, state.Status, store.StatusCompleted)
})`
$DIR/core/services/workflows/engine_test.go: `c.Store = tc.store`
$DIR/core/services/workflows/engine_test.go: `err = dbstore.Add(ctx, ec)`
$DIR/core/services/workflows/engine_test.go: `c.Store = dbstore`
$DIR/core/services/workflows/engine_test.go: `err = eng.Start(ctx)`
$DIR/core/services/workflows/engine_test.go: `err = dbstore.Add(ctx, ec)`
$DIR/core/services/workflows/engine_test.go: `c.Store = dbstore`
$DIR/core/services/workflows/engine_test.go: `c.clock = clock`
$DIR/core/services/workflows/engine_test.go: `clock.Advance(15 * time.Minute)`
$DIR/core/services/workflows/engine_test.go: `err = eng.Start(ctx)`
$DIR/core/services/workflows/engine_test.go: `_ = getExecutionId(t, eng, hooks)`
$DIR/core/services/workflows/engine_test.go: `.NewDBStore(pgtest.NewSqlxDB(t), clockwork.NewFakeClock())`
$DIR/core/services/workflows/engine_test.go: `.NewSqlxDB(t)`
$DIR/core/services/workflows/engine_test.go: `.NewFakeClock()`
$DIR/core/services/workflows/engine_test.go: `.NewInMemoryStore()`
$DIR/core/services/workflows/engine_test.go: `.Run(tc.name, func(t *testing.T) {
ctx := testutils.Context(t)
reg := coreCap.NewRegistry(logger.TestLogger(t))
trigger, cr := mockTrigger(t)
require.NoError(t, reg.Add(ctx, trigger))
require.NoError(t, reg.Add(ctx, mockConsensus()))
target1 := mockTarget()
require.NoError(t, reg.Add(ctx, target1))
target2 := newMockCapability(
capabilities.MustNewCapabilityInfo(
"write_ethereum-testnet-sepolia@1.0.0",
capabilities.CapabilityTypeTarget,
"a write capability targeting ethereum sepolia testnet",
),
func(req capabilities.CapabilityRequest) (capabilities.CapabilityResponse, error) {
m := req.Inputs.Underlying["report"].(*values.Map)
return capabilities.CapabilityResponse{
Value: m,
}, nil
},
)
require.NoError(t, reg.Add(ctx, target2))
eng, testHooks := newTestEngine(
t,
reg,
hardcodedWorkflow,
func(c *Config) { c.Store = tc.store },
)
err := eng.Start(ctx)
require.NoError(t, err)
defer eng.Close()
eid := getExecutionId(t, eng, testHooks)
assert.Equal(t, cr, <-target1.response)
assert.Equal(t, cr, <-target2.response)
state, err := eng.executionStates.Get(ctx, eid)
require.NoError(t, err)
assert.Equal(t, state.Status, store.StatusCompleted)
})`
$DIR/core/services/workflows/engine_test.go: `.Context(t)`
$DIR/core/services/workflows/engine_test.go: `.NewRegistry(logger.TestLogger(t))`
$DIR/core/services/workflows/engine_test.go: `.TestLogger(t)`
$DIR/core/services/workflows/engine_test.go: `.MustNewCapabilityInfo(
"write_ethereum-testnet-sepolia@1.0.0",
capabilities.CapabilityTypeTarget,
"a write capability targeting ethereum sepolia testnet",
)`
$DIR/core/services/workflows/engine_test.go: `.Start(ctx)`
$DIR/core/services/workflows/engine_test.go: `.executionStates.Get(ctx, eid)`
$DIR/core/services/workflows/engine_test.go: `.Context(t)`
$DIR/core/services/workflows/engine_test.go: `.NewRegistry(logger.TestLogger(t))`
$DIR/core/services/workflows/engine_test.go: `.TestLogger(t)`
$DIR/core/services/workflows/engine_test.go: `.Start(ctx)`
$DIR/core/services/workflows/engine_test.go: `.executionStates.Get(ctx, eid)`
$DIR/core/services/workflows/engine_test.go: `.Context(t)`
$DIR/core/services/workflows/engine_test.go: `.NewRegistry(logger.TestLogger(t))`
$DIR/core/services/workflows/engine_test.go: `.TestLogger(t)`
$DIR/core/services/workflows/engine_test.go: `.Start(ctx)`
$DIR/core/services/workflows/engine_test.go: `.executionStates.Get(ctx, eid)`
$DIR/core/services/workflows/engine_test.go: `.Context(t)`
$DIR/core/services/workflows/engine_test.go: `.NewRegistry(logger.TestLogger(t))`
$DIR/core/services/workflows/engine_test.go: `.TestLogger(t)`
$DIR/core/services/workflows/engine_test.go: `.Start(ctx)`
$DIR/core/services/workflows/engine_test.go: `.executionStates.Get(ctx, eid)`
$DIR/core/services/workflows/engine_test.go: `.Unwrap(inputs)`
$DIR/core/services/workflows/engine_test.go: `.Unwrap(cr.Value)`
$DIR/core/services/workflows/engine_test.go: `.Unwrap(out)`
$DIR/core/services/workflows/engine_test.go: `.Context(t)`
$DIR/core/services/workflows/engine_test.go: `.NewRegistry(logger.TestLogger(t))`
$DIR/core/services/workflows/engine_test.go: `.TestLogger(t)`
$DIR/core/services/workflows/engine_test.go: `.NewMap(map[string]any{
"123": decimal.NewFromFloat(1.00),
"456": decimal.NewFromFloat(1.25),
"789": decimal.NewFromFloat(1.50),
})`
$DIR/core/services/workflows/engine_test.go: `.NewFromFloat(1.00)`
$DIR/core/services/workflows/engine_test.go: `.NewFromFloat(1.25)`
$DIR/core/services/workflows/engine_test.go: `.NewFromFloat(1.50)`
$DIR/core/services/workflows/engine_test.go: `.NewDBStore(pgtest.NewSqlxDB(t), clockwork.NewFakeClock())`
$DIR/core/services/workflows/engine_test.go: `.NewSqlxDB(t)`
$DIR/core/services/workflows/engine_test.go: `.NewFakeClock()`
$DIR/core/services/workflows/engine_test.go: `.Add(ctx, ec)`
$DIR/core/services/workflows/engine_test.go: `.Start(ctx)`
$DIR/core/services/workflows/engine_test.go: `.Get(ctx, eid)`
$DIR/core/services/workflows/engine_test.go: `.Context(t)`
$DIR/core/services/workflows/engine_test.go: `.NewRegistry(logger.TestLogger(t))`
$DIR/core/services/workflows/engine_test.go: `.TestLogger(t)`
$DIR/core/services/workflows/engine_test.go: `.NewMap(map[string]any{
"123": decimal.NewFromFloat(1.00),
"456": decimal.NewFromFloat(1.25),
"789": decimal.NewFromFloat(1.50),
})`
$DIR/core/services/workflows/engine_test.go: `.NewFromFloat(1.00)`
$DIR/core/services/workflows/engine_test.go: `.NewFromFloat(1.25)`
$DIR/core/services/workflows/engine_test.go: `.NewFromFloat(1.50)`
$DIR/core/services/workflows/engine_test.go: `.NewFakeClock()`
$DIR/core/services/workflows/engine_test.go: `.NewDBStore(pgtest.NewSqlxDB(t), clock)`
$DIR/core/services/workflows/engine_test.go: `.NewSqlxDB(t)`
$DIR/core/services/workflows/engine_test.go: `.Add(ctx, ec)`
$DIR/core/services/workflows/engine_test.go: `.Advance(15 * time.Minute)`
$DIR/core/services/workflows/engine_test.go: `.Start(ctx)`
$DIR/core/services/workflows/engine_test.go: `.Get(ctx, "")`
$DIR/core/services/workflows/models_test.go: `t.Run(tc.name, func(st *testing.T) {
wf, err := Parse(tc.yaml)
if tc.errMsg != "" {
assert.ErrorContains(st, err, tc.errMsg)
} else {
require.NoError(st, err)
adjacencies, err := wf.AdjacencyMap()
require.NoError(t, err)
got := map[string]map[string]struct{}{}
for k, v := range adjacencies {
if _, ok := got[k]; !ok {
got[k] = map[string]struct{}{}
}
for adj := range v {
got[k][adj] = struct{}{}
}
}
assert.Equal(st, tc.graph, got, adjacencies)
}
})`
$DIR/core/services/workflows/models_test.go: `got[k] = map[string]struct{}{}`
$DIR/core/services/workflows/models_test.go: `got[k][adj] = struct{}{}`
$DIR/core/services/workflows/models_test.go: `.Run(tc.name, func(st *testing.T) {
wf, err := Parse(tc.yaml)
if tc.errMsg != "" {
assert.ErrorContains(st, err, tc.errMsg)
} else {
require.NoError(st, err)
adjacencies, err := wf.AdjacencyMap()
require.NoError(t, err)
got := map[string]map[string]struct{}{}
for k, v := range adjacencies {
if _, ok := got[k]; !ok {
got[k] = map[string]struct{}{}
}
for adj := range v {
got[k][adj] = struct{}{}
}
}
assert.Equal(st, tc.graph, got, adjacencies)
}
})`
$DIR/core/services/workflows/models_test.go: `.AdjacencyMap()`
$DIR/core/services/workflows/models_test.go: `.Vertex("evm_median")`
$DIR/core/services/workflows/retryable_test.go: `retries++`
$DIR/core/services/workflows/retryable_test.go: `attempts++`
$DIR/core/services/workflows/retryable_test.go: `time.Sleep(150 * time.Millisecond)`
$DIR/core/services/workflows/retryable_test.go: `cancel()`
$DIR/core/services/workflows/retryable_test.go: `.WithTimeout(context.Background(), 500*time.Millisecond)`
$DIR/core/services/workflows/retryable_test.go: `.Background()`
$DIR/core/services/workflows/retryable_test.go: `.New("test error")`
$DIR/core/services/workflows/retryable_test.go: `.WithCancel(context.Background())`
$DIR/core/services/workflows/retryable_test.go: `.Background()`
$DIR/core/services/workflows/retryable_test.go: `.WithCancel(context.Background())`
$DIR/core/services/workflows/retryable_test.go: `.Background()`
$DIR/core/services/workflows/retryable_test.go: `.New("test error")`
$DIR/core/services/workflows/retryable_test.go: `.WithCancel(context.Background())`
$DIR/core/services/workflows/retryable_test.go: `.Background()`
$DIR/core/services/workflows/retryable_test.go: `.New("immediate failure")`
$DIR/core/services/workflows/retryable_test.go: `.WithCancel(context.Background())`
$DIR/core/services/workflows/retryable_test.go: `.Background()`
$DIR/core/services/workflows/retryable_test.go: `.New("persistent error")`
$DIR/core/services/workflows/retryable_test.go: `.WithCancel(context.Background())`
$DIR/core/services/workflows/retryable_test.go: `.Background()`
$DIR/core/services/workflows/retryable_test.go: `.New("test error")`
$DIR/core/services/workflows/retryable_test.go: `.Sleep(150 * time.Millisecond)`
$DIR/core/services/workflows/state_test.go: `t.Run(tc.name, func(st *testing.T) {
got, err := interpolateKey(tc.key, tc.state)
if tc.errMsg != "" {
require.ErrorContains(st, err, tc.errMsg)
} else {
require.NoError(t, err)
assert.Equal(t, tc.expected, got)
}
})`
$DIR/core/services/workflows/state_test.go: `t.Run(tc.name, func(st *testing.T) {
got, err := findAndInterpolateAllKeys(tc.inputs, tc.state)
if tc.errMsg != "" {
require.ErrorContains(st, err, tc.errMsg)
} else {
require.NoError(t, err)
assert.Equal(t, tc.expected, got)
}
})`
$DIR/core/services/workflows/state_test.go: `.NewMap(
map[string]any{
"reports": map[string]any{
"inner": "key",
},
"reportsList": []any{
"listElement",
},
},
)`
$DIR/core/services/workflows/state_test.go: `.NewString("")`
$DIR/core/services/workflows/state_test.go: `.NewString("")`
$DIR/core/services/workflows/state_test.go: `.New("catastrophic error")`
$DIR/core/services/workflows/state_test.go: `.Run(tc.name, func(st *testing.T) {
got, err := interpolateKey(tc.key, tc.state)
if tc.errMsg != "" {
require.ErrorContains(st, err, tc.errMsg)
} else {
require.NoError(t, err)
assert.Equal(t, tc.expected, got)
}
})`
$DIR/core/services/workflows/state_test.go: `.NewString("")`
$DIR/core/services/workflows/state_test.go: `.NewString("")`
$DIR/core/services/workflows/state_test.go: `.Run(tc.name, func(st *testing.T) {
got, err := findAndInterpolateAllKeys(tc.inputs, tc.state)
if tc.errMsg != "" {
require.ErrorContains(st, err, tc.errMsg)
} else {
require.NoError(t, err)
assert.Equal(t, tc.expected, got)
}
})`
$DIR/core/services/workflows/store/store_db_test.go: `gotEs.CreatedAt = nil`
$DIR/core/services/workflows/store/store_db_test.go: `err = store.Add(tests.Context(t), &es)`
$DIR/core/services/workflows/store/store_db_test.go: `err = store.UpdateStatus(tests.Context(t), es.ExecutionID, "completed")`
$DIR/core/services/workflows/store/store_db_test.go: `stepOne.Status = "completed"`
$DIR/core/services/workflows/store/store_db_test.go: `stepOne.Inputs = nm`
$DIR/core/services/workflows/store/store_db_test.go: `stepOne.Outputs = StepOutput{Err: errors.New("some error")}`
$DIR/core/services/workflows/store/store_db_test.go: `es, err = store.UpsertStep(tests.Context(t), stepOne)`
$DIR/core/services/workflows/store/store_db_test.go: `stepTwo.Outputs = StepOutput{Value: nm}`
$DIR/core/services/workflows/store/store_db_test.go: `es, err = store.UpsertStep(tests.Context(t), stepTwo)`
$DIR/core/services/workflows/store/store_db_test.go: `gotStep = es.Steps[stepTwo.Ref]`
$DIR/core/services/workflows/store/store_db_test.go: `id = randomID()`
$DIR/core/services/workflows/store/store_db_test.go: `err = store.Add(tests.Context(t), &esTwo)`
$DIR/core/services/workflows/store/store_db_test.go: `states[0].CreatedAt = nil`
$DIR/core/services/workflows/store/store_db_test.go: `.NewSqlxDB(t)`
$DIR/core/services/workflows/store/store_db_test.go: `.NewFakeClock()`
$DIR/core/services/workflows/store/store_db_test.go: `.Add(tests.Context(t), &es)`
$DIR/core/services/workflows/store/store_db_test.go: `.Context(t)`
$DIR/core/services/workflows/store/store_db_test.go: `.Get(tests.Context(t), es.ExecutionID)`
$DIR/core/services/workflows/store/store_db_test.go: `.Context(t)`
$DIR/core/services/workflows/store/store_db_test.go: `.NewSqlxDB(t)`
$DIR/core/services/workflows/store/store_db_test.go: `.NewFakeClock()`
$DIR/core/services/workflows/store/store_db_test.go: `.Add(tests.Context(t), &es)`
$DIR/core/services/workflows/store/store_db_test.go: `.Context(t)`
$DIR/core/services/workflows/store/store_db_test.go: `.Add(tests.Context(t), &es)`
$DIR/core/services/workflows/store/store_db_test.go: `.Context(t)`
$DIR/core/services/workflows/store/store_db_test.go: `.NewSqlxDB(t)`
$DIR/core/services/workflows/store/store_db_test.go: `.NewFakeClock()`
$DIR/core/services/workflows/store/store_db_test.go: `.Add(tests.Context(t), &es)`
$DIR/core/services/workflows/store/store_db_test.go: `.Context(t)`
$DIR/core/services/workflows/store/store_db_test.go: `.UpdateStatus(tests.Context(t), es.ExecutionID, "completed")`
$DIR/core/services/workflows/store/store_db_test.go: `.Context(t)`
$DIR/core/services/workflows/store/store_db_test.go: `.Get(tests.Context(t), es.ExecutionID)`
$DIR/core/services/workflows/store/store_db_test.go: `.Context(t)`
$DIR/core/services/workflows/store/store_db_test.go: `.NewSqlxDB(t)`
$DIR/core/services/workflows/store/store_db_test.go: `.NewFakeClock()`
$DIR/core/services/workflows/store/store_db_test.go: `.Add(tests.Context(t), &es)`
$DIR/core/services/workflows/store/store_db_test.go: `.Context(t)`
$DIR/core/services/workflows/store/store_db_test.go: `.NewMap(map[string]any{"hello": "world"})`
$DIR/core/services/workflows/store/store_db_test.go: `.New("some error")`
$DIR/core/services/workflows/store/store_db_test.go: `.UpsertStep(tests.Context(t), stepOne)`
$DIR/core/services/workflows/store/store_db_test.go: `.Context(t)`
$DIR/core/services/workflows/store/store_db_test.go: `.UpsertStep(tests.Context(t), stepTwo)`
$DIR/core/services/workflows/store/store_db_test.go: `.Context(t)`
$DIR/core/services/workflows/store/store_db_test.go: `.NewSqlxDB(t)`
$DIR/core/services/workflows/store/store_db_test.go: `.NewFakeClock()`
$DIR/core/services/workflows/store/store_db_test.go: `.Add(tests.Context(t), &es)`
$DIR/core/services/workflows/store/store_db_test.go: `.Context(t)`
$DIR/core/services/workflows/store/store_db_test.go: `.Add(tests.Context(t), &esTwo)`
$DIR/core/services/workflows/store/store_db_test.go: `.Context(t)`
$DIR/core/services/workflows/store/store_db_test.go: `.GetUnfinished(tests.Context(t), 0, 100)`
$DIR/core/services/workflows/store/store_db_test.go: `.Context(t)`
$DIR/core/sessions/ldapauth/ldap_test.go: `mockLdapClient.On("CreateEphemeralConnection").Return(mockLdapConnProvider, nil)`
$DIR/core/sessions/ldapauth/ldap_test.go: `mockLdapConnProvider.On("Close").Return(nil)`
$DIR/core/sessions/ldapauth/ldap_test.go: `mockLdapConnProvider.On("Search", mock.AnythingOfType("*ldap.SearchRequest")).Return(&expectedResults, nil)`
$DIR/core/sessions/ldapauth/ldap_test.go: `mockLdapClient.On("CreateEphemeralConnection").Return(mockLdapConnProvider, nil)`
$DIR/core/sessions/ldapauth/ldap_test.go: `mockLdapConnProvider.On("Close").Return(nil)`
$DIR/core/sessions/ldapauth/ldap_test.go: `mockLdapConnProvider.On("Search", mock.AnythingOfType("*ldap.SearchRequest")).Return(&expectedResults, nil)`
$DIR/core/sessions/ldapauth/ldap_test.go: `mockLdapClient.On("CreateEphemeralConnection").Return(mockLdapConnProvider, nil)`
$DIR/core/sessions/ldapauth/ldap_test.go: `mockLdapConnProvider.On("Close").Return(nil)`
$DIR/core/sessions/ldapauth/ldap_test.go: `mockLdapConnProvider.On("Search", mock.AnythingOfType("*ldap.SearchRequest")).Return(&expectedResults, nil)`
$DIR/core/sessions/ldapauth/ldap_test.go: `mockLdapClient.On("CreateEphemeralConnection").Return(mockLdapConnProvider, nil)`
$DIR/core/sessions/ldapauth/ldap_test.go: `mockLdapConnProvider.On("Close").Return(nil)`
$DIR/core/sessions/ldapauth/ldap_test.go: `mockLdapConnProvider.On("Search", mock.AnythingOfType("*ldap.SearchRequest")).Return(&expectedResults, nil).Once()`
$DIR/core/sessions/ldapauth/ldap_test.go: `mockLdapConnProvider.On("Search", mock.AnythingOfType("*ldap.SearchRequest")).Return(&expectedGroupResults, nil).Once()`
$DIR/core/sessions/ldapauth/ldap_test.go: `_, err = ldapAuthProvider.FindUserByAPIToken(ctx, apiToken)`
$DIR/core/sessions/ldapauth/ldap_test.go: `mockLdapClient.On("CreateEphemeralConnection").Return(mockLdapConnProvider, nil)`
$DIR/core/sessions/ldapauth/ldap_test.go: `mockLdapConnProvider.On("Close").Return(nil)`
$DIR/core/sessions/ldapauth/ldap_test.go: `mockLdapConnProvider.On("Search", mock.AnythingOfType("*ldap.SearchRequest")).Return(&ldap.SearchResult{
Entries: []*ldap.Entry{
{
DN: fmt.Sprintf("cn=%s,ou=Groups,dc=example,dc=com", ldapauth.NodeAdminsGroupCN),
Attributes: []*ldap.EntryAttribute{
{
Name: ldapauth.UniqueMemberAttribute,
Values: []string{
fmt.Sprintf("uid=%s,ou=users,dc=example,dc=com", user1.Email),
fmt.Sprintf("uid=%s,ou=users,dc=example,dc=com", user2.Email),
},
},
},
},
},
}, nil).Once()`
$DIR/core/sessions/ldapauth/ldap_test.go: `mockLdapConnProvider.On("Search", mock.AnythingOfType("*ldap.SearchRequest")).Return(&ldap.SearchResult{
Entries: []*ldap.Entry{
{
DN: fmt.Sprintf("cn=%s,ou=Groups,dc=example,dc=com", ldapauth.NodeEditorsGroupCN),
Attributes: []*ldap.EntryAttribute{
{
Name: ldapauth.UniqueMemberAttribute,
Values: []string{
fmt.Sprintf("uid=%s,ou=users,dc=example,dc=com", user3.Email),
},
},
},
},
},
}, nil).Once()`
$DIR/core/sessions/ldapauth/ldap_test.go: `mockLdapConnProvider.On("Search", mock.AnythingOfType("*ldap.SearchRequest")).Return(&ldap.SearchResult{
Entries: []*ldap.Entry{
{
DN: "cn=NodeRunners,ou=Groups,dc=example,dc=com",
Attributes: []*ldap.EntryAttribute{
{
Name: ldapauth.UniqueMemberAttribute,
Values: []string{
fmt.Sprintf("uid=%s,ou=users,dc=example,dc=com", user4.Email),
fmt.Sprintf("uid=%s,ou=users,dc=example,dc=com", user4.Email), // Test deduped
fmt.Sprintf("uid=%s,ou=users,dc=example,dc=com", user5.Email),
},
},
},
},
},
}, nil).Once()`
$DIR/core/sessions/ldapauth/ldap_test.go: `mockLdapConnProvider.On("Search", mock.AnythingOfType("*ldap.SearchRequest")).Return(&ldap.SearchResult{
Entries: []*ldap.Entry{
{
DN: "cn=NodeReadOnly,ou=Groups,dc=example,dc=com",
Attributes: []*ldap.EntryAttribute{
{
Name: ldapauth.UniqueMemberAttribute,
Values: []string{
fmt.Sprintf("uid=%s,ou=users,dc=example,dc=com", user6.Email),
},
},
},
},
},
}, nil).Once()`
$DIR/core/sessions/ldapauth/ldap_test.go: `listUpstreamUsersQuery.Entries = append(listUpstreamUsersQuery.Entries, &ldap.Entry{
DN: "cn=User,ou=Users,dc=example,dc=com",
Attributes: []*ldap.EntryAttribute{
{
Name: "organizationalStatus",
Values: []string{upstreamUser.active},
},
{
Name: "uid",
Values: []string{upstreamUser.email},
},
},
},
)`
$DIR/core/sessions/ldapauth/ldap_test.go: `mockLdapConnProvider.On("Search", mock.AnythingOfType("*ldap.SearchRequest")).Return(&listUpstreamUsersQuery, nil).Once()`
$DIR/core/sessions/ldapauth/ldap_test.go: `mockLdapClient.On("CreateEphemeralConnection").Return(mockLdapConnProvider, nil)`
$DIR/core/sessions/ldapauth/ldap_test.go: `mockLdapConnProvider.On("Close").Return(nil)`
$DIR/core/sessions/ldapauth/ldap_test.go: `mockLdapConnProvider.On("Search", mock.AnythingOfType("*ldap.SearchRequest")).Return(&expectedResults, nil).Once()`
$DIR/core/sessions/ldapauth/ldap_test.go: `mockLdapConnProvider.On("Search", mock.AnythingOfType("*ldap.SearchRequest")).Return(&expectedGroupResults, nil).Once()`
$DIR/core/sessions/ldapauth/ldap_test.go: `mockLdapConnProvider.On("Bind", mock.Anything, cltest.Password).Return(nil)`
$DIR/core/sessions/ldapauth/ldap_test.go: `mockLdapClient.On("CreateEphemeralConnection").Return(mockLdapConnProvider, nil)`
$DIR/core/sessions/ldapauth/ldap_test.go: `mockLdapConnProvider.On("Close").Return(nil)`
$DIR/core/sessions/ldapauth/ldap_test.go: `mockLdapConnProvider.On("Bind", mock.Anything, cltest.Password).Return(errors.New("unable to login via LDAP server")).Once()`
$DIR/core/sessions/ldapauth/ldap_test.go: `mockLdapConnProvider.On("Bind", mock.Anything, "incorrect-password").Return(errors.New("unable to login via LDAP server")).Once()`
$DIR/core/sessions/ldapauth/ldap_test.go: `sessionRequest = sessions.SessionRequest{
Email: cltest.APIEmailAdmin,
Password: "incorrect-password",
}`
$DIR/core/sessions/ldapauth/ldap_test.go: `_, err = ldapAuthProvider.CreateSession(ctx, sessionRequest)`
$DIR/core/sessions/ldapauth/ldap_test.go: `mockLdapClient.On("CreateEphemeralConnection").Return(mockLdapConnProvider, nil)`
$DIR/core/sessions/ldapauth/ldap_test.go: `mockLdapConnProvider.On("Close").Return(nil)`
$DIR/core/sessions/ldapauth/ldap_test.go: `mockLdapConnProvider.On("Bind", mock.Anything, cltest.Password).Return(errors.New("unable to login via LDAP server")).Once()`
$DIR/core/sessions/ldapauth/ldap_test.go: `mockLdapConnProvider.On("Bind", mock.Anything, "incorrect-password").Return(errors.New("unable to login via LDAP server")).Once()`
$DIR/core/sessions/ldapauth/ldap_test.go: `sessionRequest = sessions.SessionRequest{
Email: cltest.APIEmailAdmin,
Password: "incorrect-password",
}`
$DIR/core/sessions/ldapauth/ldap_test.go: `_, err = ldapAuthProvider.CreateSession(ctx, sessionRequest)`
$DIR/core/sessions/ldapauth/ldap_test.go: `t.Run(test.name, func(t *testing.T) {
role, err := ldapauth.GroupSearchResultsToUserRole(
test.groupsQuerySearchResult,
cfg.AdminUserGroupCN(),
cfg.EditUserGroupCN(),
cfg.RunUserGroupCN(),
cfg.ReadUserGroupCN(),
)
if test.wantErr != nil {
assert.Equal(t, test.wantErr, err)
} else {
assert.Equal(t, test.wantMappedRole, role)
}
})`
$DIR/core/sessions/ldapauth/ldap_test.go: `.Context(t)`
$DIR/core/sessions/ldapauth/ldap_test.go: `.NewLDAPClient(t)`
$DIR/core/sessions/ldapauth/ldap_test.go: `.NewLDAPConn(t)`
$DIR/core/sessions/ldapauth/ldap_test.go: `.On("CreateEphemeralConnection")`
$DIR/core/sessions/ldapauth/ldap_test.go: `.Return(mockLdapConnProvider, nil)`
$DIR/core/sessions/ldapauth/ldap_test.go: `.On("Close")`
$DIR/core/sessions/ldapauth/ldap_test.go: `.Return(nil)`
$DIR/core/sessions/ldapauth/ldap_test.go: `.On("Search", mock.AnythingOfType("*ldap.SearchRequest"))`
$DIR/core/sessions/ldapauth/ldap_test.go: `.AnythingOfType("*ldap.SearchRequest")`
$DIR/core/sessions/ldapauth/ldap_test.go: `.Return(&expectedResults, nil)`
$DIR/core/sessions/ldapauth/ldap_test.go: `.FindUser(ctx, "unknown-user")`
$DIR/core/sessions/ldapauth/ldap_test.go: `.Context(t)`
$DIR/core/sessions/ldapauth/ldap_test.go: `.NewLDAPClient(t)`
$DIR/core/sessions/ldapauth/ldap_test.go: `.NewLDAPConn(t)`
$DIR/core/sessions/ldapauth/ldap_test.go: `.On("CreateEphemeralConnection")`
$DIR/core/sessions/ldapauth/ldap_test.go: `.Return(mockLdapConnProvider, nil)`
$DIR/core/sessions/ldapauth/ldap_test.go: `.On("Close")`
$DIR/core/sessions/ldapauth/ldap_test.go: `.Return(nil)`
$DIR/core/sessions/ldapauth/ldap_test.go: `.MustRandomUser(t)`
$DIR/core/sessions/ldapauth/ldap_test.go: `.On("Search", mock.AnythingOfType("*ldap.SearchRequest"))`
$DIR/core/sessions/ldapauth/ldap_test.go: `.AnythingOfType("*ldap.SearchRequest")`
$DIR/core/sessions/ldapauth/ldap_test.go: `.Return(&expectedResults, nil)`
$DIR/core/sessions/ldapauth/ldap_test.go: `.FindUser(ctx, user1.Email)`
$DIR/core/sessions/ldapauth/ldap_test.go: `.Context(t)`
$DIR/core/sessions/ldapauth/ldap_test.go: `.NewLDAPClient(t)`
$DIR/core/sessions/ldapauth/ldap_test.go: `.NewLDAPConn(t)`
$DIR/core/sessions/ldapauth/ldap_test.go: `.On("CreateEphemeralConnection")`
$DIR/core/sessions/ldapauth/ldap_test.go: `.Return(mockLdapConnProvider, nil)`
$DIR/core/sessions/ldapauth/ldap_test.go: `.On("Close")`
$DIR/core/sessions/ldapauth/ldap_test.go: `.Return(nil)`
$DIR/core/sessions/ldapauth/ldap_test.go: `.MustRandomUser(t)`
$DIR/core/sessions/ldapauth/ldap_test.go: `.On("Search", mock.AnythingOfType("*ldap.SearchRequest"))`
$DIR/core/sessions/ldapauth/ldap_test.go: `.AnythingOfType("*ldap.SearchRequest")`
$DIR/core/sessions/ldapauth/ldap_test.go: `.Return(&expectedResults, nil)`
$DIR/core/sessions/ldapauth/ldap_test.go: `.FindUser(ctx, user1.Email)`
$DIR/core/sessions/ldapauth/ldap_test.go: `.Context(t)`
$DIR/core/sessions/ldapauth/ldap_test.go: `.NewLDAPClient(t)`
$DIR/core/sessions/ldapauth/ldap_test.go: `.NewLDAPConn(t)`
$DIR/core/sessions/ldapauth/ldap_test.go: `.On("CreateEphemeralConnection")`
$DIR/core/sessions/ldapauth/ldap_test.go: `.Return(mockLdapConnProvider, nil)`
$DIR/core/sessions/ldapauth/ldap_test.go: `.On("Close")`
$DIR/core/sessions/ldapauth/ldap_test.go: `.Return(nil)`
$DIR/core/sessions/ldapauth/ldap_test.go: `.MustRandomUser(t)`
$DIR/core/sessions/ldapauth/ldap_test.go: `.On("Search", mock.AnythingOfType("*ldap.SearchRequest"))`
$DIR/core/sessions/ldapauth/ldap_test.go: `.AnythingOfType("*ldap.SearchRequest")`
$DIR/core/sessions/ldapauth/ldap_test.go: `.Return(&expectedResults, nil)`
$DIR/core/sessions/ldapauth/ldap_test.go: `.Once()`
$DIR/core/sessions/ldapauth/ldap_test.go: `.On("Search", mock.AnythingOfType("*ldap.SearchRequest"))`
$DIR/core/sessions/ldapauth/ldap_test.go: `.AnythingOfType("*ldap.SearchRequest")`
$DIR/core/sessions/ldapauth/ldap_test.go: `.Return(&expectedGroupResults, nil)`
$DIR/core/sessions/ldapauth/ldap_test.go: `.Once()`
$DIR/core/sessions/ldapauth/ldap_test.go: `.FindUser(ctx, user1.Email)`
$DIR/core/sessions/ldapauth/ldap_test.go: `.Context(t)`
$DIR/core/sessions/ldapauth/ldap_test.go: `.NewLDAPClient(t)`
$DIR/core/sessions/ldapauth/ldap_test.go: `.FindUser(ctx, cltest.APIEmailAdmin)`
$DIR/core/sessions/ldapauth/ldap_test.go: `.Context(t)`
$DIR/core/sessions/ldapauth/ldap_test.go: `.NewLDAPClient(t)`
$DIR/core/sessions/ldapauth/ldap_test.go: `.Exec("INSERT INTO ldap_user_api_tokens values ($1, 'edit', false, $2, '', '', now())", testEmail, apiToken)`
$DIR/core/sessions/ldapauth/ldap_test.go: `.FindUserByAPIToken(ctx, apiToken)`
$DIR/core/sessions/ldapauth/ldap_test.go: `.Context(t)`
$DIR/core/sessions/ldapauth/ldap_test.go: `.NewLDAPClient(t)`
$DIR/core/sessions/ldapauth/ldap_test.go: `.Now()`
$DIR/core/sessions/ldapauth/ldap_test.go: `.Add(-cfg.UserAPITokenDuration().Duration())`
$DIR/core/sessions/ldapauth/ldap_test.go: `.UserAPITokenDuration()`
$DIR/core/sessions/ldapauth/ldap_test.go: `.Duration()`
$DIR/core/sessions/ldapauth/ldap_test.go: `.Exec("INSERT INTO ldap_user_api_tokens values ($1, 'edit', false, $2, '', '', $3)", testEmail, apiToken, expiredTime)`
$DIR/core/sessions/ldapauth/ldap_test.go: `.FindUserByAPIToken(ctx, apiToken)`
$DIR/core/sessions/ldapauth/ldap_test.go: `.Context(t)`
$DIR/core/sessions/ldapauth/ldap_test.go: `.NewLDAPClient(t)`
$DIR/core/sessions/ldapauth/ldap_test.go: `.NewLDAPConn(t)`
$DIR/core/sessions/ldapauth/ldap_test.go: `.On("CreateEphemeralConnection")`
$DIR/core/sessions/ldapauth/ldap_test.go: `.Return(mockLdapConnProvider, nil)`
$DIR/core/sessions/ldapauth/ldap_test.go: `.On("Close")`
$DIR/core/sessions/ldapauth/ldap_test.go: `.Return(nil)`
$DIR/core/sessions/ldapauth/ldap_test.go: `.MustRandomUser(t)`
$DIR/core/sessions/ldapauth/ldap_test.go: `.MustRandomUser(t)`
$DIR/core/sessions/ldapauth/ldap_test.go: `.MustRandomUser(t)`
$DIR/core/sessions/ldapauth/ldap_test.go: `.MustRandomUser(t)`
$DIR/core/sessions/ldapauth/ldap_test.go: `.MustRandomUser(t)`
$DIR/core/sessions/ldapauth/ldap_test.go: `.MustRandomUser(t)`
$DIR/core/sessions/ldapauth/ldap_test.go: `.On("Search", mock.AnythingOfType("*ldap.SearchRequest"))`
$DIR/core/sessions/ldapauth/ldap_test.go: `.AnythingOfType("*ldap.SearchRequest")`
$DIR/core/sessions/ldapauth/ldap_test.go: `.Return(&ldap.SearchResult{
Entries: []*ldap.Entry{
{
DN: fmt.Sprintf("cn=%s,ou=Groups,dc=example,dc=com", ldapauth.NodeAdminsGroupCN),
Attributes: []*ldap.EntryAttribute{
{
Name: ldapauth.UniqueMemberAttribute,
Values: []string{
fmt.Sprintf("uid=%s,ou=users,dc=example,dc=com", user1.Email),
fmt.Sprintf("uid=%s,ou=users,dc=example,dc=com", user2.Email),
},
},
},
},
},
}, nil)`
$DIR/core/sessions/ldapauth/ldap_test.go: `.Sprintf("cn=%s,ou=Groups,dc=example,dc=com", ldapauth.NodeAdminsGroupCN)`
$DIR/core/sessions/ldapauth/ldap_test.go: `.Sprintf("uid=%s,ou=users,dc=example,dc=com", user1.Email)`
$DIR/core/sessions/ldapauth/ldap_test.go: `.Sprintf("uid=%s,ou=users,dc=example,dc=com", user2.Email)`
$DIR/core/sessions/ldapauth/ldap_test.go: `.Once()`
$DIR/core/sessions/ldapauth/ldap_test.go: `.On("Search", mock.AnythingOfType("*ldap.SearchRequest"))`
$DIR/core/sessions/ldapauth/ldap_test.go: `.AnythingOfType("*ldap.SearchRequest")`
$DIR/core/sessions/ldapauth/ldap_test.go: `.Return(&ldap.SearchResult{
Entries: []*ldap.Entry{
{
DN: fmt.Sprintf("cn=%s,ou=Groups,dc=example,dc=com", ldapauth.NodeEditorsGroupCN),
Attributes: []*ldap.EntryAttribute{
{
Name: ldapauth.UniqueMemberAttribute,
Values: []string{
fmt.Sprintf("uid=%s,ou=users,dc=example,dc=com", user3.Email),
},
},
},
},
},
}, nil)`
$DIR/core/sessions/ldapauth/ldap_test.go: `.Sprintf("cn=%s,ou=Groups,dc=example,dc=com", ldapauth.NodeEditorsGroupCN)`
$DIR/core/sessions/ldapauth/ldap_test.go: `.Sprintf("uid=%s,ou=users,dc=example,dc=com", user3.Email)`
$DIR/core/sessions/ldapauth/ldap_test.go: `.Once()`
$DIR/core/sessions/ldapauth/ldap_test.go: `.On("Search", mock.AnythingOfType("*ldap.SearchRequest"))`
$DIR/core/sessions/ldapauth/ldap_test.go: `.AnythingOfType("*ldap.SearchRequest")`
$DIR/core/sessions/ldapauth/ldap_test.go: `.Return(&ldap.SearchResult{
Entries: []*ldap.Entry{
{
DN: "cn=NodeRunners,ou=Groups,dc=example,dc=com",
Attributes: []*ldap.EntryAttribute{
{
Name: ldapauth.UniqueMemberAttribute,
Values: []string{
fmt.Sprintf("uid=%s,ou=users,dc=example,dc=com", user4.Email),
fmt.Sprintf("uid=%s,ou=users,dc=example,dc=com", user4.Email), // Test deduped
fmt.Sprintf("uid=%s,ou=users,dc=example,dc=com", user5.Email),
},
},
},
},
},
}, nil)`
$DIR/core/sessions/ldapauth/ldap_test.go: `.Sprintf("uid=%s,ou=users,dc=example,dc=com", user4.Email)`
$DIR/core/sessions/ldapauth/ldap_test.go: `.Sprintf("uid=%s,ou=users,dc=example,dc=com", user4.Email)`
$DIR/core/sessions/ldapauth/ldap_test.go: `.Sprintf("uid=%s,ou=users,dc=example,dc=com", user5.Email)`
$DIR/core/sessions/ldapauth/ldap_test.go: `.Once()`
$DIR/core/sessions/ldapauth/ldap_test.go: `.On("Search", mock.AnythingOfType("*ldap.SearchRequest"))`
$DIR/core/sessions/ldapauth/ldap_test.go: `.AnythingOfType("*ldap.SearchRequest")`
$DIR/core/sessions/ldapauth/ldap_test.go: `.Return(&ldap.SearchResult{
Entries: []*ldap.Entry{
{
DN: "cn=NodeReadOnly,ou=Groups,dc=example,dc=com",
Attributes: []*ldap.EntryAttribute{
{
Name: ldapauth.UniqueMemberAttribute,
Values: []string{
fmt.Sprintf("uid=%s,ou=users,dc=example,dc=com", user6.Email),
},
},
},
},
},
}, nil)`
$DIR/core/sessions/ldapauth/ldap_test.go: `.Sprintf("uid=%s,ou=users,dc=example,dc=com", user6.Email)`
$DIR/core/sessions/ldapauth/ldap_test.go: `.Once()`
$DIR/core/sessions/ldapauth/ldap_test.go: `.On("Search", mock.AnythingOfType("*ldap.SearchRequest"))`
$DIR/core/sessions/ldapauth/ldap_test.go: `.AnythingOfType("*ldap.SearchRequest")`
$DIR/core/sessions/ldapauth/ldap_test.go: `.Return(&listUpstreamUsersQuery, nil)`
$DIR/core/sessions/ldapauth/ldap_test.go: `.Once()`
$DIR/core/sessions/ldapauth/ldap_test.go: `.ListUsers(ctx)`
$DIR/core/sessions/ldapauth/ldap_test.go: `.Context(t)`
$DIR/core/sessions/ldapauth/ldap_test.go: `.NewLDAPClient(t)`
$DIR/core/sessions/ldapauth/ldap_test.go: `.NewLDAPConn(t)`
$DIR/core/sessions/ldapauth/ldap_test.go: `.On("CreateEphemeralConnection")`
$DIR/core/sessions/ldapauth/ldap_test.go: `.Return(mockLdapConnProvider, nil)`
$DIR/core/sessions/ldapauth/ldap_test.go: `.On("Close")`
$DIR/core/sessions/ldapauth/ldap_test.go: `.Return(nil)`
$DIR/core/sessions/ldapauth/ldap_test.go: `.MustRandomUser(t)`
$DIR/core/sessions/ldapauth/ldap_test.go: `.On("Search", mock.AnythingOfType("*ldap.SearchRequest"))`
$DIR/core/sessions/ldapauth/ldap_test.go: `.AnythingOfType("*ldap.SearchRequest")`
$DIR/core/sessions/ldapauth/ldap_test.go: `.Return(&expectedResults, nil)`
$DIR/core/sessions/ldapauth/ldap_test.go: `.Once()`
$DIR/core/sessions/ldapauth/ldap_test.go: `.On("Search", mock.AnythingOfType("*ldap.SearchRequest"))`
$DIR/core/sessions/ldapauth/ldap_test.go: `.AnythingOfType("*ldap.SearchRequest")`
$DIR/core/sessions/ldapauth/ldap_test.go: `.Return(&expectedGroupResults, nil)`
$DIR/core/sessions/ldapauth/ldap_test.go: `.Once()`
$DIR/core/sessions/ldapauth/ldap_test.go: `.On("Bind", mock.Anything, cltest.Password)`
$DIR/core/sessions/ldapauth/ldap_test.go: `.Return(nil)`
$DIR/core/sessions/ldapauth/ldap_test.go: `.CreateSession(ctx, sessionRequest)`
$DIR/core/sessions/ldapauth/ldap_test.go: `.Context(t)`
$DIR/core/sessions/ldapauth/ldap_test.go: `.NewLDAPClient(t)`
$DIR/core/sessions/ldapauth/ldap_test.go: `.NewLDAPConn(t)`
$DIR/core/sessions/ldapauth/ldap_test.go: `.On("CreateEphemeralConnection")`
$DIR/core/sessions/ldapauth/ldap_test.go: `.Return(mockLdapConnProvider, nil)`
$DIR/core/sessions/ldapauth/ldap_test.go: `.On("Close")`
$DIR/core/sessions/ldapauth/ldap_test.go: `.Return(nil)`
$DIR/core/sessions/ldapauth/ldap_test.go: `.On("Bind", mock.Anything, cltest.Password)`
$DIR/core/sessions/ldapauth/ldap_test.go: `.Return(errors.New("unable to login via LDAP server"))`
$DIR/core/sessions/ldapauth/ldap_test.go: `.New("unable to login via LDAP server")`
$DIR/core/sessions/ldapauth/ldap_test.go: `.Once()`
$DIR/core/sessions/ldapauth/ldap_test.go: `.CreateSession(ctx, sessionRequest)`
$DIR/core/sessions/ldapauth/ldap_test.go: `.On("Bind", mock.Anything, "incorrect-password")`
$DIR/core/sessions/ldapauth/ldap_test.go: `.Return(errors.New("unable to login via LDAP server"))`
$DIR/core/sessions/ldapauth/ldap_test.go: `.New("unable to login via LDAP server")`
$DIR/core/sessions/ldapauth/ldap_test.go: `.Once()`
$DIR/core/sessions/ldapauth/ldap_test.go: `.CreateSession(ctx, sessionRequest)`
$DIR/core/sessions/ldapauth/ldap_test.go: `.Context(t)`
$DIR/core/sessions/ldapauth/ldap_test.go: `.NewLDAPClient(t)`
$DIR/core/sessions/ldapauth/ldap_test.go: `.NewLDAPConn(t)`
$DIR/core/sessions/ldapauth/ldap_test.go: `.On("CreateEphemeralConnection")`
$DIR/core/sessions/ldapauth/ldap_test.go: `.Return(mockLdapConnProvider, nil)`
$DIR/core/sessions/ldapauth/ldap_test.go: `.On("Close")`
$DIR/core/sessions/ldapauth/ldap_test.go: `.Return(nil)`
$DIR/core/sessions/ldapauth/ldap_test.go: `.On("Bind", mock.Anything, cltest.Password)`
$DIR/core/sessions/ldapauth/ldap_test.go: `.Return(errors.New("unable to login via LDAP server"))`
$DIR/core/sessions/ldapauth/ldap_test.go: `.New("unable to login via LDAP server")`
$DIR/core/sessions/ldapauth/ldap_test.go: `.Once()`
$DIR/core/sessions/ldapauth/ldap_test.go: `.CreateSession(ctx, sessionRequest)`
$DIR/core/sessions/ldapauth/ldap_test.go: `.On("Bind", mock.Anything, "incorrect-password")`
$DIR/core/sessions/ldapauth/ldap_test.go: `.Return(errors.New("unable to login via LDAP server"))`
$DIR/core/sessions/ldapauth/ldap_test.go: `.New("unable to login via LDAP server")`
$DIR/core/sessions/ldapauth/ldap_test.go: `.Once()`
$DIR/core/sessions/ldapauth/ldap_test.go: `.CreateSession(ctx, sessionRequest)`
$DIR/core/sessions/ldapauth/ldap_test.go: `.Sprintf("cn=%s,ou=Groups,dc=example,dc=com", ldapauth.NodeAdminsGroupCN)`
$DIR/core/sessions/ldapauth/ldap_test.go: `.Sprintf("cn=%s,ou=Groups,dc=example,dc=com", ldapauth.NodeEditorsGroupCN)`
$DIR/core/sessions/ldapauth/ldap_test.go: `.Sprintf("cn=%s,ou=Groups,dc=example,dc=com", ldapauth.NodeRunnersGroupCN)`
$DIR/core/sessions/ldapauth/ldap_test.go: `.Sprintf("cn=%s,ou=Groups,dc=example,dc=com", ldapauth.NodeReadOnlyGroupCN)`
$DIR/core/sessions/ldapauth/ldap_test.go: `.UserRole("")`
$DIR/core/sessions/ldapauth/ldap_test.go: `.Sprintf("cn=%s,ou=Groups,dc=example,dc=com", ldapauth.NodeRunnersGroupCN)`
$DIR/core/sessions/ldapauth/ldap_test.go: `.Sprintf("cn=%s,ou=Groups,dc=example,dc=com", ldapauth.NodeReadOnlyGroupCN)`
$DIR/core/sessions/ldapauth/ldap_test.go: `.Run(test.name, func(t *testing.T) {
role, err := ldapauth.GroupSearchResultsToUserRole(
test.groupsQuerySearchResult,
cfg.AdminUserGroupCN(),
cfg.EditUserGroupCN(),
cfg.RunUserGroupCN(),
cfg.ReadUserGroupCN(),
)
if test.wantErr != nil {
assert.Equal(t, test.wantErr, err)
} else {
assert.Equal(t, test.wantMappedRole, role)
}
})`
$DIR/core/sessions/ldapauth/ldap_test.go: `.GroupSearchResultsToUserRole(
test.groupsQuerySearchResult,
cfg.AdminUserGroupCN(),
cfg.EditUserGroupCN(),
cfg.RunUserGroupCN(),
cfg.ReadUserGroupCN(),
)`
$DIR/core/sessions/ldapauth/ldap_test.go: `.AdminUserGroupCN()`
$DIR/core/sessions/ldapauth/ldap_test.go: `.EditUserGroupCN()`
$DIR/core/sessions/ldapauth/ldap_test.go: `.RunUserGroupCN()`
$DIR/core/sessions/ldapauth/ldap_test.go: `.ReadUserGroupCN()`
$DIR/core/sessions/localauth/orm_test.go: `t.Run(test.name, func(t *testing.T) {
ctx := testutils.Context(t)
db := pgtest.NewSqlxDB(t)
orm := localauth.NewORM(db, test.sessionDuration, logger.TestLogger(t), &audit.AuditLoggerService{})
user := cltest.MustRandomUser(t)
require.NoError(t, orm.CreateUser(ctx, &user))
prevSession := cltest.NewSession("correctID")
prevSession.LastUsed = time.Now().Add(-cltest.MustParseDuration(t, "2m"))
_, err := db.Exec("INSERT INTO sessions (id, email, last_used, created_at) VALUES ($1, $2, $3, now())", prevSession.ID, user.Email, prevSession.LastUsed)
require.NoError(t, err)
expectedTime := utils.ISO8601UTC(time.Now())
actual, err := orm.AuthorizedUserWithSession(ctx, test.sessionID)
if test.wantError != "" {
require.EqualError(t, err, test.wantError)
} else {
require.NoError(t, err)
assert.Equal(t, user.Email, actual.Email)
var bumpedSession sessions.Session
err = db.Get(&bumpedSession, "SELECT * FROM sessions WHERE ID = $1", prevSession.ID)
require.NoError(t, err)
assert.Equal(t, expectedTime[0:13], utils.ISO8601UTC(bumpedSession.LastUsed)[0:13]) // only compare up to the hour
}
})`
$DIR/core/sessions/localauth/orm_test.go: `prevSession.LastUsed = time.Now().Add(-cltest.MustParseDuration(t, "2m"))`
$DIR/core/sessions/localauth/orm_test.go: `err = db.Get(&bumpedSession, "SELECT * FROM sessions WHERE ID = $1", prevSession.ID)`
$DIR/core/sessions/localauth/orm_test.go: `_, err = orm.FindUser(ctx, u.Email)`
$DIR/core/sessions/localauth/orm_test.go: `err = orm.DeleteUserSession(ctx, session.ID)`
$DIR/core/sessions/localauth/orm_test.go: `_, err = orm.FindUser(ctx, u.Email)`
$DIR/core/sessions/localauth/orm_test.go: `err = orm.DeleteUser(ctx, u.Email)`
$DIR/core/sessions/localauth/orm_test.go: `_, err = orm.FindUser(ctx, u.Email)`
$DIR/core/sessions/localauth/orm_test.go: `t.Run(test.name, func(t *testing.T) {
sessionRequest := sessions.SessionRequest{
Email: test.email,
Password: test.password,
}
sessionID, err := orm.CreateSession(testutils.Context(t), sessionRequest)
if test.wantSession {
require.NoError(t, err)
assert.NotEmpty(t, sessionID)
} else {
require.Error(t, err)
assert.Empty(t, sessionID)
}
})`
$DIR/core/sessions/localauth/orm_test.go: `was, err = orm.GetUserWebAuthn(ctx, initial.Email)`
$DIR/core/sessions/localauth/orm_test.go: `_, err = orm.CreateSession(ctx, sessions.SessionRequest{
Email: initial.Email,
Password: cltest.Password,
})`
$DIR/core/sessions/localauth/orm_test.go: `_, err = orm.CreateSession(ctx, sessions.SessionRequest{
Email: initial.Email,
Password: cltest.Password,
WebAuthnConfig: sessions.WebAuthnConfiguration{
RPID: "test-rpid",
RPOrigin: "test-rporigin",
},
SessionStore: ss,
})`
$DIR/core/sessions/localauth/orm_test.go: `_, err = orm.CreateSession(ctx, sessions.SessionRequest{
Email: initial.Email,
Password: cltest.Password,
WebAuthnConfig: sessions.WebAuthnConfiguration{
RPID: "test-rpid",
RPOrigin: "test-rporigin",
},
SessionStore: ss,
WebAuthnData: "invalid-format",
})`
$DIR/core/sessions/localauth/orm_test.go: `_, err = orm.CreateSession(ctx, sessions.SessionRequest{
Email: initial.Email,
Password: cltest.Password,
WebAuthnConfig: sessions.WebAuthnConfiguration{
RPID: "test-rpid",
RPOrigin: "test-rporigin",
},
WebAuthnData: string(challengeResp),
SessionStore: ss,
})`
$DIR/core/sessions/localauth/orm_test.go: `dbUser, err = orm.FindUser(ctx, initial.Email)`
$DIR/core/sessions/localauth/orm_test.go: `.Context(t)`
$DIR/core/sessions/localauth/orm_test.go: `.MustRandomUser(t)`
$DIR/core/sessions/localauth/orm_test.go: `.MustRandomUser(t)`
$DIR/core/sessions/localauth/orm_test.go: `.Exec("UPDATE users SET created_at = now() - interval '1 day' WHERE email = $1", user2.Email)`
$DIR/core/sessions/localauth/orm_test.go: `.FindUser(ctx, user1.Email)`
$DIR/core/sessions/localauth/orm_test.go: `.MustParseDuration(t, "3m")`
$DIR/core/sessions/localauth/orm_test.go: `.MustParseDuration(t, "0m")`
$DIR/core/sessions/localauth/orm_test.go: `.MustParseDuration(t, "3m")`
$DIR/core/sessions/localauth/orm_test.go: `.MustParseDuration(t, "3m")`
$DIR/core/sessions/localauth/orm_test.go: `.Run(test.name, func(t *testing.T) {
ctx := testutils.Context(t)
db := pgtest.NewSqlxDB(t)
orm := localauth.NewORM(db, test.sessionDuration, logger.TestLogger(t), &audit.AuditLoggerService{})
user := cltest.MustRandomUser(t)
require.NoError(t, orm.CreateUser(ctx, &user))
prevSession := cltest.NewSession("correctID")
prevSession.LastUsed = time.Now().Add(-cltest.MustParseDuration(t, "2m"))
_, err := db.Exec("INSERT INTO sessions (id, email, last_used, created_at) VALUES ($1, $2, $3, now())", prevSession.ID, user.Email, prevSession.LastUsed)
require.NoError(t, err)
expectedTime := utils.ISO8601UTC(time.Now())
actual, err := orm.AuthorizedUserWithSession(ctx, test.sessionID)
if test.wantError != "" {
require.EqualError(t, err, test.wantError)
} else {
require.NoError(t, err)
assert.Equal(t, user.Email, actual.Email)
var bumpedSession sessions.Session
err = db.Get(&bumpedSession, "SELECT * FROM sessions WHERE ID = $1", prevSession.ID)
require.NoError(t, err)
assert.Equal(t, expectedTime[0:13], utils.ISO8601UTC(bumpedSession.LastUsed)[0:13]) // only compare up to the hour
}
})`
$DIR/core/sessions/localauth/orm_test.go: `.Context(t)`
$DIR/core/sessions/localauth/orm_test.go: `.NewSqlxDB(t)`
$DIR/core/sessions/localauth/orm_test.go: `.NewORM(db, test.sessionDuration, logger.TestLogger(t), &audit.AuditLoggerService{})`
$DIR/core/sessions/localauth/orm_test.go: `.TestLogger(t)`
$DIR/core/sessions/localauth/orm_test.go: `.MustRandomUser(t)`
$DIR/core/sessions/localauth/orm_test.go: `.NewSession("correctID")`
$DIR/core/sessions/localauth/orm_test.go: `.Now()`
$DIR/core/sessions/localauth/orm_test.go: `.Add(-cltest.MustParseDuration(t, "2m"))`
$DIR/core/sessions/localauth/orm_test.go: `.MustParseDuration(t, "2m")`
$DIR/core/sessions/localauth/orm_test.go: `.Exec("INSERT INTO sessions (id, email, last_used, created_at) VALUES ($1, $2, $3, now())", prevSession.ID, user.Email, prevSession.LastUsed)`
$DIR/core/sessions/localauth/orm_test.go: `.ISO8601UTC(time.Now())`
$DIR/core/sessions/localauth/orm_test.go: `.Now()`
$DIR/core/sessions/localauth/orm_test.go: `.AuthorizedUserWithSession(ctx, test.sessionID)`
$DIR/core/sessions/localauth/orm_test.go: `.Get(&bumpedSession, "SELECT * FROM sessions WHERE ID = $1", prevSession.ID)`
$DIR/core/sessions/localauth/orm_test.go: `.Context(t)`
$DIR/core/sessions/localauth/orm_test.go: `.MustRandomUser(t)`
$DIR/core/sessions/localauth/orm_test.go: `.DeleteUser(ctx, u.Email)`
$DIR/core/sessions/localauth/orm_test.go: `.FindUser(ctx, u.Email)`
$DIR/core/sessions/localauth/orm_test.go: `.Context(t)`
$DIR/core/sessions/localauth/orm_test.go: `.MustRandomUser(t)`
$DIR/core/sessions/localauth/orm_test.go: `.NewSession()`
$DIR/core/sessions/localauth/orm_test.go: `.Exec("INSERT INTO sessions (id, email, last_used, created_at) VALUES ($1, $2, now(), now())", session.ID, u.Email)`
$DIR/core/sessions/localauth/orm_test.go: `.DeleteUserSession(ctx, session.ID)`
$DIR/core/sessions/localauth/orm_test.go: `.FindUser(ctx, u.Email)`
$DIR/core/sessions/localauth/orm_test.go: `.Sessions(ctx, 0, 10)`
$DIR/core/sessions/localauth/orm_test.go: `.Context(t)`
$DIR/core/sessions/localauth/orm_test.go: `.MustRandomUser(t)`
$DIR/core/sessions/localauth/orm_test.go: `.NewSession()`
$DIR/core/sessions/localauth/orm_test.go: `.Exec("INSERT INTO sessions (id, email, last_used, created_at) VALUES ($1, $2, now(), now())", session.ID, u.Email)`
$DIR/core/sessions/localauth/orm_test.go: `.DeleteUser(ctx, u.Email)`
$DIR/core/sessions/localauth/orm_test.go: `.FindUser(ctx, u.Email)`
$DIR/core/sessions/localauth/orm_test.go: `.Sessions(ctx, 0, 10)`
$DIR/core/sessions/localauth/orm_test.go: `.MustRandomUser(t)`
$DIR/core/sessions/localauth/orm_test.go: `.Run(test.name, func(t *testing.T) {
sessionRequest := sessions.SessionRequest{
Email: test.email,
Password: test.password,
}
sessionID, err := orm.CreateSession(testutils.Context(t), sessionRequest)
if test.wantSession {
require.NoError(t, err)
assert.NotEmpty(t, sessionID)
} else {
require.Error(t, err)
assert.Empty(t, sessionID)
}
})`
$DIR/core/sessions/localauth/orm_test.go: `.CreateSession(testutils.Context(t), sessionRequest)`
$DIR/core/sessions/localauth/orm_test.go: `.Context(t)`
$DIR/core/sessions/localauth/orm_test.go: `.Context(t)`
$DIR/core/sessions/localauth/orm_test.go: `.MustRandomUser(t)`
$DIR/core/sessions/localauth/orm_test.go: `.GetUserWebAuthn(ctx, initial.Email)`
$DIR/core/sessions/localauth/orm_test.go: `.GetUserWebAuthn(ctx, initial.Email)`
$DIR/core/sessions/localauth/orm_test.go: `.CreateSession(ctx, sessions.SessionRequest{
Email: initial.Email,
Password: cltest.Password,
})`
$DIR/core/sessions/localauth/orm_test.go: `.NewWebAuthnSessionStore()`
$DIR/core/sessions/localauth/orm_test.go: `.CreateSession(ctx, sessions.SessionRequest{
Email: initial.Email,
Password: cltest.Password,
WebAuthnConfig: sessions.WebAuthnConfiguration{
RPID: "test-rpid",
RPOrigin: "test-rporigin",
},
SessionStore: ss,
})`
$DIR/core/sessions/localauth/orm_test.go: `.CreateSession(ctx, sessions.SessionRequest{
Email: initial.Email,
Password: cltest.Password,
WebAuthnConfig: sessions.WebAuthnConfiguration{
RPID: "test-rpid",
RPOrigin: "test-rporigin",
},
SessionStore: ss,
WebAuthnData: "invalid-format",
})`
$DIR/core/sessions/localauth/orm_test.go: `.Marshal(protocol.CredentialAssertionResponse{
PublicKeyCredential: protocol.PublicKeyCredential{
Credential: protocol.Credential{
ID: "test-id",
Type: "test-type",
},
},
})`
$DIR/core/sessions/localauth/orm_test.go: `.CreateSession(ctx, sessions.SessionRequest{
Email: initial.Email,
Password: cltest.Password,
WebAuthnConfig: sessions.WebAuthnConfiguration{
RPID: "test-rpid",
RPOrigin: "test-rporigin",
},
WebAuthnData: string(challengeResp),
SessionStore: ss,
})`
$DIR/core/sessions/localauth/orm_test.go: `.Context(t)`
$DIR/core/sessions/localauth/orm_test.go: `.MustRandomUser(t)`
$DIR/core/sessions/localauth/orm_test.go: `.CreateAndSetAuthToken(ctx, &initial)`
$DIR/core/sessions/localauth/orm_test.go: `.FindUser(ctx, initial.Email)`
$DIR/core/sessions/localauth/orm_test.go: `.HashedSecret(token, dbUser.TokenSalt.String)`
$DIR/core/sessions/localauth/orm_test.go: `.FindUser(ctx, initial.Email)`
$DIR/core/sessions/localauth/orm_test.go: `.TokenHashedSecret.ValueOrZero()`
$DIR/core/sessions/localauth/reaper_test.go: `t.Cleanup(func() {
assert.NoError(t, r.Stop())
})`
$DIR/core/sessions/localauth/reaper_test.go: `t.Run(test.name, func(t *testing.T) {
ctx := testutils.Context(t)
t.Cleanup(func() {
_, err2 := db.Exec("DELETE FROM sessions where email = $1", cltest.APIEmailAdmin)
require.NoError(t, err2)
})
_, err := db.Exec("INSERT INTO sessions (last_used, email, id, created_at) VALUES ($1, $2, $3, now())", test.lastUsed, cltest.APIEmailAdmin, test.name)
require.NoError(t, err)
r.WakeUp()
if test.wantReap {
gomega.NewWithT(t).Eventually(func() []sessions.Session {
sessions, err := orm.Sessions(ctx, 0, 10)
assert.NoError(t, err)
return sessions
}).Should(gomega.HaveLen(0))
} else {
gomega.NewWithT(t).Consistently(func() []sessions.Session {
sessions, err := orm.Sessions(ctx, 0, 10)
assert.NoError(t, err)
return sessions
}).Should(gomega.HaveLen(1))
}
})`
$DIR/core/sessions/localauth/reaper_test.go: `t.Cleanup(func() {
_, err2 := db.Exec("DELETE FROM sessions where email = $1", cltest.APIEmailAdmin)
require.NoError(t, err2)
})`
$DIR/core/sessions/localauth/reaper_test.go: `r.WakeUp()`
$DIR/core/sessions/localauth/reaper_test.go: `gomega.NewWithT(t).Eventually(func() []sessions.Session {
sessions, err := orm.Sessions(ctx, 0, 10)
assert.NoError(t, err)
return sessions
}).Should(gomega.HaveLen(0))`
$DIR/core/sessions/localauth/reaper_test.go: `gomega.NewWithT(t).Consistently(func() []sessions.Session {
sessions, err := orm.Sessions(ctx, 0, 10)
assert.NoError(t, err)
return sessions
}).Should(gomega.HaveLen(1))`
$DIR/core/sessions/localauth/reaper_test.go: `.NewSqlxDB(t)`
$DIR/core/sessions/localauth/reaper_test.go: `.TestLogger(t)`
$DIR/core/sessions/localauth/reaper_test.go: `.NewORM(db, config.SessionTimeout().Duration(), lggr, audit.NoopLogger)`
$DIR/core/sessions/localauth/reaper_test.go: `.SessionTimeout()`
$DIR/core/sessions/localauth/reaper_test.go: `.Duration()`
$DIR/core/sessions/localauth/reaper_test.go: `.NewSessionReaper(db, config, lggr)`
$DIR/core/sessions/localauth/reaper_test.go: `.Cleanup(func() {
assert.NoError(t, r.Stop())
})`
$DIR/core/sessions/localauth/reaper_test.go: `.Now()`
$DIR/core/sessions/localauth/reaper_test.go: `.Now()`
$DIR/core/sessions/localauth/reaper_test.go: `.Add(-config.SessionTimeout().Duration())`
$DIR/core/sessions/localauth/reaper_test.go: `.SessionTimeout()`
$DIR/core/sessions/localauth/reaper_test.go: `.Duration()`
$DIR/core/sessions/localauth/reaper_test.go: `.Now()`
$DIR/core/sessions/localauth/reaper_test.go: `.Add(-config.SessionReaperExpiration().Duration())`
$DIR/core/sessions/localauth/reaper_test.go: `.SessionReaperExpiration()`
$DIR/core/sessions/localauth/reaper_test.go: `.Duration()`
$DIR/core/sessions/localauth/reaper_test.go: `.Now()`
$DIR/core/sessions/localauth/reaper_test.go: `.Add(-config.SessionReaperExpiration().Duration())`
$DIR/core/sessions/localauth/reaper_test.go: `.SessionReaperExpiration()`
$DIR/core/sessions/localauth/reaper_test.go: `.Duration()`
$DIR/core/sessions/localauth/reaper_test.go: `.
Add(-config.SessionTimeout().Duration())`
$DIR/core/sessions/localauth/reaper_test.go: `.SessionTimeout()`
$DIR/core/sessions/localauth/reaper_test.go: `.Duration()`
$DIR/core/sessions/localauth/reaper_test.go: `.Run(test.name, func(t *testing.T) {
ctx := testutils.Context(t)
t.Cleanup(func() {
_, err2 := db.Exec("DELETE FROM sessions where email = $1", cltest.APIEmailAdmin)
require.NoError(t, err2)
})
_, err := db.Exec("INSERT INTO sessions (last_used, email, id, created_at) VALUES ($1, $2, $3, now())", test.lastUsed, cltest.APIEmailAdmin, test.name)
require.NoError(t, err)
r.WakeUp()
if test.wantReap {
gomega.NewWithT(t).Eventually(func() []sessions.Session {
sessions, err := orm.Sessions(ctx, 0, 10)
assert.NoError(t, err)
return sessions
}).Should(gomega.HaveLen(0))
} else {
gomega.NewWithT(t).Consistently(func() []sessions.Session {
sessions, err := orm.Sessions(ctx, 0, 10)
assert.NoError(t, err)
return sessions
}).Should(gomega.HaveLen(1))
}
})`
$DIR/core/sessions/localauth/reaper_test.go: `.Context(t)`
$DIR/core/sessions/localauth/reaper_test.go: `.Cleanup(func() {
_, err2 := db.Exec("DELETE FROM sessions where email = $1", cltest.APIEmailAdmin)
require.NoError(t, err2)
})`
$DIR/core/sessions/localauth/reaper_test.go: `.Exec("DELETE FROM sessions where email = $1", cltest.APIEmailAdmin)`
$DIR/core/sessions/localauth/reaper_test.go: `.Exec("INSERT INTO sessions (last_used, email, id, created_at) VALUES ($1, $2, $3, now())", test.lastUsed, cltest.APIEmailAdmin, test.name)`
$DIR/core/sessions/localauth/reaper_test.go: `.WakeUp()`
$DIR/core/sessions/localauth/reaper_test.go: `.NewWithT(t)`
$DIR/core/sessions/localauth/reaper_test.go: `.Eventually(func() []sessions.Session {
sessions, err := orm.Sessions(ctx, 0, 10)
assert.NoError(t, err)
return sessions
})`
$DIR/core/sessions/localauth/reaper_test.go: `.Sessions(ctx, 0, 10)`
$DIR/core/sessions/localauth/reaper_test.go: `.Should(gomega.HaveLen(0))`
$DIR/core/sessions/localauth/reaper_test.go: `.HaveLen(0)`
$DIR/core/sessions/localauth/reaper_test.go: `.NewWithT(t)`
$DIR/core/sessions/localauth/reaper_test.go: `.Consistently(func() []sessions.Session {
sessions, err := orm.Sessions(ctx, 0, 10)
assert.NoError(t, err)
return sessions
})`
$DIR/core/sessions/localauth/reaper_test.go: `.Sessions(ctx, 0, 10)`
$DIR/core/sessions/localauth/reaper_test.go: `.Should(gomega.HaveLen(1))`
$DIR/core/sessions/localauth/reaper_test.go: `.HaveLen(1)`
$DIR/core/sessions/user_test.go: `t.Run(test.email, func(t *testing.T) {
user, err := sessions.NewUser(test.email, test.pwd, test.role)
if test.wantError {
assert.Error(t, err)
} else {
assert.NoError(t, err)
assert.Equal(t, test.email, user.Email)
assert.Equal(t, test.role, user.Role)
assert.NotEmpty(t, user.HashedPassword)
newHash, _ := utils.HashPassword(test.pwd)
assert.NotEqual(t, newHash, user.HashedPassword, "Salt should prevent equality")
}
})`
$DIR/core/sessions/user_test.go: `_, err = user.GenerateAuthToken()`
$DIR/core/sessions/user_test.go: `ok, err = sessions.AuthenticateUserByToken(token, &user)`
$DIR/core/sessions/user_test.go: `.Run(test.email, func(t *testing.T) {
user, err := sessions.NewUser(test.email, test.pwd, test.role)
if test.wantError {
assert.Error(t, err)
} else {
assert.NoError(t, err)
assert.Equal(t, test.email, user.Email)
assert.Equal(t, test.role, user.Role)
assert.NotEmpty(t, user.HashedPassword)
newHash, _ := utils.HashPassword(test.pwd)
assert.NotEqual(t, newHash, user.HashedPassword, "Salt should prevent equality")
}
})`
$DIR/core/sessions/user_test.go: `.NewUser(test.email, test.pwd, test.role)`
$DIR/core/sessions/user_test.go: `.HashPassword(test.pwd)`
$DIR/core/sessions/user_test.go: `.GenerateAuthToken()`
$DIR/core/sessions/user_test.go: `.StringFrom(token.Secret)`
$DIR/core/sessions/user_test.go: `.GenerateAuthToken()`
$DIR/core/sessions/user_test.go: `.AuthenticateUserByToken(token, &user)`
$DIR/core/sessions/user_test.go: `.GenerateAuthToken()`
$DIR/core/sessions/user_test.go: `.AuthenticateUserByToken(token, &user)`
$DIR/core/sessions/webauthn_test.go: `val, ok = s.take(key)`
$DIR/core/sessions/webauthn_test.go: `_, err = s.GetWebauthnSession(key)`
$DIR/core/sessions/webauthn_test.go: `_, err = s.FinishWebAuthnRegistration(user, uwas, nil, wcfg)`
$DIR/core/sessions/webauthn_test.go: `.UserVerificationRequirement("test-user-verification")`
$DIR/core/sessions/webauthn_test.go: `.take(key)`
$DIR/core/sessions/webauthn_test.go: `.GetWebauthnSession(key)`
$DIR/core/sessions/webauthn_test.go: `.take(key)`
$DIR/core/sessions/webauthn_test.go: `.GetWebauthnSession(key)`
$DIR/core/sessions/webauthn_test.go: `.Marshal(cred)`
$DIR/core/sessions/webauthn_test.go: `.JSONText(credj)`
$DIR/core/sessions/webauthn_test.go: `.BeginWebAuthnRegistration(user, uwas, wcfg)`
$DIR/core/sessions/webauthn_test.go: `.FinishWebAuthnRegistration(user, uwas, nil, wcfg)`
$DIR/core/shutdown/shutdown_test.go: `t.Run(name, func(t *testing.T) {
ctx, cancel := context.WithCancel(testutils.Context(t))
go HandleShutdown(func(string) {
cancel()
})
// have to wait for ossignal.Notify
time.Sleep(time.Second)
err = proc.Signal(sig)
require.NoError(t, err)
select {
case <-ctx.Done():
// all good
case <-time.After(3 * time.Second):
require.Fail(t, "context is not cancelled within 3 seconds")
}
})`
$DIR/core/shutdown/shutdown_test.go: `cancel()`
$DIR/core/shutdown/shutdown_test.go: `time.Sleep(time.Second)`
$DIR/core/shutdown/shutdown_test.go: `err = proc.Signal(sig)`
$DIR/core/shutdown/shutdown_test.go: `.FindProcess(os.Getpid())`
$DIR/core/shutdown/shutdown_test.go: `.Getpid()`
$DIR/core/shutdown/shutdown_test.go: `.Run(name, func(t *testing.T) {
ctx, cancel := context.WithCancel(testutils.Context(t))
go HandleShutdown(func(string) {
cancel()
})
// have to wait for ossignal.Notify
time.Sleep(time.Second)
err = proc.Signal(sig)
require.NoError(t, err)
select {
case <-ctx.Done():
// all good
case <-time.After(3 * time.Second):
require.Fail(t, "context is not cancelled within 3 seconds")
}
})`
$DIR/core/shutdown/shutdown_test.go: `.WithCancel(testutils.Context(t))`
$DIR/core/shutdown/shutdown_test.go: `.Context(t)`
$DIR/core/shutdown/shutdown_test.go: `.Sleep(time.Second)`
$DIR/core/shutdown/shutdown_test.go: `.Signal(sig)`
$DIR/core/shutdown/shutdown_test.go: `.Done()`
$DIR/core/shutdown/shutdown_test.go: `.After(3 * time.Second)`
$DIR/core/static/static_test.go: `t.Run(tt.ver+":"+tt.sha, func(t *testing.T) {
sha, ver := short(tt.sha, tt.ver)
assert.Equal(t, tt.expSha, sha)
assert.Equal(t, tt.expVer, ver)
})`
$DIR/core/static/static_test.go: `.Run(tt.ver+":"+tt.sha, func(t *testing.T) {
sha, ver := short(tt.sha, tt.ver)
assert.Equal(t, tt.expSha, sha)
assert.Equal(t, tt.expVer, ver)
})`
$DIR/core/store/migrate/migrate_test.go: `_, err = db.NamedExec(sql, jb.Offchainreporting2OracleSpec)`
$DIR/core/store/migrate/migrate_test.go: `_, err = db.NamedExec(sql, nonBootstrapJob.Offchainreporting2OracleSpec)`
$DIR/core/store/migrate/migrate_test.go: `_, err = db.NamedExec(sql, jb2.Offchainreporting2OracleSpec)`
$DIR/core/store/migrate/migrate_test.go: `sql = `INSERT INTO bootstrap_specs (contract_id, relay, relay_config, monitoring_endpoint,
blockchain_timeout, contract_config_tracker_poll_interval,
contract_config_confirmations, created_at, updated_at)
VALUES ( :contract_id, :relay, :relay_config, :monitoring_endpoint,
:blockchain_timeout, :contract_config_tracker_poll_interval,
:contract_config_confirmations, NOW(), NOW())
RETURNING id;``
$DIR/core/store/migrate/migrate_test.go: `_, err = db.NamedExec(sql, newFormatBootstrapJob.BootstrapSpec)`
$DIR/core/store/migrate/migrate_test.go: `sql = `INSERT INTO jobs (id, pipeline_spec_id, external_job_id, schema_version, type, offchainreporting2_oracle_spec_id, bootstrap_spec_id, created_at)
VALUES (:id, :pipeline_spec_id, :external_job_id, :schema_version, :type, :offchainreporting2_oracle_spec_id, :bootstrap_spec_id, NOW())
RETURNING *;``
$DIR/core/store/migrate/migrate_test.go: `_, err = db.NamedExec(sql, jb)`
$DIR/core/store/migrate/migrate_test.go: `_, err = db.NamedExec(sql, nonBootstrapJob)`
$DIR/core/store/migrate/migrate_test.go: `_, err = db.NamedExec(sql, jb2)`
$DIR/core/store/migrate/migrate_test.go: `_, err = db.NamedExec(sql, newFormatBootstrapJob)`
$DIR/core/store/migrate/migrate_test.go: `err = goose.UpByOne(db.DB, migrationDir)`
$DIR/core/store/migrate/migrate_test.go: `sql = `SELECT * FROM bootstrap_specs;``
$DIR/core/store/migrate/migrate_test.go: `err = db.Select(&bootstrapSpecs, sql)`
$DIR/core/store/migrate/migrate_test.go: `sql = `SELECT * FROM jobs ORDER BY created_at DESC, id DESC;``
$DIR/core/store/migrate/migrate_test.go: `err = db.Select(&jobs, sql)`
$DIR/core/store/migrate/migrate_test.go: `err = db.Get(&resultingBootstrapSpec, `SELECT * FROM bootstrap_specs WHERE id = $1`, *migratedJob.BootstrapSpecID)`
$DIR/core/store/migrate/migrate_test.go: `migratedJob.BootstrapSpec = &resultingBootstrapSpec`
$DIR/core/store/migrate/migrate_test.go: `sql = `SELECT COUNT(*) FROM offchainreporting2_oracle_specs;``
$DIR/core/store/migrate/migrate_test.go: `err = db.Get(&count, sql)`
$DIR/core/store/migrate/migrate_test.go: `err = goose.Down(db.DB, migrationDir)`
$DIR/core/store/migrate/migrate_test.go: `sql = `SELECT * FROM jobs;``
$DIR/core/store/migrate/migrate_test.go: `err = db.Select(&oldJobs, sql)`
$DIR/core/store/migrate/migrate_test.go: `sql = `SELECT contract_id, relay, relay_config, p2p_bootstrap_peers, ocr_key_bundle_id, transmitter_id,
blockchain_timeout, contract_config_tracker_poll_interval, contract_config_confirmations, juels_per_fee_coin_pipeline, is_bootstrap_peer,
monitoring_endpoint, created_at, updated_at
FROM offchainreporting2_oracle_specs;``
$DIR/core/store/migrate/migrate_test.go: `err = db.Select(&oldOCR2Spec, sql)`
$DIR/core/store/migrate/migrate_test.go: `sql = `SELECT COUNT(*) FROM bootstrap_specs;``
$DIR/core/store/migrate/migrate_test.go: `err = db.Get(&count, sql)`
$DIR/core/store/migrate/migrate_test.go: `sql = `SELECT jobs.id, ocr2.contract_id
FROM jobs
INNER JOIN offchainreporting2_oracle_specs as ocr2
ON jobs.offchainreporting2_oracle_spec_id = ocr2.id``
$DIR/core/store/migrate/migrate_test.go: `err = db.Select(&jobsAndContracts, sql)`
$DIR/core/store/migrate/migrate_test.go: `_, err = db.NamedExec(sql, spec)`
$DIR/core/store/migrate/migrate_test.go: `err = goose.UpByOne(db.DB, migrationDir)`
$DIR/core/store/migrate/migrate_test.go: `sql = `SELECT plugin_type, plugin_config FROM ocr2_oracle_specs``
$DIR/core/store/migrate/migrate_test.go: `err = db.Get(&pluginValues, sql)`
$DIR/core/store/migrate/migrate_test.go: `err = goose.Down(db.DB, migrationDir)`
$DIR/core/store/migrate/migrate_test.go: `sql = `SELECT plugin_type, plugin_config FROM offchainreporting2_oracle_specs``
$DIR/core/store/migrate/migrate_test.go: `err = db.Get(&pluginValues, sql)`
$DIR/core/store/migrate/migrate_test.go: `sql = `SELECT juels_per_fee_coin_pipeline FROM offchainreporting2_oracle_specs``
$DIR/core/store/migrate/migrate_test.go: `err = db.Get(&juels, sql)`
$DIR/core/store/migrate/migrate_test.go: `err = migrate.Status(ctx, db.DB)`
$DIR/core/store/migrate/migrate_test.go: `err = migrate.Migrate(ctx, db.DB)`
$DIR/core/store/migrate/migrate_test.go: `err = migrate.Rollback(ctx, db.DB, null.IntFrom(99))`
$DIR/core/store/migrate/migrate_test.go: `ver, err = migrate.Current(ctx, db.DB)`
$DIR/core/store/migrate/migrate_test.go: `t.Run("ValidEVMConfig", func(t *testing.T) {
chainID := ubig.New(big.NewInt(1337))
testConfig := configtest.NewGeneralConfig(t, func(c *chainlink.Config, s *chainlink.Secrets) {
evmEnabled := true
c.EVM = evmcfg.EVMConfigs{&evmcfg.EVMConfig{
ChainID: chainID,
Enabled: &evmEnabled,
}}
})
require.NoError(t, migrate.SetMigrationENVVars(testConfig))
actualChainID := os.Getenv(env.EVMChainIDNotNullMigration0195)
require.Equal(t, actualChainID, chainID.String())
})`
$DIR/core/store/migrate/migrate_test.go: `c.EVM = evmcfg.EVMConfigs{&evmcfg.EVMConfig{
ChainID: chainID,
Enabled: &evmEnabled,
}}`
$DIR/core/store/migrate/migrate_test.go: `c.EVM = nil`
$DIR/core/store/migrate/migrate_test.go: `err = goose.UpTo(db.DB, migrationDir, 202)`
$DIR/core/store/migrate/migrate_test.go: `t.Run(tt.name, func(t *testing.T) {
block, err := tt.orm.SelectBlockByNumber(ctx, tt.blockNumber)
require.NoError(t, err)
require.Equal(t, tt.expectedFinalizedBlock, block.FinalizedBlockNumber)
})`
$DIR/core/store/migrate/migrate_test.go: `assert_num_triggers(0)`
$DIR/core/store/migrate/migrate_test.go: `.FullTestDBEmptyV2(t, nil)`
$DIR/core/store/migrate/migrate_test.go: `.TestLogger(t)`
$DIR/core/store/migrate/migrate_test.go: `.UpTo(db.DB, migrationDir, 99)`
$DIR/core/store/migrate/migrate_test.go: `.NewORM(db, lggr, cfg.JobPipeline().MaxSuccessfulRuns())`
$DIR/core/store/migrate/migrate_test.go: `.JobPipeline()`
$DIR/core/store/migrate/migrate_test.go: `.MaxSuccessfulRuns()`
$DIR/core/store/migrate/migrate_test.go: `.Context(t)`
$DIR/core/store/migrate/migrate_test.go: `.CreateSpec(ctx, pipeline.Pipeline{}, 0)`
$DIR/core/store/migrate/migrate_test.go: `.CreateSpec(ctx, pipeline.Pipeline{}, 0)`
$DIR/core/store/migrate/migrate_test.go: `.CreateSpec(ctx, pipeline.Pipeline{}, 0)`
$DIR/core/store/migrate/migrate_test.go: `.CreateSpec(ctx, pipeline.Pipeline{}, 0)`
$DIR/core/store/migrate/migrate_test.go: `.StringFrom("endpoint:chain.link.monitor")`
$DIR/core/store/migrate/migrate_test.go: `.New()`
$DIR/core/store/migrate/migrate_test.go: `.New()`
$DIR/core/store/migrate/migrate_test.go: `.New()`
$DIR/core/store/migrate/migrate_test.go: `.StringFrom("new:chain.link.monitor")`
$DIR/core/store/migrate/migrate_test.go: `.New()`
$DIR/core/store/migrate/migrate_test.go: `.NamedExec(sql, jb.Offchainreporting2OracleSpec)`
$DIR/core/store/migrate/migrate_test.go: `.NamedExec(sql, nonBootstrapJob.Offchainreporting2OracleSpec)`
$DIR/core/store/migrate/migrate_test.go: `.NamedExec(sql, jb2.Offchainreporting2OracleSpec)`
$DIR/core/store/migrate/migrate_test.go: `.NamedExec(sql, newFormatBootstrapJob.BootstrapSpec)`
$DIR/core/store/migrate/migrate_test.go: `.NamedExec(sql, jb)`
$DIR/core/store/migrate/migrate_test.go: `.NamedExec(sql, nonBootstrapJob)`
$DIR/core/store/migrate/migrate_test.go: `.NamedExec(sql, jb2)`
$DIR/core/store/migrate/migrate_test.go: `.NamedExec(sql, newFormatBootstrapJob)`
$DIR/core/store/migrate/migrate_test.go: `.UpByOne(db.DB, migrationDir)`
$DIR/core/store/migrate/migrate_test.go: `.Select(&bootstrapSpecs, sql)`
$DIR/core/store/migrate/migrate_test.go: `.Select(&jobs, sql)`
$DIR/core/store/migrate/migrate_test.go: `.Get(&resultingBootstrapSpec, `SELECT * FROM bootstrap_specs WHERE id = $1`, *migratedJob.BootstrapSpecID)`
$DIR/core/store/migrate/migrate_test.go: `.Get(&count, sql)`
$DIR/core/store/migrate/migrate_test.go: `.Down(db.DB, migrationDir)`
$DIR/core/store/migrate/migrate_test.go: `.Select(&oldJobs, sql)`
$DIR/core/store/migrate/migrate_test.go: `.Select(&oldOCR2Spec, sql)`
$DIR/core/store/migrate/migrate_test.go: `.Get(&count, sql)`
$DIR/core/store/migrate/migrate_test.go: `.Select(&jobsAndContracts, sql)`
$DIR/core/store/migrate/migrate_test.go: `.FullTestDBEmptyV2(t, nil)`
$DIR/core/store/migrate/migrate_test.go: `.UpTo(db.DB, migrationDir, 100)`
$DIR/core/store/migrate/migrate_test.go: `.NamedExec(sql, spec)`
$DIR/core/store/migrate/migrate_test.go: `.UpByOne(db.DB, migrationDir)`
$DIR/core/store/migrate/migrate_test.go: `.Get(&pluginValues, sql)`
$DIR/core/store/migrate/migrate_test.go: `.Down(db.DB, migrationDir)`
$DIR/core/store/migrate/migrate_test.go: `.Get(&pluginValues, sql)`
$DIR/core/store/migrate/migrate_test.go: `.Get(&juels, sql)`
$DIR/core/store/migrate/migrate_test.go: `.Context(t)`
$DIR/core/store/migrate/migrate_test.go: `.FullTestDBEmptyV2(t, nil)`
$DIR/core/store/migrate/migrate_test.go: `.UpTo(db.DB, migrationDir, 100)`
$DIR/core/store/migrate/migrate_test.go: `.Status(ctx, db.DB)`
$DIR/core/store/migrate/migrate_test.go: `.Current(ctx, db.DB)`
$DIR/core/store/migrate/migrate_test.go: `.Migrate(ctx, db.DB)`
$DIR/core/store/migrate/migrate_test.go: `.Rollback(ctx, db.DB, null.IntFrom(99))`
$DIR/core/store/migrate/migrate_test.go: `.IntFrom(99)`
$DIR/core/store/migrate/migrate_test.go: `.Current(ctx, db.DB)`
$DIR/core/store/migrate/migrate_test.go: `.Run("ValidEVMConfig", func(t *testing.T) {
chainID := ubig.New(big.NewInt(1337))
testConfig := configtest.NewGeneralConfig(t, func(c *chainlink.Config, s *chainlink.Secrets) {
evmEnabled := true
c.EVM = evmcfg.EVMConfigs{&evmcfg.EVMConfig{
ChainID: chainID,
Enabled: &evmEnabled,
}}
})
require.NoError(t, migrate.SetMigrationENVVars(testConfig))
actualChainID := os.Getenv(env.EVMChainIDNotNullMigration0195)
require.Equal(t, actualChainID, chainID.String())
})`
$DIR/core/store/migrate/migrate_test.go: `.New(big.NewInt(1337))`
$DIR/core/store/migrate/migrate_test.go: `.NewInt(1337)`
$DIR/core/store/migrate/migrate_test.go: `.NewGeneralConfig(t, func(c *chainlink.Config, s *chainlink.Secrets) {
evmEnabled := true
c.EVM = evmcfg.EVMConfigs{&evmcfg.EVMConfig{
ChainID: chainID,
Enabled: &evmEnabled,
}}
})`
$DIR/core/store/migrate/migrate_test.go: `.Getenv(env.EVMChainIDNotNullMigration0195)`
$DIR/core/store/migrate/migrate_test.go: `.New(big.NewInt(1337))`
$DIR/core/store/migrate/migrate_test.go: `.NewInt(1337)`
$DIR/core/store/migrate/migrate_test.go: `.NewGeneralConfig(t, func(c *chainlink.Config, s *chainlink.Secrets) { c.EVM = nil })`
$DIR/core/store/migrate/migrate_test.go: `.Getenv(env.EVMChainIDNotNullMigration0195)`
$DIR/core/store/migrate/migrate_test.go: `.FullTestDBEmptyV2(t, nil)`
$DIR/core/store/migrate/migrate_test.go: `.Context(t)`
$DIR/core/store/migrate/migrate_test.go: `.UpTo(db.DB, migrationDir, 201)`
$DIR/core/store/migrate/migrate_test.go: `.NewORM(testutils.SimulatedChainID, db, logger.TestLogger(t))`
$DIR/core/store/migrate/migrate_test.go: `.TestLogger(t)`
$DIR/core/store/migrate/migrate_test.go: `.NewORM(big.NewInt(int64(84531)), db, logger.TestLogger(t))`
$DIR/core/store/migrate/migrate_test.go: `.NewInt(int64(84531))`
$DIR/core/store/migrate/migrate_test.go: `.TestLogger(t)`
$DIR/core/store/migrate/migrate_test.go: `.NewORM(big.NewInt(int64(1001)), db, logger.TestLogger(t))`
$DIR/core/store/migrate/migrate_test.go: `.NewInt(int64(1001))`
$DIR/core/store/migrate/migrate_test.go: `.TestLogger(t)`
$DIR/core/store/migrate/migrate_test.go: `.UpTo(db.DB, migrationDir, 202)`
$DIR/core/store/migrate/migrate_test.go: `.Run(tt.name, func(t *testing.T) {
block, err := tt.orm.SelectBlockByNumber(ctx, tt.blockNumber)
require.NoError(t, err)
require.Equal(t, tt.expectedFinalizedBlock, block.FinalizedBlockNumber)
})`
$DIR/core/store/migrate/migrate_test.go: `.orm.SelectBlockByNumber(ctx, tt.blockNumber)`
$DIR/core/store/migrate/migrate_test.go: `.FullTestDBEmptyV2(t, nil)`
$DIR/core/store/migrate/migrate_test.go: `.DB.QueryRow("select count(*) from information_schema.triggers")`
$DIR/core/store/migrate/migrate_test.go: `.Scan(&count)`
$DIR/core/store/migrate/migrate_test.go: `.UpTo(db.DB, migrationDir, int64(v))`
$DIR/core/store/models/common_test.go: `t.Run(test.name, func(t *testing.T) {
j1 := cltest.JSONFromString(t, test.original)
j2 := cltest.JSONFromString(t, test.input)
merged, err := models.Merge(j1, j2)
if test.wantError {
require.Error(t, err)
} else {
require.NoError(t, err)
assert.JSONEq(t, test.want, merged.String())
assert.JSONEq(t, test.original, j1.String())
}
})`
$DIR/core/store/models/common_test.go: `t.Run(test.name, func(t *testing.T) {
var j models.JSON
err := json.Unmarshal([]byte(test.json), &j)
assert.Equal(t, test.wantErrored, (err != nil))
})`
$DIR/core/store/models/common_test.go: `t.Run(test.name, func(t *testing.T) {
json, err := models.ParseJSON([]byte(test.in))
assert.Equal(t, test.want, json)
assert.Equal(t, test.wantErrored, (err != nil))
})`
$DIR/core/store/models/common_test.go: `t.Run(test.name, func(t *testing.T) {
var actual models.Cron
err := json.Unmarshal([]byte(test.input), &actual)
assert.NoError(t, err)
})`
$DIR/core/store/models/common_test.go: `t.Run(test.name, func(t *testing.T) {
var actual models.Cron
err := json.Unmarshal([]byte(test.input), &actual)
assert.EqualError(t, err, test.wantError)
})`
$DIR/core/store/models/common_test.go: `err = newHash.UnmarshalJSON(json)`
$DIR/core/store/models/common_test.go: `_, err = models.Sha256HashFromHex("f5bf259689b26f1374efb3c9a9868796953a0f814bb2d39b968d0e61b58620a5")`
$DIR/core/store/models/common_test.go: `_, err = models.Sha256HashFromHex("f5bf259689b26f1374e6")`
$DIR/core/store/models/common_test.go: `err = newHash.Scan(val)`
$DIR/core/store/models/common_test.go: `err = acNew.Scan(val)`
$DIR/core/store/models/common_test.go: `i = models.NewInterval(1)`
$DIR/core/store/models/common_test.go: `err = iNew.Scan(val)`
$DIR/core/store/models/common_test.go: `err = iNew.UnmarshalText(txt)`
$DIR/core/store/models/common_test.go: `err = wNew.Scan(val)`
$DIR/core/store/models/common_test.go: `err = jsNew.Scan(val)`
$DIR/core/store/models/common_test.go: `err = js.UnmarshalTOML(string(jsBytes))`
$DIR/core/store/models/common_test.go: `.Run(test.name, func(t *testing.T) {
j1 := cltest.JSONFromString(t, test.original)
j2 := cltest.JSONFromString(t, test.input)
merged, err := models.Merge(j1, j2)
if test.wantError {
require.Error(t, err)
} else {
require.NoError(t, err)
assert.JSONEq(t, test.want, merged.String())
assert.JSONEq(t, test.original, j1.String())
}
})`
$DIR/core/store/models/common_test.go: `.JSONFromString(t, test.original)`
$DIR/core/store/models/common_test.go: `.JSONFromString(t, test.input)`
$DIR/core/store/models/common_test.go: `.Merge(j1, j2)`
$DIR/core/store/models/common_test.go: `.Merge(models.JSON{}, models.JSON{})`
$DIR/core/store/models/common_test.go: `.String()`
$DIR/core/store/models/common_test.go: `.Run(test.name, func(t *testing.T) {
var j models.JSON
err := json.Unmarshal([]byte(test.json), &j)
assert.Equal(t, test.wantErrored, (err != nil))
})`
$DIR/core/store/models/common_test.go: `.Unmarshal([]byte(test.json), &j)`
$DIR/core/store/models/common_test.go: `.JSONFromString(t, `{"num": 100}`)`
$DIR/core/store/models/common_test.go: `.Run(test.name, func(t *testing.T) {
json, err := models.ParseJSON([]byte(test.in))
assert.Equal(t, test.want, json)
assert.Equal(t, test.wantErrored, (err != nil))
})`
$DIR/core/store/models/common_test.go: `.ParseJSON([]byte(test.in))`
$DIR/core/store/models/common_test.go: `.Unmarshal(j, wurl)`
$DIR/core/store/models/common_test.go: `.Unmarshal(j, wurl)`
$DIR/core/store/models/common_test.go: `.ParseRequestURI(str)`
$DIR/core/store/models/common_test.go: `.WebURL(*parsed)`
$DIR/core/store/models/common_test.go: `.Marshal(wurl)`
$DIR/core/store/models/common_test.go: `.Parse("http://www.duckduckgo.com")`
$DIR/core/store/models/common_test.go: `.WebURL(*u)`
$DIR/core/store/models/common_test.go: `.String()`
$DIR/core/store/models/common_test.go: `.String()`
$DIR/core/store/models/common_test.go: `.Run(test.name, func(t *testing.T) {
var actual models.Cron
err := json.Unmarshal([]byte(test.input), &actual)
assert.NoError(t, err)
})`
$DIR/core/store/models/common_test.go: `.Unmarshal([]byte(test.input), &actual)`
$DIR/core/store/models/common_test.go: `.Run(test.name, func(t *testing.T) {
var actual models.Cron
err := json.Unmarshal([]byte(test.input), &actual)
assert.EqualError(t, err, test.wantError)
})`
$DIR/core/store/models/common_test.go: `.Unmarshal([]byte(test.input), &actual)`
$DIR/core/store/models/common_test.go: `.NewInterval(duration)`
$DIR/core/store/models/common_test.go: `.Duration()`
$DIR/core/store/models/common_test.go: `.MustSha256HashFromHex("f5bf259689b26f1374efb3c9a9868796953a0f814bb2d39b968d0e61b58620a5")`
$DIR/core/store/models/common_test.go: `.MarshalJSON()`
$DIR/core/store/models/common_test.go: `.UnmarshalJSON(json)`
$DIR/core/store/models/common_test.go: `.Sha256HashFromHex("abczzz")`
$DIR/core/store/models/common_test.go: `.Sha256HashFromHex("f5bf259689b26f1374efb3c9a9868796953a0f814bb2d39b968d0e61b58620a5")`
$DIR/core/store/models/common_test.go: `.Sha256HashFromHex("f5bf259689b26f1374e6")`
$DIR/core/store/models/common_test.go: `.MustSha256HashFromHex("f5bf259689b26f1374efb3c9a9868796953a0f814bb2d39b968d0e61b58620a5")`
$DIR/core/store/models/common_test.go: `.String()`
$DIR/core/store/models/common_test.go: `.MustSha256HashFromHex("f5bf259689b26f1374efb3c9a9868796953a0f814bb2d39b968d0e61b58620a5")`
$DIR/core/store/models/common_test.go: `.Value()`
$DIR/core/store/models/common_test.go: `.Scan(val)`
$DIR/core/store/models/common_test.go: `.HexToAddress(strings.Repeat("AA", 20))`
$DIR/core/store/models/common_test.go: `.Repeat("AA", 20)`
$DIR/core/store/models/common_test.go: `.HexToAddress(strings.Repeat("BB", 20))`
$DIR/core/store/models/common_test.go: `.Repeat("BB", 20)`
$DIR/core/store/models/common_test.go: `.Value()`
$DIR/core/store/models/common_test.go: `.Scan(val)`
$DIR/core/store/models/common_test.go: `.HexToAddress(hex1)`
$DIR/core/store/models/common_test.go: `.HexToAddress(hex2)`
$DIR/core/store/models/common_test.go: `.ToStrings()`
$DIR/core/store/models/common_test.go: `.NewInterval(0)`
$DIR/core/store/models/common_test.go: `.NewInterval(1)`
$DIR/core/store/models/common_test.go: `.IsZero()`
$DIR/core/store/models/common_test.go: `.NewInterval(100)`
$DIR/core/store/models/common_test.go: `.Value()`
$DIR/core/store/models/common_test.go: `.NewInterval(0)`
$DIR/core/store/models/common_test.go: `.Scan(val)`
$DIR/core/store/models/common_test.go: `.NewInterval(100)`
$DIR/core/store/models/common_test.go: `.MarshalText()`
$DIR/core/store/models/common_test.go: `.NewInterval(0)`
$DIR/core/store/models/common_test.go: `.UnmarshalText(txt)`
$DIR/core/store/models/common_test.go: `.Parse("https://chain.link")`
$DIR/core/store/models/common_test.go: `.WebURL(*u)`
$DIR/core/store/models/common_test.go: `.Value()`
$DIR/core/store/models/common_test.go: `.Scan(val)`
$DIR/core/store/models/common_test.go: `.ParseJSON([]byte(`{"foo":123}`))`
$DIR/core/store/models/common_test.go: `.Value()`
$DIR/core/store/models/common_test.go: `.Scan(val)`
$DIR/core/store/models/common_test.go: `.ParseJSON(jsBytes)`
$DIR/core/store/models/common_test.go: `.Bytes()`
$DIR/core/store/models/common_test.go: `.ParseJSON(jsBytes)`
$DIR/core/store/models/common_test.go: `.MarshalJSON()`
$DIR/core/store/models/common_test.go: `.UnmarshalTOML(jsBytes)`
$DIR/core/store/models/common_test.go: `.UnmarshalTOML(string(jsBytes))`
$DIR/core/store/models/common_test.go: `.Bytes()`
$DIR/core/store/models/errors_test.go: `res.Add("bar")`
$DIR/core/store/models/errors_test.go: `res = models.NewJSONAPIErrorsWith("foo")`
$DIR/core/store/models/errors_test.go: `err = res.CoerceEmptyToNil()`
$DIR/core/store/models/errors_test.go: `res1.Merge(res2)`
$DIR/core/store/models/errors_test.go: `res1.Merge(errors.New("zet"))`
$DIR/core/store/models/errors_test.go: `.NewJSONAPIErrors()`
$DIR/core/store/models/errors_test.go: `.NewJSONAPIErrorsWith("foo")`
$DIR/core/store/models/errors_test.go: `.NewJSONAPIErrorsWith("foo")`
$DIR/core/store/models/errors_test.go: `.Add("bar")`
$DIR/core/store/models/errors_test.go: `.NewJSONAPIErrors()`
$DIR/core/store/models/errors_test.go: `.CoerceEmptyToNil()`
$DIR/core/store/models/errors_test.go: `.NewJSONAPIErrorsWith("foo")`
$DIR/core/store/models/errors_test.go: `.CoerceEmptyToNil()`
$DIR/core/store/models/errors_test.go: `.NewJSONAPIErrorsWith("foo")`
$DIR/core/store/models/errors_test.go: `.NewJSONAPIErrorsWith("bar")`
$DIR/core/store/models/errors_test.go: `.Merge(res2)`
$DIR/core/store/models/errors_test.go: `.Merge(errors.New("zet"))`
$DIR/core/store/models/errors_test.go: `.New("zet")`
$DIR/core/store/models/secrets_test.go: `t.Run(fmt.Sprintf("%T", v), func(t *testing.T) {
assert.Equal(t, redacted, v.String())
got, err := v.MarshalText()
if assert.NoError(t, err) {
assert.Equal(t, redacted, string(got))
}
assert.Equal(t, redacted, fmt.Sprint(v))
assert.Equal(t, redacted, fmt.Sprintf("%s", v)) //nolint:gosimple
assert.Equal(t, redacted, fmt.Sprintf("%v", v))
assert.Equal(t, redacted, fmt.Sprintf("%#v", v))
got, err = json.Marshal(v)
if assert.NoError(t, err) {
assert.Equal(t, fmt.Sprintf(`"%s"`, redacted), string(got))
}
})`
$DIR/core/store/models/secrets_test.go: `got, err = json.Marshal(v)`
$DIR/core/store/models/secrets_test.go: `.Run(fmt.Sprintf("%T", v), func(t *testing.T) {
assert.Equal(t, redacted, v.String())
got, err := v.MarshalText()
if assert.NoError(t, err) {
assert.Equal(t, redacted, string(got))
}
assert.Equal(t, redacted, fmt.Sprint(v))
assert.Equal(t, redacted, fmt.Sprintf("%s", v)) //nolint:gosimple
assert.Equal(t, redacted, fmt.Sprintf("%v", v))
assert.Equal(t, redacted, fmt.Sprintf("%#v", v))
got, err = json.Marshal(v)
if assert.NoError(t, err) {
assert.Equal(t, fmt.Sprintf(`"%s"`, redacted), string(got))
}
})`
$DIR/core/store/models/secrets_test.go: `.Sprintf("%T", v)`
$DIR/core/store/models/secrets_test.go: `.MarshalText()`
$DIR/core/store/models/secrets_test.go: `.Marshal(v)`
$DIR/core/utils/backoff_ticker_test.go: `ok = bt.Start()`
$DIR/core/utils/backoff_ticker_test.go: `ok = bt.Stop()`
$DIR/core/utils/backoff_ticker_test.go: `ok = bt.Stop()`
$DIR/core/utils/backoff_ticker_test.go: `realTimer.C = chTime`
$DIR/core/utils/backoff_ticker_test.go: `ok = bt.Stop()`
$DIR/core/utils/backoff_ticker_test.go: `chTime <- time.Now()`
$DIR/core/utils/backoff_ticker_test.go: `realTimer.C = chTime`
$DIR/core/utils/backoff_ticker_test.go: `chTime <- tm`
$DIR/core/utils/backoff_ticker_test.go: `newTimerCount.Add(1)`
$DIR/core/utils/backoff_ticker_test.go: `ok = bt.Stop()`
$DIR/core/utils/backoff_ticker_test.go: `ok = bt.Start()`
$DIR/core/utils/backoff_ticker_test.go: `.Bounds()`
$DIR/core/utils/backoff_ticker_test.go: `.Stop()`
$DIR/core/utils/backoff_ticker_test.go: `.Start()`
$DIR/core/utils/backoff_ticker_test.go: `.Start()`
$DIR/core/utils/backoff_ticker_test.go: `.Start()`
$DIR/core/utils/backoff_ticker_test.go: `.Stop()`
$DIR/core/utils/backoff_ticker_test.go: `.Stop()`
$DIR/core/utils/backoff_ticker_test.go: `.NewTimer(max)`
$DIR/core/utils/backoff_ticker_test.go: `.Start()`
$DIR/core/utils/backoff_ticker_test.go: `.Stop()`
$DIR/core/utils/backoff_ticker_test.go: `.Now()`
$DIR/core/utils/backoff_ticker_test.go: `.After(2 * min)`
$DIR/core/utils/backoff_ticker_test.go: `.Ticks()`
$DIR/core/utils/backoff_ticker_test.go: `.NewTimer(max)`
$DIR/core/utils/backoff_ticker_test.go: `.Start()`
$DIR/core/utils/backoff_ticker_test.go: `.Stop()`
$DIR/core/utils/backoff_ticker_test.go: `.Now()`
$DIR/core/utils/backoff_ticker_test.go: `.Add(1 * time.Second)`
$DIR/core/utils/backoff_ticker_test.go: `.Add(1 * time.Second)`
$DIR/core/utils/backoff_ticker_test.go: `.Ticks()`
$DIR/core/utils/backoff_ticker_test.go: `.After(2 * min)`
$DIR/core/utils/backoff_ticker_test.go: `.Ticks()`
$DIR/core/utils/backoff_ticker_test.go: `.Add(1)`
$DIR/core/utils/backoff_ticker_test.go: `.NewTimer(max)`
$DIR/core/utils/backoff_ticker_test.go: `.Start()`
$DIR/core/utils/backoff_ticker_test.go: `.Stop()`
$DIR/core/utils/backoff_ticker_test.go: `.Start()`
$DIR/core/utils/backoff_ticker_test.go: `.Stop()`
$DIR/core/utils/backoff_ticker_test.go: `.Load()`
$DIR/core/utils/big_math/big_math_test.go: `s = []*big.Int{}`
$DIR/core/utils/big_math/big_math_test.go: `expected = big.NewInt(0)`
$DIR/core/utils/big_math/big_math_test.go: `.NewInt(1)`
$DIR/core/utils/big_math/big_math_test.go: `.NewInt(2)`
$DIR/core/utils/big_math/big_math_test.go: `.NewInt(2)`
$DIR/core/utils/big_math/big_math_test.go: `.Cmp(m)`
$DIR/core/utils/big_math/big_math_test.go: `.NewInt(1)`
$DIR/core/utils/big_math/big_math_test.go: `.NewInt(2)`
$DIR/core/utils/big_math/big_math_test.go: `.NewInt(1)`
$DIR/core/utils/big_math/big_math_test.go: `.Cmp(m)`
$DIR/core/utils/big_math/big_math_test.go: `.NewInt(1)`
$DIR/core/utils/big_math/big_math_test.go: `.NewInt(2)`
$DIR/core/utils/big_math/big_math_test.go: `.NewInt(3)`
$DIR/core/utils/big_math/big_math_test.go: `.NewInt(4)`
$DIR/core/utils/big_math/big_math_test.go: `.NewInt(5)`
$DIR/core/utils/big_math/big_math_test.go: `.NewInt(15)`
$DIR/core/utils/big_math/big_math_test.go: `.NewInt(0)`
$DIR/core/utils/collection_test.go: `list = append(list, i)`
$DIR/core/utils/collection_test.go: `t.Run(r.name, func(t *testing.T) {
batch, err := BatchSplit(r.input, r.max)
if r.expectErr {
assert.Error(t, err)
return
}
assert.NoError(t, err)
assert.Equal(t, r.num, len(batch)) // check number of batches
temp := []int{}
for i := 0; i < len(batch); i++ {
expectedLen := r.max
if i == len(batch)-1 {
expectedLen = r.lastLen // expect last batch to be less than max
}
assert.Equal(t, expectedLen, len(batch[i])) // check length of batch
temp = append(temp, batch[i]...)
}
// assert order has not changed when list is reconstructed
assert.Equal(t, r.input, temp)
})`
$DIR/core/utils/collection_test.go: `expectedLen = r.lastLen`
$DIR/core/utils/collection_test.go: `temp = append(temp, batch[i]...)`
$DIR/core/utils/collection_test.go: `.Run(r.name, func(t *testing.T) {
batch, err := BatchSplit(r.input, r.max)
if r.expectErr {
assert.Error(t, err)
return
}
assert.NoError(t, err)
assert.Equal(t, r.num, len(batch)) // check number of batches
temp := []int{}
for i := 0; i < len(batch); i++ {
expectedLen := r.max
if i == len(batch)-1 {
expectedLen = r.lastLen // expect last batch to be less than max
}
assert.Equal(t, expectedLen, len(batch[i])) // check length of batch
temp = append(temp, batch[i]...)
}
// assert order has not changed when list is reconstructed
assert.Equal(t, r.input, temp)
})`
$DIR/core/utils/crypto/private_key_test.go: `err = actual.Scan("not bytes")`
$DIR/core/utils/crypto/private_key_test.go: `err = actual.Scan(b)`
$DIR/core/utils/crypto/private_key_test.go: `.Decrypt(passphrase)`
$DIR/core/utils/crypto/private_key_test.go: `.GenerateKey(nil)`
$DIR/core/utils/crypto/private_key_test.go: `.EncryptDataV3(privkey, passphrase, 2, 1)`
$DIR/core/utils/crypto/private_key_test.go: `.Decrypt(string(passphrase))`
$DIR/core/utils/crypto/private_key_test.go: `.GenerateKey(nil)`
$DIR/core/utils/crypto/private_key_test.go: `.EncryptDataV3(privKey, []byte("passphrase"), 2, 1)`
$DIR/core/utils/crypto/private_key_test.go: `.Marshal(encPrivkey)`
$DIR/core/utils/crypto/private_key_test.go: `.Scan("not bytes")`
$DIR/core/utils/crypto/private_key_test.go: `.Scan(b)`
$DIR/core/utils/crypto/private_key_test.go: `.Marshal(EncryptedPrivateKey{CryptoJSON: encPrivkey})`
$DIR/core/utils/crypto/private_key_test.go: `.Marshal(actual)`
$DIR/core/utils/crypto/private_key_test.go: `.GenerateKey(nil)`
$DIR/core/utils/crypto/private_key_test.go: `.EncryptDataV3(privKey, []byte("passphrase"), 2, 1)`
$DIR/core/utils/crypto/private_key_test.go: `.Value()`
$DIR/core/utils/crypto/private_key_test.go: `.Marshal(EncryptedPrivateKey{CryptoJSON: cryptoJSON})`
$DIR/core/utils/crypto/public_key_test.go: `err = actual.UnmarshalJSON([]byte(fmt.Sprintf(`"%s"`, hexKey)))`
$DIR/core/utils/crypto/public_key_test.go: `err = actual.Scan("not bytes")`
$DIR/core/utils/crypto/public_key_test.go: `err = actual.Scan(nil)`
$DIR/core/utils/crypto/public_key_test.go: `err = actual.Scan([]byte(pubKey))`
$DIR/core/utils/crypto/public_key_test.go: `.GenerateKey(nil)`
$DIR/core/utils/crypto/public_key_test.go: `.EncodeToString(pubKey)`
$DIR/core/utils/crypto/public_key_test.go: `.String()`
$DIR/core/utils/crypto/public_key_test.go: `.GenerateKey(nil)`
$DIR/core/utils/crypto/public_key_test.go: `.EncodeToString(pubKey)`
$DIR/core/utils/crypto/public_key_test.go: `.MarshalJSON()`
$DIR/core/utils/crypto/public_key_test.go: `.Sprintf(`"%s"`, hexKey)`
$DIR/core/utils/crypto/public_key_test.go: `.GenerateKey(nil)`
$DIR/core/utils/crypto/public_key_test.go: `.EncodeToString(pubKey)`
$DIR/core/utils/crypto/public_key_test.go: `.UnmarshalJSON([]byte(fmt.Sprintf(`"%s"`, hexKey)))`
$DIR/core/utils/crypto/public_key_test.go: `.Sprintf(`"%s"`, hexKey)`
$DIR/core/utils/crypto/public_key_test.go: `.GenerateKey(nil)`
$DIR/core/utils/crypto/public_key_test.go: `.Scan("not bytes")`
$DIR/core/utils/crypto/public_key_test.go: `.Scan(nil)`
$DIR/core/utils/crypto/public_key_test.go: `.Scan([]byte(pubKey))`
$DIR/core/utils/crypto/public_key_test.go: `.GenerateKey(nil)`
$DIR/core/utils/crypto/public_key_test.go: `.Value()`
$DIR/core/utils/decimal_test.go: `.New(1, 0)`
$DIR/core/utils/decimal_test.go: `.NewInt(1)`
$DIR/core/utils/decimal_test.go: `.Inf(1)`
$DIR/core/utils/decimal_test.go: `.Inf(-1)`
$DIR/core/utils/decimal_test.go: `.Inf(-1)`
$DIR/core/utils/decimal_test.go: `.Inf(1)`
$DIR/core/utils/decimal_test.go: `.NaN()`
$DIR/core/utils/decimal_test.go: `.NaN()`
$DIR/core/utils/deferable_write_closer_test.go: `_, err = wc.Write([]byte(wantStr))`
$DIR/core/utils/deferable_write_closer_test.go: `_, err = f.Write([]byte("after close"))`
$DIR/core/utils/deferable_write_closer_test.go: `_, err = wc.Write([]byte("write to wc after close"))`
$DIR/core/utils/deferable_write_closer_test.go: `.TempDir()`
$DIR/core/utils/deferable_write_closer_test.go: `.Create(filepath.Join(d, "test-file"))`
$DIR/core/utils/deferable_write_closer_test.go: `.Join(d, "test-file")`
$DIR/core/utils/deferable_write_closer_test.go: `.Write([]byte(wantStr))`
$DIR/core/utils/deferable_write_closer_test.go: `.Write([]byte("after close"))`
$DIR/core/utils/deferable_write_closer_test.go: `.Write([]byte("write to wc after close"))`
$DIR/core/utils/deferable_write_closer_test.go: `.ReadFile(f.Name())`
$DIR/core/utils/deferable_write_closer_test.go: `.Name()`
$DIR/core/utils/eth_signatures_test.go: `.GenerateKey()`
$DIR/core/utils/eth_signatures_test.go: `.PubkeyToAddress(privateKey.PublicKey)`
$DIR/core/utils/eth_signatures_test.go: `.Keccak256Hash([]byte(expectedPrefix + "12" + string(msg)))`
$DIR/core/utils/eth_signatures_test.go: `.GenerateKey()`
$DIR/core/utils/eth_signatures_test.go: `.SigToPub(GenerateEthPrefixedMsgHash(msg).Bytes(), signature)`
$DIR/core/utils/eth_signatures_test.go: `.Bytes()`
$DIR/core/utils/files_test.go: `exists, err = FileExists(os.Args[0])`
$DIR/core/utils/files_test.go: `res = TooPermissive(os.FileMode(0600), os.FileMode(0600))`
$DIR/core/utils/files_test.go: `res = TooPermissive(os.FileMode(0600), os.FileMode(0700))`
$DIR/core/utils/files_test.go: `t.Run(test.expected, func(t *testing.T) {
t.Parallel()
bstr, err := test.input.MarshalText()
assert.NoError(t, err)
assert.Equal(t, test.expected, string(bstr))
assert.Equal(t, test.expected, test.input.String())
})`
$DIR/core/utils/files_test.go: `t.Run(test.input, func(t *testing.T) {
t.Parallel()
var fs FileSize
err := fs.UnmarshalText([]byte(test.input))
if test.valid {
assert.NoError(t, err)
assert.Equal(t, test.expected, fs)
} else {
assert.Error(t, err)
}
})`
$DIR/core/utils/files_test.go: `.FileMode(0700)`
$DIR/core/utils/files_test.go: `.FileMode(0600)`
$DIR/core/utils/files_test.go: `.FileMode(0600)`
$DIR/core/utils/files_test.go: `.FileMode(0600)`
$DIR/core/utils/files_test.go: `.FileMode(0600)`
$DIR/core/utils/files_test.go: `.FileMode(0700)`
$DIR/core/utils/files_test.go: `.Run(test.expected, func(t *testing.T) {
t.Parallel()
bstr, err := test.input.MarshalText()
assert.NoError(t, err)
assert.Equal(t, test.expected, string(bstr))
assert.Equal(t, test.expected, test.input.String())
})`
$DIR/core/utils/files_test.go: `.input.MarshalText()`
$DIR/core/utils/files_test.go: `.Run(test.input, func(t *testing.T) {
t.Parallel()
var fs FileSize
err := fs.UnmarshalText([]byte(test.input))
if test.valid {
assert.NoError(t, err)
assert.Equal(t, test.expected, fs)
} else {
assert.Error(t, err)
}
})`
$DIR/core/utils/files_test.go: `.UnmarshalText([]byte(test.input))`
$DIR/core/utils/finite_ticker_test.go: `counter.Add(1)`
$DIR/core/utils/finite_ticker_test.go: `stop()`
$DIR/core/utils/finite_ticker_test.go: `time.Sleep(2 * testutils.TestInterval)`
$DIR/core/utils/finite_ticker_test.go: `.Add(1)`
$DIR/core/utils/finite_ticker_test.go: `.Now()`
$DIR/core/utils/finite_ticker_test.go: `.FiniteTicker(testutils.TestInterval, onTick)`
$DIR/core/utils/finite_ticker_test.go: `.Load()`
$DIR/core/utils/finite_ticker_test.go: `.Sleep(2 * testutils.TestInterval)`
$DIR/core/utils/finite_ticker_test.go: `.Load()`
$DIR/core/utils/hash_test.go: `.Repeat("0", test.Size)`
$DIR/core/utils/hash_test.go: `.UnmarshalText([]byte(input))`
$DIR/core/utils/hash_test.go: `.Repeat("0", test.Size)`
$DIR/core/utils/hash_test.go: `.Unmarshal([]byte(input), &v)`
$DIR/core/utils/http/http_allowed_ips_test.go: `t.Run(test.ip.String(), func(t *testing.T) {
r, err := isRestrictedIP(test.ip, emptyDBURLcfg{})
require.NoError(t, err)
assert.Equal(t, test.isRestricted, r)
})`
$DIR/core/utils/http/http_allowed_ips_test.go: `t.Run("disallows queries to database IP", func(t *testing.T) {
s := httptest.NewServer(http.HandlerFunc(func(_ http.ResponseWriter, _ *http.Request) {}))
t.Cleanup(s.Close)
u := testutils.MustParseURL(t, s.URL)
r, err := isRestrictedIP(net.ParseIP(u.Host), testDBURLcfg{*u})
require.NoError(t, err)
assert.True(t, r)
})`
$DIR/core/utils/http/http_allowed_ips_test.go: `t.Cleanup(s.Close)`
$DIR/core/utils/http/http_allowed_ips_test.go: `.ParseIP("1.1.1.1")`
$DIR/core/utils/http/http_allowed_ips_test.go: `.ParseIP("216.239.32.10")`
$DIR/core/utils/http/http_allowed_ips_test.go: `.ParseIP("2001:4860:4860::8888")`
$DIR/core/utils/http/http_allowed_ips_test.go: `.ParseIP("127.0.0.1")`
$DIR/core/utils/http/http_allowed_ips_test.go: `.ParseIP("255.255.255.255")`
$DIR/core/utils/http/http_allowed_ips_test.go: `.ParseIP("224.0.0.1")`
$DIR/core/utils/http/http_allowed_ips_test.go: `.ParseIP("224.0.0.2")`
$DIR/core/utils/http/http_allowed_ips_test.go: `.ParseIP("224.1.1.1")`
$DIR/core/utils/http/http_allowed_ips_test.go: `.ParseIP("0.0.0.0")`
$DIR/core/utils/http/http_allowed_ips_test.go: `.ParseIP("192.168.0.1")`
$DIR/core/utils/http/http_allowed_ips_test.go: `.ParseIP("192.168.1.255")`
$DIR/core/utils/http/http_allowed_ips_test.go: `.ParseIP("255.255.255.255")`
$DIR/core/utils/http/http_allowed_ips_test.go: `.ParseIP("10.0.0.1")`
$DIR/core/utils/http/http_allowed_ips_test.go: `.ParseIP("::1")`
$DIR/core/utils/http/http_allowed_ips_test.go: `.ParseIP("fd57:03f9:9ef5:8a81::1")`
$DIR/core/utils/http/http_allowed_ips_test.go: `.ParseIP("FD00::1")`
$DIR/core/utils/http/http_allowed_ips_test.go: `.ParseIP("FF02::1")`
$DIR/core/utils/http/http_allowed_ips_test.go: `.ParseIP("FE80:0000:0000:0000:abcd:abcd:abcd:abcd")`
$DIR/core/utils/http/http_allowed_ips_test.go: `.Run(test.ip.String(), func(t *testing.T) {
r, err := isRestrictedIP(test.ip, emptyDBURLcfg{})
require.NoError(t, err)
assert.Equal(t, test.isRestricted, r)
})`
$DIR/core/utils/http/http_allowed_ips_test.go: `.ip.String()`
$DIR/core/utils/http/http_allowed_ips_test.go: `.Run("disallows queries to database IP", func(t *testing.T) {
s := httptest.NewServer(http.HandlerFunc(func(_ http.ResponseWriter, _ *http.Request) {}))
t.Cleanup(s.Close)
u := testutils.MustParseURL(t, s.URL)
r, err := isRestrictedIP(net.ParseIP(u.Host), testDBURLcfg{*u})
require.NoError(t, err)
assert.True(t, r)
})`
$DIR/core/utils/http/http_allowed_ips_test.go: `.NewServer(http.HandlerFunc(func(_ http.ResponseWriter, _ *http.Request) {}))`
$DIR/core/utils/http/http_allowed_ips_test.go: `.HandlerFunc(func(_ http.ResponseWriter, _ *http.Request) {})`
$DIR/core/utils/http/http_allowed_ips_test.go: `.Cleanup(s.Close)`
$DIR/core/utils/http/http_allowed_ips_test.go: `.MustParseURL(t, s.URL)`
$DIR/core/utils/http/http_allowed_ips_test.go: `.ParseIP(u.Host)`
$DIR/core/utils/http/http_allowed_ips_test.go: `.MustParseURL(t, "postgresql://postgres@1.2.3.4:5432/chainlink_test?sslmode=disable")`
$DIR/core/utils/http/http_allowed_ips_test.go: `.ParseIP("1.2.3.4")`
$DIR/core/utils/http/http_test.go: `client.Transport = newMockTransport()`
$DIR/core/utils/http/http_test.go: `.NewUnrestrictedHTTPClient()`
$DIR/core/utils/http/http_test.go: `.NewRequestWithContext(testutils.Context(t), "GET", "http://localhost", bytes.NewReader([]byte{}))`
$DIR/core/utils/http/http_test.go: `.Context(t)`
$DIR/core/utils/http/http_test.go: `.NewReader([]byte{})`
$DIR/core/utils/http/http_test.go: `.SendRequest()`
$DIR/core/utils/json_normalization_test.go: `t.Run(test.name, func(t *testing.T) {
jsonBytes, err := json.Marshal(test.input)
assert.NoError(t, err)
str, err := utils.NormalizedJSON(jsonBytes)
cltest.AssertError(t, test.wantError, err)
assert.Equal(t, test.want, str)
})`
$DIR/core/utils/json_normalization_test.go: `cltest.AssertError(t, test.wantError, err)`
$DIR/core/utils/json_normalization_test.go: `.JSONFromString(t, `{"a": "!", "A": "1"}`)`
$DIR/core/utils/json_normalization_test.go: `.JSONFromString(t, `{"a": "!", "A": "1", "B": "@", "b":"?", "c":"..."}`)`
$DIR/core/utils/json_normalization_test.go: `.Run(test.name, func(t *testing.T) {
jsonBytes, err := json.Marshal(test.input)
assert.NoError(t, err)
str, err := utils.NormalizedJSON(jsonBytes)
cltest.AssertError(t, test.wantError, err)
assert.Equal(t, test.want, str)
})`
$DIR/core/utils/json_normalization_test.go: `.Marshal(test.input)`
$DIR/core/utils/json_normalization_test.go: `.NormalizedJSON(jsonBytes)`
$DIR/core/utils/json_normalization_test.go: `.AssertError(t, test.wantError, err)`
$DIR/core/utils/password_test.go: `t.Run(test.password, func(t *testing.T) {
t.Parallel()
var disallowedStrings []string
if test.mustNotcontain != "" {
disallowedStrings = []string{test.mustNotcontain}
}
err := utils.VerifyPasswordComplexity(test.password, disallowedStrings...)
if len(test.errors) == 0 {
assert.NoError(t, err)
} else {
assert.Error(t, err)
assert.ErrorContains(t, err, utils.ErrMsgHeader)
for _, subErr := range test.errors {
assert.ErrorContains(t, err, subErr.Error())
}
}
})`
$DIR/core/utils/password_test.go: `disallowedStrings = []string{test.mustNotcontain}`
$DIR/core/utils/password_test.go: `t.Run(test.password, func(t *testing.T) {
t.Parallel()
pwdFile, err := os.CreateTemp("", "")
assert.NoError(t, err)
defer os.Remove(pwdFile.Name())
_, err = pwdFile.WriteString(test.password)
assert.NoError(t, err)
pwd, err := utils.PasswordFromFile(pwdFile.Name())
if test.err != nil {
assert.Error(t, err)
assert.ErrorContains(t, err, test.err.Error())
} else {
assert.NoError(t, err)
assert.Equal(t, pwd, test.password)
}
})`
$DIR/core/utils/password_test.go: `_, err = pwdFile.WriteString(test.password)`
$DIR/core/utils/password_test.go: `.New("password is less than 16 characters long")`
$DIR/core/utils/password_test.go: `.New("password may not contain: \"bad\"")`
$DIR/core/utils/password_test.go: `.New("password may not contain: \"bad\"")`
$DIR/core/utils/password_test.go: `.Run(test.password, func(t *testing.T) {
t.Parallel()
var disallowedStrings []string
if test.mustNotcontain != "" {
disallowedStrings = []string{test.mustNotcontain}
}
err := utils.VerifyPasswordComplexity(test.password, disallowedStrings...)
if len(test.errors) == 0 {
assert.NoError(t, err)
} else {
assert.Error(t, err)
assert.ErrorContains(t, err, utils.ErrMsgHeader)
for _, subErr := range test.errors {
assert.ErrorContains(t, err, subErr.Error())
}
}
})`
$DIR/core/utils/password_test.go: `.VerifyPasswordComplexity(test.password, disallowedStrings...)`
$DIR/core/utils/password_test.go: `.Run(test.password, func(t *testing.T) {
t.Parallel()
pwdFile, err := os.CreateTemp("", "")
assert.NoError(t, err)
defer os.Remove(pwdFile.Name())
_, err = pwdFile.WriteString(test.password)
assert.NoError(t, err)
pwd, err := utils.PasswordFromFile(pwdFile.Name())
if test.err != nil {
assert.Error(t, err)
assert.ErrorContains(t, err, test.err.Error())
} else {
assert.NoError(t, err)
assert.Equal(t, pwd, test.password)
}
})`
$DIR/core/utils/password_test.go: `.CreateTemp("", "")`
$DIR/core/utils/password_test.go: `.Remove(pwdFile.Name())`
$DIR/core/utils/password_test.go: `.Name()`
$DIR/core/utils/password_test.go: `.WriteString(test.password)`
$DIR/core/utils/password_test.go: `.PasswordFromFile(pwdFile.Name())`
$DIR/core/utils/password_test.go: `.Name()`
$DIR/core/utils/plainhex_test.go: `.Unmarshal([]byte(test.input), &v)`
$DIR/core/utils/plainhex_test.go: `.Equal(test.want.([]byte), v)`
$DIR/core/utils/plainhex_test.go: `.Marshal(PlainHexBytes(in))`
$DIR/core/utils/plainhex_test.go: `.String()`
$DIR/core/utils/thread_control_test.go: `tc.Go(func(ctx context.Context) {
<-ctx.Done()
finished.Add(1)
})`
$DIR/core/utils/thread_control_test.go: `<-ctx.Done()`
$DIR/core/utils/thread_control_test.go: `finished.Add(1)`
$DIR/core/utils/thread_control_test.go: `wg.Add(1)`
$DIR/core/utils/thread_control_test.go: `tc.GoCtx(ctx, func(c context.Context) {
defer wg.Done()
<-c.Done()
finished.Add(1)
})`
$DIR/core/utils/thread_control_test.go: `<-c.Done()`
$DIR/core/utils/thread_control_test.go: `finished.Add(1)`
$DIR/core/utils/thread_control_test.go: `wg.Wait()`
$DIR/core/utils/thread_control_test.go: `.Go(func(ctx context.Context) {
<-ctx.Done()
finished.Add(1)
})`
$DIR/core/utils/thread_control_test.go: `.Done()`
$DIR/core/utils/thread_control_test.go: `.Add(1)`
$DIR/core/utils/thread_control_test.go: `.Load()`
$DIR/core/utils/thread_control_test.go: `.WithTimeout(context.Background(), timeout)`
$DIR/core/utils/thread_control_test.go: `.Background()`
$DIR/core/utils/thread_control_test.go: `.Add(1)`
$DIR/core/utils/thread_control_test.go: `.GoCtx(ctx, func(c context.Context) {
defer wg.Done()
<-c.Done()
finished.Add(1)
})`
$DIR/core/utils/thread_control_test.go: `.Done()`
$DIR/core/utils/thread_control_test.go: `.Done()`
$DIR/core/utils/thread_control_test.go: `.Add(1)`
$DIR/core/utils/thread_control_test.go: `.Now()`
$DIR/core/utils/thread_control_test.go: `.Wait()`
$DIR/core/utils/thread_control_test.go: `.Since(start)`
$DIR/core/utils/thread_control_test.go: `.Load()`
$DIR/core/utils/tomlutils/toml_test.go: `.UnmarshalText([]byte("0.23"))`
$DIR/core/utils/tomlutils/toml_test.go: `.UnmarshalText([]byte("13"))`
$DIR/core/utils/tomlutils/toml_test.go: `.UnmarshalText([]byte("1s"))`
$DIR/core/utils/tomlutils/toml_test.go: `.UnmarshalText([]byte("2.82"))`
$DIR/core/utils/tomlutils/toml_test.go: `.UnmarshalText([]byte("3"))`
$DIR/core/utils/tomlutils/toml_test.go: `.UnmarshalText([]byte("1s"))`
$DIR/core/utils/utils_test.go: `t.Run(fmt.Sprintf("%d_%d", test.numOfBytes, test.wantStrLen), func(t *testing.T) {
t.Parallel()
secret := utils.NewSecret(test.numOfBytes)
assert.Equal(t, test.wantStrLen, len(secret))
})`
$DIR/core/utils/utils_test.go: `t.Run(test.utf8, func(t *testing.T) {
t.Parallel()
assert.Equal(t, test.hex, utils.StringToHex(test.utf8))
})`
$DIR/core/utils/utils_test.go: `q.Add(1)`
$DIR/core/utils/utils_test.go: `q.Add(1)`
$DIR/core/utils/utils_test.go: `q.Add(2)`
$DIR/core/utils/utils_test.go: `q.Add(3)`
$DIR/core/utils/utils_test.go: `q.Add(4)`
$DIR/core/utils/utils_test.go: `x = q.Take()`
$DIR/core/utils/utils_test.go: `x = q.Take()`
$DIR/core/utils/utils_test.go: `x = q.Take()`
$DIR/core/utils/utils_test.go: `q.Add(1, 1)`
$DIR/core/utils/utils_test.go: `q.Add(2, 1)`
$DIR/core/utils/utils_test.go: `q.Add(1, 2)`
$DIR/core/utils/utils_test.go: `q.Add(1, 3)`
$DIR/core/utils/utils_test.go: `q.Add(1, 4)`
$DIR/core/utils/utils_test.go: `x = q.Take()`
$DIR/core/utils/utils_test.go: `x = q.Take()`
$DIR/core/utils/utils_test.go: `x = q.Take()`
$DIR/core/utils/utils_test.go: `x = q.Take()`
$DIR/core/utils/utils_test.go: `q.Add(2, 1)`
$DIR/core/utils/utils_test.go: `q.Add(2, 2)`
$DIR/core/utils/utils_test.go: `x = q.Take()`
$DIR/core/utils/utils_test.go: `b[10] = 1`
$DIR/core/utils/utils_test.go: `ok = utils.CheckPasswordHash("God", h)`
$DIR/core/utils/utils_test.go: `expected["foo"] = 123.45`
$DIR/core/utils/utils_test.go: `utils.MustUnmarshalToMap("123")`
$DIR/core/utils/utils_test.go: `t.Run("closing channel", func(t *testing.T) {
t.Parallel()
ch := make(chan struct{})
ctx, cancel := utils.WithCloseChan(testutils.Context(t), ch)
defer cancel()
close(ch)
assertCtxCancelled(ctx, t)
})`
$DIR/core/utils/utils_test.go: `close(ch)`
$DIR/core/utils/utils_test.go: `assertCtxCancelled(ctx, t)`
$DIR/core/utils/utils_test.go: `t.Run("cancelling ctx", func(t *testing.T) {
t.Parallel()
ch := make(chan struct{})
defer close(ch)
ctx, cancel := utils.WithCloseChan(testutils.Context(t), ch)
cancel()
assertCtxCancelled(ctx, t)
})`
$DIR/core/utils/utils_test.go: `cancel()`
$DIR/core/utils/utils_test.go: `assertCtxCancelled(ctx, t)`
$DIR/core/utils/utils_test.go: `pcancel()`
$DIR/core/utils/utils_test.go: `assertCtxCancelled(ctx, t)`
$DIR/core/utils/utils_test.go: `close(ch)`
$DIR/core/utils/utils_test.go: `t.Run("small deadline", func(t *testing.T) {
t.Parallel()
ch := make(chan struct{})
ctx, cancel := utils.ContextFromChanWithTimeout(ch, testutils.TestInterval)
defer cancel()
assertCtxCancelled(ctx, t)
})`
$DIR/core/utils/utils_test.go: `assertCtxCancelled(ctx, t)`
$DIR/core/utils/utils_test.go: `ch <- struct{}{}`
$DIR/core/utils/utils_test.go: `assertCtxCancelled(ctx, t)`
$DIR/core/utils/utils_test.go: `km.LockInt64(1)()`
$DIR/core/utils/utils_test.go: `km.LockInt64(2)()`
$DIR/core/utils/utils_test.go: `awaiter.ItHappened()`
$DIR/core/utils/utils_test.go: `unlock2()`
$DIR/core/utils/utils_test.go: `unlock1()`
$DIR/core/utils/utils_test.go: `err = utils.ValidateCronSchedule("CRON_TZ=UTC 5 * * * *")`
$DIR/core/utils/utils_test.go: `err = utils.ValidateCronSchedule("@every 1h30m")`
$DIR/core/utils/utils_test.go: `err = utils.ValidateCronSchedule("@every xyz")`
$DIR/core/utils/utils_test.go: `awaiter.ItHappened()`
$DIR/core/utils/utils_test.go: `pt.Resume()`
$DIR/core/utils/utils_test.go: `go followNTicks(10, wait10)`
$DIR/core/utils/utils_test.go: `wait10.AwaitOrFail(t)`
$DIR/core/utils/utils_test.go: `pt.Pause()`
$DIR/core/utils/utils_test.go: `time.Sleep(10 * testutils.TestInterval)`
$DIR/core/utils/utils_test.go: `pt.Resume()`
$DIR/core/utils/utils_test.go: `go followNTicks(20, wait20)`
$DIR/core/utils/utils_test.go: `awaiter.ItHappened()`
$DIR/core/utils/utils_test.go: `awaiter.AwaitOrFail(t)`
$DIR/core/utils/utils_test.go: `time.Sleep(1 * time.Second)`
$DIR/core/utils/utils_test.go: `t.Run("happy path", func(t *testing.T) {
t.Parallel()
buff := utils.ErrorBuffer{}
buff.Append(err1)
buff.Append(err2)
combined := buff.Flush()
errs := utils.UnwrapError(combined)
assert.Equal(t, 2, len(errs))
assert.Equal(t, err1.Error(), errs[0].Error())
assert.Equal(t, err2.Error(), errs[1].Error())
})`
$DIR/core/utils/utils_test.go: `buff.Append(err1)`
$DIR/core/utils/utils_test.go: `buff.Append(err2)`
$DIR/core/utils/utils_test.go: `t.Run("ovewrite oldest error when cap exceeded", func(t *testing.T) {
t.Parallel()
buff := utils.ErrorBuffer{}
buff.SetCap(2)
buff.Append(err1)
buff.Append(err2)
buff.Append(err3)
combined := buff.Flush()
errs := utils.UnwrapError(combined)
assert.Equal(t, 2, len(errs))
assert.Equal(t, err2.Error(), errs[0].Error())
assert.Equal(t, err3.Error(), errs[1].Error())
})`
$DIR/core/utils/utils_test.go: `buff.SetCap(2)`
$DIR/core/utils/utils_test.go: `buff.Append(err1)`
$DIR/core/utils/utils_test.go: `buff.Append(err2)`
$DIR/core/utils/utils_test.go: `buff.Append(err3)`
$DIR/core/utils/utils_test.go: `t.Run("does not overwrite the buffer if cap == 0", func(t *testing.T) {
t.Parallel()
buff := utils.ErrorBuffer{}
for i := 1; i <= 20; i++ {
buff.Append(errors.Errorf("err#%d", i))
}
combined := buff.Flush()
errs := utils.UnwrapError(combined)
assert.Equal(t, 20, len(errs))
assert.Equal(t, "err#20", errs[19].Error())
})`
$DIR/core/utils/utils_test.go: `buff.Append(errors.Errorf("err#%d", i))`
$DIR/core/utils/utils_test.go: `t.Run("UnwrapError returns the a single element err array if passed err is not a joinedError", func(t *testing.T) {
t.Parallel()
errs := utils.UnwrapError(err1)
assert.Equal(t, 1, len(errs))
assert.Equal(t, err1.Error(), errs[0].Error())
})`
$DIR/core/utils/utils_test.go: `.NewBytes32ID()`
$DIR/core/utils/utils_test.go: `.Run(fmt.Sprintf("%d_%d", test.numOfBytes, test.wantStrLen), func(t *testing.T) {
t.Parallel()
secret := utils.NewSecret(test.numOfBytes)
assert.Equal(t, test.wantStrLen, len(secret))
})`
$DIR/core/utils/utils_test.go: `.Sprintf("%d_%d", test.numOfBytes, test.wantStrLen)`
$DIR/core/utils/utils_test.go: `.NewSecret(test.numOfBytes)`
$DIR/core/utils/utils_test.go: `.Run(test.utf8, func(t *testing.T) {
t.Parallel()
assert.Equal(t, test.hex, utils.StringToHex(test.utf8))
})`
$DIR/core/utils/utils_test.go: `.Now()`
$DIR/core/utils/utils_test.go: `.Add(time.Second)`
$DIR/core/utils/utils_test.go: `.DurationFromNow(future)`
$DIR/core/utils/utils_test.go: `.Add(1)`
$DIR/core/utils/utils_test.go: `.Take()`
$DIR/core/utils/utils_test.go: `.Add(1)`
$DIR/core/utils/utils_test.go: `.Add(2)`
$DIR/core/utils/utils_test.go: `.Add(3)`
$DIR/core/utils/utils_test.go: `.Add(4)`
$DIR/core/utils/utils_test.go: `.Take()`
$DIR/core/utils/utils_test.go: `.Take()`
$DIR/core/utils/utils_test.go: `.Take()`
$DIR/core/utils/utils_test.go: `.Full()`
$DIR/core/utils/utils_test.go: `.Add(1, 1)`
$DIR/core/utils/utils_test.go: `.Take()`
$DIR/core/utils/utils_test.go: `.Add(2, 1)`
$DIR/core/utils/utils_test.go: `.Add(1, 2)`
$DIR/core/utils/utils_test.go: `.Add(1, 3)`
$DIR/core/utils/utils_test.go: `.Add(1, 4)`
$DIR/core/utils/utils_test.go: `.Take()`
$DIR/core/utils/utils_test.go: `.Take()`
$DIR/core/utils/utils_test.go: `.Take()`
$DIR/core/utils/utils_test.go: `.Take()`
$DIR/core/utils/utils_test.go: `.Add(2, 1)`
$DIR/core/utils/utils_test.go: `.Add(2, 2)`
$DIR/core/utils/utils_test.go: `.Take()`
$DIR/core/utils/utils_test.go: `.Take()`
$DIR/core/utils/utils_test.go: `.WithJitter(d)`
$DIR/core/utils/utils_test.go: `.IsEmpty(b)`
$DIR/core/utils/utils_test.go: `.HashPassword("Qwerty123!")`
$DIR/core/utils/utils_test.go: `.CheckPasswordHash("Qwerty123!", h)`
$DIR/core/utils/utils_test.go: `.CheckPasswordHash("God", h)`
$DIR/core/utils/utils_test.go: `.BoxOutput("some error %d %s", 123, "foo")`
$DIR/core/utils/utils_test.go: `.Unix(1651818206, 0)`
$DIR/core/utils/utils_test.go: `.ISO8601UTC(ts)`
$DIR/core/utils/utils_test.go: `.FormatJSON(json)`
$DIR/core/utils/utils_test.go: `.MustUnmarshalToMap(json)`
$DIR/core/utils/utils_test.go: `.MustUnmarshalToMap("123")`
$DIR/core/utils/utils_test.go: `.Sha256("test")`
$DIR/core/utils/utils_test.go: `.DecodeString(hexHash)`
$DIR/core/utils/utils_test.go: `.Done()`
$DIR/core/utils/utils_test.go: `.After(testutils.WaitTimeout(t))`
$DIR/core/utils/utils_test.go: `.WaitTimeout(t)`
$DIR/core/utils/utils_test.go: `.Run("closing channel", func(t *testing.T) {
t.Parallel()
ch := make(chan struct{})
ctx, cancel := utils.WithCloseChan(testutils.Context(t), ch)
defer cancel()
close(ch)
assertCtxCancelled(ctx, t)
})`
$DIR/core/utils/utils_test.go: `.WithCloseChan(testutils.Context(t), ch)`
$DIR/core/utils/utils_test.go: `.Context(t)`
$DIR/core/utils/utils_test.go: `.Run("cancelling ctx", func(t *testing.T) {
t.Parallel()
ch := make(chan struct{})
defer close(ch)
ctx, cancel := utils.WithCloseChan(testutils.Context(t), ch)
cancel()
assertCtxCancelled(ctx, t)
})`
$DIR/core/utils/utils_test.go: `.WithCloseChan(testutils.Context(t), ch)`
$DIR/core/utils/utils_test.go: `.Context(t)`
$DIR/core/utils/utils_test.go: `.WithCancel(testutils.Context(t))`
$DIR/core/utils/utils_test.go: `.Context(t)`
$DIR/core/utils/utils_test.go: `.WithCloseChan(pctx, ch)`
$DIR/core/utils/utils_test.go: `.ContextFromChan(ch)`
$DIR/core/utils/utils_test.go: `.Done()`
$DIR/core/utils/utils_test.go: `.After(testutils.WaitTimeout(t))`
$DIR/core/utils/utils_test.go: `.WaitTimeout(t)`
$DIR/core/utils/utils_test.go: `.Done()`
$DIR/core/utils/utils_test.go: `.After(testutils.WaitTimeout(t))`
$DIR/core/utils/utils_test.go: `.WaitTimeout(t)`
$DIR/core/utils/utils_test.go: `.Run("small deadline", func(t *testing.T) {
t.Parallel()
ch := make(chan struct{})
ctx, cancel := utils.ContextFromChanWithTimeout(ch, testutils.TestInterval)
defer cancel()
assertCtxCancelled(ctx, t)
})`
$DIR/core/utils/utils_test.go: `.ContextFromChanWithTimeout(ch, testutils.TestInterval)`
$DIR/core/utils/utils_test.go: `.ContextFromChanWithTimeout(ch, testutils.WaitTimeout(t))`
$DIR/core/utils/utils_test.go: `.WaitTimeout(t)`
$DIR/core/utils/utils_test.go: `.LeftPadBitString(test.str, test.len)`
$DIR/core/utils/utils_test.go: `.LockInt64(1)`
$DIR/core/utils/utils_test.go: `.LockInt64(2)`
$DIR/core/utils/utils_test.go: `.NewAwaiter()`
$DIR/core/utils/utils_test.go: `.LockInt64(1)`
$DIR/core/utils/utils_test.go: `.LockInt64(2)`
$DIR/core/utils/utils_test.go: `.ItHappened()`
$DIR/core/utils/utils_test.go: `.ValidateCronSchedule("")`
$DIR/core/utils/utils_test.go: `.ValidateCronSchedule("CRON_TZ=UTC 5 * * * *")`
$DIR/core/utils/utils_test.go: `.ValidateCronSchedule("@every 1h30m")`
$DIR/core/utils/utils_test.go: `.ValidateCronSchedule("@every xyz")`
$DIR/core/utils/utils_test.go: `.NewPausableTicker(testutils.TestInterval)`
$DIR/core/utils/utils_test.go: `.Destroy()`
$DIR/core/utils/utils_test.go: `.Ticks()`
$DIR/core/utils/utils_test.go: `.Add(1)`
$DIR/core/utils/utils_test.go: `.ItHappened()`
$DIR/core/utils/utils_test.go: `.Resume()`
$DIR/core/utils/utils_test.go: `.NewAwaiter()`
$DIR/core/utils/utils_test.go: `.AwaitOrFail(t)`
$DIR/core/utils/utils_test.go: `.Pause()`
$DIR/core/utils/utils_test.go: `.Sleep(10 * testutils.TestInterval)`
$DIR/core/utils/utils_test.go: `.Resume()`
$DIR/core/utils/utils_test.go: `.NewAwaiter()`
$DIR/core/utils/utils_test.go: `.NewCronTicker("@every 100ms")`
$DIR/core/utils/utils_test.go: `.NewAwaiter()`
$DIR/core/utils/utils_test.go: `.Ticks()`
$DIR/core/utils/utils_test.go: `.Add(1)`
$DIR/core/utils/utils_test.go: `.ItHappened()`
$DIR/core/utils/utils_test.go: `.AwaitOrFail(t)`
$DIR/core/utils/utils_test.go: `.Load()`
$DIR/core/utils/utils_test.go: `.Sleep(1 * time.Second)`
$DIR/core/utils/utils_test.go: `.Load()`
$DIR/core/utils/utils_test.go: `.New("err1")`
$DIR/core/utils/utils_test.go: `.New("err2")`
$DIR/core/utils/utils_test.go: `.New("err3")`
$DIR/core/utils/utils_test.go: `.Run("happy path", func(t *testing.T) {
t.Parallel()
buff := utils.ErrorBuffer{}
buff.Append(err1)
buff.Append(err2)
combined := buff.Flush()
errs := utils.UnwrapError(combined)
assert.Equal(t, 2, len(errs))
assert.Equal(t, err1.Error(), errs[0].Error())
assert.Equal(t, err2.Error(), errs[1].Error())
})`
$DIR/core/utils/utils_test.go: `.Append(err1)`
$DIR/core/utils/utils_test.go: `.Append(err2)`
$DIR/core/utils/utils_test.go: `.Flush()`
$DIR/core/utils/utils_test.go: `.UnwrapError(combined)`
$DIR/core/utils/utils_test.go: `.Run("ovewrite oldest error when cap exceeded", func(t *testing.T) {
t.Parallel()
buff := utils.ErrorBuffer{}
buff.SetCap(2)
buff.Append(err1)
buff.Append(err2)
buff.Append(err3)
combined := buff.Flush()
errs := utils.UnwrapError(combined)
assert.Equal(t, 2, len(errs))
assert.Equal(t, err2.Error(), errs[0].Error())
assert.Equal(t, err3.Error(), errs[1].Error())
})`
$DIR/core/utils/utils_test.go: `.SetCap(2)`
$DIR/core/utils/utils_test.go: `.Append(err1)`
$DIR/core/utils/utils_test.go: `.Append(err2)`
$DIR/core/utils/utils_test.go: `.Append(err3)`
$DIR/core/utils/utils_test.go: `.Flush()`
$DIR/core/utils/utils_test.go: `.UnwrapError(combined)`
$DIR/core/utils/utils_test.go: `.Run("does not overwrite the buffer if cap == 0", func(t *testing.T) {
t.Parallel()
buff := utils.ErrorBuffer{}
for i := 1; i <= 20; i++ {
buff.Append(errors.Errorf("err#%d", i))
}
combined := buff.Flush()
errs := utils.UnwrapError(combined)
assert.Equal(t, 20, len(errs))
assert.Equal(t, "err#20", errs[19].Error())
})`
$DIR/core/utils/utils_test.go: `.Append(errors.Errorf("err#%d", i))`
$DIR/core/utils/utils_test.go: `.Flush()`
$DIR/core/utils/utils_test.go: `.UnwrapError(combined)`
$DIR/core/utils/utils_test.go: `.Run("UnwrapError returns the a single element err array if passed err is not a joinedError", func(t *testing.T) {
t.Parallel()
errs := utils.UnwrapError(err1)
assert.Equal(t, 1, len(errs))
assert.Equal(t, err1.Error(), errs[0].Error())
})`
$DIR/core/utils/utils_test.go: `.UnwrapError(err1)`
$DIR/core/utils/utils_test.go: `.Flush()`
$DIR/core/web/api_test.go: `t.Run(test.name, func(t *testing.T) {
size, page, offset, err := ParsePaginatedRequest(test.sizeParam, test.pageParam)
if test.err {
assert.Error(t, err)
} else {
assert.NoError(t, err)
}
assert.Equal(t, test.size, size)
assert.Equal(t, test.page, page)
assert.Equal(t, test.offset, offset)
})`
$DIR/core/web/api_test.go: `t.Run(test.name, func(t *testing.T) {
url, err := url.Parse(test.path)
assert.NoError(t, err)
buffer, err := NewPaginatedResponse(*url, test.size, test.page, test.count, test.resource)
if test.err {
assert.Error(t, err)
} else {
assert.NoError(t, err)
}
assert.Equal(t, test.output, string(buffer))
})`
$DIR/core/web/api_test.go: `err = ParsePaginatedResponse([]byte(`{"data":[{"type":"testNotResources","id":"1","attributes":{}}]}`), &docs, &links)`
$DIR/core/web/api_test.go: `err = ParsePaginatedResponse([]byte(`{"links":[],"data":[{"type":"testResources","id":"1","attributes":{}}]}`), &docs, &links)`
$DIR/core/web/api_test.go: `buffer, err = NewJSONAPIResponse(&r)`
$DIR/core/web/api_test.go: `.Run(test.name, func(t *testing.T) {
size, page, offset, err := ParsePaginatedRequest(test.sizeParam, test.pageParam)
if test.err {
assert.Error(t, err)
} else {
assert.NoError(t, err)
}
assert.Equal(t, test.size, size)
assert.Equal(t, test.page, page)
assert.Equal(t, test.offset, offset)
})`
$DIR/core/web/api_test.go: `.Run(test.name, func(t *testing.T) {
url, err := url.Parse(test.path)
assert.NoError(t, err)
buffer, err := NewPaginatedResponse(*url, test.size, test.page, test.count, test.resource)
if test.err {
assert.Error(t, err)
} else {
assert.NoError(t, err)
}
assert.Equal(t, test.output, string(buffer))
})`
$DIR/core/web/api_test.go: `.Parse(test.path)`
$DIR/core/web/auth/auth_test.go: `router.Use(webauth.Authenticate(authr, webauth.AuthenticateByToken))`
$DIR/core/web/auth/auth_test.go: `router.GET("/", func(c *gin.Context) {
called = true
c.String(http.StatusOK, "")
})`
$DIR/core/web/auth/auth_test.go: `called = true`
$DIR/core/web/auth/auth_test.go: `c.String(http.StatusOK, "")`
$DIR/core/web/auth/auth_test.go: `req.Header.Set(webauth.APIKey, key)`
$DIR/core/web/auth/auth_test.go: `req.Header.Set(webauth.APISecret, secret)`
$DIR/core/web/auth/auth_test.go: `router.ServeHTTP(w, req)`
$DIR/core/web/auth/auth_test.go: `router.Use(webauth.Authenticate(authr, webauth.AuthenticateByToken))`
$DIR/core/web/auth/auth_test.go: `router.GET("/", func(c *gin.Context) {
called = true
c.String(http.StatusOK, "")
})`
$DIR/core/web/auth/auth_test.go: `called = true`
$DIR/core/web/auth/auth_test.go: `c.String(http.StatusOK, "")`
$DIR/core/web/auth/auth_test.go: `req.Header.Set(webauth.APIKey, "bad-key")`
$DIR/core/web/auth/auth_test.go: `req.Header.Set(webauth.APISecret, "bad-secret")`
$DIR/core/web/auth/auth_test.go: `router.ServeHTTP(w, req)`
$DIR/core/web/auth/auth_test.go: `router.Use(webauth.Authenticate(authr, webauth.AuthenticateByToken))`
$DIR/core/web/auth/auth_test.go: `router.GET("/", func(c *gin.Context) {
called = true
c.String(http.StatusOK, "")
})`
$DIR/core/web/auth/auth_test.go: `called = true`
$DIR/core/web/auth/auth_test.go: `c.String(http.StatusOK, "")`
$DIR/core/web/auth/auth_test.go: `req.Header.Set(webauth.APIKey, key)`
$DIR/core/web/auth/auth_test.go: `req.Header.Set(webauth.APISecret, secret)`
$DIR/core/web/auth/auth_test.go: `router.ServeHTTP(w, req)`
$DIR/core/web/auth/auth_test.go: `router.Use(webauth.Authenticate(authr))`
$DIR/core/web/auth/auth_test.go: `router.GET("/", func(c *gin.Context) {
called = true
c.String(http.StatusOK, "")
})`
$DIR/core/web/auth/auth_test.go: `called = true`
$DIR/core/web/auth/auth_test.go: `c.String(http.StatusOK, "")`
$DIR/core/web/auth/auth_test.go: `router.ServeHTTP(w, req)`
$DIR/core/web/auth/auth_test.go: `router.Use(webauth.Authenticate(authr, authFailure))`
$DIR/core/web/auth/auth_test.go: `router.GET("/", func(c *gin.Context) {
called = true
c.String(http.StatusOK, "")
})`
$DIR/core/web/auth/auth_test.go: `called = true`
$DIR/core/web/auth/auth_test.go: `c.String(http.StatusOK, "")`
$DIR/core/web/auth/auth_test.go: `router.ServeHTTP(w, req)`
$DIR/core/web/auth/auth_test.go: `router.Use(webauth.Authenticate(authr, authFailure, authSuccess))`
$DIR/core/web/auth/auth_test.go: `router.GET("/", func(c *gin.Context) {
called = true
c.String(http.StatusOK, "")
})`
$DIR/core/web/auth/auth_test.go: `called = true`
$DIR/core/web/auth/auth_test.go: `c.String(http.StatusOK, "")`
$DIR/core/web/auth/auth_test.go: `router.ServeHTTP(w, req)`
$DIR/core/web/auth/auth_test.go: `router.Use(webauth.Authenticate(authr, authError, authSuccess))`
$DIR/core/web/auth/auth_test.go: `router.GET("/", func(c *gin.Context) {
called = true
c.String(http.StatusOK, "")
})`
$DIR/core/web/auth/auth_test.go: `called = true`
$DIR/core/web/auth/auth_test.go: `c.String(http.StatusOK, "")`
$DIR/core/web/auth/auth_test.go: `router.ServeHTTP(w, req)`
$DIR/core/web/auth/auth_test.go: `func() {
var resp *http.Response
var cleanup func()
switch route.verb {
case "GET":
resp, cleanup = client.Get(route.path)
case "POST":
resp, cleanup = client.Post(route.path, nil)
case "DELETE":
resp, cleanup = client.Delete(route.path)
case "PATCH":
resp, cleanup = client.Patch(route.path, nil)
case "PUT":
resp, cleanup = client.Put(route.path, nil)
default:
t.Fatalf("Unknown HTTP verb %s\n", route.verb)
}
defer cleanup()
assert.NotEqual(t, http.StatusUnauthorized, resp.StatusCode)
assert.NotEqual(t, http.StatusForbidden, resp.StatusCode)
}()`
$DIR/core/web/auth/auth_test.go: `resp, cleanup = client.Get(route.path)`
$DIR/core/web/auth/auth_test.go: `resp, cleanup = client.Post(route.path, nil)`
$DIR/core/web/auth/auth_test.go: `resp, cleanup = client.Delete(route.path)`
$DIR/core/web/auth/auth_test.go: `resp, cleanup = client.Patch(route.path, nil)`
$DIR/core/web/auth/auth_test.go: `resp, cleanup = client.Put(route.path, nil)`
$DIR/core/web/auth/auth_test.go: `func() {
var resp *http.Response
var cleanup func()
switch route.verb {
case "GET":
resp, cleanup = client.Get(route.path)
case "POST":
resp, cleanup = client.Post(route.path, nil)
case "DELETE":
resp, cleanup = client.Delete(route.path)
case "PATCH":
resp, cleanup = client.Patch(route.path, nil)
case "PUT":
resp, cleanup = client.Put(route.path, nil)
default:
t.Fatalf("Unknown HTTP verb %s\n", route.verb)
}
defer cleanup()
// If this route allows up to an edit role, don't expect an unauthorized response
if route.EditAllowed || route.editMinimalAllowed || route.viewOnlyAllowed {
assert.NotEqual(t, http.StatusUnauthorized, resp.StatusCode)
assert.NotEqual(t, http.StatusForbidden, resp.StatusCode)
} else if !route.EditAllowed {
assert.Equal(t, http.StatusForbidden, resp.StatusCode)
} else {
assert.Equal(t, http.StatusUnauthorized, resp.StatusCode)
}
}()`
$DIR/core/web/auth/auth_test.go: `resp, cleanup = client.Get(route.path)`
$DIR/core/web/auth/auth_test.go: `resp, cleanup = client.Post(route.path, nil)`
$DIR/core/web/auth/auth_test.go: `resp, cleanup = client.Delete(route.path)`
$DIR/core/web/auth/auth_test.go: `resp, cleanup = client.Patch(route.path, nil)`
$DIR/core/web/auth/auth_test.go: `resp, cleanup = client.Put(route.path, nil)`
$DIR/core/web/auth/auth_test.go: `func() {
var resp *http.Response
var cleanup func()
switch route.verb {
case "GET":
resp, cleanup = client.Get(route.path)
case "POST":
resp, cleanup = client.Post(route.path, nil)
case "DELETE":
resp, cleanup = client.Delete(route.path)
case "PATCH":
resp, cleanup = client.Patch(route.path, nil)
case "PUT":
resp, cleanup = client.Put(route.path, nil)
default:
t.Fatalf("Unknown HTTP verb %s\n", route.verb)
}
defer cleanup()
// If this route allows up to an edit minimal role, don't expect an unauthorized response
if route.editMinimalAllowed || route.viewOnlyAllowed {
assert.NotEqual(t, http.StatusUnauthorized, resp.StatusCode)
assert.NotEqual(t, http.StatusForbidden, resp.StatusCode)
} else if !route.EditAllowed {
assert.Equal(t, http.StatusForbidden, resp.StatusCode)
} else {
assert.Equal(t, http.StatusUnauthorized, resp.StatusCode)
}
}()`
$DIR/core/web/auth/auth_test.go: `resp, cleanup = client.Get(route.path)`
$DIR/core/web/auth/auth_test.go: `resp, cleanup = client.Post(route.path, nil)`
$DIR/core/web/auth/auth_test.go: `resp, cleanup = client.Delete(route.path)`
$DIR/core/web/auth/auth_test.go: `resp, cleanup = client.Patch(route.path, nil)`
$DIR/core/web/auth/auth_test.go: `resp, cleanup = client.Put(route.path, nil)`
$DIR/core/web/auth/auth_test.go: `t.Run(fmt.Sprintf("%d-%s-%s", i, route.verb, route.path), func(t *testing.T) {
var resp *http.Response
var cleanup func()
switch route.verb {
case "GET":
resp, cleanup = client.Get(route.path)
case "POST":
resp, cleanup = client.Post(route.path, nil)
case "DELETE":
resp, cleanup = client.Delete(route.path)
case "PATCH":
resp, cleanup = client.Patch(route.path, nil)
case "PUT":
resp, cleanup = client.Put(route.path, nil)
default:
t.Fatalf("Unknown HTTP verb %s\n", route.verb)
}
defer cleanup()
// If this route only allows view only, don't expect an unauthorized response
if route.viewOnlyAllowed {
assert.NotEqual(t, http.StatusUnauthorized, resp.StatusCode)
assert.NotEqual(t, http.StatusForbidden, resp.StatusCode)
} else if !route.EditAllowed {
assert.Equal(t, http.StatusForbidden, resp.StatusCode)
} else {
assert.Equal(t, http.StatusUnauthorized, resp.StatusCode)
}
})`
$DIR/core/web/auth/auth_test.go: `resp, cleanup = client.Get(route.path)`
$DIR/core/web/auth/auth_test.go: `resp, cleanup = client.Post(route.path, nil)`
$DIR/core/web/auth/auth_test.go: `resp, cleanup = client.Delete(route.path)`
$DIR/core/web/auth/auth_test.go: `resp, cleanup = client.Patch(route.path, nil)`
$DIR/core/web/auth/auth_test.go: `resp, cleanup = client.Put(route.path, nil)`
$DIR/core/web/auth/auth_test.go: `.MustRandomUser(t)`
$DIR/core/web/auth/auth_test.go: `.New()`
$DIR/core/web/auth/auth_test.go: `.String()`
$DIR/core/web/auth/auth_test.go: `.New()`
$DIR/core/web/auth/auth_test.go: `.String()`
$DIR/core/web/auth/auth_test.go: `.SetAuthToken(&apiToken)`
$DIR/core/web/auth/auth_test.go: `.New()`
$DIR/core/web/auth/auth_test.go: `.Use(webauth.Authenticate(authr, webauth.AuthenticateByToken))`
$DIR/core/web/auth/auth_test.go: `.Authenticate(authr, webauth.AuthenticateByToken)`
$DIR/core/web/auth/auth_test.go: `.GET("/", func(c *gin.Context) {
called = true
c.String(http.StatusOK, "")
})`
$DIR/core/web/auth/auth_test.go: `.String(http.StatusOK, "")`
$DIR/core/web/auth/auth_test.go: `.NewRecorder()`
$DIR/core/web/auth/auth_test.go: `.Header.Set(webauth.APIKey, key)`
$DIR/core/web/auth/auth_test.go: `.Header.Set(webauth.APISecret, secret)`
$DIR/core/web/auth/auth_test.go: `.ServeHTTP(w, req)`
$DIR/core/web/auth/auth_test.go: `.StatusText(http.StatusOK)`
$DIR/core/web/auth/auth_test.go: `.StatusText(w.Code)`
$DIR/core/web/auth/auth_test.go: `.New()`
$DIR/core/web/auth/auth_test.go: `.Use(webauth.Authenticate(authr, webauth.AuthenticateByToken))`
$DIR/core/web/auth/auth_test.go: `.Authenticate(authr, webauth.AuthenticateByToken)`
$DIR/core/web/auth/auth_test.go: `.GET("/", func(c *gin.Context) {
called = true
c.String(http.StatusOK, "")
})`
$DIR/core/web/auth/auth_test.go: `.String(http.StatusOK, "")`
$DIR/core/web/auth/auth_test.go: `.NewRecorder()`
$DIR/core/web/auth/auth_test.go: `.Header.Set(webauth.APIKey, "bad-key")`
$DIR/core/web/auth/auth_test.go: `.Header.Set(webauth.APISecret, "bad-secret")`
$DIR/core/web/auth/auth_test.go: `.ServeHTTP(w, req)`
$DIR/core/web/auth/auth_test.go: `.StatusText(http.StatusUnauthorized)`
$DIR/core/web/auth/auth_test.go: `.StatusText(w.Code)`
$DIR/core/web/auth/auth_test.go: `.MustRandomUser(t)`
$DIR/core/web/auth/auth_test.go: `.New()`
$DIR/core/web/auth/auth_test.go: `.String()`
$DIR/core/web/auth/auth_test.go: `.SetAuthToken(&apiToken)`
$DIR/core/web/auth/auth_test.go: `.New()`
$DIR/core/web/auth/auth_test.go: `.Use(webauth.Authenticate(authr, webauth.AuthenticateByToken))`
$DIR/core/web/auth/auth_test.go: `.Authenticate(authr, webauth.AuthenticateByToken)`
$DIR/core/web/auth/auth_test.go: `.GET("/", func(c *gin.Context) {
called = true
c.String(http.StatusOK, "")
})`
$DIR/core/web/auth/auth_test.go: `.String(http.StatusOK, "")`
$DIR/core/web/auth/auth_test.go: `.NewRecorder()`
$DIR/core/web/auth/auth_test.go: `.Header.Set(webauth.APIKey, key)`
$DIR/core/web/auth/auth_test.go: `.Header.Set(webauth.APISecret, secret)`
$DIR/core/web/auth/auth_test.go: `.ServeHTTP(w, req)`
$DIR/core/web/auth/auth_test.go: `.StatusText(http.StatusUnauthorized)`
$DIR/core/web/auth/auth_test.go: `.StatusText(w.Code)`
$DIR/core/web/auth/auth_test.go: `.New()`
$DIR/core/web/auth/auth_test.go: `.Use(webauth.Authenticate(authr))`
$DIR/core/web/auth/auth_test.go: `.Authenticate(authr)`
$DIR/core/web/auth/auth_test.go: `.GET("/", func(c *gin.Context) {
called = true
c.String(http.StatusOK, "")
})`
$DIR/core/web/auth/auth_test.go: `.String(http.StatusOK, "")`
$DIR/core/web/auth/auth_test.go: `.NewRecorder()`
$DIR/core/web/auth/auth_test.go: `.ServeHTTP(w, req)`
$DIR/core/web/auth/auth_test.go: `.StatusText(http.StatusOK)`
$DIR/core/web/auth/auth_test.go: `.StatusText(w.Code)`
$DIR/core/web/auth/auth_test.go: `.New()`
$DIR/core/web/auth/auth_test.go: `.Use(webauth.Authenticate(authr, authFailure))`
$DIR/core/web/auth/auth_test.go: `.Authenticate(authr, authFailure)`
$DIR/core/web/auth/auth_test.go: `.GET("/", func(c *gin.Context) {
called = true
c.String(http.StatusOK, "")
})`
$DIR/core/web/auth/auth_test.go: `.String(http.StatusOK, "")`
$DIR/core/web/auth/auth_test.go: `.NewRecorder()`
$DIR/core/web/auth/auth_test.go: `.ServeHTTP(w, req)`
$DIR/core/web/auth/auth_test.go: `.StatusText(http.StatusUnauthorized)`
$DIR/core/web/auth/auth_test.go: `.StatusText(w.Code)`
$DIR/core/web/auth/auth_test.go: `.New()`
$DIR/core/web/auth/auth_test.go: `.Use(webauth.Authenticate(authr, authFailure, authSuccess))`
$DIR/core/web/auth/auth_test.go: `.Authenticate(authr, authFailure, authSuccess)`
$DIR/core/web/auth/auth_test.go: `.GET("/", func(c *gin.Context) {
called = true
c.String(http.StatusOK, "")
})`
$DIR/core/web/auth/auth_test.go: `.String(http.StatusOK, "")`
$DIR/core/web/auth/auth_test.go: `.NewRecorder()`
$DIR/core/web/auth/auth_test.go: `.ServeHTTP(w, req)`
$DIR/core/web/auth/auth_test.go: `.StatusText(http.StatusOK)`
$DIR/core/web/auth/auth_test.go: `.StatusText(w.Code)`
$DIR/core/web/auth/auth_test.go: `.New()`
$DIR/core/web/auth/auth_test.go: `.Use(webauth.Authenticate(authr, authError, authSuccess))`
$DIR/core/web/auth/auth_test.go: `.Authenticate(authr, authError, authSuccess)`
$DIR/core/web/auth/auth_test.go: `.GET("/", func(c *gin.Context) {
called = true
c.String(http.StatusOK, "")
})`
$DIR/core/web/auth/auth_test.go: `.String(http.StatusOK, "")`
$DIR/core/web/auth/auth_test.go: `.NewRecorder()`
$DIR/core/web/auth/auth_test.go: `.ServeHTTP(w, req)`
$DIR/core/web/auth/auth_test.go: `.StatusText(http.StatusUnauthorized)`
$DIR/core/web/auth/auth_test.go: `.StatusText(w.Code)`
$DIR/core/web/auth/auth_test.go: `.NewApplicationEVMDisabled(t)`
$DIR/core/web/auth/auth_test.go: `.Router(t, app, nil)`
$DIR/core/web/auth/auth_test.go: `.NewServer(router)`
$DIR/core/web/auth/auth_test.go: `.NewHTTPClient(nil)`
$DIR/core/web/auth/auth_test.go: `.Get(route.path)`
$DIR/core/web/auth/auth_test.go: `.Post(route.path, nil)`
$DIR/core/web/auth/auth_test.go: `.Delete(route.path)`
$DIR/core/web/auth/auth_test.go: `.Patch(route.path, nil)`
$DIR/core/web/auth/auth_test.go: `.Put(route.path, nil)`
$DIR/core/web/auth/auth_test.go: `.NewApplicationEVMDisabled(t)`
$DIR/core/web/auth/auth_test.go: `.Router(t, app, nil)`
$DIR/core/web/auth/auth_test.go: `.NewServer(router)`
$DIR/core/web/auth/auth_test.go: `.NewHTTPClient(u)`
$DIR/core/web/auth/auth_test.go: `.Get(route.path)`
$DIR/core/web/auth/auth_test.go: `.Post(route.path, nil)`
$DIR/core/web/auth/auth_test.go: `.Delete(route.path)`
$DIR/core/web/auth/auth_test.go: `.Patch(route.path, nil)`
$DIR/core/web/auth/auth_test.go: `.Put(route.path, nil)`
$DIR/core/web/auth/auth_test.go: `.NewApplicationEVMDisabled(t)`
$DIR/core/web/auth/auth_test.go: `.Router(t, app, nil)`
$DIR/core/web/auth/auth_test.go: `.NewServer(router)`
$DIR/core/web/auth/auth_test.go: `.NewHTTPClient(u)`
$DIR/core/web/auth/auth_test.go: `.Get(route.path)`
$DIR/core/web/auth/auth_test.go: `.Post(route.path, nil)`
$DIR/core/web/auth/auth_test.go: `.Delete(route.path)`
$DIR/core/web/auth/auth_test.go: `.Patch(route.path, nil)`
$DIR/core/web/auth/auth_test.go: `.Put(route.path, nil)`
$DIR/core/web/auth/auth_test.go: `.NewApplicationEVMDisabled(t)`
$DIR/core/web/auth/auth_test.go: `.Router(t, app, nil)`
$DIR/core/web/auth/auth_test.go: `.NewServer(router)`
$DIR/core/web/auth/auth_test.go: `.NewHTTPClient(u)`
$DIR/core/web/auth/auth_test.go: `.Run(fmt.Sprintf("%d-%s-%s", i, route.verb, route.path), func(t *testing.T) {
var resp *http.Response
var cleanup func()
switch route.verb {
case "GET":
resp, cleanup = client.Get(route.path)
case "POST":
resp, cleanup = client.Post(route.path, nil)
case "DELETE":
resp, cleanup = client.Delete(route.path)
case "PATCH":
resp, cleanup = client.Patch(route.path, nil)
case "PUT":
resp, cleanup = client.Put(route.path, nil)
default:
t.Fatalf("Unknown HTTP verb %s\n", route.verb)
}
defer cleanup()
// If this route only allows view only, don't expect an unauthorized response
if route.viewOnlyAllowed {
assert.NotEqual(t, http.StatusUnauthorized, resp.StatusCode)
assert.NotEqual(t, http.StatusForbidden, resp.StatusCode)
} else if !route.EditAllowed {
assert.Equal(t, http.StatusForbidden, resp.StatusCode)
} else {
assert.Equal(t, http.StatusUnauthorized, resp.StatusCode)
}
})`
$DIR/core/web/auth/auth_test.go: `.Sprintf("%d-%s-%s", i, route.verb, route.path)`
$DIR/core/web/auth/auth_test.go: `.Get(route.path)`
$DIR/core/web/auth/auth_test.go: `.Post(route.path, nil)`
$DIR/core/web/auth/auth_test.go: `.Delete(route.path)`
$DIR/core/web/auth/auth_test.go: `.Patch(route.path, nil)`
$DIR/core/web/auth/auth_test.go: `.Put(route.path, nil)`
$DIR/core/web/auth/gql_test.go: `r.Use(sessions.Sessions(auth.SessionName, sessionStore))`
$DIR/core/web/auth/gql_test.go: `r.Use(auth.AuthenticateGQL(sessionORM, logger.TestLogger(t)))`
$DIR/core/web/auth/gql_test.go: `r.GET("/", func(c *gin.Context) {
session, ok := auth.GetGQLAuthenticatedSession(c)
assert.False(t, ok)
assert.Nil(t, session)
c.String(http.StatusOK, "")
})`
$DIR/core/web/auth/gql_test.go: `c.String(http.StatusOK, "")`
$DIR/core/web/auth/gql_test.go: `r.Use(sessions.Sessions(auth.SessionName, sessionStore))`
$DIR/core/web/auth/gql_test.go: `r.Use(auth.AuthenticateGQL(sessionORM, logger.TestLogger(t)))`
$DIR/core/web/auth/gql_test.go: `r.GET("/", func(c *gin.Context) {
session, ok := auth.GetGQLAuthenticatedSession(c.Request.Context())
assert.True(t, ok)
assert.NotNil(t, session)
c.String(http.StatusOK, "")
})`
$DIR/core/web/auth/gql_test.go: `c.String(http.StatusOK, "")`
$DIR/core/web/auth/gql_test.go: `sessionORM.On("AuthorizedUserWithSession", mock.Anything, sessionID).Return(clsessions.User{Email: cltest.APIEmailAdmin, Role: clsessions.UserRoleAdmin}, nil)`
$DIR/core/web/auth/gql_test.go: `req.AddCookie(cookie)`
$DIR/core/web/auth/gql_test.go: `ctx = auth.WithGQLAuthenticatedSession(ctx, user, "sessionID")`
$DIR/core/web/auth/gql_test.go: `.NewAuthenticationProvider(t)`
$DIR/core/web/auth/gql_test.go: `.NewStore([]byte("secret"))`
$DIR/core/web/auth/gql_test.go: `.Default()`
$DIR/core/web/auth/gql_test.go: `.Use(sessions.Sessions(auth.SessionName, sessionStore))`
$DIR/core/web/auth/gql_test.go: `.Sessions(auth.SessionName, sessionStore)`
$DIR/core/web/auth/gql_test.go: `.Use(auth.AuthenticateGQL(sessionORM, logger.TestLogger(t)))`
$DIR/core/web/auth/gql_test.go: `.AuthenticateGQL(sessionORM, logger.TestLogger(t))`
$DIR/core/web/auth/gql_test.go: `.TestLogger(t)`
$DIR/core/web/auth/gql_test.go: `.GET("/", func(c *gin.Context) {
session, ok := auth.GetGQLAuthenticatedSession(c)
assert.False(t, ok)
assert.Nil(t, session)
c.String(http.StatusOK, "")
})`
$DIR/core/web/auth/gql_test.go: `.GetGQLAuthenticatedSession(c)`
$DIR/core/web/auth/gql_test.go: `.String(http.StatusOK, "")`
$DIR/core/web/auth/gql_test.go: `.NewRecorder()`
$DIR/core/web/auth/gql_test.go: `.NewAuthenticationProvider(t)`
$DIR/core/web/auth/gql_test.go: `.NewStore([]byte(cltest.SessionSecret))`
$DIR/core/web/auth/gql_test.go: `.Default()`
$DIR/core/web/auth/gql_test.go: `.Use(sessions.Sessions(auth.SessionName, sessionStore))`
$DIR/core/web/auth/gql_test.go: `.Sessions(auth.SessionName, sessionStore)`
$DIR/core/web/auth/gql_test.go: `.Use(auth.AuthenticateGQL(sessionORM, logger.TestLogger(t)))`
$DIR/core/web/auth/gql_test.go: `.AuthenticateGQL(sessionORM, logger.TestLogger(t))`
$DIR/core/web/auth/gql_test.go: `.TestLogger(t)`
$DIR/core/web/auth/gql_test.go: `.GET("/", func(c *gin.Context) {
session, ok := auth.GetGQLAuthenticatedSession(c.Request.Context())
assert.True(t, ok)
assert.NotNil(t, session)
c.String(http.StatusOK, "")
})`
$DIR/core/web/auth/gql_test.go: `.GetGQLAuthenticatedSession(c.Request.Context())`
$DIR/core/web/auth/gql_test.go: `.Request.Context()`
$DIR/core/web/auth/gql_test.go: `.String(http.StatusOK, "")`
$DIR/core/web/auth/gql_test.go: `.On("AuthorizedUserWithSession", mock.Anything, sessionID)`
$DIR/core/web/auth/gql_test.go: `.Return(clsessions.User{Email: cltest.APIEmailAdmin, Role: clsessions.UserRoleAdmin}, nil)`
$DIR/core/web/auth/gql_test.go: `.NewRecorder()`
$DIR/core/web/auth/gql_test.go: `.MustGenerateSessionCookie(t, sessionID)`
$DIR/core/web/auth/gql_test.go: `.AddCookie(cookie)`
$DIR/core/web/auth/gql_test.go: `.Context(t)`
$DIR/core/web/auth/gql_test.go: `.WithGQLAuthenticatedSession(ctx, user, "sessionID")`
$DIR/core/web/auth/gql_test.go: `.GetGQLAuthenticatedSession(ctx)`
$DIR/core/web/bridge_types_controller_test.go: `t.Run(test.description, func(t *testing.T) {
req := test.request
result := web.ValidateBridgeType(&req)
assert.Equal(t, test.want, result)
})`
$DIR/core/web/bridge_types_controller_test.go: `bt.Name = bridges.MustParseBridgeName("solargridreporting")`
$DIR/core/web/bridge_types_controller_test.go: `bt.URL = cltest.WebURL(t, "https://denergy.eth")`
$DIR/core/web/bridge_types_controller_test.go: `t.Cleanup(cleanup)`
$DIR/core/web/bridge_types_controller_test.go: `cltest.AssertServerResponse(t, resp, http.StatusUnprocessableEntity)`
$DIR/core/web/bridge_types_controller_test.go: `resp, cleanup = client.Get("/v2/bridge_types?size=1")`
$DIR/core/web/bridge_types_controller_test.go: `t.Cleanup(cleanup)`
$DIR/core/web/bridge_types_controller_test.go: `cltest.AssertServerResponse(t, resp, http.StatusOK)`
$DIR/core/web/bridge_types_controller_test.go: `err = web.ParsePaginatedResponse(cltest.ParseResponseBody(t, resp), &resources, &links)`
$DIR/core/web/bridge_types_controller_test.go: `resp, cleanup = client.Get(links["next"].Href)`
$DIR/core/web/bridge_types_controller_test.go: `t.Cleanup(cleanup)`
$DIR/core/web/bridge_types_controller_test.go: `cltest.AssertServerResponse(t, resp, http.StatusOK)`
$DIR/core/web/bridge_types_controller_test.go: `resources = []presenters.BridgeResource{}`
$DIR/core/web/bridge_types_controller_test.go: `err = web.ParsePaginatedResponse(cltest.ParseResponseBody(t, resp), &resources, &links)`
$DIR/core/web/bridge_types_controller_test.go: `t.Cleanup(cleanup)`
$DIR/core/web/bridge_types_controller_test.go: `cltest.AssertServerResponse(t, resp, http.StatusOK)`
$DIR/core/web/bridge_types_controller_test.go: `t.Cleanup(cleanup)`
$DIR/core/web/bridge_types_controller_test.go: `cltest.AssertServerResponse(t, resp, http.StatusOK)`
$DIR/core/web/bridge_types_controller_test.go: `t.Cleanup(cleanup)`
$DIR/core/web/bridge_types_controller_test.go: `resp, cleanup = client.Get("/v2/bridge_types/nosuchbridge")`
$DIR/core/web/bridge_types_controller_test.go: `t.Cleanup(cleanup)`
$DIR/core/web/bridge_types_controller_test.go: `t.Cleanup(cleanup)`
$DIR/core/web/bridge_types_controller_test.go: `t.Cleanup(cleanup)`
$DIR/core/web/bridge_types_controller_test.go: `t.Cleanup(cleanup)`
$DIR/core/web/bridge_types_controller_test.go: `.WebURL(t, "https://denergy.eth")`
$DIR/core/web/bridge_types_controller_test.go: `.NewJSONAPIErrorsWith("No name specified")`
$DIR/core/web/bridge_types_controller_test.go: `.WebURL(t, "https://denergy.eth")`
$DIR/core/web/bridge_types_controller_test.go: `.NewJSONAPIErrorsWith("task type validation: name invalid/adapter contains invalid characters")`
$DIR/core/web/bridge_types_controller_test.go: `.WebURL(t, "")`
$DIR/core/web/bridge_types_controller_test.go: `.NewJSONAPIErrorsWith("URL must be present")`
$DIR/core/web/bridge_types_controller_test.go: `.WebURL(t, "//denergy")`
$DIR/core/web/bridge_types_controller_test.go: `.WebURL(t, "http://chainlink_cmc-adapter_1:8080")`
$DIR/core/web/bridge_types_controller_test.go: `.WebURL(t, "http://chainlink_cmc-adapter_1:8080")`
$DIR/core/web/bridge_types_controller_test.go: `.NewLinkFromJuels(1)`
$DIR/core/web/bridge_types_controller_test.go: `.WebURL(t, "http://chainlink_cmc-adapter_1:8080")`
$DIR/core/web/bridge_types_controller_test.go: `.NewLinkFromJuels(-1)`
$DIR/core/web/bridge_types_controller_test.go: `.NewJSONAPIErrorsWith("MinimumContractPayment must be positive")`
$DIR/core/web/bridge_types_controller_test.go: `.WebURL(t, "https://denergy.eth")`
$DIR/core/web/bridge_types_controller_test.go: `.WebURL(t, "https://denergy.eth")`
$DIR/core/web/bridge_types_controller_test.go: `.Run(test.description, func(t *testing.T) {
req := test.request
result := web.ValidateBridgeType(&req)
assert.Equal(t, test.want, result)
})`
$DIR/core/web/bridge_types_controller_test.go: `.ValidateBridgeType(&req)`
$DIR/core/web/bridge_types_controller_test.go: `.Context(t)`
$DIR/core/web/bridge_types_controller_test.go: `.NewSqlxDB(t)`
$DIR/core/web/bridge_types_controller_test.go: `.NewORM(db)`
$DIR/core/web/bridge_types_controller_test.go: `.MustParseBridgeName("solargridreporting")`
$DIR/core/web/bridge_types_controller_test.go: `.WebURL(t, "https://denergy.eth")`
$DIR/core/web/bridge_types_controller_test.go: `.NewJSONAPIErrorsWith("Bridge Type solargridreporting already exists")`
$DIR/core/web/bridge_types_controller_test.go: `.ValidateBridgeTypeNotExist(ctx, &newBridge, orm)`
$DIR/core/web/bridge_types_controller_test.go: `.NewApplication(t)`
$DIR/core/web/bridge_types_controller_test.go: `.NewHTTPClient(nil)`
$DIR/core/web/bridge_types_controller_test.go: `.BridgeORM()`
$DIR/core/web/bridge_types_controller_test.go: `.Get("/v2/bridge_types?size=x")`
$DIR/core/web/bridge_types_controller_test.go: `.Cleanup(cleanup)`
$DIR/core/web/bridge_types_controller_test.go: `.AssertServerResponse(t, resp, http.StatusUnprocessableEntity)`
$DIR/core/web/bridge_types_controller_test.go: `.Get("/v2/bridge_types?size=1")`
$DIR/core/web/bridge_types_controller_test.go: `.Cleanup(cleanup)`
$DIR/core/web/bridge_types_controller_test.go: `.AssertServerResponse(t, resp, http.StatusOK)`
$DIR/core/web/bridge_types_controller_test.go: `.ParsePaginatedResponse(cltest.ParseResponseBody(t, resp), &resources, &links)`
$DIR/core/web/bridge_types_controller_test.go: `.ParseResponseBody(t, resp)`
$DIR/core/web/bridge_types_controller_test.go: `.Get(links["next"].Href)`
$DIR/core/web/bridge_types_controller_test.go: `.Cleanup(cleanup)`
$DIR/core/web/bridge_types_controller_test.go: `.AssertServerResponse(t, resp, http.StatusOK)`
$DIR/core/web/bridge_types_controller_test.go: `.ParsePaginatedResponse(cltest.ParseResponseBody(t, resp), &resources, &links)`
$DIR/core/web/bridge_types_controller_test.go: `.ParseResponseBody(t, resp)`
$DIR/core/web/bridge_types_controller_test.go: `.NewApplication(t)`
$DIR/core/web/bridge_types_controller_test.go: `.NewHTTPClient(nil)`
$DIR/core/web/bridge_types_controller_test.go: `.Post(
"/v2/bridge_types",
bytes.NewBuffer(cltest.MustReadFile(t, "../testdata/apiresponses/create_random_number_bridge_type.json")),
)`
$DIR/core/web/bridge_types_controller_test.go: `.NewBuffer(cltest.MustReadFile(t, "../testdata/apiresponses/create_random_number_bridge_type.json"))`
$DIR/core/web/bridge_types_controller_test.go: `.MustReadFile(t, "../testdata/apiresponses/create_random_number_bridge_type.json")`
$DIR/core/web/bridge_types_controller_test.go: `.Cleanup(cleanup)`
$DIR/core/web/bridge_types_controller_test.go: `.AssertServerResponse(t, resp, http.StatusOK)`
$DIR/core/web/bridge_types_controller_test.go: `.ParseJSON(t, resp.Body)`
$DIR/core/web/bridge_types_controller_test.go: `.Get("data.attributes.name")`
$DIR/core/web/bridge_types_controller_test.go: `.String()`
$DIR/core/web/bridge_types_controller_test.go: `.Context(t)`
$DIR/core/web/bridge_types_controller_test.go: `.BridgeORM()`
$DIR/core/web/bridge_types_controller_test.go: `.FindBridge(ctx, bridges.MustParseBridgeName(btName))`
$DIR/core/web/bridge_types_controller_test.go: `.MustParseBridgeName(btName)`
$DIR/core/web/bridge_types_controller_test.go: `.NewApplication(t)`
$DIR/core/web/bridge_types_controller_test.go: `.NewHTTPClient(nil)`
$DIR/core/web/bridge_types_controller_test.go: `.RandomizeName("BRidgea")`
$DIR/core/web/bridge_types_controller_test.go: `.MustParseBridgeName(bridgeName)`
$DIR/core/web/bridge_types_controller_test.go: `.WebURL(t, "http://mybridge")`
$DIR/core/web/bridge_types_controller_test.go: `.Context(t)`
$DIR/core/web/bridge_types_controller_test.go: `.Sprintf(`{"name": "%s","url":"http://yourbridge"}`, bridgeName)`
$DIR/core/web/bridge_types_controller_test.go: `.NewBuffer([]byte(body))`
$DIR/core/web/bridge_types_controller_test.go: `.Patch("/v2/bridge_types/"+bridgeName, ud)`
$DIR/core/web/bridge_types_controller_test.go: `.Cleanup(cleanup)`
$DIR/core/web/bridge_types_controller_test.go: `.AssertServerResponse(t, resp, http.StatusOK)`
$DIR/core/web/bridge_types_controller_test.go: `.BridgeORM()`
$DIR/core/web/bridge_types_controller_test.go: `.FindBridge(ctx, bt.Name)`
$DIR/core/web/bridge_types_controller_test.go: `.WebURL(t, "http://yourbridge")`
$DIR/core/web/bridge_types_controller_test.go: `.NewApplication(t)`
$DIR/core/web/bridge_types_controller_test.go: `.NewHTTPClient(nil)`
$DIR/core/web/bridge_types_controller_test.go: `.MustParseBridgeName(testutils.RandomizeName("showbridge"))`
$DIR/core/web/bridge_types_controller_test.go: `.RandomizeName("showbridge")`
$DIR/core/web/bridge_types_controller_test.go: `.WebURL(t, "https://testing.com/bridges")`
$DIR/core/web/bridge_types_controller_test.go: `.Context(t)`
$DIR/core/web/bridge_types_controller_test.go: `.Get("/v2/bridge_types/" + bt.Name.String())`
$DIR/core/web/bridge_types_controller_test.go: `.Name.String()`
$DIR/core/web/bridge_types_controller_test.go: `.Cleanup(cleanup)`
$DIR/core/web/bridge_types_controller_test.go: `.Get("/v2/bridge_types/nosuchbridge")`
$DIR/core/web/bridge_types_controller_test.go: `.Cleanup(cleanup)`
$DIR/core/web/bridge_types_controller_test.go: `.NewApplication(t)`
$DIR/core/web/bridge_types_controller_test.go: `.NewHTTPClient(nil)`
$DIR/core/web/bridge_types_controller_test.go: `.Post(
"/v2/bridge_types",
bytes.NewBuffer(cltest.MustReadFile(t, "../testdata/apiresponses/existing_core_adapter.json")),
)`
$DIR/core/web/bridge_types_controller_test.go: `.NewBuffer(cltest.MustReadFile(t, "../testdata/apiresponses/existing_core_adapter.json"))`
$DIR/core/web/bridge_types_controller_test.go: `.MustReadFile(t, "../testdata/apiresponses/existing_core_adapter.json")`
$DIR/core/web/bridge_types_controller_test.go: `.Cleanup(cleanup)`
$DIR/core/web/bridge_types_controller_test.go: `.NewApplication(t)`
$DIR/core/web/bridge_types_controller_test.go: `.NewHTTPClient(nil)`
$DIR/core/web/bridge_types_controller_test.go: `.Post(
"/v2/bridge_types",
bytes.NewBufferString("}"),
)`
$DIR/core/web/bridge_types_controller_test.go: `.NewBufferString("}")`
$DIR/core/web/bridge_types_controller_test.go: `.Cleanup(cleanup)`
$DIR/core/web/bridge_types_controller_test.go: `.NewApplication(t)`
$DIR/core/web/bridge_types_controller_test.go: `.NewHTTPClient(nil)`
$DIR/core/web/bridge_types_controller_test.go: `.Post(
"/v2/bridge_types",
bytes.NewBufferString(`{"url":"http://without.a.name"}`),
)`
$DIR/core/web/bridge_types_controller_test.go: `.NewBufferString(`{"url":"http://without.a.name"}`)`
$DIR/core/web/bridge_types_controller_test.go: `.Cleanup(cleanup)`
$DIR/core/web/build_info_controller_test.go: `cltest.AssertServerResponse(t, resp, http.StatusOK)`
$DIR/core/web/build_info_controller_test.go: `.NewApplicationEVMDisabled(t)`
$DIR/core/web/build_info_controller_test.go: `.Context(t)`
$DIR/core/web/build_info_controller_test.go: `.NewHTTPClient(nil)`
$DIR/core/web/build_info_controller_test.go: `.Get("/v2/build_info")`
$DIR/core/web/build_info_controller_test.go: `.AssertServerResponse(t, resp, http.StatusOK)`
$DIR/core/web/build_info_controller_test.go: `.ParseResponseBody(t, resp)`
$DIR/core/web/build_info_controller_test.go: `.TrimSpace(body)`
$DIR/core/web/build_info_controller_test.go: `.NewApplicationEVMDisabled(t)`
$DIR/core/web/build_info_controller_test.go: `.Context(t)`
$DIR/core/web/build_info_controller_test.go: `.NewTestLocalOnlyHTTPClient()`
$DIR/core/web/build_info_controller_test.go: `.NewRequestWithContext(ctx, "GET", url, nil)`
$DIR/core/web/build_info_controller_test.go: `.Do(req)`
$DIR/core/web/cors_test.go: `c.WebServer.AllowOrigins = ptr("http://localhost:3000,http://localhost:6689")`
$DIR/core/web/cors_test.go: `t.Run(test.origin, func(t *testing.T) {
app := cltest.NewApplicationWithConfig(t, config)
client := app.NewHTTPClient(nil)
headers := map[string]string{"Origin": test.origin}
resp, cleanup := client.Get("/v2/chains/evm", headers)
defer cleanup()
cltest.AssertServerResponse(t, resp, test.statusCode)
})`
$DIR/core/web/cors_test.go: `cltest.AssertServerResponse(t, resp, test.statusCode)`
$DIR/core/web/cors_test.go: `t.Run(test.origin, func(t *testing.T) {
config := configtest.NewGeneralConfig(t, func(c *chainlink.Config, s *chainlink.Secrets) {
c.WebServer.AllowOrigins = ptr(test.allow)
})
app := cltest.NewApplicationWithConfig(t, config)
client := app.NewHTTPClient(nil)
headers := map[string]string{"Origin": test.origin}
resp, cleanup := client.Get("/v2/chains/evm", headers)
defer cleanup()
cltest.AssertServerResponse(t, resp, test.statusCode)
})`
$DIR/core/web/cors_test.go: `c.WebServer.AllowOrigins = ptr(test.allow)`
$DIR/core/web/cors_test.go: `cltest.AssertServerResponse(t, resp, test.statusCode)`
$DIR/core/web/cors_test.go: `.NewGeneralConfig(t, func(c *chainlink.Config, s *chainlink.Secrets) {
c.WebServer.AllowOrigins = ptr("http://localhost:3000,http://localhost:6689")
})`
$DIR/core/web/cors_test.go: `.Run(test.origin, func(t *testing.T) {
app := cltest.NewApplicationWithConfig(t, config)
client := app.NewHTTPClient(nil)
headers := map[string]string{"Origin": test.origin}
resp, cleanup := client.Get("/v2/chains/evm", headers)
defer cleanup()
cltest.AssertServerResponse(t, resp, test.statusCode)
})`
$DIR/core/web/cors_test.go: `.NewApplicationWithConfig(t, config)`
$DIR/core/web/cors_test.go: `.NewHTTPClient(nil)`
$DIR/core/web/cors_test.go: `.Get("/v2/chains/evm", headers)`
$DIR/core/web/cors_test.go: `.AssertServerResponse(t, resp, test.statusCode)`
$DIR/core/web/cors_test.go: `.Run(test.origin, func(t *testing.T) {
config := configtest.NewGeneralConfig(t, func(c *chainlink.Config, s *chainlink.Secrets) {
c.WebServer.AllowOrigins = ptr(test.allow)
})
app := cltest.NewApplicationWithConfig(t, config)
client := app.NewHTTPClient(nil)
headers := map[string]string{"Origin": test.origin}
resp, cleanup := client.Get("/v2/chains/evm", headers)
defer cleanup()
cltest.AssertServerResponse(t, resp, test.statusCode)
})`
$DIR/core/web/cors_test.go: `.NewGeneralConfig(t, func(c *chainlink.Config, s *chainlink.Secrets) {
c.WebServer.AllowOrigins = ptr(test.allow)
})`
$DIR/core/web/cors_test.go: `.NewApplicationWithConfig(t, config)`
$DIR/core/web/cors_test.go: `.NewHTTPClient(nil)`
$DIR/core/web/cors_test.go: `.Get("/v2/chains/evm", headers)`
$DIR/core/web/cors_test.go: `.AssertServerResponse(t, resp, test.statusCode)`
$DIR/core/web/cosmos_chains_controller_test.go: `t.Run(tc.name, func(t *testing.T) {
t.Parallel()
controller := setupCosmosChainsControllerTestV2(t, &coscfg.TOMLConfig{
ChainID: ptr(validId),
Enabled: ptr(true),
Chain: coscfg.Chain{
FallbackGasPrice: ptr(decimal.RequireFromString("9.999")),
GasLimitMultiplier: ptr(decimal.RequireFromString("1.55555")),
}})
wantedResult := tc.want(t, controller.app)
resp, cleanup := controller.client.Get(
fmt.Sprintf("/v2/chains/cosmos/%s", tc.inputId),
)
t.Cleanup(cleanup)
require.Equal(t, tc.wantStatusCode, resp.StatusCode)
if wantedResult != nil {
resource1 := presenters.CosmosChainResource{}
err := web.ParseJSONAPIResponse(cltest.ParseResponseBody(t, resp), &resource1)
require.NoError(t, err)
assert.Equal(t, wantedResult.ID, resource1.ID)
assert.Equal(t, wantedResult.Config, resource1.Config)
}
})`
$DIR/core/web/cosmos_chains_controller_test.go: `t.Cleanup(cleanup)`
$DIR/core/web/cosmos_chains_controller_test.go: `t.Cleanup(cleanup)`
$DIR/core/web/cosmos_chains_controller_test.go: `t.Cleanup(cleanup)`
$DIR/core/web/cosmos_chains_controller_test.go: `err = web.ParsePaginatedResponse(body, &chains, &links)`
$DIR/core/web/cosmos_chains_controller_test.go: `resp, cleanup = controller.client.Get(links["next"].Href)`
$DIR/core/web/cosmos_chains_controller_test.go: `t.Cleanup(cleanup)`
$DIR/core/web/cosmos_chains_controller_test.go: `chains = []presenters.CosmosChainResource{}`
$DIR/core/web/cosmos_chains_controller_test.go: `err = web.ParsePaginatedResponse(cltest.ParseResponseBody(t, resp), &chains, &links)`
$DIR/core/web/cosmos_chains_controller_test.go: `.Run(tc.name, func(t *testing.T) {
t.Parallel()
controller := setupCosmosChainsControllerTestV2(t, &coscfg.TOMLConfig{
ChainID: ptr(validId),
Enabled: ptr(true),
Chain: coscfg.Chain{
FallbackGasPrice: ptr(decimal.RequireFromString("9.999")),
GasLimitMultiplier: ptr(decimal.RequireFromString("1.55555")),
}})
wantedResult := tc.want(t, controller.app)
resp, cleanup := controller.client.Get(
fmt.Sprintf("/v2/chains/cosmos/%s", tc.inputId),
)
t.Cleanup(cleanup)
require.Equal(t, tc.wantStatusCode, resp.StatusCode)
if wantedResult != nil {
resource1 := presenters.CosmosChainResource{}
err := web.ParseJSONAPIResponse(cltest.ParseResponseBody(t, resp), &resource1)
require.NoError(t, err)
assert.Equal(t, wantedResult.ID, resource1.ID)
assert.Equal(t, wantedResult.Config, resource1.Config)
}
})`
$DIR/core/web/cosmos_chains_controller_test.go: `.RequireFromString("9.999")`
$DIR/core/web/cosmos_chains_controller_test.go: `.RequireFromString("1.55555")`
$DIR/core/web/cosmos_chains_controller_test.go: `.want(t, controller.app)`
$DIR/core/web/cosmos_chains_controller_test.go: `.client.Get(
fmt.Sprintf("/v2/chains/cosmos/%s", tc.inputId),
)`
$DIR/core/web/cosmos_chains_controller_test.go: `.Sprintf("/v2/chains/cosmos/%s", tc.inputId)`
$DIR/core/web/cosmos_chains_controller_test.go: `.Cleanup(cleanup)`
$DIR/core/web/cosmos_chains_controller_test.go: `.ParseJSONAPIResponse(cltest.ParseResponseBody(t, resp), &resource1)`
$DIR/core/web/cosmos_chains_controller_test.go: `.ParseResponseBody(t, resp)`
$DIR/core/web/cosmos_chains_controller_test.go: `.RandomChainID()`
$DIR/core/web/cosmos_chains_controller_test.go: `.RequireFromString("9.999")`
$DIR/core/web/cosmos_chains_controller_test.go: `.RandomChainID()`
$DIR/core/web/cosmos_chains_controller_test.go: `.RequireFromString("1.55555")`
$DIR/core/web/cosmos_chains_controller_test.go: `.client.Get("/v2/chains/cosmos?size=asd")`
$DIR/core/web/cosmos_chains_controller_test.go: `.Cleanup(cleanup)`
$DIR/core/web/cosmos_chains_controller_test.go: `.client.Get("/v2/chains/cosmos?size=1")`
$DIR/core/web/cosmos_chains_controller_test.go: `.Cleanup(cleanup)`
$DIR/core/web/cosmos_chains_controller_test.go: `.ParseResponseBody(t, resp)`
$DIR/core/web/cosmos_chains_controller_test.go: `.ParseJSONAPIResponseMetaCount(body)`
$DIR/core/web/cosmos_chains_controller_test.go: `.ParsePaginatedResponse(body, &chains, &links)`
$DIR/core/web/cosmos_chains_controller_test.go: `.TOMLString()`
$DIR/core/web/cosmos_chains_controller_test.go: `.client.Get(links["next"].Href)`
$DIR/core/web/cosmos_chains_controller_test.go: `.Cleanup(cleanup)`
$DIR/core/web/cosmos_chains_controller_test.go: `.ParsePaginatedResponse(cltest.ParseResponseBody(t, resp), &chains, &links)`
$DIR/core/web/cosmos_chains_controller_test.go: `.ParseResponseBody(t, resp)`
$DIR/core/web/cosmos_chains_controller_test.go: `.TOMLString()`
$DIR/core/web/cosmos_keys_controller_test.go: `t.Cleanup(cleanup)`
$DIR/core/web/cosmos_keys_controller_test.go: `cltest.AssertServerResponse(t, response, http.StatusOK)`
$DIR/core/web/cosmos_keys_controller_test.go: `t.Cleanup(cleanup)`
$DIR/core/web/cosmos_keys_controller_test.go: `cltest.AssertServerResponse(t, response, http.StatusOK)`
$DIR/core/web/cosmos_keys_controller_test.go: `_, err = keyStore.Cosmos().Get(resource.ID)`
$DIR/core/web/cosmos_keys_controller_test.go: `t.Cleanup(cleanup)`
$DIR/core/web/cosmos_keys_controller_test.go: `t.Cleanup(cleanup)`
$DIR/core/web/cosmos_keys_controller_test.go: `keys, _ = keyStore.Cosmos().GetAll()`
$DIR/core/web/cosmos_keys_controller_test.go: `.Cosmos()`
$DIR/core/web/cosmos_keys_controller_test.go: `.GetAll()`
$DIR/core/web/cosmos_keys_controller_test.go: `.Get("/v2/keys/cosmos")`
$DIR/core/web/cosmos_keys_controller_test.go: `.Cleanup(cleanup)`
$DIR/core/web/cosmos_keys_controller_test.go: `.AssertServerResponse(t, response, http.StatusOK)`
$DIR/core/web/cosmos_keys_controller_test.go: `.ParseJSONAPIResponse(cltest.ParseResponseBody(t, response), &resources)`
$DIR/core/web/cosmos_keys_controller_test.go: `.ParseResponseBody(t, response)`
$DIR/core/web/cosmos_keys_controller_test.go: `.PublicKeyStr()`
$DIR/core/web/cosmos_keys_controller_test.go: `.NewApplicationEVMDisabled(t)`
$DIR/core/web/cosmos_keys_controller_test.go: `.Context(t)`
$DIR/core/web/cosmos_keys_controller_test.go: `.NewHTTPClient(nil)`
$DIR/core/web/cosmos_keys_controller_test.go: `.GetKeyStore()`
$DIR/core/web/cosmos_keys_controller_test.go: `.Post("/v2/keys/cosmos", nil)`
$DIR/core/web/cosmos_keys_controller_test.go: `.Cleanup(cleanup)`
$DIR/core/web/cosmos_keys_controller_test.go: `.AssertServerResponse(t, response, http.StatusOK)`
$DIR/core/web/cosmos_keys_controller_test.go: `.Cosmos()`
$DIR/core/web/cosmos_keys_controller_test.go: `.GetAll()`
$DIR/core/web/cosmos_keys_controller_test.go: `.ParseJSONAPIResponse(cltest.ParseResponseBody(t, response), &resource)`
$DIR/core/web/cosmos_keys_controller_test.go: `.ParseResponseBody(t, response)`
$DIR/core/web/cosmos_keys_controller_test.go: `.Cosmos()`
$DIR/core/web/cosmos_keys_controller_test.go: `.Get(resource.ID)`
$DIR/core/web/cosmos_keys_controller_test.go: `.Delete("/v2/keys/cosmos/" + nonExistentCosmosKeyID)`
$DIR/core/web/cosmos_keys_controller_test.go: `.Cleanup(cleanup)`
$DIR/core/web/cosmos_keys_controller_test.go: `.Context(t)`
$DIR/core/web/cosmos_keys_controller_test.go: `.Cosmos()`
$DIR/core/web/cosmos_keys_controller_test.go: `.GetAll()`
$DIR/core/web/cosmos_keys_controller_test.go: `.Cosmos()`
$DIR/core/web/cosmos_keys_controller_test.go: `.Create(ctx)`
$DIR/core/web/cosmos_keys_controller_test.go: `.Delete(fmt.Sprintf("/v2/keys/cosmos/%s", key.ID()))`
$DIR/core/web/cosmos_keys_controller_test.go: `.Sprintf("/v2/keys/cosmos/%s", key.ID())`
$DIR/core/web/cosmos_keys_controller_test.go: `.ID()`
$DIR/core/web/cosmos_keys_controller_test.go: `.Cleanup(cleanup)`
$DIR/core/web/cosmos_keys_controller_test.go: `.Cosmos()`
$DIR/core/web/cosmos_keys_controller_test.go: `.GetAll()`
$DIR/core/web/dkgencrypt_keys_controller_test.go: `t.Cleanup(cleanup)`
$DIR/core/web/dkgencrypt_keys_controller_test.go: `cltest.AssertServerResponse(t, response, http.StatusOK)`
$DIR/core/web/dkgencrypt_keys_controller_test.go: `t.Cleanup(cleanup)`
$DIR/core/web/dkgencrypt_keys_controller_test.go: `cltest.AssertServerResponse(t, response, http.StatusOK)`
$DIR/core/web/dkgencrypt_keys_controller_test.go: `found = true`
$DIR/core/web/dkgencrypt_keys_controller_test.go: `_, err = keyStore.DKGEncrypt().Get(resource.ID)`
$DIR/core/web/dkgencrypt_keys_controller_test.go: `t.Cleanup(cleanup)`
$DIR/core/web/dkgencrypt_keys_controller_test.go: `t.Cleanup(cleanup)`
$DIR/core/web/dkgencrypt_keys_controller_test.go: `cltest.AssertServerResponse(t, response, http.StatusOK)`
$DIR/core/web/dkgencrypt_keys_controller_test.go: `.DKGEncrypt()`
$DIR/core/web/dkgencrypt_keys_controller_test.go: `.GetAll()`
$DIR/core/web/dkgencrypt_keys_controller_test.go: `.Get("/v2/keys/dkgencrypt")`
$DIR/core/web/dkgencrypt_keys_controller_test.go: `.Cleanup(cleanup)`
$DIR/core/web/dkgencrypt_keys_controller_test.go: `.AssertServerResponse(t, response, http.StatusOK)`
$DIR/core/web/dkgencrypt_keys_controller_test.go: `.ParseJSONAPIResponse(cltest.ParseResponseBody(t, response), &resources)`
$DIR/core/web/dkgencrypt_keys_controller_test.go: `.ParseResponseBody(t, response)`
$DIR/core/web/dkgencrypt_keys_controller_test.go: `.PublicKeyString()`
$DIR/core/web/dkgencrypt_keys_controller_test.go: `.Post("/v2/keys/dkgencrypt", nil)`
$DIR/core/web/dkgencrypt_keys_controller_test.go: `.Cleanup(cleanup)`
$DIR/core/web/dkgencrypt_keys_controller_test.go: `.AssertServerResponse(t, response, http.StatusOK)`
$DIR/core/web/dkgencrypt_keys_controller_test.go: `.DKGEncrypt()`
$DIR/core/web/dkgencrypt_keys_controller_test.go: `.GetAll()`
$DIR/core/web/dkgencrypt_keys_controller_test.go: `.ParseJSONAPIResponse(cltest.ParseResponseBody(t, response), &resource)`
$DIR/core/web/dkgencrypt_keys_controller_test.go: `.ParseResponseBody(t, response)`
$DIR/core/web/dkgencrypt_keys_controller_test.go: `.ID()`
$DIR/core/web/dkgencrypt_keys_controller_test.go: `.DKGEncrypt()`
$DIR/core/web/dkgencrypt_keys_controller_test.go: `.Get(resource.ID)`
$DIR/core/web/dkgencrypt_keys_controller_test.go: `.Delete("/v2/keys/dkgencrypt/" + "nonexistentKey")`
$DIR/core/web/dkgencrypt_keys_controller_test.go: `.Cleanup(cleanup)`
$DIR/core/web/dkgencrypt_keys_controller_test.go: `.DKGEncrypt()`
$DIR/core/web/dkgencrypt_keys_controller_test.go: `.GetAll()`
$DIR/core/web/dkgencrypt_keys_controller_test.go: `.Delete(fmt.Sprintf("/v2/keys/dkgencrypt/%s", keys[0].ID()))`
$DIR/core/web/dkgencrypt_keys_controller_test.go: `.Sprintf("/v2/keys/dkgencrypt/%s", keys[0].ID())`
$DIR/core/web/dkgencrypt_keys_controller_test.go: `.ID()`
$DIR/core/web/dkgencrypt_keys_controller_test.go: `.Cleanup(cleanup)`
$DIR/core/web/dkgencrypt_keys_controller_test.go: `.AssertServerResponse(t, response, http.StatusOK)`
$DIR/core/web/dkgencrypt_keys_controller_test.go: `.DKGEncrypt()`
$DIR/core/web/dkgencrypt_keys_controller_test.go: `.GetAll()`
$DIR/core/web/dkgsign_keys_controller_test.go: `t.Cleanup(cleanup)`
$DIR/core/web/dkgsign_keys_controller_test.go: `cltest.AssertServerResponse(t, response, http.StatusOK)`
$DIR/core/web/dkgsign_keys_controller_test.go: `t.Cleanup(cleanup)`
$DIR/core/web/dkgsign_keys_controller_test.go: `cltest.AssertServerResponse(t, response, http.StatusOK)`
$DIR/core/web/dkgsign_keys_controller_test.go: `found = true`
$DIR/core/web/dkgsign_keys_controller_test.go: `_, err = keyStore.DKGSign().Get(resource.ID)`
$DIR/core/web/dkgsign_keys_controller_test.go: `t.Cleanup(cleanup)`
$DIR/core/web/dkgsign_keys_controller_test.go: `t.Cleanup(cleanup)`
$DIR/core/web/dkgsign_keys_controller_test.go: `cltest.AssertServerResponse(t, response, http.StatusOK)`
$DIR/core/web/dkgsign_keys_controller_test.go: `.DKGSign()`
$DIR/core/web/dkgsign_keys_controller_test.go: `.GetAll()`
$DIR/core/web/dkgsign_keys_controller_test.go: `.Get("/v2/keys/dkgsign")`
$DIR/core/web/dkgsign_keys_controller_test.go: `.Cleanup(cleanup)`
$DIR/core/web/dkgsign_keys_controller_test.go: `.AssertServerResponse(t, response, http.StatusOK)`
$DIR/core/web/dkgsign_keys_controller_test.go: `.ParseJSONAPIResponse(cltest.ParseResponseBody(t, response), &resources)`
$DIR/core/web/dkgsign_keys_controller_test.go: `.ParseResponseBody(t, response)`
$DIR/core/web/dkgsign_keys_controller_test.go: `.PublicKeyString()`
$DIR/core/web/dkgsign_keys_controller_test.go: `.Post("/v2/keys/dkgsign", nil)`
$DIR/core/web/dkgsign_keys_controller_test.go: `.Cleanup(cleanup)`
$DIR/core/web/dkgsign_keys_controller_test.go: `.AssertServerResponse(t, response, http.StatusOK)`
$DIR/core/web/dkgsign_keys_controller_test.go: `.DKGSign()`
$DIR/core/web/dkgsign_keys_controller_test.go: `.GetAll()`
$DIR/core/web/dkgsign_keys_controller_test.go: `.ParseJSONAPIResponse(cltest.ParseResponseBody(t, response), &resource)`
$DIR/core/web/dkgsign_keys_controller_test.go: `.ParseResponseBody(t, response)`
$DIR/core/web/dkgsign_keys_controller_test.go: `.ID()`
$DIR/core/web/dkgsign_keys_controller_test.go: `.DKGSign()`
$DIR/core/web/dkgsign_keys_controller_test.go: `.Get(resource.ID)`
$DIR/core/web/dkgsign_keys_controller_test.go: `.Delete("/v2/keys/dkgsign/" + "nonexistentKey")`
$DIR/core/web/dkgsign_keys_controller_test.go: `.Cleanup(cleanup)`
$DIR/core/web/dkgsign_keys_controller_test.go: `.DKGSign()`
$DIR/core/web/dkgsign_keys_controller_test.go: `.GetAll()`
$DIR/core/web/dkgsign_keys_controller_test.go: `.Delete(fmt.Sprintf("/v2/keys/dkgsign/%s", keys[0].ID()))`
$DIR/core/web/dkgsign_keys_controller_test.go: `.Sprintf("/v2/keys/dkgsign/%s", keys[0].ID())`
$DIR/core/web/dkgsign_keys_controller_test.go: `.ID()`
$DIR/core/web/dkgsign_keys_controller_test.go: `.Cleanup(cleanup)`
$DIR/core/web/dkgsign_keys_controller_test.go: `.AssertServerResponse(t, response, http.StatusOK)`
$DIR/core/web/dkgsign_keys_controller_test.go: `.DKGSign()`
$DIR/core/web/dkgsign_keys_controller_test.go: `.GetAll()`
$DIR/core/web/eth_keys_controller_test.go: `ethClient.On("PendingNonceAt", mock.Anything, mock.Anything).Return(uint64(0), nil)`
$DIR/core/web/eth_keys_controller_test.go: `c.EVM[0].NonceAutoSync = ptr(false)`
$DIR/core/web/eth_keys_controller_test.go: `c.EVM[0].BalanceMonitor.Enabled = ptr(false)`
$DIR/core/web/eth_keys_controller_test.go: `ethClient.On("BalanceAt", mock.Anything, addr0, mock.Anything).Return(big.NewInt(256), nil).Once()`
$DIR/core/web/eth_keys_controller_test.go: `ethClient.On("BalanceAt", mock.Anything, addr1, mock.Anything).Return(big.NewInt(1), nil).Once()`
$DIR/core/web/eth_keys_controller_test.go: `ethClient.On("BalanceAt", mock.Anything, addr2, mock.Anything).Return(big.NewInt(1), nil).Once()`
$DIR/core/web/eth_keys_controller_test.go: `ethClient.On("LINKBalance", mock.Anything, addr0, mock.Anything).Return(assets.NewLinkFromJuels(256), nil).Once()`
$DIR/core/web/eth_keys_controller_test.go: `ethClient.On("LINKBalance", mock.Anything, addr1, mock.Anything).Return(assets.NewLinkFromJuels(1), nil).Once()`
$DIR/core/web/eth_keys_controller_test.go: `ethClient.On("LINKBalance", mock.Anything, addr2, mock.Anything).Return(assets.NewLinkFromJuels(1), nil).Once()`
$DIR/core/web/eth_keys_controller_test.go: `ethClient.On("PendingNonceAt", mock.Anything, mock.Anything).Return(uint64(0), nil)`
$DIR/core/web/eth_keys_controller_test.go: `c.EVM[0].NonceAutoSync = ptr(false)`
$DIR/core/web/eth_keys_controller_test.go: `c.EVM[0].BalanceMonitor.Enabled = ptr(false)`
$DIR/core/web/eth_keys_controller_test.go: `ethClient.On("BalanceAt", mock.Anything, addr, mock.Anything).Return(nil, errors.New("fake error")).Once()`
$DIR/core/web/eth_keys_controller_test.go: `ethClient.On("LINKBalance", mock.Anything, addr, mock.Anything).Return(nil, errors.New("fake error")).Once()`
$DIR/core/web/eth_keys_controller_test.go: `c.EVM[0].Enabled = ptr(false)`
$DIR/core/web/eth_keys_controller_test.go: `ethClient.On("PendingNonceAt", mock.Anything, mock.Anything).Return(uint64(0), nil)`
$DIR/core/web/eth_keys_controller_test.go: `c.EVM[0].NonceAutoSync = ptr(false)`
$DIR/core/web/eth_keys_controller_test.go: `c.EVM[0].BalanceMonitor.Enabled = ptr(false)`
$DIR/core/web/eth_keys_controller_test.go: `c.EVM[0].GasEstimator.Mode = ptr("FixedPrice")`
$DIR/core/web/eth_keys_controller_test.go: `ethClient.On("BalanceAt", mock.Anything, mock.Anything, mock.Anything).Return(big.NewInt(256), nil).Once()`
$DIR/core/web/eth_keys_controller_test.go: `ethClient.On("LINKBalance", mock.Anything, mock.Anything, mock.Anything).Return(assets.NewLinkFromJuels(256), nil).Once()`
$DIR/core/web/eth_keys_controller_test.go: `err = cltest.ParseJSONAPIResponse(t, resp, &actualBalances)`
$DIR/core/web/eth_keys_controller_test.go: `c.EVM[0].BalanceMonitor.Enabled = ptr(false)`
$DIR/core/web/eth_keys_controller_test.go: `cltest.MockApplicationEthCalls(t, app, ethClient, sub)`
$DIR/core/web/eth_keys_controller_test.go: `ethClient.On("BalanceAt", mock.Anything, mock.Anything, mock.Anything).Return(ethBalanceInt, nil)`
$DIR/core/web/eth_keys_controller_test.go: `ethClient.On("LINKBalance", mock.Anything, mock.Anything, mock.Anything).Return(linkBalance, nil)`
$DIR/core/web/eth_keys_controller_test.go: `query.Set("evmChainID", cltest.FixtureChainID.String())`
$DIR/core/web/eth_keys_controller_test.go: `chainURL.RawQuery = query.Encode()`
$DIR/core/web/eth_keys_controller_test.go: `cltest.AssertServerResponse(t, resp, http.StatusOK)`
$DIR/core/web/eth_keys_controller_test.go: `ethClient.On("PendingNonceAt", mock.Anything, mock.Anything).Return(uint64(0), nil)`
$DIR/core/web/eth_keys_controller_test.go: `c.EVM[0].NonceAutoSync = ptr(false)`
$DIR/core/web/eth_keys_controller_test.go: `c.EVM[0].BalanceMonitor.Enabled = ptr(false)`
$DIR/core/web/eth_keys_controller_test.go: `ethClient.On("BalanceAt", mock.Anything, addr, mock.Anything).Return(big.NewInt(1), nil).Once()`
$DIR/core/web/eth_keys_controller_test.go: `ethClient.On("LINKBalance", mock.Anything, addr, mock.Anything).Return(assets.NewLinkFromJuels(1), nil).Once()`
$DIR/core/web/eth_keys_controller_test.go: `query.Set("address", addr.Hex())`
$DIR/core/web/eth_keys_controller_test.go: `query.Set("evmChainID", cltest.FixtureChainID.String())`
$DIR/core/web/eth_keys_controller_test.go: `chainURL.RawQuery = query.Encode()`
$DIR/core/web/eth_keys_controller_test.go: `ethClient.On("PendingNonceAt", mock.Anything, mock.Anything).Return(uint64(0), nil)`
$DIR/core/web/eth_keys_controller_test.go: `c.EVM[0].NonceAutoSync = ptr(false)`
$DIR/core/web/eth_keys_controller_test.go: `c.EVM[0].BalanceMonitor.Enabled = ptr(false)`
$DIR/core/web/eth_keys_controller_test.go: `ethClient.On("BalanceAt", mock.Anything, addr, mock.Anything).Return(big.NewInt(1), nil).Once()`
$DIR/core/web/eth_keys_controller_test.go: `ethClient.On("LINKBalance", mock.Anything, addr, mock.Anything).Return(assets.NewLinkFromJuels(1), nil).Once()`
$DIR/core/web/eth_keys_controller_test.go: `query.Set("address", addr.Hex())`
$DIR/core/web/eth_keys_controller_test.go: `query.Set("evmChainID", cltest.FixtureChainID.String())`
$DIR/core/web/eth_keys_controller_test.go: `query.Set("enabled", enabled)`
$DIR/core/web/eth_keys_controller_test.go: `chainURL.RawQuery = query.Encode()`
$DIR/core/web/eth_keys_controller_test.go: `c.EVM[0].NonceAutoSync = ptr(false)`
$DIR/core/web/eth_keys_controller_test.go: `c.EVM[0].BalanceMonitor.Enabled = ptr(false)`
$DIR/core/web/eth_keys_controller_test.go: `ethClient.On("BalanceAt", mock.Anything, addr, mock.Anything).Return(big.NewInt(1), nil).Once()`
$DIR/core/web/eth_keys_controller_test.go: `ethClient.On("LINKBalance", mock.Anything, addr, mock.Anything).Return(assets.NewLinkFromJuels(1), nil).Once()`
$DIR/core/web/eth_keys_controller_test.go: `query.Set("address", addr.Hex())`
$DIR/core/web/eth_keys_controller_test.go: `query.Set("evmChainID", cltest.FixtureChainID.String())`
$DIR/core/web/eth_keys_controller_test.go: `query.Set("enabled", enabled)`
$DIR/core/web/eth_keys_controller_test.go: `chainURL.RawQuery = query.Encode()`
$DIR/core/web/eth_keys_controller_test.go: `ethClient.On("PendingNonceAt", mock.Anything, mock.Anything).Return(uint64(0), nil)`
$DIR/core/web/eth_keys_controller_test.go: `c.EVM[0].NonceAutoSync = ptr(false)`
$DIR/core/web/eth_keys_controller_test.go: `c.EVM[0].BalanceMonitor.Enabled = ptr(false)`
$DIR/core/web/eth_keys_controller_test.go: `ethClient.On("BalanceAt", mock.Anything, addr, mock.Anything).Return(big.NewInt(1), nil).Once()`
$DIR/core/web/eth_keys_controller_test.go: `ethClient.On("LINKBalance", mock.Anything, addr, mock.Anything).Return(assets.NewLinkFromJuels(1), nil).Once()`
$DIR/core/web/eth_keys_controller_test.go: `strategy.On("Subject").Return(uuid.NullUUID{UUID: subject, Valid: true})`
$DIR/core/web/eth_keys_controller_test.go: `strategy.On("PruneQueue", mock.Anything, mock.AnythingOfType("*txmgr.evmTxStore")).Return(nil, nil)`
$DIR/core/web/eth_keys_controller_test.go: `query.Set("address", addr.Hex())`
$DIR/core/web/eth_keys_controller_test.go: `query.Set("evmChainID", cltest.FixtureChainID.String())`
$DIR/core/web/eth_keys_controller_test.go: `query.Set("abandon", "true")`
$DIR/core/web/eth_keys_controller_test.go: `chainURL.RawQuery = query.Encode()`
$DIR/core/web/eth_keys_controller_test.go: `err = cltest.ParseJSONAPIResponse(t, resp, &updatedKey)`
$DIR/core/web/eth_keys_controller_test.go: `txes, err = txStore.FindTxesByFromAddressAndState(testutils.Context(t), addr, "fatal_error")`
$DIR/core/web/eth_keys_controller_test.go: `ethClient.On("PendingNonceAt", mock.Anything, mock.Anything).Return(uint64(0), nil)`
$DIR/core/web/eth_keys_controller_test.go: `c.EVM[0].NonceAutoSync = ptr(false)`
$DIR/core/web/eth_keys_controller_test.go: `c.EVM[0].BalanceMonitor.Enabled = ptr(false)`
$DIR/core/web/eth_keys_controller_test.go: `query.Set("address", addr.Hex())`
$DIR/core/web/eth_keys_controller_test.go: `query.Set("evmChainID", cltest.FixtureChainID.String())`
$DIR/core/web/eth_keys_controller_test.go: `query.Set("abandon", "invalid")`
$DIR/core/web/eth_keys_controller_test.go: `chainURL.RawQuery = query.Encode()`
$DIR/core/web/eth_keys_controller_test.go: `ethClient.On("PendingNonceAt", mock.Anything, mock.Anything).Return(uint64(0), nil)`
$DIR/core/web/eth_keys_controller_test.go: `c.EVM[0].NonceAutoSync = ptr(false)`
$DIR/core/web/eth_keys_controller_test.go: `c.EVM[0].BalanceMonitor.Enabled = ptr(false)`
$DIR/core/web/eth_keys_controller_test.go: `query.Set("address", addr.Hex())`
$DIR/core/web/eth_keys_controller_test.go: `query.Set("evmChainID", cltest.FixtureChainID.String())`
$DIR/core/web/eth_keys_controller_test.go: `query.Set("enabled", "invalid")`
$DIR/core/web/eth_keys_controller_test.go: `chainURL.RawQuery = query.Encode()`
$DIR/core/web/eth_keys_controller_test.go: `c.EVM[0].NonceAutoSync = ptr(false)`
$DIR/core/web/eth_keys_controller_test.go: `c.EVM[0].BalanceMonitor.Enabled = ptr(false)`
$DIR/core/web/eth_keys_controller_test.go: `query.Set("address", "invalid address")`
$DIR/core/web/eth_keys_controller_test.go: `query.Set("evmChainID", cltest.FixtureChainID.String())`
$DIR/core/web/eth_keys_controller_test.go: `chainURL.RawQuery = query.Encode()`
$DIR/core/web/eth_keys_controller_test.go: `c.EVM[0].NonceAutoSync = ptr(false)`
$DIR/core/web/eth_keys_controller_test.go: `c.EVM[0].BalanceMonitor.Enabled = ptr(false)`
$DIR/core/web/eth_keys_controller_test.go: `query.Set("address", testutils.NewAddress().Hex())`
$DIR/core/web/eth_keys_controller_test.go: `query.Set("evmChainID", cltest.FixtureChainID.String())`
$DIR/core/web/eth_keys_controller_test.go: `chainURL.RawQuery = query.Encode()`
$DIR/core/web/eth_keys_controller_test.go: `c.EVM[0].NonceAutoSync = ptr(false)`
$DIR/core/web/eth_keys_controller_test.go: `c.EVM[0].BalanceMonitor.Enabled = ptr(false)`
$DIR/core/web/eth_keys_controller_test.go: `query.Set("address", testutils.NewAddress().Hex())`
$DIR/core/web/eth_keys_controller_test.go: `query.Set("evmChainID", "bad chain ID")`
$DIR/core/web/eth_keys_controller_test.go: `chainURL.RawQuery = query.Encode()`
$DIR/core/web/eth_keys_controller_test.go: `ethClient.On("PendingNonceAt", mock.Anything, mock.Anything).Return(uint64(0), nil)`
$DIR/core/web/eth_keys_controller_test.go: `c.EVM[0].NonceAutoSync = ptr(false)`
$DIR/core/web/eth_keys_controller_test.go: `c.EVM[0].BalanceMonitor.Enabled = ptr(false)`
$DIR/core/web/eth_keys_controller_test.go: `query.Set("address", addr.Hex())`
$DIR/core/web/eth_keys_controller_test.go: `query.Set("evmChainID", "123456789")`
$DIR/core/web/eth_keys_controller_test.go: `chainURL.RawQuery = query.Encode()`
$DIR/core/web/eth_keys_controller_test.go: `ethClient.On("PendingNonceAt", mock.Anything, mock.Anything).Return(uint64(0), nil)`
$DIR/core/web/eth_keys_controller_test.go: `c.EVM[0].NonceAutoSync = ptr(false)`
$DIR/core/web/eth_keys_controller_test.go: `c.EVM[0].BalanceMonitor.Enabled = ptr(false)`
$DIR/core/web/eth_keys_controller_test.go: `ethClient.On("BalanceAt", mock.Anything, addr0, mock.Anything).Return(big.NewInt(1), nil).Once()`
$DIR/core/web/eth_keys_controller_test.go: `ethClient.On("BalanceAt", mock.Anything, addr1, mock.Anything).Return(big.NewInt(1), nil).Once()`
$DIR/core/web/eth_keys_controller_test.go: `ethClient.On("LINKBalance", mock.Anything, addr0, mock.Anything).Return(assets.NewLinkFromJuels(1), nil).Once()`
$DIR/core/web/eth_keys_controller_test.go: `ethClient.On("LINKBalance", mock.Anything, addr1, mock.Anything).Return(assets.NewLinkFromJuels(1), nil).Once()`
$DIR/core/web/eth_keys_controller_test.go: `err = cltest.ParseJSONAPIResponse(t, resp, &actualBalances)`
$DIR/core/web/eth_keys_controller_test.go: `c.EVM[0].NonceAutoSync = ptr(false)`
$DIR/core/web/eth_keys_controller_test.go: `c.EVM[0].BalanceMonitor.Enabled = ptr(false)`
$DIR/core/web/eth_keys_controller_test.go: `c.EVM[0].NonceAutoSync = ptr(false)`
$DIR/core/web/eth_keys_controller_test.go: `c.EVM[0].BalanceMonitor.Enabled = ptr(false)`
$DIR/core/web/eth_keys_controller_test.go: `.Context(t)`
$DIR/core/web/eth_keys_controller_test.go: `.NewEthMocksWithStartupAssertions(t)`
$DIR/core/web/eth_keys_controller_test.go: `.On("PendingNonceAt", mock.Anything, mock.Anything)`
$DIR/core/web/eth_keys_controller_test.go: `.Return(uint64(0), nil)`
$DIR/core/web/eth_keys_controller_test.go: `.NewGeneralConfig(t, func(c *chainlink.Config, s *chainlink.Secrets) {
c.EVM[0].NonceAutoSync = ptr(false)
c.EVM[0].BalanceMonitor.Enabled = ptr(false)
})`
$DIR/core/web/eth_keys_controller_test.go: `.NewApplicationWithConfig(t, cfg, ethClient)`
$DIR/core/web/eth_keys_controller_test.go: `.MustInsertRandomKey(t, app.KeyStore.Eth())`
$DIR/core/web/eth_keys_controller_test.go: `.KeyStore.Eth()`
$DIR/core/web/eth_keys_controller_test.go: `.MustInsert(t, app.KeyStore.Eth())`
$DIR/core/web/eth_keys_controller_test.go: `.KeyStore.Eth()`
$DIR/core/web/eth_keys_controller_test.go: `.MustInsert(t, app.KeyStore.Eth())`
$DIR/core/web/eth_keys_controller_test.go: `.KeyStore.Eth()`
$DIR/core/web/eth_keys_controller_test.go: `.On("BalanceAt", mock.Anything, addr0, mock.Anything)`
$DIR/core/web/eth_keys_controller_test.go: `.Return(big.NewInt(256), nil)`
$DIR/core/web/eth_keys_controller_test.go: `.NewInt(256)`
$DIR/core/web/eth_keys_controller_test.go: `.Once()`
$DIR/core/web/eth_keys_controller_test.go: `.On("BalanceAt", mock.Anything, addr1, mock.Anything)`
$DIR/core/web/eth_keys_controller_test.go: `.Return(big.NewInt(1), nil)`
$DIR/core/web/eth_keys_controller_test.go: `.NewInt(1)`
$DIR/core/web/eth_keys_controller_test.go: `.Once()`
$DIR/core/web/eth_keys_controller_test.go: `.On("BalanceAt", mock.Anything, addr2, mock.Anything)`
$DIR/core/web/eth_keys_controller_test.go: `.Return(big.NewInt(1), nil)`
$DIR/core/web/eth_keys_controller_test.go: `.NewInt(1)`
$DIR/core/web/eth_keys_controller_test.go: `.Once()`
$DIR/core/web/eth_keys_controller_test.go: `.On("LINKBalance", mock.Anything, addr0, mock.Anything)`
$DIR/core/web/eth_keys_controller_test.go: `.Return(assets.NewLinkFromJuels(256), nil)`
$DIR/core/web/eth_keys_controller_test.go: `.NewLinkFromJuels(256)`
$DIR/core/web/eth_keys_controller_test.go: `.Once()`
$DIR/core/web/eth_keys_controller_test.go: `.On("LINKBalance", mock.Anything, addr1, mock.Anything)`
$DIR/core/web/eth_keys_controller_test.go: `.Return(assets.NewLinkFromJuels(1), nil)`
$DIR/core/web/eth_keys_controller_test.go: `.NewLinkFromJuels(1)`
$DIR/core/web/eth_keys_controller_test.go: `.Once()`
$DIR/core/web/eth_keys_controller_test.go: `.On("LINKBalance", mock.Anything, addr2, mock.Anything)`
$DIR/core/web/eth_keys_controller_test.go: `.Return(assets.NewLinkFromJuels(1), nil)`
$DIR/core/web/eth_keys_controller_test.go: `.NewLinkFromJuels(1)`
$DIR/core/web/eth_keys_controller_test.go: `.Once()`
$DIR/core/web/eth_keys_controller_test.go: `.NewHTTPClient(nil)`
$DIR/core/web/eth_keys_controller_test.go: `.Get("/v2/keys/evm")`
$DIR/core/web/eth_keys_controller_test.go: `.ParseJSONAPIResponse(t, resp, &actualBalances)`
$DIR/core/web/eth_keys_controller_test.go: `.Address.Hex()`
$DIR/core/web/eth_keys_controller_test.go: `.Context(t)`
$DIR/core/web/eth_keys_controller_test.go: `.NewEthMocksWithStartupAssertions(t)`
$DIR/core/web/eth_keys_controller_test.go: `.On("PendingNonceAt", mock.Anything, mock.Anything)`
$DIR/core/web/eth_keys_controller_test.go: `.Return(uint64(0), nil)`
$DIR/core/web/eth_keys_controller_test.go: `.NewGeneralConfig(t, func(c *chainlink.Config, s *chainlink.Secrets) {
c.EVM[0].NonceAutoSync = ptr(false)
c.EVM[0].BalanceMonitor.Enabled = ptr(false)
})`
$DIR/core/web/eth_keys_controller_test.go: `.NewApplicationWithConfig(t, cfg, ethClient)`
$DIR/core/web/eth_keys_controller_test.go: `.MustInsertRandomKey(t, app.KeyStore.Eth())`
$DIR/core/web/eth_keys_controller_test.go: `.KeyStore.Eth()`
$DIR/core/web/eth_keys_controller_test.go: `.On("BalanceAt", mock.Anything, addr, mock.Anything)`
$DIR/core/web/eth_keys_controller_test.go: `.Return(nil, errors.New("fake error"))`
$DIR/core/web/eth_keys_controller_test.go: `.New("fake error")`
$DIR/core/web/eth_keys_controller_test.go: `.Once()`
$DIR/core/web/eth_keys_controller_test.go: `.On("LINKBalance", mock.Anything, addr, mock.Anything)`
$DIR/core/web/eth_keys_controller_test.go: `.Return(nil, errors.New("fake error"))`
$DIR/core/web/eth_keys_controller_test.go: `.New("fake error")`
$DIR/core/web/eth_keys_controller_test.go: `.Once()`
$DIR/core/web/eth_keys_controller_test.go: `.NewHTTPClient(nil)`
$DIR/core/web/eth_keys_controller_test.go: `.Get("/v2/keys/eth")`
$DIR/core/web/eth_keys_controller_test.go: `.ParseJSONAPIResponse(t, resp, &actualBalances)`
$DIR/core/web/eth_keys_controller_test.go: `.MaxGasPriceWei.String()`
$DIR/core/web/eth_keys_controller_test.go: `.Context(t)`
$DIR/core/web/eth_keys_controller_test.go: `.NewEthMocksWithStartupAssertions(t)`
$DIR/core/web/eth_keys_controller_test.go: `.NewGeneralConfig(t, func(c *chainlink.Config, s *chainlink.Secrets) {
c.EVM[0].Enabled = ptr(false)
})`
$DIR/core/web/eth_keys_controller_test.go: `.NewApplicationWithConfig(t, cfg, ethClient)`
$DIR/core/web/eth_keys_controller_test.go: `.MustInsertRandomKey(t, app.KeyStore.Eth())`
$DIR/core/web/eth_keys_controller_test.go: `.KeyStore.Eth()`
$DIR/core/web/eth_keys_controller_test.go: `.NewHTTPClient(nil)`
$DIR/core/web/eth_keys_controller_test.go: `.Get("/v2/keys/eth")`
$DIR/core/web/eth_keys_controller_test.go: `.ParseJSONAPIResponse(t, resp, &actualBalances)`
$DIR/core/web/eth_keys_controller_test.go: `.NewEthMocksWithStartupAssertions(t)`
$DIR/core/web/eth_keys_controller_test.go: `.On("PendingNonceAt", mock.Anything, mock.Anything)`
$DIR/core/web/eth_keys_controller_test.go: `.Return(uint64(0), nil)`
$DIR/core/web/eth_keys_controller_test.go: `.NewGeneralConfig(t, func(c *chainlink.Config, s *chainlink.Secrets) {
c.EVM[0].NonceAutoSync = ptr(false)
c.EVM[0].BalanceMonitor.Enabled = ptr(false)
c.EVM[0].GasEstimator.Mode = ptr("FixedPrice")
})`
$DIR/core/web/eth_keys_controller_test.go: `.On("BalanceAt", mock.Anything, mock.Anything, mock.Anything)`
$DIR/core/web/eth_keys_controller_test.go: `.Return(big.NewInt(256), nil)`
$DIR/core/web/eth_keys_controller_test.go: `.NewInt(256)`
$DIR/core/web/eth_keys_controller_test.go: `.Once()`
$DIR/core/web/eth_keys_controller_test.go: `.On("LINKBalance", mock.Anything, mock.Anything, mock.Anything)`
$DIR/core/web/eth_keys_controller_test.go: `.Return(assets.NewLinkFromJuels(256), nil)`
$DIR/core/web/eth_keys_controller_test.go: `.NewLinkFromJuels(256)`
$DIR/core/web/eth_keys_controller_test.go: `.Once()`
$DIR/core/web/eth_keys_controller_test.go: `.NewApplicationWithConfigAndKey(t, cfg, ethClient)`
$DIR/core/web/eth_keys_controller_test.go: `.Context(t)`
$DIR/core/web/eth_keys_controller_test.go: `.NewHTTPClient(nil)`
$DIR/core/web/eth_keys_controller_test.go: `.Get("/v2/keys/eth")`
$DIR/core/web/eth_keys_controller_test.go: `.KeyStore.Eth()`
$DIR/core/web/eth_keys_controller_test.go: `.GetAll(testutils.Context(t))`
$DIR/core/web/eth_keys_controller_test.go: `.Context(t)`
$DIR/core/web/eth_keys_controller_test.go: `.ParseJSONAPIResponse(t, resp, &actualBalances)`
$DIR/core/web/eth_keys_controller_test.go: `.LinkBalance.String()`
$DIR/core/web/eth_keys_controller_test.go: `.NewApplication(t)`
$DIR/core/web/eth_keys_controller_test.go: `.Context(t)`
$DIR/core/web/eth_keys_controller_test.go: `.NewHTTPClient(nil)`
$DIR/core/web/eth_keys_controller_test.go: `.Get("/v2/keys/eth")`
$DIR/core/web/eth_keys_controller_test.go: `.ParseJSONAPIResponse(t, resp, &balances)`
$DIR/core/web/eth_keys_controller_test.go: `.NewGeneralConfig(t, func(c *chainlink.Config, s *chainlink.Secrets) {
c.EVM[0].BalanceMonitor.Enabled = ptr(false)
})`
$DIR/core/web/eth_keys_controller_test.go: `.NewEthClientMockWithDefaultChain(t)`
$DIR/core/web/eth_keys_controller_test.go: `.NewApplicationWithConfigAndKey(t, config, ethClient)`
$DIR/core/web/eth_keys_controller_test.go: `.NewSubscription(t)`
$DIR/core/web/eth_keys_controller_test.go: `.MockApplicationEthCalls(t, app, ethClient, sub)`
$DIR/core/web/eth_keys_controller_test.go: `.NewInt(100)`
$DIR/core/web/eth_keys_controller_test.go: `.On("BalanceAt", mock.Anything, mock.Anything, mock.Anything)`
$DIR/core/web/eth_keys_controller_test.go: `.Return(ethBalanceInt, nil)`
$DIR/core/web/eth_keys_controller_test.go: `.NewLinkFromJuels(42)`
$DIR/core/web/eth_keys_controller_test.go: `.On("LINKBalance", mock.Anything, mock.Anything, mock.Anything)`
$DIR/core/web/eth_keys_controller_test.go: `.Return(linkBalance, nil)`
$DIR/core/web/eth_keys_controller_test.go: `.NewHTTPClient(nil)`
$DIR/core/web/eth_keys_controller_test.go: `.Context(t)`
$DIR/core/web/eth_keys_controller_test.go: `.Query()`
$DIR/core/web/eth_keys_controller_test.go: `.Set("evmChainID", cltest.FixtureChainID.String())`
$DIR/core/web/eth_keys_controller_test.go: `.FixtureChainID.String()`
$DIR/core/web/eth_keys_controller_test.go: `.Encode()`
$DIR/core/web/eth_keys_controller_test.go: `.Post(chainURL.String(), nil)`
$DIR/core/web/eth_keys_controller_test.go: `.String()`
$DIR/core/web/eth_keys_controller_test.go: `.AssertServerResponse(t, resp, http.StatusOK)`
$DIR/core/web/eth_keys_controller_test.go: `.ParseJSONAPIResponse(t, resp, &balance)`
$DIR/core/web/eth_keys_controller_test.go: `.MaxGasPriceWei.String()`
$DIR/core/web/eth_keys_controller_test.go: `.Context(t)`
$DIR/core/web/eth_keys_controller_test.go: `.NewEthMocksWithStartupAssertions(t)`
$DIR/core/web/eth_keys_controller_test.go: `.On("PendingNonceAt", mock.Anything, mock.Anything)`
$DIR/core/web/eth_keys_controller_test.go: `.Return(uint64(0), nil)`
$DIR/core/web/eth_keys_controller_test.go: `.NewGeneralConfig(t, func(c *chainlink.Config, s *chainlink.Secrets) {
c.EVM[0].NonceAutoSync = ptr(false)
c.EVM[0].BalanceMonitor.Enabled = ptr(false)
})`
$DIR/core/web/eth_keys_controller_test.go: `.NewApplicationWithConfig(t, cfg, ethClient)`
$DIR/core/web/eth_keys_controller_test.go: `.MustInsertRandomKey(t, app.KeyStore.Eth())`
$DIR/core/web/eth_keys_controller_test.go: `.KeyStore.Eth()`
$DIR/core/web/eth_keys_controller_test.go: `.On("BalanceAt", mock.Anything, addr, mock.Anything)`
$DIR/core/web/eth_keys_controller_test.go: `.Return(big.NewInt(1), nil)`
$DIR/core/web/eth_keys_controller_test.go: `.NewInt(1)`
$DIR/core/web/eth_keys_controller_test.go: `.Once()`
$DIR/core/web/eth_keys_controller_test.go: `.On("LINKBalance", mock.Anything, addr, mock.Anything)`
$DIR/core/web/eth_keys_controller_test.go: `.Return(assets.NewLinkFromJuels(1), nil)`
$DIR/core/web/eth_keys_controller_test.go: `.NewLinkFromJuels(1)`
$DIR/core/web/eth_keys_controller_test.go: `.Once()`
$DIR/core/web/eth_keys_controller_test.go: `.NewHTTPClient(nil)`
$DIR/core/web/eth_keys_controller_test.go: `.Query()`
$DIR/core/web/eth_keys_controller_test.go: `.Set("address", addr.Hex())`
$DIR/core/web/eth_keys_controller_test.go: `.Hex()`
$DIR/core/web/eth_keys_controller_test.go: `.Set("evmChainID", cltest.FixtureChainID.String())`
$DIR/core/web/eth_keys_controller_test.go: `.FixtureChainID.String()`
$DIR/core/web/eth_keys_controller_test.go: `.Encode()`
$DIR/core/web/eth_keys_controller_test.go: `.Post(chainURL.String(), nil)`
$DIR/core/web/eth_keys_controller_test.go: `.String()`
$DIR/core/web/eth_keys_controller_test.go: `.ParseJSONAPIResponse(t, resp, &updatedKey)`
$DIR/core/web/eth_keys_controller_test.go: `.Context(t)`
$DIR/core/web/eth_keys_controller_test.go: `.NewEthMocksWithStartupAssertions(t)`
$DIR/core/web/eth_keys_controller_test.go: `.On("PendingNonceAt", mock.Anything, mock.Anything)`
$DIR/core/web/eth_keys_controller_test.go: `.Return(uint64(0), nil)`
$DIR/core/web/eth_keys_controller_test.go: `.NewGeneralConfig(t, func(c *chainlink.Config, s *chainlink.Secrets) {
c.EVM[0].NonceAutoSync = ptr(false)
c.EVM[0].BalanceMonitor.Enabled = ptr(false)
})`
$DIR/core/web/eth_keys_controller_test.go: `.NewApplicationWithConfig(t, cfg, ethClient)`
$DIR/core/web/eth_keys_controller_test.go: `.MustInsertRandomKey(t, app.KeyStore.Eth())`
$DIR/core/web/eth_keys_controller_test.go: `.KeyStore.Eth()`
$DIR/core/web/eth_keys_controller_test.go: `.On("BalanceAt", mock.Anything, addr, mock.Anything)`
$DIR/core/web/eth_keys_controller_test.go: `.Return(big.NewInt(1), nil)`
$DIR/core/web/eth_keys_controller_test.go: `.NewInt(1)`
$DIR/core/web/eth_keys_controller_test.go: `.Once()`
$DIR/core/web/eth_keys_controller_test.go: `.On("LINKBalance", mock.Anything, addr, mock.Anything)`
$DIR/core/web/eth_keys_controller_test.go: `.Return(assets.NewLinkFromJuels(1), nil)`
$DIR/core/web/eth_keys_controller_test.go: `.NewLinkFromJuels(1)`
$DIR/core/web/eth_keys_controller_test.go: `.Once()`
$DIR/core/web/eth_keys_controller_test.go: `.NewHTTPClient(nil)`
$DIR/core/web/eth_keys_controller_test.go: `.Query()`
$DIR/core/web/eth_keys_controller_test.go: `.Set("address", addr.Hex())`
$DIR/core/web/eth_keys_controller_test.go: `.Hex()`
$DIR/core/web/eth_keys_controller_test.go: `.Set("evmChainID", cltest.FixtureChainID.String())`
$DIR/core/web/eth_keys_controller_test.go: `.FixtureChainID.String()`
$DIR/core/web/eth_keys_controller_test.go: `.Set("enabled", enabled)`
$DIR/core/web/eth_keys_controller_test.go: `.Encode()`
$DIR/core/web/eth_keys_controller_test.go: `.Post(chainURL.String(), nil)`
$DIR/core/web/eth_keys_controller_test.go: `.String()`
$DIR/core/web/eth_keys_controller_test.go: `.ParseJSONAPIResponse(t, resp, &updatedKey)`
$DIR/core/web/eth_keys_controller_test.go: `.Context(t)`
$DIR/core/web/eth_keys_controller_test.go: `.NewEthMocksWithStartupAssertions(t)`
$DIR/core/web/eth_keys_controller_test.go: `.NewGeneralConfig(t, func(c *chainlink.Config, s *chainlink.Secrets) {
c.EVM[0].NonceAutoSync = ptr(false)
c.EVM[0].BalanceMonitor.Enabled = ptr(false)
})`
$DIR/core/web/eth_keys_controller_test.go: `.NewApplicationWithConfig(t, cfg, ethClient)`
$DIR/core/web/eth_keys_controller_test.go: `.MustInsert(t, app.KeyStore.Eth())`
$DIR/core/web/eth_keys_controller_test.go: `.KeyStore.Eth()`
$DIR/core/web/eth_keys_controller_test.go: `.On("BalanceAt", mock.Anything, addr, mock.Anything)`
$DIR/core/web/eth_keys_controller_test.go: `.Return(big.NewInt(1), nil)`
$DIR/core/web/eth_keys_controller_test.go: `.NewInt(1)`
$DIR/core/web/eth_keys_controller_test.go: `.Once()`
$DIR/core/web/eth_keys_controller_test.go: `.On("LINKBalance", mock.Anything, addr, mock.Anything)`
$DIR/core/web/eth_keys_controller_test.go: `.Return(assets.NewLinkFromJuels(1), nil)`
$DIR/core/web/eth_keys_controller_test.go: `.NewLinkFromJuels(1)`
$DIR/core/web/eth_keys_controller_test.go: `.Once()`
$DIR/core/web/eth_keys_controller_test.go: `.NewHTTPClient(nil)`
$DIR/core/web/eth_keys_controller_test.go: `.Query()`
$DIR/core/web/eth_keys_controller_test.go: `.Set("address", addr.Hex())`
$DIR/core/web/eth_keys_controller_test.go: `.Hex()`
$DIR/core/web/eth_keys_controller_test.go: `.Set("evmChainID", cltest.FixtureChainID.String())`
$DIR/core/web/eth_keys_controller_test.go: `.FixtureChainID.String()`
$DIR/core/web/eth_keys_controller_test.go: `.Set("enabled", enabled)`
$DIR/core/web/eth_keys_controller_test.go: `.Encode()`
$DIR/core/web/eth_keys_controller_test.go: `.Post(chainURL.String(), nil)`
$DIR/core/web/eth_keys_controller_test.go: `.String()`
$DIR/core/web/eth_keys_controller_test.go: `.ParseJSONAPIResponse(t, resp, &updatedKey)`
$DIR/core/web/eth_keys_controller_test.go: `.Context(t)`
$DIR/core/web/eth_keys_controller_test.go: `.NewEthMocksWithStartupAssertions(t)`
$DIR/core/web/eth_keys_controller_test.go: `.On("PendingNonceAt", mock.Anything, mock.Anything)`
$DIR/core/web/eth_keys_controller_test.go: `.Return(uint64(0), nil)`
$DIR/core/web/eth_keys_controller_test.go: `.NewGeneralConfig(t, func(c *chainlink.Config, s *chainlink.Secrets) {
c.EVM[0].NonceAutoSync = ptr(false)
c.EVM[0].BalanceMonitor.Enabled = ptr(false)
})`
$DIR/core/web/eth_keys_controller_test.go: `.NewApplicationWithConfig(t, cfg, ethClient)`
$DIR/core/web/eth_keys_controller_test.go: `.MustInsertRandomKey(t, app.KeyStore.Eth())`
$DIR/core/web/eth_keys_controller_test.go: `.KeyStore.Eth()`
$DIR/core/web/eth_keys_controller_test.go: `.On("BalanceAt", mock.Anything, addr, mock.Anything)`
$DIR/core/web/eth_keys_controller_test.go: `.Return(big.NewInt(1), nil)`
$DIR/core/web/eth_keys_controller_test.go: `.NewInt(1)`
$DIR/core/web/eth_keys_controller_test.go: `.Once()`
$DIR/core/web/eth_keys_controller_test.go: `.On("LINKBalance", mock.Anything, addr, mock.Anything)`
$DIR/core/web/eth_keys_controller_test.go: `.Return(assets.NewLinkFromJuels(1), nil)`
$DIR/core/web/eth_keys_controller_test.go: `.NewLinkFromJuels(1)`
$DIR/core/web/eth_keys_controller_test.go: `.Once()`
$DIR/core/web/eth_keys_controller_test.go: `.GetRelayers()`
$DIR/core/web/eth_keys_controller_test.go: `.LegacyEVMChains()`
$DIR/core/web/eth_keys_controller_test.go: `.Slice()`
$DIR/core/web/eth_keys_controller_test.go: `.New()`
$DIR/core/web/eth_keys_controller_test.go: `.NewTxStrategy(t)`
$DIR/core/web/eth_keys_controller_test.go: `.On("Subject")`
$DIR/core/web/eth_keys_controller_test.go: `.Return(uuid.NullUUID{UUID: subject, Valid: true})`
$DIR/core/web/eth_keys_controller_test.go: `.On("PruneQueue", mock.Anything, mock.AnythingOfType("*txmgr.evmTxStore"))`
$DIR/core/web/eth_keys_controller_test.go: `.AnythingOfType("*txmgr.evmTxStore")`
$DIR/core/web/eth_keys_controller_test.go: `.Return(nil, nil)`
$DIR/core/web/eth_keys_controller_test.go: `.TxManager()`
$DIR/core/web/eth_keys_controller_test.go: `.CreateTransaction(testutils.Context(t), txmgr.TxRequest{
FromAddress: addr,
ToAddress: testutils.NewAddress(),
EncodedPayload: []byte{1, 2, 3},
FeeLimit: uint64(1000),
Meta: nil,
Strategy: strategy,
})`
$DIR/core/web/eth_keys_controller_test.go: `.Context(t)`
$DIR/core/web/eth_keys_controller_test.go: `.NewAddress()`
$DIR/core/web/eth_keys_controller_test.go: `.NewTxStore(app.GetDB(), logger.TestLogger(t))`
$DIR/core/web/eth_keys_controller_test.go: `.GetDB()`
$DIR/core/web/eth_keys_controller_test.go: `.TestLogger(t)`
$DIR/core/web/eth_keys_controller_test.go: `.FindTxesByFromAddressAndState(testutils.Context(t), addr, "fatal_error")`
$DIR/core/web/eth_keys_controller_test.go: `.Context(t)`
$DIR/core/web/eth_keys_controller_test.go: `.NewHTTPClient(nil)`
$DIR/core/web/eth_keys_controller_test.go: `.Query()`
$DIR/core/web/eth_keys_controller_test.go: `.Set("address", addr.Hex())`
$DIR/core/web/eth_keys_controller_test.go: `.Hex()`
$DIR/core/web/eth_keys_controller_test.go: `.Set("evmChainID", cltest.FixtureChainID.String())`
$DIR/core/web/eth_keys_controller_test.go: `.FixtureChainID.String()`
$DIR/core/web/eth_keys_controller_test.go: `.Set("abandon", "true")`
$DIR/core/web/eth_keys_controller_test.go: `.Encode()`
$DIR/core/web/eth_keys_controller_test.go: `.Post(chainURL.String(), nil)`
$DIR/core/web/eth_keys_controller_test.go: `.String()`
$DIR/core/web/eth_keys_controller_test.go: `.ParseJSONAPIResponse(t, resp, &updatedKey)`
$DIR/core/web/eth_keys_controller_test.go: `.FindTxesByFromAddressAndState(testutils.Context(t), addr, "fatal_error")`
$DIR/core/web/eth_keys_controller_test.go: `.Context(t)`
$DIR/core/web/eth_keys_controller_test.go: `.Context(t)`
$DIR/core/web/eth_keys_controller_test.go: `.NewEthMocksWithStartupAssertions(t)`
$DIR/core/web/eth_keys_controller_test.go: `.On("PendingNonceAt", mock.Anything, mock.Anything)`
$DIR/core/web/eth_keys_controller_test.go: `.Return(uint64(0), nil)`
$DIR/core/web/eth_keys_controller_test.go: `.NewGeneralConfig(t, func(c *chainlink.Config, s *chainlink.Secrets) {
c.EVM[0].NonceAutoSync = ptr(false)
c.EVM[0].BalanceMonitor.Enabled = ptr(false)
})`
$DIR/core/web/eth_keys_controller_test.go: `.NewApplicationWithConfig(t, cfg, ethClient)`
$DIR/core/web/eth_keys_controller_test.go: `.MustInsertRandomKey(t, app.KeyStore.Eth())`
$DIR/core/web/eth_keys_controller_test.go: `.KeyStore.Eth()`
$DIR/core/web/eth_keys_controller_test.go: `.NewHTTPClient(nil)`
$DIR/core/web/eth_keys_controller_test.go: `.Query()`
$DIR/core/web/eth_keys_controller_test.go: `.Set("address", addr.Hex())`
$DIR/core/web/eth_keys_controller_test.go: `.Hex()`
$DIR/core/web/eth_keys_controller_test.go: `.Set("evmChainID", cltest.FixtureChainID.String())`
$DIR/core/web/eth_keys_controller_test.go: `.FixtureChainID.String()`
$DIR/core/web/eth_keys_controller_test.go: `.Set("abandon", "invalid")`
$DIR/core/web/eth_keys_controller_test.go: `.Encode()`
$DIR/core/web/eth_keys_controller_test.go: `.Post(chainURL.String(), nil)`
$DIR/core/web/eth_keys_controller_test.go: `.String()`
$DIR/core/web/eth_keys_controller_test.go: `.Context(t)`
$DIR/core/web/eth_keys_controller_test.go: `.NewEthMocksWithStartupAssertions(t)`
$DIR/core/web/eth_keys_controller_test.go: `.On("PendingNonceAt", mock.Anything, mock.Anything)`
$DIR/core/web/eth_keys_controller_test.go: `.Return(uint64(0), nil)`
$DIR/core/web/eth_keys_controller_test.go: `.NewGeneralConfig(t, func(c *chainlink.Config, s *chainlink.Secrets) {
c.EVM[0].NonceAutoSync = ptr(false)
c.EVM[0].BalanceMonitor.Enabled = ptr(false)
})`
$DIR/core/web/eth_keys_controller_test.go: `.NewApplicationWithConfig(t, cfg, ethClient)`
$DIR/core/web/eth_keys_controller_test.go: `.MustInsertRandomKey(t, app.KeyStore.Eth())`
$DIR/core/web/eth_keys_controller_test.go: `.KeyStore.Eth()`
$DIR/core/web/eth_keys_controller_test.go: `.NewHTTPClient(nil)`
$DIR/core/web/eth_keys_controller_test.go: `.Query()`
$DIR/core/web/eth_keys_controller_test.go: `.Set("address", addr.Hex())`
$DIR/core/web/eth_keys_controller_test.go: `.Hex()`
$DIR/core/web/eth_keys_controller_test.go: `.Set("evmChainID", cltest.FixtureChainID.String())`
$DIR/core/web/eth_keys_controller_test.go: `.FixtureChainID.String()`
$DIR/core/web/eth_keys_controller_test.go: `.Set("enabled", "invalid")`
$DIR/core/web/eth_keys_controller_test.go: `.Encode()`
$DIR/core/web/eth_keys_controller_test.go: `.Post(chainURL.String(), nil)`
$DIR/core/web/eth_keys_controller_test.go: `.String()`
$DIR/core/web/eth_keys_controller_test.go: `.Context(t)`
$DIR/core/web/eth_keys_controller_test.go: `.NewEthMocksWithStartupAssertions(t)`
$DIR/core/web/eth_keys_controller_test.go: `.NewGeneralConfig(t, func(c *chainlink.Config, s *chainlink.Secrets) {
c.EVM[0].NonceAutoSync = ptr(false)
c.EVM[0].BalanceMonitor.Enabled = ptr(false)
})`
$DIR/core/web/eth_keys_controller_test.go: `.NewApplicationWithConfig(t, cfg, ethClient)`
$DIR/core/web/eth_keys_controller_test.go: `.NewHTTPClient(nil)`
$DIR/core/web/eth_keys_controller_test.go: `.Query()`
$DIR/core/web/eth_keys_controller_test.go: `.Set("address", "invalid address")`
$DIR/core/web/eth_keys_controller_test.go: `.Set("evmChainID", cltest.FixtureChainID.String())`
$DIR/core/web/eth_keys_controller_test.go: `.FixtureChainID.String()`
$DIR/core/web/eth_keys_controller_test.go: `.Encode()`
$DIR/core/web/eth_keys_controller_test.go: `.Post(chainURL.String(), nil)`
$DIR/core/web/eth_keys_controller_test.go: `.String()`
$DIR/core/web/eth_keys_controller_test.go: `.Context(t)`
$DIR/core/web/eth_keys_controller_test.go: `.NewEthMocksWithStartupAssertions(t)`
$DIR/core/web/eth_keys_controller_test.go: `.NewGeneralConfig(t, func(c *chainlink.Config, s *chainlink.Secrets) {
c.EVM[0].NonceAutoSync = ptr(false)
c.EVM[0].BalanceMonitor.Enabled = ptr(false)
})`
$DIR/core/web/eth_keys_controller_test.go: `.NewApplicationWithConfig(t, cfg, ethClient)`
$DIR/core/web/eth_keys_controller_test.go: `.NewHTTPClient(nil)`
$DIR/core/web/eth_keys_controller_test.go: `.Query()`
$DIR/core/web/eth_keys_controller_test.go: `.Set("address", testutils.NewAddress().Hex())`
$DIR/core/web/eth_keys_controller_test.go: `.NewAddress()`
$DIR/core/web/eth_keys_controller_test.go: `.Hex()`
$DIR/core/web/eth_keys_controller_test.go: `.Set("evmChainID", cltest.FixtureChainID.String())`
$DIR/core/web/eth_keys_controller_test.go: `.FixtureChainID.String()`
$DIR/core/web/eth_keys_controller_test.go: `.Encode()`
$DIR/core/web/eth_keys_controller_test.go: `.Post(chainURL.String(), nil)`
$DIR/core/web/eth_keys_controller_test.go: `.String()`
$DIR/core/web/eth_keys_controller_test.go: `.Context(t)`
$DIR/core/web/eth_keys_controller_test.go: `.NewEthMocksWithStartupAssertions(t)`
$DIR/core/web/eth_keys_controller_test.go: `.NewGeneralConfig(t, func(c *chainlink.Config, s *chainlink.Secrets) {
c.EVM[0].NonceAutoSync = ptr(false)
c.EVM[0].BalanceMonitor.Enabled = ptr(false)
})`
$DIR/core/web/eth_keys_controller_test.go: `.NewApplicationWithConfig(t, cfg, ethClient)`
$DIR/core/web/eth_keys_controller_test.go: `.NewHTTPClient(nil)`
$DIR/core/web/eth_keys_controller_test.go: `.Query()`
$DIR/core/web/eth_keys_controller_test.go: `.Set("address", testutils.NewAddress().Hex())`
$DIR/core/web/eth_keys_controller_test.go: `.NewAddress()`
$DIR/core/web/eth_keys_controller_test.go: `.Hex()`
$DIR/core/web/eth_keys_controller_test.go: `.Set("evmChainID", "bad chain ID")`
$DIR/core/web/eth_keys_controller_test.go: `.Encode()`
$DIR/core/web/eth_keys_controller_test.go: `.Post(chainURL.String(), nil)`
$DIR/core/web/eth_keys_controller_test.go: `.String()`
$DIR/core/web/eth_keys_controller_test.go: `.Context(t)`
$DIR/core/web/eth_keys_controller_test.go: `.NewEthMocksWithStartupAssertions(t)`
$DIR/core/web/eth_keys_controller_test.go: `.On("PendingNonceAt", mock.Anything, mock.Anything)`
$DIR/core/web/eth_keys_controller_test.go: `.Return(uint64(0), nil)`
$DIR/core/web/eth_keys_controller_test.go: `.NewGeneralConfig(t, func(c *chainlink.Config, s *chainlink.Secrets) {
c.EVM[0].NonceAutoSync = ptr(false)
c.EVM[0].BalanceMonitor.Enabled = ptr(false)
})`
$DIR/core/web/eth_keys_controller_test.go: `.NewApplicationWithConfig(t, cfg, ethClient)`
$DIR/core/web/eth_keys_controller_test.go: `.MustInsertRandomKey(t, app.KeyStore.Eth())`
$DIR/core/web/eth_keys_controller_test.go: `.KeyStore.Eth()`
$DIR/core/web/eth_keys_controller_test.go: `.NewHTTPClient(nil)`
$DIR/core/web/eth_keys_controller_test.go: `.Query()`
$DIR/core/web/eth_keys_controller_test.go: `.Set("address", addr.Hex())`
$DIR/core/web/eth_keys_controller_test.go: `.Hex()`
$DIR/core/web/eth_keys_controller_test.go: `.Set("evmChainID", "123456789")`
$DIR/core/web/eth_keys_controller_test.go: `.Encode()`
$DIR/core/web/eth_keys_controller_test.go: `.Post(chainURL.String(), nil)`
$DIR/core/web/eth_keys_controller_test.go: `.String()`
$DIR/core/web/eth_keys_controller_test.go: `.Context(t)`
$DIR/core/web/eth_keys_controller_test.go: `.NewEthMocksWithStartupAssertions(t)`
$DIR/core/web/eth_keys_controller_test.go: `.On("PendingNonceAt", mock.Anything, mock.Anything)`
$DIR/core/web/eth_keys_controller_test.go: `.Return(uint64(0), nil)`
$DIR/core/web/eth_keys_controller_test.go: `.NewGeneralConfig(t, func(c *chainlink.Config, s *chainlink.Secrets) {
c.EVM[0].NonceAutoSync = ptr(false)
c.EVM[0].BalanceMonitor.Enabled = ptr(false)
})`
$DIR/core/web/eth_keys_controller_test.go: `.NewApplicationWithConfig(t, cfg, ethClient)`
$DIR/core/web/eth_keys_controller_test.go: `.MustInsertRandomKey(t, app.KeyStore.Eth())`
$DIR/core/web/eth_keys_controller_test.go: `.KeyStore.Eth()`
$DIR/core/web/eth_keys_controller_test.go: `.MustInsertRandomKey(t, app.KeyStore.Eth())`
$DIR/core/web/eth_keys_controller_test.go: `.KeyStore.Eth()`
$DIR/core/web/eth_keys_controller_test.go: `.On("BalanceAt", mock.Anything, addr0, mock.Anything)`
$DIR/core/web/eth_keys_controller_test.go: `.Return(big.NewInt(1), nil)`
$DIR/core/web/eth_keys_controller_test.go: `.NewInt(1)`
$DIR/core/web/eth_keys_controller_test.go: `.Once()`
$DIR/core/web/eth_keys_controller_test.go: `.On("BalanceAt", mock.Anything, addr1, mock.Anything)`
$DIR/core/web/eth_keys_controller_test.go: `.Return(big.NewInt(1), nil)`
$DIR/core/web/eth_keys_controller_test.go: `.NewInt(1)`
$DIR/core/web/eth_keys_controller_test.go: `.Once()`
$DIR/core/web/eth_keys_controller_test.go: `.On("LINKBalance", mock.Anything, addr0, mock.Anything)`
$DIR/core/web/eth_keys_controller_test.go: `.Return(assets.NewLinkFromJuels(1), nil)`
$DIR/core/web/eth_keys_controller_test.go: `.NewLinkFromJuels(1)`
$DIR/core/web/eth_keys_controller_test.go: `.Once()`
$DIR/core/web/eth_keys_controller_test.go: `.On("LINKBalance", mock.Anything, addr1, mock.Anything)`
$DIR/core/web/eth_keys_controller_test.go: `.Return(assets.NewLinkFromJuels(1), nil)`
$DIR/core/web/eth_keys_controller_test.go: `.NewLinkFromJuels(1)`
$DIR/core/web/eth_keys_controller_test.go: `.Once()`
$DIR/core/web/eth_keys_controller_test.go: `.NewHTTPClient(nil)`
$DIR/core/web/eth_keys_controller_test.go: `.Hex()`
$DIR/core/web/eth_keys_controller_test.go: `.Delete(chainURL.String())`
$DIR/core/web/eth_keys_controller_test.go: `.String()`
$DIR/core/web/eth_keys_controller_test.go: `.ParseJSONAPIResponse(t, resp, &deletedKey)`
$DIR/core/web/eth_keys_controller_test.go: `.Get("/v2/keys/evm")`
$DIR/core/web/eth_keys_controller_test.go: `.ParseJSONAPIResponse(t, resp, &actualBalances)`
$DIR/core/web/eth_keys_controller_test.go: `.String()`
$DIR/core/web/eth_keys_controller_test.go: `.Context(t)`
$DIR/core/web/eth_keys_controller_test.go: `.NewEthMocksWithStartupAssertions(t)`
$DIR/core/web/eth_keys_controller_test.go: `.NewGeneralConfig(t, func(c *chainlink.Config, s *chainlink.Secrets) {
c.EVM[0].NonceAutoSync = ptr(false)
c.EVM[0].BalanceMonitor.Enabled = ptr(false)
})`
$DIR/core/web/eth_keys_controller_test.go: `.NewApplicationWithConfig(t, cfg, ethClient)`
$DIR/core/web/eth_keys_controller_test.go: `.NewHTTPClient(nil)`
$DIR/core/web/eth_keys_controller_test.go: `.Delete(chainURL.String())`
$DIR/core/web/eth_keys_controller_test.go: `.String()`
$DIR/core/web/eth_keys_controller_test.go: `.Context(t)`
$DIR/core/web/eth_keys_controller_test.go: `.NewEthMocksWithStartupAssertions(t)`
$DIR/core/web/eth_keys_controller_test.go: `.NewGeneralConfig(t, func(c *chainlink.Config, s *chainlink.Secrets) {
c.EVM[0].NonceAutoSync = ptr(false)
c.EVM[0].BalanceMonitor.Enabled = ptr(false)
})`
$DIR/core/web/eth_keys_controller_test.go: `.NewApplicationWithConfig(t, cfg, ethClient)`
$DIR/core/web/eth_keys_controller_test.go: `.NewHTTPClient(nil)`
$DIR/core/web/eth_keys_controller_test.go: `.NewAddress()`
$DIR/core/web/eth_keys_controller_test.go: `.Hex()`
$DIR/core/web/eth_keys_controller_test.go: `.Delete(chainURL.String())`
$DIR/core/web/eth_keys_controller_test.go: `.String()`
$DIR/core/web/evm_chains_controller_test.go: `t.Run(tc.name, func(t *testing.T) {
t.Parallel()
controller := setupEVMChainsControllerTest(t, configtest.NewGeneralConfig(t, func(c *chainlink.Config, s *chainlink.Secrets) {
if tc.want != nil {
c.EVM = evmcfg.EVMConfigs{tc.want}
}
}))
wantedResult := tc.want
resp, cleanup := controller.client.Get(
fmt.Sprintf("/v2/chains/evm/%s", tc.inputId),
)
t.Cleanup(cleanup)
require.Equal(t, tc.wantStatusCode, resp.StatusCode)
if wantedResult != nil {
resource1 := presenters.EVMChainResource{}
err := web.ParseJSONAPIResponse(cltest.ParseResponseBody(t, resp), &resource1)
require.NoError(t, err)
assert.Equal(t, resource1.ID, wantedResult.ChainID.String())
toml, err := wantedResult.TOMLString()
require.NoError(t, err)
assert.Equal(t, toml, resource1.Config)
}
})`
$DIR/core/web/evm_chains_controller_test.go: `c.EVM = evmcfg.EVMConfigs{tc.want}`
$DIR/core/web/evm_chains_controller_test.go: `t.Cleanup(cleanup)`
$DIR/core/web/evm_chains_controller_test.go: `sort.Slice(chainIDs, func(i, j int) bool {
return chainIDs[i].String() < chainIDs[j].String()
})`
$DIR/core/web/evm_chains_controller_test.go: `c.EVM = append(c.EVM, configuredChains...)`
$DIR/core/web/evm_chains_controller_test.go: `t.Cleanup(cleanup)`
$DIR/core/web/evm_chains_controller_test.go: `t.Cleanup(cleanup)`
$DIR/core/web/evm_chains_controller_test.go: `err = web.ParsePaginatedResponse(body, &gotChains, &links)`
$DIR/core/web/evm_chains_controller_test.go: `resp, cleanup = controller.client.Get(links["next"].Href)`
$DIR/core/web/evm_chains_controller_test.go: `t.Cleanup(cleanup)`
$DIR/core/web/evm_chains_controller_test.go: `gotChains = []presenters.EVMChainResource{}`
$DIR/core/web/evm_chains_controller_test.go: `err = web.ParsePaginatedResponse(cltest.ParseResponseBody(t, resp), &gotChains, &links)`
$DIR/core/web/evm_chains_controller_test.go: `toml, err = configuredChains[2].TOMLString()`
$DIR/core/web/evm_chains_controller_test.go: `.New(testutils.NewRandomEVMChainID())`
$DIR/core/web/evm_chains_controller_test.go: `.NewRandomEVMChainID()`
$DIR/core/web/evm_chains_controller_test.go: `.String()`
$DIR/core/web/evm_chains_controller_test.go: `.Defaults(nil, &evmcfg.Chain{
GasEstimator: evmcfg.GasEstimator{
EIP1559DynamicFees: ptr(true),
BlockHistory: evmcfg.BlockHistoryEstimator{
BlockHistorySize: ptr[uint16](50),
},
},
RPCBlockQueryDelay: ptr[uint16](23),
MinIncomingConfirmations: ptr[uint32](12),
LinkContractAddress: ptr(types.EIP55AddressFromAddress(testutils.NewAddress())),
})`
$DIR/core/web/evm_chains_controller_test.go: `.EIP55AddressFromAddress(testutils.NewAddress())`
$DIR/core/web/evm_chains_controller_test.go: `.NewAddress()`
$DIR/core/web/evm_chains_controller_test.go: `.Run(tc.name, func(t *testing.T) {
t.Parallel()
controller := setupEVMChainsControllerTest(t, configtest.NewGeneralConfig(t, func(c *chainlink.Config, s *chainlink.Secrets) {
if tc.want != nil {
c.EVM = evmcfg.EVMConfigs{tc.want}
}
}))
wantedResult := tc.want
resp, cleanup := controller.client.Get(
fmt.Sprintf("/v2/chains/evm/%s", tc.inputId),
)
t.Cleanup(cleanup)
require.Equal(t, tc.wantStatusCode, resp.StatusCode)
if wantedResult != nil {
resource1 := presenters.EVMChainResource{}
err := web.ParseJSONAPIResponse(cltest.ParseResponseBody(t, resp), &resource1)
require.NoError(t, err)
assert.Equal(t, resource1.ID, wantedResult.ChainID.String())
toml, err := wantedResult.TOMLString()
require.NoError(t, err)
assert.Equal(t, toml, resource1.Config)
}
})`
$DIR/core/web/evm_chains_controller_test.go: `.NewGeneralConfig(t, func(c *chainlink.Config, s *chainlink.Secrets) {
if tc.want != nil {
c.EVM = evmcfg.EVMConfigs{tc.want}
}
})`
$DIR/core/web/evm_chains_controller_test.go: `.client.Get(
fmt.Sprintf("/v2/chains/evm/%s", tc.inputId),
)`
$DIR/core/web/evm_chains_controller_test.go: `.Sprintf("/v2/chains/evm/%s", tc.inputId)`
$DIR/core/web/evm_chains_controller_test.go: `.Cleanup(cleanup)`
$DIR/core/web/evm_chains_controller_test.go: `.ParseJSONAPIResponse(cltest.ParseResponseBody(t, resp), &resource1)`
$DIR/core/web/evm_chains_controller_test.go: `.ParseResponseBody(t, resp)`
$DIR/core/web/evm_chains_controller_test.go: `.TOMLString()`
$DIR/core/web/evm_chains_controller_test.go: `.NewRandomEVMChainID()`
$DIR/core/web/evm_chains_controller_test.go: `.NewRandomEVMChainID()`
$DIR/core/web/evm_chains_controller_test.go: `.NewRandomEVMChainID()`
$DIR/core/web/evm_chains_controller_test.go: `.Slice(chainIDs, func(i, j int) bool {
return chainIDs[i].String() < chainIDs[j].String()
})`
$DIR/core/web/evm_chains_controller_test.go: `.String()`
$DIR/core/web/evm_chains_controller_test.go: `.String()`
$DIR/core/web/evm_chains_controller_test.go: `.New(chainIDs[0])`
$DIR/core/web/evm_chains_controller_test.go: `.Defaults(nil)`
$DIR/core/web/evm_chains_controller_test.go: `.New(chainIDs[1])`
$DIR/core/web/evm_chains_controller_test.go: `.Defaults(nil, &evmcfg.Chain{
RPCBlockQueryDelay: ptr[uint16](13),
GasEstimator: evmcfg.GasEstimator{
EIP1559DynamicFees: ptr(true),
BlockHistory: evmcfg.BlockHistoryEstimator{
BlockHistorySize: ptr[uint16](1),
},
},
MinIncomingConfirmations: ptr[uint32](120),
})`
$DIR/core/web/evm_chains_controller_test.go: `.New(chainIDs[2])`
$DIR/core/web/evm_chains_controller_test.go: `.Defaults(nil, &evmcfg.Chain{
RPCBlockQueryDelay: ptr[uint16](5),
GasEstimator: evmcfg.GasEstimator{
EIP1559DynamicFees: ptr(false),
BlockHistory: evmcfg.BlockHistoryEstimator{
BlockHistorySize: ptr[uint16](2),
},
},
MinIncomingConfirmations: ptr[uint32](30),
})`
$DIR/core/web/evm_chains_controller_test.go: `.NewGeneralConfig(t, func(c *chainlink.Config, s *chainlink.Secrets) {
c.EVM = append(c.EVM, configuredChains...)
})`
$DIR/core/web/evm_chains_controller_test.go: `.client.Get("/v2/chains/evm?size=asd")`
$DIR/core/web/evm_chains_controller_test.go: `.Cleanup(cleanup)`
$DIR/core/web/evm_chains_controller_test.go: `.client.Get("/v2/chains/evm?size=3")`
$DIR/core/web/evm_chains_controller_test.go: `.Cleanup(cleanup)`
$DIR/core/web/evm_chains_controller_test.go: `.ParseResponseBody(t, resp)`
$DIR/core/web/evm_chains_controller_test.go: `.ParseJSONAPIResponseMetaCount(body)`
$DIR/core/web/evm_chains_controller_test.go: `.ParsePaginatedResponse(body, &gotChains, &links)`
$DIR/core/web/evm_chains_controller_test.go: `.TOMLString()`
$DIR/core/web/evm_chains_controller_test.go: `.client.Get(links["next"].Href)`
$DIR/core/web/evm_chains_controller_test.go: `.Cleanup(cleanup)`
$DIR/core/web/evm_chains_controller_test.go: `.ParsePaginatedResponse(cltest.ParseResponseBody(t, resp), &gotChains, &links)`
$DIR/core/web/evm_chains_controller_test.go: `.ParseResponseBody(t, resp)`
$DIR/core/web/evm_chains_controller_test.go: `.TOMLString()`
$DIR/core/web/evm_forwarders_controller_test.go: `c.EVM = evmcfg.EVMConfigs{
{ChainID: chainId, Enabled: ptr(true), Chain: evmcfg.Defaults(chainId)},
}`
$DIR/core/web/evm_forwarders_controller_test.go: `t.Cleanup(cleanup)`
$DIR/core/web/evm_forwarders_controller_test.go: `err = web.ParseJSONAPIResponse(cltest.ParseResponseBody(t, resp), &resource)`
$DIR/core/web/evm_forwarders_controller_test.go: `resp, cleanup = controller.client.Delete("/v2/nodes/evm/forwarders/" + resource.ID)`
$DIR/core/web/evm_forwarders_controller_test.go: `t.Cleanup(cleanup)`
$DIR/core/web/evm_forwarders_controller_test.go: `c.EVM = evmcfg.EVMConfigs{
{ChainID: chainId, Enabled: ptr(true), Chain: evmcfg.Defaults(chainId)},
}`
$DIR/core/web/evm_forwarders_controller_test.go: `t.Cleanup(cleanup)`
$DIR/core/web/evm_forwarders_controller_test.go: `t.Cleanup(cleanup)`
$DIR/core/web/evm_forwarders_controller_test.go: `err = web.ParsePaginatedResponse(body, &fwdrcs, &links)`
$DIR/core/web/evm_forwarders_controller_test.go: `.New(testutils.NewRandomEVMChainID())`
$DIR/core/web/evm_forwarders_controller_test.go: `.NewRandomEVMChainID()`
$DIR/core/web/evm_forwarders_controller_test.go: `.Defaults(chainId)`
$DIR/core/web/evm_forwarders_controller_test.go: `.RandomAddress()`
$DIR/core/web/evm_forwarders_controller_test.go: `.Marshal(web.TrackEVMForwarderRequest{
EVMChainID: chainId,
Address: address,
},
)`
$DIR/core/web/evm_forwarders_controller_test.go: `.client.Post("/v2/nodes/evm/forwarders/track", bytes.NewReader(body))`
$DIR/core/web/evm_forwarders_controller_test.go: `.NewReader(body)`
$DIR/core/web/evm_forwarders_controller_test.go: `.Cleanup(cleanup)`
$DIR/core/web/evm_forwarders_controller_test.go: `.ParseJSONAPIResponse(cltest.ParseResponseBody(t, resp), &resource)`
$DIR/core/web/evm_forwarders_controller_test.go: `.ParseResponseBody(t, resp)`
$DIR/core/web/evm_forwarders_controller_test.go: `.client.Delete("/v2/nodes/evm/forwarders/" + resource.ID)`
$DIR/core/web/evm_forwarders_controller_test.go: `.Cleanup(cleanup)`
$DIR/core/web/evm_forwarders_controller_test.go: `.New(testutils.NewRandomEVMChainID())`
$DIR/core/web/evm_forwarders_controller_test.go: `.NewRandomEVMChainID()`
$DIR/core/web/evm_forwarders_controller_test.go: `.Defaults(chainId)`
$DIR/core/web/evm_forwarders_controller_test.go: `.RandomAddress()`
$DIR/core/web/evm_forwarders_controller_test.go: `.RandomAddress()`
$DIR/core/web/evm_forwarders_controller_test.go: `.Marshal(web.TrackEVMForwarderRequest{
EVMChainID: chainId,
Address: fwdr.Address,
},
)`
$DIR/core/web/evm_forwarders_controller_test.go: `.client.Post("/v2/nodes/evm/forwarders/track", bytes.NewReader(body))`
$DIR/core/web/evm_forwarders_controller_test.go: `.NewReader(body)`
$DIR/core/web/evm_forwarders_controller_test.go: `.Cleanup(cleanup)`
$DIR/core/web/evm_forwarders_controller_test.go: `.client.Get("/v2/nodes/evm/forwarders?size=2")`
$DIR/core/web/evm_forwarders_controller_test.go: `.Cleanup(cleanup)`
$DIR/core/web/evm_forwarders_controller_test.go: `.ParseResponseBody(t, resp)`
$DIR/core/web/evm_forwarders_controller_test.go: `.ParseJSONAPIResponseMetaCount(body)`
$DIR/core/web/evm_forwarders_controller_test.go: `.ParsePaginatedResponse(body, &fwdrcs, &links)`
$DIR/core/web/evm_transactions_controller_test.go: `cltest.MustInsertConfirmedEthTxWithLegacyAttempt(t, txStore, 0, 1, from)`
$DIR/core/web/evm_transactions_controller_test.go: `cltest.MustInsertConfirmedEthTxWithLegacyAttempt(t, txStore, 4, 4, from)`
$DIR/core/web/evm_transactions_controller_test.go: `attempt.State = txmgrtypes.TxAttemptBroadcast`
$DIR/core/web/evm_transactions_controller_test.go: `attempt.TxFee = gas.EvmFee{Legacy: assets.NewWeiI(3)}`
$DIR/core/web/evm_transactions_controller_test.go: `attempt.BroadcastBeforeBlockNum = &blockNum`
$DIR/core/web/evm_transactions_controller_test.go: `t.Cleanup(cleanup)`
$DIR/core/web/evm_transactions_controller_test.go: `cltest.AssertServerResponse(t, resp, http.StatusOK)`
$DIR/core/web/evm_transactions_controller_test.go: `t.Cleanup(cleanup)`
$DIR/core/web/evm_transactions_controller_test.go: `attempt.Tx = tx`
$DIR/core/web/evm_transactions_controller_test.go: `t.Cleanup(cleanup)`
$DIR/core/web/evm_transactions_controller_test.go: `cltest.AssertServerResponse(t, resp, http.StatusOK)`
$DIR/core/web/evm_transactions_controller_test.go: `t.Cleanup(cleanup)`
$DIR/core/web/evm_transactions_controller_test.go: `.NewApplicationWithKey(t)`
$DIR/core/web/evm_transactions_controller_test.go: `.Context(t)`
$DIR/core/web/evm_transactions_controller_test.go: `.GetDB()`
$DIR/core/web/evm_transactions_controller_test.go: `.NewTestTxStore(t, app.GetDB())`
$DIR/core/web/evm_transactions_controller_test.go: `.GetDB()`
$DIR/core/web/evm_transactions_controller_test.go: `.NewKeyStore(t, db)`
$DIR/core/web/evm_transactions_controller_test.go: `.Eth()`
$DIR/core/web/evm_transactions_controller_test.go: `.NewHTTPClient(nil)`
$DIR/core/web/evm_transactions_controller_test.go: `.MustInsertRandomKey(t, ethKeyStore)`
$DIR/core/web/evm_transactions_controller_test.go: `.MustInsertConfirmedEthTxWithLegacyAttempt(t, txStore, 0, 1, from)`
$DIR/core/web/evm_transactions_controller_test.go: `.MustInsertConfirmedEthTxWithLegacyAttempt(t, txStore, 3, 2, from)`
$DIR/core/web/evm_transactions_controller_test.go: `.MustInsertConfirmedEthTxWithLegacyAttempt(t, txStore, 4, 4, from)`
$DIR/core/web/evm_transactions_controller_test.go: `.NewLegacyEthTxAttempt(t, tx2.ID)`
$DIR/core/web/evm_transactions_controller_test.go: `.NewWeiI(3)`
$DIR/core/web/evm_transactions_controller_test.go: `.TransactionsWithAttempts(ctx, 0, 100)`
$DIR/core/web/evm_transactions_controller_test.go: `.Get(fmt.Sprintf("/v2/transactions?size=%d", size))`
$DIR/core/web/evm_transactions_controller_test.go: `.Sprintf("/v2/transactions?size=%d", size)`
$DIR/core/web/evm_transactions_controller_test.go: `.Cleanup(cleanup)`
$DIR/core/web/evm_transactions_controller_test.go: `.AssertServerResponse(t, resp, http.StatusOK)`
$DIR/core/web/evm_transactions_controller_test.go: `.ParseResponseBody(t, resp)`
$DIR/core/web/evm_transactions_controller_test.go: `.NewApplicationWithKey(t)`
$DIR/core/web/evm_transactions_controller_test.go: `.Context(t)`
$DIR/core/web/evm_transactions_controller_test.go: `.NewHTTPClient(nil)`
$DIR/core/web/evm_transactions_controller_test.go: `.Get("/v2/transactions?size=TrainingDay")`
$DIR/core/web/evm_transactions_controller_test.go: `.Cleanup(cleanup)`
$DIR/core/web/evm_transactions_controller_test.go: `.NewApplicationWithKey(t)`
$DIR/core/web/evm_transactions_controller_test.go: `.Context(t)`
$DIR/core/web/evm_transactions_controller_test.go: `.NewTestTxStore(t, app.GetDB())`
$DIR/core/web/evm_transactions_controller_test.go: `.GetDB()`
$DIR/core/web/evm_transactions_controller_test.go: `.NewHTTPClient(nil)`
$DIR/core/web/evm_transactions_controller_test.go: `.MustInsertRandomKey(t, app.KeyStore.Eth())`
$DIR/core/web/evm_transactions_controller_test.go: `.KeyStore.Eth()`
$DIR/core/web/evm_transactions_controller_test.go: `.MustInsertUnconfirmedEthTxWithBroadcastLegacyAttempt(t, txStore, 1, from)`
$DIR/core/web/evm_transactions_controller_test.go: `.Get("/v2/transactions/" + attempt.Hash.String())`
$DIR/core/web/evm_transactions_controller_test.go: `.Hash.String()`
$DIR/core/web/evm_transactions_controller_test.go: `.Cleanup(cleanup)`
$DIR/core/web/evm_transactions_controller_test.go: `.AssertServerResponse(t, resp, http.StatusOK)`
$DIR/core/web/evm_transactions_controller_test.go: `.NewEthTxResourceFromAttempt(attempt)`
$DIR/core/web/evm_transactions_controller_test.go: `.NewApplicationWithKey(t)`
$DIR/core/web/evm_transactions_controller_test.go: `.Context(t)`
$DIR/core/web/evm_transactions_controller_test.go: `.NewTestTxStore(t, app.GetDB())`
$DIR/core/web/evm_transactions_controller_test.go: `.GetDB()`
$DIR/core/web/evm_transactions_controller_test.go: `.NewHTTPClient(nil)`
$DIR/core/web/evm_transactions_controller_test.go: `.MustInsertRandomKey(t, app.KeyStore.Eth())`
$DIR/core/web/evm_transactions_controller_test.go: `.KeyStore.Eth()`
$DIR/core/web/evm_transactions_controller_test.go: `.MustInsertUnconfirmedEthTxWithBroadcastLegacyAttempt(t, txStore, 1, from)`
$DIR/core/web/evm_transactions_controller_test.go: `.Get("/v2/transactions/" + (attempt.Hash.String() + "1"))`
$DIR/core/web/evm_transactions_controller_test.go: `.Hash.String()`
$DIR/core/web/evm_transactions_controller_test.go: `.Cleanup(cleanup)`
$DIR/core/web/evm_transfer_controller_test.go: `ethClient.On("PendingNonceAt", mock.Anything, key.Address).Return(uint64(1), nil)`
$DIR/core/web/evm_transfer_controller_test.go: `ethClient.On("BalanceAt", mock.Anything, key.Address, (*big.Int)(nil)).Return(balance.ToInt(), nil)`
$DIR/core/web/evm_transfer_controller_test.go: `t.Cleanup(cleanup)`
$DIR/core/web/evm_transfer_controller_test.go: `ethClient.On("PendingNonceAt", mock.Anything, key.Address).Return(uint64(1), nil)`
$DIR/core/web/evm_transfer_controller_test.go: `ethClient.On("BalanceAt", mock.Anything, key.Address, (*big.Int)(nil)).Return(balance.ToInt(), nil)`
$DIR/core/web/evm_transfer_controller_test.go: `t.Cleanup(cleanup)`
$DIR/core/web/evm_transfer_controller_test.go: `ethClient.On("PendingNonceAt", mock.Anything, key.Address).Return(uint64(1), nil)`
$DIR/core/web/evm_transfer_controller_test.go: `ethClient.On("BalanceAt", mock.Anything, key.Address, (*big.Int)(nil)).Return(balance.ToInt(), nil)`
$DIR/core/web/evm_transfer_controller_test.go: `c.EVM[0].BalanceMonitor.Enabled = ptr(false)`
$DIR/core/web/evm_transfer_controller_test.go: `t.Cleanup(cleanup)`
$DIR/core/web/evm_transfer_controller_test.go: `t.Cleanup(cleanup)`
$DIR/core/web/evm_transfer_controller_test.go: `ethClient.On("PendingNonceAt", mock.Anything, key.Address).Return(uint64(1), nil)`
$DIR/core/web/evm_transfer_controller_test.go: `ethClient.On("BalanceAt", mock.Anything, key.Address, (*big.Int)(nil)).Return(assets.NewEth(10).ToInt(), nil)`
$DIR/core/web/evm_transfer_controller_test.go: `t.Cleanup(cleanup)`
$DIR/core/web/evm_transfer_controller_test.go: `ethClient.On("PendingNonceAt", mock.Anything, key.Address).Return(uint64(1), nil)`
$DIR/core/web/evm_transfer_controller_test.go: `ethClient.On("BalanceAt", mock.Anything, key.Address, (*big.Int)(nil)).Return(balance.ToInt(), nil)`
$DIR/core/web/evm_transfer_controller_test.go: `t.Cleanup(cleanup)`
$DIR/core/web/evm_transfer_controller_test.go: `t.Cleanup(cleanup)`
$DIR/core/web/evm_transfer_controller_test.go: `ethClient.On("PendingNonceAt", mock.Anything, key.Address).Return(uint64(1), nil)`
$DIR/core/web/evm_transfer_controller_test.go: `ethClient.On("BalanceAt", mock.Anything, key.Address, (*big.Int)(nil)).Return(balance.ToInt(), nil)`
$DIR/core/web/evm_transfer_controller_test.go: `ethClient.On("SequenceAt", mock.Anything, mock.Anything, mock.Anything).Return(evmtypes.Nonce(0), nil).Maybe()`
$DIR/core/web/evm_transfer_controller_test.go: `c.EVM[0].GasEstimator.EIP1559DynamicFees = ptr(true)`
$DIR/core/web/evm_transfer_controller_test.go: `c.EVM[0].GasEstimator.Mode = ptr("FixedPrice")`
$DIR/core/web/evm_transfer_controller_test.go: `c.EVM[0].ChainID = (*ubig.Big)(testutils.FixtureChainID)`
$DIR/core/web/evm_transfer_controller_test.go: `c.Database.Listener.FallbackPollInterval = commonconfig.MustNewDuration(time.Second)`
$DIR/core/web/evm_transfer_controller_test.go: `t.Cleanup(cleanup)`
$DIR/core/web/evm_transfer_controller_test.go: `cltest.AssertServerResponse(t, resp, http.StatusOK)`
$DIR/core/web/evm_transfer_controller_test.go: `err = web.ParseJSONAPIResponse(cltest.ParseResponseBody(t, resp), &resource)`
$DIR/core/web/evm_transfer_controller_test.go: `validateTxCount(t, app.GetDB(), 1)`
$DIR/core/web/evm_transfer_controller_test.go: `t.Run("happy_path", func(t *testing.T) {
ctx := testutils.Context(t)
timeout := 5 * time.Second
var done bool
find := func(_ context.Context, _ int64) (txmgr.Tx, error) {
if !done {
done = true
return tx, nil
}
return txWithAttempt, nil
}
a, err := web.FindTxAttempt(ctx, timeout, tx, find)
require.NoError(t, err)
assert.Equal(t, tx.ID, a.Tx.ID)
assert.Equal(t, attempt.ID, a.ID)
})`
$DIR/core/web/evm_transfer_controller_test.go: `done = true`
$DIR/core/web/evm_transfer_controller_test.go: `t.Run("failed to find tx", func(t *testing.T) {
ctx := testutils.Context(t)
find := func(_ context.Context, _ int64) (txmgr.Tx, error) {
return txmgr.Tx{}, fmt.Errorf("ERRORED")
}
_, err := web.FindTxAttempt(ctx, time.Second, tx, find)
assert.ErrorContains(t, err, "failed to find transaction")
})`
$DIR/core/web/evm_transfer_controller_test.go: `t.Run("timeout", func(t *testing.T) {
ctx := testutils.Context(t)
find := func(_ context.Context, _ int64) (txmgr.Tx, error) {
return tx, nil
}
_, err := web.FindTxAttempt(ctx, time.Second, tx, find)
assert.ErrorContains(t, err, "context deadline exceeded")
})`
$DIR/core/web/evm_transfer_controller_test.go: `time.Sleep(1 * time.Second)`
$DIR/core/web/evm_transfer_controller_test.go: `cancel()`
$DIR/core/web/evm_transfer_controller_test.go: `.MustGenerateRandomKey(t)`
$DIR/core/web/evm_transfer_controller_test.go: `.NewEthMocksWithTransactionsOnBlocksAssertions(t)`
$DIR/core/web/evm_transfer_controller_test.go: `.NewEthValueS("200")`
$DIR/core/web/evm_transfer_controller_test.go: `.On("PendingNonceAt", mock.Anything, key.Address)`
$DIR/core/web/evm_transfer_controller_test.go: `.Return(uint64(1), nil)`
$DIR/core/web/evm_transfer_controller_test.go: `.On("BalanceAt", mock.Anything, key.Address, (*big.Int)(nil))`
$DIR/core/web/evm_transfer_controller_test.go: `.Return(balance.ToInt(), nil)`
$DIR/core/web/evm_transfer_controller_test.go: `.ToInt()`
$DIR/core/web/evm_transfer_controller_test.go: `.NewApplicationWithKey(t, ethClient, key)`
$DIR/core/web/evm_transfer_controller_test.go: `.NewHTTPClient(nil)`
$DIR/core/web/evm_transfer_controller_test.go: `.NewEthValueS("100")`
$DIR/core/web/evm_transfer_controller_test.go: `.HexToAddress("0xFA01FA015C8A5332987319823728982379128371")`
$DIR/core/web/evm_transfer_controller_test.go: `.New(evmtest.MustGetDefaultChainID(t, app.Config.EVMConfigs()))`
$DIR/core/web/evm_transfer_controller_test.go: `.MustGetDefaultChainID(t, app.Config.EVMConfigs())`
$DIR/core/web/evm_transfer_controller_test.go: `.Config.EVMConfigs()`
$DIR/core/web/evm_transfer_controller_test.go: `.Marshal(&request)`
$DIR/core/web/evm_transfer_controller_test.go: `.Post("/v2/transfers", bytes.NewBuffer(body))`
$DIR/core/web/evm_transfer_controller_test.go: `.NewBuffer(body)`
$DIR/core/web/evm_transfer_controller_test.go: `.Cleanup(cleanup)`
$DIR/core/web/evm_transfer_controller_test.go: `.ParseJSONAPIErrors(t, resp.Body)`
$DIR/core/web/evm_transfer_controller_test.go: `.GetDB()`
$DIR/core/web/evm_transfer_controller_test.go: `.MustGenerateRandomKey(t)`
$DIR/core/web/evm_transfer_controller_test.go: `.NewEthMocksWithTransactionsOnBlocksAssertions(t)`
$DIR/core/web/evm_transfer_controller_test.go: `.NewEthValueS("2")`
$DIR/core/web/evm_transfer_controller_test.go: `.On("PendingNonceAt", mock.Anything, key.Address)`
$DIR/core/web/evm_transfer_controller_test.go: `.Return(uint64(1), nil)`
$DIR/core/web/evm_transfer_controller_test.go: `.On("BalanceAt", mock.Anything, key.Address, (*big.Int)(nil))`
$DIR/core/web/evm_transfer_controller_test.go: `.Return(balance.ToInt(), nil)`
$DIR/core/web/evm_transfer_controller_test.go: `.ToInt()`
$DIR/core/web/evm_transfer_controller_test.go: `.NewApplicationWithKey(t, ethClient, key)`
$DIR/core/web/evm_transfer_controller_test.go: `.NewHTTPClient(nil)`
$DIR/core/web/evm_transfer_controller_test.go: `.NewEthValue(1000000000000000000)`
$DIR/core/web/evm_transfer_controller_test.go: `.HexToAddress("0xFA01FA015C8A5332987319823728982379128371")`
$DIR/core/web/evm_transfer_controller_test.go: `.New(evmtest.MustGetDefaultChainID(t, app.Config.EVMConfigs()))`
$DIR/core/web/evm_transfer_controller_test.go: `.MustGetDefaultChainID(t, app.Config.EVMConfigs())`
$DIR/core/web/evm_transfer_controller_test.go: `.Config.EVMConfigs()`
$DIR/core/web/evm_transfer_controller_test.go: `.Marshal(&request)`
$DIR/core/web/evm_transfer_controller_test.go: `.Post("/v2/transfers", bytes.NewBuffer(body))`
$DIR/core/web/evm_transfer_controller_test.go: `.NewBuffer(body)`
$DIR/core/web/evm_transfer_controller_test.go: `.Cleanup(cleanup)`
$DIR/core/web/evm_transfer_controller_test.go: `.ParseJSONAPIErrors(t, resp.Body)`
$DIR/core/web/evm_transfer_controller_test.go: `.GetDB()`
$DIR/core/web/evm_transfer_controller_test.go: `.MustGenerateRandomKey(t)`
$DIR/core/web/evm_transfer_controller_test.go: `.NewEthMocksWithTransactionsOnBlocksAssertions(t)`
$DIR/core/web/evm_transfer_controller_test.go: `.NewEthValueS("200")`
$DIR/core/web/evm_transfer_controller_test.go: `.On("PendingNonceAt", mock.Anything, key.Address)`
$DIR/core/web/evm_transfer_controller_test.go: `.Return(uint64(1), nil)`
$DIR/core/web/evm_transfer_controller_test.go: `.On("BalanceAt", mock.Anything, key.Address, (*big.Int)(nil))`
$DIR/core/web/evm_transfer_controller_test.go: `.Return(balance.ToInt(), nil)`
$DIR/core/web/evm_transfer_controller_test.go: `.ToInt()`
$DIR/core/web/evm_transfer_controller_test.go: `.NewGeneralConfig(t, func(c *chainlink.Config, s *chainlink.Secrets) {
c.EVM[0].BalanceMonitor.Enabled = ptr(false)
})`
$DIR/core/web/evm_transfer_controller_test.go: `.NewApplicationWithConfigAndKey(t, config, ethClient, key)`
$DIR/core/web/evm_transfer_controller_test.go: `.NewHTTPClient(nil)`
$DIR/core/web/evm_transfer_controller_test.go: `.NewEthValueS("100")`
$DIR/core/web/evm_transfer_controller_test.go: `.HexToAddress("0xFA01FA015C8A5332987319823728982379128371")`
$DIR/core/web/evm_transfer_controller_test.go: `.New(evmtest.MustGetDefaultChainID(t, app.Config.EVMConfigs()))`
$DIR/core/web/evm_transfer_controller_test.go: `.MustGetDefaultChainID(t, app.Config.EVMConfigs())`
$DIR/core/web/evm_transfer_controller_test.go: `.Config.EVMConfigs()`
$DIR/core/web/evm_transfer_controller_test.go: `.Marshal(&request)`
$DIR/core/web/evm_transfer_controller_test.go: `.Post("/v2/transfers", bytes.NewBuffer(body))`
$DIR/core/web/evm_transfer_controller_test.go: `.NewBuffer(body)`
$DIR/core/web/evm_transfer_controller_test.go: `.Cleanup(cleanup)`
$DIR/core/web/evm_transfer_controller_test.go: `.ParseJSONAPIErrors(t, resp.Body)`
$DIR/core/web/evm_transfer_controller_test.go: `.GetDB()`
$DIR/core/web/evm_transfer_controller_test.go: `.NewApplicationWithKey(t)`
$DIR/core/web/evm_transfer_controller_test.go: `.NewEthValueS("100")`
$DIR/core/web/evm_transfer_controller_test.go: `.NewHTTPClient(nil)`
$DIR/core/web/evm_transfer_controller_test.go: `.HexToAddress("0xFA01FA015C8A5332987319823728982379128371")`
$DIR/core/web/evm_transfer_controller_test.go: `.HexToAddress("0x0000000000000000000000000000000000000000")`
$DIR/core/web/evm_transfer_controller_test.go: `.New(evmtest.MustGetDefaultChainID(t, app.Config.EVMConfigs()))`
$DIR/core/web/evm_transfer_controller_test.go: `.MustGetDefaultChainID(t, app.Config.EVMConfigs())`
$DIR/core/web/evm_transfer_controller_test.go: `.Config.EVMConfigs()`
$DIR/core/web/evm_transfer_controller_test.go: `.Marshal(&request)`
$DIR/core/web/evm_transfer_controller_test.go: `.Post("/v2/transfers", bytes.NewBuffer(body))`
$DIR/core/web/evm_transfer_controller_test.go: `.NewBuffer(body)`
$DIR/core/web/evm_transfer_controller_test.go: `.Cleanup(cleanup)`
$DIR/core/web/evm_transfer_controller_test.go: `.MustGenerateRandomKey(t)`
$DIR/core/web/evm_transfer_controller_test.go: `.NewEthMocksWithTransactionsOnBlocksAssertions(t)`
$DIR/core/web/evm_transfer_controller_test.go: `.On("PendingNonceAt", mock.Anything, key.Address)`
$DIR/core/web/evm_transfer_controller_test.go: `.Return(uint64(1), nil)`
$DIR/core/web/evm_transfer_controller_test.go: `.On("BalanceAt", mock.Anything, key.Address, (*big.Int)(nil))`
$DIR/core/web/evm_transfer_controller_test.go: `.Return(assets.NewEth(10).ToInt(), nil)`
$DIR/core/web/evm_transfer_controller_test.go: `.NewEth(10)`
$DIR/core/web/evm_transfer_controller_test.go: `.ToInt()`
$DIR/core/web/evm_transfer_controller_test.go: `.NewApplicationWithKey(t, ethClient, key)`
$DIR/core/web/evm_transfer_controller_test.go: `.NewHTTPClient(nil)`
$DIR/core/web/evm_transfer_controller_test.go: `.NewEthValueS("100")`
$DIR/core/web/evm_transfer_controller_test.go: `.HexToAddress("0xFA01FA015C8A5332987319823728982379128371")`
$DIR/core/web/evm_transfer_controller_test.go: `.New(evmtest.MustGetDefaultChainID(t, app.Config.EVMConfigs()))`
$DIR/core/web/evm_transfer_controller_test.go: `.MustGetDefaultChainID(t, app.Config.EVMConfigs())`
$DIR/core/web/evm_transfer_controller_test.go: `.Config.EVMConfigs()`
$DIR/core/web/evm_transfer_controller_test.go: `.Marshal(&request)`
$DIR/core/web/evm_transfer_controller_test.go: `.Post("/v2/transfers", bytes.NewBuffer(body))`
$DIR/core/web/evm_transfer_controller_test.go: `.NewBuffer(body)`
$DIR/core/web/evm_transfer_controller_test.go: `.Cleanup(cleanup)`
$DIR/core/web/evm_transfer_controller_test.go: `.MustGenerateRandomKey(t)`
$DIR/core/web/evm_transfer_controller_test.go: `.NewEthMocksWithTransactionsOnBlocksAssertions(t)`
$DIR/core/web/evm_transfer_controller_test.go: `.NewEthValueS("0")`
$DIR/core/web/evm_transfer_controller_test.go: `.On("PendingNonceAt", mock.Anything, key.Address)`
$DIR/core/web/evm_transfer_controller_test.go: `.Return(uint64(1), nil)`
$DIR/core/web/evm_transfer_controller_test.go: `.On("BalanceAt", mock.Anything, key.Address, (*big.Int)(nil))`
$DIR/core/web/evm_transfer_controller_test.go: `.Return(balance.ToInt(), nil)`
$DIR/core/web/evm_transfer_controller_test.go: `.ToInt()`
$DIR/core/web/evm_transfer_controller_test.go: `.NewApplicationWithKey(t, ethClient, key)`
$DIR/core/web/evm_transfer_controller_test.go: `.NewHTTPClient(nil)`
$DIR/core/web/evm_transfer_controller_test.go: `.NewEthValueS("100")`
$DIR/core/web/evm_transfer_controller_test.go: `.HexToAddress("0xFA01FA015C8A5332987319823728982379128371")`
$DIR/core/web/evm_transfer_controller_test.go: `.New(evmtest.MustGetDefaultChainID(t, app.Config.EVMConfigs()))`
$DIR/core/web/evm_transfer_controller_test.go: `.MustGetDefaultChainID(t, app.Config.EVMConfigs())`
$DIR/core/web/evm_transfer_controller_test.go: `.Config.EVMConfigs()`
$DIR/core/web/evm_transfer_controller_test.go: `.Marshal(&request)`
$DIR/core/web/evm_transfer_controller_test.go: `.Post("/v2/transfers", bytes.NewBuffer(body))`
$DIR/core/web/evm_transfer_controller_test.go: `.NewBuffer(body)`
$DIR/core/web/evm_transfer_controller_test.go: `.Cleanup(cleanup)`
$DIR/core/web/evm_transfer_controller_test.go: `.NewApplicationWithKey(t)`
$DIR/core/web/evm_transfer_controller_test.go: `.NewHTTPClient(nil)`
$DIR/core/web/evm_transfer_controller_test.go: `.Post("/v2/transfers", bytes.NewBuffer([]byte(`{"address":""}`)))`
$DIR/core/web/evm_transfer_controller_test.go: `.NewBuffer([]byte(`{"address":""}`))`
$DIR/core/web/evm_transfer_controller_test.go: `.Cleanup(cleanup)`
$DIR/core/web/evm_transfer_controller_test.go: `.MustGenerateRandomKey(t)`
$DIR/core/web/evm_transfer_controller_test.go: `.NewEthMocksWithTransactionsOnBlocksAssertions(t)`
$DIR/core/web/evm_transfer_controller_test.go: `.NewEthValueS("200")`
$DIR/core/web/evm_transfer_controller_test.go: `.On("PendingNonceAt", mock.Anything, key.Address)`
$DIR/core/web/evm_transfer_controller_test.go: `.Return(uint64(1), nil)`
$DIR/core/web/evm_transfer_controller_test.go: `.On("BalanceAt", mock.Anything, key.Address, (*big.Int)(nil))`
$DIR/core/web/evm_transfer_controller_test.go: `.Return(balance.ToInt(), nil)`
$DIR/core/web/evm_transfer_controller_test.go: `.ToInt()`
$DIR/core/web/evm_transfer_controller_test.go: `.On("SequenceAt", mock.Anything, mock.Anything, mock.Anything)`
$DIR/core/web/evm_transfer_controller_test.go: `.Return(evmtypes.Nonce(0), nil)`
$DIR/core/web/evm_transfer_controller_test.go: `.Nonce(0)`
$DIR/core/web/evm_transfer_controller_test.go: `.Maybe()`
$DIR/core/web/evm_transfer_controller_test.go: `.NewGeneralConfig(t, func(c *chainlink.Config, s *chainlink.Secrets) {
c.EVM[0].GasEstimator.EIP1559DynamicFees = ptr(true)
c.EVM[0].GasEstimator.Mode = ptr("FixedPrice")
c.EVM[0].ChainID = (*ubig.Big)(testutils.FixtureChainID)
// NOTE: FallbackPollInterval is used in this test to quickly create TxAttempts
// Testing triggers requires committing transactions and does not work with transactional tests
c.Database.Listener.FallbackPollInterval = commonconfig.MustNewDuration(time.Second)
})`
$DIR/core/web/evm_transfer_controller_test.go: `.MustNewDuration(time.Second)`
$DIR/core/web/evm_transfer_controller_test.go: `.NewApplicationWithConfigAndKey(t, config, ethClient, key)`
$DIR/core/web/evm_transfer_controller_test.go: `.NewHTTPClient(nil)`
$DIR/core/web/evm_transfer_controller_test.go: `.NewEthValueS("100")`
$DIR/core/web/evm_transfer_controller_test.go: `.HexToAddress("0xFA01FA015C8A5332987319823728982379128371")`
$DIR/core/web/evm_transfer_controller_test.go: `.New(evmtest.MustGetDefaultChainID(t, config.EVMConfigs()))`
$DIR/core/web/evm_transfer_controller_test.go: `.MustGetDefaultChainID(t, config.EVMConfigs())`
$DIR/core/web/evm_transfer_controller_test.go: `.EVMConfigs()`
$DIR/core/web/evm_transfer_controller_test.go: `.Marshal(&request)`
$DIR/core/web/evm_transfer_controller_test.go: `.Post("/v2/transfers", bytes.NewBuffer(body))`
$DIR/core/web/evm_transfer_controller_test.go: `.NewBuffer(body)`
$DIR/core/web/evm_transfer_controller_test.go: `.Cleanup(cleanup)`
$DIR/core/web/evm_transfer_controller_test.go: `.AssertServerResponse(t, resp, http.StatusOK)`
$DIR/core/web/evm_transfer_controller_test.go: `.ParseJSONAPIResponse(cltest.ParseResponseBody(t, resp), &resource)`
$DIR/core/web/evm_transfer_controller_test.go: `.ParseResponseBody(t, resp)`
$DIR/core/web/evm_transfer_controller_test.go: `.GetDB()`
$DIR/core/web/evm_transfer_controller_test.go: `.Run("happy_path", func(t *testing.T) {
ctx := testutils.Context(t)
timeout := 5 * time.Second
var done bool
find := func(_ context.Context, _ int64) (txmgr.Tx, error) {
if !done {
done = true
return tx, nil
}
return txWithAttempt, nil
}
a, err := web.FindTxAttempt(ctx, timeout, tx, find)
require.NoError(t, err)
assert.Equal(t, tx.ID, a.Tx.ID)
assert.Equal(t, attempt.ID, a.ID)
})`
$DIR/core/web/evm_transfer_controller_test.go: `.Context(t)`
$DIR/core/web/evm_transfer_controller_test.go: `.FindTxAttempt(ctx, timeout, tx, find)`
$DIR/core/web/evm_transfer_controller_test.go: `.Run("failed to find tx", func(t *testing.T) {
ctx := testutils.Context(t)
find := func(_ context.Context, _ int64) (txmgr.Tx, error) {
return txmgr.Tx{}, fmt.Errorf("ERRORED")
}
_, err := web.FindTxAttempt(ctx, time.Second, tx, find)
assert.ErrorContains(t, err, "failed to find transaction")
})`
$DIR/core/web/evm_transfer_controller_test.go: `.Context(t)`
$DIR/core/web/evm_transfer_controller_test.go: `.FindTxAttempt(ctx, time.Second, tx, find)`
$DIR/core/web/evm_transfer_controller_test.go: `.Run("timeout", func(t *testing.T) {
ctx := testutils.Context(t)
find := func(_ context.Context, _ int64) (txmgr.Tx, error) {
return tx, nil
}
_, err := web.FindTxAttempt(ctx, time.Second, tx, find)
assert.ErrorContains(t, err, "context deadline exceeded")
})`
$DIR/core/web/evm_transfer_controller_test.go: `.Context(t)`
$DIR/core/web/evm_transfer_controller_test.go: `.FindTxAttempt(ctx, time.Second, tx, find)`
$DIR/core/web/evm_transfer_controller_test.go: `.Context(t)`
$DIR/core/web/evm_transfer_controller_test.go: `.WithCancel(ctx)`
$DIR/core/web/evm_transfer_controller_test.go: `.Sleep(1 * time.Second)`
$DIR/core/web/evm_transfer_controller_test.go: `.FindTxAttempt(ctx, 5*time.Second, tx, find)`
$DIR/core/web/evm_tx_attempts_controller_test.go: `cltest.MustInsertConfirmedEthTxWithLegacyAttempt(t, txStore, 0, 1, from)`
$DIR/core/web/evm_tx_attempts_controller_test.go: `cltest.MustInsertConfirmedEthTxWithLegacyAttempt(t, txStore, 1, 2, from)`
$DIR/core/web/evm_tx_attempts_controller_test.go: `cltest.MustInsertConfirmedEthTxWithLegacyAttempt(t, txStore, 2, 3, from)`
$DIR/core/web/evm_tx_attempts_controller_test.go: `t.Cleanup(cleanup)`
$DIR/core/web/evm_tx_attempts_controller_test.go: `cltest.AssertServerResponse(t, resp, http.StatusOK)`
$DIR/core/web/evm_tx_attempts_controller_test.go: `t.Cleanup(cleanup)`
$DIR/core/web/evm_tx_attempts_controller_test.go: `.NewApplicationWithKey(t)`
$DIR/core/web/evm_tx_attempts_controller_test.go: `.NewTestTxStore(t, app.GetDB())`
$DIR/core/web/evm_tx_attempts_controller_test.go: `.GetDB()`
$DIR/core/web/evm_tx_attempts_controller_test.go: `.NewHTTPClient(nil)`
$DIR/core/web/evm_tx_attempts_controller_test.go: `.MustInsertRandomKey(t, app.KeyStore.Eth())`
$DIR/core/web/evm_tx_attempts_controller_test.go: `.KeyStore.Eth()`
$DIR/core/web/evm_tx_attempts_controller_test.go: `.MustInsertConfirmedEthTxWithLegacyAttempt(t, txStore, 0, 1, from)`
$DIR/core/web/evm_tx_attempts_controller_test.go: `.MustInsertConfirmedEthTxWithLegacyAttempt(t, txStore, 1, 2, from)`
$DIR/core/web/evm_tx_attempts_controller_test.go: `.MustInsertConfirmedEthTxWithLegacyAttempt(t, txStore, 2, 3, from)`
$DIR/core/web/evm_tx_attempts_controller_test.go: `.Get("/v2/tx_attempts?size=2")`
$DIR/core/web/evm_tx_attempts_controller_test.go: `.Cleanup(cleanup)`
$DIR/core/web/evm_tx_attempts_controller_test.go: `.AssertServerResponse(t, resp, http.StatusOK)`
$DIR/core/web/evm_tx_attempts_controller_test.go: `.ParseResponseBody(t, resp)`
$DIR/core/web/evm_tx_attempts_controller_test.go: `.NewApplicationWithKey(t)`
$DIR/core/web/evm_tx_attempts_controller_test.go: `.NewHTTPClient(nil)`
$DIR/core/web/evm_tx_attempts_controller_test.go: `.Get("/v2/tx_attempts?size=TrainingDay")`
$DIR/core/web/evm_tx_attempts_controller_test.go: `.Cleanup(cleanup)`
$DIR/core/web/external_initiators_controller_test.go: `t.Run(test.name, func(t *testing.T) {
ctx := testutils.Context(t)
var exr bridges.ExternalInitiatorRequest
assert.NoError(t, json.Unmarshal([]byte(test.input), &exr))
result := web.ValidateExternalInitiator(ctx, &exr, orm)
cltest.AssertError(t, test.wantError, result)
})`
$DIR/core/web/external_initiators_controller_test.go: `cltest.AssertError(t, test.wantError, result)`
$DIR/core/web/external_initiators_controller_test.go: `c.JobPipeline.ExternalInitiatorsEnabled = ptr(true)`
$DIR/core/web/external_initiators_controller_test.go: `t.Cleanup(cleanup)`
$DIR/core/web/external_initiators_controller_test.go: `cltest.AssertServerResponse(t, resp, http.StatusUnprocessableEntity)`
$DIR/core/web/external_initiators_controller_test.go: `resp, cleanup = client.Get("/v2/external_initiators?size=1")`
$DIR/core/web/external_initiators_controller_test.go: `t.Cleanup(cleanup)`
$DIR/core/web/external_initiators_controller_test.go: `cltest.AssertServerResponse(t, resp, http.StatusOK)`
$DIR/core/web/external_initiators_controller_test.go: `err = web.ParsePaginatedResponse(body, &eis, &links)`
$DIR/core/web/external_initiators_controller_test.go: `resp, cleanup = client.Get(links["next"].Href)`
$DIR/core/web/external_initiators_controller_test.go: `t.Cleanup(cleanup)`
$DIR/core/web/external_initiators_controller_test.go: `cltest.AssertServerResponse(t, resp, http.StatusOK)`
$DIR/core/web/external_initiators_controller_test.go: `eis = []presenters.ExternalInitiatorResource{}`
$DIR/core/web/external_initiators_controller_test.go: `err = web.ParsePaginatedResponse(cltest.ParseResponseBody(t, resp), &eis, &links)`
$DIR/core/web/external_initiators_controller_test.go: `c.JobPipeline.ExternalInitiatorsEnabled = ptr(true)`
$DIR/core/web/external_initiators_controller_test.go: `t.Cleanup(cleanup)`
$DIR/core/web/external_initiators_controller_test.go: `cltest.AssertServerResponse(t, resp, http.StatusCreated)`
$DIR/core/web/external_initiators_controller_test.go: `c.JobPipeline.ExternalInitiatorsEnabled = ptr(true)`
$DIR/core/web/external_initiators_controller_test.go: `t.Cleanup(cleanup)`
$DIR/core/web/external_initiators_controller_test.go: `cltest.AssertServerResponse(t, resp, 201)`
$DIR/core/web/external_initiators_controller_test.go: `c.JobPipeline.ExternalInitiatorsEnabled = ptr(true)`
$DIR/core/web/external_initiators_controller_test.go: `t.Cleanup(cleanup)`
$DIR/core/web/external_initiators_controller_test.go: `c.JobPipeline.ExternalInitiatorsEnabled = ptr(true)`
$DIR/core/web/external_initiators_controller_test.go: `t.Cleanup(cleanup)`
$DIR/core/web/external_initiators_controller_test.go: `c.JobPipeline.ExternalInitiatorsEnabled = ptr(true)`
$DIR/core/web/external_initiators_controller_test.go: `t.Run(test.Name, func(t *testing.T) {
resp, cleanup := client.Delete(test.URL)
t.Cleanup(cleanup)
assert.Equal(t, http.StatusText(http.StatusNotFound), http.StatusText(resp.StatusCode))
})`
$DIR/core/web/external_initiators_controller_test.go: `t.Cleanup(cleanup)`
$DIR/core/web/external_initiators_controller_test.go: `.NewSqlxDB(t)`
$DIR/core/web/external_initiators_controller_test.go: `.NewORM(db)`
$DIR/core/web/external_initiators_controller_test.go: `.WebURL(t, "https://a.web.url")`
$DIR/core/web/external_initiators_controller_test.go: `.Run(test.name, func(t *testing.T) {
ctx := testutils.Context(t)
var exr bridges.ExternalInitiatorRequest
assert.NoError(t, json.Unmarshal([]byte(test.input), &exr))
result := web.ValidateExternalInitiator(ctx, &exr, orm)
cltest.AssertError(t, test.wantError, result)
})`
$DIR/core/web/external_initiators_controller_test.go: `.Context(t)`
$DIR/core/web/external_initiators_controller_test.go: `.ValidateExternalInitiator(ctx, &exr, orm)`
$DIR/core/web/external_initiators_controller_test.go: `.AssertError(t, test.wantError, result)`
$DIR/core/web/external_initiators_controller_test.go: `.NewApplicationWithConfig(t,
configtest.NewGeneralConfig(t, func(c *chainlink.Config, s *chainlink.Secrets) {
c.JobPipeline.ExternalInitiatorsEnabled = ptr(true)
}))`
$DIR/core/web/external_initiators_controller_test.go: `.NewGeneralConfig(t, func(c *chainlink.Config, s *chainlink.Secrets) {
c.JobPipeline.ExternalInitiatorsEnabled = ptr(true)
})`
$DIR/core/web/external_initiators_controller_test.go: `.NewHTTPClient(nil)`
$DIR/core/web/external_initiators_controller_test.go: `.GetDB()`
$DIR/core/web/external_initiators_controller_test.go: `.NewORM(db)`
$DIR/core/web/external_initiators_controller_test.go: `.MustInsertExternalInitiatorWithOpts(t, borm, cltest.ExternalInitiatorOpts{
NamePrefix: "foo",
URL: cltest.MustWebURL(t, "http://example.com/foo"),
OutgoingToken: "outgoing_token",
})`
$DIR/core/web/external_initiators_controller_test.go: `.MustWebURL(t, "http://example.com/foo")`
$DIR/core/web/external_initiators_controller_test.go: `.MustInsertExternalInitiatorWithOpts(t, borm, cltest.ExternalInitiatorOpts{NamePrefix: "bar"})`
$DIR/core/web/external_initiators_controller_test.go: `.Get("/v2/external_initiators?size=x")`
$DIR/core/web/external_initiators_controller_test.go: `.Cleanup(cleanup)`
$DIR/core/web/external_initiators_controller_test.go: `.AssertServerResponse(t, resp, http.StatusUnprocessableEntity)`
$DIR/core/web/external_initiators_controller_test.go: `.Get("/v2/external_initiators?size=1")`
$DIR/core/web/external_initiators_controller_test.go: `.Cleanup(cleanup)`
$DIR/core/web/external_initiators_controller_test.go: `.AssertServerResponse(t, resp, http.StatusOK)`
$DIR/core/web/external_initiators_controller_test.go: `.ParseResponseBody(t, resp)`
$DIR/core/web/external_initiators_controller_test.go: `.ParseJSONAPIResponseMetaCount(body)`
$DIR/core/web/external_initiators_controller_test.go: `.ParsePaginatedResponse(body, &eis, &links)`
$DIR/core/web/external_initiators_controller_test.go: `.Get(links["next"].Href)`
$DIR/core/web/external_initiators_controller_test.go: `.Cleanup(cleanup)`
$DIR/core/web/external_initiators_controller_test.go: `.AssertServerResponse(t, resp, http.StatusOK)`
$DIR/core/web/external_initiators_controller_test.go: `.ParsePaginatedResponse(cltest.ParseResponseBody(t, resp), &eis, &links)`
$DIR/core/web/external_initiators_controller_test.go: `.ParseResponseBody(t, resp)`
$DIR/core/web/external_initiators_controller_test.go: `.NewApplicationWithConfig(t,
configtest.NewGeneralConfig(t, func(c *chainlink.Config, s *chainlink.Secrets) {
c.JobPipeline.ExternalInitiatorsEnabled = ptr(true)
}))`
$DIR/core/web/external_initiators_controller_test.go: `.NewGeneralConfig(t, func(c *chainlink.Config, s *chainlink.Secrets) {
c.JobPipeline.ExternalInitiatorsEnabled = ptr(true)
})`
$DIR/core/web/external_initiators_controller_test.go: `.NewHTTPClient(nil)`
$DIR/core/web/external_initiators_controller_test.go: `.Post("/v2/external_initiators",
bytes.NewBufferString(`{"name":"bitcoin","url":"http://without.a.name"}`),
)`
$DIR/core/web/external_initiators_controller_test.go: `.NewBufferString(`{"name":"bitcoin","url":"http://without.a.name"}`)`
$DIR/core/web/external_initiators_controller_test.go: `.Cleanup(cleanup)`
$DIR/core/web/external_initiators_controller_test.go: `.AssertServerResponse(t, resp, http.StatusCreated)`
$DIR/core/web/external_initiators_controller_test.go: `.ParseJSONAPIResponse(t, resp, ei)`
$DIR/core/web/external_initiators_controller_test.go: `.NewApplicationWithConfig(t,
configtest.NewGeneralConfig(t, func(c *chainlink.Config, s *chainlink.Secrets) {
c.JobPipeline.ExternalInitiatorsEnabled = ptr(true)
}))`
$DIR/core/web/external_initiators_controller_test.go: `.NewGeneralConfig(t, func(c *chainlink.Config, s *chainlink.Secrets) {
c.JobPipeline.ExternalInitiatorsEnabled = ptr(true)
})`
$DIR/core/web/external_initiators_controller_test.go: `.NewHTTPClient(nil)`
$DIR/core/web/external_initiators_controller_test.go: `.Post("/v2/external_initiators",
bytes.NewBufferString(`{"name":"no-url"}`),
)`
$DIR/core/web/external_initiators_controller_test.go: `.NewBufferString(`{"name":"no-url"}`)`
$DIR/core/web/external_initiators_controller_test.go: `.Cleanup(cleanup)`
$DIR/core/web/external_initiators_controller_test.go: `.AssertServerResponse(t, resp, 201)`
$DIR/core/web/external_initiators_controller_test.go: `.ParseJSONAPIResponse(t, resp, ei)`
$DIR/core/web/external_initiators_controller_test.go: `.NewApplicationWithConfig(t,
configtest.NewGeneralConfig(t, func(c *chainlink.Config, s *chainlink.Secrets) {
c.JobPipeline.ExternalInitiatorsEnabled = ptr(true)
}))`
$DIR/core/web/external_initiators_controller_test.go: `.NewGeneralConfig(t, func(c *chainlink.Config, s *chainlink.Secrets) {
c.JobPipeline.ExternalInitiatorsEnabled = ptr(true)
})`
$DIR/core/web/external_initiators_controller_test.go: `.NewHTTPClient(nil)`
$DIR/core/web/external_initiators_controller_test.go: `.Post("/v2/external_initiators",
bytes.NewBufferString(`{"url":"http://without.a.name"}`),
)`
$DIR/core/web/external_initiators_controller_test.go: `.NewBufferString(`{"url":"http://without.a.name"}`)`
$DIR/core/web/external_initiators_controller_test.go: `.Cleanup(cleanup)`
$DIR/core/web/external_initiators_controller_test.go: `.NewApplicationWithConfig(t,
configtest.NewGeneralConfig(t, func(c *chainlink.Config, s *chainlink.Secrets) {
c.JobPipeline.ExternalInitiatorsEnabled = ptr(true)
}))`
$DIR/core/web/external_initiators_controller_test.go: `.NewGeneralConfig(t, func(c *chainlink.Config, s *chainlink.Secrets) {
c.JobPipeline.ExternalInitiatorsEnabled = ptr(true)
})`
$DIR/core/web/external_initiators_controller_test.go: `.BridgeORM()`
$DIR/core/web/external_initiators_controller_test.go: `.CreateExternalInitiator(testutils.Context(t), &exi)`
$DIR/core/web/external_initiators_controller_test.go: `.Context(t)`
$DIR/core/web/external_initiators_controller_test.go: `.NewHTTPClient(nil)`
$DIR/core/web/external_initiators_controller_test.go: `.Delete("/v2/external_initiators/" + exi.Name)`
$DIR/core/web/external_initiators_controller_test.go: `.Cleanup(cleanup)`
$DIR/core/web/external_initiators_controller_test.go: `.NewApplicationWithConfig(t,
configtest.NewGeneralConfig(t, func(c *chainlink.Config, s *chainlink.Secrets) {
c.JobPipeline.ExternalInitiatorsEnabled = ptr(true)
}))`
$DIR/core/web/external_initiators_controller_test.go: `.NewGeneralConfig(t, func(c *chainlink.Config, s *chainlink.Secrets) {
c.JobPipeline.ExternalInitiatorsEnabled = ptr(true)
})`
$DIR/core/web/external_initiators_controller_test.go: `.NewHTTPClient(nil)`
$DIR/core/web/external_initiators_controller_test.go: `.Run(test.Name, func(t *testing.T) {
resp, cleanup := client.Delete(test.URL)
t.Cleanup(cleanup)
assert.Equal(t, http.StatusText(http.StatusNotFound), http.StatusText(resp.StatusCode))
})`
$DIR/core/web/external_initiators_controller_test.go: `.Delete(test.URL)`
$DIR/core/web/external_initiators_controller_test.go: `.Cleanup(cleanup)`
$DIR/core/web/features_controller_test.go: `c.Feature.UICSAKeys = &csa`
$DIR/core/web/features_controller_test.go: `t.Cleanup(cleanup)`
$DIR/core/web/features_controller_test.go: `.NewApplicationWithConfig(t, configtest.NewGeneralConfig(t, func(c *chainlink.Config, s *chainlink.Secrets) {
csa := true
c.Feature.UICSAKeys = &csa
}))`
$DIR/core/web/features_controller_test.go: `.NewGeneralConfig(t, func(c *chainlink.Config, s *chainlink.Secrets) {
csa := true
c.Feature.UICSAKeys = &csa
})`
$DIR/core/web/features_controller_test.go: `.NewHTTPClient(nil)`
$DIR/core/web/features_controller_test.go: `.Get("/v2/features")`
$DIR/core/web/features_controller_test.go: `.Cleanup(cleanup)`
$DIR/core/web/features_controller_test.go: `.ParseJSONAPIResponse(cltest.ParseResponseBody(t, resp), &resources)`
$DIR/core/web/features_controller_test.go: `.ParseResponseBody(t, resp)`
$DIR/core/web/gui_assets_test.go: `t.Run(tc.name, func(t *testing.T) {
t.Parallel()
req, err := http.NewRequestWithContext(testutils.Context(t), "GET", app.Server.URL+tc.path, nil)
require.NoError(t, err)
resp, err := client.Do(req)
require.NoError(t, err)
cltest.AssertServerResponse(t, resp, http.StatusOK)
})`
$DIR/core/web/gui_assets_test.go: `cltest.AssertServerResponse(t, resp, http.StatusOK)`
$DIR/core/web/gui_assets_test.go: `t.Run(tc.name, func(t *testing.T) {
t.Parallel()
req, err := http.NewRequestWithContext(testutils.Context(t), "GET", app.Server.URL+tc.path, nil)
require.NoError(t, err)
resp, err := client.Do(req)
require.NoError(t, err)
cltest.AssertServerResponse(t, resp, http.StatusNotFound)
})`
$DIR/core/web/gui_assets_test.go: `cltest.AssertServerResponse(t, resp, http.StatusNotFound)`
$DIR/core/web/gui_assets_test.go: `cltest.AssertServerResponse(t, resp, http.StatusOK)`
$DIR/core/web/gui_assets_test.go: `t.Run("it get exact assets if Accept-Encoding is not specified", func(t *testing.T) {
recorder := httptest.NewRecorder()
c, _ := gin.CreateTestContext(recorder)
var err error
c.Request, err = http.NewRequestWithContext(c, "GET", "http://localhost:6688/fixtures/operator_ui/assets/main.js", nil)
require.NoError(t, err)
handler(c)
require.Equal(t, http.StatusOK, recorder.Result().StatusCode)
recorder = httptest.NewRecorder()
c, _ = gin.CreateTestContext(recorder)
c.Request, err = http.NewRequestWithContext(c, "GET", "http://localhost:6688/fixtures/operator_ui/assets/kinda_main.js", nil)
require.NoError(t, err)
handler(c)
require.Equal(t, http.StatusNotFound, recorder.Result().StatusCode)
})`
$DIR/core/web/gui_assets_test.go: `c.Request, err = http.NewRequestWithContext(c, "GET", "http://localhost:6688/fixtures/operator_ui/assets/main.js", nil)`
$DIR/core/web/gui_assets_test.go: `handler(c)`
$DIR/core/web/gui_assets_test.go: `recorder = httptest.NewRecorder()`
$DIR/core/web/gui_assets_test.go: `c, _ = gin.CreateTestContext(recorder)`
$DIR/core/web/gui_assets_test.go: `c.Request, err = http.NewRequestWithContext(c, "GET", "http://localhost:6688/fixtures/operator_ui/assets/kinda_main.js", nil)`
$DIR/core/web/gui_assets_test.go: `handler(c)`
$DIR/core/web/gui_assets_test.go: `c.Request, err = http.NewRequestWithContext(c, "GET", "http://localhost:6688/fixtures/operator_ui/assets/main.js", nil)`
$DIR/core/web/gui_assets_test.go: `c.Request.Header.Set("Accept-Encoding", "gzip")`
$DIR/core/web/gui_assets_test.go: `handler(c)`
$DIR/core/web/gui_assets_test.go: `recorder = httptest.NewRecorder()`
$DIR/core/web/gui_assets_test.go: `c, _ = gin.CreateTestContext(recorder)`
$DIR/core/web/gui_assets_test.go: `c.Request, err = http.NewRequestWithContext(c, "GET", "http://localhost:6688/fixtures/operator_ui/assets/kinda_main.js", nil)`
$DIR/core/web/gui_assets_test.go: `c.Request.Header.Set("Accept-Encoding", "gzip")`
$DIR/core/web/gui_assets_test.go: `handler(c)`
$DIR/core/web/gui_assets_test.go: `.NewApplication(t)`
$DIR/core/web/gui_assets_test.go: `.NewTestLocalOnlyHTTPClient()`
$DIR/core/web/gui_assets_test.go: `.Run(tc.name, func(t *testing.T) {
t.Parallel()
req, err := http.NewRequestWithContext(testutils.Context(t), "GET", app.Server.URL+tc.path, nil)
require.NoError(t, err)
resp, err := client.Do(req)
require.NoError(t, err)
cltest.AssertServerResponse(t, resp, http.StatusOK)
})`
$DIR/core/web/gui_assets_test.go: `.NewRequestWithContext(testutils.Context(t), "GET", app.Server.URL+tc.path, nil)`
$DIR/core/web/gui_assets_test.go: `.Context(t)`
$DIR/core/web/gui_assets_test.go: `.Do(req)`
$DIR/core/web/gui_assets_test.go: `.AssertServerResponse(t, resp, http.StatusOK)`
$DIR/core/web/gui_assets_test.go: `.NewApplication(t)`
$DIR/core/web/gui_assets_test.go: `.NewTestLocalOnlyHTTPClient()`
$DIR/core/web/gui_assets_test.go: `.Run(tc.name, func(t *testing.T) {
t.Parallel()
req, err := http.NewRequestWithContext(testutils.Context(t), "GET", app.Server.URL+tc.path, nil)
require.NoError(t, err)
resp, err := client.Do(req)
require.NoError(t, err)
cltest.AssertServerResponse(t, resp, http.StatusNotFound)
})`
$DIR/core/web/gui_assets_test.go: `.NewRequestWithContext(testutils.Context(t), "GET", app.Server.URL+tc.path, nil)`
$DIR/core/web/gui_assets_test.go: `.Context(t)`
$DIR/core/web/gui_assets_test.go: `.Do(req)`
$DIR/core/web/gui_assets_test.go: `.AssertServerResponse(t, resp, http.StatusNotFound)`
$DIR/core/web/gui_assets_test.go: `.NewGeneralConfig(t, nil)`
$DIR/core/web/gui_assets_test.go: `.NewApplicationWithConfig(t, config)`
$DIR/core/web/gui_assets_test.go: `.NewTestLocalOnlyHTTPClient()`
$DIR/core/web/gui_assets_test.go: `.NewRequestWithContext(testutils.Context(t), "GET", app.Server.URL+"/", nil)`
$DIR/core/web/gui_assets_test.go: `.Context(t)`
$DIR/core/web/gui_assets_test.go: `.Do(req)`
$DIR/core/web/gui_assets_test.go: `.AssertServerResponse(t, resp, http.StatusOK)`
$DIR/core/web/gui_assets_test.go: `.NewRequestWithContext(testutils.Context(t), "GET", app.Server.URL+"/", nil)`
$DIR/core/web/gui_assets_test.go: `.Context(t)`
$DIR/core/web/gui_assets_test.go: `.Do(req)`
$DIR/core/web/gui_assets_test.go: `.NewEmbedFileSystem(testFs, "fixtures/operator_ui")`
$DIR/core/web/gui_assets_test.go: `.ServeGzippedAssets("/fixtures/operator_ui/", efs, logger.TestLogger(t))`
$DIR/core/web/gui_assets_test.go: `.TestLogger(t)`
$DIR/core/web/gui_assets_test.go: `.Run("it get exact assets if Accept-Encoding is not specified", func(t *testing.T) {
recorder := httptest.NewRecorder()
c, _ := gin.CreateTestContext(recorder)
var err error
c.Request, err = http.NewRequestWithContext(c, "GET", "http://localhost:6688/fixtures/operator_ui/assets/main.js", nil)
require.NoError(t, err)
handler(c)
require.Equal(t, http.StatusOK, recorder.Result().StatusCode)
recorder = httptest.NewRecorder()
c, _ = gin.CreateTestContext(recorder)
c.Request, err = http.NewRequestWithContext(c, "GET", "http://localhost:6688/fixtures/operator_ui/assets/kinda_main.js", nil)
require.NoError(t, err)
handler(c)
require.Equal(t, http.StatusNotFound, recorder.Result().StatusCode)
})`
$DIR/core/web/gui_assets_test.go: `.NewRecorder()`
$DIR/core/web/gui_assets_test.go: `.CreateTestContext(recorder)`
$DIR/core/web/gui_assets_test.go: `.NewRequestWithContext(c, "GET", "http://localhost:6688/fixtures/operator_ui/assets/main.js", nil)`
$DIR/core/web/gui_assets_test.go: `.NewRecorder()`
$DIR/core/web/gui_assets_test.go: `.CreateTestContext(recorder)`
$DIR/core/web/gui_assets_test.go: `.NewRequestWithContext(c, "GET", "http://localhost:6688/fixtures/operator_ui/assets/kinda_main.js", nil)`
$DIR/core/web/gui_assets_test.go: `.NewRecorder()`
$DIR/core/web/gui_assets_test.go: `.CreateTestContext(recorder)`
$DIR/core/web/gui_assets_test.go: `.NewRequestWithContext(c, "GET", "http://localhost:6688/fixtures/operator_ui/assets/main.js", nil)`
$DIR/core/web/gui_assets_test.go: `.Request.Header.Set("Accept-Encoding", "gzip")`
$DIR/core/web/gui_assets_test.go: `.NewRecorder()`
$DIR/core/web/gui_assets_test.go: `.CreateTestContext(recorder)`
$DIR/core/web/gui_assets_test.go: `.NewRequestWithContext(c, "GET", "http://localhost:6688/fixtures/operator_ui/assets/kinda_main.js", nil)`
$DIR/core/web/gui_assets_test.go: `.Request.Header.Set("Accept-Encoding", "gzip")`
$DIR/core/web/health_controller_test.go: `t.Run(tc.name, func(t *testing.T) {
app := cltest.NewApplicationWithKey(t)
healthChecker := new(mocks.Checker)
healthChecker.On("Start").Return(nil).Once()
healthChecker.On("IsReady").Return(tc.ready, nil).Once()
healthChecker.On("Close").Return(nil).Once()
app.HealthChecker = healthChecker
require.NoError(t, app.Start(testutils.Context(t)))
client := app.NewHTTPClient(nil)
resp, cleanup := client.Get("/readyz")
t.Cleanup(cleanup)
assert.Equal(t, tc.status, resp.StatusCode)
})`
$DIR/core/web/health_controller_test.go: `healthChecker.On("Start").Return(nil).Once()`
$DIR/core/web/health_controller_test.go: `healthChecker.On("IsReady").Return(tc.ready, nil).Once()`
$DIR/core/web/health_controller_test.go: `healthChecker.On("Close").Return(nil).Once()`
$DIR/core/web/health_controller_test.go: `app.HealthChecker = healthChecker`
$DIR/core/web/health_controller_test.go: `t.Cleanup(cleanup)`
$DIR/core/web/health_controller_test.go: `t.Run(tc.name, func(t *testing.T) {
app := cltest.NewApplicationWithKey(t)
healthChecker := new(mocks.Checker)
healthChecker.On("Start").Return(nil).Once()
healthChecker.On("IsHealthy").Return(tc.ready, nil).Once()
healthChecker.On("Close").Return(nil).Once()
app.HealthChecker = healthChecker
require.NoError(t, app.Start(testutils.Context(t)))
client := app.NewHTTPClient(nil)
resp, cleanup := client.Get("/health")
t.Cleanup(cleanup)
assert.Equal(t, tc.status, resp.StatusCode)
})`
$DIR/core/web/health_controller_test.go: `healthChecker.On("Start").Return(nil).Once()`
$DIR/core/web/health_controller_test.go: `healthChecker.On("IsHealthy").Return(tc.ready, nil).Once()`
$DIR/core/web/health_controller_test.go: `healthChecker.On("Close").Return(nil).Once()`
$DIR/core/web/health_controller_test.go: `app.HealthChecker = healthChecker`
$DIR/core/web/health_controller_test.go: `t.Cleanup(cleanup)`
$DIR/core/web/health_controller_test.go: `t.Run(tc.name, func(t *testing.T) {
app := cltest.NewApplicationWithKey(t)
require.NoError(t, app.Start(testutils.Context(t)))
client := app.NewHTTPClient(nil)
resp, cleanup := client.Get(tc.path, tc.headers)
t.Cleanup(cleanup)
assert.Equal(t, http.StatusMultiStatus, resp.StatusCode)
body, err := io.ReadAll(resp.Body)
require.NoError(t, err)
if tc.expBody == bodyJSON {
// pretty print for comparison
var b bytes.Buffer
require.NoError(t, json.Indent(&b, body, "", " "))
body = b.Bytes()
}
assert.Equal(t, tc.expBody, string(body))
})`
$DIR/core/web/health_controller_test.go: `t.Cleanup(cleanup)`
$DIR/core/web/health_controller_test.go: `body = b.Bytes()`
$DIR/core/web/health_controller_test.go: `.Run(tc.name, func(t *testing.T) {
app := cltest.NewApplicationWithKey(t)
healthChecker := new(mocks.Checker)
healthChecker.On("Start").Return(nil).Once()
healthChecker.On("IsReady").Return(tc.ready, nil).Once()
healthChecker.On("Close").Return(nil).Once()
app.HealthChecker = healthChecker
require.NoError(t, app.Start(testutils.Context(t)))
client := app.NewHTTPClient(nil)
resp, cleanup := client.Get("/readyz")
t.Cleanup(cleanup)
assert.Equal(t, tc.status, resp.StatusCode)
})`
$DIR/core/web/health_controller_test.go: `.NewApplicationWithKey(t)`
$DIR/core/web/health_controller_test.go: `.On("Start")`
$DIR/core/web/health_controller_test.go: `.Return(nil)`
$DIR/core/web/health_controller_test.go: `.Once()`
$DIR/core/web/health_controller_test.go: `.On("IsReady")`
$DIR/core/web/health_controller_test.go: `.Return(tc.ready, nil)`
$DIR/core/web/health_controller_test.go: `.Once()`
$DIR/core/web/health_controller_test.go: `.On("Close")`
$DIR/core/web/health_controller_test.go: `.Return(nil)`
$DIR/core/web/health_controller_test.go: `.Once()`
$DIR/core/web/health_controller_test.go: `.NewHTTPClient(nil)`
$DIR/core/web/health_controller_test.go: `.Get("/readyz")`
$DIR/core/web/health_controller_test.go: `.Cleanup(cleanup)`
$DIR/core/web/health_controller_test.go: `.Run(tc.name, func(t *testing.T) {
app := cltest.NewApplicationWithKey(t)
healthChecker := new(mocks.Checker)
healthChecker.On("Start").Return(nil).Once()
healthChecker.On("IsHealthy").Return(tc.ready, nil).Once()
healthChecker.On("Close").Return(nil).Once()
app.HealthChecker = healthChecker
require.NoError(t, app.Start(testutils.Context(t)))
client := app.NewHTTPClient(nil)
resp, cleanup := client.Get("/health")
t.Cleanup(cleanup)
assert.Equal(t, tc.status, resp.StatusCode)
})`
$DIR/core/web/health_controller_test.go: `.NewApplicationWithKey(t)`
$DIR/core/web/health_controller_test.go: `.On("Start")`
$DIR/core/web/health_controller_test.go: `.Return(nil)`
$DIR/core/web/health_controller_test.go: `.Once()`
$DIR/core/web/health_controller_test.go: `.On("IsHealthy")`
$DIR/core/web/health_controller_test.go: `.Return(tc.ready, nil)`
$DIR/core/web/health_controller_test.go: `.Once()`
$DIR/core/web/health_controller_test.go: `.On("Close")`
$DIR/core/web/health_controller_test.go: `.Return(nil)`
$DIR/core/web/health_controller_test.go: `.Once()`
$DIR/core/web/health_controller_test.go: `.NewHTTPClient(nil)`
$DIR/core/web/health_controller_test.go: `.Get("/health")`
$DIR/core/web/health_controller_test.go: `.Cleanup(cleanup)`
$DIR/core/web/health_controller_test.go: `.Run(tc.name, func(t *testing.T) {
app := cltest.NewApplicationWithKey(t)
require.NoError(t, app.Start(testutils.Context(t)))
client := app.NewHTTPClient(nil)
resp, cleanup := client.Get(tc.path, tc.headers)
t.Cleanup(cleanup)
assert.Equal(t, http.StatusMultiStatus, resp.StatusCode)
body, err := io.ReadAll(resp.Body)
require.NoError(t, err)
if tc.expBody == bodyJSON {
// pretty print for comparison
var b bytes.Buffer
require.NoError(t, json.Indent(&b, body, "", " "))
body = b.Bytes()
}
assert.Equal(t, tc.expBody, string(body))
})`
$DIR/core/web/health_controller_test.go: `.NewApplicationWithKey(t)`
$DIR/core/web/health_controller_test.go: `.NewHTTPClient(nil)`
$DIR/core/web/health_controller_test.go: `.Get(tc.path, tc.headers)`
$DIR/core/web/health_controller_test.go: `.Cleanup(cleanup)`
$DIR/core/web/health_controller_test.go: `.ReadAll(resp.Body)`
$DIR/core/web/health_controller_test.go: `.Bytes()`
$DIR/core/web/health_template_test.go: `.String()`
$DIR/core/web/health_template_test.go: `.String()`
$DIR/core/web/jobs_controller_test.go: `t.Run(tc.name, func(t *testing.T) {
ctx := testutils.Context(t)
ta, client := setupJobsControllerTests(t)
var address types.EIP55Address
if tc.taExists {
key, _ := cltest.MustInsertRandomKey(t, ta.KeyStore.Eth())
address = key.EIP55Address
} else {
address = cltest.NewEIP55Address()
}
require.NoError(t, ta.KeyStore.OCR().Add(ctx, cltest.DefaultOCRKey))
sp := cltest.MinimalOCRNonBootstrapSpec(contractAddress, address, tc.pid, tc.kb)
body, _ := json.Marshal(web.CreateJobRequest{
TOML: sp,
})
resp, cleanup := client.Post("/v2/jobs", bytes.NewReader(body))
t.Cleanup(cleanup)
assert.Equal(t, http.StatusBadRequest, resp.StatusCode)
b, err := io.ReadAll(resp.Body)
require.NoError(t, err)
assert.Contains(t, string(b), tc.expectedErr.Error())
})`
$DIR/core/web/jobs_controller_test.go: `address = key.EIP55Address`
$DIR/core/web/jobs_controller_test.go: `address = cltest.NewEIP55Address()`
$DIR/core/web/jobs_controller_test.go: `t.Cleanup(cleanup)`
$DIR/core/web/jobs_controller_test.go: `wg.Add(1)`
$DIR/core/web/jobs_controller_test.go: `wg.Wait()`
$DIR/core/web/jobs_controller_test.go: `pks, err = app.KeyStore.VRF().GetAll()`
$DIR/core/web/jobs_controller_test.go: `k, err = app.KeyStore.P2P().GetAll()`
$DIR/core/web/jobs_controller_test.go: `t.Run(c.name, func(t *testing.T) {
nameAndExternalJobID := uuid.New().String()
toml := c.tomlTemplate(nameAndExternalJobID)
body, err := json.Marshal(web.CreateJobRequest{
TOML: toml,
})
require.NoError(t, err)
response, cleanup := client.Post("/v2/jobs", bytes.NewReader(body))
defer cleanup()
c.assertion(t, nameAndExternalJobID, response)
})`
$DIR/core/web/jobs_controller_test.go: `c.assertion(t, nameAndExternalJobID, response)`
$DIR/core/web/jobs_controller_test.go: `_, err = jorm.FindJob(testutils.Context(t), mustInt32FromString(t, resource.ID))`
$DIR/core/web/jobs_controller_test.go: `query.Set("evmChainID", cltest.FixtureChainID.String())`
$DIR/core/web/jobs_controller_test.go: `url.RawQuery = query.Encode()`
$DIR/core/web/jobs_controller_test.go: `t.Cleanup(cleanup)`
$DIR/core/web/jobs_controller_test.go: `cltest.AssertServerResponse(t, response, http.StatusOK)`
$DIR/core/web/jobs_controller_test.go: `runDirectRequestJobSpecAssertions(t, ereJobSpecFromFile, resources[0])`
$DIR/core/web/jobs_controller_test.go: `t.Cleanup(cleanup)`
$DIR/core/web/jobs_controller_test.go: `cltest.AssertServerResponse(t, response, http.StatusOK)`
$DIR/core/web/jobs_controller_test.go: `runOCRJobSpecAssertions(t, ocrJobSpecFromFile, ocrJob)`
$DIR/core/web/jobs_controller_test.go: `response, cleanup = client.Get("/v2/jobs/" + ocrJobSpecFromFile.ExternalJobID.String())`
$DIR/core/web/jobs_controller_test.go: `t.Cleanup(cleanup)`
$DIR/core/web/jobs_controller_test.go: `cltest.AssertServerResponse(t, response, http.StatusOK)`
$DIR/core/web/jobs_controller_test.go: `ocrJob = presenters.JobResource{}`
$DIR/core/web/jobs_controller_test.go: `err = web.ParseJSONAPIResponse(cltest.ParseResponseBody(t, response), &ocrJob)`
$DIR/core/web/jobs_controller_test.go: `runOCRJobSpecAssertions(t, ocrJobSpecFromFile, ocrJob)`
$DIR/core/web/jobs_controller_test.go: `response, cleanup = client.Get("/v2/jobs/" + fmt.Sprintf("%v", jobID2))`
$DIR/core/web/jobs_controller_test.go: `t.Cleanup(cleanup)`
$DIR/core/web/jobs_controller_test.go: `cltest.AssertServerResponse(t, response, http.StatusOK)`
$DIR/core/web/jobs_controller_test.go: `err = web.ParseJSONAPIResponse(cltest.ParseResponseBody(t, response), &ereJob)`
$DIR/core/web/jobs_controller_test.go: `runDirectRequestJobSpecAssertions(t, ereJobSpecFromFile, ereJob)`
$DIR/core/web/jobs_controller_test.go: `response, cleanup = client.Get("/v2/jobs/" + ereJobSpecFromFile.ExternalJobID.String())`
$DIR/core/web/jobs_controller_test.go: `t.Cleanup(cleanup)`
$DIR/core/web/jobs_controller_test.go: `cltest.AssertServerResponse(t, response, http.StatusOK)`
$DIR/core/web/jobs_controller_test.go: `ereJob = presenters.JobResource{}`
$DIR/core/web/jobs_controller_test.go: `err = web.ParseJSONAPIResponse(cltest.ParseResponseBody(t, response), &ereJob)`
$DIR/core/web/jobs_controller_test.go: `t.Cleanup(cleanup)`
$DIR/core/web/jobs_controller_test.go: `t.Cleanup(cleanup)`
$DIR/core/web/jobs_controller_test.go: `c.OCR.Enabled = ptr(true)`
$DIR/core/web/jobs_controller_test.go: `c.P2P.V2.Enabled = ptr(true)`
$DIR/core/web/jobs_controller_test.go: `c.P2P.V2.ListenAddresses = &[]string{fmt.Sprintf("127.0.0.1:%d", freeport.GetOne(t))}`
$DIR/core/web/jobs_controller_test.go: `c.P2P.PeerID = &cltest.DefaultP2PPeerID`
$DIR/core/web/jobs_controller_test.go: `err = toml.Unmarshal([]byte(ocrspec.Toml()), &ocrSpec)`
$DIR/core/web/jobs_controller_test.go: `jb.OCROracleSpec = &ocrSpec`
$DIR/core/web/jobs_controller_test.go: `jb.OCROracleSpec.TransmitterAddress = &app.Keys[0].EIP55Address`
$DIR/core/web/jobs_controller_test.go: `err = app.AddJobV2(ctx, &jb)`
$DIR/core/web/jobs_controller_test.go: `t.Cleanup(cleanup)`
$DIR/core/web/jobs_controller_test.go: `dbJb, err = app.JobORM().FindJob(ctx, jb.ID)`
$DIR/core/web/jobs_controller_test.go: `c.OCR.Enabled = ptr(true)`
$DIR/core/web/jobs_controller_test.go: `c.P2P.V2.Enabled = ptr(true)`
$DIR/core/web/jobs_controller_test.go: `c.P2P.V2.ListenAddresses = &[]string{fmt.Sprintf("127.0.0.1:%d", freeport.GetOne(t))}`
$DIR/core/web/jobs_controller_test.go: `c.P2P.PeerID = &cltest.DefaultP2PPeerID`
$DIR/core/web/jobs_controller_test.go: `err = toml.Unmarshal([]byte(ocrspec.Toml()), &ocrSpec)`
$DIR/core/web/jobs_controller_test.go: `jb.OCROracleSpec = &ocrSpec`
$DIR/core/web/jobs_controller_test.go: `jb.OCROracleSpec.TransmitterAddress = &app.Keys[0].EIP55Address`
$DIR/core/web/jobs_controller_test.go: `err = app.AddJobV2(ctx, &jb)`
$DIR/core/web/jobs_controller_test.go: `t.Cleanup(cleanup)`
$DIR/core/web/jobs_controller_test.go: `.NewEIP55Address()`
$DIR/core/web/jobs_controller_test.go: `.Random32Byte()`
$DIR/core/web/jobs_controller_test.go: `.PeerID(peerID)`
$DIR/core/web/jobs_controller_test.go: `.EncodeToString(randomBytes[:])`
$DIR/core/web/jobs_controller_test.go: `.PeerID(peerID)`
$DIR/core/web/jobs_controller_test.go: `.Run(tc.name, func(t *testing.T) {
ctx := testutils.Context(t)
ta, client := setupJobsControllerTests(t)
var address types.EIP55Address
if tc.taExists {
key, _ := cltest.MustInsertRandomKey(t, ta.KeyStore.Eth())
address = key.EIP55Address
} else {
address = cltest.NewEIP55Address()
}
require.NoError(t, ta.KeyStore.OCR().Add(ctx, cltest.DefaultOCRKey))
sp := cltest.MinimalOCRNonBootstrapSpec(contractAddress, address, tc.pid, tc.kb)
body, _ := json.Marshal(web.CreateJobRequest{
TOML: sp,
})
resp, cleanup := client.Post("/v2/jobs", bytes.NewReader(body))
t.Cleanup(cleanup)
assert.Equal(t, http.StatusBadRequest, resp.StatusCode)
b, err := io.ReadAll(resp.Body)
require.NoError(t, err)
assert.Contains(t, string(b), tc.expectedErr.Error())
})`
$DIR/core/web/jobs_controller_test.go: `.Context(t)`
$DIR/core/web/jobs_controller_test.go: `.MustInsertRandomKey(t, ta.KeyStore.Eth())`
$DIR/core/web/jobs_controller_test.go: `.KeyStore.Eth()`
$DIR/core/web/jobs_controller_test.go: `.NewEIP55Address()`
$DIR/core/web/jobs_controller_test.go: `.MinimalOCRNonBootstrapSpec(contractAddress, address, tc.pid, tc.kb)`
$DIR/core/web/jobs_controller_test.go: `.Marshal(web.CreateJobRequest{
TOML: sp,
})`
$DIR/core/web/jobs_controller_test.go: `.Post("/v2/jobs", bytes.NewReader(body))`
$DIR/core/web/jobs_controller_test.go: `.NewReader(body)`
$DIR/core/web/jobs_controller_test.go: `.Cleanup(cleanup)`
$DIR/core/web/jobs_controller_test.go: `.ReadAll(resp.Body)`
$DIR/core/web/jobs_controller_test.go: `.Context(t)`
$DIR/core/web/jobs_controller_test.go: `.Add(1)`
$DIR/core/web/jobs_controller_test.go: `.Done()`
$DIR/core/web/jobs_controller_test.go: `.Marshal(web.CreateJobRequest{
TOML: fmt.Sprintf(testspecs.DirectRequestSpecNoExternalJobID, i),
})`
$DIR/core/web/jobs_controller_test.go: `.Sprintf(testspecs.DirectRequestSpecNoExternalJobID, i)`
$DIR/core/web/jobs_controller_test.go: `.Post("/v2/jobs", bytes.NewReader(body))`
$DIR/core/web/jobs_controller_test.go: `.NewReader(body)`
$DIR/core/web/jobs_controller_test.go: `.Wait()`
$DIR/core/web/jobs_controller_test.go: `.GetDB()`
$DIR/core/web/jobs_controller_test.go: `.Context(t)`
$DIR/core/web/jobs_controller_test.go: `.GetDB()`
$DIR/core/web/jobs_controller_test.go: `.KeyStore.VRF()`
$DIR/core/web/jobs_controller_test.go: `.GetAll()`
$DIR/core/web/jobs_controller_test.go: `.KeyStore.P2P()`
$DIR/core/web/jobs_controller_test.go: `.GetAll()`
$DIR/core/web/jobs_controller_test.go: `.JobORM()`
$DIR/core/web/jobs_controller_test.go: `.GenerateOCRSpec(testspecs.OCRSpecParams{
TransmitterAddress: app.Keys[0].Address.Hex(),
DS1BridgeName: b1,
DS2BridgeName: b2,
Name: nameAndExternalJobID,
})`
$DIR/core/web/jobs_controller_test.go: `.Address.Hex()`
$DIR/core/web/jobs_controller_test.go: `.Toml()`
$DIR/core/web/jobs_controller_test.go: `.ParseJSONAPIResponse(cltest.ParseResponseBody(t, r), &resource)`
$DIR/core/web/jobs_controller_test.go: `.ParseResponseBody(t, r)`
$DIR/core/web/jobs_controller_test.go: `.FindJob(testutils.Context(t), mustInt32FromString(t, resource.ID))`
$DIR/core/web/jobs_controller_test.go: `.Context(t)`
$DIR/core/web/jobs_controller_test.go: `.Sprintf(`
type = "keeper"
schemaVersion = 1
name = "%s"
contractAddress = "0x9E40733cC9df84636505f4e6Db28DCa0dC5D1bba"
fromAddress = "0xa8037A20989AFcBC51798de9762b351D63ff462e"
evmChainID = 0
minIncomingConfigurations = 1
externalJobID = "%s"
`, nameAndExternalJobID, nameAndExternalJobID)`
$DIR/core/web/jobs_controller_test.go: `.ParseJSONAPIErrors(t, r.Body)`
$DIR/core/web/jobs_controller_test.go: `.Context(t)`
$DIR/core/web/jobs_controller_test.go: `.FindJobByExternalJobID(ctx, uuid.MustParse(nameAndExternalJobID))`
$DIR/core/web/jobs_controller_test.go: `.MustParse(nameAndExternalJobID)`
$DIR/core/web/jobs_controller_test.go: `.Sprintf(testspecs.CronSpecTemplate, nameAndExternalJobID)`
$DIR/core/web/jobs_controller_test.go: `.ParseJSONAPIResponse(cltest.ParseResponseBody(t, r), &resource)`
$DIR/core/web/jobs_controller_test.go: `.ParseResponseBody(t, r)`
$DIR/core/web/jobs_controller_test.go: `.FindJob(testutils.Context(t), mustInt32FromString(t, resource.ID))`
$DIR/core/web/jobs_controller_test.go: `.Context(t)`
$DIR/core/web/jobs_controller_test.go: `.Sprintf(testspecs.CronSpecDotSepTemplate, nameAndExternalJobID)`
$DIR/core/web/jobs_controller_test.go: `.ParseJSONAPIResponse(cltest.ParseResponseBody(t, r), &resource)`
$DIR/core/web/jobs_controller_test.go: `.ParseResponseBody(t, r)`
$DIR/core/web/jobs_controller_test.go: `.FindJob(testutils.Context(t), mustInt32FromString(t, resource.ID))`
$DIR/core/web/jobs_controller_test.go: `.Context(t)`
$DIR/core/web/jobs_controller_test.go: `.GetDirectRequestSpecWithUUID(uuid.MustParse(nameAndExternalJobID))`
$DIR/core/web/jobs_controller_test.go: `.MustParse(nameAndExternalJobID)`
$DIR/core/web/jobs_controller_test.go: `.ParseJSONAPIResponse(cltest.ParseResponseBody(t, r), &resource)`
$DIR/core/web/jobs_controller_test.go: `.ParseResponseBody(t, r)`
$DIR/core/web/jobs_controller_test.go: `.FindJob(testutils.Context(t), mustInt32FromString(t, resource.ID))`
$DIR/core/web/jobs_controller_test.go: `.Context(t)`
$DIR/core/web/jobs_controller_test.go: `.Sprintf(testspecs.DirectRequestSpecWithRequestersAndMinContractPaymentTemplate, nameAndExternalJobID, nameAndExternalJobID)`
$DIR/core/web/jobs_controller_test.go: `.ParseJSONAPIResponse(cltest.ParseResponseBody(t, r), &resource)`
$DIR/core/web/jobs_controller_test.go: `.ParseResponseBody(t, r)`
$DIR/core/web/jobs_controller_test.go: `.FindJob(testutils.Context(t), mustInt32FromString(t, resource.ID))`
$DIR/core/web/jobs_controller_test.go: `.Context(t)`
$DIR/core/web/jobs_controller_test.go: `.Sprintf(testspecs.FluxMonitorSpecTemplate, nameAndExternalJobID, nameAndExternalJobID)`
$DIR/core/web/jobs_controller_test.go: `.ParseJSONAPIErrors(t, r.Body)`
$DIR/core/web/jobs_controller_test.go: `.Context(t)`
$DIR/core/web/jobs_controller_test.go: `.FindJobByExternalJobID(ctx, uuid.MustParse(nameAndExternalJobID))`
$DIR/core/web/jobs_controller_test.go: `.MustParse(nameAndExternalJobID)`
$DIR/core/web/jobs_controller_test.go: `.GenerateVRFSpec(testspecs.VRFSpecParams{PublicKey: pks[0].PublicKey.String()})`
$DIR/core/web/jobs_controller_test.go: `.PublicKey.String()`
$DIR/core/web/jobs_controller_test.go: `.Toml()`
$DIR/core/web/jobs_controller_test.go: `.ParseResponseBody(t, r)`
$DIR/core/web/jobs_controller_test.go: `.ParseJSONAPIResponse(resp, &resource)`
$DIR/core/web/jobs_controller_test.go: `.FindJob(testutils.Context(t), mustInt32FromString(t, resource.ID))`
$DIR/core/web/jobs_controller_test.go: `.Context(t)`
$DIR/core/web/jobs_controller_test.go: `.GenerateStreamSpec(testspecs.StreamSpecParams{Name: "ETH/USD", StreamID: 32})`
$DIR/core/web/jobs_controller_test.go: `.Toml()`
$DIR/core/web/jobs_controller_test.go: `.ParseResponseBody(t, r)`
$DIR/core/web/jobs_controller_test.go: `.ParseJSONAPIResponse(resp, &resource)`
$DIR/core/web/jobs_controller_test.go: `.FindJob(testutils.Context(t), mustInt32FromString(t, resource.ID))`
$DIR/core/web/jobs_controller_test.go: `.Context(t)`
$DIR/core/web/jobs_controller_test.go: `.GenerateWorkflowSpec(id, owner, name, workflow)`
$DIR/core/web/jobs_controller_test.go: `.Toml()`
$DIR/core/web/jobs_controller_test.go: `.ParseResponseBody(t, r)`
$DIR/core/web/jobs_controller_test.go: `.ParseJSONAPIResponse(resp, &resource)`
$DIR/core/web/jobs_controller_test.go: `.FindJob(testutils.Context(t), mustInt32FromString(t, resource.ID))`
$DIR/core/web/jobs_controller_test.go: `.Context(t)`
$DIR/core/web/jobs_controller_test.go: `.Run(c.name, func(t *testing.T) {
nameAndExternalJobID := uuid.New().String()
toml := c.tomlTemplate(nameAndExternalJobID)
body, err := json.Marshal(web.CreateJobRequest{
TOML: toml,
})
require.NoError(t, err)
response, cleanup := client.Post("/v2/jobs", bytes.NewReader(body))
defer cleanup()
c.assertion(t, nameAndExternalJobID, response)
})`
$DIR/core/web/jobs_controller_test.go: `.New()`
$DIR/core/web/jobs_controller_test.go: `.String()`
$DIR/core/web/jobs_controller_test.go: `.tomlTemplate(nameAndExternalJobID)`
$DIR/core/web/jobs_controller_test.go: `.Marshal(web.CreateJobRequest{
TOML: toml,
})`
$DIR/core/web/jobs_controller_test.go: `.Post("/v2/jobs", bytes.NewReader(body))`
$DIR/core/web/jobs_controller_test.go: `.NewReader(body)`
$DIR/core/web/jobs_controller_test.go: `.assertion(t, nameAndExternalJobID, response)`
$DIR/core/web/jobs_controller_test.go: `.NewApplicationEVMDisabled(t)`
$DIR/core/web/jobs_controller_test.go: `.MustCreateBridge(t, app.GetDB(), cltest.BridgeOpts{})`
$DIR/core/web/jobs_controller_test.go: `.GetDB()`
$DIR/core/web/jobs_controller_test.go: `.MustCreateBridge(t, app.GetDB(), cltest.BridgeOpts{})`
$DIR/core/web/jobs_controller_test.go: `.GetDB()`
$DIR/core/web/jobs_controller_test.go: `.NewHTTPClient(nil)`
$DIR/core/web/jobs_controller_test.go: `.GetWebhookSpecNoBody(uuid.New(), fetchBridge.Name.String(), submitBridge.Name.String())`
$DIR/core/web/jobs_controller_test.go: `.New()`
$DIR/core/web/jobs_controller_test.go: `.Name.String()`
$DIR/core/web/jobs_controller_test.go: `.Name.String()`
$DIR/core/web/jobs_controller_test.go: `.Marshal(web.CreateJobRequest{
TOML: tomlStr,
})`
$DIR/core/web/jobs_controller_test.go: `.Post("/v2/jobs", bytes.NewReader(body))`
$DIR/core/web/jobs_controller_test.go: `.NewReader(body)`
$DIR/core/web/jobs_controller_test.go: `.ParseJSONAPIResponse(cltest.ParseResponseBody(t, response), &resource)`
$DIR/core/web/jobs_controller_test.go: `.ParseResponseBody(t, response)`
$DIR/core/web/jobs_controller_test.go: `.JobORM()`
$DIR/core/web/jobs_controller_test.go: `.FindJob(testutils.Context(t), mustInt32FromString(t, resource.ID))`
$DIR/core/web/jobs_controller_test.go: `.Context(t)`
$DIR/core/web/jobs_controller_test.go: `.NewApplicationEVMDisabled(t)`
$DIR/core/web/jobs_controller_test.go: `.NewHTTPClient(nil)`
$DIR/core/web/jobs_controller_test.go: `.New()`
$DIR/core/web/jobs_controller_test.go: `.Sprintf(webhookSpecTemplate, nameAndExternalJobID, nameAndExternalJobID)`
$DIR/core/web/jobs_controller_test.go: `.Marshal(web.CreateJobRequest{
TOML: spec,
})`
$DIR/core/web/jobs_controller_test.go: `.Post("/v2/jobs", bytes.NewReader(body))`
$DIR/core/web/jobs_controller_test.go: `.NewReader(body)`
$DIR/core/web/jobs_controller_test.go: `.ReadAll(response.Body)`
$DIR/core/web/jobs_controller_test.go: `.Query()`
$DIR/core/web/jobs_controller_test.go: `.Set("evmChainID", cltest.FixtureChainID.String())`
$DIR/core/web/jobs_controller_test.go: `.FixtureChainID.String()`
$DIR/core/web/jobs_controller_test.go: `.Encode()`
$DIR/core/web/jobs_controller_test.go: `.Get(url.String())`
$DIR/core/web/jobs_controller_test.go: `.String()`
$DIR/core/web/jobs_controller_test.go: `.Cleanup(cleanup)`
$DIR/core/web/jobs_controller_test.go: `.AssertServerResponse(t, response, http.StatusOK)`
$DIR/core/web/jobs_controller_test.go: `.ParseJSONAPIResponse(cltest.ParseResponseBody(t, response), &resources)`
$DIR/core/web/jobs_controller_test.go: `.ParseResponseBody(t, response)`
$DIR/core/web/jobs_controller_test.go: `.Get("/v2/jobs/" + fmt.Sprintf("%v", jobID))`
$DIR/core/web/jobs_controller_test.go: `.Sprintf("%v", jobID)`
$DIR/core/web/jobs_controller_test.go: `.Cleanup(cleanup)`
$DIR/core/web/jobs_controller_test.go: `.AssertServerResponse(t, response, http.StatusOK)`
$DIR/core/web/jobs_controller_test.go: `.ParseJSONAPIResponse(cltest.ParseResponseBody(t, response), &ocrJob)`
$DIR/core/web/jobs_controller_test.go: `.ParseResponseBody(t, response)`
$DIR/core/web/jobs_controller_test.go: `.Get("/v2/jobs/" + ocrJobSpecFromFile.ExternalJobID.String())`
$DIR/core/web/jobs_controller_test.go: `.ExternalJobID.String()`
$DIR/core/web/jobs_controller_test.go: `.Cleanup(cleanup)`
$DIR/core/web/jobs_controller_test.go: `.AssertServerResponse(t, response, http.StatusOK)`
$DIR/core/web/jobs_controller_test.go: `.ParseJSONAPIResponse(cltest.ParseResponseBody(t, response), &ocrJob)`
$DIR/core/web/jobs_controller_test.go: `.ParseResponseBody(t, response)`
$DIR/core/web/jobs_controller_test.go: `.Get("/v2/jobs/" + fmt.Sprintf("%v", jobID2))`
$DIR/core/web/jobs_controller_test.go: `.Sprintf("%v", jobID2)`
$DIR/core/web/jobs_controller_test.go: `.Cleanup(cleanup)`
$DIR/core/web/jobs_controller_test.go: `.AssertServerResponse(t, response, http.StatusOK)`
$DIR/core/web/jobs_controller_test.go: `.ParseJSONAPIResponse(cltest.ParseResponseBody(t, response), &ereJob)`
$DIR/core/web/jobs_controller_test.go: `.ParseResponseBody(t, response)`
$DIR/core/web/jobs_controller_test.go: `.Get("/v2/jobs/" + ereJobSpecFromFile.ExternalJobID.String())`
$DIR/core/web/jobs_controller_test.go: `.ExternalJobID.String()`
$DIR/core/web/jobs_controller_test.go: `.Cleanup(cleanup)`
$DIR/core/web/jobs_controller_test.go: `.AssertServerResponse(t, response, http.StatusOK)`
$DIR/core/web/jobs_controller_test.go: `.ParseJSONAPIResponse(cltest.ParseResponseBody(t, response), &ereJob)`
$DIR/core/web/jobs_controller_test.go: `.ParseResponseBody(t, response)`
$DIR/core/web/jobs_controller_test.go: `.Get("/v2/jobs/uuidLikeString")`
$DIR/core/web/jobs_controller_test.go: `.Cleanup(cleanup)`
$DIR/core/web/jobs_controller_test.go: `.Get("/v2/jobs/999999999")`
$DIR/core/web/jobs_controller_test.go: `.Cleanup(cleanup)`
$DIR/core/web/jobs_controller_test.go: `.Context(t)`
$DIR/core/web/jobs_controller_test.go: `.NewGeneralConfig(t, func(c *chainlink.Config, s *chainlink.Secrets) {
c.OCR.Enabled = ptr(true)
c.P2P.V2.Enabled = ptr(true)
c.P2P.V2.ListenAddresses = &[]string{fmt.Sprintf("127.0.0.1:%d", freeport.GetOne(t))}
c.P2P.PeerID = &cltest.DefaultP2PPeerID
})`
$DIR/core/web/jobs_controller_test.go: `.Sprintf("127.0.0.1:%d", freeport.GetOne(t))`
$DIR/core/web/jobs_controller_test.go: `.GetOne(t)`
$DIR/core/web/jobs_controller_test.go: `.NewApplicationWithConfigAndKey(t, cfg, cltest.DefaultP2PKey)`
$DIR/core/web/jobs_controller_test.go: `.MustCreateBridge(t, app.GetDB(), cltest.BridgeOpts{})`
$DIR/core/web/jobs_controller_test.go: `.GetDB()`
$DIR/core/web/jobs_controller_test.go: `.MustCreateBridge(t, app.GetDB(), cltest.BridgeOpts{})`
$DIR/core/web/jobs_controller_test.go: `.GetDB()`
$DIR/core/web/jobs_controller_test.go: `.NewHTTPClient(nil)`
$DIR/core/web/jobs_controller_test.go: `.GenerateOCRSpec(testspecs.OCRSpecParams{
DS1BridgeName: bridge.Name.String(),
DS2BridgeName: bridge2.Name.String(),
Name: "old OCR job",
})`
$DIR/core/web/jobs_controller_test.go: `.Name.String()`
$DIR/core/web/jobs_controller_test.go: `.Name.String()`
$DIR/core/web/jobs_controller_test.go: `.Unmarshal([]byte(ocrspec.Toml()), &jb)`
$DIR/core/web/jobs_controller_test.go: `.Toml()`
$DIR/core/web/jobs_controller_test.go: `.Unmarshal([]byte(ocrspec.Toml()), &ocrSpec)`
$DIR/core/web/jobs_controller_test.go: `.Toml()`
$DIR/core/web/jobs_controller_test.go: `.AddJobV2(ctx, &jb)`
$DIR/core/web/jobs_controller_test.go: `.JobORM()`
$DIR/core/web/jobs_controller_test.go: `.FindJob(ctx, jb.ID)`
$DIR/core/web/jobs_controller_test.go: `.GenerateOCRSpec(testspecs.OCRSpecParams{
DS1BridgeName: bridge2.Name.String(),
DS2BridgeName: bridge.Name.String(),
Name: "updated OCR job",
TransmitterAddress: app.Keys[0].Address.Hex(),
})`
$DIR/core/web/jobs_controller_test.go: `.Name.String()`
$DIR/core/web/jobs_controller_test.go: `.Name.String()`
$DIR/core/web/jobs_controller_test.go: `.Address.Hex()`
$DIR/core/web/jobs_controller_test.go: `.Marshal(web.UpdateJobRequest{
TOML: updatedSpec.Toml(),
})`
$DIR/core/web/jobs_controller_test.go: `.Toml()`
$DIR/core/web/jobs_controller_test.go: `.Put("/v2/jobs/"+fmt.Sprintf("%v", jb.ID), bytes.NewReader(body))`
$DIR/core/web/jobs_controller_test.go: `.Sprintf("%v", jb.ID)`
$DIR/core/web/jobs_controller_test.go: `.NewReader(body)`
$DIR/core/web/jobs_controller_test.go: `.Cleanup(cleanup)`
$DIR/core/web/jobs_controller_test.go: `.JobORM()`
$DIR/core/web/jobs_controller_test.go: `.FindJob(ctx, jb.ID)`
$DIR/core/web/jobs_controller_test.go: `.Context(t)`
$DIR/core/web/jobs_controller_test.go: `.NewGeneralConfig(t, func(c *chainlink.Config, s *chainlink.Secrets) {
c.OCR.Enabled = ptr(true)
c.P2P.V2.Enabled = ptr(true)
c.P2P.V2.ListenAddresses = &[]string{fmt.Sprintf("127.0.0.1:%d", freeport.GetOne(t))}
c.P2P.PeerID = &cltest.DefaultP2PPeerID
})`
$DIR/core/web/jobs_controller_test.go: `.Sprintf("127.0.0.1:%d", freeport.GetOne(t))`
$DIR/core/web/jobs_controller_test.go: `.GetOne(t)`
$DIR/core/web/jobs_controller_test.go: `.NewApplicationWithConfigAndKey(t, cfg, cltest.DefaultP2PKey)`
$DIR/core/web/jobs_controller_test.go: `.MustCreateBridge(t, app.GetDB(), cltest.BridgeOpts{})`
$DIR/core/web/jobs_controller_test.go: `.GetDB()`
$DIR/core/web/jobs_controller_test.go: `.MustCreateBridge(t, app.GetDB(), cltest.BridgeOpts{})`
$DIR/core/web/jobs_controller_test.go: `.GetDB()`
$DIR/core/web/jobs_controller_test.go: `.NewHTTPClient(nil)`
$DIR/core/web/jobs_controller_test.go: `.GenerateOCRSpec(testspecs.OCRSpecParams{
DS1BridgeName: bridge.Name.String(),
DS2BridgeName: bridge2.Name.String(),
Name: "old OCR job",
})`
$DIR/core/web/jobs_controller_test.go: `.Name.String()`
$DIR/core/web/jobs_controller_test.go: `.Name.String()`
$DIR/core/web/jobs_controller_test.go: `.Unmarshal([]byte(ocrspec.Toml()), &jb)`
$DIR/core/web/jobs_controller_test.go: `.Toml()`
$DIR/core/web/jobs_controller_test.go: `.Unmarshal([]byte(ocrspec.Toml()), &ocrSpec)`
$DIR/core/web/jobs_controller_test.go: `.Toml()`
$DIR/core/web/jobs_controller_test.go: `.AddJobV2(ctx, &jb)`
$DIR/core/web/jobs_controller_test.go: `.GenerateOCRSpec(testspecs.OCRSpecParams{
DS1BridgeName: bridge2.Name.String(),
DS2BridgeName: bridge.Name.String(),
Name: "updated OCR job",
TransmitterAddress: app.Keys[0].EIP55Address.String(),
})`
$DIR/core/web/jobs_controller_test.go: `.Name.String()`
$DIR/core/web/jobs_controller_test.go: `.Name.String()`
$DIR/core/web/jobs_controller_test.go: `.EIP55Address.String()`
$DIR/core/web/jobs_controller_test.go: `.Marshal(web.UpdateJobRequest{
TOML: updatedSpec.Toml(),
})`
$DIR/core/web/jobs_controller_test.go: `.Toml()`
$DIR/core/web/jobs_controller_test.go: `.Put("/v2/jobs/99999", bytes.NewReader(body))`
$DIR/core/web/jobs_controller_test.go: `.NewReader(body)`
$DIR/core/web/jobs_controller_test.go: `.Cleanup(cleanup)`
$DIR/core/web/lca_controller_test.go: `t.Cleanup(cleanup)`
$DIR/core/web/lca_controller_test.go: `.NewTestGeneralConfig(t)`
$DIR/core/web/lca_controller_test.go: `.NewApplicationWithConfigAndKey(t, cfg, cltest.DefaultP2PKey, ec)`
$DIR/core/web/lca_controller_test.go: `.NewHTTPClient(nil)`
$DIR/core/web/lca_controller_test.go: `.Get("/v2/find_lca?evmChainID=1")`
$DIR/core/web/lca_controller_test.go: `.Cleanup(cleanup)`
$DIR/core/web/lca_controller_test.go: `.ReadAll(resp.Body)`
$DIR/core/web/loader/loader_test.go: `app.On("GetRelayers").Return(&chainlinkmocks.FakeRelayerChainInteroperators{Relayers: []loop.Relayer{
testutils2.MockRelayer{ChainStatus: commontypes.ChainStatus{
ID: "1",
Enabled: true,
Config: config1,
}}, testutils2.MockRelayer{ChainStatus: commontypes.ChainStatus{
ID: "2",
Enabled: true,
Config: config2,
}},
}})`
$DIR/core/web/loader/loader_test.go: `app.On("GetRelayers").Return(rcInterops)`
$DIR/core/web/loader/loader_test.go: `fsvc.On("ListManagersByIDs", mock.Anything, []int64{3, 1, 2, 5}).Return([]feeds.FeedsManager{
mgr1, mgr2, mgr3,
}, nil)`
$DIR/core/web/loader/loader_test.go: `app.On("GetFeedsService").Return(fsvc)`
$DIR/core/web/loader/loader_test.go: `fsvc.On("ListJobProposalsByManagersIDs", mock.Anything, []int64{3, 1, 2}).Return([]feeds.JobProposal{
jp1, jp3, jp2,
}, nil)`
$DIR/core/web/loader/loader_test.go: `app.On("GetFeedsService").Return(fsvc)`
$DIR/core/web/loader/loader_test.go: `jobsORM.On("FindPipelineRunsByIDs", mock.Anything, []int64{3, 1, 2}).Return([]pipeline.Run{
run3, run1, run2,
}, nil)`
$DIR/core/web/loader/loader_test.go: `app.On("JobORM").Return(jobsORM)`
$DIR/core/web/loader/loader_test.go: `t.Run("with out errors", func(t *testing.T) {
t.Parallel()
jobsORM := jobORMMocks.NewORM(t)
app := coremocks.NewApplication(t)
ctx := InjectDataloader(testutils.Context(t), app)
job1 := job.Job{ID: int32(2), PipelineSpecID: int32(1)}
job2 := job.Job{ID: int32(3), PipelineSpecID: int32(2)}
job3 := job.Job{ID: int32(4), PipelineSpecID: int32(3)}
jobsORM.On("FindJobsByPipelineSpecIDs", mock.Anything, []int32{3, 1, 2}).Return([]job.Job{
job1, job2, job3,
}, nil)
app.On("JobORM").Return(jobsORM)
batcher := jobBatcher{app}
keys := dataloader.NewKeysFromStrings([]string{"3", "1", "2"})
found := batcher.loadByPipelineSpecIDs(ctx, keys)
require.Len(t, found, 3)
assert.Equal(t, job3, found[0].Data)
assert.Equal(t, job1, found[1].Data)
assert.Equal(t, job2, found[2].Data)
})`
$DIR/core/web/loader/loader_test.go: `jobsORM.On("FindJobsByPipelineSpecIDs", mock.Anything, []int32{3, 1, 2}).Return([]job.Job{
job1, job2, job3,
}, nil)`
$DIR/core/web/loader/loader_test.go: `app.On("JobORM").Return(jobsORM)`
$DIR/core/web/loader/loader_test.go: `jobsORM.On("FindJobsByPipelineSpecIDs", mock.Anything, []int32{3, 1, 2}).Return([]job.Job{}, sql.ErrNoRows)`
$DIR/core/web/loader/loader_test.go: `app.On("JobORM").Return(jobsORM)`
$DIR/core/web/loader/loader_test.go: `jobsORM.On("FindJobByExternalJobID", mock.Anything, ejID).Return(job, nil)`
$DIR/core/web/loader/loader_test.go: `app.On("JobORM").Return(jobsORM)`
$DIR/core/web/loader/loader_test.go: `txStore.On("FindTxAttemptConfirmedByTxIDs", ctx, []int64{ethTxIDs[2], ethTxIDs[1], ethTxIDs[0]}).Return([]txmgr.TxAttempt{
attempt1, attempt2,
}, nil)`
$DIR/core/web/loader/loader_test.go: `app.On("TxmStorageService").Return(txStore)`
$DIR/core/web/loader/loader_test.go: `t.Run("without errors", func(t *testing.T) {
t.Parallel()
jobsORM := jobORMMocks.NewORM(t)
app := coremocks.NewApplication(t)
ctx := InjectDataloader(testutils.Context(t), app)
specErr1 := job.SpecError{ID: int64(2), JobID: int32(1)}
specErr2 := job.SpecError{ID: int64(3), JobID: int32(2)}
specErr3 := job.SpecError{ID: int64(4), JobID: int32(3)}
jobsORM.On("FindSpecErrorsByJobIDs", mock.Anything, []int32{3, 1, 2}, mock.Anything).Return([]job.SpecError{
specErr1, specErr2, specErr3,
}, nil)
app.On("JobORM").Return(jobsORM)
batcher := jobSpecErrorsBatcher{app}
keys := dataloader.NewKeysFromStrings([]string{"3", "1", "2"})
found := batcher.loadByJobIDs(ctx, keys)
require.Len(t, found, 3)
assert.Equal(t, []job.SpecError{specErr3}, found[0].Data)
assert.Equal(t, []job.SpecError{specErr1}, found[1].Data)
assert.Equal(t, []job.SpecError{specErr2}, found[2].Data)
})`
$DIR/core/web/loader/loader_test.go: `jobsORM.On("FindSpecErrorsByJobIDs", mock.Anything, []int32{3, 1, 2}, mock.Anything).Return([]job.SpecError{
specErr1, specErr2, specErr3,
}, nil)`
$DIR/core/web/loader/loader_test.go: `app.On("JobORM").Return(jobsORM)`
$DIR/core/web/loader/loader_test.go: `jobsORM.On("FindSpecErrorsByJobIDs", mock.Anything, []int32{3, 1, 2}, mock.Anything).Return([]job.SpecError{}, sql.ErrNoRows)`
$DIR/core/web/loader/loader_test.go: `app.On("JobORM").Return(jobsORM)`
$DIR/core/web/loader/loader_test.go: `txStore.On("FindTxAttemptConfirmedByTxIDs", ctx, []int64{ethTxID}).Return([]txmgr.TxAttempt{
attempt1,
}, nil)`
$DIR/core/web/loader/loader_test.go: `app.On("TxmStorageService").Return(txStore)`
$DIR/core/web/loader/loader_test.go: `.NewApplication(t)`
$DIR/core/web/loader/loader_test.go: `.Context(t)`
$DIR/core/web/loader/loader_test.go: `.NewI(1)`
$DIR/core/web/loader/loader_test.go: `.Defaults(one)`
$DIR/core/web/loader/loader_test.go: `.NewI(2)`
$DIR/core/web/loader/loader_test.go: `.Defaults(two)`
$DIR/core/web/loader/loader_test.go: `.TOMLString()`
$DIR/core/web/loader/loader_test.go: `.TOMLString()`
$DIR/core/web/loader/loader_test.go: `.On("GetRelayers")`
$DIR/core/web/loader/loader_test.go: `.Return(&chainlinkmocks.FakeRelayerChainInteroperators{Relayers: []loop.Relayer{
testutils2.MockRelayer{ChainStatus: commontypes.ChainStatus{
ID: "1",
Enabled: true,
Config: config1,
}}, testutils2.MockRelayer{ChainStatus: commontypes.ChainStatus{
ID: "2",
Enabled: true,
Config: config2,
}},
}})`
$DIR/core/web/loader/loader_test.go: `.NewKeysFromStrings([]string{"2", "1", "3"})`
$DIR/core/web/loader/loader_test.go: `.loadByIDs(ctx, keys)`
$DIR/core/web/loader/loader_test.go: `.NewApplication(t)`
$DIR/core/web/loader/loader_test.go: `.Context(t)`
$DIR/core/web/loader/loader_test.go: `.NewInt(1)`
$DIR/core/web/loader/loader_test.go: `.NewInt(2)`
$DIR/core/web/loader/loader_test.go: `.NewInt(3)`
$DIR/core/web/loader/loader_test.go: `.String()`
$DIR/core/web/loader/loader_test.go: `.String()`
$DIR/core/web/loader/loader_test.go: `.On("GetRelayers")`
$DIR/core/web/loader/loader_test.go: `.Return(rcInterops)`
$DIR/core/web/loader/loader_test.go: `.NewKeysFromStrings([]string{chainID2.String(), chainID1.String(), notAnID.String()})`
$DIR/core/web/loader/loader_test.go: `.String()`
$DIR/core/web/loader/loader_test.go: `.String()`
$DIR/core/web/loader/loader_test.go: `.String()`
$DIR/core/web/loader/loader_test.go: `.loadByChainIDs(ctx, keys)`
$DIR/core/web/loader/loader_test.go: `.NewService(t)`
$DIR/core/web/loader/loader_test.go: `.NewApplication(t)`
$DIR/core/web/loader/loader_test.go: `.Context(t)`
$DIR/core/web/loader/loader_test.go: `.On("ListManagersByIDs", mock.Anything, []int64{3, 1, 2, 5})`
$DIR/core/web/loader/loader_test.go: `.Return([]feeds.FeedsManager{
mgr1, mgr2, mgr3,
}, nil)`
$DIR/core/web/loader/loader_test.go: `.On("GetFeedsService")`
$DIR/core/web/loader/loader_test.go: `.Return(fsvc)`
$DIR/core/web/loader/loader_test.go: `.NewKeysFromStrings([]string{"3", "1", "2", "5"})`
$DIR/core/web/loader/loader_test.go: `.loadByIDs(ctx, keys)`
$DIR/core/web/loader/loader_test.go: `.NewService(t)`
$DIR/core/web/loader/loader_test.go: `.NewApplication(t)`
$DIR/core/web/loader/loader_test.go: `.Context(t)`
$DIR/core/web/loader/loader_test.go: `.On("ListJobProposalsByManagersIDs", mock.Anything, []int64{3, 1, 2})`
$DIR/core/web/loader/loader_test.go: `.Return([]feeds.JobProposal{
jp1, jp3, jp2,
}, nil)`
$DIR/core/web/loader/loader_test.go: `.On("GetFeedsService")`
$DIR/core/web/loader/loader_test.go: `.Return(fsvc)`
$DIR/core/web/loader/loader_test.go: `.NewKeysFromStrings([]string{"3", "1", "2"})`
$DIR/core/web/loader/loader_test.go: `.loadByManagersIDs(ctx, keys)`
$DIR/core/web/loader/loader_test.go: `.NewORM(t)`
$DIR/core/web/loader/loader_test.go: `.NewApplication(t)`
$DIR/core/web/loader/loader_test.go: `.Context(t)`
$DIR/core/web/loader/loader_test.go: `.On("FindPipelineRunsByIDs", mock.Anything, []int64{3, 1, 2})`
$DIR/core/web/loader/loader_test.go: `.Return([]pipeline.Run{
run3, run1, run2,
}, nil)`
$DIR/core/web/loader/loader_test.go: `.On("JobORM")`
$DIR/core/web/loader/loader_test.go: `.Return(jobsORM)`
$DIR/core/web/loader/loader_test.go: `.NewKeysFromStrings([]string{"3", "1", "2"})`
$DIR/core/web/loader/loader_test.go: `.loadByIDs(ctx, keys)`
$DIR/core/web/loader/loader_test.go: `.Run("with out errors", func(t *testing.T) {
t.Parallel()
jobsORM := jobORMMocks.NewORM(t)
app := coremocks.NewApplication(t)
ctx := InjectDataloader(testutils.Context(t), app)
job1 := job.Job{ID: int32(2), PipelineSpecID: int32(1)}
job2 := job.Job{ID: int32(3), PipelineSpecID: int32(2)}
job3 := job.Job{ID: int32(4), PipelineSpecID: int32(3)}
jobsORM.On("FindJobsByPipelineSpecIDs", mock.Anything, []int32{3, 1, 2}).Return([]job.Job{
job1, job2, job3,
}, nil)
app.On("JobORM").Return(jobsORM)
batcher := jobBatcher{app}
keys := dataloader.NewKeysFromStrings([]string{"3", "1", "2"})
found := batcher.loadByPipelineSpecIDs(ctx, keys)
require.Len(t, found, 3)
assert.Equal(t, job3, found[0].Data)
assert.Equal(t, job1, found[1].Data)
assert.Equal(t, job2, found[2].Data)
})`
$DIR/core/web/loader/loader_test.go: `.NewORM(t)`
$DIR/core/web/loader/loader_test.go: `.NewApplication(t)`
$DIR/core/web/loader/loader_test.go: `.Context(t)`
$DIR/core/web/loader/loader_test.go: `.On("FindJobsByPipelineSpecIDs", mock.Anything, []int32{3, 1, 2})`
$DIR/core/web/loader/loader_test.go: `.Return([]job.Job{
job1, job2, job3,
}, nil)`
$DIR/core/web/loader/loader_test.go: `.On("JobORM")`
$DIR/core/web/loader/loader_test.go: `.Return(jobsORM)`
$DIR/core/web/loader/loader_test.go: `.NewKeysFromStrings([]string{"3", "1", "2"})`
$DIR/core/web/loader/loader_test.go: `.loadByPipelineSpecIDs(ctx, keys)`
$DIR/core/web/loader/loader_test.go: `.NewORM(t)`
$DIR/core/web/loader/loader_test.go: `.NewApplication(t)`
$DIR/core/web/loader/loader_test.go: `.Context(t)`
$DIR/core/web/loader/loader_test.go: `.On("FindJobsByPipelineSpecIDs", mock.Anything, []int32{3, 1, 2})`
$DIR/core/web/loader/loader_test.go: `.Return([]job.Job{}, sql.ErrNoRows)`
$DIR/core/web/loader/loader_test.go: `.On("JobORM")`
$DIR/core/web/loader/loader_test.go: `.Return(jobsORM)`
$DIR/core/web/loader/loader_test.go: `.NewKeysFromStrings([]string{"3", "1", "2"})`
$DIR/core/web/loader/loader_test.go: `.loadByPipelineSpecIDs(ctx, keys)`
$DIR/core/web/loader/loader_test.go: `.NewORM(t)`
$DIR/core/web/loader/loader_test.go: `.NewApplication(t)`
$DIR/core/web/loader/loader_test.go: `.Context(t)`
$DIR/core/web/loader/loader_test.go: `.New()`
$DIR/core/web/loader/loader_test.go: `.On("FindJobByExternalJobID", mock.Anything, ejID)`
$DIR/core/web/loader/loader_test.go: `.Return(job, nil)`
$DIR/core/web/loader/loader_test.go: `.On("JobORM")`
$DIR/core/web/loader/loader_test.go: `.Return(jobsORM)`
$DIR/core/web/loader/loader_test.go: `.NewKeysFromStrings([]string{ejID.String()})`
$DIR/core/web/loader/loader_test.go: `.String()`
$DIR/core/web/loader/loader_test.go: `.loadByExternalJobIDs(ctx, keys)`
$DIR/core/web/loader/loader_test.go: `.NewEvmTxStore(t)`
$DIR/core/web/loader/loader_test.go: `.NewApplication(t)`
$DIR/core/web/loader/loader_test.go: `.Context(t)`
$DIR/core/web/loader/loader_test.go: `.On("FindTxAttemptConfirmedByTxIDs", ctx, []int64{ethTxIDs[2], ethTxIDs[1], ethTxIDs[0]})`
$DIR/core/web/loader/loader_test.go: `.Return([]txmgr.TxAttempt{
attempt1, attempt2,
}, nil)`
$DIR/core/web/loader/loader_test.go: `.On("TxmStorageService")`
$DIR/core/web/loader/loader_test.go: `.Return(txStore)`
$DIR/core/web/loader/loader_test.go: `.NewKeysFromStrings([]string{"3", "2", "1"})`
$DIR/core/web/loader/loader_test.go: `.loadByEthTransactionIDs(ctx, keys)`
$DIR/core/web/loader/loader_test.go: `.Run("without errors", func(t *testing.T) {
t.Parallel()
jobsORM := jobORMMocks.NewORM(t)
app := coremocks.NewApplication(t)
ctx := InjectDataloader(testutils.Context(t), app)
specErr1 := job.SpecError{ID: int64(2), JobID: int32(1)}
specErr2 := job.SpecError{ID: int64(3), JobID: int32(2)}
specErr3 := job.SpecError{ID: int64(4), JobID: int32(3)}
jobsORM.On("FindSpecErrorsByJobIDs", mock.Anything, []int32{3, 1, 2}, mock.Anything).Return([]job.SpecError{
specErr1, specErr2, specErr3,
}, nil)
app.On("JobORM").Return(jobsORM)
batcher := jobSpecErrorsBatcher{app}
keys := dataloader.NewKeysFromStrings([]string{"3", "1", "2"})
found := batcher.loadByJobIDs(ctx, keys)
require.Len(t, found, 3)
assert.Equal(t, []job.SpecError{specErr3}, found[0].Data)
assert.Equal(t, []job.SpecError{specErr1}, found[1].Data)
assert.Equal(t, []job.SpecError{specErr2}, found[2].Data)
})`
$DIR/core/web/loader/loader_test.go: `.NewORM(t)`
$DIR/core/web/loader/loader_test.go: `.NewApplication(t)`
$DIR/core/web/loader/loader_test.go: `.Context(t)`
$DIR/core/web/loader/loader_test.go: `.On("FindSpecErrorsByJobIDs", mock.Anything, []int32{3, 1, 2}, mock.Anything)`
$DIR/core/web/loader/loader_test.go: `.Return([]job.SpecError{
specErr1, specErr2, specErr3,
}, nil)`
$DIR/core/web/loader/loader_test.go: `.On("JobORM")`
$DIR/core/web/loader/loader_test.go: `.Return(jobsORM)`
$DIR/core/web/loader/loader_test.go: `.NewKeysFromStrings([]string{"3", "1", "2"})`
$DIR/core/web/loader/loader_test.go: `.loadByJobIDs(ctx, keys)`
$DIR/core/web/loader/loader_test.go: `.NewORM(t)`
$DIR/core/web/loader/loader_test.go: `.NewApplication(t)`
$DIR/core/web/loader/loader_test.go: `.Context(t)`
$DIR/core/web/loader/loader_test.go: `.On("FindSpecErrorsByJobIDs", mock.Anything, []int32{3, 1, 2}, mock.Anything)`
$DIR/core/web/loader/loader_test.go: `.Return([]job.SpecError{}, sql.ErrNoRows)`
$DIR/core/web/loader/loader_test.go: `.On("JobORM")`
$DIR/core/web/loader/loader_test.go: `.Return(jobsORM)`
$DIR/core/web/loader/loader_test.go: `.NewKeysFromStrings([]string{"3", "1", "2"})`
$DIR/core/web/loader/loader_test.go: `.loadByJobIDs(ctx, keys)`
$DIR/core/web/loader/loader_test.go: `.NewEvmTxStore(t)`
$DIR/core/web/loader/loader_test.go: `.NewApplication(t)`
$DIR/core/web/loader/loader_test.go: `.Context(t)`
$DIR/core/web/loader/loader_test.go: `.NewHash()`
$DIR/core/web/loader/loader_test.go: `.DbReceiptToEvmReceipt(&receipt)`
$DIR/core/web/loader/loader_test.go: `.On("FindTxAttemptConfirmedByTxIDs", ctx, []int64{ethTxID})`
$DIR/core/web/loader/loader_test.go: `.Return([]txmgr.TxAttempt{
attempt1,
}, nil)`
$DIR/core/web/loader/loader_test.go: `.On("TxmStorageService")`
$DIR/core/web/loader/loader_test.go: `.Return(txStore)`
$DIR/core/web/loader/loader_test.go: `.NewKeysFromStrings([]string{"3"})`
$DIR/core/web/loader/loader_test.go: `.loadByEthTransactionIDs(ctx, keys)`
$DIR/core/web/log_controller_test.go: `c.Log.Level = ptr(toml.LogLevel(zapcore.WarnLevel))`
$DIR/core/web/log_controller_test.go: `c.Database.LogQueries = ptr(true)`
$DIR/core/web/log_controller_test.go: `t.Cleanup(clean)`
$DIR/core/web/log_controller_test.go: `cltest.AssertServerResponse(t, resp, http.StatusOK)`
$DIR/core/web/log_controller_test.go: `t.Run(tc.Description, func(t *testing.T) {
app := cltest.NewApplicationEVMDisabled(t)
require.NoError(t, app.Start(testutils.Context(t)))
client := app.NewHTTPClient(nil)
request := web.LogPatchRequest{Level: tc.logLevel, SqlEnabled: tc.logSql}
requestData, _ := json.Marshal(request)
buf := bytes.NewBuffer(requestData)
resp, cleanup := client.Patch("/v2/log", buf)
defer cleanup()
svcLogConfig := presenters.ServiceLogConfigResource{}
if tc.expectedErrorCode != 0 {
cltest.AssertServerResponse(t, resp, tc.expectedErrorCode)
} else {
cltest.AssertServerResponse(t, resp, http.StatusOK)
require.NoError(t, cltest.ParseJSONAPIResponse(t, resp, &svcLogConfig))
for i, svcName := range svcLogConfig.ServiceName {
if svcName == "Global" {
assert.Equal(t, tc.expectedLogLevel.String(), svcLogConfig.LogLevel[i])
}
if svcName == "IsSqlEnabled" {
assert.Equal(t, strconv.FormatBool(tc.expectedLogSQL), svcLogConfig.LogLevel[i])
}
}
}
})`
$DIR/core/web/log_controller_test.go: `cltest.AssertServerResponse(t, resp, tc.expectedErrorCode)`
$DIR/core/web/log_controller_test.go: `cltest.AssertServerResponse(t, resp, http.StatusOK)`
$DIR/core/web/log_controller_test.go: `.NewGeneralConfig(t, func(c *chainlink.Config, s *chainlink.Secrets) {
c.Log.Level = ptr(toml.LogLevel(zapcore.WarnLevel))
c.Database.LogQueries = ptr(true)
})`
$DIR/core/web/log_controller_test.go: `.LogLevel(zapcore.WarnLevel)`
$DIR/core/web/log_controller_test.go: `.NewApplicationWithConfig(t, cfg)`
$DIR/core/web/log_controller_test.go: `.NewHTTPClient(nil)`
$DIR/core/web/log_controller_test.go: `.Get("/v2/log")`
$DIR/core/web/log_controller_test.go: `.Cleanup(clean)`
$DIR/core/web/log_controller_test.go: `.AssertServerResponse(t, resp, http.StatusOK)`
$DIR/core/web/log_controller_test.go: `.Run(tc.Description, func(t *testing.T) {
app := cltest.NewApplicationEVMDisabled(t)
require.NoError(t, app.Start(testutils.Context(t)))
client := app.NewHTTPClient(nil)
request := web.LogPatchRequest{Level: tc.logLevel, SqlEnabled: tc.logSql}
requestData, _ := json.Marshal(request)
buf := bytes.NewBuffer(requestData)
resp, cleanup := client.Patch("/v2/log", buf)
defer cleanup()
svcLogConfig := presenters.ServiceLogConfigResource{}
if tc.expectedErrorCode != 0 {
cltest.AssertServerResponse(t, resp, tc.expectedErrorCode)
} else {
cltest.AssertServerResponse(t, resp, http.StatusOK)
require.NoError(t, cltest.ParseJSONAPIResponse(t, resp, &svcLogConfig))
for i, svcName := range svcLogConfig.ServiceName {
if svcName == "Global" {
assert.Equal(t, tc.expectedLogLevel.String(), svcLogConfig.LogLevel[i])
}
if svcName == "IsSqlEnabled" {
assert.Equal(t, strconv.FormatBool(tc.expectedLogSQL), svcLogConfig.LogLevel[i])
}
}
}
})`
$DIR/core/web/log_controller_test.go: `.NewApplicationEVMDisabled(t)`
$DIR/core/web/log_controller_test.go: `.NewHTTPClient(nil)`
$DIR/core/web/log_controller_test.go: `.Marshal(request)`
$DIR/core/web/log_controller_test.go: `.NewBuffer(requestData)`
$DIR/core/web/log_controller_test.go: `.Patch("/v2/log", buf)`
$DIR/core/web/log_controller_test.go: `.AssertServerResponse(t, resp, tc.expectedErrorCode)`
$DIR/core/web/log_controller_test.go: `.AssertServerResponse(t, resp, http.StatusOK)`
$DIR/core/web/loop_registry_internal_test.go: `s.discoveryHandler(rw, &http.Request{})`
$DIR/core/web/loop_registry_internal_test.go: `s.discoveryHandler(rw, &http.Request{})`
$DIR/core/web/loop_registry_internal_test.go: `.TestLoggerObserved(t, zap.ErrorLevel)`
$DIR/core/web/loop_registry_internal_test.go: `.NewLoopRegistry(l, nil)`
$DIR/core/web/loop_registry_internal_test.go: `.discoveryHandler(rw, &http.Request{})`
$DIR/core/web/loop_registry_internal_test.go: `.FilterMessageSnippet("could not write to response")`
$DIR/core/web/loop_registry_internal_test.go: `.Len()`
$DIR/core/web/loop_registry_internal_test.go: `.TestLoggerObserved(t, zap.ErrorLevel)`
$DIR/core/web/loop_registry_internal_test.go: `.NewLoopRegistry(l, nil)`
$DIR/core/web/loop_registry_internal_test.go: `.New("can't unmarshal")`
$DIR/core/web/loop_registry_internal_test.go: `.discoveryHandler(rw, &http.Request{})`
$DIR/core/web/loop_registry_internal_test.go: `.FilterMessageSnippet("could not write to response")`
$DIR/core/web/loop_registry_internal_test.go: `.Len()`
$DIR/core/web/loop_registry_test.go: `c.OCR.Enabled = ptr(true)`
$DIR/core/web/loop_registry_test.go: `c.P2P.V2.Enabled = ptr(true)`
$DIR/core/web/loop_registry_test.go: `c.P2P.V2.ListenAddresses = &[]string{fmt.Sprintf("127.0.0.1:%d", freeport.GetOne(t))}`
$DIR/core/web/loop_registry_test.go: `c.P2P.PeerID = &cltest.DefaultP2PPeerID`
$DIR/core/web/loop_registry_test.go: `configurePromRegistry()`
$DIR/core/web/loop_registry_test.go: `mockLoop.start()`
$DIR/core/web/loop_registry_test.go: `mockLoop.run()`
$DIR/core/web/loop_registry_test.go: `t.Run("discovery endpoint", func(t *testing.T) {
// under the covers this is routing thru the app into loop registry
resp, cleanup := client.Get("/discovery")
t.Cleanup(cleanup)
cltest.AssertServerResponse(t, resp, http.StatusOK)
b, err := io.ReadAll(resp.Body)
require.NoError(t, err)
t.Logf("discovery response %s", b)
var got []*targetgroup.Group
require.NoError(t, json.Unmarshal(b, &got))
gotLabels := make([]model.LabelSet, 0)
for _, ls := range got {
gotLabels = append(gotLabels, ls.Labels)
}
assert.Equal(t, len(expectedLabels), len(gotLabels))
for i := range expectedLabels {
assert.EqualValues(t, expectedLabels[i], gotLabels[i])
}
})`
$DIR/core/web/loop_registry_test.go: `t.Cleanup(cleanup)`
$DIR/core/web/loop_registry_test.go: `cltest.AssertServerResponse(t, resp, http.StatusOK)`
$DIR/core/web/loop_registry_test.go: `gotLabels = append(gotLabels, ls.Labels)`
$DIR/core/web/loop_registry_test.go: `t.Run("plugin metrics OK", func(t *testing.T) {
// plugin name `mockLoopImpl` matches key in PluginConfigs
resp, cleanup := client.Get(expectedLooppEndPoint)
t.Cleanup(cleanup)
cltest.AssertServerResponse(t, resp, http.StatusOK)
b, err := io.ReadAll(resp.Body)
require.NoError(t, err)
t.Logf("plugin metrics response %s", b)
var (
exceptedCount = 1
expectedMetric = fmt.Sprintf("%s %d", testMetricName, exceptedCount)
)
require.Contains(t, string(b), expectedMetric)
})`
$DIR/core/web/loop_registry_test.go: `t.Cleanup(cleanup)`
$DIR/core/web/loop_registry_test.go: `cltest.AssertServerResponse(t, resp, http.StatusOK)`
$DIR/core/web/loop_registry_test.go: `t.Run("core metrics OK", func(t *testing.T) {
// core node metrics endpoint
resp, cleanup := client.Get(expectedCoreEndPoint)
t.Cleanup(cleanup)
cltest.AssertServerResponse(t, resp, http.StatusOK)
b, err := io.ReadAll(resp.Body)
require.NoError(t, err)
t.Logf("core metrics response %s", b)
})`
$DIR/core/web/loop_registry_test.go: `t.Cleanup(cleanup)`
$DIR/core/web/loop_registry_test.go: `cltest.AssertServerResponse(t, resp, http.StatusOK)`
$DIR/core/web/loop_registry_test.go: `t.Cleanup(cleanup)`
$DIR/core/web/loop_registry_test.go: `cltest.AssertServerResponse(t, resp, http.StatusNotFound)`
$DIR/core/web/loop_registry_test.go: `.Context(t)`
$DIR/core/web/loop_registry_test.go: `.NewGeneralConfig(t, func(c *chainlink.Config, s *chainlink.Secrets) {
c.OCR.Enabled = ptr(true)
c.P2P.V2.Enabled = ptr(true)
c.P2P.V2.ListenAddresses = &[]string{fmt.Sprintf("127.0.0.1:%d", freeport.GetOne(t))}
c.P2P.PeerID = &cltest.DefaultP2PPeerID
})`
$DIR/core/web/loop_registry_test.go: `.Sprintf("127.0.0.1:%d", freeport.GetOne(t))`
$DIR/core/web/loop_registry_test.go: `.GetOne(t)`
$DIR/core/web/loop_registry_test.go: `.NewApplicationWithConfigAndKey(t, cfg, cltest.DefaultP2PKey)`
$DIR/core/web/loop_registry_test.go: `.LabelValue(expectedCoreEndPoint)`
$DIR/core/web/loop_registry_test.go: `.LabelValue(expectedLooppEndPoint)`
$DIR/core/web/loop_registry_test.go: `.GetLoopRegistry()`
$DIR/core/web/loop_registry_test.go: `.Register("mockLoopImpl")`
$DIR/core/web/loop_registry_test.go: `.start()`
$DIR/core/web/loop_registry_test.go: `.close()`
$DIR/core/web/loop_registry_test.go: `.run()`
$DIR/core/web/loop_registry_test.go: `.NewHTTPClient(nil)`
$DIR/core/web/loop_registry_test.go: `.Run("discovery endpoint", func(t *testing.T) {
// under the covers this is routing thru the app into loop registry
resp, cleanup := client.Get("/discovery")
t.Cleanup(cleanup)
cltest.AssertServerResponse(t, resp, http.StatusOK)
b, err := io.ReadAll(resp.Body)
require.NoError(t, err)
t.Logf("discovery response %s", b)
var got []*targetgroup.Group
require.NoError(t, json.Unmarshal(b, &got))
gotLabels := make([]model.LabelSet, 0)
for _, ls := range got {
gotLabels = append(gotLabels, ls.Labels)
}
assert.Equal(t, len(expectedLabels), len(gotLabels))
for i := range expectedLabels {
assert.EqualValues(t, expectedLabels[i], gotLabels[i])
}
})`
$DIR/core/web/loop_registry_test.go: `.Get("/discovery")`
$DIR/core/web/loop_registry_test.go: `.Cleanup(cleanup)`
$DIR/core/web/loop_registry_test.go: `.AssertServerResponse(t, resp, http.StatusOK)`
$DIR/core/web/loop_registry_test.go: `.ReadAll(resp.Body)`
$DIR/core/web/loop_registry_test.go: `.Run("plugin metrics OK", func(t *testing.T) {
// plugin name `mockLoopImpl` matches key in PluginConfigs
resp, cleanup := client.Get(expectedLooppEndPoint)
t.Cleanup(cleanup)
cltest.AssertServerResponse(t, resp, http.StatusOK)
b, err := io.ReadAll(resp.Body)
require.NoError(t, err)
t.Logf("plugin metrics response %s", b)
var (
exceptedCount = 1
expectedMetric = fmt.Sprintf("%s %d", testMetricName, exceptedCount)
)
require.Contains(t, string(b), expectedMetric)
})`
$DIR/core/web/loop_registry_test.go: `.Get(expectedLooppEndPoint)`
$DIR/core/web/loop_registry_test.go: `.Cleanup(cleanup)`
$DIR/core/web/loop_registry_test.go: `.AssertServerResponse(t, resp, http.StatusOK)`
$DIR/core/web/loop_registry_test.go: `.ReadAll(resp.Body)`
$DIR/core/web/loop_registry_test.go: `.Sprintf("%s %d", testMetricName, exceptedCount)`
$DIR/core/web/loop_registry_test.go: `.Run("core metrics OK", func(t *testing.T) {
// core node metrics endpoint
resp, cleanup := client.Get(expectedCoreEndPoint)
t.Cleanup(cleanup)
cltest.AssertServerResponse(t, resp, http.StatusOK)
b, err := io.ReadAll(resp.Body)
require.NoError(t, err)
t.Logf("core metrics response %s", b)
})`
$DIR/core/web/loop_registry_test.go: `.Get(expectedCoreEndPoint)`
$DIR/core/web/loop_registry_test.go: `.Cleanup(cleanup)`
$DIR/core/web/loop_registry_test.go: `.AssertServerResponse(t, resp, http.StatusOK)`
$DIR/core/web/loop_registry_test.go: `.ReadAll(resp.Body)`
$DIR/core/web/loop_registry_test.go: `.Get("/plugins/noexist/metrics")`
$DIR/core/web/loop_registry_test.go: `.Cleanup(cleanup)`
$DIR/core/web/loop_registry_test.go: `.AssertServerResponse(t, resp, http.StatusNotFound)`
$DIR/core/web/ocr2_keys_controller_test.go: `t.Cleanup(cleanup)`
$DIR/core/web/ocr2_keys_controller_test.go: `cltest.AssertServerResponse(t, response, http.StatusOK)`
$DIR/core/web/ocr2_keys_controller_test.go: `t.Run(test.name, func(tt *testing.T) {
keys, _ := OCRKeyStore.GetAll()
initialLength := len(keys)
response, cleanup := client.Post(fmt.Sprintf("/v2/keys/ocr2/%s", test.chainType), nil)
t.Cleanup(cleanup)
cltest.AssertServerResponse(t, response, http.StatusOK)
keys, _ = OCRKeyStore.GetAll()
require.Len(t, keys, initialLength+1)
resource := presenters.OCR2KeysBundleResource{}
err := web.ParseJSONAPIResponse(cltest.ParseResponseBody(t, response), &resource)
assert.NoError(t, err)
var ids []string
for _, key := range keys {
ids = append(ids, key.ID())
}
require.Contains(t, ids, resource.ID)
_, err = OCRKeyStore.Get(resource.ID)
require.NoError(t, err)
})`
$DIR/core/web/ocr2_keys_controller_test.go: `t.Cleanup(cleanup)`
$DIR/core/web/ocr2_keys_controller_test.go: `cltest.AssertServerResponse(t, response, http.StatusOK)`
$DIR/core/web/ocr2_keys_controller_test.go: `keys, _ = OCRKeyStore.GetAll()`
$DIR/core/web/ocr2_keys_controller_test.go: `ids = append(ids, key.ID())`
$DIR/core/web/ocr2_keys_controller_test.go: `_, err = OCRKeyStore.Get(resource.ID)`
$DIR/core/web/ocr2_keys_controller_test.go: `t.Cleanup(cleanup)`
$DIR/core/web/ocr2_keys_controller_test.go: `t.Cleanup(cleanup)`
$DIR/core/web/ocr2_keys_controller_test.go: `keys, _ = OCRKeyStore.GetAll()`
$DIR/core/web/ocr2_keys_controller_test.go: `.GetAll()`
$DIR/core/web/ocr2_keys_controller_test.go: `.Get("/v2/keys/ocr2")`
$DIR/core/web/ocr2_keys_controller_test.go: `.Cleanup(cleanup)`
$DIR/core/web/ocr2_keys_controller_test.go: `.AssertServerResponse(t, response, http.StatusOK)`
$DIR/core/web/ocr2_keys_controller_test.go: `.ParseJSONAPIResponse(cltest.ParseResponseBody(t, response), &resources)`
$DIR/core/web/ocr2_keys_controller_test.go: `.ParseResponseBody(t, response)`
$DIR/core/web/ocr2_keys_controller_test.go: `.ID()`
$DIR/core/web/ocr2_keys_controller_test.go: `.Run(test.name, func(tt *testing.T) {
keys, _ := OCRKeyStore.GetAll()
initialLength := len(keys)
response, cleanup := client.Post(fmt.Sprintf("/v2/keys/ocr2/%s", test.chainType), nil)
t.Cleanup(cleanup)
cltest.AssertServerResponse(t, response, http.StatusOK)
keys, _ = OCRKeyStore.GetAll()
require.Len(t, keys, initialLength+1)
resource := presenters.OCR2KeysBundleResource{}
err := web.ParseJSONAPIResponse(cltest.ParseResponseBody(t, response), &resource)
assert.NoError(t, err)
var ids []string
for _, key := range keys {
ids = append(ids, key.ID())
}
require.Contains(t, ids, resource.ID)
_, err = OCRKeyStore.Get(resource.ID)
require.NoError(t, err)
})`
$DIR/core/web/ocr2_keys_controller_test.go: `.GetAll()`
$DIR/core/web/ocr2_keys_controller_test.go: `.Post(fmt.Sprintf("/v2/keys/ocr2/%s", test.chainType), nil)`
$DIR/core/web/ocr2_keys_controller_test.go: `.Sprintf("/v2/keys/ocr2/%s", test.chainType)`
$DIR/core/web/ocr2_keys_controller_test.go: `.Cleanup(cleanup)`
$DIR/core/web/ocr2_keys_controller_test.go: `.AssertServerResponse(t, response, http.StatusOK)`
$DIR/core/web/ocr2_keys_controller_test.go: `.GetAll()`
$DIR/core/web/ocr2_keys_controller_test.go: `.ParseJSONAPIResponse(cltest.ParseResponseBody(t, response), &resource)`
$DIR/core/web/ocr2_keys_controller_test.go: `.ParseResponseBody(t, response)`
$DIR/core/web/ocr2_keys_controller_test.go: `.ID()`
$DIR/core/web/ocr2_keys_controller_test.go: `.Get(resource.ID)`
$DIR/core/web/ocr2_keys_controller_test.go: `.Delete("/v2/keys/ocr2/" + nonExistentOCRKeyID)`
$DIR/core/web/ocr2_keys_controller_test.go: `.Cleanup(cleanup)`
$DIR/core/web/ocr2_keys_controller_test.go: `.Context(t)`
$DIR/core/web/ocr2_keys_controller_test.go: `.GetAll()`
$DIR/core/web/ocr2_keys_controller_test.go: `.Create(ctx, "evm")`
$DIR/core/web/ocr2_keys_controller_test.go: `.Delete("/v2/keys/ocr2/" + key.ID())`
$DIR/core/web/ocr2_keys_controller_test.go: `.ID()`
$DIR/core/web/ocr2_keys_controller_test.go: `.Cleanup(cleanup)`
$DIR/core/web/ocr2_keys_controller_test.go: `.GetAll()`
$DIR/core/web/ocr_keys_controller_test.go: `t.Cleanup(cleanup)`
$DIR/core/web/ocr_keys_controller_test.go: `cltest.AssertServerResponse(t, response, http.StatusOK)`
$DIR/core/web/ocr_keys_controller_test.go: `t.Cleanup(cleanup)`
$DIR/core/web/ocr_keys_controller_test.go: `cltest.AssertServerResponse(t, response, http.StatusOK)`
$DIR/core/web/ocr_keys_controller_test.go: `keys, _ = OCRKeyStore.GetAll()`
$DIR/core/web/ocr_keys_controller_test.go: `ids = append(ids, key.ID())`
$DIR/core/web/ocr_keys_controller_test.go: `_, err = OCRKeyStore.Get(resource.ID)`
$DIR/core/web/ocr_keys_controller_test.go: `t.Cleanup(cleanup)`
$DIR/core/web/ocr_keys_controller_test.go: `t.Cleanup(cleanup)`
$DIR/core/web/ocr_keys_controller_test.go: `keys, _ = OCRKeyStore.GetAll()`
$DIR/core/web/ocr_keys_controller_test.go: `.GetAll()`
$DIR/core/web/ocr_keys_controller_test.go: `.Get("/v2/keys/ocr")`
$DIR/core/web/ocr_keys_controller_test.go: `.Cleanup(cleanup)`
$DIR/core/web/ocr_keys_controller_test.go: `.AssertServerResponse(t, response, http.StatusOK)`
$DIR/core/web/ocr_keys_controller_test.go: `.ParseJSONAPIResponse(cltest.ParseResponseBody(t, response), &resources)`
$DIR/core/web/ocr_keys_controller_test.go: `.ParseResponseBody(t, response)`
$DIR/core/web/ocr_keys_controller_test.go: `.ID()`
$DIR/core/web/ocr_keys_controller_test.go: `.GetAll()`
$DIR/core/web/ocr_keys_controller_test.go: `.Post("/v2/keys/ocr", nil)`
$DIR/core/web/ocr_keys_controller_test.go: `.Cleanup(cleanup)`
$DIR/core/web/ocr_keys_controller_test.go: `.AssertServerResponse(t, response, http.StatusOK)`
$DIR/core/web/ocr_keys_controller_test.go: `.GetAll()`
$DIR/core/web/ocr_keys_controller_test.go: `.ParseJSONAPIResponse(cltest.ParseResponseBody(t, response), &resource)`
$DIR/core/web/ocr_keys_controller_test.go: `.ParseResponseBody(t, response)`
$DIR/core/web/ocr_keys_controller_test.go: `.ID()`
$DIR/core/web/ocr_keys_controller_test.go: `.Get(resource.ID)`
$DIR/core/web/ocr_keys_controller_test.go: `.Delete("/v2/keys/ocr/" + nonExistentOCRKeyID)`
$DIR/core/web/ocr_keys_controller_test.go: `.Cleanup(cleanup)`
$DIR/core/web/ocr_keys_controller_test.go: `.Context(t)`
$DIR/core/web/ocr_keys_controller_test.go: `.GetAll()`
$DIR/core/web/ocr_keys_controller_test.go: `.Create(ctx)`
$DIR/core/web/ocr_keys_controller_test.go: `.Delete("/v2/keys/ocr/" + key.ID())`
$DIR/core/web/ocr_keys_controller_test.go: `.ID()`
$DIR/core/web/ocr_keys_controller_test.go: `.Cleanup(cleanup)`
$DIR/core/web/ocr_keys_controller_test.go: `.GetAll()`
$DIR/core/web/p2p_keys_controller_test.go: `t.Cleanup(cleanup)`
$DIR/core/web/p2p_keys_controller_test.go: `cltest.AssertServerResponse(t, response, http.StatusOK)`
$DIR/core/web/p2p_keys_controller_test.go: `t.Cleanup(cleanup)`
$DIR/core/web/p2p_keys_controller_test.go: `cltest.AssertServerResponse(t, response, http.StatusOK)`
$DIR/core/web/p2p_keys_controller_test.go: `_, err = keyStore.P2P().Get(peerID)`
$DIR/core/web/p2p_keys_controller_test.go: `t.Cleanup(cleanup)`
$DIR/core/web/p2p_keys_controller_test.go: `t.Cleanup(cleanup)`
$DIR/core/web/p2p_keys_controller_test.go: `t.Cleanup(cleanup)`
$DIR/core/web/p2p_keys_controller_test.go: `keys, _ = keyStore.P2P().GetAll()`
$DIR/core/web/p2p_keys_controller_test.go: `.P2P()`
$DIR/core/web/p2p_keys_controller_test.go: `.GetAll()`
$DIR/core/web/p2p_keys_controller_test.go: `.Get("/v2/keys/p2p")`
$DIR/core/web/p2p_keys_controller_test.go: `.Cleanup(cleanup)`
$DIR/core/web/p2p_keys_controller_test.go: `.AssertServerResponse(t, response, http.StatusOK)`
$DIR/core/web/p2p_keys_controller_test.go: `.ParseJSONAPIResponse(cltest.ParseResponseBody(t, response), &resources)`
$DIR/core/web/p2p_keys_controller_test.go: `.ParseResponseBody(t, response)`
$DIR/core/web/p2p_keys_controller_test.go: `.PeerID()`
$DIR/core/web/p2p_keys_controller_test.go: `.String()`
$DIR/core/web/p2p_keys_controller_test.go: `.NewApplicationEVMDisabled(t)`
$DIR/core/web/p2p_keys_controller_test.go: `.NewHTTPClient(nil)`
$DIR/core/web/p2p_keys_controller_test.go: `.GetKeyStore()`
$DIR/core/web/p2p_keys_controller_test.go: `.Post("/v2/keys/p2p", nil)`
$DIR/core/web/p2p_keys_controller_test.go: `.Cleanup(cleanup)`
$DIR/core/web/p2p_keys_controller_test.go: `.AssertServerResponse(t, response, http.StatusOK)`
$DIR/core/web/p2p_keys_controller_test.go: `.P2P()`
$DIR/core/web/p2p_keys_controller_test.go: `.GetAll()`
$DIR/core/web/p2p_keys_controller_test.go: `.ParseJSONAPIResponse(cltest.ParseResponseBody(t, response), &resource)`
$DIR/core/web/p2p_keys_controller_test.go: `.ParseResponseBody(t, response)`
$DIR/core/web/p2p_keys_controller_test.go: `.P2P()`
$DIR/core/web/p2p_keys_controller_test.go: `.Get(peerID)`
$DIR/core/web/p2p_keys_controller_test.go: `.Delete("/v2/keys/p2p/" + nonExistentP2PKeyID)`
$DIR/core/web/p2p_keys_controller_test.go: `.Cleanup(cleanup)`
$DIR/core/web/p2p_keys_controller_test.go: `.Delete("/v2/keys/p2p/" + nonExistentP2PKeyID)`
$DIR/core/web/p2p_keys_controller_test.go: `.Cleanup(cleanup)`
$DIR/core/web/p2p_keys_controller_test.go: `.Context(t)`
$DIR/core/web/p2p_keys_controller_test.go: `.P2P()`
$DIR/core/web/p2p_keys_controller_test.go: `.GetAll()`
$DIR/core/web/p2p_keys_controller_test.go: `.P2P()`
$DIR/core/web/p2p_keys_controller_test.go: `.Create(ctx)`
$DIR/core/web/p2p_keys_controller_test.go: `.Delete(fmt.Sprintf("/v2/keys/p2p/%s", key.ID()))`
$DIR/core/web/p2p_keys_controller_test.go: `.Sprintf("/v2/keys/p2p/%s", key.ID())`
$DIR/core/web/p2p_keys_controller_test.go: `.ID()`
$DIR/core/web/p2p_keys_controller_test.go: `.Cleanup(cleanup)`
$DIR/core/web/p2p_keys_controller_test.go: `.P2P()`
$DIR/core/web/p2p_keys_controller_test.go: `.GetAll()`
$DIR/core/web/ping_controller_test.go: `cltest.AssertServerResponse(t, resp, http.StatusOK)`
$DIR/core/web/ping_controller_test.go: `err = app.BridgeORM().CreateExternalInitiator(ctx, ei)`
$DIR/core/web/ping_controller_test.go: `request.Header.Set("Content-Type", web.MediaType)`
$DIR/core/web/ping_controller_test.go: `request.Header.Set("X-Chainlink-EA-AccessKey", eia.AccessKey)`
$DIR/core/web/ping_controller_test.go: `request.Header.Set("X-Chainlink-EA-Secret", eia.Secret)`
$DIR/core/web/ping_controller_test.go: `cltest.AssertServerResponse(t, resp, http.StatusOK)`
$DIR/core/web/ping_controller_test.go: `.NewApplicationEVMDisabled(t)`
$DIR/core/web/ping_controller_test.go: `.NewHTTPClient(nil)`
$DIR/core/web/ping_controller_test.go: `.Get("/v2/ping")`
$DIR/core/web/ping_controller_test.go: `.AssertServerResponse(t, resp, http.StatusOK)`
$DIR/core/web/ping_controller_test.go: `.ParseResponseBody(t, resp)`
$DIR/core/web/ping_controller_test.go: `.TrimSpace(body)`
$DIR/core/web/ping_controller_test.go: `.Context(t)`
$DIR/core/web/ping_controller_test.go: `.NewApplicationEVMDisabled(t)`
$DIR/core/web/ping_controller_test.go: `.WebURL(t, "http://localhost:8888")`
$DIR/core/web/ping_controller_test.go: `.New()`
$DIR/core/web/ping_controller_test.go: `.String()`
$DIR/core/web/ping_controller_test.go: `.NewExternalInitiator(eia, eir)`
$DIR/core/web/ping_controller_test.go: `.BridgeORM()`
$DIR/core/web/ping_controller_test.go: `.CreateExternalInitiator(ctx, ei)`
$DIR/core/web/ping_controller_test.go: `.NewRequestWithContext(ctx, "GET", url, nil)`
$DIR/core/web/ping_controller_test.go: `.Header.Set("Content-Type", web.MediaType)`
$DIR/core/web/ping_controller_test.go: `.Header.Set("X-Chainlink-EA-AccessKey", eia.AccessKey)`
$DIR/core/web/ping_controller_test.go: `.Header.Set("X-Chainlink-EA-Secret", eia.Secret)`
$DIR/core/web/ping_controller_test.go: `.NewTestLocalOnlyHTTPClient()`
$DIR/core/web/ping_controller_test.go: `.Do(request)`
$DIR/core/web/ping_controller_test.go: `.AssertServerResponse(t, resp, http.StatusOK)`
$DIR/core/web/ping_controller_test.go: `.ParseResponseBody(t, resp)`
$DIR/core/web/ping_controller_test.go: `.TrimSpace(body)`
$DIR/core/web/ping_controller_test.go: `.Context(t)`
$DIR/core/web/ping_controller_test.go: `.NewApplicationEVMDisabled(t)`
$DIR/core/web/ping_controller_test.go: `.NewTestLocalOnlyHTTPClient()`
$DIR/core/web/ping_controller_test.go: `.NewRequestWithContext(ctx, "GET", url, nil)`
$DIR/core/web/ping_controller_test.go: `.Do(req)`
$DIR/core/web/pipeline_job_spec_errors_controller_test.go: `id = jse.ID`
$DIR/core/web/pipeline_job_spec_errors_controller_test.go: `cltest.AssertServerResponse(t, resp, http.StatusNoContent)`
$DIR/core/web/pipeline_job_spec_errors_controller_test.go: `j, err = app.JobORM().FindJob(testutils.Context(t), j.ID)`
$DIR/core/web/pipeline_job_spec_errors_controller_test.go: `.Context(t)`
$DIR/core/web/pipeline_job_spec_errors_controller_test.go: `.JobORM()`
$DIR/core/web/pipeline_job_spec_errors_controller_test.go: `.FindJob(testutils.Context(t), jID)`
$DIR/core/web/pipeline_job_spec_errors_controller_test.go: `.Context(t)`
$DIR/core/web/pipeline_job_spec_errors_controller_test.go: `.Delete(fmt.Sprintf("/v2/pipeline/job_spec_errors/%v", id))`
$DIR/core/web/pipeline_job_spec_errors_controller_test.go: `.Sprintf("/v2/pipeline/job_spec_errors/%v", id)`
$DIR/core/web/pipeline_job_spec_errors_controller_test.go: `.AssertServerResponse(t, resp, http.StatusNoContent)`
$DIR/core/web/pipeline_job_spec_errors_controller_test.go: `.JobORM()`
$DIR/core/web/pipeline_job_spec_errors_controller_test.go: `.FindJob(testutils.Context(t), j.ID)`
$DIR/core/web/pipeline_job_spec_errors_controller_test.go: `.Context(t)`
$DIR/core/web/pipeline_job_spec_errors_controller_test.go: `.Delete("/v2/pipeline/job_spec_errors/1")`
$DIR/core/web/pipeline_runs_controller_test.go: `c.JobPipeline.HTTPRequest.DefaultTimeout = commonconfig.MustNewDuration(2 * time.Second)`
$DIR/core/web/pipeline_runs_controller_test.go: `c.Database.Listener.FallbackPollInterval = commonconfig.MustNewDuration(10 * time.Millisecond)`
$DIR/core/web/pipeline_runs_controller_test.go: `err = app.AddJobV2(testutils.Context(t), &jb)`
$DIR/core/web/pipeline_runs_controller_test.go: `time.Sleep(3 * time.Second)`
$DIR/core/web/pipeline_runs_controller_test.go: `cltest.AssertServerResponse(t, response, http.StatusOK)`
$DIR/core/web/pipeline_runs_controller_test.go: `c.JobPipeline.HTTPRequest.DefaultTimeout = commonconfig.MustNewDuration(2 * time.Second)`
$DIR/core/web/pipeline_runs_controller_test.go: `c.Database.Listener.FallbackPollInterval = commonconfig.MustNewDuration(10 * time.Millisecond)`
$DIR/core/web/pipeline_runs_controller_test.go: `err = app.AddJobV2(testutils.Context(t), &jb)`
$DIR/core/web/pipeline_runs_controller_test.go: `time.Sleep(3 * time.Second)`
$DIR/core/web/pipeline_runs_controller_test.go: `cltest.AssertServerResponse(t, response, http.StatusOK)`
$DIR/core/web/pipeline_runs_controller_test.go: `query.Set("evmChainID", cltest.FixtureChainID.String())`
$DIR/core/web/pipeline_runs_controller_test.go: `url.RawQuery = query.Encode()`
$DIR/core/web/pipeline_runs_controller_test.go: `cltest.AssertServerResponse(t, response, http.StatusOK)`
$DIR/core/web/pipeline_runs_controller_test.go: `cltest.AssertServerResponse(t, response, http.StatusOK)`
$DIR/core/web/pipeline_runs_controller_test.go: `cltest.AssertServerResponse(t, response, http.StatusOK)`
$DIR/core/web/pipeline_runs_controller_test.go: `cltest.AssertServerResponse(t, response, http.StatusOK)`
$DIR/core/web/pipeline_runs_controller_test.go: `.Context(t)`
$DIR/core/web/pipeline_runs_controller_test.go: `.NewEthMocksWithStartupAssertions(t)`
$DIR/core/web/pipeline_runs_controller_test.go: `.NewGeneralConfig(t, func(c *chainlink.Config, s *chainlink.Secrets) {
c.JobPipeline.HTTPRequest.DefaultTimeout = commonconfig.MustNewDuration(2 * time.Second)
c.Database.Listener.FallbackPollInterval = commonconfig.MustNewDuration(10 * time.Millisecond)
})`
$DIR/core/web/pipeline_runs_controller_test.go: `.MustNewDuration(2 * time.Second)`
$DIR/core/web/pipeline_runs_controller_test.go: `.MustNewDuration(10 * time.Millisecond)`
$DIR/core/web/pipeline_runs_controller_test.go: `.NewApplicationWithConfig(t, cfg, ethClient)`
$DIR/core/web/pipeline_runs_controller_test.go: `.NewHTTPMockServerWithRequest(t, 200, `{}`, func(r *http.Request) {
defer r.Body.Close()
bs, err := io.ReadAll(r.Body)
require.NoError(t, err)
require.Equal(t, `{"result":"12345"}`, string(bs))
})`
$DIR/core/web/pipeline_runs_controller_test.go: `.ReadAll(r.Body)`
$DIR/core/web/pipeline_runs_controller_test.go: `.MustCreateBridge(t, app.GetDB(), cltest.BridgeOpts{URL: mockServer.URL})`
$DIR/core/web/pipeline_runs_controller_test.go: `.GetDB()`
$DIR/core/web/pipeline_runs_controller_test.go: `.New()`
$DIR/core/web/pipeline_runs_controller_test.go: `.Sprintf(testspecs.WebhookSpecWithBodyTemplate, uuid, bridge.Name.String())`
$DIR/core/web/pipeline_runs_controller_test.go: `.Name.String()`
$DIR/core/web/pipeline_runs_controller_test.go: `.ValidatedWebhookSpec(ctx, tomlStr, app.GetExternalInitiatorManager())`
$DIR/core/web/pipeline_runs_controller_test.go: `.GetExternalInitiatorManager()`
$DIR/core/web/pipeline_runs_controller_test.go: `.AddJobV2(testutils.Context(t), &jb)`
$DIR/core/web/pipeline_runs_controller_test.go: `.Context(t)`
$DIR/core/web/pipeline_runs_controller_test.go: `.Sleep(3 * time.Second)`
$DIR/core/web/pipeline_runs_controller_test.go: `.NewHTTPClient(nil)`
$DIR/core/web/pipeline_runs_controller_test.go: `.NewReader(`{"data":{"result":"123.45"}}`)`
$DIR/core/web/pipeline_runs_controller_test.go: `.Post("/v2/jobs/"+uuid.String()+"/runs", body)`
$DIR/core/web/pipeline_runs_controller_test.go: `.String()`
$DIR/core/web/pipeline_runs_controller_test.go: `.AssertServerResponse(t, response, http.StatusOK)`
$DIR/core/web/pipeline_runs_controller_test.go: `.ParseJSONAPIResponse(cltest.ParseResponseBody(t, response), &parsedResponse)`
$DIR/core/web/pipeline_runs_controller_test.go: `.ParseResponseBody(t, response)`
$DIR/core/web/pipeline_runs_controller_test.go: `.Context(t)`
$DIR/core/web/pipeline_runs_controller_test.go: `.NewEthMocksWithStartupAssertions(t)`
$DIR/core/web/pipeline_runs_controller_test.go: `.NewGeneralConfig(t, func(c *chainlink.Config, s *chainlink.Secrets) {
c.JobPipeline.HTTPRequest.DefaultTimeout = commonconfig.MustNewDuration(2 * time.Second)
c.Database.Listener.FallbackPollInterval = commonconfig.MustNewDuration(10 * time.Millisecond)
})`
$DIR/core/web/pipeline_runs_controller_test.go: `.MustNewDuration(2 * time.Second)`
$DIR/core/web/pipeline_runs_controller_test.go: `.MustNewDuration(10 * time.Millisecond)`
$DIR/core/web/pipeline_runs_controller_test.go: `.NewApplicationWithConfig(t, cfg, ethClient)`
$DIR/core/web/pipeline_runs_controller_test.go: `.NewHTTPMockServer(t, 200, "POST", `{"data":{"result":"123.45"}}`)`
$DIR/core/web/pipeline_runs_controller_test.go: `.MustCreateBridge(t, app.GetDB(), cltest.BridgeOpts{URL: mockServer.URL})`
$DIR/core/web/pipeline_runs_controller_test.go: `.GetDB()`
$DIR/core/web/pipeline_runs_controller_test.go: `.NewHTTPMockServerWithRequest(t, 200, `{}`, func(r *http.Request) {
defer r.Body.Close()
bs, err := io.ReadAll(r.Body)
require.NoError(t, err)
require.Equal(t, `{"result":"12345"}`, string(bs))
})`
$DIR/core/web/pipeline_runs_controller_test.go: `.ReadAll(r.Body)`
$DIR/core/web/pipeline_runs_controller_test.go: `.MustCreateBridge(t, app.GetDB(), cltest.BridgeOpts{URL: mockServer.URL})`
$DIR/core/web/pipeline_runs_controller_test.go: `.GetDB()`
$DIR/core/web/pipeline_runs_controller_test.go: `.New()`
$DIR/core/web/pipeline_runs_controller_test.go: `.GetWebhookSpecNoBody(uuid, bridge.Name.String(), submitBridge.Name.String())`
$DIR/core/web/pipeline_runs_controller_test.go: `.Name.String()`
$DIR/core/web/pipeline_runs_controller_test.go: `.Name.String()`
$DIR/core/web/pipeline_runs_controller_test.go: `.ValidatedWebhookSpec(ctx, tomlStr, app.GetExternalInitiatorManager())`
$DIR/core/web/pipeline_runs_controller_test.go: `.GetExternalInitiatorManager()`
$DIR/core/web/pipeline_runs_controller_test.go: `.AddJobV2(testutils.Context(t), &jb)`
$DIR/core/web/pipeline_runs_controller_test.go: `.Context(t)`
$DIR/core/web/pipeline_runs_controller_test.go: `.Sleep(3 * time.Second)`
$DIR/core/web/pipeline_runs_controller_test.go: `.NewHTTPClient(nil)`
$DIR/core/web/pipeline_runs_controller_test.go: `.Post("/v2/jobs/"+uuid.String()+"/runs", nil)`
$DIR/core/web/pipeline_runs_controller_test.go: `.String()`
$DIR/core/web/pipeline_runs_controller_test.go: `.AssertServerResponse(t, response, http.StatusOK)`
$DIR/core/web/pipeline_runs_controller_test.go: `.ParseJSONAPIResponse(cltest.ParseResponseBody(t, response), &parsedResponse)`
$DIR/core/web/pipeline_runs_controller_test.go: `.ParseResponseBody(t, response)`
$DIR/core/web/pipeline_runs_controller_test.go: `.MarshalIndent(parsedResponse, "", " ")`
$DIR/core/web/pipeline_runs_controller_test.go: `.Query()`
$DIR/core/web/pipeline_runs_controller_test.go: `.Set("evmChainID", cltest.FixtureChainID.String())`
$DIR/core/web/pipeline_runs_controller_test.go: `.FixtureChainID.String()`
$DIR/core/web/pipeline_runs_controller_test.go: `.Encode()`
$DIR/core/web/pipeline_runs_controller_test.go: `.Get(url.String())`
$DIR/core/web/pipeline_runs_controller_test.go: `.String()`
$DIR/core/web/pipeline_runs_controller_test.go: `.AssertServerResponse(t, response, http.StatusOK)`
$DIR/core/web/pipeline_runs_controller_test.go: `.ParseResponseBody(t, response)`
$DIR/core/web/pipeline_runs_controller_test.go: `.ParseJSONAPIResponse(responseBytes, &parsedResponse)`
$DIR/core/web/pipeline_runs_controller_test.go: `.Get("/v2/jobs/" + fmt.Sprintf("%v", jobID) + "/runs")`
$DIR/core/web/pipeline_runs_controller_test.go: `.Sprintf("%v", jobID)`
$DIR/core/web/pipeline_runs_controller_test.go: `.AssertServerResponse(t, response, http.StatusOK)`
$DIR/core/web/pipeline_runs_controller_test.go: `.ParseResponseBody(t, response)`
$DIR/core/web/pipeline_runs_controller_test.go: `.ParseJSONAPIResponse(responseBytes, &parsedResponse)`
$DIR/core/web/pipeline_runs_controller_test.go: `.Get("/v2/jobs/" + fmt.Sprintf("%v", jobID) + "/runs?page=1&size=1")`
$DIR/core/web/pipeline_runs_controller_test.go: `.Sprintf("%v", jobID)`
$DIR/core/web/pipeline_runs_controller_test.go: `.AssertServerResponse(t, response, http.StatusOK)`
$DIR/core/web/pipeline_runs_controller_test.go: `.ParseResponseBody(t, response)`
$DIR/core/web/pipeline_runs_controller_test.go: `.ParseJSONAPIResponse(responseBytes, &parsedResponse)`
$DIR/core/web/pipeline_runs_controller_test.go: `.Get("/v2/jobs/" + fmt.Sprintf("%v", jobID) + "/runs/" + fmt.Sprintf("%v", runIDs[0]))`
$DIR/core/web/pipeline_runs_controller_test.go: `.Sprintf("%v", jobID)`
$DIR/core/web/pipeline_runs_controller_test.go: `.Sprintf("%v", runIDs[0])`
$DIR/core/web/pipeline_runs_controller_test.go: `.AssertServerResponse(t, response, http.StatusOK)`
$DIR/core/web/pipeline_runs_controller_test.go: `.ParseResponseBody(t, response)`
$DIR/core/web/pipeline_runs_controller_test.go: `.ParseJSONAPIResponse(responseBytes, &parsedResponse)`
$DIR/core/web/pipeline_runs_controller_test.go: `.NewApplicationEVMDisabled(t)`
$DIR/core/web/pipeline_runs_controller_test.go: `.NewHTTPClient(nil)`
$DIR/core/web/pipeline_runs_controller_test.go: `.Get("/v2/jobs/1/runs/invalid-run-ID")`
$DIR/core/web/presenters/bridges_test.go: `r.IncomingToken = "cd+OfGXy3UHEDAlD0y27F6/rJE14X1UI"`
$DIR/core/web/presenters/bridges_test.go: `b, err = jsonapi.Marshal(r)`
$DIR/core/web/presenters/bridges_test.go: `expected = `
{
"data": {
"type":"bridges",
"id":"test",
"attributes":{
"name":"test",
"url":"https://bridge.example.com/api",
"confirmations":1,
"incomingToken": "cd+OfGXy3UHEDAlD0y27F6/rJE14X1UI",
"outgoingToken":"vjNL7X8Ea6GFJoa6PBsvK2ECzNK3b8IZ",
"minimumContractPayment":"1",
"createdAt":"2000-01-01T00:00:00Z"
}
}
}
``
$DIR/core/web/presenters/bridges_test.go: `.Date(2000, 1, 1, 0, 0, 0, 0, time.UTC)`
$DIR/core/web/presenters/bridges_test.go: `.Parse("https://bridge.example.com/api")`
$DIR/core/web/presenters/bridges_test.go: `.WebURL(*url)`
$DIR/core/web/presenters/bridges_test.go: `.NewLinkFromJuels(1)`
$DIR/core/web/presenters/bridges_test.go: `.Marshal(r)`
$DIR/core/web/presenters/bridges_test.go: `.Marshal(r)`
$DIR/core/web/presenters/chain_msg_test.go: `.RandomChainID()`
$DIR/core/web/presenters/chain_msg_test.go: `.Marshal(r)`
$DIR/core/web/presenters/chain_msg_test.go: `.Sprintf(`
{
"data":{
"type":"solana_messages",
"id":"%s/%s",
"attributes":{
"ChainID":"%s",
"from":"",
"to":"",
"amount":0
}
}
}
`, chainID, id, chainID)`
$DIR/core/web/presenters/chain_msg_test.go: `.RandomChainID()`
$DIR/core/web/presenters/chain_msg_test.go: `.Marshal(r)`
$DIR/core/web/presenters/chain_msg_test.go: `.Sprintf(`
{
"data":{
"type":"cosmos_messages",
"id":"%s/%s",
"attributes":{
"ChainID":"%s",
"ContractID":"%s",
"State":"",
"TxHash":null
}
}
}
`, chainID, id, chainID, contractID)`
$DIR/core/web/presenters/csa_key_test.go: `key.ID = 1`
$DIR/core/web/presenters/csa_key_test.go: `.New("passphrase", utils.FastScryptParams)`
$DIR/core/web/presenters/csa_key_test.go: `.ToV2()`
$DIR/core/web/presenters/csa_key_test.go: `.Marshal(r)`
$DIR/core/web/presenters/csa_key_test.go: `.Sprintf(`
{
"data":{
"type":"csaKeys",
"id":"%s",
"attributes":{
"publicKey": "csa_%s",
"version": 1
}
}
}`, key.PublicKey.String(), key.PublicKey.String())`
$DIR/core/web/presenters/csa_key_test.go: `.PublicKey.String()`
$DIR/core/web/presenters/csa_key_test.go: `.PublicKey.String()`
$DIR/core/web/presenters/eth_key_test.go: `r = NewETHKeyResource(key, state,
SetETHKeyEthBalance(nil),
SetETHKeyLinkBalance(nil),
SetETHKeyMaxGasPriceWei(nil),
)`
$DIR/core/web/presenters/eth_key_test.go: `b, err = jsonapi.Marshal(r)`
$DIR/core/web/presenters/eth_key_test.go: `expected = fmt.Sprintf(`
{
"data": {
"type":"eTHKeys",
"id":"42/%s",
"attributes":{
"address":"%s",
"evmChainID":"42",
"ethBalance":null,
"linkBalance":null,
"disabled":true,
"createdAt":"2000-01-01T00:00:00Z",
"updatedAt":"2000-01-01T00:00:00Z",
"maxGasPriceWei":null
}
}
}`,
addressStr, addressStr,
)`
$DIR/core/web/presenters/eth_key_test.go: `.Date(2000, 1, 1, 0, 0, 0, 0, time.UTC)`
$DIR/core/web/presenters/eth_key_test.go: `.HexToAddress(addressStr)`
$DIR/core/web/presenters/eth_key_test.go: `.NewEIP55Address(addressStr)`
$DIR/core/web/presenters/eth_key_test.go: `.NewI(42)`
$DIR/core/web/presenters/eth_key_test.go: `.NewEth(1)`
$DIR/core/web/presenters/eth_key_test.go: `.NewLinkFromJuels(1)`
$DIR/core/web/presenters/eth_key_test.go: `.NewI(12345)`
$DIR/core/web/presenters/eth_key_test.go: `.Marshal(r)`
$DIR/core/web/presenters/eth_key_test.go: `.Sprintf(`
{
"data":{
"type":"eTHKeys",
"id":"42/%s",
"attributes":{
"address":"%s",
"evmChainID":"42",
"ethBalance":"1",
"linkBalance":"1",
"disabled":true,
"createdAt":"2000-01-01T00:00:00Z",
"updatedAt":"2000-01-01T00:00:00Z",
"maxGasPriceWei":"12345"
}
}
}
`, addressStr, addressStr)`
$DIR/core/web/presenters/eth_key_test.go: `.Marshal(r)`
$DIR/core/web/presenters/eth_key_test.go: `.Sprintf(`
{
"data": {
"type":"eTHKeys",
"id":"42/%s",
"attributes":{
"address":"%s",
"evmChainID":"42",
"ethBalance":null,
"linkBalance":null,
"disabled":true,
"createdAt":"2000-01-01T00:00:00Z",
"updatedAt":"2000-01-01T00:00:00Z",
"maxGasPriceWei":null
}
}
}`,
addressStr, addressStr,
)`
$DIR/core/web/presenters/eth_tx_test.go: `tx.Sequence = &nonce`
$DIR/core/web/presenters/eth_tx_test.go: `r = NewEthTxResourceFromAttempt(txa)`
$DIR/core/web/presenters/eth_tx_test.go: `b, err = jsonapi.Marshal(r)`
$DIR/core/web/presenters/eth_tx_test.go: `expected = `
{
"data": {
"type": "evm_transactions",
"id": "54321/0x0000000000000000000000000000000000000000000000000000000000010203",
"attributes": {
"state": "confirmed",
"data": "0x7b2264617461223a202269732077696c64696e67206f7574227d",
"from": "0x0000000000000000000000000000000000000001",
"gasLimit": "5000",
"gasPrice": "1000",
"hash": "0x0000000000000000000000000000000000000000000000000000000000010203",
"rawHex": "0xcafe",
"nonce": "100",
"sentAt": "300",
"to": "0x0000000000000000000000000000000000000002",
"value": "0.000000000000000001",
"evmChainID": "54321"
}
}
}
``
$DIR/core/web/presenters/eth_tx_test.go: `.NewInt(54321)`
$DIR/core/web/presenters/eth_tx_test.go: `.HexToAddress("0x1")`
$DIR/core/web/presenters/eth_tx_test.go: `.HexToAddress("0x2")`
$DIR/core/web/presenters/eth_tx_test.go: `.Int(assets.NewEthValue(1))`
$DIR/core/web/presenters/eth_tx_test.go: `.NewEthValue(1)`
$DIR/core/web/presenters/eth_tx_test.go: `.Marshal(r)`
$DIR/core/web/presenters/eth_tx_test.go: `.Nonce(100)`
$DIR/core/web/presenters/eth_tx_test.go: `.BytesToHash([]byte{1, 2, 3})`
$DIR/core/web/presenters/eth_tx_test.go: `.NewWeiI(1000)`
$DIR/core/web/presenters/eth_tx_test.go: `.MustDecode("0xcafe")`
$DIR/core/web/presenters/eth_tx_test.go: `.Marshal(r)`
$DIR/core/web/presenters/evm_forwarder_test.go: `.RandomAddress()`
$DIR/core/web/presenters/evm_forwarder_test.go: `.NewI(4)`
$DIR/core/web/presenters/evm_forwarder_test.go: `.Now()`
$DIR/core/web/presenters/evm_forwarder_test.go: `.Now()`
$DIR/core/web/presenters/evm_forwarder_test.go: `.Add(time.Second)`
$DIR/core/web/presenters/evm_forwarder_test.go: `.Marshal(r)`
$DIR/core/web/presenters/evm_forwarder_test.go: `.MarshalText()`
$DIR/core/web/presenters/evm_forwarder_test.go: `.MarshalText()`
$DIR/core/web/presenters/evm_forwarder_test.go: `.Sprintf(`
{
"data":{
"type":"evm_forwarder",
"id":"%d",
"attributes":{
"address":"%s",
"evmChainId":"%s",
"createdAt":"%s",
"updatedAt":"%s"
}
}
}
`, ID, strings.ToLower(address.String()), chainID.String(), string(createdAtMarshalled), string(updatedAtMarshalled))`
$DIR/core/web/presenters/evm_forwarder_test.go: `.ToLower(address.String())`
$DIR/core/web/presenters/evm_forwarder_test.go: `.String()`
$DIR/core/web/presenters/evm_forwarder_test.go: `.String()`
$DIR/core/web/presenters/job_test.go: `t.Run(tc.name, func(t *testing.T) {
t.Parallel()
r := presenters.NewJobResource(tc.job)
b, err := jsonapi.Marshal(r)
require.NoError(t, err)
assert.JSONEq(t, tc.want, string(b))
})`
$DIR/core/web/presenters/job_test.go: `.Date(2000, 1, 1, 0, 0, 0, 0, time.UTC)`
$DIR/core/web/presenters/job_test.go: `.NewEIP55Address("0x9E40733cC9df84636505f4e6Db28DCa0dC5D1bba")`
$DIR/core/web/presenters/job_test.go: `.NewI(42)`
$DIR/core/web/presenters/job_test.go: `.NewEIP55Address("0xa8037A20989AFcBC51798de9762b351D63ff462e")`
$DIR/core/web/presenters/job_test.go: `.MustSha256HashFromHex(ocrKeyBundleID)`
$DIR/core/web/presenters/job_test.go: `.NewEIP55Address("0x27548a32b9aD5D64c5945EaE9Da5337bc3169D15")`
$DIR/core/web/presenters/job_test.go: `.NewEIP55Address("0x16988483b46e695f6c8D58e6e1461DC703e008e1")`
$DIR/core/web/presenters/job_test.go: `.NewEIP55Address("0x2C409DD6D4eBDdA190B5174Cc19616DD13884262")`
$DIR/core/web/presenters/job_test.go: `.NewEIP55Address("0x92B5e28Ac583812874e4271380c7d070C5FB6E6b")`
$DIR/core/web/presenters/job_test.go: `.NewEIP55Address("0xF6bB415b033D19EFf24A872a4785c6e1C4426103")`
$DIR/core/web/presenters/job_test.go: `.NewEIP55Address("0x0ad9FE7a58216242a8475ca92F222b0640E26B63")`
$DIR/core/web/presenters/job_test.go: `.NewPublicKeyFromHex("0xede539e216e3a50e69d1c68aa9cc472085876c4002f6e1e6afee0ea63b50a78b00")`
$DIR/core/web/presenters/job_test.go: `.Uint32From(specGasLimit)`
$DIR/core/web/presenters/job_test.go: `.MustParse("0EEC7E1D-D0D2-476C-A1A8-72DFB6633F46")`
$DIR/core/web/presenters/job_test.go: `.StringFrom("test")`
$DIR/core/web/presenters/job_test.go: `.Interval(1 * time.Minute)`
$DIR/core/web/presenters/job_test.go: `.Sprintf(`
{
"data":{
"type":"jobs",
"id":"1",
"attributes":{
"name": "test",
"schemaVersion": 1,
"type": "directrequest",
"maxTaskDuration": "1m0s",
"externalJobID":"0eec7e1d-d0d2-476c-a1a8-72dfb6633f46",
"pipelineSpec": {
"id": 1,
"dotDagSource": "ds1 [type=http method=GET url=\"https://pricesource1.com\"",
"jobID": 0
},
"directRequestSpec": {
"contractAddress": "%s",
"minIncomingConfirmations": null,
"minContractPaymentLinkJuels": null,
"requesters": null,
"initiator": "runlog",
"createdAt":"2000-01-01T00:00:00Z",
"updatedAt":"2000-01-01T00:00:00Z",
"evmChainID": "42"
},
"offChainReportingOracleSpec": null,
"offChainReporting2OracleSpec": null,
"fluxMonitorSpec": null,
"gasLimit": 1000,
"forwardingAllowed": false,
"keeperSpec": null,
"cronSpec": null,
"vrfSpec": null,
"webhookSpec": null,
"workflowSpec": null,
"blockhashStoreSpec": null,
"blockHeaderFeederSpec": null,
"bootstrapSpec": null,
"gatewaySpec": null,
"standardCapabilitiesSpec": null,
"errors": []
}
}
}`, contractAddress)`
$DIR/core/web/presenters/job_test.go: `.NewLinkFromJuels(1)`
$DIR/core/web/presenters/job_test.go: `.MustParse("0EEC7E1D-D0D2-476C-A1A8-72DFB6633F46")`
$DIR/core/web/presenters/job_test.go: `.StringFrom("test")`
$DIR/core/web/presenters/job_test.go: `.Interval(1 * time.Minute)`
$DIR/core/web/presenters/job_test.go: `.Sprintf(`
{
"data":{
"type":"jobs",
"id":"1",
"attributes":{
"name": "test",
"schemaVersion": 1,
"type": "fluxmonitor",
"maxTaskDuration": "1m0s",
"externalJobID":"0eec7e1d-d0d2-476c-a1a8-72dfb6633f46",
"pipelineSpec": {
"id": 1,
"dotDagSource": "ds1 [type=http method=GET url=\"https://pricesource1.com\"",
"jobID": 0
},
"fluxMonitorSpec": {
"contractAddress": "%s",
"threshold": 0.5,
"absoluteThreshold": 0,
"idleTimerPeriod": "1m0s",
"idleTimerDisabled": false,
"pollTimerPeriod": "1s",
"pollTimerDisabled": false,
"drumbeatEnabled": false,
"drumbeatRandomDelay": null,
"drumbeatSchedule": null,
"minPayment": "1",
"createdAt":"2000-01-01T00:00:00Z",
"updatedAt":"2000-01-01T00:00:00Z",
"evmChainID": "42"
},
"gasLimit": null,
"forwardingAllowed": false,
"offChainReportingOracleSpec": null,
"offChainReporting2OracleSpec": null,
"directRequestSpec": null,
"keeperSpec": null,
"cronSpec": null,
"vrfSpec": null,
"webhookSpec": null,
"workflowSpec": null,
"blockhashStoreSpec": null,
"blockHeaderFeederSpec": null,
"bootstrapSpec": null,
"gatewaySpec": null,
"standardCapabilitiesSpec": null,
"errors": []
}
}
}`, contractAddress)`
$DIR/core/web/presenters/job_test.go: `.Interval(1 * time.Minute)`
$DIR/core/web/presenters/job_test.go: `.Interval(1 * time.Minute)`
$DIR/core/web/presenters/job_test.go: `.Interval(1 * time.Minute)`
$DIR/core/web/presenters/job_test.go: `.Interval(1 * time.Minute)`
$DIR/core/web/presenters/job_test.go: `.NewInterval(2 * time.Second)`
$DIR/core/web/presenters/job_test.go: `.NewInterval(3 * time.Second)`
$DIR/core/web/presenters/job_test.go: `.NewInterval(444 * time.Millisecond)`
$DIR/core/web/presenters/job_test.go: `.MustParse("0EEC7E1D-D0D2-476C-A1A8-72DFB6633F46")`
$DIR/core/web/presenters/job_test.go: `.StringFrom("test")`
$DIR/core/web/presenters/job_test.go: `.Uint32From(123)`
$DIR/core/web/presenters/job_test.go: `.Interval(1 * time.Minute)`
$DIR/core/web/presenters/job_test.go: `.Sprintf(`
{
"data":{
"type":"jobs",
"id":"1",
"attributes":{
"name": "test",
"schemaVersion": 1,
"type": "offchainreporting",
"maxTaskDuration": "1m0s",
"externalJobID":"0eec7e1d-d0d2-476c-a1a8-72dfb6633f46",
"pipelineSpec": {
"id": 1,
"dotDagSource": "ds1 [type=http method=GET url=\"https://pricesource1.com\"",
"jobID": 0
},
"offChainReportingOracleSpec": {
"contractAddress": "%s",
"p2pv2Bootstrappers": ["xxx:5001"],
"isBootstrapPeer": true,
"keyBundleID": "%s",
"transmitterAddress": "%s",
"observationTimeout": "1m0s",
"blockchainTimeout": "1m0s",
"contractConfigTrackerSubscribeInterval": "1m0s",
"contractConfigTrackerPollInterval": "1m0s",
"contractConfigConfirmations": 1,
"createdAt":"2000-01-01T00:00:00Z",
"updatedAt":"2000-01-01T00:00:00Z",
"evmChainID": "42",
"databaseTimeout": "2s",
"observationGracePeriod": "3s",
"contractTransmitterTransmitTimeout": "444ms"
},
"offChainReporting2OracleSpec": null,
"fluxMonitorSpec": null,
"gasLimit": 123,
"forwardingAllowed": true,
"directRequestSpec": null,
"keeperSpec": null,
"cronSpec": null,
"vrfSpec": null,
"webhookSpec": null,
"workflowSpec": null,
"blockhashStoreSpec": null,
"blockHeaderFeederSpec": null,
"bootstrapSpec": null,
"gatewaySpec": null,
"standardCapabilitiesSpec": null,
"errors": []
}
}
}`, contractAddress, ocrKeyBundleID, transmitterAddress)`
$DIR/core/web/presenters/job_test.go: `.MustParse("0EEC7E1D-D0D2-476C-A1A8-72DFB6633F46")`
$DIR/core/web/presenters/job_test.go: `.StringFrom("test")`
$DIR/core/web/presenters/job_test.go: `.Interval(1 * time.Minute)`
$DIR/core/web/presenters/job_test.go: `.Sprintf(`
{
"data":{
"type":"jobs",
"id":"1",
"attributes":{
"name": "test",
"schemaVersion": 1,
"type": "keeper",
"maxTaskDuration": "1m0s",
"externalJobID":"0eec7e1d-d0d2-476c-a1a8-72dfb6633f46",
"pipelineSpec": {
"id": 1,
"dotDagSource": "",
"jobID": 0
},
"keeperSpec": {
"contractAddress": "%s",
"fromAddress": "%s",
"createdAt":"2000-01-01T00:00:00Z",
"updatedAt":"2000-01-01T00:00:00Z",
"evmChainID": "42"
},
"fluxMonitorSpec": null,
"gasLimit": null,
"forwardingAllowed": false,
"directRequestSpec": null,
"cronSpec": null,
"webhookSpec": null,
"workflowSpec": null,
"offChainReportingOracleSpec": null,
"offChainReporting2OracleSpec": null,
"cronSpec": null,
"vrfSpec": null,
"blockhashStoreSpec": null,
"blockHeaderFeederSpec": null,
"bootstrapSpec": null,
"gatewaySpec": null,
"standardCapabilitiesSpec": null,
"errors": []
}
}
}`, contractAddress, fromAddress)`
$DIR/core/web/presenters/job_test.go: `.MustParse("0EEC7E1D-D0D2-476C-A1A8-72DFB6633F46")`
$DIR/core/web/presenters/job_test.go: `.StringFrom("test")`
$DIR/core/web/presenters/job_test.go: `.Interval(1 * time.Minute)`
$DIR/core/web/presenters/job_test.go: `.Sprintf(`
{
"data":{
"type":"jobs",
"id":"1",
"attributes":{
"name": "test",
"schemaVersion": 1,
"type": "cron",
"maxTaskDuration": "1m0s",
"externalJobID":"0eec7e1d-d0d2-476c-a1a8-72dfb6633f46",
"pipelineSpec": {
"id": 1,
"dotDagSource": "",
"jobID": 0
},
"cronSpec": {
"schedule": "%s",
"createdAt":"2000-01-01T00:00:00Z",
"updatedAt":"2000-01-01T00:00:00Z"
},
"fluxMonitorSpec": null,
"gasLimit": null,
"forwardingAllowed": false,
"directRequestSpec": null,
"keeperSpec": null,
"offChainReportingOracleSpec": null,
"offChainReporting2OracleSpec": null,
"vrfSpec": null,
"webhookSpec": null,
"workflowSpec": null,
"blockhashStoreSpec": null,
"blockHeaderFeederSpec": null,
"bootstrapSpec": null,
"gatewaySpec": null,
"standardCapabilitiesSpec": null,
"errors": []
}
}
}`, cronSchedule)`
$DIR/core/web/presenters/job_test.go: `.MustParse("0eec7e1d-d0d2-476c-a1a8-72dfb6633f46")`
$DIR/core/web/presenters/job_test.go: `.StringFrom("test")`
$DIR/core/web/presenters/job_test.go: `.Interval(1 * time.Minute)`
$DIR/core/web/presenters/job_test.go: `.StringFrom("vrf_test")`
$DIR/core/web/presenters/job_test.go: `.MustParse("0eec7e1d-d0d2-476c-a1a8-72dfb6633f47")`
$DIR/core/web/presenters/job_test.go: `.GWei(200)`
$DIR/core/web/presenters/job_test.go: `.Sprintf(`
{
"data": {
"type": "jobs",
"id": "1",
"attributes": {
"name": "vrf_test",
"type": "vrf",
"schemaVersion": 1,
"maxTaskDuration": "0s",
"externalJobID": "0eec7e1d-d0d2-476c-a1a8-72dfb6633f47",
"directRequestSpec": null,
"fluxMonitorSpec": null,
"gasLimit": null,
"forwardingAllowed": false,
"cronSpec": null,
"offChainReportingOracleSpec": null,
"offChainReporting2OracleSpec": null,
"keeperSpec": null,
"vrfSpec": {
"batchCoordinatorAddress": "%s",
"batchFulfillmentEnabled": true,
"customRevertsPipelineEnabled": true,
"confirmations": 1,
"coordinatorAddress": "%s",
"createdAt": "2000-01-01T00:00:00Z",
"updatedAt": "2000-01-01T00:00:00Z",
"evmChainID": "42",
"fromAddresses": ["%s"],
"pollPeriod": "0s",
"publicKey": "%s",
"requestedConfsDelay": 10,
"requestTimeout": "0s",
"chunkSize": 25,
"batchFulfillmentGasMultiplier": 1,
"backoffInitialDelay": "0s",
"backoffMaxDelay": "0s",
"gasLanePrice": "200 gwei"
},
"webhookSpec": null,
"workflowSpec": null,
"blockhashStoreSpec": null,
"blockHeaderFeederSpec": null,
"bootstrapSpec": null,
"pipelineSpec": {
"id": 1,
"jobID": 0,
"dotDagSource": ""
},
"gatewaySpec": null,
"standardCapabilitiesSpec": null,
"errors": []
}
}
}`, contractAddress, contractAddress, fromAddress, vrfPubKey.String())`
$DIR/core/web/presenters/job_test.go: `.String()`
$DIR/core/web/presenters/job_test.go: `.NewI(4)`
$DIR/core/web/presenters/job_test.go: `.MustParse("0eec7e1d-d0d2-476c-a1a8-72dfb6633f46")`
$DIR/core/web/presenters/job_test.go: `.StringFrom("test")`
$DIR/core/web/presenters/job_test.go: `.NewI(4)`
$DIR/core/web/presenters/job_test.go: `.MustParse("0eec7e1d-d0d2-476c-a1a8-72dfb6633f47")`
$DIR/core/web/presenters/job_test.go: `.StringFrom("blockheaderfeeder")`
$DIR/core/web/presenters/job_test.go: `.MustParse("0eec7e1d-d0d2-476c-a1a8-72dfb6633f46")`
$DIR/core/web/presenters/job_test.go: `.StringFrom("test")`
$DIR/core/web/presenters/job_test.go: `.MustParse("0eec7e1d-d0d2-476c-a1a8-72dfb6633f46")`
$DIR/core/web/presenters/job_test.go: `.StringFrom("gateway test")`
$DIR/core/web/presenters/job_test.go: `.MustParse("0eec7e1d-d0d2-476c-a1a8-72dfb6633f46")`
$DIR/core/web/presenters/job_test.go: `.StringFrom("workflow test")`
$DIR/core/web/presenters/job_test.go: `.MustParse("0eec7e1d-d0d2-476c-a1a8-72dfb6633f46")`
$DIR/core/web/presenters/job_test.go: `.StringFrom("standardcapabilities test")`
$DIR/core/web/presenters/job_test.go: `.MustParse("0EEC7E1D-D0D2-476C-A1A8-72DFB6633F46")`
$DIR/core/web/presenters/job_test.go: `.StringFrom("test")`
$DIR/core/web/presenters/job_test.go: `.Interval(1 * time.Minute)`
$DIR/core/web/presenters/job_test.go: `.Sprintf(`
{
"data":{
"type":"jobs",
"id":"1",
"attributes":{
"name": "test",
"schemaVersion": 1,
"type": "keeper",
"maxTaskDuration": "1m0s",
"externalJobID":"0eec7e1d-d0d2-476c-a1a8-72dfb6633f46",
"pipelineSpec": {
"id": 1,
"dotDagSource": "",
"jobID": 0
},
"keeperSpec": {
"contractAddress": "%s",
"fromAddress": "%s",
"createdAt":"2000-01-01T00:00:00Z",
"updatedAt":"2000-01-01T00:00:00Z",
"evmChainID": "42"
},
"fluxMonitorSpec": null,
"gasLimit": null,
"forwardingAllowed": false,
"directRequestSpec": null,
"cronSpec": null,
"webhookSpec": null,
"workflowSpec": null,
"offChainReportingOracleSpec": null,
"offChainReporting2OracleSpec": null,
"vrfSpec": null,
"blockhashStoreSpec": null,
"blockHeaderFeederSpec": null,
"bootstrapSpec": null,
"gatewaySpec": null,
"standardCapabilitiesSpec": null,
"errors": [{
"id": 200,
"description": "some error",
"occurrences": 1,
"createdAt":"2000-01-01T00:00:00Z",
"updatedAt":"2000-01-01T00:00:00Z"
}]
}
}
}`, contractAddress, fromAddress)`
$DIR/core/web/presenters/job_test.go: `.Run(tc.name, func(t *testing.T) {
t.Parallel()
r := presenters.NewJobResource(tc.job)
b, err := jsonapi.Marshal(r)
require.NoError(t, err)
assert.JSONEq(t, tc.want, string(b))
})`
$DIR/core/web/presenters/job_test.go: `.NewJobResource(tc.job)`
$DIR/core/web/presenters/job_test.go: `.Marshal(r)`
$DIR/core/web/presenters/node_test.go: `r = evmNodeResource`
$DIR/core/web/presenters/node_test.go: `nodeResource = evmNodeResource.NodeResource`
$DIR/core/web/presenters/node_test.go: `r = solanaNodeResource`
$DIR/core/web/presenters/node_test.go: `nodeResource = solanaNodeResource.NodeResource`
$DIR/core/web/presenters/node_test.go: `r = cosmosNodeResource`
$DIR/core/web/presenters/node_test.go: `nodeResource = cosmosNodeResource.NodeResource`
$DIR/core/web/presenters/node_test.go: `r = starknetNodeResource`
$DIR/core/web/presenters/node_test.go: `nodeResource = starknetNodeResource.NodeResource`
$DIR/core/web/presenters/node_test.go: `.Sprintf("%s chain ID", tc)`
$DIR/core/web/presenters/node_test.go: `.Sprintf("%s_node", tc)`
$DIR/core/web/presenters/node_test.go: `.Marshal(r)`
$DIR/core/web/presenters/node_test.go: `.Sprintf(`
{
"data":{
"type":"%s_node",
"id":"%s/%s",
"attributes":{
"chainID":"%s",
"name":"%s",
"config":"%s",
"state":"%s"
}
}
}
`, tc, chainID, nodeName, chainID, nodeName, cfg, state)`
$DIR/core/web/presenters/p2p_key_test.go: `r = NewP2PKeyResource(key)`
$DIR/core/web/presenters/p2p_key_test.go: `b, err = jsonapi.Marshal(r)`
$DIR/core/web/presenters/p2p_key_test.go: `expected = fmt.Sprintf(`
{
"data": {
"type":"encryptedP2PKeys",
"id":"%s",
"attributes":{
"peerId":"%s",
"publicKey": "%s"
}
}
}`, key.ID(), peerIDStr, key.PublicKeyHex())`
$DIR/core/web/presenters/p2p_key_test.go: `.NewP2PKeyV2(t)`
$DIR/core/web/presenters/p2p_key_test.go: `.PeerID()`
$DIR/core/web/presenters/p2p_key_test.go: `.String()`
$DIR/core/web/presenters/p2p_key_test.go: `.Marshal(r)`
$DIR/core/web/presenters/p2p_key_test.go: `.Sprintf(`
{
"data":{
"type":"encryptedP2PKeys",
"id":"%s",
"attributes":{
"peerId":"%s",
"publicKey": "%s"
}
}
}`, key.ID(), peerIDStr, key.PublicKeyHex())`
$DIR/core/web/presenters/p2p_key_test.go: `.ID()`
$DIR/core/web/presenters/p2p_key_test.go: `.PublicKeyHex()`
$DIR/core/web/presenters/p2p_key_test.go: `.Marshal(r)`
$DIR/core/web/presenters/p2p_key_test.go: `.Sprintf(`
{
"data": {
"type":"encryptedP2PKeys",
"id":"%s",
"attributes":{
"peerId":"%s",
"publicKey": "%s"
}
}
}`, key.ID(), peerIDStr, key.PublicKeyHex())`
$DIR/core/web/presenters/p2p_key_test.go: `.ID()`
$DIR/core/web/presenters/p2p_key_test.go: `.PublicKeyHex()`
$DIR/core/web/presenters/user_test.go: `.Date(2000, 1, 1, 0, 0, 0, 0, time.UTC)`
$DIR/core/web/presenters/user_test.go: `.Marshal(r)`
$DIR/core/web/resolver/api_token_test.go: `session.User.HashedPassword = pwd`
$DIR/core/web/resolver/api_token_test.go: `f.Mocks.authProvider.On("FindUser", mock.Anything, session.User.Email).Return(*session.User, nil)`
$DIR/core/web/resolver/api_token_test.go: `f.Mocks.authProvider.On("TestPassword", mock.Anything, session.User.Email, defaultPassword).Return(nil)`
$DIR/core/web/resolver/api_token_test.go: `f.Mocks.authProvider.On("CreateAndSetAuthToken", mock.Anything, session.User).Return(&auth.Token{
Secret: "new-secret",
AccessKey: "new-access-key",
}, nil)`
$DIR/core/web/resolver/api_token_test.go: `f.App.On("AuthenticationProvider").Return(f.Mocks.authProvider)`
$DIR/core/web/resolver/api_token_test.go: `f.Mocks.authProvider.On("FindUser", mock.Anything, session.User.Email).Return(*session.User, nil)`
$DIR/core/web/resolver/api_token_test.go: `f.Mocks.authProvider.On("TestPassword", mock.Anything, session.User.Email, "wrong-password").Return(gError)`
$DIR/core/web/resolver/api_token_test.go: `f.App.On("AuthenticationProvider").Return(f.Mocks.authProvider)`
$DIR/core/web/resolver/api_token_test.go: `session.User.HashedPassword = pwd`
$DIR/core/web/resolver/api_token_test.go: `f.Mocks.authProvider.On("FindUser", mock.Anything, session.User.Email).Return(*session.User, gError)`
$DIR/core/web/resolver/api_token_test.go: `f.App.On("AuthenticationProvider").Return(f.Mocks.authProvider)`
$DIR/core/web/resolver/api_token_test.go: `session.User.HashedPassword = pwd`
$DIR/core/web/resolver/api_token_test.go: `f.Mocks.authProvider.On("FindUser", mock.Anything, session.User.Email).Return(*session.User, nil)`
$DIR/core/web/resolver/api_token_test.go: `f.Mocks.authProvider.On("TestPassword", mock.Anything, session.User.Email, defaultPassword).Return(nil)`
$DIR/core/web/resolver/api_token_test.go: `f.Mocks.authProvider.On("CreateAndSetAuthToken", mock.Anything, session.User).Return(nil, gError)`
$DIR/core/web/resolver/api_token_test.go: `f.App.On("AuthenticationProvider").Return(f.Mocks.authProvider)`
$DIR/core/web/resolver/api_token_test.go: `session.User.HashedPassword = pwd`
$DIR/core/web/resolver/api_token_test.go: `err = session.User.TokenKey.UnmarshalText([]byte("new-access-key"))`
$DIR/core/web/resolver/api_token_test.go: `f.Mocks.authProvider.On("FindUser", mock.Anything, session.User.Email).Return(*session.User, nil)`
$DIR/core/web/resolver/api_token_test.go: `f.Mocks.authProvider.On("TestPassword", mock.Anything, session.User.Email, defaultPassword).Return(nil)`
$DIR/core/web/resolver/api_token_test.go: `f.Mocks.authProvider.On("DeleteAuthToken", mock.Anything, session.User).Return(nil)`
$DIR/core/web/resolver/api_token_test.go: `f.App.On("AuthenticationProvider").Return(f.Mocks.authProvider)`
$DIR/core/web/resolver/api_token_test.go: `f.Mocks.authProvider.On("FindUser", mock.Anything, session.User.Email).Return(*session.User, nil)`
$DIR/core/web/resolver/api_token_test.go: `f.Mocks.authProvider.On("TestPassword", mock.Anything, session.User.Email, "wrong-password").Return(gError)`
$DIR/core/web/resolver/api_token_test.go: `f.App.On("AuthenticationProvider").Return(f.Mocks.authProvider)`
$DIR/core/web/resolver/api_token_test.go: `session.User.HashedPassword = pwd`
$DIR/core/web/resolver/api_token_test.go: `f.Mocks.authProvider.On("FindUser", mock.Anything, session.User.Email).Return(*session.User, gError)`
$DIR/core/web/resolver/api_token_test.go: `f.App.On("AuthenticationProvider").Return(f.Mocks.authProvider)`
$DIR/core/web/resolver/api_token_test.go: `session.User.HashedPassword = pwd`
$DIR/core/web/resolver/api_token_test.go: `f.Mocks.authProvider.On("FindUser", mock.Anything, session.User.Email).Return(*session.User, nil)`
$DIR/core/web/resolver/api_token_test.go: `f.Mocks.authProvider.On("TestPassword", mock.Anything, session.User.Email, defaultPassword).Return(nil)`
$DIR/core/web/resolver/api_token_test.go: `f.Mocks.authProvider.On("DeleteAuthToken", mock.Anything, session.User).Return(gError)`
$DIR/core/web/resolver/api_token_test.go: `f.App.On("AuthenticationProvider").Return(f.Mocks.authProvider)`
$DIR/core/web/resolver/api_token_test.go: `.New("error")`
$DIR/core/web/resolver/api_token_test.go: `.GetGQLAuthenticatedSession(ctx)`
$DIR/core/web/resolver/api_token_test.go: `.HashPassword(defaultPassword)`
$DIR/core/web/resolver/api_token_test.go: `.Mocks.authProvider.On("FindUser", mock.Anything, session.User.Email)`
$DIR/core/web/resolver/api_token_test.go: `.Return(*session.User, nil)`
$DIR/core/web/resolver/api_token_test.go: `.Mocks.authProvider.On("TestPassword", mock.Anything, session.User.Email, defaultPassword)`
$DIR/core/web/resolver/api_token_test.go: `.Return(nil)`
$DIR/core/web/resolver/api_token_test.go: `.Mocks.authProvider.On("CreateAndSetAuthToken", mock.Anything, session.User)`
$DIR/core/web/resolver/api_token_test.go: `.Return(&auth.Token{
Secret: "new-secret",
AccessKey: "new-access-key",
}, nil)`
$DIR/core/web/resolver/api_token_test.go: `.App.On("AuthenticationProvider")`
$DIR/core/web/resolver/api_token_test.go: `.Return(f.Mocks.authProvider)`
$DIR/core/web/resolver/api_token_test.go: `.GetGQLAuthenticatedSession(ctx)`
$DIR/core/web/resolver/api_token_test.go: `.Mocks.authProvider.On("FindUser", mock.Anything, session.User.Email)`
$DIR/core/web/resolver/api_token_test.go: `.Return(*session.User, nil)`
$DIR/core/web/resolver/api_token_test.go: `.Mocks.authProvider.On("TestPassword", mock.Anything, session.User.Email, "wrong-password")`
$DIR/core/web/resolver/api_token_test.go: `.Return(gError)`
$DIR/core/web/resolver/api_token_test.go: `.App.On("AuthenticationProvider")`
$DIR/core/web/resolver/api_token_test.go: `.Return(f.Mocks.authProvider)`
$DIR/core/web/resolver/api_token_test.go: `.GetGQLAuthenticatedSession(ctx)`
$DIR/core/web/resolver/api_token_test.go: `.HashPassword(defaultPassword)`
$DIR/core/web/resolver/api_token_test.go: `.Mocks.authProvider.On("FindUser", mock.Anything, session.User.Email)`
$DIR/core/web/resolver/api_token_test.go: `.Return(*session.User, gError)`
$DIR/core/web/resolver/api_token_test.go: `.App.On("AuthenticationProvider")`
$DIR/core/web/resolver/api_token_test.go: `.Return(f.Mocks.authProvider)`
$DIR/core/web/resolver/api_token_test.go: `.GetGQLAuthenticatedSession(ctx)`
$DIR/core/web/resolver/api_token_test.go: `.HashPassword(defaultPassword)`
$DIR/core/web/resolver/api_token_test.go: `.Mocks.authProvider.On("FindUser", mock.Anything, session.User.Email)`
$DIR/core/web/resolver/api_token_test.go: `.Return(*session.User, nil)`
$DIR/core/web/resolver/api_token_test.go: `.Mocks.authProvider.On("TestPassword", mock.Anything, session.User.Email, defaultPassword)`
$DIR/core/web/resolver/api_token_test.go: `.Return(nil)`
$DIR/core/web/resolver/api_token_test.go: `.Mocks.authProvider.On("CreateAndSetAuthToken", mock.Anything, session.User)`
$DIR/core/web/resolver/api_token_test.go: `.Return(nil, gError)`
$DIR/core/web/resolver/api_token_test.go: `.App.On("AuthenticationProvider")`
$DIR/core/web/resolver/api_token_test.go: `.Return(f.Mocks.authProvider)`
$DIR/core/web/resolver/api_token_test.go: `.New("error")`
$DIR/core/web/resolver/api_token_test.go: `.GetGQLAuthenticatedSession(ctx)`
$DIR/core/web/resolver/api_token_test.go: `.HashPassword(defaultPassword)`
$DIR/core/web/resolver/api_token_test.go: `.User.TokenKey.UnmarshalText([]byte("new-access-key"))`
$DIR/core/web/resolver/api_token_test.go: `.Mocks.authProvider.On("FindUser", mock.Anything, session.User.Email)`
$DIR/core/web/resolver/api_token_test.go: `.Return(*session.User, nil)`
$DIR/core/web/resolver/api_token_test.go: `.Mocks.authProvider.On("TestPassword", mock.Anything, session.User.Email, defaultPassword)`
$DIR/core/web/resolver/api_token_test.go: `.Return(nil)`
$DIR/core/web/resolver/api_token_test.go: `.Mocks.authProvider.On("DeleteAuthToken", mock.Anything, session.User)`
$DIR/core/web/resolver/api_token_test.go: `.Return(nil)`
$DIR/core/web/resolver/api_token_test.go: `.App.On("AuthenticationProvider")`
$DIR/core/web/resolver/api_token_test.go: `.Return(f.Mocks.authProvider)`
$DIR/core/web/resolver/api_token_test.go: `.GetGQLAuthenticatedSession(ctx)`
$DIR/core/web/resolver/api_token_test.go: `.Mocks.authProvider.On("FindUser", mock.Anything, session.User.Email)`
$DIR/core/web/resolver/api_token_test.go: `.Return(*session.User, nil)`
$DIR/core/web/resolver/api_token_test.go: `.Mocks.authProvider.On("TestPassword", mock.Anything, session.User.Email, "wrong-password")`
$DIR/core/web/resolver/api_token_test.go: `.Return(gError)`
$DIR/core/web/resolver/api_token_test.go: `.App.On("AuthenticationProvider")`
$DIR/core/web/resolver/api_token_test.go: `.Return(f.Mocks.authProvider)`
$DIR/core/web/resolver/api_token_test.go: `.GetGQLAuthenticatedSession(ctx)`
$DIR/core/web/resolver/api_token_test.go: `.HashPassword(defaultPassword)`
$DIR/core/web/resolver/api_token_test.go: `.Mocks.authProvider.On("FindUser", mock.Anything, session.User.Email)`
$DIR/core/web/resolver/api_token_test.go: `.Return(*session.User, gError)`
$DIR/core/web/resolver/api_token_test.go: `.App.On("AuthenticationProvider")`
$DIR/core/web/resolver/api_token_test.go: `.Return(f.Mocks.authProvider)`
$DIR/core/web/resolver/api_token_test.go: `.GetGQLAuthenticatedSession(ctx)`
$DIR/core/web/resolver/api_token_test.go: `.HashPassword(defaultPassword)`
$DIR/core/web/resolver/api_token_test.go: `.Mocks.authProvider.On("FindUser", mock.Anything, session.User.Email)`
$DIR/core/web/resolver/api_token_test.go: `.Return(*session.User, nil)`
$DIR/core/web/resolver/api_token_test.go: `.Mocks.authProvider.On("TestPassword", mock.Anything, session.User.Email, defaultPassword)`
$DIR/core/web/resolver/api_token_test.go: `.Return(nil)`
$DIR/core/web/resolver/api_token_test.go: `.Mocks.authProvider.On("DeleteAuthToken", mock.Anything, session.User)`
$DIR/core/web/resolver/api_token_test.go: `.Return(gError)`
$DIR/core/web/resolver/api_token_test.go: `.App.On("AuthenticationProvider")`
$DIR/core/web/resolver/api_token_test.go: `.Return(f.Mocks.authProvider)`
$DIR/core/web/resolver/bridge_test.go: `f.App.On("BridgeORM").Return(f.Mocks.bridgeORM)`
$DIR/core/web/resolver/bridge_test.go: `f.Mocks.bridgeORM.On("BridgeTypes", mock.Anything, PageDefaultOffset, PageDefaultLimit).Return([]bridges.BridgeType{
{
Name: "bridge1",
URL: models.WebURL(*bridgeURL),
Confirmations: uint32(1),
OutgoingToken: "outgoingToken",
MinimumContractPayment: assets.NewLinkFromJuels(1),
CreatedAt: f.Timestamp(),
},
}, 1, nil)`
$DIR/core/web/resolver/bridge_test.go: `f.App.On("BridgeORM").Return(f.Mocks.bridgeORM)`
$DIR/core/web/resolver/bridge_test.go: `f.Mocks.bridgeORM.On("FindBridge", mock.Anything, name).Return(bridges.BridgeType{
Name: name,
URL: models.WebURL(*bridgeURL),
Confirmations: uint32(1),
OutgoingToken: "outgoingToken",
MinimumContractPayment: assets.NewLinkFromJuels(1),
CreatedAt: f.Timestamp(),
}, nil)`
$DIR/core/web/resolver/bridge_test.go: `f.App.On("BridgeORM").Return(f.Mocks.bridgeORM)`
$DIR/core/web/resolver/bridge_test.go: `f.Mocks.bridgeORM.On("FindBridge", mock.Anything, name).Return(bridges.BridgeType{}, sql.ErrNoRows)`
$DIR/core/web/resolver/bridge_test.go: `f.App.On("BridgeORM").Return(f.Mocks.bridgeORM)`
$DIR/core/web/resolver/bridge_test.go: `f.Mocks.bridgeORM.On("FindBridge", mock.Anything, name).Return(bridges.BridgeType{}, sql.ErrNoRows)`
$DIR/core/web/resolver/bridge_test.go: `f.Mocks.bridgeORM.On("CreateBridgeType", mock.Anything, mock.IsType(&bridges.BridgeType{})).
Run(func(args mock.Arguments) {
arg := args.Get(1).(*bridges.BridgeType)
*arg = bridges.BridgeType{
Name: name,
URL: models.WebURL(*bridgeURL),
Confirmations: uint32(1),
OutgoingToken: "outgoingToken",
MinimumContractPayment: assets.NewLinkFromJuels(1),
CreatedAt: f.Timestamp(),
}
}).
Return(nil)`
$DIR/core/web/resolver/bridge_test.go: `*arg = bridges.BridgeType{
Name: name,
URL: models.WebURL(*bridgeURL),
Confirmations: uint32(1),
OutgoingToken: "outgoingToken",
MinimumContractPayment: assets.NewLinkFromJuels(1),
CreatedAt: f.Timestamp(),
}`
$DIR/core/web/resolver/bridge_test.go: `f.App.On("BridgeORM").Return(f.Mocks.bridgeORM)`
$DIR/core/web/resolver/bridge_test.go: `f.Mocks.bridgeORM.On("FindBridge", mock.Anything, name).Return(bridge, nil)`
$DIR/core/web/resolver/bridge_test.go: `f.Mocks.bridgeORM.On("UpdateBridgeType", mock.Anything, mock.IsType(&bridges.BridgeType{}), btr).
Run(func(args mock.Arguments) {
arg := args.Get(1).(*bridges.BridgeType)
*arg = bridges.BridgeType{
Name: "bridge-updated",
URL: models.WebURL(*newBridgeURL),
Confirmations: 2,
OutgoingToken: "outgoingToken",
MinimumContractPayment: assets.NewLinkFromJuels(2),
CreatedAt: f.Timestamp(),
}
}).
Return(nil)`
$DIR/core/web/resolver/bridge_test.go: `*arg = bridges.BridgeType{
Name: "bridge-updated",
URL: models.WebURL(*newBridgeURL),
Confirmations: 2,
OutgoingToken: "outgoingToken",
MinimumContractPayment: assets.NewLinkFromJuels(2),
CreatedAt: f.Timestamp(),
}`
$DIR/core/web/resolver/bridge_test.go: `f.App.On("BridgeORM").Return(f.Mocks.bridgeORM)`
$DIR/core/web/resolver/bridge_test.go: `f.Mocks.bridgeORM.On("FindBridge", mock.Anything, name).Return(bridges.BridgeType{}, sql.ErrNoRows)`
$DIR/core/web/resolver/bridge_test.go: `err = json.Unmarshal([]byte(`"1"`), &link)`
$DIR/core/web/resolver/bridge_test.go: `f.Mocks.bridgeORM.On("FindBridge", mock.Anything, name).Return(bridge, nil)`
$DIR/core/web/resolver/bridge_test.go: `f.Mocks.bridgeORM.On("DeleteBridgeType", mock.Anything, &bridge).Return(nil)`
$DIR/core/web/resolver/bridge_test.go: `f.Mocks.jobORM.On("FindJobIDsWithBridge", mock.Anything, name.String()).Return([]int32{}, nil)`
$DIR/core/web/resolver/bridge_test.go: `f.App.On("JobORM").Return(f.Mocks.jobORM)`
$DIR/core/web/resolver/bridge_test.go: `f.App.On("BridgeORM").Return(f.Mocks.bridgeORM)`
$DIR/core/web/resolver/bridge_test.go: `f.Mocks.bridgeORM.On("FindBridge", mock.Anything, name).Return(bridges.BridgeType{}, sql.ErrNoRows)`
$DIR/core/web/resolver/bridge_test.go: `f.App.On("BridgeORM").Return(f.Mocks.bridgeORM)`
$DIR/core/web/resolver/bridge_test.go: `f.Mocks.bridgeORM.On("FindBridge", mock.Anything, name).Return(bridges.BridgeType{}, nil)`
$DIR/core/web/resolver/bridge_test.go: `f.Mocks.jobORM.On("FindJobIDsWithBridge", mock.Anything, name.String()).Return([]int32{1}, nil)`
$DIR/core/web/resolver/bridge_test.go: `f.App.On("BridgeORM").Return(f.Mocks.bridgeORM)`
$DIR/core/web/resolver/bridge_test.go: `f.App.On("JobORM").Return(f.Mocks.jobORM)`
$DIR/core/web/resolver/bridge_test.go: `.Parse("https://external.adapter")`
$DIR/core/web/resolver/bridge_test.go: `.App.On("BridgeORM")`
$DIR/core/web/resolver/bridge_test.go: `.Return(f.Mocks.bridgeORM)`
$DIR/core/web/resolver/bridge_test.go: `.Mocks.bridgeORM.On("BridgeTypes", mock.Anything, PageDefaultOffset, PageDefaultLimit)`
$DIR/core/web/resolver/bridge_test.go: `.Return([]bridges.BridgeType{
{
Name: "bridge1",
URL: models.WebURL(*bridgeURL),
Confirmations: uint32(1),
OutgoingToken: "outgoingToken",
MinimumContractPayment: assets.NewLinkFromJuels(1),
CreatedAt: f.Timestamp(),
},
}, 1, nil)`
$DIR/core/web/resolver/bridge_test.go: `.WebURL(*bridgeURL)`
$DIR/core/web/resolver/bridge_test.go: `.NewLinkFromJuels(1)`
$DIR/core/web/resolver/bridge_test.go: `.Timestamp()`
$DIR/core/web/resolver/bridge_test.go: `.BridgeName("bridge1")`
$DIR/core/web/resolver/bridge_test.go: `.Parse("https://external.adapter")`
$DIR/core/web/resolver/bridge_test.go: `.App.On("BridgeORM")`
$DIR/core/web/resolver/bridge_test.go: `.Return(f.Mocks.bridgeORM)`
$DIR/core/web/resolver/bridge_test.go: `.Mocks.bridgeORM.On("FindBridge", mock.Anything, name)`
$DIR/core/web/resolver/bridge_test.go: `.Return(bridges.BridgeType{
Name: name,
URL: models.WebURL(*bridgeURL),
Confirmations: uint32(1),
OutgoingToken: "outgoingToken",
MinimumContractPayment: assets.NewLinkFromJuels(1),
CreatedAt: f.Timestamp(),
}, nil)`
$DIR/core/web/resolver/bridge_test.go: `.WebURL(*bridgeURL)`
$DIR/core/web/resolver/bridge_test.go: `.NewLinkFromJuels(1)`
$DIR/core/web/resolver/bridge_test.go: `.Timestamp()`
$DIR/core/web/resolver/bridge_test.go: `.App.On("BridgeORM")`
$DIR/core/web/resolver/bridge_test.go: `.Return(f.Mocks.bridgeORM)`
$DIR/core/web/resolver/bridge_test.go: `.Mocks.bridgeORM.On("FindBridge", mock.Anything, name)`
$DIR/core/web/resolver/bridge_test.go: `.Return(bridges.BridgeType{}, sql.ErrNoRows)`
$DIR/core/web/resolver/bridge_test.go: `.BridgeName("bridge1")`
$DIR/core/web/resolver/bridge_test.go: `.Parse("https://external.adapter")`
$DIR/core/web/resolver/bridge_test.go: `.App.On("BridgeORM")`
$DIR/core/web/resolver/bridge_test.go: `.Return(f.Mocks.bridgeORM)`
$DIR/core/web/resolver/bridge_test.go: `.Mocks.bridgeORM.On("FindBridge", mock.Anything, name)`
$DIR/core/web/resolver/bridge_test.go: `.Return(bridges.BridgeType{}, sql.ErrNoRows)`
$DIR/core/web/resolver/bridge_test.go: `.Mocks.bridgeORM.On("CreateBridgeType", mock.Anything, mock.IsType(&bridges.BridgeType{}))`
$DIR/core/web/resolver/bridge_test.go: `.IsType(&bridges.BridgeType{})`
$DIR/core/web/resolver/bridge_test.go: `.
Run(func(args mock.Arguments) {
arg := args.Get(1).(*bridges.BridgeType)
*arg = bridges.BridgeType{
Name: name,
URL: models.WebURL(*bridgeURL),
Confirmations: uint32(1),
OutgoingToken: "outgoingToken",
MinimumContractPayment: assets.NewLinkFromJuels(1),
CreatedAt: f.Timestamp(),
}
})`
$DIR/core/web/resolver/bridge_test.go: `.Get(1)`
$DIR/core/web/resolver/bridge_test.go: `.WebURL(*bridgeURL)`
$DIR/core/web/resolver/bridge_test.go: `.NewLinkFromJuels(1)`
$DIR/core/web/resolver/bridge_test.go: `.Timestamp()`
$DIR/core/web/resolver/bridge_test.go: `.
Return(nil)`
$DIR/core/web/resolver/bridge_test.go: `.BridgeName("bridge1")`
$DIR/core/web/resolver/bridge_test.go: `.Parse("https://external.adapter")`
$DIR/core/web/resolver/bridge_test.go: `.Parse("https://external.adapter.new")`
$DIR/core/web/resolver/bridge_test.go: `.WebURL(*bridgeURL)`
$DIR/core/web/resolver/bridge_test.go: `.NewLinkFromJuels(1)`
$DIR/core/web/resolver/bridge_test.go: `.Timestamp()`
$DIR/core/web/resolver/bridge_test.go: `.App.On("BridgeORM")`
$DIR/core/web/resolver/bridge_test.go: `.Return(f.Mocks.bridgeORM)`
$DIR/core/web/resolver/bridge_test.go: `.Mocks.bridgeORM.On("FindBridge", mock.Anything, name)`
$DIR/core/web/resolver/bridge_test.go: `.Return(bridge, nil)`
$DIR/core/web/resolver/bridge_test.go: `.BridgeName("bridge-updated")`
$DIR/core/web/resolver/bridge_test.go: `.WebURL(*newBridgeURL)`
$DIR/core/web/resolver/bridge_test.go: `.NewLinkFromJuels(2)`
$DIR/core/web/resolver/bridge_test.go: `.Mocks.bridgeORM.On("UpdateBridgeType", mock.Anything, mock.IsType(&bridges.BridgeType{}), btr)`
$DIR/core/web/resolver/bridge_test.go: `.IsType(&bridges.BridgeType{})`
$DIR/core/web/resolver/bridge_test.go: `.
Run(func(args mock.Arguments) {
arg := args.Get(1).(*bridges.BridgeType)
*arg = bridges.BridgeType{
Name: "bridge-updated",
URL: models.WebURL(*newBridgeURL),
Confirmations: 2,
OutgoingToken: "outgoingToken",
MinimumContractPayment: assets.NewLinkFromJuels(2),
CreatedAt: f.Timestamp(),
}
})`
$DIR/core/web/resolver/bridge_test.go: `.Get(1)`
$DIR/core/web/resolver/bridge_test.go: `.WebURL(*newBridgeURL)`
$DIR/core/web/resolver/bridge_test.go: `.NewLinkFromJuels(2)`
$DIR/core/web/resolver/bridge_test.go: `.Timestamp()`
$DIR/core/web/resolver/bridge_test.go: `.
Return(nil)`
$DIR/core/web/resolver/bridge_test.go: `.App.On("BridgeORM")`
$DIR/core/web/resolver/bridge_test.go: `.Return(f.Mocks.bridgeORM)`
$DIR/core/web/resolver/bridge_test.go: `.Mocks.bridgeORM.On("FindBridge", mock.Anything, name)`
$DIR/core/web/resolver/bridge_test.go: `.Return(bridges.BridgeType{}, sql.ErrNoRows)`
$DIR/core/web/resolver/bridge_test.go: `.BridgeName("bridge1")`
$DIR/core/web/resolver/bridge_test.go: `.Parse("https://test-url.com")`
$DIR/core/web/resolver/bridge_test.go: `.Unmarshal([]byte(`"1"`), &link)`
$DIR/core/web/resolver/bridge_test.go: `.String()`
$DIR/core/web/resolver/bridge_test.go: `.WebURL(*bridgeURL)`
$DIR/core/web/resolver/bridge_test.go: `.Mocks.bridgeORM.On("FindBridge", mock.Anything, name)`
$DIR/core/web/resolver/bridge_test.go: `.Return(bridge, nil)`
$DIR/core/web/resolver/bridge_test.go: `.Mocks.bridgeORM.On("DeleteBridgeType", mock.Anything, &bridge)`
$DIR/core/web/resolver/bridge_test.go: `.Return(nil)`
$DIR/core/web/resolver/bridge_test.go: `.Mocks.jobORM.On("FindJobIDsWithBridge", mock.Anything, name.String())`
$DIR/core/web/resolver/bridge_test.go: `.String()`
$DIR/core/web/resolver/bridge_test.go: `.Return([]int32{}, nil)`
$DIR/core/web/resolver/bridge_test.go: `.App.On("JobORM")`
$DIR/core/web/resolver/bridge_test.go: `.Return(f.Mocks.jobORM)`
$DIR/core/web/resolver/bridge_test.go: `.App.On("BridgeORM")`
$DIR/core/web/resolver/bridge_test.go: `.Return(f.Mocks.bridgeORM)`
$DIR/core/web/resolver/bridge_test.go: `.Mocks.bridgeORM.On("FindBridge", mock.Anything, name)`
$DIR/core/web/resolver/bridge_test.go: `.Return(bridges.BridgeType{}, sql.ErrNoRows)`
$DIR/core/web/resolver/bridge_test.go: `.App.On("BridgeORM")`
$DIR/core/web/resolver/bridge_test.go: `.Return(f.Mocks.bridgeORM)`
$DIR/core/web/resolver/bridge_test.go: `.Mocks.bridgeORM.On("FindBridge", mock.Anything, name)`
$DIR/core/web/resolver/bridge_test.go: `.Return(bridges.BridgeType{}, nil)`
$DIR/core/web/resolver/bridge_test.go: `.Mocks.jobORM.On("FindJobIDsWithBridge", mock.Anything, name.String())`
$DIR/core/web/resolver/bridge_test.go: `.String()`
$DIR/core/web/resolver/bridge_test.go: `.Return([]int32{1}, nil)`
$DIR/core/web/resolver/bridge_test.go: `.App.On("BridgeORM")`
$DIR/core/web/resolver/bridge_test.go: `.Return(f.Mocks.bridgeORM)`
$DIR/core/web/resolver/bridge_test.go: `.App.On("JobORM")`
$DIR/core/web/resolver/bridge_test.go: `.Return(f.Mocks.jobORM)`
$DIR/core/web/resolver/chain_test.go: `f.App.On("GetRelayers").Return(&chainlinkmocks.FakeRelayerChainInteroperators{Relayers: []loop.Relayer{
testutils.MockRelayer{ChainStatus: commontypes.ChainStatus{
ID: chainID.String(),
Enabled: *chain.Enabled,
Config: chainConfToml,
}},
}})`
$DIR/core/web/resolver/chain_test.go: `f.App.On("GetRelayers").Return(&chainlinkmocks.FakeRelayerChainInteroperators{Relayers: []loop.Relayer{}})`
$DIR/core/web/resolver/chain_test.go: `f.App.On("EVMORM").Return(f.Mocks.evmORM)`
$DIR/core/web/resolver/chain_test.go: `f.Mocks.evmORM.PutChains(evmtoml.EVMConfig{
ChainID: &chainID,
Chain: chain,
})`
$DIR/core/web/resolver/chain_test.go: `f.App.On("EVMORM").Return(f.Mocks.evmORM)`
$DIR/core/web/resolver/chain_test.go: `.NewI(1)`
$DIR/core/web/resolver/chain_test.go: `.Unmarshal([]byte(configTOML), &chain)`
$DIR/core/web/resolver/chain_test.go: `.Marshal(configTOML)`
$DIR/core/web/resolver/chain_test.go: `.TOMLString()`
$DIR/core/web/resolver/chain_test.go: `.App.On("GetRelayers")`
$DIR/core/web/resolver/chain_test.go: `.Return(&chainlinkmocks.FakeRelayerChainInteroperators{Relayers: []loop.Relayer{
testutils.MockRelayer{ChainStatus: commontypes.ChainStatus{
ID: chainID.String(),
Enabled: *chain.Enabled,
Config: chainConfToml,
}},
}})`
$DIR/core/web/resolver/chain_test.go: `.String()`
$DIR/core/web/resolver/chain_test.go: `.Sprintf(`
{
"chains": {
"results": [{
"id": "1",
"enabled": true,
"config": %s
}],
"metadata": {
"total": 1
}
}
}`, configTOMLEscaped)`
$DIR/core/web/resolver/chain_test.go: `.App.On("GetRelayers")`
$DIR/core/web/resolver/chain_test.go: `.Return(&chainlinkmocks.FakeRelayerChainInteroperators{Relayers: []loop.Relayer{}})`
$DIR/core/web/resolver/chain_test.go: `.NewI(1)`
$DIR/core/web/resolver/chain_test.go: `.Unmarshal([]byte(configTOML), &chain)`
$DIR/core/web/resolver/chain_test.go: `.Marshal(configTOML)`
$DIR/core/web/resolver/chain_test.go: `.App.On("EVMORM")`
$DIR/core/web/resolver/chain_test.go: `.Return(f.Mocks.evmORM)`
$DIR/core/web/resolver/chain_test.go: `.Mocks.evmORM.PutChains(evmtoml.EVMConfig{
ChainID: &chainID,
Chain: chain,
})`
$DIR/core/web/resolver/chain_test.go: `.Sprintf(`
{
"chain": {
"id": "1",
"enabled": true,
"config": %s
}
}`, configTOMLEscaped)`
$DIR/core/web/resolver/chain_test.go: `.App.On("EVMORM")`
$DIR/core/web/resolver/chain_test.go: `.Return(f.Mocks.evmORM)`
$DIR/core/web/resolver/config_test.go: `f.App.On("GetConfig").Return(cfg)`
$DIR/core/web/resolver/config_test.go: `f.App.On("GetConfig").Return(cfg)`
$DIR/core/web/resolver/config_test.go: `f.App.On("GetConfig").Return(cfg)`
$DIR/core/web/resolver/config_test.go: `.New()`
$DIR/core/web/resolver/config_test.go: `.App.On("GetConfig")`
$DIR/core/web/resolver/config_test.go: `.Return(cfg)`
$DIR/core/web/resolver/config_test.go: `.Sprintf(`{"configv2":{"user":"","effective":%s}}`, mustJSONMarshal(t, configEmptyEffective))`
$DIR/core/web/resolver/config_test.go: `.New()`
$DIR/core/web/resolver/config_test.go: `.App.On("GetConfig")`
$DIR/core/web/resolver/config_test.go: `.Return(cfg)`
$DIR/core/web/resolver/config_test.go: `.Sprintf(`{"configv2":{"user":%s,"effective":%s}}`, mustJSONMarshal(t, configFull), mustJSONMarshal(t, configFull))`
$DIR/core/web/resolver/config_test.go: `.New()`
$DIR/core/web/resolver/config_test.go: `.App.On("GetConfig")`
$DIR/core/web/resolver/config_test.go: `.Return(cfg)`
$DIR/core/web/resolver/config_test.go: `.Sprintf(`{"configv2":{"user":%s,"effective":%s}}`, mustJSONMarshal(t, configMulti), mustJSONMarshal(t, configMultiEffective))`
$DIR/core/web/resolver/csa_keys_test.go: `fakeKeys = append(fakeKeys, k)`
$DIR/core/web/resolver/csa_keys_test.go: `expectedKeys = append(expectedKeys, expectedKey{
ID: k.ID(),
Version: k.Version,
PubKey: fmt.Sprintf("csa_%s", k.PublicKeyString()),
})`
$DIR/core/web/resolver/csa_keys_test.go: `f.Mocks.csa.On("GetAll").Return(fakeKeys, nil)`
$DIR/core/web/resolver/csa_keys_test.go: `f.Mocks.keystore.On("CSA").Return(f.Mocks.csa)`
$DIR/core/web/resolver/csa_keys_test.go: `f.App.On("GetKeyStore").Return(f.Mocks.keystore)`
$DIR/core/web/resolver/csa_keys_test.go: `f.Mocks.csa.On("Create", mock.Anything).Return(fakeKey, nil)`
$DIR/core/web/resolver/csa_keys_test.go: `f.Mocks.keystore.On("CSA").Return(f.Mocks.csa)`
$DIR/core/web/resolver/csa_keys_test.go: `f.App.On("GetKeyStore").Return(f.Mocks.keystore)`
$DIR/core/web/resolver/csa_keys_test.go: `f.Mocks.csa.On("Create", mock.Anything).Return(csakey.KeyV2{}, keystore.ErrCSAKeyExists)`
$DIR/core/web/resolver/csa_keys_test.go: `f.Mocks.keystore.On("CSA").Return(f.Mocks.csa)`
$DIR/core/web/resolver/csa_keys_test.go: `f.App.On("GetKeyStore").Return(f.Mocks.keystore)`
$DIR/core/web/resolver/csa_keys_test.go: `f.App.On("GetKeyStore").Return(f.Mocks.keystore)`
$DIR/core/web/resolver/csa_keys_test.go: `f.Mocks.keystore.On("CSA").Return(f.Mocks.csa)`
$DIR/core/web/resolver/csa_keys_test.go: `f.Mocks.csa.On("Delete", mock.Anything, fakeKey.ID()).Return(fakeKey, nil)`
$DIR/core/web/resolver/csa_keys_test.go: `f.App.On("GetKeyStore").Return(f.Mocks.keystore)`
$DIR/core/web/resolver/csa_keys_test.go: `f.Mocks.keystore.On("CSA").Return(f.Mocks.csa)`
$DIR/core/web/resolver/csa_keys_test.go: `f.Mocks.csa.
On("Delete", mock.Anything, fakeKey.ID()).
Return(csakey.KeyV2{}, keystore.KeyNotFoundError{ID: fakeKey.ID(), KeyType: "CSA"})`
$DIR/core/web/resolver/csa_keys_test.go: `.NewV2()`
$DIR/core/web/resolver/csa_keys_test.go: `.ID()`
$DIR/core/web/resolver/csa_keys_test.go: `.Sprintf("csa_%s", k.PublicKeyString())`
$DIR/core/web/resolver/csa_keys_test.go: `.PublicKeyString()`
$DIR/core/web/resolver/csa_keys_test.go: `.Marshal(map[string]interface{}{
"csaKeys": map[string]interface{}{
"results": expectedKeys,
},
})`
$DIR/core/web/resolver/csa_keys_test.go: `.Mocks.csa.On("GetAll")`
$DIR/core/web/resolver/csa_keys_test.go: `.Return(fakeKeys, nil)`
$DIR/core/web/resolver/csa_keys_test.go: `.Mocks.keystore.On("CSA")`
$DIR/core/web/resolver/csa_keys_test.go: `.Return(f.Mocks.csa)`
$DIR/core/web/resolver/csa_keys_test.go: `.App.On("GetKeyStore")`
$DIR/core/web/resolver/csa_keys_test.go: `.Return(f.Mocks.keystore)`
$DIR/core/web/resolver/csa_keys_test.go: `.NewV2()`
$DIR/core/web/resolver/csa_keys_test.go: `.Mocks.csa.On("Create", mock.Anything)`
$DIR/core/web/resolver/csa_keys_test.go: `.Return(fakeKey, nil)`
$DIR/core/web/resolver/csa_keys_test.go: `.Mocks.keystore.On("CSA")`
$DIR/core/web/resolver/csa_keys_test.go: `.Return(f.Mocks.csa)`
$DIR/core/web/resolver/csa_keys_test.go: `.App.On("GetKeyStore")`
$DIR/core/web/resolver/csa_keys_test.go: `.Return(f.Mocks.keystore)`
$DIR/core/web/resolver/csa_keys_test.go: `.Sprintf(expected, fakeKey.ID(), fakeKey.Version, fakeKey.PublicKeyString())`
$DIR/core/web/resolver/csa_keys_test.go: `.ID()`
$DIR/core/web/resolver/csa_keys_test.go: `.PublicKeyString()`
$DIR/core/web/resolver/csa_keys_test.go: `.Mocks.csa.On("Create", mock.Anything)`
$DIR/core/web/resolver/csa_keys_test.go: `.Return(csakey.KeyV2{}, keystore.ErrCSAKeyExists)`
$DIR/core/web/resolver/csa_keys_test.go: `.Mocks.keystore.On("CSA")`
$DIR/core/web/resolver/csa_keys_test.go: `.Return(f.Mocks.csa)`
$DIR/core/web/resolver/csa_keys_test.go: `.App.On("GetKeyStore")`
$DIR/core/web/resolver/csa_keys_test.go: `.Return(f.Mocks.keystore)`
$DIR/core/web/resolver/csa_keys_test.go: `.Sprintf(`
{
"createCSAKey": {
"message": "%s",
"code": "UNPROCESSABLE"
}
}`, keystore.ErrCSAKeyExists.Error())`
$DIR/core/web/resolver/csa_keys_test.go: `.NewV2()`
$DIR/core/web/resolver/csa_keys_test.go: `.ID()`
$DIR/core/web/resolver/csa_keys_test.go: `.App.On("GetKeyStore")`
$DIR/core/web/resolver/csa_keys_test.go: `.Return(f.Mocks.keystore)`
$DIR/core/web/resolver/csa_keys_test.go: `.Mocks.keystore.On("CSA")`
$DIR/core/web/resolver/csa_keys_test.go: `.Return(f.Mocks.csa)`
$DIR/core/web/resolver/csa_keys_test.go: `.Mocks.csa.On("Delete", mock.Anything, fakeKey.ID())`
$DIR/core/web/resolver/csa_keys_test.go: `.ID()`
$DIR/core/web/resolver/csa_keys_test.go: `.Return(fakeKey, nil)`
$DIR/core/web/resolver/csa_keys_test.go: `.Sprintf(expected, fakeKey.ID(), fakeKey.Version, fakeKey.PublicKeyString())`
$DIR/core/web/resolver/csa_keys_test.go: `.ID()`
$DIR/core/web/resolver/csa_keys_test.go: `.PublicKeyString()`
$DIR/core/web/resolver/csa_keys_test.go: `.App.On("GetKeyStore")`
$DIR/core/web/resolver/csa_keys_test.go: `.Return(f.Mocks.keystore)`
$DIR/core/web/resolver/csa_keys_test.go: `.Mocks.keystore.On("CSA")`
$DIR/core/web/resolver/csa_keys_test.go: `.Return(f.Mocks.csa)`
$DIR/core/web/resolver/csa_keys_test.go: `.Mocks.csa.
On("Delete", mock.Anything, fakeKey.ID())`
$DIR/core/web/resolver/csa_keys_test.go: `.ID()`
$DIR/core/web/resolver/csa_keys_test.go: `.
Return(csakey.KeyV2{}, keystore.KeyNotFoundError{ID: fakeKey.ID(), KeyType: "CSA"})`
$DIR/core/web/resolver/csa_keys_test.go: `.ID()`
$DIR/core/web/resolver/csa_keys_test.go: `.Sprintf(`
{
"deleteCSAKey": {
"message": "unable to find CSA key with id %s",
"code": "NOT_FOUND"
}
}`, fakeKey.ID())`
$DIR/core/web/resolver/csa_keys_test.go: `.ID()`
$DIR/core/web/resolver/eth_key_test.go: `evmMockConfig.gasEstimatorMock.On("PriceMaxKey", mock.Anything).Return(assets.NewWeiI(1))`
$DIR/core/web/resolver/eth_key_test.go: `f.Mocks.ethKs.On("GetStatesForKeys", mock.Anything, keys).Return(states, nil)`
$DIR/core/web/resolver/eth_key_test.go: `f.Mocks.ethKs.On("Get", mock.Anything, keys[0].Address.Hex()).Return(keys[0], nil)`
$DIR/core/web/resolver/eth_key_test.go: `f.Mocks.ethKs.On("GetAll", mock.Anything).Return(keys, nil)`
$DIR/core/web/resolver/eth_key_test.go: `f.Mocks.ethClient.On("LINKBalance", mock.Anything, address, linkAddr).Return(commonassets.NewLinkFromJuels(12), nil)`
$DIR/core/web/resolver/eth_key_test.go: `f.Mocks.chain.On("Client").Return(f.Mocks.ethClient)`
$DIR/core/web/resolver/eth_key_test.go: `f.Mocks.balM.On("GetEthBalance", address).Return(assets.NewEth(1))`
$DIR/core/web/resolver/eth_key_test.go: `f.Mocks.chain.On("BalanceMonitor").Return(f.Mocks.balM)`
$DIR/core/web/resolver/eth_key_test.go: `f.Mocks.chain.On("Config").Return(f.Mocks.scfg)`
$DIR/core/web/resolver/eth_key_test.go: `f.Mocks.relayerChainInterops.EVMChains = legacyEVMChains`
$DIR/core/web/resolver/eth_key_test.go: `f.Mocks.relayerChainInterops.Relayers = []loop.Relayer{
testutils.MockRelayer{
ChainStatus: types.ChainStatus{
ID: "12",
Enabled: true,
},
NodeStatuses: nil,
},
}`
$DIR/core/web/resolver/eth_key_test.go: `f.Mocks.evmORM.PutChains(toml.EVMConfig{ChainID: &chainID})`
$DIR/core/web/resolver/eth_key_test.go: `f.Mocks.keystore.On("Eth").Return(f.Mocks.ethKs)`
$DIR/core/web/resolver/eth_key_test.go: `f.App.On("GetKeyStore").Return(f.Mocks.keystore)`
$DIR/core/web/resolver/eth_key_test.go: `f.App.On("GetRelayers").Return(f.Mocks.relayerChainInterops)`
$DIR/core/web/resolver/eth_key_test.go: `f.Mocks.scfg.On("EVM").Return(&evmMockConfig)`
$DIR/core/web/resolver/eth_key_test.go: `f.Mocks.legacyEVMChains.On("Get", states[0].EVMChainID.String()).Return(nil, evmrelay.ErrNoChains)`
$DIR/core/web/resolver/eth_key_test.go: `f.Mocks.ethKs.On("GetStatesForKeys", mock.Anything, keys).Return(states, nil)`
$DIR/core/web/resolver/eth_key_test.go: `f.Mocks.ethKs.On("Get", mock.Anything, keys[0].Address.Hex()).Return(keys[0], nil)`
$DIR/core/web/resolver/eth_key_test.go: `f.Mocks.ethKs.On("GetAll", mock.Anything).Return(keys, nil)`
$DIR/core/web/resolver/eth_key_test.go: `f.Mocks.relayerChainInterops.EVMChains = f.Mocks.legacyEVMChains`
$DIR/core/web/resolver/eth_key_test.go: `f.Mocks.evmORM.PutChains(toml.EVMConfig{ChainID: &chainID})`
$DIR/core/web/resolver/eth_key_test.go: `f.Mocks.relayerChainInterops.Relayers = []loop.Relayer{
testutils.MockRelayer{
ChainStatus: types.ChainStatus{
ID: "12",
Enabled: true,
},
NodeStatuses: nil,
},
}`
$DIR/core/web/resolver/eth_key_test.go: `f.Mocks.keystore.On("Eth").Return(f.Mocks.ethKs)`
$DIR/core/web/resolver/eth_key_test.go: `f.App.On("GetKeyStore").Return(f.Mocks.keystore)`
$DIR/core/web/resolver/eth_key_test.go: `f.App.On("GetRelayers").Return(f.Mocks.relayerChainInterops)`
$DIR/core/web/resolver/eth_key_test.go: `f.Mocks.ethKs.On("GetAll", mock.Anything).Return(nil, gError)`
$DIR/core/web/resolver/eth_key_test.go: `f.Mocks.keystore.On("Eth").Return(f.Mocks.ethKs)`
$DIR/core/web/resolver/eth_key_test.go: `f.App.On("GetKeyStore").Return(f.Mocks.keystore)`
$DIR/core/web/resolver/eth_key_test.go: `f.Mocks.ethKs.On("GetAll", mock.Anything).Return(keys, nil)`
$DIR/core/web/resolver/eth_key_test.go: `f.Mocks.ethKs.On("GetStatesForKeys", mock.Anything, keys).Return(nil, gError)`
$DIR/core/web/resolver/eth_key_test.go: `f.Mocks.keystore.On("Eth").Return(f.Mocks.ethKs)`
$DIR/core/web/resolver/eth_key_test.go: `f.App.On("GetKeyStore").Return(f.Mocks.keystore)`
$DIR/core/web/resolver/eth_key_test.go: `f.Mocks.ethKs.On("GetStatesForKeys", mock.Anything, keys).Return(states, nil)`
$DIR/core/web/resolver/eth_key_test.go: `f.Mocks.ethKs.On("Get", mock.Anything, keys[0].Address.Hex()).Return(ethkey.KeyV2{}, gError)`
$DIR/core/web/resolver/eth_key_test.go: `f.Mocks.ethKs.On("GetAll", mock.Anything).Return(keys, nil)`
$DIR/core/web/resolver/eth_key_test.go: `f.Mocks.keystore.On("Eth").Return(f.Mocks.ethKs)`
$DIR/core/web/resolver/eth_key_test.go: `f.App.On("GetKeyStore").Return(f.Mocks.keystore)`
$DIR/core/web/resolver/eth_key_test.go: `f.Mocks.ethKs.On("GetStatesForKeys", mock.Anything, keys).Return(states, nil)`
$DIR/core/web/resolver/eth_key_test.go: `f.Mocks.ethKs.On("Get", mock.Anything, keys[0].Address.Hex()).Return(ethkey.KeyV2{}, nil)`
$DIR/core/web/resolver/eth_key_test.go: `f.Mocks.ethKs.On("GetAll", mock.Anything).Return(keys, nil)`
$DIR/core/web/resolver/eth_key_test.go: `f.Mocks.keystore.On("Eth").Return(f.Mocks.ethKs)`
$DIR/core/web/resolver/eth_key_test.go: `f.Mocks.legacyEVMChains.On("Get", states[0].EVMChainID.String()).Return(f.Mocks.chain, gError)`
$DIR/core/web/resolver/eth_key_test.go: `f.Mocks.relayerChainInterops.EVMChains = f.Mocks.legacyEVMChains`
$DIR/core/web/resolver/eth_key_test.go: `f.App.On("GetRelayers").Return(f.Mocks.relayerChainInterops)`
$DIR/core/web/resolver/eth_key_test.go: `f.App.On("GetKeyStore").Return(f.Mocks.keystore)`
$DIR/core/web/resolver/eth_key_test.go: `f.Mocks.ethKs.On("GetStatesForKeys", mock.Anything, keys).Return(states, nil)`
$DIR/core/web/resolver/eth_key_test.go: `f.Mocks.ethKs.On("Get", mock.Anything, keys[0].Address.Hex()).Return(keys[0], nil)`
$DIR/core/web/resolver/eth_key_test.go: `f.Mocks.ethKs.On("GetAll", mock.Anything).Return(keys, nil)`
$DIR/core/web/resolver/eth_key_test.go: `f.Mocks.keystore.On("Eth").Return(f.Mocks.ethKs)`
$DIR/core/web/resolver/eth_key_test.go: `f.Mocks.ethClient.On("LINKBalance", mock.Anything, address, linkAddr).Return(commonassets.NewLinkFromJuels(12), gError)`
$DIR/core/web/resolver/eth_key_test.go: `f.Mocks.legacyEVMChains.On("Get", states[0].EVMChainID.String()).Return(f.Mocks.chain, nil)`
$DIR/core/web/resolver/eth_key_test.go: `f.Mocks.relayerChainInterops.EVMChains = f.Mocks.legacyEVMChains`
$DIR/core/web/resolver/eth_key_test.go: `f.Mocks.relayerChainInterops.Relayers = []loop.Relayer{
testutils.MockRelayer{
ChainStatus: types.ChainStatus{
ID: "12",
Enabled: true,
},
NodeStatuses: nil,
},
}`
$DIR/core/web/resolver/eth_key_test.go: `f.Mocks.chain.On("Client").Return(f.Mocks.ethClient)`
$DIR/core/web/resolver/eth_key_test.go: `f.Mocks.balM.On("GetEthBalance", address).Return(assets.NewEth(1))`
$DIR/core/web/resolver/eth_key_test.go: `f.Mocks.chain.On("BalanceMonitor").Return(f.Mocks.balM)`
$DIR/core/web/resolver/eth_key_test.go: `f.App.On("GetKeyStore").Return(f.Mocks.keystore)`
$DIR/core/web/resolver/eth_key_test.go: `f.Mocks.chain.On("Config").Return(f.Mocks.scfg)`
$DIR/core/web/resolver/eth_key_test.go: `f.Mocks.evmORM.PutChains(toml.EVMConfig{ChainID: &chainID})`
$DIR/core/web/resolver/eth_key_test.go: `f.App.On("GetRelayers").Return(f.Mocks.relayerChainInterops)`
$DIR/core/web/resolver/eth_key_test.go: `f.Mocks.scfg.On("EVM").Return(&evmMockConfig)`
$DIR/core/web/resolver/eth_key_test.go: `f.Mocks.ethKs.On("GetStatesForKeys", mock.Anything, keys).Return(states, nil)`
$DIR/core/web/resolver/eth_key_test.go: `f.Mocks.ethKs.On("Get", mock.Anything, keys[0].Address.Hex()).Return(keys[0], nil)`
$DIR/core/web/resolver/eth_key_test.go: `f.Mocks.ethKs.On("GetAll", mock.Anything).Return(keys, nil)`
$DIR/core/web/resolver/eth_key_test.go: `f.Mocks.ethClient.On("LINKBalance", mock.Anything, address, linkAddr).Return(commonassets.NewLinkFromJuels(12), nil)`
$DIR/core/web/resolver/eth_key_test.go: `f.Mocks.chain.On("Client").Return(f.Mocks.ethClient)`
$DIR/core/web/resolver/eth_key_test.go: `f.Mocks.chain.On("BalanceMonitor").Return(nil)`
$DIR/core/web/resolver/eth_key_test.go: `f.Mocks.chain.On("Config").Return(f.Mocks.scfg)`
$DIR/core/web/resolver/eth_key_test.go: `f.Mocks.legacyEVMChains.On("Get", states[0].EVMChainID.String()).Return(f.Mocks.chain, nil)`
$DIR/core/web/resolver/eth_key_test.go: `f.Mocks.relayerChainInterops.EVMChains = f.Mocks.legacyEVMChains`
$DIR/core/web/resolver/eth_key_test.go: `f.Mocks.evmORM.PutChains(toml.EVMConfig{ChainID: &chainID})`
$DIR/core/web/resolver/eth_key_test.go: `f.Mocks.relayerChainInterops.Relayers = []loop.Relayer{
testutils.MockRelayer{
ChainStatus: types.ChainStatus{
ID: "12",
Enabled: true,
},
NodeStatuses: nil,
},
}`
$DIR/core/web/resolver/eth_key_test.go: `f.Mocks.keystore.On("Eth").Return(f.Mocks.ethKs)`
$DIR/core/web/resolver/eth_key_test.go: `f.App.On("GetKeyStore").Return(f.Mocks.keystore)`
$DIR/core/web/resolver/eth_key_test.go: `f.App.On("GetRelayers").Return(f.Mocks.relayerChainInterops)`
$DIR/core/web/resolver/eth_key_test.go: `f.Mocks.scfg.On("EVM").Return(&evmMockConfig)`
$DIR/core/web/resolver/eth_key_test.go: `.HexToAddress("0x5431F5F973781809D18643b87B44921b11355d81")`
$DIR/core/web/resolver/eth_key_test.go: `.HexToAddress("0x1438087186fdbfd4c256fa2df446921e30e54df8")`
$DIR/core/web/resolver/eth_key_test.go: `.EIP55AddressFromAddress(address)`
$DIR/core/web/resolver/eth_key_test.go: `.EIP55AddressFromAddress(secondAddress)`
$DIR/core/web/resolver/eth_key_test.go: `.New("error")`
$DIR/core/web/resolver/eth_key_test.go: `.NewGasEstimator(t)`
$DIR/core/web/resolver/eth_key_test.go: `.gasEstimatorMock.On("PriceMaxKey", mock.Anything)`
$DIR/core/web/resolver/eth_key_test.go: `.Return(assets.NewWeiI(1))`
$DIR/core/web/resolver/eth_key_test.go: `.NewWeiI(1)`
$DIR/core/web/resolver/eth_key_test.go: `.MustEIP55Address(address.Hex())`
$DIR/core/web/resolver/eth_key_test.go: `.Hex()`
$DIR/core/web/resolver/eth_key_test.go: `.NewI(12)`
$DIR/core/web/resolver/eth_key_test.go: `.Timestamp()`
$DIR/core/web/resolver/eth_key_test.go: `.Timestamp()`
$DIR/core/web/resolver/eth_key_test.go: `.NewI(12)`
$DIR/core/web/resolver/eth_key_test.go: `.HexToAddress("0x5431F5F973781809D18643b87B44921b11355d81")`
$DIR/core/web/resolver/eth_key_test.go: `.NewGeneralConfig(t, nil)`
$DIR/core/web/resolver/eth_key_test.go: `.EVMChainID.String()`
$DIR/core/web/resolver/eth_key_test.go: `.NewLegacyChains(m, cfg.EVMConfigs())`
$DIR/core/web/resolver/eth_key_test.go: `.EVMConfigs()`
$DIR/core/web/resolver/eth_key_test.go: `.Mocks.ethKs.On("GetStatesForKeys", mock.Anything, keys)`
$DIR/core/web/resolver/eth_key_test.go: `.Return(states, nil)`
$DIR/core/web/resolver/eth_key_test.go: `.Mocks.ethKs.On("Get", mock.Anything, keys[0].Address.Hex())`
$DIR/core/web/resolver/eth_key_test.go: `.Address.Hex()`
$DIR/core/web/resolver/eth_key_test.go: `.Return(keys[0], nil)`
$DIR/core/web/resolver/eth_key_test.go: `.Mocks.ethKs.On("GetAll", mock.Anything)`
$DIR/core/web/resolver/eth_key_test.go: `.Return(keys, nil)`
$DIR/core/web/resolver/eth_key_test.go: `.Mocks.ethClient.On("LINKBalance", mock.Anything, address, linkAddr)`
$DIR/core/web/resolver/eth_key_test.go: `.Return(commonassets.NewLinkFromJuels(12), nil)`
$DIR/core/web/resolver/eth_key_test.go: `.NewLinkFromJuels(12)`
$DIR/core/web/resolver/eth_key_test.go: `.Mocks.chain.On("Client")`
$DIR/core/web/resolver/eth_key_test.go: `.Return(f.Mocks.ethClient)`
$DIR/core/web/resolver/eth_key_test.go: `.Mocks.balM.On("GetEthBalance", address)`
$DIR/core/web/resolver/eth_key_test.go: `.Return(assets.NewEth(1))`
$DIR/core/web/resolver/eth_key_test.go: `.NewEth(1)`
$DIR/core/web/resolver/eth_key_test.go: `.Mocks.chain.On("BalanceMonitor")`
$DIR/core/web/resolver/eth_key_test.go: `.Return(f.Mocks.balM)`
$DIR/core/web/resolver/eth_key_test.go: `.Mocks.chain.On("Config")`
$DIR/core/web/resolver/eth_key_test.go: `.Return(f.Mocks.scfg)`
$DIR/core/web/resolver/eth_key_test.go: `.Mocks.evmORM.PutChains(toml.EVMConfig{ChainID: &chainID})`
$DIR/core/web/resolver/eth_key_test.go: `.Mocks.keystore.On("Eth")`
$DIR/core/web/resolver/eth_key_test.go: `.Return(f.Mocks.ethKs)`
$DIR/core/web/resolver/eth_key_test.go: `.App.On("GetKeyStore")`
$DIR/core/web/resolver/eth_key_test.go: `.Return(f.Mocks.keystore)`
$DIR/core/web/resolver/eth_key_test.go: `.App.On("GetRelayers")`
$DIR/core/web/resolver/eth_key_test.go: `.Return(f.Mocks.relayerChainInterops)`
$DIR/core/web/resolver/eth_key_test.go: `.Mocks.scfg.On("EVM")`
$DIR/core/web/resolver/eth_key_test.go: `.Return(&evmMockConfig)`
$DIR/core/web/resolver/eth_key_test.go: `.MustEIP55Address(address.Hex())`
$DIR/core/web/resolver/eth_key_test.go: `.Hex()`
$DIR/core/web/resolver/eth_key_test.go: `.NewI(12)`
$DIR/core/web/resolver/eth_key_test.go: `.Timestamp()`
$DIR/core/web/resolver/eth_key_test.go: `.Timestamp()`
$DIR/core/web/resolver/eth_key_test.go: `.NewI(12)`
$DIR/core/web/resolver/eth_key_test.go: `.Mocks.legacyEVMChains.On("Get", states[0].EVMChainID.String())`
$DIR/core/web/resolver/eth_key_test.go: `.EVMChainID.String()`
$DIR/core/web/resolver/eth_key_test.go: `.Return(nil, evmrelay.ErrNoChains)`
$DIR/core/web/resolver/eth_key_test.go: `.Mocks.ethKs.On("GetStatesForKeys", mock.Anything, keys)`
$DIR/core/web/resolver/eth_key_test.go: `.Return(states, nil)`
$DIR/core/web/resolver/eth_key_test.go: `.Mocks.ethKs.On("Get", mock.Anything, keys[0].Address.Hex())`
$DIR/core/web/resolver/eth_key_test.go: `.Address.Hex()`
$DIR/core/web/resolver/eth_key_test.go: `.Return(keys[0], nil)`
$DIR/core/web/resolver/eth_key_test.go: `.Mocks.ethKs.On("GetAll", mock.Anything)`
$DIR/core/web/resolver/eth_key_test.go: `.Return(keys, nil)`
$DIR/core/web/resolver/eth_key_test.go: `.Mocks.evmORM.PutChains(toml.EVMConfig{ChainID: &chainID})`
$DIR/core/web/resolver/eth_key_test.go: `.Mocks.keystore.On("Eth")`
$DIR/core/web/resolver/eth_key_test.go: `.Return(f.Mocks.ethKs)`
$DIR/core/web/resolver/eth_key_test.go: `.App.On("GetKeyStore")`
$DIR/core/web/resolver/eth_key_test.go: `.Return(f.Mocks.keystore)`
$DIR/core/web/resolver/eth_key_test.go: `.App.On("GetRelayers")`
$DIR/core/web/resolver/eth_key_test.go: `.Return(f.Mocks.relayerChainInterops)`
$DIR/core/web/resolver/eth_key_test.go: `.Mocks.ethKs.On("GetAll", mock.Anything)`
$DIR/core/web/resolver/eth_key_test.go: `.Return(nil, gError)`
$DIR/core/web/resolver/eth_key_test.go: `.Mocks.keystore.On("Eth")`
$DIR/core/web/resolver/eth_key_test.go: `.Return(f.Mocks.ethKs)`
$DIR/core/web/resolver/eth_key_test.go: `.App.On("GetKeyStore")`
$DIR/core/web/resolver/eth_key_test.go: `.Return(f.Mocks.keystore)`
$DIR/core/web/resolver/eth_key_test.go: `.Mocks.ethKs.On("GetAll", mock.Anything)`
$DIR/core/web/resolver/eth_key_test.go: `.Return(keys, nil)`
$DIR/core/web/resolver/eth_key_test.go: `.Mocks.ethKs.On("GetStatesForKeys", mock.Anything, keys)`
$DIR/core/web/resolver/eth_key_test.go: `.Return(nil, gError)`
$DIR/core/web/resolver/eth_key_test.go: `.Mocks.keystore.On("Eth")`
$DIR/core/web/resolver/eth_key_test.go: `.Return(f.Mocks.ethKs)`
$DIR/core/web/resolver/eth_key_test.go: `.App.On("GetKeyStore")`
$DIR/core/web/resolver/eth_key_test.go: `.Return(f.Mocks.keystore)`
$DIR/core/web/resolver/eth_key_test.go: `.MustEIP55Address(address.Hex())`
$DIR/core/web/resolver/eth_key_test.go: `.Hex()`
$DIR/core/web/resolver/eth_key_test.go: `.NewI(12)`
$DIR/core/web/resolver/eth_key_test.go: `.Timestamp()`
$DIR/core/web/resolver/eth_key_test.go: `.Timestamp()`
$DIR/core/web/resolver/eth_key_test.go: `.Mocks.ethKs.On("GetStatesForKeys", mock.Anything, keys)`
$DIR/core/web/resolver/eth_key_test.go: `.Return(states, nil)`
$DIR/core/web/resolver/eth_key_test.go: `.Mocks.ethKs.On("Get", mock.Anything, keys[0].Address.Hex())`
$DIR/core/web/resolver/eth_key_test.go: `.Address.Hex()`
$DIR/core/web/resolver/eth_key_test.go: `.Return(ethkey.KeyV2{}, gError)`
$DIR/core/web/resolver/eth_key_test.go: `.Mocks.ethKs.On("GetAll", mock.Anything)`
$DIR/core/web/resolver/eth_key_test.go: `.Return(keys, nil)`
$DIR/core/web/resolver/eth_key_test.go: `.Mocks.keystore.On("Eth")`
$DIR/core/web/resolver/eth_key_test.go: `.Return(f.Mocks.ethKs)`
$DIR/core/web/resolver/eth_key_test.go: `.App.On("GetKeyStore")`
$DIR/core/web/resolver/eth_key_test.go: `.Return(f.Mocks.keystore)`
$DIR/core/web/resolver/eth_key_test.go: `.MustEIP55Address(address.Hex())`
$DIR/core/web/resolver/eth_key_test.go: `.Hex()`
$DIR/core/web/resolver/eth_key_test.go: `.NewI(12)`
$DIR/core/web/resolver/eth_key_test.go: `.Timestamp()`
$DIR/core/web/resolver/eth_key_test.go: `.Timestamp()`
$DIR/core/web/resolver/eth_key_test.go: `.Mocks.ethKs.On("GetStatesForKeys", mock.Anything, keys)`
$DIR/core/web/resolver/eth_key_test.go: `.Return(states, nil)`
$DIR/core/web/resolver/eth_key_test.go: `.Mocks.ethKs.On("Get", mock.Anything, keys[0].Address.Hex())`
$DIR/core/web/resolver/eth_key_test.go: `.Address.Hex()`
$DIR/core/web/resolver/eth_key_test.go: `.Return(ethkey.KeyV2{}, nil)`
$DIR/core/web/resolver/eth_key_test.go: `.Mocks.ethKs.On("GetAll", mock.Anything)`
$DIR/core/web/resolver/eth_key_test.go: `.Return(keys, nil)`
$DIR/core/web/resolver/eth_key_test.go: `.Mocks.keystore.On("Eth")`
$DIR/core/web/resolver/eth_key_test.go: `.Return(f.Mocks.ethKs)`
$DIR/core/web/resolver/eth_key_test.go: `.Mocks.legacyEVMChains.On("Get", states[0].EVMChainID.String())`
$DIR/core/web/resolver/eth_key_test.go: `.EVMChainID.String()`
$DIR/core/web/resolver/eth_key_test.go: `.Return(f.Mocks.chain, gError)`
$DIR/core/web/resolver/eth_key_test.go: `.App.On("GetRelayers")`
$DIR/core/web/resolver/eth_key_test.go: `.Return(f.Mocks.relayerChainInterops)`
$DIR/core/web/resolver/eth_key_test.go: `.App.On("GetKeyStore")`
$DIR/core/web/resolver/eth_key_test.go: `.Return(f.Mocks.keystore)`
$DIR/core/web/resolver/eth_key_test.go: `.MustEIP55Address(address.Hex())`
$DIR/core/web/resolver/eth_key_test.go: `.Hex()`
$DIR/core/web/resolver/eth_key_test.go: `.NewI(12)`
$DIR/core/web/resolver/eth_key_test.go: `.Timestamp()`
$DIR/core/web/resolver/eth_key_test.go: `.Timestamp()`
$DIR/core/web/resolver/eth_key_test.go: `.NewI(12)`
$DIR/core/web/resolver/eth_key_test.go: `.HexToAddress("0x5431F5F973781809D18643b87B44921b11355d81")`
$DIR/core/web/resolver/eth_key_test.go: `.Mocks.ethKs.On("GetStatesForKeys", mock.Anything, keys)`
$DIR/core/web/resolver/eth_key_test.go: `.Return(states, nil)`
$DIR/core/web/resolver/eth_key_test.go: `.Mocks.ethKs.On("Get", mock.Anything, keys[0].Address.Hex())`
$DIR/core/web/resolver/eth_key_test.go: `.Address.Hex()`
$DIR/core/web/resolver/eth_key_test.go: `.Return(keys[0], nil)`
$DIR/core/web/resolver/eth_key_test.go: `.Mocks.ethKs.On("GetAll", mock.Anything)`
$DIR/core/web/resolver/eth_key_test.go: `.Return(keys, nil)`
$DIR/core/web/resolver/eth_key_test.go: `.Mocks.keystore.On("Eth")`
$DIR/core/web/resolver/eth_key_test.go: `.Return(f.Mocks.ethKs)`
$DIR/core/web/resolver/eth_key_test.go: `.Mocks.ethClient.On("LINKBalance", mock.Anything, address, linkAddr)`
$DIR/core/web/resolver/eth_key_test.go: `.Return(commonassets.NewLinkFromJuels(12), gError)`
$DIR/core/web/resolver/eth_key_test.go: `.NewLinkFromJuels(12)`
$DIR/core/web/resolver/eth_key_test.go: `.Mocks.legacyEVMChains.On("Get", states[0].EVMChainID.String())`
$DIR/core/web/resolver/eth_key_test.go: `.EVMChainID.String()`
$DIR/core/web/resolver/eth_key_test.go: `.Return(f.Mocks.chain, nil)`
$DIR/core/web/resolver/eth_key_test.go: `.Mocks.chain.On("Client")`
$DIR/core/web/resolver/eth_key_test.go: `.Return(f.Mocks.ethClient)`
$DIR/core/web/resolver/eth_key_test.go: `.Mocks.balM.On("GetEthBalance", address)`
$DIR/core/web/resolver/eth_key_test.go: `.Return(assets.NewEth(1))`
$DIR/core/web/resolver/eth_key_test.go: `.NewEth(1)`
$DIR/core/web/resolver/eth_key_test.go: `.Mocks.chain.On("BalanceMonitor")`
$DIR/core/web/resolver/eth_key_test.go: `.Return(f.Mocks.balM)`
$DIR/core/web/resolver/eth_key_test.go: `.App.On("GetKeyStore")`
$DIR/core/web/resolver/eth_key_test.go: `.Return(f.Mocks.keystore)`
$DIR/core/web/resolver/eth_key_test.go: `.Mocks.chain.On("Config")`
$DIR/core/web/resolver/eth_key_test.go: `.Return(f.Mocks.scfg)`
$DIR/core/web/resolver/eth_key_test.go: `.Mocks.evmORM.PutChains(toml.EVMConfig{ChainID: &chainID})`
$DIR/core/web/resolver/eth_key_test.go: `.App.On("GetRelayers")`
$DIR/core/web/resolver/eth_key_test.go: `.Return(f.Mocks.relayerChainInterops)`
$DIR/core/web/resolver/eth_key_test.go: `.Mocks.scfg.On("EVM")`
$DIR/core/web/resolver/eth_key_test.go: `.Return(&evmMockConfig)`
$DIR/core/web/resolver/eth_key_test.go: `.EIP55AddressFromAddress(address)`
$DIR/core/web/resolver/eth_key_test.go: `.NewI(12)`
$DIR/core/web/resolver/eth_key_test.go: `.Timestamp()`
$DIR/core/web/resolver/eth_key_test.go: `.Timestamp()`
$DIR/core/web/resolver/eth_key_test.go: `.NewI(12)`
$DIR/core/web/resolver/eth_key_test.go: `.HexToAddress("0x5431F5F973781809D18643b87B44921b11355d81")`
$DIR/core/web/resolver/eth_key_test.go: `.Mocks.ethKs.On("GetStatesForKeys", mock.Anything, keys)`
$DIR/core/web/resolver/eth_key_test.go: `.Return(states, nil)`
$DIR/core/web/resolver/eth_key_test.go: `.Mocks.ethKs.On("Get", mock.Anything, keys[0].Address.Hex())`
$DIR/core/web/resolver/eth_key_test.go: `.Address.Hex()`
$DIR/core/web/resolver/eth_key_test.go: `.Return(keys[0], nil)`
$DIR/core/web/resolver/eth_key_test.go: `.Mocks.ethKs.On("GetAll", mock.Anything)`
$DIR/core/web/resolver/eth_key_test.go: `.Return(keys, nil)`
$DIR/core/web/resolver/eth_key_test.go: `.Mocks.ethClient.On("LINKBalance", mock.Anything, address, linkAddr)`
$DIR/core/web/resolver/eth_key_test.go: `.Return(commonassets.NewLinkFromJuels(12), nil)`
$DIR/core/web/resolver/eth_key_test.go: `.NewLinkFromJuels(12)`
$DIR/core/web/resolver/eth_key_test.go: `.Mocks.chain.On("Client")`
$DIR/core/web/resolver/eth_key_test.go: `.Return(f.Mocks.ethClient)`
$DIR/core/web/resolver/eth_key_test.go: `.Mocks.chain.On("BalanceMonitor")`
$DIR/core/web/resolver/eth_key_test.go: `.Return(nil)`
$DIR/core/web/resolver/eth_key_test.go: `.Mocks.chain.On("Config")`
$DIR/core/web/resolver/eth_key_test.go: `.Return(f.Mocks.scfg)`
$DIR/core/web/resolver/eth_key_test.go: `.Mocks.legacyEVMChains.On("Get", states[0].EVMChainID.String())`
$DIR/core/web/resolver/eth_key_test.go: `.EVMChainID.String()`
$DIR/core/web/resolver/eth_key_test.go: `.Return(f.Mocks.chain, nil)`
$DIR/core/web/resolver/eth_key_test.go: `.Mocks.evmORM.PutChains(toml.EVMConfig{ChainID: &chainID})`
$DIR/core/web/resolver/eth_key_test.go: `.Mocks.keystore.On("Eth")`
$DIR/core/web/resolver/eth_key_test.go: `.Return(f.Mocks.ethKs)`
$DIR/core/web/resolver/eth_key_test.go: `.App.On("GetKeyStore")`
$DIR/core/web/resolver/eth_key_test.go: `.Return(f.Mocks.keystore)`
$DIR/core/web/resolver/eth_key_test.go: `.App.On("GetRelayers")`
$DIR/core/web/resolver/eth_key_test.go: `.Return(f.Mocks.relayerChainInterops)`
$DIR/core/web/resolver/eth_key_test.go: `.Mocks.scfg.On("EVM")`
$DIR/core/web/resolver/eth_key_test.go: `.Return(&evmMockConfig)`
$DIR/core/web/resolver/eth_transaction_test.go: `f.Mocks.txmStore.On("FindTxByHash", mock.Anything, hash).Return(&txmgr.Tx{
ID: 1,
ToAddress: common.HexToAddress("0x5431F5F973781809D18643b87B44921b11355d81"),
FromAddress: common.HexToAddress("0x5431F5F973781809D18643b87B44921b11355d81"),
State: txmgrcommon.TxInProgress,
EncodedPayload: []byte("encoded payload"),
FeeLimit: 100,
Value: big.Int(assets.NewEthValue(100)),
ChainID: big.NewInt(22),
Sequence: nil,
}, nil)`
$DIR/core/web/resolver/eth_transaction_test.go: `f.Mocks.txmStore.On("FindTxAttemptConfirmedByTxIDs", mock.Anything, []int64{1}).Return([]txmgr.TxAttempt{
{
TxID: 1,
Hash: hash,
TxFee: gas.EvmFee{Legacy: assets.NewWeiI(12)},
SignedRawTx: []byte("something"),
BroadcastBeforeBlockNum: nil,
},
}, nil)`
$DIR/core/web/resolver/eth_transaction_test.go: `f.App.On("TxmStorageService").Return(f.Mocks.txmStore)`
$DIR/core/web/resolver/eth_transaction_test.go: `f.Mocks.evmORM.PutChains(toml.EVMConfig{ChainID: &chainID})`
$DIR/core/web/resolver/eth_transaction_test.go: `f.App.On("GetRelayers").Return(&chainlinkmocks.FakeRelayerChainInteroperators{
Relayers: []loop.Relayer{
testutils.MockRelayer{ChainStatus: types.ChainStatus{
ID: "22",
Enabled: true,
Config: "",
}},
},
})`
$DIR/core/web/resolver/eth_transaction_test.go: `f.Mocks.txmStore.On("FindTxByHash", mock.Anything, hash).Return(&txmgr.Tx{
ID: 1,
ToAddress: common.HexToAddress("0x5431F5F973781809D18643b87B44921b11355d81"),
FromAddress: common.HexToAddress("0x5431F5F973781809D18643b87B44921b11355d81"),
State: txmgrcommon.TxInProgress,
EncodedPayload: []byte("encoded payload"),
FeeLimit: 100,
Value: big.Int(assets.NewEthValue(100)),
ChainID: big.NewInt(22),
Sequence: &nonce,
}, nil)`
$DIR/core/web/resolver/eth_transaction_test.go: `f.Mocks.txmStore.On("FindTxAttemptConfirmedByTxIDs", mock.Anything, []int64{1}).Return([]txmgr.TxAttempt{
{
TxID: 1,
Hash: hash,
TxFee: gas.EvmFee{Legacy: assets.NewWeiI(12)},
SignedRawTx: []byte("something"),
BroadcastBeforeBlockNum: &num,
},
}, nil)`
$DIR/core/web/resolver/eth_transaction_test.go: `f.App.On("TxmStorageService").Return(f.Mocks.txmStore)`
$DIR/core/web/resolver/eth_transaction_test.go: `f.Mocks.evmORM.PutChains(toml.EVMConfig{ChainID: &chainID})`
$DIR/core/web/resolver/eth_transaction_test.go: `f.App.On("GetRelayers").Return(&chainlinkmocks.FakeRelayerChainInteroperators{
Relayers: []loop.Relayer{
testutils.MockRelayer{ChainStatus: types.ChainStatus{
ID: "22",
Enabled: true,
Config: "",
}},
},
})`
$DIR/core/web/resolver/eth_transaction_test.go: `f.Mocks.txmStore.On("FindTxByHash", mock.Anything, hash).Return(nil, sql.ErrNoRows)`
$DIR/core/web/resolver/eth_transaction_test.go: `f.App.On("TxmStorageService").Return(f.Mocks.txmStore)`
$DIR/core/web/resolver/eth_transaction_test.go: `f.Mocks.txmStore.On("FindTxByHash", mock.Anything, hash).Return(nil, gError)`
$DIR/core/web/resolver/eth_transaction_test.go: `f.App.On("TxmStorageService").Return(f.Mocks.txmStore)`
$DIR/core/web/resolver/eth_transaction_test.go: `f.Mocks.txmStore.On("Transactions", mock.Anything, PageDefaultOffset, PageDefaultLimit).Return([]txmgr.Tx{
{
ID: 1,
ToAddress: common.HexToAddress("0x5431F5F973781809D18643b87B44921b11355d81"),
FromAddress: common.HexToAddress("0x5431F5F973781809D18643b87B44921b11355d81"),
State: txmgrcommon.TxInProgress,
EncodedPayload: []byte("encoded payload"),
FeeLimit: 100,
Value: big.Int(assets.NewEthValue(100)),
ChainID: big.NewInt(22),
},
}, 1, nil)`
$DIR/core/web/resolver/eth_transaction_test.go: `f.Mocks.txmStore.On("FindTxAttemptConfirmedByTxIDs", mock.Anything, []int64{1}).Return([]txmgr.TxAttempt{
{
TxID: 1,
Hash: hash,
TxFee: gas.EvmFee{Legacy: assets.NewWeiI(12)},
SignedRawTx: []byte("something"),
BroadcastBeforeBlockNum: &num,
},
}, nil)`
$DIR/core/web/resolver/eth_transaction_test.go: `f.App.On("TxmStorageService").Return(f.Mocks.txmStore)`
$DIR/core/web/resolver/eth_transaction_test.go: `f.Mocks.txmStore.On("Transactions", mock.Anything, PageDefaultOffset, PageDefaultLimit).Return(nil, 0, gError)`
$DIR/core/web/resolver/eth_transaction_test.go: `f.App.On("TxmStorageService").Return(f.Mocks.txmStore)`
$DIR/core/web/resolver/eth_transaction_test.go: `f.Mocks.txmStore.On("TxAttempts", mock.Anything, PageDefaultOffset, PageDefaultLimit).Return([]txmgr.TxAttempt{
{
Hash: hash,
TxFee: gas.EvmFee{Legacy: assets.NewWeiI(12)},
SignedRawTx: []byte("something"),
BroadcastBeforeBlockNum: &num,
Tx: txmgr.Tx{},
},
}, 1, nil)`
$DIR/core/web/resolver/eth_transaction_test.go: `f.App.On("TxmStorageService").Return(f.Mocks.txmStore)`
$DIR/core/web/resolver/eth_transaction_test.go: `f.Mocks.txmStore.On("TxAttempts", mock.Anything, PageDefaultOffset, PageDefaultLimit).Return([]txmgr.TxAttempt{
{
Hash: hash,
TxFee: gas.EvmFee{Legacy: assets.NewWeiI(12)},
SignedRawTx: []byte("something"),
BroadcastBeforeBlockNum: nil,
},
}, 1, nil)`
$DIR/core/web/resolver/eth_transaction_test.go: `f.App.On("TxmStorageService").Return(f.Mocks.txmStore)`
$DIR/core/web/resolver/eth_transaction_test.go: `f.Mocks.txmStore.On("TxAttempts", mock.Anything, PageDefaultOffset, PageDefaultLimit).Return(nil, 0, gError)`
$DIR/core/web/resolver/eth_transaction_test.go: `f.App.On("TxmStorageService").Return(f.Mocks.txmStore)`
$DIR/core/web/resolver/eth_transaction_test.go: `.HexToHash("0x5431F5F973781809D18643b87B44921b11355d81")`
$DIR/core/web/resolver/eth_transaction_test.go: `.NewI(22)`
$DIR/core/web/resolver/eth_transaction_test.go: `.New("error")`
$DIR/core/web/resolver/eth_transaction_test.go: `.Mocks.txmStore.On("FindTxByHash", mock.Anything, hash)`
$DIR/core/web/resolver/eth_transaction_test.go: `.Return(&txmgr.Tx{
ID: 1,
ToAddress: common.HexToAddress("0x5431F5F973781809D18643b87B44921b11355d81"),
FromAddress: common.HexToAddress("0x5431F5F973781809D18643b87B44921b11355d81"),
State: txmgrcommon.TxInProgress,
EncodedPayload: []byte("encoded payload"),
FeeLimit: 100,
Value: big.Int(assets.NewEthValue(100)),
ChainID: big.NewInt(22),
Sequence: nil,
}, nil)`
$DIR/core/web/resolver/eth_transaction_test.go: `.HexToAddress("0x5431F5F973781809D18643b87B44921b11355d81")`
$DIR/core/web/resolver/eth_transaction_test.go: `.HexToAddress("0x5431F5F973781809D18643b87B44921b11355d81")`
$DIR/core/web/resolver/eth_transaction_test.go: `.Int(assets.NewEthValue(100))`
$DIR/core/web/resolver/eth_transaction_test.go: `.NewEthValue(100)`
$DIR/core/web/resolver/eth_transaction_test.go: `.NewInt(22)`
$DIR/core/web/resolver/eth_transaction_test.go: `.Mocks.txmStore.On("FindTxAttemptConfirmedByTxIDs", mock.Anything, []int64{1})`
$DIR/core/web/resolver/eth_transaction_test.go: `.Return([]txmgr.TxAttempt{
{
TxID: 1,
Hash: hash,
TxFee: gas.EvmFee{Legacy: assets.NewWeiI(12)},
SignedRawTx: []byte("something"),
BroadcastBeforeBlockNum: nil,
},
}, nil)`
$DIR/core/web/resolver/eth_transaction_test.go: `.NewWeiI(12)`
$DIR/core/web/resolver/eth_transaction_test.go: `.App.On("TxmStorageService")`
$DIR/core/web/resolver/eth_transaction_test.go: `.Return(f.Mocks.txmStore)`
$DIR/core/web/resolver/eth_transaction_test.go: `.Mocks.evmORM.PutChains(toml.EVMConfig{ChainID: &chainID})`
$DIR/core/web/resolver/eth_transaction_test.go: `.App.On("GetRelayers")`
$DIR/core/web/resolver/eth_transaction_test.go: `.Return(&chainlinkmocks.FakeRelayerChainInteroperators{
Relayers: []loop.Relayer{
testutils.MockRelayer{ChainStatus: types.ChainStatus{
ID: "22",
Enabled: true,
Config: "",
}},
},
})`
$DIR/core/web/resolver/eth_transaction_test.go: `.Nonce(num)`
$DIR/core/web/resolver/eth_transaction_test.go: `.Mocks.txmStore.On("FindTxByHash", mock.Anything, hash)`
$DIR/core/web/resolver/eth_transaction_test.go: `.Return(&txmgr.Tx{
ID: 1,
ToAddress: common.HexToAddress("0x5431F5F973781809D18643b87B44921b11355d81"),
FromAddress: common.HexToAddress("0x5431F5F973781809D18643b87B44921b11355d81"),
State: txmgrcommon.TxInProgress,
EncodedPayload: []byte("encoded payload"),
FeeLimit: 100,
Value: big.Int(assets.NewEthValue(100)),
ChainID: big.NewInt(22),
Sequence: &nonce,
}, nil)`
$DIR/core/web/resolver/eth_transaction_test.go: `.HexToAddress("0x5431F5F973781809D18643b87B44921b11355d81")`
$DIR/core/web/resolver/eth_transaction_test.go: `.HexToAddress("0x5431F5F973781809D18643b87B44921b11355d81")`
$DIR/core/web/resolver/eth_transaction_test.go: `.Int(assets.NewEthValue(100))`
$DIR/core/web/resolver/eth_transaction_test.go: `.NewEthValue(100)`
$DIR/core/web/resolver/eth_transaction_test.go: `.NewInt(22)`
$DIR/core/web/resolver/eth_transaction_test.go: `.Mocks.txmStore.On("FindTxAttemptConfirmedByTxIDs", mock.Anything, []int64{1})`
$DIR/core/web/resolver/eth_transaction_test.go: `.Return([]txmgr.TxAttempt{
{
TxID: 1,
Hash: hash,
TxFee: gas.EvmFee{Legacy: assets.NewWeiI(12)},
SignedRawTx: []byte("something"),
BroadcastBeforeBlockNum: &num,
},
}, nil)`
$DIR/core/web/resolver/eth_transaction_test.go: `.NewWeiI(12)`
$DIR/core/web/resolver/eth_transaction_test.go: `.App.On("TxmStorageService")`
$DIR/core/web/resolver/eth_transaction_test.go: `.Return(f.Mocks.txmStore)`
$DIR/core/web/resolver/eth_transaction_test.go: `.Mocks.evmORM.PutChains(toml.EVMConfig{ChainID: &chainID})`
$DIR/core/web/resolver/eth_transaction_test.go: `.App.On("GetRelayers")`
$DIR/core/web/resolver/eth_transaction_test.go: `.Return(&chainlinkmocks.FakeRelayerChainInteroperators{
Relayers: []loop.Relayer{
testutils.MockRelayer{ChainStatus: types.ChainStatus{
ID: "22",
Enabled: true,
Config: "",
}},
},
})`
$DIR/core/web/resolver/eth_transaction_test.go: `.Mocks.txmStore.On("FindTxByHash", mock.Anything, hash)`
$DIR/core/web/resolver/eth_transaction_test.go: `.Return(nil, sql.ErrNoRows)`
$DIR/core/web/resolver/eth_transaction_test.go: `.App.On("TxmStorageService")`
$DIR/core/web/resolver/eth_transaction_test.go: `.Return(f.Mocks.txmStore)`
$DIR/core/web/resolver/eth_transaction_test.go: `.Mocks.txmStore.On("FindTxByHash", mock.Anything, hash)`
$DIR/core/web/resolver/eth_transaction_test.go: `.Return(nil, gError)`
$DIR/core/web/resolver/eth_transaction_test.go: `.App.On("TxmStorageService")`
$DIR/core/web/resolver/eth_transaction_test.go: `.Return(f.Mocks.txmStore)`
$DIR/core/web/resolver/eth_transaction_test.go: `.HexToHash("0x5431F5F973781809D18643b87B44921b11355d81")`
$DIR/core/web/resolver/eth_transaction_test.go: `.New("error")`
$DIR/core/web/resolver/eth_transaction_test.go: `.Mocks.txmStore.On("Transactions", mock.Anything, PageDefaultOffset, PageDefaultLimit)`
$DIR/core/web/resolver/eth_transaction_test.go: `.Return([]txmgr.Tx{
{
ID: 1,
ToAddress: common.HexToAddress("0x5431F5F973781809D18643b87B44921b11355d81"),
FromAddress: common.HexToAddress("0x5431F5F973781809D18643b87B44921b11355d81"),
State: txmgrcommon.TxInProgress,
EncodedPayload: []byte("encoded payload"),
FeeLimit: 100,
Value: big.Int(assets.NewEthValue(100)),
ChainID: big.NewInt(22),
},
}, 1, nil)`
$DIR/core/web/resolver/eth_transaction_test.go: `.HexToAddress("0x5431F5F973781809D18643b87B44921b11355d81")`
$DIR/core/web/resolver/eth_transaction_test.go: `.HexToAddress("0x5431F5F973781809D18643b87B44921b11355d81")`
$DIR/core/web/resolver/eth_transaction_test.go: `.Int(assets.NewEthValue(100))`
$DIR/core/web/resolver/eth_transaction_test.go: `.NewEthValue(100)`
$DIR/core/web/resolver/eth_transaction_test.go: `.NewInt(22)`
$DIR/core/web/resolver/eth_transaction_test.go: `.Mocks.txmStore.On("FindTxAttemptConfirmedByTxIDs", mock.Anything, []int64{1})`
$DIR/core/web/resolver/eth_transaction_test.go: `.Return([]txmgr.TxAttempt{
{
TxID: 1,
Hash: hash,
TxFee: gas.EvmFee{Legacy: assets.NewWeiI(12)},
SignedRawTx: []byte("something"),
BroadcastBeforeBlockNum: &num,
},
}, nil)`
$DIR/core/web/resolver/eth_transaction_test.go: `.NewWeiI(12)`
$DIR/core/web/resolver/eth_transaction_test.go: `.App.On("TxmStorageService")`
$DIR/core/web/resolver/eth_transaction_test.go: `.Return(f.Mocks.txmStore)`
$DIR/core/web/resolver/eth_transaction_test.go: `.Mocks.txmStore.On("Transactions", mock.Anything, PageDefaultOffset, PageDefaultLimit)`
$DIR/core/web/resolver/eth_transaction_test.go: `.Return(nil, 0, gError)`
$DIR/core/web/resolver/eth_transaction_test.go: `.App.On("TxmStorageService")`
$DIR/core/web/resolver/eth_transaction_test.go: `.Return(f.Mocks.txmStore)`
$DIR/core/web/resolver/eth_transaction_test.go: `.HexToHash("0x5431F5F973781809D18643b87B44921b11355d81")`
$DIR/core/web/resolver/eth_transaction_test.go: `.New("error")`
$DIR/core/web/resolver/eth_transaction_test.go: `.Mocks.txmStore.On("TxAttempts", mock.Anything, PageDefaultOffset, PageDefaultLimit)`
$DIR/core/web/resolver/eth_transaction_test.go: `.Return([]txmgr.TxAttempt{
{
Hash: hash,
TxFee: gas.EvmFee{Legacy: assets.NewWeiI(12)},
SignedRawTx: []byte("something"),
BroadcastBeforeBlockNum: &num,
Tx: txmgr.Tx{},
},
}, 1, nil)`
$DIR/core/web/resolver/eth_transaction_test.go: `.NewWeiI(12)`
$DIR/core/web/resolver/eth_transaction_test.go: `.App.On("TxmStorageService")`
$DIR/core/web/resolver/eth_transaction_test.go: `.Return(f.Mocks.txmStore)`
$DIR/core/web/resolver/eth_transaction_test.go: `.Mocks.txmStore.On("TxAttempts", mock.Anything, PageDefaultOffset, PageDefaultLimit)`
$DIR/core/web/resolver/eth_transaction_test.go: `.Return([]txmgr.TxAttempt{
{
Hash: hash,
TxFee: gas.EvmFee{Legacy: assets.NewWeiI(12)},
SignedRawTx: []byte("something"),
BroadcastBeforeBlockNum: nil,
},
}, 1, nil)`
$DIR/core/web/resolver/eth_transaction_test.go: `.NewWeiI(12)`
$DIR/core/web/resolver/eth_transaction_test.go: `.App.On("TxmStorageService")`
$DIR/core/web/resolver/eth_transaction_test.go: `.Return(f.Mocks.txmStore)`
$DIR/core/web/resolver/eth_transaction_test.go: `.Mocks.txmStore.On("TxAttempts", mock.Anything, PageDefaultOffset, PageDefaultLimit)`
$DIR/core/web/resolver/eth_transaction_test.go: `.Return(nil, 0, gError)`
$DIR/core/web/resolver/eth_transaction_test.go: `.App.On("TxmStorageService")`
$DIR/core/web/resolver/eth_transaction_test.go: `.Return(f.Mocks.txmStore)`
$DIR/core/web/resolver/features_test.go: `f.App.On("GetConfig").Return(configtest.NewGeneralConfig(t, func(c *chainlink.Config, s *chainlink.Secrets) {
t, f := true, false
c.Feature.UICSAKeys = &f
c.Feature.FeedsManager = &t
}))`
$DIR/core/web/resolver/features_test.go: `c.Feature.UICSAKeys = &f`
$DIR/core/web/resolver/features_test.go: `c.Feature.FeedsManager = &t`
$DIR/core/web/resolver/features_test.go: `.App.On("GetConfig")`
$DIR/core/web/resolver/features_test.go: `.Return(configtest.NewGeneralConfig(t, func(c *chainlink.Config, s *chainlink.Secrets) {
t, f := true, false
c.Feature.UICSAKeys = &f
c.Feature.FeedsManager = &t
}))`
$DIR/core/web/resolver/features_test.go: `.NewGeneralConfig(t, func(c *chainlink.Config, s *chainlink.Secrets) {
t, f := true, false
c.Feature.UICSAKeys = &f
c.Feature.FeedsManager = &t
})`
$DIR/core/web/resolver/feeds_manager_chain_config_test.go: `f.App.On("GetFeedsService").Return(f.Mocks.feedsSvc)`
$DIR/core/web/resolver/feeds_manager_chain_config_test.go: `f.Mocks.feedsSvc.On("CreateChainConfig", mock.Anything, feeds.ChainConfig{
FeedsManagerID: mgrID,
ChainType: feeds.ChainTypeEVM,
ChainID: chainID,
AccountAddress: accountAddr,
AccountAddressPublicKey: null.StringFrom(acctAddrPubKey),
AdminAddress: adminAddr,
FluxMonitorConfig: feeds.FluxMonitorConfig{
Enabled: false,
},
OCR1Config: feeds.OCR1Config{
Enabled: true,
P2PPeerID: peerID,
KeyBundleID: keyBundleID,
},
OCR2Config: feeds.OCR2ConfigModel{
Enabled: true,
P2PPeerID: peerID,
KeyBundleID: keyBundleID,
ForwarderAddress: null.StringFrom(forwarderAddr),
Plugins: feeds.Plugins{
Commit: true,
Execute: true,
Median: false,
Mercury: true,
Rebalancer: true,
},
},
}).Return(cfgID, nil)`
$DIR/core/web/resolver/feeds_manager_chain_config_test.go: `f.Mocks.feedsSvc.On("GetChainConfig", mock.Anything, cfgID).Return(&feeds.ChainConfig{
ID: cfgID,
ChainType: feeds.ChainTypeEVM,
ChainID: chainID,
AccountAddress: accountAddr,
AccountAddressPublicKey: null.StringFrom(acctAddrPubKey),
AdminAddress: adminAddr,
FluxMonitorConfig: feeds.FluxMonitorConfig{
Enabled: false,
},
OCR1Config: feeds.OCR1Config{
Enabled: true,
P2PPeerID: peerID,
KeyBundleID: keyBundleID,
},
OCR2Config: feeds.OCR2ConfigModel{
Enabled: true,
P2PPeerID: peerID,
KeyBundleID: keyBundleID,
ForwarderAddress: null.StringFrom(forwarderAddr),
Plugins: feeds.Plugins{
Commit: true,
Execute: true,
Median: false,
Mercury: true,
Rebalancer: true,
},
},
}, nil)`
$DIR/core/web/resolver/feeds_manager_chain_config_test.go: `f.App.On("GetFeedsService").Return(f.Mocks.feedsSvc)`
$DIR/core/web/resolver/feeds_manager_chain_config_test.go: `f.Mocks.feedsSvc.On("CreateChainConfig", mock.Anything, mock.IsType(feeds.ChainConfig{})).Return(int64(0), sql.ErrNoRows)`
$DIR/core/web/resolver/feeds_manager_chain_config_test.go: `f.App.On("GetFeedsService").Return(f.Mocks.feedsSvc)`
$DIR/core/web/resolver/feeds_manager_chain_config_test.go: `f.Mocks.feedsSvc.On("CreateChainConfig", mock.Anything, mock.IsType(feeds.ChainConfig{})).Return(cfgID, nil)`
$DIR/core/web/resolver/feeds_manager_chain_config_test.go: `f.Mocks.feedsSvc.On("GetChainConfig", mock.Anything, cfgID).Return(nil, sql.ErrNoRows)`
$DIR/core/web/resolver/feeds_manager_chain_config_test.go: `f.App.On("GetFeedsService").Return(f.Mocks.feedsSvc)`
$DIR/core/web/resolver/feeds_manager_chain_config_test.go: `f.Mocks.feedsSvc.On("GetChainConfig", mock.Anything, cfgID).Return(&feeds.ChainConfig{
ID: cfgID,
}, nil)`
$DIR/core/web/resolver/feeds_manager_chain_config_test.go: `f.Mocks.feedsSvc.On("DeleteChainConfig", mock.Anything, cfgID).Return(cfgID, nil)`
$DIR/core/web/resolver/feeds_manager_chain_config_test.go: `f.App.On("GetFeedsService").Return(f.Mocks.feedsSvc)`
$DIR/core/web/resolver/feeds_manager_chain_config_test.go: `f.Mocks.feedsSvc.On("GetChainConfig", mock.Anything, cfgID).Return(nil, sql.ErrNoRows)`
$DIR/core/web/resolver/feeds_manager_chain_config_test.go: `f.App.On("GetFeedsService").Return(f.Mocks.feedsSvc)`
$DIR/core/web/resolver/feeds_manager_chain_config_test.go: `f.Mocks.feedsSvc.On("GetChainConfig", mock.Anything, cfgID).Return(&feeds.ChainConfig{
ID: cfgID,
}, nil)`
$DIR/core/web/resolver/feeds_manager_chain_config_test.go: `f.Mocks.feedsSvc.On("DeleteChainConfig", mock.Anything, cfgID).Return(int64(0), sql.ErrNoRows)`
$DIR/core/web/resolver/feeds_manager_chain_config_test.go: `f.App.On("GetFeedsService").Return(f.Mocks.feedsSvc)`
$DIR/core/web/resolver/feeds_manager_chain_config_test.go: `f.Mocks.feedsSvc.On("UpdateChainConfig", mock.Anything, feeds.ChainConfig{
ID: cfgID,
AccountAddress: accountAddr,
AccountAddressPublicKey: null.StringFrom(accountAddrPubKey),
AdminAddress: adminAddr,
FluxMonitorConfig: feeds.FluxMonitorConfig{
Enabled: false,
},
OCR1Config: feeds.OCR1Config{
Enabled: true,
P2PPeerID: null.StringFrom(peerID.String),
KeyBundleID: null.StringFrom(keyBundleID.String),
},
OCR2Config: feeds.OCR2ConfigModel{
Enabled: true,
P2PPeerID: peerID,
KeyBundleID: keyBundleID,
ForwarderAddress: null.StringFrom(forwarderAddr),
Plugins: feeds.Plugins{
Commit: true,
Execute: true,
Median: false,
Mercury: true,
Rebalancer: true,
},
},
}).Return(cfgID, nil)`
$DIR/core/web/resolver/feeds_manager_chain_config_test.go: `f.Mocks.feedsSvc.On("GetChainConfig", mock.Anything, cfgID).Return(&feeds.ChainConfig{
ID: cfgID,
AccountAddress: accountAddr,
AdminAddress: adminAddr,
AccountAddressPublicKey: null.StringFrom(accountAddrPubKey),
FluxMonitorConfig: feeds.FluxMonitorConfig{
Enabled: false,
},
OCR1Config: feeds.OCR1Config{
Enabled: true,
P2PPeerID: null.StringFrom(peerID.String),
KeyBundleID: null.StringFrom(keyBundleID.String),
},
OCR2Config: feeds.OCR2ConfigModel{
Enabled: true,
P2PPeerID: peerID,
KeyBundleID: keyBundleID,
ForwarderAddress: null.StringFrom(forwarderAddr),
Plugins: feeds.Plugins{
Commit: true,
Execute: true,
Median: false,
Mercury: true,
Rebalancer: true,
},
},
}, nil)`
$DIR/core/web/resolver/feeds_manager_chain_config_test.go: `f.App.On("GetFeedsService").Return(f.Mocks.feedsSvc)`
$DIR/core/web/resolver/feeds_manager_chain_config_test.go: `f.Mocks.feedsSvc.On("UpdateChainConfig", mock.Anything, mock.IsType(feeds.ChainConfig{})).Return(int64(0), sql.ErrNoRows)`
$DIR/core/web/resolver/feeds_manager_chain_config_test.go: `f.App.On("GetFeedsService").Return(f.Mocks.feedsSvc)`
$DIR/core/web/resolver/feeds_manager_chain_config_test.go: `f.Mocks.feedsSvc.On("UpdateChainConfig", mock.Anything, mock.IsType(feeds.ChainConfig{})).Return(cfgID, nil)`
$DIR/core/web/resolver/feeds_manager_chain_config_test.go: `f.Mocks.feedsSvc.On("GetChainConfig", mock.Anything, cfgID).Return(nil, sql.ErrNoRows)`
$DIR/core/web/resolver/feeds_manager_chain_config_test.go: `.StringFrom("p2p_12D3KooWMoejJznyDuEk5aX6GvbjaG12UzeornPCBNzMRqdwrFJw")`
$DIR/core/web/resolver/feeds_manager_chain_config_test.go: `.StringFrom("6fdb8235e16e099de91df7ef8a8088e9deea0ed6ae106b133e5d985a8a9e1562")`
$DIR/core/web/resolver/feeds_manager_chain_config_test.go: `.FromInt64(mgrID)`
$DIR/core/web/resolver/feeds_manager_chain_config_test.go: `.App.On("GetFeedsService")`
$DIR/core/web/resolver/feeds_manager_chain_config_test.go: `.Return(f.Mocks.feedsSvc)`
$DIR/core/web/resolver/feeds_manager_chain_config_test.go: `.Mocks.feedsSvc.On("CreateChainConfig", mock.Anything, feeds.ChainConfig{
FeedsManagerID: mgrID,
ChainType: feeds.ChainTypeEVM,
ChainID: chainID,
AccountAddress: accountAddr,
AccountAddressPublicKey: null.StringFrom(acctAddrPubKey),
AdminAddress: adminAddr,
FluxMonitorConfig: feeds.FluxMonitorConfig{
Enabled: false,
},
OCR1Config: feeds.OCR1Config{
Enabled: true,
P2PPeerID: peerID,
KeyBundleID: keyBundleID,
},
OCR2Config: feeds.OCR2ConfigModel{
Enabled: true,
P2PPeerID: peerID,
KeyBundleID: keyBundleID,
ForwarderAddress: null.StringFrom(forwarderAddr),
Plugins: feeds.Plugins{
Commit: true,
Execute: true,
Median: false,
Mercury: true,
Rebalancer: true,
},
},
})`
$DIR/core/web/resolver/feeds_manager_chain_config_test.go: `.StringFrom(acctAddrPubKey)`
$DIR/core/web/resolver/feeds_manager_chain_config_test.go: `.StringFrom(forwarderAddr)`
$DIR/core/web/resolver/feeds_manager_chain_config_test.go: `.Return(cfgID, nil)`
$DIR/core/web/resolver/feeds_manager_chain_config_test.go: `.Mocks.feedsSvc.On("GetChainConfig", mock.Anything, cfgID)`
$DIR/core/web/resolver/feeds_manager_chain_config_test.go: `.Return(&feeds.ChainConfig{
ID: cfgID,
ChainType: feeds.ChainTypeEVM,
ChainID: chainID,
AccountAddress: accountAddr,
AccountAddressPublicKey: null.StringFrom(acctAddrPubKey),
AdminAddress: adminAddr,
FluxMonitorConfig: feeds.FluxMonitorConfig{
Enabled: false,
},
OCR1Config: feeds.OCR1Config{
Enabled: true,
P2PPeerID: peerID,
KeyBundleID: keyBundleID,
},
OCR2Config: feeds.OCR2ConfigModel{
Enabled: true,
P2PPeerID: peerID,
KeyBundleID: keyBundleID,
ForwarderAddress: null.StringFrom(forwarderAddr),
Plugins: feeds.Plugins{
Commit: true,
Execute: true,
Median: false,
Mercury: true,
Rebalancer: true,
},
},
}, nil)`
$DIR/core/web/resolver/feeds_manager_chain_config_test.go: `.StringFrom(acctAddrPubKey)`
$DIR/core/web/resolver/feeds_manager_chain_config_test.go: `.StringFrom(forwarderAddr)`
$DIR/core/web/resolver/feeds_manager_chain_config_test.go: `.App.On("GetFeedsService")`
$DIR/core/web/resolver/feeds_manager_chain_config_test.go: `.Return(f.Mocks.feedsSvc)`
$DIR/core/web/resolver/feeds_manager_chain_config_test.go: `.Mocks.feedsSvc.On("CreateChainConfig", mock.Anything, mock.IsType(feeds.ChainConfig{}))`
$DIR/core/web/resolver/feeds_manager_chain_config_test.go: `.IsType(feeds.ChainConfig{})`
$DIR/core/web/resolver/feeds_manager_chain_config_test.go: `.Return(int64(0), sql.ErrNoRows)`
$DIR/core/web/resolver/feeds_manager_chain_config_test.go: `.App.On("GetFeedsService")`
$DIR/core/web/resolver/feeds_manager_chain_config_test.go: `.Return(f.Mocks.feedsSvc)`
$DIR/core/web/resolver/feeds_manager_chain_config_test.go: `.Mocks.feedsSvc.On("CreateChainConfig", mock.Anything, mock.IsType(feeds.ChainConfig{}))`
$DIR/core/web/resolver/feeds_manager_chain_config_test.go: `.IsType(feeds.ChainConfig{})`
$DIR/core/web/resolver/feeds_manager_chain_config_test.go: `.Return(cfgID, nil)`
$DIR/core/web/resolver/feeds_manager_chain_config_test.go: `.Mocks.feedsSvc.On("GetChainConfig", mock.Anything, cfgID)`
$DIR/core/web/resolver/feeds_manager_chain_config_test.go: `.Return(nil, sql.ErrNoRows)`
$DIR/core/web/resolver/feeds_manager_chain_config_test.go: `.App.On("GetFeedsService")`
$DIR/core/web/resolver/feeds_manager_chain_config_test.go: `.Return(f.Mocks.feedsSvc)`
$DIR/core/web/resolver/feeds_manager_chain_config_test.go: `.Mocks.feedsSvc.On("GetChainConfig", mock.Anything, cfgID)`
$DIR/core/web/resolver/feeds_manager_chain_config_test.go: `.Return(&feeds.ChainConfig{
ID: cfgID,
}, nil)`
$DIR/core/web/resolver/feeds_manager_chain_config_test.go: `.Mocks.feedsSvc.On("DeleteChainConfig", mock.Anything, cfgID)`
$DIR/core/web/resolver/feeds_manager_chain_config_test.go: `.Return(cfgID, nil)`
$DIR/core/web/resolver/feeds_manager_chain_config_test.go: `.App.On("GetFeedsService")`
$DIR/core/web/resolver/feeds_manager_chain_config_test.go: `.Return(f.Mocks.feedsSvc)`
$DIR/core/web/resolver/feeds_manager_chain_config_test.go: `.Mocks.feedsSvc.On("GetChainConfig", mock.Anything, cfgID)`
$DIR/core/web/resolver/feeds_manager_chain_config_test.go: `.Return(nil, sql.ErrNoRows)`
$DIR/core/web/resolver/feeds_manager_chain_config_test.go: `.App.On("GetFeedsService")`
$DIR/core/web/resolver/feeds_manager_chain_config_test.go: `.Return(f.Mocks.feedsSvc)`
$DIR/core/web/resolver/feeds_manager_chain_config_test.go: `.Mocks.feedsSvc.On("GetChainConfig", mock.Anything, cfgID)`
$DIR/core/web/resolver/feeds_manager_chain_config_test.go: `.Return(&feeds.ChainConfig{
ID: cfgID,
}, nil)`
$DIR/core/web/resolver/feeds_manager_chain_config_test.go: `.Mocks.feedsSvc.On("DeleteChainConfig", mock.Anything, cfgID)`
$DIR/core/web/resolver/feeds_manager_chain_config_test.go: `.Return(int64(0), sql.ErrNoRows)`
$DIR/core/web/resolver/feeds_manager_chain_config_test.go: `.StringFrom("p2p_12D3KooWMoejJznyDuEk5aX6GvbjaG12UzeornPCBNzMRqdwrFJw")`
$DIR/core/web/resolver/feeds_manager_chain_config_test.go: `.StringFrom("6fdb8235e16e099de91df7ef8a8088e9deea0ed6ae106b133e5d985a8a9e1562")`
$DIR/core/web/resolver/feeds_manager_chain_config_test.go: `.App.On("GetFeedsService")`
$DIR/core/web/resolver/feeds_manager_chain_config_test.go: `.Return(f.Mocks.feedsSvc)`
$DIR/core/web/resolver/feeds_manager_chain_config_test.go: `.Mocks.feedsSvc.On("UpdateChainConfig", mock.Anything, feeds.ChainConfig{
ID: cfgID,
AccountAddress: accountAddr,
AccountAddressPublicKey: null.StringFrom(accountAddrPubKey),
AdminAddress: adminAddr,
FluxMonitorConfig: feeds.FluxMonitorConfig{
Enabled: false,
},
OCR1Config: feeds.OCR1Config{
Enabled: true,
P2PPeerID: null.StringFrom(peerID.String),
KeyBundleID: null.StringFrom(keyBundleID.String),
},
OCR2Config: feeds.OCR2ConfigModel{
Enabled: true,
P2PPeerID: peerID,
KeyBundleID: keyBundleID,
ForwarderAddress: null.StringFrom(forwarderAddr),
Plugins: feeds.Plugins{
Commit: true,
Execute: true,
Median: false,
Mercury: true,
Rebalancer: true,
},
},
})`
$DIR/core/web/resolver/feeds_manager_chain_config_test.go: `.StringFrom(accountAddrPubKey)`
$DIR/core/web/resolver/feeds_manager_chain_config_test.go: `.StringFrom(peerID.String)`
$DIR/core/web/resolver/feeds_manager_chain_config_test.go: `.StringFrom(keyBundleID.String)`
$DIR/core/web/resolver/feeds_manager_chain_config_test.go: `.StringFrom(forwarderAddr)`
$DIR/core/web/resolver/feeds_manager_chain_config_test.go: `.Return(cfgID, nil)`
$DIR/core/web/resolver/feeds_manager_chain_config_test.go: `.Mocks.feedsSvc.On("GetChainConfig", mock.Anything, cfgID)`
$DIR/core/web/resolver/feeds_manager_chain_config_test.go: `.Return(&feeds.ChainConfig{
ID: cfgID,
AccountAddress: accountAddr,
AdminAddress: adminAddr,
AccountAddressPublicKey: null.StringFrom(accountAddrPubKey),
FluxMonitorConfig: feeds.FluxMonitorConfig{
Enabled: false,
},
OCR1Config: feeds.OCR1Config{
Enabled: true,
P2PPeerID: null.StringFrom(peerID.String),
KeyBundleID: null.StringFrom(keyBundleID.String),
},
OCR2Config: feeds.OCR2ConfigModel{
Enabled: true,
P2PPeerID: peerID,
KeyBundleID: keyBundleID,
ForwarderAddress: null.StringFrom(forwarderAddr),
Plugins: feeds.Plugins{
Commit: true,
Execute: true,
Median: false,
Mercury: true,
Rebalancer: true,
},
},
}, nil)`
$DIR/core/web/resolver/feeds_manager_chain_config_test.go: `.StringFrom(accountAddrPubKey)`
$DIR/core/web/resolver/feeds_manager_chain_config_test.go: `.StringFrom(peerID.String)`
$DIR/core/web/resolver/feeds_manager_chain_config_test.go: `.StringFrom(keyBundleID.String)`
$DIR/core/web/resolver/feeds_manager_chain_config_test.go: `.StringFrom(forwarderAddr)`
$DIR/core/web/resolver/feeds_manager_chain_config_test.go: `.App.On("GetFeedsService")`
$DIR/core/web/resolver/feeds_manager_chain_config_test.go: `.Return(f.Mocks.feedsSvc)`
$DIR/core/web/resolver/feeds_manager_chain_config_test.go: `.Mocks.feedsSvc.On("UpdateChainConfig", mock.Anything, mock.IsType(feeds.ChainConfig{}))`
$DIR/core/web/resolver/feeds_manager_chain_config_test.go: `.IsType(feeds.ChainConfig{})`
$DIR/core/web/resolver/feeds_manager_chain_config_test.go: `.Return(int64(0), sql.ErrNoRows)`
$DIR/core/web/resolver/feeds_manager_chain_config_test.go: `.App.On("GetFeedsService")`
$DIR/core/web/resolver/feeds_manager_chain_config_test.go: `.Return(f.Mocks.feedsSvc)`
$DIR/core/web/resolver/feeds_manager_chain_config_test.go: `.Mocks.feedsSvc.On("UpdateChainConfig", mock.Anything, mock.IsType(feeds.ChainConfig{}))`
$DIR/core/web/resolver/feeds_manager_chain_config_test.go: `.IsType(feeds.ChainConfig{})`
$DIR/core/web/resolver/feeds_manager_chain_config_test.go: `.Return(cfgID, nil)`
$DIR/core/web/resolver/feeds_manager_chain_config_test.go: `.Mocks.feedsSvc.On("GetChainConfig", mock.Anything, cfgID)`
$DIR/core/web/resolver/feeds_manager_chain_config_test.go: `.Return(nil, sql.ErrNoRows)`
$DIR/core/web/resolver/feeds_manager_test.go: `f.App.On("GetFeedsService").Return(f.Mocks.feedsSvc)`
$DIR/core/web/resolver/feeds_manager_test.go: `f.Mocks.feedsSvc.On("ListJobProposalsByManagersIDs", mock.Anything, []int64{1}).Return([]feeds.JobProposal{
{
ID: int64(100),
FeedsManagerID: int64(1),
Status: feeds.JobProposalStatusApproved,
},
}, nil)`
$DIR/core/web/resolver/feeds_manager_test.go: `f.Mocks.feedsSvc.On("ListManagers", mock.Anything).Return([]feeds.FeedsManager{
{
ID: 1,
Name: "manager1",
URI: "localhost:2000",
PublicKey: *pubKey,
IsConnectionActive: true,
CreatedAt: f.Timestamp(),
},
}, nil)`
$DIR/core/web/resolver/feeds_manager_test.go: `f.App.On("GetFeedsService").Return(f.Mocks.feedsSvc)`
$DIR/core/web/resolver/feeds_manager_test.go: `f.Mocks.feedsSvc.On("GetManager", mock.Anything, mgrID).Return(&feeds.FeedsManager{
ID: mgrID,
Name: "manager1",
URI: "localhost:2000",
PublicKey: *pubKey,
IsConnectionActive: true,
CreatedAt: f.Timestamp(),
}, nil)`
$DIR/core/web/resolver/feeds_manager_test.go: `f.App.On("GetFeedsService").Return(f.Mocks.feedsSvc)`
$DIR/core/web/resolver/feeds_manager_test.go: `f.Mocks.feedsSvc.On("GetManager", mock.Anything, mgrID).Return(nil, sql.ErrNoRows)`
$DIR/core/web/resolver/feeds_manager_test.go: `f.App.On("GetFeedsService").Return(f.Mocks.feedsSvc)`
$DIR/core/web/resolver/feeds_manager_test.go: `f.Mocks.feedsSvc.On("RegisterManager", mock.Anything, feeds.RegisterManagerParams{
Name: name,
URI: uri,
PublicKey: *pubKey,
}).Return(mgrID, nil)`
$DIR/core/web/resolver/feeds_manager_test.go: `f.Mocks.feedsSvc.On("GetManager", mock.Anything, mgrID).Return(&feeds.FeedsManager{
ID: mgrID,
Name: name,
URI: uri,
PublicKey: *pubKey,
IsConnectionActive: false,
CreatedAt: f.Timestamp(),
}, nil)`
$DIR/core/web/resolver/feeds_manager_test.go: `f.App.On("GetFeedsService").Return(f.Mocks.feedsSvc)`
$DIR/core/web/resolver/feeds_manager_test.go: `f.Mocks.feedsSvc.
On("RegisterManager", mock.Anything, mock.IsType(feeds.RegisterManagerParams{})).
Return(int64(0), feeds.ErrSingleFeedsManager)`
$DIR/core/web/resolver/feeds_manager_test.go: `f.App.On("GetFeedsService").Return(f.Mocks.feedsSvc)`
$DIR/core/web/resolver/feeds_manager_test.go: `f.Mocks.feedsSvc.On("RegisterManager", mock.Anything, mock.IsType(feeds.RegisterManagerParams{})).Return(mgrID, nil)`
$DIR/core/web/resolver/feeds_manager_test.go: `f.Mocks.feedsSvc.On("GetManager", mock.Anything, mgrID).Return(nil, sql.ErrNoRows)`
$DIR/core/web/resolver/feeds_manager_test.go: `f.App.On("GetFeedsService").Return(f.Mocks.feedsSvc)`
$DIR/core/web/resolver/feeds_manager_test.go: `f.Mocks.feedsSvc.On("UpdateManager", mock.Anything, feeds.FeedsManager{
ID: mgrID,
Name: name,
URI: uri,
PublicKey: *pubKey,
}).Return(nil)`
$DIR/core/web/resolver/feeds_manager_test.go: `f.Mocks.feedsSvc.On("GetManager", mock.Anything, mgrID).Return(&feeds.FeedsManager{
ID: mgrID,
Name: name,
URI: uri,
PublicKey: *pubKey,
IsConnectionActive: false,
CreatedAt: f.Timestamp(),
}, nil)`
$DIR/core/web/resolver/feeds_manager_test.go: `f.App.On("GetFeedsService").Return(f.Mocks.feedsSvc)`
$DIR/core/web/resolver/feeds_manager_test.go: `f.Mocks.feedsSvc.On("UpdateManager", mock.Anything, mock.IsType(feeds.FeedsManager{})).Return(nil)`
$DIR/core/web/resolver/feeds_manager_test.go: `f.Mocks.feedsSvc.On("GetManager", mock.Anything, mgrID).Return(nil, sql.ErrNoRows)`
$DIR/core/web/resolver/feeds_manager_test.go: `.PublicKeyFromHex("3b0f149627adb7b6fafe1497a9dfc357f22295a5440786c3bc566dfdb0176808")`
$DIR/core/web/resolver/feeds_manager_test.go: `.App.On("GetFeedsService")`
$DIR/core/web/resolver/feeds_manager_test.go: `.Return(f.Mocks.feedsSvc)`
$DIR/core/web/resolver/feeds_manager_test.go: `.Mocks.feedsSvc.On("ListJobProposalsByManagersIDs", mock.Anything, []int64{1})`
$DIR/core/web/resolver/feeds_manager_test.go: `.Return([]feeds.JobProposal{
{
ID: int64(100),
FeedsManagerID: int64(1),
Status: feeds.JobProposalStatusApproved,
},
}, nil)`
$DIR/core/web/resolver/feeds_manager_test.go: `.Mocks.feedsSvc.On("ListManagers", mock.Anything)`
$DIR/core/web/resolver/feeds_manager_test.go: `.Return([]feeds.FeedsManager{
{
ID: 1,
Name: "manager1",
URI: "localhost:2000",
PublicKey: *pubKey,
IsConnectionActive: true,
CreatedAt: f.Timestamp(),
},
}, nil)`
$DIR/core/web/resolver/feeds_manager_test.go: `.Timestamp()`
$DIR/core/web/resolver/feeds_manager_test.go: `.PublicKeyFromHex("3b0f149627adb7b6fafe1497a9dfc357f22295a5440786c3bc566dfdb0176808")`
$DIR/core/web/resolver/feeds_manager_test.go: `.App.On("GetFeedsService")`
$DIR/core/web/resolver/feeds_manager_test.go: `.Return(f.Mocks.feedsSvc)`
$DIR/core/web/resolver/feeds_manager_test.go: `.Mocks.feedsSvc.On("GetManager", mock.Anything, mgrID)`
$DIR/core/web/resolver/feeds_manager_test.go: `.Return(&feeds.FeedsManager{
ID: mgrID,
Name: "manager1",
URI: "localhost:2000",
PublicKey: *pubKey,
IsConnectionActive: true,
CreatedAt: f.Timestamp(),
}, nil)`
$DIR/core/web/resolver/feeds_manager_test.go: `.Timestamp()`
$DIR/core/web/resolver/feeds_manager_test.go: `.App.On("GetFeedsService")`
$DIR/core/web/resolver/feeds_manager_test.go: `.Return(f.Mocks.feedsSvc)`
$DIR/core/web/resolver/feeds_manager_test.go: `.Mocks.feedsSvc.On("GetManager", mock.Anything, mgrID)`
$DIR/core/web/resolver/feeds_manager_test.go: `.Return(nil, sql.ErrNoRows)`
$DIR/core/web/resolver/feeds_manager_test.go: `.PublicKeyFromHex(pubKeyHex)`
$DIR/core/web/resolver/feeds_manager_test.go: `.App.On("GetFeedsService")`
$DIR/core/web/resolver/feeds_manager_test.go: `.Return(f.Mocks.feedsSvc)`
$DIR/core/web/resolver/feeds_manager_test.go: `.Mocks.feedsSvc.On("RegisterManager", mock.Anything, feeds.RegisterManagerParams{
Name: name,
URI: uri,
PublicKey: *pubKey,
})`
$DIR/core/web/resolver/feeds_manager_test.go: `.Return(mgrID, nil)`
$DIR/core/web/resolver/feeds_manager_test.go: `.Mocks.feedsSvc.On("GetManager", mock.Anything, mgrID)`
$DIR/core/web/resolver/feeds_manager_test.go: `.Return(&feeds.FeedsManager{
ID: mgrID,
Name: name,
URI: uri,
PublicKey: *pubKey,
IsConnectionActive: false,
CreatedAt: f.Timestamp(),
}, nil)`
$DIR/core/web/resolver/feeds_manager_test.go: `.Timestamp()`
$DIR/core/web/resolver/feeds_manager_test.go: `.App.On("GetFeedsService")`
$DIR/core/web/resolver/feeds_manager_test.go: `.Return(f.Mocks.feedsSvc)`
$DIR/core/web/resolver/feeds_manager_test.go: `.Mocks.feedsSvc.
On("RegisterManager", mock.Anything, mock.IsType(feeds.RegisterManagerParams{}))`
$DIR/core/web/resolver/feeds_manager_test.go: `.IsType(feeds.RegisterManagerParams{})`
$DIR/core/web/resolver/feeds_manager_test.go: `.
Return(int64(0), feeds.ErrSingleFeedsManager)`
$DIR/core/web/resolver/feeds_manager_test.go: `.App.On("GetFeedsService")`
$DIR/core/web/resolver/feeds_manager_test.go: `.Return(f.Mocks.feedsSvc)`
$DIR/core/web/resolver/feeds_manager_test.go: `.Mocks.feedsSvc.On("RegisterManager", mock.Anything, mock.IsType(feeds.RegisterManagerParams{}))`
$DIR/core/web/resolver/feeds_manager_test.go: `.IsType(feeds.RegisterManagerParams{})`
$DIR/core/web/resolver/feeds_manager_test.go: `.Return(mgrID, nil)`
$DIR/core/web/resolver/feeds_manager_test.go: `.Mocks.feedsSvc.On("GetManager", mock.Anything, mgrID)`
$DIR/core/web/resolver/feeds_manager_test.go: `.Return(nil, sql.ErrNoRows)`
$DIR/core/web/resolver/feeds_manager_test.go: `.PublicKeyFromHex(pubKeyHex)`
$DIR/core/web/resolver/feeds_manager_test.go: `.App.On("GetFeedsService")`
$DIR/core/web/resolver/feeds_manager_test.go: `.Return(f.Mocks.feedsSvc)`
$DIR/core/web/resolver/feeds_manager_test.go: `.Mocks.feedsSvc.On("UpdateManager", mock.Anything, feeds.FeedsManager{
ID: mgrID,
Name: name,
URI: uri,
PublicKey: *pubKey,
})`
$DIR/core/web/resolver/feeds_manager_test.go: `.Return(nil)`
$DIR/core/web/resolver/feeds_manager_test.go: `.Mocks.feedsSvc.On("GetManager", mock.Anything, mgrID)`
$DIR/core/web/resolver/feeds_manager_test.go: `.Return(&feeds.FeedsManager{
ID: mgrID,
Name: name,
URI: uri,
PublicKey: *pubKey,
IsConnectionActive: false,
CreatedAt: f.Timestamp(),
}, nil)`
$DIR/core/web/resolver/feeds_manager_test.go: `.Timestamp()`
$DIR/core/web/resolver/feeds_manager_test.go: `.App.On("GetFeedsService")`
$DIR/core/web/resolver/feeds_manager_test.go: `.Return(f.Mocks.feedsSvc)`
$DIR/core/web/resolver/feeds_manager_test.go: `.Mocks.feedsSvc.On("UpdateManager", mock.Anything, mock.IsType(feeds.FeedsManager{}))`
$DIR/core/web/resolver/feeds_manager_test.go: `.IsType(feeds.FeedsManager{})`
$DIR/core/web/resolver/feeds_manager_test.go: `.Return(nil)`
$DIR/core/web/resolver/feeds_manager_test.go: `.Mocks.feedsSvc.On("GetManager", mock.Anything, mgrID)`
$DIR/core/web/resolver/feeds_manager_test.go: `.Return(nil, sql.ErrNoRows)`
$DIR/core/web/resolver/job_error_test.go: `f.App.On("JobORM").Return(f.Mocks.jobORM)`
$DIR/core/web/resolver/job_error_test.go: `f.Mocks.jobORM.On("FindJobWithoutSpecErrors", mock.Anything, id).Return(job.Job{
ID: int32(1),
}, nil)`
$DIR/core/web/resolver/job_error_test.go: `f.Mocks.jobORM.On("FindSpecErrorsByJobIDs", mock.Anything, []int32{1}, mock.Anything).Return([]job.SpecError{
{
ID: errorID,
Description: "no contract code at given address",
Occurrences: 1,
CreatedAt: f.Timestamp(),
JobID: int32(1),
},
}, nil)`
$DIR/core/web/resolver/job_error_test.go: `f.Mocks.jobORM.On("FindSpecError", mock.Anything, id).Return(job.SpecError{
ID: id,
Occurrences: 5,
Description: "test-description",
CreatedAt: f.Timestamp(),
}, nil)`
$DIR/core/web/resolver/job_error_test.go: `f.Mocks.jobORM.On("DismissError", mock.Anything, id).Return(nil)`
$DIR/core/web/resolver/job_error_test.go: `f.App.On("JobORM").Return(f.Mocks.jobORM)`
$DIR/core/web/resolver/job_error_test.go: `f.Mocks.jobORM.On("FindSpecError", mock.Anything, id).Return(job.SpecError{}, sql.ErrNoRows)`
$DIR/core/web/resolver/job_error_test.go: `f.App.On("JobORM").Return(f.Mocks.jobORM)`
$DIR/core/web/resolver/job_error_test.go: `f.Mocks.jobORM.On("FindSpecError", mock.Anything, id).Return(job.SpecError{}, nil)`
$DIR/core/web/resolver/job_error_test.go: `f.Mocks.jobORM.On("DismissError", mock.Anything, id).Return(sql.ErrNoRows)`
$DIR/core/web/resolver/job_error_test.go: `f.App.On("JobORM").Return(f.Mocks.jobORM)`
$DIR/core/web/resolver/job_error_test.go: `f.Mocks.jobORM.On("FindSpecError", mock.Anything, id).Return(job.SpecError{}, gError)`
$DIR/core/web/resolver/job_error_test.go: `f.App.On("JobORM").Return(f.Mocks.jobORM)`
$DIR/core/web/resolver/job_error_test.go: `f.Mocks.jobORM.On("FindSpecError", mock.Anything, id).Return(job.SpecError{}, nil)`
$DIR/core/web/resolver/job_error_test.go: `f.Mocks.jobORM.On("DismissError", mock.Anything, id).Return(gError)`
$DIR/core/web/resolver/job_error_test.go: `f.App.On("JobORM").Return(f.Mocks.jobORM)`
$DIR/core/web/resolver/job_error_test.go: `.App.On("JobORM")`
$DIR/core/web/resolver/job_error_test.go: `.Return(f.Mocks.jobORM)`
$DIR/core/web/resolver/job_error_test.go: `.Mocks.jobORM.On("FindJobWithoutSpecErrors", mock.Anything, id)`
$DIR/core/web/resolver/job_error_test.go: `.Return(job.Job{
ID: int32(1),
}, nil)`
$DIR/core/web/resolver/job_error_test.go: `.Mocks.jobORM.On("FindSpecErrorsByJobIDs", mock.Anything, []int32{1}, mock.Anything)`
$DIR/core/web/resolver/job_error_test.go: `.Return([]job.SpecError{
{
ID: errorID,
Description: "no contract code at given address",
Occurrences: 1,
CreatedAt: f.Timestamp(),
JobID: int32(1),
},
}, nil)`
$DIR/core/web/resolver/job_error_test.go: `.Timestamp()`
$DIR/core/web/resolver/job_error_test.go: `.Marshal(map[string]interface{}{
"dismissJobError": map[string]interface{}{
"jobError": map[string]interface{}{
"id": "1",
"occurrences": 5,
"description": "test-description",
"createdAt": "2021-01-01T00:00:00Z",
},
},
})`
$DIR/core/web/resolver/job_error_test.go: `.New("error")`
$DIR/core/web/resolver/job_error_test.go: `.ToInt64("asdadada")`
$DIR/core/web/resolver/job_error_test.go: `.Mocks.jobORM.On("FindSpecError", mock.Anything, id)`
$DIR/core/web/resolver/job_error_test.go: `.Return(job.SpecError{
ID: id,
Occurrences: 5,
Description: "test-description",
CreatedAt: f.Timestamp(),
}, nil)`
$DIR/core/web/resolver/job_error_test.go: `.Timestamp()`
$DIR/core/web/resolver/job_error_test.go: `.Mocks.jobORM.On("DismissError", mock.Anything, id)`
$DIR/core/web/resolver/job_error_test.go: `.Return(nil)`
$DIR/core/web/resolver/job_error_test.go: `.App.On("JobORM")`
$DIR/core/web/resolver/job_error_test.go: `.Return(f.Mocks.jobORM)`
$DIR/core/web/resolver/job_error_test.go: `.Mocks.jobORM.On("FindSpecError", mock.Anything, id)`
$DIR/core/web/resolver/job_error_test.go: `.Return(job.SpecError{}, sql.ErrNoRows)`
$DIR/core/web/resolver/job_error_test.go: `.App.On("JobORM")`
$DIR/core/web/resolver/job_error_test.go: `.Return(f.Mocks.jobORM)`
$DIR/core/web/resolver/job_error_test.go: `.Mocks.jobORM.On("FindSpecError", mock.Anything, id)`
$DIR/core/web/resolver/job_error_test.go: `.Return(job.SpecError{}, nil)`
$DIR/core/web/resolver/job_error_test.go: `.Mocks.jobORM.On("DismissError", mock.Anything, id)`
$DIR/core/web/resolver/job_error_test.go: `.Return(sql.ErrNoRows)`
$DIR/core/web/resolver/job_error_test.go: `.App.On("JobORM")`
$DIR/core/web/resolver/job_error_test.go: `.Return(f.Mocks.jobORM)`
$DIR/core/web/resolver/job_error_test.go: `.Mocks.jobORM.On("FindSpecError", mock.Anything, id)`
$DIR/core/web/resolver/job_error_test.go: `.Return(job.SpecError{}, gError)`
$DIR/core/web/resolver/job_error_test.go: `.App.On("JobORM")`
$DIR/core/web/resolver/job_error_test.go: `.Return(f.Mocks.jobORM)`
$DIR/core/web/resolver/job_error_test.go: `.Mocks.jobORM.On("FindSpecError", mock.Anything, id)`
$DIR/core/web/resolver/job_error_test.go: `.Return(job.SpecError{}, nil)`
$DIR/core/web/resolver/job_error_test.go: `.Mocks.jobORM.On("DismissError", mock.Anything, id)`
$DIR/core/web/resolver/job_error_test.go: `.Return(gError)`
$DIR/core/web/resolver/job_error_test.go: `.App.On("JobORM")`
$DIR/core/web/resolver/job_error_test.go: `.Return(f.Mocks.jobORM)`
$DIR/core/web/resolver/job_proposal_spec_test.go: `f.App.On("GetFeedsService").Return(f.Mocks.feedsSvc)`
$DIR/core/web/resolver/job_proposal_spec_test.go: `f.Mocks.feedsSvc.On("ApproveSpec", mock.Anything, specID, false).Return(nil)`
$DIR/core/web/resolver/job_proposal_spec_test.go: `f.Mocks.feedsSvc.On("GetSpec", mock.Anything, specID).Return(&feeds.JobProposalSpec{
ID: specID,
}, nil)`
$DIR/core/web/resolver/job_proposal_spec_test.go: `f.App.On("GetFeedsService").Return(f.Mocks.feedsSvc)`
$DIR/core/web/resolver/job_proposal_spec_test.go: `f.Mocks.feedsSvc.On("ApproveSpec", mock.Anything, specID, false).Return(sql.ErrNoRows)`
$DIR/core/web/resolver/job_proposal_spec_test.go: `f.App.On("GetFeedsService").Return(f.Mocks.feedsSvc)`
$DIR/core/web/resolver/job_proposal_spec_test.go: `f.Mocks.feedsSvc.On("ApproveSpec", mock.Anything, specID, false).Return(nil)`
$DIR/core/web/resolver/job_proposal_spec_test.go: `f.Mocks.feedsSvc.On("GetSpec", mock.Anything, specID).Return(nil, sql.ErrNoRows)`
$DIR/core/web/resolver/job_proposal_spec_test.go: `f.App.On("GetFeedsService").Return(f.Mocks.feedsSvc)`
$DIR/core/web/resolver/job_proposal_spec_test.go: `f.Mocks.feedsSvc.On("ApproveSpec", mock.Anything, specID, false).Return(feeds.ErrJobAlreadyExists)`
$DIR/core/web/resolver/job_proposal_spec_test.go: `f.App.On("GetFeedsService").Return(f.Mocks.feedsSvc)`
$DIR/core/web/resolver/job_proposal_spec_test.go: `f.Mocks.feedsSvc.On("CancelSpec", mock.Anything, specID).Return(nil)`
$DIR/core/web/resolver/job_proposal_spec_test.go: `f.Mocks.feedsSvc.On("GetSpec", mock.Anything, specID).Return(&feeds.JobProposalSpec{
ID: specID,
}, nil)`
$DIR/core/web/resolver/job_proposal_spec_test.go: `f.App.On("GetFeedsService").Return(f.Mocks.feedsSvc)`
$DIR/core/web/resolver/job_proposal_spec_test.go: `f.Mocks.feedsSvc.On("CancelSpec", mock.Anything, specID).Return(sql.ErrNoRows)`
$DIR/core/web/resolver/job_proposal_spec_test.go: `f.App.On("GetFeedsService").Return(f.Mocks.feedsSvc)`
$DIR/core/web/resolver/job_proposal_spec_test.go: `f.Mocks.feedsSvc.On("CancelSpec", mock.Anything, specID).Return(nil)`
$DIR/core/web/resolver/job_proposal_spec_test.go: `f.Mocks.feedsSvc.On("GetSpec", mock.Anything, specID).Return(nil, sql.ErrNoRows)`
$DIR/core/web/resolver/job_proposal_spec_test.go: `f.App.On("GetFeedsService").Return(f.Mocks.feedsSvc)`
$DIR/core/web/resolver/job_proposal_spec_test.go: `f.Mocks.feedsSvc.On("RejectSpec", mock.Anything, specID).Return(nil)`
$DIR/core/web/resolver/job_proposal_spec_test.go: `f.Mocks.feedsSvc.On("GetSpec", mock.Anything, specID).Return(&feeds.JobProposalSpec{
ID: specID,
}, nil)`
$DIR/core/web/resolver/job_proposal_spec_test.go: `f.App.On("GetFeedsService").Return(f.Mocks.feedsSvc)`
$DIR/core/web/resolver/job_proposal_spec_test.go: `f.Mocks.feedsSvc.On("RejectSpec", mock.Anything, specID).Return(sql.ErrNoRows)`
$DIR/core/web/resolver/job_proposal_spec_test.go: `f.App.On("GetFeedsService").Return(f.Mocks.feedsSvc)`
$DIR/core/web/resolver/job_proposal_spec_test.go: `f.Mocks.feedsSvc.On("RejectSpec", mock.Anything, specID).Return(nil)`
$DIR/core/web/resolver/job_proposal_spec_test.go: `f.Mocks.feedsSvc.On("GetSpec", mock.Anything, specID).Return(nil, sql.ErrNoRows)`
$DIR/core/web/resolver/job_proposal_spec_test.go: `f.App.On("GetFeedsService").Return(f.Mocks.feedsSvc)`
$DIR/core/web/resolver/job_proposal_spec_test.go: `f.Mocks.feedsSvc.On("UpdateSpecDefinition", mock.Anything, specID, "").Return(nil)`
$DIR/core/web/resolver/job_proposal_spec_test.go: `f.Mocks.feedsSvc.On("GetSpec", mock.Anything, specID).Return(&feeds.JobProposalSpec{
ID: specID,
}, nil)`
$DIR/core/web/resolver/job_proposal_spec_test.go: `f.App.On("GetFeedsService").Return(f.Mocks.feedsSvc)`
$DIR/core/web/resolver/job_proposal_spec_test.go: `f.Mocks.feedsSvc.On("UpdateSpecDefinition", mock.Anything, specID, "").Return(sql.ErrNoRows)`
$DIR/core/web/resolver/job_proposal_spec_test.go: `f.App.On("GetFeedsService").Return(f.Mocks.feedsSvc)`
$DIR/core/web/resolver/job_proposal_spec_test.go: `f.Mocks.feedsSvc.On("UpdateSpecDefinition", mock.Anything, specID, "").Return(nil)`
$DIR/core/web/resolver/job_proposal_spec_test.go: `f.Mocks.feedsSvc.On("GetSpec", mock.Anything, specID).Return(nil, sql.ErrNoRows)`
$DIR/core/web/resolver/job_proposal_spec_test.go: `f.Mocks.feedsSvc.On("GetJobProposal", mock.Anything, jpID).Return(&feeds.JobProposal{
ID: jpID,
Status: feeds.JobProposalStatusApproved,
FeedsManagerID: 1,
Multiaddrs: []string{"1", "2"},
PendingUpdate: false,
}, nil)`
$DIR/core/web/resolver/job_proposal_spec_test.go: `f.Mocks.feedsSvc.
On("ListSpecsByJobProposalIDs", mock.Anything, []int64{jpID}).
Return(specs, nil)`
$DIR/core/web/resolver/job_proposal_spec_test.go: `f.App.On("GetFeedsService").Return(f.Mocks.feedsSvc)`
$DIR/core/web/resolver/job_proposal_spec_test.go: `.App.On("GetFeedsService")`
$DIR/core/web/resolver/job_proposal_spec_test.go: `.Return(f.Mocks.feedsSvc)`
$DIR/core/web/resolver/job_proposal_spec_test.go: `.Mocks.feedsSvc.On("ApproveSpec", mock.Anything, specID, false)`
$DIR/core/web/resolver/job_proposal_spec_test.go: `.Return(nil)`
$DIR/core/web/resolver/job_proposal_spec_test.go: `.Mocks.feedsSvc.On("GetSpec", mock.Anything, specID)`
$DIR/core/web/resolver/job_proposal_spec_test.go: `.Return(&feeds.JobProposalSpec{
ID: specID,
}, nil)`
$DIR/core/web/resolver/job_proposal_spec_test.go: `.App.On("GetFeedsService")`
$DIR/core/web/resolver/job_proposal_spec_test.go: `.Return(f.Mocks.feedsSvc)`
$DIR/core/web/resolver/job_proposal_spec_test.go: `.Mocks.feedsSvc.On("ApproveSpec", mock.Anything, specID, false)`
$DIR/core/web/resolver/job_proposal_spec_test.go: `.Return(sql.ErrNoRows)`
$DIR/core/web/resolver/job_proposal_spec_test.go: `.App.On("GetFeedsService")`
$DIR/core/web/resolver/job_proposal_spec_test.go: `.Return(f.Mocks.feedsSvc)`
$DIR/core/web/resolver/job_proposal_spec_test.go: `.Mocks.feedsSvc.On("ApproveSpec", mock.Anything, specID, false)`
$DIR/core/web/resolver/job_proposal_spec_test.go: `.Return(nil)`
$DIR/core/web/resolver/job_proposal_spec_test.go: `.Mocks.feedsSvc.On("GetSpec", mock.Anything, specID)`
$DIR/core/web/resolver/job_proposal_spec_test.go: `.Return(nil, sql.ErrNoRows)`
$DIR/core/web/resolver/job_proposal_spec_test.go: `.App.On("GetFeedsService")`
$DIR/core/web/resolver/job_proposal_spec_test.go: `.Return(f.Mocks.feedsSvc)`
$DIR/core/web/resolver/job_proposal_spec_test.go: `.Mocks.feedsSvc.On("ApproveSpec", mock.Anything, specID, false)`
$DIR/core/web/resolver/job_proposal_spec_test.go: `.Return(feeds.ErrJobAlreadyExists)`
$DIR/core/web/resolver/job_proposal_spec_test.go: `.App.On("GetFeedsService")`
$DIR/core/web/resolver/job_proposal_spec_test.go: `.Return(f.Mocks.feedsSvc)`
$DIR/core/web/resolver/job_proposal_spec_test.go: `.Mocks.feedsSvc.On("CancelSpec", mock.Anything, specID)`
$DIR/core/web/resolver/job_proposal_spec_test.go: `.Return(nil)`
$DIR/core/web/resolver/job_proposal_spec_test.go: `.Mocks.feedsSvc.On("GetSpec", mock.Anything, specID)`
$DIR/core/web/resolver/job_proposal_spec_test.go: `.Return(&feeds.JobProposalSpec{
ID: specID,
}, nil)`
$DIR/core/web/resolver/job_proposal_spec_test.go: `.App.On("GetFeedsService")`
$DIR/core/web/resolver/job_proposal_spec_test.go: `.Return(f.Mocks.feedsSvc)`
$DIR/core/web/resolver/job_proposal_spec_test.go: `.Mocks.feedsSvc.On("CancelSpec", mock.Anything, specID)`
$DIR/core/web/resolver/job_proposal_spec_test.go: `.Return(sql.ErrNoRows)`
$DIR/core/web/resolver/job_proposal_spec_test.go: `.App.On("GetFeedsService")`
$DIR/core/web/resolver/job_proposal_spec_test.go: `.Return(f.Mocks.feedsSvc)`
$DIR/core/web/resolver/job_proposal_spec_test.go: `.Mocks.feedsSvc.On("CancelSpec", mock.Anything, specID)`
$DIR/core/web/resolver/job_proposal_spec_test.go: `.Return(nil)`
$DIR/core/web/resolver/job_proposal_spec_test.go: `.Mocks.feedsSvc.On("GetSpec", mock.Anything, specID)`
$DIR/core/web/resolver/job_proposal_spec_test.go: `.Return(nil, sql.ErrNoRows)`
$DIR/core/web/resolver/job_proposal_spec_test.go: `.App.On("GetFeedsService")`
$DIR/core/web/resolver/job_proposal_spec_test.go: `.Return(f.Mocks.feedsSvc)`
$DIR/core/web/resolver/job_proposal_spec_test.go: `.Mocks.feedsSvc.On("RejectSpec", mock.Anything, specID)`
$DIR/core/web/resolver/job_proposal_spec_test.go: `.Return(nil)`
$DIR/core/web/resolver/job_proposal_spec_test.go: `.Mocks.feedsSvc.On("GetSpec", mock.Anything, specID)`
$DIR/core/web/resolver/job_proposal_spec_test.go: `.Return(&feeds.JobProposalSpec{
ID: specID,
}, nil)`
$DIR/core/web/resolver/job_proposal_spec_test.go: `.App.On("GetFeedsService")`
$DIR/core/web/resolver/job_proposal_spec_test.go: `.Return(f.Mocks.feedsSvc)`
$DIR/core/web/resolver/job_proposal_spec_test.go: `.Mocks.feedsSvc.On("RejectSpec", mock.Anything, specID)`
$DIR/core/web/resolver/job_proposal_spec_test.go: `.Return(sql.ErrNoRows)`
$DIR/core/web/resolver/job_proposal_spec_test.go: `.App.On("GetFeedsService")`
$DIR/core/web/resolver/job_proposal_spec_test.go: `.Return(f.Mocks.feedsSvc)`
$DIR/core/web/resolver/job_proposal_spec_test.go: `.Mocks.feedsSvc.On("RejectSpec", mock.Anything, specID)`
$DIR/core/web/resolver/job_proposal_spec_test.go: `.Return(nil)`
$DIR/core/web/resolver/job_proposal_spec_test.go: `.Mocks.feedsSvc.On("GetSpec", mock.Anything, specID)`
$DIR/core/web/resolver/job_proposal_spec_test.go: `.Return(nil, sql.ErrNoRows)`
$DIR/core/web/resolver/job_proposal_spec_test.go: `.App.On("GetFeedsService")`
$DIR/core/web/resolver/job_proposal_spec_test.go: `.Return(f.Mocks.feedsSvc)`
$DIR/core/web/resolver/job_proposal_spec_test.go: `.Mocks.feedsSvc.On("UpdateSpecDefinition", mock.Anything, specID, "")`
$DIR/core/web/resolver/job_proposal_spec_test.go: `.Return(nil)`
$DIR/core/web/resolver/job_proposal_spec_test.go: `.Mocks.feedsSvc.On("GetSpec", mock.Anything, specID)`
$DIR/core/web/resolver/job_proposal_spec_test.go: `.Return(&feeds.JobProposalSpec{
ID: specID,
}, nil)`
$DIR/core/web/resolver/job_proposal_spec_test.go: `.App.On("GetFeedsService")`
$DIR/core/web/resolver/job_proposal_spec_test.go: `.Return(f.Mocks.feedsSvc)`
$DIR/core/web/resolver/job_proposal_spec_test.go: `.Mocks.feedsSvc.On("UpdateSpecDefinition", mock.Anything, specID, "")`
$DIR/core/web/resolver/job_proposal_spec_test.go: `.Return(sql.ErrNoRows)`
$DIR/core/web/resolver/job_proposal_spec_test.go: `.App.On("GetFeedsService")`
$DIR/core/web/resolver/job_proposal_spec_test.go: `.Return(f.Mocks.feedsSvc)`
$DIR/core/web/resolver/job_proposal_spec_test.go: `.Mocks.feedsSvc.On("UpdateSpecDefinition", mock.Anything, specID, "")`
$DIR/core/web/resolver/job_proposal_spec_test.go: `.Return(nil)`
$DIR/core/web/resolver/job_proposal_spec_test.go: `.Mocks.feedsSvc.On("GetSpec", mock.Anything, specID)`
$DIR/core/web/resolver/job_proposal_spec_test.go: `.Return(nil, sql.ErrNoRows)`
$DIR/core/web/resolver/job_proposal_spec_test.go: `.Date(2021, 1, 1, 0, 0, 0, 0, time.UTC)`
$DIR/core/web/resolver/job_proposal_spec_test.go: `.Mocks.feedsSvc.On("GetJobProposal", mock.Anything, jpID)`
$DIR/core/web/resolver/job_proposal_spec_test.go: `.Return(&feeds.JobProposal{
ID: jpID,
Status: feeds.JobProposalStatusApproved,
FeedsManagerID: 1,
Multiaddrs: []string{"1", "2"},
PendingUpdate: false,
}, nil)`
$DIR/core/web/resolver/job_proposal_spec_test.go: `.Mocks.feedsSvc.
On("ListSpecsByJobProposalIDs", mock.Anything, []int64{jpID})`
$DIR/core/web/resolver/job_proposal_spec_test.go: `.
Return(specs, nil)`
$DIR/core/web/resolver/job_proposal_spec_test.go: `.App.On("GetFeedsService")`
$DIR/core/web/resolver/job_proposal_spec_test.go: `.Return(f.Mocks.feedsSvc)`
$DIR/core/web/resolver/job_proposal_test.go: `f.Mocks.feedsSvc.On("ListManagersByIDs", mock.Anything, []int64{1}).Return([]feeds.FeedsManager{
{
ID: 1,
Name: "manager",
},
}, nil)`
$DIR/core/web/resolver/job_proposal_test.go: `f.Mocks.feedsSvc.On("GetJobProposal", mock.Anything, jpID).Return(&feeds.JobProposal{
ID: jpID,
Name: null.StringFrom(name),
Status: feeds.JobProposalStatusApproved,
ExternalJobID: ejID,
RemoteUUID: rUUID,
FeedsManagerID: 1,
Multiaddrs: []string{"1", "2"},
PendingUpdate: false,
}, nil)`
$DIR/core/web/resolver/job_proposal_test.go: `f.App.On("GetFeedsService").Return(f.Mocks.feedsSvc)`
$DIR/core/web/resolver/job_proposal_test.go: `f.Mocks.feedsSvc.On("GetJobProposal", mock.Anything, jpID).Return(nil, sql.ErrNoRows)`
$DIR/core/web/resolver/job_proposal_test.go: `f.App.On("GetFeedsService").Return(f.Mocks.feedsSvc)`
$DIR/core/web/resolver/job_proposal_test.go: `.New()`
$DIR/core/web/resolver/job_proposal_test.go: `.New()`
$DIR/core/web/resolver/job_proposal_test.go: `.Mocks.feedsSvc.On("ListManagersByIDs", mock.Anything, []int64{1})`
$DIR/core/web/resolver/job_proposal_test.go: `.Return([]feeds.FeedsManager{
{
ID: 1,
Name: "manager",
},
}, nil)`
$DIR/core/web/resolver/job_proposal_test.go: `.Mocks.feedsSvc.On("GetJobProposal", mock.Anything, jpID)`
$DIR/core/web/resolver/job_proposal_test.go: `.Return(&feeds.JobProposal{
ID: jpID,
Name: null.StringFrom(name),
Status: feeds.JobProposalStatusApproved,
ExternalJobID: ejID,
RemoteUUID: rUUID,
FeedsManagerID: 1,
Multiaddrs: []string{"1", "2"},
PendingUpdate: false,
}, nil)`
$DIR/core/web/resolver/job_proposal_test.go: `.StringFrom(name)`
$DIR/core/web/resolver/job_proposal_test.go: `.App.On("GetFeedsService")`
$DIR/core/web/resolver/job_proposal_test.go: `.Return(f.Mocks.feedsSvc)`
$DIR/core/web/resolver/job_proposal_test.go: `.Sprintf(result, name, ejID.UUID.String(), rUUID.String())`
$DIR/core/web/resolver/job_proposal_test.go: `.UUID.String()`
$DIR/core/web/resolver/job_proposal_test.go: `.String()`
$DIR/core/web/resolver/job_proposal_test.go: `.Mocks.feedsSvc.On("GetJobProposal", mock.Anything, jpID)`
$DIR/core/web/resolver/job_proposal_test.go: `.Return(nil, sql.ErrNoRows)`
$DIR/core/web/resolver/job_proposal_test.go: `.App.On("GetFeedsService")`
$DIR/core/web/resolver/job_proposal_test.go: `.Return(f.Mocks.feedsSvc)`
$DIR/core/web/resolver/job_run_test.go: `f.Mocks.jobORM.On("PipelineRuns", mock.Anything, (*int32)(nil), PageDefaultOffset, PageDefaultLimit).Return([]pipeline.Run{
{
ID: int64(200),
},
}, 1, nil)`
$DIR/core/web/resolver/job_run_test.go: `f.App.On("JobORM").Return(f.Mocks.jobORM)`
$DIR/core/web/resolver/job_run_test.go: `f.Mocks.jobORM.On("PipelineRuns", mock.Anything, (*int32)(nil), PageDefaultOffset, PageDefaultLimit).Return(nil, 0, gError)`
$DIR/core/web/resolver/job_run_test.go: `f.App.On("JobORM").Return(f.Mocks.jobORM)`
$DIR/core/web/resolver/job_run_test.go: `err = outputs.UnmarshalJSON([]byte(`[{"baz": "bar"}]`))`
$DIR/core/web/resolver/job_run_test.go: `f.Mocks.jobORM.On("FindPipelineRunByID", mock.Anything, int64(2)).Return(pipeline.Run{
ID: 2,
PipelineSpecID: 5,
CreatedAt: f.Timestamp(),
FinishedAt: null.TimeFrom(f.Timestamp()),
AllErrors: pipeline.RunErrors{null.StringFrom("fatal error"), null.String{}},
FatalErrors: pipeline.RunErrors{null.StringFrom("fatal error"), null.String{}},
Inputs: inputs,
Outputs: outputs,
State: pipeline.RunStatusErrored,
}, nil)`
$DIR/core/web/resolver/job_run_test.go: `f.Mocks.jobORM.On("FindJobsByPipelineSpecIDs", mock.Anything, []int32{5}).Return([]job.Job{
{
ID: 1,
PipelineSpecID: 2,
Name: null.StringFrom("first-one"),
},
{
ID: 2,
PipelineSpecID: 5,
Name: null.StringFrom("second-one"),
},
}, nil)`
$DIR/core/web/resolver/job_run_test.go: `f.App.On("JobORM").Return(f.Mocks.jobORM)`
$DIR/core/web/resolver/job_run_test.go: `f.Mocks.jobORM.On("FindPipelineRunByID", mock.Anything, int64(2)).Return(pipeline.Run{}, sql.ErrNoRows)`
$DIR/core/web/resolver/job_run_test.go: `f.App.On("JobORM").Return(f.Mocks.jobORM)`
$DIR/core/web/resolver/job_run_test.go: `f.Mocks.jobORM.On("FindPipelineRunByID", mock.Anything, int64(2)).Return(pipeline.Run{}, gError)`
$DIR/core/web/resolver/job_run_test.go: `f.App.On("JobORM").Return(f.Mocks.jobORM)`
$DIR/core/web/resolver/job_run_test.go: `err = outputs.UnmarshalJSON([]byte(`[{"baz": "bar"}]`))`
$DIR/core/web/resolver/job_run_test.go: `f.App.On("RunJobV2", mock.Anything, id, (map[string]interface{})(nil)).Return(int64(25), nil)`
$DIR/core/web/resolver/job_run_test.go: `f.Mocks.pipelineORM.On("FindRun", mock.Anything, int64(25)).Return(pipeline.Run{
ID: 2,
PipelineSpecID: 5,
CreatedAt: f.Timestamp(),
FinishedAt: null.TimeFrom(f.Timestamp()),
AllErrors: pipeline.RunErrors{null.StringFrom("fatal error"), null.String{}},
FatalErrors: pipeline.RunErrors{null.StringFrom("fatal error"), null.String{}},
Inputs: inputs,
Outputs: outputs,
State: pipeline.RunStatusErrored,
}, nil)`
$DIR/core/web/resolver/job_run_test.go: `f.App.On("PipelineORM").Return(f.Mocks.pipelineORM)`
$DIR/core/web/resolver/job_run_test.go: `f.App.On("RunJobV2", mock.Anything, id, (map[string]interface{})(nil)).Return(int64(25), webhook.ErrJobNotExists)`
$DIR/core/web/resolver/job_run_test.go: `f.App.On("RunJobV2", mock.Anything, id, (map[string]interface{})(nil)).Return(int64(25), gError)`
$DIR/core/web/resolver/job_run_test.go: `f.App.On("RunJobV2", mock.Anything, id, (map[string]interface{})(nil)).Return(int64(25), nil)`
$DIR/core/web/resolver/job_run_test.go: `f.Mocks.pipelineORM.On("FindRun", mock.Anything, int64(25)).Return(pipeline.Run{}, gError)`
$DIR/core/web/resolver/job_run_test.go: `f.App.On("PipelineORM").Return(f.Mocks.pipelineORM)`
$DIR/core/web/resolver/job_run_test.go: `.New("error")`
$DIR/core/web/resolver/job_run_test.go: `.Mocks.jobORM.On("PipelineRuns", mock.Anything, (*int32)(nil), PageDefaultOffset, PageDefaultLimit)`
$DIR/core/web/resolver/job_run_test.go: `.Return([]pipeline.Run{
{
ID: int64(200),
},
}, 1, nil)`
$DIR/core/web/resolver/job_run_test.go: `.App.On("JobORM")`
$DIR/core/web/resolver/job_run_test.go: `.Return(f.Mocks.jobORM)`
$DIR/core/web/resolver/job_run_test.go: `.Mocks.jobORM.On("PipelineRuns", mock.Anything, (*int32)(nil), PageDefaultOffset, PageDefaultLimit)`
$DIR/core/web/resolver/job_run_test.go: `.Return(nil, 0, gError)`
$DIR/core/web/resolver/job_run_test.go: `.App.On("JobORM")`
$DIR/core/web/resolver/job_run_test.go: `.Return(f.Mocks.jobORM)`
$DIR/core/web/resolver/job_run_test.go: `.New("error")`
$DIR/core/web/resolver/job_run_test.go: `.ToInt64("asdasads")`
$DIR/core/web/resolver/job_run_test.go: `.UnmarshalJSON([]byte(`{"foo": "bar"}`))`
$DIR/core/web/resolver/job_run_test.go: `.UnmarshalJSON([]byte(`[{"baz": "bar"}]`))`
$DIR/core/web/resolver/job_run_test.go: `.Mocks.jobORM.On("FindPipelineRunByID", mock.Anything, int64(2))`
$DIR/core/web/resolver/job_run_test.go: `.Return(pipeline.Run{
ID: 2,
PipelineSpecID: 5,
CreatedAt: f.Timestamp(),
FinishedAt: null.TimeFrom(f.Timestamp()),
AllErrors: pipeline.RunErrors{null.StringFrom("fatal error"), null.String{}},
FatalErrors: pipeline.RunErrors{null.StringFrom("fatal error"), null.String{}},
Inputs: inputs,
Outputs: outputs,
State: pipeline.RunStatusErrored,
}, nil)`
$DIR/core/web/resolver/job_run_test.go: `.Timestamp()`
$DIR/core/web/resolver/job_run_test.go: `.TimeFrom(f.Timestamp())`
$DIR/core/web/resolver/job_run_test.go: `.Timestamp()`
$DIR/core/web/resolver/job_run_test.go: `.StringFrom("fatal error")`
$DIR/core/web/resolver/job_run_test.go: `.StringFrom("fatal error")`
$DIR/core/web/resolver/job_run_test.go: `.Mocks.jobORM.On("FindJobsByPipelineSpecIDs", mock.Anything, []int32{5})`
$DIR/core/web/resolver/job_run_test.go: `.Return([]job.Job{
{
ID: 1,
PipelineSpecID: 2,
Name: null.StringFrom("first-one"),
},
{
ID: 2,
PipelineSpecID: 5,
Name: null.StringFrom("second-one"),
},
}, nil)`
$DIR/core/web/resolver/job_run_test.go: `.StringFrom("first-one")`
$DIR/core/web/resolver/job_run_test.go: `.StringFrom("second-one")`
$DIR/core/web/resolver/job_run_test.go: `.App.On("JobORM")`
$DIR/core/web/resolver/job_run_test.go: `.Return(f.Mocks.jobORM)`
$DIR/core/web/resolver/job_run_test.go: `.Mocks.jobORM.On("FindPipelineRunByID", mock.Anything, int64(2))`
$DIR/core/web/resolver/job_run_test.go: `.Return(pipeline.Run{}, sql.ErrNoRows)`
$DIR/core/web/resolver/job_run_test.go: `.App.On("JobORM")`
$DIR/core/web/resolver/job_run_test.go: `.Return(f.Mocks.jobORM)`
$DIR/core/web/resolver/job_run_test.go: `.Mocks.jobORM.On("FindPipelineRunByID", mock.Anything, int64(2))`
$DIR/core/web/resolver/job_run_test.go: `.Return(pipeline.Run{}, gError)`
$DIR/core/web/resolver/job_run_test.go: `.App.On("JobORM")`
$DIR/core/web/resolver/job_run_test.go: `.Return(f.Mocks.jobORM)`
$DIR/core/web/resolver/job_run_test.go: `.FromInt32(id)`
$DIR/core/web/resolver/job_run_test.go: `.UnmarshalJSON([]byte(`{"foo": "bar"}`))`
$DIR/core/web/resolver/job_run_test.go: `.UnmarshalJSON([]byte(`[{"baz": "bar"}]`))`
$DIR/core/web/resolver/job_run_test.go: `.New("error")`
$DIR/core/web/resolver/job_run_test.go: `.ToInt32("some random ID with some specific length that should not work")`
$DIR/core/web/resolver/job_run_test.go: `.App.On("RunJobV2", mock.Anything, id, (map[string]interface{})(nil))`
$DIR/core/web/resolver/job_run_test.go: `.Return(int64(25), nil)`
$DIR/core/web/resolver/job_run_test.go: `.Mocks.pipelineORM.On("FindRun", mock.Anything, int64(25))`
$DIR/core/web/resolver/job_run_test.go: `.Return(pipeline.Run{
ID: 2,
PipelineSpecID: 5,
CreatedAt: f.Timestamp(),
FinishedAt: null.TimeFrom(f.Timestamp()),
AllErrors: pipeline.RunErrors{null.StringFrom("fatal error"), null.String{}},
FatalErrors: pipeline.RunErrors{null.StringFrom("fatal error"), null.String{}},
Inputs: inputs,
Outputs: outputs,
State: pipeline.RunStatusErrored,
}, nil)`
$DIR/core/web/resolver/job_run_test.go: `.Timestamp()`
$DIR/core/web/resolver/job_run_test.go: `.TimeFrom(f.Timestamp())`
$DIR/core/web/resolver/job_run_test.go: `.Timestamp()`
$DIR/core/web/resolver/job_run_test.go: `.StringFrom("fatal error")`
$DIR/core/web/resolver/job_run_test.go: `.StringFrom("fatal error")`
$DIR/core/web/resolver/job_run_test.go: `.App.On("PipelineORM")`
$DIR/core/web/resolver/job_run_test.go: `.Return(f.Mocks.pipelineORM)`
$DIR/core/web/resolver/job_run_test.go: `.App.On("RunJobV2", mock.Anything, id, (map[string]interface{})(nil))`
$DIR/core/web/resolver/job_run_test.go: `.Return(int64(25), webhook.ErrJobNotExists)`
$DIR/core/web/resolver/job_run_test.go: `.App.On("RunJobV2", mock.Anything, id, (map[string]interface{})(nil))`
$DIR/core/web/resolver/job_run_test.go: `.Return(int64(25), gError)`
$DIR/core/web/resolver/job_run_test.go: `.App.On("RunJobV2", mock.Anything, id, (map[string]interface{})(nil))`
$DIR/core/web/resolver/job_run_test.go: `.Return(int64(25), nil)`
$DIR/core/web/resolver/job_run_test.go: `.Mocks.pipelineORM.On("FindRun", mock.Anything, int64(25))`
$DIR/core/web/resolver/job_run_test.go: `.Return(pipeline.Run{}, gError)`
$DIR/core/web/resolver/job_run_test.go: `.App.On("PipelineORM")`
$DIR/core/web/resolver/job_run_test.go: `.Return(f.Mocks.pipelineORM)`
$DIR/core/web/resolver/job_test.go: `f.App.On("JobORM").Return(f.Mocks.jobORM)`
$DIR/core/web/resolver/job_test.go: `f.Mocks.jobORM.On("FindJobs", mock.Anything, 0, 50).Return([]job.Job{
{
ID: 1,
Name: null.StringFrom("job1"),
SchemaVersion: 1,
MaxTaskDuration: models.Interval(1 * time.Second),
ExternalJobID: externalJobID,
CreatedAt: f.Timestamp(),
Type: job.OffchainReporting,
PipelineSpecID: plnSpecID,
OCROracleSpec: &job.OCROracleSpec{},
PipelineSpec: &pipeline.Spec{
DotDagSource: "ds1 [type=bridge name=voter_turnout];",
},
},
}, 1, nil)`
$DIR/core/web/resolver/job_test.go: `f.Mocks.jobORM.
On("FindPipelineRunIDsByJobID", mock.Anything, int32(1), 0, 50).
Return([]int64{200}, nil)`
$DIR/core/web/resolver/job_test.go: `f.Mocks.jobORM.
On("FindPipelineRunsByIDs", mock.Anything, []int64{200}).
Return([]pipeline.Run{{ID: 200}}, nil)`
$DIR/core/web/resolver/job_test.go: `f.Mocks.jobORM.
On("CountPipelineRunsByJobID", mock.Anything, int32(1)).
Return(int32(1), nil)`
$DIR/core/web/resolver/job_test.go: `f.App.On("JobORM").Return(f.Mocks.jobORM)`
$DIR/core/web/resolver/job_test.go: `f.Mocks.jobORM.On("FindJobWithoutSpecErrors", mock.Anything, id).Return(job.Job{
ID: 1,
Name: null.StringFrom("job1"),
SchemaVersion: 1,
GasLimit: clnull.Uint32From(123),
MaxTaskDuration: models.Interval(1 * time.Second),
ExternalJobID: externalJobID,
CreatedAt: f.Timestamp(),
Type: job.OffchainReporting,
OCROracleSpec: &job.OCROracleSpec{},
PipelineSpec: &pipeline.Spec{
DotDagSource: "ds1 [type=bridge name=voter_turnout];",
},
}, nil)`
$DIR/core/web/resolver/job_test.go: `f.Mocks.jobORM.
On("FindPipelineRunIDsByJobID", mock.Anything, int32(1), 0, 50).
Return([]int64{200}, nil)`
$DIR/core/web/resolver/job_test.go: `f.Mocks.jobORM.
On("FindPipelineRunsByIDs", mock.Anything, []int64{200}).
Return([]pipeline.Run{{ID: 200}}, nil)`
$DIR/core/web/resolver/job_test.go: `f.Mocks.jobORM.
On("CountPipelineRunsByJobID", mock.Anything, int32(1)).
Return(int32(1), nil)`
$DIR/core/web/resolver/job_test.go: `f.App.On("JobORM").Return(f.Mocks.jobORM)`
$DIR/core/web/resolver/job_test.go: `f.Mocks.jobORM.On("FindJobWithoutSpecErrors", mock.Anything, id).Return(job.Job{}, sql.ErrNoRows)`
$DIR/core/web/resolver/job_test.go: `f.App.On("JobORM").Return(f.Mocks.jobORM)`
$DIR/core/web/resolver/job_test.go: `f.Mocks.jobORM.On("FindJobWithoutSpecErrors", mock.Anything, id).Return(job.Job{
ID: 1,
Name: null.StringFrom("job1"),
SchemaVersion: 1,
GasLimit: clnull.Uint32From(123),
MaxTaskDuration: models.Interval(1 * time.Second),
ExternalJobID: externalJobID,
CreatedAt: f.Timestamp(),
Type: job.OffchainReporting,
OCROracleSpec: &job.OCROracleSpec{},
PipelineSpec: &pipeline.Spec{
DotDagSource: "ds1 [type=bridge name=voter_turnout];",
},
}, chains.ErrNoSuchChainID)`
$DIR/core/web/resolver/job_test.go: `f.Mocks.jobORM.
On("FindPipelineRunIDsByJobID", mock.Anything, int32(1), 0, 50).
Return([]int64{200}, nil)`
$DIR/core/web/resolver/job_test.go: `f.Mocks.jobORM.
On("FindPipelineRunsByIDs", mock.Anything, []int64{200}).
Return([]pipeline.Run{{ID: 200}}, nil)`
$DIR/core/web/resolver/job_test.go: `f.Mocks.jobORM.
On("CountPipelineRunsByJobID", mock.Anything, int32(1)).
Return(int32(1), nil)`
$DIR/core/web/resolver/job_test.go: `f.App.On("GetConfig").Return(f.Mocks.cfg)`
$DIR/core/web/resolver/job_test.go: `f.App.On("AddJobV2", mock.Anything, &jb).Return(nil)`
$DIR/core/web/resolver/job_test.go: `f.App.On("GetConfig").Return(f.Mocks.cfg)`
$DIR/core/web/resolver/job_test.go: `f.App.On("AddJobV2", mock.Anything, &jb).Return(gError)`
$DIR/core/web/resolver/job_test.go: `f.Mocks.jobORM.On("FindJobWithoutSpecErrors", mock.Anything, id).Return(job.Job{
ID: id,
Name: null.StringFrom("test-job"),
ExternalJobID: extJID,
MaxTaskDuration: models.Interval(2 * time.Second),
CreatedAt: f.Timestamp(),
}, nil)`
$DIR/core/web/resolver/job_test.go: `f.App.On("JobORM").Return(f.Mocks.jobORM)`
$DIR/core/web/resolver/job_test.go: `f.App.On("DeleteJob", mock.Anything, id).Return(nil)`
$DIR/core/web/resolver/job_test.go: `f.Mocks.jobORM.On("FindJobWithoutSpecErrors", mock.Anything, id).Return(job.Job{}, sql.ErrNoRows)`
$DIR/core/web/resolver/job_test.go: `f.App.On("JobORM").Return(f.Mocks.jobORM)`
$DIR/core/web/resolver/job_test.go: `f.Mocks.jobORM.On("FindJobWithoutSpecErrors", mock.Anything, id).Return(job.Job{}, nil)`
$DIR/core/web/resolver/job_test.go: `f.App.On("JobORM").Return(f.Mocks.jobORM)`
$DIR/core/web/resolver/job_test.go: `f.App.On("DeleteJob", mock.Anything, id).Return(sql.ErrNoRows)`
$DIR/core/web/resolver/job_test.go: `f.Mocks.jobORM.On("FindJobWithoutSpecErrors", mock.Anything, id).Return(job.Job{}, gError)`
$DIR/core/web/resolver/job_test.go: `f.App.On("JobORM").Return(f.Mocks.jobORM)`
$DIR/core/web/resolver/job_test.go: `f.Mocks.jobORM.On("FindJobWithoutSpecErrors", mock.Anything, id).Return(job.Job{}, nil)`
$DIR/core/web/resolver/job_test.go: `f.App.On("JobORM").Return(f.Mocks.jobORM)`
$DIR/core/web/resolver/job_test.go: `f.App.On("DeleteJob", mock.Anything, id).Return(gError)`
$DIR/core/web/resolver/job_test.go: `.MustParse(("00000000-0000-0000-0000-000000000001"))`
$DIR/core/web/resolver/job_test.go: `.App.On("JobORM")`
$DIR/core/web/resolver/job_test.go: `.Return(f.Mocks.jobORM)`
$DIR/core/web/resolver/job_test.go: `.Mocks.jobORM.On("FindJobs", mock.Anything, 0, 50)`
$DIR/core/web/resolver/job_test.go: `.Return([]job.Job{
{
ID: 1,
Name: null.StringFrom("job1"),
SchemaVersion: 1,
MaxTaskDuration: models.Interval(1 * time.Second),
ExternalJobID: externalJobID,
CreatedAt: f.Timestamp(),
Type: job.OffchainReporting,
PipelineSpecID: plnSpecID,
OCROracleSpec: &job.OCROracleSpec{},
PipelineSpec: &pipeline.Spec{
DotDagSource: "ds1 [type=bridge name=voter_turnout];",
},
},
}, 1, nil)`
$DIR/core/web/resolver/job_test.go: `.StringFrom("job1")`
$DIR/core/web/resolver/job_test.go: `.Interval(1 * time.Second)`
$DIR/core/web/resolver/job_test.go: `.Timestamp()`
$DIR/core/web/resolver/job_test.go: `.Mocks.jobORM.
On("FindPipelineRunIDsByJobID", mock.Anything, int32(1), 0, 50)`
$DIR/core/web/resolver/job_test.go: `.
Return([]int64{200}, nil)`
$DIR/core/web/resolver/job_test.go: `.Mocks.jobORM.
On("FindPipelineRunsByIDs", mock.Anything, []int64{200})`
$DIR/core/web/resolver/job_test.go: `.
Return([]pipeline.Run{{ID: 200}}, nil)`
$DIR/core/web/resolver/job_test.go: `.Mocks.jobORM.
On("CountPipelineRunsByJobID", mock.Anything, int32(1))`
$DIR/core/web/resolver/job_test.go: `.
Return(int32(1), nil)`
$DIR/core/web/resolver/job_test.go: `.MustParse(("00000000-0000-0000-0000-000000000001"))`
$DIR/core/web/resolver/job_test.go: `.App.On("JobORM")`
$DIR/core/web/resolver/job_test.go: `.Return(f.Mocks.jobORM)`
$DIR/core/web/resolver/job_test.go: `.Mocks.jobORM.On("FindJobWithoutSpecErrors", mock.Anything, id)`
$DIR/core/web/resolver/job_test.go: `.Return(job.Job{
ID: 1,
Name: null.StringFrom("job1"),
SchemaVersion: 1,
GasLimit: clnull.Uint32From(123),
MaxTaskDuration: models.Interval(1 * time.Second),
ExternalJobID: externalJobID,
CreatedAt: f.Timestamp(),
Type: job.OffchainReporting,
OCROracleSpec: &job.OCROracleSpec{},
PipelineSpec: &pipeline.Spec{
DotDagSource: "ds1 [type=bridge name=voter_turnout];",
},
}, nil)`
$DIR/core/web/resolver/job_test.go: `.StringFrom("job1")`
$DIR/core/web/resolver/job_test.go: `.Uint32From(123)`
$DIR/core/web/resolver/job_test.go: `.Interval(1 * time.Second)`
$DIR/core/web/resolver/job_test.go: `.Timestamp()`
$DIR/core/web/resolver/job_test.go: `.Mocks.jobORM.
On("FindPipelineRunIDsByJobID", mock.Anything, int32(1), 0, 50)`
$DIR/core/web/resolver/job_test.go: `.
Return([]int64{200}, nil)`
$DIR/core/web/resolver/job_test.go: `.Mocks.jobORM.
On("FindPipelineRunsByIDs", mock.Anything, []int64{200})`
$DIR/core/web/resolver/job_test.go: `.
Return([]pipeline.Run{{ID: 200}}, nil)`
$DIR/core/web/resolver/job_test.go: `.Mocks.jobORM.
On("CountPipelineRunsByJobID", mock.Anything, int32(1))`
$DIR/core/web/resolver/job_test.go: `.
Return(int32(1), nil)`
$DIR/core/web/resolver/job_test.go: `.App.On("JobORM")`
$DIR/core/web/resolver/job_test.go: `.Return(f.Mocks.jobORM)`
$DIR/core/web/resolver/job_test.go: `.Mocks.jobORM.On("FindJobWithoutSpecErrors", mock.Anything, id)`
$DIR/core/web/resolver/job_test.go: `.Return(job.Job{}, sql.ErrNoRows)`
$DIR/core/web/resolver/job_test.go: `.App.On("JobORM")`
$DIR/core/web/resolver/job_test.go: `.Return(f.Mocks.jobORM)`
$DIR/core/web/resolver/job_test.go: `.Mocks.jobORM.On("FindJobWithoutSpecErrors", mock.Anything, id)`
$DIR/core/web/resolver/job_test.go: `.Return(job.Job{
ID: 1,
Name: null.StringFrom("job1"),
SchemaVersion: 1,
GasLimit: clnull.Uint32From(123),
MaxTaskDuration: models.Interval(1 * time.Second),
ExternalJobID: externalJobID,
CreatedAt: f.Timestamp(),
Type: job.OffchainReporting,
OCROracleSpec: &job.OCROracleSpec{},
PipelineSpec: &pipeline.Spec{
DotDagSource: "ds1 [type=bridge name=voter_turnout];",
},
}, chains.ErrNoSuchChainID)`
$DIR/core/web/resolver/job_test.go: `.StringFrom("job1")`
$DIR/core/web/resolver/job_test.go: `.Uint32From(123)`
$DIR/core/web/resolver/job_test.go: `.Interval(1 * time.Second)`
$DIR/core/web/resolver/job_test.go: `.Timestamp()`
$DIR/core/web/resolver/job_test.go: `.Mocks.jobORM.
On("FindPipelineRunIDsByJobID", mock.Anything, int32(1), 0, 50)`
$DIR/core/web/resolver/job_test.go: `.
Return([]int64{200}, nil)`
$DIR/core/web/resolver/job_test.go: `.Mocks.jobORM.
On("FindPipelineRunsByIDs", mock.Anything, []int64{200})`
$DIR/core/web/resolver/job_test.go: `.
Return([]pipeline.Run{{ID: 200}}, nil)`
$DIR/core/web/resolver/job_test.go: `.Mocks.jobORM.
On("CountPipelineRunsByJobID", mock.Anything, int32(1))`
$DIR/core/web/resolver/job_test.go: `.
Return(int32(1), nil)`
$DIR/core/web/resolver/job_test.go: `.New()`
$DIR/core/web/resolver/job_test.go: `.Sprintf(testspecs.DirectRequestSpecTemplate, uuid, uuid)`
$DIR/core/web/resolver/job_test.go: `.ValidatedDirectRequestSpec(spec)`
$DIR/core/web/resolver/job_test.go: `.Marshal(map[string]interface{}{
"createJob": map[string]interface{}{
"job": map[string]interface{}{
"id": "0",
"maxTaskDuration": "0s",
"name": jb.Name,
"schemaVersion": 1,
"createdAt": "0001-01-01T00:00:00Z",
"externalJobID": jb.ExternalJobID.String(),
},
},
})`
$DIR/core/web/resolver/job_test.go: `.ExternalJobID.String()`
$DIR/core/web/resolver/job_test.go: `.New("error")`
$DIR/core/web/resolver/job_test.go: `.App.On("GetConfig")`
$DIR/core/web/resolver/job_test.go: `.Return(f.Mocks.cfg)`
$DIR/core/web/resolver/job_test.go: `.App.On("AddJobV2", mock.Anything, &jb)`
$DIR/core/web/resolver/job_test.go: `.Return(nil)`
$DIR/core/web/resolver/job_test.go: `.App.On("GetConfig")`
$DIR/core/web/resolver/job_test.go: `.Return(f.Mocks.cfg)`
$DIR/core/web/resolver/job_test.go: `.App.On("AddJobV2", mock.Anything, &jb)`
$DIR/core/web/resolver/job_test.go: `.Return(gError)`
$DIR/core/web/resolver/job_test.go: `.New()`
$DIR/core/web/resolver/job_test.go: `.Marshal(map[string]interface{}{
"deleteJob": map[string]interface{}{
"job": map[string]interface{}{
"id": "123",
"maxTaskDuration": "2s",
"name": "test-job",
"schemaVersion": 0,
"createdAt": "2021-01-01T00:00:00Z",
"externalJobID": extJID.String(),
},
},
})`
$DIR/core/web/resolver/job_test.go: `.String()`
$DIR/core/web/resolver/job_test.go: `.New("error")`
$DIR/core/web/resolver/job_test.go: `.ToInt64("asdadada")`
$DIR/core/web/resolver/job_test.go: `.Mocks.jobORM.On("FindJobWithoutSpecErrors", mock.Anything, id)`
$DIR/core/web/resolver/job_test.go: `.Return(job.Job{
ID: id,
Name: null.StringFrom("test-job"),
ExternalJobID: extJID,
MaxTaskDuration: models.Interval(2 * time.Second),
CreatedAt: f.Timestamp(),
}, nil)`
$DIR/core/web/resolver/job_test.go: `.StringFrom("test-job")`
$DIR/core/web/resolver/job_test.go: `.Interval(2 * time.Second)`
$DIR/core/web/resolver/job_test.go: `.Timestamp()`
$DIR/core/web/resolver/job_test.go: `.App.On("JobORM")`
$DIR/core/web/resolver/job_test.go: `.Return(f.Mocks.jobORM)`
$DIR/core/web/resolver/job_test.go: `.App.On("DeleteJob", mock.Anything, id)`
$DIR/core/web/resolver/job_test.go: `.Return(nil)`
$DIR/core/web/resolver/job_test.go: `.Mocks.jobORM.On("FindJobWithoutSpecErrors", mock.Anything, id)`
$DIR/core/web/resolver/job_test.go: `.Return(job.Job{}, sql.ErrNoRows)`
$DIR/core/web/resolver/job_test.go: `.App.On("JobORM")`
$DIR/core/web/resolver/job_test.go: `.Return(f.Mocks.jobORM)`
$DIR/core/web/resolver/job_test.go: `.Mocks.jobORM.On("FindJobWithoutSpecErrors", mock.Anything, id)`
$DIR/core/web/resolver/job_test.go: `.Return(job.Job{}, nil)`
$DIR/core/web/resolver/job_test.go: `.App.On("JobORM")`
$DIR/core/web/resolver/job_test.go: `.Return(f.Mocks.jobORM)`
$DIR/core/web/resolver/job_test.go: `.App.On("DeleteJob", mock.Anything, id)`
$DIR/core/web/resolver/job_test.go: `.Return(sql.ErrNoRows)`
$DIR/core/web/resolver/job_test.go: `.Mocks.jobORM.On("FindJobWithoutSpecErrors", mock.Anything, id)`
$DIR/core/web/resolver/job_test.go: `.Return(job.Job{}, gError)`
$DIR/core/web/resolver/job_test.go: `.App.On("JobORM")`
$DIR/core/web/resolver/job_test.go: `.Return(f.Mocks.jobORM)`
$DIR/core/web/resolver/job_test.go: `.Mocks.jobORM.On("FindJobWithoutSpecErrors", mock.Anything, id)`
$DIR/core/web/resolver/job_test.go: `.Return(job.Job{}, nil)`
$DIR/core/web/resolver/job_test.go: `.App.On("JobORM")`
$DIR/core/web/resolver/job_test.go: `.Return(f.Mocks.jobORM)`
$DIR/core/web/resolver/job_test.go: `.App.On("DeleteJob", mock.Anything, id)`
$DIR/core/web/resolver/job_test.go: `.Return(gError)`
$DIR/core/web/resolver/log_test.go: `f.Mocks.cfg.On("SetLogSQL", true).Return(nil)`
$DIR/core/web/resolver/log_test.go: `f.App.On("GetConfig").Return(f.Mocks.cfg)`
$DIR/core/web/resolver/log_test.go: `f.Mocks.cfg.On("Database").Return(&databaseConfig{logSQL: false})`
$DIR/core/web/resolver/log_test.go: `f.App.On("GetConfig").Return(f.Mocks.cfg)`
$DIR/core/web/resolver/log_test.go: `f.Mocks.cfg.On("Log").Return(&log{level: warnLvl})`
$DIR/core/web/resolver/log_test.go: `f.App.On("GetConfig").Return(f.Mocks.cfg)`
$DIR/core/web/resolver/log_test.go: `f.App.On("SetLogLevel", errorLvl).Return(nil)`
$DIR/core/web/resolver/log_test.go: `f.App.On("SetLogLevel", errorLvl).Return(gError)`
$DIR/core/web/resolver/log_test.go: `.Mocks.cfg.On("SetLogSQL", true)`
$DIR/core/web/resolver/log_test.go: `.Return(nil)`
$DIR/core/web/resolver/log_test.go: `.App.On("GetConfig")`
$DIR/core/web/resolver/log_test.go: `.Return(f.Mocks.cfg)`
$DIR/core/web/resolver/log_test.go: `.Mocks.cfg.On("Database")`
$DIR/core/web/resolver/log_test.go: `.Return(&databaseConfig{logSQL: false})`
$DIR/core/web/resolver/log_test.go: `.App.On("GetConfig")`
$DIR/core/web/resolver/log_test.go: `.Return(f.Mocks.cfg)`
$DIR/core/web/resolver/log_test.go: `.UnmarshalText([]byte("warn"))`
$DIR/core/web/resolver/log_test.go: `.Mocks.cfg.On("Log")`
$DIR/core/web/resolver/log_test.go: `.Return(&log{level: warnLvl})`
$DIR/core/web/resolver/log_test.go: `.App.On("GetConfig")`
$DIR/core/web/resolver/log_test.go: `.Return(f.Mocks.cfg)`
$DIR/core/web/resolver/log_test.go: `.UnmarshalText([]byte("error"))`
$DIR/core/web/resolver/log_test.go: `.New("error")`
$DIR/core/web/resolver/log_test.go: `.App.On("SetLogLevel", errorLvl)`
$DIR/core/web/resolver/log_test.go: `.Return(nil)`
$DIR/core/web/resolver/log_test.go: `.App.On("SetLogLevel", errorLvl)`
$DIR/core/web/resolver/log_test.go: `.Return(gError)`
$DIR/core/web/resolver/node_test.go: `f.App.On("GetRelayers").Return(&chainlinkmocks.FakeRelayerChainInteroperators{
Nodes: []types.NodeStatus{
{
ChainID: "1",
Name: "node-name",
Config: "Name='node-name'\nOrder=11\nHTTPURL='http://some-url'\nWSURL='ws://some-url'",
State: "alive",
},
},
Relayers: []loop.Relayer{
testutils.MockRelayer{ChainStatus: types.ChainStatus{
ID: "1",
Enabled: true,
Config: "",
}},
},
})`
$DIR/core/web/resolver/node_test.go: `f.Mocks.relayerChainInterops.NodesErr = gError`
$DIR/core/web/resolver/node_test.go: `f.App.On("GetRelayers").Return(f.Mocks.relayerChainInterops)`
$DIR/core/web/resolver/node_test.go: `f.App.On("GetRelayers").Return(&chainlinkmocks.FakeRelayerChainInteroperators{Relayers: []loop.Relayer{
testutils.MockRelayer{NodeStatuses: []types.NodeStatus{
{
Name: "node-name",
Config: "Name='node-name'\nOrder=11\nHTTPURL='http://some-url'\nWSURL='ws://some-url'",
},
}},
}})`
$DIR/core/web/resolver/node_test.go: `f.App.On("GetRelayers").Return(&chainlinkmocks.FakeRelayerChainInteroperators{Relayers: []loop.Relayer{}})`
$DIR/core/web/resolver/node_test.go: `.New("error")`
$DIR/core/web/resolver/node_test.go: `.App.On("GetRelayers")`
$DIR/core/web/resolver/node_test.go: `.Return(&chainlinkmocks.FakeRelayerChainInteroperators{
Nodes: []types.NodeStatus{
{
ChainID: "1",
Name: "node-name",
Config: "Name='node-name'\nOrder=11\nHTTPURL='http://some-url'\nWSURL='ws://some-url'",
State: "alive",
},
},
Relayers: []loop.Relayer{
testutils.MockRelayer{ChainStatus: types.ChainStatus{
ID: "1",
Enabled: true,
Config: "",
}},
},
})`
$DIR/core/web/resolver/node_test.go: `.App.On("GetRelayers")`
$DIR/core/web/resolver/node_test.go: `.Return(f.Mocks.relayerChainInterops)`
$DIR/core/web/resolver/node_test.go: `.App.On("GetRelayers")`
$DIR/core/web/resolver/node_test.go: `.Return(&chainlinkmocks.FakeRelayerChainInteroperators{Relayers: []loop.Relayer{
testutils.MockRelayer{NodeStatuses: []types.NodeStatus{
{
Name: "node-name",
Config: "Name='node-name'\nOrder=11\nHTTPURL='http://some-url'\nWSURL='ws://some-url'",
},
}},
}})`
$DIR/core/web/resolver/node_test.go: `.App.On("GetRelayers")`
$DIR/core/web/resolver/node_test.go: `.Return(&chainlinkmocks.FakeRelayerChainInteroperators{Relayers: []loop.Relayer{}})`
$DIR/core/web/resolver/ocr2_keys_test.go: `expectedBundles = append(expectedBundles, map[string]interface{}{
"id": k.ID(),
"chainType": ct,
"onChainPublicKey": fmt.Sprintf("ocr2on_%s_%s", k.ChainType(), k.OnChainPublicKey()),
"configPublicKey": fmt.Sprintf("ocr2cfg_%s_%s", k.ChainType(), hex.EncodeToString(configPublic[:])),
"offChainPublicKey": fmt.Sprintf("ocr2off_%s_%s", k.ChainType(), hex.EncodeToString(pubKey[:])),
})`
$DIR/core/web/resolver/ocr2_keys_test.go: `f.Mocks.ocr2.On("GetAll").Return(fakeKeys, nil)`
$DIR/core/web/resolver/ocr2_keys_test.go: `f.Mocks.keystore.On("OCR2").Return(f.Mocks.ocr2)`
$DIR/core/web/resolver/ocr2_keys_test.go: `f.App.On("GetKeyStore").Return(f.Mocks.keystore)`
$DIR/core/web/resolver/ocr2_keys_test.go: `f.Mocks.ocr2.On("GetAll").Return(nil, gError)`
$DIR/core/web/resolver/ocr2_keys_test.go: `f.Mocks.keystore.On("OCR2").Return(f.Mocks.ocr2)`
$DIR/core/web/resolver/ocr2_keys_test.go: `f.App.On("GetKeyStore").Return(f.Mocks.keystore)`
$DIR/core/web/resolver/ocr2_keys_test.go: `f.Mocks.ocr2.On("Create", mock.Anything, chaintype.ChainType("evm")).Return(fakeKey, nil)`
$DIR/core/web/resolver/ocr2_keys_test.go: `f.Mocks.keystore.On("OCR2").Return(f.Mocks.ocr2)`
$DIR/core/web/resolver/ocr2_keys_test.go: `f.App.On("GetKeyStore").Return(f.Mocks.keystore)`
$DIR/core/web/resolver/ocr2_keys_test.go: `f.Mocks.ocr2.On("Create", mock.Anything, chaintype.ChainType("evm")).Return(nil, gError)`
$DIR/core/web/resolver/ocr2_keys_test.go: `f.Mocks.keystore.On("OCR2").Return(f.Mocks.ocr2)`
$DIR/core/web/resolver/ocr2_keys_test.go: `f.App.On("GetKeyStore").Return(f.Mocks.keystore)`
$DIR/core/web/resolver/ocr2_keys_test.go: `f.Mocks.ocr2.On("Delete", mock.Anything, fakeKey.ID()).Return(nil)`
$DIR/core/web/resolver/ocr2_keys_test.go: `f.Mocks.ocr2.On("Get", fakeKey.ID()).Return(fakeKey, nil)`
$DIR/core/web/resolver/ocr2_keys_test.go: `f.Mocks.keystore.On("OCR2").Return(f.Mocks.ocr2)`
$DIR/core/web/resolver/ocr2_keys_test.go: `f.App.On("GetKeyStore").Return(f.Mocks.keystore)`
$DIR/core/web/resolver/ocr2_keys_test.go: `f.Mocks.ocr2.On("Get", fakeKey.ID()).Return(fakeKey, gError)`
$DIR/core/web/resolver/ocr2_keys_test.go: `f.Mocks.keystore.On("OCR2").Return(f.Mocks.ocr2)`
$DIR/core/web/resolver/ocr2_keys_test.go: `f.App.On("GetKeyStore").Return(f.Mocks.keystore)`
$DIR/core/web/resolver/ocr2_keys_test.go: `f.Mocks.ocr2.On("Delete", mock.Anything, fakeKey.ID()).Return(gError)`
$DIR/core/web/resolver/ocr2_keys_test.go: `f.Mocks.ocr2.On("Get", fakeKey.ID()).Return(fakeKey, nil)`
$DIR/core/web/resolver/ocr2_keys_test.go: `f.Mocks.keystore.On("OCR2").Return(f.Mocks.ocr2)`
$DIR/core/web/resolver/ocr2_keys_test.go: `f.App.On("GetKeyStore").Return(f.Mocks.keystore)`
$DIR/core/web/resolver/ocr2_keys_test.go: `.New("error")`
$DIR/core/web/resolver/ocr2_keys_test.go: `.MustNewInsecure(keystest.NewRandReaderFromSeed(1), "evm")`
$DIR/core/web/resolver/ocr2_keys_test.go: `.NewRandReaderFromSeed(1)`
$DIR/core/web/resolver/ocr2_keys_test.go: `.MustNewInsecure(keystest.NewRandReaderFromSeed(1), "cosmos")`
$DIR/core/web/resolver/ocr2_keys_test.go: `.NewRandReaderFromSeed(1)`
$DIR/core/web/resolver/ocr2_keys_test.go: `.MustNewInsecure(keystest.NewRandReaderFromSeed(1), "solana")`
$DIR/core/web/resolver/ocr2_keys_test.go: `.NewRandReaderFromSeed(1)`
$DIR/core/web/resolver/ocr2_keys_test.go: `.MustNewInsecure(keystest.NewRandReaderFromSeed(1), "starknet")`
$DIR/core/web/resolver/ocr2_keys_test.go: `.NewRandReaderFromSeed(1)`
$DIR/core/web/resolver/ocr2_keys_test.go: `.ConfigEncryptionPublicKey()`
$DIR/core/web/resolver/ocr2_keys_test.go: `.ChainType()`
$DIR/core/web/resolver/ocr2_keys_test.go: `.OffchainPublicKey()`
$DIR/core/web/resolver/ocr2_keys_test.go: `.ID()`
$DIR/core/web/resolver/ocr2_keys_test.go: `.Sprintf("ocr2on_%s_%s", k.ChainType(), k.OnChainPublicKey())`
$DIR/core/web/resolver/ocr2_keys_test.go: `.ChainType()`
$DIR/core/web/resolver/ocr2_keys_test.go: `.OnChainPublicKey()`
$DIR/core/web/resolver/ocr2_keys_test.go: `.Sprintf("ocr2cfg_%s_%s", k.ChainType(), hex.EncodeToString(configPublic[:]))`
$DIR/core/web/resolver/ocr2_keys_test.go: `.ChainType()`
$DIR/core/web/resolver/ocr2_keys_test.go: `.EncodeToString(configPublic[:])`
$DIR/core/web/resolver/ocr2_keys_test.go: `.Sprintf("ocr2off_%s_%s", k.ChainType(), hex.EncodeToString(pubKey[:]))`
$DIR/core/web/resolver/ocr2_keys_test.go: `.ChainType()`
$DIR/core/web/resolver/ocr2_keys_test.go: `.EncodeToString(pubKey[:])`
$DIR/core/web/resolver/ocr2_keys_test.go: `.Marshal(map[string]interface{}{
"ocr2KeyBundles": map[string]interface{}{
"results": expectedBundles,
},
})`
$DIR/core/web/resolver/ocr2_keys_test.go: `.Mocks.ocr2.On("GetAll")`
$DIR/core/web/resolver/ocr2_keys_test.go: `.Return(fakeKeys, nil)`
$DIR/core/web/resolver/ocr2_keys_test.go: `.Mocks.keystore.On("OCR2")`
$DIR/core/web/resolver/ocr2_keys_test.go: `.Return(f.Mocks.ocr2)`
$DIR/core/web/resolver/ocr2_keys_test.go: `.App.On("GetKeyStore")`
$DIR/core/web/resolver/ocr2_keys_test.go: `.Return(f.Mocks.keystore)`
$DIR/core/web/resolver/ocr2_keys_test.go: `.Mocks.ocr2.On("GetAll")`
$DIR/core/web/resolver/ocr2_keys_test.go: `.Return(nil, gError)`
$DIR/core/web/resolver/ocr2_keys_test.go: `.Mocks.keystore.On("OCR2")`
$DIR/core/web/resolver/ocr2_keys_test.go: `.Return(f.Mocks.ocr2)`
$DIR/core/web/resolver/ocr2_keys_test.go: `.App.On("GetKeyStore")`
$DIR/core/web/resolver/ocr2_keys_test.go: `.Return(f.Mocks.keystore)`
$DIR/core/web/resolver/ocr2_keys_test.go: `.New("error")`
$DIR/core/web/resolver/ocr2_keys_test.go: `.MustNewInsecure(keystest.NewRandReaderFromSeed(1), "evm")`
$DIR/core/web/resolver/ocr2_keys_test.go: `.NewRandReaderFromSeed(1)`
$DIR/core/web/resolver/ocr2_keys_test.go: `.ChainType()`
$DIR/core/web/resolver/ocr2_keys_test.go: `.ConfigEncryptionPublicKey()`
$DIR/core/web/resolver/ocr2_keys_test.go: `.OffchainPublicKey()`
$DIR/core/web/resolver/ocr2_keys_test.go: `.Marshal(map[string]interface{}{
"createOCR2KeyBundle": map[string]interface{}{
"bundle": map[string]interface{}{
"id": fakeKey.ID(),
"chainType": ct,
"onChainPublicKey": fmt.Sprintf("ocr2on_%s_%s", fakeKey.ChainType(), fakeKey.OnChainPublicKey()),
"configPublicKey": fmt.Sprintf("ocr2cfg_%s_%s", fakeKey.ChainType(), hex.EncodeToString(configPublic[:])),
"offChainPublicKey": fmt.Sprintf("ocr2off_%s_%s", fakeKey.ChainType(), hex.EncodeToString(pubKey[:])),
},
},
})`
$DIR/core/web/resolver/ocr2_keys_test.go: `.ID()`
$DIR/core/web/resolver/ocr2_keys_test.go: `.Sprintf("ocr2on_%s_%s", fakeKey.ChainType(), fakeKey.OnChainPublicKey())`
$DIR/core/web/resolver/ocr2_keys_test.go: `.ChainType()`
$DIR/core/web/resolver/ocr2_keys_test.go: `.OnChainPublicKey()`
$DIR/core/web/resolver/ocr2_keys_test.go: `.Sprintf("ocr2cfg_%s_%s", fakeKey.ChainType(), hex.EncodeToString(configPublic[:]))`
$DIR/core/web/resolver/ocr2_keys_test.go: `.ChainType()`
$DIR/core/web/resolver/ocr2_keys_test.go: `.EncodeToString(configPublic[:])`
$DIR/core/web/resolver/ocr2_keys_test.go: `.Sprintf("ocr2off_%s_%s", fakeKey.ChainType(), hex.EncodeToString(pubKey[:]))`
$DIR/core/web/resolver/ocr2_keys_test.go: `.ChainType()`
$DIR/core/web/resolver/ocr2_keys_test.go: `.EncodeToString(pubKey[:])`
$DIR/core/web/resolver/ocr2_keys_test.go: `.Mocks.ocr2.On("Create", mock.Anything, chaintype.ChainType("evm"))`
$DIR/core/web/resolver/ocr2_keys_test.go: `.ChainType("evm")`
$DIR/core/web/resolver/ocr2_keys_test.go: `.Return(fakeKey, nil)`
$DIR/core/web/resolver/ocr2_keys_test.go: `.Mocks.keystore.On("OCR2")`
$DIR/core/web/resolver/ocr2_keys_test.go: `.Return(f.Mocks.ocr2)`
$DIR/core/web/resolver/ocr2_keys_test.go: `.App.On("GetKeyStore")`
$DIR/core/web/resolver/ocr2_keys_test.go: `.Return(f.Mocks.keystore)`
$DIR/core/web/resolver/ocr2_keys_test.go: `.Mocks.ocr2.On("Create", mock.Anything, chaintype.ChainType("evm"))`
$DIR/core/web/resolver/ocr2_keys_test.go: `.ChainType("evm")`
$DIR/core/web/resolver/ocr2_keys_test.go: `.Return(nil, gError)`
$DIR/core/web/resolver/ocr2_keys_test.go: `.Mocks.keystore.On("OCR2")`
$DIR/core/web/resolver/ocr2_keys_test.go: `.Return(f.Mocks.ocr2)`
$DIR/core/web/resolver/ocr2_keys_test.go: `.App.On("GetKeyStore")`
$DIR/core/web/resolver/ocr2_keys_test.go: `.Return(f.Mocks.keystore)`
$DIR/core/web/resolver/ocr2_keys_test.go: `.MustNewInsecure(keystest.NewRandReaderFromSeed(1), "evm")`
$DIR/core/web/resolver/ocr2_keys_test.go: `.NewRandReaderFromSeed(1)`
$DIR/core/web/resolver/ocr2_keys_test.go: `.ID()`
$DIR/core/web/resolver/ocr2_keys_test.go: `.ChainType()`
$DIR/core/web/resolver/ocr2_keys_test.go: `.ConfigEncryptionPublicKey()`
$DIR/core/web/resolver/ocr2_keys_test.go: `.OffchainPublicKey()`
$DIR/core/web/resolver/ocr2_keys_test.go: `.Marshal(map[string]interface{}{
"deleteOCR2KeyBundle": map[string]interface{}{
"bundle": map[string]interface{}{
"id": fakeKey.ID(),
"chainType": ct,
"onChainPublicKey": fmt.Sprintf("ocr2on_%s_%s", fakeKey.ChainType(), fakeKey.OnChainPublicKey()),
"configPublicKey": fmt.Sprintf("ocr2cfg_%s_%s", fakeKey.ChainType(), hex.EncodeToString(configPublic[:])),
"offChainPublicKey": fmt.Sprintf("ocr2off_%s_%s", fakeKey.ChainType(), hex.EncodeToString(pubKey[:])),
},
},
})`
$DIR/core/web/resolver/ocr2_keys_test.go: `.ID()`
$DIR/core/web/resolver/ocr2_keys_test.go: `.Sprintf("ocr2on_%s_%s", fakeKey.ChainType(), fakeKey.OnChainPublicKey())`
$DIR/core/web/resolver/ocr2_keys_test.go: `.ChainType()`
$DIR/core/web/resolver/ocr2_keys_test.go: `.OnChainPublicKey()`
$DIR/core/web/resolver/ocr2_keys_test.go: `.Sprintf("ocr2cfg_%s_%s", fakeKey.ChainType(), hex.EncodeToString(configPublic[:]))`
$DIR/core/web/resolver/ocr2_keys_test.go: `.ChainType()`
$DIR/core/web/resolver/ocr2_keys_test.go: `.EncodeToString(configPublic[:])`
$DIR/core/web/resolver/ocr2_keys_test.go: `.Sprintf("ocr2off_%s_%s", fakeKey.ChainType(), hex.EncodeToString(pubKey[:]))`
$DIR/core/web/resolver/ocr2_keys_test.go: `.ChainType()`
$DIR/core/web/resolver/ocr2_keys_test.go: `.EncodeToString(pubKey[:])`
$DIR/core/web/resolver/ocr2_keys_test.go: `.New("error")`
$DIR/core/web/resolver/ocr2_keys_test.go: `.Mocks.ocr2.On("Delete", mock.Anything, fakeKey.ID())`
$DIR/core/web/resolver/ocr2_keys_test.go: `.ID()`
$DIR/core/web/resolver/ocr2_keys_test.go: `.Return(nil)`
$DIR/core/web/resolver/ocr2_keys_test.go: `.Mocks.ocr2.On("Get", fakeKey.ID())`
$DIR/core/web/resolver/ocr2_keys_test.go: `.ID()`
$DIR/core/web/resolver/ocr2_keys_test.go: `.Return(fakeKey, nil)`
$DIR/core/web/resolver/ocr2_keys_test.go: `.Mocks.keystore.On("OCR2")`
$DIR/core/web/resolver/ocr2_keys_test.go: `.Return(f.Mocks.ocr2)`
$DIR/core/web/resolver/ocr2_keys_test.go: `.App.On("GetKeyStore")`
$DIR/core/web/resolver/ocr2_keys_test.go: `.Return(f.Mocks.keystore)`
$DIR/core/web/resolver/ocr2_keys_test.go: `.Mocks.ocr2.On("Get", fakeKey.ID())`
$DIR/core/web/resolver/ocr2_keys_test.go: `.ID()`
$DIR/core/web/resolver/ocr2_keys_test.go: `.Return(fakeKey, gError)`
$DIR/core/web/resolver/ocr2_keys_test.go: `.Mocks.keystore.On("OCR2")`
$DIR/core/web/resolver/ocr2_keys_test.go: `.Return(f.Mocks.ocr2)`
$DIR/core/web/resolver/ocr2_keys_test.go: `.App.On("GetKeyStore")`
$DIR/core/web/resolver/ocr2_keys_test.go: `.Return(f.Mocks.keystore)`
$DIR/core/web/resolver/ocr2_keys_test.go: `.Mocks.ocr2.On("Delete", mock.Anything, fakeKey.ID())`
$DIR/core/web/resolver/ocr2_keys_test.go: `.ID()`
$DIR/core/web/resolver/ocr2_keys_test.go: `.Return(gError)`
$DIR/core/web/resolver/ocr2_keys_test.go: `.Mocks.ocr2.On("Get", fakeKey.ID())`
$DIR/core/web/resolver/ocr2_keys_test.go: `.ID()`
$DIR/core/web/resolver/ocr2_keys_test.go: `.Return(fakeKey, nil)`
$DIR/core/web/resolver/ocr2_keys_test.go: `.Mocks.keystore.On("OCR2")`
$DIR/core/web/resolver/ocr2_keys_test.go: `.Return(f.Mocks.ocr2)`
$DIR/core/web/resolver/ocr2_keys_test.go: `.App.On("GetKeyStore")`
$DIR/core/web/resolver/ocr2_keys_test.go: `.Return(f.Mocks.keystore)`
$DIR/core/web/resolver/ocr_test.go: `fakeKeys = append(fakeKeys, k)`
$DIR/core/web/resolver/ocr_test.go: `expectedBundles = append(expectedBundles, map[string]string{
"id": k.ID(),
"configPublicKey": ocrkey.ConfigPublicKey(k.PublicKeyConfig()).String(),
"offChainPublicKey": k.OffChainSigning.PublicKey().String(),
"onChainSigningAddress": k.OnChainSigning.Address().String(),
})`
$DIR/core/web/resolver/ocr_test.go: `f.Mocks.ocr.On("GetAll").Return(fakeKeys, nil)`
$DIR/core/web/resolver/ocr_test.go: `f.Mocks.keystore.On("OCR").Return(f.Mocks.ocr)`
$DIR/core/web/resolver/ocr_test.go: `f.App.On("GetKeyStore").Return(f.Mocks.keystore)`
$DIR/core/web/resolver/ocr_test.go: `f.Mocks.ocr.On("Create", mock.Anything).Return(fakeKey, nil)`
$DIR/core/web/resolver/ocr_test.go: `f.Mocks.keystore.On("OCR").Return(f.Mocks.ocr)`
$DIR/core/web/resolver/ocr_test.go: `f.App.On("GetKeyStore").Return(f.Mocks.keystore)`
$DIR/core/web/resolver/ocr_test.go: `f.Mocks.ocr.On("Delete", mock.Anything, fakeKey.ID()).Return(fakeKey, nil)`
$DIR/core/web/resolver/ocr_test.go: `f.Mocks.keystore.On("OCR").Return(f.Mocks.ocr)`
$DIR/core/web/resolver/ocr_test.go: `f.App.On("GetKeyStore").Return(f.Mocks.keystore)`
$DIR/core/web/resolver/ocr_test.go: `f.Mocks.ocr.
On("Delete", mock.Anything, fakeKey.ID()).
Return(ocrkey.KeyV2{}, keystore.KeyNotFoundError{ID: "helloWorld", KeyType: "OCR"})`
$DIR/core/web/resolver/ocr_test.go: `f.Mocks.keystore.On("OCR").Return(f.Mocks.ocr)`
$DIR/core/web/resolver/ocr_test.go: `f.App.On("GetKeyStore").Return(f.Mocks.keystore)`
$DIR/core/web/resolver/ocr_test.go: `.MustNewV2XXXTestingOnly(big.NewInt(1))`
$DIR/core/web/resolver/ocr_test.go: `.NewInt(1)`
$DIR/core/web/resolver/ocr_test.go: `.ID()`
$DIR/core/web/resolver/ocr_test.go: `.ConfigPublicKey(k.PublicKeyConfig())`
$DIR/core/web/resolver/ocr_test.go: `.PublicKeyConfig()`
$DIR/core/web/resolver/ocr_test.go: `.String()`
$DIR/core/web/resolver/ocr_test.go: `.OffChainSigning.PublicKey()`
$DIR/core/web/resolver/ocr_test.go: `.String()`
$DIR/core/web/resolver/ocr_test.go: `.OnChainSigning.Address()`
$DIR/core/web/resolver/ocr_test.go: `.String()`
$DIR/core/web/resolver/ocr_test.go: `.Marshal(map[string]interface{}{
"ocrKeyBundles": map[string]interface{}{
"results": expectedBundles,
},
})`
$DIR/core/web/resolver/ocr_test.go: `.Mocks.ocr.On("GetAll")`
$DIR/core/web/resolver/ocr_test.go: `.Return(fakeKeys, nil)`
$DIR/core/web/resolver/ocr_test.go: `.Mocks.keystore.On("OCR")`
$DIR/core/web/resolver/ocr_test.go: `.Return(f.Mocks.ocr)`
$DIR/core/web/resolver/ocr_test.go: `.App.On("GetKeyStore")`
$DIR/core/web/resolver/ocr_test.go: `.Return(f.Mocks.keystore)`
$DIR/core/web/resolver/ocr_test.go: `.MustNewV2XXXTestingOnly(big.NewInt(1))`
$DIR/core/web/resolver/ocr_test.go: `.NewInt(1)`
$DIR/core/web/resolver/ocr_test.go: `.Marshal(map[string]interface{}{
"createOCRKeyBundle": map[string]interface{}{
"bundle": map[string]interface{}{
"id": fakeKey.ID(),
"configPublicKey": ocrkey.ConfigPublicKey(fakeKey.PublicKeyConfig()).String(),
"offChainPublicKey": fakeKey.OffChainSigning.PublicKey().String(),
"onChainSigningAddress": fakeKey.OnChainSigning.Address().String(),
},
},
})`
$DIR/core/web/resolver/ocr_test.go: `.ID()`
$DIR/core/web/resolver/ocr_test.go: `.ConfigPublicKey(fakeKey.PublicKeyConfig())`
$DIR/core/web/resolver/ocr_test.go: `.PublicKeyConfig()`
$DIR/core/web/resolver/ocr_test.go: `.String()`
$DIR/core/web/resolver/ocr_test.go: `.OffChainSigning.PublicKey()`
$DIR/core/web/resolver/ocr_test.go: `.String()`
$DIR/core/web/resolver/ocr_test.go: `.OnChainSigning.Address()`
$DIR/core/web/resolver/ocr_test.go: `.String()`
$DIR/core/web/resolver/ocr_test.go: `.Mocks.ocr.On("Create", mock.Anything)`
$DIR/core/web/resolver/ocr_test.go: `.Return(fakeKey, nil)`
$DIR/core/web/resolver/ocr_test.go: `.Mocks.keystore.On("OCR")`
$DIR/core/web/resolver/ocr_test.go: `.Return(f.Mocks.ocr)`
$DIR/core/web/resolver/ocr_test.go: `.App.On("GetKeyStore")`
$DIR/core/web/resolver/ocr_test.go: `.Return(f.Mocks.keystore)`
$DIR/core/web/resolver/ocr_test.go: `.MustNewV2XXXTestingOnly(big.NewInt(1))`
$DIR/core/web/resolver/ocr_test.go: `.NewInt(1)`
$DIR/core/web/resolver/ocr_test.go: `.ID()`
$DIR/core/web/resolver/ocr_test.go: `.Marshal(map[string]interface{}{
"deleteOCRKeyBundle": map[string]interface{}{
"bundle": map[string]interface{}{
"id": fakeKey.ID(),
"configPublicKey": ocrkey.ConfigPublicKey(fakeKey.PublicKeyConfig()).String(),
"offChainPublicKey": fakeKey.OffChainSigning.PublicKey().String(),
"onChainSigningAddress": fakeKey.OnChainSigning.Address().String(),
},
},
})`
$DIR/core/web/resolver/ocr_test.go: `.ID()`
$DIR/core/web/resolver/ocr_test.go: `.ConfigPublicKey(fakeKey.PublicKeyConfig())`
$DIR/core/web/resolver/ocr_test.go: `.PublicKeyConfig()`
$DIR/core/web/resolver/ocr_test.go: `.String()`
$DIR/core/web/resolver/ocr_test.go: `.OffChainSigning.PublicKey()`
$DIR/core/web/resolver/ocr_test.go: `.String()`
$DIR/core/web/resolver/ocr_test.go: `.OnChainSigning.Address()`
$DIR/core/web/resolver/ocr_test.go: `.String()`
$DIR/core/web/resolver/ocr_test.go: `.Mocks.ocr.On("Delete", mock.Anything, fakeKey.ID())`
$DIR/core/web/resolver/ocr_test.go: `.ID()`
$DIR/core/web/resolver/ocr_test.go: `.Return(fakeKey, nil)`
$DIR/core/web/resolver/ocr_test.go: `.Mocks.keystore.On("OCR")`
$DIR/core/web/resolver/ocr_test.go: `.Return(f.Mocks.ocr)`
$DIR/core/web/resolver/ocr_test.go: `.App.On("GetKeyStore")`
$DIR/core/web/resolver/ocr_test.go: `.Return(f.Mocks.keystore)`
$DIR/core/web/resolver/ocr_test.go: `.Mocks.ocr.
On("Delete", mock.Anything, fakeKey.ID())`
$DIR/core/web/resolver/ocr_test.go: `.ID()`
$DIR/core/web/resolver/ocr_test.go: `.
Return(ocrkey.KeyV2{}, keystore.KeyNotFoundError{ID: "helloWorld", KeyType: "OCR"})`
$DIR/core/web/resolver/ocr_test.go: `.Mocks.keystore.On("OCR")`
$DIR/core/web/resolver/ocr_test.go: `.Return(f.Mocks.ocr)`
$DIR/core/web/resolver/ocr_test.go: `.App.On("GetKeyStore")`
$DIR/core/web/resolver/ocr_test.go: `.Return(f.Mocks.keystore)`
$DIR/core/web/resolver/p2p_test.go: `fakeKeys = append(fakeKeys, k)`
$DIR/core/web/resolver/p2p_test.go: `expectedKeys = append(expectedKeys, map[string]string{
"id": k.ID(),
"peerID": k.PeerID().String(),
"publicKey": k.PublicKeyHex(),
})`
$DIR/core/web/resolver/p2p_test.go: `f.Mocks.p2p.On("GetAll").Return(fakeKeys, nil)`
$DIR/core/web/resolver/p2p_test.go: `f.Mocks.keystore.On("P2P").Return(f.Mocks.p2p)`
$DIR/core/web/resolver/p2p_test.go: `f.App.On("GetKeyStore").Return(f.Mocks.keystore)`
$DIR/core/web/resolver/p2p_test.go: `f.Mocks.p2p.On("Create", mock.Anything).Return(fakeKey, nil)`
$DIR/core/web/resolver/p2p_test.go: `f.Mocks.keystore.On("P2P").Return(f.Mocks.p2p)`
$DIR/core/web/resolver/p2p_test.go: `f.App.On("GetKeyStore").Return(f.Mocks.keystore)`
$DIR/core/web/resolver/p2p_test.go: `f.Mocks.p2p.On("Delete", mock.Anything, peerID).Return(fakeKey, nil)`
$DIR/core/web/resolver/p2p_test.go: `f.Mocks.keystore.On("P2P").Return(f.Mocks.p2p)`
$DIR/core/web/resolver/p2p_test.go: `f.App.On("GetKeyStore").Return(f.Mocks.keystore)`
$DIR/core/web/resolver/p2p_test.go: `f.Mocks.p2p.
On("Delete", mock.Anything, peerID).
Return(
p2pkey.KeyV2{},
keystore.KeyNotFoundError{ID: peerID.String(), KeyType: "P2P"},
)`
$DIR/core/web/resolver/p2p_test.go: `f.Mocks.keystore.On("P2P").Return(f.Mocks.p2p)`
$DIR/core/web/resolver/p2p_test.go: `f.App.On("GetKeyStore").Return(f.Mocks.keystore)`
$DIR/core/web/resolver/p2p_test.go: `.MustNewV2XXXTestingOnly(big.NewInt(1))`
$DIR/core/web/resolver/p2p_test.go: `.NewInt(1)`
$DIR/core/web/resolver/p2p_test.go: `.ID()`
$DIR/core/web/resolver/p2p_test.go: `.PeerID()`
$DIR/core/web/resolver/p2p_test.go: `.String()`
$DIR/core/web/resolver/p2p_test.go: `.PublicKeyHex()`
$DIR/core/web/resolver/p2p_test.go: `.Marshal(map[string]interface{}{
"p2pKeys": map[string]interface{}{
"results": expectedKeys,
},
})`
$DIR/core/web/resolver/p2p_test.go: `.Mocks.p2p.On("GetAll")`
$DIR/core/web/resolver/p2p_test.go: `.Return(fakeKeys, nil)`
$DIR/core/web/resolver/p2p_test.go: `.Mocks.keystore.On("P2P")`
$DIR/core/web/resolver/p2p_test.go: `.Return(f.Mocks.p2p)`
$DIR/core/web/resolver/p2p_test.go: `.App.On("GetKeyStore")`
$DIR/core/web/resolver/p2p_test.go: `.Return(f.Mocks.keystore)`
$DIR/core/web/resolver/p2p_test.go: `.MustNewV2XXXTestingOnly(big.NewInt(1))`
$DIR/core/web/resolver/p2p_test.go: `.NewInt(1)`
$DIR/core/web/resolver/p2p_test.go: `.Marshal(map[string]interface{}{
"createP2PKey": map[string]interface{}{
"p2pKey": map[string]interface{}{
"id": fakeKey.ID(),
"peerID": fakeKey.PeerID().String(),
"publicKey": fakeKey.PublicKeyHex(),
},
},
})`
$DIR/core/web/resolver/p2p_test.go: `.ID()`
$DIR/core/web/resolver/p2p_test.go: `.PeerID()`
$DIR/core/web/resolver/p2p_test.go: `.String()`
$DIR/core/web/resolver/p2p_test.go: `.PublicKeyHex()`
$DIR/core/web/resolver/p2p_test.go: `.Mocks.p2p.On("Create", mock.Anything)`
$DIR/core/web/resolver/p2p_test.go: `.Return(fakeKey, nil)`
$DIR/core/web/resolver/p2p_test.go: `.Mocks.keystore.On("P2P")`
$DIR/core/web/resolver/p2p_test.go: `.Return(f.Mocks.p2p)`
$DIR/core/web/resolver/p2p_test.go: `.App.On("GetKeyStore")`
$DIR/core/web/resolver/p2p_test.go: `.Return(f.Mocks.keystore)`
$DIR/core/web/resolver/p2p_test.go: `.MustNewV2XXXTestingOnly(big.NewInt(1))`
$DIR/core/web/resolver/p2p_test.go: `.NewInt(1)`
$DIR/core/web/resolver/p2p_test.go: `.ID()`
$DIR/core/web/resolver/p2p_test.go: `.MakePeerID(fakeKey.ID())`
$DIR/core/web/resolver/p2p_test.go: `.ID()`
$DIR/core/web/resolver/p2p_test.go: `.Marshal(map[string]interface{}{
"deleteP2PKey": map[string]interface{}{
"p2pKey": map[string]interface{}{
"id": fakeKey.ID(),
"peerID": fakeKey.PeerID().String(),
"publicKey": fakeKey.PublicKeyHex(),
},
},
})`
$DIR/core/web/resolver/p2p_test.go: `.ID()`
$DIR/core/web/resolver/p2p_test.go: `.PeerID()`
$DIR/core/web/resolver/p2p_test.go: `.String()`
$DIR/core/web/resolver/p2p_test.go: `.PublicKeyHex()`
$DIR/core/web/resolver/p2p_test.go: `.Mocks.p2p.On("Delete", mock.Anything, peerID)`
$DIR/core/web/resolver/p2p_test.go: `.Return(fakeKey, nil)`
$DIR/core/web/resolver/p2p_test.go: `.Mocks.keystore.On("P2P")`
$DIR/core/web/resolver/p2p_test.go: `.Return(f.Mocks.p2p)`
$DIR/core/web/resolver/p2p_test.go: `.App.On("GetKeyStore")`
$DIR/core/web/resolver/p2p_test.go: `.Return(f.Mocks.keystore)`
$DIR/core/web/resolver/p2p_test.go: `.Mocks.p2p.
On("Delete", mock.Anything, peerID)`
$DIR/core/web/resolver/p2p_test.go: `.
Return(
p2pkey.KeyV2{},
keystore.KeyNotFoundError{ID: peerID.String(), KeyType: "P2P"},
)`
$DIR/core/web/resolver/p2p_test.go: `.String()`
$DIR/core/web/resolver/p2p_test.go: `.Mocks.keystore.On("P2P")`
$DIR/core/web/resolver/p2p_test.go: `.Return(f.Mocks.p2p)`
$DIR/core/web/resolver/p2p_test.go: `.App.On("GetKeyStore")`
$DIR/core/web/resolver/p2p_test.go: `.Return(f.Mocks.keystore)`
$DIR/core/web/resolver/p2p_test.go: `.Sprintf(`{
"deleteP2PKey": {
"code":"NOT_FOUND",
"message":"unable to find P2P key with id %s"
}
}`, peerID.String())`
$DIR/core/web/resolver/p2p_test.go: `.String()`
$DIR/core/web/resolver/solana_key_test.go: `f.Mocks.solana.On("GetAll").Return([]solkey.Key{k}, nil)`
$DIR/core/web/resolver/solana_key_test.go: `f.Mocks.keystore.On("Solana").Return(f.Mocks.solana)`
$DIR/core/web/resolver/solana_key_test.go: `f.App.On("GetKeyStore").Return(f.Mocks.keystore)`
$DIR/core/web/resolver/solana_key_test.go: `f.Mocks.solana.On("GetAll").Return([]solkey.Key{}, gError)`
$DIR/core/web/resolver/solana_key_test.go: `f.Mocks.keystore.On("Solana").Return(f.Mocks.solana)`
$DIR/core/web/resolver/solana_key_test.go: `f.App.On("GetKeyStore").Return(f.Mocks.keystore)`
$DIR/core/web/resolver/solana_key_test.go: `.MustNewInsecure(keystest.NewRandReaderFromSeed(1))`
$DIR/core/web/resolver/solana_key_test.go: `.NewRandReaderFromSeed(1)`
$DIR/core/web/resolver/solana_key_test.go: `.Sprintf(`
{
"solanaKeys": {
"results": [
{
"id": "%s"
}
]
}
}`, k.PublicKeyStr())`
$DIR/core/web/resolver/solana_key_test.go: `.PublicKeyStr()`
$DIR/core/web/resolver/solana_key_test.go: `.New("error")`
$DIR/core/web/resolver/solana_key_test.go: `.Mocks.solana.On("GetAll")`
$DIR/core/web/resolver/solana_key_test.go: `.Return([]solkey.Key{k}, nil)`
$DIR/core/web/resolver/solana_key_test.go: `.Mocks.keystore.On("Solana")`
$DIR/core/web/resolver/solana_key_test.go: `.Return(f.Mocks.solana)`
$DIR/core/web/resolver/solana_key_test.go: `.App.On("GetKeyStore")`
$DIR/core/web/resolver/solana_key_test.go: `.Return(f.Mocks.keystore)`
$DIR/core/web/resolver/solana_key_test.go: `.Mocks.solana.On("GetAll")`
$DIR/core/web/resolver/solana_key_test.go: `.Return([]solkey.Key{}, gError)`
$DIR/core/web/resolver/solana_key_test.go: `.Mocks.keystore.On("Solana")`
$DIR/core/web/resolver/solana_key_test.go: `.Return(f.Mocks.solana)`
$DIR/core/web/resolver/solana_key_test.go: `.App.On("GetKeyStore")`
$DIR/core/web/resolver/solana_key_test.go: `.Return(f.Mocks.keystore)`
$DIR/core/web/resolver/spec_test.go: `f.App.On("JobORM").Return(f.Mocks.jobORM)`
$DIR/core/web/resolver/spec_test.go: `f.Mocks.jobORM.On("FindJobWithoutSpecErrors", mock.Anything, id).Return(job.Job{
Type: job.Cron,
CronSpec: &job.CronSpec{
CronSchedule: "CRON_TZ=UTC 0 0 1 1 *",
CreatedAt: f.Timestamp(),
},
}, nil)`
$DIR/core/web/resolver/spec_test.go: `f.App.On("JobORM").Return(f.Mocks.jobORM)`
$DIR/core/web/resolver/spec_test.go: `f.Mocks.jobORM.On("FindJobWithoutSpecErrors", mock.Anything, id).Return(job.Job{
Type: job.DirectRequest,
DirectRequestSpec: &job.DirectRequestSpec{
ContractAddress: contractAddress,
CreatedAt: f.Timestamp(),
EVMChainID: ubig.NewI(42),
MinIncomingConfirmations: clnull.NewUint32(1, true),
MinContractPayment: commonassets.NewLinkFromJuels(1000),
Requesters: models.AddressCollection{requesterAddress},
},
}, nil)`
$DIR/core/web/resolver/spec_test.go: `f.App.On("JobORM").Return(f.Mocks.jobORM)`
$DIR/core/web/resolver/spec_test.go: `f.Mocks.jobORM.On("FindJobWithoutSpecErrors", mock.Anything, id).Return(job.Job{
Type: job.FluxMonitor,
FluxMonitorSpec: &job.FluxMonitorSpec{
ContractAddress: contractAddress,
CreatedAt: f.Timestamp(),
EVMChainID: ubig.NewI(42),
DrumbeatEnabled: false,
IdleTimerDisabled: false,
IdleTimerPeriod: 1 * time.Hour,
MinPayment: commonassets.NewLinkFromJuels(1000),
PollTimerDisabled: false,
PollTimerPeriod: 1 * time.Minute,
},
}, nil)`
$DIR/core/web/resolver/spec_test.go: `f.App.On("JobORM").Return(f.Mocks.jobORM)`
$DIR/core/web/resolver/spec_test.go: `f.Mocks.jobORM.On("FindJobWithoutSpecErrors", mock.Anything, id).Return(job.Job{
Type: job.FluxMonitor,
FluxMonitorSpec: &job.FluxMonitorSpec{
ContractAddress: contractAddress,
CreatedAt: f.Timestamp(),
EVMChainID: ubig.NewI(42),
DrumbeatEnabled: true,
DrumbeatRandomDelay: 1 * time.Second,
DrumbeatSchedule: "CRON_TZ=UTC 0 0 1 1 *",
IdleTimerDisabled: true,
IdleTimerPeriod: 1 * time.Hour,
MinPayment: commonassets.NewLinkFromJuels(1000),
PollTimerDisabled: true,
PollTimerPeriod: 1 * time.Minute,
},
}, nil)`
$DIR/core/web/resolver/spec_test.go: `f.App.On("JobORM").Return(f.Mocks.jobORM)`
$DIR/core/web/resolver/spec_test.go: `f.Mocks.jobORM.On("FindJobWithoutSpecErrors", mock.Anything, id).Return(job.Job{
Type: job.Keeper,
KeeperSpec: &job.KeeperSpec{
ContractAddress: contractAddress,
CreatedAt: f.Timestamp(),
EVMChainID: ubig.NewI(42),
FromAddress: evmtypes.EIP55AddressFromAddress(fromAddress),
},
}, nil)`
$DIR/core/web/resolver/spec_test.go: `f.App.On("JobORM").Return(f.Mocks.jobORM)`
$DIR/core/web/resolver/spec_test.go: `f.Mocks.jobORM.On("FindJobWithoutSpecErrors", mock.Anything, id).Return(job.Job{
Type: job.OffchainReporting,
OCROracleSpec: &job.OCROracleSpec{
BlockchainTimeout: models.Interval(1 * time.Minute),
ContractAddress: contractAddress,
ContractConfigConfirmations: 1,
ContractConfigTrackerPollInterval: models.Interval(1 * time.Minute),
ContractConfigTrackerSubscribeInterval: models.Interval(2 * time.Minute),
DatabaseTimeout: models.NewInterval(3 * time.Second),
ObservationGracePeriod: models.NewInterval(4 * time.Second),
ContractTransmitterTransmitTimeout: models.NewInterval(555 * time.Millisecond),
CreatedAt: f.Timestamp(),
EVMChainID: ubig.NewI(42),
IsBootstrapPeer: false,
EncryptedOCRKeyBundleID: &keyBundleID,
ObservationTimeout: models.Interval(2 * time.Minute),
P2PV2Bootstrappers: pq.StringArray{"12D3KooWL3XJ9EMCyZvmmGXL2LMiVBtrVa2BuESsJiXkSj7333Jw@localhost:5001"},
TransmitterAddress: &transmitterAddress,
},
}, nil)`
$DIR/core/web/resolver/spec_test.go: `f.App.On("JobORM").Return(f.Mocks.jobORM)`
$DIR/core/web/resolver/spec_test.go: `f.Mocks.jobORM.On("FindJobWithoutSpecErrors", mock.Anything, id).Return(job.Job{
Type: job.OffchainReporting2,
OCR2OracleSpec: &job.OCR2OracleSpec{
BlockchainTimeout: models.Interval(1 * time.Minute),
ContractID: contractAddress.String(),
ContractConfigConfirmations: 1,
ContractConfigTrackerPollInterval: models.Interval(1 * time.Minute),
CreatedAt: f.Timestamp(),
OCRKeyBundleID: null.StringFrom(keyBundleID.String()),
MonitoringEndpoint: null.StringFrom("https://monitor.endpoint"),
P2PV2Bootstrappers: pq.StringArray{"12D3KooWL3XJ9EMCyZvmmGXL2LMiVBtrVa2BuESsJiXkSj7333Jw@localhost:5001"},
Relay: types.NetworkEVM,
RelayConfig: relayConfig,
TransmitterID: null.StringFrom(transmitterAddress.String()),
PluginType: types.Median,
PluginConfig: pluginConfig,
},
}, nil)`
$DIR/core/web/resolver/spec_test.go: `f.App.On("JobORM").Return(f.Mocks.jobORM)`
$DIR/core/web/resolver/spec_test.go: `f.Mocks.jobORM.On("FindJobWithoutSpecErrors", mock.Anything, id).Return(job.Job{
Type: job.VRF,
VRFSpec: &job.VRFSpec{
BatchCoordinatorAddress: &batchCoordinatorAddress,
BatchFulfillmentEnabled: true,
CustomRevertsPipelineEnabled: true,
MinIncomingConfirmations: 1,
CoordinatorAddress: coordinatorAddress,
CreatedAt: f.Timestamp(),
EVMChainID: ubig.NewI(42),
FromAddresses: []evmtypes.EIP55Address{fromAddress1, fromAddress2},
PollPeriod: 1 * time.Minute,
PublicKey: pubKey,
RequestedConfsDelay: 10,
RequestTimeout: 24 * time.Hour,
ChunkSize: 25,
BatchFulfillmentGasMultiplier: 1,
BackoffInitialDelay: time.Minute,
BackoffMaxDelay: time.Hour,
GasLanePrice: assets.GWei(200),
},
}, nil)`
$DIR/core/web/resolver/spec_test.go: `f.App.On("JobORM").Return(f.Mocks.jobORM)`
$DIR/core/web/resolver/spec_test.go: `f.Mocks.jobORM.On("FindJobWithoutSpecErrors", mock.Anything, id).Return(job.Job{
Type: job.Webhook,
WebhookSpec: &job.WebhookSpec{
CreatedAt: f.Timestamp(),
},
}, nil)`
$DIR/core/web/resolver/spec_test.go: `f.App.On("JobORM").Return(f.Mocks.jobORM)`
$DIR/core/web/resolver/spec_test.go: `f.Mocks.jobORM.On("FindJobWithoutSpecErrors", mock.Anything, id).Return(job.Job{
Type: job.BlockhashStore,
BlockhashStoreSpec: &job.BlockhashStoreSpec{
CoordinatorV1Address: &coordinatorV1Address,
CoordinatorV2Address: &coordinatorV2Address,
CoordinatorV2PlusAddress: &coordinatorV2PlusAddress,
CreatedAt: f.Timestamp(),
EVMChainID: ubig.NewI(42),
FromAddresses: []evmtypes.EIP55Address{fromAddress1, fromAddress2},
PollPeriod: 1 * time.Minute,
RunTimeout: 37 * time.Second,
WaitBlocks: 100,
LookbackBlocks: 200,
HeartbeatPeriod: 450 * time.Second,
BlockhashStoreAddress: blockhashStoreAddress,
TrustedBlockhashStoreAddress: &trustedBlockhashStoreAddress,
TrustedBlockhashStoreBatchSize: trustedBlockhashStoreBatchSize,
},
}, nil)`
$DIR/core/web/resolver/spec_test.go: `f.App.On("JobORM").Return(f.Mocks.jobORM)`
$DIR/core/web/resolver/spec_test.go: `f.Mocks.jobORM.On("FindJobWithoutSpecErrors", mock.Anything, id).Return(job.Job{
Type: job.BlockHeaderFeeder,
BlockHeaderFeederSpec: &job.BlockHeaderFeederSpec{
CoordinatorV1Address: &coordinatorV1Address,
CoordinatorV2Address: &coordinatorV2Address,
CoordinatorV2PlusAddress: &coordinatorV2PlusAddress,
CreatedAt: f.Timestamp(),
EVMChainID: ubig.NewI(42),
FromAddresses: []evmtypes.EIP55Address{fromAddress},
PollPeriod: 1 * time.Minute,
RunTimeout: 37 * time.Second,
WaitBlocks: 100,
LookbackBlocks: 200,
BlockhashStoreAddress: blockhashStoreAddress,
BatchBlockhashStoreAddress: batchBHSAddress,
GetBlockhashesBatchSize: 5,
StoreBlockhashesBatchSize: 3,
},
}, nil)`
$DIR/core/web/resolver/spec_test.go: `f.App.On("JobORM").Return(f.Mocks.jobORM)`
$DIR/core/web/resolver/spec_test.go: `f.Mocks.jobORM.On("FindJobWithoutSpecErrors", mock.Anything, id).Return(job.Job{
Type: job.Bootstrap,
BootstrapSpec: &job.BootstrapSpec{
ID: id,
ContractID: "0x613a38AC1659769640aaE063C651F48E0250454C",
Relay: "evm",
RelayConfig: map[string]interface{}{},
MonitoringEndpoint: null.String{},
BlockchainTimeout: models.Interval(2 * time.Minute),
ContractConfigTrackerPollInterval: models.Interval(2 * time.Minute),
ContractConfigConfirmations: 100,
CreatedAt: f.Timestamp(),
},
}, nil)`
$DIR/core/web/resolver/spec_test.go: `f.App.On("JobORM").Return(f.Mocks.jobORM)`
$DIR/core/web/resolver/spec_test.go: `f.Mocks.jobORM.On("FindJobWithoutSpecErrors", mock.Anything, id).Return(job.Job{
Type: job.Workflow,
WorkflowSpec: &job.WorkflowSpec{
ID: id,
WorkflowID: "",
Workflow: "",
},
}, nil)`
$DIR/core/web/resolver/spec_test.go: `f.App.On("JobORM").Return(f.Mocks.jobORM)`
$DIR/core/web/resolver/spec_test.go: `f.Mocks.jobORM.On("FindJobWithoutSpecErrors", mock.Anything, id).Return(job.Job{
Type: job.Gateway,
GatewaySpec: &job.GatewaySpec{
ID: id,
GatewayConfig: gatewayConfig,
CreatedAt: f.Timestamp(),
},
}, nil)`
$DIR/core/web/resolver/spec_test.go: `f.App.On("JobORM").Return(f.Mocks.jobORM)`
$DIR/core/web/resolver/spec_test.go: `f.Mocks.jobORM.On("FindJobWithoutSpecErrors", mock.Anything, id).Return(job.Job{
Type: job.StandardCapabilities,
StandardCapabilitiesSpec: &job.StandardCapabilitiesSpec{
ID: id,
CreatedAt: f.Timestamp(),
Command: "testcommand",
Config: "testconfig",
},
}, nil)`
$DIR/core/web/resolver/spec_test.go: `.App.On("JobORM")`
$DIR/core/web/resolver/spec_test.go: `.Return(f.Mocks.jobORM)`
$DIR/core/web/resolver/spec_test.go: `.Mocks.jobORM.On("FindJobWithoutSpecErrors", mock.Anything, id)`
$DIR/core/web/resolver/spec_test.go: `.Return(job.Job{
Type: job.Cron,
CronSpec: &job.CronSpec{
CronSchedule: "CRON_TZ=UTC 0 0 1 1 *",
CreatedAt: f.Timestamp(),
},
}, nil)`
$DIR/core/web/resolver/spec_test.go: `.Timestamp()`
$DIR/core/web/resolver/spec_test.go: `.HexToAddress("0x3cCad4715152693fE3BC4460591e3D3Fbd071b42")`
$DIR/core/web/resolver/spec_test.go: `.NewEIP55Address("0x613a38AC1659769640aaE063C651F48E0250454C")`
$DIR/core/web/resolver/spec_test.go: `.App.On("JobORM")`
$DIR/core/web/resolver/spec_test.go: `.Return(f.Mocks.jobORM)`
$DIR/core/web/resolver/spec_test.go: `.Mocks.jobORM.On("FindJobWithoutSpecErrors", mock.Anything, id)`
$DIR/core/web/resolver/spec_test.go: `.Return(job.Job{
Type: job.DirectRequest,
DirectRequestSpec: &job.DirectRequestSpec{
ContractAddress: contractAddress,
CreatedAt: f.Timestamp(),
EVMChainID: ubig.NewI(42),
MinIncomingConfirmations: clnull.NewUint32(1, true),
MinContractPayment: commonassets.NewLinkFromJuels(1000),
Requesters: models.AddressCollection{requesterAddress},
},
}, nil)`
$DIR/core/web/resolver/spec_test.go: `.Timestamp()`
$DIR/core/web/resolver/spec_test.go: `.NewI(42)`
$DIR/core/web/resolver/spec_test.go: `.NewUint32(1, true)`
$DIR/core/web/resolver/spec_test.go: `.NewLinkFromJuels(1000)`
$DIR/core/web/resolver/spec_test.go: `.NewEIP55Address("0x613a38AC1659769640aaE063C651F48E0250454C")`
$DIR/core/web/resolver/spec_test.go: `.App.On("JobORM")`
$DIR/core/web/resolver/spec_test.go: `.Return(f.Mocks.jobORM)`
$DIR/core/web/resolver/spec_test.go: `.Mocks.jobORM.On("FindJobWithoutSpecErrors", mock.Anything, id)`
$DIR/core/web/resolver/spec_test.go: `.Return(job.Job{
Type: job.FluxMonitor,
FluxMonitorSpec: &job.FluxMonitorSpec{
ContractAddress: contractAddress,
CreatedAt: f.Timestamp(),
EVMChainID: ubig.NewI(42),
DrumbeatEnabled: false,
IdleTimerDisabled: false,
IdleTimerPeriod: 1 * time.Hour,
MinPayment: commonassets.NewLinkFromJuels(1000),
PollTimerDisabled: false,
PollTimerPeriod: 1 * time.Minute,
},
}, nil)`
$DIR/core/web/resolver/spec_test.go: `.Timestamp()`
$DIR/core/web/resolver/spec_test.go: `.NewI(42)`
$DIR/core/web/resolver/spec_test.go: `.NewLinkFromJuels(1000)`
$DIR/core/web/resolver/spec_test.go: `.App.On("JobORM")`
$DIR/core/web/resolver/spec_test.go: `.Return(f.Mocks.jobORM)`
$DIR/core/web/resolver/spec_test.go: `.Mocks.jobORM.On("FindJobWithoutSpecErrors", mock.Anything, id)`
$DIR/core/web/resolver/spec_test.go: `.Return(job.Job{
Type: job.FluxMonitor,
FluxMonitorSpec: &job.FluxMonitorSpec{
ContractAddress: contractAddress,
CreatedAt: f.Timestamp(),
EVMChainID: ubig.NewI(42),
DrumbeatEnabled: true,
DrumbeatRandomDelay: 1 * time.Second,
DrumbeatSchedule: "CRON_TZ=UTC 0 0 1 1 *",
IdleTimerDisabled: true,
IdleTimerPeriod: 1 * time.Hour,
MinPayment: commonassets.NewLinkFromJuels(1000),
PollTimerDisabled: true,
PollTimerPeriod: 1 * time.Minute,
},
}, nil)`
$DIR/core/web/resolver/spec_test.go: `.Timestamp()`
$DIR/core/web/resolver/spec_test.go: `.NewI(42)`
$DIR/core/web/resolver/spec_test.go: `.NewLinkFromJuels(1000)`
$DIR/core/web/resolver/spec_test.go: `.HexToAddress("0x3cCad4715152693fE3BC4460591e3D3Fbd071b42")`
$DIR/core/web/resolver/spec_test.go: `.NewEIP55Address("0x613a38AC1659769640aaE063C651F48E0250454C")`
$DIR/core/web/resolver/spec_test.go: `.App.On("JobORM")`
$DIR/core/web/resolver/spec_test.go: `.Return(f.Mocks.jobORM)`
$DIR/core/web/resolver/spec_test.go: `.Mocks.jobORM.On("FindJobWithoutSpecErrors", mock.Anything, id)`
$DIR/core/web/resolver/spec_test.go: `.Return(job.Job{
Type: job.Keeper,
KeeperSpec: &job.KeeperSpec{
ContractAddress: contractAddress,
CreatedAt: f.Timestamp(),
EVMChainID: ubig.NewI(42),
FromAddress: evmtypes.EIP55AddressFromAddress(fromAddress),
},
}, nil)`
$DIR/core/web/resolver/spec_test.go: `.Timestamp()`
$DIR/core/web/resolver/spec_test.go: `.NewI(42)`
$DIR/core/web/resolver/spec_test.go: `.EIP55AddressFromAddress(fromAddress)`
$DIR/core/web/resolver/spec_test.go: `.NewEIP55Address("0x613a38AC1659769640aaE063C651F48E0250454C")`
$DIR/core/web/resolver/spec_test.go: `.NewEIP55Address("0x3cCad4715152693fE3BC4460591e3D3Fbd071b42")`
$DIR/core/web/resolver/spec_test.go: `.MustSha256HashFromHex("f5bf259689b26f1374efb3c9a9868796953a0f814bb2d39b968d0e61b58620a5")`
$DIR/core/web/resolver/spec_test.go: `.App.On("JobORM")`
$DIR/core/web/resolver/spec_test.go: `.Return(f.Mocks.jobORM)`
$DIR/core/web/resolver/spec_test.go: `.Mocks.jobORM.On("FindJobWithoutSpecErrors", mock.Anything, id)`
$DIR/core/web/resolver/spec_test.go: `.Return(job.Job{
Type: job.OffchainReporting,
OCROracleSpec: &job.OCROracleSpec{
BlockchainTimeout: models.Interval(1 * time.Minute),
ContractAddress: contractAddress,
ContractConfigConfirmations: 1,
ContractConfigTrackerPollInterval: models.Interval(1 * time.Minute),
ContractConfigTrackerSubscribeInterval: models.Interval(2 * time.Minute),
DatabaseTimeout: models.NewInterval(3 * time.Second),
ObservationGracePeriod: models.NewInterval(4 * time.Second),
ContractTransmitterTransmitTimeout: models.NewInterval(555 * time.Millisecond),
CreatedAt: f.Timestamp(),
EVMChainID: ubig.NewI(42),
IsBootstrapPeer: false,
EncryptedOCRKeyBundleID: &keyBundleID,
ObservationTimeout: models.Interval(2 * time.Minute),
P2PV2Bootstrappers: pq.StringArray{"12D3KooWL3XJ9EMCyZvmmGXL2LMiVBtrVa2BuESsJiXkSj7333Jw@localhost:5001"},
TransmitterAddress: &transmitterAddress,
},
}, nil)`
$DIR/core/web/resolver/spec_test.go: `.Interval(1 * time.Minute)`
$DIR/core/web/resolver/spec_test.go: `.Interval(1 * time.Minute)`
$DIR/core/web/resolver/spec_test.go: `.Interval(2 * time.Minute)`
$DIR/core/web/resolver/spec_test.go: `.NewInterval(3 * time.Second)`
$DIR/core/web/resolver/spec_test.go: `.NewInterval(4 * time.Second)`
$DIR/core/web/resolver/spec_test.go: `.NewInterval(555 * time.Millisecond)`
$DIR/core/web/resolver/spec_test.go: `.Timestamp()`
$DIR/core/web/resolver/spec_test.go: `.NewI(42)`
$DIR/core/web/resolver/spec_test.go: `.Interval(2 * time.Minute)`
$DIR/core/web/resolver/spec_test.go: `.NewEIP55Address("0x613a38AC1659769640aaE063C651F48E0250454C")`
$DIR/core/web/resolver/spec_test.go: `.NewEIP55Address("0x3cCad4715152693fE3BC4460591e3D3Fbd071b42")`
$DIR/core/web/resolver/spec_test.go: `.MustSha256HashFromHex("f5bf259689b26f1374efb3c9a9868796953a0f814bb2d39b968d0e61b58620a5")`
$DIR/core/web/resolver/spec_test.go: `.App.On("JobORM")`
$DIR/core/web/resolver/spec_test.go: `.Return(f.Mocks.jobORM)`
$DIR/core/web/resolver/spec_test.go: `.Mocks.jobORM.On("FindJobWithoutSpecErrors", mock.Anything, id)`
$DIR/core/web/resolver/spec_test.go: `.Return(job.Job{
Type: job.OffchainReporting2,
OCR2OracleSpec: &job.OCR2OracleSpec{
BlockchainTimeout: models.Interval(1 * time.Minute),
ContractID: contractAddress.String(),
ContractConfigConfirmations: 1,
ContractConfigTrackerPollInterval: models.Interval(1 * time.Minute),
CreatedAt: f.Timestamp(),
OCRKeyBundleID: null.StringFrom(keyBundleID.String()),
MonitoringEndpoint: null.StringFrom("https://monitor.endpoint"),
P2PV2Bootstrappers: pq.StringArray{"12D3KooWL3XJ9EMCyZvmmGXL2LMiVBtrVa2BuESsJiXkSj7333Jw@localhost:5001"},
Relay: types.NetworkEVM,
RelayConfig: relayConfig,
TransmitterID: null.StringFrom(transmitterAddress.String()),
PluginType: types.Median,
PluginConfig: pluginConfig,
},
}, nil)`
$DIR/core/web/resolver/spec_test.go: `.Interval(1 * time.Minute)`
$DIR/core/web/resolver/spec_test.go: `.String()`
$DIR/core/web/resolver/spec_test.go: `.Interval(1 * time.Minute)`
$DIR/core/web/resolver/spec_test.go: `.Timestamp()`
$DIR/core/web/resolver/spec_test.go: `.StringFrom(keyBundleID.String())`
$DIR/core/web/resolver/spec_test.go: `.String()`
$DIR/core/web/resolver/spec_test.go: `.StringFrom("https://monitor.endpoint")`
$DIR/core/web/resolver/spec_test.go: `.StringFrom(transmitterAddress.String())`
$DIR/core/web/resolver/spec_test.go: `.String()`
$DIR/core/web/resolver/spec_test.go: `.NewEIP55Address("0x613a38AC1659769640aaE063C651F48E0250454C")`
$DIR/core/web/resolver/spec_test.go: `.NewEIP55Address("0x0ad9FE7a58216242a8475ca92F222b0640E26B63")`
$DIR/core/web/resolver/spec_test.go: `.NewEIP55Address("0x3cCad4715152693fE3BC4460591e3D3Fbd071b42")`
$DIR/core/web/resolver/spec_test.go: `.NewEIP55Address("0x2301958F1BFbC9A068C2aC9c6166Bf483b95864C")`
$DIR/core/web/resolver/spec_test.go: `.NewPublicKeyFromHex("0x9dc09a0f898f3b5e8047204e7ce7e44b587920932f08431e29c9bf6923b8450a01")`
$DIR/core/web/resolver/spec_test.go: `.App.On("JobORM")`
$DIR/core/web/resolver/spec_test.go: `.Return(f.Mocks.jobORM)`
$DIR/core/web/resolver/spec_test.go: `.Mocks.jobORM.On("FindJobWithoutSpecErrors", mock.Anything, id)`
$DIR/core/web/resolver/spec_test.go: `.Return(job.Job{
Type: job.VRF,
VRFSpec: &job.VRFSpec{
BatchCoordinatorAddress: &batchCoordinatorAddress,
BatchFulfillmentEnabled: true,
CustomRevertsPipelineEnabled: true,
MinIncomingConfirmations: 1,
CoordinatorAddress: coordinatorAddress,
CreatedAt: f.Timestamp(),
EVMChainID: ubig.NewI(42),
FromAddresses: []evmtypes.EIP55Address{fromAddress1, fromAddress2},
PollPeriod: 1 * time.Minute,
PublicKey: pubKey,
RequestedConfsDelay: 10,
RequestTimeout: 24 * time.Hour,
ChunkSize: 25,
BatchFulfillmentGasMultiplier: 1,
BackoffInitialDelay: time.Minute,
BackoffMaxDelay: time.Hour,
GasLanePrice: assets.GWei(200),
},
}, nil)`
$DIR/core/web/resolver/spec_test.go: `.Timestamp()`
$DIR/core/web/resolver/spec_test.go: `.NewI(42)`
$DIR/core/web/resolver/spec_test.go: `.GWei(200)`
$DIR/core/web/resolver/spec_test.go: `.App.On("JobORM")`
$DIR/core/web/resolver/spec_test.go: `.Return(f.Mocks.jobORM)`
$DIR/core/web/resolver/spec_test.go: `.Mocks.jobORM.On("FindJobWithoutSpecErrors", mock.Anything, id)`
$DIR/core/web/resolver/spec_test.go: `.Return(job.Job{
Type: job.Webhook,
WebhookSpec: &job.WebhookSpec{
CreatedAt: f.Timestamp(),
},
}, nil)`
$DIR/core/web/resolver/spec_test.go: `.Timestamp()`
$DIR/core/web/resolver/spec_test.go: `.NewEIP55Address("0x613a38AC1659769640aaE063C651F48E0250454C")`
$DIR/core/web/resolver/spec_test.go: `.NewEIP55Address("0x2fcA960AF066cAc46085588a66dA2D614c7Cd337")`
$DIR/core/web/resolver/spec_test.go: `.NewEIP55Address("0x92B5e28Ac583812874e4271380c7d070C5FB6E6b")`
$DIR/core/web/resolver/spec_test.go: `.NewEIP55Address("0x3cCad4715152693fE3BC4460591e3D3Fbd071b42")`
$DIR/core/web/resolver/spec_test.go: `.NewEIP55Address("0xD479d7c994D298cA05bF270136ED9627b7E684D3")`
$DIR/core/web/resolver/spec_test.go: `.NewEIP55Address("0xb26A6829D454336818477B946f03Fb21c9706f3A")`
$DIR/core/web/resolver/spec_test.go: `.NewEIP55Address("0x0ad9FE7a58216242a8475ca92F222b0640E26B63")`
$DIR/core/web/resolver/spec_test.go: `.App.On("JobORM")`
$DIR/core/web/resolver/spec_test.go: `.Return(f.Mocks.jobORM)`
$DIR/core/web/resolver/spec_test.go: `.Mocks.jobORM.On("FindJobWithoutSpecErrors", mock.Anything, id)`
$DIR/core/web/resolver/spec_test.go: `.Return(job.Job{
Type: job.BlockhashStore,
BlockhashStoreSpec: &job.BlockhashStoreSpec{
CoordinatorV1Address: &coordinatorV1Address,
CoordinatorV2Address: &coordinatorV2Address,
CoordinatorV2PlusAddress: &coordinatorV2PlusAddress,
CreatedAt: f.Timestamp(),
EVMChainID: ubig.NewI(42),
FromAddresses: []evmtypes.EIP55Address{fromAddress1, fromAddress2},
PollPeriod: 1 * time.Minute,
RunTimeout: 37 * time.Second,
WaitBlocks: 100,
LookbackBlocks: 200,
HeartbeatPeriod: 450 * time.Second,
BlockhashStoreAddress: blockhashStoreAddress,
TrustedBlockhashStoreAddress: &trustedBlockhashStoreAddress,
TrustedBlockhashStoreBatchSize: trustedBlockhashStoreBatchSize,
},
}, nil)`
$DIR/core/web/resolver/spec_test.go: `.Timestamp()`
$DIR/core/web/resolver/spec_test.go: `.NewI(42)`
$DIR/core/web/resolver/spec_test.go: `.NewEIP55Address("0x613a38AC1659769640aaE063C651F48E0250454C")`
$DIR/core/web/resolver/spec_test.go: `.NewEIP55Address("0x2fcA960AF066cAc46085588a66dA2D614c7Cd337")`
$DIR/core/web/resolver/spec_test.go: `.NewEIP55Address("0x92B5e28Ac583812874e4271380c7d070C5FB6E6b")`
$DIR/core/web/resolver/spec_test.go: `.NewEIP55Address("0x3cCad4715152693fE3BC4460591e3D3Fbd071b42")`
$DIR/core/web/resolver/spec_test.go: `.NewEIP55Address("0xb26A6829D454336818477B946f03Fb21c9706f3A")`
$DIR/core/web/resolver/spec_test.go: `.NewEIP55Address("0xd23BAE30019853Caf1D08b4C03291b10AD7743Df")`
$DIR/core/web/resolver/spec_test.go: `.App.On("JobORM")`
$DIR/core/web/resolver/spec_test.go: `.Return(f.Mocks.jobORM)`
$DIR/core/web/resolver/spec_test.go: `.Mocks.jobORM.On("FindJobWithoutSpecErrors", mock.Anything, id)`
$DIR/core/web/resolver/spec_test.go: `.Return(job.Job{
Type: job.BlockHeaderFeeder,
BlockHeaderFeederSpec: &job.BlockHeaderFeederSpec{
CoordinatorV1Address: &coordinatorV1Address,
CoordinatorV2Address: &coordinatorV2Address,
CoordinatorV2PlusAddress: &coordinatorV2PlusAddress,
CreatedAt: f.Timestamp(),
EVMChainID: ubig.NewI(42),
FromAddresses: []evmtypes.EIP55Address{fromAddress},
PollPeriod: 1 * time.Minute,
RunTimeout: 37 * time.Second,
WaitBlocks: 100,
LookbackBlocks: 200,
BlockhashStoreAddress: blockhashStoreAddress,
BatchBlockhashStoreAddress: batchBHSAddress,
GetBlockhashesBatchSize: 5,
StoreBlockhashesBatchSize: 3,
},
}, nil)`
$DIR/core/web/resolver/spec_test.go: `.Timestamp()`
$DIR/core/web/resolver/spec_test.go: `.NewI(42)`
$DIR/core/web/resolver/spec_test.go: `.App.On("JobORM")`
$DIR/core/web/resolver/spec_test.go: `.Return(f.Mocks.jobORM)`
$DIR/core/web/resolver/spec_test.go: `.Mocks.jobORM.On("FindJobWithoutSpecErrors", mock.Anything, id)`
$DIR/core/web/resolver/spec_test.go: `.Return(job.Job{
Type: job.Bootstrap,
BootstrapSpec: &job.BootstrapSpec{
ID: id,
ContractID: "0x613a38AC1659769640aaE063C651F48E0250454C",
Relay: "evm",
RelayConfig: map[string]interface{}{},
MonitoringEndpoint: null.String{},
BlockchainTimeout: models.Interval(2 * time.Minute),
ContractConfigTrackerPollInterval: models.Interval(2 * time.Minute),
ContractConfigConfirmations: 100,
CreatedAt: f.Timestamp(),
},
}, nil)`
$DIR/core/web/resolver/spec_test.go: `.Interval(2 * time.Minute)`
$DIR/core/web/resolver/spec_test.go: `.Interval(2 * time.Minute)`
$DIR/core/web/resolver/spec_test.go: `.Timestamp()`
$DIR/core/web/resolver/spec_test.go: `.App.On("JobORM")`
$DIR/core/web/resolver/spec_test.go: `.Return(f.Mocks.jobORM)`
$DIR/core/web/resolver/spec_test.go: `.Mocks.jobORM.On("FindJobWithoutSpecErrors", mock.Anything, id)`
$DIR/core/web/resolver/spec_test.go: `.Return(job.Job{
Type: job.Workflow,
WorkflowSpec: &job.WorkflowSpec{
ID: id,
WorkflowID: "",
Workflow: "",
},
}, nil)`
$DIR/core/web/resolver/spec_test.go: `.App.On("JobORM")`
$DIR/core/web/resolver/spec_test.go: `.Return(f.Mocks.jobORM)`
$DIR/core/web/resolver/spec_test.go: `.Mocks.jobORM.On("FindJobWithoutSpecErrors", mock.Anything, id)`
$DIR/core/web/resolver/spec_test.go: `.Return(job.Job{
Type: job.Gateway,
GatewaySpec: &job.GatewaySpec{
ID: id,
GatewayConfig: gatewayConfig,
CreatedAt: f.Timestamp(),
},
}, nil)`
$DIR/core/web/resolver/spec_test.go: `.Timestamp()`
$DIR/core/web/resolver/spec_test.go: `.App.On("JobORM")`
$DIR/core/web/resolver/spec_test.go: `.Return(f.Mocks.jobORM)`
$DIR/core/web/resolver/spec_test.go: `.Mocks.jobORM.On("FindJobWithoutSpecErrors", mock.Anything, id)`
$DIR/core/web/resolver/spec_test.go: `.Return(job.Job{
Type: job.StandardCapabilities,
StandardCapabilitiesSpec: &job.StandardCapabilitiesSpec{
ID: id,
CreatedAt: f.Timestamp(),
Command: "testcommand",
Config: "testconfig",
},
}, nil)`
$DIR/core/web/resolver/spec_test.go: `.Timestamp()`
$DIR/core/web/resolver/user_test.go: `session.User.HashedPassword = pwd`
$DIR/core/web/resolver/user_test.go: `f.Mocks.authProvider.On("FindUser", mock.Anything, session.User.Email).Return(*session.User, nil)`
$DIR/core/web/resolver/user_test.go: `f.Mocks.authProvider.On("SetPassword", mock.Anything, session.User, "new").Return(nil)`
$DIR/core/web/resolver/user_test.go: `f.Mocks.authProvider.On("ClearNonCurrentSessions", mock.Anything, session.SessionID).Return(nil)`
$DIR/core/web/resolver/user_test.go: `f.App.On("AuthenticationProvider").Return(f.Mocks.authProvider)`
$DIR/core/web/resolver/user_test.go: `session.User.HashedPassword = "random-string"`
$DIR/core/web/resolver/user_test.go: `f.Mocks.authProvider.On("FindUser", mock.Anything, session.User.Email).Return(*session.User, nil)`
$DIR/core/web/resolver/user_test.go: `f.App.On("AuthenticationProvider").Return(f.Mocks.authProvider)`
$DIR/core/web/resolver/user_test.go: `session.User.HashedPassword = pwd`
$DIR/core/web/resolver/user_test.go: `f.Mocks.authProvider.On("FindUser", mock.Anything, session.User.Email).Return(*session.User, nil)`
$DIR/core/web/resolver/user_test.go: `f.Mocks.authProvider.On("ClearNonCurrentSessions", mock.Anything, session.SessionID).Return(
clearSessionsError{},
)`
$DIR/core/web/resolver/user_test.go: `f.App.On("AuthenticationProvider").Return(f.Mocks.authProvider)`
$DIR/core/web/resolver/user_test.go: `session.User.HashedPassword = pwd`
$DIR/core/web/resolver/user_test.go: `f.Mocks.authProvider.On("FindUser", mock.Anything, session.User.Email).Return(*session.User, nil)`
$DIR/core/web/resolver/user_test.go: `f.Mocks.authProvider.On("ClearNonCurrentSessions", mock.Anything, session.SessionID).Return(nil)`
$DIR/core/web/resolver/user_test.go: `f.Mocks.authProvider.On("SetPassword", mock.Anything, session.User, "new").Return(failedPasswordUpdateError{})`
$DIR/core/web/resolver/user_test.go: `f.App.On("AuthenticationProvider").Return(f.Mocks.authProvider)`
$DIR/core/web/resolver/user_test.go: `.GetGQLAuthenticatedSession(ctx)`
$DIR/core/web/resolver/user_test.go: `.HashPassword(oldPassword)`
$DIR/core/web/resolver/user_test.go: `.Mocks.authProvider.On("FindUser", mock.Anything, session.User.Email)`
$DIR/core/web/resolver/user_test.go: `.Return(*session.User, nil)`
$DIR/core/web/resolver/user_test.go: `.Mocks.authProvider.On("SetPassword", mock.Anything, session.User, "new")`
$DIR/core/web/resolver/user_test.go: `.Return(nil)`
$DIR/core/web/resolver/user_test.go: `.Mocks.authProvider.On("ClearNonCurrentSessions", mock.Anything, session.SessionID)`
$DIR/core/web/resolver/user_test.go: `.Return(nil)`
$DIR/core/web/resolver/user_test.go: `.App.On("AuthenticationProvider")`
$DIR/core/web/resolver/user_test.go: `.Return(f.Mocks.authProvider)`
$DIR/core/web/resolver/user_test.go: `.GetGQLAuthenticatedSession(ctx)`
$DIR/core/web/resolver/user_test.go: `.Mocks.authProvider.On("FindUser", mock.Anything, session.User.Email)`
$DIR/core/web/resolver/user_test.go: `.Return(*session.User, nil)`
$DIR/core/web/resolver/user_test.go: `.App.On("AuthenticationProvider")`
$DIR/core/web/resolver/user_test.go: `.Return(f.Mocks.authProvider)`
$DIR/core/web/resolver/user_test.go: `.GetGQLAuthenticatedSession(ctx)`
$DIR/core/web/resolver/user_test.go: `.HashPassword(oldPassword)`
$DIR/core/web/resolver/user_test.go: `.Mocks.authProvider.On("FindUser", mock.Anything, session.User.Email)`
$DIR/core/web/resolver/user_test.go: `.Return(*session.User, nil)`
$DIR/core/web/resolver/user_test.go: `.Mocks.authProvider.On("ClearNonCurrentSessions", mock.Anything, session.SessionID)`
$DIR/core/web/resolver/user_test.go: `.Return(
clearSessionsError{},
)`
$DIR/core/web/resolver/user_test.go: `.App.On("AuthenticationProvider")`
$DIR/core/web/resolver/user_test.go: `.Return(f.Mocks.authProvider)`
$DIR/core/web/resolver/user_test.go: `.GetGQLAuthenticatedSession(ctx)`
$DIR/core/web/resolver/user_test.go: `.HashPassword(oldPassword)`
$DIR/core/web/resolver/user_test.go: `.Mocks.authProvider.On("FindUser", mock.Anything, session.User.Email)`
$DIR/core/web/resolver/user_test.go: `.Return(*session.User, nil)`
$DIR/core/web/resolver/user_test.go: `.Mocks.authProvider.On("ClearNonCurrentSessions", mock.Anything, session.SessionID)`
$DIR/core/web/resolver/user_test.go: `.Return(nil)`
$DIR/core/web/resolver/user_test.go: `.Mocks.authProvider.On("SetPassword", mock.Anything, session.User, "new")`
$DIR/core/web/resolver/user_test.go: `.Return(failedPasswordUpdateError{})`
$DIR/core/web/resolver/user_test.go: `.App.On("AuthenticationProvider")`
$DIR/core/web/resolver/user_test.go: `.Return(f.Mocks.authProvider)`
$DIR/core/web/resolver/vrf_test.go: `f.Mocks.vrf.On("Get", fakeKey.PublicKey.String()).Return(fakeKey, nil)`
$DIR/core/web/resolver/vrf_test.go: `f.Mocks.keystore.On("VRF").Return(f.Mocks.vrf)`
$DIR/core/web/resolver/vrf_test.go: `f.App.On("GetKeyStore").Return(f.Mocks.keystore)`
$DIR/core/web/resolver/vrf_test.go: `f.Mocks.vrf.
On("Get", fakeKey.PublicKey.String()).
Return(vrfkey.KeyV2{}, errors.Wrapf(
keystore.ErrMissingVRFKey,
"unable to find VRF key with id %s",
fakeKey.PublicKey.String(),
))`
$DIR/core/web/resolver/vrf_test.go: `f.Mocks.keystore.On("VRF").Return(f.Mocks.vrf)`
$DIR/core/web/resolver/vrf_test.go: `f.App.On("GetKeyStore").Return(f.Mocks.keystore)`
$DIR/core/web/resolver/vrf_test.go: `fakeKeys = append(fakeKeys, fakeKey)`
$DIR/core/web/resolver/vrf_test.go: `expectedKeys = append(expectedKeys, map[string]string{
"id": fakeKey.PublicKey.String(),
"compressed": fakeKey.PublicKey.String(),
"uncompressed": uncompressed,
"hash": fakeKey.PublicKey.MustHash().String(),
})`
$DIR/core/web/resolver/vrf_test.go: `f.Mocks.vrf.On("GetAll").Return(fakeKeys, nil)`
$DIR/core/web/resolver/vrf_test.go: `f.Mocks.keystore.On("VRF").Return(f.Mocks.vrf)`
$DIR/core/web/resolver/vrf_test.go: `f.App.On("GetKeyStore").Return(f.Mocks.keystore)`
$DIR/core/web/resolver/vrf_test.go: `f.Mocks.vrf.On("Create", mock.Anything).Return(fakeKey, nil)`
$DIR/core/web/resolver/vrf_test.go: `f.Mocks.keystore.On("VRF").Return(f.Mocks.vrf)`
$DIR/core/web/resolver/vrf_test.go: `f.App.On("GetKeyStore").Return(f.Mocks.keystore)`
$DIR/core/web/resolver/vrf_test.go: `f.Mocks.vrf.On("Delete", mock.Anything, fakeKey.PublicKey.String()).Return(fakeKey, nil)`
$DIR/core/web/resolver/vrf_test.go: `f.Mocks.keystore.On("VRF").Return(f.Mocks.vrf)`
$DIR/core/web/resolver/vrf_test.go: `f.App.On("GetKeyStore").Return(f.Mocks.keystore)`
$DIR/core/web/resolver/vrf_test.go: `f.Mocks.vrf.
On("Delete", mock.Anything, fakeKey.PublicKey.String()).
Return(vrfkey.KeyV2{}, errors.Wrapf(
keystore.ErrMissingVRFKey,
"unable to find VRF key with id %s",
fakeKey.PublicKey.String(),
))`
$DIR/core/web/resolver/vrf_test.go: `f.Mocks.keystore.On("VRF").Return(f.Mocks.vrf)`
$DIR/core/web/resolver/vrf_test.go: `f.App.On("GetKeyStore").Return(f.Mocks.keystore)`
$DIR/core/web/resolver/vrf_test.go: `.MustNewV2XXXTestingOnly(big.NewInt(1))`
$DIR/core/web/resolver/vrf_test.go: `.NewInt(1)`
$DIR/core/web/resolver/vrf_test.go: `.PublicKey.StringUncompressed()`
$DIR/core/web/resolver/vrf_test.go: `.Marshal(map[string]interface{}{
"vrfKey": map[string]interface{}{
"key": map[string]interface{}{
"id": fakeKey.PublicKey.String(),
"compressed": fakeKey.PublicKey.String(),
"uncompressed": uncompressed,
"hash": fakeKey.PublicKey.MustHash().String(),
},
},
})`
$DIR/core/web/resolver/vrf_test.go: `.PublicKey.String()`
$DIR/core/web/resolver/vrf_test.go: `.PublicKey.String()`
$DIR/core/web/resolver/vrf_test.go: `.PublicKey.MustHash()`
$DIR/core/web/resolver/vrf_test.go: `.String()`
$DIR/core/web/resolver/vrf_test.go: `.PublicKey.String()`
$DIR/core/web/resolver/vrf_test.go: `.Mocks.vrf.On("Get", fakeKey.PublicKey.String())`
$DIR/core/web/resolver/vrf_test.go: `.PublicKey.String()`
$DIR/core/web/resolver/vrf_test.go: `.Return(fakeKey, nil)`
$DIR/core/web/resolver/vrf_test.go: `.Mocks.keystore.On("VRF")`
$DIR/core/web/resolver/vrf_test.go: `.Return(f.Mocks.vrf)`
$DIR/core/web/resolver/vrf_test.go: `.App.On("GetKeyStore")`
$DIR/core/web/resolver/vrf_test.go: `.Return(f.Mocks.keystore)`
$DIR/core/web/resolver/vrf_test.go: `.Mocks.vrf.
On("Get", fakeKey.PublicKey.String())`
$DIR/core/web/resolver/vrf_test.go: `.PublicKey.String()`
$DIR/core/web/resolver/vrf_test.go: `.
Return(vrfkey.KeyV2{}, errors.Wrapf(
keystore.ErrMissingVRFKey,
"unable to find VRF key with id %s",
fakeKey.PublicKey.String(),
))`
$DIR/core/web/resolver/vrf_test.go: `.Wrapf(
keystore.ErrMissingVRFKey,
"unable to find VRF key with id %s",
fakeKey.PublicKey.String(),
)`
$DIR/core/web/resolver/vrf_test.go: `.PublicKey.String()`
$DIR/core/web/resolver/vrf_test.go: `.Mocks.keystore.On("VRF")`
$DIR/core/web/resolver/vrf_test.go: `.Return(f.Mocks.vrf)`
$DIR/core/web/resolver/vrf_test.go: `.App.On("GetKeyStore")`
$DIR/core/web/resolver/vrf_test.go: `.Return(f.Mocks.keystore)`
$DIR/core/web/resolver/vrf_test.go: `.Sprintf(`{
"vrfKey": {
"code": "NOT_FOUND",
"message": "unable to find VRF key with id %s: unable to find VRF key"
}
}`, fakeKey.PublicKey.String())`
$DIR/core/web/resolver/vrf_test.go: `.PublicKey.String()`
$DIR/core/web/resolver/vrf_test.go: `.MustNewV2XXXTestingOnly(big.NewInt(1))`
$DIR/core/web/resolver/vrf_test.go: `.NewInt(1)`
$DIR/core/web/resolver/vrf_test.go: `.PublicKey.StringUncompressed()`
$DIR/core/web/resolver/vrf_test.go: `.PublicKey.String()`
$DIR/core/web/resolver/vrf_test.go: `.PublicKey.String()`
$DIR/core/web/resolver/vrf_test.go: `.PublicKey.MustHash()`
$DIR/core/web/resolver/vrf_test.go: `.String()`
$DIR/core/web/resolver/vrf_test.go: `.Marshal(map[string]interface{}{
"vrfKeys": map[string]interface{}{
"results": expectedKeys,
},
})`
$DIR/core/web/resolver/vrf_test.go: `.Mocks.vrf.On("GetAll")`
$DIR/core/web/resolver/vrf_test.go: `.Return(fakeKeys, nil)`
$DIR/core/web/resolver/vrf_test.go: `.Mocks.keystore.On("VRF")`
$DIR/core/web/resolver/vrf_test.go: `.Return(f.Mocks.vrf)`
$DIR/core/web/resolver/vrf_test.go: `.App.On("GetKeyStore")`
$DIR/core/web/resolver/vrf_test.go: `.Return(f.Mocks.keystore)`
$DIR/core/web/resolver/vrf_test.go: `.MustNewV2XXXTestingOnly(big.NewInt(1))`
$DIR/core/web/resolver/vrf_test.go: `.NewInt(1)`
$DIR/core/web/resolver/vrf_test.go: `.PublicKey.StringUncompressed()`
$DIR/core/web/resolver/vrf_test.go: `.Marshal(map[string]interface{}{
"createVRFKey": map[string]interface{}{
"key": map[string]interface{}{
"id": fakeKey.PublicKey.String(),
"compressed": fakeKey.PublicKey.String(),
"uncompressed": uncompressed,
"hash": fakeKey.PublicKey.MustHash().String(),
},
},
})`
$DIR/core/web/resolver/vrf_test.go: `.PublicKey.String()`
$DIR/core/web/resolver/vrf_test.go: `.PublicKey.String()`
$DIR/core/web/resolver/vrf_test.go: `.PublicKey.MustHash()`
$DIR/core/web/resolver/vrf_test.go: `.String()`
$DIR/core/web/resolver/vrf_test.go: `.Mocks.vrf.On("Create", mock.Anything)`
$DIR/core/web/resolver/vrf_test.go: `.Return(fakeKey, nil)`
$DIR/core/web/resolver/vrf_test.go: `.Mocks.keystore.On("VRF")`
$DIR/core/web/resolver/vrf_test.go: `.Return(f.Mocks.vrf)`
$DIR/core/web/resolver/vrf_test.go: `.App.On("GetKeyStore")`
$DIR/core/web/resolver/vrf_test.go: `.Return(f.Mocks.keystore)`
$DIR/core/web/resolver/vrf_test.go: `.MustNewV2XXXTestingOnly(big.NewInt(1))`
$DIR/core/web/resolver/vrf_test.go: `.NewInt(1)`
$DIR/core/web/resolver/vrf_test.go: `.PublicKey.StringUncompressed()`
$DIR/core/web/resolver/vrf_test.go: `.Marshal(map[string]interface{}{
"deleteVRFKey": map[string]interface{}{
"key": map[string]interface{}{
"id": fakeKey.PublicKey.String(),
"compressed": fakeKey.PublicKey.String(),
"uncompressed": uncompressed,
"hash": fakeKey.PublicKey.MustHash().String(),
},
},
})`
$DIR/core/web/resolver/vrf_test.go: `.PublicKey.String()`
$DIR/core/web/resolver/vrf_test.go: `.PublicKey.String()`
$DIR/core/web/resolver/vrf_test.go: `.PublicKey.MustHash()`
$DIR/core/web/resolver/vrf_test.go: `.String()`
$DIR/core/web/resolver/vrf_test.go: `.PublicKey.String()`
$DIR/core/web/resolver/vrf_test.go: `.Mocks.vrf.On("Delete", mock.Anything, fakeKey.PublicKey.String())`
$DIR/core/web/resolver/vrf_test.go: `.PublicKey.String()`
$DIR/core/web/resolver/vrf_test.go: `.Return(fakeKey, nil)`
$DIR/core/web/resolver/vrf_test.go: `.Mocks.keystore.On("VRF")`
$DIR/core/web/resolver/vrf_test.go: `.Return(f.Mocks.vrf)`
$DIR/core/web/resolver/vrf_test.go: `.App.On("GetKeyStore")`
$DIR/core/web/resolver/vrf_test.go: `.Return(f.Mocks.keystore)`
$DIR/core/web/resolver/vrf_test.go: `.Mocks.vrf.
On("Delete", mock.Anything, fakeKey.PublicKey.String())`
$DIR/core/web/resolver/vrf_test.go: `.PublicKey.String()`
$DIR/core/web/resolver/vrf_test.go: `.
Return(vrfkey.KeyV2{}, errors.Wrapf(
keystore.ErrMissingVRFKey,
"unable to find VRF key with id %s",
fakeKey.PublicKey.String(),
))`
$DIR/core/web/resolver/vrf_test.go: `.Wrapf(
keystore.ErrMissingVRFKey,
"unable to find VRF key with id %s",
fakeKey.PublicKey.String(),
)`
$DIR/core/web/resolver/vrf_test.go: `.PublicKey.String()`
$DIR/core/web/resolver/vrf_test.go: `.Mocks.keystore.On("VRF")`
$DIR/core/web/resolver/vrf_test.go: `.Return(f.Mocks.vrf)`
$DIR/core/web/resolver/vrf_test.go: `.App.On("GetKeyStore")`
$DIR/core/web/resolver/vrf_test.go: `.Return(f.Mocks.keystore)`
$DIR/core/web/resolver/vrf_test.go: `.Sprintf(`{
"deleteVRFKey": {
"message": "unable to find VRF key with id %s: unable to find VRF key",
"code": "NOT_FOUND"
}
}`, fakeKey.PublicKey.String())`
$DIR/core/web/resolver/vrf_test.go: `.PublicKey.String()`
$DIR/core/web/router_test.go: `req.Header.Set("Content-Type", web.MediaType)`
$DIR/core/web/router_test.go: `err = app.BridgeORM().CreateExternalInitiator(ctx, ea)`
$DIR/core/web/router_test.go: `request.Header.Set("Content-Type", web.MediaType)`
$DIR/core/web/router_test.go: `request.Header.Set("X-Chainlink-EA-AccessKey", eia.AccessKey)`
$DIR/core/web/router_test.go: `request.Header.Set("X-Chainlink-EA-Secret", eia.Secret)`
$DIR/core/web/router_test.go: `err = app.BridgeORM().CreateExternalInitiator(ctx, ea)`
$DIR/core/web/router_test.go: `request.Header.Set("Content-Type", web.MediaType)`
$DIR/core/web/router_test.go: `request.Header.Set("X-Chainlink-EA-AccessKey", eia.AccessKey)`
$DIR/core/web/router_test.go: `request.Header.Set("X-Chainlink-EA-Secret", "every unpleasant commercial color from aquamarine to beige")`
$DIR/core/web/router_test.go: `.Context(t)`
$DIR/core/web/router_test.go: `.NewApplicationEVMDisabled(t)`
$DIR/core/web/router_test.go: `.Router(t, app, nil)`
$DIR/core/web/router_test.go: `.NewServer(router)`
$DIR/core/web/router_test.go: `.NewRequestWithContext(ctx, "POST", ts.URL+"/v2/jobs/", bytes.NewBufferString("{}"))`
$DIR/core/web/router_test.go: `.NewBufferString("{}")`
$DIR/core/web/router_test.go: `.Header.Set("Content-Type", web.MediaType)`
$DIR/core/web/router_test.go: `.DefaultClient.Do(req)`
$DIR/core/web/router_test.go: `.NewApplicationEVMDisabled(t)`
$DIR/core/web/router_test.go: `.Router(t, app, nil)`
$DIR/core/web/router_test.go: `.NewServer(router)`
$DIR/core/web/router_test.go: `.NewHTTPClient(nil)`
$DIR/core/web/router_test.go: `.Post("/v2/bridge_types/", nil)`
$DIR/core/web/router_test.go: `.Context(t)`
$DIR/core/web/router_test.go: `.NewApplicationEVMDisabled(t)`
$DIR/core/web/router_test.go: `.Router(t, app, nil)`
$DIR/core/web/router_test.go: `.NewServer(router)`
$DIR/core/web/router_test.go: `.NewToken()`
$DIR/core/web/router_test.go: `.WebURL(t, "http://localhost:8888")`
$DIR/core/web/router_test.go: `.New()`
$DIR/core/web/router_test.go: `.String()`
$DIR/core/web/router_test.go: `.NewExternalInitiator(eia, eir)`
$DIR/core/web/router_test.go: `.BridgeORM()`
$DIR/core/web/router_test.go: `.CreateExternalInitiator(ctx, ea)`
$DIR/core/web/router_test.go: `.NewRequestWithContext(ctx, "GET", ts.URL+"/v2/ping/", bytes.NewBufferString("{}"))`
$DIR/core/web/router_test.go: `.NewBufferString("{}")`
$DIR/core/web/router_test.go: `.Header.Set("Content-Type", web.MediaType)`
$DIR/core/web/router_test.go: `.Header.Set("X-Chainlink-EA-AccessKey", eia.AccessKey)`
$DIR/core/web/router_test.go: `.Header.Set("X-Chainlink-EA-Secret", eia.Secret)`
$DIR/core/web/router_test.go: `.NewTestLocalOnlyHTTPClient()`
$DIR/core/web/router_test.go: `.Do(request)`
$DIR/core/web/router_test.go: `.Context(t)`
$DIR/core/web/router_test.go: `.NewApplicationEVMDisabled(t)`
$DIR/core/web/router_test.go: `.Router(t, app, nil)`
$DIR/core/web/router_test.go: `.NewServer(router)`
$DIR/core/web/router_test.go: `.NewToken()`
$DIR/core/web/router_test.go: `.WebURL(t, "http://localhost:8888")`
$DIR/core/web/router_test.go: `.New()`
$DIR/core/web/router_test.go: `.String()`
$DIR/core/web/router_test.go: `.NewExternalInitiator(eia, eir)`
$DIR/core/web/router_test.go: `.BridgeORM()`
$DIR/core/web/router_test.go: `.CreateExternalInitiator(ctx, ea)`
$DIR/core/web/router_test.go: `.NewRequestWithContext(ctx, "GET", ts.URL+"/v2/ping/", bytes.NewBufferString("{}"))`
$DIR/core/web/router_test.go: `.NewBufferString("{}")`
$DIR/core/web/router_test.go: `.Header.Set("Content-Type", web.MediaType)`
$DIR/core/web/router_test.go: `.Header.Set("X-Chainlink-EA-AccessKey", eia.AccessKey)`
$DIR/core/web/router_test.go: `.Header.Set("X-Chainlink-EA-Secret", "every unpleasant commercial color from aquamarine to beige")`
$DIR/core/web/router_test.go: `.NewTestLocalOnlyHTTPClient()`
$DIR/core/web/router_test.go: `.Do(request)`
$DIR/core/web/router_test.go: `.Context(t)`
$DIR/core/web/router_test.go: `.NewApplicationEVMDisabled(t)`
$DIR/core/web/router_test.go: `.Router(t, app, nil)`
$DIR/core/web/router_test.go: `.NewServer(router)`
$DIR/core/web/router_test.go: `.NewTestLocalOnlyHTTPClient()`
$DIR/core/web/router_test.go: `.NewRequestWithContext(ctx, "POST", ts.URL+"/sessions", bytes.NewBufferString(input))`
$DIR/core/web/router_test.go: `.NewBufferString(input)`
$DIR/core/web/router_test.go: `.Do(request)`
$DIR/core/web/router_test.go: `.NewRequestWithContext(ctx, "POST", ts.URL+"/sessions", bytes.NewBufferString(input))`
$DIR/core/web/router_test.go: `.NewBufferString(input)`
$DIR/core/web/router_test.go: `.Do(request)`
$DIR/core/web/router_test.go: `.Context(t)`
$DIR/core/web/router_test.go: `.NewApplicationEVMDisabled(t)`
$DIR/core/web/router_test.go: `.Router(t, app, nil)`
$DIR/core/web/router_test.go: `.NewServer(router)`
$DIR/core/web/router_test.go: `.NewTestLocalOnlyHTTPClient()`
$DIR/core/web/router_test.go: `.NewRequestWithContext(ctx, "POST", ts.URL+"/sessions", bytes.NewBufferString(body))`
$DIR/core/web/router_test.go: `.NewBufferString(body)`
$DIR/core/web/router_test.go: `.Do(request)`
$DIR/core/web/router_test.go: `.Context(t)`
$DIR/core/web/router_test.go: `.NewApplicationEVMDisabled(t)`
$DIR/core/web/router_test.go: `.Router(t, app, nil)`
$DIR/core/web/router_test.go: `.NewServer(router)`
$DIR/core/web/router_test.go: `.NewRequestWithContext(ctx, "GET", ts.URL, nil)`
$DIR/core/web/router_test.go: `.DefaultClient.Do(req)`
$DIR/core/web/sessions_controller_test.go: `t.Run(test.name, func(t *testing.T) {
ctx := testutils.Context(t)
body := fmt.Sprintf(`{"email":"%s","password":"%s"}`, test.email, test.password)
request, err := http.NewRequestWithContext(ctx, "POST", app.Server.URL+"/sessions", bytes.NewBufferString(body))
assert.NoError(t, err)
resp, err := client.Do(request)
assert.NoError(t, err)
defer func() { assert.NoError(t, resp.Body.Close()) }()
if test.wantSession {
require.Equal(t, http.StatusOK, resp.StatusCode)
cookies := resp.Cookies()
sessionCookie := web.FindSessionCookie(cookies)
require.NotNil(t, sessionCookie)
decrypted, err := cltest.DecodeSessionCookie(sessionCookie.Value)
require.NoError(t, err)
user, err := app.AuthenticationProvider().AuthorizedUserWithSession(ctx, decrypted)
assert.NoError(t, err)
assert.Equal(t, test.email, user.Email)
b, err := io.ReadAll(resp.Body)
assert.NoError(t, err)
assert.Contains(t, string(b), `"attributes":{"authenticated":true}`)
} else {
require.True(t, resp.StatusCode >= 400, "Should not be able to create session")
// Ignore fixture session
sessions, err := app.AuthenticationProvider().Sessions(ctx, 1, 2)
assert.NoError(t, err)
assert.Empty(t, sessions)
}
})`
$DIR/core/web/sessions_controller_test.go: `staleSession.LastUsed = time.Now().Add(-cltest.MustParseDuration(t, "241h"))`
$DIR/core/web/sessions_controller_test.go: `staleSession.Email = user.Email`
$DIR/core/web/sessions_controller_test.go: `mustInsertSession(t, app.GetDB(), &staleSession)`
$DIR/core/web/sessions_controller_test.go: `req.Header.Set("Content-Type", "application/json")`
$DIR/core/web/sessions_controller_test.go: `gomega.NewWithT(t).Eventually(func() []sessions.Session {
s, err = app.AuthenticationProvider().Sessions(ctx, 0, 10)
assert.NoError(t, err)
return s
}).Should(gomega.HaveLen(1))`
$DIR/core/web/sessions_controller_test.go: `s, err = app.AuthenticationProvider().Sessions(ctx, 0, 10)`
$DIR/core/web/sessions_controller_test.go: `correctSession.Email = user.Email`
$DIR/core/web/sessions_controller_test.go: `mustInsertSession(t, app.GetDB(), &correctSession)`
$DIR/core/web/sessions_controller_test.go: `t.Run(test.name, func(t *testing.T) {
ctx := testutils.Context(t)
cookie := cltest.MustGenerateSessionCookie(t, test.sessionID)
request, err := http.NewRequestWithContext(ctx, "DELETE", app.Server.URL+"/sessions", nil)
assert.NoError(t, err)
request.AddCookie(cookie)
resp, err := client.Do(request)
assert.NoError(t, err)
_, err = app.AuthenticationProvider().AuthorizedUserWithSession(ctx, test.sessionID)
assert.Error(t, err)
if test.success {
assert.Equal(t, http.StatusOK, resp.StatusCode)
} else {
assert.True(t, resp.StatusCode >= 400, "Should get an erroneous status code for deleting a nonexistent session id")
}
})`
$DIR/core/web/sessions_controller_test.go: `request.AddCookie(cookie)`
$DIR/core/web/sessions_controller_test.go: `_, err = app.AuthenticationProvider().AuthorizedUserWithSession(ctx, test.sessionID)`
$DIR/core/web/sessions_controller_test.go: `correctSession.Email = user.Email`
$DIR/core/web/sessions_controller_test.go: `mustInsertSession(t, app.GetDB(), &correctSession)`
$DIR/core/web/sessions_controller_test.go: `staleSession.Email = user.Email`
$DIR/core/web/sessions_controller_test.go: `staleSession.LastUsed = time.Now().Add(-cltest.MustParseDuration(t, "241h"))`
$DIR/core/web/sessions_controller_test.go: `mustInsertSession(t, app.GetDB(), &staleSession)`
$DIR/core/web/sessions_controller_test.go: `request.AddCookie(cookie)`
$DIR/core/web/sessions_controller_test.go: `.Context(t)`
$DIR/core/web/sessions_controller_test.go: `.NewApplicationEVMDisabled(t)`
$DIR/core/web/sessions_controller_test.go: `.MustRandomUser(t)`
$DIR/core/web/sessions_controller_test.go: `.NewTestLocalOnlyHTTPClient()`
$DIR/core/web/sessions_controller_test.go: `.Run(test.name, func(t *testing.T) {
ctx := testutils.Context(t)
body := fmt.Sprintf(`{"email":"%s","password":"%s"}`, test.email, test.password)
request, err := http.NewRequestWithContext(ctx, "POST", app.Server.URL+"/sessions", bytes.NewBufferString(body))
assert.NoError(t, err)
resp, err := client.Do(request)
assert.NoError(t, err)
defer func() { assert.NoError(t, resp.Body.Close()) }()
if test.wantSession {
require.Equal(t, http.StatusOK, resp.StatusCode)
cookies := resp.Cookies()
sessionCookie := web.FindSessionCookie(cookies)
require.NotNil(t, sessionCookie)
decrypted, err := cltest.DecodeSessionCookie(sessionCookie.Value)
require.NoError(t, err)
user, err := app.AuthenticationProvider().AuthorizedUserWithSession(ctx, decrypted)
assert.NoError(t, err)
assert.Equal(t, test.email, user.Email)
b, err := io.ReadAll(resp.Body)
assert.NoError(t, err)
assert.Contains(t, string(b), `"attributes":{"authenticated":true}`)
} else {
require.True(t, resp.StatusCode >= 400, "Should not be able to create session")
// Ignore fixture session
sessions, err := app.AuthenticationProvider().Sessions(ctx, 1, 2)
assert.NoError(t, err)
assert.Empty(t, sessions)
}
})`
$DIR/core/web/sessions_controller_test.go: `.Context(t)`
$DIR/core/web/sessions_controller_test.go: `.Sprintf(`{"email":"%s","password":"%s"}`, test.email, test.password)`
$DIR/core/web/sessions_controller_test.go: `.NewRequestWithContext(ctx, "POST", app.Server.URL+"/sessions", bytes.NewBufferString(body))`
$DIR/core/web/sessions_controller_test.go: `.NewBufferString(body)`
$DIR/core/web/sessions_controller_test.go: `.Do(request)`
$DIR/core/web/sessions_controller_test.go: `.Cookies()`
$DIR/core/web/sessions_controller_test.go: `.FindSessionCookie(cookies)`
$DIR/core/web/sessions_controller_test.go: `.DecodeSessionCookie(sessionCookie.Value)`
$DIR/core/web/sessions_controller_test.go: `.AuthenticationProvider()`
$DIR/core/web/sessions_controller_test.go: `.AuthorizedUserWithSession(ctx, decrypted)`
$DIR/core/web/sessions_controller_test.go: `.ReadAll(resp.Body)`
$DIR/core/web/sessions_controller_test.go: `.AuthenticationProvider()`
$DIR/core/web/sessions_controller_test.go: `.Sessions(ctx, 1, 2)`
$DIR/core/web/sessions_controller_test.go: `.Context(t)`
$DIR/core/web/sessions_controller_test.go: `.NewApplicationEVMDisabled(t)`
$DIR/core/web/sessions_controller_test.go: `.MustRandomUser(t)`
$DIR/core/web/sessions_controller_test.go: `.NewSession()`
$DIR/core/web/sessions_controller_test.go: `.Now()`
$DIR/core/web/sessions_controller_test.go: `.Add(-cltest.MustParseDuration(t, "241h"))`
$DIR/core/web/sessions_controller_test.go: `.MustParseDuration(t, "241h")`
$DIR/core/web/sessions_controller_test.go: `.GetDB()`
$DIR/core/web/sessions_controller_test.go: `.Sprintf(`{"email":"%s","password":"%s"}`, user.Email, cltest.Password)`
$DIR/core/web/sessions_controller_test.go: `.NewRequestWithContext(ctx, "POST", app.Server.URL+"/sessions", bytes.NewBufferString(body))`
$DIR/core/web/sessions_controller_test.go: `.NewBufferString(body)`
$DIR/core/web/sessions_controller_test.go: `.Header.Set("Content-Type", "application/json")`
$DIR/core/web/sessions_controller_test.go: `.DefaultClient.Do(req)`
$DIR/core/web/sessions_controller_test.go: `.NewWithT(t)`
$DIR/core/web/sessions_controller_test.go: `.Eventually(func() []sessions.Session {
s, err = app.AuthenticationProvider().Sessions(ctx, 0, 10)
assert.NoError(t, err)
return s
})`
$DIR/core/web/sessions_controller_test.go: `.AuthenticationProvider()`
$DIR/core/web/sessions_controller_test.go: `.Sessions(ctx, 0, 10)`
$DIR/core/web/sessions_controller_test.go: `.Should(gomega.HaveLen(1))`
$DIR/core/web/sessions_controller_test.go: `.HaveLen(1)`
$DIR/core/web/sessions_controller_test.go: `.Context(t)`
$DIR/core/web/sessions_controller_test.go: `.NewApplicationEVMDisabled(t)`
$DIR/core/web/sessions_controller_test.go: `.MustRandomUser(t)`
$DIR/core/web/sessions_controller_test.go: `.NewSession()`
$DIR/core/web/sessions_controller_test.go: `.GetDB()`
$DIR/core/web/sessions_controller_test.go: `.NewTestLocalOnlyHTTPClient()`
$DIR/core/web/sessions_controller_test.go: `.Run(test.name, func(t *testing.T) {
ctx := testutils.Context(t)
cookie := cltest.MustGenerateSessionCookie(t, test.sessionID)
request, err := http.NewRequestWithContext(ctx, "DELETE", app.Server.URL+"/sessions", nil)
assert.NoError(t, err)
request.AddCookie(cookie)
resp, err := client.Do(request)
assert.NoError(t, err)
_, err = app.AuthenticationProvider().AuthorizedUserWithSession(ctx, test.sessionID)
assert.Error(t, err)
if test.success {
assert.Equal(t, http.StatusOK, resp.StatusCode)
} else {
assert.True(t, resp.StatusCode >= 400, "Should get an erroneous status code for deleting a nonexistent session id")
}
})`
$DIR/core/web/sessions_controller_test.go: `.Context(t)`
$DIR/core/web/sessions_controller_test.go: `.MustGenerateSessionCookie(t, test.sessionID)`
$DIR/core/web/sessions_controller_test.go: `.NewRequestWithContext(ctx, "DELETE", app.Server.URL+"/sessions", nil)`
$DIR/core/web/sessions_controller_test.go: `.AddCookie(cookie)`
$DIR/core/web/sessions_controller_test.go: `.Do(request)`
$DIR/core/web/sessions_controller_test.go: `.AuthenticationProvider()`
$DIR/core/web/sessions_controller_test.go: `.AuthorizedUserWithSession(ctx, test.sessionID)`
$DIR/core/web/sessions_controller_test.go: `.Context(t)`
$DIR/core/web/sessions_controller_test.go: `.NewTestLocalOnlyHTTPClient()`
$DIR/core/web/sessions_controller_test.go: `.NewApplicationEVMDisabled(t)`
$DIR/core/web/sessions_controller_test.go: `.MustRandomUser(t)`
$DIR/core/web/sessions_controller_test.go: `.NewSession()`
$DIR/core/web/sessions_controller_test.go: `.GetDB()`
$DIR/core/web/sessions_controller_test.go: `.MustGenerateSessionCookie(t, correctSession.ID)`
$DIR/core/web/sessions_controller_test.go: `.NewSession()`
$DIR/core/web/sessions_controller_test.go: `.Now()`
$DIR/core/web/sessions_controller_test.go: `.Add(-cltest.MustParseDuration(t, "241h"))`
$DIR/core/web/sessions_controller_test.go: `.MustParseDuration(t, "241h")`
$DIR/core/web/sessions_controller_test.go: `.GetDB()`
$DIR/core/web/sessions_controller_test.go: `.NewRequestWithContext(ctx, "DELETE", app.Server.URL+"/sessions", nil)`
$DIR/core/web/sessions_controller_test.go: `.AddCookie(cookie)`
$DIR/core/web/sessions_controller_test.go: `.Do(request)`
$DIR/core/web/sessions_controller_test.go: `.NewWithT(t)`
$DIR/core/web/sessions_controller_test.go: `.Eventually(func() []sessions.Session {
sessions, err := app.AuthenticationProvider().Sessions(ctx, 0, 10)
assert.NoError(t, err)
return sessions
})`
$DIR/core/web/sessions_controller_test.go: `.AuthenticationProvider()`
$DIR/core/web/sessions_controller_test.go: `.Sessions(ctx, 0, 10)`
$DIR/core/web/sessions_controller_test.go: `.HaveLen(0)`
$DIR/core/web/solana_chains_controller_test.go: `t.Run(tc.name, func(t *testing.T) {
t.Parallel()
controller := setupSolanaChainsControllerTestV2(t, &config.TOMLConfig{
ChainID: ptr(validId),
Chain: config.Chain{
SkipPreflight: ptr(false),
TxTimeout: commoncfg.MustNewDuration(time.Hour),
},
})
wantedResult := tc.want(t, controller.app)
resp, cleanup := controller.client.Get(
fmt.Sprintf("/v2/chains/solana/%s", tc.inputId),
)
t.Cleanup(cleanup)
require.Equal(t, tc.wantStatusCode, resp.StatusCode)
if wantedResult != nil {
resource1 := presenters.SolanaChainResource{}
err := web.ParseJSONAPIResponse(cltest.ParseResponseBody(t, resp), &resource1)
require.NoError(t, err)
assert.Equal(t, wantedResult.ID, resource1.ID)
assert.Equal(t, wantedResult.Enabled, resource1.Enabled)
assert.Equal(t, wantedResult.Config, resource1.Config)
}
})`
$DIR/core/web/solana_chains_controller_test.go: `t.Cleanup(cleanup)`
$DIR/core/web/solana_chains_controller_test.go: `t.Cleanup(cleanup)`
$DIR/core/web/solana_chains_controller_test.go: `t.Cleanup(cleanup)`
$DIR/core/web/solana_chains_controller_test.go: `err = web.ParsePaginatedResponse(body, &chains, &links)`
$DIR/core/web/solana_chains_controller_test.go: `resp, cleanup = controller.client.Get(links["next"].Href)`
$DIR/core/web/solana_chains_controller_test.go: `t.Cleanup(cleanup)`
$DIR/core/web/solana_chains_controller_test.go: `chains = []presenters.SolanaChainResource{}`
$DIR/core/web/solana_chains_controller_test.go: `err = web.ParsePaginatedResponse(cltest.ParseResponseBody(t, resp), &chains, &links)`
$DIR/core/web/solana_chains_controller_test.go: `.Run(tc.name, func(t *testing.T) {
t.Parallel()
controller := setupSolanaChainsControllerTestV2(t, &config.TOMLConfig{
ChainID: ptr(validId),
Chain: config.Chain{
SkipPreflight: ptr(false),
TxTimeout: commoncfg.MustNewDuration(time.Hour),
},
})
wantedResult := tc.want(t, controller.app)
resp, cleanup := controller.client.Get(
fmt.Sprintf("/v2/chains/solana/%s", tc.inputId),
)
t.Cleanup(cleanup)
require.Equal(t, tc.wantStatusCode, resp.StatusCode)
if wantedResult != nil {
resource1 := presenters.SolanaChainResource{}
err := web.ParseJSONAPIResponse(cltest.ParseResponseBody(t, resp), &resource1)
require.NoError(t, err)
assert.Equal(t, wantedResult.ID, resource1.ID)
assert.Equal(t, wantedResult.Enabled, resource1.Enabled)
assert.Equal(t, wantedResult.Config, resource1.Config)
}
})`
$DIR/core/web/solana_chains_controller_test.go: `.MustNewDuration(time.Hour)`
$DIR/core/web/solana_chains_controller_test.go: `.want(t, controller.app)`
$DIR/core/web/solana_chains_controller_test.go: `.client.Get(
fmt.Sprintf("/v2/chains/solana/%s", tc.inputId),
)`
$DIR/core/web/solana_chains_controller_test.go: `.Sprintf("/v2/chains/solana/%s", tc.inputId)`
$DIR/core/web/solana_chains_controller_test.go: `.Cleanup(cleanup)`
$DIR/core/web/solana_chains_controller_test.go: `.ParseJSONAPIResponse(cltest.ParseResponseBody(t, resp), &resource1)`
$DIR/core/web/solana_chains_controller_test.go: `.ParseResponseBody(t, resp)`
$DIR/core/web/solana_chains_controller_test.go: `.Sprintf("ChainlinktestA-%d", rand.Int31n(999999))`
$DIR/core/web/solana_chains_controller_test.go: `.Int31n(999999)`
$DIR/core/web/solana_chains_controller_test.go: `.MustNewDuration(time.Hour)`
$DIR/core/web/solana_chains_controller_test.go: `.Sprintf("ChainlinktestB-%d", rand.Int31n(999999))`
$DIR/core/web/solana_chains_controller_test.go: `.Int31n(999999)`
$DIR/core/web/solana_chains_controller_test.go: `.client.Get("/v2/chains/solana?size=asd")`
$DIR/core/web/solana_chains_controller_test.go: `.Cleanup(cleanup)`
$DIR/core/web/solana_chains_controller_test.go: `.client.Get("/v2/chains/solana?size=1")`
$DIR/core/web/solana_chains_controller_test.go: `.Cleanup(cleanup)`
$DIR/core/web/solana_chains_controller_test.go: `.ParseResponseBody(t, resp)`
$DIR/core/web/solana_chains_controller_test.go: `.ParseJSONAPIResponseMetaCount(body)`
$DIR/core/web/solana_chains_controller_test.go: `.ParsePaginatedResponse(body, &chains, &links)`
$DIR/core/web/solana_chains_controller_test.go: `.TOMLString()`
$DIR/core/web/solana_chains_controller_test.go: `.client.Get(links["next"].Href)`
$DIR/core/web/solana_chains_controller_test.go: `.Cleanup(cleanup)`
$DIR/core/web/solana_chains_controller_test.go: `.ParsePaginatedResponse(cltest.ParseResponseBody(t, resp), &chains, &links)`
$DIR/core/web/solana_chains_controller_test.go: `.ParseResponseBody(t, resp)`
$DIR/core/web/solana_chains_controller_test.go: `.TOMLString()`
$DIR/core/web/solana_keys_controller_test.go: `t.Cleanup(cleanup)`
$DIR/core/web/solana_keys_controller_test.go: `cltest.AssertServerResponse(t, response, http.StatusOK)`
$DIR/core/web/solana_keys_controller_test.go: `t.Cleanup(cleanup)`
$DIR/core/web/solana_keys_controller_test.go: `cltest.AssertServerResponse(t, response, http.StatusOK)`
$DIR/core/web/solana_keys_controller_test.go: `_, err = keyStore.Solana().Get(resource.ID)`
$DIR/core/web/solana_keys_controller_test.go: `t.Cleanup(cleanup)`
$DIR/core/web/solana_keys_controller_test.go: `t.Cleanup(cleanup)`
$DIR/core/web/solana_keys_controller_test.go: `keys, _ = keyStore.Solana().GetAll()`
$DIR/core/web/solana_keys_controller_test.go: `.Solana()`
$DIR/core/web/solana_keys_controller_test.go: `.GetAll()`
$DIR/core/web/solana_keys_controller_test.go: `.Get("/v2/keys/solana")`
$DIR/core/web/solana_keys_controller_test.go: `.Cleanup(cleanup)`
$DIR/core/web/solana_keys_controller_test.go: `.AssertServerResponse(t, response, http.StatusOK)`
$DIR/core/web/solana_keys_controller_test.go: `.ParseJSONAPIResponse(cltest.ParseResponseBody(t, response), &resources)`
$DIR/core/web/solana_keys_controller_test.go: `.ParseResponseBody(t, response)`
$DIR/core/web/solana_keys_controller_test.go: `.PublicKeyStr()`
$DIR/core/web/solana_keys_controller_test.go: `.NewApplicationEVMDisabled(t)`
$DIR/core/web/solana_keys_controller_test.go: `.NewHTTPClient(nil)`
$DIR/core/web/solana_keys_controller_test.go: `.GetKeyStore()`
$DIR/core/web/solana_keys_controller_test.go: `.Post("/v2/keys/solana", nil)`
$DIR/core/web/solana_keys_controller_test.go: `.Cleanup(cleanup)`
$DIR/core/web/solana_keys_controller_test.go: `.AssertServerResponse(t, response, http.StatusOK)`
$DIR/core/web/solana_keys_controller_test.go: `.Solana()`
$DIR/core/web/solana_keys_controller_test.go: `.GetAll()`
$DIR/core/web/solana_keys_controller_test.go: `.ParseJSONAPIResponse(cltest.ParseResponseBody(t, response), &resource)`
$DIR/core/web/solana_keys_controller_test.go: `.ParseResponseBody(t, response)`
$DIR/core/web/solana_keys_controller_test.go: `.Solana()`
$DIR/core/web/solana_keys_controller_test.go: `.Get(resource.ID)`
$DIR/core/web/solana_keys_controller_test.go: `.Delete("/v2/keys/solana/" + nonExistentSolanaKeyID)`
$DIR/core/web/solana_keys_controller_test.go: `.Cleanup(cleanup)`
$DIR/core/web/solana_keys_controller_test.go: `.Context(t)`
$DIR/core/web/solana_keys_controller_test.go: `.Solana()`
$DIR/core/web/solana_keys_controller_test.go: `.GetAll()`
$DIR/core/web/solana_keys_controller_test.go: `.Solana()`
$DIR/core/web/solana_keys_controller_test.go: `.Create(ctx)`
$DIR/core/web/solana_keys_controller_test.go: `.Delete(fmt.Sprintf("/v2/keys/solana/%s", key.ID()))`
$DIR/core/web/solana_keys_controller_test.go: `.Sprintf("/v2/keys/solana/%s", key.ID())`
$DIR/core/web/solana_keys_controller_test.go: `.ID()`
$DIR/core/web/solana_keys_controller_test.go: `.Cleanup(cleanup)`
$DIR/core/web/solana_keys_controller_test.go: `.Solana()`
$DIR/core/web/solana_keys_controller_test.go: `.GetAll()`
$DIR/core/web/starknet_keys_controller_test.go: `t.Cleanup(cleanup)`
$DIR/core/web/starknet_keys_controller_test.go: `cltest.AssertServerResponse(t, response, http.StatusOK)`
$DIR/core/web/starknet_keys_controller_test.go: `t.Cleanup(cleanup)`
$DIR/core/web/starknet_keys_controller_test.go: `cltest.AssertServerResponse(t, response, http.StatusOK)`
$DIR/core/web/starknet_keys_controller_test.go: `_, err = keyStore.StarkNet().Get(resource.ID)`
$DIR/core/web/starknet_keys_controller_test.go: `t.Cleanup(cleanup)`
$DIR/core/web/starknet_keys_controller_test.go: `t.Cleanup(cleanup)`
$DIR/core/web/starknet_keys_controller_test.go: `keys, _ = keyStore.StarkNet().GetAll()`
$DIR/core/web/starknet_keys_controller_test.go: `.StarkNet()`
$DIR/core/web/starknet_keys_controller_test.go: `.GetAll()`
$DIR/core/web/starknet_keys_controller_test.go: `.Get("/v2/keys/starknet")`
$DIR/core/web/starknet_keys_controller_test.go: `.Cleanup(cleanup)`
$DIR/core/web/starknet_keys_controller_test.go: `.AssertServerResponse(t, response, http.StatusOK)`
$DIR/core/web/starknet_keys_controller_test.go: `.ParseJSONAPIResponse(cltest.ParseResponseBody(t, response), &resources)`
$DIR/core/web/starknet_keys_controller_test.go: `.ParseResponseBody(t, response)`
$DIR/core/web/starknet_keys_controller_test.go: `.StarkKeyStr()`
$DIR/core/web/starknet_keys_controller_test.go: `.NewApplicationEVMDisabled(t)`
$DIR/core/web/starknet_keys_controller_test.go: `.NewHTTPClient(nil)`
$DIR/core/web/starknet_keys_controller_test.go: `.GetKeyStore()`
$DIR/core/web/starknet_keys_controller_test.go: `.Post("/v2/keys/starknet", nil)`
$DIR/core/web/starknet_keys_controller_test.go: `.Cleanup(cleanup)`
$DIR/core/web/starknet_keys_controller_test.go: `.AssertServerResponse(t, response, http.StatusOK)`
$DIR/core/web/starknet_keys_controller_test.go: `.StarkNet()`
$DIR/core/web/starknet_keys_controller_test.go: `.GetAll()`
$DIR/core/web/starknet_keys_controller_test.go: `.ParseJSONAPIResponse(cltest.ParseResponseBody(t, response), &resource)`
$DIR/core/web/starknet_keys_controller_test.go: `.ParseResponseBody(t, response)`
$DIR/core/web/starknet_keys_controller_test.go: `.StarkNet()`
$DIR/core/web/starknet_keys_controller_test.go: `.Get(resource.ID)`
$DIR/core/web/starknet_keys_controller_test.go: `.Delete("/v2/keys/starknet/" + nonExistentStarkNetKeyID)`
$DIR/core/web/starknet_keys_controller_test.go: `.Cleanup(cleanup)`
$DIR/core/web/starknet_keys_controller_test.go: `.Context(t)`
$DIR/core/web/starknet_keys_controller_test.go: `.StarkNet()`
$DIR/core/web/starknet_keys_controller_test.go: `.GetAll()`
$DIR/core/web/starknet_keys_controller_test.go: `.StarkNet()`
$DIR/core/web/starknet_keys_controller_test.go: `.Create(ctx)`
$DIR/core/web/starknet_keys_controller_test.go: `.Delete(fmt.Sprintf("/v2/keys/starknet/%s", key.ID()))`
$DIR/core/web/starknet_keys_controller_test.go: `.Sprintf("/v2/keys/starknet/%s", key.ID())`
$DIR/core/web/starknet_keys_controller_test.go: `.ID()`
$DIR/core/web/starknet_keys_controller_test.go: `.Cleanup(cleanup)`
$DIR/core/web/starknet_keys_controller_test.go: `.StarkNet()`
$DIR/core/web/starknet_keys_controller_test.go: `.GetAll()`
$DIR/core/web/user_controller_test.go: `t.Run(tc.name, func(t *testing.T) {
resp, cleanup := client.Patch("/v2/user/password", bytes.NewBufferString(tc.reqBody))
t.Cleanup(cleanup)
errors := cltest.ParseJSONAPIErrors(t, resp.Body)
require.Equal(t, tc.wantStatusCode, resp.StatusCode)
assert.Len(t, errors.Errors, tc.wantErrCount)
if tc.wantErrMessage != "" {
assert.Equal(t, tc.wantErrMessage, errors.Errors[0].Detail)
}
})`
$DIR/core/web/user_controller_test.go: `t.Cleanup(cleanup)`
$DIR/core/web/user_controller_test.go: `t.Run(tc.name, func(t *testing.T) {
resp, cleanup := client.Post("/v2/users", bytes.NewBufferString(tc.reqBody))
t.Cleanup(cleanup)
errors := cltest.ParseJSONAPIErrors(t, resp.Body)
require.Equal(t, tc.wantStatusCode, resp.StatusCode)
assert.Len(t, errors.Errors, tc.wantErrCount)
if tc.wantErrMessage != "" {
assert.Contains(t, errors.Errors[0].Detail, tc.wantErrMessage)
}
})`
$DIR/core/web/user_controller_test.go: `t.Cleanup(cleanup)`
$DIR/core/web/user_controller_test.go: `t.Run(tc.name, func(t *testing.T) {
resp, cleanup := client.Patch("/v2/users", bytes.NewBufferString(tc.reqBody))
t.Cleanup(cleanup)
errors := cltest.ParseJSONAPIErrors(t, resp.Body)
require.Equal(t, tc.wantStatusCode, resp.StatusCode)
assert.Len(t, errors.Errors, tc.wantErrCount)
if tc.wantErrMessage != "" {
assert.Contains(t, errors.Errors[0].Detail, tc.wantErrMessage)
}
})`
$DIR/core/web/user_controller_test.go: `t.Cleanup(cleanup)`
$DIR/core/web/user_controller_test.go: `t.Cleanup(cleanup)`
$DIR/core/web/user_controller_test.go: `resp, cleanup = client.Delete(fmt.Sprintf("/v2/users/%s", url.QueryEscape(user.Email)))`
$DIR/core/web/user_controller_test.go: `t.Cleanup(cleanup)`
$DIR/core/web/user_controller_test.go: `errors = cltest.ParseJSONAPIErrors(t, resp.Body)`
$DIR/core/web/user_controller_test.go: `err = cltest.ParseJSONAPIResponse(t, resp, &authToken)`
$DIR/core/web/user_controller_test.go: `.NewApplicationEVMDisabled(t)`
$DIR/core/web/user_controller_test.go: `.NewHTTPClient(&u)`
$DIR/core/web/user_controller_test.go: `.Sprintf(`{"newPassword": "%v", "oldPassword": "%v"}`, "foo", cltest.Password)`
$DIR/core/web/user_controller_test.go: `.Sprintf("%s %s\n", utils.ErrMsgHeader, "password is less than 16 characters long")`
$DIR/core/web/user_controller_test.go: `.Sprintf(`{"newPassword": "%slonglonglonglong", "oldPassword": "%s"}`, u.Email, cltest.Password)`
$DIR/core/web/user_controller_test.go: `.Sprintf("%s %s%s\n", utils.ErrMsgHeader, "password may not contain: ", fmt.Sprintf(`"%s"`, u.Email))`
$DIR/core/web/user_controller_test.go: `.Sprintf(`"%s"`, u.Email)`
$DIR/core/web/user_controller_test.go: `.Sprintf(`{"newPassword": "%v", "oldPassword": "%v"}`, cltest.Password, cltest.Password)`
$DIR/core/web/user_controller_test.go: `.Run(tc.name, func(t *testing.T) {
resp, cleanup := client.Patch("/v2/user/password", bytes.NewBufferString(tc.reqBody))
t.Cleanup(cleanup)
errors := cltest.ParseJSONAPIErrors(t, resp.Body)
require.Equal(t, tc.wantStatusCode, resp.StatusCode)
assert.Len(t, errors.Errors, tc.wantErrCount)
if tc.wantErrMessage != "" {
assert.Equal(t, tc.wantErrMessage, errors.Errors[0].Detail)
}
})`
$DIR/core/web/user_controller_test.go: `.Patch("/v2/user/password", bytes.NewBufferString(tc.reqBody))`
$DIR/core/web/user_controller_test.go: `.NewBufferString(tc.reqBody)`
$DIR/core/web/user_controller_test.go: `.Cleanup(cleanup)`
$DIR/core/web/user_controller_test.go: `.ParseJSONAPIErrors(t, resp.Body)`
$DIR/core/web/user_controller_test.go: `.NewApplicationEVMDisabled(t)`
$DIR/core/web/user_controller_test.go: `.NewHTTPClient(nil)`
$DIR/core/web/user_controller_test.go: `.Repeat("x", sessions.MaxBcryptPasswordLength+1)`
$DIR/core/web/user_controller_test.go: `.Sprintf(`{"email": "12345678", "role": "view", "password": "%v"}`, cltest.Password)`
$DIR/core/web/user_controller_test.go: `.Sprintf(`{"email": "", "role": "view", "password": "%v"}`, cltest.Password)`
$DIR/core/web/user_controller_test.go: `.Sprintf(`{"email": "abc@email.com", "role": "", "password": "%v"}`, cltest.Password)`
$DIR/core/web/user_controller_test.go: `.Sprintf(`{"email": "abc@email.com", "role": "view", "password": "%v"}`, longPassword)`
$DIR/core/web/user_controller_test.go: `.Sprintf(`{"email": "%s", "role": "edit", "password": "%v"}`, cltest.MustRandomUser(t).Email, cltest.Password)`
$DIR/core/web/user_controller_test.go: `.MustRandomUser(t)`
$DIR/core/web/user_controller_test.go: `.Run(tc.name, func(t *testing.T) {
resp, cleanup := client.Post("/v2/users", bytes.NewBufferString(tc.reqBody))
t.Cleanup(cleanup)
errors := cltest.ParseJSONAPIErrors(t, resp.Body)
require.Equal(t, tc.wantStatusCode, resp.StatusCode)
assert.Len(t, errors.Errors, tc.wantErrCount)
if tc.wantErrMessage != "" {
assert.Contains(t, errors.Errors[0].Detail, tc.wantErrMessage)
}
})`
$DIR/core/web/user_controller_test.go: `.Post("/v2/users", bytes.NewBufferString(tc.reqBody))`
$DIR/core/web/user_controller_test.go: `.NewBufferString(tc.reqBody)`
$DIR/core/web/user_controller_test.go: `.Cleanup(cleanup)`
$DIR/core/web/user_controller_test.go: `.ParseJSONAPIErrors(t, resp.Body)`
$DIR/core/web/user_controller_test.go: `.Context(t)`
$DIR/core/web/user_controller_test.go: `.NewApplicationEVMDisabled(t)`
$DIR/core/web/user_controller_test.go: `.NewHTTPClient(nil)`
$DIR/core/web/user_controller_test.go: `.MustRandomUser(t)`
$DIR/core/web/user_controller_test.go: `.AuthenticationProvider()`
$DIR/core/web/user_controller_test.go: `.CreateUser(ctx, &user)`
$DIR/core/web/user_controller_test.go: `.Sprintf(`{"email": "%s", "newRole": "edit"}`, user.Email)`
$DIR/core/web/user_controller_test.go: `.Run(tc.name, func(t *testing.T) {
resp, cleanup := client.Patch("/v2/users", bytes.NewBufferString(tc.reqBody))
t.Cleanup(cleanup)
errors := cltest.ParseJSONAPIErrors(t, resp.Body)
require.Equal(t, tc.wantStatusCode, resp.StatusCode)
assert.Len(t, errors.Errors, tc.wantErrCount)
if tc.wantErrMessage != "" {
assert.Contains(t, errors.Errors[0].Detail, tc.wantErrMessage)
}
})`
$DIR/core/web/user_controller_test.go: `.Patch("/v2/users", bytes.NewBufferString(tc.reqBody))`
$DIR/core/web/user_controller_test.go: `.NewBufferString(tc.reqBody)`
$DIR/core/web/user_controller_test.go: `.Cleanup(cleanup)`
$DIR/core/web/user_controller_test.go: `.ParseJSONAPIErrors(t, resp.Body)`
$DIR/core/web/user_controller_test.go: `.Context(t)`
$DIR/core/web/user_controller_test.go: `.NewApplicationEVMDisabled(t)`
$DIR/core/web/user_controller_test.go: `.NewHTTPClient(nil)`
$DIR/core/web/user_controller_test.go: `.MustRandomUser(t)`
$DIR/core/web/user_controller_test.go: `.AuthenticationProvider()`
$DIR/core/web/user_controller_test.go: `.CreateUser(ctx, &user)`
$DIR/core/web/user_controller_test.go: `.Delete(fmt.Sprintf("/v2/users/%s", url.QueryEscape(user.Email)))`
$DIR/core/web/user_controller_test.go: `.Sprintf("/v2/users/%s", url.QueryEscape(user.Email))`
$DIR/core/web/user_controller_test.go: `.QueryEscape(user.Email)`
$DIR/core/web/user_controller_test.go: `.Cleanup(cleanup)`
$DIR/core/web/user_controller_test.go: `.ParseJSONAPIErrors(t, resp.Body)`
$DIR/core/web/user_controller_test.go: `.Delete(fmt.Sprintf("/v2/users/%s", url.QueryEscape(user.Email)))`
$DIR/core/web/user_controller_test.go: `.Sprintf("/v2/users/%s", url.QueryEscape(user.Email))`
$DIR/core/web/user_controller_test.go: `.QueryEscape(user.Email)`
$DIR/core/web/user_controller_test.go: `.Cleanup(cleanup)`
$DIR/core/web/user_controller_test.go: `.ParseJSONAPIErrors(t, resp.Body)`
$DIR/core/web/user_controller_test.go: `.NewApplicationEVMDisabled(t)`
$DIR/core/web/user_controller_test.go: `.NewHTTPClient(nil)`
$DIR/core/web/user_controller_test.go: `.Marshal(sessions.ChangeAuthTokenRequest{
Password: cltest.Password,
})`
$DIR/core/web/user_controller_test.go: `.Post("/v2/user/token", bytes.NewBuffer(req))`
$DIR/core/web/user_controller_test.go: `.NewBuffer(req)`
$DIR/core/web/user_controller_test.go: `.ParseJSONAPIResponse(t, resp, &authToken)`
$DIR/core/web/user_controller_test.go: `.NewApplicationEVMDisabled(t)`
$DIR/core/web/user_controller_test.go: `.NewHTTPClient(nil)`
$DIR/core/web/user_controller_test.go: `.Marshal(sessions.ChangeAuthTokenRequest{
Password: "wrong-password",
})`
$DIR/core/web/user_controller_test.go: `.Post("/v2/user/token", bytes.NewBuffer(req))`
$DIR/core/web/user_controller_test.go: `.NewBuffer(req)`
$DIR/core/web/user_controller_test.go: `.NewApplicationEVMDisabled(t)`
$DIR/core/web/user_controller_test.go: `.NewHTTPClient(nil)`
$DIR/core/web/user_controller_test.go: `.Marshal(sessions.ChangeAuthTokenRequest{
Password: cltest.Password,
})`
$DIR/core/web/user_controller_test.go: `.Post("/v2/user/token/delete", bytes.NewBuffer(req))`
$DIR/core/web/user_controller_test.go: `.NewBuffer(req)`
$DIR/core/web/user_controller_test.go: `.NewApplicationEVMDisabled(t)`
$DIR/core/web/user_controller_test.go: `.NewHTTPClient(nil)`
$DIR/core/web/user_controller_test.go: `.Marshal(sessions.ChangeAuthTokenRequest{
Password: "wrong-password",
})`
$DIR/core/web/user_controller_test.go: `.Post("/v2/user/token/delete", bytes.NewBuffer(req))`
$DIR/core/web/user_controller_test.go: `.NewBuffer(req)`
$DIR/integration-tests/benchmark/keeper_test.go: `l.Info().Str("Test Name", testName).Msg("Running Benchmark Test")`
$DIR/integration-tests/benchmark/keeper_test.go: `l.Info().Str("Namespace", testEnvironment.Cfg.Namespace).Msg("Connected to Keepers Benchmark Environment")`
$DIR/integration-tests/benchmark/keeper_test.go: `t.Cleanup(func() {
if err = actions_seth.TeardownRemoteSuite(keeperBenchmarkTest.TearDownVals(t)); err != nil {
l.Error().Err(err).Msg("Error when tearing down remote suite")
}
})`
$DIR/integration-tests/benchmark/keeper_test.go: `keeperBenchmarkTest.Setup(testEnvironment, &config)`
$DIR/integration-tests/benchmark/keeper_test.go: `.GetTestLogger(t)`
$DIR/integration-tests/benchmark/keeper_test.go: `.GetConfigurationNameFromEnv()`
$DIR/integration-tests/benchmark/keeper_test.go: `.GetConfig(testType, tc.Keeper)`
$DIR/integration-tests/benchmark/keeper_test.go: `.WillUseRemoteRunner()`
$DIR/integration-tests/benchmark/keeper_test.go: `.ReplaceAll(benchmarkNetwork.Name, " ", "")`
$DIR/integration-tests/benchmark/keeper_test.go: `.Sprintf("%s%s", networkName, *config.Keeper.Common.RegistryToTest)`
$DIR/integration-tests/benchmark/keeper_test.go: `.Info()`
$DIR/integration-tests/benchmark/keeper_test.go: `.Str("Test Name", testName)`
$DIR/integration-tests/benchmark/keeper_test.go: `.Msg("Running Benchmark Test")`
$DIR/integration-tests/benchmark/keeper_test.go: `.Info()`
$DIR/integration-tests/benchmark/keeper_test.go: `.Str("Namespace", testEnvironment.Cfg.Namespace)`
$DIR/integration-tests/benchmark/keeper_test.go: `.Msg("Connected to Keepers Benchmark Environment")`
$DIR/integration-tests/benchmark/keeper_test.go: `.MustReplaceSimulatedNetworkUrlWithK8(l, benchmarkNetwork, *testEnvironment)`
$DIR/integration-tests/benchmark/keeper_test.go: `.GetChainClientWithConfigFunction(&config, testNetwork, actions_seth.OneEphemeralKeysLiveTestnetAutoFixFn)`
$DIR/integration-tests/benchmark/keeper_test.go: `.NewKeeperBenchmarkTest(t,
testsetups.KeeperBenchmarkTestInputs{
BlockchainClient: chainClient,
RegistryVersions: registryVersions,
KeeperRegistrySettings: &contracts.KeeperRegistrySettings{
PaymentPremiumPPB: uint32(0),
FlatFeeMicroLINK: uint32(40000),
BlockCountPerTurn: big.NewInt(100),
CheckGasLimit: uint32(45_000_000), //45M
StalenessSeconds: big.NewInt(90_000),
GasCeilingMultiplier: uint16(2),
MaxPerformGas: uint32(*config.Keeper.Common.MaxPerformGas),
MinUpkeepSpend: big.NewInt(0),
FallbackGasPrice: big.NewInt(2e11),
FallbackLinkPrice: big.NewInt(2e18),
MaxCheckDataSize: uint32(5_000),
MaxPerformDataSize: uint32(5_000),
MaxRevertDataSize: uint32(5_000),
},
Upkeeps: &testsetups.UpkeepConfig{
NumberOfUpkeeps: *config.Keeper.Common.NumberOfUpkeeps,
CheckGasToBurn: *config.Keeper.Common.CheckGasToBurn,
PerformGasToBurn: *config.Keeper.Common.PerformGasToBurn,
BlockRange: *config.Keeper.Common.BlockRange,
BlockInterval: *config.Keeper.Common.BlockInterval,
UpkeepGasLimit: *config.Keeper.Common.UpkeepGasLimit,
FirstEligibleBuffer: 1,
},
Contracts: &testsetups.PreDeployedContracts{
RegistrarAddress: *config.Keeper.Common.RegistrarAddress,
RegistryAddress: *config.Keeper.Common.RegistryAddress,
LinkTokenAddress: *config.Keeper.Common.LinkTokenAddress,
EthFeedAddress: *config.Keeper.Common.EthFeedAddress,
GasFeedAddress: *config.Keeper.Common.GasFeedAddress,
},
ChainlinkNodeFunding: benchmarkTestNetwork.funding,
UpkeepSLA: benchmarkTestNetwork.upkeepSLA,
BlockTime: benchmarkTestNetwork.blockTime,
DeltaStage: benchmarkTestNetwork.deltaStage,
ForceSingleTxnKey: *config.Keeper.Common.ForceSingleTxKey,
DeleteJobsOnEnd: *config.Keeper.Common.DeleteJobsOnEnd,
},
)`
$DIR/integration-tests/benchmark/keeper_test.go: `.NewInt(100)`
$DIR/integration-tests/benchmark/keeper_test.go: `.NewInt(90_000)`
$DIR/integration-tests/benchmark/keeper_test.go: `.NewInt(0)`
$DIR/integration-tests/benchmark/keeper_test.go: `.NewInt(2e11)`
$DIR/integration-tests/benchmark/keeper_test.go: `.NewInt(2e18)`
$DIR/integration-tests/benchmark/keeper_test.go: `.Cleanup(func() {
if err = actions_seth.TeardownRemoteSuite(keeperBenchmarkTest.TearDownVals(t)); err != nil {
l.Error().Err(err).Msg("Error when tearing down remote suite")
}
})`
$DIR/integration-tests/benchmark/keeper_test.go: `.TeardownRemoteSuite(keeperBenchmarkTest.TearDownVals(t))`
$DIR/integration-tests/benchmark/keeper_test.go: `.TearDownVals(t)`
$DIR/integration-tests/benchmark/keeper_test.go: `.Setup(testEnvironment, &config)`
$DIR/integration-tests/chaos/automation_chaos_test.go: `t.Run(name, func(t *testing.T) {
t.Parallel()
config, err := tc.GetConfig("Chaos", tc.Automation)
if err != nil {
t.Fatal(err)
}
var overrideFn = func(_ interface{}, target interface{}) {
ctf_config.MustConfigOverrideChainlinkVersion(config.GetChainlinkImageConfig(), target)
ctf_config.MightConfigOverridePyroscopeKey(config.GetPyroscopeConfig(), target)
}
chainlinkCfg := chainlink.NewWithOverride(0, getDefaultAutomationSettings(&config), config.ChainlinkImage, overrideFn)
testCases := map[string]struct {
networkChart environment.ConnectedChart
clChart environment.ConnectedChart
chaosFunc chaos.ManifestFunc
chaosProps *chaos.Props
}{
// see ocr_chaos.test.go for comments
PodChaosFailMinorityNodes: {
ethereum.New(getDefaultEthereumSettings(&config)),
chainlinkCfg,
chaos.NewFailPods,
&chaos.Props{
LabelsSelector: &map[string]*string{ChaosGroupMinority: ptr.Ptr("1")},
DurationStr: "1m",
},
},
PodChaosFailMajorityNodes: {
ethereum.New(getDefaultEthereumSettings(&config)),
chainlinkCfg,
chaos.NewFailPods,
&chaos.Props{
LabelsSelector: &map[string]*string{ChaosGroupMajority: ptr.Ptr("1")},
DurationStr: "1m",
},
},
PodChaosFailMajorityDB: {
ethereum.New(getDefaultEthereumSettings(&config)),
chainlinkCfg,
chaos.NewFailPods,
&chaos.Props{
LabelsSelector: &map[string]*string{ChaosGroupMajority: ptr.Ptr("1")},
DurationStr: "1m",
ContainerNames: &[]*string{ptr.Ptr("chainlink-db")},
},
},
NetworkChaosFailMajorityNetwork: {
ethereum.New(getDefaultEthereumSettings(&config)),
chainlinkCfg,
chaos.NewNetworkPartition,
&chaos.Props{
FromLabels: &map[string]*string{ChaosGroupMajority: ptr.Ptr("1")},
ToLabels: &map[string]*string{ChaosGroupMinority: ptr.Ptr("1")},
DurationStr: "1m",
},
},
NetworkChaosFailBlockchainNode: {
ethereum.New(getDefaultEthereumSettings(&config)),
chainlinkCfg,
chaos.NewNetworkPartition,
&chaos.Props{
FromLabels: &map[string]*string{"app": ptr.Ptr("geth")},
ToLabels: &map[string]*string{ChaosGroupMajorityPlus: ptr.Ptr("1")},
DurationStr: "1m",
},
},
}
for name, testCase := range testCases {
name := name
testCase := testCase
t.Run(fmt.Sprintf("Automation_%s", name), func(t *testing.T) {
t.Parallel()
network := networks.MustGetSelectedNetworkConfig(config.Network)[0] // Need a new copy of the network for each test
testEnvironment := environment.
New(&environment.Config{
NamespacePrefix: fmt.Sprintf("chaos-automation-%s", name),
TTL: time.Hour * 1,
Test: t,
}).
AddHelm(testCase.networkChart).
AddHelm(testCase.clChart)
// TODO we need to update the image in CTF, the old one is not available anymore
// deploy blockscout if running on simulated
// AddHelm(testCase.clChart).
// AddChart(blockscout.New(&blockscout.Props{
// Name: "geth-blockscout",
// WsURL: network.URL,
// HttpURL: network.HTTPURLs[0],
// })
err = testEnvironment.Run()
require.NoError(t, err, "Error setting up test environment")
if testEnvironment.WillUseRemoteRunner() {
return
}
err = testEnvironment.Client.LabelChaosGroup(testEnvironment.Cfg.Namespace, "instance=node-", 1, 2, ChaosGroupMinority)
require.NoError(t, err)
err = testEnvironment.Client.LabelChaosGroup(testEnvironment.Cfg.Namespace, "instance=node-", 3, 5, ChaosGroupMajority)
require.NoError(t, err)
err = testEnvironment.Client.LabelChaosGroup(testEnvironment.Cfg.Namespace, "instance=node-", 2, 5, ChaosGroupMajorityPlus)
require.NoError(t, err)
chainlinkNodes, err := client.ConnectChainlinkNodes(testEnvironment)
require.NoError(t, err, "Error connecting to Chainlink nodes")
network = seth_utils.MustReplaceSimulatedNetworkUrlWithK8(l, network, *testEnvironment)
chainClient, err := actions_seth.GetChainClientWithConfigFunction(&config, network, actions_seth.OneEphemeralKeysLiveTestnetAutoFixFn)
require.NoError(t, err, "Error creating seth client")
// Register cleanup for any test
t.Cleanup(func() {
err := actions_seth.TeardownSuite(t, chainClient, testEnvironment, chainlinkNodes, nil, zapcore.PanicLevel, &config)
require.NoError(t, err, "Error tearing down environment")
})
txCost, err := actions_seth.EstimateCostForChainlinkOperations(l, chainClient, network, 1000)
require.NoError(t, err, "Error estimating cost for Chainlink Operations")
err = actions_seth.FundChainlinkNodesFromRootAddress(l, chainClient, contracts.ChainlinkK8sClientToChainlinkNodeWithKeysAndAddress(chainlinkNodes), txCost)
require.NoError(t, err, "Error funding Chainlink nodes")
linkToken, err := contracts.DeployLinkTokenContract(l, chainClient)
require.NoError(t, err, "Error deploying LINK token")
registry, registrar := actions_seth.DeployAutoOCRRegistryAndRegistrar(
t,
chainClient,
rv,
defaultOCRRegistryConfig,
linkToken,
)
// Fund the registry with LINK
err = linkToken.Transfer(registry.Address(), big.NewInt(0).Mul(big.NewInt(1e18), big.NewInt(int64(numberOfUpkeeps))))
require.NoError(t, err, "Funding keeper registry contract shouldn't fail")
actions.CreateOCRKeeperJobs(t, chainlinkNodes, registry.Address(), network.ChainID, 0, rv)
nodesWithoutBootstrap := chainlinkNodes[1:]
defaultOCRRegistryConfig.RegistryVersion = rv
ocrConfig, err := actions.BuildAutoOCR2ConfigVars(t, nodesWithoutBootstrap, defaultOCRRegistryConfig, registrar.Address(), 30*time.Second, registry.ChainModuleAddress(), registry.ReorgProtectionEnabled())
require.NoError(t, err, "Error building OCR config vars")
if rv == eth_contracts.RegistryVersion_2_0 {
err = registry.SetConfig(defaultOCRRegistryConfig, ocrConfig)
} else {
err = registry.SetConfigTypeSafe(ocrConfig)
}
require.NoError(t, err, "Error setting OCR config")
consumersConditional, upkeepidsConditional := actions_seth.DeployConsumers(t, chainClient, registry, registrar, linkToken, numberOfUpkeeps, big.NewInt(defaultLinkFunds), defaultUpkeepGasLimit, false, false)
consumersLogtrigger, upkeepidsLogtrigger := actions_seth.DeployConsumers(t, chainClient, registry, registrar, linkToken, numberOfUpkeeps, big.NewInt(defaultLinkFunds), defaultUpkeepGasLimit, true, false)
consumers := append(consumersConditional, consumersLogtrigger...)
upkeepIDs := append(upkeepidsConditional, upkeepidsLogtrigger...)
for _, c := range consumersLogtrigger {
err = c.Start()
require.NoError(t, err, "Error starting consumer")
}
l.Info().Msg("Waiting for all upkeeps to be performed")
gom := gomega.NewGomegaWithT(t)
gom.Eventually(func(g gomega.Gomega) {
// Check if the upkeeps are performing multiple times by analyzing their counters and checking they are greater than 10
for i := 0; i < len(upkeepIDs); i++ {
counter, err := consumers[i].Counter(testcontext.Get(t))
require.NoError(t, err, "Failed to retrieve consumer counter for upkeep at index %d", i)
expect := 5
l.Info().Int64("Upkeeps Performed", counter.Int64()).Int("Upkeep ID", i).Msg("Number of upkeeps performed")
g.Expect(counter.Int64()).Should(gomega.BeNumerically(">=", int64(expect)),
"Expected consumer counter to be greater than %d, but got %d", expect, counter.Int64())
}
}, "5m", "1s").Should(gomega.Succeed()) // ~1m for cluster setup, ~2m for performing each upkeep 5 times, ~2m buffer
_, err = testEnvironment.Chaos.Run(testCase.chaosFunc(testEnvironment.Cfg.Namespace, testCase.chaosProps))
require.NoError(t, err)
gom.Eventually(func(g gomega.Gomega) {
// Check if the upkeeps are performing multiple times by analyzing their counters and checking they are greater than 10
for i := 0; i < len(upkeepIDs); i++ {
counter, err := consumers[i].Counter(testcontext.Get(t))
require.NoError(t, err, "Failed to retrieve consumer counter for upkeep at index %d", i)
expect := 10
l.Info().Int64("Upkeeps Performed", counter.Int64()).Int("Upkeep ID", i).Msg("Number of upkeeps performed")
g.Expect(counter.Int64()).Should(gomega.BeNumerically(">=", int64(expect)),
"Expected consumer counter to be greater than %d, but got %d", expect, counter.Int64())
}
}, "3m", "1s").Should(gomega.Succeed()) // ~1m for cluster setup, ~2m for performing each upkeep 5 times, ~2m buffer
})
}
})`
$DIR/integration-tests/chaos/automation_chaos_test.go: `ctf_config.MustConfigOverrideChainlinkVersion(config.GetChainlinkImageConfig(), target)`
$DIR/integration-tests/chaos/automation_chaos_test.go: `ctf_config.MightConfigOverridePyroscopeKey(config.GetPyroscopeConfig(), target)`
$DIR/integration-tests/chaos/automation_chaos_test.go: `t.Run(fmt.Sprintf("Automation_%s", name), func(t *testing.T) {
t.Parallel()
network := networks.MustGetSelectedNetworkConfig(config.Network)[0] // Need a new copy of the network for each test
testEnvironment := environment.
New(&environment.Config{
NamespacePrefix: fmt.Sprintf("chaos-automation-%s", name),
TTL: time.Hour * 1,
Test: t,
}).
AddHelm(testCase.networkChart).
AddHelm(testCase.clChart)
// TODO we need to update the image in CTF, the old one is not available anymore
// deploy blockscout if running on simulated
// AddHelm(testCase.clChart).
// AddChart(blockscout.New(&blockscout.Props{
// Name: "geth-blockscout",
// WsURL: network.URL,
// HttpURL: network.HTTPURLs[0],
// })
err = testEnvironment.Run()
require.NoError(t, err, "Error setting up test environment")
if testEnvironment.WillUseRemoteRunner() {
return
}
err = testEnvironment.Client.LabelChaosGroup(testEnvironment.Cfg.Namespace, "instance=node-", 1, 2, ChaosGroupMinority)
require.NoError(t, err)
err = testEnvironment.Client.LabelChaosGroup(testEnvironment.Cfg.Namespace, "instance=node-", 3, 5, ChaosGroupMajority)
require.NoError(t, err)
err = testEnvironment.Client.LabelChaosGroup(testEnvironment.Cfg.Namespace, "instance=node-", 2, 5, ChaosGroupMajorityPlus)
require.NoError(t, err)
chainlinkNodes, err := client.ConnectChainlinkNodes(testEnvironment)
require.NoError(t, err, "Error connecting to Chainlink nodes")
network = seth_utils.MustReplaceSimulatedNetworkUrlWithK8(l, network, *testEnvironment)
chainClient, err := actions_seth.GetChainClientWithConfigFunction(&config, network, actions_seth.OneEphemeralKeysLiveTestnetAutoFixFn)
require.NoError(t, err, "Error creating seth client")
// Register cleanup for any test
t.Cleanup(func() {
err := actions_seth.TeardownSuite(t, chainClient, testEnvironment, chainlinkNodes, nil, zapcore.PanicLevel, &config)
require.NoError(t, err, "Error tearing down environment")
})
txCost, err := actions_seth.EstimateCostForChainlinkOperations(l, chainClient, network, 1000)
require.NoError(t, err, "Error estimating cost for Chainlink Operations")
err = actions_seth.FundChainlinkNodesFromRootAddress(l, chainClient, contracts.ChainlinkK8sClientToChainlinkNodeWithKeysAndAddress(chainlinkNodes), txCost)
require.NoError(t, err, "Error funding Chainlink nodes")
linkToken, err := contracts.DeployLinkTokenContract(l, chainClient)
require.NoError(t, err, "Error deploying LINK token")
registry, registrar := actions_seth.DeployAutoOCRRegistryAndRegistrar(
t,
chainClient,
rv,
defaultOCRRegistryConfig,
linkToken,
)
// Fund the registry with LINK
err = linkToken.Transfer(registry.Address(), big.NewInt(0).Mul(big.NewInt(1e18), big.NewInt(int64(numberOfUpkeeps))))
require.NoError(t, err, "Funding keeper registry contract shouldn't fail")
actions.CreateOCRKeeperJobs(t, chainlinkNodes, registry.Address(), network.ChainID, 0, rv)
nodesWithoutBootstrap := chainlinkNodes[1:]
defaultOCRRegistryConfig.RegistryVersion = rv
ocrConfig, err := actions.BuildAutoOCR2ConfigVars(t, nodesWithoutBootstrap, defaultOCRRegistryConfig, registrar.Address(), 30*time.Second, registry.ChainModuleAddress(), registry.ReorgProtectionEnabled())
require.NoError(t, err, "Error building OCR config vars")
if rv == eth_contracts.RegistryVersion_2_0 {
err = registry.SetConfig(defaultOCRRegistryConfig, ocrConfig)
} else {
err = registry.SetConfigTypeSafe(ocrConfig)
}
require.NoError(t, err, "Error setting OCR config")
consumersConditional, upkeepidsConditional := actions_seth.DeployConsumers(t, chainClient, registry, registrar, linkToken, numberOfUpkeeps, big.NewInt(defaultLinkFunds), defaultUpkeepGasLimit, false, false)
consumersLogtrigger, upkeepidsLogtrigger := actions_seth.DeployConsumers(t, chainClient, registry, registrar, linkToken, numberOfUpkeeps, big.NewInt(defaultLinkFunds), defaultUpkeepGasLimit, true, false)
consumers := append(consumersConditional, consumersLogtrigger...)
upkeepIDs := append(upkeepidsConditional, upkeepidsLogtrigger...)
for _, c := range consumersLogtrigger {
err = c.Start()
require.NoError(t, err, "Error starting consumer")
}
l.Info().Msg("Waiting for all upkeeps to be performed")
gom := gomega.NewGomegaWithT(t)
gom.Eventually(func(g gomega.Gomega) {
// Check if the upkeeps are performing multiple times by analyzing their counters and checking they are greater than 10
for i := 0; i < len(upkeepIDs); i++ {
counter, err := consumers[i].Counter(testcontext.Get(t))
require.NoError(t, err, "Failed to retrieve consumer counter for upkeep at index %d", i)
expect := 5
l.Info().Int64("Upkeeps Performed", counter.Int64()).Int("Upkeep ID", i).Msg("Number of upkeeps performed")
g.Expect(counter.Int64()).Should(gomega.BeNumerically(">=", int64(expect)),
"Expected consumer counter to be greater than %d, but got %d", expect, counter.Int64())
}
}, "5m", "1s").Should(gomega.Succeed()) // ~1m for cluster setup, ~2m for performing each upkeep 5 times, ~2m buffer
_, err = testEnvironment.Chaos.Run(testCase.chaosFunc(testEnvironment.Cfg.Namespace, testCase.chaosProps))
require.NoError(t, err)
gom.Eventually(func(g gomega.Gomega) {
// Check if the upkeeps are performing multiple times by analyzing their counters and checking they are greater than 10
for i := 0; i < len(upkeepIDs); i++ {
counter, err := consumers[i].Counter(testcontext.Get(t))
require.NoError(t, err, "Failed to retrieve consumer counter for upkeep at index %d", i)
expect := 10
l.Info().Int64("Upkeeps Performed", counter.Int64()).Int("Upkeep ID", i).Msg("Number of upkeeps performed")
g.Expect(counter.Int64()).Should(gomega.BeNumerically(">=", int64(expect)),
"Expected consumer counter to be greater than %d, but got %d", expect, counter.Int64())
}
}, "3m", "1s").Should(gomega.Succeed()) // ~1m for cluster setup, ~2m for performing each upkeep 5 times, ~2m buffer
})`
$DIR/integration-tests/chaos/automation_chaos_test.go: `err = testEnvironment.Run()`
$DIR/integration-tests/chaos/automation_chaos_test.go: `err = testEnvironment.Client.LabelChaosGroup(testEnvironment.Cfg.Namespace, "instance=node-", 1, 2, ChaosGroupMinority)`
$DIR/integration-tests/chaos/automation_chaos_test.go: `err = testEnvironment.Client.LabelChaosGroup(testEnvironment.Cfg.Namespace, "instance=node-", 3, 5, ChaosGroupMajority)`
$DIR/integration-tests/chaos/automation_chaos_test.go: `err = testEnvironment.Client.LabelChaosGroup(testEnvironment.Cfg.Namespace, "instance=node-", 2, 5, ChaosGroupMajorityPlus)`
$DIR/integration-tests/chaos/automation_chaos_test.go: `network = seth_utils.MustReplaceSimulatedNetworkUrlWithK8(l, network, *testEnvironment)`
$DIR/integration-tests/chaos/automation_chaos_test.go: `t.Cleanup(func() {
err := actions_seth.TeardownSuite(t, chainClient, testEnvironment, chainlinkNodes, nil, zapcore.PanicLevel, &config)
require.NoError(t, err, "Error tearing down environment")
})`
$DIR/integration-tests/chaos/automation_chaos_test.go: `err = actions_seth.FundChainlinkNodesFromRootAddress(l, chainClient, contracts.ChainlinkK8sClientToChainlinkNodeWithKeysAndAddress(chainlinkNodes), txCost)`
$DIR/integration-tests/chaos/automation_chaos_test.go: `err = linkToken.Transfer(registry.Address(), big.NewInt(0).Mul(big.NewInt(1e18), big.NewInt(int64(numberOfUpkeeps))))`
$DIR/integration-tests/chaos/automation_chaos_test.go: `actions.CreateOCRKeeperJobs(t, chainlinkNodes, registry.Address(), network.ChainID, 0, rv)`
$DIR/integration-tests/chaos/automation_chaos_test.go: `defaultOCRRegistryConfig.RegistryVersion = rv`
$DIR/integration-tests/chaos/automation_chaos_test.go: `err = registry.SetConfig(defaultOCRRegistryConfig, ocrConfig)`
$DIR/integration-tests/chaos/automation_chaos_test.go: `err = registry.SetConfigTypeSafe(ocrConfig)`
$DIR/integration-tests/chaos/automation_chaos_test.go: `err = c.Start()`
$DIR/integration-tests/chaos/automation_chaos_test.go: `l.Info().Msg("Waiting for all upkeeps to be performed")`
$DIR/integration-tests/chaos/automation_chaos_test.go: `gom.Eventually(func(g gomega.Gomega) {
// Check if the upkeeps are performing multiple times by analyzing their counters and checking they are greater than 10
for i := 0; i < len(upkeepIDs); i++ {
counter, err := consumers[i].Counter(testcontext.Get(t))
require.NoError(t, err, "Failed to retrieve consumer counter for upkeep at index %d", i)
expect := 5
l.Info().Int64("Upkeeps Performed", counter.Int64()).Int("Upkeep ID", i).Msg("Number of upkeeps performed")
g.Expect(counter.Int64()).Should(gomega.BeNumerically(">=", int64(expect)),
"Expected consumer counter to be greater than %d, but got %d", expect, counter.Int64())
}
}, "5m", "1s").Should(gomega.Succeed())`
$DIR/integration-tests/chaos/automation_chaos_test.go: `l.Info().Int64("Upkeeps Performed", counter.Int64()).Int("Upkeep ID", i).Msg("Number of upkeeps performed")`
$DIR/integration-tests/chaos/automation_chaos_test.go: `g.Expect(counter.Int64()).Should(gomega.BeNumerically(">=", int64(expect)),
"Expected consumer counter to be greater than %d, but got %d", expect, counter.Int64())`
$DIR/integration-tests/chaos/automation_chaos_test.go: `_, err = testEnvironment.Chaos.Run(testCase.chaosFunc(testEnvironment.Cfg.Namespace, testCase.chaosProps))`
$DIR/integration-tests/chaos/automation_chaos_test.go: `gom.Eventually(func(g gomega.Gomega) {
// Check if the upkeeps are performing multiple times by analyzing their counters and checking they are greater than 10
for i := 0; i < len(upkeepIDs); i++ {
counter, err := consumers[i].Counter(testcontext.Get(t))
require.NoError(t, err, "Failed to retrieve consumer counter for upkeep at index %d", i)
expect := 10
l.Info().Int64("Upkeeps Performed", counter.Int64()).Int("Upkeep ID", i).Msg("Number of upkeeps performed")
g.Expect(counter.Int64()).Should(gomega.BeNumerically(">=", int64(expect)),
"Expected consumer counter to be greater than %d, but got %d", expect, counter.Int64())
}
}, "3m", "1s").Should(gomega.Succeed())`
$DIR/integration-tests/chaos/automation_chaos_test.go: `l.Info().Int64("Upkeeps Performed", counter.Int64()).Int("Upkeep ID", i).Msg("Number of upkeeps performed")`
$DIR/integration-tests/chaos/automation_chaos_test.go: `g.Expect(counter.Int64()).Should(gomega.BeNumerically(">=", int64(expect)),
"Expected consumer counter to be greater than %d, but got %d", expect, counter.Int64())`
$DIR/integration-tests/chaos/automation_chaos_test.go: `.GetTestLogger(t)`
$DIR/integration-tests/chaos/automation_chaos_test.go: `.Run(name, func(t *testing.T) {
t.Parallel()
config, err := tc.GetConfig("Chaos", tc.Automation)
if err != nil {
t.Fatal(err)
}
var overrideFn = func(_ interface{}, target interface{}) {
ctf_config.MustConfigOverrideChainlinkVersion(config.GetChainlinkImageConfig(), target)
ctf_config.MightConfigOverridePyroscopeKey(config.GetPyroscopeConfig(), target)
}
chainlinkCfg := chainlink.NewWithOverride(0, getDefaultAutomationSettings(&config), config.ChainlinkImage, overrideFn)
testCases := map[string]struct {
networkChart environment.ConnectedChart
clChart environment.ConnectedChart
chaosFunc chaos.ManifestFunc
chaosProps *chaos.Props
}{
// see ocr_chaos.test.go for comments
PodChaosFailMinorityNodes: {
ethereum.New(getDefaultEthereumSettings(&config)),
chainlinkCfg,
chaos.NewFailPods,
&chaos.Props{
LabelsSelector: &map[string]*string{ChaosGroupMinority: ptr.Ptr("1")},
DurationStr: "1m",
},
},
PodChaosFailMajorityNodes: {
ethereum.New(getDefaultEthereumSettings(&config)),
chainlinkCfg,
chaos.NewFailPods,
&chaos.Props{
LabelsSelector: &map[string]*string{ChaosGroupMajority: ptr.Ptr("1")},
DurationStr: "1m",
},
},
PodChaosFailMajorityDB: {
ethereum.New(getDefaultEthereumSettings(&config)),
chainlinkCfg,
chaos.NewFailPods,
&chaos.Props{
LabelsSelector: &map[string]*string{ChaosGroupMajority: ptr.Ptr("1")},
DurationStr: "1m",
ContainerNames: &[]*string{ptr.Ptr("chainlink-db")},
},
},
NetworkChaosFailMajorityNetwork: {
ethereum.New(getDefaultEthereumSettings(&config)),
chainlinkCfg,
chaos.NewNetworkPartition,
&chaos.Props{
FromLabels: &map[string]*string{ChaosGroupMajority: ptr.Ptr("1")},
ToLabels: &map[string]*string{ChaosGroupMinority: ptr.Ptr("1")},
DurationStr: "1m",
},
},
NetworkChaosFailBlockchainNode: {
ethereum.New(getDefaultEthereumSettings(&config)),
chainlinkCfg,
chaos.NewNetworkPartition,
&chaos.Props{
FromLabels: &map[string]*string{"app": ptr.Ptr("geth")},
ToLabels: &map[string]*string{ChaosGroupMajorityPlus: ptr.Ptr("1")},
DurationStr: "1m",
},
},
}
for name, testCase := range testCases {
name := name
testCase := testCase
t.Run(fmt.Sprintf("Automation_%s", name), func(t *testing.T) {
t.Parallel()
network := networks.MustGetSelectedNetworkConfig(config.Network)[0] // Need a new copy of the network for each test
testEnvironment := environment.
New(&environment.Config{
NamespacePrefix: fmt.Sprintf("chaos-automation-%s", name),
TTL: time.Hour * 1,
Test: t,
}).
AddHelm(testCase.networkChart).
AddHelm(testCase.clChart)
// TODO we need to update the image in CTF, the old one is not available anymore
// deploy blockscout if running on simulated
// AddHelm(testCase.clChart).
// AddChart(blockscout.New(&blockscout.Props{
// Name: "geth-blockscout",
// WsURL: network.URL,
// HttpURL: network.HTTPURLs[0],
// })
err = testEnvironment.Run()
require.NoError(t, err, "Error setting up test environment")
if testEnvironment.WillUseRemoteRunner() {
return
}
err = testEnvironment.Client.LabelChaosGroup(testEnvironment.Cfg.Namespace, "instance=node-", 1, 2, ChaosGroupMinority)
require.NoError(t, err)
err = testEnvironment.Client.LabelChaosGroup(testEnvironment.Cfg.Namespace, "instance=node-", 3, 5, ChaosGroupMajority)
require.NoError(t, err)
err = testEnvironment.Client.LabelChaosGroup(testEnvironment.Cfg.Namespace, "instance=node-", 2, 5, ChaosGroupMajorityPlus)
require.NoError(t, err)
chainlinkNodes, err := client.ConnectChainlinkNodes(testEnvironment)
require.NoError(t, err, "Error connecting to Chainlink nodes")
network = seth_utils.MustReplaceSimulatedNetworkUrlWithK8(l, network, *testEnvironment)
chainClient, err := actions_seth.GetChainClientWithConfigFunction(&config, network, actions_seth.OneEphemeralKeysLiveTestnetAutoFixFn)
require.NoError(t, err, "Error creating seth client")
// Register cleanup for any test
t.Cleanup(func() {
err := actions_seth.TeardownSuite(t, chainClient, testEnvironment, chainlinkNodes, nil, zapcore.PanicLevel, &config)
require.NoError(t, err, "Error tearing down environment")
})
txCost, err := actions_seth.EstimateCostForChainlinkOperations(l, chainClient, network, 1000)
require.NoError(t, err, "Error estimating cost for Chainlink Operations")
err = actions_seth.FundChainlinkNodesFromRootAddress(l, chainClient, contracts.ChainlinkK8sClientToChainlinkNodeWithKeysAndAddress(chainlinkNodes), txCost)
require.NoError(t, err, "Error funding Chainlink nodes")
linkToken, err := contracts.DeployLinkTokenContract(l, chainClient)
require.NoError(t, err, "Error deploying LINK token")
registry, registrar := actions_seth.DeployAutoOCRRegistryAndRegistrar(
t,
chainClient,
rv,
defaultOCRRegistryConfig,
linkToken,
)
// Fund the registry with LINK
err = linkToken.Transfer(registry.Address(), big.NewInt(0).Mul(big.NewInt(1e18), big.NewInt(int64(numberOfUpkeeps))))
require.NoError(t, err, "Funding keeper registry contract shouldn't fail")
actions.CreateOCRKeeperJobs(t, chainlinkNodes, registry.Address(), network.ChainID, 0, rv)
nodesWithoutBootstrap := chainlinkNodes[1:]
defaultOCRRegistryConfig.RegistryVersion = rv
ocrConfig, err := actions.BuildAutoOCR2ConfigVars(t, nodesWithoutBootstrap, defaultOCRRegistryConfig, registrar.Address(), 30*time.Second, registry.ChainModuleAddress(), registry.ReorgProtectionEnabled())
require.NoError(t, err, "Error building OCR config vars")
if rv == eth_contracts.RegistryVersion_2_0 {
err = registry.SetConfig(defaultOCRRegistryConfig, ocrConfig)
} else {
err = registry.SetConfigTypeSafe(ocrConfig)
}
require.NoError(t, err, "Error setting OCR config")
consumersConditional, upkeepidsConditional := actions_seth.DeployConsumers(t, chainClient, registry, registrar, linkToken, numberOfUpkeeps, big.NewInt(defaultLinkFunds), defaultUpkeepGasLimit, false, false)
consumersLogtrigger, upkeepidsLogtrigger := actions_seth.DeployConsumers(t, chainClient, registry, registrar, linkToken, numberOfUpkeeps, big.NewInt(defaultLinkFunds), defaultUpkeepGasLimit, true, false)
consumers := append(consumersConditional, consumersLogtrigger...)
upkeepIDs := append(upkeepidsConditional, upkeepidsLogtrigger...)
for _, c := range consumersLogtrigger {
err = c.Start()
require.NoError(t, err, "Error starting consumer")
}
l.Info().Msg("Waiting for all upkeeps to be performed")
gom := gomega.NewGomegaWithT(t)
gom.Eventually(func(g gomega.Gomega) {
// Check if the upkeeps are performing multiple times by analyzing their counters and checking they are greater than 10
for i := 0; i < len(upkeepIDs); i++ {
counter, err := consumers[i].Counter(testcontext.Get(t))
require.NoError(t, err, "Failed to retrieve consumer counter for upkeep at index %d", i)
expect := 5
l.Info().Int64("Upkeeps Performed", counter.Int64()).Int("Upkeep ID", i).Msg("Number of upkeeps performed")
g.Expect(counter.Int64()).Should(gomega.BeNumerically(">=", int64(expect)),
"Expected consumer counter to be greater than %d, but got %d", expect, counter.Int64())
}
}, "5m", "1s").Should(gomega.Succeed()) // ~1m for cluster setup, ~2m for performing each upkeep 5 times, ~2m buffer
_, err = testEnvironment.Chaos.Run(testCase.chaosFunc(testEnvironment.Cfg.Namespace, testCase.chaosProps))
require.NoError(t, err)
gom.Eventually(func(g gomega.Gomega) {
// Check if the upkeeps are performing multiple times by analyzing their counters and checking they are greater than 10
for i := 0; i < len(upkeepIDs); i++ {
counter, err := consumers[i].Counter(testcontext.Get(t))
require.NoError(t, err, "Failed to retrieve consumer counter for upkeep at index %d", i)
expect := 10
l.Info().Int64("Upkeeps Performed", counter.Int64()).Int("Upkeep ID", i).Msg("Number of upkeeps performed")
g.Expect(counter.Int64()).Should(gomega.BeNumerically(">=", int64(expect)),
"Expected consumer counter to be greater than %d, but got %d", expect, counter.Int64())
}
}, "3m", "1s").Should(gomega.Succeed()) // ~1m for cluster setup, ~2m for performing each upkeep 5 times, ~2m buffer
})
}
})`
$DIR/integration-tests/chaos/automation_chaos_test.go: `.GetConfig("Chaos", tc.Automation)`
$DIR/integration-tests/chaos/automation_chaos_test.go: `.MustConfigOverrideChainlinkVersion(config.GetChainlinkImageConfig(), target)`
$DIR/integration-tests/chaos/automation_chaos_test.go: `.GetChainlinkImageConfig()`
$DIR/integration-tests/chaos/automation_chaos_test.go: `.MightConfigOverridePyroscopeKey(config.GetPyroscopeConfig(), target)`
$DIR/integration-tests/chaos/automation_chaos_test.go: `.GetPyroscopeConfig()`
$DIR/integration-tests/chaos/automation_chaos_test.go: `.NewWithOverride(0, getDefaultAutomationSettings(&config), config.ChainlinkImage, overrideFn)`
$DIR/integration-tests/chaos/automation_chaos_test.go: `.New(getDefaultEthereumSettings(&config))`
$DIR/integration-tests/chaos/automation_chaos_test.go: `.Ptr("1")`
$DIR/integration-tests/chaos/automation_chaos_test.go: `.New(getDefaultEthereumSettings(&config))`
$DIR/integration-tests/chaos/automation_chaos_test.go: `.Ptr("1")`
$DIR/integration-tests/chaos/automation_chaos_test.go: `.New(getDefaultEthereumSettings(&config))`
$DIR/integration-tests/chaos/automation_chaos_test.go: `.Ptr("1")`
$DIR/integration-tests/chaos/automation_chaos_test.go: `.Ptr("chainlink-db")`
$DIR/integration-tests/chaos/automation_chaos_test.go: `.New(getDefaultEthereumSettings(&config))`
$DIR/integration-tests/chaos/automation_chaos_test.go: `.Ptr("1")`
$DIR/integration-tests/chaos/automation_chaos_test.go: `.Ptr("1")`
$DIR/integration-tests/chaos/automation_chaos_test.go: `.New(getDefaultEthereumSettings(&config))`
$DIR/integration-tests/chaos/automation_chaos_test.go: `.Ptr("geth")`
$DIR/integration-tests/chaos/automation_chaos_test.go: `.Ptr("1")`
$DIR/integration-tests/chaos/automation_chaos_test.go: `.Run(fmt.Sprintf("Automation_%s", name), func(t *testing.T) {
t.Parallel()
network := networks.MustGetSelectedNetworkConfig(config.Network)[0] // Need a new copy of the network for each test
testEnvironment := environment.
New(&environment.Config{
NamespacePrefix: fmt.Sprintf("chaos-automation-%s", name),
TTL: time.Hour * 1,
Test: t,
}).
AddHelm(testCase.networkChart).
AddHelm(testCase.clChart)
// TODO we need to update the image in CTF, the old one is not available anymore
// deploy blockscout if running on simulated
// AddHelm(testCase.clChart).
// AddChart(blockscout.New(&blockscout.Props{
// Name: "geth-blockscout",
// WsURL: network.URL,
// HttpURL: network.HTTPURLs[0],
// })
err = testEnvironment.Run()
require.NoError(t, err, "Error setting up test environment")
if testEnvironment.WillUseRemoteRunner() {
return
}
err = testEnvironment.Client.LabelChaosGroup(testEnvironment.Cfg.Namespace, "instance=node-", 1, 2, ChaosGroupMinority)
require.NoError(t, err)
err = testEnvironment.Client.LabelChaosGroup(testEnvironment.Cfg.Namespace, "instance=node-", 3, 5, ChaosGroupMajority)
require.NoError(t, err)
err = testEnvironment.Client.LabelChaosGroup(testEnvironment.Cfg.Namespace, "instance=node-", 2, 5, ChaosGroupMajorityPlus)
require.NoError(t, err)
chainlinkNodes, err := client.ConnectChainlinkNodes(testEnvironment)
require.NoError(t, err, "Error connecting to Chainlink nodes")
network = seth_utils.MustReplaceSimulatedNetworkUrlWithK8(l, network, *testEnvironment)
chainClient, err := actions_seth.GetChainClientWithConfigFunction(&config, network, actions_seth.OneEphemeralKeysLiveTestnetAutoFixFn)
require.NoError(t, err, "Error creating seth client")
// Register cleanup for any test
t.Cleanup(func() {
err := actions_seth.TeardownSuite(t, chainClient, testEnvironment, chainlinkNodes, nil, zapcore.PanicLevel, &config)
require.NoError(t, err, "Error tearing down environment")
})
txCost, err := actions_seth.EstimateCostForChainlinkOperations(l, chainClient, network, 1000)
require.NoError(t, err, "Error estimating cost for Chainlink Operations")
err = actions_seth.FundChainlinkNodesFromRootAddress(l, chainClient, contracts.ChainlinkK8sClientToChainlinkNodeWithKeysAndAddress(chainlinkNodes), txCost)
require.NoError(t, err, "Error funding Chainlink nodes")
linkToken, err := contracts.DeployLinkTokenContract(l, chainClient)
require.NoError(t, err, "Error deploying LINK token")
registry, registrar := actions_seth.DeployAutoOCRRegistryAndRegistrar(
t,
chainClient,
rv,
defaultOCRRegistryConfig,
linkToken,
)
// Fund the registry with LINK
err = linkToken.Transfer(registry.Address(), big.NewInt(0).Mul(big.NewInt(1e18), big.NewInt(int64(numberOfUpkeeps))))
require.NoError(t, err, "Funding keeper registry contract shouldn't fail")
actions.CreateOCRKeeperJobs(t, chainlinkNodes, registry.Address(), network.ChainID, 0, rv)
nodesWithoutBootstrap := chainlinkNodes[1:]
defaultOCRRegistryConfig.RegistryVersion = rv
ocrConfig, err := actions.BuildAutoOCR2ConfigVars(t, nodesWithoutBootstrap, defaultOCRRegistryConfig, registrar.Address(), 30*time.Second, registry.ChainModuleAddress(), registry.ReorgProtectionEnabled())
require.NoError(t, err, "Error building OCR config vars")
if rv == eth_contracts.RegistryVersion_2_0 {
err = registry.SetConfig(defaultOCRRegistryConfig, ocrConfig)
} else {
err = registry.SetConfigTypeSafe(ocrConfig)
}
require.NoError(t, err, "Error setting OCR config")
consumersConditional, upkeepidsConditional := actions_seth.DeployConsumers(t, chainClient, registry, registrar, linkToken, numberOfUpkeeps, big.NewInt(defaultLinkFunds), defaultUpkeepGasLimit, false, false)
consumersLogtrigger, upkeepidsLogtrigger := actions_seth.DeployConsumers(t, chainClient, registry, registrar, linkToken, numberOfUpkeeps, big.NewInt(defaultLinkFunds), defaultUpkeepGasLimit, true, false)
consumers := append(consumersConditional, consumersLogtrigger...)
upkeepIDs := append(upkeepidsConditional, upkeepidsLogtrigger...)
for _, c := range consumersLogtrigger {
err = c.Start()
require.NoError(t, err, "Error starting consumer")
}
l.Info().Msg("Waiting for all upkeeps to be performed")
gom := gomega.NewGomegaWithT(t)
gom.Eventually(func(g gomega.Gomega) {
// Check if the upkeeps are performing multiple times by analyzing their counters and checking they are greater than 10
for i := 0; i < len(upkeepIDs); i++ {
counter, err := consumers[i].Counter(testcontext.Get(t))
require.NoError(t, err, "Failed to retrieve consumer counter for upkeep at index %d", i)
expect := 5
l.Info().Int64("Upkeeps Performed", counter.Int64()).Int("Upkeep ID", i).Msg("Number of upkeeps performed")
g.Expect(counter.Int64()).Should(gomega.BeNumerically(">=", int64(expect)),
"Expected consumer counter to be greater than %d, but got %d", expect, counter.Int64())
}
}, "5m", "1s").Should(gomega.Succeed()) // ~1m for cluster setup, ~2m for performing each upkeep 5 times, ~2m buffer
_, err = testEnvironment.Chaos.Run(testCase.chaosFunc(testEnvironment.Cfg.Namespace, testCase.chaosProps))
require.NoError(t, err)
gom.Eventually(func(g gomega.Gomega) {
// Check if the upkeeps are performing multiple times by analyzing their counters and checking they are greater than 10
for i := 0; i < len(upkeepIDs); i++ {
counter, err := consumers[i].Counter(testcontext.Get(t))
require.NoError(t, err, "Failed to retrieve consumer counter for upkeep at index %d", i)
expect := 10
l.Info().Int64("Upkeeps Performed", counter.Int64()).Int("Upkeep ID", i).Msg("Number of upkeeps performed")
g.Expect(counter.Int64()).Should(gomega.BeNumerically(">=", int64(expect)),
"Expected consumer counter to be greater than %d, but got %d", expect, counter.Int64())
}
}, "3m", "1s").Should(gomega.Succeed()) // ~1m for cluster setup, ~2m for performing each upkeep 5 times, ~2m buffer
})`
$DIR/integration-tests/chaos/automation_chaos_test.go: `.Sprintf("Automation_%s", name)`
$DIR/integration-tests/chaos/automation_chaos_test.go: `.MustGetSelectedNetworkConfig(config.Network)`
$DIR/integration-tests/chaos/automation_chaos_test.go: `.
New(&environment.Config{
NamespacePrefix: fmt.Sprintf("chaos-automation-%s", name),
TTL: time.Hour * 1,
Test: t,
})`
$DIR/integration-tests/chaos/automation_chaos_test.go: `.Sprintf("chaos-automation-%s", name)`
$DIR/integration-tests/chaos/automation_chaos_test.go: `.
AddHelm(testCase.networkChart)`
$DIR/integration-tests/chaos/automation_chaos_test.go: `.
AddHelm(testCase.clChart)`
$DIR/integration-tests/chaos/automation_chaos_test.go: `.Run()`
$DIR/integration-tests/chaos/automation_chaos_test.go: `.WillUseRemoteRunner()`
$DIR/integration-tests/chaos/automation_chaos_test.go: `.Client.LabelChaosGroup(testEnvironment.Cfg.Namespace, "instance=node-", 1, 2, ChaosGroupMinority)`
$DIR/integration-tests/chaos/automation_chaos_test.go: `.Client.LabelChaosGroup(testEnvironment.Cfg.Namespace, "instance=node-", 3, 5, ChaosGroupMajority)`
$DIR/integration-tests/chaos/automation_chaos_test.go: `.Client.LabelChaosGroup(testEnvironment.Cfg.Namespace, "instance=node-", 2, 5, ChaosGroupMajorityPlus)`
$DIR/integration-tests/chaos/automation_chaos_test.go: `.ConnectChainlinkNodes(testEnvironment)`
$DIR/integration-tests/chaos/automation_chaos_test.go: `.MustReplaceSimulatedNetworkUrlWithK8(l, network, *testEnvironment)`
$DIR/integration-tests/chaos/automation_chaos_test.go: `.GetChainClientWithConfigFunction(&config, network, actions_seth.OneEphemeralKeysLiveTestnetAutoFixFn)`
$DIR/integration-tests/chaos/automation_chaos_test.go: `.Cleanup(func() {
err := actions_seth.TeardownSuite(t, chainClient, testEnvironment, chainlinkNodes, nil, zapcore.PanicLevel, &config)
require.NoError(t, err, "Error tearing down environment")
})`
$DIR/integration-tests/chaos/automation_chaos_test.go: `.TeardownSuite(t, chainClient, testEnvironment, chainlinkNodes, nil, zapcore.PanicLevel, &config)`
$DIR/integration-tests/chaos/automation_chaos_test.go: `.EstimateCostForChainlinkOperations(l, chainClient, network, 1000)`
$DIR/integration-tests/chaos/automation_chaos_test.go: `.FundChainlinkNodesFromRootAddress(l, chainClient, contracts.ChainlinkK8sClientToChainlinkNodeWithKeysAndAddress(chainlinkNodes), txCost)`
$DIR/integration-tests/chaos/automation_chaos_test.go: `.ChainlinkK8sClientToChainlinkNodeWithKeysAndAddress(chainlinkNodes)`
$DIR/integration-tests/chaos/automation_chaos_test.go: `.DeployLinkTokenContract(l, chainClient)`
$DIR/integration-tests/chaos/automation_chaos_test.go: `.DeployAutoOCRRegistryAndRegistrar(
t,
chainClient,
rv,
defaultOCRRegistryConfig,
linkToken,
)`
$DIR/integration-tests/chaos/automation_chaos_test.go: `.Transfer(registry.Address(), big.NewInt(0).Mul(big.NewInt(1e18), big.NewInt(int64(numberOfUpkeeps))))`
$DIR/integration-tests/chaos/automation_chaos_test.go: `.Address()`
$DIR/integration-tests/chaos/automation_chaos_test.go: `.NewInt(0)`
$DIR/integration-tests/chaos/automation_chaos_test.go: `.Mul(big.NewInt(1e18), big.NewInt(int64(numberOfUpkeeps)))`
$DIR/integration-tests/chaos/automation_chaos_test.go: `.NewInt(1e18)`
$DIR/integration-tests/chaos/automation_chaos_test.go: `.NewInt(int64(numberOfUpkeeps))`
$DIR/integration-tests/chaos/automation_chaos_test.go: `.CreateOCRKeeperJobs(t, chainlinkNodes, registry.Address(), network.ChainID, 0, rv)`
$DIR/integration-tests/chaos/automation_chaos_test.go: `.Address()`
$DIR/integration-tests/chaos/automation_chaos_test.go: `.BuildAutoOCR2ConfigVars(t, nodesWithoutBootstrap, defaultOCRRegistryConfig, registrar.Address(), 30*time.Second, registry.ChainModuleAddress(), registry.ReorgProtectionEnabled())`
$DIR/integration-tests/chaos/automation_chaos_test.go: `.Address()`
$DIR/integration-tests/chaos/automation_chaos_test.go: `.ChainModuleAddress()`
$DIR/integration-tests/chaos/automation_chaos_test.go: `.ReorgProtectionEnabled()`
$DIR/integration-tests/chaos/automation_chaos_test.go: `.SetConfig(defaultOCRRegistryConfig, ocrConfig)`
$DIR/integration-tests/chaos/automation_chaos_test.go: `.SetConfigTypeSafe(ocrConfig)`
$DIR/integration-tests/chaos/automation_chaos_test.go: `.DeployConsumers(t, chainClient, registry, registrar, linkToken, numberOfUpkeeps, big.NewInt(defaultLinkFunds), defaultUpkeepGasLimit, false, false)`
$DIR/integration-tests/chaos/automation_chaos_test.go: `.NewInt(defaultLinkFunds)`
$DIR/integration-tests/chaos/automation_chaos_test.go: `.DeployConsumers(t, chainClient, registry, registrar, linkToken, numberOfUpkeeps, big.NewInt(defaultLinkFunds), defaultUpkeepGasLimit, true, false)`
$DIR/integration-tests/chaos/automation_chaos_test.go: `.NewInt(defaultLinkFunds)`
$DIR/integration-tests/chaos/automation_chaos_test.go: `.Start()`
$DIR/integration-tests/chaos/automation_chaos_test.go: `.Info()`
$DIR/integration-tests/chaos/automation_chaos_test.go: `.Msg("Waiting for all upkeeps to be performed")`
$DIR/integration-tests/chaos/automation_chaos_test.go: `.NewGomegaWithT(t)`
$DIR/integration-tests/chaos/automation_chaos_test.go: `.Eventually(func(g gomega.Gomega) {
// Check if the upkeeps are performing multiple times by analyzing their counters and checking they are greater than 10
for i := 0; i < len(upkeepIDs); i++ {
counter, err := consumers[i].Counter(testcontext.Get(t))
require.NoError(t, err, "Failed to retrieve consumer counter for upkeep at index %d", i)
expect := 5
l.Info().Int64("Upkeeps Performed", counter.Int64()).Int("Upkeep ID", i).Msg("Number of upkeeps performed")
g.Expect(counter.Int64()).Should(gomega.BeNumerically(">=", int64(expect)),
"Expected consumer counter to be greater than %d, but got %d", expect, counter.Int64())
}
}, "5m", "1s")`
$DIR/integration-tests/chaos/automation_chaos_test.go: `.Counter(testcontext.Get(t))`
$DIR/integration-tests/chaos/automation_chaos_test.go: `.Get(t)`
$DIR/integration-tests/chaos/automation_chaos_test.go: `.Info()`
$DIR/integration-tests/chaos/automation_chaos_test.go: `.Int64("Upkeeps Performed", counter.Int64())`
$DIR/integration-tests/chaos/automation_chaos_test.go: `.Int64()`
$DIR/integration-tests/chaos/automation_chaos_test.go: `.Int("Upkeep ID", i)`
$DIR/integration-tests/chaos/automation_chaos_test.go: `.Msg("Number of upkeeps performed")`
$DIR/integration-tests/chaos/automation_chaos_test.go: `.Expect(counter.Int64())`
$DIR/integration-tests/chaos/automation_chaos_test.go: `.Int64()`
$DIR/integration-tests/chaos/automation_chaos_test.go: `.Should(gomega.BeNumerically(">=", int64(expect)),
"Expected consumer counter to be greater than %d, but got %d", expect, counter.Int64())`
$DIR/integration-tests/chaos/automation_chaos_test.go: `.BeNumerically(">=", int64(expect))`
$DIR/integration-tests/chaos/automation_chaos_test.go: `.Int64()`
$DIR/integration-tests/chaos/automation_chaos_test.go: `.Should(gomega.Succeed())`
$DIR/integration-tests/chaos/automation_chaos_test.go: `.Succeed()`
$DIR/integration-tests/chaos/automation_chaos_test.go: `.Chaos.Run(testCase.chaosFunc(testEnvironment.Cfg.Namespace, testCase.chaosProps))`
$DIR/integration-tests/chaos/automation_chaos_test.go: `.chaosFunc(testEnvironment.Cfg.Namespace, testCase.chaosProps)`
$DIR/integration-tests/chaos/automation_chaos_test.go: `.Eventually(func(g gomega.Gomega) {
// Check if the upkeeps are performing multiple times by analyzing their counters and checking they are greater than 10
for i := 0; i < len(upkeepIDs); i++ {
counter, err := consumers[i].Counter(testcontext.Get(t))
require.NoError(t, err, "Failed to retrieve consumer counter for upkeep at index %d", i)
expect := 10
l.Info().Int64("Upkeeps Performed", counter.Int64()).Int("Upkeep ID", i).Msg("Number of upkeeps performed")
g.Expect(counter.Int64()).Should(gomega.BeNumerically(">=", int64(expect)),
"Expected consumer counter to be greater than %d, but got %d", expect, counter.Int64())
}
}, "3m", "1s")`
$DIR/integration-tests/chaos/automation_chaos_test.go: `.Counter(testcontext.Get(t))`
$DIR/integration-tests/chaos/automation_chaos_test.go: `.Get(t)`
$DIR/integration-tests/chaos/automation_chaos_test.go: `.Info()`
$DIR/integration-tests/chaos/automation_chaos_test.go: `.Int64("Upkeeps Performed", counter.Int64())`
$DIR/integration-tests/chaos/automation_chaos_test.go: `.Int64()`
$DIR/integration-tests/chaos/automation_chaos_test.go: `.Int("Upkeep ID", i)`
$DIR/integration-tests/chaos/automation_chaos_test.go: `.Msg("Number of upkeeps performed")`
$DIR/integration-tests/chaos/automation_chaos_test.go: `.Expect(counter.Int64())`
$DIR/integration-tests/chaos/automation_chaos_test.go: `.Int64()`
$DIR/integration-tests/chaos/automation_chaos_test.go: `.Should(gomega.BeNumerically(">=", int64(expect)),
"Expected consumer counter to be greater than %d, but got %d", expect, counter.Int64())`
$DIR/integration-tests/chaos/automation_chaos_test.go: `.BeNumerically(">=", int64(expect))`
$DIR/integration-tests/chaos/automation_chaos_test.go: `.Int64()`
$DIR/integration-tests/chaos/automation_chaos_test.go: `.Should(gomega.Succeed())`
$DIR/integration-tests/chaos/automation_chaos_test.go: `.Succeed()`
$DIR/integration-tests/chaos/ocr2vrf_chaos_test.go: `ctf_config.MustConfigOverrideChainlinkVersion(testconfig.GetChainlinkImageConfig(), target)`
$DIR/integration-tests/chaos/ocr2vrf_chaos_test.go: `ctf_config.MightConfigOverridePyroscopeKey(testconfig.GetPyroscopeConfig(), target)`
$DIR/integration-tests/chaos/ocr2vrf_chaos_test.go: `t.Run(fmt.Sprintf("OCR2VRF_%s", testCaseName), func(t *testing.T) {
t.Parallel()
testNetwork := networks.MustGetSelectedNetworkConfig(testconfig.Network)[0] // Need a new copy of the network for each test
testEnvironment := environment.
New(&environment.Config{
NamespacePrefix: fmt.Sprintf(
"chaos-ocr2vrf-%s", strings.ReplaceAll(strings.ToLower(testNetwork.Name), " ", "-"),
),
Test: t,
}).
AddHelm(testCase.networkChart).
AddHelm(testCase.clChart)
err := testEnvironment.Run()
require.NoError(t, err, "Error running test environment")
if testEnvironment.WillUseRemoteRunner() {
return
}
err = testEnvironment.Client.LabelChaosGroup(testEnvironment.Cfg.Namespace, "instance=node-", 1, 2, ChaosGroupMinority)
require.NoError(t, err)
err = testEnvironment.Client.LabelChaosGroup(testEnvironment.Cfg.Namespace, "instance=node-", 3, 5, ChaosGroupMajority)
require.NoError(t, err)
testNetwork = seth_utils.MustReplaceSimulatedNetworkUrlWithK8(l, testNetwork, *testEnvironment)
chainClient, err := actions_seth.GetChainClientWithConfigFunction(testconfig, testNetwork, actions_seth.OneEphemeralKeysLiveTestnetCheckFn)
require.NoError(t, err, "Error creating seth client")
chainlinkNodes, err := client.ConnectChainlinkNodes(testEnvironment)
require.NoError(t, err, "Error connecting to Chainlink nodes")
nodeAddresses, err := actions.ChainlinkNodeAddresses(chainlinkNodes)
require.NoError(t, err, "Retrieving on-chain wallet addresses for chainlink nodes shouldn't fail")
t.Cleanup(func() {
err := actions_seth.TeardownSuite(t, chainClient, testEnvironment, chainlinkNodes, nil, zapcore.PanicLevel, &testconfig)
require.NoError(t, err, "Error tearing down environment")
})
linkToken, err := contracts.DeployLinkTokenContract(l, chainClient)
require.NoError(t, err, "Error deploying LINK token")
mockETHLinkFeed, err := contracts.DeployMockETHLINKFeed(chainClient, ocr2vrf_constants.LinkEthFeedResponse)
require.NoError(t, err, "Error deploying Mock ETH/LINK Feed")
_, _, vrfBeaconContract, consumerContract, subID := ocr2vrf_actions.SetupOCR2VRFUniverse(
t,
linkToken,
mockETHLinkFeed,
chainClient,
nodeAddresses,
chainlinkNodes,
testNetwork,
)
//Request and Redeem Randomness to verify that process works fine
requestID := ocr2vrf_actions.RequestAndRedeemRandomness(
t,
consumerContract,
vrfBeaconContract,
ocr2vrf_constants.NumberOfRandomWordsToRequest,
subID,
ocr2vrf_constants.ConfirmationDelay,
ocr2vrf_constants.RandomnessRedeemTransmissionEventTimeout,
)
for i := uint16(0); i < ocr2vrf_constants.NumberOfRandomWordsToRequest; i++ {
randomness, err := consumerContract.GetRandomnessByRequestId(testcontext.Get(t), requestID, big.NewInt(int64(i)))
require.NoError(t, err)
l.Info().Interface("Random Number", randomness).Interface("Randomness Number Index", i).Msg("Randomness retrieved from Consumer contract")
require.NotEqual(t, 0, randomness.Uint64(), "Randomness retrieved from Consumer contract give an answer other than 0")
}
id, err := testEnvironment.Chaos.Run(testCase.chaosFunc(testEnvironment.Cfg.Namespace, testCase.chaosProps))
require.NoError(t, err, "Error running Chaos Experiment")
l.Info().Msg("Chaos Applied")
err = testEnvironment.Chaos.WaitForAllRecovered(id, time.Minute)
require.NoError(t, err, "Error waiting for Chaos Experiment to end")
l.Info().Msg("Chaos Recovered")
//Request and Redeem Randomness again to see that after Chaos Experiment whole process is still working
requestID = ocr2vrf_actions.RequestAndRedeemRandomness(
t,
consumerContract,
vrfBeaconContract,
ocr2vrf_constants.NumberOfRandomWordsToRequest,
subID,
ocr2vrf_constants.ConfirmationDelay,
ocr2vrf_constants.RandomnessRedeemTransmissionEventTimeout,
)
for i := uint16(0); i < ocr2vrf_constants.NumberOfRandomWordsToRequest; i++ {
randomness, err := consumerContract.GetRandomnessByRequestId(testcontext.Get(t), requestID, big.NewInt(int64(i)))
require.NoError(t, err, "Error getting Randomness result from Consumer Contract")
l.Info().Interface("Random Number", randomness).Interface("Randomness Number Index", i).Msg("Randomness retrieved from Consumer contract")
require.NotEqual(t, 0, randomness.Uint64(), "Randomness retrieved from Consumer contract give an answer other than 0")
}
})`
$DIR/integration-tests/chaos/ocr2vrf_chaos_test.go: `err = testEnvironment.Client.LabelChaosGroup(testEnvironment.Cfg.Namespace, "instance=node-", 1, 2, ChaosGroupMinority)`
$DIR/integration-tests/chaos/ocr2vrf_chaos_test.go: `err = testEnvironment.Client.LabelChaosGroup(testEnvironment.Cfg.Namespace, "instance=node-", 3, 5, ChaosGroupMajority)`
$DIR/integration-tests/chaos/ocr2vrf_chaos_test.go: `testNetwork = seth_utils.MustReplaceSimulatedNetworkUrlWithK8(l, testNetwork, *testEnvironment)`
$DIR/integration-tests/chaos/ocr2vrf_chaos_test.go: `t.Cleanup(func() {
err := actions_seth.TeardownSuite(t, chainClient, testEnvironment, chainlinkNodes, nil, zapcore.PanicLevel, &testconfig)
require.NoError(t, err, "Error tearing down environment")
})`
$DIR/integration-tests/chaos/ocr2vrf_chaos_test.go: `l.Info().Interface("Random Number", randomness).Interface("Randomness Number Index", i).Msg("Randomness retrieved from Consumer contract")`
$DIR/integration-tests/chaos/ocr2vrf_chaos_test.go: `l.Info().Msg("Chaos Applied")`
$DIR/integration-tests/chaos/ocr2vrf_chaos_test.go: `err = testEnvironment.Chaos.WaitForAllRecovered(id, time.Minute)`
$DIR/integration-tests/chaos/ocr2vrf_chaos_test.go: `l.Info().Msg("Chaos Recovered")`
$DIR/integration-tests/chaos/ocr2vrf_chaos_test.go: `requestID = ocr2vrf_actions.RequestAndRedeemRandomness(
t,
consumerContract,
vrfBeaconContract,
ocr2vrf_constants.NumberOfRandomWordsToRequest,
subID,
ocr2vrf_constants.ConfirmationDelay,
ocr2vrf_constants.RandomnessRedeemTransmissionEventTimeout,
)`
$DIR/integration-tests/chaos/ocr2vrf_chaos_test.go: `l.Info().Interface("Random Number", randomness).Interface("Randomness Number Index", i).Msg("Randomness retrieved from Consumer contract")`
$DIR/integration-tests/chaos/ocr2vrf_chaos_test.go: `.GetTestLogger(t)`
$DIR/integration-tests/chaos/ocr2vrf_chaos_test.go: `.GetConfig("Chaos", tc.OCR2VRF)`
$DIR/integration-tests/chaos/ocr2vrf_chaos_test.go: `.MustGetSelectedNetworkConfig(testconfig.Network)`
$DIR/integration-tests/chaos/ocr2vrf_chaos_test.go: `.AddNetworkDetailedConfig(
config.BaseOCR2Config,
testconfig.Pyroscope,
config.DefaultOCR2VRFNetworkDetailTomlConfig,
loadedNetwork,
)`
$DIR/integration-tests/chaos/ocr2vrf_chaos_test.go: `.MustConfigOverrideChainlinkVersion(testconfig.GetChainlinkImageConfig(), target)`
$DIR/integration-tests/chaos/ocr2vrf_chaos_test.go: `.GetChainlinkImageConfig()`
$DIR/integration-tests/chaos/ocr2vrf_chaos_test.go: `.MightConfigOverridePyroscopeKey(testconfig.GetPyroscopeConfig(), target)`
$DIR/integration-tests/chaos/ocr2vrf_chaos_test.go: `.GetPyroscopeConfig()`
$DIR/integration-tests/chaos/ocr2vrf_chaos_test.go: `.NewWithOverride(0, defaultOCR2VRFSettings, testconfig.ChainlinkImage, overrideFn)`
$DIR/integration-tests/chaos/ocr2vrf_chaos_test.go: `.New(defaultOCR2VRFEthereumSettings)`
$DIR/integration-tests/chaos/ocr2vrf_chaos_test.go: `.Ptr("1")`
$DIR/integration-tests/chaos/ocr2vrf_chaos_test.go: `.Run(fmt.Sprintf("OCR2VRF_%s", testCaseName), func(t *testing.T) {
t.Parallel()
testNetwork := networks.MustGetSelectedNetworkConfig(testconfig.Network)[0] // Need a new copy of the network for each test
testEnvironment := environment.
New(&environment.Config{
NamespacePrefix: fmt.Sprintf(
"chaos-ocr2vrf-%s", strings.ReplaceAll(strings.ToLower(testNetwork.Name), " ", "-"),
),
Test: t,
}).
AddHelm(testCase.networkChart).
AddHelm(testCase.clChart)
err := testEnvironment.Run()
require.NoError(t, err, "Error running test environment")
if testEnvironment.WillUseRemoteRunner() {
return
}
err = testEnvironment.Client.LabelChaosGroup(testEnvironment.Cfg.Namespace, "instance=node-", 1, 2, ChaosGroupMinority)
require.NoError(t, err)
err = testEnvironment.Client.LabelChaosGroup(testEnvironment.Cfg.Namespace, "instance=node-", 3, 5, ChaosGroupMajority)
require.NoError(t, err)
testNetwork = seth_utils.MustReplaceSimulatedNetworkUrlWithK8(l, testNetwork, *testEnvironment)
chainClient, err := actions_seth.GetChainClientWithConfigFunction(testconfig, testNetwork, actions_seth.OneEphemeralKeysLiveTestnetCheckFn)
require.NoError(t, err, "Error creating seth client")
chainlinkNodes, err := client.ConnectChainlinkNodes(testEnvironment)
require.NoError(t, err, "Error connecting to Chainlink nodes")
nodeAddresses, err := actions.ChainlinkNodeAddresses(chainlinkNodes)
require.NoError(t, err, "Retrieving on-chain wallet addresses for chainlink nodes shouldn't fail")
t.Cleanup(func() {
err := actions_seth.TeardownSuite(t, chainClient, testEnvironment, chainlinkNodes, nil, zapcore.PanicLevel, &testconfig)
require.NoError(t, err, "Error tearing down environment")
})
linkToken, err := contracts.DeployLinkTokenContract(l, chainClient)
require.NoError(t, err, "Error deploying LINK token")
mockETHLinkFeed, err := contracts.DeployMockETHLINKFeed(chainClient, ocr2vrf_constants.LinkEthFeedResponse)
require.NoError(t, err, "Error deploying Mock ETH/LINK Feed")
_, _, vrfBeaconContract, consumerContract, subID := ocr2vrf_actions.SetupOCR2VRFUniverse(
t,
linkToken,
mockETHLinkFeed,
chainClient,
nodeAddresses,
chainlinkNodes,
testNetwork,
)
//Request and Redeem Randomness to verify that process works fine
requestID := ocr2vrf_actions.RequestAndRedeemRandomness(
t,
consumerContract,
vrfBeaconContract,
ocr2vrf_constants.NumberOfRandomWordsToRequest,
subID,
ocr2vrf_constants.ConfirmationDelay,
ocr2vrf_constants.RandomnessRedeemTransmissionEventTimeout,
)
for i := uint16(0); i < ocr2vrf_constants.NumberOfRandomWordsToRequest; i++ {
randomness, err := consumerContract.GetRandomnessByRequestId(testcontext.Get(t), requestID, big.NewInt(int64(i)))
require.NoError(t, err)
l.Info().Interface("Random Number", randomness).Interface("Randomness Number Index", i).Msg("Randomness retrieved from Consumer contract")
require.NotEqual(t, 0, randomness.Uint64(), "Randomness retrieved from Consumer contract give an answer other than 0")
}
id, err := testEnvironment.Chaos.Run(testCase.chaosFunc(testEnvironment.Cfg.Namespace, testCase.chaosProps))
require.NoError(t, err, "Error running Chaos Experiment")
l.Info().Msg("Chaos Applied")
err = testEnvironment.Chaos.WaitForAllRecovered(id, time.Minute)
require.NoError(t, err, "Error waiting for Chaos Experiment to end")
l.Info().Msg("Chaos Recovered")
//Request and Redeem Randomness again to see that after Chaos Experiment whole process is still working
requestID = ocr2vrf_actions.RequestAndRedeemRandomness(
t,
consumerContract,
vrfBeaconContract,
ocr2vrf_constants.NumberOfRandomWordsToRequest,
subID,
ocr2vrf_constants.ConfirmationDelay,
ocr2vrf_constants.RandomnessRedeemTransmissionEventTimeout,
)
for i := uint16(0); i < ocr2vrf_constants.NumberOfRandomWordsToRequest; i++ {
randomness, err := consumerContract.GetRandomnessByRequestId(testcontext.Get(t), requestID, big.NewInt(int64(i)))
require.NoError(t, err, "Error getting Randomness result from Consumer Contract")
l.Info().Interface("Random Number", randomness).Interface("Randomness Number Index", i).Msg("Randomness retrieved from Consumer contract")
require.NotEqual(t, 0, randomness.Uint64(), "Randomness retrieved from Consumer contract give an answer other than 0")
}
})`
$DIR/integration-tests/chaos/ocr2vrf_chaos_test.go: `.Sprintf("OCR2VRF_%s", testCaseName)`
$DIR/integration-tests/chaos/ocr2vrf_chaos_test.go: `.MustGetSelectedNetworkConfig(testconfig.Network)`
$DIR/integration-tests/chaos/ocr2vrf_chaos_test.go: `.
New(&environment.Config{
NamespacePrefix: fmt.Sprintf(
"chaos-ocr2vrf-%s", strings.ReplaceAll(strings.ToLower(testNetwork.Name), " ", "-"),
),
Test: t,
})`
$DIR/integration-tests/chaos/ocr2vrf_chaos_test.go: `.Sprintf(
"chaos-ocr2vrf-%s", strings.ReplaceAll(strings.ToLower(testNetwork.Name), " ", "-"),
)`
$DIR/integration-tests/chaos/ocr2vrf_chaos_test.go: `.ReplaceAll(strings.ToLower(testNetwork.Name), " ", "-")`
$DIR/integration-tests/chaos/ocr2vrf_chaos_test.go: `.ToLower(testNetwork.Name)`
$DIR/integration-tests/chaos/ocr2vrf_chaos_test.go: `.
AddHelm(testCase.networkChart)`
$DIR/integration-tests/chaos/ocr2vrf_chaos_test.go: `.
AddHelm(testCase.clChart)`
$DIR/integration-tests/chaos/ocr2vrf_chaos_test.go: `.Run()`
$DIR/integration-tests/chaos/ocr2vrf_chaos_test.go: `.WillUseRemoteRunner()`
$DIR/integration-tests/chaos/ocr2vrf_chaos_test.go: `.Client.LabelChaosGroup(testEnvironment.Cfg.Namespace, "instance=node-", 1, 2, ChaosGroupMinority)`
$DIR/integration-tests/chaos/ocr2vrf_chaos_test.go: `.Client.LabelChaosGroup(testEnvironment.Cfg.Namespace, "instance=node-", 3, 5, ChaosGroupMajority)`
$DIR/integration-tests/chaos/ocr2vrf_chaos_test.go: `.MustReplaceSimulatedNetworkUrlWithK8(l, testNetwork, *testEnvironment)`
$DIR/integration-tests/chaos/ocr2vrf_chaos_test.go: `.GetChainClientWithConfigFunction(testconfig, testNetwork, actions_seth.OneEphemeralKeysLiveTestnetCheckFn)`
$DIR/integration-tests/chaos/ocr2vrf_chaos_test.go: `.ConnectChainlinkNodes(testEnvironment)`
$DIR/integration-tests/chaos/ocr2vrf_chaos_test.go: `.ChainlinkNodeAddresses(chainlinkNodes)`
$DIR/integration-tests/chaos/ocr2vrf_chaos_test.go: `.Cleanup(func() {
err := actions_seth.TeardownSuite(t, chainClient, testEnvironment, chainlinkNodes, nil, zapcore.PanicLevel, &testconfig)
require.NoError(t, err, "Error tearing down environment")
})`
$DIR/integration-tests/chaos/ocr2vrf_chaos_test.go: `.TeardownSuite(t, chainClient, testEnvironment, chainlinkNodes, nil, zapcore.PanicLevel, &testconfig)`
$DIR/integration-tests/chaos/ocr2vrf_chaos_test.go: `.DeployLinkTokenContract(l, chainClient)`
$DIR/integration-tests/chaos/ocr2vrf_chaos_test.go: `.DeployMockETHLINKFeed(chainClient, ocr2vrf_constants.LinkEthFeedResponse)`
$DIR/integration-tests/chaos/ocr2vrf_chaos_test.go: `.SetupOCR2VRFUniverse(
t,
linkToken,
mockETHLinkFeed,
chainClient,
nodeAddresses,
chainlinkNodes,
testNetwork,
)`
$DIR/integration-tests/chaos/ocr2vrf_chaos_test.go: `.RequestAndRedeemRandomness(
t,
consumerContract,
vrfBeaconContract,
ocr2vrf_constants.NumberOfRandomWordsToRequest,
subID,
ocr2vrf_constants.ConfirmationDelay,
ocr2vrf_constants.RandomnessRedeemTransmissionEventTimeout,
)`
$DIR/integration-tests/chaos/ocr2vrf_chaos_test.go: `.GetRandomnessByRequestId(testcontext.Get(t), requestID, big.NewInt(int64(i)))`
$DIR/integration-tests/chaos/ocr2vrf_chaos_test.go: `.Get(t)`
$DIR/integration-tests/chaos/ocr2vrf_chaos_test.go: `.NewInt(int64(i))`
$DIR/integration-tests/chaos/ocr2vrf_chaos_test.go: `.Info()`
$DIR/integration-tests/chaos/ocr2vrf_chaos_test.go: `.Interface("Random Number", randomness)`
$DIR/integration-tests/chaos/ocr2vrf_chaos_test.go: `.Interface("Randomness Number Index", i)`
$DIR/integration-tests/chaos/ocr2vrf_chaos_test.go: `.Msg("Randomness retrieved from Consumer contract")`
$DIR/integration-tests/chaos/ocr2vrf_chaos_test.go: `.Chaos.Run(testCase.chaosFunc(testEnvironment.Cfg.Namespace, testCase.chaosProps))`
$DIR/integration-tests/chaos/ocr2vrf_chaos_test.go: `.chaosFunc(testEnvironment.Cfg.Namespace, testCase.chaosProps)`
$DIR/integration-tests/chaos/ocr2vrf_chaos_test.go: `.Info()`
$DIR/integration-tests/chaos/ocr2vrf_chaos_test.go: `.Msg("Chaos Applied")`
$DIR/integration-tests/chaos/ocr2vrf_chaos_test.go: `.Chaos.WaitForAllRecovered(id, time.Minute)`
$DIR/integration-tests/chaos/ocr2vrf_chaos_test.go: `.Info()`
$DIR/integration-tests/chaos/ocr2vrf_chaos_test.go: `.Msg("Chaos Recovered")`
$DIR/integration-tests/chaos/ocr2vrf_chaos_test.go: `.RequestAndRedeemRandomness(
t,
consumerContract,
vrfBeaconContract,
ocr2vrf_constants.NumberOfRandomWordsToRequest,
subID,
ocr2vrf_constants.ConfirmationDelay,
ocr2vrf_constants.RandomnessRedeemTransmissionEventTimeout,
)`
$DIR/integration-tests/chaos/ocr2vrf_chaos_test.go: `.GetRandomnessByRequestId(testcontext.Get(t), requestID, big.NewInt(int64(i)))`
$DIR/integration-tests/chaos/ocr2vrf_chaos_test.go: `.Get(t)`
$DIR/integration-tests/chaos/ocr2vrf_chaos_test.go: `.NewInt(int64(i))`
$DIR/integration-tests/chaos/ocr2vrf_chaos_test.go: `.Info()`
$DIR/integration-tests/chaos/ocr2vrf_chaos_test.go: `.Interface("Random Number", randomness)`
$DIR/integration-tests/chaos/ocr2vrf_chaos_test.go: `.Interface("Randomness Number Index", i)`
$DIR/integration-tests/chaos/ocr2vrf_chaos_test.go: `.Msg("Randomness retrieved from Consumer contract")`
$DIR/integration-tests/chaos/ocr_chaos_test.go: `ctf_config.MustConfigOverrideChainlinkVersion(config.GetChainlinkImageConfig(), target)`
$DIR/integration-tests/chaos/ocr_chaos_test.go: `ctf_config.MightConfigOverridePyroscopeKey(config.GetPyroscopeConfig(), target)`
$DIR/integration-tests/chaos/ocr_chaos_test.go: `t.Run(fmt.Sprintf("OCR_%s", name), func(t *testing.T) {
t.Parallel()
testEnvironment := environment.New(&environment.Config{
NamespacePrefix: fmt.Sprintf("chaos-ocr-%s", name),
Test: t,
}).
AddHelm(mockservercfg.New(nil)).
AddHelm(mockserver.New(nil)).
AddHelm(testCase.networkChart).
AddHelm(testCase.clChart)
err := testEnvironment.Run()
require.NoError(t, err)
if testEnvironment.WillUseRemoteRunner() {
return
}
err = testEnvironment.Client.LabelChaosGroup(testEnvironment.Cfg.Namespace, "instance=node-", 1, 2, ChaosGroupMinority)
require.NoError(t, err)
err = testEnvironment.Client.LabelChaosGroup(testEnvironment.Cfg.Namespace, "instance=node-", 3, 5, ChaosGroupMajority)
require.NoError(t, err)
err = testEnvironment.Client.LabelChaosGroup(testEnvironment.Cfg.Namespace, "instance=node-", 2, 5, ChaosGroupMajorityPlus)
require.NoError(t, err)
cfg := config.MustCopy().(tc.TestConfig)
network := networks.MustGetSelectedNetworkConfig(cfg.GetNetworkConfig())[0]
network = seth_utils.MustReplaceSimulatedNetworkUrlWithK8(l, network, *testEnvironment)
seth, err := actions_seth.GetChainClient(&cfg, network)
require.NoError(t, err, "Error creating seth client")
chainlinkNodes, err := client.ConnectChainlinkNodes(testEnvironment)
require.NoError(t, err, "Connecting to chainlink nodes shouldn't fail")
bootstrapNode, workerNodes := chainlinkNodes[0], chainlinkNodes[1:]
t.Cleanup(func() {
err := actions_seth.TeardownRemoteSuite(t, seth, testEnvironment.Cfg.Namespace, chainlinkNodes, nil, &cfg)
require.NoError(t, err, "Error tearing down environment")
})
ms, err := ctfClient.ConnectMockServer(testEnvironment)
require.NoError(t, err, "Creating mockserver clients shouldn't fail")
linkContract, err := contracts.DeployLinkTokenContract(l, seth)
require.NoError(t, err, "Error deploying link token contract")
err = actions_seth.FundChainlinkNodesFromRootAddress(l, seth, contracts.ChainlinkK8sClientToChainlinkNodeWithKeysAndAddress(chainlinkNodes), big.NewFloat(10))
require.NoError(t, err)
ocrInstances, err := actions_seth.DeployOCRv1Contracts(l, seth, 1, common.HexToAddress(linkContract.Address()), contracts.ChainlinkK8sClientToChainlinkNodeWithKeysAndAddress(workerNodes))
require.NoError(t, err)
err = actions.CreateOCRJobs(ocrInstances, bootstrapNode, workerNodes, 5, ms, fmt.Sprint(seth.ChainID))
require.NoError(t, err)
chaosApplied := false
gom := gomega.NewGomegaWithT(t)
gom.Eventually(func(g gomega.Gomega) {
for _, ocr := range ocrInstances {
err := ocr.RequestNewRound()
require.NoError(t, err, "Error requesting new round")
}
round, err := ocrInstances[0].GetLatestRound(testcontext.Get(t))
g.Expect(err).ShouldNot(gomega.HaveOccurred())
l.Info().Int64("RoundID", round.RoundId.Int64()).Msg("Latest OCR Round")
if round.RoundId.Int64() == chaosStartRound && !chaosApplied {
chaosApplied = true
_, err = testEnvironment.Chaos.Run(testCase.chaosFunc(testEnvironment.Cfg.Namespace, testCase.chaosProps))
require.NoError(t, err)
}
g.Expect(round.RoundId.Int64()).Should(gomega.BeNumerically(">=", chaosEndRound))
}, "6m", "3s").Should(gomega.Succeed())
})`
$DIR/integration-tests/chaos/ocr_chaos_test.go: `err = testEnvironment.Client.LabelChaosGroup(testEnvironment.Cfg.Namespace, "instance=node-", 1, 2, ChaosGroupMinority)`
$DIR/integration-tests/chaos/ocr_chaos_test.go: `err = testEnvironment.Client.LabelChaosGroup(testEnvironment.Cfg.Namespace, "instance=node-", 3, 5, ChaosGroupMajority)`
$DIR/integration-tests/chaos/ocr_chaos_test.go: `err = testEnvironment.Client.LabelChaosGroup(testEnvironment.Cfg.Namespace, "instance=node-", 2, 5, ChaosGroupMajorityPlus)`
$DIR/integration-tests/chaos/ocr_chaos_test.go: `network = seth_utils.MustReplaceSimulatedNetworkUrlWithK8(l, network, *testEnvironment)`
$DIR/integration-tests/chaos/ocr_chaos_test.go: `t.Cleanup(func() {
err := actions_seth.TeardownRemoteSuite(t, seth, testEnvironment.Cfg.Namespace, chainlinkNodes, nil, &cfg)
require.NoError(t, err, "Error tearing down environment")
})`
$DIR/integration-tests/chaos/ocr_chaos_test.go: `err = actions_seth.FundChainlinkNodesFromRootAddress(l, seth, contracts.ChainlinkK8sClientToChainlinkNodeWithKeysAndAddress(chainlinkNodes), big.NewFloat(10))`
$DIR/integration-tests/chaos/ocr_chaos_test.go: `err = actions.CreateOCRJobs(ocrInstances, bootstrapNode, workerNodes, 5, ms, fmt.Sprint(seth.ChainID))`
$DIR/integration-tests/chaos/ocr_chaos_test.go: `gom.Eventually(func(g gomega.Gomega) {
for _, ocr := range ocrInstances {
err := ocr.RequestNewRound()
require.NoError(t, err, "Error requesting new round")
}
round, err := ocrInstances[0].GetLatestRound(testcontext.Get(t))
g.Expect(err).ShouldNot(gomega.HaveOccurred())
l.Info().Int64("RoundID", round.RoundId.Int64()).Msg("Latest OCR Round")
if round.RoundId.Int64() == chaosStartRound && !chaosApplied {
chaosApplied = true
_, err = testEnvironment.Chaos.Run(testCase.chaosFunc(testEnvironment.Cfg.Namespace, testCase.chaosProps))
require.NoError(t, err)
}
g.Expect(round.RoundId.Int64()).Should(gomega.BeNumerically(">=", chaosEndRound))
}, "6m", "3s").Should(gomega.Succeed())`
$DIR/integration-tests/chaos/ocr_chaos_test.go: `g.Expect(err).ShouldNot(gomega.HaveOccurred())`
$DIR/integration-tests/chaos/ocr_chaos_test.go: `l.Info().Int64("RoundID", round.RoundId.Int64()).Msg("Latest OCR Round")`
$DIR/integration-tests/chaos/ocr_chaos_test.go: `chaosApplied = true`
$DIR/integration-tests/chaos/ocr_chaos_test.go: `_, err = testEnvironment.Chaos.Run(testCase.chaosFunc(testEnvironment.Cfg.Namespace, testCase.chaosProps))`
$DIR/integration-tests/chaos/ocr_chaos_test.go: `g.Expect(round.RoundId.Int64()).Should(gomega.BeNumerically(">=", chaosEndRound))`
$DIR/integration-tests/chaos/ocr_chaos_test.go: `.GetTestLogger(t)`
$DIR/integration-tests/chaos/ocr_chaos_test.go: `.GetConfig("Chaos", tc.OCR)`
$DIR/integration-tests/chaos/ocr_chaos_test.go: `.MustConfigOverrideChainlinkVersion(config.GetChainlinkImageConfig(), target)`
$DIR/integration-tests/chaos/ocr_chaos_test.go: `.GetChainlinkImageConfig()`
$DIR/integration-tests/chaos/ocr_chaos_test.go: `.MightConfigOverridePyroscopeKey(config.GetPyroscopeConfig(), target)`
$DIR/integration-tests/chaos/ocr_chaos_test.go: `.GetPyroscopeConfig()`
$DIR/integration-tests/chaos/ocr_chaos_test.go: `.NewWithOverride(0, getDefaultOcrSettings(&config), config.ChainlinkImage, overrideFn)`
$DIR/integration-tests/chaos/ocr_chaos_test.go: `.New(nil)`
$DIR/integration-tests/chaos/ocr_chaos_test.go: `.Ptr("1")`
$DIR/integration-tests/chaos/ocr_chaos_test.go: `.Ptr("1")`
$DIR/integration-tests/chaos/ocr_chaos_test.go: `.New(nil)`
$DIR/integration-tests/chaos/ocr_chaos_test.go: `.Ptr("geth")`
$DIR/integration-tests/chaos/ocr_chaos_test.go: `.Ptr("1")`
$DIR/integration-tests/chaos/ocr_chaos_test.go: `.New(nil)`
$DIR/integration-tests/chaos/ocr_chaos_test.go: `.Ptr("1")`
$DIR/integration-tests/chaos/ocr_chaos_test.go: `.New(nil)`
$DIR/integration-tests/chaos/ocr_chaos_test.go: `.Ptr("1")`
$DIR/integration-tests/chaos/ocr_chaos_test.go: `.New(nil)`
$DIR/integration-tests/chaos/ocr_chaos_test.go: `.Ptr("1")`
$DIR/integration-tests/chaos/ocr_chaos_test.go: `.Ptr("chainlink-db")`
$DIR/integration-tests/chaos/ocr_chaos_test.go: `.Run(fmt.Sprintf("OCR_%s", name), func(t *testing.T) {
t.Parallel()
testEnvironment := environment.New(&environment.Config{
NamespacePrefix: fmt.Sprintf("chaos-ocr-%s", name),
Test: t,
}).
AddHelm(mockservercfg.New(nil)).
AddHelm(mockserver.New(nil)).
AddHelm(testCase.networkChart).
AddHelm(testCase.clChart)
err := testEnvironment.Run()
require.NoError(t, err)
if testEnvironment.WillUseRemoteRunner() {
return
}
err = testEnvironment.Client.LabelChaosGroup(testEnvironment.Cfg.Namespace, "instance=node-", 1, 2, ChaosGroupMinority)
require.NoError(t, err)
err = testEnvironment.Client.LabelChaosGroup(testEnvironment.Cfg.Namespace, "instance=node-", 3, 5, ChaosGroupMajority)
require.NoError(t, err)
err = testEnvironment.Client.LabelChaosGroup(testEnvironment.Cfg.Namespace, "instance=node-", 2, 5, ChaosGroupMajorityPlus)
require.NoError(t, err)
cfg := config.MustCopy().(tc.TestConfig)
network := networks.MustGetSelectedNetworkConfig(cfg.GetNetworkConfig())[0]
network = seth_utils.MustReplaceSimulatedNetworkUrlWithK8(l, network, *testEnvironment)
seth, err := actions_seth.GetChainClient(&cfg, network)
require.NoError(t, err, "Error creating seth client")
chainlinkNodes, err := client.ConnectChainlinkNodes(testEnvironment)
require.NoError(t, err, "Connecting to chainlink nodes shouldn't fail")
bootstrapNode, workerNodes := chainlinkNodes[0], chainlinkNodes[1:]
t.Cleanup(func() {
err := actions_seth.TeardownRemoteSuite(t, seth, testEnvironment.Cfg.Namespace, chainlinkNodes, nil, &cfg)
require.NoError(t, err, "Error tearing down environment")
})
ms, err := ctfClient.ConnectMockServer(testEnvironment)
require.NoError(t, err, "Creating mockserver clients shouldn't fail")
linkContract, err := contracts.DeployLinkTokenContract(l, seth)
require.NoError(t, err, "Error deploying link token contract")
err = actions_seth.FundChainlinkNodesFromRootAddress(l, seth, contracts.ChainlinkK8sClientToChainlinkNodeWithKeysAndAddress(chainlinkNodes), big.NewFloat(10))
require.NoError(t, err)
ocrInstances, err := actions_seth.DeployOCRv1Contracts(l, seth, 1, common.HexToAddress(linkContract.Address()), contracts.ChainlinkK8sClientToChainlinkNodeWithKeysAndAddress(workerNodes))
require.NoError(t, err)
err = actions.CreateOCRJobs(ocrInstances, bootstrapNode, workerNodes, 5, ms, fmt.Sprint(seth.ChainID))
require.NoError(t, err)
chaosApplied := false
gom := gomega.NewGomegaWithT(t)
gom.Eventually(func(g gomega.Gomega) {
for _, ocr := range ocrInstances {
err := ocr.RequestNewRound()
require.NoError(t, err, "Error requesting new round")
}
round, err := ocrInstances[0].GetLatestRound(testcontext.Get(t))
g.Expect(err).ShouldNot(gomega.HaveOccurred())
l.Info().Int64("RoundID", round.RoundId.Int64()).Msg("Latest OCR Round")
if round.RoundId.Int64() == chaosStartRound && !chaosApplied {
chaosApplied = true
_, err = testEnvironment.Chaos.Run(testCase.chaosFunc(testEnvironment.Cfg.Namespace, testCase.chaosProps))
require.NoError(t, err)
}
g.Expect(round.RoundId.Int64()).Should(gomega.BeNumerically(">=", chaosEndRound))
}, "6m", "3s").Should(gomega.Succeed())
})`
$DIR/integration-tests/chaos/ocr_chaos_test.go: `.Sprintf("OCR_%s", name)`
$DIR/integration-tests/chaos/ocr_chaos_test.go: `.New(&environment.Config{
NamespacePrefix: fmt.Sprintf("chaos-ocr-%s", name),
Test: t,
})`
$DIR/integration-tests/chaos/ocr_chaos_test.go: `.Sprintf("chaos-ocr-%s", name)`
$DIR/integration-tests/chaos/ocr_chaos_test.go: `.
AddHelm(mockservercfg.New(nil))`
$DIR/integration-tests/chaos/ocr_chaos_test.go: `.New(nil)`
$DIR/integration-tests/chaos/ocr_chaos_test.go: `.
AddHelm(mockserver.New(nil))`
$DIR/integration-tests/chaos/ocr_chaos_test.go: `.New(nil)`
$DIR/integration-tests/chaos/ocr_chaos_test.go: `.
AddHelm(testCase.networkChart)`
$DIR/integration-tests/chaos/ocr_chaos_test.go: `.
AddHelm(testCase.clChart)`
$DIR/integration-tests/chaos/ocr_chaos_test.go: `.Run()`
$DIR/integration-tests/chaos/ocr_chaos_test.go: `.WillUseRemoteRunner()`
$DIR/integration-tests/chaos/ocr_chaos_test.go: `.Client.LabelChaosGroup(testEnvironment.Cfg.Namespace, "instance=node-", 1, 2, ChaosGroupMinority)`
$DIR/integration-tests/chaos/ocr_chaos_test.go: `.Client.LabelChaosGroup(testEnvironment.Cfg.Namespace, "instance=node-", 3, 5, ChaosGroupMajority)`
$DIR/integration-tests/chaos/ocr_chaos_test.go: `.Client.LabelChaosGroup(testEnvironment.Cfg.Namespace, "instance=node-", 2, 5, ChaosGroupMajorityPlus)`
$DIR/integration-tests/chaos/ocr_chaos_test.go: `.MustCopy()`
$DIR/integration-tests/chaos/ocr_chaos_test.go: `.MustGetSelectedNetworkConfig(cfg.GetNetworkConfig())`
$DIR/integration-tests/chaos/ocr_chaos_test.go: `.GetNetworkConfig()`
$DIR/integration-tests/chaos/ocr_chaos_test.go: `.MustReplaceSimulatedNetworkUrlWithK8(l, network, *testEnvironment)`
$DIR/integration-tests/chaos/ocr_chaos_test.go: `.GetChainClient(&cfg, network)`
$DIR/integration-tests/chaos/ocr_chaos_test.go: `.ConnectChainlinkNodes(testEnvironment)`
$DIR/integration-tests/chaos/ocr_chaos_test.go: `.Cleanup(func() {
err := actions_seth.TeardownRemoteSuite(t, seth, testEnvironment.Cfg.Namespace, chainlinkNodes, nil, &cfg)
require.NoError(t, err, "Error tearing down environment")
})`
$DIR/integration-tests/chaos/ocr_chaos_test.go: `.TeardownRemoteSuite(t, seth, testEnvironment.Cfg.Namespace, chainlinkNodes, nil, &cfg)`
$DIR/integration-tests/chaos/ocr_chaos_test.go: `.ConnectMockServer(testEnvironment)`
$DIR/integration-tests/chaos/ocr_chaos_test.go: `.DeployLinkTokenContract(l, seth)`
$DIR/integration-tests/chaos/ocr_chaos_test.go: `.FundChainlinkNodesFromRootAddress(l, seth, contracts.ChainlinkK8sClientToChainlinkNodeWithKeysAndAddress(chainlinkNodes), big.NewFloat(10))`
$DIR/integration-tests/chaos/ocr_chaos_test.go: `.ChainlinkK8sClientToChainlinkNodeWithKeysAndAddress(chainlinkNodes)`
$DIR/integration-tests/chaos/ocr_chaos_test.go: `.NewFloat(10)`
$DIR/integration-tests/chaos/ocr_chaos_test.go: `.DeployOCRv1Contracts(l, seth, 1, common.HexToAddress(linkContract.Address()), contracts.ChainlinkK8sClientToChainlinkNodeWithKeysAndAddress(workerNodes))`
$DIR/integration-tests/chaos/ocr_chaos_test.go: `.HexToAddress(linkContract.Address())`
$DIR/integration-tests/chaos/ocr_chaos_test.go: `.Address()`
$DIR/integration-tests/chaos/ocr_chaos_test.go: `.ChainlinkK8sClientToChainlinkNodeWithKeysAndAddress(workerNodes)`
$DIR/integration-tests/chaos/ocr_chaos_test.go: `.CreateOCRJobs(ocrInstances, bootstrapNode, workerNodes, 5, ms, fmt.Sprint(seth.ChainID))`
$DIR/integration-tests/chaos/ocr_chaos_test.go: `.Sprint(seth.ChainID)`
$DIR/integration-tests/chaos/ocr_chaos_test.go: `.NewGomegaWithT(t)`
$DIR/integration-tests/chaos/ocr_chaos_test.go: `.Eventually(func(g gomega.Gomega) {
for _, ocr := range ocrInstances {
err := ocr.RequestNewRound()
require.NoError(t, err, "Error requesting new round")
}
round, err := ocrInstances[0].GetLatestRound(testcontext.Get(t))
g.Expect(err).ShouldNot(gomega.HaveOccurred())
l.Info().Int64("RoundID", round.RoundId.Int64()).Msg("Latest OCR Round")
if round.RoundId.Int64() == chaosStartRound && !chaosApplied {
chaosApplied = true
_, err = testEnvironment.Chaos.Run(testCase.chaosFunc(testEnvironment.Cfg.Namespace, testCase.chaosProps))
require.NoError(t, err)
}
g.Expect(round.RoundId.Int64()).Should(gomega.BeNumerically(">=", chaosEndRound))
}, "6m", "3s")`
$DIR/integration-tests/chaos/ocr_chaos_test.go: `.RequestNewRound()`
$DIR/integration-tests/chaos/ocr_chaos_test.go: `.GetLatestRound(testcontext.Get(t))`
$DIR/integration-tests/chaos/ocr_chaos_test.go: `.Get(t)`
$DIR/integration-tests/chaos/ocr_chaos_test.go: `.Expect(err)`
$DIR/integration-tests/chaos/ocr_chaos_test.go: `.ShouldNot(gomega.HaveOccurred())`
$DIR/integration-tests/chaos/ocr_chaos_test.go: `.HaveOccurred()`
$DIR/integration-tests/chaos/ocr_chaos_test.go: `.Info()`
$DIR/integration-tests/chaos/ocr_chaos_test.go: `.Int64("RoundID", round.RoundId.Int64())`
$DIR/integration-tests/chaos/ocr_chaos_test.go: `.RoundId.Int64()`
$DIR/integration-tests/chaos/ocr_chaos_test.go: `.Msg("Latest OCR Round")`
$DIR/integration-tests/chaos/ocr_chaos_test.go: `.RoundId.Int64()`
$DIR/integration-tests/chaos/ocr_chaos_test.go: `.Chaos.Run(testCase.chaosFunc(testEnvironment.Cfg.Namespace, testCase.chaosProps))`
$DIR/integration-tests/chaos/ocr_chaos_test.go: `.chaosFunc(testEnvironment.Cfg.Namespace, testCase.chaosProps)`
$DIR/integration-tests/chaos/ocr_chaos_test.go: `.Expect(round.RoundId.Int64())`
$DIR/integration-tests/chaos/ocr_chaos_test.go: `.RoundId.Int64()`
$DIR/integration-tests/chaos/ocr_chaos_test.go: `.Should(gomega.BeNumerically(">=", chaosEndRound))`
$DIR/integration-tests/chaos/ocr_chaos_test.go: `.BeNumerically(">=", chaosEndRound)`
$DIR/integration-tests/chaos/ocr_chaos_test.go: `.Should(gomega.Succeed())`
$DIR/integration-tests/chaos/ocr_chaos_test.go: `.Succeed()`
$DIR/integration-tests/client/chainlink_models_test.go: `t.Run(tt.name, func(t *testing.T) {
got, err := tt.spec.String()
require.NoError(t, err)
require.Equal(t, tt.exp, got)
})`
$DIR/integration-tests/client/chainlink_models_test.go: `.Run(tt.name, func(t *testing.T) {
got, err := tt.spec.String()
require.NoError(t, err)
require.Equal(t, tt.exp, got)
})`
$DIR/integration-tests/client/chainlink_models_test.go: `.spec.String()`
$DIR/integration-tests/experiments/gas_test.go: `_, err = actions_seth.SendFunds(l, seth, actions_seth.FundsToSendPayload{
ToAddress: seth.Addresses[0],
Amount: big.NewInt(10_000_000),
PrivateKey: seth.PrivateKeys[0],
})`
$DIR/integration-tests/experiments/gas_test.go: `_, err = contracts.DeployLinkTokenContract(l, seth)`
$DIR/integration-tests/experiments/gas_test.go: `time.Sleep(2 * time.Second)`
$DIR/integration-tests/experiments/gas_test.go: `.GetTestLogger(t)`
$DIR/integration-tests/experiments/gas_test.go: `.GetConfig("Soak", tc.OCR)`
$DIR/integration-tests/experiments/gas_test.go: `.MustGetSelectedNetworkConfig(config.GetNetworkConfig())`
$DIR/integration-tests/experiments/gas_test.go: `.GetNetworkConfig()`
$DIR/integration-tests/experiments/gas_test.go: `.GetChainClient(&config, network)`
$DIR/integration-tests/experiments/gas_test.go: `.SendFunds(l, seth, actions_seth.FundsToSendPayload{
ToAddress: seth.Addresses[0],
Amount: big.NewInt(10_000_000),
PrivateKey: seth.PrivateKeys[0],
})`
$DIR/integration-tests/experiments/gas_test.go: `.NewInt(10_000_000)`
$DIR/integration-tests/experiments/gas_test.go: `.DeployLinkTokenContract(l, seth)`
$DIR/integration-tests/experiments/gas_test.go: `.Sleep(2 * time.Second)`
$DIR/integration-tests/load/automationv2_1/automationv2_1_test.go: `l.Info().Interface("loadedTestConfig", loadedTestConfig).Msg("Loaded Test Config")`
$DIR/integration-tests/load/automationv2_1/automationv2_1_test.go: `l.Info().Msg("Starting automation v2.1 log trigger load test")`
$DIR/integration-tests/load/automationv2_1/automationv2_1_test.go: `l.Info().
Int("Number of Nodes", *loadedTestConfig.Automation.General.NumberOfNodes).
Int("Duration", *loadedTestConfig.Automation.General.Duration).
Int("Block Time", *loadedTestConfig.Automation.General.BlockTime).
Str("Spec Type", *loadedTestConfig.Automation.General.SpecType).
Str("Log Level", *loadedTestConfig.Automation.General.ChainlinkNodeLogLevel).
Str("Image", image).
Str("Tag", version).
Msg("Test Config")`
$DIR/integration-tests/load/automationv2_1/automationv2_1_test.go: `l.Info().Str("testConfig", testConfig).Msg("Test Config")`
$DIR/integration-tests/load/automationv2_1/automationv2_1_test.go: `testEnvironment.
AddHelm(ethereum.New(ðereum.Props{
NetworkName: testNetwork.Name,
Simulated: testNetwork.Simulated,
WsURLs: testNetwork.URLs,
Values: map[string]interface{}{
"resources": gethNodeSpec,
"geth": map[string]interface{}{
"blocktime": *loadedTestConfig.Automation.General.BlockTime,
"capacity": "20Gi",
"startGaslimit": "20000000",
"targetGasLimit": "30000000",
},
},
}))`
$DIR/integration-tests/load/automationv2_1/automationv2_1_test.go: `err = testEnvironment.Run()`
$DIR/integration-tests/load/automationv2_1/automationv2_1_test.go: `nodeSpec = recNodeSpec`
$DIR/integration-tests/load/automationv2_1/automationv2_1_test.go: `dbSpec = recDbSpec`
$DIR/integration-tests/load/automationv2_1/automationv2_1_test.go: `nodeSpec = map[string]interface{}{}`
$DIR/integration-tests/load/automationv2_1/automationv2_1_test.go: `dbSpec = map[string]interface{}{"stateful": true}`
$DIR/integration-tests/load/automationv2_1/automationv2_1_test.go: `loadedTestConfig.Pyroscope.Environment = &testEnvironment.Cfg.Namespace`
$DIR/integration-tests/load/automationv2_1/automationv2_1_test.go: `testEnvironment.AddHelm(wiremock.New(nil))`
$DIR/integration-tests/load/automationv2_1/automationv2_1_test.go: `secretsTOML = fmt.Sprintf(
secretsTOML, "cred1",
wiremockURL, wiremockURL,
"username", "password",
)`
$DIR/integration-tests/load/automationv2_1/automationv2_1_test.go: `wiremockURL = testEnvironment.URLs[wiremock.LocalURLsKey][0]`
$DIR/integration-tests/load/automationv2_1/automationv2_1_test.go: `err = setUpDataStreamsWireMock(wiremockURL)`
$DIR/integration-tests/load/automationv2_1/automationv2_1_test.go: `secretsTOML = fmt.Sprintf(
secretsTOML, "cred1",
*loadedTestConfig.Automation.DataStreams.URL, *loadedTestConfig.Automation.DataStreams.URL,
*loadedTestConfig.Automation.DataStreams.Username, *loadedTestConfig.Automation.DataStreams.Password,
)`
$DIR/integration-tests/load/automationv2_1/automationv2_1_test.go: `secretsTOML = ""`
$DIR/integration-tests/load/automationv2_1/automationv2_1_test.go: `nodeTOML = fmt.Sprintf("%s\n\n[Log]\nLevel = \"%s\"", baseTOML, *loadedTestConfig.Automation.General.ChainlinkNodeLogLevel)`
$DIR/integration-tests/load/automationv2_1/automationv2_1_test.go: `nodeTOML = fmt.Sprintf("%s\n\n[Log]\nLevel = \"info\"", baseTOML)`
$DIR/integration-tests/load/automationv2_1/automationv2_1_test.go: `nodeTOML = networks.AddNetworksConfig(nodeTOML, loadedTestConfig.Pyroscope, testNetwork)`
$DIR/integration-tests/load/automationv2_1/automationv2_1_test.go: `ctfconfig.MustConfigOverrideChainlinkVersion(loadedTestConfig.GetChainlinkImageConfig(), target)`
$DIR/integration-tests/load/automationv2_1/automationv2_1_test.go: `ctfconfig.MightConfigOverridePyroscopeKey(loadedTestConfig.GetPyroscopeConfig(), target)`
$DIR/integration-tests/load/automationv2_1/automationv2_1_test.go: `testEnvironment.AddHelm(cd)`
$DIR/integration-tests/load/automationv2_1/automationv2_1_test.go: `err = testEnvironment.Run()`
$DIR/integration-tests/load/automationv2_1/automationv2_1_test.go: `testNetwork = seth_utils.MustReplaceSimulatedNetworkUrlWithK8(l, testNetwork, *testEnvironment)`
$DIR/integration-tests/load/automationv2_1/automationv2_1_test.go: `a.RegistrySettings = contracts.KeeperRegistrySettings{
PaymentPremiumPPB: *conf.RegistrySettings.PaymentPremiumPPB,
FlatFeeMicroLINK: *conf.RegistrySettings.FlatFeeMicroLINK,
CheckGasLimit: *conf.RegistrySettings.CheckGasLimit,
StalenessSeconds: conf.RegistrySettings.StalenessSeconds,
GasCeilingMultiplier: *conf.RegistrySettings.GasCeilingMultiplier,
MaxPerformGas: *conf.RegistrySettings.MaxPerformGas,
MinUpkeepSpend: conf.RegistrySettings.MinUpkeepSpend,
FallbackGasPrice: conf.RegistrySettings.FallbackGasPrice,
FallbackLinkPrice: conf.RegistrySettings.FallbackLinkPrice,
MaxCheckDataSize: *conf.RegistrySettings.MaxCheckDataSize,
MaxPerformDataSize: *conf.RegistrySettings.MaxPerformDataSize,
MaxRevertDataSize: *conf.RegistrySettings.MaxRevertDataSize,
RegistryVersion: contractseth.RegistryVersion_2_1,
}`
$DIR/integration-tests/load/automationv2_1/automationv2_1_test.go: `a.RegistrarSettings = contracts.KeeperRegistrarSettings{
AutoApproveConfigType: uint8(2),
AutoApproveMaxAllowed: math.MaxUint16,
MinLinkJuels: big.NewInt(0),
}`
$DIR/integration-tests/load/automationv2_1/automationv2_1_test.go: `a.PluginConfig = ocr2keepers30config.OffchainConfig{
TargetProbability: *conf.PluginConfig.TargetProbability,
TargetInRounds: *conf.PluginConfig.TargetInRounds,
PerformLockoutWindow: *conf.PluginConfig.PerformLockoutWindow,
GasLimitPerReport: *conf.PluginConfig.GasLimitPerReport,
GasOverheadPerUpkeep: *conf.PluginConfig.GasOverheadPerUpkeep,
MinConfirmations: *conf.PluginConfig.MinConfirmations,
MaxUpkeepBatchSize: *conf.PluginConfig.MaxUpkeepBatchSize,
LogProviderConfig: ocr2keepers30config.LogProviderConfig{
BlockRate: *conf.PluginConfig.LogProviderConfig.BlockRate,
LogLimit: *conf.PluginConfig.LogProviderConfig.LogLimit,
},
}`
$DIR/integration-tests/load/automationv2_1/automationv2_1_test.go: `a.PublicConfig = ocr3.PublicConfig{
DeltaProgress: *conf.PublicConfig.DeltaProgress,
DeltaResend: *conf.PublicConfig.DeltaResend,
DeltaInitial: *conf.PublicConfig.DeltaInitial,
DeltaRound: *conf.PublicConfig.DeltaRound,
DeltaGrace: *conf.PublicConfig.DeltaGrace,
DeltaCertifiedCommitRequest: *conf.PublicConfig.DeltaCertifiedCommitRequest,
DeltaStage: *conf.PublicConfig.DeltaStage,
RMax: *conf.PublicConfig.RMax,
MaxDurationQuery: *conf.PublicConfig.MaxDurationQuery,
MaxDurationObservation: *conf.PublicConfig.MaxDurationObservation,
MaxDurationShouldAcceptAttestedReport: *conf.PublicConfig.MaxDurationShouldAcceptAttestedReport,
MaxDurationShouldTransmitAcceptedReport: *conf.PublicConfig.MaxDurationShouldTransmitAcceptedReport,
F: *conf.PublicConfig.F,
}`
$DIR/integration-tests/load/automationv2_1/automationv2_1_test.go: `a.SetMercuryCredentialName("cred1")`
$DIR/integration-tests/load/automationv2_1/automationv2_1_test.go: `a.SetUseLogBufferV1(true)`
$DIR/integration-tests/load/automationv2_1/automationv2_1_test.go: `l.Info().Str("START_TIME", startTimeTestSetup.String()).Msg("Test setup started")`
$DIR/integration-tests/load/automationv2_1/automationv2_1_test.go: `a.SetupAutomationDeployment(t)`
$DIR/integration-tests/load/automationv2_1/automationv2_1_test.go: `err = actions_seth.FundChainlinkNodesFromRootAddress(l, a.ChainClient, contracts.ChainlinkK8sClientToChainlinkNodeWithKeysAndAddress(chainlinkNodes[1:]), big.NewFloat(*loadedTestConfig.Common.ChainlinkNodeFunding))`
$DIR/integration-tests/load/automationv2_1/automationv2_1_test.go: `expectedTotalUpkeepCount += *u.NumberOfUpkeeps`
$DIR/integration-tests/load/automationv2_1/automationv2_1_test.go: `consumerContracts = append(consumerContracts, deploymentData.ConsumerContracts...)`
$DIR/integration-tests/load/automationv2_1/automationv2_1_test.go: `triggerContracts = append(triggerContracts, deploymentData.TriggerContracts...)`
$DIR/integration-tests/load/automationv2_1/automationv2_1_test.go: `triggerAddresses = append(triggerAddresses, deploymentData.TriggerAddresses...)`
$DIR/integration-tests/load/automationv2_1/automationv2_1_test.go: `loadConfigs = append(loadConfigs, deploymentData.LoadConfigs...)`
$DIR/integration-tests/load/automationv2_1/automationv2_1_test.go: `l.Debug().
Interface("logTriggerConfigStruct", logTriggerConfigStruct).
Str("Encoded Log Trigger Config", hex.EncodeToString(encodedLogTriggerConfig)).Msg("Encoded Log Trigger Config")`
$DIR/integration-tests/load/automationv2_1/automationv2_1_test.go: `l.Debug().
Interface("checkDataStruct", checkDataStruct).
Str("Encoded Check Data Struct", hex.EncodeToString(encodedCheckDataStruct)).Msg("Encoded Check Data Struct")`
$DIR/integration-tests/load/automationv2_1/automationv2_1_test.go: `l.Debug().Interface("Upkeep Config", upkeepConfig).Msg("Upkeep Config")`
$DIR/integration-tests/load/automationv2_1/automationv2_1_test.go: `upkeepConfigs = append(upkeepConfigs, upkeepConfig)`
$DIR/integration-tests/load/automationv2_1/automationv2_1_test.go: `l.Info().Msg("Successfully registered all Automation Upkeeps")`
$DIR/integration-tests/load/automationv2_1/automationv2_1_test.go: `l.Info().Interface("Upkeep IDs", upkeepIds).Msg("Upkeeps Registered")`
$DIR/integration-tests/load/automationv2_1/automationv2_1_test.go: `l.Info().Str("STARTUP_WAIT_TIME", StartupWaitTime.String()).Msg("Waiting for plugin to start")`
$DIR/integration-tests/load/automationv2_1/automationv2_1_test.go: `time.Sleep(StartupWaitTime)`
$DIR/integration-tests/load/automationv2_1/automationv2_1_test.go: `numberOfEventsEmittedPerSec = numberOfEventsEmittedPerSec + int64(*loadConfigs[i].NumberOfEvents)`
$DIR/integration-tests/load/automationv2_1/automationv2_1_test.go: `configs = append(configs, c)`
$DIR/integration-tests/load/automationv2_1/automationv2_1_test.go: `l.Info().
Str("END_TIME", endTimeTestSetup.String()).
Str("Duration", testSetupDuration.String()).
Msg("Test setup ended")`
$DIR/integration-tests/load/automationv2_1/automationv2_1_test.go: `p.Add(g, err)`
$DIR/integration-tests/load/automationv2_1/automationv2_1_test.go: `l.Info().Str("START_TIME", startTimeTestEx.String()).Msg("Test execution started")`
$DIR/integration-tests/load/automationv2_1/automationv2_1_test.go: `l.Info().Msg("Starting load generators")`
$DIR/integration-tests/load/automationv2_1/automationv2_1_test.go: `_, err = p.Run(true)`
$DIR/integration-tests/load/automationv2_1/automationv2_1_test.go: `l.Info().Msg("Finished load generators")`
$DIR/integration-tests/load/automationv2_1/automationv2_1_test.go: `l.Info().Str("STOP_WAIT_TIME", StopWaitTime.String()).Msg("Waiting for upkeeps to be performed")`
$DIR/integration-tests/load/automationv2_1/automationv2_1_test.go: `time.Sleep(StopWaitTime)`
$DIR/integration-tests/load/automationv2_1/automationv2_1_test.go: `l.Info().Msg("Finished waiting 60s for upkeeps to be performed")`
$DIR/integration-tests/load/automationv2_1/automationv2_1_test.go: `l.Info().
Str("END_TIME", endTimeTestEx.String()).
Str("Duration", testExDuration.String()).
Msg("Test execution ended")`
$DIR/integration-tests/load/automationv2_1/automationv2_1_test.go: `l.Info().Str("Duration", testExDuration.String()).Msg("Test Execution Duration")`
$DIR/integration-tests/load/automationv2_1/automationv2_1_test.go: `l.Info().Uint64("Starting Block", startBlock).Uint64("Ending Block", endBlock).Msg("Test Block Range")`
$DIR/integration-tests/load/automationv2_1/automationv2_1_test.go: `l.Info().Str("START_TIME", startTimeTestReport.String()).Msg("Test reporting started")`
$DIR/integration-tests/load/automationv2_1/automationv2_1_test.go: `batchSize = endBlock - startBlock`
$DIR/integration-tests/load/automationv2_1/automationv2_1_test.go: `err = fmt.Errorf("initial error")`
$DIR/integration-tests/load/automationv2_1/automationv2_1_test.go: `logsInBatch, err = a.ChainClient.Client.FilterLogs(ctx2, filterQuery)`
$DIR/integration-tests/load/automationv2_1/automationv2_1_test.go: `cancel()`
$DIR/integration-tests/load/automationv2_1/automationv2_1_test.go: `timeout = time.Duration(math.Min(float64(timeout)*2, float64(2*time.Minute)))`
$DIR/integration-tests/load/automationv2_1/automationv2_1_test.go: `l.Debug().
Interface("FilterQuery", filterQuery).
Str("Contract Address", consumerContract.Address()).
Str("Timeout", timeout.String()).
Int("Number of Logs", len(logsInBatch)).
Msg("Collected consumer contract logs")`
$DIR/integration-tests/load/automationv2_1/automationv2_1_test.go: `logs = append(logs, logsInBatch...)`
$DIR/integration-tests/load/automationv2_1/automationv2_1_test.go: `delayRecovery = append(delayRecovery, parsedLog.TimeToPerform.Int64())`
$DIR/integration-tests/load/automationv2_1/automationv2_1_test.go: `delayFast = append(delayFast, parsedLog.TimeToPerform.Int64())`
$DIR/integration-tests/load/automationv2_1/automationv2_1_test.go: `upkeepDelaysFast = append(upkeepDelaysFast, delayFast)`
$DIR/integration-tests/load/automationv2_1/automationv2_1_test.go: `upkeepDelaysRecovery = append(upkeepDelaysRecovery, delayRecovery)`
$DIR/integration-tests/load/automationv2_1/automationv2_1_test.go: `err = fmt.Errorf("initial error")`
$DIR/integration-tests/load/automationv2_1/automationv2_1_test.go: `logsInBatch, err = chainClient.Client.FilterLogs(ctx2, filterQuery)`
$DIR/integration-tests/load/automationv2_1/automationv2_1_test.go: `cancel()`
$DIR/integration-tests/load/automationv2_1/automationv2_1_test.go: `timeout = time.Duration(math.Min(float64(timeout)*2, float64(2*time.Minute)))`
$DIR/integration-tests/load/automationv2_1/automationv2_1_test.go: `l.Debug().
Interface("FilterQuery", filterQuery).
Str("Contract Address", address.Hex()).
Str("Timeout", timeout.String()).
Int("Number of Logs", len(logsInBatch)).
Msg("Collected trigger contract logs")`
$DIR/integration-tests/load/automationv2_1/automationv2_1_test.go: `logs = append(logs, logsInBatch...)`
$DIR/integration-tests/load/automationv2_1/automationv2_1_test.go: `numberOfEventsEmitted = numberOfEventsEmitted + int64(len(logs))`
$DIR/integration-tests/load/automationv2_1/automationv2_1_test.go: `l.Info().Int64("Number of Events Emitted", numberOfEventsEmitted).Msg("Number of Events Emitted")`
$DIR/integration-tests/load/automationv2_1/automationv2_1_test.go: `l.Info().
Interface("Upkeep Delays Fast", upkeepDelaysFast).
Interface("Upkeep Delays Recovered", upkeepDelaysRecovery).
Msg("Upkeep Delays")`
$DIR/integration-tests/load/automationv2_1/automationv2_1_test.go: `allUpkeepDelays = append(allUpkeepDelays, upkeepDelay...)`
$DIR/integration-tests/load/automationv2_1/automationv2_1_test.go: `allUpkeepDelaysFast = append(allUpkeepDelaysFast, upkeepDelay...)`
$DIR/integration-tests/load/automationv2_1/automationv2_1_test.go: `allUpkeepDelays = append(allUpkeepDelays, upkeepDelay...)`
$DIR/integration-tests/load/automationv2_1/automationv2_1_test.go: `allUpkeepDelaysRecovery = append(allUpkeepDelaysRecovery, upkeepDelay...)`
$DIR/integration-tests/load/automationv2_1/automationv2_1_test.go: `l.Info().
Float64("Average", avgF).Int64("Median", medianF).
Int64("90th Percentile", ninetyPctF).Int64("99th Percentile", ninetyNinePctF).
Int64("Max", maximumF).Msg("Upkeep Delays Fast Execution in seconds")`
$DIR/integration-tests/load/automationv2_1/automationv2_1_test.go: `l.Info().
Float64("Average", avgR).Int64("Median", medianR).
Int64("90th Percentile", ninetyPctR).Int64("99th Percentile", ninetyNinePctR).
Int64("Max", maximumR).Msg("Upkeep Delays Recovery Execution in seconds")`
$DIR/integration-tests/load/automationv2_1/automationv2_1_test.go: `l.Info().
Int("Total Perform Count", len(allUpkeepDelays)).
Int("Perform Count Fast Execution", len(allUpkeepDelaysFast)).
Int("Perform Count Recovery Execution", len(allUpkeepDelaysRecovery)).
Int64("Total Events Emitted", numberOfEventsEmitted).
Int64("Total Events Missed", eventsMissed).
Float64("Percent Missed", percentMissed).
Msg("Test completed")`
$DIR/integration-tests/load/automationv2_1/automationv2_1_test.go: `l.Info().
Str("END_TIME", endTimeTestReport.String()).
Str("Duration", testReDuration.String()).
Msg("Test reporting ended")`
$DIR/integration-tests/load/automationv2_1/automationv2_1_test.go: `l.Info().Str("Test Report", testReport).Msg("Test Report prepared")`
$DIR/integration-tests/load/automationv2_1/automationv2_1_test.go: `testStatus = "Finished :white_check_mark:"`
$DIR/integration-tests/load/automationv2_1/automationv2_1_test.go: `_, err = sendSlackNotification(testStatus, l, &loadedTestConfig, testEnvironment.Cfg.Namespace, strconv.Itoa(*loadedTestConfig.Automation.General.NumberOfNodes),
strconv.FormatInt(startTimeTestSetup.UnixMilli(), 10), strconv.FormatInt(time.Now().UnixMilli(), 10),
[]slack.Block{extraBlockWithText("\bTest Report\b\n```" + testReport + "```")}, slack.MsgOptionTS(ts))`
$DIR/integration-tests/load/automationv2_1/automationv2_1_test.go: `testEnvironment.Cfg.TTL += time.Hour * 48`
$DIR/integration-tests/load/automationv2_1/automationv2_1_test.go: `.Context(t)`
$DIR/integration-tests/load/automationv2_1/automationv2_1_test.go: `.GetTestLogger(t)`
$DIR/integration-tests/load/automationv2_1/automationv2_1_test.go: `.GetConfig("Load", tc.Automation)`
$DIR/integration-tests/load/automationv2_1/automationv2_1_test.go: `.Info()`
$DIR/integration-tests/load/automationv2_1/automationv2_1_test.go: `.Interface("loadedTestConfig", loadedTestConfig)`
$DIR/integration-tests/load/automationv2_1/automationv2_1_test.go: `.Msg("Loaded Test Config")`
$DIR/integration-tests/load/automationv2_1/automationv2_1_test.go: `.Info()`
$DIR/integration-tests/load/automationv2_1/automationv2_1_test.go: `.Msg("Starting automation v2.1 log trigger load test")`
$DIR/integration-tests/load/automationv2_1/automationv2_1_test.go: `.Info()`
$DIR/integration-tests/load/automationv2_1/automationv2_1_test.go: `.
Int("Number of Nodes", *loadedTestConfig.Automation.General.NumberOfNodes)`
$DIR/integration-tests/load/automationv2_1/automationv2_1_test.go: `.
Int("Duration", *loadedTestConfig.Automation.General.Duration)`
$DIR/integration-tests/load/automationv2_1/automationv2_1_test.go: `.
Int("Block Time", *loadedTestConfig.Automation.General.BlockTime)`
$DIR/integration-tests/load/automationv2_1/automationv2_1_test.go: `.
Str("Spec Type", *loadedTestConfig.Automation.General.SpecType)`
$DIR/integration-tests/load/automationv2_1/automationv2_1_test.go: `.
Str("Log Level", *loadedTestConfig.Automation.General.ChainlinkNodeLogLevel)`
$DIR/integration-tests/load/automationv2_1/automationv2_1_test.go: `.
Str("Image", image)`
$DIR/integration-tests/load/automationv2_1/automationv2_1_test.go: `.
Str("Tag", version)`
$DIR/integration-tests/load/automationv2_1/automationv2_1_test.go: `.
Msg("Test Config")`
$DIR/integration-tests/load/automationv2_1/automationv2_1_test.go: `.Marshal(loadedTestConfig.Automation.Load)`
$DIR/integration-tests/load/automationv2_1/automationv2_1_test.go: `.Sprintf(testConfigFormat, *loadedTestConfig.Automation.General.NumberOfNodes, *loadedTestConfig.Automation.General.Duration,
*loadedTestConfig.Automation.General.BlockTime, *loadedTestConfig.Automation.General.SpecType, *loadedTestConfig.Automation.General.ChainlinkNodeLogLevel, image, version, string(prettyLoadConfig))`
$DIR/integration-tests/load/automationv2_1/automationv2_1_test.go: `.Info()`
$DIR/integration-tests/load/automationv2_1/automationv2_1_test.go: `.Str("testConfig", testConfig)`
$DIR/integration-tests/load/automationv2_1/automationv2_1_test.go: `.Msg("Test Config")`
$DIR/integration-tests/load/automationv2_1/automationv2_1_test.go: `.MustGetSelectedNetworkConfig(loadedTestConfig.Network)`
$DIR/integration-tests/load/automationv2_1/automationv2_1_test.go: `.Duration(*loadedTestConfig.Automation.General.Duration)`
$DIR/integration-tests/load/automationv2_1/automationv2_1_test.go: `.NewInt(0)`
$DIR/integration-tests/load/automationv2_1/automationv2_1_test.go: `.Mul(big.NewInt(1e18), big.NewInt(int64(10000)))`
$DIR/integration-tests/load/automationv2_1/automationv2_1_test.go: `.NewInt(1e18)`
$DIR/integration-tests/load/automationv2_1/automationv2_1_test.go: `.NewInt(int64(10000))`
$DIR/integration-tests/load/automationv2_1/automationv2_1_test.go: `.New(&environment.Config{
TTL: loadDuration.Round(time.Hour) + time.Hour,
NamespacePrefix: fmt.Sprintf(
"automation-%s-%s",
testType,
strings.ReplaceAll(strings.ToLower(testNetwork.Name), " ", "-"),
),
Test: t,
PreventPodEviction: true,
})`
$DIR/integration-tests/load/automationv2_1/automationv2_1_test.go: `.Round(time.Hour)`
$DIR/integration-tests/load/automationv2_1/automationv2_1_test.go: `.Sprintf(
"automation-%s-%s",
testType,
strings.ReplaceAll(strings.ToLower(testNetwork.Name), " ", "-"),
)`
$DIR/integration-tests/load/automationv2_1/automationv2_1_test.go: `.ReplaceAll(strings.ToLower(testNetwork.Name), " ", "-")`
$DIR/integration-tests/load/automationv2_1/automationv2_1_test.go: `.ToLower(testNetwork.Name)`
$DIR/integration-tests/load/automationv2_1/automationv2_1_test.go: `.
AddHelm(ethereum.New(ðereum.Props{
NetworkName: testNetwork.Name,
Simulated: testNetwork.Simulated,
WsURLs: testNetwork.URLs,
Values: map[string]interface{}{
"resources": gethNodeSpec,
"geth": map[string]interface{}{
"blocktime": *loadedTestConfig.Automation.General.BlockTime,
"capacity": "20Gi",
"startGaslimit": "20000000",
"targetGasLimit": "30000000",
},
},
}))`
$DIR/integration-tests/load/automationv2_1/automationv2_1_test.go: `.New(ðereum.Props{
NetworkName: testNetwork.Name,
Simulated: testNetwork.Simulated,
WsURLs: testNetwork.URLs,
Values: map[string]interface{}{
"resources": gethNodeSpec,
"geth": map[string]interface{}{
"blocktime": *loadedTestConfig.Automation.General.BlockTime,
"capacity": "20Gi",
"startGaslimit": "20000000",
"targetGasLimit": "30000000",
},
},
})`
$DIR/integration-tests/load/automationv2_1/automationv2_1_test.go: `.Run()`
$DIR/integration-tests/load/automationv2_1/automationv2_1_test.go: `.WillUseRemoteRunner()`
$DIR/integration-tests/load/automationv2_1/automationv2_1_test.go: `.AddHelm(wiremock.New(nil))`
$DIR/integration-tests/load/automationv2_1/automationv2_1_test.go: `.New(nil)`
$DIR/integration-tests/load/automationv2_1/automationv2_1_test.go: `.Run()`
$DIR/integration-tests/load/automationv2_1/automationv2_1_test.go: `.Sprintf(
secretsTOML, "cred1",
wiremockURL, wiremockURL,
"username", "password",
)`
$DIR/integration-tests/load/automationv2_1/automationv2_1_test.go: `.Sprintf(
secretsTOML, "cred1",
*loadedTestConfig.Automation.DataStreams.URL, *loadedTestConfig.Automation.DataStreams.URL,
*loadedTestConfig.Automation.DataStreams.Username, *loadedTestConfig.Automation.DataStreams.Password,
)`
$DIR/integration-tests/load/automationv2_1/automationv2_1_test.go: `.Sprintf("%s\n\n[Log]\nLevel = \"%s\"", baseTOML, *loadedTestConfig.Automation.General.ChainlinkNodeLogLevel)`
$DIR/integration-tests/load/automationv2_1/automationv2_1_test.go: `.Sprintf("%s\n\n[Log]\nLevel = \"info\"", baseTOML)`
$DIR/integration-tests/load/automationv2_1/automationv2_1_test.go: `.AddNetworksConfig(nodeTOML, loadedTestConfig.Pyroscope, testNetwork)`
$DIR/integration-tests/load/automationv2_1/automationv2_1_test.go: `.MustConfigOverrideChainlinkVersion(loadedTestConfig.GetChainlinkImageConfig(), target)`
$DIR/integration-tests/load/automationv2_1/automationv2_1_test.go: `.GetChainlinkImageConfig()`
$DIR/integration-tests/load/automationv2_1/automationv2_1_test.go: `.MightConfigOverridePyroscopeKey(loadedTestConfig.GetPyroscopeConfig(), target)`
$DIR/integration-tests/load/automationv2_1/automationv2_1_test.go: `.GetPyroscopeConfig()`
$DIR/integration-tests/load/automationv2_1/automationv2_1_test.go: `.NewWithOverride(i, map[string]any{
"toml": nodeTOML,
"chainlink": nodeSpec,
"db": dbSpec,
"prometheus": *loadedTestConfig.Automation.General.UsePrometheus,
"secretsToml": secretsTOML,
}, loadedTestConfig.ChainlinkImage, overrideFn)`
$DIR/integration-tests/load/automationv2_1/automationv2_1_test.go: `.AddHelm(cd)`
$DIR/integration-tests/load/automationv2_1/automationv2_1_test.go: `.Run()`
$DIR/integration-tests/load/automationv2_1/automationv2_1_test.go: `.MustReplaceSimulatedNetworkUrlWithK8(l, testNetwork, *testEnvironment)`
$DIR/integration-tests/load/automationv2_1/automationv2_1_test.go: `.GetChainClientWithConfigFunction(loadedTestConfig, testNetwork, actions_seth.OneEphemeralKeysLiveTestnetCheckFn)`
$DIR/integration-tests/load/automationv2_1/automationv2_1_test.go: `.ConnectChainlinkNodes(testEnvironment)`
$DIR/integration-tests/load/automationv2_1/automationv2_1_test.go: `.DeployMultiCallContract(chainClient)`
$DIR/integration-tests/load/automationv2_1/automationv2_1_test.go: `.NewAutomationTestK8s(l, chainClient, chainlinkNodes)`
$DIR/integration-tests/load/automationv2_1/automationv2_1_test.go: `.NewInt(0)`
$DIR/integration-tests/load/automationv2_1/automationv2_1_test.go: `.SetMercuryCredentialName("cred1")`
$DIR/integration-tests/load/automationv2_1/automationv2_1_test.go: `.SetUseLogBufferV1(true)`
$DIR/integration-tests/load/automationv2_1/automationv2_1_test.go: `.Now()`
$DIR/integration-tests/load/automationv2_1/automationv2_1_test.go: `.Info()`
$DIR/integration-tests/load/automationv2_1/automationv2_1_test.go: `.Str("START_TIME", startTimeTestSetup.String())`
$DIR/integration-tests/load/automationv2_1/automationv2_1_test.go: `.String()`
$DIR/integration-tests/load/automationv2_1/automationv2_1_test.go: `.Msg("Test setup started")`
$DIR/integration-tests/load/automationv2_1/automationv2_1_test.go: `.SetupAutomationDeployment(t)`
$DIR/integration-tests/load/automationv2_1/automationv2_1_test.go: `.FundChainlinkNodesFromRootAddress(l, a.ChainClient, contracts.ChainlinkK8sClientToChainlinkNodeWithKeysAndAddress(chainlinkNodes[1:]), big.NewFloat(*loadedTestConfig.Common.ChainlinkNodeFunding))`
$DIR/integration-tests/load/automationv2_1/automationv2_1_test.go: `.ChainlinkK8sClientToChainlinkNodeWithKeysAndAddress(chainlinkNodes[1:])`
$DIR/integration-tests/load/automationv2_1/automationv2_1_test.go: `.NewFloat(*loadedTestConfig.Common.ChainlinkNodeFunding)`
$DIR/integration-tests/load/automationv2_1/automationv2_1_test.go: `.AutomationCompatibleUtilsMetaData.GetAbi()`
$DIR/integration-tests/load/automationv2_1/automationv2_1_test.go: `.LogEmitterMetaData.GetAbi()`
$DIR/integration-tests/load/automationv2_1/automationv2_1_test.go: `.SimpleLogUpkeepCounterMetaData.GetAbi()`
$DIR/integration-tests/load/automationv2_1/automationv2_1_test.go: `.Inputs.Pack(&logTriggerConfigStruct)`
$DIR/integration-tests/load/automationv2_1/automationv2_1_test.go: `.Debug()`
$DIR/integration-tests/load/automationv2_1/automationv2_1_test.go: `.
Interface("logTriggerConfigStruct", logTriggerConfigStruct)`
$DIR/integration-tests/load/automationv2_1/automationv2_1_test.go: `.
Str("Encoded Log Trigger Config", hex.EncodeToString(encodedLogTriggerConfig))`
$DIR/integration-tests/load/automationv2_1/automationv2_1_test.go: `.EncodeToString(encodedLogTriggerConfig)`
$DIR/integration-tests/load/automationv2_1/automationv2_1_test.go: `.Msg("Encoded Log Trigger Config")`
$DIR/integration-tests/load/automationv2_1/automationv2_1_test.go: `.Inputs.Pack(&checkDataStruct)`
$DIR/integration-tests/load/automationv2_1/automationv2_1_test.go: `.Debug()`
$DIR/integration-tests/load/automationv2_1/automationv2_1_test.go: `.
Interface("checkDataStruct", checkDataStruct)`
$DIR/integration-tests/load/automationv2_1/automationv2_1_test.go: `.
Str("Encoded Check Data Struct", hex.EncodeToString(encodedCheckDataStruct))`
$DIR/integration-tests/load/automationv2_1/automationv2_1_test.go: `.EncodeToString(encodedCheckDataStruct)`
$DIR/integration-tests/load/automationv2_1/automationv2_1_test.go: `.Msg("Encoded Check Data Struct")`
$DIR/integration-tests/load/automationv2_1/automationv2_1_test.go: `.Sprintf("LogTriggerUpkeep-%d", i)`
$DIR/integration-tests/load/automationv2_1/automationv2_1_test.go: `.HexToAddress(consumerContract.Address())`
$DIR/integration-tests/load/automationv2_1/automationv2_1_test.go: `.Address()`
$DIR/integration-tests/load/automationv2_1/automationv2_1_test.go: `.MustGetRootKeyAddress()`
$DIR/integration-tests/load/automationv2_1/automationv2_1_test.go: `.Debug()`
$DIR/integration-tests/load/automationv2_1/automationv2_1_test.go: `.Interface("Upkeep Config", upkeepConfig)`
$DIR/integration-tests/load/automationv2_1/automationv2_1_test.go: `.Msg("Upkeep Config")`
$DIR/integration-tests/load/automationv2_1/automationv2_1_test.go: `.RegisterUpkeeps(upkeepConfigs, maxDeploymentConcurrency)`
$DIR/integration-tests/load/automationv2_1/automationv2_1_test.go: `.ConfirmUpkeepsRegistered(registrationTxHashes, maxDeploymentConcurrency)`
$DIR/integration-tests/load/automationv2_1/automationv2_1_test.go: `.Info()`
$DIR/integration-tests/load/automationv2_1/automationv2_1_test.go: `.Msg("Successfully registered all Automation Upkeeps")`
$DIR/integration-tests/load/automationv2_1/automationv2_1_test.go: `.Info()`
$DIR/integration-tests/load/automationv2_1/automationv2_1_test.go: `.Interface("Upkeep IDs", upkeepIds)`
$DIR/integration-tests/load/automationv2_1/automationv2_1_test.go: `.Msg("Upkeeps Registered")`
$DIR/integration-tests/load/automationv2_1/automationv2_1_test.go: `.Info()`
$DIR/integration-tests/load/automationv2_1/automationv2_1_test.go: `.Str("STARTUP_WAIT_TIME", StartupWaitTime.String())`
$DIR/integration-tests/load/automationv2_1/automationv2_1_test.go: `.String()`
$DIR/integration-tests/load/automationv2_1/automationv2_1_test.go: `.Msg("Waiting for plugin to start")`
$DIR/integration-tests/load/automationv2_1/automationv2_1_test.go: `.Sleep(StartupWaitTime)`
$DIR/integration-tests/load/automationv2_1/automationv2_1_test.go: `.ChainClient.Client.BlockNumber(ctx)`
$DIR/integration-tests/load/automationv2_1/automationv2_1_test.go: `.NewProfile()`
$DIR/integration-tests/load/automationv2_1/automationv2_1_test.go: `.Address()`
$DIR/integration-tests/load/automationv2_1/automationv2_1_test.go: `.String()`
$DIR/integration-tests/load/automationv2_1/automationv2_1_test.go: `.Now()`
$DIR/integration-tests/load/automationv2_1/automationv2_1_test.go: `.Sub(startTimeTestSetup)`
$DIR/integration-tests/load/automationv2_1/automationv2_1_test.go: `.Info()`
$DIR/integration-tests/load/automationv2_1/automationv2_1_test.go: `.
Str("END_TIME", endTimeTestSetup.String())`
$DIR/integration-tests/load/automationv2_1/automationv2_1_test.go: `.String()`
$DIR/integration-tests/load/automationv2_1/automationv2_1_test.go: `.
Str("Duration", testSetupDuration.String())`
$DIR/integration-tests/load/automationv2_1/automationv2_1_test.go: `.String()`
$DIR/integration-tests/load/automationv2_1/automationv2_1_test.go: `.
Msg("Test setup ended")`
$DIR/integration-tests/load/automationv2_1/automationv2_1_test.go: `.Itoa(*loadedTestConfig.Automation.General.NumberOfNodes)`
$DIR/integration-tests/load/automationv2_1/automationv2_1_test.go: `.FormatInt(startTimeTestSetup.UnixMilli(), 10)`
$DIR/integration-tests/load/automationv2_1/automationv2_1_test.go: `.UnixMilli()`
$DIR/integration-tests/load/automationv2_1/automationv2_1_test.go: `.MsgOptionBlocks()`
$DIR/integration-tests/load/automationv2_1/automationv2_1_test.go: `.NewGenerator(&wasp.Config{
T: t,
LoadType: wasp.RPS,
GenName: "log_trigger_gen",
CallTimeout: time.Minute * 3,
Schedule: wasp.Plain(
1,
loadDuration,
),
Gun: NewLogTriggerUser(
l,
configs,
a.ChainClient,
multicallAddress.Hex(),
),
CallResultBufLen: 1000,
})`
$DIR/integration-tests/load/automationv2_1/automationv2_1_test.go: `.Plain(
1,
loadDuration,
)`
$DIR/integration-tests/load/automationv2_1/automationv2_1_test.go: `.Hex()`
$DIR/integration-tests/load/automationv2_1/automationv2_1_test.go: `.Add(g, err)`
$DIR/integration-tests/load/automationv2_1/automationv2_1_test.go: `.Now()`
$DIR/integration-tests/load/automationv2_1/automationv2_1_test.go: `.Info()`
$DIR/integration-tests/load/automationv2_1/automationv2_1_test.go: `.Str("START_TIME", startTimeTestEx.String())`
$DIR/integration-tests/load/automationv2_1/automationv2_1_test.go: `.String()`
$DIR/integration-tests/load/automationv2_1/automationv2_1_test.go: `.Msg("Test execution started")`
$DIR/integration-tests/load/automationv2_1/automationv2_1_test.go: `.Info()`
$DIR/integration-tests/load/automationv2_1/automationv2_1_test.go: `.Msg("Starting load generators")`
$DIR/integration-tests/load/automationv2_1/automationv2_1_test.go: `.Run(true)`
$DIR/integration-tests/load/automationv2_1/automationv2_1_test.go: `.Info()`
$DIR/integration-tests/load/automationv2_1/automationv2_1_test.go: `.Msg("Finished load generators")`
$DIR/integration-tests/load/automationv2_1/automationv2_1_test.go: `.Info()`
$DIR/integration-tests/load/automationv2_1/automationv2_1_test.go: `.Str("STOP_WAIT_TIME", StopWaitTime.String())`
$DIR/integration-tests/load/automationv2_1/automationv2_1_test.go: `.String()`
$DIR/integration-tests/load/automationv2_1/automationv2_1_test.go: `.Msg("Waiting for upkeeps to be performed")`
$DIR/integration-tests/load/automationv2_1/automationv2_1_test.go: `.Sleep(StopWaitTime)`
$DIR/integration-tests/load/automationv2_1/automationv2_1_test.go: `.Info()`
$DIR/integration-tests/load/automationv2_1/automationv2_1_test.go: `.Msg("Finished waiting 60s for upkeeps to be performed")`
$DIR/integration-tests/load/automationv2_1/automationv2_1_test.go: `.Now()`
$DIR/integration-tests/load/automationv2_1/automationv2_1_test.go: `.Sub(startTimeTestEx)`
$DIR/integration-tests/load/automationv2_1/automationv2_1_test.go: `.Info()`
$DIR/integration-tests/load/automationv2_1/automationv2_1_test.go: `.
Str("END_TIME", endTimeTestEx.String())`
$DIR/integration-tests/load/automationv2_1/automationv2_1_test.go: `.String()`
$DIR/integration-tests/load/automationv2_1/automationv2_1_test.go: `.
Str("Duration", testExDuration.String())`
$DIR/integration-tests/load/automationv2_1/automationv2_1_test.go: `.String()`
$DIR/integration-tests/load/automationv2_1/automationv2_1_test.go: `.
Msg("Test execution ended")`
$DIR/integration-tests/load/automationv2_1/automationv2_1_test.go: `.Info()`
$DIR/integration-tests/load/automationv2_1/automationv2_1_test.go: `.Str("Duration", testExDuration.String())`
$DIR/integration-tests/load/automationv2_1/automationv2_1_test.go: `.String()`
$DIR/integration-tests/load/automationv2_1/automationv2_1_test.go: `.Msg("Test Execution Duration")`
$DIR/integration-tests/load/automationv2_1/automationv2_1_test.go: `.Client.BlockNumber(ctx)`
$DIR/integration-tests/load/automationv2_1/automationv2_1_test.go: `.Info()`
$DIR/integration-tests/load/automationv2_1/automationv2_1_test.go: `.Uint64("Starting Block", startBlock)`
$DIR/integration-tests/load/automationv2_1/automationv2_1_test.go: `.Uint64("Ending Block", endBlock)`
$DIR/integration-tests/load/automationv2_1/automationv2_1_test.go: `.Msg("Test Block Range")`
$DIR/integration-tests/load/automationv2_1/automationv2_1_test.go: `.Now()`
$DIR/integration-tests/load/automationv2_1/automationv2_1_test.go: `.Info()`
$DIR/integration-tests/load/automationv2_1/automationv2_1_test.go: `.Str("START_TIME", startTimeTestReport.String())`
$DIR/integration-tests/load/automationv2_1/automationv2_1_test.go: `.String()`
$DIR/integration-tests/load/automationv2_1/automationv2_1_test.go: `.Msg("Test reporting started")`
$DIR/integration-tests/load/automationv2_1/automationv2_1_test.go: `.Errors()`
$DIR/integration-tests/load/automationv2_1/automationv2_1_test.go: `.HexToAddress(consumerContract.Address())`
$DIR/integration-tests/load/automationv2_1/automationv2_1_test.go: `.Address()`
$DIR/integration-tests/load/automationv2_1/automationv2_1_test.go: `.NewInt(0)`
$DIR/integration-tests/load/automationv2_1/automationv2_1_test.go: `.SetUint64(fromBlock)`
$DIR/integration-tests/load/automationv2_1/automationv2_1_test.go: `.NewInt(0)`
$DIR/integration-tests/load/automationv2_1/automationv2_1_test.go: `.SetUint64(fromBlock + batchSize)`
$DIR/integration-tests/load/automationv2_1/automationv2_1_test.go: `.WithTimeout(ctx, timeout)`
$DIR/integration-tests/load/automationv2_1/automationv2_1_test.go: `.ChainClient.Client.FilterLogs(ctx2, filterQuery)`
$DIR/integration-tests/load/automationv2_1/automationv2_1_test.go: `.Duration(math.Min(float64(timeout)*2, float64(2*time.Minute)))`
$DIR/integration-tests/load/automationv2_1/automationv2_1_test.go: `.Min(float64(timeout)*2, float64(2*time.Minute))`
$DIR/integration-tests/load/automationv2_1/automationv2_1_test.go: `.Debug()`
$DIR/integration-tests/load/automationv2_1/automationv2_1_test.go: `.
Interface("FilterQuery", filterQuery)`
$DIR/integration-tests/load/automationv2_1/automationv2_1_test.go: `.
Str("Contract Address", consumerContract.Address())`
$DIR/integration-tests/load/automationv2_1/automationv2_1_test.go: `.Address()`
$DIR/integration-tests/load/automationv2_1/automationv2_1_test.go: `.
Str("Timeout", timeout.String())`
$DIR/integration-tests/load/automationv2_1/automationv2_1_test.go: `.String()`
$DIR/integration-tests/load/automationv2_1/automationv2_1_test.go: `.
Int("Number of Logs", len(logsInBatch))`
$DIR/integration-tests/load/automationv2_1/automationv2_1_test.go: `.
Msg("Collected consumer contract logs")`
$DIR/integration-tests/load/automationv2_1/automationv2_1_test.go: `.EventByID(log.Topics[0])`
$DIR/integration-tests/load/automationv2_1/automationv2_1_test.go: `.NewSimpleLogUpkeepCounter(
address, a.ChainClient.Client,
)`
$DIR/integration-tests/load/automationv2_1/automationv2_1_test.go: `.ParsePerformingUpkeep(log)`
$DIR/integration-tests/load/automationv2_1/automationv2_1_test.go: `.TimeToPerform.Int64()`
$DIR/integration-tests/load/automationv2_1/automationv2_1_test.go: `.TimeToPerform.Int64()`
$DIR/integration-tests/load/automationv2_1/automationv2_1_test.go: `.Address()`
$DIR/integration-tests/load/automationv2_1/automationv2_1_test.go: `.NewInt(0)`
$DIR/integration-tests/load/automationv2_1/automationv2_1_test.go: `.SetUint64(fromBlock)`
$DIR/integration-tests/load/automationv2_1/automationv2_1_test.go: `.NewInt(0)`
$DIR/integration-tests/load/automationv2_1/automationv2_1_test.go: `.SetUint64(fromBlock + batchSize)`
$DIR/integration-tests/load/automationv2_1/automationv2_1_test.go: `.WithTimeout(ctx, timeout)`
$DIR/integration-tests/load/automationv2_1/automationv2_1_test.go: `.Client.FilterLogs(ctx2, filterQuery)`
$DIR/integration-tests/load/automationv2_1/automationv2_1_test.go: `.Duration(math.Min(float64(timeout)*2, float64(2*time.Minute)))`
$DIR/integration-tests/load/automationv2_1/automationv2_1_test.go: `.Min(float64(timeout)*2, float64(2*time.Minute))`
$DIR/integration-tests/load/automationv2_1/automationv2_1_test.go: `.Debug()`
$DIR/integration-tests/load/automationv2_1/automationv2_1_test.go: `.
Interface("FilterQuery", filterQuery)`
$DIR/integration-tests/load/automationv2_1/automationv2_1_test.go: `.
Str("Contract Address", address.Hex())`
$DIR/integration-tests/load/automationv2_1/automationv2_1_test.go: `.Hex()`
$DIR/integration-tests/load/automationv2_1/automationv2_1_test.go: `.
Str("Timeout", timeout.String())`
$DIR/integration-tests/load/automationv2_1/automationv2_1_test.go: `.String()`
$DIR/integration-tests/load/automationv2_1/automationv2_1_test.go: `.
Int("Number of Logs", len(logsInBatch))`
$DIR/integration-tests/load/automationv2_1/automationv2_1_test.go: `.
Msg("Collected trigger contract logs")`
$DIR/integration-tests/load/automationv2_1/automationv2_1_test.go: `.Info()`
$DIR/integration-tests/load/automationv2_1/automationv2_1_test.go: `.Int64("Number of Events Emitted", numberOfEventsEmitted)`
$DIR/integration-tests/load/automationv2_1/automationv2_1_test.go: `.Msg("Number of Events Emitted")`
$DIR/integration-tests/load/automationv2_1/automationv2_1_test.go: `.Info()`
$DIR/integration-tests/load/automationv2_1/automationv2_1_test.go: `.
Interface("Upkeep Delays Fast", upkeepDelaysFast)`
$DIR/integration-tests/load/automationv2_1/automationv2_1_test.go: `.
Interface("Upkeep Delays Recovered", upkeepDelaysRecovery)`
$DIR/integration-tests/load/automationv2_1/automationv2_1_test.go: `.
Msg("Upkeep Delays")`
$DIR/integration-tests/load/automationv2_1/automationv2_1_test.go: `.IntListStats(allUpkeepDelaysFast)`
$DIR/integration-tests/load/automationv2_1/automationv2_1_test.go: `.IntListStats(allUpkeepDelaysRecovery)`
$DIR/integration-tests/load/automationv2_1/automationv2_1_test.go: `.Info()`
$DIR/integration-tests/load/automationv2_1/automationv2_1_test.go: `.
Float64("Average", avgF)`
$DIR/integration-tests/load/automationv2_1/automationv2_1_test.go: `.Int64("Median", medianF)`
$DIR/integration-tests/load/automationv2_1/automationv2_1_test.go: `.
Int64("90th Percentile", ninetyPctF)`
$DIR/integration-tests/load/automationv2_1/automationv2_1_test.go: `.Int64("99th Percentile", ninetyNinePctF)`
$DIR/integration-tests/load/automationv2_1/automationv2_1_test.go: `.
Int64("Max", maximumF)`
$DIR/integration-tests/load/automationv2_1/automationv2_1_test.go: `.Msg("Upkeep Delays Fast Execution in seconds")`
$DIR/integration-tests/load/automationv2_1/automationv2_1_test.go: `.Info()`
$DIR/integration-tests/load/automationv2_1/automationv2_1_test.go: `.
Float64("Average", avgR)`
$DIR/integration-tests/load/automationv2_1/automationv2_1_test.go: `.Int64("Median", medianR)`
$DIR/integration-tests/load/automationv2_1/automationv2_1_test.go: `.
Int64("90th Percentile", ninetyPctR)`
$DIR/integration-tests/load/automationv2_1/automationv2_1_test.go: `.Int64("99th Percentile", ninetyNinePctR)`
$DIR/integration-tests/load/automationv2_1/automationv2_1_test.go: `.
Int64("Max", maximumR)`
$DIR/integration-tests/load/automationv2_1/automationv2_1_test.go: `.Msg("Upkeep Delays Recovery Execution in seconds")`
$DIR/integration-tests/load/automationv2_1/automationv2_1_test.go: `.Info()`
$DIR/integration-tests/load/automationv2_1/automationv2_1_test.go: `.
Int("Total Perform Count", len(allUpkeepDelays))`
$DIR/integration-tests/load/automationv2_1/automationv2_1_test.go: `.
Int("Perform Count Fast Execution", len(allUpkeepDelaysFast))`
$DIR/integration-tests/load/automationv2_1/automationv2_1_test.go: `.
Int("Perform Count Recovery Execution", len(allUpkeepDelaysRecovery))`
$DIR/integration-tests/load/automationv2_1/automationv2_1_test.go: `.
Int64("Total Events Emitted", numberOfEventsEmitted)`
$DIR/integration-tests/load/automationv2_1/automationv2_1_test.go: `.
Int64("Total Events Missed", eventsMissed)`
$DIR/integration-tests/load/automationv2_1/automationv2_1_test.go: `.
Float64("Percent Missed", percentMissed)`
$DIR/integration-tests/load/automationv2_1/automationv2_1_test.go: `.
Msg("Test completed")`
$DIR/integration-tests/load/automationv2_1/automationv2_1_test.go: `.Now()`
$DIR/integration-tests/load/automationv2_1/automationv2_1_test.go: `.Sub(startTimeTestReport)`
$DIR/integration-tests/load/automationv2_1/automationv2_1_test.go: `.Info()`
$DIR/integration-tests/load/automationv2_1/automationv2_1_test.go: `.
Str("END_TIME", endTimeTestReport.String())`
$DIR/integration-tests/load/automationv2_1/automationv2_1_test.go: `.String()`
$DIR/integration-tests/load/automationv2_1/automationv2_1_test.go: `.
Str("Duration", testReDuration.String())`
$DIR/integration-tests/load/automationv2_1/automationv2_1_test.go: `.String()`
$DIR/integration-tests/load/automationv2_1/automationv2_1_test.go: `.
Msg("Test reporting ended")`
$DIR/integration-tests/load/automationv2_1/automationv2_1_test.go: `.Seconds()`
$DIR/integration-tests/load/automationv2_1/automationv2_1_test.go: `.Sprintf(testReportFormat, avgF, medianF, ninetyPctF, ninetyNinePctF, maximumF,
avgR, medianR, ninetyPctR, ninetyNinePctR, maximumR, len(allUpkeepDelays), len(allUpkeepDelaysFast),
len(allUpkeepDelaysRecovery), numberOfExpectedEvents, numberOfEventsEmitted, eventsMissed, percentMissed, testExDuration.String())`
$DIR/integration-tests/load/automationv2_1/automationv2_1_test.go: `.String()`
$DIR/integration-tests/load/automationv2_1/automationv2_1_test.go: `.Info()`
$DIR/integration-tests/load/automationv2_1/automationv2_1_test.go: `.Str("Test Report", testReport)`
$DIR/integration-tests/load/automationv2_1/automationv2_1_test.go: `.Msg("Test Report prepared")`
$DIR/integration-tests/load/automationv2_1/automationv2_1_test.go: `.Failed()`
$DIR/integration-tests/load/automationv2_1/automationv2_1_test.go: `.Itoa(*loadedTestConfig.Automation.General.NumberOfNodes)`
$DIR/integration-tests/load/automationv2_1/automationv2_1_test.go: `.FormatInt(startTimeTestSetup.UnixMilli(), 10)`
$DIR/integration-tests/load/automationv2_1/automationv2_1_test.go: `.UnixMilli()`
$DIR/integration-tests/load/automationv2_1/automationv2_1_test.go: `.FormatInt(time.Now().UnixMilli(), 10)`
$DIR/integration-tests/load/automationv2_1/automationv2_1_test.go: `.Now()`
$DIR/integration-tests/load/automationv2_1/automationv2_1_test.go: `.UnixMilli()`
$DIR/integration-tests/load/automationv2_1/automationv2_1_test.go: `.MsgOptionTS(ts)`
$DIR/integration-tests/load/automationv2_1/automationv2_1_test.go: `.TeardownRemoteSuite(t, chainClient, testEnvironment.Cfg.Namespace, chainlinkNodes, nil, &loadedTestConfig)`
$DIR/integration-tests/load/automationv2_1/automationv2_1_test.go: `.Run()`
$DIR/integration-tests/load/automationv2_1/automationv2_1_test.go: `.Cfg.IsSimulatedNetwork()`
$DIR/integration-tests/load/automationv2_1/automationv2_1_test.go: `.Client.RemoveNamespace(testEnvironment.Cfg.Namespace)`
$DIR/integration-tests/load/functions/functions_test.go: `MonitorLoadStats(t, ft, labels, &generalConfig)`
$DIR/integration-tests/load/functions/functions_test.go: `t.Run("mumbai functions soak test http", func(t *testing.T) {
config, err := tc.GetConfig("Soak", tc.Functions)
require.NoError(t, err, "failed to get config")
cfg := config.Functions
cfgl := config.Logging.Loki
_, err = wasp.NewProfile().
Add(wasp.NewGenerator(&wasp.Config{
T: t,
LoadType: wasp.RPS,
GenName: "functions_soak_gen",
RateLimitUnitDuration: 5 * time.Second,
CallTimeout: 3 * time.Minute,
Schedule: wasp.Plain(
*cfg.Performance.RPS,
cfg.Performance.Duration.Duration,
),
Gun: NewSingleFunctionCallGun(
ft,
ModeHTTPPayload,
*cfg.Performance.RequestsPerCall,
*cfg.Common.FunctionsCallPayloadHTTP,
*cfg.Common.SecretsSlotID,
*cfg.Common.SecretsVersionID,
[]string{},
*cfg.Common.SubscriptionID,
StringToByte32(*cfg.Common.DONID),
),
Labels: labels,
LokiConfig: wasp.NewLokiConfig(cfgl.Endpoint, cfgl.TenantId, cfgl.BasicAuth, cfgl.BearerToken),
})).
Run(true)
require.NoError(t, err)
})`
$DIR/integration-tests/load/functions/functions_test.go: `_, err = wasp.NewProfile().
Add(wasp.NewGenerator(&wasp.Config{
T: t,
LoadType: wasp.RPS,
GenName: "functions_soak_gen",
RateLimitUnitDuration: 5 * time.Second,
CallTimeout: 3 * time.Minute,
Schedule: wasp.Plain(
*cfg.Performance.RPS,
cfg.Performance.Duration.Duration,
),
Gun: NewSingleFunctionCallGun(
ft,
ModeHTTPPayload,
*cfg.Performance.RequestsPerCall,
*cfg.Common.FunctionsCallPayloadHTTP,
*cfg.Common.SecretsSlotID,
*cfg.Common.SecretsVersionID,
[]string{},
*cfg.Common.SubscriptionID,
StringToByte32(*cfg.Common.DONID),
),
Labels: labels,
LokiConfig: wasp.NewLokiConfig(cfgl.Endpoint, cfgl.TenantId, cfgl.BasicAuth, cfgl.BearerToken),
})).
Run(true)`
$DIR/integration-tests/load/functions/functions_test.go: `t.Run("mumbai functions stress test http", func(t *testing.T) {
config, err := tc.GetConfig("Stress", tc.Functions)
require.NoError(t, err, "failed to get config")
cfg := config.Functions
cfgl := config.Logging.Loki
_, err = wasp.NewProfile().
Add(wasp.NewGenerator(&wasp.Config{
T: t,
LoadType: wasp.RPS,
GenName: "functions_stress_gen",
RateLimitUnitDuration: 5 * time.Second,
CallTimeout: 3 * time.Minute,
Schedule: wasp.Plain(
*cfg.Performance.RPS,
cfg.Performance.Duration.Duration,
),
Gun: NewSingleFunctionCallGun(
ft,
ModeHTTPPayload,
*cfg.Performance.RequestsPerCall,
*cfg.Common.FunctionsCallPayloadHTTP,
*cfg.Common.SecretsSlotID,
*cfg.Common.SecretsVersionID,
[]string{},
*cfg.Common.SubscriptionID,
StringToByte32(*cfg.Common.DONID),
),
Labels: labels,
LokiConfig: wasp.NewLokiConfig(cfgl.Endpoint, cfgl.TenantId, cfgl.BasicAuth, cfgl.BearerToken),
})).
Run(true)
require.NoError(t, err)
})`
$DIR/integration-tests/load/functions/functions_test.go: `_, err = wasp.NewProfile().
Add(wasp.NewGenerator(&wasp.Config{
T: t,
LoadType: wasp.RPS,
GenName: "functions_stress_gen",
RateLimitUnitDuration: 5 * time.Second,
CallTimeout: 3 * time.Minute,
Schedule: wasp.Plain(
*cfg.Performance.RPS,
cfg.Performance.Duration.Duration,
),
Gun: NewSingleFunctionCallGun(
ft,
ModeHTTPPayload,
*cfg.Performance.RequestsPerCall,
*cfg.Common.FunctionsCallPayloadHTTP,
*cfg.Common.SecretsSlotID,
*cfg.Common.SecretsVersionID,
[]string{},
*cfg.Common.SubscriptionID,
StringToByte32(*cfg.Common.DONID),
),
Labels: labels,
LokiConfig: wasp.NewLokiConfig(cfgl.Endpoint, cfgl.TenantId, cfgl.BasicAuth, cfgl.BearerToken),
})).
Run(true)`
$DIR/integration-tests/load/functions/functions_test.go: `t.Run("mumbai functions soak test only secrets", func(t *testing.T) {
config, err := tc.GetConfig("SecretsSoak", tc.Functions)
require.NoError(t, err, "failed to get config")
cfg := config.Functions
cfgl := config.Logging.Loki
_, err = wasp.NewProfile().
Add(wasp.NewGenerator(&wasp.Config{
T: t,
LoadType: wasp.RPS,
GenName: "functions_soak_gen",
RateLimitUnitDuration: 5 * time.Second,
CallTimeout: 3 * time.Minute,
Schedule: wasp.Plain(
*cfg.Performance.RPS,
cfg.Performance.Duration.Duration,
),
Gun: NewSingleFunctionCallGun(
ft,
ModeSecretsOnlyPayload,
*cfg.Performance.RequestsPerCall,
*cfg.Common.FunctionsCallPayloadWithSecrets,
*cfg.Common.SecretsSlotID,
*cfg.Common.SecretsVersionID,
[]string{},
*cfg.Common.SubscriptionID,
StringToByte32(*cfg.Common.DONID),
),
Labels: labels,
LokiConfig: wasp.NewLokiConfig(cfgl.Endpoint, cfgl.TenantId, cfgl.BasicAuth, cfgl.BearerToken),
})).
Run(true)
require.NoError(t, err)
})`
$DIR/integration-tests/load/functions/functions_test.go: `_, err = wasp.NewProfile().
Add(wasp.NewGenerator(&wasp.Config{
T: t,
LoadType: wasp.RPS,
GenName: "functions_soak_gen",
RateLimitUnitDuration: 5 * time.Second,
CallTimeout: 3 * time.Minute,
Schedule: wasp.Plain(
*cfg.Performance.RPS,
cfg.Performance.Duration.Duration,
),
Gun: NewSingleFunctionCallGun(
ft,
ModeSecretsOnlyPayload,
*cfg.Performance.RequestsPerCall,
*cfg.Common.FunctionsCallPayloadWithSecrets,
*cfg.Common.SecretsSlotID,
*cfg.Common.SecretsVersionID,
[]string{},
*cfg.Common.SubscriptionID,
StringToByte32(*cfg.Common.DONID),
),
Labels: labels,
LokiConfig: wasp.NewLokiConfig(cfgl.Endpoint, cfgl.TenantId, cfgl.BasicAuth, cfgl.BearerToken),
})).
Run(true)`
$DIR/integration-tests/load/functions/functions_test.go: `t.Run("mumbai functions stress test only secrets", func(t *testing.T) {
config, err := tc.GetConfig("SecretsStress", tc.Functions)
require.NoError(t, err, "failed to get config")
cfg := config.Functions
cfgl := config.Logging.Loki
_, err = wasp.NewProfile().
Add(wasp.NewGenerator(&wasp.Config{
T: t,
LoadType: wasp.RPS,
GenName: "functions_stress_gen",
RateLimitUnitDuration: 5 * time.Second,
CallTimeout: 3 * time.Minute,
Schedule: wasp.Plain(
*cfg.Performance.RPS,
cfg.Performance.Duration.Duration,
),
Gun: NewSingleFunctionCallGun(
ft,
ModeSecretsOnlyPayload,
*cfg.Performance.RequestsPerCall,
*cfg.Common.FunctionsCallPayloadWithSecrets,
*cfg.Common.SecretsSlotID,
*cfg.Common.SecretsVersionID,
[]string{},
*cfg.Common.SubscriptionID,
StringToByte32(*cfg.Common.DONID),
),
Labels: labels,
LokiConfig: wasp.NewLokiConfig(cfgl.Endpoint, cfgl.TenantId, cfgl.BasicAuth, cfgl.BearerToken),
})).
Run(true)
require.NoError(t, err)
})`
$DIR/integration-tests/load/functions/functions_test.go: `_, err = wasp.NewProfile().
Add(wasp.NewGenerator(&wasp.Config{
T: t,
LoadType: wasp.RPS,
GenName: "functions_stress_gen",
RateLimitUnitDuration: 5 * time.Second,
CallTimeout: 3 * time.Minute,
Schedule: wasp.Plain(
*cfg.Performance.RPS,
cfg.Performance.Duration.Duration,
),
Gun: NewSingleFunctionCallGun(
ft,
ModeSecretsOnlyPayload,
*cfg.Performance.RequestsPerCall,
*cfg.Common.FunctionsCallPayloadWithSecrets,
*cfg.Common.SecretsSlotID,
*cfg.Common.SecretsVersionID,
[]string{},
*cfg.Common.SubscriptionID,
StringToByte32(*cfg.Common.DONID),
),
Labels: labels,
LokiConfig: wasp.NewLokiConfig(cfgl.Endpoint, cfgl.TenantId, cfgl.BasicAuth, cfgl.BearerToken),
})).
Run(true)`
$DIR/integration-tests/load/functions/functions_test.go: `t.Run("mumbai functions soak test real", func(t *testing.T) {
config, err := tc.GetConfig("RealSoak", tc.Functions)
require.NoError(t, err, "failed to get config")
cfg := config.Functions
cfgl := config.Logging.Loki
_, err = wasp.NewProfile().
Add(wasp.NewGenerator(&wasp.Config{
T: t,
LoadType: wasp.RPS,
GenName: "functions_soak_gen",
RateLimitUnitDuration: 5 * time.Second,
CallTimeout: 3 * time.Minute,
Schedule: wasp.Plain(
*cfg.Performance.RPS,
cfg.Performance.Duration.Duration,
),
Gun: NewSingleFunctionCallGun(
ft,
ModeReal,
*cfg.Performance.RequestsPerCall,
*cfg.Common.FunctionsCallPayloadReal,
*cfg.Common.SecretsSlotID,
*cfg.Common.SecretsVersionID,
[]string{"1", "2", "3", "4"},
*cfg.Common.SubscriptionID,
StringToByte32(*cfg.Common.DONID),
),
Labels: labels,
LokiConfig: wasp.NewLokiConfig(cfgl.Endpoint, cfgl.TenantId, cfgl.BasicAuth, cfgl.BearerToken),
})).
Run(true)
require.NoError(t, err)
})`
$DIR/integration-tests/load/functions/functions_test.go: `_, err = wasp.NewProfile().
Add(wasp.NewGenerator(&wasp.Config{
T: t,
LoadType: wasp.RPS,
GenName: "functions_soak_gen",
RateLimitUnitDuration: 5 * time.Second,
CallTimeout: 3 * time.Minute,
Schedule: wasp.Plain(
*cfg.Performance.RPS,
cfg.Performance.Duration.Duration,
),
Gun: NewSingleFunctionCallGun(
ft,
ModeReal,
*cfg.Performance.RequestsPerCall,
*cfg.Common.FunctionsCallPayloadReal,
*cfg.Common.SecretsSlotID,
*cfg.Common.SecretsVersionID,
[]string{"1", "2", "3", "4"},
*cfg.Common.SubscriptionID,
StringToByte32(*cfg.Common.DONID),
),
Labels: labels,
LokiConfig: wasp.NewLokiConfig(cfgl.Endpoint, cfgl.TenantId, cfgl.BasicAuth, cfgl.BearerToken),
})).
Run(true)`
$DIR/integration-tests/load/functions/functions_test.go: `_, err = wasp.NewProfile().
Add(wasp.NewGenerator(&wasp.Config{
T: t,
LoadType: wasp.RPS,
GenName: "functions_stress_gen",
RateLimitUnitDuration: 5 * time.Second,
CallTimeout: 3 * time.Minute,
Schedule: wasp.Plain(
*cfg.Performance.RPS,
cfg.Performance.Duration.Duration,
),
Gun: NewSingleFunctionCallGun(
ft,
ModeReal,
*cfg.Performance.RequestsPerCall,
*cfg.Common.FunctionsCallPayloadReal,
*cfg.Common.SecretsSlotID,
*cfg.Common.SecretsVersionID,
[]string{"1", "2", "3", "4"},
*cfg.Common.SubscriptionID,
StringToByte32(*cfg.Common.DONID),
),
Labels: labels,
LokiConfig: wasp.NewLokiConfig(cfgl.Endpoint, cfgl.TenantId, cfgl.BasicAuth, cfgl.BearerToken),
})).
Run(true)`
$DIR/integration-tests/load/functions/functions_test.go: `.GetConfig(tc.NoKey, tc.Functions)`
$DIR/integration-tests/load/functions/functions_test.go: `.Run("mumbai functions soak test http", func(t *testing.T) {
config, err := tc.GetConfig("Soak", tc.Functions)
require.NoError(t, err, "failed to get config")
cfg := config.Functions
cfgl := config.Logging.Loki
_, err = wasp.NewProfile().
Add(wasp.NewGenerator(&wasp.Config{
T: t,
LoadType: wasp.RPS,
GenName: "functions_soak_gen",
RateLimitUnitDuration: 5 * time.Second,
CallTimeout: 3 * time.Minute,
Schedule: wasp.Plain(
*cfg.Performance.RPS,
cfg.Performance.Duration.Duration,
),
Gun: NewSingleFunctionCallGun(
ft,
ModeHTTPPayload,
*cfg.Performance.RequestsPerCall,
*cfg.Common.FunctionsCallPayloadHTTP,
*cfg.Common.SecretsSlotID,
*cfg.Common.SecretsVersionID,
[]string{},
*cfg.Common.SubscriptionID,
StringToByte32(*cfg.Common.DONID),
),
Labels: labels,
LokiConfig: wasp.NewLokiConfig(cfgl.Endpoint, cfgl.TenantId, cfgl.BasicAuth, cfgl.BearerToken),
})).
Run(true)
require.NoError(t, err)
})`
$DIR/integration-tests/load/functions/functions_test.go: `.GetConfig("Soak", tc.Functions)`
$DIR/integration-tests/load/functions/functions_test.go: `.NewProfile()`
$DIR/integration-tests/load/functions/functions_test.go: `.
Add(wasp.NewGenerator(&wasp.Config{
T: t,
LoadType: wasp.RPS,
GenName: "functions_soak_gen",
RateLimitUnitDuration: 5 * time.Second,
CallTimeout: 3 * time.Minute,
Schedule: wasp.Plain(
*cfg.Performance.RPS,
cfg.Performance.Duration.Duration,
),
Gun: NewSingleFunctionCallGun(
ft,
ModeHTTPPayload,
*cfg.Performance.RequestsPerCall,
*cfg.Common.FunctionsCallPayloadHTTP,
*cfg.Common.SecretsSlotID,
*cfg.Common.SecretsVersionID,
[]string{},
*cfg.Common.SubscriptionID,
StringToByte32(*cfg.Common.DONID),
),
Labels: labels,
LokiConfig: wasp.NewLokiConfig(cfgl.Endpoint, cfgl.TenantId, cfgl.BasicAuth, cfgl.BearerToken),
}))`
$DIR/integration-tests/load/functions/functions_test.go: `.NewGenerator(&wasp.Config{
T: t,
LoadType: wasp.RPS,
GenName: "functions_soak_gen",
RateLimitUnitDuration: 5 * time.Second,
CallTimeout: 3 * time.Minute,
Schedule: wasp.Plain(
*cfg.Performance.RPS,
cfg.Performance.Duration.Duration,
),
Gun: NewSingleFunctionCallGun(
ft,
ModeHTTPPayload,
*cfg.Performance.RequestsPerCall,
*cfg.Common.FunctionsCallPayloadHTTP,
*cfg.Common.SecretsSlotID,
*cfg.Common.SecretsVersionID,
[]string{},
*cfg.Common.SubscriptionID,
StringToByte32(*cfg.Common.DONID),
),
Labels: labels,
LokiConfig: wasp.NewLokiConfig(cfgl.Endpoint, cfgl.TenantId, cfgl.BasicAuth, cfgl.BearerToken),
})`
$DIR/integration-tests/load/functions/functions_test.go: `.Plain(
*cfg.Performance.RPS,
cfg.Performance.Duration.Duration,
)`
$DIR/integration-tests/load/functions/functions_test.go: `.NewLokiConfig(cfgl.Endpoint, cfgl.TenantId, cfgl.BasicAuth, cfgl.BearerToken)`
$DIR/integration-tests/load/functions/functions_test.go: `.
Run(true)`
$DIR/integration-tests/load/functions/functions_test.go: `.Run("mumbai functions stress test http", func(t *testing.T) {
config, err := tc.GetConfig("Stress", tc.Functions)
require.NoError(t, err, "failed to get config")
cfg := config.Functions
cfgl := config.Logging.Loki
_, err = wasp.NewProfile().
Add(wasp.NewGenerator(&wasp.Config{
T: t,
LoadType: wasp.RPS,
GenName: "functions_stress_gen",
RateLimitUnitDuration: 5 * time.Second,
CallTimeout: 3 * time.Minute,
Schedule: wasp.Plain(
*cfg.Performance.RPS,
cfg.Performance.Duration.Duration,
),
Gun: NewSingleFunctionCallGun(
ft,
ModeHTTPPayload,
*cfg.Performance.RequestsPerCall,
*cfg.Common.FunctionsCallPayloadHTTP,
*cfg.Common.SecretsSlotID,
*cfg.Common.SecretsVersionID,
[]string{},
*cfg.Common.SubscriptionID,
StringToByte32(*cfg.Common.DONID),
),
Labels: labels,
LokiConfig: wasp.NewLokiConfig(cfgl.Endpoint, cfgl.TenantId, cfgl.BasicAuth, cfgl.BearerToken),
})).
Run(true)
require.NoError(t, err)
})`
$DIR/integration-tests/load/functions/functions_test.go: `.GetConfig("Stress", tc.Functions)`
$DIR/integration-tests/load/functions/functions_test.go: `.NewProfile()`
$DIR/integration-tests/load/functions/functions_test.go: `.
Add(wasp.NewGenerator(&wasp.Config{
T: t,
LoadType: wasp.RPS,
GenName: "functions_stress_gen",
RateLimitUnitDuration: 5 * time.Second,
CallTimeout: 3 * time.Minute,
Schedule: wasp.Plain(
*cfg.Performance.RPS,
cfg.Performance.Duration.Duration,
),
Gun: NewSingleFunctionCallGun(
ft,
ModeHTTPPayload,
*cfg.Performance.RequestsPerCall,
*cfg.Common.FunctionsCallPayloadHTTP,
*cfg.Common.SecretsSlotID,
*cfg.Common.SecretsVersionID,
[]string{},
*cfg.Common.SubscriptionID,
StringToByte32(*cfg.Common.DONID),
),
Labels: labels,
LokiConfig: wasp.NewLokiConfig(cfgl.Endpoint, cfgl.TenantId, cfgl.BasicAuth, cfgl.BearerToken),
}))`
$DIR/integration-tests/load/functions/functions_test.go: `.NewGenerator(&wasp.Config{
T: t,
LoadType: wasp.RPS,
GenName: "functions_stress_gen",
RateLimitUnitDuration: 5 * time.Second,
CallTimeout: 3 * time.Minute,
Schedule: wasp.Plain(
*cfg.Performance.RPS,
cfg.Performance.Duration.Duration,
),
Gun: NewSingleFunctionCallGun(
ft,
ModeHTTPPayload,
*cfg.Performance.RequestsPerCall,
*cfg.Common.FunctionsCallPayloadHTTP,
*cfg.Common.SecretsSlotID,
*cfg.Common.SecretsVersionID,
[]string{},
*cfg.Common.SubscriptionID,
StringToByte32(*cfg.Common.DONID),
),
Labels: labels,
LokiConfig: wasp.NewLokiConfig(cfgl.Endpoint, cfgl.TenantId, cfgl.BasicAuth, cfgl.BearerToken),
})`
$DIR/integration-tests/load/functions/functions_test.go: `.Plain(
*cfg.Performance.RPS,
cfg.Performance.Duration.Duration,
)`
$DIR/integration-tests/load/functions/functions_test.go: `.NewLokiConfig(cfgl.Endpoint, cfgl.TenantId, cfgl.BasicAuth, cfgl.BearerToken)`
$DIR/integration-tests/load/functions/functions_test.go: `.
Run(true)`
$DIR/integration-tests/load/functions/functions_test.go: `.Run("mumbai functions soak test only secrets", func(t *testing.T) {
config, err := tc.GetConfig("SecretsSoak", tc.Functions)
require.NoError(t, err, "failed to get config")
cfg := config.Functions
cfgl := config.Logging.Loki
_, err = wasp.NewProfile().
Add(wasp.NewGenerator(&wasp.Config{
T: t,
LoadType: wasp.RPS,
GenName: "functions_soak_gen",
RateLimitUnitDuration: 5 * time.Second,
CallTimeout: 3 * time.Minute,
Schedule: wasp.Plain(
*cfg.Performance.RPS,
cfg.Performance.Duration.Duration,
),
Gun: NewSingleFunctionCallGun(
ft,
ModeSecretsOnlyPayload,
*cfg.Performance.RequestsPerCall,
*cfg.Common.FunctionsCallPayloadWithSecrets,
*cfg.Common.SecretsSlotID,
*cfg.Common.SecretsVersionID,
[]string{},
*cfg.Common.SubscriptionID,
StringToByte32(*cfg.Common.DONID),
),
Labels: labels,
LokiConfig: wasp.NewLokiConfig(cfgl.Endpoint, cfgl.TenantId, cfgl.BasicAuth, cfgl.BearerToken),
})).
Run(true)
require.NoError(t, err)
})`
$DIR/integration-tests/load/functions/functions_test.go: `.GetConfig("SecretsSoak", tc.Functions)`
$DIR/integration-tests/load/functions/functions_test.go: `.NewProfile()`
$DIR/integration-tests/load/functions/functions_test.go: `.
Add(wasp.NewGenerator(&wasp.Config{
T: t,
LoadType: wasp.RPS,
GenName: "functions_soak_gen",
RateLimitUnitDuration: 5 * time.Second,
CallTimeout: 3 * time.Minute,
Schedule: wasp.Plain(
*cfg.Performance.RPS,
cfg.Performance.Duration.Duration,
),
Gun: NewSingleFunctionCallGun(
ft,
ModeSecretsOnlyPayload,
*cfg.Performance.RequestsPerCall,
*cfg.Common.FunctionsCallPayloadWithSecrets,
*cfg.Common.SecretsSlotID,
*cfg.Common.SecretsVersionID,
[]string{},
*cfg.Common.SubscriptionID,
StringToByte32(*cfg.Common.DONID),
),
Labels: labels,
LokiConfig: wasp.NewLokiConfig(cfgl.Endpoint, cfgl.TenantId, cfgl.BasicAuth, cfgl.BearerToken),
}))`
$DIR/integration-tests/load/functions/functions_test.go: `.NewGenerator(&wasp.Config{
T: t,
LoadType: wasp.RPS,
GenName: "functions_soak_gen",
RateLimitUnitDuration: 5 * time.Second,
CallTimeout: 3 * time.Minute,
Schedule: wasp.Plain(
*cfg.Performance.RPS,
cfg.Performance.Duration.Duration,
),
Gun: NewSingleFunctionCallGun(
ft,
ModeSecretsOnlyPayload,
*cfg.Performance.RequestsPerCall,
*cfg.Common.FunctionsCallPayloadWithSecrets,
*cfg.Common.SecretsSlotID,
*cfg.Common.SecretsVersionID,
[]string{},
*cfg.Common.SubscriptionID,
StringToByte32(*cfg.Common.DONID),
),
Labels: labels,
LokiConfig: wasp.NewLokiConfig(cfgl.Endpoint, cfgl.TenantId, cfgl.BasicAuth, cfgl.BearerToken),
})`
$DIR/integration-tests/load/functions/functions_test.go: `.Plain(
*cfg.Performance.RPS,
cfg.Performance.Duration.Duration,
)`
$DIR/integration-tests/load/functions/functions_test.go: `.NewLokiConfig(cfgl.Endpoint, cfgl.TenantId, cfgl.BasicAuth, cfgl.BearerToken)`
$DIR/integration-tests/load/functions/functions_test.go: `.
Run(true)`
$DIR/integration-tests/load/functions/functions_test.go: `.Run("mumbai functions stress test only secrets", func(t *testing.T) {
config, err := tc.GetConfig("SecretsStress", tc.Functions)
require.NoError(t, err, "failed to get config")
cfg := config.Functions
cfgl := config.Logging.Loki
_, err = wasp.NewProfile().
Add(wasp.NewGenerator(&wasp.Config{
T: t,
LoadType: wasp.RPS,
GenName: "functions_stress_gen",
RateLimitUnitDuration: 5 * time.Second,
CallTimeout: 3 * time.Minute,
Schedule: wasp.Plain(
*cfg.Performance.RPS,
cfg.Performance.Duration.Duration,
),
Gun: NewSingleFunctionCallGun(
ft,
ModeSecretsOnlyPayload,
*cfg.Performance.RequestsPerCall,
*cfg.Common.FunctionsCallPayloadWithSecrets,
*cfg.Common.SecretsSlotID,
*cfg.Common.SecretsVersionID,
[]string{},
*cfg.Common.SubscriptionID,
StringToByte32(*cfg.Common.DONID),
),
Labels: labels,
LokiConfig: wasp.NewLokiConfig(cfgl.Endpoint, cfgl.TenantId, cfgl.BasicAuth, cfgl.BearerToken),
})).
Run(true)
require.NoError(t, err)
})`
$DIR/integration-tests/load/functions/functions_test.go: `.GetConfig("SecretsStress", tc.Functions)`
$DIR/integration-tests/load/functions/functions_test.go: `.NewProfile()`
$DIR/integration-tests/load/functions/functions_test.go: `.
Add(wasp.NewGenerator(&wasp.Config{
T: t,
LoadType: wasp.RPS,
GenName: "functions_stress_gen",
RateLimitUnitDuration: 5 * time.Second,
CallTimeout: 3 * time.Minute,
Schedule: wasp.Plain(
*cfg.Performance.RPS,
cfg.Performance.Duration.Duration,
),
Gun: NewSingleFunctionCallGun(
ft,
ModeSecretsOnlyPayload,
*cfg.Performance.RequestsPerCall,
*cfg.Common.FunctionsCallPayloadWithSecrets,
*cfg.Common.SecretsSlotID,
*cfg.Common.SecretsVersionID,
[]string{},
*cfg.Common.SubscriptionID,
StringToByte32(*cfg.Common.DONID),
),
Labels: labels,
LokiConfig: wasp.NewLokiConfig(cfgl.Endpoint, cfgl.TenantId, cfgl.BasicAuth, cfgl.BearerToken),
}))`
$DIR/integration-tests/load/functions/functions_test.go: `.NewGenerator(&wasp.Config{
T: t,
LoadType: wasp.RPS,
GenName: "functions_stress_gen",
RateLimitUnitDuration: 5 * time.Second,
CallTimeout: 3 * time.Minute,
Schedule: wasp.Plain(
*cfg.Performance.RPS,
cfg.Performance.Duration.Duration,
),
Gun: NewSingleFunctionCallGun(
ft,
ModeSecretsOnlyPayload,
*cfg.Performance.RequestsPerCall,
*cfg.Common.FunctionsCallPayloadWithSecrets,
*cfg.Common.SecretsSlotID,
*cfg.Common.SecretsVersionID,
[]string{},
*cfg.Common.SubscriptionID,
StringToByte32(*cfg.Common.DONID),
),
Labels: labels,
LokiConfig: wasp.NewLokiConfig(cfgl.Endpoint, cfgl.TenantId, cfgl.BasicAuth, cfgl.BearerToken),
})`
$DIR/integration-tests/load/functions/functions_test.go: `.Plain(
*cfg.Performance.RPS,
cfg.Performance.Duration.Duration,
)`
$DIR/integration-tests/load/functions/functions_test.go: `.NewLokiConfig(cfgl.Endpoint, cfgl.TenantId, cfgl.BasicAuth, cfgl.BearerToken)`
$DIR/integration-tests/load/functions/functions_test.go: `.
Run(true)`
$DIR/integration-tests/load/functions/functions_test.go: `.Run("mumbai functions soak test real", func(t *testing.T) {
config, err := tc.GetConfig("RealSoak", tc.Functions)
require.NoError(t, err, "failed to get config")
cfg := config.Functions
cfgl := config.Logging.Loki
_, err = wasp.NewProfile().
Add(wasp.NewGenerator(&wasp.Config{
T: t,
LoadType: wasp.RPS,
GenName: "functions_soak_gen",
RateLimitUnitDuration: 5 * time.Second,
CallTimeout: 3 * time.Minute,
Schedule: wasp.Plain(
*cfg.Performance.RPS,
cfg.Performance.Duration.Duration,
),
Gun: NewSingleFunctionCallGun(
ft,
ModeReal,
*cfg.Performance.RequestsPerCall,
*cfg.Common.FunctionsCallPayloadReal,
*cfg.Common.SecretsSlotID,
*cfg.Common.SecretsVersionID,
[]string{"1", "2", "3", "4"},
*cfg.Common.SubscriptionID,
StringToByte32(*cfg.Common.DONID),
),
Labels: labels,
LokiConfig: wasp.NewLokiConfig(cfgl.Endpoint, cfgl.TenantId, cfgl.BasicAuth, cfgl.BearerToken),
})).
Run(true)
require.NoError(t, err)
})`
$DIR/integration-tests/load/functions/functions_test.go: `.GetConfig("RealSoak", tc.Functions)`
$DIR/integration-tests/load/functions/functions_test.go: `.NewProfile()`
$DIR/integration-tests/load/functions/functions_test.go: `.
Add(wasp.NewGenerator(&wasp.Config{
T: t,
LoadType: wasp.RPS,
GenName: "functions_soak_gen",
RateLimitUnitDuration: 5 * time.Second,
CallTimeout: 3 * time.Minute,
Schedule: wasp.Plain(
*cfg.Performance.RPS,
cfg.Performance.Duration.Duration,
),
Gun: NewSingleFunctionCallGun(
ft,
ModeReal,
*cfg.Performance.RequestsPerCall,
*cfg.Common.FunctionsCallPayloadReal,
*cfg.Common.SecretsSlotID,
*cfg.Common.SecretsVersionID,
[]string{"1", "2", "3", "4"},
*cfg.Common.SubscriptionID,
StringToByte32(*cfg.Common.DONID),
),
Labels: labels,
LokiConfig: wasp.NewLokiConfig(cfgl.Endpoint, cfgl.TenantId, cfgl.BasicAuth, cfgl.BearerToken),
}))`
$DIR/integration-tests/load/functions/functions_test.go: `.NewGenerator(&wasp.Config{
T: t,
LoadType: wasp.RPS,
GenName: "functions_soak_gen",
RateLimitUnitDuration: 5 * time.Second,
CallTimeout: 3 * time.Minute,
Schedule: wasp.Plain(
*cfg.Performance.RPS,
cfg.Performance.Duration.Duration,
),
Gun: NewSingleFunctionCallGun(
ft,
ModeReal,
*cfg.Performance.RequestsPerCall,
*cfg.Common.FunctionsCallPayloadReal,
*cfg.Common.SecretsSlotID,
*cfg.Common.SecretsVersionID,
[]string{"1", "2", "3", "4"},
*cfg.Common.SubscriptionID,
StringToByte32(*cfg.Common.DONID),
),
Labels: labels,
LokiConfig: wasp.NewLokiConfig(cfgl.Endpoint, cfgl.TenantId, cfgl.BasicAuth, cfgl.BearerToken),
})`
$DIR/integration-tests/load/functions/functions_test.go: `.Plain(
*cfg.Performance.RPS,
cfg.Performance.Duration.Duration,
)`
$DIR/integration-tests/load/functions/functions_test.go: `.NewLokiConfig(cfgl.Endpoint, cfgl.TenantId, cfgl.BasicAuth, cfgl.BearerToken)`
$DIR/integration-tests/load/functions/functions_test.go: `.
Run(true)`
$DIR/integration-tests/load/functions/functions_test.go: `.GetConfig("RealStress", tc.Functions)`
$DIR/integration-tests/load/functions/functions_test.go: `.NewProfile()`
$DIR/integration-tests/load/functions/functions_test.go: `.
Add(wasp.NewGenerator(&wasp.Config{
T: t,
LoadType: wasp.RPS,
GenName: "functions_stress_gen",
RateLimitUnitDuration: 5 * time.Second,
CallTimeout: 3 * time.Minute,
Schedule: wasp.Plain(
*cfg.Performance.RPS,
cfg.Performance.Duration.Duration,
),
Gun: NewSingleFunctionCallGun(
ft,
ModeReal,
*cfg.Performance.RequestsPerCall,
*cfg.Common.FunctionsCallPayloadReal,
*cfg.Common.SecretsSlotID,
*cfg.Common.SecretsVersionID,
[]string{"1", "2", "3", "4"},
*cfg.Common.SubscriptionID,
StringToByte32(*cfg.Common.DONID),
),
Labels: labels,
LokiConfig: wasp.NewLokiConfig(cfgl.Endpoint, cfgl.TenantId, cfgl.BasicAuth, cfgl.BearerToken),
}))`
$DIR/integration-tests/load/functions/functions_test.go: `.NewGenerator(&wasp.Config{
T: t,
LoadType: wasp.RPS,
GenName: "functions_stress_gen",
RateLimitUnitDuration: 5 * time.Second,
CallTimeout: 3 * time.Minute,
Schedule: wasp.Plain(
*cfg.Performance.RPS,
cfg.Performance.Duration.Duration,
),
Gun: NewSingleFunctionCallGun(
ft,
ModeReal,
*cfg.Performance.RequestsPerCall,
*cfg.Common.FunctionsCallPayloadReal,
*cfg.Common.SecretsSlotID,
*cfg.Common.SecretsVersionID,
[]string{"1", "2", "3", "4"},
*cfg.Common.SubscriptionID,
StringToByte32(*cfg.Common.DONID),
),
Labels: labels,
LokiConfig: wasp.NewLokiConfig(cfgl.Endpoint, cfgl.TenantId, cfgl.BasicAuth, cfgl.BearerToken),
})`
$DIR/integration-tests/load/functions/functions_test.go: `.Plain(
*cfg.Performance.RPS,
cfg.Performance.Duration.Duration,
)`
$DIR/integration-tests/load/functions/functions_test.go: `.NewLokiConfig(cfgl.Endpoint, cfgl.TenantId, cfgl.BasicAuth, cfgl.BearerToken)`
$DIR/integration-tests/load/functions/functions_test.go: `.
Run(true)`
$DIR/integration-tests/load/functions/gateway_test.go: `t.Run("gateway secrets list soak test", func(t *testing.T) {
secretsListCfg.T = t
_, err := wasp.NewProfile().
Add(wasp.NewGenerator(secretsListCfg)).
Run(true)
require.NoError(t, err)
})`
$DIR/integration-tests/load/functions/gateway_test.go: `secretsListCfg.T = t`
$DIR/integration-tests/load/functions/gateway_test.go: `secretsListCfg.T = t`
$DIR/integration-tests/load/functions/gateway_test.go: `.GetConfig("GatewayList", tc.Functions)`
$DIR/integration-tests/load/functions/gateway_test.go: `.Plain(
*listConfig.Functions.Performance.RPS,
listConfig.Functions.Performance.Duration.Duration,
)`
$DIR/integration-tests/load/functions/gateway_test.go: `.NewLokiConfig(cfgl.Endpoint, cfgl.TenantId, cfgl.BasicAuth, cfgl.BearerToken)`
$DIR/integration-tests/load/functions/gateway_test.go: `.GetConfig("GatewaySet", tc.Functions)`
$DIR/integration-tests/load/functions/gateway_test.go: `.Plain(
*setConfig.Functions.Performance.RPS,
setConfig.Functions.Performance.Duration.Duration,
)`
$DIR/integration-tests/load/functions/gateway_test.go: `.NewLokiConfig(cfgl.Endpoint, cfgl.TenantId, cfgl.BasicAuth, cfgl.BearerToken)`
$DIR/integration-tests/load/functions/gateway_test.go: `.Run("gateway secrets list soak test", func(t *testing.T) {
secretsListCfg.T = t
_, err := wasp.NewProfile().
Add(wasp.NewGenerator(secretsListCfg)).
Run(true)
require.NoError(t, err)
})`
$DIR/integration-tests/load/functions/gateway_test.go: `.NewProfile()`
$DIR/integration-tests/load/functions/gateway_test.go: `.
Add(wasp.NewGenerator(secretsListCfg))`
$DIR/integration-tests/load/functions/gateway_test.go: `.NewGenerator(secretsListCfg)`
$DIR/integration-tests/load/functions/gateway_test.go: `.
Run(true)`
$DIR/integration-tests/load/functions/gateway_test.go: `.NewProfile()`
$DIR/integration-tests/load/functions/gateway_test.go: `.
Add(wasp.NewGenerator(secretsSetCfg))`
$DIR/integration-tests/load/functions/gateway_test.go: `.NewGenerator(secretsSetCfg)`
$DIR/integration-tests/load/functions/gateway_test.go: `.
Run(true)`
$DIR/integration-tests/load/ocr/ocr_test.go: `SimulateEAActivity(l, cfg.Load.EAChangeInterval.Duration, ocrInstances, workerNodes, msClient)`
$DIR/integration-tests/load/ocr/ocr_test.go: `p.Add(wasp.NewGenerator(&wasp.Config{
T: t,
GenName: "ocr",
LoadType: wasp.RPS,
CallTimeout: cfg.Load.VerificationTimeout.Duration,
RateLimitUnitDuration: cfg.Load.RateLimitUnitDuration.Duration,
Schedule: wasp.Plain(*cfg.Load.Rate, cfg.Load.TestDuration.Duration),
Gun: NewGun(l, seth, ocrInstances),
Labels: CommonTestLabels,
LokiConfig: wasp.NewLokiConfig(cfgl.Endpoint, cfgl.TenantId, cfgl.BasicAuth, cfgl.BearerToken),
}))`
$DIR/integration-tests/load/ocr/ocr_test.go: `_, err = p.Run(true)`
$DIR/integration-tests/load/ocr/ocr_test.go: `p.Add(wasp.NewGenerator(&wasp.Config{
T: t,
GenName: "ocr",
LoadType: wasp.VU,
CallTimeout: cfg.Volume.VerificationTimeout.Duration,
Schedule: wasp.Plain(*cfg.Volume.Rate, cfg.Volume.TestDuration.Duration),
VU: NewVU(l, seth, *cfg.Volume.VURequestsPerUnit, cfg.Volume.RateLimitUnitDuration.Duration, lta, bootstrapNode, workerNodes, msClient),
Labels: CommonTestLabels,
LokiConfig: wasp.NewLokiConfig(cfgl.Endpoint, cfgl.TenantId, cfgl.BasicAuth, cfgl.BearerToken),
}))`
$DIR/integration-tests/load/ocr/ocr_test.go: `_, err = p.Run(true)`
$DIR/integration-tests/load/ocr/ocr_test.go: `.GetTestLogger(t)`
$DIR/integration-tests/load/ocr/ocr_test.go: `.GetConfig("Load", tc.OCR)`
$DIR/integration-tests/load/ocr/ocr_test.go: `.ConnectRemote()`
$DIR/integration-tests/load/ocr/ocr_test.go: `.GetChainClient(config, *evmNetwork)`
$DIR/integration-tests/load/ocr/ocr_test.go: `.NewProfile()`
$DIR/integration-tests/load/ocr/ocr_test.go: `.Add(wasp.NewGenerator(&wasp.Config{
T: t,
GenName: "ocr",
LoadType: wasp.RPS,
CallTimeout: cfg.Load.VerificationTimeout.Duration,
RateLimitUnitDuration: cfg.Load.RateLimitUnitDuration.Duration,
Schedule: wasp.Plain(*cfg.Load.Rate, cfg.Load.TestDuration.Duration),
Gun: NewGun(l, seth, ocrInstances),
Labels: CommonTestLabels,
LokiConfig: wasp.NewLokiConfig(cfgl.Endpoint, cfgl.TenantId, cfgl.BasicAuth, cfgl.BearerToken),
}))`
$DIR/integration-tests/load/ocr/ocr_test.go: `.NewGenerator(&wasp.Config{
T: t,
GenName: "ocr",
LoadType: wasp.RPS,
CallTimeout: cfg.Load.VerificationTimeout.Duration,
RateLimitUnitDuration: cfg.Load.RateLimitUnitDuration.Duration,
Schedule: wasp.Plain(*cfg.Load.Rate, cfg.Load.TestDuration.Duration),
Gun: NewGun(l, seth, ocrInstances),
Labels: CommonTestLabels,
LokiConfig: wasp.NewLokiConfig(cfgl.Endpoint, cfgl.TenantId, cfgl.BasicAuth, cfgl.BearerToken),
})`
$DIR/integration-tests/load/ocr/ocr_test.go: `.Plain(*cfg.Load.Rate, cfg.Load.TestDuration.Duration)`
$DIR/integration-tests/load/ocr/ocr_test.go: `.NewLokiConfig(cfgl.Endpoint, cfgl.TenantId, cfgl.BasicAuth, cfgl.BearerToken)`
$DIR/integration-tests/load/ocr/ocr_test.go: `.Run(true)`
$DIR/integration-tests/load/ocr/ocr_test.go: `.GetTestLogger(t)`
$DIR/integration-tests/load/ocr/ocr_test.go: `.GetConfig("Volume", tc.OCR)`
$DIR/integration-tests/load/ocr/ocr_test.go: `.ConnectRemote()`
$DIR/integration-tests/load/ocr/ocr_test.go: `.GetChainClient(config, *evmNetwork)`
$DIR/integration-tests/load/ocr/ocr_test.go: `.NewProfile()`
$DIR/integration-tests/load/ocr/ocr_test.go: `.Add(wasp.NewGenerator(&wasp.Config{
T: t,
GenName: "ocr",
LoadType: wasp.VU,
CallTimeout: cfg.Volume.VerificationTimeout.Duration,
Schedule: wasp.Plain(*cfg.Volume.Rate, cfg.Volume.TestDuration.Duration),
VU: NewVU(l, seth, *cfg.Volume.VURequestsPerUnit, cfg.Volume.RateLimitUnitDuration.Duration, lta, bootstrapNode, workerNodes, msClient),
Labels: CommonTestLabels,
LokiConfig: wasp.NewLokiConfig(cfgl.Endpoint, cfgl.TenantId, cfgl.BasicAuth, cfgl.BearerToken),
}))`
$DIR/integration-tests/load/ocr/ocr_test.go: `.NewGenerator(&wasp.Config{
T: t,
GenName: "ocr",
LoadType: wasp.VU,
CallTimeout: cfg.Volume.VerificationTimeout.Duration,
Schedule: wasp.Plain(*cfg.Volume.Rate, cfg.Volume.TestDuration.Duration),
VU: NewVU(l, seth, *cfg.Volume.VURequestsPerUnit, cfg.Volume.RateLimitUnitDuration.Duration, lta, bootstrapNode, workerNodes, msClient),
Labels: CommonTestLabels,
LokiConfig: wasp.NewLokiConfig(cfgl.Endpoint, cfgl.TenantId, cfgl.BasicAuth, cfgl.BearerToken),
})`
$DIR/integration-tests/load/ocr/ocr_test.go: `.Plain(*cfg.Volume.Rate, cfg.Volume.TestDuration.Duration)`
$DIR/integration-tests/load/ocr/ocr_test.go: `.NewLokiConfig(cfgl.Endpoint, cfgl.TenantId, cfgl.BasicAuth, cfgl.BearerToken)`
$DIR/integration-tests/load/ocr/ocr_test.go: `.Run(true)`
$DIR/integration-tests/load/vrfv2/vrfv2_test.go: `l.Info().
Str("Test Type", testType).
Str("Test Duration", vrfv2Config.Performance.TestDuration.Duration.Truncate(time.Second).String()).
Int64("RPS", *vrfv2Config.Performance.RPS).
Str("RateLimitUnitDuration", vrfv2Config.Performance.RateLimitUnitDuration.String()).
Uint16("RandomnessRequestCountPerRequest", *vrfv2Config.General.RandomnessRequestCountPerRequest).
Uint16("RandomnessRequestCountPerRequestDeviation", *vrfv2Config.General.RandomnessRequestCountPerRequestDeviation).
Bool("UseExistingEnv", *vrfv2Config.General.UseExistingEnv).
Msg("Performance Test Configuration")`
$DIR/integration-tests/load/vrfv2/vrfv2_test.go: `teardown(t, vrfContracts.VRFV2Consumers[0], lc, updatedLabels, testReporter, testType, &testConfig)`
$DIR/integration-tests/load/vrfv2/vrfv2_test.go: `l.Info().
Str("Network Name", sethClient.Cfg.Network.Name).
Msg("Network is a simulated network. Skipping fund return for Coordinator Subscriptions.")`
$DIR/integration-tests/load/vrfv2/vrfv2_test.go: `vrfv2.CancelSubsAndReturnFunds(testcontext.Get(t), vrfContracts, sethClient.MustGetRootKeyAddress().Hex(), subIDsForCancellingAfterTest, l)`
$DIR/integration-tests/load/vrfv2/vrfv2_test.go: `testEnv, vrfContracts, vrfKey, _, err = vrfv2.SetupVRFV2Universe(testcontext.Get(t), t, vrfEnvConfig, newEnvConfig, l)`
$DIR/integration-tests/load/vrfv2/vrfv2_test.go: `vrfcommon.LogSubDetails(l, subscription, strconv.FormatUint(subID, 10), vrfContracts.CoordinatorV2)`
$DIR/integration-tests/load/vrfv2/vrfv2_test.go: `subIDsForCancellingAfterTest = subIDs`
$DIR/integration-tests/load/vrfv2/vrfv2_test.go: `l.Debug().Int("Number of Subs", len(subIDs)).Msg("Subs involved in the test")`
$DIR/integration-tests/load/vrfv2/vrfv2_test.go: `vrfContracts.VRFV2Consumers = consumers`
$DIR/integration-tests/load/vrfv2/vrfv2_test.go: `err = vrfContracts.VRFV2Consumers[0].ResetMetrics()`
$DIR/integration-tests/load/vrfv2/vrfv2_test.go: `MonitorLoadStats(testcontext.Get(t), lc, vrfContracts.VRFV2Consumers[0], updatedLabels)`
$DIR/integration-tests/load/vrfv2/vrfv2_test.go: `singleFeedConfig.Schedule = wasp.Plain(
*vrfv2Config.Performance.RPS,
vrfv2Config.Performance.TestDuration.Duration,
)`
$DIR/integration-tests/load/vrfv2/vrfv2_test.go: `_, err = wasp.NewProfile().
Add(wasp.NewGenerator(singleFeedConfig)).
Run(true)`
$DIR/integration-tests/load/vrfv2/vrfv2_test.go: `wg.Add(1)`
$DIR/integration-tests/load/vrfv2/vrfv2_test.go: `wg.Wait()`
$DIR/integration-tests/load/vrfv2/vrfv2_test.go: `l.Info().
Interface("Request Count", requestCount).
Interface("Fulfilment Count", fulfilmentCount).
Msg("Final Request/Fulfilment Stats")`
$DIR/integration-tests/load/vrfv2/vrfv2_test.go: `l.Info().
Str("Test Type", testType).
Str("Test Duration", vrfv2Config.Performance.TestDuration.Duration.Truncate(time.Second).String()).
Int64("RPS", *vrfv2Config.Performance.RPS).
Str("RateLimitUnitDuration", vrfv2Config.Performance.RateLimitUnitDuration.String()).
Uint16("RandomnessRequestCountPerRequest", *vrfv2Config.General.RandomnessRequestCountPerRequest).
Uint16("RandomnessRequestCountPerRequestDeviation", *vrfv2Config.General.RandomnessRequestCountPerRequestDeviation).
Bool("UseExistingEnv", *vrfv2Config.General.UseExistingEnv).
Msg("Performance Test Configuration")`
$DIR/integration-tests/load/vrfv2/vrfv2_test.go: `teardown(t, vrfContracts.VRFV2Consumers[0], lc, updatedLabels, testReporter, testType, &testConfig)`
$DIR/integration-tests/load/vrfv2/vrfv2_test.go: `l.Info().
Str("Network Name", sethClient.Cfg.Network.Name).
Msg("Network is a simulated network. Skipping fund return for Coordinator Subscriptions.")`
$DIR/integration-tests/load/vrfv2/vrfv2_test.go: `vrfv2.CancelSubsAndReturnFunds(testcontext.Get(t), vrfContracts, sethClient.MustGetRootKeyAddress().Hex(), subIDsForCancellingAfterTest, l)`
$DIR/integration-tests/load/vrfv2/vrfv2_test.go: `testEnv, vrfContracts, vrfKey, _, err = vrfv2.SetupVRFV2Universe(testcontext.Get(t), t, vrfEnvConfig, newEnvConfig, l)`
$DIR/integration-tests/load/vrfv2/vrfv2_test.go: `configCopy.VRFv2.General.SubscriptionFundingAmountLink = ptr.Ptr(float64(0))`
$DIR/integration-tests/load/vrfv2/vrfv2_test.go: `vrfcommon.LogSubDetails(l, subscription, strconv.FormatUint(subID, 10), vrfContracts.CoordinatorV2)`
$DIR/integration-tests/load/vrfv2/vrfv2_test.go: `subIDsForCancellingAfterTest = underfundedSubIDs`
$DIR/integration-tests/load/vrfv2/vrfv2_test.go: `l.Debug().Int("Number of Subs", len(underfundedSubIDs)).Msg("Subs involved in the test")`
$DIR/integration-tests/load/vrfv2/vrfv2_test.go: `vrfContracts.VRFV2Consumers = consumers`
$DIR/integration-tests/load/vrfv2/vrfv2_test.go: `err = vrfContracts.VRFV2Consumers[0].ResetMetrics()`
$DIR/integration-tests/load/vrfv2/vrfv2_test.go: `MonitorLoadStats(testcontext.Get(t), lc, vrfContracts.VRFV2Consumers[0], updatedLabels)`
$DIR/integration-tests/load/vrfv2/vrfv2_test.go: `singleFeedConfig.Schedule = wasp.Plain(
*configCopy.VRFv2.Performance.BHSTestRPS,
configCopy.VRFv2.Performance.BHSTestDuration.Duration,
)`
$DIR/integration-tests/load/vrfv2/vrfv2_test.go: `_, err = wasp.NewProfile().
Add(wasp.NewGenerator(singleFeedConfig)).
Run(true)`
$DIR/integration-tests/load/vrfv2/vrfv2_test.go: `wgBlockNumberTobe.Add(1)`
$DIR/integration-tests/load/vrfv2/vrfv2_test.go: `_, err = actions.WaitForBlockNumberToBe(
latestBlockNumber+uint64(257),
sethClient,
&wgBlockNumberTobe,
configCopy.VRFv2.General.WaitFor256BlocksTimeout.Duration,
t,
l,
)`
$DIR/integration-tests/load/vrfv2/vrfv2_test.go: `wgBlockNumberTobe.Wait()`
$DIR/integration-tests/load/vrfv2/vrfv2_test.go: `subIDsString = append(subIDsString, underfundedSubIDs...)`
$DIR/integration-tests/load/vrfv2/vrfv2_test.go: `l.Info().
Float64("SubscriptionRefundingAmountLink", *configCopy.VRFv2.General.SubscriptionRefundingAmountLink).
Uints64("SubIDs", subIDsString).
Msg("Funding Subscriptions with Link and Native Tokens")`
$DIR/integration-tests/load/vrfv2/vrfv2_test.go: `err = vrfv2.FundSubscriptions(
big.NewFloat(*configCopy.VRFv2.General.SubscriptionRefundingAmountLink),
vrfContracts.LinkToken,
vrfContracts.CoordinatorV2,
underfundedSubIDs,
)`
$DIR/integration-tests/load/vrfv2/vrfv2_test.go: `wgAllRequestsFulfilled.Add(1)`
$DIR/integration-tests/load/vrfv2/vrfv2_test.go: `wgAllRequestsFulfilled.Wait()`
$DIR/integration-tests/load/vrfv2/vrfv2_test.go: `l.Info().
Interface("Request Count", requestCount).
Interface("Fulfilment Count", fulfilmentCount).
Msg("Final Request/Fulfilment Stats")`
$DIR/integration-tests/load/vrfv2/vrfv2_test.go: `.GetTestLogger(t)`
$DIR/integration-tests/load/vrfv2/vrfv2_test.go: `.GetConfigurationNameFromEnv()`
$DIR/integration-tests/load/vrfv2/vrfv2_test.go: `.GetConfig(testType, tc.VRFv2)`
$DIR/integration-tests/load/vrfv2/vrfv2_test.go: `.NewLokiConfig(cfgl.Endpoint, cfgl.TenantId, cfgl.BasicAuth, cfgl.BearerToken)`
$DIR/integration-tests/load/vrfv2/vrfv2_test.go: `.NewLokiClient(lokiConfig)`
$DIR/integration-tests/load/vrfv2/vrfv2_test.go: `.MustGetSelectedNetworkConfig(testConfig.GetNetworkConfig())`
$DIR/integration-tests/load/vrfv2/vrfv2_test.go: `.GetNetworkConfig()`
$DIR/integration-tests/load/vrfv2/vrfv2_test.go: `.GetChainClient(testConfig, network)`
$DIR/integration-tests/load/vrfv2/vrfv2_test.go: `.Info()`
$DIR/integration-tests/load/vrfv2/vrfv2_test.go: `.
Str("Test Type", testType)`
$DIR/integration-tests/load/vrfv2/vrfv2_test.go: `.
Str("Test Duration", vrfv2Config.Performance.TestDuration.Duration.Truncate(time.Second).String())`
$DIR/integration-tests/load/vrfv2/vrfv2_test.go: `.Performance.TestDuration.Duration.Truncate(time.Second)`
$DIR/integration-tests/load/vrfv2/vrfv2_test.go: `.String()`
$DIR/integration-tests/load/vrfv2/vrfv2_test.go: `.
Int64("RPS", *vrfv2Config.Performance.RPS)`
$DIR/integration-tests/load/vrfv2/vrfv2_test.go: `.
Str("RateLimitUnitDuration", vrfv2Config.Performance.RateLimitUnitDuration.String())`
$DIR/integration-tests/load/vrfv2/vrfv2_test.go: `.Performance.RateLimitUnitDuration.String()`
$DIR/integration-tests/load/vrfv2/vrfv2_test.go: `.
Uint16("RandomnessRequestCountPerRequest", *vrfv2Config.General.RandomnessRequestCountPerRequest)`
$DIR/integration-tests/load/vrfv2/vrfv2_test.go: `.
Uint16("RandomnessRequestCountPerRequestDeviation", *vrfv2Config.General.RandomnessRequestCountPerRequestDeviation)`
$DIR/integration-tests/load/vrfv2/vrfv2_test.go: `.
Bool("UseExistingEnv", *vrfv2Config.General.UseExistingEnv)`
$DIR/integration-tests/load/vrfv2/vrfv2_test.go: `.
Msg("Performance Test Configuration")`
$DIR/integration-tests/load/vrfv2/vrfv2_test.go: `.Cfg.IsSimulatedNetwork()`
$DIR/integration-tests/load/vrfv2/vrfv2_test.go: `.Info()`
$DIR/integration-tests/load/vrfv2/vrfv2_test.go: `.
Str("Network Name", sethClient.Cfg.Network.Name)`
$DIR/integration-tests/load/vrfv2/vrfv2_test.go: `.
Msg("Network is a simulated network. Skipping fund return for Coordinator Subscriptions.")`
$DIR/integration-tests/load/vrfv2/vrfv2_test.go: `.CancelSubsAndReturnFunds(testcontext.Get(t), vrfContracts, sethClient.MustGetRootKeyAddress().Hex(), subIDsForCancellingAfterTest, l)`
$DIR/integration-tests/load/vrfv2/vrfv2_test.go: `.Get(t)`
$DIR/integration-tests/load/vrfv2/vrfv2_test.go: `.MustGetRootKeyAddress()`
$DIR/integration-tests/load/vrfv2/vrfv2_test.go: `.Hex()`
$DIR/integration-tests/load/vrfv2/vrfv2_test.go: `.Cleanup(test_env.CleanupOpts{})`
$DIR/integration-tests/load/vrfv2/vrfv2_test.go: `.SetupVRFV2Universe(testcontext.Get(t), t, vrfEnvConfig, newEnvConfig, l)`
$DIR/integration-tests/load/vrfv2/vrfv2_test.go: `.Get(t)`
$DIR/integration-tests/load/vrfv2/vrfv2_test.go: `.SetupSubsAndConsumersForExistingEnv(
testEnv,
chainID,
vrfContracts.CoordinatorV2,
vrfContracts.LinkToken,
1,
*vrfv2Config.General.NumberOfSubToCreate,
testConfig,
l,
)`
$DIR/integration-tests/load/vrfv2/vrfv2_test.go: `.CoordinatorV2.GetSubscription(testcontext.Get(t), subID)`
$DIR/integration-tests/load/vrfv2/vrfv2_test.go: `.Get(t)`
$DIR/integration-tests/load/vrfv2/vrfv2_test.go: `.LogSubDetails(l, subscription, strconv.FormatUint(subID, 10), vrfContracts.CoordinatorV2)`
$DIR/integration-tests/load/vrfv2/vrfv2_test.go: `.FormatUint(subID, 10)`
$DIR/integration-tests/load/vrfv2/vrfv2_test.go: `.Debug()`
$DIR/integration-tests/load/vrfv2/vrfv2_test.go: `.Int("Number of Subs", len(subIDs))`
$DIR/integration-tests/load/vrfv2/vrfv2_test.go: `.Msg("Subs involved in the test")`
$DIR/integration-tests/load/vrfv2/vrfv2_test.go: `.ResetMetrics()`
$DIR/integration-tests/load/vrfv2/vrfv2_test.go: `.Get(t)`
$DIR/integration-tests/load/vrfv2/vrfv2_test.go: `.Plain(
*vrfv2Config.Performance.RPS,
vrfv2Config.Performance.TestDuration.Duration,
)`
$DIR/integration-tests/load/vrfv2/vrfv2_test.go: `.NewProfile()`
$DIR/integration-tests/load/vrfv2/vrfv2_test.go: `.
Add(wasp.NewGenerator(singleFeedConfig))`
$DIR/integration-tests/load/vrfv2/vrfv2_test.go: `.NewGenerator(singleFeedConfig)`
$DIR/integration-tests/load/vrfv2/vrfv2_test.go: `.
Run(true)`
$DIR/integration-tests/load/vrfv2/vrfv2_test.go: `.Add(1)`
$DIR/integration-tests/load/vrfv2/vrfv2_test.go: `.WaitForRequestCountEqualToFulfilmentCount(testcontext.Get(t), vrfContracts.VRFV2Consumers[0], 2*time.Minute, &wg)`
$DIR/integration-tests/load/vrfv2/vrfv2_test.go: `.Get(t)`
$DIR/integration-tests/load/vrfv2/vrfv2_test.go: `.Wait()`
$DIR/integration-tests/load/vrfv2/vrfv2_test.go: `.Info()`
$DIR/integration-tests/load/vrfv2/vrfv2_test.go: `.
Interface("Request Count", requestCount)`
$DIR/integration-tests/load/vrfv2/vrfv2_test.go: `.
Interface("Fulfilment Count", fulfilmentCount)`
$DIR/integration-tests/load/vrfv2/vrfv2_test.go: `.
Msg("Final Request/Fulfilment Stats")`
$DIR/integration-tests/load/vrfv2/vrfv2_test.go: `.GetTestLogger(t)`
$DIR/integration-tests/load/vrfv2/vrfv2_test.go: `.GetConfigurationNameFromEnv()`
$DIR/integration-tests/load/vrfv2/vrfv2_test.go: `.GetConfig(testType, tc.VRFv2)`
$DIR/integration-tests/load/vrfv2/vrfv2_test.go: `.NewLokiConfig(cfgl.Endpoint, cfgl.TenantId, cfgl.BasicAuth, cfgl.BearerToken)`
$DIR/integration-tests/load/vrfv2/vrfv2_test.go: `.NewLokiClient(lokiConfig)`
$DIR/integration-tests/load/vrfv2/vrfv2_test.go: `.Info()`
$DIR/integration-tests/load/vrfv2/vrfv2_test.go: `.
Str("Test Type", testType)`
$DIR/integration-tests/load/vrfv2/vrfv2_test.go: `.
Str("Test Duration", vrfv2Config.Performance.TestDuration.Duration.Truncate(time.Second).String())`
$DIR/integration-tests/load/vrfv2/vrfv2_test.go: `.Performance.TestDuration.Duration.Truncate(time.Second)`
$DIR/integration-tests/load/vrfv2/vrfv2_test.go: `.String()`
$DIR/integration-tests/load/vrfv2/vrfv2_test.go: `.
Int64("RPS", *vrfv2Config.Performance.RPS)`
$DIR/integration-tests/load/vrfv2/vrfv2_test.go: `.
Str("RateLimitUnitDuration", vrfv2Config.Performance.RateLimitUnitDuration.String())`
$DIR/integration-tests/load/vrfv2/vrfv2_test.go: `.Performance.RateLimitUnitDuration.String()`
$DIR/integration-tests/load/vrfv2/vrfv2_test.go: `.
Uint16("RandomnessRequestCountPerRequest", *vrfv2Config.General.RandomnessRequestCountPerRequest)`
$DIR/integration-tests/load/vrfv2/vrfv2_test.go: `.
Uint16("RandomnessRequestCountPerRequestDeviation", *vrfv2Config.General.RandomnessRequestCountPerRequestDeviation)`
$DIR/integration-tests/load/vrfv2/vrfv2_test.go: `.
Bool("UseExistingEnv", *vrfv2Config.General.UseExistingEnv)`
$DIR/integration-tests/load/vrfv2/vrfv2_test.go: `.
Msg("Performance Test Configuration")`
$DIR/integration-tests/load/vrfv2/vrfv2_test.go: `.MustGetSelectedNetworkConfig(testConfig.GetNetworkConfig())`
$DIR/integration-tests/load/vrfv2/vrfv2_test.go: `.GetNetworkConfig()`
$DIR/integration-tests/load/vrfv2/vrfv2_test.go: `.GetChainClient(testConfig, network)`
$DIR/integration-tests/load/vrfv2/vrfv2_test.go: `.Cfg.IsSimulatedNetwork()`
$DIR/integration-tests/load/vrfv2/vrfv2_test.go: `.Info()`
$DIR/integration-tests/load/vrfv2/vrfv2_test.go: `.
Str("Network Name", sethClient.Cfg.Network.Name)`
$DIR/integration-tests/load/vrfv2/vrfv2_test.go: `.
Msg("Network is a simulated network. Skipping fund return for Coordinator Subscriptions.")`
$DIR/integration-tests/load/vrfv2/vrfv2_test.go: `.CancelSubsAndReturnFunds(testcontext.Get(t), vrfContracts, sethClient.MustGetRootKeyAddress().Hex(), subIDsForCancellingAfterTest, l)`
$DIR/integration-tests/load/vrfv2/vrfv2_test.go: `.Get(t)`
$DIR/integration-tests/load/vrfv2/vrfv2_test.go: `.MustGetRootKeyAddress()`
$DIR/integration-tests/load/vrfv2/vrfv2_test.go: `.Hex()`
$DIR/integration-tests/load/vrfv2/vrfv2_test.go: `.Cleanup(test_env.CleanupOpts{})`
$DIR/integration-tests/load/vrfv2/vrfv2_test.go: `.SetupVRFV2Universe(testcontext.Get(t), t, vrfEnvConfig, newEnvConfig, l)`
$DIR/integration-tests/load/vrfv2/vrfv2_test.go: `.Get(t)`
$DIR/integration-tests/load/vrfv2/vrfv2_test.go: `.MustCopy()`
$DIR/integration-tests/load/vrfv2/vrfv2_test.go: `.Ptr(float64(0))`
$DIR/integration-tests/load/vrfv2/vrfv2_test.go: `.SetupSubsAndConsumersForExistingEnv(
testEnv,
chainID,
vrfContracts.CoordinatorV2,
vrfContracts.LinkToken,
1,
*vrfv2Config.General.NumberOfSubToCreate,
configCopy,
l,
)`
$DIR/integration-tests/load/vrfv2/vrfv2_test.go: `.CoordinatorV2.GetSubscription(testcontext.Get(t), subID)`
$DIR/integration-tests/load/vrfv2/vrfv2_test.go: `.Get(t)`
$DIR/integration-tests/load/vrfv2/vrfv2_test.go: `.LogSubDetails(l, subscription, strconv.FormatUint(subID, 10), vrfContracts.CoordinatorV2)`
$DIR/integration-tests/load/vrfv2/vrfv2_test.go: `.FormatUint(subID, 10)`
$DIR/integration-tests/load/vrfv2/vrfv2_test.go: `.Debug()`
$DIR/integration-tests/load/vrfv2/vrfv2_test.go: `.Int("Number of Subs", len(underfundedSubIDs))`
$DIR/integration-tests/load/vrfv2/vrfv2_test.go: `.Msg("Subs involved in the test")`
$DIR/integration-tests/load/vrfv2/vrfv2_test.go: `.ResetMetrics()`
$DIR/integration-tests/load/vrfv2/vrfv2_test.go: `.Get(t)`
$DIR/integration-tests/load/vrfv2/vrfv2_test.go: `.Plain(
*configCopy.VRFv2.Performance.BHSTestRPS,
configCopy.VRFv2.Performance.BHSTestDuration.Duration,
)`
$DIR/integration-tests/load/vrfv2/vrfv2_test.go: `.NewProfile()`
$DIR/integration-tests/load/vrfv2/vrfv2_test.go: `.
Add(wasp.NewGenerator(singleFeedConfig))`
$DIR/integration-tests/load/vrfv2/vrfv2_test.go: `.NewGenerator(singleFeedConfig)`
$DIR/integration-tests/load/vrfv2/vrfv2_test.go: `.
Run(true)`
$DIR/integration-tests/load/vrfv2/vrfv2_test.go: `.Add(1)`
$DIR/integration-tests/load/vrfv2/vrfv2_test.go: `.Client.BlockNumber(testcontext.Get(t))`
$DIR/integration-tests/load/vrfv2/vrfv2_test.go: `.Get(t)`
$DIR/integration-tests/load/vrfv2/vrfv2_test.go: `.WaitForBlockNumberToBe(
latestBlockNumber+uint64(257),
sethClient,
&wgBlockNumberTobe,
configCopy.VRFv2.General.WaitFor256BlocksTimeout.Duration,
t,
l,
)`
$DIR/integration-tests/load/vrfv2/vrfv2_test.go: `.Wait()`
$DIR/integration-tests/load/vrfv2/vrfv2_test.go: `.GetLoadTestMetrics(testcontext.Get(t))`
$DIR/integration-tests/load/vrfv2/vrfv2_test.go: `.Get(t)`
$DIR/integration-tests/load/vrfv2/vrfv2_test.go: `.Info()`
$DIR/integration-tests/load/vrfv2/vrfv2_test.go: `.
Float64("SubscriptionRefundingAmountLink", *configCopy.VRFv2.General.SubscriptionRefundingAmountLink)`
$DIR/integration-tests/load/vrfv2/vrfv2_test.go: `.
Uints64("SubIDs", subIDsString)`
$DIR/integration-tests/load/vrfv2/vrfv2_test.go: `.
Msg("Funding Subscriptions with Link and Native Tokens")`
$DIR/integration-tests/load/vrfv2/vrfv2_test.go: `.FundSubscriptions(
big.NewFloat(*configCopy.VRFv2.General.SubscriptionRefundingAmountLink),
vrfContracts.LinkToken,
vrfContracts.CoordinatorV2,
underfundedSubIDs,
)`
$DIR/integration-tests/load/vrfv2/vrfv2_test.go: `.NewFloat(*configCopy.VRFv2.General.SubscriptionRefundingAmountLink)`
$DIR/integration-tests/load/vrfv2/vrfv2_test.go: `.Add(1)`
$DIR/integration-tests/load/vrfv2/vrfv2_test.go: `.WaitForRequestCountEqualToFulfilmentCount(testcontext.Get(t), vrfContracts.VRFV2Consumers[0], 2*time.Minute, &wgAllRequestsFulfilled)`
$DIR/integration-tests/load/vrfv2/vrfv2_test.go: `.Get(t)`
$DIR/integration-tests/load/vrfv2/vrfv2_test.go: `.Wait()`
$DIR/integration-tests/load/vrfv2/vrfv2_test.go: `.Info()`
$DIR/integration-tests/load/vrfv2/vrfv2_test.go: `.
Interface("Request Count", requestCount)`
$DIR/integration-tests/load/vrfv2/vrfv2_test.go: `.
Interface("Fulfilment Count", fulfilmentCount)`
$DIR/integration-tests/load/vrfv2/vrfv2_test.go: `.
Msg("Final Request/Fulfilment Stats")`
$DIR/integration-tests/load/vrfv2plus/vrfv2plus_test.go: `l.Info().
Str("Test Type", testType).
Str("Test Duration", vrfv2PlusConfig.Performance.TestDuration.Duration.Truncate(time.Second).String()).
Int64("RPS", *vrfv2PlusConfig.Performance.RPS).
Str("RateLimitUnitDuration", vrfv2PlusConfig.Performance.RateLimitUnitDuration.String()).
Uint16("RandomnessRequestCountPerRequest", *vrfv2PlusConfig.General.RandomnessRequestCountPerRequest).
Uint16("RandomnessRequestCountPerRequestDeviation", *vrfv2PlusConfig.General.RandomnessRequestCountPerRequestDeviation).
Bool("UseExistingEnv", *vrfv2PlusConfig.General.UseExistingEnv).
Msg("Performance Test Configuration")`
$DIR/integration-tests/load/vrfv2plus/vrfv2plus_test.go: `teardown(t, vrfContracts.VRFV2PlusConsumer[0], lc, updatedLabels, testReporter, testType, &testConfig)`
$DIR/integration-tests/load/vrfv2plus/vrfv2plus_test.go: `l.Info().
Str("Network Name", sethClient.Cfg.Network.Name).
Msg("Network is a simulated network. Skipping fund return for Coordinator Subscriptions.")`
$DIR/integration-tests/load/vrfv2plus/vrfv2plus_test.go: `vrfv2plus.CancelSubsAndReturnFunds(testcontext.Get(t), vrfContracts, sethClient.MustGetRootKeyAddress().Hex(), subIDsForCancellingAfterTest, l)`
$DIR/integration-tests/load/vrfv2plus/vrfv2plus_test.go: `testEnv, vrfContracts, vrfKey, _, err = vrfv2plus.SetupVRFV2PlusUniverse(testcontext.Get(t), t, vrfEnvConfig, newEnvConfig, l)`
$DIR/integration-tests/load/vrfv2plus/vrfv2plus_test.go: `vrfcommon.LogSubDetails(l, subscription, subID.String(), vrfContracts.CoordinatorV2Plus)`
$DIR/integration-tests/load/vrfv2plus/vrfv2plus_test.go: `subIDsForCancellingAfterTest = subIDs`
$DIR/integration-tests/load/vrfv2plus/vrfv2plus_test.go: `l.Info().Int("Number of Subs", len(subIDs)).Msg("Subs involved in the test")`
$DIR/integration-tests/load/vrfv2plus/vrfv2plus_test.go: `vrfContracts.VRFV2PlusConsumer = consumers`
$DIR/integration-tests/load/vrfv2plus/vrfv2plus_test.go: `err = consumer.ResetMetrics()`
$DIR/integration-tests/load/vrfv2plus/vrfv2plus_test.go: `MonitorLoadStats(testcontext.Get(t), lc, consumer, updatedLabels)`
$DIR/integration-tests/load/vrfv2plus/vrfv2plus_test.go: `singleFeedConfig.Schedule = wasp.Plain(
*vrfv2PlusConfig.Performance.RPS,
vrfv2PlusConfig.Performance.TestDuration.Duration,
)`
$DIR/integration-tests/load/vrfv2plus/vrfv2plus_test.go: `_, err = wasp.NewProfile().
Add(wasp.NewGenerator(singleFeedConfig)).
Run(true)`
$DIR/integration-tests/load/vrfv2plus/vrfv2plus_test.go: `wg.Add(1)`
$DIR/integration-tests/load/vrfv2plus/vrfv2plus_test.go: `wg.Wait()`
$DIR/integration-tests/load/vrfv2plus/vrfv2plus_test.go: `l.Info().
Interface("Request Count", requestCount).
Interface("Fulfilment Count", fulfilmentCount).
Msg("Final Request/Fulfilment Stats")`
$DIR/integration-tests/load/vrfv2plus/vrfv2plus_test.go: `l.Info().
Str("Test Type", testType).
Str("Test Duration", vrfv2PlusConfig.Performance.TestDuration.Duration.Truncate(time.Second).String()).
Int64("RPS", *vrfv2PlusConfig.Performance.RPS).
Str("RateLimitUnitDuration", vrfv2PlusConfig.Performance.RateLimitUnitDuration.String()).
Uint16("RandomnessRequestCountPerRequest", *vrfv2PlusConfig.General.RandomnessRequestCountPerRequest).
Uint16("RandomnessRequestCountPerRequestDeviation", *vrfv2PlusConfig.General.RandomnessRequestCountPerRequestDeviation).
Bool("UseExistingEnv", *vrfv2PlusConfig.General.UseExistingEnv).
Msg("Performance Test Configuration")`
$DIR/integration-tests/load/vrfv2plus/vrfv2plus_test.go: `teardown(t, vrfContracts.VRFV2PlusConsumer[0], lc, updatedLabels, testReporter, testType, &testConfig)`
$DIR/integration-tests/load/vrfv2plus/vrfv2plus_test.go: `l.Info().
Str("Network Name", sethClient.Cfg.Network.Name).
Msg("Network is a simulated network. Skipping fund return for Coordinator Subscriptions.")`
$DIR/integration-tests/load/vrfv2plus/vrfv2plus_test.go: `vrfv2plus.CancelSubsAndReturnFunds(testcontext.Get(t), vrfContracts, sethClient.MustGetRootKeyAddress().Hex(), subIDsForCancellingAfterTest, l)`
$DIR/integration-tests/load/vrfv2plus/vrfv2plus_test.go: `testEnv, vrfContracts, vrfKey, _, err = vrfv2plus.SetupVRFV2PlusUniverse(testcontext.Get(t), t, vrfEnvConfig, newEnvConfig, l)`
$DIR/integration-tests/load/vrfv2plus/vrfv2plus_test.go: `configCopy.VRFv2Plus.General.SubscriptionFundingAmountLink = ptr.Ptr(float64(0))`
$DIR/integration-tests/load/vrfv2plus/vrfv2plus_test.go: `configCopy.VRFv2Plus.General.SubscriptionFundingAmountNative = ptr.Ptr(float64(0))`
$DIR/integration-tests/load/vrfv2plus/vrfv2plus_test.go: `vrfcommon.LogSubDetails(l, subscription, subID.String(), vrfContracts.CoordinatorV2Plus)`
$DIR/integration-tests/load/vrfv2plus/vrfv2plus_test.go: `subIDsForCancellingAfterTest = underfundedSubIDs`
$DIR/integration-tests/load/vrfv2plus/vrfv2plus_test.go: `l.Debug().Int("Number of Subs", len(underfundedSubIDs)).Msg("Subs involved in the test")`
$DIR/integration-tests/load/vrfv2plus/vrfv2plus_test.go: `vrfContracts.VRFV2PlusConsumer = consumers`
$DIR/integration-tests/load/vrfv2plus/vrfv2plus_test.go: `err = consumer.ResetMetrics()`
$DIR/integration-tests/load/vrfv2plus/vrfv2plus_test.go: `MonitorLoadStats(testcontext.Get(t), lc, consumer, updatedLabels)`
$DIR/integration-tests/load/vrfv2plus/vrfv2plus_test.go: `singleFeedConfig.Schedule = wasp.Plain(
*configCopy.VRFv2Plus.Performance.BHSTestRPS,
configCopy.VRFv2Plus.Performance.BHSTestDuration.Duration,
)`
$DIR/integration-tests/load/vrfv2plus/vrfv2plus_test.go: `_, err = wasp.NewProfile().
Add(wasp.NewGenerator(singleFeedConfig)).
Run(true)`
$DIR/integration-tests/load/vrfv2plus/vrfv2plus_test.go: `wgBlockNumberTobe.Add(1)`
$DIR/integration-tests/load/vrfv2plus/vrfv2plus_test.go: `_, err = actions.WaitForBlockNumberToBe(
latestBlockNumber+uint64(257),
sethClient,
&wgBlockNumberTobe,
configCopy.VRFv2Plus.General.WaitFor256BlocksTimeout.Duration,
t,
l,
)`
$DIR/integration-tests/load/vrfv2plus/vrfv2plus_test.go: `wgBlockNumberTobe.Wait()`
$DIR/integration-tests/load/vrfv2plus/vrfv2plus_test.go: `subIDsString = append(subIDsString, subID.String())`
$DIR/integration-tests/load/vrfv2plus/vrfv2plus_test.go: `l.Info().
Float64("SubscriptionRefundingAmountNative", *configCopy.VRFv2Plus.General.SubscriptionRefundingAmountNative).
Float64("SubscriptionRefundingAmountLink", *configCopy.VRFv2Plus.General.SubscriptionRefundingAmountLink).
Strs("SubIDs", subIDsString).
Msg("Funding Subscriptions with Link and Native Tokens")`
$DIR/integration-tests/load/vrfv2plus/vrfv2plus_test.go: `err = vrfv2plus.FundSubscriptions(
big.NewFloat(*configCopy.VRFv2Plus.General.SubscriptionRefundingAmountNative),
big.NewFloat(*configCopy.VRFv2Plus.General.SubscriptionRefundingAmountLink),
vrfContracts.LinkToken,
vrfContracts.CoordinatorV2Plus,
underfundedSubIDs,
)`
$DIR/integration-tests/load/vrfv2plus/vrfv2plus_test.go: `wgAllRequestsFulfilled.Add(1)`
$DIR/integration-tests/load/vrfv2plus/vrfv2plus_test.go: `wgAllRequestsFulfilled.Wait()`
$DIR/integration-tests/load/vrfv2plus/vrfv2plus_test.go: `l.Info().
Interface("Request Count", requestCount).
Interface("Fulfilment Count", fulfilmentCount).
Msg("Final Request/Fulfilment Stats")`
$DIR/integration-tests/load/vrfv2plus/vrfv2plus_test.go: `.GetTestLogger(t)`
$DIR/integration-tests/load/vrfv2plus/vrfv2plus_test.go: `.GetConfigurationNameFromEnv()`
$DIR/integration-tests/load/vrfv2plus/vrfv2plus_test.go: `.GetConfig(testType, tc.VRFv2Plus)`
$DIR/integration-tests/load/vrfv2plus/vrfv2plus_test.go: `.NewLokiConfig(cfgl.Endpoint, cfgl.TenantId, cfgl.BasicAuth, cfgl.BearerToken)`
$DIR/integration-tests/load/vrfv2plus/vrfv2plus_test.go: `.NewLokiClient(lokiConfig)`
$DIR/integration-tests/load/vrfv2plus/vrfv2plus_test.go: `.MustGetSelectedNetworkConfig(testConfig.GetNetworkConfig())`
$DIR/integration-tests/load/vrfv2plus/vrfv2plus_test.go: `.GetNetworkConfig()`
$DIR/integration-tests/load/vrfv2plus/vrfv2plus_test.go: `.GetChainClient(testConfig, network)`
$DIR/integration-tests/load/vrfv2plus/vrfv2plus_test.go: `.Info()`
$DIR/integration-tests/load/vrfv2plus/vrfv2plus_test.go: `.
Str("Test Type", testType)`
$DIR/integration-tests/load/vrfv2plus/vrfv2plus_test.go: `.
Str("Test Duration", vrfv2PlusConfig.Performance.TestDuration.Duration.Truncate(time.Second).String())`
$DIR/integration-tests/load/vrfv2plus/vrfv2plus_test.go: `.Performance.TestDuration.Duration.Truncate(time.Second)`
$DIR/integration-tests/load/vrfv2plus/vrfv2plus_test.go: `.String()`
$DIR/integration-tests/load/vrfv2plus/vrfv2plus_test.go: `.
Int64("RPS", *vrfv2PlusConfig.Performance.RPS)`
$DIR/integration-tests/load/vrfv2plus/vrfv2plus_test.go: `.
Str("RateLimitUnitDuration", vrfv2PlusConfig.Performance.RateLimitUnitDuration.String())`
$DIR/integration-tests/load/vrfv2plus/vrfv2plus_test.go: `.Performance.RateLimitUnitDuration.String()`
$DIR/integration-tests/load/vrfv2plus/vrfv2plus_test.go: `.
Uint16("RandomnessRequestCountPerRequest", *vrfv2PlusConfig.General.RandomnessRequestCountPerRequest)`
$DIR/integration-tests/load/vrfv2plus/vrfv2plus_test.go: `.
Uint16("RandomnessRequestCountPerRequestDeviation", *vrfv2PlusConfig.General.RandomnessRequestCountPerRequestDeviation)`
$DIR/integration-tests/load/vrfv2plus/vrfv2plus_test.go: `.
Bool("UseExistingEnv", *vrfv2PlusConfig.General.UseExistingEnv)`
$DIR/integration-tests/load/vrfv2plus/vrfv2plus_test.go: `.
Msg("Performance Test Configuration")`
$DIR/integration-tests/load/vrfv2plus/vrfv2plus_test.go: `.Cfg.IsSimulatedNetwork()`
$DIR/integration-tests/load/vrfv2plus/vrfv2plus_test.go: `.Info()`
$DIR/integration-tests/load/vrfv2plus/vrfv2plus_test.go: `.
Str("Network Name", sethClient.Cfg.Network.Name)`
$DIR/integration-tests/load/vrfv2plus/vrfv2plus_test.go: `.
Msg("Network is a simulated network. Skipping fund return for Coordinator Subscriptions.")`
$DIR/integration-tests/load/vrfv2plus/vrfv2plus_test.go: `.CancelSubsAndReturnFunds(testcontext.Get(t), vrfContracts, sethClient.MustGetRootKeyAddress().Hex(), subIDsForCancellingAfterTest, l)`
$DIR/integration-tests/load/vrfv2plus/vrfv2plus_test.go: `.Get(t)`
$DIR/integration-tests/load/vrfv2plus/vrfv2plus_test.go: `.MustGetRootKeyAddress()`
$DIR/integration-tests/load/vrfv2plus/vrfv2plus_test.go: `.Hex()`
$DIR/integration-tests/load/vrfv2plus/vrfv2plus_test.go: `.Cleanup(test_env.CleanupOpts{})`
$DIR/integration-tests/load/vrfv2plus/vrfv2plus_test.go: `.SetupVRFV2PlusUniverse(testcontext.Get(t), t, vrfEnvConfig, newEnvConfig, l)`
$DIR/integration-tests/load/vrfv2plus/vrfv2plus_test.go: `.Get(t)`
$DIR/integration-tests/load/vrfv2plus/vrfv2plus_test.go: `.SetupSubsAndConsumersForExistingEnv(
testcontext.Get(t),
testEnv,
chainID,
vrfContracts.CoordinatorV2Plus,
vrfContracts.LinkToken,
1,
*vrfv2PlusConfig.General.NumberOfSubToCreate,
testConfig,
l,
)`
$DIR/integration-tests/load/vrfv2plus/vrfv2plus_test.go: `.Get(t)`
$DIR/integration-tests/load/vrfv2plus/vrfv2plus_test.go: `.CoordinatorV2Plus.GetSubscription(testcontext.Get(t), subID)`
$DIR/integration-tests/load/vrfv2plus/vrfv2plus_test.go: `.Get(t)`
$DIR/integration-tests/load/vrfv2plus/vrfv2plus_test.go: `.LogSubDetails(l, subscription, subID.String(), vrfContracts.CoordinatorV2Plus)`
$DIR/integration-tests/load/vrfv2plus/vrfv2plus_test.go: `.String()`
$DIR/integration-tests/load/vrfv2plus/vrfv2plus_test.go: `.Info()`
$DIR/integration-tests/load/vrfv2plus/vrfv2plus_test.go: `.Int("Number of Subs", len(subIDs))`
$DIR/integration-tests/load/vrfv2plus/vrfv2plus_test.go: `.Msg("Subs involved in the test")`
$DIR/integration-tests/load/vrfv2plus/vrfv2plus_test.go: `.ResetMetrics()`
$DIR/integration-tests/load/vrfv2plus/vrfv2plus_test.go: `.Get(t)`
$DIR/integration-tests/load/vrfv2plus/vrfv2plus_test.go: `.NewLokiConfig(cfgl.Endpoint, cfgl.TenantId, cfgl.BasicAuth, cfgl.BearerToken)`
$DIR/integration-tests/load/vrfv2plus/vrfv2plus_test.go: `.Plain(
*vrfv2PlusConfig.Performance.RPS,
vrfv2PlusConfig.Performance.TestDuration.Duration,
)`
$DIR/integration-tests/load/vrfv2plus/vrfv2plus_test.go: `.NewProfile()`
$DIR/integration-tests/load/vrfv2plus/vrfv2plus_test.go: `.
Add(wasp.NewGenerator(singleFeedConfig))`
$DIR/integration-tests/load/vrfv2plus/vrfv2plus_test.go: `.NewGenerator(singleFeedConfig)`
$DIR/integration-tests/load/vrfv2plus/vrfv2plus_test.go: `.
Run(true)`
$DIR/integration-tests/load/vrfv2plus/vrfv2plus_test.go: `.Add(1)`
$DIR/integration-tests/load/vrfv2plus/vrfv2plus_test.go: `.WaitForRequestCountEqualToFulfilmentCount(testcontext.Get(t), consumer, 2*time.Minute, &wg)`
$DIR/integration-tests/load/vrfv2plus/vrfv2plus_test.go: `.Get(t)`
$DIR/integration-tests/load/vrfv2plus/vrfv2plus_test.go: `.Wait()`
$DIR/integration-tests/load/vrfv2plus/vrfv2plus_test.go: `.Info()`
$DIR/integration-tests/load/vrfv2plus/vrfv2plus_test.go: `.
Interface("Request Count", requestCount)`
$DIR/integration-tests/load/vrfv2plus/vrfv2plus_test.go: `.
Interface("Fulfilment Count", fulfilmentCount)`
$DIR/integration-tests/load/vrfv2plus/vrfv2plus_test.go: `.
Msg("Final Request/Fulfilment Stats")`
$DIR/integration-tests/load/vrfv2plus/vrfv2plus_test.go: `.GetTestLogger(t)`
$DIR/integration-tests/load/vrfv2plus/vrfv2plus_test.go: `.GetConfigurationNameFromEnv()`
$DIR/integration-tests/load/vrfv2plus/vrfv2plus_test.go: `.GetConfig(testType, tc.VRFv2Plus)`
$DIR/integration-tests/load/vrfv2plus/vrfv2plus_test.go: `.NewLokiConfig(cfgl.Endpoint, cfgl.TenantId, cfgl.BasicAuth, cfgl.BearerToken)`
$DIR/integration-tests/load/vrfv2plus/vrfv2plus_test.go: `.NewLokiClient(lokiConfig)`
$DIR/integration-tests/load/vrfv2plus/vrfv2plus_test.go: `.Info()`
$DIR/integration-tests/load/vrfv2plus/vrfv2plus_test.go: `.
Str("Test Type", testType)`
$DIR/integration-tests/load/vrfv2plus/vrfv2plus_test.go: `.
Str("Test Duration", vrfv2PlusConfig.Performance.TestDuration.Duration.Truncate(time.Second).String())`
$DIR/integration-tests/load/vrfv2plus/vrfv2plus_test.go: `.Performance.TestDuration.Duration.Truncate(time.Second)`
$DIR/integration-tests/load/vrfv2plus/vrfv2plus_test.go: `.String()`
$DIR/integration-tests/load/vrfv2plus/vrfv2plus_test.go: `.
Int64("RPS", *vrfv2PlusConfig.Performance.RPS)`
$DIR/integration-tests/load/vrfv2plus/vrfv2plus_test.go: `.
Str("RateLimitUnitDuration", vrfv2PlusConfig.Performance.RateLimitUnitDuration.String())`
$DIR/integration-tests/load/vrfv2plus/vrfv2plus_test.go: `.Performance.RateLimitUnitDuration.String()`
$DIR/integration-tests/load/vrfv2plus/vrfv2plus_test.go: `.
Uint16("RandomnessRequestCountPerRequest", *vrfv2PlusConfig.General.RandomnessRequestCountPerRequest)`
$DIR/integration-tests/load/vrfv2plus/vrfv2plus_test.go: `.
Uint16("RandomnessRequestCountPerRequestDeviation", *vrfv2PlusConfig.General.RandomnessRequestCountPerRequestDeviation)`
$DIR/integration-tests/load/vrfv2plus/vrfv2plus_test.go: `.
Bool("UseExistingEnv", *vrfv2PlusConfig.General.UseExistingEnv)`
$DIR/integration-tests/load/vrfv2plus/vrfv2plus_test.go: `.
Msg("Performance Test Configuration")`
$DIR/integration-tests/load/vrfv2plus/vrfv2plus_test.go: `.MustGetSelectedNetworkConfig(testConfig.GetNetworkConfig())`
$DIR/integration-tests/load/vrfv2plus/vrfv2plus_test.go: `.GetNetworkConfig()`
$DIR/integration-tests/load/vrfv2plus/vrfv2plus_test.go: `.GetChainClient(testConfig, network)`
$DIR/integration-tests/load/vrfv2plus/vrfv2plus_test.go: `.Cfg.IsSimulatedNetwork()`
$DIR/integration-tests/load/vrfv2plus/vrfv2plus_test.go: `.Info()`
$DIR/integration-tests/load/vrfv2plus/vrfv2plus_test.go: `.
Str("Network Name", sethClient.Cfg.Network.Name)`
$DIR/integration-tests/load/vrfv2plus/vrfv2plus_test.go: `.
Msg("Network is a simulated network. Skipping fund return for Coordinator Subscriptions.")`
$DIR/integration-tests/load/vrfv2plus/vrfv2plus_test.go: `.CancelSubsAndReturnFunds(testcontext.Get(t), vrfContracts, sethClient.MustGetRootKeyAddress().Hex(), subIDsForCancellingAfterTest, l)`
$DIR/integration-tests/load/vrfv2plus/vrfv2plus_test.go: `.Get(t)`
$DIR/integration-tests/load/vrfv2plus/vrfv2plus_test.go: `.MustGetRootKeyAddress()`
$DIR/integration-tests/load/vrfv2plus/vrfv2plus_test.go: `.Hex()`
$DIR/integration-tests/load/vrfv2plus/vrfv2plus_test.go: `.Cleanup(test_env.CleanupOpts{})`
$DIR/integration-tests/load/vrfv2plus/vrfv2plus_test.go: `.SetupVRFV2PlusUniverse(testcontext.Get(t), t, vrfEnvConfig, newEnvConfig, l)`
$DIR/integration-tests/load/vrfv2plus/vrfv2plus_test.go: `.Get(t)`
$DIR/integration-tests/load/vrfv2plus/vrfv2plus_test.go: `.MustCopy()`
$DIR/integration-tests/load/vrfv2plus/vrfv2plus_test.go: `.Ptr(float64(0))`
$DIR/integration-tests/load/vrfv2plus/vrfv2plus_test.go: `.Ptr(float64(0))`
$DIR/integration-tests/load/vrfv2plus/vrfv2plus_test.go: `.SetupSubsAndConsumersForExistingEnv(
testcontext.Get(t),
testEnv,
chainID,
vrfContracts.CoordinatorV2Plus,
vrfContracts.LinkToken,
1,
*vrfv2PlusConfig.General.NumberOfSubToCreate,
configCopy,
l,
)`
$DIR/integration-tests/load/vrfv2plus/vrfv2plus_test.go: `.Get(t)`
$DIR/integration-tests/load/vrfv2plus/vrfv2plus_test.go: `.CoordinatorV2Plus.GetSubscription(testcontext.Get(t), subID)`
$DIR/integration-tests/load/vrfv2plus/vrfv2plus_test.go: `.Get(t)`
$DIR/integration-tests/load/vrfv2plus/vrfv2plus_test.go: `.LogSubDetails(l, subscription, subID.String(), vrfContracts.CoordinatorV2Plus)`
$DIR/integration-tests/load/vrfv2plus/vrfv2plus_test.go: `.String()`
$DIR/integration-tests/load/vrfv2plus/vrfv2plus_test.go: `.Debug()`
$DIR/integration-tests/load/vrfv2plus/vrfv2plus_test.go: `.Int("Number of Subs", len(underfundedSubIDs))`
$DIR/integration-tests/load/vrfv2plus/vrfv2plus_test.go: `.Msg("Subs involved in the test")`
$DIR/integration-tests/load/vrfv2plus/vrfv2plus_test.go: `.ResetMetrics()`
$DIR/integration-tests/load/vrfv2plus/vrfv2plus_test.go: `.Get(t)`
$DIR/integration-tests/load/vrfv2plus/vrfv2plus_test.go: `.Plain(
*configCopy.VRFv2Plus.Performance.BHSTestRPS,
configCopy.VRFv2Plus.Performance.BHSTestDuration.Duration,
)`
$DIR/integration-tests/load/vrfv2plus/vrfv2plus_test.go: `.NewProfile()`
$DIR/integration-tests/load/vrfv2plus/vrfv2plus_test.go: `.
Add(wasp.NewGenerator(singleFeedConfig))`
$DIR/integration-tests/load/vrfv2plus/vrfv2plus_test.go: `.NewGenerator(singleFeedConfig)`
$DIR/integration-tests/load/vrfv2plus/vrfv2plus_test.go: `.
Run(true)`
$DIR/integration-tests/load/vrfv2plus/vrfv2plus_test.go: `.Add(1)`
$DIR/integration-tests/load/vrfv2plus/vrfv2plus_test.go: `.GetSethClient(chainID)`
$DIR/integration-tests/load/vrfv2plus/vrfv2plus_test.go: `.Client.BlockNumber(testcontext.Get(t))`
$DIR/integration-tests/load/vrfv2plus/vrfv2plus_test.go: `.Get(t)`
$DIR/integration-tests/load/vrfv2plus/vrfv2plus_test.go: `.WaitForBlockNumberToBe(
latestBlockNumber+uint64(257),
sethClient,
&wgBlockNumberTobe,
configCopy.VRFv2Plus.General.WaitFor256BlocksTimeout.Duration,
t,
l,
)`
$DIR/integration-tests/load/vrfv2plus/vrfv2plus_test.go: `.Wait()`
$DIR/integration-tests/load/vrfv2plus/vrfv2plus_test.go: `.GetLoadTestMetrics(testcontext.Get(t))`
$DIR/integration-tests/load/vrfv2plus/vrfv2plus_test.go: `.Get(t)`
$DIR/integration-tests/load/vrfv2plus/vrfv2plus_test.go: `.String()`
$DIR/integration-tests/load/vrfv2plus/vrfv2plus_test.go: `.Info()`
$DIR/integration-tests/load/vrfv2plus/vrfv2plus_test.go: `.
Float64("SubscriptionRefundingAmountNative", *configCopy.VRFv2Plus.General.SubscriptionRefundingAmountNative)`
$DIR/integration-tests/load/vrfv2plus/vrfv2plus_test.go: `.
Float64("SubscriptionRefundingAmountLink", *configCopy.VRFv2Plus.General.SubscriptionRefundingAmountLink)`
$DIR/integration-tests/load/vrfv2plus/vrfv2plus_test.go: `.
Strs("SubIDs", subIDsString)`
$DIR/integration-tests/load/vrfv2plus/vrfv2plus_test.go: `.
Msg("Funding Subscriptions with Link and Native Tokens")`
$DIR/integration-tests/load/vrfv2plus/vrfv2plus_test.go: `.FundSubscriptions(
big.NewFloat(*configCopy.VRFv2Plus.General.SubscriptionRefundingAmountNative),
big.NewFloat(*configCopy.VRFv2Plus.General.SubscriptionRefundingAmountLink),
vrfContracts.LinkToken,
vrfContracts.CoordinatorV2Plus,
underfundedSubIDs,
)`
$DIR/integration-tests/load/vrfv2plus/vrfv2plus_test.go: `.NewFloat(*configCopy.VRFv2Plus.General.SubscriptionRefundingAmountNative)`
$DIR/integration-tests/load/vrfv2plus/vrfv2plus_test.go: `.NewFloat(*configCopy.VRFv2Plus.General.SubscriptionRefundingAmountLink)`
$DIR/integration-tests/load/vrfv2plus/vrfv2plus_test.go: `.Add(1)`
$DIR/integration-tests/load/vrfv2plus/vrfv2plus_test.go: `.WaitForRequestCountEqualToFulfilmentCount(testcontext.Get(t), consumer, 2*time.Minute, &wgAllRequestsFulfilled)`
$DIR/integration-tests/load/vrfv2plus/vrfv2plus_test.go: `.Get(t)`
$DIR/integration-tests/load/vrfv2plus/vrfv2plus_test.go: `.Wait()`
$DIR/integration-tests/load/vrfv2plus/vrfv2plus_test.go: `.Info()`
$DIR/integration-tests/load/vrfv2plus/vrfv2plus_test.go: `.
Interface("Request Count", requestCount)`
$DIR/integration-tests/load/vrfv2plus/vrfv2plus_test.go: `.
Interface("Fulfilment Count", fulfilmentCount)`
$DIR/integration-tests/load/vrfv2plus/vrfv2plus_test.go: `.
Msg("Final Request/Fulfilment Stats")`
$DIR/integration-tests/load/zcluster/cluster_entrypoint_test.go: `err = p.Run()`
$DIR/integration-tests/load/zcluster/cluster_entrypoint_test.go: `.GetConfig("Load", tc.OCR)`
$DIR/integration-tests/load/zcluster/cluster_entrypoint_test.go: `.AsBase64()`
$DIR/integration-tests/load/zcluster/cluster_entrypoint_test.go: `.NewClusterProfile(&wasp.ClusterConfig{
// you set up these only once, no need to configure through TOML
DockerCmdExecPath: "../../..",
BuildCtxPath: "integration-tests/load",
Namespace: *config.WaspConfig.Namespace,
KeepJobs: config.WaspConfig.KeepJobs,
UpdateImage: config.WaspConfig.UpdateImage,
HelmValues: map[string]string{
"env.loki.url": *config.Logging.Loki.Endpoint,
"env.loki.tenant_id": *config.Logging.Loki.TenantId,
"image": *config.WaspConfig.RepoImageVersionURI,
"test.binaryName": *config.WaspConfig.TestBinaryName,
"test.name": *config.WaspConfig.TestName,
"test.timeout": *config.WaspConfig.TestTimeout,
"env.wasp.log_level": *config.WaspConfig.WaspLogLevel,
"jobs": *config.WaspConfig.WaspJobs,
// other test vars pass through
"test.BASE64_CONFIG_OVERRIDE": cfgBase64,
},
})`
$DIR/integration-tests/load/zcluster/cluster_entrypoint_test.go: `.Run()`
$DIR/integration-tests/migration/upgrade_version_test.go: `err = config.ChainlinkUpgradeImage.Validate()`
$DIR/integration-tests/migration/upgrade_version_test.go: `err = env.ClCluster.Nodes[0].UpgradeVersion(*config.ChainlinkUpgradeImage.Image, *config.ChainlinkUpgradeImage.Version)`
$DIR/integration-tests/migration/upgrade_version_test.go: `.GetTestLogger(t)`
$DIR/integration-tests/migration/upgrade_version_test.go: `.GetConfig("Migration", tc.Node)`
$DIR/integration-tests/migration/upgrade_version_test.go: `.ChainlinkUpgradeImage.Validate()`
$DIR/integration-tests/migration/upgrade_version_test.go: `.EthereumNetworkConfigFromConfig(l, &config)`
$DIR/integration-tests/migration/upgrade_version_test.go: `.NewCLTestEnvBuilder()`
$DIR/integration-tests/migration/upgrade_version_test.go: `.
WithTestConfig(&config)`
$DIR/integration-tests/migration/upgrade_version_test.go: `.
WithTestInstance(t)`
$DIR/integration-tests/migration/upgrade_version_test.go: `.
WithStandardCleanup()`
$DIR/integration-tests/migration/upgrade_version_test.go: `.
WithPrivateEthereumNetwork(privateNetwork.EthereumNetworkConfig)`
$DIR/integration-tests/migration/upgrade_version_test.go: `.
WithCLNodes(1)`
$DIR/integration-tests/migration/upgrade_version_test.go: `.
WithStandardCleanup()`
$DIR/integration-tests/migration/upgrade_version_test.go: `.
WithSeth()`
$DIR/integration-tests/migration/upgrade_version_test.go: `.
Build()`
$DIR/integration-tests/migration/upgrade_version_test.go: `.UpgradeVersion(*config.ChainlinkUpgradeImage.Image, *config.ChainlinkUpgradeImage.Version)`
$DIR/integration-tests/reorg/automation_reorg_test.go: `t.Run(name, func(t *testing.T) {
t.Parallel()
config, err := tc.GetConfig("Reorg", tc.Automation)
if err != nil {
t.Fatal(err)
}
network := networks.MustGetSelectedNetworkConfig(config.Network)[0]
defaultAutomationSettings["replicas"] = nodeCount
defaultAutomationSettings["toml"] = networks.AddNetworkDetailedConfig(baseTOML, config.Pyroscope, networkTOML, network)
var overrideFn = func(_ interface{}, target interface{}) {
ctf_config.MustConfigOverrideChainlinkVersion(config.GetChainlinkImageConfig(), target)
ctf_config.MightConfigOverridePyroscopeKey(config.GetPyroscopeConfig(), target)
}
cd := chainlink.NewWithOverride(0, defaultAutomationSettings, config.ChainlinkImage, overrideFn)
testEnvironment := environment.
New(&environment.Config{
NamespacePrefix: fmt.Sprintf("automation-reorg-%d", reorgBlockCount),
TTL: time.Hour * 1,
Test: t}).
// Use Geth blockchain to simulate reorgs
AddHelm(geth_helm.New(&geth_helm.Props{
NetworkName: network.Name,
Simulated: true,
WsURLs: network.URLs,
})).
AddHelm(cd)
err = testEnvironment.Run()
require.NoError(t, err, "Error setting up test environment")
if testEnvironment.WillUseRemoteRunner() {
return
}
gethURL := testEnvironment.URLs["Simulated Geth_http"][0]
require.NotEmpty(t, gethURL, "Geth URL should not be empty")
gethRPCClient := ctf_client.NewRPCClient(gethURL)
chainClient, err := blockchain.NewEVMClient(network, testEnvironment, l)
require.NoError(t, err, "Error connecting to blockchain")
contractDeployer, err := contracts.NewContractDeployer(chainClient, l)
require.NoError(t, err, "Error building contract deployer")
chainlinkNodes, err := client.ConnectChainlinkNodes(testEnvironment)
require.NoError(t, err, "Error connecting to Chainlink nodes")
chainClient.ParallelTransactions(true)
// Register cleanup for any test
t.Cleanup(func() {
err := actions.TeardownSuite(t, testEnvironment, chainlinkNodes, nil, zapcore.PanicLevel, &config, chainClient)
require.NoError(t, err, "Error tearing down environment")
})
err = actions.FundChainlinkNodes(chainlinkNodes, chainClient, nodeFundsAmount)
require.NoError(t, err, "Error funding Chainlink nodes")
linkToken, err := contractDeployer.DeployLinkTokenContract()
require.NoError(t, err, "Error deploying LINK token")
registry, registrar := actions.DeployAutoOCRRegistryAndRegistrar(
t,
registryVersion,
defaultOCRRegistryConfig,
linkToken,
contractDeployer,
chainClient,
)
// Fund the registry with LINK
err = linkToken.Transfer(registry.Address(), big.NewInt(0).Mul(big.NewInt(1e18), big.NewInt(int64(upkeepCount))))
require.NoError(t, err, "Funding keeper registry contract shouldn't fail")
actions.CreateOCRKeeperJobs(t, chainlinkNodes, registry.Address(), network.ChainID, 0, registryVersion)
nodesWithoutBootstrap := chainlinkNodes[1:]
defaultOCRRegistryConfig.RegistryVersion = registryVersion
ocrConfig, err := actions.BuildAutoOCR2ConfigVars(t, nodesWithoutBootstrap, defaultOCRRegistryConfig, registrar.Address(), 5*time.Second, registry.ChainModuleAddress(), registry.ReorgProtectionEnabled())
require.NoError(t, err, "OCR2 config should be built successfully")
if registryVersion == ethereum.RegistryVersion_2_0 {
err = registry.SetConfig(defaultOCRRegistryConfig, ocrConfig)
} else {
err = registry.SetConfigTypeSafe(ocrConfig)
}
require.NoError(t, err, "Registry config should be be set successfully")
require.NoError(t, chainClient.WaitForEvents(), "Waiting for config to be set")
// Use the name to determine if this is a log trigger or not
isLogTrigger := name == "registry_2_1_logtrigger" || name == "registry_2_2_logtrigger"
consumers, upkeepIDs := actions.DeployConsumers(t, registry, registrar, linkToken, contractDeployer, chainClient, upkeepCount, big.NewInt(defaultLinkFunds), defaultUpkeepGasLimit, isLogTrigger, false)
if isLogTrigger {
for i := 0; i < len(upkeepIDs); i++ {
if err := consumers[i].Start(); err != nil {
l.Error().Msg("Error when starting consumer")
return
}
l.Info().Int("Consumer index", i).Msg("Consumer started")
}
}
l.Info().Msg("Waiting for all upkeeps to be performed")
gom := gomega.NewGomegaWithT(t)
gom.Eventually(func(g gomega.Gomega) {
// Check if the upkeeps are performing multiple times by analyzing their counters and checking they are greater than 5
for i := 0; i < len(upkeepIDs); i++ {
counter, err := consumers[i].Counter(testcontext.Get(t))
require.NoError(t, err, "Failed to retrieve consumer counter for upkeep at index %d", i)
expect := 5
l.Info().Int64("Upkeeps Performed", counter.Int64()).Int("Upkeep ID", i).Msg("Number of upkeeps performed")
g.Expect(counter.Int64()).Should(gomega.BeNumerically(">=", int64(expect)),
"Expected consumer counter to be greater than %d, but got %d", expect, counter.Int64())
}
}, "7m", "1s").Should(gomega.Succeed()) // ~1m for cluster setup, ~3m for performing each upkeep 5 times, ~3m buffer
l.Info().Msg("All upkeeps performed under happy path. Starting reorg")
l.Info().
Str("URL", gethRPCClient.URL).
Int("BlocksBack", reorgBlockCount).
Int("FinalityDepth", finalityDepth).
Int("HistoryDepth", historyDepth).
Msg("Rewinding blocks on chain below finality depth")
err = gethRPCClient.GethSetHead(reorgBlockCount)
require.NoError(t, err, "Error rewinding blocks on chain")
l.Info().Msg("Reorg started. Expecting chain to become unstable and upkeeps to still getting performed")
gom.Eventually(func(g gomega.Gomega) {
// Check if the upkeeps are performing multiple times by analyzing their counters and checking they reach 10
for i := 0; i < len(upkeepIDs); i++ {
counter, err := consumers[i].Counter(testcontext.Get(t))
require.NoError(t, err, "Failed to retrieve consumer counter for upkeep at index %d", i)
expect := 10
l.Info().Int64("Upkeeps Performed", counter.Int64()).Int("Upkeep ID", i).Msg("Number of upkeeps performed")
g.Expect(counter.Int64()).Should(gomega.BeNumerically(">=", int64(expect)),
"Expected consumer counter to be greater than %d, but got %d", expect, counter.Int64())
}
}, "5m", "1s").Should(gomega.Succeed())
})`
$DIR/integration-tests/reorg/automation_reorg_test.go: `defaultAutomationSettings["replicas"] = nodeCount`
$DIR/integration-tests/reorg/automation_reorg_test.go: `defaultAutomationSettings["toml"] = networks.AddNetworkDetailedConfig(baseTOML, config.Pyroscope, networkTOML, network)`
$DIR/integration-tests/reorg/automation_reorg_test.go: `ctf_config.MustConfigOverrideChainlinkVersion(config.GetChainlinkImageConfig(), target)`
$DIR/integration-tests/reorg/automation_reorg_test.go: `ctf_config.MightConfigOverridePyroscopeKey(config.GetPyroscopeConfig(), target)`
$DIR/integration-tests/reorg/automation_reorg_test.go: `err = testEnvironment.Run()`
$DIR/integration-tests/reorg/automation_reorg_test.go: `chainClient.ParallelTransactions(true)`
$DIR/integration-tests/reorg/automation_reorg_test.go: `t.Cleanup(func() {
err := actions.TeardownSuite(t, testEnvironment, chainlinkNodes, nil, zapcore.PanicLevel, &config, chainClient)
require.NoError(t, err, "Error tearing down environment")
})`
$DIR/integration-tests/reorg/automation_reorg_test.go: `err = actions.FundChainlinkNodes(chainlinkNodes, chainClient, nodeFundsAmount)`
$DIR/integration-tests/reorg/automation_reorg_test.go: `err = linkToken.Transfer(registry.Address(), big.NewInt(0).Mul(big.NewInt(1e18), big.NewInt(int64(upkeepCount))))`
$DIR/integration-tests/reorg/automation_reorg_test.go: `actions.CreateOCRKeeperJobs(t, chainlinkNodes, registry.Address(), network.ChainID, 0, registryVersion)`
$DIR/integration-tests/reorg/automation_reorg_test.go: `defaultOCRRegistryConfig.RegistryVersion = registryVersion`
$DIR/integration-tests/reorg/automation_reorg_test.go: `err = registry.SetConfig(defaultOCRRegistryConfig, ocrConfig)`
$DIR/integration-tests/reorg/automation_reorg_test.go: `err = registry.SetConfigTypeSafe(ocrConfig)`
$DIR/integration-tests/reorg/automation_reorg_test.go: `l.Info().Int("Consumer index", i).Msg("Consumer started")`
$DIR/integration-tests/reorg/automation_reorg_test.go: `l.Info().Msg("Waiting for all upkeeps to be performed")`
$DIR/integration-tests/reorg/automation_reorg_test.go: `gom.Eventually(func(g gomega.Gomega) {
// Check if the upkeeps are performing multiple times by analyzing their counters and checking they are greater than 5
for i := 0; i < len(upkeepIDs); i++ {
counter, err := consumers[i].Counter(testcontext.Get(t))
require.NoError(t, err, "Failed to retrieve consumer counter for upkeep at index %d", i)
expect := 5
l.Info().Int64("Upkeeps Performed", counter.Int64()).Int("Upkeep ID", i).Msg("Number of upkeeps performed")
g.Expect(counter.Int64()).Should(gomega.BeNumerically(">=", int64(expect)),
"Expected consumer counter to be greater than %d, but got %d", expect, counter.Int64())
}
}, "7m", "1s").Should(gomega.Succeed())`
$DIR/integration-tests/reorg/automation_reorg_test.go: `l.Info().Int64("Upkeeps Performed", counter.Int64()).Int("Upkeep ID", i).Msg("Number of upkeeps performed")`
$DIR/integration-tests/reorg/automation_reorg_test.go: `g.Expect(counter.Int64()).Should(gomega.BeNumerically(">=", int64(expect)),
"Expected consumer counter to be greater than %d, but got %d", expect, counter.Int64())`
$DIR/integration-tests/reorg/automation_reorg_test.go: `l.Info().Msg("All upkeeps performed under happy path. Starting reorg")`
$DIR/integration-tests/reorg/automation_reorg_test.go: `l.Info().
Str("URL", gethRPCClient.URL).
Int("BlocksBack", reorgBlockCount).
Int("FinalityDepth", finalityDepth).
Int("HistoryDepth", historyDepth).
Msg("Rewinding blocks on chain below finality depth")`
$DIR/integration-tests/reorg/automation_reorg_test.go: `err = gethRPCClient.GethSetHead(reorgBlockCount)`
$DIR/integration-tests/reorg/automation_reorg_test.go: `l.Info().Msg("Reorg started. Expecting chain to become unstable and upkeeps to still getting performed")`
$DIR/integration-tests/reorg/automation_reorg_test.go: `gom.Eventually(func(g gomega.Gomega) {
// Check if the upkeeps are performing multiple times by analyzing their counters and checking they reach 10
for i := 0; i < len(upkeepIDs); i++ {
counter, err := consumers[i].Counter(testcontext.Get(t))
require.NoError(t, err, "Failed to retrieve consumer counter for upkeep at index %d", i)
expect := 10
l.Info().Int64("Upkeeps Performed", counter.Int64()).Int("Upkeep ID", i).Msg("Number of upkeeps performed")
g.Expect(counter.Int64()).Should(gomega.BeNumerically(">=", int64(expect)),
"Expected consumer counter to be greater than %d, but got %d", expect, counter.Int64())
}
}, "5m", "1s").Should(gomega.Succeed())`
$DIR/integration-tests/reorg/automation_reorg_test.go: `l.Info().Int64("Upkeeps Performed", counter.Int64()).Int("Upkeep ID", i).Msg("Number of upkeeps performed")`
$DIR/integration-tests/reorg/automation_reorg_test.go: `g.Expect(counter.Int64()).Should(gomega.BeNumerically(">=", int64(expect)),
"Expected consumer counter to be greater than %d, but got %d", expect, counter.Int64())`
$DIR/integration-tests/reorg/automation_reorg_test.go: `.GetTestLogger(t)`
$DIR/integration-tests/reorg/automation_reorg_test.go: `.Run(name, func(t *testing.T) {
t.Parallel()
config, err := tc.GetConfig("Reorg", tc.Automation)
if err != nil {
t.Fatal(err)
}
network := networks.MustGetSelectedNetworkConfig(config.Network)[0]
defaultAutomationSettings["replicas"] = nodeCount
defaultAutomationSettings["toml"] = networks.AddNetworkDetailedConfig(baseTOML, config.Pyroscope, networkTOML, network)
var overrideFn = func(_ interface{}, target interface{}) {
ctf_config.MustConfigOverrideChainlinkVersion(config.GetChainlinkImageConfig(), target)
ctf_config.MightConfigOverridePyroscopeKey(config.GetPyroscopeConfig(), target)
}
cd := chainlink.NewWithOverride(0, defaultAutomationSettings, config.ChainlinkImage, overrideFn)
testEnvironment := environment.
New(&environment.Config{
NamespacePrefix: fmt.Sprintf("automation-reorg-%d", reorgBlockCount),
TTL: time.Hour * 1,
Test: t}).
// Use Geth blockchain to simulate reorgs
AddHelm(geth_helm.New(&geth_helm.Props{
NetworkName: network.Name,
Simulated: true,
WsURLs: network.URLs,
})).
AddHelm(cd)
err = testEnvironment.Run()
require.NoError(t, err, "Error setting up test environment")
if testEnvironment.WillUseRemoteRunner() {
return
}
gethURL := testEnvironment.URLs["Simulated Geth_http"][0]
require.NotEmpty(t, gethURL, "Geth URL should not be empty")
gethRPCClient := ctf_client.NewRPCClient(gethURL)
chainClient, err := blockchain.NewEVMClient(network, testEnvironment, l)
require.NoError(t, err, "Error connecting to blockchain")
contractDeployer, err := contracts.NewContractDeployer(chainClient, l)
require.NoError(t, err, "Error building contract deployer")
chainlinkNodes, err := client.ConnectChainlinkNodes(testEnvironment)
require.NoError(t, err, "Error connecting to Chainlink nodes")
chainClient.ParallelTransactions(true)
// Register cleanup for any test
t.Cleanup(func() {
err := actions.TeardownSuite(t, testEnvironment, chainlinkNodes, nil, zapcore.PanicLevel, &config, chainClient)
require.NoError(t, err, "Error tearing down environment")
})
err = actions.FundChainlinkNodes(chainlinkNodes, chainClient, nodeFundsAmount)
require.NoError(t, err, "Error funding Chainlink nodes")
linkToken, err := contractDeployer.DeployLinkTokenContract()
require.NoError(t, err, "Error deploying LINK token")
registry, registrar := actions.DeployAutoOCRRegistryAndRegistrar(
t,
registryVersion,
defaultOCRRegistryConfig,
linkToken,
contractDeployer,
chainClient,
)
// Fund the registry with LINK
err = linkToken.Transfer(registry.Address(), big.NewInt(0).Mul(big.NewInt(1e18), big.NewInt(int64(upkeepCount))))
require.NoError(t, err, "Funding keeper registry contract shouldn't fail")
actions.CreateOCRKeeperJobs(t, chainlinkNodes, registry.Address(), network.ChainID, 0, registryVersion)
nodesWithoutBootstrap := chainlinkNodes[1:]
defaultOCRRegistryConfig.RegistryVersion = registryVersion
ocrConfig, err := actions.BuildAutoOCR2ConfigVars(t, nodesWithoutBootstrap, defaultOCRRegistryConfig, registrar.Address(), 5*time.Second, registry.ChainModuleAddress(), registry.ReorgProtectionEnabled())
require.NoError(t, err, "OCR2 config should be built successfully")
if registryVersion == ethereum.RegistryVersion_2_0 {
err = registry.SetConfig(defaultOCRRegistryConfig, ocrConfig)
} else {
err = registry.SetConfigTypeSafe(ocrConfig)
}
require.NoError(t, err, "Registry config should be be set successfully")
require.NoError(t, chainClient.WaitForEvents(), "Waiting for config to be set")
// Use the name to determine if this is a log trigger or not
isLogTrigger := name == "registry_2_1_logtrigger" || name == "registry_2_2_logtrigger"
consumers, upkeepIDs := actions.DeployConsumers(t, registry, registrar, linkToken, contractDeployer, chainClient, upkeepCount, big.NewInt(defaultLinkFunds), defaultUpkeepGasLimit, isLogTrigger, false)
if isLogTrigger {
for i := 0; i < len(upkeepIDs); i++ {
if err := consumers[i].Start(); err != nil {
l.Error().Msg("Error when starting consumer")
return
}
l.Info().Int("Consumer index", i).Msg("Consumer started")
}
}
l.Info().Msg("Waiting for all upkeeps to be performed")
gom := gomega.NewGomegaWithT(t)
gom.Eventually(func(g gomega.Gomega) {
// Check if the upkeeps are performing multiple times by analyzing their counters and checking they are greater than 5
for i := 0; i < len(upkeepIDs); i++ {
counter, err := consumers[i].Counter(testcontext.Get(t))
require.NoError(t, err, "Failed to retrieve consumer counter for upkeep at index %d", i)
expect := 5
l.Info().Int64("Upkeeps Performed", counter.Int64()).Int("Upkeep ID", i).Msg("Number of upkeeps performed")
g.Expect(counter.Int64()).Should(gomega.BeNumerically(">=", int64(expect)),
"Expected consumer counter to be greater than %d, but got %d", expect, counter.Int64())
}
}, "7m", "1s").Should(gomega.Succeed()) // ~1m for cluster setup, ~3m for performing each upkeep 5 times, ~3m buffer
l.Info().Msg("All upkeeps performed under happy path. Starting reorg")
l.Info().
Str("URL", gethRPCClient.URL).
Int("BlocksBack", reorgBlockCount).
Int("FinalityDepth", finalityDepth).
Int("HistoryDepth", historyDepth).
Msg("Rewinding blocks on chain below finality depth")
err = gethRPCClient.GethSetHead(reorgBlockCount)
require.NoError(t, err, "Error rewinding blocks on chain")
l.Info().Msg("Reorg started. Expecting chain to become unstable and upkeeps to still getting performed")
gom.Eventually(func(g gomega.Gomega) {
// Check if the upkeeps are performing multiple times by analyzing their counters and checking they reach 10
for i := 0; i < len(upkeepIDs); i++ {
counter, err := consumers[i].Counter(testcontext.Get(t))
require.NoError(t, err, "Failed to retrieve consumer counter for upkeep at index %d", i)
expect := 10
l.Info().Int64("Upkeeps Performed", counter.Int64()).Int("Upkeep ID", i).Msg("Number of upkeeps performed")
g.Expect(counter.Int64()).Should(gomega.BeNumerically(">=", int64(expect)),
"Expected consumer counter to be greater than %d, but got %d", expect, counter.Int64())
}
}, "5m", "1s").Should(gomega.Succeed())
})`
$DIR/integration-tests/reorg/automation_reorg_test.go: `.GetConfig("Reorg", tc.Automation)`
$DIR/integration-tests/reorg/automation_reorg_test.go: `.MustGetSelectedNetworkConfig(config.Network)`
$DIR/integration-tests/reorg/automation_reorg_test.go: `.AddNetworkDetailedConfig(baseTOML, config.Pyroscope, networkTOML, network)`
$DIR/integration-tests/reorg/automation_reorg_test.go: `.MustConfigOverrideChainlinkVersion(config.GetChainlinkImageConfig(), target)`
$DIR/integration-tests/reorg/automation_reorg_test.go: `.GetChainlinkImageConfig()`
$DIR/integration-tests/reorg/automation_reorg_test.go: `.MightConfigOverridePyroscopeKey(config.GetPyroscopeConfig(), target)`
$DIR/integration-tests/reorg/automation_reorg_test.go: `.GetPyroscopeConfig()`
$DIR/integration-tests/reorg/automation_reorg_test.go: `.NewWithOverride(0, defaultAutomationSettings, config.ChainlinkImage, overrideFn)`
$DIR/integration-tests/reorg/automation_reorg_test.go: `.
New(&environment.Config{
NamespacePrefix: fmt.Sprintf("automation-reorg-%d", reorgBlockCount),
TTL: time.Hour * 1,
Test: t})`
$DIR/integration-tests/reorg/automation_reorg_test.go: `.Sprintf("automation-reorg-%d", reorgBlockCount)`
$DIR/integration-tests/reorg/automation_reorg_test.go: `.
// Use Geth blockchain to simulate reorgs
AddHelm(geth_helm.New(&geth_helm.Props{
NetworkName: network.Name,
Simulated: true,
WsURLs: network.URLs,
}))`
$DIR/integration-tests/reorg/automation_reorg_test.go: `.New(&geth_helm.Props{
NetworkName: network.Name,
Simulated: true,
WsURLs: network.URLs,
})`
$DIR/integration-tests/reorg/automation_reorg_test.go: `.
AddHelm(cd)`
$DIR/integration-tests/reorg/automation_reorg_test.go: `.Run()`
$DIR/integration-tests/reorg/automation_reorg_test.go: `.WillUseRemoteRunner()`
$DIR/integration-tests/reorg/automation_reorg_test.go: `.NewRPCClient(gethURL)`
$DIR/integration-tests/reorg/automation_reorg_test.go: `.NewEVMClient(network, testEnvironment, l)`
$DIR/integration-tests/reorg/automation_reorg_test.go: `.NewContractDeployer(chainClient, l)`
$DIR/integration-tests/reorg/automation_reorg_test.go: `.ConnectChainlinkNodes(testEnvironment)`
$DIR/integration-tests/reorg/automation_reorg_test.go: `.ParallelTransactions(true)`
$DIR/integration-tests/reorg/automation_reorg_test.go: `.Cleanup(func() {
err := actions.TeardownSuite(t, testEnvironment, chainlinkNodes, nil, zapcore.PanicLevel, &config, chainClient)
require.NoError(t, err, "Error tearing down environment")
})`
$DIR/integration-tests/reorg/automation_reorg_test.go: `.TeardownSuite(t, testEnvironment, chainlinkNodes, nil, zapcore.PanicLevel, &config, chainClient)`
$DIR/integration-tests/reorg/automation_reorg_test.go: `.FundChainlinkNodes(chainlinkNodes, chainClient, nodeFundsAmount)`
$DIR/integration-tests/reorg/automation_reorg_test.go: `.DeployLinkTokenContract()`
$DIR/integration-tests/reorg/automation_reorg_test.go: `.DeployAutoOCRRegistryAndRegistrar(
t,
registryVersion,
defaultOCRRegistryConfig,
linkToken,
contractDeployer,
chainClient,
)`
$DIR/integration-tests/reorg/automation_reorg_test.go: `.Transfer(registry.Address(), big.NewInt(0).Mul(big.NewInt(1e18), big.NewInt(int64(upkeepCount))))`
$DIR/integration-tests/reorg/automation_reorg_test.go: `.Address()`
$DIR/integration-tests/reorg/automation_reorg_test.go: `.NewInt(0)`
$DIR/integration-tests/reorg/automation_reorg_test.go: `.Mul(big.NewInt(1e18), big.NewInt(int64(upkeepCount)))`
$DIR/integration-tests/reorg/automation_reorg_test.go: `.NewInt(1e18)`
$DIR/integration-tests/reorg/automation_reorg_test.go: `.NewInt(int64(upkeepCount))`
$DIR/integration-tests/reorg/automation_reorg_test.go: `.CreateOCRKeeperJobs(t, chainlinkNodes, registry.Address(), network.ChainID, 0, registryVersion)`
$DIR/integration-tests/reorg/automation_reorg_test.go: `.Address()`
$DIR/integration-tests/reorg/automation_reorg_test.go: `.BuildAutoOCR2ConfigVars(t, nodesWithoutBootstrap, defaultOCRRegistryConfig, registrar.Address(), 5*time.Second, registry.ChainModuleAddress(), registry.ReorgProtectionEnabled())`
$DIR/integration-tests/reorg/automation_reorg_test.go: `.Address()`
$DIR/integration-tests/reorg/automation_reorg_test.go: `.ChainModuleAddress()`
$DIR/integration-tests/reorg/automation_reorg_test.go: `.ReorgProtectionEnabled()`
$DIR/integration-tests/reorg/automation_reorg_test.go: `.SetConfig(defaultOCRRegistryConfig, ocrConfig)`
$DIR/integration-tests/reorg/automation_reorg_test.go: `.SetConfigTypeSafe(ocrConfig)`
$DIR/integration-tests/reorg/automation_reorg_test.go: `.DeployConsumers(t, registry, registrar, linkToken, contractDeployer, chainClient, upkeepCount, big.NewInt(defaultLinkFunds), defaultUpkeepGasLimit, isLogTrigger, false)`
$DIR/integration-tests/reorg/automation_reorg_test.go: `.NewInt(defaultLinkFunds)`
$DIR/integration-tests/reorg/automation_reorg_test.go: `.Start()`
$DIR/integration-tests/reorg/automation_reorg_test.go: `.Info()`
$DIR/integration-tests/reorg/automation_reorg_test.go: `.Int("Consumer index", i)`
$DIR/integration-tests/reorg/automation_reorg_test.go: `.Msg("Consumer started")`
$DIR/integration-tests/reorg/automation_reorg_test.go: `.Info()`
$DIR/integration-tests/reorg/automation_reorg_test.go: `.Msg("Waiting for all upkeeps to be performed")`
$DIR/integration-tests/reorg/automation_reorg_test.go: `.NewGomegaWithT(t)`
$DIR/integration-tests/reorg/automation_reorg_test.go: `.Eventually(func(g gomega.Gomega) {
// Check if the upkeeps are performing multiple times by analyzing their counters and checking they are greater than 5
for i := 0; i < len(upkeepIDs); i++ {
counter, err := consumers[i].Counter(testcontext.Get(t))
require.NoError(t, err, "Failed to retrieve consumer counter for upkeep at index %d", i)
expect := 5
l.Info().Int64("Upkeeps Performed", counter.Int64()).Int("Upkeep ID", i).Msg("Number of upkeeps performed")
g.Expect(counter.Int64()).Should(gomega.BeNumerically(">=", int64(expect)),
"Expected consumer counter to be greater than %d, but got %d", expect, counter.Int64())
}
}, "7m", "1s")`
$DIR/integration-tests/reorg/automation_reorg_test.go: `.Counter(testcontext.Get(t))`
$DIR/integration-tests/reorg/automation_reorg_test.go: `.Get(t)`
$DIR/integration-tests/reorg/automation_reorg_test.go: `.Info()`
$DIR/integration-tests/reorg/automation_reorg_test.go: `.Int64("Upkeeps Performed", counter.Int64())`
$DIR/integration-tests/reorg/automation_reorg_test.go: `.Int64()`
$DIR/integration-tests/reorg/automation_reorg_test.go: `.Int("Upkeep ID", i)`
$DIR/integration-tests/reorg/automation_reorg_test.go: `.Msg("Number of upkeeps performed")`
$DIR/integration-tests/reorg/automation_reorg_test.go: `.Expect(counter.Int64())`
$DIR/integration-tests/reorg/automation_reorg_test.go: `.Int64()`
$DIR/integration-tests/reorg/automation_reorg_test.go: `.Should(gomega.BeNumerically(">=", int64(expect)),
"Expected consumer counter to be greater than %d, but got %d", expect, counter.Int64())`
$DIR/integration-tests/reorg/automation_reorg_test.go: `.BeNumerically(">=", int64(expect))`
$DIR/integration-tests/reorg/automation_reorg_test.go: `.Int64()`
$DIR/integration-tests/reorg/automation_reorg_test.go: `.Should(gomega.Succeed())`
$DIR/integration-tests/reorg/automation_reorg_test.go: `.Succeed()`
$DIR/integration-tests/reorg/automation_reorg_test.go: `.Info()`
$DIR/integration-tests/reorg/automation_reorg_test.go: `.Msg("All upkeeps performed under happy path. Starting reorg")`
$DIR/integration-tests/reorg/automation_reorg_test.go: `.Info()`
$DIR/integration-tests/reorg/automation_reorg_test.go: `.
Str("URL", gethRPCClient.URL)`
$DIR/integration-tests/reorg/automation_reorg_test.go: `.
Int("BlocksBack", reorgBlockCount)`
$DIR/integration-tests/reorg/automation_reorg_test.go: `.
Int("FinalityDepth", finalityDepth)`
$DIR/integration-tests/reorg/automation_reorg_test.go: `.
Int("HistoryDepth", historyDepth)`
$DIR/integration-tests/reorg/automation_reorg_test.go: `.
Msg("Rewinding blocks on chain below finality depth")`
$DIR/integration-tests/reorg/automation_reorg_test.go: `.GethSetHead(reorgBlockCount)`
$DIR/integration-tests/reorg/automation_reorg_test.go: `.Info()`
$DIR/integration-tests/reorg/automation_reorg_test.go: `.Msg("Reorg started. Expecting chain to become unstable and upkeeps to still getting performed")`
$DIR/integration-tests/reorg/automation_reorg_test.go: `.Eventually(func(g gomega.Gomega) {
// Check if the upkeeps are performing multiple times by analyzing their counters and checking they reach 10
for i := 0; i < len(upkeepIDs); i++ {
counter, err := consumers[i].Counter(testcontext.Get(t))
require.NoError(t, err, "Failed to retrieve consumer counter for upkeep at index %d", i)
expect := 10
l.Info().Int64("Upkeeps Performed", counter.Int64()).Int("Upkeep ID", i).Msg("Number of upkeeps performed")
g.Expect(counter.Int64()).Should(gomega.BeNumerically(">=", int64(expect)),
"Expected consumer counter to be greater than %d, but got %d", expect, counter.Int64())
}
}, "5m", "1s")`
$DIR/integration-tests/reorg/automation_reorg_test.go: `.Counter(testcontext.Get(t))`
$DIR/integration-tests/reorg/automation_reorg_test.go: `.Get(t)`
$DIR/integration-tests/reorg/automation_reorg_test.go: `.Info()`
$DIR/integration-tests/reorg/automation_reorg_test.go: `.Int64("Upkeeps Performed", counter.Int64())`
$DIR/integration-tests/reorg/automation_reorg_test.go: `.Int64()`
$DIR/integration-tests/reorg/automation_reorg_test.go: `.Int("Upkeep ID", i)`
$DIR/integration-tests/reorg/automation_reorg_test.go: `.Msg("Number of upkeeps performed")`
$DIR/integration-tests/reorg/automation_reorg_test.go: `.Expect(counter.Int64())`
$DIR/integration-tests/reorg/automation_reorg_test.go: `.Int64()`
$DIR/integration-tests/reorg/automation_reorg_test.go: `.Should(gomega.BeNumerically(">=", int64(expect)),
"Expected consumer counter to be greater than %d, but got %d", expect, counter.Int64())`
$DIR/integration-tests/reorg/automation_reorg_test.go: `.BeNumerically(">=", int64(expect))`
$DIR/integration-tests/reorg/automation_reorg_test.go: `.Int64()`
$DIR/integration-tests/reorg/automation_reorg_test.go: `.Should(gomega.Succeed())`
$DIR/integration-tests/reorg/automation_reorg_test.go: `.Succeed()`
$DIR/integration-tests/smoke/automation_test.go: `logging.Init()`
$DIR/integration-tests/smoke/automation_test.go: `t.Run(name, func(t *testing.T) {
t.Parallel()
config, err := tc.GetConfig("Smoke", tc.Automation)
require.NoError(t, err, "Failed to get config")
a := setupAutomationTestDocker(
t, registryVersion, automationDefaultRegistryConfig(config), false, false, &config,
)
sb, err := a.ChainClient.Client.BlockNumber(context.Background())
require.NoError(t, err, "Failed to get start block")
consumers, upkeepIDs := actions_seth.DeployConsumers(
t,
a.ChainClient,
a.Registry,
a.Registrar,
a.LinkToken,
defaultAmountOfUpkeeps,
big.NewInt(automationDefaultLinkFunds),
automationDefaultUpkeepGasLimit,
true,
false,
)
// Start log trigger based upkeeps for all consumers
for i := 0; i < len(consumers); i++ {
err := consumers[i].Start()
if err != nil {
return
}
}
t.Cleanup(func() {
actions_seth.GetStalenessReportCleanupFn(t, a.Logger, a.ChainClient, sb, a.Registry, registryVersion)()
})
l.Info().Msg("Waiting for all upkeeps to perform")
gom := gomega.NewGomegaWithT(t)
gom.Eventually(func(g gomega.Gomega) {
// Check if the upkeeps are performing multiple times by analyzing their counters
for i := 0; i < len(upkeepIDs); i++ {
counter, err := consumers[i].Counter(testcontext.Get(t))
require.NoError(t, err, "Failed to retrieve consumer counter for upkeep at index %d", i)
expect := 5
l.Info().Int64("Upkeeps Performed", counter.Int64()).Int("Upkeep Index", i).Msg("Number of upkeeps performed")
g.Expect(counter.Int64()).Should(gomega.BeNumerically(">=", int64(expect)),
"Expected consumer counter to be greater than %d, but got %d", expect, counter.Int64())
}
}, "5m", "1s").Should(gomega.Succeed()) // ~1m for cluster setup, ~2m for performing each upkeep 5 times, ~2m buffer
topic0InBytesMatch := [32]byte{
61, 83, 163, 149, 80, 224, 70, 136,
6, 88, 39, 243, 187, 134, 88, 76,
176, 7, 171, 158, 188, 167, 235,
213, 40, 231, 48, 28, 156, 49, 235, 93,
} // bytes representation of 0x3d53a39550e04688065827f3bb86584cb007ab9ebca7ebd528e7301c9c31eb5d
topic0InBytesNoMatch := [32]byte{
62, 83, 163, 149, 80, 224, 70, 136,
6, 88, 39, 243, 187, 134, 88, 76,
176, 7, 171, 158, 188, 167, 235,
213, 40, 231, 48, 28, 156, 49, 235, 93,
} // changed the first byte from 61 to 62 to make it not match
bytes0 := [32]byte{
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
} // bytes representation of 0x0000000000000000000000000000000000000000000000000000000000000000
// Update the trigger config so no upkeeps are triggered
for i := 0; i < len(consumers); i++ {
upkeepAddr := consumers[i].Address()
logTriggerConfigStruct := ac.IAutomationV21PlusCommonLogTriggerConfig{
ContractAddress: common.HexToAddress(upkeepAddr),
FilterSelector: 0,
Topic0: topic0InBytesNoMatch,
Topic1: bytes0,
Topic2: bytes0,
Topic3: bytes0,
}
encodedLogTriggerConfig, err := core.CompatibleUtilsABI.Methods["_logTriggerConfig"].Inputs.Pack(&logTriggerConfigStruct)
if err != nil {
return
}
err = a.Registry.SetUpkeepTriggerConfig(upkeepIDs[i], encodedLogTriggerConfig)
require.NoError(t, err, "Could not set upkeep trigger config at index %d", i)
}
var countersAfterSetNoMatch = make([]*big.Int, len(upkeepIDs))
// Wait for 10 seconds to let in-flight upkeeps finish
time.Sleep(10 * time.Second)
for i := 0; i < len(upkeepIDs); i++ {
// Obtain the amount of times the upkeep has been executed so far
countersAfterSetNoMatch[i], err = consumers[i].Counter(testcontext.Get(t))
require.NoError(t, err, "Failed to retrieve consumer counter for upkeep at index %d", i)
l.Info().Int64("Upkeep Count", countersAfterSetNoMatch[i].Int64()).Int("Upkeep Index", i).Msg("Upkeep")
}
l.Info().Msg("Making sure the counter stays consistent")
gom.Consistently(func(g gomega.Gomega) {
for i := 0; i < len(upkeepIDs); i++ {
// Expect the counter to remain constant (At most increase by 2 to account for stale performs) because the upkeep trigger config is not met
bufferCount := int64(2)
latestCounter, err := consumers[i].Counter(testcontext.Get(t))
g.Expect(err).ShouldNot(gomega.HaveOccurred(), "Failed to retrieve consumer counter for upkeep at index %d", i)
g.Expect(latestCounter.Int64()).Should(gomega.BeNumerically("<=", countersAfterSetNoMatch[i].Int64()+bufferCount),
"Expected consumer counter to remain less than or equal to %d, but got %d",
countersAfterSetNoMatch[i].Int64()+bufferCount, latestCounter.Int64())
}
}, "1m", "1s").Should(gomega.Succeed())
// Update the trigger config, so upkeeps start performing again
for i := 0; i < len(consumers); i++ {
upkeepAddr := consumers[i].Address()
logTriggerConfigStruct := ac.IAutomationV21PlusCommonLogTriggerConfig{
ContractAddress: common.HexToAddress(upkeepAddr),
FilterSelector: 0,
Topic0: topic0InBytesMatch,
Topic1: bytes0,
Topic2: bytes0,
Topic3: bytes0,
}
encodedLogTriggerConfig, err := core.CompatibleUtilsABI.Methods["_logTriggerConfig"].Inputs.Pack(&logTriggerConfigStruct)
if err != nil {
return
}
err = a.Registry.SetUpkeepTriggerConfig(upkeepIDs[i], encodedLogTriggerConfig)
require.NoError(t, err, "Could not set upkeep trigger config at index %d", i)
}
var countersAfterSetMatch = make([]*big.Int, len(upkeepIDs))
for i := 0; i < len(upkeepIDs); i++ {
// Obtain the amount of times the upkeep has been executed so far
countersAfterSetMatch[i], err = consumers[i].Counter(testcontext.Get(t))
require.NoError(t, err, "Failed to retrieve consumer counter for upkeep at index %d", i)
l.Info().Int64("Upkeep Count", countersAfterSetMatch[i].Int64()).Int("Upkeep Index", i).Msg("Upkeep")
}
// Wait for 30 seconds to make sure backend is ready
time.Sleep(30 * time.Second)
// Start the consumers again
for i := 0; i < len(consumers); i++ {
err := consumers[i].Start()
if err != nil {
return
}
}
l.Info().Msg("Making sure the counter starts increasing again")
gom.Eventually(func(g gomega.Gomega) {
// Check if the upkeeps are performing multiple times by analyzing their counters
for i := 0; i < len(upkeepIDs); i++ {
counter, err := consumers[i].Counter(testcontext.Get(t))
require.NoError(t, err, "Failed to retrieve consumer counter for upkeep at index %d", i)
expect := int64(5)
l.Info().Int64("Upkeeps Performed", counter.Int64()).Int("Upkeep Index", i).Msg("Number of upkeeps performed")
g.Expect(counter.Int64()).Should(gomega.BeNumerically(">=", countersAfterSetMatch[i].Int64()+expect),
"Expected consumer counter to be greater than %d, but got %d", countersAfterSetMatch[i].Int64()+expect, counter.Int64())
}
}, "5m", "1s").Should(gomega.Succeed()) // ~1m for cluster setup, ~2m for performing each upkeep 5 times, ~2m buffer
})`
$DIR/integration-tests/smoke/automation_test.go: `t.Cleanup(func() {
actions_seth.GetStalenessReportCleanupFn(t, a.Logger, a.ChainClient, sb, a.Registry, registryVersion)()
})`
$DIR/integration-tests/smoke/automation_test.go: `actions_seth.GetStalenessReportCleanupFn(t, a.Logger, a.ChainClient, sb, a.Registry, registryVersion)()`
$DIR/integration-tests/smoke/automation_test.go: `l.Info().Msg("Waiting for all upkeeps to perform")`
$DIR/integration-tests/smoke/automation_test.go: `gom.Eventually(func(g gomega.Gomega) {
// Check if the upkeeps are performing multiple times by analyzing their counters
for i := 0; i < len(upkeepIDs); i++ {
counter, err := consumers[i].Counter(testcontext.Get(t))
require.NoError(t, err, "Failed to retrieve consumer counter for upkeep at index %d", i)
expect := 5
l.Info().Int64("Upkeeps Performed", counter.Int64()).Int("Upkeep Index", i).Msg("Number of upkeeps performed")
g.Expect(counter.Int64()).Should(gomega.BeNumerically(">=", int64(expect)),
"Expected consumer counter to be greater than %d, but got %d", expect, counter.Int64())
}
}, "5m", "1s").Should(gomega.Succeed())`
$DIR/integration-tests/smoke/automation_test.go: `l.Info().Int64("Upkeeps Performed", counter.Int64()).Int("Upkeep Index", i).Msg("Number of upkeeps performed")`
$DIR/integration-tests/smoke/automation_test.go: `g.Expect(counter.Int64()).Should(gomega.BeNumerically(">=", int64(expect)),
"Expected consumer counter to be greater than %d, but got %d", expect, counter.Int64())`
$DIR/integration-tests/smoke/automation_test.go: `err = a.Registry.SetUpkeepTriggerConfig(upkeepIDs[i], encodedLogTriggerConfig)`
$DIR/integration-tests/smoke/automation_test.go: `time.Sleep(10 * time.Second)`
$DIR/integration-tests/smoke/automation_test.go: `countersAfterSetNoMatch[i], err = consumers[i].Counter(testcontext.Get(t))`
$DIR/integration-tests/smoke/automation_test.go: `l.Info().Int64("Upkeep Count", countersAfterSetNoMatch[i].Int64()).Int("Upkeep Index", i).Msg("Upkeep")`
$DIR/integration-tests/smoke/automation_test.go: `l.Info().Msg("Making sure the counter stays consistent")`
$DIR/integration-tests/smoke/automation_test.go: `gom.Consistently(func(g gomega.Gomega) {
for i := 0; i < len(upkeepIDs); i++ {
// Expect the counter to remain constant (At most increase by 2 to account for stale performs) because the upkeep trigger config is not met
bufferCount := int64(2)
latestCounter, err := consumers[i].Counter(testcontext.Get(t))
g.Expect(err).ShouldNot(gomega.HaveOccurred(), "Failed to retrieve consumer counter for upkeep at index %d", i)
g.Expect(latestCounter.Int64()).Should(gomega.BeNumerically("<=", countersAfterSetNoMatch[i].Int64()+bufferCount),
"Expected consumer counter to remain less than or equal to %d, but got %d",
countersAfterSetNoMatch[i].Int64()+bufferCount, latestCounter.Int64())
}
}, "1m", "1s").Should(gomega.Succeed())`
$DIR/integration-tests/smoke/automation_test.go: `g.Expect(err).ShouldNot(gomega.HaveOccurred(), "Failed to retrieve consumer counter for upkeep at index %d", i)`
$DIR/integration-tests/smoke/automation_test.go: `g.Expect(latestCounter.Int64()).Should(gomega.BeNumerically("<=", countersAfterSetNoMatch[i].Int64()+bufferCount),
"Expected consumer counter to remain less than or equal to %d, but got %d",
countersAfterSetNoMatch[i].Int64()+bufferCount, latestCounter.Int64())`
$DIR/integration-tests/smoke/automation_test.go: `err = a.Registry.SetUpkeepTriggerConfig(upkeepIDs[i], encodedLogTriggerConfig)`
$DIR/integration-tests/smoke/automation_test.go: `countersAfterSetMatch[i], err = consumers[i].Counter(testcontext.Get(t))`
$DIR/integration-tests/smoke/automation_test.go: `l.Info().Int64("Upkeep Count", countersAfterSetMatch[i].Int64()).Int("Upkeep Index", i).Msg("Upkeep")`
$DIR/integration-tests/smoke/automation_test.go: `time.Sleep(30 * time.Second)`
$DIR/integration-tests/smoke/automation_test.go: `l.Info().Msg("Making sure the counter starts increasing again")`
$DIR/integration-tests/smoke/automation_test.go: `gom.Eventually(func(g gomega.Gomega) {
// Check if the upkeeps are performing multiple times by analyzing their counters
for i := 0; i < len(upkeepIDs); i++ {
counter, err := consumers[i].Counter(testcontext.Get(t))
require.NoError(t, err, "Failed to retrieve consumer counter for upkeep at index %d", i)
expect := int64(5)
l.Info().Int64("Upkeeps Performed", counter.Int64()).Int("Upkeep Index", i).Msg("Number of upkeeps performed")
g.Expect(counter.Int64()).Should(gomega.BeNumerically(">=", countersAfterSetMatch[i].Int64()+expect),
"Expected consumer counter to be greater than %d, but got %d", countersAfterSetMatch[i].Int64()+expect, counter.Int64())
}
}, "5m", "1s").Should(gomega.Succeed())`
$DIR/integration-tests/smoke/automation_test.go: `l.Info().Int64("Upkeeps Performed", counter.Int64()).Int("Upkeep Index", i).Msg("Number of upkeeps performed")`
$DIR/integration-tests/smoke/automation_test.go: `g.Expect(counter.Int64()).Should(gomega.BeNumerically(">=", countersAfterSetMatch[i].Int64()+expect),
"Expected consumer counter to be greater than %d, but got %d", countersAfterSetMatch[i].Int64()+expect, counter.Int64())`
$DIR/integration-tests/smoke/automation_test.go: `t.Run(name, func(t *testing.T) {
t.Parallel()
l := logging.GetTestLogger(t)
config, err := tc.GetConfig("Smoke", tc.Automation)
require.NoError(t, err, "Failed to get config")
a := setupAutomationTestDocker(
t, registryVersion, automationDefaultRegistryConfig(config), false, false, &config,
)
sb, err := a.ChainClient.Client.BlockNumber(context.Background())
require.NoError(t, err, "Failed to get start block")
consumers, upkeepIDs := actions_seth.DeployConsumers(
t,
a.ChainClient,
a.Registry,
a.Registrar,
a.LinkToken,
defaultAmountOfUpkeeps,
big.NewInt(1),
automationDefaultUpkeepGasLimit,
false,
false,
)
t.Cleanup(func() {
actions_seth.GetStalenessReportCleanupFn(t, a.Logger, a.ChainClient, sb, a.Registry, registryVersion)()
})
l.Info().Msg("Making sure for 2m no upkeeps are performed")
gom := gomega.NewGomegaWithT(t)
// Since the upkeep is currently underfunded, check that it doesn't get executed
gom.Consistently(func(g gomega.Gomega) {
for i := 0; i < len(upkeepIDs); i++ {
counter, err := consumers[i].Counter(testcontext.Get(t))
g.Expect(err).ShouldNot(gomega.HaveOccurred(), "Calling consumer's counter shouldn't fail")
g.Expect(counter.Int64()).Should(gomega.Equal(int64(0)),
"Expected consumer counter to remain zero, but got %d", counter.Int64())
}
}, "2m", "1s").Should(gomega.Succeed()) // ~1m for setup, 1m assertion
// Grant permission to the registry to fund the upkeep
err = a.LinkToken.Approve(a.Registry.Address(), big.NewInt(0).Mul(big.NewInt(9e18), big.NewInt(int64(len(upkeepIDs)))))
require.NoError(t, err, "Could not approve permissions for the registry on the link token contract")
l.Info().Msg("Adding funds to the upkeeps")
for i := 0; i < len(upkeepIDs); i++ {
// Add funds to the upkeep whose ID we know from above
err = a.Registry.AddUpkeepFunds(upkeepIDs[i], big.NewInt(9e18))
require.NoError(t, err, "Unable to add upkeep")
}
l.Info().Msg("Waiting for 2m for all contracts to perform at least one upkeep")
// Now the new upkeep should be performing because we added enough funds
gom.Eventually(func(g gomega.Gomega) {
for i := 0; i < len(upkeepIDs); i++ {
counter, err := consumers[0].Counter(testcontext.Get(t))
g.Expect(err).ShouldNot(gomega.HaveOccurred(), "Calling consumer's counter shouldn't fail")
g.Expect(counter.Int64()).Should(gomega.BeNumerically(">", int64(0)),
"Expected consumer counter to be greater than 0, but got %d", counter.Int64())
}
}, "2m", "1s").Should(gomega.Succeed()) // ~1m for setup, 1m assertion
})`
$DIR/integration-tests/smoke/automation_test.go: `t.Cleanup(func() {
actions_seth.GetStalenessReportCleanupFn(t, a.Logger, a.ChainClient, sb, a.Registry, registryVersion)()
})`
$DIR/integration-tests/smoke/automation_test.go: `actions_seth.GetStalenessReportCleanupFn(t, a.Logger, a.ChainClient, sb, a.Registry, registryVersion)()`
$DIR/integration-tests/smoke/automation_test.go: `l.Info().Msg("Making sure for 2m no upkeeps are performed")`
$DIR/integration-tests/smoke/automation_test.go: `gom.Consistently(func(g gomega.Gomega) {
for i := 0; i < len(upkeepIDs); i++ {
counter, err := consumers[i].Counter(testcontext.Get(t))
g.Expect(err).ShouldNot(gomega.HaveOccurred(), "Calling consumer's counter shouldn't fail")
g.Expect(counter.Int64()).Should(gomega.Equal(int64(0)),
"Expected consumer counter to remain zero, but got %d", counter.Int64())
}
}, "2m", "1s").Should(gomega.Succeed())`
$DIR/integration-tests/smoke/automation_test.go: `g.Expect(err).ShouldNot(gomega.HaveOccurred(), "Calling consumer's counter shouldn't fail")`
$DIR/integration-tests/smoke/automation_test.go: `g.Expect(counter.Int64()).Should(gomega.Equal(int64(0)),
"Expected consumer counter to remain zero, but got %d", counter.Int64())`
$DIR/integration-tests/smoke/automation_test.go: `err = a.LinkToken.Approve(a.Registry.Address(), big.NewInt(0).Mul(big.NewInt(9e18), big.NewInt(int64(len(upkeepIDs)))))`
$DIR/integration-tests/smoke/automation_test.go: `l.Info().Msg("Adding funds to the upkeeps")`
$DIR/integration-tests/smoke/automation_test.go: `err = a.Registry.AddUpkeepFunds(upkeepIDs[i], big.NewInt(9e18))`
$DIR/integration-tests/smoke/automation_test.go: `l.Info().Msg("Waiting for 2m for all contracts to perform at least one upkeep")`
$DIR/integration-tests/smoke/automation_test.go: `gom.Eventually(func(g gomega.Gomega) {
for i := 0; i < len(upkeepIDs); i++ {
counter, err := consumers[0].Counter(testcontext.Get(t))
g.Expect(err).ShouldNot(gomega.HaveOccurred(), "Calling consumer's counter shouldn't fail")
g.Expect(counter.Int64()).Should(gomega.BeNumerically(">", int64(0)),
"Expected consumer counter to be greater than 0, but got %d", counter.Int64())
}
}, "2m", "1s").Should(gomega.Succeed())`
$DIR/integration-tests/smoke/automation_test.go: `g.Expect(err).ShouldNot(gomega.HaveOccurred(), "Calling consumer's counter shouldn't fail")`
$DIR/integration-tests/smoke/automation_test.go: `g.Expect(counter.Int64()).Should(gomega.BeNumerically(">", int64(0)),
"Expected consumer counter to be greater than 0, but got %d", counter.Int64())`
$DIR/integration-tests/smoke/automation_test.go: `t.Run(name, func(t *testing.T) {
t.Parallel()
l := logging.GetTestLogger(t)
config, err := tc.GetConfig("Smoke", tc.Automation)
require.NoError(t, err, "Failed to get config")
a := setupAutomationTestDocker(
t, registryVersion, automationDefaultRegistryConfig(config), false, false, &config,
)
sb, err := a.ChainClient.Client.BlockNumber(context.Background())
require.NoError(t, err, "Failed to get start block")
consumers, upkeepIDs := actions_seth.DeployConsumers(
t,
a.ChainClient,
a.Registry,
a.Registrar,
a.LinkToken,
defaultAmountOfUpkeeps,
big.NewInt(automationDefaultLinkFunds),
automationDefaultUpkeepGasLimit,
false,
false,
)
t.Cleanup(func() {
actions_seth.GetStalenessReportCleanupFn(t, a.Logger, a.ChainClient, sb, a.Registry, registryVersion)()
})
gom := gomega.NewGomegaWithT(t)
gom.Eventually(func(g gomega.Gomega) {
// Check if the upkeeps are performing multiple times by analyzing their counters and checking they are greater than 5
for i := 0; i < len(upkeepIDs); i++ {
counter, err := consumers[i].Counter(testcontext.Get(t))
g.Expect(err).ShouldNot(gomega.HaveOccurred(), "Failed to retrieve consumer counter for upkeep at index %d", i)
g.Expect(counter.Int64()).Should(gomega.BeNumerically(">", int64(5)),
"Expected consumer counter to be greater than 5, but got %d", counter.Int64())
l.Info().Int("Upkeep Index", i).Int64("Upkeep counter", counter.Int64()).Msg("Number of upkeeps performed")
}
}, "5m", "1s").Should(gomega.Succeed()) // ~1m for cluster setup, ~2m for performing each upkeep 5 times, ~2m buffer
// pause all the registered upkeeps via the registry
for i := 0; i < len(upkeepIDs); i++ {
err := a.Registry.PauseUpkeep(upkeepIDs[i])
require.NoError(t, err, "Could not pause upkeep at index %d", i)
}
var countersAfterPause = make([]*big.Int, len(upkeepIDs))
for i := 0; i < len(upkeepIDs); i++ {
// Obtain the amount of times the upkeep has been executed so far
countersAfterPause[i], err = consumers[i].Counter(testcontext.Get(t))
require.NoError(t, err, "Failed to retrieve consumer counter for upkeep at index %d", i)
l.Info().Int("Upkeep Index", i).Int64("Upkeeps Performed", countersAfterPause[i].Int64()).Msg("Paused Upkeep")
}
gom.Consistently(func(g gomega.Gomega) {
for i := 0; i < len(upkeepIDs); i++ {
// In most cases counters should remain constant, but there might be a straggling perform tx which
// gets committed later and increases counter by 1
latestCounter, err := consumers[i].Counter(testcontext.Get(t))
g.Expect(err).ShouldNot(gomega.HaveOccurred(), "Failed to retrieve consumer counter for upkeep at index %d", i)
g.Expect(latestCounter.Int64()).Should(gomega.BeNumerically("<=", countersAfterPause[i].Int64()+1),
"Expected consumer counter not have increased more than %d, but got %d",
countersAfterPause[i].Int64()+1, latestCounter.Int64())
}
}, "1m", "1s").Should(gomega.Succeed())
// unpause all the registered upkeeps via the registry
for i := 0; i < len(upkeepIDs); i++ {
err := a.Registry.UnpauseUpkeep(upkeepIDs[i])
require.NoError(t, err, "Could not unpause upkeep at index %d", i)
}
gom.Eventually(func(g gomega.Gomega) {
// Check if the upkeeps are performing multiple times by analysing their counters and checking they are greater than 5 + numbers of performing before pause
for i := 0; i < len(upkeepIDs); i++ {
counter, err := consumers[i].Counter(testcontext.Get(t))
g.Expect(err).ShouldNot(gomega.HaveOccurred(), "Failed to retrieve consumer counter for upkeep at index %d", i)
g.Expect(counter.Int64()).Should(gomega.BeNumerically(">", countersAfterPause[i].Int64()+1),
"Expected consumer counter to be greater than %d, but got %d", countersAfterPause[i].Int64()+1, counter.Int64())
l.Info().Int64("Upkeep counter", counter.Int64()).Msg("Number of upkeeps performed")
}
}, "2m", "1s").Should(gomega.Succeed()) // ~1m to perform, 1m buffer
})`
$DIR/integration-tests/smoke/automation_test.go: `t.Cleanup(func() {
actions_seth.GetStalenessReportCleanupFn(t, a.Logger, a.ChainClient, sb, a.Registry, registryVersion)()
})`
$DIR/integration-tests/smoke/automation_test.go: `actions_seth.GetStalenessReportCleanupFn(t, a.Logger, a.ChainClient, sb, a.Registry, registryVersion)()`
$DIR/integration-tests/smoke/automation_test.go: `gom.Eventually(func(g gomega.Gomega) {
// Check if the upkeeps are performing multiple times by analyzing their counters and checking they are greater than 5
for i := 0; i < len(upkeepIDs); i++ {
counter, err := consumers[i].Counter(testcontext.Get(t))
g.Expect(err).ShouldNot(gomega.HaveOccurred(), "Failed to retrieve consumer counter for upkeep at index %d", i)
g.Expect(counter.Int64()).Should(gomega.BeNumerically(">", int64(5)),
"Expected consumer counter to be greater than 5, but got %d", counter.Int64())
l.Info().Int("Upkeep Index", i).Int64("Upkeep counter", counter.Int64()).Msg("Number of upkeeps performed")
}
}, "5m", "1s").Should(gomega.Succeed())`
$DIR/integration-tests/smoke/automation_test.go: `g.Expect(err).ShouldNot(gomega.HaveOccurred(), "Failed to retrieve consumer counter for upkeep at index %d", i)`
$DIR/integration-tests/smoke/automation_test.go: `g.Expect(counter.Int64()).Should(gomega.BeNumerically(">", int64(5)),
"Expected consumer counter to be greater than 5, but got %d", counter.Int64())`
$DIR/integration-tests/smoke/automation_test.go: `l.Info().Int("Upkeep Index", i).Int64("Upkeep counter", counter.Int64()).Msg("Number of upkeeps performed")`
$DIR/integration-tests/smoke/automation_test.go: `countersAfterPause[i], err = consumers[i].Counter(testcontext.Get(t))`
$DIR/integration-tests/smoke/automation_test.go: `l.Info().Int("Upkeep Index", i).Int64("Upkeeps Performed", countersAfterPause[i].Int64()).Msg("Paused Upkeep")`
$DIR/integration-tests/smoke/automation_test.go: `gom.Consistently(func(g gomega.Gomega) {
for i := 0; i < len(upkeepIDs); i++ {
// In most cases counters should remain constant, but there might be a straggling perform tx which
// gets committed later and increases counter by 1
latestCounter, err := consumers[i].Counter(testcontext.Get(t))
g.Expect(err).ShouldNot(gomega.HaveOccurred(), "Failed to retrieve consumer counter for upkeep at index %d", i)
g.Expect(latestCounter.Int64()).Should(gomega.BeNumerically("<=", countersAfterPause[i].Int64()+1),
"Expected consumer counter not have increased more than %d, but got %d",
countersAfterPause[i].Int64()+1, latestCounter.Int64())
}
}, "1m", "1s").Should(gomega.Succeed())`
$DIR/integration-tests/smoke/automation_test.go: `g.Expect(err).ShouldNot(gomega.HaveOccurred(), "Failed to retrieve consumer counter for upkeep at index %d", i)`
$DIR/integration-tests/smoke/automation_test.go: `g.Expect(latestCounter.Int64()).Should(gomega.BeNumerically("<=", countersAfterPause[i].Int64()+1),
"Expected consumer counter not have increased more than %d, but got %d",
countersAfterPause[i].Int64()+1, latestCounter.Int64())`
$DIR/integration-tests/smoke/automation_test.go: `gom.Eventually(func(g gomega.Gomega) {
// Check if the upkeeps are performing multiple times by analysing their counters and checking they are greater than 5 + numbers of performing before pause
for i := 0; i < len(upkeepIDs); i++ {
counter, err := consumers[i].Counter(testcontext.Get(t))
g.Expect(err).ShouldNot(gomega.HaveOccurred(), "Failed to retrieve consumer counter for upkeep at index %d", i)
g.Expect(counter.Int64()).Should(gomega.BeNumerically(">", countersAfterPause[i].Int64()+1),
"Expected consumer counter to be greater than %d, but got %d", countersAfterPause[i].Int64()+1, counter.Int64())
l.Info().Int64("Upkeep counter", counter.Int64()).Msg("Number of upkeeps performed")
}
}, "2m", "1s").Should(gomega.Succeed())`
$DIR/integration-tests/smoke/automation_test.go: `g.Expect(err).ShouldNot(gomega.HaveOccurred(), "Failed to retrieve consumer counter for upkeep at index %d", i)`
$DIR/integration-tests/smoke/automation_test.go: `g.Expect(counter.Int64()).Should(gomega.BeNumerically(">", countersAfterPause[i].Int64()+1),
"Expected consumer counter to be greater than %d, but got %d", countersAfterPause[i].Int64()+1, counter.Int64())`
$DIR/integration-tests/smoke/automation_test.go: `l.Info().Int64("Upkeep counter", counter.Int64()).Msg("Number of upkeeps performed")`
$DIR/integration-tests/smoke/automation_test.go: `t.Run(name, func(t *testing.T) {
t.Parallel()
l := logging.GetTestLogger(t)
config, err := tc.GetConfig("Smoke", tc.Automation)
require.NoError(t, err, "Failed to get config")
a := setupAutomationTestDocker(
t, registryVersion, automationDefaultRegistryConfig(config), false, false, &config,
)
sb, err := a.ChainClient.Client.BlockNumber(context.Background())
require.NoError(t, err, "Failed to get start block")
consumers, upkeepIDs := actions_seth.DeployConsumers(
t,
a.ChainClient,
a.Registry,
a.Registrar,
a.LinkToken,
defaultAmountOfUpkeeps,
big.NewInt(automationDefaultLinkFunds),
automationDefaultUpkeepGasLimit,
false,
false,
)
t.Cleanup(func() {
actions_seth.GetStalenessReportCleanupFn(t, a.Logger, a.ChainClient, sb, a.Registry, registryVersion)()
})
var initialCounters = make([]*big.Int, len(upkeepIDs))
gom := gomega.NewGomegaWithT(t)
// Observe that the upkeeps which are initially registered are performing and
// store the value of their initial counters in order to compare later on that the value increased.
gom.Eventually(func(g gomega.Gomega) {
for i := 0; i < len(upkeepIDs); i++ {
counter, err := consumers[i].Counter(testcontext.Get(t))
initialCounters[i] = counter
g.Expect(err).ShouldNot(gomega.HaveOccurred(), "Failed to retrieve consumer counter for upkeep at index %d", i)
g.Expect(counter.Int64()).Should(gomega.BeNumerically(">", int64(0)),
"Expected consumer counter to be greater than 0, but got %d", counter.Int64())
l.Info().
Int64("Upkeep counter", counter.Int64()).
Int64("Upkeep index", int64(i)).
Msg("Number of upkeeps performed")
}
}, "4m", "1s").Should(gomega.Succeed()) // ~1m for cluster setup, ~1m for performing each upkeep once, ~2m buffer
newConsumers, _ := actions_seth.RegisterNewUpkeeps(t, a.ChainClient, a.LinkToken,
a.Registry, a.Registrar, automationDefaultUpkeepGasLimit, 1)
// We know that newConsumers has size 1, so we can just use the newly registered upkeep.
newUpkeep := newConsumers[0]
// Test that the newly registered upkeep is also performing.
gom.Eventually(func(g gomega.Gomega) {
counter, err := newUpkeep.Counter(testcontext.Get(t))
g.Expect(err).ShouldNot(gomega.HaveOccurred(), "Calling newly deployed upkeep's counter shouldn't fail")
g.Expect(counter.Int64()).Should(gomega.BeNumerically(">", int64(0)),
"Expected newly registered upkeep's counter to be greater than 0, but got %d", counter.Int64())
l.Info().Int64("Upkeeps Performed", counter.Int64()).Msg("Newly Registered Upkeep")
}, "2m", "1s").Should(gomega.Succeed()) // ~1m for upkeep to perform, 1m buffer
gom.Eventually(func(g gomega.Gomega) {
for i := 0; i < len(upkeepIDs); i++ {
currentCounter, err := consumers[i].Counter(testcontext.Get(t))
g.Expect(err).ShouldNot(gomega.HaveOccurred(), "Calling consumer's counter shouldn't fail")
l.Info().
Int64("Upkeep index", int64(i)).
Int64("Upkeep counter", currentCounter.Int64()).
Int64("initial counter", initialCounters[i].Int64()).
Msg("Number of upkeeps performed")
g.Expect(currentCounter.Int64()).Should(gomega.BeNumerically(">", initialCounters[i].Int64()),
"Expected counter to have increased from initial value of %s, but got %s",
initialCounters[i], currentCounter)
}
}, "2m", "1s").Should(gomega.Succeed()) // ~1m for upkeeps to perform, 1m buffer
})`
$DIR/integration-tests/smoke/automation_test.go: `t.Cleanup(func() {
actions_seth.GetStalenessReportCleanupFn(t, a.Logger, a.ChainClient, sb, a.Registry, registryVersion)()
})`
$DIR/integration-tests/smoke/automation_test.go: `actions_seth.GetStalenessReportCleanupFn(t, a.Logger, a.ChainClient, sb, a.Registry, registryVersion)()`
$DIR/integration-tests/smoke/automation_test.go: `gom.Eventually(func(g gomega.Gomega) {
for i := 0; i < len(upkeepIDs); i++ {
counter, err := consumers[i].Counter(testcontext.Get(t))
initialCounters[i] = counter
g.Expect(err).ShouldNot(gomega.HaveOccurred(), "Failed to retrieve consumer counter for upkeep at index %d", i)
g.Expect(counter.Int64()).Should(gomega.BeNumerically(">", int64(0)),
"Expected consumer counter to be greater than 0, but got %d", counter.Int64())
l.Info().
Int64("Upkeep counter", counter.Int64()).
Int64("Upkeep index", int64(i)).
Msg("Number of upkeeps performed")
}
}, "4m", "1s").Should(gomega.Succeed())`
$DIR/integration-tests/smoke/automation_test.go: `initialCounters[i] = counter`
$DIR/integration-tests/smoke/automation_test.go: `g.Expect(err).ShouldNot(gomega.HaveOccurred(), "Failed to retrieve consumer counter for upkeep at index %d", i)`
$DIR/integration-tests/smoke/automation_test.go: `g.Expect(counter.Int64()).Should(gomega.BeNumerically(">", int64(0)),
"Expected consumer counter to be greater than 0, but got %d", counter.Int64())`
$DIR/integration-tests/smoke/automation_test.go: `l.Info().
Int64("Upkeep counter", counter.Int64()).
Int64("Upkeep index", int64(i)).
Msg("Number of upkeeps performed")`
$DIR/integration-tests/smoke/automation_test.go: `gom.Eventually(func(g gomega.Gomega) {
counter, err := newUpkeep.Counter(testcontext.Get(t))
g.Expect(err).ShouldNot(gomega.HaveOccurred(), "Calling newly deployed upkeep's counter shouldn't fail")
g.Expect(counter.Int64()).Should(gomega.BeNumerically(">", int64(0)),
"Expected newly registered upkeep's counter to be greater than 0, but got %d", counter.Int64())
l.Info().Int64("Upkeeps Performed", counter.Int64()).Msg("Newly Registered Upkeep")
}, "2m", "1s").Should(gomega.Succeed())`
$DIR/integration-tests/smoke/automation_test.go: `g.Expect(err).ShouldNot(gomega.HaveOccurred(), "Calling newly deployed upkeep's counter shouldn't fail")`
$DIR/integration-tests/smoke/automation_test.go: `g.Expect(counter.Int64()).Should(gomega.BeNumerically(">", int64(0)),
"Expected newly registered upkeep's counter to be greater than 0, but got %d", counter.Int64())`
$DIR/integration-tests/smoke/automation_test.go: `l.Info().Int64("Upkeeps Performed", counter.Int64()).Msg("Newly Registered Upkeep")`
$DIR/integration-tests/smoke/automation_test.go: `gom.Eventually(func(g gomega.Gomega) {
for i := 0; i < len(upkeepIDs); i++ {
currentCounter, err := consumers[i].Counter(testcontext.Get(t))
g.Expect(err).ShouldNot(gomega.HaveOccurred(), "Calling consumer's counter shouldn't fail")
l.Info().
Int64("Upkeep index", int64(i)).
Int64("Upkeep counter", currentCounter.Int64()).
Int64("initial counter", initialCounters[i].Int64()).
Msg("Number of upkeeps performed")
g.Expect(currentCounter.Int64()).Should(gomega.BeNumerically(">", initialCounters[i].Int64()),
"Expected counter to have increased from initial value of %s, but got %s",
initialCounters[i], currentCounter)
}
}, "2m", "1s").Should(gomega.Succeed())`
$DIR/integration-tests/smoke/automation_test.go: `g.Expect(err).ShouldNot(gomega.HaveOccurred(), "Calling consumer's counter shouldn't fail")`
$DIR/integration-tests/smoke/automation_test.go: `l.Info().
Int64("Upkeep index", int64(i)).
Int64("Upkeep counter", currentCounter.Int64()).
Int64("initial counter", initialCounters[i].Int64()).
Msg("Number of upkeeps performed")`
$DIR/integration-tests/smoke/automation_test.go: `g.Expect(currentCounter.Int64()).Should(gomega.BeNumerically(">", initialCounters[i].Int64()),
"Expected counter to have increased from initial value of %s, but got %s",
initialCounters[i], currentCounter)`
$DIR/integration-tests/smoke/automation_test.go: `t.Run(name, func(t *testing.T) {
t.Parallel()
config, err := tc.GetConfig("Smoke", tc.Automation)
require.NoError(t, err, "Failed to get config")
a := setupAutomationTestDocker(
t, registryVersion, automationDefaultRegistryConfig(config), false, false, &config,
)
sb, err := a.ChainClient.Client.BlockNumber(context.Background())
require.NoError(t, err, "Failed to get start block")
consumers, upkeepIDs := actions_seth.DeployConsumers(
t,
a.ChainClient,
a.Registry,
a.Registrar,
a.LinkToken,
defaultAmountOfUpkeeps,
big.NewInt(automationDefaultLinkFunds),
automationDefaultUpkeepGasLimit,
false,
false,
)
t.Cleanup(func() {
actions_seth.GetStalenessReportCleanupFn(t, a.Logger, a.ChainClient, sb, a.Registry, registryVersion)()
})
gom := gomega.NewGomegaWithT(t)
// Observe that the upkeeps which are initially registered are performing
gom.Eventually(func(g gomega.Gomega) {
for i := 0; i < len(upkeepIDs); i++ {
counter, err := consumers[i].Counter(testcontext.Get(t))
g.Expect(err).ShouldNot(gomega.HaveOccurred(), "Failed to retrieve consumer counter for upkeep at index %d", i)
g.Expect(counter.Int64()).Should(gomega.BeNumerically(">", int64(0)),
"Expected consumer counter to be greater than 0, but got %d")
}
}, "4m", "1s").Should(gomega.Succeed()) // ~1m for cluster setup, ~1m for performing each upkeep once, ~2m buffer
// Pause the registry
err = a.Registry.Pause()
require.NoError(t, err, "Error pausing registry")
// Store how many times each upkeep performed once the registry was successfully paused
var countersAfterPause = make([]*big.Int, len(upkeepIDs))
for i := 0; i < len(upkeepIDs); i++ {
countersAfterPause[i], err = consumers[i].Counter(testcontext.Get(t))
require.NoError(t, err, "Failed to retrieve consumer counter for upkeep at index %d", i)
}
// After we paused the registry, the counters of all the upkeeps should stay constant
// because they are no longer getting serviced
gom.Consistently(func(g gomega.Gomega) {
for i := 0; i < len(upkeepIDs); i++ {
latestCounter, err := consumers[i].Counter(testcontext.Get(t))
g.Expect(err).ShouldNot(gomega.HaveOccurred(), "Failed to retrieve consumer counter for upkeep at index %d", i)
g.Expect(latestCounter.Int64()).Should(gomega.Equal(countersAfterPause[i].Int64()),
"Expected consumer counter to remain constant at %d, but got %d",
countersAfterPause[i].Int64(), latestCounter.Int64())
}
}, "1m", "1s").Should(gomega.Succeed())
})`
$DIR/integration-tests/smoke/automation_test.go: `t.Cleanup(func() {
actions_seth.GetStalenessReportCleanupFn(t, a.Logger, a.ChainClient, sb, a.Registry, registryVersion)()
})`
$DIR/integration-tests/smoke/automation_test.go: `actions_seth.GetStalenessReportCleanupFn(t, a.Logger, a.ChainClient, sb, a.Registry, registryVersion)()`
$DIR/integration-tests/smoke/automation_test.go: `gom.Eventually(func(g gomega.Gomega) {
for i := 0; i < len(upkeepIDs); i++ {
counter, err := consumers[i].Counter(testcontext.Get(t))
g.Expect(err).ShouldNot(gomega.HaveOccurred(), "Failed to retrieve consumer counter for upkeep at index %d", i)
g.Expect(counter.Int64()).Should(gomega.BeNumerically(">", int64(0)),
"Expected consumer counter to be greater than 0, but got %d")
}
}, "4m", "1s").Should(gomega.Succeed())`
$DIR/integration-tests/smoke/automation_test.go: `g.Expect(err).ShouldNot(gomega.HaveOccurred(), "Failed to retrieve consumer counter for upkeep at index %d", i)`
$DIR/integration-tests/smoke/automation_test.go: `g.Expect(counter.Int64()).Should(gomega.BeNumerically(">", int64(0)),
"Expected consumer counter to be greater than 0, but got %d")`
$DIR/integration-tests/smoke/automation_test.go: `err = a.Registry.Pause()`
$DIR/integration-tests/smoke/automation_test.go: `countersAfterPause[i], err = consumers[i].Counter(testcontext.Get(t))`
$DIR/integration-tests/smoke/automation_test.go: `gom.Consistently(func(g gomega.Gomega) {
for i := 0; i < len(upkeepIDs); i++ {
latestCounter, err := consumers[i].Counter(testcontext.Get(t))
g.Expect(err).ShouldNot(gomega.HaveOccurred(), "Failed to retrieve consumer counter for upkeep at index %d", i)
g.Expect(latestCounter.Int64()).Should(gomega.Equal(countersAfterPause[i].Int64()),
"Expected consumer counter to remain constant at %d, but got %d",
countersAfterPause[i].Int64(), latestCounter.Int64())
}
}, "1m", "1s").Should(gomega.Succeed())`
$DIR/integration-tests/smoke/automation_test.go: `g.Expect(err).ShouldNot(gomega.HaveOccurred(), "Failed to retrieve consumer counter for upkeep at index %d", i)`
$DIR/integration-tests/smoke/automation_test.go: `g.Expect(latestCounter.Int64()).Should(gomega.Equal(countersAfterPause[i].Int64()),
"Expected consumer counter to remain constant at %d, but got %d",
countersAfterPause[i].Int64(), latestCounter.Int64())`
$DIR/integration-tests/smoke/automation_test.go: `t.Run(name, func(t *testing.T) {
t.Parallel()
l := logging.GetTestLogger(t)
config, err := tc.GetConfig("Smoke", tc.Automation)
require.NoError(t, err, "Failed to get config")
a := setupAutomationTestDocker(
t, registryVersion, automationDefaultRegistryConfig(config), false, false, &config,
)
sb, err := a.ChainClient.Client.BlockNumber(context.Background())
require.NoError(t, err, "Failed to get start block")
consumers, upkeepIDs := actions_seth.DeployConsumers(
t,
a.ChainClient,
a.Registry,
a.Registrar,
a.LinkToken,
defaultAmountOfUpkeeps,
big.NewInt(automationDefaultLinkFunds),
automationDefaultUpkeepGasLimit,
false,
false,
)
t.Cleanup(func() {
actions_seth.GetStalenessReportCleanupFn(t, a.Logger, a.ChainClient, sb, a.Registry, registryVersion)()
})
gom := gomega.NewGomegaWithT(t)
nodesWithoutBootstrap := a.ChainlinkNodes[1:]
var initialCounters = make([]*big.Int, len(upkeepIDs))
// Watch upkeeps being performed and store their counters in order to compare them later in the test
gom.Eventually(func(g gomega.Gomega) {
for i := 0; i < len(upkeepIDs); i++ {
counter, err := consumers[i].Counter(testcontext.Get(t))
initialCounters[i] = counter
l.Info().Int64("Upkeeps Performed", counter.Int64()).Int("Upkeep Index", i).Msg("Number of upkeeps performed")
g.Expect(err).ShouldNot(gomega.HaveOccurred(), "Failed to retrieve consumer counter for upkeep at index %d", i)
g.Expect(counter.Int64()).Should(gomega.BeNumerically(">", int64(0)),
"Expected consumer counter to be greater than 0, but got %d", counter.Int64())
}
}, "4m", "1s").Should(gomega.Succeed()) // ~1m for cluster setup, ~1m for performing each upkeep once, ~2m buffer
// Take down 1 node. Currently, using 4 nodes so f=1 and is the max nodes that can go down.
err = nodesWithoutBootstrap[0].MustDeleteJob("1")
require.NoError(t, err, "Error deleting job from Chainlink node")
l.Info().Msg("Successfully managed to take down the first half of the nodes")
// Assert that upkeeps are still performed and their counters have increased
gom.Eventually(func(g gomega.Gomega) {
for i := 0; i < len(upkeepIDs); i++ {
currentCounter, err := consumers[i].Counter(testcontext.Get(t))
l.Info().Int64("Upkeeps Performed", currentCounter.Int64()).Int("Upkeep Index", i).Msg("Number of upkeeps performed")
g.Expect(err).ShouldNot(gomega.HaveOccurred(), "Failed to retrieve consumer counter for upkeep at index %d", i)
g.Expect(currentCounter.Int64()).Should(gomega.BeNumerically(">", initialCounters[i].Int64()),
"Expected counter to have increased from initial value of %s, but got %s",
initialCounters[i], currentCounter)
}
}, "2m", "1s").Should(gomega.Succeed()) // ~1m for each upkeep to perform once, 1m buffer
// Take down the rest
restOfNodesDown := nodesWithoutBootstrap[1:]
for _, nodeToTakeDown := range restOfNodesDown {
err = nodeToTakeDown.MustDeleteJob("1")
require.NoError(t, err, "Error deleting job from Chainlink node")
}
l.Info().Msg("Successfully managed to take down the second half of the nodes")
// See how many times each upkeep was executed
var countersAfterNoMoreNodes = make([]*big.Int, len(upkeepIDs))
for i := 0; i < len(upkeepIDs); i++ {
countersAfterNoMoreNodes[i], err = consumers[i].Counter(testcontext.Get(t))
require.NoError(t, err, "Failed to retrieve consumer counter for upkeep at index %d", i)
l.Info().Int("Upkeep Index", i).Int64("Performed", countersAfterNoMoreNodes[i].Int64()).Msg("Upkeeps Performed")
}
// Once all the nodes are taken down, there might be some straggling transactions which went through before
// all the nodes were taken down
gom.Consistently(func(g gomega.Gomega) {
for i := 0; i < len(upkeepIDs); i++ {
latestCounter, err := consumers[i].Counter(testcontext.Get(t))
g.Expect(err).ShouldNot(gomega.HaveOccurred(), "Failed to retrieve consumer counter for upkeep at index %d", i)
g.Expect(latestCounter.Int64()).Should(gomega.BeNumerically("<=", countersAfterNoMoreNodes[i].Int64()+1),
"Expected consumer counter to not have increased more than %d, but got %d",
countersAfterNoMoreNodes[i].Int64()+1, latestCounter.Int64())
}
}, "2m", "1s").Should(gomega.Succeed())
})`
$DIR/integration-tests/smoke/automation_test.go: `t.Cleanup(func() {
actions_seth.GetStalenessReportCleanupFn(t, a.Logger, a.ChainClient, sb, a.Registry, registryVersion)()
})`
$DIR/integration-tests/smoke/automation_test.go: `actions_seth.GetStalenessReportCleanupFn(t, a.Logger, a.ChainClient, sb, a.Registry, registryVersion)()`
$DIR/integration-tests/smoke/automation_test.go: `gom.Eventually(func(g gomega.Gomega) {
for i := 0; i < len(upkeepIDs); i++ {
counter, err := consumers[i].Counter(testcontext.Get(t))
initialCounters[i] = counter
l.Info().Int64("Upkeeps Performed", counter.Int64()).Int("Upkeep Index", i).Msg("Number of upkeeps performed")
g.Expect(err).ShouldNot(gomega.HaveOccurred(), "Failed to retrieve consumer counter for upkeep at index %d", i)
g.Expect(counter.Int64()).Should(gomega.BeNumerically(">", int64(0)),
"Expected consumer counter to be greater than 0, but got %d", counter.Int64())
}
}, "4m", "1s").Should(gomega.Succeed())`
$DIR/integration-tests/smoke/automation_test.go: `initialCounters[i] = counter`
$DIR/integration-tests/smoke/automation_test.go: `l.Info().Int64("Upkeeps Performed", counter.Int64()).Int("Upkeep Index", i).Msg("Number of upkeeps performed")`
$DIR/integration-tests/smoke/automation_test.go: `g.Expect(err).ShouldNot(gomega.HaveOccurred(), "Failed to retrieve consumer counter for upkeep at index %d", i)`
$DIR/integration-tests/smoke/automation_test.go: `g.Expect(counter.Int64()).Should(gomega.BeNumerically(">", int64(0)),
"Expected consumer counter to be greater than 0, but got %d", counter.Int64())`
$DIR/integration-tests/smoke/automation_test.go: `err = nodesWithoutBootstrap[0].MustDeleteJob("1")`
$DIR/integration-tests/smoke/automation_test.go: `l.Info().Msg("Successfully managed to take down the first half of the nodes")`
$DIR/integration-tests/smoke/automation_test.go: `gom.Eventually(func(g gomega.Gomega) {
for i := 0; i < len(upkeepIDs); i++ {
currentCounter, err := consumers[i].Counter(testcontext.Get(t))
l.Info().Int64("Upkeeps Performed", currentCounter.Int64()).Int("Upkeep Index", i).Msg("Number of upkeeps performed")
g.Expect(err).ShouldNot(gomega.HaveOccurred(), "Failed to retrieve consumer counter for upkeep at index %d", i)
g.Expect(currentCounter.Int64()).Should(gomega.BeNumerically(">", initialCounters[i].Int64()),
"Expected counter to have increased from initial value of %s, but got %s",
initialCounters[i], currentCounter)
}
}, "2m", "1s").Should(gomega.Succeed())`
$DIR/integration-tests/smoke/automation_test.go: `l.Info().Int64("Upkeeps Performed", currentCounter.Int64()).Int("Upkeep Index", i).Msg("Number of upkeeps performed")`
$DIR/integration-tests/smoke/automation_test.go: `g.Expect(err).ShouldNot(gomega.HaveOccurred(), "Failed to retrieve consumer counter for upkeep at index %d", i)`
$DIR/integration-tests/smoke/automation_test.go: `g.Expect(currentCounter.Int64()).Should(gomega.BeNumerically(">", initialCounters[i].Int64()),
"Expected counter to have increased from initial value of %s, but got %s",
initialCounters[i], currentCounter)`
$DIR/integration-tests/smoke/automation_test.go: `err = nodeToTakeDown.MustDeleteJob("1")`
$DIR/integration-tests/smoke/automation_test.go: `l.Info().Msg("Successfully managed to take down the second half of the nodes")`
$DIR/integration-tests/smoke/automation_test.go: `countersAfterNoMoreNodes[i], err = consumers[i].Counter(testcontext.Get(t))`
$DIR/integration-tests/smoke/automation_test.go: `l.Info().Int("Upkeep Index", i).Int64("Performed", countersAfterNoMoreNodes[i].Int64()).Msg("Upkeeps Performed")`
$DIR/integration-tests/smoke/automation_test.go: `gom.Consistently(func(g gomega.Gomega) {
for i := 0; i < len(upkeepIDs); i++ {
latestCounter, err := consumers[i].Counter(testcontext.Get(t))
g.Expect(err).ShouldNot(gomega.HaveOccurred(), "Failed to retrieve consumer counter for upkeep at index %d", i)
g.Expect(latestCounter.Int64()).Should(gomega.BeNumerically("<=", countersAfterNoMoreNodes[i].Int64()+1),
"Expected consumer counter to not have increased more than %d, but got %d",
countersAfterNoMoreNodes[i].Int64()+1, latestCounter.Int64())
}
}, "2m", "1s").Should(gomega.Succeed())`
$DIR/integration-tests/smoke/automation_test.go: `g.Expect(err).ShouldNot(gomega.HaveOccurred(), "Failed to retrieve consumer counter for upkeep at index %d", i)`
$DIR/integration-tests/smoke/automation_test.go: `g.Expect(latestCounter.Int64()).Should(gomega.BeNumerically("<=", countersAfterNoMoreNodes[i].Int64()+1),
"Expected consumer counter to not have increased more than %d, but got %d",
countersAfterNoMoreNodes[i].Int64()+1, latestCounter.Int64())`
$DIR/integration-tests/smoke/automation_test.go: `t.Run(name, func(t *testing.T) {
t.Parallel()
config, err := tc.GetConfig("Smoke", tc.Automation)
require.NoError(t, err, "Failed to get config")
a := setupAutomationTestDocker(
t, registryVersion, automationDefaultRegistryConfig(config), false, false, &config,
)
sb, err := a.ChainClient.Client.BlockNumber(context.Background())
require.NoError(t, err, "Failed to get start block")
consumersPerformance, _ := actions_seth.DeployPerformanceConsumers(
t,
a.ChainClient,
a.Registry,
a.Registrar,
a.LinkToken,
defaultAmountOfUpkeeps,
big.NewInt(automationDefaultLinkFunds),
automationDefaultUpkeepGasLimit,
10000, // How many blocks this upkeep will be eligible from first upkeep block
5, // Interval of blocks that upkeeps are expected to be performed
100000, // How much gas should be burned on checkUpkeep() calls
4000000, // How much gas should be burned on performUpkeep() calls. Initially set higher than defaultUpkeepGasLimit
)
t.Cleanup(func() {
actions_seth.GetStalenessReportCleanupFn(t, a.Logger, a.ChainClient, sb, a.Registry, registryVersion)()
})
gom := gomega.NewGomegaWithT(t)
consumerPerformance := consumersPerformance[0]
// Initially performGas is set high, so performUpkeep reverts and no upkeep should be performed
gom.Consistently(func(g gomega.Gomega) {
// Consumer count should remain at 0
cnt, err := consumerPerformance.GetUpkeepCount(testcontext.Get(t))
g.Expect(err).ShouldNot(gomega.HaveOccurred(), "Calling consumer's Counter shouldn't fail")
g.Expect(cnt.Int64()).Should(gomega.Equal(int64(0)),
"Expected consumer counter to remain constant at %d, but got %d", 0, cnt.Int64(),
)
}, "2m", "1s").Should(gomega.Succeed()) // ~1m for setup, 1m assertion
// Set performGas on consumer to be low, so that performUpkeep starts becoming successful
err = consumerPerformance.SetPerformGasToBurn(testcontext.Get(t), big.NewInt(100000))
require.NoError(t, err, "Perform gas should be set successfully on consumer")
// Upkeep should now start performing
gom.Eventually(func(g gomega.Gomega) {
cnt, err := consumerPerformance.GetUpkeepCount(testcontext.Get(t))
g.Expect(err).ShouldNot(gomega.HaveOccurred(), "Calling consumer's Counter shouldn't fail")
g.Expect(cnt.Int64()).Should(gomega.BeNumerically(">", int64(0)),
"Expected consumer counter to be greater than 0, but got %d", cnt.Int64(),
)
}, "2m", "1s").Should(gomega.Succeed()) // ~1m to perform once, 1m buffer
})`
$DIR/integration-tests/smoke/automation_test.go: `t.Cleanup(func() {
actions_seth.GetStalenessReportCleanupFn(t, a.Logger, a.ChainClient, sb, a.Registry, registryVersion)()
})`
$DIR/integration-tests/smoke/automation_test.go: `actions_seth.GetStalenessReportCleanupFn(t, a.Logger, a.ChainClient, sb, a.Registry, registryVersion)()`
$DIR/integration-tests/smoke/automation_test.go: `gom.Consistently(func(g gomega.Gomega) {
// Consumer count should remain at 0
cnt, err := consumerPerformance.GetUpkeepCount(testcontext.Get(t))
g.Expect(err).ShouldNot(gomega.HaveOccurred(), "Calling consumer's Counter shouldn't fail")
g.Expect(cnt.Int64()).Should(gomega.Equal(int64(0)),
"Expected consumer counter to remain constant at %d, but got %d", 0, cnt.Int64(),
)
}, "2m", "1s").Should(gomega.Succeed())`
$DIR/integration-tests/smoke/automation_test.go: `g.Expect(err).ShouldNot(gomega.HaveOccurred(), "Calling consumer's Counter shouldn't fail")`
$DIR/integration-tests/smoke/automation_test.go: `g.Expect(cnt.Int64()).Should(gomega.Equal(int64(0)),
"Expected consumer counter to remain constant at %d, but got %d", 0, cnt.Int64(),
)`
$DIR/integration-tests/smoke/automation_test.go: `err = consumerPerformance.SetPerformGasToBurn(testcontext.Get(t), big.NewInt(100000))`
$DIR/integration-tests/smoke/automation_test.go: `gom.Eventually(func(g gomega.Gomega) {
cnt, err := consumerPerformance.GetUpkeepCount(testcontext.Get(t))
g.Expect(err).ShouldNot(gomega.HaveOccurred(), "Calling consumer's Counter shouldn't fail")
g.Expect(cnt.Int64()).Should(gomega.BeNumerically(">", int64(0)),
"Expected consumer counter to be greater than 0, but got %d", cnt.Int64(),
)
}, "2m", "1s").Should(gomega.Succeed())`
$DIR/integration-tests/smoke/automation_test.go: `g.Expect(err).ShouldNot(gomega.HaveOccurred(), "Calling consumer's Counter shouldn't fail")`
$DIR/integration-tests/smoke/automation_test.go: `g.Expect(cnt.Int64()).Should(gomega.BeNumerically(">", int64(0)),
"Expected consumer counter to be greater than 0, but got %d", cnt.Int64(),
)`
$DIR/integration-tests/smoke/automation_test.go: `t.Run(name, func(t *testing.T) {
t.Parallel()
l := logging.GetTestLogger(t)
config, err := tc.GetConfig("Smoke", tc.Automation)
require.NoError(t, err, "Failed to get config")
a := setupAutomationTestDocker(
t, registryVersion, automationDefaultRegistryConfig(config), false, false, &config,
)
sb, err := a.ChainClient.Client.BlockNumber(context.Background())
require.NoError(t, err, "Failed to get start block")
consumersPerformance, upkeepIDs := actions_seth.DeployPerformanceConsumers(
t,
a.ChainClient,
a.Registry,
a.Registrar,
a.LinkToken,
1, // It was impossible to investigate, why with multiple outputs it fails ONLY in CI and only for 2.1 and 2.2 versions
big.NewInt(automationDefaultLinkFunds),
automationDefaultUpkeepGasLimit,
10000, // How many blocks this upkeep will be eligible from first upkeep block
5, // Interval of blocks that upkeeps are expected to be performed
100000, // How much gas should be burned on checkUpkeep() calls
4000000, // How much gas should be burned on performUpkeep() calls. Initially set higher than defaultUpkeepGasLimit
)
t.Cleanup(func() {
actions_seth.GetStalenessReportCleanupFn(t, a.Logger, a.ChainClient, sb, a.Registry, registryVersion)()
})
gom := gomega.NewGomegaWithT(t)
nodesWithoutBootstrap := a.ChainlinkNodes[1:]
// Initially performGas is set higher than defaultUpkeepGasLimit, so no upkeep should be performed
l.Info().Msg("Making sure for 2m no upkeeps are performed")
gom.Consistently(func(g gomega.Gomega) {
for i := 0; i < len(upkeepIDs); i++ {
cnt, err := consumersPerformance[i].GetUpkeepCount(testcontext.Get(t))
g.Expect(err).ShouldNot(gomega.HaveOccurred(), "Calling consumer's counter shouldn't fail")
g.Expect(cnt.Int64()).Should(
gomega.Equal(int64(0)),
"Expected consumer counter to remain constant at %d, but got %d", 0, cnt.Int64(),
)
}
}, "2m", "1s").Should(gomega.Succeed()) // ~1m for setup, 1m assertion
// Increase gas limit for the upkeep, higher than the performGasBurn
l.Info().Msg("Increasing gas limit for upkeeps")
for i := 0; i < len(upkeepIDs); i++ {
err = a.Registry.SetUpkeepGasLimit(upkeepIDs[i], uint32(4500000))
require.NoError(t, err, "Error setting upkeep gas limit")
}
// Upkeep should now start performing
l.Info().Msg("Waiting for 4m for all contracts to perform at least one upkeep after gas limit increase")
gom.Eventually(func(g gomega.Gomega) {
for i := 0; i < len(upkeepIDs); i++ {
cnt, err := consumersPerformance[i].GetUpkeepCount(testcontext.Get(t))
g.Expect(err).ShouldNot(gomega.HaveOccurred(), "Calling consumer's counter shouldn't fail")
l.Info().Int("Upkeep index", i).Int64("Upkeep counter", cnt.Int64()).Msg("Number of upkeeps performed")
g.Expect(cnt.Int64()).Should(gomega.BeNumerically(">", int64(0)),
"Expected consumer counter to be greater than 0, but got %d", cnt.Int64(),
)
}
}, "4m", "1s").Should(gomega.Succeed()) // ~1m to perform once, 1m buffer
// Now increase the checkGasBurn on consumer, upkeep should stop performing
l.Info().Msg("Increasing check gas to burn for upkeeps")
for i := 0; i < len(upkeepIDs); i++ {
err = consumersPerformance[i].SetCheckGasToBurn(testcontext.Get(t), big.NewInt(3000000))
require.NoError(t, err, "Check gas burn should be set successfully on consumer")
}
countPerID := make(map[*big.Int]*big.Int)
// Get existing performed count
l.Info().Msg("Getting existing performed count")
for i := 0; i < len(upkeepIDs); i++ {
existingCnt, err := consumersPerformance[i].GetUpkeepCount(testcontext.Get(t))
require.NoError(t, err, "Calling consumer's counter shouldn't fail")
l.Info().
Str("UpkeepID", upkeepIDs[i].String()).
Int64("Upkeep counter", existingCnt.Int64()).
Msg("Upkeep counter when check gas increased")
countPerID[upkeepIDs[i]] = existingCnt
}
// In most cases count should remain constant, but it might increase by upto 1 due to pending perform
l.Info().Msg("Waiting for 1m for all contracts to make sure they perform at maximum 1 upkeep")
gom.Consistently(func(g gomega.Gomega) {
for i := 0; i < len(upkeepIDs); i++ {
cnt, err := consumersPerformance[i].GetUpkeepCount(testcontext.Get(t))
g.Expect(err).ShouldNot(gomega.HaveOccurred(), "Calling consumer's counter shouldn't fail")
existingCnt := countPerID[upkeepIDs[i]]
g.Expect(cnt.Int64()).Should(
gomega.BeNumerically("<=", existingCnt.Int64()+1),
"Expected consumer counter to remain less than equal %d, but got %d", existingCnt.Int64()+1, cnt.Int64(),
)
}
}, "1m", "1s").Should(gomega.Succeed())
l.Info().Msg("Getting existing performed count")
for i := 0; i < len(upkeepIDs); i++ {
existingCnt, err := consumersPerformance[i].GetUpkeepCount(testcontext.Get(t))
require.NoError(t, err, "Calling consumer's counter shouldn't fail")
l.Info().
Str("UpkeepID", upkeepIDs[i].String()).
Int64("Upkeep counter", existingCnt.Int64()).Msg("Upkeep counter when consistently block finished")
countPerID[upkeepIDs[i]] = existingCnt
}
// Now increase checkGasLimit on registry
highCheckGasLimit := automationDefaultRegistryConfig(config)
highCheckGasLimit.CheckGasLimit = uint32(5000000)
highCheckGasLimit.RegistryVersion = registryVersion
ocrConfig, err := actions.BuildAutoOCR2ConfigVarsLocal(l, nodesWithoutBootstrap, highCheckGasLimit, a.Registrar.Address(), 30*time.Second, a.Registry.RegistryOwnerAddress(), a.Registry.ChainModuleAddress(), a.Registry.ReorgProtectionEnabled())
require.NoError(t, err, "Error building OCR config")
if a.RegistrySettings.RegistryVersion == ethereum.RegistryVersion_2_0 {
err = a.Registry.SetConfig(highCheckGasLimit, ocrConfig)
} else {
err = a.Registry.SetConfigTypeSafe(ocrConfig)
}
require.NoError(t, err, "Registry config should be set successfully!")
l.Info().Msg("Waiting for 3m for all contracts to make sure they perform at maximum 1 upkeep after check gas limit increase")
// Upkeep should start performing again, and it should get regularly performed
gom.Eventually(func(g gomega.Gomega) {
for i := 0; i < len(upkeepIDs); i++ {
cnt, err := consumersPerformance[i].GetUpkeepCount(testcontext.Get(t))
g.Expect(err).ShouldNot(gomega.HaveOccurred(), "Calling consumer's Counter shouldn't fail")
existingCnt := countPerID[upkeepIDs[i]]
g.Expect(cnt.Int64()).Should(gomega.BeNumerically(">", existingCnt.Int64()),
"Expected consumer counter to be greater than %d, but got %d", existingCnt.Int64(), cnt.Int64(),
)
}
}, "3m", "1s").Should(gomega.Succeed()) // ~1m to setup cluster, 1m to perform once, 1m buffer
})`
$DIR/integration-tests/smoke/automation_test.go: `t.Cleanup(func() {
actions_seth.GetStalenessReportCleanupFn(t, a.Logger, a.ChainClient, sb, a.Registry, registryVersion)()
})`
$DIR/integration-tests/smoke/automation_test.go: `actions_seth.GetStalenessReportCleanupFn(t, a.Logger, a.ChainClient, sb, a.Registry, registryVersion)()`
$DIR/integration-tests/smoke/automation_test.go: `l.Info().Msg("Making sure for 2m no upkeeps are performed")`
$DIR/integration-tests/smoke/automation_test.go: `gom.Consistently(func(g gomega.Gomega) {
for i := 0; i < len(upkeepIDs); i++ {
cnt, err := consumersPerformance[i].GetUpkeepCount(testcontext.Get(t))
g.Expect(err).ShouldNot(gomega.HaveOccurred(), "Calling consumer's counter shouldn't fail")
g.Expect(cnt.Int64()).Should(
gomega.Equal(int64(0)),
"Expected consumer counter to remain constant at %d, but got %d", 0, cnt.Int64(),
)
}
}, "2m", "1s").Should(gomega.Succeed())`
$DIR/integration-tests/smoke/automation_test.go: `g.Expect(err).ShouldNot(gomega.HaveOccurred(), "Calling consumer's counter shouldn't fail")`
$DIR/integration-tests/smoke/automation_test.go: `g.Expect(cnt.Int64()).Should(
gomega.Equal(int64(0)),
"Expected consumer counter to remain constant at %d, but got %d", 0, cnt.Int64(),
)`
$DIR/integration-tests/smoke/automation_test.go: `l.Info().Msg("Increasing gas limit for upkeeps")`
$DIR/integration-tests/smoke/automation_test.go: `err = a.Registry.SetUpkeepGasLimit(upkeepIDs[i], uint32(4500000))`
$DIR/integration-tests/smoke/automation_test.go: `l.Info().Msg("Waiting for 4m for all contracts to perform at least one upkeep after gas limit increase")`
$DIR/integration-tests/smoke/automation_test.go: `gom.Eventually(func(g gomega.Gomega) {
for i := 0; i < len(upkeepIDs); i++ {
cnt, err := consumersPerformance[i].GetUpkeepCount(testcontext.Get(t))
g.Expect(err).ShouldNot(gomega.HaveOccurred(), "Calling consumer's counter shouldn't fail")
l.Info().Int("Upkeep index", i).Int64("Upkeep counter", cnt.Int64()).Msg("Number of upkeeps performed")
g.Expect(cnt.Int64()).Should(gomega.BeNumerically(">", int64(0)),
"Expected consumer counter to be greater than 0, but got %d", cnt.Int64(),
)
}
}, "4m", "1s").Should(gomega.Succeed())`
$DIR/integration-tests/smoke/automation_test.go: `g.Expect(err).ShouldNot(gomega.HaveOccurred(), "Calling consumer's counter shouldn't fail")`
$DIR/integration-tests/smoke/automation_test.go: `l.Info().Int("Upkeep index", i).Int64("Upkeep counter", cnt.Int64()).Msg("Number of upkeeps performed")`
$DIR/integration-tests/smoke/automation_test.go: `g.Expect(cnt.Int64()).Should(gomega.BeNumerically(">", int64(0)),
"Expected consumer counter to be greater than 0, but got %d", cnt.Int64(),
)`
$DIR/integration-tests/smoke/automation_test.go: `l.Info().Msg("Increasing check gas to burn for upkeeps")`
$DIR/integration-tests/smoke/automation_test.go: `err = consumersPerformance[i].SetCheckGasToBurn(testcontext.Get(t), big.NewInt(3000000))`
$DIR/integration-tests/smoke/automation_test.go: `l.Info().Msg("Getting existing performed count")`
$DIR/integration-tests/smoke/automation_test.go: `l.Info().
Str("UpkeepID", upkeepIDs[i].String()).
Int64("Upkeep counter", existingCnt.Int64()).
Msg("Upkeep counter when check gas increased")`
$DIR/integration-tests/smoke/automation_test.go: `countPerID[upkeepIDs[i]] = existingCnt`
$DIR/integration-tests/smoke/automation_test.go: `l.Info().Msg("Waiting for 1m for all contracts to make sure they perform at maximum 1 upkeep")`
$DIR/integration-tests/smoke/automation_test.go: `gom.Consistently(func(g gomega.Gomega) {
for i := 0; i < len(upkeepIDs); i++ {
cnt, err := consumersPerformance[i].GetUpkeepCount(testcontext.Get(t))
g.Expect(err).ShouldNot(gomega.HaveOccurred(), "Calling consumer's counter shouldn't fail")
existingCnt := countPerID[upkeepIDs[i]]
g.Expect(cnt.Int64()).Should(
gomega.BeNumerically("<=", existingCnt.Int64()+1),
"Expected consumer counter to remain less than equal %d, but got %d", existingCnt.Int64()+1, cnt.Int64(),
)
}
}, "1m", "1s").Should(gomega.Succeed())`
$DIR/integration-tests/smoke/automation_test.go: `g.Expect(err).ShouldNot(gomega.HaveOccurred(), "Calling consumer's counter shouldn't fail")`
$DIR/integration-tests/smoke/automation_test.go: `g.Expect(cnt.Int64()).Should(
gomega.BeNumerically("<=", existingCnt.Int64()+1),
"Expected consumer counter to remain less than equal %d, but got %d", existingCnt.Int64()+1, cnt.Int64(),
)`
$DIR/integration-tests/smoke/automation_test.go: `l.Info().Msg("Getting existing performed count")`
$DIR/integration-tests/smoke/automation_test.go: `l.Info().
Str("UpkeepID", upkeepIDs[i].String()).
Int64("Upkeep counter", existingCnt.Int64()).Msg("Upkeep counter when consistently block finished")`
$DIR/integration-tests/smoke/automation_test.go: `countPerID[upkeepIDs[i]] = existingCnt`
$DIR/integration-tests/smoke/automation_test.go: `highCheckGasLimit.CheckGasLimit = uint32(5000000)`
$DIR/integration-tests/smoke/automation_test.go: `highCheckGasLimit.RegistryVersion = registryVersion`
$DIR/integration-tests/smoke/automation_test.go: `err = a.Registry.SetConfig(highCheckGasLimit, ocrConfig)`
$DIR/integration-tests/smoke/automation_test.go: `err = a.Registry.SetConfigTypeSafe(ocrConfig)`
$DIR/integration-tests/smoke/automation_test.go: `l.Info().Msg("Waiting for 3m for all contracts to make sure they perform at maximum 1 upkeep after check gas limit increase")`
$DIR/integration-tests/smoke/automation_test.go: `gom.Eventually(func(g gomega.Gomega) {
for i := 0; i < len(upkeepIDs); i++ {
cnt, err := consumersPerformance[i].GetUpkeepCount(testcontext.Get(t))
g.Expect(err).ShouldNot(gomega.HaveOccurred(), "Calling consumer's Counter shouldn't fail")
existingCnt := countPerID[upkeepIDs[i]]
g.Expect(cnt.Int64()).Should(gomega.BeNumerically(">", existingCnt.Int64()),
"Expected consumer counter to be greater than %d, but got %d", existingCnt.Int64(), cnt.Int64(),
)
}
}, "3m", "1s").Should(gomega.Succeed())`
$DIR/integration-tests/smoke/automation_test.go: `g.Expect(err).ShouldNot(gomega.HaveOccurred(), "Calling consumer's Counter shouldn't fail")`
$DIR/integration-tests/smoke/automation_test.go: `g.Expect(cnt.Int64()).Should(gomega.BeNumerically(">", existingCnt.Int64()),
"Expected consumer counter to be greater than %d, but got %d", existingCnt.Int64(), cnt.Int64(),
)`
$DIR/integration-tests/smoke/automation_test.go: `t.Run(name, func(t *testing.T) {
t.Parallel()
l := logging.GetTestLogger(t)
config, err := tc.GetConfig("Smoke", tc.Automation)
require.NoError(t, err, "Failed to get config")
a := setupAutomationTestDocker(
t, registryVersion, automationDefaultRegistryConfig(config), false, false, &config,
)
sb, err := a.ChainClient.Client.BlockNumber(context.Background())
require.NoError(t, err, "Failed to get start block")
performDataChecker, upkeepIDs := actions_seth.DeployPerformDataCheckerConsumers(
t,
a.ChainClient,
a.Registry,
a.Registrar,
a.LinkToken,
defaultAmountOfUpkeeps,
big.NewInt(automationDefaultLinkFunds),
automationDefaultUpkeepGasLimit,
[]byte(automationExpectedData),
)
t.Cleanup(func() {
actions_seth.GetStalenessReportCleanupFn(t, a.Logger, a.ChainClient, sb, a.Registry, registryVersion)()
})
gom := gomega.NewGomegaWithT(t)
gom.Consistently(func(g gomega.Gomega) {
// expect the counter to remain 0 because perform data does not match
for i := 0; i < len(upkeepIDs); i++ {
counter, err := performDataChecker[i].Counter(testcontext.Get(t))
g.Expect(err).ShouldNot(gomega.HaveOccurred(), "Failed to retrieve perform data checker"+
" for upkeep at index "+strconv.Itoa(i))
g.Expect(counter.Int64()).Should(gomega.Equal(int64(0)),
"Expected perform data checker counter to be 0, but got %d", counter.Int64())
l.Info().Int64("Upkeep perform data checker", counter.Int64()).Msg("Number of upkeeps performed")
}
}, "2m", "1s").Should(gomega.Succeed()) // ~1m for setup, 1m assertion
for i := 0; i < len(upkeepIDs); i++ {
err := a.Registry.UpdateCheckData(upkeepIDs[i], []byte(automationExpectedData))
require.NoError(t, err, "Could not update check data for upkeep at index %d", i)
}
// retrieve new check data for all upkeeps
for i := 0; i < len(upkeepIDs); i++ {
upkeep, err := a.Registry.GetUpkeepInfo(testcontext.Get(t), upkeepIDs[i])
require.NoError(t, err, "Failed to get upkeep info at index %d", i)
require.Equal(t, []byte(automationExpectedData), upkeep.CheckData, "Upkeep data not as expected")
}
gom.Eventually(func(g gomega.Gomega) {
// Check if the upkeeps are performing multiple times by analysing their counters and checking they are greater than 5
for i := 0; i < len(upkeepIDs); i++ {
counter, err := performDataChecker[i].Counter(testcontext.Get(t))
g.Expect(err).ShouldNot(gomega.HaveOccurred(), "Failed to retrieve perform data checker counter"+
" for upkeep at index "+strconv.Itoa(i))
g.Expect(counter.Int64()).Should(gomega.BeNumerically(">", int64(0)),
"Expected perform data checker counter to be greater than 0, but got %d", counter.Int64())
l.Info().Int64("Upkeep perform data checker", counter.Int64()).Msg("Number of upkeeps performed")
}
}, "2m", "1s").Should(gomega.Succeed()) // ~1m to perform once, 1m buffer
})`
$DIR/integration-tests/smoke/automation_test.go: `t.Cleanup(func() {
actions_seth.GetStalenessReportCleanupFn(t, a.Logger, a.ChainClient, sb, a.Registry, registryVersion)()
})`
$DIR/integration-tests/smoke/automation_test.go: `actions_seth.GetStalenessReportCleanupFn(t, a.Logger, a.ChainClient, sb, a.Registry, registryVersion)()`
$DIR/integration-tests/smoke/automation_test.go: `gom.Consistently(func(g gomega.Gomega) {
// expect the counter to remain 0 because perform data does not match
for i := 0; i < len(upkeepIDs); i++ {
counter, err := performDataChecker[i].Counter(testcontext.Get(t))
g.Expect(err).ShouldNot(gomega.HaveOccurred(), "Failed to retrieve perform data checker"+
" for upkeep at index "+strconv.Itoa(i))
g.Expect(counter.Int64()).Should(gomega.Equal(int64(0)),
"Expected perform data checker counter to be 0, but got %d", counter.Int64())
l.Info().Int64("Upkeep perform data checker", counter.Int64()).Msg("Number of upkeeps performed")
}
}, "2m", "1s").Should(gomega.Succeed())`
$DIR/integration-tests/smoke/automation_test.go: `g.Expect(err).ShouldNot(gomega.HaveOccurred(), "Failed to retrieve perform data checker"+
" for upkeep at index "+strconv.Itoa(i))`
$DIR/integration-tests/smoke/automation_test.go: `g.Expect(counter.Int64()).Should(gomega.Equal(int64(0)),
"Expected perform data checker counter to be 0, but got %d", counter.Int64())`
$DIR/integration-tests/smoke/automation_test.go: `l.Info().Int64("Upkeep perform data checker", counter.Int64()).Msg("Number of upkeeps performed")`
$DIR/integration-tests/smoke/automation_test.go: `gom.Eventually(func(g gomega.Gomega) {
// Check if the upkeeps are performing multiple times by analysing their counters and checking they are greater than 5
for i := 0; i < len(upkeepIDs); i++ {
counter, err := performDataChecker[i].Counter(testcontext.Get(t))
g.Expect(err).ShouldNot(gomega.HaveOccurred(), "Failed to retrieve perform data checker counter"+
" for upkeep at index "+strconv.Itoa(i))
g.Expect(counter.Int64()).Should(gomega.BeNumerically(">", int64(0)),
"Expected perform data checker counter to be greater than 0, but got %d", counter.Int64())
l.Info().Int64("Upkeep perform data checker", counter.Int64()).Msg("Number of upkeeps performed")
}
}, "2m", "1s").Should(gomega.Succeed())`
$DIR/integration-tests/smoke/automation_test.go: `g.Expect(err).ShouldNot(gomega.HaveOccurred(), "Failed to retrieve perform data checker counter"+
" for upkeep at index "+strconv.Itoa(i))`
$DIR/integration-tests/smoke/automation_test.go: `g.Expect(counter.Int64()).Should(gomega.BeNumerically(">", int64(0)),
"Expected perform data checker counter to be greater than 0, but got %d", counter.Int64())`
$DIR/integration-tests/smoke/automation_test.go: `l.Info().Int64("Upkeep perform data checker", counter.Int64()).Msg("Number of upkeeps performed")`
$DIR/integration-tests/smoke/automation_test.go: `t.Run(name, func(t *testing.T) {
t.Parallel()
l := logging.GetTestLogger(t)
config, err := tc.GetConfig("Smoke", tc.Automation)
if err != nil {
t.Fatal(err)
}
a := setupAutomationTestDocker(
t, registryVersion, automationDefaultRegistryConfig(config), false, false, &config,
)
sb, err := a.ChainClient.Client.BlockNumber(context.Background())
require.NoError(t, err, "Failed to get start block")
consumers, upkeepIDs := actions_seth.DeployConsumers(
t,
a.ChainClient,
a.Registry,
a.Registrar,
a.LinkToken,
defaultAmountOfUpkeeps,
big.NewInt(automationDefaultLinkFunds),
automationDefaultUpkeepGasLimit,
false,
false,
)
t.Cleanup(func() {
actions_seth.GetStalenessReportCleanupFn(t, a.Logger, a.ChainClient, sb, a.Registry, registryVersion)()
})
gom := gomega.NewGomegaWithT(t)
l.Info().Msg("waiting for all upkeeps to be performed at least once")
gom.Eventually(func(g gomega.Gomega) {
for i := 0; i < len(upkeepIDs); i++ {
counter, err := consumers[i].Counter(testcontext.Get(t))
g.Expect(err).ShouldNot(gomega.HaveOccurred(), "Failed to retrieve consumer counter for upkeep at index %d", i)
g.Expect(counter.Int64()).Should(gomega.BeNumerically(">", int64(0)),
"Expected consumer counter to be greater than 0, but got %d")
}
}, "4m", "5s").Should(gomega.Succeed()) // ~1m for cluster setup, ~1m for performing each upkeep once, ~2m buffer
// set the maxGasPrice to 1 wei
uoc, _ := cbor.Marshal(gasprice.UpkeepOffchainConfig{MaxGasPrice: big.NewInt(1)})
l.Info().Msgf("setting all upkeeps' offchain config to %s, which means maxGasPrice is 1 wei", hexutil.Encode(uoc))
for _, uid := range upkeepIDs {
err = a.Registry.SetUpkeepOffchainConfig(uid, uoc)
require.NoError(t, err, "Error setting upkeep offchain config")
}
// Store how many times each upkeep performed once their offchain config is set with maxGasPrice = 1 wei
var countersAfterSettingLowMaxGasPrice = make([]*big.Int, len(upkeepIDs))
for i := 0; i < len(upkeepIDs); i++ {
countersAfterSettingLowMaxGasPrice[i], err = consumers[i].Counter(testcontext.Get(t))
require.NoError(t, err, "Failed to retrieve consumer counter for upkeep at index %d", i)
l.Info().Int64("Upkeep Performed times", countersAfterSettingLowMaxGasPrice[i].Int64()).Int("Upkeep index", i).Msg("Number of upkeeps performed after setting low max gas price")
}
var latestCounter *big.Int
// the upkeepsPerformed of all the upkeeps should stay constant because they are no longer getting serviced
gom.Consistently(func(g gomega.Gomega) {
for i := 0; i < len(upkeepIDs); i++ {
latestCounter, err = consumers[i].Counter(testcontext.Get(t))
g.Expect(err).ShouldNot(gomega.HaveOccurred(), "Failed to retrieve consumer counter for upkeep at index %d", i)
g.Expect(latestCounter.Int64()).Should(gomega.BeNumerically("<=", countersAfterSettingLowMaxGasPrice[i].Int64()+1),
"Expected consumer counter to be less than %d, but got %d",
countersAfterSettingLowMaxGasPrice[i].Int64()+1, latestCounter.Int64())
}
}, "2m", "5s").Should(gomega.Succeed())
l.Info().Msg("no upkeeps is performed because their max gas price is only 1 wei")
// setting offchain config with a high max gas price for the first upkeep, it should perform again while
// other upkeeps should not perform
// set the maxGasPrice to 500 gwei for the first upkeep
uoc, _ = cbor.Marshal(gasprice.UpkeepOffchainConfig{MaxGasPrice: big.NewInt(500_000_000_000)})
l.Info().Msgf("setting the first upkeeps' offchain config to %s, which means maxGasPrice is 500 gwei", hexutil.Encode(uoc))
err = a.Registry.SetUpkeepOffchainConfig(upkeepIDs[0], uoc)
require.NoError(t, err, "Error setting upkeep offchain config")
upkeepsPerformedBefore := make(map[int]int64)
upkeepsPerformedAfter := make(map[int]int64)
for i := 0; i < len(upkeepIDs); i++ {
latestCounter, err = consumers[i].Counter(testcontext.Get(t))
require.NoError(t, err, "Failed to retrieve consumer counter for upkeep at index %d", i)
upkeepsPerformedBefore[i] = latestCounter.Int64()
upkeepsPerformedAfter[i] = latestCounter.Int64()
l.Info().Int64("No of Upkeep Performed", latestCounter.Int64()).Str("Consumer address", consumers[i].Address()).Msg("Number of upkeeps performed just after setting offchain config")
}
// the upkeepsPerformed of all other upkeeps should stay constant because their max gas price remains very low.
// consumer at index N, might not be correlated with upkeep at index N, so instead of focusing on one of them
// we iterate over all of them and make sure that at most only one is performing upkeeps
gom.Consistently(func(g gomega.Gomega) {
activeConsumers := 0
for i := 0; i < len(upkeepIDs); i++ {
latestCounter, err = consumers[i].Counter(testcontext.Get(t))
g.Expect(err).ShouldNot(gomega.HaveOccurred(), "Failed to retrieve consumer counter for upkeep at index %d", i)
if latestCounter.Int64() != upkeepsPerformedAfter[i] {
activeConsumers++
}
upkeepsPerformedAfter[i] = latestCounter.Int64()
}
// 0 is also okay, because it means that no upkeep was performed yet
g.Expect(activeConsumers).Should(gomega.BeNumerically("<=", 1), "Only one consumer should have been performing upkeeps, but %d did", activeConsumers)
}, "2m", "5s").Should(gomega.Succeed())
performingConsumerIndex := -1
onlyOneConsumerPerformed := false
for i := 0; i < len(upkeepIDs); i++ {
if upkeepsPerformedAfter[i] > upkeepsPerformedBefore[i] {
onlyOneConsumerPerformed = true
performingConsumerIndex = i
break
}
}
for i := 0; i < len(upkeepIDs); i++ {
l.Info().Int64("No of Upkeep Performed", latestCounter.Int64()).Str("Consumer address", consumers[i].Address()).Msg("Number of upkeeps performed after waiting for the results of offchain config change")
}
require.True(t, onlyOneConsumerPerformed, "Only one consumer should have been performing upkeeps")
l.Info().Msg("all the rest upkeeps did not perform again because their max gas price remains 1 wei")
l.Info().Msg("making sure the consumer keeps performing upkeeps because its max gas price is 500 gwei")
// the first upkeep should start performing again
gom.Eventually(func(g gomega.Gomega) {
latestCounter, err = consumers[performingConsumerIndex].Counter(testcontext.Get(t))
g.Expect(err).ShouldNot(gomega.HaveOccurred(), fmt.Sprintf("Failed to retrieve consumer counter for upkeep at index %d", performingConsumerIndex))
g.Expect(latestCounter.Int64()).Should(gomega.BeNumerically(">", countersAfterSettingLowMaxGasPrice[0].Int64()),
"Expected consumer counter to be greater than %d, but got %d",
countersAfterSettingLowMaxGasPrice[0].Int64(), latestCounter.Int64())
}, "2m", "5s").Should(gomega.Succeed()) // ~1m for cluster setup, ~1m for performing each upkeep once
l.Info().Int64("Upkeep Performed times", latestCounter.Int64()).Msg("the first upkeep performed again")
})`
$DIR/integration-tests/smoke/automation_test.go: `t.Cleanup(func() {
actions_seth.GetStalenessReportCleanupFn(t, a.Logger, a.ChainClient, sb, a.Registry, registryVersion)()
})`
$DIR/integration-tests/smoke/automation_test.go: `actions_seth.GetStalenessReportCleanupFn(t, a.Logger, a.ChainClient, sb, a.Registry, registryVersion)()`
$DIR/integration-tests/smoke/automation_test.go: `l.Info().Msg("waiting for all upkeeps to be performed at least once")`
$DIR/integration-tests/smoke/automation_test.go: `gom.Eventually(func(g gomega.Gomega) {
for i := 0; i < len(upkeepIDs); i++ {
counter, err := consumers[i].Counter(testcontext.Get(t))
g.Expect(err).ShouldNot(gomega.HaveOccurred(), "Failed to retrieve consumer counter for upkeep at index %d", i)
g.Expect(counter.Int64()).Should(gomega.BeNumerically(">", int64(0)),
"Expected consumer counter to be greater than 0, but got %d")
}
}, "4m", "5s").Should(gomega.Succeed())`
$DIR/integration-tests/smoke/automation_test.go: `g.Expect(err).ShouldNot(gomega.HaveOccurred(), "Failed to retrieve consumer counter for upkeep at index %d", i)`
$DIR/integration-tests/smoke/automation_test.go: `g.Expect(counter.Int64()).Should(gomega.BeNumerically(">", int64(0)),
"Expected consumer counter to be greater than 0, but got %d")`
$DIR/integration-tests/smoke/automation_test.go: `l.Info().Msgf("setting all upkeeps' offchain config to %s, which means maxGasPrice is 1 wei", hexutil.Encode(uoc))`
$DIR/integration-tests/smoke/automation_test.go: `err = a.Registry.SetUpkeepOffchainConfig(uid, uoc)`
$DIR/integration-tests/smoke/automation_test.go: `countersAfterSettingLowMaxGasPrice[i], err = consumers[i].Counter(testcontext.Get(t))`
$DIR/integration-tests/smoke/automation_test.go: `l.Info().Int64("Upkeep Performed times", countersAfterSettingLowMaxGasPrice[i].Int64()).Int("Upkeep index", i).Msg("Number of upkeeps performed after setting low max gas price")`
$DIR/integration-tests/smoke/automation_test.go: `gom.Consistently(func(g gomega.Gomega) {
for i := 0; i < len(upkeepIDs); i++ {
latestCounter, err = consumers[i].Counter(testcontext.Get(t))
g.Expect(err).ShouldNot(gomega.HaveOccurred(), "Failed to retrieve consumer counter for upkeep at index %d", i)
g.Expect(latestCounter.Int64()).Should(gomega.BeNumerically("<=", countersAfterSettingLowMaxGasPrice[i].Int64()+1),
"Expected consumer counter to be less than %d, but got %d",
countersAfterSettingLowMaxGasPrice[i].Int64()+1, latestCounter.Int64())
}
}, "2m", "5s").Should(gomega.Succeed())`
$DIR/integration-tests/smoke/automation_test.go: `latestCounter, err = consumers[i].Counter(testcontext.Get(t))`
$DIR/integration-tests/smoke/automation_test.go: `g.Expect(err).ShouldNot(gomega.HaveOccurred(), "Failed to retrieve consumer counter for upkeep at index %d", i)`
$DIR/integration-tests/smoke/automation_test.go: `g.Expect(latestCounter.Int64()).Should(gomega.BeNumerically("<=", countersAfterSettingLowMaxGasPrice[i].Int64()+1),
"Expected consumer counter to be less than %d, but got %d",
countersAfterSettingLowMaxGasPrice[i].Int64()+1, latestCounter.Int64())`
$DIR/integration-tests/smoke/automation_test.go: `l.Info().Msg("no upkeeps is performed because their max gas price is only 1 wei")`
$DIR/integration-tests/smoke/automation_test.go: `uoc, _ = cbor.Marshal(gasprice.UpkeepOffchainConfig{MaxGasPrice: big.NewInt(500_000_000_000)})`
$DIR/integration-tests/smoke/automation_test.go: `l.Info().Msgf("setting the first upkeeps' offchain config to %s, which means maxGasPrice is 500 gwei", hexutil.Encode(uoc))`
$DIR/integration-tests/smoke/automation_test.go: `err = a.Registry.SetUpkeepOffchainConfig(upkeepIDs[0], uoc)`
$DIR/integration-tests/smoke/automation_test.go: `latestCounter, err = consumers[i].Counter(testcontext.Get(t))`
$DIR/integration-tests/smoke/automation_test.go: `upkeepsPerformedBefore[i] = latestCounter.Int64()`
$DIR/integration-tests/smoke/automation_test.go: `upkeepsPerformedAfter[i] = latestCounter.Int64()`
$DIR/integration-tests/smoke/automation_test.go: `l.Info().Int64("No of Upkeep Performed", latestCounter.Int64()).Str("Consumer address", consumers[i].Address()).Msg("Number of upkeeps performed just after setting offchain config")`
$DIR/integration-tests/smoke/automation_test.go: `gom.Consistently(func(g gomega.Gomega) {
activeConsumers := 0
for i := 0; i < len(upkeepIDs); i++ {
latestCounter, err = consumers[i].Counter(testcontext.Get(t))
g.Expect(err).ShouldNot(gomega.HaveOccurred(), "Failed to retrieve consumer counter for upkeep at index %d", i)
if latestCounter.Int64() != upkeepsPerformedAfter[i] {
activeConsumers++
}
upkeepsPerformedAfter[i] = latestCounter.Int64()
}
// 0 is also okay, because it means that no upkeep was performed yet
g.Expect(activeConsumers).Should(gomega.BeNumerically("<=", 1), "Only one consumer should have been performing upkeeps, but %d did", activeConsumers)
}, "2m", "5s").Should(gomega.Succeed())`
$DIR/integration-tests/smoke/automation_test.go: `latestCounter, err = consumers[i].Counter(testcontext.Get(t))`
$DIR/integration-tests/smoke/automation_test.go: `g.Expect(err).ShouldNot(gomega.HaveOccurred(), "Failed to retrieve consumer counter for upkeep at index %d", i)`
$DIR/integration-tests/smoke/automation_test.go: `activeConsumers++`
$DIR/integration-tests/smoke/automation_test.go: `upkeepsPerformedAfter[i] = latestCounter.Int64()`
$DIR/integration-tests/smoke/automation_test.go: `g.Expect(activeConsumers).Should(gomega.BeNumerically("<=", 1), "Only one consumer should have been performing upkeeps, but %d did", activeConsumers)`
$DIR/integration-tests/smoke/automation_test.go: `onlyOneConsumerPerformed = true`
$DIR/integration-tests/smoke/automation_test.go: `performingConsumerIndex = i`
$DIR/integration-tests/smoke/automation_test.go: `l.Info().Int64("No of Upkeep Performed", latestCounter.Int64()).Str("Consumer address", consumers[i].Address()).Msg("Number of upkeeps performed after waiting for the results of offchain config change")`
$DIR/integration-tests/smoke/automation_test.go: `l.Info().Msg("all the rest upkeeps did not perform again because their max gas price remains 1 wei")`
$DIR/integration-tests/smoke/automation_test.go: `l.Info().Msg("making sure the consumer keeps performing upkeeps because its max gas price is 500 gwei")`
$DIR/integration-tests/smoke/automation_test.go: `gom.Eventually(func(g gomega.Gomega) {
latestCounter, err = consumers[performingConsumerIndex].Counter(testcontext.Get(t))
g.Expect(err).ShouldNot(gomega.HaveOccurred(), fmt.Sprintf("Failed to retrieve consumer counter for upkeep at index %d", performingConsumerIndex))
g.Expect(latestCounter.Int64()).Should(gomega.BeNumerically(">", countersAfterSettingLowMaxGasPrice[0].Int64()),
"Expected consumer counter to be greater than %d, but got %d",
countersAfterSettingLowMaxGasPrice[0].Int64(), latestCounter.Int64())
}, "2m", "5s").Should(gomega.Succeed())`
$DIR/integration-tests/smoke/automation_test.go: `latestCounter, err = consumers[performingConsumerIndex].Counter(testcontext.Get(t))`
$DIR/integration-tests/smoke/automation_test.go: `g.Expect(err).ShouldNot(gomega.HaveOccurred(), fmt.Sprintf("Failed to retrieve consumer counter for upkeep at index %d", performingConsumerIndex))`
$DIR/integration-tests/smoke/automation_test.go: `g.Expect(latestCounter.Int64()).Should(gomega.BeNumerically(">", countersAfterSettingLowMaxGasPrice[0].Int64()),
"Expected consumer counter to be greater than %d, but got %d",
countersAfterSettingLowMaxGasPrice[0].Int64(), latestCounter.Int64())`
$DIR/integration-tests/smoke/automation_test.go: `l.Info().Int64("Upkeep Performed times", latestCounter.Int64()).Msg("the first upkeep performed again")`
$DIR/integration-tests/smoke/automation_test.go: `.Init()`
$DIR/integration-tests/smoke/automation_test.go: `.Run()`
$DIR/integration-tests/smoke/automation_test.go: `.GetTestLogger(t)`
$DIR/integration-tests/smoke/automation_test.go: `.Run(name, func(t *testing.T) {
t.Parallel()
config, err := tc.GetConfig("Smoke", tc.Automation)
require.NoError(t, err, "Failed to get config")
a := setupAutomationTestDocker(
t, registryVersion, automationDefaultRegistryConfig(config), false, false, &config,
)
sb, err := a.ChainClient.Client.BlockNumber(context.Background())
require.NoError(t, err, "Failed to get start block")
consumers, upkeepIDs := actions_seth.DeployConsumers(
t,
a.ChainClient,
a.Registry,
a.Registrar,
a.LinkToken,
defaultAmountOfUpkeeps,
big.NewInt(automationDefaultLinkFunds),
automationDefaultUpkeepGasLimit,
true,
false,
)
// Start log trigger based upkeeps for all consumers
for i := 0; i < len(consumers); i++ {
err := consumers[i].Start()
if err != nil {
return
}
}
t.Cleanup(func() {
actions_seth.GetStalenessReportCleanupFn(t, a.Logger, a.ChainClient, sb, a.Registry, registryVersion)()
})
l.Info().Msg("Waiting for all upkeeps to perform")
gom := gomega.NewGomegaWithT(t)
gom.Eventually(func(g gomega.Gomega) {
// Check if the upkeeps are performing multiple times by analyzing their counters
for i := 0; i < len(upkeepIDs); i++ {
counter, err := consumers[i].Counter(testcontext.Get(t))
require.NoError(t, err, "Failed to retrieve consumer counter for upkeep at index %d", i)
expect := 5
l.Info().Int64("Upkeeps Performed", counter.Int64()).Int("Upkeep Index", i).Msg("Number of upkeeps performed")
g.Expect(counter.Int64()).Should(gomega.BeNumerically(">=", int64(expect)),
"Expected consumer counter to be greater than %d, but got %d", expect, counter.Int64())
}
}, "5m", "1s").Should(gomega.Succeed()) // ~1m for cluster setup, ~2m for performing each upkeep 5 times, ~2m buffer
topic0InBytesMatch := [32]byte{
61, 83, 163, 149, 80, 224, 70, 136,
6, 88, 39, 243, 187, 134, 88, 76,
176, 7, 171, 158, 188, 167, 235,
213, 40, 231, 48, 28, 156, 49, 235, 93,
} // bytes representation of 0x3d53a39550e04688065827f3bb86584cb007ab9ebca7ebd528e7301c9c31eb5d
topic0InBytesNoMatch := [32]byte{
62, 83, 163, 149, 80, 224, 70, 136,
6, 88, 39, 243, 187, 134, 88, 76,
176, 7, 171, 158, 188, 167, 235,
213, 40, 231, 48, 28, 156, 49, 235, 93,
} // changed the first byte from 61 to 62 to make it not match
bytes0 := [32]byte{
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
} // bytes representation of 0x0000000000000000000000000000000000000000000000000000000000000000
// Update the trigger config so no upkeeps are triggered
for i := 0; i < len(consumers); i++ {
upkeepAddr := consumers[i].Address()
logTriggerConfigStruct := ac.IAutomationV21PlusCommonLogTriggerConfig{
ContractAddress: common.HexToAddress(upkeepAddr),
FilterSelector: 0,
Topic0: topic0InBytesNoMatch,
Topic1: bytes0,
Topic2: bytes0,
Topic3: bytes0,
}
encodedLogTriggerConfig, err := core.CompatibleUtilsABI.Methods["_logTriggerConfig"].Inputs.Pack(&logTriggerConfigStruct)
if err != nil {
return
}
err = a.Registry.SetUpkeepTriggerConfig(upkeepIDs[i], encodedLogTriggerConfig)
require.NoError(t, err, "Could not set upkeep trigger config at index %d", i)
}
var countersAfterSetNoMatch = make([]*big.Int, len(upkeepIDs))
// Wait for 10 seconds to let in-flight upkeeps finish
time.Sleep(10 * time.Second)
for i := 0; i < len(upkeepIDs); i++ {
// Obtain the amount of times the upkeep has been executed so far
countersAfterSetNoMatch[i], err = consumers[i].Counter(testcontext.Get(t))
require.NoError(t, err, "Failed to retrieve consumer counter for upkeep at index %d", i)
l.Info().Int64("Upkeep Count", countersAfterSetNoMatch[i].Int64()).Int("Upkeep Index", i).Msg("Upkeep")
}
l.Info().Msg("Making sure the counter stays consistent")
gom.Consistently(func(g gomega.Gomega) {
for i := 0; i < len(upkeepIDs); i++ {
// Expect the counter to remain constant (At most increase by 2 to account for stale performs) because the upkeep trigger config is not met
bufferCount := int64(2)
latestCounter, err := consumers[i].Counter(testcontext.Get(t))
g.Expect(err).ShouldNot(gomega.HaveOccurred(), "Failed to retrieve consumer counter for upkeep at index %d", i)
g.Expect(latestCounter.Int64()).Should(gomega.BeNumerically("<=", countersAfterSetNoMatch[i].Int64()+bufferCount),
"Expected consumer counter to remain less than or equal to %d, but got %d",
countersAfterSetNoMatch[i].Int64()+bufferCount, latestCounter.Int64())
}
}, "1m", "1s").Should(gomega.Succeed())
// Update the trigger config, so upkeeps start performing again
for i := 0; i < len(consumers); i++ {
upkeepAddr := consumers[i].Address()
logTriggerConfigStruct := ac.IAutomationV21PlusCommonLogTriggerConfig{
ContractAddress: common.HexToAddress(upkeepAddr),
FilterSelector: 0,
Topic0: topic0InBytesMatch,
Topic1: bytes0,
Topic2: bytes0,
Topic3: bytes0,
}
encodedLogTriggerConfig, err := core.CompatibleUtilsABI.Methods["_logTriggerConfig"].Inputs.Pack(&logTriggerConfigStruct)
if err != nil {
return
}
err = a.Registry.SetUpkeepTriggerConfig(upkeepIDs[i], encodedLogTriggerConfig)
require.NoError(t, err, "Could not set upkeep trigger config at index %d", i)
}
var countersAfterSetMatch = make([]*big.Int, len(upkeepIDs))
for i := 0; i < len(upkeepIDs); i++ {
// Obtain the amount of times the upkeep has been executed so far
countersAfterSetMatch[i], err = consumers[i].Counter(testcontext.Get(t))
require.NoError(t, err, "Failed to retrieve consumer counter for upkeep at index %d", i)
l.Info().Int64("Upkeep Count", countersAfterSetMatch[i].Int64()).Int("Upkeep Index", i).Msg("Upkeep")
}
// Wait for 30 seconds to make sure backend is ready
time.Sleep(30 * time.Second)
// Start the consumers again
for i := 0; i < len(consumers); i++ {
err := consumers[i].Start()
if err != nil {
return
}
}
l.Info().Msg("Making sure the counter starts increasing again")
gom.Eventually(func(g gomega.Gomega) {
// Check if the upkeeps are performing multiple times by analyzing their counters
for i := 0; i < len(upkeepIDs); i++ {
counter, err := consumers[i].Counter(testcontext.Get(t))
require.NoError(t, err, "Failed to retrieve consumer counter for upkeep at index %d", i)
expect := int64(5)
l.Info().Int64("Upkeeps Performed", counter.Int64()).Int("Upkeep Index", i).Msg("Number of upkeeps performed")
g.Expect(counter.Int64()).Should(gomega.BeNumerically(">=", countersAfterSetMatch[i].Int64()+expect),
"Expected consumer counter to be greater than %d, but got %d", countersAfterSetMatch[i].Int64()+expect, counter.Int64())
}
}, "5m", "1s").Should(gomega.Succeed()) // ~1m for cluster setup, ~2m for performing each upkeep 5 times, ~2m buffer
})`
$DIR/integration-tests/smoke/automation_test.go: `.GetConfig("Smoke", tc.Automation)`
$DIR/integration-tests/smoke/automation_test.go: `.ChainClient.Client.BlockNumber(context.Background())`
$DIR/integration-tests/smoke/automation_test.go: `.Background()`
$DIR/integration-tests/smoke/automation_test.go: `.DeployConsumers(
t,
a.ChainClient,
a.Registry,
a.Registrar,
a.LinkToken,
defaultAmountOfUpkeeps,
big.NewInt(automationDefaultLinkFunds),
automationDefaultUpkeepGasLimit,
true,
false,
)`
$DIR/integration-tests/smoke/automation_test.go: `.NewInt(automationDefaultLinkFunds)`
$DIR/integration-tests/smoke/automation_test.go: `.Start()`
$DIR/integration-tests/smoke/automation_test.go: `.Cleanup(func() {
actions_seth.GetStalenessReportCleanupFn(t, a.Logger, a.ChainClient, sb, a.Registry, registryVersion)()
})`
$DIR/integration-tests/smoke/automation_test.go: `.GetStalenessReportCleanupFn(t, a.Logger, a.ChainClient, sb, a.Registry, registryVersion)`
$DIR/integration-tests/smoke/automation_test.go: `.Info()`
$DIR/integration-tests/smoke/automation_test.go: `.Msg("Waiting for all upkeeps to perform")`
$DIR/integration-tests/smoke/automation_test.go: `.NewGomegaWithT(t)`
$DIR/integration-tests/smoke/automation_test.go: `.Eventually(func(g gomega.Gomega) {
// Check if the upkeeps are performing multiple times by analyzing their counters
for i := 0; i < len(upkeepIDs); i++ {
counter, err := consumers[i].Counter(testcontext.Get(t))
require.NoError(t, err, "Failed to retrieve consumer counter for upkeep at index %d", i)
expect := 5
l.Info().Int64("Upkeeps Performed", counter.Int64()).Int("Upkeep Index", i).Msg("Number of upkeeps performed")
g.Expect(counter.Int64()).Should(gomega.BeNumerically(">=", int64(expect)),
"Expected consumer counter to be greater than %d, but got %d", expect, counter.Int64())
}
}, "5m", "1s")`
$DIR/integration-tests/smoke/automation_test.go: `.Counter(testcontext.Get(t))`
$DIR/integration-tests/smoke/automation_test.go: `.Get(t)`
$DIR/integration-tests/smoke/automation_test.go: `.Info()`
$DIR/integration-tests/smoke/automation_test.go: `.Int64("Upkeeps Performed", counter.Int64())`
$DIR/integration-tests/smoke/automation_test.go: `.Int64()`
$DIR/integration-tests/smoke/automation_test.go: `.Int("Upkeep Index", i)`
$DIR/integration-tests/smoke/automation_test.go: `.Msg("Number of upkeeps performed")`
$DIR/integration-tests/smoke/automation_test.go: `.Expect(counter.Int64())`
$DIR/integration-tests/smoke/automation_test.go: `.Int64()`
$DIR/integration-tests/smoke/automation_test.go: `.Should(gomega.BeNumerically(">=", int64(expect)),
"Expected consumer counter to be greater than %d, but got %d", expect, counter.Int64())`
$DIR/integration-tests/smoke/automation_test.go: `.BeNumerically(">=", int64(expect))`
$DIR/integration-tests/smoke/automation_test.go: `.Int64()`
$DIR/integration-tests/smoke/automation_test.go: `.Should(gomega.Succeed())`
$DIR/integration-tests/smoke/automation_test.go: `.Succeed()`
$DIR/integration-tests/smoke/automation_test.go: `.Address()`
$DIR/integration-tests/smoke/automation_test.go: `.HexToAddress(upkeepAddr)`
$DIR/integration-tests/smoke/automation_test.go: `.Inputs.Pack(&logTriggerConfigStruct)`
$DIR/integration-tests/smoke/automation_test.go: `.Registry.SetUpkeepTriggerConfig(upkeepIDs[i], encodedLogTriggerConfig)`
$DIR/integration-tests/smoke/automation_test.go: `.Sleep(10 * time.Second)`
$DIR/integration-tests/smoke/automation_test.go: `.Counter(testcontext.Get(t))`
$DIR/integration-tests/smoke/automation_test.go: `.Get(t)`
$DIR/integration-tests/smoke/automation_test.go: `.Info()`
$DIR/integration-tests/smoke/automation_test.go: `.Int64("Upkeep Count", countersAfterSetNoMatch[i].Int64())`
$DIR/integration-tests/smoke/automation_test.go: `.Int64()`
$DIR/integration-tests/smoke/automation_test.go: `.Int("Upkeep Index", i)`
$DIR/integration-tests/smoke/automation_test.go: `.Msg("Upkeep")`
$DIR/integration-tests/smoke/automation_test.go: `.Info()`
$DIR/integration-tests/smoke/automation_test.go: `.Msg("Making sure the counter stays consistent")`
$DIR/integration-tests/smoke/automation_test.go: `.Consistently(func(g gomega.Gomega) {
for i := 0; i < len(upkeepIDs); i++ {
// Expect the counter to remain constant (At most increase by 2 to account for stale performs) because the upkeep trigger config is not met
bufferCount := int64(2)
latestCounter, err := consumers[i].Counter(testcontext.Get(t))
g.Expect(err).ShouldNot(gomega.HaveOccurred(), "Failed to retrieve consumer counter for upkeep at index %d", i)
g.Expect(latestCounter.Int64()).Should(gomega.BeNumerically("<=", countersAfterSetNoMatch[i].Int64()+bufferCount),
"Expected consumer counter to remain less than or equal to %d, but got %d",
countersAfterSetNoMatch[i].Int64()+bufferCount, latestCounter.Int64())
}
}, "1m", "1s")`
$DIR/integration-tests/smoke/automation_test.go: `.Counter(testcontext.Get(t))`
$DIR/integration-tests/smoke/automation_test.go: `.Get(t)`
$DIR/integration-tests/smoke/automation_test.go: `.Expect(err)`
$DIR/integration-tests/smoke/automation_test.go: `.ShouldNot(gomega.HaveOccurred(), "Failed to retrieve consumer counter for upkeep at index %d", i)`
$DIR/integration-tests/smoke/automation_test.go: `.HaveOccurred()`
$DIR/integration-tests/smoke/automation_test.go: `.Expect(latestCounter.Int64())`
$DIR/integration-tests/smoke/automation_test.go: `.Int64()`
$DIR/integration-tests/smoke/automation_test.go: `.Should(gomega.BeNumerically("<=", countersAfterSetNoMatch[i].Int64()+bufferCount),
"Expected consumer counter to remain less than or equal to %d, but got %d",
countersAfterSetNoMatch[i].Int64()+bufferCount, latestCounter.Int64())`
$DIR/integration-tests/smoke/automation_test.go: `.BeNumerically("<=", countersAfterSetNoMatch[i].Int64()+bufferCount)`
$DIR/integration-tests/smoke/automation_test.go: `.Int64()`
$DIR/integration-tests/smoke/automation_test.go: `.Int64()`
$DIR/integration-tests/smoke/automation_test.go: `.Int64()`
$DIR/integration-tests/smoke/automation_test.go: `.Should(gomega.Succeed())`
$DIR/integration-tests/smoke/automation_test.go: `.Succeed()`
$DIR/integration-tests/smoke/automation_test.go: `.Address()`
$DIR/integration-tests/smoke/automation_test.go: `.HexToAddress(upkeepAddr)`
$DIR/integration-tests/smoke/automation_test.go: `.Inputs.Pack(&logTriggerConfigStruct)`
$DIR/integration-tests/smoke/automation_test.go: `.Registry.SetUpkeepTriggerConfig(upkeepIDs[i], encodedLogTriggerConfig)`
$DIR/integration-tests/smoke/automation_test.go: `.Counter(testcontext.Get(t))`
$DIR/integration-tests/smoke/automation_test.go: `.Get(t)`
$DIR/integration-tests/smoke/automation_test.go: `.Info()`
$DIR/integration-tests/smoke/automation_test.go: `.Int64("Upkeep Count", countersAfterSetMatch[i].Int64())`
$DIR/integration-tests/smoke/automation_test.go: `.Int64()`
$DIR/integration-tests/smoke/automation_test.go: `.Int("Upkeep Index", i)`
$DIR/integration-tests/smoke/automation_test.go: `.Msg("Upkeep")`
$DIR/integration-tests/smoke/automation_test.go: `.Sleep(30 * time.Second)`
$DIR/integration-tests/smoke/automation_test.go: `.Start()`
$DIR/integration-tests/smoke/automation_test.go: `.Info()`
$DIR/integration-tests/smoke/automation_test.go: `.Msg("Making sure the counter starts increasing again")`
$DIR/integration-tests/smoke/automation_test.go: `.Eventually(func(g gomega.Gomega) {
// Check if the upkeeps are performing multiple times by analyzing their counters
for i := 0; i < len(upkeepIDs); i++ {
counter, err := consumers[i].Counter(testcontext.Get(t))
require.NoError(t, err, "Failed to retrieve consumer counter for upkeep at index %d", i)
expect := int64(5)
l.Info().Int64("Upkeeps Performed", counter.Int64()).Int("Upkeep Index", i).Msg("Number of upkeeps performed")
g.Expect(counter.Int64()).Should(gomega.BeNumerically(">=", countersAfterSetMatch[i].Int64()+expect),
"Expected consumer counter to be greater than %d, but got %d", countersAfterSetMatch[i].Int64()+expect, counter.Int64())
}
}, "5m", "1s")`
$DIR/integration-tests/smoke/automation_test.go: `.Counter(testcontext.Get(t))`
$DIR/integration-tests/smoke/automation_test.go: `.Get(t)`
$DIR/integration-tests/smoke/automation_test.go: `.Info()`
$DIR/integration-tests/smoke/automation_test.go: `.Int64("Upkeeps Performed", counter.Int64())`
$DIR/integration-tests/smoke/automation_test.go: `.Int64()`
$DIR/integration-tests/smoke/automation_test.go: `.Int("Upkeep Index", i)`
$DIR/integration-tests/smoke/automation_test.go: `.Msg("Number of upkeeps performed")`
$DIR/integration-tests/smoke/automation_test.go: `.Expect(counter.Int64())`
$DIR/integration-tests/smoke/automation_test.go: `.Int64()`
$DIR/integration-tests/smoke/automation_test.go: `.Should(gomega.BeNumerically(">=", countersAfterSetMatch[i].Int64()+expect),
"Expected consumer counter to be greater than %d, but got %d", countersAfterSetMatch[i].Int64()+expect, counter.Int64())`
$DIR/integration-tests/smoke/automation_test.go: `.BeNumerically(">=", countersAfterSetMatch[i].Int64()+expect)`
$DIR/integration-tests/smoke/automation_test.go: `.Int64()`
$DIR/integration-tests/smoke/automation_test.go: `.Int64()`
$DIR/integration-tests/smoke/automation_test.go: `.Int64()`
$DIR/integration-tests/smoke/automation_test.go: `.Should(gomega.Succeed())`
$DIR/integration-tests/smoke/automation_test.go: `.Succeed()`
$DIR/integration-tests/smoke/automation_test.go: `.Run(name, func(t *testing.T) {
t.Parallel()
l := logging.GetTestLogger(t)
config, err := tc.GetConfig("Smoke", tc.Automation)
require.NoError(t, err, "Failed to get config")
a := setupAutomationTestDocker(
t, registryVersion, automationDefaultRegistryConfig(config), false, false, &config,
)
sb, err := a.ChainClient.Client.BlockNumber(context.Background())
require.NoError(t, err, "Failed to get start block")
consumers, upkeepIDs := actions_seth.DeployConsumers(
t,
a.ChainClient,
a.Registry,
a.Registrar,
a.LinkToken,
defaultAmountOfUpkeeps,
big.NewInt(1),
automationDefaultUpkeepGasLimit,
false,
false,
)
t.Cleanup(func() {
actions_seth.GetStalenessReportCleanupFn(t, a.Logger, a.ChainClient, sb, a.Registry, registryVersion)()
})
l.Info().Msg("Making sure for 2m no upkeeps are performed")
gom := gomega.NewGomegaWithT(t)
// Since the upkeep is currently underfunded, check that it doesn't get executed
gom.Consistently(func(g gomega.Gomega) {
for i := 0; i < len(upkeepIDs); i++ {
counter, err := consumers[i].Counter(testcontext.Get(t))
g.Expect(err).ShouldNot(gomega.HaveOccurred(), "Calling consumer's counter shouldn't fail")
g.Expect(counter.Int64()).Should(gomega.Equal(int64(0)),
"Expected consumer counter to remain zero, but got %d", counter.Int64())
}
}, "2m", "1s").Should(gomega.Succeed()) // ~1m for setup, 1m assertion
// Grant permission to the registry to fund the upkeep
err = a.LinkToken.Approve(a.Registry.Address(), big.NewInt(0).Mul(big.NewInt(9e18), big.NewInt(int64(len(upkeepIDs)))))
require.NoError(t, err, "Could not approve permissions for the registry on the link token contract")
l.Info().Msg("Adding funds to the upkeeps")
for i := 0; i < len(upkeepIDs); i++ {
// Add funds to the upkeep whose ID we know from above
err = a.Registry.AddUpkeepFunds(upkeepIDs[i], big.NewInt(9e18))
require.NoError(t, err, "Unable to add upkeep")
}
l.Info().Msg("Waiting for 2m for all contracts to perform at least one upkeep")
// Now the new upkeep should be performing because we added enough funds
gom.Eventually(func(g gomega.Gomega) {
for i := 0; i < len(upkeepIDs); i++ {
counter, err := consumers[0].Counter(testcontext.Get(t))
g.Expect(err).ShouldNot(gomega.HaveOccurred(), "Calling consumer's counter shouldn't fail")
g.Expect(counter.Int64()).Should(gomega.BeNumerically(">", int64(0)),
"Expected consumer counter to be greater than 0, but got %d", counter.Int64())
}
}, "2m", "1s").Should(gomega.Succeed()) // ~1m for setup, 1m assertion
})`
$DIR/integration-tests/smoke/automation_test.go: `.GetTestLogger(t)`
$DIR/integration-tests/smoke/automation_test.go: `.GetConfig("Smoke", tc.Automation)`
$DIR/integration-tests/smoke/automation_test.go: `.ChainClient.Client.BlockNumber(context.Background())`
$DIR/integration-tests/smoke/automation_test.go: `.Background()`
$DIR/integration-tests/smoke/automation_test.go: `.DeployConsumers(
t,
a.ChainClient,
a.Registry,
a.Registrar,
a.LinkToken,
defaultAmountOfUpkeeps,
big.NewInt(1),
automationDefaultUpkeepGasLimit,
false,
false,
)`
$DIR/integration-tests/smoke/automation_test.go: `.NewInt(1)`
$DIR/integration-tests/smoke/automation_test.go: `.Cleanup(func() {
actions_seth.GetStalenessReportCleanupFn(t, a.Logger, a.ChainClient, sb, a.Registry, registryVersion)()
})`
$DIR/integration-tests/smoke/automation_test.go: `.GetStalenessReportCleanupFn(t, a.Logger, a.ChainClient, sb, a.Registry, registryVersion)`
$DIR/integration-tests/smoke/automation_test.go: `.Info()`
$DIR/integration-tests/smoke/automation_test.go: `.Msg("Making sure for 2m no upkeeps are performed")`
$DIR/integration-tests/smoke/automation_test.go: `.NewGomegaWithT(t)`
$DIR/integration-tests/smoke/automation_test.go: `.Consistently(func(g gomega.Gomega) {
for i := 0; i < len(upkeepIDs); i++ {
counter, err := consumers[i].Counter(testcontext.Get(t))
g.Expect(err).ShouldNot(gomega.HaveOccurred(), "Calling consumer's counter shouldn't fail")
g.Expect(counter.Int64()).Should(gomega.Equal(int64(0)),
"Expected consumer counter to remain zero, but got %d", counter.Int64())
}
}, "2m", "1s")`
$DIR/integration-tests/smoke/automation_test.go: `.Counter(testcontext.Get(t))`
$DIR/integration-tests/smoke/automation_test.go: `.Get(t)`
$DIR/integration-tests/smoke/automation_test.go: `.Expect(err)`
$DIR/integration-tests/smoke/automation_test.go: `.ShouldNot(gomega.HaveOccurred(), "Calling consumer's counter shouldn't fail")`
$DIR/integration-tests/smoke/automation_test.go: `.HaveOccurred()`
$DIR/integration-tests/smoke/automation_test.go: `.Expect(counter.Int64())`
$DIR/integration-tests/smoke/automation_test.go: `.Int64()`
$DIR/integration-tests/smoke/automation_test.go: `.Should(gomega.Equal(int64(0)),
"Expected consumer counter to remain zero, but got %d", counter.Int64())`
$DIR/integration-tests/smoke/automation_test.go: `.Equal(int64(0))`
$DIR/integration-tests/smoke/automation_test.go: `.Int64()`
$DIR/integration-tests/smoke/automation_test.go: `.Should(gomega.Succeed())`
$DIR/integration-tests/smoke/automation_test.go: `.Succeed()`
$DIR/integration-tests/smoke/automation_test.go: `.LinkToken.Approve(a.Registry.Address(), big.NewInt(0).Mul(big.NewInt(9e18), big.NewInt(int64(len(upkeepIDs)))))`
$DIR/integration-tests/smoke/automation_test.go: `.Registry.Address()`
$DIR/integration-tests/smoke/automation_test.go: `.NewInt(0)`
$DIR/integration-tests/smoke/automation_test.go: `.Mul(big.NewInt(9e18), big.NewInt(int64(len(upkeepIDs))))`
$DIR/integration-tests/smoke/automation_test.go: `.NewInt(9e18)`
$DIR/integration-tests/smoke/automation_test.go: `.NewInt(int64(len(upkeepIDs)))`
$DIR/integration-tests/smoke/automation_test.go: `.Info()`
$DIR/integration-tests/smoke/automation_test.go: `.Msg("Adding funds to the upkeeps")`
$DIR/integration-tests/smoke/automation_test.go: `.Registry.AddUpkeepFunds(upkeepIDs[i], big.NewInt(9e18))`
$DIR/integration-tests/smoke/automation_test.go: `.NewInt(9e18)`
$DIR/integration-tests/smoke/automation_test.go: `.Info()`
$DIR/integration-tests/smoke/automation_test.go: `.Msg("Waiting for 2m for all contracts to perform at least one upkeep")`
$DIR/integration-tests/smoke/automation_test.go: `.Eventually(func(g gomega.Gomega) {
for i := 0; i < len(upkeepIDs); i++ {
counter, err := consumers[0].Counter(testcontext.Get(t))
g.Expect(err).ShouldNot(gomega.HaveOccurred(), "Calling consumer's counter shouldn't fail")
g.Expect(counter.Int64()).Should(gomega.BeNumerically(">", int64(0)),
"Expected consumer counter to be greater than 0, but got %d", counter.Int64())
}
}, "2m", "1s")`
$DIR/integration-tests/smoke/automation_test.go: `.Counter(testcontext.Get(t))`
$DIR/integration-tests/smoke/automation_test.go: `.Get(t)`
$DIR/integration-tests/smoke/automation_test.go: `.Expect(err)`
$DIR/integration-tests/smoke/automation_test.go: `.ShouldNot(gomega.HaveOccurred(), "Calling consumer's counter shouldn't fail")`
$DIR/integration-tests/smoke/automation_test.go: `.HaveOccurred()`
$DIR/integration-tests/smoke/automation_test.go: `.Expect(counter.Int64())`
$DIR/integration-tests/smoke/automation_test.go: `.Int64()`
$DIR/integration-tests/smoke/automation_test.go: `.Should(gomega.BeNumerically(">", int64(0)),
"Expected consumer counter to be greater than 0, but got %d", counter.Int64())`
$DIR/integration-tests/smoke/automation_test.go: `.BeNumerically(">", int64(0))`
$DIR/integration-tests/smoke/automation_test.go: `.Int64()`
$DIR/integration-tests/smoke/automation_test.go: `.Should(gomega.Succeed())`
$DIR/integration-tests/smoke/automation_test.go: `.Succeed()`
$DIR/integration-tests/smoke/automation_test.go: `.Run(name, func(t *testing.T) {
t.Parallel()
l := logging.GetTestLogger(t)
config, err := tc.GetConfig("Smoke", tc.Automation)
require.NoError(t, err, "Failed to get config")
a := setupAutomationTestDocker(
t, registryVersion, automationDefaultRegistryConfig(config), false, false, &config,
)
sb, err := a.ChainClient.Client.BlockNumber(context.Background())
require.NoError(t, err, "Failed to get start block")
consumers, upkeepIDs := actions_seth.DeployConsumers(
t,
a.ChainClient,
a.Registry,
a.Registrar,
a.LinkToken,
defaultAmountOfUpkeeps,
big.NewInt(automationDefaultLinkFunds),
automationDefaultUpkeepGasLimit,
false,
false,
)
t.Cleanup(func() {
actions_seth.GetStalenessReportCleanupFn(t, a.Logger, a.ChainClient, sb, a.Registry, registryVersion)()
})
gom := gomega.NewGomegaWithT(t)
gom.Eventually(func(g gomega.Gomega) {
// Check if the upkeeps are performing multiple times by analyzing their counters and checking they are greater than 5
for i := 0; i < len(upkeepIDs); i++ {
counter, err := consumers[i].Counter(testcontext.Get(t))
g.Expect(err).ShouldNot(gomega.HaveOccurred(), "Failed to retrieve consumer counter for upkeep at index %d", i)
g.Expect(counter.Int64()).Should(gomega.BeNumerically(">", int64(5)),
"Expected consumer counter to be greater than 5, but got %d", counter.Int64())
l.Info().Int("Upkeep Index", i).Int64("Upkeep counter", counter.Int64()).Msg("Number of upkeeps performed")
}
}, "5m", "1s").Should(gomega.Succeed()) // ~1m for cluster setup, ~2m for performing each upkeep 5 times, ~2m buffer
// pause all the registered upkeeps via the registry
for i := 0; i < len(upkeepIDs); i++ {
err := a.Registry.PauseUpkeep(upkeepIDs[i])
require.NoError(t, err, "Could not pause upkeep at index %d", i)
}
var countersAfterPause = make([]*big.Int, len(upkeepIDs))
for i := 0; i < len(upkeepIDs); i++ {
// Obtain the amount of times the upkeep has been executed so far
countersAfterPause[i], err = consumers[i].Counter(testcontext.Get(t))
require.NoError(t, err, "Failed to retrieve consumer counter for upkeep at index %d", i)
l.Info().Int("Upkeep Index", i).Int64("Upkeeps Performed", countersAfterPause[i].Int64()).Msg("Paused Upkeep")
}
gom.Consistently(func(g gomega.Gomega) {
for i := 0; i < len(upkeepIDs); i++ {
// In most cases counters should remain constant, but there might be a straggling perform tx which
// gets committed later and increases counter by 1
latestCounter, err := consumers[i].Counter(testcontext.Get(t))
g.Expect(err).ShouldNot(gomega.HaveOccurred(), "Failed to retrieve consumer counter for upkeep at index %d", i)
g.Expect(latestCounter.Int64()).Should(gomega.BeNumerically("<=", countersAfterPause[i].Int64()+1),
"Expected consumer counter not have increased more than %d, but got %d",
countersAfterPause[i].Int64()+1, latestCounter.Int64())
}
}, "1m", "1s").Should(gomega.Succeed())
// unpause all the registered upkeeps via the registry
for i := 0; i < len(upkeepIDs); i++ {
err := a.Registry.UnpauseUpkeep(upkeepIDs[i])
require.NoError(t, err, "Could not unpause upkeep at index %d", i)
}
gom.Eventually(func(g gomega.Gomega) {
// Check if the upkeeps are performing multiple times by analysing their counters and checking they are greater than 5 + numbers of performing before pause
for i := 0; i < len(upkeepIDs); i++ {
counter, err := consumers[i].Counter(testcontext.Get(t))
g.Expect(err).ShouldNot(gomega.HaveOccurred(), "Failed to retrieve consumer counter for upkeep at index %d", i)
g.Expect(counter.Int64()).Should(gomega.BeNumerically(">", countersAfterPause[i].Int64()+1),
"Expected consumer counter to be greater than %d, but got %d", countersAfterPause[i].Int64()+1, counter.Int64())
l.Info().Int64("Upkeep counter", counter.Int64()).Msg("Number of upkeeps performed")
}
}, "2m", "1s").Should(gomega.Succeed()) // ~1m to perform, 1m buffer
})`
$DIR/integration-tests/smoke/automation_test.go: `.GetTestLogger(t)`
$DIR/integration-tests/smoke/automation_test.go: `.GetConfig("Smoke", tc.Automation)`
$DIR/integration-tests/smoke/automation_test.go: `.ChainClient.Client.BlockNumber(context.Background())`
$DIR/integration-tests/smoke/automation_test.go: `.Background()`
$DIR/integration-tests/smoke/automation_test.go: `.DeployConsumers(
t,
a.ChainClient,
a.Registry,
a.Registrar,
a.LinkToken,
defaultAmountOfUpkeeps,
big.NewInt(automationDefaultLinkFunds),
automationDefaultUpkeepGasLimit,
false,
false,
)`
$DIR/integration-tests/smoke/automation_test.go: `.NewInt(automationDefaultLinkFunds)`
$DIR/integration-tests/smoke/automation_test.go: `.Cleanup(func() {
actions_seth.GetStalenessReportCleanupFn(t, a.Logger, a.ChainClient, sb, a.Registry, registryVersion)()
})`
$DIR/integration-tests/smoke/automation_test.go: `.GetStalenessReportCleanupFn(t, a.Logger, a.ChainClient, sb, a.Registry, registryVersion)`
$DIR/integration-tests/smoke/automation_test.go: `.NewGomegaWithT(t)`
$DIR/integration-tests/smoke/automation_test.go: `.Eventually(func(g gomega.Gomega) {
// Check if the upkeeps are performing multiple times by analyzing their counters and checking they are greater than 5
for i := 0; i < len(upkeepIDs); i++ {
counter, err := consumers[i].Counter(testcontext.Get(t))
g.Expect(err).ShouldNot(gomega.HaveOccurred(), "Failed to retrieve consumer counter for upkeep at index %d", i)
g.Expect(counter.Int64()).Should(gomega.BeNumerically(">", int64(5)),
"Expected consumer counter to be greater than 5, but got %d", counter.Int64())
l.Info().Int("Upkeep Index", i).Int64("Upkeep counter", counter.Int64()).Msg("Number of upkeeps performed")
}
}, "5m", "1s")`
$DIR/integration-tests/smoke/automation_test.go: `.Counter(testcontext.Get(t))`
$DIR/integration-tests/smoke/automation_test.go: `.Get(t)`
$DIR/integration-tests/smoke/automation_test.go: `.Expect(err)`
$DIR/integration-tests/smoke/automation_test.go: `.ShouldNot(gomega.HaveOccurred(), "Failed to retrieve consumer counter for upkeep at index %d", i)`
$DIR/integration-tests/smoke/automation_test.go: `.HaveOccurred()`
$DIR/integration-tests/smoke/automation_test.go: `.Expect(counter.Int64())`
$DIR/integration-tests/smoke/automation_test.go: `.Int64()`
$DIR/integration-tests/smoke/automation_test.go: `.Should(gomega.BeNumerically(">", int64(5)),
"Expected consumer counter to be greater than 5, but got %d", counter.Int64())`
$DIR/integration-tests/smoke/automation_test.go: `.BeNumerically(">", int64(5))`
$DIR/integration-tests/smoke/automation_test.go: `.Int64()`
$DIR/integration-tests/smoke/automation_test.go: `.Info()`
$DIR/integration-tests/smoke/automation_test.go: `.Int("Upkeep Index", i)`
$DIR/integration-tests/smoke/automation_test.go: `.Int64("Upkeep counter", counter.Int64())`
$DIR/integration-tests/smoke/automation_test.go: `.Int64()`
$DIR/integration-tests/smoke/automation_test.go: `.Msg("Number of upkeeps performed")`
$DIR/integration-tests/smoke/automation_test.go: `.Should(gomega.Succeed())`
$DIR/integration-tests/smoke/automation_test.go: `.Succeed()`
$DIR/integration-tests/smoke/automation_test.go: `.Registry.PauseUpkeep(upkeepIDs[i])`
$DIR/integration-tests/smoke/automation_test.go: `.Counter(testcontext.Get(t))`
$DIR/integration-tests/smoke/automation_test.go: `.Get(t)`
$DIR/integration-tests/smoke/automation_test.go: `.Info()`
$DIR/integration-tests/smoke/automation_test.go: `.Int("Upkeep Index", i)`
$DIR/integration-tests/smoke/automation_test.go: `.Int64("Upkeeps Performed", countersAfterPause[i].Int64())`
$DIR/integration-tests/smoke/automation_test.go: `.Int64()`
$DIR/integration-tests/smoke/automation_test.go: `.Msg("Paused Upkeep")`
$DIR/integration-tests/smoke/automation_test.go: `.Consistently(func(g gomega.Gomega) {
for i := 0; i < len(upkeepIDs); i++ {
// In most cases counters should remain constant, but there might be a straggling perform tx which
// gets committed later and increases counter by 1
latestCounter, err := consumers[i].Counter(testcontext.Get(t))
g.Expect(err).ShouldNot(gomega.HaveOccurred(), "Failed to retrieve consumer counter for upkeep at index %d", i)
g.Expect(latestCounter.Int64()).Should(gomega.BeNumerically("<=", countersAfterPause[i].Int64()+1),
"Expected consumer counter not have increased more than %d, but got %d",
countersAfterPause[i].Int64()+1, latestCounter.Int64())
}
}, "1m", "1s")`
$DIR/integration-tests/smoke/automation_test.go: `.Counter(testcontext.Get(t))`
$DIR/integration-tests/smoke/automation_test.go: `.Get(t)`
$DIR/integration-tests/smoke/automation_test.go: `.Expect(err)`
$DIR/integration-tests/smoke/automation_test.go: `.ShouldNot(gomega.HaveOccurred(), "Failed to retrieve consumer counter for upkeep at index %d", i)`
$DIR/integration-tests/smoke/automation_test.go: `.HaveOccurred()`
$DIR/integration-tests/smoke/automation_test.go: `.Expect(latestCounter.Int64())`
$DIR/integration-tests/smoke/automation_test.go: `.Int64()`
$DIR/integration-tests/smoke/automation_test.go: `.Should(gomega.BeNumerically("<=", countersAfterPause[i].Int64()+1),
"Expected consumer counter not have increased more than %d, but got %d",
countersAfterPause[i].Int64()+1, latestCounter.Int64())`
$DIR/integration-tests/smoke/automation_test.go: `.BeNumerically("<=", countersAfterPause[i].Int64()+1)`
$DIR/integration-tests/smoke/automation_test.go: `.Int64()`
$DIR/integration-tests/smoke/automation_test.go: `.Int64()`
$DIR/integration-tests/smoke/automation_test.go: `.Int64()`
$DIR/integration-tests/smoke/automation_test.go: `.Should(gomega.Succeed())`
$DIR/integration-tests/smoke/automation_test.go: `.Succeed()`
$DIR/integration-tests/smoke/automation_test.go: `.Registry.UnpauseUpkeep(upkeepIDs[i])`
$DIR/integration-tests/smoke/automation_test.go: `.Eventually(func(g gomega.Gomega) {
// Check if the upkeeps are performing multiple times by analysing their counters and checking they are greater than 5 + numbers of performing before pause
for i := 0; i < len(upkeepIDs); i++ {
counter, err := consumers[i].Counter(testcontext.Get(t))
g.Expect(err).ShouldNot(gomega.HaveOccurred(), "Failed to retrieve consumer counter for upkeep at index %d", i)
g.Expect(counter.Int64()).Should(gomega.BeNumerically(">", countersAfterPause[i].Int64()+1),
"Expected consumer counter to be greater than %d, but got %d", countersAfterPause[i].Int64()+1, counter.Int64())
l.Info().Int64("Upkeep counter", counter.Int64()).Msg("Number of upkeeps performed")
}
}, "2m", "1s")`
$DIR/integration-tests/smoke/automation_test.go: `.Counter(testcontext.Get(t))`
$DIR/integration-tests/smoke/automation_test.go: `.Get(t)`
$DIR/integration-tests/smoke/automation_test.go: `.Expect(err)`
$DIR/integration-tests/smoke/automation_test.go: `.ShouldNot(gomega.HaveOccurred(), "Failed to retrieve consumer counter for upkeep at index %d", i)`
$DIR/integration-tests/smoke/automation_test.go: `.HaveOccurred()`
$DIR/integration-tests/smoke/automation_test.go: `.Expect(counter.Int64())`
$DIR/integration-tests/smoke/automation_test.go: `.Int64()`
$DIR/integration-tests/smoke/automation_test.go: `.Should(gomega.BeNumerically(">", countersAfterPause[i].Int64()+1),
"Expected consumer counter to be greater than %d, but got %d", countersAfterPause[i].Int64()+1, counter.Int64())`
$DIR/integration-tests/smoke/automation_test.go: `.BeNumerically(">", countersAfterPause[i].Int64()+1)`
$DIR/integration-tests/smoke/automation_test.go: `.Int64()`
$DIR/integration-tests/smoke/automation_test.go: `.Int64()`
$DIR/integration-tests/smoke/automation_test.go: `.Int64()`
$DIR/integration-tests/smoke/automation_test.go: `.Info()`
$DIR/integration-tests/smoke/automation_test.go: `.Int64("Upkeep counter", counter.Int64())`
$DIR/integration-tests/smoke/automation_test.go: `.Int64()`
$DIR/integration-tests/smoke/automation_test.go: `.Msg("Number of upkeeps performed")`
$DIR/integration-tests/smoke/automation_test.go: `.Should(gomega.Succeed())`
$DIR/integration-tests/smoke/automation_test.go: `.Succeed()`
$DIR/integration-tests/smoke/automation_test.go: `.Run(name, func(t *testing.T) {
t.Parallel()
l := logging.GetTestLogger(t)
config, err := tc.GetConfig("Smoke", tc.Automation)
require.NoError(t, err, "Failed to get config")
a := setupAutomationTestDocker(
t, registryVersion, automationDefaultRegistryConfig(config), false, false, &config,
)
sb, err := a.ChainClient.Client.BlockNumber(context.Background())
require.NoError(t, err, "Failed to get start block")
consumers, upkeepIDs := actions_seth.DeployConsumers(
t,
a.ChainClient,
a.Registry,
a.Registrar,
a.LinkToken,
defaultAmountOfUpkeeps,
big.NewInt(automationDefaultLinkFunds),
automationDefaultUpkeepGasLimit,
false,
false,
)
t.Cleanup(func() {
actions_seth.GetStalenessReportCleanupFn(t, a.Logger, a.ChainClient, sb, a.Registry, registryVersion)()
})
var initialCounters = make([]*big.Int, len(upkeepIDs))
gom := gomega.NewGomegaWithT(t)
// Observe that the upkeeps which are initially registered are performing and
// store the value of their initial counters in order to compare later on that the value increased.
gom.Eventually(func(g gomega.Gomega) {
for i := 0; i < len(upkeepIDs); i++ {
counter, err := consumers[i].Counter(testcontext.Get(t))
initialCounters[i] = counter
g.Expect(err).ShouldNot(gomega.HaveOccurred(), "Failed to retrieve consumer counter for upkeep at index %d", i)
g.Expect(counter.Int64()).Should(gomega.BeNumerically(">", int64(0)),
"Expected consumer counter to be greater than 0, but got %d", counter.Int64())
l.Info().
Int64("Upkeep counter", counter.Int64()).
Int64("Upkeep index", int64(i)).
Msg("Number of upkeeps performed")
}
}, "4m", "1s").Should(gomega.Succeed()) // ~1m for cluster setup, ~1m for performing each upkeep once, ~2m buffer
newConsumers, _ := actions_seth.RegisterNewUpkeeps(t, a.ChainClient, a.LinkToken,
a.Registry, a.Registrar, automationDefaultUpkeepGasLimit, 1)
// We know that newConsumers has size 1, so we can just use the newly registered upkeep.
newUpkeep := newConsumers[0]
// Test that the newly registered upkeep is also performing.
gom.Eventually(func(g gomega.Gomega) {
counter, err := newUpkeep.Counter(testcontext.Get(t))
g.Expect(err).ShouldNot(gomega.HaveOccurred(), "Calling newly deployed upkeep's counter shouldn't fail")
g.Expect(counter.Int64()).Should(gomega.BeNumerically(">", int64(0)),
"Expected newly registered upkeep's counter to be greater than 0, but got %d", counter.Int64())
l.Info().Int64("Upkeeps Performed", counter.Int64()).Msg("Newly Registered Upkeep")
}, "2m", "1s").Should(gomega.Succeed()) // ~1m for upkeep to perform, 1m buffer
gom.Eventually(func(g gomega.Gomega) {
for i := 0; i < len(upkeepIDs); i++ {
currentCounter, err := consumers[i].Counter(testcontext.Get(t))
g.Expect(err).ShouldNot(gomega.HaveOccurred(), "Calling consumer's counter shouldn't fail")
l.Info().
Int64("Upkeep index", int64(i)).
Int64("Upkeep counter", currentCounter.Int64()).
Int64("initial counter", initialCounters[i].Int64()).
Msg("Number of upkeeps performed")
g.Expect(currentCounter.Int64()).Should(gomega.BeNumerically(">", initialCounters[i].Int64()),
"Expected counter to have increased from initial value of %s, but got %s",
initialCounters[i], currentCounter)
}
}, "2m", "1s").Should(gomega.Succeed()) // ~1m for upkeeps to perform, 1m buffer
})`
$DIR/integration-tests/smoke/automation_test.go: `.GetTestLogger(t)`
$DIR/integration-tests/smoke/automation_test.go: `.GetConfig("Smoke", tc.Automation)`
$DIR/integration-tests/smoke/automation_test.go: `.ChainClient.Client.BlockNumber(context.Background())`
$DIR/integration-tests/smoke/automation_test.go: `.Background()`
$DIR/integration-tests/smoke/automation_test.go: `.DeployConsumers(
t,
a.ChainClient,
a.Registry,
a.Registrar,
a.LinkToken,
defaultAmountOfUpkeeps,
big.NewInt(automationDefaultLinkFunds),
automationDefaultUpkeepGasLimit,
false,
false,
)`
$DIR/integration-tests/smoke/automation_test.go: `.NewInt(automationDefaultLinkFunds)`
$DIR/integration-tests/smoke/automation_test.go: `.Cleanup(func() {
actions_seth.GetStalenessReportCleanupFn(t, a.Logger, a.ChainClient, sb, a.Registry, registryVersion)()
})`
$DIR/integration-tests/smoke/automation_test.go: `.GetStalenessReportCleanupFn(t, a.Logger, a.ChainClient, sb, a.Registry, registryVersion)`
$DIR/integration-tests/smoke/automation_test.go: `.NewGomegaWithT(t)`
$DIR/integration-tests/smoke/automation_test.go: `.Eventually(func(g gomega.Gomega) {
for i := 0; i < len(upkeepIDs); i++ {
counter, err := consumers[i].Counter(testcontext.Get(t))
initialCounters[i] = counter
g.Expect(err).ShouldNot(gomega.HaveOccurred(), "Failed to retrieve consumer counter for upkeep at index %d", i)
g.Expect(counter.Int64()).Should(gomega.BeNumerically(">", int64(0)),
"Expected consumer counter to be greater than 0, but got %d", counter.Int64())
l.Info().
Int64("Upkeep counter", counter.Int64()).
Int64("Upkeep index", int64(i)).
Msg("Number of upkeeps performed")
}
}, "4m", "1s")`
$DIR/integration-tests/smoke/automation_test.go: `.Counter(testcontext.Get(t))`
$DIR/integration-tests/smoke/automation_test.go: `.Get(t)`
$DIR/integration-tests/smoke/automation_test.go: `.Expect(err)`
$DIR/integration-tests/smoke/automation_test.go: `.ShouldNot(gomega.HaveOccurred(), "Failed to retrieve consumer counter for upkeep at index %d", i)`
$DIR/integration-tests/smoke/automation_test.go: `.HaveOccurred()`
$DIR/integration-tests/smoke/automation_test.go: `.Expect(counter.Int64())`
$DIR/integration-tests/smoke/automation_test.go: `.Int64()`
$DIR/integration-tests/smoke/automation_test.go: `.Should(gomega.BeNumerically(">", int64(0)),
"Expected consumer counter to be greater than 0, but got %d", counter.Int64())`
$DIR/integration-tests/smoke/automation_test.go: `.BeNumerically(">", int64(0))`
$DIR/integration-tests/smoke/automation_test.go: `.Int64()`
$DIR/integration-tests/smoke/automation_test.go: `.Info()`
$DIR/integration-tests/smoke/automation_test.go: `.
Int64("Upkeep counter", counter.Int64())`
$DIR/integration-tests/smoke/automation_test.go: `.Int64()`
$DIR/integration-tests/smoke/automation_test.go: `.
Int64("Upkeep index", int64(i))`
$DIR/integration-tests/smoke/automation_test.go: `.
Msg("Number of upkeeps performed")`
$DIR/integration-tests/smoke/automation_test.go: `.Should(gomega.Succeed())`
$DIR/integration-tests/smoke/automation_test.go: `.Succeed()`
$DIR/integration-tests/smoke/automation_test.go: `.RegisterNewUpkeeps(t, a.ChainClient, a.LinkToken,
a.Registry, a.Registrar, automationDefaultUpkeepGasLimit, 1)`
$DIR/integration-tests/smoke/automation_test.go: `.Eventually(func(g gomega.Gomega) {
counter, err := newUpkeep.Counter(testcontext.Get(t))
g.Expect(err).ShouldNot(gomega.HaveOccurred(), "Calling newly deployed upkeep's counter shouldn't fail")
g.Expect(counter.Int64()).Should(gomega.BeNumerically(">", int64(0)),
"Expected newly registered upkeep's counter to be greater than 0, but got %d", counter.Int64())
l.Info().Int64("Upkeeps Performed", counter.Int64()).Msg("Newly Registered Upkeep")
}, "2m", "1s")`
$DIR/integration-tests/smoke/automation_test.go: `.Counter(testcontext.Get(t))`
$DIR/integration-tests/smoke/automation_test.go: `.Get(t)`
$DIR/integration-tests/smoke/automation_test.go: `.Expect(err)`
$DIR/integration-tests/smoke/automation_test.go: `.ShouldNot(gomega.HaveOccurred(), "Calling newly deployed upkeep's counter shouldn't fail")`
$DIR/integration-tests/smoke/automation_test.go: `.HaveOccurred()`
$DIR/integration-tests/smoke/automation_test.go: `.Expect(counter.Int64())`
$DIR/integration-tests/smoke/automation_test.go: `.Int64()`
$DIR/integration-tests/smoke/automation_test.go: `.Should(gomega.BeNumerically(">", int64(0)),
"Expected newly registered upkeep's counter to be greater than 0, but got %d", counter.Int64())`
$DIR/integration-tests/smoke/automation_test.go: `.BeNumerically(">", int64(0))`
$DIR/integration-tests/smoke/automation_test.go: `.Int64()`
$DIR/integration-tests/smoke/automation_test.go: `.Info()`
$DIR/integration-tests/smoke/automation_test.go: `.Int64("Upkeeps Performed", counter.Int64())`
$DIR/integration-tests/smoke/automation_test.go: `.Int64()`
$DIR/integration-tests/smoke/automation_test.go: `.Msg("Newly Registered Upkeep")`
$DIR/integration-tests/smoke/automation_test.go: `.Should(gomega.Succeed())`
$DIR/integration-tests/smoke/automation_test.go: `.Succeed()`
$DIR/integration-tests/smoke/automation_test.go: `.Eventually(func(g gomega.Gomega) {
for i := 0; i < len(upkeepIDs); i++ {
currentCounter, err := consumers[i].Counter(testcontext.Get(t))
g.Expect(err).ShouldNot(gomega.HaveOccurred(), "Calling consumer's counter shouldn't fail")
l.Info().
Int64("Upkeep index", int64(i)).
Int64("Upkeep counter", currentCounter.Int64()).
Int64("initial counter", initialCounters[i].Int64()).
Msg("Number of upkeeps performed")
g.Expect(currentCounter.Int64()).Should(gomega.BeNumerically(">", initialCounters[i].Int64()),
"Expected counter to have increased from initial value of %s, but got %s",
initialCounters[i], currentCounter)
}
}, "2m", "1s")`
$DIR/integration-tests/smoke/automation_test.go: `.Counter(testcontext.Get(t))`
$DIR/integration-tests/smoke/automation_test.go: `.Get(t)`
$DIR/integration-tests/smoke/automation_test.go: `.Expect(err)`
$DIR/integration-tests/smoke/automation_test.go: `.ShouldNot(gomega.HaveOccurred(), "Calling consumer's counter shouldn't fail")`
$DIR/integration-tests/smoke/automation_test.go: `.HaveOccurred()`
$DIR/integration-tests/smoke/automation_test.go: `.Info()`
$DIR/integration-tests/smoke/automation_test.go: `.
Int64("Upkeep index", int64(i))`
$DIR/integration-tests/smoke/automation_test.go: `.
Int64("Upkeep counter", currentCounter.Int64())`
$DIR/integration-tests/smoke/automation_test.go: `.Int64()`
$DIR/integration-tests/smoke/automation_test.go: `.
Int64("initial counter", initialCounters[i].Int64())`
$DIR/integration-tests/smoke/automation_test.go: `.Int64()`
$DIR/integration-tests/smoke/automation_test.go: `.
Msg("Number of upkeeps performed")`
$DIR/integration-tests/smoke/automation_test.go: `.Expect(currentCounter.Int64())`
$DIR/integration-tests/smoke/automation_test.go: `.Int64()`
$DIR/integration-tests/smoke/automation_test.go: `.Should(gomega.BeNumerically(">", initialCounters[i].Int64()),
"Expected counter to have increased from initial value of %s, but got %s",
initialCounters[i], currentCounter)`
$DIR/integration-tests/smoke/automation_test.go: `.BeNumerically(">", initialCounters[i].Int64())`
$DIR/integration-tests/smoke/automation_test.go: `.Int64()`
$DIR/integration-tests/smoke/automation_test.go: `.Should(gomega.Succeed())`
$DIR/integration-tests/smoke/automation_test.go: `.Succeed()`
$DIR/integration-tests/smoke/automation_test.go: `.Run(name, func(t *testing.T) {
t.Parallel()
config, err := tc.GetConfig("Smoke", tc.Automation)
require.NoError(t, err, "Failed to get config")
a := setupAutomationTestDocker(
t, registryVersion, automationDefaultRegistryConfig(config), false, false, &config,
)
sb, err := a.ChainClient.Client.BlockNumber(context.Background())
require.NoError(t, err, "Failed to get start block")
consumers, upkeepIDs := actions_seth.DeployConsumers(
t,
a.ChainClient,
a.Registry,
a.Registrar,
a.LinkToken,
defaultAmountOfUpkeeps,
big.NewInt(automationDefaultLinkFunds),
automationDefaultUpkeepGasLimit,
false,
false,
)
t.Cleanup(func() {
actions_seth.GetStalenessReportCleanupFn(t, a.Logger, a.ChainClient, sb, a.Registry, registryVersion)()
})
gom := gomega.NewGomegaWithT(t)
// Observe that the upkeeps which are initially registered are performing
gom.Eventually(func(g gomega.Gomega) {
for i := 0; i < len(upkeepIDs); i++ {
counter, err := consumers[i].Counter(testcontext.Get(t))
g.Expect(err).ShouldNot(gomega.HaveOccurred(), "Failed to retrieve consumer counter for upkeep at index %d", i)
g.Expect(counter.Int64()).Should(gomega.BeNumerically(">", int64(0)),
"Expected consumer counter to be greater than 0, but got %d")
}
}, "4m", "1s").Should(gomega.Succeed()) // ~1m for cluster setup, ~1m for performing each upkeep once, ~2m buffer
// Pause the registry
err = a.Registry.Pause()
require.NoError(t, err, "Error pausing registry")
// Store how many times each upkeep performed once the registry was successfully paused
var countersAfterPause = make([]*big.Int, len(upkeepIDs))
for i := 0; i < len(upkeepIDs); i++ {
countersAfterPause[i], err = consumers[i].Counter(testcontext.Get(t))
require.NoError(t, err, "Failed to retrieve consumer counter for upkeep at index %d", i)
}
// After we paused the registry, the counters of all the upkeeps should stay constant
// because they are no longer getting serviced
gom.Consistently(func(g gomega.Gomega) {
for i := 0; i < len(upkeepIDs); i++ {
latestCounter, err := consumers[i].Counter(testcontext.Get(t))
g.Expect(err).ShouldNot(gomega.HaveOccurred(), "Failed to retrieve consumer counter for upkeep at index %d", i)
g.Expect(latestCounter.Int64()).Should(gomega.Equal(countersAfterPause[i].Int64()),
"Expected consumer counter to remain constant at %d, but got %d",
countersAfterPause[i].Int64(), latestCounter.Int64())
}
}, "1m", "1s").Should(gomega.Succeed())
})`
$DIR/integration-tests/smoke/automation_test.go: `.GetConfig("Smoke", tc.Automation)`
$DIR/integration-tests/smoke/automation_test.go: `.ChainClient.Client.BlockNumber(context.Background())`
$DIR/integration-tests/smoke/automation_test.go: `.Background()`
$DIR/integration-tests/smoke/automation_test.go: `.DeployConsumers(
t,
a.ChainClient,
a.Registry,
a.Registrar,
a.LinkToken,
defaultAmountOfUpkeeps,
big.NewInt(automationDefaultLinkFunds),
automationDefaultUpkeepGasLimit,
false,
false,
)`
$DIR/integration-tests/smoke/automation_test.go: `.NewInt(automationDefaultLinkFunds)`
$DIR/integration-tests/smoke/automation_test.go: `.Cleanup(func() {
actions_seth.GetStalenessReportCleanupFn(t, a.Logger, a.ChainClient, sb, a.Registry, registryVersion)()
})`
$DIR/integration-tests/smoke/automation_test.go: `.GetStalenessReportCleanupFn(t, a.Logger, a.ChainClient, sb, a.Registry, registryVersion)`
$DIR/integration-tests/smoke/automation_test.go: `.NewGomegaWithT(t)`
$DIR/integration-tests/smoke/automation_test.go: `.Eventually(func(g gomega.Gomega) {
for i := 0; i < len(upkeepIDs); i++ {
counter, err := consumers[i].Counter(testcontext.Get(t))
g.Expect(err).ShouldNot(gomega.HaveOccurred(), "Failed to retrieve consumer counter for upkeep at index %d", i)
g.Expect(counter.Int64()).Should(gomega.BeNumerically(">", int64(0)),
"Expected consumer counter to be greater than 0, but got %d")
}
}, "4m", "1s")`
$DIR/integration-tests/smoke/automation_test.go: `.Counter(testcontext.Get(t))`
$DIR/integration-tests/smoke/automation_test.go: `.Get(t)`
$DIR/integration-tests/smoke/automation_test.go: `.Expect(err)`
$DIR/integration-tests/smoke/automation_test.go: `.ShouldNot(gomega.HaveOccurred(), "Failed to retrieve consumer counter for upkeep at index %d", i)`
$DIR/integration-tests/smoke/automation_test.go: `.HaveOccurred()`
$DIR/integration-tests/smoke/automation_test.go: `.Expect(counter.Int64())`
$DIR/integration-tests/smoke/automation_test.go: `.Int64()`
$DIR/integration-tests/smoke/automation_test.go: `.Should(gomega.BeNumerically(">", int64(0)),
"Expected consumer counter to be greater than 0, but got %d")`
$DIR/integration-tests/smoke/automation_test.go: `.BeNumerically(">", int64(0))`
$DIR/integration-tests/smoke/automation_test.go: `.Should(gomega.Succeed())`
$DIR/integration-tests/smoke/automation_test.go: `.Succeed()`
$DIR/integration-tests/smoke/automation_test.go: `.Registry.Pause()`
$DIR/integration-tests/smoke/automation_test.go: `.Counter(testcontext.Get(t))`
$DIR/integration-tests/smoke/automation_test.go: `.Get(t)`
$DIR/integration-tests/smoke/automation_test.go: `.Consistently(func(g gomega.Gomega) {
for i := 0; i < len(upkeepIDs); i++ {
latestCounter, err := consumers[i].Counter(testcontext.Get(t))
g.Expect(err).ShouldNot(gomega.HaveOccurred(), "Failed to retrieve consumer counter for upkeep at index %d", i)
g.Expect(latestCounter.Int64()).Should(gomega.Equal(countersAfterPause[i].Int64()),
"Expected consumer counter to remain constant at %d, but got %d",
countersAfterPause[i].Int64(), latestCounter.Int64())
}
}, "1m", "1s")`
$DIR/integration-tests/smoke/automation_test.go: `.Counter(testcontext.Get(t))`
$DIR/integration-tests/smoke/automation_test.go: `.Get(t)`
$DIR/integration-tests/smoke/automation_test.go: `.Expect(err)`
$DIR/integration-tests/smoke/automation_test.go: `.ShouldNot(gomega.HaveOccurred(), "Failed to retrieve consumer counter for upkeep at index %d", i)`
$DIR/integration-tests/smoke/automation_test.go: `.HaveOccurred()`
$DIR/integration-tests/smoke/automation_test.go: `.Expect(latestCounter.Int64())`
$DIR/integration-tests/smoke/automation_test.go: `.Int64()`
$DIR/integration-tests/smoke/automation_test.go: `.Should(gomega.Equal(countersAfterPause[i].Int64()),
"Expected consumer counter to remain constant at %d, but got %d",
countersAfterPause[i].Int64(), latestCounter.Int64())`
$DIR/integration-tests/smoke/automation_test.go: `.Equal(countersAfterPause[i].Int64())`
$DIR/integration-tests/smoke/automation_test.go: `.Int64()`
$DIR/integration-tests/smoke/automation_test.go: `.Int64()`
$DIR/integration-tests/smoke/automation_test.go: `.Int64()`
$DIR/integration-tests/smoke/automation_test.go: `.Should(gomega.Succeed())`
$DIR/integration-tests/smoke/automation_test.go: `.Succeed()`
$DIR/integration-tests/smoke/automation_test.go: `.Run(name, func(t *testing.T) {
t.Parallel()
l := logging.GetTestLogger(t)
config, err := tc.GetConfig("Smoke", tc.Automation)
require.NoError(t, err, "Failed to get config")
a := setupAutomationTestDocker(
t, registryVersion, automationDefaultRegistryConfig(config), false, false, &config,
)
sb, err := a.ChainClient.Client.BlockNumber(context.Background())
require.NoError(t, err, "Failed to get start block")
consumers, upkeepIDs := actions_seth.DeployConsumers(
t,
a.ChainClient,
a.Registry,
a.Registrar,
a.LinkToken,
defaultAmountOfUpkeeps,
big.NewInt(automationDefaultLinkFunds),
automationDefaultUpkeepGasLimit,
false,
false,
)
t.Cleanup(func() {
actions_seth.GetStalenessReportCleanupFn(t, a.Logger, a.ChainClient, sb, a.Registry, registryVersion)()
})
gom := gomega.NewGomegaWithT(t)
nodesWithoutBootstrap := a.ChainlinkNodes[1:]
var initialCounters = make([]*big.Int, len(upkeepIDs))
// Watch upkeeps being performed and store their counters in order to compare them later in the test
gom.Eventually(func(g gomega.Gomega) {
for i := 0; i < len(upkeepIDs); i++ {
counter, err := consumers[i].Counter(testcontext.Get(t))
initialCounters[i] = counter
l.Info().Int64("Upkeeps Performed", counter.Int64()).Int("Upkeep Index", i).Msg("Number of upkeeps performed")
g.Expect(err).ShouldNot(gomega.HaveOccurred(), "Failed to retrieve consumer counter for upkeep at index %d", i)
g.Expect(counter.Int64()).Should(gomega.BeNumerically(">", int64(0)),
"Expected consumer counter to be greater than 0, but got %d", counter.Int64())
}
}, "4m", "1s").Should(gomega.Succeed()) // ~1m for cluster setup, ~1m for performing each upkeep once, ~2m buffer
// Take down 1 node. Currently, using 4 nodes so f=1 and is the max nodes that can go down.
err = nodesWithoutBootstrap[0].MustDeleteJob("1")
require.NoError(t, err, "Error deleting job from Chainlink node")
l.Info().Msg("Successfully managed to take down the first half of the nodes")
// Assert that upkeeps are still performed and their counters have increased
gom.Eventually(func(g gomega.Gomega) {
for i := 0; i < len(upkeepIDs); i++ {
currentCounter, err := consumers[i].Counter(testcontext.Get(t))
l.Info().Int64("Upkeeps Performed", currentCounter.Int64()).Int("Upkeep Index", i).Msg("Number of upkeeps performed")
g.Expect(err).ShouldNot(gomega.HaveOccurred(), "Failed to retrieve consumer counter for upkeep at index %d", i)
g.Expect(currentCounter.Int64()).Should(gomega.BeNumerically(">", initialCounters[i].Int64()),
"Expected counter to have increased from initial value of %s, but got %s",
initialCounters[i], currentCounter)
}
}, "2m", "1s").Should(gomega.Succeed()) // ~1m for each upkeep to perform once, 1m buffer
// Take down the rest
restOfNodesDown := nodesWithoutBootstrap[1:]
for _, nodeToTakeDown := range restOfNodesDown {
err = nodeToTakeDown.MustDeleteJob("1")
require.NoError(t, err, "Error deleting job from Chainlink node")
}
l.Info().Msg("Successfully managed to take down the second half of the nodes")
// See how many times each upkeep was executed
var countersAfterNoMoreNodes = make([]*big.Int, len(upkeepIDs))
for i := 0; i < len(upkeepIDs); i++ {
countersAfterNoMoreNodes[i], err = consumers[i].Counter(testcontext.Get(t))
require.NoError(t, err, "Failed to retrieve consumer counter for upkeep at index %d", i)
l.Info().Int("Upkeep Index", i).Int64("Performed", countersAfterNoMoreNodes[i].Int64()).Msg("Upkeeps Performed")
}
// Once all the nodes are taken down, there might be some straggling transactions which went through before
// all the nodes were taken down
gom.Consistently(func(g gomega.Gomega) {
for i := 0; i < len(upkeepIDs); i++ {
latestCounter, err := consumers[i].Counter(testcontext.Get(t))
g.Expect(err).ShouldNot(gomega.HaveOccurred(), "Failed to retrieve consumer counter for upkeep at index %d", i)
g.Expect(latestCounter.Int64()).Should(gomega.BeNumerically("<=", countersAfterNoMoreNodes[i].Int64()+1),
"Expected consumer counter to not have increased more than %d, but got %d",
countersAfterNoMoreNodes[i].Int64()+1, latestCounter.Int64())
}
}, "2m", "1s").Should(gomega.Succeed())
})`
$DIR/integration-tests/smoke/automation_test.go: `.GetTestLogger(t)`
$DIR/integration-tests/smoke/automation_test.go: `.GetConfig("Smoke", tc.Automation)`
$DIR/integration-tests/smoke/automation_test.go: `.ChainClient.Client.BlockNumber(context.Background())`
$DIR/integration-tests/smoke/automation_test.go: `.Background()`
$DIR/integration-tests/smoke/automation_test.go: `.DeployConsumers(
t,
a.ChainClient,
a.Registry,
a.Registrar,
a.LinkToken,
defaultAmountOfUpkeeps,
big.NewInt(automationDefaultLinkFunds),
automationDefaultUpkeepGasLimit,
false,
false,
)`
$DIR/integration-tests/smoke/automation_test.go: `.NewInt(automationDefaultLinkFunds)`
$DIR/integration-tests/smoke/automation_test.go: `.Cleanup(func() {
actions_seth.GetStalenessReportCleanupFn(t, a.Logger, a.ChainClient, sb, a.Registry, registryVersion)()
})`
$DIR/integration-tests/smoke/automation_test.go: `.GetStalenessReportCleanupFn(t, a.Logger, a.ChainClient, sb, a.Registry, registryVersion)`
$DIR/integration-tests/smoke/automation_test.go: `.NewGomegaWithT(t)`
$DIR/integration-tests/smoke/automation_test.go: `.Eventually(func(g gomega.Gomega) {
for i := 0; i < len(upkeepIDs); i++ {
counter, err := consumers[i].Counter(testcontext.Get(t))
initialCounters[i] = counter
l.Info().Int64("Upkeeps Performed", counter.Int64()).Int("Upkeep Index", i).Msg("Number of upkeeps performed")
g.Expect(err).ShouldNot(gomega.HaveOccurred(), "Failed to retrieve consumer counter for upkeep at index %d", i)
g.Expect(counter.Int64()).Should(gomega.BeNumerically(">", int64(0)),
"Expected consumer counter to be greater than 0, but got %d", counter.Int64())
}
}, "4m", "1s")`
$DIR/integration-tests/smoke/automation_test.go: `.Counter(testcontext.Get(t))`
$DIR/integration-tests/smoke/automation_test.go: `.Get(t)`
$DIR/integration-tests/smoke/automation_test.go: `.Info()`
$DIR/integration-tests/smoke/automation_test.go: `.Int64("Upkeeps Performed", counter.Int64())`
$DIR/integration-tests/smoke/automation_test.go: `.Int64()`
$DIR/integration-tests/smoke/automation_test.go: `.Int("Upkeep Index", i)`
$DIR/integration-tests/smoke/automation_test.go: `.Msg("Number of upkeeps performed")`
$DIR/integration-tests/smoke/automation_test.go: `.Expect(err)`
$DIR/integration-tests/smoke/automation_test.go: `.ShouldNot(gomega.HaveOccurred(), "Failed to retrieve consumer counter for upkeep at index %d", i)`
$DIR/integration-tests/smoke/automation_test.go: `.HaveOccurred()`
$DIR/integration-tests/smoke/automation_test.go: `.Expect(counter.Int64())`
$DIR/integration-tests/smoke/automation_test.go: `.Int64()`
$DIR/integration-tests/smoke/automation_test.go: `.Should(gomega.BeNumerically(">", int64(0)),
"Expected consumer counter to be greater than 0, but got %d", counter.Int64())`
$DIR/integration-tests/smoke/automation_test.go: `.BeNumerically(">", int64(0))`
$DIR/integration-tests/smoke/automation_test.go: `.Int64()`
$DIR/integration-tests/smoke/automation_test.go: `.Should(gomega.Succeed())`
$DIR/integration-tests/smoke/automation_test.go: `.Succeed()`
$DIR/integration-tests/smoke/automation_test.go: `.MustDeleteJob("1")`
$DIR/integration-tests/smoke/automation_test.go: `.Info()`
$DIR/integration-tests/smoke/automation_test.go: `.Msg("Successfully managed to take down the first half of the nodes")`
$DIR/integration-tests/smoke/automation_test.go: `.Eventually(func(g gomega.Gomega) {
for i := 0; i < len(upkeepIDs); i++ {
currentCounter, err := consumers[i].Counter(testcontext.Get(t))
l.Info().Int64("Upkeeps Performed", currentCounter.Int64()).Int("Upkeep Index", i).Msg("Number of upkeeps performed")
g.Expect(err).ShouldNot(gomega.HaveOccurred(), "Failed to retrieve consumer counter for upkeep at index %d", i)
g.Expect(currentCounter.Int64()).Should(gomega.BeNumerically(">", initialCounters[i].Int64()),
"Expected counter to have increased from initial value of %s, but got %s",
initialCounters[i], currentCounter)
}
}, "2m", "1s")`
$DIR/integration-tests/smoke/automation_test.go: `.Counter(testcontext.Get(t))`
$DIR/integration-tests/smoke/automation_test.go: `.Get(t)`
$DIR/integration-tests/smoke/automation_test.go: `.Info()`
$DIR/integration-tests/smoke/automation_test.go: `.Int64("Upkeeps Performed", currentCounter.Int64())`
$DIR/integration-tests/smoke/automation_test.go: `.Int64()`
$DIR/integration-tests/smoke/automation_test.go: `.Int("Upkeep Index", i)`
$DIR/integration-tests/smoke/automation_test.go: `.Msg("Number of upkeeps performed")`
$DIR/integration-tests/smoke/automation_test.go: `.Expect(err)`
$DIR/integration-tests/smoke/automation_test.go: `.ShouldNot(gomega.HaveOccurred(), "Failed to retrieve consumer counter for upkeep at index %d", i)`
$DIR/integration-tests/smoke/automation_test.go: `.HaveOccurred()`
$DIR/integration-tests/smoke/automation_test.go: `.Expect(currentCounter.Int64())`
$DIR/integration-tests/smoke/automation_test.go: `.Int64()`
$DIR/integration-tests/smoke/automation_test.go: `.Should(gomega.BeNumerically(">", initialCounters[i].Int64()),
"Expected counter to have increased from initial value of %s, but got %s",
initialCounters[i], currentCounter)`
$DIR/integration-tests/smoke/automation_test.go: `.BeNumerically(">", initialCounters[i].Int64())`
$DIR/integration-tests/smoke/automation_test.go: `.Int64()`
$DIR/integration-tests/smoke/automation_test.go: `.Should(gomega.Succeed())`
$DIR/integration-tests/smoke/automation_test.go: `.Succeed()`
$DIR/integration-tests/smoke/automation_test.go: `.MustDeleteJob("1")`
$DIR/integration-tests/smoke/automation_test.go: `.Info()`
$DIR/integration-tests/smoke/automation_test.go: `.Msg("Successfully managed to take down the second half of the nodes")`
$DIR/integration-tests/smoke/automation_test.go: `.Counter(testcontext.Get(t))`
$DIR/integration-tests/smoke/automation_test.go: `.Get(t)`
$DIR/integration-tests/smoke/automation_test.go: `.Info()`
$DIR/integration-tests/smoke/automation_test.go: `.Int("Upkeep Index", i)`
$DIR/integration-tests/smoke/automation_test.go: `.Int64("Performed", countersAfterNoMoreNodes[i].Int64())`
$DIR/integration-tests/smoke/automation_test.go: `.Int64()`
$DIR/integration-tests/smoke/automation_test.go: `.Msg("Upkeeps Performed")`
$DIR/integration-tests/smoke/automation_test.go: `.Consistently(func(g gomega.Gomega) {
for i := 0; i < len(upkeepIDs); i++ {
latestCounter, err := consumers[i].Counter(testcontext.Get(t))
g.Expect(err).ShouldNot(gomega.HaveOccurred(), "Failed to retrieve consumer counter for upkeep at index %d", i)
g.Expect(latestCounter.Int64()).Should(gomega.BeNumerically("<=", countersAfterNoMoreNodes[i].Int64()+1),
"Expected consumer counter to not have increased more than %d, but got %d",
countersAfterNoMoreNodes[i].Int64()+1, latestCounter.Int64())
}
}, "2m", "1s")`
$DIR/integration-tests/smoke/automation_test.go: `.Counter(testcontext.Get(t))`
$DIR/integration-tests/smoke/automation_test.go: `.Get(t)`
$DIR/integration-tests/smoke/automation_test.go: `.Expect(err)`
$DIR/integration-tests/smoke/automation_test.go: `.ShouldNot(gomega.HaveOccurred(), "Failed to retrieve consumer counter for upkeep at index %d", i)`
$DIR/integration-tests/smoke/automation_test.go: `.HaveOccurred()`
$DIR/integration-tests/smoke/automation_test.go: `.Expect(latestCounter.Int64())`
$DIR/integration-tests/smoke/automation_test.go: `.Int64()`
$DIR/integration-tests/smoke/automation_test.go: `.Should(gomega.BeNumerically("<=", countersAfterNoMoreNodes[i].Int64()+1),
"Expected consumer counter to not have increased more than %d, but got %d",
countersAfterNoMoreNodes[i].Int64()+1, latestCounter.Int64())`
$DIR/integration-tests/smoke/automation_test.go: `.BeNumerically("<=", countersAfterNoMoreNodes[i].Int64()+1)`
$DIR/integration-tests/smoke/automation_test.go: `.Int64()`
$DIR/integration-tests/smoke/automation_test.go: `.Int64()`
$DIR/integration-tests/smoke/automation_test.go: `.Int64()`
$DIR/integration-tests/smoke/automation_test.go: `.Should(gomega.Succeed())`
$DIR/integration-tests/smoke/automation_test.go: `.Succeed()`
$DIR/integration-tests/smoke/automation_test.go: `.Run(name, func(t *testing.T) {
t.Parallel()
config, err := tc.GetConfig("Smoke", tc.Automation)
require.NoError(t, err, "Failed to get config")
a := setupAutomationTestDocker(
t, registryVersion, automationDefaultRegistryConfig(config), false, false, &config,
)
sb, err := a.ChainClient.Client.BlockNumber(context.Background())
require.NoError(t, err, "Failed to get start block")
consumersPerformance, _ := actions_seth.DeployPerformanceConsumers(
t,
a.ChainClient,
a.Registry,
a.Registrar,
a.LinkToken,
defaultAmountOfUpkeeps,
big.NewInt(automationDefaultLinkFunds),
automationDefaultUpkeepGasLimit,
10000, // How many blocks this upkeep will be eligible from first upkeep block
5, // Interval of blocks that upkeeps are expected to be performed
100000, // How much gas should be burned on checkUpkeep() calls
4000000, // How much gas should be burned on performUpkeep() calls. Initially set higher than defaultUpkeepGasLimit
)
t.Cleanup(func() {
actions_seth.GetStalenessReportCleanupFn(t, a.Logger, a.ChainClient, sb, a.Registry, registryVersion)()
})
gom := gomega.NewGomegaWithT(t)
consumerPerformance := consumersPerformance[0]
// Initially performGas is set high, so performUpkeep reverts and no upkeep should be performed
gom.Consistently(func(g gomega.Gomega) {
// Consumer count should remain at 0
cnt, err := consumerPerformance.GetUpkeepCount(testcontext.Get(t))
g.Expect(err).ShouldNot(gomega.HaveOccurred(), "Calling consumer's Counter shouldn't fail")
g.Expect(cnt.Int64()).Should(gomega.Equal(int64(0)),
"Expected consumer counter to remain constant at %d, but got %d", 0, cnt.Int64(),
)
}, "2m", "1s").Should(gomega.Succeed()) // ~1m for setup, 1m assertion
// Set performGas on consumer to be low, so that performUpkeep starts becoming successful
err = consumerPerformance.SetPerformGasToBurn(testcontext.Get(t), big.NewInt(100000))
require.NoError(t, err, "Perform gas should be set successfully on consumer")
// Upkeep should now start performing
gom.Eventually(func(g gomega.Gomega) {
cnt, err := consumerPerformance.GetUpkeepCount(testcontext.Get(t))
g.Expect(err).ShouldNot(gomega.HaveOccurred(), "Calling consumer's Counter shouldn't fail")
g.Expect(cnt.Int64()).Should(gomega.BeNumerically(">", int64(0)),
"Expected consumer counter to be greater than 0, but got %d", cnt.Int64(),
)
}, "2m", "1s").Should(gomega.Succeed()) // ~1m to perform once, 1m buffer
})`
$DIR/integration-tests/smoke/automation_test.go: `.GetConfig("Smoke", tc.Automation)`
$DIR/integration-tests/smoke/automation_test.go: `.ChainClient.Client.BlockNumber(context.Background())`
$DIR/integration-tests/smoke/automation_test.go: `.Background()`
$DIR/integration-tests/smoke/automation_test.go: `.DeployPerformanceConsumers(
t,
a.ChainClient,
a.Registry,
a.Registrar,
a.LinkToken,
defaultAmountOfUpkeeps,
big.NewInt(automationDefaultLinkFunds),
automationDefaultUpkeepGasLimit,
10000, // How many blocks this upkeep will be eligible from first upkeep block
5, // Interval of blocks that upkeeps are expected to be performed
100000, // How much gas should be burned on checkUpkeep() calls
4000000, // How much gas should be burned on performUpkeep() calls. Initially set higher than defaultUpkeepGasLimit
)`
$DIR/integration-tests/smoke/automation_test.go: `.NewInt(automationDefaultLinkFunds)`
$DIR/integration-tests/smoke/automation_test.go: `.Cleanup(func() {
actions_seth.GetStalenessReportCleanupFn(t, a.Logger, a.ChainClient, sb, a.Registry, registryVersion)()
})`
$DIR/integration-tests/smoke/automation_test.go: `.GetStalenessReportCleanupFn(t, a.Logger, a.ChainClient, sb, a.Registry, registryVersion)`
$DIR/integration-tests/smoke/automation_test.go: `.NewGomegaWithT(t)`
$DIR/integration-tests/smoke/automation_test.go: `.Consistently(func(g gomega.Gomega) {
// Consumer count should remain at 0
cnt, err := consumerPerformance.GetUpkeepCount(testcontext.Get(t))
g.Expect(err).ShouldNot(gomega.HaveOccurred(), "Calling consumer's Counter shouldn't fail")
g.Expect(cnt.Int64()).Should(gomega.Equal(int64(0)),
"Expected consumer counter to remain constant at %d, but got %d", 0, cnt.Int64(),
)
}, "2m", "1s")`
$DIR/integration-tests/smoke/automation_test.go: `.GetUpkeepCount(testcontext.Get(t))`
$DIR/integration-tests/smoke/automation_test.go: `.Get(t)`
$DIR/integration-tests/smoke/automation_test.go: `.Expect(err)`
$DIR/integration-tests/smoke/automation_test.go: `.ShouldNot(gomega.HaveOccurred(), "Calling consumer's Counter shouldn't fail")`
$DIR/integration-tests/smoke/automation_test.go: `.HaveOccurred()`
$DIR/integration-tests/smoke/automation_test.go: `.Expect(cnt.Int64())`
$DIR/integration-tests/smoke/automation_test.go: `.Int64()`
$DIR/integration-tests/smoke/automation_test.go: `.Should(gomega.Equal(int64(0)),
"Expected consumer counter to remain constant at %d, but got %d", 0, cnt.Int64(),
)`
$DIR/integration-tests/smoke/automation_test.go: `.Equal(int64(0))`
$DIR/integration-tests/smoke/automation_test.go: `.Int64()`
$DIR/integration-tests/smoke/automation_test.go: `.Should(gomega.Succeed())`
$DIR/integration-tests/smoke/automation_test.go: `.Succeed()`
$DIR/integration-tests/smoke/automation_test.go: `.SetPerformGasToBurn(testcontext.Get(t), big.NewInt(100000))`
$DIR/integration-tests/smoke/automation_test.go: `.Get(t)`
$DIR/integration-tests/smoke/automation_test.go: `.NewInt(100000)`
$DIR/integration-tests/smoke/automation_test.go: `.Eventually(func(g gomega.Gomega) {
cnt, err := consumerPerformance.GetUpkeepCount(testcontext.Get(t))
g.Expect(err).ShouldNot(gomega.HaveOccurred(), "Calling consumer's Counter shouldn't fail")
g.Expect(cnt.Int64()).Should(gomega.BeNumerically(">", int64(0)),
"Expected consumer counter to be greater than 0, but got %d", cnt.Int64(),
)
}, "2m", "1s")`
$DIR/integration-tests/smoke/automation_test.go: `.GetUpkeepCount(testcontext.Get(t))`
$DIR/integration-tests/smoke/automation_test.go: `.Get(t)`
$DIR/integration-tests/smoke/automation_test.go: `.Expect(err)`
$DIR/integration-tests/smoke/automation_test.go: `.ShouldNot(gomega.HaveOccurred(), "Calling consumer's Counter shouldn't fail")`
$DIR/integration-tests/smoke/automation_test.go: `.HaveOccurred()`
$DIR/integration-tests/smoke/automation_test.go: `.Expect(cnt.Int64())`
$DIR/integration-tests/smoke/automation_test.go: `.Int64()`
$DIR/integration-tests/smoke/automation_test.go: `.Should(gomega.BeNumerically(">", int64(0)),
"Expected consumer counter to be greater than 0, but got %d", cnt.Int64(),
)`
$DIR/integration-tests/smoke/automation_test.go: `.BeNumerically(">", int64(0))`
$DIR/integration-tests/smoke/automation_test.go: `.Int64()`
$DIR/integration-tests/smoke/automation_test.go: `.Should(gomega.Succeed())`
$DIR/integration-tests/smoke/automation_test.go: `.Succeed()`
$DIR/integration-tests/smoke/automation_test.go: `.Run(name, func(t *testing.T) {
t.Parallel()
l := logging.GetTestLogger(t)
config, err := tc.GetConfig("Smoke", tc.Automation)
require.NoError(t, err, "Failed to get config")
a := setupAutomationTestDocker(
t, registryVersion, automationDefaultRegistryConfig(config), false, false, &config,
)
sb, err := a.ChainClient.Client.BlockNumber(context.Background())
require.NoError(t, err, "Failed to get start block")
consumersPerformance, upkeepIDs := actions_seth.DeployPerformanceConsumers(
t,
a.ChainClient,
a.Registry,
a.Registrar,
a.LinkToken,
1, // It was impossible to investigate, why with multiple outputs it fails ONLY in CI and only for 2.1 and 2.2 versions
big.NewInt(automationDefaultLinkFunds),
automationDefaultUpkeepGasLimit,
10000, // How many blocks this upkeep will be eligible from first upkeep block
5, // Interval of blocks that upkeeps are expected to be performed
100000, // How much gas should be burned on checkUpkeep() calls
4000000, // How much gas should be burned on performUpkeep() calls. Initially set higher than defaultUpkeepGasLimit
)
t.Cleanup(func() {
actions_seth.GetStalenessReportCleanupFn(t, a.Logger, a.ChainClient, sb, a.Registry, registryVersion)()
})
gom := gomega.NewGomegaWithT(t)
nodesWithoutBootstrap := a.ChainlinkNodes[1:]
// Initially performGas is set higher than defaultUpkeepGasLimit, so no upkeep should be performed
l.Info().Msg("Making sure for 2m no upkeeps are performed")
gom.Consistently(func(g gomega.Gomega) {
for i := 0; i < len(upkeepIDs); i++ {
cnt, err := consumersPerformance[i].GetUpkeepCount(testcontext.Get(t))
g.Expect(err).ShouldNot(gomega.HaveOccurred(), "Calling consumer's counter shouldn't fail")
g.Expect(cnt.Int64()).Should(
gomega.Equal(int64(0)),
"Expected consumer counter to remain constant at %d, but got %d", 0, cnt.Int64(),
)
}
}, "2m", "1s").Should(gomega.Succeed()) // ~1m for setup, 1m assertion
// Increase gas limit for the upkeep, higher than the performGasBurn
l.Info().Msg("Increasing gas limit for upkeeps")
for i := 0; i < len(upkeepIDs); i++ {
err = a.Registry.SetUpkeepGasLimit(upkeepIDs[i], uint32(4500000))
require.NoError(t, err, "Error setting upkeep gas limit")
}
// Upkeep should now start performing
l.Info().Msg("Waiting for 4m for all contracts to perform at least one upkeep after gas limit increase")
gom.Eventually(func(g gomega.Gomega) {
for i := 0; i < len(upkeepIDs); i++ {
cnt, err := consumersPerformance[i].GetUpkeepCount(testcontext.Get(t))
g.Expect(err).ShouldNot(gomega.HaveOccurred(), "Calling consumer's counter shouldn't fail")
l.Info().Int("Upkeep index", i).Int64("Upkeep counter", cnt.Int64()).Msg("Number of upkeeps performed")
g.Expect(cnt.Int64()).Should(gomega.BeNumerically(">", int64(0)),
"Expected consumer counter to be greater than 0, but got %d", cnt.Int64(),
)
}
}, "4m", "1s").Should(gomega.Succeed()) // ~1m to perform once, 1m buffer
// Now increase the checkGasBurn on consumer, upkeep should stop performing
l.Info().Msg("Increasing check gas to burn for upkeeps")
for i := 0; i < len(upkeepIDs); i++ {
err = consumersPerformance[i].SetCheckGasToBurn(testcontext.Get(t), big.NewInt(3000000))
require.NoError(t, err, "Check gas burn should be set successfully on consumer")
}
countPerID := make(map[*big.Int]*big.Int)
// Get existing performed count
l.Info().Msg("Getting existing performed count")
for i := 0; i < len(upkeepIDs); i++ {
existingCnt, err := consumersPerformance[i].GetUpkeepCount(testcontext.Get(t))
require.NoError(t, err, "Calling consumer's counter shouldn't fail")
l.Info().
Str("UpkeepID", upkeepIDs[i].String()).
Int64("Upkeep counter", existingCnt.Int64()).
Msg("Upkeep counter when check gas increased")
countPerID[upkeepIDs[i]] = existingCnt
}
// In most cases count should remain constant, but it might increase by upto 1 due to pending perform
l.Info().Msg("Waiting for 1m for all contracts to make sure they perform at maximum 1 upkeep")
gom.Consistently(func(g gomega.Gomega) {
for i := 0; i < len(upkeepIDs); i++ {
cnt, err := consumersPerformance[i].GetUpkeepCount(testcontext.Get(t))
g.Expect(err).ShouldNot(gomega.HaveOccurred(), "Calling consumer's counter shouldn't fail")
existingCnt := countPerID[upkeepIDs[i]]
g.Expect(cnt.Int64()).Should(
gomega.BeNumerically("<=", existingCnt.Int64()+1),
"Expected consumer counter to remain less than equal %d, but got %d", existingCnt.Int64()+1, cnt.Int64(),
)
}
}, "1m", "1s").Should(gomega.Succeed())
l.Info().Msg("Getting existing performed count")
for i := 0; i < len(upkeepIDs); i++ {
existingCnt, err := consumersPerformance[i].GetUpkeepCount(testcontext.Get(t))
require.NoError(t, err, "Calling consumer's counter shouldn't fail")
l.Info().
Str("UpkeepID", upkeepIDs[i].String()).
Int64("Upkeep counter", existingCnt.Int64()).Msg("Upkeep counter when consistently block finished")
countPerID[upkeepIDs[i]] = existingCnt
}
// Now increase checkGasLimit on registry
highCheckGasLimit := automationDefaultRegistryConfig(config)
highCheckGasLimit.CheckGasLimit = uint32(5000000)
highCheckGasLimit.RegistryVersion = registryVersion
ocrConfig, err := actions.BuildAutoOCR2ConfigVarsLocal(l, nodesWithoutBootstrap, highCheckGasLimit, a.Registrar.Address(), 30*time.Second, a.Registry.RegistryOwnerAddress(), a.Registry.ChainModuleAddress(), a.Registry.ReorgProtectionEnabled())
require.NoError(t, err, "Error building OCR config")
if a.RegistrySettings.RegistryVersion == ethereum.RegistryVersion_2_0 {
err = a.Registry.SetConfig(highCheckGasLimit, ocrConfig)
} else {
err = a.Registry.SetConfigTypeSafe(ocrConfig)
}
require.NoError(t, err, "Registry config should be set successfully!")
l.Info().Msg("Waiting for 3m for all contracts to make sure they perform at maximum 1 upkeep after check gas limit increase")
// Upkeep should start performing again, and it should get regularly performed
gom.Eventually(func(g gomega.Gomega) {
for i := 0; i < len(upkeepIDs); i++ {
cnt, err := consumersPerformance[i].GetUpkeepCount(testcontext.Get(t))
g.Expect(err).ShouldNot(gomega.HaveOccurred(), "Calling consumer's Counter shouldn't fail")
existingCnt := countPerID[upkeepIDs[i]]
g.Expect(cnt.Int64()).Should(gomega.BeNumerically(">", existingCnt.Int64()),
"Expected consumer counter to be greater than %d, but got %d", existingCnt.Int64(), cnt.Int64(),
)
}
}, "3m", "1s").Should(gomega.Succeed()) // ~1m to setup cluster, 1m to perform once, 1m buffer
})`
$DIR/integration-tests/smoke/automation_test.go: `.GetTestLogger(t)`
$DIR/integration-tests/smoke/automation_test.go: `.GetConfig("Smoke", tc.Automation)`
$DIR/integration-tests/smoke/automation_test.go: `.ChainClient.Client.BlockNumber(context.Background())`
$DIR/integration-tests/smoke/automation_test.go: `.Background()`
$DIR/integration-tests/smoke/automation_test.go: `.DeployPerformanceConsumers(
t,
a.ChainClient,
a.Registry,
a.Registrar,
a.LinkToken,
1, // It was impossible to investigate, why with multiple outputs it fails ONLY in CI and only for 2.1 and 2.2 versions
big.NewInt(automationDefaultLinkFunds),
automationDefaultUpkeepGasLimit,
10000, // How many blocks this upkeep will be eligible from first upkeep block
5, // Interval of blocks that upkeeps are expected to be performed
100000, // How much gas should be burned on checkUpkeep() calls
4000000, // How much gas should be burned on performUpkeep() calls. Initially set higher than defaultUpkeepGasLimit
)`
$DIR/integration-tests/smoke/automation_test.go: `.NewInt(automationDefaultLinkFunds)`
$DIR/integration-tests/smoke/automation_test.go: `.Cleanup(func() {
actions_seth.GetStalenessReportCleanupFn(t, a.Logger, a.ChainClient, sb, a.Registry, registryVersion)()
})`
$DIR/integration-tests/smoke/automation_test.go: `.GetStalenessReportCleanupFn(t, a.Logger, a.ChainClient, sb, a.Registry, registryVersion)`
$DIR/integration-tests/smoke/automation_test.go: `.NewGomegaWithT(t)`
$DIR/integration-tests/smoke/automation_test.go: `.Info()`
$DIR/integration-tests/smoke/automation_test.go: `.Msg("Making sure for 2m no upkeeps are performed")`
$DIR/integration-tests/smoke/automation_test.go: `.Consistently(func(g gomega.Gomega) {
for i := 0; i < len(upkeepIDs); i++ {
cnt, err := consumersPerformance[i].GetUpkeepCount(testcontext.Get(t))
g.Expect(err).ShouldNot(gomega.HaveOccurred(), "Calling consumer's counter shouldn't fail")
g.Expect(cnt.Int64()).Should(
gomega.Equal(int64(0)),
"Expected consumer counter to remain constant at %d, but got %d", 0, cnt.Int64(),
)
}
}, "2m", "1s")`
$DIR/integration-tests/smoke/automation_test.go: `.GetUpkeepCount(testcontext.Get(t))`
$DIR/integration-tests/smoke/automation_test.go: `.Get(t)`
$DIR/integration-tests/smoke/automation_test.go: `.Expect(err)`
$DIR/integration-tests/smoke/automation_test.go: `.ShouldNot(gomega.HaveOccurred(), "Calling consumer's counter shouldn't fail")`
$DIR/integration-tests/smoke/automation_test.go: `.HaveOccurred()`
$DIR/integration-tests/smoke/automation_test.go: `.Expect(cnt.Int64())`
$DIR/integration-tests/smoke/automation_test.go: `.Int64()`
$DIR/integration-tests/smoke/automation_test.go: `.Should(
gomega.Equal(int64(0)),
"Expected consumer counter to remain constant at %d, but got %d", 0, cnt.Int64(),
)`
$DIR/integration-tests/smoke/automation_test.go: `.Equal(int64(0))`
$DIR/integration-tests/smoke/automation_test.go: `.Int64()`
$DIR/integration-tests/smoke/automation_test.go: `.Should(gomega.Succeed())`
$DIR/integration-tests/smoke/automation_test.go: `.Succeed()`
$DIR/integration-tests/smoke/automation_test.go: `.Info()`
$DIR/integration-tests/smoke/automation_test.go: `.Msg("Increasing gas limit for upkeeps")`
$DIR/integration-tests/smoke/automation_test.go: `.Registry.SetUpkeepGasLimit(upkeepIDs[i], uint32(4500000))`
$DIR/integration-tests/smoke/automation_test.go: `.Info()`
$DIR/integration-tests/smoke/automation_test.go: `.Msg("Waiting for 4m for all contracts to perform at least one upkeep after gas limit increase")`
$DIR/integration-tests/smoke/automation_test.go: `.Eventually(func(g gomega.Gomega) {
for i := 0; i < len(upkeepIDs); i++ {
cnt, err := consumersPerformance[i].GetUpkeepCount(testcontext.Get(t))
g.Expect(err).ShouldNot(gomega.HaveOccurred(), "Calling consumer's counter shouldn't fail")
l.Info().Int("Upkeep index", i).Int64("Upkeep counter", cnt.Int64()).Msg("Number of upkeeps performed")
g.Expect(cnt.Int64()).Should(gomega.BeNumerically(">", int64(0)),
"Expected consumer counter to be greater than 0, but got %d", cnt.Int64(),
)
}
}, "4m", "1s")`
$DIR/integration-tests/smoke/automation_test.go: `.GetUpkeepCount(testcontext.Get(t))`
$DIR/integration-tests/smoke/automation_test.go: `.Get(t)`
$DIR/integration-tests/smoke/automation_test.go: `.Expect(err)`
$DIR/integration-tests/smoke/automation_test.go: `.ShouldNot(gomega.HaveOccurred(), "Calling consumer's counter shouldn't fail")`
$DIR/integration-tests/smoke/automation_test.go: `.HaveOccurred()`
$DIR/integration-tests/smoke/automation_test.go: `.Info()`
$DIR/integration-tests/smoke/automation_test.go: `.Int("Upkeep index", i)`
$DIR/integration-tests/smoke/automation_test.go: `.Int64("Upkeep counter", cnt.Int64())`
$DIR/integration-tests/smoke/automation_test.go: `.Int64()`
$DIR/integration-tests/smoke/automation_test.go: `.Msg("Number of upkeeps performed")`
$DIR/integration-tests/smoke/automation_test.go: `.Expect(cnt.Int64())`
$DIR/integration-tests/smoke/automation_test.go: `.Int64()`
$DIR/integration-tests/smoke/automation_test.go: `.Should(gomega.BeNumerically(">", int64(0)),
"Expected consumer counter to be greater than 0, but got %d", cnt.Int64(),
)`
$DIR/integration-tests/smoke/automation_test.go: `.BeNumerically(">", int64(0))`
$DIR/integration-tests/smoke/automation_test.go: `.Int64()`
$DIR/integration-tests/smoke/automation_test.go: `.Should(gomega.Succeed())`
$DIR/integration-tests/smoke/automation_test.go: `.Succeed()`
$DIR/integration-tests/smoke/automation_test.go: `.Info()`
$DIR/integration-tests/smoke/automation_test.go: `.Msg("Increasing check gas to burn for upkeeps")`
$DIR/integration-tests/smoke/automation_test.go: `.SetCheckGasToBurn(testcontext.Get(t), big.NewInt(3000000))`
$DIR/integration-tests/smoke/automation_test.go: `.Get(t)`
$DIR/integration-tests/smoke/automation_test.go: `.NewInt(3000000)`
$DIR/integration-tests/smoke/automation_test.go: `.Info()`
$DIR/integration-tests/smoke/automation_test.go: `.Msg("Getting existing performed count")`
$DIR/integration-tests/smoke/automation_test.go: `.GetUpkeepCount(testcontext.Get(t))`
$DIR/integration-tests/smoke/automation_test.go: `.Get(t)`
$DIR/integration-tests/smoke/automation_test.go: `.Info()`
$DIR/integration-tests/smoke/automation_test.go: `.
Str("UpkeepID", upkeepIDs[i].String())`
$DIR/integration-tests/smoke/automation_test.go: `.String()`
$DIR/integration-tests/smoke/automation_test.go: `.
Int64("Upkeep counter", existingCnt.Int64())`
$DIR/integration-tests/smoke/automation_test.go: `.Int64()`
$DIR/integration-tests/smoke/automation_test.go: `.
Msg("Upkeep counter when check gas increased")`
$DIR/integration-tests/smoke/automation_test.go: `.Info()`
$DIR/integration-tests/smoke/automation_test.go: `.Msg("Waiting for 1m for all contracts to make sure they perform at maximum 1 upkeep")`
$DIR/integration-tests/smoke/automation_test.go: `.Consistently(func(g gomega.Gomega) {
for i := 0; i < len(upkeepIDs); i++ {
cnt, err := consumersPerformance[i].GetUpkeepCount(testcontext.Get(t))
g.Expect(err).ShouldNot(gomega.HaveOccurred(), "Calling consumer's counter shouldn't fail")
existingCnt := countPerID[upkeepIDs[i]]
g.Expect(cnt.Int64()).Should(
gomega.BeNumerically("<=", existingCnt.Int64()+1),
"Expected consumer counter to remain less than equal %d, but got %d", existingCnt.Int64()+1, cnt.Int64(),
)
}
}, "1m", "1s")`
$DIR/integration-tests/smoke/automation_test.go: `.GetUpkeepCount(testcontext.Get(t))`
$DIR/integration-tests/smoke/automation_test.go: `.Get(t)`
$DIR/integration-tests/smoke/automation_test.go: `.Expect(err)`
$DIR/integration-tests/smoke/automation_test.go: `.ShouldNot(gomega.HaveOccurred(), "Calling consumer's counter shouldn't fail")`
$DIR/integration-tests/smoke/automation_test.go: `.HaveOccurred()`
$DIR/integration-tests/smoke/automation_test.go: `.Expect(cnt.Int64())`
$DIR/integration-tests/smoke/automation_test.go: `.Int64()`
$DIR/integration-tests/smoke/automation_test.go: `.Should(
gomega.BeNumerically("<=", existingCnt.Int64()+1),
"Expected consumer counter to remain less than equal %d, but got %d", existingCnt.Int64()+1, cnt.Int64(),
)`
$DIR/integration-tests/smoke/automation_test.go: `.BeNumerically("<=", existingCnt.Int64()+1)`
$DIR/integration-tests/smoke/automation_test.go: `.Int64()`
$DIR/integration-tests/smoke/automation_test.go: `.Int64()`
$DIR/integration-tests/smoke/automation_test.go: `.Int64()`
$DIR/integration-tests/smoke/automation_test.go: `.Should(gomega.Succeed())`
$DIR/integration-tests/smoke/automation_test.go: `.Succeed()`
$DIR/integration-tests/smoke/automation_test.go: `.Info()`
$DIR/integration-tests/smoke/automation_test.go: `.Msg("Getting existing performed count")`
$DIR/integration-tests/smoke/automation_test.go: `.GetUpkeepCount(testcontext.Get(t))`
$DIR/integration-tests/smoke/automation_test.go: `.Get(t)`
$DIR/integration-tests/smoke/automation_test.go: `.Info()`
$DIR/integration-tests/smoke/automation_test.go: `.
Str("UpkeepID", upkeepIDs[i].String())`
$DIR/integration-tests/smoke/automation_test.go: `.String()`
$DIR/integration-tests/smoke/automation_test.go: `.
Int64("Upkeep counter", existingCnt.Int64())`
$DIR/integration-tests/smoke/automation_test.go: `.Int64()`
$DIR/integration-tests/smoke/automation_test.go: `.Msg("Upkeep counter when consistently block finished")`
$DIR/integration-tests/smoke/automation_test.go: `.BuildAutoOCR2ConfigVarsLocal(l, nodesWithoutBootstrap, highCheckGasLimit, a.Registrar.Address(), 30*time.Second, a.Registry.RegistryOwnerAddress(), a.Registry.ChainModuleAddress(), a.Registry.ReorgProtectionEnabled())`
$DIR/integration-tests/smoke/automation_test.go: `.Registrar.Address()`
$DIR/integration-tests/smoke/automation_test.go: `.Registry.RegistryOwnerAddress()`
$DIR/integration-tests/smoke/automation_test.go: `.Registry.ChainModuleAddress()`
$DIR/integration-tests/smoke/automation_test.go: `.Registry.ReorgProtectionEnabled()`
$DIR/integration-tests/smoke/automation_test.go: `.Registry.SetConfig(highCheckGasLimit, ocrConfig)`
$DIR/integration-tests/smoke/automation_test.go: `.Registry.SetConfigTypeSafe(ocrConfig)`
$DIR/integration-tests/smoke/automation_test.go: `.Info()`
$DIR/integration-tests/smoke/automation_test.go: `.Msg("Waiting for 3m for all contracts to make sure they perform at maximum 1 upkeep after check gas limit increase")`
$DIR/integration-tests/smoke/automation_test.go: `.Eventually(func(g gomega.Gomega) {
for i := 0; i < len(upkeepIDs); i++ {
cnt, err := consumersPerformance[i].GetUpkeepCount(testcontext.Get(t))
g.Expect(err).ShouldNot(gomega.HaveOccurred(), "Calling consumer's Counter shouldn't fail")
existingCnt := countPerID[upkeepIDs[i]]
g.Expect(cnt.Int64()).Should(gomega.BeNumerically(">", existingCnt.Int64()),
"Expected consumer counter to be greater than %d, but got %d", existingCnt.Int64(), cnt.Int64(),
)
}
}, "3m", "1s")`
$DIR/integration-tests/smoke/automation_test.go: `.GetUpkeepCount(testcontext.Get(t))`
$DIR/integration-tests/smoke/automation_test.go: `.Get(t)`
$DIR/integration-tests/smoke/automation_test.go: `.Expect(err)`
$DIR/integration-tests/smoke/automation_test.go: `.ShouldNot(gomega.HaveOccurred(), "Calling consumer's Counter shouldn't fail")`
$DIR/integration-tests/smoke/automation_test.go: `.HaveOccurred()`
$DIR/integration-tests/smoke/automation_test.go: `.Expect(cnt.Int64())`
$DIR/integration-tests/smoke/automation_test.go: `.Int64()`
$DIR/integration-tests/smoke/automation_test.go: `.Should(gomega.BeNumerically(">", existingCnt.Int64()),
"Expected consumer counter to be greater than %d, but got %d", existingCnt.Int64(), cnt.Int64(),
)`
$DIR/integration-tests/smoke/automation_test.go: `.BeNumerically(">", existingCnt.Int64())`
$DIR/integration-tests/smoke/automation_test.go: `.Int64()`
$DIR/integration-tests/smoke/automation_test.go: `.Int64()`
$DIR/integration-tests/smoke/automation_test.go: `.Int64()`
$DIR/integration-tests/smoke/automation_test.go: `.Should(gomega.Succeed())`
$DIR/integration-tests/smoke/automation_test.go: `.Succeed()`
$DIR/integration-tests/smoke/automation_test.go: `.Run(name, func(t *testing.T) {
t.Parallel()
l := logging.GetTestLogger(t)
config, err := tc.GetConfig("Smoke", tc.Automation)
require.NoError(t, err, "Failed to get config")
a := setupAutomationTestDocker(
t, registryVersion, automationDefaultRegistryConfig(config), false, false, &config,
)
sb, err := a.ChainClient.Client.BlockNumber(context.Background())
require.NoError(t, err, "Failed to get start block")
performDataChecker, upkeepIDs := actions_seth.DeployPerformDataCheckerConsumers(
t,
a.ChainClient,
a.Registry,
a.Registrar,
a.LinkToken,
defaultAmountOfUpkeeps,
big.NewInt(automationDefaultLinkFunds),
automationDefaultUpkeepGasLimit,
[]byte(automationExpectedData),
)
t.Cleanup(func() {
actions_seth.GetStalenessReportCleanupFn(t, a.Logger, a.ChainClient, sb, a.Registry, registryVersion)()
})
gom := gomega.NewGomegaWithT(t)
gom.Consistently(func(g gomega.Gomega) {
// expect the counter to remain 0 because perform data does not match
for i := 0; i < len(upkeepIDs); i++ {
counter, err := performDataChecker[i].Counter(testcontext.Get(t))
g.Expect(err).ShouldNot(gomega.HaveOccurred(), "Failed to retrieve perform data checker"+
" for upkeep at index "+strconv.Itoa(i))
g.Expect(counter.Int64()).Should(gomega.Equal(int64(0)),
"Expected perform data checker counter to be 0, but got %d", counter.Int64())
l.Info().Int64("Upkeep perform data checker", counter.Int64()).Msg("Number of upkeeps performed")
}
}, "2m", "1s").Should(gomega.Succeed()) // ~1m for setup, 1m assertion
for i := 0; i < len(upkeepIDs); i++ {
err := a.Registry.UpdateCheckData(upkeepIDs[i], []byte(automationExpectedData))
require.NoError(t, err, "Could not update check data for upkeep at index %d", i)
}
// retrieve new check data for all upkeeps
for i := 0; i < len(upkeepIDs); i++ {
upkeep, err := a.Registry.GetUpkeepInfo(testcontext.Get(t), upkeepIDs[i])
require.NoError(t, err, "Failed to get upkeep info at index %d", i)
require.Equal(t, []byte(automationExpectedData), upkeep.CheckData, "Upkeep data not as expected")
}
gom.Eventually(func(g gomega.Gomega) {
// Check if the upkeeps are performing multiple times by analysing their counters and checking they are greater than 5
for i := 0; i < len(upkeepIDs); i++ {
counter, err := performDataChecker[i].Counter(testcontext.Get(t))
g.Expect(err).ShouldNot(gomega.HaveOccurred(), "Failed to retrieve perform data checker counter"+
" for upkeep at index "+strconv.Itoa(i))
g.Expect(counter.Int64()).Should(gomega.BeNumerically(">", int64(0)),
"Expected perform data checker counter to be greater than 0, but got %d", counter.Int64())
l.Info().Int64("Upkeep perform data checker", counter.Int64()).Msg("Number of upkeeps performed")
}
}, "2m", "1s").Should(gomega.Succeed()) // ~1m to perform once, 1m buffer
})`
$DIR/integration-tests/smoke/automation_test.go: `.GetTestLogger(t)`
$DIR/integration-tests/smoke/automation_test.go: `.GetConfig("Smoke", tc.Automation)`
$DIR/integration-tests/smoke/automation_test.go: `.ChainClient.Client.BlockNumber(context.Background())`
$DIR/integration-tests/smoke/automation_test.go: `.Background()`
$DIR/integration-tests/smoke/automation_test.go: `.DeployPerformDataCheckerConsumers(
t,
a.ChainClient,
a.Registry,
a.Registrar,
a.LinkToken,
defaultAmountOfUpkeeps,
big.NewInt(automationDefaultLinkFunds),
automationDefaultUpkeepGasLimit,
[]byte(automationExpectedData),
)`
$DIR/integration-tests/smoke/automation_test.go: `.NewInt(automationDefaultLinkFunds)`
$DIR/integration-tests/smoke/automation_test.go: `.Cleanup(func() {
actions_seth.GetStalenessReportCleanupFn(t, a.Logger, a.ChainClient, sb, a.Registry, registryVersion)()
})`
$DIR/integration-tests/smoke/automation_test.go: `.GetStalenessReportCleanupFn(t, a.Logger, a.ChainClient, sb, a.Registry, registryVersion)`
$DIR/integration-tests/smoke/automation_test.go: `.NewGomegaWithT(t)`
$DIR/integration-tests/smoke/automation_test.go: `.Consistently(func(g gomega.Gomega) {
// expect the counter to remain 0 because perform data does not match
for i := 0; i < len(upkeepIDs); i++ {
counter, err := performDataChecker[i].Counter(testcontext.Get(t))
g.Expect(err).ShouldNot(gomega.HaveOccurred(), "Failed to retrieve perform data checker"+
" for upkeep at index "+strconv.Itoa(i))
g.Expect(counter.Int64()).Should(gomega.Equal(int64(0)),
"Expected perform data checker counter to be 0, but got %d", counter.Int64())
l.Info().Int64("Upkeep perform data checker", counter.Int64()).Msg("Number of upkeeps performed")
}
}, "2m", "1s")`
$DIR/integration-tests/smoke/automation_test.go: `.Counter(testcontext.Get(t))`
$DIR/integration-tests/smoke/automation_test.go: `.Get(t)`
$DIR/integration-tests/smoke/automation_test.go: `.Expect(err)`
$DIR/integration-tests/smoke/automation_test.go: `.ShouldNot(gomega.HaveOccurred(), "Failed to retrieve perform data checker"+
" for upkeep at index "+strconv.Itoa(i))`
$DIR/integration-tests/smoke/automation_test.go: `.HaveOccurred()`
$DIR/integration-tests/smoke/automation_test.go: `.Itoa(i)`
$DIR/integration-tests/smoke/automation_test.go: `.Expect(counter.Int64())`
$DIR/integration-tests/smoke/automation_test.go: `.Int64()`
$DIR/integration-tests/smoke/automation_test.go: `.Should(gomega.Equal(int64(0)),
"Expected perform data checker counter to be 0, but got %d", counter.Int64())`
$DIR/integration-tests/smoke/automation_test.go: `.Equal(int64(0))`
$DIR/integration-tests/smoke/automation_test.go: `.Int64()`
$DIR/integration-tests/smoke/automation_test.go: `.Info()`
$DIR/integration-tests/smoke/automation_test.go: `.Int64("Upkeep perform data checker", counter.Int64())`
$DIR/integration-tests/smoke/automation_test.go: `.Int64()`
$DIR/integration-tests/smoke/automation_test.go: `.Msg("Number of upkeeps performed")`
$DIR/integration-tests/smoke/automation_test.go: `.Should(gomega.Succeed())`
$DIR/integration-tests/smoke/automation_test.go: `.Succeed()`
$DIR/integration-tests/smoke/automation_test.go: `.Registry.UpdateCheckData(upkeepIDs[i], []byte(automationExpectedData))`
$DIR/integration-tests/smoke/automation_test.go: `.Registry.GetUpkeepInfo(testcontext.Get(t), upkeepIDs[i])`
$DIR/integration-tests/smoke/automation_test.go: `.Get(t)`
$DIR/integration-tests/smoke/automation_test.go: `.Eventually(func(g gomega.Gomega) {
// Check if the upkeeps are performing multiple times by analysing their counters and checking they are greater than 5
for i := 0; i < len(upkeepIDs); i++ {
counter, err := performDataChecker[i].Counter(testcontext.Get(t))
g.Expect(err).ShouldNot(gomega.HaveOccurred(), "Failed to retrieve perform data checker counter"+
" for upkeep at index "+strconv.Itoa(i))
g.Expect(counter.Int64()).Should(gomega.BeNumerically(">", int64(0)),
"Expected perform data checker counter to be greater than 0, but got %d", counter.Int64())
l.Info().Int64("Upkeep perform data checker", counter.Int64()).Msg("Number of upkeeps performed")
}
}, "2m", "1s")`
$DIR/integration-tests/smoke/automation_test.go: `.Counter(testcontext.Get(t))`
$DIR/integration-tests/smoke/automation_test.go: `.Get(t)`
$DIR/integration-tests/smoke/automation_test.go: `.Expect(err)`
$DIR/integration-tests/smoke/automation_test.go: `.ShouldNot(gomega.HaveOccurred(), "Failed to retrieve perform data checker counter"+
" for upkeep at index "+strconv.Itoa(i))`
$DIR/integration-tests/smoke/automation_test.go: `.HaveOccurred()`
$DIR/integration-tests/smoke/automation_test.go: `.Itoa(i)`
$DIR/integration-tests/smoke/automation_test.go: `.Expect(counter.Int64())`
$DIR/integration-tests/smoke/automation_test.go: `.Int64()`
$DIR/integration-tests/smoke/automation_test.go: `.Should(gomega.BeNumerically(">", int64(0)),
"Expected perform data checker counter to be greater than 0, but got %d", counter.Int64())`
$DIR/integration-tests/smoke/automation_test.go: `.BeNumerically(">", int64(0))`
$DIR/integration-tests/smoke/automation_test.go: `.Int64()`
$DIR/integration-tests/smoke/automation_test.go: `.Info()`
$DIR/integration-tests/smoke/automation_test.go: `.Int64("Upkeep perform data checker", counter.Int64())`
$DIR/integration-tests/smoke/automation_test.go: `.Int64()`
$DIR/integration-tests/smoke/automation_test.go: `.Msg("Number of upkeeps performed")`
$DIR/integration-tests/smoke/automation_test.go: `.Should(gomega.Succeed())`
$DIR/integration-tests/smoke/automation_test.go: `.Succeed()`
$DIR/integration-tests/smoke/automation_test.go: `.Run(name, func(t *testing.T) {
t.Parallel()
l := logging.GetTestLogger(t)
config, err := tc.GetConfig("Smoke", tc.Automation)
if err != nil {
t.Fatal(err)
}
a := setupAutomationTestDocker(
t, registryVersion, automationDefaultRegistryConfig(config), false, false, &config,
)
sb, err := a.ChainClient.Client.BlockNumber(context.Background())
require.NoError(t, err, "Failed to get start block")
consumers, upkeepIDs := actions_seth.DeployConsumers(
t,
a.ChainClient,
a.Registry,
a.Registrar,
a.LinkToken,
defaultAmountOfUpkeeps,
big.NewInt(automationDefaultLinkFunds),
automationDefaultUpkeepGasLimit,
false,
false,
)
t.Cleanup(func() {
actions_seth.GetStalenessReportCleanupFn(t, a.Logger, a.ChainClient, sb, a.Registry, registryVersion)()
})
gom := gomega.NewGomegaWithT(t)
l.Info().Msg("waiting for all upkeeps to be performed at least once")
gom.Eventually(func(g gomega.Gomega) {
for i := 0; i < len(upkeepIDs); i++ {
counter, err := consumers[i].Counter(testcontext.Get(t))
g.Expect(err).ShouldNot(gomega.HaveOccurred(), "Failed to retrieve consumer counter for upkeep at index %d", i)
g.Expect(counter.Int64()).Should(gomega.BeNumerically(">", int64(0)),
"Expected consumer counter to be greater than 0, but got %d")
}
}, "4m", "5s").Should(gomega.Succeed()) // ~1m for cluster setup, ~1m for performing each upkeep once, ~2m buffer
// set the maxGasPrice to 1 wei
uoc, _ := cbor.Marshal(gasprice.UpkeepOffchainConfig{MaxGasPrice: big.NewInt(1)})
l.Info().Msgf("setting all upkeeps' offchain config to %s, which means maxGasPrice is 1 wei", hexutil.Encode(uoc))
for _, uid := range upkeepIDs {
err = a.Registry.SetUpkeepOffchainConfig(uid, uoc)
require.NoError(t, err, "Error setting upkeep offchain config")
}
// Store how many times each upkeep performed once their offchain config is set with maxGasPrice = 1 wei
var countersAfterSettingLowMaxGasPrice = make([]*big.Int, len(upkeepIDs))
for i := 0; i < len(upkeepIDs); i++ {
countersAfterSettingLowMaxGasPrice[i], err = consumers[i].Counter(testcontext.Get(t))
require.NoError(t, err, "Failed to retrieve consumer counter for upkeep at index %d", i)
l.Info().Int64("Upkeep Performed times", countersAfterSettingLowMaxGasPrice[i].Int64()).Int("Upkeep index", i).Msg("Number of upkeeps performed after setting low max gas price")
}
var latestCounter *big.Int
// the upkeepsPerformed of all the upkeeps should stay constant because they are no longer getting serviced
gom.Consistently(func(g gomega.Gomega) {
for i := 0; i < len(upkeepIDs); i++ {
latestCounter, err = consumers[i].Counter(testcontext.Get(t))
g.Expect(err).ShouldNot(gomega.HaveOccurred(), "Failed to retrieve consumer counter for upkeep at index %d", i)
g.Expect(latestCounter.Int64()).Should(gomega.BeNumerically("<=", countersAfterSettingLowMaxGasPrice[i].Int64()+1),
"Expected consumer counter to be less than %d, but got %d",
countersAfterSettingLowMaxGasPrice[i].Int64()+1, latestCounter.Int64())
}
}, "2m", "5s").Should(gomega.Succeed())
l.Info().Msg("no upkeeps is performed because their max gas price is only 1 wei")
// setting offchain config with a high max gas price for the first upkeep, it should perform again while
// other upkeeps should not perform
// set the maxGasPrice to 500 gwei for the first upkeep
uoc, _ = cbor.Marshal(gasprice.UpkeepOffchainConfig{MaxGasPrice: big.NewInt(500_000_000_000)})
l.Info().Msgf("setting the first upkeeps' offchain config to %s, which means maxGasPrice is 500 gwei", hexutil.Encode(uoc))
err = a.Registry.SetUpkeepOffchainConfig(upkeepIDs[0], uoc)
require.NoError(t, err, "Error setting upkeep offchain config")
upkeepsPerformedBefore := make(map[int]int64)
upkeepsPerformedAfter := make(map[int]int64)
for i := 0; i < len(upkeepIDs); i++ {
latestCounter, err = consumers[i].Counter(testcontext.Get(t))
require.NoError(t, err, "Failed to retrieve consumer counter for upkeep at index %d", i)
upkeepsPerformedBefore[i] = latestCounter.Int64()
upkeepsPerformedAfter[i] = latestCounter.Int64()
l.Info().Int64("No of Upkeep Performed", latestCounter.Int64()).Str("Consumer address", consumers[i].Address()).Msg("Number of upkeeps performed just after setting offchain config")
}
// the upkeepsPerformed of all other upkeeps should stay constant because their max gas price remains very low.
// consumer at index N, might not be correlated with upkeep at index N, so instead of focusing on one of them
// we iterate over all of them and make sure that at most only one is performing upkeeps
gom.Consistently(func(g gomega.Gomega) {
activeConsumers := 0
for i := 0; i < len(upkeepIDs); i++ {
latestCounter, err = consumers[i].Counter(testcontext.Get(t))
g.Expect(err).ShouldNot(gomega.HaveOccurred(), "Failed to retrieve consumer counter for upkeep at index %d", i)
if latestCounter.Int64() != upkeepsPerformedAfter[i] {
activeConsumers++
}
upkeepsPerformedAfter[i] = latestCounter.Int64()
}
// 0 is also okay, because it means that no upkeep was performed yet
g.Expect(activeConsumers).Should(gomega.BeNumerically("<=", 1), "Only one consumer should have been performing upkeeps, but %d did", activeConsumers)
}, "2m", "5s").Should(gomega.Succeed())
performingConsumerIndex := -1
onlyOneConsumerPerformed := false
for i := 0; i < len(upkeepIDs); i++ {
if upkeepsPerformedAfter[i] > upkeepsPerformedBefore[i] {
onlyOneConsumerPerformed = true
performingConsumerIndex = i
break
}
}
for i := 0; i < len(upkeepIDs); i++ {
l.Info().Int64("No of Upkeep Performed", latestCounter.Int64()).Str("Consumer address", consumers[i].Address()).Msg("Number of upkeeps performed after waiting for the results of offchain config change")
}
require.True(t, onlyOneConsumerPerformed, "Only one consumer should have been performing upkeeps")
l.Info().Msg("all the rest upkeeps did not perform again because their max gas price remains 1 wei")
l.Info().Msg("making sure the consumer keeps performing upkeeps because its max gas price is 500 gwei")
// the first upkeep should start performing again
gom.Eventually(func(g gomega.Gomega) {
latestCounter, err = consumers[performingConsumerIndex].Counter(testcontext.Get(t))
g.Expect(err).ShouldNot(gomega.HaveOccurred(), fmt.Sprintf("Failed to retrieve consumer counter for upkeep at index %d", performingConsumerIndex))
g.Expect(latestCounter.Int64()).Should(gomega.BeNumerically(">", countersAfterSettingLowMaxGasPrice[0].Int64()),
"Expected consumer counter to be greater than %d, but got %d",
countersAfterSettingLowMaxGasPrice[0].Int64(), latestCounter.Int64())
}, "2m", "5s").Should(gomega.Succeed()) // ~1m for cluster setup, ~1m for performing each upkeep once
l.Info().Int64("Upkeep Performed times", latestCounter.Int64()).Msg("the first upkeep performed again")
})`
$DIR/integration-tests/smoke/automation_test.go: `.GetTestLogger(t)`
$DIR/integration-tests/smoke/automation_test.go: `.GetConfig("Smoke", tc.Automation)`
$DIR/integration-tests/smoke/automation_test.go: `.ChainClient.Client.BlockNumber(context.Background())`
$DIR/integration-tests/smoke/automation_test.go: `.Background()`
$DIR/integration-tests/smoke/automation_test.go: `.DeployConsumers(
t,
a.ChainClient,
a.Registry,
a.Registrar,
a.LinkToken,
defaultAmountOfUpkeeps,
big.NewInt(automationDefaultLinkFunds),
automationDefaultUpkeepGasLimit,
false,
false,
)`
$DIR/integration-tests/smoke/automation_test.go: `.NewInt(automationDefaultLinkFunds)`
$DIR/integration-tests/smoke/automation_test.go: `.Cleanup(func() {
actions_seth.GetStalenessReportCleanupFn(t, a.Logger, a.ChainClient, sb, a.Registry, registryVersion)()
})`
$DIR/integration-tests/smoke/automation_test.go: `.GetStalenessReportCleanupFn(t, a.Logger, a.ChainClient, sb, a.Registry, registryVersion)`
$DIR/integration-tests/smoke/automation_test.go: `.NewGomegaWithT(t)`
$DIR/integration-tests/smoke/automation_test.go: `.Info()`
$DIR/integration-tests/smoke/automation_test.go: `.Msg("waiting for all upkeeps to be performed at least once")`
$DIR/integration-tests/smoke/automation_test.go: `.Eventually(func(g gomega.Gomega) {
for i := 0; i < len(upkeepIDs); i++ {
counter, err := consumers[i].Counter(testcontext.Get(t))
g.Expect(err).ShouldNot(gomega.HaveOccurred(), "Failed to retrieve consumer counter for upkeep at index %d", i)
g.Expect(counter.Int64()).Should(gomega.BeNumerically(">", int64(0)),
"Expected consumer counter to be greater than 0, but got %d")
}
}, "4m", "5s")`
$DIR/integration-tests/smoke/automation_test.go: `.Counter(testcontext.Get(t))`
$DIR/integration-tests/smoke/automation_test.go: `.Get(t)`
$DIR/integration-tests/smoke/automation_test.go: `.Expect(err)`
$DIR/integration-tests/smoke/automation_test.go: `.ShouldNot(gomega.HaveOccurred(), "Failed to retrieve consumer counter for upkeep at index %d", i)`
$DIR/integration-tests/smoke/automation_test.go: `.HaveOccurred()`
$DIR/integration-tests/smoke/automation_test.go: `.Expect(counter.Int64())`
$DIR/integration-tests/smoke/automation_test.go: `.Int64()`
$DIR/integration-tests/smoke/automation_test.go: `.Should(gomega.BeNumerically(">", int64(0)),
"Expected consumer counter to be greater than 0, but got %d")`
$DIR/integration-tests/smoke/automation_test.go: `.BeNumerically(">", int64(0))`
$DIR/integration-tests/smoke/automation_test.go: `.Should(gomega.Succeed())`
$DIR/integration-tests/smoke/automation_test.go: `.Succeed()`
$DIR/integration-tests/smoke/automation_test.go: `.Marshal(gasprice.UpkeepOffchainConfig{MaxGasPrice: big.NewInt(1)})`
$DIR/integration-tests/smoke/automation_test.go: `.NewInt(1)`
$DIR/integration-tests/smoke/automation_test.go: `.Info()`
$DIR/integration-tests/smoke/automation_test.go: `.Msgf("setting all upkeeps' offchain config to %s, which means maxGasPrice is 1 wei", hexutil.Encode(uoc))`
$DIR/integration-tests/smoke/automation_test.go: `.Encode(uoc)`
$DIR/integration-tests/smoke/automation_test.go: `.Registry.SetUpkeepOffchainConfig(uid, uoc)`
$DIR/integration-tests/smoke/automation_test.go: `.Counter(testcontext.Get(t))`
$DIR/integration-tests/smoke/automation_test.go: `.Get(t)`
$DIR/integration-tests/smoke/automation_test.go: `.Info()`
$DIR/integration-tests/smoke/automation_test.go: `.Int64("Upkeep Performed times", countersAfterSettingLowMaxGasPrice[i].Int64())`
$DIR/integration-tests/smoke/automation_test.go: `.Int64()`
$DIR/integration-tests/smoke/automation_test.go: `.Int("Upkeep index", i)`
$DIR/integration-tests/smoke/automation_test.go: `.Msg("Number of upkeeps performed after setting low max gas price")`
$DIR/integration-tests/smoke/automation_test.go: `.Consistently(func(g gomega.Gomega) {
for i := 0; i < len(upkeepIDs); i++ {
latestCounter, err = consumers[i].Counter(testcontext.Get(t))
g.Expect(err).ShouldNot(gomega.HaveOccurred(), "Failed to retrieve consumer counter for upkeep at index %d", i)
g.Expect(latestCounter.Int64()).Should(gomega.BeNumerically("<=", countersAfterSettingLowMaxGasPrice[i].Int64()+1),
"Expected consumer counter to be less than %d, but got %d",
countersAfterSettingLowMaxGasPrice[i].Int64()+1, latestCounter.Int64())
}
}, "2m", "5s")`
$DIR/integration-tests/smoke/automation_test.go: `.Counter(testcontext.Get(t))`
$DIR/integration-tests/smoke/automation_test.go: `.Get(t)`
$DIR/integration-tests/smoke/automation_test.go: `.Expect(err)`
$DIR/integration-tests/smoke/automation_test.go: `.ShouldNot(gomega.HaveOccurred(), "Failed to retrieve consumer counter for upkeep at index %d", i)`
$DIR/integration-tests/smoke/automation_test.go: `.HaveOccurred()`
$DIR/integration-tests/smoke/automation_test.go: `.Expect(latestCounter.Int64())`
$DIR/integration-tests/smoke/automation_test.go: `.Int64()`
$DIR/integration-tests/smoke/automation_test.go: `.Should(gomega.BeNumerically("<=", countersAfterSettingLowMaxGasPrice[i].Int64()+1),
"Expected consumer counter to be less than %d, but got %d",
countersAfterSettingLowMaxGasPrice[i].Int64()+1, latestCounter.Int64())`
$DIR/integration-tests/smoke/automation_test.go: `.BeNumerically("<=", countersAfterSettingLowMaxGasPrice[i].Int64()+1)`
$DIR/integration-tests/smoke/automation_test.go: `.Int64()`
$DIR/integration-tests/smoke/automation_test.go: `.Int64()`
$DIR/integration-tests/smoke/automation_test.go: `.Int64()`
$DIR/integration-tests/smoke/automation_test.go: `.Should(gomega.Succeed())`
$DIR/integration-tests/smoke/automation_test.go: `.Succeed()`
$DIR/integration-tests/smoke/automation_test.go: `.Info()`
$DIR/integration-tests/smoke/automation_test.go: `.Msg("no upkeeps is performed because their max gas price is only 1 wei")`
$DIR/integration-tests/smoke/automation_test.go: `.Marshal(gasprice.UpkeepOffchainConfig{MaxGasPrice: big.NewInt(500_000_000_000)})`
$DIR/integration-tests/smoke/automation_test.go: `.NewInt(500_000_000_000)`
$DIR/integration-tests/smoke/automation_test.go: `.Info()`
$DIR/integration-tests/smoke/automation_test.go: `.Msgf("setting the first upkeeps' offchain config to %s, which means maxGasPrice is 500 gwei", hexutil.Encode(uoc))`
$DIR/integration-tests/smoke/automation_test.go: `.Encode(uoc)`
$DIR/integration-tests/smoke/automation_test.go: `.Registry.SetUpkeepOffchainConfig(upkeepIDs[0], uoc)`
$DIR/integration-tests/smoke/automation_test.go: `.Counter(testcontext.Get(t))`
$DIR/integration-tests/smoke/automation_test.go: `.Get(t)`
$DIR/integration-tests/smoke/automation_test.go: `.Int64()`
$DIR/integration-tests/smoke/automation_test.go: `.Int64()`
$DIR/integration-tests/smoke/automation_test.go: `.Info()`
$DIR/integration-tests/smoke/automation_test.go: `.Int64("No of Upkeep Performed", latestCounter.Int64())`
$DIR/integration-tests/smoke/automation_test.go: `.Int64()`
$DIR/integration-tests/smoke/automation_test.go: `.Str("Consumer address", consumers[i].Address())`
$DIR/integration-tests/smoke/automation_test.go: `.Address()`
$DIR/integration-tests/smoke/automation_test.go: `.Msg("Number of upkeeps performed just after setting offchain config")`
$DIR/integration-tests/smoke/automation_test.go: `.Consistently(func(g gomega.Gomega) {
activeConsumers := 0
for i := 0; i < len(upkeepIDs); i++ {
latestCounter, err = consumers[i].Counter(testcontext.Get(t))
g.Expect(err).ShouldNot(gomega.HaveOccurred(), "Failed to retrieve consumer counter for upkeep at index %d", i)
if latestCounter.Int64() != upkeepsPerformedAfter[i] {
activeConsumers++
}
upkeepsPerformedAfter[i] = latestCounter.Int64()
}
// 0 is also okay, because it means that no upkeep was performed yet
g.Expect(activeConsumers).Should(gomega.BeNumerically("<=", 1), "Only one consumer should have been performing upkeeps, but %d did", activeConsumers)
}, "2m", "5s")`
$DIR/integration-tests/smoke/automation_test.go: `.Counter(testcontext.Get(t))`
$DIR/integration-tests/smoke/automation_test.go: `.Get(t)`
$DIR/integration-tests/smoke/automation_test.go: `.Expect(err)`
$DIR/integration-tests/smoke/automation_test.go: `.ShouldNot(gomega.HaveOccurred(), "Failed to retrieve consumer counter for upkeep at index %d", i)`
$DIR/integration-tests/smoke/automation_test.go: `.HaveOccurred()`
$DIR/integration-tests/smoke/automation_test.go: `.Int64()`
$DIR/integration-tests/smoke/automation_test.go: `.Int64()`
$DIR/integration-tests/smoke/automation_test.go: `.Expect(activeConsumers)`
$DIR/integration-tests/smoke/automation_test.go: `.Should(gomega.BeNumerically("<=", 1), "Only one consumer should have been performing upkeeps, but %d did", activeConsumers)`
$DIR/integration-tests/smoke/automation_test.go: `.BeNumerically("<=", 1)`
$DIR/integration-tests/smoke/automation_test.go: `.Should(gomega.Succeed())`
$DIR/integration-tests/smoke/automation_test.go: `.Succeed()`
$DIR/integration-tests/smoke/automation_test.go: `.Info()`
$DIR/integration-tests/smoke/automation_test.go: `.Int64("No of Upkeep Performed", latestCounter.Int64())`
$DIR/integration-tests/smoke/automation_test.go: `.Int64()`
$DIR/integration-tests/smoke/automation_test.go: `.Str("Consumer address", consumers[i].Address())`
$DIR/integration-tests/smoke/automation_test.go: `.Address()`
$DIR/integration-tests/smoke/automation_test.go: `.Msg("Number of upkeeps performed after waiting for the results of offchain config change")`
$DIR/integration-tests/smoke/automation_test.go: `.Info()`
$DIR/integration-tests/smoke/automation_test.go: `.Msg("all the rest upkeeps did not perform again because their max gas price remains 1 wei")`
$DIR/integration-tests/smoke/automation_test.go: `.Info()`
$DIR/integration-tests/smoke/automation_test.go: `.Msg("making sure the consumer keeps performing upkeeps because its max gas price is 500 gwei")`
$DIR/integration-tests/smoke/automation_test.go: `.Eventually(func(g gomega.Gomega) {
latestCounter, err = consumers[performingConsumerIndex].Counter(testcontext.Get(t))
g.Expect(err).ShouldNot(gomega.HaveOccurred(), fmt.Sprintf("Failed to retrieve consumer counter for upkeep at index %d", performingConsumerIndex))
g.Expect(latestCounter.Int64()).Should(gomega.BeNumerically(">", countersAfterSettingLowMaxGasPrice[0].Int64()),
"Expected consumer counter to be greater than %d, but got %d",
countersAfterSettingLowMaxGasPrice[0].Int64(), latestCounter.Int64())
}, "2m", "5s")`
$DIR/integration-tests/smoke/automation_test.go: `.Counter(testcontext.Get(t))`
$DIR/integration-tests/smoke/automation_test.go: `.Get(t)`
$DIR/integration-tests/smoke/automation_test.go: `.Expect(err)`
$DIR/integration-tests/smoke/automation_test.go: `.ShouldNot(gomega.HaveOccurred(), fmt.Sprintf("Failed to retrieve consumer counter for upkeep at index %d", performingConsumerIndex))`
$DIR/integration-tests/smoke/automation_test.go: `.HaveOccurred()`
$DIR/integration-tests/smoke/automation_test.go: `.Sprintf("Failed to retrieve consumer counter for upkeep at index %d", performingConsumerIndex)`
$DIR/integration-tests/smoke/automation_test.go: `.Expect(latestCounter.Int64())`
$DIR/integration-tests/smoke/automation_test.go: `.Int64()`
$DIR/integration-tests/smoke/automation_test.go: `.Should(gomega.BeNumerically(">", countersAfterSettingLowMaxGasPrice[0].Int64()),
"Expected consumer counter to be greater than %d, but got %d",
countersAfterSettingLowMaxGasPrice[0].Int64(), latestCounter.Int64())`
$DIR/integration-tests/smoke/automation_test.go: `.BeNumerically(">", countersAfterSettingLowMaxGasPrice[0].Int64())`
$DIR/integration-tests/smoke/automation_test.go: `.Int64()`
$DIR/integration-tests/smoke/automation_test.go: `.Int64()`
$DIR/integration-tests/smoke/automation_test.go: `.Int64()`
$DIR/integration-tests/smoke/automation_test.go: `.Should(gomega.Succeed())`
$DIR/integration-tests/smoke/automation_test.go: `.Succeed()`
$DIR/integration-tests/smoke/automation_test.go: `.Info()`
$DIR/integration-tests/smoke/automation_test.go: `.Int64("Upkeep Performed times", latestCounter.Int64())`
$DIR/integration-tests/smoke/automation_test.go: `.Int64()`
$DIR/integration-tests/smoke/automation_test.go: `.Msg("the first upkeep performed again")`
$DIR/integration-tests/smoke/cron_test.go: `err = env.MockAdapter.SetAdapterBasedIntValuePath("/variable", []string{http.MethodGet, http.MethodPost}, 5)`
$DIR/integration-tests/smoke/cron_test.go: `err = env.ClCluster.Nodes[0].API.MustCreateBridge(bta)`
$DIR/integration-tests/smoke/cron_test.go: `l.Info().Err(err).Msg("error while waiting for job runs")`
$DIR/integration-tests/smoke/cron_test.go: `g.Expect(err).ShouldNot(gomega.HaveOccurred(), "Reading Job run data shouldn't fail")`
$DIR/integration-tests/smoke/cron_test.go: `g.Expect(len(jobRuns.Data)).Should(gomega.BeNumerically(">=", 5), "Expected number of job runs to be greater than 5, but got %d", len(jobRuns.Data))`
$DIR/integration-tests/smoke/cron_test.go: `g.Expect(jr.Attributes.Errors).Should(gomega.Equal([]interface{}{nil}), "Job run %s shouldn't have errors", jr.ID)`
$DIR/integration-tests/smoke/cron_test.go: `err = env.MockAdapter.SetAdapterBasedIntValuePath("/variable", []string{http.MethodGet, http.MethodPost}, 5)`
$DIR/integration-tests/smoke/cron_test.go: `err = env.ClCluster.Nodes[0].API.MustCreateBridge(bta)`
$DIR/integration-tests/smoke/cron_test.go: `gom.Eventually(func(g gomega.Gomega) {
jobRuns, err := env.ClCluster.Nodes[0].API.MustReadRunsByJob(job.Data.ID)
if err != nil {
l.Info().Err(err).Msg("error while waiting for job runs")
}
g.Expect(err).ShouldNot(gomega.HaveOccurred(), "Reading Job run data shouldn't fail")
g.Expect(len(jobRuns.Data)).Should(gomega.BeNumerically(">=", 5), "Expected number of job runs to be greater than 5, but got %d", len(jobRuns.Data))
for _, jr := range jobRuns.Data {
g.Expect(jr.Attributes.Errors).Should(gomega.Equal([]interface{}{nil}), "Job run %s shouldn't have errors", jr.ID)
}
}, "3m", "3s").Should(gomega.Succeed())`
$DIR/integration-tests/smoke/cron_test.go: `l.Info().Err(err).Msg("error while waiting for job runs")`
$DIR/integration-tests/smoke/cron_test.go: `g.Expect(err).ShouldNot(gomega.HaveOccurred(), "Reading Job run data shouldn't fail")`
$DIR/integration-tests/smoke/cron_test.go: `g.Expect(len(jobRuns.Data)).Should(gomega.BeNumerically(">=", 5), "Expected number of job runs to be greater than 5, but got %d", len(jobRuns.Data))`
$DIR/integration-tests/smoke/cron_test.go: `g.Expect(jr.Attributes.Errors).Should(gomega.Equal([]interface{}{nil}), "Job run %s shouldn't have errors", jr.ID)`
$DIR/integration-tests/smoke/cron_test.go: `err = env.ClCluster.Nodes[0].API.MustDeleteJob(job.Data.ID)`
$DIR/integration-tests/smoke/cron_test.go: `job, err = env.ClCluster.Nodes[0].API.MustCreateJob(&client.CronJobSpec{
Schedule: "CRON_TZ=UTC * * * * * *",
ObservationSource: client.ObservationSourceSpecBridge(bta),
})`
$DIR/integration-tests/smoke/cron_test.go: `l.Info().Err(err).Msg("error while waiting for job runs")`
$DIR/integration-tests/smoke/cron_test.go: `g.Expect(err).ShouldNot(gomega.HaveOccurred(), "Reading Job run data shouldn't fail")`
$DIR/integration-tests/smoke/cron_test.go: `g.Expect(len(jobRuns.Data)).Should(gomega.BeNumerically(">=", 5), "Expected number of job runs to be greater than 5, but got %d", len(jobRuns.Data))`
$DIR/integration-tests/smoke/cron_test.go: `g.Expect(jr.Attributes.Errors).Should(gomega.Equal([]interface{}{nil}), "Job run %s shouldn't have errors", jr.ID)`
$DIR/integration-tests/smoke/cron_test.go: `.GetTestLogger(t)`
$DIR/integration-tests/smoke/cron_test.go: `.GetConfig("Smoke", tc.Cron)`
$DIR/integration-tests/smoke/cron_test.go: `.EthereumNetworkConfigFromConfig(l, &config)`
$DIR/integration-tests/smoke/cron_test.go: `.NewCLTestEnvBuilder()`
$DIR/integration-tests/smoke/cron_test.go: `.
WithTestInstance(t)`
$DIR/integration-tests/smoke/cron_test.go: `.
WithTestConfig(&config)`
$DIR/integration-tests/smoke/cron_test.go: `.
WithPrivateEthereumNetwork(privateNetwork.EthereumNetworkConfig)`
$DIR/integration-tests/smoke/cron_test.go: `.
WithMockAdapter()`
$DIR/integration-tests/smoke/cron_test.go: `.
WithCLNodes(1)`
$DIR/integration-tests/smoke/cron_test.go: `.
WithStandardCleanup()`
$DIR/integration-tests/smoke/cron_test.go: `.
WithSeth()`
$DIR/integration-tests/smoke/cron_test.go: `.
Build()`
$DIR/integration-tests/smoke/cron_test.go: `.MockAdapter.SetAdapterBasedIntValuePath("/variable", []string{http.MethodGet, http.MethodPost}, 5)`
$DIR/integration-tests/smoke/cron_test.go: `.Sprintf("variable-%s", uuid.NewString())`
$DIR/integration-tests/smoke/cron_test.go: `.NewString()`
$DIR/integration-tests/smoke/cron_test.go: `.Sprintf("%s/variable", env.MockAdapter.InternalEndpoint)`
$DIR/integration-tests/smoke/cron_test.go: `.API.MustCreateBridge(bta)`
$DIR/integration-tests/smoke/cron_test.go: `.API.MustCreateJob(&client.CronJobSpec{
Schedule: "CRON_TZ=UTC * * * * * *",
ObservationSource: client.ObservationSourceSpecBridge(bta),
})`
$DIR/integration-tests/smoke/cron_test.go: `.ObservationSourceSpecBridge(bta)`
$DIR/integration-tests/smoke/cron_test.go: `.NewGomegaWithT(t)`
$DIR/integration-tests/smoke/cron_test.go: `.Eventually(func(g gomega.Gomega) {
jobRuns, err := env.ClCluster.Nodes[0].API.MustReadRunsByJob(job.Data.ID)
if err != nil {
l.Info().Err(err).Msg("error while waiting for job runs")
}
g.Expect(err).ShouldNot(gomega.HaveOccurred(), "Reading Job run data shouldn't fail")
g.Expect(len(jobRuns.Data)).Should(gomega.BeNumerically(">=", 5), "Expected number of job runs to be greater than 5, but got %d", len(jobRuns.Data))
for _, jr := range jobRuns.Data {
g.Expect(jr.Attributes.Errors).Should(gomega.Equal([]interface{}{nil}), "Job run %s shouldn't have errors", jr.ID)
}
}, "2m", "3s")`
$DIR/integration-tests/smoke/cron_test.go: `.API.MustReadRunsByJob(job.Data.ID)`
$DIR/integration-tests/smoke/cron_test.go: `.Info()`
$DIR/integration-tests/smoke/cron_test.go: `.Err(err)`
$DIR/integration-tests/smoke/cron_test.go: `.Msg("error while waiting for job runs")`
$DIR/integration-tests/smoke/cron_test.go: `.Expect(err)`
$DIR/integration-tests/smoke/cron_test.go: `.ShouldNot(gomega.HaveOccurred(), "Reading Job run data shouldn't fail")`
$DIR/integration-tests/smoke/cron_test.go: `.HaveOccurred()`
$DIR/integration-tests/smoke/cron_test.go: `.Expect(len(jobRuns.Data))`
$DIR/integration-tests/smoke/cron_test.go: `.Should(gomega.BeNumerically(">=", 5), "Expected number of job runs to be greater than 5, but got %d", len(jobRuns.Data))`
$DIR/integration-tests/smoke/cron_test.go: `.BeNumerically(">=", 5)`
$DIR/integration-tests/smoke/cron_test.go: `.Expect(jr.Attributes.Errors)`
$DIR/integration-tests/smoke/cron_test.go: `.Should(gomega.Equal([]interface{}{nil}), "Job run %s shouldn't have errors", jr.ID)`
$DIR/integration-tests/smoke/cron_test.go: `.Equal([]interface{}{nil})`
$DIR/integration-tests/smoke/cron_test.go: `.Succeed()`
$DIR/integration-tests/smoke/cron_test.go: `.GetTestLogger(t)`
$DIR/integration-tests/smoke/cron_test.go: `.GetConfig("Smoke", tc.Cron)`
$DIR/integration-tests/smoke/cron_test.go: `.EthereumNetworkConfigFromConfig(l, &config)`
$DIR/integration-tests/smoke/cron_test.go: `.NewCLTestEnvBuilder()`
$DIR/integration-tests/smoke/cron_test.go: `.
WithTestInstance(t)`
$DIR/integration-tests/smoke/cron_test.go: `.
WithTestConfig(&config)`
$DIR/integration-tests/smoke/cron_test.go: `.
WithPrivateEthereumNetwork(privateNetwork.EthereumNetworkConfig)`
$DIR/integration-tests/smoke/cron_test.go: `.
WithMockAdapter()`
$DIR/integration-tests/smoke/cron_test.go: `.
WithCLNodes(1)`
$DIR/integration-tests/smoke/cron_test.go: `.
WithStandardCleanup()`
$DIR/integration-tests/smoke/cron_test.go: `.
WithSeth()`
$DIR/integration-tests/smoke/cron_test.go: `.
Build()`
$DIR/integration-tests/smoke/cron_test.go: `.MockAdapter.SetAdapterBasedIntValuePath("/variable", []string{http.MethodGet, http.MethodPost}, 5)`
$DIR/integration-tests/smoke/cron_test.go: `.Sprintf("variable-%s", uuid.NewString())`
$DIR/integration-tests/smoke/cron_test.go: `.NewString()`
$DIR/integration-tests/smoke/cron_test.go: `.Sprintf("%s/variable", env.MockAdapter.InternalEndpoint)`
$DIR/integration-tests/smoke/cron_test.go: `.API.MustCreateBridge(bta)`
$DIR/integration-tests/smoke/cron_test.go: `.API.MustCreateJob(&client.CronJobSpec{
Schedule: "CRON_TZ=UTC * * * * * *",
ObservationSource: client.ObservationSourceSpecBridge(bta),
})`
$DIR/integration-tests/smoke/cron_test.go: `.ObservationSourceSpecBridge(bta)`
$DIR/integration-tests/smoke/cron_test.go: `.NewWithT(t)`
$DIR/integration-tests/smoke/cron_test.go: `.Eventually(func(g gomega.Gomega) {
jobRuns, err := env.ClCluster.Nodes[0].API.MustReadRunsByJob(job.Data.ID)
if err != nil {
l.Info().Err(err).Msg("error while waiting for job runs")
}
g.Expect(err).ShouldNot(gomega.HaveOccurred(), "Reading Job run data shouldn't fail")
g.Expect(len(jobRuns.Data)).Should(gomega.BeNumerically(">=", 5), "Expected number of job runs to be greater than 5, but got %d", len(jobRuns.Data))
for _, jr := range jobRuns.Data {
g.Expect(jr.Attributes.Errors).Should(gomega.Equal([]interface{}{nil}), "Job run %s shouldn't have errors", jr.ID)
}
}, "3m", "3s")`
$DIR/integration-tests/smoke/cron_test.go: `.API.MustReadRunsByJob(job.Data.ID)`
$DIR/integration-tests/smoke/cron_test.go: `.Info()`
$DIR/integration-tests/smoke/cron_test.go: `.Err(err)`
$DIR/integration-tests/smoke/cron_test.go: `.Msg("error while waiting for job runs")`
$DIR/integration-tests/smoke/cron_test.go: `.Expect(err)`
$DIR/integration-tests/smoke/cron_test.go: `.ShouldNot(gomega.HaveOccurred(), "Reading Job run data shouldn't fail")`
$DIR/integration-tests/smoke/cron_test.go: `.HaveOccurred()`
$DIR/integration-tests/smoke/cron_test.go: `.Expect(len(jobRuns.Data))`
$DIR/integration-tests/smoke/cron_test.go: `.Should(gomega.BeNumerically(">=", 5), "Expected number of job runs to be greater than 5, but got %d", len(jobRuns.Data))`
$DIR/integration-tests/smoke/cron_test.go: `.BeNumerically(">=", 5)`
$DIR/integration-tests/smoke/cron_test.go: `.Expect(jr.Attributes.Errors)`
$DIR/integration-tests/smoke/cron_test.go: `.Should(gomega.Equal([]interface{}{nil}), "Job run %s shouldn't have errors", jr.ID)`
$DIR/integration-tests/smoke/cron_test.go: `.Equal([]interface{}{nil})`
$DIR/integration-tests/smoke/cron_test.go: `.Should(gomega.Succeed())`
$DIR/integration-tests/smoke/cron_test.go: `.Succeed()`
$DIR/integration-tests/smoke/cron_test.go: `.API.MustDeleteJob(job.Data.ID)`
$DIR/integration-tests/smoke/cron_test.go: `.API.MustCreateJob(&client.CronJobSpec{
Schedule: "CRON_TZ=UTC * * * * * *",
ObservationSource: client.ObservationSourceSpecBridge(bta),
})`
$DIR/integration-tests/smoke/cron_test.go: `.ObservationSourceSpecBridge(bta)`
$DIR/integration-tests/smoke/cron_test.go: `.Eventually(func(g gomega.Gomega) {
jobRuns, err := env.ClCluster.Nodes[0].API.MustReadRunsByJob(job.Data.ID)
if err != nil {
l.Info().Err(err).Msg("error while waiting for job runs")
}
g.Expect(err).ShouldNot(gomega.HaveOccurred(), "Reading Job run data shouldn't fail")
g.Expect(len(jobRuns.Data)).Should(gomega.BeNumerically(">=", 5), "Expected number of job runs to be greater than 5, but got %d", len(jobRuns.Data))
for _, jr := range jobRuns.Data {
g.Expect(jr.Attributes.Errors).Should(gomega.Equal([]interface{}{nil}), "Job run %s shouldn't have errors", jr.ID)
}
}, "3m", "3s")`
$DIR/integration-tests/smoke/cron_test.go: `.API.MustReadRunsByJob(job.Data.ID)`
$DIR/integration-tests/smoke/cron_test.go: `.Info()`
$DIR/integration-tests/smoke/cron_test.go: `.Err(err)`
$DIR/integration-tests/smoke/cron_test.go: `.Msg("error while waiting for job runs")`
$DIR/integration-tests/smoke/cron_test.go: `.Expect(err)`
$DIR/integration-tests/smoke/cron_test.go: `.ShouldNot(gomega.HaveOccurred(), "Reading Job run data shouldn't fail")`
$DIR/integration-tests/smoke/cron_test.go: `.HaveOccurred()`
$DIR/integration-tests/smoke/cron_test.go: `.Expect(len(jobRuns.Data))`
$DIR/integration-tests/smoke/cron_test.go: `.Should(gomega.BeNumerically(">=", 5), "Expected number of job runs to be greater than 5, but got %d", len(jobRuns.Data))`
$DIR/integration-tests/smoke/cron_test.go: `.BeNumerically(">=", 5)`
$DIR/integration-tests/smoke/cron_test.go: `.Expect(jr.Attributes.Errors)`
$DIR/integration-tests/smoke/cron_test.go: `.Should(gomega.Equal([]interface{}{nil}), "Job run %s shouldn't have errors", jr.ID)`
$DIR/integration-tests/smoke/cron_test.go: `.Equal([]interface{}{nil})`
$DIR/integration-tests/smoke/cron_test.go: `.Succeed()`
$DIR/integration-tests/smoke/flux_test.go: `err = env.MockAdapter.SetAdapterBasedIntValuePath(adapterPath, []string{http.MethodPost}, 1e5)`
$DIR/integration-tests/smoke/flux_test.go: `err = lt.Transfer(fluxInstance.Address(), big.NewInt(1e18))`
$DIR/integration-tests/smoke/flux_test.go: `err = fluxInstance.UpdateAvailableFunds()`
$DIR/integration-tests/smoke/flux_test.go: `err = env.FundChainlinkNodes(big.NewFloat(1))`
$DIR/integration-tests/smoke/flux_test.go: `err = fluxInstance.SetOracles(
contracts.FluxAggregatorSetOraclesOptions{
AddList: nodeAddresses,
RemoveList: []common.Address{},
AdminList: nodeAddresses,
MinSubmissions: 3,
MaxSubmissions: 3,
RestartDelayRounds: 0,
})`
$DIR/integration-tests/smoke/flux_test.go: `l.Info().Str("Oracles", strings.Join(oracles, ",")).Msg("Oracles set")`
$DIR/integration-tests/smoke/flux_test.go: `l.Info().Str("AdapterFullURL", adapterFullURL).Send()`
$DIR/integration-tests/smoke/flux_test.go: `err = n.API.MustCreateBridge(bta)`
$DIR/integration-tests/smoke/flux_test.go: `_, err = n.API.MustCreateJob(fluxSpec)`
$DIR/integration-tests/smoke/flux_test.go: `err = actions_seth.WatchNewFluxRound(l, sethClient, 1, fluxInstance, fluxRoundTimeout)`
$DIR/integration-tests/smoke/flux_test.go: `err = env.MockAdapter.SetAdapterBasedIntValuePath(adapterPath, []string{http.MethodPost}, 1e10)`
$DIR/integration-tests/smoke/flux_test.go: `err = actions_seth.WatchNewFluxRound(l, sethClient, 2, fluxInstance, fluxRoundTimeout)`
$DIR/integration-tests/smoke/flux_test.go: `data, err = fluxInstance.GetContractData(testcontext.Get(t))`
$DIR/integration-tests/smoke/flux_test.go: `l.Info().Interface("data", data).Msg("Round data")`
$DIR/integration-tests/smoke/flux_test.go: `.GetTestLogger(t)`
$DIR/integration-tests/smoke/flux_test.go: `.GetConfig("Smoke", tc.Flux)`
$DIR/integration-tests/smoke/flux_test.go: `.EthereumNetworkConfigFromConfig(l, &config)`
$DIR/integration-tests/smoke/flux_test.go: `.NewCLTestEnvBuilder()`
$DIR/integration-tests/smoke/flux_test.go: `.
WithTestInstance(t)`
$DIR/integration-tests/smoke/flux_test.go: `.
WithTestConfig(&config)`
$DIR/integration-tests/smoke/flux_test.go: `.
WithPrivateEthereumNetwork(privateNetwork.EthereumNetworkConfig)`
$DIR/integration-tests/smoke/flux_test.go: `.
WithMockAdapter()`
$DIR/integration-tests/smoke/flux_test.go: `.
WithCLNodes(3)`
$DIR/integration-tests/smoke/flux_test.go: `.
WithStandardCleanup()`
$DIR/integration-tests/smoke/flux_test.go: `.
WithSeth()`
$DIR/integration-tests/smoke/flux_test.go: `.
Build()`
$DIR/integration-tests/smoke/flux_test.go: `.ClCluster.NodeAddresses()`
$DIR/integration-tests/smoke/flux_test.go: `.MustGetSelectedNetworkConfig(config.GetNetworkConfig())`
$DIR/integration-tests/smoke/flux_test.go: `.GetNetworkConfig()`
$DIR/integration-tests/smoke/flux_test.go: `.GetSethClient(network.ChainID)`
$DIR/integration-tests/smoke/flux_test.go: `.NewString()`
$DIR/integration-tests/smoke/flux_test.go: `.Sprintf("/variable-%s", adapterUUID)`
$DIR/integration-tests/smoke/flux_test.go: `.MockAdapter.SetAdapterBasedIntValuePath(adapterPath, []string{http.MethodPost}, 1e5)`
$DIR/integration-tests/smoke/flux_test.go: `.DeployLinkTokenContract(l, sethClient)`
$DIR/integration-tests/smoke/flux_test.go: `.DeployFluxAggregatorContract(sethClient, lt.Address(), contracts.DefaultFluxAggregatorOptions())`
$DIR/integration-tests/smoke/flux_test.go: `.Address()`
$DIR/integration-tests/smoke/flux_test.go: `.DefaultFluxAggregatorOptions()`
$DIR/integration-tests/smoke/flux_test.go: `.Transfer(fluxInstance.Address(), big.NewInt(1e18))`
$DIR/integration-tests/smoke/flux_test.go: `.Address()`
$DIR/integration-tests/smoke/flux_test.go: `.NewInt(1e18)`
$DIR/integration-tests/smoke/flux_test.go: `.UpdateAvailableFunds()`
$DIR/integration-tests/smoke/flux_test.go: `.FundChainlinkNodes(big.NewFloat(1))`
$DIR/integration-tests/smoke/flux_test.go: `.NewFloat(1)`
$DIR/integration-tests/smoke/flux_test.go: `.SetOracles(
contracts.FluxAggregatorSetOraclesOptions{
AddList: nodeAddresses,
RemoveList: []common.Address{},
AdminList: nodeAddresses,
MinSubmissions: 3,
MaxSubmissions: 3,
RestartDelayRounds: 0,
})`
$DIR/integration-tests/smoke/flux_test.go: `.GetOracles(testcontext.Get(t))`
$DIR/integration-tests/smoke/flux_test.go: `.Get(t)`
$DIR/integration-tests/smoke/flux_test.go: `.Info()`
$DIR/integration-tests/smoke/flux_test.go: `.Str("Oracles", strings.Join(oracles, ","))`
$DIR/integration-tests/smoke/flux_test.go: `.Join(oracles, ",")`
$DIR/integration-tests/smoke/flux_test.go: `.Msg("Oracles set")`
$DIR/integration-tests/smoke/flux_test.go: `.Sprintf("%s%s", env.MockAdapter.InternalEndpoint, adapterPath)`
$DIR/integration-tests/smoke/flux_test.go: `.Info()`
$DIR/integration-tests/smoke/flux_test.go: `.Str("AdapterFullURL", adapterFullURL)`
$DIR/integration-tests/smoke/flux_test.go: `.Send()`
$DIR/integration-tests/smoke/flux_test.go: `.Sprintf("variable-%s", adapterUUID)`
$DIR/integration-tests/smoke/flux_test.go: `.API.MustCreateBridge(bta)`
$DIR/integration-tests/smoke/flux_test.go: `.Sprintf("flux-monitor-%s", adapterUUID)`
$DIR/integration-tests/smoke/flux_test.go: `.Address()`
$DIR/integration-tests/smoke/flux_test.go: `.Sprint(sethClient.ChainID)`
$DIR/integration-tests/smoke/flux_test.go: `.ObservationSourceSpecBridge(bta)`
$DIR/integration-tests/smoke/flux_test.go: `.API.MustCreateJob(fluxSpec)`
$DIR/integration-tests/smoke/flux_test.go: `.WatchNewFluxRound(l, sethClient, 1, fluxInstance, fluxRoundTimeout)`
$DIR/integration-tests/smoke/flux_test.go: `.GetContractData(testcontext.Get(t))`
$DIR/integration-tests/smoke/flux_test.go: `.Get(t)`
$DIR/integration-tests/smoke/flux_test.go: `.MockAdapter.SetAdapterBasedIntValuePath(adapterPath, []string{http.MethodPost}, 1e10)`
$DIR/integration-tests/smoke/flux_test.go: `.WatchNewFluxRound(l, sethClient, 2, fluxInstance, fluxRoundTimeout)`
$DIR/integration-tests/smoke/flux_test.go: `.GetContractData(testcontext.Get(t))`
$DIR/integration-tests/smoke/flux_test.go: `.Get(t)`
$DIR/integration-tests/smoke/flux_test.go: `.Info()`
$DIR/integration-tests/smoke/flux_test.go: `.Interface("data", data)`
$DIR/integration-tests/smoke/flux_test.go: `.Msg("Round data")`
$DIR/integration-tests/smoke/flux_test.go: `.WithdrawablePayment(testcontext.Get(t), oracleAddr)`
$DIR/integration-tests/smoke/flux_test.go: `.Get(t)`
$DIR/integration-tests/smoke/forwarder_ocr_test.go: `l.Info().Str("ETH amount per node", fundingAmount.String()).Msg("Funding Chainlink nodes")`
$DIR/integration-tests/smoke/forwarder_ocr_test.go: `err = actions_seth.FundChainlinkNodesFromRootAddress(l, sethClient, contracts.ChainlinkClientToChainlinkNodeWithKeysAndAddress(workerNodes), fundingAmount)`
$DIR/integration-tests/smoke/forwarder_ocr_test.go: `actions_seth.AcceptAuthorizedReceiversOperator(
t, l, sethClient, operators[i], authorizedForwarders[i], []common.Address{workerNodeAddresses[i]},
)`
$DIR/integration-tests/smoke/forwarder_ocr_test.go: `actions_seth.TrackForwarder(t, sethClient, authorizedForwarders[i], workerNodes[i])`
$DIR/integration-tests/smoke/forwarder_ocr_test.go: `err = actions.CreateOCRJobsWithForwarderLocal(ocrInstances, bootstrapNode, workerNodes, 5, env.MockAdapter, fmt.Sprint(sethClient.ChainID))`
$DIR/integration-tests/smoke/forwarder_ocr_test.go: `err = actions_seth.WatchNewOCRRound(l, sethClient, 1, contracts.V1OffChainAgrregatorToOffChainAggregatorWithRounds(ocrInstances), time.Duration(10*time.Minute))`
$DIR/integration-tests/smoke/forwarder_ocr_test.go: `err = actions.SetAllAdapterResponsesToTheSameValueLocal(10, ocrInstances, workerNodes, env.MockAdapter)`
$DIR/integration-tests/smoke/forwarder_ocr_test.go: `err = actions_seth.WatchNewOCRRound(l, sethClient, 2, contracts.V1OffChainAgrregatorToOffChainAggregatorWithRounds(ocrInstances), time.Duration(10*time.Minute))`
$DIR/integration-tests/smoke/forwarder_ocr_test.go: `answer, err = ocrInstances[0].GetLatestAnswer(testcontext.Get(t))`
$DIR/integration-tests/smoke/forwarder_ocr_test.go: `.GetTestLogger(t)`
$DIR/integration-tests/smoke/forwarder_ocr_test.go: `.GetConfig("Smoke", tc.ForwarderOcr)`
$DIR/integration-tests/smoke/forwarder_ocr_test.go: `.EthereumNetworkConfigFromConfig(l, &config)`
$DIR/integration-tests/smoke/forwarder_ocr_test.go: `.NewCLTestEnvBuilder()`
$DIR/integration-tests/smoke/forwarder_ocr_test.go: `.
WithTestInstance(t)`
$DIR/integration-tests/smoke/forwarder_ocr_test.go: `.
WithTestConfig(&config)`
$DIR/integration-tests/smoke/forwarder_ocr_test.go: `.
WithPrivateEthereumNetwork(privateNetwork.EthereumNetworkConfig)`
$DIR/integration-tests/smoke/forwarder_ocr_test.go: `.
WithMockAdapter()`
$DIR/integration-tests/smoke/forwarder_ocr_test.go: `.
WithCLNodes(6)`
$DIR/integration-tests/smoke/forwarder_ocr_test.go: `.
WithFunding(big.NewFloat(*config.Common.ChainlinkNodeFunding))`
$DIR/integration-tests/smoke/forwarder_ocr_test.go: `.NewFloat(*config.Common.ChainlinkNodeFunding)`
$DIR/integration-tests/smoke/forwarder_ocr_test.go: `.
WithStandardCleanup()`
$DIR/integration-tests/smoke/forwarder_ocr_test.go: `.
WithSeth()`
$DIR/integration-tests/smoke/forwarder_ocr_test.go: `.
Build()`
$DIR/integration-tests/smoke/forwarder_ocr_test.go: `.ClCluster.NodeAPIs()`
$DIR/integration-tests/smoke/forwarder_ocr_test.go: `.ChainlinkNodeAddressesLocal(workerNodes)`
$DIR/integration-tests/smoke/forwarder_ocr_test.go: `.MustGetSelectedNetworkConfig(config.Network)`
$DIR/integration-tests/smoke/forwarder_ocr_test.go: `.GetSethClient(selectedNetwork.ChainID)`
$DIR/integration-tests/smoke/forwarder_ocr_test.go: `.DeployLinkTokenContract(l, sethClient)`
$DIR/integration-tests/smoke/forwarder_ocr_test.go: `.NewFloat(.05)`
$DIR/integration-tests/smoke/forwarder_ocr_test.go: `.Info()`
$DIR/integration-tests/smoke/forwarder_ocr_test.go: `.Str("ETH amount per node", fundingAmount.String())`
$DIR/integration-tests/smoke/forwarder_ocr_test.go: `.String()`
$DIR/integration-tests/smoke/forwarder_ocr_test.go: `.Msg("Funding Chainlink nodes")`
$DIR/integration-tests/smoke/forwarder_ocr_test.go: `.FundChainlinkNodesFromRootAddress(l, sethClient, contracts.ChainlinkClientToChainlinkNodeWithKeysAndAddress(workerNodes), fundingAmount)`
$DIR/integration-tests/smoke/forwarder_ocr_test.go: `.ChainlinkClientToChainlinkNodeWithKeysAndAddress(workerNodes)`
$DIR/integration-tests/smoke/forwarder_ocr_test.go: `.DeployForwarderContracts(
t, sethClient, common.HexToAddress(lt.Address()), len(workerNodes),
)`
$DIR/integration-tests/smoke/forwarder_ocr_test.go: `.HexToAddress(lt.Address())`
$DIR/integration-tests/smoke/forwarder_ocr_test.go: `.Address()`
$DIR/integration-tests/smoke/forwarder_ocr_test.go: `.AcceptAuthorizedReceiversOperator(
t, l, sethClient, operators[i], authorizedForwarders[i], []common.Address{workerNodeAddresses[i]},
)`
$DIR/integration-tests/smoke/forwarder_ocr_test.go: `.TrackForwarder(t, sethClient, authorizedForwarders[i], workerNodes[i])`
$DIR/integration-tests/smoke/forwarder_ocr_test.go: `.DeployOCRContractsForwarderFlow(
l,
sethClient,
1,
common.HexToAddress(lt.Address()),
contracts.ChainlinkClientToChainlinkNodeWithKeysAndAddress(workerNodes),
authorizedForwarders,
)`
$DIR/integration-tests/smoke/forwarder_ocr_test.go: `.HexToAddress(lt.Address())`
$DIR/integration-tests/smoke/forwarder_ocr_test.go: `.Address()`
$DIR/integration-tests/smoke/forwarder_ocr_test.go: `.ChainlinkClientToChainlinkNodeWithKeysAndAddress(workerNodes)`
$DIR/integration-tests/smoke/forwarder_ocr_test.go: `.CreateOCRJobsWithForwarderLocal(ocrInstances, bootstrapNode, workerNodes, 5, env.MockAdapter, fmt.Sprint(sethClient.ChainID))`
$DIR/integration-tests/smoke/forwarder_ocr_test.go: `.Sprint(sethClient.ChainID)`
$DIR/integration-tests/smoke/forwarder_ocr_test.go: `.WatchNewOCRRound(l, sethClient, 1, contracts.V1OffChainAgrregatorToOffChainAggregatorWithRounds(ocrInstances), time.Duration(10*time.Minute))`
$DIR/integration-tests/smoke/forwarder_ocr_test.go: `.V1OffChainAgrregatorToOffChainAggregatorWithRounds(ocrInstances)`
$DIR/integration-tests/smoke/forwarder_ocr_test.go: `.Duration(10*time.Minute)`
$DIR/integration-tests/smoke/forwarder_ocr_test.go: `.GetLatestAnswer(testcontext.Get(t))`
$DIR/integration-tests/smoke/forwarder_ocr_test.go: `.Get(t)`
$DIR/integration-tests/smoke/forwarder_ocr_test.go: `.SetAllAdapterResponsesToTheSameValueLocal(10, ocrInstances, workerNodes, env.MockAdapter)`
$DIR/integration-tests/smoke/forwarder_ocr_test.go: `.WatchNewOCRRound(l, sethClient, 2, contracts.V1OffChainAgrregatorToOffChainAggregatorWithRounds(ocrInstances), time.Duration(10*time.Minute))`
$DIR/integration-tests/smoke/forwarder_ocr_test.go: `.V1OffChainAgrregatorToOffChainAggregatorWithRounds(ocrInstances)`
$DIR/integration-tests/smoke/forwarder_ocr_test.go: `.Duration(10*time.Minute)`
$DIR/integration-tests/smoke/forwarder_ocr_test.go: `.GetLatestAnswer(testcontext.Get(t))`
$DIR/integration-tests/smoke/forwarder_ocr_test.go: `.Get(t)`
$DIR/integration-tests/smoke/forwarder_ocr_test.go: `.Int64()`
$DIR/integration-tests/smoke/forwarder_ocr_test.go: `.Int64()`
$DIR/integration-tests/smoke/forwarders_ocr2_test.go: `l.Info().Str("ETH amount per node", fundingAmount.String()).Msg("Funding Chainlink nodes")`
$DIR/integration-tests/smoke/forwarders_ocr2_test.go: `err = actions_seth.FundChainlinkNodesFromRootAddress(l, sethClient, contracts.ChainlinkClientToChainlinkNodeWithKeysAndAddress(workerNodes), fundingAmount)`
$DIR/integration-tests/smoke/forwarders_ocr2_test.go: `actions_seth.AcceptAuthorizedReceiversOperator(
t, l, sethClient, operators[i], authorizedForwarders[i], []common.Address{workerNodeAddresses[i]},
)`
$DIR/integration-tests/smoke/forwarders_ocr2_test.go: `actions_seth.TrackForwarder(t, sethClient, authorizedForwarders[i], workerNodes[i])`
$DIR/integration-tests/smoke/forwarders_ocr2_test.go: `transmitters = append(transmitters, forwarderCommonAddress.Hex())`
$DIR/integration-tests/smoke/forwarders_ocr2_test.go: `ocrv2Config.Transmitters = authorizedForwarders`
$DIR/integration-tests/smoke/forwarders_ocr2_test.go: `err = actions_seth.ConfigureOCRv2AggregatorContracts(ocrv2Config, ocrInstances)`
$DIR/integration-tests/smoke/forwarders_ocr2_test.go: `err = actions.CreateOCRv2JobsLocal(ocrInstances, bootstrapNode, workerNodes, env.MockAdapter, "ocr2", 5, uint64(sethClient.ChainID), true, false)`
$DIR/integration-tests/smoke/forwarders_ocr2_test.go: `err = actions_seth.WatchNewOCRRound(l, sethClient, 1, contracts.V2OffChainAgrregatorToOffChainAggregatorWithRounds(ocrInstances), time.Duration(10*time.Minute))`
$DIR/integration-tests/smoke/forwarders_ocr2_test.go: `err = env.MockAdapter.SetAdapterBasedIntValuePath("ocr2", []string{http.MethodGet, http.MethodPost}, ocrRoundVal)`
$DIR/integration-tests/smoke/forwarders_ocr2_test.go: `err = actions_seth.WatchNewOCRRound(l, sethClient, int64(i), contracts.V2OffChainAgrregatorToOffChainAggregatorWithRounds(ocrInstances), time.Duration(10*time.Minute))`
$DIR/integration-tests/smoke/forwarders_ocr2_test.go: `answer, err = ocrInstances[0].GetLatestAnswer(testcontext.Get(t))`
$DIR/integration-tests/smoke/forwarders_ocr2_test.go: `.GetTestLogger(t)`
$DIR/integration-tests/smoke/forwarders_ocr2_test.go: `.GetConfig("Smoke", tc.ForwarderOcr2)`
$DIR/integration-tests/smoke/forwarders_ocr2_test.go: `.EthereumNetworkConfigFromConfig(l, &config)`
$DIR/integration-tests/smoke/forwarders_ocr2_test.go: `.NewCLTestEnvBuilder()`
$DIR/integration-tests/smoke/forwarders_ocr2_test.go: `.
WithTestInstance(t)`
$DIR/integration-tests/smoke/forwarders_ocr2_test.go: `.
WithTestConfig(&config)`
$DIR/integration-tests/smoke/forwarders_ocr2_test.go: `.
WithPrivateEthereumNetwork(privateNetwork.EthereumNetworkConfig)`
$DIR/integration-tests/smoke/forwarders_ocr2_test.go: `.
WithMockAdapter()`
$DIR/integration-tests/smoke/forwarders_ocr2_test.go: `.
WithCLNodes(6)`
$DIR/integration-tests/smoke/forwarders_ocr2_test.go: `.
WithFunding(big.NewFloat(*config.Common.ChainlinkNodeFunding))`
$DIR/integration-tests/smoke/forwarders_ocr2_test.go: `.NewFloat(*config.Common.ChainlinkNodeFunding)`
$DIR/integration-tests/smoke/forwarders_ocr2_test.go: `.
WithStandardCleanup()`
$DIR/integration-tests/smoke/forwarders_ocr2_test.go: `.
WithSeth()`
$DIR/integration-tests/smoke/forwarders_ocr2_test.go: `.
Build()`
$DIR/integration-tests/smoke/forwarders_ocr2_test.go: `.ClCluster.NodeAPIs()`
$DIR/integration-tests/smoke/forwarders_ocr2_test.go: `.ChainlinkNodeAddressesLocal(workerNodes)`
$DIR/integration-tests/smoke/forwarders_ocr2_test.go: `.MustGetSelectedNetworkConfig(config.Network)`
$DIR/integration-tests/smoke/forwarders_ocr2_test.go: `.GetSethClient(selectedNetwork.ChainID)`
$DIR/integration-tests/smoke/forwarders_ocr2_test.go: `.DeployLinkTokenContract(l, sethClient)`
$DIR/integration-tests/smoke/forwarders_ocr2_test.go: `.NewFloat(.05)`
$DIR/integration-tests/smoke/forwarders_ocr2_test.go: `.Info()`
$DIR/integration-tests/smoke/forwarders_ocr2_test.go: `.Str("ETH amount per node", fundingAmount.String())`
$DIR/integration-tests/smoke/forwarders_ocr2_test.go: `.String()`
$DIR/integration-tests/smoke/forwarders_ocr2_test.go: `.Msg("Funding Chainlink nodes")`
$DIR/integration-tests/smoke/forwarders_ocr2_test.go: `.FundChainlinkNodesFromRootAddress(l, sethClient, contracts.ChainlinkClientToChainlinkNodeWithKeysAndAddress(workerNodes), fundingAmount)`
$DIR/integration-tests/smoke/forwarders_ocr2_test.go: `.ChainlinkClientToChainlinkNodeWithKeysAndAddress(workerNodes)`
$DIR/integration-tests/smoke/forwarders_ocr2_test.go: `.DeployForwarderContracts(
t, sethClient, common.HexToAddress(lt.Address()), len(workerNodes),
)`
$DIR/integration-tests/smoke/forwarders_ocr2_test.go: `.HexToAddress(lt.Address())`
$DIR/integration-tests/smoke/forwarders_ocr2_test.go: `.Address()`
$DIR/integration-tests/smoke/forwarders_ocr2_test.go: `.AcceptAuthorizedReceiversOperator(
t, l, sethClient, operators[i], authorizedForwarders[i], []common.Address{workerNodeAddresses[i]},
)`
$DIR/integration-tests/smoke/forwarders_ocr2_test.go: `.TrackForwarder(t, sethClient, authorizedForwarders[i], workerNodes[i])`
$DIR/integration-tests/smoke/forwarders_ocr2_test.go: `.Hex()`
$DIR/integration-tests/smoke/forwarders_ocr2_test.go: `.DefaultOffChainAggregatorOptions()`
$DIR/integration-tests/smoke/forwarders_ocr2_test.go: `.DeployOCRv2Contracts(l, sethClient, 1, common.HexToAddress(lt.Address()), transmitters, ocrOffchainOptions)`
$DIR/integration-tests/smoke/forwarders_ocr2_test.go: `.HexToAddress(lt.Address())`
$DIR/integration-tests/smoke/forwarders_ocr2_test.go: `.Address()`
$DIR/integration-tests/smoke/forwarders_ocr2_test.go: `.BuildMedianOCR2ConfigLocal(workerNodes, ocrOffchainOptions)`
$DIR/integration-tests/smoke/forwarders_ocr2_test.go: `.ConfigureOCRv2AggregatorContracts(ocrv2Config, ocrInstances)`
$DIR/integration-tests/smoke/forwarders_ocr2_test.go: `.CreateOCRv2JobsLocal(ocrInstances, bootstrapNode, workerNodes, env.MockAdapter, "ocr2", 5, uint64(sethClient.ChainID), true, false)`
$DIR/integration-tests/smoke/forwarders_ocr2_test.go: `.WatchNewOCRRound(l, sethClient, 1, contracts.V2OffChainAgrregatorToOffChainAggregatorWithRounds(ocrInstances), time.Duration(10*time.Minute))`
$DIR/integration-tests/smoke/forwarders_ocr2_test.go: `.V2OffChainAgrregatorToOffChainAggregatorWithRounds(ocrInstances)`
$DIR/integration-tests/smoke/forwarders_ocr2_test.go: `.Duration(10*time.Minute)`
$DIR/integration-tests/smoke/forwarders_ocr2_test.go: `.GetLatestAnswer(testcontext.Get(t))`
$DIR/integration-tests/smoke/forwarders_ocr2_test.go: `.Get(t)`
$DIR/integration-tests/smoke/forwarders_ocr2_test.go: `.MockAdapter.SetAdapterBasedIntValuePath("ocr2", []string{http.MethodGet, http.MethodPost}, ocrRoundVal)`
$DIR/integration-tests/smoke/forwarders_ocr2_test.go: `.WatchNewOCRRound(l, sethClient, int64(i), contracts.V2OffChainAgrregatorToOffChainAggregatorWithRounds(ocrInstances), time.Duration(10*time.Minute))`
$DIR/integration-tests/smoke/forwarders_ocr2_test.go: `.V2OffChainAgrregatorToOffChainAggregatorWithRounds(ocrInstances)`
$DIR/integration-tests/smoke/forwarders_ocr2_test.go: `.Duration(10*time.Minute)`
$DIR/integration-tests/smoke/forwarders_ocr2_test.go: `.GetLatestAnswer(testcontext.Get(t))`
$DIR/integration-tests/smoke/forwarders_ocr2_test.go: `.Get(t)`
$DIR/integration-tests/smoke/keeper_test.go: `t.Run(fmt.Sprintf("registry_1_%d", registryVersion), func(t *testing.T) {
t.Parallel()
l := logging.GetTestLogger(t)
config, err := tc.GetConfig("Smoke", tc.Keeper)
require.NoError(t, err, "Failed to get config")
chainClient, chainlinkNodes, linkToken, _ := setupKeeperTest(l, t, &config)
sb, err := chainClient.Client.BlockNumber(context.Background())
require.NoError(t, err, "Failed to get start block")
registry, _, consumers, upkeepIDs := actions_seth.DeployKeeperContracts(
t,
registryVersion,
keeperDefaultRegistryConfig,
keeperDefaultUpkeepsToDeploy,
keeperDefaultUpkeepGasLimit,
linkToken,
chainClient,
big.NewInt(keeperDefaultLinkFunds),
)
t.Cleanup(func() {
actions_seth.GetStalenessReportCleanupFn(t, l, chainClient, sb, registry, registryVersion)()
})
_, err = actions.CreateKeeperJobsLocal(l, chainlinkNodes, registry, contracts.OCRv2Config{}, fmt.Sprint(chainClient.ChainID))
require.NoError(t, err, "Error creating keeper jobs")
gom := gomega.NewGomegaWithT(t)
gom.Eventually(func(g gomega.Gomega) error {
// Check if the upkeeps are performing multiple times by analyzing their counters and checking they are greater than 10
for i := 0; i < len(upkeepIDs); i++ {
counter, err := consumers[i].Counter(testcontext.Get(t))
g.Expect(err).ShouldNot(gomega.HaveOccurred(), "Failed to retrieve consumer counter for upkeep at index %d", i)
g.Expect(counter.Int64()).Should(gomega.BeNumerically(">", int64(10)),
"Expected consumer counter to be greater than 10, but got %d", counter.Int64())
l.Info().Int64("Upkeep counter", counter.Int64()).Msg("Number of upkeeps performed")
}
return nil
}, "5m", "1s").Should(gomega.Succeed())
// Cancel all the registered upkeeps via the registry
for i := 0; i < len(upkeepIDs); i++ {
err := registry.CancelUpkeep(upkeepIDs[i])
require.NoError(t, err, "Could not cancel upkeep at index %d", i)
}
var countersAfterCancellation = make([]*big.Int, len(upkeepIDs))
for i := 0; i < len(upkeepIDs); i++ {
// Obtain the amount of times the upkeep has been executed so far
countersAfterCancellation[i], err = consumers[i].Counter(testcontext.Get(t))
require.NoError(t, err, "Failed to retrieve consumer counter for upkeep at index %d", i)
l.Info().Int("Index", i).Int64("Upkeeps Performed", countersAfterCancellation[i].Int64()).Msg("Cancelled Upkeep")
}
gom.Consistently(func(g gomega.Gomega) {
for i := 0; i < len(upkeepIDs); i++ {
// Expect the counter to remain constant because the upkeep was cancelled, so it shouldn't increase anymore
latestCounter, err := consumers[i].Counter(testcontext.Get(t))
g.Expect(err).ShouldNot(gomega.HaveOccurred(), "Failed to retrieve consumer counter for upkeep at index %d", i)
g.Expect(latestCounter.Int64()).Should(gomega.Equal(countersAfterCancellation[i].Int64()),
"Expected consumer counter to remain constant at %d, but got %d",
countersAfterCancellation[i].Int64(), latestCounter.Int64())
}
}, "1m", "1s").Should(gomega.Succeed())
})`
$DIR/integration-tests/smoke/keeper_test.go: `t.Cleanup(func() {
actions_seth.GetStalenessReportCleanupFn(t, l, chainClient, sb, registry, registryVersion)()
})`
$DIR/integration-tests/smoke/keeper_test.go: `actions_seth.GetStalenessReportCleanupFn(t, l, chainClient, sb, registry, registryVersion)()`
$DIR/integration-tests/smoke/keeper_test.go: `_, err = actions.CreateKeeperJobsLocal(l, chainlinkNodes, registry, contracts.OCRv2Config{}, fmt.Sprint(chainClient.ChainID))`
$DIR/integration-tests/smoke/keeper_test.go: `gom.Eventually(func(g gomega.Gomega) error {
// Check if the upkeeps are performing multiple times by analyzing their counters and checking they are greater than 10
for i := 0; i < len(upkeepIDs); i++ {
counter, err := consumers[i].Counter(testcontext.Get(t))
g.Expect(err).ShouldNot(gomega.HaveOccurred(), "Failed to retrieve consumer counter for upkeep at index %d", i)
g.Expect(counter.Int64()).Should(gomega.BeNumerically(">", int64(10)),
"Expected consumer counter to be greater than 10, but got %d", counter.Int64())
l.Info().Int64("Upkeep counter", counter.Int64()).Msg("Number of upkeeps performed")
}
return nil
}, "5m", "1s").Should(gomega.Succeed())`
$DIR/integration-tests/smoke/keeper_test.go: `g.Expect(err).ShouldNot(gomega.HaveOccurred(), "Failed to retrieve consumer counter for upkeep at index %d", i)`
$DIR/integration-tests/smoke/keeper_test.go: `g.Expect(counter.Int64()).Should(gomega.BeNumerically(">", int64(10)),
"Expected consumer counter to be greater than 10, but got %d", counter.Int64())`
$DIR/integration-tests/smoke/keeper_test.go: `l.Info().Int64("Upkeep counter", counter.Int64()).Msg("Number of upkeeps performed")`
$DIR/integration-tests/smoke/keeper_test.go: `countersAfterCancellation[i], err = consumers[i].Counter(testcontext.Get(t))`
$DIR/integration-tests/smoke/keeper_test.go: `l.Info().Int("Index", i).Int64("Upkeeps Performed", countersAfterCancellation[i].Int64()).Msg("Cancelled Upkeep")`
$DIR/integration-tests/smoke/keeper_test.go: `gom.Consistently(func(g gomega.Gomega) {
for i := 0; i < len(upkeepIDs); i++ {
// Expect the counter to remain constant because the upkeep was cancelled, so it shouldn't increase anymore
latestCounter, err := consumers[i].Counter(testcontext.Get(t))
g.Expect(err).ShouldNot(gomega.HaveOccurred(), "Failed to retrieve consumer counter for upkeep at index %d", i)
g.Expect(latestCounter.Int64()).Should(gomega.Equal(countersAfterCancellation[i].Int64()),
"Expected consumer counter to remain constant at %d, but got %d",
countersAfterCancellation[i].Int64(), latestCounter.Int64())
}
}, "1m", "1s").Should(gomega.Succeed())`
$DIR/integration-tests/smoke/keeper_test.go: `g.Expect(err).ShouldNot(gomega.HaveOccurred(), "Failed to retrieve consumer counter for upkeep at index %d", i)`
$DIR/integration-tests/smoke/keeper_test.go: `g.Expect(latestCounter.Int64()).Should(gomega.Equal(countersAfterCancellation[i].Int64()),
"Expected consumer counter to remain constant at %d, but got %d",
countersAfterCancellation[i].Int64(), latestCounter.Int64())`
$DIR/integration-tests/smoke/keeper_test.go: `t.Run(fmt.Sprintf("registry_1_%d", registryVersion), func(t *testing.T) {
t.Parallel()
l := logging.GetTestLogger(t)
config, err := tc.GetConfig("Smoke", tc.Keeper)
require.NoError(t, err, "Failed to get config")
chainClient, chainlinkNodes, linkToken, _ := setupKeeperTest(l, t, &config)
sb, err := chainClient.Client.BlockNumber(context.Background())
require.NoError(t, err, "Failed to get start block")
registry, _, consumers, upkeepIDs := actions_seth.DeployKeeperContracts(
t,
registryVersion,
highBCPTRegistryConfig,
keeperDefaultUpkeepsToDeploy,
keeperDefaultUpkeepGasLimit,
linkToken,
chainClient,
big.NewInt(keeperDefaultLinkFunds),
)
_, err = actions.CreateKeeperJobsLocal(l, chainlinkNodes, registry, contracts.OCRv2Config{}, fmt.Sprint(chainClient.ChainID))
require.NoError(t, err, "Error creating keeper jobs")
t.Cleanup(func() {
actions_seth.GetStalenessReportCleanupFn(t, l, chainClient, sb, registry, registryVersion)()
})
keepersPerformedLowFreq := map[*big.Int][]string{}
// gom := gomega.NewGomegaWithT(t)
// Wait for upkeep to be performed by two different keepers that alternate (buddies)
l.Info().Msg("Waiting for 2m for upkeeps to be performed by different keepers")
ticker := time.NewTicker(1 * time.Second)
defer ticker.Stop()
stop := time.After(2 * time.Minute)
LOW_LOOP:
for {
select {
case <-ticker.C:
for i := 0; i < len(upkeepIDs); i++ {
counter, err := consumers[i].Counter(testcontext.Get(t))
require.NoError(t, err, "Calling consumer's counter shouldn't fail")
l.Info().Str("UpkeepId", upkeepIDs[i].String()).Int64("Upkeep counter", counter.Int64()).Msg("Number of upkeeps performed")
upkeepInfo, err := registry.GetUpkeepInfo(testcontext.Get(t), upkeepIDs[i])
require.NoError(t, err, "Registry's getUpkeep shouldn't fail")
latestKeeper := upkeepInfo.LastKeeper
if latestKeeper == actions.ZeroAddress.String() {
continue
}
keepersPerformedLowFreq[upkeepIDs[i]] = append(keepersPerformedLowFreq[upkeepIDs[i]], latestKeeper)
}
case <-stop:
ticker.Stop()
break LOW_LOOP
}
}
require.GreaterOrEqual(t, 2, len(keepersPerformedLowFreq), "At least 2 different keepers should have been performing upkeeps")
// Now set BCPT to be low, so keepers change turn frequently
err = registry.SetConfig(lowBCPTRegistryConfig, contracts.OCRv2Config{})
require.NoError(t, err, "Error setting registry config")
keepersPerformedHigherFreq := map[*big.Int][]string{}
ticker = time.NewTicker(1 * time.Second)
defer ticker.Stop()
stop = time.After(2 * time.Minute)
HIGH_LOOP:
for {
select {
case <-ticker.C:
for i := 0; i < len(upkeepIDs); i++ {
counter, err := consumers[i].Counter(testcontext.Get(t))
require.NoError(t, err, "Calling consumer's counter shouldn't fail")
l.Info().Str("UpkeepId", upkeepIDs[i].String()).Int64("Upkeep counter", counter.Int64()).Msg("Number of upkeeps performed")
upkeepInfo, err := registry.GetUpkeepInfo(testcontext.Get(t), upkeepIDs[i])
require.NoError(t, err, "Registry's getUpkeep shouldn't fail")
latestKeeper := upkeepInfo.LastKeeper
if latestKeeper == actions.ZeroAddress.String() {
continue
}
keepersPerformedHigherFreq[upkeepIDs[i]] = append(keepersPerformedHigherFreq[upkeepIDs[i]], latestKeeper)
}
case <-stop:
ticker.Stop()
break HIGH_LOOP
}
}
require.GreaterOrEqual(t, 3, len(keepersPerformedHigherFreq), "At least 3 different keepers should have been performing upkeeps after BCPT change")
var countFreq = func(keepers []string, freqMap map[string]int) {
for _, keeper := range keepers {
freqMap[keeper]++
}
}
for i := 0; i < len(upkeepIDs); i++ {
lowFreqMap := make(map[string]int)
highFreqMap := make(map[string]int)
countFreq(keepersPerformedLowFreq[upkeepIDs[i]], lowFreqMap)
countFreq(keepersPerformedHigherFreq[upkeepIDs[i]], highFreqMap)
require.Greater(t, len(highFreqMap), len(lowFreqMap), "High frequency map should have more keepers than low frequency map")
l.Info().Interface("Low BCPT", lowFreqMap).Interface("High BCPT", highFreqMap).Str("UpkeepID", upkeepIDs[i].String()).Msg("Keeper frequency map")
for lowKeeper, lowFreq := range lowFreqMap {
highFreq, ok := highFreqMap[lowKeeper]
// it might happen due to fluke that a keeper is not found in high frequency map
if !ok {
continue
}
// require.True(t, ok, "Keeper %s not found in high frequency map. This should not happen", lowKeeper)
require.GreaterOrEqual(t, lowFreq, highFreq, "Keeper %s should have performed less times with high BCPT than with low BCPT", lowKeeper)
}
}
})`
$DIR/integration-tests/smoke/keeper_test.go: `_, err = actions.CreateKeeperJobsLocal(l, chainlinkNodes, registry, contracts.OCRv2Config{}, fmt.Sprint(chainClient.ChainID))`
$DIR/integration-tests/smoke/keeper_test.go: `t.Cleanup(func() {
actions_seth.GetStalenessReportCleanupFn(t, l, chainClient, sb, registry, registryVersion)()
})`
$DIR/integration-tests/smoke/keeper_test.go: `actions_seth.GetStalenessReportCleanupFn(t, l, chainClient, sb, registry, registryVersion)()`
$DIR/integration-tests/smoke/keeper_test.go: `l.Info().Msg("Waiting for 2m for upkeeps to be performed by different keepers")`
$DIR/integration-tests/smoke/keeper_test.go: `l.Info().Str("UpkeepId", upkeepIDs[i].String()).Int64("Upkeep counter", counter.Int64()).Msg("Number of upkeeps performed")`
$DIR/integration-tests/smoke/keeper_test.go: `keepersPerformedLowFreq[upkeepIDs[i]] = append(keepersPerformedLowFreq[upkeepIDs[i]], latestKeeper)`
$DIR/integration-tests/smoke/keeper_test.go: `ticker.Stop()`
$DIR/integration-tests/smoke/keeper_test.go: `err = registry.SetConfig(lowBCPTRegistryConfig, contracts.OCRv2Config{})`
$DIR/integration-tests/smoke/keeper_test.go: `ticker = time.NewTicker(1 * time.Second)`
$DIR/integration-tests/smoke/keeper_test.go: `stop = time.After(2 * time.Minute)`
$DIR/integration-tests/smoke/keeper_test.go: `l.Info().Str("UpkeepId", upkeepIDs[i].String()).Int64("Upkeep counter", counter.Int64()).Msg("Number of upkeeps performed")`
$DIR/integration-tests/smoke/keeper_test.go: `keepersPerformedHigherFreq[upkeepIDs[i]] = append(keepersPerformedHigherFreq[upkeepIDs[i]], latestKeeper)`
$DIR/integration-tests/smoke/keeper_test.go: `ticker.Stop()`
$DIR/integration-tests/smoke/keeper_test.go: `freqMap[keeper]++`
$DIR/integration-tests/smoke/keeper_test.go: `countFreq(keepersPerformedLowFreq[upkeepIDs[i]], lowFreqMap)`
$DIR/integration-tests/smoke/keeper_test.go: `countFreq(keepersPerformedHigherFreq[upkeepIDs[i]], highFreqMap)`
$DIR/integration-tests/smoke/keeper_test.go: `l.Info().Interface("Low BCPT", lowFreqMap).Interface("High BCPT", highFreqMap).Str("UpkeepID", upkeepIDs[i].String()).Msg("Keeper frequency map")`
$DIR/integration-tests/smoke/keeper_test.go: `t.Run(fmt.Sprintf("registry_1_%d", registryVersion), func(t *testing.T) {
t.Parallel()
l := logging.GetTestLogger(t)
config, err := tc.GetConfig("Smoke", tc.Keeper)
require.NoError(t, err, "Failed to get config")
chainClient, chainlinkNodes, linkToken, _ := setupKeeperTest(l, t, &config)
sb, err := chainClient.Client.BlockNumber(context.Background())
require.NoError(t, err, "Failed to get start block")
registry, _, consumersPerformance, upkeepIDs := actions_seth.DeployPerformanceKeeperContracts(
t,
chainClient,
registryVersion,
keeperDefaultUpkeepsToDeploy,
keeperDefaultUpkeepGasLimit,
linkToken,
&keeperDefaultRegistryConfig,
big.NewInt(keeperDefaultLinkFunds),
10000, // How many blocks this upkeep will be eligible from first upkeep block
5, // Interval of blocks that upkeeps are expected to be performed
100000, // How much gas should be burned on checkUpkeep() calls
4000000, // How much gas should be burned on performUpkeep() calls. Initially set higher than defaultUpkeepGasLimit
)
_, err = actions.CreateKeeperJobsLocal(l, chainlinkNodes, registry, contracts.OCRv2Config{}, fmt.Sprint(chainClient.ChainID))
require.NoError(t, err, "Error creating keeper jobs")
t.Cleanup(func() {
actions_seth.GetStalenessReportCleanupFn(t, l, chainClient, sb, registry, registryVersion)()
})
consumerPerformance := consumersPerformance[0]
upkeepID := upkeepIDs[0]
gom := gomega.NewGomegaWithT(t)
// Initially performGas is set high, so performUpkeep reverts and no upkeep should be performed
gom.Consistently(func(g gomega.Gomega) {
// Consumer count should remain at 0
cnt, err := consumerPerformance.GetUpkeepCount(testcontext.Get(t))
g.Expect(err).ShouldNot(gomega.HaveOccurred(), "Calling consumer's Counter shouldn't fail")
g.Expect(cnt.Int64()).Should(
gomega.Equal(int64(0)),
"Expected consumer counter to remain constant at %d, but got %d", 0, cnt.Int64(),
)
// Not even reverted upkeeps should be performed. Last keeper for the upkeep should be 0 address
upkeepInfo, err := registry.GetUpkeepInfo(testcontext.Get(t), upkeepID)
g.Expect(err).ShouldNot(gomega.HaveOccurred(), "Registry's getUpkeep shouldn't fail")
g.Expect(upkeepInfo.LastKeeper).Should(gomega.Equal(actions.ZeroAddress.String()), "Last keeper should be zero address")
}, "1m", "1s").Should(gomega.Succeed())
// Set performGas on consumer to be low, so that performUpkeep starts becoming successful
err = consumerPerformance.SetPerformGasToBurn(testcontext.Get(t), big.NewInt(100000))
require.NoError(t, err, "Error setting PerformGasToBurn")
// Upkeep should now start performing
gom.Eventually(func(g gomega.Gomega) error {
cnt, err := consumerPerformance.GetUpkeepCount(testcontext.Get(t))
g.Expect(err).ShouldNot(gomega.HaveOccurred(), "Calling consumer's Counter shouldn't fail")
g.Expect(cnt.Int64()).Should(gomega.BeNumerically(">", int64(0)),
"Expected consumer counter to be greater than 0, but got %d", cnt.Int64(),
)
return nil
}, "1m", "1s").Should(gomega.Succeed())
})`
$DIR/integration-tests/smoke/keeper_test.go: `_, err = actions.CreateKeeperJobsLocal(l, chainlinkNodes, registry, contracts.OCRv2Config{}, fmt.Sprint(chainClient.ChainID))`
$DIR/integration-tests/smoke/keeper_test.go: `t.Cleanup(func() {
actions_seth.GetStalenessReportCleanupFn(t, l, chainClient, sb, registry, registryVersion)()
})`
$DIR/integration-tests/smoke/keeper_test.go: `actions_seth.GetStalenessReportCleanupFn(t, l, chainClient, sb, registry, registryVersion)()`
$DIR/integration-tests/smoke/keeper_test.go: `gom.Consistently(func(g gomega.Gomega) {
// Consumer count should remain at 0
cnt, err := consumerPerformance.GetUpkeepCount(testcontext.Get(t))
g.Expect(err).ShouldNot(gomega.HaveOccurred(), "Calling consumer's Counter shouldn't fail")
g.Expect(cnt.Int64()).Should(
gomega.Equal(int64(0)),
"Expected consumer counter to remain constant at %d, but got %d", 0, cnt.Int64(),
)
// Not even reverted upkeeps should be performed. Last keeper for the upkeep should be 0 address
upkeepInfo, err := registry.GetUpkeepInfo(testcontext.Get(t), upkeepID)
g.Expect(err).ShouldNot(gomega.HaveOccurred(), "Registry's getUpkeep shouldn't fail")
g.Expect(upkeepInfo.LastKeeper).Should(gomega.Equal(actions.ZeroAddress.String()), "Last keeper should be zero address")
}, "1m", "1s").Should(gomega.Succeed())`
$DIR/integration-tests/smoke/keeper_test.go: `g.Expect(err).ShouldNot(gomega.HaveOccurred(), "Calling consumer's Counter shouldn't fail")`
$DIR/integration-tests/smoke/keeper_test.go: `g.Expect(cnt.Int64()).Should(
gomega.Equal(int64(0)),
"Expected consumer counter to remain constant at %d, but got %d", 0, cnt.Int64(),
)`
$DIR/integration-tests/smoke/keeper_test.go: `g.Expect(err).ShouldNot(gomega.HaveOccurred(), "Registry's getUpkeep shouldn't fail")`
$DIR/integration-tests/smoke/keeper_test.go: `g.Expect(upkeepInfo.LastKeeper).Should(gomega.Equal(actions.ZeroAddress.String()), "Last keeper should be zero address")`
$DIR/integration-tests/smoke/keeper_test.go: `err = consumerPerformance.SetPerformGasToBurn(testcontext.Get(t), big.NewInt(100000))`
$DIR/integration-tests/smoke/keeper_test.go: `gom.Eventually(func(g gomega.Gomega) error {
cnt, err := consumerPerformance.GetUpkeepCount(testcontext.Get(t))
g.Expect(err).ShouldNot(gomega.HaveOccurred(), "Calling consumer's Counter shouldn't fail")
g.Expect(cnt.Int64()).Should(gomega.BeNumerically(">", int64(0)),
"Expected consumer counter to be greater than 0, but got %d", cnt.Int64(),
)
return nil
}, "1m", "1s").Should(gomega.Succeed())`
$DIR/integration-tests/smoke/keeper_test.go: `g.Expect(err).ShouldNot(gomega.HaveOccurred(), "Calling consumer's Counter shouldn't fail")`
$DIR/integration-tests/smoke/keeper_test.go: `g.Expect(cnt.Int64()).Should(gomega.BeNumerically(">", int64(0)),
"Expected consumer counter to be greater than 0, but got %d", cnt.Int64(),
)`
$DIR/integration-tests/smoke/keeper_test.go: `t.Run(fmt.Sprintf("registry_1_%d", registryVersion), func(t *testing.T) {
t.Parallel()
l := logging.GetTestLogger(t)
config, err := tc.GetConfig("Smoke", tc.Keeper)
require.NoError(t, err, "Failed to get config")
chainClient, chainlinkNodes, linkToken, _ := setupKeeperTest(l, t, &config)
sb, err := chainClient.Client.BlockNumber(context.Background())
require.NoError(t, err, "Failed to get start block")
registry, _, consumersPerformance, upkeepIDs := actions_seth.DeployPerformanceKeeperContracts(
t,
chainClient,
registryVersion,
keeperDefaultUpkeepsToDeploy,
keeperDefaultUpkeepGasLimit,
linkToken,
&keeperDefaultRegistryConfig,
big.NewInt(keeperDefaultLinkFunds),
10000, // How many blocks this upkeep will be eligible from first upkeep block
5, // Interval of blocks that upkeeps are expected to be performed
100000, // How much gas should be burned on checkUpkeep() calls
4000000, // How much gas should be burned on performUpkeep() calls. Initially set higher than defaultUpkeepGasLimit
)
_, err = actions.CreateKeeperJobsLocal(l, chainlinkNodes, registry, contracts.OCRv2Config{}, fmt.Sprint(chainClient.ChainID))
require.NoError(t, err, "Error creating keeper jobs")
t.Cleanup(func() {
actions_seth.GetStalenessReportCleanupFn(t, l, chainClient, sb, registry, registryVersion)()
})
gom := gomega.NewGomegaWithT(t)
// Initially performGas is set higher than defaultUpkeepGasLimit, so no upkeep should be performed
l.Info().Msg("Waiting for 1m for upkeeps to be performed")
gom.Consistently(func(g gomega.Gomega) {
for i := 0; i < len(upkeepIDs); i++ {
cnt, err := consumersPerformance[i].GetUpkeepCount(testcontext.Get(t))
g.Expect(err).ShouldNot(gomega.HaveOccurred(), "Calling consumer's counter shouldn't fail")
g.Expect(cnt.Int64()).Should(
gomega.Equal(int64(0)),
"Expected consumer counter to remain constant at %d, but got %d", 0, cnt.Int64(),
)
}
}, "1m", "1s").Should(gomega.Succeed())
// Increase gas limit for the upkeep, higher than the performGasBurn
l.Info().Msg("Setting upkeep gas limit higher than performGasBurn")
for i := 0; i < len(upkeepIDs); i++ {
err = registry.SetUpkeepGasLimit(upkeepIDs[i], uint32(4500000))
require.NoError(t, err, "Error setting Upkeep gas limit")
}
// Upkeep should now start performing
l.Info().Msg("Waiting for 1m for upkeeps to be performed")
gom.Eventually(func(g gomega.Gomega) {
for i := 0; i < len(upkeepIDs); i++ {
cnt, err := consumersPerformance[i].GetUpkeepCount(testcontext.Get(t))
g.Expect(err).ShouldNot(gomega.HaveOccurred(), "Calling consumer's counter shouldn't fail")
g.Expect(cnt.Int64()).Should(gomega.BeNumerically(">", int64(0)),
"Expected consumer counter to be greater than 0, but got %d", cnt.Int64(),
)
}
}, "1m", "1s").Should(gomega.Succeed())
// Now increase the checkGasBurn on consumer, upkeep should stop performing
l.Info().Msg("Setting checkGasBurn higher than performGasBurn")
for i := 0; i < len(upkeepIDs); i++ {
err = consumersPerformance[i].SetCheckGasToBurn(testcontext.Get(t), big.NewInt(3000000))
require.NoError(t, err, "Error setting CheckGasToBurn")
}
// Get existing performed count
existingCnts := make(map[*big.Int]*big.Int)
for i := 0; i < len(upkeepIDs); i++ {
existingCnt, err := consumersPerformance[i].GetUpkeepCount(testcontext.Get(t))
existingCnts[upkeepIDs[i]] = existingCnt
require.NoError(t, err, "Error calling consumer's counter")
l.Info().Int64("Upkeep counter", existingCnt.Int64()).Msg("Check Gas Increased")
}
// In most cases count should remain constant, but there might be a straggling perform tx which
// gets committed later. Since every keeper node cannot have more than 1 straggling tx, it
// is sufficient to check that the upkeep count does not increase by more than 6.
l.Info().Msg("Waiting for 3m to make sure no more than 6 upkeeps are performed")
gom.Consistently(func(g gomega.Gomega) {
for i := 0; i < len(upkeepIDs); i++ {
cnt, err := consumersPerformance[i].GetUpkeepCount(testcontext.Get(t))
g.Expect(err).ShouldNot(gomega.HaveOccurred(), "Calling consumer's counter shouldn't fail")
existingCnt := existingCnts[upkeepIDs[i]]
g.Expect(cnt.Int64()).Should(
gomega.BeNumerically("<=", existingCnt.Int64()+numUpkeepsAllowedForStragglingTxs),
"Expected consumer counter to remain constant at %d, but got %d", existingCnt.Int64(), cnt.Int64(),
)
}
}, "3m", "1s").Should(gomega.Succeed())
for i := 0; i < len(upkeepIDs); i++ {
existingCnt, err := consumersPerformance[i].GetUpkeepCount(testcontext.Get(t))
existingCnts[upkeepIDs[i]] = existingCnt
require.NoError(t, err, "Error calling consumer's counter")
l.Info().Int64("Upkeep counter", existingCnt.Int64()).Msg("Upkeep counter when consistently block finished")
}
// Now increase checkGasLimit on registry
highCheckGasLimit := keeperDefaultRegistryConfig
highCheckGasLimit.CheckGasLimit = uint32(5000000)
err = registry.SetConfig(highCheckGasLimit, contracts.OCRv2Config{})
require.NoError(t, err, "Error setting registry config")
// Upkeep should start performing again, and it should get regularly performed
l.Info().Msg("Waiting for 1m for upkeeps to be performed")
gom.Eventually(func(g gomega.Gomega) {
for i := 0; i < len(upkeepIDs); i++ {
cnt, err := consumersPerformance[i].GetUpkeepCount(testcontext.Get(t))
g.Expect(err).ShouldNot(gomega.HaveOccurred(), "Calling consumer's Counter shouldn't fail")
existingCnt := existingCnts[upkeepIDs[i]]
g.Expect(cnt.Int64()).Should(gomega.BeNumerically(">", existingCnt.Int64()),
"Expected consumer counter to be greater than %d, but got %d", existingCnt.Int64(), cnt.Int64(),
)
}
}, "1m", "1s").Should(gomega.Succeed())
})`
$DIR/integration-tests/smoke/keeper_test.go: `_, err = actions.CreateKeeperJobsLocal(l, chainlinkNodes, registry, contracts.OCRv2Config{}, fmt.Sprint(chainClient.ChainID))`
$DIR/integration-tests/smoke/keeper_test.go: `t.Cleanup(func() {
actions_seth.GetStalenessReportCleanupFn(t, l, chainClient, sb, registry, registryVersion)()
})`
$DIR/integration-tests/smoke/keeper_test.go: `actions_seth.GetStalenessReportCleanupFn(t, l, chainClient, sb, registry, registryVersion)()`
$DIR/integration-tests/smoke/keeper_test.go: `l.Info().Msg("Waiting for 1m for upkeeps to be performed")`
$DIR/integration-tests/smoke/keeper_test.go: `gom.Consistently(func(g gomega.Gomega) {
for i := 0; i < len(upkeepIDs); i++ {
cnt, err := consumersPerformance[i].GetUpkeepCount(testcontext.Get(t))
g.Expect(err).ShouldNot(gomega.HaveOccurred(), "Calling consumer's counter shouldn't fail")
g.Expect(cnt.Int64()).Should(
gomega.Equal(int64(0)),
"Expected consumer counter to remain constant at %d, but got %d", 0, cnt.Int64(),
)
}
}, "1m", "1s").Should(gomega.Succeed())`
$DIR/integration-tests/smoke/keeper_test.go: `g.Expect(err).ShouldNot(gomega.HaveOccurred(), "Calling consumer's counter shouldn't fail")`
$DIR/integration-tests/smoke/keeper_test.go: `g.Expect(cnt.Int64()).Should(
gomega.Equal(int64(0)),
"Expected consumer counter to remain constant at %d, but got %d", 0, cnt.Int64(),
)`
$DIR/integration-tests/smoke/keeper_test.go: `l.Info().Msg("Setting upkeep gas limit higher than performGasBurn")`
$DIR/integration-tests/smoke/keeper_test.go: `err = registry.SetUpkeepGasLimit(upkeepIDs[i], uint32(4500000))`
$DIR/integration-tests/smoke/keeper_test.go: `l.Info().Msg("Waiting for 1m for upkeeps to be performed")`
$DIR/integration-tests/smoke/keeper_test.go: `gom.Eventually(func(g gomega.Gomega) {
for i := 0; i < len(upkeepIDs); i++ {
cnt, err := consumersPerformance[i].GetUpkeepCount(testcontext.Get(t))
g.Expect(err).ShouldNot(gomega.HaveOccurred(), "Calling consumer's counter shouldn't fail")
g.Expect(cnt.Int64()).Should(gomega.BeNumerically(">", int64(0)),
"Expected consumer counter to be greater than 0, but got %d", cnt.Int64(),
)
}
}, "1m", "1s").Should(gomega.Succeed())`
$DIR/integration-tests/smoke/keeper_test.go: `g.Expect(err).ShouldNot(gomega.HaveOccurred(), "Calling consumer's counter shouldn't fail")`
$DIR/integration-tests/smoke/keeper_test.go: `g.Expect(cnt.Int64()).Should(gomega.BeNumerically(">", int64(0)),
"Expected consumer counter to be greater than 0, but got %d", cnt.Int64(),
)`
$DIR/integration-tests/smoke/keeper_test.go: `l.Info().Msg("Setting checkGasBurn higher than performGasBurn")`
$DIR/integration-tests/smoke/keeper_test.go: `err = consumersPerformance[i].SetCheckGasToBurn(testcontext.Get(t), big.NewInt(3000000))`
$DIR/integration-tests/smoke/keeper_test.go: `existingCnts[upkeepIDs[i]] = existingCnt`
$DIR/integration-tests/smoke/keeper_test.go: `l.Info().Int64("Upkeep counter", existingCnt.Int64()).Msg("Check Gas Increased")`
$DIR/integration-tests/smoke/keeper_test.go: `l.Info().Msg("Waiting for 3m to make sure no more than 6 upkeeps are performed")`
$DIR/integration-tests/smoke/keeper_test.go: `gom.Consistently(func(g gomega.Gomega) {
for i := 0; i < len(upkeepIDs); i++ {
cnt, err := consumersPerformance[i].GetUpkeepCount(testcontext.Get(t))
g.Expect(err).ShouldNot(gomega.HaveOccurred(), "Calling consumer's counter shouldn't fail")
existingCnt := existingCnts[upkeepIDs[i]]
g.Expect(cnt.Int64()).Should(
gomega.BeNumerically("<=", existingCnt.Int64()+numUpkeepsAllowedForStragglingTxs),
"Expected consumer counter to remain constant at %d, but got %d", existingCnt.Int64(), cnt.Int64(),
)
}
}, "3m", "1s").Should(gomega.Succeed())`
$DIR/integration-tests/smoke/keeper_test.go: `g.Expect(err).ShouldNot(gomega.HaveOccurred(), "Calling consumer's counter shouldn't fail")`
$DIR/integration-tests/smoke/keeper_test.go: `g.Expect(cnt.Int64()).Should(
gomega.BeNumerically("<=", existingCnt.Int64()+numUpkeepsAllowedForStragglingTxs),
"Expected consumer counter to remain constant at %d, but got %d", existingCnt.Int64(), cnt.Int64(),
)`
$DIR/integration-tests/smoke/keeper_test.go: `existingCnts[upkeepIDs[i]] = existingCnt`
$DIR/integration-tests/smoke/keeper_test.go: `l.Info().Int64("Upkeep counter", existingCnt.Int64()).Msg("Upkeep counter when consistently block finished")`
$DIR/integration-tests/smoke/keeper_test.go: `highCheckGasLimit.CheckGasLimit = uint32(5000000)`
$DIR/integration-tests/smoke/keeper_test.go: `err = registry.SetConfig(highCheckGasLimit, contracts.OCRv2Config{})`
$DIR/integration-tests/smoke/keeper_test.go: `l.Info().Msg("Waiting for 1m for upkeeps to be performed")`
$DIR/integration-tests/smoke/keeper_test.go: `gom.Eventually(func(g gomega.Gomega) {
for i := 0; i < len(upkeepIDs); i++ {
cnt, err := consumersPerformance[i].GetUpkeepCount(testcontext.Get(t))
g.Expect(err).ShouldNot(gomega.HaveOccurred(), "Calling consumer's Counter shouldn't fail")
existingCnt := existingCnts[upkeepIDs[i]]
g.Expect(cnt.Int64()).Should(gomega.BeNumerically(">", existingCnt.Int64()),
"Expected consumer counter to be greater than %d, but got %d", existingCnt.Int64(), cnt.Int64(),
)
}
}, "1m", "1s").Should(gomega.Succeed())`
$DIR/integration-tests/smoke/keeper_test.go: `g.Expect(err).ShouldNot(gomega.HaveOccurred(), "Calling consumer's Counter shouldn't fail")`
$DIR/integration-tests/smoke/keeper_test.go: `g.Expect(cnt.Int64()).Should(gomega.BeNumerically(">", existingCnt.Int64()),
"Expected consumer counter to be greater than %d, but got %d", existingCnt.Int64(), cnt.Int64(),
)`
$DIR/integration-tests/smoke/keeper_test.go: `t.Run(fmt.Sprintf("registry_1_%d", registryVersion), func(t *testing.T) {
t.Parallel()
l := logging.GetTestLogger(t)
config, err := tc.GetConfig("Smoke", tc.Keeper)
require.NoError(t, err, "Failed to get config")
chainClient, chainlinkNodes, linkToken, _ := setupKeeperTest(l, t, &config)
sb, err := chainClient.Client.BlockNumber(context.Background())
require.NoError(t, err, "Failed to get start block")
registry, registrar, consumers, upkeepIDs := actions_seth.DeployKeeperContracts(
t,
registryVersion,
keeperDefaultRegistryConfig,
keeperDefaultUpkeepsToDeploy,
keeperDefaultUpkeepGasLimit,
linkToken,
chainClient,
big.NewInt(keeperDefaultLinkFunds),
)
_, err = actions.CreateKeeperJobsLocal(l, chainlinkNodes, registry, contracts.OCRv2Config{}, fmt.Sprint(chainClient.ChainID))
require.NoError(t, err, "Error creating keeper jobs")
t.Cleanup(func() {
actions_seth.GetStalenessReportCleanupFn(t, l, chainClient, sb, registry, registryVersion)()
})
var initialCounters = make([]*big.Int, len(upkeepIDs))
gom := gomega.NewGomegaWithT(t)
// Observe that the upkeeps which are initially registered are performing and
// store the value of their initial counters in order to compare later on that the value increased.
gom.Eventually(func(g gomega.Gomega) error {
for i := 0; i < len(upkeepIDs); i++ {
counter, err := consumers[i].Counter(testcontext.Get(t))
initialCounters[i] = counter
g.Expect(err).ShouldNot(gomega.HaveOccurred(), "Failed to retrieve consumer counter"+
" for upkeep at index "+strconv.Itoa(i))
g.Expect(counter.Int64()).Should(gomega.BeNumerically(">", int64(0)),
"Expected consumer counter to be greater than 0, but got %d", counter.Int64())
l.Info().
Int64("Upkeep counter", counter.Int64()).
Int("Upkeep ID", i).
Msg("Number of upkeeps performed")
}
return nil
}, "1m", "1s").Should(gomega.Succeed())
newConsumers, _ := actions_seth.RegisterNewUpkeeps(t, chainClient, linkToken,
registry, registrar, keeperDefaultUpkeepGasLimit, 1)
// We know that newConsumers has size 1, so we can just use the newly registered upkeep.
newUpkeep := newConsumers[0]
// Test that the newly registered upkeep is also performing.
gom.Eventually(func(g gomega.Gomega) error {
counter, err := newUpkeep.Counter(testcontext.Get(t))
g.Expect(err).ShouldNot(gomega.HaveOccurred(), "Calling newly deployed upkeep's counter shouldn't fail")
g.Expect(counter.Int64()).Should(gomega.BeNumerically(">", int64(0)),
"Expected newly registered upkeep's counter to be greater than 0, but got %d", counter.Int64())
l.Info().Msg("Newly registered upkeeps performed " + strconv.Itoa(int(counter.Int64())) + " times")
return nil
}, "1m", "1s").Should(gomega.Succeed())
gom.Eventually(func(g gomega.Gomega) error {
for i := 0; i < len(upkeepIDs); i++ {
currentCounter, err := consumers[i].Counter(testcontext.Get(t))
g.Expect(err).ShouldNot(gomega.HaveOccurred(), "Calling consumer's counter shouldn't fail")
l.Info().
Int("Upkeep ID", i).
Int64("Upkeep counter", currentCounter.Int64()).
Int64("initial counter", initialCounters[i].Int64()).
Msg("Number of upkeeps performed")
g.Expect(currentCounter.Int64()).Should(gomega.BeNumerically(">", initialCounters[i].Int64()),
"Expected counter to have increased from initial value of %s, but got %s",
initialCounters[i], currentCounter)
}
return nil
}, "1m", "1s").Should(gomega.Succeed())
})`
$DIR/integration-tests/smoke/keeper_test.go: `_, err = actions.CreateKeeperJobsLocal(l, chainlinkNodes, registry, contracts.OCRv2Config{}, fmt.Sprint(chainClient.ChainID))`
$DIR/integration-tests/smoke/keeper_test.go: `t.Cleanup(func() {
actions_seth.GetStalenessReportCleanupFn(t, l, chainClient, sb, registry, registryVersion)()
})`
$DIR/integration-tests/smoke/keeper_test.go: `actions_seth.GetStalenessReportCleanupFn(t, l, chainClient, sb, registry, registryVersion)()`
$DIR/integration-tests/smoke/keeper_test.go: `gom.Eventually(func(g gomega.Gomega) error {
for i := 0; i < len(upkeepIDs); i++ {
counter, err := consumers[i].Counter(testcontext.Get(t))
initialCounters[i] = counter
g.Expect(err).ShouldNot(gomega.HaveOccurred(), "Failed to retrieve consumer counter"+
" for upkeep at index "+strconv.Itoa(i))
g.Expect(counter.Int64()).Should(gomega.BeNumerically(">", int64(0)),
"Expected consumer counter to be greater than 0, but got %d", counter.Int64())
l.Info().
Int64("Upkeep counter", counter.Int64()).
Int("Upkeep ID", i).
Msg("Number of upkeeps performed")
}
return nil
}, "1m", "1s").Should(gomega.Succeed())`
$DIR/integration-tests/smoke/keeper_test.go: `initialCounters[i] = counter`
$DIR/integration-tests/smoke/keeper_test.go: `g.Expect(err).ShouldNot(gomega.HaveOccurred(), "Failed to retrieve consumer counter"+
" for upkeep at index "+strconv.Itoa(i))`
$DIR/integration-tests/smoke/keeper_test.go: `g.Expect(counter.Int64()).Should(gomega.BeNumerically(">", int64(0)),
"Expected consumer counter to be greater than 0, but got %d", counter.Int64())`
$DIR/integration-tests/smoke/keeper_test.go: `l.Info().
Int64("Upkeep counter", counter.Int64()).
Int("Upkeep ID", i).
Msg("Number of upkeeps performed")`
$DIR/integration-tests/smoke/keeper_test.go: `gom.Eventually(func(g gomega.Gomega) error {
counter, err := newUpkeep.Counter(testcontext.Get(t))
g.Expect(err).ShouldNot(gomega.HaveOccurred(), "Calling newly deployed upkeep's counter shouldn't fail")
g.Expect(counter.Int64()).Should(gomega.BeNumerically(">", int64(0)),
"Expected newly registered upkeep's counter to be greater than 0, but got %d", counter.Int64())
l.Info().Msg("Newly registered upkeeps performed " + strconv.Itoa(int(counter.Int64())) + " times")
return nil
}, "1m", "1s").Should(gomega.Succeed())`
$DIR/integration-tests/smoke/keeper_test.go: `g.Expect(err).ShouldNot(gomega.HaveOccurred(), "Calling newly deployed upkeep's counter shouldn't fail")`
$DIR/integration-tests/smoke/keeper_test.go: `g.Expect(counter.Int64()).Should(gomega.BeNumerically(">", int64(0)),
"Expected newly registered upkeep's counter to be greater than 0, but got %d", counter.Int64())`
$DIR/integration-tests/smoke/keeper_test.go: `l.Info().Msg("Newly registered upkeeps performed " + strconv.Itoa(int(counter.Int64())) + " times")`
$DIR/integration-tests/smoke/keeper_test.go: `gom.Eventually(func(g gomega.Gomega) error {
for i := 0; i < len(upkeepIDs); i++ {
currentCounter, err := consumers[i].Counter(testcontext.Get(t))
g.Expect(err).ShouldNot(gomega.HaveOccurred(), "Calling consumer's counter shouldn't fail")
l.Info().
Int("Upkeep ID", i).
Int64("Upkeep counter", currentCounter.Int64()).
Int64("initial counter", initialCounters[i].Int64()).
Msg("Number of upkeeps performed")
g.Expect(currentCounter.Int64()).Should(gomega.BeNumerically(">", initialCounters[i].Int64()),
"Expected counter to have increased from initial value of %s, but got %s",
initialCounters[i], currentCounter)
}
return nil
}, "1m", "1s").Should(gomega.Succeed())`
$DIR/integration-tests/smoke/keeper_test.go: `g.Expect(err).ShouldNot(gomega.HaveOccurred(), "Calling consumer's counter shouldn't fail")`
$DIR/integration-tests/smoke/keeper_test.go: `l.Info().
Int("Upkeep ID", i).
Int64("Upkeep counter", currentCounter.Int64()).
Int64("initial counter", initialCounters[i].Int64()).
Msg("Number of upkeeps performed")`
$DIR/integration-tests/smoke/keeper_test.go: `g.Expect(currentCounter.Int64()).Should(gomega.BeNumerically(">", initialCounters[i].Int64()),
"Expected counter to have increased from initial value of %s, but got %s",
initialCounters[i], currentCounter)`
$DIR/integration-tests/smoke/keeper_test.go: `t.Run(fmt.Sprintf("registry_1_%d", registryVersion), func(t *testing.T) {
t.Parallel()
l := logging.GetTestLogger(t)
config, err := tc.GetConfig("Smoke", tc.Keeper)
require.NoError(t, err, "Failed to get config")
chainClient, chainlinkNodes, linkToken, _ := setupKeeperTest(l, t, &config)
sb, err := chainClient.Client.BlockNumber(context.Background())
require.NoError(t, err, "Failed to get start block")
registry, _, consumers, upkeepIDs := actions_seth.DeployKeeperContracts(
t,
registryVersion,
keeperDefaultRegistryConfig,
keeperDefaultUpkeepsToDeploy,
keeperDefaultUpkeepGasLimit,
linkToken,
chainClient,
big.NewInt(1),
)
_, err = actions.CreateKeeperJobsLocal(l, chainlinkNodes, registry, contracts.OCRv2Config{}, fmt.Sprint(chainClient.ChainID))
require.NoError(t, err, "Error creating keeper jobs")
t.Cleanup(func() {
actions_seth.GetStalenessReportCleanupFn(t, l, chainClient, sb, registry, registryVersion)()
})
// Since the upkeep is currently underfunded, check that it doesn't get executed
gom := gomega.NewGomegaWithT(t)
l.Info().Msg("Waiting for 1m to make sure no upkeeps are performed")
gom.Consistently(func(g gomega.Gomega) {
for i := 0; i < len(upkeepIDs); i++ {
counter, err := consumers[i].Counter(testcontext.Get(t))
g.Expect(err).ShouldNot(gomega.HaveOccurred(), "Calling consumer's counter shouldn't fail")
g.Expect(counter.Int64()).Should(gomega.Equal(int64(0)),
"Expected consumer counter to remain zero, but got %d", counter.Int64())
}
}, "1m", "1s").Should(gomega.Succeed())
// Grant permission to the registry to fund the upkeep
err = linkToken.Approve(registry.Address(), big.NewInt(0).Mul(big.NewInt(9e18), big.NewInt(int64(len(upkeepIDs)))))
require.NoError(t, err, "Error approving permissions for registry")
// Add funds to the upkeep whose ID we know from above
l.Info().Msg("Adding funds to upkeeps")
for i := 0; i < len(upkeepIDs); i++ {
err = registry.AddUpkeepFunds(upkeepIDs[i], big.NewInt(9e18))
require.NoError(t, err, "Error funding upkeep")
}
// Now the new upkeep should be performing because we added enough funds
gom.Eventually(func(g gomega.Gomega) {
for i := 0; i < len(upkeepIDs); i++ {
counter, err := consumers[i].Counter(testcontext.Get(t))
g.Expect(err).ShouldNot(gomega.HaveOccurred(), "Calling consumer's counter shouldn't fail")
g.Expect(counter.Int64()).Should(gomega.BeNumerically(">", int64(0)),
"Expected newly registered upkeep's counter to be greater than 0, but got %d", counter.Int64())
}
}, "1m", "1s").Should(gomega.Succeed())
})`
$DIR/integration-tests/smoke/keeper_test.go: `_, err = actions.CreateKeeperJobsLocal(l, chainlinkNodes, registry, contracts.OCRv2Config{}, fmt.Sprint(chainClient.ChainID))`
$DIR/integration-tests/smoke/keeper_test.go: `t.Cleanup(func() {
actions_seth.GetStalenessReportCleanupFn(t, l, chainClient, sb, registry, registryVersion)()
})`
$DIR/integration-tests/smoke/keeper_test.go: `actions_seth.GetStalenessReportCleanupFn(t, l, chainClient, sb, registry, registryVersion)()`
$DIR/integration-tests/smoke/keeper_test.go: `l.Info().Msg("Waiting for 1m to make sure no upkeeps are performed")`
$DIR/integration-tests/smoke/keeper_test.go: `gom.Consistently(func(g gomega.Gomega) {
for i := 0; i < len(upkeepIDs); i++ {
counter, err := consumers[i].Counter(testcontext.Get(t))
g.Expect(err).ShouldNot(gomega.HaveOccurred(), "Calling consumer's counter shouldn't fail")
g.Expect(counter.Int64()).Should(gomega.Equal(int64(0)),
"Expected consumer counter to remain zero, but got %d", counter.Int64())
}
}, "1m", "1s").Should(gomega.Succeed())`
$DIR/integration-tests/smoke/keeper_test.go: `g.Expect(err).ShouldNot(gomega.HaveOccurred(), "Calling consumer's counter shouldn't fail")`
$DIR/integration-tests/smoke/keeper_test.go: `g.Expect(counter.Int64()).Should(gomega.Equal(int64(0)),
"Expected consumer counter to remain zero, but got %d", counter.Int64())`
$DIR/integration-tests/smoke/keeper_test.go: `err = linkToken.Approve(registry.Address(), big.NewInt(0).Mul(big.NewInt(9e18), big.NewInt(int64(len(upkeepIDs)))))`
$DIR/integration-tests/smoke/keeper_test.go: `l.Info().Msg("Adding funds to upkeeps")`
$DIR/integration-tests/smoke/keeper_test.go: `err = registry.AddUpkeepFunds(upkeepIDs[i], big.NewInt(9e18))`
$DIR/integration-tests/smoke/keeper_test.go: `gom.Eventually(func(g gomega.Gomega) {
for i := 0; i < len(upkeepIDs); i++ {
counter, err := consumers[i].Counter(testcontext.Get(t))
g.Expect(err).ShouldNot(gomega.HaveOccurred(), "Calling consumer's counter shouldn't fail")
g.Expect(counter.Int64()).Should(gomega.BeNumerically(">", int64(0)),
"Expected newly registered upkeep's counter to be greater than 0, but got %d", counter.Int64())
}
}, "1m", "1s").Should(gomega.Succeed())`
$DIR/integration-tests/smoke/keeper_test.go: `g.Expect(err).ShouldNot(gomega.HaveOccurred(), "Calling consumer's counter shouldn't fail")`
$DIR/integration-tests/smoke/keeper_test.go: `g.Expect(counter.Int64()).Should(gomega.BeNumerically(">", int64(0)),
"Expected newly registered upkeep's counter to be greater than 0, but got %d", counter.Int64())`
$DIR/integration-tests/smoke/keeper_test.go: `t.Run(fmt.Sprintf("registry_1_%d", registryVersion), func(t *testing.T) {
t.Parallel()
l := logging.GetTestLogger(t)
config, err := tc.GetConfig("Smoke", tc.Keeper)
require.NoError(t, err, "Failed to get config")
chainClient, chainlinkNodes, linkToken, _ := setupKeeperTest(l, t, &config)
sb, err := chainClient.Client.BlockNumber(context.Background())
require.NoError(t, err, "Failed to get start block")
registry, _, consumers, upkeepIDs := actions_seth.DeployKeeperContracts(
t,
registryVersion,
keeperDefaultRegistryConfig,
keeperDefaultUpkeepsToDeploy,
keeperDefaultUpkeepGasLimit,
linkToken,
chainClient,
big.NewInt(keeperDefaultLinkFunds),
)
_, err = actions.CreateKeeperJobsLocal(l, chainlinkNodes, registry, contracts.OCRv2Config{}, fmt.Sprint(chainClient.ChainID))
require.NoError(t, err, "Error creating keeper jobs")
t.Cleanup(func() {
actions_seth.GetStalenessReportCleanupFn(t, l, chainClient, sb, registry, registryVersion)()
})
var initialCounters = make([]*big.Int, len(upkeepIDs))
gom := gomega.NewGomegaWithT(t)
// Make sure the upkeeps are running before we remove a keeper
gom.Eventually(func(g gomega.Gomega) error {
for upkeepID := 0; upkeepID < len(upkeepIDs); upkeepID++ {
counter, err := consumers[upkeepID].Counter(testcontext.Get(t))
initialCounters[upkeepID] = counter
g.Expect(err).ShouldNot(gomega.HaveOccurred(), "Failed to retrieve consumer counter"+
" for upkeep with ID "+strconv.Itoa(upkeepID))
g.Expect(counter.Cmp(big.NewInt(0)) == 1, "Expected consumer counter to be greater than 0, but got %s", counter)
}
return nil
}, "1m", "1s").Should(gomega.Succeed())
keepers, err := registry.GetKeeperList(testcontext.Get(t))
require.NoError(t, err, "Error getting list of Keepers")
// Remove the first keeper from the list
require.GreaterOrEqual(t, len(keepers), 2, "Expected there to be at least 2 keepers")
newKeeperList := keepers[1:]
// Construct the addresses of the payees required by the SetKeepers function
payees := make([]string, len(keepers)-1)
for i := 0; i < len(payees); i++ {
payees[i], err = chainlinkNodes[0].PrimaryEthAddress()
require.NoError(t, err, "Error building payee list")
}
err = registry.SetKeepers(newKeeperList, payees, contracts.OCRv2Config{})
require.NoError(t, err, "Error setting new list of Keepers")
l.Info().Msg("Successfully removed keeper at address " + keepers[0] + " from the list of Keepers")
// The upkeeps should still perform and their counters should have increased compared to the first check
gom.Eventually(func(g gomega.Gomega) error {
for i := 0; i < len(upkeepIDs); i++ {
counter, err := consumers[i].Counter(testcontext.Get(t))
g.Expect(err).ShouldNot(gomega.HaveOccurred(), "Failed to retrieve consumer counter for upkeep at index %d", i)
g.Expect(counter.Cmp(initialCounters[i]) == 1, "Expected consumer counter to be greater "+
"than initial counter which was %s, but got %s", initialCounters[i], counter)
}
return nil
}, "1m", "1s").Should(gomega.Succeed())
})`
$DIR/integration-tests/smoke/keeper_test.go: `_, err = actions.CreateKeeperJobsLocal(l, chainlinkNodes, registry, contracts.OCRv2Config{}, fmt.Sprint(chainClient.ChainID))`
$DIR/integration-tests/smoke/keeper_test.go: `t.Cleanup(func() {
actions_seth.GetStalenessReportCleanupFn(t, l, chainClient, sb, registry, registryVersion)()
})`
$DIR/integration-tests/smoke/keeper_test.go: `actions_seth.GetStalenessReportCleanupFn(t, l, chainClient, sb, registry, registryVersion)()`
$DIR/integration-tests/smoke/keeper_test.go: `gom.Eventually(func(g gomega.Gomega) error {
for upkeepID := 0; upkeepID < len(upkeepIDs); upkeepID++ {
counter, err := consumers[upkeepID].Counter(testcontext.Get(t))
initialCounters[upkeepID] = counter
g.Expect(err).ShouldNot(gomega.HaveOccurred(), "Failed to retrieve consumer counter"+
" for upkeep with ID "+strconv.Itoa(upkeepID))
g.Expect(counter.Cmp(big.NewInt(0)) == 1, "Expected consumer counter to be greater than 0, but got %s", counter)
}
return nil
}, "1m", "1s").Should(gomega.Succeed())`
$DIR/integration-tests/smoke/keeper_test.go: `initialCounters[upkeepID] = counter`
$DIR/integration-tests/smoke/keeper_test.go: `g.Expect(err).ShouldNot(gomega.HaveOccurred(), "Failed to retrieve consumer counter"+
" for upkeep with ID "+strconv.Itoa(upkeepID))`
$DIR/integration-tests/smoke/keeper_test.go: `g.Expect(counter.Cmp(big.NewInt(0)) == 1, "Expected consumer counter to be greater than 0, but got %s", counter)`
$DIR/integration-tests/smoke/keeper_test.go: `payees[i], err = chainlinkNodes[0].PrimaryEthAddress()`
$DIR/integration-tests/smoke/keeper_test.go: `err = registry.SetKeepers(newKeeperList, payees, contracts.OCRv2Config{})`
$DIR/integration-tests/smoke/keeper_test.go: `l.Info().Msg("Successfully removed keeper at address " + keepers[0] + " from the list of Keepers")`
$DIR/integration-tests/smoke/keeper_test.go: `gom.Eventually(func(g gomega.Gomega) error {
for i := 0; i < len(upkeepIDs); i++ {
counter, err := consumers[i].Counter(testcontext.Get(t))
g.Expect(err).ShouldNot(gomega.HaveOccurred(), "Failed to retrieve consumer counter for upkeep at index %d", i)
g.Expect(counter.Cmp(initialCounters[i]) == 1, "Expected consumer counter to be greater "+
"than initial counter which was %s, but got %s", initialCounters[i], counter)
}
return nil
}, "1m", "1s").Should(gomega.Succeed())`
$DIR/integration-tests/smoke/keeper_test.go: `g.Expect(err).ShouldNot(gomega.HaveOccurred(), "Failed to retrieve consumer counter for upkeep at index %d", i)`
$DIR/integration-tests/smoke/keeper_test.go: `g.Expect(counter.Cmp(initialCounters[i]) == 1, "Expected consumer counter to be greater "+
"than initial counter which was %s, but got %s", initialCounters[i], counter)`
$DIR/integration-tests/smoke/keeper_test.go: `t.Run(fmt.Sprintf("registry_1_%d", registryVersion), func(t *testing.T) {
t.Parallel()
l := logging.GetTestLogger(t)
config, err := tc.GetConfig("Smoke", tc.Keeper)
require.NoError(t, err, "Failed to get config")
chainClient, chainlinkNodes, linkToken, _ := setupKeeperTest(l, t, &config)
sb, err := chainClient.Client.BlockNumber(context.Background())
require.NoError(t, err, "Failed to get start block")
registry, _, consumers, upkeepIDs := actions_seth.DeployKeeperContracts(
t,
registryVersion,
keeperDefaultRegistryConfig,
keeperDefaultUpkeepsToDeploy,
keeperDefaultUpkeepGasLimit,
linkToken,
chainClient,
big.NewInt(keeperDefaultLinkFunds),
)
gom := gomega.NewGomegaWithT(t)
_, err = actions.CreateKeeperJobsLocal(l, chainlinkNodes, registry, contracts.OCRv2Config{}, fmt.Sprint(chainClient.ChainID))
require.NoError(t, err, "Error creating keeper jobs")
t.Cleanup(func() {
actions_seth.GetStalenessReportCleanupFn(t, l, chainClient, sb, registry, registryVersion)()
})
// Observe that the upkeeps which are initially registered are performing
gom.Eventually(func(g gomega.Gomega) error {
for i := 0; i < len(upkeepIDs); i++ {
counter, err := consumers[i].Counter(testcontext.Get(t))
g.Expect(err).ShouldNot(gomega.HaveOccurred(), "Failed to retrieve consumer counter for upkeep at index %d", i)
g.Expect(counter.Int64()).Should(gomega.BeNumerically(">", int64(0)),
"Expected consumer counter to be greater than 0, but got %d")
}
return nil
}, "1m", "1s").Should(gomega.Succeed())
// Pause the registry
err = registry.Pause()
require.NoError(t, err, "Error pausing the registry")
// Store how many times each upkeep performed once the registry was successfully paused
var countersAfterPause = make([]*big.Int, len(upkeepIDs))
for i := 0; i < len(upkeepIDs); i++ {
countersAfterPause[i], err = consumers[i].Counter(testcontext.Get(t))
require.NoError(t, err, "Error retrieving consumer at index %d", i)
}
// After we paused the registry, the counters of all the upkeeps should stay constant
// because they are no longer getting serviced
gom.Consistently(func(g gomega.Gomega) {
for i := 0; i < len(upkeepIDs); i++ {
latestCounter, err := consumers[i].Counter(testcontext.Get(t))
require.NoError(t, err, "Error retrieving consumer contract at index %d", i)
g.Expect(latestCounter.Int64()).Should(gomega.Equal(countersAfterPause[i].Int64()),
"Expected consumer counter to remain constant at %d, but got %d",
countersAfterPause[i].Int64(), latestCounter.Int64())
}
}, "1m", "1s").Should(gomega.Succeed())
})`
$DIR/integration-tests/smoke/keeper_test.go: `_, err = actions.CreateKeeperJobsLocal(l, chainlinkNodes, registry, contracts.OCRv2Config{}, fmt.Sprint(chainClient.ChainID))`
$DIR/integration-tests/smoke/keeper_test.go: `t.Cleanup(func() {
actions_seth.GetStalenessReportCleanupFn(t, l, chainClient, sb, registry, registryVersion)()
})`
$DIR/integration-tests/smoke/keeper_test.go: `actions_seth.GetStalenessReportCleanupFn(t, l, chainClient, sb, registry, registryVersion)()`
$DIR/integration-tests/smoke/keeper_test.go: `gom.Eventually(func(g gomega.Gomega) error {
for i := 0; i < len(upkeepIDs); i++ {
counter, err := consumers[i].Counter(testcontext.Get(t))
g.Expect(err).ShouldNot(gomega.HaveOccurred(), "Failed to retrieve consumer counter for upkeep at index %d", i)
g.Expect(counter.Int64()).Should(gomega.BeNumerically(">", int64(0)),
"Expected consumer counter to be greater than 0, but got %d")
}
return nil
}, "1m", "1s").Should(gomega.Succeed())`
$DIR/integration-tests/smoke/keeper_test.go: `g.Expect(err).ShouldNot(gomega.HaveOccurred(), "Failed to retrieve consumer counter for upkeep at index %d", i)`
$DIR/integration-tests/smoke/keeper_test.go: `g.Expect(counter.Int64()).Should(gomega.BeNumerically(">", int64(0)),
"Expected consumer counter to be greater than 0, but got %d")`
$DIR/integration-tests/smoke/keeper_test.go: `err = registry.Pause()`
$DIR/integration-tests/smoke/keeper_test.go: `countersAfterPause[i], err = consumers[i].Counter(testcontext.Get(t))`
$DIR/integration-tests/smoke/keeper_test.go: `gom.Consistently(func(g gomega.Gomega) {
for i := 0; i < len(upkeepIDs); i++ {
latestCounter, err := consumers[i].Counter(testcontext.Get(t))
require.NoError(t, err, "Error retrieving consumer contract at index %d", i)
g.Expect(latestCounter.Int64()).Should(gomega.Equal(countersAfterPause[i].Int64()),
"Expected consumer counter to remain constant at %d, but got %d",
countersAfterPause[i].Int64(), latestCounter.Int64())
}
}, "1m", "1s").Should(gomega.Succeed())`
$DIR/integration-tests/smoke/keeper_test.go: `g.Expect(latestCounter.Int64()).Should(gomega.Equal(countersAfterPause[i].Int64()),
"Expected consumer counter to remain constant at %d, but got %d",
countersAfterPause[i].Int64(), latestCounter.Int64())`
$DIR/integration-tests/smoke/keeper_test.go: `_, err = actions.CreateKeeperJobsLocal(l, chainlinkNodes, registry, contracts.OCRv2Config{}, fmt.Sprint(chainClient.ChainID))`
$DIR/integration-tests/smoke/keeper_test.go: `t.Cleanup(func() {
actions_seth.GetStalenessReportCleanupFn(t, l, chainClient, sb, registry, ethereum.RegistryVersion_1_2)()
})`
$DIR/integration-tests/smoke/keeper_test.go: `actions_seth.GetStalenessReportCleanupFn(t, l, chainClient, sb, registry, ethereum.RegistryVersion_1_2)()`
$DIR/integration-tests/smoke/keeper_test.go: `_, err = actions.CreateKeeperJobsLocal(l, chainlinkNodes, secondRegistry, contracts.OCRv2Config{}, fmt.Sprint(chainClient.ChainID))`
$DIR/integration-tests/smoke/keeper_test.go: `err = registry.SetMigrationPermissions(common.HexToAddress(secondRegistry.Address()), 3)`
$DIR/integration-tests/smoke/keeper_test.go: `err = secondRegistry.SetMigrationPermissions(common.HexToAddress(registry.Address()), 3)`
$DIR/integration-tests/smoke/keeper_test.go: `l.Info().Msg("Waiting for 1m for upkeeps to be performed before migration")`
$DIR/integration-tests/smoke/keeper_test.go: `gom.Eventually(func(g gomega.Gomega) {
for i := 0; i < len(upkeepIDs); i++ {
counterBeforeMigration, err := consumers[i].Counter(testcontext.Get(t))
g.Expect(err).ShouldNot(gomega.HaveOccurred(), "Calling consumer's counter shouldn't fail")
g.Expect(counterBeforeMigration.Int64()).Should(gomega.BeNumerically(">", int64(0)),
"Expected consumer counter to be greater than 0, but got %s", counterBeforeMigration)
}
}, "1m", "1s").Should(gomega.Succeed())`
$DIR/integration-tests/smoke/keeper_test.go: `g.Expect(err).ShouldNot(gomega.HaveOccurred(), "Calling consumer's counter shouldn't fail")`
$DIR/integration-tests/smoke/keeper_test.go: `g.Expect(counterBeforeMigration.Int64()).Should(gomega.BeNumerically(">", int64(0)),
"Expected consumer counter to be greater than 0, but got %s", counterBeforeMigration)`
$DIR/integration-tests/smoke/keeper_test.go: `err = registry.Migrate([]*big.Int{upkeepIDs[i]}, common.HexToAddress(secondRegistry.Address()))`
$DIR/integration-tests/smoke/keeper_test.go: `err = registry.Pause()`
$DIR/integration-tests/smoke/keeper_test.go: `counterAfterMigrationPerUpkeep[upkeepIDs[i]] = counterAfterMigration`
$DIR/integration-tests/smoke/keeper_test.go: `l.Info().Msg("Waiting for 1m for upkeeps to be performed after migration")`
$DIR/integration-tests/smoke/keeper_test.go: `g.Expect(err).ShouldNot(gomega.HaveOccurred(), "Calling consumer's counter shouldn't fail")`
$DIR/integration-tests/smoke/keeper_test.go: `g.Expect(currentCounter.Int64()).Should(gomega.BeNumerically(">", counterAfterMigration.Int64()),
"Expected counter to have increased, but stayed constant at %s", counterAfterMigration)`
$DIR/integration-tests/smoke/keeper_test.go: `t.Run(fmt.Sprintf("registry_1_%d", registryVersion), func(t *testing.T) {
t.Parallel()
l := logging.GetTestLogger(t)
config, err := tc.GetConfig("Smoke", tc.Keeper)
require.NoError(t, err, "Failed to get config")
chainClient, chainlinkNodes, linkToken, _ := setupKeeperTest(l, t, &config)
sb, err := chainClient.Client.BlockNumber(context.Background())
require.NoError(t, err, "Failed to get start block")
registry, _, consumers, upkeepIDs := actions_seth.DeployKeeperContracts(
t,
registryVersion,
lowBCPTRegistryConfig,
keeperDefaultUpkeepsToDeploy,
keeperDefaultUpkeepGasLimit,
linkToken,
chainClient,
big.NewInt(keeperDefaultLinkFunds),
)
jobs, err := actions.CreateKeeperJobsLocal(l, chainlinkNodes, registry, contracts.OCRv2Config{}, fmt.Sprint(chainClient.ChainID))
require.NoError(t, err, "Error creating keeper jobs")
t.Cleanup(func() {
actions_seth.GetStalenessReportCleanupFn(t, l, chainClient, sb, registry, registryVersion)()
})
var initialCounters = make([]*big.Int, len(upkeepIDs))
gom := gomega.NewGomegaWithT(t)
// Watch upkeeps being performed and store their counters in order to compare them later in the test
gom.Eventually(func(g gomega.Gomega) error {
for i := 0; i < len(upkeepIDs); i++ {
counter, err := consumers[i].Counter(testcontext.Get(t))
initialCounters[i] = counter
g.Expect(err).ShouldNot(gomega.HaveOccurred(), "Failed to retrieve consumer counter for upkeep at index %d", i)
g.Expect(counter.Int64()).Should(gomega.BeNumerically(">", int64(0)),
"Expected consumer counter to be greater than 0, but got %d", counter.Int64())
}
return nil
}, "1m", "1s").Should(gomega.Succeed())
// Take down half of the Keeper nodes by deleting the Keeper job registered above (after registry deployment)
firstHalfToTakeDown := chainlinkNodes[:len(chainlinkNodes)/2+1]
for i, nodeToTakeDown := range firstHalfToTakeDown {
err = nodeToTakeDown.MustDeleteJob(jobs[0].Data.ID)
require.NoError(t, err, "Error deleting job from node %d", i)
}
l.Info().Msg("Successfully managed to take down the first half of the nodes")
// Assert that upkeeps are still performed and their counters have increased
gom.Eventually(func(g gomega.Gomega) error {
for i := 0; i < len(upkeepIDs); i++ {
currentCounter, err := consumers[i].Counter(testcontext.Get(t))
g.Expect(err).ShouldNot(gomega.HaveOccurred(), "Failed to retrieve consumer counter for upkeep at index %d", i)
g.Expect(currentCounter.Int64()).Should(gomega.BeNumerically(">", initialCounters[i].Int64()),
"Expected counter to have increased from initial value of %s, but got %s",
initialCounters[i], currentCounter)
}
return nil
}, "3m", "1s").Should(gomega.Succeed())
// Take down the other half of the Keeper nodes
nodesAndJobs := []nodeAndJob{}
for i, n := range chainlinkNodes {
nodesAndJobs = append(nodesAndJobs, nodeAndJob{node: n, job: jobs[i]})
}
secondHalfToTakeDown := nodesAndJobs[len(nodesAndJobs)/2+1:]
for i, nodeToTakeDown := range secondHalfToTakeDown {
err = nodeToTakeDown.node.MustDeleteJob(nodeToTakeDown.job.Data.ID)
require.NoError(t, err, "Error deleting job from node %d", i)
}
l.Info().Msg("Successfully managed to take down the second half of the nodes")
// See how many times each upkeep was executed
var countersAfterNoMoreNodes = make([]*big.Int, len(upkeepIDs))
for i := 0; i < len(upkeepIDs); i++ {
countersAfterNoMoreNodes[i], err = consumers[i].Counter(testcontext.Get(t))
require.NoError(t, err, "Error retrieving consumer counter %d", i)
l.Info().
Int("Index", i).
Int64("Upkeeps", countersAfterNoMoreNodes[i].Int64()).
Msg("Upkeeps Performed")
}
// Once all the nodes are taken down, there might be some straggling transactions which went through before
// all the nodes were taken down. Every keeper node can have at most 1 straggling transaction per upkeep,
// so a +6 on the upper limit side should be sufficient.
gom.Consistently(func(g gomega.Gomega) {
for i := 0; i < len(upkeepIDs); i++ {
latestCounter, err := consumers[i].Counter(testcontext.Get(t))
g.Expect(err).ShouldNot(gomega.HaveOccurred(), "Failed to retrieve consumer counter for upkeep at index %d", i)
g.Expect(latestCounter.Int64()).Should(gomega.BeNumerically("<=",
countersAfterNoMoreNodes[i].Int64()+numUpkeepsAllowedForStragglingTxs,
),
"Expected consumer counter to not have increased more than %d, but got %d",
countersAfterNoMoreNodes[i].Int64()+numUpkeepsAllowedForStragglingTxs, latestCounter.Int64())
}
}, "3m", "1s").Should(gomega.Succeed())
})`
$DIR/integration-tests/smoke/keeper_test.go: `t.Cleanup(func() {
actions_seth.GetStalenessReportCleanupFn(t, l, chainClient, sb, registry, registryVersion)()
})`
$DIR/integration-tests/smoke/keeper_test.go: `actions_seth.GetStalenessReportCleanupFn(t, l, chainClient, sb, registry, registryVersion)()`
$DIR/integration-tests/smoke/keeper_test.go: `gom.Eventually(func(g gomega.Gomega) error {
for i := 0; i < len(upkeepIDs); i++ {
counter, err := consumers[i].Counter(testcontext.Get(t))
initialCounters[i] = counter
g.Expect(err).ShouldNot(gomega.HaveOccurred(), "Failed to retrieve consumer counter for upkeep at index %d", i)
g.Expect(counter.Int64()).Should(gomega.BeNumerically(">", int64(0)),
"Expected consumer counter to be greater than 0, but got %d", counter.Int64())
}
return nil
}, "1m", "1s").Should(gomega.Succeed())`
$DIR/integration-tests/smoke/keeper_test.go: `initialCounters[i] = counter`
$DIR/integration-tests/smoke/keeper_test.go: `g.Expect(err).ShouldNot(gomega.HaveOccurred(), "Failed to retrieve consumer counter for upkeep at index %d", i)`
$DIR/integration-tests/smoke/keeper_test.go: `g.Expect(counter.Int64()).Should(gomega.BeNumerically(">", int64(0)),
"Expected consumer counter to be greater than 0, but got %d", counter.Int64())`
$DIR/integration-tests/smoke/keeper_test.go: `err = nodeToTakeDown.MustDeleteJob(jobs[0].Data.ID)`
$DIR/integration-tests/smoke/keeper_test.go: `l.Info().Msg("Successfully managed to take down the first half of the nodes")`
$DIR/integration-tests/smoke/keeper_test.go: `gom.Eventually(func(g gomega.Gomega) error {
for i := 0; i < len(upkeepIDs); i++ {
currentCounter, err := consumers[i].Counter(testcontext.Get(t))
g.Expect(err).ShouldNot(gomega.HaveOccurred(), "Failed to retrieve consumer counter for upkeep at index %d", i)
g.Expect(currentCounter.Int64()).Should(gomega.BeNumerically(">", initialCounters[i].Int64()),
"Expected counter to have increased from initial value of %s, but got %s",
initialCounters[i], currentCounter)
}
return nil
}, "3m", "1s").Should(gomega.Succeed())`
$DIR/integration-tests/smoke/keeper_test.go: `g.Expect(err).ShouldNot(gomega.HaveOccurred(), "Failed to retrieve consumer counter for upkeep at index %d", i)`
$DIR/integration-tests/smoke/keeper_test.go: `g.Expect(currentCounter.Int64()).Should(gomega.BeNumerically(">", initialCounters[i].Int64()),
"Expected counter to have increased from initial value of %s, but got %s",
initialCounters[i], currentCounter)`
$DIR/integration-tests/smoke/keeper_test.go: `nodesAndJobs = append(nodesAndJobs, nodeAndJob{node: n, job: jobs[i]})`
$DIR/integration-tests/smoke/keeper_test.go: `err = nodeToTakeDown.node.MustDeleteJob(nodeToTakeDown.job.Data.ID)`
$DIR/integration-tests/smoke/keeper_test.go: `l.Info().Msg("Successfully managed to take down the second half of the nodes")`
$DIR/integration-tests/smoke/keeper_test.go: `countersAfterNoMoreNodes[i], err = consumers[i].Counter(testcontext.Get(t))`
$DIR/integration-tests/smoke/keeper_test.go: `l.Info().
Int("Index", i).
Int64("Upkeeps", countersAfterNoMoreNodes[i].Int64()).
Msg("Upkeeps Performed")`
$DIR/integration-tests/smoke/keeper_test.go: `gom.Consistently(func(g gomega.Gomega) {
for i := 0; i < len(upkeepIDs); i++ {
latestCounter, err := consumers[i].Counter(testcontext.Get(t))
g.Expect(err).ShouldNot(gomega.HaveOccurred(), "Failed to retrieve consumer counter for upkeep at index %d", i)
g.Expect(latestCounter.Int64()).Should(gomega.BeNumerically("<=",
countersAfterNoMoreNodes[i].Int64()+numUpkeepsAllowedForStragglingTxs,
),
"Expected consumer counter to not have increased more than %d, but got %d",
countersAfterNoMoreNodes[i].Int64()+numUpkeepsAllowedForStragglingTxs, latestCounter.Int64())
}
}, "3m", "1s").Should(gomega.Succeed())`
$DIR/integration-tests/smoke/keeper_test.go: `g.Expect(err).ShouldNot(gomega.HaveOccurred(), "Failed to retrieve consumer counter for upkeep at index %d", i)`
$DIR/integration-tests/smoke/keeper_test.go: `g.Expect(latestCounter.Int64()).Should(gomega.BeNumerically("<=",
countersAfterNoMoreNodes[i].Int64()+numUpkeepsAllowedForStragglingTxs,
),
"Expected consumer counter to not have increased more than %d, but got %d",
countersAfterNoMoreNodes[i].Int64()+numUpkeepsAllowedForStragglingTxs, latestCounter.Int64())`
$DIR/integration-tests/smoke/keeper_test.go: `_, err = actions.CreateKeeperJobsLocal(l, chainlinkNodes, registry, contracts.OCRv2Config{}, fmt.Sprint(chainClient.ChainID))`
$DIR/integration-tests/smoke/keeper_test.go: `t.Cleanup(func() {
actions_seth.GetStalenessReportCleanupFn(t, l, chainClient, sb, registry, ethereum.RegistryVersion_1_3)()
})`
$DIR/integration-tests/smoke/keeper_test.go: `actions_seth.GetStalenessReportCleanupFn(t, l, chainClient, sb, registry, ethereum.RegistryVersion_1_3)()`
$DIR/integration-tests/smoke/keeper_test.go: `gom.Eventually(func(g gomega.Gomega) error {
// Check if the upkeeps are performing multiple times by analysing their counters and checking they are greater than 5
for i := 0; i < len(upkeepIDs); i++ {
counter, err := consumers[i].Counter(testcontext.Get(t))
g.Expect(err).ShouldNot(gomega.HaveOccurred(), "Failed to retrieve consumer counter for upkeep at index %d", i)
g.Expect(counter.Int64()).Should(gomega.BeNumerically(">", int64(5)),
"Expected consumer counter to be greater than 5, but got %d", counter.Int64())
l.Info().Int64("Upkeep counter", counter.Int64()).Msg("Number of upkeeps performed")
}
return nil
}, "3m", "1s").Should(gomega.Succeed())`
$DIR/integration-tests/smoke/keeper_test.go: `g.Expect(err).ShouldNot(gomega.HaveOccurred(), "Failed to retrieve consumer counter for upkeep at index %d", i)`
$DIR/integration-tests/smoke/keeper_test.go: `g.Expect(counter.Int64()).Should(gomega.BeNumerically(">", int64(5)),
"Expected consumer counter to be greater than 5, but got %d", counter.Int64())`
$DIR/integration-tests/smoke/keeper_test.go: `l.Info().Int64("Upkeep counter", counter.Int64()).Msg("Number of upkeeps performed")`
$DIR/integration-tests/smoke/keeper_test.go: `countersAfterPause[i], err = consumers[i].Counter(testcontext.Get(t))`
$DIR/integration-tests/smoke/keeper_test.go: `l.Info().
Int("Index", i).
Int64("Upkeeps", countersAfterPause[i].Int64()).
Msg("Paused Upkeep")`
$DIR/integration-tests/smoke/keeper_test.go: `gom.Consistently(func(g gomega.Gomega) {
for i := 0; i < len(upkeepIDs); i++ {
// In most cases counters should remain constant, but there might be a straggling perform tx which
// gets committed later. Since every keeper node cannot have more than 1 straggling tx, it
// is sufficient to check that the upkeep count does not increase by more than 6.
latestCounter, err := consumers[i].Counter(testcontext.Get(t))
require.NoError(t, err, "Error retrieving counter at index %d", i)
g.Expect(latestCounter.Int64()).Should(gomega.BeNumerically("<=", countersAfterPause[i].Int64()+numUpkeepsAllowedForStragglingTxs),
"Expected consumer counter not have increased more than %d, but got %d",
countersAfterPause[i].Int64()+numUpkeepsAllowedForStragglingTxs, latestCounter.Int64())
}
}, "1m", "1s").Should(gomega.Succeed())`
$DIR/integration-tests/smoke/keeper_test.go: `g.Expect(latestCounter.Int64()).Should(gomega.BeNumerically("<=", countersAfterPause[i].Int64()+numUpkeepsAllowedForStragglingTxs),
"Expected consumer counter not have increased more than %d, but got %d",
countersAfterPause[i].Int64()+numUpkeepsAllowedForStragglingTxs, latestCounter.Int64())`
$DIR/integration-tests/smoke/keeper_test.go: `g.Expect(err).ShouldNot(gomega.HaveOccurred(), "Failed to retrieve consumer counter"+
" for upkeep at index %d", i)`
$DIR/integration-tests/smoke/keeper_test.go: `g.Expect(counter.Int64()).Should(gomega.BeNumerically(">", int64(5)+countersAfterPause[i].Int64()),
"Expected consumer counter to be greater than %d, but got %d", int64(5)+countersAfterPause[i].Int64(), counter.Int64())`
$DIR/integration-tests/smoke/keeper_test.go: `l.Info().Int64("Upkeeps", counter.Int64()).Msg("Upkeeps Performed")`
$DIR/integration-tests/smoke/keeper_test.go: `_, err = actions.CreateKeeperJobsLocal(l, chainlinkNodes, registry, contracts.OCRv2Config{}, fmt.Sprint(chainClient.ChainID))`
$DIR/integration-tests/smoke/keeper_test.go: `t.Cleanup(func() {
actions_seth.GetStalenessReportCleanupFn(t, l, chainClient, sb, registry, ethereum.RegistryVersion_1_3)()
})`
$DIR/integration-tests/smoke/keeper_test.go: `actions_seth.GetStalenessReportCleanupFn(t, l, chainClient, sb, registry, ethereum.RegistryVersion_1_3)()`
$DIR/integration-tests/smoke/keeper_test.go: `gom.Consistently(func(g gomega.Gomega) {
// expect the counter to remain 0 because perform data does not match
for i := 0; i < len(upkeepIDs); i++ {
counter, err := performDataChecker[i].Counter(testcontext.Get(t))
g.Expect(err).ShouldNot(gomega.HaveOccurred(), "Failed to retrieve perform data checker for upkeep at index %d", i)
g.Expect(counter.Int64()).Should(gomega.Equal(int64(0)),
"Expected perform data checker counter to be 0, but got %d", counter.Int64())
l.Info().Int64("Upkeep perform data checker", counter.Int64()).Msg("Number of upkeeps performed")
}
}, "2m", "1s").Should(gomega.Succeed())`
$DIR/integration-tests/smoke/keeper_test.go: `g.Expect(err).ShouldNot(gomega.HaveOccurred(), "Failed to retrieve perform data checker for upkeep at index %d", i)`
$DIR/integration-tests/smoke/keeper_test.go: `g.Expect(counter.Int64()).Should(gomega.Equal(int64(0)),
"Expected perform data checker counter to be 0, but got %d", counter.Int64())`
$DIR/integration-tests/smoke/keeper_test.go: `l.Info().Int64("Upkeep perform data checker", counter.Int64()).Msg("Number of upkeeps performed")`
$DIR/integration-tests/smoke/keeper_test.go: `err = registry.UpdateCheckData(upkeepIDs[i], []byte(keeperExpectedData))`
$DIR/integration-tests/smoke/keeper_test.go: `g.Expect(err).ShouldNot(gomega.HaveOccurred(), "Failed to retrieve perform data checker counter for upkeep at index %d", i)`
$DIR/integration-tests/smoke/keeper_test.go: `g.Expect(counter.Int64()).Should(gomega.BeNumerically(">", int64(5)),
"Expected perform data checker counter to be greater than 5, but got %d", counter.Int64())`
$DIR/integration-tests/smoke/keeper_test.go: `l.Info().Int64("Upkeep perform data checker", counter.Int64()).Msg("Number of upkeeps performed")`
$DIR/integration-tests/smoke/keeper_test.go: `_, err = actions.CreateKeeperJobsLocal(l, chainlinkNodes, registry, contracts.OCRv2Config{}, fmt.Sprint(chainClient.ChainID))`
$DIR/integration-tests/smoke/keeper_test.go: `gom.Eventually(func(g gomega.Gomega) error {
// Check if the upkeeps are performing multiple times by analyzing their counters and checking they are greater than 10
for i := 0; i < len(upkeepIDs); i++ {
counter, err := consumers[i].Counter(testcontext.Get(t))
g.Expect(err).ShouldNot(gomega.HaveOccurred(), "Failed to retrieve consumer counter for upkeep at index %d", i)
g.Expect(counter.Int64()).Should(gomega.BeNumerically(">", int64(10)),
"Expected consumer counter to be greater than 10, but got %d", counter.Int64())
l.Info().Int64("Upkeep counter", counter.Int64()).Msg("Number of upkeeps performed")
}
return nil
}, "5m", "1s").Should(gomega.Succeed())`
$DIR/integration-tests/smoke/keeper_test.go: `g.Expect(err).ShouldNot(gomega.HaveOccurred(), "Failed to retrieve consumer counter for upkeep at index %d", i)`
$DIR/integration-tests/smoke/keeper_test.go: `g.Expect(counter.Int64()).Should(gomega.BeNumerically(">", int64(10)),
"Expected consumer counter to be greater than 10, but got %d", counter.Int64())`
$DIR/integration-tests/smoke/keeper_test.go: `l.Info().Int64("Upkeep counter", counter.Int64()).Msg("Number of upkeeps performed")`
$DIR/integration-tests/smoke/keeper_test.go: `_, err = actions.CreateKeeperJobsLocal(l, chainlinkNodes, registry, contracts.OCRv2Config{}, fmt.Sprint(chainClient.ChainID))`
$DIR/integration-tests/smoke/keeper_test.go: `g.Expect(err).ShouldNot(gomega.HaveOccurred(), "Failed to retrieve consumer counter for upkeep at index %d", i)`
$DIR/integration-tests/smoke/keeper_test.go: `g.Expect(counter.Int64()).Should(gomega.BeNumerically(">", int64(10)),
"Expected consumer counter to be greater than 10, but got %d", counter.Int64())`
$DIR/integration-tests/smoke/keeper_test.go: `l.Info().Int64("Upkeep counter", counter.Int64()).Msg("Number of upkeeps performed")`
$DIR/integration-tests/smoke/keeper_test.go: `.Run(fmt.Sprintf("registry_1_%d", registryVersion), func(t *testing.T) {
t.Parallel()
l := logging.GetTestLogger(t)
config, err := tc.GetConfig("Smoke", tc.Keeper)
require.NoError(t, err, "Failed to get config")
chainClient, chainlinkNodes, linkToken, _ := setupKeeperTest(l, t, &config)
sb, err := chainClient.Client.BlockNumber(context.Background())
require.NoError(t, err, "Failed to get start block")
registry, _, consumers, upkeepIDs := actions_seth.DeployKeeperContracts(
t,
registryVersion,
keeperDefaultRegistryConfig,
keeperDefaultUpkeepsToDeploy,
keeperDefaultUpkeepGasLimit,
linkToken,
chainClient,
big.NewInt(keeperDefaultLinkFunds),
)
t.Cleanup(func() {
actions_seth.GetStalenessReportCleanupFn(t, l, chainClient, sb, registry, registryVersion)()
})
_, err = actions.CreateKeeperJobsLocal(l, chainlinkNodes, registry, contracts.OCRv2Config{}, fmt.Sprint(chainClient.ChainID))
require.NoError(t, err, "Error creating keeper jobs")
gom := gomega.NewGomegaWithT(t)
gom.Eventually(func(g gomega.Gomega) error {
// Check if the upkeeps are performing multiple times by analyzing their counters and checking they are greater than 10
for i := 0; i < len(upkeepIDs); i++ {
counter, err := consumers[i].Counter(testcontext.Get(t))
g.Expect(err).ShouldNot(gomega.HaveOccurred(), "Failed to retrieve consumer counter for upkeep at index %d", i)
g.Expect(counter.Int64()).Should(gomega.BeNumerically(">", int64(10)),
"Expected consumer counter to be greater than 10, but got %d", counter.Int64())
l.Info().Int64("Upkeep counter", counter.Int64()).Msg("Number of upkeeps performed")
}
return nil
}, "5m", "1s").Should(gomega.Succeed())
// Cancel all the registered upkeeps via the registry
for i := 0; i < len(upkeepIDs); i++ {
err := registry.CancelUpkeep(upkeepIDs[i])
require.NoError(t, err, "Could not cancel upkeep at index %d", i)
}
var countersAfterCancellation = make([]*big.Int, len(upkeepIDs))
for i := 0; i < len(upkeepIDs); i++ {
// Obtain the amount of times the upkeep has been executed so far
countersAfterCancellation[i], err = consumers[i].Counter(testcontext.Get(t))
require.NoError(t, err, "Failed to retrieve consumer counter for upkeep at index %d", i)
l.Info().Int("Index", i).Int64("Upkeeps Performed", countersAfterCancellation[i].Int64()).Msg("Cancelled Upkeep")
}
gom.Consistently(func(g gomega.Gomega) {
for i := 0; i < len(upkeepIDs); i++ {
// Expect the counter to remain constant because the upkeep was cancelled, so it shouldn't increase anymore
latestCounter, err := consumers[i].Counter(testcontext.Get(t))
g.Expect(err).ShouldNot(gomega.HaveOccurred(), "Failed to retrieve consumer counter for upkeep at index %d", i)
g.Expect(latestCounter.Int64()).Should(gomega.Equal(countersAfterCancellation[i].Int64()),
"Expected consumer counter to remain constant at %d, but got %d",
countersAfterCancellation[i].Int64(), latestCounter.Int64())
}
}, "1m", "1s").Should(gomega.Succeed())
})`
$DIR/integration-tests/smoke/keeper_test.go: `.Sprintf("registry_1_%d", registryVersion)`
$DIR/integration-tests/smoke/keeper_test.go: `.GetTestLogger(t)`
$DIR/integration-tests/smoke/keeper_test.go: `.GetConfig("Smoke", tc.Keeper)`
$DIR/integration-tests/smoke/keeper_test.go: `.Client.BlockNumber(context.Background())`
$DIR/integration-tests/smoke/keeper_test.go: `.Background()`
$DIR/integration-tests/smoke/keeper_test.go: `.DeployKeeperContracts(
t,
registryVersion,
keeperDefaultRegistryConfig,
keeperDefaultUpkeepsToDeploy,
keeperDefaultUpkeepGasLimit,
linkToken,
chainClient,
big.NewInt(keeperDefaultLinkFunds),
)`
$DIR/integration-tests/smoke/keeper_test.go: `.NewInt(keeperDefaultLinkFunds)`
$DIR/integration-tests/smoke/keeper_test.go: `.Cleanup(func() {
actions_seth.GetStalenessReportCleanupFn(t, l, chainClient, sb, registry, registryVersion)()
})`
$DIR/integration-tests/smoke/keeper_test.go: `.GetStalenessReportCleanupFn(t, l, chainClient, sb, registry, registryVersion)`
$DIR/integration-tests/smoke/keeper_test.go: `.CreateKeeperJobsLocal(l, chainlinkNodes, registry, contracts.OCRv2Config{}, fmt.Sprint(chainClient.ChainID))`
$DIR/integration-tests/smoke/keeper_test.go: `.Sprint(chainClient.ChainID)`
$DIR/integration-tests/smoke/keeper_test.go: `.NewGomegaWithT(t)`
$DIR/integration-tests/smoke/keeper_test.go: `.Eventually(func(g gomega.Gomega) error {
// Check if the upkeeps are performing multiple times by analyzing their counters and checking they are greater than 10
for i := 0; i < len(upkeepIDs); i++ {
counter, err := consumers[i].Counter(testcontext.Get(t))
g.Expect(err).ShouldNot(gomega.HaveOccurred(), "Failed to retrieve consumer counter for upkeep at index %d", i)
g.Expect(counter.Int64()).Should(gomega.BeNumerically(">", int64(10)),
"Expected consumer counter to be greater than 10, but got %d", counter.Int64())
l.Info().Int64("Upkeep counter", counter.Int64()).Msg("Number of upkeeps performed")
}
return nil
}, "5m", "1s")`
$DIR/integration-tests/smoke/keeper_test.go: `.Counter(testcontext.Get(t))`
$DIR/integration-tests/smoke/keeper_test.go: `.Get(t)`
$DIR/integration-tests/smoke/keeper_test.go: `.Expect(err)`
$DIR/integration-tests/smoke/keeper_test.go: `.ShouldNot(gomega.HaveOccurred(), "Failed to retrieve consumer counter for upkeep at index %d", i)`
$DIR/integration-tests/smoke/keeper_test.go: `.HaveOccurred()`
$DIR/integration-tests/smoke/keeper_test.go: `.Expect(counter.Int64())`
$DIR/integration-tests/smoke/keeper_test.go: `.Int64()`
$DIR/integration-tests/smoke/keeper_test.go: `.Should(gomega.BeNumerically(">", int64(10)),
"Expected consumer counter to be greater than 10, but got %d", counter.Int64())`
$DIR/integration-tests/smoke/keeper_test.go: `.BeNumerically(">", int64(10))`
$DIR/integration-tests/smoke/keeper_test.go: `.Int64()`
$DIR/integration-tests/smoke/keeper_test.go: `.Info()`
$DIR/integration-tests/smoke/keeper_test.go: `.Int64("Upkeep counter", counter.Int64())`
$DIR/integration-tests/smoke/keeper_test.go: `.Int64()`
$DIR/integration-tests/smoke/keeper_test.go: `.Msg("Number of upkeeps performed")`
$DIR/integration-tests/smoke/keeper_test.go: `.Should(gomega.Succeed())`
$DIR/integration-tests/smoke/keeper_test.go: `.Succeed()`
$DIR/integration-tests/smoke/keeper_test.go: `.CancelUpkeep(upkeepIDs[i])`
$DIR/integration-tests/smoke/keeper_test.go: `.Counter(testcontext.Get(t))`
$DIR/integration-tests/smoke/keeper_test.go: `.Get(t)`
$DIR/integration-tests/smoke/keeper_test.go: `.Info()`
$DIR/integration-tests/smoke/keeper_test.go: `.Int("Index", i)`
$DIR/integration-tests/smoke/keeper_test.go: `.Int64("Upkeeps Performed", countersAfterCancellation[i].Int64())`
$DIR/integration-tests/smoke/keeper_test.go: `.Int64()`
$DIR/integration-tests/smoke/keeper_test.go: `.Msg("Cancelled Upkeep")`
$DIR/integration-tests/smoke/keeper_test.go: `.Consistently(func(g gomega.Gomega) {
for i := 0; i < len(upkeepIDs); i++ {
// Expect the counter to remain constant because the upkeep was cancelled, so it shouldn't increase anymore
latestCounter, err := consumers[i].Counter(testcontext.Get(t))
g.Expect(err).ShouldNot(gomega.HaveOccurred(), "Failed to retrieve consumer counter for upkeep at index %d", i)
g.Expect(latestCounter.Int64()).Should(gomega.Equal(countersAfterCancellation[i].Int64()),
"Expected consumer counter to remain constant at %d, but got %d",
countersAfterCancellation[i].Int64(), latestCounter.Int64())
}
}, "1m", "1s")`
$DIR/integration-tests/smoke/keeper_test.go: `.Counter(testcontext.Get(t))`
$DIR/integration-tests/smoke/keeper_test.go: `.Get(t)`
$DIR/integration-tests/smoke/keeper_test.go: `.Expect(err)`
$DIR/integration-tests/smoke/keeper_test.go: `.ShouldNot(gomega.HaveOccurred(), "Failed to retrieve consumer counter for upkeep at index %d", i)`
$DIR/integration-tests/smoke/keeper_test.go: `.HaveOccurred()`
$DIR/integration-tests/smoke/keeper_test.go: `.Expect(latestCounter.Int64())`
$DIR/integration-tests/smoke/keeper_test.go: `.Int64()`
$DIR/integration-tests/smoke/keeper_test.go: `.Should(gomega.Equal(countersAfterCancellation[i].Int64()),
"Expected consumer counter to remain constant at %d, but got %d",
countersAfterCancellation[i].Int64(), latestCounter.Int64())`
$DIR/integration-tests/smoke/keeper_test.go: `.Equal(countersAfterCancellation[i].Int64())`
$DIR/integration-tests/smoke/keeper_test.go: `.Int64()`
$DIR/integration-tests/smoke/keeper_test.go: `.Int64()`
$DIR/integration-tests/smoke/keeper_test.go: `.Int64()`
$DIR/integration-tests/smoke/keeper_test.go: `.Should(gomega.Succeed())`
$DIR/integration-tests/smoke/keeper_test.go: `.Succeed()`
$DIR/integration-tests/smoke/keeper_test.go: `.Run(fmt.Sprintf("registry_1_%d", registryVersion), func(t *testing.T) {
t.Parallel()
l := logging.GetTestLogger(t)
config, err := tc.GetConfig("Smoke", tc.Keeper)
require.NoError(t, err, "Failed to get config")
chainClient, chainlinkNodes, linkToken, _ := setupKeeperTest(l, t, &config)
sb, err := chainClient.Client.BlockNumber(context.Background())
require.NoError(t, err, "Failed to get start block")
registry, _, consumers, upkeepIDs := actions_seth.DeployKeeperContracts(
t,
registryVersion,
highBCPTRegistryConfig,
keeperDefaultUpkeepsToDeploy,
keeperDefaultUpkeepGasLimit,
linkToken,
chainClient,
big.NewInt(keeperDefaultLinkFunds),
)
_, err = actions.CreateKeeperJobsLocal(l, chainlinkNodes, registry, contracts.OCRv2Config{}, fmt.Sprint(chainClient.ChainID))
require.NoError(t, err, "Error creating keeper jobs")
t.Cleanup(func() {
actions_seth.GetStalenessReportCleanupFn(t, l, chainClient, sb, registry, registryVersion)()
})
keepersPerformedLowFreq := map[*big.Int][]string{}
// gom := gomega.NewGomegaWithT(t)
// Wait for upkeep to be performed by two different keepers that alternate (buddies)
l.Info().Msg("Waiting for 2m for upkeeps to be performed by different keepers")
ticker := time.NewTicker(1 * time.Second)
defer ticker.Stop()
stop := time.After(2 * time.Minute)
LOW_LOOP:
for {
select {
case <-ticker.C:
for i := 0; i < len(upkeepIDs); i++ {
counter, err := consumers[i].Counter(testcontext.Get(t))
require.NoError(t, err, "Calling consumer's counter shouldn't fail")
l.Info().Str("UpkeepId", upkeepIDs[i].String()).Int64("Upkeep counter", counter.Int64()).Msg("Number of upkeeps performed")
upkeepInfo, err := registry.GetUpkeepInfo(testcontext.Get(t), upkeepIDs[i])
require.NoError(t, err, "Registry's getUpkeep shouldn't fail")
latestKeeper := upkeepInfo.LastKeeper
if latestKeeper == actions.ZeroAddress.String() {
continue
}
keepersPerformedLowFreq[upkeepIDs[i]] = append(keepersPerformedLowFreq[upkeepIDs[i]], latestKeeper)
}
case <-stop:
ticker.Stop()
break LOW_LOOP
}
}
require.GreaterOrEqual(t, 2, len(keepersPerformedLowFreq), "At least 2 different keepers should have been performing upkeeps")
// Now set BCPT to be low, so keepers change turn frequently
err = registry.SetConfig(lowBCPTRegistryConfig, contracts.OCRv2Config{})
require.NoError(t, err, "Error setting registry config")
keepersPerformedHigherFreq := map[*big.Int][]string{}
ticker = time.NewTicker(1 * time.Second)
defer ticker.Stop()
stop = time.After(2 * time.Minute)
HIGH_LOOP:
for {
select {
case <-ticker.C:
for i := 0; i < len(upkeepIDs); i++ {
counter, err := consumers[i].Counter(testcontext.Get(t))
require.NoError(t, err, "Calling consumer's counter shouldn't fail")
l.Info().Str("UpkeepId", upkeepIDs[i].String()).Int64("Upkeep counter", counter.Int64()).Msg("Number of upkeeps performed")
upkeepInfo, err := registry.GetUpkeepInfo(testcontext.Get(t), upkeepIDs[i])
require.NoError(t, err, "Registry's getUpkeep shouldn't fail")
latestKeeper := upkeepInfo.LastKeeper
if latestKeeper == actions.ZeroAddress.String() {
continue
}
keepersPerformedHigherFreq[upkeepIDs[i]] = append(keepersPerformedHigherFreq[upkeepIDs[i]], latestKeeper)
}
case <-stop:
ticker.Stop()
break HIGH_LOOP
}
}
require.GreaterOrEqual(t, 3, len(keepersPerformedHigherFreq), "At least 3 different keepers should have been performing upkeeps after BCPT change")
var countFreq = func(keepers []string, freqMap map[string]int) {
for _, keeper := range keepers {
freqMap[keeper]++
}
}
for i := 0; i < len(upkeepIDs); i++ {
lowFreqMap := make(map[string]int)
highFreqMap := make(map[string]int)
countFreq(keepersPerformedLowFreq[upkeepIDs[i]], lowFreqMap)
countFreq(keepersPerformedHigherFreq[upkeepIDs[i]], highFreqMap)
require.Greater(t, len(highFreqMap), len(lowFreqMap), "High frequency map should have more keepers than low frequency map")
l.Info().Interface("Low BCPT", lowFreqMap).Interface("High BCPT", highFreqMap).Str("UpkeepID", upkeepIDs[i].String()).Msg("Keeper frequency map")
for lowKeeper, lowFreq := range lowFreqMap {
highFreq, ok := highFreqMap[lowKeeper]
// it might happen due to fluke that a keeper is not found in high frequency map
if !ok {
continue
}
// require.True(t, ok, "Keeper %s not found in high frequency map. This should not happen", lowKeeper)
require.GreaterOrEqual(t, lowFreq, highFreq, "Keeper %s should have performed less times with high BCPT than with low BCPT", lowKeeper)
}
}
})`
$DIR/integration-tests/smoke/keeper_test.go: `.Sprintf("registry_1_%d", registryVersion)`
$DIR/integration-tests/smoke/keeper_test.go: `.GetTestLogger(t)`
$DIR/integration-tests/smoke/keeper_test.go: `.GetConfig("Smoke", tc.Keeper)`
$DIR/integration-tests/smoke/keeper_test.go: `.Client.BlockNumber(context.Background())`
$DIR/integration-tests/smoke/keeper_test.go: `.Background()`
$DIR/integration-tests/smoke/keeper_test.go: `.DeployKeeperContracts(
t,
registryVersion,
highBCPTRegistryConfig,
keeperDefaultUpkeepsToDeploy,
keeperDefaultUpkeepGasLimit,
linkToken,
chainClient,
big.NewInt(keeperDefaultLinkFunds),
)`
$DIR/integration-tests/smoke/keeper_test.go: `.NewInt(keeperDefaultLinkFunds)`
$DIR/integration-tests/smoke/keeper_test.go: `.CreateKeeperJobsLocal(l, chainlinkNodes, registry, contracts.OCRv2Config{}, fmt.Sprint(chainClient.ChainID))`
$DIR/integration-tests/smoke/keeper_test.go: `.Sprint(chainClient.ChainID)`
$DIR/integration-tests/smoke/keeper_test.go: `.Cleanup(func() {
actions_seth.GetStalenessReportCleanupFn(t, l, chainClient, sb, registry, registryVersion)()
})`
$DIR/integration-tests/smoke/keeper_test.go: `.GetStalenessReportCleanupFn(t, l, chainClient, sb, registry, registryVersion)`
$DIR/integration-tests/smoke/keeper_test.go: `.Info()`
$DIR/integration-tests/smoke/keeper_test.go: `.Msg("Waiting for 2m for upkeeps to be performed by different keepers")`
$DIR/integration-tests/smoke/keeper_test.go: `.NewTicker(1 * time.Second)`
$DIR/integration-tests/smoke/keeper_test.go: `.Stop()`
$DIR/integration-tests/smoke/keeper_test.go: `.After(2 * time.Minute)`
$DIR/integration-tests/smoke/keeper_test.go: `.Counter(testcontext.Get(t))`
$DIR/integration-tests/smoke/keeper_test.go: `.Get(t)`
$DIR/integration-tests/smoke/keeper_test.go: `.Info()`
$DIR/integration-tests/smoke/keeper_test.go: `.Str("UpkeepId", upkeepIDs[i].String())`
$DIR/integration-tests/smoke/keeper_test.go: `.String()`
$DIR/integration-tests/smoke/keeper_test.go: `.Int64("Upkeep counter", counter.Int64())`
$DIR/integration-tests/smoke/keeper_test.go: `.Int64()`
$DIR/integration-tests/smoke/keeper_test.go: `.Msg("Number of upkeeps performed")`
$DIR/integration-tests/smoke/keeper_test.go: `.GetUpkeepInfo(testcontext.Get(t), upkeepIDs[i])`
$DIR/integration-tests/smoke/keeper_test.go: `.Get(t)`
$DIR/integration-tests/smoke/keeper_test.go: `.ZeroAddress.String()`
$DIR/integration-tests/smoke/keeper_test.go: `.Stop()`
$DIR/integration-tests/smoke/keeper_test.go: `.SetConfig(lowBCPTRegistryConfig, contracts.OCRv2Config{})`
$DIR/integration-tests/smoke/keeper_test.go: `.NewTicker(1 * time.Second)`
$DIR/integration-tests/smoke/keeper_test.go: `.Stop()`
$DIR/integration-tests/smoke/keeper_test.go: `.After(2 * time.Minute)`
$DIR/integration-tests/smoke/keeper_test.go: `.Counter(testcontext.Get(t))`
$DIR/integration-tests/smoke/keeper_test.go: `.Get(t)`
$DIR/integration-tests/smoke/keeper_test.go: `.Info()`
$DIR/integration-tests/smoke/keeper_test.go: `.Str("UpkeepId", upkeepIDs[i].String())`
$DIR/integration-tests/smoke/keeper_test.go: `.String()`
$DIR/integration-tests/smoke/keeper_test.go: `.Int64("Upkeep counter", counter.Int64())`
$DIR/integration-tests/smoke/keeper_test.go: `.Int64()`
$DIR/integration-tests/smoke/keeper_test.go: `.Msg("Number of upkeeps performed")`
$DIR/integration-tests/smoke/keeper_test.go: `.GetUpkeepInfo(testcontext.Get(t), upkeepIDs[i])`
$DIR/integration-tests/smoke/keeper_test.go: `.Get(t)`
$DIR/integration-tests/smoke/keeper_test.go: `.ZeroAddress.String()`
$DIR/integration-tests/smoke/keeper_test.go: `.Stop()`
$DIR/integration-tests/smoke/keeper_test.go: `.Info()`
$DIR/integration-tests/smoke/keeper_test.go: `.Interface("Low BCPT", lowFreqMap)`
$DIR/integration-tests/smoke/keeper_test.go: `.Interface("High BCPT", highFreqMap)`
$DIR/integration-tests/smoke/keeper_test.go: `.Str("UpkeepID", upkeepIDs[i].String())`
$DIR/integration-tests/smoke/keeper_test.go: `.String()`
$DIR/integration-tests/smoke/keeper_test.go: `.Msg("Keeper frequency map")`
$DIR/integration-tests/smoke/keeper_test.go: `.Run(fmt.Sprintf("registry_1_%d", registryVersion), func(t *testing.T) {
t.Parallel()
l := logging.GetTestLogger(t)
config, err := tc.GetConfig("Smoke", tc.Keeper)
require.NoError(t, err, "Failed to get config")
chainClient, chainlinkNodes, linkToken, _ := setupKeeperTest(l, t, &config)
sb, err := chainClient.Client.BlockNumber(context.Background())
require.NoError(t, err, "Failed to get start block")
registry, _, consumersPerformance, upkeepIDs := actions_seth.DeployPerformanceKeeperContracts(
t,
chainClient,
registryVersion,
keeperDefaultUpkeepsToDeploy,
keeperDefaultUpkeepGasLimit,
linkToken,
&keeperDefaultRegistryConfig,
big.NewInt(keeperDefaultLinkFunds),
10000, // How many blocks this upkeep will be eligible from first upkeep block
5, // Interval of blocks that upkeeps are expected to be performed
100000, // How much gas should be burned on checkUpkeep() calls
4000000, // How much gas should be burned on performUpkeep() calls. Initially set higher than defaultUpkeepGasLimit
)
_, err = actions.CreateKeeperJobsLocal(l, chainlinkNodes, registry, contracts.OCRv2Config{}, fmt.Sprint(chainClient.ChainID))
require.NoError(t, err, "Error creating keeper jobs")
t.Cleanup(func() {
actions_seth.GetStalenessReportCleanupFn(t, l, chainClient, sb, registry, registryVersion)()
})
consumerPerformance := consumersPerformance[0]
upkeepID := upkeepIDs[0]
gom := gomega.NewGomegaWithT(t)
// Initially performGas is set high, so performUpkeep reverts and no upkeep should be performed
gom.Consistently(func(g gomega.Gomega) {
// Consumer count should remain at 0
cnt, err := consumerPerformance.GetUpkeepCount(testcontext.Get(t))
g.Expect(err).ShouldNot(gomega.HaveOccurred(), "Calling consumer's Counter shouldn't fail")
g.Expect(cnt.Int64()).Should(
gomega.Equal(int64(0)),
"Expected consumer counter to remain constant at %d, but got %d", 0, cnt.Int64(),
)
// Not even reverted upkeeps should be performed. Last keeper for the upkeep should be 0 address
upkeepInfo, err := registry.GetUpkeepInfo(testcontext.Get(t), upkeepID)
g.Expect(err).ShouldNot(gomega.HaveOccurred(), "Registry's getUpkeep shouldn't fail")
g.Expect(upkeepInfo.LastKeeper).Should(gomega.Equal(actions.ZeroAddress.String()), "Last keeper should be zero address")
}, "1m", "1s").Should(gomega.Succeed())
// Set performGas on consumer to be low, so that performUpkeep starts becoming successful
err = consumerPerformance.SetPerformGasToBurn(testcontext.Get(t), big.NewInt(100000))
require.NoError(t, err, "Error setting PerformGasToBurn")
// Upkeep should now start performing
gom.Eventually(func(g gomega.Gomega) error {
cnt, err := consumerPerformance.GetUpkeepCount(testcontext.Get(t))
g.Expect(err).ShouldNot(gomega.HaveOccurred(), "Calling consumer's Counter shouldn't fail")
g.Expect(cnt.Int64()).Should(gomega.BeNumerically(">", int64(0)),
"Expected consumer counter to be greater than 0, but got %d", cnt.Int64(),
)
return nil
}, "1m", "1s").Should(gomega.Succeed())
})`
$DIR/integration-tests/smoke/keeper_test.go: `.Sprintf("registry_1_%d", registryVersion)`
$DIR/integration-tests/smoke/keeper_test.go: `.GetTestLogger(t)`
$DIR/integration-tests/smoke/keeper_test.go: `.GetConfig("Smoke", tc.Keeper)`
$DIR/integration-tests/smoke/keeper_test.go: `.Client.BlockNumber(context.Background())`
$DIR/integration-tests/smoke/keeper_test.go: `.Background()`
$DIR/integration-tests/smoke/keeper_test.go: `.DeployPerformanceKeeperContracts(
t,
chainClient,
registryVersion,
keeperDefaultUpkeepsToDeploy,
keeperDefaultUpkeepGasLimit,
linkToken,
&keeperDefaultRegistryConfig,
big.NewInt(keeperDefaultLinkFunds),
10000, // How many blocks this upkeep will be eligible from first upkeep block
5, // Interval of blocks that upkeeps are expected to be performed
100000, // How much gas should be burned on checkUpkeep() calls
4000000, // How much gas should be burned on performUpkeep() calls. Initially set higher than defaultUpkeepGasLimit
)`
$DIR/integration-tests/smoke/keeper_test.go: `.NewInt(keeperDefaultLinkFunds)`
$DIR/integration-tests/smoke/keeper_test.go: `.CreateKeeperJobsLocal(l, chainlinkNodes, registry, contracts.OCRv2Config{}, fmt.Sprint(chainClient.ChainID))`
$DIR/integration-tests/smoke/keeper_test.go: `.Sprint(chainClient.ChainID)`
$DIR/integration-tests/smoke/keeper_test.go: `.Cleanup(func() {
actions_seth.GetStalenessReportCleanupFn(t, l, chainClient, sb, registry, registryVersion)()
})`
$DIR/integration-tests/smoke/keeper_test.go: `.GetStalenessReportCleanupFn(t, l, chainClient, sb, registry, registryVersion)`
$DIR/integration-tests/smoke/keeper_test.go: `.NewGomegaWithT(t)`
$DIR/integration-tests/smoke/keeper_test.go: `.Consistently(func(g gomega.Gomega) {
// Consumer count should remain at 0
cnt, err := consumerPerformance.GetUpkeepCount(testcontext.Get(t))
g.Expect(err).ShouldNot(gomega.HaveOccurred(), "Calling consumer's Counter shouldn't fail")
g.Expect(cnt.Int64()).Should(
gomega.Equal(int64(0)),
"Expected consumer counter to remain constant at %d, but got %d", 0, cnt.Int64(),
)
// Not even reverted upkeeps should be performed. Last keeper for the upkeep should be 0 address
upkeepInfo, err := registry.GetUpkeepInfo(testcontext.Get(t), upkeepID)
g.Expect(err).ShouldNot(gomega.HaveOccurred(), "Registry's getUpkeep shouldn't fail")
g.Expect(upkeepInfo.LastKeeper).Should(gomega.Equal(actions.ZeroAddress.String()), "Last keeper should be zero address")
}, "1m", "1s")`
$DIR/integration-tests/smoke/keeper_test.go: `.GetUpkeepCount(testcontext.Get(t))`
$DIR/integration-tests/smoke/keeper_test.go: `.Get(t)`
$DIR/integration-tests/smoke/keeper_test.go: `.Expect(err)`
$DIR/integration-tests/smoke/keeper_test.go: `.ShouldNot(gomega.HaveOccurred(), "Calling consumer's Counter shouldn't fail")`
$DIR/integration-tests/smoke/keeper_test.go: `.HaveOccurred()`
$DIR/integration-tests/smoke/keeper_test.go: `.Expect(cnt.Int64())`
$DIR/integration-tests/smoke/keeper_test.go: `.Int64()`
$DIR/integration-tests/smoke/keeper_test.go: `.Should(
gomega.Equal(int64(0)),
"Expected consumer counter to remain constant at %d, but got %d", 0, cnt.Int64(),
)`
$DIR/integration-tests/smoke/keeper_test.go: `.Equal(int64(0))`
$DIR/integration-tests/smoke/keeper_test.go: `.Int64()`
$DIR/integration-tests/smoke/keeper_test.go: `.GetUpkeepInfo(testcontext.Get(t), upkeepID)`
$DIR/integration-tests/smoke/keeper_test.go: `.Get(t)`
$DIR/integration-tests/smoke/keeper_test.go: `.Expect(err)`
$DIR/integration-tests/smoke/keeper_test.go: `.ShouldNot(gomega.HaveOccurred(), "Registry's getUpkeep shouldn't fail")`
$DIR/integration-tests/smoke/keeper_test.go: `.HaveOccurred()`
$DIR/integration-tests/smoke/keeper_test.go: `.Expect(upkeepInfo.LastKeeper)`
$DIR/integration-tests/smoke/keeper_test.go: `.Should(gomega.Equal(actions.ZeroAddress.String()), "Last keeper should be zero address")`
$DIR/integration-tests/smoke/keeper_test.go: `.Equal(actions.ZeroAddress.String())`
$DIR/integration-tests/smoke/keeper_test.go: `.ZeroAddress.String()`
$DIR/integration-tests/smoke/keeper_test.go: `.Should(gomega.Succeed())`
$DIR/integration-tests/smoke/keeper_test.go: `.Succeed()`
$DIR/integration-tests/smoke/keeper_test.go: `.SetPerformGasToBurn(testcontext.Get(t), big.NewInt(100000))`
$DIR/integration-tests/smoke/keeper_test.go: `.Get(t)`
$DIR/integration-tests/smoke/keeper_test.go: `.NewInt(100000)`
$DIR/integration-tests/smoke/keeper_test.go: `.Eventually(func(g gomega.Gomega) error {
cnt, err := consumerPerformance.GetUpkeepCount(testcontext.Get(t))
g.Expect(err).ShouldNot(gomega.HaveOccurred(), "Calling consumer's Counter shouldn't fail")
g.Expect(cnt.Int64()).Should(gomega.BeNumerically(">", int64(0)),
"Expected consumer counter to be greater than 0, but got %d", cnt.Int64(),
)
return nil
}, "1m", "1s")`
$DIR/integration-tests/smoke/keeper_test.go: `.GetUpkeepCount(testcontext.Get(t))`
$DIR/integration-tests/smoke/keeper_test.go: `.Get(t)`
$DIR/integration-tests/smoke/keeper_test.go: `.Expect(err)`
$DIR/integration-tests/smoke/keeper_test.go: `.ShouldNot(gomega.HaveOccurred(), "Calling consumer's Counter shouldn't fail")`
$DIR/integration-tests/smoke/keeper_test.go: `.HaveOccurred()`
$DIR/integration-tests/smoke/keeper_test.go: `.Expect(cnt.Int64())`
$DIR/integration-tests/smoke/keeper_test.go: `.Int64()`
$DIR/integration-tests/smoke/keeper_test.go: `.Should(gomega.BeNumerically(">", int64(0)),
"Expected consumer counter to be greater than 0, but got %d", cnt.Int64(),
)`
$DIR/integration-tests/smoke/keeper_test.go: `.BeNumerically(">", int64(0))`
$DIR/integration-tests/smoke/keeper_test.go: `.Int64()`
$DIR/integration-tests/smoke/keeper_test.go: `.Should(gomega.Succeed())`
$DIR/integration-tests/smoke/keeper_test.go: `.Succeed()`
$DIR/integration-tests/smoke/keeper_test.go: `.Run(fmt.Sprintf("registry_1_%d", registryVersion), func(t *testing.T) {
t.Parallel()
l := logging.GetTestLogger(t)
config, err := tc.GetConfig("Smoke", tc.Keeper)
require.NoError(t, err, "Failed to get config")
chainClient, chainlinkNodes, linkToken, _ := setupKeeperTest(l, t, &config)
sb, err := chainClient.Client.BlockNumber(context.Background())
require.NoError(t, err, "Failed to get start block")
registry, _, consumersPerformance, upkeepIDs := actions_seth.DeployPerformanceKeeperContracts(
t,
chainClient,
registryVersion,
keeperDefaultUpkeepsToDeploy,
keeperDefaultUpkeepGasLimit,
linkToken,
&keeperDefaultRegistryConfig,
big.NewInt(keeperDefaultLinkFunds),
10000, // How many blocks this upkeep will be eligible from first upkeep block
5, // Interval of blocks that upkeeps are expected to be performed
100000, // How much gas should be burned on checkUpkeep() calls
4000000, // How much gas should be burned on performUpkeep() calls. Initially set higher than defaultUpkeepGasLimit
)
_, err = actions.CreateKeeperJobsLocal(l, chainlinkNodes, registry, contracts.OCRv2Config{}, fmt.Sprint(chainClient.ChainID))
require.NoError(t, err, "Error creating keeper jobs")
t.Cleanup(func() {
actions_seth.GetStalenessReportCleanupFn(t, l, chainClient, sb, registry, registryVersion)()
})
gom := gomega.NewGomegaWithT(t)
// Initially performGas is set higher than defaultUpkeepGasLimit, so no upkeep should be performed
l.Info().Msg("Waiting for 1m for upkeeps to be performed")
gom.Consistently(func(g gomega.Gomega) {
for i := 0; i < len(upkeepIDs); i++ {
cnt, err := consumersPerformance[i].GetUpkeepCount(testcontext.Get(t))
g.Expect(err).ShouldNot(gomega.HaveOccurred(), "Calling consumer's counter shouldn't fail")
g.Expect(cnt.Int64()).Should(
gomega.Equal(int64(0)),
"Expected consumer counter to remain constant at %d, but got %d", 0, cnt.Int64(),
)
}
}, "1m", "1s").Should(gomega.Succeed())
// Increase gas limit for the upkeep, higher than the performGasBurn
l.Info().Msg("Setting upkeep gas limit higher than performGasBurn")
for i := 0; i < len(upkeepIDs); i++ {
err = registry.SetUpkeepGasLimit(upkeepIDs[i], uint32(4500000))
require.NoError(t, err, "Error setting Upkeep gas limit")
}
// Upkeep should now start performing
l.Info().Msg("Waiting for 1m for upkeeps to be performed")
gom.Eventually(func(g gomega.Gomega) {
for i := 0; i < len(upkeepIDs); i++ {
cnt, err := consumersPerformance[i].GetUpkeepCount(testcontext.Get(t))
g.Expect(err).ShouldNot(gomega.HaveOccurred(), "Calling consumer's counter shouldn't fail")
g.Expect(cnt.Int64()).Should(gomega.BeNumerically(">", int64(0)),
"Expected consumer counter to be greater than 0, but got %d", cnt.Int64(),
)
}
}, "1m", "1s").Should(gomega.Succeed())
// Now increase the checkGasBurn on consumer, upkeep should stop performing
l.Info().Msg("Setting checkGasBurn higher than performGasBurn")
for i := 0; i < len(upkeepIDs); i++ {
err = consumersPerformance[i].SetCheckGasToBurn(testcontext.Get(t), big.NewInt(3000000))
require.NoError(t, err, "Error setting CheckGasToBurn")
}
// Get existing performed count
existingCnts := make(map[*big.Int]*big.Int)
for i := 0; i < len(upkeepIDs); i++ {
existingCnt, err := consumersPerformance[i].GetUpkeepCount(testcontext.Get(t))
existingCnts[upkeepIDs[i]] = existingCnt
require.NoError(t, err, "Error calling consumer's counter")
l.Info().Int64("Upkeep counter", existingCnt.Int64()).Msg("Check Gas Increased")
}
// In most cases count should remain constant, but there might be a straggling perform tx which
// gets committed later. Since every keeper node cannot have more than 1 straggling tx, it
// is sufficient to check that the upkeep count does not increase by more than 6.
l.Info().Msg("Waiting for 3m to make sure no more than 6 upkeeps are performed")
gom.Consistently(func(g gomega.Gomega) {
for i := 0; i < len(upkeepIDs); i++ {
cnt, err := consumersPerformance[i].GetUpkeepCount(testcontext.Get(t))
g.Expect(err).ShouldNot(gomega.HaveOccurred(), "Calling consumer's counter shouldn't fail")
existingCnt := existingCnts[upkeepIDs[i]]
g.Expect(cnt.Int64()).Should(
gomega.BeNumerically("<=", existingCnt.Int64()+numUpkeepsAllowedForStragglingTxs),
"Expected consumer counter to remain constant at %d, but got %d", existingCnt.Int64(), cnt.Int64(),
)
}
}, "3m", "1s").Should(gomega.Succeed())
for i := 0; i < len(upkeepIDs); i++ {
existingCnt, err := consumersPerformance[i].GetUpkeepCount(testcontext.Get(t))
existingCnts[upkeepIDs[i]] = existingCnt
require.NoError(t, err, "Error calling consumer's counter")
l.Info().Int64("Upkeep counter", existingCnt.Int64()).Msg("Upkeep counter when consistently block finished")
}
// Now increase checkGasLimit on registry
highCheckGasLimit := keeperDefaultRegistryConfig
highCheckGasLimit.CheckGasLimit = uint32(5000000)
err = registry.SetConfig(highCheckGasLimit, contracts.OCRv2Config{})
require.NoError(t, err, "Error setting registry config")
// Upkeep should start performing again, and it should get regularly performed
l.Info().Msg("Waiting for 1m for upkeeps to be performed")
gom.Eventually(func(g gomega.Gomega) {
for i := 0; i < len(upkeepIDs); i++ {
cnt, err := consumersPerformance[i].GetUpkeepCount(testcontext.Get(t))
g.Expect(err).ShouldNot(gomega.HaveOccurred(), "Calling consumer's Counter shouldn't fail")
existingCnt := existingCnts[upkeepIDs[i]]
g.Expect(cnt.Int64()).Should(gomega.BeNumerically(">", existingCnt.Int64()),
"Expected consumer counter to be greater than %d, but got %d", existingCnt.Int64(), cnt.Int64(),
)
}
}, "1m", "1s").Should(gomega.Succeed())
})`
$DIR/integration-tests/smoke/keeper_test.go: `.Sprintf("registry_1_%d", registryVersion)`
$DIR/integration-tests/smoke/keeper_test.go: `.GetTestLogger(t)`
$DIR/integration-tests/smoke/keeper_test.go: `.GetConfig("Smoke", tc.Keeper)`
$DIR/integration-tests/smoke/keeper_test.go: `.Client.BlockNumber(context.Background())`
$DIR/integration-tests/smoke/keeper_test.go: `.Background()`
$DIR/integration-tests/smoke/keeper_test.go: `.DeployPerformanceKeeperContracts(
t,
chainClient,
registryVersion,
keeperDefaultUpkeepsToDeploy,
keeperDefaultUpkeepGasLimit,
linkToken,
&keeperDefaultRegistryConfig,
big.NewInt(keeperDefaultLinkFunds),
10000, // How many blocks this upkeep will be eligible from first upkeep block
5, // Interval of blocks that upkeeps are expected to be performed
100000, // How much gas should be burned on checkUpkeep() calls
4000000, // How much gas should be burned on performUpkeep() calls. Initially set higher than defaultUpkeepGasLimit
)`
$DIR/integration-tests/smoke/keeper_test.go: `.NewInt(keeperDefaultLinkFunds)`
$DIR/integration-tests/smoke/keeper_test.go: `.CreateKeeperJobsLocal(l, chainlinkNodes, registry, contracts.OCRv2Config{}, fmt.Sprint(chainClient.ChainID))`
$DIR/integration-tests/smoke/keeper_test.go: `.Sprint(chainClient.ChainID)`
$DIR/integration-tests/smoke/keeper_test.go: `.Cleanup(func() {
actions_seth.GetStalenessReportCleanupFn(t, l, chainClient, sb, registry, registryVersion)()
})`
$DIR/integration-tests/smoke/keeper_test.go: `.GetStalenessReportCleanupFn(t, l, chainClient, sb, registry, registryVersion)`
$DIR/integration-tests/smoke/keeper_test.go: `.NewGomegaWithT(t)`
$DIR/integration-tests/smoke/keeper_test.go: `.Info()`
$DIR/integration-tests/smoke/keeper_test.go: `.Msg("Waiting for 1m for upkeeps to be performed")`
$DIR/integration-tests/smoke/keeper_test.go: `.Consistently(func(g gomega.Gomega) {
for i := 0; i < len(upkeepIDs); i++ {
cnt, err := consumersPerformance[i].GetUpkeepCount(testcontext.Get(t))
g.Expect(err).ShouldNot(gomega.HaveOccurred(), "Calling consumer's counter shouldn't fail")
g.Expect(cnt.Int64()).Should(
gomega.Equal(int64(0)),
"Expected consumer counter to remain constant at %d, but got %d", 0, cnt.Int64(),
)
}
}, "1m", "1s")`
$DIR/integration-tests/smoke/keeper_test.go: `.GetUpkeepCount(testcontext.Get(t))`
$DIR/integration-tests/smoke/keeper_test.go: `.Get(t)`
$DIR/integration-tests/smoke/keeper_test.go: `.Expect(err)`
$DIR/integration-tests/smoke/keeper_test.go: `.ShouldNot(gomega.HaveOccurred(), "Calling consumer's counter shouldn't fail")`
$DIR/integration-tests/smoke/keeper_test.go: `.HaveOccurred()`
$DIR/integration-tests/smoke/keeper_test.go: `.Expect(cnt.Int64())`
$DIR/integration-tests/smoke/keeper_test.go: `.Int64()`
$DIR/integration-tests/smoke/keeper_test.go: `.Should(
gomega.Equal(int64(0)),
"Expected consumer counter to remain constant at %d, but got %d", 0, cnt.Int64(),
)`
$DIR/integration-tests/smoke/keeper_test.go: `.Equal(int64(0))`
$DIR/integration-tests/smoke/keeper_test.go: `.Int64()`
$DIR/integration-tests/smoke/keeper_test.go: `.Should(gomega.Succeed())`
$DIR/integration-tests/smoke/keeper_test.go: `.Succeed()`
$DIR/integration-tests/smoke/keeper_test.go: `.Info()`
$DIR/integration-tests/smoke/keeper_test.go: `.Msg("Setting upkeep gas limit higher than performGasBurn")`
$DIR/integration-tests/smoke/keeper_test.go: `.SetUpkeepGasLimit(upkeepIDs[i], uint32(4500000))`
$DIR/integration-tests/smoke/keeper_test.go: `.Info()`
$DIR/integration-tests/smoke/keeper_test.go: `.Msg("Waiting for 1m for upkeeps to be performed")`
$DIR/integration-tests/smoke/keeper_test.go: `.Eventually(func(g gomega.Gomega) {
for i := 0; i < len(upkeepIDs); i++ {
cnt, err := consumersPerformance[i].GetUpkeepCount(testcontext.Get(t))
g.Expect(err).ShouldNot(gomega.HaveOccurred(), "Calling consumer's counter shouldn't fail")
g.Expect(cnt.Int64()).Should(gomega.BeNumerically(">", int64(0)),
"Expected consumer counter to be greater than 0, but got %d", cnt.Int64(),
)
}
}, "1m", "1s")`
$DIR/integration-tests/smoke/keeper_test.go: `.GetUpkeepCount(testcontext.Get(t))`
$DIR/integration-tests/smoke/keeper_test.go: `.Get(t)`
$DIR/integration-tests/smoke/keeper_test.go: `.Expect(err)`
$DIR/integration-tests/smoke/keeper_test.go: `.ShouldNot(gomega.HaveOccurred(), "Calling consumer's counter shouldn't fail")`
$DIR/integration-tests/smoke/keeper_test.go: `.HaveOccurred()`
$DIR/integration-tests/smoke/keeper_test.go: `.Expect(cnt.Int64())`
$DIR/integration-tests/smoke/keeper_test.go: `.Int64()`
$DIR/integration-tests/smoke/keeper_test.go: `.Should(gomega.BeNumerically(">", int64(0)),
"Expected consumer counter to be greater than 0, but got %d", cnt.Int64(),
)`
$DIR/integration-tests/smoke/keeper_test.go: `.BeNumerically(">", int64(0))`
$DIR/integration-tests/smoke/keeper_test.go: `.Int64()`
$DIR/integration-tests/smoke/keeper_test.go: `.Should(gomega.Succeed())`
$DIR/integration-tests/smoke/keeper_test.go: `.Succeed()`
$DIR/integration-tests/smoke/keeper_test.go: `.Info()`
$DIR/integration-tests/smoke/keeper_test.go: `.Msg("Setting checkGasBurn higher than performGasBurn")`
$DIR/integration-tests/smoke/keeper_test.go: `.SetCheckGasToBurn(testcontext.Get(t), big.NewInt(3000000))`
$DIR/integration-tests/smoke/keeper_test.go: `.Get(t)`
$DIR/integration-tests/smoke/keeper_test.go: `.NewInt(3000000)`
$DIR/integration-tests/smoke/keeper_test.go: `.GetUpkeepCount(testcontext.Get(t))`
$DIR/integration-tests/smoke/keeper_test.go: `.Get(t)`
$DIR/integration-tests/smoke/keeper_test.go: `.Info()`
$DIR/integration-tests/smoke/keeper_test.go: `.Int64("Upkeep counter", existingCnt.Int64())`
$DIR/integration-tests/smoke/keeper_test.go: `.Int64()`
$DIR/integration-tests/smoke/keeper_test.go: `.Msg("Check Gas Increased")`
$DIR/integration-tests/smoke/keeper_test.go: `.Info()`
$DIR/integration-tests/smoke/keeper_test.go: `.Msg("Waiting for 3m to make sure no more than 6 upkeeps are performed")`
$DIR/integration-tests/smoke/keeper_test.go: `.Consistently(func(g gomega.Gomega) {
for i := 0; i < len(upkeepIDs); i++ {
cnt, err := consumersPerformance[i].GetUpkeepCount(testcontext.Get(t))
g.Expect(err).ShouldNot(gomega.HaveOccurred(), "Calling consumer's counter shouldn't fail")
existingCnt := existingCnts[upkeepIDs[i]]
g.Expect(cnt.Int64()).Should(
gomega.BeNumerically("<=", existingCnt.Int64()+numUpkeepsAllowedForStragglingTxs),
"Expected consumer counter to remain constant at %d, but got %d", existingCnt.Int64(), cnt.Int64(),
)
}
}, "3m", "1s")`
$DIR/integration-tests/smoke/keeper_test.go: `.GetUpkeepCount(testcontext.Get(t))`
$DIR/integration-tests/smoke/keeper_test.go: `.Get(t)`
$DIR/integration-tests/smoke/keeper_test.go: `.Expect(err)`
$DIR/integration-tests/smoke/keeper_test.go: `.ShouldNot(gomega.HaveOccurred(), "Calling consumer's counter shouldn't fail")`
$DIR/integration-tests/smoke/keeper_test.go: `.HaveOccurred()`
$DIR/integration-tests/smoke/keeper_test.go: `.Expect(cnt.Int64())`
$DIR/integration-tests/smoke/keeper_test.go: `.Int64()`
$DIR/integration-tests/smoke/keeper_test.go: `.Should(
gomega.BeNumerically("<=", existingCnt.Int64()+numUpkeepsAllowedForStragglingTxs),
"Expected consumer counter to remain constant at %d, but got %d", existingCnt.Int64(), cnt.Int64(),
)`
$DIR/integration-tests/smoke/keeper_test.go: `.BeNumerically("<=", existingCnt.Int64()+numUpkeepsAllowedForStragglingTxs)`
$DIR/integration-tests/smoke/keeper_test.go: `.Int64()`
$DIR/integration-tests/smoke/keeper_test.go: `.Int64()`
$DIR/integration-tests/smoke/keeper_test.go: `.Int64()`
$DIR/integration-tests/smoke/keeper_test.go: `.Should(gomega.Succeed())`
$DIR/integration-tests/smoke/keeper_test.go: `.Succeed()`
$DIR/integration-tests/smoke/keeper_test.go: `.GetUpkeepCount(testcontext.Get(t))`
$DIR/integration-tests/smoke/keeper_test.go: `.Get(t)`
$DIR/integration-tests/smoke/keeper_test.go: `.Info()`
$DIR/integration-tests/smoke/keeper_test.go: `.Int64("Upkeep counter", existingCnt.Int64())`
$DIR/integration-tests/smoke/keeper_test.go: `.Int64()`
$DIR/integration-tests/smoke/keeper_test.go: `.Msg("Upkeep counter when consistently block finished")`
$DIR/integration-tests/smoke/keeper_test.go: `.SetConfig(highCheckGasLimit, contracts.OCRv2Config{})`
$DIR/integration-tests/smoke/keeper_test.go: `.Info()`
$DIR/integration-tests/smoke/keeper_test.go: `.Msg("Waiting for 1m for upkeeps to be performed")`
$DIR/integration-tests/smoke/keeper_test.go: `.Eventually(func(g gomega.Gomega) {
for i := 0; i < len(upkeepIDs); i++ {
cnt, err := consumersPerformance[i].GetUpkeepCount(testcontext.Get(t))
g.Expect(err).ShouldNot(gomega.HaveOccurred(), "Calling consumer's Counter shouldn't fail")
existingCnt := existingCnts[upkeepIDs[i]]
g.Expect(cnt.Int64()).Should(gomega.BeNumerically(">", existingCnt.Int64()),
"Expected consumer counter to be greater than %d, but got %d", existingCnt.Int64(), cnt.Int64(),
)
}
}, "1m", "1s")`
$DIR/integration-tests/smoke/keeper_test.go: `.GetUpkeepCount(testcontext.Get(t))`
$DIR/integration-tests/smoke/keeper_test.go: `.Get(t)`
$DIR/integration-tests/smoke/keeper_test.go: `.Expect(err)`
$DIR/integration-tests/smoke/keeper_test.go: `.ShouldNot(gomega.HaveOccurred(), "Calling consumer's Counter shouldn't fail")`
$DIR/integration-tests/smoke/keeper_test.go: `.HaveOccurred()`
$DIR/integration-tests/smoke/keeper_test.go: `.Expect(cnt.Int64())`
$DIR/integration-tests/smoke/keeper_test.go: `.Int64()`
$DIR/integration-tests/smoke/keeper_test.go: `.Should(gomega.BeNumerically(">", existingCnt.Int64()),
"Expected consumer counter to be greater than %d, but got %d", existingCnt.Int64(), cnt.Int64(),
)`
$DIR/integration-tests/smoke/keeper_test.go: `.BeNumerically(">", existingCnt.Int64())`
$DIR/integration-tests/smoke/keeper_test.go: `.Int64()`
$DIR/integration-tests/smoke/keeper_test.go: `.Int64()`
$DIR/integration-tests/smoke/keeper_test.go: `.Int64()`
$DIR/integration-tests/smoke/keeper_test.go: `.Should(gomega.Succeed())`
$DIR/integration-tests/smoke/keeper_test.go: `.Succeed()`
$DIR/integration-tests/smoke/keeper_test.go: `.Run(fmt.Sprintf("registry_1_%d", registryVersion), func(t *testing.T) {
t.Parallel()
l := logging.GetTestLogger(t)
config, err := tc.GetConfig("Smoke", tc.Keeper)
require.NoError(t, err, "Failed to get config")
chainClient, chainlinkNodes, linkToken, _ := setupKeeperTest(l, t, &config)
sb, err := chainClient.Client.BlockNumber(context.Background())
require.NoError(t, err, "Failed to get start block")
registry, registrar, consumers, upkeepIDs := actions_seth.DeployKeeperContracts(
t,
registryVersion,
keeperDefaultRegistryConfig,
keeperDefaultUpkeepsToDeploy,
keeperDefaultUpkeepGasLimit,
linkToken,
chainClient,
big.NewInt(keeperDefaultLinkFunds),
)
_, err = actions.CreateKeeperJobsLocal(l, chainlinkNodes, registry, contracts.OCRv2Config{}, fmt.Sprint(chainClient.ChainID))
require.NoError(t, err, "Error creating keeper jobs")
t.Cleanup(func() {
actions_seth.GetStalenessReportCleanupFn(t, l, chainClient, sb, registry, registryVersion)()
})
var initialCounters = make([]*big.Int, len(upkeepIDs))
gom := gomega.NewGomegaWithT(t)
// Observe that the upkeeps which are initially registered are performing and
// store the value of their initial counters in order to compare later on that the value increased.
gom.Eventually(func(g gomega.Gomega) error {
for i := 0; i < len(upkeepIDs); i++ {
counter, err := consumers[i].Counter(testcontext.Get(t))
initialCounters[i] = counter
g.Expect(err).ShouldNot(gomega.HaveOccurred(), "Failed to retrieve consumer counter"+
" for upkeep at index "+strconv.Itoa(i))
g.Expect(counter.Int64()).Should(gomega.BeNumerically(">", int64(0)),
"Expected consumer counter to be greater than 0, but got %d", counter.Int64())
l.Info().
Int64("Upkeep counter", counter.Int64()).
Int("Upkeep ID", i).
Msg("Number of upkeeps performed")
}
return nil
}, "1m", "1s").Should(gomega.Succeed())
newConsumers, _ := actions_seth.RegisterNewUpkeeps(t, chainClient, linkToken,
registry, registrar, keeperDefaultUpkeepGasLimit, 1)
// We know that newConsumers has size 1, so we can just use the newly registered upkeep.
newUpkeep := newConsumers[0]
// Test that the newly registered upkeep is also performing.
gom.Eventually(func(g gomega.Gomega) error {
counter, err := newUpkeep.Counter(testcontext.Get(t))
g.Expect(err).ShouldNot(gomega.HaveOccurred(), "Calling newly deployed upkeep's counter shouldn't fail")
g.Expect(counter.Int64()).Should(gomega.BeNumerically(">", int64(0)),
"Expected newly registered upkeep's counter to be greater than 0, but got %d", counter.Int64())
l.Info().Msg("Newly registered upkeeps performed " + strconv.Itoa(int(counter.Int64())) + " times")
return nil
}, "1m", "1s").Should(gomega.Succeed())
gom.Eventually(func(g gomega.Gomega) error {
for i := 0; i < len(upkeepIDs); i++ {
currentCounter, err := consumers[i].Counter(testcontext.Get(t))
g.Expect(err).ShouldNot(gomega.HaveOccurred(), "Calling consumer's counter shouldn't fail")
l.Info().
Int("Upkeep ID", i).
Int64("Upkeep counter", currentCounter.Int64()).
Int64("initial counter", initialCounters[i].Int64()).
Msg("Number of upkeeps performed")
g.Expect(currentCounter.Int64()).Should(gomega.BeNumerically(">", initialCounters[i].Int64()),
"Expected counter to have increased from initial value of %s, but got %s",
initialCounters[i], currentCounter)
}
return nil
}, "1m", "1s").Should(gomega.Succeed())
})`
$DIR/integration-tests/smoke/keeper_test.go: `.Sprintf("registry_1_%d", registryVersion)`
$DIR/integration-tests/smoke/keeper_test.go: `.GetTestLogger(t)`
$DIR/integration-tests/smoke/keeper_test.go: `.GetConfig("Smoke", tc.Keeper)`
$DIR/integration-tests/smoke/keeper_test.go: `.Client.BlockNumber(context.Background())`
$DIR/integration-tests/smoke/keeper_test.go: `.Background()`
$DIR/integration-tests/smoke/keeper_test.go: `.DeployKeeperContracts(
t,
registryVersion,
keeperDefaultRegistryConfig,
keeperDefaultUpkeepsToDeploy,
keeperDefaultUpkeepGasLimit,
linkToken,
chainClient,
big.NewInt(keeperDefaultLinkFunds),
)`
$DIR/integration-tests/smoke/keeper_test.go: `.NewInt(keeperDefaultLinkFunds)`
$DIR/integration-tests/smoke/keeper_test.go: `.CreateKeeperJobsLocal(l, chainlinkNodes, registry, contracts.OCRv2Config{}, fmt.Sprint(chainClient.ChainID))`
$DIR/integration-tests/smoke/keeper_test.go: `.Sprint(chainClient.ChainID)`
$DIR/integration-tests/smoke/keeper_test.go: `.Cleanup(func() {
actions_seth.GetStalenessReportCleanupFn(t, l, chainClient, sb, registry, registryVersion)()
})`
$DIR/integration-tests/smoke/keeper_test.go: `.GetStalenessReportCleanupFn(t, l, chainClient, sb, registry, registryVersion)`
$DIR/integration-tests/smoke/keeper_test.go: `.NewGomegaWithT(t)`
$DIR/integration-tests/smoke/keeper_test.go: `.Eventually(func(g gomega.Gomega) error {
for i := 0; i < len(upkeepIDs); i++ {
counter, err := consumers[i].Counter(testcontext.Get(t))
initialCounters[i] = counter
g.Expect(err).ShouldNot(gomega.HaveOccurred(), "Failed to retrieve consumer counter"+
" for upkeep at index "+strconv.Itoa(i))
g.Expect(counter.Int64()).Should(gomega.BeNumerically(">", int64(0)),
"Expected consumer counter to be greater than 0, but got %d", counter.Int64())
l.Info().
Int64("Upkeep counter", counter.Int64()).
Int("Upkeep ID", i).
Msg("Number of upkeeps performed")
}
return nil
}, "1m", "1s")`
$DIR/integration-tests/smoke/keeper_test.go: `.Counter(testcontext.Get(t))`
$DIR/integration-tests/smoke/keeper_test.go: `.Get(t)`
$DIR/integration-tests/smoke/keeper_test.go: `.Expect(err)`
$DIR/integration-tests/smoke/keeper_test.go: `.ShouldNot(gomega.HaveOccurred(), "Failed to retrieve consumer counter"+
" for upkeep at index "+strconv.Itoa(i))`
$DIR/integration-tests/smoke/keeper_test.go: `.HaveOccurred()`
$DIR/integration-tests/smoke/keeper_test.go: `.Itoa(i)`
$DIR/integration-tests/smoke/keeper_test.go: `.Expect(counter.Int64())`
$DIR/integration-tests/smoke/keeper_test.go: `.Int64()`
$DIR/integration-tests/smoke/keeper_test.go: `.Should(gomega.BeNumerically(">", int64(0)),
"Expected consumer counter to be greater than 0, but got %d", counter.Int64())`
$DIR/integration-tests/smoke/keeper_test.go: `.BeNumerically(">", int64(0))`
$DIR/integration-tests/smoke/keeper_test.go: `.Int64()`
$DIR/integration-tests/smoke/keeper_test.go: `.Info()`
$DIR/integration-tests/smoke/keeper_test.go: `.
Int64("Upkeep counter", counter.Int64())`
$DIR/integration-tests/smoke/keeper_test.go: `.Int64()`
$DIR/integration-tests/smoke/keeper_test.go: `.
Int("Upkeep ID", i)`
$DIR/integration-tests/smoke/keeper_test.go: `.
Msg("Number of upkeeps performed")`
$DIR/integration-tests/smoke/keeper_test.go: `.Should(gomega.Succeed())`
$DIR/integration-tests/smoke/keeper_test.go: `.Succeed()`
$DIR/integration-tests/smoke/keeper_test.go: `.RegisterNewUpkeeps(t, chainClient, linkToken,
registry, registrar, keeperDefaultUpkeepGasLimit, 1)`
$DIR/integration-tests/smoke/keeper_test.go: `.Eventually(func(g gomega.Gomega) error {
counter, err := newUpkeep.Counter(testcontext.Get(t))
g.Expect(err).ShouldNot(gomega.HaveOccurred(), "Calling newly deployed upkeep's counter shouldn't fail")
g.Expect(counter.Int64()).Should(gomega.BeNumerically(">", int64(0)),
"Expected newly registered upkeep's counter to be greater than 0, but got %d", counter.Int64())
l.Info().Msg("Newly registered upkeeps performed " + strconv.Itoa(int(counter.Int64())) + " times")
return nil
}, "1m", "1s")`
$DIR/integration-tests/smoke/keeper_test.go: `.Counter(testcontext.Get(t))`
$DIR/integration-tests/smoke/keeper_test.go: `.Get(t)`
$DIR/integration-tests/smoke/keeper_test.go: `.Expect(err)`
$DIR/integration-tests/smoke/keeper_test.go: `.ShouldNot(gomega.HaveOccurred(), "Calling newly deployed upkeep's counter shouldn't fail")`
$DIR/integration-tests/smoke/keeper_test.go: `.HaveOccurred()`
$DIR/integration-tests/smoke/keeper_test.go: `.Expect(counter.Int64())`
$DIR/integration-tests/smoke/keeper_test.go: `.Int64()`
$DIR/integration-tests/smoke/keeper_test.go: `.Should(gomega.BeNumerically(">", int64(0)),
"Expected newly registered upkeep's counter to be greater than 0, but got %d", counter.Int64())`
$DIR/integration-tests/smoke/keeper_test.go: `.BeNumerically(">", int64(0))`
$DIR/integration-tests/smoke/keeper_test.go: `.Int64()`
$DIR/integration-tests/smoke/keeper_test.go: `.Info()`
$DIR/integration-tests/smoke/keeper_test.go: `.Msg("Newly registered upkeeps performed " + strconv.Itoa(int(counter.Int64())) + " times")`
$DIR/integration-tests/smoke/keeper_test.go: `.Itoa(int(counter.Int64()))`
$DIR/integration-tests/smoke/keeper_test.go: `.Int64()`
$DIR/integration-tests/smoke/keeper_test.go: `.Should(gomega.Succeed())`
$DIR/integration-tests/smoke/keeper_test.go: `.Succeed()`
$DIR/integration-tests/smoke/keeper_test.go: `.Eventually(func(g gomega.Gomega) error {
for i := 0; i < len(upkeepIDs); i++ {
currentCounter, err := consumers[i].Counter(testcontext.Get(t))
g.Expect(err).ShouldNot(gomega.HaveOccurred(), "Calling consumer's counter shouldn't fail")
l.Info().
Int("Upkeep ID", i).
Int64("Upkeep counter", currentCounter.Int64()).
Int64("initial counter", initialCounters[i].Int64()).
Msg("Number of upkeeps performed")
g.Expect(currentCounter.Int64()).Should(gomega.BeNumerically(">", initialCounters[i].Int64()),
"Expected counter to have increased from initial value of %s, but got %s",
initialCounters[i], currentCounter)
}
return nil
}, "1m", "1s")`
$DIR/integration-tests/smoke/keeper_test.go: `.Counter(testcontext.Get(t))`
$DIR/integration-tests/smoke/keeper_test.go: `.Get(t)`
$DIR/integration-tests/smoke/keeper_test.go: `.Expect(err)`
$DIR/integration-tests/smoke/keeper_test.go: `.ShouldNot(gomega.HaveOccurred(), "Calling consumer's counter shouldn't fail")`
$DIR/integration-tests/smoke/keeper_test.go: `.HaveOccurred()`
$DIR/integration-tests/smoke/keeper_test.go: `.Info()`
$DIR/integration-tests/smoke/keeper_test.go: `.
Int("Upkeep ID", i)`
$DIR/integration-tests/smoke/keeper_test.go: `.
Int64("Upkeep counter", currentCounter.Int64())`
$DIR/integration-tests/smoke/keeper_test.go: `.Int64()`
$DIR/integration-tests/smoke/keeper_test.go: `.
Int64("initial counter", initialCounters[i].Int64())`
$DIR/integration-tests/smoke/keeper_test.go: `.Int64()`
$DIR/integration-tests/smoke/keeper_test.go: `.
Msg("Number of upkeeps performed")`
$DIR/integration-tests/smoke/keeper_test.go: `.Expect(currentCounter.Int64())`
$DIR/integration-tests/smoke/keeper_test.go: `.Int64()`
$DIR/integration-tests/smoke/keeper_test.go: `.Should(gomega.BeNumerically(">", initialCounters[i].Int64()),
"Expected counter to have increased from initial value of %s, but got %s",
initialCounters[i], currentCounter)`
$DIR/integration-tests/smoke/keeper_test.go: `.BeNumerically(">", initialCounters[i].Int64())`
$DIR/integration-tests/smoke/keeper_test.go: `.Int64()`
$DIR/integration-tests/smoke/keeper_test.go: `.Should(gomega.Succeed())`
$DIR/integration-tests/smoke/keeper_test.go: `.Succeed()`
$DIR/integration-tests/smoke/keeper_test.go: `.Run(fmt.Sprintf("registry_1_%d", registryVersion), func(t *testing.T) {
t.Parallel()
l := logging.GetTestLogger(t)
config, err := tc.GetConfig("Smoke", tc.Keeper)
require.NoError(t, err, "Failed to get config")
chainClient, chainlinkNodes, linkToken, _ := setupKeeperTest(l, t, &config)
sb, err := chainClient.Client.BlockNumber(context.Background())
require.NoError(t, err, "Failed to get start block")
registry, _, consumers, upkeepIDs := actions_seth.DeployKeeperContracts(
t,
registryVersion,
keeperDefaultRegistryConfig,
keeperDefaultUpkeepsToDeploy,
keeperDefaultUpkeepGasLimit,
linkToken,
chainClient,
big.NewInt(1),
)
_, err = actions.CreateKeeperJobsLocal(l, chainlinkNodes, registry, contracts.OCRv2Config{}, fmt.Sprint(chainClient.ChainID))
require.NoError(t, err, "Error creating keeper jobs")
t.Cleanup(func() {
actions_seth.GetStalenessReportCleanupFn(t, l, chainClient, sb, registry, registryVersion)()
})
// Since the upkeep is currently underfunded, check that it doesn't get executed
gom := gomega.NewGomegaWithT(t)
l.Info().Msg("Waiting for 1m to make sure no upkeeps are performed")
gom.Consistently(func(g gomega.Gomega) {
for i := 0; i < len(upkeepIDs); i++ {
counter, err := consumers[i].Counter(testcontext.Get(t))
g.Expect(err).ShouldNot(gomega.HaveOccurred(), "Calling consumer's counter shouldn't fail")
g.Expect(counter.Int64()).Should(gomega.Equal(int64(0)),
"Expected consumer counter to remain zero, but got %d", counter.Int64())
}
}, "1m", "1s").Should(gomega.Succeed())
// Grant permission to the registry to fund the upkeep
err = linkToken.Approve(registry.Address(), big.NewInt(0).Mul(big.NewInt(9e18), big.NewInt(int64(len(upkeepIDs)))))
require.NoError(t, err, "Error approving permissions for registry")
// Add funds to the upkeep whose ID we know from above
l.Info().Msg("Adding funds to upkeeps")
for i := 0; i < len(upkeepIDs); i++ {
err = registry.AddUpkeepFunds(upkeepIDs[i], big.NewInt(9e18))
require.NoError(t, err, "Error funding upkeep")
}
// Now the new upkeep should be performing because we added enough funds
gom.Eventually(func(g gomega.Gomega) {
for i := 0; i < len(upkeepIDs); i++ {
counter, err := consumers[i].Counter(testcontext.Get(t))
g.Expect(err).ShouldNot(gomega.HaveOccurred(), "Calling consumer's counter shouldn't fail")
g.Expect(counter.Int64()).Should(gomega.BeNumerically(">", int64(0)),
"Expected newly registered upkeep's counter to be greater than 0, but got %d", counter.Int64())
}
}, "1m", "1s").Should(gomega.Succeed())
})`
$DIR/integration-tests/smoke/keeper_test.go: `.Sprintf("registry_1_%d", registryVersion)`
$DIR/integration-tests/smoke/keeper_test.go: `.GetTestLogger(t)`
$DIR/integration-tests/smoke/keeper_test.go: `.GetConfig("Smoke", tc.Keeper)`
$DIR/integration-tests/smoke/keeper_test.go: `.Client.BlockNumber(context.Background())`
$DIR/integration-tests/smoke/keeper_test.go: `.Background()`
$DIR/integration-tests/smoke/keeper_test.go: `.DeployKeeperContracts(
t,
registryVersion,
keeperDefaultRegistryConfig,
keeperDefaultUpkeepsToDeploy,
keeperDefaultUpkeepGasLimit,
linkToken,
chainClient,
big.NewInt(1),
)`
$DIR/integration-tests/smoke/keeper_test.go: `.NewInt(1)`
$DIR/integration-tests/smoke/keeper_test.go: `.CreateKeeperJobsLocal(l, chainlinkNodes, registry, contracts.OCRv2Config{}, fmt.Sprint(chainClient.ChainID))`
$DIR/integration-tests/smoke/keeper_test.go: `.Sprint(chainClient.ChainID)`
$DIR/integration-tests/smoke/keeper_test.go: `.Cleanup(func() {
actions_seth.GetStalenessReportCleanupFn(t, l, chainClient, sb, registry, registryVersion)()
})`
$DIR/integration-tests/smoke/keeper_test.go: `.GetStalenessReportCleanupFn(t, l, chainClient, sb, registry, registryVersion)`
$DIR/integration-tests/smoke/keeper_test.go: `.NewGomegaWithT(t)`
$DIR/integration-tests/smoke/keeper_test.go: `.Info()`
$DIR/integration-tests/smoke/keeper_test.go: `.Msg("Waiting for 1m to make sure no upkeeps are performed")`
$DIR/integration-tests/smoke/keeper_test.go: `.Consistently(func(g gomega.Gomega) {
for i := 0; i < len(upkeepIDs); i++ {
counter, err := consumers[i].Counter(testcontext.Get(t))
g.Expect(err).ShouldNot(gomega.HaveOccurred(), "Calling consumer's counter shouldn't fail")
g.Expect(counter.Int64()).Should(gomega.Equal(int64(0)),
"Expected consumer counter to remain zero, but got %d", counter.Int64())
}
}, "1m", "1s")`
$DIR/integration-tests/smoke/keeper_test.go: `.Counter(testcontext.Get(t))`
$DIR/integration-tests/smoke/keeper_test.go: `.Get(t)`
$DIR/integration-tests/smoke/keeper_test.go: `.Expect(err)`
$DIR/integration-tests/smoke/keeper_test.go: `.ShouldNot(gomega.HaveOccurred(), "Calling consumer's counter shouldn't fail")`
$DIR/integration-tests/smoke/keeper_test.go: `.HaveOccurred()`
$DIR/integration-tests/smoke/keeper_test.go: `.Expect(counter.Int64())`
$DIR/integration-tests/smoke/keeper_test.go: `.Int64()`
$DIR/integration-tests/smoke/keeper_test.go: `.Should(gomega.Equal(int64(0)),
"Expected consumer counter to remain zero, but got %d", counter.Int64())`
$DIR/integration-tests/smoke/keeper_test.go: `.Equal(int64(0))`
$DIR/integration-tests/smoke/keeper_test.go: `.Int64()`
$DIR/integration-tests/smoke/keeper_test.go: `.Should(gomega.Succeed())`
$DIR/integration-tests/smoke/keeper_test.go: `.Succeed()`
$DIR/integration-tests/smoke/keeper_test.go: `.Approve(registry.Address(), big.NewInt(0).Mul(big.NewInt(9e18), big.NewInt(int64(len(upkeepIDs)))))`
$DIR/integration-tests/smoke/keeper_test.go: `.Address()`
$DIR/integration-tests/smoke/keeper_test.go: `.NewInt(0)`
$DIR/integration-tests/smoke/keeper_test.go: `.Mul(big.NewInt(9e18), big.NewInt(int64(len(upkeepIDs))))`
$DIR/integration-tests/smoke/keeper_test.go: `.NewInt(9e18)`
$DIR/integration-tests/smoke/keeper_test.go: `.NewInt(int64(len(upkeepIDs)))`
$DIR/integration-tests/smoke/keeper_test.go: `.Info()`
$DIR/integration-tests/smoke/keeper_test.go: `.Msg("Adding funds to upkeeps")`
$DIR/integration-tests/smoke/keeper_test.go: `.AddUpkeepFunds(upkeepIDs[i], big.NewInt(9e18))`
$DIR/integration-tests/smoke/keeper_test.go: `.NewInt(9e18)`
$DIR/integration-tests/smoke/keeper_test.go: `.Eventually(func(g gomega.Gomega) {
for i := 0; i < len(upkeepIDs); i++ {
counter, err := consumers[i].Counter(testcontext.Get(t))
g.Expect(err).ShouldNot(gomega.HaveOccurred(), "Calling consumer's counter shouldn't fail")
g.Expect(counter.Int64()).Should(gomega.BeNumerically(">", int64(0)),
"Expected newly registered upkeep's counter to be greater than 0, but got %d", counter.Int64())
}
}, "1m", "1s")`
$DIR/integration-tests/smoke/keeper_test.go: `.Counter(testcontext.Get(t))`
$DIR/integration-tests/smoke/keeper_test.go: `.Get(t)`
$DIR/integration-tests/smoke/keeper_test.go: `.Expect(err)`
$DIR/integration-tests/smoke/keeper_test.go: `.ShouldNot(gomega.HaveOccurred(), "Calling consumer's counter shouldn't fail")`
$DIR/integration-tests/smoke/keeper_test.go: `.HaveOccurred()`
$DIR/integration-tests/smoke/keeper_test.go: `.Expect(counter.Int64())`
$DIR/integration-tests/smoke/keeper_test.go: `.Int64()`
$DIR/integration-tests/smoke/keeper_test.go: `.Should(gomega.BeNumerically(">", int64(0)),
"Expected newly registered upkeep's counter to be greater than 0, but got %d", counter.Int64())`
$DIR/integration-tests/smoke/keeper_test.go: `.BeNumerically(">", int64(0))`
$DIR/integration-tests/smoke/keeper_test.go: `.Int64()`
$DIR/integration-tests/smoke/keeper_test.go: `.Should(gomega.Succeed())`
$DIR/integration-tests/smoke/keeper_test.go: `.Succeed()`
$DIR/integration-tests/smoke/keeper_test.go: `.Run(fmt.Sprintf("registry_1_%d", registryVersion), func(t *testing.T) {
t.Parallel()
l := logging.GetTestLogger(t)
config, err := tc.GetConfig("Smoke", tc.Keeper)
require.NoError(t, err, "Failed to get config")
chainClient, chainlinkNodes, linkToken, _ := setupKeeperTest(l, t, &config)
sb, err := chainClient.Client.BlockNumber(context.Background())
require.NoError(t, err, "Failed to get start block")
registry, _, consumers, upkeepIDs := actions_seth.DeployKeeperContracts(
t,
registryVersion,
keeperDefaultRegistryConfig,
keeperDefaultUpkeepsToDeploy,
keeperDefaultUpkeepGasLimit,
linkToken,
chainClient,
big.NewInt(keeperDefaultLinkFunds),
)
_, err = actions.CreateKeeperJobsLocal(l, chainlinkNodes, registry, contracts.OCRv2Config{}, fmt.Sprint(chainClient.ChainID))
require.NoError(t, err, "Error creating keeper jobs")
t.Cleanup(func() {
actions_seth.GetStalenessReportCleanupFn(t, l, chainClient, sb, registry, registryVersion)()
})
var initialCounters = make([]*big.Int, len(upkeepIDs))
gom := gomega.NewGomegaWithT(t)
// Make sure the upkeeps are running before we remove a keeper
gom.Eventually(func(g gomega.Gomega) error {
for upkeepID := 0; upkeepID < len(upkeepIDs); upkeepID++ {
counter, err := consumers[upkeepID].Counter(testcontext.Get(t))
initialCounters[upkeepID] = counter
g.Expect(err).ShouldNot(gomega.HaveOccurred(), "Failed to retrieve consumer counter"+
" for upkeep with ID "+strconv.Itoa(upkeepID))
g.Expect(counter.Cmp(big.NewInt(0)) == 1, "Expected consumer counter to be greater than 0, but got %s", counter)
}
return nil
}, "1m", "1s").Should(gomega.Succeed())
keepers, err := registry.GetKeeperList(testcontext.Get(t))
require.NoError(t, err, "Error getting list of Keepers")
// Remove the first keeper from the list
require.GreaterOrEqual(t, len(keepers), 2, "Expected there to be at least 2 keepers")
newKeeperList := keepers[1:]
// Construct the addresses of the payees required by the SetKeepers function
payees := make([]string, len(keepers)-1)
for i := 0; i < len(payees); i++ {
payees[i], err = chainlinkNodes[0].PrimaryEthAddress()
require.NoError(t, err, "Error building payee list")
}
err = registry.SetKeepers(newKeeperList, payees, contracts.OCRv2Config{})
require.NoError(t, err, "Error setting new list of Keepers")
l.Info().Msg("Successfully removed keeper at address " + keepers[0] + " from the list of Keepers")
// The upkeeps should still perform and their counters should have increased compared to the first check
gom.Eventually(func(g gomega.Gomega) error {
for i := 0; i < len(upkeepIDs); i++ {
counter, err := consumers[i].Counter(testcontext.Get(t))
g.Expect(err).ShouldNot(gomega.HaveOccurred(), "Failed to retrieve consumer counter for upkeep at index %d", i)
g.Expect(counter.Cmp(initialCounters[i]) == 1, "Expected consumer counter to be greater "+
"than initial counter which was %s, but got %s", initialCounters[i], counter)
}
return nil
}, "1m", "1s").Should(gomega.Succeed())
})`
$DIR/integration-tests/smoke/keeper_test.go: `.Sprintf("registry_1_%d", registryVersion)`
$DIR/integration-tests/smoke/keeper_test.go: `.GetTestLogger(t)`
$DIR/integration-tests/smoke/keeper_test.go: `.GetConfig("Smoke", tc.Keeper)`
$DIR/integration-tests/smoke/keeper_test.go: `.Client.BlockNumber(context.Background())`
$DIR/integration-tests/smoke/keeper_test.go: `.Background()`
$DIR/integration-tests/smoke/keeper_test.go: `.DeployKeeperContracts(
t,
registryVersion,
keeperDefaultRegistryConfig,
keeperDefaultUpkeepsToDeploy,
keeperDefaultUpkeepGasLimit,
linkToken,
chainClient,
big.NewInt(keeperDefaultLinkFunds),
)`
$DIR/integration-tests/smoke/keeper_test.go: `.NewInt(keeperDefaultLinkFunds)`
$DIR/integration-tests/smoke/keeper_test.go: `.CreateKeeperJobsLocal(l, chainlinkNodes, registry, contracts.OCRv2Config{}, fmt.Sprint(chainClient.ChainID))`
$DIR/integration-tests/smoke/keeper_test.go: `.Sprint(chainClient.ChainID)`
$DIR/integration-tests/smoke/keeper_test.go: `.Cleanup(func() {
actions_seth.GetStalenessReportCleanupFn(t, l, chainClient, sb, registry, registryVersion)()
})`
$DIR/integration-tests/smoke/keeper_test.go: `.GetStalenessReportCleanupFn(t, l, chainClient, sb, registry, registryVersion)`
$DIR/integration-tests/smoke/keeper_test.go: `.NewGomegaWithT(t)`
$DIR/integration-tests/smoke/keeper_test.go: `.Eventually(func(g gomega.Gomega) error {
for upkeepID := 0; upkeepID < len(upkeepIDs); upkeepID++ {
counter, err := consumers[upkeepID].Counter(testcontext.Get(t))
initialCounters[upkeepID] = counter
g.Expect(err).ShouldNot(gomega.HaveOccurred(), "Failed to retrieve consumer counter"+
" for upkeep with ID "+strconv.Itoa(upkeepID))
g.Expect(counter.Cmp(big.NewInt(0)) == 1, "Expected consumer counter to be greater than 0, but got %s", counter)
}
return nil
}, "1m", "1s")`
$DIR/integration-tests/smoke/keeper_test.go: `.Counter(testcontext.Get(t))`
$DIR/integration-tests/smoke/keeper_test.go: `.Get(t)`
$DIR/integration-tests/smoke/keeper_test.go: `.Expect(err)`
$DIR/integration-tests/smoke/keeper_test.go: `.ShouldNot(gomega.HaveOccurred(), "Failed to retrieve consumer counter"+
" for upkeep with ID "+strconv.Itoa(upkeepID))`
$DIR/integration-tests/smoke/keeper_test.go: `.HaveOccurred()`
$DIR/integration-tests/smoke/keeper_test.go: `.Itoa(upkeepID)`
$DIR/integration-tests/smoke/keeper_test.go: `.Expect(counter.Cmp(big.NewInt(0)) == 1, "Expected consumer counter to be greater than 0, but got %s", counter)`
$DIR/integration-tests/smoke/keeper_test.go: `.Cmp(big.NewInt(0))`
$DIR/integration-tests/smoke/keeper_test.go: `.NewInt(0)`
$DIR/integration-tests/smoke/keeper_test.go: `.Should(gomega.Succeed())`
$DIR/integration-tests/smoke/keeper_test.go: `.Succeed()`
$DIR/integration-tests/smoke/keeper_test.go: `.GetKeeperList(testcontext.Get(t))`
$DIR/integration-tests/smoke/keeper_test.go: `.Get(t)`
$DIR/integration-tests/smoke/keeper_test.go: `.PrimaryEthAddress()`
$DIR/integration-tests/smoke/keeper_test.go: `.SetKeepers(newKeeperList, payees, contracts.OCRv2Config{})`
$DIR/integration-tests/smoke/keeper_test.go: `.Info()`
$DIR/integration-tests/smoke/keeper_test.go: `.Msg("Successfully removed keeper at address " + keepers[0] + " from the list of Keepers")`
$DIR/integration-tests/smoke/keeper_test.go: `.Eventually(func(g gomega.Gomega) error {
for i := 0; i < len(upkeepIDs); i++ {
counter, err := consumers[i].Counter(testcontext.Get(t))
g.Expect(err).ShouldNot(gomega.HaveOccurred(), "Failed to retrieve consumer counter for upkeep at index %d", i)
g.Expect(counter.Cmp(initialCounters[i]) == 1, "Expected consumer counter to be greater "+
"than initial counter which was %s, but got %s", initialCounters[i], counter)
}
return nil
}, "1m", "1s")`
$DIR/integration-tests/smoke/keeper_test.go: `.Counter(testcontext.Get(t))`
$DIR/integration-tests/smoke/keeper_test.go: `.Get(t)`
$DIR/integration-tests/smoke/keeper_test.go: `.Expect(err)`
$DIR/integration-tests/smoke/keeper_test.go: `.ShouldNot(gomega.HaveOccurred(), "Failed to retrieve consumer counter for upkeep at index %d", i)`
$DIR/integration-tests/smoke/keeper_test.go: `.HaveOccurred()`
$DIR/integration-tests/smoke/keeper_test.go: `.Expect(counter.Cmp(initialCounters[i]) == 1, "Expected consumer counter to be greater "+
"than initial counter which was %s, but got %s", initialCounters[i], counter)`
$DIR/integration-tests/smoke/keeper_test.go: `.Cmp(initialCounters[i])`
$DIR/integration-tests/smoke/keeper_test.go: `.Should(gomega.Succeed())`
$DIR/integration-tests/smoke/keeper_test.go: `.Succeed()`
$DIR/integration-tests/smoke/keeper_test.go: `.Run(fmt.Sprintf("registry_1_%d", registryVersion), func(t *testing.T) {
t.Parallel()
l := logging.GetTestLogger(t)
config, err := tc.GetConfig("Smoke", tc.Keeper)
require.NoError(t, err, "Failed to get config")
chainClient, chainlinkNodes, linkToken, _ := setupKeeperTest(l, t, &config)
sb, err := chainClient.Client.BlockNumber(context.Background())
require.NoError(t, err, "Failed to get start block")
registry, _, consumers, upkeepIDs := actions_seth.DeployKeeperContracts(
t,
registryVersion,
keeperDefaultRegistryConfig,
keeperDefaultUpkeepsToDeploy,
keeperDefaultUpkeepGasLimit,
linkToken,
chainClient,
big.NewInt(keeperDefaultLinkFunds),
)
gom := gomega.NewGomegaWithT(t)
_, err = actions.CreateKeeperJobsLocal(l, chainlinkNodes, registry, contracts.OCRv2Config{}, fmt.Sprint(chainClient.ChainID))
require.NoError(t, err, "Error creating keeper jobs")
t.Cleanup(func() {
actions_seth.GetStalenessReportCleanupFn(t, l, chainClient, sb, registry, registryVersion)()
})
// Observe that the upkeeps which are initially registered are performing
gom.Eventually(func(g gomega.Gomega) error {
for i := 0; i < len(upkeepIDs); i++ {
counter, err := consumers[i].Counter(testcontext.Get(t))
g.Expect(err).ShouldNot(gomega.HaveOccurred(), "Failed to retrieve consumer counter for upkeep at index %d", i)
g.Expect(counter.Int64()).Should(gomega.BeNumerically(">", int64(0)),
"Expected consumer counter to be greater than 0, but got %d")
}
return nil
}, "1m", "1s").Should(gomega.Succeed())
// Pause the registry
err = registry.Pause()
require.NoError(t, err, "Error pausing the registry")
// Store how many times each upkeep performed once the registry was successfully paused
var countersAfterPause = make([]*big.Int, len(upkeepIDs))
for i := 0; i < len(upkeepIDs); i++ {
countersAfterPause[i], err = consumers[i].Counter(testcontext.Get(t))
require.NoError(t, err, "Error retrieving consumer at index %d", i)
}
// After we paused the registry, the counters of all the upkeeps should stay constant
// because they are no longer getting serviced
gom.Consistently(func(g gomega.Gomega) {
for i := 0; i < len(upkeepIDs); i++ {
latestCounter, err := consumers[i].Counter(testcontext.Get(t))
require.NoError(t, err, "Error retrieving consumer contract at index %d", i)
g.Expect(latestCounter.Int64()).Should(gomega.Equal(countersAfterPause[i].Int64()),
"Expected consumer counter to remain constant at %d, but got %d",
countersAfterPause[i].Int64(), latestCounter.Int64())
}
}, "1m", "1s").Should(gomega.Succeed())
})`
$DIR/integration-tests/smoke/keeper_test.go: `.Sprintf("registry_1_%d", registryVersion)`
$DIR/integration-tests/smoke/keeper_test.go: `.GetTestLogger(t)`
$DIR/integration-tests/smoke/keeper_test.go: `.GetConfig("Smoke", tc.Keeper)`
$DIR/integration-tests/smoke/keeper_test.go: `.Client.BlockNumber(context.Background())`
$DIR/integration-tests/smoke/keeper_test.go: `.Background()`
$DIR/integration-tests/smoke/keeper_test.go: `.DeployKeeperContracts(
t,
registryVersion,
keeperDefaultRegistryConfig,
keeperDefaultUpkeepsToDeploy,
keeperDefaultUpkeepGasLimit,
linkToken,
chainClient,
big.NewInt(keeperDefaultLinkFunds),
)`
$DIR/integration-tests/smoke/keeper_test.go: `.NewInt(keeperDefaultLinkFunds)`
$DIR/integration-tests/smoke/keeper_test.go: `.NewGomegaWithT(t)`
$DIR/integration-tests/smoke/keeper_test.go: `.CreateKeeperJobsLocal(l, chainlinkNodes, registry, contracts.OCRv2Config{}, fmt.Sprint(chainClient.ChainID))`
$DIR/integration-tests/smoke/keeper_test.go: `.Sprint(chainClient.ChainID)`
$DIR/integration-tests/smoke/keeper_test.go: `.Cleanup(func() {
actions_seth.GetStalenessReportCleanupFn(t, l, chainClient, sb, registry, registryVersion)()
})`
$DIR/integration-tests/smoke/keeper_test.go: `.GetStalenessReportCleanupFn(t, l, chainClient, sb, registry, registryVersion)`
$DIR/integration-tests/smoke/keeper_test.go: `.Eventually(func(g gomega.Gomega) error {
for i := 0; i < len(upkeepIDs); i++ {
counter, err := consumers[i].Counter(testcontext.Get(t))
g.Expect(err).ShouldNot(gomega.HaveOccurred(), "Failed to retrieve consumer counter for upkeep at index %d", i)
g.Expect(counter.Int64()).Should(gomega.BeNumerically(">", int64(0)),
"Expected consumer counter to be greater than 0, but got %d")
}
return nil
}, "1m", "1s")`
$DIR/integration-tests/smoke/keeper_test.go: `.Counter(testcontext.Get(t))`
$DIR/integration-tests/smoke/keeper_test.go: `.Get(t)`
$DIR/integration-tests/smoke/keeper_test.go: `.Expect(err)`
$DIR/integration-tests/smoke/keeper_test.go: `.ShouldNot(gomega.HaveOccurred(), "Failed to retrieve consumer counter for upkeep at index %d", i)`
$DIR/integration-tests/smoke/keeper_test.go: `.HaveOccurred()`
$DIR/integration-tests/smoke/keeper_test.go: `.Expect(counter.Int64())`
$DIR/integration-tests/smoke/keeper_test.go: `.Int64()`
$DIR/integration-tests/smoke/keeper_test.go: `.Should(gomega.BeNumerically(">", int64(0)),
"Expected consumer counter to be greater than 0, but got %d")`
$DIR/integration-tests/smoke/keeper_test.go: `.BeNumerically(">", int64(0))`
$DIR/integration-tests/smoke/keeper_test.go: `.Should(gomega.Succeed())`
$DIR/integration-tests/smoke/keeper_test.go: `.Succeed()`
$DIR/integration-tests/smoke/keeper_test.go: `.Pause()`
$DIR/integration-tests/smoke/keeper_test.go: `.Counter(testcontext.Get(t))`
$DIR/integration-tests/smoke/keeper_test.go: `.Get(t)`
$DIR/integration-tests/smoke/keeper_test.go: `.Consistently(func(g gomega.Gomega) {
for i := 0; i < len(upkeepIDs); i++ {
latestCounter, err := consumers[i].Counter(testcontext.Get(t))
require.NoError(t, err, "Error retrieving consumer contract at index %d", i)
g.Expect(latestCounter.Int64()).Should(gomega.Equal(countersAfterPause[i].Int64()),
"Expected consumer counter to remain constant at %d, but got %d",
countersAfterPause[i].Int64(), latestCounter.Int64())
}
}, "1m", "1s")`
$DIR/integration-tests/smoke/keeper_test.go: `.Counter(testcontext.Get(t))`
$DIR/integration-tests/smoke/keeper_test.go: `.Get(t)`
$DIR/integration-tests/smoke/keeper_test.go: `.Expect(latestCounter.Int64())`
$DIR/integration-tests/smoke/keeper_test.go: `.Int64()`
$DIR/integration-tests/smoke/keeper_test.go: `.Should(gomega.Equal(countersAfterPause[i].Int64()),
"Expected consumer counter to remain constant at %d, but got %d",
countersAfterPause[i].Int64(), latestCounter.Int64())`
$DIR/integration-tests/smoke/keeper_test.go: `.Equal(countersAfterPause[i].Int64())`
$DIR/integration-tests/smoke/keeper_test.go: `.Int64()`
$DIR/integration-tests/smoke/keeper_test.go: `.Int64()`
$DIR/integration-tests/smoke/keeper_test.go: `.Int64()`
$DIR/integration-tests/smoke/keeper_test.go: `.Should(gomega.Succeed())`
$DIR/integration-tests/smoke/keeper_test.go: `.Succeed()`
$DIR/integration-tests/smoke/keeper_test.go: `.GetTestLogger(t)`
$DIR/integration-tests/smoke/keeper_test.go: `.GetConfig("Smoke", tc.Keeper)`
$DIR/integration-tests/smoke/keeper_test.go: `.Client.BlockNumber(context.Background())`
$DIR/integration-tests/smoke/keeper_test.go: `.Background()`
$DIR/integration-tests/smoke/keeper_test.go: `.DeployKeeperContracts(
t,
ethereum.RegistryVersion_1_2,
keeperDefaultRegistryConfig,
keeperDefaultUpkeepsToDeploy,
keeperDefaultUpkeepGasLimit,
linkToken,
chainClient,
big.NewInt(keeperDefaultLinkFunds),
)`
$DIR/integration-tests/smoke/keeper_test.go: `.NewInt(keeperDefaultLinkFunds)`
$DIR/integration-tests/smoke/keeper_test.go: `.CreateKeeperJobsLocal(l, chainlinkNodes, registry, contracts.OCRv2Config{}, fmt.Sprint(chainClient.ChainID))`
$DIR/integration-tests/smoke/keeper_test.go: `.Sprint(chainClient.ChainID)`
$DIR/integration-tests/smoke/keeper_test.go: `.Cleanup(func() {
actions_seth.GetStalenessReportCleanupFn(t, l, chainClient, sb, registry, ethereum.RegistryVersion_1_2)()
})`
$DIR/integration-tests/smoke/keeper_test.go: `.GetStalenessReportCleanupFn(t, l, chainClient, sb, registry, ethereum.RegistryVersion_1_2)`
$DIR/integration-tests/smoke/keeper_test.go: `.DeployKeeperContracts(
t,
ethereum.RegistryVersion_1_2,
keeperDefaultRegistryConfig,
keeperDefaultUpkeepsToDeploy,
keeperDefaultUpkeepGasLimit,
linkToken,
chainClient,
big.NewInt(keeperDefaultLinkFunds),
)`
$DIR/integration-tests/smoke/keeper_test.go: `.NewInt(keeperDefaultLinkFunds)`
$DIR/integration-tests/smoke/keeper_test.go: `.CreateKeeperJobsLocal(l, chainlinkNodes, secondRegistry, contracts.OCRv2Config{}, fmt.Sprint(chainClient.ChainID))`
$DIR/integration-tests/smoke/keeper_test.go: `.Sprint(chainClient.ChainID)`
$DIR/integration-tests/smoke/keeper_test.go: `.SetMigrationPermissions(common.HexToAddress(secondRegistry.Address()), 3)`
$DIR/integration-tests/smoke/keeper_test.go: `.HexToAddress(secondRegistry.Address())`
$DIR/integration-tests/smoke/keeper_test.go: `.Address()`
$DIR/integration-tests/smoke/keeper_test.go: `.SetMigrationPermissions(common.HexToAddress(registry.Address()), 3)`
$DIR/integration-tests/smoke/keeper_test.go: `.HexToAddress(registry.Address())`
$DIR/integration-tests/smoke/keeper_test.go: `.Address()`
$DIR/integration-tests/smoke/keeper_test.go: `.NewGomegaWithT(t)`
$DIR/integration-tests/smoke/keeper_test.go: `.Info()`
$DIR/integration-tests/smoke/keeper_test.go: `.Msg("Waiting for 1m for upkeeps to be performed before migration")`
$DIR/integration-tests/smoke/keeper_test.go: `.Eventually(func(g gomega.Gomega) {
for i := 0; i < len(upkeepIDs); i++ {
counterBeforeMigration, err := consumers[i].Counter(testcontext.Get(t))
g.Expect(err).ShouldNot(gomega.HaveOccurred(), "Calling consumer's counter shouldn't fail")
g.Expect(counterBeforeMigration.Int64()).Should(gomega.BeNumerically(">", int64(0)),
"Expected consumer counter to be greater than 0, but got %s", counterBeforeMigration)
}
}, "1m", "1s")`
$DIR/integration-tests/smoke/keeper_test.go: `.Counter(testcontext.Get(t))`
$DIR/integration-tests/smoke/keeper_test.go: `.Get(t)`
$DIR/integration-tests/smoke/keeper_test.go: `.Expect(err)`
$DIR/integration-tests/smoke/keeper_test.go: `.ShouldNot(gomega.HaveOccurred(), "Calling consumer's counter shouldn't fail")`
$DIR/integration-tests/smoke/keeper_test.go: `.HaveOccurred()`
$DIR/integration-tests/smoke/keeper_test.go: `.Expect(counterBeforeMigration.Int64())`
$DIR/integration-tests/smoke/keeper_test.go: `.Int64()`
$DIR/integration-tests/smoke/keeper_test.go: `.Should(gomega.BeNumerically(">", int64(0)),
"Expected consumer counter to be greater than 0, but got %s", counterBeforeMigration)`
$DIR/integration-tests/smoke/keeper_test.go: `.BeNumerically(">", int64(0))`
$DIR/integration-tests/smoke/keeper_test.go: `.Should(gomega.Succeed())`
$DIR/integration-tests/smoke/keeper_test.go: `.Succeed()`
$DIR/integration-tests/smoke/keeper_test.go: `.Migrate([]*big.Int{upkeepIDs[i]}, common.HexToAddress(secondRegistry.Address()))`
$DIR/integration-tests/smoke/keeper_test.go: `.HexToAddress(secondRegistry.Address())`
$DIR/integration-tests/smoke/keeper_test.go: `.Address()`
$DIR/integration-tests/smoke/keeper_test.go: `.Pause()`
$DIR/integration-tests/smoke/keeper_test.go: `.Counter(testcontext.Get(t))`
$DIR/integration-tests/smoke/keeper_test.go: `.Get(t)`
$DIR/integration-tests/smoke/keeper_test.go: `.Info()`
$DIR/integration-tests/smoke/keeper_test.go: `.Msg("Waiting for 1m for upkeeps to be performed after migration")`
$DIR/integration-tests/smoke/keeper_test.go: `.Eventually(func(g gomega.Gomega) {
for i := 0; i < len(upkeepIDs); i++ {
currentCounter, err := consumers[i].Counter(testcontext.Get(t))
counterAfterMigration := counterAfterMigrationPerUpkeep[upkeepIDs[i]]
g.Expect(err).ShouldNot(gomega.HaveOccurred(), "Calling consumer's counter shouldn't fail")
g.Expect(currentCounter.Int64()).Should(gomega.BeNumerically(">", counterAfterMigration.Int64()),
"Expected counter to have increased, but stayed constant at %s", counterAfterMigration)
}
}, "1m", "1s")`
$DIR/integration-tests/smoke/keeper_test.go: `.Counter(testcontext.Get(t))`
$DIR/integration-tests/smoke/keeper_test.go: `.Get(t)`
$DIR/integration-tests/smoke/keeper_test.go: `.Expect(err)`
$DIR/integration-tests/smoke/keeper_test.go: `.ShouldNot(gomega.HaveOccurred(), "Calling consumer's counter shouldn't fail")`
$DIR/integration-tests/smoke/keeper_test.go: `.HaveOccurred()`
$DIR/integration-tests/smoke/keeper_test.go: `.Expect(currentCounter.Int64())`
$DIR/integration-tests/smoke/keeper_test.go: `.Int64()`
$DIR/integration-tests/smoke/keeper_test.go: `.Should(gomega.BeNumerically(">", counterAfterMigration.Int64()),
"Expected counter to have increased, but stayed constant at %s", counterAfterMigration)`
$DIR/integration-tests/smoke/keeper_test.go: `.BeNumerically(">", counterAfterMigration.Int64())`
$DIR/integration-tests/smoke/keeper_test.go: `.Int64()`
$DIR/integration-tests/smoke/keeper_test.go: `.Succeed()`
$DIR/integration-tests/smoke/keeper_test.go: `.Run(fmt.Sprintf("registry_1_%d", registryVersion), func(t *testing.T) {
t.Parallel()
l := logging.GetTestLogger(t)
config, err := tc.GetConfig("Smoke", tc.Keeper)
require.NoError(t, err, "Failed to get config")
chainClient, chainlinkNodes, linkToken, _ := setupKeeperTest(l, t, &config)
sb, err := chainClient.Client.BlockNumber(context.Background())
require.NoError(t, err, "Failed to get start block")
registry, _, consumers, upkeepIDs := actions_seth.DeployKeeperContracts(
t,
registryVersion,
lowBCPTRegistryConfig,
keeperDefaultUpkeepsToDeploy,
keeperDefaultUpkeepGasLimit,
linkToken,
chainClient,
big.NewInt(keeperDefaultLinkFunds),
)
jobs, err := actions.CreateKeeperJobsLocal(l, chainlinkNodes, registry, contracts.OCRv2Config{}, fmt.Sprint(chainClient.ChainID))
require.NoError(t, err, "Error creating keeper jobs")
t.Cleanup(func() {
actions_seth.GetStalenessReportCleanupFn(t, l, chainClient, sb, registry, registryVersion)()
})
var initialCounters = make([]*big.Int, len(upkeepIDs))
gom := gomega.NewGomegaWithT(t)
// Watch upkeeps being performed and store their counters in order to compare them later in the test
gom.Eventually(func(g gomega.Gomega) error {
for i := 0; i < len(upkeepIDs); i++ {
counter, err := consumers[i].Counter(testcontext.Get(t))
initialCounters[i] = counter
g.Expect(err).ShouldNot(gomega.HaveOccurred(), "Failed to retrieve consumer counter for upkeep at index %d", i)
g.Expect(counter.Int64()).Should(gomega.BeNumerically(">", int64(0)),
"Expected consumer counter to be greater than 0, but got %d", counter.Int64())
}
return nil
}, "1m", "1s").Should(gomega.Succeed())
// Take down half of the Keeper nodes by deleting the Keeper job registered above (after registry deployment)
firstHalfToTakeDown := chainlinkNodes[:len(chainlinkNodes)/2+1]
for i, nodeToTakeDown := range firstHalfToTakeDown {
err = nodeToTakeDown.MustDeleteJob(jobs[0].Data.ID)
require.NoError(t, err, "Error deleting job from node %d", i)
}
l.Info().Msg("Successfully managed to take down the first half of the nodes")
// Assert that upkeeps are still performed and their counters have increased
gom.Eventually(func(g gomega.Gomega) error {
for i := 0; i < len(upkeepIDs); i++ {
currentCounter, err := consumers[i].Counter(testcontext.Get(t))
g.Expect(err).ShouldNot(gomega.HaveOccurred(), "Failed to retrieve consumer counter for upkeep at index %d", i)
g.Expect(currentCounter.Int64()).Should(gomega.BeNumerically(">", initialCounters[i].Int64()),
"Expected counter to have increased from initial value of %s, but got %s",
initialCounters[i], currentCounter)
}
return nil
}, "3m", "1s").Should(gomega.Succeed())
// Take down the other half of the Keeper nodes
nodesAndJobs := []nodeAndJob{}
for i, n := range chainlinkNodes {
nodesAndJobs = append(nodesAndJobs, nodeAndJob{node: n, job: jobs[i]})
}
secondHalfToTakeDown := nodesAndJobs[len(nodesAndJobs)/2+1:]
for i, nodeToTakeDown := range secondHalfToTakeDown {
err = nodeToTakeDown.node.MustDeleteJob(nodeToTakeDown.job.Data.ID)
require.NoError(t, err, "Error deleting job from node %d", i)
}
l.Info().Msg("Successfully managed to take down the second half of the nodes")
// See how many times each upkeep was executed
var countersAfterNoMoreNodes = make([]*big.Int, len(upkeepIDs))
for i := 0; i < len(upkeepIDs); i++ {
countersAfterNoMoreNodes[i], err = consumers[i].Counter(testcontext.Get(t))
require.NoError(t, err, "Error retrieving consumer counter %d", i)
l.Info().
Int("Index", i).
Int64("Upkeeps", countersAfterNoMoreNodes[i].Int64()).
Msg("Upkeeps Performed")
}
// Once all the nodes are taken down, there might be some straggling transactions which went through before
// all the nodes were taken down. Every keeper node can have at most 1 straggling transaction per upkeep,
// so a +6 on the upper limit side should be sufficient.
gom.Consistently(func(g gomega.Gomega) {
for i := 0; i < len(upkeepIDs); i++ {
latestCounter, err := consumers[i].Counter(testcontext.Get(t))
g.Expect(err).ShouldNot(gomega.HaveOccurred(), "Failed to retrieve consumer counter for upkeep at index %d", i)
g.Expect(latestCounter.Int64()).Should(gomega.BeNumerically("<=",
countersAfterNoMoreNodes[i].Int64()+numUpkeepsAllowedForStragglingTxs,
),
"Expected consumer counter to not have increased more than %d, but got %d",
countersAfterNoMoreNodes[i].Int64()+numUpkeepsAllowedForStragglingTxs, latestCounter.Int64())
}
}, "3m", "1s").Should(gomega.Succeed())
})`
$DIR/integration-tests/smoke/keeper_test.go: `.Sprintf("registry_1_%d", registryVersion)`
$DIR/integration-tests/smoke/keeper_test.go: `.GetTestLogger(t)`
$DIR/integration-tests/smoke/keeper_test.go: `.GetConfig("Smoke", tc.Keeper)`
$DIR/integration-tests/smoke/keeper_test.go: `.Client.BlockNumber(context.Background())`
$DIR/integration-tests/smoke/keeper_test.go: `.Background()`
$DIR/integration-tests/smoke/keeper_test.go: `.DeployKeeperContracts(
t,
registryVersion,
lowBCPTRegistryConfig,
keeperDefaultUpkeepsToDeploy,
keeperDefaultUpkeepGasLimit,
linkToken,
chainClient,
big.NewInt(keeperDefaultLinkFunds),
)`
$DIR/integration-tests/smoke/keeper_test.go: `.NewInt(keeperDefaultLinkFunds)`
$DIR/integration-tests/smoke/keeper_test.go: `.CreateKeeperJobsLocal(l, chainlinkNodes, registry, contracts.OCRv2Config{}, fmt.Sprint(chainClient.ChainID))`
$DIR/integration-tests/smoke/keeper_test.go: `.Sprint(chainClient.ChainID)`
$DIR/integration-tests/smoke/keeper_test.go: `.Cleanup(func() {
actions_seth.GetStalenessReportCleanupFn(t, l, chainClient, sb, registry, registryVersion)()
})`
$DIR/integration-tests/smoke/keeper_test.go: `.GetStalenessReportCleanupFn(t, l, chainClient, sb, registry, registryVersion)`
$DIR/integration-tests/smoke/keeper_test.go: `.NewGomegaWithT(t)`
$DIR/integration-tests/smoke/keeper_test.go: `.Eventually(func(g gomega.Gomega) error {
for i := 0; i < len(upkeepIDs); i++ {
counter, err := consumers[i].Counter(testcontext.Get(t))
initialCounters[i] = counter
g.Expect(err).ShouldNot(gomega.HaveOccurred(), "Failed to retrieve consumer counter for upkeep at index %d", i)
g.Expect(counter.Int64()).Should(gomega.BeNumerically(">", int64(0)),
"Expected consumer counter to be greater than 0, but got %d", counter.Int64())
}
return nil
}, "1m", "1s")`
$DIR/integration-tests/smoke/keeper_test.go: `.Counter(testcontext.Get(t))`
$DIR/integration-tests/smoke/keeper_test.go: `.Get(t)`
$DIR/integration-tests/smoke/keeper_test.go: `.Expect(err)`
$DIR/integration-tests/smoke/keeper_test.go: `.ShouldNot(gomega.HaveOccurred(), "Failed to retrieve consumer counter for upkeep at index %d", i)`
$DIR/integration-tests/smoke/keeper_test.go: `.HaveOccurred()`
$DIR/integration-tests/smoke/keeper_test.go: `.Expect(counter.Int64())`
$DIR/integration-tests/smoke/keeper_test.go: `.Int64()`
$DIR/integration-tests/smoke/keeper_test.go: `.Should(gomega.BeNumerically(">", int64(0)),
"Expected consumer counter to be greater than 0, but got %d", counter.Int64())`
$DIR/integration-tests/smoke/keeper_test.go: `.BeNumerically(">", int64(0))`
$DIR/integration-tests/smoke/keeper_test.go: `.Int64()`
$DIR/integration-tests/smoke/keeper_test.go: `.Should(gomega.Succeed())`
$DIR/integration-tests/smoke/keeper_test.go: `.Succeed()`
$DIR/integration-tests/smoke/keeper_test.go: `.MustDeleteJob(jobs[0].Data.ID)`
$DIR/integration-tests/smoke/keeper_test.go: `.Info()`
$DIR/integration-tests/smoke/keeper_test.go: `.Msg("Successfully managed to take down the first half of the nodes")`
$DIR/integration-tests/smoke/keeper_test.go: `.Eventually(func(g gomega.Gomega) error {
for i := 0; i < len(upkeepIDs); i++ {
currentCounter, err := consumers[i].Counter(testcontext.Get(t))
g.Expect(err).ShouldNot(gomega.HaveOccurred(), "Failed to retrieve consumer counter for upkeep at index %d", i)
g.Expect(currentCounter.Int64()).Should(gomega.BeNumerically(">", initialCounters[i].Int64()),
"Expected counter to have increased from initial value of %s, but got %s",
initialCounters[i], currentCounter)
}
return nil
}, "3m", "1s")`
$DIR/integration-tests/smoke/keeper_test.go: `.Counter(testcontext.Get(t))`
$DIR/integration-tests/smoke/keeper_test.go: `.Get(t)`
$DIR/integration-tests/smoke/keeper_test.go: `.Expect(err)`
$DIR/integration-tests/smoke/keeper_test.go: `.ShouldNot(gomega.HaveOccurred(), "Failed to retrieve consumer counter for upkeep at index %d", i)`
$DIR/integration-tests/smoke/keeper_test.go: `.HaveOccurred()`
$DIR/integration-tests/smoke/keeper_test.go: `.Expect(currentCounter.Int64())`
$DIR/integration-tests/smoke/keeper_test.go: `.Int64()`
$DIR/integration-tests/smoke/keeper_test.go: `.Should(gomega.BeNumerically(">", initialCounters[i].Int64()),
"Expected counter to have increased from initial value of %s, but got %s",
initialCounters[i], currentCounter)`
$DIR/integration-tests/smoke/keeper_test.go: `.BeNumerically(">", initialCounters[i].Int64())`
$DIR/integration-tests/smoke/keeper_test.go: `.Int64()`
$DIR/integration-tests/smoke/keeper_test.go: `.Should(gomega.Succeed())`
$DIR/integration-tests/smoke/keeper_test.go: `.Succeed()`
$DIR/integration-tests/smoke/keeper_test.go: `.node.MustDeleteJob(nodeToTakeDown.job.Data.ID)`
$DIR/integration-tests/smoke/keeper_test.go: `.Info()`
$DIR/integration-tests/smoke/keeper_test.go: `.Msg("Successfully managed to take down the second half of the nodes")`
$DIR/integration-tests/smoke/keeper_test.go: `.Counter(testcontext.Get(t))`
$DIR/integration-tests/smoke/keeper_test.go: `.Get(t)`
$DIR/integration-tests/smoke/keeper_test.go: `.Info()`
$DIR/integration-tests/smoke/keeper_test.go: `.
Int("Index", i)`
$DIR/integration-tests/smoke/keeper_test.go: `.
Int64("Upkeeps", countersAfterNoMoreNodes[i].Int64())`
$DIR/integration-tests/smoke/keeper_test.go: `.Int64()`
$DIR/integration-tests/smoke/keeper_test.go: `.
Msg("Upkeeps Performed")`
$DIR/integration-tests/smoke/keeper_test.go: `.Consistently(func(g gomega.Gomega) {
for i := 0; i < len(upkeepIDs); i++ {
latestCounter, err := consumers[i].Counter(testcontext.Get(t))
g.Expect(err).ShouldNot(gomega.HaveOccurred(), "Failed to retrieve consumer counter for upkeep at index %d", i)
g.Expect(latestCounter.Int64()).Should(gomega.BeNumerically("<=",
countersAfterNoMoreNodes[i].Int64()+numUpkeepsAllowedForStragglingTxs,
),
"Expected consumer counter to not have increased more than %d, but got %d",
countersAfterNoMoreNodes[i].Int64()+numUpkeepsAllowedForStragglingTxs, latestCounter.Int64())
}
}, "3m", "1s")`
$DIR/integration-tests/smoke/keeper_test.go: `.Counter(testcontext.Get(t))`
$DIR/integration-tests/smoke/keeper_test.go: `.Get(t)`
$DIR/integration-tests/smoke/keeper_test.go: `.Expect(err)`
$DIR/integration-tests/smoke/keeper_test.go: `.ShouldNot(gomega.HaveOccurred(), "Failed to retrieve consumer counter for upkeep at index %d", i)`
$DIR/integration-tests/smoke/keeper_test.go: `.HaveOccurred()`
$DIR/integration-tests/smoke/keeper_test.go: `.Expect(latestCounter.Int64())`
$DIR/integration-tests/smoke/keeper_test.go: `.Int64()`
$DIR/integration-tests/smoke/keeper_test.go: `.Should(gomega.BeNumerically("<=",
countersAfterNoMoreNodes[i].Int64()+numUpkeepsAllowedForStragglingTxs,
),
"Expected consumer counter to not have increased more than %d, but got %d",
countersAfterNoMoreNodes[i].Int64()+numUpkeepsAllowedForStragglingTxs, latestCounter.Int64())`
$DIR/integration-tests/smoke/keeper_test.go: `.BeNumerically("<=",
countersAfterNoMoreNodes[i].Int64()+numUpkeepsAllowedForStragglingTxs,
)`
$DIR/integration-tests/smoke/keeper_test.go: `.Int64()`
$DIR/integration-tests/smoke/keeper_test.go: `.Int64()`
$DIR/integration-tests/smoke/keeper_test.go: `.Int64()`
$DIR/integration-tests/smoke/keeper_test.go: `.Should(gomega.Succeed())`
$DIR/integration-tests/smoke/keeper_test.go: `.Succeed()`
$DIR/integration-tests/smoke/keeper_test.go: `.GetTestLogger(t)`
$DIR/integration-tests/smoke/keeper_test.go: `.GetConfig("Smoke", tc.Keeper)`
$DIR/integration-tests/smoke/keeper_test.go: `.Client.BlockNumber(context.Background())`
$DIR/integration-tests/smoke/keeper_test.go: `.Background()`
$DIR/integration-tests/smoke/keeper_test.go: `.DeployKeeperContracts(
t,
ethereum.RegistryVersion_1_3,
lowBCPTRegistryConfig,
keeperDefaultUpkeepsToDeploy,
keeperDefaultUpkeepGasLimit,
linkToken,
chainClient,
big.NewInt(keeperDefaultLinkFunds),
)`
$DIR/integration-tests/smoke/keeper_test.go: `.NewInt(keeperDefaultLinkFunds)`
$DIR/integration-tests/smoke/keeper_test.go: `.CreateKeeperJobsLocal(l, chainlinkNodes, registry, contracts.OCRv2Config{}, fmt.Sprint(chainClient.ChainID))`
$DIR/integration-tests/smoke/keeper_test.go: `.Sprint(chainClient.ChainID)`
$DIR/integration-tests/smoke/keeper_test.go: `.Cleanup(func() {
actions_seth.GetStalenessReportCleanupFn(t, l, chainClient, sb, registry, ethereum.RegistryVersion_1_3)()
})`
$DIR/integration-tests/smoke/keeper_test.go: `.GetStalenessReportCleanupFn(t, l, chainClient, sb, registry, ethereum.RegistryVersion_1_3)`
$DIR/integration-tests/smoke/keeper_test.go: `.NewGomegaWithT(t)`
$DIR/integration-tests/smoke/keeper_test.go: `.Eventually(func(g gomega.Gomega) error {
// Check if the upkeeps are performing multiple times by analysing their counters and checking they are greater than 5
for i := 0; i < len(upkeepIDs); i++ {
counter, err := consumers[i].Counter(testcontext.Get(t))
g.Expect(err).ShouldNot(gomega.HaveOccurred(), "Failed to retrieve consumer counter for upkeep at index %d", i)
g.Expect(counter.Int64()).Should(gomega.BeNumerically(">", int64(5)),
"Expected consumer counter to be greater than 5, but got %d", counter.Int64())
l.Info().Int64("Upkeep counter", counter.Int64()).Msg("Number of upkeeps performed")
}
return nil
}, "3m", "1s")`
$DIR/integration-tests/smoke/keeper_test.go: `.Counter(testcontext.Get(t))`
$DIR/integration-tests/smoke/keeper_test.go: `.Get(t)`
$DIR/integration-tests/smoke/keeper_test.go: `.Expect(err)`
$DIR/integration-tests/smoke/keeper_test.go: `.ShouldNot(gomega.HaveOccurred(), "Failed to retrieve consumer counter for upkeep at index %d", i)`
$DIR/integration-tests/smoke/keeper_test.go: `.HaveOccurred()`
$DIR/integration-tests/smoke/keeper_test.go: `.Expect(counter.Int64())`
$DIR/integration-tests/smoke/keeper_test.go: `.Int64()`
$DIR/integration-tests/smoke/keeper_test.go: `.Should(gomega.BeNumerically(">", int64(5)),
"Expected consumer counter to be greater than 5, but got %d", counter.Int64())`
$DIR/integration-tests/smoke/keeper_test.go: `.BeNumerically(">", int64(5))`
$DIR/integration-tests/smoke/keeper_test.go: `.Int64()`
$DIR/integration-tests/smoke/keeper_test.go: `.Info()`
$DIR/integration-tests/smoke/keeper_test.go: `.Int64("Upkeep counter", counter.Int64())`
$DIR/integration-tests/smoke/keeper_test.go: `.Int64()`
$DIR/integration-tests/smoke/keeper_test.go: `.Msg("Number of upkeeps performed")`
$DIR/integration-tests/smoke/keeper_test.go: `.Should(gomega.Succeed())`
$DIR/integration-tests/smoke/keeper_test.go: `.Succeed()`
$DIR/integration-tests/smoke/keeper_test.go: `.PauseUpkeep(upkeepIDs[i])`
$DIR/integration-tests/smoke/keeper_test.go: `.Counter(testcontext.Get(t))`
$DIR/integration-tests/smoke/keeper_test.go: `.Get(t)`
$DIR/integration-tests/smoke/keeper_test.go: `.Info()`
$DIR/integration-tests/smoke/keeper_test.go: `.
Int("Index", i)`
$DIR/integration-tests/smoke/keeper_test.go: `.
Int64("Upkeeps", countersAfterPause[i].Int64())`
$DIR/integration-tests/smoke/keeper_test.go: `.Int64()`
$DIR/integration-tests/smoke/keeper_test.go: `.
Msg("Paused Upkeep")`
$DIR/integration-tests/smoke/keeper_test.go: `.Consistently(func(g gomega.Gomega) {
for i := 0; i < len(upkeepIDs); i++ {
// In most cases counters should remain constant, but there might be a straggling perform tx which
// gets committed later. Since every keeper node cannot have more than 1 straggling tx, it
// is sufficient to check that the upkeep count does not increase by more than 6.
latestCounter, err := consumers[i].Counter(testcontext.Get(t))
require.NoError(t, err, "Error retrieving counter at index %d", i)
g.Expect(latestCounter.Int64()).Should(gomega.BeNumerically("<=", countersAfterPause[i].Int64()+numUpkeepsAllowedForStragglingTxs),
"Expected consumer counter not have increased more than %d, but got %d",
countersAfterPause[i].Int64()+numUpkeepsAllowedForStragglingTxs, latestCounter.Int64())
}
}, "1m", "1s")`
$DIR/integration-tests/smoke/keeper_test.go: `.Counter(testcontext.Get(t))`
$DIR/integration-tests/smoke/keeper_test.go: `.Get(t)`
$DIR/integration-tests/smoke/keeper_test.go: `.Expect(latestCounter.Int64())`
$DIR/integration-tests/smoke/keeper_test.go: `.Int64()`
$DIR/integration-tests/smoke/keeper_test.go: `.Should(gomega.BeNumerically("<=", countersAfterPause[i].Int64()+numUpkeepsAllowedForStragglingTxs),
"Expected consumer counter not have increased more than %d, but got %d",
countersAfterPause[i].Int64()+numUpkeepsAllowedForStragglingTxs, latestCounter.Int64())`
$DIR/integration-tests/smoke/keeper_test.go: `.BeNumerically("<=", countersAfterPause[i].Int64()+numUpkeepsAllowedForStragglingTxs)`
$DIR/integration-tests/smoke/keeper_test.go: `.Int64()`
$DIR/integration-tests/smoke/keeper_test.go: `.Int64()`
$DIR/integration-tests/smoke/keeper_test.go: `.Int64()`
$DIR/integration-tests/smoke/keeper_test.go: `.Should(gomega.Succeed())`
$DIR/integration-tests/smoke/keeper_test.go: `.Succeed()`
$DIR/integration-tests/smoke/keeper_test.go: `.UnpauseUpkeep(upkeepIDs[i])`
$DIR/integration-tests/smoke/keeper_test.go: `.Eventually(func(g gomega.Gomega) error {
// Check if the upkeeps are performing multiple times by analysing their counters and checking they are greater than 5 + numbers of performing before pause
for i := 0; i < len(upkeepIDs); i++ {
counter, err := consumers[i].Counter(testcontext.Get(t))
g.Expect(err).ShouldNot(gomega.HaveOccurred(), "Failed to retrieve consumer counter"+
" for upkeep at index %d", i)
g.Expect(counter.Int64()).Should(gomega.BeNumerically(">", int64(5)+countersAfterPause[i].Int64()),
"Expected consumer counter to be greater than %d, but got %d", int64(5)+countersAfterPause[i].Int64(), counter.Int64())
l.Info().Int64("Upkeeps", counter.Int64()).Msg("Upkeeps Performed")
}
return nil
}, "3m", "1s")`
$DIR/integration-tests/smoke/keeper_test.go: `.Counter(testcontext.Get(t))`
$DIR/integration-tests/smoke/keeper_test.go: `.Get(t)`
$DIR/integration-tests/smoke/keeper_test.go: `.Expect(err)`
$DIR/integration-tests/smoke/keeper_test.go: `.ShouldNot(gomega.HaveOccurred(), "Failed to retrieve consumer counter"+
" for upkeep at index %d", i)`
$DIR/integration-tests/smoke/keeper_test.go: `.HaveOccurred()`
$DIR/integration-tests/smoke/keeper_test.go: `.Expect(counter.Int64())`
$DIR/integration-tests/smoke/keeper_test.go: `.Int64()`
$DIR/integration-tests/smoke/keeper_test.go: `.Should(gomega.BeNumerically(">", int64(5)+countersAfterPause[i].Int64()),
"Expected consumer counter to be greater than %d, but got %d", int64(5)+countersAfterPause[i].Int64(), counter.Int64())`
$DIR/integration-tests/smoke/keeper_test.go: `.BeNumerically(">", int64(5)+countersAfterPause[i].Int64())`
$DIR/integration-tests/smoke/keeper_test.go: `.Int64()`
$DIR/integration-tests/smoke/keeper_test.go: `.Int64()`
$DIR/integration-tests/smoke/keeper_test.go: `.Int64()`
$DIR/integration-tests/smoke/keeper_test.go: `.Info()`
$DIR/integration-tests/smoke/keeper_test.go: `.Int64("Upkeeps", counter.Int64())`
$DIR/integration-tests/smoke/keeper_test.go: `.Int64()`
$DIR/integration-tests/smoke/keeper_test.go: `.Msg("Upkeeps Performed")`
$DIR/integration-tests/smoke/keeper_test.go: `.Succeed()`
$DIR/integration-tests/smoke/keeper_test.go: `.GetTestLogger(t)`
$DIR/integration-tests/smoke/keeper_test.go: `.GetConfig("Smoke", tc.Keeper)`
$DIR/integration-tests/smoke/keeper_test.go: `.Client.BlockNumber(context.Background())`
$DIR/integration-tests/smoke/keeper_test.go: `.Background()`
$DIR/integration-tests/smoke/keeper_test.go: `.DeployPerformDataCheckerContracts(
t,
chainClient,
ethereum.RegistryVersion_1_3,
keeperDefaultUpkeepsToDeploy,
keeperDefaultUpkeepGasLimit,
linkToken,
&lowBCPTRegistryConfig,
big.NewInt(keeperDefaultLinkFunds),
[]byte(keeperExpectedData),
)`
$DIR/integration-tests/smoke/keeper_test.go: `.NewInt(keeperDefaultLinkFunds)`
$DIR/integration-tests/smoke/keeper_test.go: `.CreateKeeperJobsLocal(l, chainlinkNodes, registry, contracts.OCRv2Config{}, fmt.Sprint(chainClient.ChainID))`
$DIR/integration-tests/smoke/keeper_test.go: `.Sprint(chainClient.ChainID)`
$DIR/integration-tests/smoke/keeper_test.go: `.Cleanup(func() {
actions_seth.GetStalenessReportCleanupFn(t, l, chainClient, sb, registry, ethereum.RegistryVersion_1_3)()
})`
$DIR/integration-tests/smoke/keeper_test.go: `.GetStalenessReportCleanupFn(t, l, chainClient, sb, registry, ethereum.RegistryVersion_1_3)`
$DIR/integration-tests/smoke/keeper_test.go: `.NewGomegaWithT(t)`
$DIR/integration-tests/smoke/keeper_test.go: `.Consistently(func(g gomega.Gomega) {
// expect the counter to remain 0 because perform data does not match
for i := 0; i < len(upkeepIDs); i++ {
counter, err := performDataChecker[i].Counter(testcontext.Get(t))
g.Expect(err).ShouldNot(gomega.HaveOccurred(), "Failed to retrieve perform data checker for upkeep at index %d", i)
g.Expect(counter.Int64()).Should(gomega.Equal(int64(0)),
"Expected perform data checker counter to be 0, but got %d", counter.Int64())
l.Info().Int64("Upkeep perform data checker", counter.Int64()).Msg("Number of upkeeps performed")
}
}, "2m", "1s")`
$DIR/integration-tests/smoke/keeper_test.go: `.Counter(testcontext.Get(t))`
$DIR/integration-tests/smoke/keeper_test.go: `.Get(t)`
$DIR/integration-tests/smoke/keeper_test.go: `.Expect(err)`
$DIR/integration-tests/smoke/keeper_test.go: `.ShouldNot(gomega.HaveOccurred(), "Failed to retrieve perform data checker for upkeep at index %d", i)`
$DIR/integration-tests/smoke/keeper_test.go: `.HaveOccurred()`
$DIR/integration-tests/smoke/keeper_test.go: `.Expect(counter.Int64())`
$DIR/integration-tests/smoke/keeper_test.go: `.Int64()`
$DIR/integration-tests/smoke/keeper_test.go: `.Should(gomega.Equal(int64(0)),
"Expected perform data checker counter to be 0, but got %d", counter.Int64())`
$DIR/integration-tests/smoke/keeper_test.go: `.Equal(int64(0))`
$DIR/integration-tests/smoke/keeper_test.go: `.Int64()`
$DIR/integration-tests/smoke/keeper_test.go: `.Info()`
$DIR/integration-tests/smoke/keeper_test.go: `.Int64("Upkeep perform data checker", counter.Int64())`
$DIR/integration-tests/smoke/keeper_test.go: `.Int64()`
$DIR/integration-tests/smoke/keeper_test.go: `.Msg("Number of upkeeps performed")`
$DIR/integration-tests/smoke/keeper_test.go: `.Should(gomega.Succeed())`
$DIR/integration-tests/smoke/keeper_test.go: `.Succeed()`
$DIR/integration-tests/smoke/keeper_test.go: `.UpdateCheckData(upkeepIDs[i], []byte(keeperExpectedData))`
$DIR/integration-tests/smoke/keeper_test.go: `.GetUpkeepInfo(testcontext.Get(t), upkeepIDs[i])`
$DIR/integration-tests/smoke/keeper_test.go: `.Get(t)`
$DIR/integration-tests/smoke/keeper_test.go: `.Eventually(func(g gomega.Gomega) error {
// Check if the upkeeps are performing multiple times by analysing their counters and checking they are greater than 5
for i := 0; i < len(upkeepIDs); i++ {
counter, err := performDataChecker[i].Counter(testcontext.Get(t))
g.Expect(err).ShouldNot(gomega.HaveOccurred(), "Failed to retrieve perform data checker counter for upkeep at index %d", i)
g.Expect(counter.Int64()).Should(gomega.BeNumerically(">", int64(5)),
"Expected perform data checker counter to be greater than 5, but got %d", counter.Int64())
l.Info().Int64("Upkeep perform data checker", counter.Int64()).Msg("Number of upkeeps performed")
}
return nil
}, "3m", "1s")`
$DIR/integration-tests/smoke/keeper_test.go: `.Counter(testcontext.Get(t))`
$DIR/integration-tests/smoke/keeper_test.go: `.Get(t)`
$DIR/integration-tests/smoke/keeper_test.go: `.Expect(err)`
$DIR/integration-tests/smoke/keeper_test.go: `.ShouldNot(gomega.HaveOccurred(), "Failed to retrieve perform data checker counter for upkeep at index %d", i)`
$DIR/integration-tests/smoke/keeper_test.go: `.HaveOccurred()`
$DIR/integration-tests/smoke/keeper_test.go: `.Expect(counter.Int64())`
$DIR/integration-tests/smoke/keeper_test.go: `.Int64()`
$DIR/integration-tests/smoke/keeper_test.go: `.Should(gomega.BeNumerically(">", int64(5)),
"Expected perform data checker counter to be greater than 5, but got %d", counter.Int64())`
$DIR/integration-tests/smoke/keeper_test.go: `.BeNumerically(">", int64(5))`
$DIR/integration-tests/smoke/keeper_test.go: `.Int64()`
$DIR/integration-tests/smoke/keeper_test.go: `.Info()`
$DIR/integration-tests/smoke/keeper_test.go: `.Int64("Upkeep perform data checker", counter.Int64())`
$DIR/integration-tests/smoke/keeper_test.go: `.Int64()`
$DIR/integration-tests/smoke/keeper_test.go: `.Msg("Number of upkeeps performed")`
$DIR/integration-tests/smoke/keeper_test.go: `.Succeed()`
$DIR/integration-tests/smoke/keeper_test.go: `.GetTestLogger(t)`
$DIR/integration-tests/smoke/keeper_test.go: `.GetConfig("Smoke", tc.Keeper)`
$DIR/integration-tests/smoke/keeper_test.go: `.DeployKeeperContracts(
t,
registryVersion,
keeperDefaultRegistryConfig,
keeperDefaultUpkeepsToDeploy,
keeperDefaultUpkeepGasLimit,
linkToken,
chainClient,
big.NewInt(keeperDefaultLinkFunds),
)`
$DIR/integration-tests/smoke/keeper_test.go: `.NewInt(keeperDefaultLinkFunds)`
$DIR/integration-tests/smoke/keeper_test.go: `.NewGomegaWithT(t)`
$DIR/integration-tests/smoke/keeper_test.go: `.CreateKeeperJobsLocal(l, chainlinkNodes, registry, contracts.OCRv2Config{}, fmt.Sprint(chainClient.ChainID))`
$DIR/integration-tests/smoke/keeper_test.go: `.Sprint(chainClient.ChainID)`
$DIR/integration-tests/smoke/keeper_test.go: `.Eventually(func(g gomega.Gomega) error {
// Check if the upkeeps are performing multiple times by analyzing their counters and checking they are greater than 10
for i := 0; i < len(upkeepIDs); i++ {
counter, err := consumers[i].Counter(testcontext.Get(t))
g.Expect(err).ShouldNot(gomega.HaveOccurred(), "Failed to retrieve consumer counter for upkeep at index %d", i)
g.Expect(counter.Int64()).Should(gomega.BeNumerically(">", int64(10)),
"Expected consumer counter to be greater than 10, but got %d", counter.Int64())
l.Info().Int64("Upkeep counter", counter.Int64()).Msg("Number of upkeeps performed")
}
return nil
}, "5m", "1s")`
$DIR/integration-tests/smoke/keeper_test.go: `.Counter(testcontext.Get(t))`
$DIR/integration-tests/smoke/keeper_test.go: `.Get(t)`
$DIR/integration-tests/smoke/keeper_test.go: `.Expect(err)`
$DIR/integration-tests/smoke/keeper_test.go: `.ShouldNot(gomega.HaveOccurred(), "Failed to retrieve consumer counter for upkeep at index %d", i)`
$DIR/integration-tests/smoke/keeper_test.go: `.HaveOccurred()`
$DIR/integration-tests/smoke/keeper_test.go: `.Expect(counter.Int64())`
$DIR/integration-tests/smoke/keeper_test.go: `.Int64()`
$DIR/integration-tests/smoke/keeper_test.go: `.Should(gomega.BeNumerically(">", int64(10)),
"Expected consumer counter to be greater than 10, but got %d", counter.Int64())`
$DIR/integration-tests/smoke/keeper_test.go: `.BeNumerically(">", int64(10))`
$DIR/integration-tests/smoke/keeper_test.go: `.Int64()`
$DIR/integration-tests/smoke/keeper_test.go: `.Info()`
$DIR/integration-tests/smoke/keeper_test.go: `.Int64("Upkeep counter", counter.Int64())`
$DIR/integration-tests/smoke/keeper_test.go: `.Int64()`
$DIR/integration-tests/smoke/keeper_test.go: `.Msg("Number of upkeeps performed")`
$DIR/integration-tests/smoke/keeper_test.go: `.Should(gomega.Succeed())`
$DIR/integration-tests/smoke/keeper_test.go: `.Succeed()`
$DIR/integration-tests/smoke/keeper_test.go: `.ReadJobs()`
$DIR/integration-tests/smoke/keeper_test.go: `.DeleteJob(id)`
$DIR/integration-tests/smoke/keeper_test.go: `.CreateKeeperJobsLocal(l, chainlinkNodes, registry, contracts.OCRv2Config{}, fmt.Sprint(chainClient.ChainID))`
$DIR/integration-tests/smoke/keeper_test.go: `.Sprint(chainClient.ChainID)`
$DIR/integration-tests/smoke/keeper_test.go: `.Eventually(func(g gomega.Gomega) error {
// Check if the upkeeps are performing multiple times by analyzing their counters and checking they are greater than 10
for i := 0; i < len(upkeepIDs); i++ {
counter, err := consumers[i].Counter(testcontext.Get(t))
g.Expect(err).ShouldNot(gomega.HaveOccurred(), "Failed to retrieve consumer counter for upkeep at index %d", i)
g.Expect(counter.Int64()).Should(gomega.BeNumerically(">", int64(10)),
"Expected consumer counter to be greater than 10, but got %d", counter.Int64())
l.Info().Int64("Upkeep counter", counter.Int64()).Msg("Number of upkeeps performed")
}
return nil
}, "5m", "1s")`
$DIR/integration-tests/smoke/keeper_test.go: `.Counter(testcontext.Get(t))`
$DIR/integration-tests/smoke/keeper_test.go: `.Get(t)`
$DIR/integration-tests/smoke/keeper_test.go: `.Expect(err)`
$DIR/integration-tests/smoke/keeper_test.go: `.ShouldNot(gomega.HaveOccurred(), "Failed to retrieve consumer counter for upkeep at index %d", i)`
$DIR/integration-tests/smoke/keeper_test.go: `.HaveOccurred()`
$DIR/integration-tests/smoke/keeper_test.go: `.Expect(counter.Int64())`
$DIR/integration-tests/smoke/keeper_test.go: `.Int64()`
$DIR/integration-tests/smoke/keeper_test.go: `.Should(gomega.BeNumerically(">", int64(10)),
"Expected consumer counter to be greater than 10, but got %d", counter.Int64())`
$DIR/integration-tests/smoke/keeper_test.go: `.BeNumerically(">", int64(10))`
$DIR/integration-tests/smoke/keeper_test.go: `.Int64()`
$DIR/integration-tests/smoke/keeper_test.go: `.Info()`
$DIR/integration-tests/smoke/keeper_test.go: `.Int64("Upkeep counter", counter.Int64())`
$DIR/integration-tests/smoke/keeper_test.go: `.Int64()`
$DIR/integration-tests/smoke/keeper_test.go: `.Msg("Number of upkeeps performed")`
$DIR/integration-tests/smoke/keeper_test.go: `.Succeed()`
$DIR/integration-tests/smoke/ocr2_test.go: `t.Run(test.name, func(t *testing.T) {
t.Parallel()
l := logging.GetTestLogger(t)
testEnv, aggregatorContracts, sethClient := prepareORCv2SmokeTestEnv(t, test, l, 5)
err := testEnv.MockAdapter.SetAdapterBasedIntValuePath("ocr2", []string{http.MethodGet, http.MethodPost}, 10)
require.NoError(t, err)
err = actions_seth.WatchNewOCRRound(l, sethClient, 2, contracts.V2OffChainAgrregatorToOffChainAggregatorWithRounds(aggregatorContracts), time.Minute*5)
require.NoError(t, err)
roundData, err := aggregatorContracts[0].GetRound(testcontext.Get(t), big.NewInt(2))
require.NoError(t, err, "Error getting latest OCR answer")
require.Equal(t, int64(10), roundData.Answer.Int64(),
"Expected latest answer from OCR contract to be 10 but got %d",
roundData.Answer.Int64(),
)
})`
$DIR/integration-tests/smoke/ocr2_test.go: `err = actions_seth.WatchNewOCRRound(l, sethClient, 2, contracts.V2OffChainAgrregatorToOffChainAggregatorWithRounds(aggregatorContracts), time.Minute*5)`
$DIR/integration-tests/smoke/ocr2_test.go: `err = actions_seth.WatchNewOCRRound(l, sethClient, int64(round), contracts.V2OffChainAgrregatorToOffChainAggregatorWithRounds(aggregatorContracts), time.Minute*5)`
$DIR/integration-tests/smoke/ocr2_test.go: `err = actions_seth.WatchNewOCRRound(l, sethClient, 2, contracts.V2OffChainAgrregatorToOffChainAggregatorWithRounds(aggregatorContracts), time.Minute*5)`
$DIR/integration-tests/smoke/ocr2_test.go: `err = actions.DeleteJobs(nodeClients)`
$DIR/integration-tests/smoke/ocr2_test.go: `err = actions.DeleteBridges(nodeClients)`
$DIR/integration-tests/smoke/ocr2_test.go: `err = actions.CreateOCRv2JobsLocal(aggregatorContracts, bootstrapNode, workerNodes, env.MockAdapter, "ocr2", 15, uint64(sethClient.ChainID), false, false)`
$DIR/integration-tests/smoke/ocr2_test.go: `err = actions_seth.WatchNewOCRRound(l, sethClient, 3, contracts.V2OffChainAgrregatorToOffChainAggregatorWithRounds(aggregatorContracts), time.Minute*3)`
$DIR/integration-tests/smoke/ocr2_test.go: `roundData, err = aggregatorContracts[0].GetRound(testcontext.Get(t), big.NewInt(3))`
$DIR/integration-tests/smoke/ocr2_test.go: `.Run(test.name, func(t *testing.T) {
t.Parallel()
l := logging.GetTestLogger(t)
testEnv, aggregatorContracts, sethClient := prepareORCv2SmokeTestEnv(t, test, l, 5)
err := testEnv.MockAdapter.SetAdapterBasedIntValuePath("ocr2", []string{http.MethodGet, http.MethodPost}, 10)
require.NoError(t, err)
err = actions_seth.WatchNewOCRRound(l, sethClient, 2, contracts.V2OffChainAgrregatorToOffChainAggregatorWithRounds(aggregatorContracts), time.Minute*5)
require.NoError(t, err)
roundData, err := aggregatorContracts[0].GetRound(testcontext.Get(t), big.NewInt(2))
require.NoError(t, err, "Error getting latest OCR answer")
require.Equal(t, int64(10), roundData.Answer.Int64(),
"Expected latest answer from OCR contract to be 10 but got %d",
roundData.Answer.Int64(),
)
})`
$DIR/integration-tests/smoke/ocr2_test.go: `.GetTestLogger(t)`
$DIR/integration-tests/smoke/ocr2_test.go: `.MockAdapter.SetAdapterBasedIntValuePath("ocr2", []string{http.MethodGet, http.MethodPost}, 10)`
$DIR/integration-tests/smoke/ocr2_test.go: `.WatchNewOCRRound(l, sethClient, 2, contracts.V2OffChainAgrregatorToOffChainAggregatorWithRounds(aggregatorContracts), time.Minute*5)`
$DIR/integration-tests/smoke/ocr2_test.go: `.V2OffChainAgrregatorToOffChainAggregatorWithRounds(aggregatorContracts)`
$DIR/integration-tests/smoke/ocr2_test.go: `.GetRound(testcontext.Get(t), big.NewInt(2))`
$DIR/integration-tests/smoke/ocr2_test.go: `.Get(t)`
$DIR/integration-tests/smoke/ocr2_test.go: `.NewInt(2)`
$DIR/integration-tests/smoke/ocr2_test.go: `.GetTestLogger(t)`
$DIR/integration-tests/smoke/ocr2_test.go: `.StartNewRound(contracts.V2OffChainAgrregatorToOffChainAggregatorWithRounds(aggregatorContracts))`
$DIR/integration-tests/smoke/ocr2_test.go: `.V2OffChainAgrregatorToOffChainAggregatorWithRounds(aggregatorContracts)`
$DIR/integration-tests/smoke/ocr2_test.go: `.WatchNewOCRRound(l, sethClient, int64(round), contracts.V2OffChainAgrregatorToOffChainAggregatorWithRounds(aggregatorContracts), time.Minute*5)`
$DIR/integration-tests/smoke/ocr2_test.go: `.V2OffChainAgrregatorToOffChainAggregatorWithRounds(aggregatorContracts)`
$DIR/integration-tests/smoke/ocr2_test.go: `.GetRound(testcontext.Get(t), big.NewInt(int64(round)))`
$DIR/integration-tests/smoke/ocr2_test.go: `.Get(t)`
$DIR/integration-tests/smoke/ocr2_test.go: `.NewInt(int64(round))`
$DIR/integration-tests/smoke/ocr2_test.go: `.GetTestLogger(t)`
$DIR/integration-tests/smoke/ocr2_test.go: `.ClCluster.NodeAPIs()`
$DIR/integration-tests/smoke/ocr2_test.go: `.MockAdapter.SetAdapterBasedIntValuePath("ocr2", []string{http.MethodGet, http.MethodPost}, 10)`
$DIR/integration-tests/smoke/ocr2_test.go: `.WatchNewOCRRound(l, sethClient, 2, contracts.V2OffChainAgrregatorToOffChainAggregatorWithRounds(aggregatorContracts), time.Minute*5)`
$DIR/integration-tests/smoke/ocr2_test.go: `.V2OffChainAgrregatorToOffChainAggregatorWithRounds(aggregatorContracts)`
$DIR/integration-tests/smoke/ocr2_test.go: `.GetRound(testcontext.Get(t), big.NewInt(2))`
$DIR/integration-tests/smoke/ocr2_test.go: `.Get(t)`
$DIR/integration-tests/smoke/ocr2_test.go: `.NewInt(2)`
$DIR/integration-tests/smoke/ocr2_test.go: `.DeleteJobs(nodeClients)`
$DIR/integration-tests/smoke/ocr2_test.go: `.DeleteBridges(nodeClients)`
$DIR/integration-tests/smoke/ocr2_test.go: `.CreateOCRv2JobsLocal(aggregatorContracts, bootstrapNode, workerNodes, env.MockAdapter, "ocr2", 15, uint64(sethClient.ChainID), false, false)`
$DIR/integration-tests/smoke/ocr2_test.go: `.WatchNewOCRRound(l, sethClient, 3, contracts.V2OffChainAgrregatorToOffChainAggregatorWithRounds(aggregatorContracts), time.Minute*3)`
$DIR/integration-tests/smoke/ocr2_test.go: `.V2OffChainAgrregatorToOffChainAggregatorWithRounds(aggregatorContracts)`
$DIR/integration-tests/smoke/ocr2_test.go: `.GetRound(testcontext.Get(t), big.NewInt(3))`
$DIR/integration-tests/smoke/ocr2_test.go: `.Get(t)`
$DIR/integration-tests/smoke/ocr2_test.go: `.NewInt(3)`
$DIR/integration-tests/smoke/ocr2_test.go: `.Answer.Int64()`
$DIR/integration-tests/smoke/ocr2_test.go: `.Answer.Int64()`
$DIR/integration-tests/smoke/ocr2vrf_test.go: `testNetwork = seth_utils.MustReplaceSimulatedNetworkUrlWithK8(l, testNetwork, *testEnvironment)`
$DIR/integration-tests/smoke/ocr2vrf_test.go: `t.Cleanup(func() {
err := actions_seth.TeardownSuite(t, chainClient, testEnvironment, chainlinkNodes, nil, zapcore.ErrorLevel, &config)
require.NoError(t, err, "Error tearing down environment")
})`
$DIR/integration-tests/smoke/ocr2vrf_test.go: `l.Info().Interface("Random Number", randomness).Interface("Randomness Number Index", i).Msg("Randomness retrieved from Consumer contract")`
$DIR/integration-tests/smoke/ocr2vrf_test.go: `testNetwork = seth_utils.MustReplaceSimulatedNetworkUrlWithK8(l, testNetwork, *testEnvironment)`
$DIR/integration-tests/smoke/ocr2vrf_test.go: `t.Cleanup(func() {
err := actions_seth.TeardownSuite(t, chainClient, testEnvironment, chainlinkNodes, nil, zapcore.ErrorLevel, &config)
require.NoError(t, err, "Error tearing down environment")
})`
$DIR/integration-tests/smoke/ocr2vrf_test.go: `l.Info().Interface("Random Number", randomness).Interface("Randomness Number Index", i).Msg("Randomness Fulfillment retrieved from Consumer contract")`
$DIR/integration-tests/smoke/ocr2vrf_test.go: `.GetTestLogger(t)`
$DIR/integration-tests/smoke/ocr2vrf_test.go: `.GetConfig("Smoke", testconfig.OCR2)`
$DIR/integration-tests/smoke/ocr2vrf_test.go: `.WillUseRemoteRunner()`
$DIR/integration-tests/smoke/ocr2vrf_test.go: `.MustReplaceSimulatedNetworkUrlWithK8(l, testNetwork, *testEnvironment)`
$DIR/integration-tests/smoke/ocr2vrf_test.go: `.GetChainClientWithConfigFunction(config, testNetwork, actions_seth.OneEphemeralKeysLiveTestnetCheckFn)`
$DIR/integration-tests/smoke/ocr2vrf_test.go: `.ConnectChainlinkNodes(testEnvironment)`
$DIR/integration-tests/smoke/ocr2vrf_test.go: `.ChainlinkNodeAddresses(chainlinkNodes)`
$DIR/integration-tests/smoke/ocr2vrf_test.go: `.Cleanup(func() {
err := actions_seth.TeardownSuite(t, chainClient, testEnvironment, chainlinkNodes, nil, zapcore.ErrorLevel, &config)
require.NoError(t, err, "Error tearing down environment")
})`
$DIR/integration-tests/smoke/ocr2vrf_test.go: `.TeardownSuite(t, chainClient, testEnvironment, chainlinkNodes, nil, zapcore.ErrorLevel, &config)`
$DIR/integration-tests/smoke/ocr2vrf_test.go: `.DeployLinkTokenContract(l, chainClient)`
$DIR/integration-tests/smoke/ocr2vrf_test.go: `.DeployMockETHLINKFeed(chainClient, ocr2vrf_constants.LinkEthFeedResponse)`
$DIR/integration-tests/smoke/ocr2vrf_test.go: `.SetupOCR2VRFUniverse(
t,
linkToken,
mockETHLinkFeed,
chainClient,
nodeAddresses,
chainlinkNodes,
testNetwork,
)`
$DIR/integration-tests/smoke/ocr2vrf_test.go: `.RequestAndRedeemRandomness(
t,
consumerContract,
vrfBeaconContract,
ocr2vrf_constants.NumberOfRandomWordsToRequest,
subID,
ocr2vrf_constants.ConfirmationDelay,
ocr2vrf_constants.RandomnessRedeemTransmissionEventTimeout,
)`
$DIR/integration-tests/smoke/ocr2vrf_test.go: `.GetRandomnessByRequestId(testcontext.Get(t), requestID, big.NewInt(int64(i)))`
$DIR/integration-tests/smoke/ocr2vrf_test.go: `.Get(t)`
$DIR/integration-tests/smoke/ocr2vrf_test.go: `.NewInt(int64(i))`
$DIR/integration-tests/smoke/ocr2vrf_test.go: `.Info()`
$DIR/integration-tests/smoke/ocr2vrf_test.go: `.Interface("Random Number", randomness)`
$DIR/integration-tests/smoke/ocr2vrf_test.go: `.Interface("Randomness Number Index", i)`
$DIR/integration-tests/smoke/ocr2vrf_test.go: `.Msg("Randomness retrieved from Consumer contract")`
$DIR/integration-tests/smoke/ocr2vrf_test.go: `.GetTestLogger(t)`
$DIR/integration-tests/smoke/ocr2vrf_test.go: `.GetConfig("Smoke", testconfig.OCR2)`
$DIR/integration-tests/smoke/ocr2vrf_test.go: `.WillUseRemoteRunner()`
$DIR/integration-tests/smoke/ocr2vrf_test.go: `.MustReplaceSimulatedNetworkUrlWithK8(l, testNetwork, *testEnvironment)`
$DIR/integration-tests/smoke/ocr2vrf_test.go: `.GetChainClientWithConfigFunction(config, testNetwork, actions_seth.OneEphemeralKeysLiveTestnetCheckFn)`
$DIR/integration-tests/smoke/ocr2vrf_test.go: `.ConnectChainlinkNodes(testEnvironment)`
$DIR/integration-tests/smoke/ocr2vrf_test.go: `.ChainlinkNodeAddresses(chainlinkNodes)`
$DIR/integration-tests/smoke/ocr2vrf_test.go: `.Cleanup(func() {
err := actions_seth.TeardownSuite(t, chainClient, testEnvironment, chainlinkNodes, nil, zapcore.ErrorLevel, &config)
require.NoError(t, err, "Error tearing down environment")
})`
$DIR/integration-tests/smoke/ocr2vrf_test.go: `.TeardownSuite(t, chainClient, testEnvironment, chainlinkNodes, nil, zapcore.ErrorLevel, &config)`
$DIR/integration-tests/smoke/ocr2vrf_test.go: `.DeployLinkTokenContract(l, chainClient)`
$DIR/integration-tests/smoke/ocr2vrf_test.go: `.DeployMockETHLINKFeed(chainClient, ocr2vrf_constants.LinkEthFeedResponse)`
$DIR/integration-tests/smoke/ocr2vrf_test.go: `.SetupOCR2VRFUniverse(
t,
linkToken,
mockETHLinkFeed,
chainClient,
nodeAddresses,
chainlinkNodes,
testNetwork,
)`
$DIR/integration-tests/smoke/ocr2vrf_test.go: `.RequestRandomnessFulfillmentAndWaitForFulfilment(
t,
consumerContract,
vrfBeaconContract,
ocr2vrf_constants.NumberOfRandomWordsToRequest,
subID,
ocr2vrf_constants.ConfirmationDelay,
ocr2vrf_constants.RandomnessFulfilmentTransmissionEventTimeout,
)`
$DIR/integration-tests/smoke/ocr2vrf_test.go: `.GetRandomnessByRequestId(testcontext.Get(t), requestID, big.NewInt(int64(i)))`
$DIR/integration-tests/smoke/ocr2vrf_test.go: `.Get(t)`
$DIR/integration-tests/smoke/ocr2vrf_test.go: `.NewInt(int64(i))`
$DIR/integration-tests/smoke/ocr2vrf_test.go: `.Info()`
$DIR/integration-tests/smoke/ocr2vrf_test.go: `.Interface("Random Number", randomness)`
$DIR/integration-tests/smoke/ocr2vrf_test.go: `.Interface("Randomness Number Index", i)`
$DIR/integration-tests/smoke/ocr2vrf_test.go: `.Msg("Randomness Fulfillment retrieved from Consumer contract")`
$DIR/integration-tests/smoke/ocr_test.go: `err = actions_seth.WatchNewOCRRound(l, sethClient, 2, contracts.V1OffChainAgrregatorToOffChainAggregatorWithRounds(ocrInstances), time.Duration(3*time.Minute))`
$DIR/integration-tests/smoke/ocr_test.go: `err = actions_seth.WatchNewOCRRound(l, sethClient, 2, contracts.V1OffChainAgrregatorToOffChainAggregatorWithRounds(ocrInstances), time.Duration(3*time.Minute))`
$DIR/integration-tests/smoke/ocr_test.go: `err = actions.DeleteJobs(nodeClients)`
$DIR/integration-tests/smoke/ocr_test.go: `err = actions.DeleteBridges(nodeClients)`
$DIR/integration-tests/smoke/ocr_test.go: `err = actions.CreateOCRJobsLocal(ocrInstances, bootstrapNode, workerNodes, 5, env.MockAdapter, big.NewInt(sethClient.ChainID))`
$DIR/integration-tests/smoke/ocr_test.go: `err = actions_seth.WatchNewOCRRound(l, sethClient, 1, contracts.V1OffChainAgrregatorToOffChainAggregatorWithRounds(ocrInstances), time.Duration(3*time.Minute))`
$DIR/integration-tests/smoke/ocr_test.go: `answer, err = ocrInstances[0].GetLatestAnswer(testcontext.Get(t))`
$DIR/integration-tests/smoke/ocr_test.go: `.GetTestLogger(t)`
$DIR/integration-tests/smoke/ocr_test.go: `.ClCluster.NodeAPIs()`
$DIR/integration-tests/smoke/ocr_test.go: `.SetAllAdapterResponsesToTheSameValueLocal(10, ocrInstances, workerNodes, env.MockAdapter)`
$DIR/integration-tests/smoke/ocr_test.go: `.WatchNewOCRRound(l, sethClient, 2, contracts.V1OffChainAgrregatorToOffChainAggregatorWithRounds(ocrInstances), time.Duration(3*time.Minute))`
$DIR/integration-tests/smoke/ocr_test.go: `.V1OffChainAgrregatorToOffChainAggregatorWithRounds(ocrInstances)`
$DIR/integration-tests/smoke/ocr_test.go: `.Duration(3*time.Minute)`
$DIR/integration-tests/smoke/ocr_test.go: `.GetLatestAnswer(testcontext.Get(t))`
$DIR/integration-tests/smoke/ocr_test.go: `.Get(t)`
$DIR/integration-tests/smoke/ocr_test.go: `.Int64()`
$DIR/integration-tests/smoke/ocr_test.go: `.Int64()`
$DIR/integration-tests/smoke/ocr_test.go: `.GetTestLogger(t)`
$DIR/integration-tests/smoke/ocr_test.go: `.ClCluster.NodeAPIs()`
$DIR/integration-tests/smoke/ocr_test.go: `.SetAllAdapterResponsesToTheSameValueLocal(10, ocrInstances, workerNodes, env.MockAdapter)`
$DIR/integration-tests/smoke/ocr_test.go: `.WatchNewOCRRound(l, sethClient, 2, contracts.V1OffChainAgrregatorToOffChainAggregatorWithRounds(ocrInstances), time.Duration(3*time.Minute))`
$DIR/integration-tests/smoke/ocr_test.go: `.V1OffChainAgrregatorToOffChainAggregatorWithRounds(ocrInstances)`
$DIR/integration-tests/smoke/ocr_test.go: `.Duration(3*time.Minute)`
$DIR/integration-tests/smoke/ocr_test.go: `.GetLatestAnswer(testcontext.Get(t))`
$DIR/integration-tests/smoke/ocr_test.go: `.Get(t)`
$DIR/integration-tests/smoke/ocr_test.go: `.DeleteJobs(nodeClients)`
$DIR/integration-tests/smoke/ocr_test.go: `.DeleteBridges(nodeClients)`
$DIR/integration-tests/smoke/ocr_test.go: `.CreateOCRJobsLocal(ocrInstances, bootstrapNode, workerNodes, 5, env.MockAdapter, big.NewInt(sethClient.ChainID))`
$DIR/integration-tests/smoke/ocr_test.go: `.NewInt(sethClient.ChainID)`
$DIR/integration-tests/smoke/ocr_test.go: `.WatchNewOCRRound(l, sethClient, 1, contracts.V1OffChainAgrregatorToOffChainAggregatorWithRounds(ocrInstances), time.Duration(3*time.Minute))`
$DIR/integration-tests/smoke/ocr_test.go: `.V1OffChainAgrregatorToOffChainAggregatorWithRounds(ocrInstances)`
$DIR/integration-tests/smoke/ocr_test.go: `.Duration(3*time.Minute)`
$DIR/integration-tests/smoke/ocr_test.go: `.GetLatestAnswer(testcontext.Get(t))`
$DIR/integration-tests/smoke/ocr_test.go: `.Get(t)`
$DIR/integration-tests/smoke/ocr_test.go: `.Int64()`
$DIR/integration-tests/smoke/ocr_test.go: `.Int64()`
$DIR/integration-tests/smoke/runlog_test.go: `err = lt.Transfer(consumer.Address(), big.NewInt(2e18))`
$DIR/integration-tests/smoke/runlog_test.go: `err = env.MockAdapter.SetAdapterBasedIntValuePath("/variable", []string{http.MethodPost}, 5)`
$DIR/integration-tests/smoke/runlog_test.go: `err = env.ClCluster.Nodes[0].API.MustCreateBridge(&bta)`
$DIR/integration-tests/smoke/runlog_test.go: `_, err = env.ClCluster.Nodes[0].API.MustCreateJob(&client.DirectRequestJobSpec{
Name: fmt.Sprintf("direct-request-%s", uuid.NewString()),
MinIncomingConfirmations: "1",
ContractAddress: oracle.Address(),
EVMChainID: fmt.Sprint(sethClient.ChainID),
ExternalJobID: jobUUID.String(),
ObservationSource: ost,
})`
$DIR/integration-tests/smoke/runlog_test.go: `copy(jobID[:], jobUUIDReplaces)`
$DIR/integration-tests/smoke/runlog_test.go: `err = consumer.CreateRequestTo(
oracle.Address(),
jobID,
big.NewInt(1e18),
fmt.Sprintf("%s/variable", env.MockAdapter.InternalEndpoint),
"data,result",
big.NewInt(100),
)`
$DIR/integration-tests/smoke/runlog_test.go: `g.Expect(err).ShouldNot(gomega.HaveOccurred(), "Getting data from consumer contract shouldn't fail")`
$DIR/integration-tests/smoke/runlog_test.go: `g.Expect(d).ShouldNot(gomega.BeNil(), "Expected the initial on chain data to be nil")`
$DIR/integration-tests/smoke/runlog_test.go: `l.Debug().Int64("Data", d.Int64()).Msg("Found on chain")`
$DIR/integration-tests/smoke/runlog_test.go: `g.Expect(d.Int64()).Should(gomega.BeNumerically("==", 5), "Expected the on-chain data to be 5, but found %d", d.Int64())`
$DIR/integration-tests/smoke/runlog_test.go: `.GetTestLogger(t)`
$DIR/integration-tests/smoke/runlog_test.go: `.GetConfig("Smoke", tc.RunLog)`
$DIR/integration-tests/smoke/runlog_test.go: `.EthereumNetworkConfigFromConfig(l, &config)`
$DIR/integration-tests/smoke/runlog_test.go: `.NewCLTestEnvBuilder()`
$DIR/integration-tests/smoke/runlog_test.go: `.
WithTestInstance(t)`
$DIR/integration-tests/smoke/runlog_test.go: `.
WithTestConfig(&config)`
$DIR/integration-tests/smoke/runlog_test.go: `.
WithPrivateEthereumNetwork(privateNetwork.EthereumNetworkConfig)`
$DIR/integration-tests/smoke/runlog_test.go: `.
WithMockAdapter()`
$DIR/integration-tests/smoke/runlog_test.go: `.
WithCLNodes(1)`
$DIR/integration-tests/smoke/runlog_test.go: `.
WithFunding(big.NewFloat(*config.Common.ChainlinkNodeFunding))`
$DIR/integration-tests/smoke/runlog_test.go: `.NewFloat(*config.Common.ChainlinkNodeFunding)`
$DIR/integration-tests/smoke/runlog_test.go: `.
WithStandardCleanup()`
$DIR/integration-tests/smoke/runlog_test.go: `.
WithSeth()`
$DIR/integration-tests/smoke/runlog_test.go: `.
Build()`
$DIR/integration-tests/smoke/runlog_test.go: `.MustGetSelectedNetworkConfig(config.GetNetworkConfig())`
$DIR/integration-tests/smoke/runlog_test.go: `.GetNetworkConfig()`
$DIR/integration-tests/smoke/runlog_test.go: `.GetSethClient(network.ChainID)`
$DIR/integration-tests/smoke/runlog_test.go: `.DeployLinkTokenContract(l, sethClient)`
$DIR/integration-tests/smoke/runlog_test.go: `.DeployOracle(sethClient, lt.Address())`
$DIR/integration-tests/smoke/runlog_test.go: `.Address()`
$DIR/integration-tests/smoke/runlog_test.go: `.DeployAPIConsumer(sethClient, lt.Address())`
$DIR/integration-tests/smoke/runlog_test.go: `.Address()`
$DIR/integration-tests/smoke/runlog_test.go: `.Transfer(consumer.Address(), big.NewInt(2e18))`
$DIR/integration-tests/smoke/runlog_test.go: `.Address()`
$DIR/integration-tests/smoke/runlog_test.go: `.NewInt(2e18)`
$DIR/integration-tests/smoke/runlog_test.go: `.MockAdapter.SetAdapterBasedIntValuePath("/variable", []string{http.MethodPost}, 5)`
$DIR/integration-tests/smoke/runlog_test.go: `.New()`
$DIR/integration-tests/smoke/runlog_test.go: `.Sprintf("five-%s", jobUUID.String())`
$DIR/integration-tests/smoke/runlog_test.go: `.String()`
$DIR/integration-tests/smoke/runlog_test.go: `.Sprintf("%s/variable", env.MockAdapter.InternalEndpoint)`
$DIR/integration-tests/smoke/runlog_test.go: `.API.MustCreateBridge(&bta)`
$DIR/integration-tests/smoke/runlog_test.go: `.String()`
$DIR/integration-tests/smoke/runlog_test.go: `.API.MustCreateJob(&client.DirectRequestJobSpec{
Name: fmt.Sprintf("direct-request-%s", uuid.NewString()),
MinIncomingConfirmations: "1",
ContractAddress: oracle.Address(),
EVMChainID: fmt.Sprint(sethClient.ChainID),
ExternalJobID: jobUUID.String(),
ObservationSource: ost,
})`
$DIR/integration-tests/smoke/runlog_test.go: `.Sprintf("direct-request-%s", uuid.NewString())`
$DIR/integration-tests/smoke/runlog_test.go: `.NewString()`
$DIR/integration-tests/smoke/runlog_test.go: `.Address()`
$DIR/integration-tests/smoke/runlog_test.go: `.Sprint(sethClient.ChainID)`
$DIR/integration-tests/smoke/runlog_test.go: `.String()`
$DIR/integration-tests/smoke/runlog_test.go: `.Replace(jobUUID.String(), "-", "", 4)`
$DIR/integration-tests/smoke/runlog_test.go: `.String()`
$DIR/integration-tests/smoke/runlog_test.go: `.CreateRequestTo(
oracle.Address(),
jobID,
big.NewInt(1e18),
fmt.Sprintf("%s/variable", env.MockAdapter.InternalEndpoint),
"data,result",
big.NewInt(100),
)`
$DIR/integration-tests/smoke/runlog_test.go: `.Address()`
$DIR/integration-tests/smoke/runlog_test.go: `.NewInt(1e18)`
$DIR/integration-tests/smoke/runlog_test.go: `.Sprintf("%s/variable", env.MockAdapter.InternalEndpoint)`
$DIR/integration-tests/smoke/runlog_test.go: `.NewInt(100)`
$DIR/integration-tests/smoke/runlog_test.go: `.NewGomegaWithT(t)`
$DIR/integration-tests/smoke/runlog_test.go: `.Eventually(func(g gomega.Gomega) {
d, err := consumer.Data(testcontext.Get(t))
g.Expect(err).ShouldNot(gomega.HaveOccurred(), "Getting data from consumer contract shouldn't fail")
g.Expect(d).ShouldNot(gomega.BeNil(), "Expected the initial on chain data to be nil")
l.Debug().Int64("Data", d.Int64()).Msg("Found on chain")
g.Expect(d.Int64()).Should(gomega.BeNumerically("==", 5), "Expected the on-chain data to be 5, but found %d", d.Int64())
}, "2m", "1s")`
$DIR/integration-tests/smoke/runlog_test.go: `.Data(testcontext.Get(t))`
$DIR/integration-tests/smoke/runlog_test.go: `.Get(t)`
$DIR/integration-tests/smoke/runlog_test.go: `.Expect(err)`
$DIR/integration-tests/smoke/runlog_test.go: `.ShouldNot(gomega.HaveOccurred(), "Getting data from consumer contract shouldn't fail")`
$DIR/integration-tests/smoke/runlog_test.go: `.HaveOccurred()`
$DIR/integration-tests/smoke/runlog_test.go: `.Expect(d)`
$DIR/integration-tests/smoke/runlog_test.go: `.ShouldNot(gomega.BeNil(), "Expected the initial on chain data to be nil")`
$DIR/integration-tests/smoke/runlog_test.go: `.BeNil()`
$DIR/integration-tests/smoke/runlog_test.go: `.Debug()`
$DIR/integration-tests/smoke/runlog_test.go: `.Int64("Data", d.Int64())`
$DIR/integration-tests/smoke/runlog_test.go: `.Int64()`
$DIR/integration-tests/smoke/runlog_test.go: `.Msg("Found on chain")`
$DIR/integration-tests/smoke/runlog_test.go: `.Expect(d.Int64())`
$DIR/integration-tests/smoke/runlog_test.go: `.Int64()`
$DIR/integration-tests/smoke/runlog_test.go: `.Should(gomega.BeNumerically("==", 5), "Expected the on-chain data to be 5, but found %d", d.Int64())`
$DIR/integration-tests/smoke/runlog_test.go: `.BeNumerically("==", 5)`
$DIR/integration-tests/smoke/runlog_test.go: `.Int64()`
$DIR/integration-tests/smoke/runlog_test.go: `.Succeed()`
$DIR/integration-tests/smoke/vrf_test.go: `l.Debug().Interface("Key JSON", nodeKey).Msg("Created proving key")`
$DIR/integration-tests/smoke/vrf_test.go: `err = contracts.Coordinator.RegisterProvingKey(
big.NewInt(1),
oracleAddr,
provingKey,
actions.EncodeOnChainExternalJobID(jobUUID),
)`
$DIR/integration-tests/smoke/vrf_test.go: `encodedProvingKeys = append(encodedProvingKeys, provingKey)`
$DIR/integration-tests/smoke/vrf_test.go: `err = contracts.Consumer.RequestRandomness(requestHash, big.NewInt(1))`
$DIR/integration-tests/smoke/vrf_test.go: `gom.Eventually(func(g gomega.Gomega) {
jobRuns, err := env.ClCluster.Nodes[0].API.MustReadRunsByJob(job.Data.ID)
g.Expect(err).ShouldNot(gomega.HaveOccurred(), "Job execution shouldn't fail")
out, err := contracts.Consumer.RandomnessOutput(testcontext.Get(t))
g.Expect(err).ShouldNot(gomega.HaveOccurred(), "Getting the randomness output of the consumer shouldn't fail")
// Checks that the job has actually run
g.Expect(len(jobRuns.Data)).Should(gomega.BeNumerically(">=", 1),
fmt.Sprintf("Expected the VRF job to run once or more after %s", timeout))
// TODO: This is an imperfect check, given it's a random number, it CAN be 0, but chances are unlikely.
// So we're just checking that the answer has changed to something other than the default (0)
// There's a better formula to ensure that VRF response is as expected, detailed under Technical Walkthrough.
// https://bl.chain.link/chainlink-vrf-on-chain-verifiable-randomness/
g.Expect(out.Uint64()).ShouldNot(gomega.BeNumerically("==", 0), "Expected the VRF job give an answer other than 0")
l.Debug().Uint64("Output", out.Uint64()).Msg("Randomness fulfilled")
}, timeout, "1s").Should(gomega.Succeed())`
$DIR/integration-tests/smoke/vrf_test.go: `g.Expect(err).ShouldNot(gomega.HaveOccurred(), "Job execution shouldn't fail")`
$DIR/integration-tests/smoke/vrf_test.go: `g.Expect(err).ShouldNot(gomega.HaveOccurred(), "Getting the randomness output of the consumer shouldn't fail")`
$DIR/integration-tests/smoke/vrf_test.go: `g.Expect(len(jobRuns.Data)).Should(gomega.BeNumerically(">=", 1),
fmt.Sprintf("Expected the VRF job to run once or more after %s", timeout))`
$DIR/integration-tests/smoke/vrf_test.go: `g.Expect(out.Uint64()).ShouldNot(gomega.BeNumerically("==", 0), "Expected the VRF job give an answer other than 0")`
$DIR/integration-tests/smoke/vrf_test.go: `l.Debug().Uint64("Output", out.Uint64()).Msg("Randomness fulfilled")`
$DIR/integration-tests/smoke/vrf_test.go: `l.Debug().Interface("Key JSON", nodeKey).Msg("Created proving key")`
$DIR/integration-tests/smoke/vrf_test.go: `err = contracts.Coordinator.RegisterProvingKey(
big.NewInt(1),
oracleAddr,
provingKey,
actions.EncodeOnChainExternalJobID(jobUUID),
)`
$DIR/integration-tests/smoke/vrf_test.go: `encodedProvingKeys = append(encodedProvingKeys, provingKey)`
$DIR/integration-tests/smoke/vrf_test.go: `err = contracts.Consumer.RequestRandomness(requestHash, big.NewInt(1))`
$DIR/integration-tests/smoke/vrf_test.go: `gom.Eventually(func(g gomega.Gomega) {
jobRuns, err := env.ClCluster.Nodes[0].API.MustReadRunsByJob(job.Data.ID)
g.Expect(err).ShouldNot(gomega.HaveOccurred(), "Job execution shouldn't fail")
out, err := contracts.Consumer.RandomnessOutput(testcontext.Get(t))
g.Expect(err).ShouldNot(gomega.HaveOccurred(), "Getting the randomness output of the consumer shouldn't fail")
// Checks that the job has actually run
g.Expect(len(jobRuns.Data)).Should(gomega.BeNumerically(">=", 1),
fmt.Sprintf("Expected the VRF job to run once or more after %s", timeout))
g.Expect(out.Uint64()).ShouldNot(gomega.BeNumerically("==", 0), "Expected the VRF job give an answer other than 0")
l.Debug().Uint64("Output", out.Uint64()).Msg("Randomness fulfilled")
}, timeout, "1s").Should(gomega.Succeed())`
$DIR/integration-tests/smoke/vrf_test.go: `g.Expect(err).ShouldNot(gomega.HaveOccurred(), "Job execution shouldn't fail")`
$DIR/integration-tests/smoke/vrf_test.go: `g.Expect(err).ShouldNot(gomega.HaveOccurred(), "Getting the randomness output of the consumer shouldn't fail")`
$DIR/integration-tests/smoke/vrf_test.go: `g.Expect(len(jobRuns.Data)).Should(gomega.BeNumerically(">=", 1),
fmt.Sprintf("Expected the VRF job to run once or more after %s", timeout))`
$DIR/integration-tests/smoke/vrf_test.go: `g.Expect(out.Uint64()).ShouldNot(gomega.BeNumerically("==", 0), "Expected the VRF job give an answer other than 0")`
$DIR/integration-tests/smoke/vrf_test.go: `l.Debug().Uint64("Output", out.Uint64()).Msg("Randomness fulfilled")`
$DIR/integration-tests/smoke/vrf_test.go: `err = n.API.MustDeleteJob(job.Data.ID)`
$DIR/integration-tests/smoke/vrf_test.go: `job, err = n.API.MustCreateJob(&client.VRFJobSpec{
Name: fmt.Sprintf("vrf-%s", jobUUID),
CoordinatorAddress: contracts.Coordinator.Address(),
MinIncomingConfirmations: 1,
PublicKey: pubKeyCompressed,
ExternalJobID: jobUUID.String(),
EVMChainID: fmt.Sprint(sethClient.ChainID),
ObservationSource: ost,
})`
$DIR/integration-tests/smoke/vrf_test.go: `gom.Eventually(func(g gomega.Gomega) {
jobRuns, err := env.ClCluster.Nodes[0].API.MustReadRunsByJob(job.Data.ID)
g.Expect(err).ShouldNot(gomega.HaveOccurred(), "Job execution shouldn't fail")
out, err := contracts.Consumer.RandomnessOutput(testcontext.Get(t))
g.Expect(err).ShouldNot(gomega.HaveOccurred(), "Getting the randomness output of the consumer shouldn't fail")
// Checks that the job has actually run
g.Expect(len(jobRuns.Data)).Should(gomega.BeNumerically(">=", 1),
fmt.Sprintf("Expected the VRF job to run once or more after %s", timeout))
g.Expect(out.Uint64()).ShouldNot(gomega.BeNumerically("==", 0), "Expected the VRF job give an answer other than 0")
l.Debug().Uint64("Output", out.Uint64()).Msg("Randomness fulfilled")
}, timeout, "1s").Should(gomega.Succeed())`
$DIR/integration-tests/smoke/vrf_test.go: `g.Expect(err).ShouldNot(gomega.HaveOccurred(), "Job execution shouldn't fail")`
$DIR/integration-tests/smoke/vrf_test.go: `g.Expect(err).ShouldNot(gomega.HaveOccurred(), "Getting the randomness output of the consumer shouldn't fail")`
$DIR/integration-tests/smoke/vrf_test.go: `g.Expect(len(jobRuns.Data)).Should(gomega.BeNumerically(">=", 1),
fmt.Sprintf("Expected the VRF job to run once or more after %s", timeout))`
$DIR/integration-tests/smoke/vrf_test.go: `g.Expect(out.Uint64()).ShouldNot(gomega.BeNumerically("==", 0), "Expected the VRF job give an answer other than 0")`
$DIR/integration-tests/smoke/vrf_test.go: `l.Debug().Uint64("Output", out.Uint64()).Msg("Randomness fulfilled")`
$DIR/integration-tests/smoke/vrf_test.go: `.GetTestLogger(t)`
$DIR/integration-tests/smoke/vrf_test.go: `.API.MustCreateVRFKey()`
$DIR/integration-tests/smoke/vrf_test.go: `.Debug()`
$DIR/integration-tests/smoke/vrf_test.go: `.Interface("Key JSON", nodeKey)`
$DIR/integration-tests/smoke/vrf_test.go: `.Msg("Created proving key")`
$DIR/integration-tests/smoke/vrf_test.go: `.New()`
$DIR/integration-tests/smoke/vrf_test.go: `.Coordinator.Address()`
$DIR/integration-tests/smoke/vrf_test.go: `.String()`
$DIR/integration-tests/smoke/vrf_test.go: `.API.MustCreateJob(&client.VRFJobSpec{
Name: fmt.Sprintf("vrf-%s", jobUUID),
CoordinatorAddress: contracts.Coordinator.Address(),
MinIncomingConfirmations: 1,
PublicKey: pubKeyCompressed,
ExternalJobID: jobUUID.String(),
EVMChainID: fmt.Sprint(sethClient.ChainID),
ObservationSource: ost,
})`
$DIR/integration-tests/smoke/vrf_test.go: `.Sprintf("vrf-%s", jobUUID)`
$DIR/integration-tests/smoke/vrf_test.go: `.Coordinator.Address()`
$DIR/integration-tests/smoke/vrf_test.go: `.String()`
$DIR/integration-tests/smoke/vrf_test.go: `.Sprint(sethClient.ChainID)`
$DIR/integration-tests/smoke/vrf_test.go: `.API.PrimaryEthAddress()`
$DIR/integration-tests/smoke/vrf_test.go: `.EncodeOnChainVRFProvingKey(*nodeKey)`
$DIR/integration-tests/smoke/vrf_test.go: `.Coordinator.RegisterProvingKey(
big.NewInt(1),
oracleAddr,
provingKey,
actions.EncodeOnChainExternalJobID(jobUUID),
)`
$DIR/integration-tests/smoke/vrf_test.go: `.NewInt(1)`
$DIR/integration-tests/smoke/vrf_test.go: `.EncodeOnChainExternalJobID(jobUUID)`
$DIR/integration-tests/smoke/vrf_test.go: `.Coordinator.HashOfKey(testcontext.Get(t), encodedProvingKeys[0])`
$DIR/integration-tests/smoke/vrf_test.go: `.Get(t)`
$DIR/integration-tests/smoke/vrf_test.go: `.Consumer.RequestRandomness(requestHash, big.NewInt(1))`
$DIR/integration-tests/smoke/vrf_test.go: `.NewInt(1)`
$DIR/integration-tests/smoke/vrf_test.go: `.NewGomegaWithT(t)`
$DIR/integration-tests/smoke/vrf_test.go: `.Eventually(func(g gomega.Gomega) {
jobRuns, err := env.ClCluster.Nodes[0].API.MustReadRunsByJob(job.Data.ID)
g.Expect(err).ShouldNot(gomega.HaveOccurred(), "Job execution shouldn't fail")
out, err := contracts.Consumer.RandomnessOutput(testcontext.Get(t))
g.Expect(err).ShouldNot(gomega.HaveOccurred(), "Getting the randomness output of the consumer shouldn't fail")
// Checks that the job has actually run
g.Expect(len(jobRuns.Data)).Should(gomega.BeNumerically(">=", 1),
fmt.Sprintf("Expected the VRF job to run once or more after %s", timeout))
// TODO: This is an imperfect check, given it's a random number, it CAN be 0, but chances are unlikely.
// So we're just checking that the answer has changed to something other than the default (0)
// There's a better formula to ensure that VRF response is as expected, detailed under Technical Walkthrough.
// https://bl.chain.link/chainlink-vrf-on-chain-verifiable-randomness/
g.Expect(out.Uint64()).ShouldNot(gomega.BeNumerically("==", 0), "Expected the VRF job give an answer other than 0")
l.Debug().Uint64("Output", out.Uint64()).Msg("Randomness fulfilled")
}, timeout, "1s")`
$DIR/integration-tests/smoke/vrf_test.go: `.API.MustReadRunsByJob(job.Data.ID)`
$DIR/integration-tests/smoke/vrf_test.go: `.Expect(err)`
$DIR/integration-tests/smoke/vrf_test.go: `.ShouldNot(gomega.HaveOccurred(), "Job execution shouldn't fail")`
$DIR/integration-tests/smoke/vrf_test.go: `.HaveOccurred()`
$DIR/integration-tests/smoke/vrf_test.go: `.Consumer.RandomnessOutput(testcontext.Get(t))`
$DIR/integration-tests/smoke/vrf_test.go: `.Get(t)`
$DIR/integration-tests/smoke/vrf_test.go: `.Expect(err)`
$DIR/integration-tests/smoke/vrf_test.go: `.ShouldNot(gomega.HaveOccurred(), "Getting the randomness output of the consumer shouldn't fail")`
$DIR/integration-tests/smoke/vrf_test.go: `.HaveOccurred()`
$DIR/integration-tests/smoke/vrf_test.go: `.Expect(len(jobRuns.Data))`
$DIR/integration-tests/smoke/vrf_test.go: `.Should(gomega.BeNumerically(">=", 1),
fmt.Sprintf("Expected the VRF job to run once or more after %s", timeout))`
$DIR/integration-tests/smoke/vrf_test.go: `.BeNumerically(">=", 1)`
$DIR/integration-tests/smoke/vrf_test.go: `.Sprintf("Expected the VRF job to run once or more after %s", timeout)`
$DIR/integration-tests/smoke/vrf_test.go: `.Expect(out.Uint64())`
$DIR/integration-tests/smoke/vrf_test.go: `.Uint64()`
$DIR/integration-tests/smoke/vrf_test.go: `.ShouldNot(gomega.BeNumerically("==", 0), "Expected the VRF job give an answer other than 0")`
$DIR/integration-tests/smoke/vrf_test.go: `.BeNumerically("==", 0)`
$DIR/integration-tests/smoke/vrf_test.go: `.Debug()`
$DIR/integration-tests/smoke/vrf_test.go: `.Uint64("Output", out.Uint64())`
$DIR/integration-tests/smoke/vrf_test.go: `.Uint64()`
$DIR/integration-tests/smoke/vrf_test.go: `.Msg("Randomness fulfilled")`
$DIR/integration-tests/smoke/vrf_test.go: `.Should(gomega.Succeed())`
$DIR/integration-tests/smoke/vrf_test.go: `.Succeed()`
$DIR/integration-tests/smoke/vrf_test.go: `.GetTestLogger(t)`
$DIR/integration-tests/smoke/vrf_test.go: `.API.MustCreateVRFKey()`
$DIR/integration-tests/smoke/vrf_test.go: `.Debug()`
$DIR/integration-tests/smoke/vrf_test.go: `.Interface("Key JSON", nodeKey)`
$DIR/integration-tests/smoke/vrf_test.go: `.Msg("Created proving key")`
$DIR/integration-tests/smoke/vrf_test.go: `.New()`
$DIR/integration-tests/smoke/vrf_test.go: `.Coordinator.Address()`
$DIR/integration-tests/smoke/vrf_test.go: `.String()`
$DIR/integration-tests/smoke/vrf_test.go: `.API.MustCreateJob(&client.VRFJobSpec{
Name: fmt.Sprintf("vrf-%s", jobUUID),
CoordinatorAddress: contracts.Coordinator.Address(),
MinIncomingConfirmations: 1,
PublicKey: pubKeyCompressed,
ExternalJobID: jobUUID.String(),
EVMChainID: fmt.Sprint(sethClient.ChainID),
ObservationSource: ost,
})`
$DIR/integration-tests/smoke/vrf_test.go: `.Sprintf("vrf-%s", jobUUID)`
$DIR/integration-tests/smoke/vrf_test.go: `.Coordinator.Address()`
$DIR/integration-tests/smoke/vrf_test.go: `.String()`
$DIR/integration-tests/smoke/vrf_test.go: `.Sprint(sethClient.ChainID)`
$DIR/integration-tests/smoke/vrf_test.go: `.API.PrimaryEthAddress()`
$DIR/integration-tests/smoke/vrf_test.go: `.EncodeOnChainVRFProvingKey(*nodeKey)`
$DIR/integration-tests/smoke/vrf_test.go: `.Coordinator.RegisterProvingKey(
big.NewInt(1),
oracleAddr,
provingKey,
actions.EncodeOnChainExternalJobID(jobUUID),
)`
$DIR/integration-tests/smoke/vrf_test.go: `.NewInt(1)`
$DIR/integration-tests/smoke/vrf_test.go: `.EncodeOnChainExternalJobID(jobUUID)`
$DIR/integration-tests/smoke/vrf_test.go: `.Coordinator.HashOfKey(testcontext.Get(t), encodedProvingKeys[0])`
$DIR/integration-tests/smoke/vrf_test.go: `.Get(t)`
$DIR/integration-tests/smoke/vrf_test.go: `.Consumer.RequestRandomness(requestHash, big.NewInt(1))`
$DIR/integration-tests/smoke/vrf_test.go: `.NewInt(1)`
$DIR/integration-tests/smoke/vrf_test.go: `.NewGomegaWithT(t)`
$DIR/integration-tests/smoke/vrf_test.go: `.Eventually(func(g gomega.Gomega) {
jobRuns, err := env.ClCluster.Nodes[0].API.MustReadRunsByJob(job.Data.ID)
g.Expect(err).ShouldNot(gomega.HaveOccurred(), "Job execution shouldn't fail")
out, err := contracts.Consumer.RandomnessOutput(testcontext.Get(t))
g.Expect(err).ShouldNot(gomega.HaveOccurred(), "Getting the randomness output of the consumer shouldn't fail")
// Checks that the job has actually run
g.Expect(len(jobRuns.Data)).Should(gomega.BeNumerically(">=", 1),
fmt.Sprintf("Expected the VRF job to run once or more after %s", timeout))
g.Expect(out.Uint64()).ShouldNot(gomega.BeNumerically("==", 0), "Expected the VRF job give an answer other than 0")
l.Debug().Uint64("Output", out.Uint64()).Msg("Randomness fulfilled")
}, timeout, "1s")`
$DIR/integration-tests/smoke/vrf_test.go: `.API.MustReadRunsByJob(job.Data.ID)`
$DIR/integration-tests/smoke/vrf_test.go: `.Expect(err)`
$DIR/integration-tests/smoke/vrf_test.go: `.ShouldNot(gomega.HaveOccurred(), "Job execution shouldn't fail")`
$DIR/integration-tests/smoke/vrf_test.go: `.HaveOccurred()`
$DIR/integration-tests/smoke/vrf_test.go: `.Consumer.RandomnessOutput(testcontext.Get(t))`
$DIR/integration-tests/smoke/vrf_test.go: `.Get(t)`
$DIR/integration-tests/smoke/vrf_test.go: `.Expect(err)`
$DIR/integration-tests/smoke/vrf_test.go: `.ShouldNot(gomega.HaveOccurred(), "Getting the randomness output of the consumer shouldn't fail")`
$DIR/integration-tests/smoke/vrf_test.go: `.HaveOccurred()`
$DIR/integration-tests/smoke/vrf_test.go: `.Expect(len(jobRuns.Data))`
$DIR/integration-tests/smoke/vrf_test.go: `.Should(gomega.BeNumerically(">=", 1),
fmt.Sprintf("Expected the VRF job to run once or more after %s", timeout))`
$DIR/integration-tests/smoke/vrf_test.go: `.BeNumerically(">=", 1)`
$DIR/integration-tests/smoke/vrf_test.go: `.Sprintf("Expected the VRF job to run once or more after %s", timeout)`
$DIR/integration-tests/smoke/vrf_test.go: `.Expect(out.Uint64())`
$DIR/integration-tests/smoke/vrf_test.go: `.Uint64()`
$DIR/integration-tests/smoke/vrf_test.go: `.ShouldNot(gomega.BeNumerically("==", 0), "Expected the VRF job give an answer other than 0")`
$DIR/integration-tests/smoke/vrf_test.go: `.BeNumerically("==", 0)`
$DIR/integration-tests/smoke/vrf_test.go: `.Debug()`
$DIR/integration-tests/smoke/vrf_test.go: `.Uint64("Output", out.Uint64())`
$DIR/integration-tests/smoke/vrf_test.go: `.Uint64()`
$DIR/integration-tests/smoke/vrf_test.go: `.Msg("Randomness fulfilled")`
$DIR/integration-tests/smoke/vrf_test.go: `.Should(gomega.Succeed())`
$DIR/integration-tests/smoke/vrf_test.go: `.Succeed()`
$DIR/integration-tests/smoke/vrf_test.go: `.API.MustDeleteJob(job.Data.ID)`
$DIR/integration-tests/smoke/vrf_test.go: `.API.MustCreateJob(&client.VRFJobSpec{
Name: fmt.Sprintf("vrf-%s", jobUUID),
CoordinatorAddress: contracts.Coordinator.Address(),
MinIncomingConfirmations: 1,
PublicKey: pubKeyCompressed,
ExternalJobID: jobUUID.String(),
EVMChainID: fmt.Sprint(sethClient.ChainID),
ObservationSource: ost,
})`
$DIR/integration-tests/smoke/vrf_test.go: `.Sprintf("vrf-%s", jobUUID)`
$DIR/integration-tests/smoke/vrf_test.go: `.Coordinator.Address()`
$DIR/integration-tests/smoke/vrf_test.go: `.String()`
$DIR/integration-tests/smoke/vrf_test.go: `.Sprint(sethClient.ChainID)`
$DIR/integration-tests/smoke/vrf_test.go: `.Eventually(func(g gomega.Gomega) {
jobRuns, err := env.ClCluster.Nodes[0].API.MustReadRunsByJob(job.Data.ID)
g.Expect(err).ShouldNot(gomega.HaveOccurred(), "Job execution shouldn't fail")
out, err := contracts.Consumer.RandomnessOutput(testcontext.Get(t))
g.Expect(err).ShouldNot(gomega.HaveOccurred(), "Getting the randomness output of the consumer shouldn't fail")
// Checks that the job has actually run
g.Expect(len(jobRuns.Data)).Should(gomega.BeNumerically(">=", 1),
fmt.Sprintf("Expected the VRF job to run once or more after %s", timeout))
g.Expect(out.Uint64()).ShouldNot(gomega.BeNumerically("==", 0), "Expected the VRF job give an answer other than 0")
l.Debug().Uint64("Output", out.Uint64()).Msg("Randomness fulfilled")
}, timeout, "1s")`
$DIR/integration-tests/smoke/vrf_test.go: `.API.MustReadRunsByJob(job.Data.ID)`
$DIR/integration-tests/smoke/vrf_test.go: `.Expect(err)`
$DIR/integration-tests/smoke/vrf_test.go: `.ShouldNot(gomega.HaveOccurred(), "Job execution shouldn't fail")`
$DIR/integration-tests/smoke/vrf_test.go: `.HaveOccurred()`
$DIR/integration-tests/smoke/vrf_test.go: `.Consumer.RandomnessOutput(testcontext.Get(t))`
$DIR/integration-tests/smoke/vrf_test.go: `.Get(t)`
$DIR/integration-tests/smoke/vrf_test.go: `.Expect(err)`
$DIR/integration-tests/smoke/vrf_test.go: `.ShouldNot(gomega.HaveOccurred(), "Getting the randomness output of the consumer shouldn't fail")`
$DIR/integration-tests/smoke/vrf_test.go: `.HaveOccurred()`
$DIR/integration-tests/smoke/vrf_test.go: `.Expect(len(jobRuns.Data))`
$DIR/integration-tests/smoke/vrf_test.go: `.Should(gomega.BeNumerically(">=", 1),
fmt.Sprintf("Expected the VRF job to run once or more after %s", timeout))`
$DIR/integration-tests/smoke/vrf_test.go: `.BeNumerically(">=", 1)`
$DIR/integration-tests/smoke/vrf_test.go: `.Sprintf("Expected the VRF job to run once or more after %s", timeout)`
$DIR/integration-tests/smoke/vrf_test.go: `.Expect(out.Uint64())`
$DIR/integration-tests/smoke/vrf_test.go: `.Uint64()`
$DIR/integration-tests/smoke/vrf_test.go: `.ShouldNot(gomega.BeNumerically("==", 0), "Expected the VRF job give an answer other than 0")`
$DIR/integration-tests/smoke/vrf_test.go: `.BeNumerically("==", 0)`
$DIR/integration-tests/smoke/vrf_test.go: `.Debug()`
$DIR/integration-tests/smoke/vrf_test.go: `.Uint64("Output", out.Uint64())`
$DIR/integration-tests/smoke/vrf_test.go: `.Uint64()`
$DIR/integration-tests/smoke/vrf_test.go: `.Msg("Randomness fulfilled")`
$DIR/integration-tests/smoke/vrf_test.go: `.Should(gomega.Succeed())`
$DIR/integration-tests/smoke/vrf_test.go: `.Succeed()`
$DIR/integration-tests/smoke/vrfv2_test.go: `l.Info().
Str("Network Name", sethClient.Cfg.Network.Name).
Msg("Network is a simulated network. Skipping fund return for Coordinator Subscriptions.")`
$DIR/integration-tests/smoke/vrfv2_test.go: `vrfv2.CancelSubsAndReturnFunds(testcontext.Get(t), vrfContracts, sethClient.MustGetRootKeyAddress().Hex(), subIDsForCancellingAfterTest, l)`
$DIR/integration-tests/smoke/vrfv2_test.go: `testEnv, vrfContracts, vrfKey, nodeTypeToNodeMap, err = vrfv2.SetupVRFV2Universe(testcontext.Get(t), t, vrfEnvConfig, newEnvConfig, l)`
$DIR/integration-tests/smoke/vrfv2_test.go: `t.Run("Request Randomness", func(t *testing.T) {
configCopy := config.MustCopy().(tc.TestConfig)
consumers, subIDsForRequestRandomness, err := vrfv2.SetupNewConsumersAndSubs(
testEnv,
chainID,
vrfContracts.CoordinatorV2,
configCopy,
vrfContracts.LinkToken,
1,
1,
l,
)
require.NoError(t, err, "error setting up new consumers and subs")
subIDForRequestRandomness := subIDsForRequestRandomness[0]
subscription, err := vrfContracts.CoordinatorV2.GetSubscription(testcontext.Get(t), subIDForRequestRandomness)
require.NoError(t, err, "error getting subscription information")
vrfcommon.LogSubDetails(l, subscription, strconv.FormatUint(subIDForRequestRandomness, 10), vrfContracts.CoordinatorV2)
subIDsForCancellingAfterTest = append(subIDsForCancellingAfterTest, subIDsForRequestRandomness...)
subBalanceBeforeRequest := subscription.Balance
// test and assert
_, randomWordsFulfilledEvent, err := vrfv2.RequestRandomnessAndWaitForFulfillment(
l,
consumers[0],
vrfContracts.CoordinatorV2,
subIDForRequestRandomness,
vrfKey,
*configCopy.VRFv2.General.MinimumConfirmations,
*configCopy.VRFv2.General.CallbackGasLimit,
*configCopy.VRFv2.General.NumberOfWords,
*configCopy.VRFv2.General.RandomnessRequestCountPerRequest,
*configCopy.VRFv2.General.RandomnessRequestCountPerRequestDeviation,
configCopy.VRFv2.General.RandomWordsFulfilledEventTimeout.Duration,
0,
)
require.NoError(t, err, "error requesting randomness and waiting for fulfilment")
expectedSubBalanceJuels := new(big.Int).Sub(subBalanceBeforeRequest, randomWordsFulfilledEvent.Payment)
subscription, err = vrfContracts.CoordinatorV2.GetSubscription(testcontext.Get(t), subIDForRequestRandomness)
require.NoError(t, err, "error getting subscription information")
subBalanceAfterRequest := subscription.Balance
require.Equal(t, expectedSubBalanceJuels, subBalanceAfterRequest)
status, err := consumers[0].GetRequestStatus(testcontext.Get(t), randomWordsFulfilledEvent.RequestId)
require.NoError(t, err, "error getting rand request status")
require.True(t, status.Fulfilled)
l.Info().Bool("Fulfilment Status", status.Fulfilled).Msg("Random Words Request Fulfilment Status")
require.Equal(t, *configCopy.VRFv2.General.NumberOfWords, uint32(len(status.RandomWords)))
for _, w := range status.RandomWords {
l.Info().Str("Output", w.String()).Msg("Randomness fulfilled")
require.Equal(t, 1, w.Cmp(big.NewInt(0)), "Expected the VRF job give an answer bigger than 0")
}
})`
$DIR/integration-tests/smoke/vrfv2_test.go: `vrfcommon.LogSubDetails(l, subscription, strconv.FormatUint(subIDForRequestRandomness, 10), vrfContracts.CoordinatorV2)`
$DIR/integration-tests/smoke/vrfv2_test.go: `subIDsForCancellingAfterTest = append(subIDsForCancellingAfterTest, subIDsForRequestRandomness...)`
$DIR/integration-tests/smoke/vrfv2_test.go: `subscription, err = vrfContracts.CoordinatorV2.GetSubscription(testcontext.Get(t), subIDForRequestRandomness)`
$DIR/integration-tests/smoke/vrfv2_test.go: `l.Info().Bool("Fulfilment Status", status.Fulfilled).Msg("Random Words Request Fulfilment Status")`
$DIR/integration-tests/smoke/vrfv2_test.go: `l.Info().Str("Output", w.String()).Msg("Randomness fulfilled")`
$DIR/integration-tests/smoke/vrfv2_test.go: `t.Run("VRF Node waits block confirmation number specified by the consumer before sending fulfilment on-chain", func(t *testing.T) {
configCopy := config.MustCopy().(tc.TestConfig)
testConfig := configCopy.VRFv2.General
consumers, subIDs, err := vrfv2.SetupNewConsumersAndSubs(
testEnv,
chainID,
vrfContracts.CoordinatorV2,
configCopy,
vrfContracts.LinkToken,
1,
1,
l,
)
require.NoError(t, err, "error setting up new consumers and subs")
subID := subIDs[0]
subscription, err := vrfContracts.CoordinatorV2.GetSubscription(testcontext.Get(t), subID)
require.NoError(t, err, "error getting subscription information")
vrfcommon.LogSubDetails(l, subscription, strconv.FormatUint(subID, 10), vrfContracts.CoordinatorV2)
subIDsForCancellingAfterTest = append(subIDsForCancellingAfterTest, subIDs...)
expectedBlockNumberWait := uint16(10)
testConfig.MinimumConfirmations = ptr.Ptr[uint16](expectedBlockNumberWait)
randomWordsRequestedEvent, randomWordsFulfilledEvent, err := vrfv2.RequestRandomnessAndWaitForFulfillment(
l,
consumers[0],
vrfContracts.CoordinatorV2,
subID,
vrfKey,
*testConfig.MinimumConfirmations,
*testConfig.CallbackGasLimit,
*testConfig.NumberOfWords,
*testConfig.RandomnessRequestCountPerRequest,
*testConfig.RandomnessRequestCountPerRequestDeviation,
testConfig.RandomWordsFulfilledEventTimeout.Duration,
0,
)
require.NoError(t, err, "error requesting randomness and waiting for fulfilment")
// check that VRF node waited at least the number of blocks specified by the consumer in the rand request min confs field
blockNumberWait := randomWordsRequestedEvent.Raw.BlockNumber - randomWordsFulfilledEvent.Raw.BlockNumber
require.GreaterOrEqual(t, blockNumberWait, uint64(expectedBlockNumberWait))
status, err := consumers[0].GetRequestStatus(testcontext.Get(t), randomWordsFulfilledEvent.RequestId)
require.NoError(t, err, "error getting rand request status")
require.True(t, status.Fulfilled)
l.Info().Bool("Fulfilment Status", status.Fulfilled).Msg("Random Words Request Fulfilment Status")
})`
$DIR/integration-tests/smoke/vrfv2_test.go: `vrfcommon.LogSubDetails(l, subscription, strconv.FormatUint(subID, 10), vrfContracts.CoordinatorV2)`
$DIR/integration-tests/smoke/vrfv2_test.go: `subIDsForCancellingAfterTest = append(subIDsForCancellingAfterTest, subIDs...)`
$DIR/integration-tests/smoke/vrfv2_test.go: `testConfig.MinimumConfirmations = ptr.Ptr[uint16](expectedBlockNumberWait)`
$DIR/integration-tests/smoke/vrfv2_test.go: `l.Info().Bool("Fulfilment Status", status.Fulfilled).Msg("Random Words Request Fulfilment Status")`
$DIR/integration-tests/smoke/vrfv2_test.go: `t.Run("CL Node VRF Job Runs", func(t *testing.T) {
configCopy := config.MustCopy().(tc.TestConfig)
consumers, subIDsForJobRuns, err := vrfv2.SetupNewConsumersAndSubs(
testEnv,
chainID,
vrfContracts.CoordinatorV2,
configCopy,
vrfContracts.LinkToken,
1,
1,
l,
)
require.NoError(t, err, "error setting up new consumers and subs")
subIDForJobRuns := subIDsForJobRuns[0]
subscription, err := vrfContracts.CoordinatorV2.GetSubscription(testcontext.Get(t), subIDForJobRuns)
require.NoError(t, err, "error getting subscription information")
vrfcommon.LogSubDetails(l, subscription, strconv.FormatUint(subIDForJobRuns, 10), vrfContracts.CoordinatorV2)
subIDsForCancellingAfterTest = append(subIDsForCancellingAfterTest, subIDsForJobRuns...)
jobRunsBeforeTest, err := nodeTypeToNodeMap[vrfcommon.VRF].CLNode.API.MustReadRunsByJob(nodeTypeToNodeMap[vrfcommon.VRF].Job.Data.ID)
require.NoError(t, err, "error reading job runs")
// test and assert
_, _, err = vrfv2.RequestRandomnessAndWaitForFulfillment(
l,
consumers[0],
vrfContracts.CoordinatorV2,
subIDForJobRuns,
vrfKey,
*configCopy.VRFv2.General.MinimumConfirmations,
*configCopy.VRFv2.General.CallbackGasLimit,
*configCopy.VRFv2.General.NumberOfWords,
*configCopy.VRFv2.General.RandomnessRequestCountPerRequest,
*configCopy.VRFv2.General.RandomnessRequestCountPerRequestDeviation,
configCopy.VRFv2.General.RandomWordsFulfilledEventTimeout.Duration,
0,
)
require.NoError(t, err, "error requesting randomness and waiting for fulfilment")
jobRuns, err := nodeTypeToNodeMap[vrfcommon.VRF].CLNode.API.MustReadRunsByJob(nodeTypeToNodeMap[vrfcommon.VRF].Job.Data.ID)
require.NoError(t, err, "error reading job runs")
require.Equal(t, len(jobRunsBeforeTest.Data)+1, len(jobRuns.Data))
})`
$DIR/integration-tests/smoke/vrfv2_test.go: `vrfcommon.LogSubDetails(l, subscription, strconv.FormatUint(subIDForJobRuns, 10), vrfContracts.CoordinatorV2)`
$DIR/integration-tests/smoke/vrfv2_test.go: `subIDsForCancellingAfterTest = append(subIDsForCancellingAfterTest, subIDsForJobRuns...)`
$DIR/integration-tests/smoke/vrfv2_test.go: `_, _, err = vrfv2.RequestRandomnessAndWaitForFulfillment(
l,
consumers[0],
vrfContracts.CoordinatorV2,
subIDForJobRuns,
vrfKey,
*configCopy.VRFv2.General.MinimumConfirmations,
*configCopy.VRFv2.General.CallbackGasLimit,
*configCopy.VRFv2.General.NumberOfWords,
*configCopy.VRFv2.General.RandomnessRequestCountPerRequest,
*configCopy.VRFv2.General.RandomnessRequestCountPerRequestDeviation,
configCopy.VRFv2.General.RandomWordsFulfilledEventTimeout.Duration,
0,
)`
$DIR/integration-tests/smoke/vrfv2_test.go: `t.Run("Direct Funding", func(t *testing.T) {
configCopy := config.MustCopy().(tc.TestConfig)
wrapperContracts, wrapperSubID, err := vrfv2.SetupVRFV2WrapperEnvironment(
testcontext.Get(t),
testEnv,
chainID,
&configCopy,
vrfContracts.LinkToken,
vrfContracts.MockETHLINKFeed,
vrfContracts.CoordinatorV2,
vrfKey.KeyHash,
1,
)
require.NoError(t, err)
subIDsForCancellingAfterTest = append(subIDsForCancellingAfterTest, *wrapperSubID)
wrapperConsumer := wrapperContracts.LoadTestConsumers[0]
wrapperConsumerJuelsBalanceBeforeRequest, err := vrfContracts.LinkToken.BalanceOf(testcontext.Get(t), wrapperConsumer.Address())
require.NoError(t, err, "Error getting wrapper consumer balance")
wrapperSubscription, err := vrfContracts.CoordinatorV2.GetSubscription(testcontext.Get(t), *wrapperSubID)
require.NoError(t, err, "Error getting subscription information")
subBalanceBeforeRequest := wrapperSubscription.Balance
// Request Randomness and wait for fulfillment event
randomWordsFulfilledEvent, err := vrfv2.DirectFundingRequestRandomnessAndWaitForFulfillment(
l,
wrapperConsumer,
vrfContracts.CoordinatorV2,
*wrapperSubID,
vrfKey,
*configCopy.VRFv2.General.MinimumConfirmations,
*configCopy.VRFv2.General.CallbackGasLimit,
*configCopy.VRFv2.General.NumberOfWords,
*configCopy.VRFv2.General.RandomnessRequestCountPerRequest,
*configCopy.VRFv2.General.RandomnessRequestCountPerRequestDeviation,
configCopy.VRFv2.General.RandomWordsFulfilledEventTimeout.Duration,
)
require.NoError(t, err, "Error requesting randomness and waiting for fulfilment")
// Check wrapper subscription balance
expectedSubBalanceJuels := new(big.Int).Sub(subBalanceBeforeRequest, randomWordsFulfilledEvent.Payment)
wrapperSubscription, err = vrfContracts.CoordinatorV2.GetSubscription(testcontext.Get(t), *wrapperSubID)
require.NoError(t, err, "Error getting subscription information")
subBalanceAfterRequest := wrapperSubscription.Balance
require.Equal(t, expectedSubBalanceJuels, subBalanceAfterRequest)
// Check status of randomness request within the wrapper consumer contract
consumerStatus, err := wrapperConsumer.GetRequestStatus(testcontext.Get(t), randomWordsFulfilledEvent.RequestId)
require.NoError(t, err, "Error getting randomness request status")
require.True(t, consumerStatus.Fulfilled)
// Check wrapper consumer LINK balance
expectedWrapperConsumerJuelsBalance := new(big.Int).Sub(wrapperConsumerJuelsBalanceBeforeRequest, consumerStatus.Paid)
wrapperConsumerJuelsBalanceAfterRequest, err := vrfContracts.LinkToken.BalanceOf(testcontext.Get(t), wrapperConsumer.Address())
require.NoError(t, err, "Error getting wrapper consumer balance")
require.Equal(t, expectedWrapperConsumerJuelsBalance, wrapperConsumerJuelsBalanceAfterRequest)
// Check random word count
require.Equal(t, *configCopy.VRFv2.General.NumberOfWords, uint32(len(consumerStatus.RandomWords)))
for _, w := range consumerStatus.RandomWords {
l.Info().Str("Output", w.String()).Msg("Randomness fulfilled")
require.Equal(t, 1, w.Cmp(big.NewInt(0)), "Expected the VRF job give an answer bigger than 0")
}
l.Info().
Str("Consumer Balance Before Request (Link)", (*commonassets.Link)(wrapperConsumerJuelsBalanceBeforeRequest).Link()).
Str("Consumer Balance After Request (Link)", (*commonassets.Link)(wrapperConsumerJuelsBalanceAfterRequest).Link()).
Bool("Fulfilment Status", consumerStatus.Fulfilled).
Str("Paid by Consumer Contract (Link)", (*commonassets.Link)(consumerStatus.Paid).Link()).
Str("Paid by Coordinator Sub (Link)", (*commonassets.Link)(randomWordsFulfilledEvent.Payment).Link()).
Str("RequestTimestamp", consumerStatus.RequestTimestamp.String()).
Str("FulfilmentTimestamp", consumerStatus.FulfilmentTimestamp.String()).
Str("RequestBlockNumber", consumerStatus.RequestBlockNumber.String()).
Str("FulfilmentBlockNumber", consumerStatus.FulfilmentBlockNumber.String()).
Str("TX Hash", randomWordsFulfilledEvent.Raw.TxHash.String()).
Msg("Random Words Fulfilment Details For Link Billing")
})`
$DIR/integration-tests/smoke/vrfv2_test.go: `subIDsForCancellingAfterTest = append(subIDsForCancellingAfterTest, *wrapperSubID)`
$DIR/integration-tests/smoke/vrfv2_test.go: `wrapperSubscription, err = vrfContracts.CoordinatorV2.GetSubscription(testcontext.Get(t), *wrapperSubID)`
$DIR/integration-tests/smoke/vrfv2_test.go: `l.Info().Str("Output", w.String()).Msg("Randomness fulfilled")`
$DIR/integration-tests/smoke/vrfv2_test.go: `l.Info().
Str("Consumer Balance Before Request (Link)", (*commonassets.Link)(wrapperConsumerJuelsBalanceBeforeRequest).Link()).
Str("Consumer Balance After Request (Link)", (*commonassets.Link)(wrapperConsumerJuelsBalanceAfterRequest).Link()).
Bool("Fulfilment Status", consumerStatus.Fulfilled).
Str("Paid by Consumer Contract (Link)", (*commonassets.Link)(consumerStatus.Paid).Link()).
Str("Paid by Coordinator Sub (Link)", (*commonassets.Link)(randomWordsFulfilledEvent.Payment).Link()).
Str("RequestTimestamp", consumerStatus.RequestTimestamp.String()).
Str("FulfilmentTimestamp", consumerStatus.FulfilmentTimestamp.String()).
Str("RequestBlockNumber", consumerStatus.RequestBlockNumber.String()).
Str("FulfilmentBlockNumber", consumerStatus.FulfilmentBlockNumber.String()).
Str("TX Hash", randomWordsFulfilledEvent.Raw.TxHash.String()).
Msg("Random Words Fulfilment Details For Link Billing")`
$DIR/integration-tests/smoke/vrfv2_test.go: `t.Run("Oracle Withdraw", func(t *testing.T) {
configCopy := config.MustCopy().(tc.TestConfig)
consumers, subIDsForOracleWithDraw, err := vrfv2.SetupNewConsumersAndSubs(
testEnv,
chainID,
vrfContracts.CoordinatorV2,
configCopy,
vrfContracts.LinkToken,
1,
1,
l,
)
require.NoError(t, err, "error setting up new consumers and subs")
subIDForOracleWithdraw := subIDsForOracleWithDraw[0]
subscription, err := vrfContracts.CoordinatorV2.GetSubscription(testcontext.Get(t), subIDForOracleWithdraw)
require.NoError(t, err, "error getting subscription information")
vrfcommon.LogSubDetails(l, subscription, strconv.FormatUint(subIDForOracleWithdraw, 10), vrfContracts.CoordinatorV2)
subIDsForCancellingAfterTest = append(subIDsForCancellingAfterTest, subIDsForOracleWithDraw...)
_, fulfilledEventLink, err := vrfv2.RequestRandomnessAndWaitForFulfillment(
l,
consumers[0],
vrfContracts.CoordinatorV2,
subIDForOracleWithdraw,
vrfKey,
*configCopy.VRFv2.General.MinimumConfirmations,
*configCopy.VRFv2.General.CallbackGasLimit,
*configCopy.VRFv2.General.NumberOfWords,
*configCopy.VRFv2.General.RandomnessRequestCountPerRequest,
*configCopy.VRFv2.General.RandomnessRequestCountPerRequestDeviation,
configCopy.VRFv2.General.RandomWordsFulfilledEventTimeout.Duration,
0,
)
require.NoError(t, err)
amountToWithdrawLink := fulfilledEventLink.Payment
defaultWalletBalanceLinkBeforeOracleWithdraw, err := vrfContracts.LinkToken.BalanceOf(testcontext.Get(t), sethClient.MustGetRootKeyAddress().Hex())
require.NoError(t, err)
l.Info().
Str("Returning to", sethClient.MustGetRootKeyAddress().Hex()).
Str("Amount", amountToWithdrawLink.String()).
Msg("Invoking Oracle Withdraw for LINK")
err = vrfContracts.CoordinatorV2.OracleWithdraw(sethClient.MustGetRootKeyAddress(), amountToWithdrawLink)
require.NoError(t, err, "Error withdrawing LINK from coordinator to default wallet")
defaultWalletBalanceLinkAfterOracleWithdraw, err := vrfContracts.LinkToken.BalanceOf(testcontext.Get(t), sethClient.MustGetRootKeyAddress().Hex())
require.NoError(t, err)
require.Equal(
t,
1,
defaultWalletBalanceLinkAfterOracleWithdraw.Cmp(defaultWalletBalanceLinkBeforeOracleWithdraw),
"LINK funds were not returned after oracle withdraw",
)
})`
$DIR/integration-tests/smoke/vrfv2_test.go: `vrfcommon.LogSubDetails(l, subscription, strconv.FormatUint(subIDForOracleWithdraw, 10), vrfContracts.CoordinatorV2)`
$DIR/integration-tests/smoke/vrfv2_test.go: `subIDsForCancellingAfterTest = append(subIDsForCancellingAfterTest, subIDsForOracleWithDraw...)`
$DIR/integration-tests/smoke/vrfv2_test.go: `l.Info().
Str("Returning to", sethClient.MustGetRootKeyAddress().Hex()).
Str("Amount", amountToWithdrawLink.String()).
Msg("Invoking Oracle Withdraw for LINK")`
$DIR/integration-tests/smoke/vrfv2_test.go: `err = vrfContracts.CoordinatorV2.OracleWithdraw(sethClient.MustGetRootKeyAddress(), amountToWithdrawLink)`
$DIR/integration-tests/smoke/vrfv2_test.go: `t.Run("Canceling Sub And Returning Funds", func(t *testing.T) {
configCopy := config.MustCopy().(tc.TestConfig)
_, subIDsForCancelling, err := vrfv2.SetupNewConsumersAndSubs(
testEnv,
chainID,
vrfContracts.CoordinatorV2,
configCopy,
vrfContracts.LinkToken,
1,
1,
l,
)
require.NoError(t, err, "error setting up new consumers and subs")
subIDForCancelling := subIDsForCancelling[0]
subscription, err := vrfContracts.CoordinatorV2.GetSubscription(testcontext.Get(t), subIDForCancelling)
require.NoError(t, err, "error getting subscription information")
vrfcommon.LogSubDetails(l, subscription, strconv.FormatUint(subIDForCancelling, 10), vrfContracts.CoordinatorV2)
subIDsForCancellingAfterTest = append(subIDsForCancellingAfterTest, subIDsForCancelling...)
testWalletAddress, err := actions.GenerateWallet()
require.NoError(t, err)
testWalletBalanceLinkBeforeSubCancelling, err := vrfContracts.LinkToken.BalanceOf(testcontext.Get(t), testWalletAddress.String())
require.NoError(t, err)
subscriptionForCancelling, err := vrfContracts.CoordinatorV2.GetSubscription(testcontext.Get(t), subIDForCancelling)
require.NoError(t, err, "error getting subscription information")
subBalanceLink := subscriptionForCancelling.Balance
l.Info().
Str("Subscription Amount Link", subBalanceLink.String()).
Uint64("Returning funds from SubID", subIDForCancelling).
Str("Returning funds to", testWalletAddress.String()).
Msg("Canceling subscription and returning funds to subscription owner")
cancellationTx, cancellationEvent, err := vrfContracts.CoordinatorV2.CancelSubscription(subIDForCancelling, testWalletAddress)
require.NoError(t, err, "Error canceling subscription")
txGasUsed := new(big.Int).SetUint64(cancellationTx.Receipt.GasUsed)
// we don't have that information for older Geth versions
if cancellationTx.Receipt.EffectiveGasPrice == nil {
cancellationTx.Receipt.EffectiveGasPrice = new(big.Int).SetUint64(0)
}
cancellationTxFeeWei := new(big.Int).Mul(txGasUsed, cancellationTx.Receipt.EffectiveGasPrice)
l.Info().
Str("Cancellation Tx Fee Wei", cancellationTxFeeWei.String()).
Str("Effective Gas Price", cancellationTx.Receipt.EffectiveGasPrice.String()).
Uint64("Gas Used", cancellationTx.Receipt.GasUsed).
Msg("Cancellation TX Receipt")
l.Info().
Str("Returned Subscription Amount Link", cancellationEvent.Amount.String()).
Uint64("SubID", cancellationEvent.SubId).
Str("Returned to", cancellationEvent.To.String()).
Msg("Subscription Canceled Event")
require.Equal(t, subBalanceLink, cancellationEvent.Amount, "SubscriptionCanceled event LINK amount is not equal to sub amount while canceling subscription")
testWalletBalanceLinkAfterSubCancelling, err := vrfContracts.LinkToken.BalanceOf(testcontext.Get(t), testWalletAddress.String())
require.NoError(t, err)
//Verify that sub was deleted from Coordinator
_, err = vrfContracts.CoordinatorV2.GetSubscription(testcontext.Get(t), subIDForCancelling)
require.Error(t, err, "error not occurred when trying to get deleted subscription from old Coordinator after sub migration")
subFundsReturnedLinkActual := new(big.Int).Sub(testWalletBalanceLinkAfterSubCancelling, testWalletBalanceLinkBeforeSubCancelling)
l.Info().
Str("Cancellation Tx Fee Wei", cancellationTxFeeWei.String()).
Str("Sub Funds Returned Actual - Link", subFundsReturnedLinkActual.String()).
Str("Sub Balance - Link", subBalanceLink.String()).
Msg("Sub funds returned")
require.Equal(t, 0, subBalanceLink.Cmp(subFundsReturnedLinkActual), "Returned LINK funds are not equal to sub balance that was cancelled")
})`
$DIR/integration-tests/smoke/vrfv2_test.go: `vrfcommon.LogSubDetails(l, subscription, strconv.FormatUint(subIDForCancelling, 10), vrfContracts.CoordinatorV2)`
$DIR/integration-tests/smoke/vrfv2_test.go: `subIDsForCancellingAfterTest = append(subIDsForCancellingAfterTest, subIDsForCancelling...)`
$DIR/integration-tests/smoke/vrfv2_test.go: `l.Info().
Str("Subscription Amount Link", subBalanceLink.String()).
Uint64("Returning funds from SubID", subIDForCancelling).
Str("Returning funds to", testWalletAddress.String()).
Msg("Canceling subscription and returning funds to subscription owner")`
$DIR/integration-tests/smoke/vrfv2_test.go: `cancellationTx.Receipt.EffectiveGasPrice = new(big.Int).SetUint64(0)`
$DIR/integration-tests/smoke/vrfv2_test.go: `l.Info().
Str("Cancellation Tx Fee Wei", cancellationTxFeeWei.String()).
Str("Effective Gas Price", cancellationTx.Receipt.EffectiveGasPrice.String()).
Uint64("Gas Used", cancellationTx.Receipt.GasUsed).
Msg("Cancellation TX Receipt")`
$DIR/integration-tests/smoke/vrfv2_test.go: `l.Info().
Str("Returned Subscription Amount Link", cancellationEvent.Amount.String()).
Uint64("SubID", cancellationEvent.SubId).
Str("Returned to", cancellationEvent.To.String()).
Msg("Subscription Canceled Event")`
$DIR/integration-tests/smoke/vrfv2_test.go: `_, err = vrfContracts.CoordinatorV2.GetSubscription(testcontext.Get(t), subIDForCancelling)`
$DIR/integration-tests/smoke/vrfv2_test.go: `l.Info().
Str("Cancellation Tx Fee Wei", cancellationTxFeeWei.String()).
Str("Sub Funds Returned Actual - Link", subFundsReturnedLinkActual.String()).
Str("Sub Balance - Link", subBalanceLink.String()).
Msg("Sub funds returned")`
$DIR/integration-tests/smoke/vrfv2_test.go: `configCopy.VRFv2.General.SubscriptionFundingAmountLink = ptr.Ptr(float64(0))`
$DIR/integration-tests/smoke/vrfv2_test.go: `vrfcommon.LogSubDetails(l, subscriptionForCancelling, strconv.FormatUint(subIDForOwnerCancelling, 10), vrfContracts.CoordinatorV2)`
$DIR/integration-tests/smoke/vrfv2_test.go: `subIDsForCancellingAfterTest = append(subIDsForCancellingAfterTest, subIDsForOwnerCancelling...)`
$DIR/integration-tests/smoke/vrfv2_test.go: `_, _, err = vrfv2.RequestRandomnessAndWaitForFulfillment(
l,
consumers[0],
vrfContracts.CoordinatorV2,
subIDForOwnerCancelling,
vrfKey,
*configCopy.VRFv2.General.MinimumConfirmations,
*configCopy.VRFv2.General.CallbackGasLimit,
*configCopy.VRFv2.General.NumberOfWords,
*configCopy.VRFv2.General.RandomnessRequestCountPerRequest,
*configCopy.VRFv2.General.RandomnessRequestCountPerRequestDeviation,
randomWordsFulfilledEventTimeout,
0,
)`
$DIR/integration-tests/smoke/vrfv2_test.go: `pendingRequestsExist, err = vrfContracts.CoordinatorV2.PendingRequestsExist(testcontext.Get(t), subIDForOwnerCancelling)`
$DIR/integration-tests/smoke/vrfv2_test.go: `subscriptionForCancelling, err = vrfContracts.CoordinatorV2.GetSubscription(testcontext.Get(t), subIDForOwnerCancelling)`
$DIR/integration-tests/smoke/vrfv2_test.go: `l.Info().
Str("Subscription Amount Link", subBalanceLink.String()).
Uint64("Returning funds from SubID", subIDForOwnerCancelling).
Str("Returning funds to", sethClient.MustGetRootKeyAddress().Hex()).
Msg("Canceling subscription and returning funds to subscription owner")`
$DIR/integration-tests/smoke/vrfv2_test.go: `cancellationTx.Receipt.EffectiveGasPrice = new(big.Int).SetUint64(0)`
$DIR/integration-tests/smoke/vrfv2_test.go: `l.Info().
Str("Cancellation Tx Fee Wei", cancellationTxFeeWei.String()).
Str("Effective Gas Price", cancellationTx.Receipt.EffectiveGasPrice.String()).
Uint64("Gas Used", cancellationTx.Receipt.GasUsed).
Msg("Cancellation TX Receipt")`
$DIR/integration-tests/smoke/vrfv2_test.go: `l.Info().
Str("Returned Subscription Amount Link", cancellationEvent.Amount.String()).
Uint64("SubID", cancellationEvent.SubId).
Str("Returned to", cancellationEvent.To.String()).
Msg("Subscription Canceled Event")`
$DIR/integration-tests/smoke/vrfv2_test.go: `_, err = vrfContracts.CoordinatorV2.GetSubscription(testcontext.Get(t), subIDForOwnerCancelling)`
$DIR/integration-tests/smoke/vrfv2_test.go: `l.Info().
Str("Expected error message", err.Error())`
$DIR/integration-tests/smoke/vrfv2_test.go: `l.Info().
Str("Wallet Balance Before Owner Cancelation", walletBalanceLinkBeforeSubCancelling.String()).
Str("Cancellation Tx Fee Wei", cancellationTxFeeWei.String()).
Str("Sub Funds Returned Actual - Link", subFundsReturnedLinkActual.String()).
Str("Sub Balance - Link", subBalanceLink.String()).
Str("Wallet Balance After Owner Cancelation", walletBalanceLinkAfterSubCancelling.String()).
Msg("Sub funds returned")`
$DIR/integration-tests/smoke/vrfv2_test.go: `l.Info().
Str("Network Name", sethClient.Cfg.Network.Name).
Msg("Network is a simulated network. Skipping fund return for Coordinator Subscriptions.")`
$DIR/integration-tests/smoke/vrfv2_test.go: `vrfv2.CancelSubsAndReturnFunds(testcontext.Get(t), vrfContracts, sethClient.MustGetRootKeyAddress().Hex(), subIDsForCancellingAfterTest, l)`
$DIR/integration-tests/smoke/vrfv2_test.go: `testEnv, vrfContracts, vrfKey, nodeTypeToNodeMap, err = vrfv2.SetupVRFV2Universe(testcontext.Get(t), t, vrfEnvConfig, newEnvConfig, l)`
$DIR/integration-tests/smoke/vrfv2_test.go: `vrfcommon.LogSubDetails(l, subscriptionForMultipleSendingKeys, strconv.FormatUint(subIDForMultipleSendingKeys, 10), vrfContracts.CoordinatorV2)`
$DIR/integration-tests/smoke/vrfv2_test.go: `subIDsForCancellingAfterTest = append(subIDsForCancellingAfterTest, subIDsForMultipleSendingKeys...)`
$DIR/integration-tests/smoke/vrfv2_test.go: `fulfillmentTxFromAddresses = append(fulfillmentTxFromAddresses, fulfillmentTxFromAddress)`
$DIR/integration-tests/smoke/vrfv2_test.go: `txKeyAddresses = append(txKeyAddresses, txKey.Attributes.Address)`
$DIR/integration-tests/smoke/vrfv2_test.go: `l.Info().
Str("Network Name", sethClient.Cfg.Network.Name).
Msg("Network is a simulated network. Skipping fund return for Coordinator Subscriptions.")`
$DIR/integration-tests/smoke/vrfv2_test.go: `vrfv2.CancelSubsAndReturnFunds(testcontext.Get(t), vrfContracts, sethClient.MustGetRootKeyAddress().Hex(), subIDsForCancellingAfterTest, l)`
$DIR/integration-tests/smoke/vrfv2_test.go: `testEnv, vrfContracts, vrfKey, _, err = vrfv2.SetupVRFV2Universe(testcontext.Get(t), t, vrfEnvConfig, newEnvConfig, l)`
$DIR/integration-tests/smoke/vrfv2_test.go: `vrfcommon.LogSubDetails(l, subscriptionForMultipleSendingKeys, strconv.FormatUint(subIDForForceFulfill, 10), vrfContracts.CoordinatorV2)`
$DIR/integration-tests/smoke/vrfv2_test.go: `subIDsForCancellingAfterTest = append(subIDsForCancellingAfterTest, subIDsForForceFulfill...)`
$DIR/integration-tests/smoke/vrfv2_test.go: `err = vrfContracts.LinkToken.Transfer(
consumers[0].Address(),
conversions.EtherToWei(big.NewFloat(*configCopy.VRFv2.General.SubscriptionFundingAmountLink)),
)`
$DIR/integration-tests/smoke/vrfv2_test.go: `l.Info().
Str("Balance", conversions.WeiToEther(consumerLinkBalance).String()).
Str("Consumer", consumers[0].Address()).
Msg("Consumer Link Balance")`
$DIR/integration-tests/smoke/vrfv2_test.go: `err = vrfContracts.MockETHLINKFeed.SetBlockTimestampDeduction(big.NewInt(3))`
$DIR/integration-tests/smoke/vrfv2_test.go: `l.Info().Bool("Fulfilment Status", status.Fulfilled).Msg("Random Words Request Fulfilment Status")`
$DIR/integration-tests/smoke/vrfv2_test.go: `l.Info().Str("Output", w.String()).Msg("Randomness fulfilled")`
$DIR/integration-tests/smoke/vrfv2_test.go: `l.Info().
Str("Network Name", sethClient.Cfg.Network.Name).
Msg("Network is a simulated network. Skipping fund return for Coordinator Subscriptions.")`
$DIR/integration-tests/smoke/vrfv2_test.go: `vrfv2.CancelSubsAndReturnFunds(testcontext.Get(t), vrfContracts, sethClient.MustGetRootKeyAddress().Hex(), subIDsForCancellingAfterTest, l)`
$DIR/integration-tests/smoke/vrfv2_test.go: `vrfv2Config.General.BHSJobWaitBlocks = ptr.Ptr(2)`
$DIR/integration-tests/smoke/vrfv2_test.go: `vrfv2Config.General.BHSJobLookBackBlocks = ptr.Ptr(20)`
$DIR/integration-tests/smoke/vrfv2_test.go: `testEnv, vrfContracts, vrfKey, nodeTypeToNodeMap, err = vrfv2.SetupVRFV2Universe(testcontext.Get(t), t, vrfEnvConfig, newEnvConfig, l)`
$DIR/integration-tests/smoke/vrfv2_test.go: `t.Run("BHS Job with complete E2E - wait 256 blocks to see if Rand Request is fulfilled", func(t *testing.T) {
if os.Getenv("TEST_UNSKIP") != "true" {
t.Skip("Skipped due to long execution time. Should be run on-demand on live testnet with TEST_UNSKIP=\"true\".")
}
//BHS node should fill in blockhashes into BHS contract depending on the waitBlocks and lookBackBlocks settings
configCopy := config.MustCopy().(tc.TestConfig)
//Underfund Subscription
configCopy.VRFv2.General.SubscriptionFundingAmountLink = ptr.Ptr(float64(0))
consumers, subIDsForBHS, err := vrfv2.SetupNewConsumersAndSubs(
testEnv,
chainID,
vrfContracts.CoordinatorV2,
configCopy,
vrfContracts.LinkToken,
1,
1,
l,
)
require.NoError(t, err, "error setting up new consumers and subs")
subIDForBHS := subIDsForBHS[0]
subscriptionForBHS, err := vrfContracts.CoordinatorV2.GetSubscription(testcontext.Get(t), subIDForBHS)
require.NoError(t, err, "error getting subscription information")
vrfcommon.LogSubDetails(l, subscriptionForBHS, strconv.FormatUint(subIDForBHS, 10), vrfContracts.CoordinatorV2)
subIDsForCancellingAfterTest = append(subIDsForCancellingAfterTest, subIDsForBHS...)
randomWordsRequestedEvent, err := vrfv2.RequestRandomness(
l,
consumers[0],
vrfContracts.CoordinatorV2,
subIDForBHS,
vrfKey,
*configCopy.VRFv2.General.MinimumConfirmations,
*configCopy.VRFv2.General.CallbackGasLimit,
*configCopy.VRFv2.General.NumberOfWords,
*configCopy.VRFv2.General.RandomnessRequestCountPerRequest,
*configCopy.VRFv2.General.RandomnessRequestCountPerRequestDeviation,
SethRootKeyIndex,
)
require.NoError(t, err, "error requesting randomness")
vrfcommon.LogRandomnessRequestedEvent(l, vrfContracts.CoordinatorV2, randomWordsRequestedEvent, false, 0)
randRequestBlockNumber := randomWordsRequestedEvent.Raw.BlockNumber
var wg sync.WaitGroup
wg.Add(1)
//Wait at least 256 blocks
sethClient, err := testEnv.GetSethClient(chainID)
require.NoError(t, err, "Getting Seth client shouldn't fail")
_, err = actions.WaitForBlockNumberToBe(
randRequestBlockNumber+uint64(257),
sethClient,
&wg,
configCopy.VRFv2.General.WaitFor256BlocksTimeout.Duration,
t,
l,
)
wg.Wait()
require.NoError(t, err)
err = vrfv2.FundSubscriptions(big.NewFloat(*configCopy.VRFv2.General.SubscriptionFundingAmountLink), vrfContracts.LinkToken, vrfContracts.CoordinatorV2, subIDsForBHS)
require.NoError(t, err, "error funding subscriptions")
randomWordsFulfilledEvent, err := vrfContracts.CoordinatorV2.WaitForRandomWordsFulfilledEvent(
contracts.RandomWordsFulfilledEventFilter{
RequestIds: []*big.Int{randomWordsRequestedEvent.RequestId},
Timeout: configCopy.VRFv2.General.RandomWordsFulfilledEventTimeout.Duration,
},
)
require.NoError(t, err, "error waiting for randomness fulfilled event")
vrfcommon.LogRandomWordsFulfilledEvent(l, vrfContracts.CoordinatorV2, randomWordsFulfilledEvent, false, 0)
status, err := consumers[0].GetRequestStatus(testcontext.Get(t), randomWordsFulfilledEvent.RequestId)
require.NoError(t, err, "error getting rand request status")
require.True(t, status.Fulfilled)
l.Info().Bool("Fulfilment Status", status.Fulfilled).Msg("Random Words Request Fulfilment Status")
})`
$DIR/integration-tests/smoke/vrfv2_test.go: `configCopy.VRFv2.General.SubscriptionFundingAmountLink = ptr.Ptr(float64(0))`
$DIR/integration-tests/smoke/vrfv2_test.go: `vrfcommon.LogSubDetails(l, subscriptionForBHS, strconv.FormatUint(subIDForBHS, 10), vrfContracts.CoordinatorV2)`
$DIR/integration-tests/smoke/vrfv2_test.go: `subIDsForCancellingAfterTest = append(subIDsForCancellingAfterTest, subIDsForBHS...)`
$DIR/integration-tests/smoke/vrfv2_test.go: `vrfcommon.LogRandomnessRequestedEvent(l, vrfContracts.CoordinatorV2, randomWordsRequestedEvent, false, 0)`
$DIR/integration-tests/smoke/vrfv2_test.go: `wg.Add(1)`
$DIR/integration-tests/smoke/vrfv2_test.go: `_, err = actions.WaitForBlockNumberToBe(
randRequestBlockNumber+uint64(257),
sethClient,
&wg,
configCopy.VRFv2.General.WaitFor256BlocksTimeout.Duration,
t,
l,
)`
$DIR/integration-tests/smoke/vrfv2_test.go: `wg.Wait()`
$DIR/integration-tests/smoke/vrfv2_test.go: `err = vrfv2.FundSubscriptions(big.NewFloat(*configCopy.VRFv2.General.SubscriptionFundingAmountLink), vrfContracts.LinkToken, vrfContracts.CoordinatorV2, subIDsForBHS)`
$DIR/integration-tests/smoke/vrfv2_test.go: `vrfcommon.LogRandomWordsFulfilledEvent(l, vrfContracts.CoordinatorV2, randomWordsFulfilledEvent, false, 0)`
$DIR/integration-tests/smoke/vrfv2_test.go: `l.Info().Bool("Fulfilment Status", status.Fulfilled).Msg("Random Words Request Fulfilment Status")`
$DIR/integration-tests/smoke/vrfv2_test.go: `configCopy.VRFv2.General.SubscriptionFundingAmountLink = ptr.Ptr(float64(0))`
$DIR/integration-tests/smoke/vrfv2_test.go: `vrfcommon.LogSubDetails(l, subscriptionForBHS, strconv.FormatUint(subIDForBHS, 10), vrfContracts.CoordinatorV2)`
$DIR/integration-tests/smoke/vrfv2_test.go: `subIDsForCancellingAfterTest = append(subIDsForCancellingAfterTest, subIDsForBHS...)`
$DIR/integration-tests/smoke/vrfv2_test.go: `_, err = vrfContracts.BHS.GetBlockHash(testcontext.Get(t), big.NewInt(int64(randRequestBlockNumber)))`
$DIR/integration-tests/smoke/vrfv2_test.go: `wg.Add(1)`
$DIR/integration-tests/smoke/vrfv2_test.go: `_, err = actions.WaitForBlockNumberToBe(
randRequestBlockNumber+uint64(*configCopy.VRFv2.General.BHSJobWaitBlocks),
sethClient,
&wg,
time.Minute*1,
t,
l,
)`
$DIR/integration-tests/smoke/vrfv2_test.go: `wg.Wait()`
$DIR/integration-tests/smoke/vrfv2_test.go: `gom.Eventually(func(g gomega.Gomega) {
clNodeTxs, _, err = nodeTypeToNodeMap[vrfcommon.BHS].CLNode.API.ReadTransactions()
g.Expect(err).ShouldNot(gomega.HaveOccurred(), "error getting CL Node transactions")
l.Info().Int("Number of TXs", len(clNodeTxs.Data)).Msg("BHS Node txs")
g.Expect(len(clNodeTxs.Data)).Should(gomega.BeNumerically("==", 1), "Expected 1 tx posted by BHS Node, but found %d", len(clNodeTxs.Data))
txHash = clNodeTxs.Data[0].Attributes.Hash
}, "2m", "1s").Should(gomega.Succeed())`
$DIR/integration-tests/smoke/vrfv2_test.go: `clNodeTxs, _, err = nodeTypeToNodeMap[vrfcommon.BHS].CLNode.API.ReadTransactions()`
$DIR/integration-tests/smoke/vrfv2_test.go: `g.Expect(err).ShouldNot(gomega.HaveOccurred(), "error getting CL Node transactions")`
$DIR/integration-tests/smoke/vrfv2_test.go: `l.Info().Int("Number of TXs", len(clNodeTxs.Data)).Msg("BHS Node txs")`
$DIR/integration-tests/smoke/vrfv2_test.go: `g.Expect(len(clNodeTxs.Data)).Should(gomega.BeNumerically("==", 1), "Expected 1 tx posted by BHS Node, but found %d", len(clNodeTxs.Data))`
$DIR/integration-tests/smoke/vrfv2_test.go: `txHash = clNodeTxs.Data[0].Attributes.Hash`
$DIR/integration-tests/smoke/vrfv2_test.go: `l.Info().
Str("Block Number", bhsStoreTxInputData["n"].(*big.Int).String()).
Msg("BHS Node's Store Blockhash for Blocknumber Method TX")`
$DIR/integration-tests/smoke/vrfv2_test.go: `gom.Eventually(func(g gomega.Gomega) {
randRequestBlockHash, err = vrfContracts.BHS.GetBlockHash(testcontext.Get(t), big.NewInt(int64(randRequestBlockNumber)))
g.Expect(err).ShouldNot(gomega.HaveOccurred(), "error getting blockhash for a blocknumber which was stored in BHS contract")
}, "2m", "1s").Should(gomega.Succeed())`
$DIR/integration-tests/smoke/vrfv2_test.go: `randRequestBlockHash, err = vrfContracts.BHS.GetBlockHash(testcontext.Get(t), big.NewInt(int64(randRequestBlockNumber)))`
$DIR/integration-tests/smoke/vrfv2_test.go: `g.Expect(err).ShouldNot(gomega.HaveOccurred(), "error getting blockhash for a blocknumber which was stored in BHS contract")`
$DIR/integration-tests/smoke/vrfv2_test.go: `l.Info().
Str("Randomness Request's Blockhash", randomWordsRequestedEvent.Raw.BlockHash.String()).
Str("Block Hash stored by BHS contract", fmt.Sprintf("0x%x", randRequestBlockHash)).
Msg("BHS Contract's stored Blockhash for Randomness Request")`
$DIR/integration-tests/smoke/vrfv2_test.go: `l.Info().
Str("Network Name", sethClient.Cfg.Network.Name).
Msg("Network is a simulated network. Skipping fund return for Coordinator Subscriptions.")`
$DIR/integration-tests/smoke/vrfv2_test.go: `vrfv2.CancelSubsAndReturnFunds(testcontext.Get(t), vrfContracts, defaultWalletAddress, subIDsForCancellingAfterTest, l)`
$DIR/integration-tests/smoke/vrfv2_test.go: `env, vrfContracts, vrfKey, _, err = vrfv2.SetupVRFV2Universe(testcontext.Get(t), t, vrfEnvConfig, newEnvConfig, l)`
$DIR/integration-tests/smoke/vrfv2_test.go: `vrfcommon.LogSubDetails(l, subscription, strconv.FormatUint(subID, 10), vrfContracts.CoordinatorV2)`
$DIR/integration-tests/smoke/vrfv2_test.go: `subIDsForCancellingAfterTest = append(subIDsForCancellingAfterTest, subIDs...)`
$DIR/integration-tests/smoke/vrfv2_test.go: `t.Run("Reorg on fulfillment", func(t *testing.T) {
configCopy := config.MustCopy().(tc.TestConfig)
configCopy.VRFv2.General.MinimumConfirmations = ptr.Ptr[uint16](10)
//1. request randomness and wait for fulfillment for blockhash from Reorged Fork
randomWordsRequestedEvent, randomWordsFulfilledEventOnReorgedFork, err := vrfv2.RequestRandomnessAndWaitForFulfillment(
l,
consumers[0],
vrfContracts.CoordinatorV2,
subID,
vrfKey,
*configCopy.VRFv2.General.MinimumConfirmations,
*configCopy.VRFv2.General.CallbackGasLimit,
*configCopy.VRFv2.General.NumberOfWords,
*configCopy.VRFv2.General.RandomnessRequestCountPerRequest,
*configCopy.VRFv2.General.RandomnessRequestCountPerRequestDeviation,
configCopy.VRFv2.General.RandomWordsFulfilledEventTimeout.Duration,
0,
)
require.NoError(t, err)
// rewind chain to block number after the request was made, but before the request was fulfilled
rewindChainToBlock := randomWordsRequestedEvent.Raw.BlockNumber + 1
rpcUrl, err := actions.GetRPCUrl(env, chainID)
require.NoError(t, err, "error getting rpc url")
//2. rewind chain by n number of blocks - basically, mimicking reorg scenario
latestBlockNumberAfterReorg, err := actions.RewindSimulatedChainToBlockNumber(testcontext.Get(t), sethClient, rpcUrl, rewindChainToBlock, l)
require.NoError(t, err, fmt.Sprintf("error rewinding chain to block number %d", rewindChainToBlock))
//3.1 ensure that chain is reorged and latest block number is greater than the block number when request was made
require.Greater(t, latestBlockNumberAfterReorg, randomWordsRequestedEvent.Raw.BlockNumber)
//3.2 ensure that chain is reorged and latest block number is less than the block number when fulfilment was performed
require.Less(t, latestBlockNumberAfterReorg, randomWordsFulfilledEventOnReorgedFork.Raw.BlockNumber)
//4. wait for the fulfillment which VRF Node will generate for Canonical chain
_, err = vrfv2.WaitRandomWordsFulfilledEvent(
vrfContracts.CoordinatorV2,
randomWordsRequestedEvent.RequestId,
randomWordsRequestedEvent.Raw.BlockNumber,
configCopy.VRFv2.General.RandomWordsFulfilledEventTimeout.Duration,
l,
)
require.NoError(t, err, "error waiting for randomness fulfilled event")
})`
$DIR/integration-tests/smoke/vrfv2_test.go: `configCopy.VRFv2.General.MinimumConfirmations = ptr.Ptr[uint16](10)`
$DIR/integration-tests/smoke/vrfv2_test.go: `_, err = vrfv2.WaitRandomWordsFulfilledEvent(
vrfContracts.CoordinatorV2,
randomWordsRequestedEvent.RequestId,
randomWordsRequestedEvent.Raw.BlockNumber,
configCopy.VRFv2.General.RandomWordsFulfilledEventTimeout.Duration,
l,
)`
$DIR/integration-tests/smoke/vrfv2_test.go: `configCopy.VRFv2.General.MinimumConfirmations = ptr.Ptr[uint16](6)`
$DIR/integration-tests/smoke/vrfv2_test.go: `_, err = vrfContracts.CoordinatorV2.WaitForRandomWordsFulfilledEvent(
contracts.RandomWordsFulfilledEventFilter{
RequestIds: []*big.Int{randomWordsRequestedEvent.RequestId},
Timeout: time.Second * 10,
},
)`
$DIR/integration-tests/smoke/vrfv2_test.go: `l.Info().
Str("Network Name", sethClient.Cfg.Network.Name).
Msg("Network is a simulated network. Skipping fund return for Coordinator Subscriptions.")`
$DIR/integration-tests/smoke/vrfv2_test.go: `vrfv2.CancelSubsAndReturnFunds(testcontext.Get(t), vrfContracts, defaultWalletAddress, subIDsForCancellingAfterTest, l)`
$DIR/integration-tests/smoke/vrfv2_test.go: `env, vrfContracts, vrfKey, nodeTypeToNodeMap, err = vrfv2.SetupVRFV2Universe(testcontext.Get(t), t, vrfEnvConfig, newEnvConfig, l)`
$DIR/integration-tests/smoke/vrfv2_test.go: `config.VRFv2.General.CallbackGasLimit = ptr.Ptr(uint32(500_000))`
$DIR/integration-tests/smoke/vrfv2_test.go: `t.Run("Batch Fulfillment Enabled", func(t *testing.T) {
configCopy := config.MustCopy().(tc.TestConfig)
vrfNode, exists := nodeTypeToNodeMap[vrfcommon.VRF]
require.True(t, exists, "VRF Node does not exist")
//ensure that no job present on the node
err = actions.DeleteJobs([]*client.ChainlinkClient{vrfNode.CLNode.API})
require.NoError(t, err)
batchFullfillmentEnabled := true
// create job with batch fulfillment enabled
vrfJobSpecConfig := vrfcommon.VRFJobSpecConfig{
ForwardingAllowed: *configCopy.VRFv2.General.VRFJobForwardingAllowed,
CoordinatorAddress: vrfContracts.CoordinatorV2.Address(),
BatchCoordinatorAddress: vrfContracts.BatchCoordinatorV2.Address(),
FromAddresses: vrfNode.TXKeyAddressStrings,
EVMChainID: fmt.Sprint(chainID),
MinIncomingConfirmations: int(*configCopy.VRFv2.General.MinimumConfirmations),
PublicKey: vrfKey.PubKeyCompressed,
EstimateGasMultiplier: *configCopy.VRFv2.General.VRFJobEstimateGasMultiplier,
BatchFulfillmentEnabled: batchFullfillmentEnabled,
BatchFulfillmentGasMultiplier: *configCopy.VRFv2.General.VRFJobBatchFulfillmentGasMultiplier,
PollPeriod: configCopy.VRFv2.General.VRFJobPollPeriod.Duration,
RequestTimeout: configCopy.VRFv2.General.VRFJobRequestTimeout.Duration,
SimulationBlock: configCopy.VRFv2.General.VRFJobSimulationBlock,
VRFOwnerConfig: &vrfcommon.VRFOwnerConfig{
UseVRFOwner: false,
},
}
l.Info().
Msg("Creating VRFV2 Job with `batchFulfillmentEnabled = true`")
job, err := vrfv2.CreateVRFV2Job(
vrfNode.CLNode.API,
vrfJobSpecConfig,
)
require.NoError(t, err, "error creating job with higher timeout")
vrfNode.Job = job
consumers, subIDs, err := vrfv2.SetupNewConsumersAndSubs(
env,
chainID,
vrfContracts.CoordinatorV2,
configCopy,
vrfContracts.LinkToken,
1,
1,
l,
)
require.NoError(t, err, "error setting up new consumers and subs")
subID := subIDs[0]
subscription, err := vrfContracts.CoordinatorV2.GetSubscription(testcontext.Get(t), subID)
require.NoError(t, err, "error getting subscription information")
vrfcommon.LogSubDetails(l, subscription, strconv.FormatUint(subID, 10), vrfContracts.CoordinatorV2)
subIDsForCancellingAfterTest = append(subIDsForCancellingAfterTest, subIDs...)
configCopy.VRFv2.General.RandomnessRequestCountPerRequest = ptr.Ptr(uint16(randRequestCount))
// test and assert
_, randomWordsFulfilledEvent, err := vrfv2.RequestRandomnessAndWaitForFulfillment(
l,
consumers[0],
vrfContracts.CoordinatorV2,
subID,
vrfKey,
*configCopy.VRFv2.General.MinimumConfirmations,
*configCopy.VRFv2.General.CallbackGasLimit,
*configCopy.VRFv2.General.NumberOfWords,
*configCopy.VRFv2.General.RandomnessRequestCountPerRequest,
*configCopy.VRFv2.General.RandomnessRequestCountPerRequestDeviation,
configCopy.VRFv2.General.RandomWordsFulfilledEventTimeout.Duration,
0,
)
require.NoError(t, err, "error requesting randomness and waiting for fulfilment")
var wgAllRequestsFulfilled sync.WaitGroup
wgAllRequestsFulfilled.Add(1)
requestCount, fulfilmentCount, err := vrfcommon.WaitForRequestCountEqualToFulfilmentCount(testcontext.Get(t), consumers[0], 2*time.Minute, &wgAllRequestsFulfilled)
require.NoError(t, err)
wgAllRequestsFulfilled.Wait()
l.Info().
Interface("Request Count", requestCount).
Interface("Fulfilment Count", fulfilmentCount).
Msg("Request/Fulfilment Stats")
clNodeTxs, resp, err := nodeTypeToNodeMap[vrfcommon.VRF].CLNode.API.ReadTransactions()
require.NoError(t, err)
require.Equal(t, 200, resp.StatusCode)
var batchFulfillmentTxs []client.TransactionData
for _, tx := range clNodeTxs.Data {
if common.HexToAddress(tx.Attributes.To).Cmp(common.HexToAddress(vrfContracts.BatchCoordinatorV2.Address())) == 0 {
batchFulfillmentTxs = append(batchFulfillmentTxs, tx)
}
}
// verify that all fulfillments should be inside one tx
require.Equal(t, 1, len(batchFulfillmentTxs))
fulfillmentTx, _, err := sethClient.Client.TransactionByHash(testcontext.Get(t), randomWordsFulfilledEvent.Raw.TxHash)
require.NoError(t, err, "error getting tx from hash")
fulfillmentTXToAddress := fulfillmentTx.To().String()
l.Info().
Str("Actual Fulfillment Tx To Address", fulfillmentTXToAddress).
Str("BatchCoordinatorV2 Address", vrfContracts.BatchCoordinatorV2.Address()).
Msg("Fulfillment Tx To Address should be the BatchCoordinatorV2 Address when batch fulfillment is enabled")
// verify that VRF node sends fulfillments via BatchCoordinator contract
require.Equal(t, vrfContracts.BatchCoordinatorV2.Address(), fulfillmentTXToAddress, "Fulfillment Tx To Address should be the BatchCoordinatorV2 Address when batch fulfillment is enabled")
// verify that all fulfillments should be inside one tx
// This check is disabled for live testnets since each testnet has different gas usage for similar tx
if network.Simulated {
fulfillmentTxReceipt, err := sethClient.Client.TransactionReceipt(testcontext.Get(t), fulfillmentTx.Hash())
require.NoError(t, err)
randomWordsFulfilledLogs, err := contracts.ParseRandomWordsFulfilledLogs(vrfContracts.CoordinatorV2, fulfillmentTxReceipt.Logs)
require.NoError(t, err)
require.Equal(t, 1, len(batchFulfillmentTxs))
require.Equal(t, int(randRequestCount), len(randomWordsFulfilledLogs))
}
})`
$DIR/integration-tests/smoke/vrfv2_test.go: `err = actions.DeleteJobs([]*client.ChainlinkClient{vrfNode.CLNode.API})`
$DIR/integration-tests/smoke/vrfv2_test.go: `l.Info().
Msg("Creating VRFV2 Job with `batchFulfillmentEnabled = true`")`
$DIR/integration-tests/smoke/vrfv2_test.go: `vrfNode.Job = job`
$DIR/integration-tests/smoke/vrfv2_test.go: `vrfcommon.LogSubDetails(l, subscription, strconv.FormatUint(subID, 10), vrfContracts.CoordinatorV2)`
$DIR/integration-tests/smoke/vrfv2_test.go: `subIDsForCancellingAfterTest = append(subIDsForCancellingAfterTest, subIDs...)`
$DIR/integration-tests/smoke/vrfv2_test.go: `configCopy.VRFv2.General.RandomnessRequestCountPerRequest = ptr.Ptr(uint16(randRequestCount))`
$DIR/integration-tests/smoke/vrfv2_test.go: `wgAllRequestsFulfilled.Add(1)`
$DIR/integration-tests/smoke/vrfv2_test.go: `wgAllRequestsFulfilled.Wait()`
$DIR/integration-tests/smoke/vrfv2_test.go: `l.Info().
Interface("Request Count", requestCount).
Interface("Fulfilment Count", fulfilmentCount).
Msg("Request/Fulfilment Stats")`
$DIR/integration-tests/smoke/vrfv2_test.go: `batchFulfillmentTxs = append(batchFulfillmentTxs, tx)`
$DIR/integration-tests/smoke/vrfv2_test.go: `l.Info().
Str("Actual Fulfillment Tx To Address", fulfillmentTXToAddress).
Str("BatchCoordinatorV2 Address", vrfContracts.BatchCoordinatorV2.Address()).
Msg("Fulfillment Tx To Address should be the BatchCoordinatorV2 Address when batch fulfillment is enabled")`
$DIR/integration-tests/smoke/vrfv2_test.go: `err = actions.DeleteJobs([]*client.ChainlinkClient{vrfNode.CLNode.API})`
$DIR/integration-tests/smoke/vrfv2_test.go: `l.Info().
Msg("Creating VRFV2 Job with `batchFulfillmentEnabled = false`")`
$DIR/integration-tests/smoke/vrfv2_test.go: `vrfNode.Job = job`
$DIR/integration-tests/smoke/vrfv2_test.go: `vrfcommon.LogSubDetails(l, subscription, strconv.FormatUint(subID, 10), vrfContracts.CoordinatorV2)`
$DIR/integration-tests/smoke/vrfv2_test.go: `subIDsForCancellingAfterTest = append(subIDsForCancellingAfterTest, subIDs...)`
$DIR/integration-tests/smoke/vrfv2_test.go: `configCopy.VRFv2.General.RandomnessRequestCountPerRequest = ptr.Ptr(uint16(randRequestCount))`
$DIR/integration-tests/smoke/vrfv2_test.go: `wgAllRequestsFulfilled.Add(1)`
$DIR/integration-tests/smoke/vrfv2_test.go: `wgAllRequestsFulfilled.Wait()`
$DIR/integration-tests/smoke/vrfv2_test.go: `l.Info().
Interface("Request Count", requestCount).
Interface("Fulfilment Count", fulfilmentCount).
Msg("Request/Fulfilment Stats")`
$DIR/integration-tests/smoke/vrfv2_test.go: `l.Info().
Str("Actual Fulfillment Tx To Address", fulfillmentTXToAddress).
Str("CoordinatorV2 Address", vrfContracts.CoordinatorV2.Address()).
Msg("Fulfillment Tx To Address should be the CoordinatorV2 Address when batch fulfillment is disabled")`
$DIR/integration-tests/smoke/vrfv2_test.go: `singleFulfillmentTxs = append(singleFulfillmentTxs, tx)`
$DIR/integration-tests/smoke/vrfv2_test.go: `.GetTestLogger(t)`
$DIR/integration-tests/smoke/vrfv2_test.go: `.GetConfig("Smoke", tc.VRFv2)`
$DIR/integration-tests/smoke/vrfv2_test.go: `.MustGetSelectedNetworkConfig(config.GetNetworkConfig())`
$DIR/integration-tests/smoke/vrfv2_test.go: `.GetNetworkConfig()`
$DIR/integration-tests/smoke/vrfv2_test.go: `.GetSethClient(chainID)`
$DIR/integration-tests/smoke/vrfv2_test.go: `.Cfg.IsSimulatedNetwork()`
$DIR/integration-tests/smoke/vrfv2_test.go: `.Info()`
$DIR/integration-tests/smoke/vrfv2_test.go: `.
Str("Network Name", sethClient.Cfg.Network.Name)`
$DIR/integration-tests/smoke/vrfv2_test.go: `.
Msg("Network is a simulated network. Skipping fund return for Coordinator Subscriptions.")`
$DIR/integration-tests/smoke/vrfv2_test.go: `.CancelSubsAndReturnFunds(testcontext.Get(t), vrfContracts, sethClient.MustGetRootKeyAddress().Hex(), subIDsForCancellingAfterTest, l)`
$DIR/integration-tests/smoke/vrfv2_test.go: `.Get(t)`
$DIR/integration-tests/smoke/vrfv2_test.go: `.MustGetRootKeyAddress()`
$DIR/integration-tests/smoke/vrfv2_test.go: `.Hex()`
$DIR/integration-tests/smoke/vrfv2_test.go: `.Cleanup(test_env.CleanupOpts{TestName: t.Name()})`
$DIR/integration-tests/smoke/vrfv2_test.go: `.Name()`
$DIR/integration-tests/smoke/vrfv2_test.go: `.SetupVRFV2Universe(testcontext.Get(t), t, vrfEnvConfig, newEnvConfig, l)`
$DIR/integration-tests/smoke/vrfv2_test.go: `.Get(t)`
$DIR/integration-tests/smoke/vrfv2_test.go: `.GetSethClient(chainID)`
$DIR/integration-tests/smoke/vrfv2_test.go: `.Run("Request Randomness", func(t *testing.T) {
configCopy := config.MustCopy().(tc.TestConfig)
consumers, subIDsForRequestRandomness, err := vrfv2.SetupNewConsumersAndSubs(
testEnv,
chainID,
vrfContracts.CoordinatorV2,
configCopy,
vrfContracts.LinkToken,
1,
1,
l,
)
require.NoError(t, err, "error setting up new consumers and subs")
subIDForRequestRandomness := subIDsForRequestRandomness[0]
subscription, err := vrfContracts.CoordinatorV2.GetSubscription(testcontext.Get(t), subIDForRequestRandomness)
require.NoError(t, err, "error getting subscription information")
vrfcommon.LogSubDetails(l, subscription, strconv.FormatUint(subIDForRequestRandomness, 10), vrfContracts.CoordinatorV2)
subIDsForCancellingAfterTest = append(subIDsForCancellingAfterTest, subIDsForRequestRandomness...)
subBalanceBeforeRequest := subscription.Balance
// test and assert
_, randomWordsFulfilledEvent, err := vrfv2.RequestRandomnessAndWaitForFulfillment(
l,
consumers[0],
vrfContracts.CoordinatorV2,
subIDForRequestRandomness,
vrfKey,
*configCopy.VRFv2.General.MinimumConfirmations,
*configCopy.VRFv2.General.CallbackGasLimit,
*configCopy.VRFv2.General.NumberOfWords,
*configCopy.VRFv2.General.RandomnessRequestCountPerRequest,
*configCopy.VRFv2.General.RandomnessRequestCountPerRequestDeviation,
configCopy.VRFv2.General.RandomWordsFulfilledEventTimeout.Duration,
0,
)
require.NoError(t, err, "error requesting randomness and waiting for fulfilment")
expectedSubBalanceJuels := new(big.Int).Sub(subBalanceBeforeRequest, randomWordsFulfilledEvent.Payment)
subscription, err = vrfContracts.CoordinatorV2.GetSubscription(testcontext.Get(t), subIDForRequestRandomness)
require.NoError(t, err, "error getting subscription information")
subBalanceAfterRequest := subscription.Balance
require.Equal(t, expectedSubBalanceJuels, subBalanceAfterRequest)
status, err := consumers[0].GetRequestStatus(testcontext.Get(t), randomWordsFulfilledEvent.RequestId)
require.NoError(t, err, "error getting rand request status")
require.True(t, status.Fulfilled)
l.Info().Bool("Fulfilment Status", status.Fulfilled).Msg("Random Words Request Fulfilment Status")
require.Equal(t, *configCopy.VRFv2.General.NumberOfWords, uint32(len(status.RandomWords)))
for _, w := range status.RandomWords {
l.Info().Str("Output", w.String()).Msg("Randomness fulfilled")
require.Equal(t, 1, w.Cmp(big.NewInt(0)), "Expected the VRF job give an answer bigger than 0")
}
})`
$DIR/integration-tests/smoke/vrfv2_test.go: `.MustCopy()`
$DIR/integration-tests/smoke/vrfv2_test.go: `.SetupNewConsumersAndSubs(
testEnv,
chainID,
vrfContracts.CoordinatorV2,
configCopy,
vrfContracts.LinkToken,
1,
1,
l,
)`
$DIR/integration-tests/smoke/vrfv2_test.go: `.CoordinatorV2.GetSubscription(testcontext.Get(t), subIDForRequestRandomness)`
$DIR/integration-tests/smoke/vrfv2_test.go: `.Get(t)`
$DIR/integration-tests/smoke/vrfv2_test.go: `.LogSubDetails(l, subscription, strconv.FormatUint(subIDForRequestRandomness, 10), vrfContracts.CoordinatorV2)`
$DIR/integration-tests/smoke/vrfv2_test.go: `.FormatUint(subIDForRequestRandomness, 10)`
$DIR/integration-tests/smoke/vrfv2_test.go: `.RequestRandomnessAndWaitForFulfillment(
l,
consumers[0],
vrfContracts.CoordinatorV2,
subIDForRequestRandomness,
vrfKey,
*configCopy.VRFv2.General.MinimumConfirmations,
*configCopy.VRFv2.General.CallbackGasLimit,
*configCopy.VRFv2.General.NumberOfWords,
*configCopy.VRFv2.General.RandomnessRequestCountPerRequest,
*configCopy.VRFv2.General.RandomnessRequestCountPerRequestDeviation,
configCopy.VRFv2.General.RandomWordsFulfilledEventTimeout.Duration,
0,
)`
$DIR/integration-tests/smoke/vrfv2_test.go: `.Sub(subBalanceBeforeRequest, randomWordsFulfilledEvent.Payment)`
$DIR/integration-tests/smoke/vrfv2_test.go: `.CoordinatorV2.GetSubscription(testcontext.Get(t), subIDForRequestRandomness)`
$DIR/integration-tests/smoke/vrfv2_test.go: `.Get(t)`
$DIR/integration-tests/smoke/vrfv2_test.go: `.GetRequestStatus(testcontext.Get(t), randomWordsFulfilledEvent.RequestId)`
$DIR/integration-tests/smoke/vrfv2_test.go: `.Get(t)`
$DIR/integration-tests/smoke/vrfv2_test.go: `.Info()`
$DIR/integration-tests/smoke/vrfv2_test.go: `.Bool("Fulfilment Status", status.Fulfilled)`
$DIR/integration-tests/smoke/vrfv2_test.go: `.Msg("Random Words Request Fulfilment Status")`
$DIR/integration-tests/smoke/vrfv2_test.go: `.Info()`
$DIR/integration-tests/smoke/vrfv2_test.go: `.Str("Output", w.String())`
$DIR/integration-tests/smoke/vrfv2_test.go: `.String()`
$DIR/integration-tests/smoke/vrfv2_test.go: `.Msg("Randomness fulfilled")`
$DIR/integration-tests/smoke/vrfv2_test.go: `.Run("VRF Node waits block confirmation number specified by the consumer before sending fulfilment on-chain", func(t *testing.T) {
configCopy := config.MustCopy().(tc.TestConfig)
testConfig := configCopy.VRFv2.General
consumers, subIDs, err := vrfv2.SetupNewConsumersAndSubs(
testEnv,
chainID,
vrfContracts.CoordinatorV2,
configCopy,
vrfContracts.LinkToken,
1,
1,
l,
)
require.NoError(t, err, "error setting up new consumers and subs")
subID := subIDs[0]
subscription, err := vrfContracts.CoordinatorV2.GetSubscription(testcontext.Get(t), subID)
require.NoError(t, err, "error getting subscription information")
vrfcommon.LogSubDetails(l, subscription, strconv.FormatUint(subID, 10), vrfContracts.CoordinatorV2)
subIDsForCancellingAfterTest = append(subIDsForCancellingAfterTest, subIDs...)
expectedBlockNumberWait := uint16(10)
testConfig.MinimumConfirmations = ptr.Ptr[uint16](expectedBlockNumberWait)
randomWordsRequestedEvent, randomWordsFulfilledEvent, err := vrfv2.RequestRandomnessAndWaitForFulfillment(
l,
consumers[0],
vrfContracts.CoordinatorV2,
subID,
vrfKey,
*testConfig.MinimumConfirmations,
*testConfig.CallbackGasLimit,
*testConfig.NumberOfWords,
*testConfig.RandomnessRequestCountPerRequest,
*testConfig.RandomnessRequestCountPerRequestDeviation,
testConfig.RandomWordsFulfilledEventTimeout.Duration,
0,
)
require.NoError(t, err, "error requesting randomness and waiting for fulfilment")
// check that VRF node waited at least the number of blocks specified by the consumer in the rand request min confs field
blockNumberWait := randomWordsRequestedEvent.Raw.BlockNumber - randomWordsFulfilledEvent.Raw.BlockNumber
require.GreaterOrEqual(t, blockNumberWait, uint64(expectedBlockNumberWait))
status, err := consumers[0].GetRequestStatus(testcontext.Get(t), randomWordsFulfilledEvent.RequestId)
require.NoError(t, err, "error getting rand request status")
require.True(t, status.Fulfilled)
l.Info().Bool("Fulfilment Status", status.Fulfilled).Msg("Random Words Request Fulfilment Status")
})`
$DIR/integration-tests/smoke/vrfv2_test.go: `.MustCopy()`
$DIR/integration-tests/smoke/vrfv2_test.go: `.SetupNewConsumersAndSubs(
testEnv,
chainID,
vrfContracts.CoordinatorV2,
configCopy,
vrfContracts.LinkToken,
1,
1,
l,
)`
$DIR/integration-tests/smoke/vrfv2_test.go: `.CoordinatorV2.GetSubscription(testcontext.Get(t), subID)`
$DIR/integration-tests/smoke/vrfv2_test.go: `.Get(t)`
$DIR/integration-tests/smoke/vrfv2_test.go: `.LogSubDetails(l, subscription, strconv.FormatUint(subID, 10), vrfContracts.CoordinatorV2)`
$DIR/integration-tests/smoke/vrfv2_test.go: `.FormatUint(subID, 10)`
$DIR/integration-tests/smoke/vrfv2_test.go: `.RequestRandomnessAndWaitForFulfillment(
l,
consumers[0],
vrfContracts.CoordinatorV2,
subID,
vrfKey,
*testConfig.MinimumConfirmations,
*testConfig.CallbackGasLimit,
*testConfig.NumberOfWords,
*testConfig.RandomnessRequestCountPerRequest,
*testConfig.RandomnessRequestCountPerRequestDeviation,
testConfig.RandomWordsFulfilledEventTimeout.Duration,
0,
)`
$DIR/integration-tests/smoke/vrfv2_test.go: `.GetRequestStatus(testcontext.Get(t), randomWordsFulfilledEvent.RequestId)`
$DIR/integration-tests/smoke/vrfv2_test.go: `.Get(t)`
$DIR/integration-tests/smoke/vrfv2_test.go: `.Info()`
$DIR/integration-tests/smoke/vrfv2_test.go: `.Bool("Fulfilment Status", status.Fulfilled)`
$DIR/integration-tests/smoke/vrfv2_test.go: `.Msg("Random Words Request Fulfilment Status")`
$DIR/integration-tests/smoke/vrfv2_test.go: `.Run("CL Node VRF Job Runs", func(t *testing.T) {
configCopy := config.MustCopy().(tc.TestConfig)
consumers, subIDsForJobRuns, err := vrfv2.SetupNewConsumersAndSubs(
testEnv,
chainID,
vrfContracts.CoordinatorV2,
configCopy,
vrfContracts.LinkToken,
1,
1,
l,
)
require.NoError(t, err, "error setting up new consumers and subs")
subIDForJobRuns := subIDsForJobRuns[0]
subscription, err := vrfContracts.CoordinatorV2.GetSubscription(testcontext.Get(t), subIDForJobRuns)
require.NoError(t, err, "error getting subscription information")
vrfcommon.LogSubDetails(l, subscription, strconv.FormatUint(subIDForJobRuns, 10), vrfContracts.CoordinatorV2)
subIDsForCancellingAfterTest = append(subIDsForCancellingAfterTest, subIDsForJobRuns...)
jobRunsBeforeTest, err := nodeTypeToNodeMap[vrfcommon.VRF].CLNode.API.MustReadRunsByJob(nodeTypeToNodeMap[vrfcommon.VRF].Job.Data.ID)
require.NoError(t, err, "error reading job runs")
// test and assert
_, _, err = vrfv2.RequestRandomnessAndWaitForFulfillment(
l,
consumers[0],
vrfContracts.CoordinatorV2,
subIDForJobRuns,
vrfKey,
*configCopy.VRFv2.General.MinimumConfirmations,
*configCopy.VRFv2.General.CallbackGasLimit,
*configCopy.VRFv2.General.NumberOfWords,
*configCopy.VRFv2.General.RandomnessRequestCountPerRequest,
*configCopy.VRFv2.General.RandomnessRequestCountPerRequestDeviation,
configCopy.VRFv2.General.RandomWordsFulfilledEventTimeout.Duration,
0,
)
require.NoError(t, err, "error requesting randomness and waiting for fulfilment")
jobRuns, err := nodeTypeToNodeMap[vrfcommon.VRF].CLNode.API.MustReadRunsByJob(nodeTypeToNodeMap[vrfcommon.VRF].Job.Data.ID)
require.NoError(t, err, "error reading job runs")
require.Equal(t, len(jobRunsBeforeTest.Data)+1, len(jobRuns.Data))
})`
$DIR/integration-tests/smoke/vrfv2_test.go: `.MustCopy()`
$DIR/integration-tests/smoke/vrfv2_test.go: `.SetupNewConsumersAndSubs(
testEnv,
chainID,
vrfContracts.CoordinatorV2,
configCopy,
vrfContracts.LinkToken,
1,
1,
l,
)`
$DIR/integration-tests/smoke/vrfv2_test.go: `.CoordinatorV2.GetSubscription(testcontext.Get(t), subIDForJobRuns)`
$DIR/integration-tests/smoke/vrfv2_test.go: `.Get(t)`
$DIR/integration-tests/smoke/vrfv2_test.go: `.LogSubDetails(l, subscription, strconv.FormatUint(subIDForJobRuns, 10), vrfContracts.CoordinatorV2)`
$DIR/integration-tests/smoke/vrfv2_test.go: `.FormatUint(subIDForJobRuns, 10)`
$DIR/integration-tests/smoke/vrfv2_test.go: `.CLNode.API.MustReadRunsByJob(nodeTypeToNodeMap[vrfcommon.VRF].Job.Data.ID)`
$DIR/integration-tests/smoke/vrfv2_test.go: `.RequestRandomnessAndWaitForFulfillment(
l,
consumers[0],
vrfContracts.CoordinatorV2,
subIDForJobRuns,
vrfKey,
*configCopy.VRFv2.General.MinimumConfirmations,
*configCopy.VRFv2.General.CallbackGasLimit,
*configCopy.VRFv2.General.NumberOfWords,
*configCopy.VRFv2.General.RandomnessRequestCountPerRequest,
*configCopy.VRFv2.General.RandomnessRequestCountPerRequestDeviation,
configCopy.VRFv2.General.RandomWordsFulfilledEventTimeout.Duration,
0,
)`
$DIR/integration-tests/smoke/vrfv2_test.go: `.CLNode.API.MustReadRunsByJob(nodeTypeToNodeMap[vrfcommon.VRF].Job.Data.ID)`
$DIR/integration-tests/smoke/vrfv2_test.go: `.Run("Direct Funding", func(t *testing.T) {
configCopy := config.MustCopy().(tc.TestConfig)
wrapperContracts, wrapperSubID, err := vrfv2.SetupVRFV2WrapperEnvironment(
testcontext.Get(t),
testEnv,
chainID,
&configCopy,
vrfContracts.LinkToken,
vrfContracts.MockETHLINKFeed,
vrfContracts.CoordinatorV2,
vrfKey.KeyHash,
1,
)
require.NoError(t, err)
subIDsForCancellingAfterTest = append(subIDsForCancellingAfterTest, *wrapperSubID)
wrapperConsumer := wrapperContracts.LoadTestConsumers[0]
wrapperConsumerJuelsBalanceBeforeRequest, err := vrfContracts.LinkToken.BalanceOf(testcontext.Get(t), wrapperConsumer.Address())
require.NoError(t, err, "Error getting wrapper consumer balance")
wrapperSubscription, err := vrfContracts.CoordinatorV2.GetSubscription(testcontext.Get(t), *wrapperSubID)
require.NoError(t, err, "Error getting subscription information")
subBalanceBeforeRequest := wrapperSubscription.Balance
// Request Randomness and wait for fulfillment event
randomWordsFulfilledEvent, err := vrfv2.DirectFundingRequestRandomnessAndWaitForFulfillment(
l,
wrapperConsumer,
vrfContracts.CoordinatorV2,
*wrapperSubID,
vrfKey,
*configCopy.VRFv2.General.MinimumConfirmations,
*configCopy.VRFv2.General.CallbackGasLimit,
*configCopy.VRFv2.General.NumberOfWords,
*configCopy.VRFv2.General.RandomnessRequestCountPerRequest,
*configCopy.VRFv2.General.RandomnessRequestCountPerRequestDeviation,
configCopy.VRFv2.General.RandomWordsFulfilledEventTimeout.Duration,
)
require.NoError(t, err, "Error requesting randomness and waiting for fulfilment")
// Check wrapper subscription balance
expectedSubBalanceJuels := new(big.Int).Sub(subBalanceBeforeRequest, randomWordsFulfilledEvent.Payment)
wrapperSubscription, err = vrfContracts.CoordinatorV2.GetSubscription(testcontext.Get(t), *wrapperSubID)
require.NoError(t, err, "Error getting subscription information")
subBalanceAfterRequest := wrapperSubscription.Balance
require.Equal(t, expectedSubBalanceJuels, subBalanceAfterRequest)
// Check status of randomness request within the wrapper consumer contract
consumerStatus, err := wrapperConsumer.GetRequestStatus(testcontext.Get(t), randomWordsFulfilledEvent.RequestId)
require.NoError(t, err, "Error getting randomness request status")
require.True(t, consumerStatus.Fulfilled)
// Check wrapper consumer LINK balance
expectedWrapperConsumerJuelsBalance := new(big.Int).Sub(wrapperConsumerJuelsBalanceBeforeRequest, consumerStatus.Paid)
wrapperConsumerJuelsBalanceAfterRequest, err := vrfContracts.LinkToken.BalanceOf(testcontext.Get(t), wrapperConsumer.Address())
require.NoError(t, err, "Error getting wrapper consumer balance")
require.Equal(t, expectedWrapperConsumerJuelsBalance, wrapperConsumerJuelsBalanceAfterRequest)
// Check random word count
require.Equal(t, *configCopy.VRFv2.General.NumberOfWords, uint32(len(consumerStatus.RandomWords)))
for _, w := range consumerStatus.RandomWords {
l.Info().Str("Output", w.String()).Msg("Randomness fulfilled")
require.Equal(t, 1, w.Cmp(big.NewInt(0)), "Expected the VRF job give an answer bigger than 0")
}
l.Info().
Str("Consumer Balance Before Request (Link)", (*commonassets.Link)(wrapperConsumerJuelsBalanceBeforeRequest).Link()).
Str("Consumer Balance After Request (Link)", (*commonassets.Link)(wrapperConsumerJuelsBalanceAfterRequest).Link()).
Bool("Fulfilment Status", consumerStatus.Fulfilled).
Str("Paid by Consumer Contract (Link)", (*commonassets.Link)(consumerStatus.Paid).Link()).
Str("Paid by Coordinator Sub (Link)", (*commonassets.Link)(randomWordsFulfilledEvent.Payment).Link()).
Str("RequestTimestamp", consumerStatus.RequestTimestamp.String()).
Str("FulfilmentTimestamp", consumerStatus.FulfilmentTimestamp.String()).
Str("RequestBlockNumber", consumerStatus.RequestBlockNumber.String()).
Str("FulfilmentBlockNumber", consumerStatus.FulfilmentBlockNumber.String()).
Str("TX Hash", randomWordsFulfilledEvent.Raw.TxHash.String()).
Msg("Random Words Fulfilment Details For Link Billing")
})`
$DIR/integration-tests/smoke/vrfv2_test.go: `.MustCopy()`
$DIR/integration-tests/smoke/vrfv2_test.go: `.SetupVRFV2WrapperEnvironment(
testcontext.Get(t),
testEnv,
chainID,
&configCopy,
vrfContracts.LinkToken,
vrfContracts.MockETHLINKFeed,
vrfContracts.CoordinatorV2,
vrfKey.KeyHash,
1,
)`
$DIR/integration-tests/smoke/vrfv2_test.go: `.Get(t)`
$DIR/integration-tests/smoke/vrfv2_test.go: `.LinkToken.BalanceOf(testcontext.Get(t), wrapperConsumer.Address())`
$DIR/integration-tests/smoke/vrfv2_test.go: `.Get(t)`
$DIR/integration-tests/smoke/vrfv2_test.go: `.Address()`
$DIR/integration-tests/smoke/vrfv2_test.go: `.CoordinatorV2.GetSubscription(testcontext.Get(t), *wrapperSubID)`
$DIR/integration-tests/smoke/vrfv2_test.go: `.Get(t)`
$DIR/integration-tests/smoke/vrfv2_test.go: `.DirectFundingRequestRandomnessAndWaitForFulfillment(
l,
wrapperConsumer,
vrfContracts.CoordinatorV2,
*wrapperSubID,
vrfKey,
*configCopy.VRFv2.General.MinimumConfirmations,
*configCopy.VRFv2.General.CallbackGasLimit,
*configCopy.VRFv2.General.NumberOfWords,
*configCopy.VRFv2.General.RandomnessRequestCountPerRequest,
*configCopy.VRFv2.General.RandomnessRequestCountPerRequestDeviation,
configCopy.VRFv2.General.RandomWordsFulfilledEventTimeout.Duration,
)`
$DIR/integration-tests/smoke/vrfv2_test.go: `.Sub(subBalanceBeforeRequest, randomWordsFulfilledEvent.Payment)`
$DIR/integration-tests/smoke/vrfv2_test.go: `.CoordinatorV2.GetSubscription(testcontext.Get(t), *wrapperSubID)`
$DIR/integration-tests/smoke/vrfv2_test.go: `.Get(t)`
$DIR/integration-tests/smoke/vrfv2_test.go: `.GetRequestStatus(testcontext.Get(t), randomWordsFulfilledEvent.RequestId)`
$DIR/integration-tests/smoke/vrfv2_test.go: `.Get(t)`
$DIR/integration-tests/smoke/vrfv2_test.go: `.Sub(wrapperConsumerJuelsBalanceBeforeRequest, consumerStatus.Paid)`
$DIR/integration-tests/smoke/vrfv2_test.go: `.LinkToken.BalanceOf(testcontext.Get(t), wrapperConsumer.Address())`
$DIR/integration-tests/smoke/vrfv2_test.go: `.Get(t)`
$DIR/integration-tests/smoke/vrfv2_test.go: `.Address()`
$DIR/integration-tests/smoke/vrfv2_test.go: `.Info()`
$DIR/integration-tests/smoke/vrfv2_test.go: `.Str("Output", w.String())`
$DIR/integration-tests/smoke/vrfv2_test.go: `.String()`
$DIR/integration-tests/smoke/vrfv2_test.go: `.Msg("Randomness fulfilled")`
$DIR/integration-tests/smoke/vrfv2_test.go: `.Info()`
$DIR/integration-tests/smoke/vrfv2_test.go: `.
Str("Consumer Balance Before Request (Link)", (*commonassets.Link)(wrapperConsumerJuelsBalanceBeforeRequest).Link())`
$DIR/integration-tests/smoke/vrfv2_test.go: `.Link()`
$DIR/integration-tests/smoke/vrfv2_test.go: `.
Str("Consumer Balance After Request (Link)", (*commonassets.Link)(wrapperConsumerJuelsBalanceAfterRequest).Link())`
$DIR/integration-tests/smoke/vrfv2_test.go: `.Link()`
$DIR/integration-tests/smoke/vrfv2_test.go: `.
Bool("Fulfilment Status", consumerStatus.Fulfilled)`
$DIR/integration-tests/smoke/vrfv2_test.go: `.
Str("Paid by Consumer Contract (Link)", (*commonassets.Link)(consumerStatus.Paid).Link())`
$DIR/integration-tests/smoke/vrfv2_test.go: `.Link()`
$DIR/integration-tests/smoke/vrfv2_test.go: `.
Str("Paid by Coordinator Sub (Link)", (*commonassets.Link)(randomWordsFulfilledEvent.Payment).Link())`
$DIR/integration-tests/smoke/vrfv2_test.go: `.Link()`
$DIR/integration-tests/smoke/vrfv2_test.go: `.
Str("RequestTimestamp", consumerStatus.RequestTimestamp.String())`
$DIR/integration-tests/smoke/vrfv2_test.go: `.RequestTimestamp.String()`
$DIR/integration-tests/smoke/vrfv2_test.go: `.
Str("FulfilmentTimestamp", consumerStatus.FulfilmentTimestamp.String())`
$DIR/integration-tests/smoke/vrfv2_test.go: `.FulfilmentTimestamp.String()`
$DIR/integration-tests/smoke/vrfv2_test.go: `.
Str("RequestBlockNumber", consumerStatus.RequestBlockNumber.String())`
$DIR/integration-tests/smoke/vrfv2_test.go: `.RequestBlockNumber.String()`
$DIR/integration-tests/smoke/vrfv2_test.go: `.
Str("FulfilmentBlockNumber", consumerStatus.FulfilmentBlockNumber.String())`
$DIR/integration-tests/smoke/vrfv2_test.go: `.FulfilmentBlockNumber.String()`
$DIR/integration-tests/smoke/vrfv2_test.go: `.
Str("TX Hash", randomWordsFulfilledEvent.Raw.TxHash.String())`
$DIR/integration-tests/smoke/vrfv2_test.go: `.Raw.TxHash.String()`
$DIR/integration-tests/smoke/vrfv2_test.go: `.
Msg("Random Words Fulfilment Details For Link Billing")`
$DIR/integration-tests/smoke/vrfv2_test.go: `.Run("Oracle Withdraw", func(t *testing.T) {
configCopy := config.MustCopy().(tc.TestConfig)
consumers, subIDsForOracleWithDraw, err := vrfv2.SetupNewConsumersAndSubs(
testEnv,
chainID,
vrfContracts.CoordinatorV2,
configCopy,
vrfContracts.LinkToken,
1,
1,
l,
)
require.NoError(t, err, "error setting up new consumers and subs")
subIDForOracleWithdraw := subIDsForOracleWithDraw[0]
subscription, err := vrfContracts.CoordinatorV2.GetSubscription(testcontext.Get(t), subIDForOracleWithdraw)
require.NoError(t, err, "error getting subscription information")
vrfcommon.LogSubDetails(l, subscription, strconv.FormatUint(subIDForOracleWithdraw, 10), vrfContracts.CoordinatorV2)
subIDsForCancellingAfterTest = append(subIDsForCancellingAfterTest, subIDsForOracleWithDraw...)
_, fulfilledEventLink, err := vrfv2.RequestRandomnessAndWaitForFulfillment(
l,
consumers[0],
vrfContracts.CoordinatorV2,
subIDForOracleWithdraw,
vrfKey,
*configCopy.VRFv2.General.MinimumConfirmations,
*configCopy.VRFv2.General.CallbackGasLimit,
*configCopy.VRFv2.General.NumberOfWords,
*configCopy.VRFv2.General.RandomnessRequestCountPerRequest,
*configCopy.VRFv2.General.RandomnessRequestCountPerRequestDeviation,
configCopy.VRFv2.General.RandomWordsFulfilledEventTimeout.Duration,
0,
)
require.NoError(t, err)
amountToWithdrawLink := fulfilledEventLink.Payment
defaultWalletBalanceLinkBeforeOracleWithdraw, err := vrfContracts.LinkToken.BalanceOf(testcontext.Get(t), sethClient.MustGetRootKeyAddress().Hex())
require.NoError(t, err)
l.Info().
Str("Returning to", sethClient.MustGetRootKeyAddress().Hex()).
Str("Amount", amountToWithdrawLink.String()).
Msg("Invoking Oracle Withdraw for LINK")
err = vrfContracts.CoordinatorV2.OracleWithdraw(sethClient.MustGetRootKeyAddress(), amountToWithdrawLink)
require.NoError(t, err, "Error withdrawing LINK from coordinator to default wallet")
defaultWalletBalanceLinkAfterOracleWithdraw, err := vrfContracts.LinkToken.BalanceOf(testcontext.Get(t), sethClient.MustGetRootKeyAddress().Hex())
require.NoError(t, err)
require.Equal(
t,
1,
defaultWalletBalanceLinkAfterOracleWithdraw.Cmp(defaultWalletBalanceLinkBeforeOracleWithdraw),
"LINK funds were not returned after oracle withdraw",
)
})`
$DIR/integration-tests/smoke/vrfv2_test.go: `.MustCopy()`
$DIR/integration-tests/smoke/vrfv2_test.go: `.SetupNewConsumersAndSubs(
testEnv,
chainID,
vrfContracts.CoordinatorV2,
configCopy,
vrfContracts.LinkToken,
1,
1,
l,
)`
$DIR/integration-tests/smoke/vrfv2_test.go: `.CoordinatorV2.GetSubscription(testcontext.Get(t), subIDForOracleWithdraw)`
$DIR/integration-tests/smoke/vrfv2_test.go: `.Get(t)`
$DIR/integration-tests/smoke/vrfv2_test.go: `.LogSubDetails(l, subscription, strconv.FormatUint(subIDForOracleWithdraw, 10), vrfContracts.CoordinatorV2)`
$DIR/integration-tests/smoke/vrfv2_test.go: `.FormatUint(subIDForOracleWithdraw, 10)`
$DIR/integration-tests/smoke/vrfv2_test.go: `.RequestRandomnessAndWaitForFulfillment(
l,
consumers[0],
vrfContracts.CoordinatorV2,
subIDForOracleWithdraw,
vrfKey,
*configCopy.VRFv2.General.MinimumConfirmations,
*configCopy.VRFv2.General.CallbackGasLimit,
*configCopy.VRFv2.General.NumberOfWords,
*configCopy.VRFv2.General.RandomnessRequestCountPerRequest,
*configCopy.VRFv2.General.RandomnessRequestCountPerRequestDeviation,
configCopy.VRFv2.General.RandomWordsFulfilledEventTimeout.Duration,
0,
)`
$DIR/integration-tests/smoke/vrfv2_test.go: `.LinkToken.BalanceOf(testcontext.Get(t), sethClient.MustGetRootKeyAddress().Hex())`
$DIR/integration-tests/smoke/vrfv2_test.go: `.Get(t)`
$DIR/integration-tests/smoke/vrfv2_test.go: `.MustGetRootKeyAddress()`
$DIR/integration-tests/smoke/vrfv2_test.go: `.Hex()`
$DIR/integration-tests/smoke/vrfv2_test.go: `.Info()`
$DIR/integration-tests/smoke/vrfv2_test.go: `.
Str("Returning to", sethClient.MustGetRootKeyAddress().Hex())`
$DIR/integration-tests/smoke/vrfv2_test.go: `.MustGetRootKeyAddress()`
$DIR/integration-tests/smoke/vrfv2_test.go: `.Hex()`
$DIR/integration-tests/smoke/vrfv2_test.go: `.
Str("Amount", amountToWithdrawLink.String())`
$DIR/integration-tests/smoke/vrfv2_test.go: `.String()`
$DIR/integration-tests/smoke/vrfv2_test.go: `.
Msg("Invoking Oracle Withdraw for LINK")`
$DIR/integration-tests/smoke/vrfv2_test.go: `.CoordinatorV2.OracleWithdraw(sethClient.MustGetRootKeyAddress(), amountToWithdrawLink)`
$DIR/integration-tests/smoke/vrfv2_test.go: `.MustGetRootKeyAddress()`
$DIR/integration-tests/smoke/vrfv2_test.go: `.LinkToken.BalanceOf(testcontext.Get(t), sethClient.MustGetRootKeyAddress().Hex())`
$DIR/integration-tests/smoke/vrfv2_test.go: `.Get(t)`
$DIR/integration-tests/smoke/vrfv2_test.go: `.MustGetRootKeyAddress()`
$DIR/integration-tests/smoke/vrfv2_test.go: `.Hex()`
$DIR/integration-tests/smoke/vrfv2_test.go: `.Run("Canceling Sub And Returning Funds", func(t *testing.T) {
configCopy := config.MustCopy().(tc.TestConfig)
_, subIDsForCancelling, err := vrfv2.SetupNewConsumersAndSubs(
testEnv,
chainID,
vrfContracts.CoordinatorV2,
configCopy,
vrfContracts.LinkToken,
1,
1,
l,
)
require.NoError(t, err, "error setting up new consumers and subs")
subIDForCancelling := subIDsForCancelling[0]
subscription, err := vrfContracts.CoordinatorV2.GetSubscription(testcontext.Get(t), subIDForCancelling)
require.NoError(t, err, "error getting subscription information")
vrfcommon.LogSubDetails(l, subscription, strconv.FormatUint(subIDForCancelling, 10), vrfContracts.CoordinatorV2)
subIDsForCancellingAfterTest = append(subIDsForCancellingAfterTest, subIDsForCancelling...)
testWalletAddress, err := actions.GenerateWallet()
require.NoError(t, err)
testWalletBalanceLinkBeforeSubCancelling, err := vrfContracts.LinkToken.BalanceOf(testcontext.Get(t), testWalletAddress.String())
require.NoError(t, err)
subscriptionForCancelling, err := vrfContracts.CoordinatorV2.GetSubscription(testcontext.Get(t), subIDForCancelling)
require.NoError(t, err, "error getting subscription information")
subBalanceLink := subscriptionForCancelling.Balance
l.Info().
Str("Subscription Amount Link", subBalanceLink.String()).
Uint64("Returning funds from SubID", subIDForCancelling).
Str("Returning funds to", testWalletAddress.String()).
Msg("Canceling subscription and returning funds to subscription owner")
cancellationTx, cancellationEvent, err := vrfContracts.CoordinatorV2.CancelSubscription(subIDForCancelling, testWalletAddress)
require.NoError(t, err, "Error canceling subscription")
txGasUsed := new(big.Int).SetUint64(cancellationTx.Receipt.GasUsed)
// we don't have that information for older Geth versions
if cancellationTx.Receipt.EffectiveGasPrice == nil {
cancellationTx.Receipt.EffectiveGasPrice = new(big.Int).SetUint64(0)
}
cancellationTxFeeWei := new(big.Int).Mul(txGasUsed, cancellationTx.Receipt.EffectiveGasPrice)
l.Info().
Str("Cancellation Tx Fee Wei", cancellationTxFeeWei.String()).
Str("Effective Gas Price", cancellationTx.Receipt.EffectiveGasPrice.String()).
Uint64("Gas Used", cancellationTx.Receipt.GasUsed).
Msg("Cancellation TX Receipt")
l.Info().
Str("Returned Subscription Amount Link", cancellationEvent.Amount.String()).
Uint64("SubID", cancellationEvent.SubId).
Str("Returned to", cancellationEvent.To.String()).
Msg("Subscription Canceled Event")
require.Equal(t, subBalanceLink, cancellationEvent.Amount, "SubscriptionCanceled event LINK amount is not equal to sub amount while canceling subscription")
testWalletBalanceLinkAfterSubCancelling, err := vrfContracts.LinkToken.BalanceOf(testcontext.Get(t), testWalletAddress.String())
require.NoError(t, err)
//Verify that sub was deleted from Coordinator
_, err = vrfContracts.CoordinatorV2.GetSubscription(testcontext.Get(t), subIDForCancelling)
require.Error(t, err, "error not occurred when trying to get deleted subscription from old Coordinator after sub migration")
subFundsReturnedLinkActual := new(big.Int).Sub(testWalletBalanceLinkAfterSubCancelling, testWalletBalanceLinkBeforeSubCancelling)
l.Info().
Str("Cancellation Tx Fee Wei", cancellationTxFeeWei.String()).
Str("Sub Funds Returned Actual - Link", subFundsReturnedLinkActual.String()).
Str("Sub Balance - Link", subBalanceLink.String()).
Msg("Sub funds returned")
require.Equal(t, 0, subBalanceLink.Cmp(subFundsReturnedLinkActual), "Returned LINK funds are not equal to sub balance that was cancelled")
})`
$DIR/integration-tests/smoke/vrfv2_test.go: `.MustCopy()`
$DIR/integration-tests/smoke/vrfv2_test.go: `.SetupNewConsumersAndSubs(
testEnv,
chainID,
vrfContracts.CoordinatorV2,
configCopy,
vrfContracts.LinkToken,
1,
1,
l,
)`
$DIR/integration-tests/smoke/vrfv2_test.go: `.CoordinatorV2.GetSubscription(testcontext.Get(t), subIDForCancelling)`
$DIR/integration-tests/smoke/vrfv2_test.go: `.Get(t)`
$DIR/integration-tests/smoke/vrfv2_test.go: `.LogSubDetails(l, subscription, strconv.FormatUint(subIDForCancelling, 10), vrfContracts.CoordinatorV2)`
$DIR/integration-tests/smoke/vrfv2_test.go: `.FormatUint(subIDForCancelling, 10)`
$DIR/integration-tests/smoke/vrfv2_test.go: `.GenerateWallet()`
$DIR/integration-tests/smoke/vrfv2_test.go: `.LinkToken.BalanceOf(testcontext.Get(t), testWalletAddress.String())`
$DIR/integration-tests/smoke/vrfv2_test.go: `.Get(t)`
$DIR/integration-tests/smoke/vrfv2_test.go: `.String()`
$DIR/integration-tests/smoke/vrfv2_test.go: `.CoordinatorV2.GetSubscription(testcontext.Get(t), subIDForCancelling)`
$DIR/integration-tests/smoke/vrfv2_test.go: `.Get(t)`
$DIR/integration-tests/smoke/vrfv2_test.go: `.Info()`
$DIR/integration-tests/smoke/vrfv2_test.go: `.
Str("Subscription Amount Link", subBalanceLink.String())`
$DIR/integration-tests/smoke/vrfv2_test.go: `.String()`
$DIR/integration-tests/smoke/vrfv2_test.go: `.
Uint64("Returning funds from SubID", subIDForCancelling)`
$DIR/integration-tests/smoke/vrfv2_test.go: `.
Str("Returning funds to", testWalletAddress.String())`
$DIR/integration-tests/smoke/vrfv2_test.go: `.String()`
$DIR/integration-tests/smoke/vrfv2_test.go: `.
Msg("Canceling subscription and returning funds to subscription owner")`
$DIR/integration-tests/smoke/vrfv2_test.go: `.CoordinatorV2.CancelSubscription(subIDForCancelling, testWalletAddress)`
$DIR/integration-tests/smoke/vrfv2_test.go: `.SetUint64(cancellationTx.Receipt.GasUsed)`
$DIR/integration-tests/smoke/vrfv2_test.go: `.SetUint64(0)`
$DIR/integration-tests/smoke/vrfv2_test.go: `.Mul(txGasUsed, cancellationTx.Receipt.EffectiveGasPrice)`
$DIR/integration-tests/smoke/vrfv2_test.go: `.Info()`
$DIR/integration-tests/smoke/vrfv2_test.go: `.
Str("Cancellation Tx Fee Wei", cancellationTxFeeWei.String())`
$DIR/integration-tests/smoke/vrfv2_test.go: `.String()`
$DIR/integration-tests/smoke/vrfv2_test.go: `.
Str("Effective Gas Price", cancellationTx.Receipt.EffectiveGasPrice.String())`
$DIR/integration-tests/smoke/vrfv2_test.go: `.Receipt.EffectiveGasPrice.String()`
$DIR/integration-tests/smoke/vrfv2_test.go: `.
Uint64("Gas Used", cancellationTx.Receipt.GasUsed)`
$DIR/integration-tests/smoke/vrfv2_test.go: `.
Msg("Cancellation TX Receipt")`
$DIR/integration-tests/smoke/vrfv2_test.go: `.Info()`
$DIR/integration-tests/smoke/vrfv2_test.go: `.
Str("Returned Subscription Amount Link", cancellationEvent.Amount.String())`
$DIR/integration-tests/smoke/vrfv2_test.go: `.Amount.String()`
$DIR/integration-tests/smoke/vrfv2_test.go: `.
Uint64("SubID", cancellationEvent.SubId)`
$DIR/integration-tests/smoke/vrfv2_test.go: `.
Str("Returned to", cancellationEvent.To.String())`
$DIR/integration-tests/smoke/vrfv2_test.go: `.To.String()`
$DIR/integration-tests/smoke/vrfv2_test.go: `.
Msg("Subscription Canceled Event")`
$DIR/integration-tests/smoke/vrfv2_test.go: `.LinkToken.BalanceOf(testcontext.Get(t), testWalletAddress.String())`
$DIR/integration-tests/smoke/vrfv2_test.go: `.Get(t)`
$DIR/integration-tests/smoke/vrfv2_test.go: `.String()`
$DIR/integration-tests/smoke/vrfv2_test.go: `.CoordinatorV2.GetSubscription(testcontext.Get(t), subIDForCancelling)`
$DIR/integration-tests/smoke/vrfv2_test.go: `.Get(t)`
$DIR/integration-tests/smoke/vrfv2_test.go: `.Sub(testWalletBalanceLinkAfterSubCancelling, testWalletBalanceLinkBeforeSubCancelling)`
$DIR/integration-tests/smoke/vrfv2_test.go: `.Info()`
$DIR/integration-tests/smoke/vrfv2_test.go: `.
Str("Cancellation Tx Fee Wei", cancellationTxFeeWei.String())`
$DIR/integration-tests/smoke/vrfv2_test.go: `.String()`
$DIR/integration-tests/smoke/vrfv2_test.go: `.
Str("Sub Funds Returned Actual - Link", subFundsReturnedLinkActual.String())`
$DIR/integration-tests/smoke/vrfv2_test.go: `.String()`
$DIR/integration-tests/smoke/vrfv2_test.go: `.
Str("Sub Balance - Link", subBalanceLink.String())`
$DIR/integration-tests/smoke/vrfv2_test.go: `.String()`
$DIR/integration-tests/smoke/vrfv2_test.go: `.
Msg("Sub funds returned")`
$DIR/integration-tests/smoke/vrfv2_test.go: `.MustCopy()`
$DIR/integration-tests/smoke/vrfv2_test.go: `.Ptr(float64(0))`
$DIR/integration-tests/smoke/vrfv2_test.go: `.SetupNewConsumersAndSubs(
testEnv,
chainID,
vrfContracts.CoordinatorV2,
configCopy,
vrfContracts.LinkToken,
1,
1,
l,
)`
$DIR/integration-tests/smoke/vrfv2_test.go: `.CoordinatorV2.GetSubscription(testcontext.Get(t), subIDForOwnerCancelling)`
$DIR/integration-tests/smoke/vrfv2_test.go: `.Get(t)`
$DIR/integration-tests/smoke/vrfv2_test.go: `.LogSubDetails(l, subscriptionForCancelling, strconv.FormatUint(subIDForOwnerCancelling, 10), vrfContracts.CoordinatorV2)`
$DIR/integration-tests/smoke/vrfv2_test.go: `.FormatUint(subIDForOwnerCancelling, 10)`
$DIR/integration-tests/smoke/vrfv2_test.go: `.CoordinatorV2.PendingRequestsExist(testcontext.Get(t), subIDForOwnerCancelling)`
$DIR/integration-tests/smoke/vrfv2_test.go: `.Get(t)`
$DIR/integration-tests/smoke/vrfv2_test.go: `.RequestRandomnessAndWaitForFulfillment(
l,
consumers[0],
vrfContracts.CoordinatorV2,
subIDForOwnerCancelling,
vrfKey,
*configCopy.VRFv2.General.MinimumConfirmations,
*configCopy.VRFv2.General.CallbackGasLimit,
*configCopy.VRFv2.General.NumberOfWords,
*configCopy.VRFv2.General.RandomnessRequestCountPerRequest,
*configCopy.VRFv2.General.RandomnessRequestCountPerRequestDeviation,
randomWordsFulfilledEventTimeout,
0,
)`
$DIR/integration-tests/smoke/vrfv2_test.go: `.CoordinatorV2.PendingRequestsExist(testcontext.Get(t), subIDForOwnerCancelling)`
$DIR/integration-tests/smoke/vrfv2_test.go: `.Get(t)`
$DIR/integration-tests/smoke/vrfv2_test.go: `.LinkToken.BalanceOf(testcontext.Get(t), sethClient.MustGetRootKeyAddress().Hex())`
$DIR/integration-tests/smoke/vrfv2_test.go: `.Get(t)`
$DIR/integration-tests/smoke/vrfv2_test.go: `.MustGetRootKeyAddress()`
$DIR/integration-tests/smoke/vrfv2_test.go: `.Hex()`
$DIR/integration-tests/smoke/vrfv2_test.go: `.CoordinatorV2.GetSubscription(testcontext.Get(t), subIDForOwnerCancelling)`
$DIR/integration-tests/smoke/vrfv2_test.go: `.Get(t)`
$DIR/integration-tests/smoke/vrfv2_test.go: `.Info()`
$DIR/integration-tests/smoke/vrfv2_test.go: `.
Str("Subscription Amount Link", subBalanceLink.String())`
$DIR/integration-tests/smoke/vrfv2_test.go: `.String()`
$DIR/integration-tests/smoke/vrfv2_test.go: `.
Uint64("Returning funds from SubID", subIDForOwnerCancelling)`
$DIR/integration-tests/smoke/vrfv2_test.go: `.
Str("Returning funds to", sethClient.MustGetRootKeyAddress().Hex())`
$DIR/integration-tests/smoke/vrfv2_test.go: `.MustGetRootKeyAddress()`
$DIR/integration-tests/smoke/vrfv2_test.go: `.Hex()`
$DIR/integration-tests/smoke/vrfv2_test.go: `.
Msg("Canceling subscription and returning funds to subscription owner")`
$DIR/integration-tests/smoke/vrfv2_test.go: `.CoordinatorV2.OwnerCancelSubscription(subIDForOwnerCancelling)`
$DIR/integration-tests/smoke/vrfv2_test.go: `.SetUint64(cancellationTx.Receipt.GasUsed)`
$DIR/integration-tests/smoke/vrfv2_test.go: `.SetUint64(0)`
$DIR/integration-tests/smoke/vrfv2_test.go: `.Mul(txGasUsed, cancellationTx.Receipt.EffectiveGasPrice)`
$DIR/integration-tests/smoke/vrfv2_test.go: `.Info()`
$DIR/integration-tests/smoke/vrfv2_test.go: `.
Str("Cancellation Tx Fee Wei", cancellationTxFeeWei.String())`
$DIR/integration-tests/smoke/vrfv2_test.go: `.String()`
$DIR/integration-tests/smoke/vrfv2_test.go: `.
Str("Effective Gas Price", cancellationTx.Receipt.EffectiveGasPrice.String())`
$DIR/integration-tests/smoke/vrfv2_test.go: `.Receipt.EffectiveGasPrice.String()`
$DIR/integration-tests/smoke/vrfv2_test.go: `.
Uint64("Gas Used", cancellationTx.Receipt.GasUsed)`
$DIR/integration-tests/smoke/vrfv2_test.go: `.
Msg("Cancellation TX Receipt")`
$DIR/integration-tests/smoke/vrfv2_test.go: `.Info()`
$DIR/integration-tests/smoke/vrfv2_test.go: `.
Str("Returned Subscription Amount Link", cancellationEvent.Amount.String())`
$DIR/integration-tests/smoke/vrfv2_test.go: `.Amount.String()`
$DIR/integration-tests/smoke/vrfv2_test.go: `.
Uint64("SubID", cancellationEvent.SubId)`
$DIR/integration-tests/smoke/vrfv2_test.go: `.
Str("Returned to", cancellationEvent.To.String())`
$DIR/integration-tests/smoke/vrfv2_test.go: `.To.String()`
$DIR/integration-tests/smoke/vrfv2_test.go: `.
Msg("Subscription Canceled Event")`
$DIR/integration-tests/smoke/vrfv2_test.go: `.LinkToken.BalanceOf(testcontext.Get(t), sethClient.MustGetRootKeyAddress().Hex())`
$DIR/integration-tests/smoke/vrfv2_test.go: `.Get(t)`
$DIR/integration-tests/smoke/vrfv2_test.go: `.MustGetRootKeyAddress()`
$DIR/integration-tests/smoke/vrfv2_test.go: `.Hex()`
$DIR/integration-tests/smoke/vrfv2_test.go: `.CoordinatorV2.GetSubscription(testcontext.Get(t), subIDForOwnerCancelling)`
$DIR/integration-tests/smoke/vrfv2_test.go: `.Get(t)`
$DIR/integration-tests/smoke/vrfv2_test.go: `.Info()`
$DIR/integration-tests/smoke/vrfv2_test.go: `.
Str("Expected error message", err.Error())`
$DIR/integration-tests/smoke/vrfv2_test.go: `.Sub(walletBalanceLinkAfterSubCancelling, walletBalanceLinkBeforeSubCancelling)`
$DIR/integration-tests/smoke/vrfv2_test.go: `.Info()`
$DIR/integration-tests/smoke/vrfv2_test.go: `.
Str("Wallet Balance Before Owner Cancelation", walletBalanceLinkBeforeSubCancelling.String())`
$DIR/integration-tests/smoke/vrfv2_test.go: `.String()`
$DIR/integration-tests/smoke/vrfv2_test.go: `.
Str("Cancellation Tx Fee Wei", cancellationTxFeeWei.String())`
$DIR/integration-tests/smoke/vrfv2_test.go: `.String()`
$DIR/integration-tests/smoke/vrfv2_test.go: `.
Str("Sub Funds Returned Actual - Link", subFundsReturnedLinkActual.String())`
$DIR/integration-tests/smoke/vrfv2_test.go: `.String()`
$DIR/integration-tests/smoke/vrfv2_test.go: `.
Str("Sub Balance - Link", subBalanceLink.String())`
$DIR/integration-tests/smoke/vrfv2_test.go: `.String()`
$DIR/integration-tests/smoke/vrfv2_test.go: `.
Str("Wallet Balance After Owner Cancelation", walletBalanceLinkAfterSubCancelling.String())`
$DIR/integration-tests/smoke/vrfv2_test.go: `.String()`
$DIR/integration-tests/smoke/vrfv2_test.go: `.
Msg("Sub funds returned")`
$DIR/integration-tests/smoke/vrfv2_test.go: `.GetTestLogger(t)`
$DIR/integration-tests/smoke/vrfv2_test.go: `.GetConfig("Smoke", tc.VRFv2)`
$DIR/integration-tests/smoke/vrfv2_test.go: `.MustGetSelectedNetworkConfig(config.GetNetworkConfig())`
$DIR/integration-tests/smoke/vrfv2_test.go: `.GetNetworkConfig()`
$DIR/integration-tests/smoke/vrfv2_test.go: `.GetSethClient(chainID)`
$DIR/integration-tests/smoke/vrfv2_test.go: `.Cfg.IsSimulatedNetwork()`
$DIR/integration-tests/smoke/vrfv2_test.go: `.Info()`
$DIR/integration-tests/smoke/vrfv2_test.go: `.
Str("Network Name", sethClient.Cfg.Network.Name)`
$DIR/integration-tests/smoke/vrfv2_test.go: `.
Msg("Network is a simulated network. Skipping fund return for Coordinator Subscriptions.")`
$DIR/integration-tests/smoke/vrfv2_test.go: `.CancelSubsAndReturnFunds(testcontext.Get(t), vrfContracts, sethClient.MustGetRootKeyAddress().Hex(), subIDsForCancellingAfterTest, l)`
$DIR/integration-tests/smoke/vrfv2_test.go: `.Get(t)`
$DIR/integration-tests/smoke/vrfv2_test.go: `.MustGetRootKeyAddress()`
$DIR/integration-tests/smoke/vrfv2_test.go: `.Hex()`
$DIR/integration-tests/smoke/vrfv2_test.go: `.Cleanup(test_env.CleanupOpts{TestName: t.Name()})`
$DIR/integration-tests/smoke/vrfv2_test.go: `.Name()`
$DIR/integration-tests/smoke/vrfv2_test.go: `.SetupVRFV2Universe(testcontext.Get(t), t, vrfEnvConfig, newEnvConfig, l)`
$DIR/integration-tests/smoke/vrfv2_test.go: `.Get(t)`
$DIR/integration-tests/smoke/vrfv2_test.go: `.MustCopy()`
$DIR/integration-tests/smoke/vrfv2_test.go: `.SetupNewConsumersAndSubs(
testEnv,
chainID,
vrfContracts.CoordinatorV2,
configCopy,
vrfContracts.LinkToken,
1,
1,
l,
)`
$DIR/integration-tests/smoke/vrfv2_test.go: `.CoordinatorV2.GetSubscription(testcontext.Get(t), subIDForMultipleSendingKeys)`
$DIR/integration-tests/smoke/vrfv2_test.go: `.Get(t)`
$DIR/integration-tests/smoke/vrfv2_test.go: `.LogSubDetails(l, subscriptionForMultipleSendingKeys, strconv.FormatUint(subIDForMultipleSendingKeys, 10), vrfContracts.CoordinatorV2)`
$DIR/integration-tests/smoke/vrfv2_test.go: `.FormatUint(subIDForMultipleSendingKeys, 10)`
$DIR/integration-tests/smoke/vrfv2_test.go: `.CLNode.API.ReadTxKeys("evm")`
$DIR/integration-tests/smoke/vrfv2_test.go: `.RequestRandomnessAndWaitForFulfillment(
l,
consumers[0],
vrfContracts.CoordinatorV2,
subIDForMultipleSendingKeys,
vrfKey,
*configCopy.VRFv2.General.MinimumConfirmations,
*configCopy.VRFv2.General.CallbackGasLimit,
*configCopy.VRFv2.General.NumberOfWords,
*configCopy.VRFv2.General.RandomnessRequestCountPerRequest,
*configCopy.VRFv2.General.RandomnessRequestCountPerRequestDeviation,
configCopy.VRFv2.General.RandomWordsFulfilledEventTimeout.Duration,
0,
)`
$DIR/integration-tests/smoke/vrfv2_test.go: `.GetSethClient(chainID)`
$DIR/integration-tests/smoke/vrfv2_test.go: `.Client.TransactionByHash(testcontext.Get(t), randomWordsFulfilledEvent.Raw.TxHash)`
$DIR/integration-tests/smoke/vrfv2_test.go: `.Get(t)`
$DIR/integration-tests/smoke/vrfv2_test.go: `.GetTxFromAddress(fulfillmentTx)`
$DIR/integration-tests/smoke/vrfv2_test.go: `.Diff(txKeyAddresses, fulfillmentTxFromAddresses, cmpopts.SortSlices(less))`
$DIR/integration-tests/smoke/vrfv2_test.go: `.SortSlices(less)`
$DIR/integration-tests/smoke/vrfv2_test.go: `.GetTestLogger(t)`
$DIR/integration-tests/smoke/vrfv2_test.go: `.GetConfig("Smoke", tc.VRFv2)`
$DIR/integration-tests/smoke/vrfv2_test.go: `.MustGetSelectedNetworkConfig(config.GetNetworkConfig())`
$DIR/integration-tests/smoke/vrfv2_test.go: `.GetNetworkConfig()`
$DIR/integration-tests/smoke/vrfv2_test.go: `.GetSethClient(chainID)`
$DIR/integration-tests/smoke/vrfv2_test.go: `.Cfg.IsSimulatedNetwork()`
$DIR/integration-tests/smoke/vrfv2_test.go: `.Info()`
$DIR/integration-tests/smoke/vrfv2_test.go: `.
Str("Network Name", sethClient.Cfg.Network.Name)`
$DIR/integration-tests/smoke/vrfv2_test.go: `.
Msg("Network is a simulated network. Skipping fund return for Coordinator Subscriptions.")`
$DIR/integration-tests/smoke/vrfv2_test.go: `.CancelSubsAndReturnFunds(testcontext.Get(t), vrfContracts, sethClient.MustGetRootKeyAddress().Hex(), subIDsForCancellingAfterTest, l)`
$DIR/integration-tests/smoke/vrfv2_test.go: `.Get(t)`
$DIR/integration-tests/smoke/vrfv2_test.go: `.MustGetRootKeyAddress()`
$DIR/integration-tests/smoke/vrfv2_test.go: `.Hex()`
$DIR/integration-tests/smoke/vrfv2_test.go: `.Cleanup(test_env.CleanupOpts{TestName: t.Name()})`
$DIR/integration-tests/smoke/vrfv2_test.go: `.Name()`
$DIR/integration-tests/smoke/vrfv2_test.go: `.SetupVRFV2Universe(testcontext.Get(t), t, vrfEnvConfig, newEnvConfig, l)`
$DIR/integration-tests/smoke/vrfv2_test.go: `.Get(t)`
$DIR/integration-tests/smoke/vrfv2_test.go: `.MustCopy()`
$DIR/integration-tests/smoke/vrfv2_test.go: `.SetupNewConsumersAndSubs(
testEnv,
chainID,
vrfContracts.CoordinatorV2,
configCopy,
vrfContracts.LinkToken,
1,
1,
l,
)`
$DIR/integration-tests/smoke/vrfv2_test.go: `.CoordinatorV2.GetSubscription(testcontext.Get(t), subIDForForceFulfill)`
$DIR/integration-tests/smoke/vrfv2_test.go: `.Get(t)`
$DIR/integration-tests/smoke/vrfv2_test.go: `.LogSubDetails(l, subscriptionForMultipleSendingKeys, strconv.FormatUint(subIDForForceFulfill, 10), vrfContracts.CoordinatorV2)`
$DIR/integration-tests/smoke/vrfv2_test.go: `.FormatUint(subIDForForceFulfill, 10)`
$DIR/integration-tests/smoke/vrfv2_test.go: `.CoordinatorV2.GetOwner(testcontext.Get(t))`
$DIR/integration-tests/smoke/vrfv2_test.go: `.Get(t)`
$DIR/integration-tests/smoke/vrfv2_test.go: `.LinkToken.Transfer(
consumers[0].Address(),
conversions.EtherToWei(big.NewFloat(*configCopy.VRFv2.General.SubscriptionFundingAmountLink)),
)`
$DIR/integration-tests/smoke/vrfv2_test.go: `.Address()`
$DIR/integration-tests/smoke/vrfv2_test.go: `.EtherToWei(big.NewFloat(*configCopy.VRFv2.General.SubscriptionFundingAmountLink))`
$DIR/integration-tests/smoke/vrfv2_test.go: `.NewFloat(*configCopy.VRFv2.General.SubscriptionFundingAmountLink)`
$DIR/integration-tests/smoke/vrfv2_test.go: `.LinkToken.BalanceOf(testcontext.Get(t), consumers[0].Address())`
$DIR/integration-tests/smoke/vrfv2_test.go: `.Get(t)`
$DIR/integration-tests/smoke/vrfv2_test.go: `.Address()`
$DIR/integration-tests/smoke/vrfv2_test.go: `.Info()`
$DIR/integration-tests/smoke/vrfv2_test.go: `.
Str("Balance", conversions.WeiToEther(consumerLinkBalance).String())`
$DIR/integration-tests/smoke/vrfv2_test.go: `.WeiToEther(consumerLinkBalance)`
$DIR/integration-tests/smoke/vrfv2_test.go: `.String()`
$DIR/integration-tests/smoke/vrfv2_test.go: `.
Str("Consumer", consumers[0].Address())`
$DIR/integration-tests/smoke/vrfv2_test.go: `.Address()`
$DIR/integration-tests/smoke/vrfv2_test.go: `.
Msg("Consumer Link Balance")`
$DIR/integration-tests/smoke/vrfv2_test.go: `.MockETHLINKFeed.SetBlockTimestampDeduction(big.NewInt(3))`
$DIR/integration-tests/smoke/vrfv2_test.go: `.NewInt(3)`
$DIR/integration-tests/smoke/vrfv2_test.go: `.RequestRandomnessWithForceFulfillAndWaitForFulfillment(
l,
consumers[0],
vrfContracts.CoordinatorV2,
vrfContracts.VRFOwner,
vrfKey,
*configCopy.VRFv2.General.MinimumConfirmations,
*configCopy.VRFv2.General.CallbackGasLimit,
*configCopy.VRFv2.General.NumberOfWords,
*configCopy.VRFv2.General.RandomnessRequestCountPerRequest,
*configCopy.VRFv2.General.RandomnessRequestCountPerRequestDeviation,
conversions.EtherToWei(big.NewFloat(5)),
common.HexToAddress(vrfContracts.LinkToken.Address()),
time.Minute*2,
)`
$DIR/integration-tests/smoke/vrfv2_test.go: `.EtherToWei(big.NewFloat(5))`
$DIR/integration-tests/smoke/vrfv2_test.go: `.NewFloat(5)`
$DIR/integration-tests/smoke/vrfv2_test.go: `.HexToAddress(vrfContracts.LinkToken.Address())`
$DIR/integration-tests/smoke/vrfv2_test.go: `.LinkToken.Address()`
$DIR/integration-tests/smoke/vrfv2_test.go: `.GetRequestStatus(testcontext.Get(t), randFulfilledEvent.RequestId)`
$DIR/integration-tests/smoke/vrfv2_test.go: `.Get(t)`
$DIR/integration-tests/smoke/vrfv2_test.go: `.Info()`
$DIR/integration-tests/smoke/vrfv2_test.go: `.Bool("Fulfilment Status", status.Fulfilled)`
$DIR/integration-tests/smoke/vrfv2_test.go: `.Msg("Random Words Request Fulfilment Status")`
$DIR/integration-tests/smoke/vrfv2_test.go: `.Info()`
$DIR/integration-tests/smoke/vrfv2_test.go: `.Str("Output", w.String())`
$DIR/integration-tests/smoke/vrfv2_test.go: `.String()`
$DIR/integration-tests/smoke/vrfv2_test.go: `.Msg("Randomness fulfilled")`
$DIR/integration-tests/smoke/vrfv2_test.go: `.CoordinatorV2.GetConfig(testcontext.Get(t))`
$DIR/integration-tests/smoke/vrfv2_test.go: `.Get(t)`
$DIR/integration-tests/smoke/vrfv2_test.go: `.CoordinatorV2.GetFeeConfig(testcontext.Get(t))`
$DIR/integration-tests/smoke/vrfv2_test.go: `.Get(t)`
$DIR/integration-tests/smoke/vrfv2_test.go: `.CoordinatorV2.GetFallbackWeiPerUnitLink(testcontext.Get(t))`
$DIR/integration-tests/smoke/vrfv2_test.go: `.Get(t)`
$DIR/integration-tests/smoke/vrfv2_test.go: `.GetTestLogger(t)`
$DIR/integration-tests/smoke/vrfv2_test.go: `.GetConfig("Smoke", tc.VRFv2)`
$DIR/integration-tests/smoke/vrfv2_test.go: `.MustGetSelectedNetworkConfig(config.GetNetworkConfig())`
$DIR/integration-tests/smoke/vrfv2_test.go: `.GetNetworkConfig()`
$DIR/integration-tests/smoke/vrfv2_test.go: `.GetSethClient(chainID)`
$DIR/integration-tests/smoke/vrfv2_test.go: `.Cfg.IsSimulatedNetwork()`
$DIR/integration-tests/smoke/vrfv2_test.go: `.Info()`
$DIR/integration-tests/smoke/vrfv2_test.go: `.
Str("Network Name", sethClient.Cfg.Network.Name)`
$DIR/integration-tests/smoke/vrfv2_test.go: `.
Msg("Network is a simulated network. Skipping fund return for Coordinator Subscriptions.")`
$DIR/integration-tests/smoke/vrfv2_test.go: `.CancelSubsAndReturnFunds(testcontext.Get(t), vrfContracts, sethClient.MustGetRootKeyAddress().Hex(), subIDsForCancellingAfterTest, l)`
$DIR/integration-tests/smoke/vrfv2_test.go: `.Get(t)`
$DIR/integration-tests/smoke/vrfv2_test.go: `.MustGetRootKeyAddress()`
$DIR/integration-tests/smoke/vrfv2_test.go: `.Hex()`
$DIR/integration-tests/smoke/vrfv2_test.go: `.Cleanup(test_env.CleanupOpts{TestName: t.Name()})`
$DIR/integration-tests/smoke/vrfv2_test.go: `.Name()`
$DIR/integration-tests/smoke/vrfv2_test.go: `.Ptr(2)`
$DIR/integration-tests/smoke/vrfv2_test.go: `.Ptr(20)`
$DIR/integration-tests/smoke/vrfv2_test.go: `.SetupVRFV2Universe(testcontext.Get(t), t, vrfEnvConfig, newEnvConfig, l)`
$DIR/integration-tests/smoke/vrfv2_test.go: `.Get(t)`
$DIR/integration-tests/smoke/vrfv2_test.go: `.Run("BHS Job with complete E2E - wait 256 blocks to see if Rand Request is fulfilled", func(t *testing.T) {
if os.Getenv("TEST_UNSKIP") != "true" {
t.Skip("Skipped due to long execution time. Should be run on-demand on live testnet with TEST_UNSKIP=\"true\".")
}
//BHS node should fill in blockhashes into BHS contract depending on the waitBlocks and lookBackBlocks settings
configCopy := config.MustCopy().(tc.TestConfig)
//Underfund Subscription
configCopy.VRFv2.General.SubscriptionFundingAmountLink = ptr.Ptr(float64(0))
consumers, subIDsForBHS, err := vrfv2.SetupNewConsumersAndSubs(
testEnv,
chainID,
vrfContracts.CoordinatorV2,
configCopy,
vrfContracts.LinkToken,
1,
1,
l,
)
require.NoError(t, err, "error setting up new consumers and subs")
subIDForBHS := subIDsForBHS[0]
subscriptionForBHS, err := vrfContracts.CoordinatorV2.GetSubscription(testcontext.Get(t), subIDForBHS)
require.NoError(t, err, "error getting subscription information")
vrfcommon.LogSubDetails(l, subscriptionForBHS, strconv.FormatUint(subIDForBHS, 10), vrfContracts.CoordinatorV2)
subIDsForCancellingAfterTest = append(subIDsForCancellingAfterTest, subIDsForBHS...)
randomWordsRequestedEvent, err := vrfv2.RequestRandomness(
l,
consumers[0],
vrfContracts.CoordinatorV2,
subIDForBHS,
vrfKey,
*configCopy.VRFv2.General.MinimumConfirmations,
*configCopy.VRFv2.General.CallbackGasLimit,
*configCopy.VRFv2.General.NumberOfWords,
*configCopy.VRFv2.General.RandomnessRequestCountPerRequest,
*configCopy.VRFv2.General.RandomnessRequestCountPerRequestDeviation,
SethRootKeyIndex,
)
require.NoError(t, err, "error requesting randomness")
vrfcommon.LogRandomnessRequestedEvent(l, vrfContracts.CoordinatorV2, randomWordsRequestedEvent, false, 0)
randRequestBlockNumber := randomWordsRequestedEvent.Raw.BlockNumber
var wg sync.WaitGroup
wg.Add(1)
//Wait at least 256 blocks
sethClient, err := testEnv.GetSethClient(chainID)
require.NoError(t, err, "Getting Seth client shouldn't fail")
_, err = actions.WaitForBlockNumberToBe(
randRequestBlockNumber+uint64(257),
sethClient,
&wg,
configCopy.VRFv2.General.WaitFor256BlocksTimeout.Duration,
t,
l,
)
wg.Wait()
require.NoError(t, err)
err = vrfv2.FundSubscriptions(big.NewFloat(*configCopy.VRFv2.General.SubscriptionFundingAmountLink), vrfContracts.LinkToken, vrfContracts.CoordinatorV2, subIDsForBHS)
require.NoError(t, err, "error funding subscriptions")
randomWordsFulfilledEvent, err := vrfContracts.CoordinatorV2.WaitForRandomWordsFulfilledEvent(
contracts.RandomWordsFulfilledEventFilter{
RequestIds: []*big.Int{randomWordsRequestedEvent.RequestId},
Timeout: configCopy.VRFv2.General.RandomWordsFulfilledEventTimeout.Duration,
},
)
require.NoError(t, err, "error waiting for randomness fulfilled event")
vrfcommon.LogRandomWordsFulfilledEvent(l, vrfContracts.CoordinatorV2, randomWordsFulfilledEvent, false, 0)
status, err := consumers[0].GetRequestStatus(testcontext.Get(t), randomWordsFulfilledEvent.RequestId)
require.NoError(t, err, "error getting rand request status")
require.True(t, status.Fulfilled)
l.Info().Bool("Fulfilment Status", status.Fulfilled).Msg("Random Words Request Fulfilment Status")
})`
$DIR/integration-tests/smoke/vrfv2_test.go: `.Getenv("TEST_UNSKIP")`
$DIR/integration-tests/smoke/vrfv2_test.go: `.MustCopy()`
$DIR/integration-tests/smoke/vrfv2_test.go: `.Ptr(float64(0))`
$DIR/integration-tests/smoke/vrfv2_test.go: `.SetupNewConsumersAndSubs(
testEnv,
chainID,
vrfContracts.CoordinatorV2,
configCopy,
vrfContracts.LinkToken,
1,
1,
l,
)`
$DIR/integration-tests/smoke/vrfv2_test.go: `.CoordinatorV2.GetSubscription(testcontext.Get(t), subIDForBHS)`
$DIR/integration-tests/smoke/vrfv2_test.go: `.Get(t)`
$DIR/integration-tests/smoke/vrfv2_test.go: `.LogSubDetails(l, subscriptionForBHS, strconv.FormatUint(subIDForBHS, 10), vrfContracts.CoordinatorV2)`
$DIR/integration-tests/smoke/vrfv2_test.go: `.FormatUint(subIDForBHS, 10)`
$DIR/integration-tests/smoke/vrfv2_test.go: `.RequestRandomness(
l,
consumers[0],
vrfContracts.CoordinatorV2,
subIDForBHS,
vrfKey,
*configCopy.VRFv2.General.MinimumConfirmations,
*configCopy.VRFv2.General.CallbackGasLimit,
*configCopy.VRFv2.General.NumberOfWords,
*configCopy.VRFv2.General.RandomnessRequestCountPerRequest,
*configCopy.VRFv2.General.RandomnessRequestCountPerRequestDeviation,
SethRootKeyIndex,
)`
$DIR/integration-tests/smoke/vrfv2_test.go: `.LogRandomnessRequestedEvent(l, vrfContracts.CoordinatorV2, randomWordsRequestedEvent, false, 0)`
$DIR/integration-tests/smoke/vrfv2_test.go: `.Add(1)`
$DIR/integration-tests/smoke/vrfv2_test.go: `.GetSethClient(chainID)`
$DIR/integration-tests/smoke/vrfv2_test.go: `.WaitForBlockNumberToBe(
randRequestBlockNumber+uint64(257),
sethClient,
&wg,
configCopy.VRFv2.General.WaitFor256BlocksTimeout.Duration,
t,
l,
)`
$DIR/integration-tests/smoke/vrfv2_test.go: `.Wait()`
$DIR/integration-tests/smoke/vrfv2_test.go: `.FundSubscriptions(big.NewFloat(*configCopy.VRFv2.General.SubscriptionFundingAmountLink), vrfContracts.LinkToken, vrfContracts.CoordinatorV2, subIDsForBHS)`
$DIR/integration-tests/smoke/vrfv2_test.go: `.NewFloat(*configCopy.VRFv2.General.SubscriptionFundingAmountLink)`
$DIR/integration-tests/smoke/vrfv2_test.go: `.CoordinatorV2.WaitForRandomWordsFulfilledEvent(
contracts.RandomWordsFulfilledEventFilter{
RequestIds: []*big.Int{randomWordsRequestedEvent.RequestId},
Timeout: configCopy.VRFv2.General.RandomWordsFulfilledEventTimeout.Duration,
},
)`
$DIR/integration-tests/smoke/vrfv2_test.go: `.LogRandomWordsFulfilledEvent(l, vrfContracts.CoordinatorV2, randomWordsFulfilledEvent, false, 0)`
$DIR/integration-tests/smoke/vrfv2_test.go: `.GetRequestStatus(testcontext.Get(t), randomWordsFulfilledEvent.RequestId)`
$DIR/integration-tests/smoke/vrfv2_test.go: `.Get(t)`
$DIR/integration-tests/smoke/vrfv2_test.go: `.Info()`
$DIR/integration-tests/smoke/vrfv2_test.go: `.Bool("Fulfilment Status", status.Fulfilled)`
$DIR/integration-tests/smoke/vrfv2_test.go: `.Msg("Random Words Request Fulfilment Status")`
$DIR/integration-tests/smoke/vrfv2_test.go: `.MustCopy()`
$DIR/integration-tests/smoke/vrfv2_test.go: `.Ptr(float64(0))`
$DIR/integration-tests/smoke/vrfv2_test.go: `.SetupNewConsumersAndSubs(
testEnv,
chainID,
vrfContracts.CoordinatorV2,
configCopy,
vrfContracts.LinkToken,
1,
1,
l,
)`
$DIR/integration-tests/smoke/vrfv2_test.go: `.CoordinatorV2.GetSubscription(testcontext.Get(t), subIDForBHS)`
$DIR/integration-tests/smoke/vrfv2_test.go: `.Get(t)`
$DIR/integration-tests/smoke/vrfv2_test.go: `.LogSubDetails(l, subscriptionForBHS, strconv.FormatUint(subIDForBHS, 10), vrfContracts.CoordinatorV2)`
$DIR/integration-tests/smoke/vrfv2_test.go: `.FormatUint(subIDForBHS, 10)`
$DIR/integration-tests/smoke/vrfv2_test.go: `.RequestRandomness(
l,
consumers[0],
vrfContracts.CoordinatorV2,
subIDForBHS,
vrfKey,
*configCopy.VRFv2.General.MinimumConfirmations,
*configCopy.VRFv2.General.CallbackGasLimit,
*configCopy.VRFv2.General.NumberOfWords,
*configCopy.VRFv2.General.RandomnessRequestCountPerRequest,
*configCopy.VRFv2.General.RandomnessRequestCountPerRequestDeviation,
SethRootKeyIndex,
)`
$DIR/integration-tests/smoke/vrfv2_test.go: `.BHS.GetBlockHash(testcontext.Get(t), big.NewInt(int64(randRequestBlockNumber)))`
$DIR/integration-tests/smoke/vrfv2_test.go: `.Get(t)`
$DIR/integration-tests/smoke/vrfv2_test.go: `.NewInt(int64(randRequestBlockNumber))`
$DIR/integration-tests/smoke/vrfv2_test.go: `.GetSethClient(chainID)`
$DIR/integration-tests/smoke/vrfv2_test.go: `.Add(1)`
$DIR/integration-tests/smoke/vrfv2_test.go: `.WaitForBlockNumberToBe(
randRequestBlockNumber+uint64(*configCopy.VRFv2.General.BHSJobWaitBlocks),
sethClient,
&wg,
time.Minute*1,
t,
l,
)`
$DIR/integration-tests/smoke/vrfv2_test.go: `.Wait()`
$DIR/integration-tests/smoke/vrfv2_test.go: `.GetLoadTestMetrics(testcontext.Get(t))`
$DIR/integration-tests/smoke/vrfv2_test.go: `.Get(t)`
$DIR/integration-tests/smoke/vrfv2_test.go: `.NewGomegaWithT(t)`
$DIR/integration-tests/smoke/vrfv2_test.go: `.Eventually(func(g gomega.Gomega) {
clNodeTxs, _, err = nodeTypeToNodeMap[vrfcommon.BHS].CLNode.API.ReadTransactions()
g.Expect(err).ShouldNot(gomega.HaveOccurred(), "error getting CL Node transactions")
l.Info().Int("Number of TXs", len(clNodeTxs.Data)).Msg("BHS Node txs")
g.Expect(len(clNodeTxs.Data)).Should(gomega.BeNumerically("==", 1), "Expected 1 tx posted by BHS Node, but found %d", len(clNodeTxs.Data))
txHash = clNodeTxs.Data[0].Attributes.Hash
}, "2m", "1s")`
$DIR/integration-tests/smoke/vrfv2_test.go: `.CLNode.API.ReadTransactions()`
$DIR/integration-tests/smoke/vrfv2_test.go: `.Expect(err)`
$DIR/integration-tests/smoke/vrfv2_test.go: `.ShouldNot(gomega.HaveOccurred(), "error getting CL Node transactions")`
$DIR/integration-tests/smoke/vrfv2_test.go: `.HaveOccurred()`
$DIR/integration-tests/smoke/vrfv2_test.go: `.Info()`
$DIR/integration-tests/smoke/vrfv2_test.go: `.Int("Number of TXs", len(clNodeTxs.Data))`
$DIR/integration-tests/smoke/vrfv2_test.go: `.Msg("BHS Node txs")`
$DIR/integration-tests/smoke/vrfv2_test.go: `.Expect(len(clNodeTxs.Data))`
$DIR/integration-tests/smoke/vrfv2_test.go: `.Should(gomega.BeNumerically("==", 1), "Expected 1 tx posted by BHS Node, but found %d", len(clNodeTxs.Data))`
$DIR/integration-tests/smoke/vrfv2_test.go: `.BeNumerically("==", 1)`
$DIR/integration-tests/smoke/vrfv2_test.go: `.Should(gomega.Succeed())`
$DIR/integration-tests/smoke/vrfv2_test.go: `.Succeed()`
$DIR/integration-tests/smoke/vrfv2_test.go: `.Client.TransactionByHash(testcontext.Get(t), common.HexToHash(txHash))`
$DIR/integration-tests/smoke/vrfv2_test.go: `.Get(t)`
$DIR/integration-tests/smoke/vrfv2_test.go: `.HexToHash(txHash)`
$DIR/integration-tests/smoke/vrfv2_test.go: `.DecodeTxInputData(blockhash_store.BlockhashStoreABI, bhsStoreTx.Data())`
$DIR/integration-tests/smoke/vrfv2_test.go: `.Data()`
$DIR/integration-tests/smoke/vrfv2_test.go: `.Info()`
$DIR/integration-tests/smoke/vrfv2_test.go: `.
Str("Block Number", bhsStoreTxInputData["n"].(*big.Int).String())`
$DIR/integration-tests/smoke/vrfv2_test.go: `.String()`
$DIR/integration-tests/smoke/vrfv2_test.go: `.
Msg("BHS Node's Store Blockhash for Blocknumber Method TX")`
$DIR/integration-tests/smoke/vrfv2_test.go: `.Eventually(func(g gomega.Gomega) {
randRequestBlockHash, err = vrfContracts.BHS.GetBlockHash(testcontext.Get(t), big.NewInt(int64(randRequestBlockNumber)))
g.Expect(err).ShouldNot(gomega.HaveOccurred(), "error getting blockhash for a blocknumber which was stored in BHS contract")
}, "2m", "1s")`
$DIR/integration-tests/smoke/vrfv2_test.go: `.BHS.GetBlockHash(testcontext.Get(t), big.NewInt(int64(randRequestBlockNumber)))`
$DIR/integration-tests/smoke/vrfv2_test.go: `.Get(t)`
$DIR/integration-tests/smoke/vrfv2_test.go: `.NewInt(int64(randRequestBlockNumber))`
$DIR/integration-tests/smoke/vrfv2_test.go: `.Expect(err)`
$DIR/integration-tests/smoke/vrfv2_test.go: `.ShouldNot(gomega.HaveOccurred(), "error getting blockhash for a blocknumber which was stored in BHS contract")`
$DIR/integration-tests/smoke/vrfv2_test.go: `.HaveOccurred()`
$DIR/integration-tests/smoke/vrfv2_test.go: `.Should(gomega.Succeed())`
$DIR/integration-tests/smoke/vrfv2_test.go: `.Succeed()`
$DIR/integration-tests/smoke/vrfv2_test.go: `.Info()`
$DIR/integration-tests/smoke/vrfv2_test.go: `.
Str("Randomness Request's Blockhash", randomWordsRequestedEvent.Raw.BlockHash.String())`
$DIR/integration-tests/smoke/vrfv2_test.go: `.Raw.BlockHash.String()`
$DIR/integration-tests/smoke/vrfv2_test.go: `.
Str("Block Hash stored by BHS contract", fmt.Sprintf("0x%x", randRequestBlockHash))`
$DIR/integration-tests/smoke/vrfv2_test.go: `.Sprintf("0x%x", randRequestBlockHash)`
$DIR/integration-tests/smoke/vrfv2_test.go: `.
Msg("BHS Contract's stored Blockhash for Randomness Request")`
$DIR/integration-tests/smoke/vrfv2_test.go: `.GetTestLogger(t)`
$DIR/integration-tests/smoke/vrfv2_test.go: `.GetConfig("Smoke", tc.VRFv2)`
$DIR/integration-tests/smoke/vrfv2_test.go: `.MustGetSelectedNetworkConfig(config.GetNetworkConfig())`
$DIR/integration-tests/smoke/vrfv2_test.go: `.GetNetworkConfig()`
$DIR/integration-tests/smoke/vrfv2_test.go: `.GetSethClient(chainID)`
$DIR/integration-tests/smoke/vrfv2_test.go: `.Cfg.IsSimulatedNetwork()`
$DIR/integration-tests/smoke/vrfv2_test.go: `.Info()`
$DIR/integration-tests/smoke/vrfv2_test.go: `.
Str("Network Name", sethClient.Cfg.Network.Name)`
$DIR/integration-tests/smoke/vrfv2_test.go: `.
Msg("Network is a simulated network. Skipping fund return for Coordinator Subscriptions.")`
$DIR/integration-tests/smoke/vrfv2_test.go: `.CancelSubsAndReturnFunds(testcontext.Get(t), vrfContracts, defaultWalletAddress, subIDsForCancellingAfterTest, l)`
$DIR/integration-tests/smoke/vrfv2_test.go: `.Get(t)`
$DIR/integration-tests/smoke/vrfv2_test.go: `.Cleanup(test_env.CleanupOpts{TestName: t.Name()})`
$DIR/integration-tests/smoke/vrfv2_test.go: `.Name()`
$DIR/integration-tests/smoke/vrfv2_test.go: `.GetDefaultChainlinkNodeLogScannerSettingsWithExtraAllowedMessages(
testreporters.NewAllowedLogMessage(
"This is a problem and either means a very deep re-org occurred",
"Test is expecting a reorg to occur",
zapcore.DPanicLevel,
testreporters.WarnAboutAllowedMsgs_No),
testreporters.NewAllowedLogMessage(
"Reorg greater than finality depth detected",
"Test is expecting a reorg to occur",
zapcore.DPanicLevel,
testreporters.WarnAboutAllowedMsgs_No),
)`
$DIR/integration-tests/smoke/vrfv2_test.go: `.NewAllowedLogMessage(
"This is a problem and either means a very deep re-org occurred",
"Test is expecting a reorg to occur",
zapcore.DPanicLevel,
testreporters.WarnAboutAllowedMsgs_No)`
$DIR/integration-tests/smoke/vrfv2_test.go: `.NewAllowedLogMessage(
"Reorg greater than finality depth detected",
"Test is expecting a reorg to occur",
zapcore.DPanicLevel,
testreporters.WarnAboutAllowedMsgs_No)`
$DIR/integration-tests/smoke/vrfv2_test.go: `.SetupVRFV2Universe(testcontext.Get(t), t, vrfEnvConfig, newEnvConfig, l)`
$DIR/integration-tests/smoke/vrfv2_test.go: `.Get(t)`
$DIR/integration-tests/smoke/vrfv2_test.go: `.GetSethClient(chainID)`
$DIR/integration-tests/smoke/vrfv2_test.go: `.SetupNewConsumersAndSubs(
env,
chainID,
vrfContracts.CoordinatorV2,
config,
vrfContracts.LinkToken,
1,
1,
l,
)`
$DIR/integration-tests/smoke/vrfv2_test.go: `.CoordinatorV2.GetSubscription(testcontext.Get(t), subID)`
$DIR/integration-tests/smoke/vrfv2_test.go: `.Get(t)`
$DIR/integration-tests/smoke/vrfv2_test.go: `.LogSubDetails(l, subscription, strconv.FormatUint(subID, 10), vrfContracts.CoordinatorV2)`
$DIR/integration-tests/smoke/vrfv2_test.go: `.FormatUint(subID, 10)`
$DIR/integration-tests/smoke/vrfv2_test.go: `.Run("Reorg on fulfillment", func(t *testing.T) {
configCopy := config.MustCopy().(tc.TestConfig)
configCopy.VRFv2.General.MinimumConfirmations = ptr.Ptr[uint16](10)
//1. request randomness and wait for fulfillment for blockhash from Reorged Fork
randomWordsRequestedEvent, randomWordsFulfilledEventOnReorgedFork, err := vrfv2.RequestRandomnessAndWaitForFulfillment(
l,
consumers[0],
vrfContracts.CoordinatorV2,
subID,
vrfKey,
*configCopy.VRFv2.General.MinimumConfirmations,
*configCopy.VRFv2.General.CallbackGasLimit,
*configCopy.VRFv2.General.NumberOfWords,
*configCopy.VRFv2.General.RandomnessRequestCountPerRequest,
*configCopy.VRFv2.General.RandomnessRequestCountPerRequestDeviation,
configCopy.VRFv2.General.RandomWordsFulfilledEventTimeout.Duration,
0,
)
require.NoError(t, err)
// rewind chain to block number after the request was made, but before the request was fulfilled
rewindChainToBlock := randomWordsRequestedEvent.Raw.BlockNumber + 1
rpcUrl, err := actions.GetRPCUrl(env, chainID)
require.NoError(t, err, "error getting rpc url")
//2. rewind chain by n number of blocks - basically, mimicking reorg scenario
latestBlockNumberAfterReorg, err := actions.RewindSimulatedChainToBlockNumber(testcontext.Get(t), sethClient, rpcUrl, rewindChainToBlock, l)
require.NoError(t, err, fmt.Sprintf("error rewinding chain to block number %d", rewindChainToBlock))
//3.1 ensure that chain is reorged and latest block number is greater than the block number when request was made
require.Greater(t, latestBlockNumberAfterReorg, randomWordsRequestedEvent.Raw.BlockNumber)
//3.2 ensure that chain is reorged and latest block number is less than the block number when fulfilment was performed
require.Less(t, latestBlockNumberAfterReorg, randomWordsFulfilledEventOnReorgedFork.Raw.BlockNumber)
//4. wait for the fulfillment which VRF Node will generate for Canonical chain
_, err = vrfv2.WaitRandomWordsFulfilledEvent(
vrfContracts.CoordinatorV2,
randomWordsRequestedEvent.RequestId,
randomWordsRequestedEvent.Raw.BlockNumber,
configCopy.VRFv2.General.RandomWordsFulfilledEventTimeout.Duration,
l,
)
require.NoError(t, err, "error waiting for randomness fulfilled event")
})`
$DIR/integration-tests/smoke/vrfv2_test.go: `.MustCopy()`
$DIR/integration-tests/smoke/vrfv2_test.go: `.RequestRandomnessAndWaitForFulfillment(
l,
consumers[0],
vrfContracts.CoordinatorV2,
subID,
vrfKey,
*configCopy.VRFv2.General.MinimumConfirmations,
*configCopy.VRFv2.General.CallbackGasLimit,
*configCopy.VRFv2.General.NumberOfWords,
*configCopy.VRFv2.General.RandomnessRequestCountPerRequest,
*configCopy.VRFv2.General.RandomnessRequestCountPerRequestDeviation,
configCopy.VRFv2.General.RandomWordsFulfilledEventTimeout.Duration,
0,
)`
$DIR/integration-tests/smoke/vrfv2_test.go: `.GetRPCUrl(env, chainID)`
$DIR/integration-tests/smoke/vrfv2_test.go: `.RewindSimulatedChainToBlockNumber(testcontext.Get(t), sethClient, rpcUrl, rewindChainToBlock, l)`
$DIR/integration-tests/smoke/vrfv2_test.go: `.Get(t)`
$DIR/integration-tests/smoke/vrfv2_test.go: `.WaitRandomWordsFulfilledEvent(
vrfContracts.CoordinatorV2,
randomWordsRequestedEvent.RequestId,
randomWordsRequestedEvent.Raw.BlockNumber,
configCopy.VRFv2.General.RandomWordsFulfilledEventTimeout.Duration,
l,
)`
$DIR/integration-tests/smoke/vrfv2_test.go: `.MustCopy()`
$DIR/integration-tests/smoke/vrfv2_test.go: `.RequestRandomness(
l,
consumers[0],
vrfContracts.CoordinatorV2,
subID,
vrfKey,
*configCopy.VRFv2.General.MinimumConfirmations,
*configCopy.VRFv2.General.CallbackGasLimit,
*configCopy.VRFv2.General.NumberOfWords,
*configCopy.VRFv2.General.RandomnessRequestCountPerRequest,
*configCopy.VRFv2.General.RandomnessRequestCountPerRequestDeviation,
SethRootKeyIndex,
)`
$DIR/integration-tests/smoke/vrfv2_test.go: `.GetRPCUrl(env, chainID)`
$DIR/integration-tests/smoke/vrfv2_test.go: `.RewindSimulatedChainToBlockNumber(testcontext.Get(t), sethClient, rpcUrl, rewindChainToBlockNumber, l)`
$DIR/integration-tests/smoke/vrfv2_test.go: `.Get(t)`
$DIR/integration-tests/smoke/vrfv2_test.go: `.CoordinatorV2.WaitForRandomWordsFulfilledEvent(
contracts.RandomWordsFulfilledEventFilter{
RequestIds: []*big.Int{randomWordsRequestedEvent.RequestId},
Timeout: time.Second * 10,
},
)`
$DIR/integration-tests/smoke/vrfv2_test.go: `.GetTestLogger(t)`
$DIR/integration-tests/smoke/vrfv2_test.go: `.GetConfig("Smoke", tc.VRFv2)`
$DIR/integration-tests/smoke/vrfv2_test.go: `.MustGetSelectedNetworkConfig(config.GetNetworkConfig())`
$DIR/integration-tests/smoke/vrfv2_test.go: `.GetNetworkConfig()`
$DIR/integration-tests/smoke/vrfv2_test.go: `.GetSethClient(chainID)`
$DIR/integration-tests/smoke/vrfv2_test.go: `.Cfg.IsSimulatedNetwork()`
$DIR/integration-tests/smoke/vrfv2_test.go: `.Info()`
$DIR/integration-tests/smoke/vrfv2_test.go: `.
Str("Network Name", sethClient.Cfg.Network.Name)`
$DIR/integration-tests/smoke/vrfv2_test.go: `.
Msg("Network is a simulated network. Skipping fund return for Coordinator Subscriptions.")`
$DIR/integration-tests/smoke/vrfv2_test.go: `.CancelSubsAndReturnFunds(testcontext.Get(t), vrfContracts, defaultWalletAddress, subIDsForCancellingAfterTest, l)`
$DIR/integration-tests/smoke/vrfv2_test.go: `.Get(t)`
$DIR/integration-tests/smoke/vrfv2_test.go: `.Cleanup(test_env.CleanupOpts{TestName: t.Name()})`
$DIR/integration-tests/smoke/vrfv2_test.go: `.Name()`
$DIR/integration-tests/smoke/vrfv2_test.go: `.SetupVRFV2Universe(testcontext.Get(t), t, vrfEnvConfig, newEnvConfig, l)`
$DIR/integration-tests/smoke/vrfv2_test.go: `.Get(t)`
$DIR/integration-tests/smoke/vrfv2_test.go: `.GetSethClient(chainID)`
$DIR/integration-tests/smoke/vrfv2_test.go: `.Ptr(uint32(500_000))`
$DIR/integration-tests/smoke/vrfv2_test.go: `.Run("Batch Fulfillment Enabled", func(t *testing.T) {
configCopy := config.MustCopy().(tc.TestConfig)
vrfNode, exists := nodeTypeToNodeMap[vrfcommon.VRF]
require.True(t, exists, "VRF Node does not exist")
//ensure that no job present on the node
err = actions.DeleteJobs([]*client.ChainlinkClient{vrfNode.CLNode.API})
require.NoError(t, err)
batchFullfillmentEnabled := true
// create job with batch fulfillment enabled
vrfJobSpecConfig := vrfcommon.VRFJobSpecConfig{
ForwardingAllowed: *configCopy.VRFv2.General.VRFJobForwardingAllowed,
CoordinatorAddress: vrfContracts.CoordinatorV2.Address(),
BatchCoordinatorAddress: vrfContracts.BatchCoordinatorV2.Address(),
FromAddresses: vrfNode.TXKeyAddressStrings,
EVMChainID: fmt.Sprint(chainID),
MinIncomingConfirmations: int(*configCopy.VRFv2.General.MinimumConfirmations),
PublicKey: vrfKey.PubKeyCompressed,
EstimateGasMultiplier: *configCopy.VRFv2.General.VRFJobEstimateGasMultiplier,
BatchFulfillmentEnabled: batchFullfillmentEnabled,
BatchFulfillmentGasMultiplier: *configCopy.VRFv2.General.VRFJobBatchFulfillmentGasMultiplier,
PollPeriod: configCopy.VRFv2.General.VRFJobPollPeriod.Duration,
RequestTimeout: configCopy.VRFv2.General.VRFJobRequestTimeout.Duration,
SimulationBlock: configCopy.VRFv2.General.VRFJobSimulationBlock,
VRFOwnerConfig: &vrfcommon.VRFOwnerConfig{
UseVRFOwner: false,
},
}
l.Info().
Msg("Creating VRFV2 Job with `batchFulfillmentEnabled = true`")
job, err := vrfv2.CreateVRFV2Job(
vrfNode.CLNode.API,
vrfJobSpecConfig,
)
require.NoError(t, err, "error creating job with higher timeout")
vrfNode.Job = job
consumers, subIDs, err := vrfv2.SetupNewConsumersAndSubs(
env,
chainID,
vrfContracts.CoordinatorV2,
configCopy,
vrfContracts.LinkToken,
1,
1,
l,
)
require.NoError(t, err, "error setting up new consumers and subs")
subID := subIDs[0]
subscription, err := vrfContracts.CoordinatorV2.GetSubscription(testcontext.Get(t), subID)
require.NoError(t, err, "error getting subscription information")
vrfcommon.LogSubDetails(l, subscription, strconv.FormatUint(subID, 10), vrfContracts.CoordinatorV2)
subIDsForCancellingAfterTest = append(subIDsForCancellingAfterTest, subIDs...)
configCopy.VRFv2.General.RandomnessRequestCountPerRequest = ptr.Ptr(uint16(randRequestCount))
// test and assert
_, randomWordsFulfilledEvent, err := vrfv2.RequestRandomnessAndWaitForFulfillment(
l,
consumers[0],
vrfContracts.CoordinatorV2,
subID,
vrfKey,
*configCopy.VRFv2.General.MinimumConfirmations,
*configCopy.VRFv2.General.CallbackGasLimit,
*configCopy.VRFv2.General.NumberOfWords,
*configCopy.VRFv2.General.RandomnessRequestCountPerRequest,
*configCopy.VRFv2.General.RandomnessRequestCountPerRequestDeviation,
configCopy.VRFv2.General.RandomWordsFulfilledEventTimeout.Duration,
0,
)
require.NoError(t, err, "error requesting randomness and waiting for fulfilment")
var wgAllRequestsFulfilled sync.WaitGroup
wgAllRequestsFulfilled.Add(1)
requestCount, fulfilmentCount, err := vrfcommon.WaitForRequestCountEqualToFulfilmentCount(testcontext.Get(t), consumers[0], 2*time.Minute, &wgAllRequestsFulfilled)
require.NoError(t, err)
wgAllRequestsFulfilled.Wait()
l.Info().
Interface("Request Count", requestCount).
Interface("Fulfilment Count", fulfilmentCount).
Msg("Request/Fulfilment Stats")
clNodeTxs, resp, err := nodeTypeToNodeMap[vrfcommon.VRF].CLNode.API.ReadTransactions()
require.NoError(t, err)
require.Equal(t, 200, resp.StatusCode)
var batchFulfillmentTxs []client.TransactionData
for _, tx := range clNodeTxs.Data {
if common.HexToAddress(tx.Attributes.To).Cmp(common.HexToAddress(vrfContracts.BatchCoordinatorV2.Address())) == 0 {
batchFulfillmentTxs = append(batchFulfillmentTxs, tx)
}
}
// verify that all fulfillments should be inside one tx
require.Equal(t, 1, len(batchFulfillmentTxs))
fulfillmentTx, _, err := sethClient.Client.TransactionByHash(testcontext.Get(t), randomWordsFulfilledEvent.Raw.TxHash)
require.NoError(t, err, "error getting tx from hash")
fulfillmentTXToAddress := fulfillmentTx.To().String()
l.Info().
Str("Actual Fulfillment Tx To Address", fulfillmentTXToAddress).
Str("BatchCoordinatorV2 Address", vrfContracts.BatchCoordinatorV2.Address()).
Msg("Fulfillment Tx To Address should be the BatchCoordinatorV2 Address when batch fulfillment is enabled")
// verify that VRF node sends fulfillments via BatchCoordinator contract
require.Equal(t, vrfContracts.BatchCoordinatorV2.Address(), fulfillmentTXToAddress, "Fulfillment Tx To Address should be the BatchCoordinatorV2 Address when batch fulfillment is enabled")
// verify that all fulfillments should be inside one tx
// This check is disabled for live testnets since each testnet has different gas usage for similar tx
if network.Simulated {
fulfillmentTxReceipt, err := sethClient.Client.TransactionReceipt(testcontext.Get(t), fulfillmentTx.Hash())
require.NoError(t, err)
randomWordsFulfilledLogs, err := contracts.ParseRandomWordsFulfilledLogs(vrfContracts.CoordinatorV2, fulfillmentTxReceipt.Logs)
require.NoError(t, err)
require.Equal(t, 1, len(batchFulfillmentTxs))
require.Equal(t, int(randRequestCount), len(randomWordsFulfilledLogs))
}
})`
$DIR/integration-tests/smoke/vrfv2_test.go: `.MustCopy()`
$DIR/integration-tests/smoke/vrfv2_test.go: `.DeleteJobs([]*client.ChainlinkClient{vrfNode.CLNode.API})`
$DIR/integration-tests/smoke/vrfv2_test.go: `.CoordinatorV2.Address()`
$DIR/integration-tests/smoke/vrfv2_test.go: `.BatchCoordinatorV2.Address()`
$DIR/integration-tests/smoke/vrfv2_test.go: `.Sprint(chainID)`
$DIR/integration-tests/smoke/vrfv2_test.go: `.Info()`
$DIR/integration-tests/smoke/vrfv2_test.go: `.
Msg("Creating VRFV2 Job with `batchFulfillmentEnabled = true`")`
$DIR/integration-tests/smoke/vrfv2_test.go: `.CreateVRFV2Job(
vrfNode.CLNode.API,
vrfJobSpecConfig,
)`
$DIR/integration-tests/smoke/vrfv2_test.go: `.SetupNewConsumersAndSubs(
env,
chainID,
vrfContracts.CoordinatorV2,
configCopy,
vrfContracts.LinkToken,
1,
1,
l,
)`
$DIR/integration-tests/smoke/vrfv2_test.go: `.CoordinatorV2.GetSubscription(testcontext.Get(t), subID)`
$DIR/integration-tests/smoke/vrfv2_test.go: `.Get(t)`
$DIR/integration-tests/smoke/vrfv2_test.go: `.LogSubDetails(l, subscription, strconv.FormatUint(subID, 10), vrfContracts.CoordinatorV2)`
$DIR/integration-tests/smoke/vrfv2_test.go: `.FormatUint(subID, 10)`
$DIR/integration-tests/smoke/vrfv2_test.go: `.Ptr(uint16(randRequestCount))`
$DIR/integration-tests/smoke/vrfv2_test.go: `.RequestRandomnessAndWaitForFulfillment(
l,
consumers[0],
vrfContracts.CoordinatorV2,
subID,
vrfKey,
*configCopy.VRFv2.General.MinimumConfirmations,
*configCopy.VRFv2.General.CallbackGasLimit,
*configCopy.VRFv2.General.NumberOfWords,
*configCopy.VRFv2.General.RandomnessRequestCountPerRequest,
*configCopy.VRFv2.General.RandomnessRequestCountPerRequestDeviation,
configCopy.VRFv2.General.RandomWordsFulfilledEventTimeout.Duration,
0,
)`
$DIR/integration-tests/smoke/vrfv2_test.go: `.Add(1)`
$DIR/integration-tests/smoke/vrfv2_test.go: `.WaitForRequestCountEqualToFulfilmentCount(testcontext.Get(t), consumers[0], 2*time.Minute, &wgAllRequestsFulfilled)`
$DIR/integration-tests/smoke/vrfv2_test.go: `.Get(t)`
$DIR/integration-tests/smoke/vrfv2_test.go: `.Wait()`
$DIR/integration-tests/smoke/vrfv2_test.go: `.Info()`
$DIR/integration-tests/smoke/vrfv2_test.go: `.
Interface("Request Count", requestCount)`
$DIR/integration-tests/smoke/vrfv2_test.go: `.
Interface("Fulfilment Count", fulfilmentCount)`
$DIR/integration-tests/smoke/vrfv2_test.go: `.
Msg("Request/Fulfilment Stats")`
$DIR/integration-tests/smoke/vrfv2_test.go: `.CLNode.API.ReadTransactions()`
$DIR/integration-tests/smoke/vrfv2_test.go: `.HexToAddress(tx.Attributes.To)`
$DIR/integration-tests/smoke/vrfv2_test.go: `.Cmp(common.HexToAddress(vrfContracts.BatchCoordinatorV2.Address()))`
$DIR/integration-tests/smoke/vrfv2_test.go: `.HexToAddress(vrfContracts.BatchCoordinatorV2.Address())`
$DIR/integration-tests/smoke/vrfv2_test.go: `.BatchCoordinatorV2.Address()`
$DIR/integration-tests/smoke/vrfv2_test.go: `.Client.TransactionByHash(testcontext.Get(t), randomWordsFulfilledEvent.Raw.TxHash)`
$DIR/integration-tests/smoke/vrfv2_test.go: `.Get(t)`
$DIR/integration-tests/smoke/vrfv2_test.go: `.To()`
$DIR/integration-tests/smoke/vrfv2_test.go: `.String()`
$DIR/integration-tests/smoke/vrfv2_test.go: `.Info()`
$DIR/integration-tests/smoke/vrfv2_test.go: `.
Str("Actual Fulfillment Tx To Address", fulfillmentTXToAddress)`
$DIR/integration-tests/smoke/vrfv2_test.go: `.
Str("BatchCoordinatorV2 Address", vrfContracts.BatchCoordinatorV2.Address())`
$DIR/integration-tests/smoke/vrfv2_test.go: `.BatchCoordinatorV2.Address()`
$DIR/integration-tests/smoke/vrfv2_test.go: `.
Msg("Fulfillment Tx To Address should be the BatchCoordinatorV2 Address when batch fulfillment is enabled")`
$DIR/integration-tests/smoke/vrfv2_test.go: `.Client.TransactionReceipt(testcontext.Get(t), fulfillmentTx.Hash())`
$DIR/integration-tests/smoke/vrfv2_test.go: `.Get(t)`
$DIR/integration-tests/smoke/vrfv2_test.go: `.Hash()`
$DIR/integration-tests/smoke/vrfv2_test.go: `.ParseRandomWordsFulfilledLogs(vrfContracts.CoordinatorV2, fulfillmentTxReceipt.Logs)`
$DIR/integration-tests/smoke/vrfv2_test.go: `.MustCopy()`
$DIR/integration-tests/smoke/vrfv2_test.go: `.DeleteJobs([]*client.ChainlinkClient{vrfNode.CLNode.API})`
$DIR/integration-tests/smoke/vrfv2_test.go: `.CoordinatorV2.Address()`
$DIR/integration-tests/smoke/vrfv2_test.go: `.BatchCoordinatorV2.Address()`
$DIR/integration-tests/smoke/vrfv2_test.go: `.Sprint(chainID)`
$DIR/integration-tests/smoke/vrfv2_test.go: `.Info()`
$DIR/integration-tests/smoke/vrfv2_test.go: `.
Msg("Creating VRFV2 Job with `batchFulfillmentEnabled = false`")`
$DIR/integration-tests/smoke/vrfv2_test.go: `.CreateVRFV2Job(
vrfNode.CLNode.API,
vrfJobSpecConfig,
)`
$DIR/integration-tests/smoke/vrfv2_test.go: `.SetupNewConsumersAndSubs(
env,
chainID,
vrfContracts.CoordinatorV2,
configCopy,
vrfContracts.LinkToken,
1,
1,
l,
)`
$DIR/integration-tests/smoke/vrfv2_test.go: `.CoordinatorV2.GetSubscription(testcontext.Get(t), subID)`
$DIR/integration-tests/smoke/vrfv2_test.go: `.Get(t)`
$DIR/integration-tests/smoke/vrfv2_test.go: `.LogSubDetails(l, subscription, strconv.FormatUint(subID, 10), vrfContracts.CoordinatorV2)`
$DIR/integration-tests/smoke/vrfv2_test.go: `.FormatUint(subID, 10)`
$DIR/integration-tests/smoke/vrfv2_test.go: `.Ptr(uint16(randRequestCount))`
$DIR/integration-tests/smoke/vrfv2_test.go: `.RequestRandomnessAndWaitForFulfillment(
l,
consumers[0],
vrfContracts.CoordinatorV2,
subID,
vrfKey,
*configCopy.VRFv2.General.MinimumConfirmations,
*configCopy.VRFv2.General.CallbackGasLimit,
*configCopy.VRFv2.General.NumberOfWords,
*configCopy.VRFv2.General.RandomnessRequestCountPerRequest,
*configCopy.VRFv2.General.RandomnessRequestCountPerRequestDeviation,
configCopy.VRFv2.General.RandomWordsFulfilledEventTimeout.Duration,
0,
)`
$DIR/integration-tests/smoke/vrfv2_test.go: `.Add(1)`
$DIR/integration-tests/smoke/vrfv2_test.go: `.WaitForRequestCountEqualToFulfilmentCount(testcontext.Get(t), consumers[0], 2*time.Minute, &wgAllRequestsFulfilled)`
$DIR/integration-tests/smoke/vrfv2_test.go: `.Get(t)`
$DIR/integration-tests/smoke/vrfv2_test.go: `.Wait()`
$DIR/integration-tests/smoke/vrfv2_test.go: `.Info()`
$DIR/integration-tests/smoke/vrfv2_test.go: `.
Interface("Request Count", requestCount)`
$DIR/integration-tests/smoke/vrfv2_test.go: `.
Interface("Fulfilment Count", fulfilmentCount)`
$DIR/integration-tests/smoke/vrfv2_test.go: `.
Msg("Request/Fulfilment Stats")`
$DIR/integration-tests/smoke/vrfv2_test.go: `.Client.TransactionByHash(testcontext.Get(t), randomWordsFulfilledEvent.Raw.TxHash)`
$DIR/integration-tests/smoke/vrfv2_test.go: `.Get(t)`
$DIR/integration-tests/smoke/vrfv2_test.go: `.To()`
$DIR/integration-tests/smoke/vrfv2_test.go: `.String()`
$DIR/integration-tests/smoke/vrfv2_test.go: `.Info()`
$DIR/integration-tests/smoke/vrfv2_test.go: `.
Str("Actual Fulfillment Tx To Address", fulfillmentTXToAddress)`
$DIR/integration-tests/smoke/vrfv2_test.go: `.
Str("CoordinatorV2 Address", vrfContracts.CoordinatorV2.Address())`
$DIR/integration-tests/smoke/vrfv2_test.go: `.CoordinatorV2.Address()`
$DIR/integration-tests/smoke/vrfv2_test.go: `.
Msg("Fulfillment Tx To Address should be the CoordinatorV2 Address when batch fulfillment is disabled")`
$DIR/integration-tests/smoke/vrfv2_test.go: `.CLNode.API.ReadTransactions()`
$DIR/integration-tests/smoke/vrfv2_test.go: `.HexToAddress(tx.Attributes.To)`
$DIR/integration-tests/smoke/vrfv2_test.go: `.Cmp(common.HexToAddress(vrfContracts.CoordinatorV2.Address()))`
$DIR/integration-tests/smoke/vrfv2_test.go: `.HexToAddress(vrfContracts.CoordinatorV2.Address())`
$DIR/integration-tests/smoke/vrfv2_test.go: `.CoordinatorV2.Address()`
$DIR/integration-tests/smoke/vrfv2plus_test.go: `l.Info().
Str("Network Name", sethClient.Cfg.Network.Name).
Msg("Network is a simulated network. Skipping fund return for Coordinator Subscriptions.")`
$DIR/integration-tests/smoke/vrfv2plus_test.go: `vrfv2plus.CancelSubsAndReturnFunds(testcontext.Get(t), vrfContracts, sethClient.MustGetRootKeyAddress().Hex(), subIDsForCancellingAfterTest, l)`
$DIR/integration-tests/smoke/vrfv2plus_test.go: `env, vrfContracts, vrfKey, nodeTypeToNodeMap, err = vrfv2plus.SetupVRFV2PlusUniverse(testcontext.Get(t), t, vrfEnvConfig, newEnvConfig, l)`
$DIR/integration-tests/smoke/vrfv2plus_test.go: `t.Run("Link Billing", func(t *testing.T) {
configCopy := config.MustCopy().(tc.TestConfig)
var isNativeBilling = false
consumers, subIDsForRequestRandomness, err := vrfv2plus.SetupNewConsumersAndSubs(
testcontext.Get(t),
env,
chainID,
vrfContracts.CoordinatorV2Plus,
configCopy,
vrfContracts.LinkToken,
1,
1,
l,
)
require.NoError(t, err, "error setting up new consumers and subs")
subIDForRequestRandomness := subIDsForRequestRandomness[0]
subscription, err := vrfContracts.CoordinatorV2Plus.GetSubscription(testcontext.Get(t), subIDForRequestRandomness)
require.NoError(t, err, "error getting subscription information")
vrfcommon.LogSubDetails(l, subscription, subIDForRequestRandomness.String(), vrfContracts.CoordinatorV2Plus)
subIDsForCancellingAfterTest = append(subIDsForCancellingAfterTest, subIDsForRequestRandomness...)
subBalanceBeforeRequest := subscription.Balance
// test and assert
_, randomWordsFulfilledEvent, err := vrfv2plus.RequestRandomnessAndWaitForFulfillment(
consumers[0],
vrfContracts.CoordinatorV2Plus,
vrfKey,
subIDForRequestRandomness,
isNativeBilling,
configCopy.VRFv2Plus.General,
l,
0,
)
require.NoError(t, err, "error requesting randomness and waiting for fulfilment")
require.False(t, randomWordsFulfilledEvent.OnlyPremium, "RandomWordsFulfilled Event's `OnlyPremium` field should be false")
require.Equal(t, isNativeBilling, randomWordsFulfilledEvent.NativePayment, "RandomWordsFulfilled Event's `NativePayment` field should be false")
require.True(t, randomWordsFulfilledEvent.Success, "RandomWordsFulfilled Event's `Success` field should be true")
expectedSubBalanceJuels := new(big.Int).Sub(subBalanceBeforeRequest, randomWordsFulfilledEvent.Payment)
subscription, err = vrfContracts.CoordinatorV2Plus.GetSubscription(testcontext.Get(t), subIDForRequestRandomness)
require.NoError(t, err, "error getting subscription information")
subBalanceAfterRequest := subscription.Balance
require.Equal(t, expectedSubBalanceJuels, subBalanceAfterRequest)
status, err := consumers[0].GetRequestStatus(testcontext.Get(t), randomWordsFulfilledEvent.RequestId)
require.NoError(t, err, "error getting rand request status")
require.True(t, status.Fulfilled)
l.Info().Bool("Fulfilment Status", status.Fulfilled).Msg("Random Words Request Fulfilment Status")
require.Equal(t, *configCopy.VRFv2Plus.General.NumberOfWords, uint32(len(status.RandomWords)))
for _, w := range status.RandomWords {
l.Info().Str("Output", w.String()).Msg("Randomness fulfilled")
require.Equal(t, 1, w.Cmp(big.NewInt(0)), "Expected the VRF job give an answer bigger than 0")
}
})`
$DIR/integration-tests/smoke/vrfv2plus_test.go: `vrfcommon.LogSubDetails(l, subscription, subIDForRequestRandomness.String(), vrfContracts.CoordinatorV2Plus)`
$DIR/integration-tests/smoke/vrfv2plus_test.go: `subIDsForCancellingAfterTest = append(subIDsForCancellingAfterTest, subIDsForRequestRandomness...)`
$DIR/integration-tests/smoke/vrfv2plus_test.go: `subscription, err = vrfContracts.CoordinatorV2Plus.GetSubscription(testcontext.Get(t), subIDForRequestRandomness)`
$DIR/integration-tests/smoke/vrfv2plus_test.go: `l.Info().Bool("Fulfilment Status", status.Fulfilled).Msg("Random Words Request Fulfilment Status")`
$DIR/integration-tests/smoke/vrfv2plus_test.go: `l.Info().Str("Output", w.String()).Msg("Randomness fulfilled")`
$DIR/integration-tests/smoke/vrfv2plus_test.go: `t.Run("Native Billing", func(t *testing.T) {
configCopy := config.MustCopy().(tc.TestConfig)
testConfig := configCopy.VRFv2Plus.General
var isNativeBilling = true
consumers, subIDs, err := vrfv2plus.SetupNewConsumersAndSubs(
testcontext.Get(t),
env,
chainID,
vrfContracts.CoordinatorV2Plus,
configCopy,
vrfContracts.LinkToken,
1,
1,
l,
)
require.NoError(t, err, "error setting up new consumers and subs")
subID := subIDs[0]
subscription, err := vrfContracts.CoordinatorV2Plus.GetSubscription(testcontext.Get(t), subID)
require.NoError(t, err, "error getting subscription information")
vrfcommon.LogSubDetails(l, subscription, subID.String(), vrfContracts.CoordinatorV2Plus)
subIDsForCancellingAfterTest = append(subIDsForCancellingAfterTest, subIDs...)
subNativeTokenBalanceBeforeRequest := subscription.NativeBalance
// test and assert
_, randomWordsFulfilledEvent, err := vrfv2plus.RequestRandomnessAndWaitForFulfillment(
consumers[0],
vrfContracts.CoordinatorV2Plus,
vrfKey,
subID,
isNativeBilling,
configCopy.VRFv2Plus.General,
l,
0,
)
require.NoError(t, err, "error requesting randomness and waiting for fulfilment")
require.False(t, randomWordsFulfilledEvent.OnlyPremium)
require.Equal(t, isNativeBilling, randomWordsFulfilledEvent.NativePayment)
require.True(t, randomWordsFulfilledEvent.Success)
expectedSubBalanceWei := new(big.Int).Sub(subNativeTokenBalanceBeforeRequest, randomWordsFulfilledEvent.Payment)
subscription, err = vrfContracts.CoordinatorV2Plus.GetSubscription(testcontext.Get(t), subID)
require.NoError(t, err)
subBalanceAfterRequest := subscription.NativeBalance
require.Equal(t, expectedSubBalanceWei, subBalanceAfterRequest)
status, err := consumers[0].GetRequestStatus(testcontext.Get(t), randomWordsFulfilledEvent.RequestId)
require.NoError(t, err, "error getting rand request status")
require.True(t, status.Fulfilled)
l.Info().Bool("Fulfilment Status", status.Fulfilled).Msg("Random Words Request Fulfilment Status")
require.Equal(t, *testConfig.NumberOfWords, uint32(len(status.RandomWords)))
for _, w := range status.RandomWords {
l.Info().Str("Output", w.String()).Msg("Randomness fulfilled")
require.Equal(t, 1, w.Cmp(big.NewInt(0)), "Expected the VRF job give an answer bigger than 0")
}
})`
$DIR/integration-tests/smoke/vrfv2plus_test.go: `vrfcommon.LogSubDetails(l, subscription, subID.String(), vrfContracts.CoordinatorV2Plus)`
$DIR/integration-tests/smoke/vrfv2plus_test.go: `subIDsForCancellingAfterTest = append(subIDsForCancellingAfterTest, subIDs...)`
$DIR/integration-tests/smoke/vrfv2plus_test.go: `subscription, err = vrfContracts.CoordinatorV2Plus.GetSubscription(testcontext.Get(t), subID)`
$DIR/integration-tests/smoke/vrfv2plus_test.go: `l.Info().Bool("Fulfilment Status", status.Fulfilled).Msg("Random Words Request Fulfilment Status")`
$DIR/integration-tests/smoke/vrfv2plus_test.go: `l.Info().Str("Output", w.String()).Msg("Randomness fulfilled")`
$DIR/integration-tests/smoke/vrfv2plus_test.go: `t.Run("VRF Node waits block confirmation number specified by the consumer before sending fulfilment on-chain", func(t *testing.T) {
configCopy := config.MustCopy().(tc.TestConfig)
testConfig := configCopy.VRFv2Plus.General
var isNativeBilling = true
consumers, subIDs, err := vrfv2plus.SetupNewConsumersAndSubs(
testcontext.Get(t),
env,
chainID,
vrfContracts.CoordinatorV2Plus,
configCopy,
vrfContracts.LinkToken,
1,
1,
l,
)
require.NoError(t, err, "error setting up new consumers and subs")
subID := subIDs[0]
subscription, err := vrfContracts.CoordinatorV2Plus.GetSubscription(testcontext.Get(t), subID)
require.NoError(t, err, "error getting subscription information")
vrfcommon.LogSubDetails(l, subscription, subID.String(), vrfContracts.CoordinatorV2Plus)
subIDsForCancellingAfterTest = append(subIDsForCancellingAfterTest, subIDs...)
expectedBlockNumberWait := uint16(10)
testConfig.MinimumConfirmations = ptr.Ptr[uint16](expectedBlockNumberWait)
randomWordsRequestedEvent, randomWordsFulfilledEvent, err := vrfv2plus.RequestRandomnessAndWaitForFulfillment(
consumers[0],
vrfContracts.CoordinatorV2Plus,
vrfKey,
subID,
isNativeBilling,
testConfig,
l,
0,
)
require.NoError(t, err, "error requesting randomness and waiting for fulfilment")
// check that VRF node waited at least the number of blocks specified by the consumer in the rand request min confs field
blockNumberWait := randomWordsRequestedEvent.Raw.BlockNumber - randomWordsFulfilledEvent.Raw.BlockNumber
require.GreaterOrEqual(t, blockNumberWait, uint64(expectedBlockNumberWait))
status, err := consumers[0].GetRequestStatus(testcontext.Get(t), randomWordsFulfilledEvent.RequestId)
require.NoError(t, err, "error getting rand request status")
require.True(t, status.Fulfilled)
l.Info().Bool("Fulfilment Status", status.Fulfilled).Msg("Random Words Request Fulfilment Status")
})`
$DIR/integration-tests/smoke/vrfv2plus_test.go: `vrfcommon.LogSubDetails(l, subscription, subID.String(), vrfContracts.CoordinatorV2Plus)`
$DIR/integration-tests/smoke/vrfv2plus_test.go: `subIDsForCancellingAfterTest = append(subIDsForCancellingAfterTest, subIDs...)`
$DIR/integration-tests/smoke/vrfv2plus_test.go: `testConfig.MinimumConfirmations = ptr.Ptr[uint16](expectedBlockNumberWait)`
$DIR/integration-tests/smoke/vrfv2plus_test.go: `l.Info().Bool("Fulfilment Status", status.Fulfilled).Msg("Random Words Request Fulfilment Status")`
$DIR/integration-tests/smoke/vrfv2plus_test.go: `t.Run("CL Node VRF Job Runs", func(t *testing.T) {
configCopy := config.MustCopy().(tc.TestConfig)
var isNativeBilling = false
consumers, subIDsForRequestRandomness, err := vrfv2plus.SetupNewConsumersAndSubs(
testcontext.Get(t),
env,
chainID,
vrfContracts.CoordinatorV2Plus,
configCopy,
vrfContracts.LinkToken,
1,
1,
l,
)
require.NoError(t, err, "error setting up new consumers and subs")
subIDForRequestRandomness := subIDsForRequestRandomness[0]
subscription, err := vrfContracts.CoordinatorV2Plus.GetSubscription(testcontext.Get(t), subIDForRequestRandomness)
require.NoError(t, err, "error getting subscription information")
vrfcommon.LogSubDetails(l, subscription, subIDForRequestRandomness.String(), vrfContracts.CoordinatorV2Plus)
subIDsForCancellingAfterTest = append(subIDsForCancellingAfterTest, subIDsForRequestRandomness...)
jobRunsBeforeTest, err := nodeTypeToNodeMap[vrfcommon.VRF].CLNode.API.MustReadRunsByJob(nodeTypeToNodeMap[vrfcommon.VRF].Job.Data.ID)
require.NoError(t, err, "error reading job runs")
// test and assert
_, _, err = vrfv2plus.RequestRandomnessAndWaitForFulfillment(
consumers[0],
vrfContracts.CoordinatorV2Plus,
vrfKey,
subIDForRequestRandomness,
isNativeBilling,
configCopy.VRFv2Plus.General,
l,
0,
)
require.NoError(t, err, "error requesting randomness and waiting for fulfilment")
jobRuns, err := nodeTypeToNodeMap[vrfcommon.VRF].CLNode.API.MustReadRunsByJob(nodeTypeToNodeMap[vrfcommon.VRF].Job.Data.ID)
require.NoError(t, err, "error reading job runs")
require.Equal(t, len(jobRunsBeforeTest.Data)+1, len(jobRuns.Data))
})`
$DIR/integration-tests/smoke/vrfv2plus_test.go: `vrfcommon.LogSubDetails(l, subscription, subIDForRequestRandomness.String(), vrfContracts.CoordinatorV2Plus)`
$DIR/integration-tests/smoke/vrfv2plus_test.go: `subIDsForCancellingAfterTest = append(subIDsForCancellingAfterTest, subIDsForRequestRandomness...)`
$DIR/integration-tests/smoke/vrfv2plus_test.go: `_, _, err = vrfv2plus.RequestRandomnessAndWaitForFulfillment(
consumers[0],
vrfContracts.CoordinatorV2Plus,
vrfKey,
subIDForRequestRandomness,
isNativeBilling,
configCopy.VRFv2Plus.General,
l,
0,
)`
$DIR/integration-tests/smoke/vrfv2plus_test.go: `t.Run("Direct Funding", func(t *testing.T) {
configCopy := config.MustCopy().(tc.TestConfig)
wrapperContracts, wrapperSubID, err := vrfv2plus.SetupVRFV2PlusWrapperEnvironment(
testcontext.Get(t),
l,
env,
chainID,
&configCopy,
vrfContracts.LinkToken,
vrfContracts.MockETHLINKFeed,
vrfContracts.CoordinatorV2Plus,
vrfKey.KeyHash,
1,
)
require.NoError(t, err)
t.Run("Link Billing", func(t *testing.T) {
configCopy := config.MustCopy().(tc.TestConfig)
testConfig := configCopy.VRFv2Plus.General
var isNativeBilling = false
wrapperConsumerJuelsBalanceBeforeRequest, err := vrfContracts.LinkToken.BalanceOf(testcontext.Get(t), wrapperContracts.LoadTestConsumers[0].Address())
require.NoError(t, err, "error getting wrapper consumer balance")
wrapperSubscription, err := vrfContracts.CoordinatorV2Plus.GetSubscription(testcontext.Get(t), wrapperSubID)
require.NoError(t, err, "error getting subscription information")
subBalanceBeforeRequest := wrapperSubscription.Balance
randomWordsFulfilledEvent, err := vrfv2plus.DirectFundingRequestRandomnessAndWaitForFulfillment(
wrapperContracts.LoadTestConsumers[0],
vrfContracts.CoordinatorV2Plus,
vrfKey,
wrapperSubID,
isNativeBilling,
configCopy.VRFv2Plus.General,
l,
)
require.NoError(t, err, "error requesting randomness and waiting for fulfilment")
expectedSubBalanceJuels := new(big.Int).Sub(subBalanceBeforeRequest, randomWordsFulfilledEvent.Payment)
wrapperSubscription, err = vrfContracts.CoordinatorV2Plus.GetSubscription(testcontext.Get(t), wrapperSubID)
require.NoError(t, err, "error getting subscription information")
subBalanceAfterRequest := wrapperSubscription.Balance
require.Equal(t, expectedSubBalanceJuels, subBalanceAfterRequest)
consumerStatus, err := wrapperContracts.LoadTestConsumers[0].GetRequestStatus(testcontext.Get(t), randomWordsFulfilledEvent.RequestId)
require.NoError(t, err, "error getting rand request status")
require.True(t, consumerStatus.Fulfilled)
expectedWrapperConsumerJuelsBalance := new(big.Int).Sub(wrapperConsumerJuelsBalanceBeforeRequest, consumerStatus.Paid)
wrapperConsumerJuelsBalanceAfterRequest, err := vrfContracts.LinkToken.BalanceOf(testcontext.Get(t), wrapperContracts.LoadTestConsumers[0].Address())
require.NoError(t, err, "error getting wrapper consumer balance")
require.Equal(t, expectedWrapperConsumerJuelsBalance, wrapperConsumerJuelsBalanceAfterRequest)
//todo: uncomment when VRF-651 will be fixed
//require.Equal(t, 1, consumerStatus.Paid.Cmp(randomWordsFulfilledEvent.Payment), "Expected Consumer contract pay more than the Coordinator Sub")
vrfcommon.LogFulfillmentDetailsLinkBilling(l, wrapperConsumerJuelsBalanceBeforeRequest, wrapperConsumerJuelsBalanceAfterRequest, consumerStatus, randomWordsFulfilledEvent)
require.Equal(t, *testConfig.NumberOfWords, uint32(len(consumerStatus.RandomWords)))
for _, w := range consumerStatus.RandomWords {
l.Info().Str("Output", w.String()).Msg("Randomness fulfilled")
require.Equal(t, 1, w.Cmp(big.NewInt(0)), "Expected the VRF job give an answer bigger than 0")
}
})
t.Run("Native Billing", func(t *testing.T) {
configCopy := config.MustCopy().(tc.TestConfig)
testConfig := configCopy.VRFv2Plus.General
var isNativeBilling = true
wrapperConsumerBalanceBeforeRequestWei, err := sethClient.Client.BalanceAt(testcontext.Get(t), common.HexToAddress(wrapperContracts.LoadTestConsumers[0].Address()), nil)
require.NoError(t, err, "error getting wrapper consumer balance")
wrapperSubscription, err := vrfContracts.CoordinatorV2Plus.GetSubscription(testcontext.Get(t), wrapperSubID)
require.NoError(t, err, "error getting subscription information")
subBalanceBeforeRequest := wrapperSubscription.NativeBalance
randomWordsFulfilledEvent, err := vrfv2plus.DirectFundingRequestRandomnessAndWaitForFulfillment(
wrapperContracts.LoadTestConsumers[0],
vrfContracts.CoordinatorV2Plus,
vrfKey,
wrapperSubID,
isNativeBilling,
configCopy.VRFv2Plus.General,
l,
)
require.NoError(t, err, "error requesting randomness and waiting for fulfilment")
expectedSubBalanceWei := new(big.Int).Sub(subBalanceBeforeRequest, randomWordsFulfilledEvent.Payment)
wrapperSubscription, err = vrfContracts.CoordinatorV2Plus.GetSubscription(testcontext.Get(t), wrapperSubID)
require.NoError(t, err, "error getting subscription information")
subBalanceAfterRequest := wrapperSubscription.NativeBalance
require.Equal(t, expectedSubBalanceWei, subBalanceAfterRequest)
consumerStatus, err := wrapperContracts.LoadTestConsumers[0].GetRequestStatus(testcontext.Get(t), randomWordsFulfilledEvent.RequestId)
require.NoError(t, err, "error getting rand request status")
require.True(t, consumerStatus.Fulfilled)
expectedWrapperConsumerWeiBalance := new(big.Int).Sub(wrapperConsumerBalanceBeforeRequestWei, consumerStatus.Paid)
wrapperConsumerBalanceAfterRequestWei, err := sethClient.Client.BalanceAt(testcontext.Get(t), common.HexToAddress(wrapperContracts.LoadTestConsumers[0].Address()), nil)
require.NoError(t, err, "error getting wrapper consumer balance")
require.Equal(t, expectedWrapperConsumerWeiBalance, wrapperConsumerBalanceAfterRequestWei)
//todo: uncomment when VRF-651 will be fixed
//require.Equal(t, 1, consumerStatus.Paid.Cmp(randomWordsFulfilledEvent.Payment), "Expected Consumer contract pay more than the Coordinator Sub")
vrfcommon.LogFulfillmentDetailsNativeBilling(l, wrapperConsumerBalanceBeforeRequestWei, wrapperConsumerBalanceAfterRequestWei, consumerStatus, randomWordsFulfilledEvent)
require.Equal(t, *testConfig.NumberOfWords, uint32(len(consumerStatus.RandomWords)))
for _, w := range consumerStatus.RandomWords {
l.Info().Str("Output", w.String()).Msg("Randomness fulfilled")
require.Equal(t, 1, w.Cmp(big.NewInt(0)), "Expected the VRF job give an answer bigger than 0")
}
})
})`
$DIR/integration-tests/smoke/vrfv2plus_test.go: `t.Run("Link Billing", func(t *testing.T) {
configCopy := config.MustCopy().(tc.TestConfig)
testConfig := configCopy.VRFv2Plus.General
var isNativeBilling = false
wrapperConsumerJuelsBalanceBeforeRequest, err := vrfContracts.LinkToken.BalanceOf(testcontext.Get(t), wrapperContracts.LoadTestConsumers[0].Address())
require.NoError(t, err, "error getting wrapper consumer balance")
wrapperSubscription, err := vrfContracts.CoordinatorV2Plus.GetSubscription(testcontext.Get(t), wrapperSubID)
require.NoError(t, err, "error getting subscription information")
subBalanceBeforeRequest := wrapperSubscription.Balance
randomWordsFulfilledEvent, err := vrfv2plus.DirectFundingRequestRandomnessAndWaitForFulfillment(
wrapperContracts.LoadTestConsumers[0],
vrfContracts.CoordinatorV2Plus,
vrfKey,
wrapperSubID,
isNativeBilling,
configCopy.VRFv2Plus.General,
l,
)
require.NoError(t, err, "error requesting randomness and waiting for fulfilment")
expectedSubBalanceJuels := new(big.Int).Sub(subBalanceBeforeRequest, randomWordsFulfilledEvent.Payment)
wrapperSubscription, err = vrfContracts.CoordinatorV2Plus.GetSubscription(testcontext.Get(t), wrapperSubID)
require.NoError(t, err, "error getting subscription information")
subBalanceAfterRequest := wrapperSubscription.Balance
require.Equal(t, expectedSubBalanceJuels, subBalanceAfterRequest)
consumerStatus, err := wrapperContracts.LoadTestConsumers[0].GetRequestStatus(testcontext.Get(t), randomWordsFulfilledEvent.RequestId)
require.NoError(t, err, "error getting rand request status")
require.True(t, consumerStatus.Fulfilled)
expectedWrapperConsumerJuelsBalance := new(big.Int).Sub(wrapperConsumerJuelsBalanceBeforeRequest, consumerStatus.Paid)
wrapperConsumerJuelsBalanceAfterRequest, err := vrfContracts.LinkToken.BalanceOf(testcontext.Get(t), wrapperContracts.LoadTestConsumers[0].Address())
require.NoError(t, err, "error getting wrapper consumer balance")
require.Equal(t, expectedWrapperConsumerJuelsBalance, wrapperConsumerJuelsBalanceAfterRequest)
//todo: uncomment when VRF-651 will be fixed
//require.Equal(t, 1, consumerStatus.Paid.Cmp(randomWordsFulfilledEvent.Payment), "Expected Consumer contract pay more than the Coordinator Sub")
vrfcommon.LogFulfillmentDetailsLinkBilling(l, wrapperConsumerJuelsBalanceBeforeRequest, wrapperConsumerJuelsBalanceAfterRequest, consumerStatus, randomWordsFulfilledEvent)
require.Equal(t, *testConfig.NumberOfWords, uint32(len(consumerStatus.RandomWords)))
for _, w := range consumerStatus.RandomWords {
l.Info().Str("Output", w.String()).Msg("Randomness fulfilled")
require.Equal(t, 1, w.Cmp(big.NewInt(0)), "Expected the VRF job give an answer bigger than 0")
}
})`
$DIR/integration-tests/smoke/vrfv2plus_test.go: `wrapperSubscription, err = vrfContracts.CoordinatorV2Plus.GetSubscription(testcontext.Get(t), wrapperSubID)`
$DIR/integration-tests/smoke/vrfv2plus_test.go: `vrfcommon.LogFulfillmentDetailsLinkBilling(l, wrapperConsumerJuelsBalanceBeforeRequest, wrapperConsumerJuelsBalanceAfterRequest, consumerStatus, randomWordsFulfilledEvent)`
$DIR/integration-tests/smoke/vrfv2plus_test.go: `l.Info().Str("Output", w.String()).Msg("Randomness fulfilled")`
$DIR/integration-tests/smoke/vrfv2plus_test.go: `t.Run("Native Billing", func(t *testing.T) {
configCopy := config.MustCopy().(tc.TestConfig)
testConfig := configCopy.VRFv2Plus.General
var isNativeBilling = true
wrapperConsumerBalanceBeforeRequestWei, err := sethClient.Client.BalanceAt(testcontext.Get(t), common.HexToAddress(wrapperContracts.LoadTestConsumers[0].Address()), nil)
require.NoError(t, err, "error getting wrapper consumer balance")
wrapperSubscription, err := vrfContracts.CoordinatorV2Plus.GetSubscription(testcontext.Get(t), wrapperSubID)
require.NoError(t, err, "error getting subscription information")
subBalanceBeforeRequest := wrapperSubscription.NativeBalance
randomWordsFulfilledEvent, err := vrfv2plus.DirectFundingRequestRandomnessAndWaitForFulfillment(
wrapperContracts.LoadTestConsumers[0],
vrfContracts.CoordinatorV2Plus,
vrfKey,
wrapperSubID,
isNativeBilling,
configCopy.VRFv2Plus.General,
l,
)
require.NoError(t, err, "error requesting randomness and waiting for fulfilment")
expectedSubBalanceWei := new(big.Int).Sub(subBalanceBeforeRequest, randomWordsFulfilledEvent.Payment)
wrapperSubscription, err = vrfContracts.CoordinatorV2Plus.GetSubscription(testcontext.Get(t), wrapperSubID)
require.NoError(t, err, "error getting subscription information")
subBalanceAfterRequest := wrapperSubscription.NativeBalance
require.Equal(t, expectedSubBalanceWei, subBalanceAfterRequest)
consumerStatus, err := wrapperContracts.LoadTestConsumers[0].GetRequestStatus(testcontext.Get(t), randomWordsFulfilledEvent.RequestId)
require.NoError(t, err, "error getting rand request status")
require.True(t, consumerStatus.Fulfilled)
expectedWrapperConsumerWeiBalance := new(big.Int).Sub(wrapperConsumerBalanceBeforeRequestWei, consumerStatus.Paid)
wrapperConsumerBalanceAfterRequestWei, err := sethClient.Client.BalanceAt(testcontext.Get(t), common.HexToAddress(wrapperContracts.LoadTestConsumers[0].Address()), nil)
require.NoError(t, err, "error getting wrapper consumer balance")
require.Equal(t, expectedWrapperConsumerWeiBalance, wrapperConsumerBalanceAfterRequestWei)
//todo: uncomment when VRF-651 will be fixed
//require.Equal(t, 1, consumerStatus.Paid.Cmp(randomWordsFulfilledEvent.Payment), "Expected Consumer contract pay more than the Coordinator Sub")
vrfcommon.LogFulfillmentDetailsNativeBilling(l, wrapperConsumerBalanceBeforeRequestWei, wrapperConsumerBalanceAfterRequestWei, consumerStatus, randomWordsFulfilledEvent)
require.Equal(t, *testConfig.NumberOfWords, uint32(len(consumerStatus.RandomWords)))
for _, w := range consumerStatus.RandomWords {
l.Info().Str("Output", w.String()).Msg("Randomness fulfilled")
require.Equal(t, 1, w.Cmp(big.NewInt(0)), "Expected the VRF job give an answer bigger than 0")
}
})`
$DIR/integration-tests/smoke/vrfv2plus_test.go: `wrapperSubscription, err = vrfContracts.CoordinatorV2Plus.GetSubscription(testcontext.Get(t), wrapperSubID)`
$DIR/integration-tests/smoke/vrfv2plus_test.go: `vrfcommon.LogFulfillmentDetailsNativeBilling(l, wrapperConsumerBalanceBeforeRequestWei, wrapperConsumerBalanceAfterRequestWei, consumerStatus, randomWordsFulfilledEvent)`
$DIR/integration-tests/smoke/vrfv2plus_test.go: `l.Info().Str("Output", w.String()).Msg("Randomness fulfilled")`
$DIR/integration-tests/smoke/vrfv2plus_test.go: `t.Run("Canceling Sub And Returning Funds", func(t *testing.T) {
configCopy := config.MustCopy().(tc.TestConfig)
_, subIDs, err := vrfv2plus.SetupNewConsumersAndSubs(
testcontext.Get(t),
env,
chainID,
vrfContracts.CoordinatorV2Plus,
configCopy,
vrfContracts.LinkToken,
1,
1,
l,
)
require.NoError(t, err, "error setting up new consumers and subs")
subID := subIDs[0]
subscription, err := vrfContracts.CoordinatorV2Plus.GetSubscription(testcontext.Get(t), subID)
require.NoError(t, err, "error getting subscription information")
vrfcommon.LogSubDetails(l, subscription, subID.String(), vrfContracts.CoordinatorV2Plus)
subIDsForCancellingAfterTest = append(subIDsForCancellingAfterTest, subIDs...)
testWalletAddress, err := actions.GenerateWallet()
require.NoError(t, err)
testWalletBalanceNativeBeforeSubCancelling, err := sethClient.Client.BalanceAt(testcontext.Get(t), testWalletAddress, nil)
require.NoError(t, err)
testWalletBalanceLinkBeforeSubCancelling, err := vrfContracts.LinkToken.BalanceOf(testcontext.Get(t), testWalletAddress.String())
require.NoError(t, err)
subscriptionForCancelling, err := vrfContracts.CoordinatorV2Plus.GetSubscription(testcontext.Get(t), subID)
require.NoError(t, err, "error getting subscription information")
subBalanceLink := subscriptionForCancelling.Balance
subBalanceNative := subscriptionForCancelling.NativeBalance
l.Info().
Str("Subscription Amount Native", subBalanceNative.String()).
Str("Subscription Amount Link", subBalanceLink.String()).
Str("Returning funds from SubID", subID.String()).
Str("Returning funds to", testWalletAddress.String()).
Msg("Canceling subscription and returning funds to subscription owner")
cancellationTx, cancellationEvent, err := vrfContracts.CoordinatorV2Plus.CancelSubscription(subID, testWalletAddress)
require.NoError(t, err, "Error canceling subscription")
txGasUsed := new(big.Int).SetUint64(cancellationTx.Receipt.GasUsed)
// we don't have that information for older Geth versions
if cancellationTx.Receipt.EffectiveGasPrice == nil {
cancellationTx.Receipt.EffectiveGasPrice = new(big.Int).SetUint64(0)
}
cancellationTxFeeWei := new(big.Int).Mul(txGasUsed, cancellationTx.Receipt.EffectiveGasPrice)
l.Info().
Str("Cancellation Tx Fee Wei", cancellationTxFeeWei.String()).
Str("Effective Gas Price", cancellationTx.Receipt.EffectiveGasPrice.String()).
Uint64("Gas Used", cancellationTx.Receipt.GasUsed).
Msg("Cancellation TX Receipt")
l.Info().
Str("Returned Subscription Amount Native", cancellationEvent.AmountLink.String()).
Str("Returned Subscription Amount Link", cancellationEvent.AmountLink.String()).
Str("SubID", cancellationEvent.SubId.String()).
Str("Returned to", cancellationEvent.To.String()).
Msg("Subscription Canceled Event")
require.Equal(t, subBalanceNative, cancellationEvent.AmountNative, "SubscriptionCanceled event native amount is not equal to sub amount while canceling subscription")
require.Equal(t, subBalanceLink, cancellationEvent.AmountLink, "SubscriptionCanceled event LINK amount is not equal to sub amount while canceling subscription")
testWalletBalanceNativeAfterSubCancelling, err := sethClient.Client.BalanceAt(testcontext.Get(t), testWalletAddress, nil)
require.NoError(t, err)
testWalletBalanceLinkAfterSubCancelling, err := vrfContracts.LinkToken.BalanceOf(testcontext.Get(t), testWalletAddress.String())
require.NoError(t, err)
//Verify that sub was deleted from Coordinator
_, err = vrfContracts.CoordinatorV2Plus.GetSubscription(testcontext.Get(t), subID)
require.Error(t, err, "error not occurred when trying to get deleted subscription from old Coordinator after sub migration")
subFundsReturnedNativeActual := new(big.Int).Sub(testWalletBalanceNativeAfterSubCancelling, testWalletBalanceNativeBeforeSubCancelling)
subFundsReturnedLinkActual := new(big.Int).Sub(testWalletBalanceLinkAfterSubCancelling, testWalletBalanceLinkBeforeSubCancelling)
subFundsReturnedNativeExpected := new(big.Int).Sub(subBalanceNative, cancellationTxFeeWei)
deltaSpentOnCancellationTxFee := new(big.Int).Sub(subBalanceNative, subFundsReturnedNativeActual)
l.Info().
Str("Sub Balance - Native", subBalanceNative.String()).
Str("Delta Spent On Cancellation Tx Fee - `NativeBalance - subFundsReturnedNativeActual`", deltaSpentOnCancellationTxFee.String()).
Str("Cancellation Tx Fee Wei", cancellationTxFeeWei.String()).
Str("Sub Funds Returned Actual - Native", subFundsReturnedNativeActual.String()).
Str("Sub Funds Returned Expected - `NativeBalance - cancellationTxFeeWei`", subFundsReturnedNativeExpected.String()).
Str("Sub Funds Returned Actual - Link", subFundsReturnedLinkActual.String()).
Str("Sub Balance - Link", subBalanceLink.String()).
Msg("Sub funds returned")
//todo - this fails on SIMULATED env as tx cost is calculated different as for testnets and it's not receipt.EffectiveGasPrice*receipt.GasUsed
//require.Equal(t, subFundsReturnedNativeExpected, subFundsReturnedNativeActual, "Returned funds are not equal to sub balance that was cancelled")
require.Equal(t, 1, testWalletBalanceNativeAfterSubCancelling.Cmp(testWalletBalanceNativeBeforeSubCancelling), "Native funds were not returned after sub cancellation")
require.Equal(t, 0, subBalanceLink.Cmp(subFundsReturnedLinkActual), "Returned LINK funds are not equal to sub balance that was cancelled")
})`
$DIR/integration-tests/smoke/vrfv2plus_test.go: `vrfcommon.LogSubDetails(l, subscription, subID.String(), vrfContracts.CoordinatorV2Plus)`
$DIR/integration-tests/smoke/vrfv2plus_test.go: `subIDsForCancellingAfterTest = append(subIDsForCancellingAfterTest, subIDs...)`
$DIR/integration-tests/smoke/vrfv2plus_test.go: `l.Info().
Str("Subscription Amount Native", subBalanceNative.String()).
Str("Subscription Amount Link", subBalanceLink.String()).
Str("Returning funds from SubID", subID.String()).
Str("Returning funds to", testWalletAddress.String()).
Msg("Canceling subscription and returning funds to subscription owner")`
$DIR/integration-tests/smoke/vrfv2plus_test.go: `cancellationTx.Receipt.EffectiveGasPrice = new(big.Int).SetUint64(0)`
$DIR/integration-tests/smoke/vrfv2plus_test.go: `l.Info().
Str("Cancellation Tx Fee Wei", cancellationTxFeeWei.String()).
Str("Effective Gas Price", cancellationTx.Receipt.EffectiveGasPrice.String()).
Uint64("Gas Used", cancellationTx.Receipt.GasUsed).
Msg("Cancellation TX Receipt")`
$DIR/integration-tests/smoke/vrfv2plus_test.go: `l.Info().
Str("Returned Subscription Amount Native", cancellationEvent.AmountLink.String()).
Str("Returned Subscription Amount Link", cancellationEvent.AmountLink.String()).
Str("SubID", cancellationEvent.SubId.String()).
Str("Returned to", cancellationEvent.To.String()).
Msg("Subscription Canceled Event")`
$DIR/integration-tests/smoke/vrfv2plus_test.go: `_, err = vrfContracts.CoordinatorV2Plus.GetSubscription(testcontext.Get(t), subID)`
$DIR/integration-tests/smoke/vrfv2plus_test.go: `l.Info().
Str("Sub Balance - Native", subBalanceNative.String()).
Str("Delta Spent On Cancellation Tx Fee - `NativeBalance - subFundsReturnedNativeActual`", deltaSpentOnCancellationTxFee.String()).
Str("Cancellation Tx Fee Wei", cancellationTxFeeWei.String()).
Str("Sub Funds Returned Actual - Native", subFundsReturnedNativeActual.String()).
Str("Sub Funds Returned Expected - `NativeBalance - cancellationTxFeeWei`", subFundsReturnedNativeExpected.String()).
Str("Sub Funds Returned Actual - Link", subFundsReturnedLinkActual.String()).
Str("Sub Balance - Link", subBalanceLink.String()).
Msg("Sub funds returned")`
$DIR/integration-tests/smoke/vrfv2plus_test.go: `t.Run("Owner Canceling Sub And Returning Funds While Having Pending Requests", func(t *testing.T) {
configCopy := config.MustCopy().(tc.TestConfig)
testConfig := configCopy.VRFv2Plus.General
//underfund subs in order rand fulfillments to fail
testConfig.SubscriptionFundingAmountNative = ptr.Ptr(float64(0))
testConfig.SubscriptionFundingAmountLink = ptr.Ptr(float64(0))
consumers, subIDs, err := vrfv2plus.SetupNewConsumersAndSubs(
testcontext.Get(t),
env,
chainID,
vrfContracts.CoordinatorV2Plus,
configCopy,
vrfContracts.LinkToken,
1,
1,
l,
)
require.NoError(t, err, "error setting up new consumers and subs")
subID := subIDs[0]
subscription, err := vrfContracts.CoordinatorV2Plus.GetSubscription(testcontext.Get(t), subID)
require.NoError(t, err, "error getting subscription information")
vrfcommon.LogSubDetails(l, subscription, subID.String(), vrfContracts.CoordinatorV2Plus)
subIDsForCancellingAfterTest = append(subIDsForCancellingAfterTest, subIDs...)
activeSubscriptionIdsBeforeSubCancellation, err := vrfContracts.CoordinatorV2Plus.GetActiveSubscriptionIds(testcontext.Get(t), big.NewInt(0), big.NewInt(0))
require.NoError(t, err)
require.True(t, it_utils.BigIntSliceContains(activeSubscriptionIdsBeforeSubCancellation, subID))
pendingRequestsExist, err := vrfContracts.CoordinatorV2Plus.PendingRequestsExist(testcontext.Get(t), subID)
require.NoError(t, err)
require.False(t, pendingRequestsExist, "Pending requests should not exist")
configCopy.VRFv2Plus.General.RandomWordsFulfilledEventTimeout = ptr.Ptr(blockchain.StrDuration{Duration: 5 * time.Second})
_, _, err = vrfv2plus.RequestRandomnessAndWaitForFulfillment(
consumers[0],
vrfContracts.CoordinatorV2Plus,
vrfKey,
subID,
false,
configCopy.VRFv2Plus.General,
l,
0,
)
require.Error(t, err, "error should occur for waiting for fulfilment due to low sub balance")
_, _, err = vrfv2plus.RequestRandomnessAndWaitForFulfillment(
consumers[0],
vrfContracts.CoordinatorV2Plus,
vrfKey,
subID,
true,
configCopy.VRFv2Plus.General,
l,
0,
)
require.Error(t, err, "error should occur for waiting for fulfilment due to low sub balance")
pendingRequestsExist, err = vrfContracts.CoordinatorV2Plus.PendingRequestsExist(testcontext.Get(t), subID)
require.NoError(t, err)
require.True(t, pendingRequestsExist, "Pending requests should exist after unfulfilled rand requests due to low sub balance")
walletBalanceNativeBeforeSubCancelling, err := sethClient.Client.BalanceAt(testcontext.Get(t), common.HexToAddress(sethClient.MustGetRootKeyAddress().Hex()), nil)
require.NoError(t, err)
walletBalanceLinkBeforeSubCancelling, err := vrfContracts.LinkToken.BalanceOf(testcontext.Get(t), sethClient.MustGetRootKeyAddress().Hex())
require.NoError(t, err)
subscriptionForCancelling, err := vrfContracts.CoordinatorV2Plus.GetSubscription(testcontext.Get(t), subID)
require.NoError(t, err, "error getting subscription information")
subBalanceLink := subscriptionForCancelling.Balance
subBalanceNative := subscriptionForCancelling.NativeBalance
l.Info().
Str("Subscription Amount Native", subBalanceNative.String()).
Str("Subscription Amount Link", subBalanceLink.String()).
Str("Returning funds from SubID", subID.String()).
Str("Returning funds to", sethClient.MustGetRootKeyAddress().Hex()).
Msg("Canceling subscription and returning funds to subscription owner")
cancellationTx, cancellationEvent, err := vrfContracts.CoordinatorV2Plus.OwnerCancelSubscription(subID)
require.NoError(t, err, "Error canceling subscription")
txGasUsed := new(big.Int).SetUint64(cancellationTx.Receipt.GasUsed)
// we don't have that information for older Geth versions
if cancellationTx.Receipt.EffectiveGasPrice == nil {
cancellationTx.Receipt.EffectiveGasPrice = new(big.Int).SetUint64(0)
}
cancellationTxFeeWei := new(big.Int).Mul(txGasUsed, cancellationTx.Receipt.EffectiveGasPrice)
l.Info().
Str("Cancellation Tx Fee Wei", cancellationTxFeeWei.String()).
Str("Effective Gas Price", cancellationTx.Receipt.EffectiveGasPrice.String()).
Uint64("Gas Used", cancellationTx.Receipt.GasUsed).
Msg("Cancellation TX Receipt")
l.Info().
Str("Returned Subscription Amount Native", cancellationEvent.AmountNative.String()).
Str("Returned Subscription Amount Link", cancellationEvent.AmountLink.String()).
Str("SubID", cancellationEvent.SubId.String()).
Str("Returned to", cancellationEvent.To.String()).
Msg("Subscription Canceled Event")
require.Equal(t, subBalanceNative, cancellationEvent.AmountNative, "SubscriptionCanceled event native amount is not equal to sub amount while canceling subscription")
require.Equal(t, subBalanceLink, cancellationEvent.AmountLink, "SubscriptionCanceled event LINK amount is not equal to sub amount while canceling subscription")
walletBalanceNativeAfterSubCancelling, err := sethClient.Client.BalanceAt(testcontext.Get(t), common.HexToAddress(sethClient.MustGetRootKeyAddress().Hex()), nil)
require.NoError(t, err)
walletBalanceLinkAfterSubCancelling, err := vrfContracts.LinkToken.BalanceOf(testcontext.Get(t), sethClient.MustGetRootKeyAddress().Hex())
require.NoError(t, err)
//Verify that sub was deleted from Coordinator
_, err = vrfContracts.CoordinatorV2Plus.GetSubscription(testcontext.Get(t), subID)
require.Error(t, err, "error not occurred when trying to get deleted subscription from old Coordinator after sub migration")
subFundsReturnedNativeActual := new(big.Int).Sub(walletBalanceNativeAfterSubCancelling, walletBalanceNativeBeforeSubCancelling)
subFundsReturnedLinkActual := new(big.Int).Sub(walletBalanceLinkAfterSubCancelling, walletBalanceLinkBeforeSubCancelling)
subFundsReturnedNativeExpected := new(big.Int).Sub(subBalanceNative, cancellationTxFeeWei)
deltaSpentOnCancellationTxFee := new(big.Int).Sub(subBalanceNative, subFundsReturnedNativeActual)
l.Info().
Str("Sub Balance - Native", subBalanceNative.String()).
Str("Delta Spent On Cancellation Tx Fee - `NativeBalance - subFundsReturnedNativeActual`", deltaSpentOnCancellationTxFee.String()).
Str("Cancellation Tx Fee Wei", cancellationTxFeeWei.String()).
Str("Sub Funds Returned Actual - Native", subFundsReturnedNativeActual.String()).
Str("Sub Funds Returned Expected - `NativeBalance - cancellationTxFeeWei`", subFundsReturnedNativeExpected.String()).
Str("Sub Funds Returned Actual - Link", subFundsReturnedLinkActual.String()).
Str("Sub Balance - Link", subBalanceLink.String()).
Str("walletBalanceNativeBeforeSubCancelling", walletBalanceNativeBeforeSubCancelling.String()).
Str("walletBalanceNativeAfterSubCancelling", walletBalanceNativeAfterSubCancelling.String()).
Msg("Sub funds returned")
//todo - need to use different wallet for each test to verify exact amount of Native/LINK returned
//todo - as defaultWallet is used in other tests in parallel which might affect the balance - TT-684
//require.Equal(t, 1, walletBalanceNativeAfterSubCancelling.Cmp(walletBalanceNativeBeforeSubCancelling), "Native funds were not returned after sub cancellation")
//todo - this fails on SIMULATED env as tx cost is calculated different as for testnets and it's not receipt.EffectiveGasPrice*receipt.GasUsed
//require.Equal(t, subFundsReturnedNativeExpected, subFundsReturnedNativeActual, "Returned funds are not equal to sub balance that was cancelled")
require.Equal(t, 0, subBalanceLink.Cmp(subFundsReturnedLinkActual), "Returned LINK funds are not equal to sub balance that was cancelled")
activeSubscriptionIdsAfterSubCancellation, err := vrfContracts.CoordinatorV2Plus.GetActiveSubscriptionIds(testcontext.Get(t), big.NewInt(0), big.NewInt(0))
require.NoError(t, err, "error getting active subscription ids")
require.False(
t,
it_utils.BigIntSliceContains(activeSubscriptionIdsAfterSubCancellation, subID),
"Active subscription ids should not contain sub id after sub cancellation",
)
})`
$DIR/integration-tests/smoke/vrfv2plus_test.go: `testConfig.SubscriptionFundingAmountNative = ptr.Ptr(float64(0))`
$DIR/integration-tests/smoke/vrfv2plus_test.go: `testConfig.SubscriptionFundingAmountLink = ptr.Ptr(float64(0))`
$DIR/integration-tests/smoke/vrfv2plus_test.go: `vrfcommon.LogSubDetails(l, subscription, subID.String(), vrfContracts.CoordinatorV2Plus)`
$DIR/integration-tests/smoke/vrfv2plus_test.go: `subIDsForCancellingAfterTest = append(subIDsForCancellingAfterTest, subIDs...)`
$DIR/integration-tests/smoke/vrfv2plus_test.go: `configCopy.VRFv2Plus.General.RandomWordsFulfilledEventTimeout = ptr.Ptr(blockchain.StrDuration{Duration: 5 * time.Second})`
$DIR/integration-tests/smoke/vrfv2plus_test.go: `_, _, err = vrfv2plus.RequestRandomnessAndWaitForFulfillment(
consumers[0],
vrfContracts.CoordinatorV2Plus,
vrfKey,
subID,
false,
configCopy.VRFv2Plus.General,
l,
0,
)`
$DIR/integration-tests/smoke/vrfv2plus_test.go: `_, _, err = vrfv2plus.RequestRandomnessAndWaitForFulfillment(
consumers[0],
vrfContracts.CoordinatorV2Plus,
vrfKey,
subID,
true,
configCopy.VRFv2Plus.General,
l,
0,
)`
$DIR/integration-tests/smoke/vrfv2plus_test.go: `pendingRequestsExist, err = vrfContracts.CoordinatorV2Plus.PendingRequestsExist(testcontext.Get(t), subID)`
$DIR/integration-tests/smoke/vrfv2plus_test.go: `l.Info().
Str("Subscription Amount Native", subBalanceNative.String()).
Str("Subscription Amount Link", subBalanceLink.String()).
Str("Returning funds from SubID", subID.String()).
Str("Returning funds to", sethClient.MustGetRootKeyAddress().Hex()).
Msg("Canceling subscription and returning funds to subscription owner")`
$DIR/integration-tests/smoke/vrfv2plus_test.go: `cancellationTx.Receipt.EffectiveGasPrice = new(big.Int).SetUint64(0)`
$DIR/integration-tests/smoke/vrfv2plus_test.go: `l.Info().
Str("Cancellation Tx Fee Wei", cancellationTxFeeWei.String()).
Str("Effective Gas Price", cancellationTx.Receipt.EffectiveGasPrice.String()).
Uint64("Gas Used", cancellationTx.Receipt.GasUsed).
Msg("Cancellation TX Receipt")`
$DIR/integration-tests/smoke/vrfv2plus_test.go: `l.Info().
Str("Returned Subscription Amount Native", cancellationEvent.AmountNative.String()).
Str("Returned Subscription Amount Link", cancellationEvent.AmountLink.String()).
Str("SubID", cancellationEvent.SubId.String()).
Str("Returned to", cancellationEvent.To.String()).
Msg("Subscription Canceled Event")`
$DIR/integration-tests/smoke/vrfv2plus_test.go: `_, err = vrfContracts.CoordinatorV2Plus.GetSubscription(testcontext.Get(t), subID)`
$DIR/integration-tests/smoke/vrfv2plus_test.go: `l.Info().
Str("Sub Balance - Native", subBalanceNative.String()).
Str("Delta Spent On Cancellation Tx Fee - `NativeBalance - subFundsReturnedNativeActual`", deltaSpentOnCancellationTxFee.String()).
Str("Cancellation Tx Fee Wei", cancellationTxFeeWei.String()).
Str("Sub Funds Returned Actual - Native", subFundsReturnedNativeActual.String()).
Str("Sub Funds Returned Expected - `NativeBalance - cancellationTxFeeWei`", subFundsReturnedNativeExpected.String()).
Str("Sub Funds Returned Actual - Link", subFundsReturnedLinkActual.String()).
Str("Sub Balance - Link", subBalanceLink.String()).
Str("walletBalanceNativeBeforeSubCancelling", walletBalanceNativeBeforeSubCancelling.String()).
Str("walletBalanceNativeAfterSubCancelling", walletBalanceNativeAfterSubCancelling.String()).
Msg("Sub funds returned")`
$DIR/integration-tests/smoke/vrfv2plus_test.go: `vrfcommon.LogSubDetails(l, subscription, subID.String(), vrfContracts.CoordinatorV2Plus)`
$DIR/integration-tests/smoke/vrfv2plus_test.go: `subIDsForCancellingAfterTest = append(subIDsForCancellingAfterTest, subIDs...)`
$DIR/integration-tests/smoke/vrfv2plus_test.go: `l.Info().
Str("Returning to", sethClient.MustGetRootKeyAddress().Hex()).
Str("Amount", amountToWithdrawLink.String()).
Msg("Invoking Oracle Withdraw for LINK")`
$DIR/integration-tests/smoke/vrfv2plus_test.go: `err = vrfContracts.CoordinatorV2Plus.Withdraw(
common.HexToAddress(sethClient.MustGetRootKeyAddress().Hex()),
)`
$DIR/integration-tests/smoke/vrfv2plus_test.go: `l.Info().
Str("Returning to", sethClient.MustGetRootKeyAddress().Hex()).
Str("Amount", amountToWithdrawNative.String()).
Msg("Invoking Oracle Withdraw for Native")`
$DIR/integration-tests/smoke/vrfv2plus_test.go: `err = vrfContracts.CoordinatorV2Plus.WithdrawNative(
common.HexToAddress(sethClient.MustGetRootKeyAddress().Hex()),
)`
$DIR/integration-tests/smoke/vrfv2plus_test.go: `l.Info().
Str("Network Name", sethClient.Cfg.Network.Name).
Msg("Network is a simulated network. Skipping fund return for Coordinator Subscriptions.")`
$DIR/integration-tests/smoke/vrfv2plus_test.go: `vrfv2plus.CancelSubsAndReturnFunds(testcontext.Get(t), vrfContracts, sethClient.MustGetRootKeyAddress().Hex(), subIDsForCancellingAfterTest, l)`
$DIR/integration-tests/smoke/vrfv2plus_test.go: `env, vrfContracts, vrfKey, nodeTypeToNodeMap, err = vrfv2plus.SetupVRFV2PlusUniverse(testcontext.Get(t), t, vrfEnvConfig, newEnvConfig, l)`
$DIR/integration-tests/smoke/vrfv2plus_test.go: `vrfcommon.LogSubDetails(l, subscription, subID.String(), vrfContracts.CoordinatorV2Plus)`
$DIR/integration-tests/smoke/vrfv2plus_test.go: `subIDsForCancellingAfterTest = append(subIDsForCancellingAfterTest, subIDs...)`
$DIR/integration-tests/smoke/vrfv2plus_test.go: `fulfillmentTxFromAddresses = append(fulfillmentTxFromAddresses, fulfillmentTxFromAddress)`
$DIR/integration-tests/smoke/vrfv2plus_test.go: `txKeyAddresses = append(txKeyAddresses, txKey.Attributes.Address)`
$DIR/integration-tests/smoke/vrfv2plus_test.go: `l.Info().
Str("Network Name", sethClient.Cfg.Network.Name).
Msg("Network is a simulated network. Skipping fund return for Coordinator Subscriptions.")`
$DIR/integration-tests/smoke/vrfv2plus_test.go: `vrfv2plus.CancelSubsAndReturnFunds(testcontext.Get(t), vrfContracts, sethClient.MustGetRootKeyAddress().Hex(), subIDsForCancellingAfterTest, l)`
$DIR/integration-tests/smoke/vrfv2plus_test.go: `env, vrfContracts, vrfKey, nodeTypeToNodeMap, err = vrfv2plus.SetupVRFV2PlusUniverse(testcontext.Get(t), t, vrfEnvConfig, newEnvConfig, l)`
$DIR/integration-tests/smoke/vrfv2plus_test.go: `t.Run("Test migration of Subscription Billing subID", func(t *testing.T) {
configCopy := config.MustCopy().(tc.TestConfig)
consumers, subIDs, err := vrfv2plus.SetupNewConsumersAndSubs(
testcontext.Get(t),
env,
chainID,
vrfContracts.CoordinatorV2Plus,
configCopy,
vrfContracts.LinkToken,
2,
1,
l,
)
require.NoError(t, err, "error setting up new consumers and subs")
subID := subIDs[0]
subscription, err := vrfContracts.CoordinatorV2Plus.GetSubscription(testcontext.Get(t), subID)
require.NoError(t, err, "error getting subscription information")
vrfcommon.LogSubDetails(l, subscription, subID.String(), vrfContracts.CoordinatorV2Plus)
subIDsForCancellingAfterTest = append(subIDsForCancellingAfterTest, subIDs...)
activeSubIdsOldCoordinatorBeforeMigration, err := vrfContracts.CoordinatorV2Plus.GetActiveSubscriptionIds(testcontext.Get(t), big.NewInt(0), big.NewInt(0))
require.NoError(t, err, "error occurred getting active sub ids")
require.Len(t, activeSubIdsOldCoordinatorBeforeMigration, 1, "Active Sub Ids length is not equal to 1")
require.Equal(t, subID, activeSubIdsOldCoordinatorBeforeMigration[0])
oldSubscriptionBeforeMigration, err := vrfContracts.CoordinatorV2Plus.GetSubscription(testcontext.Get(t), subID)
require.NoError(t, err, "error getting subscription information")
//Migration Process
newCoordinator, err := contracts.DeployVRFCoordinatorV2PlusUpgradedVersion(sethClient, vrfContracts.BHS.Address())
require.NoError(t, err, "error deploying VRF CoordinatorV2PlusUpgradedVersion")
_, err = vrfv2plus.VRFV2PlusUpgradedVersionRegisterProvingKey(vrfKey.VRFKey, newCoordinator, uint64(assets.GWei(*configCopy.VRFv2Plus.General.CLNodeMaxGasPriceGWei).Int64()))
require.NoError(t, err, fmt.Errorf("%s, err: %w", vrfcommon.ErrRegisteringProvingKey, err))
err = newCoordinator.SetConfig(
*configCopy.VRFv2Plus.General.MinimumConfirmations,
*configCopy.VRFv2Plus.General.MaxGasLimitCoordinatorConfig,
*configCopy.VRFv2Plus.General.StalenessSeconds,
*configCopy.VRFv2Plus.General.GasAfterPaymentCalculation,
big.NewInt(*configCopy.VRFv2Plus.General.LinkNativeFeedResponse),
*configCopy.VRFv2Plus.General.FulfillmentFlatFeeNativePPM,
*configCopy.VRFv2Plus.General.FulfillmentFlatFeeLinkDiscountPPM,
*configCopy.VRFv2Plus.General.NativePremiumPercentage,
*configCopy.VRFv2Plus.General.LinkPremiumPercentage,
)
require.NoError(t, err)
err = newCoordinator.SetLINKAndLINKNativeFeed(vrfContracts.LinkToken.Address(), vrfContracts.MockETHLINKFeed.Address())
require.NoError(t, err, vrfv2plus.ErrSetLinkNativeLinkFeed)
vrfJobSpecConfig := vrfcommon.VRFJobSpecConfig{
ForwardingAllowed: *configCopy.VRFv2Plus.General.VRFJobForwardingAllowed,
CoordinatorAddress: newCoordinator.Address(),
FromAddresses: nodeTypeToNodeMap[vrfcommon.VRF].TXKeyAddressStrings,
EVMChainID: fmt.Sprint(chainID),
MinIncomingConfirmations: int(*configCopy.VRFv2Plus.General.MinimumConfirmations),
PublicKey: vrfKey.VRFKey.Data.ID,
EstimateGasMultiplier: *configCopy.VRFv2Plus.General.VRFJobEstimateGasMultiplier,
BatchFulfillmentEnabled: false,
BatchFulfillmentGasMultiplier: *configCopy.VRFv2Plus.General.VRFJobBatchFulfillmentGasMultiplier,
PollPeriod: configCopy.VRFv2Plus.General.VRFJobPollPeriod.Duration,
RequestTimeout: configCopy.VRFv2Plus.General.VRFJobRequestTimeout.Duration,
SimulationBlock: configCopy.VRFv2Plus.General.VRFJobSimulationBlock,
}
_, err = vrfv2plus.CreateVRFV2PlusJob(
nodeTypeToNodeMap[vrfcommon.VRF].CLNode.API,
vrfJobSpecConfig,
)
require.NoError(t, err, vrfv2plus.ErrCreateVRFV2PlusJobs)
err = vrfContracts.CoordinatorV2Plus.RegisterMigratableCoordinator(newCoordinator.Address())
require.NoError(t, err, "error registering migratable coordinator")
oldCoordinatorLinkTotalBalanceBeforeMigration, oldCoordinatorEthTotalBalanceBeforeMigration, err := vrfv2plus.GetCoordinatorTotalBalance(vrfContracts.CoordinatorV2Plus)
require.NoError(t, err)
migratedCoordinatorLinkTotalBalanceBeforeMigration, migratedCoordinatorEthTotalBalanceBeforeMigration, err := vrfv2plus.GetUpgradedCoordinatorTotalBalance(newCoordinator)
require.NoError(t, err)
_, migrationCompletedEvent, err := vrfContracts.CoordinatorV2Plus.Migrate(subID, newCoordinator.Address())
require.NoError(t, err, "error migrating sub id ", subID.String(), " from ", vrfContracts.CoordinatorV2Plus.Address(), " to new Coordinator address ", newCoordinator.Address())
vrfv2plus.LogMigrationCompletedEvent(l, migrationCompletedEvent, vrfContracts.CoordinatorV2Plus)
oldCoordinatorLinkTotalBalanceAfterMigration, oldCoordinatorEthTotalBalanceAfterMigration, err := vrfv2plus.GetCoordinatorTotalBalance(vrfContracts.CoordinatorV2Plus)
require.NoError(t, err)
migratedCoordinatorLinkTotalBalanceAfterMigration, migratedCoordinatorEthTotalBalanceAfterMigration, err := vrfv2plus.GetUpgradedCoordinatorTotalBalance(newCoordinator)
require.NoError(t, err)
migratedSubscription, err := newCoordinator.GetSubscription(testcontext.Get(t), subID)
require.NoError(t, err, "error getting subscription information")
vrfv2plus.LogSubDetailsAfterMigration(l, newCoordinator, subID, migratedSubscription)
//Verify that Coordinators were updated in Consumers
for _, consumer := range consumers {
coordinatorAddressInConsumerAfterMigration, err := consumer.GetCoordinator(testcontext.Get(t))
require.NoError(t, err, "error getting Coordinator from Consumer contract")
require.Equal(t, newCoordinator.Address(), coordinatorAddressInConsumerAfterMigration.String())
l.Info().
Str("Consumer", consumer.Address()).
Str("Coordinator", coordinatorAddressInConsumerAfterMigration.String()).
Msg("Coordinator Address in Consumer After Migration")
}
//Verify old and migrated subs
require.Equal(t, oldSubscriptionBeforeMigration.NativeBalance, migratedSubscription.NativeBalance)
require.Equal(t, oldSubscriptionBeforeMigration.Balance, migratedSubscription.Balance)
require.Equal(t, oldSubscriptionBeforeMigration.SubOwner, migratedSubscription.SubOwner)
require.Equal(t, oldSubscriptionBeforeMigration.Consumers, migratedSubscription.Consumers)
//Verify that old sub was deleted from old Coordinator
_, err = vrfContracts.CoordinatorV2Plus.GetSubscription(testcontext.Get(t), subID)
require.Error(t, err, "error not occurred when trying to get deleted subscription from old Coordinator after sub migration")
_, err = vrfContracts.CoordinatorV2Plus.GetActiveSubscriptionIds(testcontext.Get(t), big.NewInt(0), big.NewInt(0))
// If (subscription billing), numActiveSub should be 0 after migration in oldCoordinator
require.Error(t, err, "error not occurred getting active sub ids. Should occur since it should revert when sub id array is empty")
activeSubIdsMigratedCoordinator, err := newCoordinator.GetActiveSubscriptionIds(testcontext.Get(t), big.NewInt(0), big.NewInt(0))
require.NoError(t, err, "error occurred getting active sub ids")
require.Len(t, activeSubIdsMigratedCoordinator, 1, "Active Sub Ids length is not equal to 1 for Migrated Coordinator after migration")
require.Equal(t, subID, activeSubIdsMigratedCoordinator[0])
//Verify that total balances changed for Link and Eth for new and old coordinator
expectedLinkTotalBalanceForMigratedCoordinator := new(big.Int).Add(oldSubscriptionBeforeMigration.Balance, migratedCoordinatorLinkTotalBalanceBeforeMigration)
expectedEthTotalBalanceForMigratedCoordinator := new(big.Int).Add(oldSubscriptionBeforeMigration.NativeBalance, migratedCoordinatorEthTotalBalanceBeforeMigration)
expectedLinkTotalBalanceForOldCoordinator := new(big.Int).Sub(oldCoordinatorLinkTotalBalanceBeforeMigration, oldSubscriptionBeforeMigration.Balance)
expectedEthTotalBalanceForOldCoordinator := new(big.Int).Sub(oldCoordinatorEthTotalBalanceBeforeMigration, oldSubscriptionBeforeMigration.NativeBalance)
require.Equal(t, 0, expectedLinkTotalBalanceForMigratedCoordinator.Cmp(migratedCoordinatorLinkTotalBalanceAfterMigration))
require.Equal(t, 0, expectedEthTotalBalanceForMigratedCoordinator.Cmp(migratedCoordinatorEthTotalBalanceAfterMigration))
require.Equal(t, 0, expectedLinkTotalBalanceForOldCoordinator.Cmp(oldCoordinatorLinkTotalBalanceAfterMigration))
require.Equal(t, 0, expectedEthTotalBalanceForOldCoordinator.Cmp(oldCoordinatorEthTotalBalanceAfterMigration))
//Verify rand requests fulfills with Link Token billing
_, _, err = vrfv2plus.RequestRandomnessAndWaitForFulfillment(
consumers[0],
newCoordinator,
vrfKey,
subID,
false,
configCopy.VRFv2Plus.General,
l,
0,
)
require.NoError(t, err, "error requesting randomness and waiting for fulfilment")
//Verify rand requests fulfills with Native Token billing
_, _, err = vrfv2plus.RequestRandomnessAndWaitForFulfillment(
consumers[1],
newCoordinator,
vrfKey,
subID,
true,
configCopy.VRFv2Plus.General,
l,
0,
)
require.NoError(t, err, "error requesting randomness and waiting for fulfilment")
})`
$DIR/integration-tests/smoke/vrfv2plus_test.go: `vrfcommon.LogSubDetails(l, subscription, subID.String(), vrfContracts.CoordinatorV2Plus)`
$DIR/integration-tests/smoke/vrfv2plus_test.go: `subIDsForCancellingAfterTest = append(subIDsForCancellingAfterTest, subIDs...)`
$DIR/integration-tests/smoke/vrfv2plus_test.go: `_, err = vrfv2plus.VRFV2PlusUpgradedVersionRegisterProvingKey(vrfKey.VRFKey, newCoordinator, uint64(assets.GWei(*configCopy.VRFv2Plus.General.CLNodeMaxGasPriceGWei).Int64()))`
$DIR/integration-tests/smoke/vrfv2plus_test.go: `err = newCoordinator.SetConfig(
*configCopy.VRFv2Plus.General.MinimumConfirmations,
*configCopy.VRFv2Plus.General.MaxGasLimitCoordinatorConfig,
*configCopy.VRFv2Plus.General.StalenessSeconds,
*configCopy.VRFv2Plus.General.GasAfterPaymentCalculation,
big.NewInt(*configCopy.VRFv2Plus.General.LinkNativeFeedResponse),
*configCopy.VRFv2Plus.General.FulfillmentFlatFeeNativePPM,
*configCopy.VRFv2Plus.General.FulfillmentFlatFeeLinkDiscountPPM,
*configCopy.VRFv2Plus.General.NativePremiumPercentage,
*configCopy.VRFv2Plus.General.LinkPremiumPercentage,
)`
$DIR/integration-tests/smoke/vrfv2plus_test.go: `err = newCoordinator.SetLINKAndLINKNativeFeed(vrfContracts.LinkToken.Address(), vrfContracts.MockETHLINKFeed.Address())`
$DIR/integration-tests/smoke/vrfv2plus_test.go: `_, err = vrfv2plus.CreateVRFV2PlusJob(
nodeTypeToNodeMap[vrfcommon.VRF].CLNode.API,
vrfJobSpecConfig,
)`
$DIR/integration-tests/smoke/vrfv2plus_test.go: `err = vrfContracts.CoordinatorV2Plus.RegisterMigratableCoordinator(newCoordinator.Address())`
$DIR/integration-tests/smoke/vrfv2plus_test.go: `vrfv2plus.LogMigrationCompletedEvent(l, migrationCompletedEvent, vrfContracts.CoordinatorV2Plus)`
$DIR/integration-tests/smoke/vrfv2plus_test.go: `vrfv2plus.LogSubDetailsAfterMigration(l, newCoordinator, subID, migratedSubscription)`
$DIR/integration-tests/smoke/vrfv2plus_test.go: `l.Info().
Str("Consumer", consumer.Address()).
Str("Coordinator", coordinatorAddressInConsumerAfterMigration.String()).
Msg("Coordinator Address in Consumer After Migration")`
$DIR/integration-tests/smoke/vrfv2plus_test.go: `_, err = vrfContracts.CoordinatorV2Plus.GetSubscription(testcontext.Get(t), subID)`
$DIR/integration-tests/smoke/vrfv2plus_test.go: `_, err = vrfContracts.CoordinatorV2Plus.GetActiveSubscriptionIds(testcontext.Get(t), big.NewInt(0), big.NewInt(0))`
$DIR/integration-tests/smoke/vrfv2plus_test.go: `_, _, err = vrfv2plus.RequestRandomnessAndWaitForFulfillment(
consumers[0],
newCoordinator,
vrfKey,
subID,
false,
configCopy.VRFv2Plus.General,
l,
0,
)`
$DIR/integration-tests/smoke/vrfv2plus_test.go: `_, _, err = vrfv2plus.RequestRandomnessAndWaitForFulfillment(
consumers[1],
newCoordinator,
vrfKey,
subID,
true,
configCopy.VRFv2Plus.General,
l,
0,
)`
$DIR/integration-tests/smoke/vrfv2plus_test.go: `vrfcommon.LogSubDetails(l, subscription, subID.String(), vrfContracts.CoordinatorV2Plus)`
$DIR/integration-tests/smoke/vrfv2plus_test.go: `_, err = vrfv2plus.VRFV2PlusUpgradedVersionRegisterProvingKey(vrfKey.VRFKey, newCoordinator, uint64(assets.GWei(*configCopy.VRFv2Plus.General.CLNodeMaxGasPriceGWei).Int64()))`
$DIR/integration-tests/smoke/vrfv2plus_test.go: `err = newCoordinator.SetConfig(
*configCopy.VRFv2Plus.General.MinimumConfirmations,
*configCopy.VRFv2Plus.General.MaxGasLimitCoordinatorConfig,
*configCopy.VRFv2Plus.General.StalenessSeconds,
*configCopy.VRFv2Plus.General.GasAfterPaymentCalculation,
big.NewInt(*configCopy.VRFv2Plus.General.LinkNativeFeedResponse),
*configCopy.VRFv2Plus.General.FulfillmentFlatFeeNativePPM,
*configCopy.VRFv2Plus.General.FulfillmentFlatFeeLinkDiscountPPM,
*configCopy.VRFv2Plus.General.NativePremiumPercentage,
*configCopy.VRFv2Plus.General.LinkPremiumPercentage,
)`
$DIR/integration-tests/smoke/vrfv2plus_test.go: `err = newCoordinator.SetLINKAndLINKNativeFeed(vrfContracts.LinkToken.Address(), vrfContracts.MockETHLINKFeed.Address())`
$DIR/integration-tests/smoke/vrfv2plus_test.go: `_, err = vrfv2plus.CreateVRFV2PlusJob(
nodeTypeToNodeMap[vrfcommon.VRF].CLNode.API,
vrfJobSpecConfig,
)`
$DIR/integration-tests/smoke/vrfv2plus_test.go: `err = vrfContracts.CoordinatorV2Plus.RegisterMigratableCoordinator(newCoordinator.Address())`
$DIR/integration-tests/smoke/vrfv2plus_test.go: `vrfv2plus.LogMigrationCompletedEvent(l, migrationCompletedEvent, vrfContracts.CoordinatorV2Plus)`
$DIR/integration-tests/smoke/vrfv2plus_test.go: `vrfv2plus.LogSubDetailsAfterMigration(l, newCoordinator, subID, migratedSubscription)`
$DIR/integration-tests/smoke/vrfv2plus_test.go: `l.Info().
Str("Consumer-VRFV2PlusWrapper", wrapperContracts.VRFV2PlusWrapper.Address()).
Str("Coordinator", coordinatorAddressInConsumerAfterMigration.String()).
Msg("Coordinator Address in VRFV2PlusWrapper After Migration")`
$DIR/integration-tests/smoke/vrfv2plus_test.go: `_, err = vrfContracts.CoordinatorV2Plus.GetSubscription(testcontext.Get(t), subID)`
$DIR/integration-tests/smoke/vrfv2plus_test.go: `_, err = vrfContracts.CoordinatorV2Plus.GetActiveSubscriptionIds(testcontext.Get(t), big.NewInt(0), big.NewInt(0))`
$DIR/integration-tests/smoke/vrfv2plus_test.go: `isNativeBilling = true`
$DIR/integration-tests/smoke/vrfv2plus_test.go: `randomWordsFulfilledEvent, err = vrfv2plus.DirectFundingRequestRandomnessAndWaitForFulfillment(
wrapperContracts.LoadTestConsumers[0],
newCoordinator,
vrfKey,
subID,
isNativeBilling,
configCopy.VRFv2Plus.General,
l,
)`
$DIR/integration-tests/smoke/vrfv2plus_test.go: `consumerStatus, err = wrapperContracts.LoadTestConsumers[0].GetRequestStatus(testcontext.Get(t), randomWordsFulfilledEvent.RequestId)`
$DIR/integration-tests/smoke/vrfv2plus_test.go: `l.Info().
Str("Network Name", sethClient.Cfg.Network.Name).
Msg("Network is a simulated network. Skipping fund return for Coordinator Subscriptions.")`
$DIR/integration-tests/smoke/vrfv2plus_test.go: `vrfv2plus.CancelSubsAndReturnFunds(testcontext.Get(t), vrfContracts, sethClient.MustGetRootKeyAddress().Hex(), subIDsForCancellingAfterTest, l)`
$DIR/integration-tests/smoke/vrfv2plus_test.go: `vrfv2PlusConfig.General.BHSJobWaitBlocks = ptr.Ptr(2)`
$DIR/integration-tests/smoke/vrfv2plus_test.go: `vrfv2PlusConfig.General.BHSJobLookBackBlocks = ptr.Ptr(20)`
$DIR/integration-tests/smoke/vrfv2plus_test.go: `env, vrfContracts, vrfKey, nodeTypeToNodeMap, err = vrfv2plus.SetupVRFV2PlusUniverse(testcontext.Get(t), t, vrfEnvConfig, newEnvConfig, l)`
$DIR/integration-tests/smoke/vrfv2plus_test.go: `t.Run("BHS Job with complete E2E - wait 256 blocks to see if Rand Request is fulfilled", func(t *testing.T) {
if os.Getenv("TEST_UNSKIP") != "true" {
t.Skip("Skipped due to long execution time. Should be run on-demand on live testnet with TEST_UNSKIP=\"true\".")
}
configCopy := config.MustCopy().(tc.TestConfig)
//Underfund Subscription
configCopy.VRFv2Plus.General.SubscriptionFundingAmountLink = ptr.Ptr(float64(0))
configCopy.VRFv2Plus.General.SubscriptionFundingAmountNative = ptr.Ptr(float64(0))
consumers, subIDs, err := vrfv2plus.SetupNewConsumersAndSubs(
testcontext.Get(t),
env,
chainID,
vrfContracts.CoordinatorV2Plus,
configCopy,
vrfContracts.LinkToken,
1,
1,
l,
)
require.NoError(t, err, "error setting up new consumers and subs")
subID := subIDs[0]
subscription, err := vrfContracts.CoordinatorV2Plus.GetSubscription(testcontext.Get(t), subID)
require.NoError(t, err, "error getting subscription information")
vrfcommon.LogSubDetails(l, subscription, subID.String(), vrfContracts.CoordinatorV2Plus)
subIDsForCancellingAfterTest = append(subIDsForCancellingAfterTest, subIDs...)
randomWordsRequestedEvent, err := vrfv2plus.RequestRandomness(
consumers[0],
vrfContracts.CoordinatorV2Plus,
vrfKey,
subID,
isNativeBilling,
configCopy.VRFv2Plus.General,
l,
0,
)
require.NoError(t, err, "error requesting randomness")
randRequestBlockNumber := randomWordsRequestedEvent.Raw.BlockNumber
var wg sync.WaitGroup
wg.Add(1)
//Wait at least 256 blocks
_, err = actions.WaitForBlockNumberToBe(
randRequestBlockNumber+uint64(257),
sethClient,
&wg,
configCopy.VRFv2Plus.General.WaitFor256BlocksTimeout.Duration,
t,
l,
)
wg.Wait()
require.NoError(t, err)
err = vrfv2plus.FundSubscriptions(
big.NewFloat(*configCopy.VRFv2Plus.General.SubscriptionRefundingAmountNative),
big.NewFloat(*configCopy.VRFv2Plus.General.SubscriptionRefundingAmountLink),
vrfContracts.LinkToken,
vrfContracts.CoordinatorV2Plus,
subIDs,
)
require.NoError(t, err, "error funding subscriptions")
randomWordsFulfilledEvent, err := vrfContracts.CoordinatorV2Plus.WaitForRandomWordsFulfilledEvent(
contracts.RandomWordsFulfilledEventFilter{
RequestIds: []*big.Int{randomWordsRequestedEvent.RequestId},
SubIDs: []*big.Int{subID},
Timeout: configCopy.VRFv2Plus.General.RandomWordsFulfilledEventTimeout.Duration,
},
)
require.NoError(t, err, "error waiting for randomness fulfilled event")
vrfcommon.LogRandomWordsFulfilledEvent(l, vrfContracts.CoordinatorV2Plus, randomWordsFulfilledEvent, isNativeBilling, 0)
status, err := consumers[0].GetRequestStatus(testcontext.Get(t), randomWordsFulfilledEvent.RequestId)
require.NoError(t, err, "error getting rand request status")
require.True(t, status.Fulfilled)
l.Info().Bool("Fulfilment Status", status.Fulfilled).Msg("Random Words Request Fulfilment Status")
randRequestBlockHash, err := vrfContracts.BHS.GetBlockHash(testcontext.Get(t), big.NewInt(int64(randRequestBlockNumber)))
require.NoError(t, err, "error getting blockhash for a blocknumber which was stored in BHS contract")
l.Info().
Str("Randomness Request's Blockhash", randomWordsRequestedEvent.Raw.BlockHash.String()).
Str("Block Hash stored by BHS contract", fmt.Sprintf("0x%x", randRequestBlockHash)).
Msg("BHS Contract's stored Blockhash for Randomness Request")
require.Equal(t, 0, randomWordsRequestedEvent.Raw.BlockHash.Cmp(randRequestBlockHash))
})`
$DIR/integration-tests/smoke/vrfv2plus_test.go: `configCopy.VRFv2Plus.General.SubscriptionFundingAmountLink = ptr.Ptr(float64(0))`
$DIR/integration-tests/smoke/vrfv2plus_test.go: `configCopy.VRFv2Plus.General.SubscriptionFundingAmountNative = ptr.Ptr(float64(0))`
$DIR/integration-tests/smoke/vrfv2plus_test.go: `vrfcommon.LogSubDetails(l, subscription, subID.String(), vrfContracts.CoordinatorV2Plus)`
$DIR/integration-tests/smoke/vrfv2plus_test.go: `subIDsForCancellingAfterTest = append(subIDsForCancellingAfterTest, subIDs...)`
$DIR/integration-tests/smoke/vrfv2plus_test.go: `wg.Add(1)`
$DIR/integration-tests/smoke/vrfv2plus_test.go: `_, err = actions.WaitForBlockNumberToBe(
randRequestBlockNumber+uint64(257),
sethClient,
&wg,
configCopy.VRFv2Plus.General.WaitFor256BlocksTimeout.Duration,
t,
l,
)`
$DIR/integration-tests/smoke/vrfv2plus_test.go: `wg.Wait()`
$DIR/integration-tests/smoke/vrfv2plus_test.go: `err = vrfv2plus.FundSubscriptions(
big.NewFloat(*configCopy.VRFv2Plus.General.SubscriptionRefundingAmountNative),
big.NewFloat(*configCopy.VRFv2Plus.General.SubscriptionRefundingAmountLink),
vrfContracts.LinkToken,
vrfContracts.CoordinatorV2Plus,
subIDs,
)`
$DIR/integration-tests/smoke/vrfv2plus_test.go: `vrfcommon.LogRandomWordsFulfilledEvent(l, vrfContracts.CoordinatorV2Plus, randomWordsFulfilledEvent, isNativeBilling, 0)`
$DIR/integration-tests/smoke/vrfv2plus_test.go: `l.Info().Bool("Fulfilment Status", status.Fulfilled).Msg("Random Words Request Fulfilment Status")`
$DIR/integration-tests/smoke/vrfv2plus_test.go: `l.Info().
Str("Randomness Request's Blockhash", randomWordsRequestedEvent.Raw.BlockHash.String()).
Str("Block Hash stored by BHS contract", fmt.Sprintf("0x%x", randRequestBlockHash)).
Msg("BHS Contract's stored Blockhash for Randomness Request")`
$DIR/integration-tests/smoke/vrfv2plus_test.go: `configCopy.VRFv2Plus.General.SubscriptionFundingAmountLink = ptr.Ptr(float64(0))`
$DIR/integration-tests/smoke/vrfv2plus_test.go: `configCopy.VRFv2Plus.General.SubscriptionFundingAmountNative = ptr.Ptr(float64(0))`
$DIR/integration-tests/smoke/vrfv2plus_test.go: `vrfcommon.LogSubDetails(l, subscription, subID.String(), vrfContracts.CoordinatorV2Plus)`
$DIR/integration-tests/smoke/vrfv2plus_test.go: `subIDsForCancellingAfterTest = append(subIDsForCancellingAfterTest, subIDs...)`
$DIR/integration-tests/smoke/vrfv2plus_test.go: `_, err = vrfContracts.BHS.GetBlockHash(testcontext.Get(t), big.NewInt(int64(randRequestBlockNumber)))`
$DIR/integration-tests/smoke/vrfv2plus_test.go: `wg.Add(1)`
$DIR/integration-tests/smoke/vrfv2plus_test.go: `_, err = actions.WaitForBlockNumberToBe(
randRequestBlockNumber+uint64(*configCopy.VRFv2Plus.General.BHSJobWaitBlocks+10),
sethClient,
&wg,
time.Minute*1,
t,
l,
)`
$DIR/integration-tests/smoke/vrfv2plus_test.go: `wg.Wait()`
$DIR/integration-tests/smoke/vrfv2plus_test.go: `gom.Eventually(func(g gomega.Gomega) {
clNodeTxs, _, err = nodeTypeToNodeMap[vrfcommon.BHS].CLNode.API.ReadTransactions()
g.Expect(err).ShouldNot(gomega.HaveOccurred(), "error getting CL Node transactions")
l.Info().Int("Number of TXs", len(clNodeTxs.Data)).Msg("BHS Node txs")
g.Expect(len(clNodeTxs.Data)).Should(gomega.BeNumerically("==", 1), "Expected 1 tx posted by BHS Node, but found %d", len(clNodeTxs.Data))
txHash = clNodeTxs.Data[0].Attributes.Hash
}, "2m", "1s").Should(gomega.Succeed())`
$DIR/integration-tests/smoke/vrfv2plus_test.go: `clNodeTxs, _, err = nodeTypeToNodeMap[vrfcommon.BHS].CLNode.API.ReadTransactions()`
$DIR/integration-tests/smoke/vrfv2plus_test.go: `g.Expect(err).ShouldNot(gomega.HaveOccurred(), "error getting CL Node transactions")`
$DIR/integration-tests/smoke/vrfv2plus_test.go: `l.Info().Int("Number of TXs", len(clNodeTxs.Data)).Msg("BHS Node txs")`
$DIR/integration-tests/smoke/vrfv2plus_test.go: `g.Expect(len(clNodeTxs.Data)).Should(gomega.BeNumerically("==", 1), "Expected 1 tx posted by BHS Node, but found %d", len(clNodeTxs.Data))`
$DIR/integration-tests/smoke/vrfv2plus_test.go: `txHash = clNodeTxs.Data[0].Attributes.Hash`
$DIR/integration-tests/smoke/vrfv2plus_test.go: `l.Info().
Str("Block Number", bhsStoreTxInputData["n"].(*big.Int).String()).
Msg("BHS Node's Store Blockhash for Blocknumber Method TX")`
$DIR/integration-tests/smoke/vrfv2plus_test.go: `gom.Eventually(func(g gomega.Gomega) {
randRequestBlockHash, err = vrfContracts.BHS.GetBlockHash(testcontext.Get(t), big.NewInt(int64(randRequestBlockNumber)))
g.Expect(err).ShouldNot(gomega.HaveOccurred(), "error getting blockhash for a blocknumber which was stored in BHS contract")
}, "2m", "1s").Should(gomega.Succeed())`
$DIR/integration-tests/smoke/vrfv2plus_test.go: `randRequestBlockHash, err = vrfContracts.BHS.GetBlockHash(testcontext.Get(t), big.NewInt(int64(randRequestBlockNumber)))`
$DIR/integration-tests/smoke/vrfv2plus_test.go: `g.Expect(err).ShouldNot(gomega.HaveOccurred(), "error getting blockhash for a blocknumber which was stored in BHS contract")`
$DIR/integration-tests/smoke/vrfv2plus_test.go: `l.Info().
Str("Randomness Request's Blockhash", randomWordsRequestedEvent.Raw.BlockHash.String()).
Str("Block Hash stored by BHS contract", fmt.Sprintf("0x%x", randRequestBlockHash)).
Msg("BHS Contract's stored Blockhash for Randomness Request")`
$DIR/integration-tests/smoke/vrfv2plus_test.go: `l.Info().
Str("Network Name", sethClient.Cfg.Network.Name).
Msg("Network is a simulated network. Skipping fund return for Coordinator Subscriptions.")`
$DIR/integration-tests/smoke/vrfv2plus_test.go: `vrfv2plus.CancelSubsAndReturnFunds(testcontext.Get(t), vrfContracts, sethClient.MustGetRootKeyAddress().Hex(), subIDsForCancellingAfterTest, l)`
$DIR/integration-tests/smoke/vrfv2plus_test.go: `config.VRFv2Plus.General.BHFJobWaitBlocks = ptr.Ptr(260)`
$DIR/integration-tests/smoke/vrfv2plus_test.go: `config.VRFv2Plus.General.BHFJobLookBackBlocks = ptr.Ptr(500)`
$DIR/integration-tests/smoke/vrfv2plus_test.go: `config.VRFv2Plus.General.BHFJobPollPeriod = ptr.Ptr(blockchain.StrDuration{Duration: time.Second * 30})`
$DIR/integration-tests/smoke/vrfv2plus_test.go: `config.VRFv2Plus.General.BHFJobRunTimeout = ptr.Ptr(blockchain.StrDuration{Duration: time.Minute * 24})`
$DIR/integration-tests/smoke/vrfv2plus_test.go: `env, vrfContracts, vrfKey, nodeTypeToNodeMap, err = vrfv2plus.SetupVRFV2PlusUniverse(
testcontext.Get(t), t, vrfEnvConfig, newEnvConfig, l)`
$DIR/integration-tests/smoke/vrfv2plus_test.go: `configCopy.VRFv2Plus.General.SubscriptionFundingAmountLink = ptr.Ptr(float64(0))`
$DIR/integration-tests/smoke/vrfv2plus_test.go: `configCopy.VRFv2Plus.General.SubscriptionFundingAmountNative = ptr.Ptr(float64(0))`
$DIR/integration-tests/smoke/vrfv2plus_test.go: `vrfcommon.LogSubDetails(l, subscription, subID.String(), vrfContracts.CoordinatorV2Plus)`
$DIR/integration-tests/smoke/vrfv2plus_test.go: `subIDsForCancellingAfterTest = append(subIDsForCancellingAfterTest, subIDs...)`
$DIR/integration-tests/smoke/vrfv2plus_test.go: `wg.Add(1)`
$DIR/integration-tests/smoke/vrfv2plus_test.go: `_, err = actions.WaitForBlockNumberToBe(
randRequestBlockNumber+uint64(257),
sethClient,
&wg,
configCopy.VRFv2Plus.General.WaitFor256BlocksTimeout.Duration,
t,
l,
)`
$DIR/integration-tests/smoke/vrfv2plus_test.go: `wg.Wait()`
$DIR/integration-tests/smoke/vrfv2plus_test.go: `l.Info().Float64("SubscriptionFundingAmountNative", *configCopy.VRFv2Plus.General.SubscriptionRefundingAmountNative).
Float64("SubscriptionFundingAmountLink", *configCopy.VRFv2Plus.General.SubscriptionRefundingAmountLink).
Msg("Funding subscription")`
$DIR/integration-tests/smoke/vrfv2plus_test.go: `err = vrfv2plus.FundSubscriptions(
big.NewFloat(*configCopy.VRFv2Plus.General.SubscriptionRefundingAmountNative),
big.NewFloat(*configCopy.VRFv2Plus.General.SubscriptionRefundingAmountLink),
vrfContracts.LinkToken,
vrfContracts.CoordinatorV2Plus,
subIDs,
)`
$DIR/integration-tests/smoke/vrfv2plus_test.go: `vrfcommon.LogRandomWordsFulfilledEvent(l, vrfContracts.CoordinatorV2Plus, randomWordsFulfilledEvent, isNativeBilling, 0)`
$DIR/integration-tests/smoke/vrfv2plus_test.go: `l.Info().Bool("Fulfilment Status", status.Fulfilled).Msg("Random Words Request Fulfilment Status")`
$DIR/integration-tests/smoke/vrfv2plus_test.go: `batchBHSTxFound = true`
$DIR/integration-tests/smoke/vrfv2plus_test.go: `l.Info().
Str("Randomness Request's Blockhash", randomWordsRequestedEvent.Raw.BlockHash.String()).
Str("Block Hash stored by BHS contract", fmt.Sprintf("0x%x", randRequestBlockHash)).
Msg("BHS Contract's stored Blockhash for Randomness Request")`
$DIR/integration-tests/smoke/vrfv2plus_test.go: `l.Info().
Str("Network Name", sethClient.Cfg.Network.Name).
Msg("Network is a simulated network. Skipping fund return for Coordinator Subscriptions.")`
$DIR/integration-tests/smoke/vrfv2plus_test.go: `vrfv2plus.CancelSubsAndReturnFunds(testcontext.Get(t), vrfContracts, sethClient.MustGetRootKeyAddress().Hex(), subIDsForCancellingAfterTest, l)`
$DIR/integration-tests/smoke/vrfv2plus_test.go: `config.VRFv2Plus.General.VRFJobRequestTimeout = ptr.Ptr(blockchain.StrDuration{Duration: timeout})`
$DIR/integration-tests/smoke/vrfv2plus_test.go: `config.VRFv2Plus.General.SubscriptionFundingAmountLink = ptr.Ptr(float64(0))`
$DIR/integration-tests/smoke/vrfv2plus_test.go: `config.VRFv2Plus.General.SubscriptionFundingAmountNative = ptr.Ptr(float64(0))`
$DIR/integration-tests/smoke/vrfv2plus_test.go: `env, vrfContracts, vrfKey, nodeTypeToNodeMap, err = vrfv2plus.SetupVRFV2PlusUniverse(testcontext.Get(t), t, vrfEnvConfig, newEnvConfig, l)`
$DIR/integration-tests/smoke/vrfv2plus_test.go: `vrfcommon.LogSubDetails(l, subscription, subID.String(), vrfContracts.CoordinatorV2Plus)`
$DIR/integration-tests/smoke/vrfv2plus_test.go: `subIDsForCancellingAfterTest = append(subIDsForCancellingAfterTest, subIDs...)`
$DIR/integration-tests/smoke/vrfv2plus_test.go: `time.Sleep(timeout + 1*time.Second)`
$DIR/integration-tests/smoke/vrfv2plus_test.go: `err = vrfv2plus.FundSubscriptions(
fundingLinkAmt,
fundingNativeAmt,
vrfContracts.LinkToken,
vrfContracts.CoordinatorV2Plus,
[]*big.Int{subID},
)`
$DIR/integration-tests/smoke/vrfv2plus_test.go: `configCopy.VRFv2Plus.General.VRFJobRequestTimeout = ptr.Ptr(blockchain.StrDuration{Duration: time.Duration(time.Hour * 1)})`
$DIR/integration-tests/smoke/vrfv2plus_test.go: `l.Info().
Msg("Creating VRFV2 Plus Job with higher timeout (1hr)")`
$DIR/integration-tests/smoke/vrfv2plus_test.go: `vrfNode.Job = job`
$DIR/integration-tests/smoke/vrfv2plus_test.go: `l.Info().Str("reqID", initialReqRandomWordsRequestedEvent.RequestId.String()).
Str("subID", subID.String()).
Msg("Waiting for initalReqRandomWordsFulfilledEvent")`
$DIR/integration-tests/smoke/vrfv2plus_test.go: `l.Info().Bool("Fulfilment Status", status.Fulfilled).Msg("Random Words Request Fulfilment Status")`
$DIR/integration-tests/smoke/vrfv2plus_test.go: `l.Info().
Str("Network Name", sethClient.Cfg.Network.Name).
Msg("Network is a simulated network. Skipping fund return for Coordinator Subscriptions.")`
$DIR/integration-tests/smoke/vrfv2plus_test.go: `vrfv2plus.CancelSubsAndReturnFunds(testcontext.Get(t), vrfContracts, sethClient.MustGetRootKeyAddress().Hex(), subIDsForCancellingAfterTest, l)`
$DIR/integration-tests/smoke/vrfv2plus_test.go: `config.VRFv2Plus.General.MinimumConfirmations = ptr.Ptr[uint16](0)`
$DIR/integration-tests/smoke/vrfv2plus_test.go: `config.VRFv2Plus.General.VRFJobSimulationBlock = ptr.Ptr[string]("pending")`
$DIR/integration-tests/smoke/vrfv2plus_test.go: `env, vrfContracts, vrfKey, _, err = vrfv2plus.SetupVRFV2PlusUniverse(testcontext.Get(t), t, vrfEnvConfig, newEnvConfig, l)`
$DIR/integration-tests/smoke/vrfv2plus_test.go: `vrfcommon.LogSubDetails(l, subscription, subID.String(), vrfContracts.CoordinatorV2Plus)`
$DIR/integration-tests/smoke/vrfv2plus_test.go: `subIDsForCancellingAfterTest = append(subIDsForCancellingAfterTest, subIDs...)`
$DIR/integration-tests/smoke/vrfv2plus_test.go: `l.Info().Uint16("minimumConfirmationDelay", *config.VRFv2Plus.General.MinimumConfirmations).Msg("Minimum Confirmation Delay")`
$DIR/integration-tests/smoke/vrfv2plus_test.go: `l.Info().
Str("Network Name", sethClient.Cfg.Network.Name).
Msg("Network is a simulated network. Skipping fund return for Coordinator Subscriptions.")`
$DIR/integration-tests/smoke/vrfv2plus_test.go: `vrfv2plus.CancelSubsAndReturnFunds(testcontext.Get(t), vrfContracts, defaultWalletAddress, subIDsForCancellingAfterTest, l)`
$DIR/integration-tests/smoke/vrfv2plus_test.go: `env, vrfContracts, vrfKey, _, err = vrfv2plus.SetupVRFV2PlusUniverse(testcontext.Get(t), t, vrfEnvConfig, newEnvConfig, l)`
$DIR/integration-tests/smoke/vrfv2plus_test.go: `vrfcommon.LogSubDetails(l, subscription, subID.String(), vrfContracts.CoordinatorV2Plus)`
$DIR/integration-tests/smoke/vrfv2plus_test.go: `subIDsForCancellingAfterTest = append(subIDsForCancellingAfterTest, subIDs...)`
$DIR/integration-tests/smoke/vrfv2plus_test.go: `t.Run("Reorg on fulfillment", func(t *testing.T) {
configCopy := config.MustCopy().(tc.TestConfig)
configCopy.VRFv2Plus.General.MinimumConfirmations = ptr.Ptr[uint16](10)
//1. request randomness and wait for fulfillment for blockhash from Reorged Fork
randomWordsRequestedEvent, randomWordsFulfilledEventOnReorgedFork, err := vrfv2plus.RequestRandomnessAndWaitForFulfillment(
consumers[0],
vrfContracts.CoordinatorV2Plus,
vrfKey,
subID,
isNativeBilling,
configCopy.VRFv2Plus.General,
l,
0,
)
require.NoError(t, err)
// rewind chain to block number after the request was made, but before the request was fulfilled
rewindChainToBlock := randomWordsRequestedEvent.Raw.BlockNumber + 1
rpcUrl, err := actions.GetRPCUrl(env, chainID)
require.NoError(t, err, "error getting rpc url")
//2. rewind chain by n number of blocks - basically, mimicking reorg scenario
latestBlockNumberAfterReorg, err := actions.RewindSimulatedChainToBlockNumber(testcontext.Get(t), sethClient, rpcUrl, rewindChainToBlock, l)
require.NoError(t, err, fmt.Sprintf("error rewinding chain to block number %d", rewindChainToBlock))
//3.1 ensure that chain is reorged and latest block number is greater than the block number when request was made
require.Greater(t, latestBlockNumberAfterReorg, randomWordsRequestedEvent.Raw.BlockNumber)
//3.2 ensure that chain is reorged and latest block number is less than the block number when fulfilment was performed
require.Less(t, latestBlockNumberAfterReorg, randomWordsFulfilledEventOnReorgedFork.Raw.BlockNumber)
//4. wait for the fulfillment which VRF Node will generate for Canonical chain
_, err = vrfv2plus.WaitRandomWordsFulfilledEvent(
vrfContracts.CoordinatorV2Plus,
randomWordsRequestedEvent.RequestId,
subID,
randomWordsRequestedEvent.Raw.BlockNumber,
isNativeBilling,
configCopy.VRFv2Plus.General.RandomWordsFulfilledEventTimeout.Duration,
l,
0,
)
require.NoError(t, err, "error waiting for randomness fulfilled event")
})`
$DIR/integration-tests/smoke/vrfv2plus_test.go: `configCopy.VRFv2Plus.General.MinimumConfirmations = ptr.Ptr[uint16](10)`
$DIR/integration-tests/smoke/vrfv2plus_test.go: `_, err = vrfv2plus.WaitRandomWordsFulfilledEvent(
vrfContracts.CoordinatorV2Plus,
randomWordsRequestedEvent.RequestId,
subID,
randomWordsRequestedEvent.Raw.BlockNumber,
isNativeBilling,
configCopy.VRFv2Plus.General.RandomWordsFulfilledEventTimeout.Duration,
l,
0,
)`
$DIR/integration-tests/smoke/vrfv2plus_test.go: `configCopy.VRFv2Plus.General.MinimumConfirmations = ptr.Ptr[uint16](6)`
$DIR/integration-tests/smoke/vrfv2plus_test.go: `_, err = vrfContracts.CoordinatorV2Plus.WaitForRandomWordsFulfilledEvent(
contracts.RandomWordsFulfilledEventFilter{
RequestIds: []*big.Int{randomWordsRequestedEvent.RequestId},
SubIDs: []*big.Int{subID},
Timeout: time.Second * 10,
},
)`
$DIR/integration-tests/smoke/vrfv2plus_test.go: `l.Info().
Str("Network Name", sethClient.Cfg.Network.Name).
Msg("Network is a simulated network. Skipping fund return for Coordinator Subscriptions.")`
$DIR/integration-tests/smoke/vrfv2plus_test.go: `vrfv2plus.CancelSubsAndReturnFunds(testcontext.Get(t), vrfContracts, defaultWalletAddress, subIDsForCancellingAfterTest, l)`
$DIR/integration-tests/smoke/vrfv2plus_test.go: `env, vrfContracts, vrfKey, nodeTypeToNodeMap, err = vrfv2plus.SetupVRFV2PlusUniverse(testcontext.Get(t), t, vrfEnvConfig, newEnvConfig, l)`
$DIR/integration-tests/smoke/vrfv2plus_test.go: `config.VRFv2Plus.General.CallbackGasLimit = ptr.Ptr(uint32(500_000))`
$DIR/integration-tests/smoke/vrfv2plus_test.go: `t.Run("Batch Fulfillment Enabled", func(t *testing.T) {
configCopy := config.MustCopy().(tc.TestConfig)
var isNativeBilling = true
vrfNode, exists := nodeTypeToNodeMap[vrfcommon.VRF]
require.True(t, exists, "VRF Node does not exist")
//ensure that no job present on the node
err = actions.DeleteJobs([]*client.ChainlinkClient{vrfNode.CLNode.API})
require.NoError(t, err)
batchFullfillmentEnabled := true
// create job with batch fulfillment enabled
vrfJobSpecConfig := vrfcommon.VRFJobSpecConfig{
ForwardingAllowed: *configCopy.VRFv2Plus.General.VRFJobForwardingAllowed,
CoordinatorAddress: vrfContracts.CoordinatorV2Plus.Address(),
BatchCoordinatorAddress: vrfContracts.BatchCoordinatorV2Plus.Address(),
FromAddresses: vrfNode.TXKeyAddressStrings,
EVMChainID: fmt.Sprint(chainID),
MinIncomingConfirmations: int(*configCopy.VRFv2Plus.General.MinimumConfirmations),
PublicKey: vrfKey.PubKeyCompressed,
EstimateGasMultiplier: *configCopy.VRFv2Plus.General.VRFJobEstimateGasMultiplier,
BatchFulfillmentEnabled: batchFullfillmentEnabled,
BatchFulfillmentGasMultiplier: *configCopy.VRFv2Plus.General.VRFJobBatchFulfillmentGasMultiplier,
PollPeriod: configCopy.VRFv2Plus.General.VRFJobPollPeriod.Duration,
RequestTimeout: configCopy.VRFv2Plus.General.VRFJobRequestTimeout.Duration,
SimulationBlock: configCopy.VRFv2Plus.General.VRFJobSimulationBlock,
VRFOwnerConfig: nil,
}
l.Info().
Msg("Creating VRFV2 Plus Job with `batchFulfillmentEnabled = true`")
job, err := vrfv2plus.CreateVRFV2PlusJob(
vrfNode.CLNode.API,
vrfJobSpecConfig,
)
require.NoError(t, err, "error creating job with higher timeout")
vrfNode.Job = job
consumers, subIDs, err := vrfv2plus.SetupNewConsumersAndSubs(
testcontext.Get(t),
env,
chainID,
vrfContracts.CoordinatorV2Plus,
configCopy,
vrfContracts.LinkToken,
1,
1,
l,
)
require.NoError(t, err, "error setting up new consumers and subs")
subID := subIDs[0]
subscription, err := vrfContracts.CoordinatorV2Plus.GetSubscription(testcontext.Get(t), subID)
require.NoError(t, err, "error getting subscription information")
vrfcommon.LogSubDetails(l, subscription, subID.String(), vrfContracts.CoordinatorV2Plus)
subIDsForCancellingAfterTest = append(subIDsForCancellingAfterTest, subIDs...)
configCopy.VRFv2Plus.General.RandomnessRequestCountPerRequest = ptr.Ptr(uint16(randRequestCount))
// test and assert
_, randomWordsFulfilledEvent, err := vrfv2plus.RequestRandomnessAndWaitForFulfillment(
consumers[0],
vrfContracts.CoordinatorV2Plus,
vrfKey,
subID,
isNativeBilling,
configCopy.VRFv2Plus.General,
l,
0,
)
require.NoError(t, err, "error requesting randomness and waiting for fulfilment")
var wgAllRequestsFulfilled sync.WaitGroup
wgAllRequestsFulfilled.Add(1)
requestCount, fulfilmentCount, err := vrfcommon.WaitForRequestCountEqualToFulfilmentCount(testcontext.Get(t), consumers[0], 2*time.Minute, &wgAllRequestsFulfilled)
require.NoError(t, err)
wgAllRequestsFulfilled.Wait()
l.Info().
Interface("Request Count", requestCount).
Interface("Fulfilment Count", fulfilmentCount).
Msg("Request/Fulfilment Stats")
clNodeTxs, resp, err := nodeTypeToNodeMap[vrfcommon.VRF].CLNode.API.ReadTransactions()
require.NoError(t, err)
require.Equal(t, 200, resp.StatusCode)
var batchFulfillmentTxs []client.TransactionData
for _, tx := range clNodeTxs.Data {
if common.HexToAddress(tx.Attributes.To).Cmp(common.HexToAddress(vrfContracts.BatchCoordinatorV2Plus.Address())) == 0 {
batchFulfillmentTxs = append(batchFulfillmentTxs, tx)
}
}
fulfillmentTx, _, err := sethClient.Client.TransactionByHash(testcontext.Get(t), randomWordsFulfilledEvent.Raw.TxHash)
require.NoError(t, err, "error getting tx from hash")
fulfillmentTXToAddress := fulfillmentTx.To().String()
l.Info().
Str("Actual Fulfillment Tx To Address", fulfillmentTXToAddress).
Str("BatchCoordinatorV2Plus Address", vrfContracts.BatchCoordinatorV2Plus.Address()).
Msg("Fulfillment Tx To Address should be the BatchCoordinatorV2Plus Address when batch fulfillment is enabled")
// verify that VRF node sends fulfillments via BatchCoordinator contract
require.Equal(t, vrfContracts.BatchCoordinatorV2Plus.Address(), fulfillmentTXToAddress, "Fulfillment Tx To Address should be the BatchCoordinatorV2Plus Address when batch fulfillment is enabled")
// verify that all fulfillments should be inside one tx
// This check is disabled for live testnets since each testnet has different gas usage for similar tx
if network.Simulated {
fulfillmentTxReceipt, err := sethClient.Client.TransactionReceipt(testcontext.Get(t), fulfillmentTx.Hash())
require.NoError(t, err)
randomWordsFulfilledLogs, err := contracts.ParseRandomWordsFulfilledLogs(vrfContracts.CoordinatorV2Plus, fulfillmentTxReceipt.Logs)
require.NoError(t, err)
require.Equal(t, 1, len(batchFulfillmentTxs))
require.Equal(t, int(randRequestCount), len(randomWordsFulfilledLogs))
}
})`
$DIR/integration-tests/smoke/vrfv2plus_test.go: `err = actions.DeleteJobs([]*client.ChainlinkClient{vrfNode.CLNode.API})`
$DIR/integration-tests/smoke/vrfv2plus_test.go: `l.Info().
Msg("Creating VRFV2 Plus Job with `batchFulfillmentEnabled = true`")`
$DIR/integration-tests/smoke/vrfv2plus_test.go: `vrfNode.Job = job`
$DIR/integration-tests/smoke/vrfv2plus_test.go: `vrfcommon.LogSubDetails(l, subscription, subID.String(), vrfContracts.CoordinatorV2Plus)`
$DIR/integration-tests/smoke/vrfv2plus_test.go: `subIDsForCancellingAfterTest = append(subIDsForCancellingAfterTest, subIDs...)`
$DIR/integration-tests/smoke/vrfv2plus_test.go: `configCopy.VRFv2Plus.General.RandomnessRequestCountPerRequest = ptr.Ptr(uint16(randRequestCount))`
$DIR/integration-tests/smoke/vrfv2plus_test.go: `wgAllRequestsFulfilled.Add(1)`
$DIR/integration-tests/smoke/vrfv2plus_test.go: `wgAllRequestsFulfilled.Wait()`
$DIR/integration-tests/smoke/vrfv2plus_test.go: `l.Info().
Interface("Request Count", requestCount).
Interface("Fulfilment Count", fulfilmentCount).
Msg("Request/Fulfilment Stats")`
$DIR/integration-tests/smoke/vrfv2plus_test.go: `batchFulfillmentTxs = append(batchFulfillmentTxs, tx)`
$DIR/integration-tests/smoke/vrfv2plus_test.go: `l.Info().
Str("Actual Fulfillment Tx To Address", fulfillmentTXToAddress).
Str("BatchCoordinatorV2Plus Address", vrfContracts.BatchCoordinatorV2Plus.Address()).
Msg("Fulfillment Tx To Address should be the BatchCoordinatorV2Plus Address when batch fulfillment is enabled")`
$DIR/integration-tests/smoke/vrfv2plus_test.go: `err = actions.DeleteJobs([]*client.ChainlinkClient{vrfNode.CLNode.API})`
$DIR/integration-tests/smoke/vrfv2plus_test.go: `l.Info().
Msg("Creating VRFV2 Plus Job with `batchFulfillmentEnabled = false`")`
$DIR/integration-tests/smoke/vrfv2plus_test.go: `vrfNode.Job = job`
$DIR/integration-tests/smoke/vrfv2plus_test.go: `vrfcommon.LogSubDetails(l, subscription, subID.String(), vrfContracts.CoordinatorV2Plus)`
$DIR/integration-tests/smoke/vrfv2plus_test.go: `subIDsForCancellingAfterTest = append(subIDsForCancellingAfterTest, subIDs...)`
$DIR/integration-tests/smoke/vrfv2plus_test.go: `configCopy.VRFv2Plus.General.RandomnessRequestCountPerRequest = ptr.Ptr(uint16(randRequestCount))`
$DIR/integration-tests/smoke/vrfv2plus_test.go: `wgAllRequestsFulfilled.Add(1)`
$DIR/integration-tests/smoke/vrfv2plus_test.go: `wgAllRequestsFulfilled.Wait()`
$DIR/integration-tests/smoke/vrfv2plus_test.go: `l.Info().
Interface("Request Count", requestCount).
Interface("Fulfilment Count", fulfilmentCount).
Msg("Request/Fulfilment Stats")`
$DIR/integration-tests/smoke/vrfv2plus_test.go: `l.Info().
Str("Actual Fulfillment Tx To Address", fulfillmentTXToAddress).
Str("CoordinatorV2Plus Address", vrfContracts.CoordinatorV2Plus.Address()).
Msg("Fulfillment Tx To Address should be the CoordinatorV2Plus Address when batch fulfillment is disabled")`
$DIR/integration-tests/smoke/vrfv2plus_test.go: `singleFulfillmentTxs = append(singleFulfillmentTxs, tx)`
$DIR/integration-tests/smoke/vrfv2plus_test.go: `.GetTestLogger(t)`
$DIR/integration-tests/smoke/vrfv2plus_test.go: `.GetConfig("Smoke", tc.VRFv2Plus)`
$DIR/integration-tests/smoke/vrfv2plus_test.go: `.MustGetSelectedNetworkConfig(config.GetNetworkConfig())`
$DIR/integration-tests/smoke/vrfv2plus_test.go: `.GetNetworkConfig()`
$DIR/integration-tests/smoke/vrfv2plus_test.go: `.GetSethClient(chainID)`
$DIR/integration-tests/smoke/vrfv2plus_test.go: `.Cfg.IsSimulatedNetwork()`
$DIR/integration-tests/smoke/vrfv2plus_test.go: `.Info()`
$DIR/integration-tests/smoke/vrfv2plus_test.go: `.
Str("Network Name", sethClient.Cfg.Network.Name)`
$DIR/integration-tests/smoke/vrfv2plus_test.go: `.
Msg("Network is a simulated network. Skipping fund return for Coordinator Subscriptions.")`
$DIR/integration-tests/smoke/vrfv2plus_test.go: `.CancelSubsAndReturnFunds(testcontext.Get(t), vrfContracts, sethClient.MustGetRootKeyAddress().Hex(), subIDsForCancellingAfterTest, l)`
$DIR/integration-tests/smoke/vrfv2plus_test.go: `.Get(t)`
$DIR/integration-tests/smoke/vrfv2plus_test.go: `.MustGetRootKeyAddress()`
$DIR/integration-tests/smoke/vrfv2plus_test.go: `.Hex()`
$DIR/integration-tests/smoke/vrfv2plus_test.go: `.Cleanup(test_env.CleanupOpts{TestName: t.Name()})`
$DIR/integration-tests/smoke/vrfv2plus_test.go: `.Name()`
$DIR/integration-tests/smoke/vrfv2plus_test.go: `.SetupVRFV2PlusUniverse(testcontext.Get(t), t, vrfEnvConfig, newEnvConfig, l)`
$DIR/integration-tests/smoke/vrfv2plus_test.go: `.Get(t)`
$DIR/integration-tests/smoke/vrfv2plus_test.go: `.GetSethClient(chainID)`
$DIR/integration-tests/smoke/vrfv2plus_test.go: `.Run("Link Billing", func(t *testing.T) {
configCopy := config.MustCopy().(tc.TestConfig)
var isNativeBilling = false
consumers, subIDsForRequestRandomness, err := vrfv2plus.SetupNewConsumersAndSubs(
testcontext.Get(t),
env,
chainID,
vrfContracts.CoordinatorV2Plus,
configCopy,
vrfContracts.LinkToken,
1,
1,
l,
)
require.NoError(t, err, "error setting up new consumers and subs")
subIDForRequestRandomness := subIDsForRequestRandomness[0]
subscription, err := vrfContracts.CoordinatorV2Plus.GetSubscription(testcontext.Get(t), subIDForRequestRandomness)
require.NoError(t, err, "error getting subscription information")
vrfcommon.LogSubDetails(l, subscription, subIDForRequestRandomness.String(), vrfContracts.CoordinatorV2Plus)
subIDsForCancellingAfterTest = append(subIDsForCancellingAfterTest, subIDsForRequestRandomness...)
subBalanceBeforeRequest := subscription.Balance
// test and assert
_, randomWordsFulfilledEvent, err := vrfv2plus.RequestRandomnessAndWaitForFulfillment(
consumers[0],
vrfContracts.CoordinatorV2Plus,
vrfKey,
subIDForRequestRandomness,
isNativeBilling,
configCopy.VRFv2Plus.General,
l,
0,
)
require.NoError(t, err, "error requesting randomness and waiting for fulfilment")
require.False(t, randomWordsFulfilledEvent.OnlyPremium, "RandomWordsFulfilled Event's `OnlyPremium` field should be false")
require.Equal(t, isNativeBilling, randomWordsFulfilledEvent.NativePayment, "RandomWordsFulfilled Event's `NativePayment` field should be false")
require.True(t, randomWordsFulfilledEvent.Success, "RandomWordsFulfilled Event's `Success` field should be true")
expectedSubBalanceJuels := new(big.Int).Sub(subBalanceBeforeRequest, randomWordsFulfilledEvent.Payment)
subscription, err = vrfContracts.CoordinatorV2Plus.GetSubscription(testcontext.Get(t), subIDForRequestRandomness)
require.NoError(t, err, "error getting subscription information")
subBalanceAfterRequest := subscription.Balance
require.Equal(t, expectedSubBalanceJuels, subBalanceAfterRequest)
status, err := consumers[0].GetRequestStatus(testcontext.Get(t), randomWordsFulfilledEvent.RequestId)
require.NoError(t, err, "error getting rand request status")
require.True(t, status.Fulfilled)
l.Info().Bool("Fulfilment Status", status.Fulfilled).Msg("Random Words Request Fulfilment Status")
require.Equal(t, *configCopy.VRFv2Plus.General.NumberOfWords, uint32(len(status.RandomWords)))
for _, w := range status.RandomWords {
l.Info().Str("Output", w.String()).Msg("Randomness fulfilled")
require.Equal(t, 1, w.Cmp(big.NewInt(0)), "Expected the VRF job give an answer bigger than 0")
}
})`
$DIR/integration-tests/smoke/vrfv2plus_test.go: `.MustCopy()`
$DIR/integration-tests/smoke/vrfv2plus_test.go: `.SetupNewConsumersAndSubs(
testcontext.Get(t),
env,
chainID,
vrfContracts.CoordinatorV2Plus,
configCopy,
vrfContracts.LinkToken,
1,
1,
l,
)`
$DIR/integration-tests/smoke/vrfv2plus_test.go: `.Get(t)`
$DIR/integration-tests/smoke/vrfv2plus_test.go: `.CoordinatorV2Plus.GetSubscription(testcontext.Get(t), subIDForRequestRandomness)`
$DIR/integration-tests/smoke/vrfv2plus_test.go: `.Get(t)`
$DIR/integration-tests/smoke/vrfv2plus_test.go: `.LogSubDetails(l, subscription, subIDForRequestRandomness.String(), vrfContracts.CoordinatorV2Plus)`
$DIR/integration-tests/smoke/vrfv2plus_test.go: `.String()`
$DIR/integration-tests/smoke/vrfv2plus_test.go: `.RequestRandomnessAndWaitForFulfillment(
consumers[0],
vrfContracts.CoordinatorV2Plus,
vrfKey,
subIDForRequestRandomness,
isNativeBilling,
configCopy.VRFv2Plus.General,
l,
0,
)`
$DIR/integration-tests/smoke/vrfv2plus_test.go: `.Sub(subBalanceBeforeRequest, randomWordsFulfilledEvent.Payment)`
$DIR/integration-tests/smoke/vrfv2plus_test.go: `.CoordinatorV2Plus.GetSubscription(testcontext.Get(t), subIDForRequestRandomness)`
$DIR/integration-tests/smoke/vrfv2plus_test.go: `.Get(t)`
$DIR/integration-tests/smoke/vrfv2plus_test.go: `.GetRequestStatus(testcontext.Get(t), randomWordsFulfilledEvent.RequestId)`
$DIR/integration-tests/smoke/vrfv2plus_test.go: `.Get(t)`
$DIR/integration-tests/smoke/vrfv2plus_test.go: `.Info()`
$DIR/integration-tests/smoke/vrfv2plus_test.go: `.Bool("Fulfilment Status", status.Fulfilled)`
$DIR/integration-tests/smoke/vrfv2plus_test.go: `.Msg("Random Words Request Fulfilment Status")`
$DIR/integration-tests/smoke/vrfv2plus_test.go: `.Info()`
$DIR/integration-tests/smoke/vrfv2plus_test.go: `.Str("Output", w.String())`
$DIR/integration-tests/smoke/vrfv2plus_test.go: `.String()`
$DIR/integration-tests/smoke/vrfv2plus_test.go: `.Msg("Randomness fulfilled")`
$DIR/integration-tests/smoke/vrfv2plus_test.go: `.Run("Native Billing", func(t *testing.T) {
configCopy := config.MustCopy().(tc.TestConfig)
testConfig := configCopy.VRFv2Plus.General
var isNativeBilling = true
consumers, subIDs, err := vrfv2plus.SetupNewConsumersAndSubs(
testcontext.Get(t),
env,
chainID,
vrfContracts.CoordinatorV2Plus,
configCopy,
vrfContracts.LinkToken,
1,
1,
l,
)
require.NoError(t, err, "error setting up new consumers and subs")
subID := subIDs[0]
subscription, err := vrfContracts.CoordinatorV2Plus.GetSubscription(testcontext.Get(t), subID)
require.NoError(t, err, "error getting subscription information")
vrfcommon.LogSubDetails(l, subscription, subID.String(), vrfContracts.CoordinatorV2Plus)
subIDsForCancellingAfterTest = append(subIDsForCancellingAfterTest, subIDs...)
subNativeTokenBalanceBeforeRequest := subscription.NativeBalance
// test and assert
_, randomWordsFulfilledEvent, err := vrfv2plus.RequestRandomnessAndWaitForFulfillment(
consumers[0],
vrfContracts.CoordinatorV2Plus,
vrfKey,
subID,
isNativeBilling,
configCopy.VRFv2Plus.General,
l,
0,
)
require.NoError(t, err, "error requesting randomness and waiting for fulfilment")
require.False(t, randomWordsFulfilledEvent.OnlyPremium)
require.Equal(t, isNativeBilling, randomWordsFulfilledEvent.NativePayment)
require.True(t, randomWordsFulfilledEvent.Success)
expectedSubBalanceWei := new(big.Int).Sub(subNativeTokenBalanceBeforeRequest, randomWordsFulfilledEvent.Payment)
subscription, err = vrfContracts.CoordinatorV2Plus.GetSubscription(testcontext.Get(t), subID)
require.NoError(t, err)
subBalanceAfterRequest := subscription.NativeBalance
require.Equal(t, expectedSubBalanceWei, subBalanceAfterRequest)
status, err := consumers[0].GetRequestStatus(testcontext.Get(t), randomWordsFulfilledEvent.RequestId)
require.NoError(t, err, "error getting rand request status")
require.True(t, status.Fulfilled)
l.Info().Bool("Fulfilment Status", status.Fulfilled).Msg("Random Words Request Fulfilment Status")
require.Equal(t, *testConfig.NumberOfWords, uint32(len(status.RandomWords)))
for _, w := range status.RandomWords {
l.Info().Str("Output", w.String()).Msg("Randomness fulfilled")
require.Equal(t, 1, w.Cmp(big.NewInt(0)), "Expected the VRF job give an answer bigger than 0")
}
})`
$DIR/integration-tests/smoke/vrfv2plus_test.go: `.MustCopy()`
$DIR/integration-tests/smoke/vrfv2plus_test.go: `.SetupNewConsumersAndSubs(
testcontext.Get(t),
env,
chainID,
vrfContracts.CoordinatorV2Plus,
configCopy,
vrfContracts.LinkToken,
1,
1,
l,
)`
$DIR/integration-tests/smoke/vrfv2plus_test.go: `.Get(t)`
$DIR/integration-tests/smoke/vrfv2plus_test.go: `.CoordinatorV2Plus.GetSubscription(testcontext.Get(t), subID)`
$DIR/integration-tests/smoke/vrfv2plus_test.go: `.Get(t)`
$DIR/integration-tests/smoke/vrfv2plus_test.go: `.LogSubDetails(l, subscription, subID.String(), vrfContracts.CoordinatorV2Plus)`
$DIR/integration-tests/smoke/vrfv2plus_test.go: `.String()`
$DIR/integration-tests/smoke/vrfv2plus_test.go: `.RequestRandomnessAndWaitForFulfillment(
consumers[0],
vrfContracts.CoordinatorV2Plus,
vrfKey,
subID,
isNativeBilling,
configCopy.VRFv2Plus.General,
l,
0,
)`
$DIR/integration-tests/smoke/vrfv2plus_test.go: `.Sub(subNativeTokenBalanceBeforeRequest, randomWordsFulfilledEvent.Payment)`
$DIR/integration-tests/smoke/vrfv2plus_test.go: `.CoordinatorV2Plus.GetSubscription(testcontext.Get(t), subID)`
$DIR/integration-tests/smoke/vrfv2plus_test.go: `.Get(t)`
$DIR/integration-tests/smoke/vrfv2plus_test.go: `.GetRequestStatus(testcontext.Get(t), randomWordsFulfilledEvent.RequestId)`
$DIR/integration-tests/smoke/vrfv2plus_test.go: `.Get(t)`
$DIR/integration-tests/smoke/vrfv2plus_test.go: `.Info()`
$DIR/integration-tests/smoke/vrfv2plus_test.go: `.Bool("Fulfilment Status", status.Fulfilled)`
$DIR/integration-tests/smoke/vrfv2plus_test.go: `.Msg("Random Words Request Fulfilment Status")`
$DIR/integration-tests/smoke/vrfv2plus_test.go: `.Info()`
$DIR/integration-tests/smoke/vrfv2plus_test.go: `.Str("Output", w.String())`
$DIR/integration-tests/smoke/vrfv2plus_test.go: `.String()`
$DIR/integration-tests/smoke/vrfv2plus_test.go: `.Msg("Randomness fulfilled")`
$DIR/integration-tests/smoke/vrfv2plus_test.go: `.Run("VRF Node waits block confirmation number specified by the consumer before sending fulfilment on-chain", func(t *testing.T) {
configCopy := config.MustCopy().(tc.TestConfig)
testConfig := configCopy.VRFv2Plus.General
var isNativeBilling = true
consumers, subIDs, err := vrfv2plus.SetupNewConsumersAndSubs(
testcontext.Get(t),
env,
chainID,
vrfContracts.CoordinatorV2Plus,
configCopy,
vrfContracts.LinkToken,
1,
1,
l,
)
require.NoError(t, err, "error setting up new consumers and subs")
subID := subIDs[0]
subscription, err := vrfContracts.CoordinatorV2Plus.GetSubscription(testcontext.Get(t), subID)
require.NoError(t, err, "error getting subscription information")
vrfcommon.LogSubDetails(l, subscription, subID.String(), vrfContracts.CoordinatorV2Plus)
subIDsForCancellingAfterTest = append(subIDsForCancellingAfterTest, subIDs...)
expectedBlockNumberWait := uint16(10)
testConfig.MinimumConfirmations = ptr.Ptr[uint16](expectedBlockNumberWait)
randomWordsRequestedEvent, randomWordsFulfilledEvent, err := vrfv2plus.RequestRandomnessAndWaitForFulfillment(
consumers[0],
vrfContracts.CoordinatorV2Plus,
vrfKey,
subID,
isNativeBilling,
testConfig,
l,
0,
)
require.NoError(t, err, "error requesting randomness and waiting for fulfilment")
// check that VRF node waited at least the number of blocks specified by the consumer in the rand request min confs field
blockNumberWait := randomWordsRequestedEvent.Raw.BlockNumber - randomWordsFulfilledEvent.Raw.BlockNumber
require.GreaterOrEqual(t, blockNumberWait, uint64(expectedBlockNumberWait))
status, err := consumers[0].GetRequestStatus(testcontext.Get(t), randomWordsFulfilledEvent.RequestId)
require.NoError(t, err, "error getting rand request status")
require.True(t, status.Fulfilled)
l.Info().Bool("Fulfilment Status", status.Fulfilled).Msg("Random Words Request Fulfilment Status")
})`
$DIR/integration-tests/smoke/vrfv2plus_test.go: `.MustCopy()`
$DIR/integration-tests/smoke/vrfv2plus_test.go: `.SetupNewConsumersAndSubs(
testcontext.Get(t),
env,
chainID,
vrfContracts.CoordinatorV2Plus,
configCopy,
vrfContracts.LinkToken,
1,
1,
l,
)`
$DIR/integration-tests/smoke/vrfv2plus_test.go: `.Get(t)`
$DIR/integration-tests/smoke/vrfv2plus_test.go: `.CoordinatorV2Plus.GetSubscription(testcontext.Get(t), subID)`
$DIR/integration-tests/smoke/vrfv2plus_test.go: `.Get(t)`
$DIR/integration-tests/smoke/vrfv2plus_test.go: `.LogSubDetails(l, subscription, subID.String(), vrfContracts.CoordinatorV2Plus)`
$DIR/integration-tests/smoke/vrfv2plus_test.go: `.String()`
$DIR/integration-tests/smoke/vrfv2plus_test.go: `.RequestRandomnessAndWaitForFulfillment(
consumers[0],
vrfContracts.CoordinatorV2Plus,
vrfKey,
subID,
isNativeBilling,
testConfig,
l,
0,
)`
$DIR/integration-tests/smoke/vrfv2plus_test.go: `.GetRequestStatus(testcontext.Get(t), randomWordsFulfilledEvent.RequestId)`
$DIR/integration-tests/smoke/vrfv2plus_test.go: `.Get(t)`
$DIR/integration-tests/smoke/vrfv2plus_test.go: `.Info()`
$DIR/integration-tests/smoke/vrfv2plus_test.go: `.Bool("Fulfilment Status", status.Fulfilled)`
$DIR/integration-tests/smoke/vrfv2plus_test.go: `.Msg("Random Words Request Fulfilment Status")`
$DIR/integration-tests/smoke/vrfv2plus_test.go: `.Run("CL Node VRF Job Runs", func(t *testing.T) {
configCopy := config.MustCopy().(tc.TestConfig)
var isNativeBilling = false
consumers, subIDsForRequestRandomness, err := vrfv2plus.SetupNewConsumersAndSubs(
testcontext.Get(t),
env,
chainID,
vrfContracts.CoordinatorV2Plus,
configCopy,
vrfContracts.LinkToken,
1,
1,
l,
)
require.NoError(t, err, "error setting up new consumers and subs")
subIDForRequestRandomness := subIDsForRequestRandomness[0]
subscription, err := vrfContracts.CoordinatorV2Plus.GetSubscription(testcontext.Get(t), subIDForRequestRandomness)
require.NoError(t, err, "error getting subscription information")
vrfcommon.LogSubDetails(l, subscription, subIDForRequestRandomness.String(), vrfContracts.CoordinatorV2Plus)
subIDsForCancellingAfterTest = append(subIDsForCancellingAfterTest, subIDsForRequestRandomness...)
jobRunsBeforeTest, err := nodeTypeToNodeMap[vrfcommon.VRF].CLNode.API.MustReadRunsByJob(nodeTypeToNodeMap[vrfcommon.VRF].Job.Data.ID)
require.NoError(t, err, "error reading job runs")
// test and assert
_, _, err = vrfv2plus.RequestRandomnessAndWaitForFulfillment(
consumers[0],
vrfContracts.CoordinatorV2Plus,
vrfKey,
subIDForRequestRandomness,
isNativeBilling,
configCopy.VRFv2Plus.General,
l,
0,
)
require.NoError(t, err, "error requesting randomness and waiting for fulfilment")
jobRuns, err := nodeTypeToNodeMap[vrfcommon.VRF].CLNode.API.MustReadRunsByJob(nodeTypeToNodeMap[vrfcommon.VRF].Job.Data.ID)
require.NoError(t, err, "error reading job runs")
require.Equal(t, len(jobRunsBeforeTest.Data)+1, len(jobRuns.Data))
})`
$DIR/integration-tests/smoke/vrfv2plus_test.go: `.MustCopy()`
$DIR/integration-tests/smoke/vrfv2plus_test.go: `.SetupNewConsumersAndSubs(
testcontext.Get(t),
env,
chainID,
vrfContracts.CoordinatorV2Plus,
configCopy,
vrfContracts.LinkToken,
1,
1,
l,
)`
$DIR/integration-tests/smoke/vrfv2plus_test.go: `.Get(t)`
$DIR/integration-tests/smoke/vrfv2plus_test.go: `.CoordinatorV2Plus.GetSubscription(testcontext.Get(t), subIDForRequestRandomness)`
$DIR/integration-tests/smoke/vrfv2plus_test.go: `.Get(t)`
$DIR/integration-tests/smoke/vrfv2plus_test.go: `.LogSubDetails(l, subscription, subIDForRequestRandomness.String(), vrfContracts.CoordinatorV2Plus)`
$DIR/integration-tests/smoke/vrfv2plus_test.go: `.String()`
$DIR/integration-tests/smoke/vrfv2plus_test.go: `.CLNode.API.MustReadRunsByJob(nodeTypeToNodeMap[vrfcommon.VRF].Job.Data.ID)`
$DIR/integration-tests/smoke/vrfv2plus_test.go: `.RequestRandomnessAndWaitForFulfillment(
consumers[0],
vrfContracts.CoordinatorV2Plus,
vrfKey,
subIDForRequestRandomness,
isNativeBilling,
configCopy.VRFv2Plus.General,
l,
0,
)`
$DIR/integration-tests/smoke/vrfv2plus_test.go: `.CLNode.API.MustReadRunsByJob(nodeTypeToNodeMap[vrfcommon.VRF].Job.Data.ID)`
$DIR/integration-tests/smoke/vrfv2plus_test.go: `.Run("Direct Funding", func(t *testing.T) {
configCopy := config.MustCopy().(tc.TestConfig)
wrapperContracts, wrapperSubID, err := vrfv2plus.SetupVRFV2PlusWrapperEnvironment(
testcontext.Get(t),
l,
env,
chainID,
&configCopy,
vrfContracts.LinkToken,
vrfContracts.MockETHLINKFeed,
vrfContracts.CoordinatorV2Plus,
vrfKey.KeyHash,
1,
)
require.NoError(t, err)
t.Run("Link Billing", func(t *testing.T) {
configCopy := config.MustCopy().(tc.TestConfig)
testConfig := configCopy.VRFv2Plus.General
var isNativeBilling = false
wrapperConsumerJuelsBalanceBeforeRequest, err := vrfContracts.LinkToken.BalanceOf(testcontext.Get(t), wrapperContracts.LoadTestConsumers[0].Address())
require.NoError(t, err, "error getting wrapper consumer balance")
wrapperSubscription, err := vrfContracts.CoordinatorV2Plus.GetSubscription(testcontext.Get(t), wrapperSubID)
require.NoError(t, err, "error getting subscription information")
subBalanceBeforeRequest := wrapperSubscription.Balance
randomWordsFulfilledEvent, err := vrfv2plus.DirectFundingRequestRandomnessAndWaitForFulfillment(
wrapperContracts.LoadTestConsumers[0],
vrfContracts.CoordinatorV2Plus,
vrfKey,
wrapperSubID,
isNativeBilling,
configCopy.VRFv2Plus.General,
l,
)
require.NoError(t, err, "error requesting randomness and waiting for fulfilment")
expectedSubBalanceJuels := new(big.Int).Sub(subBalanceBeforeRequest, randomWordsFulfilledEvent.Payment)
wrapperSubscription, err = vrfContracts.CoordinatorV2Plus.GetSubscription(testcontext.Get(t), wrapperSubID)
require.NoError(t, err, "error getting subscription information")
subBalanceAfterRequest := wrapperSubscription.Balance
require.Equal(t, expectedSubBalanceJuels, subBalanceAfterRequest)
consumerStatus, err := wrapperContracts.LoadTestConsumers[0].GetRequestStatus(testcontext.Get(t), randomWordsFulfilledEvent.RequestId)
require.NoError(t, err, "error getting rand request status")
require.True(t, consumerStatus.Fulfilled)
expectedWrapperConsumerJuelsBalance := new(big.Int).Sub(wrapperConsumerJuelsBalanceBeforeRequest, consumerStatus.Paid)
wrapperConsumerJuelsBalanceAfterRequest, err := vrfContracts.LinkToken.BalanceOf(testcontext.Get(t), wrapperContracts.LoadTestConsumers[0].Address())
require.NoError(t, err, "error getting wrapper consumer balance")
require.Equal(t, expectedWrapperConsumerJuelsBalance, wrapperConsumerJuelsBalanceAfterRequest)
//todo: uncomment when VRF-651 will be fixed
//require.Equal(t, 1, consumerStatus.Paid.Cmp(randomWordsFulfilledEvent.Payment), "Expected Consumer contract pay more than the Coordinator Sub")
vrfcommon.LogFulfillmentDetailsLinkBilling(l, wrapperConsumerJuelsBalanceBeforeRequest, wrapperConsumerJuelsBalanceAfterRequest, consumerStatus, randomWordsFulfilledEvent)
require.Equal(t, *testConfig.NumberOfWords, uint32(len(consumerStatus.RandomWords)))
for _, w := range consumerStatus.RandomWords {
l.Info().Str("Output", w.String()).Msg("Randomness fulfilled")
require.Equal(t, 1, w.Cmp(big.NewInt(0)), "Expected the VRF job give an answer bigger than 0")
}
})
t.Run("Native Billing", func(t *testing.T) {
configCopy := config.MustCopy().(tc.TestConfig)
testConfig := configCopy.VRFv2Plus.General
var isNativeBilling = true
wrapperConsumerBalanceBeforeRequestWei, err := sethClient.Client.BalanceAt(testcontext.Get(t), common.HexToAddress(wrapperContracts.LoadTestConsumers[0].Address()), nil)
require.NoError(t, err, "error getting wrapper consumer balance")
wrapperSubscription, err := vrfContracts.CoordinatorV2Plus.GetSubscription(testcontext.Get(t), wrapperSubID)
require.NoError(t, err, "error getting subscription information")
subBalanceBeforeRequest := wrapperSubscription.NativeBalance
randomWordsFulfilledEvent, err := vrfv2plus.DirectFundingRequestRandomnessAndWaitForFulfillment(
wrapperContracts.LoadTestConsumers[0],
vrfContracts.CoordinatorV2Plus,
vrfKey,
wrapperSubID,
isNativeBilling,
configCopy.VRFv2Plus.General,
l,
)
require.NoError(t, err, "error requesting randomness and waiting for fulfilment")
expectedSubBalanceWei := new(big.Int).Sub(subBalanceBeforeRequest, randomWordsFulfilledEvent.Payment)
wrapperSubscription, err = vrfContracts.CoordinatorV2Plus.GetSubscription(testcontext.Get(t), wrapperSubID)
require.NoError(t, err, "error getting subscription information")
subBalanceAfterRequest := wrapperSubscription.NativeBalance
require.Equal(t, expectedSubBalanceWei, subBalanceAfterRequest)
consumerStatus, err := wrapperContracts.LoadTestConsumers[0].GetRequestStatus(testcontext.Get(t), randomWordsFulfilledEvent.RequestId)
require.NoError(t, err, "error getting rand request status")
require.True(t, consumerStatus.Fulfilled)
expectedWrapperConsumerWeiBalance := new(big.Int).Sub(wrapperConsumerBalanceBeforeRequestWei, consumerStatus.Paid)
wrapperConsumerBalanceAfterRequestWei, err := sethClient.Client.BalanceAt(testcontext.Get(t), common.HexToAddress(wrapperContracts.LoadTestConsumers[0].Address()), nil)
require.NoError(t, err, "error getting wrapper consumer balance")
require.Equal(t, expectedWrapperConsumerWeiBalance, wrapperConsumerBalanceAfterRequestWei)
//todo: uncomment when VRF-651 will be fixed
//require.Equal(t, 1, consumerStatus.Paid.Cmp(randomWordsFulfilledEvent.Payment), "Expected Consumer contract pay more than the Coordinator Sub")
vrfcommon.LogFulfillmentDetailsNativeBilling(l, wrapperConsumerBalanceBeforeRequestWei, wrapperConsumerBalanceAfterRequestWei, consumerStatus, randomWordsFulfilledEvent)
require.Equal(t, *testConfig.NumberOfWords, uint32(len(consumerStatus.RandomWords)))
for _, w := range consumerStatus.RandomWords {
l.Info().Str("Output", w.String()).Msg("Randomness fulfilled")
require.Equal(t, 1, w.Cmp(big.NewInt(0)), "Expected the VRF job give an answer bigger than 0")
}
})
})`
$DIR/integration-tests/smoke/vrfv2plus_test.go: `.MustCopy()`
$DIR/integration-tests/smoke/vrfv2plus_test.go: `.SetupVRFV2PlusWrapperEnvironment(
testcontext.Get(t),
l,
env,
chainID,
&configCopy,
vrfContracts.LinkToken,
vrfContracts.MockETHLINKFeed,
vrfContracts.CoordinatorV2Plus,
vrfKey.KeyHash,
1,
)`
$DIR/integration-tests/smoke/vrfv2plus_test.go: `.Get(t)`
$DIR/integration-tests/smoke/vrfv2plus_test.go: `.Run("Link Billing", func(t *testing.T) {
configCopy := config.MustCopy().(tc.TestConfig)
testConfig := configCopy.VRFv2Plus.General
var isNativeBilling = false
wrapperConsumerJuelsBalanceBeforeRequest, err := vrfContracts.LinkToken.BalanceOf(testcontext.Get(t), wrapperContracts.LoadTestConsumers[0].Address())
require.NoError(t, err, "error getting wrapper consumer balance")
wrapperSubscription, err := vrfContracts.CoordinatorV2Plus.GetSubscription(testcontext.Get(t), wrapperSubID)
require.NoError(t, err, "error getting subscription information")
subBalanceBeforeRequest := wrapperSubscription.Balance
randomWordsFulfilledEvent, err := vrfv2plus.DirectFundingRequestRandomnessAndWaitForFulfillment(
wrapperContracts.LoadTestConsumers[0],
vrfContracts.CoordinatorV2Plus,
vrfKey,
wrapperSubID,
isNativeBilling,
configCopy.VRFv2Plus.General,
l,
)
require.NoError(t, err, "error requesting randomness and waiting for fulfilment")
expectedSubBalanceJuels := new(big.Int).Sub(subBalanceBeforeRequest, randomWordsFulfilledEvent.Payment)
wrapperSubscription, err = vrfContracts.CoordinatorV2Plus.GetSubscription(testcontext.Get(t), wrapperSubID)
require.NoError(t, err, "error getting subscription information")
subBalanceAfterRequest := wrapperSubscription.Balance
require.Equal(t, expectedSubBalanceJuels, subBalanceAfterRequest)
consumerStatus, err := wrapperContracts.LoadTestConsumers[0].GetRequestStatus(testcontext.Get(t), randomWordsFulfilledEvent.RequestId)
require.NoError(t, err, "error getting rand request status")
require.True(t, consumerStatus.Fulfilled)
expectedWrapperConsumerJuelsBalance := new(big.Int).Sub(wrapperConsumerJuelsBalanceBeforeRequest, consumerStatus.Paid)
wrapperConsumerJuelsBalanceAfterRequest, err := vrfContracts.LinkToken.BalanceOf(testcontext.Get(t), wrapperContracts.LoadTestConsumers[0].Address())
require.NoError(t, err, "error getting wrapper consumer balance")
require.Equal(t, expectedWrapperConsumerJuelsBalance, wrapperConsumerJuelsBalanceAfterRequest)
//todo: uncomment when VRF-651 will be fixed
//require.Equal(t, 1, consumerStatus.Paid.Cmp(randomWordsFulfilledEvent.Payment), "Expected Consumer contract pay more than the Coordinator Sub")
vrfcommon.LogFulfillmentDetailsLinkBilling(l, wrapperConsumerJuelsBalanceBeforeRequest, wrapperConsumerJuelsBalanceAfterRequest, consumerStatus, randomWordsFulfilledEvent)
require.Equal(t, *testConfig.NumberOfWords, uint32(len(consumerStatus.RandomWords)))
for _, w := range consumerStatus.RandomWords {
l.Info().Str("Output", w.String()).Msg("Randomness fulfilled")
require.Equal(t, 1, w.Cmp(big.NewInt(0)), "Expected the VRF job give an answer bigger than 0")
}
})`
$DIR/integration-tests/smoke/vrfv2plus_test.go: `.MustCopy()`
$DIR/integration-tests/smoke/vrfv2plus_test.go: `.LinkToken.BalanceOf(testcontext.Get(t), wrapperContracts.LoadTestConsumers[0].Address())`
$DIR/integration-tests/smoke/vrfv2plus_test.go: `.Get(t)`
$DIR/integration-tests/smoke/vrfv2plus_test.go: `.Address()`
$DIR/integration-tests/smoke/vrfv2plus_test.go: `.CoordinatorV2Plus.GetSubscription(testcontext.Get(t), wrapperSubID)`
$DIR/integration-tests/smoke/vrfv2plus_test.go: `.Get(t)`
$DIR/integration-tests/smoke/vrfv2plus_test.go: `.DirectFundingRequestRandomnessAndWaitForFulfillment(
wrapperContracts.LoadTestConsumers[0],
vrfContracts.CoordinatorV2Plus,
vrfKey,
wrapperSubID,
isNativeBilling,
configCopy.VRFv2Plus.General,
l,
)`
$DIR/integration-tests/smoke/vrfv2plus_test.go: `.Sub(subBalanceBeforeRequest, randomWordsFulfilledEvent.Payment)`
$DIR/integration-tests/smoke/vrfv2plus_test.go: `.CoordinatorV2Plus.GetSubscription(testcontext.Get(t), wrapperSubID)`
$DIR/integration-tests/smoke/vrfv2plus_test.go: `.Get(t)`
$DIR/integration-tests/smoke/vrfv2plus_test.go: `.GetRequestStatus(testcontext.Get(t), randomWordsFulfilledEvent.RequestId)`
$DIR/integration-tests/smoke/vrfv2plus_test.go: `.Get(t)`
$DIR/integration-tests/smoke/vrfv2plus_test.go: `.Sub(wrapperConsumerJuelsBalanceBeforeRequest, consumerStatus.Paid)`
$DIR/integration-tests/smoke/vrfv2plus_test.go: `.LinkToken.BalanceOf(testcontext.Get(t), wrapperContracts.LoadTestConsumers[0].Address())`
$DIR/integration-tests/smoke/vrfv2plus_test.go: `.Get(t)`
$DIR/integration-tests/smoke/vrfv2plus_test.go: `.Address()`
$DIR/integration-tests/smoke/vrfv2plus_test.go: `.LogFulfillmentDetailsLinkBilling(l, wrapperConsumerJuelsBalanceBeforeRequest, wrapperConsumerJuelsBalanceAfterRequest, consumerStatus, randomWordsFulfilledEvent)`
$DIR/integration-tests/smoke/vrfv2plus_test.go: `.Info()`
$DIR/integration-tests/smoke/vrfv2plus_test.go: `.Str("Output", w.String())`
$DIR/integration-tests/smoke/vrfv2plus_test.go: `.String()`
$DIR/integration-tests/smoke/vrfv2plus_test.go: `.Msg("Randomness fulfilled")`
$DIR/integration-tests/smoke/vrfv2plus_test.go: `.Run("Native Billing", func(t *testing.T) {
configCopy := config.MustCopy().(tc.TestConfig)
testConfig := configCopy.VRFv2Plus.General
var isNativeBilling = true
wrapperConsumerBalanceBeforeRequestWei, err := sethClient.Client.BalanceAt(testcontext.Get(t), common.HexToAddress(wrapperContracts.LoadTestConsumers[0].Address()), nil)
require.NoError(t, err, "error getting wrapper consumer balance")
wrapperSubscription, err := vrfContracts.CoordinatorV2Plus.GetSubscription(testcontext.Get(t), wrapperSubID)
require.NoError(t, err, "error getting subscription information")
subBalanceBeforeRequest := wrapperSubscription.NativeBalance
randomWordsFulfilledEvent, err := vrfv2plus.DirectFundingRequestRandomnessAndWaitForFulfillment(
wrapperContracts.LoadTestConsumers[0],
vrfContracts.CoordinatorV2Plus,
vrfKey,
wrapperSubID,
isNativeBilling,
configCopy.VRFv2Plus.General,
l,
)
require.NoError(t, err, "error requesting randomness and waiting for fulfilment")
expectedSubBalanceWei := new(big.Int).Sub(subBalanceBeforeRequest, randomWordsFulfilledEvent.Payment)
wrapperSubscription, err = vrfContracts.CoordinatorV2Plus.GetSubscription(testcontext.Get(t), wrapperSubID)
require.NoError(t, err, "error getting subscription information")
subBalanceAfterRequest := wrapperSubscription.NativeBalance
require.Equal(t, expectedSubBalanceWei, subBalanceAfterRequest)
consumerStatus, err := wrapperContracts.LoadTestConsumers[0].GetRequestStatus(testcontext.Get(t), randomWordsFulfilledEvent.RequestId)
require.NoError(t, err, "error getting rand request status")
require.True(t, consumerStatus.Fulfilled)
expectedWrapperConsumerWeiBalance := new(big.Int).Sub(wrapperConsumerBalanceBeforeRequestWei, consumerStatus.Paid)
wrapperConsumerBalanceAfterRequestWei, err := sethClient.Client.BalanceAt(testcontext.Get(t), common.HexToAddress(wrapperContracts.LoadTestConsumers[0].Address()), nil)
require.NoError(t, err, "error getting wrapper consumer balance")
require.Equal(t, expectedWrapperConsumerWeiBalance, wrapperConsumerBalanceAfterRequestWei)
//todo: uncomment when VRF-651 will be fixed
//require.Equal(t, 1, consumerStatus.Paid.Cmp(randomWordsFulfilledEvent.Payment), "Expected Consumer contract pay more than the Coordinator Sub")
vrfcommon.LogFulfillmentDetailsNativeBilling(l, wrapperConsumerBalanceBeforeRequestWei, wrapperConsumerBalanceAfterRequestWei, consumerStatus, randomWordsFulfilledEvent)
require.Equal(t, *testConfig.NumberOfWords, uint32(len(consumerStatus.RandomWords)))
for _, w := range consumerStatus.RandomWords {
l.Info().Str("Output", w.String()).Msg("Randomness fulfilled")
require.Equal(t, 1, w.Cmp(big.NewInt(0)), "Expected the VRF job give an answer bigger than 0")
}
})`
$DIR/integration-tests/smoke/vrfv2plus_test.go: `.MustCopy()`
$DIR/integration-tests/smoke/vrfv2plus_test.go: `.Client.BalanceAt(testcontext.Get(t), common.HexToAddress(wrapperContracts.LoadTestConsumers[0].Address()), nil)`
$DIR/integration-tests/smoke/vrfv2plus_test.go: `.Get(t)`
$DIR/integration-tests/smoke/vrfv2plus_test.go: `.HexToAddress(wrapperContracts.LoadTestConsumers[0].Address())`
$DIR/integration-tests/smoke/vrfv2plus_test.go: `.Address()`
$DIR/integration-tests/smoke/vrfv2plus_test.go: `.CoordinatorV2Plus.GetSubscription(testcontext.Get(t), wrapperSubID)`
$DIR/integration-tests/smoke/vrfv2plus_test.go: `.Get(t)`
$DIR/integration-tests/smoke/vrfv2plus_test.go: `.DirectFundingRequestRandomnessAndWaitForFulfillment(
wrapperContracts.LoadTestConsumers[0],
vrfContracts.CoordinatorV2Plus,
vrfKey,
wrapperSubID,
isNativeBilling,
configCopy.VRFv2Plus.General,
l,
)`
$DIR/integration-tests/smoke/vrfv2plus_test.go: `.Sub(subBalanceBeforeRequest, randomWordsFulfilledEvent.Payment)`
$DIR/integration-tests/smoke/vrfv2plus_test.go: `.CoordinatorV2Plus.GetSubscription(testcontext.Get(t), wrapperSubID)`
$DIR/integration-tests/smoke/vrfv2plus_test.go: `.Get(t)`
$DIR/integration-tests/smoke/vrfv2plus_test.go: `.GetRequestStatus(testcontext.Get(t), randomWordsFulfilledEvent.RequestId)`
$DIR/integration-tests/smoke/vrfv2plus_test.go: `.Get(t)`
$DIR/integration-tests/smoke/vrfv2plus_test.go: `.Sub(wrapperConsumerBalanceBeforeRequestWei, consumerStatus.Paid)`
$DIR/integration-tests/smoke/vrfv2plus_test.go: `.Client.BalanceAt(testcontext.Get(t), common.HexToAddress(wrapperContracts.LoadTestConsumers[0].Address()), nil)`
$DIR/integration-tests/smoke/vrfv2plus_test.go: `.Get(t)`
$DIR/integration-tests/smoke/vrfv2plus_test.go: `.HexToAddress(wrapperContracts.LoadTestConsumers[0].Address())`
$DIR/integration-tests/smoke/vrfv2plus_test.go: `.Address()`
$DIR/integration-tests/smoke/vrfv2plus_test.go: `.LogFulfillmentDetailsNativeBilling(l, wrapperConsumerBalanceBeforeRequestWei, wrapperConsumerBalanceAfterRequestWei, consumerStatus, randomWordsFulfilledEvent)`
$DIR/integration-tests/smoke/vrfv2plus_test.go: `.Info()`
$DIR/integration-tests/smoke/vrfv2plus_test.go: `.Str("Output", w.String())`
$DIR/integration-tests/smoke/vrfv2plus_test.go: `.String()`
$DIR/integration-tests/smoke/vrfv2plus_test.go: `.Msg("Randomness fulfilled")`
$DIR/integration-tests/smoke/vrfv2plus_test.go: `.Run("Canceling Sub And Returning Funds", func(t *testing.T) {
configCopy := config.MustCopy().(tc.TestConfig)
_, subIDs, err := vrfv2plus.SetupNewConsumersAndSubs(
testcontext.Get(t),
env,
chainID,
vrfContracts.CoordinatorV2Plus,
configCopy,
vrfContracts.LinkToken,
1,
1,
l,
)
require.NoError(t, err, "error setting up new consumers and subs")
subID := subIDs[0]
subscription, err := vrfContracts.CoordinatorV2Plus.GetSubscription(testcontext.Get(t), subID)
require.NoError(t, err, "error getting subscription information")
vrfcommon.LogSubDetails(l, subscription, subID.String(), vrfContracts.CoordinatorV2Plus)
subIDsForCancellingAfterTest = append(subIDsForCancellingAfterTest, subIDs...)
testWalletAddress, err := actions.GenerateWallet()
require.NoError(t, err)
testWalletBalanceNativeBeforeSubCancelling, err := sethClient.Client.BalanceAt(testcontext.Get(t), testWalletAddress, nil)
require.NoError(t, err)
testWalletBalanceLinkBeforeSubCancelling, err := vrfContracts.LinkToken.BalanceOf(testcontext.Get(t), testWalletAddress.String())
require.NoError(t, err)
subscriptionForCancelling, err := vrfContracts.CoordinatorV2Plus.GetSubscription(testcontext.Get(t), subID)
require.NoError(t, err, "error getting subscription information")
subBalanceLink := subscriptionForCancelling.Balance
subBalanceNative := subscriptionForCancelling.NativeBalance
l.Info().
Str("Subscription Amount Native", subBalanceNative.String()).
Str("Subscription Amount Link", subBalanceLink.String()).
Str("Returning funds from SubID", subID.String()).
Str("Returning funds to", testWalletAddress.String()).
Msg("Canceling subscription and returning funds to subscription owner")
cancellationTx, cancellationEvent, err := vrfContracts.CoordinatorV2Plus.CancelSubscription(subID, testWalletAddress)
require.NoError(t, err, "Error canceling subscription")
txGasUsed := new(big.Int).SetUint64(cancellationTx.Receipt.GasUsed)
// we don't have that information for older Geth versions
if cancellationTx.Receipt.EffectiveGasPrice == nil {
cancellationTx.Receipt.EffectiveGasPrice = new(big.Int).SetUint64(0)
}
cancellationTxFeeWei := new(big.Int).Mul(txGasUsed, cancellationTx.Receipt.EffectiveGasPrice)
l.Info().
Str("Cancellation Tx Fee Wei", cancellationTxFeeWei.String()).
Str("Effective Gas Price", cancellationTx.Receipt.EffectiveGasPrice.String()).
Uint64("Gas Used", cancellationTx.Receipt.GasUsed).
Msg("Cancellation TX Receipt")
l.Info().
Str("Returned Subscription Amount Native", cancellationEvent.AmountLink.String()).
Str("Returned Subscription Amount Link", cancellationEvent.AmountLink.String()).
Str("SubID", cancellationEvent.SubId.String()).
Str("Returned to", cancellationEvent.To.String()).
Msg("Subscription Canceled Event")
require.Equal(t, subBalanceNative, cancellationEvent.AmountNative, "SubscriptionCanceled event native amount is not equal to sub amount while canceling subscription")
require.Equal(t, subBalanceLink, cancellationEvent.AmountLink, "SubscriptionCanceled event LINK amount is not equal to sub amount while canceling subscription")
testWalletBalanceNativeAfterSubCancelling, err := sethClient.Client.BalanceAt(testcontext.Get(t), testWalletAddress, nil)
require.NoError(t, err)
testWalletBalanceLinkAfterSubCancelling, err := vrfContracts.LinkToken.BalanceOf(testcontext.Get(t), testWalletAddress.String())
require.NoError(t, err)
//Verify that sub was deleted from Coordinator
_, err = vrfContracts.CoordinatorV2Plus.GetSubscription(testcontext.Get(t), subID)
require.Error(t, err, "error not occurred when trying to get deleted subscription from old Coordinator after sub migration")
subFundsReturnedNativeActual := new(big.Int).Sub(testWalletBalanceNativeAfterSubCancelling, testWalletBalanceNativeBeforeSubCancelling)
subFundsReturnedLinkActual := new(big.Int).Sub(testWalletBalanceLinkAfterSubCancelling, testWalletBalanceLinkBeforeSubCancelling)
subFundsReturnedNativeExpected := new(big.Int).Sub(subBalanceNative, cancellationTxFeeWei)
deltaSpentOnCancellationTxFee := new(big.Int).Sub(subBalanceNative, subFundsReturnedNativeActual)
l.Info().
Str("Sub Balance - Native", subBalanceNative.String()).
Str("Delta Spent On Cancellation Tx Fee - `NativeBalance - subFundsReturnedNativeActual`", deltaSpentOnCancellationTxFee.String()).
Str("Cancellation Tx Fee Wei", cancellationTxFeeWei.String()).
Str("Sub Funds Returned Actual - Native", subFundsReturnedNativeActual.String()).
Str("Sub Funds Returned Expected - `NativeBalance - cancellationTxFeeWei`", subFundsReturnedNativeExpected.String()).
Str("Sub Funds Returned Actual - Link", subFundsReturnedLinkActual.String()).
Str("Sub Balance - Link", subBalanceLink.String()).
Msg("Sub funds returned")
//todo - this fails on SIMULATED env as tx cost is calculated different as for testnets and it's not receipt.EffectiveGasPrice*receipt.GasUsed
//require.Equal(t, subFundsReturnedNativeExpected, subFundsReturnedNativeActual, "Returned funds are not equal to sub balance that was cancelled")
require.Equal(t, 1, testWalletBalanceNativeAfterSubCancelling.Cmp(testWalletBalanceNativeBeforeSubCancelling), "Native funds were not returned after sub cancellation")
require.Equal(t, 0, subBalanceLink.Cmp(subFundsReturnedLinkActual), "Returned LINK funds are not equal to sub balance that was cancelled")
})`
$DIR/integration-tests/smoke/vrfv2plus_test.go: `.MustCopy()`
$DIR/integration-tests/smoke/vrfv2plus_test.go: `.SetupNewConsumersAndSubs(
testcontext.Get(t),
env,
chainID,
vrfContracts.CoordinatorV2Plus,
configCopy,
vrfContracts.LinkToken,
1,
1,
l,
)`
$DIR/integration-tests/smoke/vrfv2plus_test.go: `.Get(t)`
$DIR/integration-tests/smoke/vrfv2plus_test.go: `.CoordinatorV2Plus.GetSubscription(testcontext.Get(t), subID)`
$DIR/integration-tests/smoke/vrfv2plus_test.go: `.Get(t)`
$DIR/integration-tests/smoke/vrfv2plus_test.go: `.LogSubDetails(l, subscription, subID.String(), vrfContracts.CoordinatorV2Plus)`
$DIR/integration-tests/smoke/vrfv2plus_test.go: `.String()`
$DIR/integration-tests/smoke/vrfv2plus_test.go: `.GenerateWallet()`
$DIR/integration-tests/smoke/vrfv2plus_test.go: `.Client.BalanceAt(testcontext.Get(t), testWalletAddress, nil)`
$DIR/integration-tests/smoke/vrfv2plus_test.go: `.Get(t)`
$DIR/integration-tests/smoke/vrfv2plus_test.go: `.LinkToken.BalanceOf(testcontext.Get(t), testWalletAddress.String())`
$DIR/integration-tests/smoke/vrfv2plus_test.go: `.Get(t)`
$DIR/integration-tests/smoke/vrfv2plus_test.go: `.String()`
$DIR/integration-tests/smoke/vrfv2plus_test.go: `.CoordinatorV2Plus.GetSubscription(testcontext.Get(t), subID)`
$DIR/integration-tests/smoke/vrfv2plus_test.go: `.Get(t)`
$DIR/integration-tests/smoke/vrfv2plus_test.go: `.Info()`
$DIR/integration-tests/smoke/vrfv2plus_test.go: `.
Str("Subscription Amount Native", subBalanceNative.String())`
$DIR/integration-tests/smoke/vrfv2plus_test.go: `.String()`
$DIR/integration-tests/smoke/vrfv2plus_test.go: `.
Str("Subscription Amount Link", subBalanceLink.String())`
$DIR/integration-tests/smoke/vrfv2plus_test.go: `.String()`
$DIR/integration-tests/smoke/vrfv2plus_test.go: `.
Str("Returning funds from SubID", subID.String())`
$DIR/integration-tests/smoke/vrfv2plus_test.go: `.String()`
$DIR/integration-tests/smoke/vrfv2plus_test.go: `.
Str("Returning funds to", testWalletAddress.String())`
$DIR/integration-tests/smoke/vrfv2plus_test.go: `.String()`
$DIR/integration-tests/smoke/vrfv2plus_test.go: `.
Msg("Canceling subscription and returning funds to subscription owner")`
$DIR/integration-tests/smoke/vrfv2plus_test.go: `.CoordinatorV2Plus.CancelSubscription(subID, testWalletAddress)`
$DIR/integration-tests/smoke/vrfv2plus_test.go: `.SetUint64(cancellationTx.Receipt.GasUsed)`
$DIR/integration-tests/smoke/vrfv2plus_test.go: `.SetUint64(0)`
$DIR/integration-tests/smoke/vrfv2plus_test.go: `.Mul(txGasUsed, cancellationTx.Receipt.EffectiveGasPrice)`
$DIR/integration-tests/smoke/vrfv2plus_test.go: `.Info()`
$DIR/integration-tests/smoke/vrfv2plus_test.go: `.
Str("Cancellation Tx Fee Wei", cancellationTxFeeWei.String())`
$DIR/integration-tests/smoke/vrfv2plus_test.go: `.String()`
$DIR/integration-tests/smoke/vrfv2plus_test.go: `.
Str("Effective Gas Price", cancellationTx.Receipt.EffectiveGasPrice.String())`
$DIR/integration-tests/smoke/vrfv2plus_test.go: `.Receipt.EffectiveGasPrice.String()`
$DIR/integration-tests/smoke/vrfv2plus_test.go: `.
Uint64("Gas Used", cancellationTx.Receipt.GasUsed)`
$DIR/integration-tests/smoke/vrfv2plus_test.go: `.
Msg("Cancellation TX Receipt")`
$DIR/integration-tests/smoke/vrfv2plus_test.go: `.Info()`
$DIR/integration-tests/smoke/vrfv2plus_test.go: `.
Str("Returned Subscription Amount Native", cancellationEvent.AmountLink.String())`
$DIR/integration-tests/smoke/vrfv2plus_test.go: `.AmountLink.String()`
$DIR/integration-tests/smoke/vrfv2plus_test.go: `.
Str("Returned Subscription Amount Link", cancellationEvent.AmountLink.String())`
$DIR/integration-tests/smoke/vrfv2plus_test.go: `.AmountLink.String()`
$DIR/integration-tests/smoke/vrfv2plus_test.go: `.
Str("SubID", cancellationEvent.SubId.String())`
$DIR/integration-tests/smoke/vrfv2plus_test.go: `.SubId.String()`
$DIR/integration-tests/smoke/vrfv2plus_test.go: `.
Str("Returned to", cancellationEvent.To.String())`
$DIR/integration-tests/smoke/vrfv2plus_test.go: `.To.String()`
$DIR/integration-tests/smoke/vrfv2plus_test.go: `.
Msg("Subscription Canceled Event")`
$DIR/integration-tests/smoke/vrfv2plus_test.go: `.Client.BalanceAt(testcontext.Get(t), testWalletAddress, nil)`
$DIR/integration-tests/smoke/vrfv2plus_test.go: `.Get(t)`
$DIR/integration-tests/smoke/vrfv2plus_test.go: `.LinkToken.BalanceOf(testcontext.Get(t), testWalletAddress.String())`
$DIR/integration-tests/smoke/vrfv2plus_test.go: `.Get(t)`
$DIR/integration-tests/smoke/vrfv2plus_test.go: `.String()`
$DIR/integration-tests/smoke/vrfv2plus_test.go: `.CoordinatorV2Plus.GetSubscription(testcontext.Get(t), subID)`
$DIR/integration-tests/smoke/vrfv2plus_test.go: `.Get(t)`
$DIR/integration-tests/smoke/vrfv2plus_test.go: `.Sub(testWalletBalanceNativeAfterSubCancelling, testWalletBalanceNativeBeforeSubCancelling)`
$DIR/integration-tests/smoke/vrfv2plus_test.go: `.Sub(testWalletBalanceLinkAfterSubCancelling, testWalletBalanceLinkBeforeSubCancelling)`
$DIR/integration-tests/smoke/vrfv2plus_test.go: `.Sub(subBalanceNative, cancellationTxFeeWei)`
$DIR/integration-tests/smoke/vrfv2plus_test.go: `.Sub(subBalanceNative, subFundsReturnedNativeActual)`
$DIR/integration-tests/smoke/vrfv2plus_test.go: `.Info()`
$DIR/integration-tests/smoke/vrfv2plus_test.go: `.
Str("Sub Balance - Native", subBalanceNative.String())`
$DIR/integration-tests/smoke/vrfv2plus_test.go: `.String()`
$DIR/integration-tests/smoke/vrfv2plus_test.go: `.
Str("Delta Spent On Cancellation Tx Fee - `NativeBalance - subFundsReturnedNativeActual`", deltaSpentOnCancellationTxFee.String())`
$DIR/integration-tests/smoke/vrfv2plus_test.go: `.String()`
$DIR/integration-tests/smoke/vrfv2plus_test.go: `.
Str("Cancellation Tx Fee Wei", cancellationTxFeeWei.String())`
$DIR/integration-tests/smoke/vrfv2plus_test.go: `.String()`
$DIR/integration-tests/smoke/vrfv2plus_test.go: `.
Str("Sub Funds Returned Actual - Native", subFundsReturnedNativeActual.String())`
$DIR/integration-tests/smoke/vrfv2plus_test.go: `.String()`
$DIR/integration-tests/smoke/vrfv2plus_test.go: `.
Str("Sub Funds Returned Expected - `NativeBalance - cancellationTxFeeWei`", subFundsReturnedNativeExpected.String())`
$DIR/integration-tests/smoke/vrfv2plus_test.go: `.String()`
$DIR/integration-tests/smoke/vrfv2plus_test.go: `.
Str("Sub Funds Returned Actual - Link", subFundsReturnedLinkActual.String())`
$DIR/integration-tests/smoke/vrfv2plus_test.go: `.String()`
$DIR/integration-tests/smoke/vrfv2plus_test.go: `.
Str("Sub Balance - Link", subBalanceLink.String())`
$DIR/integration-tests/smoke/vrfv2plus_test.go: `.String()`
$DIR/integration-tests/smoke/vrfv2plus_test.go: `.
Msg("Sub funds returned")`
$DIR/integration-tests/smoke/vrfv2plus_test.go: `.Run("Owner Canceling Sub And Returning Funds While Having Pending Requests", func(t *testing.T) {
configCopy := config.MustCopy().(tc.TestConfig)
testConfig := configCopy.VRFv2Plus.General
//underfund subs in order rand fulfillments to fail
testConfig.SubscriptionFundingAmountNative = ptr.Ptr(float64(0))
testConfig.SubscriptionFundingAmountLink = ptr.Ptr(float64(0))
consumers, subIDs, err := vrfv2plus.SetupNewConsumersAndSubs(
testcontext.Get(t),
env,
chainID,
vrfContracts.CoordinatorV2Plus,
configCopy,
vrfContracts.LinkToken,
1,
1,
l,
)
require.NoError(t, err, "error setting up new consumers and subs")
subID := subIDs[0]
subscription, err := vrfContracts.CoordinatorV2Plus.GetSubscription(testcontext.Get(t), subID)
require.NoError(t, err, "error getting subscription information")
vrfcommon.LogSubDetails(l, subscription, subID.String(), vrfContracts.CoordinatorV2Plus)
subIDsForCancellingAfterTest = append(subIDsForCancellingAfterTest, subIDs...)
activeSubscriptionIdsBeforeSubCancellation, err := vrfContracts.CoordinatorV2Plus.GetActiveSubscriptionIds(testcontext.Get(t), big.NewInt(0), big.NewInt(0))
require.NoError(t, err)
require.True(t, it_utils.BigIntSliceContains(activeSubscriptionIdsBeforeSubCancellation, subID))
pendingRequestsExist, err := vrfContracts.CoordinatorV2Plus.PendingRequestsExist(testcontext.Get(t), subID)
require.NoError(t, err)
require.False(t, pendingRequestsExist, "Pending requests should not exist")
configCopy.VRFv2Plus.General.RandomWordsFulfilledEventTimeout = ptr.Ptr(blockchain.StrDuration{Duration: 5 * time.Second})
_, _, err = vrfv2plus.RequestRandomnessAndWaitForFulfillment(
consumers[0],
vrfContracts.CoordinatorV2Plus,
vrfKey,
subID,
false,
configCopy.VRFv2Plus.General,
l,
0,
)
require.Error(t, err, "error should occur for waiting for fulfilment due to low sub balance")
_, _, err = vrfv2plus.RequestRandomnessAndWaitForFulfillment(
consumers[0],
vrfContracts.CoordinatorV2Plus,
vrfKey,
subID,
true,
configCopy.VRFv2Plus.General,
l,
0,
)
require.Error(t, err, "error should occur for waiting for fulfilment due to low sub balance")
pendingRequestsExist, err = vrfContracts.CoordinatorV2Plus.PendingRequestsExist(testcontext.Get(t), subID)
require.NoError(t, err)
require.True(t, pendingRequestsExist, "Pending requests should exist after unfulfilled rand requests due to low sub balance")
walletBalanceNativeBeforeSubCancelling, err := sethClient.Client.BalanceAt(testcontext.Get(t), common.HexToAddress(sethClient.MustGetRootKeyAddress().Hex()), nil)
require.NoError(t, err)
walletBalanceLinkBeforeSubCancelling, err := vrfContracts.LinkToken.BalanceOf(testcontext.Get(t), sethClient.MustGetRootKeyAddress().Hex())
require.NoError(t, err)
subscriptionForCancelling, err := vrfContracts.CoordinatorV2Plus.GetSubscription(testcontext.Get(t), subID)
require.NoError(t, err, "error getting subscription information")
subBalanceLink := subscriptionForCancelling.Balance
subBalanceNative := subscriptionForCancelling.NativeBalance
l.Info().
Str("Subscription Amount Native", subBalanceNative.String()).
Str("Subscription Amount Link", subBalanceLink.String()).
Str("Returning funds from SubID", subID.String()).
Str("Returning funds to", sethClient.MustGetRootKeyAddress().Hex()).
Msg("Canceling subscription and returning funds to subscription owner")
cancellationTx, cancellationEvent, err := vrfContracts.CoordinatorV2Plus.OwnerCancelSubscription(subID)
require.NoError(t, err, "Error canceling subscription")
txGasUsed := new(big.Int).SetUint64(cancellationTx.Receipt.GasUsed)
// we don't have that information for older Geth versions
if cancellationTx.Receipt.EffectiveGasPrice == nil {
cancellationTx.Receipt.EffectiveGasPrice = new(big.Int).SetUint64(0)
}
cancellationTxFeeWei := new(big.Int).Mul(txGasUsed, cancellationTx.Receipt.EffectiveGasPrice)
l.Info().
Str("Cancellation Tx Fee Wei", cancellationTxFeeWei.String()).
Str("Effective Gas Price", cancellationTx.Receipt.EffectiveGasPrice.String()).
Uint64("Gas Used", cancellationTx.Receipt.GasUsed).
Msg("Cancellation TX Receipt")
l.Info().
Str("Returned Subscription Amount Native", cancellationEvent.AmountNative.String()).
Str("Returned Subscription Amount Link", cancellationEvent.AmountLink.String()).
Str("SubID", cancellationEvent.SubId.String()).
Str("Returned to", cancellationEvent.To.String()).
Msg("Subscription Canceled Event")
require.Equal(t, subBalanceNative, cancellationEvent.AmountNative, "SubscriptionCanceled event native amount is not equal to sub amount while canceling subscription")
require.Equal(t, subBalanceLink, cancellationEvent.AmountLink, "SubscriptionCanceled event LINK amount is not equal to sub amount while canceling subscription")
walletBalanceNativeAfterSubCancelling, err := sethClient.Client.BalanceAt(testcontext.Get(t), common.HexToAddress(sethClient.MustGetRootKeyAddress().Hex()), nil)
require.NoError(t, err)
walletBalanceLinkAfterSubCancelling, err := vrfContracts.LinkToken.BalanceOf(testcontext.Get(t), sethClient.MustGetRootKeyAddress().Hex())
require.NoError(t, err)
//Verify that sub was deleted from Coordinator
_, err = vrfContracts.CoordinatorV2Plus.GetSubscription(testcontext.Get(t), subID)
require.Error(t, err, "error not occurred when trying to get deleted subscription from old Coordinator after sub migration")
subFundsReturnedNativeActual := new(big.Int).Sub(walletBalanceNativeAfterSubCancelling, walletBalanceNativeBeforeSubCancelling)
subFundsReturnedLinkActual := new(big.Int).Sub(walletBalanceLinkAfterSubCancelling, walletBalanceLinkBeforeSubCancelling)
subFundsReturnedNativeExpected := new(big.Int).Sub(subBalanceNative, cancellationTxFeeWei)
deltaSpentOnCancellationTxFee := new(big.Int).Sub(subBalanceNative, subFundsReturnedNativeActual)
l.Info().
Str("Sub Balance - Native", subBalanceNative.String()).
Str("Delta Spent On Cancellation Tx Fee - `NativeBalance - subFundsReturnedNativeActual`", deltaSpentOnCancellationTxFee.String()).
Str("Cancellation Tx Fee Wei", cancellationTxFeeWei.String()).
Str("Sub Funds Returned Actual - Native", subFundsReturnedNativeActual.String()).
Str("Sub Funds Returned Expected - `NativeBalance - cancellationTxFeeWei`", subFundsReturnedNativeExpected.String()).
Str("Sub Funds Returned Actual - Link", subFundsReturnedLinkActual.String()).
Str("Sub Balance - Link", subBalanceLink.String()).
Str("walletBalanceNativeBeforeSubCancelling", walletBalanceNativeBeforeSubCancelling.String()).
Str("walletBalanceNativeAfterSubCancelling", walletBalanceNativeAfterSubCancelling.String()).
Msg("Sub funds returned")
//todo - need to use different wallet for each test to verify exact amount of Native/LINK returned
//todo - as defaultWallet is used in other tests in parallel which might affect the balance - TT-684
//require.Equal(t, 1, walletBalanceNativeAfterSubCancelling.Cmp(walletBalanceNativeBeforeSubCancelling), "Native funds were not returned after sub cancellation")
//todo - this fails on SIMULATED env as tx cost is calculated different as for testnets and it's not receipt.EffectiveGasPrice*receipt.GasUsed
//require.Equal(t, subFundsReturnedNativeExpected, subFundsReturnedNativeActual, "Returned funds are not equal to sub balance that was cancelled")
require.Equal(t, 0, subBalanceLink.Cmp(subFundsReturnedLinkActual), "Returned LINK funds are not equal to sub balance that was cancelled")
activeSubscriptionIdsAfterSubCancellation, err := vrfContracts.CoordinatorV2Plus.GetActiveSubscriptionIds(testcontext.Get(t), big.NewInt(0), big.NewInt(0))
require.NoError(t, err, "error getting active subscription ids")
require.False(
t,
it_utils.BigIntSliceContains(activeSubscriptionIdsAfterSubCancellation, subID),
"Active subscription ids should not contain sub id after sub cancellation",
)
})`
$DIR/integration-tests/smoke/vrfv2plus_test.go: `.MustCopy()`
$DIR/integration-tests/smoke/vrfv2plus_test.go: `.Ptr(float64(0))`
$DIR/integration-tests/smoke/vrfv2plus_test.go: `.Ptr(float64(0))`
$DIR/integration-tests/smoke/vrfv2plus_test.go: `.SetupNewConsumersAndSubs(
testcontext.Get(t),
env,
chainID,
vrfContracts.CoordinatorV2Plus,
configCopy,
vrfContracts.LinkToken,
1,
1,
l,
)`
$DIR/integration-tests/smoke/vrfv2plus_test.go: `.Get(t)`
$DIR/integration-tests/smoke/vrfv2plus_test.go: `.CoordinatorV2Plus.GetSubscription(testcontext.Get(t), subID)`
$DIR/integration-tests/smoke/vrfv2plus_test.go: `.Get(t)`
$DIR/integration-tests/smoke/vrfv2plus_test.go: `.LogSubDetails(l, subscription, subID.String(), vrfContracts.CoordinatorV2Plus)`
$DIR/integration-tests/smoke/vrfv2plus_test.go: `.String()`
$DIR/integration-tests/smoke/vrfv2plus_test.go: `.CoordinatorV2Plus.GetActiveSubscriptionIds(testcontext.Get(t), big.NewInt(0), big.NewInt(0))`
$DIR/integration-tests/smoke/vrfv2plus_test.go: `.Get(t)`
$DIR/integration-tests/smoke/vrfv2plus_test.go: `.NewInt(0)`
$DIR/integration-tests/smoke/vrfv2plus_test.go: `.NewInt(0)`
$DIR/integration-tests/smoke/vrfv2plus_test.go: `.CoordinatorV2Plus.PendingRequestsExist(testcontext.Get(t), subID)`
$DIR/integration-tests/smoke/vrfv2plus_test.go: `.Get(t)`
$DIR/integration-tests/smoke/vrfv2plus_test.go: `.Ptr(blockchain.StrDuration{Duration: 5 * time.Second})`
$DIR/integration-tests/smoke/vrfv2plus_test.go: `.RequestRandomnessAndWaitForFulfillment(
consumers[0],
vrfContracts.CoordinatorV2Plus,
vrfKey,
subID,
false,
configCopy.VRFv2Plus.General,
l,
0,
)`
$DIR/integration-tests/smoke/vrfv2plus_test.go: `.RequestRandomnessAndWaitForFulfillment(
consumers[0],
vrfContracts.CoordinatorV2Plus,
vrfKey,
subID,
true,
configCopy.VRFv2Plus.General,
l,
0,
)`
$DIR/integration-tests/smoke/vrfv2plus_test.go: `.CoordinatorV2Plus.PendingRequestsExist(testcontext.Get(t), subID)`
$DIR/integration-tests/smoke/vrfv2plus_test.go: `.Get(t)`
$DIR/integration-tests/smoke/vrfv2plus_test.go: `.Client.BalanceAt(testcontext.Get(t), common.HexToAddress(sethClient.MustGetRootKeyAddress().Hex()), nil)`
$DIR/integration-tests/smoke/vrfv2plus_test.go: `.Get(t)`
$DIR/integration-tests/smoke/vrfv2plus_test.go: `.HexToAddress(sethClient.MustGetRootKeyAddress().Hex())`
$DIR/integration-tests/smoke/vrfv2plus_test.go: `.MustGetRootKeyAddress()`
$DIR/integration-tests/smoke/vrfv2plus_test.go: `.Hex()`
$DIR/integration-tests/smoke/vrfv2plus_test.go: `.LinkToken.BalanceOf(testcontext.Get(t), sethClient.MustGetRootKeyAddress().Hex())`
$DIR/integration-tests/smoke/vrfv2plus_test.go: `.Get(t)`
$DIR/integration-tests/smoke/vrfv2plus_test.go: `.MustGetRootKeyAddress()`
$DIR/integration-tests/smoke/vrfv2plus_test.go: `.Hex()`
$DIR/integration-tests/smoke/vrfv2plus_test.go: `.CoordinatorV2Plus.GetSubscription(testcontext.Get(t), subID)`
$DIR/integration-tests/smoke/vrfv2plus_test.go: `.Get(t)`
$DIR/integration-tests/smoke/vrfv2plus_test.go: `.Info()`
$DIR/integration-tests/smoke/vrfv2plus_test.go: `.
Str("Subscription Amount Native", subBalanceNative.String())`
$DIR/integration-tests/smoke/vrfv2plus_test.go: `.String()`
$DIR/integration-tests/smoke/vrfv2plus_test.go: `.
Str("Subscription Amount Link", subBalanceLink.String())`
$DIR/integration-tests/smoke/vrfv2plus_test.go: `.String()`
$DIR/integration-tests/smoke/vrfv2plus_test.go: `.
Str("Returning funds from SubID", subID.String())`
$DIR/integration-tests/smoke/vrfv2plus_test.go: `.String()`
$DIR/integration-tests/smoke/vrfv2plus_test.go: `.
Str("Returning funds to", sethClient.MustGetRootKeyAddress().Hex())`
$DIR/integration-tests/smoke/vrfv2plus_test.go: `.MustGetRootKeyAddress()`
$DIR/integration-tests/smoke/vrfv2plus_test.go: `.Hex()`
$DIR/integration-tests/smoke/vrfv2plus_test.go: `.
Msg("Canceling subscription and returning funds to subscription owner")`
$DIR/integration-tests/smoke/vrfv2plus_test.go: `.CoordinatorV2Plus.OwnerCancelSubscription(subID)`
$DIR/integration-tests/smoke/vrfv2plus_test.go: `.SetUint64(cancellationTx.Receipt.GasUsed)`
$DIR/integration-tests/smoke/vrfv2plus_test.go: `.SetUint64(0)`
$DIR/integration-tests/smoke/vrfv2plus_test.go: `.Mul(txGasUsed, cancellationTx.Receipt.EffectiveGasPrice)`
$DIR/integration-tests/smoke/vrfv2plus_test.go: `.Info()`
$DIR/integration-tests/smoke/vrfv2plus_test.go: `.
Str("Cancellation Tx Fee Wei", cancellationTxFeeWei.String())`
$DIR/integration-tests/smoke/vrfv2plus_test.go: `.String()`
$DIR/integration-tests/smoke/vrfv2plus_test.go: `.
Str("Effective Gas Price", cancellationTx.Receipt.EffectiveGasPrice.String())`
$DIR/integration-tests/smoke/vrfv2plus_test.go: `.Receipt.EffectiveGasPrice.String()`
$DIR/integration-tests/smoke/vrfv2plus_test.go: `.
Uint64("Gas Used", cancellationTx.Receipt.GasUsed)`
$DIR/integration-tests/smoke/vrfv2plus_test.go: `.
Msg("Cancellation TX Receipt")`
$DIR/integration-tests/smoke/vrfv2plus_test.go: `.Info()`
$DIR/integration-tests/smoke/vrfv2plus_test.go: `.
Str("Returned Subscription Amount Native", cancellationEvent.AmountNative.String())`
$DIR/integration-tests/smoke/vrfv2plus_test.go: `.AmountNative.String()`
$DIR/integration-tests/smoke/vrfv2plus_test.go: `.
Str("Returned Subscription Amount Link", cancellationEvent.AmountLink.String())`
$DIR/integration-tests/smoke/vrfv2plus_test.go: `.AmountLink.String()`
$DIR/integration-tests/smoke/vrfv2plus_test.go: `.
Str("SubID", cancellationEvent.SubId.String())`
$DIR/integration-tests/smoke/vrfv2plus_test.go: `.SubId.String()`
$DIR/integration-tests/smoke/vrfv2plus_test.go: `.
Str("Returned to", cancellationEvent.To.String())`
$DIR/integration-tests/smoke/vrfv2plus_test.go: `.To.String()`
$DIR/integration-tests/smoke/vrfv2plus_test.go: `.
Msg("Subscription Canceled Event")`
$DIR/integration-tests/smoke/vrfv2plus_test.go: `.Client.BalanceAt(testcontext.Get(t), common.HexToAddress(sethClient.MustGetRootKeyAddress().Hex()), nil)`
$DIR/integration-tests/smoke/vrfv2plus_test.go: `.Get(t)`
$DIR/integration-tests/smoke/vrfv2plus_test.go: `.HexToAddress(sethClient.MustGetRootKeyAddress().Hex())`
$DIR/integration-tests/smoke/vrfv2plus_test.go: `.MustGetRootKeyAddress()`
$DIR/integration-tests/smoke/vrfv2plus_test.go: `.Hex()`
$DIR/integration-tests/smoke/vrfv2plus_test.go: `.LinkToken.BalanceOf(testcontext.Get(t), sethClient.MustGetRootKeyAddress().Hex())`
$DIR/integration-tests/smoke/vrfv2plus_test.go: `.Get(t)`
$DIR/integration-tests/smoke/vrfv2plus_test.go: `.MustGetRootKeyAddress()`
$DIR/integration-tests/smoke/vrfv2plus_test.go: `.Hex()`
$DIR/integration-tests/smoke/vrfv2plus_test.go: `.CoordinatorV2Plus.GetSubscription(testcontext.Get(t), subID)`
$DIR/integration-tests/smoke/vrfv2plus_test.go: `.Get(t)`
$DIR/integration-tests/smoke/vrfv2plus_test.go: `.Sub(walletBalanceNativeAfterSubCancelling, walletBalanceNativeBeforeSubCancelling)`
$DIR/integration-tests/smoke/vrfv2plus_test.go: `.Sub(walletBalanceLinkAfterSubCancelling, walletBalanceLinkBeforeSubCancelling)`
$DIR/integration-tests/smoke/vrfv2plus_test.go: `.Sub(subBalanceNative, cancellationTxFeeWei)`
$DIR/integration-tests/smoke/vrfv2plus_test.go: `.Sub(subBalanceNative, subFundsReturnedNativeActual)`
$DIR/integration-tests/smoke/vrfv2plus_test.go: `.Info()`
$DIR/integration-tests/smoke/vrfv2plus_test.go: `.
Str("Sub Balance - Native", subBalanceNative.String())`
$DIR/integration-tests/smoke/vrfv2plus_test.go: `.String()`
$DIR/integration-tests/smoke/vrfv2plus_test.go: `.
Str("Delta Spent On Cancellation Tx Fee - `NativeBalance - subFundsReturnedNativeActual`", deltaSpentOnCancellationTxFee.String())`
$DIR/integration-tests/smoke/vrfv2plus_test.go: `.String()`
$DIR/integration-tests/smoke/vrfv2plus_test.go: `.
Str("Cancellation Tx Fee Wei", cancellationTxFeeWei.String())`
$DIR/integration-tests/smoke/vrfv2plus_test.go: `.String()`
$DIR/integration-tests/smoke/vrfv2plus_test.go: `.
Str("Sub Funds Returned Actual - Native", subFundsReturnedNativeActual.String())`
$DIR/integration-tests/smoke/vrfv2plus_test.go: `.String()`
$DIR/integration-tests/smoke/vrfv2plus_test.go: `.
Str("Sub Funds Returned Expected - `NativeBalance - cancellationTxFeeWei`", subFundsReturnedNativeExpected.String())`
$DIR/integration-tests/smoke/vrfv2plus_test.go: `.String()`
$DIR/integration-tests/smoke/vrfv2plus_test.go: `.
Str("Sub Funds Returned Actual - Link", subFundsReturnedLinkActual.String())`
$DIR/integration-tests/smoke/vrfv2plus_test.go: `.String()`
$DIR/integration-tests/smoke/vrfv2plus_test.go: `.
Str("Sub Balance - Link", subBalanceLink.String())`
$DIR/integration-tests/smoke/vrfv2plus_test.go: `.String()`
$DIR/integration-tests/smoke/vrfv2plus_test.go: `.
Str("walletBalanceNativeBeforeSubCancelling", walletBalanceNativeBeforeSubCancelling.String())`
$DIR/integration-tests/smoke/vrfv2plus_test.go: `.String()`
$DIR/integration-tests/smoke/vrfv2plus_test.go: `.
Str("walletBalanceNativeAfterSubCancelling", walletBalanceNativeAfterSubCancelling.String())`
$DIR/integration-tests/smoke/vrfv2plus_test.go: `.String()`
$DIR/integration-tests/smoke/vrfv2plus_test.go: `.
Msg("Sub funds returned")`
$DIR/integration-tests/smoke/vrfv2plus_test.go: `.CoordinatorV2Plus.GetActiveSubscriptionIds(testcontext.Get(t), big.NewInt(0), big.NewInt(0))`
$DIR/integration-tests/smoke/vrfv2plus_test.go: `.Get(t)`
$DIR/integration-tests/smoke/vrfv2plus_test.go: `.NewInt(0)`
$DIR/integration-tests/smoke/vrfv2plus_test.go: `.NewInt(0)`
$DIR/integration-tests/smoke/vrfv2plus_test.go: `.MustCopy()`
$DIR/integration-tests/smoke/vrfv2plus_test.go: `.SetupNewConsumersAndSubs(
testcontext.Get(t),
env,
chainID,
vrfContracts.CoordinatorV2Plus,
configCopy,
vrfContracts.LinkToken,
1,
1,
l,
)`
$DIR/integration-tests/smoke/vrfv2plus_test.go: `.Get(t)`
$DIR/integration-tests/smoke/vrfv2plus_test.go: `.CoordinatorV2Plus.GetSubscription(testcontext.Get(t), subID)`
$DIR/integration-tests/smoke/vrfv2plus_test.go: `.Get(t)`
$DIR/integration-tests/smoke/vrfv2plus_test.go: `.LogSubDetails(l, subscription, subID.String(), vrfContracts.CoordinatorV2Plus)`
$DIR/integration-tests/smoke/vrfv2plus_test.go: `.String()`
$DIR/integration-tests/smoke/vrfv2plus_test.go: `.RequestRandomnessAndWaitForFulfillment(
consumers[0],
vrfContracts.CoordinatorV2Plus,
vrfKey,
subID,
false,
configCopy.VRFv2Plus.General,
l,
0,
)`
$DIR/integration-tests/smoke/vrfv2plus_test.go: `.RequestRandomnessAndWaitForFulfillment(
consumers[0],
vrfContracts.CoordinatorV2Plus,
vrfKey,
subID,
true,
configCopy.VRFv2Plus.General,
l,
0,
)`
$DIR/integration-tests/smoke/vrfv2plus_test.go: `.Client.BalanceAt(testcontext.Get(t), common.HexToAddress(sethClient.MustGetRootKeyAddress().Hex()), nil)`
$DIR/integration-tests/smoke/vrfv2plus_test.go: `.Get(t)`
$DIR/integration-tests/smoke/vrfv2plus_test.go: `.HexToAddress(sethClient.MustGetRootKeyAddress().Hex())`
$DIR/integration-tests/smoke/vrfv2plus_test.go: `.MustGetRootKeyAddress()`
$DIR/integration-tests/smoke/vrfv2plus_test.go: `.Hex()`
$DIR/integration-tests/smoke/vrfv2plus_test.go: `.LinkToken.BalanceOf(testcontext.Get(t), sethClient.MustGetRootKeyAddress().Hex())`
$DIR/integration-tests/smoke/vrfv2plus_test.go: `.Get(t)`
$DIR/integration-tests/smoke/vrfv2plus_test.go: `.MustGetRootKeyAddress()`
$DIR/integration-tests/smoke/vrfv2plus_test.go: `.Hex()`
$DIR/integration-tests/smoke/vrfv2plus_test.go: `.Info()`
$DIR/integration-tests/smoke/vrfv2plus_test.go: `.
Str("Returning to", sethClient.MustGetRootKeyAddress().Hex())`
$DIR/integration-tests/smoke/vrfv2plus_test.go: `.MustGetRootKeyAddress()`
$DIR/integration-tests/smoke/vrfv2plus_test.go: `.Hex()`
$DIR/integration-tests/smoke/vrfv2plus_test.go: `.
Str("Amount", amountToWithdrawLink.String())`
$DIR/integration-tests/smoke/vrfv2plus_test.go: `.String()`
$DIR/integration-tests/smoke/vrfv2plus_test.go: `.
Msg("Invoking Oracle Withdraw for LINK")`
$DIR/integration-tests/smoke/vrfv2plus_test.go: `.CoordinatorV2Plus.Withdraw(
common.HexToAddress(sethClient.MustGetRootKeyAddress().Hex()),
)`
$DIR/integration-tests/smoke/vrfv2plus_test.go: `.HexToAddress(sethClient.MustGetRootKeyAddress().Hex())`
$DIR/integration-tests/smoke/vrfv2plus_test.go: `.MustGetRootKeyAddress()`
$DIR/integration-tests/smoke/vrfv2plus_test.go: `.Hex()`
$DIR/integration-tests/smoke/vrfv2plus_test.go: `.Info()`
$DIR/integration-tests/smoke/vrfv2plus_test.go: `.
Str("Returning to", sethClient.MustGetRootKeyAddress().Hex())`
$DIR/integration-tests/smoke/vrfv2plus_test.go: `.MustGetRootKeyAddress()`
$DIR/integration-tests/smoke/vrfv2plus_test.go: `.Hex()`
$DIR/integration-tests/smoke/vrfv2plus_test.go: `.
Str("Amount", amountToWithdrawNative.String())`
$DIR/integration-tests/smoke/vrfv2plus_test.go: `.String()`
$DIR/integration-tests/smoke/vrfv2plus_test.go: `.
Msg("Invoking Oracle Withdraw for Native")`
$DIR/integration-tests/smoke/vrfv2plus_test.go: `.CoordinatorV2Plus.WithdrawNative(
common.HexToAddress(sethClient.MustGetRootKeyAddress().Hex()),
)`
$DIR/integration-tests/smoke/vrfv2plus_test.go: `.HexToAddress(sethClient.MustGetRootKeyAddress().Hex())`
$DIR/integration-tests/smoke/vrfv2plus_test.go: `.MustGetRootKeyAddress()`
$DIR/integration-tests/smoke/vrfv2plus_test.go: `.Hex()`
$DIR/integration-tests/smoke/vrfv2plus_test.go: `.Client.BalanceAt(testcontext.Get(t), common.HexToAddress(sethClient.MustGetRootKeyAddress().Hex()), nil)`
$DIR/integration-tests/smoke/vrfv2plus_test.go: `.Get(t)`
$DIR/integration-tests/smoke/vrfv2plus_test.go: `.HexToAddress(sethClient.MustGetRootKeyAddress().Hex())`
$DIR/integration-tests/smoke/vrfv2plus_test.go: `.MustGetRootKeyAddress()`
$DIR/integration-tests/smoke/vrfv2plus_test.go: `.Hex()`
$DIR/integration-tests/smoke/vrfv2plus_test.go: `.LinkToken.BalanceOf(testcontext.Get(t), sethClient.MustGetRootKeyAddress().Hex())`
$DIR/integration-tests/smoke/vrfv2plus_test.go: `.Get(t)`
$DIR/integration-tests/smoke/vrfv2plus_test.go: `.MustGetRootKeyAddress()`
$DIR/integration-tests/smoke/vrfv2plus_test.go: `.Hex()`
$DIR/integration-tests/smoke/vrfv2plus_test.go: `.GetTestLogger(t)`
$DIR/integration-tests/smoke/vrfv2plus_test.go: `.GetConfig("Smoke", tc.VRFv2Plus)`
$DIR/integration-tests/smoke/vrfv2plus_test.go: `.MustGetSelectedNetworkConfig(config.GetNetworkConfig())`
$DIR/integration-tests/smoke/vrfv2plus_test.go: `.GetNetworkConfig()`
$DIR/integration-tests/smoke/vrfv2plus_test.go: `.GetSethClient(chainID)`
$DIR/integration-tests/smoke/vrfv2plus_test.go: `.Cfg.IsSimulatedNetwork()`
$DIR/integration-tests/smoke/vrfv2plus_test.go: `.Info()`
$DIR/integration-tests/smoke/vrfv2plus_test.go: `.
Str("Network Name", sethClient.Cfg.Network.Name)`
$DIR/integration-tests/smoke/vrfv2plus_test.go: `.
Msg("Network is a simulated network. Skipping fund return for Coordinator Subscriptions.")`
$DIR/integration-tests/smoke/vrfv2plus_test.go: `.CancelSubsAndReturnFunds(testcontext.Get(t), vrfContracts, sethClient.MustGetRootKeyAddress().Hex(), subIDsForCancellingAfterTest, l)`
$DIR/integration-tests/smoke/vrfv2plus_test.go: `.Get(t)`
$DIR/integration-tests/smoke/vrfv2plus_test.go: `.MustGetRootKeyAddress()`
$DIR/integration-tests/smoke/vrfv2plus_test.go: `.Hex()`
$DIR/integration-tests/smoke/vrfv2plus_test.go: `.Cleanup(test_env.CleanupOpts{TestName: t.Name()})`
$DIR/integration-tests/smoke/vrfv2plus_test.go: `.Name()`
$DIR/integration-tests/smoke/vrfv2plus_test.go: `.SetupVRFV2PlusUniverse(testcontext.Get(t), t, vrfEnvConfig, newEnvConfig, l)`
$DIR/integration-tests/smoke/vrfv2plus_test.go: `.Get(t)`
$DIR/integration-tests/smoke/vrfv2plus_test.go: `.MustCopy()`
$DIR/integration-tests/smoke/vrfv2plus_test.go: `.SetupNewConsumersAndSubs(
testcontext.Get(t),
env,
chainID,
vrfContracts.CoordinatorV2Plus,
configCopy,
vrfContracts.LinkToken,
1,
1,
l,
)`
$DIR/integration-tests/smoke/vrfv2plus_test.go: `.Get(t)`
$DIR/integration-tests/smoke/vrfv2plus_test.go: `.CoordinatorV2Plus.GetSubscription(testcontext.Get(t), subID)`
$DIR/integration-tests/smoke/vrfv2plus_test.go: `.Get(t)`
$DIR/integration-tests/smoke/vrfv2plus_test.go: `.LogSubDetails(l, subscription, subID.String(), vrfContracts.CoordinatorV2Plus)`
$DIR/integration-tests/smoke/vrfv2plus_test.go: `.String()`
$DIR/integration-tests/smoke/vrfv2plus_test.go: `.CLNode.API.ReadTxKeys("evm")`
$DIR/integration-tests/smoke/vrfv2plus_test.go: `.RequestRandomnessAndWaitForFulfillment(
consumers[0],
vrfContracts.CoordinatorV2Plus,
vrfKey,
subID,
isNativeBilling,
configCopy.VRFv2Plus.General,
l,
0,
)`
$DIR/integration-tests/smoke/vrfv2plus_test.go: `.GetSethClient(chainID)`
$DIR/integration-tests/smoke/vrfv2plus_test.go: `.Client.TransactionByHash(testcontext.Get(t), randomWordsFulfilledEvent.Raw.TxHash)`
$DIR/integration-tests/smoke/vrfv2plus_test.go: `.Get(t)`
$DIR/integration-tests/smoke/vrfv2plus_test.go: `.GetTxFromAddress(fulfillmentTx)`
$DIR/integration-tests/smoke/vrfv2plus_test.go: `.Diff(txKeyAddresses, fulfillmentTxFromAddresses, cmpopts.SortSlices(less))`
$DIR/integration-tests/smoke/vrfv2plus_test.go: `.SortSlices(less)`
$DIR/integration-tests/smoke/vrfv2plus_test.go: `.GetTestLogger(t)`
$DIR/integration-tests/smoke/vrfv2plus_test.go: `.GetConfig("Smoke", tc.VRFv2Plus)`
$DIR/integration-tests/smoke/vrfv2plus_test.go: `.MustGetSelectedNetworkConfig(config.GetNetworkConfig())`
$DIR/integration-tests/smoke/vrfv2plus_test.go: `.GetNetworkConfig()`
$DIR/integration-tests/smoke/vrfv2plus_test.go: `.GetSethClient(chainID)`
$DIR/integration-tests/smoke/vrfv2plus_test.go: `.Cfg.IsSimulatedNetwork()`
$DIR/integration-tests/smoke/vrfv2plus_test.go: `.Info()`
$DIR/integration-tests/smoke/vrfv2plus_test.go: `.
Str("Network Name", sethClient.Cfg.Network.Name)`
$DIR/integration-tests/smoke/vrfv2plus_test.go: `.
Msg("Network is a simulated network. Skipping fund return for Coordinator Subscriptions.")`
$DIR/integration-tests/smoke/vrfv2plus_test.go: `.CancelSubsAndReturnFunds(testcontext.Get(t), vrfContracts, sethClient.MustGetRootKeyAddress().Hex(), subIDsForCancellingAfterTest, l)`
$DIR/integration-tests/smoke/vrfv2plus_test.go: `.Get(t)`
$DIR/integration-tests/smoke/vrfv2plus_test.go: `.MustGetRootKeyAddress()`
$DIR/integration-tests/smoke/vrfv2plus_test.go: `.Hex()`
$DIR/integration-tests/smoke/vrfv2plus_test.go: `.Cleanup(test_env.CleanupOpts{TestName: t.Name()})`
$DIR/integration-tests/smoke/vrfv2plus_test.go: `.Name()`
$DIR/integration-tests/smoke/vrfv2plus_test.go: `.SetupVRFV2PlusUniverse(testcontext.Get(t), t, vrfEnvConfig, newEnvConfig, l)`
$DIR/integration-tests/smoke/vrfv2plus_test.go: `.Get(t)`
$DIR/integration-tests/smoke/vrfv2plus_test.go: `.GetSethClient(chainID)`
$DIR/integration-tests/smoke/vrfv2plus_test.go: `.Run("Test migration of Subscription Billing subID", func(t *testing.T) {
configCopy := config.MustCopy().(tc.TestConfig)
consumers, subIDs, err := vrfv2plus.SetupNewConsumersAndSubs(
testcontext.Get(t),
env,
chainID,
vrfContracts.CoordinatorV2Plus,
configCopy,
vrfContracts.LinkToken,
2,
1,
l,
)
require.NoError(t, err, "error setting up new consumers and subs")
subID := subIDs[0]
subscription, err := vrfContracts.CoordinatorV2Plus.GetSubscription(testcontext.Get(t), subID)
require.NoError(t, err, "error getting subscription information")
vrfcommon.LogSubDetails(l, subscription, subID.String(), vrfContracts.CoordinatorV2Plus)
subIDsForCancellingAfterTest = append(subIDsForCancellingAfterTest, subIDs...)
activeSubIdsOldCoordinatorBeforeMigration, err := vrfContracts.CoordinatorV2Plus.GetActiveSubscriptionIds(testcontext.Get(t), big.NewInt(0), big.NewInt(0))
require.NoError(t, err, "error occurred getting active sub ids")
require.Len(t, activeSubIdsOldCoordinatorBeforeMigration, 1, "Active Sub Ids length is not equal to 1")
require.Equal(t, subID, activeSubIdsOldCoordinatorBeforeMigration[0])
oldSubscriptionBeforeMigration, err := vrfContracts.CoordinatorV2Plus.GetSubscription(testcontext.Get(t), subID)
require.NoError(t, err, "error getting subscription information")
//Migration Process
newCoordinator, err := contracts.DeployVRFCoordinatorV2PlusUpgradedVersion(sethClient, vrfContracts.BHS.Address())
require.NoError(t, err, "error deploying VRF CoordinatorV2PlusUpgradedVersion")
_, err = vrfv2plus.VRFV2PlusUpgradedVersionRegisterProvingKey(vrfKey.VRFKey, newCoordinator, uint64(assets.GWei(*configCopy.VRFv2Plus.General.CLNodeMaxGasPriceGWei).Int64()))
require.NoError(t, err, fmt.Errorf("%s, err: %w", vrfcommon.ErrRegisteringProvingKey, err))
err = newCoordinator.SetConfig(
*configCopy.VRFv2Plus.General.MinimumConfirmations,
*configCopy.VRFv2Plus.General.MaxGasLimitCoordinatorConfig,
*configCopy.VRFv2Plus.General.StalenessSeconds,
*configCopy.VRFv2Plus.General.GasAfterPaymentCalculation,
big.NewInt(*configCopy.VRFv2Plus.General.LinkNativeFeedResponse),
*configCopy.VRFv2Plus.General.FulfillmentFlatFeeNativePPM,
*configCopy.VRFv2Plus.General.FulfillmentFlatFeeLinkDiscountPPM,
*configCopy.VRFv2Plus.General.NativePremiumPercentage,
*configCopy.VRFv2Plus.General.LinkPremiumPercentage,
)
require.NoError(t, err)
err = newCoordinator.SetLINKAndLINKNativeFeed(vrfContracts.LinkToken.Address(), vrfContracts.MockETHLINKFeed.Address())
require.NoError(t, err, vrfv2plus.ErrSetLinkNativeLinkFeed)
vrfJobSpecConfig := vrfcommon.VRFJobSpecConfig{
ForwardingAllowed: *configCopy.VRFv2Plus.General.VRFJobForwardingAllowed,
CoordinatorAddress: newCoordinator.Address(),
FromAddresses: nodeTypeToNodeMap[vrfcommon.VRF].TXKeyAddressStrings,
EVMChainID: fmt.Sprint(chainID),
MinIncomingConfirmations: int(*configCopy.VRFv2Plus.General.MinimumConfirmations),
PublicKey: vrfKey.VRFKey.Data.ID,
EstimateGasMultiplier: *configCopy.VRFv2Plus.General.VRFJobEstimateGasMultiplier,
BatchFulfillmentEnabled: false,
BatchFulfillmentGasMultiplier: *configCopy.VRFv2Plus.General.VRFJobBatchFulfillmentGasMultiplier,
PollPeriod: configCopy.VRFv2Plus.General.VRFJobPollPeriod.Duration,
RequestTimeout: configCopy.VRFv2Plus.General.VRFJobRequestTimeout.Duration,
SimulationBlock: configCopy.VRFv2Plus.General.VRFJobSimulationBlock,
}
_, err = vrfv2plus.CreateVRFV2PlusJob(
nodeTypeToNodeMap[vrfcommon.VRF].CLNode.API,
vrfJobSpecConfig,
)
require.NoError(t, err, vrfv2plus.ErrCreateVRFV2PlusJobs)
err = vrfContracts.CoordinatorV2Plus.RegisterMigratableCoordinator(newCoordinator.Address())
require.NoError(t, err, "error registering migratable coordinator")
oldCoordinatorLinkTotalBalanceBeforeMigration, oldCoordinatorEthTotalBalanceBeforeMigration, err := vrfv2plus.GetCoordinatorTotalBalance(vrfContracts.CoordinatorV2Plus)
require.NoError(t, err)
migratedCoordinatorLinkTotalBalanceBeforeMigration, migratedCoordinatorEthTotalBalanceBeforeMigration, err := vrfv2plus.GetUpgradedCoordinatorTotalBalance(newCoordinator)
require.NoError(t, err)
_, migrationCompletedEvent, err := vrfContracts.CoordinatorV2Plus.Migrate(subID, newCoordinator.Address())
require.NoError(t, err, "error migrating sub id ", subID.String(), " from ", vrfContracts.CoordinatorV2Plus.Address(), " to new Coordinator address ", newCoordinator.Address())
vrfv2plus.LogMigrationCompletedEvent(l, migrationCompletedEvent, vrfContracts.CoordinatorV2Plus)
oldCoordinatorLinkTotalBalanceAfterMigration, oldCoordinatorEthTotalBalanceAfterMigration, err := vrfv2plus.GetCoordinatorTotalBalance(vrfContracts.CoordinatorV2Plus)
require.NoError(t, err)
migratedCoordinatorLinkTotalBalanceAfterMigration, migratedCoordinatorEthTotalBalanceAfterMigration, err := vrfv2plus.GetUpgradedCoordinatorTotalBalance(newCoordinator)
require.NoError(t, err)
migratedSubscription, err := newCoordinator.GetSubscription(testcontext.Get(t), subID)
require.NoError(t, err, "error getting subscription information")
vrfv2plus.LogSubDetailsAfterMigration(l, newCoordinator, subID, migratedSubscription)
//Verify that Coordinators were updated in Consumers
for _, consumer := range consumers {
coordinatorAddressInConsumerAfterMigration, err := consumer.GetCoordinator(testcontext.Get(t))
require.NoError(t, err, "error getting Coordinator from Consumer contract")
require.Equal(t, newCoordinator.Address(), coordinatorAddressInConsumerAfterMigration.String())
l.Info().
Str("Consumer", consumer.Address()).
Str("Coordinator", coordinatorAddressInConsumerAfterMigration.String()).
Msg("Coordinator Address in Consumer After Migration")
}
//Verify old and migrated subs
require.Equal(t, oldSubscriptionBeforeMigration.NativeBalance, migratedSubscription.NativeBalance)
require.Equal(t, oldSubscriptionBeforeMigration.Balance, migratedSubscription.Balance)
require.Equal(t, oldSubscriptionBeforeMigration.SubOwner, migratedSubscription.SubOwner)
require.Equal(t, oldSubscriptionBeforeMigration.Consumers, migratedSubscription.Consumers)
//Verify that old sub was deleted from old Coordinator
_, err = vrfContracts.CoordinatorV2Plus.GetSubscription(testcontext.Get(t), subID)
require.Error(t, err, "error not occurred when trying to get deleted subscription from old Coordinator after sub migration")
_, err = vrfContracts.CoordinatorV2Plus.GetActiveSubscriptionIds(testcontext.Get(t), big.NewInt(0), big.NewInt(0))
// If (subscription billing), numActiveSub should be 0 after migration in oldCoordinator
require.Error(t, err, "error not occurred getting active sub ids. Should occur since it should revert when sub id array is empty")
activeSubIdsMigratedCoordinator, err := newCoordinator.GetActiveSubscriptionIds(testcontext.Get(t), big.NewInt(0), big.NewInt(0))
require.NoError(t, err, "error occurred getting active sub ids")
require.Len(t, activeSubIdsMigratedCoordinator, 1, "Active Sub Ids length is not equal to 1 for Migrated Coordinator after migration")
require.Equal(t, subID, activeSubIdsMigratedCoordinator[0])
//Verify that total balances changed for Link and Eth for new and old coordinator
expectedLinkTotalBalanceForMigratedCoordinator := new(big.Int).Add(oldSubscriptionBeforeMigration.Balance, migratedCoordinatorLinkTotalBalanceBeforeMigration)
expectedEthTotalBalanceForMigratedCoordinator := new(big.Int).Add(oldSubscriptionBeforeMigration.NativeBalance, migratedCoordinatorEthTotalBalanceBeforeMigration)
expectedLinkTotalBalanceForOldCoordinator := new(big.Int).Sub(oldCoordinatorLinkTotalBalanceBeforeMigration, oldSubscriptionBeforeMigration.Balance)
expectedEthTotalBalanceForOldCoordinator := new(big.Int).Sub(oldCoordinatorEthTotalBalanceBeforeMigration, oldSubscriptionBeforeMigration.NativeBalance)
require.Equal(t, 0, expectedLinkTotalBalanceForMigratedCoordinator.Cmp(migratedCoordinatorLinkTotalBalanceAfterMigration))
require.Equal(t, 0, expectedEthTotalBalanceForMigratedCoordinator.Cmp(migratedCoordinatorEthTotalBalanceAfterMigration))
require.Equal(t, 0, expectedLinkTotalBalanceForOldCoordinator.Cmp(oldCoordinatorLinkTotalBalanceAfterMigration))
require.Equal(t, 0, expectedEthTotalBalanceForOldCoordinator.Cmp(oldCoordinatorEthTotalBalanceAfterMigration))
//Verify rand requests fulfills with Link Token billing
_, _, err = vrfv2plus.RequestRandomnessAndWaitForFulfillment(
consumers[0],
newCoordinator,
vrfKey,
subID,
false,
configCopy.VRFv2Plus.General,
l,
0,
)
require.NoError(t, err, "error requesting randomness and waiting for fulfilment")
//Verify rand requests fulfills with Native Token billing
_, _, err = vrfv2plus.RequestRandomnessAndWaitForFulfillment(
consumers[1],
newCoordinator,
vrfKey,
subID,
true,
configCopy.VRFv2Plus.General,
l,
0,
)
require.NoError(t, err, "error requesting randomness and waiting for fulfilment")
})`
$DIR/integration-tests/smoke/vrfv2plus_test.go: `.MustCopy()`
$DIR/integration-tests/smoke/vrfv2plus_test.go: `.SetupNewConsumersAndSubs(
testcontext.Get(t),
env,
chainID,
vrfContracts.CoordinatorV2Plus,
configCopy,
vrfContracts.LinkToken,
2,
1,
l,
)`
$DIR/integration-tests/smoke/vrfv2plus_test.go: `.Get(t)`
$DIR/integration-tests/smoke/vrfv2plus_test.go: `.CoordinatorV2Plus.GetSubscription(testcontext.Get(t), subID)`
$DIR/integration-tests/smoke/vrfv2plus_test.go: `.Get(t)`
$DIR/integration-tests/smoke/vrfv2plus_test.go: `.LogSubDetails(l, subscription, subID.String(), vrfContracts.CoordinatorV2Plus)`
$DIR/integration-tests/smoke/vrfv2plus_test.go: `.String()`
$DIR/integration-tests/smoke/vrfv2plus_test.go: `.CoordinatorV2Plus.GetActiveSubscriptionIds(testcontext.Get(t), big.NewInt(0), big.NewInt(0))`
$DIR/integration-tests/smoke/vrfv2plus_test.go: `.Get(t)`
$DIR/integration-tests/smoke/vrfv2plus_test.go: `.NewInt(0)`
$DIR/integration-tests/smoke/vrfv2plus_test.go: `.NewInt(0)`
$DIR/integration-tests/smoke/vrfv2plus_test.go: `.CoordinatorV2Plus.GetSubscription(testcontext.Get(t), subID)`
$DIR/integration-tests/smoke/vrfv2plus_test.go: `.Get(t)`
$DIR/integration-tests/smoke/vrfv2plus_test.go: `.DeployVRFCoordinatorV2PlusUpgradedVersion(sethClient, vrfContracts.BHS.Address())`
$DIR/integration-tests/smoke/vrfv2plus_test.go: `.BHS.Address()`
$DIR/integration-tests/smoke/vrfv2plus_test.go: `.VRFV2PlusUpgradedVersionRegisterProvingKey(vrfKey.VRFKey, newCoordinator, uint64(assets.GWei(*configCopy.VRFv2Plus.General.CLNodeMaxGasPriceGWei).Int64()))`
$DIR/integration-tests/smoke/vrfv2plus_test.go: `.GWei(*configCopy.VRFv2Plus.General.CLNodeMaxGasPriceGWei)`
$DIR/integration-tests/smoke/vrfv2plus_test.go: `.Int64()`
$DIR/integration-tests/smoke/vrfv2plus_test.go: `.SetConfig(
*configCopy.VRFv2Plus.General.MinimumConfirmations,
*configCopy.VRFv2Plus.General.MaxGasLimitCoordinatorConfig,
*configCopy.VRFv2Plus.General.StalenessSeconds,
*configCopy.VRFv2Plus.General.GasAfterPaymentCalculation,
big.NewInt(*configCopy.VRFv2Plus.General.LinkNativeFeedResponse),
*configCopy.VRFv2Plus.General.FulfillmentFlatFeeNativePPM,
*configCopy.VRFv2Plus.General.FulfillmentFlatFeeLinkDiscountPPM,
*configCopy.VRFv2Plus.General.NativePremiumPercentage,
*configCopy.VRFv2Plus.General.LinkPremiumPercentage,
)`
$DIR/integration-tests/smoke/vrfv2plus_test.go: `.NewInt(*configCopy.VRFv2Plus.General.LinkNativeFeedResponse)`
$DIR/integration-tests/smoke/vrfv2plus_test.go: `.SetLINKAndLINKNativeFeed(vrfContracts.LinkToken.Address(), vrfContracts.MockETHLINKFeed.Address())`
$DIR/integration-tests/smoke/vrfv2plus_test.go: `.LinkToken.Address()`
$DIR/integration-tests/smoke/vrfv2plus_test.go: `.MockETHLINKFeed.Address()`
$DIR/integration-tests/smoke/vrfv2plus_test.go: `.Address()`
$DIR/integration-tests/smoke/vrfv2plus_test.go: `.Sprint(chainID)`
$DIR/integration-tests/smoke/vrfv2plus_test.go: `.CreateVRFV2PlusJob(
nodeTypeToNodeMap[vrfcommon.VRF].CLNode.API,
vrfJobSpecConfig,
)`
$DIR/integration-tests/smoke/vrfv2plus_test.go: `.CoordinatorV2Plus.RegisterMigratableCoordinator(newCoordinator.Address())`
$DIR/integration-tests/smoke/vrfv2plus_test.go: `.Address()`
$DIR/integration-tests/smoke/vrfv2plus_test.go: `.GetCoordinatorTotalBalance(vrfContracts.CoordinatorV2Plus)`
$DIR/integration-tests/smoke/vrfv2plus_test.go: `.GetUpgradedCoordinatorTotalBalance(newCoordinator)`
$DIR/integration-tests/smoke/vrfv2plus_test.go: `.CoordinatorV2Plus.Migrate(subID, newCoordinator.Address())`
$DIR/integration-tests/smoke/vrfv2plus_test.go: `.Address()`
$DIR/integration-tests/smoke/vrfv2plus_test.go: `.LogMigrationCompletedEvent(l, migrationCompletedEvent, vrfContracts.CoordinatorV2Plus)`
$DIR/integration-tests/smoke/vrfv2plus_test.go: `.GetCoordinatorTotalBalance(vrfContracts.CoordinatorV2Plus)`
$DIR/integration-tests/smoke/vrfv2plus_test.go: `.GetUpgradedCoordinatorTotalBalance(newCoordinator)`
$DIR/integration-tests/smoke/vrfv2plus_test.go: `.GetSubscription(testcontext.Get(t), subID)`
$DIR/integration-tests/smoke/vrfv2plus_test.go: `.Get(t)`
$DIR/integration-tests/smoke/vrfv2plus_test.go: `.LogSubDetailsAfterMigration(l, newCoordinator, subID, migratedSubscription)`
$DIR/integration-tests/smoke/vrfv2plus_test.go: `.GetCoordinator(testcontext.Get(t))`
$DIR/integration-tests/smoke/vrfv2plus_test.go: `.Get(t)`
$DIR/integration-tests/smoke/vrfv2plus_test.go: `.Info()`
$DIR/integration-tests/smoke/vrfv2plus_test.go: `.
Str("Consumer", consumer.Address())`
$DIR/integration-tests/smoke/vrfv2plus_test.go: `.Address()`
$DIR/integration-tests/smoke/vrfv2plus_test.go: `.
Str("Coordinator", coordinatorAddressInConsumerAfterMigration.String())`
$DIR/integration-tests/smoke/vrfv2plus_test.go: `.String()`
$DIR/integration-tests/smoke/vrfv2plus_test.go: `.
Msg("Coordinator Address in Consumer After Migration")`
$DIR/integration-tests/smoke/vrfv2plus_test.go: `.CoordinatorV2Plus.GetSubscription(testcontext.Get(t), subID)`
$DIR/integration-tests/smoke/vrfv2plus_test.go: `.Get(t)`
$DIR/integration-tests/smoke/vrfv2plus_test.go: `.CoordinatorV2Plus.GetActiveSubscriptionIds(testcontext.Get(t), big.NewInt(0), big.NewInt(0))`
$DIR/integration-tests/smoke/vrfv2plus_test.go: `.Get(t)`
$DIR/integration-tests/smoke/vrfv2plus_test.go: `.NewInt(0)`
$DIR/integration-tests/smoke/vrfv2plus_test.go: `.NewInt(0)`
$DIR/integration-tests/smoke/vrfv2plus_test.go: `.GetActiveSubscriptionIds(testcontext.Get(t), big.NewInt(0), big.NewInt(0))`
$DIR/integration-tests/smoke/vrfv2plus_test.go: `.Get(t)`
$DIR/integration-tests/smoke/vrfv2plus_test.go: `.NewInt(0)`
$DIR/integration-tests/smoke/vrfv2plus_test.go: `.NewInt(0)`
$DIR/integration-tests/smoke/vrfv2plus_test.go: `.Add(oldSubscriptionBeforeMigration.Balance, migratedCoordinatorLinkTotalBalanceBeforeMigration)`
$DIR/integration-tests/smoke/vrfv2plus_test.go: `.Add(oldSubscriptionBeforeMigration.NativeBalance, migratedCoordinatorEthTotalBalanceBeforeMigration)`
$DIR/integration-tests/smoke/vrfv2plus_test.go: `.Sub(oldCoordinatorLinkTotalBalanceBeforeMigration, oldSubscriptionBeforeMigration.Balance)`
$DIR/integration-tests/smoke/vrfv2plus_test.go: `.Sub(oldCoordinatorEthTotalBalanceBeforeMigration, oldSubscriptionBeforeMigration.NativeBalance)`
$DIR/integration-tests/smoke/vrfv2plus_test.go: `.RequestRandomnessAndWaitForFulfillment(
consumers[0],
newCoordinator,
vrfKey,
subID,
false,
configCopy.VRFv2Plus.General,
l,
0,
)`
$DIR/integration-tests/smoke/vrfv2plus_test.go: `.RequestRandomnessAndWaitForFulfillment(
consumers[1],
newCoordinator,
vrfKey,
subID,
true,
configCopy.VRFv2Plus.General,
l,
0,
)`
$DIR/integration-tests/smoke/vrfv2plus_test.go: `.MustCopy()`
$DIR/integration-tests/smoke/vrfv2plus_test.go: `.SetupVRFV2PlusWrapperEnvironment(
testcontext.Get(t),
l,
env,
chainID,
&configCopy,
vrfContracts.LinkToken,
vrfContracts.MockETHLINKFeed,
vrfContracts.CoordinatorV2Plus,
vrfKey.KeyHash,
1,
)`
$DIR/integration-tests/smoke/vrfv2plus_test.go: `.Get(t)`
$DIR/integration-tests/smoke/vrfv2plus_test.go: `.CoordinatorV2Plus.GetSubscription(testcontext.Get(t), subID)`
$DIR/integration-tests/smoke/vrfv2plus_test.go: `.Get(t)`
$DIR/integration-tests/smoke/vrfv2plus_test.go: `.LogSubDetails(l, subscription, subID.String(), vrfContracts.CoordinatorV2Plus)`
$DIR/integration-tests/smoke/vrfv2plus_test.go: `.String()`
$DIR/integration-tests/smoke/vrfv2plus_test.go: `.CoordinatorV2Plus.GetActiveSubscriptionIds(testcontext.Get(t), big.NewInt(0), big.NewInt(0))`
$DIR/integration-tests/smoke/vrfv2plus_test.go: `.Get(t)`
$DIR/integration-tests/smoke/vrfv2plus_test.go: `.NewInt(0)`
$DIR/integration-tests/smoke/vrfv2plus_test.go: `.NewInt(0)`
$DIR/integration-tests/smoke/vrfv2plus_test.go: `.CoordinatorV2Plus.GetSubscription(testcontext.Get(t), subID)`
$DIR/integration-tests/smoke/vrfv2plus_test.go: `.Get(t)`
$DIR/integration-tests/smoke/vrfv2plus_test.go: `.DeployVRFCoordinatorV2PlusUpgradedVersion(sethClient, vrfContracts.BHS.Address())`
$DIR/integration-tests/smoke/vrfv2plus_test.go: `.BHS.Address()`
$DIR/integration-tests/smoke/vrfv2plus_test.go: `.VRFV2PlusUpgradedVersionRegisterProvingKey(vrfKey.VRFKey, newCoordinator, uint64(assets.GWei(*configCopy.VRFv2Plus.General.CLNodeMaxGasPriceGWei).Int64()))`
$DIR/integration-tests/smoke/vrfv2plus_test.go: `.GWei(*configCopy.VRFv2Plus.General.CLNodeMaxGasPriceGWei)`
$DIR/integration-tests/smoke/vrfv2plus_test.go: `.Int64()`
$DIR/integration-tests/smoke/vrfv2plus_test.go: `.SetConfig(
*configCopy.VRFv2Plus.General.MinimumConfirmations,
*configCopy.VRFv2Plus.General.MaxGasLimitCoordinatorConfig,
*configCopy.VRFv2Plus.General.StalenessSeconds,
*configCopy.VRFv2Plus.General.GasAfterPaymentCalculation,
big.NewInt(*configCopy.VRFv2Plus.General.LinkNativeFeedResponse),
*configCopy.VRFv2Plus.General.FulfillmentFlatFeeNativePPM,
*configCopy.VRFv2Plus.General.FulfillmentFlatFeeLinkDiscountPPM,
*configCopy.VRFv2Plus.General.NativePremiumPercentage,
*configCopy.VRFv2Plus.General.LinkPremiumPercentage,
)`
$DIR/integration-tests/smoke/vrfv2plus_test.go: `.NewInt(*configCopy.VRFv2Plus.General.LinkNativeFeedResponse)`
$DIR/integration-tests/smoke/vrfv2plus_test.go: `.SetLINKAndLINKNativeFeed(vrfContracts.LinkToken.Address(), vrfContracts.MockETHLINKFeed.Address())`
$DIR/integration-tests/smoke/vrfv2plus_test.go: `.LinkToken.Address()`
$DIR/integration-tests/smoke/vrfv2plus_test.go: `.MockETHLINKFeed.Address()`
$DIR/integration-tests/smoke/vrfv2plus_test.go: `.Address()`
$DIR/integration-tests/smoke/vrfv2plus_test.go: `.Sprint(chainID)`
$DIR/integration-tests/smoke/vrfv2plus_test.go: `.CreateVRFV2PlusJob(
nodeTypeToNodeMap[vrfcommon.VRF].CLNode.API,
vrfJobSpecConfig,
)`
$DIR/integration-tests/smoke/vrfv2plus_test.go: `.CoordinatorV2Plus.RegisterMigratableCoordinator(newCoordinator.Address())`
$DIR/integration-tests/smoke/vrfv2plus_test.go: `.Address()`
$DIR/integration-tests/smoke/vrfv2plus_test.go: `.GetCoordinatorTotalBalance(vrfContracts.CoordinatorV2Plus)`
$DIR/integration-tests/smoke/vrfv2plus_test.go: `.GetUpgradedCoordinatorTotalBalance(newCoordinator)`
$DIR/integration-tests/smoke/vrfv2plus_test.go: `.CoordinatorV2Plus.Migrate(subID, newCoordinator.Address())`
$DIR/integration-tests/smoke/vrfv2plus_test.go: `.Address()`
$DIR/integration-tests/smoke/vrfv2plus_test.go: `.LogMigrationCompletedEvent(l, migrationCompletedEvent, vrfContracts.CoordinatorV2Plus)`
$DIR/integration-tests/smoke/vrfv2plus_test.go: `.GetCoordinatorTotalBalance(vrfContracts.CoordinatorV2Plus)`
$DIR/integration-tests/smoke/vrfv2plus_test.go: `.GetUpgradedCoordinatorTotalBalance(newCoordinator)`
$DIR/integration-tests/smoke/vrfv2plus_test.go: `.GetSubscription(testcontext.Get(t), subID)`
$DIR/integration-tests/smoke/vrfv2plus_test.go: `.Get(t)`
$DIR/integration-tests/smoke/vrfv2plus_test.go: `.LogSubDetailsAfterMigration(l, newCoordinator, subID, migratedSubscription)`
$DIR/integration-tests/smoke/vrfv2plus_test.go: `.VRFV2PlusWrapper.Coordinator(testcontext.Get(t))`
$DIR/integration-tests/smoke/vrfv2plus_test.go: `.Get(t)`
$DIR/integration-tests/smoke/vrfv2plus_test.go: `.Info()`
$DIR/integration-tests/smoke/vrfv2plus_test.go: `.
Str("Consumer-VRFV2PlusWrapper", wrapperContracts.VRFV2PlusWrapper.Address())`
$DIR/integration-tests/smoke/vrfv2plus_test.go: `.VRFV2PlusWrapper.Address()`
$DIR/integration-tests/smoke/vrfv2plus_test.go: `.
Str("Coordinator", coordinatorAddressInConsumerAfterMigration.String())`
$DIR/integration-tests/smoke/vrfv2plus_test.go: `.String()`
$DIR/integration-tests/smoke/vrfv2plus_test.go: `.
Msg("Coordinator Address in VRFV2PlusWrapper After Migration")`
$DIR/integration-tests/smoke/vrfv2plus_test.go: `.CoordinatorV2Plus.GetSubscription(testcontext.Get(t), subID)`
$DIR/integration-tests/smoke/vrfv2plus_test.go: `.Get(t)`
$DIR/integration-tests/smoke/vrfv2plus_test.go: `.CoordinatorV2Plus.GetActiveSubscriptionIds(testcontext.Get(t), big.NewInt(0), big.NewInt(0))`
$DIR/integration-tests/smoke/vrfv2plus_test.go: `.Get(t)`
$DIR/integration-tests/smoke/vrfv2plus_test.go: `.NewInt(0)`
$DIR/integration-tests/smoke/vrfv2plus_test.go: `.NewInt(0)`
$DIR/integration-tests/smoke/vrfv2plus_test.go: `.GetActiveSubscriptionIds(testcontext.Get(t), big.NewInt(0), big.NewInt(0))`
$DIR/integration-tests/smoke/vrfv2plus_test.go: `.Get(t)`
$DIR/integration-tests/smoke/vrfv2plus_test.go: `.NewInt(0)`
$DIR/integration-tests/smoke/vrfv2plus_test.go: `.NewInt(0)`
$DIR/integration-tests/smoke/vrfv2plus_test.go: `.Add(oldSubscriptionBeforeMigration.Balance, migratedCoordinatorLinkTotalBalanceBeforeMigration)`
$DIR/integration-tests/smoke/vrfv2plus_test.go: `.Add(oldSubscriptionBeforeMigration.NativeBalance, migratedCoordinatorEthTotalBalanceBeforeMigration)`
$DIR/integration-tests/smoke/vrfv2plus_test.go: `.Sub(oldCoordinatorLinkTotalBalanceBeforeMigration, oldSubscriptionBeforeMigration.Balance)`
$DIR/integration-tests/smoke/vrfv2plus_test.go: `.Sub(oldCoordinatorEthTotalBalanceBeforeMigration, oldSubscriptionBeforeMigration.NativeBalance)`
$DIR/integration-tests/smoke/vrfv2plus_test.go: `.DirectFundingRequestRandomnessAndWaitForFulfillment(
wrapperContracts.LoadTestConsumers[0],
newCoordinator,
vrfKey,
subID,
isNativeBilling,
configCopy.VRFv2Plus.General,
l,
)`
$DIR/integration-tests/smoke/vrfv2plus_test.go: `.GetRequestStatus(testcontext.Get(t), randomWordsFulfilledEvent.RequestId)`
$DIR/integration-tests/smoke/vrfv2plus_test.go: `.Get(t)`
$DIR/integration-tests/smoke/vrfv2plus_test.go: `.DirectFundingRequestRandomnessAndWaitForFulfillment(
wrapperContracts.LoadTestConsumers[0],
newCoordinator,
vrfKey,
subID,
isNativeBilling,
configCopy.VRFv2Plus.General,
l,
)`
$DIR/integration-tests/smoke/vrfv2plus_test.go: `.GetRequestStatus(testcontext.Get(t), randomWordsFulfilledEvent.RequestId)`
$DIR/integration-tests/smoke/vrfv2plus_test.go: `.Get(t)`
$DIR/integration-tests/smoke/vrfv2plus_test.go: `.GetTestLogger(t)`
$DIR/integration-tests/smoke/vrfv2plus_test.go: `.GetConfig("Smoke", tc.VRFv2Plus)`
$DIR/integration-tests/smoke/vrfv2plus_test.go: `.MustGetSelectedNetworkConfig(config.GetNetworkConfig())`
$DIR/integration-tests/smoke/vrfv2plus_test.go: `.GetNetworkConfig()`
$DIR/integration-tests/smoke/vrfv2plus_test.go: `.GetSethClient(chainID)`
$DIR/integration-tests/smoke/vrfv2plus_test.go: `.Cfg.IsSimulatedNetwork()`
$DIR/integration-tests/smoke/vrfv2plus_test.go: `.Info()`
$DIR/integration-tests/smoke/vrfv2plus_test.go: `.
Str("Network Name", sethClient.Cfg.Network.Name)`
$DIR/integration-tests/smoke/vrfv2plus_test.go: `.
Msg("Network is a simulated network. Skipping fund return for Coordinator Subscriptions.")`
$DIR/integration-tests/smoke/vrfv2plus_test.go: `.CancelSubsAndReturnFunds(testcontext.Get(t), vrfContracts, sethClient.MustGetRootKeyAddress().Hex(), subIDsForCancellingAfterTest, l)`
$DIR/integration-tests/smoke/vrfv2plus_test.go: `.Get(t)`
$DIR/integration-tests/smoke/vrfv2plus_test.go: `.MustGetRootKeyAddress()`
$DIR/integration-tests/smoke/vrfv2plus_test.go: `.Hex()`
$DIR/integration-tests/smoke/vrfv2plus_test.go: `.Cleanup(test_env.CleanupOpts{TestName: t.Name()})`
$DIR/integration-tests/smoke/vrfv2plus_test.go: `.Name()`
$DIR/integration-tests/smoke/vrfv2plus_test.go: `.Ptr(2)`
$DIR/integration-tests/smoke/vrfv2plus_test.go: `.Ptr(20)`
$DIR/integration-tests/smoke/vrfv2plus_test.go: `.SetupVRFV2PlusUniverse(testcontext.Get(t), t, vrfEnvConfig, newEnvConfig, l)`
$DIR/integration-tests/smoke/vrfv2plus_test.go: `.Get(t)`
$DIR/integration-tests/smoke/vrfv2plus_test.go: `.GetSethClient(chainID)`
$DIR/integration-tests/smoke/vrfv2plus_test.go: `.Run("BHS Job with complete E2E - wait 256 blocks to see if Rand Request is fulfilled", func(t *testing.T) {
if os.Getenv("TEST_UNSKIP") != "true" {
t.Skip("Skipped due to long execution time. Should be run on-demand on live testnet with TEST_UNSKIP=\"true\".")
}
configCopy := config.MustCopy().(tc.TestConfig)
//Underfund Subscription
configCopy.VRFv2Plus.General.SubscriptionFundingAmountLink = ptr.Ptr(float64(0))
configCopy.VRFv2Plus.General.SubscriptionFundingAmountNative = ptr.Ptr(float64(0))
consumers, subIDs, err := vrfv2plus.SetupNewConsumersAndSubs(
testcontext.Get(t),
env,
chainID,
vrfContracts.CoordinatorV2Plus,
configCopy,
vrfContracts.LinkToken,
1,
1,
l,
)
require.NoError(t, err, "error setting up new consumers and subs")
subID := subIDs[0]
subscription, err := vrfContracts.CoordinatorV2Plus.GetSubscription(testcontext.Get(t), subID)
require.NoError(t, err, "error getting subscription information")
vrfcommon.LogSubDetails(l, subscription, subID.String(), vrfContracts.CoordinatorV2Plus)
subIDsForCancellingAfterTest = append(subIDsForCancellingAfterTest, subIDs...)
randomWordsRequestedEvent, err := vrfv2plus.RequestRandomness(
consumers[0],
vrfContracts.CoordinatorV2Plus,
vrfKey,
subID,
isNativeBilling,
configCopy.VRFv2Plus.General,
l,
0,
)
require.NoError(t, err, "error requesting randomness")
randRequestBlockNumber := randomWordsRequestedEvent.Raw.BlockNumber
var wg sync.WaitGroup
wg.Add(1)
//Wait at least 256 blocks
_, err = actions.WaitForBlockNumberToBe(
randRequestBlockNumber+uint64(257),
sethClient,
&wg,
configCopy.VRFv2Plus.General.WaitFor256BlocksTimeout.Duration,
t,
l,
)
wg.Wait()
require.NoError(t, err)
err = vrfv2plus.FundSubscriptions(
big.NewFloat(*configCopy.VRFv2Plus.General.SubscriptionRefundingAmountNative),
big.NewFloat(*configCopy.VRFv2Plus.General.SubscriptionRefundingAmountLink),
vrfContracts.LinkToken,
vrfContracts.CoordinatorV2Plus,
subIDs,
)
require.NoError(t, err, "error funding subscriptions")
randomWordsFulfilledEvent, err := vrfContracts.CoordinatorV2Plus.WaitForRandomWordsFulfilledEvent(
contracts.RandomWordsFulfilledEventFilter{
RequestIds: []*big.Int{randomWordsRequestedEvent.RequestId},
SubIDs: []*big.Int{subID},
Timeout: configCopy.VRFv2Plus.General.RandomWordsFulfilledEventTimeout.Duration,
},
)
require.NoError(t, err, "error waiting for randomness fulfilled event")
vrfcommon.LogRandomWordsFulfilledEvent(l, vrfContracts.CoordinatorV2Plus, randomWordsFulfilledEvent, isNativeBilling, 0)
status, err := consumers[0].GetRequestStatus(testcontext.Get(t), randomWordsFulfilledEvent.RequestId)
require.NoError(t, err, "error getting rand request status")
require.True(t, status.Fulfilled)
l.Info().Bool("Fulfilment Status", status.Fulfilled).Msg("Random Words Request Fulfilment Status")
randRequestBlockHash, err := vrfContracts.BHS.GetBlockHash(testcontext.Get(t), big.NewInt(int64(randRequestBlockNumber)))
require.NoError(t, err, "error getting blockhash for a blocknumber which was stored in BHS contract")
l.Info().
Str("Randomness Request's Blockhash", randomWordsRequestedEvent.Raw.BlockHash.String()).
Str("Block Hash stored by BHS contract", fmt.Sprintf("0x%x", randRequestBlockHash)).
Msg("BHS Contract's stored Blockhash for Randomness Request")
require.Equal(t, 0, randomWordsRequestedEvent.Raw.BlockHash.Cmp(randRequestBlockHash))
})`
$DIR/integration-tests/smoke/vrfv2plus_test.go: `.Getenv("TEST_UNSKIP")`
$DIR/integration-tests/smoke/vrfv2plus_test.go: `.MustCopy()`
$DIR/integration-tests/smoke/vrfv2plus_test.go: `.Ptr(float64(0))`
$DIR/integration-tests/smoke/vrfv2plus_test.go: `.Ptr(float64(0))`
$DIR/integration-tests/smoke/vrfv2plus_test.go: `.SetupNewConsumersAndSubs(
testcontext.Get(t),
env,
chainID,
vrfContracts.CoordinatorV2Plus,
configCopy,
vrfContracts.LinkToken,
1,
1,
l,
)`
$DIR/integration-tests/smoke/vrfv2plus_test.go: `.Get(t)`
$DIR/integration-tests/smoke/vrfv2plus_test.go: `.CoordinatorV2Plus.GetSubscription(testcontext.Get(t), subID)`
$DIR/integration-tests/smoke/vrfv2plus_test.go: `.Get(t)`
$DIR/integration-tests/smoke/vrfv2plus_test.go: `.LogSubDetails(l, subscription, subID.String(), vrfContracts.CoordinatorV2Plus)`
$DIR/integration-tests/smoke/vrfv2plus_test.go: `.String()`
$DIR/integration-tests/smoke/vrfv2plus_test.go: `.RequestRandomness(
consumers[0],
vrfContracts.CoordinatorV2Plus,
vrfKey,
subID,
isNativeBilling,
configCopy.VRFv2Plus.General,
l,
0,
)`
$DIR/integration-tests/smoke/vrfv2plus_test.go: `.Add(1)`
$DIR/integration-tests/smoke/vrfv2plus_test.go: `.WaitForBlockNumberToBe(
randRequestBlockNumber+uint64(257),
sethClient,
&wg,
configCopy.VRFv2Plus.General.WaitFor256BlocksTimeout.Duration,
t,
l,
)`
$DIR/integration-tests/smoke/vrfv2plus_test.go: `.Wait()`
$DIR/integration-tests/smoke/vrfv2plus_test.go: `.FundSubscriptions(
big.NewFloat(*configCopy.VRFv2Plus.General.SubscriptionRefundingAmountNative),
big.NewFloat(*configCopy.VRFv2Plus.General.SubscriptionRefundingAmountLink),
vrfContracts.LinkToken,
vrfContracts.CoordinatorV2Plus,
subIDs,
)`
$DIR/integration-tests/smoke/vrfv2plus_test.go: `.NewFloat(*configCopy.VRFv2Plus.General.SubscriptionRefundingAmountNative)`
$DIR/integration-tests/smoke/vrfv2plus_test.go: `.NewFloat(*configCopy.VRFv2Plus.General.SubscriptionRefundingAmountLink)`
$DIR/integration-tests/smoke/vrfv2plus_test.go: `.CoordinatorV2Plus.WaitForRandomWordsFulfilledEvent(
contracts.RandomWordsFulfilledEventFilter{
RequestIds: []*big.Int{randomWordsRequestedEvent.RequestId},
SubIDs: []*big.Int{subID},
Timeout: configCopy.VRFv2Plus.General.RandomWordsFulfilledEventTimeout.Duration,
},
)`
$DIR/integration-tests/smoke/vrfv2plus_test.go: `.LogRandomWordsFulfilledEvent(l, vrfContracts.CoordinatorV2Plus, randomWordsFulfilledEvent, isNativeBilling, 0)`
$DIR/integration-tests/smoke/vrfv2plus_test.go: `.GetRequestStatus(testcontext.Get(t), randomWordsFulfilledEvent.RequestId)`
$DIR/integration-tests/smoke/vrfv2plus_test.go: `.Get(t)`
$DIR/integration-tests/smoke/vrfv2plus_test.go: `.Info()`
$DIR/integration-tests/smoke/vrfv2plus_test.go: `.Bool("Fulfilment Status", status.Fulfilled)`
$DIR/integration-tests/smoke/vrfv2plus_test.go: `.Msg("Random Words Request Fulfilment Status")`
$DIR/integration-tests/smoke/vrfv2plus_test.go: `.BHS.GetBlockHash(testcontext.Get(t), big.NewInt(int64(randRequestBlockNumber)))`
$DIR/integration-tests/smoke/vrfv2plus_test.go: `.Get(t)`
$DIR/integration-tests/smoke/vrfv2plus_test.go: `.NewInt(int64(randRequestBlockNumber))`
$DIR/integration-tests/smoke/vrfv2plus_test.go: `.Info()`
$DIR/integration-tests/smoke/vrfv2plus_test.go: `.
Str("Randomness Request's Blockhash", randomWordsRequestedEvent.Raw.BlockHash.String())`
$DIR/integration-tests/smoke/vrfv2plus_test.go: `.Raw.BlockHash.String()`
$DIR/integration-tests/smoke/vrfv2plus_test.go: `.
Str("Block Hash stored by BHS contract", fmt.Sprintf("0x%x", randRequestBlockHash))`
$DIR/integration-tests/smoke/vrfv2plus_test.go: `.Sprintf("0x%x", randRequestBlockHash)`
$DIR/integration-tests/smoke/vrfv2plus_test.go: `.
Msg("BHS Contract's stored Blockhash for Randomness Request")`
$DIR/integration-tests/smoke/vrfv2plus_test.go: `.MustCopy()`
$DIR/integration-tests/smoke/vrfv2plus_test.go: `.Ptr(float64(0))`
$DIR/integration-tests/smoke/vrfv2plus_test.go: `.Ptr(float64(0))`
$DIR/integration-tests/smoke/vrfv2plus_test.go: `.SetupNewConsumersAndSubs(
testcontext.Get(t),
env,
chainID,
vrfContracts.CoordinatorV2Plus,
configCopy,
vrfContracts.LinkToken,
1,
1,
l,
)`
$DIR/integration-tests/smoke/vrfv2plus_test.go: `.Get(t)`
$DIR/integration-tests/smoke/vrfv2plus_test.go: `.CoordinatorV2Plus.GetSubscription(testcontext.Get(t), subID)`
$DIR/integration-tests/smoke/vrfv2plus_test.go: `.Get(t)`
$DIR/integration-tests/smoke/vrfv2plus_test.go: `.LogSubDetails(l, subscription, subID.String(), vrfContracts.CoordinatorV2Plus)`
$DIR/integration-tests/smoke/vrfv2plus_test.go: `.String()`
$DIR/integration-tests/smoke/vrfv2plus_test.go: `.RequestRandomness(
consumers[0],
vrfContracts.CoordinatorV2Plus,
vrfKey,
subID,
isNativeBilling,
configCopy.VRFv2Plus.General,
l,
0,
)`
$DIR/integration-tests/smoke/vrfv2plus_test.go: `.BHS.GetBlockHash(testcontext.Get(t), big.NewInt(int64(randRequestBlockNumber)))`
$DIR/integration-tests/smoke/vrfv2plus_test.go: `.Get(t)`
$DIR/integration-tests/smoke/vrfv2plus_test.go: `.NewInt(int64(randRequestBlockNumber))`
$DIR/integration-tests/smoke/vrfv2plus_test.go: `.Add(1)`
$DIR/integration-tests/smoke/vrfv2plus_test.go: `.WaitForBlockNumberToBe(
randRequestBlockNumber+uint64(*configCopy.VRFv2Plus.General.BHSJobWaitBlocks+10),
sethClient,
&wg,
time.Minute*1,
t,
l,
)`
$DIR/integration-tests/smoke/vrfv2plus_test.go: `.Wait()`
$DIR/integration-tests/smoke/vrfv2plus_test.go: `.GetLoadTestMetrics(testcontext.Get(t))`
$DIR/integration-tests/smoke/vrfv2plus_test.go: `.Get(t)`
$DIR/integration-tests/smoke/vrfv2plus_test.go: `.NewGomegaWithT(t)`
$DIR/integration-tests/smoke/vrfv2plus_test.go: `.Eventually(func(g gomega.Gomega) {
clNodeTxs, _, err = nodeTypeToNodeMap[vrfcommon.BHS].CLNode.API.ReadTransactions()
g.Expect(err).ShouldNot(gomega.HaveOccurred(), "error getting CL Node transactions")
l.Info().Int("Number of TXs", len(clNodeTxs.Data)).Msg("BHS Node txs")
g.Expect(len(clNodeTxs.Data)).Should(gomega.BeNumerically("==", 1), "Expected 1 tx posted by BHS Node, but found %d", len(clNodeTxs.Data))
txHash = clNodeTxs.Data[0].Attributes.Hash
}, "2m", "1s")`
$DIR/integration-tests/smoke/vrfv2plus_test.go: `.CLNode.API.ReadTransactions()`
$DIR/integration-tests/smoke/vrfv2plus_test.go: `.Expect(err)`
$DIR/integration-tests/smoke/vrfv2plus_test.go: `.ShouldNot(gomega.HaveOccurred(), "error getting CL Node transactions")`
$DIR/integration-tests/smoke/vrfv2plus_test.go: `.HaveOccurred()`
$DIR/integration-tests/smoke/vrfv2plus_test.go: `.Info()`
$DIR/integration-tests/smoke/vrfv2plus_test.go: `.Int("Number of TXs", len(clNodeTxs.Data))`
$DIR/integration-tests/smoke/vrfv2plus_test.go: `.Msg("BHS Node txs")`
$DIR/integration-tests/smoke/vrfv2plus_test.go: `.Expect(len(clNodeTxs.Data))`
$DIR/integration-tests/smoke/vrfv2plus_test.go: `.Should(gomega.BeNumerically("==", 1), "Expected 1 tx posted by BHS Node, but found %d", len(clNodeTxs.Data))`
$DIR/integration-tests/smoke/vrfv2plus_test.go: `.BeNumerically("==", 1)`
$DIR/integration-tests/smoke/vrfv2plus_test.go: `.Should(gomega.Succeed())`
$DIR/integration-tests/smoke/vrfv2plus_test.go: `.Succeed()`
$DIR/integration-tests/smoke/vrfv2plus_test.go: `.Client.TransactionByHash(testcontext.Get(t), common.HexToHash(txHash))`
$DIR/integration-tests/smoke/vrfv2plus_test.go: `.Get(t)`
$DIR/integration-tests/smoke/vrfv2plus_test.go: `.HexToHash(txHash)`
$DIR/integration-tests/smoke/vrfv2plus_test.go: `.DecodeTxInputData(blockhash_store.BlockhashStoreABI, bhsStoreTx.Data())`
$DIR/integration-tests/smoke/vrfv2plus_test.go: `.Data()`
$DIR/integration-tests/smoke/vrfv2plus_test.go: `.Info()`
$DIR/integration-tests/smoke/vrfv2plus_test.go: `.
Str("Block Number", bhsStoreTxInputData["n"].(*big.Int).String())`
$DIR/integration-tests/smoke/vrfv2plus_test.go: `.String()`
$DIR/integration-tests/smoke/vrfv2plus_test.go: `.
Msg("BHS Node's Store Blockhash for Blocknumber Method TX")`
$DIR/integration-tests/smoke/vrfv2plus_test.go: `.Eventually(func(g gomega.Gomega) {
randRequestBlockHash, err = vrfContracts.BHS.GetBlockHash(testcontext.Get(t), big.NewInt(int64(randRequestBlockNumber)))
g.Expect(err).ShouldNot(gomega.HaveOccurred(), "error getting blockhash for a blocknumber which was stored in BHS contract")
}, "2m", "1s")`
$DIR/integration-tests/smoke/vrfv2plus_test.go: `.BHS.GetBlockHash(testcontext.Get(t), big.NewInt(int64(randRequestBlockNumber)))`
$DIR/integration-tests/smoke/vrfv2plus_test.go: `.Get(t)`
$DIR/integration-tests/smoke/vrfv2plus_test.go: `.NewInt(int64(randRequestBlockNumber))`
$DIR/integration-tests/smoke/vrfv2plus_test.go: `.Expect(err)`
$DIR/integration-tests/smoke/vrfv2plus_test.go: `.ShouldNot(gomega.HaveOccurred(), "error getting blockhash for a blocknumber which was stored in BHS contract")`
$DIR/integration-tests/smoke/vrfv2plus_test.go: `.HaveOccurred()`
$DIR/integration-tests/smoke/vrfv2plus_test.go: `.Should(gomega.Succeed())`
$DIR/integration-tests/smoke/vrfv2plus_test.go: `.Succeed()`
$DIR/integration-tests/smoke/vrfv2plus_test.go: `.Info()`
$DIR/integration-tests/smoke/vrfv2plus_test.go: `.
Str("Randomness Request's Blockhash", randomWordsRequestedEvent.Raw.BlockHash.String())`
$DIR/integration-tests/smoke/vrfv2plus_test.go: `.Raw.BlockHash.String()`
$DIR/integration-tests/smoke/vrfv2plus_test.go: `.
Str("Block Hash stored by BHS contract", fmt.Sprintf("0x%x", randRequestBlockHash))`
$DIR/integration-tests/smoke/vrfv2plus_test.go: `.Sprintf("0x%x", randRequestBlockHash)`
$DIR/integration-tests/smoke/vrfv2plus_test.go: `.
Msg("BHS Contract's stored Blockhash for Randomness Request")`
$DIR/integration-tests/smoke/vrfv2plus_test.go: `.GetTestLogger(t)`
$DIR/integration-tests/smoke/vrfv2plus_test.go: `.GetConfig("Smoke", tc.VRFv2Plus)`
$DIR/integration-tests/smoke/vrfv2plus_test.go: `.MustGetSelectedNetworkConfig(config.GetNetworkConfig())`
$DIR/integration-tests/smoke/vrfv2plus_test.go: `.GetNetworkConfig()`
$DIR/integration-tests/smoke/vrfv2plus_test.go: `.GetSethClient(chainID)`
$DIR/integration-tests/smoke/vrfv2plus_test.go: `.Cfg.IsSimulatedNetwork()`
$DIR/integration-tests/smoke/vrfv2plus_test.go: `.Info()`
$DIR/integration-tests/smoke/vrfv2plus_test.go: `.
Str("Network Name", sethClient.Cfg.Network.Name)`
$DIR/integration-tests/smoke/vrfv2plus_test.go: `.
Msg("Network is a simulated network. Skipping fund return for Coordinator Subscriptions.")`
$DIR/integration-tests/smoke/vrfv2plus_test.go: `.CancelSubsAndReturnFunds(testcontext.Get(t), vrfContracts, sethClient.MustGetRootKeyAddress().Hex(), subIDsForCancellingAfterTest, l)`
$DIR/integration-tests/smoke/vrfv2plus_test.go: `.Get(t)`
$DIR/integration-tests/smoke/vrfv2plus_test.go: `.MustGetRootKeyAddress()`
$DIR/integration-tests/smoke/vrfv2plus_test.go: `.Hex()`
$DIR/integration-tests/smoke/vrfv2plus_test.go: `.Cleanup(test_env.CleanupOpts{TestName: t.Name()})`
$DIR/integration-tests/smoke/vrfv2plus_test.go: `.Name()`
$DIR/integration-tests/smoke/vrfv2plus_test.go: `.Ptr(260)`
$DIR/integration-tests/smoke/vrfv2plus_test.go: `.Ptr(500)`
$DIR/integration-tests/smoke/vrfv2plus_test.go: `.Ptr(blockchain.StrDuration{Duration: time.Second * 30})`
$DIR/integration-tests/smoke/vrfv2plus_test.go: `.Ptr(blockchain.StrDuration{Duration: time.Minute * 24})`
$DIR/integration-tests/smoke/vrfv2plus_test.go: `.GetDefaultChainlinkNodeLogScannerSettingsWithExtraAllowedMessages(testreporters.NewAllowedLogMessage(
"Pipeline error",
"Test is expecting this error to occur",
zapcore.DPanicLevel,
testreporters.WarnAboutAllowedMsgs_No))`
$DIR/integration-tests/smoke/vrfv2plus_test.go: `.NewAllowedLogMessage(
"Pipeline error",
"Test is expecting this error to occur",
zapcore.DPanicLevel,
testreporters.WarnAboutAllowedMsgs_No)`
$DIR/integration-tests/smoke/vrfv2plus_test.go: `.SetupVRFV2PlusUniverse(
testcontext.Get(t), t, vrfEnvConfig, newEnvConfig, l)`
$DIR/integration-tests/smoke/vrfv2plus_test.go: `.Get(t)`
$DIR/integration-tests/smoke/vrfv2plus_test.go: `.GetSethClient(chainID)`
$DIR/integration-tests/smoke/vrfv2plus_test.go: `.MustCopy()`
$DIR/integration-tests/smoke/vrfv2plus_test.go: `.Ptr(float64(0))`
$DIR/integration-tests/smoke/vrfv2plus_test.go: `.Ptr(float64(0))`
$DIR/integration-tests/smoke/vrfv2plus_test.go: `.SetupNewConsumersAndSubs(
testcontext.Get(t),
env,
chainID,
vrfContracts.CoordinatorV2Plus,
configCopy,
vrfContracts.LinkToken,
1,
1,
l,
)`
$DIR/integration-tests/smoke/vrfv2plus_test.go: `.Get(t)`
$DIR/integration-tests/smoke/vrfv2plus_test.go: `.CoordinatorV2Plus.GetSubscription(testcontext.Get(t), subID)`
$DIR/integration-tests/smoke/vrfv2plus_test.go: `.Get(t)`
$DIR/integration-tests/smoke/vrfv2plus_test.go: `.LogSubDetails(l, subscription, subID.String(), vrfContracts.CoordinatorV2Plus)`
$DIR/integration-tests/smoke/vrfv2plus_test.go: `.String()`
$DIR/integration-tests/smoke/vrfv2plus_test.go: `.RequestRandomness(
consumers[0],
vrfContracts.CoordinatorV2Plus,
vrfKey,
subID,
isNativeBilling,
configCopy.VRFv2Plus.General,
l,
0,
)`
$DIR/integration-tests/smoke/vrfv2plus_test.go: `.Add(1)`
$DIR/integration-tests/smoke/vrfv2plus_test.go: `.WaitForBlockNumberToBe(
randRequestBlockNumber+uint64(257),
sethClient,
&wg,
configCopy.VRFv2Plus.General.WaitFor256BlocksTimeout.Duration,
t,
l,
)`
$DIR/integration-tests/smoke/vrfv2plus_test.go: `.Wait()`
$DIR/integration-tests/smoke/vrfv2plus_test.go: `.Info()`
$DIR/integration-tests/smoke/vrfv2plus_test.go: `.Float64("SubscriptionFundingAmountNative", *configCopy.VRFv2Plus.General.SubscriptionRefundingAmountNative)`
$DIR/integration-tests/smoke/vrfv2plus_test.go: `.
Float64("SubscriptionFundingAmountLink", *configCopy.VRFv2Plus.General.SubscriptionRefundingAmountLink)`
$DIR/integration-tests/smoke/vrfv2plus_test.go: `.
Msg("Funding subscription")`
$DIR/integration-tests/smoke/vrfv2plus_test.go: `.FundSubscriptions(
big.NewFloat(*configCopy.VRFv2Plus.General.SubscriptionRefundingAmountNative),
big.NewFloat(*configCopy.VRFv2Plus.General.SubscriptionRefundingAmountLink),
vrfContracts.LinkToken,
vrfContracts.CoordinatorV2Plus,
subIDs,
)`
$DIR/integration-tests/smoke/vrfv2plus_test.go: `.NewFloat(*configCopy.VRFv2Plus.General.SubscriptionRefundingAmountNative)`
$DIR/integration-tests/smoke/vrfv2plus_test.go: `.NewFloat(*configCopy.VRFv2Plus.General.SubscriptionRefundingAmountLink)`
$DIR/integration-tests/smoke/vrfv2plus_test.go: `.CoordinatorV2Plus.WaitForRandomWordsFulfilledEvent(
contracts.RandomWordsFulfilledEventFilter{
RequestIds: []*big.Int{randomWordsRequestedEvent.RequestId},
SubIDs: []*big.Int{subID},
Timeout: configCopy.VRFv2Plus.General.RandomWordsFulfilledEventTimeout.Duration,
},
)`
$DIR/integration-tests/smoke/vrfv2plus_test.go: `.LogRandomWordsFulfilledEvent(l, vrfContracts.CoordinatorV2Plus, randomWordsFulfilledEvent, isNativeBilling, 0)`
$DIR/integration-tests/smoke/vrfv2plus_test.go: `.GetRequestStatus(testcontext.Get(t), randomWordsFulfilledEvent.RequestId)`
$DIR/integration-tests/smoke/vrfv2plus_test.go: `.Get(t)`
$DIR/integration-tests/smoke/vrfv2plus_test.go: `.Info()`
$DIR/integration-tests/smoke/vrfv2plus_test.go: `.Bool("Fulfilment Status", status.Fulfilled)`
$DIR/integration-tests/smoke/vrfv2plus_test.go: `.Msg("Random Words Request Fulfilment Status")`
$DIR/integration-tests/smoke/vrfv2plus_test.go: `.CLNode.API.ReadTransactions()`
$DIR/integration-tests/smoke/vrfv2plus_test.go: `.EqualFold(tx.Attributes.To, vrfContracts.BatchBHS.Address())`
$DIR/integration-tests/smoke/vrfv2plus_test.go: `.BatchBHS.Address()`
$DIR/integration-tests/smoke/vrfv2plus_test.go: `.BHS.GetBlockHash(testcontext.Get(t), big.NewInt(int64(randRequestBlockNumber)))`
$DIR/integration-tests/smoke/vrfv2plus_test.go: `.Get(t)`
$DIR/integration-tests/smoke/vrfv2plus_test.go: `.NewInt(int64(randRequestBlockNumber))`
$DIR/integration-tests/smoke/vrfv2plus_test.go: `.Info()`
$DIR/integration-tests/smoke/vrfv2plus_test.go: `.
Str("Randomness Request's Blockhash", randomWordsRequestedEvent.Raw.BlockHash.String())`
$DIR/integration-tests/smoke/vrfv2plus_test.go: `.Raw.BlockHash.String()`
$DIR/integration-tests/smoke/vrfv2plus_test.go: `.
Str("Block Hash stored by BHS contract", fmt.Sprintf("0x%x", randRequestBlockHash))`
$DIR/integration-tests/smoke/vrfv2plus_test.go: `.Sprintf("0x%x", randRequestBlockHash)`
$DIR/integration-tests/smoke/vrfv2plus_test.go: `.
Msg("BHS Contract's stored Blockhash for Randomness Request")`
$DIR/integration-tests/smoke/vrfv2plus_test.go: `.GetTestLogger(t)`
$DIR/integration-tests/smoke/vrfv2plus_test.go: `.GetConfig("Smoke", tc.VRFv2Plus)`
$DIR/integration-tests/smoke/vrfv2plus_test.go: `.MustGetSelectedNetworkConfig(config.GetNetworkConfig())`
$DIR/integration-tests/smoke/vrfv2plus_test.go: `.GetNetworkConfig()`
$DIR/integration-tests/smoke/vrfv2plus_test.go: `.GetSethClient(chainID)`
$DIR/integration-tests/smoke/vrfv2plus_test.go: `.Cfg.IsSimulatedNetwork()`
$DIR/integration-tests/smoke/vrfv2plus_test.go: `.Info()`
$DIR/integration-tests/smoke/vrfv2plus_test.go: `.
Str("Network Name", sethClient.Cfg.Network.Name)`
$DIR/integration-tests/smoke/vrfv2plus_test.go: `.
Msg("Network is a simulated network. Skipping fund return for Coordinator Subscriptions.")`
$DIR/integration-tests/smoke/vrfv2plus_test.go: `.CancelSubsAndReturnFunds(testcontext.Get(t), vrfContracts, sethClient.MustGetRootKeyAddress().Hex(), subIDsForCancellingAfterTest, l)`
$DIR/integration-tests/smoke/vrfv2plus_test.go: `.Get(t)`
$DIR/integration-tests/smoke/vrfv2plus_test.go: `.MustGetRootKeyAddress()`
$DIR/integration-tests/smoke/vrfv2plus_test.go: `.Hex()`
$DIR/integration-tests/smoke/vrfv2plus_test.go: `.Cleanup(test_env.CleanupOpts{TestName: t.Name()})`
$DIR/integration-tests/smoke/vrfv2plus_test.go: `.Name()`
$DIR/integration-tests/smoke/vrfv2plus_test.go: `.Ptr(blockchain.StrDuration{Duration: timeout})`
$DIR/integration-tests/smoke/vrfv2plus_test.go: `.Ptr(float64(0))`
$DIR/integration-tests/smoke/vrfv2plus_test.go: `.Ptr(float64(0))`
$DIR/integration-tests/smoke/vrfv2plus_test.go: `.SetupVRFV2PlusUniverse(testcontext.Get(t), t, vrfEnvConfig, newEnvConfig, l)`
$DIR/integration-tests/smoke/vrfv2plus_test.go: `.Get(t)`
$DIR/integration-tests/smoke/vrfv2plus_test.go: `.MustCopy()`
$DIR/integration-tests/smoke/vrfv2plus_test.go: `.SetupNewConsumersAndSubs(
testcontext.Get(t),
env,
chainID,
vrfContracts.CoordinatorV2Plus,
configCopy,
vrfContracts.LinkToken,
2,
1,
l,
)`
$DIR/integration-tests/smoke/vrfv2plus_test.go: `.Get(t)`
$DIR/integration-tests/smoke/vrfv2plus_test.go: `.CoordinatorV2Plus.GetSubscription(testcontext.Get(t), subID)`
$DIR/integration-tests/smoke/vrfv2plus_test.go: `.Get(t)`
$DIR/integration-tests/smoke/vrfv2plus_test.go: `.LogSubDetails(l, subscription, subID.String(), vrfContracts.CoordinatorV2Plus)`
$DIR/integration-tests/smoke/vrfv2plus_test.go: `.String()`
$DIR/integration-tests/smoke/vrfv2plus_test.go: `.RequestRandomness(
consumers[0],
vrfContracts.CoordinatorV2Plus,
vrfKey,
subID,
isNativeBilling,
configCopy.VRFv2Plus.General,
l,
0,
)`
$DIR/integration-tests/smoke/vrfv2plus_test.go: `.Sleep(timeout + 1*time.Second)`
$DIR/integration-tests/smoke/vrfv2plus_test.go: `.NewFloat(*configCopy.VRFv2Plus.General.SubscriptionRefundingAmountLink)`
$DIR/integration-tests/smoke/vrfv2plus_test.go: `.NewFloat(*configCopy.VRFv2Plus.General.SubscriptionRefundingAmountNative)`
$DIR/integration-tests/smoke/vrfv2plus_test.go: `.FundSubscriptions(
fundingLinkAmt,
fundingNativeAmt,
vrfContracts.LinkToken,
vrfContracts.CoordinatorV2Plus,
[]*big.Int{subID},
)`
$DIR/integration-tests/smoke/vrfv2plus_test.go: `.CoordinatorV2Plus.PendingRequestsExist(testcontext.Get(t), subID)`
$DIR/integration-tests/smoke/vrfv2plus_test.go: `.Get(t)`
$DIR/integration-tests/smoke/vrfv2plus_test.go: `.CLNode.API.DeleteJob(vrfNode.Job.Data.ID)`
$DIR/integration-tests/smoke/vrfv2plus_test.go: `.Ptr(blockchain.StrDuration{Duration: time.Duration(time.Hour * 1)})`
$DIR/integration-tests/smoke/vrfv2plus_test.go: `.Duration(time.Hour * 1)`
$DIR/integration-tests/smoke/vrfv2plus_test.go: `.CoordinatorV2Plus.Address()`
$DIR/integration-tests/smoke/vrfv2plus_test.go: `.Sprint(chainID)`
$DIR/integration-tests/smoke/vrfv2plus_test.go: `.Info()`
$DIR/integration-tests/smoke/vrfv2plus_test.go: `.
Msg("Creating VRFV2 Plus Job with higher timeout (1hr)")`
$DIR/integration-tests/smoke/vrfv2plus_test.go: `.CreateVRFV2PlusJob(
vrfNode.CLNode.API,
vrfJobSpecConfig,
)`
$DIR/integration-tests/smoke/vrfv2plus_test.go: `.Info()`
$DIR/integration-tests/smoke/vrfv2plus_test.go: `.Str("reqID", initialReqRandomWordsRequestedEvent.RequestId.String())`
$DIR/integration-tests/smoke/vrfv2plus_test.go: `.RequestId.String()`
$DIR/integration-tests/smoke/vrfv2plus_test.go: `.
Str("subID", subID.String())`
$DIR/integration-tests/smoke/vrfv2plus_test.go: `.String()`
$DIR/integration-tests/smoke/vrfv2plus_test.go: `.
Msg("Waiting for initalReqRandomWordsFulfilledEvent")`
$DIR/integration-tests/smoke/vrfv2plus_test.go: `.CoordinatorV2Plus.WaitForRandomWordsFulfilledEvent(
contracts.RandomWordsFulfilledEventFilter{
RequestIds: []*big.Int{initialReqRandomWordsRequestedEvent.RequestId},
SubIDs: []*big.Int{subID},
Timeout: configCopy.VRFv2Plus.General.RandomWordsFulfilledEventTimeout.Duration,
},
)`
$DIR/integration-tests/smoke/vrfv2plus_test.go: `.GetRequestStatus(testcontext.Get(t), initalReqRandomWordsFulfilledEvent.RequestId)`
$DIR/integration-tests/smoke/vrfv2plus_test.go: `.Get(t)`
$DIR/integration-tests/smoke/vrfv2plus_test.go: `.Info()`
$DIR/integration-tests/smoke/vrfv2plus_test.go: `.Bool("Fulfilment Status", status.Fulfilled)`
$DIR/integration-tests/smoke/vrfv2plus_test.go: `.Msg("Random Words Request Fulfilment Status")`
$DIR/integration-tests/smoke/vrfv2plus_test.go: `.GetTestLogger(t)`
$DIR/integration-tests/smoke/vrfv2plus_test.go: `.GetConfig("Smoke", tc.VRFv2Plus)`
$DIR/integration-tests/smoke/vrfv2plus_test.go: `.MustGetSelectedNetworkConfig(config.GetNetworkConfig())`
$DIR/integration-tests/smoke/vrfv2plus_test.go: `.GetNetworkConfig()`
$DIR/integration-tests/smoke/vrfv2plus_test.go: `.GetSethClient(chainID)`
$DIR/integration-tests/smoke/vrfv2plus_test.go: `.Cfg.IsSimulatedNetwork()`
$DIR/integration-tests/smoke/vrfv2plus_test.go: `.Info()`
$DIR/integration-tests/smoke/vrfv2plus_test.go: `.
Str("Network Name", sethClient.Cfg.Network.Name)`
$DIR/integration-tests/smoke/vrfv2plus_test.go: `.
Msg("Network is a simulated network. Skipping fund return for Coordinator Subscriptions.")`
$DIR/integration-tests/smoke/vrfv2plus_test.go: `.CancelSubsAndReturnFunds(testcontext.Get(t), vrfContracts, sethClient.MustGetRootKeyAddress().Hex(), subIDsForCancellingAfterTest, l)`
$DIR/integration-tests/smoke/vrfv2plus_test.go: `.Get(t)`
$DIR/integration-tests/smoke/vrfv2plus_test.go: `.MustGetRootKeyAddress()`
$DIR/integration-tests/smoke/vrfv2plus_test.go: `.Hex()`
$DIR/integration-tests/smoke/vrfv2plus_test.go: `.Cleanup(test_env.CleanupOpts{TestName: t.Name()})`
$DIR/integration-tests/smoke/vrfv2plus_test.go: `.Name()`
$DIR/integration-tests/smoke/vrfv2plus_test.go: `.SetupVRFV2PlusUniverse(testcontext.Get(t), t, vrfEnvConfig, newEnvConfig, l)`
$DIR/integration-tests/smoke/vrfv2plus_test.go: `.Get(t)`
$DIR/integration-tests/smoke/vrfv2plus_test.go: `.SetupNewConsumersAndSubs(
testcontext.Get(t),
env,
chainID,
vrfContracts.CoordinatorV2Plus,
config,
vrfContracts.LinkToken,
1,
1,
l,
)`
$DIR/integration-tests/smoke/vrfv2plus_test.go: `.Get(t)`
$DIR/integration-tests/smoke/vrfv2plus_test.go: `.CoordinatorV2Plus.GetSubscription(testcontext.Get(t), subID)`
$DIR/integration-tests/smoke/vrfv2plus_test.go: `.Get(t)`
$DIR/integration-tests/smoke/vrfv2plus_test.go: `.LogSubDetails(l, subscription, subID.String(), vrfContracts.CoordinatorV2Plus)`
$DIR/integration-tests/smoke/vrfv2plus_test.go: `.String()`
$DIR/integration-tests/smoke/vrfv2plus_test.go: `.Info()`
$DIR/integration-tests/smoke/vrfv2plus_test.go: `.Uint16("minimumConfirmationDelay", *config.VRFv2Plus.General.MinimumConfirmations)`
$DIR/integration-tests/smoke/vrfv2plus_test.go: `.Msg("Minimum Confirmation Delay")`
$DIR/integration-tests/smoke/vrfv2plus_test.go: `.RequestRandomnessAndWaitForFulfillment(
consumers[0],
vrfContracts.CoordinatorV2Plus,
vrfKey,
subID,
isNativeBilling,
config.VRFv2Plus.General,
l,
0,
)`
$DIR/integration-tests/smoke/vrfv2plus_test.go: `.GetRequestStatus(testcontext.Get(t), randomWordsFulfilledEvent.RequestId)`
$DIR/integration-tests/smoke/vrfv2plus_test.go: `.Get(t)`
$DIR/integration-tests/smoke/vrfv2plus_test.go: `.Info()`
$DIR/integration-tests/smoke/vrfv2plus_test.go: `.Bool("Fulfilment Status", status.Fulfilled)`
$DIR/integration-tests/smoke/vrfv2plus_test.go: `.GetTestLogger(t)`
$DIR/integration-tests/smoke/vrfv2plus_test.go: `.GetConfig("Smoke", tc.VRFv2Plus)`
$DIR/integration-tests/smoke/vrfv2plus_test.go: `.MustGetSelectedNetworkConfig(config.GetNetworkConfig())`
$DIR/integration-tests/smoke/vrfv2plus_test.go: `.GetNetworkConfig()`
$DIR/integration-tests/smoke/vrfv2plus_test.go: `.GetSethClient(chainID)`
$DIR/integration-tests/smoke/vrfv2plus_test.go: `.Cfg.IsSimulatedNetwork()`
$DIR/integration-tests/smoke/vrfv2plus_test.go: `.Info()`
$DIR/integration-tests/smoke/vrfv2plus_test.go: `.
Str("Network Name", sethClient.Cfg.Network.Name)`
$DIR/integration-tests/smoke/vrfv2plus_test.go: `.
Msg("Network is a simulated network. Skipping fund return for Coordinator Subscriptions.")`
$DIR/integration-tests/smoke/vrfv2plus_test.go: `.CancelSubsAndReturnFunds(testcontext.Get(t), vrfContracts, defaultWalletAddress, subIDsForCancellingAfterTest, l)`
$DIR/integration-tests/smoke/vrfv2plus_test.go: `.Get(t)`
$DIR/integration-tests/smoke/vrfv2plus_test.go: `.Cleanup(test_env.CleanupOpts{TestName: t.Name()})`
$DIR/integration-tests/smoke/vrfv2plus_test.go: `.Name()`
$DIR/integration-tests/smoke/vrfv2plus_test.go: `.GetDefaultChainlinkNodeLogScannerSettingsWithExtraAllowedMessages(
testreporters.NewAllowedLogMessage(
"This is a problem and either means a very deep re-org occurred",
"Test is expecting a reorg to occur",
zapcore.DPanicLevel,
testreporters.WarnAboutAllowedMsgs_No),
testreporters.NewAllowedLogMessage(
"Reorg greater than finality depth detected",
"Test is expecting a reorg to occur",
zapcore.DPanicLevel,
testreporters.WarnAboutAllowedMsgs_No),
)`
$DIR/integration-tests/smoke/vrfv2plus_test.go: `.NewAllowedLogMessage(
"This is a problem and either means a very deep re-org occurred",
"Test is expecting a reorg to occur",
zapcore.DPanicLevel,
testreporters.WarnAboutAllowedMsgs_No)`
$DIR/integration-tests/smoke/vrfv2plus_test.go: `.NewAllowedLogMessage(
"Reorg greater than finality depth detected",
"Test is expecting a reorg to occur",
zapcore.DPanicLevel,
testreporters.WarnAboutAllowedMsgs_No)`
$DIR/integration-tests/smoke/vrfv2plus_test.go: `.SetupVRFV2PlusUniverse(testcontext.Get(t), t, vrfEnvConfig, newEnvConfig, l)`
$DIR/integration-tests/smoke/vrfv2plus_test.go: `.Get(t)`
$DIR/integration-tests/smoke/vrfv2plus_test.go: `.GetSethClient(chainID)`
$DIR/integration-tests/smoke/vrfv2plus_test.go: `.SetupNewConsumersAndSubs(
testcontext.Get(t),
env,
chainID,
vrfContracts.CoordinatorV2Plus,
config,
vrfContracts.LinkToken,
1,
1,
l,
)`
$DIR/integration-tests/smoke/vrfv2plus_test.go: `.Get(t)`
$DIR/integration-tests/smoke/vrfv2plus_test.go: `.CoordinatorV2Plus.GetSubscription(testcontext.Get(t), subID)`
$DIR/integration-tests/smoke/vrfv2plus_test.go: `.Get(t)`
$DIR/integration-tests/smoke/vrfv2plus_test.go: `.LogSubDetails(l, subscription, subID.String(), vrfContracts.CoordinatorV2Plus)`
$DIR/integration-tests/smoke/vrfv2plus_test.go: `.String()`
$DIR/integration-tests/smoke/vrfv2plus_test.go: `.Run("Reorg on fulfillment", func(t *testing.T) {
configCopy := config.MustCopy().(tc.TestConfig)
configCopy.VRFv2Plus.General.MinimumConfirmations = ptr.Ptr[uint16](10)
//1. request randomness and wait for fulfillment for blockhash from Reorged Fork
randomWordsRequestedEvent, randomWordsFulfilledEventOnReorgedFork, err := vrfv2plus.RequestRandomnessAndWaitForFulfillment(
consumers[0],
vrfContracts.CoordinatorV2Plus,
vrfKey,
subID,
isNativeBilling,
configCopy.VRFv2Plus.General,
l,
0,
)
require.NoError(t, err)
// rewind chain to block number after the request was made, but before the request was fulfilled
rewindChainToBlock := randomWordsRequestedEvent.Raw.BlockNumber + 1
rpcUrl, err := actions.GetRPCUrl(env, chainID)
require.NoError(t, err, "error getting rpc url")
//2. rewind chain by n number of blocks - basically, mimicking reorg scenario
latestBlockNumberAfterReorg, err := actions.RewindSimulatedChainToBlockNumber(testcontext.Get(t), sethClient, rpcUrl, rewindChainToBlock, l)
require.NoError(t, err, fmt.Sprintf("error rewinding chain to block number %d", rewindChainToBlock))
//3.1 ensure that chain is reorged and latest block number is greater than the block number when request was made
require.Greater(t, latestBlockNumberAfterReorg, randomWordsRequestedEvent.Raw.BlockNumber)
//3.2 ensure that chain is reorged and latest block number is less than the block number when fulfilment was performed
require.Less(t, latestBlockNumberAfterReorg, randomWordsFulfilledEventOnReorgedFork.Raw.BlockNumber)
//4. wait for the fulfillment which VRF Node will generate for Canonical chain
_, err = vrfv2plus.WaitRandomWordsFulfilledEvent(
vrfContracts.CoordinatorV2Plus,
randomWordsRequestedEvent.RequestId,
subID,
randomWordsRequestedEvent.Raw.BlockNumber,
isNativeBilling,
configCopy.VRFv2Plus.General.RandomWordsFulfilledEventTimeout.Duration,
l,
0,
)
require.NoError(t, err, "error waiting for randomness fulfilled event")
})`
$DIR/integration-tests/smoke/vrfv2plus_test.go: `.MustCopy()`
$DIR/integration-tests/smoke/vrfv2plus_test.go: `.RequestRandomnessAndWaitForFulfillment(
consumers[0],
vrfContracts.CoordinatorV2Plus,
vrfKey,
subID,
isNativeBilling,
configCopy.VRFv2Plus.General,
l,
0,
)`
$DIR/integration-tests/smoke/vrfv2plus_test.go: `.GetRPCUrl(env, chainID)`
$DIR/integration-tests/smoke/vrfv2plus_test.go: `.RewindSimulatedChainToBlockNumber(testcontext.Get(t), sethClient, rpcUrl, rewindChainToBlock, l)`
$DIR/integration-tests/smoke/vrfv2plus_test.go: `.Get(t)`
$DIR/integration-tests/smoke/vrfv2plus_test.go: `.WaitRandomWordsFulfilledEvent(
vrfContracts.CoordinatorV2Plus,
randomWordsRequestedEvent.RequestId,
subID,
randomWordsRequestedEvent.Raw.BlockNumber,
isNativeBilling,
configCopy.VRFv2Plus.General.RandomWordsFulfilledEventTimeout.Duration,
l,
0,
)`
$DIR/integration-tests/smoke/vrfv2plus_test.go: `.MustCopy()`
$DIR/integration-tests/smoke/vrfv2plus_test.go: `.RequestRandomness(
consumers[0],
vrfContracts.CoordinatorV2Plus,
vrfKey,
subID,
isNativeBilling,
configCopy.VRFv2Plus.General,
l,
0,
)`
$DIR/integration-tests/smoke/vrfv2plus_test.go: `.GetRPCUrl(env, chainID)`
$DIR/integration-tests/smoke/vrfv2plus_test.go: `.RewindSimulatedChainToBlockNumber(testcontext.Get(t), sethClient, rpcUrl, rewindChainToBlockNumber, l)`
$DIR/integration-tests/smoke/vrfv2plus_test.go: `.Get(t)`
$DIR/integration-tests/smoke/vrfv2plus_test.go: `.CoordinatorV2Plus.WaitForRandomWordsFulfilledEvent(
contracts.RandomWordsFulfilledEventFilter{
RequestIds: []*big.Int{randomWordsRequestedEvent.RequestId},
SubIDs: []*big.Int{subID},
Timeout: time.Second * 10,
},
)`
$DIR/integration-tests/smoke/vrfv2plus_test.go: `.GetTestLogger(t)`
$DIR/integration-tests/smoke/vrfv2plus_test.go: `.GetConfig("Smoke", tc.VRFv2Plus)`
$DIR/integration-tests/smoke/vrfv2plus_test.go: `.MustGetSelectedNetworkConfig(config.GetNetworkConfig())`
$DIR/integration-tests/smoke/vrfv2plus_test.go: `.GetNetworkConfig()`
$DIR/integration-tests/smoke/vrfv2plus_test.go: `.GetSethClient(chainID)`
$DIR/integration-tests/smoke/vrfv2plus_test.go: `.Cfg.IsSimulatedNetwork()`
$DIR/integration-tests/smoke/vrfv2plus_test.go: `.Info()`
$DIR/integration-tests/smoke/vrfv2plus_test.go: `.
Str("Network Name", sethClient.Cfg.Network.Name)`
$DIR/integration-tests/smoke/vrfv2plus_test.go: `.
Msg("Network is a simulated network. Skipping fund return for Coordinator Subscriptions.")`
$DIR/integration-tests/smoke/vrfv2plus_test.go: `.CancelSubsAndReturnFunds(testcontext.Get(t), vrfContracts, defaultWalletAddress, subIDsForCancellingAfterTest, l)`
$DIR/integration-tests/smoke/vrfv2plus_test.go: `.Get(t)`
$DIR/integration-tests/smoke/vrfv2plus_test.go: `.Cleanup(test_env.CleanupOpts{TestName: t.Name()})`
$DIR/integration-tests/smoke/vrfv2plus_test.go: `.Name()`
$DIR/integration-tests/smoke/vrfv2plus_test.go: `.SetupVRFV2PlusUniverse(testcontext.Get(t), t, vrfEnvConfig, newEnvConfig, l)`
$DIR/integration-tests/smoke/vrfv2plus_test.go: `.Get(t)`
$DIR/integration-tests/smoke/vrfv2plus_test.go: `.GetSethClient(chainID)`
$DIR/integration-tests/smoke/vrfv2plus_test.go: `.Ptr(uint32(500_000))`
$DIR/integration-tests/smoke/vrfv2plus_test.go: `.Run("Batch Fulfillment Enabled", func(t *testing.T) {
configCopy := config.MustCopy().(tc.TestConfig)
var isNativeBilling = true
vrfNode, exists := nodeTypeToNodeMap[vrfcommon.VRF]
require.True(t, exists, "VRF Node does not exist")
//ensure that no job present on the node
err = actions.DeleteJobs([]*client.ChainlinkClient{vrfNode.CLNode.API})
require.NoError(t, err)
batchFullfillmentEnabled := true
// create job with batch fulfillment enabled
vrfJobSpecConfig := vrfcommon.VRFJobSpecConfig{
ForwardingAllowed: *configCopy.VRFv2Plus.General.VRFJobForwardingAllowed,
CoordinatorAddress: vrfContracts.CoordinatorV2Plus.Address(),
BatchCoordinatorAddress: vrfContracts.BatchCoordinatorV2Plus.Address(),
FromAddresses: vrfNode.TXKeyAddressStrings,
EVMChainID: fmt.Sprint(chainID),
MinIncomingConfirmations: int(*configCopy.VRFv2Plus.General.MinimumConfirmations),
PublicKey: vrfKey.PubKeyCompressed,
EstimateGasMultiplier: *configCopy.VRFv2Plus.General.VRFJobEstimateGasMultiplier,
BatchFulfillmentEnabled: batchFullfillmentEnabled,
BatchFulfillmentGasMultiplier: *configCopy.VRFv2Plus.General.VRFJobBatchFulfillmentGasMultiplier,
PollPeriod: configCopy.VRFv2Plus.General.VRFJobPollPeriod.Duration,
RequestTimeout: configCopy.VRFv2Plus.General.VRFJobRequestTimeout.Duration,
SimulationBlock: configCopy.VRFv2Plus.General.VRFJobSimulationBlock,
VRFOwnerConfig: nil,
}
l.Info().
Msg("Creating VRFV2 Plus Job with `batchFulfillmentEnabled = true`")
job, err := vrfv2plus.CreateVRFV2PlusJob(
vrfNode.CLNode.API,
vrfJobSpecConfig,
)
require.NoError(t, err, "error creating job with higher timeout")
vrfNode.Job = job
consumers, subIDs, err := vrfv2plus.SetupNewConsumersAndSubs(
testcontext.Get(t),
env,
chainID,
vrfContracts.CoordinatorV2Plus,
configCopy,
vrfContracts.LinkToken,
1,
1,
l,
)
require.NoError(t, err, "error setting up new consumers and subs")
subID := subIDs[0]
subscription, err := vrfContracts.CoordinatorV2Plus.GetSubscription(testcontext.Get(t), subID)
require.NoError(t, err, "error getting subscription information")
vrfcommon.LogSubDetails(l, subscription, subID.String(), vrfContracts.CoordinatorV2Plus)
subIDsForCancellingAfterTest = append(subIDsForCancellingAfterTest, subIDs...)
configCopy.VRFv2Plus.General.RandomnessRequestCountPerRequest = ptr.Ptr(uint16(randRequestCount))
// test and assert
_, randomWordsFulfilledEvent, err := vrfv2plus.RequestRandomnessAndWaitForFulfillment(
consumers[0],
vrfContracts.CoordinatorV2Plus,
vrfKey,
subID,
isNativeBilling,
configCopy.VRFv2Plus.General,
l,
0,
)
require.NoError(t, err, "error requesting randomness and waiting for fulfilment")
var wgAllRequestsFulfilled sync.WaitGroup
wgAllRequestsFulfilled.Add(1)
requestCount, fulfilmentCount, err := vrfcommon.WaitForRequestCountEqualToFulfilmentCount(testcontext.Get(t), consumers[0], 2*time.Minute, &wgAllRequestsFulfilled)
require.NoError(t, err)
wgAllRequestsFulfilled.Wait()
l.Info().
Interface("Request Count", requestCount).
Interface("Fulfilment Count", fulfilmentCount).
Msg("Request/Fulfilment Stats")
clNodeTxs, resp, err := nodeTypeToNodeMap[vrfcommon.VRF].CLNode.API.ReadTransactions()
require.NoError(t, err)
require.Equal(t, 200, resp.StatusCode)
var batchFulfillmentTxs []client.TransactionData
for _, tx := range clNodeTxs.Data {
if common.HexToAddress(tx.Attributes.To).Cmp(common.HexToAddress(vrfContracts.BatchCoordinatorV2Plus.Address())) == 0 {
batchFulfillmentTxs = append(batchFulfillmentTxs, tx)
}
}
fulfillmentTx, _, err := sethClient.Client.TransactionByHash(testcontext.Get(t), randomWordsFulfilledEvent.Raw.TxHash)
require.NoError(t, err, "error getting tx from hash")
fulfillmentTXToAddress := fulfillmentTx.To().String()
l.Info().
Str("Actual Fulfillment Tx To Address", fulfillmentTXToAddress).
Str("BatchCoordinatorV2Plus Address", vrfContracts.BatchCoordinatorV2Plus.Address()).
Msg("Fulfillment Tx To Address should be the BatchCoordinatorV2Plus Address when batch fulfillment is enabled")
// verify that VRF node sends fulfillments via BatchCoordinator contract
require.Equal(t, vrfContracts.BatchCoordinatorV2Plus.Address(), fulfillmentTXToAddress, "Fulfillment Tx To Address should be the BatchCoordinatorV2Plus Address when batch fulfillment is enabled")
// verify that all fulfillments should be inside one tx
// This check is disabled for live testnets since each testnet has different gas usage for similar tx
if network.Simulated {
fulfillmentTxReceipt, err := sethClient.Client.TransactionReceipt(testcontext.Get(t), fulfillmentTx.Hash())
require.NoError(t, err)
randomWordsFulfilledLogs, err := contracts.ParseRandomWordsFulfilledLogs(vrfContracts.CoordinatorV2Plus, fulfillmentTxReceipt.Logs)
require.NoError(t, err)
require.Equal(t, 1, len(batchFulfillmentTxs))
require.Equal(t, int(randRequestCount), len(randomWordsFulfilledLogs))
}
})`
$DIR/integration-tests/smoke/vrfv2plus_test.go: `.MustCopy()`
$DIR/integration-tests/smoke/vrfv2plus_test.go: `.DeleteJobs([]*client.ChainlinkClient{vrfNode.CLNode.API})`
$DIR/integration-tests/smoke/vrfv2plus_test.go: `.CoordinatorV2Plus.Address()`
$DIR/integration-tests/smoke/vrfv2plus_test.go: `.BatchCoordinatorV2Plus.Address()`
$DIR/integration-tests/smoke/vrfv2plus_test.go: `.Sprint(chainID)`
$DIR/integration-tests/smoke/vrfv2plus_test.go: `.Info()`
$DIR/integration-tests/smoke/vrfv2plus_test.go: `.
Msg("Creating VRFV2 Plus Job with `batchFulfillmentEnabled = true`")`
$DIR/integration-tests/smoke/vrfv2plus_test.go: `.CreateVRFV2PlusJob(
vrfNode.CLNode.API,
vrfJobSpecConfig,
)`
$DIR/integration-tests/smoke/vrfv2plus_test.go: `.SetupNewConsumersAndSubs(
testcontext.Get(t),
env,
chainID,
vrfContracts.CoordinatorV2Plus,
configCopy,
vrfContracts.LinkToken,
1,
1,
l,
)`
$DIR/integration-tests/smoke/vrfv2plus_test.go: `.Get(t)`
$DIR/integration-tests/smoke/vrfv2plus_test.go: `.CoordinatorV2Plus.GetSubscription(testcontext.Get(t), subID)`
$DIR/integration-tests/smoke/vrfv2plus_test.go: `.Get(t)`
$DIR/integration-tests/smoke/vrfv2plus_test.go: `.LogSubDetails(l, subscription, subID.String(), vrfContracts.CoordinatorV2Plus)`
$DIR/integration-tests/smoke/vrfv2plus_test.go: `.String()`
$DIR/integration-tests/smoke/vrfv2plus_test.go: `.Ptr(uint16(randRequestCount))`
$DIR/integration-tests/smoke/vrfv2plus_test.go: `.RequestRandomnessAndWaitForFulfillment(
consumers[0],
vrfContracts.CoordinatorV2Plus,
vrfKey,
subID,
isNativeBilling,
configCopy.VRFv2Plus.General,
l,
0,
)`
$DIR/integration-tests/smoke/vrfv2plus_test.go: `.Add(1)`
$DIR/integration-tests/smoke/vrfv2plus_test.go: `.WaitForRequestCountEqualToFulfilmentCount(testcontext.Get(t), consumers[0], 2*time.Minute, &wgAllRequestsFulfilled)`
$DIR/integration-tests/smoke/vrfv2plus_test.go: `.Get(t)`
$DIR/integration-tests/smoke/vrfv2plus_test.go: `.Wait()`
$DIR/integration-tests/smoke/vrfv2plus_test.go: `.Info()`
$DIR/integration-tests/smoke/vrfv2plus_test.go: `.
Interface("Request Count", requestCount)`
$DIR/integration-tests/smoke/vrfv2plus_test.go: `.
Interface("Fulfilment Count", fulfilmentCount)`
$DIR/integration-tests/smoke/vrfv2plus_test.go: `.
Msg("Request/Fulfilment Stats")`
$DIR/integration-tests/smoke/vrfv2plus_test.go: `.CLNode.API.ReadTransactions()`
$DIR/integration-tests/smoke/vrfv2plus_test.go: `.HexToAddress(tx.Attributes.To)`
$DIR/integration-tests/smoke/vrfv2plus_test.go: `.Cmp(common.HexToAddress(vrfContracts.BatchCoordinatorV2Plus.Address()))`
$DIR/integration-tests/smoke/vrfv2plus_test.go: `.HexToAddress(vrfContracts.BatchCoordinatorV2Plus.Address())`
$DIR/integration-tests/smoke/vrfv2plus_test.go: `.BatchCoordinatorV2Plus.Address()`
$DIR/integration-tests/smoke/vrfv2plus_test.go: `.Client.TransactionByHash(testcontext.Get(t), randomWordsFulfilledEvent.Raw.TxHash)`
$DIR/integration-tests/smoke/vrfv2plus_test.go: `.Get(t)`
$DIR/integration-tests/smoke/vrfv2plus_test.go: `.To()`
$DIR/integration-tests/smoke/vrfv2plus_test.go: `.String()`
$DIR/integration-tests/smoke/vrfv2plus_test.go: `.Info()`
$DIR/integration-tests/smoke/vrfv2plus_test.go: `.
Str("Actual Fulfillment Tx To Address", fulfillmentTXToAddress)`
$DIR/integration-tests/smoke/vrfv2plus_test.go: `.
Str("BatchCoordinatorV2Plus Address", vrfContracts.BatchCoordinatorV2Plus.Address())`
$DIR/integration-tests/smoke/vrfv2plus_test.go: `.BatchCoordinatorV2Plus.Address()`
$DIR/integration-tests/smoke/vrfv2plus_test.go: `.
Msg("Fulfillment Tx To Address should be the BatchCoordinatorV2Plus Address when batch fulfillment is enabled")`
$DIR/integration-tests/smoke/vrfv2plus_test.go: `.Client.TransactionReceipt(testcontext.Get(t), fulfillmentTx.Hash())`
$DIR/integration-tests/smoke/vrfv2plus_test.go: `.Get(t)`
$DIR/integration-tests/smoke/vrfv2plus_test.go: `.Hash()`
$DIR/integration-tests/smoke/vrfv2plus_test.go: `.ParseRandomWordsFulfilledLogs(vrfContracts.CoordinatorV2Plus, fulfillmentTxReceipt.Logs)`
$DIR/integration-tests/smoke/vrfv2plus_test.go: `.MustCopy()`
$DIR/integration-tests/smoke/vrfv2plus_test.go: `.DeleteJobs([]*client.ChainlinkClient{vrfNode.CLNode.API})`
$DIR/integration-tests/smoke/vrfv2plus_test.go: `.CoordinatorV2Plus.Address()`
$DIR/integration-tests/smoke/vrfv2plus_test.go: `.BatchCoordinatorV2Plus.Address()`
$DIR/integration-tests/smoke/vrfv2plus_test.go: `.Sprint(chainID)`
$DIR/integration-tests/smoke/vrfv2plus_test.go: `.Info()`
$DIR/integration-tests/smoke/vrfv2plus_test.go: `.
Msg("Creating VRFV2 Plus Job with `batchFulfillmentEnabled = false`")`
$DIR/integration-tests/smoke/vrfv2plus_test.go: `.CreateVRFV2PlusJob(
vrfNode.CLNode.API,
vrfJobSpecConfig,
)`
$DIR/integration-tests/smoke/vrfv2plus_test.go: `.SetupNewConsumersAndSubs(
testcontext.Get(t),
env,
chainID,
vrfContracts.CoordinatorV2Plus,
configCopy,
vrfContracts.LinkToken,
1,
1,
l,
)`
$DIR/integration-tests/smoke/vrfv2plus_test.go: `.Get(t)`
$DIR/integration-tests/smoke/vrfv2plus_test.go: `.CoordinatorV2Plus.GetSubscription(testcontext.Get(t), subID)`
$DIR/integration-tests/smoke/vrfv2plus_test.go: `.Get(t)`
$DIR/integration-tests/smoke/vrfv2plus_test.go: `.LogSubDetails(l, subscription, subID.String(), vrfContracts.CoordinatorV2Plus)`
$DIR/integration-tests/smoke/vrfv2plus_test.go: `.String()`
$DIR/integration-tests/smoke/vrfv2plus_test.go: `.Ptr(uint16(randRequestCount))`
$DIR/integration-tests/smoke/vrfv2plus_test.go: `.RequestRandomnessAndWaitForFulfillment(
consumers[0],
vrfContracts.CoordinatorV2Plus,
vrfKey,
subID,
isNativeBilling,
configCopy.VRFv2Plus.General,
l,
0,
)`
$DIR/integration-tests/smoke/vrfv2plus_test.go: `.Add(1)`
$DIR/integration-tests/smoke/vrfv2plus_test.go: `.WaitForRequestCountEqualToFulfilmentCount(testcontext.Get(t), consumers[0], 2*time.Minute, &wgAllRequestsFulfilled)`
$DIR/integration-tests/smoke/vrfv2plus_test.go: `.Get(t)`
$DIR/integration-tests/smoke/vrfv2plus_test.go: `.Wait()`
$DIR/integration-tests/smoke/vrfv2plus_test.go: `.Info()`
$DIR/integration-tests/smoke/vrfv2plus_test.go: `.
Interface("Request Count", requestCount)`
$DIR/integration-tests/smoke/vrfv2plus_test.go: `.
Interface("Fulfilment Count", fulfilmentCount)`
$DIR/integration-tests/smoke/vrfv2plus_test.go: `.
Msg("Request/Fulfilment Stats")`
$DIR/integration-tests/smoke/vrfv2plus_test.go: `.Client.TransactionByHash(testcontext.Get(t), randomWordsFulfilledEvent.Raw.TxHash)`
$DIR/integration-tests/smoke/vrfv2plus_test.go: `.Get(t)`
$DIR/integration-tests/smoke/vrfv2plus_test.go: `.To()`
$DIR/integration-tests/smoke/vrfv2plus_test.go: `.String()`
$DIR/integration-tests/smoke/vrfv2plus_test.go: `.Info()`
$DIR/integration-tests/smoke/vrfv2plus_test.go: `.
Str("Actual Fulfillment Tx To Address", fulfillmentTXToAddress)`
$DIR/integration-tests/smoke/vrfv2plus_test.go: `.
Str("CoordinatorV2Plus Address", vrfContracts.CoordinatorV2Plus.Address())`
$DIR/integration-tests/smoke/vrfv2plus_test.go: `.CoordinatorV2Plus.Address()`
$DIR/integration-tests/smoke/vrfv2plus_test.go: `.
Msg("Fulfillment Tx To Address should be the CoordinatorV2Plus Address when batch fulfillment is disabled")`
$DIR/integration-tests/smoke/vrfv2plus_test.go: `.CLNode.API.ReadTransactions()`
$DIR/integration-tests/smoke/vrfv2plus_test.go: `.HexToAddress(tx.Attributes.To)`
$DIR/integration-tests/smoke/vrfv2plus_test.go: `.Cmp(common.HexToAddress(vrfContracts.CoordinatorV2Plus.Address()))`
$DIR/integration-tests/smoke/vrfv2plus_test.go: `.HexToAddress(vrfContracts.CoordinatorV2Plus.Address())`
$DIR/integration-tests/smoke/vrfv2plus_test.go: `.CoordinatorV2Plus.Address()`
$DIR/integration-tests/soak/forwarder_ocr_test.go: `ocrSoakTest.DeployEnvironment(customNetworkTOML, &config)`
$DIR/integration-tests/soak/forwarder_ocr_test.go: `t.Cleanup(func() {
if err := actions_seth.TeardownRemoteSuite(ocrSoakTest.TearDownVals(t)); err != nil {
l.Error().Err(err).Msg("Error tearing down environment")
}
})`
$DIR/integration-tests/soak/forwarder_ocr_test.go: `ocrSoakTest.Setup(&config)`
$DIR/integration-tests/soak/forwarder_ocr_test.go: `.GetTestLogger(t)`
$DIR/integration-tests/soak/forwarder_ocr_test.go: `.GetConfig("Soak", tc.OCR)`
$DIR/integration-tests/soak/forwarder_ocr_test.go: `.NewOCRSoakTest(t, &config, true)`
$DIR/integration-tests/soak/forwarder_ocr_test.go: `.DeployEnvironment(customNetworkTOML, &config)`
$DIR/integration-tests/soak/forwarder_ocr_test.go: `.Environment()`
$DIR/integration-tests/soak/forwarder_ocr_test.go: `.WillUseRemoteRunner()`
$DIR/integration-tests/soak/forwarder_ocr_test.go: `.Cleanup(func() {
if err := actions_seth.TeardownRemoteSuite(ocrSoakTest.TearDownVals(t)); err != nil {
l.Error().Err(err).Msg("Error tearing down environment")
}
})`
$DIR/integration-tests/soak/forwarder_ocr_test.go: `.TeardownRemoteSuite(ocrSoakTest.TearDownVals(t))`
$DIR/integration-tests/soak/forwarder_ocr_test.go: `.TearDownVals(t)`
$DIR/integration-tests/soak/forwarder_ocr_test.go: `.Setup(&config)`
$DIR/integration-tests/soak/ocr_test.go: `ocrSoakTest.DeployEnvironment(customNetworkTOML, &config)`
$DIR/integration-tests/soak/ocr_test.go: `t.Cleanup(func() {
if err := actions_seth.TeardownRemoteSuite(ocrSoakTest.TearDownVals(t)); err != nil {
l.Error().Err(err).Msg("Error tearing down environment")
}
})`
$DIR/integration-tests/soak/ocr_test.go: `err = ocrSoakTest.LoadState()`
$DIR/integration-tests/soak/ocr_test.go: `ocrSoakTest.Resume()`
$DIR/integration-tests/soak/ocr_test.go: `ocrSoakTest.Setup(&config)`
$DIR/integration-tests/soak/ocr_test.go: `ocrSoakTest.Run()`
$DIR/integration-tests/soak/ocr_test.go: `.GetTestLogger(t)`
$DIR/integration-tests/soak/ocr_test.go: `.GetConfig("Soak", tc.OCR)`
$DIR/integration-tests/soak/ocr_test.go: `.NewOCRSoakTest(t, &config, false)`
$DIR/integration-tests/soak/ocr_test.go: `.Interrupted()`
$DIR/integration-tests/soak/ocr_test.go: `.DeployEnvironment(customNetworkTOML, &config)`
$DIR/integration-tests/soak/ocr_test.go: `.Environment()`
$DIR/integration-tests/soak/ocr_test.go: `.WillUseRemoteRunner()`
$DIR/integration-tests/soak/ocr_test.go: `.Cleanup(func() {
if err := actions_seth.TeardownRemoteSuite(ocrSoakTest.TearDownVals(t)); err != nil {
l.Error().Err(err).Msg("Error tearing down environment")
}
})`
$DIR/integration-tests/soak/ocr_test.go: `.TeardownRemoteSuite(ocrSoakTest.TearDownVals(t))`
$DIR/integration-tests/soak/ocr_test.go: `.TearDownVals(t)`
$DIR/integration-tests/soak/ocr_test.go: `.Interrupted()`
$DIR/integration-tests/soak/ocr_test.go: `.LoadState()`
$DIR/integration-tests/soak/ocr_test.go: `.Resume()`
$DIR/integration-tests/soak/ocr_test.go: `.Setup(&config)`
$DIR/integration-tests/soak/ocr_test.go: `.Run()`
$DIR/integration-tests/testconfig/testconfig_test.go: `os.Setenv(ctf_config.Base64NetworkConfigEnvVarName, networksEncoded)`
$DIR/integration-tests/testconfig/testconfig_test.go: `os.Setenv(Base64OverrideEnvVarName, testConfigEncoded)`
$DIR/integration-tests/testconfig/testconfig_test.go: `.StdEncoding.EncodeToString([]byte(networkConfigTOML))`
$DIR/integration-tests/testconfig/testconfig_test.go: `.Setenv(ctf_config.Base64NetworkConfigEnvVarName, networksEncoded)`
$DIR/integration-tests/testconfig/testconfig_test.go: `.Ptr(7)`
$DIR/integration-tests/testconfig/testconfig_test.go: `.Ptr(9)`
$DIR/integration-tests/testconfig/testconfig_test.go: `.Ptr(10)`
$DIR/integration-tests/testconfig/testconfig_test.go: `.Ptr("minimum")`
$DIR/integration-tests/testconfig/testconfig_test.go: `.Ptr("debug")`
$DIR/integration-tests/testconfig/testconfig_test.go: `.Ptr(1)`
$DIR/integration-tests/testconfig/testconfig_test.go: `.Ptr(2)`
$DIR/integration-tests/testconfig/testconfig_test.go: `.Ptr(3)`
$DIR/integration-tests/testconfig/testconfig_test.go: `.Ptr(4)`
$DIR/integration-tests/testconfig/testconfig_test.go: `.NewInt(5)`
$DIR/integration-tests/testconfig/testconfig_test.go: `.NewInt(6)`
$DIR/integration-tests/testconfig/testconfig_test.go: `.Ptr(true)`
$DIR/integration-tests/testconfig/testconfig_test.go: `.Ptr(3)`
$DIR/integration-tests/testconfig/testconfig_test.go: `.Ptr(2)`
$DIR/integration-tests/testconfig/testconfig_test.go: `.Ptr(3)`
$DIR/integration-tests/testconfig/testconfig_test.go: `.Ptr(7)`
$DIR/integration-tests/testconfig/testconfig_test.go: `.NewInt(5)`
$DIR/integration-tests/testconfig/testconfig_test.go: `.NewInt(6)`
$DIR/integration-tests/testconfig/testconfig_test.go: `.Ptr(false)`
$DIR/integration-tests/testconfig/testconfig_test.go: `.Marshal(testConfig)`
$DIR/integration-tests/testconfig/testconfig_test.go: `.StdEncoding.EncodeToString(configMarshalled)`
$DIR/integration-tests/testconfig/testconfig_test.go: `.Setenv(Base64OverrideEnvVarName, testConfigEncoded)`
$DIR/main_test.go: `t.Run(strings.TrimPrefix(path, "testdata/scripts/"), func(t *testing.T) {
t.Parallel()
testscript.Run(t, testscript.Params{
Dir: path,
Setup: commonEnv,
ContinueOnError: true,
// UpdateScripts: true, // uncomment to update golden files
})
})`
$DIR/main_test.go: `testscript.Run(t, testscript.Params{
Dir: path,
Setup: commonEnv,
ContinueOnError: true,
// UpdateScripts: true, // uncomment to update golden files
})`
$DIR/main_test.go: `.RunMain(m, map[string]func() int{
"chainlink": core.Main,
})`
$DIR/main_test.go: `.Short()`
$DIR/main_test.go: `.NewDirVisitor("testdata/scripts", txtar.Recurse, func(path string) error {
t.Run(strings.TrimPrefix(path, "testdata/scripts/"), func(t *testing.T) {
t.Parallel()
testscript.Run(t, testscript.Params{
Dir: path,
Setup: commonEnv,
ContinueOnError: true,
// UpdateScripts: true, // uncomment to update golden files
})
})
return nil
})`
$DIR/main_test.go: `.Run(strings.TrimPrefix(path, "testdata/scripts/"), func(t *testing.T) {
t.Parallel()
testscript.Run(t, testscript.Params{
Dir: path,
Setup: commonEnv,
ContinueOnError: true,
// UpdateScripts: true, // uncomment to update golden files
})
})`
$DIR/main_test.go: `.TrimPrefix(path, "testdata/scripts/")`
$DIR/main_test.go: `.Run(t, testscript.Params{
Dir: path,
Setup: commonEnv,
ContinueOnError: true,
// UpdateScripts: true, // uncomment to update golden files
})`
$DIR/main_test.go: `.Walk()`
$DIR/plugins/cmd_test.go: `.Contains(err.Error(), "failed to register")`
$DIR/plugins/env_test.go: `t.Run("valid", func(t *testing.T) {
got, err := ParseEnvFile("testdata/valid.env")
require.NoError(t, err)
require.Equal(t, []string{"GOMEMLIMIT=1MiB"}, got)
})`
$DIR/plugins/env_test.go: `t.Run("invalid", func(t *testing.T) {
_, err := ParseEnvFile("testdata/invalid.env")
require.Error(t, err)
})`
$DIR/plugins/env_test.go: `.Run("valid", func(t *testing.T) {
got, err := ParseEnvFile("testdata/valid.env")
require.NoError(t, err)
require.Equal(t, []string{"GOMEMLIMIT=1MiB"}, got)
})`
$DIR/plugins/env_test.go: `.Run("invalid", func(t *testing.T) {
_, err := ParseEnvFile("testdata/invalid.env")
require.Error(t, err)
})`
$DIR/plugins/loop_registry_test.go: `.TestLogger(t)`
$DIR/plugins/loop_registry_test.go: `.Register("foo")`
$DIR/plugins/loop_registry_test.go: `.Register("foo")`
$DIR/plugins/loop_registry_test.go: `.Register("bar")`
$DIR/plugins/loop_registry_test.go: `.TestLogger(t)`
$DIR/plugins/loop_registry_test.go: `.Register("testID")`
$DIR/plugins/medianpoc/data_source_test.go: `.TestLogger(t)`
$DIR/plugins/medianpoc/data_source_test.go: `.Observe(tests.Context(t), ocrtypes.ReportTimestamp{})`
$DIR/plugins/medianpoc/data_source_test.go: `.Context(t)`
$DIR/plugins/medianpoc/data_source_test.go: `.NewInt(expect.Val.(int64))`
$DIR/plugins/medianpoc/data_source_test.go: `.TestLogger(t)`
$DIR/plugins/medianpoc/data_source_test.go: `.New("something went wrong")`
$DIR/plugins/medianpoc/data_source_test.go: `.Observe(tests.Context(t), ocrtypes.ReportTimestamp{})`
$DIR/plugins/medianpoc/data_source_test.go: `.Context(t)`
$DIR/plugins/medianpoc/data_source_test.go: `.TestLogger(t)`
$DIR/plugins/medianpoc/data_source_test.go: `.Observe(tests.Context(t), ocrtypes.ReportTimestamp{})`
$DIR/plugins/medianpoc/data_source_test.go: `.Context(t)`
$DIR/plugins/medianpoc/plugin_test.go: `.TestLogger(t)`
$DIR/plugins/medianpoc/plugin_test.go: `.Sprintf(
`{"pipelines": [{"name": "__DEFAULT_PIPELINE__", "spec": "%s"},{"name": "juelsPerFeeCoinPipeline", "spec": "%s"}]}`,
defaultSpec,
juelsPerFeeCoinSpec,
)`
$DIR/plugins/medianpoc/plugin_test.go: `.newFactory(
tests.Context(t),
config,
prov,
pr,
nil,
mockErrorLog{},
)`
$DIR/plugins/medianpoc/plugin_test.go: `.Context(t)`
$DIR/tools/flakeytests/reporter_test.go: `.Now()`
$DIR/tools/flakeytests/reporter_test.go: `.Sprintf("%d", now.UnixNano())`
$DIR/tools/flakeytests/reporter_test.go: `.UnixNano()`
$DIR/tools/flakeytests/reporter_test.go: `.createRequest(r)`
$DIR/tools/flakeytests/reporter_test.go: `.Now()`
$DIR/tools/flakeytests/reporter_test.go: `.Sprintf("%d", now.UnixNano())`
$DIR/tools/flakeytests/reporter_test.go: `.UnixNano()`
$DIR/tools/flakeytests/reporter_test.go: `.createRequest(r)`
$DIR/tools/flakeytests/reporter_test.go: `.Now()`
$DIR/tools/flakeytests/reporter_test.go: `.Sprintf("%d", now.UnixNano())`
$DIR/tools/flakeytests/reporter_test.go: `.UnixNano()`
$DIR/tools/flakeytests/reporter_test.go: `.createRequest(r)`
$DIR/tools/flakeytests/reporter_test.go: `.Now()`
$DIR/tools/flakeytests/reporter_test.go: `.Sprintf("%d", now.UnixNano())`
$DIR/tools/flakeytests/reporter_test.go: `.UnixNano()`
$DIR/tools/flakeytests/reporter_test.go: `.createRequest(r)`
$DIR/tools/flakeytests/reporter_test.go: `.Now()`
$DIR/tools/flakeytests/reporter_test.go: `.Sprintf("%d", now.UnixNano())`
$DIR/tools/flakeytests/reporter_test.go: `.UnixNano()`
$DIR/tools/flakeytests/reporter_test.go: `.createRequest(r)`
$DIR/tools/flakeytests/runner_test.go: `i++`
$DIR/tools/flakeytests/runner_test.go: `i++`
$DIR/tools/flakeytests/runner_test.go: `i++`
$DIR/tools/flakeytests/runner_test.go: `i++`
$DIR/tools/flakeytests/runner_test.go: `index++`
$DIR/tools/flakeytests/runner_test.go: `t.Run("1: should fail", func(t *testing.T) {
assert.False(t, true)
})`
$DIR/tools/flakeytests/runner_test.go: `cmd.Env = append(cmd.Env, runInIntegrationTestModeEnv)`
$DIR/tools/flakeytests/runner_test.go: `cmd.Stdout = io.Discard`
$DIR/tools/flakeytests/runner_test.go: `cmd.Stderr = io.Discard`
$DIR/tools/flakeytests/runner_test.go: `cmd.Env = append(cmd.Env, runInIntegrationTestModeEnv)`
$DIR/tools/flakeytests/runner_test.go: `cmd.Stdout = io.Discard`
$DIR/tools/flakeytests/runner_test.go: `cmd.Stderr = io.Discard`
$DIR/tools/flakeytests/runner_test.go: `cmd.Env = append(cmd.Env, runInIntegrationTestModeEnv)`
$DIR/tools/flakeytests/runner_test.go: `cmd.Stdout = io.Discard`
$DIR/tools/flakeytests/runner_test.go: `cmd.Stderr = io.Discard`
$DIR/tools/flakeytests/runner_test.go: `.NewReader(output)`
$DIR/tools/flakeytests/runner_test.go: `.NewReader(output)`
$DIR/tools/flakeytests/runner_test.go: `.NewReader(output)`
$DIR/tools/flakeytests/runner_test.go: `.NewReader(output)`
$DIR/tools/flakeytests/runner_test.go: `.NewReader(initialOutput)`
$DIR/tools/flakeytests/runner_test.go: `.Write([]byte(outputs[i]))`
$DIR/tools/flakeytests/runner_test.go: `.Run(tests.Context(t))`
$DIR/tools/flakeytests/runner_test.go: `.Context(t)`
$DIR/tools/flakeytests/runner_test.go: `.NewReader(initialOutput)`
$DIR/tools/flakeytests/runner_test.go: `.Write([]byte(outputs[i]))`
$DIR/tools/flakeytests/runner_test.go: `.Run(tests.Context(t))`
$DIR/tools/flakeytests/runner_test.go: `.Context(t)`
$DIR/tools/flakeytests/runner_test.go: `.NewReader(output)`
$DIR/tools/flakeytests/runner_test.go: `.Write([]byte(rerunOutput))`
$DIR/tools/flakeytests/runner_test.go: `.Run(tests.Context(t))`
$DIR/tools/flakeytests/runner_test.go: `.Context(t)`
$DIR/tools/flakeytests/runner_test.go: `.NewReader(output)`
$DIR/tools/flakeytests/runner_test.go: `.Write([]byte(rerunOutputs[i]))`
$DIR/tools/flakeytests/runner_test.go: `.Run(tests.Context(t))`
$DIR/tools/flakeytests/runner_test.go: `.Context(t)`
$DIR/tools/flakeytests/runner_test.go: `.NewReader(output)`
$DIR/tools/flakeytests/runner_test.go: `.Write([]byte(rerunOutput))`
$DIR/tools/flakeytests/runner_test.go: `.Run(tests.Context(t))`
$DIR/tools/flakeytests/runner_test.go: `.Context(t)`
$DIR/tools/flakeytests/runner_test.go: `.NewReader(output)`
$DIR/tools/flakeytests/runner_test.go: `.Write([]byte(rerunOutputs[i]))`
$DIR/tools/flakeytests/runner_test.go: `.Run(tests.Context(t))`
$DIR/tools/flakeytests/runner_test.go: `.Context(t)`
$DIR/tools/flakeytests/runner_test.go: `.NewReader(`
{"Time":"2023-09-07T15:39:46.378315+01:00","Action":"fail","Package":"github.com/smartcontractkit/chainlink/v2/core/chains/evm/assets","Test":"TestLink","Elapsed":0}
`)`
$DIR/tools/flakeytests/runner_test.go: `.NewReader(`
{"Time":"2023-09-07T15:39:46.378315+01:00","Action":"fail","Package":"github.com/smartcontractkit/chainlink/v2/core/services/vrf/v2","Test":"TestMaybeReservedLinkV2","Elapsed":0}
`)`
$DIR/tools/flakeytests/runner_test.go: `.Write([]byte(rerunOutputs[index]))`
$DIR/tools/flakeytests/runner_test.go: `.Run(tests.Context(t))`
$DIR/tools/flakeytests/runner_test.go: `.Context(t)`
$DIR/tools/flakeytests/runner_test.go: `.Run("1: should fail", func(t *testing.T) {
assert.False(t, true)
})`
$DIR/tools/flakeytests/runner_test.go: `.Short()`
$DIR/tools/flakeytests/runner_test.go: `.NewReader(output)`
$DIR/tools/flakeytests/runner_test.go: `.Run(tests.Context(t))`
$DIR/tools/flakeytests/runner_test.go: `.Context(t)`
$DIR/tools/flakeytests/runner_test.go: `.Short()`
$DIR/tools/flakeytests/runner_test.go: `.NewReader(output)`
$DIR/tools/flakeytests/runner_test.go: `.Run(tests.Context(t))`
$DIR/tools/flakeytests/runner_test.go: `.Context(t)`
$DIR/tools/flakeytests/runner_test.go: `.Short()`
$DIR/tools/flakeytests/runner_test.go: `.NewReader(output)`
$DIR/tools/flakeytests/runner_test.go: `.Run(tests.Context(t))`
$DIR/tools/flakeytests/runner_test.go: `.Context(t)`
$DIR/tools/flakeytests/utils_test.go: `event = fmt.Sprintf(prEventTemplate, anotherSha, url)`
$DIR/tools/flakeytests/utils_test.go: `sha = "302eb05d592132309b264e316f443f1ceb81b6c3"`
$DIR/tools/flakeytests/utils_test.go: `ctx = getGithubMetadata(repo, eventName, sha, strings.NewReader(event), runID, runAttempt)`
$DIR/tools/flakeytests/utils_test.go: `.Sprintf("github.com/%s/actions/runs/%s/attempts/%s", repo, runID, runAttempt)`
$DIR/tools/flakeytests/utils_test.go: `.NewReader(event)`
$DIR/tools/flakeytests/utils_test.go: `.Sprintf(prEventTemplate, anotherSha, url)`
$DIR/tools/flakeytests/utils_test.go: `.NewReader(event)`