TestHelper.js 1.7 KB

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