1
1
import Fixture from "../test/helpers/fixture"
2
2
import expectThrow from "../test/helpers/expectThrow"
3
+ import ethUtil from "ethereumjs-util"
4
+ import ethAbi from "ethereumjs-abi"
3
5
4
6
const LivepeerVerifier = artifacts . require ( "LivepeerVerifier" )
5
7
@@ -35,27 +37,48 @@ contract("LivepeerVerifier", accounts => {
35
37
} )
36
38
} )
37
39
40
+ describe ( "addSolver" , ( ) => {
41
+ it ( "should fail for null address" , async ( ) => {
42
+ await expectThrow ( verifier . addSolver ( "0x0" ) )
43
+ } )
44
+
45
+ it ( "should fail if solver is already whitelisted" , async ( ) => {
46
+ await expectThrow ( verifier . addSolver ( accounts [ 0 ] ) )
47
+ } )
48
+
49
+ it ( "should whitelist a new solver" , async ( ) => {
50
+ await verifier . addSolver ( accounts [ 3 ] )
51
+
52
+ const isSolver = await verifier . isSolver . call ( accounts [ 3 ] )
53
+ assert . isOk ( isSolver , "did not whitelist new solver" )
54
+ const solverAddress = await verifier . solvers . call ( 2 )
55
+ assert . equal ( solverAddress , accounts [ 3 ] , "wrong solver address" )
56
+ } )
57
+ } )
58
+
38
59
describe ( "verify" , ( ) => {
39
60
const jobId = 0
40
61
const claimId = 0
41
62
const segmentNumber = 0
42
63
const transcodingOptions = "0x123"
43
64
const dataStorageHash = "0x123"
44
- const transcodedDataHash = web3 . sha3 ( "hello" )
65
+ const dataHashes = [ web3 . sha3 ( "apple" ) , web3 . sha3 ( "pear" ) ]
45
66
46
67
it ( "should fail if sender is not the JobsManager" , async ( ) => {
47
- await expectThrow ( verifier . verify ( jobId , claimId , segmentNumber , transcodingOptions , dataStorageHash , transcodedDataHash ) )
68
+ await expectThrow ( verifier . verify ( jobId , claimId , segmentNumber , transcodingOptions , dataStorageHash , dataHashes ) )
48
69
} )
49
70
50
71
it ( "should store a request" , async ( ) => {
51
- await fixture . jobsManager . setVerifyParams ( jobId , claimId , segmentNumber , transcodingOptions , dataStorageHash , transcodedDataHash )
72
+ await fixture . jobsManager . setVerifyParams ( jobId , claimId , segmentNumber , transcodingOptions , dataStorageHash , dataHashes )
52
73
await fixture . jobsManager . callVerify ( )
53
74
75
+ const commitHash = ethUtil . bufferToHex ( ethAbi . soliditySHA3 ( [ "bytes" , "bytes" ] , [ ethUtil . toBuffer ( dataHashes [ 0 ] ) , ethUtil . toBuffer ( dataHashes [ 1 ] ) ] ) )
76
+
54
77
const request = await verifier . requests . call ( 0 )
55
78
assert . equal ( request [ 0 ] , jobId , "job id incorrect" )
56
79
assert . equal ( request [ 1 ] , claimId , "claim id incorrect" )
57
80
assert . equal ( request [ 2 ] , segmentNumber , "segment number incorrect" )
58
- assert . equal ( request [ 3 ] , transcodedDataHash , "transcoded data hash incorrect" )
81
+ assert . equal ( request [ 3 ] , commitHash , "commit hash incorrect" )
59
82
} )
60
83
61
84
it ( "should fire a VerifyRequest event" , async ( ) => {
@@ -70,10 +93,11 @@ contract("LivepeerVerifier", accounts => {
70
93
assert . equal ( result . args . segmentNumber , segmentNumber , "event segmentNumber incorrect" )
71
94
assert . equal ( result . args . transcodingOptions , transcodingOptions , "event transcodingOptions incorrect" )
72
95
assert . equal ( result . args . dataStorageHash , dataStorageHash , "event dataStorageHash incorrect" )
73
- assert . equal ( result . args . transcodedDataHash , transcodedDataHash , "event transcodedDataHash incorrect" )
96
+ assert . equal ( result . args . dataHash , dataHashes [ 0 ] , "event dataHash incorrect" )
97
+ assert . equal ( result . args . transcodedDataHash , dataHashes [ 1 ] , "event transcodedDataHash incorrect" )
74
98
} )
75
99
76
- await fixture . jobsManager . setVerifyParams ( jobId , claimId , segmentNumber , transcodingOptions , dataStorageHash , transcodedDataHash )
100
+ await fixture . jobsManager . setVerifyParams ( jobId , claimId , segmentNumber , transcodingOptions , dataStorageHash , dataHashes )
77
101
await fixture . jobsManager . callVerify ( )
78
102
} )
79
103
} )
@@ -84,14 +108,14 @@ contract("LivepeerVerifier", accounts => {
84
108
const segmentNumber = 0
85
109
const transcodingOptions = "0x123"
86
110
const dataStorageHash = "0x123"
87
- const transcodedDataHash = web3 . sha3 ( "hello" )
111
+ const dataHashes = [ web3 . sha3 ( "apple" ) , web3 . sha3 ( "pear" ) ]
88
112
89
113
it ( "should fail if sender is not a solver" , async ( ) => {
90
114
await expectThrow ( verifier . __callback ( 0 , "0x123" , { from : accounts [ 3 ] } ) )
91
115
} )
92
116
93
117
it ( "should fire a callback event with result set to true if verification succeeded" , async ( ) => {
94
- await fixture . jobsManager . setVerifyParams ( jobId , claimId , segmentNumber , transcodingOptions , dataStorageHash , transcodedDataHash )
118
+ await fixture . jobsManager . setVerifyParams ( jobId , claimId , segmentNumber , transcodingOptions , dataStorageHash , dataHashes )
95
119
await fixture . jobsManager . callVerify ( )
96
120
97
121
let e = verifier . Callback ( { } )
@@ -106,11 +130,12 @@ contract("LivepeerVerifier", accounts => {
106
130
assert . equal ( result . args . result , true , "callback result incorrect" )
107
131
} )
108
132
109
- await verifier . __callback ( 0 , web3 . sha3 ( "hello" ) , { from : accounts [ 0 ] } )
133
+ const commitHash = ethUtil . bufferToHex ( ethAbi . soliditySHA3 ( [ "bytes" , "bytes" ] , [ ethUtil . toBuffer ( dataHashes [ 0 ] ) , ethUtil . toBuffer ( dataHashes [ 1 ] ) ] ) )
134
+ await verifier . __callback ( 0 , commitHash , { from : accounts [ 0 ] } )
110
135
} )
111
136
112
137
it ( "should fire a callback event with result set to false if verification failed" , async ( ) => {
113
- await fixture . jobsManager . setVerifyParams ( jobId , claimId , segmentNumber , transcodingOptions , dataStorageHash , transcodedDataHash )
138
+ await fixture . jobsManager . setVerifyParams ( jobId , claimId , segmentNumber , transcodingOptions , dataStorageHash , dataHashes )
114
139
await fixture . jobsManager . callVerify ( )
115
140
116
141
let e = verifier . Callback ( { } )
@@ -125,7 +150,8 @@ contract("LivepeerVerifier", accounts => {
125
150
assert . equal ( result . args . result , false , "callback result incorrect" )
126
151
} )
127
152
128
- await verifier . __callback ( 0 , web3 . sha3 ( "not hello" ) , { from : accounts [ 0 ] } )
153
+ const wrongCommitHash = ethUtil . bufferToHex ( ethAbi . soliditySHA3 ( [ "bytes" , "bytes" ] , [ ethUtil . toBuffer ( dataHashes [ 0 ] ) , ethUtil . toBuffer ( web3 . sha3 ( "not pear" ) ) ] ) )
154
+ await verifier . __callback ( 0 , wrongCommitHash , { from : accounts [ 0 ] } )
129
155
} )
130
156
} )
131
157
} )
0 commit comments