datasource.test.ts 4.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144
  1. import StackdriverDataSource from '../datasource';
  2. import { metricDescriptors } from './testData';
  3. import moment from 'moment';
  4. describe('StackdriverDataSource', () => {
  5. describe('when performing testDataSource', () => {
  6. describe('and call to stackdriver api succeeds', () => {
  7. let ds;
  8. let result;
  9. beforeEach(async () => {
  10. const backendSrv = {
  11. async datasourceRequest() {
  12. return Promise.resolve({ status: 200 });
  13. },
  14. };
  15. ds = new StackdriverDataSource({}, backendSrv);
  16. result = await ds.testDatasource();
  17. });
  18. it('should return successfully', () => {
  19. expect(result.status).toBe('success');
  20. });
  21. });
  22. describe('and a list of metricDescriptors are returned', () => {
  23. let ds;
  24. let result;
  25. beforeEach(async () => {
  26. const backendSrv = {
  27. datasourceRequest: async () => Promise.resolve({ status: 200, data: metricDescriptors }),
  28. };
  29. ds = new StackdriverDataSource({}, backendSrv);
  30. result = await ds.testDatasource();
  31. });
  32. it('should return status success', () => {
  33. expect(result.status).toBe('success');
  34. });
  35. });
  36. describe('and call to stackdriver api fails with 400 error', () => {
  37. let ds;
  38. let result;
  39. beforeEach(async () => {
  40. const backendSrv = {
  41. datasourceRequest: async () =>
  42. Promise.reject({
  43. statusText: 'Bad Request',
  44. data: { error: { code: 400, message: 'Field interval.endTime had an invalid value' } },
  45. }),
  46. };
  47. ds = new StackdriverDataSource({}, backendSrv);
  48. result = await ds.testDatasource();
  49. });
  50. it('should return error status and a detailed error message', () => {
  51. expect(result.status).toEqual('error');
  52. expect(result.message).toBe('Stackdriver: Bad Request: 400. Field interval.endTime had an invalid value');
  53. });
  54. });
  55. });
  56. describe('when performing getProjects', () => {
  57. describe('and call to resource manager api succeeds', () => {
  58. let ds;
  59. let result;
  60. beforeEach(async () => {
  61. const response = {
  62. projects: [
  63. {
  64. projectNumber: '853996325002',
  65. projectId: 'test-project',
  66. lifecycleState: 'ACTIVE',
  67. name: 'Test Project',
  68. createTime: '2015-06-02T14:16:08.520Z',
  69. parent: {
  70. type: 'organization',
  71. id: '853996325002',
  72. },
  73. },
  74. ],
  75. };
  76. const backendSrv = {
  77. async datasourceRequest() {
  78. return Promise.resolve({ status: 200, data: response });
  79. },
  80. };
  81. ds = new StackdriverDataSource({}, backendSrv);
  82. result = await ds.getProjects();
  83. });
  84. it('should return successfully', () => {
  85. expect(result.length).toBe(1);
  86. expect(result[0].id).toBe('test-project');
  87. expect(result[0].name).toBe('Test Project');
  88. });
  89. });
  90. });
  91. describe('When performing query', () => {
  92. const options = {
  93. range: {
  94. from: moment.utc('2017-08-22T20:00:00Z'),
  95. to: moment.utc('2017-08-22T23:59:00Z'),
  96. },
  97. rangeRaw: {
  98. from: 'now-4h',
  99. to: 'now',
  100. },
  101. targets: [
  102. {
  103. refId: 'A',
  104. },
  105. ],
  106. };
  107. describe('and no time series data is returned', () => {
  108. let ds;
  109. const response = {
  110. results: {
  111. A: {
  112. refId: 'A',
  113. meta: {
  114. rawQuery: 'arawquerystring',
  115. },
  116. series: null,
  117. tables: null,
  118. },
  119. },
  120. };
  121. beforeEach(() => {
  122. const backendSrv = {
  123. datasourceRequest: async () => Promise.resolve({ status: 200, data: response }),
  124. };
  125. ds = new StackdriverDataSource({}, backendSrv);
  126. });
  127. it('should return a list of datapoints', () => {
  128. return ds.query(options).then(results => {
  129. expect(results.data.length).toBe(0);
  130. });
  131. });
  132. });
  133. });
  134. });