OpenSearch-Dashboards icon indicating copy to clipboard operation
OpenSearch-Dashboards copied to clipboard

[Test] local unit tests failed

Open ananzh opened this issue 3 years ago • 2 comments

See some failing unit tests from local development. CI is fine. Here is a summary of all the failing test cases:

Summary of all failing tests
 FAIL  src/plugins/data_source/server/cryptography/cryptography_client.test.ts
  ● Test encrpyt and decrypt module › Positive test cases › Encrypt and Decrypt with same in memory keyring

    Unsupported plaintext

      55 |    */
      56 |   public async encryptAndEncode(plainText: string): Promise<string> {
    > 57 |     const result = await this.encrypt(this.keyring, plainText);
         |                               ^
      58 |     return result.result.toString(ENCODING_STRATEGY);
      59 |   }
      60 |

      at Object.encrypt (node_modules/@aws-crypto/encrypt-node/src/encrypt.ts:54:11)
      at CryptographyClient.encryptAndEncode (src/plugins/data_source/server/cryptography/cryptography_client.ts:57:31)
      at Object.<anonymous> (src/plugins/data_source/server/cryptography/cryptography_client.test.ts:32:50)

  ● Test encrpyt and decrypt module › Positive test cases › Encrypt and Decrypt with two different keyrings with exact same identifiers

    Unsupported plaintext

      55 |    */
      56 |   public async encryptAndEncode(plainText: string): Promise<string> {
    > 57 |     const result = await this.encrypt(this.keyring, plainText);
         |                               ^
      58 |     return result.result.toString(ENCODING_STRATEGY);
      59 |   }
      60 |

      at Object.encrypt (node_modules/@aws-crypto/encrypt-node/src/encrypt.ts:54:11)
      at CryptographyClient.encryptAndEncode (src/plugins/data_source/server/cryptography/cryptography_client.ts:57:31)
      at Object.<anonymous> (src/plugins/data_source/server/cryptography/cryptography_client.test.ts:42:51)

  ● Test encrpyt and decrypt module › Negative test cases › Encrypt and Decrypt with different key names

    Unsupported plaintext

      55 |    */
      56 |   public async encryptAndEncode(plainText: string): Promise<string> {
    > 57 |     const result = await this.encrypt(this.keyring, plainText);
         |                               ^
      58 |     return result.result.toString(ENCODING_STRATEGY);
      59 |   }
      60 |

      at Object.encrypt (node_modules/@aws-crypto/encrypt-node/src/encrypt.ts:54:11)
      at CryptographyClient.encryptAndEncode (src/plugins/data_source/server/cryptography/cryptography_client.ts:57:31)
      at Object.<anonymous> (src/plugins/data_source/server/cryptography/cryptography_client.test.ts:65:51)

  ● Test encrpyt and decrypt module › Negative test cases › Encrypt and Decrypt with different key namespaces

    Unsupported plaintext

      55 |    */
      56 |   public async encryptAndEncode(plainText: string): Promise<string> {
    > 57 |     const result = await this.encrypt(this.keyring, plainText);
         |                               ^
      58 |     return result.result.toString(ENCODING_STRATEGY);
      59 |   }
      60 |

      at Object.encrypt (node_modules/@aws-crypto/encrypt-node/src/encrypt.ts:54:11)
      at CryptographyClient.encryptAndEncode (src/plugins/data_source/server/cryptography/cryptography_client.ts:57:31)
      at Object.<anonymous> (src/plugins/data_source/server/cryptography/cryptography_client.test.ts:84:51)

  ● Test encrpyt and decrypt module › Negative test cases › Encrypt and Decrypt with different wrapping keys

    Unsupported plaintext

      55 |    */
      56 |   public async encryptAndEncode(plainText: string): Promise<string> {
    > 57 |     const result = await this.encrypt(this.keyring, plainText);
         |                               ^
      58 |     return result.result.toString(ENCODING_STRATEGY);
      59 |   }
      60 |

      at Object.encrypt (node_modules/@aws-crypto/encrypt-node/src/encrypt.ts:54:11)
      at CryptographyClient.encryptAndEncode (src/plugins/data_source/server/cryptography/cryptography_client.ts:57:31)
      at Object.<anonymous> (src/plugins/data_source/server/cryptography/cryptography_client.test.ts:103:51)


