TestHelper.js 1.6 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253
  1. const streamifier = require('streamifier')
  2. const fetch = require('node-fetch')
  3. const { expect } = require('chai')
  4. module.exports = {
  5. uploadStringToPersistor,
  6. getStringFromPersistor,
  7. expectPersistorToHaveFile,
  8. expectPersistorNotToHaveFile,
  9. streamToString,
  10. getMetric,
  11. }
  12. async function getMetric(filestoreUrl, metric) {
  13. const res = await fetch(`${filestoreUrl}/metrics`)
  14. expect(res.status).to.equal(200)
  15. const metricRegex = new RegExp(`^${metric}{[^}]+} ([0-9]+)$`, 'm')
  16. const body = await res.text()
  17. const found = metricRegex.exec(body)
  18. return parseInt(found ? found[1] : 0) || 0
  19. }
  20. function streamToString(stream) {
  21. const chunks = []
  22. return new Promise((resolve, reject) => {
  23. stream.on('data', chunk => chunks.push(chunk))
  24. stream.on('error', reject)
  25. stream.on('end', () => resolve(Buffer.concat(chunks).toString('utf8')))
  26. stream.resume()
  27. })
  28. }
  29. async function uploadStringToPersistor(persistor, bucket, key, content) {
  30. const fileStream = streamifier.createReadStream(content)
  31. await persistor.sendStream(bucket, key, fileStream)
  32. }
  33. async function getStringFromPersistor(persistor, bucket, key) {
  34. const stream = await persistor.getObjectStream(bucket, key, {})
  35. return await streamToString(stream)
  36. }
  37. async function expectPersistorToHaveFile(persistor, bucket, key, content) {
  38. const foundContent = await getStringFromPersistor(persistor, bucket, key)
  39. expect(foundContent).to.equal(content)
  40. }
  41. async function expectPersistorNotToHaveFile(persistor, bucket, key) {
  42. await expect(
  43. getStringFromPersistor(persistor, bucket, key)
  44. ).to.eventually.have.been.rejected.with.property('name', 'NotFoundError')
  45. }