Home Reference Source Test

test/1_unitTests/1_eventstore/sendCommand.test.ts

import * as assert from 'assert'
import {TCPConnection} from '../../../src/eventstore/TCPConnection'
import {setConnectionSettings} from '../../../src/eventstore/EventstoreSettings'
import uuid = require('uuid/v4')

describe('sendCommand', (): void => {
  class TestClass extends TCPConnection {
    public constructor() {
      super(
        setConnectionSettings({
          port: 0,
          host: '',
          operationTimeout: 100,
          operationTimeoutCheckPeriod: 100,
          connectTimeout: 1,
          maxQueueSize: 2
        })
      )
      this.state = 2
    }

    public addRequest(uuid: string, resolve: Function, reject: Function, sendTime: number): void {
      this.pendingRequests.set(uuid, {resolve, reject, sendTime})
    }
  }

  it('throws on maximum ', async (): Promise<void> => {
    const testClass = new TestClass()
    new Promise(
      (resolve, reject): void => {
        testClass.addRequest(uuid(), resolve, reject, Date.now())
      }
    )
    new Promise(
      (resolve, reject): void => {
        testClass.addRequest(uuid(), resolve, reject, Date.now())
      }
    )
    try {
      await new Promise(
        (resolve, reject): void => {
          testClass.sendCommand(uuid(), 0x03, Buffer.from(''), null, {resolve, reject})
        }
      )
      assert.fail('has not thrown')
    } catch (err) {
      assert.strictEqual(err.name, 'EventstoreConnectionError')
    }
  })

  it('throws on socket error', async (): Promise<void> => {
    const testClass = new TestClass()
    try {
      await new Promise(
        (resolve, reject): void => {
          testClass.sendCommand(uuid(), 0x03, Buffer.from(''), null, {resolve, reject})
        }
      )
      assert.fail('has not thrown')
    } catch (err) {
      assert.strictEqual(err.name, 'EventstoreConnectionError')
    }
  })
})