Test Suites: 1 failed, 1 skipped, 1495 passed, 1496 of 1497 total
Tests:       5 failed, 24 skipped, 9 todo, 11329 passed, 11367 total
Snapshots:   2504 passed, 2504 total
Time:        136.72 s

ananzh avatar Sep 29 '22 22:09 ananzh

Running single suite passed.

yarn test:jest src/plugins/data_source/server/cryptography/cryptography_client.test.ts 
yarn run v1.22.19
$ node scripts/jest src/plugins/data_source/server/cryptography/cryptography_client.test.ts
 PASS  src/plugins/data_source/server/cryptography/cryptography_client.test.ts
  ✓ Invalid wrapping key size throws error (4 ms)
  Test encrpyt and decrypt module
    Positive test cases
      ✓ Encrypt and Decrypt with same in memory keyring (59 ms)
      ✓ Encrypt and Decrypt with two different keyrings with exact same identifiers (31 ms)
    Negative test cases
      ✓ Encrypt and Decrypt with different key names (35 ms)
      ✓ Encrypt and Decrypt with different key namespaces (41 ms)
      ✓ Encrypt and Decrypt with different wrapping keys (29 ms)

Test Suites: 1 passed, 1 total
Tests:       6 passed, 6 total
Snapshots:   0 total
Time:        3.558 s, estimated 7 s
Ran all test suites matching /src\/plugins\/data_source\/server\/cryptography\/cryptography_client.test.ts/i.
✨  Done in 9.71s.

Running multiple suites serially also passed.

% yarn test:jest:ci src/plugins/data_source/server
yarn run v1.22.19
$ node scripts/jest --ci --colors --runInBand src/plugins/data_source/server
 PASS  src/plugins/data_source/server/cryptography/cryptography_client.test.ts
 PASS  src/plugins/data_source/server/client/configure_client.test.ts
 PASS  src/plugins/data_source/server/client/client_pool.test.ts
 PASS  src/plugins/data_source/server/client/client_config.test.ts
 PASS  src/plugins/data_source/server/lib/error.test.ts
 PASS  src/plugins/data_source/server/legacy/configure_legacy_client.test.ts
 PASS  src/plugins/data_source/server/legacy/client_config.test.ts
 PASS  src/plugins/data_source/server/data_source_service.test.ts

Test Suites: 8 passed, 8 total
Tests:       19 passed, 19 total
Snapshots:   0 total
Time:        9.061 s, estimated 13 s
Ran all test suites matching /src\/plugins\/data_source\/server/i.
✨  Done in 12.23s.

Seems to be a race condition when there's a worker pool of child processes that run tests. Need to dive deep.

noCharger avatar Sep 30 '22 00:09 noCharger

Created Jest issue https://github.com/facebook/jest/issues/13349

I couldn't find much public information about how jest passes global configs when creating child processes. I'll also look into the Jest codebase for more information.

noCharger avatar Sep 30 '22 22:09 noCharger

I think we could close it now. I don't see any local failed unit tests.

ananzh avatar Apr 11 '23 20:04 ananzh

We had the same issue using

  globals: {
    Uint8Array: Uint8Array,
  },

workaround I find is to add Uint8Array = Buffer.__proto__ to a file referenced in setupFiles instead of globals option from the above.

https://jestjs.io/docs/configuration#globals-object Also, Jest suggests using setupFiles over globals if we need to put an object or function there.

davidyuk avatar Jul 14 '23 02:07 davidyuk