Hex Artifact Content
Not logged in

Artifact 8542e70cf33d170f1ce6cfe05a0380e8eb9ad8e7:


0000: 27 75 73 65 20 73 74 72 69 63 74 27 0a 0a 63 6f  'use strict'..co
0010: 6e 73 74 20 49 6c 70 50 61 63 6b 65 74 20 3d 20  nst IlpPacket = 
0020: 72 65 71 75 69 72 65 28 27 69 6c 70 2d 70 61 63  require('ilp-pac
0030: 6b 65 74 27 29 0a 63 6f 6e 73 74 20 63 68 61 69  ket').const chai
0040: 20 3d 20 72 65 71 75 69 72 65 28 27 63 68 61 69   = require('chai
0050: 27 29 0a 63 6f 6e 73 74 20 61 73 73 65 72 74 20  ').const assert 
0060: 3d 20 63 68 61 69 2e 61 73 73 65 72 74 0a 63 6f  = chai.assert.co
0070: 6e 73 74 20 49 4c 51 50 20 3d 20 72 65 71 75 69  nst ILQP = requi
0080: 72 65 28 27 2e 2e 27 29 2e 49 4c 51 50 0a 63 6f  re('..').ILQP.co
0090: 6e 73 74 20 50 61 63 6b 65 74 20 3d 20 72 65 71  nst Packet = req
00a0: 75 69 72 65 28 27 2e 2e 2f 73 72 63 2f 75 74 69  uire('../src/uti
00b0: 6c 73 2f 70 61 63 6b 65 74 27 29 0a 63 6f 6e 73  ls/packet').cons
00c0: 74 20 4d 6f 63 6b 50 6c 75 67 69 6e 20 3d 20 72  t MockPlugin = r
00d0: 65 71 75 69 72 65 28 27 2e 2f 6d 6f 63 6b 73 2f  equire('./mocks/
00e0: 6d 6f 63 6b 50 6c 75 67 69 6e 27 29 0a 63 6f 6e  mockPlugin').con
00f0: 73 74 20 65 78 70 65 63 74 20 3d 20 63 68 61 69  st expect = chai
0100: 2e 65 78 70 65 63 74 0a 63 6f 6e 73 74 20 63 68  .expect.const ch
0110: 61 69 41 73 50 72 6f 6d 69 73 65 64 20 3d 20 72  aiAsPromised = r
0120: 65 71 75 69 72 65 28 27 63 68 61 69 2d 61 73 2d  equire('chai-as-
0130: 70 72 6f 6d 69 73 65 64 27 29 0a 63 68 61 69 2e  promised').chai.
0140: 75 73 65 28 63 68 61 69 41 73 50 72 6f 6d 69 73  use(chaiAsPromis
0150: 65 64 29 0a 0a 64 65 73 63 72 69 62 65 28 27 49  ed)..describe('I
0160: 4c 51 50 27 2c 20 66 75 6e 63 74 69 6f 6e 20 28  LQP', function (
0170: 29 20 7b 0a 20 20 62 65 66 6f 72 65 45 61 63 68  ) {.  beforeEach
0180: 28 66 75 6e 63 74 69 6f 6e 20 28 29 20 7b 0a 20  (function () {. 
0190: 20 20 20 74 68 69 73 2e 70 6c 75 67 69 6e 20 3d     this.plugin =
01a0: 20 6e 65 77 20 4d 6f 63 6b 50 6c 75 67 69 6e 28   new MockPlugin(
01b0: 29 0a 0a 20 20 20 20 2f 2f 20 64 65 66 61 75 6c  )..    // defaul
01c0: 74 20 64 61 74 61 20 68 61 6e 64 6c 65 72 20 2d  t data handler -
01d0: 20 73 6f 6d 65 20 74 65 73 74 73 20 77 69 6c 6c   some tests will
01e0: 20 6f 76 65 72 72 69 64 65 20 74 68 69 73 0a 20   override this. 
01f0: 20 20 20 74 68 69 73 2e 70 6c 75 67 69 6e 2e 64     this.plugin.d
0200: 61 74 61 48 61 6e 64 6c 65 72 20 3d 20 6d 73 67  ataHandler = msg
0210: 20 3d 3e 20 7b 0a 20 20 20 20 20 20 61 73 73 65   => {.      asse
0220: 72 74 2e 69 73 4f 62 6a 65 63 74 28 49 6c 70 50  rt.isObject(IlpP
0230: 61 63 6b 65 74 2e 64 65 73 65 72 69 61 6c 69 7a  acket.deserializ
0240: 65 49 6c 71 70 42 79 53 6f 75 72 63 65 52 65 71  eIlqpBySourceReq
0250: 75 65 73 74 28 6d 73 67 29 29 0a 20 20 20 20 20  uest(msg)).     
0260: 20 72 65 74 75 72 6e 20 50 72 6f 6d 69 73 65 2e   return Promise.
0270: 72 65 73 6f 6c 76 65 28 49 6c 70 50 61 63 6b 65  resolve(IlpPacke
0280: 74 2e 73 65 72 69 61 6c 69 7a 65 49 6c 71 70 42  t.serializeIlqpB
0290: 79 53 6f 75 72 63 65 52 65 73 70 6f 6e 73 65 28  ySourceResponse(
02a0: 7b 0a 20 20 20 20 20 20 20 20 64 65 73 74 69 6e  {.        destin
02b0: 61 74 69 6f 6e 41 6d 6f 75 6e 74 3a 20 27 31 27  ationAmount: '1'
02c0: 2c 0a 20 20 20 20 20 20 20 20 73 6f 75 72 63 65  ,.        source
02d0: 48 6f 6c 64 44 75 72 61 74 69 6f 6e 3a 20 35 30  HoldDuration: 50
02e0: 30 30 0a 20 20 20 20 20 20 7d 29 29 0a 20 20 20  00.      })).   
02f0: 20 7d 0a 20 20 7d 29 0a 0a 20 20 64 65 73 63 72   }.  })..  descr
0300: 69 62 65 28 27 71 75 6f 74 65 27 2c 20 66 75 6e  ibe('quote', fun
0310: 63 74 69 6f 6e 20 28 29 20 7b 0a 20 20 20 20 62  ction () {.    b
0320: 65 66 6f 72 65 45 61 63 68 28 66 75 6e 63 74 69  eforeEach(functi
0330: 6f 6e 20 28 29 20 7b 0a 20 20 20 20 20 20 74 68  on () {.      th
0340: 69 73 2e 70 61 72 61 6d 73 20 3d 20 7b 0a 20 20  is.params = {.  
0350: 20 20 20 20 20 20 73 6f 75 72 63 65 41 64 64 72        sourceAddr
0360: 65 73 73 3a 20 27 74 65 73 74 2e 65 78 61 6d 70  ess: 'test.examp
0370: 6c 65 2e 61 6c 69 63 65 27 2c 0a 20 20 20 20 20  le.alice',.     
0380: 20 20 20 64 65 73 74 69 6e 61 74 69 6f 6e 41 64     destinationAd
0390: 64 72 65 73 73 3a 20 27 74 65 73 74 2e 6c 6f 63  dress: 'test.loc
03a0: 61 6c 2e 62 6f 62 27 2c 0a 20 20 20 20 20 20 20  al.bob',.       
03b0: 20 73 6f 75 72 63 65 41 6d 6f 75 6e 74 3a 20 27   sourceAmount: '
03c0: 31 27 2c 0a 20 20 20 20 20 20 20 20 64 65 73 74  1',.        dest
03d0: 69 6e 61 74 69 6f 6e 45 78 70 69 72 79 44 75 72  inationExpiryDur
03e0: 61 74 69 6f 6e 3a 20 27 31 30 27 2c 0a 20 20 20  ation: '10',.   
03f0: 20 20 20 20 20 74 69 6d 65 6f 75 74 3a 20 31 30       timeout: 10
0400: 30 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20  0.      }.      
0410: 74 68 69 73 2e 72 65 73 75 6c 74 20 3d 20 7b 0a  this.result = {.
0420: 20 20 20 20 20 20 20 20 73 6f 75 72 63 65 41 6d          sourceAm
0430: 6f 75 6e 74 3a 20 27 31 27 2c 0a 20 20 20 20 20  ount: '1',.     
0440: 20 20 20 64 65 73 74 69 6e 61 74 69 6f 6e 41 6d     destinationAm
0450: 6f 75 6e 74 3a 20 27 31 27 2c 0a 20 20 20 20 20  ount: '1',.     
0460: 20 20 20 73 6f 75 72 63 65 45 78 70 69 72 79 44     sourceExpiryD
0470: 75 72 61 74 69 6f 6e 3a 20 27 35 27 0a 20 20 20  uration: '5'.   
0480: 20 20 20 7d 0a 20 20 20 20 7d 29 0a 0a 20 20 20     }.    })..   
0490: 20 69 74 28 27 73 68 6f 75 6c 64 20 71 75 6f 74   it('should quot
04a0: 65 20 62 79 20 73 6f 75 72 63 65 20 61 6d 6f 75  e by source amou
04b0: 6e 74 27 2c 20 61 73 79 6e 63 20 66 75 6e 63 74  nt', async funct
04c0: 69 6f 6e 20 28 29 20 7b 0a 20 20 20 20 20 20 63  ion () {.      c
04d0: 6f 6e 73 74 20 72 65 73 70 6f 6e 73 65 20 3d 20  onst response = 
04e0: 61 77 61 69 74 20 49 4c 51 50 2e 71 75 6f 74 65  await ILQP.quote
04f0: 28 74 68 69 73 2e 70 6c 75 67 69 6e 2c 20 74 68  (this.plugin, th
0500: 69 73 2e 70 61 72 61 6d 73 29 0a 20 20 20 20 20  is.params).     
0510: 20 74 68 69 73 2e 72 65 73 75 6c 74 2e 65 78 70   this.result.exp
0520: 69 72 65 73 41 74 20 3d 20 28 6e 65 77 20 44 61  iresAt = (new Da
0530: 74 65 28 72 65 73 70 6f 6e 73 65 2e 65 78 70 69  te(response.expi
0540: 72 65 73 41 74 29 29 2e 74 6f 49 53 4f 53 74 72  resAt)).toISOStr
0550: 69 6e 67 28 29 0a 0a 20 20 20 20 20 20 61 73 73  ing()..      ass
0560: 65 72 74 2e 64 65 65 70 45 71 75 61 6c 28 0a 20  ert.deepEqual(. 
0570: 20 20 20 20 20 20 20 72 65 73 70 6f 6e 73 65 2c         response,
0580: 0a 20 20 20 20 20 20 20 20 74 68 69 73 2e 72 65  .        this.re
0590: 73 75 6c 74 29 0a 20 20 20 20 7d 29 0a 0a 20 20  sult).    })..  
05a0: 20 20 69 74 28 27 73 68 6f 75 6c 64 20 71 75 6f    it('should quo
05b0: 74 65 20 62 79 20 64 65 73 74 69 6e 61 74 69 6f  te by destinatio
05c0: 6e 20 61 6d 6f 75 6e 74 27 2c 20 61 73 79 6e 63  n amount', async
05d0: 20 66 75 6e 63 74 69 6f 6e 20 28 29 20 7b 0a 20   function () {. 
05e0: 20 20 20 20 20 74 68 69 73 2e 70 61 72 61 6d 73       this.params
05f0: 2e 64 65 73 74 69 6e 61 74 69 6f 6e 41 6d 6f 75  .destinationAmou
0600: 6e 74 20 3d 20 74 68 69 73 2e 70 61 72 61 6d 73  nt = this.params
0610: 2e 73 6f 75 72 63 65 41 6d 6f 75 6e 74 0a 20 20  .sourceAmount.  
0620: 20 20 20 20 64 65 6c 65 74 65 20 74 68 69 73 2e      delete this.
0630: 70 61 72 61 6d 73 2e 73 6f 75 72 63 65 41 6d 6f  params.sourceAmo
0640: 75 6e 74 0a 0a 20 20 20 20 20 20 74 68 69 73 2e  unt..      this.
0650: 70 6c 75 67 69 6e 2e 64 61 74 61 48 61 6e 64 6c  plugin.dataHandl
0660: 65 72 20 3d 20 61 73 79 6e 63 20 6d 73 67 20 3d  er = async msg =
0670: 3e 20 7b 0a 20 20 20 20 20 20 20 20 61 73 73 65  > {.        asse
0680: 72 74 2e 69 73 4f 62 6a 65 63 74 28 49 6c 70 50  rt.isObject(IlpP
0690: 61 63 6b 65 74 2e 64 65 73 65 72 69 61 6c 69 7a  acket.deserializ
06a0: 65 49 6c 71 70 42 79 44 65 73 74 69 6e 61 74 69  eIlqpByDestinati
06b0: 6f 6e 52 65 71 75 65 73 74 28 6d 73 67 29 29 0a  onRequest(msg)).
06c0: 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 50          return P
06d0: 72 6f 6d 69 73 65 2e 72 65 73 6f 6c 76 65 28 49  romise.resolve(I
06e0: 6c 70 50 61 63 6b 65 74 2e 73 65 72 69 61 6c 69  lpPacket.seriali
06f0: 7a 65 49 6c 71 70 42 79 44 65 73 74 69 6e 61 74  zeIlqpByDestinat
0700: 69 6f 6e 52 65 73 70 6f 6e 73 65 28 7b 0a 20 20  ionResponse({.  
0710: 20 20 20 20 20 20 20 20 73 6f 75 72 63 65 41 6d          sourceAm
0720: 6f 75 6e 74 3a 20 27 31 27 2c 0a 20 20 20 20 20  ount: '1',.     
0730: 20 20 20 20 20 73 6f 75 72 63 65 48 6f 6c 64 44       sourceHoldD
0740: 75 72 61 74 69 6f 6e 3a 20 35 30 30 30 0a 20 20  uration: 5000.  
0750: 20 20 20 20 20 20 7d 29 29 0a 20 20 20 20 20 20        })).      
0760: 7d 0a 0a 20 20 20 20 20 20 63 6f 6e 73 74 20 72  }..      const r
0770: 65 73 70 6f 6e 73 65 20 3d 20 61 77 61 69 74 20  esponse = await 
0780: 49 4c 51 50 2e 71 75 6f 74 65 28 74 68 69 73 2e  ILQP.quote(this.
0790: 70 6c 75 67 69 6e 2c 20 74 68 69 73 2e 70 61 72  plugin, this.par
07a0: 61 6d 73 29 0a 20 20 20 20 20 20 74 68 69 73 2e  ams).      this.
07b0: 72 65 73 75 6c 74 2e 65 78 70 69 72 65 73 41 74  result.expiresAt
07c0: 20 3d 20 28 6e 65 77 20 44 61 74 65 28 72 65 73   = (new Date(res
07d0: 70 6f 6e 73 65 2e 65 78 70 69 72 65 73 41 74 29  ponse.expiresAt)
07e0: 29 2e 74 6f 49 53 4f 53 74 72 69 6e 67 28 29 0a  ).toISOString().
07f0: 0a 20 20 20 20 20 20 61 73 73 65 72 74 2e 64 65  .      assert.de
0800: 65 70 45 71 75 61 6c 28 0a 20 20 20 20 20 20 20  epEqual(.       
0810: 20 72 65 73 70 6f 6e 73 65 2c 0a 20 20 20 20 20   response,.     
0820: 20 20 20 74 68 69 73 2e 72 65 73 75 6c 74 29 0a     this.result).
0830: 20 20 20 20 7d 29 0a 0a 20 20 20 20 69 74 28 27      })..    it('
0840: 73 68 6f 75 6c 64 20 72 65 6a 65 63 74 20 69 66  should reject if
0850: 20 73 6f 75 72 63 65 20 61 6e 64 20 64 65 73 74   source and dest
0860: 20 61 6d 6f 75 6e 74 73 20 61 72 65 20 64 65 66   amounts are def
0870: 69 6e 65 64 27 2c 20 61 73 79 6e 63 20 66 75 6e  ined', async fun
0880: 63 74 69 6f 6e 20 28 29 20 7b 0a 20 20 20 20 20  ction () {.     
0890: 20 74 68 69 73 2e 70 61 72 61 6d 73 2e 64 65 73   this.params.des
08a0: 74 69 6e 61 74 69 6f 6e 41 6d 6f 75 6e 74 20 3d  tinationAmount =
08b0: 20 74 68 69 73 2e 70 61 72 61 6d 73 2e 73 6f 75   this.params.sou
08c0: 72 63 65 41 6d 6f 75 6e 74 20 3d 20 27 31 27 0a  rceAmount = '1'.
08d0: 0a 20 20 20 20 20 20 61 77 61 69 74 20 65 78 70  .      await exp
08e0: 65 63 74 28 49 4c 51 50 2e 71 75 6f 74 65 28 74  ect(ILQP.quote(t
08f0: 68 69 73 2e 70 6c 75 67 69 6e 2c 20 74 68 69 73  his.plugin, this
0900: 2e 70 61 72 61 6d 73 29 29 0a 20 20 20 20 20 20  .params)).      
0910: 20 20 2e 74 6f 2e 62 65 2e 72 65 6a 65 63 74 65    .to.be.rejecte
0920: 64 57 69 74 68 28 2f 70 72 6f 76 69 64 65 20 73  dWith(/provide s
0930: 6f 75 72 63 65 20 6f 72 20 64 65 73 74 69 6e 61  ource or destina
0940: 74 69 6f 6e 20 61 6d 6f 75 6e 74 20 62 75 74 20  tion amount but 
0950: 6e 6f 74 20 62 6f 74 68 2f 29 0a 20 20 20 20 7d  not both/).    }
0960: 29 0a 0a 20 20 20 20 69 74 28 27 73 68 6f 75 6c  )..    it('shoul
0970: 64 20 72 65 6a 65 63 74 20 69 66 20 73 65 6e 64  d reject if send
0980: 52 65 71 75 65 73 74 20 72 65 74 75 72 6e 73 20  Request returns 
0990: 61 6e 20 49 6c 70 45 72 72 6f 72 27 2c 20 61 73  an IlpError', as
09a0: 79 6e 63 20 66 75 6e 63 74 69 6f 6e 20 28 29 20  ync function () 
09b0: 7b 0a 20 20 20 20 20 20 74 68 69 73 2e 70 6c 75  {.      this.plu
09c0: 67 69 6e 2e 64 61 74 61 48 61 6e 64 6c 65 72 20  gin.dataHandler 
09d0: 3d 20 28 6d 73 67 29 20 3d 3e 20 7b 0a 20 20 20  = (msg) => {.   
09e0: 20 20 20 20 20 72 65 74 75 72 6e 20 50 72 6f 6d       return Prom
09f0: 69 73 65 2e 72 65 73 6f 6c 76 65 28 49 6c 70 50  ise.resolve(IlpP
0a00: 61 63 6b 65 74 2e 73 65 72 69 61 6c 69 7a 65 49  acket.serializeI
0a10: 6c 70 45 72 72 6f 72 28 7b 0a 20 20 20 20 20 20  lpError({.      
0a20: 20 20 20 20 63 6f 64 65 3a 20 27 46 30 31 27 2c      code: 'F01',
0a30: 0a 20 20 20 20 20 20 20 20 20 20 6e 61 6d 65 3a  .          name:
0a40: 20 27 49 6e 76 61 6c 69 64 20 50 61 63 6b 65 74   'Invalid Packet
0a50: 27 2c 0a 20 20 20 20 20 20 20 20 20 20 74 72 69  ',.          tri
0a60: 67 67 65 72 65 64 42 79 3a 20 27 65 78 61 6d 70  ggeredBy: 'examp
0a70: 6c 65 2e 75 73 2e 6c 65 64 67 65 72 33 2e 62 6f  le.us.ledger3.bo
0a80: 62 27 2c 0a 20 20 20 20 20 20 20 20 20 20 66 6f  b',.          fo
0a90: 72 77 61 72 64 65 64 42 79 3a 20 5b 0a 20 20 20  rwardedBy: [.   
0aa0: 20 20 20 20 20 20 20 20 20 27 65 78 61 6d 70 6c           'exampl
0ab0: 65 2e 75 73 2e 6c 65 64 67 65 72 32 2e 63 6f 6e  e.us.ledger2.con
0ac0: 6e 69 65 27 2c 0a 20 20 20 20 20 20 20 20 20 20  nie',.          
0ad0: 20 20 27 65 78 61 6d 70 6c 65 2e 75 73 2e 6c 65    'example.us.le
0ae0: 64 67 65 72 31 2e 63 6f 6e 72 61 64 27 0a 20 20  dger1.conrad'.  
0af0: 20 20 20 20 20 20 20 20 5d 2c 0a 20 20 20 20 20          ],.     
0b00: 20 20 20 20 20 74 72 69 67 67 65 72 65 64 41 74       triggeredAt
0b10: 3a 20 6e 65 77 20 44 61 74 65 28 29 2c 0a 20 20  : new Date(),.  
0b20: 20 20 20 20 20 20 20 20 64 61 74 61 3a 20 4a 53          data: JS
0b30: 4f 4e 2e 73 74 72 69 6e 67 69 66 79 28 7b 66 6f  ON.stringify({fo
0b40: 6f 3a 20 27 62 61 72 27 7d 29 0a 20 20 20 20 20  o: 'bar'}).     
0b50: 20 20 20 7d 29 29 0a 20 20 20 20 20 20 7d 0a 0a     })).      }..
0b60: 20 20 20 20 20 20 61 77 61 69 74 20 65 78 70 65        await expe
0b70: 63 74 28 49 4c 51 50 2e 71 75 6f 74 65 28 74 68  ct(ILQP.quote(th
0b80: 69 73 2e 70 6c 75 67 69 6e 2c 20 74 68 69 73 2e  is.plugin, this.
0b90: 70 61 72 61 6d 73 29 29 0a 20 20 20 20 20 20 20  params)).       
0ba0: 20 2e 74 6f 2e 62 65 2e 72 65 6a 65 63 74 65 64   .to.be.rejected
0bb0: 57 69 74 68 28 2f 72 65 6d 6f 74 65 20 71 75 6f  With(/remote quo
0bc0: 74 65 20 65 72 72 6f 72 3a 20 49 6e 76 61 6c 69  te error: Invali
0bd0: 64 20 50 61 63 6b 65 74 2f 29 0a 20 20 20 20 7d  d Packet/).    }
0be0: 29 0a 0a 20 20 20 20 69 74 28 27 73 68 6f 75 6c  )..    it('shoul
0bf0: 64 20 72 65 6a 65 63 74 20 69 66 20 73 65 6e 64  d reject if send
0c00: 52 65 71 75 65 73 74 20 72 65 74 75 72 6e 73 20  Request returns 
0c10: 61 6e 20 49 6c 70 52 65 6a 65 63 74 27 2c 20 61  an IlpReject', a
0c20: 73 79 6e 63 20 66 75 6e 63 74 69 6f 6e 20 28 29  sync function ()
0c30: 20 7b 0a 20 20 20 20 20 20 74 68 69 73 2e 70 6c   {.      this.pl
0c40: 75 67 69 6e 2e 64 61 74 61 48 61 6e 64 6c 65 72  ugin.dataHandler
0c50: 20 3d 20 28 6d 73 67 29 20 3d 3e 20 7b 0a 20 20   = (msg) => {.  
0c60: 20 20 20 20 20 20 72 65 74 75 72 6e 20 50 72 6f        return Pro
0c70: 6d 69 73 65 2e 72 65 73 6f 6c 76 65 28 49 6c 70  mise.resolve(Ilp
0c80: 50 61 63 6b 65 74 2e 73 65 72 69 61 6c 69 7a 65  Packet.serialize
0c90: 49 6c 70 52 65 6a 65 63 74 28 7b 0a 20 20 20 20  IlpReject({.    
0ca0: 20 20 20 20 20 20 63 6f 64 65 3a 20 27 46 30 31        code: 'F01
0cb0: 27 2c 0a 20 20 20 20 20 20 20 20 20 20 6d 65 73  ',.          mes
0cc0: 73 61 67 65 3a 20 27 69 6e 76 61 6c 69 64 20 70  sage: 'invalid p
0cd0: 61 63 6b 65 74 2e 27 2c 0a 20 20 20 20 20 20 20  acket.',.       
0ce0: 20 20 20 74 72 69 67 67 65 72 65 64 42 79 3a 20     triggeredBy: 
0cf0: 27 65 78 61 6d 70 6c 65 2e 75 73 2e 6c 65 64 67  'example.us.ledg
0d00: 65 72 33 2e 62 6f 62 27 2c 0a 20 20 20 20 20 20  er3.bob',.      
0d10: 20 20 20 20 64 61 74 61 3a 20 42 75 66 66 65 72      data: Buffer
0d20: 2e 61 6c 6c 6f 63 28 30 29 0a 20 20 20 20 20 20  .alloc(0).      
0d30: 20 20 7d 29 29 0a 20 20 20 20 20 20 7d 0a 0a 20    })).      }.. 
0d40: 20 20 20 20 20 61 77 61 69 74 20 65 78 70 65 63       await expec
0d50: 74 28 49 4c 51 50 2e 71 75 6f 74 65 28 74 68 69  t(ILQP.quote(thi
0d60: 73 2e 70 6c 75 67 69 6e 2c 20 74 68 69 73 2e 70  s.plugin, this.p
0d70: 61 72 61 6d 73 29 29 0a 20 20 20 20 20 20 20 20  arams)).        
0d80: 2e 74 6f 2e 62 65 2e 72 65 6a 65 63 74 65 64 57  .to.be.rejectedW
0d90: 69 74 68 28 2f 72 65 6d 6f 74 65 20 71 75 6f 74  ith(/remote quot
0da0: 65 20 65 72 72 6f 72 3a 20 69 6e 76 61 6c 69 64  e error: invalid
0db0: 20 70 61 63 6b 65 74 2e 2f 29 0a 20 20 20 20 7d   packet./).    }
0dc0: 29 0a 0a 20 20 20 20 64 65 73 63 72 69 62 65 28  )..    describe(
0dd0: 27 71 75 6f 74 65 42 79 50 61 63 6b 65 74 27 2c  'quoteByPacket',
0de0: 20 66 75 6e 63 74 69 6f 6e 20 28 29 20 7b 0a 20   function () {. 
0df0: 20 20 20 20 20 69 74 28 27 73 68 6f 75 6c 64 20       it('should 
0e00: 70 61 72 73 65 20 71 75 6f 74 65 20 70 61 72 61  parse quote para
0e10: 6d 73 20 66 72 6f 6d 20 70 61 63 6b 65 74 27 2c  ms from packet',
0e20: 20 61 73 79 6e 63 20 66 75 6e 63 74 69 6f 6e 20   async function 
0e30: 28 29 20 7b 0a 20 20 20 20 20 20 20 20 74 68 69  () {.        thi
0e40: 73 2e 70 6c 75 67 69 6e 2e 64 61 74 61 48 61 6e  s.plugin.dataHan
0e50: 64 6c 65 72 20 3d 20 28 70 61 63 6b 65 74 29 20  dler = (packet) 
0e60: 3d 3e 20 7b 0a 20 20 20 20 20 20 20 20 20 20 72  => {.          r
0e70: 65 74 75 72 6e 20 50 72 6f 6d 69 73 65 2e 72 65  eturn Promise.re
0e80: 73 6f 6c 76 65 28 49 6c 70 50 61 63 6b 65 74 2e  solve(IlpPacket.
0e90: 73 65 72 69 61 6c 69 7a 65 49 6c 71 70 42 79 44  serializeIlqpByD
0ea0: 65 73 74 69 6e 61 74 69 6f 6e 52 65 73 70 6f 6e  estinationRespon
0eb0: 73 65 28 7b 0a 20 20 20 20 20 20 20 20 20 20 20  se({.           
0ec0: 20 73 6f 75 72 63 65 41 6d 6f 75 6e 74 3a 20 27   sourceAmount: '
0ed0: 31 27 2c 0a 20 20 20 20 20 20 20 20 20 20 20 20  1',.            
0ee0: 73 6f 75 72 63 65 48 6f 6c 64 44 75 72 61 74 69  sourceHoldDurati
0ef0: 6f 6e 3a 20 35 30 30 30 0a 20 20 20 20 20 20 20  on: 5000.       
0f00: 20 20 20 7d 29 29 0a 20 20 20 20 20 20 20 20 7d     })).        }
0f10: 0a 0a 20 20 20 20 20 20 20 20 63 6f 6e 73 74 20  ..        const 
0f20: 72 65 73 70 6f 6e 73 65 20 3d 20 61 77 61 69 74  response = await
0f30: 20 49 4c 51 50 2e 71 75 6f 74 65 42 79 50 61 63   ILQP.quoteByPac
0f40: 6b 65 74 28 0a 20 20 20 20 20 20 20 20 20 20 74  ket(.          t
0f50: 68 69 73 2e 70 6c 75 67 69 6e 2c 0a 20 20 20 20  his.plugin,.    
0f60: 20 20 20 20 20 20 50 61 63 6b 65 74 2e 73 65 72        Packet.ser
0f70: 69 61 6c 69 7a 65 28 7b 0a 20 20 20 20 20 20 20  ialize({.       
0f80: 20 20 20 20 20 61 6d 6f 75 6e 74 3a 20 27 31 27       amount: '1'
0f90: 2c 0a 20 20 20 20 20 20 20 20 20 20 20 20 61 63  ,.            ac
0fa0: 63 6f 75 6e 74 3a 20 27 74 65 73 74 2e 6c 6f 63  count: 'test.loc
0fb0: 61 6c 2e 62 6f 62 27 0a 20 20 20 20 20 20 20 20  al.bob'.        
0fc0: 20 20 7d 29 2c 0a 20 20 20 20 20 20 20 20 20 20    }),.          
0fd0: 7b 0a 20 20 20 20 20 20 20 20 20 20 20 20 74 69  {.            ti
0fe0: 6d 65 6f 75 74 3a 20 31 30 30 0a 20 20 20 20 20  meout: 100.     
0ff0: 20 20 20 20 20 7d 0a 20 20 20 20 20 20 20 20 29       }.        )
1000: 0a 20 20 20 20 20 20 20 20 74 68 69 73 2e 72 65  .        this.re
1010: 73 75 6c 74 2e 65 78 70 69 72 65 73 41 74 20 3d  sult.expiresAt =
1020: 20 28 6e 65 77 20 44 61 74 65 28 72 65 73 70 6f   (new Date(respo
1030: 6e 73 65 2e 65 78 70 69 72 65 73 41 74 29 29 2e  nse.expiresAt)).
1040: 74 6f 49 53 4f 53 74 72 69 6e 67 28 29 0a 0a 20  toISOString().. 
1050: 20 20 20 20 20 20 20 61 73 73 65 72 74 2e 64 65         assert.de
1060: 65 70 45 71 75 61 6c 28 0a 20 20 20 20 20 20 20  epEqual(.       
1070: 20 20 20 72 65 73 70 6f 6e 73 65 2c 0a 20 20 20     response,.   
1080: 20 20 20 20 20 20 20 74 68 69 73 2e 72 65 73 75         this.resu
1090: 6c 74 29 0a 20 20 20 20 20 20 7d 29 0a 20 20 20  lt).      }).   
10a0: 20 7d 29 0a 20 20 7d 29 0a 0a 20 20 64 65 73 63   }).  })..  desc
10b0: 72 69 62 65 28 27 5f 67 65 74 43 68 65 61 70 65  ribe('_getCheape
10c0: 72 51 75 6f 74 65 27 2c 20 66 75 6e 63 74 69 6f  rQuote', functio
10d0: 6e 20 28 29 20 7b 0a 20 20 20 20 69 74 28 27 73  n () {.    it('s
10e0: 68 6f 75 6c 64 20 63 68 6f 6f 73 65 20 71 75 6f  hould choose quo
10f0: 74 65 31 20 69 66 20 69 74 20 63 6f 73 74 73 20  te1 if it costs 
1100: 6c 65 73 73 20 28 73 6f 75 72 63 65 29 27 2c 20  less (source)', 
1110: 66 75 6e 63 74 69 6f 6e 20 28 29 20 7b 0a 20 20  function () {.  
1120: 20 20 20 20 61 73 73 65 72 74 2e 64 65 65 70 45      assert.deepE
1130: 71 75 61 6c 28 0a 20 20 20 20 20 20 20 20 49 4c  qual(.        IL
1140: 51 50 2e 5f 67 65 74 43 68 65 61 70 65 72 51 75  QP._getCheaperQu
1150: 6f 74 65 28 7b 73 6f 75 72 63 65 41 6d 6f 75 6e  ote({sourceAmoun
1160: 74 3a 20 27 31 27 7d 2c 20 7b 73 6f 75 72 63 65  t: '1'}, {source
1170: 41 6d 6f 75 6e 74 3a 20 27 32 27 7d 29 2c 0a 20  Amount: '2'}),. 
1180: 20 20 20 20 20 20 20 7b 73 6f 75 72 63 65 41 6d         {sourceAm
1190: 6f 75 6e 74 3a 20 27 31 27 7d 29 0a 20 20 20 20  ount: '1'}).    
11a0: 7d 29 0a 0a 20 20 20 20 69 74 28 27 73 68 6f 75  })..    it('shou
11b0: 6c 64 20 63 68 6f 6f 73 65 20 71 75 6f 74 65 31  ld choose quote1
11c0: 20 69 66 20 69 74 20 70 61 79 73 20 6d 6f 72 65   if it pays more
11d0: 20 28 64 65 73 74 69 6e 61 74 69 6f 6e 29 27 2c   (destination)',
11e0: 20 66 75 6e 63 74 69 6f 6e 20 28 29 20 7b 0a 20   function () {. 
11f0: 20 20 20 20 20 61 73 73 65 72 74 2e 64 65 65 70       assert.deep
1200: 45 71 75 61 6c 28 0a 20 20 20 20 20 20 20 20 49  Equal(.        I
1210: 4c 51 50 2e 5f 67 65 74 43 68 65 61 70 65 72 51  LQP._getCheaperQ
1220: 75 6f 74 65 28 7b 64 65 73 74 69 6e 61 74 69 6f  uote({destinatio
1230: 6e 41 6d 6f 75 6e 74 3a 20 27 31 27 7d 2c 20 7b  nAmount: '1'}, {
1240: 64 65 73 74 69 6e 61 74 69 6f 6e 41 6d 6f 75 6e  destinationAmoun
1250: 74 3a 20 27 32 27 7d 29 2c 0a 20 20 20 20 20 20  t: '2'}),.      
1260: 20 20 7b 64 65 73 74 69 6e 61 74 69 6f 6e 41 6d    {destinationAm
1270: 6f 75 6e 74 3a 20 27 32 27 7d 29 0a 20 20 20 20  ount: '2'}).    
1280: 7d 29 0a 0a 20 20 20 20 69 74 28 27 73 68 6f 75  })..    it('shou
1290: 6c 64 20 63 68 6f 6f 73 65 20 71 75 6f 74 65 32  ld choose quote2
12a0: 20 6f 74 68 65 72 77 69 73 65 27 2c 20 66 75 6e   otherwise', fun
12b0: 63 74 69 6f 6e 20 28 29 20 7b 0a 20 20 20 20 20  ction () {.     
12c0: 20 61 73 73 65 72 74 2e 64 65 65 70 45 71 75 61   assert.deepEqua
12d0: 6c 28 0a 20 20 20 20 20 20 20 20 49 4c 51 50 2e  l(.        ILQP.
12e0: 5f 67 65 74 43 68 65 61 70 65 72 51 75 6f 74 65  _getCheaperQuote
12f0: 28 7b 64 65 73 74 69 6e 61 74 69 6f 6e 41 6d 6f  ({destinationAmo
1300: 75 6e 74 3a 20 27 31 27 7d 2c 20 7b 64 65 73 74  unt: '1'}, {dest
1310: 69 6e 61 74 69 6f 6e 41 6d 6f 75 6e 74 3a 20 27  inationAmount: '
1320: 31 27 7d 29 2c 0a 20 20 20 20 20 20 20 20 7b 64  1'}),.        {d
1330: 65 73 74 69 6e 61 74 69 6f 6e 41 6d 6f 75 6e 74  estinationAmount
1340: 3a 20 27 31 27 7d 29 0a 20 20 20 20 7d 29 0a 20  : '1'}).    }). 
1350: 20 7d 29 0a 7d 29 0a                              }).}).