Home Reference Source Test Repository

test/job.test.js

/* eslint-env mocha */

import { expect } from 'chai'
import _ from 'lodash'
import faker from 'faker'

import { sqoopClient, generateMysqlConfig, generateHdfsConfig, generateFromMysqlToHdfsConfig } from './index'

suite('job', () => {
  let firstJobName
  let secondJobName
  let thirdJobName
  let firstMysqlLinkName
  let firstHdfsLinkName

  before(async () => {
    firstMysqlLinkName = faker.name.firstName()
    const firstMysqlLinkConfig = generateMysqlConfig(firstMysqlLinkName)
    await sqoopClient.createLink(firstMysqlLinkConfig)

    firstHdfsLinkName = faker.name.firstName()
    const firstHdfsLinkConfig = generateHdfsConfig(firstHdfsLinkName)
    await sqoopClient.createLink(firstHdfsLinkConfig)

    firstJobName = faker.name.firstName()
    secondJobName = faker.name.firstName()

    thirdJobName = faker.name.firstName()
    const config = generateFromMysqlToHdfsConfig(thirdJobName, firstMysqlLinkName, firstHdfsLinkName)
    await sqoopClient.createJob(config)
  })

  test('createJobFromMysqlToJob', async () => {
    const config = generateFromMysqlToHdfsConfig(firstJobName, firstMysqlLinkName, firstHdfsLinkName)
    const data = await sqoopClient.createJob(config)
    expect(data).to.deep.equal({
      'name': firstJobName,
      'validation-result': [{}, {}, {}]
    })
  })

  test('getJobByJobName', async () => {
    const data = await sqoopClient.getJobByJobName(firstJobName)
    expect(_.get(data, 'jobs[0].name')).to.equal(firstJobName)
  })

  test('getJobByConnectorName', async () => {
    const data = await sqoopClient.getJobByConnectorName('hdfs-connector')
    const jobNames = _.map(data.jobs, 'name')
    expect(firstJobName).to.be.oneOf(jobNames)
  })

  test('updateJobFromMysqlToJob', async () => {
    const config = generateFromMysqlToHdfsConfig(secondJobName, firstMysqlLinkName, firstHdfsLinkName)
    const data = await sqoopClient.updateJobConfig(firstJobName, config)
    expect(data).to.deep.equal({'validation-result': [{}, {}, {}]})
  })

  test('getJobAll', async () => {
    const data = await sqoopClient.getJobAll()
    const jobNames = _.map(data.jobs, 'name')
    expect(secondJobName).to.be.oneOf(jobNames)
  })

  test('updateJobDisable', async () => {
    await sqoopClient.updateJobDisable(secondJobName)
    const data = await sqoopClient.getJobByJobName(secondJobName)
    expect(_.get(data, 'jobs[0].enabled')).to.be.false
  })

  test('updateJobEnable', async () => {
    await sqoopClient.updateJobEnable(secondJobName)
    const data = await sqoopClient.getJobByJobName(secondJobName)
    expect(_.get(data, 'jobs[0].enabled')).to.be.true
  })

  test('deleteJob', async () => {
    const data = await sqoopClient.deleteJob(secondJobName)
    expect(data).to.be.empty
  })

  test('jobStatus When not start', async () => {
    const data = await sqoopClient.jobStatus(thirdJobName)
    expect(_.get(data, 'submissions[0].job-name')).to.equal(thirdJobName)
    expect(_.get(data, 'submissions[0].status')).to.equal('NEVER_EXECUTED')
  })

  // next 4 test is ok for ec2, so remove `skip`.
  test('startJob', async () => {
    // const data = await sqoopClient.startJob(thirdJobName)
    // expect(_.get(data, 'submissions[0].job-name')).to.equal(thirdJobName)
    // expect(_.get(data, 'submissions[0].status')).to.equal('BOOTING')
  })

  test('jobStatus When start', async () => {
    // const data = await sqoopClient.jobStatus(thirdJobName)
    // expect(_.get(data, 'submissions[0].job-name')).to.equal(thirdJobName)
    // expect(_.get(data, 'submissions[0].status')).to.equal('BOOTING')
  })

  test('stopJob', async () => {
    // const data = await sqoopClient.stopJob(thirdJobName)
    // expect(_.get(data, 'submissions[0].job-name')).to.equal(thirdJobName)
    // expect(_.get(data, 'submissions[0].status')).to.equal('FAILED')
  })

  test('jobStatus When stop', async () => {
    // const data = await sqoopClient.jobStatus(thirdJobName)
    // expect(_.get(data, 'submissions[0].job-name')).to.equal(thirdJobName)
    // expect(_.get(data, 'submissions[0].status')).to.equal('FAILED')
  })
})